aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/obsolete
diff options
context:
space:
mode:
authorAndrea Adami <andrea.adami@gmail.com>2010-10-03 18:56:43 +0200
committerAndrea Adami <andrea.adami@gmail.com>2010-10-03 20:58:32 +0200
commit65e34b9c63d661a52abcbf952bcc1c7c78a0c8da (patch)
tree4e1435d5a59b6fea839a2a58a2a751a8328b08b1 /recipes/obsolete
parent86822c3ae68dad2d25f4429221e76eb92dc0cdfe (diff)
downloadopenembedded-65e34b9c63d661a52abcbf952bcc1c7c78a0c8da.tar.gz
kernels-2.4-embedix: move unsupported recipes to obsolete
Diffstat (limited to 'recipes/obsolete')
-rw-r--r--recipes/obsolete/linux/c7x0-kernels-2.4-embedix.bb17
-rw-r--r--recipes/obsolete/linux/collie-kernel-24-8_2.4.18-rmk7-pxa3-embedix20030509.bb4
-rw-r--r--recipes/obsolete/linux/collie-kernel-32-0_2.4.18-rmk7-pxa3-embedix20030509.bb4
-rw-r--r--recipes/obsolete/linux/collie-kernel-32-32_2.4.18-rmk7-pxa3-embedix20030509.bb4
-rw-r--r--recipes/obsolete/linux/collie-kernel-40-24_2.4.18-rmk7-pxa3-embedix20030509.bb4
-rw-r--r--recipes/obsolete/linux/collie-kernel-48-16_2.4.18-rmk7-pxa3-embedix20030509.bb4
-rw-r--r--recipes/obsolete/linux/collie-kernel-58-6-debug_2.4.18-rmk7-pxa3-embedix20030509.bb8
-rw-r--r--recipes/obsolete/linux/collie-kernel-58-6_2.4.18-rmk7-pxa3-embedix20030509.bb4
-rw-r--r--recipes/obsolete/linux/collie-kernel-64-0_2.4.18-rmk7-pxa3-embedix20030509.bb4
-rw-r--r--recipes/obsolete/linux/collie-kernels-2.4-embedix.bb17
-rw-r--r--recipes/obsolete/linux/corgi-kernel-2.4-embedix.bb3
-rw-r--r--recipes/obsolete/linux/files/ir240_sys_max_tx-2.diff110
-rw-r--r--recipes/obsolete/linux/files/ir241_qos_param-2.diff164
-rw-r--r--recipes/obsolete/linux/files/iw240_we15-6.diff399
-rw-r--r--recipes/obsolete/linux/files/iw249_we16-6.diff670
-rw-r--r--recipes/obsolete/linux/files/iw_handlers.w13-5.diff1513
-rw-r--r--recipes/obsolete/linux/files/iw_handlers.w14-5.diff838
-rw-r--r--recipes/obsolete/linux/files/linux-2.4.18-list_move.patch32
-rw-r--r--recipes/obsolete/linux/husky-kernel-2.4-embedix.bb5
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/1764-1.patch16
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/apm_arrowkey.patch32
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/bluecard_cs.patch11
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/bluetooth-2.4.18-mh15.patch32759
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/bt950_cs.patch1174
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/buffered-fbmem.patch19
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/compile.patch14
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/corgi-default-brightness.patch16
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/corgi-fbcon-logo.patch281
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-corgi1304
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-husky1304
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-poodle1158
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-poodle2551158
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-shepherd1303
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-tosa1379
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/deviceinfo.patch26
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/disable-pcmcia-probe.patch17
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/dumb-hack-for-wlan-ng.patch16
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/enable-sysrq.patch61
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/fix_tosa_apm.patch72
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/idecs.patch77
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/initsh.patch14
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/keyboard-ctrl+alt.patch79
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/keymap-more-sane.patch23
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/logo.patch2598
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/mkdep.patch16
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/module_licence.patch96
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/piro.patch75444
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/sharpsl_battery.patch346
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/smallfonts.diff2453
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/swap-performance.patch19
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/tosa-power-key-off.patch144
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/tosa_map.patch889
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/tosa_ts.patch207
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/unb0rk-apm.patch102
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/usb-storage.patch3433
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/1764-1.patch16
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/CPAR050218.patch422
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P01-C3000-clockup_050221.patch202
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P02++050226.patch221
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P02-C3000-voltage_050221.patch179
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P03-C3000-SIGSTOP_FIX_041207.patch195
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P04-C3000-UNICON_041206.patch40089
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P05-C3000-TSPRESSURE_041207.patch235
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P06-C3000-WRITETS_041206.patch107
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P07-C3000-KBDDEV_041206.patch115
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P08-rtc-mremap-mremap2nd-fix_041213.patch140
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P09-ext3-isofs-fix_041216.patch359
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P10-ntfs-fix_041216.patch25
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P11-bluetooth-mh18_041216.patch16593
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P12-fbcon-fix_041219.patch51
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P14-lowlatency_041221.patch1677
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P17-bvdd_050222.patch1506
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P18-detailed_battery_050309.patch102
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/add-oz-release-string.patch24
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/armdeffix.patch13
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/bluecard_cs.patch11
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/compile.patch14
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/corgi-default-brightness.patch19
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/corgi-fbcon-logo.patch281
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/defconfig-akita1365
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/defconfig-borzoi1364
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/defconfig-spitz1364
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/deviceinfo.patch26
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/disable-pcmcia-probe.patch17
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/idecs.patch78
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/initsh.patch14
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/logo.patch2598
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/saner-spitz-keymap.patch225
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/swap-performance.patch19
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/tosa_ts.patch207
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa27x_2.4.20-rmk2-embedix20050602.bb99
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.bb2
-rw-r--r--recipes/obsolete/linux/openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc124
-rw-r--r--recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/1764-1.patch16
-rw-r--r--recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/battery.patch326
-rw-r--r--recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/bluetooth-2.4.18-mh15.patch32759
-rw-r--r--recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/bluetooth-patch-2.4.18-mh9.diff30831
-rw-r--r--recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/cacko.patch38963
-rw-r--r--recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/defconfig-collie1177
-rw-r--r--recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/disable-pcmcia-probe.patch17
-rw-r--r--recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/idecs.patch77
-rw-r--r--recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/initsh.patch14
-rw-r--r--recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/keymap-more-sane.patch19
-rw-r--r--recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/logo.patch2598
-rw-r--r--recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/mkdep.patch16
-rw-r--r--recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/module_licence.patch81
-rw-r--r--recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/sound-2.4.18r2.patch5602
-rw-r--r--recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/unb0rk-apm.patch99
-rw-r--r--recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/unb0rk-rightarrow.patch28
-rw-r--r--recipes/obsolete/linux/openzaurus-sa_2.4.18-rmk7-pxa3-embedix20030509.bb100
-rw-r--r--recipes/obsolete/linux/poodle-kernel-2.4-embedix.bb4
-rw-r--r--recipes/obsolete/linux/poodle-kernels-2.4-embedix.bb7
-rw-r--r--recipes/obsolete/linux/poodle255-kernel-2.4-embedix.bb4
-rw-r--r--recipes/obsolete/linux/shepherd-kernel-2.4-embedix.bb5
114 files changed, 314705 insertions, 0 deletions
diff --git a/recipes/obsolete/linux/c7x0-kernels-2.4-embedix.bb b/recipes/obsolete/linux/c7x0-kernels-2.4-embedix.bb
new file mode 100644
index 0000000000..95bdfbce61
--- /dev/null
+++ b/recipes/obsolete/linux/c7x0-kernels-2.4-embedix.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Build all c7x0 kernels in one go"
+SECTION = "kernel"
+LICENSE = "GPLv2"
+PROVIDES = "virtual/kernel"
+PR = "r1"
+
+COMPATIBLE_HOST = "arm.*-linux"
+
+# For these old 2.4 kernels we override in sharprom-compatible.conf
+#COMPATIBLE_MACHINE = "(corgi|husky|shepherd)"
+COMPATIBLE_MACHINE = "none"
+
+DEPENDS = "corgi-kernel-2.4-embedix shepherd-kernel-2.4-embedix husky-kernel-2.4-embedix"
+
+PACKAGES = ""
+EXCLUDE_FROM_WORLD = "1"
+
diff --git a/recipes/obsolete/linux/collie-kernel-24-8_2.4.18-rmk7-pxa3-embedix20030509.bb b/recipes/obsolete/linux/collie-kernel-24-8_2.4.18-rmk7-pxa3-embedix20030509.bb
new file mode 100644
index 0000000000..42c71f14b0
--- /dev/null
+++ b/recipes/obsolete/linux/collie-kernel-24-8_2.4.18-rmk7-pxa3-embedix20030509.bb
@@ -0,0 +1,4 @@
+COLLIE_MEMORY_SIZE = "24"
+COLLIE_RAMDISK_SIZE = "8"
+
+require ../linux/openzaurus-sa_2.4.18-rmk7-pxa3-embedix20030509.bb
diff --git a/recipes/obsolete/linux/collie-kernel-32-0_2.4.18-rmk7-pxa3-embedix20030509.bb b/recipes/obsolete/linux/collie-kernel-32-0_2.4.18-rmk7-pxa3-embedix20030509.bb
new file mode 100644
index 0000000000..aa719ee618
--- /dev/null
+++ b/recipes/obsolete/linux/collie-kernel-32-0_2.4.18-rmk7-pxa3-embedix20030509.bb
@@ -0,0 +1,4 @@
+COLLIE_MEMORY_SIZE = "32"
+COLLIE_RAMDISK_SIZE = "0"
+
+require ../linux/openzaurus-sa_2.4.18-rmk7-pxa3-embedix20030509.bb
diff --git a/recipes/obsolete/linux/collie-kernel-32-32_2.4.18-rmk7-pxa3-embedix20030509.bb b/recipes/obsolete/linux/collie-kernel-32-32_2.4.18-rmk7-pxa3-embedix20030509.bb
new file mode 100644
index 0000000000..e5695f9a0b
--- /dev/null
+++ b/recipes/obsolete/linux/collie-kernel-32-32_2.4.18-rmk7-pxa3-embedix20030509.bb
@@ -0,0 +1,4 @@
+COLLIE_MEMORY_SIZE = "32"
+COLLIE_RAMDISK_SIZE = "32"
+
+require ../linux/openzaurus-sa_2.4.18-rmk7-pxa3-embedix20030509.bb
diff --git a/recipes/obsolete/linux/collie-kernel-40-24_2.4.18-rmk7-pxa3-embedix20030509.bb b/recipes/obsolete/linux/collie-kernel-40-24_2.4.18-rmk7-pxa3-embedix20030509.bb
new file mode 100644
index 0000000000..f5e18fd803
--- /dev/null
+++ b/recipes/obsolete/linux/collie-kernel-40-24_2.4.18-rmk7-pxa3-embedix20030509.bb
@@ -0,0 +1,4 @@
+COLLIE_MEMORY_SIZE = "40"
+COLLIE_RAMDISK_SIZE = "24"
+
+require ../linux/openzaurus-sa_2.4.18-rmk7-pxa3-embedix20030509.bb
diff --git a/recipes/obsolete/linux/collie-kernel-48-16_2.4.18-rmk7-pxa3-embedix20030509.bb b/recipes/obsolete/linux/collie-kernel-48-16_2.4.18-rmk7-pxa3-embedix20030509.bb
new file mode 100644
index 0000000000..7bb51fc920
--- /dev/null
+++ b/recipes/obsolete/linux/collie-kernel-48-16_2.4.18-rmk7-pxa3-embedix20030509.bb
@@ -0,0 +1,4 @@
+COLLIE_MEMORY_SIZE = "48"
+COLLIE_RAMDISK_SIZE = "16"
+
+require ../linux/openzaurus-sa_2.4.18-rmk7-pxa3-embedix20030509.bb
diff --git a/recipes/obsolete/linux/collie-kernel-58-6-debug_2.4.18-rmk7-pxa3-embedix20030509.bb b/recipes/obsolete/linux/collie-kernel-58-6-debug_2.4.18-rmk7-pxa3-embedix20030509.bb
new file mode 100644
index 0000000000..47b331b34d
--- /dev/null
+++ b/recipes/obsolete/linux/collie-kernel-58-6-debug_2.4.18-rmk7-pxa3-embedix20030509.bb
@@ -0,0 +1,8 @@
+COLLIE_MEMORY_SIZE = "58"
+COLLIE_RAMDISK_SIZE = "6"
+KERNEL_CONSOLE = "tty0"
+
+require ../linux/openzaurus-sa_2.4.18-rmk7-pxa3-embedix20030509.bb
+
+KERNEL_IMAGE_BASE_NAME = "${KERNEL_IMAGETYPE}-${MACHINE}-${COLLIE_MEMORY_SIZE}-${COLLIE_RAMDISK_SIZE}-DEBUG-${DATETIME}.bin"
+KERNEL_IMAGE_SYMLINK_NAME = "${KERNEL_IMAGETYPE}-${MACHINE}-${COLLIE_MEMORY_SIZE}-${COLLIE_RAMDISK_SIZE}-DEBUG.bin"
diff --git a/recipes/obsolete/linux/collie-kernel-58-6_2.4.18-rmk7-pxa3-embedix20030509.bb b/recipes/obsolete/linux/collie-kernel-58-6_2.4.18-rmk7-pxa3-embedix20030509.bb
new file mode 100644
index 0000000000..bafee1a61b
--- /dev/null
+++ b/recipes/obsolete/linux/collie-kernel-58-6_2.4.18-rmk7-pxa3-embedix20030509.bb
@@ -0,0 +1,4 @@
+COLLIE_MEMORY_SIZE = "58"
+COLLIE_RAMDISK_SIZE = "6"
+
+require ../linux/openzaurus-sa_2.4.18-rmk7-pxa3-embedix20030509.bb
diff --git a/recipes/obsolete/linux/collie-kernel-64-0_2.4.18-rmk7-pxa3-embedix20030509.bb b/recipes/obsolete/linux/collie-kernel-64-0_2.4.18-rmk7-pxa3-embedix20030509.bb
new file mode 100644
index 0000000000..c63881f29f
--- /dev/null
+++ b/recipes/obsolete/linux/collie-kernel-64-0_2.4.18-rmk7-pxa3-embedix20030509.bb
@@ -0,0 +1,4 @@
+COLLIE_MEMORY_SIZE = "64"
+COLLIE_RAMDISK_SIZE = "0"
+
+require ../linux/openzaurus-sa_2.4.18-rmk7-pxa3-embedix20030509.bb
diff --git a/recipes/obsolete/linux/collie-kernels-2.4-embedix.bb b/recipes/obsolete/linux/collie-kernels-2.4-embedix.bb
new file mode 100644
index 0000000000..d5f9a7d749
--- /dev/null
+++ b/recipes/obsolete/linux/collie-kernels-2.4-embedix.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "Build all collie kernels in one go"
+SECTION = "kernel"
+LICENSE = "GPLv2"
+PROVIDES = "virtual/kernel"
+PR = "r2"
+
+COMPATIBLE_HOST = "arm.*-linux"
+
+# For these old 2.4 kernels we override in sharprom-compatible.conf
+#COMPATIBLE_MACHINE = "collie"
+COMPATIBLE_MACHINE = "none"
+
+
+DEPENDS = '${@base_conditional("DISTRO_TYPE", "debug", "openzaurus-sa", "collie-kernel-64-0 collie-kernel-24-8 collie-kernel-32-0 collie-kernel-32-32 collie-kernel-40-24 collie-kernel-48-16 collie-kernel-58-6",d)}'
+PACKAGES = ""
+EXCLUDE_FROM_WORLD = "1"
+
diff --git a/recipes/obsolete/linux/corgi-kernel-2.4-embedix.bb b/recipes/obsolete/linux/corgi-kernel-2.4-embedix.bb
new file mode 100644
index 0000000000..986ee7ac40
--- /dev/null
+++ b/recipes/obsolete/linux/corgi-kernel-2.4-embedix.bb
@@ -0,0 +1,3 @@
+MACHINE = "corgi"
+COMPATIBLE_HOST = "arm.*-linux"
+require openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc
diff --git a/recipes/obsolete/linux/files/ir240_sys_max_tx-2.diff b/recipes/obsolete/linux/files/ir240_sys_max_tx-2.diff
new file mode 100644
index 0000000000..5f1307d7dc
--- /dev/null
+++ b/recipes/obsolete/linux/files/ir240_sys_max_tx-2.diff
@@ -0,0 +1,110 @@
+--- linux/net/irda/irsysctl.c.orig 2003-05-13 11:20:16.000000000 +0200
++++ linux/net/irda/irsysctl.c 2005-01-22 18:39:40.496001712 +0100
+@@ -40,7 +40,8 @@
+
+ enum { DISCOVERY=1, DEVNAME, DEBUG, FAST_POLL, DISCOVERY_SLOTS,
+ DISCOVERY_TIMEOUT, SLOT_TIMEOUT, MAX_BAUD_RATE, MIN_TX_TURN_TIME,
+- MAX_NOREPLY_TIME, WARN_NOREPLY_TIME, LAP_KEEPALIVE_TIME, SPECIFIC_DEV };
++ MAX_TX_DATA_SIZE, MAX_NOREPLY_TIME, WARN_NOREPLY_TIME, LAP_KEEPALIVE_TIME,
++ SPECIFIC_DEV };
+
+ extern int sysctl_discovery;
+ extern int sysctl_discovery_slots;
+@@ -51,6 +52,7 @@
+ extern char sysctl_devname[];
+ extern int sysctl_max_baud_rate;
+ extern int sysctl_min_tx_turn_time;
++extern int sysctl_max_tx_data_size;
+ extern int sysctl_max_noreply_time;
+ extern int sysctl_warn_noreply_time;
+ extern int sysctl_lap_keepalive_time;
+@@ -71,6 +73,8 @@
+ static int min_max_baud_rate = 2400;
+ static int max_min_tx_turn_time = 10000; /* See qos.c - IrLAP spec */
+ static int min_min_tx_turn_time = 0;
++static int max_max_tx_data_size = 2048; /* See qos.c - IrLAP spec */
++static int min_max_tx_data_size = 64;
+ static int max_max_noreply_time = 40; /* See qos.c - IrLAP spec */
+ static int min_max_noreply_time = 3;
+ static int max_warn_noreply_time = 3; /* 3s == standard */
+@@ -128,6 +132,9 @@
+ { MIN_TX_TURN_TIME, "min_tx_turn_time", &sysctl_min_tx_turn_time,
+ sizeof(int), 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec,
+ NULL, &min_min_tx_turn_time, &max_min_tx_turn_time },
++ { MAX_TX_DATA_SIZE, "max_tx_data_size", &sysctl_max_tx_data_size,
++ sizeof(int), 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec,
++ NULL, &min_max_tx_data_size, &max_max_tx_data_size },
+ { MAX_NOREPLY_TIME, "max_noreply_time", &sysctl_max_noreply_time,
+ sizeof(int), 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec,
+ NULL, &min_max_noreply_time, &max_max_noreply_time },
+--- linux/net/irda/qos.c.orig 2003-05-13 11:20:16.000000000 +0200
++++ linux/net/irda/qos.c 2005-01-22 18:36:46.759413688 +0100
+@@ -60,10 +60,26 @@
+ * Nonzero values (usec) are used as lower limit to the per-connection
+ * mtt value which was announced by the other end during negotiation.
+ * Might be helpful if the peer device provides too short mtt.
+- * Default is 10 which means using the unmodified value given by the peer
+- * except if it's 0 (0 is likely a bug in the other stack).
++ * Default is 10us which means using the unmodified value given by the
++ * peer except if it's 0 (0 is likely a bug in the other stack).
+ */
+ unsigned sysctl_min_tx_turn_time = 10;
++/*
++ * Maximum data size to be used in transmission in payload of LAP frame.
++ * There is a bit of confusion in the IrDA spec :
++ * The LAP spec defines the payload of a LAP frame (I field) to be
++ * 2048 bytes max (IrLAP 1.1, chapt 6.6.5, p40).
++ * On the other hand, the PHY mention frames of 2048 bytes max (IrPHY
++ * 1.2, chapt 5.3.2.1, p41). But, this number includes the LAP header
++ * (2 bytes), and CRC (32 bits at 4 Mb/s). So, for the I field (LAP
++ * payload), that's only 2042 bytes. Oups !
++ * I've had trouble trouble transmitting 2048 bytes frames with USB
++ * dongles and nsc-ircc at 4 Mb/s, so adjust to 2042... I don't know
++ * if this bug applies only for 2048 bytes frames or all negociated
++ * frame sizes, but all hardware seem to support "2048 bytes" frames.
++ * You can use the sysctl to play with this value anyway.
++ * Jean II */
++unsigned sysctl_max_tx_data_size = 2042;
+
+ /*
+ * Specific device list limits some negotiation parameters at the connection
+@@ -398,10 +414,10 @@
+ while ((qos->data_size.value > line_capacity) && (index > 0)) {
+ qos->data_size.value = data_sizes[index--];
+ IRDA_DEBUG(2, __FUNCTION__
+- "(), redusing data size to %d\n",
++ "(), reducing data size to %d\n",
+ qos->data_size.value);
+ }
+-#else /* Use method descibed in section 6.6.11 of IrLAP */
++#else /* Use method described in section 6.6.11 of IrLAP */
+ while (irlap_requested_line_capacity(qos) > line_capacity) {
+ ASSERT(index != 0, return;);
+
+@@ -409,18 +425,24 @@
+ if (qos->window_size.value > 1) {
+ qos->window_size.value--;
+ IRDA_DEBUG(2, __FUNCTION__
+- "(), redusing window size to %d\n",
++ "(), reducing window size to %d\n",
+ qos->window_size.value);
+ } else if (index > 1) {
+ qos->data_size.value = data_sizes[index--];
+ IRDA_DEBUG(2, __FUNCTION__
+- "(), redusing data size to %d\n",
++ "(), reducing data size to %d\n",
+ qos->data_size.value);
+ } else {
+ WARNING(__FUNCTION__ "(), nothing more we can do!\n");
+ }
+ }
+ #endif /* CONFIG_IRDA_DYNAMIC_WINDOW */
++ /*
++ * Fix tx data size according to user limits - Jean II
++ */
++ if (qos->data_size.value > sysctl_max_tx_data_size)
++ /* Allow non discrete adjustement to avoid loosing capacity */
++ qos->data_size.value = sysctl_max_tx_data_size;
+ }
+
+ /*
diff --git a/recipes/obsolete/linux/files/ir241_qos_param-2.diff b/recipes/obsolete/linux/files/ir241_qos_param-2.diff
new file mode 100644
index 0000000000..dfe77c52b0
--- /dev/null
+++ b/recipes/obsolete/linux/files/ir241_qos_param-2.diff
@@ -0,0 +1,164 @@
+--- linux/net/irda/qos.c.orig 2005-01-22 19:19:56.013787192 +0100
++++ linux/net/irda/qos.c 2005-01-22 19:21:13.493008560 +0100
+@@ -73,13 +73,18 @@
+ * 1.2, chapt 5.3.2.1, p41). But, this number includes the LAP header
+ * (2 bytes), and CRC (32 bits at 4 Mb/s). So, for the I field (LAP
+ * payload), that's only 2042 bytes. Oups !
+- * I've had trouble trouble transmitting 2048 bytes frames with USB
+- * dongles and nsc-ircc at 4 Mb/s, so adjust to 2042... I don't know
+- * if this bug applies only for 2048 bytes frames or all negociated
+- * frame sizes, but all hardware seem to support "2048 bytes" frames.
+- * You can use the sysctl to play with this value anyway.
++ * My nsc-ircc hardware has troubles receiving 2048 bytes frames at 4 Mb/s,
++ * so adjust to 2042... I don't know if this bug applies only for 2048
++ * bytes frames or all negociated frame sizes, but you can use the sysctl
++ * to play with this value anyway.
+ * Jean II */
+ unsigned sysctl_max_tx_data_size = 2042;
++/*
++ * Maximum transmit window, i.e. number of LAP frames between turn-around.
++ * This allow to override what the peer told us. Some peers are buggy and
++ * don't always support what they tell us.
++ * Jean II */
++unsigned sysctl_max_tx_window = 7;
+
+ /*
+ * Specific device list limits some negotiation parameters at the connection
+@@ -227,7 +232,19 @@
+ {
+ __u16 msb = 0x8000;
+ int index = 15; /* Current MSB */
+-
++
++ /* Check for buggy peers.
++ * Note : there is a small probability that it could be us, but I
++ * would expect driver authors to catch that pretty early and be
++ * able to check precisely what's going on. If a end user sees this,
++ * it's very likely the peer. - Jean II */
++ if (word == 0) {
++ WARNING("%s(), Detected buggy peer, adjust null PV to 0x1!\n",
++ __FUNCTION__);
++ /* The only safe choice (we don't know the array size) */
++ word = 0x1;
++ }
++
+ while (msb) {
+ if (word & msb)
+ break; /* Found it! */
+@@ -378,10 +395,14 @@
+
+ /*
+ * Make sure the mintt is sensible.
++ * Main culprit : Ericsson T39. - Jean II
+ */
+ if (sysctl_min_tx_turn_time > qos->min_turn_time.value) {
+ int i;
+
++ WARNING("%s(), Detected buggy peer, adjust mtt to %dus!\n",
++ __FUNCTION__, sysctl_min_tx_turn_time);
++
+ /* We don't really need bits, but easier this way */
+ i = value_highest_bit(sysctl_min_tx_turn_time, min_turn_times,
+ 8, &qos->min_turn_time.bits);
+@@ -443,6 +464,11 @@
+ if (qos->data_size.value > sysctl_max_tx_data_size)
+ /* Allow non discrete adjustement to avoid loosing capacity */
+ qos->data_size.value = sysctl_max_tx_data_size;
++ /*
++ * Override Tx window if user request it. - Jean II
++ */
++ if (qos->window_size.value > sysctl_max_tx_window)
++ qos->window_size.value = sysctl_max_tx_window;
+ }
+
+ /*
+--- linux/net/irda/irsysctl.c.orig 2005-01-22 19:19:56.006788256 +0100
++++ linux/net/irda/irsysctl.c 2005-01-22 19:24:31.273941288 +0100
+@@ -40,8 +40,8 @@
+
+ enum { DISCOVERY=1, DEVNAME, DEBUG, FAST_POLL, DISCOVERY_SLOTS,
+ DISCOVERY_TIMEOUT, SLOT_TIMEOUT, MAX_BAUD_RATE, MIN_TX_TURN_TIME,
+- MAX_TX_DATA_SIZE, MAX_NOREPLY_TIME, WARN_NOREPLY_TIME, LAP_KEEPALIVE_TIME,
+- SPECIFIC_DEV };
++ MAX_TX_DATA_SIZE, MAX_TX_WINDOW, MAX_NOREPLY_TIME, WARN_NOREPLY_TIME,
++ LAP_KEEPALIVE_TIME, SPECIFIC_DEV };
+
+ extern int sysctl_discovery;
+ extern int sysctl_discovery_slots;
+@@ -53,6 +53,7 @@
+ extern int sysctl_max_baud_rate;
+ extern int sysctl_min_tx_turn_time;
+ extern int sysctl_max_tx_data_size;
++extern int sysctl_max_tx_window;
+ extern int sysctl_max_noreply_time;
+ extern int sysctl_warn_noreply_time;
+ extern int sysctl_lap_keepalive_time;
+@@ -75,6 +76,8 @@
+ static int min_min_tx_turn_time = 0;
+ static int max_max_tx_data_size = 2048; /* See qos.c - IrLAP spec */
+ static int min_max_tx_data_size = 64;
++static int max_max_tx_window = 7; /* See qos.c - IrLAP spec */
++static int min_max_tx_window = 1;
+ static int max_max_noreply_time = 40; /* See qos.c - IrLAP spec */
+ static int min_max_noreply_time = 3;
+ static int max_warn_noreply_time = 3; /* 3s == standard */
+@@ -135,6 +138,9 @@
+ { MAX_TX_DATA_SIZE, "max_tx_data_size", &sysctl_max_tx_data_size,
+ sizeof(int), 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec,
+ NULL, &min_max_tx_data_size, &max_max_tx_data_size },
++ { MAX_TX_WINDOW, "max_tx_window", &sysctl_max_tx_window,
++ sizeof(int), 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec,
++ NULL, &min_max_tx_window, &max_max_tx_window },
+ { MAX_NOREPLY_TIME, "max_noreply_time", &sysctl_max_noreply_time,
+ sizeof(int), 0644, NULL, &proc_dointvec_minmax, &sysctl_intvec,
+ NULL, &min_max_noreply_time, &max_max_noreply_time },
+--- linux/net/irda/parameters.c.orig 2003-05-13 11:20:16.000000000 +0200
++++ linux/net/irda/parameters.c 2005-01-22 19:21:13.527003392 +0100
+@@ -204,11 +204,13 @@
+ {
+ irda_param_t p;
+ int n = 0;
++ int extract_len; /* Real lenght we extract */
+ int err;
+
+ p.pi = pi; /* In case handler needs to know */
+ p.pl = buf[1]; /* Extract lenght of value */
+ p.pv.i = 0; /* Clear value */
++ extract_len = p.pl; /* Default : extract all */
+
+ /* Check if buffer is long enough for parsing */
+ if (len < (2+p.pl)) {
+@@ -220,18 +222,30 @@
+ /*
+ * Check that the integer length is what we expect it to be. If the
+ * handler want a 16 bits integer then a 32 bits is not good enough
++ * PV_INTEGER means that the handler is flexible.
+ */
+ if (((type & PV_MASK) != PV_INTEGER) && ((type & PV_MASK) != p.pl)) {
+ ERROR(__FUNCTION__ "(), invalid parameter length! "
+ "Expected %d bytes, but value had %d bytes!\n",
+ type & PV_MASK, p.pl);
+
+- /* Skip parameter */
+- return p.pl+2;
++ /* Most parameters are bit/byte fields or little endian,
++ * so it's ok to only extract a subset of it (the subset
++ * that the handler expect). This is necessary, as some
++ * broken implementations seems to add extra undefined bits.
++ * If the parameter is shorter than we expect or is big
++ * endian, we can't play those tricks. Jean II */
++ if((p.pl < (type & PV_MASK)) || (type & PV_BIG_ENDIAN)) {
++ /* Skip parameter */
++ return p.pl+2;
++ } else {
++ /* Extract subset of it, fallthrough */
++ extract_len = type & PV_MASK;
++ }
+ }
+
+
+- switch (p.pl) {
++ switch (extract_len) {
+ case 1:
+ n += irda_param_unpack(buf+2, "b", &p.pv.i);
+ break;
diff --git a/recipes/obsolete/linux/files/iw240_we15-6.diff b/recipes/obsolete/linux/files/iw240_we15-6.diff
new file mode 100644
index 0000000000..2ebfd8ec12
--- /dev/null
+++ b/recipes/obsolete/linux/files/iw240_we15-6.diff
@@ -0,0 +1,399 @@
+diff -u -p linux/include/linux/wireless.14.h linux/include/linux/wireless.h
+--- linux/include/linux/wireless.14.h Mon Dec 2 18:51:00 2002
++++ linux/include/linux/wireless.h Mon Dec 2 18:53:35 2002
+@@ -1,7 +1,7 @@
+ /*
+ * This file define a set of standard wireless extensions
+ *
+- * Version : 14 25.1.02
++ * Version : 15 12.7.02
+ *
+ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+ * Copyright (c) 1997-2002 Jean Tourrilhes, All Rights Reserved.
+@@ -80,7 +80,7 @@
+ * (there is some stuff that will be added in the future...)
+ * I just plan to increment with each new version.
+ */
+-#define WIRELESS_EXT 14
++#define WIRELESS_EXT 15
+
+ /*
+ * Changes :
+@@ -153,17 +153,32 @@
+ * - Define additional specific event numbers
+ * - Add "addr" and "param" fields in union iwreq_data
+ * - AP scanning stuff (SIOCSIWSCAN and friends)
++ *
++ * V14 to V15
++ * ----------
++ * - Add IW_PRIV_TYPE_ADDR for struct sockaddr private arg
++ * - Make struct iw_freq signed (both m & e), add explicit padding
++ * - Add IWEVCUSTOM for driver specific event/scanning token
++ * - Add IW_MAX_GET_SPY for driver returning a lot of addresses
++ * - Add IW_TXPOW_RANGE for range of Tx Powers
++ * - Add IWEVREGISTERED & IWEVEXPIRED events for Access Points
++ * - Add IW_MODE_MONITOR for passive monitor
+ */
+
+ /**************************** CONSTANTS ****************************/
+
+ /* -------------------------- IOCTL LIST -------------------------- */
+
+-/* Basic operations */
++/* Wireless Identification */
+ #define SIOCSIWCOMMIT 0x8B00 /* Commit pending changes to driver */
+ #define SIOCGIWNAME 0x8B01 /* get name == wireless protocol */
+-#define SIOCSIWNWID 0x8B02 /* set network id (the cell) */
+-#define SIOCGIWNWID 0x8B03 /* get network id */
++/* SIOCGIWNAME is used to verify the presence of Wireless Extensions.
++ * Common values : "IEEE 802.11-DS", "IEEE 802.11-FH", "IEEE 802.11b"...
++ * Don't put the name of your driver there, it's useless. */
++
++/* Basic operations */
++#define SIOCSIWNWID 0x8B02 /* set network id (pre-802.11) */
++#define SIOCGIWNWID 0x8B03 /* get network id (the cell) */
+ #define SIOCSIWFREQ 0x8B04 /* set channel/frequency (Hz) */
+ #define SIOCGIWFREQ 0x8B05 /* get channel/frequency (Hz) */
+ #define SIOCSIWMODE 0x8B06 /* set operation mode */
+@@ -178,16 +193,18 @@
+ #define SIOCGIWPRIV 0x8B0D /* get private ioctl interface info */
+ #define SIOCSIWSTATS 0x8B0E /* Unused */
+ #define SIOCGIWSTATS 0x8B0F /* Get /proc/net/wireless stats */
++/* SIOCGIWSTATS is strictly used between user space and the kernel, and
++ * is never passed to the driver (i.e. the driver will never see it). */
+
+-/* Mobile IP support */
++/* Mobile IP support (statistics per MAC address) */
+ #define SIOCSIWSPY 0x8B10 /* set spy addresses */
+ #define SIOCGIWSPY 0x8B11 /* get spy info (quality of link) */
+
+ /* Access Point manipulation */
+ #define SIOCSIWAP 0x8B14 /* set access point MAC addresses */
+ #define SIOCGIWAP 0x8B15 /* get access point MAC addresses */
+-#define SIOCGIWAPLIST 0x8B17 /* get list of access point in range */
+-#define SIOCSIWSCAN 0x8B18 /* trigger scanning */
++#define SIOCGIWAPLIST 0x8B17 /* Deprecated in favor of scanning */
++#define SIOCSIWSCAN 0x8B18 /* trigger scanning (list cells) */
+ #define SIOCGIWSCAN 0x8B19 /* get scanning results */
+
+ /* 802.11 specific support */
+@@ -197,9 +214,7 @@
+ #define SIOCGIWNICKN 0x8B1D /* get node name/nickname */
+ /* As the ESSID and NICKN are strings up to 32 bytes long, it doesn't fit
+ * within the 'iwreq' structure, so we need to use the 'data' member to
+- * point to a string in user space, like it is done for RANGE...
+- * The "flags" member indicate if the ESSID is active or not (promiscuous).
+- */
++ * point to a string in user space, like it is done for RANGE... */
+
+ /* Other parameters useful in 802.11 and some other devices */
+ #define SIOCSIWRATE 0x8B20 /* set default bit rate (bps) */
+@@ -257,7 +272,10 @@
+ /* Most events use the same identifier as ioctl requests */
+
+ #define IWEVTXDROP 0x8C00 /* Packet dropped to excessive retry */
+-#define IWEVQUAL 0x8C01 /* Quality part of statistics */
++#define IWEVQUAL 0x8C01 /* Quality part of statistics (scan) */
++#define IWEVCUSTOM 0x8C02 /* Driver specific ascii string */
++#define IWEVREGISTERED 0x8C03 /* Discovered a new node (AP mode) */
++#define IWEVEXPIRED 0x8C04 /* Expired a node (AP mode) */
+
+ #define IWEVFIRST 0x8C00
+
+@@ -273,7 +291,8 @@
+ #define IW_PRIV_TYPE_BYTE 0x1000 /* Char as number */
+ #define IW_PRIV_TYPE_CHAR 0x2000 /* Char as character */
+ #define IW_PRIV_TYPE_INT 0x4000 /* 32 bits int */
+-#define IW_PRIV_TYPE_FLOAT 0x5000
++#define IW_PRIV_TYPE_FLOAT 0x5000 /* struct iw_freq */
++#define IW_PRIV_TYPE_ADDR 0x6000 /* struct sockaddr */
+
+ #define IW_PRIV_SIZE_FIXED 0x0800 /* Variable or fixed nuber of args */
+
+@@ -297,13 +316,16 @@
+
+ /* Maximum tx powers in the range struct */
+ #define IW_MAX_TXPOWER 8
++/* Note : if you more than 8 TXPowers, just set the max and min or
++ * a few of them in the struct iw_range. */
+
+ /* Maximum of address that you may set with SPY */
+-#define IW_MAX_SPY 8
++#define IW_MAX_SPY 8 /* set */
++#define IW_MAX_GET_SPY 64 /* get */
+
+ /* Maximum of address that you may get in the
+ list of access points in range */
+-#define IW_MAX_AP 8
++#define IW_MAX_AP 64
+
+ /* Maximum size of the ESSID and NICKN strings */
+ #define IW_ESSID_MAX_SIZE 32
+@@ -315,6 +337,7 @@
+ #define IW_MODE_MASTER 3 /* Synchronisation master or Access Point */
+ #define IW_MODE_REPEAT 4 /* Wireless Repeater (forwarder) */
+ #define IW_MODE_SECOND 5 /* Secondary master/repeater (backup) */
++#define IW_MODE_MONITOR 6 /* Passive monitor (listen only) */
+
+ /* Maximum number of size of encoding token available
+ * they are listed in the range structure */
+@@ -350,8 +373,10 @@
+ #define IW_POWER_RELATIVE 0x0004 /* Value is not in seconds/ms/us */
+
+ /* Transmit Power flags available */
++#define IW_TXPOW_TYPE 0x00FF /* Type of value */
+ #define IW_TXPOW_DBM 0x0000 /* Value is in dBm */
+ #define IW_TXPOW_MWATT 0x0001 /* Value is in mW */
++#define IW_TXPOW_RANGE 0x1000 /* Range of value between min/max */
+
+ /* Retry limits and lifetime flags available */
+ #define IW_RETRY_ON 0x0000 /* No details... */
+@@ -376,6 +401,9 @@
+ /* Maximum size of returned data */
+ #define IW_SCAN_MAX_DATA 4096 /* In bytes */
+
++/* Max number of char in custom event - use multiple of them if needed */
++#define IW_CUSTOM_MAX 256 /* In bytes */
++
+ /****************************** TYPES ******************************/
+
+ /* --------------------------- SUBTYPES --------------------------- */
+@@ -411,9 +439,10 @@ struct iw_point
+ */
+ struct iw_freq
+ {
+- __u32 m; /* Mantissa */
+- __u16 e; /* Exponent */
++ __s32 m; /* Mantissa */
++ __s16 e; /* Exponent */
+ __u8 i; /* List index (when in range struct) */
++ __u8 pad; /* Unused - just for alignement */
+ };
+
+ /*
+diff -u -p linux/include/net/iw_handler.14.h linux/include/net/iw_handler.h
+--- linux/include/net/iw_handler.14.h Mon Dec 2 18:51:17 2002
++++ linux/include/net/iw_handler.h Mon Dec 2 18:54:51 2002
+@@ -1,7 +1,7 @@
+ /*
+ * This file define the new driver API for Wireless Extensions
+ *
+- * Version : 3 17.1.02
++ * Version : 4 21.6.02
+ *
+ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+ * Copyright (c) 2001-2002 Jean Tourrilhes, All Rights Reserved.
+@@ -206,7 +206,7 @@
+ * will be needed...
+ * I just plan to increment with each new version.
+ */
+-#define IW_HANDLER_VERSION 3
++#define IW_HANDLER_VERSION 4
+
+ /*
+ * Changes :
+@@ -217,6 +217,9 @@
+ * - Add Wireless Event support :
+ * o wireless_send_event() prototype
+ * o iwe_stream_add_event/point() inline functions
++ * V3 to V4
++ * --------
++ * - Reshuffle IW_HEADER_TYPE_XXX to map IW_PRIV_TYPE_XXX changes
+ */
+
+ /**************************** CONSTANTS ****************************/
+@@ -233,10 +236,10 @@
+ #define IW_HEADER_TYPE_CHAR 2 /* char [IFNAMSIZ] */
+ #define IW_HEADER_TYPE_UINT 4 /* __u32 */
+ #define IW_HEADER_TYPE_FREQ 5 /* struct iw_freq */
+-#define IW_HEADER_TYPE_POINT 6 /* struct iw_point */
+-#define IW_HEADER_TYPE_PARAM 7 /* struct iw_param */
+-#define IW_HEADER_TYPE_ADDR 8 /* struct sockaddr */
+-#define IW_HEADER_TYPE_QUAL 9 /* struct iw_quality */
++#define IW_HEADER_TYPE_ADDR 6 /* struct sockaddr */
++#define IW_HEADER_TYPE_POINT 8 /* struct iw_point */
++#define IW_HEADER_TYPE_PARAM 9 /* struct iw_param */
++#define IW_HEADER_TYPE_QUAL 10 /* struct iw_quality */
+
+ /* Handling flags */
+ /* Most are not implemented. I just use them as a reminder of some
+diff -u -p linux/net/core/wireless.14.c linux/net/core/wireless.c
+--- linux/net/core/wireless.14.c Mon Dec 2 18:51:35 2002
++++ linux/net/core/wireless.c Mon Dec 2 18:53:10 2002
+@@ -33,8 +33,16 @@
+ * o Propagate events as rtnetlink IFLA_WIRELESS option
+ * o Generate event on selected SET requests
+ *
+- * v4 - 18.04.01 - Jean II
++ * v4 - 18.04.02 - Jean II
+ * o Fix stupid off by one in iw_ioctl_description : IW_ESSID_MAX_SIZE + 1
++ *
++ * v5 - 21.06.02 - Jean II
++ * o Add IW_PRIV_TYPE_ADDR in priv_type_size (+cleanup)
++ * o Reshuffle IW_HEADER_TYPE_XXX to map IW_PRIV_TYPE_XXX changes
++ * o Add IWEVCUSTOM for driver specific event/scanning token
++ * o Turn on WE_STRICT_WRITE by default + kernel warning
++ * o Fix WE_STRICT_WRITE in ioctl_export_private() (32 => iw_num)
++ * o Fix off-by-one in test (extra_size <= IFNAMSIZ)
+ */
+
+ /***************************** INCLUDES *****************************/
+@@ -50,8 +58,9 @@
+
+ /**************************** CONSTANTS ****************************/
+
+-/* This will be turned on later on... */
+-#undef WE_STRICT_WRITE /* Check write buffer size */
++/* Enough lenience, let's make sure things are proper... */
++#define WE_STRICT_WRITE /* Check write buffer size */
++/* I'll probably drop both the define and kernel message in the next version */
+
+ /* Debuging stuff */
+ #undef WE_IOCTL_DEBUG /* Debug IOCTL API */
+@@ -106,7 +115,7 @@ static const struct iw_ioctl_description
+ /* SIOCSIWSPY */
+ { IW_HEADER_TYPE_POINT, 0, sizeof(struct sockaddr), 0, IW_MAX_SPY, 0},
+ /* SIOCGIWSPY */
+- { IW_HEADER_TYPE_POINT, 0, (sizeof(struct sockaddr) + sizeof(struct iw_quality)), 0, IW_MAX_SPY, 0},
++ { IW_HEADER_TYPE_POINT, 0, (sizeof(struct sockaddr) + sizeof(struct iw_quality)), 0, IW_MAX_GET_SPY, 0},
+ /* -- hole -- */
+ { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
+ /* -- hole -- */
+@@ -176,25 +185,41 @@ static const struct iw_ioctl_description
+ { IW_HEADER_TYPE_ADDR, 0, 0, 0, 0, 0},
+ /* IWEVQUAL */
+ { IW_HEADER_TYPE_QUAL, 0, 0, 0, 0, 0},
++ /* IWEVCUSTOM */
++ { IW_HEADER_TYPE_POINT, 0, 1, 0, IW_CUSTOM_MAX, 0},
++ /* IWEVREGISTERED */
++ { IW_HEADER_TYPE_ADDR, 0, 0, 0, 0, 0},
++ /* IWEVEXPIRED */
++ { IW_HEADER_TYPE_ADDR, 0, 0, 0, 0, 0},
+ };
+ static const int standard_event_num = (sizeof(standard_event) /
+ sizeof(struct iw_ioctl_description));
+
+ /* Size (in bytes) of the various private data types */
+-static const char priv_type_size[] = { 0, 1, 1, 0, 4, 4, 0, 0 };
++static const char priv_type_size[] = {
++ 0, /* IW_PRIV_TYPE_NONE */
++ 1, /* IW_PRIV_TYPE_BYTE */
++ 1, /* IW_PRIV_TYPE_CHAR */
++ 0, /* Not defined */
++ sizeof(__u32), /* IW_PRIV_TYPE_INT */
++ sizeof(struct iw_freq), /* IW_PRIV_TYPE_FLOAT */
++ sizeof(struct sockaddr), /* IW_PRIV_TYPE_ADDR */
++ 0, /* Not defined */
++};
+
+ /* Size (in bytes) of various events */
+ static const int event_type_size[] = {
+- IW_EV_LCP_LEN,
++ IW_EV_LCP_LEN, /* IW_HEADER_TYPE_NULL */
++ 0,
++ IW_EV_CHAR_LEN, /* IW_HEADER_TYPE_CHAR */
+ 0,
+- IW_EV_CHAR_LEN,
++ IW_EV_UINT_LEN, /* IW_HEADER_TYPE_UINT */
++ IW_EV_FREQ_LEN, /* IW_HEADER_TYPE_FREQ */
++ IW_EV_ADDR_LEN, /* IW_HEADER_TYPE_ADDR */
+ 0,
+- IW_EV_UINT_LEN,
+- IW_EV_FREQ_LEN,
+ IW_EV_POINT_LEN, /* Without variable payload */
+- IW_EV_PARAM_LEN,
+- IW_EV_ADDR_LEN,
+- IW_EV_QUAL_LEN,
++ IW_EV_PARAM_LEN, /* IW_HEADER_TYPE_PARAM */
++ IW_EV_QUAL_LEN, /* IW_HEADER_TYPE_QUAL */
+ };
+
+ /************************ COMMON SUBROUTINES ************************/
+@@ -440,8 +465,10 @@ static inline int ioctl_export_private(s
+ return -EFAULT;
+ #ifdef WE_STRICT_WRITE
+ /* Check if there is enough buffer up there */
+- if(iwr->u.data.length < (SIOCIWLASTPRIV - SIOCIWFIRSTPRIV + 1))
++ if(iwr->u.data.length < dev->wireless_handlers->num_private_args) {
++ printk(KERN_ERR "%s (WE) : Buffer for request SIOCGIWPRIV too small (%d<%d)\n", dev->name, iwr->u.data.length, dev->wireless_handlers->num_private_args);
+ return -E2BIG;
++ }
+ #endif /* WE_STRICT_WRITE */
+
+ /* Set the number of available ioctls. */
+@@ -471,6 +498,7 @@ static inline int ioctl_standard_call(st
+ const struct iw_ioctl_description * descr;
+ struct iw_request_info info;
+ int ret = -EINVAL;
++ int user_size = 0;
+
+ /* Get the description of the IOCTL */
+ if((cmd - SIOCIWFIRST) >= standard_ioctl_num)
+@@ -518,11 +546,8 @@ static inline int ioctl_standard_call(st
+ /* Check NULL pointer */
+ if(iwr->u.data.pointer == NULL)
+ return -EFAULT;
+-#ifdef WE_STRICT_WRITE
+- /* Check if there is enough buffer up there */
+- if(iwr->u.data.length < descr->max_tokens)
+- return -E2BIG;
+-#endif /* WE_STRICT_WRITE */
++ /* Save user space buffer size for checking */
++ user_size = iwr->u.data.length;
+ }
+
+ #ifdef WE_IOCTL_DEBUG
+@@ -559,6 +584,15 @@ static inline int ioctl_standard_call(st
+
+ /* If we have something to return to the user */
+ if (!ret && IW_IS_GET(cmd)) {
++#ifdef WE_STRICT_WRITE
++ /* Check if there is enough buffer up there */
++ if(user_size < iwr->u.data.length) {
++ printk(KERN_ERR "%s (WE) : Buffer for request %04X too small (%d<%d)\n", dev->name, cmd, user_size, iwr->u.data.length);
++ kfree(extra);
++ return -E2BIG;
++ }
++#endif /* WE_STRICT_WRITE */
++
+ err = copy_to_user(iwr->u.data.pointer, extra,
+ iwr->u.data.length *
+ descr->token_size);
+@@ -646,12 +680,18 @@ static inline int ioctl_private_call(str
+ /* Compute the size of the set/get arguments */
+ if(descr != NULL) {
+ if(IW_IS_SET(cmd)) {
++ int offset = 0; /* For sub-ioctls */
++ /* Check for sub-ioctl handler */
++ if(descr->name[0] == '\0')
++ /* Reserve one int for sub-ioctl index */
++ offset = sizeof(__u32);
++
+ /* Size of set arguments */
+ extra_size = get_priv_size(descr->set_args);
+
+ /* Does it fits in iwr ? */
+ if((descr->set_args & IW_PRIV_SIZE_FIXED) &&
+- (extra_size < IFNAMSIZ))
++ ((extra_size + offset) <= IFNAMSIZ))
+ extra_size = 0;
+ } else {
+ /* Size of set arguments */
+@@ -659,7 +699,7 @@ static inline int ioctl_private_call(str
+
+ /* Does it fits in iwr ? */
+ if((descr->get_args & IW_PRIV_SIZE_FIXED) &&
+- (extra_size < IFNAMSIZ))
++ (extra_size <= IFNAMSIZ))
+ extra_size = 0;
+ }
+ }
+@@ -925,7 +965,7 @@ void wireless_send_event(struct net_devi
+ * The best the driver could do is to log an error message.
+ * We will do it ourselves instead...
+ */
+- printk(KERN_ERR "%s (WE) : Invalid Wireless Event (0x%04X)\n",
++ printk(KERN_ERR "%s (WE) : Invalid/Unknown Wireless Event (0x%04X)\n",
+ dev->name, cmd);
+ return;
+ }
diff --git a/recipes/obsolete/linux/files/iw249_we16-6.diff b/recipes/obsolete/linux/files/iw249_we16-6.diff
new file mode 100644
index 0000000000..0a5aaab954
--- /dev/null
+++ b/recipes/obsolete/linux/files/iw249_we16-6.diff
@@ -0,0 +1,670 @@
+diff -u -p linux/include/linux/wireless.15.h linux/include/linux/wireless.h
+--- linux/include/linux/wireless.15.h 2004-11-05 14:59:33.000000000 -0800
++++ linux/include/linux/wireless.h 2004-11-05 15:00:42.000000000 -0800
+@@ -1,7 +1,7 @@
+ /*
+ * This file define a set of standard wireless extensions
+ *
+- * Version : 15 12.7.02
++ * Version : 16 2.4.03
+ *
+ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+ * Copyright (c) 1997-2002 Jean Tourrilhes, All Rights Reserved.
+@@ -69,6 +69,8 @@
+
+ /***************************** INCLUDES *****************************/
+
++/* To minimise problems in user space, I might remove those headers
++ * at some point. Jean II */
+ #include <linux/types.h> /* for "caddr_t" et al */
+ #include <linux/socket.h> /* for "struct sockaddr" et al */
+ #include <linux/if.h> /* for IFNAMSIZ and co... */
+@@ -80,7 +82,7 @@
+ * (there is some stuff that will be added in the future...)
+ * I just plan to increment with each new version.
+ */
+-#define WIRELESS_EXT 15
++#define WIRELESS_EXT 16
+
+ /*
+ * Changes :
+@@ -163,6 +165,16 @@
+ * - Add IW_TXPOW_RANGE for range of Tx Powers
+ * - Add IWEVREGISTERED & IWEVEXPIRED events for Access Points
+ * - Add IW_MODE_MONITOR for passive monitor
++ *
++ * V15 to V16
++ * ----------
++ * - Increase the number of bitrates in iw_range to 32 (for 802.11g)
++ * - Increase the number of frequencies in iw_range to 32 (for 802.11b+a)
++ * - Reshuffle struct iw_range for increases, add filler
++ * - Increase IW_MAX_AP to 64 for driver returning a lot of addresses
++ * - Remove IW_MAX_GET_SPY because conflict with enhanced spy support
++ * - Add SIOCSIWTHRSPY/SIOCGIWTHRSPY and "struct iw_thrspy"
++ * - Add IW_ENCODE_TEMP and iw_range->encoding_login_index
+ */
+
+ /**************************** CONSTANTS ****************************/
+@@ -196,9 +208,11 @@
+ /* SIOCGIWSTATS is strictly used between user space and the kernel, and
+ * is never passed to the driver (i.e. the driver will never see it). */
+
+-/* Mobile IP support (statistics per MAC address) */
++/* Spy support (statistics per MAC address - used for Mobile IP support) */
+ #define SIOCSIWSPY 0x8B10 /* set spy addresses */
+ #define SIOCGIWSPY 0x8B11 /* get spy info (quality of link) */
++#define SIOCSIWTHRSPY 0x8B12 /* set spy threshold (spy event) */
++#define SIOCGIWTHRSPY 0x8B13 /* get spy threshold */
+
+ /* Access Point manipulation */
+ #define SIOCSIWAP 0x8B14 /* set access point MAC addresses */
+@@ -294,7 +308,7 @@
+ #define IW_PRIV_TYPE_FLOAT 0x5000 /* struct iw_freq */
+ #define IW_PRIV_TYPE_ADDR 0x6000 /* struct sockaddr */
+
+-#define IW_PRIV_SIZE_FIXED 0x0800 /* Variable or fixed nuber of args */
++#define IW_PRIV_SIZE_FIXED 0x0800 /* Variable or fixed number of args */
+
+ #define IW_PRIV_SIZE_MASK 0x07FF /* Max number of those args */
+
+@@ -306,13 +320,13 @@
+ /* ----------------------- OTHER CONSTANTS ----------------------- */
+
+ /* Maximum frequencies in the range struct */
+-#define IW_MAX_FREQUENCIES 16
++#define IW_MAX_FREQUENCIES 32
+ /* Note : if you have something like 80 frequencies,
+ * don't increase this constant and don't fill the frequency list.
+ * The user will be able to set by channel anyway... */
+
+ /* Maximum bit rates in the range struct */
+-#define IW_MAX_BITRATES 8
++#define IW_MAX_BITRATES 32
+
+ /* Maximum tx powers in the range struct */
+ #define IW_MAX_TXPOWER 8
+@@ -320,8 +334,7 @@
+ * a few of them in the struct iw_range. */
+
+ /* Maximum of address that you may set with SPY */
+-#define IW_MAX_SPY 8 /* set */
+-#define IW_MAX_GET_SPY 64 /* get */
++#define IW_MAX_SPY 8
+
+ /* Maximum of address that you may get in the
+ list of access points in range */
+@@ -354,7 +367,8 @@
+ #define IW_ENCODE_ENABLED 0x0000 /* Encoding enabled */
+ #define IW_ENCODE_RESTRICTED 0x4000 /* Refuse non-encoded packets */
+ #define IW_ENCODE_OPEN 0x2000 /* Accept non-encoded packets */
+-#define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not present */
++#define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not present */
++#define IW_ENCODE_TEMP 0x0400 /* Temporary key */
+
+ /* Power management flags available (along with the value, if any) */
+ #define IW_POWER_ON 0x0000 /* No details... */
+@@ -482,6 +496,17 @@ struct iw_missed
+ __u32 beacon; /* Missed beacons/superframe */
+ };
+
++/*
++ * Quality range (for spy threshold)
++ */
++struct iw_thrspy
++{
++ struct sockaddr addr; /* Source address (hw/mac) */
++ struct iw_quality qual; /* Quality of the link */
++ struct iw_quality low; /* Low threshold */
++ struct iw_quality high; /* High threshold */
++};
++
+ /* ------------------------ WIRELESS STATS ------------------------ */
+ /*
+ * Wireless statistics (used for /proc/net/wireless)
+@@ -534,7 +559,7 @@ union iwreq_data
+ struct iw_quality qual; /* Quality part of statistics */
+
+ struct sockaddr ap_addr; /* Access point address */
+- struct sockaddr addr; /* Destination address (hw) */
++ struct sockaddr addr; /* Destination address (hw/mac) */
+
+ struct iw_param param; /* Other small parameters */
+ struct iw_point data; /* Other large parameters */
+@@ -582,17 +607,31 @@ struct iw_range
+ __u32 min_nwid; /* Minimal NWID we are able to set */
+ __u32 max_nwid; /* Maximal NWID we are able to set */
+
+- /* Frequency */
+- __u16 num_channels; /* Number of channels [0; num - 1] */
+- __u8 num_frequency; /* Number of entry in the list */
+- struct iw_freq freq[IW_MAX_FREQUENCIES]; /* list */
+- /* Note : this frequency list doesn't need to fit channel numbers */
++ /* Old Frequency (backward compat - moved lower ) */
++ __u16 old_num_channels;
++ __u8 old_num_frequency;
++ /* Filler to keep "version" at the same offset */
++ __s32 old_freq[6];
+
+ /* signal level threshold range */
+ __s32 sensitivity;
+
+ /* Quality of link & SNR stuff */
++ /* Quality range (link, level, noise)
++ * If the quality is absolute, it will be in the range [0 ; max_qual],
++ * if the quality is dBm, it will be in the range [max_qual ; 0].
++ * Don't forget that we use 8 bit arithmetics... */
+ struct iw_quality max_qual; /* Quality of the link */
++ /* This should contain the average/typical values of the quality
++ * indicator. This should be the threshold between a "good" and
++ * a "bad" link (example : monitor going from green to orange).
++ * Currently, user space apps like quality monitors don't have any
++ * way to calibrate the measurement. With this, they can split
++ * the range between 0 and max_qual in different quality level
++ * (using a geometric subdivision centered on the average).
++ * I expect that people doing the user space apps will feedback
++ * us on which value we need to put in each driver... */
++ struct iw_quality avg_qual; /* Quality of the link */
+
+ /* Rates */
+ __u8 num_bitrates; /* Number of entries in the list */
+@@ -619,6 +658,8 @@ struct iw_range
+ __u16 encoding_size[IW_MAX_ENCODING_SIZES]; /* Different token sizes */
+ __u8 num_encoding_sizes; /* Number of entry in the list */
+ __u8 max_encoding_tokens; /* Max number of tokens */
++ /* For drivers that need a "login/passwd" form */
++ __u8 encoding_login_index; /* token index for login token */
+
+ /* Transmit power */
+ __u16 txpower_capa; /* What options are supported */
+@@ -638,18 +679,12 @@ struct iw_range
+ __s32 min_r_time; /* Minimal retry lifetime */
+ __s32 max_r_time; /* Maximal retry lifetime */
+
+- /* Average quality of link & SNR */
+- struct iw_quality avg_qual; /* Quality of the link */
+- /* This should contain the average/typical values of the quality
+- * indicator. This should be the threshold between a "good" and
+- * a "bad" link (example : monitor going from green to orange).
+- * Currently, user space apps like quality monitors don't have any
+- * way to calibrate the measurement. With this, they can split
+- * the range between 0 and max_qual in different quality level
+- * (using a geometric subdivision centered on the average).
+- * I expect that people doing the user space apps will feedback
+- * us on which value we need to put in each driver...
+- */
++ /* Frequency */
++ __u16 num_channels; /* Number of channels [0; num - 1] */
++ __u8 num_frequency; /* Number of entry in the list */
++ struct iw_freq freq[IW_MAX_FREQUENCIES]; /* list */
++ /* Note : this frequency list doesn't need to fit channel numbers,
++ * because each entry contain its channel index */
+ };
+
+ /*
+diff -u -p linux/include/net/iw_handler.15.h linux/include/net/iw_handler.h
+--- linux/include/net/iw_handler.15.h 2004-11-05 14:59:47.000000000 -0800
++++ linux/include/net/iw_handler.h 2004-11-05 15:00:42.000000000 -0800
+@@ -1,7 +1,7 @@
+ /*
+ * This file define the new driver API for Wireless Extensions
+ *
+- * Version : 4 21.6.02
++ * Version : 5 4.12.02
+ *
+ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+ * Copyright (c) 2001-2002 Jean Tourrilhes, All Rights Reserved.
+@@ -206,7 +206,7 @@
+ * will be needed...
+ * I just plan to increment with each new version.
+ */
+-#define IW_HANDLER_VERSION 4
++#define IW_HANDLER_VERSION 5
+
+ /*
+ * Changes :
+@@ -220,10 +220,18 @@
+ * V3 to V4
+ * --------
+ * - Reshuffle IW_HEADER_TYPE_XXX to map IW_PRIV_TYPE_XXX changes
++ *
++ * V4 to V5
++ * --------
++ * - Add new spy support : struct iw_spy_data & prototypes
+ */
+
+ /**************************** CONSTANTS ****************************/
+
++/* Enable enhanced spy support. Disable to reduce footprint */
++#define IW_WIRELESS_SPY
++#define IW_WIRELESS_THRSPY
++
+ /* Special error message for the driver to indicate that we
+ * should do a commit after return from the iw_handler */
+ #define EIWCOMMIT EINPROGRESS
+@@ -315,6 +323,9 @@ struct iw_handler_def
+ * We will automatically export that to user space... */
+ struct iw_priv_args * private_args;
+
++ /* Driver enhanced spy support */
++ long spy_offset; /* Spy data offset */
++
+ /* In the long term, get_wireless_stats will move from
+ * 'struct net_device' to here, to minimise bloat. */
+ };
+@@ -350,6 +361,33 @@ struct iw_ioctl_description
+
+ /* Need to think of short header translation table. Later. */
+
++/* --------------------- ENHANCED SPY SUPPORT --------------------- */
++/*
++ * In the old days, the driver was handling spy support all by itself.
++ * Now, the driver can delegate this task to Wireless Extensions.
++ * It needs to include this struct in its private part and use the
++ * standard spy iw_handler.
++ */
++
++/*
++ * Instance specific spy data, i.e. addresses spied and quality for them.
++ */
++struct iw_spy_data
++{
++#ifdef IW_WIRELESS_SPY
++ /* --- Standard spy support --- */
++ int spy_number;
++ u_char spy_address[IW_MAX_SPY][ETH_ALEN];
++ struct iw_quality spy_stat[IW_MAX_SPY];
++#ifdef IW_WIRELESS_THRSPY
++ /* --- Enhanced spy support (event) */
++ struct iw_quality spy_thr_low; /* Low threshold */
++ struct iw_quality spy_thr_high; /* High threshold */
++ u_char spy_thr_under[IW_MAX_SPY];
++#endif /* IW_WIRELESS_THRSPY */
++#endif /* IW_WIRELESS_SPY */
++};
++
+ /**************************** PROTOTYPES ****************************/
+ /*
+ * Functions part of the Wireless Extensions (defined in net/core/wireless.c).
+@@ -376,6 +414,31 @@ extern void wireless_send_event(struct n
+ /* We may need a function to send a stream of events to user space.
+ * More on that later... */
+
++/* Standard handler for SIOCSIWSPY */
++extern int iw_handler_set_spy(struct net_device * dev,
++ struct iw_request_info * info,
++ union iwreq_data * wrqu,
++ char * extra);
++/* Standard handler for SIOCGIWSPY */
++extern int iw_handler_get_spy(struct net_device * dev,
++ struct iw_request_info * info,
++ union iwreq_data * wrqu,
++ char * extra);
++/* Standard handler for SIOCSIWTHRSPY */
++extern int iw_handler_set_thrspy(struct net_device * dev,
++ struct iw_request_info *info,
++ union iwreq_data * wrqu,
++ char * extra);
++/* Standard handler for SIOCGIWTHRSPY */
++extern int iw_handler_get_thrspy(struct net_device * dev,
++ struct iw_request_info *info,
++ union iwreq_data * wrqu,
++ char * extra);
++/* Driver call to update spy records */
++extern void wireless_spy_update(struct net_device * dev,
++ unsigned char * address,
++ struct iw_quality * wstats);
++
+ /************************* INLINE FUNTIONS *************************/
+ /*
+ * Function that are so simple that it's more efficient inlining them
+diff -u -p linux/net/core/wireless.15.c linux/net/core/wireless.c
+--- linux/net/core/wireless.15.c 2004-11-05 15:00:11.000000000 -0800
++++ linux/net/core/wireless.c 2004-11-05 15:00:42.000000000 -0800
+@@ -2,7 +2,7 @@
+ * This file implement the Wireless Extensions APIs.
+ *
+ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+- * Copyright (c) 1997-2002 Jean Tourrilhes, All Rights Reserved.
++ * Copyright (c) 1997-2003 Jean Tourrilhes, All Rights Reserved.
+ *
+ * (As all part of the Linux kernel, this file is GPL)
+ */
+@@ -43,6 +43,11 @@
+ * o Turn on WE_STRICT_WRITE by default + kernel warning
+ * o Fix WE_STRICT_WRITE in ioctl_export_private() (32 => iw_num)
+ * o Fix off-by-one in test (extra_size <= IFNAMSIZ)
++ *
++ * v6 - 9.01.03 - Jean II
++ * o Add common spy support : iw_handler_set_spy(), wireless_spy_update()
++ * o Add enhanced spy support : iw_handler_set_thrspy() and event.
++ * o Add WIRELESS_EXT version display in /proc/net/wireless
+ */
+
+ /***************************** INCLUDES *****************************/
+@@ -52,6 +57,7 @@
+ #include <linux/types.h> /* off_t */
+ #include <linux/netdevice.h> /* struct ifreq, dev_get_by_name() */
+ #include <linux/rtnetlink.h> /* rtnetlink stuff */
++#include <linux/if_arp.h> /* ARPHRD_ETHER */
+
+ #include <linux/wireless.h> /* Pretty obvious */
+ #include <net/iw_handler.h> /* New driver API */
+@@ -65,6 +71,7 @@
+ /* Debuging stuff */
+ #undef WE_IOCTL_DEBUG /* Debug IOCTL API */
+ #undef WE_EVENT_DEBUG /* Debug Event dispatcher */
++#undef WE_SPY_DEBUG /* Debug enhanced spy support */
+
+ /* Options */
+ #define WE_EVENT_NETLINK /* Propagate events using rtnetlink */
+@@ -72,7 +79,7 @@
+
+ /************************* GLOBAL VARIABLES *************************/
+ /*
+- * You should not use global variables, because or re-entrancy.
++ * You should not use global variables, because of re-entrancy.
+ * On our case, it's only const, so it's OK...
+ */
+ /*
+@@ -115,11 +122,11 @@ static const struct iw_ioctl_description
+ /* SIOCSIWSPY */
+ { IW_HEADER_TYPE_POINT, 0, sizeof(struct sockaddr), 0, IW_MAX_SPY, 0},
+ /* SIOCGIWSPY */
+- { IW_HEADER_TYPE_POINT, 0, (sizeof(struct sockaddr) + sizeof(struct iw_quality)), 0, IW_MAX_GET_SPY, 0},
+- /* -- hole -- */
+- { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
+- /* -- hole -- */
+- { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
++ { IW_HEADER_TYPE_POINT, 0, (sizeof(struct sockaddr) + sizeof(struct iw_quality)), 0, IW_MAX_SPY, 0},
++ /* SIOCSIWTHRSPY */
++ { IW_HEADER_TYPE_POINT, 0, sizeof(struct iw_thrspy), 1, 1, 0},
++ /* SIOCGIWTHRSPY */
++ { IW_HEADER_TYPE_POINT, 0, sizeof(struct iw_thrspy), 1, 1, 0},
+ /* SIOCSIWAP */
+ { IW_HEADER_TYPE_ADDR, 0, 0, 0, 0, 0},
+ /* SIOCGIWAP */
+@@ -377,9 +384,9 @@ int dev_get_wireless_info(char * buffer,
+ struct net_device * dev;
+
+ size = sprintf(buffer,
+- "Inter-| sta-| Quality | Discarded packets | Missed\n"
+- " face | tus | link level noise | nwid crypt frag retry misc | beacon\n"
+- );
++ "Inter-| sta-| Quality | Discarded packets | Missed | WE\n"
++ " face | tus | link level noise | nwid crypt frag retry misc | beacon | %d\n",
++ WIRELESS_EXT);
+
+ pos += size;
+ len += size;
+@@ -1024,3 +1031,252 @@ void wireless_send_event(struct net_devi
+
+ return; /* Always success, I guess ;-) */
+ }
++
++/********************** ENHANCED IWSPY SUPPORT **********************/
++/*
++ * In the old days, the driver was handling spy support all by itself.
++ * Now, the driver can delegate this task to Wireless Extensions.
++ * It needs to use those standard spy iw_handler in struct iw_handler_def,
++ * push data to us via XXX and include struct iw_spy_data in its
++ * private part.
++ * One of the main advantage of centralising spy support here is that
++ * it becomes much easier to improve and extend it without having to touch
++ * the drivers. One example is the addition of the Spy-Threshold events.
++ * Note : IW_WIRELESS_SPY is defined in iw_handler.h
++ */
++
++/*------------------------------------------------------------------*/
++/*
++ * Standard Wireless Handler : set Spy List
++ */
++int iw_handler_set_spy(struct net_device * dev,
++ struct iw_request_info * info,
++ union iwreq_data * wrqu,
++ char * extra)
++{
++#ifdef IW_WIRELESS_SPY
++ struct iw_spy_data * spydata = (dev->priv +
++ dev->wireless_handlers->spy_offset);
++ struct sockaddr * address = (struct sockaddr *) extra;
++
++ /* Disable spy collection while we copy the addresses.
++ * As we don't disable interrupts, we need to do this to avoid races.
++ * As we are the only writer, this is good enough. */
++ spydata->spy_number = 0;
++
++ /* Are there are addresses to copy? */
++ if(wrqu->data.length > 0) {
++ int i;
++
++ /* Copy addresses */
++ for(i = 0; i < wrqu->data.length; i++)
++ memcpy(spydata->spy_address[i], address[i].sa_data,
++ ETH_ALEN);
++ /* Reset stats */
++ memset(spydata->spy_stat, 0,
++ sizeof(struct iw_quality) * IW_MAX_SPY);
++
++#ifdef WE_SPY_DEBUG
++ printk(KERN_DEBUG "iw_handler_set_spy() : offset %ld, spydata %p, num %d\n", dev->wireless_handlers->spy_offset, spydata, wrqu->data.length);
++ for (i = 0; i < wrqu->data.length; i++)
++ printk(KERN_DEBUG
++ "%02X:%02X:%02X:%02X:%02X:%02X \n",
++ spydata->spy_address[i][0],
++ spydata->spy_address[i][1],
++ spydata->spy_address[i][2],
++ spydata->spy_address[i][3],
++ spydata->spy_address[i][4],
++ spydata->spy_address[i][5]);
++#endif /* WE_SPY_DEBUG */
++ }
++ /* Enable addresses */
++ spydata->spy_number = wrqu->data.length;
++
++ return 0;
++#else /* IW_WIRELESS_SPY */
++ return -EOPNOTSUPP;
++#endif /* IW_WIRELESS_SPY */
++}
++
++/*------------------------------------------------------------------*/
++/*
++ * Standard Wireless Handler : get Spy List
++ */
++int iw_handler_get_spy(struct net_device * dev,
++ struct iw_request_info * info,
++ union iwreq_data * wrqu,
++ char * extra)
++{
++#ifdef IW_WIRELESS_SPY
++ struct iw_spy_data * spydata = (dev->priv +
++ dev->wireless_handlers->spy_offset);
++ struct sockaddr * address = (struct sockaddr *) extra;
++ int i;
++
++ wrqu->data.length = spydata->spy_number;
++
++ /* Copy addresses. */
++ for(i = 0; i < spydata->spy_number; i++) {
++ memcpy(address[i].sa_data, spydata->spy_address[i], ETH_ALEN);
++ address[i].sa_family = AF_UNIX;
++ }
++ /* Copy stats to the user buffer (just after). */
++ if(spydata->spy_number > 0)
++ memcpy(extra + (sizeof(struct sockaddr) *spydata->spy_number),
++ spydata->spy_stat,
++ sizeof(struct iw_quality) * spydata->spy_number);
++ /* Reset updated flags. */
++ for(i = 0; i < spydata->spy_number; i++)
++ spydata->spy_stat[i].updated = 0;
++ return 0;
++#else /* IW_WIRELESS_SPY */
++ return -EOPNOTSUPP;
++#endif /* IW_WIRELESS_SPY */
++}
++
++/*------------------------------------------------------------------*/
++/*
++ * Standard Wireless Handler : set spy threshold
++ */
++int iw_handler_set_thrspy(struct net_device * dev,
++ struct iw_request_info *info,
++ union iwreq_data * wrqu,
++ char * extra)
++{
++#ifdef IW_WIRELESS_THRSPY
++ struct iw_spy_data * spydata = (dev->priv +
++ dev->wireless_handlers->spy_offset);
++ struct iw_thrspy * threshold = (struct iw_thrspy *) extra;
++
++ /* Just do it */
++ memcpy(&(spydata->spy_thr_low), &(threshold->low),
++ 2 * sizeof(struct iw_quality));
++
++ /* Clear flag */
++ memset(spydata->spy_thr_under, '\0', sizeof(spydata->spy_thr_under));
++
++#ifdef WE_SPY_DEBUG
++ printk(KERN_DEBUG "iw_handler_set_thrspy() : low %d ; high %d\n", spydata->spy_thr_low.level, spydata->spy_thr_high.level);
++#endif /* WE_SPY_DEBUG */
++
++ return 0;
++#else /* IW_WIRELESS_THRSPY */
++ return -EOPNOTSUPP;
++#endif /* IW_WIRELESS_THRSPY */
++}
++
++/*------------------------------------------------------------------*/
++/*
++ * Standard Wireless Handler : get spy threshold
++ */
++int iw_handler_get_thrspy(struct net_device * dev,
++ struct iw_request_info *info,
++ union iwreq_data * wrqu,
++ char * extra)
++{
++#ifdef IW_WIRELESS_THRSPY
++ struct iw_spy_data * spydata = (dev->priv +
++ dev->wireless_handlers->spy_offset);
++ struct iw_thrspy * threshold = (struct iw_thrspy *) extra;
++
++ /* Just do it */
++ memcpy(&(threshold->low), &(spydata->spy_thr_low),
++ 2 * sizeof(struct iw_quality));
++
++ return 0;
++#else /* IW_WIRELESS_THRSPY */
++ return -EOPNOTSUPP;
++#endif /* IW_WIRELESS_THRSPY */
++}
++
++#ifdef IW_WIRELESS_THRSPY
++/*------------------------------------------------------------------*/
++/*
++ * Prepare and send a Spy Threshold event
++ */
++static void iw_send_thrspy_event(struct net_device * dev,
++ struct iw_spy_data * spydata,
++ unsigned char * address,
++ struct iw_quality * wstats)
++{
++ union iwreq_data wrqu;
++ struct iw_thrspy threshold;
++
++ /* Init */
++ wrqu.data.length = 1;
++ wrqu.data.flags = 0;
++ /* Copy address */
++ memcpy(threshold.addr.sa_data, address, ETH_ALEN);
++ threshold.addr.sa_family = ARPHRD_ETHER;
++ /* Copy stats */
++ memcpy(&(threshold.qual), wstats, sizeof(struct iw_quality));
++ /* Copy also thresholds */
++ memcpy(&(threshold.low), &(spydata->spy_thr_low),
++ 2 * sizeof(struct iw_quality));
++
++#ifdef WE_SPY_DEBUG
++ printk(KERN_DEBUG "iw_send_thrspy_event() : address %02X:%02X:%02X:%02X:%02X:%02X, level %d, up = %d\n",
++ threshold.addr.sa_data[0],
++ threshold.addr.sa_data[1],
++ threshold.addr.sa_data[2],
++ threshold.addr.sa_data[3],
++ threshold.addr.sa_data[4],
++ threshold.addr.sa_data[5], threshold.qual.level);
++#endif /* WE_SPY_DEBUG */
++
++ /* Send event to user space */
++ wireless_send_event(dev, SIOCGIWTHRSPY, &wrqu, (char *) &threshold);
++}
++#endif /* IW_WIRELESS_THRSPY */
++
++/* ---------------------------------------------------------------- */
++/*
++ * Call for the driver to update the spy data.
++ * For now, the spy data is a simple array. As the size of the array is
++ * small, this is good enough. If we wanted to support larger number of
++ * spy addresses, we should use something more efficient...
++ */
++void wireless_spy_update(struct net_device * dev,
++ unsigned char * address,
++ struct iw_quality * wstats)
++{
++#ifdef IW_WIRELESS_SPY
++ struct iw_spy_data * spydata = (dev->priv +
++ dev->wireless_handlers->spy_offset);
++ int i;
++ int match = -1;
++
++#ifdef WE_SPY_DEBUG
++ printk(KERN_DEBUG "wireless_spy_update() : offset %ld, spydata %p, address %02X:%02X:%02X:%02X:%02X:%02X\n", dev->wireless_handlers->spy_offset, spydata, address[0], address[1], address[2], address[3], address[4], address[5]);
++#endif /* WE_SPY_DEBUG */
++
++ /* Update all records that match */
++ for(i = 0; i < spydata->spy_number; i++)
++ if(!memcmp(address, spydata->spy_address[i], ETH_ALEN)) {
++ memcpy(&(spydata->spy_stat[i]), wstats,
++ sizeof(struct iw_quality));
++ match = i;
++ }
++#ifdef IW_WIRELESS_THRSPY
++ /* Generate an event if we cross the spy threshold.
++ * To avoid event storms, we have a simple hysteresis : we generate
++ * event only when we go under the low threshold or above the
++ * high threshold. */
++ if(match >= 0) {
++ if(spydata->spy_thr_under[match]) {
++ if(wstats->level > spydata->spy_thr_high.level) {
++ spydata->spy_thr_under[match] = 0;
++ iw_send_thrspy_event(dev, spydata,
++ address, wstats);
++ }
++ } else {
++ if(wstats->level < spydata->spy_thr_low.level) {
++ spydata->spy_thr_under[match] = 1;
++ iw_send_thrspy_event(dev, spydata,
++ address, wstats);
++ }
++ }
++ }
++#endif /* IW_WIRELESS_THRSPY */
++#endif /* IW_WIRELESS_SPY */
++}
+diff -u -p linux/net/netsyms.15.c linux/net/netsyms.c
+--- linux/net/netsyms.15.c 2004-11-05 15:00:25.000000000 -0800
++++ linux/net/netsyms.c 2004-11-05 15:01:38.000000000 -0800
+@@ -589,9 +589,13 @@ EXPORT_SYMBOL(net_call_rx_atomic);
+ EXPORT_SYMBOL(softnet_data);
+
+ #if defined(CONFIG_NET_RADIO) || defined(CONFIG_NET_PCMCIA_RADIO)
+-/* Don't include the whole header mess for a single function */
+-extern void wireless_send_event(struct net_device *dev, unsigned int cmd, union iwreq_data *wrqu, char *extra);
++#include <net/iw_handler.h>
+ EXPORT_SYMBOL(wireless_send_event);
++EXPORT_SYMBOL(iw_handler_set_spy);
++EXPORT_SYMBOL(iw_handler_get_spy);
++EXPORT_SYMBOL(iw_handler_set_thrspy);
++EXPORT_SYMBOL(iw_handler_get_thrspy);
++EXPORT_SYMBOL(wireless_spy_update);
+ #endif /* CONFIG_NET_RADIO || CONFIG_NET_PCMCIA_RADIO */
+
+ #endif /* CONFIG_NET */
diff --git a/recipes/obsolete/linux/files/iw_handlers.w13-5.diff b/recipes/obsolete/linux/files/iw_handlers.w13-5.diff
new file mode 100644
index 0000000000..a27a7654a9
--- /dev/null
+++ b/recipes/obsolete/linux/files/iw_handlers.w13-5.diff
@@ -0,0 +1,1513 @@
+diff -u -p -r --new-file linux/include/linux-w12/netdevice.h linux/include/linux/netdevice.h
+--- linux/include/linux-w12/netdevice.h Thu Nov 22 11:47:09 2001
++++ linux/include/linux/netdevice.h Thu Jan 17 12:00:39 2002
+@@ -278,6 +278,10 @@ struct net_device
+ struct net_device_stats* (*get_stats)(struct net_device *dev);
+ struct iw_statistics* (*get_wireless_stats)(struct net_device *dev);
+
++ /* List of functions to handle Wireless Extensions (instead of ioctl).
++ * See <net/iw_handler.h> for details. Jean II */
++ struct iw_handler_def * wireless_handlers;
++
+ /*
+ * This marks the end of the "visible" part of the structure. All
+ * fields hereafter are internal to the system, and may change at
+diff -u -p -r --new-file linux/include/linux-w12/wireless.h linux/include/linux/wireless.h
+--- linux/include/linux-w12/wireless.h Thu Nov 22 11:47:12 2001
++++ linux/include/linux/wireless.h Thu Jan 17 12:04:08 2002
+@@ -1,9 +1,10 @@
+ /*
+ * This file define a set of standard wireless extensions
+ *
+- * Version : 12 5.10.01
++ * Version : 13 6.12.01
+ *
+ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
++ * Copyright (c) 1997-2001 Jean Tourrilhes, All Rights Reserved.
+ */
+
+ #ifndef _LINUX_WIRELESS_H
+@@ -11,6 +12,8 @@
+
+ /************************** DOCUMENTATION **************************/
+ /*
++ * Initial APIs (1996 -> onward) :
++ * -----------------------------
+ * Basically, the wireless extensions are for now a set of standard ioctl
+ * call + /proc/net/wireless
+ *
+@@ -27,16 +30,27 @@
+ * We have the list of command plus a structure descibing the
+ * data exchanged...
+ * Note that to add these ioctl, I was obliged to modify :
+- * net/core/dev.c (two place + add include)
+- * net/ipv4/af_inet.c (one place + add include)
++ * # net/core/dev.c (two place + add include)
++ * # net/ipv4/af_inet.c (one place + add include)
+ *
+ * /proc/net/wireless is a copy of /proc/net/dev.
+ * We have a structure for data passed from the driver to /proc/net/wireless
+ * Too add this, I've modified :
+- * net/core/dev.c (two other places)
+- * include/linux/netdevice.h (one place)
+- * include/linux/proc_fs.h (one place)
++ * # net/core/dev.c (two other places)
++ * # include/linux/netdevice.h (one place)
++ * # include/linux/proc_fs.h (one place)
++ *
++ * New driver API (2001 -> onward) :
++ * -------------------------------
++ * This file is only concerned with the user space API and common definitions.
++ * The new driver API is defined and documented in :
++ * # include/net/iw_handler.h
+ *
++ * Note as well that /proc/net/wireless implementation has now moved in :
++ * # include/linux/wireless.c
++ *
++ * Other comments :
++ * --------------
+ * Do not add here things that are redundant with other mechanisms
+ * (drivers init, ifconfig, /proc/net/dev, ...) and with are not
+ * wireless specific.
+@@ -54,16 +68,14 @@
+ #include <linux/socket.h> /* for "struct sockaddr" et al */
+ #include <linux/if.h> /* for IFNAMSIZ and co... */
+
+-/**************************** CONSTANTS ****************************/
+-
+-/* --------------------------- VERSION --------------------------- */
++/***************************** VERSION *****************************/
+ /*
+ * This constant is used to know the availability of the wireless
+ * extensions and to know which version of wireless extensions it is
+ * (there is some stuff that will be added in the future...)
+ * I just plan to increment with each new version.
+ */
+-#define WIRELESS_EXT 12
++#define WIRELESS_EXT 13
+
+ /*
+ * Changes :
+@@ -123,12 +135,20 @@
+ * - Add DEV PRIVATE IOCTL to avoid collisions in SIOCDEVPRIVATE space
+ * - Add new statistics (frag, retry, beacon)
+ * - Add average quality (for user space calibration)
++ *
++ * V12 to V13
++ * ----------
++ * - Document creation of new driver API.
++ * - Extract union iwreq_data from struct iwreq (for new driver API).
++ * - Rename SIOCSIWNAME as SIOCSIWCOMMIT
+ */
+
++/**************************** CONSTANTS ****************************/
++
+ /* -------------------------- IOCTL LIST -------------------------- */
+
+ /* Basic operations */
+-#define SIOCSIWNAME 0x8B00 /* Unused */
++#define SIOCSIWCOMMIT 0x8B00 /* Commit pending changes to driver */
+ #define SIOCGIWNAME 0x8B01 /* get name == wireless protocol */
+ #define SIOCSIWNWID 0x8B02 /* set network id (the cell) */
+ #define SIOCGIWNWID 0x8B03 /* get network id */
+@@ -414,13 +434,49 @@ struct iw_statistics
+
+ /* ------------------------ IOCTL REQUEST ------------------------ */
+ /*
++ * This structure defines the payload of an ioctl, and is used
++ * below.
++ *
++ * Note that this structure should fit on the memory footprint
++ * of iwreq (which is the same as ifreq), which mean a max size of
++ * 16 octets = 128 bits. Warning, pointers might be 64 bits wide...
++ * You should check this when increasing the structures defined
++ * above in this file...
++ */
++union iwreq_data
++{
++ /* Config - generic */
++ char name[IFNAMSIZ];
++ /* Name : used to verify the presence of wireless extensions.
++ * Name of the protocol/provider... */
++
++ struct iw_point essid; /* Extended network name */
++ struct iw_param nwid; /* network id (or domain - the cell) */
++ struct iw_freq freq; /* frequency or channel :
++ * 0-1000 = channel
++ * > 1000 = frequency in Hz */
++
++ struct iw_param sens; /* signal level threshold */
++ struct iw_param bitrate; /* default bit rate */
++ struct iw_param txpower; /* default transmit power */
++ struct iw_param rts; /* RTS threshold threshold */
++ struct iw_param frag; /* Fragmentation threshold */
++ __u32 mode; /* Operation mode */
++ struct iw_param retry; /* Retry limits & lifetime */
++
++ struct iw_point encoding; /* Encoding stuff : tokens */
++ struct iw_param power; /* PM duration/timeout */
++
++ struct sockaddr ap_addr; /* Access point address */
++
++ struct iw_point data; /* Other large parameters */
++};
++
++/*
+ * The structure to exchange data for ioctl.
+ * This structure is the same as 'struct ifreq', but (re)defined for
+ * convenience...
+- *
+- * Note that it should fit on the same memory footprint !
+- * You should check this when increasing the above structures (16 octets)
+- * 16 octets = 128 bits. Warning, pointers might be 64 bits wide...
++ * Do I need to remind you about structure size (32 octets) ?
+ */
+ struct iwreq
+ {
+@@ -429,35 +485,8 @@ struct iwreq
+ char ifrn_name[IFNAMSIZ]; /* if name, e.g. "eth0" */
+ } ifr_ifrn;
+
+- /* Data part */
+- union
+- {
+- /* Config - generic */
+- char name[IFNAMSIZ];
+- /* Name : used to verify the presence of wireless extensions.
+- * Name of the protocol/provider... */
+-
+- struct iw_point essid; /* Extended network name */
+- struct iw_param nwid; /* network id (or domain - the cell) */
+- struct iw_freq freq; /* frequency or channel :
+- * 0-1000 = channel
+- * > 1000 = frequency in Hz */
+-
+- struct iw_param sens; /* signal level threshold */
+- struct iw_param bitrate; /* default bit rate */
+- struct iw_param txpower; /* default transmit power */
+- struct iw_param rts; /* RTS threshold threshold */
+- struct iw_param frag; /* Fragmentation threshold */
+- __u32 mode; /* Operation mode */
+- struct iw_param retry; /* Retry limits & lifetime */
+-
+- struct iw_point encoding; /* Encoding stuff : tokens */
+- struct iw_param power; /* PM duration/timeout */
+-
+- struct sockaddr ap_addr; /* Access point address */
+-
+- struct iw_point data; /* Other large parameters */
+- } u;
++ /* Data part (defined just above) */
++ union iwreq_data u;
+ };
+
+ /* -------------------------- IOCTL DATA -------------------------- */
+diff -u -p -r --new-file linux/include/net-w12/iw_handler.h linux/include/net/iw_handler.h
+--- linux/include/net-w12/iw_handler.h Wed Dec 31 16:00:00 1969
++++ linux/include/net/iw_handler.h Thu Jan 17 12:16:46 2002
+@@ -0,0 +1,374 @@
++/*
++ * This file define the new driver API for Wireless Extensions
++ *
++ * Version : 2 6.12.01
++ *
++ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
++ * Copyright (c) 2001 Jean Tourrilhes, All Rights Reserved.
++ */
++
++#ifndef _IW_HANDLER_H
++#define _IW_HANDLER_H
++
++/************************** DOCUMENTATION **************************/
++/*
++ * Initial driver API (1996 -> onward) :
++ * -----------------------------------
++ * The initial API just sends the IOCTL request received from user space
++ * to the driver (via the driver ioctl handler). The driver has to
++ * handle all the rest...
++ *
++ * The initial API also defines a specific handler in struct net_device
++ * to handle wireless statistics.
++ *
++ * The initial APIs served us well and has proven a reasonably good design.
++ * However, there is a few shortcommings :
++ * o No events, everything is a request to the driver.
++ * o Large ioctl function in driver with gigantic switch statement
++ * (i.e. spaghetti code).
++ * o Driver has to mess up with copy_to/from_user, and in many cases
++ * does it unproperly. Common mistakes are :
++ * * buffer overflows (no checks or off by one checks)
++ * * call copy_to/from_user with irq disabled
++ * o The user space interface is tied to ioctl because of the use
++ * copy_to/from_user.
++ *
++ * New driver API (2001 -> onward) :
++ * -------------------------------
++ * The new driver API is just a bunch of standard functions (handlers),
++ * each handling a specific Wireless Extension. The driver just export
++ * the list of handler it supports, and those will be called apropriately.
++ *
++ * I tried to keep the main advantage of the previous API (simplicity,
++ * efficiency and light weight), and also I provide a good dose of backward
++ * compatibility (most structures are the same, driver can use both API
++ * simultaneously, ...).
++ * Hopefully, I've also addressed the shortcomming of the initial API.
++ *
++ * The advantage of the new API are :
++ * o Handling of Extensions in driver broken in small contained functions
++ * o Tighter checks of ioctl before calling the driver
++ * o Flexible commit strategy (at least, the start of it)
++ * o Backward compatibility (can be mixed with old API)
++ * o Driver doesn't have to worry about memory and user-space issues
++ * The last point is important for the following reasons :
++ * o You are now able to call the new driver API from any API you
++ * want (including from within other parts of the kernel).
++ * o Common mistakes are avoided (buffer overflow, user space copy
++ * with irq disabled and so on).
++ *
++ * The Drawback of the new API are :
++ * o bloat (especially kernel)
++ * o need to migrate existing drivers to new API
++ * My initial testing shows that the new API adds around 3kB to the kernel
++ * and save between 0 and 5kB from a typical driver.
++ * Also, as all structures and data types are unchanged, the migration is
++ * quite straightforward (but tedious).
++ *
++ * ---
++ *
++ * The new driver API is defined below in this file. User space should
++ * not be aware of what's happening down there...
++ *
++ * A new kernel wrapper is in charge of validating the IOCTLs and calling
++ * the appropriate driver handler. This is implemented in :
++ * # net/core/wireless.c
++ *
++ * The driver export the list of handlers in :
++ * # include/linux/netdevice.h (one place)
++ *
++ * The new driver API is available for WIRELESS_EXT >= 13.
++ * Good luck with migration to the new API ;-)
++ */
++
++/* ---------------------- THE IMPLEMENTATION ---------------------- */
++/*
++ * Some of the choice I've made are pretty controversials. Defining an
++ * API is very much weighting compromises. This goes into some of the
++ * details and the thinking behind the implementation.
++ *
++ * Implementation goals :
++ * --------------------
++ * The implementation goals were as follow :
++ * o Obvious : you should not need a PhD to understand what's happening,
++ * the benefit is easier maintainance.
++ * o Flexible : it should accomodate a wide variety of driver
++ * implementations and be as flexible as the old API.
++ * o Lean : it should be efficient memory wise to minimise the impact
++ * on kernel footprint.
++ * o Transparent to user space : the large number of user space
++ * applications that use Wireless Extensions should not need
++ * any modifications.
++ *
++ * Array of functions versus Struct of functions
++ * ---------------------------------------------
++ * 1) Having an array of functions allow the kernel code to access the
++ * handler in a single lookup, which is much more efficient (think hash
++ * table here).
++ * 2) The only drawback is that driver writer may put their handler in
++ * the wrong slot. This is trivial to test (I set the frequency, the
++ * bitrate changes). Once the handler is in the proper slot, it will be
++ * there forever, because the array is only extended at the end.
++ * 3) Backward/forward compatibility : adding new handler just require
++ * extending the array, so you can put newer driver in older kernel
++ * without having to patch the kernel code (and vice versa).
++ *
++ * All handler are of the same generic type
++ * ----------------------------------------
++ * That's a feature !!!
++ * 1) Having a generic handler allow to have generic code, which is more
++ * efficient. If each of the handler was individually typed I would need
++ * to add a big switch in the kernel (== more bloat). This solution is
++ * more scalable, adding new Wireless Extensions doesn't add new code.
++ * 2) You can use the same handler in different slots of the array. For
++ * hardware, it may be more efficient or logical to handle multiple
++ * Wireless Extensions with a single function, and the API allow you to
++ * do that. (An example would be a single record on the card to control
++ * both bitrate and frequency, the handler would read the old record,
++ * modify it according to info->cmd and rewrite it).
++ *
++ * Functions prototype uses union iwreq_data
++ * -----------------------------------------
++ * Some would have prefered functions defined this way :
++ * static int mydriver_ioctl_setrate(struct net_device *dev,
++ * long rate, int auto)
++ * 1) The kernel code doesn't "validate" the content of iwreq_data, and
++ * can't do it (different hardware may have different notion of what a
++ * valid frequency is), so we don't pretend that we do it.
++ * 2) The above form is not extendable. If I want to add a flag (for
++ * example to distinguish setting max rate and basic rate), I would
++ * break the prototype. Using iwreq_data is more flexible.
++ * 3) Also, the above form is not generic (see above).
++ * 4) I don't expect driver developper using the wrong field of the
++ * union (Doh !), so static typechecking doesn't add much value.
++ * 5) Lastly, you can skip the union by doing :
++ * static int mydriver_ioctl_setrate(struct net_device *dev,
++ * struct iw_request_info *info,
++ * struct iw_param *rrq,
++ * char *extra)
++ * And then adding the handler in the array like this :
++ * (iw_handler) mydriver_ioctl_setrate, // SIOCSIWRATE
++ *
++ * Using functions and not a registry
++ * ----------------------------------
++ * Another implementation option would have been for every instance to
++ * define a registry (a struct containing all the Wireless Extensions)
++ * and only have a function to commit the registry to the hardware.
++ * 1) This approach can be emulated by the current code, but not
++ * vice versa.
++ * 2) Some drivers don't keep any configuration in the driver, for them
++ * adding such a registry would be a significant bloat.
++ * 3) The code to translate from Wireless Extension to native format is
++ * needed anyway, so it would not reduce significantely the amount of code.
++ * 4) The current approach only selectively translate Wireless Extensions
++ * to native format and only selectively set, whereas the registry approach
++ * would require to translate all WE and set all parameters for any single
++ * change.
++ * 5) For many Wireless Extensions, the GET operation return the current
++ * dynamic value, not the value that was set.
++ *
++ * This header is <net/iw_handler.h>
++ * ---------------------------------
++ * 1) This header is kernel space only and should not be exported to
++ * user space. Headers in "include/linux/" are exported, headers in
++ * "include/net/" are not.
++ *
++ * Mixed 32/64 bit issues
++ * ----------------------
++ * The Wireless Extensions are designed to be 64 bit clean, by using only
++ * datatypes with explicit storage size.
++ * There are some issues related to kernel and user space using different
++ * memory model, and in particular 64bit kernel with 32bit user space.
++ * The problem is related to struct iw_point, that contains a pointer
++ * that *may* need to be translated.
++ * This is quite messy. The new API doesn't solve this problem (it can't),
++ * but is a step in the right direction :
++ * 1) Meta data about each ioctl is easily available, so we know what type
++ * of translation is needed.
++ * 2) The move of data between kernel and user space is only done in a single
++ * place in the kernel, so adding specific hooks in there is possible.
++ * 3) In the long term, it allows to move away from using ioctl as the
++ * user space API.
++ *
++ * So many comments and so few code
++ * --------------------------------
++ * That's a feature. Comments won't bloat the resulting kernel binary.
++ */
++
++/***************************** INCLUDES *****************************/
++
++#include <linux/wireless.h> /* IOCTL user space API */
++
++/***************************** VERSION *****************************/
++/*
++ * This constant is used to know which version of the driver API is
++ * available. Hopefully, this will be pretty stable and no changes
++ * will be needed...
++ * I just plan to increment with each new version.
++ */
++#define IW_HANDLER_VERSION 2
++
++/**************************** CONSTANTS ****************************/
++
++/* Special error message for the driver to indicate that we
++ * should do a commit after return from the iw_handler */
++#define EIWCOMMIT EINPROGRESS
++
++/* Flags available in struct iw_request_info */
++#define IW_REQUEST_FLAG_NONE 0x0000 /* No flag so far */
++
++/* Type of headers we know about (basically union iwreq_data) */
++#define IW_HEADER_TYPE_NULL 0 /* Not available */
++#define IW_HEADER_TYPE_CHAR 2 /* char [IFNAMSIZ] */
++#define IW_HEADER_TYPE_UINT 4 /* __u32 */
++#define IW_HEADER_TYPE_FREQ 5 /* struct iw_freq */
++#define IW_HEADER_TYPE_POINT 6 /* struct iw_point */
++#define IW_HEADER_TYPE_PARAM 7 /* struct iw_param */
++#define IW_HEADER_TYPE_ADDR 8 /* struct sockaddr */
++
++/* Handling flags */
++/* Most are not implemented. I just use them as a reminder of some
++ * cool features we might need one day ;-) */
++#define IW_DESCR_FLAG_NONE 0x0000 /* Obvious */
++/* Wrapper level flags */
++#define IW_DESCR_FLAG_DUMP 0x0001 /* Not part of the dump command */
++#define IW_DESCR_FLAG_EVENT 0x0002 /* Generate an event on SET */
++#define IW_DESCR_FLAG_RESTRICT 0x0004 /* GET request is ROOT only */
++/* Driver level flags */
++#define IW_DESCR_FLAG_WAIT 0x0100 /* Wait for driver event */
++
++/****************************** TYPES ******************************/
++
++/* ----------------------- WIRELESS HANDLER ----------------------- */
++/*
++ * A wireless handler is just a standard function, that looks like the
++ * ioctl handler.
++ * We also define there how a handler list look like... As the Wireless
++ * Extension space is quite dense, we use a simple array, which is faster
++ * (that's the perfect hash table ;-).
++ */
++
++/*
++ * Meta data about the request passed to the iw_handler.
++ * Most handlers can safely ignore what's in there.
++ * The 'cmd' field might come handy if you want to use the same handler
++ * for multiple command...
++ * This struct is also my long term insurance. I can add new fields here
++ * without breaking the prototype of iw_handler...
++ */
++struct iw_request_info
++{
++ __u16 cmd; /* Wireless Extension command */
++ __u16 flags; /* More to come ;-) */
++};
++
++/*
++ * This is how a function handling a Wireless Extension should look
++ * like (both get and set, standard and private).
++ */
++typedef int (*iw_handler)(struct net_device *dev, struct iw_request_info *info,
++ union iwreq_data *wrqu, char *extra);
++
++/*
++ * This define all the handler that the driver export.
++ * As you need only one per driver type, please use a static const
++ * shared by all driver instances... Same for the members...
++ * This will be linked from net_device in <linux/netdevice.h>
++ */
++struct iw_handler_def
++{
++ /* Number of handlers defined (more precisely, index of the
++ * last defined handler + 1) */
++ __u16 num_standard;
++ __u16 num_private;
++ /* Number of private arg description */
++ __u16 num_private_args;
++
++ /* Array of handlers for standard ioctls
++ * We will call dev->wireless_handlers->standard[ioctl - SIOCSIWNAME]
++ */
++ iw_handler * standard;
++
++ /* Array of handlers for private ioctls
++ * Will call dev->wireless_handlers->private[ioctl - SIOCIWFIRSTPRIV]
++ */
++ iw_handler * private;
++
++ /* Arguments of private handler. This one is just a list, so you
++ * can put it in any order you want and should not leave holes...
++ * We will automatically export that to user space... */
++ struct iw_priv_args * private_args;
++
++ /* In the long term, get_wireless_stats will move from
++ * 'struct net_device' to here, to minimise bloat. */
++};
++
++/* ----------------------- WIRELESS EVENTS ----------------------- */
++/*
++ * Currently we don't support events, so let's just plan for the
++ * future...
++ */
++
++/*
++ * A Wireless Event.
++ */
++// How do we define short header ? We don't want a flag on length.
++// Probably a flag on event ? Highest bit to zero...
++struct iw_event
++{
++ __u16 length; /* Lenght of this stuff */
++ __u16 event; /* Wireless IOCTL */
++ union iwreq_data header; /* IOCTL fixed payload */
++ char extra[0]; /* Optional IOCTL data */
++};
++
++/* ---------------------- IOCTL DESCRIPTION ---------------------- */
++/*
++ * One of the main goal of the new interface is to deal entirely with
++ * user space/kernel space memory move.
++ * For that, we need to know :
++ * o if iwreq is a pointer or contain the full data
++ * o what is the size of the data to copy
++ *
++ * For private IOCTLs, we use the same rules as used by iwpriv and
++ * defined in struct iw_priv_args.
++ *
++ * For standard IOCTLs, things are quite different and we need to
++ * use the stuctures below. Actually, this struct is also more
++ * efficient, but that's another story...
++ */
++
++/*
++ * Describe how a standard IOCTL looks like.
++ */
++struct iw_ioctl_description
++{
++ __u8 header_type; /* NULL, iw_point or other */
++ __u8 token_type; /* Future */
++ __u16 token_size; /* Granularity of payload */
++ __u16 min_tokens; /* Min acceptable token number */
++ __u16 max_tokens; /* Max acceptable token number */
++ __u32 flags; /* Special handling of the request */
++};
++
++/* Need to think of short header translation table. Later. */
++
++/**************************** PROTOTYPES ****************************/
++/*
++ * Functions part of the Wireless Extensions (defined in net/core/wireless.c).
++ * Those may be called only within the kernel.
++ */
++
++/* First : function strictly used inside the kernel */
++
++/* Handle /proc/net/wireless, called in net/code/dev.c */
++extern int dev_get_wireless_info(char * buffer, char **start, off_t offset,
++ int length);
++
++/* Handle IOCTLs, called in net/code/dev.c */
++extern int wireless_process_ioctl(struct ifreq *ifr, unsigned int cmd);
++
++/* Second : functions that may be called by driver modules */
++/* None yet */
++
++#endif /* _LINUX_WIRELESS_H */
+diff -u -p -r --new-file linux/net/core-w12/Makefile linux/net/core/Makefile
+--- linux/net/core-w12/Makefile Tue Oct 30 15:08:12 2001
++++ linux/net/core/Makefile Thu Jan 17 11:06:07 2002
+@@ -26,5 +26,8 @@ obj-$(CONFIG_NET) += dev.o dev_mcast.o d
+ obj-$(CONFIG_NETFILTER) += netfilter.o
+ obj-$(CONFIG_NET_DIVERT) += dv.o
+ obj-$(CONFIG_NET_PROFILE) += profile.o
++obj-$(CONFIG_NET_RADIO) += wireless.o
++# Ugly. I wish all wireless drivers were moved in drivers/net/wireless
++obj-$(CONFIG_NET_PCMCIA_RADIO) += wireless.o
+
+ include $(TOPDIR)/Rules.make
+diff -u -p -r --new-file linux/net/core-w12/dev.c linux/net/core/dev.c
+--- linux/net/core-w12/dev.c Wed Nov 7 14:39:36 2001
++++ linux/net/core/dev.c Thu Jan 17 11:06:07 2002
+@@ -102,6 +102,7 @@
+ #include <linux/module.h>
+ #if defined(CONFIG_NET_RADIO) || defined(CONFIG_NET_PCMCIA_RADIO)
+ #include <linux/wireless.h> /* Note : will define WIRELESS_EXT */
++#include <net/iw_handler.h>
+ #endif /* CONFIG_NET_RADIO || CONFIG_NET_PCMCIA_RADIO */
+ #ifdef CONFIG_PLIP
+ extern int plip_init(void);
+@@ -1796,122 +1797,6 @@ static int dev_proc_stats(char *buffer,
+ #endif /* CONFIG_PROC_FS */
+
+
+-#ifdef WIRELESS_EXT
+-#ifdef CONFIG_PROC_FS
+-
+-/*
+- * Print one entry of /proc/net/wireless
+- * This is a clone of /proc/net/dev (just above)
+- */
+-static int sprintf_wireless_stats(char *buffer, struct net_device *dev)
+-{
+- /* Get stats from the driver */
+- struct iw_statistics *stats = (dev->get_wireless_stats ?
+- dev->get_wireless_stats(dev) :
+- (struct iw_statistics *) NULL);
+- int size;
+-
+- if (stats != (struct iw_statistics *) NULL) {
+- size = sprintf(buffer,
+- "%6s: %04x %3d%c %3d%c %3d%c %6d %6d %6d %6d %6d %6d\n",
+- dev->name,
+- stats->status,
+- stats->qual.qual,
+- stats->qual.updated & 1 ? '.' : ' ',
+- stats->qual.level,
+- stats->qual.updated & 2 ? '.' : ' ',
+- stats->qual.noise,
+- stats->qual.updated & 4 ? '.' : ' ',
+- stats->discard.nwid,
+- stats->discard.code,
+- stats->discard.fragment,
+- stats->discard.retries,
+- stats->discard.misc,
+- stats->miss.beacon);
+- stats->qual.updated = 0;
+- }
+- else
+- size = 0;
+-
+- return size;
+-}
+-
+-/*
+- * Print info for /proc/net/wireless (print all entries)
+- * This is a clone of /proc/net/dev (just above)
+- */
+-static int dev_get_wireless_info(char * buffer, char **start, off_t offset,
+- int length)
+-{
+- int len = 0;
+- off_t begin = 0;
+- off_t pos = 0;
+- int size;
+-
+- struct net_device * dev;
+-
+- size = sprintf(buffer,
+- "Inter-| sta-| Quality | Discarded packets | Missed\n"
+- " face | tus | link level noise | nwid crypt frag retry misc | beacon\n"
+- );
+-
+- pos += size;
+- len += size;
+-
+- read_lock(&dev_base_lock);
+- for (dev = dev_base; dev != NULL; dev = dev->next) {
+- size = sprintf_wireless_stats(buffer + len, dev);
+- len += size;
+- pos = begin + len;
+-
+- if (pos < offset) {
+- len = 0;
+- begin = pos;
+- }
+- if (pos > offset + length)
+- break;
+- }
+- read_unlock(&dev_base_lock);
+-
+- *start = buffer + (offset - begin); /* Start of wanted data */
+- len -= (offset - begin); /* Start slop */
+- if (len > length)
+- len = length; /* Ending slop */
+- if (len < 0)
+- len = 0;
+-
+- return len;
+-}
+-#endif /* CONFIG_PROC_FS */
+-
+-/*
+- * Allow programatic access to /proc/net/wireless even if /proc
+- * doesn't exist... Also more efficient...
+- */
+-static inline int dev_iwstats(struct net_device *dev, struct ifreq *ifr)
+-{
+- /* Get stats from the driver */
+- struct iw_statistics *stats = (dev->get_wireless_stats ?
+- dev->get_wireless_stats(dev) :
+- (struct iw_statistics *) NULL);
+-
+- if (stats != (struct iw_statistics *) NULL) {
+- struct iwreq * wrq = (struct iwreq *)ifr;
+-
+- /* Copy statistics to the user buffer */
+- if(copy_to_user(wrq->u.data.pointer, stats,
+- sizeof(struct iw_statistics)))
+- return -EFAULT;
+-
+- /* Check if we need to clear the update flag */
+- if(wrq->u.data.flags != 0)
+- stats->qual.updated = 0;
+- return(0);
+- } else
+- return -EOPNOTSUPP;
+-}
+-#endif /* WIRELESS_EXT */
+-
+ /**
+ * netdev_set_master - set up master/slave pair
+ * @slave: slave device
+@@ -2209,11 +2094,6 @@ static int dev_ifsioc(struct ifreq *ifr,
+ notifier_call_chain(&netdev_chain, NETDEV_CHANGENAME, dev);
+ return 0;
+
+-#ifdef WIRELESS_EXT
+- case SIOCGIWSTATS:
+- return dev_iwstats(dev, ifr);
+-#endif /* WIRELESS_EXT */
+-
+ /*
+ * Unknown or private ioctl
+ */
+@@ -2239,17 +2119,6 @@ static int dev_ifsioc(struct ifreq *ifr,
+ return -EOPNOTSUPP;
+ }
+
+-#ifdef WIRELESS_EXT
+- if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) {
+- if (dev->do_ioctl) {
+- if (!netif_device_present(dev))
+- return -ENODEV;
+- return dev->do_ioctl(dev, ifr, cmd);
+- }
+- return -EOPNOTSUPP;
+- }
+-#endif /* WIRELESS_EXT */
+-
+ }
+ return -EINVAL;
+ }
+@@ -2431,7 +2300,8 @@ int dev_ioctl(unsigned int cmd, void *ar
+ }
+ dev_load(ifr.ifr_name);
+ rtnl_lock();
+- ret = dev_ifsioc(&ifr, cmd);
++ /* Follow me in net/core/wireless.c */
++ ret = wireless_process_ioctl(&ifr, cmd);
+ rtnl_unlock();
+ if (!ret && IW_IS_GET(cmd) &&
+ copy_to_user(arg, &ifr, sizeof(struct ifreq)))
+@@ -2856,6 +2726,7 @@ int __init net_dev_init(void)
+ proc_net_create("dev", 0, dev_get_info);
+ create_proc_read_entry("net/softnet_stat", 0, 0, dev_proc_stats, NULL);
+ #ifdef WIRELESS_EXT
++ /* Available in net/core/wireless.c */
+ proc_net_create("wireless", 0, dev_get_wireless_info);
+ #endif /* WIRELESS_EXT */
+ #endif /* CONFIG_PROC_FS */
+diff -u -p -r --new-file linux/net/core-w12/wireless.c linux/net/core/wireless.c
+--- linux/net/core-w12/wireless.c Wed Dec 31 16:00:00 1969
++++ linux/net/core/wireless.c Mon Jan 21 11:13:23 2002
+@@ -0,0 +1,733 @@
++/*
++ * This file implement the Wireless Extensions APIs.
++ *
++ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
++ * Copyright (c) 1997-2001 Jean Tourrilhes, All Rights Reserved.
++ *
++ * (As all part of the Linux kernel, this file is GPL)
++ */
++
++/************************** DOCUMENTATION **************************/
++/*
++ * API definition :
++ * --------------
++ * See <linux/wireless.h> for details of the APIs and the rest.
++ *
++ * History :
++ * -------
++ *
++ * v1 - 5.12.01 - Jean II
++ * o Created this file.
++ *
++ * v2 - 13.12.01 - Jean II
++ * o Move /proc/net/wireless stuff from net/core/dev.c to here
++ * o Make Wireless Extension IOCTLs go through here
++ * o Added iw_handler handling ;-)
++ * o Added standard ioctl description
++ * o Initial dumb commit strategy based on orinoco.c
++ */
++
++/***************************** INCLUDES *****************************/
++
++#include <asm/uaccess.h> /* copy_to_user() */
++#include <linux/config.h> /* Not needed ??? */
++#include <linux/types.h> /* off_t */
++#include <linux/netdevice.h> /* struct ifreq, dev_get_by_name() */
++
++#include <linux/wireless.h> /* Pretty obvious */
++#include <net/iw_handler.h> /* New driver API */
++
++/**************************** CONSTANTS ****************************/
++
++/* This will be turned on later on... */
++#undef WE_STRICT_WRITE /* Check write buffer size */
++
++/* Debuging stuff */
++#undef WE_IOCTL_DEBUG /* Debug IOCTL API */
++
++/************************* GLOBAL VARIABLES *************************/
++/*
++ * You should not use global variables, because or re-entrancy.
++ * On our case, it's only const, so it's OK...
++ */
++static const struct iw_ioctl_description standard_ioctl[] = {
++ /* SIOCSIWCOMMIT (internal) */
++ { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
++ /* SIOCGIWNAME */
++ { IW_HEADER_TYPE_CHAR, 0, 0, 0, 0, IW_DESCR_FLAG_DUMP},
++ /* SIOCSIWNWID */
++ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, IW_DESCR_FLAG_EVENT},
++ /* SIOCGIWNWID */
++ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, IW_DESCR_FLAG_DUMP},
++ /* SIOCSIWFREQ */
++ { IW_HEADER_TYPE_FREQ, 0, 0, 0, 0, IW_DESCR_FLAG_EVENT},
++ /* SIOCGIWFREQ */
++ { IW_HEADER_TYPE_FREQ, 0, 0, 0, 0, IW_DESCR_FLAG_DUMP},
++ /* SIOCSIWMODE */
++ { IW_HEADER_TYPE_UINT, 0, 0, 0, 0, IW_DESCR_FLAG_EVENT},
++ /* SIOCGIWMODE */
++ { IW_HEADER_TYPE_UINT, 0, 0, 0, 0, IW_DESCR_FLAG_DUMP},
++ /* SIOCSIWSENS */
++ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, 0},
++ /* SIOCGIWSENS */
++ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, 0},
++ /* SIOCSIWRANGE */
++ { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
++ /* SIOCGIWRANGE */
++ { IW_HEADER_TYPE_POINT, 0, 1, 0, sizeof(struct iw_range), IW_DESCR_FLAG_DUMP},
++ /* SIOCSIWPRIV */
++ { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
++ /* SIOCGIWPRIV (handled directly by us) */
++ { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
++ /* SIOCSIWSTATS */
++ { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
++ /* SIOCGIWSTATS (handled directly by us) */
++ { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, IW_DESCR_FLAG_DUMP},
++ /* SIOCSIWSPY */
++ { IW_HEADER_TYPE_POINT, 0, sizeof(struct sockaddr), 0, IW_MAX_SPY, 0},
++ /* SIOCGIWSPY */
++ { IW_HEADER_TYPE_POINT, 0, (sizeof(struct sockaddr) + sizeof(struct iw_quality)), 0, IW_MAX_SPY, 0},
++ /* -- hole -- */
++ { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
++ /* -- hole -- */
++ { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
++ /* SIOCSIWAP */
++ { IW_HEADER_TYPE_ADDR, 0, 0, 0, 0, 0},
++ /* SIOCGIWAP */
++ { IW_HEADER_TYPE_ADDR, 0, 0, 0, 0, IW_DESCR_FLAG_DUMP},
++ /* -- hole -- */
++ { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
++ /* SIOCGIWAPLIST */
++ { IW_HEADER_TYPE_POINT, 0, (sizeof(struct sockaddr) + sizeof(struct iw_quality)), 0, IW_MAX_AP, 0},
++ /* -- hole -- */
++ { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
++ /* -- hole -- */
++ { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
++ /* SIOCSIWESSID */
++ { IW_HEADER_TYPE_POINT, 0, 1, 0, IW_ESSID_MAX_SIZE, IW_DESCR_FLAG_EVENT},
++ /* SIOCGIWESSID */
++ { IW_HEADER_TYPE_POINT, 0, 1, 0, IW_ESSID_MAX_SIZE, IW_DESCR_FLAG_DUMP},
++ /* SIOCSIWNICKN */
++ { IW_HEADER_TYPE_POINT, 0, 1, 0, IW_ESSID_MAX_SIZE, 0},
++ /* SIOCGIWNICKN */
++ { IW_HEADER_TYPE_POINT, 0, 1, 0, IW_ESSID_MAX_SIZE, 0},
++ /* -- hole -- */
++ { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
++ /* -- hole -- */
++ { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
++ /* SIOCSIWRATE */
++ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, 0},
++ /* SIOCGIWRATE */
++ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, 0},
++ /* SIOCSIWRTS */
++ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, 0},
++ /* SIOCGIWRTS */
++ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, 0},
++ /* SIOCSIWFRAG */
++ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, 0},
++ /* SIOCGIWFRAG */
++ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, 0},
++ /* SIOCSIWTXPOW */
++ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, 0},
++ /* SIOCGIWTXPOW */
++ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, 0},
++ /* SIOCSIWRETRY */
++ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, 0},
++ /* SIOCGIWRETRY */
++ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, 0},
++ /* SIOCSIWENCODE */
++ { IW_HEADER_TYPE_POINT, 4, 1, 0, IW_ENCODING_TOKEN_MAX, IW_DESCR_FLAG_EVENT | IW_DESCR_FLAG_RESTRICT},
++ /* SIOCGIWENCODE */
++ { IW_HEADER_TYPE_POINT, 0, 1, 0, IW_ENCODING_TOKEN_MAX, IW_DESCR_FLAG_DUMP | IW_DESCR_FLAG_RESTRICT},
++ /* SIOCSIWPOWER */
++ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, 0},
++ /* SIOCGIWPOWER */
++ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, 0},
++};
++
++/* Size (in bytes) of the various private data types */
++char priv_type_size[] = { 0, 1, 1, 0, 4, 4, 0, 0 };
++
++/************************ COMMON SUBROUTINES ************************/
++/*
++ * Stuff that may be used in various place or doesn't fit in one
++ * of the section below.
++ */
++
++/* ---------------------------------------------------------------- */
++/*
++ * Return the driver handler associated with a specific Wireless Extension.
++ * Called from various place, so make sure it remains efficient.
++ */
++static inline iw_handler get_handler(struct net_device *dev,
++ unsigned int cmd)
++{
++ unsigned int index; /* MUST be unsigned */
++
++ /* Check if we have some wireless handlers defined */
++ if(dev->wireless_handlers == NULL)
++ return NULL;
++
++ /* Try as a standard command */
++ index = cmd - SIOCIWFIRST;
++ if(index < dev->wireless_handlers->num_standard)
++ return dev->wireless_handlers->standard[index];
++
++ /* Try as a private command */
++ index = cmd - SIOCIWFIRSTPRIV;
++ if(index < dev->wireless_handlers->num_private)
++ return dev->wireless_handlers->private[index];
++
++ /* Not found */
++ return NULL;
++}
++
++/* ---------------------------------------------------------------- */
++/*
++ * Get statistics out of the driver
++ */
++static inline struct iw_statistics *get_wireless_stats(struct net_device *dev)
++{
++ return (dev->get_wireless_stats ?
++ dev->get_wireless_stats(dev) :
++ (struct iw_statistics *) NULL);
++ /* In the future, get_wireless_stats may move from 'struct net_device'
++ * to 'struct iw_handler_def', to de-bloat struct net_device.
++ * Definitely worse a thought... */
++}
++
++/* ---------------------------------------------------------------- */
++/*
++ * Call the commit handler in the driver
++ * (if exist and if conditions are right)
++ *
++ * Note : our current commit strategy is currently pretty dumb,
++ * but we will be able to improve on that...
++ * The goal is to try to agreagate as many changes as possible
++ * before doing the commit. Drivers that will define a commit handler
++ * are usually those that need a reset after changing parameters, so
++ * we want to minimise the number of reset.
++ * A cool idea is to use a timer : at each "set" command, we re-set the
++ * timer, when the timer eventually fires, we call the driver.
++ * Hopefully, more on that later.
++ *
++ * Also, I'm waiting to see how many people will complain about the
++ * netif_running(dev) test. I'm open on that one...
++ * Hopefully, the driver will remember to do a commit in "open()" ;-)
++ */
++static inline int call_commit_handler(struct net_device * dev)
++{
++ if((netif_running(dev)) &&
++ (dev->wireless_handlers->standard[0] != NULL)) {
++ /* Call the commit handler on the driver */
++ return dev->wireless_handlers->standard[0](dev, NULL,
++ NULL, NULL);
++ } else
++ return 0; /* Command completed successfully */
++}
++
++/* ---------------------------------------------------------------- */
++/*
++ * Number of private arguments
++ */
++static inline int get_priv_size(__u16 args)
++{
++ int num = args & IW_PRIV_SIZE_MASK;
++ int type = (args & IW_PRIV_TYPE_MASK) >> 12;
++
++ return num * priv_type_size[type];
++}
++
++
++/******************** /proc/net/wireless SUPPORT ********************/
++/*
++ * The /proc/net/wireless file is a human readable user-space interface
++ * exporting various wireless specific statistics from the wireless devices.
++ * This is the most popular part of the Wireless Extensions ;-)
++ *
++ * This interface is a pure clone of /proc/net/dev (in net/core/dev.c).
++ * The content of the file is basically the content of "struct iw_statistics".
++ */
++
++#ifdef CONFIG_PROC_FS
++
++/* ---------------------------------------------------------------- */
++/*
++ * Print one entry (line) of /proc/net/wireless
++ */
++static inline int sprintf_wireless_stats(char *buffer, struct net_device *dev)
++{
++ /* Get stats from the driver */
++ struct iw_statistics *stats;
++ int size;
++
++ stats = get_wireless_stats(dev);
++ if (stats != (struct iw_statistics *) NULL) {
++ size = sprintf(buffer,
++ "%6s: %04x %3d%c %3d%c %3d%c %6d %6d %6d %6d %6d %6d\n",
++ dev->name,
++ stats->status,
++ stats->qual.qual,
++ stats->qual.updated & 1 ? '.' : ' ',
++ stats->qual.level,
++ stats->qual.updated & 2 ? '.' : ' ',
++ stats->qual.noise,
++ stats->qual.updated & 4 ? '.' : ' ',
++ stats->discard.nwid,
++ stats->discard.code,
++ stats->discard.fragment,
++ stats->discard.retries,
++ stats->discard.misc,
++ stats->miss.beacon);
++ stats->qual.updated = 0;
++ }
++ else
++ size = 0;
++
++ return size;
++}
++
++/* ---------------------------------------------------------------- */
++/*
++ * Print info for /proc/net/wireless (print all entries)
++ */
++int dev_get_wireless_info(char * buffer, char **start, off_t offset,
++ int length)
++{
++ int len = 0;
++ off_t begin = 0;
++ off_t pos = 0;
++ int size;
++
++ struct net_device * dev;
++
++ size = sprintf(buffer,
++ "Inter-| sta-| Quality | Discarded packets | Missed\n"
++ " face | tus | link level noise | nwid crypt frag retry misc | beacon\n"
++ );
++
++ pos += size;
++ len += size;
++
++ read_lock(&dev_base_lock);
++ for (dev = dev_base; dev != NULL; dev = dev->next) {
++ size = sprintf_wireless_stats(buffer + len, dev);
++ len += size;
++ pos = begin + len;
++
++ if (pos < offset) {
++ len = 0;
++ begin = pos;
++ }
++ if (pos > offset + length)
++ break;
++ }
++ read_unlock(&dev_base_lock);
++
++ *start = buffer + (offset - begin); /* Start of wanted data */
++ len -= (offset - begin); /* Start slop */
++ if (len > length)
++ len = length; /* Ending slop */
++ if (len < 0)
++ len = 0;
++
++ return len;
++}
++#endif /* CONFIG_PROC_FS */
++
++/************************** IOCTL SUPPORT **************************/
++/*
++ * The original user space API to configure all those Wireless Extensions
++ * is through IOCTLs.
++ * In there, we check if we need to call the new driver API (iw_handler)
++ * or just call the driver ioctl handler.
++ */
++
++/* ---------------------------------------------------------------- */
++/*
++ * Allow programatic access to /proc/net/wireless even if /proc
++ * doesn't exist... Also more efficient...
++ */
++static inline int dev_iwstats(struct net_device *dev, struct ifreq *ifr)
++{
++ /* Get stats from the driver */
++ struct iw_statistics *stats;
++
++ stats = get_wireless_stats(dev);
++ if (stats != (struct iw_statistics *) NULL) {
++ struct iwreq * wrq = (struct iwreq *)ifr;
++
++ /* Copy statistics to the user buffer */
++ if(copy_to_user(wrq->u.data.pointer, stats,
++ sizeof(struct iw_statistics)))
++ return -EFAULT;
++
++ /* Check if we need to clear the update flag */
++ if(wrq->u.data.flags != 0)
++ stats->qual.updated = 0;
++ return 0;
++ } else
++ return -EOPNOTSUPP;
++}
++
++/* ---------------------------------------------------------------- */
++/*
++ * Export the driver private handler definition
++ * They will be picked up by tools like iwpriv...
++ */
++static inline int ioctl_export_private(struct net_device * dev,
++ struct ifreq * ifr)
++{
++ struct iwreq * iwr = (struct iwreq *) ifr;
++
++ /* Check if the driver has something to export */
++ if((dev->wireless_handlers->num_private_args == 0) ||
++ (dev->wireless_handlers->private_args == NULL))
++ return -EOPNOTSUPP;
++
++ /* Check NULL pointer */
++ if(iwr->u.data.pointer == NULL)
++ return -EFAULT;
++#ifdef WE_STRICT_WRITE
++ /* Check if there is enough buffer up there */
++ if(iwr->u.data.length < (SIOCIWLASTPRIV - SIOCIWFIRSTPRIV + 1))
++ return -E2BIG;
++#endif /* WE_STRICT_WRITE */
++
++ /* Set the number of available ioctls. */
++ iwr->u.data.length = dev->wireless_handlers->num_private_args;
++
++ /* Copy structure to the user buffer. */
++ if (copy_to_user(iwr->u.data.pointer,
++ dev->wireless_handlers->private_args,
++ sizeof(struct iw_priv_args) * iwr->u.data.length))
++ return -EFAULT;
++
++ return 0;
++}
++
++/* ---------------------------------------------------------------- */
++/*
++ * Wrapper to call a standard Wireless Extension handler.
++ * We do various checks and also take care of moving data between
++ * user space and kernel space.
++ */
++static inline int ioctl_standard_call(struct net_device * dev,
++ struct ifreq * ifr,
++ unsigned int cmd,
++ iw_handler handler)
++{
++ struct iwreq * iwr = (struct iwreq *) ifr;
++ const struct iw_ioctl_description * descr;
++ struct iw_request_info info;
++ int ret = -EINVAL;
++
++ /* Get the description of the IOCTL */
++ descr = &(standard_ioctl[cmd - SIOCIWFIRST]);
++
++#ifdef WE_IOCTL_DEBUG
++ printk(KERN_DEBUG "%s : Found standard handler for 0x%04X\n",
++ ifr->ifr_name, cmd);
++ printk(KERN_DEBUG "Header type : %d, token type : %d, token_size : %d, max_token : %d\n", descr->header_type, descr->token_type, descr->token_size, descr->max_tokens);
++#endif /* WE_IOCTL_DEBUG */
++
++ /* Prepare the call */
++ info.cmd = cmd;
++ info.flags = 0;
++
++ /* Check if we have a pointer to user space data or not */
++ if(descr->header_type != IW_HEADER_TYPE_POINT) {
++ /* No extra arguments. Trivial to handle */
++ ret = handler(dev, &info, &(iwr->u), NULL);
++ } else {
++ char * extra;
++ int err;
++
++ /* Check what user space is giving us */
++ if(IW_IS_SET(cmd)) {
++ /* Check NULL pointer */
++ if((iwr->u.data.pointer == NULL) &&
++ (iwr->u.data.length != 0))
++ return -EFAULT;
++ /* Check if number of token fits within bounds */
++ if(iwr->u.data.length > descr->max_tokens)
++ return -E2BIG;
++ if(iwr->u.data.length < descr->min_tokens)
++ return -EINVAL;
++ } else {
++ /* Check NULL pointer */
++ if(iwr->u.data.pointer == NULL)
++ return -EFAULT;
++#ifdef WE_STRICT_WRITE
++ /* Check if there is enough buffer up there */
++ if(iwr->u.data.length < descr->max_tokens)
++ return -E2BIG;
++#endif /* WE_STRICT_WRITE */
++ }
++
++#ifdef WE_IOCTL_DEBUG
++ printk(KERN_DEBUG "Malloc %d bytes\n",
++ descr->max_tokens * descr->token_size);
++#endif /* WE_IOCTL_DEBUG */
++
++ /* Always allocate for max space. Easier, and won't last
++ * long... */
++ extra = kmalloc(descr->max_tokens * descr->token_size,
++ GFP_KERNEL);
++ if (extra == NULL) {
++ return -ENOMEM;
++ }
++
++ /* If it is a SET, get all the extra data in here */
++ if(IW_IS_SET(cmd) && (iwr->u.data.length != 0)) {
++ err = copy_from_user(extra, iwr->u.data.pointer,
++ iwr->u.data.length *
++ descr->token_size);
++ if (err) {
++ kfree(extra);
++ return -EFAULT;
++ }
++#ifdef WE_IOCTL_DEBUG
++ printk(KERN_DEBUG "Got %d bytes\n",
++ iwr->u.data.length * descr->token_size);
++#endif /* WE_IOCTL_DEBUG */
++ }
++
++ /* Call the handler */
++ ret = handler(dev, &info, &(iwr->u), extra);
++
++ /* If we have something to return to the user */
++ if (!ret && IW_IS_GET(cmd)) {
++ err = copy_to_user(iwr->u.data.pointer, extra,
++ iwr->u.data.length *
++ descr->token_size);
++ if (err)
++ ret = -EFAULT;
++#ifdef WE_IOCTL_DEBUG
++ printk(KERN_DEBUG "Wrote %d bytes\n",
++ iwr->u.data.length * descr->token_size);
++#endif /* WE_IOCTL_DEBUG */
++ }
++
++ /* Cleanup - I told you it wasn't that long ;-) */
++ kfree(extra);
++ }
++
++ /* Call commit handler if needed and defined */
++ if(ret == -EIWCOMMIT)
++ ret = call_commit_handler(dev);
++
++ /* Here, we will generate the appropriate event if needed */
++
++ return ret;
++}
++
++/* ---------------------------------------------------------------- */
++/*
++ * Wrapper to call a private Wireless Extension handler.
++ * We do various checks and also take care of moving data between
++ * user space and kernel space.
++ * It's not as nice and slimline as the standard wrapper. The cause
++ * is struct iw_priv_args, which was not really designed for the
++ * job we are going here.
++ *
++ * IMPORTANT : This function prevent to set and get data on the same
++ * IOCTL and enforce the SET/GET convention. Not doing it would be
++ * far too hairy...
++ * If you need to set and get data at the same time, please don't use
++ * a iw_handler but process it in your ioctl handler (i.e. use the
++ * old driver API).
++ */
++static inline int ioctl_private_call(struct net_device * dev,
++ struct ifreq * ifr,
++ unsigned int cmd,
++ iw_handler handler)
++{
++ struct iwreq * iwr = (struct iwreq *) ifr;
++ struct iw_priv_args * descr = NULL;
++ struct iw_request_info info;
++ int extra_size = 0;
++ int i;
++ int ret = -EINVAL;
++
++ /* Get the description of the IOCTL */
++ for(i = 0; i < dev->wireless_handlers->num_private_args; i++)
++ if(cmd == dev->wireless_handlers->private_args[i].cmd) {
++ descr = &(dev->wireless_handlers->private_args[i]);
++ break;
++ }
++
++#ifdef WE_IOCTL_DEBUG
++ printk(KERN_DEBUG "%s : Found private handler for 0x%04X\n",
++ ifr->ifr_name, cmd);
++ if(descr) {
++ printk(KERN_DEBUG "Name %s, set %X, get %X\n",
++ descr->name, descr->set_args, descr->get_args);
++ }
++#endif /* WE_IOCTL_DEBUG */
++
++ /* Compute the size of the set/get arguments */
++ if(descr != NULL) {
++ if(IW_IS_SET(cmd)) {
++ /* Size of set arguments */
++ extra_size = get_priv_size(descr->set_args);
++
++ /* Does it fits in iwr ? */
++ if((descr->set_args & IW_PRIV_SIZE_FIXED) &&
++ (extra_size < IFNAMSIZ))
++ extra_size = 0;
++ } else {
++ /* Size of set arguments */
++ extra_size = get_priv_size(descr->get_args);
++
++ /* Does it fits in iwr ? */
++ if((descr->get_args & IW_PRIV_SIZE_FIXED) &&
++ (extra_size < IFNAMSIZ))
++ extra_size = 0;
++ }
++ }
++
++ /* Prepare the call */
++ info.cmd = cmd;
++ info.flags = 0;
++
++ /* Check if we have a pointer to user space data or not. */
++ if(extra_size == 0) {
++ /* No extra arguments. Trivial to handle */
++ ret = handler(dev, &info, &(iwr->u), (char *) &(iwr->u));
++ } else {
++ char * extra;
++ int err;
++
++ /* Check what user space is giving us */
++ if(IW_IS_SET(cmd)) {
++ /* Check NULL pointer */
++ if((iwr->u.data.pointer == NULL) &&
++ (iwr->u.data.length != 0))
++ return -EFAULT;
++
++ /* Does it fits within bounds ? */
++ if(iwr->u.data.length > (descr->set_args &
++ IW_PRIV_SIZE_MASK))
++ return -E2BIG;
++ } else {
++ /* Check NULL pointer */
++ if(iwr->u.data.pointer == NULL)
++ return -EFAULT;
++ }
++
++#ifdef WE_IOCTL_DEBUG
++ printk(KERN_DEBUG "Malloc %d bytes\n", extra_size);
++#endif /* WE_IOCTL_DEBUG */
++
++ /* Always allocate for max space. Easier, and won't last
++ * long... */
++ extra = kmalloc(extra_size, GFP_KERNEL);
++ if (extra == NULL) {
++ return -ENOMEM;
++ }
++
++ /* If it is a SET, get all the extra data in here */
++ if(IW_IS_SET(cmd) && (iwr->u.data.length != 0)) {
++ err = copy_from_user(extra, iwr->u.data.pointer,
++ extra_size);
++ if (err) {
++ kfree(extra);
++ return -EFAULT;
++ }
++#ifdef WE_IOCTL_DEBUG
++ printk(KERN_DEBUG "Got %d elem\n", iwr->u.data.length);
++#endif /* WE_IOCTL_DEBUG */
++ }
++
++ /* Call the handler */
++ ret = handler(dev, &info, &(iwr->u), extra);
++
++ /* If we have something to return to the user */
++ if (!ret && IW_IS_GET(cmd)) {
++ err = copy_to_user(iwr->u.data.pointer, extra,
++ extra_size);
++ if (err)
++ ret = -EFAULT;
++#ifdef WE_IOCTL_DEBUG
++ printk(KERN_DEBUG "Wrote %d elem\n",
++ iwr->u.data.length);
++#endif /* WE_IOCTL_DEBUG */
++ }
++
++ /* Cleanup - I told you it wasn't that long ;-) */
++ kfree(extra);
++ }
++
++
++ /* Call commit handler if needed and defined */
++ if(ret == -EIWCOMMIT)
++ ret = call_commit_handler(dev);
++
++ return ret;
++}
++
++/* ---------------------------------------------------------------- */
++/*
++ * Main IOCTl dispatcher. Called from the main networking code
++ * (dev_ioctl() in net/core/dev.c).
++ * Check the type of IOCTL and call the appropriate wrapper...
++ */
++int wireless_process_ioctl(struct ifreq *ifr, unsigned int cmd)
++{
++ struct net_device *dev;
++ iw_handler handler;
++
++ /* Permissions are already checked in dev_ioctl() before calling us.
++ * The copy_to/from_user() of ifr is also dealt with in there */
++
++ /* Make sure the device exist */
++ if ((dev = __dev_get_by_name(ifr->ifr_name)) == NULL)
++ return -ENODEV;
++
++ /* A bunch of special cases, then the generic case...
++ * Note that 'cmd' is already filtered in dev_ioctl() with
++ * (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST) */
++ switch(cmd)
++ {
++ case SIOCGIWSTATS:
++ /* Get Wireless Stats */
++ return dev_iwstats(dev, ifr);
++
++ case SIOCGIWPRIV:
++ /* Check if we have some wireless handlers defined */
++ if(dev->wireless_handlers != NULL) {
++ /* We export to user space the definition of
++ * the private handler ourselves */
++ return ioctl_export_private(dev, ifr);
++ }
++ // ## Fall-through for old API ##
++ default:
++ /* Generic IOCTL */
++ /* Basic check */
++ if (!netif_device_present(dev))
++ return -ENODEV;
++ /* New driver API : try to find the handler */
++ handler = get_handler(dev, cmd);
++ if(handler != NULL) {
++ /* Standard and private are not the same */
++ if(cmd < SIOCIWFIRSTPRIV)
++ return ioctl_standard_call(dev,
++ ifr,
++ cmd,
++ handler);
++ else
++ return ioctl_private_call(dev,
++ ifr,
++ cmd,
++ handler);
++ }
++ /* Old driver API : call driver ioctl handler */
++ if (dev->do_ioctl) {
++ return dev->do_ioctl(dev, ifr, cmd);
++ }
++ return -EOPNOTSUPP;
++ }
++ /* Not reached */
++ return -EINVAL;
++}
diff --git a/recipes/obsolete/linux/files/iw_handlers.w14-5.diff b/recipes/obsolete/linux/files/iw_handlers.w14-5.diff
new file mode 100644
index 0000000000..539b160068
--- /dev/null
+++ b/recipes/obsolete/linux/files/iw_handlers.w14-5.diff
@@ -0,0 +1,838 @@
+diff -u -p -r --new-file linux/include/linux-w13/rtnetlink.h linux/include/linux/rtnetlink.h
+--- linux/include/linux-w13/rtnetlink.h Thu Jun 6 14:44:08 2002
++++ linux/include/linux/rtnetlink.h Thu Jun 6 15:47:44 2002
+@@ -440,12 +440,14 @@ enum
+ #define IFLA_COST IFLA_COST
+ IFLA_PRIORITY,
+ #define IFLA_PRIORITY IFLA_PRIORITY
+- IFLA_MASTER
++ IFLA_MASTER,
+ #define IFLA_MASTER IFLA_MASTER
++ IFLA_WIRELESS, /* Wireless Extension event - see wireless.h */
++#define IFLA_WIRELESS IFLA_WIRELESS
+ };
+
+
+-#define IFLA_MAX IFLA_MASTER
++#define IFLA_MAX IFLA_WIRELESS
+
+ #define IFLA_RTA(r) ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg))))
+ #define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
+diff -u -p -r --new-file linux/include/linux-w13/wireless.h linux/include/linux/wireless.h
+--- linux/include/linux-w13/wireless.h Thu Jun 6 15:00:28 2002
++++ linux/include/linux/wireless.h Thu Jun 6 15:47:44 2002
+@@ -1,10 +1,10 @@
+ /*
+ * This file define a set of standard wireless extensions
+ *
+- * Version : 13 6.12.01
++ * Version : 14 25.1.02
+ *
+ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+- * Copyright (c) 1997-2001 Jean Tourrilhes, All Rights Reserved.
++ * Copyright (c) 1997-2002 Jean Tourrilhes, All Rights Reserved.
+ */
+
+ #ifndef _LINUX_WIRELESS_H
+@@ -40,7 +40,7 @@
+ * # include/linux/netdevice.h (one place)
+ * # include/linux/proc_fs.h (one place)
+ *
+- * New driver API (2001 -> onward) :
++ * New driver API (2002 -> onward) :
+ * -------------------------------
+ * This file is only concerned with the user space API and common definitions.
+ * The new driver API is defined and documented in :
+@@ -49,6 +49,11 @@
+ * Note as well that /proc/net/wireless implementation has now moved in :
+ * # include/linux/wireless.c
+ *
++ * Wireless Events (2002 -> onward) :
++ * --------------------------------
++ * Events are defined at the end of this file, and implemented in :
++ * # include/linux/wireless.c
++ *
+ * Other comments :
+ * --------------
+ * Do not add here things that are redundant with other mechanisms
+@@ -75,7 +80,7 @@
+ * (there is some stuff that will be added in the future...)
+ * I just plan to increment with each new version.
+ */
+-#define WIRELESS_EXT 13
++#define WIRELESS_EXT 14
+
+ /*
+ * Changes :
+@@ -141,6 +146,13 @@
+ * - Document creation of new driver API.
+ * - Extract union iwreq_data from struct iwreq (for new driver API).
+ * - Rename SIOCSIWNAME as SIOCSIWCOMMIT
++ *
++ * V13 to V14
++ * ----------
++ * - Wireless Events support : define struct iw_event
++ * - Define additional specific event numbers
++ * - Add "addr" and "param" fields in union iwreq_data
++ * - AP scanning stuff (SIOCSIWSCAN and friends)
+ */
+
+ /**************************** CONSTANTS ****************************/
+@@ -175,6 +187,8 @@
+ #define SIOCSIWAP 0x8B14 /* set access point MAC addresses */
+ #define SIOCGIWAP 0x8B15 /* get access point MAC addresses */
+ #define SIOCGIWAPLIST 0x8B17 /* get list of access point in range */
++#define SIOCSIWSCAN 0x8B18 /* trigger scanning */
++#define SIOCGIWSCAN 0x8B19 /* get scanning results */
+
+ /* 802.11 specific support */
+ #define SIOCSIWESSID 0x8B1A /* set ESSID (network name) */
+@@ -238,6 +252,15 @@
+ #define IW_IS_SET(cmd) (!((cmd) & 0x1))
+ #define IW_IS_GET(cmd) ((cmd) & 0x1)
+
++/* ----------------------- WIRELESS EVENTS ----------------------- */
++/* Those are *NOT* ioctls, do not issue request on them !!! */
++/* Most events use the same identifier as ioctl requests */
++
++#define IWEVTXDROP 0x8C00 /* Packet dropped to excessive retry */
++#define IWEVQUAL 0x8C01 /* Quality part of statistics */
++
++#define IWEVFIRST 0x8C00
++
+ /* ------------------------- PRIVATE INFO ------------------------- */
+ /*
+ * The following is used with SIOCGIWPRIV. It allow a driver to define
+@@ -340,6 +363,19 @@
+ #define IW_RETRY_MAX 0x0002 /* Value is a maximum */
+ #define IW_RETRY_RELATIVE 0x0004 /* Value is not in seconds/ms/us */
+
++/* Scanning request flags */
++#define IW_SCAN_DEFAULT 0x0000 /* Default scan of the driver */
++#define IW_SCAN_ALL_ESSID 0x0001 /* Scan all ESSIDs */
++#define IW_SCAN_THIS_ESSID 0x0002 /* Scan only this ESSID */
++#define IW_SCAN_ALL_FREQ 0x0004 /* Scan all Frequencies */
++#define IW_SCAN_THIS_FREQ 0x0008 /* Scan only this Frequency */
++#define IW_SCAN_ALL_MODE 0x0010 /* Scan all Modes */
++#define IW_SCAN_THIS_MODE 0x0020 /* Scan only this Mode */
++#define IW_SCAN_ALL_RATE 0x0040 /* Scan all Bit-Rates */
++#define IW_SCAN_THIS_RATE 0x0080 /* Scan only this Bit-Rate */
++/* Maximum size of returned data */
++#define IW_SCAN_MAX_DATA 4096 /* In bytes */
++
+ /****************************** TYPES ******************************/
+
+ /* --------------------------- SUBTYPES --------------------------- */
+@@ -466,9 +502,12 @@ union iwreq_data
+
+ struct iw_point encoding; /* Encoding stuff : tokens */
+ struct iw_param power; /* PM duration/timeout */
++ struct iw_quality qual; /* Quality part of statistics */
+
+ struct sockaddr ap_addr; /* Access point address */
++ struct sockaddr addr; /* Destination address (hw) */
+
++ struct iw_param param; /* Other small parameters */
+ struct iw_point data; /* Other large parameters */
+ };
+
+@@ -595,5 +634,36 @@ struct iw_priv_args
+ __u16 get_args; /* Type and number of args */
+ char name[IFNAMSIZ]; /* Name of the extension */
+ };
++
++/* ----------------------- WIRELESS EVENTS ----------------------- */
++/*
++ * Wireless events are carried through the rtnetlink socket to user
++ * space. They are encapsulated in the IFLA_WIRELESS field of
++ * a RTM_NEWLINK message.
++ */
++
++/*
++ * A Wireless Event. Contains basically the same data as the ioctl...
++ */
++struct iw_event
++{
++ __u16 len; /* Real lenght of this stuff */
++ __u16 cmd; /* Wireless IOCTL */
++ union iwreq_data u; /* IOCTL fixed payload */
++};
++
++/* Size of the Event prefix (including padding and alignement junk) */
++#define IW_EV_LCP_LEN (sizeof(struct iw_event) - sizeof(union iwreq_data))
++/* Size of the various events */
++#define IW_EV_CHAR_LEN (IW_EV_LCP_LEN + IFNAMSIZ)
++#define IW_EV_UINT_LEN (IW_EV_LCP_LEN + sizeof(__u32))
++#define IW_EV_FREQ_LEN (IW_EV_LCP_LEN + sizeof(struct iw_freq))
++#define IW_EV_POINT_LEN (IW_EV_LCP_LEN + sizeof(struct iw_point))
++#define IW_EV_PARAM_LEN (IW_EV_LCP_LEN + sizeof(struct iw_param))
++#define IW_EV_ADDR_LEN (IW_EV_LCP_LEN + sizeof(struct sockaddr))
++#define IW_EV_QUAL_LEN (IW_EV_LCP_LEN + sizeof(struct iw_quality))
++
++/* Note : in the case of iw_point, the extra data will come at the
++ * end of the event */
+
+ #endif /* _LINUX_WIRELESS_H */
+diff -u -p -r --new-file linux/include/net-w13/iw_handler.h linux/include/net/iw_handler.h
+--- linux/include/net-w13/iw_handler.h Thu Jun 6 15:06:16 2002
++++ linux/include/net/iw_handler.h Thu Jun 6 15:48:06 2002
+@@ -1,10 +1,10 @@
+ /*
+ * This file define the new driver API for Wireless Extensions
+ *
+- * Version : 2 6.12.01
++ * Version : 3 17.1.02
+ *
+ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+- * Copyright (c) 2001 Jean Tourrilhes, All Rights Reserved.
++ * Copyright (c) 2001-2002 Jean Tourrilhes, All Rights Reserved.
+ */
+
+ #ifndef _IW_HANDLER_H
+@@ -33,7 +33,7 @@
+ * o The user space interface is tied to ioctl because of the use
+ * copy_to/from_user.
+ *
+- * New driver API (2001 -> onward) :
++ * New driver API (2002 -> onward) :
+ * -------------------------------
+ * The new driver API is just a bunch of standard functions (handlers),
+ * each handling a specific Wireless Extension. The driver just export
+@@ -206,7 +206,18 @@
+ * will be needed...
+ * I just plan to increment with each new version.
+ */
+-#define IW_HANDLER_VERSION 2
++#define IW_HANDLER_VERSION 3
++
++/*
++ * Changes :
++ *
++ * V2 to V3
++ * --------
++ * - Move event definition in <linux/wireless.h>
++ * - Add Wireless Event support :
++ * o wireless_send_event() prototype
++ * o iwe_stream_add_event/point() inline functions
++ */
+
+ /**************************** CONSTANTS ****************************/
+
+@@ -225,6 +236,7 @@
+ #define IW_HEADER_TYPE_POINT 6 /* struct iw_point */
+ #define IW_HEADER_TYPE_PARAM 7 /* struct iw_param */
+ #define IW_HEADER_TYPE_ADDR 8 /* struct sockaddr */
++#define IW_HEADER_TYPE_QUAL 9 /* struct iw_quality */
+
+ /* Handling flags */
+ /* Most are not implemented. I just use them as a reminder of some
+@@ -233,7 +245,8 @@
+ /* Wrapper level flags */
+ #define IW_DESCR_FLAG_DUMP 0x0001 /* Not part of the dump command */
+ #define IW_DESCR_FLAG_EVENT 0x0002 /* Generate an event on SET */
+-#define IW_DESCR_FLAG_RESTRICT 0x0004 /* GET request is ROOT only */
++#define IW_DESCR_FLAG_RESTRICT 0x0004 /* GET : request is ROOT only */
++ /* SET : Omit payload from generated iwevent */
+ /* Driver level flags */
+ #define IW_DESCR_FLAG_WAIT 0x0100 /* Wait for driver event */
+
+@@ -303,25 +316,6 @@ struct iw_handler_def
+ * 'struct net_device' to here, to minimise bloat. */
+ };
+
+-/* ----------------------- WIRELESS EVENTS ----------------------- */
+-/*
+- * Currently we don't support events, so let's just plan for the
+- * future...
+- */
+-
+-/*
+- * A Wireless Event.
+- */
+-// How do we define short header ? We don't want a flag on length.
+-// Probably a flag on event ? Highest bit to zero...
+-struct iw_event
+-{
+- __u16 length; /* Lenght of this stuff */
+- __u16 event; /* Wireless IOCTL */
+- union iwreq_data header; /* IOCTL fixed payload */
+- char extra[0]; /* Optional IOCTL data */
+-};
+-
+ /* ---------------------- IOCTL DESCRIPTION ---------------------- */
+ /*
+ * One of the main goal of the new interface is to deal entirely with
+@@ -369,6 +363,88 @@ extern int dev_get_wireless_info(char *
+ extern int wireless_process_ioctl(struct ifreq *ifr, unsigned int cmd);
+
+ /* Second : functions that may be called by driver modules */
+-/* None yet */
+
+-#endif /* _LINUX_WIRELESS_H */
++/* Send a single event to user space */
++extern void wireless_send_event(struct net_device * dev,
++ unsigned int cmd,
++ union iwreq_data * wrqu,
++ char * extra);
++
++/* We may need a function to send a stream of events to user space.
++ * More on that later... */
++
++/************************* INLINE FUNTIONS *************************/
++/*
++ * Function that are so simple that it's more efficient inlining them
++ */
++
++/*------------------------------------------------------------------*/
++/*
++ * Wrapper to add an Wireless Event to a stream of events.
++ */
++static inline char *
++iwe_stream_add_event(char * stream, /* Stream of events */
++ char * ends, /* End of stream */
++ struct iw_event *iwe, /* Payload */
++ int event_len) /* Real size of payload */
++{
++ /* Check if it's possible */
++ if((stream + event_len) < ends) {
++ iwe->len = event_len;
++ memcpy(stream, (char *) iwe, event_len);
++ stream += event_len;
++ }
++ return stream;
++}
++
++/*------------------------------------------------------------------*/
++/*
++ * Wrapper to add an short Wireless Event containing a pointer to a
++ * stream of events.
++ */
++static inline char *
++iwe_stream_add_point(char * stream, /* Stream of events */
++ char * ends, /* End of stream */
++ struct iw_event *iwe, /* Payload */
++ char * extra)
++{
++ int event_len = IW_EV_POINT_LEN + iwe->u.data.length;
++ /* Check if it's possible */
++ if((stream + event_len) < ends) {
++ iwe->len = event_len;
++ memcpy(stream, (char *) iwe, IW_EV_POINT_LEN);
++ memcpy(stream + IW_EV_POINT_LEN, extra, iwe->u.data.length);
++ stream += event_len;
++ }
++ return stream;
++}
++
++/*------------------------------------------------------------------*/
++/*
++ * Wrapper to add a value to a Wireless Event in a stream of events.
++ * Be careful, this one is tricky to use properly :
++ * At the first run, you need to have (value = event + IW_EV_LCP_LEN).
++ */
++static inline char *
++iwe_stream_add_value(char * event, /* Event in the stream */
++ char * value, /* Value in event */
++ char * ends, /* End of stream */
++ struct iw_event *iwe, /* Payload */
++ int event_len) /* Real size of payload */
++{
++ /* Don't duplicate LCP */
++ event_len -= IW_EV_LCP_LEN;
++
++ /* Check if it's possible */
++ if((value + event_len) < ends) {
++ /* Add new value */
++ memcpy(value, (char *) iwe + IW_EV_LCP_LEN, event_len);
++ value += event_len;
++ /* Patch LCP */
++ iwe->len = value - event;
++ memcpy(event, (char *) iwe, IW_EV_LCP_LEN);
++ }
++ return value;
++}
++
++#endif /* _IW_HANDLER_H */
+diff -u -p -r --new-file linux/net/netsyms-w13.c linux/net/netsyms.c
+--- linux/net/netsyms-w13.c Thu Jun 6 15:46:34 2002
++++ linux/net/netsyms.c Thu Jun 6 15:47:44 2002
+@@ -588,4 +588,10 @@ EXPORT_SYMBOL(register_gifconf);
+ EXPORT_SYMBOL(net_call_rx_atomic);
+ EXPORT_SYMBOL(softnet_data);
+
++#if defined(CONFIG_NET_RADIO) || defined(CONFIG_NET_PCMCIA_RADIO)
++/* Don't include the whole header mess for a single function */
++extern void wireless_send_event(struct net_device *dev, unsigned int cmd, union iwreq_data *wrqu, char *extra);
++EXPORT_SYMBOL(wireless_send_event);
++#endif /* CONFIG_NET_RADIO || CONFIG_NET_PCMCIA_RADIO */
++
+ #endif /* CONFIG_NET */
+diff -u -p -r --new-file linux/net/core/wireless-w13.c linux/net/core/wireless.c
+--- linux/net/core/wireless-w13.c Thu Jun 6 15:46:45 2002
++++ linux/net/core/wireless.c Thu Jun 6 15:48:06 2002
+@@ -2,7 +2,7 @@
+ * This file implement the Wireless Extensions APIs.
+ *
+ * Authors : Jean Tourrilhes - HPL - <jt@hpl.hp.com>
+- * Copyright (c) 1997-2001 Jean Tourrilhes, All Rights Reserved.
++ * Copyright (c) 1997-2002 Jean Tourrilhes, All Rights Reserved.
+ *
+ * (As all part of the Linux kernel, this file is GPL)
+ */
+@@ -25,6 +25,16 @@
+ * o Added iw_handler handling ;-)
+ * o Added standard ioctl description
+ * o Initial dumb commit strategy based on orinoco.c
++ *
++ * v3 - 19.12.01 - Jean II
++ * o Make sure we don't go out of standard_ioctl[] in ioctl_standard_call
++ * o Add event dispatcher function
++ * o Add event description
++ * o Propagate events as rtnetlink IFLA_WIRELESS option
++ * o Generate event on selected SET requests
++ *
++ * v4 - 18.04.01 - Jean II
++ * o Fix stupid off by one in iw_ioctl_description : IW_ESSID_MAX_SIZE + 1
+ */
+
+ /***************************** INCLUDES *****************************/
+@@ -33,6 +43,7 @@
+ #include <linux/config.h> /* Not needed ??? */
+ #include <linux/types.h> /* off_t */
+ #include <linux/netdevice.h> /* struct ifreq, dev_get_by_name() */
++#include <linux/rtnetlink.h> /* rtnetlink stuff */
+
+ #include <linux/wireless.h> /* Pretty obvious */
+ #include <net/iw_handler.h> /* New driver API */
+@@ -44,14 +55,23 @@
+
+ /* Debuging stuff */
+ #undef WE_IOCTL_DEBUG /* Debug IOCTL API */
++#undef WE_EVENT_DEBUG /* Debug Event dispatcher */
++
++/* Options */
++#define WE_EVENT_NETLINK /* Propagate events using rtnetlink */
++#define WE_SET_EVENT /* Generate an event on some set commands */
+
+ /************************* GLOBAL VARIABLES *************************/
+ /*
+ * You should not use global variables, because or re-entrancy.
+ * On our case, it's only const, so it's OK...
+ */
++/*
++ * Meta-data about all the standard Wireless Extension request we
++ * know about.
++ */
+ static const struct iw_ioctl_description standard_ioctl[] = {
+- /* SIOCSIWCOMMIT (internal) */
++ /* SIOCSIWCOMMIT */
+ { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
+ /* SIOCGIWNAME */
+ { IW_HEADER_TYPE_CHAR, 0, 0, 0, 0, IW_DESCR_FLAG_DUMP},
+@@ -99,18 +119,18 @@ static const struct iw_ioctl_description
+ { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
+ /* SIOCGIWAPLIST */
+ { IW_HEADER_TYPE_POINT, 0, (sizeof(struct sockaddr) + sizeof(struct iw_quality)), 0, IW_MAX_AP, 0},
+- /* -- hole -- */
+- { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
+- /* -- hole -- */
+- { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
++ /* SIOCSIWSCAN */
++ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, 0},
++ /* SIOCGIWSCAN */
++ { IW_HEADER_TYPE_POINT, 0, 1, 0, IW_SCAN_MAX_DATA, 0},
+ /* SIOCSIWESSID */
+- { IW_HEADER_TYPE_POINT, 0, 1, 0, IW_ESSID_MAX_SIZE, IW_DESCR_FLAG_EVENT},
++ { IW_HEADER_TYPE_POINT, 0, 1, 0, IW_ESSID_MAX_SIZE + 1, IW_DESCR_FLAG_EVENT},
+ /* SIOCGIWESSID */
+- { IW_HEADER_TYPE_POINT, 0, 1, 0, IW_ESSID_MAX_SIZE, IW_DESCR_FLAG_DUMP},
++ { IW_HEADER_TYPE_POINT, 0, 1, 0, IW_ESSID_MAX_SIZE + 1, IW_DESCR_FLAG_DUMP},
+ /* SIOCSIWNICKN */
+- { IW_HEADER_TYPE_POINT, 0, 1, 0, IW_ESSID_MAX_SIZE, 0},
++ { IW_HEADER_TYPE_POINT, 0, 1, 0, IW_ESSID_MAX_SIZE + 1, 0},
+ /* SIOCGIWNICKN */
+- { IW_HEADER_TYPE_POINT, 0, 1, 0, IW_ESSID_MAX_SIZE, 0},
++ { IW_HEADER_TYPE_POINT, 0, 1, 0, IW_ESSID_MAX_SIZE + 1, 0},
+ /* -- hole -- */
+ { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0},
+ /* -- hole -- */
+@@ -136,7 +156,7 @@ static const struct iw_ioctl_description
+ /* SIOCGIWRETRY */
+ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, 0},
+ /* SIOCSIWENCODE */
+- { IW_HEADER_TYPE_POINT, 4, 1, 0, IW_ENCODING_TOKEN_MAX, IW_DESCR_FLAG_EVENT | IW_DESCR_FLAG_RESTRICT},
++ { IW_HEADER_TYPE_POINT, 0, 1, 0, IW_ENCODING_TOKEN_MAX, IW_DESCR_FLAG_EVENT | IW_DESCR_FLAG_RESTRICT},
+ /* SIOCGIWENCODE */
+ { IW_HEADER_TYPE_POINT, 0, 1, 0, IW_ENCODING_TOKEN_MAX, IW_DESCR_FLAG_DUMP | IW_DESCR_FLAG_RESTRICT},
+ /* SIOCSIWPOWER */
+@@ -144,9 +164,38 @@ static const struct iw_ioctl_description
+ /* SIOCGIWPOWER */
+ { IW_HEADER_TYPE_PARAM, 0, 0, 0, 0, 0},
+ };
++static const int standard_ioctl_num = (sizeof(standard_ioctl) /
++ sizeof(struct iw_ioctl_description));
++
++/*
++ * Meta-data about all the additional standard Wireless Extension events
++ * we know about.
++ */
++static const struct iw_ioctl_description standard_event[] = {
++ /* IWEVTXDROP */
++ { IW_HEADER_TYPE_ADDR, 0, 0, 0, 0, 0},
++ /* IWEVQUAL */
++ { IW_HEADER_TYPE_QUAL, 0, 0, 0, 0, 0},
++};
++static const int standard_event_num = (sizeof(standard_event) /
++ sizeof(struct iw_ioctl_description));
+
+ /* Size (in bytes) of the various private data types */
+-char priv_type_size[] = { 0, 1, 1, 0, 4, 4, 0, 0 };
++static const char priv_type_size[] = { 0, 1, 1, 0, 4, 4, 0, 0 };
++
++/* Size (in bytes) of various events */
++static const int event_type_size[] = {
++ IW_EV_LCP_LEN,
++ 0,
++ IW_EV_CHAR_LEN,
++ 0,
++ IW_EV_UINT_LEN,
++ IW_EV_FREQ_LEN,
++ IW_EV_POINT_LEN, /* Without variable payload */
++ IW_EV_PARAM_LEN,
++ IW_EV_ADDR_LEN,
++ IW_EV_QUAL_LEN,
++};
+
+ /************************ COMMON SUBROUTINES ************************/
+ /*
+@@ -162,7 +211,8 @@ char priv_type_size[] = { 0, 1, 1, 0, 4,
+ static inline iw_handler get_handler(struct net_device *dev,
+ unsigned int cmd)
+ {
+- unsigned int index; /* MUST be unsigned */
++ /* Don't "optimise" the following variable, it will crash */
++ unsigned int index; /* *MUST* be unsigned */
+
+ /* Check if we have some wireless handlers defined */
+ if(dev->wireless_handlers == NULL)
+@@ -269,9 +319,9 @@ static inline int sprintf_wireless_stats
+ stats->status,
+ stats->qual.qual,
+ stats->qual.updated & 1 ? '.' : ' ',
+- stats->qual.level,
++ ((__u8) stats->qual.level),
+ stats->qual.updated & 2 ? '.' : ' ',
+- stats->qual.noise,
++ ((__u8) stats->qual.noise),
+ stats->qual.updated & 4 ? '.' : ' ',
+ stats->discard.nwid,
+ stats->discard.code,
+@@ -423,12 +473,14 @@ static inline int ioctl_standard_call(st
+ int ret = -EINVAL;
+
+ /* Get the description of the IOCTL */
++ if((cmd - SIOCIWFIRST) >= standard_ioctl_num)
++ return -EOPNOTSUPP;
+ descr = &(standard_ioctl[cmd - SIOCIWFIRST]);
+
+ #ifdef WE_IOCTL_DEBUG
+- printk(KERN_DEBUG "%s : Found standard handler for 0x%04X\n",
++ printk(KERN_DEBUG "%s (WE) : Found standard handler for 0x%04X\n",
+ ifr->ifr_name, cmd);
+- printk(KERN_DEBUG "Header type : %d, token type : %d, token_size : %d, max_token : %d\n", descr->header_type, descr->token_type, descr->token_size, descr->max_tokens);
++ printk(KERN_DEBUG "%s (WE) : Header type : %d, Token type : %d, size : %d, token : %d\n", dev->name, descr->header_type, descr->token_type, descr->token_size, descr->max_tokens);
+ #endif /* WE_IOCTL_DEBUG */
+
+ /* Prepare the call */
+@@ -437,8 +489,16 @@ static inline int ioctl_standard_call(st
+
+ /* Check if we have a pointer to user space data or not */
+ if(descr->header_type != IW_HEADER_TYPE_POINT) {
++
+ /* No extra arguments. Trivial to handle */
+ ret = handler(dev, &info, &(iwr->u), NULL);
++
++#ifdef WE_SET_EVENT
++ /* Generate an event to notify listeners of the change */
++ if((descr->flags & IW_DESCR_FLAG_EVENT) &&
++ ((ret == 0) || (ret == -EIWCOMMIT)))
++ wireless_send_event(dev, cmd, &(iwr->u), NULL);
++#endif /* WE_SET_EVENT */
+ } else {
+ char * extra;
+ int err;
+@@ -466,8 +526,8 @@ static inline int ioctl_standard_call(st
+ }
+
+ #ifdef WE_IOCTL_DEBUG
+- printk(KERN_DEBUG "Malloc %d bytes\n",
+- descr->max_tokens * descr->token_size);
++ printk(KERN_DEBUG "%s (WE) : Malloc %d bytes\n",
++ dev->name, descr->max_tokens * descr->token_size);
+ #endif /* WE_IOCTL_DEBUG */
+
+ /* Always allocate for max space. Easier, and won't last
+@@ -488,7 +548,8 @@ static inline int ioctl_standard_call(st
+ return -EFAULT;
+ }
+ #ifdef WE_IOCTL_DEBUG
+- printk(KERN_DEBUG "Got %d bytes\n",
++ printk(KERN_DEBUG "%s (WE) : Got %d bytes\n",
++ dev->name,
+ iwr->u.data.length * descr->token_size);
+ #endif /* WE_IOCTL_DEBUG */
+ }
+@@ -504,11 +565,26 @@ static inline int ioctl_standard_call(st
+ if (err)
+ ret = -EFAULT;
+ #ifdef WE_IOCTL_DEBUG
+- printk(KERN_DEBUG "Wrote %d bytes\n",
++ printk(KERN_DEBUG "%s (WE) : Wrote %d bytes\n",
++ dev->name,
+ iwr->u.data.length * descr->token_size);
+ #endif /* WE_IOCTL_DEBUG */
+ }
+
++#ifdef WE_SET_EVENT
++ /* Generate an event to notify listeners of the change */
++ if((descr->flags & IW_DESCR_FLAG_EVENT) &&
++ ((ret == 0) || (ret == -EIWCOMMIT))) {
++ if(descr->flags & IW_DESCR_FLAG_RESTRICT)
++ /* If the event is restricted, don't
++ * export the payload */
++ wireless_send_event(dev, cmd, &(iwr->u), NULL);
++ else
++ wireless_send_event(dev, cmd, &(iwr->u),
++ extra);
++ }
++#endif /* WE_SET_EVENT */
++
+ /* Cleanup - I told you it wasn't that long ;-) */
+ kfree(extra);
+ }
+@@ -558,11 +634,12 @@ static inline int ioctl_private_call(str
+ }
+
+ #ifdef WE_IOCTL_DEBUG
+- printk(KERN_DEBUG "%s : Found private handler for 0x%04X\n",
++ printk(KERN_DEBUG "%s (WE) : Found private handler for 0x%04X\n",
+ ifr->ifr_name, cmd);
+ if(descr) {
+- printk(KERN_DEBUG "Name %s, set %X, get %X\n",
+- descr->name, descr->set_args, descr->get_args);
++ printk(KERN_DEBUG "%s (WE) : Name %s, set %X, get %X\n",
++ dev->name, descr->name,
++ descr->set_args, descr->get_args);
+ }
+ #endif /* WE_IOCTL_DEBUG */
+
+@@ -617,7 +694,8 @@ static inline int ioctl_private_call(str
+ }
+
+ #ifdef WE_IOCTL_DEBUG
+- printk(KERN_DEBUG "Malloc %d bytes\n", extra_size);
++ printk(KERN_DEBUG "%s (WE) : Malloc %d bytes\n",
++ dev->name, extra_size);
+ #endif /* WE_IOCTL_DEBUG */
+
+ /* Always allocate for max space. Easier, and won't last
+@@ -636,7 +714,8 @@ static inline int ioctl_private_call(str
+ return -EFAULT;
+ }
+ #ifdef WE_IOCTL_DEBUG
+- printk(KERN_DEBUG "Got %d elem\n", iwr->u.data.length);
++ printk(KERN_DEBUG "%s (WE) : Got %d elem\n",
++ dev->name, iwr->u.data.length);
+ #endif /* WE_IOCTL_DEBUG */
+ }
+
+@@ -650,8 +729,8 @@ static inline int ioctl_private_call(str
+ if (err)
+ ret = -EFAULT;
+ #ifdef WE_IOCTL_DEBUG
+- printk(KERN_DEBUG "Wrote %d elem\n",
+- iwr->u.data.length);
++ printk(KERN_DEBUG "%s (WE) : Wrote %d elem\n",
++ dev->name, iwr->u.data.length);
+ #endif /* WE_IOCTL_DEBUG */
+ }
+
+@@ -730,4 +809,178 @@ int wireless_process_ioctl(struct ifreq
+ }
+ /* Not reached */
+ return -EINVAL;
++}
++
++/************************* EVENT PROCESSING *************************/
++/*
++ * Process events generated by the wireless layer or the driver.
++ * Most often, the event will be propagated through rtnetlink
++ */
++
++#ifdef WE_EVENT_NETLINK
++/* "rtnl" is defined in net/core/rtnetlink.c, but we need it here.
++ * It is declared in <linux/rtnetlink.h> */
++
++/* ---------------------------------------------------------------- */
++/*
++ * Fill a rtnetlink message with our event data.
++ * Note that we propage only the specified event and don't dump the
++ * current wireless config. Dumping the wireless config is far too
++ * expensive (for each parameter, the driver need to query the hardware).
++ */
++static inline int rtnetlink_fill_iwinfo(struct sk_buff * skb,
++ struct net_device * dev,
++ int type,
++ char * event,
++ int event_len)
++{
++ struct ifinfomsg *r;
++ struct nlmsghdr *nlh;
++ unsigned char *b = skb->tail;
++
++ nlh = NLMSG_PUT(skb, 0, 0, type, sizeof(*r));
++ r = NLMSG_DATA(nlh);
++ r->ifi_family = AF_UNSPEC;
++ r->ifi_type = dev->type;
++ r->ifi_index = dev->ifindex;
++ r->ifi_flags = dev->flags;
++ r->ifi_change = 0; /* Wireless changes don't affect those flags */
++
++ /* Add the wireless events in the netlink packet */
++ RTA_PUT(skb, IFLA_WIRELESS,
++ event_len, event);
++
++ nlh->nlmsg_len = skb->tail - b;
++ return skb->len;
++
++nlmsg_failure:
++rtattr_failure:
++ skb_trim(skb, b - skb->data);
++ return -1;
++}
++
++/* ---------------------------------------------------------------- */
++/*
++ * Create and broadcast and send it on the standard rtnetlink socket
++ * This is a pure clone rtmsg_ifinfo() in net/core/rtnetlink.c
++ * Andrzej Krzysztofowicz mandated that I used a IFLA_XXX field
++ * within a RTM_NEWLINK event.
++ */
++static inline void rtmsg_iwinfo(struct net_device * dev,
++ char * event,
++ int event_len)
++{
++ struct sk_buff *skb;
++ int size = NLMSG_GOODSIZE;
++
++ skb = alloc_skb(size, GFP_ATOMIC);
++ if (!skb)
++ return;
++
++ if (rtnetlink_fill_iwinfo(skb, dev, RTM_NEWLINK,
++ event, event_len) < 0) {
++ kfree_skb(skb);
++ return;
++ }
++ NETLINK_CB(skb).dst_groups = RTMGRP_LINK;
++ netlink_broadcast(rtnl, skb, 0, RTMGRP_LINK, GFP_ATOMIC);
++}
++#endif /* WE_EVENT_NETLINK */
++
++/* ---------------------------------------------------------------- */
++/*
++ * Main event dispatcher. Called from other parts and drivers.
++ * Send the event on the apropriate channels.
++ * May be called from interrupt context.
++ */
++void wireless_send_event(struct net_device * dev,
++ unsigned int cmd,
++ union iwreq_data * wrqu,
++ char * extra)
++{
++ const struct iw_ioctl_description * descr = NULL;
++ int extra_len = 0;
++ struct iw_event *event; /* Mallocated whole event */
++ int event_len; /* Its size */
++ int hdr_len; /* Size of the event header */
++ /* Don't "optimise" the following variable, it will crash */
++ unsigned cmd_index; /* *MUST* be unsigned */
++
++ /* Get the description of the IOCTL */
++ if(cmd <= SIOCIWLAST) {
++ cmd_index = cmd - SIOCIWFIRST;
++ if(cmd_index < standard_ioctl_num)
++ descr = &(standard_ioctl[cmd_index]);
++ } else {
++ cmd_index = cmd - IWEVFIRST;
++ if(cmd_index < standard_event_num)
++ descr = &(standard_event[cmd_index]);
++ }
++ /* Don't accept unknown events */
++ if(descr == NULL) {
++ /* Note : we don't return an error to the driver, because
++ * the driver would not know what to do about it. It can't
++ * return an error to the user, because the event is not
++ * initiated by a user request.
++ * The best the driver could do is to log an error message.
++ * We will do it ourselves instead...
++ */
++ printk(KERN_ERR "%s (WE) : Invalid Wireless Event (0x%04X)\n",
++ dev->name, cmd);
++ return;
++ }
++#ifdef WE_EVENT_DEBUG
++ printk(KERN_DEBUG "%s (WE) : Got event 0x%04X\n",
++ dev->name, cmd);
++ printk(KERN_DEBUG "%s (WE) : Header type : %d, Token type : %d, size : %d, token : %d\n", dev->name, descr->header_type, descr->token_type, descr->token_size, descr->max_tokens);
++#endif /* WE_EVENT_DEBUG */
++
++ /* Check extra parameters and set extra_len */
++ if(descr->header_type == IW_HEADER_TYPE_POINT) {
++ /* Check if number of token fits within bounds */
++ if(wrqu->data.length > descr->max_tokens) {
++ printk(KERN_ERR "%s (WE) : Wireless Event too big (%d)\n", dev->name, wrqu->data.length);
++ return;
++ }
++ if(wrqu->data.length < descr->min_tokens) {
++ printk(KERN_ERR "%s (WE) : Wireless Event too small (%d)\n", dev->name, wrqu->data.length);
++ return;
++ }
++ /* Calculate extra_len - extra is NULL for restricted events */
++ if(extra != NULL)
++ extra_len = wrqu->data.length * descr->token_size;
++#ifdef WE_EVENT_DEBUG
++ printk(KERN_DEBUG "%s (WE) : Event 0x%04X, tokens %d, extra_len %d\n", dev->name, cmd, wrqu->data.length, extra_len);
++#endif /* WE_EVENT_DEBUG */
++ }
++
++ /* Total length of the event */
++ hdr_len = event_type_size[descr->header_type];
++ event_len = hdr_len + extra_len;
++
++#ifdef WE_EVENT_DEBUG
++ printk(KERN_DEBUG "%s (WE) : Event 0x%04X, hdr_len %d, event_len %d\n", dev->name, cmd, hdr_len, event_len);
++#endif /* WE_EVENT_DEBUG */
++
++ /* Create temporary buffer to hold the event */
++ event = kmalloc(event_len, GFP_ATOMIC);
++ if(event == NULL)
++ return;
++
++ /* Fill event */
++ event->len = event_len;
++ event->cmd = cmd;
++ memcpy(&event->u, wrqu, hdr_len - IW_EV_LCP_LEN);
++ if(extra != NULL)
++ memcpy(((char *) event) + hdr_len, extra, extra_len);
++
++#ifdef WE_EVENT_NETLINK
++ /* rtnetlink event channel */
++ rtmsg_iwinfo(dev, (char *) event, event_len);
++#endif /* WE_EVENT_NETLINK */
++
++ /* Cleanup */
++ kfree(event);
++
++ return; /* Always success, I guess ;-) */
+ }
diff --git a/recipes/obsolete/linux/files/linux-2.4.18-list_move.patch b/recipes/obsolete/linux/files/linux-2.4.18-list_move.patch
new file mode 100644
index 0000000000..faec56330b
--- /dev/null
+++ b/recipes/obsolete/linux/files/linux-2.4.18-list_move.patch
@@ -0,0 +1,32 @@
+--- linux/include/linux/list.h~ 2001-12-21 17:42:03.000000000 +0000
++++ linux/include/linux/list.h 2004-06-14 23:41:33.000000000 +0100
+@@ -105,6 +105,29 @@
+ }
+
+ /**
++ * list_move - delete from one list and add as another's head
++ * @list: the entry to move
++ * @head: the head that will precede our entry
++ */
++static inline void list_move(struct list_head *list, struct list_head *head)
++{
++ __list_del(list->prev, list->next);
++ list_add(list, head);
++}
++
++/**
++ * list_move_tail - delete from one list and add as another's tail
++ * @list: the entry to move
++ * @head: the head that will follow our entry
++ */
++static inline void list_move_tail(struct list_head *list,
++ struct list_head *head)
++{
++ __list_del(list->prev, list->next);
++ list_add_tail(list, head);
++}
++
++/**
+ * list_empty - tests whether a list is empty
+ * @head: the list to test.
+ */
diff --git a/recipes/obsolete/linux/husky-kernel-2.4-embedix.bb b/recipes/obsolete/linux/husky-kernel-2.4-embedix.bb
new file mode 100644
index 0000000000..81f859594c
--- /dev/null
+++ b/recipes/obsolete/linux/husky-kernel-2.4-embedix.bb
@@ -0,0 +1,5 @@
+COMPATIBLE_HOST = "arm.*-linux"
+MACHINE = "husky"
+
+require openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc
+
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/1764-1.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/1764-1.patch
new file mode 100644
index 0000000000..0b660f3521
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/1764-1.patch
@@ -0,0 +1,16 @@
+__arch_strncpy_from_user needs to be exported if you build the framebuffer console driver as a module.
+
+Cheers,
+
+Ian.
+
+--- linux-2.6-bkpxa.orig/arch/arm/kernel/armksyms.c 2004-02-27 10:35:29.000000000 +0000
++++ linux-2.6-bkpxa/arch/arm/kernel/armksyms.c 2004-02-27 14:55:02.000000000 +0000
+@@ -187,6 +187,7 @@
+ EXPORT_SYMBOL(__arch_copy_to_user);
+ EXPORT_SYMBOL(__arch_clear_user);
+ EXPORT_SYMBOL(__arch_strnlen_user);
++EXPORT_SYMBOL(__arch_strncpy_from_user);
+
+ /* consistent area handling */
+ EXPORT_SYMBOL(consistent_alloc);
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/apm_arrowkey.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/apm_arrowkey.patch
new file mode 100644
index 0000000000..f45fb72de3
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/apm_arrowkey.patch
@@ -0,0 +1,32 @@
+--- linux/arch/arm/mach-pxa/sharpsl_apm.c-original 2005-09-07 02:38:21.000000000 -0600
++++ linux/arch/arm/mach-pxa/sharpsl_apm.c 2005-09-08 01:11:56.000000000 -0600
+@@ -89,6 +89,12 @@
+ #include <linux/ioctl.h>
+ #include <asm/sharp_apm.h>
+ #include <asm/sharp_char.h>
++#if defined(CONFIG_ARCH_PXA_POODLE)
++#include <asm-arm/arch-pxa/keyboard_poodle.h> /* blc */
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++#include <asm-arm/arch-pxa/keyboard_tosa.h>
++#define NR_KEYCODES (KEYCODE(KB_ROWS-1,KB_COLS-1)+1)
++#endif
+ #include <linux/delay.h>
+ #include <asm/arch/ads7846_ts.h>
+ #include <linux/apm_bios.h>
+@@ -155,6 +156,7 @@
+ /// ioctl
+ #if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ static u32 apm_event_mask = (APM_EVT_POWER_BUTTON);
++extern kbd_keyinfo sharppda_kbdstate[(NR_KEYCODES+1)];
+ #else
+ static u32 apm_event_mask = (APM_EVT_POWER_BUTTON | APM_EVT_BATTERY_STATUS);
+ #endif
+@@ -472,7 +474,7 @@
+ if (irq == IRQ_GPIO_ON_KEY) { /* suspend */
+
+ DPRINTK("irq=%d count=%d sharpsl_suspend_request%d\n",irq, count, sharpsl_suspend_request);
+- if ( GPLR(GPIO_ON_KEY) & GPIO_bit(GPIO_ON_KEY) ) {
++ if ( GPLR(GPIO_ON_KEY) & GPIO_bit(GPIO_ON_KEY) || (!sharppda_kbdstate[1].in) ) { /* second half, if something other than cancel is pushed blc */
+ /* release */
+ count = 0;
+ } else {
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/bluecard_cs.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/bluecard_cs.patch
new file mode 100644
index 0000000000..eacada33f5
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/bluecard_cs.patch
@@ -0,0 +1,11 @@
+--- linux-orig/drivers/bluetooth/bluecard_cs.c 2004-02-16 10:51:46.000000000 +0300
++++ linux/drivers/bluetooth/bluecard_cs.c 2004-02-17 03:45:31.000000000 +0300
+@@ -102,7 +102,7 @@
+
+
+ /* Default baud rate: 57600, 115200, 230400 or 460800 */
+-#define DEFAULT_BAUD_RATE 230400
++#define DEFAULT_BAUD_RATE 460800
+
+
+ /* Hardware states */
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/bluetooth-2.4.18-mh15.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/bluetooth-2.4.18-mh15.patch
new file mode 100644
index 0000000000..d6575dd604
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/bluetooth-2.4.18-mh15.patch
@@ -0,0 +1,32759 @@
+diff -urN linux-2.4.18/arch/alpha/config.in linux-2.4.18-mh15/arch/alpha/config.in
+--- linux-2.4.18/arch/alpha/config.in 2001-11-21 00:49:31.000000000 +0100
++++ linux-2.4.18-mh15/arch/alpha/config.in 2004-08-01 16:26:22.000000000 +0200
+@@ -371,9 +371,7 @@
+ source drivers/usb/Config.in
+ source drivers/input/Config.in
+
+-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+- source net/bluetooth/Config.in
+-fi
++source net/bluetooth/Config.in
+
+ mainmenu_option next_comment
+ comment 'Kernel hacking'
+diff -urN linux-2.4.18/arch/arm/config.in linux-2.4.18-mh15/arch/arm/config.in
+--- linux-2.4.18/arch/arm/config.in 2001-11-09 22:58:02.000000000 +0100
++++ linux-2.4.18-mh15/arch/arm/config.in 2004-08-01 16:26:22.000000000 +0200
+@@ -584,9 +584,7 @@
+
+ source drivers/usb/Config.in
+
+-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+- source net/bluetooth/Config.in
+-fi
++source net/bluetooth/Config.in
+
+ mainmenu_option next_comment
+ comment 'Kernel hacking'
+diff -urN linux-2.4.18/arch/i386/config.in linux-2.4.18-mh15/arch/i386/config.in
+--- linux-2.4.18/arch/i386/config.in 2002-02-25 20:37:52.000000000 +0100
++++ linux-2.4.18-mh15/arch/i386/config.in 2004-08-01 16:26:22.000000000 +0200
+@@ -407,9 +407,7 @@
+
+ source drivers/usb/Config.in
+
+-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+- source net/bluetooth/Config.in
+-fi
++source net/bluetooth/Config.in
+
+ mainmenu_option next_comment
+ comment 'Kernel hacking'
+diff -urN linux-2.4.18/arch/ppc/config.in linux-2.4.18-mh15/arch/ppc/config.in
+--- linux-2.4.18/arch/ppc/config.in 2002-02-25 20:37:55.000000000 +0100
++++ linux-2.4.18-mh15/arch/ppc/config.in 2004-08-01 16:26:22.000000000 +0200
+@@ -389,9 +389,7 @@
+
+ source drivers/usb/Config.in
+
+-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+- source net/bluetooth/Config.in
+-fi
++source net/bluetooth/Config.in
+
+ mainmenu_option next_comment
+ comment 'Kernel hacking'
+diff -urN linux-2.4.18/arch/sparc/config.in linux-2.4.18-mh15/arch/sparc/config.in
+--- linux-2.4.18/arch/sparc/config.in 2001-06-12 04:15:27.000000000 +0200
++++ linux-2.4.18-mh15/arch/sparc/config.in 2004-08-01 16:26:22.000000000 +0200
+@@ -251,9 +251,7 @@
+
+ source fs/Config.in
+
+-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+- source net/bluetooth/Config.in
+-fi
++source net/bluetooth/Config.in
+
+ mainmenu_option next_comment
+ comment 'Watchdog'
+diff -urN linux-2.4.18/arch/sparc64/config.in linux-2.4.18-mh15/arch/sparc64/config.in
+--- linux-2.4.18/arch/sparc64/config.in 2001-12-21 18:41:53.000000000 +0100
++++ linux-2.4.18-mh15/arch/sparc64/config.in 2004-08-01 16:26:22.000000000 +0200
+@@ -283,9 +283,7 @@
+
+ source drivers/usb/Config.in
+
+-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+- source net/bluetooth/Config.in
+-fi
++source net/bluetooth/Config.in
+
+ mainmenu_option next_comment
+ comment 'Watchdog'
+diff -urN linux-2.4.18/arch/sparc64/kernel/ioctl32.c linux-2.4.18-mh15/arch/sparc64/kernel/ioctl32.c
+--- linux-2.4.18/arch/sparc64/kernel/ioctl32.c 2002-02-25 20:37:56.000000000 +0100
++++ linux-2.4.18-mh15/arch/sparc64/kernel/ioctl32.c 2004-08-01 16:26:23.000000000 +0200
+@@ -92,6 +92,7 @@
+
+ #include <net/bluetooth/bluetooth.h>
+ #include <net/bluetooth/hci.h>
++#include <net/bluetooth/rfcomm.h>
+
+ #include <linux/usb.h>
+ #include <linux/usbdevice_fs.h>
+@@ -3822,6 +3823,15 @@
+ return err;
+ }
+
++/* Bluetooth ioctls */
++#define HCIUARTSETPROTO _IOW('U', 200, int)
++#define HCIUARTGETPROTO _IOR('U', 201, int)
++
++#define BNEPCONNADD _IOW('B', 200, int)
++#define BNEPCONNDEL _IOW('B', 201, int)
++#define BNEPGETCONNLIST _IOR('B', 210, int)
++#define BNEPGETCONNINFO _IOR('B', 211, int)
++
+ struct mtd_oob_buf32 {
+ u32 start;
+ u32 length;
+@@ -3878,6 +3888,16 @@
+ return ((0 == ret) ? 0 : -EFAULT);
+ }
+
++#define CMTPCONNADD _IOW('C', 200, int)
++#define CMTPCONNDEL _IOW('C', 201, int)
++#define CMTPGETCONNLIST _IOR('C', 210, int)
++#define CMTPGETCONNINFO _IOR('C', 211, int)
++
++#define HIDPCONNADD _IOW('H', 200, int)
++#define HIDPCONNDEL _IOW('H', 201, int)
++#define HIDPGETCONNLIST _IOR('H', 210, int)
++#define HIDPGETCONNINFO _IOR('H', 211, int)
++
+ struct ioctl_trans {
+ unsigned int cmd;
+ unsigned int handler;
+@@ -4540,6 +4560,25 @@
+ COMPATIBLE_IOCTL(HCISETSCAN)
+ COMPATIBLE_IOCTL(HCISETAUTH)
+ COMPATIBLE_IOCTL(HCIINQUIRY)
++COMPATIBLE_IOCTL(HCIUARTSETPROTO)
++COMPATIBLE_IOCTL(HCIUARTGETPROTO)
++COMPATIBLE_IOCTL(RFCOMMCREATEDEV)
++COMPATIBLE_IOCTL(RFCOMMRELEASEDEV)
++COMPATIBLE_IOCTL(RFCOMMGETDEVLIST)
++COMPATIBLE_IOCTL(RFCOMMGETDEVINFO)
++COMPATIBLE_IOCTL(RFCOMMSTEALDLC)
++COMPATIBLE_IOCTL(BNEPCONNADD)
++COMPATIBLE_IOCTL(BNEPCONNDEL)
++COMPATIBLE_IOCTL(BNEPGETCONNLIST)
++COMPATIBLE_IOCTL(BNEPGETCONNINFO)
++COMPATIBLE_IOCTL(CMTPCONNADD)
++COMPATIBLE_IOCTL(CMTPCONNDEL)
++COMPATIBLE_IOCTL(CMTPGETCONNLIST)
++COMPATIBLE_IOCTL(CMTPGETCONNINFO)
++COMPATIBLE_IOCTL(HIDPCONNADD)
++COMPATIBLE_IOCTL(HIDPCONNDEL)
++COMPATIBLE_IOCTL(HIDPGETCONNLIST)
++COMPATIBLE_IOCTL(HIDPGETCONNINFO)
+ /* Misc. */
+ COMPATIBLE_IOCTL(0x41545900) /* ATYIO_CLKR */
+ COMPATIBLE_IOCTL(0x41545901) /* ATYIO_CLKW */
+diff -urN linux-2.4.18/CREDITS linux-2.4.18-mh15/CREDITS
+--- linux-2.4.18/CREDITS 2002-02-25 20:37:50.000000000 +0100
++++ linux-2.4.18-mh15/CREDITS 2004-08-01 16:26:23.000000000 +0200
+@@ -1317,6 +1317,16 @@
+ S: Provo, Utah 84606-5607
+ S: USA
+
++N: Marcel Holtmann
++E: marcel@holtmann.org
++W: http://www.holtmann.org
++D: Maintainer of the Linux Bluetooth Subsystem
++D: Author and maintainer of the various Bluetooth HCI drivers
++D: Author and maintainer of the CAPI message transport protocol driver
++D: Author and maintainer of the Bluetooth HID protocol driver
++D: Various other Bluetooth related patches, cleanups and fixes
++S: Germany
++
+ N: Rob W. W. Hooft
+ E: hooft@EMBL-Heidelberg.DE
+ D: Shared libs for graphics-tools and for the f2c compiler
+@@ -2546,6 +2556,7 @@
+ N: Aristeu Sergio Rozanski Filho
+ E: aris@conectiva.com.br
+ D: Support for EtherExpress 10 ISA (i82595) in eepro driver
++D: User level driver support for input
+ S: Conectiva S.A.
+ S: R. Tocantins, 89 - Cristo Rei
+ S: 80050-430 - Curitiba - Paraná
+diff -urN linux-2.4.18/Documentation/Configure.help linux-2.4.18-mh15/Documentation/Configure.help
+--- linux-2.4.18/Documentation/Configure.help 2002-02-25 20:37:51.000000000 +0100
++++ linux-2.4.18-mh15/Documentation/Configure.help 2004-08-01 16:26:23.000000000 +0200
+@@ -2824,14 +2824,6 @@
+
+ If unsure, say N.
+
+-HCI EMU (virtual device) driver
+-CONFIG_BLUEZ_HCIEMU
+- Bluetooth Virtual HCI device driver.
+- This driver is required if you want to use HCI Emulation software.
+-
+- Say Y here to compile support for Virtual HCI devices into the
+- kernel or say M to compile it as module (hci_usb.o).
+-
+ # Choice: alphatype
+ Alpha system type
+ CONFIG_ALPHA_GENERIC
+@@ -11037,6 +11029,12 @@
+
+ If unsure, say N.
+
++Hotplug firmware loading support (EXPERIMENTAL)
++CONFIG_FW_LOADER
++ This option is provided for the case where no in-kernel-tree modules require
++ hotplug firmware loading support, but a module built outside the kernel tree
++ does.
++
+ Use PCI shared memory for NIC registers
+ CONFIG_TULIP_MMIO
+ Use PCI shared memory for the NIC registers, rather than going through
+@@ -12896,6 +12894,15 @@
+ accessible under char device 13:64+ - /dev/input/eventX in a generic
+ way. This is the future ...
+
++CONFIG_INPUT_UINPUT
++ Say Y here if you want to support user level drivers for input
++ subsystem accessible under char device 10:223 - /dev/input/uinput.
++
++ This driver is also available as a module ( = code which can be
++ inserted in and removed from the running kernel whenever you want).
++ The module will be called uinput.o. If you want to compile it as a
++ module, say M here and read <file:Documentation/modules.txt>.
++
+ USB Scanner support
+ CONFIG_USB_SCANNER
+ Say Y here if you want to connect a USB scanner to your computer's
+@@ -19870,19 +19877,22 @@
+ Bluetooth can be found at <http://www.bluetooth.com/>.
+
+ Linux Bluetooth subsystem consist of several layers:
+- HCI Core (device and connection manager, scheduler)
+- HCI Device drivers (interface to the hardware)
+- L2CAP Module (L2CAP protocol)
++ BlueZ Core (HCI device and connection manager, scheduler)
++ HCI Device drivers (Interface to the hardware)
++ SCO Module (SCO audio links)
++ L2CAP Module (Logical Link Control and Adaptation Protocol)
++ RFCOMM Module (RFCOMM Protocol)
++ BNEP Module (Bluetooth Network Encapsulation Protocol)
++ CMTP Module (CAPI Message Transport Protocol)
++ HIDP Module (Human Interface Device Protocol)
+
+- Say Y here to enable Linux Bluetooth support and to build HCI Core
+- layer.
++ Say Y here to compile Bluetooth support into the kernel or say M to
++ compile it as module (bluez.o).
+
+ To use Linux Bluetooth subsystem, you will need several user-space
+ utilities like hciconfig and hcid. These utilities and updates to
+ Bluetooth kernel modules are provided in the BlueZ package.
+- For more information, see <http://bluez.sourceforge.net/>.
+-
+- If you want to compile HCI Core as module (hci.o) say M here.
++ For more information, see <http://www.bluez.org/>.
+
+ L2CAP protocol support
+ CONFIG_BLUEZ_L2CAP
+@@ -19893,15 +19903,96 @@
+ Say Y here to compile L2CAP support into the kernel or say M to
+ compile it as module (l2cap.o).
+
++SCO links support
++CONFIG_BLUEZ_SCO
++ SCO link provides voice transport over Bluetooth. SCO support is
++ required for voice applications like Headset and Audio.
++
++ Say Y here to compile SCO support into the kernel or say M to
++ compile it as module (sco.o).
++
++RFCOMM protocol support
++CONFIG_BLUEZ_RFCOMM
++ RFCOMM provides connection oriented stream transport. RFCOMM
++ support is required for Dialup Networking, OBEX and other Bluetooth
++ applications.
++
++ Say Y here to compile RFCOMM support into the kernel or say M to
++ compile it as module (rfcomm.o).
++
++RFCOMM TTY emulation support
++CONFIG_BLUEZ_RFCOMM_TTY
++ This option enables TTY emulation support for RFCOMM channels.
++
++BNEP protocol support
++CONFIG_BLUEZ_BNEP
++ BNEP (Bluetooth Network Encapsulation Protocol) is Ethernet
++ emulation layer on top of Bluetooth. BNEP is required for
++ Bluetooth PAN (Personal Area Network).
++
++ Say Y here to compile BNEP support into the kernel or say M to
++ compile it as module (bnep.o).
++
++BNEP multicast filter support
++CONFIG_BLUEZ_BNEP_MC_FILTER
++ This option enables the multicast filter support for BNEP.
++
++BNEP protocol filter support
++CONFIG_BLUEZ_BNEP_PROTO_FILTER
++ This option enables the protocol filter support for BNEP.
++
++CMTP protocol support
++CONFIG_BLUEZ_CMTP
++ CMTP (CAPI Message Transport Protocol) is a transport layer
++ for CAPI messages. CMTP is required for the Bluetooth Common
++ ISDN Access Profile.
++
++ Say Y here to compile CMTP support into the kernel or say M to
++ compile it as module (cmtp.o).
++
++HIDP protocol support
++CONFIG_BLUEZ_HIDP
++ HIDP (Human Interface Device Protocol) is a transport layer
++ for HID reports. HIDP is required for the Bluetooth Human
++ Interface Device Profile.
++
++ Say Y here to compile HIDP support into the kernel or say M to
++ compile it as module (hidp.o).
++
+ HCI UART driver
+ CONFIG_BLUEZ_HCIUART
+ Bluetooth HCI UART driver.
+ This driver is required if you want to use Bluetooth devices with
+- serial port interface.
++ serial port interface. You will also need this driver if you have
++ UART based Bluetooth PCMCIA and CF devices like Xircom Credit Card
++ adapter and BrainBoxes Bluetooth PC Card.
+
+ Say Y here to compile support for Bluetooth UART devices into the
+ kernel or say M to compile it as module (hci_uart.o).
+
++HCI UART (H4) protocol support
++CONFIG_BLUEZ_HCIUART_H4
++ UART (H4) is serial protocol for communication between Bluetooth
++ device and host. This protocol is required for most Bluetooth devices
++ with UART interface, including PCMCIA and CF cards.
++
++ Say Y here to compile support for HCI UART (H4) protocol.
++
++HCI BCSP protocol support
++CONFIG_BLUEZ_HCIUART_BCSP
++ BCSP (BlueCore Serial Protocol) is serial protocol for communication
++ between Bluetooth device and host. This protocol is required for non
++ USB Bluetooth devices based on CSR BlueCore chip, including PCMCIA and
++ CF cards.
++
++ Say Y here to compile support for HCI BCSP protocol.
++
++HCI BCSP transmit CRC with every BCSP packet
++CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ If you say Y here, a 16-bit CRC checksum will be transmitted along with
++ every BCSP (BlueCore Serial Protocol) packet sent to the Bluetooth chip.
++ This increases reliability, but slightly reduces efficiency.
++
+ HCI USB driver
+ CONFIG_BLUEZ_HCIUSB
+ Bluetooth HCI USB driver.
+@@ -19911,7 +20002,16 @@
+ Say Y here to compile support for Bluetooth USB devices into the
+ kernel or say M to compile it as module (hci_usb.o).
+
+-HCI VHCI virtual HCI device driver
++HCI USB SCO (voice) support
++CONFIG_BLUEZ_HCIUSB_SCO
++ This option enables the SCO support in the HCI USB driver. You need this
++ to transmit voice data with your Bluetooth USB device. And your device
++ must also support sending SCO data over the HCI layer, because some of
++ them sends the SCO data to an internal PCM adapter.
++
++ Say Y here to compile support for HCI SCO data.
++
++HCI VHCI Virtual HCI device driver
+ CONFIG_BLUEZ_HCIVHCI
+ Bluetooth Virtual HCI device driver.
+ This driver is required if you want to use HCI Emulation software.
+@@ -19919,6 +20019,63 @@
+ Say Y here to compile support for virtual HCI devices into the
+ kernel or say M to compile it as module (hci_vhci.o).
+
++HCI BFUSB device driver
++CONFIG_BLUEZ_HCIBFUSB
++ Bluetooth HCI BlueFRITZ! USB driver.
++ This driver provides support for Bluetooth USB devices with AVM
++ interface:
++ AVM BlueFRITZ! USB
++
++ Say Y here to compile support for HCI BFUSB devices into the
++ kernel or say M to compile it as module (bfusb.o).
++
++HCI DTL1 (PC Card) device driver
++CONFIG_BLUEZ_HCIDTL1
++ Bluetooth HCI DTL1 (PC Card) driver.
++ This driver provides support for Bluetooth PCMCIA devices with
++ Nokia DTL1 interface:
++ Nokia Bluetooth Card
++ Socket Bluetooth CF Card
++
++ Say Y here to compile support for HCI DTL1 devices into the
++ kernel or say M to compile it as module (dtl1_cs.o).
++
++HCI BT3C (PC Card) device driver
++CONFIG_BLUEZ_HCIBT3C
++ Bluetooth HCI BT3C (PC Card) driver.
++ This driver provides support for Bluetooth PCMCIA devices with
++ 3Com BT3C interface:
++ 3Com Bluetooth Card (3CRWB6096)
++ HP Bluetooth Card
++
++ Say Y here to compile support for HCI BT3C devices into the
++ kernel or say M to compile it as module (bt3c_cs.o).
++
++HCI BlueCard (PC Card) device driver
++CONFIG_BLUEZ_HCIBLUECARD
++ Bluetooth HCI BlueCard (PC Card) driver.
++ This driver provides support for Bluetooth PCMCIA devices with
++ Anycom BlueCard interface:
++ Anycom Bluetooth PC Card
++ Anycom Bluetooth CF Card
++
++ Say Y here to compile support for HCI BlueCard devices into the
++ kernel or say M to compile it as module (bluecard_cs.o).
++
++HCI UART (PC Card) device driver
++CONFIG_BLUEZ_HCIBTUART
++ Bluetooth HCI UART (PC Card) driver.
++ This driver provides support for Bluetooth PCMCIA devices with
++ an UART interface:
++ Xircom CreditCard Bluetooth Adapter
++ Xircom RealPort2 Bluetooth Adapter
++ Sphinx PICO Card
++ H-Soft blue+Card
++ Cyber-blue Compact Flash Card
++
++ Say Y here to compile support for HCI UART devices into the
++ kernel or say M to compile it as module (btuart_cs.o).
++
+ # The following options are for Linux when running on the Hitachi
+ # SuperH family of RISC microprocessors.
+
+diff -urN linux-2.4.18/Documentation/devices.txt linux-2.4.18-mh15/Documentation/devices.txt
+--- linux-2.4.18/Documentation/devices.txt 2001-11-07 23:46:01.000000000 +0100
++++ linux-2.4.18-mh15/Documentation/devices.txt 2004-08-01 16:26:23.000000000 +0200
+@@ -419,6 +419,7 @@
+ 220 = /dev/mptctl Message passing technology (MPT) control
+ 221 = /dev/mvista/hssdsi Montavista PICMG hot swap system driver
+ 222 = /dev/mvista/hasi Montavista PICMG high availability
++ 223 = /dev/input/uinput User level driver support for input
+ 240-255 Reserved for local use
+
+ 11 char Raw keyboard device
+diff -urN linux-2.4.18/Documentation/firmware_class/firmware_sample_driver.c linux-2.4.18-mh15/Documentation/firmware_class/firmware_sample_driver.c
+--- linux-2.4.18/Documentation/firmware_class/firmware_sample_driver.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/Documentation/firmware_class/firmware_sample_driver.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,121 @@
++/*
++ * firmware_sample_driver.c -
++ *
++ * Copyright (c) 2003 Manuel Estrada Sainz <ranty@debian.org>
++ *
++ * Sample code on how to use request_firmware() from drivers.
++ *
++ * Note that register_firmware() is currently useless.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/string.h>
++
++#include "linux/firmware.h"
++
++#define WE_CAN_NEED_FIRMWARE_BEFORE_USERSPACE_IS_AVAILABLE
++#ifdef WE_CAN_NEED_FIRMWARE_BEFORE_USERSPACE_IS_AVAILABLE
++char __init inkernel_firmware[] = "let's say that this is firmware\n";
++#endif
++
++static char ghost_device[] = "ghost0";
++
++static void sample_firmware_load(char *firmware, int size)
++{
++ u8 buf[size+1];
++ memcpy(buf, firmware, size);
++ buf[size] = '\0';
++ printk("firmware_sample_driver: firmware: %s\n", buf);
++}
++
++static void sample_probe_default(void)
++{
++ /* uses the default method to get the firmware */
++ const struct firmware *fw_entry;
++ printk("firmware_sample_driver: a ghost device got inserted :)\n");
++
++ if(request_firmware(&fw_entry, "sample_driver_fw", ghost_device)!=0)
++ {
++ printk(KERN_ERR
++ "firmware_sample_driver: Firmware not available\n");
++ return;
++ }
++
++ sample_firmware_load(fw_entry->data, fw_entry->size);
++
++ release_firmware(fw_entry);
++
++ /* finish setting up the device */
++}
++static void sample_probe_specific(void)
++{
++ /* Uses some specific hotplug support to get the firmware from
++ * userspace directly into the hardware, or via some sysfs file */
++
++ /* NOTE: This currently doesn't work */
++
++ printk("firmware_sample_driver: a ghost device got inserted :)\n");
++
++ if(request_firmware(NULL, "sample_driver_fw", ghost_device)!=0)
++ {
++ printk(KERN_ERR
++ "firmware_sample_driver: Firmware load failed\n");
++ return;
++ }
++
++ /* request_firmware blocks until userspace finished, so at
++ * this point the firmware should be already in the device */
++
++ /* finish setting up the device */
++}
++static void sample_probe_async_cont(const struct firmware *fw, void *context)
++{
++ if(!fw){
++ printk(KERN_ERR
++ "firmware_sample_driver: firmware load failed\n");
++ return;
++ }
++
++ printk("firmware_sample_driver: device pointer \"%s\"\n",
++ (char *)context);
++ sample_firmware_load(fw->data, fw->size);
++}
++static void sample_probe_async(void)
++{
++ /* Let's say that I can't sleep */
++ int error;
++ error = request_firmware_nowait (THIS_MODULE,
++ "sample_driver_fw", ghost_device,
++ "my device pointer",
++ sample_probe_async_cont);
++ if(error){
++ printk(KERN_ERR
++ "firmware_sample_driver:"
++ " request_firmware_nowait failed\n");
++ }
++}
++
++static int sample_init(void)
++{
++#ifdef WE_CAN_NEED_FIRMWARE_BEFORE_USERSPACE_IS_AVAILABLE
++ register_firmware("sample_driver_fw", inkernel_firmware,
++ sizeof(inkernel_firmware));
++#endif
++ /* since there is no real hardware insertion I just call the
++ * sample probe functions here */
++ sample_probe_specific();
++ sample_probe_default();
++ sample_probe_async();
++ return 0;
++}
++static void __exit sample_exit(void)
++{
++}
++
++module_init (sample_init);
++module_exit (sample_exit);
++
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/Documentation/firmware_class/hotplug-script linux-2.4.18-mh15/Documentation/firmware_class/hotplug-script
+--- linux-2.4.18/Documentation/firmware_class/hotplug-script 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/Documentation/firmware_class/hotplug-script 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,16 @@
++#!/bin/sh
++
++# Simple hotplug script sample:
++#
++# Both $DEVPATH and $FIRMWARE are already provided in the environment.
++
++HOTPLUG_FW_DIR=/usr/lib/hotplug/firmware/
++
++echo 1 > /sysfs/$DEVPATH/loading
++cat $HOTPLUG_FW_DIR/$FIRMWARE > /sysfs/$DEVPATH/data
++echo 0 > /sysfs/$DEVPATH/loading
++
++# To cancel the load in case of error:
++#
++# echo -1 > /sysfs/$DEVPATH/loading
++#
+diff -urN linux-2.4.18/Documentation/firmware_class/README linux-2.4.18-mh15/Documentation/firmware_class/README
+--- linux-2.4.18/Documentation/firmware_class/README 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/Documentation/firmware_class/README 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,58 @@
++
++ request_firmware() hotplug interface:
++ ------------------------------------
++ Copyright (C) 2003 Manuel Estrada Sainz <ranty@debian.org>
++
++ Why:
++ ---
++
++ Today, the most extended way to use firmware in the Linux kernel is linking
++ it statically in a header file. Which has political and technical issues:
++
++ 1) Some firmware is not legal to redistribute.
++ 2) The firmware occupies memory permanently, even though it often is just
++ used once.
++ 3) Some people, like the Debian crowd, don't consider some firmware free
++ enough and remove entire drivers (e.g.: keyspan).
++
++ about in-kernel persistence:
++ ---------------------------
++ Under some circumstances, as explained below, it would be interesting to keep
++ firmware images in non-swappable kernel memory or even in the kernel image
++ (probably within initramfs).
++
++ Note that this functionality has not been implemented.
++
++ - Why OPTIONAL in-kernel persistence may be a good idea sometimes:
++
++ - If the device that needs the firmware is needed to access the
++ filesystem. When upon some error the device has to be reset and the
++ firmware reloaded, it won't be possible to get it from userspace.
++ e.g.:
++ - A diskless client with a network card that needs firmware.
++ - The filesystem is stored in a disk behind an scsi device
++ that needs firmware.
++ - Replacing buggy DSDT/SSDT ACPI tables on boot.
++ Note: this would require the persistent objects to be included
++ within the kernel image, probably within initramfs.
++
++ And the same device can be needed to access the filesystem or not depending
++ on the setup, so I think that the choice on what firmware to make
++ persistent should be left to userspace.
++
++ - Why register_firmware()+__init can be useful:
++ - For boot devices needing firmware.
++ - To make the transition easier:
++ The firmware can be declared __init and register_firmware()
++ called on module_init. Then the firmware is warranted to be
++ there even if "firmware hotplug userspace" is not there yet or
++ it doesn't yet provide the needed firmware.
++ Once the firmware is widely available in userspace, it can be
++ removed from the kernel. Or made optional (CONFIG_.*_FIRMWARE).
++
++ In either case, if firmware hotplug support is there, it can move the
++ firmware out of kernel memory into the real filesystem for later
++ usage.
++
++ Note: If persistence is implemented on top of initramfs,
++ register_firmware() may not be appropriate.
+diff -urN linux-2.4.18/drivers/bluetooth/bfusb.c linux-2.4.18-mh15/drivers/bluetooth/bfusb.c
+--- linux-2.4.18/drivers/bluetooth/bfusb.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/bfusb.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,782 @@
++/*
++ *
++ * AVM BlueFRITZ! USB driver
++ *
++ * Copyright (C) 2003 Marcel Holtmann <marcel@holtmann.org>
++ *
++ *
++ * 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/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/errno.h>
++#include <linux/skbuff.h>
++
++#include <linux/firmware.h>
++#include <linux/usb.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++#ifndef CONFIG_BLUEZ_HCIBFUSB_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define VERSION "1.1"
++
++static struct usb_device_id bfusb_table[] = {
++ /* AVM BlueFRITZ! USB */
++ { USB_DEVICE(0x057c, 0x2200) },
++
++ { } /* Terminating entry */
++};
++
++MODULE_DEVICE_TABLE(usb, bfusb_table);
++
++
++#define BFUSB_MAX_BLOCK_SIZE 256
++
++#define BFUSB_BLOCK_TIMEOUT (HZ * 3)
++
++#define BFUSB_TX_PROCESS 1
++#define BFUSB_TX_WAKEUP 2
++
++#define BFUSB_MAX_BULK_TX 1
++#define BFUSB_MAX_BULK_RX 1
++
++struct bfusb {
++ struct hci_dev hdev;
++
++ unsigned long state;
++
++ struct usb_device *udev;
++
++ unsigned int bulk_in_ep;
++ unsigned int bulk_out_ep;
++ unsigned int bulk_pkt_size;
++
++ rwlock_t lock;
++
++ struct sk_buff_head transmit_q;
++
++ struct sk_buff *reassembly;
++
++ atomic_t pending_tx;
++ struct sk_buff_head pending_q;
++ struct sk_buff_head completed_q;
++};
++
++struct bfusb_scb {
++ struct urb *urb;
++};
++
++static void bfusb_tx_complete(struct urb *urb);
++static void bfusb_rx_complete(struct urb *urb);
++
++static struct urb *bfusb_get_completed(struct bfusb *bfusb)
++{
++ struct sk_buff *skb;
++ struct urb *urb = NULL;
++
++ BT_DBG("bfusb %p", bfusb);
++
++ skb = skb_dequeue(&bfusb->completed_q);
++ if (skb) {
++ urb = ((struct bfusb_scb *) skb->cb)->urb;
++ kfree_skb(skb);
++ }
++
++ return urb;
++}
++
++static inline void bfusb_unlink_urbs(struct bfusb *bfusb)
++{
++ struct sk_buff *skb;
++ struct urb *urb;
++
++ BT_DBG("bfusb %p", bfusb);
++
++ while ((skb = skb_dequeue(&bfusb->pending_q))) {
++ urb = ((struct bfusb_scb *) skb->cb)->urb;
++ usb_unlink_urb(urb);
++ skb_queue_tail(&bfusb->completed_q, skb);
++ }
++
++ while ((urb = bfusb_get_completed(bfusb)))
++ usb_free_urb(urb);
++}
++
++
++static int bfusb_send_bulk(struct bfusb *bfusb, struct sk_buff *skb)
++{
++ struct bfusb_scb *scb = (void *) skb->cb;
++ struct urb *urb = bfusb_get_completed(bfusb);
++ int err, pipe;
++
++ BT_DBG("bfusb %p skb %p len %d", bfusb, skb, skb->len);
++
++ if (!urb && !(urb = usb_alloc_urb(0)))
++ return -ENOMEM;
++
++ pipe = usb_sndbulkpipe(bfusb->udev, bfusb->bulk_out_ep);
++
++ FILL_BULK_URB(urb, bfusb->udev, pipe, skb->data, skb->len,
++ bfusb_tx_complete, skb);
++
++ urb->transfer_flags = USB_QUEUE_BULK;
++
++ scb->urb = urb;
++
++ skb_queue_tail(&bfusb->pending_q, skb);
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s bulk tx submit failed urb %p err %d",
++ bfusb->hdev.name, urb, err);
++ skb_unlink(skb);
++ usb_free_urb(urb);
++ } else
++ atomic_inc(&bfusb->pending_tx);
++
++ return err;
++}
++
++static void bfusb_tx_wakeup(struct bfusb *bfusb)
++{
++ struct sk_buff *skb;
++
++ BT_DBG("bfusb %p", bfusb);
++
++ if (test_and_set_bit(BFUSB_TX_PROCESS, &bfusb->state)) {
++ set_bit(BFUSB_TX_WAKEUP, &bfusb->state);
++ return;
++ }
++
++ do {
++ clear_bit(BFUSB_TX_WAKEUP, &bfusb->state);
++
++ while ((atomic_read(&bfusb->pending_tx) < BFUSB_MAX_BULK_TX) &&
++ (skb = skb_dequeue(&bfusb->transmit_q))) {
++ if (bfusb_send_bulk(bfusb, skb) < 0) {
++ skb_queue_head(&bfusb->transmit_q, skb);
++ break;
++ }
++ }
++
++ } while (test_bit(BFUSB_TX_WAKEUP, &bfusb->state));
++
++ clear_bit(BFUSB_TX_PROCESS, &bfusb->state);
++}
++
++static void bfusb_tx_complete(struct urb *urb)
++{
++ struct sk_buff *skb = (struct sk_buff *) urb->context;
++ struct bfusb *bfusb = (struct bfusb *) skb->dev;
++
++ BT_DBG("bfusb %p urb %p skb %p len %d", bfusb, urb, skb, skb->len);
++
++ atomic_dec(&bfusb->pending_tx);
++
++ if (!test_bit(HCI_RUNNING, &bfusb->hdev.flags))
++ return;
++
++ if (!urb->status)
++ bfusb->hdev.stat.byte_tx += skb->len;
++ else
++ bfusb->hdev.stat.err_tx++;
++
++ read_lock(&bfusb->lock);
++
++ skb_unlink(skb);
++ skb_queue_tail(&bfusb->completed_q, skb);
++
++ bfusb_tx_wakeup(bfusb);
++
++ read_unlock(&bfusb->lock);
++}
++
++
++static int bfusb_rx_submit(struct bfusb *bfusb, struct urb *urb)
++{
++ struct bfusb_scb *scb;
++ struct sk_buff *skb;
++ int err, pipe, size = HCI_MAX_FRAME_SIZE + 32;
++
++ BT_DBG("bfusb %p urb %p", bfusb, urb);
++
++ if (!urb && !(urb = usb_alloc_urb(0)))
++ return -ENOMEM;
++
++ if (!(skb = bluez_skb_alloc(size, GFP_ATOMIC))) {
++ usb_free_urb(urb);
++ return -ENOMEM;
++ }
++
++ skb->dev = (void *) bfusb;
++
++ scb = (struct bfusb_scb *) skb->cb;
++ scb->urb = urb;
++
++ pipe = usb_rcvbulkpipe(bfusb->udev, bfusb->bulk_in_ep);
++
++ FILL_BULK_URB(urb, bfusb->udev, pipe, skb->data, size,
++ bfusb_rx_complete, skb);
++
++ urb->transfer_flags = USB_QUEUE_BULK;
++
++ skb_queue_tail(&bfusb->pending_q, skb);
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s bulk rx submit failed urb %p err %d",
++ bfusb->hdev.name, urb, err);
++ skb_unlink(skb);
++ kfree_skb(skb);
++ usb_free_urb(urb);
++ }
++
++ return err;
++}
++
++static inline int bfusb_recv_block(struct bfusb *bfusb, int hdr, unsigned char *data, int len)
++{
++ BT_DBG("bfusb %p hdr 0x%02x data %p len %d", bfusb, hdr, data, len);
++
++ if (hdr & 0x10) {
++ BT_ERR("%s error in block", bfusb->hdev.name);
++ if (bfusb->reassembly)
++ kfree_skb(bfusb->reassembly);
++ bfusb->reassembly = NULL;
++ return -EIO;
++ }
++
++ if (hdr & 0x04) {
++ struct sk_buff *skb;
++ unsigned char pkt_type;
++ int pkt_len = 0;
++
++ if (bfusb->reassembly) {
++ BT_ERR("%s unexpected start block", bfusb->hdev.name);
++ kfree_skb(bfusb->reassembly);
++ bfusb->reassembly = NULL;
++ }
++
++ if (len < 1) {
++ BT_ERR("%s no packet type found", bfusb->hdev.name);
++ return -EPROTO;
++ }
++
++ pkt_type = *data++; len--;
++
++ switch (pkt_type) {
++ case HCI_EVENT_PKT:
++ if (len >= HCI_EVENT_HDR_SIZE) {
++ hci_event_hdr *hdr = (hci_event_hdr *) data;
++ pkt_len = HCI_EVENT_HDR_SIZE + hdr->plen;
++ } else {
++ BT_ERR("%s event block is too short", bfusb->hdev.name);
++ return -EILSEQ;
++ }
++ break;
++
++ case HCI_ACLDATA_PKT:
++ if (len >= HCI_ACL_HDR_SIZE) {
++ hci_acl_hdr *hdr = (hci_acl_hdr *) data;
++ pkt_len = HCI_ACL_HDR_SIZE + __le16_to_cpu(hdr->dlen);
++ } else {
++ BT_ERR("%s data block is too short", bfusb->hdev.name);
++ return -EILSEQ;
++ }
++ break;
++
++ case HCI_SCODATA_PKT:
++ if (len >= HCI_SCO_HDR_SIZE) {
++ hci_sco_hdr *hdr = (hci_sco_hdr *) data;
++ pkt_len = HCI_SCO_HDR_SIZE + hdr->dlen;
++ } else {
++ BT_ERR("%s audio block is too short", bfusb->hdev.name);
++ return -EILSEQ;
++ }
++ break;
++ }
++
++ skb = bluez_skb_alloc(pkt_len, GFP_ATOMIC);
++ if (!skb) {
++ BT_ERR("%s no memory for the packet", bfusb->hdev.name);
++ return -ENOMEM;
++ }
++
++ skb->dev = (void *) &bfusb->hdev;
++ skb->pkt_type = pkt_type;
++
++ bfusb->reassembly = skb;
++ } else {
++ if (!bfusb->reassembly) {
++ BT_ERR("%s unexpected continuation block", bfusb->hdev.name);
++ return -EIO;
++ }
++ }
++
++ if (len > 0)
++ memcpy(skb_put(bfusb->reassembly, len), data, len);
++
++ if (hdr & 0x08) {
++ hci_recv_frame(bfusb->reassembly);
++ bfusb->reassembly = NULL;
++ }
++
++ return 0;
++}
++
++static void bfusb_rx_complete(struct urb *urb)
++{
++ struct sk_buff *skb = (struct sk_buff *) urb->context;
++ struct bfusb *bfusb = (struct bfusb *) skb->dev;
++ unsigned char *buf = urb->transfer_buffer;
++ int count = urb->actual_length;
++ int err, hdr, len;
++
++ BT_DBG("bfusb %p urb %p skb %p len %d", bfusb, urb, skb, skb->len);
++
++ read_lock(&bfusb->lock);
++
++ if (!test_bit(HCI_RUNNING, &bfusb->hdev.flags))
++ goto unlock;
++
++ if (urb->status || !count)
++ goto resubmit;
++
++ bfusb->hdev.stat.byte_rx += count;
++
++ skb_put(skb, count);
++
++ while (count) {
++ hdr = buf[0] | (buf[1] << 8);
++
++ if (hdr & 0x4000) {
++ len = 0;
++ count -= 2;
++ buf += 2;
++ } else {
++ len = (buf[2] == 0) ? 256 : buf[2];
++ count -= 3;
++ buf += 3;
++ }
++
++ if (count < len) {
++ BT_ERR("%s block extends over URB buffer ranges",
++ bfusb->hdev.name);
++ }
++
++ if ((hdr & 0xe1) == 0xc1)
++ bfusb_recv_block(bfusb, hdr, buf, len);
++
++ count -= len;
++ buf += len;
++ }
++
++ skb_unlink(skb);
++ kfree_skb(skb);
++
++ bfusb_rx_submit(bfusb, urb);
++
++ read_unlock(&bfusb->lock);
++
++ return;
++
++resubmit:
++ urb->dev = bfusb->udev;
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s bulk resubmit failed urb %p err %d",
++ bfusb->hdev.name, urb, err);
++ }
++
++unlock:
++ read_unlock(&bfusb->lock);
++}
++
++
++static int bfusb_open(struct hci_dev *hdev)
++{
++ struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
++ unsigned long flags;
++ int i, err;
++
++ BT_DBG("hdev %p bfusb %p", hdev, bfusb);
++
++ if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
++
++ MOD_INC_USE_COUNT;
++
++ write_lock_irqsave(&bfusb->lock, flags);
++
++ err = bfusb_rx_submit(bfusb, NULL);
++ if (!err) {
++ for (i = 1; i < BFUSB_MAX_BULK_RX; i++)
++ bfusb_rx_submit(bfusb, NULL);
++ } else {
++ clear_bit(HCI_RUNNING, &hdev->flags);
++ MOD_DEC_USE_COUNT;
++ }
++
++ write_unlock_irqrestore(&bfusb->lock, flags);
++
++ return err;
++}
++
++static int bfusb_flush(struct hci_dev *hdev)
++{
++ struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
++
++ BT_DBG("hdev %p bfusb %p", hdev, bfusb);
++
++ skb_queue_purge(&bfusb->transmit_q);
++
++ return 0;
++}
++
++static int bfusb_close(struct hci_dev *hdev)
++{
++ struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
++ unsigned long flags;
++
++ BT_DBG("hdev %p bfusb %p", hdev, bfusb);
++
++ if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
++
++ write_lock_irqsave(&bfusb->lock, flags);
++
++ bfusb_unlink_urbs(bfusb);
++ bfusb_flush(hdev);
++
++ write_unlock_irqrestore(&bfusb->lock, flags);
++
++ MOD_DEC_USE_COUNT;
++
++ return 0;
++}
++
++static int bfusb_send_frame(struct sk_buff *skb)
++{
++ struct hci_dev *hdev = (struct hci_dev *) skb->dev;
++ struct bfusb *bfusb;
++ struct sk_buff *nskb;
++ unsigned char buf[3];
++ int sent = 0, size, count;
++
++ BT_DBG("hdev %p skb %p type %d len %d", hdev, skb, skb->pkt_type, skb->len);
++
++ if (!hdev) {
++ BT_ERR("Frame for unknown HCI device (hdev=NULL)");
++ return -ENODEV;
++ }
++
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
++ return -EBUSY;
++
++ bfusb = (struct bfusb *) hdev->driver_data;
++
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++ };
++
++ /* Prepend skb with frame type */
++ memcpy(skb_push(skb, 1), &(skb->pkt_type), 1);
++
++ count = skb->len;
++
++ /* Max HCI frame size seems to be 1511 + 1 */
++ if (!(nskb = bluez_skb_alloc(count + 32, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for new packet");
++ return -ENOMEM;
++ }
++
++ nskb->dev = (void *) bfusb;
++
++ while (count) {
++ size = min_t(uint, count, BFUSB_MAX_BLOCK_SIZE);
++
++ buf[0] = 0xc1 | ((sent == 0) ? 0x04 : 0) | ((count == size) ? 0x08 : 0);
++ buf[1] = 0x00;
++ buf[2] = (size == BFUSB_MAX_BLOCK_SIZE) ? 0 : size;
++
++ memcpy(skb_put(nskb, 3), buf, 3);
++ memcpy(skb_put(nskb, size), skb->data + sent, size);
++
++ sent += size;
++ count -= size;
++ }
++
++ /* Don't send frame with multiple size of bulk max packet */
++ if ((nskb->len % bfusb->bulk_pkt_size) == 0) {
++ buf[0] = 0xdd;
++ buf[1] = 0x00;
++ memcpy(skb_put(nskb, 2), buf, 2);
++ }
++
++ read_lock(&bfusb->lock);
++
++ skb_queue_tail(&bfusb->transmit_q, nskb);
++ bfusb_tx_wakeup(bfusb);
++
++ read_unlock(&bfusb->lock);
++
++ kfree_skb(skb);
++
++ return 0;
++}
++
++static void bfusb_destruct(struct hci_dev *hdev)
++{
++ struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
++
++ BT_DBG("hdev %p bfusb %p", hdev, bfusb);
++
++ kfree(bfusb);
++}
++
++static int bfusb_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
++{
++ return -ENOIOCTLCMD;
++}
++
++
++static int bfusb_load_firmware(struct bfusb *bfusb, unsigned char *firmware, int count)
++{
++ unsigned char *buf;
++ int err, pipe, len, size, sent = 0;
++
++ BT_DBG("bfusb %p udev %p firmware %p count %d", bfusb, bfusb->udev, firmware, count);
++
++ BT_INFO("BlueFRITZ! USB loading firmware");
++
++ if (usb_set_configuration(bfusb->udev, 1) < 0) {
++ BT_ERR("Can't change to loading configuration");
++ return -EBUSY;
++ }
++
++ buf = kmalloc(BFUSB_MAX_BLOCK_SIZE + 3, GFP_ATOMIC);
++ if (!buf) {
++ BT_ERR("Can't allocate memory chunk for firmware");
++ return -ENOMEM;
++ }
++
++ pipe = usb_sndbulkpipe(bfusb->udev, bfusb->bulk_out_ep);
++
++ while (count) {
++ size = min_t(uint, count, BFUSB_MAX_BLOCK_SIZE + 3);
++
++ memcpy(buf, firmware + sent, size);
++
++ err = usb_bulk_msg(bfusb->udev, pipe, buf, size,
++ &len, BFUSB_BLOCK_TIMEOUT);
++
++ if (err || (len != size)) {
++ BT_ERR("Error in firmware loading");
++ goto error;
++ }
++
++ sent += size;
++ count -= size;
++ }
++
++ if ((err = usb_bulk_msg(bfusb->udev, pipe, NULL, 0,
++ &len, BFUSB_BLOCK_TIMEOUT)) < 0) {
++ BT_ERR("Error in null packet request");
++ goto error;
++ }
++
++ if ((err = usb_set_configuration(bfusb->udev, 2)) < 0) {
++ BT_ERR("Can't change to running configuration");
++ goto error;
++ }
++
++ BT_INFO("BlueFRITZ! USB device ready");
++
++ kfree(buf);
++ return 0;
++
++error:
++ kfree(buf);
++
++ pipe = usb_sndctrlpipe(bfusb->udev, 0);
++
++ usb_control_msg(bfusb->udev, pipe, USB_REQ_SET_CONFIGURATION,
++ 0, 0, 0, NULL, 0, BFUSB_BLOCK_TIMEOUT);
++
++ return err;
++}
++
++static void *bfusb_probe(struct usb_device *udev, unsigned int ifnum, const struct usb_device_id *id)
++{
++ const struct firmware *firmware;
++ char device[16];
++ struct usb_interface *iface;
++ struct usb_interface_descriptor *iface_desc;
++ struct usb_endpoint_descriptor *bulk_out_ep;
++ struct usb_endpoint_descriptor *bulk_in_ep;
++ struct hci_dev *hdev;
++ struct bfusb *bfusb;
++
++ BT_DBG("udev %p ifnum %d id %p", udev, ifnum, id);
++
++ /* Check number of endpoints */
++ iface = &udev->actconfig->interface[0];
++ iface_desc = &iface->altsetting[0];
++
++ if (iface_desc->bNumEndpoints < 2)
++ return NULL;
++
++ bulk_out_ep = &iface_desc->endpoint[0];
++ bulk_in_ep = &iface_desc->endpoint[1];
++
++ if (!bulk_out_ep || !bulk_in_ep) {
++ BT_ERR("Bulk endpoints not found");
++ goto done;
++ }
++
++ /* Initialize control structure and load firmware */
++ if (!(bfusb = kmalloc(sizeof(struct bfusb), GFP_KERNEL))) {
++ BT_ERR("Can't allocate memory for control structure");
++ goto done;
++ }
++
++ memset(bfusb, 0, sizeof(struct bfusb));
++
++ bfusb->udev = udev;
++ bfusb->bulk_in_ep = bulk_in_ep->bEndpointAddress;
++ bfusb->bulk_out_ep = bulk_out_ep->bEndpointAddress;
++ bfusb->bulk_pkt_size = bulk_out_ep->wMaxPacketSize;
++
++ bfusb->lock = RW_LOCK_UNLOCKED;
++
++ bfusb->reassembly = NULL;
++
++ skb_queue_head_init(&bfusb->transmit_q);
++ skb_queue_head_init(&bfusb->pending_q);
++ skb_queue_head_init(&bfusb->completed_q);
++
++ snprintf(device, sizeof(device), "bfusb%3.3d%3.3d", udev->bus->busnum, udev->devnum);
++
++ if (request_firmware(&firmware, "bfubase.frm", device) < 0) {
++ BT_ERR("Firmware request failed");
++ goto error;
++ }
++
++ if (bfusb_load_firmware(bfusb, firmware->data, firmware->size) < 0) {
++ BT_ERR("Firmware loading failed");
++ goto release;
++ }
++
++ release_firmware(firmware);
++
++ /* Initialize and register HCI device */
++ hdev = &bfusb->hdev;
++
++ hdev->type = HCI_USB;
++ hdev->driver_data = bfusb;
++
++ hdev->open = bfusb_open;
++ hdev->close = bfusb_close;
++ hdev->flush = bfusb_flush;
++ hdev->send = bfusb_send_frame;
++ hdev->destruct = bfusb_destruct;
++ hdev->ioctl = bfusb_ioctl;
++
++ if (hci_register_dev(hdev) < 0) {
++ BT_ERR("Can't register HCI device");
++ goto error;
++ }
++
++ return bfusb;
++
++release:
++ release_firmware(firmware);
++
++error:
++ kfree(bfusb);
++
++done:
++ return NULL;
++}
++
++static void bfusb_disconnect(struct usb_device *udev, void *ptr)
++{
++ struct bfusb *bfusb = (struct bfusb *) ptr;
++ struct hci_dev *hdev = &bfusb->hdev;
++
++ BT_DBG("udev %p ptr %p", udev, ptr);
++
++ if (!hdev)
++ return;
++
++ bfusb_close(hdev);
++
++ if (hci_unregister_dev(hdev) < 0)
++ BT_ERR("Can't unregister HCI device %s", hdev->name);
++}
++
++static struct usb_driver bfusb_driver = {
++ name: "bfusb",
++ probe: bfusb_probe,
++ disconnect: bfusb_disconnect,
++ id_table: bfusb_table,
++};
++
++static int __init bfusb_init(void)
++{
++ int err;
++
++ BT_INFO("BlueFRITZ! USB driver ver %s", VERSION);
++ BT_INFO("Copyright (C) 2003 Marcel Holtmann <marcel@holtmann.org>");
++
++ if ((err = usb_register(&bfusb_driver)) < 0)
++ BT_ERR("Failed to register BlueFRITZ! USB driver");
++
++ return err;
++}
++
++static void __exit bfusb_cleanup(void)
++{
++ usb_deregister(&bfusb_driver);
++}
++
++module_init(bfusb_init);
++module_exit(bfusb_cleanup);
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueFRITZ! USB driver ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/drivers/bluetooth/bluecard_cs.c linux-2.4.18-mh15/drivers/bluetooth/bluecard_cs.c
+--- linux-2.4.18/drivers/bluetooth/bluecard_cs.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/bluecard_cs.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,1116 @@
++/*
++ *
++ * Bluetooth driver for the Anycom BlueCard (LSE039/LSE041)
++ *
++ * Copyright (C) 2001-2002 Marcel Holtmann <marcel@holtmann.org>
++ *
++ *
++ * 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;
++ *
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ *
++ * The initial developer of the original code is David A. Hinds
++ * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
++ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/timer.h>
++#include <linux/errno.h>
++#include <linux/ptrace.h>
++#include <linux/ioport.h>
++#include <linux/spinlock.h>
++#include <linux/skbuff.h>
++#include <asm/io.h>
++
++#include <pcmcia/version.h>
++#include <pcmcia/cs_types.h>
++#include <pcmcia/cs.h>
++#include <pcmcia/cistpl.h>
++#include <pcmcia/ciscode.h>
++#include <pcmcia/ds.h>
++#include <pcmcia/cisreg.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++
++
++/* ======================== Module parameters ======================== */
++
++
++/* Bit map of interrupts to choose from */
++static u_int irq_mask = 0x86bc;
++static int irq_list[4] = { -1 };
++
++MODULE_PARM(irq_mask, "i");
++MODULE_PARM(irq_list, "1-4i");
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueZ driver for the Anycom BlueCard (LSE039/LSE041)");
++MODULE_LICENSE("GPL");
++
++
++
++/* ======================== Local structures ======================== */
++
++
++typedef struct bluecard_info_t {
++ dev_link_t link;
++ dev_node_t node;
++
++ struct hci_dev hdev;
++
++ spinlock_t lock; /* For serializing operations */
++ struct timer_list timer; /* For LED control */
++
++ struct sk_buff_head txq;
++ unsigned long tx_state;
++
++ unsigned long rx_state;
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++
++ unsigned char ctrl_reg;
++ unsigned long hw_state; /* Status of the hardware and LED control */
++} bluecard_info_t;
++
++
++void bluecard_config(dev_link_t *link);
++void bluecard_release(u_long arg);
++int bluecard_event(event_t event, int priority, event_callback_args_t *args);
++
++static dev_info_t dev_info = "bluecard_cs";
++
++dev_link_t *bluecard_attach(void);
++void bluecard_detach(dev_link_t *);
++
++static dev_link_t *dev_list = NULL;
++
++
++/* Default baud rate: 57600, 115200, 230400 or 460800 */
++#define DEFAULT_BAUD_RATE 230400
++
++
++/* Hardware states */
++#define CARD_READY 1
++#define CARD_HAS_PCCARD_ID 4
++#define CARD_HAS_POWER_LED 5
++#define CARD_HAS_ACTIVITY_LED 6
++
++/* Transmit states */
++#define XMIT_SENDING 1
++#define XMIT_WAKEUP 2
++#define XMIT_BUFFER_NUMBER 5 /* unset = buffer one, set = buffer two */
++#define XMIT_BUF_ONE_READY 6
++#define XMIT_BUF_TWO_READY 7
++#define XMIT_SENDING_READY 8
++
++/* Receiver states */
++#define RECV_WAIT_PACKET_TYPE 0
++#define RECV_WAIT_EVENT_HEADER 1
++#define RECV_WAIT_ACL_HEADER 2
++#define RECV_WAIT_SCO_HEADER 3
++#define RECV_WAIT_DATA 4
++
++/* Special packet types */
++#define PKT_BAUD_RATE_57600 0x80
++#define PKT_BAUD_RATE_115200 0x81
++#define PKT_BAUD_RATE_230400 0x82
++#define PKT_BAUD_RATE_460800 0x83
++
++
++/* These are the register offsets */
++#define REG_COMMAND 0x20
++#define REG_INTERRUPT 0x21
++#define REG_CONTROL 0x22
++#define REG_RX_CONTROL 0x24
++#define REG_CARD_RESET 0x30
++#define REG_LED_CTRL 0x30
++
++/* REG_COMMAND */
++#define REG_COMMAND_TX_BUF_ONE 0x01
++#define REG_COMMAND_TX_BUF_TWO 0x02
++#define REG_COMMAND_RX_BUF_ONE 0x04
++#define REG_COMMAND_RX_BUF_TWO 0x08
++#define REG_COMMAND_RX_WIN_ONE 0x00
++#define REG_COMMAND_RX_WIN_TWO 0x10
++
++/* REG_CONTROL */
++#define REG_CONTROL_BAUD_RATE_57600 0x00
++#define REG_CONTROL_BAUD_RATE_115200 0x01
++#define REG_CONTROL_BAUD_RATE_230400 0x02
++#define REG_CONTROL_BAUD_RATE_460800 0x03
++#define REG_CONTROL_RTS 0x04
++#define REG_CONTROL_BT_ON 0x08
++#define REG_CONTROL_BT_RESET 0x10
++#define REG_CONTROL_BT_RES_PU 0x20
++#define REG_CONTROL_INTERRUPT 0x40
++#define REG_CONTROL_CARD_RESET 0x80
++
++/* REG_RX_CONTROL */
++#define RTS_LEVEL_SHIFT_BITS 0x02
++
++
++
++/* ======================== LED handling routines ======================== */
++
++
++void bluecard_activity_led_timeout(u_long arg)
++{
++ bluecard_info_t *info = (bluecard_info_t *)arg;
++ unsigned int iobase = info->link.io.BasePort1;
++
++ if (test_bit(CARD_HAS_ACTIVITY_LED, &(info->hw_state))) {
++ /* Disable activity LED */
++ outb(0x08 | 0x20, iobase + 0x30);
++ } else {
++ /* Disable power LED */
++ outb(0x00, iobase + 0x30);
++ }
++}
++
++
++static void bluecard_enable_activity_led(bluecard_info_t *info)
++{
++ unsigned int iobase = info->link.io.BasePort1;
++
++ if (test_bit(CARD_HAS_ACTIVITY_LED, &(info->hw_state))) {
++ /* Enable activity LED */
++ outb(0x10 | 0x40, iobase + 0x30);
++
++ /* Stop the LED after HZ/4 */
++ mod_timer(&(info->timer), jiffies + HZ / 4);
++ } else {
++ /* Enable power LED */
++ outb(0x08 | 0x20, iobase + 0x30);
++
++ /* Stop the LED after HZ/2 */
++ mod_timer(&(info->timer), jiffies + HZ / 2);
++ }
++}
++
++
++
++/* ======================== Interrupt handling ======================== */
++
++
++static int bluecard_write(unsigned int iobase, unsigned int offset, __u8 *buf, int len)
++{
++ int i, actual;
++
++ actual = (len > 15) ? 15 : len;
++
++ outb_p(actual, iobase + offset);
++
++ for (i = 0; i < actual; i++)
++ outb_p(buf[i], iobase + offset + i + 1);
++
++ return actual;
++}
++
++
++static void bluecard_write_wakeup(bluecard_info_t *info)
++{
++ if (!info) {
++ printk(KERN_WARNING "bluecard_cs: Call of write_wakeup for unknown device.\n");
++ return;
++ }
++
++ if (!test_bit(XMIT_SENDING_READY, &(info->tx_state)))
++ return;
++
++ if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) {
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++ return;
++ }
++
++ do {
++ register unsigned int iobase = info->link.io.BasePort1;
++ register unsigned int offset;
++ register unsigned char command;
++ register unsigned long ready_bit;
++ register struct sk_buff *skb;
++ register int len;
++
++ clear_bit(XMIT_WAKEUP, &(info->tx_state));
++
++ if (!(info->link.state & DEV_PRESENT))
++ return;
++
++ if (test_bit(XMIT_BUFFER_NUMBER, &(info->tx_state))) {
++ if (!test_bit(XMIT_BUF_TWO_READY, &(info->tx_state)))
++ break;
++ offset = 0x10;
++ command = REG_COMMAND_TX_BUF_TWO;
++ ready_bit = XMIT_BUF_TWO_READY;
++ } else {
++ if (!test_bit(XMIT_BUF_ONE_READY, &(info->tx_state)))
++ break;
++ offset = 0x00;
++ command = REG_COMMAND_TX_BUF_ONE;
++ ready_bit = XMIT_BUF_ONE_READY;
++ }
++
++ if (!(skb = skb_dequeue(&(info->txq))))
++ break;
++
++ if (skb->pkt_type & 0x80) {
++ /* Disable RTS */
++ info->ctrl_reg |= REG_CONTROL_RTS;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++ }
++
++ /* Activate LED */
++ bluecard_enable_activity_led(info);
++
++ /* Send frame */
++ len = bluecard_write(iobase, offset, skb->data, skb->len);
++
++ /* Tell the FPGA to send the data */
++ outb_p(command, iobase + REG_COMMAND);
++
++ /* Mark the buffer as dirty */
++ clear_bit(ready_bit, &(info->tx_state));
++
++ if (skb->pkt_type & 0x80) {
++
++ wait_queue_head_t wait;
++ unsigned char baud_reg;
++
++ switch (skb->pkt_type) {
++ case PKT_BAUD_RATE_460800:
++ baud_reg = REG_CONTROL_BAUD_RATE_460800;
++ break;
++ case PKT_BAUD_RATE_230400:
++ baud_reg = REG_CONTROL_BAUD_RATE_230400;
++ break;
++ case PKT_BAUD_RATE_115200:
++ baud_reg = REG_CONTROL_BAUD_RATE_115200;
++ break;
++ case PKT_BAUD_RATE_57600:
++ /* Fall through... */
++ default:
++ baud_reg = REG_CONTROL_BAUD_RATE_57600;
++ break;
++ }
++
++ /* Wait until the command reaches the baseband */
++ init_waitqueue_head(&wait);
++ interruptible_sleep_on_timeout(&wait, HZ / 10);
++
++ /* Set baud on baseband */
++ info->ctrl_reg &= ~0x03;
++ info->ctrl_reg |= baud_reg;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ /* Enable RTS */
++ info->ctrl_reg &= ~REG_CONTROL_RTS;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ /* Wait before the next HCI packet can be send */
++ interruptible_sleep_on_timeout(&wait, HZ);
++
++ }
++
++ if (len == skb->len) {
++ kfree_skb(skb);
++ } else {
++ skb_pull(skb, len);
++ skb_queue_head(&(info->txq), skb);
++ }
++
++ info->hdev.stat.byte_tx += len;
++
++ /* Change buffer */
++ change_bit(XMIT_BUFFER_NUMBER, &(info->tx_state));
++
++ } while (test_bit(XMIT_WAKEUP, &(info->tx_state)));
++
++ clear_bit(XMIT_SENDING, &(info->tx_state));
++}
++
++
++static int bluecard_read(unsigned int iobase, unsigned int offset, __u8 *buf, int size)
++{
++ int i, n, len;
++
++ outb(REG_COMMAND_RX_WIN_ONE, iobase + REG_COMMAND);
++
++ len = inb(iobase + offset);
++ n = 0;
++ i = 1;
++
++ while (n < len) {
++
++ if (i == 16) {
++ outb(REG_COMMAND_RX_WIN_TWO, iobase + REG_COMMAND);
++ i = 0;
++ }
++
++ buf[n] = inb(iobase + offset + i);
++
++ n++;
++ i++;
++
++ }
++
++ return len;
++}
++
++
++static void bluecard_receive(bluecard_info_t *info, unsigned int offset)
++{
++ unsigned int iobase;
++ unsigned char buf[31];
++ int i, len;
++
++ if (!info) {
++ printk(KERN_WARNING "bluecard_cs: Call of receive for unknown device.\n");
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ if (test_bit(XMIT_SENDING_READY, &(info->tx_state)))
++ bluecard_enable_activity_led(info);
++
++ len = bluecard_read(iobase, offset, buf, sizeof(buf));
++
++ for (i = 0; i < len; i++) {
++
++ /* Allocate packet */
++ if (info->rx_skb == NULL) {
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ if (!(info->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
++ printk(KERN_WARNING "bluecard_cs: Can't allocate mem for new packet.\n");
++ return;
++ }
++ }
++
++ if (info->rx_state == RECV_WAIT_PACKET_TYPE) {
++
++ info->rx_skb->dev = (void *)&(info->hdev);
++ info->rx_skb->pkt_type = buf[i];
++
++ switch (info->rx_skb->pkt_type) {
++
++ case 0x00:
++ /* init packet */
++ if (offset != 0x00) {
++ set_bit(XMIT_BUF_ONE_READY, &(info->tx_state));
++ set_bit(XMIT_BUF_TWO_READY, &(info->tx_state));
++ set_bit(XMIT_SENDING_READY, &(info->tx_state));
++ bluecard_write_wakeup(info);
++ }
++
++ kfree_skb(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ case HCI_EVENT_PKT:
++ info->rx_state = RECV_WAIT_EVENT_HEADER;
++ info->rx_count = HCI_EVENT_HDR_SIZE;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ info->rx_state = RECV_WAIT_ACL_HEADER;
++ info->rx_count = HCI_ACL_HDR_SIZE;
++ break;
++
++ case HCI_SCODATA_PKT:
++ info->rx_state = RECV_WAIT_SCO_HEADER;
++ info->rx_count = HCI_SCO_HDR_SIZE;
++ break;
++
++ default:
++ /* unknown packet */
++ printk(KERN_WARNING "bluecard_cs: Unknown HCI packet with type 0x%02x received.\n", info->rx_skb->pkt_type);
++ info->hdev.stat.err_rx++;
++
++ kfree_skb(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ } else {
++
++ *skb_put(info->rx_skb, 1) = buf[i];
++ info->rx_count--;
++
++ if (info->rx_count == 0) {
++
++ int dlen;
++ hci_event_hdr *eh;
++ hci_acl_hdr *ah;
++ hci_sco_hdr *sh;
++
++ switch (info->rx_state) {
++
++ case RECV_WAIT_EVENT_HEADER:
++ eh = (hci_event_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = eh->plen;
++ break;
++
++ case RECV_WAIT_ACL_HEADER:
++ ah = (hci_acl_hdr *)(info->rx_skb->data);
++ dlen = __le16_to_cpu(ah->dlen);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = dlen;
++ break;
++
++ case RECV_WAIT_SCO_HEADER:
++ sh = (hci_sco_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = sh->dlen;
++ break;
++
++ case RECV_WAIT_DATA:
++ hci_recv_frame(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ }
++
++ }
++
++
++ }
++
++ info->hdev.stat.byte_rx += len;
++}
++
++
++void bluecard_interrupt(int irq, void *dev_inst, struct pt_regs *regs)
++{
++ bluecard_info_t *info = dev_inst;
++ unsigned int iobase;
++ unsigned char reg;
++
++ if (!info) {
++ printk(KERN_WARNING "bluecard_cs: Call of irq %d for unknown device.\n", irq);
++ return;
++ }
++
++ if (!test_bit(CARD_READY, &(info->hw_state)))
++ return;
++
++ iobase = info->link.io.BasePort1;
++
++ spin_lock(&(info->lock));
++
++ /* Disable interrupt */
++ info->ctrl_reg &= ~REG_CONTROL_INTERRUPT;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ reg = inb(iobase + REG_INTERRUPT);
++
++ if ((reg != 0x00) && (reg != 0xff)) {
++
++ if (reg & 0x04) {
++ bluecard_receive(info, 0x00);
++ outb(0x04, iobase + REG_INTERRUPT);
++ outb(REG_COMMAND_RX_BUF_ONE, iobase + REG_COMMAND);
++ }
++
++ if (reg & 0x08) {
++ bluecard_receive(info, 0x10);
++ outb(0x08, iobase + REG_INTERRUPT);
++ outb(REG_COMMAND_RX_BUF_TWO, iobase + REG_COMMAND);
++ }
++
++ if (reg & 0x01) {
++ set_bit(XMIT_BUF_ONE_READY, &(info->tx_state));
++ outb(0x01, iobase + REG_INTERRUPT);
++ bluecard_write_wakeup(info);
++ }
++
++ if (reg & 0x02) {
++ set_bit(XMIT_BUF_TWO_READY, &(info->tx_state));
++ outb(0x02, iobase + REG_INTERRUPT);
++ bluecard_write_wakeup(info);
++ }
++
++ }
++
++ /* Enable interrupt */
++ info->ctrl_reg |= REG_CONTROL_INTERRUPT;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ spin_unlock(&(info->lock));
++}
++
++
++
++/* ======================== Device specific HCI commands ======================== */
++
++
++static int bluecard_hci_set_baud_rate(struct hci_dev *hdev, int baud)
++{
++ bluecard_info_t *info = (bluecard_info_t *)(hdev->driver_data);
++ struct sk_buff *skb;
++
++ /* Ericsson baud rate command */
++ unsigned char cmd[] = { HCI_COMMAND_PKT, 0x09, 0xfc, 0x01, 0x03 };
++
++ if (!(skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
++ printk(KERN_WARNING "bluecard_cs: Can't allocate mem for new packet.\n");
++ return -1;
++ }
++
++ switch (baud) {
++ case 460800:
++ cmd[4] = 0x00;
++ skb->pkt_type = PKT_BAUD_RATE_460800;
++ break;
++ case 230400:
++ cmd[4] = 0x01;
++ skb->pkt_type = PKT_BAUD_RATE_230400;
++ break;
++ case 115200:
++ cmd[4] = 0x02;
++ skb->pkt_type = PKT_BAUD_RATE_115200;
++ break;
++ case 57600:
++ /* Fall through... */
++ default:
++ cmd[4] = 0x03;
++ skb->pkt_type = PKT_BAUD_RATE_57600;
++ break;
++ }
++
++ memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
++
++ skb_queue_tail(&(info->txq), skb);
++
++ bluecard_write_wakeup(info);
++
++ return 0;
++}
++
++
++
++/* ======================== HCI interface ======================== */
++
++
++static int bluecard_hci_flush(struct hci_dev *hdev)
++{
++ bluecard_info_t *info = (bluecard_info_t *)(hdev->driver_data);
++
++ /* Drop TX queue */
++ skb_queue_purge(&(info->txq));
++
++ return 0;
++}
++
++
++static int bluecard_hci_open(struct hci_dev *hdev)
++{
++ bluecard_info_t *info = (bluecard_info_t *)(hdev->driver_data);
++ unsigned int iobase = info->link.io.BasePort1;
++
++ bluecard_hci_set_baud_rate(hdev, DEFAULT_BAUD_RATE);
++
++ if (test_and_set_bit(HCI_RUNNING, &(hdev->flags)))
++ return 0;
++
++ /* Enable LED */
++ outb(0x08 | 0x20, iobase + 0x30);
++
++ return 0;
++}
++
++
++static int bluecard_hci_close(struct hci_dev *hdev)
++{
++ bluecard_info_t *info = (bluecard_info_t *)(hdev->driver_data);
++ unsigned int iobase = info->link.io.BasePort1;
++
++ if (!test_and_clear_bit(HCI_RUNNING, &(hdev->flags)))
++ return 0;
++
++ bluecard_hci_flush(hdev);
++
++ /* Disable LED */
++ outb(0x00, iobase + 0x30);
++
++ return 0;
++}
++
++
++static int bluecard_hci_send_frame(struct sk_buff *skb)
++{
++ bluecard_info_t *info;
++ struct hci_dev *hdev = (struct hci_dev *)(skb->dev);
++
++ if (!hdev) {
++ printk(KERN_WARNING "bluecard_cs: Frame for unknown HCI device (hdev=NULL).");
++ return -ENODEV;
++ }
++
++ info = (bluecard_info_t *)(hdev->driver_data);
++
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++ };
++
++ /* Prepend skb with frame type */
++ memcpy(skb_push(skb, 1), &(skb->pkt_type), 1);
++ skb_queue_tail(&(info->txq), skb);
++
++ bluecard_write_wakeup(info);
++
++ return 0;
++}
++
++
++static void bluecard_hci_destruct(struct hci_dev *hdev)
++{
++}
++
++
++static int bluecard_hci_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
++{
++ return -ENOIOCTLCMD;
++}
++
++
++
++/* ======================== Card services HCI interaction ======================== */
++
++
++int bluecard_open(bluecard_info_t *info)
++{
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev;
++ unsigned char id;
++
++ spin_lock_init(&(info->lock));
++
++ init_timer(&(info->timer));
++ info->timer.function = &bluecard_activity_led_timeout;
++ info->timer.data = (u_long)info;
++
++ skb_queue_head_init(&(info->txq));
++
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ info->rx_skb = NULL;
++
++ id = inb(iobase + 0x30);
++
++ if ((id & 0x0f) == 0x02)
++ set_bit(CARD_HAS_PCCARD_ID, &(info->hw_state));
++
++ if (id & 0x10)
++ set_bit(CARD_HAS_POWER_LED, &(info->hw_state));
++
++ if (id & 0x20)
++ set_bit(CARD_HAS_ACTIVITY_LED, &(info->hw_state));
++
++ /* Reset card */
++ info->ctrl_reg = REG_CONTROL_BT_RESET | REG_CONTROL_CARD_RESET;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ /* Turn FPGA off */
++ outb(0x80, iobase + 0x30);
++
++ /* Wait some time */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ / 100);
++
++ /* Turn FPGA on */
++ outb(0x00, iobase + 0x30);
++
++ /* Activate card */
++ info->ctrl_reg = REG_CONTROL_BT_ON | REG_CONTROL_BT_RES_PU;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ /* Enable interrupt */
++ outb(0xff, iobase + REG_INTERRUPT);
++ info->ctrl_reg |= REG_CONTROL_INTERRUPT;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ /* Start the RX buffers */
++ outb(REG_COMMAND_RX_BUF_ONE, iobase + REG_COMMAND);
++ outb(REG_COMMAND_RX_BUF_TWO, iobase + REG_COMMAND);
++
++ /* Signal that the hardware is ready */
++ set_bit(CARD_READY, &(info->hw_state));
++
++ /* Drop TX queue */
++ skb_queue_purge(&(info->txq));
++
++ /* Control the point at which RTS is enabled */
++ outb((0x0f << RTS_LEVEL_SHIFT_BITS) | 1, iobase + REG_RX_CONTROL);
++
++ /* Timeout before it is safe to send the first HCI packet */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout((HZ * 5) / 4); // or set it to 3/2
++
++
++ /* Initialize and register HCI device */
++
++ hdev = &(info->hdev);
++
++ hdev->type = HCI_PCCARD;
++ hdev->driver_data = info;
++
++ hdev->open = bluecard_hci_open;
++ hdev->close = bluecard_hci_close;
++ hdev->flush = bluecard_hci_flush;
++ hdev->send = bluecard_hci_send_frame;
++ hdev->destruct = bluecard_hci_destruct;
++ hdev->ioctl = bluecard_hci_ioctl;
++
++ if (hci_register_dev(hdev) < 0) {
++ printk(KERN_WARNING "bluecard_cs: Can't register HCI device %s.\n", hdev->name);
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++
++int bluecard_close(bluecard_info_t *info)
++{
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev = &(info->hdev);
++
++ if (info->link.state & DEV_CONFIG_PENDING)
++ return -ENODEV;
++
++ bluecard_hci_close(hdev);
++
++ clear_bit(CARD_READY, &(info->hw_state));
++
++ /* Reset card */
++ info->ctrl_reg = REG_CONTROL_BT_RESET | REG_CONTROL_CARD_RESET;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ /* Turn FPGA off */
++ outb(0x80, iobase + 0x30);
++
++ if (hci_unregister_dev(hdev) < 0)
++ printk(KERN_WARNING "bluecard_cs: Can't unregister HCI device %s.\n", hdev->name);
++
++ return 0;
++}
++
++
++
++/* ======================== Card services ======================== */
++
++
++static void cs_error(client_handle_t handle, int func, int ret)
++{
++ error_info_t err = { func, ret };
++
++ CardServices(ReportError, handle, &err);
++}
++
++
++dev_link_t *bluecard_attach(void)
++{
++ bluecard_info_t *info;
++ client_reg_t client_reg;
++ dev_link_t *link;
++ int i, ret;
++
++ /* Create new info device */
++ info = kmalloc(sizeof(*info), GFP_KERNEL);
++ if (!info)
++ return NULL;
++ memset(info, 0, sizeof(*info));
++
++ link = &info->link;
++ link->priv = info;
++
++ link->release.function = &bluecard_release;
++ link->release.data = (u_long)link;
++ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
++ link->io.NumPorts1 = 8;
++ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
++ link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID;
++
++ if (irq_list[0] == -1)
++ link->irq.IRQInfo2 = irq_mask;
++ else
++ for (i = 0; i < 4; i++)
++ link->irq.IRQInfo2 |= 1 << irq_list[i];
++
++ link->irq.Handler = bluecard_interrupt;
++ link->irq.Instance = info;
++
++ link->conf.Attributes = CONF_ENABLE_IRQ;
++ link->conf.Vcc = 50;
++ link->conf.IntType = INT_MEMORY_AND_IO;
++
++ /* Register with Card Services */
++ link->next = dev_list;
++ dev_list = link;
++ client_reg.dev_info = &dev_info;
++ client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
++ client_reg.EventMask =
++ CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
++ CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
++ CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
++ client_reg.event_handler = &bluecard_event;
++ client_reg.Version = 0x0210;
++ client_reg.event_callback_args.client_data = link;
++
++ ret = CardServices(RegisterClient, &link->handle, &client_reg);
++ if (ret != CS_SUCCESS) {
++ cs_error(link->handle, RegisterClient, ret);
++ bluecard_detach(link);
++ return NULL;
++ }
++
++ return link;
++}
++
++
++void bluecard_detach(dev_link_t *link)
++{
++ bluecard_info_t *info = link->priv;
++ dev_link_t **linkp;
++ int ret;
++
++ /* Locate device structure */
++ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
++ if (*linkp == link)
++ break;
++
++ if (*linkp == NULL)
++ return;
++
++ del_timer(&link->release);
++ if (link->state & DEV_CONFIG)
++ bluecard_release((u_long)link);
++
++ if (link->handle) {
++ ret = CardServices(DeregisterClient, link->handle);
++ if (ret != CS_SUCCESS)
++ cs_error(link->handle, DeregisterClient, ret);
++ }
++
++ /* Unlink device structure, free bits */
++ *linkp = link->next;
++
++ kfree(info);
++}
++
++
++static int get_tuple(int fn, client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
++{
++ int i;
++
++ i = CardServices(fn, handle, tuple);
++ if (i != CS_SUCCESS)
++ return CS_NO_MORE_ITEMS;
++
++ i = CardServices(GetTupleData, handle, tuple);
++ if (i != CS_SUCCESS)
++ return i;
++
++ return CardServices(ParseTuple, handle, tuple, parse);
++}
++
++
++#define first_tuple(a, b, c) get_tuple(GetFirstTuple, a, b, c)
++#define next_tuple(a, b, c) get_tuple(GetNextTuple, a, b, c)
++
++void bluecard_config(dev_link_t *link)
++{
++ client_handle_t handle = link->handle;
++ bluecard_info_t *info = link->priv;
++ tuple_t tuple;
++ u_short buf[256];
++ cisparse_t parse;
++ config_info_t config;
++ int i, n, last_ret, last_fn;
++
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++
++ /* Get configuration register information */
++ tuple.DesiredTuple = CISTPL_CONFIG;
++ last_ret = first_tuple(handle, &tuple, &parse);
++ if (last_ret != CS_SUCCESS) {
++ last_fn = ParseTuple;
++ goto cs_failed;
++ }
++ link->conf.ConfigBase = parse.config.base;
++ link->conf.Present = parse.config.rmask[0];
++
++ /* Configure card */
++ link->state |= DEV_CONFIG;
++ i = CardServices(GetConfigurationInfo, handle, &config);
++ link->conf.Vcc = config.Vcc;
++
++ link->conf.ConfigIndex = 0x20;
++ link->io.NumPorts1 = 64;
++ link->io.IOAddrLines = 6;
++
++ for (n = 0; n < 0x400; n += 0x40) {
++ link->io.BasePort1 = n ^ 0x300;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ break;
++ }
++
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIO, i);
++ goto failed;
++ }
++
++ i = CardServices(RequestIRQ, link->handle, &link->irq);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIRQ, i);
++ link->irq.AssignedIRQ = 0;
++ }
++
++ i = CardServices(RequestConfiguration, link->handle, &link->conf);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestConfiguration, i);
++ goto failed;
++ }
++
++ MOD_INC_USE_COUNT;
++
++ if (bluecard_open(info) != 0)
++ goto failed;
++
++ strcpy(info->node.dev_name, info->hdev.name);
++ link->dev = &info->node;
++ link->state &= ~DEV_CONFIG_PENDING;
++
++ return;
++
++cs_failed:
++ cs_error(link->handle, last_fn, last_ret);
++
++failed:
++ bluecard_release((u_long)link);
++}
++
++
++void bluecard_release(u_long arg)
++{
++ dev_link_t *link = (dev_link_t *)arg;
++ bluecard_info_t *info = link->priv;
++
++ if (link->state & DEV_PRESENT)
++ bluecard_close(info);
++
++ MOD_DEC_USE_COUNT;
++
++ link->dev = NULL;
++
++ CardServices(ReleaseConfiguration, link->handle);
++ CardServices(ReleaseIO, link->handle, &link->io);
++ CardServices(ReleaseIRQ, link->handle, &link->irq);
++
++ link->state &= ~DEV_CONFIG;
++}
++
++
++int bluecard_event(event_t event, int priority, event_callback_args_t *args)
++{
++ dev_link_t *link = args->client_data;
++ bluecard_info_t *info = link->priv;
++
++ switch (event) {
++ case CS_EVENT_CARD_REMOVAL:
++ link->state &= ~DEV_PRESENT;
++ if (link->state & DEV_CONFIG) {
++ bluecard_close(info);
++ mod_timer(&link->release, jiffies + HZ / 20);
++ }
++ break;
++ case CS_EVENT_CARD_INSERTION:
++ link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
++ bluecard_config(link);
++ break;
++ case CS_EVENT_PM_SUSPEND:
++ link->state |= DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_RESET_PHYSICAL:
++ if (link->state & DEV_CONFIG)
++ CardServices(ReleaseConfiguration, link->handle);
++ break;
++ case CS_EVENT_PM_RESUME:
++ link->state &= ~DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_CARD_RESET:
++ if (DEV_OK(link))
++ CardServices(RequestConfiguration, link->handle, &link->conf);
++ break;
++ }
++
++ return 0;
++}
++
++
++
++/* ======================== Module initialization ======================== */
++
++
++int __init init_bluecard_cs(void)
++{
++ servinfo_t serv;
++ int err;
++
++ CardServices(GetCardServicesInfo, &serv);
++ if (serv.Revision != CS_RELEASE_CODE) {
++ printk(KERN_NOTICE "bluecard_cs: Card Services release does not match!\n");
++ return -1;
++ }
++
++ err = register_pccard_driver(&dev_info, &bluecard_attach, &bluecard_detach);
++
++ return err;
++}
++
++
++void __exit exit_bluecard_cs(void)
++{
++ unregister_pccard_driver(&dev_info);
++
++ while (dev_list != NULL)
++ bluecard_detach(dev_list);
++}
++
++
++module_init(init_bluecard_cs);
++module_exit(exit_bluecard_cs);
++
++EXPORT_NO_SYMBOLS;
+diff -urN linux-2.4.18/drivers/bluetooth/bt3c_cs.c linux-2.4.18-mh15/drivers/bluetooth/bt3c_cs.c
+--- linux-2.4.18/drivers/bluetooth/bt3c_cs.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/bt3c_cs.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,986 @@
++/*
++ *
++ * Driver for the 3Com Bluetooth PCMCIA card
++ *
++ * Copyright (C) 2001-2002 Marcel Holtmann <marcel@holtmann.org>
++ * Jose Orlando Pereira <jop@di.uminho.pt>
++ *
++ *
++ * 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;
++ *
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ *
++ * The initial developer of the original code is David A. Hinds
++ * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
++ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/kmod.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/delay.h>
++#include <linux/timer.h>
++#include <linux/errno.h>
++#include <linux/unistd.h>
++#include <linux/ptrace.h>
++#include <linux/ioport.h>
++#include <linux/spinlock.h>
++
++#include <linux/skbuff.h>
++#include <linux/string.h>
++#include <linux/serial.h>
++#include <linux/serial_reg.h>
++#include <asm/system.h>
++#include <asm/bitops.h>
++#include <asm/io.h>
++
++#include <linux/firmware.h>
++
++#include <pcmcia/version.h>
++#include <pcmcia/cs_types.h>
++#include <pcmcia/cs.h>
++#include <pcmcia/cistpl.h>
++#include <pcmcia/ciscode.h>
++#include <pcmcia/ds.h>
++#include <pcmcia/cisreg.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++
++
++/* ======================== Module parameters ======================== */
++
++
++/* Bit map of interrupts to choose from */
++static u_int irq_mask = 0xffff;
++static int irq_list[4] = { -1 };
++
++MODULE_PARM(irq_mask, "i");
++MODULE_PARM(irq_list, "1-4i");
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>, Jose Orlando Pereira <jop@di.uminho.pt>");
++MODULE_DESCRIPTION("BlueZ driver for the 3Com Bluetooth PCMCIA card");
++MODULE_LICENSE("GPL");
++
++
++
++/* ======================== Local structures ======================== */
++
++
++typedef struct bt3c_info_t {
++ dev_link_t link;
++ dev_node_t node;
++
++ struct hci_dev hdev;
++
++ spinlock_t lock; /* For serializing operations */
++
++ struct sk_buff_head txq;
++ unsigned long tx_state;
++
++ unsigned long rx_state;
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++} bt3c_info_t;
++
++
++void bt3c_config(dev_link_t *link);
++void bt3c_release(u_long arg);
++int bt3c_event(event_t event, int priority, event_callback_args_t *args);
++
++static dev_info_t dev_info = "bt3c_cs";
++
++dev_link_t *bt3c_attach(void);
++void bt3c_detach(dev_link_t *);
++
++static dev_link_t *dev_list = NULL;
++
++
++/* Transmit states */
++#define XMIT_SENDING 1
++#define XMIT_WAKEUP 2
++#define XMIT_WAITING 8
++
++/* Receiver states */
++#define RECV_WAIT_PACKET_TYPE 0
++#define RECV_WAIT_EVENT_HEADER 1
++#define RECV_WAIT_ACL_HEADER 2
++#define RECV_WAIT_SCO_HEADER 3
++#define RECV_WAIT_DATA 4
++
++
++
++/* ======================== Special I/O functions ======================== */
++
++
++#define DATA_L 0
++#define DATA_H 1
++#define ADDR_L 2
++#define ADDR_H 3
++#define CONTROL 4
++
++
++inline void bt3c_address(unsigned int iobase, unsigned short addr)
++{
++ outb(addr & 0xff, iobase + ADDR_L);
++ outb((addr >> 8) & 0xff, iobase + ADDR_H);
++}
++
++
++inline void bt3c_put(unsigned int iobase, unsigned short value)
++{
++ outb(value & 0xff, iobase + DATA_L);
++ outb((value >> 8) & 0xff, iobase + DATA_H);
++}
++
++
++inline void bt3c_io_write(unsigned int iobase, unsigned short addr, unsigned short value)
++{
++ bt3c_address(iobase, addr);
++ bt3c_put(iobase, value);
++}
++
++
++inline unsigned short bt3c_get(unsigned int iobase)
++{
++ unsigned short value = inb(iobase + DATA_L);
++
++ value |= inb(iobase + DATA_H) << 8;
++
++ return value;
++}
++
++
++inline unsigned short bt3c_read(unsigned int iobase, unsigned short addr)
++{
++ bt3c_address(iobase, addr);
++
++ return bt3c_get(iobase);
++}
++
++
++
++/* ======================== Interrupt handling ======================== */
++
++
++static int bt3c_write(unsigned int iobase, int fifo_size, __u8 *buf, int len)
++{
++ int actual = 0;
++
++ bt3c_address(iobase, 0x7080);
++
++ /* Fill FIFO with current frame */
++ while (actual < len) {
++ /* Transmit next byte */
++ bt3c_put(iobase, buf[actual]);
++ actual++;
++ }
++
++ bt3c_io_write(iobase, 0x7005, actual);
++
++ return actual;
++}
++
++
++static void bt3c_write_wakeup(bt3c_info_t *info, int from)
++{
++ unsigned long flags;
++
++ if (!info) {
++ printk(KERN_WARNING "bt3c_cs: Call of write_wakeup for unknown device.\n");
++ return;
++ }
++
++ if (test_and_set_bit(XMIT_SENDING, &(info->tx_state)))
++ return;
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ do {
++ register unsigned int iobase = info->link.io.BasePort1;
++ register struct sk_buff *skb;
++ register int len;
++
++ if (!(info->link.state & DEV_PRESENT))
++ break;
++
++
++ if (!(skb = skb_dequeue(&(info->txq)))) {
++ clear_bit(XMIT_SENDING, &(info->tx_state));
++ break;
++ }
++
++ /* Send frame */
++ len = bt3c_write(iobase, 256, skb->data, skb->len);
++
++ if (len != skb->len) {
++ printk(KERN_WARNING "bt3c_cs: very strange\n");
++ }
++
++ kfree_skb(skb);
++
++ info->hdev.stat.byte_tx += len;
++
++ } while (0);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++}
++
++
++static void bt3c_receive(bt3c_info_t *info)
++{
++ unsigned int iobase;
++ int size = 0, avail;
++
++ if (!info) {
++ printk(KERN_WARNING "bt3c_cs: Call of receive for unknown device.\n");
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ avail = bt3c_read(iobase, 0x7006);
++ //printk("bt3c_cs: receiving %d bytes\n", avail);
++
++ bt3c_address(iobase, 0x7480);
++ while (size < avail) {
++ size++;
++ info->hdev.stat.byte_rx++;
++
++ /* Allocate packet */
++ if (info->rx_skb == NULL) {
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ if (!(info->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
++ printk(KERN_WARNING "bt3c_cs: Can't allocate mem for new packet.\n");
++ return;
++ }
++ }
++
++
++ if (info->rx_state == RECV_WAIT_PACKET_TYPE) {
++
++ info->rx_skb->dev = (void *)&(info->hdev);
++ info->rx_skb->pkt_type = inb(iobase + DATA_L);
++ inb(iobase + DATA_H);
++ //printk("bt3c: PACKET_TYPE=%02x\n", info->rx_skb->pkt_type);
++
++ switch (info->rx_skb->pkt_type) {
++
++ case HCI_EVENT_PKT:
++ info->rx_state = RECV_WAIT_EVENT_HEADER;
++ info->rx_count = HCI_EVENT_HDR_SIZE;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ info->rx_state = RECV_WAIT_ACL_HEADER;
++ info->rx_count = HCI_ACL_HDR_SIZE;
++ break;
++
++ case HCI_SCODATA_PKT:
++ info->rx_state = RECV_WAIT_SCO_HEADER;
++ info->rx_count = HCI_SCO_HDR_SIZE;
++ break;
++
++ default:
++ /* Unknown packet */
++ printk(KERN_WARNING "bt3c_cs: Unknown HCI packet with type 0x%02x received.\n", info->rx_skb->pkt_type);
++ info->hdev.stat.err_rx++;
++ clear_bit(HCI_RUNNING, &(info->hdev.flags));
++
++ kfree_skb(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ } else {
++
++ __u8 x = inb(iobase + DATA_L);
++
++ *skb_put(info->rx_skb, 1) = x;
++ inb(iobase + DATA_H);
++ info->rx_count--;
++
++ if (info->rx_count == 0) {
++
++ int dlen;
++ hci_event_hdr *eh;
++ hci_acl_hdr *ah;
++ hci_sco_hdr *sh;
++
++ switch (info->rx_state) {
++
++ case RECV_WAIT_EVENT_HEADER:
++ eh = (hci_event_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = eh->plen;
++ break;
++
++ case RECV_WAIT_ACL_HEADER:
++ ah = (hci_acl_hdr *)(info->rx_skb->data);
++ dlen = __le16_to_cpu(ah->dlen);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = dlen;
++ break;
++
++ case RECV_WAIT_SCO_HEADER:
++ sh = (hci_sco_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = sh->dlen;
++ break;
++
++ case RECV_WAIT_DATA:
++ hci_recv_frame(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ }
++
++ }
++
++ }
++
++ bt3c_io_write(iobase, 0x7006, 0x0000);
++}
++
++
++void bt3c_interrupt(int irq, void *dev_inst, struct pt_regs *regs)
++{
++ bt3c_info_t *info = dev_inst;
++ unsigned int iobase;
++ int iir;
++
++ if (!info) {
++ printk(KERN_WARNING "bt3c_cs: Call of irq %d for unknown device.\n", irq);
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ spin_lock(&(info->lock));
++
++ iir = inb(iobase + CONTROL);
++ if (iir & 0x80) {
++ int stat = bt3c_read(iobase, 0x7001);
++
++ if ((stat & 0xff) == 0x7f) {
++ printk(KERN_WARNING "bt3c_cs: STRANGE stat=%04x\n", stat);
++ } else if ((stat & 0xff) != 0xff) {
++ if (stat & 0x0020) {
++ int stat = bt3c_read(iobase, 0x7002) & 0x10;
++ printk(KERN_WARNING "bt3c_cs: antena %s\n", stat ? "OUT" : "IN");
++ }
++ if (stat & 0x0001)
++ bt3c_receive(info);
++ if (stat & 0x0002) {
++ //printk("bt3c_cs: ACK %04x\n", stat);
++ clear_bit(XMIT_SENDING, &(info->tx_state));
++ bt3c_write_wakeup(info, 1);
++ }
++
++ bt3c_io_write(iobase, 0x7001, 0x0000);
++
++ outb(iir, iobase + CONTROL);
++ }
++ }
++
++ spin_unlock(&(info->lock));
++}
++
++
++
++
++/* ======================== HCI interface ======================== */
++
++
++static int bt3c_hci_flush(struct hci_dev *hdev)
++{
++ bt3c_info_t *info = (bt3c_info_t *)(hdev->driver_data);
++
++ /* Drop TX queue */
++ skb_queue_purge(&(info->txq));
++
++ return 0;
++}
++
++
++static int bt3c_hci_open(struct hci_dev *hdev)
++{
++ set_bit(HCI_RUNNING, &(hdev->flags));
++
++ return 0;
++}
++
++
++static int bt3c_hci_close(struct hci_dev *hdev)
++{
++ if (!test_and_clear_bit(HCI_RUNNING, &(hdev->flags)))
++ return 0;
++
++ bt3c_hci_flush(hdev);
++
++ return 0;
++}
++
++
++static int bt3c_hci_send_frame(struct sk_buff *skb)
++{
++ bt3c_info_t *info;
++ struct hci_dev *hdev = (struct hci_dev *)(skb->dev);
++
++ if (!hdev) {
++ printk(KERN_WARNING "bt3c_cs: Frame for unknown HCI device (hdev=NULL).");
++ return -ENODEV;
++ }
++
++ info = (bt3c_info_t *) (hdev->driver_data);
++
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++ };
++
++ /* Prepend skb with frame type */
++ memcpy(skb_push(skb, 1), &(skb->pkt_type), 1);
++ skb_queue_tail(&(info->txq), skb);
++
++ bt3c_write_wakeup(info, 0);
++
++ return 0;
++}
++
++
++static void bt3c_hci_destruct(struct hci_dev *hdev)
++{
++}
++
++
++static int bt3c_hci_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
++{
++ return -ENOIOCTLCMD;
++}
++
++
++
++/* ======================== Card services HCI interaction ======================== */
++
++
++static int bt3c_load_firmware(bt3c_info_t *info, unsigned char *firmware, int count)
++{
++ char *ptr = (char *) firmware;
++ char b[9];
++ unsigned int iobase, size, addr, fcs, tmp;
++ int i, err = 0;
++
++ iobase = info->link.io.BasePort1;
++
++ /* Reset */
++
++ bt3c_io_write(iobase, 0x8040, 0x0404);
++ bt3c_io_write(iobase, 0x8040, 0x0400);
++
++ udelay(1);
++
++ bt3c_io_write(iobase, 0x8040, 0x0404);
++
++ udelay(17);
++
++ /* Load */
++
++ while (count) {
++ if (ptr[0] != 'S') {
++ printk(KERN_WARNING "bt3c_cs: Bad address in firmware.\n");
++ err = -EFAULT;
++ goto error;
++ }
++
++ memset(b, 0, sizeof(b));
++ memcpy(b, ptr + 2, 2);
++ size = simple_strtol(b, NULL, 16);
++
++ memset(b, 0, sizeof(b));
++ memcpy(b, ptr + 4, 8);
++ addr = simple_strtol(b, NULL, 16);
++
++ memset(b, 0, sizeof(b));
++ memcpy(b, ptr + (size * 2) + 2, 2);
++ fcs = simple_strtol(b, NULL, 16);
++
++ memset(b, 0, sizeof(b));
++ for (tmp = 0, i = 0; i < size; i++) {
++ memcpy(b, ptr + (i * 2) + 2, 2);
++ tmp += simple_strtol(b, NULL, 16);
++ }
++
++ if (((tmp + fcs) & 0xff) != 0xff) {
++ printk(KERN_WARNING "bt3c_cs: Checksum error in firmware.\n");
++ err = -EILSEQ;
++ goto error;
++ }
++
++ if (ptr[1] == '3') {
++ bt3c_address(iobase, addr);
++
++ memset(b, 0, sizeof(b));
++ for (i = 0; i < (size - 4) / 2; i++) {
++ memcpy(b, ptr + (i * 4) + 12, 4);
++ tmp = simple_strtol(b, NULL, 16);
++ bt3c_put(iobase, tmp);
++ }
++ }
++
++ ptr += (size * 2) + 6;
++ count -= (size * 2) + 6;
++ }
++
++ udelay(17);
++
++ /* Boot */
++
++ bt3c_address(iobase, 0x3000);
++ outb(inb(iobase + CONTROL) | 0x40, iobase + CONTROL);
++
++error:
++ udelay(17);
++
++ /* Clear */
++
++ bt3c_io_write(iobase, 0x7006, 0x0000);
++ bt3c_io_write(iobase, 0x7005, 0x0000);
++ bt3c_io_write(iobase, 0x7001, 0x0000);
++
++ return err;
++}
++
++
++int bt3c_open(bt3c_info_t *info)
++{
++ const struct firmware *firmware;
++ char device[16];
++ struct hci_dev *hdev;
++ int err;
++
++ spin_lock_init(&(info->lock));
++
++ skb_queue_head_init(&(info->txq));
++
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ info->rx_skb = NULL;
++
++ /* Load firmware */
++
++ snprintf(device, sizeof(device), "bt3c%4.4x", info->link.io.BasePort1);
++
++ err = request_firmware(&firmware, "BT3CPCC.bin", device);
++ if (err < 0) {
++ printk(KERN_WARNING "bt3c_cs: Firmware request failed.\n");
++ return err;
++ }
++
++ err = bt3c_load_firmware(info, firmware->data, firmware->size);
++
++ release_firmware(firmware);
++
++ if (err < 0) {
++ printk(KERN_WARNING "bt3c_cs: Firmware loading failed.\n");
++ return err;
++ }
++
++ /* Timeout before it is safe to send the first HCI packet */
++
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ);
++
++
++ /* Initialize and register HCI device */
++
++ hdev = &(info->hdev);
++
++ hdev->type = HCI_PCCARD;
++ hdev->driver_data = info;
++
++ hdev->open = bt3c_hci_open;
++ hdev->close = bt3c_hci_close;
++ hdev->flush = bt3c_hci_flush;
++ hdev->send = bt3c_hci_send_frame;
++ hdev->destruct = bt3c_hci_destruct;
++ hdev->ioctl = bt3c_hci_ioctl;
++
++ if (hci_register_dev(hdev) < 0) {
++ printk(KERN_WARNING "bt3c_cs: Can't register HCI device %s.\n", hdev->name);
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++
++int bt3c_close(bt3c_info_t *info)
++{
++ struct hci_dev *hdev = &(info->hdev);
++
++ if (info->link.state & DEV_CONFIG_PENDING)
++ return -ENODEV;
++
++ bt3c_hci_close(hdev);
++
++ if (hci_unregister_dev(hdev) < 0)
++ printk(KERN_WARNING "bt3c_cs: Can't unregister HCI device %s.\n", hdev->name);
++
++ return 0;
++}
++
++
++
++/* ======================== Card services ======================== */
++
++
++static void cs_error(client_handle_t handle, int func, int ret)
++{
++ error_info_t err = { func, ret };
++
++ CardServices(ReportError, handle, &err);
++}
++
++
++dev_link_t *bt3c_attach(void)
++{
++ bt3c_info_t *info;
++ client_reg_t client_reg;
++ dev_link_t *link;
++ int i, ret;
++
++ /* Create new info device */
++ info = kmalloc(sizeof(*info), GFP_KERNEL);
++ if (!info)
++ return NULL;
++ memset(info, 0, sizeof(*info));
++
++ link = &info->link;
++ link->priv = info;
++
++ link->release.function = &bt3c_release;
++ link->release.data = (u_long)link;
++ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
++ link->io.NumPorts1 = 8;
++ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
++ link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID;
++
++ if (irq_list[0] == -1)
++ link->irq.IRQInfo2 = irq_mask;
++ else
++ for (i = 0; i < 4; i++)
++ link->irq.IRQInfo2 |= 1 << irq_list[i];
++
++ link->irq.Handler = bt3c_interrupt;
++ link->irq.Instance = info;
++
++ link->conf.Attributes = CONF_ENABLE_IRQ;
++ link->conf.Vcc = 50;
++ link->conf.IntType = INT_MEMORY_AND_IO;
++
++ /* Register with Card Services */
++ link->next = dev_list;
++ dev_list = link;
++ client_reg.dev_info = &dev_info;
++ client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
++ client_reg.EventMask =
++ CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
++ CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
++ CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
++ client_reg.event_handler = &bt3c_event;
++ client_reg.Version = 0x0210;
++ client_reg.event_callback_args.client_data = link;
++
++ ret = CardServices(RegisterClient, &link->handle, &client_reg);
++ if (ret != CS_SUCCESS) {
++ cs_error(link->handle, RegisterClient, ret);
++ bt3c_detach(link);
++ return NULL;
++ }
++
++ return link;
++}
++
++
++void bt3c_detach(dev_link_t *link)
++{
++ bt3c_info_t *info = link->priv;
++ dev_link_t **linkp;
++ int ret;
++
++ /* Locate device structure */
++ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
++ if (*linkp == link)
++ break;
++
++ if (*linkp == NULL)
++ return;
++
++ del_timer(&link->release);
++
++ if (link->state & DEV_CONFIG)
++ bt3c_release((u_long)link);
++
++ if (link->handle) {
++ ret = CardServices(DeregisterClient, link->handle);
++ if (ret != CS_SUCCESS)
++ cs_error(link->handle, DeregisterClient, ret);
++ }
++
++ /* Unlink device structure, free bits */
++ *linkp = link->next;
++
++ kfree(info);
++}
++
++
++static int get_tuple(int fn, client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
++{
++ int i;
++
++ i = CardServices(fn, handle, tuple);
++ if (i != CS_SUCCESS)
++ return CS_NO_MORE_ITEMS;
++
++ i = CardServices(GetTupleData, handle, tuple);
++ if (i != CS_SUCCESS)
++ return i;
++
++ return CardServices(ParseTuple, handle, tuple, parse);
++}
++
++
++#define first_tuple(a, b, c) get_tuple(GetFirstTuple, a, b, c)
++#define next_tuple(a, b, c) get_tuple(GetNextTuple, a, b, c)
++
++void bt3c_config(dev_link_t *link)
++{
++ static ioaddr_t base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 };
++ client_handle_t handle = link->handle;
++ bt3c_info_t *info = link->priv;
++ tuple_t tuple;
++ u_short buf[256];
++ cisparse_t parse;
++ cistpl_cftable_entry_t *cf = &parse.cftable_entry;
++ config_info_t config;
++ int i, j, try, last_ret, last_fn;
++
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++
++ /* Get configuration register information */
++ tuple.DesiredTuple = CISTPL_CONFIG;
++ last_ret = first_tuple(handle, &tuple, &parse);
++ if (last_ret != CS_SUCCESS) {
++ last_fn = ParseTuple;
++ goto cs_failed;
++ }
++ link->conf.ConfigBase = parse.config.base;
++ link->conf.Present = parse.config.rmask[0];
++
++ /* Configure card */
++ link->state |= DEV_CONFIG;
++ i = CardServices(GetConfigurationInfo, handle, &config);
++ link->conf.Vcc = config.Vcc;
++
++ /* First pass: look for a config entry that looks normal. */
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++ tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
++ /* Two tries: without IO aliases, then with aliases */
++ for (try = 0; try < 2; try++) {
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if (i != CS_SUCCESS)
++ goto next_entry;
++ if (cf->vpp1.present & (1 << CISTPL_POWER_VNOM))
++ link->conf.Vpp1 = link->conf.Vpp2 = cf->vpp1.param[CISTPL_POWER_VNOM] / 10000;
++ if ((cf->io.nwin > 0) && (cf->io.win[0].len == 8) && (cf->io.win[0].base != 0)) {
++ link->conf.ConfigIndex = cf->index;
++ link->io.BasePort1 = cf->io.win[0].base;
++ link->io.IOAddrLines = (try == 0) ? 16 : cf->io.flags & CISTPL_IO_LINES_MASK;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ goto found_port;
++ }
++next_entry:
++ i = next_tuple(handle, &tuple, &parse);
++ }
++ }
++
++ /* Second pass: try to find an entry that isn't picky about
++ its base address, then try to grab any standard serial port
++ address, and finally try to get any free port. */
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if ((i == CS_SUCCESS) && (cf->io.nwin > 0) && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) {
++ link->conf.ConfigIndex = cf->index;
++ for (j = 0; j < 5; j++) {
++ link->io.BasePort1 = base[j];
++ link->io.IOAddrLines = base[j] ? 16 : 3;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ goto found_port;
++ }
++ }
++ i = next_tuple(handle, &tuple, &parse);
++ }
++
++found_port:
++ if (i != CS_SUCCESS) {
++ printk(KERN_NOTICE "bt3c_cs: No usable port range found. Giving up.\n");
++ cs_error(link->handle, RequestIO, i);
++ goto failed;
++ }
++
++ i = CardServices(RequestIRQ, link->handle, &link->irq);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIRQ, i);
++ link->irq.AssignedIRQ = 0;
++ }
++
++ i = CardServices(RequestConfiguration, link->handle, &link->conf);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestConfiguration, i);
++ goto failed;
++ }
++
++ MOD_INC_USE_COUNT;
++
++ if (bt3c_open(info) != 0)
++ goto failed;
++
++ strcpy(info->node.dev_name, info->hdev.name);
++ link->dev = &info->node;
++ link->state &= ~DEV_CONFIG_PENDING;
++
++ return;
++
++cs_failed:
++ cs_error(link->handle, last_fn, last_ret);
++
++failed:
++ bt3c_release((u_long)link);
++}
++
++
++void bt3c_release(u_long arg)
++{
++ dev_link_t *link = (dev_link_t *)arg;
++ bt3c_info_t *info = link->priv;
++
++ if (link->state & DEV_PRESENT)
++ bt3c_close(info);
++
++ MOD_DEC_USE_COUNT;
++
++ link->dev = NULL;
++
++ CardServices(ReleaseConfiguration, link->handle);
++ CardServices(ReleaseIO, link->handle, &link->io);
++ CardServices(ReleaseIRQ, link->handle, &link->irq);
++
++ link->state &= ~DEV_CONFIG;
++}
++
++
++int bt3c_event(event_t event, int priority, event_callback_args_t *args)
++{
++ dev_link_t *link = args->client_data;
++ bt3c_info_t *info = link->priv;
++
++ switch (event) {
++ case CS_EVENT_CARD_REMOVAL:
++ link->state &= ~DEV_PRESENT;
++ if (link->state & DEV_CONFIG) {
++ bt3c_close(info);
++ mod_timer(&link->release, jiffies + HZ / 20);
++ }
++ break;
++ case CS_EVENT_CARD_INSERTION:
++ link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
++ bt3c_config(link);
++ break;
++ case CS_EVENT_PM_SUSPEND:
++ link->state |= DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_RESET_PHYSICAL:
++ if (link->state & DEV_CONFIG)
++ CardServices(ReleaseConfiguration, link->handle);
++ break;
++ case CS_EVENT_PM_RESUME:
++ link->state &= ~DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_CARD_RESET:
++ if (DEV_OK(link))
++ CardServices(RequestConfiguration, link->handle, &link->conf);
++ break;
++ }
++
++ return 0;
++}
++
++
++
++/* ======================== Module initialization ======================== */
++
++
++int __init init_bt3c_cs(void)
++{
++ servinfo_t serv;
++ int err;
++
++ CardServices(GetCardServicesInfo, &serv);
++ if (serv.Revision != CS_RELEASE_CODE) {
++ printk(KERN_NOTICE "bt3c_cs: Card Services release does not match!\n");
++ return -1;
++ }
++
++ err = register_pccard_driver(&dev_info, &bt3c_attach, &bt3c_detach);
++
++ return err;
++}
++
++
++void __exit exit_bt3c_cs(void)
++{
++ unregister_pccard_driver(&dev_info);
++
++ while (dev_list != NULL)
++ bt3c_detach(dev_list);
++}
++
++
++module_init(init_bt3c_cs);
++module_exit(exit_bt3c_cs);
++
++EXPORT_NO_SYMBOLS;
+diff -urN linux-2.4.18/drivers/bluetooth/btuart_cs.c linux-2.4.18-mh15/drivers/bluetooth/btuart_cs.c
+--- linux-2.4.18/drivers/bluetooth/btuart_cs.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/btuart_cs.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,909 @@
++/*
++ *
++ * Driver for Bluetooth PCMCIA cards with HCI UART interface
++ *
++ * Copyright (C) 2001-2002 Marcel Holtmann <marcel@holtmann.org>
++ *
++ *
++ * 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;
++ *
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ *
++ * The initial developer of the original code is David A. Hinds
++ * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
++ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/timer.h>
++#include <linux/errno.h>
++#include <linux/ptrace.h>
++#include <linux/ioport.h>
++#include <linux/spinlock.h>
++
++#include <linux/skbuff.h>
++#include <linux/string.h>
++#include <linux/serial.h>
++#include <linux/serial_reg.h>
++#include <asm/system.h>
++#include <asm/bitops.h>
++#include <asm/io.h>
++
++#include <pcmcia/version.h>
++#include <pcmcia/cs_types.h>
++#include <pcmcia/cs.h>
++#include <pcmcia/cistpl.h>
++#include <pcmcia/ciscode.h>
++#include <pcmcia/ds.h>
++#include <pcmcia/cisreg.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++
++
++/* ======================== Module parameters ======================== */
++
++
++/* Bit map of interrupts to choose from */
++static u_int irq_mask = 0xffff;
++static int irq_list[4] = { -1 };
++
++MODULE_PARM(irq_mask, "i");
++MODULE_PARM(irq_list, "1-4i");
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueZ driver for Bluetooth PCMCIA cards with HCI UART interface");
++MODULE_LICENSE("GPL");
++
++
++
++/* ======================== Local structures ======================== */
++
++
++typedef struct btuart_info_t {
++ dev_link_t link;
++ dev_node_t node;
++
++ struct hci_dev hdev;
++
++ spinlock_t lock; /* For serializing operations */
++
++ struct sk_buff_head txq;
++ unsigned long tx_state;
++
++ unsigned long rx_state;
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++} btuart_info_t;
++
++
++void btuart_config(dev_link_t *link);
++void btuart_release(u_long arg);
++int btuart_event(event_t event, int priority, event_callback_args_t *args);
++
++static dev_info_t dev_info = "btuart_cs";
++
++dev_link_t *btuart_attach(void);
++void btuart_detach(dev_link_t *);
++
++static dev_link_t *dev_list = NULL;
++
++
++/* Maximum baud rate */
++#define SPEED_MAX 115200
++
++/* Default baud rate: 57600, 115200, 230400 or 460800 */
++#define DEFAULT_BAUD_RATE 115200
++
++
++/* Transmit states */
++#define XMIT_SENDING 1
++#define XMIT_WAKEUP 2
++#define XMIT_WAITING 8
++
++/* Receiver states */
++#define RECV_WAIT_PACKET_TYPE 0
++#define RECV_WAIT_EVENT_HEADER 1
++#define RECV_WAIT_ACL_HEADER 2
++#define RECV_WAIT_SCO_HEADER 3
++#define RECV_WAIT_DATA 4
++
++
++
++/* ======================== Interrupt handling ======================== */
++
++
++static int btuart_write(unsigned int iobase, int fifo_size, __u8 *buf, int len)
++{
++ int actual = 0;
++
++ /* Tx FIFO should be empty */
++ if (!(inb(iobase + UART_LSR) & UART_LSR_THRE))
++ return 0;
++
++ /* Fill FIFO with current frame */
++ while ((fifo_size-- > 0) && (actual < len)) {
++ /* Transmit next byte */
++ outb(buf[actual], iobase + UART_TX);
++ actual++;
++ }
++
++ return actual;
++}
++
++
++static void btuart_write_wakeup(btuart_info_t *info)
++{
++ if (!info) {
++ printk(KERN_WARNING "btuart_cs: Call of write_wakeup for unknown device.\n");
++ return;
++ }
++
++ if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) {
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++ return;
++ }
++
++ do {
++ register unsigned int iobase = info->link.io.BasePort1;
++ register struct sk_buff *skb;
++ register int len;
++
++ clear_bit(XMIT_WAKEUP, &(info->tx_state));
++
++ if (!(info->link.state & DEV_PRESENT))
++ return;
++
++ if (!(skb = skb_dequeue(&(info->txq))))
++ break;
++
++ /* Send frame */
++ len = btuart_write(iobase, 16, skb->data, skb->len);
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++
++ if (len == skb->len) {
++ kfree_skb(skb);
++ } else {
++ skb_pull(skb, len);
++ skb_queue_head(&(info->txq), skb);
++ }
++
++ info->hdev.stat.byte_tx += len;
++
++ } while (test_bit(XMIT_WAKEUP, &(info->tx_state)));
++
++ clear_bit(XMIT_SENDING, &(info->tx_state));
++}
++
++
++static void btuart_receive(btuart_info_t *info)
++{
++ unsigned int iobase;
++ int boguscount = 0;
++
++ if (!info) {
++ printk(KERN_WARNING "btuart_cs: Call of receive for unknown device.\n");
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ do {
++ info->hdev.stat.byte_rx++;
++
++ /* Allocate packet */
++ if (info->rx_skb == NULL) {
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ if (!(info->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
++ printk(KERN_WARNING "btuart_cs: Can't allocate mem for new packet.\n");
++ return;
++ }
++ }
++
++ if (info->rx_state == RECV_WAIT_PACKET_TYPE) {
++
++ info->rx_skb->dev = (void *)&(info->hdev);
++ info->rx_skb->pkt_type = inb(iobase + UART_RX);
++
++ switch (info->rx_skb->pkt_type) {
++
++ case HCI_EVENT_PKT:
++ info->rx_state = RECV_WAIT_EVENT_HEADER;
++ info->rx_count = HCI_EVENT_HDR_SIZE;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ info->rx_state = RECV_WAIT_ACL_HEADER;
++ info->rx_count = HCI_ACL_HDR_SIZE;
++ break;
++
++ case HCI_SCODATA_PKT:
++ info->rx_state = RECV_WAIT_SCO_HEADER;
++ info->rx_count = HCI_SCO_HDR_SIZE;
++ break;
++
++ default:
++ /* Unknown packet */
++ printk(KERN_WARNING "btuart_cs: Unknown HCI packet with type 0x%02x received.\n", info->rx_skb->pkt_type);
++ info->hdev.stat.err_rx++;
++ clear_bit(HCI_RUNNING, &(info->hdev.flags));
++
++ kfree_skb(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ } else {
++
++ *skb_put(info->rx_skb, 1) = inb(iobase + UART_RX);
++ info->rx_count--;
++
++ if (info->rx_count == 0) {
++
++ int dlen;
++ hci_event_hdr *eh;
++ hci_acl_hdr *ah;
++ hci_sco_hdr *sh;
++
++
++ switch (info->rx_state) {
++
++ case RECV_WAIT_EVENT_HEADER:
++ eh = (hci_event_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = eh->plen;
++ break;
++
++ case RECV_WAIT_ACL_HEADER:
++ ah = (hci_acl_hdr *)(info->rx_skb->data);
++ dlen = __le16_to_cpu(ah->dlen);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = dlen;
++ break;
++
++ case RECV_WAIT_SCO_HEADER:
++ sh = (hci_sco_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = sh->dlen;
++ break;
++
++ case RECV_WAIT_DATA:
++ hci_recv_frame(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ }
++
++ }
++
++ /* Make sure we don't stay here to long */
++ if (boguscount++ > 16)
++ break;
++
++ } while (inb(iobase + UART_LSR) & UART_LSR_DR);
++}
++
++
++void btuart_interrupt(int irq, void *dev_inst, struct pt_regs *regs)
++{
++ btuart_info_t *info = dev_inst;
++ unsigned int iobase;
++ int boguscount = 0;
++ int iir, lsr;
++
++ if (!info) {
++ printk(KERN_WARNING "btuart_cs: Call of irq %d for unknown device.\n", irq);
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ spin_lock(&(info->lock));
++
++ iir = inb(iobase + UART_IIR) & UART_IIR_ID;
++ while (iir) {
++
++ /* Clear interrupt */
++ lsr = inb(iobase + UART_LSR);
++
++ switch (iir) {
++ case UART_IIR_RLSI:
++ printk(KERN_NOTICE "btuart_cs: RLSI\n");
++ break;
++ case UART_IIR_RDI:
++ /* Receive interrupt */
++ btuart_receive(info);
++ break;
++ case UART_IIR_THRI:
++ if (lsr & UART_LSR_THRE) {
++ /* Transmitter ready for data */
++ btuart_write_wakeup(info);
++ }
++ break;
++ default:
++ printk(KERN_NOTICE "btuart_cs: Unhandled IIR=%#x\n", iir);
++ break;
++ }
++
++ /* Make sure we don't stay here to long */
++ if (boguscount++ > 100)
++ break;
++
++ iir = inb(iobase + UART_IIR) & UART_IIR_ID;
++
++ }
++
++ spin_unlock(&(info->lock));
++}
++
++
++static void btuart_change_speed(btuart_info_t *info, unsigned int speed)
++{
++ unsigned long flags;
++ unsigned int iobase;
++ int fcr; /* FIFO control reg */
++ int lcr; /* Line control reg */
++ int divisor;
++
++ if (!info) {
++ printk(KERN_WARNING "btuart_cs: Call of change speed for unknown device.\n");
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Turn off interrupts */
++ outb(0, iobase + UART_IER);
++
++ divisor = SPEED_MAX / speed;
++
++ fcr = UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT;
++
++ /*
++ * Use trigger level 1 to avoid 3 ms. timeout delay at 9600 bps, and
++ * almost 1,7 ms at 19200 bps. At speeds above that we can just forget
++ * about this timeout since it will always be fast enough.
++ */
++
++ if (speed < 38400)
++ fcr |= UART_FCR_TRIGGER_1;
++ else
++ fcr |= UART_FCR_TRIGGER_14;
++
++ /* Bluetooth cards use 8N1 */
++ lcr = UART_LCR_WLEN8;
++
++ outb(UART_LCR_DLAB | lcr, iobase + UART_LCR); /* Set DLAB */
++ outb(divisor & 0xff, iobase + UART_DLL); /* Set speed */
++ outb(divisor >> 8, iobase + UART_DLM);
++ outb(lcr, iobase + UART_LCR); /* Set 8N1 */
++ outb(fcr, iobase + UART_FCR); /* Enable FIFO's */
++
++ /* Turn on interrups */
++ outb(UART_IER_RLSI | UART_IER_RDI | UART_IER_THRI, iobase + UART_IER);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++}
++
++
++
++/* ======================== HCI interface ======================== */
++
++
++static int btuart_hci_flush(struct hci_dev *hdev)
++{
++ btuart_info_t *info = (btuart_info_t *)(hdev->driver_data);
++
++ /* Drop TX queue */
++ skb_queue_purge(&(info->txq));
++
++ return 0;
++}
++
++
++static int btuart_hci_open(struct hci_dev *hdev)
++{
++ set_bit(HCI_RUNNING, &(hdev->flags));
++
++ return 0;
++}
++
++
++static int btuart_hci_close(struct hci_dev *hdev)
++{
++ if (!test_and_clear_bit(HCI_RUNNING, &(hdev->flags)))
++ return 0;
++
++ btuart_hci_flush(hdev);
++
++ return 0;
++}
++
++
++static int btuart_hci_send_frame(struct sk_buff *skb)
++{
++ btuart_info_t *info;
++ struct hci_dev *hdev = (struct hci_dev *)(skb->dev);
++
++ if (!hdev) {
++ printk(KERN_WARNING "btuart_cs: Frame for unknown HCI device (hdev=NULL).");
++ return -ENODEV;
++ }
++
++ info = (btuart_info_t *)(hdev->driver_data);
++
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++ };
++
++ /* Prepend skb with frame type */
++ memcpy(skb_push(skb, 1), &(skb->pkt_type), 1);
++ skb_queue_tail(&(info->txq), skb);
++
++ btuart_write_wakeup(info);
++
++ return 0;
++}
++
++
++static void btuart_hci_destruct(struct hci_dev *hdev)
++{
++}
++
++
++static int btuart_hci_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
++{
++ return -ENOIOCTLCMD;
++}
++
++
++
++/* ======================== Card services HCI interaction ======================== */
++
++
++int btuart_open(btuart_info_t *info)
++{
++ unsigned long flags;
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev;
++
++ spin_lock_init(&(info->lock));
++
++ skb_queue_head_init(&(info->txq));
++
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ info->rx_skb = NULL;
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Reset UART */
++ outb(0, iobase + UART_MCR);
++
++ /* Turn off interrupts */
++ outb(0, iobase + UART_IER);
++
++ /* Initialize UART */
++ outb(UART_LCR_WLEN8, iobase + UART_LCR); /* Reset DLAB */
++ outb((UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2), iobase + UART_MCR);
++
++ /* Turn on interrupts */
++ // outb(UART_IER_RLSI | UART_IER_RDI | UART_IER_THRI, iobase + UART_IER);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++
++ btuart_change_speed(info, DEFAULT_BAUD_RATE);
++
++ /* Timeout before it is safe to send the first HCI packet */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ);
++
++
++ /* Initialize and register HCI device */
++
++ hdev = &(info->hdev);
++
++ hdev->type = HCI_PCCARD;
++ hdev->driver_data = info;
++
++ hdev->open = btuart_hci_open;
++ hdev->close = btuart_hci_close;
++ hdev->flush = btuart_hci_flush;
++ hdev->send = btuart_hci_send_frame;
++ hdev->destruct = btuart_hci_destruct;
++ hdev->ioctl = btuart_hci_ioctl;
++
++ if (hci_register_dev(hdev) < 0) {
++ printk(KERN_WARNING "btuart_cs: Can't register HCI device %s.\n", hdev->name);
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++
++int btuart_close(btuart_info_t *info)
++{
++ unsigned long flags;
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev = &(info->hdev);
++
++ if (info->link.state & DEV_CONFIG_PENDING)
++ return -ENODEV;
++
++ btuart_hci_close(hdev);
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Reset UART */
++ outb(0, iobase + UART_MCR);
++
++ /* Turn off interrupts */
++ outb(0, iobase + UART_IER);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++
++ if (hci_unregister_dev(hdev) < 0)
++ printk(KERN_WARNING "btuart_cs: Can't unregister HCI device %s.\n", hdev->name);
++
++ return 0;
++}
++
++
++
++/* ======================== Card services ======================== */
++
++
++static void cs_error(client_handle_t handle, int func, int ret)
++{
++ error_info_t err = { func, ret };
++
++ CardServices(ReportError, handle, &err);
++}
++
++
++dev_link_t *btuart_attach(void)
++{
++ btuart_info_t *info;
++ client_reg_t client_reg;
++ dev_link_t *link;
++ int i, ret;
++
++ /* Create new info device */
++ info = kmalloc(sizeof(*info), GFP_KERNEL);
++ if (!info)
++ return NULL;
++ memset(info, 0, sizeof(*info));
++
++ link = &info->link;
++ link->priv = info;
++
++ link->release.function = &btuart_release;
++ link->release.data = (u_long)link;
++ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
++ link->io.NumPorts1 = 8;
++ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
++ link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID;
++
++ if (irq_list[0] == -1)
++ link->irq.IRQInfo2 = irq_mask;
++ else
++ for (i = 0; i < 4; i++)
++ link->irq.IRQInfo2 |= 1 << irq_list[i];
++
++ link->irq.Handler = btuart_interrupt;
++ link->irq.Instance = info;
++
++ link->conf.Attributes = CONF_ENABLE_IRQ;
++ link->conf.Vcc = 50;
++ link->conf.IntType = INT_MEMORY_AND_IO;
++
++ /* Register with Card Services */
++ link->next = dev_list;
++ dev_list = link;
++ client_reg.dev_info = &dev_info;
++ client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
++ client_reg.EventMask =
++ CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
++ CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
++ CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
++ client_reg.event_handler = &btuart_event;
++ client_reg.Version = 0x0210;
++ client_reg.event_callback_args.client_data = link;
++
++ ret = CardServices(RegisterClient, &link->handle, &client_reg);
++ if (ret != CS_SUCCESS) {
++ cs_error(link->handle, RegisterClient, ret);
++ btuart_detach(link);
++ return NULL;
++ }
++
++ return link;
++}
++
++
++void btuart_detach(dev_link_t *link)
++{
++ btuart_info_t *info = link->priv;
++ dev_link_t **linkp;
++ int ret;
++
++ /* Locate device structure */
++ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
++ if (*linkp == link)
++ break;
++
++ if (*linkp == NULL)
++ return;
++
++ del_timer(&link->release);
++ if (link->state & DEV_CONFIG)
++ btuart_release((u_long)link);
++
++ if (link->handle) {
++ ret = CardServices(DeregisterClient, link->handle);
++ if (ret != CS_SUCCESS)
++ cs_error(link->handle, DeregisterClient, ret);
++ }
++
++ /* Unlink device structure, free bits */
++ *linkp = link->next;
++
++ kfree(info);
++}
++
++
++static int get_tuple(int fn, client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
++{
++ int i;
++
++ i = CardServices(fn, handle, tuple);
++ if (i != CS_SUCCESS)
++ return CS_NO_MORE_ITEMS;
++
++ i = CardServices(GetTupleData, handle, tuple);
++ if (i != CS_SUCCESS)
++ return i;
++
++ return CardServices(ParseTuple, handle, tuple, parse);
++}
++
++
++#define first_tuple(a, b, c) get_tuple(GetFirstTuple, a, b, c)
++#define next_tuple(a, b, c) get_tuple(GetNextTuple, a, b, c)
++
++void btuart_config(dev_link_t *link)
++{
++ static ioaddr_t base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 };
++ client_handle_t handle = link->handle;
++ btuart_info_t *info = link->priv;
++ tuple_t tuple;
++ u_short buf[256];
++ cisparse_t parse;
++ cistpl_cftable_entry_t *cf = &parse.cftable_entry;
++ config_info_t config;
++ int i, j, try, last_ret, last_fn;
++
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++
++ /* Get configuration register information */
++ tuple.DesiredTuple = CISTPL_CONFIG;
++ last_ret = first_tuple(handle, &tuple, &parse);
++ if (last_ret != CS_SUCCESS) {
++ last_fn = ParseTuple;
++ goto cs_failed;
++ }
++ link->conf.ConfigBase = parse.config.base;
++ link->conf.Present = parse.config.rmask[0];
++
++ /* Configure card */
++ link->state |= DEV_CONFIG;
++ i = CardServices(GetConfigurationInfo, handle, &config);
++ link->conf.Vcc = config.Vcc;
++
++ /* First pass: look for a config entry that looks normal. */
++ tuple.TupleData = (cisdata_t *) buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++ tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
++ /* Two tries: without IO aliases, then with aliases */
++ for (try = 0; try < 2; try++) {
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if (i != CS_SUCCESS)
++ goto next_entry;
++ if (cf->vpp1.present & (1 << CISTPL_POWER_VNOM))
++ link->conf.Vpp1 = link->conf.Vpp2 = cf->vpp1.param[CISTPL_POWER_VNOM] / 10000;
++ if ((cf->io.nwin > 0) && (cf->io.win[0].len == 8) && (cf->io.win[0].base != 0)) {
++ link->conf.ConfigIndex = cf->index;
++ link->io.BasePort1 = cf->io.win[0].base;
++ link->io.IOAddrLines = (try == 0) ? 16 : cf->io.flags & CISTPL_IO_LINES_MASK;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ goto found_port;
++ }
++next_entry:
++ i = next_tuple(handle, &tuple, &parse);
++ }
++ }
++
++ /* Second pass: try to find an entry that isn't picky about
++ its base address, then try to grab any standard serial port
++ address, and finally try to get any free port. */
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if ((i == CS_SUCCESS) && (cf->io.nwin > 0)
++ && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) {
++ link->conf.ConfigIndex = cf->index;
++ for (j = 0; j < 5; j++) {
++ link->io.BasePort1 = base[j];
++ link->io.IOAddrLines = base[j] ? 16 : 3;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ goto found_port;
++ }
++ }
++ i = next_tuple(handle, &tuple, &parse);
++ }
++
++found_port:
++ if (i != CS_SUCCESS) {
++ printk(KERN_NOTICE "btuart_cs: No usable port range found. Giving up.\n");
++ cs_error(link->handle, RequestIO, i);
++ goto failed;
++ }
++
++ i = CardServices(RequestIRQ, link->handle, &link->irq);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIRQ, i);
++ link->irq.AssignedIRQ = 0;
++ }
++
++ i = CardServices(RequestConfiguration, link->handle, &link->conf);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestConfiguration, i);
++ goto failed;
++ }
++
++ MOD_INC_USE_COUNT;
++
++ if (btuart_open(info) != 0)
++ goto failed;
++
++ strcpy(info->node.dev_name, info->hdev.name);
++ link->dev = &info->node;
++ link->state &= ~DEV_CONFIG_PENDING;
++
++ return;
++
++cs_failed:
++ cs_error(link->handle, last_fn, last_ret);
++
++failed:
++ btuart_release((u_long) link);
++}
++
++
++void btuart_release(u_long arg)
++{
++ dev_link_t *link = (dev_link_t *)arg;
++ btuart_info_t *info = link->priv;
++
++ if (link->state & DEV_PRESENT)
++ btuart_close(info);
++
++ MOD_DEC_USE_COUNT;
++
++ link->dev = NULL;
++
++ CardServices(ReleaseConfiguration, link->handle);
++ CardServices(ReleaseIO, link->handle, &link->io);
++ CardServices(ReleaseIRQ, link->handle, &link->irq);
++
++ link->state &= ~DEV_CONFIG;
++}
++
++
++int btuart_event(event_t event, int priority, event_callback_args_t *args)
++{
++ dev_link_t *link = args->client_data;
++ btuart_info_t *info = link->priv;
++
++ switch (event) {
++ case CS_EVENT_CARD_REMOVAL:
++ link->state &= ~DEV_PRESENT;
++ if (link->state & DEV_CONFIG) {
++ btuart_close(info);
++ mod_timer(&link->release, jiffies + HZ / 20);
++ }
++ break;
++ case CS_EVENT_CARD_INSERTION:
++ link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
++ btuart_config(link);
++ break;
++ case CS_EVENT_PM_SUSPEND:
++ link->state |= DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_RESET_PHYSICAL:
++ if (link->state & DEV_CONFIG)
++ CardServices(ReleaseConfiguration, link->handle);
++ break;
++ case CS_EVENT_PM_RESUME:
++ link->state &= ~DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_CARD_RESET:
++ if (DEV_OK(link))
++ CardServices(RequestConfiguration, link->handle, &link->conf);
++ break;
++ }
++
++ return 0;
++}
++
++
++
++/* ======================== Module initialization ======================== */
++
++
++int __init init_btuart_cs(void)
++{
++ servinfo_t serv;
++ int err;
++
++ CardServices(GetCardServicesInfo, &serv);
++ if (serv.Revision != CS_RELEASE_CODE) {
++ printk(KERN_NOTICE "btuart_cs: Card Services release does not match!\n");
++ return -1;
++ }
++
++ err = register_pccard_driver(&dev_info, &btuart_attach, &btuart_detach);
++
++ return err;
++}
++
++
++void __exit exit_btuart_cs(void)
++{
++ unregister_pccard_driver(&dev_info);
++
++ while (dev_list != NULL)
++ btuart_detach(dev_list);
++}
++
++
++module_init(init_btuart_cs);
++module_exit(exit_btuart_cs);
++
++EXPORT_NO_SYMBOLS;
+diff -urN linux-2.4.18/drivers/bluetooth/Config.in linux-2.4.18-mh15/drivers/bluetooth/Config.in
+--- linux-2.4.18/drivers/bluetooth/Config.in 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/drivers/bluetooth/Config.in 2004-08-01 16:26:23.000000000 +0200
+@@ -1,8 +1,33 @@
++#
++# Bluetooth HCI device drivers configuration
++#
++
+ mainmenu_option next_comment
+ comment 'Bluetooth device drivers'
+
+ dep_tristate 'HCI USB driver' CONFIG_BLUEZ_HCIUSB $CONFIG_BLUEZ $CONFIG_USB
++if [ "$CONFIG_BLUEZ_HCIUSB" != "n" ]; then
++ bool ' SCO (voice) support' CONFIG_BLUEZ_HCIUSB_SCO
++fi
++
+ dep_tristate 'HCI UART driver' CONFIG_BLUEZ_HCIUART $CONFIG_BLUEZ
+-dep_tristate 'HCI VHCI virtual HCI device driver' CONFIG_BLUEZ_HCIVHCI $CONFIG_BLUEZ
++if [ "$CONFIG_BLUEZ_HCIUART" != "n" ]; then
++ bool ' UART (H4) protocol support' CONFIG_BLUEZ_HCIUART_H4
++ bool ' BCSP protocol support' CONFIG_BLUEZ_HCIUART_BCSP
++ dep_bool ' Transmit CRC with every BCSP packet' CONFIG_BLUEZ_HCIUART_BCSP_TXCRC $CONFIG_BLUEZ_HCIUART_BCSP
++fi
++
++dep_tristate 'HCI BlueFRITZ! USB driver' CONFIG_BLUEZ_HCIBFUSB $CONFIG_BLUEZ $CONFIG_USB
++
++dep_tristate 'HCI DTL1 (PC Card) driver' CONFIG_BLUEZ_HCIDTL1 $CONFIG_PCMCIA $CONFIG_BLUEZ
++
++dep_tristate 'HCI BT3C (PC Card) driver' CONFIG_BLUEZ_HCIBT3C $CONFIG_PCMCIA $CONFIG_BLUEZ
++
++dep_tristate 'HCI BlueCard (PC Card) driver' CONFIG_BLUEZ_HCIBLUECARD $CONFIG_PCMCIA $CONFIG_BLUEZ
++
++dep_tristate 'HCI UART (PC Card) driver' CONFIG_BLUEZ_HCIBTUART $CONFIG_PCMCIA $CONFIG_BLUEZ
++
++dep_tristate 'HCI VHCI (Virtual HCI device) driver' CONFIG_BLUEZ_HCIVHCI $CONFIG_BLUEZ
+
+ endmenu
++
+diff -urN linux-2.4.18/drivers/bluetooth/dtl1_cs.c linux-2.4.18-mh15/drivers/bluetooth/dtl1_cs.c
+--- linux-2.4.18/drivers/bluetooth/dtl1_cs.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/dtl1_cs.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,861 @@
++/*
++ *
++ * A driver for Nokia Connectivity Card DTL-1 devices
++ *
++ * Copyright (C) 2001-2002 Marcel Holtmann <marcel@holtmann.org>
++ *
++ *
++ * 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;
++ *
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ *
++ * The initial developer of the original code is David A. Hinds
++ * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
++ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/timer.h>
++#include <linux/errno.h>
++#include <linux/ptrace.h>
++#include <linux/ioport.h>
++#include <linux/spinlock.h>
++
++#include <linux/skbuff.h>
++#include <linux/string.h>
++#include <linux/serial.h>
++#include <linux/serial_reg.h>
++#include <asm/system.h>
++#include <asm/bitops.h>
++#include <asm/io.h>
++
++#include <pcmcia/version.h>
++#include <pcmcia/cs_types.h>
++#include <pcmcia/cs.h>
++#include <pcmcia/cistpl.h>
++#include <pcmcia/ciscode.h>
++#include <pcmcia/ds.h>
++#include <pcmcia/cisreg.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++
++
++/* ======================== Module parameters ======================== */
++
++
++/* Bit map of interrupts to choose from */
++static u_int irq_mask = 0xffff;
++static int irq_list[4] = { -1 };
++
++MODULE_PARM(irq_mask, "i");
++MODULE_PARM(irq_list, "1-4i");
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueZ driver for Nokia Connectivity Card DTL-1");
++MODULE_LICENSE("GPL");
++
++
++
++/* ======================== Local structures ======================== */
++
++
++typedef struct dtl1_info_t {
++ dev_link_t link;
++ dev_node_t node;
++
++ struct hci_dev hdev;
++
++ spinlock_t lock; /* For serializing operations */
++
++ unsigned long flowmask; /* HCI flow mask */
++ int ri_latch;
++
++ struct sk_buff_head txq;
++ unsigned long tx_state;
++
++ unsigned long rx_state;
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++} dtl1_info_t;
++
++
++void dtl1_config(dev_link_t *link);
++void dtl1_release(u_long arg);
++int dtl1_event(event_t event, int priority, event_callback_args_t *args);
++
++static dev_info_t dev_info = "dtl1_cs";
++
++dev_link_t *dtl1_attach(void);
++void dtl1_detach(dev_link_t *);
++
++static dev_link_t *dev_list = NULL;
++
++
++/* Transmit states */
++#define XMIT_SENDING 1
++#define XMIT_WAKEUP 2
++#define XMIT_WAITING 8
++
++/* Receiver States */
++#define RECV_WAIT_NSH 0
++#define RECV_WAIT_DATA 1
++
++
++typedef struct {
++ u8 type;
++ u8 zero;
++ u16 len;
++} __attribute__ ((packed)) nsh_t; /* Nokia Specific Header */
++
++#define NSHL 4 /* Nokia Specific Header Length */
++
++
++
++/* ======================== Interrupt handling ======================== */
++
++
++static int dtl1_write(unsigned int iobase, int fifo_size, __u8 *buf, int len)
++{
++ int actual = 0;
++
++ /* Tx FIFO should be empty */
++ if (!(inb(iobase + UART_LSR) & UART_LSR_THRE))
++ return 0;
++
++ /* Fill FIFO with current frame */
++ while ((fifo_size-- > 0) && (actual < len)) {
++ /* Transmit next byte */
++ outb(buf[actual], iobase + UART_TX);
++ actual++;
++ }
++
++ return actual;
++}
++
++
++static void dtl1_write_wakeup(dtl1_info_t *info)
++{
++ if (!info) {
++ printk(KERN_WARNING "dtl1_cs: Call of write_wakeup for unknown device.\n");
++ return;
++ }
++
++ if (test_bit(XMIT_WAITING, &(info->tx_state))) {
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++ return;
++ }
++
++ if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) {
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++ return;
++ }
++
++ do {
++ register unsigned int iobase = info->link.io.BasePort1;
++ register struct sk_buff *skb;
++ register int len;
++
++ clear_bit(XMIT_WAKEUP, &(info->tx_state));
++
++ if (!(info->link.state & DEV_PRESENT))
++ return;
++
++ if (!(skb = skb_dequeue(&(info->txq))))
++ break;
++
++ /* Send frame */
++ len = dtl1_write(iobase, 32, skb->data, skb->len);
++
++ if (len == skb->len) {
++ set_bit(XMIT_WAITING, &(info->tx_state));
++ kfree_skb(skb);
++ } else {
++ skb_pull(skb, len);
++ skb_queue_head(&(info->txq), skb);
++ }
++
++ info->hdev.stat.byte_tx += len;
++
++ } while (test_bit(XMIT_WAKEUP, &(info->tx_state)));
++
++ clear_bit(XMIT_SENDING, &(info->tx_state));
++}
++
++
++static void dtl1_control(dtl1_info_t *info, struct sk_buff *skb)
++{
++ u8 flowmask = *(u8 *)skb->data;
++ int i;
++
++ printk(KERN_INFO "dtl1_cs: Nokia control data = ");
++ for (i = 0; i < skb->len; i++) {
++ printk("%02x ", skb->data[i]);
++ }
++ printk("\n");
++
++ /* transition to active state */
++ if (((info->flowmask & 0x07) == 0) && ((flowmask & 0x07) != 0)) {
++ clear_bit(XMIT_WAITING, &(info->tx_state));
++ dtl1_write_wakeup(info);
++ }
++
++ info->flowmask = flowmask;
++
++ kfree_skb(skb);
++}
++
++
++static void dtl1_receive(dtl1_info_t *info)
++{
++ unsigned int iobase;
++ nsh_t *nsh;
++ int boguscount = 0;
++
++ if (!info) {
++ printk(KERN_WARNING "dtl1_cs: Call of receive for unknown device.\n");
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ do {
++ info->hdev.stat.byte_rx++;
++
++ /* Allocate packet */
++ if (info->rx_skb == NULL)
++ if (!(info->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
++ printk(KERN_WARNING "dtl1_cs: Can't allocate mem for new packet.\n");
++ info->rx_state = RECV_WAIT_NSH;
++ info->rx_count = NSHL;
++ return;
++ }
++
++ *skb_put(info->rx_skb, 1) = inb(iobase + UART_RX);
++ nsh = (nsh_t *)info->rx_skb->data;
++
++ info->rx_count--;
++
++ if (info->rx_count == 0) {
++
++ switch (info->rx_state) {
++ case RECV_WAIT_NSH:
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = nsh->len + (nsh->len & 0x0001);
++ break;
++ case RECV_WAIT_DATA:
++ info->rx_skb->pkt_type = nsh->type;
++
++ /* remove PAD byte if it exists */
++ if (nsh->len & 0x0001) {
++ info->rx_skb->tail--;
++ info->rx_skb->len--;
++ }
++
++ /* remove NSH */
++ skb_pull(info->rx_skb, NSHL);
++
++ switch (info->rx_skb->pkt_type) {
++ case 0x80:
++ /* control data for the Nokia Card */
++ dtl1_control(info, info->rx_skb);
++ break;
++ case 0x82:
++ case 0x83:
++ case 0x84:
++ /* send frame to the HCI layer */
++ info->rx_skb->dev = (void *)&(info->hdev);
++ info->rx_skb->pkt_type &= 0x0f;
++ hci_recv_frame(info->rx_skb);
++ break;
++ default:
++ /* unknown packet */
++ printk(KERN_WARNING "dtl1_cs: Unknown HCI packet with type 0x%02x received.\n", info->rx_skb->pkt_type);
++ kfree_skb(info->rx_skb);
++ break;
++ }
++
++ info->rx_state = RECV_WAIT_NSH;
++ info->rx_count = NSHL;
++ info->rx_skb = NULL;
++ break;
++ }
++
++ }
++
++ /* Make sure we don't stay here to long */
++ if (boguscount++ > 32)
++ break;
++
++ } while (inb(iobase + UART_LSR) & UART_LSR_DR);
++}
++
++
++void dtl1_interrupt(int irq, void *dev_inst, struct pt_regs *regs)
++{
++ dtl1_info_t *info = dev_inst;
++ unsigned int iobase;
++ unsigned char msr;
++ int boguscount = 0;
++ int iir, lsr;
++
++ if (!info) {
++ printk(KERN_WARNING "dtl1_cs: Call of irq %d for unknown device.\n", irq);
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ spin_lock(&(info->lock));
++
++ iir = inb(iobase + UART_IIR) & UART_IIR_ID;
++ while (iir) {
++
++ /* Clear interrupt */
++ lsr = inb(iobase + UART_LSR);
++
++ switch (iir) {
++ case UART_IIR_RLSI:
++ printk(KERN_NOTICE "dtl1_cs: RLSI\n");
++ break;
++ case UART_IIR_RDI:
++ /* Receive interrupt */
++ dtl1_receive(info);
++ break;
++ case UART_IIR_THRI:
++ if (lsr & UART_LSR_THRE) {
++ /* Transmitter ready for data */
++ dtl1_write_wakeup(info);
++ }
++ break;
++ default:
++ printk(KERN_NOTICE "dtl1_cs: Unhandled IIR=%#x\n", iir);
++ break;
++ }
++
++ /* Make sure we don't stay here to long */
++ if (boguscount++ > 100)
++ break;
++
++ iir = inb(iobase + UART_IIR) & UART_IIR_ID;
++
++ }
++
++ msr = inb(iobase + UART_MSR);
++
++ if (info->ri_latch ^ (msr & UART_MSR_RI)) {
++ info->ri_latch = msr & UART_MSR_RI;
++ clear_bit(XMIT_WAITING, &(info->tx_state));
++ dtl1_write_wakeup(info);
++ }
++
++ spin_unlock(&(info->lock));
++}
++
++
++
++/* ======================== HCI interface ======================== */
++
++
++static int dtl1_hci_open(struct hci_dev *hdev)
++{
++ set_bit(HCI_RUNNING, &(hdev->flags));
++
++ return 0;
++}
++
++
++static int dtl1_hci_flush(struct hci_dev *hdev)
++{
++ dtl1_info_t *info = (dtl1_info_t *)(hdev->driver_data);
++
++ /* Drop TX queue */
++ skb_queue_purge(&(info->txq));
++
++ return 0;
++}
++
++
++static int dtl1_hci_close(struct hci_dev *hdev)
++{
++ if (!test_and_clear_bit(HCI_RUNNING, &(hdev->flags)))
++ return 0;
++
++ dtl1_hci_flush(hdev);
++
++ return 0;
++}
++
++
++static int dtl1_hci_send_frame(struct sk_buff *skb)
++{
++ dtl1_info_t *info;
++ struct hci_dev *hdev = (struct hci_dev *)(skb->dev);
++ struct sk_buff *s;
++ nsh_t nsh;
++
++ if (!hdev) {
++ printk(KERN_WARNING "dtl1_cs: Frame for unknown HCI device (hdev=NULL).");
++ return -ENODEV;
++ }
++
++ info = (dtl1_info_t *)(hdev->driver_data);
++
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ nsh.type = 0x81;
++ break;
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ nsh.type = 0x82;
++ break;
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ nsh.type = 0x83;
++ break;
++ };
++
++ nsh.zero = 0;
++ nsh.len = skb->len;
++
++ s = bluez_skb_alloc(NSHL + skb->len + 1, GFP_ATOMIC);
++ skb_reserve(s, NSHL);
++ memcpy(skb_put(s, skb->len), skb->data, skb->len);
++ if (skb->len & 0x0001)
++ *skb_put(s, 1) = 0; /* PAD */
++
++ /* Prepend skb with Nokia frame header and queue */
++ memcpy(skb_push(s, NSHL), &nsh, NSHL);
++ skb_queue_tail(&(info->txq), s);
++
++ dtl1_write_wakeup(info);
++
++ kfree_skb(skb);
++
++ return 0;
++}
++
++
++static void dtl1_hci_destruct(struct hci_dev *hdev)
++{
++}
++
++
++static int dtl1_hci_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
++{
++ return -ENOIOCTLCMD;
++}
++
++
++
++/* ======================== Card services HCI interaction ======================== */
++
++
++int dtl1_open(dtl1_info_t *info)
++{
++ unsigned long flags;
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev;
++
++ spin_lock_init(&(info->lock));
++
++ skb_queue_head_init(&(info->txq));
++
++ info->rx_state = RECV_WAIT_NSH;
++ info->rx_count = NSHL;
++ info->rx_skb = NULL;
++
++ set_bit(XMIT_WAITING, &(info->tx_state));
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Reset UART */
++ outb(0, iobase + UART_MCR);
++
++ /* Turn off interrupts */
++ outb(0, iobase + UART_IER);
++
++ /* Initialize UART */
++ outb(UART_LCR_WLEN8, iobase + UART_LCR); /* Reset DLAB */
++ outb((UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2), iobase + UART_MCR);
++
++ info->ri_latch = inb(info->link.io.BasePort1 + UART_MSR) & UART_MSR_RI;
++
++ /* Turn on interrupts */
++ outb(UART_IER_RLSI | UART_IER_RDI | UART_IER_THRI, iobase + UART_IER);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++
++ /* Timeout before it is safe to send the first HCI packet */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ * 2);
++
++
++ /* Initialize and register HCI device */
++
++ hdev = &(info->hdev);
++
++ hdev->type = HCI_PCCARD;
++ hdev->driver_data = info;
++
++ hdev->open = dtl1_hci_open;
++ hdev->close = dtl1_hci_close;
++ hdev->flush = dtl1_hci_flush;
++ hdev->send = dtl1_hci_send_frame;
++ hdev->destruct = dtl1_hci_destruct;
++ hdev->ioctl = dtl1_hci_ioctl;
++
++ if (hci_register_dev(hdev) < 0) {
++ printk(KERN_WARNING "dtl1_cs: Can't register HCI device %s.\n", hdev->name);
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++
++int dtl1_close(dtl1_info_t *info)
++{
++ unsigned long flags;
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev = &(info->hdev);
++
++ if (info->link.state & DEV_CONFIG_PENDING)
++ return -ENODEV;
++
++ dtl1_hci_close(hdev);
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Reset UART */
++ outb(0, iobase + UART_MCR);
++
++ /* Turn off interrupts */
++ outb(0, iobase + UART_IER);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++
++ if (hci_unregister_dev(hdev) < 0)
++ printk(KERN_WARNING "dtl1_cs: Can't unregister HCI device %s.\n", hdev->name);
++
++ return 0;
++}
++
++
++
++/* ======================== Card services ======================== */
++
++
++static void cs_error(client_handle_t handle, int func, int ret)
++{
++ error_info_t err = { func, ret };
++
++ CardServices(ReportError, handle, &err);
++}
++
++
++dev_link_t *dtl1_attach(void)
++{
++ dtl1_info_t *info;
++ client_reg_t client_reg;
++ dev_link_t *link;
++ int i, ret;
++
++ /* Create new info device */
++ info = kmalloc(sizeof(*info), GFP_KERNEL);
++ if (!info)
++ return NULL;
++ memset(info, 0, sizeof(*info));
++
++ link = &info->link;
++ link->priv = info;
++
++ link->release.function = &dtl1_release;
++ link->release.data = (u_long)link;
++ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
++ link->io.NumPorts1 = 8;
++ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
++ link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID;
++
++ if (irq_list[0] == -1)
++ link->irq.IRQInfo2 = irq_mask;
++ else
++ for (i = 0; i < 4; i++)
++ link->irq.IRQInfo2 |= 1 << irq_list[i];
++
++ link->irq.Handler = dtl1_interrupt;
++ link->irq.Instance = info;
++
++ link->conf.Attributes = CONF_ENABLE_IRQ;
++ link->conf.Vcc = 50;
++ link->conf.IntType = INT_MEMORY_AND_IO;
++
++ /* Register with Card Services */
++ link->next = dev_list;
++ dev_list = link;
++ client_reg.dev_info = &dev_info;
++ client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
++ client_reg.EventMask =
++ CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
++ CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
++ CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
++ client_reg.event_handler = &dtl1_event;
++ client_reg.Version = 0x0210;
++ client_reg.event_callback_args.client_data = link;
++
++ ret = CardServices(RegisterClient, &link->handle, &client_reg);
++ if (ret != CS_SUCCESS) {
++ cs_error(link->handle, RegisterClient, ret);
++ dtl1_detach(link);
++ return NULL;
++ }
++
++ return link;
++}
++
++
++void dtl1_detach(dev_link_t *link)
++{
++ dtl1_info_t *info = link->priv;
++ dev_link_t **linkp;
++ int ret;
++
++ /* Locate device structure */
++ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
++ if (*linkp == link)
++ break;
++
++ if (*linkp == NULL)
++ return;
++
++ del_timer(&link->release);
++ if (link->state & DEV_CONFIG)
++ dtl1_release((u_long)link);
++
++ if (link->handle) {
++ ret = CardServices(DeregisterClient, link->handle);
++ if (ret != CS_SUCCESS)
++ cs_error(link->handle, DeregisterClient, ret);
++ }
++
++ /* Unlink device structure, free bits */
++ *linkp = link->next;
++
++ kfree(info);
++}
++
++
++static int get_tuple(int fn, client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
++{
++ int i;
++
++ i = CardServices(fn, handle, tuple);
++ if (i != CS_SUCCESS)
++ return CS_NO_MORE_ITEMS;
++
++ i = CardServices(GetTupleData, handle, tuple);
++ if (i != CS_SUCCESS)
++ return i;
++
++ return CardServices(ParseTuple, handle, tuple, parse);
++}
++
++
++#define first_tuple(a, b, c) get_tuple(GetFirstTuple, a, b, c)
++#define next_tuple(a, b, c) get_tuple(GetNextTuple, a, b, c)
++
++void dtl1_config(dev_link_t *link)
++{
++ client_handle_t handle = link->handle;
++ dtl1_info_t *info = link->priv;
++ tuple_t tuple;
++ u_short buf[256];
++ cisparse_t parse;
++ cistpl_cftable_entry_t *cf = &parse.cftable_entry;
++ config_info_t config;
++ int i, last_ret, last_fn;
++
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++
++ /* Get configuration register information */
++ tuple.DesiredTuple = CISTPL_CONFIG;
++ last_ret = first_tuple(handle, &tuple, &parse);
++ if (last_ret != CS_SUCCESS) {
++ last_fn = ParseTuple;
++ goto cs_failed;
++ }
++ link->conf.ConfigBase = parse.config.base;
++ link->conf.Present = parse.config.rmask[0];
++
++ /* Configure card */
++ link->state |= DEV_CONFIG;
++ i = CardServices(GetConfigurationInfo, handle, &config);
++ link->conf.Vcc = config.Vcc;
++
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++ tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
++
++ /* Look for a generic full-sized window */
++ link->io.NumPorts1 = 8;
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if ((i == CS_SUCCESS) && (cf->io.nwin == 1) && (cf->io.win[0].len > 8)) {
++ link->conf.ConfigIndex = cf->index;
++ link->io.BasePort1 = cf->io.win[0].base;
++ link->io.NumPorts1 = cf->io.win[0].len; /*yo */
++ link->io.IOAddrLines = cf->io.flags & CISTPL_IO_LINES_MASK;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ break;
++ }
++ i = next_tuple(handle, &tuple, &parse);
++ }
++
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIO, i);
++ goto failed;
++ }
++
++ i = CardServices(RequestIRQ, link->handle, &link->irq);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIRQ, i);
++ link->irq.AssignedIRQ = 0;
++ }
++
++ i = CardServices(RequestConfiguration, link->handle, &link->conf);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestConfiguration, i);
++ goto failed;
++ }
++
++ MOD_INC_USE_COUNT;
++
++ if (dtl1_open(info) != 0)
++ goto failed;
++
++ strcpy(info->node.dev_name, info->hdev.name);
++ link->dev = &info->node;
++ link->state &= ~DEV_CONFIG_PENDING;
++
++ return;
++
++cs_failed:
++ cs_error(link->handle, last_fn, last_ret);
++
++failed:
++ dtl1_release((u_long)link);
++}
++
++
++void dtl1_release(u_long arg)
++{
++ dev_link_t *link = (dev_link_t *)arg;
++ dtl1_info_t *info = link->priv;
++
++ if (link->state & DEV_PRESENT)
++ dtl1_close(info);
++
++ MOD_DEC_USE_COUNT;
++
++ link->dev = NULL;
++
++ CardServices(ReleaseConfiguration, link->handle);
++ CardServices(ReleaseIO, link->handle, &link->io);
++ CardServices(ReleaseIRQ, link->handle, &link->irq);
++
++ link->state &= ~DEV_CONFIG;
++}
++
++
++int dtl1_event(event_t event, int priority, event_callback_args_t *args)
++{
++ dev_link_t *link = args->client_data;
++ dtl1_info_t *info = link->priv;
++
++ switch (event) {
++ case CS_EVENT_CARD_REMOVAL:
++ link->state &= ~DEV_PRESENT;
++ if (link->state & DEV_CONFIG) {
++ dtl1_close(info);
++ mod_timer(&link->release, jiffies + HZ / 20);
++ }
++ break;
++ case CS_EVENT_CARD_INSERTION:
++ link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
++ dtl1_config(link);
++ break;
++ case CS_EVENT_PM_SUSPEND:
++ link->state |= DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_RESET_PHYSICAL:
++ if (link->state & DEV_CONFIG)
++ CardServices(ReleaseConfiguration, link->handle);
++ break;
++ case CS_EVENT_PM_RESUME:
++ link->state &= ~DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_CARD_RESET:
++ if (DEV_OK(link))
++ CardServices(RequestConfiguration, link->handle, &link->conf);
++ break;
++ }
++
++ return 0;
++}
++
++
++
++/* ======================== Module initialization ======================== */
++
++
++int __init init_dtl1_cs(void)
++{
++ servinfo_t serv;
++ int err;
++
++ CardServices(GetCardServicesInfo, &serv);
++ if (serv.Revision != CS_RELEASE_CODE) {
++ printk(KERN_NOTICE "dtl1_cs: Card Services release does not match!\n");
++ return -1;
++ }
++
++ err = register_pccard_driver(&dev_info, &dtl1_attach, &dtl1_detach);
++
++ return err;
++}
++
++
++void __exit exit_dtl1_cs(void)
++{
++ unregister_pccard_driver(&dev_info);
++
++ while (dev_list != NULL)
++ dtl1_detach(dev_list);
++}
++
++
++module_init(init_dtl1_cs);
++module_exit(exit_dtl1_cs);
++
++EXPORT_NO_SYMBOLS;
+diff -urN linux-2.4.18/drivers/bluetooth/hci_bcsp.c linux-2.4.18-mh15/drivers/bluetooth/hci_bcsp.c
+--- linux-2.4.18/drivers/bluetooth/hci_bcsp.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_bcsp.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,710 @@
++/*
++ BlueCore Serial Protocol (BCSP) for Linux Bluetooth stack (BlueZ).
++ Copyright 2002 by Fabrizio Gennari <fabrizio.gennari@philips.com>
++
++ Based on
++ hci_h4.c by Maxim Krasnyansky <maxk@qualcomm.com>
++ ABCSP by Carl Orsborn <cjo@csr.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_bcsp.c,v 1.2 2002/09/26 05:05:14 maxk Exp $
++ */
++
++#define VERSION "0.1"
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/version.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/fcntl.h>
++#include <linux/interrupt.h>
++#include <linux/ptrace.h>
++#include <linux/poll.h>
++
++#include <linux/slab.h>
++#include <linux/tty.h>
++#include <linux/errno.h>
++#include <linux/string.h>
++#include <linux/signal.h>
++#include <linux/ioctl.h>
++#include <linux/skbuff.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include "hci_uart.h"
++#include "hci_bcsp.h"
++
++#ifndef HCI_UART_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#undef BT_DMP
++#define BT_DMP( A... )
++#endif
++
++/* ---- BCSP CRC calculation ---- */
++
++/* Table for calculating CRC for polynomial 0x1021, LSB processed first,
++initial value 0xffff, bits shifted in reverse order. */
++
++static const u16 crc_table[] = {
++ 0x0000, 0x1081, 0x2102, 0x3183,
++ 0x4204, 0x5285, 0x6306, 0x7387,
++ 0x8408, 0x9489, 0xa50a, 0xb58b,
++ 0xc60c, 0xd68d, 0xe70e, 0xf78f
++};
++
++/* Initialise the crc calculator */
++#define BCSP_CRC_INIT(x) x = 0xffff
++
++/*
++ Update crc with next data byte
++
++ Implementation note
++ The data byte is treated as two nibbles. The crc is generated
++ in reverse, i.e., bits are fed into the register from the top.
++*/
++static void bcsp_crc_update(u16 *crc, u8 d)
++{
++ u16 reg = *crc;
++
++ reg = (reg >> 4) ^ crc_table[(reg ^ d) & 0x000f];
++ reg = (reg >> 4) ^ crc_table[(reg ^ (d >> 4)) & 0x000f];
++
++ *crc = reg;
++}
++
++/*
++ Get reverse of generated crc
++
++ Implementation note
++ The crc generator (bcsp_crc_init() and bcsp_crc_update())
++ creates a reversed crc, so it needs to be swapped back before
++ being passed on.
++*/
++static u16 bcsp_crc_reverse(u16 crc)
++{
++ u16 b, rev;
++
++ for (b = 0, rev = 0; b < 16; b++) {
++ rev = rev << 1;
++ rev |= (crc & 1);
++ crc = crc >> 1;
++ }
++ return (rev);
++}
++
++/* ---- BCSP core ---- */
++
++static void bcsp_slip_msgdelim(struct sk_buff *skb)
++{
++ const char pkt_delim = 0xc0;
++ memcpy(skb_put(skb, 1), &pkt_delim, 1);
++}
++
++static void bcsp_slip_one_byte(struct sk_buff *skb, u8 c)
++{
++ const char esc_c0[2] = { 0xdb, 0xdc };
++ const char esc_db[2] = { 0xdb, 0xdd };
++
++ switch (c) {
++ case 0xc0:
++ memcpy(skb_put(skb, 2), &esc_c0, 2);
++ break;
++ case 0xdb:
++ memcpy(skb_put(skb, 2), &esc_db, 2);
++ break;
++ default:
++ memcpy(skb_put(skb, 1), &c, 1);
++ }
++}
++
++static int bcsp_enqueue(struct hci_uart *hu, struct sk_buff *skb)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++
++ if (skb->len > 0xFFF) {
++ BT_ERR("Packet too long");
++ kfree_skb(skb);
++ return 0;
++ }
++
++ switch (skb->pkt_type) {
++ case HCI_ACLDATA_PKT:
++ case HCI_COMMAND_PKT:
++ skb_queue_tail(&bcsp->rel, skb);
++ break;
++
++ case HCI_SCODATA_PKT:
++ skb_queue_tail(&bcsp->unrel, skb);
++ break;
++
++ default:
++ BT_ERR("Unknown packet type");
++ kfree_skb(skb);
++ break;
++ }
++ return 0;
++}
++
++static struct sk_buff *bcsp_prepare_pkt(struct bcsp_struct *bcsp, u8 *data,
++ int len, int pkt_type)
++{
++ struct sk_buff *nskb;
++ u8 hdr[4], chan;
++ int rel, i;
++
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ u16 BCSP_CRC_INIT(bcsp_txmsg_crc);
++#endif
++
++ switch (pkt_type) {
++ case HCI_ACLDATA_PKT:
++ chan = 6; /* BCSP ACL channel */
++ rel = 1; /* reliable channel */
++ break;
++ case HCI_COMMAND_PKT:
++ chan = 5; /* BCSP cmd/evt channel */
++ rel = 1; /* reliable channel */
++ break;
++ case HCI_SCODATA_PKT:
++ chan = 7; /* BCSP SCO channel */
++ rel = 0; /* unreliable channel */
++ break;
++ case BCSP_LE_PKT:
++ chan = 1; /* BCSP LE channel */
++ rel = 0; /* unreliable channel */
++ break;
++ case BCSP_ACK_PKT:
++ chan = 0; /* BCSP internal channel */
++ rel = 0; /* unreliable channel */
++ break;
++ default:
++ BT_ERR("Unknown packet type");
++ return NULL;
++ }
++
++ /* Max len of packet: (original len +4(bcsp hdr) +2(crc))*2
++ (because bytes 0xc0 and 0xdb are escaped, worst case is
++ when the packet is all made of 0xc0 and 0xdb :) )
++ + 2 (0xc0 delimiters at start and end). */
++
++ nskb = alloc_skb((len + 6) * 2 + 2, GFP_ATOMIC);
++ if (!nskb)
++ return NULL;
++
++ nskb->pkt_type = pkt_type;
++
++ bcsp_slip_msgdelim(nskb);
++
++ hdr[0] = bcsp->rxseq_txack << 3;
++ bcsp->txack_req = 0;
++ BT_DBG("We request packet no %u to card", bcsp->rxseq_txack);
++
++ if (rel) {
++ hdr[0] |= 0x80 + bcsp->msgq_txseq;
++ BT_DBG("Sending packet with seqno %u", bcsp->msgq_txseq);
++ bcsp->msgq_txseq = ++(bcsp->msgq_txseq) & 0x07;
++ }
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ hdr[0] |= 0x40;
++#endif
++
++ hdr[1] = (len << 4) & 0xFF;
++ hdr[1] |= chan;
++ hdr[2] = len >> 4;
++ hdr[3] = ~(hdr[0] + hdr[1] + hdr[2]);
++
++ /* Put BCSP header */
++ for (i = 0; i < 4; i++) {
++ bcsp_slip_one_byte(nskb, hdr[i]);
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ bcsp_crc_update(&bcsp_txmsg_crc, hdr[i]);
++#endif
++ }
++
++ /* Put payload */
++ for (i = 0; i < len; i++) {
++ bcsp_slip_one_byte(nskb, data[i]);
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ bcsp_crc_update(&bcsp_txmsg_crc, data[i]);
++#endif
++ }
++
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ /* Put CRC */
++ bcsp_txmsg_crc = bcsp_crc_reverse(bcsp_txmsg_crc);
++ bcsp_slip_one_byte(nskb, (u8) ((bcsp_txmsg_crc >> 8) & 0x00ff));
++ bcsp_slip_one_byte(nskb, (u8) (bcsp_txmsg_crc & 0x00ff));
++#endif
++
++ bcsp_slip_msgdelim(nskb);
++ return nskb;
++}
++
++/* This is a rewrite of pkt_avail in ABCSP */
++static struct sk_buff *bcsp_dequeue(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp = (struct bcsp_struct *) hu->priv;
++ unsigned long flags;
++ struct sk_buff *skb;
++
++ /* First of all, check for unreliable messages in the queue,
++ since they have priority */
++
++ if ((skb = skb_dequeue(&bcsp->unrel)) != NULL) {
++ struct sk_buff *nskb = bcsp_prepare_pkt(bcsp, skb->data, skb->len, skb->pkt_type);
++ if (nskb) {
++ kfree_skb(skb);
++ return nskb;
++ } else {
++ skb_queue_head(&bcsp->unrel, skb);
++ BT_ERR("Could not dequeue pkt because alloc_skb failed");
++ }
++ }
++
++ /* Now, try to send a reliable pkt. We can only send a
++ reliable packet if the number of packets sent but not yet ack'ed
++ is < than the winsize */
++
++ spin_lock_irqsave(&bcsp->unack.lock, flags);
++
++ if (bcsp->unack.qlen < BCSP_TXWINSIZE && (skb = skb_dequeue(&bcsp->rel)) != NULL) {
++ struct sk_buff *nskb = bcsp_prepare_pkt(bcsp, skb->data, skb->len, skb->pkt_type);
++ if (nskb) {
++ __skb_queue_tail(&bcsp->unack, skb);
++ mod_timer(&bcsp->tbcsp, jiffies + HZ / 4);
++ spin_unlock_irqrestore(&bcsp->unack.lock, flags);
++ return nskb;
++ } else {
++ skb_queue_head(&bcsp->rel, skb);
++ BT_ERR("Could not dequeue pkt because alloc_skb failed");
++ }
++ }
++
++ spin_unlock_irqrestore(&bcsp->unack.lock, flags);
++
++
++ /* We could not send a reliable packet, either because there are
++ none or because there are too many unack'ed pkts. Did we receive
++ any packets we have not acknowledged yet ? */
++
++ if (bcsp->txack_req) {
++ /* if so, craft an empty ACK pkt and send it on BCSP unreliable
++ channel 0 */
++ struct sk_buff *nskb = bcsp_prepare_pkt(bcsp, NULL, 0, BCSP_ACK_PKT);
++ return nskb;
++ }
++
++ /* We have nothing to send */
++ return NULL;
++}
++
++static int bcsp_flush(struct hci_uart *hu)
++{
++ BT_DBG("hu %p", hu);
++ return 0;
++}
++
++/* Remove ack'ed packets */
++static void bcsp_pkt_cull(struct bcsp_struct *bcsp)
++{
++ unsigned long flags;
++ struct sk_buff *skb;
++ int i, pkts_to_be_removed;
++ u8 seqno;
++
++ spin_lock_irqsave(&bcsp->unack.lock, flags);
++
++ pkts_to_be_removed = bcsp->unack.qlen;
++ seqno = bcsp->msgq_txseq;
++
++ while (pkts_to_be_removed) {
++ if (bcsp->rxack == seqno)
++ break;
++ pkts_to_be_removed--;
++ seqno = (seqno - 1) & 0x07;
++ }
++
++ if (bcsp->rxack != seqno)
++ BT_ERR("Peer acked invalid packet");
++
++ BT_DBG("Removing %u pkts out of %u, up to seqno %u",
++ pkts_to_be_removed, bcsp->unack.qlen, (seqno - 1) & 0x07);
++
++ for (i = 0, skb = ((struct sk_buff *) &bcsp->unack)->next; i < pkts_to_be_removed
++ && skb != (struct sk_buff *) &bcsp->unack; i++) {
++ struct sk_buff *nskb;
++
++ nskb = skb->next;
++ __skb_unlink(skb, &bcsp->unack);
++ kfree_skb(skb);
++ skb = nskb;
++ }
++ if (bcsp->unack.qlen == 0)
++ del_timer(&bcsp->tbcsp);
++ spin_unlock_irqrestore(&bcsp->unack.lock, flags);
++
++ if (i != pkts_to_be_removed)
++ BT_ERR("Removed only %u out of %u pkts", i, pkts_to_be_removed);
++}
++
++/* Handle BCSP link-establishment packets. When we
++ detect a "sync" packet, symptom that the BT module has reset,
++ we do nothing :) (yet) */
++static void bcsp_handle_le_pkt(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++ u8 conf_pkt[4] = { 0xad, 0xef, 0xac, 0xed };
++ u8 conf_rsp_pkt[4] = { 0xde, 0xad, 0xd0, 0xd0 };
++ u8 sync_pkt[4] = { 0xda, 0xdc, 0xed, 0xed };
++
++ /* spot "conf" pkts and reply with a "conf rsp" pkt */
++ if (bcsp->rx_skb->data[1] >> 4 == 4 && bcsp->rx_skb->data[2] == 0 &&
++ !memcmp(&bcsp->rx_skb->data[4], conf_pkt, 4)) {
++ struct sk_buff *nskb = alloc_skb(4, GFP_ATOMIC);
++
++ BT_DBG("Found a LE conf pkt");
++ if (!nskb)
++ return;
++ memcpy(skb_put(nskb, 4), conf_rsp_pkt, 4);
++ nskb->pkt_type = BCSP_LE_PKT;
++
++ skb_queue_head(&bcsp->unrel, nskb);
++ hci_uart_tx_wakeup(hu);
++ }
++ /* Spot "sync" pkts. If we find one...disaster! */
++ else if (bcsp->rx_skb->data[1] >> 4 == 4 && bcsp->rx_skb->data[2] == 0 &&
++ !memcmp(&bcsp->rx_skb->data[4], sync_pkt, 4)) {
++ BT_ERR("Found a LE sync pkt, card has reset");
++ }
++}
++
++static inline void bcsp_unslip_one_byte(struct bcsp_struct *bcsp, unsigned char byte)
++{
++ const u8 c0 = 0xc0, db = 0xdb;
++
++ switch (bcsp->rx_esc_state) {
++ case BCSP_ESCSTATE_NOESC:
++ switch (byte) {
++ case 0xdb:
++ bcsp->rx_esc_state = BCSP_ESCSTATE_ESC;
++ break;
++ default:
++ memcpy(skb_put(bcsp->rx_skb, 1), &byte, 1);
++ if ((bcsp->rx_skb-> data[0] & 0x40) != 0 &&
++ bcsp->rx_state != BCSP_W4_CRC)
++ bcsp_crc_update(&bcsp->message_crc, byte);
++ bcsp->rx_count--;
++ }
++ break;
++
++ case BCSP_ESCSTATE_ESC:
++ switch (byte) {
++ case 0xdc:
++ memcpy(skb_put(bcsp->rx_skb, 1), &c0, 1);
++ if ((bcsp->rx_skb-> data[0] & 0x40) != 0 &&
++ bcsp->rx_state != BCSP_W4_CRC)
++ bcsp_crc_update(&bcsp-> message_crc, 0xc0);
++ bcsp->rx_esc_state = BCSP_ESCSTATE_NOESC;
++ bcsp->rx_count--;
++ break;
++
++ case 0xdd:
++ memcpy(skb_put(bcsp->rx_skb, 1), &db, 1);
++ if ((bcsp->rx_skb-> data[0] & 0x40) != 0 &&
++ bcsp->rx_state != BCSP_W4_CRC)
++ bcsp_crc_update(&bcsp-> message_crc, 0xdb);
++ bcsp->rx_esc_state = BCSP_ESCSTATE_NOESC;
++ bcsp->rx_count--;
++ break;
++
++ default:
++ BT_ERR ("Invalid byte %02x after esc byte", byte);
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_skb = NULL;
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ }
++ }
++}
++
++static inline void bcsp_complete_rx_pkt(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++ int pass_up;
++
++ if (bcsp->rx_skb->data[0] & 0x80) { /* reliable pkt */
++ BT_DBG("Received seqno %u from card", bcsp->rxseq_txack);
++ bcsp->rxseq_txack++;
++ bcsp->rxseq_txack %= 0x8;
++ bcsp->txack_req = 1;
++
++ /* If needed, transmit an ack pkt */
++ hci_uart_tx_wakeup(hu);
++ }
++
++ bcsp->rxack = (bcsp->rx_skb->data[0] >> 3) & 0x07;
++ BT_DBG("Request for pkt %u from card", bcsp->rxack);
++
++ bcsp_pkt_cull(bcsp);
++ if ((bcsp->rx_skb->data[1] & 0x0f) == 6 &&
++ bcsp->rx_skb->data[0] & 0x80) {
++ bcsp->rx_skb->pkt_type = HCI_ACLDATA_PKT;
++ pass_up = 1;
++ } else if ((bcsp->rx_skb->data[1] & 0x0f) == 5 &&
++ bcsp->rx_skb->data[0] & 0x80) {
++ bcsp->rx_skb->pkt_type = HCI_EVENT_PKT;
++ pass_up = 1;
++ } else if ((bcsp->rx_skb->data[1] & 0x0f) == 7) {
++ bcsp->rx_skb->pkt_type = HCI_SCODATA_PKT;
++ pass_up = 1;
++ } else if ((bcsp->rx_skb->data[1] & 0x0f) == 1 &&
++ !(bcsp->rx_skb->data[0] & 0x80)) {
++ bcsp_handle_le_pkt(hu);
++ pass_up = 0;
++ } else
++ pass_up = 0;
++
++ if (!pass_up) {
++ if ((bcsp->rx_skb->data[1] & 0x0f) != 0 &&
++ (bcsp->rx_skb->data[1] & 0x0f) != 1) {
++ BT_ERR ("Packet for unknown channel (%u %s)",
++ bcsp->rx_skb->data[1] & 0x0f,
++ bcsp->rx_skb->data[0] & 0x80 ?
++ "reliable" : "unreliable");
++ }
++ kfree_skb(bcsp->rx_skb);
++ } else {
++ /* Pull out BCSP hdr */
++ skb_pull(bcsp->rx_skb, 4);
++
++ hci_recv_frame(bcsp->rx_skb);
++ }
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_skb = NULL;
++}
++
++/* Recv data */
++static int bcsp_recv(struct hci_uart *hu, void *data, int count)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++ register unsigned char *ptr;
++
++ BT_DBG("hu %p count %d rx_state %ld rx_count %ld",
++ hu, count, bcsp->rx_state, bcsp->rx_count);
++
++ ptr = data;
++ while (count) {
++ if (bcsp->rx_count) {
++ if (*ptr == 0xc0) {
++ BT_ERR("Short BCSP packet");
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_state = BCSP_W4_PKT_START;
++ bcsp->rx_count = 0;
++ } else
++ bcsp_unslip_one_byte(bcsp, *ptr);
++
++ ptr++; count--;
++ continue;
++ }
++
++ switch (bcsp->rx_state) {
++ case BCSP_W4_BCSP_HDR:
++ if ((0xff & (u8) ~ (bcsp->rx_skb->data[0] + bcsp->rx_skb->data[1] +
++ bcsp->rx_skb->data[2])) != bcsp->rx_skb->data[3]) {
++ BT_ERR("Error in BCSP hdr checksum");
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ continue;
++ }
++ if (bcsp->rx_skb->data[0] & 0x80 /* reliable pkt */
++ && (bcsp->rx_skb->data[0] & 0x07) != bcsp->rxseq_txack) {
++ BT_ERR ("Out-of-order packet arrived, got %u expected %u",
++ bcsp->rx_skb->data[0] & 0x07, bcsp->rxseq_txack);
++
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ continue;
++ }
++ bcsp->rx_state = BCSP_W4_DATA;
++ bcsp->rx_count = (bcsp->rx_skb->data[1] >> 4) +
++ (bcsp->rx_skb->data[2] << 4); /* May be 0 */
++ continue;
++
++ case BCSP_W4_DATA:
++ if (bcsp->rx_skb->data[0] & 0x40) { /* pkt with crc */
++ bcsp->rx_state = BCSP_W4_CRC;
++ bcsp->rx_count = 2;
++ } else
++ bcsp_complete_rx_pkt(hu);
++ continue;
++
++ case BCSP_W4_CRC:
++ if (bcsp_crc_reverse(bcsp->message_crc) !=
++ (bcsp->rx_skb->data[bcsp->rx_skb->len - 2] << 8) +
++ bcsp->rx_skb->data[bcsp->rx_skb->len - 1]) {
++
++ BT_ERR ("Checksum failed: computed %04x received %04x",
++ bcsp_crc_reverse(bcsp->message_crc),
++ (bcsp->rx_skb-> data[bcsp->rx_skb->len - 2] << 8) +
++ bcsp->rx_skb->data[bcsp->rx_skb->len - 1]);
++
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ continue;
++ }
++ skb_trim(bcsp->rx_skb, bcsp->rx_skb->len - 2);
++ bcsp_complete_rx_pkt(hu);
++ continue;
++
++ case BCSP_W4_PKT_DELIMITER:
++ switch (*ptr) {
++ case 0xc0:
++ bcsp->rx_state = BCSP_W4_PKT_START;
++ break;
++ default:
++ /*BT_ERR("Ignoring byte %02x", *ptr);*/
++ break;
++ }
++ ptr++; count--;
++ break;
++
++ case BCSP_W4_PKT_START:
++ switch (*ptr) {
++ case 0xc0:
++ ptr++; count--;
++ break;
++
++ default:
++ bcsp->rx_state = BCSP_W4_BCSP_HDR;
++ bcsp->rx_count = 4;
++ bcsp->rx_esc_state = BCSP_ESCSTATE_NOESC;
++ BCSP_CRC_INIT(bcsp->message_crc);
++
++ /* Do not increment ptr or decrement count
++ * Allocate packet. Max len of a BCSP pkt=
++ * 0xFFF (payload) +4 (header) +2 (crc) */
++
++ bcsp->rx_skb = bluez_skb_alloc(0x1005, GFP_ATOMIC);
++ if (!bcsp->rx_skb) {
++ BT_ERR("Can't allocate mem for new packet");
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ return 0;
++ }
++ bcsp->rx_skb->dev = (void *) &hu->hdev;
++ break;
++ }
++ break;
++ }
++ }
++ return count;
++}
++
++ /* Arrange to retransmit all messages in the relq. */
++static void bcsp_timed_event(unsigned long arg)
++{
++ struct hci_uart *hu = (struct hci_uart *) arg;
++ struct bcsp_struct *bcsp = (struct bcsp_struct *) hu->priv;
++ struct sk_buff *skb;
++ unsigned long flags;
++
++ BT_DBG("hu %p retransmitting %u pkts", hu, bcsp->unack.qlen);
++
++ spin_lock_irqsave(&bcsp->unack.lock, flags);
++
++ while ((skb = __skb_dequeue_tail(&bcsp->unack)) != NULL) {
++ bcsp->msgq_txseq = (bcsp->msgq_txseq - 1) & 0x07;
++ skb_queue_head(&bcsp->rel, skb);
++ }
++
++ spin_unlock_irqrestore(&bcsp->unack.lock, flags);
++
++ hci_uart_tx_wakeup(hu);
++}
++
++static int bcsp_open(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp;
++
++ BT_DBG("hu %p", hu);
++
++ bcsp = kmalloc(sizeof(*bcsp), GFP_ATOMIC);
++ if (!bcsp)
++ return -ENOMEM;
++ memset(bcsp, 0, sizeof(*bcsp));
++
++ hu->priv = bcsp;
++ skb_queue_head_init(&bcsp->unack);
++ skb_queue_head_init(&bcsp->rel);
++ skb_queue_head_init(&bcsp->unrel);
++
++ init_timer(&bcsp->tbcsp);
++ bcsp->tbcsp.function = bcsp_timed_event;
++ bcsp->tbcsp.data = (u_long) hu;
++
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++
++ return 0;
++}
++
++static int bcsp_close(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++ hu->priv = NULL;
++
++ BT_DBG("hu %p", hu);
++
++ skb_queue_purge(&bcsp->unack);
++ skb_queue_purge(&bcsp->rel);
++ skb_queue_purge(&bcsp->unrel);
++ del_timer(&bcsp->tbcsp);
++
++ kfree(bcsp);
++ return 0;
++}
++
++static struct hci_uart_proto bcsp = {
++ id: HCI_UART_BCSP,
++ open: bcsp_open,
++ close: bcsp_close,
++ enqueue: bcsp_enqueue,
++ dequeue: bcsp_dequeue,
++ recv: bcsp_recv,
++ flush: bcsp_flush
++};
++
++int bcsp_init(void)
++{
++ return hci_uart_register_proto(&bcsp);
++}
++
++int bcsp_deinit(void)
++{
++ return hci_uart_unregister_proto(&bcsp);
++}
+diff -urN linux-2.4.18/drivers/bluetooth/hci_bcsp.h linux-2.4.18-mh15/drivers/bluetooth/hci_bcsp.h
+--- linux-2.4.18/drivers/bluetooth/hci_bcsp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_bcsp.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,70 @@
++/*
++ BlueCore Serial Protocol (BCSP) for Linux Bluetooth stack (BlueZ).
++ Copyright 2002 by Fabrizio Gennari <fabrizio.gennari@philips.com>
++
++ Based on
++ hci_h4.c by Maxim Krasnyansky <maxk@qualcomm.com>
++ ABCSP by Carl Orsborn <cjo@csr.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_bcsp.h,v 1.2 2002/09/26 05:05:14 maxk Exp $
++ */
++
++#ifndef __HCI_BCSP_H__
++#define __HCI_BCSP_H__
++
++#define BCSP_TXWINSIZE 4
++
++#define BCSP_ACK_PKT 0x05
++#define BCSP_LE_PKT 0x06
++
++struct bcsp_struct {
++ struct sk_buff_head unack; /* Unack'ed packets queue */
++ struct sk_buff_head rel; /* Reliable packets queue */
++ struct sk_buff_head unrel; /* Unreliable packets queue */
++
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++ u8 rxseq_txack; /* rxseq == txack. */
++ u8 rxack; /* Last packet sent by us that the peer ack'ed */
++ struct timer_list tbcsp;
++
++ enum {
++ BCSP_W4_PKT_DELIMITER,
++ BCSP_W4_PKT_START,
++ BCSP_W4_BCSP_HDR,
++ BCSP_W4_DATA,
++ BCSP_W4_CRC
++ } rx_state;
++
++ enum {
++ BCSP_ESCSTATE_NOESC,
++ BCSP_ESCSTATE_ESC
++ } rx_esc_state;
++
++ u16 message_crc;
++ u8 txack_req; /* Do we need to send ack's to the peer? */
++
++ /* Reliable packet sequence number - used to assign seq to each rel pkt. */
++ u8 msgq_txseq;
++};
++
++#endif /* __HCI_BCSP_H__ */
+diff -urN linux-2.4.18/drivers/bluetooth/hci_h4.c linux-2.4.18-mh15/drivers/bluetooth/hci_h4.c
+--- linux-2.4.18/drivers/bluetooth/hci_h4.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_h4.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,277 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * BlueZ HCI UART(H4) protocol.
++ *
++ * $Id: hci_h4.c,v 1.3 2002/09/09 01:17:32 maxk Exp $
++ */
++#define VERSION "1.2"
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/version.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/fcntl.h>
++#include <linux/interrupt.h>
++#include <linux/ptrace.h>
++#include <linux/poll.h>
++
++#include <linux/slab.h>
++#include <linux/tty.h>
++#include <linux/errno.h>
++#include <linux/string.h>
++#include <linux/signal.h>
++#include <linux/ioctl.h>
++#include <linux/skbuff.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include "hci_uart.h"
++#include "hci_h4.h"
++
++#ifndef HCI_UART_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#undef BT_DMP
++#define BT_DMP( A... )
++#endif
++
++/* Initialize protocol */
++static int h4_open(struct hci_uart *hu)
++{
++ struct h4_struct *h4;
++
++ BT_DBG("hu %p", hu);
++
++ h4 = kmalloc(sizeof(*h4), GFP_ATOMIC);
++ if (!h4)
++ return -ENOMEM;
++ memset(h4, 0, sizeof(*h4));
++
++ skb_queue_head_init(&h4->txq);
++
++ hu->priv = h4;
++ return 0;
++}
++
++/* Flush protocol data */
++static int h4_flush(struct hci_uart *hu)
++{
++ struct h4_struct *h4 = hu->priv;
++
++ BT_DBG("hu %p", hu);
++ skb_queue_purge(&h4->txq);
++ return 0;
++}
++
++/* Close protocol */
++static int h4_close(struct hci_uart *hu)
++{
++ struct h4_struct *h4 = hu->priv;
++ hu->priv = NULL;
++
++ BT_DBG("hu %p", hu);
++
++ skb_queue_purge(&h4->txq);
++ if (h4->rx_skb)
++ kfree_skb(h4->rx_skb);
++
++ hu->priv = NULL;
++ kfree(h4);
++ return 0;
++}
++
++/* Enqueue frame for transmittion (padding, crc, etc) */
++static int h4_enqueue(struct hci_uart *hu, struct sk_buff *skb)
++{
++ struct h4_struct *h4 = hu->priv;
++
++ BT_DBG("hu %p skb %p", hu, skb);
++
++ /* Prepend skb with frame type */
++ memcpy(skb_push(skb, 1), &skb->pkt_type, 1);
++ skb_queue_tail(&h4->txq, skb);
++ return 0;
++}
++
++static inline int h4_check_data_len(struct h4_struct *h4, int len)
++{
++ register int room = skb_tailroom(h4->rx_skb);
++
++ BT_DBG("len %d room %d", len, room);
++ if (!len) {
++ BT_DMP(h4->rx_skb->data, h4->rx_skb->len);
++ hci_recv_frame(h4->rx_skb);
++ } else if (len > room) {
++ BT_ERR("Data length is too large");
++ kfree_skb(h4->rx_skb);
++ } else {
++ h4->rx_state = H4_W4_DATA;
++ h4->rx_count = len;
++ return len;
++ }
++
++ h4->rx_state = H4_W4_PACKET_TYPE;
++ h4->rx_skb = NULL;
++ h4->rx_count = 0;
++ return 0;
++}
++
++/* Recv data */
++static int h4_recv(struct hci_uart *hu, void *data, int count)
++{
++ struct h4_struct *h4 = hu->priv;
++ register char *ptr;
++ hci_event_hdr *eh;
++ hci_acl_hdr *ah;
++ hci_sco_hdr *sh;
++ register int len, type, dlen;
++
++ BT_DBG("hu %p count %d rx_state %ld rx_count %ld",
++ hu, count, h4->rx_state, h4->rx_count);
++
++ ptr = data;
++ while (count) {
++ if (h4->rx_count) {
++ len = MIN(h4->rx_count, count);
++ memcpy(skb_put(h4->rx_skb, len), ptr, len);
++ h4->rx_count -= len; count -= len; ptr += len;
++
++ if (h4->rx_count)
++ continue;
++
++ switch (h4->rx_state) {
++ case H4_W4_DATA:
++ BT_DBG("Complete data");
++
++ BT_DMP(h4->rx_skb->data, h4->rx_skb->len);
++
++ hci_recv_frame(h4->rx_skb);
++
++ h4->rx_state = H4_W4_PACKET_TYPE;
++ h4->rx_skb = NULL;
++ continue;
++
++ case H4_W4_EVENT_HDR:
++ eh = (hci_event_hdr *) h4->rx_skb->data;
++
++ BT_DBG("Event header: evt 0x%2.2x plen %d", eh->evt, eh->plen);
++
++ h4_check_data_len(h4, eh->plen);
++ continue;
++
++ case H4_W4_ACL_HDR:
++ ah = (hci_acl_hdr *) h4->rx_skb->data;
++ dlen = __le16_to_cpu(ah->dlen);
++
++ BT_DBG("ACL header: dlen %d", dlen);
++
++ h4_check_data_len(h4, dlen);
++ continue;
++
++ case H4_W4_SCO_HDR:
++ sh = (hci_sco_hdr *) h4->rx_skb->data;
++
++ BT_DBG("SCO header: dlen %d", sh->dlen);
++
++ h4_check_data_len(h4, sh->dlen);
++ continue;
++ }
++ }
++
++ /* H4_W4_PACKET_TYPE */
++ switch (*ptr) {
++ case HCI_EVENT_PKT:
++ BT_DBG("Event packet");
++ h4->rx_state = H4_W4_EVENT_HDR;
++ h4->rx_count = HCI_EVENT_HDR_SIZE;
++ type = HCI_EVENT_PKT;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ BT_DBG("ACL packet");
++ h4->rx_state = H4_W4_ACL_HDR;
++ h4->rx_count = HCI_ACL_HDR_SIZE;
++ type = HCI_ACLDATA_PKT;
++ break;
++
++ case HCI_SCODATA_PKT:
++ BT_DBG("SCO packet");
++ h4->rx_state = H4_W4_SCO_HDR;
++ h4->rx_count = HCI_SCO_HDR_SIZE;
++ type = HCI_SCODATA_PKT;
++ break;
++
++ default:
++ BT_ERR("Unknown HCI packet type %2.2x", (__u8)*ptr);
++ hu->hdev.stat.err_rx++;
++ ptr++; count--;
++ continue;
++ };
++ ptr++; count--;
++
++ /* Allocate packet */
++ h4->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC);
++ if (!h4->rx_skb) {
++ BT_ERR("Can't allocate mem for new packet");
++ h4->rx_state = H4_W4_PACKET_TYPE;
++ h4->rx_count = 0;
++ return 0;
++ }
++ h4->rx_skb->dev = (void *) &hu->hdev;
++ h4->rx_skb->pkt_type = type;
++ }
++ return count;
++}
++
++static struct sk_buff *h4_dequeue(struct hci_uart *hu)
++{
++ struct h4_struct *h4 = hu->priv;
++ return skb_dequeue(&h4->txq);
++}
++
++static struct hci_uart_proto h4p = {
++ id: HCI_UART_H4,
++ open: h4_open,
++ close: h4_close,
++ recv: h4_recv,
++ enqueue: h4_enqueue,
++ dequeue: h4_dequeue,
++ flush: h4_flush,
++};
++
++int h4_init(void)
++{
++ return hci_uart_register_proto(&h4p);
++}
++
++int h4_deinit(void)
++{
++ return hci_uart_unregister_proto(&h4p);
++}
+diff -urN linux-2.4.18/drivers/bluetooth/hci_h4.h linux-2.4.18-mh15/drivers/bluetooth/hci_h4.h
+--- linux-2.4.18/drivers/bluetooth/hci_h4.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_h4.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,44 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_h4.h,v 1.2 2002/09/09 01:17:32 maxk Exp $
++ */
++
++#ifdef __KERNEL__
++struct h4_struct {
++ unsigned long rx_state;
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++ struct sk_buff_head txq;
++};
++
++/* H4 receiver States */
++#define H4_W4_PACKET_TYPE 0
++#define H4_W4_EVENT_HDR 1
++#define H4_W4_ACL_HDR 2
++#define H4_W4_SCO_HDR 3
++#define H4_W4_DATA 4
++
++#endif /* __KERNEL__ */
+diff -urN linux-2.4.18/drivers/bluetooth/hci_ldisc.c linux-2.4.18-mh15/drivers/bluetooth/hci_ldisc.c
+--- linux-2.4.18/drivers/bluetooth/hci_ldisc.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_ldisc.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,579 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * BlueZ HCI UART driver.
++ *
++ * $Id: hci_ldisc.c,v 1.5 2002/10/02 18:37:20 maxk Exp $
++ */
++#define VERSION "2.1"
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/version.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/fcntl.h>
++#include <linux/interrupt.h>
++#include <linux/ptrace.h>
++#include <linux/poll.h>
++
++#include <linux/slab.h>
++#include <linux/tty.h>
++#include <linux/errno.h>
++#include <linux/string.h>
++#include <linux/signal.h>
++#include <linux/ioctl.h>
++#include <linux/skbuff.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include "hci_uart.h"
++
++#ifndef HCI_UART_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#undef BT_DMP
++#define BT_DMP( A... )
++#endif
++
++static struct hci_uart_proto *hup[HCI_UART_MAX_PROTO];
++
++int hci_uart_register_proto(struct hci_uart_proto *p)
++{
++ if (p->id >= HCI_UART_MAX_PROTO)
++ return -EINVAL;
++
++ if (hup[p->id])
++ return -EEXIST;
++
++ hup[p->id] = p;
++ return 0;
++}
++
++int hci_uart_unregister_proto(struct hci_uart_proto *p)
++{
++ if (p->id >= HCI_UART_MAX_PROTO)
++ return -EINVAL;
++
++ if (!hup[p->id])
++ return -EINVAL;
++
++ hup[p->id] = NULL;
++ return 0;
++}
++
++static struct hci_uart_proto *hci_uart_get_proto(unsigned int id)
++{
++ if (id >= HCI_UART_MAX_PROTO)
++ return NULL;
++ return hup[id];
++}
++
++static inline void hci_uart_tx_complete(struct hci_uart *hu, int pkt_type)
++{
++ struct hci_dev *hdev = &hu->hdev;
++
++ /* Update HCI stat counters */
++ switch (pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++
++ case HCI_SCODATA_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ }
++}
++
++static inline struct sk_buff *hci_uart_dequeue(struct hci_uart *hu)
++{
++ struct sk_buff *skb = hu->tx_skb;
++ if (!skb)
++ skb = hu->proto->dequeue(hu);
++ else
++ hu->tx_skb = NULL;
++ return skb;
++}
++
++int hci_uart_tx_wakeup(struct hci_uart *hu)
++{
++ struct tty_struct *tty = hu->tty;
++ struct hci_dev *hdev = &hu->hdev;
++ struct sk_buff *skb;
++
++ if (test_and_set_bit(HCI_UART_SENDING, &hu->tx_state)) {
++ set_bit(HCI_UART_TX_WAKEUP, &hu->tx_state);
++ return 0;
++ }
++
++ BT_DBG("");
++
++restart:
++ clear_bit(HCI_UART_TX_WAKEUP, &hu->tx_state);
++
++ while ((skb = hci_uart_dequeue(hu))) {
++ int len;
++
++ set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
++ len = tty->driver.write(tty, 0, skb->data, skb->len);
++ hdev->stat.byte_tx += len;
++
++ skb_pull(skb, len);
++ if (skb->len) {
++ hu->tx_skb = skb;
++ break;
++ }
++
++ hci_uart_tx_complete(hu, skb->pkt_type);
++ kfree_skb(skb);
++ }
++
++ if (test_bit(HCI_UART_TX_WAKEUP, &hu->tx_state))
++ goto restart;
++
++ clear_bit(HCI_UART_SENDING, &hu->tx_state);
++ return 0;
++}
++
++/* ------- Interface to HCI layer ------ */
++/* Initialize device */
++static int hci_uart_open(struct hci_dev *hdev)
++{
++ BT_DBG("%s %p", hdev->name, hdev);
++
++ /* Nothing to do for UART driver */
++
++ set_bit(HCI_RUNNING, &hdev->flags);
++ return 0;
++}
++
++/* Reset device */
++static int hci_uart_flush(struct hci_dev *hdev)
++{
++ struct hci_uart *hu = (struct hci_uart *) hdev->driver_data;
++ struct tty_struct *tty = hu->tty;
++
++ BT_DBG("hdev %p tty %p", hdev, tty);
++
++ if (hu->tx_skb) {
++ kfree_skb(hu->tx_skb); hu->tx_skb = NULL;
++ }
++
++ /* Flush any pending characters in the driver and discipline. */
++ if (tty->ldisc.flush_buffer)
++ tty->ldisc.flush_buffer(tty);
++
++ if (tty->driver.flush_buffer)
++ tty->driver.flush_buffer(tty);
++
++ if (test_bit(HCI_UART_PROTO_SET, &hu->flags))
++ hu->proto->flush(hu);
++
++ return 0;
++}
++
++/* Close device */
++static int hci_uart_close(struct hci_dev *hdev)
++{
++ BT_DBG("hdev %p", hdev);
++
++ if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
++
++ hci_uart_flush(hdev);
++ return 0;
++}
++
++/* Send frames from HCI layer */
++static int hci_uart_send_frame(struct sk_buff *skb)
++{
++ struct hci_dev* hdev = (struct hci_dev *) skb->dev;
++ struct tty_struct *tty;
++ struct hci_uart *hu;
++
++ if (!hdev) {
++ BT_ERR("Frame for uknown device (hdev=NULL)");
++ return -ENODEV;
++ }
++
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
++ return -EBUSY;
++
++ hu = (struct hci_uart *) hdev->driver_data;
++ tty = hu->tty;
++
++ BT_DBG("%s: type %d len %d", hdev->name, skb->pkt_type, skb->len);
++
++ hu->proto->enqueue(hu, skb);
++
++ hci_uart_tx_wakeup(hu);
++ return 0;
++}
++
++static void hci_uart_destruct(struct hci_dev *hdev)
++{
++ struct hci_uart *hu;
++
++ if (!hdev) return;
++
++ BT_DBG("%s", hdev->name);
++
++ hu = (struct hci_uart *) hdev->driver_data;
++ kfree(hu);
++
++ MOD_DEC_USE_COUNT;
++}
++
++/* ------ LDISC part ------ */
++/* hci_uart_tty_open
++ *
++ * Called when line discipline changed to HCI_UART.
++ *
++ * Arguments:
++ * tty pointer to tty info structure
++ * Return Value:
++ * 0 if success, otherwise error code
++ */
++static int hci_uart_tty_open(struct tty_struct *tty)
++{
++ struct hci_uart *hu = (void *) tty->disc_data;
++
++ BT_DBG("tty %p", tty);
++
++ if (hu)
++ return -EEXIST;
++
++ if (!(hu = kmalloc(sizeof(struct hci_uart), GFP_KERNEL))) {
++ BT_ERR("Can't allocate controll structure");
++ return -ENFILE;
++ }
++ memset(hu, 0, sizeof(struct hci_uart));
++
++ tty->disc_data = hu;
++ hu->tty = tty;
++
++ spin_lock_init(&hu->rx_lock);
++
++ /* Flush any pending characters in the driver and line discipline */
++ if (tty->ldisc.flush_buffer)
++ tty->ldisc.flush_buffer(tty);
++
++ if (tty->driver.flush_buffer)
++ tty->driver.flush_buffer(tty);
++
++ MOD_INC_USE_COUNT;
++ return 0;
++}
++
++/* hci_uart_tty_close()
++ *
++ * Called when the line discipline is changed to something
++ * else, the tty is closed, or the tty detects a hangup.
++ */
++static void hci_uart_tty_close(struct tty_struct *tty)
++{
++ struct hci_uart *hu = (void *)tty->disc_data;
++
++ BT_DBG("tty %p", tty);
++
++ /* Detach from the tty */
++ tty->disc_data = NULL;
++
++ if (hu) {
++ struct hci_dev *hdev = &hu->hdev;
++ hci_uart_close(hdev);
++
++ if (test_and_clear_bit(HCI_UART_PROTO_SET, &hu->flags)) {
++ hu->proto->close(hu);
++ hci_unregister_dev(hdev);
++ }
++
++ MOD_DEC_USE_COUNT;
++ }
++}
++
++/* hci_uart_tty_wakeup()
++ *
++ * Callback for transmit wakeup. Called when low level
++ * device driver can accept more send data.
++ *
++ * Arguments: tty pointer to associated tty instance data
++ * Return Value: None
++ */
++static void hci_uart_tty_wakeup(struct tty_struct *tty)
++{
++ struct hci_uart *hu = (void *)tty->disc_data;
++
++ BT_DBG("");
++
++ if (!hu)
++ return;
++
++ clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
++
++ if (tty != hu->tty)
++ return;
++
++ if (test_bit(HCI_UART_PROTO_SET, &hu->flags))
++ hci_uart_tx_wakeup(hu);
++}
++
++/* hci_uart_tty_room()
++ *
++ * Callback function from tty driver. Return the amount of
++ * space left in the receiver's buffer to decide if remote
++ * transmitter is to be throttled.
++ *
++ * Arguments: tty pointer to associated tty instance data
++ * Return Value: number of bytes left in receive buffer
++ */
++static int hci_uart_tty_room (struct tty_struct *tty)
++{
++ return 65536;
++}
++
++/* hci_uart_tty_receive()
++ *
++ * Called by tty low level driver when receive data is
++ * available.
++ *
++ * Arguments: tty pointer to tty isntance data
++ * data pointer to received data
++ * flags pointer to flags for data
++ * count count of received data in bytes
++ *
++ * Return Value: None
++ */
++static void hci_uart_tty_receive(struct tty_struct *tty, const __u8 *data, char *flags, int count)
++{
++ struct hci_uart *hu = (void *)tty->disc_data;
++
++ if (!hu || tty != hu->tty)
++ return;
++
++ if (!test_bit(HCI_UART_PROTO_SET, &hu->flags))
++ return;
++
++ spin_lock(&hu->rx_lock);
++ hu->proto->recv(hu, (void *) data, count);
++ hu->hdev.stat.byte_rx += count;
++ spin_unlock(&hu->rx_lock);
++
++ if (test_and_clear_bit(TTY_THROTTLED,&tty->flags) && tty->driver.unthrottle)
++ tty->driver.unthrottle(tty);
++}
++
++static int hci_uart_register_dev(struct hci_uart *hu)
++{
++ struct hci_dev *hdev;
++
++ BT_DBG("");
++
++ /* Initialize and register HCI device */
++ hdev = &hu->hdev;
++
++ hdev->type = HCI_UART;
++ hdev->driver_data = hu;
++
++ hdev->open = hci_uart_open;
++ hdev->close = hci_uart_close;
++ hdev->flush = hci_uart_flush;
++ hdev->send = hci_uart_send_frame;
++ hdev->destruct = hci_uart_destruct;
++
++ if (hci_register_dev(hdev) < 0) {
++ BT_ERR("Can't register HCI device %s", hdev->name);
++ return -ENODEV;
++ }
++ MOD_INC_USE_COUNT;
++ return 0;
++}
++
++static int hci_uart_set_proto(struct hci_uart *hu, int id)
++{
++ struct hci_uart_proto *p;
++ int err;
++
++ p = hci_uart_get_proto(id);
++ if (!p)
++ return -EPROTONOSUPPORT;
++
++ err = p->open(hu);
++ if (err)
++ return err;
++
++ hu->proto = p;
++
++ err = hci_uart_register_dev(hu);
++ if (err) {
++ p->close(hu);
++ return err;
++ }
++ return 0;
++}
++
++/* hci_uart_tty_ioctl()
++ *
++ * Process IOCTL system call for the tty device.
++ *
++ * Arguments:
++ *
++ * tty pointer to tty instance data
++ * file pointer to open file object for device
++ * cmd IOCTL command code
++ * arg argument for IOCTL call (cmd dependent)
++ *
++ * Return Value: Command dependent
++ */
++static int hci_uart_tty_ioctl(struct tty_struct *tty, struct file * file,
++ unsigned int cmd, unsigned long arg)
++{
++ struct hci_uart *hu = (void *)tty->disc_data;
++ int err = 0;
++
++ BT_DBG("");
++
++ /* Verify the status of the device */
++ if (!hu)
++ return -EBADF;
++
++ switch (cmd) {
++ case HCIUARTSETPROTO:
++ if (!test_and_set_bit(HCI_UART_PROTO_SET, &hu->flags)) {
++ err = hci_uart_set_proto(hu, arg);
++ if (err) {
++ clear_bit(HCI_UART_PROTO_SET, &hu->flags);
++ return err;
++ }
++ tty->low_latency = 1;
++ } else
++ return -EBUSY;
++
++ case HCIUARTGETPROTO:
++ if (test_bit(HCI_UART_PROTO_SET, &hu->flags))
++ return hu->proto->id;
++ return -EUNATCH;
++
++ default:
++ err = n_tty_ioctl(tty, file, cmd, arg);
++ break;
++ };
++
++ return err;
++}
++
++/*
++ * We don't provide read/write/poll interface for user space.
++ */
++static ssize_t hci_uart_tty_read(struct tty_struct *tty, struct file *file, unsigned char *buf, size_t nr)
++{
++ return 0;
++}
++static ssize_t hci_uart_tty_write(struct tty_struct *tty, struct file *file, const unsigned char *data, size_t count)
++{
++ return 0;
++}
++static unsigned int hci_uart_tty_poll(struct tty_struct *tty, struct file *filp, poll_table *wait)
++{
++ return 0;
++}
++
++#ifdef CONFIG_BLUEZ_HCIUART_H4
++int h4_init(void);
++int h4_deinit(void);
++#endif
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP
++int bcsp_init(void);
++int bcsp_deinit(void);
++#endif
++
++int __init hci_uart_init(void)
++{
++ static struct tty_ldisc hci_uart_ldisc;
++ int err;
++
++ BT_INFO("BlueZ HCI UART driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
++ VERSION);
++ BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
++
++ /* Register the tty discipline */
++
++ memset(&hci_uart_ldisc, 0, sizeof (hci_uart_ldisc));
++ hci_uart_ldisc.magic = TTY_LDISC_MAGIC;
++ hci_uart_ldisc.name = "n_hci";
++ hci_uart_ldisc.open = hci_uart_tty_open;
++ hci_uart_ldisc.close = hci_uart_tty_close;
++ hci_uart_ldisc.read = hci_uart_tty_read;
++ hci_uart_ldisc.write = hci_uart_tty_write;
++ hci_uart_ldisc.ioctl = hci_uart_tty_ioctl;
++ hci_uart_ldisc.poll = hci_uart_tty_poll;
++ hci_uart_ldisc.receive_room= hci_uart_tty_room;
++ hci_uart_ldisc.receive_buf = hci_uart_tty_receive;
++ hci_uart_ldisc.write_wakeup= hci_uart_tty_wakeup;
++
++ if ((err = tty_register_ldisc(N_HCI, &hci_uart_ldisc))) {
++ BT_ERR("Can't register HCI line discipline (%d)", err);
++ return err;
++ }
++
++#ifdef CONFIG_BLUEZ_HCIUART_H4
++ h4_init();
++#endif
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP
++ bcsp_init();
++#endif
++
++ return 0;
++}
++
++void hci_uart_cleanup(void)
++{
++ int err;
++
++#ifdef CONFIG_BLUEZ_HCIUART_H4
++ h4_deinit();
++#endif
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP
++ bcsp_deinit();
++#endif
++
++ /* Release tty registration of line discipline */
++ if ((err = tty_register_ldisc(N_HCI, NULL)))
++ BT_ERR("Can't unregister HCI line discipline (%d)", err);
++}
++
++module_init(hci_uart_init);
++module_exit(hci_uart_cleanup);
++
++MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
++MODULE_DESCRIPTION("BlueZ HCI UART driver ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/drivers/bluetooth/hci_uart.c linux-2.4.18-mh15/drivers/bluetooth/hci_uart.c
+--- linux-2.4.18/drivers/bluetooth/hci_uart.c 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_uart.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,580 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * BlueZ HCI UART driver.
+- *
+- * $Id: hci_uart.c,v 1.5 2001/07/05 18:42:44 maxk Exp $
+- */
+-#define VERSION "1.0"
+-
+-#include <linux/config.h>
+-#include <linux/module.h>
+-
+-#include <linux/version.h>
+-#include <linux/config.h>
+-#include <linux/kernel.h>
+-#include <linux/init.h>
+-#include <linux/sched.h>
+-#include <linux/types.h>
+-#include <linux/fcntl.h>
+-#include <linux/interrupt.h>
+-#include <linux/ptrace.h>
+-#include <linux/poll.h>
+-
+-#include <linux/slab.h>
+-#include <linux/tty.h>
+-#include <linux/errno.h>
+-#include <linux/string.h>
+-#include <linux/signal.h>
+-#include <linux/ioctl.h>
+-#include <linux/skbuff.h>
+-
+-#include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+-#include <net/bluetooth/hci_core.h>
+-#include <net/bluetooth/hci_uart.h>
+-
+-#ifndef HCI_UART_DEBUG
+-#undef DBG
+-#define DBG( A... )
+-#undef DMP
+-#define DMP( A... )
+-#endif
+-
+-/* ------- Interface to HCI layer ------ */
+-/* Initialize device */
+-int n_hci_open(struct hci_dev *hdev)
+-{
+- DBG("%s %p", hdev->name, hdev);
+-
+- /* Nothing to do for UART driver */
+-
+- hdev->flags |= HCI_RUNNING;
+-
+- return 0;
+-}
+-
+-/* Reset device */
+-int n_hci_flush(struct hci_dev *hdev)
+-{
+- struct n_hci *n_hci = (struct n_hci *) hdev->driver_data;
+- struct tty_struct *tty = n_hci->tty;
+-
+- DBG("hdev %p tty %p", hdev, tty);
+-
+- /* Drop TX queue */
+- skb_queue_purge(&n_hci->txq);
+-
+- /* Flush any pending characters in the driver and discipline. */
+- if (tty->ldisc.flush_buffer)
+- tty->ldisc.flush_buffer(tty);
+-
+- if (tty->driver.flush_buffer)
+- tty->driver.flush_buffer(tty);
+-
+- return 0;
+-}
+-
+-/* Close device */
+-int n_hci_close(struct hci_dev *hdev)
+-{
+- DBG("hdev %p", hdev);
+-
+- hdev->flags &= ~HCI_RUNNING;
+-
+- n_hci_flush(hdev);
+-
+- return 0;
+-}
+-
+-int n_hci_tx_wakeup(struct n_hci *n_hci)
+-{
+- register struct tty_struct *tty = n_hci->tty;
+-
+- if (test_and_set_bit(TRANS_SENDING, &n_hci->tx_state)) {
+- set_bit(TRANS_WAKEUP, &n_hci->tx_state);
+- return 0;
+- }
+-
+- DBG("");
+- do {
+- register struct sk_buff *skb;
+- register int len;
+-
+- clear_bit(TRANS_WAKEUP, &n_hci->tx_state);
+-
+- if (!(skb = skb_dequeue(&n_hci->txq)))
+- break;
+-
+- DMP(skb->data, skb->len);
+-
+- /* Send frame to TTY driver */
+- tty->flags |= (1 << TTY_DO_WRITE_WAKEUP);
+- len = tty->driver.write(tty, 0, skb->data, skb->len);
+-
+- n_hci->hdev.stat.byte_tx += len;
+-
+- DBG("sent %d", len);
+-
+- if (len == skb->len) {
+- /* Full frame was sent */
+- kfree_skb(skb);
+- } else {
+- /* Subtract sent part and requeue */
+- skb_pull(skb, len);
+- skb_queue_head(&n_hci->txq, skb);
+- }
+- } while (test_bit(TRANS_WAKEUP, &n_hci->tx_state));
+- clear_bit(TRANS_SENDING, &n_hci->tx_state);
+-
+- return 0;
+-}
+-
+-/* Send frames from HCI layer */
+-int n_hci_send_frame(struct sk_buff *skb)
+-{
+- struct hci_dev* hdev = (struct hci_dev *) skb->dev;
+- struct tty_struct *tty;
+- struct n_hci *n_hci;
+-
+- if (!hdev) {
+- ERR("Frame for uknown device (hdev=NULL)");
+- return -ENODEV;
+- }
+-
+- if (!(hdev->flags & HCI_RUNNING))
+- return -EBUSY;
+-
+- n_hci = (struct n_hci *) hdev->driver_data;
+- tty = n_hci2tty(n_hci);
+-
+- DBG("%s: type %d len %d", hdev->name, skb->pkt_type, skb->len);
+-
+- switch (skb->pkt_type) {
+- case HCI_COMMAND_PKT:
+- hdev->stat.cmd_tx++;
+- break;
+-
+- case HCI_ACLDATA_PKT:
+- hdev->stat.acl_tx++;
+- break;
+-
+- case HCI_SCODATA_PKT:
+- hdev->stat.cmd_tx++;
+- break;
+- };
+-
+- /* Prepend skb with frame type and queue */
+- memcpy(skb_push(skb, 1), &skb->pkt_type, 1);
+- skb_queue_tail(&n_hci->txq, skb);
+-
+- n_hci_tx_wakeup(n_hci);
+-
+- return 0;
+-}
+-
+-/* ------ LDISC part ------ */
+-
+-/* n_hci_tty_open
+- *
+- * Called when line discipline changed to N_HCI.
+- *
+- * Arguments:
+- * tty pointer to tty info structure
+- * Return Value:
+- * 0 if success, otherwise error code
+- */
+-static int n_hci_tty_open(struct tty_struct *tty)
+-{
+- struct n_hci *n_hci = tty2n_hci(tty);
+- struct hci_dev *hdev;
+-
+- DBG("tty %p", tty);
+-
+- if (n_hci)
+- return -EEXIST;
+-
+- if (!(n_hci = kmalloc(sizeof(struct n_hci), GFP_KERNEL))) {
+- ERR("Can't allocate controll structure");
+- return -ENFILE;
+- }
+- memset(n_hci, 0, sizeof(struct n_hci));
+-
+- /* Initialize and register HCI device */
+- hdev = &n_hci->hdev;
+-
+- hdev->type = HCI_UART;
+- hdev->driver_data = n_hci;
+-
+- hdev->open = n_hci_open;
+- hdev->close = n_hci_close;
+- hdev->flush = n_hci_flush;
+- hdev->send = n_hci_send_frame;
+-
+- if (hci_register_dev(hdev) < 0) {
+- ERR("Can't register HCI device %s", hdev->name);
+- kfree(n_hci);
+- return -ENODEV;
+- }
+-
+- tty->disc_data = n_hci;
+- n_hci->tty = tty;
+-
+- spin_lock_init(&n_hci->rx_lock);
+- n_hci->rx_state = WAIT_PACKET_TYPE;
+-
+- skb_queue_head_init(&n_hci->txq);
+-
+- MOD_INC_USE_COUNT;
+-
+- /* Flush any pending characters in the driver and discipline. */
+- if (tty->ldisc.flush_buffer)
+- tty->ldisc.flush_buffer(tty);
+-
+- if (tty->driver.flush_buffer)
+- tty->driver.flush_buffer(tty);
+-
+- return 0;
+-}
+-
+-/* n_hci_tty_close()
+- *
+- * Called when the line discipline is changed to something
+- * else, the tty is closed, or the tty detects a hangup.
+- */
+-static void n_hci_tty_close(struct tty_struct *tty)
+-{
+- struct n_hci *n_hci = tty2n_hci(tty);
+- struct hci_dev *hdev = &n_hci->hdev;
+-
+- DBG("tty %p hdev %p", tty, hdev);
+-
+- if (n_hci != NULL) {
+- n_hci_close(hdev);
+-
+- if (hci_unregister_dev(hdev) < 0) {
+- ERR("Can't unregister HCI device %s",hdev->name);
+- }
+-
+- hdev->driver_data = NULL;
+- tty->disc_data = NULL;
+- kfree(n_hci);
+-
+- MOD_DEC_USE_COUNT;
+- }
+-}
+-
+-/* n_hci_tty_wakeup()
+- *
+- * Callback for transmit wakeup. Called when low level
+- * device driver can accept more send data.
+- *
+- * Arguments: tty pointer to associated tty instance data
+- * Return Value: None
+- */
+-static void n_hci_tty_wakeup( struct tty_struct *tty )
+-{
+- struct n_hci *n_hci = tty2n_hci(tty);
+-
+- DBG("");
+-
+- if (!n_hci)
+- return;
+-
+- tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP);
+-
+- if (tty != n_hci->tty)
+- return;
+-
+- n_hci_tx_wakeup(n_hci);
+-}
+-
+-/* n_hci_tty_room()
+- *
+- * Callback function from tty driver. Return the amount of
+- * space left in the receiver's buffer to decide if remote
+- * transmitter is to be throttled.
+- *
+- * Arguments: tty pointer to associated tty instance data
+- * Return Value: number of bytes left in receive buffer
+- */
+-static int n_hci_tty_room (struct tty_struct *tty)
+-{
+- return 65536;
+-}
+-
+-static inline int n_hci_check_data_len(struct n_hci *n_hci, int len)
+-{
+- register int room = skb_tailroom(n_hci->rx_skb);
+-
+- DBG("len %d room %d", len, room);
+- if (!len) {
+- DMP(n_hci->rx_skb->data, n_hci->rx_skb->len);
+- hci_recv_frame(n_hci->rx_skb);
+- } else if (len > room) {
+- ERR("Data length is to large");
+- kfree_skb(n_hci->rx_skb);
+- n_hci->hdev.stat.err_rx++;
+- } else {
+- n_hci->rx_state = WAIT_DATA;
+- n_hci->rx_count = len;
+- return len;
+- }
+-
+- n_hci->rx_state = WAIT_PACKET_TYPE;
+- n_hci->rx_skb = NULL;
+- n_hci->rx_count = 0;
+- return 0;
+-}
+-
+-static inline void n_hci_rx(struct n_hci *n_hci, const __u8 * data, char *flags, int count)
+-{
+- register const char *ptr;
+- hci_event_hdr *eh;
+- hci_acl_hdr *ah;
+- hci_sco_hdr *sh;
+- register int len, type, dlen;
+-
+- DBG("count %d state %ld rx_count %ld", count, n_hci->rx_state, n_hci->rx_count);
+-
+- n_hci->hdev.stat.byte_rx += count;
+-
+- ptr = data;
+- while (count) {
+- if (n_hci->rx_count) {
+- len = MIN(n_hci->rx_count, count);
+- memcpy(skb_put(n_hci->rx_skb, len), ptr, len);
+- n_hci->rx_count -= len; count -= len; ptr += len;
+-
+- if (n_hci->rx_count)
+- continue;
+-
+- switch (n_hci->rx_state) {
+- case WAIT_DATA:
+- DBG("Complete data");
+-
+- DMP(n_hci->rx_skb->data, n_hci->rx_skb->len);
+-
+- hci_recv_frame(n_hci->rx_skb);
+-
+- n_hci->rx_state = WAIT_PACKET_TYPE;
+- n_hci->rx_skb = NULL;
+- continue;
+-
+- case WAIT_EVENT_HDR:
+- eh = (hci_event_hdr *) n_hci->rx_skb->data;
+-
+- DBG("Event header: evt 0x%2.2x plen %d", eh->evt, eh->plen);
+-
+- n_hci_check_data_len(n_hci, eh->plen);
+- continue;
+-
+- case WAIT_ACL_HDR:
+- ah = (hci_acl_hdr *) n_hci->rx_skb->data;
+- dlen = __le16_to_cpu(ah->dlen);
+-
+- DBG("ACL header: dlen %d", dlen);
+-
+- n_hci_check_data_len(n_hci, dlen);
+- continue;
+-
+- case WAIT_SCO_HDR:
+- sh = (hci_sco_hdr *) n_hci->rx_skb->data;
+-
+- DBG("SCO header: dlen %d", sh->dlen);
+-
+- n_hci_check_data_len(n_hci, sh->dlen);
+- continue;
+- };
+- }
+-
+- /* WAIT_PACKET_TYPE */
+- switch (*ptr) {
+- case HCI_EVENT_PKT:
+- DBG("Event packet");
+- n_hci->rx_state = WAIT_EVENT_HDR;
+- n_hci->rx_count = HCI_EVENT_HDR_SIZE;
+- type = HCI_EVENT_PKT;
+- break;
+-
+- case HCI_ACLDATA_PKT:
+- DBG("ACL packet");
+- n_hci->rx_state = WAIT_ACL_HDR;
+- n_hci->rx_count = HCI_ACL_HDR_SIZE;
+- type = HCI_ACLDATA_PKT;
+- break;
+-
+- case HCI_SCODATA_PKT:
+- DBG("SCO packet");
+- n_hci->rx_state = WAIT_SCO_HDR;
+- n_hci->rx_count = HCI_SCO_HDR_SIZE;
+- type = HCI_SCODATA_PKT;
+- break;
+-
+- default:
+- ERR("Unknown HCI packet type %2.2x", (__u8)*ptr);
+- n_hci->hdev.stat.err_rx++;
+- ptr++; count--;
+- continue;
+- };
+- ptr++; count--;
+-
+- /* Allocate packet */
+- if (!(n_hci->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
+- ERR("Can't allocate mem for new packet");
+-
+- n_hci->rx_state = WAIT_PACKET_TYPE;
+- n_hci->rx_count = 0;
+- return;
+- }
+- n_hci->rx_skb->dev = (void *) &n_hci->hdev;
+- n_hci->rx_skb->pkt_type = type;
+- }
+-}
+-
+-/* n_hci_tty_receive()
+- *
+- * Called by tty low level driver when receive data is
+- * available.
+- *
+- * Arguments: tty pointer to tty isntance data
+- * data pointer to received data
+- * flags pointer to flags for data
+- * count count of received data in bytes
+- *
+- * Return Value: None
+- */
+-static void n_hci_tty_receive(struct tty_struct *tty, const __u8 * data, char *flags, int count)
+-{
+- struct n_hci *n_hci = tty2n_hci(tty);
+-
+- if (!n_hci || tty != n_hci->tty)
+- return;
+-
+- spin_lock(&n_hci->rx_lock);
+- n_hci_rx(n_hci, data, flags, count);
+- spin_unlock(&n_hci->rx_lock);
+-
+- if (test_and_clear_bit(TTY_THROTTLED,&tty->flags) && tty->driver.unthrottle)
+- tty->driver.unthrottle(tty);
+-}
+-
+-/* n_hci_tty_ioctl()
+- *
+- * Process IOCTL system call for the tty device.
+- *
+- * Arguments:
+- *
+- * tty pointer to tty instance data
+- * file pointer to open file object for device
+- * cmd IOCTL command code
+- * arg argument for IOCTL call (cmd dependent)
+- *
+- * Return Value: Command dependent
+- */
+-static int n_hci_tty_ioctl (struct tty_struct *tty, struct file * file,
+- unsigned int cmd, unsigned long arg)
+-{
+- struct n_hci *n_hci = tty2n_hci(tty);
+- int error = 0;
+-
+- DBG("");
+-
+- /* Verify the status of the device */
+- if (!n_hci)
+- return -EBADF;
+-
+- switch (cmd) {
+- default:
+- error = n_tty_ioctl(tty, file, cmd, arg);
+- break;
+- };
+-
+- return error;
+-}
+-
+-/*
+- * We don't provide read/write/poll interface for user space.
+- */
+-static ssize_t n_hci_tty_read(struct tty_struct *tty, struct file *file, unsigned char *buf, size_t nr)
+-{
+- return 0;
+-}
+-static ssize_t n_hci_tty_write(struct tty_struct *tty, struct file *file, const unsigned char *data, size_t count)
+-{
+- return 0;
+-}
+-static unsigned int n_hci_tty_poll(struct tty_struct *tty, struct file *filp, poll_table *wait)
+-{
+- return 0;
+-}
+-
+-int __init n_hci_init(void)
+-{
+- static struct tty_ldisc n_hci_ldisc;
+- int err;
+-
+- INF("BlueZ HCI UART driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
+- VERSION);
+- INF("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
+-
+- /* Register the tty discipline */
+-
+- memset(&n_hci_ldisc, 0, sizeof (n_hci_ldisc));
+- n_hci_ldisc.magic = TTY_LDISC_MAGIC;
+- n_hci_ldisc.name = "n_hci";
+- n_hci_ldisc.open = n_hci_tty_open;
+- n_hci_ldisc.close = n_hci_tty_close;
+- n_hci_ldisc.read = n_hci_tty_read;
+- n_hci_ldisc.write = n_hci_tty_write;
+- n_hci_ldisc.ioctl = n_hci_tty_ioctl;
+- n_hci_ldisc.poll = n_hci_tty_poll;
+- n_hci_ldisc.receive_room= n_hci_tty_room;
+- n_hci_ldisc.receive_buf = n_hci_tty_receive;
+- n_hci_ldisc.write_wakeup= n_hci_tty_wakeup;
+-
+- if ((err = tty_register_ldisc(N_HCI, &n_hci_ldisc))) {
+- ERR("Can't register HCI line discipline (%d)", err);
+- return err;
+- }
+-
+- return 0;
+-}
+-
+-void n_hci_cleanup(void)
+-{
+- int err;
+-
+- /* Release tty registration of line discipline */
+- if ((err = tty_register_ldisc(N_HCI, NULL)))
+- ERR("Can't unregister HCI line discipline (%d)", err);
+-}
+-
+-module_init(n_hci_init);
+-module_exit(n_hci_cleanup);
+-
+-MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
+-MODULE_DESCRIPTION("BlueZ HCI UART driver ver " VERSION);
+-MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/drivers/bluetooth/hci_uart.h linux-2.4.18-mh15/drivers/bluetooth/hci_uart.h
+--- linux-2.4.18/drivers/bluetooth/hci_uart.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_uart.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,82 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_uart.h,v 1.2 2002/09/09 01:17:32 maxk Exp $
++ */
++
++#ifndef N_HCI
++#define N_HCI 15
++#endif
++
++/* Ioctls */
++#define HCIUARTSETPROTO _IOW('U', 200, int)
++#define HCIUARTGETPROTO _IOR('U', 201, int)
++
++/* UART protocols */
++#define HCI_UART_MAX_PROTO 4
++
++#define HCI_UART_H4 0
++#define HCI_UART_BCSP 1
++#define HCI_UART_3WIRE 2
++#define HCI_UART_H4DS 3
++
++#ifdef __KERNEL__
++struct hci_uart;
++
++struct hci_uart_proto {
++ unsigned int id;
++ int (*open)(struct hci_uart *hu);
++ int (*close)(struct hci_uart *hu);
++ int (*flush)(struct hci_uart *hu);
++ int (*recv)(struct hci_uart *hu, void *data, int len);
++ int (*enqueue)(struct hci_uart *hu, struct sk_buff *skb);
++ struct sk_buff *(*dequeue)(struct hci_uart *hu);
++};
++
++struct hci_uart {
++ struct tty_struct *tty;
++ struct hci_dev hdev;
++ unsigned long flags;
++
++ struct hci_uart_proto *proto;
++ void *priv;
++
++ struct sk_buff *tx_skb;
++ unsigned long tx_state;
++ spinlock_t rx_lock;
++};
++
++/* HCI_UART flag bits */
++#define HCI_UART_PROTO_SET 0
++
++/* TX states */
++#define HCI_UART_SENDING 1
++#define HCI_UART_TX_WAKEUP 2
++
++int hci_uart_register_proto(struct hci_uart_proto *p);
++int hci_uart_unregister_proto(struct hci_uart_proto *p);
++int hci_uart_tx_wakeup(struct hci_uart *hu);
++
++#endif /* __KERNEL__ */
+diff -urN linux-2.4.18/drivers/bluetooth/hci_usb.c linux-2.4.18-mh15/drivers/bluetooth/hci_usb.c
+--- linux-2.4.18/drivers/bluetooth/hci_usb.c 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_usb.c 2004-08-01 16:26:23.000000000 +0200
+@@ -1,9 +1,10 @@
+ /*
+- BlueZ - Bluetooth protocol stack for Linux
++ HCI USB driver for Linux Bluetooth protocol stack (BlueZ)
+ Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+
++ Copyright (C) 2003 Maxim Krasnyansky <maxk@qualcomm.com>
++
+ 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;
+@@ -23,598 +24,938 @@
+ */
+
+ /*
+- * BlueZ HCI USB driver.
+ * Based on original USB Bluetooth driver for Linux kernel
+ * Copyright (c) 2000 Greg Kroah-Hartman <greg@kroah.com>
+ * Copyright (c) 2000 Mark Douglas Corner <mcorner@umich.edu>
+ *
+- * $Id: hci_usb.c,v 1.5 2001/07/05 18:42:44 maxk Exp $
++ * $Id: hci_usb.c,v 1.8 2002/07/18 17:23:09 maxk Exp $
+ */
+-#define VERSION "1.0"
++#define VERSION "2.7"
+
+ #include <linux/config.h>
+ #include <linux/module.h>
+
+ #include <linux/version.h>
+-#include <linux/config.h>
+ #include <linux/kernel.h>
+ #include <linux/init.h>
+ #include <linux/sched.h>
++#include <linux/unistd.h>
+ #include <linux/types.h>
+-#include <linux/fcntl.h>
+ #include <linux/interrupt.h>
+-#include <linux/ptrace.h>
+-#include <linux/poll.h>
+
+ #include <linux/slab.h>
+-#include <linux/tty.h>
+ #include <linux/errno.h>
+ #include <linux/string.h>
+-#include <linux/signal.h>
+-#include <linux/ioctl.h>
+ #include <linux/skbuff.h>
+
+ #include <linux/usb.h>
+
+ #include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+ #include <net/bluetooth/hci_core.h>
+-#include <net/bluetooth/hci_usb.h>
++
++#include "hci_usb.h"
+
+ #ifndef HCI_USB_DEBUG
+-#undef DBG
+-#define DBG( A... )
+-#undef DMP
+-#define DMP( A... )
++#undef BT_DBG
++#define BT_DBG( A... )
++#undef BT_DMP
++#define BT_DMP( A... )
+ #endif
+
+-static struct usb_device_id usb_bluetooth_ids [] = {
++#ifndef CONFIG_BLUEZ_HCIUSB_ZERO_PACKET
++#undef USB_ZERO_PACKET
++#define USB_ZERO_PACKET 0
++#endif
++
++static struct usb_driver hci_usb_driver;
++
++static struct usb_device_id bluetooth_ids[] = {
++ /* Generic Bluetooth USB device */
+ { USB_DEVICE_INFO(HCI_DEV_CLASS, HCI_DEV_SUBCLASS, HCI_DEV_PROTOCOL) },
++
++ /* AVM BlueFRITZ! USB v2.0 */
++ { USB_DEVICE(0x057c, 0x3800) },
++
++ /* Bluetooth Ultraport Module from IBM */
++ { USB_DEVICE(0x04bf, 0x030a) },
++
++ /* ALPS Modules with non-standard id */
++ { USB_DEVICE(0x044e, 0x3001) },
++ { USB_DEVICE(0x044e, 0x3002) },
++
++ /* Ericsson with non-standard id */
++ { USB_DEVICE(0x0bdb, 0x1002) },
++
+ { } /* Terminating entry */
+ };
+
+-MODULE_DEVICE_TABLE (usb, usb_bluetooth_ids);
++MODULE_DEVICE_TABLE (usb, bluetooth_ids);
+
+-static int hci_usb_ctrl_msg(struct hci_usb *husb, struct sk_buff *skb);
+-static int hci_usb_write_msg(struct hci_usb *husb, struct sk_buff *skb);
++static struct usb_device_id blacklist_ids[] = {
++ /* Broadcom BCM2033 without firmware */
++ { USB_DEVICE(0x0a5c, 0x2033), driver_info: HCI_IGNORE },
+
+-static void hci_usb_unlink_urbs(struct hci_usb *husb)
++ /* Broadcom BCM2035 */
++ { USB_DEVICE(0x0a5c, 0x200a), driver_info: HCI_RESET },
++
++ /* ISSC Bluetooth Adapter v3.1 */
++ { USB_DEVICE(0x1131, 0x1001), driver_info: HCI_RESET },
++
++ /* Digianswer device */
++ { USB_DEVICE(0x08fd, 0x0001), driver_info: HCI_DIGIANSWER },
++
++ /* RTX Telecom based adapter with buggy SCO support */
++ { USB_DEVICE(0x0400, 0x0807), driver_info: HCI_BROKEN_ISOC },
++
++ { } /* Terminating entry */
++};
++
++struct _urb *_urb_alloc(int isoc, int gfp)
+ {
+- usb_unlink_urb(husb->read_urb);
+- usb_unlink_urb(husb->intr_urb);
+- usb_unlink_urb(husb->ctrl_urb);
+- usb_unlink_urb(husb->write_urb);
++ struct _urb *_urb = kmalloc(sizeof(struct _urb) +
++ sizeof(iso_packet_descriptor_t) * isoc, gfp);
++ if (_urb) {
++ memset(_urb, 0, sizeof(*_urb));
++ spin_lock_init(&_urb->urb.lock);
++ }
++ return _urb;
++}
++
++struct _urb *_urb_dequeue(struct _urb_queue *q)
++{
++ struct _urb *_urb = NULL;
++ unsigned long flags;
++ spin_lock_irqsave(&q->lock, flags);
++ {
++ struct list_head *head = &q->head;
++ struct list_head *next = head->next;
++ if (next != head) {
++ _urb = list_entry(next, struct _urb, list);
++ list_del(next); _urb->queue = NULL;
++ }
++ }
++ spin_unlock_irqrestore(&q->lock, flags);
++ return _urb;
+ }
+
+-static void hci_usb_free_bufs(struct hci_usb *husb)
++static void hci_usb_rx_complete(struct urb *urb);
++static void hci_usb_tx_complete(struct urb *urb);
++
++#define __pending_tx(husb, type) (&husb->pending_tx[type-1])
++#define __pending_q(husb, type) (&husb->pending_q[type-1])
++#define __completed_q(husb, type) (&husb->completed_q[type-1])
++#define __transmit_q(husb, type) (&husb->transmit_q[type-1])
++#define __reassembly(husb, type) (husb->reassembly[type-1])
++
++static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
+ {
+- if (husb->read_urb) {
+- if (husb->read_urb->transfer_buffer)
+- kfree(husb->read_urb->transfer_buffer);
+- usb_free_urb(husb->read_urb);
+- }
++ return _urb_dequeue(__completed_q(husb, type));
++}
+
+- if (husb->intr_urb) {
+- if (husb->intr_urb->transfer_buffer)
+- kfree(husb->intr_urb->transfer_buffer);
+- usb_free_urb(husb->intr_urb);
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
++{
++ int offset = 0, i;
++
++ BT_DBG("len %d mtu %d", len, mtu);
++
++ for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
++ urb->iso_frame_desc[i].offset = offset;
++ urb->iso_frame_desc[i].length = mtu;
++ BT_DBG("desc %d offset %d len %d", i, offset, mtu);
++ }
++ if (len && i < HCI_MAX_ISOC_FRAMES) {
++ urb->iso_frame_desc[i].offset = offset;
++ urb->iso_frame_desc[i].length = len;
++ BT_DBG("desc %d offset %d len %d", i, offset, len);
++ i++;
+ }
++ urb->number_of_packets = i;
++}
++#endif
+
+- if (husb->ctrl_urb)
+- usb_free_urb(husb->ctrl_urb);
++static int hci_usb_intr_rx_submit(struct hci_usb *husb)
++{
++ struct _urb *_urb;
++ struct urb *urb;
++ int err, pipe, interval, size;
++ void *buf;
++
++ BT_DBG("%s", husb->hdev.name);
++
++ size = husb->intr_in_ep->wMaxPacketSize;
++
++ buf = kmalloc(size, GFP_ATOMIC);
++ if (!buf)
++ return -ENOMEM;
++
++ _urb = _urb_alloc(0, GFP_ATOMIC);
++ if (!_urb) {
++ kfree(buf);
++ return -ENOMEM;
++ }
++ _urb->type = HCI_EVENT_PKT;
++ _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
++
++ urb = &_urb->urb;
++ pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->bEndpointAddress);
++ interval = husb->intr_in_ep->bInterval;
++ FILL_INT_URB(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s intr rx submit failed urb %p err %d",
++ husb->hdev.name, urb, err);
++ _urb_unlink(_urb);
++ _urb_free(_urb);
++ kfree(buf);
++ }
++ return err;
++}
+
+- if (husb->write_urb)
+- usb_free_urb(husb->write_urb);
++static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
++{
++ struct _urb *_urb;
++ struct urb *urb;
++ int err, pipe, size = HCI_MAX_FRAME_SIZE;
++ void *buf;
++
++ buf = kmalloc(size, GFP_ATOMIC);
++ if (!buf)
++ return -ENOMEM;
++
++ _urb = _urb_alloc(0, GFP_ATOMIC);
++ if (!_urb) {
++ kfree(buf);
++ return -ENOMEM;
++ }
++ _urb->type = HCI_ACLDATA_PKT;
++ _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
++
++ urb = &_urb->urb;
++ pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->bEndpointAddress);
++ FILL_BULK_URB(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
++ urb->transfer_flags = USB_QUEUE_BULK;
++
++ BT_DBG("%s urb %p", husb->hdev.name, urb);
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s bulk rx submit failed urb %p err %d",
++ husb->hdev.name, urb, err);
++ _urb_unlink(_urb);
++ _urb_free(_urb);
++ kfree(buf);
++ }
++ return err;
++}
+
+- if (husb->intr_skb)
+- kfree_skb(husb->intr_skb);
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
++{
++ struct _urb *_urb;
++ struct urb *urb;
++ int err, mtu, size;
++ void *buf;
++
++ mtu = husb->isoc_in_ep->wMaxPacketSize;
++ size = mtu * HCI_MAX_ISOC_FRAMES;
++
++ buf = kmalloc(size, GFP_ATOMIC);
++ if (!buf)
++ return -ENOMEM;
++
++ _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
++ if (!_urb) {
++ kfree(buf);
++ return -ENOMEM;
++ }
++ _urb->type = HCI_SCODATA_PKT;
++ _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
++
++ urb = &_urb->urb;
++
++ urb->context = husb;
++ urb->dev = husb->udev;
++ urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->bEndpointAddress);
++ urb->complete = hci_usb_rx_complete;
++
++ urb->transfer_buffer_length = size;
++ urb->transfer_buffer = buf;
++ urb->transfer_flags = USB_ISO_ASAP;
++
++ __fill_isoc_desc(urb, size, mtu);
++
++ BT_DBG("%s urb %p", husb->hdev.name, urb);
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s isoc rx submit failed urb %p err %d",
++ husb->hdev.name, urb, err);
++ _urb_unlink(_urb);
++ _urb_free(_urb);
++ kfree(buf);
++ }
++ return err;
+ }
++#endif
+
+-/* ------- Interface to HCI layer ------ */
+ /* Initialize device */
+-int hci_usb_open(struct hci_dev *hdev)
++static int hci_usb_open(struct hci_dev *hdev)
+ {
+ struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
+- int status;
++ int i, err;
++ unsigned long flags;
++
++ BT_DBG("%s", hdev->name);
+
+- DBG("%s", hdev->name);
++ if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
+
+- husb->read_urb->dev = husb->udev;
+- if ((status = usb_submit_urb(husb->read_urb)))
+- DBG("read submit failed. %d", status);
++ MOD_INC_USE_COUNT;
+
+- husb->intr_urb->dev = husb->udev;
+- if ((status = usb_submit_urb(husb->intr_urb)))
+- DBG("interrupt submit failed. %d", status);
++ write_lock_irqsave(&husb->completion_lock, flags);
+
+- hdev->flags |= HCI_RUNNING;
++ err = hci_usb_intr_rx_submit(husb);
++ if (!err) {
++ for (i = 0; i < HCI_MAX_BULK_RX; i++)
++ hci_usb_bulk_rx_submit(husb);
++
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ if (husb->isoc_iface)
++ for (i = 0; i < HCI_MAX_ISOC_RX; i++)
++ hci_usb_isoc_rx_submit(husb);
++#endif
++ } else {
++ clear_bit(HCI_RUNNING, &hdev->flags);
++ MOD_DEC_USE_COUNT;
++ }
+
+- return 0;
++ write_unlock_irqrestore(&husb->completion_lock, flags);
++ return err;
+ }
+
+ /* Reset device */
+-int hci_usb_flush(struct hci_dev *hdev)
++static int hci_usb_flush(struct hci_dev *hdev)
+ {
+ struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
++ int i;
+
+- DBG("%s", hdev->name);
+-
+- /* Drop TX queues */
+- skb_queue_purge(&husb->tx_ctrl_q);
+- skb_queue_purge(&husb->tx_write_q);
++ BT_DBG("%s", hdev->name);
+
++ for (i=0; i < 4; i++)
++ skb_queue_purge(&husb->transmit_q[i]);
+ return 0;
+ }
+
+-/* Close device */
+-int hci_usb_close(struct hci_dev *hdev)
++static void hci_usb_unlink_urbs(struct hci_usb *husb)
+ {
+- struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
++ int i;
+
+- DBG("%s", hdev->name);
++ BT_DBG("%s", husb->hdev.name);
+
+- hdev->flags &= ~HCI_RUNNING;
+- hci_usb_unlink_urbs(husb);
++ for (i=0; i < 4; i++) {
++ struct _urb *_urb;
++ struct urb *urb;
++
++ /* Kill pending requests */
++ while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
++ urb = &_urb->urb;
++ BT_DBG("%s unlinking _urb %p type %d urb %p",
++ husb->hdev.name, _urb, _urb->type, urb);
++ usb_unlink_urb(urb);
++ _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
++ }
+
+- hci_usb_flush(hdev);
++ /* Release completed requests */
++ while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
++ urb = &_urb->urb;
++ BT_DBG("%s freeing _urb %p type %d urb %p",
++ husb->hdev.name, _urb, _urb->type, urb);
++ if (urb->setup_packet)
++ kfree(urb->setup_packet);
++ if (urb->transfer_buffer)
++ kfree(urb->transfer_buffer);
++ _urb_free(_urb);
++ }
+
+- return 0;
++ /* Release reassembly buffers */
++ if (husb->reassembly[i]) {
++ kfree_skb(husb->reassembly[i]);
++ husb->reassembly[i] = NULL;
++ }
++ }
+ }
+
+-void hci_usb_ctrl_wakeup(struct hci_usb *husb)
++/* Close device */
++static int hci_usb_close(struct hci_dev *hdev)
+ {
+- struct sk_buff *skb;
++ struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
++ unsigned long flags;
++
++ if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
+
+- if (test_and_set_bit(HCI_TX_CTRL, &husb->tx_state))
+- return;
++ BT_DBG("%s", hdev->name);
+
+- DBG("%s", husb->hdev.name);
++ write_lock_irqsave(&husb->completion_lock, flags);
++
++ hci_usb_unlink_urbs(husb);
++ hci_usb_flush(hdev);
+
+- if (!(skb = skb_dequeue(&husb->tx_ctrl_q)))
+- goto done;
++ write_unlock_irqrestore(&husb->completion_lock, flags);
+
+- if (hci_usb_ctrl_msg(husb, skb)){
+- kfree_skb(skb);
+- goto done;
+- }
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
+
+- DMP(skb->data, skb->len);
++static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
++{
++ struct urb *urb = &_urb->urb;
++ int err;
+
+- husb->hdev.stat.byte_tx += skb->len;
+- return;
++ BT_DBG("%s urb %p type %d", husb->hdev.name, urb, _urb->type);
++
++ _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s tx submit failed urb %p type %d err %d",
++ husb->hdev.name, urb, _urb->type, err);
++ _urb_unlink(_urb);
++ _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
++ } else
++ atomic_inc(__pending_tx(husb, _urb->type));
+
+-done:
+- clear_bit(HCI_TX_CTRL, &husb->tx_state);
+- return;
++ return err;
+ }
+
+-void hci_usb_write_wakeup(struct hci_usb *husb)
++static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
+ {
+- struct sk_buff *skb;
++ struct _urb *_urb = __get_completed(husb, skb->pkt_type);
++ devrequest *dr;
++ struct urb *urb;
++
++ if (!_urb) {
++ _urb = _urb_alloc(0, GFP_ATOMIC);
++ if (!_urb)
++ return -ENOMEM;
++ _urb->type = skb->pkt_type;
++
++ dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
++ if (!dr) {
++ _urb_free(_urb);
++ return -ENOMEM;
++ }
++ } else
++ dr = (void *) _urb->urb.setup_packet;
+
+- if (test_and_set_bit(HCI_TX_WRITE, &husb->tx_state))
+- return;
++ dr->requesttype = husb->ctrl_req;
++ dr->request = 0;
++ dr->index = 0;
++ dr->value = 0;
++ dr->length = __cpu_to_le16(skb->len);
+
+- DBG("%s", husb->hdev.name);
++ urb = &_urb->urb;
++ FILL_CONTROL_URB(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
++ (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
+
+- if (!(skb = skb_dequeue(&husb->tx_write_q)))
+- goto done;
++ BT_DBG("%s skb %p len %d", husb->hdev.name, skb, skb->len);
++
++ _urb->priv = skb;
++ return __tx_submit(husb, _urb);
++}
+
+- if (hci_usb_write_msg(husb, skb)) {
+- skb_queue_head(&husb->tx_write_q, skb);
+- goto done;
++static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
++{
++ struct _urb *_urb = __get_completed(husb, skb->pkt_type);
++ struct urb *urb;
++ int pipe;
++
++ if (!_urb) {
++ _urb = _urb_alloc(0, GFP_ATOMIC);
++ if (!_urb)
++ return -ENOMEM;
++ _urb->type = skb->pkt_type;
+ }
+
+- DMP(skb->data, skb->len);
++ urb = &_urb->urb;
++ pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->bEndpointAddress);
++ FILL_BULK_URB(urb, husb->udev, pipe, skb->data, skb->len,
++ hci_usb_tx_complete, husb);
++ urb->transfer_flags = USB_QUEUE_BULK | USB_ZERO_PACKET;
+
+- husb->hdev.stat.byte_tx += skb->len;
+- return;
++ BT_DBG("%s skb %p len %d", husb->hdev.name, skb, skb->len);
+
+-done:
+- clear_bit(HCI_TX_WRITE, &husb->tx_state);
+- return;
++ _urb->priv = skb;
++ return __tx_submit(husb, _urb);
+ }
+
+-/* Send frames from HCI layer */
+-int hci_usb_send_frame(struct sk_buff *skb)
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
+ {
+- struct hci_dev *hdev = (struct hci_dev *) skb->dev;
+- struct hci_usb *husb;
+-
+- if (!hdev) {
+- ERR("frame for uknown device (hdev=NULL)");
+- return -ENODEV;
++ struct _urb *_urb = __get_completed(husb, skb->pkt_type);
++ struct urb *urb;
++
++ if (!_urb) {
++ _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
++ if (!_urb)
++ return -ENOMEM;
++ _urb->type = skb->pkt_type;
+ }
+
+- if (!(hdev->flags & HCI_RUNNING))
+- return 0;
++ BT_DBG("%s skb %p len %d", husb->hdev.name, skb, skb->len);
+
+- husb = (struct hci_usb *) hdev->driver_data;
++ urb = &_urb->urb;
++
++ urb->context = husb;
++ urb->dev = husb->udev;
++ urb->pipe = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->bEndpointAddress);
++ urb->complete = hci_usb_tx_complete;
++ urb->transfer_flags = USB_ISO_ASAP;
+
+- DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
++ urb->transfer_buffer = skb->data;
++ urb->transfer_buffer_length = skb->len;
++
++ __fill_isoc_desc(urb, skb->len, husb->isoc_out_ep->wMaxPacketSize);
+
+- switch (skb->pkt_type) {
+- case HCI_COMMAND_PKT:
+- skb_queue_tail(&husb->tx_ctrl_q, skb);
+- hci_usb_ctrl_wakeup(husb);
+- hdev->stat.cmd_tx++;
+- return 0;
+-
+- case HCI_ACLDATA_PKT:
+- skb_queue_tail(&husb->tx_write_q, skb);
+- hci_usb_write_wakeup(husb);
+- hdev->stat.acl_tx++;
+- return 0;
+-
+- case HCI_SCODATA_PKT:
+- return -EOPNOTSUPP;
+- };
+-
+- return 0;
++ _urb->priv = skb;
++ return __tx_submit(husb, _urb);
+ }
++#endif
+
+-/* ---------- USB ------------- */
+-
+-static void hci_usb_ctrl(struct urb *urb)
++static void hci_usb_tx_process(struct hci_usb *husb)
+ {
+- struct sk_buff *skb = (struct sk_buff *) urb->context;
+- struct hci_dev *hdev;
+- struct hci_usb *husb;
++ struct sk_buff_head *q;
++ struct sk_buff *skb;
+
+- if (!skb)
+- return;
+- hdev = (struct hci_dev *) skb->dev;
+- husb = (struct hci_usb *) hdev->driver_data;
++ BT_DBG("%s", husb->hdev.name);
+
+- DBG("%s", hdev->name);
++ do {
++ clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
+
+- if (urb->status)
+- DBG("%s ctrl status: %d", hdev->name, urb->status);
++ /* Process command queue */
++ q = __transmit_q(husb, HCI_COMMAND_PKT);
++ if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
++ (skb = skb_dequeue(q))) {
++ if (hci_usb_send_ctrl(husb, skb) < 0)
++ skb_queue_head(q, skb);
++ }
+
+- clear_bit(HCI_TX_CTRL, &husb->tx_state);
+- kfree_skb(skb);
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ /* Process SCO queue */
++ q = __transmit_q(husb, HCI_SCODATA_PKT);
++ if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
++ (skb = skb_dequeue(q))) {
++ if (hci_usb_send_isoc(husb, skb) < 0)
++ skb_queue_head(q, skb);
++ }
++#endif
++
++ /* Process ACL queue */
++ q = __transmit_q(husb, HCI_ACLDATA_PKT);
++ while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
++ (skb = skb_dequeue(q))) {
++ if (hci_usb_send_bulk(husb, skb) < 0) {
++ skb_queue_head(q, skb);
++ break;
++ }
++ }
++ } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
++}
+
+- /* Wake up device */
+- hci_usb_ctrl_wakeup(husb);
++static inline void hci_usb_tx_wakeup(struct hci_usb *husb)
++{
++ /* Serialize TX queue processing to avoid data reordering */
++ if (!test_and_set_bit(HCI_USB_TX_PROCESS, &husb->state)) {
++ hci_usb_tx_process(husb);
++ clear_bit(HCI_USB_TX_PROCESS, &husb->state);
++ } else
++ set_bit(HCI_USB_TX_WAKEUP, &husb->state);
+ }
+
+-static void hci_usb_bulk_write(struct urb *urb)
++/* Send frames from HCI layer */
++static int hci_usb_send_frame(struct sk_buff *skb)
+ {
+- struct sk_buff *skb = (struct sk_buff *) urb->context;
+- struct hci_dev *hdev;
++ struct hci_dev *hdev = (struct hci_dev *) skb->dev;
+ struct hci_usb *husb;
+
+- if (!skb)
+- return;
+- hdev = (struct hci_dev *) skb->dev;
+- husb = (struct hci_usb *) hdev->driver_data;
++ if (!hdev) {
++ BT_ERR("frame for uknown device (hdev=NULL)");
++ return -ENODEV;
++ }
+
+- DBG("%s", hdev->name);
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
++ return -EBUSY;
+
+- if (urb->status)
+- DBG("%s bulk write status: %d", hdev->name, urb->status);
++ BT_DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
+
+- clear_bit(HCI_TX_WRITE, &husb->tx_state);
+- kfree_skb(skb);
++ husb = (struct hci_usb *) hdev->driver_data;
+
+- /* Wake up device */
+- hci_usb_write_wakeup(husb);
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++#endif
+
+- return;
+-}
++ default:
++ kfree_skb(skb);
++ return 0;
++ }
+
+-static void hci_usb_intr(struct urb *urb)
+-{
+- struct hci_usb *husb = (struct hci_usb *) urb->context;
+- unsigned char *data = urb->transfer_buffer;
+- register int count = urb->actual_length;
+- register struct sk_buff *skb = husb->intr_skb;
+- hci_event_hdr *eh;
+- register int len;
++ read_lock(&husb->completion_lock);
+
+- if (!husb)
+- return;
++ skb_queue_tail(__transmit_q(husb, skb->pkt_type), skb);
++ hci_usb_tx_wakeup(husb);
+
+- DBG("%s count %d", husb->hdev.name, count);
++ read_unlock(&husb->completion_lock);
++ return 0;
++}
+
+- if (urb->status || !count) {
+- DBG("%s intr status %d, count %d", husb->hdev.name, urb->status, count);
+- return;
+- }
++static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count)
++{
++ BT_DBG("%s type %d data %p count %d", husb->hdev.name, type, data, count);
+
+- /* Do we really have to handle continuations here ? */
+- if (!skb) {
+- /* New frame */
+- if (count < HCI_EVENT_HDR_SIZE) {
+- DBG("%s bad frame len %d", husb->hdev.name, count);
+- return;
+- }
++ husb->hdev.stat.byte_rx += count;
+
+- eh = (hci_event_hdr *) data;
+- len = eh->plen + HCI_EVENT_HDR_SIZE;
++ while (count) {
++ struct sk_buff *skb = __reassembly(husb, type);
++ struct { int expect; } *scb;
++ int len = 0;
++
++ if (!skb) {
++ /* Start of the frame */
++
++ switch (type) {
++ case HCI_EVENT_PKT:
++ if (count >= HCI_EVENT_HDR_SIZE) {
++ hci_event_hdr *h = data;
++ len = HCI_EVENT_HDR_SIZE + h->plen;
++ } else
++ return -EILSEQ;
++ break;
+
+- if (count > len) {
+- DBG("%s corrupted frame, len %d", husb->hdev.name, count);
+- return;
+- }
++ case HCI_ACLDATA_PKT:
++ if (count >= HCI_ACL_HDR_SIZE) {
++ hci_acl_hdr *h = data;
++ len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);
++ } else
++ return -EILSEQ;
++ break;
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ case HCI_SCODATA_PKT:
++ if (count >= HCI_SCO_HDR_SIZE) {
++ hci_sco_hdr *h = data;
++ len = HCI_SCO_HDR_SIZE + h->dlen;
++ } else
++ return -EILSEQ;
++ break;
++#endif
++ }
++ BT_DBG("new packet len %d", len);
+
+- /* Allocate skb */
+- if (!(skb = bluez_skb_alloc(len, GFP_ATOMIC))) {
+- ERR("Can't allocate mem for new packet");
+- return;
++ skb = bluez_skb_alloc(len, GFP_ATOMIC);
++ if (!skb) {
++ BT_ERR("%s no memory for the packet", husb->hdev.name);
++ return -ENOMEM;
++ }
++ skb->dev = (void *) &husb->hdev;
++ skb->pkt_type = type;
++
++ __reassembly(husb, type) = skb;
++
++ scb = (void *) skb->cb;
++ scb->expect = len;
++ } else {
++ /* Continuation */
++ scb = (void *) skb->cb;
++ len = scb->expect;
+ }
+- skb->dev = (void *) &husb->hdev;
+- skb->pkt_type = HCI_EVENT_PKT;
+-
+- husb->intr_skb = skb;
+- husb->intr_count = len;
+- } else {
+- /* Continuation */
+- if (count > husb->intr_count) {
+- ERR("%s bad frame len %d (expected %d)", husb->hdev.name, count, husb->intr_count);
+
+- kfree_skb(skb);
+- husb->intr_skb = NULL;
+- husb->intr_count = 0;
+- return;
++ len = min(len, count);
++
++ memcpy(skb_put(skb, len), data, len);
++
++ scb->expect -= len;
++ if (!scb->expect) {
++ /* Complete frame */
++ __reassembly(husb, type) = NULL;
++ hci_recv_frame(skb);
+ }
+- }
+-
+- memcpy(skb_put(skb, count), data, count);
+- husb->intr_count -= count;
+-
+- DMP(data, count);
+-
+- if (!husb->intr_count) {
+- /* Got complete frame */
+
+- husb->hdev.stat.byte_rx += skb->len;
+- hci_recv_frame(skb);
+-
+- husb->intr_skb = NULL;
++ count -= len; data += len;
+ }
++ return 0;
+ }
+
+-static void hci_usb_bulk_read(struct urb *urb)
++static void hci_usb_rx_complete(struct urb *urb)
+ {
+- struct hci_usb *husb = (struct hci_usb *) urb->context;
+- unsigned char *data = urb->transfer_buffer;
+- int count = urb->actual_length, status;
+- struct sk_buff *skb;
+- hci_acl_hdr *ah;
+- register __u16 dlen;
+-
+- if (!husb)
+- return;
++ struct _urb *_urb = container_of(urb, struct _urb, urb);
++ struct hci_usb *husb = (void *) urb->context;
++ struct hci_dev *hdev = &husb->hdev;
++ int err, count = urb->actual_length;
+
+- DBG("%s status %d, count %d, flags %x", husb->hdev.name, urb->status, count, urb->transfer_flags);
++ BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
++ _urb->type, urb->status, count, urb->transfer_flags);
+
+- if (urb->status) {
+- /* Do not re-submit URB on critical errors */
+- switch (urb->status) {
+- case -ENOENT:
+- return;
+- default:
+- goto resubmit;
+- };
+- }
+- if (!count)
+- goto resubmit;
+-
+- DMP(data, count);
++ read_lock(&husb->completion_lock);
+
+- ah = (hci_acl_hdr *) data;
+- dlen = le16_to_cpu(ah->dlen);
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
++ goto unlock;
+
+- /* Verify frame len and completeness */
+- if ((count - HCI_ACL_HDR_SIZE) != dlen) {
+- ERR("%s corrupted ACL packet: count %d, plen %d", husb->hdev.name, count, dlen);
++ if (urb->status || !count)
+ goto resubmit;
+- }
+
+- /* Allocate packet */
+- if (!(skb = bluez_skb_alloc(count, GFP_ATOMIC))) {
+- ERR("Can't allocate mem for new packet");
+- goto resubmit;
++ if (_urb->type == HCI_SCODATA_PKT) {
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ int i;
++ for (i=0; i < urb->number_of_packets; i++) {
++ BT_DBG("desc %d status %d offset %d len %d", i,
++ urb->iso_frame_desc[i].status,
++ urb->iso_frame_desc[i].offset,
++ urb->iso_frame_desc[i].actual_length);
++
++ if (!urb->iso_frame_desc[i].status)
++ __recv_frame(husb, _urb->type,
++ urb->transfer_buffer + urb->iso_frame_desc[i].offset,
++ urb->iso_frame_desc[i].actual_length);
++ }
++#else
++ ;
++#endif
++ } else {
++ err = __recv_frame(husb, _urb->type, urb->transfer_buffer, count);
++ if (err < 0) {
++ BT_ERR("%s corrupted packet: type %d count %d",
++ husb->hdev.name, _urb->type, count);
++ hdev->stat.err_rx++;
++ }
+ }
+
+- memcpy(skb_put(skb, count), data, count);
+- skb->dev = (void *) &husb->hdev;
+- skb->pkt_type = HCI_ACLDATA_PKT;
+-
+- husb->hdev.stat.byte_rx += skb->len;
+-
+- hci_recv_frame(skb);
+-
+ resubmit:
+- husb->read_urb->dev = husb->udev;
+- if ((status = usb_submit_urb(husb->read_urb)))
+- DBG("%s read URB submit failed %d", husb->hdev.name, status);
++ if (_urb->type != HCI_EVENT_PKT) {
++ urb->dev = husb->udev;
++ err = usb_submit_urb(urb);
++ BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
++ _urb->type, err);
++ }
+
+- DBG("%s read URB re-submited", husb->hdev.name);
++unlock:
++ read_unlock(&husb->completion_lock);
+ }
+
+-static int hci_usb_ctrl_msg(struct hci_usb *husb, struct sk_buff *skb)
++static void hci_usb_tx_complete(struct urb *urb)
+ {
+- struct urb *urb = husb->ctrl_urb;
+- devrequest *dr = &husb->dev_req;
+- int pipe, status;
++ struct _urb *_urb = container_of(urb, struct _urb, urb);
++ struct hci_usb *husb = (void *) urb->context;
++ struct hci_dev *hdev = &husb->hdev;
+
+- DBG("%s len %d", husb->hdev.name, skb->len);
++ BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
++ urb->status, urb->transfer_flags);
+
+- pipe = usb_sndctrlpipe(husb->udev, 0);
++ atomic_dec(__pending_tx(husb, _urb->type));
+
+- dr->requesttype = HCI_CTRL_REQ;
+- dr->request = 0;
+- dr->index = 0;
+- dr->value = 0;
+- dr->length = cpu_to_le16(skb->len);
+-
+- FILL_CONTROL_URB(urb, husb->udev, pipe, (void*)dr, skb->data, skb->len,
+- hci_usb_ctrl, skb);
++ urb->transfer_buffer = NULL;
++ kfree_skb((struct sk_buff *) _urb->priv);
+
+- if ((status = usb_submit_urb(urb))) {
+- DBG("%s control URB submit failed %d", husb->hdev.name, status);
+- return status;
+- }
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
++ return;
+
+- return 0;
+-}
++ if (!urb->status)
++ hdev->stat.byte_tx += urb->transfer_buffer_length;
++ else
++ hdev->stat.err_tx++;
+
+-static int hci_usb_write_msg(struct hci_usb *husb, struct sk_buff *skb)
+-{
+- struct urb *urb = husb->write_urb;
+- int pipe, status;
++ read_lock(&husb->completion_lock);
+
+- DBG("%s len %d", husb->hdev.name, skb->len);
++ _urb_unlink(_urb);
++ _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
+
+- pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep_addr);
++ hci_usb_tx_wakeup(husb);
++
++ read_unlock(&husb->completion_lock);
++}
+
+- FILL_BULK_URB(urb, husb->udev, pipe, skb->data, skb->len,
+- hci_usb_bulk_write, skb);
+- urb->transfer_flags |= USB_QUEUE_BULK;
++static void hci_usb_destruct(struct hci_dev *hdev)
++{
++ struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
+
+- if ((status = usb_submit_urb(urb))) {
+- DBG("%s write URB submit failed %d", husb->hdev.name, status);
+- return status;
+- }
++ BT_DBG("%s", hdev->name);
+
+- return 0;
++ kfree(husb);
+ }
+
+-static void * hci_usb_probe(struct usb_device *udev, unsigned int ifnum, const struct usb_device_id *id)
++static void *hci_usb_probe(struct usb_device *udev, unsigned int ifnum, const struct usb_device_id *id)
+ {
+- struct usb_endpoint_descriptor *bulk_out_ep, *intr_in_ep, *bulk_in_ep;
++ struct usb_endpoint_descriptor *bulk_out_ep[HCI_MAX_IFACE_NUM];
++ struct usb_endpoint_descriptor *isoc_out_ep[HCI_MAX_IFACE_NUM];
++ struct usb_endpoint_descriptor *bulk_in_ep[HCI_MAX_IFACE_NUM];
++ struct usb_endpoint_descriptor *isoc_in_ep[HCI_MAX_IFACE_NUM];
++ struct usb_endpoint_descriptor *intr_in_ep[HCI_MAX_IFACE_NUM];
+ struct usb_interface_descriptor *uif;
+ struct usb_endpoint_descriptor *ep;
++ struct usb_interface *iface, *isoc_iface;
+ struct hci_usb *husb;
+ struct hci_dev *hdev;
+- int i, size, pipe;
+- __u8 * buf;
++ int i, a, e, size, ifn, isoc_ifnum, isoc_alts;
+
+- DBG("udev %p ifnum %d", udev, ifnum);
++ BT_DBG("udev %p ifnum %d", udev, ifnum);
+
+- /* Check device signature */
+- if ((udev->descriptor.bDeviceClass != HCI_DEV_CLASS) ||
+- (udev->descriptor.bDeviceSubClass != HCI_DEV_SUBCLASS)||
+- (udev->descriptor.bDeviceProtocol != HCI_DEV_PROTOCOL) )
+- return NULL;
++ iface = &udev->actconfig->interface[0];
+
+- MOD_INC_USE_COUNT;
+-
+- uif = &udev->actconfig->interface[ifnum].altsetting[0];
++ if (!id->driver_info) {
++ const struct usb_device_id *match;
++ match = usb_match_id(udev, iface, blacklist_ids);
++ if (match)
++ id = match;
++ }
+
+- if (uif->bNumEndpoints != 3) {
+- DBG("Wrong number of endpoints %d", uif->bNumEndpoints);
+- MOD_DEC_USE_COUNT;
++ if (id->driver_info & HCI_IGNORE)
+ return NULL;
+- }
+
+- bulk_out_ep = intr_in_ep = bulk_in_ep = NULL;
++ /* Check number of endpoints */
++ if (udev->actconfig->interface[ifnum].altsetting[0].bNumEndpoints < 3)
++ return NULL;
+
++ memset(bulk_out_ep, 0, sizeof(bulk_out_ep));
++ memset(isoc_out_ep, 0, sizeof(isoc_out_ep));
++ memset(bulk_in_ep, 0, sizeof(bulk_in_ep));
++ memset(isoc_in_ep, 0, sizeof(isoc_in_ep));
++ memset(intr_in_ep, 0, sizeof(intr_in_ep));
++
++ size = 0;
++ isoc_iface = NULL;
++ isoc_alts = isoc_ifnum = 0;
++
+ /* Find endpoints that we need */
+- for ( i = 0; i < uif->bNumEndpoints; ++i) {
+- ep = &uif->endpoint[i];
+
+- switch (ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
+- case USB_ENDPOINT_XFER_BULK:
+- if (ep->bEndpointAddress & USB_DIR_IN)
+- bulk_in_ep = ep;
+- else
+- bulk_out_ep = ep;
+- break;
++ ifn = MIN(udev->actconfig->bNumInterfaces, HCI_MAX_IFACE_NUM);
++ for (i = 0; i < ifn; i++) {
++ iface = &udev->actconfig->interface[i];
++ for (a = 0; a < iface->num_altsetting; a++) {
++ uif = &iface->altsetting[a];
++ for (e = 0; e < uif->bNumEndpoints; e++) {
++ ep = &uif->endpoint[e];
++
++ switch (ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
++ case USB_ENDPOINT_XFER_INT:
++ if (ep->bEndpointAddress & USB_DIR_IN)
++ intr_in_ep[i] = ep;
++ break;
++
++ case USB_ENDPOINT_XFER_BULK:
++ if (ep->bEndpointAddress & USB_DIR_IN)
++ bulk_in_ep[i] = ep;
++ else
++ bulk_out_ep[i] = ep;
++ break;
++
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ case USB_ENDPOINT_XFER_ISOC:
++ if (ep->wMaxPacketSize < size || a > 2)
++ break;
++ size = ep->wMaxPacketSize;
++
++ isoc_iface = iface;
++ isoc_alts = a;
++ isoc_ifnum = i;
++
++ if (ep->bEndpointAddress & USB_DIR_IN)
++ isoc_in_ep[i] = ep;
++ else
++ isoc_out_ep[i] = ep;
++ break;
++#endif
++ }
++ }
++ }
++ }
+
+- case USB_ENDPOINT_XFER_INT:
+- intr_in_ep = ep;
+- break;
+- };
++ if (!bulk_in_ep[0] || !bulk_out_ep[0] || !intr_in_ep[0]) {
++ BT_DBG("Bulk endpoints not found");
++ goto done;
+ }
+
+- if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) {
+- DBG("Endpoints not found: %p %p %p", bulk_in_ep, bulk_out_ep, intr_in_ep);
+- MOD_DEC_USE_COUNT;
+- return NULL;
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ if (id->driver_info & HCI_BROKEN_ISOC || !isoc_in_ep[1] || !isoc_out_ep[1]) {
++ BT_DBG("Isoc endpoints not found");
++ isoc_iface = NULL;
+ }
++#endif
+
+ if (!(husb = kmalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
+- ERR("Can't allocate: control structure");
+- MOD_DEC_USE_COUNT;
+- return NULL;
++ BT_ERR("Can't allocate: control structure");
++ goto done;
+ }
+
+ memset(husb, 0, sizeof(struct hci_usb));
+
+ husb->udev = udev;
+- husb->bulk_out_ep_addr = bulk_out_ep->bEndpointAddress;
+-
+- if (!(husb->ctrl_urb = usb_alloc_urb(0))) {
+- ERR("Can't allocate: control URB");
+- goto probe_error;
+- }
+-
+- if (!(husb->write_urb = usb_alloc_urb(0))) {
+- ERR("Can't allocate: write URB");
+- goto probe_error;
+- }
+-
+- if (!(husb->read_urb = usb_alloc_urb(0))) {
+- ERR("Can't allocate: read URB");
+- goto probe_error;
+- }
+-
+- ep = bulk_in_ep;
+- pipe = usb_rcvbulkpipe(udev, ep->bEndpointAddress);
+- size = HCI_MAX_FRAME_SIZE;
+-
+- if (!(buf = kmalloc(size, GFP_KERNEL))) {
+- ERR("Can't allocate: read buffer");
+- goto probe_error;
+- }
+-
+- FILL_BULK_URB(husb->read_urb, udev, pipe, buf, size, hci_usb_bulk_read, husb);
+- husb->read_urb->transfer_flags |= USB_QUEUE_BULK;
+-
+- ep = intr_in_ep;
+- pipe = usb_rcvintpipe(udev, ep->bEndpointAddress);
+- size = usb_maxpacket(udev, pipe, usb_pipeout(pipe));
+-
+- if (!(husb->intr_urb = usb_alloc_urb(0))) {
+- ERR("Can't allocate: interrupt URB");
+- goto probe_error;
++ husb->bulk_out_ep = bulk_out_ep[0];
++ husb->bulk_in_ep = bulk_in_ep[0];
++ husb->intr_in_ep = intr_in_ep[0];
++
++ if (id->driver_info & HCI_DIGIANSWER)
++ husb->ctrl_req = HCI_DIGI_REQ;
++ else
++ husb->ctrl_req = HCI_CTRL_REQ;
++
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ if (isoc_iface) {
++ BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
++ if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
++ BT_ERR("Can't set isoc interface settings");
++ isoc_iface = NULL;
++ }
++ usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb);
++ husb->isoc_iface = isoc_iface;
++ husb->isoc_in_ep = isoc_in_ep[isoc_ifnum];
++ husb->isoc_out_ep = isoc_out_ep[isoc_ifnum];
+ }
++#endif
++
++ husb->completion_lock = RW_LOCK_UNLOCKED;
+
+- if (!(buf = kmalloc(size, GFP_KERNEL))) {
+- ERR("Can't allocate: interrupt buffer");
+- goto probe_error;
++ for (i = 0; i < 4; i++) {
++ skb_queue_head_init(&husb->transmit_q[i]);
++ _urb_queue_init(&husb->pending_q[i]);
++ _urb_queue_init(&husb->completed_q[i]);
+ }
+
+- FILL_INT_URB(husb->intr_urb, udev, pipe, buf, size, hci_usb_intr, husb, ep->bInterval);
+-
+- skb_queue_head_init(&husb->tx_ctrl_q);
+- skb_queue_head_init(&husb->tx_write_q);
+-
+ /* Initialize and register HCI device */
+ hdev = &husb->hdev;
+
+- hdev->type = HCI_USB;
++ hdev->type = HCI_USB;
+ hdev->driver_data = husb;
+
+ hdev->open = hci_usb_open;
+ hdev->close = hci_usb_close;
+ hdev->flush = hci_usb_flush;
+- hdev->send = hci_usb_send_frame;
++ hdev->send = hci_usb_send_frame;
++ hdev->destruct = hci_usb_destruct;
++
++ if (id->driver_info & HCI_RESET)
++ set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
+
+ if (hci_register_dev(hdev) < 0) {
+- ERR("Can't register HCI device %s", hdev->name);
++ BT_ERR("Can't register HCI device");
+ goto probe_error;
+ }
+
+ return husb;
+
+ probe_error:
+- hci_usb_free_bufs(husb);
+ kfree(husb);
+- MOD_DEC_USE_COUNT;
++
++done:
+ return NULL;
+ }
+
+@@ -626,38 +967,34 @@
+ if (!husb)
+ return;
+
+- DBG("%s", hdev->name);
++ BT_DBG("%s", hdev->name);
+
+ hci_usb_close(hdev);
+
+- if (hci_unregister_dev(hdev) < 0) {
+- ERR("Can't unregister HCI device %s", hdev->name);
+- }
++ if (husb->isoc_iface)
++ usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
+
+- hci_usb_free_bufs(husb);
+- kfree(husb);
+-
+- MOD_DEC_USE_COUNT;
++ if (hci_unregister_dev(hdev) < 0)
++ BT_ERR("Can't unregister HCI device %s", hdev->name);
+ }
+
+-static struct usb_driver hci_usb_driver =
+-{
++static struct usb_driver hci_usb_driver = {
+ name: "hci_usb",
+ probe: hci_usb_probe,
+ disconnect: hci_usb_disconnect,
+- id_table: usb_bluetooth_ids,
++ id_table: bluetooth_ids,
+ };
+
+ int hci_usb_init(void)
+ {
+ int err;
+
+- INF("BlueZ HCI USB driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
++ BT_INFO("BlueZ HCI USB driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
+ VERSION);
+- INF("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
++ BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
+
+ if ((err = usb_register(&hci_usb_driver)) < 0)
+- ERR("Failed to register HCI USB driver");
++ BT_ERR("Failed to register HCI USB driver");
+
+ return err;
+ }
+@@ -670,6 +1007,6 @@
+ module_init(hci_usb_init);
+ module_exit(hci_usb_cleanup);
+
+-MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
++MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
+ MODULE_DESCRIPTION("BlueZ HCI USB driver ver " VERSION);
+ MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/drivers/bluetooth/hci_usb.h linux-2.4.18-mh15/drivers/bluetooth/hci_usb.h
+--- linux-2.4.18/drivers/bluetooth/hci_usb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_usb.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,147 @@
++/*
++ HCI USB driver for Linux Bluetooth protocol stack (BlueZ)
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ Copyright (C) 2003 Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_usb.h,v 1.2 2002/03/18 19:10:04 maxk Exp $
++ */
++
++#ifdef __KERNEL__
++
++/* Class, SubClass, and Protocol codes that describe a Bluetooth device */
++#define HCI_DEV_CLASS 0xe0 /* Wireless class */
++#define HCI_DEV_SUBCLASS 0x01 /* RF subclass */
++#define HCI_DEV_PROTOCOL 0x01 /* Bluetooth programming protocol */
++
++#define HCI_CTRL_REQ 0x20
++#define HCI_DIGI_REQ 0x40
++
++#define HCI_IGNORE 0x01
++#define HCI_RESET 0x02
++#define HCI_DIGIANSWER 0x04
++#define HCI_BROKEN_ISOC 0x08
++
++#define HCI_MAX_IFACE_NUM 3
++
++#define HCI_MAX_BULK_TX 4
++#define HCI_MAX_BULK_RX 1
++
++#define HCI_MAX_ISOC_RX 2
++#define HCI_MAX_ISOC_TX 2
++
++#define HCI_MAX_ISOC_FRAMES 10
++
++struct _urb_queue {
++ struct list_head head;
++ spinlock_t lock;
++};
++
++struct _urb {
++ struct list_head list;
++ struct _urb_queue *queue;
++ int type;
++ void *priv;
++ struct urb urb;
++};
++
++struct _urb *_urb_alloc(int isoc, int gfp);
++
++static inline void _urb_free(struct _urb *_urb)
++{
++ kfree(_urb);
++}
++
++static inline void _urb_queue_init(struct _urb_queue *q)
++{
++ INIT_LIST_HEAD(&q->head);
++ spin_lock_init(&q->lock);
++}
++
++static inline void _urb_queue_head(struct _urb_queue *q, struct _urb *_urb)
++{
++ unsigned long flags;
++ spin_lock_irqsave(&q->lock, flags);
++ list_add(&_urb->list, &q->head); _urb->queue = q;
++ spin_unlock_irqrestore(&q->lock, flags);
++}
++
++static inline void _urb_queue_tail(struct _urb_queue *q, struct _urb *_urb)
++{
++ unsigned long flags;
++ spin_lock_irqsave(&q->lock, flags);
++ list_add_tail(&_urb->list, &q->head); _urb->queue = q;
++ spin_unlock_irqrestore(&q->lock, flags);
++}
++
++static inline void _urb_unlink(struct _urb *_urb)
++{
++ struct _urb_queue *q = _urb->queue;
++ unsigned long flags;
++ if (q) {
++ spin_lock_irqsave(&q->lock, flags);
++ list_del(&_urb->list); _urb->queue = NULL;
++ spin_unlock_irqrestore(&q->lock, flags);
++ }
++}
++
++struct _urb *_urb_dequeue(struct _urb_queue *q);
++
++#ifndef container_of
++#define container_of(ptr, type, member) ({ \
++ const typeof( ((type *)0)->member ) *__mptr = (ptr); \
++ (type *)( (char *)__mptr - offsetof(type,member) );})
++#endif
++
++struct hci_usb {
++ struct hci_dev hdev;
++
++ unsigned long state;
++
++ struct usb_device *udev;
++
++ struct usb_endpoint_descriptor *bulk_in_ep;
++ struct usb_endpoint_descriptor *bulk_out_ep;
++ struct usb_endpoint_descriptor *intr_in_ep;
++
++ struct usb_interface *isoc_iface;
++ struct usb_endpoint_descriptor *isoc_out_ep;
++ struct usb_endpoint_descriptor *isoc_in_ep;
++
++ __u8 ctrl_req;
++
++ struct sk_buff_head transmit_q[4];
++ struct sk_buff *reassembly[4]; // Reassembly buffers
++
++ rwlock_t completion_lock;
++
++ atomic_t pending_tx[4]; // Number of pending requests
++ struct _urb_queue pending_q[4]; // Pending requests
++ struct _urb_queue completed_q[4]; // Completed requests
++};
++
++/* States */
++#define HCI_USB_TX_PROCESS 1
++#define HCI_USB_TX_WAKEUP 2
++
++#endif /* __KERNEL__ */
+diff -urN linux-2.4.18/drivers/bluetooth/hci_vhci.c linux-2.4.18-mh15/drivers/bluetooth/hci_vhci.c
+--- linux-2.4.18/drivers/bluetooth/hci_vhci.c 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_vhci.c 2004-08-01 16:26:23.000000000 +0200
+@@ -25,9 +25,9 @@
+ /*
+ * BlueZ HCI virtual device driver.
+ *
+- * $Id: hci_vhci.c,v 1.3 2001/08/03 04:19:50 maxk Exp $
++ * $Id: hci_vhci.c,v 1.3 2002/04/17 17:37:20 maxk Exp $
+ */
+-#define VERSION "1.0"
++#define VERSION "1.1"
+
+ #include <linux/config.h>
+ #include <linux/module.h>
+@@ -49,43 +49,56 @@
+ #include <asm/uaccess.h>
+
+ #include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+ #include <net/bluetooth/hci_core.h>
+-#include <net/bluetooth/hci_vhci.h>
++#include "hci_vhci.h"
+
+ /* HCI device part */
+
+-int hci_vhci_open(struct hci_dev *hdev)
++static int hci_vhci_open(struct hci_dev *hdev)
+ {
+- hdev->flags |= HCI_RUNNING;
++ set_bit(HCI_RUNNING, &hdev->flags);
+ return 0;
+ }
+
+-int hci_vhci_flush(struct hci_dev *hdev)
++static int hci_vhci_flush(struct hci_dev *hdev)
+ {
+ struct hci_vhci_struct *hci_vhci = (struct hci_vhci_struct *) hdev->driver_data;
+ skb_queue_purge(&hci_vhci->readq);
+ return 0;
+ }
+
+-int hci_vhci_close(struct hci_dev *hdev)
++static int hci_vhci_close(struct hci_dev *hdev)
+ {
+- hdev->flags &= ~HCI_RUNNING;
++ if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
++
+ hci_vhci_flush(hdev);
+ return 0;
+ }
+
+-int hci_vhci_send_frame(struct sk_buff *skb)
++static void hci_vhci_destruct(struct hci_dev *hdev)
++{
++ struct hci_vhci_struct *vhci;
++
++ if (!hdev) return;
++
++ vhci = (struct hci_vhci_struct *) hdev->driver_data;
++ kfree(vhci);
++
++ MOD_DEC_USE_COUNT;
++}
++
++static int hci_vhci_send_frame(struct sk_buff *skb)
+ {
+ struct hci_dev* hdev = (struct hci_dev *) skb->dev;
+ struct hci_vhci_struct *hci_vhci;
+
+ if (!hdev) {
+- ERR("Frame for uknown device (hdev=NULL)");
++ BT_ERR("Frame for uknown device (hdev=NULL)");
+ return -ENODEV;
+ }
+
+- if (!(hdev->flags & HCI_RUNNING))
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
+ return -EBUSY;
+
+ hci_vhci = (struct hci_vhci_struct *) hdev->driver_data;
+@@ -188,7 +201,7 @@
+
+ add_wait_queue(&hci_vhci->read_wait, &wait);
+ while (count) {
+- current->state = TASK_INTERRUPTIBLE;
++ set_current_state(TASK_INTERRUPTIBLE);
+
+ /* Read frames from device queue */
+ if (!(skb = skb_dequeue(&hci_vhci->readq))) {
+@@ -214,8 +227,7 @@
+ kfree_skb(skb);
+ break;
+ }
+-
+- current->state = TASK_RUNNING;
++ set_current_state(TASK_RUNNING);
+ remove_wait_queue(&hci_vhci->read_wait, &wait);
+
+ return ret;
+@@ -270,11 +282,13 @@
+ hdev->close = hci_vhci_close;
+ hdev->flush = hci_vhci_flush;
+ hdev->send = hci_vhci_send_frame;
++ hdev->destruct = hci_vhci_destruct;
+
+ if (hci_register_dev(hdev) < 0) {
+ kfree(hci_vhci);
+ return -EBUSY;
+ }
++ MOD_INC_USE_COUNT;
+
+ file->private_data = hci_vhci;
+ return 0;
+@@ -285,12 +299,10 @@
+ struct hci_vhci_struct *hci_vhci = (struct hci_vhci_struct *) file->private_data;
+
+ if (hci_unregister_dev(&hci_vhci->hdev) < 0) {
+- ERR("Can't unregister HCI device %s", hci_vhci->hdev.name);
++ BT_ERR("Can't unregister HCI device %s", hci_vhci->hdev.name);
+ }
+
+- kfree(hci_vhci);
+ file->private_data = NULL;
+-
+ return 0;
+ }
+
+@@ -315,12 +327,12 @@
+
+ int __init hci_vhci_init(void)
+ {
+- INF("BlueZ VHCI driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
++ BT_INFO("BlueZ VHCI driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
+ VERSION);
+- INF("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
++ BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
+
+ if (misc_register(&hci_vhci_miscdev)) {
+- ERR("Can't register misc device %d\n", VHCI_MINOR);
++ BT_ERR("Can't register misc device %d\n", VHCI_MINOR);
+ return -EIO;
+ }
+
+@@ -337,4 +349,4 @@
+
+ MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
+ MODULE_DESCRIPTION("BlueZ VHCI driver ver " VERSION);
+-MODULE_LICENSE("GPL");
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/drivers/bluetooth/hci_vhci.h linux-2.4.18-mh15/drivers/bluetooth/hci_vhci.h
+--- linux-2.4.18/drivers/bluetooth/hci_vhci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_vhci.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,50 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_vhci.h,v 1.1.1.1 2002/03/08 21:03:15 maxk Exp $
++ */
++
++#ifndef __HCI_VHCI_H
++#define __HCI_VHCI_H
++
++#ifdef __KERNEL__
++
++struct hci_vhci_struct {
++ struct hci_dev hdev;
++ __u32 flags;
++ wait_queue_head_t read_wait;
++ struct sk_buff_head readq;
++ struct fasync_struct *fasync;
++};
++
++/* VHCI device flags */
++#define VHCI_FASYNC 0x0010
++
++#endif /* __KERNEL__ */
++
++#define VHCI_DEV "/dev/vhci"
++#define VHCI_MINOR 250
++
++#endif /* __HCI_VHCI_H */
+diff -urN linux-2.4.18/drivers/bluetooth/Makefile linux-2.4.18-mh15/drivers/bluetooth/Makefile
+--- linux-2.4.18/drivers/bluetooth/Makefile 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/drivers/bluetooth/Makefile 2004-08-01 16:26:23.000000000 +0200
+@@ -1,11 +1,27 @@
+ #
+-# Makefile for Bluetooth HCI device drivers.
++# Makefile for the Linux Bluetooth HCI device drivers
+ #
+
+ O_TARGET := bluetooth.o
+
++list-multi := hci_uart.o
++
+ obj-$(CONFIG_BLUEZ_HCIUSB) += hci_usb.o
+-obj-$(CONFIG_BLUEZ_HCIUART) += hci_uart.o
+ obj-$(CONFIG_BLUEZ_HCIVHCI) += hci_vhci.o
+
++obj-$(CONFIG_BLUEZ_HCIUART) += hci_uart.o
++uart-y := hci_ldisc.o
++uart-$(CONFIG_BLUEZ_HCIUART_H4) += hci_h4.o
++uart-$(CONFIG_BLUEZ_HCIUART_BCSP) += hci_bcsp.o
++
++obj-$(CONFIG_BLUEZ_HCIBFUSB) += bfusb.o
++
++obj-$(CONFIG_BLUEZ_HCIDTL1) += dtl1_cs.o
++obj-$(CONFIG_BLUEZ_HCIBT3C) += bt3c_cs.o
++obj-$(CONFIG_BLUEZ_HCIBLUECARD) += bluecard_cs.o
++obj-$(CONFIG_BLUEZ_HCIBTUART) += btuart_cs.o
++
+ include $(TOPDIR)/Rules.make
++
++hci_uart.o: $(uart-y)
++ $(LD) -r -o $@ $(uart-y)
+diff -urN linux-2.4.18/drivers/bluetooth/Makefile.lib linux-2.4.18-mh15/drivers/bluetooth/Makefile.lib
+--- linux-2.4.18/drivers/bluetooth/Makefile.lib 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/Makefile.lib 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,2 @@
++obj-$(CONFIG_BLUEZ_HCIBFUSB) += firmware_class.o
++obj-$(CONFIG_BLUEZ_HCIBT3C) += firmware_class.o
+diff -urN linux-2.4.18/drivers/char/pcmcia/serial_cs.c linux-2.4.18-mh15/drivers/char/pcmcia/serial_cs.c
+--- linux-2.4.18/drivers/char/pcmcia/serial_cs.c 2001-12-21 18:41:54.000000000 +0100
++++ linux-2.4.18-mh15/drivers/char/pcmcia/serial_cs.c 2004-08-01 16:26:23.000000000 +0200
+@@ -2,7 +2,7 @@
+
+ A driver for PCMCIA serial devices
+
+- serial_cs.c 1.128 2001/10/18 12:18:35
++ serial_cs.c 1.138 2002/10/25 06:24:52
+
+ The contents of this file are subject to the Mozilla Public
+ License Version 1.1 (the "License"); you may not use this file
+@@ -69,14 +69,14 @@
+ static int irq_list[4] = { -1 };
+ MODULE_PARM(irq_list, "1-4i");
+
+-/* Enable the speaker? */
+-INT_MODULE_PARM(do_sound, 1);
++INT_MODULE_PARM(do_sound, 1); /* Enable the speaker? */
++INT_MODULE_PARM(buggy_uart, 0); /* Skip strict UART tests? */
+
+ #ifdef PCMCIA_DEBUG
+ INT_MODULE_PARM(pc_debug, PCMCIA_DEBUG);
+ #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
+ static char *version =
+-"serial_cs.c 1.128 2001/10/18 12:18:35 (David Hinds)";
++"serial_cs.c 1.138 2002/10/25 06:24:52 (David Hinds)";
+ #else
+ #define DEBUG(n, args...)
+ #endif
+@@ -95,6 +95,7 @@
+ { MANFID_OMEGA, PRODID_OMEGA_QSP_100, 4 },
+ { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS232, 2 },
+ { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS232_D1, 2 },
++ { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS232_D2, 2 },
+ { MANFID_QUATECH, PRODID_QUATECH_QUAD_RS232, 4 },
+ { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS422, 2 },
+ { MANFID_QUATECH, PRODID_QUATECH_QUAD_RS422, 4 },
+@@ -148,7 +149,7 @@
+ client_reg_t client_reg;
+ dev_link_t *link;
+ int i, ret;
+-
++
+ DEBUG(0, "serial_attach()\n");
+
+ /* Create new serial device */
+@@ -160,7 +161,7 @@
+ link->release.function = &serial_release;
+ link->release.data = (u_long)link;
+ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
+- link->io.NumPorts1 = 8;
++ link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
+ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
+ link->irq.IRQInfo1 = IRQ_INFO2_VALID|IRQ_LEVEL_ID;
+ if (irq_list[0] == -1)
+@@ -169,13 +170,12 @@
+ for (i = 0; i < 4; i++)
+ link->irq.IRQInfo2 |= 1 << irq_list[i];
+ link->conf.Attributes = CONF_ENABLE_IRQ;
+- link->conf.Vcc = 50;
+ if (do_sound) {
+ link->conf.Attributes |= CONF_ENABLE_SPKR;
+ link->conf.Status = CCSR_AUDIO_ENA;
+ }
+ link->conf.IntType = INT_MEMORY_AND_IO;
+-
++
+ /* Register with Card Services */
+ link->next = dev_list;
+ dev_list = link;
+@@ -194,7 +194,7 @@
+ serial_detach(link);
+ return NULL;
+ }
+-
++
+ return link;
+ } /* serial_attach */
+
+@@ -214,7 +214,7 @@
+ int ret;
+
+ DEBUG(0, "serial_detach(0x%p)\n", link);
+-
++
+ /* Locate device structure */
+ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
+ if (*linkp == link) break;
+@@ -224,17 +224,17 @@
+ del_timer(&link->release);
+ if (link->state & DEV_CONFIG)
+ serial_release((u_long)link);
+-
++
+ if (link->handle) {
+ ret = CardServices(DeregisterClient, link->handle);
+ if (ret != CS_SUCCESS)
+ cs_error(link->handle, DeregisterClient, ret);
+ }
+-
++
+ /* Unlink device structure, free bits */
+ *linkp = link->next;
+ kfree(info);
+-
++
+ } /* serial_detach */
+
+ /*====================================================================*/
+@@ -243,18 +243,20 @@
+ {
+ struct serial_struct serial;
+ int line;
+-
++
+ memset(&serial, 0, sizeof(serial));
+ serial.port = port;
+ serial.irq = irq;
+ serial.flags = ASYNC_SKIP_TEST | ASYNC_SHARE_IRQ;
++ if (buggy_uart)
++ serial.flags |= ASYNC_BUGGY_UART;
+ line = register_serial(&serial);
+ if (line < 0) {
+ printk(KERN_NOTICE "serial_cs: register_serial() at 0x%04lx,"
+ " irq %d failed\n", (u_long)serial.port, serial.irq);
+ return -1;
+ }
+-
++
+ info->line[info->ndev] = line;
+ sprintf(info->node[info->ndev].dev_name, "ttyS%d", line);
+ info->node[info->ndev].major = TTY_MAJOR;
+@@ -262,7 +264,7 @@
+ if (info->ndev > 0)
+ info->node[info->ndev-1].next = &info->node[info->ndev];
+ info->ndev++;
+-
++
+ return 0;
+ }
+
+@@ -313,7 +315,10 @@
+ return setup_serial(info, port, config.AssignedIRQ);
+ }
+ link->conf.Vcc = config.Vcc;
+-
++
++ link->io.NumPorts1 = 8;
++ link->io.NumPorts2 = 0;
++
+ /* First pass: look for a config entry that looks normal. */
+ tuple.TupleData = (cisdata_t *)buf;
+ tuple.TupleOffset = 0; tuple.TupleDataMax = 255;
+@@ -340,7 +345,7 @@
+ i = next_tuple(handle, &tuple, &parse);
+ }
+ }
+-
++
+ /* Second pass: try to find an entry that isn't picky about
+ its base address, then try to grab any standard serial port
+ address, and finally try to get any free port. */
+@@ -352,8 +357,7 @@
+ for (j = 0; j < 5; j++) {
+ link->io.BasePort1 = base[j];
+ link->io.IOAddrLines = base[j] ? 16 : 3;
+- i = CardServices(RequestIO, link->handle,
+- &link->io);
++ i = CardServices(RequestIO, link->handle, &link->io);
+ if (i == CS_SUCCESS) goto found_port;
+ }
+ }
+@@ -365,7 +369,7 @@
+ cs_error(link->handle, RequestIO, i);
+ return -1;
+ }
+-
++
+ i = CardServices(RequestIRQ, link->handle, &link->irq);
+ if (i != CS_SUCCESS) {
+ cs_error(link->handle, RequestIRQ, i);
+@@ -390,8 +394,12 @@
+ u_char buf[256];
+ cisparse_t parse;
+ cistpl_cftable_entry_t *cf = &parse.cftable_entry;
++ config_info_t config;
+ int i, base2 = 0;
+
++ CardServices(GetConfigurationInfo, handle, &config);
++ link->conf.Vcc = config.Vcc;
++
+ tuple.TupleData = (cisdata_t *)buf;
+ tuple.TupleOffset = 0; tuple.TupleDataMax = 255;
+ tuple.Attributes = 0;
+@@ -433,12 +441,12 @@
+ i = next_tuple(handle, &tuple, &parse);
+ }
+ }
+-
++
+ if (i != CS_SUCCESS) {
+- cs_error(link->handle, RequestIO, i);
+- return -1;
++ /* At worst, try to configure as a single port */
++ return simple_config(link);
+ }
+-
++
+ i = CardServices(RequestIRQ, link->handle, &link->irq);
+ if (i != CS_SUCCESS) {
+ cs_error(link->handle, RequestIRQ, i);
+@@ -454,14 +462,27 @@
+ cs_error(link->handle, RequestConfiguration, i);
+ return -1;
+ }
+-
++
++ /* The Oxford Semiconductor OXCF950 cards are in fact single-port:
++ 8 registers are for the UART, the others are extra registers */
++ if (info->manfid == MANFID_OXSEMI) {
++ if (cf->index == 1 || cf->index == 3) {
++ setup_serial(info, base2, link->irq.AssignedIRQ);
++ outb(12,link->io.BasePort1+1);
++ } else {
++ setup_serial(info, link->io.BasePort1, link->irq.AssignedIRQ);
++ outb(12,base2+1);
++ }
++ return 0;
++ }
++
+ setup_serial(info, link->io.BasePort1, link->irq.AssignedIRQ);
+ /* The Nokia cards are not really multiport cards */
+ if (info->manfid == MANFID_NOKIA)
+ return 0;
+ for (i = 0; i < info->multi-1; i++)
+ setup_serial(info, base2+(8*i), link->irq.AssignedIRQ);
+-
++
+ return 0;
+ }
+
+@@ -500,7 +521,7 @@
+ }
+ link->conf.ConfigBase = parse.config.base;
+ link->conf.Present = parse.config.rmask[0];
+-
++
+ /* Configure card */
+ link->state |= DEV_CONFIG;
+
+@@ -508,8 +529,8 @@
+ tuple.DesiredTuple = CISTPL_LONGLINK_MFC;
+ tuple.Attributes = TUPLE_RETURN_COMMON | TUPLE_RETURN_LINK;
+ info->multi = (first_tuple(handle, &tuple, &parse) == CS_SUCCESS);
+-
+- /* Is this a multiport card? */
++
++ /* Scan list of known multiport card ID's */
+ tuple.DesiredTuple = CISTPL_MANFID;
+ if (first_tuple(handle, &tuple, &parse) == CS_SUCCESS) {
+ info->manfid = le16_to_cpu(buf[0]);
+@@ -537,15 +558,15 @@
+ info->multi = 2;
+ }
+ }
+-
++
+ if (info->multi > 1)
+ multi_config(link);
+ else
+ simple_config(link);
+-
++
+ if (info->ndev == 0)
+ goto failed;
+-
++
+ if (info->manfid == MANFID_IBM) {
+ conf_reg_t reg = { 0, CS_READ, 0x800, 0 };
+ CS_CHECK(AccessConfigurationRegister, link->handle, &reg);
+@@ -562,6 +583,7 @@
+ cs_error(link->handle, last_fn, last_ret);
+ failed:
+ serial_release((u_long)link);
++ link->state &= ~DEV_CONFIG_PENDING;
+
+ } /* serial_config */
+
+@@ -569,7 +591,7 @@
+
+ After a card is removed, serial_release() will unregister the net
+ device, and release the PCMCIA configuration.
+-
++
+ ======================================================================*/
+
+ void serial_release(u_long arg)
+@@ -577,7 +599,7 @@
+ dev_link_t *link = (dev_link_t *)arg;
+ serial_info_t *info = link->priv;
+ int i;
+-
++
+ DEBUG(0, "serial_release(0x%p)\n", link);
+
+ for (i = 0; i < info->ndev; i++) {
+@@ -590,7 +612,7 @@
+ CardServices(ReleaseIO, link->handle, &link->io);
+ CardServices(ReleaseIRQ, link->handle, &link->irq);
+ }
+-
++
+ link->state &= ~DEV_CONFIG;
+
+ } /* serial_release */
+@@ -601,7 +623,7 @@
+ stuff to run after an event is received. A CARD_REMOVAL event
+ also sets some flags to discourage the serial drivers from
+ talking to the ports.
+-
++
+ ======================================================================*/
+
+ static int serial_event(event_t event, int priority,
+@@ -609,9 +631,9 @@
+ {
+ dev_link_t *link = args->client_data;
+ serial_info_t *info = link->priv;
+-
++
+ DEBUG(1, "serial_event(0x%06x)\n", event);
+-
++
+ switch (event) {
+ case CS_EVENT_CARD_REMOVAL:
+ link->state &= ~DEV_PRESENT;
+@@ -650,7 +672,7 @@
+ if (serv.Revision != CS_RELEASE_CODE) {
+ printk(KERN_NOTICE "serial_cs: Card Services release "
+ "does not match!\n");
+- return -1;
++ return -EINVAL;
+ }
+ register_pccard_driver(&dev_info, &serial_attach, &serial_detach);
+ return 0;
+diff -urN linux-2.4.18/drivers/input/Config.in linux-2.4.18-mh15/drivers/input/Config.in
+--- linux-2.4.18/drivers/input/Config.in 2001-09-13 00:34:06.000000000 +0200
++++ linux-2.4.18-mh15/drivers/input/Config.in 2004-08-01 16:26:23.000000000 +0200
+@@ -14,5 +14,6 @@
+ fi
+ dep_tristate ' Joystick support' CONFIG_INPUT_JOYDEV $CONFIG_INPUT
+ dep_tristate ' Event interface support' CONFIG_INPUT_EVDEV $CONFIG_INPUT
++dep_tristate ' User level driver support' CONFIG_INPUT_UINPUT $CONFIG_INPUT
+
+ endmenu
+diff -urN linux-2.4.18/drivers/input/keybdev.c linux-2.4.18-mh15/drivers/input/keybdev.c
+--- linux-2.4.18/drivers/input/keybdev.c 2001-10-11 18:14:32.000000000 +0200
++++ linux-2.4.18-mh15/drivers/input/keybdev.c 2004-08-01 16:26:23.000000000 +0200
+@@ -154,16 +154,18 @@
+
+ static struct input_handler keybdev_handler;
+
++static unsigned int ledstate = 0xff;
++
+ void keybdev_ledfunc(unsigned int led)
+ {
+ struct input_handle *handle;
+
+- for (handle = keybdev_handler.handle; handle; handle = handle->hnext) {
++ ledstate = led;
+
++ for (handle = keybdev_handler.handle; handle; handle = handle->hnext) {
+ input_event(handle->dev, EV_LED, LED_SCROLLL, !!(led & 0x01));
+ input_event(handle->dev, EV_LED, LED_NUML, !!(led & 0x02));
+ input_event(handle->dev, EV_LED, LED_CAPSL, !!(led & 0x04));
+-
+ }
+ }
+
+@@ -202,6 +204,12 @@
+
+ // printk(KERN_INFO "keybdev.c: Adding keyboard: input%d\n", dev->number);
+
++ if (ledstate != 0xff) {
++ input_event(dev, EV_LED, LED_SCROLLL, !!(ledstate & 0x01));
++ input_event(dev, EV_LED, LED_NUML, !!(ledstate & 0x02));
++ input_event(dev, EV_LED, LED_CAPSL, !!(ledstate & 0x04));
++ }
++
+ return handle;
+ }
+
+diff -urN linux-2.4.18/drivers/input/Makefile linux-2.4.18-mh15/drivers/input/Makefile
+--- linux-2.4.18/drivers/input/Makefile 2000-12-29 23:07:22.000000000 +0100
++++ linux-2.4.18-mh15/drivers/input/Makefile 2004-08-01 16:26:23.000000000 +0200
+@@ -24,6 +24,7 @@
+ obj-$(CONFIG_INPUT_MOUSEDEV) += mousedev.o
+ obj-$(CONFIG_INPUT_JOYDEV) += joydev.o
+ obj-$(CONFIG_INPUT_EVDEV) += evdev.o
++obj-$(CONFIG_INPUT_UINPUT) += uinput.o
+
+ # The global Rules.make.
+
+diff -urN linux-2.4.18/drivers/input/uinput.c linux-2.4.18-mh15/drivers/input/uinput.c
+--- linux-2.4.18/drivers/input/uinput.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/input/uinput.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,428 @@
++/*
++ * User level driver support for input subsystem
++ *
++ * Heavily based on evdev.c by Vojtech Pavlik
++ *
++ * 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
++ *
++ * Author: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>
++ *
++ * Changes/Revisions:
++ * 0.1 20/06/2002
++ * - first public version
++ */
++
++#include <linux/poll.h>
++#include <linux/slab.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/input.h>
++#include <linux/smp_lock.h>
++#include <linux/fs.h>
++#include <linux/miscdevice.h>
++#include <linux/uinput.h>
++
++static int uinput_dev_open(struct input_dev *dev)
++{
++ return 0;
++}
++
++static void uinput_dev_close(struct input_dev *dev)
++{
++}
++
++static int uinput_dev_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
++{
++ struct uinput_device *udev;
++
++ udev = (struct uinput_device *)dev->private;
++
++ udev->buff[udev->head].type = type;
++ udev->buff[udev->head].code = code;
++ udev->buff[udev->head].value = value;
++ do_gettimeofday(&udev->buff[udev->head].time);
++ udev->head = (udev->head + 1) % UINPUT_BUFFER_SIZE;
++
++ wake_up_interruptible(&udev->waitq);
++
++ return 0;
++}
++
++static int uinput_dev_upload_effect(struct input_dev *dev, struct ff_effect *effect)
++{
++ return 0;
++}
++
++static int uinput_dev_erase_effect(struct input_dev *dev, int effect_id)
++{
++ return 0;
++}
++
++static int uinput_create_device(struct uinput_device *udev)
++{
++ if (!udev->dev->name) {
++ printk(KERN_DEBUG "%s: write device info first\n", UINPUT_NAME);
++ return -EINVAL;
++ }
++
++ udev->dev->open = uinput_dev_open;
++ udev->dev->close = uinput_dev_close;
++ udev->dev->event = uinput_dev_event;
++ udev->dev->upload_effect = uinput_dev_upload_effect;
++ udev->dev->erase_effect = uinput_dev_erase_effect;
++ udev->dev->private = udev;
++
++ init_waitqueue_head(&(udev->waitq));
++
++ input_register_device(udev->dev);
++
++ set_bit(UIST_CREATED, &(udev->state));
++
++ return 0;
++}
++
++static int uinput_destroy_device(struct uinput_device *udev)
++{
++ if (!test_bit(UIST_CREATED, &(udev->state))) {
++ printk(KERN_WARNING "%s: create the device first\n", UINPUT_NAME);
++ return -EINVAL;
++ }
++
++ input_unregister_device(udev->dev);
++
++ clear_bit(UIST_CREATED, &(udev->state));
++
++ return 0;
++}
++
++static int uinput_open(struct inode *inode, struct file *file)
++{
++ struct uinput_device *newdev;
++ struct input_dev *newinput;
++
++ newdev = kmalloc(sizeof(struct uinput_device), GFP_KERNEL);
++ if (!newdev)
++ goto error;
++ memset(newdev, 0, sizeof(struct uinput_device));
++
++ newinput = kmalloc(sizeof(struct input_dev), GFP_KERNEL);
++ if (!newinput)
++ goto cleanup;
++ memset(newinput, 0, sizeof(struct input_dev));
++
++ newdev->dev = newinput;
++
++ file->private_data = newdev;
++
++ return 0;
++cleanup:
++ kfree(newdev);
++error:
++ return -ENOMEM;
++}
++
++static int uinput_validate_absbits(struct input_dev *dev)
++{
++ unsigned int cnt;
++ int retval = 0;
++
++ for (cnt = 0; cnt < ABS_MAX; cnt++) {
++ if (!test_bit(cnt, dev->absbit))
++ continue;
++
++ if (/*!dev->absmin[cnt] || !dev->absmax[cnt] || */
++ (dev->absmax[cnt] <= dev->absmin[cnt])) {
++ printk(KERN_DEBUG
++ "%s: invalid abs[%02x] min:%d max:%d\n",
++ UINPUT_NAME, cnt,
++ dev->absmin[cnt], dev->absmax[cnt]);
++ retval = -EINVAL;
++ break;
++ }
++
++ if ((dev->absflat[cnt] < dev->absmin[cnt]) ||
++ (dev->absflat[cnt] > dev->absmax[cnt])) {
++ printk(KERN_DEBUG
++ "%s: absflat[%02x] out of range: %d "
++ "(min:%d/max:%d)\n",
++ UINPUT_NAME, cnt, dev->absflat[cnt],
++ dev->absmin[cnt], dev->absmax[cnt]);
++ retval = -EINVAL;
++ break;
++ }
++ }
++ return retval;
++}
++
++static int uinput_alloc_device(struct file *file, const char *buffer, size_t count)
++{
++ struct uinput_user_dev *user_dev;
++ struct input_dev *dev;
++ struct uinput_device *udev;
++ int size,
++ retval;
++
++ retval = count;
++
++ udev = (struct uinput_device *)file->private_data;
++ dev = udev->dev;
++
++ user_dev = kmalloc(sizeof(*user_dev), GFP_KERNEL);
++ if (!user_dev) {
++ retval = -ENOMEM;
++ goto exit;
++ }
++
++ if (copy_from_user(user_dev, buffer, sizeof(struct uinput_user_dev))) {
++ retval = -EFAULT;
++ goto exit;
++ }
++
++ if (NULL != dev->name)
++ kfree(dev->name);
++
++ size = strnlen(user_dev->name, UINPUT_MAX_NAME_SIZE) + 1;
++ dev->name = kmalloc(size, GFP_KERNEL);
++ if (!dev->name) {
++ retval = -ENOMEM;
++ goto exit;
++ }
++
++ strncpy(dev->name, user_dev->name, size);
++ dev->idbus = user_dev->idbus;
++ dev->idvendor = user_dev->idvendor;
++ dev->idproduct = user_dev->idproduct;
++ dev->idversion = user_dev->idversion;
++ dev->ff_effects_max = user_dev->ff_effects_max;
++
++ size = sizeof(int) * (ABS_MAX + 1);
++ memcpy(dev->absmax, user_dev->absmax, size);
++ memcpy(dev->absmin, user_dev->absmin, size);
++ memcpy(dev->absfuzz, user_dev->absfuzz, size);
++ memcpy(dev->absflat, user_dev->absflat, size);
++
++ /* check if absmin/absmax/absfuzz/absflat are filled as
++ * told in Documentation/input/input-programming.txt */
++ if (test_bit(EV_ABS, dev->evbit)) {
++ retval = uinput_validate_absbits(dev);
++ if (retval < 0)
++ kfree(dev->name);
++ }
++
++exit:
++ kfree(user_dev);
++ return retval;
++}
++
++static ssize_t uinput_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
++{
++ struct uinput_device *udev = file->private_data;
++
++ if (test_bit(UIST_CREATED, &(udev->state))) {
++ struct input_event ev;
++
++ if (copy_from_user(&ev, buffer, sizeof(struct input_event)))
++ return -EFAULT;
++ input_event(udev->dev, ev.type, ev.code, ev.value);
++ }
++ else
++ count = uinput_alloc_device(file, buffer, count);
++
++ return count;
++}
++
++static ssize_t uinput_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
++{
++ struct uinput_device *udev = file->private_data;
++ int retval = 0;
++
++ if (!test_bit(UIST_CREATED, &(udev->state)))
++ return -ENODEV;
++
++ if ((udev->head == udev->tail) && (file->f_flags & O_NONBLOCK))
++ return -EAGAIN;
++
++ retval = wait_event_interruptible(udev->waitq,
++ (udev->head != udev->tail) ||
++ !test_bit(UIST_CREATED, &(udev->state)));
++
++ if (retval)
++ return retval;
++
++ if (!test_bit(UIST_CREATED, &(udev->state)))
++ return -ENODEV;
++
++ while ((udev->head != udev->tail) &&
++ (retval + sizeof(struct input_event) <= count)) {
++ if (copy_to_user(buffer + retval, &(udev->buff[udev->tail]),
++ sizeof(struct input_event))) return -EFAULT;
++ udev->tail = (udev->tail + 1) % UINPUT_BUFFER_SIZE;
++ retval += sizeof(struct input_event);
++ }
++
++ return retval;
++}
++
++static unsigned int uinput_poll(struct file *file, poll_table *wait)
++{
++ struct uinput_device *udev = file->private_data;
++
++ poll_wait(file, &udev->waitq, wait);
++
++ if (udev->head != udev->tail)
++ return POLLIN | POLLRDNORM;
++
++ return 0;
++}
++
++static int uinput_burn_device(struct uinput_device *udev)
++{
++ if (test_bit(UIST_CREATED, &(udev->state)))
++ uinput_destroy_device(udev);
++
++ kfree(udev->dev);
++ kfree(udev);
++
++ return 0;
++}
++
++static int uinput_close(struct inode *inode, struct file *file)
++{
++ return uinput_burn_device((struct uinput_device *)file->private_data);
++}
++
++static int uinput_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
++{
++ int retval = 0;
++ struct uinput_device *udev;
++
++ udev = (struct uinput_device *)file->private_data;
++
++ /* device attributes can not be changed after the device is created */
++ if (cmd >= UI_SET_EVBIT && test_bit(UIST_CREATED, &(udev->state)))
++ return -EINVAL;
++
++ switch (cmd) {
++ case UI_DEV_CREATE:
++ retval = uinput_create_device(udev);
++ break;
++
++ case UI_DEV_DESTROY:
++ retval = uinput_destroy_device(udev);
++ break;
++
++ case UI_SET_EVBIT:
++ if (arg > EV_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->evbit);
++ break;
++
++ case UI_SET_KEYBIT:
++ if (arg > KEY_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->keybit);
++ break;
++
++ case UI_SET_RELBIT:
++ if (arg > REL_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->relbit);
++ break;
++
++ case UI_SET_ABSBIT:
++ if (arg > ABS_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->absbit);
++ break;
++
++ case UI_SET_MSCBIT:
++ if (arg > MSC_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->mscbit);
++ break;
++
++ case UI_SET_LEDBIT:
++ if (arg > LED_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->ledbit);
++ break;
++
++ case UI_SET_SNDBIT:
++ if (arg > SND_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->sndbit);
++ break;
++
++ case UI_SET_FFBIT:
++ if (arg > FF_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->ffbit);
++ break;
++
++ default:
++ retval = -EFAULT;
++ }
++ return retval;
++}
++
++struct file_operations uinput_fops = {
++ owner: THIS_MODULE,
++ open: uinput_open,
++ release: uinput_close,
++ read: uinput_read,
++ write: uinput_write,
++ poll: uinput_poll,
++ ioctl: uinput_ioctl,
++};
++
++static struct miscdevice uinput_misc = {
++ fops: &uinput_fops,
++ minor: UINPUT_MINOR,
++ name: UINPUT_NAME,
++};
++
++static int __init uinput_init(void)
++{
++ return misc_register(&uinput_misc);
++}
++
++static void __exit uinput_exit(void)
++{
++ misc_deregister(&uinput_misc);
++}
++
++MODULE_AUTHOR("Aristeu Sergio Rozanski Filho");
++MODULE_DESCRIPTION("User level driver support for input subsystem");
++MODULE_LICENSE("GPL");
++
++module_init(uinput_init);
++module_exit(uinput_exit);
++
+diff -urN linux-2.4.18/drivers/isdn/avmb1/capidrv.c linux-2.4.18-mh15/drivers/isdn/avmb1/capidrv.c
+--- linux-2.4.18/drivers/isdn/avmb1/capidrv.c 2001-12-21 18:41:54.000000000 +0100
++++ linux-2.4.18-mh15/drivers/isdn/avmb1/capidrv.c 2004-08-01 16:26:23.000000000 +0200
+@@ -514,13 +514,25 @@
+
+ static void send_message(capidrv_contr * card, _cmsg * cmsg)
+ {
+- struct sk_buff *skb;
+- size_t len;
++ struct sk_buff *skb;
++ size_t len;
++ u16 err;
++
+ capi_cmsg2message(cmsg, cmsg->buf);
+ len = CAPIMSG_LEN(cmsg->buf);
+ skb = alloc_skb(len, GFP_ATOMIC);
++ if(!skb) {
++ printk(KERN_ERR "no skb len(%d) memory\n", len);
++ return;
++ }
+ memcpy(skb_put(skb, len), cmsg->buf, len);
+- (*capifuncs->capi_put_message) (global.appid, skb);
++ err = (*capifuncs->capi_put_message) (global.appid, skb);
++ if (err) {
++ printk(KERN_WARNING "%s: capi_put_message error: %04x\n",
++ __FUNCTION__, err);
++ kfree_skb(skb);
++ return;
++ }
+ global.nsentctlpkt++;
+ }
+
+@@ -2179,10 +2191,10 @@
+ free_ncci(card, card->bchans[card->nbchan-1].nccip);
+ if (card->bchans[card->nbchan-1].plcip)
+ free_plci(card, card->bchans[card->nbchan-1].plcip);
+- if (card->plci_list)
+- printk(KERN_ERR "capidrv: bug in free_plci()\n");
+ card->nbchan--;
+ }
++ if (card->plci_list)
++ printk(KERN_ERR "capidrv: bug in free_plci()\n");
+ kfree(card->bchans);
+ card->bchans = 0;
+
+diff -urN linux-2.4.18/drivers/isdn/avmb1/kcapi.c linux-2.4.18-mh15/drivers/isdn/avmb1/kcapi.c
+--- linux-2.4.18/drivers/isdn/avmb1/kcapi.c 2001-12-21 18:41:54.000000000 +0100
++++ linux-2.4.18-mh15/drivers/isdn/avmb1/kcapi.c 2004-08-01 16:26:23.000000000 +0200
+@@ -545,7 +545,13 @@
+ static void notify_up(__u32 contr)
+ {
+ struct capi_interface_user *p;
++ __u16 appl;
+
++ for (appl = 1; appl <= CAPI_MAXAPPL; appl++) {
++ if (!VALID_APPLID(appl)) continue;
++ if (APPL(appl)->releasing) continue;
++ CARD(contr)->driver->register_appl(CARD(contr), appl, &APPL(appl)->rparam);
++ }
+ printk(KERN_NOTICE "kcapi: notify up contr %d\n", contr);
+ spin_lock(&capi_users_lock);
+ for (p = capi_users; p; p = p->next) {
+@@ -705,12 +711,16 @@
+ nextpp = &(*pp)->next;
+ }
+ }
+- APPL(appl)->releasing--;
+- if (APPL(appl)->releasing <= 0) {
+- APPL(appl)->signal = 0;
+- APPL_MARK_FREE(appl);
+- printk(KERN_INFO "kcapi: appl %d down\n", appl);
+- }
++ if (APPL(appl)->releasing) { /* only release if the application was marked for release */
++ printk(KERN_DEBUG "kcapi: appl %d releasing(%d)\n", appl, APPL(appl)->releasing);
++ APPL(appl)->releasing--;
++ if (APPL(appl)->releasing <= 0) {
++ APPL(appl)->signal = 0;
++ APPL_MARK_FREE(appl);
++ printk(KERN_INFO "kcapi: appl %d down\n", appl);
++ }
++ } else
++ printk(KERN_WARNING "kcapi: appl %d card%d released without request\n", appl, card->cnr);
+ }
+ /*
+ * ncci management
+@@ -863,16 +873,7 @@
+
+ static void controllercb_ready(struct capi_ctr * card)
+ {
+- __u16 appl;
+-
+ card->cardstate = CARD_RUNNING;
+-
+- for (appl = 1; appl <= CAPI_MAXAPPL; appl++) {
+- if (!VALID_APPLID(appl)) continue;
+- if (APPL(appl)->releasing) continue;
+- card->driver->register_appl(card, appl, &APPL(appl)->rparam);
+- }
+-
+ printk(KERN_NOTICE "kcapi: card %d \"%s\" ready.\n",
+ CARDNR(card), card->name);
+
+diff -urN linux-2.4.18/drivers/usb/Config.in linux-2.4.18-mh15/drivers/usb/Config.in
+--- linux-2.4.18/drivers/usb/Config.in 2002-02-25 20:38:07.000000000 +0100
++++ linux-2.4.18-mh15/drivers/usb/Config.in 2004-08-01 16:26:23.000000000 +0200
+@@ -31,7 +31,13 @@
+
+ comment 'USB Device Class drivers'
+ dep_tristate ' USB Audio support' CONFIG_USB_AUDIO $CONFIG_USB $CONFIG_SOUND
+-dep_tristate ' USB Bluetooth support (EXPERIMENTAL)' CONFIG_USB_BLUETOOTH $CONFIG_USB $CONFIG_EXPERIMENTAL
++if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
++ if [ "$CONFIG_BLUEZ" = "n" ]; then
++ dep_tristate ' USB Bluetooth support (EXPERIMENTAL)' CONFIG_USB_BLUETOOTH $CONFIG_USB
++ else
++ comment ' USB Bluetooth can only be used with disabled Bluetooth subsystem'
++ fi
++fi
+ if [ "$CONFIG_SCSI" = "n" ]; then
+ comment ' SCSI support is needed for USB Storage'
+ fi
+diff -urN linux-2.4.18/drivers/usb/hid-core.c linux-2.4.18-mh15/drivers/usb/hid-core.c
+--- linux-2.4.18/drivers/usb/hid-core.c 2001-12-21 18:41:55.000000000 +0100
++++ linux-2.4.18-mh15/drivers/usb/hid-core.c 2004-08-01 16:26:23.000000000 +0200
+@@ -217,6 +217,8 @@
+
+ offset = report->size;
+ report->size += parser->global.report_size * parser->global.report_count;
++ if (usages < parser->global.report_count)
++ usages = parser->global.report_count;
+
+ if (usages == 0)
+ return 0; /* ignore padding fields */
+diff -urN linux-2.4.18/include/linux/firmware.h linux-2.4.18-mh15/include/linux/firmware.h
+--- linux-2.4.18/include/linux/firmware.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/include/linux/firmware.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,20 @@
++#ifndef _LINUX_FIRMWARE_H
++#define _LINUX_FIRMWARE_H
++#include <linux/module.h>
++#include <linux/types.h>
++#define FIRMWARE_NAME_MAX 30
++struct firmware {
++ size_t size;
++ u8 *data;
++};
++int request_firmware (const struct firmware **fw, const char *name,
++ const char *device);
++int request_firmware_nowait (
++ struct module *module,
++ const char *name, const char *device, void *context,
++ void (*cont)(const struct firmware *fw, void *context));
++/* On 2.5 'device' is 'struct device *' */
++
++void release_firmware (const struct firmware *fw);
++void register_firmware (const char *name, const u8 *data, size_t size);
++#endif
+diff -urN linux-2.4.18/include/linux/input.h linux-2.4.18-mh15/include/linux/input.h
+--- linux-2.4.18/include/linux/input.h 2001-09-13 00:34:06.000000000 +0200
++++ linux-2.4.18-mh15/include/linux/input.h 2004-08-01 16:26:23.000000000 +0200
+@@ -468,6 +468,8 @@
+ #define BUS_PCI 0x01
+ #define BUS_ISAPNP 0x02
+ #define BUS_USB 0x03
++#define BUS_HIL 0x04
++#define BUS_BLUETOOTH 0x05
+
+ #define BUS_ISA 0x10
+ #define BUS_I8042 0x11
+diff -urN linux-2.4.18/include/linux/kernel.h linux-2.4.18-mh15/include/linux/kernel.h
+--- linux-2.4.18/include/linux/kernel.h 2002-02-25 20:38:13.000000000 +0100
++++ linux-2.4.18-mh15/include/linux/kernel.h 2004-08-01 16:26:23.000000000 +0200
+@@ -11,6 +11,7 @@
+ #include <linux/linkage.h>
+ #include <linux/stddef.h>
+ #include <linux/types.h>
++#include <linux/compiler.h>
+
+ /* Optimization barrier */
+ /* The "volatile" is due to gcc bugs */
+@@ -181,4 +182,6 @@
+ char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding: libc5 uses this.. */
+ };
+
+-#endif
++#define BUG_ON(condition) do { if (unlikely((condition)!=0)) BUG(); } while(0)
++
++#endif /* _LINUX_KERNEL_H */
+diff -urN linux-2.4.18/include/linux/net.h linux-2.4.18-mh15/include/linux/net.h
+--- linux-2.4.18/include/linux/net.h 2001-11-22 20:46:19.000000000 +0100
++++ linux-2.4.18-mh15/include/linux/net.h 2004-08-01 16:26:23.000000000 +0200
+@@ -139,6 +139,7 @@
+ extern int sock_recvmsg(struct socket *, struct msghdr *m, int len, int flags);
+ extern int sock_readv_writev(int type, struct inode * inode, struct file * file,
+ const struct iovec * iov, long count, long size);
++extern struct socket *sockfd_lookup(int fd, int *err);
+
+ extern int net_ratelimit(void);
+ extern unsigned long net_random(void);
+diff -urN linux-2.4.18/include/linux/uinput.h linux-2.4.18-mh15/include/linux/uinput.h
+--- linux-2.4.18/include/linux/uinput.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/include/linux/uinput.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,79 @@
++/*
++ * User level driver support for input subsystem
++ *
++ * Heavily based on evdev.c by Vojtech Pavlik
++ *
++ * 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
++ *
++ * Author: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>
++ *
++ * Changes/Revisions:
++ * 0.1 20/06/2002
++ * - first public version
++ */
++
++#ifndef __UINPUT_H_
++#define __UINPUT_H_
++
++#ifdef __KERNEL__
++#define UINPUT_MINOR 223
++#define UINPUT_NAME "uinput"
++#define UINPUT_BUFFER_SIZE 16
++
++/* state flags => bit index for {set|clear|test}_bit ops */
++#define UIST_CREATED 0
++
++struct uinput_device {
++ struct input_dev *dev;
++ unsigned long state;
++ wait_queue_head_t waitq;
++ unsigned char ready,
++ head,
++ tail;
++ struct input_event buff[UINPUT_BUFFER_SIZE];
++};
++#endif /* __KERNEL__ */
++
++/* ioctl */
++#define UINPUT_IOCTL_BASE 'U'
++#define UI_DEV_CREATE _IO(UINPUT_IOCTL_BASE, 1)
++#define UI_DEV_DESTROY _IO(UINPUT_IOCTL_BASE, 2)
++#define UI_SET_EVBIT _IOW(UINPUT_IOCTL_BASE, 100, int)
++#define UI_SET_KEYBIT _IOW(UINPUT_IOCTL_BASE, 101, int)
++#define UI_SET_RELBIT _IOW(UINPUT_IOCTL_BASE, 102, int)
++#define UI_SET_ABSBIT _IOW(UINPUT_IOCTL_BASE, 103, int)
++#define UI_SET_MSCBIT _IOW(UINPUT_IOCTL_BASE, 104, int)
++#define UI_SET_LEDBIT _IOW(UINPUT_IOCTL_BASE, 105, int)
++#define UI_SET_SNDBIT _IOW(UINPUT_IOCTL_BASE, 106, int)
++#define UI_SET_FFBIT _IOW(UINPUT_IOCTL_BASE, 107, int)
++
++#ifndef NBITS
++#define NBITS(x) ((((x)-1)/(sizeof(long)*8))+1)
++#endif /* NBITS */
++
++#define UINPUT_MAX_NAME_SIZE 80
++struct uinput_user_dev {
++ char name[UINPUT_MAX_NAME_SIZE];
++ unsigned short idbus;
++ unsigned short idvendor;
++ unsigned short idproduct;
++ unsigned short idversion;
++ int ff_effects_max;
++ int absmax[ABS_MAX + 1];
++ int absmin[ABS_MAX + 1];
++ int absfuzz[ABS_MAX + 1];
++ int absflat[ABS_MAX + 1];
++};
++#endif /* __UINPUT_H_ */
+diff -urN linux-2.4.18/include/net/bluetooth/bluetooth.h linux-2.4.18-mh15/include/net/bluetooth/bluetooth.h
+--- linux-2.4.18/include/net/bluetooth/bluetooth.h 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/include/net/bluetooth/bluetooth.h 2004-08-01 16:26:23.000000000 +0200
+@@ -23,7 +23,7 @@
+ */
+
+ /*
+- * $Id: bluetooth.h,v 1.6 2001/08/03 04:19:49 maxk Exp $
++ * $Id: bluetooth.h,v 1.9 2002/05/06 21:11:55 maxk Exp $
+ */
+
+ #ifndef __BLUETOOTH_H
+@@ -31,17 +31,64 @@
+
+ #include <asm/types.h>
+ #include <asm/byteorder.h>
++#include <linux/poll.h>
++#include <net/sock.h>
+
+ #ifndef AF_BLUETOOTH
+ #define AF_BLUETOOTH 31
+ #define PF_BLUETOOTH AF_BLUETOOTH
+ #endif
+
++/* Reserv for core and drivers use */
++#define BLUEZ_SKB_RESERVE 8
++
++#ifndef MIN
++#define MIN(a,b) ((a) < (b) ? (a) : (b))
++#endif
++
+ #define BTPROTO_L2CAP 0
+ #define BTPROTO_HCI 1
++#define BTPROTO_SCO 2
++#define BTPROTO_RFCOMM 3
++#define BTPROTO_BNEP 4
++#define BTPROTO_CMTP 5
++#define BTPROTO_HIDP 6
+
+ #define SOL_HCI 0
+ #define SOL_L2CAP 6
++#define SOL_SCO 17
++#define SOL_RFCOMM 18
++
++/* Debugging */
++#ifdef CONFIG_BLUEZ_DEBUG
++
++#define HCI_CORE_DEBUG 1
++#define HCI_SOCK_DEBUG 1
++#define HCI_UART_DEBUG 1
++#define HCI_USB_DEBUG 1
++//#define HCI_DATA_DUMP 1
++
++#define L2CAP_DEBUG 1
++#define SCO_DEBUG 1
++#define AF_BLUETOOTH_DEBUG 1
++
++#endif /* CONFIG_BLUEZ_DEBUG */
++
++extern void bluez_dump(char *pref, __u8 *buf, int count);
++
++#if __GNUC__ <= 2 && __GNUC_MINOR__ < 95
++#define __func__ __FUNCTION__
++#endif
++
++#define BT_INFO(fmt, arg...) printk(KERN_INFO fmt "\n" , ## arg)
++#define BT_DBG(fmt, arg...) printk(KERN_INFO "%s: " fmt "\n" , __func__ , ## arg)
++#define BT_ERR(fmt, arg...) printk(KERN_ERR "%s: " fmt "\n" , __func__ , ## arg)
++
++#ifdef HCI_DATA_DUMP
++#define BT_DMP(buf, len) bluez_dump(__func__, buf, len)
++#else
++#define BT_DMP(D...)
++#endif
+
+ /* Connection and socket states */
+ enum {
+@@ -50,6 +97,7 @@
+ BT_BOUND,
+ BT_LISTEN,
+ BT_CONNECT,
++ BT_CONNECT2,
+ BT_CONFIG,
+ BT_DISCONN,
+ BT_CLOSED
+@@ -66,7 +114,8 @@
+ __u8 b[6];
+ } __attribute__((packed)) bdaddr_t;
+
+-#define BDADDR_ANY ((bdaddr_t *)"\000\000\000\000\000")
++#define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})
++#define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}})
+
+ /* Copy, swap, convert BD Address */
+ static inline int bacmp(bdaddr_t *ba1, bdaddr_t *ba2)
+@@ -82,6 +131,91 @@
+ char *batostr(bdaddr_t *ba);
+ bdaddr_t *strtoba(char *str);
+
++/* Common socket structures and functions */
++
++#define bluez_pi(sk) ((struct bluez_pinfo *) &sk->protinfo)
++#define bluez_sk(pi) ((struct sock *) \
++ ((void *)pi - (unsigned long)(&((struct sock *)0)->protinfo)))
++
++struct bluez_pinfo {
++ bdaddr_t src;
++ bdaddr_t dst;
++
++ struct list_head accept_q;
++ struct sock *parent;
++};
++
++struct bluez_sock_list {
++ struct sock *head;
++ rwlock_t lock;
++};
++
++int bluez_sock_register(int proto, struct net_proto_family *ops);
++int bluez_sock_unregister(int proto);
++void bluez_sock_init(struct socket *sock, struct sock *sk);
++void bluez_sock_link(struct bluez_sock_list *l, struct sock *s);
++void bluez_sock_unlink(struct bluez_sock_list *l, struct sock *s);
++int bluez_sock_recvmsg(struct socket *sock, struct msghdr *msg, int len, int flags, struct scm_cookie *scm);
++uint bluez_sock_poll(struct file * file, struct socket *sock, poll_table *wait);
++int bluez_sock_wait_state(struct sock *sk, int state, unsigned long timeo);
++
++void bluez_accept_enqueue(struct sock *parent, struct sock *sk);
++struct sock * bluez_accept_dequeue(struct sock *parent, struct socket *newsock);
++
++/* Skb helpers */
++struct bluez_skb_cb {
++ int incomming;
++};
++#define bluez_cb(skb) ((struct bluez_skb_cb *)(skb->cb))
++
++static inline struct sk_buff *bluez_skb_alloc(unsigned int len, int how)
++{
++ struct sk_buff *skb;
++
++ if ((skb = alloc_skb(len + BLUEZ_SKB_RESERVE, how))) {
++ skb_reserve(skb, BLUEZ_SKB_RESERVE);
++ bluez_cb(skb)->incomming = 0;
++ }
++ return skb;
++}
++
++static inline struct sk_buff *bluez_skb_send_alloc(struct sock *sk, unsigned long len,
++ int nb, int *err)
++{
++ struct sk_buff *skb;
++
++ if ((skb = sock_alloc_send_skb(sk, len + BLUEZ_SKB_RESERVE, nb, err))) {
++ skb_reserve(skb, BLUEZ_SKB_RESERVE);
++ bluez_cb(skb)->incomming = 0;
++ }
++
++ return skb;
++}
++
++static inline int skb_frags_no(struct sk_buff *skb)
++{
++ register struct sk_buff *frag = skb_shinfo(skb)->frag_list;
++ register int n = 1;
++
++ for (; frag; frag=frag->next, n++);
++ return n;
++}
++
++int hci_core_init(void);
++int hci_core_cleanup(void);
++int hci_sock_init(void);
++int hci_sock_cleanup(void);
++
+ int bterr(__u16 code);
+
++#ifndef MODULE_LICENSE
++#define MODULE_LICENSE(x)
++#endif
++
++#ifndef list_for_each_safe
++#define list_for_each_safe(pos, n, head) \
++ for (pos = (head)->next, n = pos->next; pos != (head); \
++ pos = n, n = pos->next)
++#endif
++
+ #endif /* __BLUETOOTH_H */
+diff -urN linux-2.4.18/include/net/bluetooth/bluez.h linux-2.4.18-mh15/include/net/bluetooth/bluez.h
+--- linux-2.4.18/include/net/bluetooth/bluez.h 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/include/net/bluetooth/bluez.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,124 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * $Id: bluez.h,v 1.4 2001/08/03 04:19:49 maxk Exp $
+- */
+-
+-#ifndef __IF_BLUEZ_H
+-#define __IF_BLUEZ_H
+-
+-#include <net/sock.h>
+-
+-#define BLUEZ_MAX_PROTO 2
+-
+-/* Reserv for core and drivers use */
+-#define BLUEZ_SKB_RESERVE 8
+-
+-#ifndef MIN
+-#define MIN(a,b) ((a) < (b) ? (a) : (b))
+-#endif
+-
+-/* Debugging */
+-#ifdef BLUEZ_DEBUG
+-
+-#define HCI_CORE_DEBUG 1
+-#define HCI_SOCK_DEBUG 1
+-#define HCI_UART_DEBUG 1
+-#define HCI_USB_DEBUG 1
+-//#define HCI_DATA_DUMP 1
+-
+-#define L2CAP_DEBUG 1
+-
+-#endif /* BLUEZ_DEBUG */
+-
+-extern void bluez_dump(char *pref, __u8 *buf, int count);
+-
+-#define INF(fmt, arg...) printk(KERN_INFO fmt "\n" , ## arg)
+-#define DBG(fmt, arg...) printk(KERN_INFO __FUNCTION__ ": " fmt "\n" , ## arg)
+-#define ERR(fmt, arg...) printk(KERN_ERR __FUNCTION__ ": " fmt "\n" , ## arg)
+-
+-#ifdef HCI_DATA_DUMP
+-#define DMP(buf, len) bluez_dump(__FUNCTION__, buf, len)
+-#else
+-#define DMP(D...)
+-#endif
+-
+-/* ----- Sockets ------ */
+-struct bluez_sock_list {
+- struct sock *head;
+- rwlock_t lock;
+-};
+-
+-extern int bluez_sock_register(int proto, struct net_proto_family *ops);
+-extern int bluez_sock_unregister(int proto);
+-
+-extern void bluez_sock_link(struct bluez_sock_list *l, struct sock *s);
+-extern void bluez_sock_unlink(struct bluez_sock_list *l, struct sock *s);
+-
+-/* ----- SKB helpers ----- */
+-struct bluez_skb_cb {
+- int incomming;
+-};
+-#define bluez_cb(skb) ((struct bluez_skb_cb *)(skb->cb))
+-
+-static inline struct sk_buff *bluez_skb_alloc(unsigned int len, int how)
+-{
+- struct sk_buff *skb;
+-
+- if ((skb = alloc_skb(len + BLUEZ_SKB_RESERVE, how))) {
+- skb_reserve(skb, BLUEZ_SKB_RESERVE);
+- bluez_cb(skb)->incomming = 0;
+- }
+- return skb;
+-}
+-
+-static inline struct sk_buff *bluez_skb_send_alloc(struct sock *sk, unsigned long len,
+- int nb, int *err)
+-{
+- struct sk_buff *skb;
+-
+- if ((skb = sock_alloc_send_skb(sk, len + BLUEZ_SKB_RESERVE, nb, err))) {
+- skb_reserve(skb, BLUEZ_SKB_RESERVE);
+- bluez_cb(skb)->incomming = 0;
+- }
+-
+- return skb;
+-}
+-
+-static inline int skb_frags_no(struct sk_buff *skb)
+-{
+- register struct sk_buff *frag = skb_shinfo(skb)->frag_list;
+- register int n = 1;
+-
+- for (; frag; frag=frag->next, n++);
+- return n;
+-}
+-
+-extern int hci_core_init(void);
+-extern int hci_core_cleanup(void);
+-extern int hci_sock_init(void);
+-extern int hci_sock_cleanup(void);
+-
+-#endif /* __IF_BLUEZ_H */
+diff -urN linux-2.4.18/include/net/bluetooth/hci_core.h linux-2.4.18-mh15/include/net/bluetooth/hci_core.h
+--- linux-2.4.18/include/net/bluetooth/hci_core.h 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/include/net/bluetooth/hci_core.h 2004-08-01 16:26:23.000000000 +0200
+@@ -23,7 +23,7 @@
+ */
+
+ /*
+- * $Id: hci_core.h,v 1.11 2001/08/05 06:02:15 maxk Exp $
++ * $Id: hci_core.h,v 1.5 2002/06/27 04:56:30 maxk Exp $
+ */
+
+ #ifndef __HCI_CORE_H
+@@ -32,14 +32,12 @@
+ #include <net/bluetooth/hci.h>
+
+ /* HCI upper protocols */
+-#define HCI_MAX_PROTO 1
+ #define HCI_PROTO_L2CAP 0
++#define HCI_PROTO_SCO 1
+
+ #define HCI_INIT_TIMEOUT (HZ * 10)
+
+-/* ----- Inquiry cache ----- */
+-#define INQUIRY_CACHE_AGE_MAX (HZ*5) // 5 seconds
+-#define INQUIRY_ENTRY_AGE_MAX (HZ*60) // 60 seconds
++/* HCI Core structures */
+
+ struct inquiry_entry {
+ struct inquiry_entry *next;
+@@ -53,111 +51,188 @@
+ struct inquiry_entry *list;
+ };
+
+-static inline void inquiry_cache_init(struct inquiry_cache *cache)
+-{
+- spin_lock_init(&cache->lock);
+- cache->list = NULL;
+-}
++struct conn_hash {
++ struct list_head list;
++ spinlock_t lock;
++ unsigned int num;
++};
+
+-static inline void inquiry_cache_lock(struct inquiry_cache *cache)
+-{
+- spin_lock(&cache->lock);
+-}
++struct hci_dev {
++ struct list_head list;
++ spinlock_t lock;
++ atomic_t refcnt;
+
+-static inline void inquiry_cache_unlock(struct inquiry_cache *cache)
+-{
+- spin_unlock(&cache->lock);
+-}
++ char name[8];
++ unsigned long flags;
++ __u16 id;
++ __u8 type;
++ bdaddr_t bdaddr;
++ __u8 features[8];
+
+-static inline void inquiry_cache_lock_bh(struct inquiry_cache *cache)
+-{
+- spin_lock_bh(&cache->lock);
+-}
++ __u16 pkt_type;
++ __u16 link_policy;
++ __u16 link_mode;
+
+-static inline void inquiry_cache_unlock_bh(struct inquiry_cache *cache)
+-{
+- spin_unlock_bh(&cache->lock);
+-}
++ unsigned long quirks;
+
+-static inline long inquiry_cache_age(struct inquiry_cache *cache)
+-{
+- return jiffies - cache->timestamp;
+-}
++ atomic_t cmd_cnt;
++ unsigned int acl_cnt;
++ unsigned int sco_cnt;
+
+-static inline long inquiry_entry_age(struct inquiry_entry *e)
+-{
+- return jiffies - e->timestamp;
+-}
+-extern void inquiry_cache_flush(struct inquiry_cache *cache);
++ unsigned int acl_mtu;
++ unsigned int sco_mtu;
++ unsigned int acl_pkts;
++ unsigned int sco_pkts;
+
+-struct hci_dev;
++ unsigned long cmd_last_tx;
++ unsigned long acl_last_tx;
++ unsigned long sco_last_tx;
++
++ struct tasklet_struct cmd_task;
++ struct tasklet_struct rx_task;
++ struct tasklet_struct tx_task;
++
++ struct sk_buff_head rx_q;
++ struct sk_buff_head raw_q;
++ struct sk_buff_head cmd_q;
++
++ struct sk_buff *sent_cmd;
++
++ struct semaphore req_lock;
++ wait_queue_head_t req_wait_q;
++ __u32 req_status;
++ __u32 req_result;
++
++ struct inquiry_cache inq_cache;
++ struct conn_hash conn_hash;
++
++ struct hci_dev_stats stat;
++
++ void *driver_data;
++ void *core_data;
++
++ atomic_t promisc;
++
++ int (*open)(struct hci_dev *hdev);
++ int (*close)(struct hci_dev *hdev);
++ int (*flush)(struct hci_dev *hdev);
++ int (*send)(struct sk_buff *skb);
++ void (*destruct)(struct hci_dev *hdev);
++ int (*ioctl)(struct hci_dev *hdev, unsigned int cmd, unsigned long arg);
++};
+
+-/* ----- HCI Connections ----- */
+ struct hci_conn {
+ struct list_head list;
++
++ atomic_t refcnt;
++ spinlock_t lock;
++
+ bdaddr_t dst;
+ __u16 handle;
++ __u16 state;
+ __u8 type;
+- unsigned int sent;
++ __u8 out;
++ __u32 link_mode;
++ unsigned long pend;
++
++ unsigned int sent;
++
++ struct sk_buff_head data_q;
+
++ struct timer_list timer;
++
+ struct hci_dev *hdev;
+ void *l2cap_data;
++ void *sco_data;
+ void *priv;
+
+- struct sk_buff_head data_q;
++ struct hci_conn *link;
+ };
+
+-struct conn_hash {
+- struct list_head list;
+- spinlock_t lock;
+- unsigned int num;
+-};
++extern struct hci_proto *hci_proto[];
++extern struct list_head hdev_list;
++extern rwlock_t hdev_list_lock;
++
++/* ----- Inquiry cache ----- */
++#define INQUIRY_CACHE_AGE_MAX (HZ*30) // 30 seconds
++#define INQUIRY_ENTRY_AGE_MAX (HZ*60) // 60 seconds
++
++#define inquiry_cache_lock(c) spin_lock(&c->lock)
++#define inquiry_cache_unlock(c) spin_unlock(&c->lock)
++#define inquiry_cache_lock_bh(c) spin_lock_bh(&c->lock)
++#define inquiry_cache_unlock_bh(c) spin_unlock_bh(&c->lock)
+
+-static inline void conn_hash_init(struct conn_hash *h)
++static inline void inquiry_cache_init(struct hci_dev *hdev)
+ {
+- INIT_LIST_HEAD(&h->list);
+- spin_lock_init(&h->lock);
+- h->num = 0;
++ struct inquiry_cache *c = &hdev->inq_cache;
++ spin_lock_init(&c->lock);
++ c->list = NULL;
+ }
+
+-static inline void conn_hash_lock(struct conn_hash *h)
++static inline int inquiry_cache_empty(struct hci_dev *hdev)
+ {
+- spin_lock(&h->lock);
++ struct inquiry_cache *c = &hdev->inq_cache;
++ return (c->list == NULL);
+ }
+
+-static inline void conn_hash_unlock(struct conn_hash *h)
++static inline long inquiry_cache_age(struct hci_dev *hdev)
+ {
+- spin_unlock(&h->lock);
++ struct inquiry_cache *c = &hdev->inq_cache;
++ return jiffies - c->timestamp;
+ }
+
+-static inline void __conn_hash_add(struct conn_hash *h, __u16 handle, struct hci_conn *c)
++static inline long inquiry_entry_age(struct inquiry_entry *e)
+ {
+- list_add(&c->list, &h->list);
+- h->num++;
++ return jiffies - e->timestamp;
+ }
+
+-static inline void conn_hash_add(struct conn_hash *h, __u16 handle, struct hci_conn *c)
++struct inquiry_entry *inquiry_cache_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr);
++void inquiry_cache_update(struct hci_dev *hdev, inquiry_info *info);
++void inquiry_cache_flush(struct hci_dev *hdev);
++int inquiry_cache_dump(struct hci_dev *hdev, int num, __u8 *buf);
++
++/* ----- HCI Connections ----- */
++enum {
++ HCI_CONN_AUTH_PEND,
++ HCI_CONN_ENCRYPT_PEND
++};
++
++#define hci_conn_lock(c) spin_lock(&c->lock)
++#define hci_conn_unlock(c) spin_unlock(&c->lock)
++#define hci_conn_lock_bh(c) spin_lock_bh(&c->lock)
++#define hci_conn_unlock_bh(c) spin_unlock_bh(&c->lock)
++
++#define conn_hash_lock(d) spin_lock(&d->conn_hash->lock)
++#define conn_hash_unlock(d) spin_unlock(&d->conn_hash->lock)
++#define conn_hash_lock_bh(d) spin_lock_bh(&d->conn_hash->lock)
++#define conn_hash_unlock_bh(d) spin_unlock_bh(&d->conn_hash->lock)
++
++static inline void conn_hash_init(struct hci_dev *hdev)
+ {
+- conn_hash_lock(h);
+- __conn_hash_add(h, handle, c);
+- conn_hash_unlock(h);
++ struct conn_hash *h = &hdev->conn_hash;
++ INIT_LIST_HEAD(&h->list);
++ spin_lock_init(&h->lock);
++ h->num = 0;
+ }
+
+-static inline void __conn_hash_del(struct conn_hash *h, struct hci_conn *c)
++static inline void conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
+ {
+- list_del(&c->list);
+- h->num--;
++ struct conn_hash *h = &hdev->conn_hash;
++ list_add(&c->list, &h->list);
++ h->num++;
+ }
+
+-static inline void conn_hash_del(struct conn_hash *h, struct hci_conn *c)
++static inline void conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
+ {
+- conn_hash_lock(h);
+- __conn_hash_del(h, c);
+- conn_hash_unlock(h);
++ struct conn_hash *h = &hdev->conn_hash;
++ list_del(&c->list);
++ h->num--;
+ }
+
+-static inline struct hci_conn *__conn_hash_lookup(struct conn_hash *h, __u16 handle)
++static inline struct hci_conn *conn_hash_lookup_handle(struct hci_dev *hdev,
++ __u16 handle)
+ {
++ register struct conn_hash *h = &hdev->conn_hash;
+ register struct list_head *p;
+ register struct hci_conn *c;
+
+@@ -169,101 +244,97 @@
+ return NULL;
+ }
+
+-static inline struct hci_conn *conn_hash_lookup(struct conn_hash *h, __u16 handle)
++static inline struct hci_conn *conn_hash_lookup_ba(struct hci_dev *hdev,
++ __u8 type, bdaddr_t *ba)
+ {
+- struct hci_conn *conn;
++ register struct conn_hash *h = &hdev->conn_hash;
++ register struct list_head *p;
++ register struct hci_conn *c;
+
+- conn_hash_lock(h);
+- conn = __conn_hash_lookup(h, handle);
+- conn_hash_unlock(h);
+- return conn;
++ list_for_each(p, &h->list) {
++ c = list_entry(p, struct hci_conn, list);
++ if (c->type == type && !bacmp(&c->dst, ba))
++ return c;
++ }
++ return NULL;
+ }
+
+-/* ----- HCI Devices ----- */
+-struct hci_dev {
+- atomic_t refcnt;
+-
+- char name[8];
+- __u32 flags;
+- __u16 id;
+- __u8 type;
+- bdaddr_t bdaddr;
+- __u8 features[8];
+-
+- __u16 pkt_type;
+-
+- atomic_t cmd_cnt;
+- unsigned int acl_cnt;
+- unsigned int sco_cnt;
+-
+- unsigned int acl_mtu;
+- unsigned int sco_mtu;
+- unsigned int acl_max;
+- unsigned int sco_max;
+-
+- void *driver_data;
+- void *l2cap_data;
+- void *priv;
+-
+- struct tasklet_struct cmd_task;
+- struct tasklet_struct rx_task;
+- struct tasklet_struct tx_task;
+-
+- struct sk_buff_head rx_q;
+- struct sk_buff_head raw_q;
+- struct sk_buff_head cmd_q;
+-
+- struct sk_buff *sent_cmd;
++void hci_acl_connect(struct hci_conn *conn);
++void hci_acl_disconn(struct hci_conn *conn, __u8 reason);
++void hci_add_sco(struct hci_conn *conn, __u16 handle);
+
+- struct semaphore req_lock;
+- wait_queue_head_t req_wait_q;
+- __u32 req_status;
+- __u32 req_result;
++struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst);
++int hci_conn_del(struct hci_conn *conn);
++void hci_conn_hash_flush(struct hci_dev *hdev);
+
+- struct inquiry_cache inq_cache;
++struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *src);
++int hci_conn_auth(struct hci_conn *conn);
++int hci_conn_encrypt(struct hci_conn *conn);
+
+- struct conn_hash conn_hash;
+-
+- struct hci_dev_stats stat;
+-
+- int (*open)(struct hci_dev *hdev);
+- int (*close)(struct hci_dev *hdev);
+- int (*flush)(struct hci_dev *hdev);
+- int (*send)(struct sk_buff *skb);
+-};
++static inline void hci_conn_set_timer(struct hci_conn *conn, long timeout)
++{
++ mod_timer(&conn->timer, jiffies + timeout);
++}
+
+-static inline void hci_dev_hold(struct hci_dev *hdev)
++static inline void hci_conn_del_timer(struct hci_conn *conn)
+ {
+- atomic_inc(&hdev->refcnt);
++ del_timer(&conn->timer);
+ }
+
+-static inline void hci_dev_put(struct hci_dev *hdev)
++static inline void hci_conn_hold(struct hci_conn *conn)
+ {
+- atomic_dec(&hdev->refcnt);
++ atomic_inc(&conn->refcnt);
++ hci_conn_del_timer(conn);
+ }
+
+-extern struct hci_dev *hci_dev_get(int index);
+-extern int hci_register_dev(struct hci_dev *hdev);
+-extern int hci_unregister_dev(struct hci_dev *hdev);
+-extern int hci_dev_open(__u16 dev);
+-extern int hci_dev_close(__u16 dev);
+-extern int hci_dev_reset(__u16 dev);
+-extern int hci_dev_reset_stat(__u16 dev);
+-extern int hci_dev_info(unsigned long arg);
+-extern int hci_dev_list(unsigned long arg);
+-extern int hci_dev_setscan(unsigned long arg);
+-extern int hci_dev_setauth(unsigned long arg);
+-extern int hci_dev_setptype(unsigned long arg);
+-extern int hci_conn_list(unsigned long arg);
+-extern int hci_inquiry(unsigned long arg);
++static inline void hci_conn_put(struct hci_conn *conn)
++{
++ if (atomic_dec_and_test(&conn->refcnt)) {
++ if (conn->type == ACL_LINK) {
++ unsigned long timeo = (conn->out) ?
++ HCI_DISCONN_TIMEOUT : HCI_DISCONN_TIMEOUT * 2;
++ hci_conn_set_timer(conn, timeo);
++ } else
++ hci_conn_set_timer(conn, HZ / 100);
++ }
++}
+
+-extern __u32 hci_dev_setmode(struct hci_dev *hdev, __u32 mode);
+-extern __u32 hci_dev_getmode(struct hci_dev *hdev);
++/* ----- HCI Devices ----- */
++static inline void hci_dev_put(struct hci_dev *d)
++{
++ if (atomic_dec_and_test(&d->refcnt))
++ d->destruct(d);
++}
++#define hci_dev_hold(d) atomic_inc(&d->refcnt)
++
++#define hci_dev_lock(d) spin_lock(&d->lock)
++#define hci_dev_unlock(d) spin_unlock(&d->lock)
++#define hci_dev_lock_bh(d) spin_lock_bh(&d->lock)
++#define hci_dev_unlock_bh(d) spin_unlock_bh(&d->lock)
++
++struct hci_dev *hci_dev_get(int index);
++struct hci_dev *hci_get_route(bdaddr_t *src, bdaddr_t *dst);
++int hci_register_dev(struct hci_dev *hdev);
++int hci_unregister_dev(struct hci_dev *hdev);
++int hci_suspend_dev(struct hci_dev *hdev);
++int hci_resume_dev(struct hci_dev *hdev);
++int hci_dev_open(__u16 dev);
++int hci_dev_close(__u16 dev);
++int hci_dev_reset(__u16 dev);
++int hci_dev_reset_stat(__u16 dev);
++int hci_dev_cmd(unsigned int cmd, unsigned long arg);
++int hci_get_dev_list(unsigned long arg);
++int hci_get_dev_info(unsigned long arg);
++int hci_get_conn_list(unsigned long arg);
++int hci_get_conn_info(struct hci_dev *hdev, unsigned long arg);
++int hci_inquiry(unsigned long arg);
+
+-extern int hci_recv_frame(struct sk_buff *skb);
++int hci_recv_frame(struct sk_buff *skb);
++void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
+
+ /* ----- LMP capabilities ----- */
+ #define lmp_rswitch_capable(dev) (dev->features[0] & LMP_RSWITCH)
++#define lmp_encrypt_capable(dev) (dev->features[0] & LMP_ENCRYPT)
+
+ /* ----- HCI tasks ----- */
+ static inline void hci_sched_cmd(struct hci_dev *hdev)
+@@ -284,43 +355,130 @@
+ /* ----- HCI protocols ----- */
+ struct hci_proto {
+ char *name;
+- __u32 id;
+- __u32 flags;
++ unsigned int id;
++ unsigned long flags;
+
+ void *priv;
+
+- int (*connect_ind) (struct hci_dev *hdev, bdaddr_t *bdaddr);
+- int (*connect_cfm) (struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 status, struct hci_conn *conn);
++ int (*connect_ind) (struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type);
++ int (*connect_cfm) (struct hci_conn *conn, __u8 status);
+ int (*disconn_ind) (struct hci_conn *conn, __u8 reason);
+- int (*recv_acldata) (struct hci_conn *conn, struct sk_buff *skb , __u16 flags);
++ int (*recv_acldata) (struct hci_conn *conn, struct sk_buff *skb, __u16 flags);
+ int (*recv_scodata) (struct hci_conn *conn, struct sk_buff *skb);
++ int (*auth_cfm) (struct hci_conn *conn, __u8 status);
++ int (*encrypt_cfm) (struct hci_conn *conn, __u8 status);
+ };
+
+-extern int hci_register_proto(struct hci_proto *hproto);
+-extern int hci_unregister_proto(struct hci_proto *hproto);
+-extern int hci_register_notifier(struct notifier_block *nb);
+-extern int hci_unregister_notifier(struct notifier_block *nb);
+-extern int hci_connect(struct hci_dev * hdev, bdaddr_t * bdaddr);
+-extern int hci_disconnect(struct hci_conn *conn, __u8 reason);
+-extern int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void * param);
+-extern int hci_send_raw(struct sk_buff *skb);
+-extern int hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags);
+-extern int hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);
++static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
++{
++ register struct hci_proto *hp;
++ int mask = 0;
++
++ hp = hci_proto[HCI_PROTO_L2CAP];
++ if (hp && hp->connect_ind)
++ mask |= hp->connect_ind(hdev, bdaddr, type);
++
++ hp = hci_proto[HCI_PROTO_SCO];
++ if (hp && hp->connect_ind)
++ mask |= hp->connect_ind(hdev, bdaddr, type);
++
++ return mask;
++}
++
++static inline void hci_proto_connect_cfm(struct hci_conn *conn, __u8 status)
++{
++ register struct hci_proto *hp;
++
++ hp = hci_proto[HCI_PROTO_L2CAP];
++ if (hp && hp->connect_cfm)
++ hp->connect_cfm(conn, status);
++
++ hp = hci_proto[HCI_PROTO_SCO];
++ if (hp && hp->connect_cfm)
++ hp->connect_cfm(conn, status);
++}
++
++static inline void hci_proto_disconn_ind(struct hci_conn *conn, __u8 reason)
++{
++ register struct hci_proto *hp;
++
++ hp = hci_proto[HCI_PROTO_L2CAP];
++ if (hp && hp->disconn_ind)
++ hp->disconn_ind(conn, reason);
++
++ hp = hci_proto[HCI_PROTO_SCO];
++ if (hp && hp->disconn_ind)
++ hp->disconn_ind(conn, reason);
++}
++
++static inline void hci_proto_auth_cfm(struct hci_conn *conn, __u8 status)
++{
++ register struct hci_proto *hp;
++
++ hp = hci_proto[HCI_PROTO_L2CAP];
++ if (hp && hp->auth_cfm)
++ hp->auth_cfm(conn, status);
++
++ hp = hci_proto[HCI_PROTO_SCO];
++ if (hp && hp->auth_cfm)
++ hp->auth_cfm(conn, status);
++}
++
++static inline void hci_proto_encrypt_cfm(struct hci_conn *conn, __u8 status)
++{
++ register struct hci_proto *hp;
++
++ hp = hci_proto[HCI_PROTO_L2CAP];
++ if (hp && hp->encrypt_cfm)
++ hp->encrypt_cfm(conn, status);
++
++ hp = hci_proto[HCI_PROTO_SCO];
++ if (hp && hp->encrypt_cfm)
++ hp->encrypt_cfm(conn, status);
++}
++
++int hci_register_proto(struct hci_proto *hproto);
++int hci_unregister_proto(struct hci_proto *hproto);
++int hci_register_notifier(struct notifier_block *nb);
++int hci_unregister_notifier(struct notifier_block *nb);
++
++int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void *param);
++int hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags);
++int hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);
++
++void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 ogf, __u16 ocf);
++
++void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data);
+
+ /* ----- HCI Sockets ----- */
+-extern void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);
++void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);
+
+ /* HCI info for socket */
+-#define hci_pi(sk) ((struct hci_pinfo *) &sk->protinfo)
++#define hci_pi(sk) ((struct hci_pinfo *) &sk->tp_pinfo)
+ struct hci_pinfo {
+ struct hci_dev *hdev;
+ struct hci_filter filter;
+ __u32 cmsg_mask;
+ };
+
++/* HCI security filter */
++#define HCI_SFLT_MAX_OGF 5
++
++struct hci_sec_filter {
++ __u32 type_mask;
++ __u32 event_mask[2];
++ __u32 ocf_mask[HCI_SFLT_MAX_OGF + 1][4];
++};
++
+ /* ----- HCI requests ----- */
+ #define HCI_REQ_DONE 0
+ #define HCI_REQ_PEND 1
+ #define HCI_REQ_CANCELED 2
+
++#define hci_req_lock(d) down(&d->req_lock)
++#define hci_req_unlock(d) up(&d->req_lock)
++
++void hci_req_complete(struct hci_dev *hdev, int result);
++void hci_req_cancel(struct hci_dev *hdev, int err);
++
+ #endif /* __HCI_CORE_H */
+diff -urN linux-2.4.18/include/net/bluetooth/hci.h linux-2.4.18-mh15/include/net/bluetooth/hci.h
+--- linux-2.4.18/include/net/bluetooth/hci.h 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/include/net/bluetooth/hci.h 2004-08-01 16:26:23.000000000 +0200
+@@ -23,59 +23,80 @@
+ */
+
+ /*
+- * $Id: hci.h,v 1.15 2001/08/05 06:02:15 maxk Exp $
++ * $Id: hci.h,v 1.5 2002/06/27 17:29:30 maxk Exp $
+ */
+
+ #ifndef __HCI_H
+ #define __HCI_H
+
+-#include <asm/byteorder.h>
+-
+-#define HCI_MAX_DEV 8
+-#define HCI_MAX_FRAME_SIZE 2048
++#define HCI_MAX_ACL_SIZE 1024
++#define HCI_MAX_SCO_SIZE 255
++#define HCI_MAX_EVENT_SIZE 260
++#define HCI_MAX_FRAME_SIZE (HCI_MAX_ACL_SIZE + 4)
+
+ /* HCI dev events */
+ #define HCI_DEV_REG 1
+ #define HCI_DEV_UNREG 2
+ #define HCI_DEV_UP 3
+ #define HCI_DEV_DOWN 4
++#define HCI_DEV_SUSPEND 5
++#define HCI_DEV_RESUME 6
+
+ /* HCI device types */
+-#define HCI_UART 0
++#define HCI_VHCI 0
+ #define HCI_USB 1
+-#define HCI_VHCI 2
+-
+-/* HCI device modes */
+-#define HCI_NORMAL 0x0001
+-#define HCI_RAW 0x0002
+-#define HCI_MODE_MASK (HCI_NORMAL | HCI_RAW)
+-#define HCI_SOCK 0x1000
+-
+-/* HCI device states */
+-#define HCI_INIT 0x0010
+-#define HCI_UP 0x0020
+-#define HCI_RUNNING 0x0040
++#define HCI_PCCARD 2
++#define HCI_UART 3
++#define HCI_RS232 4
++#define HCI_PCI 5
++
++/* HCI device quirks */
++enum {
++ HCI_QUIRK_RESET_ON_INIT
++};
+
+ /* HCI device flags */
+-#define HCI_PSCAN 0x0100
+-#define HCI_ISCAN 0x0200
+-#define HCI_AUTH 0x0400
++enum {
++ HCI_UP,
++ HCI_INIT,
++ HCI_RUNNING,
++
++ HCI_PSCAN,
++ HCI_ISCAN,
++ HCI_AUTH,
++ HCI_ENCRYPT,
++ HCI_INQUIRY,
++
++ HCI_RAW
++};
+
+-/* HCI Ioctl defines */
++/* HCI ioctl defines */
+ #define HCIDEVUP _IOW('H', 201, int)
+ #define HCIDEVDOWN _IOW('H', 202, int)
+ #define HCIDEVRESET _IOW('H', 203, int)
+-#define HCIRESETSTAT _IOW('H', 204, int)
+-#define HCIGETINFO _IOR('H', 205, int)
+-#define HCIGETDEVLIST _IOR('H', 206, int)
+-#define HCISETRAW _IOW('H', 207, int)
+-#define HCISETSCAN _IOW('H', 208, int)
+-#define HCISETAUTH _IOW('H', 209, int)
+-#define HCIINQUIRY _IOR('H', 210, int)
+-#define HCISETPTYPE _IOW('H', 211, int)
++#define HCIDEVRESTAT _IOW('H', 204, int)
++
++#define HCIGETDEVLIST _IOR('H', 210, int)
++#define HCIGETDEVINFO _IOR('H', 211, int)
+ #define HCIGETCONNLIST _IOR('H', 212, int)
++#define HCIGETCONNINFO _IOR('H', 213, int)
+
+-#ifndef __NO_HCI_DEFS
++#define HCISETRAW _IOW('H', 220, int)
++#define HCISETSCAN _IOW('H', 221, int)
++#define HCISETAUTH _IOW('H', 222, int)
++#define HCISETENCRYPT _IOW('H', 223, int)
++#define HCISETPTYPE _IOW('H', 224, int)
++#define HCISETLINKPOL _IOW('H', 225, int)
++#define HCISETLINKMODE _IOW('H', 226, int)
++#define HCISETACLMTU _IOW('H', 227, int)
++#define HCISETSCOMTU _IOW('H', 228, int)
++
++#define HCIINQUIRY _IOR('H', 240, int)
++
++/* HCI timeouts */
++#define HCI_CONN_TIMEOUT (HZ * 40)
++#define HCI_DISCONN_TIMEOUT (HZ * 2)
++#define HCI_CONN_IDLE_TIMEOUT (HZ * 60)
+
+ /* HCI Packet types */
+ #define HCI_COMMAND_PKT 0x01
+@@ -92,11 +113,18 @@
+ #define HCI_DH3 0x0800
+ #define HCI_DH5 0x8000
+
++#define HCI_HV1 0x0020
++#define HCI_HV2 0x0040
++#define HCI_HV3 0x0080
++
++#define SCO_PTYPE_MASK (HCI_HV1 | HCI_HV2 | HCI_HV3)
++#define ACL_PTYPE_MASK (~SCO_PTYPE_MASK)
++
+ /* ACL flags */
+-#define ACL_CONT 0x0001
+-#define ACL_START 0x0002
+-#define ACL_ACTIVE_BCAST 0x0010
+-#define ACL_PICO_BCAST 0x0020
++#define ACL_CONT 0x01
++#define ACL_START 0x02
++#define ACL_ACTIVE_BCAST 0x04
++#define ACL_PICO_BCAST 0x08
+
+ /* Baseband links */
+ #define SCO_LINK 0x00
+@@ -125,6 +153,20 @@
+ #define LMP_PSCHEME 0x02
+ #define LMP_PCONTROL 0x04
+
++/* Link policies */
++#define HCI_LP_RSWITCH 0x0001
++#define HCI_LP_HOLD 0x0002
++#define HCI_LP_SNIFF 0x0004
++#define HCI_LP_PARK 0x0008
++
++/* Link mode */
++#define HCI_LM_ACCEPT 0x8000
++#define HCI_LM_MASTER 0x0001
++#define HCI_LM_AUTH 0x0002
++#define HCI_LM_ENCRYPT 0x0004
++#define HCI_LM_TRUSTED 0x0008
++#define HCI_LM_RELIABLE 0x0010
++
+ /* ----- HCI Commands ----- */
+ /* OGF & OCF values */
+
+@@ -137,9 +179,10 @@
+ __u8 hci_ver;
+ __u16 hci_rev;
+ __u8 lmp_ver;
+- __u16 man_name;
+- __u16 lmp_sub;
++ __u16 manufacturer;
++ __u16 lmp_subver;
+ } __attribute__ ((packed)) read_local_version_rp;
++#define READ_LOCAL_VERSION_RP_SIZE 9
+
+ #define OCF_READ_LOCAL_FEATURES 0x0003
+ typedef struct {
+@@ -165,18 +208,24 @@
+ /* Host Controller and Baseband */
+ #define OGF_HOST_CTL 0x03
+ #define OCF_RESET 0x0003
++#define OCF_READ_AUTH_ENABLE 0x001F
+ #define OCF_WRITE_AUTH_ENABLE 0x0020
+- #define AUTH_DISABLED 0x00
+- #define AUTH_ENABLED 0x01
++ #define AUTH_DISABLED 0x00
++ #define AUTH_ENABLED 0x01
++
++#define OCF_READ_ENCRYPT_MODE 0x0021
++#define OCF_WRITE_ENCRYPT_MODE 0x0022
++ #define ENCRYPT_DISABLED 0x00
++ #define ENCRYPT_P2P 0x01
++ #define ENCRYPT_BOTH 0x02
+
+ #define OCF_WRITE_CA_TIMEOUT 0x0016
+ #define OCF_WRITE_PG_TIMEOUT 0x0018
+
+ #define OCF_WRITE_SCAN_ENABLE 0x001A
+- #define SCANS_DISABLED 0x00
+- #define IS_ENA_PS_DIS 0x01
+- #define IS_DIS_PS_ENA 0x02
+- #define IS_ENA_PS_ENA 0x03
++ #define SCAN_DISABLED 0x00
++ #define SCAN_INQUIRY 0x01
++ #define SCAN_PAGE 0x02
+
+ #define OCF_SET_EVENT_FLT 0x0005
+ typedef struct {
+@@ -226,9 +275,18 @@
+ } __attribute__ ((packed)) write_class_of_dev_cp;
+ #define WRITE_CLASS_OF_DEV_CP_SIZE 3
+
++#define OCF_HOST_BUFFER_SIZE 0x0033
++typedef struct {
++ __u16 acl_mtu;
++ __u8 sco_mtu;
++ __u16 acl_max_pkt;
++ __u16 sco_max_pkt;
++} __attribute__ ((packed)) host_buffer_size_cp;
++#define HOST_BUFFER_SIZE_CP_SIZE 7
++
+ /* Link Control */
+ #define OGF_LINK_CTL 0x01
+-#define OCF_CREATE_CONN 0x0005
++#define OCF_CREATE_CONN 0x0005
+ typedef struct {
+ bdaddr_t bdaddr;
+ __u16 pkt_type;
+@@ -246,6 +304,13 @@
+ } __attribute__ ((packed)) accept_conn_req_cp;
+ #define ACCEPT_CONN_REQ_CP_SIZE 7
+
++#define OCF_REJECT_CONN_REQ 0x000a
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 reason;
++} __attribute__ ((packed)) reject_conn_req_cp;
++#define REJECT_CONN_REQ_CP_SIZE 7
++
+ #define OCF_DISCONNECT 0x0006
+ typedef struct {
+ __u16 handle;
+@@ -253,17 +318,142 @@
+ } __attribute__ ((packed)) disconnect_cp;
+ #define DISCONNECT_CP_SIZE 3
+
++#define OCF_ADD_SCO 0x0007
++typedef struct {
++ __u16 handle;
++ __u16 pkt_type;
++} __attribute__ ((packed)) add_sco_cp;
++#define ADD_SCO_CP_SIZE 4
++
+ #define OCF_INQUIRY 0x0001
+ typedef struct {
+ __u8 lap[3];
+- __u8 lenght;
++ __u8 length;
+ __u8 num_rsp;
+ } __attribute__ ((packed)) inquiry_cp;
+ #define INQUIRY_CP_SIZE 5
+
+-#define OGF_LINK_POLICY 0x02 /* Link Policy */
++typedef struct {
++ __u8 status;
++ bdaddr_t bdaddr;
++} __attribute__ ((packed)) status_bdaddr_rp;
++#define STATUS_BDADDR_RP_SIZE 7
++
++#define OCF_INQUIRY_CANCEL 0x0002
++
++#define OCF_LINK_KEY_REPLY 0x000B
++#define OCF_LINK_KEY_NEG_REPLY 0x000C
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 link_key[16];
++} __attribute__ ((packed)) link_key_reply_cp;
++#define LINK_KEY_REPLY_CP_SIZE 22
++
++#define OCF_PIN_CODE_REPLY 0x000D
++#define OCF_PIN_CODE_NEG_REPLY 0x000E
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 pin_len;
++ __u8 pin_code[16];
++} __attribute__ ((packed)) pin_code_reply_cp;
++#define PIN_CODE_REPLY_CP_SIZE 23
++
++#define OCF_CHANGE_CONN_PTYPE 0x000F
++typedef struct {
++ __u16 handle;
++ __u16 pkt_type;
++} __attribute__ ((packed)) change_conn_ptype_cp;
++#define CHANGE_CONN_PTYPE_CP_SIZE 4
++
++#define OCF_AUTH_REQUESTED 0x0011
++typedef struct {
++ __u16 handle;
++} __attribute__ ((packed)) auth_requested_cp;
++#define AUTH_REQUESTED_CP_SIZE 2
++
++#define OCF_SET_CONN_ENCRYPT 0x0013
++typedef struct {
++ __u16 handle;
++ __u8 encrypt;
++} __attribute__ ((packed)) set_conn_encrypt_cp;
++#define SET_CONN_ENCRYPT_CP_SIZE 3
++
++#define OCF_REMOTE_NAME_REQ 0x0019
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 pscan_rep_mode;
++ __u8 pscan_mode;
++ __u16 clock_offset;
++} __attribute__ ((packed)) remote_name_req_cp;
++#define REMOTE_NAME_REQ_CP_SIZE 10
++
++#define OCF_READ_REMOTE_FEATURES 0x001B
++typedef struct {
++ __u16 handle;
++} __attribute__ ((packed)) read_remote_features_cp;
++#define READ_REMOTE_FEATURES_CP_SIZE 2
++
++#define OCF_READ_REMOTE_VERSION 0x001D
++typedef struct {
++ __u16 handle;
++} __attribute__ ((packed)) read_remote_version_cp;
++#define READ_REMOTE_VERSION_CP_SIZE 2
++
++/* Link Policy */
++#define OGF_LINK_POLICY 0x02
++#define OCF_ROLE_DISCOVERY 0x0009
++typedef struct {
++ __u16 handle;
++} __attribute__ ((packed)) role_discovery_cp;
++#define ROLE_DISCOVERY_CP_SIZE 2
++typedef struct {
++ __u8 status;
++ __u16 handle;
++ __u8 role;
++} __attribute__ ((packed)) role_discovery_rp;
++#define ROLE_DISCOVERY_RP_SIZE 4
++
++#define OCF_READ_LINK_POLICY 0x000C
++typedef struct {
++ __u16 handle;
++} __attribute__ ((packed)) read_link_policy_cp;
++#define READ_LINK_POLICY_CP_SIZE 2
++typedef struct {
++ __u8 status;
++ __u16 handle;
++ __u16 policy;
++} __attribute__ ((packed)) read_link_policy_rp;
++#define READ_LINK_POLICY_RP_SIZE 5
+
+-/* --------- HCI Events --------- */
++#define OCF_SWITCH_ROLE 0x000B
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 role;
++} __attribute__ ((packed)) switch_role_cp;
++#define SWITCH_ROLE_CP_SIZE 7
++
++#define OCF_WRITE_LINK_POLICY 0x000D
++typedef struct {
++ __u16 handle;
++ __u16 policy;
++} __attribute__ ((packed)) write_link_policy_cp;
++#define WRITE_LINK_POLICY_CP_SIZE 4
++typedef struct {
++ __u8 status;
++ __u16 handle;
++} __attribute__ ((packed)) write_link_policy_rp;
++#define WRITE_LINK_POLICY_RP_SIZE 3
++
++/* Status params */
++#define OGF_STATUS_PARAM 0x05
++
++/* Testing commands */
++#define OGF_TESTING_CMD 0x3e
++
++/* Vendor specific commands */
++#define OGF_VENDOR_CMD 0x3f
++
++/* ---- HCI Events ---- */
+ #define EVT_INQUIRY_COMPLETE 0x01
+
+ #define EVT_INQUIRY_RESULT 0x02
+@@ -272,11 +462,22 @@
+ __u8 pscan_rep_mode;
+ __u8 pscan_period_mode;
+ __u8 pscan_mode;
+- __u8 class[3];
++ __u8 dev_class[3];
+ __u16 clock_offset;
+ } __attribute__ ((packed)) inquiry_info;
+ #define INQUIRY_INFO_SIZE 14
+
++#define EVT_INQUIRY_RESULT_WITH_RSSI 0x22
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 pscan_rep_mode;
++ __u8 pscan_period_mode;
++ __u8 dev_class[3];
++ __u16 clock_offset;
++ __s8 rssi;
++} __attribute__ ((packed)) inquiry_info_with_rssi;
++#define INQUIRY_INFO_WITH_RSSI_SIZE 14
++
+ #define EVT_CONN_COMPLETE 0x03
+ typedef struct {
+ __u8 status;
+@@ -303,6 +504,44 @@
+ } __attribute__ ((packed)) evt_disconn_complete;
+ #define EVT_DISCONN_COMPLETE_SIZE 4
+
++#define EVT_AUTH_COMPLETE 0x06
++typedef struct {
++ __u8 status;
++ __u16 handle;
++} __attribute__ ((packed)) evt_auth_complete;
++#define EVT_AUTH_COMPLETE_SIZE 3
++
++#define EVT_REMOTE_NAME_REQ_COMPLETE 0x07
++typedef struct {
++ __u8 status;
++ bdaddr_t bdaddr;
++ __u8 name[248];
++} __attribute__ ((packed)) evt_remote_name_req_complete;
++#define EVT_REMOTE_NAME_REQ_COMPLETE_SIZE 255
++
++#define EVT_ENCRYPT_CHANGE 0x08
++typedef struct {
++ __u8 status;
++ __u16 handle;
++ __u8 encrypt;
++} __attribute__ ((packed)) evt_encrypt_change;
++#define EVT_ENCRYPT_CHANGE_SIZE 5
++
++#define EVT_QOS_SETUP_COMPLETE 0x0D
++typedef struct {
++ __u8 service_type;
++ __u32 token_rate;
++ __u32 peak_bandwidth;
++ __u32 latency;
++ __u32 delay_variation;
++} __attribute__ ((packed)) hci_qos;
++typedef struct {
++ __u8 status;
++ __u16 handle;
++ hci_qos qos;
++} __attribute__ ((packed)) evt_qos_setup_complete;
++#define EVT_QOS_SETUP_COMPLETE_SIZE 20
++
+ #define EVT_CMD_COMPLETE 0x0e
+ typedef struct {
+ __u8 ncmd;
+@@ -321,16 +560,78 @@
+ #define EVT_NUM_COMP_PKTS 0x13
+ typedef struct {
+ __u8 num_hndl;
+- /* variable lenght part */
++ /* variable length part */
+ } __attribute__ ((packed)) evt_num_comp_pkts;
+ #define EVT_NUM_COMP_PKTS_SIZE 1
+
+-#define EVT_HCI_DEV_EVENT 0xfd
++#define EVT_ROLE_CHANGE 0x12
++typedef struct {
++ __u8 status;
++ bdaddr_t bdaddr;
++ __u8 role;
++} __attribute__ ((packed)) evt_role_change;
++#define EVT_ROLE_CHANGE_SIZE 8
++
++#define EVT_PIN_CODE_REQ 0x16
++typedef struct {
++ bdaddr_t bdaddr;
++} __attribute__ ((packed)) evt_pin_code_req;
++#define EVT_PIN_CODE_REQ_SIZE 6
++
++#define EVT_LINK_KEY_REQ 0x17
++typedef struct {
++ bdaddr_t bdaddr;
++} __attribute__ ((packed)) evt_link_key_req;
++#define EVT_LINK_KEY_REQ_SIZE 6
++
++#define EVT_LINK_KEY_NOTIFY 0x18
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 link_key[16];
++ __u8 key_type;
++} __attribute__ ((packed)) evt_link_key_notify;
++#define EVT_LINK_KEY_NOTIFY_SIZE 23
++
++#define EVT_READ_REMOTE_FEATURES_COMPLETE 0x0B
++typedef struct {
++ __u8 status;
++ __u16 handle;
++ __u8 features[8];
++} __attribute__ ((packed)) evt_read_remote_features_complete;
++#define EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE 11
++
++#define EVT_READ_REMOTE_VERSION_COMPLETE 0x0C
++typedef struct {
++ __u8 status;
++ __u16 handle;
++ __u8 lmp_ver;
++ __u16 manufacturer;
++ __u16 lmp_subver;
++} __attribute__ ((packed)) evt_read_remote_version_complete;
++#define EVT_READ_REMOTE_VERSION_COMPLETE_SIZE 8
++
++/* Internal events generated by BlueZ stack */
++#define EVT_STACK_INTERNAL 0xfd
++typedef struct {
++ __u16 type;
++ __u8 data[0];
++} __attribute__ ((packed)) evt_stack_internal;
++#define EVT_STACK_INTERNAL_SIZE 2
++
++#define EVT_SI_DEVICE 0x01
++typedef struct {
++ __u16 event;
++ __u16 dev_id;
++} __attribute__ ((packed)) evt_si_device;
++#define EVT_SI_DEVICE_SIZE 4
++
++#define EVT_SI_SECURITY 0x02
+ typedef struct {
+ __u16 event;
+- __u16 param;
+-} __attribute__ ((packed)) evt_hci_dev_event;
+-#define EVT_HCI_DEV_EVENT_SIZE 4
++ __u16 proto;
++ __u16 subproto;
++ __u8 incomming;
++} __attribute__ ((packed)) evt_si_security;
+
+ /* -------- HCI Packet structures -------- */
+ #define HCI_TYPE_LEN 1
+@@ -369,14 +670,14 @@
+ #define acl_handle(h) (h & 0x0fff)
+ #define acl_flags(h) (h >> 12)
+
+-#endif /* _NO_HCI_DEFS */
+-
+ /* HCI Socket options */
+-#define HCI_DATA_DIR 0x0001
+-#define HCI_FILTER 0x0002
++#define HCI_DATA_DIR 1
++#define HCI_FILTER 2
++#define HCI_TIME_STAMP 3
+
+ /* HCI CMSG flags */
+ #define HCI_CMSG_DIR 0x0001
++#define HCI_CMSG_TSTAMP 0x0002
+
+ struct sockaddr_hci {
+ sa_family_t hci_family;
+@@ -387,27 +688,29 @@
+ struct hci_filter {
+ __u32 type_mask;
+ __u32 event_mask[2];
++ __u16 opcode;
+ };
+
+-struct hci_dev_req {
+- __u16 dev_id;
+- __u32 dev_opt;
+-};
+-
+-struct hci_dev_list_req {
+- __u16 dev_num;
+- struct hci_dev_req dev_req[0]; /* hci_dev_req structures */
+-};
+-
+-struct hci_inquiry_req {
+- __u16 dev_id;
+- __u16 flags;
+- __u8 lap[3];
+- __u8 length;
+- __u8 num_rsp;
+-};
+-#define IREQ_CACHE_FLUSH 0x0001
++#define HCI_FLT_TYPE_BITS 31
++#define HCI_FLT_EVENT_BITS 63
++#define HCI_FLT_OGF_BITS 63
++#define HCI_FLT_OCF_BITS 127
++
++#if BITS_PER_LONG == 64
++static inline void hci_set_bit(int nr, void *addr)
++{
++ *((__u32 *) addr + (nr >> 5)) |= ((__u32) 1 << (nr & 31));
++}
++static inline int hci_test_bit(int nr, void *addr)
++{
++ return *((__u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31));
++}
++#else
++#define hci_set_bit set_bit
++#define hci_test_bit test_bit
++#endif
+
++/* Ioctl requests structures */
+ struct hci_dev_stats {
+ __u32 err_rx;
+ __u32 err_tx;
+@@ -433,11 +736,13 @@
+ __u8 features[8];
+
+ __u32 pkt_type;
++ __u32 link_policy;
++ __u32 link_mode;
+
+ __u16 acl_mtu;
+- __u16 acl_max;
++ __u16 acl_pkts;
+ __u16 sco_mtu;
+- __u16 sco_max;
++ __u16 sco_pkts;
+
+ struct hci_dev_stats stat;
+ };
+@@ -445,6 +750,20 @@
+ struct hci_conn_info {
+ __u16 handle;
+ bdaddr_t bdaddr;
++ __u8 type;
++ __u8 out;
++ __u16 state;
++ __u32 link_mode;
++};
++
++struct hci_dev_req {
++ __u16 dev_id;
++ __u32 dev_opt;
++};
++
++struct hci_dev_list_req {
++ __u16 dev_num;
++ struct hci_dev_req dev_req[0]; /* hci_dev_req structures */
+ };
+
+ struct hci_conn_list_req {
+@@ -453,4 +772,26 @@
+ struct hci_conn_info conn_info[0];
+ };
+
++struct hci_conn_info_req {
++ bdaddr_t bdaddr;
++ __u8 type;
++ struct hci_conn_info conn_info[0];
++};
++
++struct hci_inquiry_req {
++ __u16 dev_id;
++ __u16 flags;
++ __u8 lap[3];
++ __u8 length;
++ __u8 num_rsp;
++};
++#define IREQ_CACHE_FLUSH 0x0001
++
++struct hci_remotename_req {
++ __u16 dev_id;
++ __u16 flags;
++ bdaddr_t bdaddr;
++ __u8 name[248];
++};
++
+ #endif /* __HCI_H */
+diff -urN linux-2.4.18/include/net/bluetooth/hci_uart.h linux-2.4.18-mh15/include/net/bluetooth/hci_uart.h
+--- linux-2.4.18/include/net/bluetooth/hci_uart.h 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/include/net/bluetooth/hci_uart.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,62 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * $Id: hci_uart.h,v 1.2 2001/06/02 01:40:08 maxk Exp $
+- */
+-
+-#ifndef N_HCI
+-#define N_HCI 15
+-#endif
+-
+-#ifdef __KERNEL__
+-
+-#define tty2n_hci(tty) ((struct n_hci *)((tty)->disc_data))
+-#define n_hci2tty(n_hci) ((n_hci)->tty)
+-
+-struct n_hci {
+- struct tty_struct *tty;
+- struct hci_dev hdev;
+-
+- struct sk_buff_head txq;
+- unsigned long tx_state;
+-
+- spinlock_t rx_lock;
+- unsigned long rx_state;
+- unsigned long rx_count;
+- struct sk_buff *rx_skb;
+-};
+-
+-/* Transmit states */
+-#define TRANS_SENDING 1
+-#define TRANS_WAKEUP 2
+-
+-/* Receiver States */
+-#define WAIT_PACKET_TYPE 0
+-#define WAIT_EVENT_HDR 1
+-#define WAIT_ACL_HDR 2
+-#define WAIT_SCO_HDR 3
+-#define WAIT_DATA 4
+-
+-#endif /* __KERNEL__ */
+diff -urN linux-2.4.18/include/net/bluetooth/hci_usb.h linux-2.4.18-mh15/include/net/bluetooth/hci_usb.h
+--- linux-2.4.18/include/net/bluetooth/hci_usb.h 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/include/net/bluetooth/hci_usb.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,68 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * $Id: hci_usb.h,v 1.3 2001/06/02 01:40:08 maxk Exp $
+- */
+-
+-#ifdef __KERNEL__
+-
+-/* Class, SubClass, and Protocol codes that describe a Bluetooth device */
+-#define HCI_DEV_CLASS 0xe0 /* Wireless class */
+-#define HCI_DEV_SUBCLASS 0x01 /* RF subclass */
+-#define HCI_DEV_PROTOCOL 0x01 /* Bluetooth programming protocol */
+-
+-#define HCI_CTRL_REQ 0x20
+-
+-struct hci_usb {
+- struct usb_device *udev;
+-
+- devrequest dev_req;
+- struct urb *ctrl_urb;
+- struct urb *intr_urb;
+- struct urb *read_urb;
+- struct urb *write_urb;
+-
+- __u8 *read_buf;
+- __u8 *intr_buf;
+- struct sk_buff *intr_skb;
+- int intr_count;
+-
+- __u8 bulk_out_ep_addr;
+- __u8 bulk_in_ep_addr;
+- __u8 intr_in_ep_addr;
+- __u8 intr_in_interval;
+-
+- struct hci_dev hdev;
+-
+- unsigned long tx_state;
+- struct sk_buff_head tx_ctrl_q;
+- struct sk_buff_head tx_write_q;
+-};
+-
+-/* Transmit states */
+-#define HCI_TX_CTRL 1
+-#define HCI_TX_WRITE 2
+-
+-#endif /* __KERNEL__ */
+diff -urN linux-2.4.18/include/net/bluetooth/hci_vhci.h linux-2.4.18-mh15/include/net/bluetooth/hci_vhci.h
+--- linux-2.4.18/include/net/bluetooth/hci_vhci.h 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/include/net/bluetooth/hci_vhci.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,50 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * $Id: hci_vhci.h,v 1.2 2001/08/01 01:02:20 maxk Exp $
+- */
+-
+-#ifndef __HCI_VHCI_H
+-#define __HCI_VHCI_H
+-
+-#ifdef __KERNEL__
+-
+-struct hci_vhci_struct {
+- struct hci_dev hdev;
+- __u32 flags;
+- wait_queue_head_t read_wait;
+- struct sk_buff_head readq;
+- struct fasync_struct *fasync;
+-};
+-
+-/* VHCI device flags */
+-#define VHCI_FASYNC 0x0010
+-
+-#endif /* __KERNEL__ */
+-
+-#define VHCI_DEV "/dev/vhci"
+-#define VHCI_MINOR 250
+-
+-#endif /* __HCI_VHCI_H */
+diff -urN linux-2.4.18/include/net/bluetooth/l2cap_core.h linux-2.4.18-mh15/include/net/bluetooth/l2cap_core.h
+--- linux-2.4.18/include/net/bluetooth/l2cap_core.h 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/include/net/bluetooth/l2cap_core.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,144 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * $Id: l2cap_core.h,v 1.6 2001/08/03 04:19:49 maxk Exp $
+- */
+-
+-#ifndef __L2CAP_CORE_H
+-#define __L2CAP_CORE_H
+-
+-#ifdef __KERNEL__
+-
+-/* ----- L2CAP interface ----- */
+-struct l2cap_iff {
+- struct list_head list;
+- struct hci_dev *hdev;
+- bdaddr_t *bdaddr;
+- __u16 mtu;
+- spinlock_t lock;
+- struct list_head conn_list;
+-};
+-
+-static inline void l2cap_iff_lock(struct l2cap_iff *iff)
+-{
+- spin_lock(&iff->lock);
+-}
+-
+-static inline void l2cap_iff_unlock(struct l2cap_iff *iff)
+-{
+- spin_unlock(&iff->lock);
+-}
+-
+-/* ----- L2CAP connections ----- */
+-struct l2cap_chan_list {
+- struct sock *head;
+- rwlock_t lock;
+- long num;
+-};
+-
+-struct l2cap_conn {
+- struct l2cap_iff *iff;
+- struct list_head list;
+-
+- struct hci_conn *hconn;
+-
+- __u16 state;
+- __u8 out;
+- bdaddr_t src;
+- bdaddr_t dst;
+-
+- spinlock_t lock;
+- atomic_t refcnt;
+-
+- struct sk_buff *rx_skb;
+- __u32 rx_len;
+- __u8 rx_ident;
+- __u8 tx_ident;
+-
+- struct l2cap_chan_list chan_list;
+-
+- struct timer_list timer;
+-};
+-
+-static inline void __l2cap_conn_link(struct l2cap_iff *iff, struct l2cap_conn *c)
+-{
+- list_add(&c->list, &iff->conn_list);
+-}
+-
+-static inline void __l2cap_conn_unlink(struct l2cap_iff *iff, struct l2cap_conn *c)
+-{
+- list_del(&c->list);
+-}
+-
+-/* ----- L2CAP channel and socket info ----- */
+-#define l2cap_pi(sk) ((struct l2cap_pinfo *) &sk->protinfo)
+-
+-struct l2cap_accept_q {
+- struct sock *head;
+- struct sock *tail;
+-};
+-
+-struct l2cap_pinfo {
+- bdaddr_t src;
+- bdaddr_t dst;
+- __u16 psm;
+- __u16 dcid;
+- __u16 scid;
+- __u32 flags;
+-
+- __u16 imtu;
+- __u16 omtu;
+- __u16 flush_to;
+-
+- __u8 conf_state;
+- __u16 conf_mtu;
+-
+- __u8 ident;
+-
+- struct l2cap_conn *conn;
+- struct sock *next_c;
+- struct sock *prev_c;
+-
+- struct sock *parent;
+- struct sock *next_q;
+- struct sock *prev_q;
+-
+- struct l2cap_accept_q accept_q;
+-};
+-
+-#define CONF_REQ_SENT 0x01
+-#define CONF_INPUT_DONE 0x02
+-#define CONF_OUTPUT_DONE 0x04
+-
+-extern struct bluez_sock_list l2cap_sk_list;
+-extern struct list_head l2cap_iff_list;
+-extern rwlock_t l2cap_rt_lock;
+-
+-extern void l2cap_register_proc(void);
+-extern void l2cap_unregister_proc(void);
+-
+-#endif /* __KERNEL__ */
+-
+-#endif /* __L2CAP_CORE_H */
+diff -urN linux-2.4.18/include/net/bluetooth/l2cap.h linux-2.4.18-mh15/include/net/bluetooth/l2cap.h
+--- linux-2.4.18/include/net/bluetooth/l2cap.h 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/include/net/bluetooth/l2cap.h 2004-08-01 16:26:23.000000000 +0200
+@@ -23,22 +23,17 @@
+ */
+
+ /*
+- * $Id: l2cap.h,v 1.5 2001/06/14 21:28:26 maxk Exp $
++ * $Id: l2cap.h,v 1.1.1.1 2002/03/08 21:03:15 maxk Exp $
+ */
+
+ #ifndef __L2CAP_H
+ #define __L2CAP_H
+
+-#include <asm/types.h>
+-#include <asm/byteorder.h>
+-
+ /* L2CAP defaults */
+ #define L2CAP_DEFAULT_MTU 672
+ #define L2CAP_DEFAULT_FLUSH_TO 0xFFFF
+
+ #define L2CAP_CONN_TIMEOUT (HZ * 40)
+-#define L2CAP_DISCONN_TIMEOUT (HZ * 2)
+-#define L2CAP_CONN_IDLE_TIMEOUT (HZ * 60)
+
+ /* L2CAP socket address */
+ struct sockaddr_l2 {
+@@ -47,17 +42,12 @@
+ bdaddr_t l2_bdaddr;
+ };
+
+-/* set/get sockopt defines */
+-#define L2CAP_OPTIONS 0x01
++/* Socket options */
++#define L2CAP_OPTIONS 0x01
+ struct l2cap_options {
+ __u16 omtu;
+ __u16 imtu;
+ __u16 flush_to;
+- __u32 token_rate;
+- __u32 bucket_size;
+- __u32 pick_band;
+- __u32 latency;
+- __u32 delay_var;
+ };
+
+ #define L2CAP_CONNINFO 0x02
+@@ -65,6 +55,27 @@
+ __u16 hci_handle;
+ };
+
++#define L2CAP_LM 0x03
++#define L2CAP_LM_MASTER 0x0001
++#define L2CAP_LM_AUTH 0x0002
++#define L2CAP_LM_ENCRYPT 0x0004
++#define L2CAP_LM_TRUSTED 0x0008
++#define L2CAP_LM_RELIABLE 0x0010
++
++#define L2CAP_QOS 0x04
++struct l2cap_qos {
++ __u16 service_type;
++ __u32 token_rate;
++ __u32 token_bucket_size;
++ __u32 peak_bandwidth;
++ __u32 latency;
++ __u32 delay_variation;
++};
++
++#define L2CAP_SERV_NO_TRAFFIC 0x00
++#define L2CAP_SERV_BEST_EFFORT 0x01
++#define L2CAP_SERV_GUARANTEED 0x02
++
+ /* L2CAP command codes */
+ #define L2CAP_COMMAND_REJ 0x01
+ #define L2CAP_CONN_REQ 0x02
+@@ -79,7 +90,6 @@
+ #define L2CAP_INFO_RSP 0x0b
+
+ /* L2CAP structures */
+-
+ typedef struct {
+ __u16 len;
+ __u16 cid;
+@@ -112,11 +122,17 @@
+ } __attribute__ ((packed)) l2cap_conn_rsp;
+ #define L2CAP_CONN_RSP_SIZE 8
+
+-#define L2CAP_CONN_SUCCESS 0x0000
+-#define L2CAP_CONN_PEND 0x0001
+-#define L2CAP_CONN_BAD_PSM 0x0002
+-#define L2CAP_CONN_SEC_BLOCK 0x0003
+-#define L2CAP_CONN_NO_MEM 0x0004
++/* connect result */
++#define L2CAP_CR_SUCCESS 0x0000
++#define L2CAP_CR_PEND 0x0001
++#define L2CAP_CR_BAD_PSM 0x0002
++#define L2CAP_CR_SEC_BLOCK 0x0003
++#define L2CAP_CR_NO_MEM 0x0004
++
++/* connect status */
++#define L2CAP_CS_NO_INFO 0x0000
++#define L2CAP_CS_AUTHEN_PEND 0x0001
++#define L2CAP_CS_AUTHOR_PEND 0x0002
+
+ typedef struct {
+ __u16 dcid;
+@@ -147,6 +163,8 @@
+ #define L2CAP_CONF_FLUSH_TO 0x02
+ #define L2CAP_CONF_QOS 0x03
+
++#define L2CAP_CONF_MAX_SIZE 22
++
+ typedef struct {
+ __u16 dcid;
+ __u16 scid;
+@@ -159,4 +177,82 @@
+ } __attribute__ ((packed)) l2cap_disconn_rsp;
+ #define L2CAP_DISCONN_RSP_SIZE 4
+
++typedef struct {
++ __u16 type;
++ __u8 data[0];
++} __attribute__ ((packed)) l2cap_info_req;
++#define L2CAP_INFO_REQ_SIZE 2
++
++typedef struct {
++ __u16 type;
++ __u16 result;
++ __u8 data[0];
++} __attribute__ ((packed)) l2cap_info_rsp;
++#define L2CAP_INFO_RSP_SIZE 4
++
++/* info type */
++#define L2CAP_IT_CL_MTU 0x0001
++#define L2CAP_IT_FEAT_MASK 0x0002
++
++/* info result */
++#define L2CAP_IR_SUCCESS 0x0000
++#define L2CAP_IR_NOTSUPP 0x0001
++
++/* ----- L2CAP connections ----- */
++struct l2cap_chan_list {
++ struct sock *head;
++ rwlock_t lock;
++ long num;
++};
++
++struct l2cap_conn {
++ struct hci_conn *hcon;
++
++ bdaddr_t *dst;
++ bdaddr_t *src;
++
++ unsigned int mtu;
++
++ spinlock_t lock;
++
++ struct sk_buff *rx_skb;
++ __u32 rx_len;
++ __u8 rx_ident;
++ __u8 tx_ident;
++
++ struct l2cap_chan_list chan_list;
++};
++
++/* ----- L2CAP channel and socket info ----- */
++#define l2cap_pi(sk) ((struct l2cap_pinfo *) &sk->tp_pinfo)
++
++struct l2cap_pinfo {
++ __u16 psm;
++ __u16 dcid;
++ __u16 scid;
++
++ __u16 imtu;
++ __u16 omtu;
++ __u16 flush_to;
++
++ __u32 link_mode;
++
++ __u8 conf_state;
++ __u8 conf_retry;
++ __u16 conf_mtu;
++
++ __u8 ident;
++
++ struct l2cap_conn *conn;
++ struct sock *next_c;
++ struct sock *prev_c;
++};
++
++#define L2CAP_CONF_REQ_SENT 0x01
++#define L2CAP_CONF_INPUT_DONE 0x02
++#define L2CAP_CONF_OUTPUT_DONE 0x04
++#define L2CAP_CONF_MAX_RETRIES 2
++
++void l2cap_load(void);
++
+ #endif /* __L2CAP_H */
+diff -urN linux-2.4.18/include/net/bluetooth/rfcomm.h linux-2.4.18-mh15/include/net/bluetooth/rfcomm.h
+--- linux-2.4.18/include/net/bluetooth/rfcomm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/include/net/bluetooth/rfcomm.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,361 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ RPN support - Dirk Husemann <hud@zurich.ibm.com>
++*/
++
++/*
++ * $Id: rfcomm.h,v 1.31 2002/10/18 20:12:11 maxk Exp $
++ */
++
++#ifndef __RFCOMM_H
++#define __RFCOMM_H
++
++#define RFCOMM_PSM 3
++
++#define RFCOMM_CONN_TIMEOUT (HZ * 30)
++#define RFCOMM_DISC_TIMEOUT (HZ * 20)
++
++#define RFCOMM_DEFAULT_MTU 127
++#define RFCOMM_DEFAULT_CREDITS 7
++
++#define RFCOMM_MAX_L2CAP_MTU 1024
++#define RFCOMM_MAX_CREDITS 40
++
++#define RFCOMM_SKB_HEAD_RESERVE 8
++#define RFCOMM_SKB_TAIL_RESERVE 2
++#define RFCOMM_SKB_RESERVE (RFCOMM_SKB_HEAD_RESERVE + RFCOMM_SKB_TAIL_RESERVE)
++
++#define RFCOMM_SABM 0x2f
++#define RFCOMM_DISC 0x43
++#define RFCOMM_UA 0x63
++#define RFCOMM_DM 0x0f
++#define RFCOMM_UIH 0xef
++
++#define RFCOMM_TEST 0x08
++#define RFCOMM_FCON 0x28
++#define RFCOMM_FCOFF 0x18
++#define RFCOMM_MSC 0x38
++#define RFCOMM_RPN 0x24
++#define RFCOMM_RLS 0x14
++#define RFCOMM_PN 0x20
++#define RFCOMM_NSC 0x04
++
++#define RFCOMM_V24_FC 0x02
++#define RFCOMM_V24_RTC 0x04
++#define RFCOMM_V24_RTR 0x08
++#define RFCOMM_V24_IC 0x40
++#define RFCOMM_V24_DV 0x80
++
++#define RFCOMM_RPN_BR_2400 0x0
++#define RFCOMM_RPN_BR_4800 0x1
++#define RFCOMM_RPN_BR_7200 0x2
++#define RFCOMM_RPN_BR_9600 0x3
++#define RFCOMM_RPN_BR_19200 0x4
++#define RFCOMM_RPN_BR_38400 0x5
++#define RFCOMM_RPN_BR_57600 0x6
++#define RFCOMM_RPN_BR_115200 0x7
++#define RFCOMM_RPN_BR_230400 0x8
++
++#define RFCOMM_RPN_DATA_5 0x0
++#define RFCOMM_RPN_DATA_6 0x1
++#define RFCOMM_RPN_DATA_7 0x2
++#define RFCOMM_RPN_DATA_8 0x3
++
++#define RFCOMM_RPN_STOP_1 0
++#define RFCOMM_RPN_STOP_15 1
++
++#define RFCOMM_RPN_PARITY_NONE 0x0
++#define RFCOMM_RPN_PARITY_ODD 0x4
++#define RFCOMM_RPN_PARITY_EVEN 0x5
++#define RFCOMM_RPN_PARITY_MARK 0x6
++#define RFCOMM_RPN_PARITY_SPACE 0x7
++
++#define RFCOMM_RPN_FLOW_NONE 0x00
++
++#define RFCOMM_RPN_XON_CHAR 0x11
++#define RFCOMM_RPN_XOFF_CHAR 0x13
++
++#define RFCOMM_RPN_PM_BITRATE 0x0001
++#define RFCOMM_RPN_PM_DATA 0x0002
++#define RFCOMM_RPN_PM_STOP 0x0004
++#define RFCOMM_RPN_PM_PARITY 0x0008
++#define RFCOMM_RPN_PM_PARITY_TYPE 0x0010
++#define RFCOMM_RPN_PM_XON 0x0020
++#define RFCOMM_RPN_PM_XOFF 0x0040
++#define RFCOMM_RPN_PM_FLOW 0x3F00
++
++#define RFCOMM_RPN_PM_ALL 0x3F7F
++
++struct rfcomm_hdr {
++ u8 addr;
++ u8 ctrl;
++ u8 len; // Actual size can be 2 bytes
++} __attribute__ ((packed));
++
++struct rfcomm_cmd {
++ u8 addr;
++ u8 ctrl;
++ u8 len;
++ u8 fcs;
++} __attribute__ ((packed));
++
++struct rfcomm_mcc {
++ u8 type;
++ u8 len;
++} __attribute__ ((packed));
++
++struct rfcomm_pn {
++ u8 dlci;
++ u8 flow_ctrl;
++ u8 priority;
++ u8 ack_timer;
++ u16 mtu;
++ u8 max_retrans;
++ u8 credits;
++} __attribute__ ((packed));
++
++struct rfcomm_rpn {
++ u8 dlci;
++ u8 bit_rate;
++ u8 line_settings;
++ u8 flow_ctrl;
++ u8 xon_char;
++ u8 xoff_char;
++ u16 param_mask;
++} __attribute__ ((packed));
++
++struct rfcomm_rls {
++ u8 dlci;
++ u8 status;
++} __attribute__ ((packed));
++
++struct rfcomm_msc {
++ u8 dlci;
++ u8 v24_sig;
++} __attribute__ ((packed));
++
++/* ---- Core structures, flags etc ---- */
++
++struct rfcomm_session {
++ struct list_head list;
++ struct socket *sock;
++ unsigned long state;
++ unsigned long flags;
++ atomic_t refcnt;
++ int initiator;
++
++ /* Default DLC parameters */
++ int cfc;
++ uint mtu;
++
++ struct list_head dlcs;
++};
++
++struct rfcomm_dlc {
++ struct list_head list;
++ struct rfcomm_session *session;
++ struct sk_buff_head tx_queue;
++ struct timer_list timer;
++
++ spinlock_t lock;
++ unsigned long state;
++ unsigned long flags;
++ atomic_t refcnt;
++ u8 dlci;
++ u8 addr;
++ u8 priority;
++ u8 v24_sig;
++ u8 mscex;
++
++ uint mtu;
++ uint cfc;
++ uint rx_credits;
++ uint tx_credits;
++
++ void *owner;
++
++ void (*data_ready)(struct rfcomm_dlc *d, struct sk_buff *skb);
++ void (*state_change)(struct rfcomm_dlc *d, int err);
++ void (*modem_status)(struct rfcomm_dlc *d, u8 v24_sig);
++};
++
++/* DLC and session flags */
++#define RFCOMM_RX_THROTTLED 0
++#define RFCOMM_TX_THROTTLED 1
++#define RFCOMM_MSC_PENDING 2
++#define RFCOMM_TIMED_OUT 3
++
++/* Scheduling flags and events */
++#define RFCOMM_SCHED_STATE 0
++#define RFCOMM_SCHED_RX 1
++#define RFCOMM_SCHED_TX 2
++#define RFCOMM_SCHED_TIMEO 3
++#define RFCOMM_SCHED_WAKEUP 31
++
++/* MSC exchange flags */
++#define RFCOMM_MSCEX_TX 1
++#define RFCOMM_MSCEX_RX 2
++#define RFCOMM_MSCEX_OK (RFCOMM_MSCEX_TX + RFCOMM_MSCEX_RX)
++
++/* CFC states */
++#define RFCOMM_CFC_UNKNOWN -1
++#define RFCOMM_CFC_DISABLED 0
++#define RFCOMM_CFC_ENABLED RFCOMM_MAX_CREDITS
++
++extern struct task_struct *rfcomm_thread;
++extern unsigned long rfcomm_event;
++
++static inline void rfcomm_schedule(uint event)
++{
++ if (!rfcomm_thread)
++ return;
++ set_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event);
++ wake_up_process(rfcomm_thread);
++}
++
++extern struct semaphore rfcomm_sem;
++#define rfcomm_lock() down(&rfcomm_sem);
++#define rfcomm_unlock() up(&rfcomm_sem);
++
++/* ---- RFCOMM DLCs (channels) ---- */
++struct rfcomm_dlc *rfcomm_dlc_alloc(int prio);
++void rfcomm_dlc_free(struct rfcomm_dlc *d);
++int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel);
++int rfcomm_dlc_close(struct rfcomm_dlc *d, int reason);
++int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb);
++int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig);
++int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig);
++
++#define rfcomm_dlc_lock(d) spin_lock(&d->lock)
++#define rfcomm_dlc_unlock(d) spin_unlock(&d->lock)
++
++static inline void rfcomm_dlc_hold(struct rfcomm_dlc *d)
++{
++ atomic_inc(&d->refcnt);
++}
++
++static inline void rfcomm_dlc_put(struct rfcomm_dlc *d)
++{
++ if (atomic_dec_and_test(&d->refcnt))
++ rfcomm_dlc_free(d);
++}
++
++extern void FASTCALL(__rfcomm_dlc_throttle(struct rfcomm_dlc *d));
++extern void FASTCALL(__rfcomm_dlc_unthrottle(struct rfcomm_dlc *d));
++
++static inline void rfcomm_dlc_throttle(struct rfcomm_dlc *d)
++{
++ if (!test_and_set_bit(RFCOMM_RX_THROTTLED, &d->flags))
++ __rfcomm_dlc_throttle(d);
++}
++
++static inline void rfcomm_dlc_unthrottle(struct rfcomm_dlc *d)
++{
++ if (test_and_clear_bit(RFCOMM_RX_THROTTLED, &d->flags))
++ __rfcomm_dlc_unthrottle(d);
++}
++
++/* ---- RFCOMM sessions ---- */
++struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state);
++struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst);
++struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst, int *err);
++void rfcomm_session_del(struct rfcomm_session *s);
++void rfcomm_session_close(struct rfcomm_session *s, int err);
++void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst);
++
++static inline void rfcomm_session_hold(struct rfcomm_session *s)
++{
++ atomic_inc(&s->refcnt);
++}
++
++static inline void rfcomm_session_put(struct rfcomm_session *s)
++{
++ if (atomic_dec_and_test(&s->refcnt))
++ rfcomm_session_del(s);
++}
++
++/* ---- RFCOMM chechsum ---- */
++extern u8 rfcomm_crc_table[];
++
++/* ---- RFCOMM sockets ---- */
++struct sockaddr_rc {
++ sa_family_t rc_family;
++ bdaddr_t rc_bdaddr;
++ u8 rc_channel;
++};
++
++#define rfcomm_pi(sk) ((struct rfcomm_pinfo *) &sk->tp_pinfo)
++
++struct rfcomm_pinfo {
++ struct rfcomm_dlc *dlc;
++ u8 channel;
++};
++
++int rfcomm_init_sockets(void);
++void rfcomm_cleanup_sockets(void);
++
++int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc **d);
++
++/* ---- RFCOMM TTY ---- */
++#define RFCOMM_MAX_DEV 256
++
++#define RFCOMMCREATEDEV _IOW('R', 200, int)
++#define RFCOMMRELEASEDEV _IOW('R', 201, int)
++#define RFCOMMGETDEVLIST _IOR('R', 210, int)
++#define RFCOMMGETDEVINFO _IOR('R', 211, int)
++#define RFCOMMSTEALDLC _IOW('R', 220, int)
++
++#define RFCOMM_REUSE_DLC 0
++#define RFCOMM_RELEASE_ONHUP 1
++#define RFCOMM_HANGUP_NOW 2
++#define RFCOMM_TTY_ATTACHED 3
++
++struct rfcomm_dev_req {
++ s16 dev_id;
++ u32 flags;
++ bdaddr_t src;
++ bdaddr_t dst;
++ u8 channel;
++};
++
++struct rfcomm_dev_info {
++ s16 id;
++ u32 flags;
++ u16 state;
++ bdaddr_t src;
++ bdaddr_t dst;
++ u8 channel;
++};
++
++struct rfcomm_dev_list_req {
++ u16 dev_num;
++ struct rfcomm_dev_info dev_info[0];
++};
++
++int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, unsigned long arg);
++int rfcomm_init_ttys(void);
++void rfcomm_cleanup_ttys(void);
++
++#endif /* __RFCOMM_H */
+diff -urN linux-2.4.18/include/net/bluetooth/sco.h linux-2.4.18-mh15/include/net/bluetooth/sco.h
+--- linux-2.4.18/include/net/bluetooth/sco.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/include/net/bluetooth/sco.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,81 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: sco.h,v 1.1.1.1 2002/03/08 21:03:15 maxk Exp $
++ */
++
++#ifndef __SCO_H
++#define __SCO_H
++
++/* SCO defaults */
++#define SCO_DEFAULT_MTU 500
++#define SCO_DEFAULT_FLUSH_TO 0xFFFF
++
++#define SCO_CONN_TIMEOUT (HZ * 40)
++#define SCO_DISCONN_TIMEOUT (HZ * 2)
++#define SCO_CONN_IDLE_TIMEOUT (HZ * 60)
++
++/* SCO socket address */
++struct sockaddr_sco {
++ sa_family_t sco_family;
++ bdaddr_t sco_bdaddr;
++};
++
++/* set/get sockopt defines */
++#define SCO_OPTIONS 0x01
++struct sco_options {
++ __u16 mtu;
++};
++
++#define SCO_CONNINFO 0x02
++struct sco_conninfo {
++ __u16 hci_handle;
++};
++
++/* ---- SCO connections ---- */
++struct sco_conn {
++ struct hci_conn *hcon;
++
++ bdaddr_t *dst;
++ bdaddr_t *src;
++
++ spinlock_t lock;
++ struct sock *sk;
++
++ unsigned int mtu;
++};
++
++#define sco_conn_lock(c) spin_lock(&c->lock);
++#define sco_conn_unlock(c) spin_unlock(&c->lock);
++
++/* ----- SCO socket info ----- */
++#define sco_pi(sk) ((struct sco_pinfo *) &sk->tp_pinfo)
++
++struct sco_pinfo {
++ __u32 flags;
++ struct sco_conn *conn;
++};
++
++#endif /* __SCO_H */
+diff -urN linux-2.4.18/include/pcmcia/ciscode.h linux-2.4.18-mh15/include/pcmcia/ciscode.h
+--- linux-2.4.18/include/pcmcia/ciscode.h 2001-12-21 18:42:04.000000000 +0100
++++ linux-2.4.18-mh15/include/pcmcia/ciscode.h 2004-08-01 16:26:23.000000000 +0200
+@@ -1,5 +1,5 @@
+ /*
+- * ciscode.h 1.48 2001/08/24 12:16:12
++ * ciscode.h 1.57 2002/11/03 20:38:14
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+@@ -60,6 +60,10 @@
+ #define PRODID_INTEL_DUAL_RS232 0x0301
+ #define PRODID_INTEL_2PLUS 0x8422
+
++#define MANFID_KME 0x0032
++#define PRODID_KME_KXLC005_A 0x0704
++#define PRODID_KME_KXLC005_B 0x2904
++
+ #define MANFID_LINKSYS 0x0143
+ #define PRODID_LINKSYS_PCMLM28 0xc0ab
+ #define PRODID_LINKSYS_3400 0x3341
+@@ -94,6 +98,8 @@
+ #define PRODID_OSITECH_JACK_336 0x0007
+ #define PRODID_OSITECH_SEVEN 0x0008
+
++#define MANFID_OXSEMI 0x0279
++
+ #define MANFID_PIONEER 0x000b
+
+ #define MANFID_PSION 0x016c
+@@ -103,6 +109,7 @@
+ #define PRODID_QUATECH_SPP100 0x0003
+ #define PRODID_QUATECH_DUAL_RS232 0x0012
+ #define PRODID_QUATECH_DUAL_RS232_D1 0x0007
++#define PRODID_QUATECH_DUAL_RS232_D2 0x0052
+ #define PRODID_QUATECH_QUAD_RS232 0x001b
+ #define PRODID_QUATECH_DUAL_RS422 0x000e
+ #define PRODID_QUATECH_QUAD_RS422 0x0045
+@@ -120,9 +127,12 @@
+
+ #define MANFID_TDK 0x0105
+ #define PRODID_TDK_CF010 0x0900
++#define PRODID_TDK_GN3410 0x4815
+
+ #define MANFID_TOSHIBA 0x0098
+
++#define MANFID_UNGERMANN 0x02c0
++
+ #define MANFID_XIRCOM 0x0105
+
+ #endif /* _LINUX_CISCODE_H */
+diff -urN linux-2.4.18/kernel/ksyms.c linux-2.4.18-mh15/kernel/ksyms.c
+--- linux-2.4.18/kernel/ksyms.c 2002-02-25 20:38:13.000000000 +0100
++++ linux-2.4.18-mh15/kernel/ksyms.c 2004-08-01 16:26:23.000000000 +0200
+@@ -47,6 +47,7 @@
+ #include <linux/in6.h>
+ #include <linux/completion.h>
+ #include <linux/seq_file.h>
++#include <linux/firmware.h>
+ #include <asm/checksum.h>
+
+ #if defined(CONFIG_PROC_FS)
+@@ -538,6 +539,13 @@
+ EXPORT_SYMBOL(strspn);
+ EXPORT_SYMBOL(strsep);
+
++#ifdef CONFIG_FW_LOADER
++EXPORT_SYMBOL(release_firmware);
++EXPORT_SYMBOL(request_firmware);
++EXPORT_SYMBOL(request_firmware_nowait);
++EXPORT_SYMBOL(register_firmware);
++#endif
++
+ /* software interrupts */
+ EXPORT_SYMBOL(tasklet_hi_vec);
+ EXPORT_SYMBOL(tasklet_vec);
+diff -urN linux-2.4.18/lib/Config.in linux-2.4.18-mh15/lib/Config.in
+--- linux-2.4.18/lib/Config.in 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/lib/Config.in 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,12 @@
++#
++# Library configuration
++#
++mainmenu_option next_comment
++comment 'Library routines'
++
++if [ "$CONFIG_EXPERIMENTAL" = "y" -a \
++ "$CONFIG_HOTPLUG" = "y" ]; then
++ tristate 'Hotplug firmware loading support (EXPERIMENTAL)' CONFIG_FW_LOADER
++fi
++
++endmenu
+diff -urN linux-2.4.18/lib/firmware_class.c linux-2.4.18-mh15/lib/firmware_class.c
+--- linux-2.4.18/lib/firmware_class.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/lib/firmware_class.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,573 @@
++/*
++ * firmware_class.c - Multi purpose firmware loading support
++ *
++ * Copyright (c) 2003 Manuel Estrada Sainz <ranty@debian.org>
++ *
++ * Please see Documentation/firmware_class/ for more information.
++ *
++ */
++/*
++ * Based on kernel/kmod.c and drivers/usb/usb.c
++ */
++/*
++ kernel/kmod.c
++ Kirk Petersen
++
++ Reorganized not to be a daemon by Adam Richter, with guidance
++ from Greg Zornetzer.
++
++ Modified to avoid chroot and file sharing problems.
++ Mikael Pettersson
++
++ Limit the concurrent number of kmod modprobes to catch loops from
++ "modprobe needs a service that is in a module".
++ Keith Owens <kaos@ocs.com.au> December 1999
++
++ Unblock all signals when we exec a usermode process.
++ Shuu Yamaguchi <shuu@wondernetworkresources.com> December 2000
++*/
++/*
++ * drivers/usb/usb.c
++ *
++ * (C) Copyright Linus Torvalds 1999
++ * (C) Copyright Johannes Erdfelt 1999-2001
++ * (C) Copyright Andreas Gal 1999
++ * (C) Copyright Gregory P. Smith 1999
++ * (C) Copyright Deti Fliegl 1999 (new USB architecture)
++ * (C) Copyright Randy Dunlap 2000
++ * (C) Copyright David Brownell 2000 (kernel hotplug, usb_device_id)
++ * (C) Copyright Yggdrasil Computing, Inc. 2000
++ * (usb_device_id matching changes by Adam J. Richter)
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/string.h>
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/kmod.h>
++#include <linux/proc_fs.h>
++#include <linux/vmalloc.h>
++#include <asm/hardirq.h>
++
++#include "linux/firmware.h"
++
++MODULE_AUTHOR("Manuel Estrada Sainz <ranty@debian.org>");
++MODULE_DESCRIPTION("Multi purpose firmware loading support");
++MODULE_LICENSE("GPL");
++
++#define err(format, arg...) \
++ printk(KERN_ERR "%s:%s: " format "\n",__FILE__, __FUNCTION__ , ## arg)
++#define warn(format, arg...) \
++ printk(KERN_WARNING "%s:%s: " format "\n",__FILE__, __FUNCTION__ , ## arg)
++#define dbg(format, arg...) \
++ printk(KERN_DEBUG "%s:%s: " format "\n",__FILE__, __FUNCTION__ , ## arg)
++
++static int loading_timeout = 10; /* In seconds */
++static struct proc_dir_entry *proc_dir_timeout;
++static struct proc_dir_entry *proc_dir;
++
++#ifdef CONFIG_HOTPLUG
++
++static int
++call_helper(char *verb, const char *name, const char *device)
++{
++ char *argv[3], **envp, *buf, *scratch;
++ int i = 0;
++
++ int retval = 0;
++
++ if (!hotplug_path[0])
++ return -ENOENT;
++ if (in_interrupt()) {
++ err("in_interrupt");
++ return -EFAULT;
++ }
++ if (!current->fs->root) {
++ warn("call_policy %s -- no FS yet", verb);
++ return -EPERM;
++ }
++
++ if (!(envp = (char **) kmalloc(20 * sizeof (char *), GFP_KERNEL))) {
++ err("unable to allocate envp");
++ return -ENOMEM;
++ }
++ if (!(buf = kmalloc(256, GFP_KERNEL))) {
++ kfree(envp);
++ err("unable to allocate buf");
++ return -ENOMEM;
++ }
++
++ /* only one standardized param to hotplug command: type */
++ argv[0] = hotplug_path;
++ argv[1] = "firmware";
++ argv[2] = 0;
++
++ /* minimal command environment */
++ envp[i++] = "HOME=/";
++ envp[i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";
++
++#ifdef DEBUG
++ /* hint that policy agent should enter no-stdout debug mode */
++ envp[i++] = "DEBUG=kernel";
++#endif
++ scratch = buf;
++
++ if (device) {
++ envp[i++] = scratch;
++ scratch += snprintf(scratch, FIRMWARE_NAME_MAX+25,
++ "DEVPATH=/driver/firmware/%s", device) + 1;
++ }
++
++ envp[i++] = scratch;
++ scratch += sprintf(scratch, "ACTION=%s", verb) + 1;
++
++ envp[i++] = scratch;
++ scratch += snprintf(scratch, FIRMWARE_NAME_MAX,
++ "FIRMWARE=%s", name) + 1;
++
++ envp[i++] = 0;
++
++#ifdef DEBUG
++ dbg("firmware: %s %s %s", argv[0], argv[1], verb);
++#endif
++
++ retval = call_usermodehelper(argv[0], argv, envp);
++ if (retval) {
++ printk("call_usermodehelper return %d\n", retval);
++ }
++
++ kfree(buf);
++ kfree(envp);
++ return retval;
++}
++#else
++
++static inline int
++call_helper(char *verb, const char *name, const char *device)
++{
++ return -ENOENT;
++}
++
++#endif /* CONFIG_HOTPLUG */
++
++struct firmware_priv {
++ struct completion completion;
++ struct proc_dir_entry *proc_dir;
++ struct proc_dir_entry *attr_data;
++ struct proc_dir_entry *attr_loading;
++ struct firmware *fw;
++ int loading;
++ int abort;
++ int alloc_size;
++ struct timer_list timeout;
++};
++
++static int
++firmware_timeout_show(char *buf, char **start, off_t off,
++ int count, int *eof, void *data)
++{
++ return sprintf(buf, "%d\n", loading_timeout);
++}
++
++/**
++ * firmware_timeout_store:
++ * Description:
++ * Sets the number of seconds to wait for the firmware. Once
++ * this expires an error will be return to the driver and no
++ * firmware will be provided.
++ *
++ * Note: zero means 'wait for ever'
++ *
++ **/
++static int
++firmware_timeout_store(struct file *file, const char *buf,
++ unsigned long count, void *data)
++{
++ loading_timeout = simple_strtol(buf, NULL, 10);
++ return count;
++}
++
++static int
++firmware_loading_show(char *buf, char **start, off_t off,
++ int count, int *eof, void *data)
++{
++ struct firmware_priv *fw_priv = data;
++ return sprintf(buf, "%d\n", fw_priv->loading);
++}
++
++/**
++ * firmware_loading_store: - loading control file
++ * Description:
++ * The relevant values are:
++ *
++ * 1: Start a load, discarding any previous partial load.
++ * 0: Conclude the load and handle the data to the driver code.
++ * -1: Conclude the load with an error and discard any written data.
++ **/
++static int
++firmware_loading_store(struct file *file, const char *buf,
++ unsigned long count, void *data)
++{
++ struct firmware_priv *fw_priv = data;
++ int prev_loading = fw_priv->loading;
++
++ fw_priv->loading = simple_strtol(buf, NULL, 10);
++
++ switch (fw_priv->loading) {
++ case -1:
++ fw_priv->abort = 1;
++ wmb();
++ complete(&fw_priv->completion);
++ break;
++ case 1:
++ kfree(fw_priv->fw->data);
++ fw_priv->fw->data = NULL;
++ fw_priv->fw->size = 0;
++ fw_priv->alloc_size = 0;
++ break;
++ case 0:
++ if (prev_loading == 1)
++ complete(&fw_priv->completion);
++ break;
++ }
++
++ return count;
++}
++
++static int
++firmware_data_read(char *buffer, char **start, off_t offset,
++ int count, int *eof, void *data)
++{
++ struct firmware_priv *fw_priv = data;
++ struct firmware *fw = fw_priv->fw;
++
++ if (offset > fw->size)
++ return 0;
++ if (offset + count > fw->size)
++ count = fw->size - offset;
++
++ memcpy(buffer, fw->data + offset, count);
++ *start = (void *) ((long) count);
++ return count;
++}
++static int
++fw_realloc_buffer(struct firmware_priv *fw_priv, int min_size)
++{
++ u8 *new_data;
++ int new_size;
++
++ if (min_size <= fw_priv->alloc_size)
++ return 0;
++ if((min_size % PAGE_SIZE) == 0)
++ new_size = min_size;
++ else
++ new_size = (min_size + PAGE_SIZE) & PAGE_MASK;
++ new_data = vmalloc(new_size);
++ if (!new_data) {
++ printk(KERN_ERR "%s: unable to alloc buffer\n", __FUNCTION__);
++ /* Make sure that we don't keep incomplete data */
++ fw_priv->abort = 1;
++ return -ENOMEM;
++ }
++ fw_priv->alloc_size = new_size;
++ if (fw_priv->fw->data) {
++ memcpy(new_data, fw_priv->fw->data, fw_priv->fw->size);
++ vfree(fw_priv->fw->data);
++ }
++ fw_priv->fw->data = new_data;
++ BUG_ON(min_size > fw_priv->alloc_size);
++ return 0;
++}
++
++/**
++ * firmware_data_write:
++ *
++ * Description:
++ *
++ * Data written to the 'data' attribute will be later handled to
++ * the driver as a firmware image.
++ **/
++static int
++firmware_data_write(struct file *file, const char *buffer,
++ unsigned long count, void *data)
++{
++ struct firmware_priv *fw_priv = data;
++ struct firmware *fw = fw_priv->fw;
++ int offset = file->f_pos;
++ int retval;
++
++ retval = fw_realloc_buffer(fw_priv, offset + count);
++ if (retval) {
++ printk("%s: retval:%d\n", __FUNCTION__, retval);
++ return retval;
++ }
++
++ memcpy(fw->data + offset, buffer, count);
++
++ fw->size = max_t(size_t, offset + count, fw->size);
++ file->f_pos += count;
++ return count;
++}
++
++static void
++firmware_class_timeout(u_long data)
++{
++ struct firmware_priv *fw_priv = (struct firmware_priv *) data;
++ fw_priv->abort = 1;
++ wmb();
++ complete(&fw_priv->completion);
++}
++static int
++fw_setup_class_device(struct firmware_priv **fw_priv_p,
++ const char *fw_name, const char *device)
++{
++ int retval;
++ struct firmware_priv *fw_priv = kmalloc(sizeof (struct firmware_priv),
++ GFP_KERNEL);
++ *fw_priv_p = fw_priv;
++ if (!fw_priv) {
++ retval = -ENOMEM;
++ goto out;
++ }
++ memset(fw_priv, 0, sizeof (*fw_priv));
++
++ init_completion(&fw_priv->completion);
++
++ fw_priv->timeout.function = firmware_class_timeout;
++ fw_priv->timeout.data = (u_long) fw_priv;
++ init_timer(&fw_priv->timeout);
++
++ retval = -EAGAIN;
++ fw_priv->proc_dir = create_proc_entry(device, 0644 | S_IFDIR, proc_dir);
++ if (!fw_priv->proc_dir)
++ goto err_free_fw_priv;
++
++ fw_priv->attr_data = create_proc_entry("data", 0644 | S_IFREG,
++ fw_priv->proc_dir);
++ if (!fw_priv->attr_data)
++ goto err_remove_dir;
++
++ fw_priv->attr_data->read_proc = firmware_data_read;
++ fw_priv->attr_data->write_proc = firmware_data_write;
++ fw_priv->attr_data->data = fw_priv;
++
++ fw_priv->attr_loading = create_proc_entry("loading", 0644 | S_IFREG,
++ fw_priv->proc_dir);
++ if (!fw_priv->attr_loading)
++ goto err_remove_data;
++
++ fw_priv->attr_loading->read_proc = firmware_loading_show;
++ fw_priv->attr_loading->write_proc = firmware_loading_store;
++ fw_priv->attr_loading->data = fw_priv;
++
++ retval = 0;
++ fw_priv->fw = kmalloc(sizeof (struct firmware), GFP_KERNEL);
++ if (!fw_priv->fw) {
++ printk(KERN_ERR "%s: kmalloc(struct firmware) failed\n",
++ __FUNCTION__);
++ retval = -ENOMEM;
++ goto err_remove_loading;
++ }
++ memset(fw_priv->fw, 0, sizeof (*fw_priv->fw));
++
++ goto out;
++
++err_remove_loading:
++ remove_proc_entry("loading", fw_priv->proc_dir);
++err_remove_data:
++ remove_proc_entry("data", fw_priv->proc_dir);
++err_remove_dir:
++ remove_proc_entry(device, proc_dir);
++err_free_fw_priv:
++ kfree(fw_priv);
++out:
++ return retval;
++}
++static void
++fw_remove_class_device(struct firmware_priv *fw_priv)
++{
++ remove_proc_entry("loading", fw_priv->proc_dir);
++ remove_proc_entry("data", fw_priv->proc_dir);
++ remove_proc_entry(fw_priv->proc_dir->name, proc_dir);
++}
++
++/**
++ * request_firmware: - request firmware to hotplug and wait for it
++ * Description:
++ * @firmware will be used to return a firmware image by the name
++ * of @name for device @device.
++ *
++ * Should be called from user context where sleeping is allowed.
++ *
++ * @name will be use as $FIRMWARE in the hotplug environment and
++ * should be distinctive enough not to be confused with any other
++ * firmware image for this or any other device.
++ **/
++int
++request_firmware(const struct firmware **firmware, const char *name,
++ const char *device)
++{
++ struct firmware_priv *fw_priv;
++ int retval;
++
++ if (!firmware) {
++ retval = -EINVAL;
++ goto out;
++ }
++ *firmware = NULL;
++
++ retval = fw_setup_class_device(&fw_priv, name, device);
++ if (retval)
++ goto out;
++
++ retval = call_helper("add", name, device);
++ if (retval)
++ goto out;
++ if (loading_timeout) {
++ fw_priv->timeout.expires = jiffies + loading_timeout * HZ;
++ add_timer(&fw_priv->timeout);
++ }
++
++ wait_for_completion(&fw_priv->completion);
++
++ del_timer(&fw_priv->timeout);
++ fw_remove_class_device(fw_priv);
++
++ if (fw_priv->fw->size && !fw_priv->abort) {
++ *firmware = fw_priv->fw;
++ } else {
++ retval = -ENOENT;
++ vfree(fw_priv->fw->data);
++ kfree(fw_priv->fw);
++ }
++out:
++ kfree(fw_priv);
++ return retval;
++}
++
++void
++release_firmware(const struct firmware *fw)
++{
++ if (fw) {
++ vfree(fw->data);
++ kfree(fw);
++ }
++}
++
++/**
++ * register_firmware: - provide a firmware image for later usage
++ *
++ * Description:
++ * Make sure that @data will be available by requesting firmware @name.
++ *
++ * Note: This will not be possible until some kind of persistence
++ * is available.
++ **/
++void
++register_firmware(const char *name, const u8 *data, size_t size)
++{
++ /* This is meaningless without firmware caching, so until we
++ * decide if firmware caching is reasonable just leave it as a
++ * noop */
++}
++
++/* Async support */
++struct firmware_work {
++ struct tq_struct work;
++ struct module *module;
++ const char *name;
++ const char *device;
++ void *context;
++ void (*cont)(const struct firmware *fw, void *context);
++};
++
++static void
++request_firmware_work_func(void *arg)
++{
++ struct firmware_work *fw_work = arg;
++ const struct firmware *fw;
++ if (!arg)
++ return;
++ request_firmware(&fw, fw_work->name, fw_work->device);
++ fw_work->cont(fw, fw_work->context);
++ release_firmware(fw);
++ __MOD_DEC_USE_COUNT(fw_work->module);
++ kfree(fw_work);
++}
++
++/**
++ * request_firmware_nowait:
++ *
++ * Description:
++ * Asynchronous variant of request_firmware() for contexts where
++ * it is not possible to sleep.
++ *
++ * @cont will be called asynchronously when the firmware request is over.
++ *
++ * @context will be passed over to @cont.
++ *
++ * @fw may be %NULL if firmware request fails.
++ *
++ **/
++int
++request_firmware_nowait(
++ struct module *module,
++ const char *name, const char *device, void *context,
++ void (*cont)(const struct firmware *fw, void *context))
++{
++ struct firmware_work *fw_work = kmalloc(sizeof (struct firmware_work),
++ GFP_ATOMIC);
++ if (!fw_work)
++ return -ENOMEM;
++ if (!try_inc_mod_count(module)) {
++ kfree(fw_work);
++ return -EFAULT;
++ }
++
++ *fw_work = (struct firmware_work) {
++ .module = module,
++ .name = name,
++ .device = device,
++ .context = context,
++ .cont = cont,
++ };
++ INIT_TQUEUE(&fw_work->work, request_firmware_work_func, fw_work);
++
++ schedule_task(&fw_work->work);
++ return 0;
++}
++
++static int __init
++firmware_class_init(void)
++{
++ proc_dir = create_proc_entry("driver/firmware", 0755 | S_IFDIR, NULL);
++ if (!proc_dir)
++ return -EAGAIN;
++ proc_dir_timeout = create_proc_entry("timeout",
++ 0644 | S_IFREG, proc_dir);
++ if (!proc_dir_timeout) {
++ remove_proc_entry("driver/firmware", NULL);
++ return -EAGAIN;
++ }
++ proc_dir_timeout->read_proc = firmware_timeout_show;
++ proc_dir_timeout->write_proc = firmware_timeout_store;
++ return 0;
++}
++static void __exit
++firmware_class_exit(void)
++{
++ remove_proc_entry("timeout", proc_dir);
++ remove_proc_entry("driver/firmware", NULL);
++}
++
++module_init(firmware_class_init);
++module_exit(firmware_class_exit);
++
++#ifndef CONFIG_FW_LOADER
++EXPORT_SYMBOL(release_firmware);
++EXPORT_SYMBOL(request_firmware);
++EXPORT_SYMBOL(request_firmware_nowait);
++EXPORT_SYMBOL(register_firmware);
++#endif
+diff -urN linux-2.4.18/lib/Makefile linux-2.4.18-mh15/lib/Makefile
+--- linux-2.4.18/lib/Makefile 2001-09-18 00:31:15.000000000 +0200
++++ linux-2.4.18-mh15/lib/Makefile 2004-08-01 16:26:23.000000000 +0200
+@@ -8,13 +8,17 @@
+
+ L_TARGET := lib.a
+
+-export-objs := cmdline.o dec_and_lock.o rwsem-spinlock.o rwsem.o
++export-objs := cmdline.o dec_and_lock.o rwsem-spinlock.o rwsem.o \
++ firmware_class.o
+
+ obj-y := errno.o ctype.o string.o vsprintf.o brlock.o cmdline.o bust_spinlocks.o rbtree.o
+
++obj-$(CONFIG_FW_LOADER) += firmware_class.o
+ obj-$(CONFIG_RWSEM_GENERIC_SPINLOCK) += rwsem-spinlock.o
+ obj-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o
+
++include $(TOPDIR)/drivers/bluetooth/Makefile.lib
++
+ ifneq ($(CONFIG_HAVE_DEC_LOCK),y)
+ obj-y += dec_and_lock.o
+ endif
+diff -urN linux-2.4.18/MAINTAINERS linux-2.4.18-mh15/MAINTAINERS
+--- linux-2.4.18/MAINTAINERS 2002-02-25 20:37:52.000000000 +0100
++++ linux-2.4.18-mh15/MAINTAINERS 2004-08-01 16:26:23.000000000 +0200
+@@ -252,10 +252,88 @@
+ L: linux-kernel@vger.kernel.org
+ S: Maintained
+
+-BLUETOOTH SUBSYSTEM (BlueZ)
++BLUETOOTH SUBSYSTEM
++P: Marcel Holtmann
++M: marcel@holtmann.org
+ P: Maxim Krasnyansky
+ M: maxk@qualcomm.com
++L: bluez-devel@lists.sf.net
+ W: http://bluez.sf.net
++W: http://www.bluez.org
++W: http://www.holtmann.org/linux/bluetooth/
++S: Maintained
++
++BLUETOOTH RFCOMM LAYER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
++S: Maintained
++
++BLUETOOTH BNEP LAYER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
++S: Maintained
++
++BLUETOOTH CMTP LAYER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HIDP LAYER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI UART DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
++S: Maintained
++
++BLUETOOTH HCI USB DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
++S: Maintained
++
++BLUETOOTH HCI BCM203X DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI BFUSB DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI DTL1 DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI BLUECARD DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI BT3C DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI BTUART DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI VHCI DRIVER
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
+ S: Maintained
+
+ BTTV VIDEO4LINUX DRIVER
+diff -urN linux-2.4.18/net/bluetooth/af_bluetooth.c linux-2.4.18-mh15/net/bluetooth/af_bluetooth.c
+--- linux-2.4.18/net/bluetooth/af_bluetooth.c 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/net/bluetooth/af_bluetooth.c 2004-08-01 16:26:23.000000000 +0200
+@@ -25,14 +25,15 @@
+ /*
+ * BlueZ Bluetooth address family and sockets.
+ *
+- * $Id: af_bluetooth.c,v 1.4 2001/07/05 18:42:44 maxk Exp $
++ * $Id: af_bluetooth.c,v 1.8 2002/07/22 20:32:54 maxk Exp $
+ */
+-#define VERSION "1.1"
++#define VERSION "2.4"
+
+ #include <linux/config.h>
+ #include <linux/module.h>
+
+ #include <linux/types.h>
++#include <linux/list.h>
+ #include <linux/errno.h>
+ #include <linux/kernel.h>
+ #include <linux/major.h>
+@@ -40,6 +41,7 @@
+ #include <linux/slab.h>
+ #include <linux/skbuff.h>
+ #include <linux/init.h>
++#include <linux/poll.h>
+ #include <linux/proc_fs.h>
+ #include <net/sock.h>
+
+@@ -48,70 +50,79 @@
+ #endif
+
+ #include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
++
++#ifndef AF_BLUETOOTH_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
+
+ /* Bluetooth sockets */
+-static struct net_proto_family *bluez_sock[BLUEZ_MAX_PROTO];
++#define BLUEZ_MAX_PROTO 7
++static struct net_proto_family *bluez_proto[BLUEZ_MAX_PROTO];
+
+ int bluez_sock_register(int proto, struct net_proto_family *ops)
+ {
+- if (proto > BLUEZ_MAX_PROTO)
++ if (proto >= BLUEZ_MAX_PROTO)
+ return -EINVAL;
+
+- if (bluez_sock[proto])
++ if (bluez_proto[proto])
+ return -EEXIST;
+
+- bluez_sock[proto] = ops;
++ bluez_proto[proto] = ops;
+ return 0;
+ }
+
+ int bluez_sock_unregister(int proto)
+ {
+- if (proto > BLUEZ_MAX_PROTO)
++ if (proto >= BLUEZ_MAX_PROTO)
+ return -EINVAL;
+
+- if (!bluez_sock[proto])
++ if (!bluez_proto[proto])
+ return -ENOENT;
+
+- bluez_sock[proto] = NULL;
++ bluez_proto[proto] = NULL;
+ return 0;
+ }
+
+ static int bluez_sock_create(struct socket *sock, int proto)
+ {
+- if (proto > BLUEZ_MAX_PROTO)
++ if (proto >= BLUEZ_MAX_PROTO)
+ return -EINVAL;
+
+ #if defined(CONFIG_KMOD)
+- if (!bluez_sock[proto]) {
++ if (!bluez_proto[proto]) {
+ char module_name[30];
+ sprintf(module_name, "bt-proto-%d", proto);
+ request_module(module_name);
+ }
+ #endif
+
+- if (!bluez_sock[proto])
++ if (!bluez_proto[proto])
+ return -ENOENT;
+
+- return bluez_sock[proto]->create(sock, proto);
++ return bluez_proto[proto]->create(sock, proto);
++}
++
++void bluez_sock_init(struct socket *sock, struct sock *sk)
++{
++ sock_init_data(sock, sk);
++ INIT_LIST_HEAD(&bluez_pi(sk)->accept_q);
+ }
+
+ void bluez_sock_link(struct bluez_sock_list *l, struct sock *sk)
+ {
+- write_lock(&l->lock);
+-
++ write_lock_bh(&l->lock);
+ sk->next = l->head;
+ l->head = sk;
+ sock_hold(sk);
+-
+- write_unlock(&l->lock);
++ write_unlock_bh(&l->lock);
+ }
+
+ void bluez_sock_unlink(struct bluez_sock_list *l, struct sock *sk)
+ {
+ struct sock **skp;
+
+- write_lock(&l->lock);
++ write_lock_bh(&l->lock);
+ for (skp = &l->head; *skp; skp = &((*skp)->next)) {
+ if (*skp == sk) {
+ *skp = sk->next;
+@@ -119,7 +130,163 @@
+ break;
+ }
+ }
+- write_unlock(&l->lock);
++ write_unlock_bh(&l->lock);
++}
++
++void bluez_accept_enqueue(struct sock *parent, struct sock *sk)
++{
++ BT_DBG("parent %p, sk %p", parent, sk);
++
++ sock_hold(sk);
++ list_add_tail(&bluez_pi(sk)->accept_q, &bluez_pi(parent)->accept_q);
++ bluez_pi(sk)->parent = parent;
++ parent->ack_backlog++;
++}
++
++static void bluez_accept_unlink(struct sock *sk)
++{
++ BT_DBG("sk %p state %d", sk, sk->state);
++
++ list_del_init(&bluez_pi(sk)->accept_q);
++ bluez_pi(sk)->parent->ack_backlog--;
++ bluez_pi(sk)->parent = NULL;
++ sock_put(sk);
++}
++
++struct sock *bluez_accept_dequeue(struct sock *parent, struct socket *newsock)
++{
++ struct list_head *p, *n;
++ struct bluez_pinfo *pi;
++ struct sock *sk;
++
++ BT_DBG("parent %p", parent);
++
++ list_for_each_safe(p, n, &bluez_pi(parent)->accept_q) {
++ pi = list_entry(p, struct bluez_pinfo, accept_q);
++ sk = bluez_sk(pi);
++
++ lock_sock(sk);
++ if (sk->state == BT_CLOSED) {
++ release_sock(sk);
++ bluez_accept_unlink(sk);
++ continue;
++ }
++
++ if (sk->state == BT_CONNECTED || !newsock) {
++ bluez_accept_unlink(sk);
++ if (newsock)
++ sock_graft(sk, newsock);
++ release_sock(sk);
++ return sk;
++ }
++ release_sock(sk);
++ }
++ return NULL;
++}
++
++int bluez_sock_recvmsg(struct socket *sock, struct msghdr *msg, int len, int flags, struct scm_cookie *scm)
++{
++ int noblock = flags & MSG_DONTWAIT;
++ struct sock *sk = sock->sk;
++ struct sk_buff *skb;
++ int copied, err;
++
++ BT_DBG("sock %p sk %p len %d", sock, sk, len);
++
++ if (flags & (MSG_OOB))
++ return -EOPNOTSUPP;
++
++ if (!(skb = skb_recv_datagram(sk, flags, noblock, &err))) {
++ if (sk->shutdown & RCV_SHUTDOWN)
++ return 0;
++ return err;
++ }
++
++ msg->msg_namelen = 0;
++
++ copied = skb->len;
++ if (len < copied) {
++ msg->msg_flags |= MSG_TRUNC;
++ copied = len;
++ }
++
++ skb->h.raw = skb->data;
++ err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
++
++ skb_free_datagram(sk, skb);
++
++ return err ? : copied;
++}
++
++unsigned int bluez_sock_poll(struct file * file, struct socket *sock, poll_table *wait)
++{
++ struct sock *sk = sock->sk;
++ unsigned int mask = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ poll_wait(file, sk->sleep, wait);
++
++ if (sk->err || !skb_queue_empty(&sk->error_queue))
++ mask |= POLLERR;
++
++ if (sk->shutdown == SHUTDOWN_MASK)
++ mask |= POLLHUP;
++
++ if (!skb_queue_empty(&sk->receive_queue) ||
++ !list_empty(&bluez_pi(sk)->accept_q) ||
++ (sk->shutdown & RCV_SHUTDOWN))
++ mask |= POLLIN | POLLRDNORM;
++
++ if (sk->state == BT_CLOSED)
++ mask |= POLLHUP;
++
++ if (sk->state == BT_CONNECT ||
++ sk->state == BT_CONNECT2 ||
++ sk->state == BT_CONFIG)
++ return mask;
++
++ if (sock_writeable(sk))
++ mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
++ else
++ set_bit(SOCK_ASYNC_NOSPACE, &sk->socket->flags);
++
++ return mask;
++}
++
++int bluez_sock_wait_state(struct sock *sk, int state, unsigned long timeo)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ int err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ add_wait_queue(sk->sleep, &wait);
++ while (sk->state != state) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (!timeo) {
++ err = -EAGAIN;
++ break;
++ }
++
++ if (signal_pending(current)) {
++ err = sock_intr_errno(timeo);
++ break;
++ }
++
++ release_sock(sk);
++ timeo = schedule_timeout(timeo);
++ lock_sock(sk);
++
++ if (sk->err) {
++ err = sock_error(sk);
++ break;
++ }
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++ return err;
+ }
+
+ struct net_proto_family bluez_sock_family_ops =
+@@ -129,9 +296,9 @@
+
+ int bluez_init(void)
+ {
+- INF("BlueZ HCI Core ver %s Copyright (C) 2000,2001 Qualcomm Inc",
++ BT_INFO("BlueZ Core ver %s Copyright (C) 2000,2001 Qualcomm Inc",
+ VERSION);
+- INF("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
++ BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
+
+ proc_mkdir("bluetooth", NULL);
+
+@@ -164,5 +331,6 @@
+ module_exit(bluez_cleanup);
+
+ MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
+-MODULE_DESCRIPTION("BlueZ HCI Core ver " VERSION);
++MODULE_DESCRIPTION("BlueZ Core ver " VERSION);
++MODULE_LICENSE("GPL");
+ #endif
+diff -urN linux-2.4.18/net/bluetooth/bnep/bnep.h linux-2.4.18-mh15/net/bluetooth/bnep/bnep.h
+--- linux-2.4.18/net/bluetooth/bnep/bnep.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/bnep/bnep.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,185 @@
++/*
++ BNEP protocol definition for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++*/
++
++/*
++ * $Id: bnep2.h,v 1.9 2002/07/14 07:09:19 maxk Exp $
++ */
++
++#ifndef _BNEP_H
++#define _BNEP_H
++
++#include <linux/types.h>
++#include <net/bluetooth/bluetooth.h>
++
++#include "crc32.h"
++
++// Limits
++#define BNEP_MAX_PROTO_FILTERS 5
++#define BNEP_MAX_MULTICAST_FILTERS 20
++
++// UUIDs
++#define BNEP_BASE_UUID 0x0000000000001000800000805F9B34FB
++#define BNEP_UUID16 0x02
++#define BNEP_UUID32 0x04
++#define BNEP_UUID128 0x16
++
++#define BNEP_SVC_PANU 0x1115
++#define BNEP_SVC_NAP 0x1116
++#define BNEP_SVC_GN 0x1117
++
++// Packet types
++#define BNEP_GENERAL 0x00
++#define BNEP_CONTROL 0x01
++#define BNEP_COMPRESSED 0x02
++#define BNEP_COMPRESSED_SRC_ONLY 0x03
++#define BNEP_COMPRESSED_DST_ONLY 0x04
++
++// Control types
++#define BNEP_CMD_NOT_UNDERSTOOD 0x00
++#define BNEP_SETUP_CONN_REQ 0x01
++#define BNEP_SETUP_CONN_RSP 0x02
++#define BNEP_FILTER_NET_TYPE_SET 0x03
++#define BNEP_FILTER_NET_TYPE_RSP 0x04
++#define BNEP_FILTER_MULTI_ADDR_SET 0x05
++#define BNEP_FILTER_MULTI_ADDR_RSP 0x06
++
++// Extension types
++#define BNEP_EXT_CONTROL 0x00
++
++// Response messages
++#define BNEP_SUCCESS 0x00
++
++#define BNEP_CONN_INVALID_DST 0x01
++#define BNEP_CONN_INVALID_SRC 0x02
++#define BNEP_CONN_INVALID_SVC 0x03
++#define BNEP_CONN_NOT_ALLOWED 0x04
++
++#define BNEP_FILTER_UNSUPPORTED_REQ 0x01
++#define BNEP_FILTER_INVALID_RANGE 0x02
++#define BNEP_FILTER_INVALID_MCADDR 0x02
++#define BNEP_FILTER_LIMIT_REACHED 0x03
++#define BNEP_FILTER_DENIED_SECURITY 0x04
++
++// L2CAP settings
++#define BNEP_MTU 1691
++#define BNEP_PSM 0x0f
++#define BNEP_FLUSH_TO 0xffff
++#define BNEP_CONNECT_TO 15
++#define BNEP_FILTER_TO 15
++
++// Headers
++#define BNEP_TYPE_MASK 0x7f
++#define BNEP_EXT_HEADER 0x80
++
++struct bnep_setup_conn_req {
++ __u8 type;
++ __u8 ctrl;
++ __u8 uuid_size;
++ __u8 service[0];
++} __attribute__((packed));
++
++struct bnep_set_filter_req {
++ __u8 type;
++ __u8 ctrl;
++ __u16 len;
++ __u8 list[0];
++} __attribute__((packed));
++
++struct bnep_control_rsp {
++ __u8 type;
++ __u8 ctrl;
++ __u16 resp;
++} __attribute__((packed));
++
++struct bnep_ext_hdr {
++ __u8 type;
++ __u8 len;
++ __u8 data[0];
++} __attribute__((packed));
++
++/* BNEP ioctl defines */
++#define BNEPCONNADD _IOW('B', 200, int)
++#define BNEPCONNDEL _IOW('B', 201, int)
++#define BNEPGETCONNLIST _IOR('B', 210, int)
++#define BNEPGETCONNINFO _IOR('B', 211, int)
++
++struct bnep_connadd_req {
++ int sock; // Connected socket
++ __u32 flags;
++ __u16 role;
++ char device[16]; // Name of the Ethernet device
++};
++
++struct bnep_conndel_req {
++ __u32 flags;
++ __u8 dst[ETH_ALEN];
++};
++
++struct bnep_conninfo {
++ __u32 flags;
++ __u16 role;
++ __u16 state;
++ __u8 dst[ETH_ALEN];
++ char device[16];
++};
++
++struct bnep_connlist_req {
++ __u32 cnum;
++ struct bnep_conninfo *ci;
++};
++
++struct bnep_proto_filter {
++ __u16 start;
++ __u16 end;
++};
++
++int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock);
++int bnep_del_connection(struct bnep_conndel_req *req);
++int bnep_get_connlist(struct bnep_connlist_req *req);
++int bnep_get_conninfo(struct bnep_conninfo *ci);
++
++// BNEP sessions
++struct bnep_session {
++ struct list_head list;
++
++ unsigned int role;
++ unsigned long state;
++ unsigned long flags;
++ atomic_t killed;
++
++ struct ethhdr eh;
++ struct msghdr msg;
++
++ struct bnep_proto_filter proto_filter[BNEP_MAX_PROTO_FILTERS];
++ u64 mc_filter;
++
++ struct socket *sock;
++ struct net_device dev;
++ struct net_device_stats stats;
++};
++
++int bnep_net_init(struct net_device *dev);
++int bnep_sock_init(void);
++int bnep_sock_cleanup(void);
++
++static inline int bnep_mc_hash(__u8 *addr)
++{
++ return (bnep_crc32(~0, addr, ETH_ALEN) >> 26);
++}
++
++#endif
+diff -urN linux-2.4.18/net/bluetooth/bnep/Config.in linux-2.4.18-mh15/net/bluetooth/bnep/Config.in
+--- linux-2.4.18/net/bluetooth/bnep/Config.in 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/bnep/Config.in 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,11 @@
++#
++# Bluetooth BNEP layer configuration
++#
++
++dep_tristate 'BNEP protocol support' CONFIG_BLUEZ_BNEP $CONFIG_BLUEZ_L2CAP
++
++if [ "$CONFIG_BLUEZ_BNEP" != "n" ]; then
++ bool ' Multicast filter support' CONFIG_BLUEZ_BNEP_MC_FILTER
++ bool ' Protocol filter support' CONFIG_BLUEZ_BNEP_PROTO_FILTER
++fi
++
+diff -urN linux-2.4.18/net/bluetooth/bnep/core.c linux-2.4.18-mh15/net/bluetooth/bnep/core.c
+--- linux-2.4.18/net/bluetooth/bnep/core.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/bnep/core.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,718 @@
++/*
++ BNEP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2001-2002 Inventel Systemes
++ Written 2001-2002 by
++ Clément Moreau <clement.moreau@inventel.fr>
++ David Libault <david.libault@inventel.fr>
++
++ Copyright (C) 2002 Maxim Krasnyanskiy <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: core.c,v 1.18 2002/07/14 07:09:19 maxk Exp $
++ */
++
++#define __KERNEL_SYSCALLS__
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/signal.h>
++#include <linux/init.h>
++#include <linux/wait.h>
++#include <linux/errno.h>
++#include <linux/smp_lock.h>
++#include <linux/net.h>
++#include <net/sock.h>
++
++#include <linux/socket.h>
++#include <linux/file.h>
++
++#include <linux/netdevice.h>
++#include <linux/etherdevice.h>
++#include <linux/skbuff.h>
++
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/l2cap.h>
++
++#include "bnep.h"
++
++#ifndef CONFIG_BLUEZ_BNEP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define VERSION "1.2"
++
++static LIST_HEAD(bnep_session_list);
++static DECLARE_RWSEM(bnep_session_sem);
++
++static struct bnep_session *__bnep_get_session(u8 *dst)
++{
++ struct bnep_session *s;
++ struct list_head *p;
++
++ BT_DBG("");
++
++ list_for_each(p, &bnep_session_list) {
++ s = list_entry(p, struct bnep_session, list);
++ if (!memcmp(dst, s->eh.h_source, ETH_ALEN))
++ return s;
++ }
++ return NULL;
++}
++
++static void __bnep_link_session(struct bnep_session *s)
++{
++ MOD_INC_USE_COUNT;
++ list_add(&s->list, &bnep_session_list);
++}
++
++static void __bnep_unlink_session(struct bnep_session *s)
++{
++ list_del(&s->list);
++ MOD_DEC_USE_COUNT;
++}
++
++static int bnep_send(struct bnep_session *s, void *data, size_t len)
++{
++ struct socket *sock = s->sock;
++ struct iovec iv = { data, len };
++ s->msg.msg_iov = &iv;
++ s->msg.msg_iovlen = 1;
++ return sock->ops->sendmsg(sock, &s->msg, len, NULL);
++}
++
++static int bnep_send_rsp(struct bnep_session *s, u8 ctrl, u16 resp)
++{
++ struct bnep_control_rsp rsp;
++ rsp.type = BNEP_CONTROL;
++ rsp.ctrl = ctrl;
++ rsp.resp = htons(resp);
++ return bnep_send(s, &rsp, sizeof(rsp));
++}
++
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
++static inline void bnep_set_default_proto_filter(struct bnep_session *s)
++{
++ /* (IPv4, ARP) */
++ s->proto_filter[0].start = htons(0x0800);
++ s->proto_filter[0].end = htons(0x0806);
++ /* (RARP, AppleTalk) */
++ s->proto_filter[1].start = htons(0x8035);
++ s->proto_filter[1].end = htons(0x80F3);
++ /* (IPX, IPv6) */
++ s->proto_filter[2].start = htons(0x8137);
++ s->proto_filter[2].end = htons(0x86DD);
++}
++#endif
++
++static int bnep_ctrl_set_netfilter(struct bnep_session *s, u16 *data, int len)
++{
++ int n;
++
++ if (len < 2)
++ return -EILSEQ;
++
++ n = ntohs(get_unaligned(data));
++ data++; len -= 2;
++
++ if (len < n)
++ return -EILSEQ;
++
++ BT_DBG("filter len %d", n);
++
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
++ n /= 4;
++ if (n <= BNEP_MAX_PROTO_FILTERS) {
++ struct bnep_proto_filter *f = s->proto_filter;
++ int i;
++
++ for (i = 0; i < n; i++) {
++ f[i].start = get_unaligned(data++);
++ f[i].end = get_unaligned(data++);
++
++ BT_DBG("proto filter start %d end %d",
++ f[i].start, f[i].end);
++ }
++
++ if (i < BNEP_MAX_PROTO_FILTERS)
++ memset(f + i, 0, sizeof(*f));
++
++ if (n == 0)
++ bnep_set_default_proto_filter(s);
++
++ bnep_send_rsp(s, BNEP_FILTER_NET_TYPE_RSP, BNEP_SUCCESS);
++ } else {
++ bnep_send_rsp(s, BNEP_FILTER_NET_TYPE_RSP, BNEP_FILTER_LIMIT_REACHED);
++ }
++#else
++ bnep_send_rsp(s, BNEP_FILTER_NET_TYPE_RSP, BNEP_FILTER_UNSUPPORTED_REQ);
++#endif
++ return 0;
++}
++
++static int bnep_ctrl_set_mcfilter(struct bnep_session *s, u8 *data, int len)
++{
++ int n;
++
++ if (len < 2)
++ return -EILSEQ;
++
++ n = ntohs(get_unaligned((u16 *) data));
++ data += 2; len -= 2;
++
++ if (len < n)
++ return -EILSEQ;
++
++ BT_DBG("filter len %d", n);
++
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
++ n /= (ETH_ALEN * 2);
++
++ if (n > 0) {
++ s->mc_filter = 0;
++
++ /* Always send broadcast */
++ set_bit(bnep_mc_hash(s->dev.broadcast), &s->mc_filter);
++
++ /* Add address ranges to the multicast hash */
++ for (; n > 0; n--) {
++ u8 a1[6], *a2;
++
++ memcpy(a1, data, ETH_ALEN); data += ETH_ALEN;
++ a2 = data; data += ETH_ALEN;
++
++ BT_DBG("mc filter %s -> %s",
++ batostr((void *) a1), batostr((void *) a2));
++
++ #define INCA(a) { int i = 5; while (i >=0 && ++a[i--] == 0); }
++
++ /* Iterate from a1 to a2 */
++ set_bit(bnep_mc_hash(a1), &s->mc_filter);
++ while (memcmp(a1, a2, 6) < 0 && s->mc_filter != ~0LL) {
++ INCA(a1);
++ set_bit(bnep_mc_hash(a1), &s->mc_filter);
++ }
++ }
++ }
++
++ BT_DBG("mc filter hash 0x%llx", s->mc_filter);
++
++ bnep_send_rsp(s, BNEP_FILTER_MULTI_ADDR_RSP, BNEP_SUCCESS);
++#else
++ bnep_send_rsp(s, BNEP_FILTER_MULTI_ADDR_RSP, BNEP_FILTER_UNSUPPORTED_REQ);
++#endif
++ return 0;
++}
++
++static int bnep_rx_control(struct bnep_session *s, void *data, int len)
++{
++ u8 cmd = *(u8 *)data;
++ int err = 0;
++
++ data++; len--;
++
++ switch (cmd) {
++ case BNEP_CMD_NOT_UNDERSTOOD:
++ case BNEP_SETUP_CONN_REQ:
++ case BNEP_SETUP_CONN_RSP:
++ case BNEP_FILTER_NET_TYPE_RSP:
++ case BNEP_FILTER_MULTI_ADDR_RSP:
++ /* Ignore these for now */
++ break;
++
++ case BNEP_FILTER_NET_TYPE_SET:
++ err = bnep_ctrl_set_netfilter(s, data, len);
++ break;
++
++ case BNEP_FILTER_MULTI_ADDR_SET:
++ err = bnep_ctrl_set_mcfilter(s, data, len);
++ break;
++
++ default: {
++ u8 pkt[3];
++ pkt[0] = BNEP_CONTROL;
++ pkt[1] = BNEP_CMD_NOT_UNDERSTOOD;
++ pkt[2] = cmd;
++ bnep_send(s, pkt, sizeof(pkt));
++ }
++ break;
++ }
++
++ return err;
++}
++
++static int bnep_rx_extension(struct bnep_session *s, struct sk_buff *skb)
++{
++ struct bnep_ext_hdr *h;
++ int err = 0;
++
++ do {
++ h = (void *) skb->data;
++ if (!skb_pull(skb, sizeof(*h))) {
++ err = -EILSEQ;
++ break;
++ }
++
++ BT_DBG("type 0x%x len %d", h->type, h->len);
++
++ switch (h->type & BNEP_TYPE_MASK) {
++ case BNEP_EXT_CONTROL:
++ bnep_rx_control(s, skb->data, skb->len);
++ break;
++
++ default:
++ /* Unknown extension, skip it. */
++ break;
++ }
++
++ if (!skb_pull(skb, h->len)) {
++ err = -EILSEQ;
++ break;
++ }
++ } while (!err && (h->type & BNEP_EXT_HEADER));
++
++ return err;
++}
++
++static u8 __bnep_rx_hlen[] = {
++ ETH_HLEN, /* BNEP_GENERAL */
++ 0, /* BNEP_CONTROL */
++ 2, /* BNEP_COMPRESSED */
++ ETH_ALEN + 2, /* BNEP_COMPRESSED_SRC_ONLY */
++ ETH_ALEN + 2 /* BNEP_COMPRESSED_DST_ONLY */
++};
++#define BNEP_RX_TYPES (sizeof(__bnep_rx_hlen) - 1)
++
++static inline int bnep_rx_frame(struct bnep_session *s, struct sk_buff *skb)
++{
++ struct net_device *dev = &s->dev;
++ struct sk_buff *nskb;
++ u8 type;
++
++ dev->last_rx = jiffies;
++ s->stats.rx_bytes += skb->len;
++
++ type = *(u8 *) skb->data; skb_pull(skb, 1);
++
++ if ((type & BNEP_TYPE_MASK) > BNEP_RX_TYPES)
++ goto badframe;
++
++ if ((type & BNEP_TYPE_MASK) == BNEP_CONTROL) {
++ bnep_rx_control(s, skb->data, skb->len);
++ kfree_skb(skb);
++ return 0;
++ }
++
++ skb->mac.raw = skb->data;
++
++ /* Verify and pull out header */
++ if (!skb_pull(skb, __bnep_rx_hlen[type & BNEP_TYPE_MASK]))
++ goto badframe;
++
++ s->eh.h_proto = get_unaligned((u16 *) (skb->data - 2));
++
++ if (type & BNEP_EXT_HEADER) {
++ if (bnep_rx_extension(s, skb) < 0)
++ goto badframe;
++ }
++
++ /* Strip 802.1p header */
++ if (ntohs(s->eh.h_proto) == 0x8100) {
++ if (!skb_pull(skb, 4))
++ goto badframe;
++ s->eh.h_proto = get_unaligned((u16 *) (skb->data - 2));
++ }
++
++ /* We have to alloc new skb and copy data here :(. Because original skb
++ * may not be modified and because of the alignment requirements. */
++ nskb = alloc_skb(2 + ETH_HLEN + skb->len, GFP_KERNEL);
++ if (!nskb) {
++ s->stats.rx_dropped++;
++ kfree_skb(skb);
++ return -ENOMEM;
++ }
++ skb_reserve(nskb, 2);
++
++ /* Decompress header and construct ether frame */
++ switch (type & BNEP_TYPE_MASK) {
++ case BNEP_COMPRESSED:
++ memcpy(__skb_put(nskb, ETH_HLEN), &s->eh, ETH_HLEN);
++ break;
++
++ case BNEP_COMPRESSED_SRC_ONLY:
++ memcpy(__skb_put(nskb, ETH_ALEN), s->eh.h_dest, ETH_ALEN);
++ memcpy(__skb_put(nskb, ETH_ALEN), skb->mac.raw, ETH_ALEN);
++ put_unaligned(s->eh.h_proto, (u16 *) __skb_put(nskb, 2));
++ break;
++
++ case BNEP_COMPRESSED_DST_ONLY:
++ memcpy(__skb_put(nskb, ETH_ALEN), skb->mac.raw, ETH_ALEN);
++ memcpy(__skb_put(nskb, ETH_ALEN + 2), s->eh.h_source, ETH_ALEN + 2);
++ break;
++
++ case BNEP_GENERAL:
++ memcpy(__skb_put(nskb, ETH_ALEN * 2), skb->mac.raw, ETH_ALEN * 2);
++ put_unaligned(s->eh.h_proto, (u16 *) __skb_put(nskb, 2));
++ break;
++ }
++
++ memcpy(__skb_put(nskb, skb->len), skb->data, skb->len);
++ kfree_skb(skb);
++
++ s->stats.rx_packets++;
++ nskb->dev = dev;
++ nskb->ip_summed = CHECKSUM_UNNECESSARY;
++ nskb->protocol = eth_type_trans(nskb, dev);
++ netif_rx_ni(nskb);
++ return 0;
++
++badframe:
++ s->stats.rx_errors++;
++ kfree_skb(skb);
++ return 0;
++}
++
++static u8 __bnep_tx_types[] = {
++ BNEP_GENERAL,
++ BNEP_COMPRESSED_SRC_ONLY,
++ BNEP_COMPRESSED_DST_ONLY,
++ BNEP_COMPRESSED
++};
++
++static inline int bnep_tx_frame(struct bnep_session *s, struct sk_buff *skb)
++{
++ struct ethhdr *eh = (void *) skb->data;
++ struct socket *sock = s->sock;
++ struct iovec iv[3];
++ int len = 0, il = 0;
++ u8 type = 0;
++
++ BT_DBG("skb %p dev %p type %d", skb, skb->dev, skb->pkt_type);
++
++ if (!skb->dev) {
++ /* Control frame sent by us */
++ goto send;
++ }
++
++ iv[il++] = (struct iovec) { &type, 1 };
++ len++;
++
++ if (!memcmp(eh->h_dest, s->eh.h_source, ETH_ALEN))
++ type |= 0x01;
++
++ if (!memcmp(eh->h_source, s->eh.h_dest, ETH_ALEN))
++ type |= 0x02;
++
++ if (type)
++ skb_pull(skb, ETH_ALEN * 2);
++
++ type = __bnep_tx_types[type];
++ switch (type) {
++ case BNEP_COMPRESSED_SRC_ONLY:
++ iv[il++] = (struct iovec) { eh->h_source, ETH_ALEN };
++ len += ETH_ALEN;
++ break;
++
++ case BNEP_COMPRESSED_DST_ONLY:
++ iv[il++] = (struct iovec) { eh->h_dest, ETH_ALEN };
++ len += ETH_ALEN;
++ break;
++ }
++
++send:
++ iv[il++] = (struct iovec) { skb->data, skb->len };
++ len += skb->len;
++
++ /* FIXME: linearize skb */
++
++ s->msg.msg_iov = iv;
++ s->msg.msg_iovlen = il;
++ len = sock->ops->sendmsg(sock, &s->msg, len, NULL);
++ kfree_skb(skb);
++
++ if (len > 0) {
++ s->stats.tx_bytes += len;
++ s->stats.tx_packets++;
++ return 0;
++ }
++
++ return len;
++}
++
++static int bnep_session(void *arg)
++{
++ struct bnep_session *s = arg;
++ struct net_device *dev = &s->dev;
++ struct sock *sk = s->sock->sk;
++ struct sk_buff *skb;
++ wait_queue_t wait;
++
++ BT_DBG("");
++
++ daemonize(); reparent_to_init();
++
++ sprintf(current->comm, "kbnepd %s", dev->name);
++
++ sigfillset(&current->blocked);
++ flush_signals(current);
++
++ current->nice = -15;
++
++ set_fs(KERNEL_DS);
++
++ init_waitqueue_entry(&wait, current);
++ add_wait_queue(sk->sleep, &wait);
++ while (!atomic_read(&s->killed)) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ // RX
++ while ((skb = skb_dequeue(&sk->receive_queue))) {
++ skb_orphan(skb);
++ bnep_rx_frame(s, skb);
++ }
++
++ if (sk->state != BT_CONNECTED)
++ break;
++
++ // TX
++ while ((skb = skb_dequeue(&sk->write_queue)))
++ if (bnep_tx_frame(s, skb))
++ break;
++ netif_wake_queue(dev);
++
++ schedule();
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++
++ /* Cleanup session */
++ down_write(&bnep_session_sem);
++
++ /* Delete network device */
++ unregister_netdev(dev);
++
++ /* Release the socket */
++ fput(s->sock->file);
++
++ __bnep_unlink_session(s);
++
++ up_write(&bnep_session_sem);
++ kfree(s);
++ return 0;
++}
++
++int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock)
++{
++ struct net_device *dev;
++ struct bnep_session *s, *ss;
++ u8 dst[ETH_ALEN], src[ETH_ALEN];
++ int err;
++
++ BT_DBG("");
++
++ baswap((void *) dst, &bluez_pi(sock->sk)->dst);
++ baswap((void *) src, &bluez_pi(sock->sk)->src);
++
++ s = kmalloc(sizeof(struct bnep_session), GFP_KERNEL);
++ if (!s)
++ return -ENOMEM;
++ memset(s, 0, sizeof(struct bnep_session));
++
++ down_write(&bnep_session_sem);
++
++ ss = __bnep_get_session(dst);
++ if (ss && ss->state == BT_CONNECTED) {
++ err = -EEXIST;
++ goto failed;
++ }
++
++ dev = &s->dev;
++
++ if (*req->device)
++ strcpy(dev->name, req->device);
++ else
++ strcpy(dev->name, "bnep%d");
++
++ memset(dev->broadcast, 0xff, ETH_ALEN);
++
++ /* This is rx header therefor addresses are swaped.
++ * ie eh.h_dest is our local address. */
++ memcpy(s->eh.h_dest, &src, ETH_ALEN);
++ memcpy(s->eh.h_source, &dst, ETH_ALEN);
++
++ s->sock = sock;
++ s->role = req->role;
++ s->state = BT_CONNECTED;
++
++ s->msg.msg_flags = MSG_NOSIGNAL;
++
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
++ /* Set default mc filter */
++ set_bit(bnep_mc_hash(dev->broadcast), &s->mc_filter);
++#endif
++
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
++ /* Set default protocol filter */
++ bnep_set_default_proto_filter(s);
++#endif
++
++ dev->init = bnep_net_init;
++ dev->priv = s;
++ err = register_netdev(dev);
++ if (err) {
++ goto failed;
++ }
++
++ __bnep_link_session(s);
++
++ err = kernel_thread(bnep_session, s, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
++ if (err < 0) {
++ /* Session thread start failed, gotta cleanup. */
++ unregister_netdev(dev);
++ __bnep_unlink_session(s);
++ goto failed;
++ }
++
++ up_write(&bnep_session_sem);
++ strcpy(req->device, dev->name);
++ return 0;
++
++failed:
++ up_write(&bnep_session_sem);
++ kfree(s);
++ return err;
++}
++
++int bnep_del_connection(struct bnep_conndel_req *req)
++{
++ struct bnep_session *s;
++ int err = 0;
++
++ BT_DBG("");
++
++ down_read(&bnep_session_sem);
++
++ s = __bnep_get_session(req->dst);
++ if (s) {
++ /* Wakeup user-space which is polling for socket errors.
++ * This is temporary hack untill we have shutdown in L2CAP */
++ s->sock->sk->err = EUNATCH;
++
++ /* Kill session thread */
++ atomic_inc(&s->killed);
++ wake_up_interruptible(s->sock->sk->sleep);
++ } else
++ err = -ENOENT;
++
++ up_read(&bnep_session_sem);
++ return err;
++}
++
++static void __bnep_copy_ci(struct bnep_conninfo *ci, struct bnep_session *s)
++{
++ memcpy(ci->dst, s->eh.h_source, ETH_ALEN);
++ strcpy(ci->device, s->dev.name);
++ ci->flags = s->flags;
++ ci->state = s->state;
++ ci->role = s->role;
++}
++
++int bnep_get_connlist(struct bnep_connlist_req *req)
++{
++ struct list_head *p;
++ int err = 0, n = 0;
++
++ down_read(&bnep_session_sem);
++
++ list_for_each(p, &bnep_session_list) {
++ struct bnep_session *s;
++ struct bnep_conninfo ci;
++
++ s = list_entry(p, struct bnep_session, list);
++
++ __bnep_copy_ci(&ci, s);
++
++ if (copy_to_user(req->ci, &ci, sizeof(ci))) {
++ err = -EFAULT;
++ break;
++ }
++
++ if (++n >= req->cnum)
++ break;
++
++ req->ci++;
++ }
++ req->cnum = n;
++
++ up_read(&bnep_session_sem);
++ return err;
++}
++
++int bnep_get_conninfo(struct bnep_conninfo *ci)
++{
++ struct bnep_session *s;
++ int err = 0;
++
++ down_read(&bnep_session_sem);
++
++ s = __bnep_get_session(ci->dst);
++ if (s)
++ __bnep_copy_ci(ci, s);
++ else
++ err = -ENOENT;
++
++ up_read(&bnep_session_sem);
++ return err;
++}
++
++static int __init bnep_init_module(void)
++{
++ l2cap_load();
++
++ bnep_crc32_init();
++ bnep_sock_init();
++
++ BT_INFO("BlueZ BNEP ver %s", VERSION);
++ BT_INFO("Copyright (C) 2001,2002 Inventel Systemes");
++ BT_INFO("Written 2001,2002 by Clement Moreau <clement.moreau@inventel.fr>");
++ BT_INFO("Written 2001,2002 by David Libault <david.libault@inventel.fr>");
++ BT_INFO("Copyright (C) 2002 Maxim Krasnyanskiy <maxk@qualcomm.com>");
++
++ return 0;
++}
++
++static void __exit bnep_cleanup_module(void)
++{
++ bnep_sock_cleanup();
++ bnep_crc32_cleanup();
++}
++
++module_init(bnep_init_module);
++module_exit(bnep_cleanup_module);
++
++MODULE_DESCRIPTION("BlueZ BNEP ver " VERSION);
++MODULE_AUTHOR("David Libault <david.libault@inventel.fr>, Maxim Krasnyanskiy <maxk@qualcomm.com>");
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/bnep/crc32.c linux-2.4.18-mh15/net/bluetooth/bnep/crc32.c
+--- linux-2.4.18/net/bluetooth/bnep/crc32.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/bnep/crc32.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,59 @@
++/*
++ * Based on linux-2.5/lib/crc32 by Matt Domsch <Matt_Domsch@dell.com>
++ *
++ * FIXME: Remove in 2.5
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/slab.h>
++#include <linux/init.h>
++#include <asm/atomic.h>
++
++#include "crc32.h"
++
++#define CRCPOLY_BE 0x04c11db7
++#define CRC_BE_BITS 8
++
++static u32 *bnep_crc32_table;
++
++/*
++ * This code is in the public domain; copyright abandoned.
++ * Liability for non-performance of this code is limited to the amount
++ * you paid for it. Since it is distributed for free, your refund will
++ * be very very small. If it breaks, you get to keep both pieces.
++ */
++u32 bnep_crc32(u32 crc, unsigned char const *p, size_t len)
++{
++ while (len--)
++ crc = (crc << 8) ^ bnep_crc32_table[(crc >> 24) ^ *p++];
++
++ return crc;
++}
++
++int __init bnep_crc32_init(void)
++{
++ unsigned i, j;
++ u32 crc = 0x80000000;
++
++ bnep_crc32_table = kmalloc((1 << CRC_BE_BITS) * sizeof(u32), GFP_KERNEL);
++ if (!bnep_crc32_table)
++ return -ENOMEM;
++
++ bnep_crc32_table[0] = 0;
++
++ for (i = 1; i < 1 << CRC_BE_BITS; i <<= 1) {
++ crc = (crc << 1) ^ ((crc & 0x80000000) ? CRCPOLY_BE : 0);
++ for (j = 0; j < i; j++)
++ bnep_crc32_table[i + j] = crc ^ bnep_crc32_table[j];
++ }
++ return 0;
++}
++
++void __exit bnep_crc32_cleanup(void)
++{
++ if (bnep_crc32_table)
++ kfree(bnep_crc32_table);
++ bnep_crc32_table = NULL;
++}
+diff -urN linux-2.4.18/net/bluetooth/bnep/crc32.h linux-2.4.18-mh15/net/bluetooth/bnep/crc32.h
+--- linux-2.4.18/net/bluetooth/bnep/crc32.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/bnep/crc32.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,10 @@
++/*
++ * crc32.h
++ * See crc32.c for license and changes
++ *
++ * FIXME: Remove in 2.5
++ */
++
++int bnep_crc32_init(void);
++void bnep_crc32_cleanup(void);
++u32 bnep_crc32(u32 crc, unsigned char const *p, size_t len);
+diff -urN linux-2.4.18/net/bluetooth/bnep/Makefile linux-2.4.18-mh15/net/bluetooth/bnep/Makefile
+--- linux-2.4.18/net/bluetooth/bnep/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/bnep/Makefile 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,10 @@
++#
++# Makefile for the Linux Bluetooth BNEP layer
++#
++
++O_TARGET := bnep.o
++
++obj-y := core.o sock.o netdev.o crc32.o
++obj-m += $(O_TARGET)
++
++include $(TOPDIR)/Rules.make
+diff -urN linux-2.4.18/net/bluetooth/bnep/netdev.c linux-2.4.18-mh15/net/bluetooth/bnep/netdev.c
+--- linux-2.4.18/net/bluetooth/bnep/netdev.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/bnep/netdev.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,254 @@
++/*
++ BNEP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2001-2002 Inventel Systemes
++ Written 2001-2002 by
++ Clément Moreau <clement.moreau@inventel.fr>
++ David Libault <david.libault@inventel.fr>
++
++ Copyright (C) 2002 Maxim Krasnyanskiy <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: netdev.c,v 1.7 2002/07/14 05:39:26 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/socket.h>
++#include <linux/netdevice.h>
++#include <linux/etherdevice.h>
++#include <linux/skbuff.h>
++#include <linux/wait.h>
++
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include <net/bluetooth/l2cap.h>
++
++#include "bnep.h"
++
++#ifndef CONFIG_BLUEZ_BNEP_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
++
++#define BNEP_TX_QUEUE_LEN 20
++
++static int bnep_net_open(struct net_device *dev)
++{
++ netif_start_queue(dev);
++ return 0;
++}
++
++static int bnep_net_close(struct net_device *dev)
++{
++ netif_stop_queue(dev);
++ return 0;
++}
++
++static struct net_device_stats *bnep_net_get_stats(struct net_device *dev)
++{
++ struct bnep_session *s = dev->priv;
++ return &s->stats;
++}
++
++static void bnep_net_set_mc_list(struct net_device *dev)
++{
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
++ struct bnep_session *s = dev->priv;
++ struct sock *sk = s->sock->sk;
++ struct bnep_set_filter_req *r;
++ struct sk_buff *skb;
++ int size;
++
++ BT_DBG("%s mc_count %d", dev->name, dev->mc_count);
++
++ size = sizeof(*r) + (BNEP_MAX_MULTICAST_FILTERS + 1) * ETH_ALEN * 2;
++ skb = alloc_skb(size, GFP_ATOMIC);
++ if (!skb) {
++ BT_ERR("%s Multicast list allocation failed", dev->name);
++ return;
++ }
++
++ r = (void *) skb->data;
++ __skb_put(skb, sizeof(*r));
++
++ r->type = BNEP_CONTROL;
++ r->ctrl = BNEP_FILTER_MULTI_ADDR_SET;
++
++ if (dev->flags & (IFF_PROMISC | IFF_ALLMULTI)) {
++ u8 start[ETH_ALEN] = { 0x01 };
++
++ /* Request all addresses */
++ memcpy(__skb_put(skb, ETH_ALEN), start, ETH_ALEN);
++ memcpy(__skb_put(skb, ETH_ALEN), dev->broadcast, ETH_ALEN);
++ r->len = htons(ETH_ALEN * 2);
++ } else {
++ struct dev_mc_list *dmi = dev->mc_list;
++ int i, len = skb->len;
++
++ if (dev->flags & IFF_BROADCAST) {
++ memcpy(__skb_put(skb, ETH_ALEN), dev->broadcast, ETH_ALEN);
++ memcpy(__skb_put(skb, ETH_ALEN), dev->broadcast, ETH_ALEN);
++ }
++
++ /* FIXME: We should group addresses here. */
++
++ for (i = 0; i < dev->mc_count && i < BNEP_MAX_MULTICAST_FILTERS; i++) {
++ memcpy(__skb_put(skb, ETH_ALEN), dmi->dmi_addr, ETH_ALEN);
++ memcpy(__skb_put(skb, ETH_ALEN), dmi->dmi_addr, ETH_ALEN);
++ dmi = dmi->next;
++ }
++ r->len = htons(skb->len - len);
++ }
++
++ skb_queue_tail(&sk->write_queue, skb);
++ wake_up_interruptible(sk->sleep);
++#endif
++}
++
++static int bnep_net_set_mac_addr(struct net_device *dev, void *arg)
++{
++ BT_DBG("%s", dev->name);
++ return 0;
++}
++
++static void bnep_net_timeout(struct net_device *dev)
++{
++ BT_DBG("net_timeout");
++ netif_wake_queue(dev);
++}
++
++static int bnep_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
++{
++ return -EINVAL;
++}
++
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
++static inline int bnep_net_mc_filter(struct sk_buff *skb, struct bnep_session *s)
++{
++ struct ethhdr *eh = (void *) skb->data;
++
++ if ((eh->h_dest[0] & 1) && !test_bit(bnep_mc_hash(eh->h_dest), &s->mc_filter)) {
++ BT_DBG("BNEP: filtered skb %p, dst %.2x:%.2x:%.2x:%.2x:%.2x:%.2x", skb,
++ eh->h_dest[0], eh->h_dest[1], eh->h_dest[2],
++ eh->h_dest[3], eh->h_dest[4], eh->h_dest[5]);
++ return 1;
++ }
++ return 0;
++}
++#endif
++
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
++/* Determine ether protocol. Based on eth_type_trans. */
++static inline u16 bnep_net_eth_proto(struct sk_buff *skb)
++{
++ struct ethhdr *eh = (void *) skb->data;
++
++ if (ntohs(eh->h_proto) >= 1536)
++ return eh->h_proto;
++
++ if (get_unaligned((u16 *) skb->data) == 0xFFFF)
++ return htons(ETH_P_802_3);
++
++ return htons(ETH_P_802_2);
++}
++
++static inline int bnep_net_proto_filter(struct sk_buff *skb, struct bnep_session *s)
++{
++ u16 proto = bnep_net_eth_proto(skb);
++ struct bnep_proto_filter *f = s->proto_filter;
++ int i;
++
++ for (i = 0; i < BNEP_MAX_PROTO_FILTERS && f[i].end; i++) {
++ if (proto >= f[i].start && proto <= f[i].end)
++ return 0;
++ }
++
++ BT_DBG("BNEP: filtered skb %p, proto 0x%.4x", skb, proto);
++ return 1;
++}
++#endif
++
++static int bnep_net_xmit(struct sk_buff *skb, struct net_device *dev)
++{
++ struct bnep_session *s = dev->priv;
++ struct sock *sk = s->sock->sk;
++
++ BT_DBG("skb %p, dev %p", skb, dev);
++
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
++ if (bnep_net_mc_filter(skb, s)) {
++ kfree_skb(skb);
++ return 0;
++ }
++#endif
++
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
++ if (bnep_net_proto_filter(skb, s)) {
++ kfree_skb(skb);
++ return 0;
++ }
++#endif
++
++ /*
++ * We cannot send L2CAP packets from here as we are potentially in a bh.
++ * So we have to queue them and wake up session thread which is sleeping
++ * on the sk->sleep.
++ */
++ dev->trans_start = jiffies;
++ skb_queue_tail(&sk->write_queue, skb);
++ wake_up_interruptible(sk->sleep);
++
++ if (skb_queue_len(&sk->write_queue) >= BNEP_TX_QUEUE_LEN) {
++ BT_DBG("tx queue is full");
++
++ /* Stop queuing.
++ * Session thread will do netif_wake_queue() */
++ netif_stop_queue(dev);
++ }
++
++ return 0;
++}
++
++int bnep_net_init(struct net_device *dev)
++{
++ struct bnep_session *s = dev->priv;
++
++ memcpy(dev->dev_addr, s->eh.h_dest, ETH_ALEN);
++ dev->addr_len = ETH_ALEN;
++
++ ether_setup(dev);
++
++ dev->open = bnep_net_open;
++ dev->stop = bnep_net_close;
++ dev->hard_start_xmit = bnep_net_xmit;
++ dev->get_stats = bnep_net_get_stats;
++ dev->do_ioctl = bnep_net_ioctl;
++ dev->set_mac_address = bnep_net_set_mac_addr;
++ dev->set_multicast_list = bnep_net_set_mc_list;
++
++ dev->watchdog_timeo = HZ * 2;
++ dev->tx_timeout = bnep_net_timeout;
++
++ return 0;
++}
+diff -urN linux-2.4.18/net/bluetooth/bnep/sock.c linux-2.4.18-mh15/net/bluetooth/bnep/sock.c
+--- linux-2.4.18/net/bluetooth/bnep/sock.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/bnep/sock.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,210 @@
++/*
++ BNEP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2001-2002 Inventel Systemes
++ Written 2001-2002 by
++ David Libault <david.libault@inventel.fr>
++
++ Copyright (C) 2002 Maxim Krasnyanskiy <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: sock.c,v 1.3 2002/07/10 22:59:52 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++
++#include "bnep.h"
++
++#ifndef CONFIG_BLUEZ_BNEP_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
++
++static int bnep_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p sk %p", sock, sk);
++
++ if (!sk)
++ return 0;
++
++ sock_orphan(sk);
++ sock_put(sk);
++
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++static int bnep_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++{
++ struct bnep_connlist_req cl;
++ struct bnep_connadd_req ca;
++ struct bnep_conndel_req cd;
++ struct bnep_conninfo ci;
++ struct socket *nsock;
++ int err;
++
++ BT_DBG("cmd %x arg %lx", cmd, arg);
++
++ switch (cmd) {
++ case BNEPCONNADD:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&ca, (void *) arg, sizeof(ca)))
++ return -EFAULT;
++
++ nsock = sockfd_lookup(ca.sock, &err);
++ if (!nsock)
++ return err;
++
++ if (nsock->sk->state != BT_CONNECTED) {
++ fput(nsock->file);
++ return -EBADFD;
++ }
++
++ err = bnep_add_connection(&ca, nsock);
++ if (!err) {
++ if (copy_to_user((void *) arg, &ca, sizeof(ca)))
++ err = -EFAULT;
++ } else
++ fput(nsock->file);
++
++ return err;
++
++ case BNEPCONNDEL:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&cd, (void *) arg, sizeof(cd)))
++ return -EFAULT;
++
++ return bnep_del_connection(&cd);
++
++ case BNEPGETCONNLIST:
++ if (copy_from_user(&cl, (void *) arg, sizeof(cl)))
++ return -EFAULT;
++
++ if (cl.cnum <= 0)
++ return -EINVAL;
++
++ err = bnep_get_connlist(&cl);
++ if (!err && copy_to_user((void *) arg, &cl, sizeof(cl)))
++ return -EFAULT;
++
++ return err;
++
++ case BNEPGETCONNINFO:
++ if (copy_from_user(&ci, (void *) arg, sizeof(ci)))
++ return -EFAULT;
++
++ err = bnep_get_conninfo(&ci);
++ if (!err && copy_to_user((void *) arg, &ci, sizeof(ci)))
++ return -EFAULT;
++
++ return err;
++
++ default:
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++static struct proto_ops bnep_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: bnep_sock_release,
++ ioctl: bnep_sock_ioctl,
++ bind: sock_no_bind,
++ getname: sock_no_getname,
++ sendmsg: sock_no_sendmsg,
++ recvmsg: sock_no_recvmsg,
++ poll: sock_no_poll,
++ listen: sock_no_listen,
++ shutdown: sock_no_shutdown,
++ setsockopt: sock_no_setsockopt,
++ getsockopt: sock_no_getsockopt,
++ connect: sock_no_connect,
++ socketpair: sock_no_socketpair,
++ accept: sock_no_accept,
++ mmap: sock_no_mmap
++};
++
++static int bnep_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ if (sock->type != SOCK_RAW)
++ return -ESOCKTNOSUPPORT;
++
++ sock->ops = &bnep_sock_ops;
++
++ if (!(sk = sk_alloc(PF_BLUETOOTH, GFP_KERNEL, 1)))
++ return -ENOMEM;
++
++ MOD_INC_USE_COUNT;
++
++ sock->state = SS_UNCONNECTED;
++ sock_init_data(sock, sk);
++
++ sk->destruct = NULL;
++ sk->protocol = protocol;
++
++ return 0;
++}
++
++static struct net_proto_family bnep_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: bnep_sock_create
++};
++
++int bnep_sock_init(void)
++{
++ bluez_sock_register(BTPROTO_BNEP, &bnep_sock_family_ops);
++ return 0;
++}
++
++int bnep_sock_cleanup(void)
++{
++ if (bluez_sock_unregister(BTPROTO_BNEP))
++ BT_ERR("Can't unregister BNEP socket");
++ return 0;
++}
+diff -urN linux-2.4.18/net/bluetooth/cmtp/capi.c linux-2.4.18-mh15/net/bluetooth/cmtp/capi.c
+--- linux-2.4.18/net/bluetooth/cmtp/capi.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/cmtp/capi.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,707 @@
++/*
++ CMTP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <net/sock.h>
++
++#include <linux/capi.h>
++
++#include "../drivers/isdn/avmb1/capilli.h"
++#include "../drivers/isdn/avmb1/capicmd.h"
++#include "../drivers/isdn/avmb1/capiutil.h"
++
++#include "cmtp.h"
++
++#ifndef CONFIG_BLUEZ_CMTP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define REVISION "1.0"
++
++#define CAPI_INTEROPERABILITY 0x20
++
++#define CAPI_INTEROPERABILITY_REQ CAPICMD(CAPI_INTEROPERABILITY, CAPI_REQ)
++#define CAPI_INTEROPERABILITY_CONF CAPICMD(CAPI_INTEROPERABILITY, CAPI_CONF)
++#define CAPI_INTEROPERABILITY_IND CAPICMD(CAPI_INTEROPERABILITY, CAPI_IND)
++#define CAPI_INTEROPERABILITY_RESP CAPICMD(CAPI_INTEROPERABILITY, CAPI_RESP)
++
++#define CAPI_INTEROPERABILITY_REQ_LEN (CAPI_MSG_BASELEN + 2)
++#define CAPI_INTEROPERABILITY_CONF_LEN (CAPI_MSG_BASELEN + 4)
++#define CAPI_INTEROPERABILITY_IND_LEN (CAPI_MSG_BASELEN + 2)
++#define CAPI_INTEROPERABILITY_RESP_LEN (CAPI_MSG_BASELEN + 2)
++
++#define CAPI_FUNCTION_REGISTER 0
++#define CAPI_FUNCTION_RELEASE 1
++#define CAPI_FUNCTION_GET_PROFILE 2
++#define CAPI_FUNCTION_GET_MANUFACTURER 3
++#define CAPI_FUNCTION_GET_VERSION 4
++#define CAPI_FUNCTION_GET_SERIAL_NUMBER 5
++#define CAPI_FUNCTION_MANUFACTURER 6
++#define CAPI_FUNCTION_LOOPBACK 7
++
++static struct capi_driver_interface *di;
++
++
++#define CMTP_MSGNUM 1
++#define CMTP_APPLID 2
++#define CMTP_MAPPING 3
++
++static struct cmtp_application *cmtp_application_add(struct cmtp_session *session, __u16 appl)
++{
++ struct cmtp_application *app = kmalloc(sizeof(*app), GFP_KERNEL);
++
++ BT_DBG("session %p application %p appl %d", session, app, appl);
++
++ if (!app)
++ return NULL;
++
++ memset(app, 0, sizeof(*app));
++
++ app->state = BT_OPEN;
++ app->appl = appl;
++
++ list_add_tail(&app->list, &session->applications);
++
++ return app;
++}
++
++static void cmtp_application_del(struct cmtp_session *session, struct cmtp_application *app)
++{
++ BT_DBG("session %p application %p", session, app);
++
++ if (app) {
++ list_del(&app->list);
++ kfree(app);
++ }
++}
++
++static struct cmtp_application *cmtp_application_get(struct cmtp_session *session, int pattern, __u16 value)
++{
++ struct cmtp_application *app;
++ struct list_head *p, *n;
++
++ list_for_each_safe(p, n, &session->applications) {
++ app = list_entry(p, struct cmtp_application, list);
++ switch (pattern) {
++ case CMTP_MSGNUM:
++ if (app->msgnum == value)
++ return app;
++ break;
++ case CMTP_APPLID:
++ if (app->appl == value)
++ return app;
++ break;
++ case CMTP_MAPPING:
++ if (app->mapping == value)
++ return app;
++ break;
++ }
++ }
++
++ return NULL;
++}
++
++static int cmtp_msgnum_get(struct cmtp_session *session)
++{
++ session->msgnum++;
++
++ if ((session->msgnum & 0xff) > 200)
++ session->msgnum = CMTP_INITIAL_MSGNUM + 1;
++
++ return session->msgnum;
++}
++
++
++static void cmtp_send_interopmsg(struct cmtp_session *session,
++ __u8 subcmd, __u16 appl, __u16 msgnum,
++ __u16 function, unsigned char *buf, int len)
++{
++ struct sk_buff *skb;
++ unsigned char *s;
++
++ BT_DBG("session %p subcmd 0x%02x appl %d msgnum %d", session, subcmd, appl, msgnum);
++
++ if (!(skb = alloc_skb(CAPI_MSG_BASELEN + 6 + len, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for interoperability packet");
++ return;
++ }
++
++ s = skb_put(skb, CAPI_MSG_BASELEN + 6 + len);
++
++ capimsg_setu16(s, 0, CAPI_MSG_BASELEN + 6 + len);
++ capimsg_setu16(s, 2, appl);
++ capimsg_setu8 (s, 4, CAPI_INTEROPERABILITY);
++ capimsg_setu8 (s, 5, subcmd);
++ capimsg_setu16(s, 6, msgnum);
++
++ /* Interoperability selector (Bluetooth Device Management) */
++ capimsg_setu16(s, 8, 0x0001);
++
++ capimsg_setu8 (s, 10, 3 + len);
++ capimsg_setu16(s, 11, function);
++ capimsg_setu8 (s, 13, len);
++
++ if (len > 0)
++ memcpy(s + 14, buf, len);
++
++ cmtp_send_capimsg(session, skb);
++}
++
++static void cmtp_recv_interopmsg(struct cmtp_session *session, struct sk_buff *skb)
++{
++ struct capi_ctr *ctrl = session->ctrl;
++ struct cmtp_application *application;
++ __u16 appl, msgnum, func, info;
++ __u32 controller;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ switch (CAPIMSG_SUBCOMMAND(skb->data)) {
++ case CAPI_CONF:
++ func = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 5);
++ info = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 8);
++
++ switch (func) {
++ case CAPI_FUNCTION_REGISTER:
++ msgnum = CAPIMSG_MSGID(skb->data);
++
++ application = cmtp_application_get(session, CMTP_MSGNUM, msgnum);
++ if (application) {
++ application->state = BT_CONNECTED;
++ application->msgnum = 0;
++ application->mapping = CAPIMSG_APPID(skb->data);
++ wake_up_interruptible(&session->wait);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_RELEASE:
++ appl = CAPIMSG_APPID(skb->data);
++
++ application = cmtp_application_get(session, CMTP_MAPPING, appl);
++ if (application) {
++ application->state = BT_CLOSED;
++ application->msgnum = 0;
++ wake_up_interruptible(&session->wait);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_GET_PROFILE:
++ controller = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 11);
++ msgnum = CAPIMSG_MSGID(skb->data);
++
++ if (!info && (msgnum == CMTP_INITIAL_MSGNUM)) {
++ session->ncontroller = controller;
++ wake_up_interruptible(&session->wait);
++ break;
++ }
++
++ if (!info && ctrl) {
++ memcpy(&ctrl->profile,
++ skb->data + CAPI_MSG_BASELEN + 11,
++ sizeof(capi_profile));
++ session->state = BT_CONNECTED;
++ ctrl->ready(ctrl);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_GET_MANUFACTURER:
++ controller = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 10);
++
++ if (!info && ctrl) {
++ strncpy(ctrl->manu,
++ skb->data + CAPI_MSG_BASELEN + 15,
++ skb->data[CAPI_MSG_BASELEN + 14]);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_GET_VERSION:
++ controller = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 12);
++
++ if (!info && ctrl) {
++ ctrl->version.majorversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 16);
++ ctrl->version.minorversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 20);
++ ctrl->version.majormanuversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 24);
++ ctrl->version.minormanuversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 28);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_GET_SERIAL_NUMBER:
++ controller = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 12);
++
++ if (!info && ctrl) {
++ memset(ctrl->serial, 0, CAPI_SERIAL_LEN);
++ strncpy(ctrl->serial,
++ skb->data + CAPI_MSG_BASELEN + 17,
++ skb->data[CAPI_MSG_BASELEN + 16]);
++ }
++
++ break;
++ }
++
++ break;
++
++ case CAPI_IND:
++ func = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 3);
++
++ if (func == CAPI_FUNCTION_LOOPBACK) {
++ appl = CAPIMSG_APPID(skb->data);
++ msgnum = CAPIMSG_MSGID(skb->data);
++ cmtp_send_interopmsg(session, CAPI_RESP, appl, msgnum, func,
++ skb->data + CAPI_MSG_BASELEN + 6,
++ skb->data[CAPI_MSG_BASELEN + 5]);
++ }
++
++ break;
++ }
++
++ kfree_skb(skb);
++}
++
++void cmtp_recv_capimsg(struct cmtp_session *session, struct sk_buff *skb)
++{
++ struct capi_ctr *ctrl = session->ctrl;
++ struct cmtp_application *application;
++ __u16 cmd, appl, info;
++ __u32 ncci, contr;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ if (CAPIMSG_COMMAND(skb->data) == CAPI_INTEROPERABILITY) {
++ cmtp_recv_interopmsg(session, skb);
++ return;
++ }
++
++ if (session->flags & (1 << CMTP_LOOPBACK)) {
++ kfree_skb(skb);
++ return;
++ }
++
++ cmd = CAPICMD(CAPIMSG_COMMAND(skb->data), CAPIMSG_SUBCOMMAND(skb->data));
++ appl = CAPIMSG_APPID(skb->data);
++ contr = CAPIMSG_CONTROL(skb->data);
++
++ application = cmtp_application_get(session, CMTP_MAPPING, appl);
++ if (application) {
++ appl = application->appl;
++ CAPIMSG_SETAPPID(skb->data, appl);
++ } else {
++ BT_ERR("Can't find application with id %d", appl);
++ kfree_skb(skb);
++ return;
++ }
++
++ if ((contr & 0x7f) == 0x01) {
++ contr = (contr & 0xffffff80) | session->num;
++ CAPIMSG_SETCONTROL(skb->data, contr);
++ }
++
++ if (!ctrl) {
++ BT_ERR("Can't find controller %d for message", session->num);
++ kfree_skb(skb);
++ return;
++ }
++
++ switch (cmd) {
++ case CAPI_CONNECT_B3_CONF:
++ ncci = CAPIMSG_NCCI(skb->data);
++ info = CAPIMSG_U16(skb->data, 12);
++
++ BT_DBG("CONNECT_B3_CONF ncci 0x%02x info 0x%02x", ncci, info);
++
++ if (info == 0)
++ ctrl->new_ncci(ctrl, appl, ncci, 8);
++
++ ctrl->handle_capimsg(ctrl, appl, skb);
++ break;
++
++ case CAPI_CONNECT_B3_IND:
++ ncci = CAPIMSG_NCCI(skb->data);
++
++ BT_DBG("CONNECT_B3_IND ncci 0x%02x", ncci);
++
++ ctrl->new_ncci(ctrl, appl, ncci, 8);
++ ctrl->handle_capimsg(ctrl, appl, skb);
++ break;
++
++ case CAPI_DISCONNECT_B3_IND:
++ ncci = CAPIMSG_NCCI(skb->data);
++
++ BT_DBG("DISCONNECT_B3_IND ncci 0x%02x", ncci);
++
++ if (ncci == 0xffffffff)
++ BT_ERR("DISCONNECT_B3_IND with ncci 0xffffffff");
++
++ ctrl->handle_capimsg(ctrl, appl, skb);
++ ctrl->free_ncci(ctrl, appl, ncci);
++ break;
++
++ default:
++ ctrl->handle_capimsg(ctrl, appl, skb);
++ break;
++ }
++}
++
++void cmtp_send_capimsg(struct cmtp_session *session, struct sk_buff *skb)
++{
++ struct cmtp_scb *scb = (void *) skb->cb;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ scb->id = -1;
++ scb->data = (CAPIMSG_COMMAND(skb->data) == CAPI_DATA_B3);
++
++ skb_queue_tail(&session->transmit, skb);
++
++ cmtp_schedule(session);
++}
++
++
++static int cmtp_load_firmware(struct capi_ctr *ctrl, capiloaddata *data)
++{
++ BT_DBG("ctrl %p data %p", ctrl, data);
++
++ return -EIO;
++}
++
++static void cmtp_reset_ctr(struct capi_ctr *ctrl)
++{
++ BT_DBG("ctrl %p", ctrl);
++
++ ctrl->reseted(ctrl);
++}
++
++static void cmtp_remove_ctr(struct capi_ctr *ctrl)
++{
++ struct cmtp_session *session = ctrl->driverdata;
++
++ BT_DBG("ctrl %p", ctrl);
++
++ ctrl->suspend_output(ctrl);
++
++ atomic_inc(&session->terminate);
++ cmtp_schedule(session);
++}
++
++static void cmtp_register_appl(struct capi_ctr *ctrl, __u16 appl, capi_register_params *rp)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct cmtp_session *session = ctrl->driverdata;
++ struct cmtp_application *application;
++ unsigned long timeo = CMTP_INTEROP_TIMEOUT;
++ unsigned char buf[8];
++ int err = 0, nconn, want = rp->level3cnt;
++
++ BT_DBG("ctrl %p appl %d level3cnt %d datablkcnt %d datablklen %d",
++ ctrl, appl, rp->level3cnt, rp->datablkcnt, rp->datablklen);
++
++ application = cmtp_application_add(session, appl);
++ if (!application) {
++ BT_ERR("Can't allocate memory for new application");
++ ctrl->appl_released(ctrl, appl);
++ return;
++ }
++
++ if (want < 0)
++ nconn = ctrl->profile.nbchannel * -want;
++ else
++ nconn = want;
++
++ if (nconn == 0)
++ nconn = ctrl->profile.nbchannel;
++
++ capimsg_setu16(buf, 0, nconn);
++ capimsg_setu16(buf, 2, rp->datablkcnt);
++ capimsg_setu16(buf, 4, rp->datablklen);
++
++ application->state = BT_CONFIG;
++ application->msgnum = cmtp_msgnum_get(session);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0x0000, application->msgnum,
++ CAPI_FUNCTION_REGISTER, buf, 6);
++
++ add_wait_queue(&session->wait, &wait);
++ while (1) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (!timeo) {
++ err = -EAGAIN;
++ break;
++ }
++
++ if (application->state == BT_CLOSED) {
++ err = -application->err;
++ break;
++ }
++
++ if (application->state == BT_CONNECTED)
++ break;
++
++ if (signal_pending(current)) {
++ err = -EINTR;
++ break;
++ }
++
++ timeo = schedule_timeout(timeo);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&session->wait, &wait);
++
++ if (err) {
++ ctrl->appl_released(ctrl, appl);
++ cmtp_application_del(session, application);
++ return;
++ }
++
++ ctrl->appl_registered(ctrl, appl);
++}
++
++static void cmtp_release_appl(struct capi_ctr *ctrl, __u16 appl)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct cmtp_session *session = ctrl->driverdata;
++ struct cmtp_application *application;
++ unsigned long timeo = CMTP_INTEROP_TIMEOUT;
++
++ BT_DBG("ctrl %p appl %d", ctrl, appl);
++
++ application = cmtp_application_get(session, CMTP_APPLID, appl);
++ if (!application) {
++ BT_ERR("Can't find application");
++ return;
++ }
++
++ application->msgnum = cmtp_msgnum_get(session);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, application->mapping, application->msgnum,
++ CAPI_FUNCTION_RELEASE, NULL, 0);
++
++ add_wait_queue(&session->wait, &wait);
++ while (timeo) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (application->state == BT_CLOSED)
++ break;
++
++ if (signal_pending(current))
++ break;
++
++ timeo = schedule_timeout(timeo);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&session->wait, &wait);
++
++ cmtp_application_del(session, application);
++ ctrl->appl_released(ctrl, appl);
++}
++
++static void cmtp_send_message(struct capi_ctr *ctrl, struct sk_buff *skb)
++{
++ struct cmtp_session *session = ctrl->driverdata;
++ struct cmtp_application *application;
++ __u16 appl;
++ __u32 contr;
++
++ BT_DBG("ctrl %p skb %p", ctrl, skb);
++
++ appl = CAPIMSG_APPID(skb->data);
++ contr = CAPIMSG_CONTROL(skb->data);
++
++ application = cmtp_application_get(session, CMTP_APPLID, appl);
++ if ((!application) || (application->state != BT_CONNECTED)) {
++ BT_ERR("Can't find application with id %d", appl);
++ kfree_skb(skb);
++ return;
++ }
++
++ CAPIMSG_SETAPPID(skb->data, application->mapping);
++
++ if ((contr & 0x7f) == session->num) {
++ contr = (contr & 0xffffff80) | 0x01;
++ CAPIMSG_SETCONTROL(skb->data, contr);
++ }
++
++ cmtp_send_capimsg(session, skb);
++}
++
++static char *cmtp_procinfo(struct capi_ctr *ctrl)
++{
++ return "CAPI Message Transport Protocol";
++}
++
++static int cmtp_ctr_read_proc(char *page, char **start, off_t off, int count, int *eof, struct capi_ctr *ctrl)
++{
++ struct cmtp_session *session = ctrl->driverdata;
++ struct cmtp_application *app;
++ struct list_head *p, *n;
++ int len = 0;
++
++ len += sprintf(page + len, "%s (Revision %s)\n\n", cmtp_procinfo(ctrl), REVISION);
++ len += sprintf(page + len, "addr %s\n", session->name);
++ len += sprintf(page + len, "ctrl %d\n", session->num);
++
++ list_for_each_safe(p, n, &session->applications) {
++ app = list_entry(p, struct cmtp_application, list);
++ len += sprintf(page + len, "appl %d -> %d\n", app->appl, app->mapping);
++ }
++
++ if (off + count >= len)
++ *eof = 1;
++
++ if (len < off)
++ return 0;
++
++ *start = page + off;
++
++ return ((count < len - off) ? count : len - off);
++}
++
++static struct capi_driver cmtp_driver = {
++ name: "cmtp",
++ revision: REVISION,
++ load_firmware: cmtp_load_firmware,
++ reset_ctr: cmtp_reset_ctr,
++ remove_ctr: cmtp_remove_ctr,
++ register_appl: cmtp_register_appl,
++ release_appl: cmtp_release_appl,
++ send_message: cmtp_send_message,
++ procinfo: cmtp_procinfo,
++ ctr_read_proc: cmtp_ctr_read_proc,
++
++ driver_read_proc: 0,
++ add_card: 0,
++};
++
++
++int cmtp_attach_device(struct cmtp_session *session)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ unsigned long timeo = CMTP_INTEROP_TIMEOUT;
++ unsigned char buf[4];
++
++ BT_DBG("session %p", session);
++
++ capimsg_setu32(buf, 0, 0);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, CMTP_INITIAL_MSGNUM,
++ CAPI_FUNCTION_GET_PROFILE, buf, 4);
++
++ add_wait_queue(&session->wait, &wait);
++ while (timeo) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (session->ncontroller)
++ break;
++
++ if (signal_pending(current))
++ break;
++
++ timeo = schedule_timeout(timeo);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&session->wait, &wait);
++
++ BT_INFO("Found %d CAPI controller(s) on device %s", session->ncontroller, session->name);
++
++ if (!timeo)
++ return -ETIMEDOUT;
++
++ if (!session->ncontroller)
++ return -ENODEV;
++
++
++ if (session->ncontroller > 1)
++ BT_INFO("Setting up only CAPI controller 1");
++
++ if (!(session->ctrl = di->attach_ctr(&cmtp_driver, session->name, session))) {
++ BT_ERR("Can't attach new controller");
++ return -EBUSY;
++ }
++
++ session->num = session->ctrl->cnr;
++
++ BT_DBG("session %p ctrl %p num %d", session, session->ctrl, session->num);
++
++ capimsg_setu32(buf, 0, 1);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, cmtp_msgnum_get(session),
++ CAPI_FUNCTION_GET_MANUFACTURER, buf, 4);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, cmtp_msgnum_get(session),
++ CAPI_FUNCTION_GET_VERSION, buf, 4);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, cmtp_msgnum_get(session),
++ CAPI_FUNCTION_GET_SERIAL_NUMBER, buf, 4);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, cmtp_msgnum_get(session),
++ CAPI_FUNCTION_GET_PROFILE, buf, 4);
++
++ return 0;
++}
++
++void cmtp_detach_device(struct cmtp_session *session)
++{
++ struct capi_ctr *ctrl = session->ctrl;
++
++ BT_DBG("session %p ctrl %p", session, ctrl);
++
++ if (!ctrl)
++ return;
++
++ ctrl->reseted(ctrl);
++
++ di->detach_ctr(ctrl);
++}
++
++int cmtp_init_capi(void)
++{
++ if (!(di = attach_capi_driver(&cmtp_driver))) {
++ BT_ERR("Can't attach CAPI driver");
++ return -EIO;
++ }
++
++ return 0;
++}
++
++void cmtp_cleanup_capi(void)
++{
++ detach_capi_driver(&cmtp_driver);
++}
+diff -urN linux-2.4.18/net/bluetooth/cmtp/cmtp.h linux-2.4.18-mh15/net/bluetooth/cmtp/cmtp.h
+--- linux-2.4.18/net/bluetooth/cmtp/cmtp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/cmtp/cmtp.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,138 @@
++/*
++ CMTP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#ifndef __CMTP_H
++#define __CMTP_H
++
++#include <linux/types.h>
++#include <net/bluetooth/bluetooth.h>
++
++#define BTNAMSIZ 18
++
++/* CMTP ioctl defines */
++#define CMTPCONNADD _IOW('C', 200, int)
++#define CMTPCONNDEL _IOW('C', 201, int)
++#define CMTPGETCONNLIST _IOR('C', 210, int)
++#define CMTPGETCONNINFO _IOR('C', 211, int)
++
++#define CMTP_LOOPBACK 0
++
++struct cmtp_connadd_req {
++ int sock; // Connected socket
++ __u32 flags;
++};
++
++struct cmtp_conndel_req {
++ bdaddr_t bdaddr;
++ __u32 flags;
++};
++
++struct cmtp_conninfo {
++ bdaddr_t bdaddr;
++ __u32 flags;
++ __u16 state;
++ int num;
++};
++
++struct cmtp_connlist_req {
++ __u32 cnum;
++ struct cmtp_conninfo *ci;
++};
++
++int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock);
++int cmtp_del_connection(struct cmtp_conndel_req *req);
++int cmtp_get_connlist(struct cmtp_connlist_req *req);
++int cmtp_get_conninfo(struct cmtp_conninfo *ci);
++
++/* CMTP session defines */
++#define CMTP_INTEROP_TIMEOUT (HZ * 5)
++#define CMTP_INITIAL_MSGNUM 0xff00
++
++struct cmtp_session {
++ struct list_head list;
++
++ struct socket *sock;
++
++ bdaddr_t bdaddr;
++
++ unsigned long state;
++ unsigned long flags;
++
++ uint mtu;
++
++ char name[BTNAMSIZ];
++
++ atomic_t terminate;
++
++ wait_queue_head_t wait;
++
++ int ncontroller;
++ int num;
++ struct capi_ctr *ctrl;
++
++ struct list_head applications;
++
++ unsigned long blockids;
++ int msgnum;
++
++ struct sk_buff_head transmit;
++
++ struct sk_buff *reassembly[16];
++};
++
++struct cmtp_application {
++ struct list_head list;
++
++ unsigned long state;
++ int err;
++
++ __u16 appl;
++ __u16 mapping;
++
++ __u16 msgnum;
++};
++
++struct cmtp_scb {
++ int id;
++ int data;
++};
++
++int cmtp_attach_device(struct cmtp_session *session);
++void cmtp_detach_device(struct cmtp_session *session);
++
++void cmtp_recv_capimsg(struct cmtp_session *session, struct sk_buff *skb);
++void cmtp_send_capimsg(struct cmtp_session *session, struct sk_buff *skb);
++
++static inline void cmtp_schedule(struct cmtp_session *session)
++{
++ struct sock *sk = session->sock->sk;
++
++ wake_up_interruptible(sk->sleep);
++}
++
++/* CMTP init defines */
++int cmtp_init_capi(void);
++int cmtp_init_sockets(void);
++void cmtp_cleanup_capi(void);
++void cmtp_cleanup_sockets(void);
++
++#endif /* __CMTP_H */
+diff -urN linux-2.4.18/net/bluetooth/cmtp/Config.in linux-2.4.18-mh15/net/bluetooth/cmtp/Config.in
+--- linux-2.4.18/net/bluetooth/cmtp/Config.in 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/cmtp/Config.in 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,7 @@
++#
++# Bluetooth CMTP layer configuration
++#
++
++if [ "$CONFIG_ISDN" = "y" -o "$CONFIG_ISDN" = "m" ]; then
++ dep_tristate 'CMTP protocol support' CONFIG_BLUEZ_CMTP $CONFIG_ISDN_CAPI $CONFIG_BLUEZ_L2CAP
++fi
+diff -urN linux-2.4.18/net/bluetooth/cmtp/core.c linux-2.4.18-mh15/net/bluetooth/cmtp/core.c
+--- linux-2.4.18/net/bluetooth/cmtp/core.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/cmtp/core.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,515 @@
++/*
++ CMTP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <linux/init.h>
++#include <net/sock.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/l2cap.h>
++
++#include "cmtp.h"
++
++#ifndef CONFIG_BLUEZ_CMTP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define VERSION "1.0"
++
++static DECLARE_RWSEM(cmtp_session_sem);
++static LIST_HEAD(cmtp_session_list);
++
++static struct cmtp_session *__cmtp_get_session(bdaddr_t *bdaddr)
++{
++ struct cmtp_session *session;
++ struct list_head *p;
++
++ BT_DBG("");
++
++ list_for_each(p, &cmtp_session_list) {
++ session = list_entry(p, struct cmtp_session, list);
++ if (!bacmp(bdaddr, &session->bdaddr))
++ return session;
++ }
++ return NULL;
++}
++
++static void __cmtp_link_session(struct cmtp_session *session)
++{
++ MOD_INC_USE_COUNT;
++ list_add(&session->list, &cmtp_session_list);
++}
++
++static void __cmtp_unlink_session(struct cmtp_session *session)
++{
++ list_del(&session->list);
++ MOD_DEC_USE_COUNT;
++}
++
++static void __cmtp_copy_session(struct cmtp_session *session, struct cmtp_conninfo *ci)
++{
++ bacpy(&ci->bdaddr, &session->bdaddr);
++
++ ci->flags = session->flags;
++ ci->state = session->state;
++
++ ci->num = session->num;
++}
++
++
++static inline int cmtp_alloc_block_id(struct cmtp_session *session)
++{
++ int i, id = -1;
++
++ for (i = 0; i < 16; i++)
++ if (!test_and_set_bit(i, &session->blockids)) {
++ id = i;
++ break;
++ }
++
++ return id;
++}
++
++static inline void cmtp_free_block_id(struct cmtp_session *session, int id)
++{
++ clear_bit(id, &session->blockids);
++}
++
++static inline void cmtp_add_msgpart(struct cmtp_session *session, int id, const unsigned char *buf, int count)
++{
++ struct sk_buff *skb = session->reassembly[id], *nskb;
++ int size;
++
++ BT_DBG("session %p buf %p count %d", session, buf, count);
++
++ size = (skb) ? skb->len + count : count;
++
++ if (!(nskb = alloc_skb(size, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for CAPI message");
++ return;
++ }
++
++ if (skb && (skb->len > 0))
++ memcpy(skb_put(nskb, skb->len), skb->data, skb->len);
++
++ memcpy(skb_put(nskb, count), buf, count);
++
++ session->reassembly[id] = nskb;
++
++ if (skb)
++ kfree_skb(skb);
++}
++
++static inline int cmtp_recv_frame(struct cmtp_session *session, struct sk_buff *skb)
++{
++ __u8 hdr, hdrlen, id;
++ __u16 len;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ while (skb->len > 0) {
++ hdr = skb->data[0];
++
++ switch (hdr & 0xc0) {
++ case 0x40:
++ hdrlen = 2;
++ len = skb->data[1];
++ break;
++ case 0x80:
++ hdrlen = 3;
++ len = skb->data[1] | (skb->data[2] << 8);
++ break;
++ default:
++ hdrlen = 1;
++ len = 0;
++ break;
++ }
++
++ id = (hdr & 0x3c) >> 2;
++
++ BT_DBG("hdr 0x%02x hdrlen %d len %d id %d", hdr, hdrlen, len, id);
++
++ if (hdrlen + len > skb->len) {
++ BT_ERR("Wrong size or header information in CMTP frame");
++ break;
++ }
++
++ if (len == 0) {
++ skb_pull(skb, hdrlen);
++ continue;
++ }
++
++ switch (hdr & 0x03) {
++ case 0x00:
++ cmtp_add_msgpart(session, id, skb->data + hdrlen, len);
++ cmtp_recv_capimsg(session, session->reassembly[id]);
++ session->reassembly[id] = NULL;
++ break;
++ case 0x01:
++ cmtp_add_msgpart(session, id, skb->data + hdrlen, len);
++ break;
++ default:
++ if (session->reassembly[id] != NULL)
++ kfree_skb(session->reassembly[id]);
++ session->reassembly[id] = NULL;
++ break;
++ }
++
++ skb_pull(skb, hdrlen + len);
++ }
++
++ kfree_skb(skb);
++ return 0;
++}
++
++static int cmtp_send_frame(struct cmtp_session *session, unsigned char *data, int len)
++{
++ struct socket *sock = session->sock;
++ struct iovec iv = { data, len };
++ struct msghdr msg;
++ int err;
++
++ BT_DBG("session %p data %p len %d", session, data, len);
++
++ if (!len)
++ return 0;
++
++ memset(&msg, 0, sizeof(msg));
++ msg.msg_iovlen = 1;
++ msg.msg_iov = &iv;
++
++ err = sock->ops->sendmsg(sock, &msg, len, 0);
++ return err;
++}
++
++static int cmtp_process_transmit(struct cmtp_session *session)
++{
++ struct sk_buff *skb, *nskb;
++ unsigned char *hdr;
++ unsigned int size, tail;
++
++ BT_DBG("session %p", session);
++
++ if (!(nskb = alloc_skb(session->mtu, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for new frame");
++ return -ENOMEM;
++ }
++
++ while ((skb = skb_dequeue(&session->transmit))) {
++ struct cmtp_scb *scb = (void *) skb->cb;
++
++ if ((tail = (session->mtu - nskb->len)) < 5) {
++ cmtp_send_frame(session, nskb->data, nskb->len);
++ skb_trim(nskb, 0);
++ tail = session->mtu;
++ }
++
++ size = min_t(uint, ((tail < 258) ? (tail - 2) : (tail - 3)), skb->len);
++
++ if ((scb->id < 0) && ((scb->id = cmtp_alloc_block_id(session)) < 0)) {
++ skb_queue_head(&session->transmit, skb);
++ break;
++ }
++
++ if (size < 256) {
++ hdr = skb_put(nskb, 2);
++ hdr[0] = 0x40
++ | ((scb->id << 2) & 0x3c)
++ | ((skb->len == size) ? 0x00 : 0x01);
++ hdr[1] = size;
++ } else {
++ hdr = skb_put(nskb, 3);
++ hdr[0] = 0x80
++ | ((scb->id << 2) & 0x3c)
++ | ((skb->len == size) ? 0x00 : 0x01);
++ hdr[1] = size & 0xff;
++ hdr[2] = size >> 8;
++ }
++
++ memcpy(skb_put(nskb, size), skb->data, size);
++ skb_pull(skb, size);
++
++ if (skb->len > 0) {
++ skb_queue_head(&session->transmit, skb);
++ } else {
++ cmtp_free_block_id(session, scb->id);
++ if (scb->data) {
++ cmtp_send_frame(session, nskb->data, nskb->len);
++ skb_trim(nskb, 0);
++ }
++ kfree_skb(skb);
++ }
++ }
++
++ cmtp_send_frame(session, nskb->data, nskb->len);
++
++ kfree_skb(nskb);
++
++ return skb_queue_len(&session->transmit);
++}
++
++static int cmtp_session(void *arg)
++{
++ struct cmtp_session *session = arg;
++ struct sock *sk = session->sock->sk;
++ struct sk_buff *skb;
++ wait_queue_t wait;
++
++ BT_DBG("session %p", session);
++
++ daemonize(); reparent_to_init();
++
++ sprintf(current->comm, "kcmtpd_ctr_%d", session->num);
++
++ sigfillset(&current->blocked);
++ flush_signals(current);
++
++ current->nice = -15;
++
++ set_fs(KERNEL_DS);
++
++ init_waitqueue_entry(&wait, current);
++ add_wait_queue(sk->sleep, &wait);
++ while (!atomic_read(&session->terminate)) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (sk->state != BT_CONNECTED)
++ break;
++
++ while ((skb = skb_dequeue(&sk->receive_queue))) {
++ skb_orphan(skb);
++ cmtp_recv_frame(session, skb);
++ }
++
++ cmtp_process_transmit(session);
++
++ schedule();
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++
++ down_write(&cmtp_session_sem);
++
++ if (!(session->flags & (1 << CMTP_LOOPBACK)))
++ cmtp_detach_device(session);
++
++ fput(session->sock->file);
++
++ __cmtp_unlink_session(session);
++
++ up_write(&cmtp_session_sem);
++
++ kfree(session);
++ return 0;
++}
++
++int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock)
++{
++ struct cmtp_session *session, *s;
++ bdaddr_t src, dst;
++ int i, err;
++
++ BT_DBG("");
++
++ baswap(&src, &bluez_pi(sock->sk)->src);
++ baswap(&dst, &bluez_pi(sock->sk)->dst);
++
++ session = kmalloc(sizeof(struct cmtp_session), GFP_KERNEL);
++ if (!session)
++ return -ENOMEM;
++ memset(session, 0, sizeof(struct cmtp_session));
++
++ down_write(&cmtp_session_sem);
++
++ s = __cmtp_get_session(&bluez_pi(sock->sk)->dst);
++ if (s && s->state == BT_CONNECTED) {
++ err = -EEXIST;
++ goto failed;
++ }
++
++ bacpy(&session->bdaddr, &bluez_pi(sock->sk)->dst);
++
++ session->mtu = min_t(uint, l2cap_pi(sock->sk)->omtu, l2cap_pi(sock->sk)->imtu);
++
++ BT_DBG("mtu %d", session->mtu);
++
++ sprintf(session->name, "%s", batostr(&dst));
++
++ session->sock = sock;
++ session->state = BT_CONFIG;
++
++ init_waitqueue_head(&session->wait);
++
++ session->ctrl = NULL;
++ session->msgnum = CMTP_INITIAL_MSGNUM;
++
++ INIT_LIST_HEAD(&session->applications);
++
++ skb_queue_head_init(&session->transmit);
++
++ for (i = 0; i < 16; i++)
++ session->reassembly[i] = NULL;
++
++ session->flags = req->flags;
++
++ __cmtp_link_session(session);
++
++ err = kernel_thread(cmtp_session, session, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
++ if (err < 0)
++ goto unlink;
++
++ if (!(session->flags & (1 << CMTP_LOOPBACK))) {
++ err = cmtp_attach_device(session);
++ if (err < 0)
++ goto detach;
++ }
++
++ up_write(&cmtp_session_sem);
++ return 0;
++
++detach:
++ cmtp_detach_device(session);
++
++unlink:
++ __cmtp_unlink_session(session);
++
++failed:
++ up_write(&cmtp_session_sem);
++ kfree(session);
++ return err;
++}
++
++int cmtp_del_connection(struct cmtp_conndel_req *req)
++{
++ struct cmtp_session *session;
++ int err = 0;
++
++ BT_DBG("");
++
++ down_read(&cmtp_session_sem);
++
++ session = __cmtp_get_session(&req->bdaddr);
++ if (session) {
++ /* Flush the transmit queue */
++ skb_queue_purge(&session->transmit);
++
++ /* Kill session thread */
++ atomic_inc(&session->terminate);
++ cmtp_schedule(session);
++ } else
++ err = -ENOENT;
++
++ up_read(&cmtp_session_sem);
++ return err;
++}
++
++int cmtp_get_connlist(struct cmtp_connlist_req *req)
++{
++ struct list_head *p;
++ int err = 0, n = 0;
++
++ BT_DBG("");
++
++ down_read(&cmtp_session_sem);
++
++ list_for_each(p, &cmtp_session_list) {
++ struct cmtp_session *session;
++ struct cmtp_conninfo ci;
++
++ session = list_entry(p, struct cmtp_session, list);
++
++ __cmtp_copy_session(session, &ci);
++
++ if (copy_to_user(req->ci, &ci, sizeof(ci))) {
++ err = -EFAULT;
++ break;
++ }
++
++ if (++n >= req->cnum)
++ break;
++
++ req->ci++;
++ }
++ req->cnum = n;
++
++ up_read(&cmtp_session_sem);
++ return err;
++}
++
++int cmtp_get_conninfo(struct cmtp_conninfo *ci)
++{
++ struct cmtp_session *session;
++ int err = 0;
++
++ down_read(&cmtp_session_sem);
++
++ session = __cmtp_get_session(&ci->bdaddr);
++ if (session)
++ __cmtp_copy_session(session, ci);
++ else
++ err = -ENOENT;
++
++ up_read(&cmtp_session_sem);
++ return err;
++}
++
++
++int __init init_cmtp(void)
++{
++ l2cap_load();
++
++ cmtp_init_capi();
++ cmtp_init_sockets();
++
++ BT_INFO("BlueZ CMTP ver %s", VERSION);
++ BT_INFO("Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>");
++
++ return 0;
++}
++
++void __exit exit_cmtp(void)
++{
++ cmtp_cleanup_sockets();
++ cmtp_cleanup_capi();
++}
++
++module_init(init_cmtp);
++module_exit(exit_cmtp);
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueZ CMTP ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/cmtp/Makefile linux-2.4.18-mh15/net/bluetooth/cmtp/Makefile
+--- linux-2.4.18/net/bluetooth/cmtp/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/cmtp/Makefile 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,10 @@
++#
++# Makefile for the Linux Bluetooth CMTP layer
++#
++
++O_TARGET := cmtp.o
++
++obj-y := core.o sock.o capi.o
++obj-m += $(O_TARGET)
++
++include $(TOPDIR)/Rules.make
+diff -urN linux-2.4.18/net/bluetooth/cmtp/sock.c linux-2.4.18-mh15/net/bluetooth/cmtp/sock.c
+--- linux-2.4.18/net/bluetooth/cmtp/sock.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/cmtp/sock.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,208 @@
++/*
++ CMTP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++
++#include "cmtp.h"
++
++#ifndef CONFIG_BLUEZ_CMTP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++static int cmtp_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p sk %p", sock, sk);
++
++ if (!sk)
++ return 0;
++
++ sock_orphan(sk);
++ sock_put(sk);
++
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++static int cmtp_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++{
++ struct cmtp_connadd_req ca;
++ struct cmtp_conndel_req cd;
++ struct cmtp_connlist_req cl;
++ struct cmtp_conninfo ci;
++ struct socket *nsock;
++ int err;
++
++ BT_DBG("cmd %x arg %lx", cmd, arg);
++
++ switch (cmd) {
++ case CMTPCONNADD:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&ca, (void *) arg, sizeof(ca)))
++ return -EFAULT;
++
++ nsock = sockfd_lookup(ca.sock, &err);
++ if (!nsock)
++ return err;
++
++ if (nsock->sk->state != BT_CONNECTED) {
++ fput(nsock->file);
++ return -EBADFD;
++ }
++
++ err = cmtp_add_connection(&ca, nsock);
++ if (!err) {
++ if (copy_to_user((void *) arg, &ca, sizeof(ca)))
++ err = -EFAULT;
++ } else
++ fput(nsock->file);
++
++ return err;
++
++ case CMTPCONNDEL:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&cd, (void *) arg, sizeof(cd)))
++ return -EFAULT;
++
++ return cmtp_del_connection(&cd);
++
++ case CMTPGETCONNLIST:
++ if (copy_from_user(&cl, (void *) arg, sizeof(cl)))
++ return -EFAULT;
++
++ if (cl.cnum <= 0)
++ return -EINVAL;
++
++ err = cmtp_get_connlist(&cl);
++ if (!err && copy_to_user((void *) arg, &cl, sizeof(cl)))
++ return -EFAULT;
++
++ return err;
++
++ case CMTPGETCONNINFO:
++ if (copy_from_user(&ci, (void *) arg, sizeof(ci)))
++ return -EFAULT;
++
++ err = cmtp_get_conninfo(&ci);
++ if (!err && copy_to_user((void *) arg, &ci, sizeof(ci)))
++ return -EFAULT;
++
++ return err;
++ }
++
++ return -EINVAL;
++}
++
++static struct proto_ops cmtp_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: cmtp_sock_release,
++ ioctl: cmtp_sock_ioctl,
++ bind: sock_no_bind,
++ getname: sock_no_getname,
++ sendmsg: sock_no_sendmsg,
++ recvmsg: sock_no_recvmsg,
++ poll: sock_no_poll,
++ listen: sock_no_listen,
++ shutdown: sock_no_shutdown,
++ setsockopt: sock_no_setsockopt,
++ getsockopt: sock_no_getsockopt,
++ connect: sock_no_connect,
++ socketpair: sock_no_socketpair,
++ accept: sock_no_accept,
++ mmap: sock_no_mmap
++};
++
++static int cmtp_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ if (sock->type != SOCK_RAW)
++ return -ESOCKTNOSUPPORT;
++
++ sock->ops = &cmtp_sock_ops;
++
++ if (!(sk = sk_alloc(PF_BLUETOOTH, GFP_KERNEL, 1)))
++ return -ENOMEM;
++
++ MOD_INC_USE_COUNT;
++
++ sock->state = SS_UNCONNECTED;
++ sock_init_data(sock, sk);
++
++ sk->destruct = NULL;
++ sk->protocol = protocol;
++
++ return 0;
++}
++
++static struct net_proto_family cmtp_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: cmtp_sock_create
++};
++
++int cmtp_init_sockets(void)
++{
++ int err;
++
++ if ((err = bluez_sock_register(BTPROTO_CMTP, &cmtp_sock_family_ops))) {
++ BT_ERR("Can't register CMTP socket layer (%d)", err);
++ return err;
++ }
++
++ return 0;
++}
++
++void cmtp_cleanup_sockets(void)
++{
++ int err;
++
++ if ((err = bluez_sock_unregister(BTPROTO_CMTP)))
++ BT_ERR("Can't unregister CMTP socket layer (%d)", err);
++
++ return;
++}
+diff -urN linux-2.4.18/net/bluetooth/Config.in linux-2.4.18-mh15/net/bluetooth/Config.in
+--- linux-2.4.18/net/bluetooth/Config.in 2001-06-12 04:15:27.000000000 +0200
++++ linux-2.4.18-mh15/net/bluetooth/Config.in 2004-08-01 16:26:23.000000000 +0200
+@@ -1,16 +1,23 @@
+ #
+-# Bluetooth configuration
++# Bluetooth subsystem configuration
+ #
+
+ if [ "$CONFIG_NET" != "n" ]; then
++
+ mainmenu_option next_comment
+ comment 'Bluetooth support'
+ dep_tristate 'Bluetooth subsystem support' CONFIG_BLUEZ $CONFIG_NET
+
+ if [ "$CONFIG_BLUEZ" != "n" ]; then
+ dep_tristate 'L2CAP protocol support' CONFIG_BLUEZ_L2CAP $CONFIG_BLUEZ
++ dep_tristate 'SCO links support' CONFIG_BLUEZ_SCO $CONFIG_BLUEZ
++ source net/bluetooth/rfcomm/Config.in
++ source net/bluetooth/bnep/Config.in
++ source net/bluetooth/cmtp/Config.in
++ source net/bluetooth/hidp/Config.in
+ source drivers/bluetooth/Config.in
+ fi
++
+ endmenu
+ fi
+
+diff -urN linux-2.4.18/net/bluetooth/hci_conn.c linux-2.4.18-mh15/net/bluetooth/hci_conn.c
+--- linux-2.4.18/net/bluetooth/hci_conn.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/hci_conn.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,435 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * HCI Connection handling.
++ *
++ * $Id: hci_conn.c,v 1.5 2002/07/17 18:46:25 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/init.h>
++#include <linux/skbuff.h>
++#include <linux/interrupt.h>
++#include <linux/notifier.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++#ifndef HCI_CORE_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
++
++void hci_acl_connect(struct hci_conn *conn)
++{
++ struct hci_dev *hdev = conn->hdev;
++ struct inquiry_entry *ie;
++ create_conn_cp cp;
++
++ BT_DBG("%p", conn);
++
++ conn->state = BT_CONNECT;
++ conn->out = 1;
++ conn->link_mode = HCI_LM_MASTER;
++
++ memset(&cp, 0, sizeof(cp));
++ bacpy(&cp.bdaddr, &conn->dst);
++ cp.pscan_rep_mode = 0x02;
++
++ if ((ie = inquiry_cache_lookup(hdev, &conn->dst)) &&
++ inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
++ cp.pscan_rep_mode = ie->info.pscan_rep_mode;
++ cp.pscan_mode = ie->info.pscan_mode;
++ cp.clock_offset = ie->info.clock_offset | __cpu_to_le16(0x8000);
++ }
++
++ cp.pkt_type = __cpu_to_le16(hdev->pkt_type & ACL_PTYPE_MASK);
++ if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
++ cp.role_switch = 0x01;
++ else
++ cp.role_switch = 0x00;
++
++ hci_send_cmd(hdev, OGF_LINK_CTL, OCF_CREATE_CONN,
++ CREATE_CONN_CP_SIZE, &cp);
++}
++
++void hci_acl_disconn(struct hci_conn *conn, __u8 reason)
++{
++ disconnect_cp cp;
++
++ BT_DBG("%p", conn);
++
++ conn->state = BT_DISCONN;
++
++ cp.handle = __cpu_to_le16(conn->handle);
++ cp.reason = reason;
++ hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_DISCONNECT,
++ DISCONNECT_CP_SIZE, &cp);
++}
++
++void hci_add_sco(struct hci_conn *conn, __u16 handle)
++{
++ struct hci_dev *hdev = conn->hdev;
++ add_sco_cp cp;
++
++ BT_DBG("%p", conn);
++
++ conn->state = BT_CONNECT;
++ conn->out = 1;
++
++ cp.pkt_type = __cpu_to_le16(hdev->pkt_type & SCO_PTYPE_MASK);
++ cp.handle = __cpu_to_le16(handle);
++
++ hci_send_cmd(hdev, OGF_LINK_CTL, OCF_ADD_SCO, ADD_SCO_CP_SIZE, &cp);
++}
++
++static void hci_conn_timeout(unsigned long arg)
++{
++ struct hci_conn *conn = (void *)arg;
++ struct hci_dev *hdev = conn->hdev;
++
++ BT_DBG("conn %p state %d", conn, conn->state);
++
++ if (atomic_read(&conn->refcnt))
++ return;
++
++ hci_dev_lock(hdev);
++ if (conn->state == BT_CONNECTED)
++ hci_acl_disconn(conn, 0x13);
++ else
++ conn->state = BT_CLOSED;
++ hci_dev_unlock(hdev);
++ return;
++}
++
++static void hci_conn_init_timer(struct hci_conn *conn)
++{
++ init_timer(&conn->timer);
++ conn->timer.function = hci_conn_timeout;
++ conn->timer.data = (unsigned long)conn;
++}
++
++struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst)
++{
++ struct hci_conn *conn;
++
++ BT_DBG("%s dst %s", hdev->name, batostr(dst));
++
++ if (!(conn = kmalloc(sizeof(struct hci_conn), GFP_ATOMIC)))
++ return NULL;
++ memset(conn, 0, sizeof(struct hci_conn));
++
++ bacpy(&conn->dst, dst);
++ conn->type = type;
++ conn->hdev = hdev;
++ conn->state = BT_OPEN;
++
++ skb_queue_head_init(&conn->data_q);
++ hci_conn_init_timer(conn);
++
++ atomic_set(&conn->refcnt, 0);
++
++ hci_dev_hold(hdev);
++
++ tasklet_disable(&hdev->tx_task);
++ conn_hash_add(hdev, conn);
++ tasklet_enable(&hdev->tx_task);
++
++ return conn;
++}
++
++int hci_conn_del(struct hci_conn *conn)
++{
++ struct hci_dev *hdev = conn->hdev;
++
++ BT_DBG("%s conn %p handle %d", hdev->name, conn, conn->handle);
++
++ hci_conn_del_timer(conn);
++
++ if (conn->type == SCO_LINK) {
++ struct hci_conn *acl = conn->link;
++ if (acl) {
++ acl->link = NULL;
++ hci_conn_put(acl);
++ }
++ } else {
++ struct hci_conn *sco = conn->link;
++ if (sco)
++ sco->link = NULL;
++
++ /* Unacked frames */
++ hdev->acl_cnt += conn->sent;
++ }
++
++ tasklet_disable(&hdev->tx_task);
++ conn_hash_del(hdev, conn);
++ tasklet_enable(&hdev->tx_task);
++
++ skb_queue_purge(&conn->data_q);
++
++ hci_dev_put(hdev);
++
++ kfree(conn);
++ return 0;
++}
++
++struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
++{
++ int use_src = bacmp(src, BDADDR_ANY);
++ struct hci_dev *hdev = NULL;
++ struct list_head *p;
++
++ BT_DBG("%s -> %s", batostr(src), batostr(dst));
++
++ read_lock_bh(&hdev_list_lock);
++
++ list_for_each(p, &hdev_list) {
++ struct hci_dev *d;
++ d = list_entry(p, struct hci_dev, list);
++
++ if (!test_bit(HCI_UP, &d->flags))
++ continue;
++
++ /* Simple routing:
++ * No source address - find interface with bdaddr != dst
++ * Source address - find interface with bdaddr == src
++ */
++
++ if (use_src) {
++ if (!bacmp(&d->bdaddr, src)) {
++ hdev = d; break;
++ }
++ } else {
++ if (bacmp(&d->bdaddr, dst)) {
++ hdev = d; break;
++ }
++ }
++ }
++
++ if (hdev)
++ hci_dev_hold(hdev);
++
++ read_unlock_bh(&hdev_list_lock);
++ return hdev;
++}
++
++/* Create SCO or ACL connection.
++ * Device _must_ be locked */
++struct hci_conn * hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst)
++{
++ struct hci_conn *acl;
++
++ BT_DBG("%s dst %s", hdev->name, batostr(dst));
++
++ if (!(acl = conn_hash_lookup_ba(hdev, ACL_LINK, dst))) {
++ if (!(acl = hci_conn_add(hdev, ACL_LINK, dst)))
++ return NULL;
++ }
++
++ hci_conn_hold(acl);
++
++ if (acl->state == BT_OPEN || acl->state == BT_CLOSED)
++ hci_acl_connect(acl);
++
++ if (type == SCO_LINK) {
++ struct hci_conn *sco;
++
++ if (!(sco = conn_hash_lookup_ba(hdev, SCO_LINK, dst))) {
++ if (!(sco = hci_conn_add(hdev, SCO_LINK, dst))) {
++ hci_conn_put(acl);
++ return NULL;
++ }
++ }
++ acl->link = sco;
++ sco->link = acl;
++
++ hci_conn_hold(sco);
++
++ if (acl->state == BT_CONNECTED &&
++ (sco->state == BT_OPEN || sco->state == BT_CLOSED))
++ hci_add_sco(sco, acl->handle);
++
++ return sco;
++ } else {
++ return acl;
++ }
++}
++
++/* Authenticate remote device */
++int hci_conn_auth(struct hci_conn *conn)
++{
++ BT_DBG("conn %p", conn);
++
++ if (conn->link_mode & HCI_LM_AUTH)
++ return 1;
++
++ if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
++ auth_requested_cp ar;
++ ar.handle = __cpu_to_le16(conn->handle);
++ hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_AUTH_REQUESTED,
++ AUTH_REQUESTED_CP_SIZE, &ar);
++ }
++ return 0;
++}
++
++/* Enable encryption */
++int hci_conn_encrypt(struct hci_conn *conn)
++{
++ BT_DBG("conn %p", conn);
++
++ if (conn->link_mode & HCI_LM_ENCRYPT)
++ return 1;
++
++ if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend))
++ return 0;
++
++ if (hci_conn_auth(conn)) {
++ set_conn_encrypt_cp ce;
++ ce.handle = __cpu_to_le16(conn->handle);
++ ce.encrypt = 1;
++ hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_SET_CONN_ENCRYPT,
++ SET_CONN_ENCRYPT_CP_SIZE, &ce);
++ }
++ return 0;
++}
++
++/* Drop all connection on the device */
++void hci_conn_hash_flush(struct hci_dev *hdev)
++{
++ struct conn_hash *h = &hdev->conn_hash;
++ struct list_head *p;
++
++ BT_DBG("hdev %s", hdev->name);
++
++ p = h->list.next;
++ while (p != &h->list) {
++ struct hci_conn *c;
++
++ c = list_entry(p, struct hci_conn, list);
++ p = p->next;
++
++ c->state = BT_CLOSED;
++
++ hci_proto_disconn_ind(c, 0x16);
++ hci_conn_del(c);
++ }
++}
++
++int hci_get_conn_list(unsigned long arg)
++{
++ struct hci_conn_list_req req, *cl;
++ struct hci_conn_info *ci;
++ struct hci_dev *hdev;
++ struct list_head *p;
++ int n = 0, size, err;
++
++ if (copy_from_user(&req, (void *) arg, sizeof(req)))
++ return -EFAULT;
++
++ if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
++ return -EINVAL;
++
++ size = sizeof(req) + req.conn_num * sizeof(*ci);
++
++ if (!(cl = (void *) kmalloc(size, GFP_KERNEL)))
++ return -ENOMEM;
++
++ if (!(hdev = hci_dev_get(req.dev_id))) {
++ kfree(cl);
++ return -ENODEV;
++ }
++
++ ci = cl->conn_info;
++
++ hci_dev_lock_bh(hdev);
++ list_for_each(p, &hdev->conn_hash.list) {
++ register struct hci_conn *c;
++ c = list_entry(p, struct hci_conn, list);
++
++ bacpy(&(ci + n)->bdaddr, &c->dst);
++ (ci + n)->handle = c->handle;
++ (ci + n)->type = c->type;
++ (ci + n)->out = c->out;
++ (ci + n)->state = c->state;
++ (ci + n)->link_mode = c->link_mode;
++ if (++n >= req.conn_num)
++ break;
++ }
++ hci_dev_unlock_bh(hdev);
++
++ cl->dev_id = hdev->id;
++ cl->conn_num = n;
++ size = sizeof(req) + n * sizeof(*ci);
++
++ hci_dev_put(hdev);
++
++ err = copy_to_user((void *) arg, cl, size);
++ kfree(cl);
++
++ return err ? -EFAULT : 0;
++}
++
++int hci_get_conn_info(struct hci_dev *hdev, unsigned long arg)
++{
++ struct hci_conn_info_req req;
++ struct hci_conn_info ci;
++ struct hci_conn *conn;
++ char *ptr = (void *) arg + sizeof(req);
++
++ if (copy_from_user(&req, (void *) arg, sizeof(req)))
++ return -EFAULT;
++
++ hci_dev_lock_bh(hdev);
++ conn = conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
++ if (conn) {
++ bacpy(&ci.bdaddr, &conn->dst);
++ ci.handle = conn->handle;
++ ci.type = conn->type;
++ ci.out = conn->out;
++ ci.state = conn->state;
++ ci.link_mode = conn->link_mode;
++ }
++ hci_dev_unlock_bh(hdev);
++
++ if (!conn)
++ return -ENOENT;
++
++ return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
++}
+diff -urN linux-2.4.18/net/bluetooth/hci_core.c linux-2.4.18-mh15/net/bluetooth/hci_core.c
+--- linux-2.4.18/net/bluetooth/hci_core.c 2001-11-09 23:21:21.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/hci_core.c 2004-08-01 16:26:23.000000000 +0200
+@@ -25,11 +25,12 @@
+ /*
+ * BlueZ HCI Core.
+ *
+- * $Id: hci_core.c,v 1.22 2001/08/03 04:19:50 maxk Exp $
++ * $Id: hci_core.c,v 1.14 2002/08/26 16:57:57 maxk Exp $
+ */
+
+ #include <linux/config.h>
+ #include <linux/module.h>
++#include <linux/kmod.h>
+
+ #include <linux/types.h>
+ #include <linux/errno.h>
+@@ -50,12 +51,11 @@
+ #include <asm/unaligned.h>
+
+ #include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+ #include <net/bluetooth/hci_core.h>
+
+ #ifndef HCI_CORE_DEBUG
+-#undef DBG
+-#define DBG( A... )
++#undef BT_DBG
++#define BT_DBG( A... )
+ #endif
+
+ static void hci_cmd_task(unsigned long arg);
+@@ -63,279 +63,69 @@
+ static void hci_tx_task(unsigned long arg);
+ static void hci_notify(struct hci_dev *hdev, int event);
+
+-static rwlock_t hci_task_lock = RW_LOCK_UNLOCKED;
++rwlock_t hci_task_lock = RW_LOCK_UNLOCKED;
+
+ /* HCI device list */
+-struct hci_dev *hdev_list[HCI_MAX_DEV];
+-spinlock_t hdev_list_lock;
+-#define GET_HDEV(a) (hdev_list[a])
+-
+-/* HCI protocol list */
+-struct hci_proto *hproto_list[HCI_MAX_PROTO];
+-#define GET_HPROTO(a) (hproto_list[a])
++LIST_HEAD(hdev_list);
++rwlock_t hdev_list_lock = RW_LOCK_UNLOCKED;
+
+-/* HCI notifiers list */
+-struct notifier_block *hci_dev_notifier;
+-
+-/* HCI device notifications */
+-int hci_register_notifier(struct notifier_block *nb)
+-{
+- int err, i;
+- struct hci_dev *hdev;
+-
+- if ((err = notifier_chain_register(&hci_dev_notifier, nb)))
+- return err;
+-
+- /* Notify about already registered devices */
+- spin_lock(&hdev_list_lock);
+- for (i = 0; i < HCI_MAX_DEV; i++) {
+- if (!(hdev = GET_HDEV(i)))
+- continue;
+- if (hdev->flags & HCI_UP)
+- (*nb->notifier_call)(nb, HCI_DEV_UP, hdev);
+- }
+- spin_unlock(&hdev_list_lock);
+-
+- return 0;
+-}
+-
+-int hci_unregister_notifier(struct notifier_block *nb)
+-{
+- return notifier_chain_unregister(&hci_dev_notifier, nb);
+-}
+-
+-static inline void hci_notify(struct hci_dev *hdev, int event)
+-{
+- notifier_call_chain(&hci_dev_notifier, event, hdev);
+-}
+-
+-/* Get HCI device by index (device is locked on return)*/
+-struct hci_dev *hci_dev_get(int index)
+-{
+- struct hci_dev *hdev;
+- DBG("%d", index);
+-
+- if (index < 0 || index >= HCI_MAX_DEV)
+- return NULL;
+-
+- spin_lock(&hdev_list_lock);
+- if ((hdev = GET_HDEV(index)))
+- hci_dev_hold(hdev);
+- spin_unlock(&hdev_list_lock);
+-
+- return hdev;
+-}
+-
+-/* Flush inquiry cache */
+-void inquiry_cache_flush(struct inquiry_cache *cache)
+-{
+- struct inquiry_entry *next = cache->list, *e;
+-
+- DBG("cache %p", cache);
+-
+- cache->list = NULL;
+- while ((e = next)) {
+- next = e->next;
+- kfree(e);
+- }
+-}
+-
+-/* Lookup by bdaddr.
+- * Cache must be locked. */
+-static struct inquiry_entry * __inquiry_cache_lookup(struct inquiry_cache *cache, bdaddr_t *bdaddr)
+-{
+- struct inquiry_entry *e;
+-
+- DBG("cache %p, %s", cache, batostr(bdaddr));
+-
+- for (e = cache->list; e; e = e->next)
+- if (!bacmp(&e->info.bdaddr, bdaddr))
+- break;
+-
+- return e;
+-}
+-
+-static void inquiry_cache_update(struct inquiry_cache *cache, inquiry_info *info)
+-{
+- struct inquiry_entry *e;
+-
+- DBG("cache %p, %s", cache, batostr(&info->bdaddr));
+-
+- inquiry_cache_lock(cache);
+-
+- if (!(e = __inquiry_cache_lookup(cache, &info->bdaddr))) {
+- /* Entry not in the cache. Add new one. */
+- if (!(e = kmalloc(sizeof(struct inquiry_entry), GFP_ATOMIC)))
+- goto unlock;
+- memset(e, 0, sizeof(struct inquiry_entry));
+- e->next = cache->list;
+- cache->list = e;
+- }
+-
+- memcpy(&e->info, info, sizeof(inquiry_info));
+- e->timestamp = jiffies;
+- cache->timestamp = jiffies;
+-unlock:
+- inquiry_cache_unlock(cache);
+-}
+-
+-static int inquiry_cache_dump(struct inquiry_cache *cache, int num, __u8 *buf)
+-{
+- inquiry_info *info = (inquiry_info *) buf;
+- struct inquiry_entry *e;
+- int copied = 0;
++/* HCI protocols */
++#define HCI_MAX_PROTO 2
++struct hci_proto *hci_proto[HCI_MAX_PROTO];
+
+- inquiry_cache_lock(cache);
+-
+- for (e = cache->list; e && copied < num; e = e->next, copied++)
+- memcpy(info++, &e->info, sizeof(inquiry_info));
++/* HCI notifiers list */
++static struct notifier_block *hci_notifier;
+
+- inquiry_cache_unlock(cache);
+
+- DBG("cache %p, copied %d", cache, copied);
+- return copied;
+-}
++/* ---- HCI notifications ---- */
+
+-/* --------- BaseBand connections --------- */
+-static struct hci_conn *hci_conn_add(struct hci_dev *hdev, __u16 handle, __u8 type, bdaddr_t *dst)
++int hci_register_notifier(struct notifier_block *nb)
+ {
+- struct hci_conn *conn;
+-
+- DBG("%s handle %d dst %s", hdev->name, handle, batostr(dst));
+-
+- if ( conn_hash_lookup(&hdev->conn_hash, handle)) {
+- ERR("%s handle 0x%x already exists", hdev->name, handle);
+- return NULL;
+- }
+-
+- if (!(conn = kmalloc(sizeof(struct hci_conn), GFP_ATOMIC)))
+- return NULL;
+- memset(conn, 0, sizeof(struct hci_conn));
+-
+- bacpy(&conn->dst, dst);
+- conn->handle = handle;
+- conn->type = type;
+- conn->hdev = hdev;
+-
+- skb_queue_head_init(&conn->data_q);
+-
+- hci_dev_hold(hdev);
+- conn_hash_add(&hdev->conn_hash, handle, conn);
+-
+- return conn;
++ return notifier_chain_register(&hci_notifier, nb);
+ }
+
+-static int hci_conn_del(struct hci_dev *hdev, struct hci_conn *conn)
++int hci_unregister_notifier(struct notifier_block *nb)
+ {
+- DBG("%s conn %p handle %d", hdev->name, conn, conn->handle);
+-
+- conn_hash_del(&hdev->conn_hash, conn);
+- hci_dev_put(hdev);
+-
+- /* Unacked frames */
+- hdev->acl_cnt += conn->sent;
+-
+- skb_queue_purge(&conn->data_q);
+-
+- kfree(conn);
+- return 0;
++ return notifier_chain_unregister(&hci_notifier, nb);
+ }
+
+-/* Drop all connection on the device */
+-static void hci_conn_hash_flush(struct hci_dev *hdev)
++void hci_notify(struct hci_dev *hdev, int event)
+ {
+- struct conn_hash *h = &hdev->conn_hash;
+- struct hci_proto *hp;
+- struct list_head *p;
+-
+- DBG("hdev %s", hdev->name);
+-
+- p = h->list.next;
+- while (p != &h->list) {
+- struct hci_conn *c;
+-
+- c = list_entry(p, struct hci_conn, list);
+- p = p->next;
+-
+- if (c->type == ACL_LINK) {
+- /* ACL link notify L2CAP layer */
+- if ((hp = GET_HPROTO(HCI_PROTO_L2CAP)) && hp->disconn_ind)
+- hp->disconn_ind(c, 0x16);
+- } else {
+- /* SCO link (no notification) */
+- }
+-
+- hci_conn_del(hdev, c);
+- }
++ notifier_call_chain(&hci_notifier, event, hdev);
+ }
+
+-int hci_connect(struct hci_dev *hdev, bdaddr_t *bdaddr)
+-{
+- struct inquiry_cache *cache = &hdev->inq_cache;
+- struct inquiry_entry *e;
+- create_conn_cp cc;
+- __u16 clock_offset;
+-
+- DBG("%s bdaddr %s", hdev->name, batostr(bdaddr));
+-
+- if (!(hdev->flags & HCI_UP))
+- return -ENODEV;
+-
+- inquiry_cache_lock_bh(cache);
+-
+- if (!(e = __inquiry_cache_lookup(cache, bdaddr)) || inquiry_entry_age(e) > INQUIRY_ENTRY_AGE_MAX) {
+- cc.pscan_rep_mode = 0;
+- cc.pscan_mode = 0;
+- clock_offset = 0;
+- } else {
+- cc.pscan_rep_mode = e->info.pscan_rep_mode;
+- cc.pscan_mode = e->info.pscan_mode;
+- clock_offset = __le16_to_cpu(e->info.clock_offset) & 0x8000;
+- }
+-
+- inquiry_cache_unlock_bh(cache);
+-
+- bacpy(&cc.bdaddr, bdaddr);
+- cc.pkt_type = __cpu_to_le16(hdev->pkt_type);
+- cc.clock_offset = __cpu_to_le16(clock_offset);
+-
+- if (lmp_rswitch_capable(hdev))
+- cc.role_switch = 0x01;
+- else
+- cc.role_switch = 0x00;
+-
+- hci_send_cmd(hdev, OGF_LINK_CTL, OCF_CREATE_CONN, CREATE_CONN_CP_SIZE, &cc);
++/* ---- HCI hotplug support ---- */
+
+- return 0;
+-}
++#ifdef CONFIG_HOTPLUG
+
+-int hci_disconnect(struct hci_conn *conn, __u8 reason)
++static int hci_run_hotplug(char *dev, char *action)
+ {
+- disconnect_cp dc;
+-
+- DBG("conn %p handle %d", conn, conn->handle);
++ char *argv[3], *envp[5], dstr[20], astr[32];
+
+- dc.handle = __cpu_to_le16(conn->handle);
+- dc.reason = reason;
+- hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_DISCONNECT, DISCONNECT_CP_SIZE, &dc);
++ sprintf(dstr, "DEVICE=%s", dev);
++ sprintf(astr, "ACTION=%s", action);
+
+- return 0;
+-}
++ argv[0] = hotplug_path;
++ argv[1] = "bluetooth";
++ argv[2] = NULL;
+
+-/* --------- HCI request handling ------------ */
+-static inline void hci_req_lock(struct hci_dev *hdev)
+-{
+- down(&hdev->req_lock);
++ envp[0] = "HOME=/";
++ envp[1] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";
++ envp[2] = dstr;
++ envp[3] = astr;
++ envp[4] = NULL;
++
++ return call_usermodehelper(argv[0], argv, envp);
+ }
++#else
++#define hci_run_hotplug(A...)
++#endif
+
+-static inline void hci_req_unlock(struct hci_dev *hdev)
+-{
+- up(&hdev->req_lock);
+-}
++/* ---- HCI requests ---- */
+
+-static inline void hci_req_complete(struct hci_dev *hdev, int result)
++void hci_req_complete(struct hci_dev *hdev, int result)
+ {
+- DBG("%s result 0x%2.2x", hdev->name, result);
++ BT_DBG("%s result 0x%2.2x", hdev->name, result);
+
+ if (hdev->req_status == HCI_REQ_PEND) {
+ hdev->req_result = result;
+@@ -344,9 +134,9 @@
+ }
+ }
+
+-static inline void hci_req_cancel(struct hci_dev *hdev, int err)
++void hci_req_cancel(struct hci_dev *hdev, int err)
+ {
+- DBG("%s err 0x%2.2x", hdev->name, err);
++ BT_DBG("%s err 0x%2.2x", hdev->name, err);
+
+ if (hdev->req_status == HCI_REQ_PEND) {
+ hdev->req_result = err;
+@@ -356,23 +146,22 @@
+ }
+
+ /* Execute request and wait for completion. */
+-static int __hci_request(struct hci_dev *hdev, void (*req)(struct hci_dev *hdev, unsigned long opt),
+- unsigned long opt, __u32 timeout)
++static int __hci_request(struct hci_dev *hdev, void (*req)(struct hci_dev *hdev, unsigned long opt), unsigned long opt, __u32 timeout)
+ {
+ DECLARE_WAITQUEUE(wait, current);
+ int err = 0;
+
+- DBG("%s start", hdev->name);
++ BT_DBG("%s start", hdev->name);
+
+ hdev->req_status = HCI_REQ_PEND;
+
+ add_wait_queue(&hdev->req_wait_q, &wait);
+- current->state = TASK_INTERRUPTIBLE;
++ set_current_state(TASK_INTERRUPTIBLE);
+
+ req(hdev, opt);
+ schedule_timeout(timeout);
+
+- current->state = TASK_RUNNING;
++ set_current_state(TASK_RUNNING);
+ remove_wait_queue(&hdev->req_wait_q, &wait);
+
+ if (signal_pending(current))
+@@ -394,7 +183,7 @@
+
+ hdev->req_status = hdev->req_result = 0;
+
+- DBG("%s end: err %d", hdev->name, err);
++ BT_DBG("%s end: err %d", hdev->name, err);
+
+ return err;
+ }
+@@ -412,10 +201,9 @@
+ return ret;
+ }
+
+-/* --------- HCI requests ---------- */
+ static void hci_reset_req(struct hci_dev *hdev, unsigned long opt)
+ {
+- DBG("%s %ld", hdev->name, opt);
++ BT_DBG("%s %ld", hdev->name, opt);
+
+ /* Reset device */
+ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_RESET, 0, NULL);
+@@ -423,27 +211,44 @@
+
+ static void hci_init_req(struct hci_dev *hdev, unsigned long opt)
+ {
+- set_event_flt_cp ec;
++ set_event_flt_cp ef;
+ __u16 param;
+
+- DBG("%s %ld", hdev->name, opt);
++ BT_DBG("%s %ld", hdev->name, opt);
+
+ /* Mandatory initialization */
+
++ /* Reset */
++ if (test_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks))
++ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_RESET, 0, NULL);
++
+ /* Read Local Supported Features */
+ hci_send_cmd(hdev, OGF_INFO_PARAM, OCF_READ_LOCAL_FEATURES, 0, NULL);
+
+ /* Read Buffer Size (ACL mtu, max pkt, etc.) */
+ hci_send_cmd(hdev, OGF_INFO_PARAM, OCF_READ_BUFFER_SIZE, 0, NULL);
+
++#if 0
++ /* Host buffer size */
++ {
++ host_buffer_size_cp bs;
++ bs.acl_mtu = __cpu_to_le16(HCI_MAX_ACL_SIZE);
++ bs.sco_mtu = HCI_MAX_SCO_SIZE;
++ bs.acl_max_pkt = __cpu_to_le16(0xffff);
++ bs.sco_max_pkt = __cpu_to_le16(0xffff);
++ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_HOST_BUFFER_SIZE,
++ HOST_BUFFER_SIZE_CP_SIZE, &bs);
++ }
++#endif
++
+ /* Read BD Address */
+ hci_send_cmd(hdev, OGF_INFO_PARAM, OCF_READ_BD_ADDR, 0, NULL);
+
+ /* Optional initialization */
+
+ /* Clear Event Filters */
+- ec.flt_type = FLT_CLEAR_ALL;
+- hci_send_cmd(hdev, OGF_HOST_CTL, OCF_SET_EVENT_FLT, 1, &ec);
++ ef.flt_type = FLT_CLEAR_ALL;
++ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_SET_EVENT_FLT, 1, &ef);
+
+ /* Page timeout ~20 secs */
+ param = __cpu_to_le16(0x8000);
+@@ -458,7 +263,7 @@
+ {
+ __u8 scan = opt;
+
+- DBG("%s %x", hdev->name, scan);
++ BT_DBG("%s %x", hdev->name, scan);
+
+ /* Inquiry and Page scans */
+ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE, 1, &scan);
+@@ -468,116 +273,273 @@
+ {
+ __u8 auth = opt;
+
+- DBG("%s %x", hdev->name, auth);
++ BT_DBG("%s %x", hdev->name, auth);
+
+ /* Authentication */
+ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_WRITE_AUTH_ENABLE, 1, &auth);
+ }
+
+-static void hci_inq_req(struct hci_dev *hdev, unsigned long opt)
++static void hci_encrypt_req(struct hci_dev *hdev, unsigned long opt)
+ {
+- struct hci_inquiry_req *ir = (struct hci_inquiry_req *) opt;
+- inquiry_cp ic;
++ __u8 encrypt = opt;
+
+- DBG("%s", hdev->name);
++ BT_DBG("%s %x", hdev->name, encrypt);
+
+- /* Start Inquiry */
+- memcpy(&ic.lap, &ir->lap, 3);
+- ic.lenght = ir->length;
+- ic.num_rsp = ir->num_rsp;
+- hci_send_cmd(hdev, OGF_LINK_CTL, OCF_INQUIRY, INQUIRY_CP_SIZE, &ic);
++ /* Authentication */
++ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_WRITE_ENCRYPT_MODE, 1, &encrypt);
+ }
+
+-/* HCI ioctl helpers */
+-int hci_dev_open(__u16 dev)
++/* Get HCI device by index.
++ * Device is locked on return. */
++struct hci_dev *hci_dev_get(int index)
+ {
+ struct hci_dev *hdev;
+- int ret = 0;
+-
+- if (!(hdev = hci_dev_get(dev)))
+- return -ENODEV;
++ struct list_head *p;
+
+- DBG("%s %p", hdev->name, hdev);
++ BT_DBG("%d", index);
+
+- hci_req_lock(hdev);
++ if (index < 0)
++ return NULL;
+
+- if (hdev->flags & HCI_UP) {
+- ret = -EALREADY;
+- goto done;
++ read_lock(&hdev_list_lock);
++ list_for_each(p, &hdev_list) {
++ hdev = list_entry(p, struct hci_dev, list);
++ if (hdev->id == index) {
++ hci_dev_hold(hdev);
++ goto done;
++ }
+ }
++ hdev = NULL;
++done:
++ read_unlock(&hdev_list_lock);
++ return hdev;
++}
+
+- if (hdev->open(hdev)) {
+- ret = -EIO;
+- goto done;
+- }
++/* ---- Inquiry support ---- */
++void inquiry_cache_flush(struct hci_dev *hdev)
++{
++ struct inquiry_cache *cache = &hdev->inq_cache;
++ struct inquiry_entry *next = cache->list, *e;
+
+- if (hdev->flags & HCI_NORMAL) {
+- atomic_set(&hdev->cmd_cnt, 1);
+- hdev->flags |= HCI_INIT;
++ BT_DBG("cache %p", cache);
+
+- //__hci_request(hdev, hci_reset_req, 0, HZ);
+- ret = __hci_request(hdev, hci_init_req, 0, HCI_INIT_TIMEOUT);
+-
+- hdev->flags &= ~HCI_INIT;
++ cache->list = NULL;
++ while ((e = next)) {
++ next = e->next;
++ kfree(e);
+ }
++}
+
+- if (!ret) {
+- hdev->flags |= HCI_UP;
+- hci_notify(hdev, HCI_DEV_UP);
+- } else {
+- /* Init failed, cleanup */
+- tasklet_kill(&hdev->rx_task);
+- tasklet_kill(&hdev->tx_task);
+- tasklet_kill(&hdev->cmd_task);
++struct inquiry_entry *inquiry_cache_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr)
++{
++ struct inquiry_cache *cache = &hdev->inq_cache;
++ struct inquiry_entry *e;
+
+- skb_queue_purge(&hdev->cmd_q);
+- skb_queue_purge(&hdev->rx_q);
++ BT_DBG("cache %p, %s", cache, batostr(bdaddr));
+
+- if (hdev->flush)
+- hdev->flush(hdev);
++ for (e = cache->list; e; e = e->next)
++ if (!bacmp(&e->info.bdaddr, bdaddr))
++ break;
++ return e;
++}
+
+- if (hdev->sent_cmd) {
+- kfree_skb(hdev->sent_cmd);
+- hdev->sent_cmd = NULL;
+- }
++void inquiry_cache_update(struct hci_dev *hdev, inquiry_info *info)
++{
++ struct inquiry_cache *cache = &hdev->inq_cache;
++ struct inquiry_entry *e;
+
+- hdev->close(hdev);
+- }
++ BT_DBG("cache %p, %s", cache, batostr(&info->bdaddr));
+
+-done:
+- hci_req_unlock(hdev);
+- hci_dev_put(hdev);
++ if (!(e = inquiry_cache_lookup(hdev, &info->bdaddr))) {
++ /* Entry not in the cache. Add new one. */
++ if (!(e = kmalloc(sizeof(struct inquiry_entry), GFP_ATOMIC)))
++ return;
++ memset(e, 0, sizeof(struct inquiry_entry));
++ e->next = cache->list;
++ cache->list = e;
++ }
+
+- return ret;
++ memcpy(&e->info, info, sizeof(inquiry_info));
++ e->timestamp = jiffies;
++ cache->timestamp = jiffies;
+ }
+
+-int hci_dev_close(__u16 dev)
++int inquiry_cache_dump(struct hci_dev *hdev, int num, __u8 *buf)
+ {
+- struct hci_dev *hdev;
+-
+- if (!(hdev = hci_dev_get(dev)))
+- return -ENODEV;
++ struct inquiry_cache *cache = &hdev->inq_cache;
++ inquiry_info *info = (inquiry_info *) buf;
++ struct inquiry_entry *e;
++ int copied = 0;
+
+- DBG("%s %p", hdev->name, hdev);
++ for (e = cache->list; e && copied < num; e = e->next, copied++)
++ memcpy(info++, &e->info, sizeof(inquiry_info));
+
+- hci_req_cancel(hdev, ENODEV);
+- hci_req_lock(hdev);
++ BT_DBG("cache %p, copied %d", cache, copied);
++ return copied;
++}
+
+- if (!(hdev->flags & HCI_UP))
+- goto done;
++static void hci_inq_req(struct hci_dev *hdev, unsigned long opt)
++{
++ struct hci_inquiry_req *ir = (struct hci_inquiry_req *) opt;
++ inquiry_cp ic;
+
+- /* Kill RX and TX tasks */
+- tasklet_kill(&hdev->rx_task);
+- tasklet_kill(&hdev->tx_task);
++ BT_DBG("%s", hdev->name);
+
+- inquiry_cache_flush(&hdev->inq_cache);
++ if (test_bit(HCI_INQUIRY, &hdev->flags))
++ return;
+
+- hci_conn_hash_flush(hdev);
++ /* Start Inquiry */
++ memcpy(&ic.lap, &ir->lap, 3);
++ ic.length = ir->length;
++ ic.num_rsp = ir->num_rsp;
++ hci_send_cmd(hdev, OGF_LINK_CTL, OCF_INQUIRY, INQUIRY_CP_SIZE, &ic);
++}
+
+- /* Clear flags */
+- hdev->flags &= HCI_SOCK;
+- hdev->flags |= HCI_NORMAL;
++int hci_inquiry(unsigned long arg)
++{
++ struct hci_inquiry_req ir;
++ struct hci_dev *hdev;
++ int err = 0, do_inquiry = 0, max_rsp;
++ long timeo;
++ __u8 *buf, *ptr;
+
++ ptr = (void *) arg;
++ if (copy_from_user(&ir, ptr, sizeof(ir)))
++ return -EFAULT;
++
++ if (!(hdev = hci_dev_get(ir.dev_id)))
++ return -ENODEV;
++
++ hci_dev_lock_bh(hdev);
++ if (inquiry_cache_age(hdev) > INQUIRY_CACHE_AGE_MAX ||
++ inquiry_cache_empty(hdev) ||
++ ir.flags & IREQ_CACHE_FLUSH) {
++ inquiry_cache_flush(hdev);
++ do_inquiry = 1;
++ }
++ hci_dev_unlock_bh(hdev);
++
++ timeo = ir.length * 2 * HZ;
++ if (do_inquiry && (err = hci_request(hdev, hci_inq_req, (unsigned long)&ir, timeo)) < 0)
++ goto done;
++
++ /* for unlimited number of responses we will use buffer with 255 entries */
++ max_rsp = (ir.num_rsp == 0) ? 255 : ir.num_rsp;
++
++ /* cache_dump can't sleep. Therefore we allocate temp buffer and then
++ * copy it to the user space.
++ */
++ if (!(buf = kmalloc(sizeof(inquiry_info) * max_rsp, GFP_KERNEL))) {
++ err = -ENOMEM;
++ goto done;
++ }
++
++ hci_dev_lock_bh(hdev);
++ ir.num_rsp = inquiry_cache_dump(hdev, max_rsp, buf);
++ hci_dev_unlock_bh(hdev);
++
++ BT_DBG("num_rsp %d", ir.num_rsp);
++
++ if (!verify_area(VERIFY_WRITE, ptr, sizeof(ir) +
++ (sizeof(inquiry_info) * ir.num_rsp))) {
++ copy_to_user(ptr, &ir, sizeof(ir));
++ ptr += sizeof(ir);
++ copy_to_user(ptr, buf, sizeof(inquiry_info) * ir.num_rsp);
++ } else
++ err = -EFAULT;
++
++ kfree(buf);
++
++done:
++ hci_dev_put(hdev);
++ return err;
++}
++
++/* ---- HCI ioctl helpers ---- */
++
++int hci_dev_open(__u16 dev)
++{
++ struct hci_dev *hdev;
++ int ret = 0;
++
++ if (!(hdev = hci_dev_get(dev)))
++ return -ENODEV;
++
++ BT_DBG("%s %p", hdev->name, hdev);
++
++ hci_req_lock(hdev);
++
++ if (test_bit(HCI_UP, &hdev->flags)) {
++ ret = -EALREADY;
++ goto done;
++ }
++
++ if (hdev->open(hdev)) {
++ ret = -EIO;
++ goto done;
++ }
++
++ if (!test_bit(HCI_RAW, &hdev->flags)) {
++ atomic_set(&hdev->cmd_cnt, 1);
++ set_bit(HCI_INIT, &hdev->flags);
++
++ //__hci_request(hdev, hci_reset_req, 0, HZ);
++ ret = __hci_request(hdev, hci_init_req, 0, HCI_INIT_TIMEOUT);
++
++ clear_bit(HCI_INIT, &hdev->flags);
++ }
++
++ if (!ret) {
++ set_bit(HCI_UP, &hdev->flags);
++ hci_notify(hdev, HCI_DEV_UP);
++ } else {
++ /* Init failed, cleanup */
++ tasklet_kill(&hdev->rx_task);
++ tasklet_kill(&hdev->tx_task);
++ tasklet_kill(&hdev->cmd_task);
++
++ skb_queue_purge(&hdev->cmd_q);
++ skb_queue_purge(&hdev->rx_q);
++
++ if (hdev->flush)
++ hdev->flush(hdev);
++
++ if (hdev->sent_cmd) {
++ kfree_skb(hdev->sent_cmd);
++ hdev->sent_cmd = NULL;
++ }
++
++ hdev->close(hdev);
++ hdev->flags = 0;
++ }
++
++done:
++ hci_req_unlock(hdev);
++ hci_dev_put(hdev);
++ return ret;
++}
++
++static int hci_dev_do_close(struct hci_dev *hdev)
++{
++ BT_DBG("%s %p", hdev->name, hdev);
++
++ hci_req_cancel(hdev, ENODEV);
++ hci_req_lock(hdev);
++
++ if (!test_and_clear_bit(HCI_UP, &hdev->flags)) {
++ hci_req_unlock(hdev);
++ return 0;
++ }
++
++ /* Kill RX and TX tasks */
++ tasklet_kill(&hdev->rx_task);
++ tasklet_kill(&hdev->tx_task);
++
++ hci_dev_lock_bh(hdev);
++ inquiry_cache_flush(hdev);
++ hci_conn_hash_flush(hdev);
++ hci_dev_unlock_bh(hdev);
++
+ hci_notify(hdev, HCI_DEV_DOWN);
+
+ if (hdev->flush)
+@@ -586,9 +548,9 @@
+ /* Reset device */
+ skb_queue_purge(&hdev->cmd_q);
+ atomic_set(&hdev->cmd_cnt, 1);
+- hdev->flags |= HCI_INIT;
+- __hci_request(hdev, hci_reset_req, 0, HZ);
+- hdev->flags &= ~HCI_INIT;
++ set_bit(HCI_INIT, &hdev->flags);
++ __hci_request(hdev, hci_reset_req, 0, HZ/4);
++ clear_bit(HCI_INIT, &hdev->flags);
+
+ /* Kill cmd task */
+ tasklet_kill(&hdev->cmd_task);
+@@ -605,17 +567,28 @@
+ }
+
+ /* After this point our queues are empty
+- * and no tasks are scheduled.
+- */
++ * and no tasks are scheduled. */
+ hdev->close(hdev);
+
+-done:
+- hci_req_unlock(hdev);
+- hci_dev_put(hdev);
++ /* Clear flags */
++ hdev->flags = 0;
+
++ hci_req_unlock(hdev);
+ return 0;
+ }
+
++int hci_dev_close(__u16 dev)
++{
++ struct hci_dev *hdev;
++ int err;
++
++ if (!(hdev = hci_dev_get(dev)))
++ return -ENODEV;
++ err = hci_dev_do_close(hdev);
++ hci_dev_put(hdev);
++ return err;
++}
++
+ int hci_dev_reset(__u16 dev)
+ {
+ struct hci_dev *hdev;
+@@ -627,16 +600,17 @@
+ hci_req_lock(hdev);
+ tasklet_disable(&hdev->tx_task);
+
+- if (!(hdev->flags & HCI_UP))
++ if (!test_bit(HCI_UP, &hdev->flags))
+ goto done;
+
+ /* Drop queues */
+ skb_queue_purge(&hdev->rx_q);
+ skb_queue_purge(&hdev->cmd_q);
+
+- inquiry_cache_flush(&hdev->inq_cache);
+-
++ hci_dev_lock_bh(hdev);
++ inquiry_cache_flush(hdev);
+ hci_conn_hash_flush(hdev);
++ hci_dev_unlock_bh(hdev);
+
+ if (hdev->flush)
+ hdev->flush(hdev);
+@@ -650,7 +624,6 @@
+ tasklet_enable(&hdev->tx_task);
+ hci_req_unlock(hdev);
+ hci_dev_put(hdev);
+-
+ return ret;
+ }
+
+@@ -669,30 +642,11 @@
+ return ret;
+ }
+
+-int hci_dev_setauth(unsigned long arg)
+-{
+- struct hci_dev *hdev;
+- struct hci_dev_req dr;
+- int ret = 0;
+-
+- if (copy_from_user(&dr, (void *) arg, sizeof(dr)))
+- return -EFAULT;
+-
+- if (!(hdev = hci_dev_get(dr.dev_id)))
+- return -ENODEV;
+-
+- ret = hci_request(hdev, hci_auth_req, dr.dev_opt, HCI_INIT_TIMEOUT);
+-
+- hci_dev_put(hdev);
+-
+- return ret;
+-}
+-
+-int hci_dev_setscan(unsigned long arg)
++int hci_dev_cmd(unsigned int cmd, unsigned long arg)
+ {
+ struct hci_dev *hdev;
+ struct hci_dev_req dr;
+- int ret = 0;
++ int err = 0;
+
+ if (copy_from_user(&dr, (void *) arg, sizeof(dr)))
+ return -EFAULT;
+@@ -700,75 +654,105 @@
+ if (!(hdev = hci_dev_get(dr.dev_id)))
+ return -ENODEV;
+
+- ret = hci_request(hdev, hci_scan_req, dr.dev_opt, HCI_INIT_TIMEOUT);
+-
+- hci_dev_put(hdev);
++ switch (cmd) {
++ case HCISETAUTH:
++ err = hci_request(hdev, hci_auth_req, dr.dev_opt, HCI_INIT_TIMEOUT);
++ break;
+
+- return ret;
+-}
++ case HCISETENCRYPT:
++ if (!lmp_encrypt_capable(hdev)) {
++ err = -EOPNOTSUPP;
++ break;
++ }
+
+-int hci_dev_setptype(unsigned long arg)
+-{
+- struct hci_dev *hdev;
+- struct hci_dev_req dr;
+- int ret = 0;
++ if (!test_bit(HCI_AUTH, &hdev->flags)) {
++ /* Auth must be enabled first */
++ err = hci_request(hdev, hci_auth_req,
++ dr.dev_opt, HCI_INIT_TIMEOUT);
++ if (err)
++ break;
++ }
++
++ err = hci_request(hdev, hci_encrypt_req,
++ dr.dev_opt, HCI_INIT_TIMEOUT);
++ break;
++
++ case HCISETSCAN:
++ err = hci_request(hdev, hci_scan_req, dr.dev_opt, HCI_INIT_TIMEOUT);
++ break;
++
++ case HCISETPTYPE:
++ hdev->pkt_type = (__u16) dr.dev_opt;
++ break;
++
++ case HCISETLINKPOL:
++ hdev->link_policy = (__u16) dr.dev_opt;
++ break;
+
+- if (copy_from_user(&dr, (void *) arg, sizeof(dr)))
+- return -EFAULT;
++ case HCISETLINKMODE:
++ hdev->link_mode = ((__u16) dr.dev_opt) & (HCI_LM_MASTER | HCI_LM_ACCEPT);
++ break;
+
+- if (!(hdev = hci_dev_get(dr.dev_id)))
+- return -ENODEV;
++ case HCISETACLMTU:
++ hdev->acl_mtu = *((__u16 *)&dr.dev_opt + 1);
++ hdev->acl_pkts = *((__u16 *)&dr.dev_opt + 0);
++ break;
+
+- hdev->pkt_type = (__u16) dr.dev_opt;
++ case HCISETSCOMTU:
++ hdev->sco_mtu = *((__u16 *)&dr.dev_opt + 1);
++ hdev->sco_pkts = *((__u16 *)&dr.dev_opt + 0);
++ break;
+
++ default:
++ err = -EINVAL;
++ break;
++ }
+ hci_dev_put(hdev);
+-
+- return ret;
++ return err;
+ }
+
+-int hci_dev_list(unsigned long arg)
++int hci_get_dev_list(unsigned long arg)
+ {
+ struct hci_dev_list_req *dl;
+ struct hci_dev_req *dr;
+- struct hci_dev *hdev;
+- int i, n, size;
++ struct list_head *p;
++ int n = 0, size, err;
+ __u16 dev_num;
+
+ if (get_user(dev_num, (__u16 *) arg))
+ return -EFAULT;
+
+- /* Avoid long loop, overflow */
+- if (dev_num > 2048)
++ if (!dev_num || dev_num > (PAGE_SIZE * 2) / sizeof(*dr))
+ return -EINVAL;
+-
+- size = dev_num * sizeof(struct hci_dev_req) + sizeof(__u16);
+
+- if (verify_area(VERIFY_WRITE, (void *) arg, size))
+- return -EFAULT;
++ size = sizeof(*dl) + dev_num * sizeof(*dr);
+
+ if (!(dl = kmalloc(size, GFP_KERNEL)))
+ return -ENOMEM;
++
+ dr = dl->dev_req;
+
+- spin_lock_bh(&hdev_list_lock);
+- for (i = 0, n = 0; i < HCI_MAX_DEV && n < dev_num; i++) {
+- if ((hdev = hdev_list[i])) {
+- (dr + n)->dev_id = hdev->id;
+- (dr + n)->dev_opt = hdev->flags;
+- n++;
+- }
++ read_lock_bh(&hdev_list_lock);
++ list_for_each(p, &hdev_list) {
++ struct hci_dev *hdev;
++ hdev = list_entry(p, struct hci_dev, list);
++ (dr + n)->dev_id = hdev->id;
++ (dr + n)->dev_opt = hdev->flags;
++ if (++n >= dev_num)
++ break;
+ }
+- spin_unlock_bh(&hdev_list_lock);
++ read_unlock_bh(&hdev_list_lock);
+
+ dl->dev_num = n;
+- size = n * sizeof(struct hci_dev_req) + sizeof(__u16);
++ size = sizeof(*dl) + n * sizeof(*dr);
+
+- copy_to_user((void *) arg, dl, size);
++ err = copy_to_user((void *) arg, dl, size);
++ kfree(dl);
+
+- return 0;
++ return err ? -EFAULT : 0;
+ }
+
+-int hci_dev_info(unsigned long arg)
++int hci_get_dev_info(unsigned long arg)
+ {
+ struct hci_dev *hdev;
+ struct hci_dev_info di;
+@@ -786,9 +770,11 @@
+ di.flags = hdev->flags;
+ di.pkt_type = hdev->pkt_type;
+ di.acl_mtu = hdev->acl_mtu;
+- di.acl_max = hdev->acl_max;
++ di.acl_pkts = hdev->acl_pkts;
+ di.sco_mtu = hdev->sco_mtu;
+- di.sco_max = hdev->sco_max;
++ di.sco_pkts = hdev->sco_pkts;
++ di.link_policy = hdev->link_policy;
++ di.link_mode = hdev->link_mode;
+
+ memcpy(&di.stat, &hdev->stat, sizeof(di.stat));
+ memcpy(&di.features, &hdev->features, sizeof(di.features));
+@@ -801,258 +787,168 @@
+ return err;
+ }
+
+-__u32 hci_dev_setmode(struct hci_dev *hdev, __u32 mode)
+-{
+- __u32 omode = hdev->flags & HCI_MODE_MASK;
+-
+- hdev->flags &= ~HCI_MODE_MASK;
+- hdev->flags |= (mode & HCI_MODE_MASK);
+
+- return omode;
+-}
++/* ---- Interface to HCI drivers ---- */
+
+-__u32 hci_dev_getmode(struct hci_dev *hdev)
++/* Register HCI device */
++int hci_register_dev(struct hci_dev *hdev)
+ {
+- return hdev->flags & HCI_MODE_MASK;
+-}
++ struct list_head *head = &hdev_list, *p;
++ int id = 0;
+
+-int hci_conn_list(unsigned long arg)
+-{
+- struct hci_conn_list_req req, *cl;
+- struct hci_conn_info *ci;
+- struct hci_dev *hdev;
+- struct list_head *p;
+- int n = 0, size;
++ BT_DBG("%p name %s type %d", hdev, hdev->name, hdev->type);
+
+- if (copy_from_user(&req, (void *) arg, sizeof(req)))
+- return -EFAULT;
++ if (!hdev->open || !hdev->close || !hdev->destruct)
++ return -EINVAL;
+
+- if (!(hdev = hci_dev_get(req.dev_id)))
+- return -ENODEV;
++ write_lock_bh(&hdev_list_lock);
+
+- /* Set a limit to avoid overlong loops, and also numeric overflow - AC */
+- if(req.conn_num < 2048)
+- return -EINVAL;
++ /* Find first available device id */
++ list_for_each(p, &hdev_list) {
++ if (list_entry(p, struct hci_dev, list)->id != id)
++ break;
++ head = p; id++;
++ }
+
+- size = req.conn_num * sizeof(struct hci_conn_info) + sizeof(req);
++ sprintf(hdev->name, "hci%d", id);
++ hdev->id = id;
++ list_add(&hdev->list, head);
+
+- if (!(cl = kmalloc(size, GFP_KERNEL)))
+- return -ENOMEM;
+- ci = cl->conn_info;
+-
+- local_bh_disable();
+- conn_hash_lock(&hdev->conn_hash);
+- list_for_each(p, &hdev->conn_hash.list) {
+- register struct hci_conn *c;
+- c = list_entry(p, struct hci_conn, list);
++ atomic_set(&hdev->refcnt, 1);
++ spin_lock_init(&hdev->lock);
++
++ hdev->flags = 0;
++ hdev->pkt_type = (HCI_DM1 | HCI_DH1 | HCI_HV1);
++ hdev->link_mode = (HCI_LM_ACCEPT);
+
+- (ci + n)->handle = c->handle;
+- bacpy(&(ci + n)->bdaddr, &c->dst);
+- n++;
+- }
+- conn_hash_unlock(&hdev->conn_hash);
+- local_bh_enable();
+-
+- cl->dev_id = hdev->id;
+- cl->conn_num = n;
+- size = n * sizeof(struct hci_conn_info) + sizeof(req);
++ tasklet_init(&hdev->cmd_task, hci_cmd_task,(unsigned long) hdev);
++ tasklet_init(&hdev->rx_task, hci_rx_task, (unsigned long) hdev);
++ tasklet_init(&hdev->tx_task, hci_tx_task, (unsigned long) hdev);
+
+- hci_dev_put(hdev);
++ skb_queue_head_init(&hdev->rx_q);
++ skb_queue_head_init(&hdev->cmd_q);
++ skb_queue_head_init(&hdev->raw_q);
+
+- if(copy_to_user((void *) arg, cl, size))
+- return -EFAULT;
+- return 0;
+-}
++ init_waitqueue_head(&hdev->req_wait_q);
++ init_MUTEX(&hdev->req_lock);
+
+-int hci_inquiry(unsigned long arg)
+-{
+- struct inquiry_cache *cache;
+- struct hci_inquiry_req ir;
+- struct hci_dev *hdev;
+- int err = 0, do_inquiry = 0;
+- long timeo;
+- __u8 *buf, *ptr;
++ inquiry_cache_init(hdev);
+
+- ptr = (void *) arg;
+- if (copy_from_user(&ir, ptr, sizeof(ir)))
+- return -EFAULT;
++ conn_hash_init(hdev);
+
+- if (!(hdev = hci_dev_get(ir.dev_id)))
+- return -ENODEV;
++ memset(&hdev->stat, 0, sizeof(struct hci_dev_stats));
+
+- cache = &hdev->inq_cache;
++ atomic_set(&hdev->promisc, 0);
+
+- inquiry_cache_lock(cache);
+- if (inquiry_cache_age(cache) > INQUIRY_CACHE_AGE_MAX || ir.flags & IREQ_CACHE_FLUSH) {
+- inquiry_cache_flush(cache);
+- do_inquiry = 1;
+- }
+- inquiry_cache_unlock(cache);
++ MOD_INC_USE_COUNT;
+
+- /* Limit inquiry time, also avoid overflows */
++ write_unlock_bh(&hdev_list_lock);
+
+- if(ir.length > 2048 || ir.num_rsp > 2048)
+- {
+- err = -EINVAL;
+- goto done;
+- }
++ hci_notify(hdev, HCI_DEV_REG);
++ hci_run_hotplug(hdev->name, "register");
+
+- timeo = ir.length * 2 * HZ;
+- if (do_inquiry && (err = hci_request(hdev, hci_inq_req, (unsigned long)&ir, timeo)) < 0)
+- goto done;
++ return id;
++}
+
+- /* cache_dump can't sleep. Therefore we allocate temp buffer and then
+- * copy it to the user space.
+- */
+- if (!(buf = kmalloc(sizeof(inquiry_info) * ir.num_rsp, GFP_KERNEL))) {
+- err = -ENOMEM;
+- goto done;
+- }
+- ir.num_rsp = inquiry_cache_dump(cache, ir.num_rsp, buf);
++/* Unregister HCI device */
++int hci_unregister_dev(struct hci_dev *hdev)
++{
++ BT_DBG("%p name %s type %d", hdev, hdev->name, hdev->type);
+
+- DBG("num_rsp %d", ir.num_rsp);
++ write_lock_bh(&hdev_list_lock);
++ list_del(&hdev->list);
++ write_unlock_bh(&hdev_list_lock);
+
+- if (!verify_area(VERIFY_WRITE, ptr, sizeof(ir) + (sizeof(inquiry_info) * ir.num_rsp))) {
+- copy_to_user(ptr, &ir, sizeof(ir));
+- ptr += sizeof(ir);
+- copy_to_user(ptr, buf, sizeof(inquiry_info) * ir.num_rsp);
+- } else
+- err = -EFAULT;
++ hci_dev_do_close(hdev);
+
+- kfree(buf);
++ hci_notify(hdev, HCI_DEV_UNREG);
++ hci_run_hotplug(hdev->name, "unregister");
+
+-done:
+ hci_dev_put(hdev);
+
+- return err;
++ MOD_DEC_USE_COUNT;
++ return 0;
+ }
+
+-/* Interface to HCI drivers */
+-
+-/* Register HCI device */
+-int hci_register_dev(struct hci_dev *hdev)
++/* Suspend HCI device */
++int hci_suspend_dev(struct hci_dev *hdev)
+ {
+- int i;
++ hci_notify(hdev, HCI_DEV_SUSPEND);
++ hci_run_hotplug(hdev->name, "suspend");
++ return 0;
++}
+
+- DBG("%p name %s type %d", hdev, hdev->name, hdev->type);
++/* Resume HCI device */
++int hci_resume_dev(struct hci_dev *hdev)
++{
++ hci_notify(hdev, HCI_DEV_RESUME);
++ hci_run_hotplug(hdev->name, "resume");
++ return 0;
++}
+
+- /* Find free slot */
+- spin_lock_bh(&hdev_list_lock);
+- for (i = 0; i < HCI_MAX_DEV; i++) {
+- if (!hdev_list[i]) {
+- hdev_list[i] = hdev;
+-
+- sprintf(hdev->name, "hci%d", i);
+- atomic_set(&hdev->refcnt, 0);
+- hdev->id = i;
+- hdev->flags = HCI_NORMAL;
+-
+- hdev->pkt_type = (HCI_DM1 | HCI_DH1);
+-
+- tasklet_init(&hdev->cmd_task, hci_cmd_task, (unsigned long) hdev);
+- tasklet_init(&hdev->rx_task, hci_rx_task, (unsigned long) hdev);
+- tasklet_init(&hdev->tx_task, hci_tx_task, (unsigned long) hdev);
+-
+- skb_queue_head_init(&hdev->rx_q);
+- skb_queue_head_init(&hdev->cmd_q);
+- skb_queue_head_init(&hdev->raw_q);
+-
+- init_waitqueue_head(&hdev->req_wait_q);
+- init_MUTEX(&hdev->req_lock);
+-
+- inquiry_cache_init(&hdev->inq_cache);
+-
+- conn_hash_init(&hdev->conn_hash);
+-
+- memset(&hdev->stat, 0, sizeof(struct hci_dev_stats));
+-
+- hci_notify(hdev, HCI_DEV_REG);
+-
+- MOD_INC_USE_COUNT;
+- break;
+- }
+- }
+- spin_unlock_bh(&hdev_list_lock);
+-
+- return (i == HCI_MAX_DEV) ? -1 : i;
+-}
+-
+-/* Unregister HCI device */
+-int hci_unregister_dev(struct hci_dev *hdev)
++/* Receive frame from HCI drivers */
++int hci_recv_frame(struct sk_buff *skb)
+ {
+- int i;
+-
+- DBG("%p name %s type %d", hdev, hdev->name, hdev->type);
+-
+- if (hdev->flags & HCI_UP)
+- hci_dev_close(hdev->id);
++ struct hci_dev *hdev = (struct hci_dev *) skb->dev;
+
+- /* Find device slot */
+- spin_lock(&hdev_list_lock);
+- for (i = 0; i < HCI_MAX_DEV; i++) {
+- if (hdev_list[i] == hdev) {
+- hdev_list[i] = NULL;
+- MOD_DEC_USE_COUNT;
+- break;
+- }
++ if (!hdev || (!test_bit(HCI_UP, &hdev->flags) &&
++ !test_bit(HCI_INIT, &hdev->flags)) ) {
++ kfree_skb(skb);
++ return -1;
+ }
+- spin_unlock(&hdev_list_lock);
+
+- hci_notify(hdev, HCI_DEV_UNREG);
+-
+- /* Sleep while device is in use */
+- while (atomic_read(&hdev->refcnt)) {
+- int sleep_cnt = 100;
++ BT_DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
+
+- DBG("%s sleeping on lock %d", hdev->name, atomic_read(&hdev->refcnt));
++ /* Incomming skb */
++ bluez_cb(skb)->incomming = 1;
+
+- sleep_on_timeout(&hdev->req_wait_q, HZ*10);
+- if (!(--sleep_cnt))
+- break;
+- }
++ /* Time stamp */
++ do_gettimeofday(&skb->stamp);
+
++ /* Queue frame for rx task */
++ skb_queue_tail(&hdev->rx_q, skb);
++ hci_sched_rx(hdev);
+ return 0;
+ }
+
+-/* Interface to upper protocols */
++/* ---- Interface to upper protocols ---- */
+
+ /* Register/Unregister protocols.
+- * hci_task_lock is used to ensure that no tasks are running.
+- */
+-int hci_register_proto(struct hci_proto *hproto)
++ * hci_task_lock is used to ensure that no tasks are running. */
++int hci_register_proto(struct hci_proto *hp)
+ {
+ int err = 0;
+
+- DBG("%p name %s", hproto, hproto->name);
++ BT_DBG("%p name %s id %d", hp, hp->name, hp->id);
+
+- if (hproto->id >= HCI_MAX_PROTO)
++ if (hp->id >= HCI_MAX_PROTO)
+ return -EINVAL;
+
+ write_lock_bh(&hci_task_lock);
+
+- if (!hproto_list[hproto->id])
+- hproto_list[hproto->id] = hproto;
++ if (!hci_proto[hp->id])
++ hci_proto[hp->id] = hp;
+ else
+- err = -1;
++ err = -EEXIST;
+
+ write_unlock_bh(&hci_task_lock);
+
+ return err;
+ }
+
+-int hci_unregister_proto(struct hci_proto *hproto)
++int hci_unregister_proto(struct hci_proto *hp)
+ {
+ int err = 0;
+
+- DBG("%p name %s", hproto, hproto->name);
++ BT_DBG("%p name %s id %d", hp, hp->name, hp->id);
+
+- if (hproto->id > HCI_MAX_PROTO)
++ if (hp->id >= HCI_MAX_PROTO)
+ return -EINVAL;
+
+ write_lock_bh(&hci_task_lock);
+
+- if (hproto_list[hproto->id])
+- hproto_list[hproto->id] = NULL;
++ if (hci_proto[hp->id])
++ hci_proto[hp->id] = NULL;
+ else
+ err = -ENOENT;
+
+@@ -1070,10 +966,14 @@
+ return -ENODEV;
+ }
+
+- DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
++ BT_DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
++
++ if (atomic_read(&hdev->promisc)) {
++ /* Time stamp */
++ do_gettimeofday(&skb->stamp);
+
+- if (hdev->flags & HCI_SOCK)
+ hci_send_to_sock(hdev, skb);
++ }
+
+ /* Get rid of skb owner, prior to sending to the driver. */
+ skb_orphan(skb);
+@@ -1081,128 +981,6 @@
+ return hdev->send(skb);
+ }
+
+-/* Connection scheduler */
+-static inline struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type, int *quote)
+-{
+- struct conn_hash *h = &hdev->conn_hash;
+- struct hci_conn *conn = NULL;
+- int num = 0, min = 0xffff;
+- struct list_head *p;
+-
+- conn_hash_lock(h);
+- list_for_each(p, &h->list) {
+- register struct hci_conn *c;
+-
+- c = list_entry(p, struct hci_conn, list);
+-
+- if (c->type != type || skb_queue_empty(&c->data_q))
+- continue;
+- num++;
+-
+- if (c->sent < min) {
+- min = c->sent;
+- conn = c;
+- }
+- }
+- conn_hash_unlock(h);
+-
+- if (conn) {
+- int q = hdev->acl_cnt / num;
+- *quote = q ? q : 1;
+- } else
+- *quote = 0;
+-
+- DBG("conn %p quote %d", conn, *quote);
+-
+- return conn;
+-}
+-
+-static inline void hci_sched_acl(struct hci_dev *hdev)
+-{
+- struct hci_conn *conn;
+- struct sk_buff *skb;
+- int quote;
+-
+- DBG("%s", hdev->name);
+-
+- while (hdev->acl_cnt && (conn = hci_low_sent(hdev, ACL_LINK, &quote))) {
+- while (quote && (skb = skb_dequeue(&conn->data_q))) {
+- DBG("skb %p len %d", skb, skb->len);
+-
+- hci_send_frame(skb);
+-
+- conn->sent++;
+- hdev->acl_cnt--;
+- quote--;
+- }
+- }
+-}
+-
+-/* Schedule SCO */
+-static inline void hci_sched_sco(struct hci_dev *hdev)
+-{
+- /* FIXME: For now we queue SCO packets to the raw queue
+-
+- while (hdev->sco_cnt && (skb = skb_dequeue(&conn->data_q))) {
+- hci_send_frame(skb);
+- conn->sco_sent++;
+- hdev->sco_cnt--;
+- }
+- */
+-}
+-
+-/* Get data from the previously sent command */
+-static void * hci_sent_cmd_data(struct hci_dev *hdev, __u16 ogf, __u16 ocf)
+-{
+- hci_command_hdr *hc;
+-
+- if (!hdev->sent_cmd)
+- return NULL;
+-
+- hc = (void *) hdev->sent_cmd->data;
+-
+- if (hc->opcode != __cpu_to_le16(cmd_opcode_pack(ogf, ocf)))
+- return NULL;
+-
+- DBG("%s ogf 0x%x ocf 0x%x", hdev->name, ogf, ocf);
+-
+- return hdev->sent_cmd->data + HCI_COMMAND_HDR_SIZE;
+-}
+-
+-/* Send raw HCI frame */
+-int hci_send_raw(struct sk_buff *skb)
+-{
+- struct hci_dev *hdev = (struct hci_dev *) skb->dev;
+-
+- if (!hdev) {
+- kfree_skb(skb);
+- return -ENODEV;
+- }
+-
+- DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
+-
+- if (hdev->flags & HCI_NORMAL) {
+- /* Queue frame according it's type */
+- switch (skb->pkt_type) {
+- case HCI_COMMAND_PKT:
+- skb_queue_tail(&hdev->cmd_q, skb);
+- hci_sched_cmd(hdev);
+- return 0;
+-
+- case HCI_ACLDATA_PKT:
+- case HCI_SCODATA_PKT:
+- /* FIXME:
+- * Check header here and queue to apropriate connection.
+- */
+- break;
+- }
+- }
+-
+- skb_queue_tail(&hdev->raw_q, skb);
+- hci_sched_tx(hdev);
+- return 0;
+-}
+-
+ /* Send HCI command */
+ int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void *param)
+ {
+@@ -1210,10 +988,10 @@
+ hci_command_hdr *hc;
+ struct sk_buff *skb;
+
+- DBG("%s ogf 0x%x ocf 0x%x plen %d", hdev->name, ogf, ocf, plen);
++ BT_DBG("%s ogf 0x%x ocf 0x%x plen %d", hdev->name, ogf, ocf, plen);
+
+ if (!(skb = bluez_skb_alloc(len, GFP_ATOMIC))) {
+- ERR("%s Can't allocate memory for HCI command", hdev->name);
++ BT_ERR("%s Can't allocate memory for HCI command", hdev->name);
+ return -ENOMEM;
+ }
+
+@@ -1224,7 +1002,7 @@
+ if (plen)
+ memcpy(skb_put(skb, plen), param, plen);
+
+- DBG("skb len %d", skb->len);
++ BT_DBG("skb len %d", skb->len);
+
+ skb->pkt_type = HCI_COMMAND_PKT;
+ skb->dev = (void *) hdev;
+@@ -1234,10 +1012,28 @@
+ return 0;
+ }
+
++/* Get data from the previously sent command */
++void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 ogf, __u16 ocf)
++{
++ hci_command_hdr *hc;
++
++ if (!hdev->sent_cmd)
++ return NULL;
++
++ hc = (void *) hdev->sent_cmd->data;
++
++ if (hc->opcode != __cpu_to_le16(cmd_opcode_pack(ogf, ocf)))
++ return NULL;
++
++ BT_DBG("%s ogf 0x%x ocf 0x%x", hdev->name, ogf, ocf);
++
++ return hdev->sent_cmd->data + HCI_COMMAND_HDR_SIZE;
++}
++
+ /* Send ACL data */
+ static void hci_add_acl_hdr(struct sk_buff *skb, __u16 handle, __u16 flags)
+ {
+- int len = skb->len;
++ int len = skb->len;
+ hci_acl_hdr *ah;
+
+ ah = (hci_acl_hdr *) skb_push(skb, HCI_ACL_HDR_SIZE);
+@@ -1252,7 +1048,7 @@
+ struct hci_dev *hdev = conn->hdev;
+ struct sk_buff *list;
+
+- DBG("%s conn %p flags 0x%x", hdev->name, conn, flags);
++ BT_DBG("%s conn %p flags 0x%x", hdev->name, conn, flags);
+
+ skb->dev = (void *) hdev;
+ skb->pkt_type = HCI_ACLDATA_PKT;
+@@ -1260,12 +1056,12 @@
+
+ if (!(list = skb_shinfo(skb)->frag_list)) {
+ /* Non fragmented */
+- DBG("%s nonfrag skb %p len %d", hdev->name, skb, skb->len);
++ BT_DBG("%s nonfrag skb %p len %d", hdev->name, skb, skb->len);
+
+ skb_queue_tail(&conn->data_q, skb);
+ } else {
+ /* Fragmented */
+- DBG("%s frag %p len %d", hdev->name, skb, skb->len);
++ BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
+
+ skb_shinfo(skb)->frag_list = NULL;
+
+@@ -1280,7 +1076,7 @@
+ skb->pkt_type = HCI_ACLDATA_PKT;
+ hci_add_acl_hdr(skb, conn->handle, flags | ACL_CONT);
+
+- DBG("%s frag %p len %d", hdev->name, skb, skb->len);
++ BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
+
+ __skb_queue_tail(&conn->data_q, skb);
+ } while (list);
+@@ -1298,7 +1094,7 @@
+ struct hci_dev *hdev = conn->hdev;
+ hci_sco_hdr hs;
+
+- DBG("%s len %d", hdev->name, skb->len);
++ BT_DBG("%s len %d", hdev->name, skb->len);
+
+ if (skb->len > hdev->sco_mtu) {
+ kfree_skb(skb);
+@@ -1315,544 +1111,136 @@
+ skb->pkt_type = HCI_SCODATA_PKT;
+ skb_queue_tail(&conn->data_q, skb);
+ hci_sched_tx(hdev);
+-
+ return 0;
+ }
+
+-/* Handle HCI Event packets */
+-
+-/* Command Complete OGF LINK_CTL */
+-static void hci_cc_link_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
+-{
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- default:
+- DBG("%s Command complete: ogf LINK_CTL ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Command Complete OGF LINK_POLICY */
+-static void hci_cc_link_policy(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
+-{
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- default:
+- DBG("%s: Command complete: ogf LINK_POLICY ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Command Complete OGF HOST_CTL */
+-static void hci_cc_host_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
+-{
+- __u8 status, param;
+- void *sent;
+-
+-
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- case OCF_RESET:
+- status = *((__u8 *) skb->data);
+-
+- hci_req_complete(hdev, status);
+- break;
+-
+- case OCF_SET_EVENT_FLT:
+- status = *((__u8 *) skb->data);
+-
+- if (status) {
+- DBG("%s SET_EVENT_FLT failed %d", hdev->name, status);
+- } else {
+- DBG("%s SET_EVENT_FLT succeseful", hdev->name);
+- }
+- break;
+-
+- case OCF_WRITE_AUTH_ENABLE:
+- if (!(sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_AUTH_ENABLE)))
+- break;
+-
+- status = *((__u8 *) skb->data);
+- param = *((__u8 *) sent);
+-
+- if (!status) {
+- if (param == AUTH_ENABLED)
+- hdev->flags |= HCI_AUTH;
+- else
+- hdev->flags &= ~HCI_AUTH;
+- }
+- hci_req_complete(hdev, status);
+- break;
+-
+- case OCF_WRITE_CA_TIMEOUT:
+- status = *((__u8 *) skb->data);
+-
+- if (status) {
+- DBG("%s OCF_WRITE_CA_TIMEOUT failed %d", hdev->name, status);
+- } else {
+- DBG("%s OCF_WRITE_CA_TIMEOUT succeseful", hdev->name);
+- }
+- break;
+-
+- case OCF_WRITE_PG_TIMEOUT:
+- status = *((__u8 *) skb->data);
+-
+- if (status) {
+- DBG("%s OCF_WRITE_PG_TIMEOUT failed %d", hdev->name, status);
+- } else {
+- DBG("%s: OCF_WRITE_PG_TIMEOUT succeseful", hdev->name);
+- }
+- break;
+-
+- case OCF_WRITE_SCAN_ENABLE:
+- if (!(sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE)))
+- break;
+- status = *((__u8 *) skb->data);
+- param = *((__u8 *) sent);
+-
+- DBG("param 0x%x", param);
+-
+- if (!status) {
+- switch (param) {
+- case IS_ENA_PS_ENA:
+- hdev->flags |= HCI_PSCAN | HCI_ISCAN;
+- break;
+-
+- case IS_ENA_PS_DIS:
+- hdev->flags &= ~HCI_PSCAN;
+- hdev->flags |= HCI_ISCAN;
+- break;
++/* ---- HCI TX task (outgoing data) ---- */
+
+- case IS_DIS_PS_ENA:
+- hdev->flags &= ~HCI_ISCAN;
+- hdev->flags |= HCI_PSCAN;
+- break;
+-
+- default:
+- hdev->flags &= ~(HCI_ISCAN | HCI_PSCAN);
+- break;
+- };
+- }
+- hci_req_complete(hdev, status);
+- break;
+-
+- default:
+- DBG("%s Command complete: ogf HOST_CTL ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Command Complete OGF INFO_PARAM */
+-static void hci_cc_info_param(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
++/* HCI Connection scheduler */
++static inline struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type, int *quote)
+ {
+- read_local_features_rp *lf;
+- read_buffer_size_rp *bs;
+- read_bd_addr_rp *ba;
+-
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- case OCF_READ_LOCAL_FEATURES:
+- lf = (read_local_features_rp *) skb->data;
+-
+- if (lf->status) {
+- DBG("%s READ_LOCAL_FEATURES failed %d", hdev->name, lf->status);
+- break;
+- }
+-
+- memcpy(hdev->features, lf->features, sizeof(hdev->features));
+-
+- /* Adjust default settings according to features
+- * supported by device. */
+- if (hdev->features[0] & LMP_3SLOT)
+- hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
+-
+- if (hdev->features[0] & LMP_5SLOT)
+- hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
+-
+- DBG("%s: features 0x%x 0x%x 0x%x", hdev->name, lf->features[0], lf->features[1], lf->features[2]);
+-
+- break;
+-
+- case OCF_READ_BUFFER_SIZE:
+- bs = (read_buffer_size_rp *) skb->data;
+-
+- if (bs->status) {
+- DBG("%s READ_BUFFER_SIZE failed %d", hdev->name, bs->status);
+- break;
+- }
+-
+- hdev->acl_mtu = __le16_to_cpu(bs->acl_mtu);
+- hdev->sco_mtu = bs->sco_mtu;
+- hdev->acl_max = hdev->acl_cnt = __le16_to_cpu(bs->acl_max_pkt);
+- hdev->sco_max = hdev->sco_cnt = __le16_to_cpu(bs->sco_max_pkt);
+-
+- DBG("%s mtu: acl %d, sco %d max_pkt: acl %d, sco %d", hdev->name,
+- hdev->acl_mtu, hdev->sco_mtu, hdev->acl_max, hdev->sco_max);
++ struct conn_hash *h = &hdev->conn_hash;
++ struct hci_conn *conn = NULL;
++ int num = 0, min = ~0;
++ struct list_head *p;
+
+- break;
++ /* We don't have to lock device here. Connections are always
++ * added and removed with TX task disabled. */
++ list_for_each(p, &h->list) {
++ struct hci_conn *c;
++ c = list_entry(p, struct hci_conn, list);
+
+- case OCF_READ_BD_ADDR:
+- ba = (read_bd_addr_rp *) skb->data;
++ if (c->type != type || c->state != BT_CONNECTED
++ || skb_queue_empty(&c->data_q))
++ continue;
++ num++;
+
+- if (!ba->status) {
+- bacpy(&hdev->bdaddr, &ba->bdaddr);
+- } else {
+- DBG("%s: READ_BD_ADDR failed %d", hdev->name, ba->status);
++ if (c->sent < min) {
++ min = c->sent;
++ conn = c;
+ }
++ }
+
+- hci_req_complete(hdev, ba->status);
+- break;
++ if (conn) {
++ int cnt = (type == ACL_LINK ? hdev->acl_cnt : hdev->sco_cnt);
++ int q = cnt / num;
++ *quote = q ? q : 1;
++ } else
++ *quote = 0;
+
+- default:
+- DBG("%s Command complete: ogf INFO_PARAM ocf %x", hdev->name, ocf);
+- break;
+- };
++ BT_DBG("conn %p quote %d", conn, *quote);
++ return conn;
+ }
+
+-/* Command Status OGF LINK_CTL */
+-static void hci_cs_link_ctl(struct hci_dev *hdev, __u16 ocf, __u8 status)
++static inline void hci_acl_tx_to(struct hci_dev *hdev)
+ {
+- struct hci_proto * hp;
+-
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- case OCF_CREATE_CONN:
+- if (status) {
+- create_conn_cp *cc = hci_sent_cmd_data(hdev, OGF_LINK_CTL, OCF_CREATE_CONN);
+-
+- if (!cc)
+- break;
+-
+- DBG("%s Create connection error: status 0x%x %s", hdev->name,
+- status, batostr(&cc->bdaddr));
++ struct conn_hash *h = &hdev->conn_hash;
++ struct list_head *p;
++ struct hci_conn *c;
+
+- /* Notify upper protocols */
+- if ((hp = GET_HPROTO(HCI_PROTO_L2CAP)) && hp->connect_cfm) {
+- tasklet_disable(&hdev->tx_task);
+- hp->connect_cfm(hdev, &cc->bdaddr, status, NULL);
+- tasklet_enable(&hdev->tx_task);
+- }
+- }
+- break;
++ BT_ERR("%s ACL tx timeout", hdev->name);
+
+- case OCF_INQUIRY:
+- if (status) {
+- DBG("%s Inquiry error: status 0x%x", hdev->name, status);
+- hci_req_complete(hdev, status);
++ /* Kill stalled connections */
++ list_for_each(p, &h->list) {
++ c = list_entry(p, struct hci_conn, list);
++ if (c->type == ACL_LINK && c->sent) {
++ BT_ERR("%s killing stalled ACL connection %s",
++ hdev->name, batostr(&c->dst));
++ hci_acl_disconn(c, 0x13);
+ }
+- break;
+-
+- default:
+- DBG("%s Command status: ogf LINK_CTL ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Command Status OGF LINK_POLICY */
+-static void hci_cs_link_policy(struct hci_dev *hdev, __u16 ocf, __u8 status)
+-{
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- default:
+- DBG("%s Command status: ogf HOST_POLICY ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Command Status OGF HOST_CTL */
+-static void hci_cs_host_ctl(struct hci_dev *hdev, __u16 ocf, __u8 status)
+-{
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- default:
+- DBG("%s Command status: ogf HOST_CTL ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Command Status OGF INFO_PARAM */
+-static void hci_cs_info_param(struct hci_dev *hdev, __u16 ocf, __u8 status)
+-{
+- DBG("%s: hci_cs_info_param: ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- default:
+- DBG("%s Command status: ogf INFO_PARAM ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Inquiry Complete */
+-static void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
+-{
+- __u8 status = *((__u8 *) skb->data);
+-
+- DBG("%s status %d", hdev->name, status);
+-
+- hci_req_complete(hdev, status);
++ }
+ }
+
+-/* Inquiry Result */
+-static void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
++static inline void hci_sched_acl(struct hci_dev *hdev)
+ {
+- inquiry_info *info = (inquiry_info *) (skb->data + 1);
+- int num_rsp = *((__u8 *) skb->data);
+-
+- DBG("%s num_rsp %d", hdev->name, num_rsp);
++ struct hci_conn *conn;
++ struct sk_buff *skb;
++ int quote;
+
+- for (; num_rsp; num_rsp--)
+- inquiry_cache_update(&hdev->inq_cache, info++);
+-}
++ BT_DBG("%s", hdev->name);
+
+-/* Connect Request */
+-static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
+-{
+- evt_conn_request *cr = (evt_conn_request *) skb->data;
+- struct hci_proto *hp;
+- accept_conn_req_cp ac;
+- int accept = 0;
++ /* ACL tx timeout must be longer than maximum
++ * link supervision timeout (40.9 seconds) */
++ if (!hdev->acl_cnt && (jiffies - hdev->acl_last_tx) > (HZ * 45))
++ hci_acl_tx_to(hdev);
+
+- DBG("%s Connection request: %s type 0x%x", hdev->name, batostr(&cr->bdaddr), cr->link_type);
++ while (hdev->acl_cnt && (conn = hci_low_sent(hdev, ACL_LINK, &quote))) {
++ while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
++ BT_DBG("skb %p len %d", skb, skb->len);
++ hci_send_frame(skb);
++ hdev->acl_last_tx = jiffies;
+
+- /* Notify upper protocols */
+- if (cr->link_type == ACL_LINK) {
+- /* ACL link notify L2CAP */
+- if ((hp = GET_HPROTO(HCI_PROTO_L2CAP)) && hp->connect_ind) {
+- tasklet_disable(&hdev->tx_task);
+- accept = hp->connect_ind(hdev, &cr->bdaddr);
+- tasklet_enable(&hdev->tx_task);
++ hdev->acl_cnt--;
++ conn->sent++;
+ }
+- } else {
+- /* SCO link (no notification) */
+- /* FIXME: Should be accept it here or let the requester (app) accept it ? */
+- accept = 1;
+- }
+-
+- if (accept) {
+- /* Connection accepted by upper layer */
+- bacpy(&ac.bdaddr, &cr->bdaddr);
+- ac.role = 0x01; /* Remain slave */
+- hci_send_cmd(hdev, OGF_LINK_CTL, OCF_ACCEPT_CONN_REQ, ACCEPT_CONN_REQ_CP_SIZE, &ac);
+- } else {
+- /* Connection rejected by upper layer */
+- /* FIXME:
+- * Should we use HCI reject here ?
+- */
+- return;
+ }
+ }
+
+-/* Connect Complete */
+-static void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
++/* Schedule SCO */
++static inline void hci_sched_sco(struct hci_dev *hdev)
+ {
+- evt_conn_complete *cc = (evt_conn_complete *) skb->data;
+- struct hci_conn *conn = NULL;
+- struct hci_proto *hp;
+-
+- DBG("%s", hdev->name);
+-
+- tasklet_disable(&hdev->tx_task);
+-
+- if (!cc->status)
+- conn = hci_conn_add(hdev, __le16_to_cpu(cc->handle), cc->link_type, &cc->bdaddr);
++ struct hci_conn *conn;
++ struct sk_buff *skb;
++ int quote;
+
+- /* Notify upper protocols */
+- if (cc->link_type == ACL_LINK) {
+- /* ACL link notify L2CAP layer */
+- if ((hp = GET_HPROTO(HCI_PROTO_L2CAP)) && hp->connect_cfm)
+- hp->connect_cfm(hdev, &cc->bdaddr, cc->status, conn);
+- } else {
+- /* SCO link (no notification) */
+- }
++ BT_DBG("%s", hdev->name);
+
+- tasklet_enable(&hdev->tx_task);
+-}
++ while (hdev->sco_cnt && (conn = hci_low_sent(hdev, SCO_LINK, &quote))) {
++ while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
++ BT_DBG("skb %p len %d", skb, skb->len);
++ hci_send_frame(skb);
+
+-/* Disconnect Complete */
+-static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
+-{
+- evt_disconn_complete *dc = (evt_disconn_complete *) skb->data;
+- struct hci_conn *conn = NULL;
+- struct hci_proto *hp;
+- __u16 handle = __le16_to_cpu(dc->handle);
+-
+- DBG("%s", hdev->name);
+-
+- if (!dc->status && (conn = conn_hash_lookup(&hdev->conn_hash, handle))) {
+- tasklet_disable(&hdev->tx_task);
+-
+- /* Notify upper protocols */
+- if (conn->type == ACL_LINK) {
+- /* ACL link notify L2CAP layer */
+- if ((hp = GET_HPROTO(HCI_PROTO_L2CAP)) && hp->disconn_ind)
+- hp->disconn_ind(conn, dc->reason);
+- } else {
+- /* SCO link (no notification) */
++ conn->sent++;
++ if (conn->sent == ~0)
++ conn->sent = 0;
+ }
+-
+- hci_conn_del(hdev, conn);
+-
+- tasklet_enable(&hdev->tx_task);
+ }
+ }
+
+-/* Number of completed packets */
+-static void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
++static void hci_tx_task(unsigned long arg)
+ {
+- evt_num_comp_pkts *nc = (evt_num_comp_pkts *) skb->data;
+- __u16 *ptr;
+- int i;
+-
+- skb_pull(skb, EVT_NUM_COMP_PKTS_SIZE);
+-
+- DBG("%s num_hndl %d", hdev->name, nc->num_hndl);
++ struct hci_dev *hdev = (struct hci_dev *) arg;
++ struct sk_buff *skb;
+
+- if (skb->len < nc->num_hndl * 4) {
+- DBG("%s bad parameters", hdev->name);
+- return;
+- }
++ read_lock(&hci_task_lock);
+
+- tasklet_disable(&hdev->tx_task);
++ BT_DBG("%s acl %d sco %d", hdev->name, hdev->acl_cnt, hdev->sco_cnt);
+
+- for (i = 0, ptr = (__u16 *) skb->data; i < nc->num_hndl; i++) {
+- struct hci_conn *conn;
+- __u16 handle, count;
++ /* Schedule queues and send stuff to HCI driver */
+
+- handle = __le16_to_cpu(get_unaligned(ptr++));
+- count = __le16_to_cpu(get_unaligned(ptr++));
++ hci_sched_acl(hdev);
+
+- hdev->acl_cnt += count;
++ hci_sched_sco(hdev);
+
+- if ((conn = conn_hash_lookup(&hdev->conn_hash, handle)))
+- conn->sent -= count;
+- }
++ /* Send next queued raw (unknown type) packet */
++ while ((skb = skb_dequeue(&hdev->raw_q)))
++ hci_send_frame(skb);
+
+- tasklet_enable(&hdev->tx_task);
+-
+- hci_sched_tx(hdev);
++ read_unlock(&hci_task_lock);
+ }
+
+-static inline void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
+-{
+- hci_event_hdr *he = (hci_event_hdr *) skb->data;
+- evt_cmd_status *cs;
+- evt_cmd_complete *ec;
+- __u16 opcode, ocf, ogf;
+-
+- skb_pull(skb, HCI_EVENT_HDR_SIZE);
+-
+- DBG("%s evt 0x%x", hdev->name, he->evt);
+-
+- switch (he->evt) {
+- case EVT_NUM_COMP_PKTS:
+- hci_num_comp_pkts_evt(hdev, skb);
+- break;
+-
+- case EVT_INQUIRY_COMPLETE:
+- hci_inquiry_complete_evt(hdev, skb);
+- break;
+
+- case EVT_INQUIRY_RESULT:
+- hci_inquiry_result_evt(hdev, skb);
+- break;
+-
+- case EVT_CONN_REQUEST:
+- hci_conn_request_evt(hdev, skb);
+- break;
+-
+- case EVT_CONN_COMPLETE:
+- hci_conn_complete_evt(hdev, skb);
+- break;
+-
+- case EVT_DISCONN_COMPLETE:
+- hci_disconn_complete_evt(hdev, skb);
+- break;
+-
+- case EVT_CMD_STATUS:
+- cs = (evt_cmd_status *) skb->data;
+- skb_pull(skb, EVT_CMD_STATUS_SIZE);
+-
+- opcode = __le16_to_cpu(cs->opcode);
+- ogf = cmd_opcode_ogf(opcode);
+- ocf = cmd_opcode_ocf(opcode);
+-
+- switch (ogf) {
+- case OGF_INFO_PARAM:
+- hci_cs_info_param(hdev, ocf, cs->status);
+- break;
+-
+- case OGF_HOST_CTL:
+- hci_cs_host_ctl(hdev, ocf, cs->status);
+- break;
+-
+- case OGF_LINK_CTL:
+- hci_cs_link_ctl(hdev, ocf, cs->status);
+- break;
+-
+- case OGF_LINK_POLICY:
+- hci_cs_link_policy(hdev, ocf, cs->status);
+- break;
+-
+- default:
+- DBG("%s Command Status OGF %x", hdev->name, ogf);
+- break;
+- };
+-
+- if (cs->ncmd) {
+- atomic_set(&hdev->cmd_cnt, 1);
+- if (!skb_queue_empty(&hdev->cmd_q))
+- hci_sched_cmd(hdev);
+- }
+- break;
+-
+- case EVT_CMD_COMPLETE:
+- ec = (evt_cmd_complete *) skb->data;
+- skb_pull(skb, EVT_CMD_COMPLETE_SIZE);
+-
+- opcode = __le16_to_cpu(ec->opcode);
+- ogf = cmd_opcode_ogf(opcode);
+- ocf = cmd_opcode_ocf(opcode);
+-
+- switch (ogf) {
+- case OGF_INFO_PARAM:
+- hci_cc_info_param(hdev, ocf, skb);
+- break;
+-
+- case OGF_HOST_CTL:
+- hci_cc_host_ctl(hdev, ocf, skb);
+- break;
+-
+- case OGF_LINK_CTL:
+- hci_cc_link_ctl(hdev, ocf, skb);
+- break;
+-
+- case OGF_LINK_POLICY:
+- hci_cc_link_policy(hdev, ocf, skb);
+- break;
+-
+- default:
+- DBG("%s Command Completed OGF %x", hdev->name, ogf);
+- break;
+- };
+-
+- if (ec->ncmd) {
+- atomic_set(&hdev->cmd_cnt, 1);
+- if (!skb_queue_empty(&hdev->cmd_q))
+- hci_sched_cmd(hdev);
+- }
+- break;
+- };
+-
+- kfree_skb(skb);
+- hdev->stat.evt_rx++;
+-}
++/* ----- HCI RX task (incomming data proccessing) ----- */
+
+ /* ACL data packet */
+ static inline void hci_acldata_packet(struct hci_dev *hdev, struct sk_buff *skb)
+@@ -1867,51 +1255,86 @@
+ flags = acl_flags(handle);
+ handle = acl_handle(handle);
+
+- DBG("%s len %d handle 0x%x flags 0x%x", hdev->name, skb->len, handle, flags);
++ BT_DBG("%s len %d handle 0x%x flags 0x%x", hdev->name, skb->len, handle, flags);
++
++ hdev->stat.acl_rx++;
+
+- if ((conn = conn_hash_lookup(&hdev->conn_hash, handle))) {
++ hci_dev_lock(hdev);
++ conn = conn_hash_lookup_handle(hdev, handle);
++ hci_dev_unlock(hdev);
++
++ if (conn) {
+ register struct hci_proto *hp;
+
+ /* Send to upper protocol */
+- if ((hp = GET_HPROTO(HCI_PROTO_L2CAP)) && hp->recv_acldata) {
++ if ((hp = hci_proto[HCI_PROTO_L2CAP]) && hp->recv_acldata) {
+ hp->recv_acldata(conn, skb, flags);
+- goto sent;
++ return;
+ }
+ } else {
+- ERR("%s ACL packet for unknown connection handle %d", hdev->name, handle);
++ BT_ERR("%s ACL packet for unknown connection handle %d",
++ hdev->name, handle);
+ }
+
+ kfree_skb(skb);
+-sent:
+- hdev->stat.acl_rx++;
+ }
+
+ /* SCO data packet */
+ static inline void hci_scodata_packet(struct hci_dev *hdev, struct sk_buff *skb)
+ {
+- DBG("%s len %d", hdev->name, skb->len);
++ hci_sco_hdr *sh = (void *) skb->data;
++ struct hci_conn *conn;
++ __u16 handle;
++
++ skb_pull(skb, HCI_SCO_HDR_SIZE);
++
++ handle = __le16_to_cpu(sh->handle);
++
++ BT_DBG("%s len %d handle 0x%x", hdev->name, skb->len, handle);
+
+- kfree_skb(skb);
+ hdev->stat.sco_rx++;
++
++ hci_dev_lock(hdev);
++ conn = conn_hash_lookup_handle(hdev, handle);
++ hci_dev_unlock(hdev);
++
++ if (conn) {
++ register struct hci_proto *hp;
++
++ /* Send to upper protocol */
++ if ((hp = hci_proto[HCI_PROTO_SCO]) && hp->recv_scodata) {
++ hp->recv_scodata(conn, skb);
++ return;
++ }
++ } else {
++ BT_ERR("%s SCO packet for unknown connection handle %d",
++ hdev->name, handle);
++ }
++
++ kfree_skb(skb);
+ }
+
+-/* ----- HCI tasks ----- */
+ void hci_rx_task(unsigned long arg)
+ {
+ struct hci_dev *hdev = (struct hci_dev *) arg;
+ struct sk_buff *skb;
+
+- DBG("%s", hdev->name);
++ BT_DBG("%s", hdev->name);
+
+ read_lock(&hci_task_lock);
+
+ while ((skb = skb_dequeue(&hdev->rx_q))) {
+- if (hdev->flags & HCI_SOCK) {
++ if (atomic_read(&hdev->promisc)) {
+ /* Send copy to the sockets */
+ hci_send_to_sock(hdev, skb);
+ }
+
+- if (hdev->flags & HCI_INIT) {
++ if (test_bit(HCI_RAW, &hdev->flags)) {
++ kfree_skb(skb);
++ continue;
++ }
++
++ if (test_bit(HCI_INIT, &hdev->flags)) {
+ /* Don't process data packets in this states. */
+ switch (skb->pkt_type) {
+ case HCI_ACLDATA_PKT:
+@@ -1921,64 +1344,43 @@
+ };
+ }
+
+- if (hdev->flags & HCI_NORMAL) {
+- /* Process frame */
+- switch (skb->pkt_type) {
+- case HCI_EVENT_PKT:
+- hci_event_packet(hdev, skb);
+- break;
++ /* Process frame */
++ switch (skb->pkt_type) {
++ case HCI_EVENT_PKT:
++ hci_event_packet(hdev, skb);
++ break;
+
+- case HCI_ACLDATA_PKT:
+- DBG("%s ACL data packet", hdev->name);
+- hci_acldata_packet(hdev, skb);
+- break;
++ case HCI_ACLDATA_PKT:
++ BT_DBG("%s ACL data packet", hdev->name);
++ hci_acldata_packet(hdev, skb);
++ break;
+
+- case HCI_SCODATA_PKT:
+- DBG("%s SCO data packet", hdev->name);
+- hci_scodata_packet(hdev, skb);
+- break;
++ case HCI_SCODATA_PKT:
++ BT_DBG("%s SCO data packet", hdev->name);
++ hci_scodata_packet(hdev, skb);
++ break;
+
+- default:
+- kfree_skb(skb);
+- break;
+- };
+- } else {
++ default:
+ kfree_skb(skb);
++ break;
+ }
+ }
+
+ read_unlock(&hci_task_lock);
+ }
+
+-static void hci_tx_task(unsigned long arg)
+-{
+- struct hci_dev *hdev = (struct hci_dev *) arg;
+- struct sk_buff *skb;
+-
+- read_lock(&hci_task_lock);
+-
+- DBG("%s acl %d sco %d", hdev->name, hdev->acl_cnt, hdev->sco_cnt);
+-
+- /* Schedule queues and send stuff to HCI driver */
+-
+- hci_sched_acl(hdev);
+-
+- hci_sched_sco(hdev);
+-
+- /* Send next queued raw (unknown type) packet */
+- while ((skb = skb_dequeue(&hdev->raw_q)))
+- hci_send_frame(skb);
+-
+- read_unlock(&hci_task_lock);
+-}
+-
+ static void hci_cmd_task(unsigned long arg)
+ {
+ struct hci_dev *hdev = (struct hci_dev *) arg;
+ struct sk_buff *skb;
+
+- DBG("%s cmd %d", hdev->name, atomic_read(&hdev->cmd_cnt));
++ BT_DBG("%s cmd %d", hdev->name, atomic_read(&hdev->cmd_cnt));
+
++ if (!atomic_read(&hdev->cmd_cnt) && (jiffies - hdev->cmd_last_tx) > HZ) {
++ BT_ERR("%s command tx timeout", hdev->name);
++ atomic_set(&hdev->cmd_cnt, 1);
++ }
++
+ /* Send queued commands */
+ if (atomic_read(&hdev->cmd_cnt) && (skb = skb_dequeue(&hdev->cmd_q))) {
+ if (hdev->sent_cmd)
+@@ -1987,6 +1389,7 @@
+ if ((hdev->sent_cmd = skb_clone(skb, GFP_ATOMIC))) {
+ atomic_dec(&hdev->cmd_cnt);
+ hci_send_frame(skb);
++ hdev->cmd_last_tx = jiffies;
+ } else {
+ skb_queue_head(&hdev->cmd_q, skb);
+ hci_sched_cmd(hdev);
+@@ -1994,33 +1397,10 @@
+ }
+ }
+
+-/* Receive frame from HCI drivers */
+-int hci_recv_frame(struct sk_buff *skb)
+-{
+- struct hci_dev *hdev = (struct hci_dev *) skb->dev;
+-
+- if (!hdev || !(hdev->flags & (HCI_UP | HCI_INIT))) {
+- kfree_skb(skb);
+- return -1;
+- }
+-
+- DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
+-
+- /* Incomming skb */
+- bluez_cb(skb)->incomming = 1;
+-
+- /* Queue frame for rx task */
+- skb_queue_tail(&hdev->rx_q, skb);
+- hci_sched_rx(hdev);
+-
+- return 0;
+-}
++/* ---- Initialization ---- */
+
+ int hci_core_init(void)
+ {
+- /* Init locks */
+- spin_lock_init(&hdev_list_lock);
+-
+ return 0;
+ }
+
+@@ -2028,5 +1408,3 @@
+ {
+ return 0;
+ }
+-
+-MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/hci_event.c linux-2.4.18-mh15/net/bluetooth/hci_event.c
+--- linux-2.4.18/net/bluetooth/hci_event.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/hci_event.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,910 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * HCI Events.
++ *
++ * $Id: hci_event.c,v 1.4 2002/07/27 18:14:38 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/init.h>
++#include <linux/skbuff.h>
++#include <linux/interrupt.h>
++#include <linux/notifier.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++#ifndef HCI_CORE_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
++
++/* Handle HCI Event packets */
++
++/* Command Complete OGF LINK_CTL */
++static void hci_cc_link_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
++{
++ __u8 status;
++
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ case OCF_INQUIRY_CANCEL:
++ status = *((__u8 *) skb->data);
++
++ if (status) {
++ BT_DBG("%s Inquiry cancel error: status 0x%x", hdev->name, status);
++ } else {
++ clear_bit(HCI_INQUIRY, &hdev->flags);
++ hci_req_complete(hdev, status);
++ }
++ break;
++
++ default:
++ BT_DBG("%s Command complete: ogf LINK_CTL ocf %x", hdev->name, ocf);
++ break;
++ };
++}
++
++/* Command Complete OGF LINK_POLICY */
++static void hci_cc_link_policy(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
++{
++ struct hci_conn *conn;
++ role_discovery_rp *rd;
++
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ case OCF_ROLE_DISCOVERY:
++ rd = (void *) skb->data;
++
++ if (rd->status)
++ break;
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_handle(hdev, __le16_to_cpu(rd->handle));
++ if (conn) {
++ if (rd->role)
++ conn->link_mode &= ~HCI_LM_MASTER;
++ else
++ conn->link_mode |= HCI_LM_MASTER;
++ }
++
++ hci_dev_unlock(hdev);
++ break;
++
++ default:
++ BT_DBG("%s: Command complete: ogf LINK_POLICY ocf %x",
++ hdev->name, ocf);
++ break;
++ };
++}
++
++/* Command Complete OGF HOST_CTL */
++static void hci_cc_host_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
++{
++ __u8 status, param;
++ void *sent;
++
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ case OCF_RESET:
++ status = *((__u8 *) skb->data);
++ hci_req_complete(hdev, status);
++ break;
++
++ case OCF_SET_EVENT_FLT:
++ status = *((__u8 *) skb->data);
++ if (status) {
++ BT_DBG("%s SET_EVENT_FLT failed %d", hdev->name, status);
++ } else {
++ BT_DBG("%s SET_EVENT_FLT succeseful", hdev->name);
++ }
++ break;
++
++ case OCF_WRITE_AUTH_ENABLE:
++ sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_AUTH_ENABLE);
++ if (!sent)
++ break;
++
++ status = *((__u8 *) skb->data);
++ param = *((__u8 *) sent);
++
++ if (!status) {
++ if (param == AUTH_ENABLED)
++ set_bit(HCI_AUTH, &hdev->flags);
++ else
++ clear_bit(HCI_AUTH, &hdev->flags);
++ }
++ hci_req_complete(hdev, status);
++ break;
++
++ case OCF_WRITE_ENCRYPT_MODE:
++ sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_ENCRYPT_MODE);
++ if (!sent)
++ break;
++
++ status = *((__u8 *) skb->data);
++ param = *((__u8 *) sent);
++
++ if (!status) {
++ if (param)
++ set_bit(HCI_ENCRYPT, &hdev->flags);
++ else
++ clear_bit(HCI_ENCRYPT, &hdev->flags);
++ }
++ hci_req_complete(hdev, status);
++ break;
++
++ case OCF_WRITE_CA_TIMEOUT:
++ status = *((__u8 *) skb->data);
++ if (status) {
++ BT_DBG("%s OCF_WRITE_CA_TIMEOUT failed %d", hdev->name, status);
++ } else {
++ BT_DBG("%s OCF_WRITE_CA_TIMEOUT succeseful", hdev->name);
++ }
++ break;
++
++ case OCF_WRITE_PG_TIMEOUT:
++ status = *((__u8 *) skb->data);
++ if (status) {
++ BT_DBG("%s OCF_WRITE_PG_TIMEOUT failed %d", hdev->name, status);
++ } else {
++ BT_DBG("%s: OCF_WRITE_PG_TIMEOUT succeseful", hdev->name);
++ }
++ break;
++
++ case OCF_WRITE_SCAN_ENABLE:
++ sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE);
++ if (!sent)
++ break;
++ status = *((__u8 *) skb->data);
++ param = *((__u8 *) sent);
++
++ BT_DBG("param 0x%x", param);
++
++ if (!status) {
++ clear_bit(HCI_PSCAN, &hdev->flags);
++ clear_bit(HCI_ISCAN, &hdev->flags);
++ if (param & SCAN_INQUIRY)
++ set_bit(HCI_ISCAN, &hdev->flags);
++
++ if (param & SCAN_PAGE)
++ set_bit(HCI_PSCAN, &hdev->flags);
++ }
++ hci_req_complete(hdev, status);
++ break;
++
++ case OCF_HOST_BUFFER_SIZE:
++ status = *((__u8 *) skb->data);
++ if (status) {
++ BT_DBG("%s OCF_BUFFER_SIZE failed %d", hdev->name, status);
++ hci_req_complete(hdev, status);
++ }
++ break;
++
++ default:
++ BT_DBG("%s Command complete: ogf HOST_CTL ocf %x", hdev->name, ocf);
++ break;
++ };
++}
++
++/* Command Complete OGF INFO_PARAM */
++static void hci_cc_info_param(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
++{
++ read_local_features_rp *lf;
++ read_buffer_size_rp *bs;
++ read_bd_addr_rp *ba;
++
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ case OCF_READ_LOCAL_FEATURES:
++ lf = (read_local_features_rp *) skb->data;
++
++ if (lf->status) {
++ BT_DBG("%s READ_LOCAL_FEATURES failed %d", hdev->name, lf->status);
++ break;
++ }
++
++ memcpy(hdev->features, lf->features, sizeof(hdev->features));
++
++ /* Adjust default settings according to features
++ * supported by device. */
++ if (hdev->features[0] & LMP_3SLOT)
++ hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
++
++ if (hdev->features[0] & LMP_5SLOT)
++ hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
++
++ if (hdev->features[1] & LMP_HV2)
++ hdev->pkt_type |= (HCI_HV2);
++
++ if (hdev->features[1] & LMP_HV3)
++ hdev->pkt_type |= (HCI_HV3);
++
++ BT_DBG("%s: features 0x%x 0x%x 0x%x", hdev->name, lf->features[0], lf->features[1], lf->features[2]);
++
++ break;
++
++ case OCF_READ_BUFFER_SIZE:
++ bs = (read_buffer_size_rp *) skb->data;
++
++ if (bs->status) {
++ BT_DBG("%s READ_BUFFER_SIZE failed %d", hdev->name, bs->status);
++ hci_req_complete(hdev, bs->status);
++ break;
++ }
++
++ hdev->acl_mtu = __le16_to_cpu(bs->acl_mtu);
++ hdev->sco_mtu = bs->sco_mtu ? bs->sco_mtu : 64;
++ hdev->acl_pkts = hdev->acl_cnt = __le16_to_cpu(bs->acl_max_pkt);
++ hdev->sco_pkts = hdev->sco_cnt = __le16_to_cpu(bs->sco_max_pkt);
++
++ BT_DBG("%s mtu: acl %d, sco %d max_pkt: acl %d, sco %d", hdev->name,
++ hdev->acl_mtu, hdev->sco_mtu, hdev->acl_pkts, hdev->sco_pkts);
++ break;
++
++ case OCF_READ_BD_ADDR:
++ ba = (read_bd_addr_rp *) skb->data;
++
++ if (!ba->status) {
++ bacpy(&hdev->bdaddr, &ba->bdaddr);
++ } else {
++ BT_DBG("%s: READ_BD_ADDR failed %d", hdev->name, ba->status);
++ }
++
++ hci_req_complete(hdev, ba->status);
++ break;
++
++ default:
++ BT_DBG("%s Command complete: ogf INFO_PARAM ocf %x", hdev->name, ocf);
++ break;
++ };
++}
++
++/* Command Status OGF LINK_CTL */
++static inline void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
++{
++ struct hci_conn *conn;
++ create_conn_cp *cc = hci_sent_cmd_data(hdev, OGF_LINK_CTL, OCF_CREATE_CONN);
++
++ if (!cc)
++ return;
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_ba(hdev, ACL_LINK, &cc->bdaddr);
++
++ BT_DBG("%s status 0x%x bdaddr %s conn %p", hdev->name,
++ status, batostr(&cc->bdaddr), conn);
++
++ if (status) {
++ if (conn && conn->state == BT_CONNECT) {
++ conn->state = BT_CLOSED;
++ hci_proto_connect_cfm(conn, status);
++ hci_conn_del(conn);
++ }
++ } else {
++ if (!conn) {
++ conn = hci_conn_add(hdev, ACL_LINK, &cc->bdaddr);
++ if (conn) {
++ conn->out = 1;
++ conn->link_mode |= HCI_LM_MASTER;
++ } else
++ BT_ERR("No memmory for new connection");
++ }
++ }
++
++ hci_dev_unlock(hdev);
++}
++
++static void hci_cs_link_ctl(struct hci_dev *hdev, __u16 ocf, __u8 status)
++{
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ case OCF_CREATE_CONN:
++ hci_cs_create_conn(hdev, status);
++ break;
++
++ case OCF_ADD_SCO:
++ if (status) {
++ struct hci_conn *acl, *sco;
++ add_sco_cp *cp = hci_sent_cmd_data(hdev,
++ OGF_LINK_CTL, OCF_ADD_SCO);
++ __u16 handle;
++
++ if (!cp)
++ break;
++
++ handle = __le16_to_cpu(cp->handle);
++
++ BT_DBG("%s Add SCO error: handle %d status 0x%x", hdev->name, handle, status);
++
++ hci_dev_lock(hdev);
++
++ acl = conn_hash_lookup_handle(hdev, handle);
++ if (acl && (sco = acl->link)) {
++ sco->state = BT_CLOSED;
++ hci_proto_connect_cfm(sco, status);
++ hci_conn_del(sco);
++ }
++
++ hci_dev_unlock(hdev);
++ }
++ break;
++
++ case OCF_INQUIRY:
++ if (status) {
++ BT_DBG("%s Inquiry error: status 0x%x", hdev->name, status);
++ hci_req_complete(hdev, status);
++ } else {
++ set_bit(HCI_INQUIRY, &hdev->flags);
++ }
++ break;
++
++ default:
++ BT_DBG("%s Command status: ogf LINK_CTL ocf %x status %d",
++ hdev->name, ocf, status);
++ break;
++ };
++}
++
++/* Command Status OGF LINK_POLICY */
++static void hci_cs_link_policy(struct hci_dev *hdev, __u16 ocf, __u8 status)
++{
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ default:
++ BT_DBG("%s Command status: ogf HOST_POLICY ocf %x", hdev->name, ocf);
++ break;
++ };
++}
++
++/* Command Status OGF HOST_CTL */
++static void hci_cs_host_ctl(struct hci_dev *hdev, __u16 ocf, __u8 status)
++{
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ default:
++ BT_DBG("%s Command status: ogf HOST_CTL ocf %x", hdev->name, ocf);
++ break;
++ };
++}
++
++/* Command Status OGF INFO_PARAM */
++static void hci_cs_info_param(struct hci_dev *hdev, __u16 ocf, __u8 status)
++{
++ BT_DBG("%s: hci_cs_info_param: ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ default:
++ BT_DBG("%s Command status: ogf INFO_PARAM ocf %x", hdev->name, ocf);
++ break;
++ };
++}
++
++/* Inquiry Complete */
++static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ __u8 status = *((__u8 *) skb->data);
++
++ BT_DBG("%s status %d", hdev->name, status);
++
++ clear_bit(HCI_INQUIRY, &hdev->flags);
++ hci_req_complete(hdev, status);
++}
++
++/* Inquiry Result */
++static inline void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ inquiry_info *info = (inquiry_info *) (skb->data + 1);
++ int num_rsp = *((__u8 *) skb->data);
++
++ BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
++
++ hci_dev_lock(hdev);
++ for (; num_rsp; num_rsp--)
++ inquiry_cache_update(hdev, info++);
++ hci_dev_unlock(hdev);
++}
++
++/* Inquiry Result With RSSI */
++static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ inquiry_info_with_rssi *info = (inquiry_info_with_rssi *) (skb->data + 1);
++ int num_rsp = *((__u8 *) skb->data);
++
++ BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
++
++ hci_dev_lock(hdev);
++ for (; num_rsp; num_rsp--) {
++ inquiry_info tmp;
++ bacpy(&tmp.bdaddr, &info->bdaddr);
++ tmp.pscan_rep_mode = info->pscan_rep_mode;
++ tmp.pscan_period_mode = info->pscan_period_mode;
++ tmp.pscan_mode = 0x00;
++ memcpy(tmp.dev_class, &info->dev_class, 3);
++ tmp.clock_offset = info->clock_offset;
++ info++;
++ inquiry_cache_update(hdev, &tmp);
++ }
++ hci_dev_unlock(hdev);
++}
++
++/* Connect Request */
++static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_conn_request *cr = (evt_conn_request *) skb->data;
++ int mask = hdev->link_mode;
++
++ BT_DBG("%s Connection request: %s type 0x%x", hdev->name,
++ batostr(&cr->bdaddr), cr->link_type);
++
++ mask |= hci_proto_connect_ind(hdev, &cr->bdaddr, cr->link_type);
++
++ if (mask & HCI_LM_ACCEPT) {
++ /* Connection accepted */
++ struct hci_conn *conn;
++ accept_conn_req_cp ac;
++
++ hci_dev_lock(hdev);
++ conn = conn_hash_lookup_ba(hdev, cr->link_type, &cr->bdaddr);
++ if (!conn) {
++ if (!(conn = hci_conn_add(hdev, cr->link_type, &cr->bdaddr))) {
++ BT_ERR("No memmory for new connection");
++ hci_dev_unlock(hdev);
++ return;
++ }
++ }
++ conn->state = BT_CONNECT;
++ hci_dev_unlock(hdev);
++
++ bacpy(&ac.bdaddr, &cr->bdaddr);
++
++ if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
++ ac.role = 0x00; /* Become master */
++ else
++ ac.role = 0x01; /* Remain slave */
++
++ hci_send_cmd(hdev, OGF_LINK_CTL, OCF_ACCEPT_CONN_REQ,
++ ACCEPT_CONN_REQ_CP_SIZE, &ac);
++ } else {
++ /* Connection rejected */
++ reject_conn_req_cp rc;
++
++ bacpy(&rc.bdaddr, &cr->bdaddr);
++ rc.reason = 0x0f;
++ hci_send_cmd(hdev, OGF_LINK_CTL, OCF_REJECT_CONN_REQ,
++ REJECT_CONN_REQ_CP_SIZE, &rc);
++ }
++}
++
++/* Connect Complete */
++static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_conn_complete *cc = (evt_conn_complete *) skb->data;
++ struct hci_conn *conn = NULL;
++
++ BT_DBG("%s", hdev->name);
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_ba(hdev, cc->link_type, &cc->bdaddr);
++ if (!conn) {
++ hci_dev_unlock(hdev);
++ return;
++ }
++
++ if (!cc->status) {
++ conn->handle = __le16_to_cpu(cc->handle);
++ conn->state = BT_CONNECTED;
++
++ if (test_bit(HCI_AUTH, &hdev->flags))
++ conn->link_mode |= HCI_LM_AUTH;
++
++ if (test_bit(HCI_ENCRYPT, &hdev->flags))
++ conn->link_mode |= HCI_LM_ENCRYPT;
++
++
++ /* Set link policy */
++ if (conn->type == ACL_LINK && hdev->link_policy) {
++ write_link_policy_cp lp;
++ lp.handle = cc->handle;
++ lp.policy = __cpu_to_le16(hdev->link_policy);
++ hci_send_cmd(hdev, OGF_LINK_POLICY, OCF_WRITE_LINK_POLICY,
++ WRITE_LINK_POLICY_CP_SIZE, &lp);
++ }
++
++ /* Set packet type for incomming connection */
++ if (!conn->out) {
++ change_conn_ptype_cp cp;
++ cp.handle = cc->handle;
++ cp.pkt_type = (conn->type == ACL_LINK) ?
++ __cpu_to_le16(hdev->pkt_type & ACL_PTYPE_MASK):
++ __cpu_to_le16(hdev->pkt_type & SCO_PTYPE_MASK);
++
++ hci_send_cmd(hdev, OGF_LINK_CTL, OCF_CHANGE_CONN_PTYPE,
++ CHANGE_CONN_PTYPE_CP_SIZE, &cp);
++ }
++ } else
++ conn->state = BT_CLOSED;
++
++ if (conn->type == ACL_LINK) {
++ struct hci_conn *sco = conn->link;
++ if (sco) {
++ if (!cc->status)
++ hci_add_sco(sco, conn->handle);
++ else {
++ hci_proto_connect_cfm(sco, cc->status);
++ hci_conn_del(sco);
++ }
++ }
++ }
++
++ hci_proto_connect_cfm(conn, cc->status);
++ if (cc->status)
++ hci_conn_del(conn);
++
++ hci_dev_unlock(hdev);
++}
++
++/* Disconnect Complete */
++static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_disconn_complete *dc = (evt_disconn_complete *) skb->data;
++ struct hci_conn *conn = NULL;
++ __u16 handle = __le16_to_cpu(dc->handle);
++
++ BT_DBG("%s status %d", hdev->name, dc->status);
++
++ if (dc->status)
++ return;
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_handle(hdev, handle);
++ if (conn) {
++ conn->state = BT_CLOSED;
++ hci_proto_disconn_ind(conn, dc->reason);
++ hci_conn_del(conn);
++ }
++
++ hci_dev_unlock(hdev);
++}
++
++/* Number of completed packets */
++static inline void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_num_comp_pkts *nc = (evt_num_comp_pkts *) skb->data;
++ __u16 *ptr;
++ int i;
++
++ skb_pull(skb, EVT_NUM_COMP_PKTS_SIZE);
++
++ BT_DBG("%s num_hndl %d", hdev->name, nc->num_hndl);
++
++ if (skb->len < nc->num_hndl * 4) {
++ BT_DBG("%s bad parameters", hdev->name);
++ return;
++ }
++
++ tasklet_disable(&hdev->tx_task);
++
++ for (i = 0, ptr = (__u16 *) skb->data; i < nc->num_hndl; i++) {
++ struct hci_conn *conn;
++ __u16 handle, count;
++
++ handle = __le16_to_cpu(get_unaligned(ptr++));
++ count = __le16_to_cpu(get_unaligned(ptr++));
++
++ conn = conn_hash_lookup_handle(hdev, handle);
++ if (conn) {
++ conn->sent -= count;
++
++ if (conn->type == SCO_LINK) {
++ if ((hdev->sco_cnt += count) > hdev->sco_pkts)
++ hdev->sco_cnt = hdev->sco_pkts;
++ } else {
++ if ((hdev->acl_cnt += count) > hdev->acl_pkts)
++ hdev->acl_cnt = hdev->acl_pkts;
++ }
++ }
++ }
++ hci_sched_tx(hdev);
++
++ tasklet_enable(&hdev->tx_task);
++}
++
++/* Role Change */
++static inline void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_role_change *rc = (evt_role_change *) skb->data;
++ struct hci_conn *conn = NULL;
++
++ BT_DBG("%s status %d", hdev->name, rc->status);
++
++ if (rc->status)
++ return;
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_ba(hdev, ACL_LINK, &rc->bdaddr);
++ if (conn) {
++ if (rc->role)
++ conn->link_mode &= ~HCI_LM_MASTER;
++ else
++ conn->link_mode |= HCI_LM_MASTER;
++ }
++
++ hci_dev_unlock(hdev);
++}
++
++/* Authentication Complete */
++static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_auth_complete *ac = (evt_auth_complete *) skb->data;
++ struct hci_conn *conn = NULL;
++ __u16 handle = __le16_to_cpu(ac->handle);
++
++ BT_DBG("%s status %d", hdev->name, ac->status);
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_handle(hdev, handle);
++ if (conn) {
++ if (!ac->status)
++ conn->link_mode |= HCI_LM_AUTH;
++ clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
++
++ hci_proto_auth_cfm(conn, ac->status);
++
++ if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
++ if (!ac->status) {
++ set_conn_encrypt_cp ce;
++ ce.handle = __cpu_to_le16(conn->handle);
++ ce.encrypt = 1;
++ hci_send_cmd(conn->hdev, OGF_LINK_CTL,
++ OCF_SET_CONN_ENCRYPT,
++ SET_CONN_ENCRYPT_CP_SIZE, &ce);
++ } else {
++ clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
++ hci_proto_encrypt_cfm(conn, ac->status);
++ }
++ }
++ }
++
++ hci_dev_unlock(hdev);
++}
++
++/* Encryption Change */
++static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_encrypt_change *ec = (evt_encrypt_change *) skb->data;
++ struct hci_conn *conn = NULL;
++ __u16 handle = __le16_to_cpu(ec->handle);
++
++ BT_DBG("%s status %d", hdev->name, ec->status);
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_handle(hdev, handle);
++ if (conn) {
++ if (!ec->status) {
++ if (ec->encrypt)
++ conn->link_mode |= HCI_LM_ENCRYPT;
++ else
++ conn->link_mode &= ~HCI_LM_ENCRYPT;
++ }
++ clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
++
++ hci_proto_encrypt_cfm(conn, ec->status);
++ }
++
++ hci_dev_unlock(hdev);
++}
++
++void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ hci_event_hdr *he = (hci_event_hdr *) skb->data;
++ evt_cmd_status *cs;
++ evt_cmd_complete *ec;
++ __u16 opcode, ocf, ogf;
++
++ skb_pull(skb, HCI_EVENT_HDR_SIZE);
++
++ BT_DBG("%s evt 0x%x", hdev->name, he->evt);
++
++ switch (he->evt) {
++ case EVT_NUM_COMP_PKTS:
++ hci_num_comp_pkts_evt(hdev, skb);
++ break;
++
++ case EVT_INQUIRY_COMPLETE:
++ hci_inquiry_complete_evt(hdev, skb);
++ break;
++
++ case EVT_INQUIRY_RESULT:
++ hci_inquiry_result_evt(hdev, skb);
++ break;
++
++ case EVT_INQUIRY_RESULT_WITH_RSSI:
++ hci_inquiry_result_with_rssi_evt(hdev, skb);
++ break;
++
++ case EVT_CONN_REQUEST:
++ hci_conn_request_evt(hdev, skb);
++ break;
++
++ case EVT_CONN_COMPLETE:
++ hci_conn_complete_evt(hdev, skb);
++ break;
++
++ case EVT_DISCONN_COMPLETE:
++ hci_disconn_complete_evt(hdev, skb);
++ break;
++
++ case EVT_ROLE_CHANGE:
++ hci_role_change_evt(hdev, skb);
++ break;
++
++ case EVT_AUTH_COMPLETE:
++ hci_auth_complete_evt(hdev, skb);
++ break;
++
++ case EVT_ENCRYPT_CHANGE:
++ hci_encrypt_change_evt(hdev, skb);
++ break;
++
++ case EVT_CMD_STATUS:
++ cs = (evt_cmd_status *) skb->data;
++ skb_pull(skb, EVT_CMD_STATUS_SIZE);
++
++ opcode = __le16_to_cpu(cs->opcode);
++ ogf = cmd_opcode_ogf(opcode);
++ ocf = cmd_opcode_ocf(opcode);
++
++ switch (ogf) {
++ case OGF_INFO_PARAM:
++ hci_cs_info_param(hdev, ocf, cs->status);
++ break;
++
++ case OGF_HOST_CTL:
++ hci_cs_host_ctl(hdev, ocf, cs->status);
++ break;
++
++ case OGF_LINK_CTL:
++ hci_cs_link_ctl(hdev, ocf, cs->status);
++ break;
++
++ case OGF_LINK_POLICY:
++ hci_cs_link_policy(hdev, ocf, cs->status);
++ break;
++
++ default:
++ BT_DBG("%s Command Status OGF %x", hdev->name, ogf);
++ break;
++ };
++
++ if (cs->ncmd) {
++ atomic_set(&hdev->cmd_cnt, 1);
++ if (!skb_queue_empty(&hdev->cmd_q))
++ hci_sched_cmd(hdev);
++ }
++ break;
++
++ case EVT_CMD_COMPLETE:
++ ec = (evt_cmd_complete *) skb->data;
++ skb_pull(skb, EVT_CMD_COMPLETE_SIZE);
++
++ opcode = __le16_to_cpu(ec->opcode);
++ ogf = cmd_opcode_ogf(opcode);
++ ocf = cmd_opcode_ocf(opcode);
++
++ switch (ogf) {
++ case OGF_INFO_PARAM:
++ hci_cc_info_param(hdev, ocf, skb);
++ break;
++
++ case OGF_HOST_CTL:
++ hci_cc_host_ctl(hdev, ocf, skb);
++ break;
++
++ case OGF_LINK_CTL:
++ hci_cc_link_ctl(hdev, ocf, skb);
++ break;
++
++ case OGF_LINK_POLICY:
++ hci_cc_link_policy(hdev, ocf, skb);
++ break;
++
++ default:
++ BT_DBG("%s Command Completed OGF %x", hdev->name, ogf);
++ break;
++ };
++
++ if (ec->ncmd) {
++ atomic_set(&hdev->cmd_cnt, 1);
++ if (!skb_queue_empty(&hdev->cmd_q))
++ hci_sched_cmd(hdev);
++ }
++ break;
++ };
++
++ kfree_skb(skb);
++ hdev->stat.evt_rx++;
++}
++
++/* General internal stack event */
++void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
++{
++ hci_event_hdr *eh;
++ evt_stack_internal *si;
++ struct sk_buff *skb;
++ int size;
++ void *ptr;
++
++ size = HCI_EVENT_HDR_SIZE + EVT_STACK_INTERNAL_SIZE + dlen;
++ skb = bluez_skb_alloc(size, GFP_ATOMIC);
++ if (!skb)
++ return;
++
++ ptr = skb_put(skb, size);
++
++ eh = ptr;
++ eh->evt = EVT_STACK_INTERNAL;
++ eh->plen = EVT_STACK_INTERNAL_SIZE + dlen;
++ ptr += HCI_EVENT_HDR_SIZE;
++
++ si = ptr;
++ si->type = type;
++ memcpy(si->data, data, dlen);
++
++ skb->pkt_type = HCI_EVENT_PKT;
++ skb->dev = (void *) hdev;
++ hci_send_to_sock(hdev, skb);
++ kfree_skb(skb);
++}
+diff -urN linux-2.4.18/net/bluetooth/hci_sock.c linux-2.4.18-mh15/net/bluetooth/hci_sock.c
+--- linux-2.4.18/net/bluetooth/hci_sock.c 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/net/bluetooth/hci_sock.c 2004-08-01 16:26:23.000000000 +0200
+@@ -25,7 +25,7 @@
+ /*
+ * BlueZ HCI socket layer.
+ *
+- * $Id: hci_sock.c,v 1.9 2001/08/05 06:02:16 maxk Exp $
++ * $Id: hci_sock.c,v 1.5 2002/07/22 20:32:54 maxk Exp $
+ */
+
+ #include <linux/config.h>
+@@ -49,45 +49,54 @@
+
+ #include <asm/system.h>
+ #include <asm/uaccess.h>
++#include <asm/unaligned.h>
+
+ #include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+ #include <net/bluetooth/hci_core.h>
+
+ #ifndef HCI_SOCK_DEBUG
+-#undef DBG
+-#define DBG( A... )
++#undef BT_DBG
++#define BT_DBG( A... )
+ #endif
+
+-/* HCI socket interface */
++/* ----- HCI socket interface ----- */
++
++/* Security filter */
++static struct hci_sec_filter hci_sec_filter = {
++ /* Packet types */
++ 0x10,
++ /* Events */
++ { 0x1000d9fe, 0x0000300c },
++ /* Commands */
++ {
++ { 0x0 },
++ /* OGF_LINK_CTL */
++ { 0xbe000006, 0x00000001, 0x0000, 0x00 },
++ /* OGF_LINK_POLICY */
++ { 0x00005200, 0x00000000, 0x0000, 0x00 },
++ /* OGF_HOST_CTL */
++ { 0xaab00200, 0x2b402aaa, 0x0154, 0x00 },
++ /* OGF_INFO_PARAM */
++ { 0x000002be, 0x00000000, 0x0000, 0x00 },
++ /* OGF_STATUS_PARAM */
++ { 0x000000ea, 0x00000000, 0x0000, 0x00 }
++ }
++};
+
+ static struct bluez_sock_list hci_sk_list = {
+ lock: RW_LOCK_UNLOCKED
+ };
+
+-static struct sock *hci_sock_lookup(struct hci_dev *hdev)
+-{
+- struct sock *sk;
+-
+- read_lock(&hci_sk_list.lock);
+- for (sk = hci_sk_list.head; sk; sk = sk->next) {
+- if (hci_pi(sk)->hdev == hdev)
+- break;
+- }
+- read_unlock(&hci_sk_list.lock);
+- return sk;
+-}
+-
+ /* Send frame to RAW socket */
+ void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb)
+ {
+ struct sock * sk;
+
+- DBG("hdev %p len %d", hdev, skb->len);
++ BT_DBG("hdev %p len %d", hdev, skb->len);
+
+ read_lock(&hci_sk_list.lock);
+ for (sk = hci_sk_list.head; sk; sk = sk->next) {
+- struct hci_filter *flt;
++ struct hci_filter *flt;
+ struct sk_buff *nskb;
+
+ if (sk->state != BT_BOUND || hci_pi(sk)->hdev != hdev)
+@@ -100,13 +109,19 @@
+ /* Apply filter */
+ flt = &hci_pi(sk)->filter;
+
+- if (!test_bit(skb->pkt_type, &flt->type_mask))
++ if (!hci_test_bit((skb->pkt_type & HCI_FLT_TYPE_BITS), &flt->type_mask))
+ continue;
+
+ if (skb->pkt_type == HCI_EVENT_PKT) {
+- register int evt = (*(__u8 *)skb->data & 63);
++ register int evt = (*(__u8 *)skb->data & HCI_FLT_EVENT_BITS);
++
++ if (!hci_test_bit(evt, &flt->event_mask))
++ continue;
+
+- if (!test_bit(evt, &flt->event_mask))
++ if (flt->opcode && ((evt == EVT_CMD_COMPLETE &&
++ flt->opcode != *(__u16 *)(skb->data + 3)) ||
++ (evt == EVT_CMD_STATUS &&
++ flt->opcode != *(__u16 *)(skb->data + 4))))
+ continue;
+ }
+
+@@ -116,8 +131,8 @@
+ /* Put type byte before the data */
+ memcpy(skb_push(nskb, 1), &nskb->pkt_type, 1);
+
+- skb_queue_tail(&sk->receive_queue, nskb);
+- sk->data_ready(sk, nskb->len);
++ if (sock_queue_rcv_skb(sk, nskb))
++ kfree_skb(nskb);
+ }
+ read_unlock(&hci_sk_list.lock);
+ }
+@@ -127,7 +142,7 @@
+ struct sock *sk = sock->sk;
+ struct hci_dev *hdev = hci_pi(sk)->hdev;
+
+- DBG("sock %p sk %p", sock, sk);
++ BT_DBG("sock %p sk %p", sock, sk);
+
+ if (!sk)
+ return 0;
+@@ -135,9 +150,7 @@
+ bluez_sock_unlink(&hci_sk_list, sk);
+
+ if (hdev) {
+- if (!hci_sock_lookup(hdev))
+- hdev->flags &= ~HCI_SOCK;
+-
++ atomic_dec(&hdev->promisc);
+ hci_dev_put(hdev);
+ }
+
+@@ -149,24 +162,55 @@
+ sock_put(sk);
+
+ MOD_DEC_USE_COUNT;
+-
+ return 0;
+ }
+
+-static int hci_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++/* Ioctls that require bound socket */
++static inline int hci_sock_bound_ioctl(struct sock *sk, unsigned int cmd, unsigned long arg)
+ {
+- struct sock *sk = sock->sk;
+ struct hci_dev *hdev = hci_pi(sk)->hdev;
+- __u32 mode;
+
+- DBG("cmd %x arg %lx", cmd, arg);
++ if (!hdev)
++ return -EBADFD;
+
+ switch (cmd) {
+- case HCIGETINFO:
+- return hci_dev_info(arg);
++ case HCISETRAW:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
+
++ if (arg)
++ set_bit(HCI_RAW, &hdev->flags);
++ else
++ clear_bit(HCI_RAW, &hdev->flags);
++
++ return 0;
++
++ case HCIGETCONNINFO:
++ return hci_get_conn_info(hdev, arg);
++
++ default:
++ if (hdev->ioctl)
++ return hdev->ioctl(hdev, cmd, arg);
++ return -EINVAL;
++ }
++}
++
++static int hci_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++{
++ struct sock *sk = sock->sk;
++ int err;
++
++ BT_DBG("cmd %x arg %lx", cmd, arg);
++
++ switch (cmd) {
+ case HCIGETDEVLIST:
+- return hci_dev_list(arg);
++ return hci_get_dev_list(arg);
++
++ case HCIGETDEVINFO:
++ return hci_get_dev_info(arg);
++
++ case HCIGETCONNLIST:
++ return hci_get_conn_list(arg);
+
+ case HCIDEVUP:
+ if (!capable(CAP_NET_ADMIN))
+@@ -183,48 +227,31 @@
+ return -EACCES;
+ return hci_dev_reset(arg);
+
+- case HCIRESETSTAT:
++ case HCIDEVRESTAT:
+ if (!capable(CAP_NET_ADMIN))
+ return -EACCES;
+ return hci_dev_reset_stat(arg);
+
+ case HCISETSCAN:
+- if (!capable(CAP_NET_ADMIN))
+- return -EACCES;
+- return hci_dev_setscan(arg);
+-
+ case HCISETAUTH:
+- if (!capable(CAP_NET_ADMIN))
+- return -EACCES;
+- return hci_dev_setauth(arg);
+-
+- case HCISETRAW:
+- if (!capable(CAP_NET_ADMIN))
+- return -EACCES;
+-
+- if (!hdev)
+- return -EBADFD;
+-
+- if (arg)
+- mode = HCI_RAW;
+- else
+- mode = HCI_NORMAL;
+-
+- return hci_dev_setmode(hdev, mode);
+-
++ case HCISETENCRYPT:
+ case HCISETPTYPE:
++ case HCISETLINKPOL:
++ case HCISETLINKMODE:
++ case HCISETACLMTU:
++ case HCISETSCOMTU:
+ if (!capable(CAP_NET_ADMIN))
+ return -EACCES;
+- return hci_dev_setptype(arg);
++ return hci_dev_cmd(cmd, arg);
+
+ case HCIINQUIRY:
+ return hci_inquiry(arg);
+
+- case HCIGETCONNLIST:
+- return hci_conn_list(arg);
+-
+ default:
+- return -EINVAL;
++ lock_sock(sk);
++ err = hci_sock_bound_ioctl(sk, cmd, arg);
++ release_sock(sk);
++ return err;
+ };
+ }
+
+@@ -233,28 +260,35 @@
+ struct sockaddr_hci *haddr = (struct sockaddr_hci *) addr;
+ struct sock *sk = sock->sk;
+ struct hci_dev *hdev = NULL;
++ int err = 0;
+
+- DBG("sock %p sk %p", sock, sk);
++ BT_DBG("sock %p sk %p", sock, sk);
+
+ if (!haddr || haddr->hci_family != AF_BLUETOOTH)
+ return -EINVAL;
+
++ lock_sock(sk);
++
+ if (hci_pi(sk)->hdev) {
+- /* Already bound */
+- return 0;
++ err = -EALREADY;
++ goto done;
+ }
+
+ if (haddr->hci_dev != HCI_DEV_NONE) {
+- if (!(hdev = hci_dev_get(haddr->hci_dev)))
+- return -ENODEV;
++ if (!(hdev = hci_dev_get(haddr->hci_dev))) {
++ err = -ENODEV;
++ goto done;
++ }
+
+- hdev->flags |= HCI_SOCK;
++ atomic_inc(&hdev->promisc);
+ }
+
+ hci_pi(sk)->hdev = hdev;
+ sk->state = BT_BOUND;
+
+- return 0;
++done:
++ release_sock(sk);
++ return err;
+ }
+
+ static int hci_sock_getname(struct socket *sock, struct sockaddr *addr, int *addr_len, int peer)
+@@ -262,73 +296,44 @@
+ struct sockaddr_hci *haddr = (struct sockaddr_hci *) addr;
+ struct sock *sk = sock->sk;
+
+- DBG("sock %p sk %p", sock, sk);
++ BT_DBG("sock %p sk %p", sock, sk);
++
++ lock_sock(sk);
+
+ *addr_len = sizeof(*haddr);
+ haddr->hci_family = AF_BLUETOOTH;
+ haddr->hci_dev = hci_pi(sk)->hdev->id;
+
++ release_sock(sk);
+ return 0;
+ }
+
+-static int hci_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len,
+- struct scm_cookie *scm)
+-{
+- struct sock *sk = sock->sk;
+- struct hci_dev *hdev = hci_pi(sk)->hdev;
+- struct sk_buff *skb;
+- int err;
+-
+- DBG("sock %p sk %p", sock, sk);
+-
+- if (msg->msg_flags & MSG_OOB)
+- return -EOPNOTSUPP;
+-
+- if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_NOSIGNAL|MSG_ERRQUEUE))
+- return -EINVAL;
+-
+- if (!hdev)
+- return -EBADFD;
+-
+- if (!(skb = bluez_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err)))
+- return err;
+-
+- if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
+- kfree_skb(skb);
+- return -EFAULT;
+- }
+-
+- skb->dev = (void *) hdev;
+- skb->pkt_type = *((unsigned char *) skb->data);
+- skb_pull(skb, 1);
+-
+- /* Send frame to HCI core */
+- hci_send_raw(skb);
+-
+- return len;
+-}
+-
+ static inline void hci_sock_cmsg(struct sock *sk, struct msghdr *msg, struct sk_buff *skb)
+ {
+ __u32 mask = hci_pi(sk)->cmsg_mask;
+
+ if (mask & HCI_CMSG_DIR)
+ put_cmsg(msg, SOL_HCI, HCI_CMSG_DIR, sizeof(int), &bluez_cb(skb)->incomming);
++
++ if (mask & HCI_CMSG_TSTAMP)
++ put_cmsg(msg, SOL_HCI, HCI_CMSG_TSTAMP, sizeof(skb->stamp), &skb->stamp);
+ }
+
+-static int hci_sock_recvmsg(struct socket *sock, struct msghdr *msg, int len,
+- int flags, struct scm_cookie *scm)
++static int hci_sock_recvmsg(struct socket *sock, struct msghdr *msg, int len, int flags, struct scm_cookie *scm)
+ {
+ int noblock = flags & MSG_DONTWAIT;
+ struct sock *sk = sock->sk;
+ struct sk_buff *skb;
+ int copied, err;
+
+- DBG("sock %p sk %p", sock, sk);
++ BT_DBG("sock %p, sk %p", sock, sk);
+
+- if (flags & (MSG_OOB | MSG_PEEK))
++ if (flags & (MSG_OOB))
+ return -EOPNOTSUPP;
+
++ if (sk->state == BT_CLOSED)
++ return 0;
++
+ if (!(skb = skb_recv_datagram(sk, flags, noblock, &err)))
+ return err;
+
+@@ -343,28 +348,107 @@
+ skb->h.raw = skb->data;
+ err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+
+- if (hci_pi(sk)->cmsg_mask)
+- hci_sock_cmsg(sk, msg, skb);
+-
++ hci_sock_cmsg(sk, msg, skb);
++
+ skb_free_datagram(sk, skb);
+
+ return err ? : copied;
+ }
+
++static int hci_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len,
++ struct scm_cookie *scm)
++{
++ struct sock *sk = sock->sk;
++ struct hci_dev *hdev;
++ struct sk_buff *skb;
++ int err;
++
++ BT_DBG("sock %p sk %p", sock, sk);
++
++ if (msg->msg_flags & MSG_OOB)
++ return -EOPNOTSUPP;
++
++ if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_NOSIGNAL|MSG_ERRQUEUE))
++ return -EINVAL;
++
++ if (len < 4)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ if (!(hdev = hci_pi(sk)->hdev)) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ if (!(skb = bluez_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err)))
++ goto done;
++
++ if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
++ err = -EFAULT;
++ goto drop;
++ }
++
++ skb->pkt_type = *((unsigned char *) skb->data);
++ skb_pull(skb, 1);
++ skb->dev = (void *) hdev;
++
++ if (skb->pkt_type == HCI_COMMAND_PKT) {
++ u16 opcode = __le16_to_cpu(get_unaligned((u16 *)skb->data));
++ u16 ogf = cmd_opcode_ogf(opcode);
++ u16 ocf = cmd_opcode_ocf(opcode);
++
++ if (((ogf > HCI_SFLT_MAX_OGF) ||
++ !hci_test_bit(ocf & HCI_FLT_OCF_BITS, &hci_sec_filter.ocf_mask[ogf])) &&
++ !capable(CAP_NET_RAW)) {
++ err = -EPERM;
++ goto drop;
++ }
++
++ if (test_bit(HCI_RAW, &hdev->flags) || (ogf == OGF_VENDOR_CMD)) {
++ skb_queue_tail(&hdev->raw_q, skb);
++ hci_sched_tx(hdev);
++ } else {
++ skb_queue_tail(&hdev->cmd_q, skb);
++ hci_sched_cmd(hdev);
++ }
++ } else {
++ if (!capable(CAP_NET_RAW)) {
++ err = -EPERM;
++ goto drop;
++ }
++
++ skb_queue_tail(&hdev->raw_q, skb);
++ hci_sched_tx(hdev);
++ }
++
++ err = len;
++
++done:
++ release_sock(sk);
++ return err;
++
++drop:
++ kfree_skb(skb);
++ goto done;
++}
++
+ int hci_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, int len)
+ {
+ struct sock *sk = sock->sk;
+- struct hci_filter flt;
++ struct hci_filter flt = { opcode: 0 };
+ int err = 0, opt = 0;
+
+- DBG("sk %p, opt %d", sk, optname);
++ BT_DBG("sk %p, opt %d", sk, optname);
+
+ lock_sock(sk);
+
+ switch (optname) {
+ case HCI_DATA_DIR:
+- if (get_user(opt, (int *)optval))
+- return -EFAULT;
++ if (get_user(opt, (int *)optval)) {
++ err = -EFAULT;
++ break;
++ }
+
+ if (opt)
+ hci_pi(sk)->cmsg_mask |= HCI_CMSG_DIR;
+@@ -372,12 +456,31 @@
+ hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_DIR;
+ break;
+
++ case HCI_TIME_STAMP:
++ if (get_user(opt, (int *)optval)) {
++ err = -EFAULT;
++ break;
++ }
++
++ if (opt)
++ hci_pi(sk)->cmsg_mask |= HCI_CMSG_TSTAMP;
++ else
++ hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_TSTAMP;
++ break;
++
+ case HCI_FILTER:
+ len = MIN(len, sizeof(struct hci_filter));
+ if (copy_from_user(&flt, optval, len)) {
+ err = -EFAULT;
+ break;
+ }
++
++ if (!capable(CAP_NET_RAW)) {
++ flt.type_mask &= hci_sec_filter.type_mask;
++ flt.event_mask[0] &= hci_sec_filter.event_mask[0];
++ flt.event_mask[1] &= hci_sec_filter.event_mask[1];
++ }
++
+ memcpy(&hci_pi(sk)->filter, &flt, len);
+ break;
+
+@@ -409,6 +512,16 @@
+ return -EFAULT;
+ break;
+
++ case HCI_TIME_STAMP:
++ if (hci_pi(sk)->cmsg_mask & HCI_CMSG_TSTAMP)
++ opt = 1;
++ else
++ opt = 0;
++
++ if (put_user(opt, optval))
++ return -EFAULT;
++ break;
++
+ case HCI_FILTER:
+ len = MIN(len, sizeof(struct hci_filter));
+ if (copy_to_user(optval, &hci_pi(sk)->filter, len))
+@@ -446,7 +559,7 @@
+ {
+ struct sock *sk;
+
+- DBG("sock %p", sock);
++ BT_DBG("sock %p", sock);
+
+ if (sock->type != SOCK_RAW)
+ return -ESOCKTNOSUPPORT;
+@@ -464,44 +577,31 @@
+ sk->protocol = protocol;
+ sk->state = BT_OPEN;
+
+- /* Initialize filter */
+- hci_pi(sk)->filter.type_mask = (1<<HCI_EVENT_PKT);
+- hci_pi(sk)->filter.event_mask[0] = ~0L;
+- hci_pi(sk)->filter.event_mask[1] = ~0L;
+-
+ bluez_sock_link(&hci_sk_list, sk);
+
+ MOD_INC_USE_COUNT;
+-
+ return 0;
+ }
+
+ static int hci_sock_dev_event(struct notifier_block *this, unsigned long event, void *ptr)
+ {
+ struct hci_dev *hdev = (struct hci_dev *) ptr;
+- struct sk_buff *skb;
+-
+- DBG("hdev %s event %ld", hdev->name, event);
++ evt_si_device sd;
++
++ BT_DBG("hdev %s event %ld", hdev->name, event);
+
+ /* Send event to sockets */
+- if ((skb = bluez_skb_alloc(HCI_EVENT_HDR_SIZE + EVT_HCI_DEV_EVENT_SIZE, GFP_ATOMIC))) {
+- hci_event_hdr eh = { EVT_HCI_DEV_EVENT, EVT_HCI_DEV_EVENT_SIZE };
+- evt_hci_dev_event he = { event, hdev->id };
+-
+- skb->pkt_type = HCI_EVENT_PKT;
+- memcpy(skb_put(skb, HCI_EVENT_HDR_SIZE), &eh, HCI_EVENT_HDR_SIZE);
+- memcpy(skb_put(skb, EVT_HCI_DEV_EVENT_SIZE), &he, EVT_HCI_DEV_EVENT_SIZE);
+-
+- hci_send_to_sock(NULL, skb);
+- kfree_skb(skb);
+- }
+-
++ sd.event = event;
++ sd.dev_id = hdev->id;
++ hci_si_event(NULL, EVT_SI_DEVICE, EVT_SI_DEVICE_SIZE, &sd);
++
+ if (event == HCI_DEV_UNREG) {
+ struct sock *sk;
+
+ /* Detach sockets from device */
+ read_lock(&hci_sk_list.lock);
+ for (sk = hci_sk_list.head; sk; sk = sk->next) {
++ bh_lock_sock(sk);
+ if (hci_pi(sk)->hdev == hdev) {
+ hci_pi(sk)->hdev = NULL;
+ sk->err = EPIPE;
+@@ -510,6 +610,7 @@
+
+ hci_dev_put(hdev);
+ }
++ bh_unlock_sock(sk);
+ }
+ read_unlock(&hci_sk_list.lock);
+ }
+@@ -529,21 +630,19 @@
+ int hci_sock_init(void)
+ {
+ if (bluez_sock_register(BTPROTO_HCI, &hci_sock_family_ops)) {
+- ERR("Can't register HCI socket");
++ BT_ERR("Can't register HCI socket");
+ return -EPROTO;
+ }
+
+ hci_register_notifier(&hci_sock_nblock);
+-
+ return 0;
+ }
+
+ int hci_sock_cleanup(void)
+ {
+ if (bluez_sock_unregister(BTPROTO_HCI))
+- ERR("Can't unregister HCI socket");
++ BT_ERR("Can't unregister HCI socket");
+
+ hci_unregister_notifier(&hci_sock_nblock);
+-
+ return 0;
+ }
+diff -urN linux-2.4.18/net/bluetooth/hidp/Config.in linux-2.4.18-mh15/net/bluetooth/hidp/Config.in
+--- linux-2.4.18/net/bluetooth/hidp/Config.in 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/hidp/Config.in 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,5 @@
++#
++# Bluetooth HIDP layer configuration
++#
++
++dep_tristate 'HIDP protocol support' CONFIG_BLUEZ_HIDP $CONFIG_INPUT $CONFIG_BLUEZ_L2CAP
+diff -urN linux-2.4.18/net/bluetooth/hidp/core.c linux-2.4.18-mh15/net/bluetooth/hidp/core.c
+--- linux-2.4.18/net/bluetooth/hidp/core.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/hidp/core.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,655 @@
++/*
++ HIDP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2003-2004 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <linux/init.h>
++#include <net/sock.h>
++
++#include <linux/input.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/l2cap.h>
++
++#include "hidp.h"
++
++#ifndef CONFIG_BT_HIDP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define VERSION "1.0"
++
++static DECLARE_RWSEM(hidp_session_sem);
++static LIST_HEAD(hidp_session_list);
++
++static unsigned char hidp_keycode[256] = {
++ 0, 0, 0, 0, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38,
++ 50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44, 2, 3,
++ 4, 5, 6, 7, 8, 9, 10, 11, 28, 1, 14, 15, 57, 12, 13, 26,
++ 27, 43, 43, 39, 40, 41, 51, 52, 53, 58, 59, 60, 61, 62, 63, 64,
++ 65, 66, 67, 68, 87, 88, 99, 70,119,110,102,104,111,107,109,106,
++ 105,108,103, 69, 98, 55, 74, 78, 96, 79, 80, 81, 75, 76, 77, 71,
++ 72, 73, 82, 83, 86,127,116,117,183,184,185,186,187,188,189,190,
++ 191,192,193,194,134,138,130,132,128,129,131,137,133,135,136,113,
++ 115,114, 0, 0, 0,121, 0, 89, 93,124, 92, 94, 95, 0, 0, 0,
++ 122,123, 90, 91, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 29, 42, 56,125, 97, 54,100,126,164,166,165,163,161,115,114,113,
++ 150,158,159,128,136,177,178,176,142,152,173,140
++};
++
++static struct hidp_session *__hidp_get_session(bdaddr_t *bdaddr)
++{
++ struct hidp_session *session;
++ struct list_head *p;
++
++ BT_DBG("");
++
++ list_for_each(p, &hidp_session_list) {
++ session = list_entry(p, struct hidp_session, list);
++ if (!bacmp(bdaddr, &session->bdaddr))
++ return session;
++ }
++ return NULL;
++}
++
++static void __hidp_link_session(struct hidp_session *session)
++{
++ MOD_INC_USE_COUNT;
++ list_add(&session->list, &hidp_session_list);
++}
++
++static void __hidp_unlink_session(struct hidp_session *session)
++{
++ list_del(&session->list);
++ MOD_DEC_USE_COUNT;
++}
++
++static void __hidp_copy_session(struct hidp_session *session, struct hidp_conninfo *ci)
++{
++ bacpy(&ci->bdaddr, &session->bdaddr);
++
++ ci->flags = session->flags;
++ ci->state = session->state;
++
++ ci->vendor = 0x0000;
++ ci->product = 0x0000;
++ ci->version = 0x0000;
++ memset(ci->name, 0, 128);
++
++ if (session->input) {
++ ci->vendor = session->input->idvendor;
++ ci->product = session->input->idproduct;
++ ci->version = session->input->idversion;
++ if (session->input->name)
++ strncpy(ci->name, session->input->name, 128);
++ else
++ strncpy(ci->name, "HID Boot Device", 128);
++ }
++}
++
++static int hidp_input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
++{
++ struct hidp_session *session = dev->private;
++ struct sk_buff *skb;
++ unsigned char newleds;
++
++ BT_DBG("session %p hid %p data %p size %d", session, device, data, size);
++
++ if (type != EV_LED)
++ return -1;
++
++ newleds = (!!test_bit(LED_KANA, dev->led) << 3) |
++ (!!test_bit(LED_COMPOSE, dev->led) << 3) |
++ (!!test_bit(LED_SCROLLL, dev->led) << 2) |
++ (!!test_bit(LED_CAPSL, dev->led) << 1) |
++ (!!test_bit(LED_NUML, dev->led));
++
++ if (session->leds == newleds)
++ return 0;
++
++ session->leds = newleds;
++
++ if (!(skb = alloc_skb(3, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for new frame");
++ return -ENOMEM;
++ }
++
++ *skb_put(skb, 1) = 0xa2;
++ *skb_put(skb, 1) = 0x01;
++ *skb_put(skb, 1) = newleds;
++
++ skb_queue_tail(&session->intr_transmit, skb);
++
++ hidp_schedule(session);
++
++ return 0;
++}
++
++static void hidp_input_report(struct hidp_session *session, struct sk_buff *skb)
++{
++ struct input_dev *dev = session->input;
++ unsigned char *keys = session->keys;
++ unsigned char *udata = skb->data + 1;
++ signed char *sdata = skb->data + 1;
++ int i, size = skb->len - 1;
++
++ switch (skb->data[0]) {
++ case 0x01: /* Keyboard report */
++ for (i = 0; i < 8; i++)
++ input_report_key(dev, hidp_keycode[i + 224], (udata[0] >> i) & 1);
++
++ for (i = 2; i < 8; i++) {
++ if (keys[i] > 3 && memscan(udata + 2, keys[i], 6) == udata + 8) {
++ if (hidp_keycode[keys[i]])
++ input_report_key(dev, hidp_keycode[keys[i]], 0);
++ else
++ BT_ERR("Unknown key (scancode %#x) released.", keys[i]);
++ }
++
++ if (udata[i] > 3 && memscan(keys + 2, udata[i], 6) == keys + 8) {
++ if (hidp_keycode[udata[i]])
++ input_report_key(dev, hidp_keycode[udata[i]], 1);
++ else
++ BT_ERR("Unknown key (scancode %#x) pressed.", udata[i]);
++ }
++ }
++
++ memcpy(keys, udata, 8);
++ break;
++
++ case 0x02: /* Mouse report */
++ input_report_key(dev, BTN_LEFT, sdata[0] & 0x01);
++ input_report_key(dev, BTN_RIGHT, sdata[0] & 0x02);
++ input_report_key(dev, BTN_MIDDLE, sdata[0] & 0x04);
++ input_report_key(dev, BTN_SIDE, sdata[0] & 0x08);
++ input_report_key(dev, BTN_EXTRA, sdata[0] & 0x10);
++
++ input_report_rel(dev, REL_X, sdata[1]);
++ input_report_rel(dev, REL_Y, sdata[2]);
++
++ if (size > 3)
++ input_report_rel(dev, REL_WHEEL, sdata[3]);
++ break;
++ }
++
++ input_event(dev, EV_RST, 0, 0);
++}
++
++static void hidp_idle_timeout(unsigned long arg)
++{
++ struct hidp_session *session = (struct hidp_session *) arg;
++
++ atomic_inc(&session->terminate);
++ hidp_schedule(session);
++}
++
++static inline void hidp_set_timer(struct hidp_session *session)
++{
++ if (session->idle_to > 0)
++ mod_timer(&session->timer, jiffies + HZ * session->idle_to);
++}
++
++static inline void hidp_del_timer(struct hidp_session *session)
++{
++ if (session->idle_to > 0)
++ del_timer(&session->timer);
++}
++
++static inline void hidp_send_message(struct hidp_session *session, unsigned char hdr)
++{
++ struct sk_buff *skb;
++
++ BT_DBG("session %p", session);
++
++ if (!(skb = alloc_skb(1, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for message");
++ return;
++ }
++
++ *skb_put(skb, 1) = hdr;
++
++ skb_queue_tail(&session->ctrl_transmit, skb);
++
++ hidp_schedule(session);
++}
++
++static inline int hidp_recv_frame(struct hidp_session *session, struct sk_buff *skb)
++{
++ __u8 hdr;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ hdr = skb->data[0];
++ skb_pull(skb, 1);
++
++ if (hdr == 0xa1) {
++ hidp_set_timer(session);
++
++ if (session->input)
++ hidp_input_report(session, skb);
++ } else {
++ BT_DBG("Unsupported protocol header 0x%02x", hdr);
++ }
++
++ kfree_skb(skb);
++ return 0;
++}
++
++static int hidp_send_frame(struct socket *sock, unsigned char *data, int len)
++{
++ struct iovec iv = { data, len };
++ struct msghdr msg;
++
++ BT_DBG("sock %p data %p len %d", sock, data, len);
++
++ if (!len)
++ return 0;
++
++ memset(&msg, 0, sizeof(msg));
++ msg.msg_iovlen = 1;
++ msg.msg_iov = &iv;
++
++ return sock_sendmsg(sock, &msg, len);
++}
++
++static int hidp_process_transmit(struct hidp_session *session)
++{
++ struct sk_buff *skb;
++
++ BT_DBG("session %p", session);
++
++ while ((skb = skb_dequeue(&session->ctrl_transmit))) {
++ if (hidp_send_frame(session->ctrl_sock, skb->data, skb->len) < 0) {
++ skb_queue_head(&session->ctrl_transmit, skb);
++ break;
++ }
++
++ hidp_set_timer(session);
++ kfree_skb(skb);
++ }
++
++ while ((skb = skb_dequeue(&session->intr_transmit))) {
++ if (hidp_send_frame(session->intr_sock, skb->data, skb->len) < 0) {
++ skb_queue_head(&session->intr_transmit, skb);
++ break;
++ }
++
++ hidp_set_timer(session);
++ kfree_skb(skb);
++ }
++
++ return skb_queue_len(&session->ctrl_transmit) +
++ skb_queue_len(&session->intr_transmit);
++}
++
++static int hidp_session(void *arg)
++{
++ struct hidp_session *session = arg;
++ struct sock *ctrl_sk = session->ctrl_sock->sk;
++ struct sock *intr_sk = session->intr_sock->sk;
++ struct sk_buff *skb;
++ int vendor = 0x0000, product = 0x0000;
++ wait_queue_t ctrl_wait, intr_wait;
++ unsigned long timeo = HZ;
++
++ BT_DBG("session %p", session);
++
++ if (session->input) {
++ vendor = session->input->idvendor;
++ product = session->input->idproduct;
++ }
++
++ daemonize(); reparent_to_init();
++
++ sprintf(current->comm, "khidpd_%04x%04x", vendor, product);
++
++ sigfillset(&current->blocked);
++ flush_signals(current);
++
++ current->nice = -15;
++
++ set_fs(KERNEL_DS);
++
++ init_waitqueue_entry(&ctrl_wait, current);
++ init_waitqueue_entry(&intr_wait, current);
++ add_wait_queue(ctrl_sk->sleep, &ctrl_wait);
++ add_wait_queue(intr_sk->sleep, &intr_wait);
++ while (!atomic_read(&session->terminate)) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (ctrl_sk->state != BT_CONNECTED || intr_sk->state != BT_CONNECTED)
++ break;
++
++ while ((skb = skb_dequeue(&ctrl_sk->receive_queue))) {
++ skb_orphan(skb);
++ hidp_recv_frame(session, skb);
++ }
++
++ while ((skb = skb_dequeue(&intr_sk->receive_queue))) {
++ skb_orphan(skb);
++ hidp_recv_frame(session, skb);
++ }
++
++ hidp_process_transmit(session);
++
++ schedule();
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(intr_sk->sleep, &intr_wait);
++ remove_wait_queue(ctrl_sk->sleep, &ctrl_wait);
++
++ down_write(&hidp_session_sem);
++
++ hidp_del_timer(session);
++
++ if (intr_sk->state != BT_CONNECTED) {
++ init_waitqueue_entry(&ctrl_wait, current);
++ add_wait_queue(ctrl_sk->sleep, &ctrl_wait);
++ while (timeo && ctrl_sk->state != BT_CLOSED) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ timeo = schedule_timeout(timeo);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(ctrl_sk->sleep, &ctrl_wait);
++ timeo = HZ;
++ }
++
++ fput(session->ctrl_sock->file);
++
++ init_waitqueue_entry(&intr_wait, current);
++ add_wait_queue(intr_sk->sleep, &intr_wait);
++ while (timeo && intr_sk->state != BT_CLOSED) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ timeo = schedule_timeout(timeo);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(intr_sk->sleep, &intr_wait);
++
++ fput(session->intr_sock->file);
++
++ __hidp_unlink_session(session);
++
++ if (session->input) {
++ input_unregister_device(session->input);
++ kfree(session->input);
++ }
++
++ up_write(&hidp_session_sem);
++
++ kfree(session);
++ return 0;
++}
++
++static inline void hidp_setup_input(struct hidp_session *session, struct hidp_connadd_req *req)
++{
++ struct input_dev *input = session->input;
++ int i;
++
++ input->private = session;
++
++ input->idbus = BUS_BLUETOOTH;
++ input->idvendor = req->vendor;
++ input->idproduct = req->product;
++ input->idversion = req->version;
++
++ if (req->subclass & 0x40) {
++ set_bit(EV_KEY, input->evbit);
++ set_bit(EV_LED, input->evbit);
++ set_bit(EV_REP, input->evbit);
++
++ set_bit(LED_NUML, input->ledbit);
++ set_bit(LED_CAPSL, input->ledbit);
++ set_bit(LED_SCROLLL, input->ledbit);
++ set_bit(LED_COMPOSE, input->ledbit);
++ set_bit(LED_KANA, input->ledbit);
++
++ for (i = 0; i < sizeof(hidp_keycode); i++)
++ set_bit(hidp_keycode[i], input->keybit);
++ clear_bit(0, input->keybit);
++ }
++
++ if (req->subclass & 0x80) {
++ input->evbit[0] = BIT(EV_KEY) | BIT(EV_REL);
++ input->keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_RIGHT) | BIT(BTN_MIDDLE);
++ input->relbit[0] = BIT(REL_X) | BIT(REL_Y);
++ input->keybit[LONG(BTN_MOUSE)] |= BIT(BTN_SIDE) | BIT(BTN_EXTRA);
++ input->relbit[0] |= BIT(REL_WHEEL);
++ }
++
++ input->event = hidp_input_event;
++
++ input_register_device(input);
++}
++
++int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock, struct socket *intr_sock)
++{
++ struct hidp_session *session, *s;
++ int err;
++
++ BT_DBG("");
++
++ if (bacmp(&bluez_pi(ctrl_sock->sk)->src, &bluez_pi(intr_sock->sk)->src) ||
++ bacmp(&bluez_pi(ctrl_sock->sk)->dst, &bluez_pi(intr_sock->sk)->dst))
++ return -ENOTUNIQ;
++
++ session = kmalloc(sizeof(struct hidp_session), GFP_KERNEL);
++ if (!session)
++ return -ENOMEM;
++ memset(session, 0, sizeof(struct hidp_session));
++
++ session->input = kmalloc(sizeof(struct input_dev), GFP_KERNEL);
++ if (!session->input) {
++ kfree(session);
++ return -ENOMEM;
++ }
++ memset(session->input, 0, sizeof(struct input_dev));
++
++ down_write(&hidp_session_sem);
++
++ s = __hidp_get_session(&bluez_pi(ctrl_sock->sk)->dst);
++ if (s && s->state == BT_CONNECTED) {
++ err = -EEXIST;
++ goto failed;
++ }
++
++ bacpy(&session->bdaddr, &bluez_pi(ctrl_sock->sk)->dst);
++
++ session->ctrl_mtu = min_t(uint, l2cap_pi(ctrl_sock->sk)->omtu, l2cap_pi(ctrl_sock->sk)->imtu);
++ session->intr_mtu = min_t(uint, l2cap_pi(intr_sock->sk)->omtu, l2cap_pi(intr_sock->sk)->imtu);
++
++ BT_DBG("ctrl mtu %d intr mtu %d", session->ctrl_mtu, session->intr_mtu);
++
++ session->ctrl_sock = ctrl_sock;
++ session->intr_sock = intr_sock;
++ session->state = BT_CONNECTED;
++
++ init_timer(&session->timer);
++
++ session->timer.function = hidp_idle_timeout;
++ session->timer.data = (unsigned long) session;
++
++ skb_queue_head_init(&session->ctrl_transmit);
++ skb_queue_head_init(&session->intr_transmit);
++
++ session->flags = req->flags & (1 << HIDP_BLUETOOTH_VENDOR_ID);
++ session->idle_to = req->idle_to;
++
++ if (session->input)
++ hidp_setup_input(session, req);
++
++ __hidp_link_session(session);
++
++ hidp_set_timer(session);
++
++ err = kernel_thread(hidp_session, session, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
++ if (err < 0)
++ goto unlink;
++
++ if (session->input) {
++ hidp_send_message(session, 0x70);
++ session->flags |= (1 << HIDP_BOOT_PROTOCOL_MODE);
++
++ session->leds = 0xff;
++ hidp_input_event(session->input, EV_LED, 0, 0);
++ }
++
++ up_write(&hidp_session_sem);
++ return 0;
++
++unlink:
++ hidp_del_timer(session);
++
++ __hidp_unlink_session(session);
++
++ if (session->input)
++ input_unregister_device(session->input);
++
++failed:
++ up_write(&hidp_session_sem);
++
++ if (session->input)
++ kfree(session->input);
++
++ kfree(session);
++ return err;
++}
++
++int hidp_del_connection(struct hidp_conndel_req *req)
++{
++ struct hidp_session *session;
++ int err = 0;
++
++ BT_DBG("");
++
++ down_read(&hidp_session_sem);
++
++ session = __hidp_get_session(&req->bdaddr);
++ if (session) {
++ if (req->flags & (1 << HIDP_VIRTUAL_CABLE_UNPLUG)) {
++ hidp_send_message(session, 0x15);
++ } else {
++ /* Flush the transmit queues */
++ skb_queue_purge(&session->ctrl_transmit);
++ skb_queue_purge(&session->intr_transmit);
++
++ /* Kill session thread */
++ atomic_inc(&session->terminate);
++ hidp_schedule(session);
++ }
++ } else
++ err = -ENOENT;
++
++ up_read(&hidp_session_sem);
++ return err;
++}
++
++int hidp_get_connlist(struct hidp_connlist_req *req)
++{
++ struct list_head *p;
++ int err = 0, n = 0;
++
++ BT_DBG("");
++
++ down_read(&hidp_session_sem);
++
++ list_for_each(p, &hidp_session_list) {
++ struct hidp_session *session;
++ struct hidp_conninfo ci;
++
++ session = list_entry(p, struct hidp_session, list);
++
++ __hidp_copy_session(session, &ci);
++
++ if (copy_to_user(req->ci, &ci, sizeof(ci))) {
++ err = -EFAULT;
++ break;
++ }
++
++ if (++n >= req->cnum)
++ break;
++
++ req->ci++;
++ }
++ req->cnum = n;
++
++ up_read(&hidp_session_sem);
++ return err;
++}
++
++int hidp_get_conninfo(struct hidp_conninfo *ci)
++{
++ struct hidp_session *session;
++ int err = 0;
++
++ down_read(&hidp_session_sem);
++
++ session = __hidp_get_session(&ci->bdaddr);
++ if (session)
++ __hidp_copy_session(session, ci);
++ else
++ err = -ENOENT;
++
++ up_read(&hidp_session_sem);
++ return err;
++}
++
++static int __init hidp_init(void)
++{
++ l2cap_load();
++
++ hidp_init_sockets();
++
++ BT_INFO("BlueZ HIDP ver %s", VERSION);
++ BT_INFO("Copyright (C) 2003-2004 Marcel Holtmann <marcel@holtmann.org>");
++
++ return 0;
++}
++
++static void __exit hidp_exit(void)
++{
++ hidp_cleanup_sockets();
++}
++
++module_init(hidp_init);
++module_exit(hidp_exit);
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("Bluetooth HIDP ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/hidp/hidp.h linux-2.4.18-mh15/net/bluetooth/hidp/hidp.h
+--- linux-2.4.18/net/bluetooth/hidp/hidp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/hidp/hidp.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,122 @@
++/*
++ HIDP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2003-2004 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#ifndef __HIDP_H
++#define __HIDP_H
++
++#include <linux/types.h>
++#include <net/bluetooth/bluetooth.h>
++
++/* HIDP ioctl defines */
++#define HIDPCONNADD _IOW('H', 200, int)
++#define HIDPCONNDEL _IOW('H', 201, int)
++#define HIDPGETCONNLIST _IOR('H', 210, int)
++#define HIDPGETCONNINFO _IOR('H', 211, int)
++
++#define HIDP_VIRTUAL_CABLE_UNPLUG 0
++#define HIDP_BOOT_PROTOCOL_MODE 1
++#define HIDP_BLUETOOTH_VENDOR_ID 9
++
++struct hidp_connadd_req {
++ int ctrl_sock; // Connected control socket
++ int intr_sock; // Connteted interrupt socket
++ __u16 parser;
++ __u16 rd_size;
++ __u8 *rd_data;
++ __u8 country;
++ __u8 subclass;
++ __u16 vendor;
++ __u16 product;
++ __u16 version;
++ __u32 flags;
++ __u32 idle_to;
++ char name[128];
++};
++
++struct hidp_conndel_req {
++ bdaddr_t bdaddr;
++ __u32 flags;
++};
++
++struct hidp_conninfo {
++ bdaddr_t bdaddr;
++ __u32 flags;
++ __u16 state;
++ __u16 vendor;
++ __u16 product;
++ __u16 version;
++ char name[128];
++};
++
++struct hidp_connlist_req {
++ __u32 cnum;
++ struct hidp_conninfo *ci;
++};
++
++int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock, struct socket *intr_sock);
++int hidp_del_connection(struct hidp_conndel_req *req);
++int hidp_get_connlist(struct hidp_connlist_req *req);
++int hidp_get_conninfo(struct hidp_conninfo *ci);
++
++/* HIDP session defines */
++struct hidp_session {
++ struct list_head list;
++
++ struct socket *ctrl_sock;
++ struct socket *intr_sock;
++
++ bdaddr_t bdaddr;
++
++ unsigned long state;
++ unsigned long flags;
++ unsigned long idle_to;
++
++ uint ctrl_mtu;
++ uint intr_mtu;
++
++ atomic_t terminate;
++
++ unsigned char keys[8];
++ unsigned char leds;
++
++ struct input_dev *input;
++
++ struct timer_list timer;
++
++ struct sk_buff_head ctrl_transmit;
++ struct sk_buff_head intr_transmit;
++};
++
++static inline void hidp_schedule(struct hidp_session *session)
++{
++ struct sock *ctrl_sk = session->ctrl_sock->sk;
++ struct sock *intr_sk = session->intr_sock->sk;
++
++ wake_up_interruptible(ctrl_sk->sleep);
++ wake_up_interruptible(intr_sk->sleep);
++}
++
++/* HIDP init defines */
++extern int __init hidp_init_sockets(void);
++extern void __exit hidp_cleanup_sockets(void);
++
++#endif /* __HIDP_H */
+diff -urN linux-2.4.18/net/bluetooth/hidp/Makefile linux-2.4.18-mh15/net/bluetooth/hidp/Makefile
+--- linux-2.4.18/net/bluetooth/hidp/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/hidp/Makefile 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,10 @@
++#
++# Makefile for the Linux Bluetooth HIDP layer
++#
++
++O_TARGET := hidp.o
++
++obj-y := core.o sock.o
++obj-m += $(O_TARGET)
++
++include $(TOPDIR)/Rules.make
+diff -urN linux-2.4.18/net/bluetooth/hidp/sock.c linux-2.4.18-mh15/net/bluetooth/hidp/sock.c
+--- linux-2.4.18/net/bluetooth/hidp/sock.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/hidp/sock.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,212 @@
++/*
++ HIDP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2003-2004 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <linux/init.h>
++#include <net/sock.h>
++
++#include "hidp.h"
++
++#ifndef CONFIG_BT_HIDP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++static int hidp_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p sk %p", sock, sk);
++
++ if (!sk)
++ return 0;
++
++ sock_orphan(sk);
++ sock_put(sk);
++
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++static int hidp_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++{
++ struct hidp_connadd_req ca;
++ struct hidp_conndel_req cd;
++ struct hidp_connlist_req cl;
++ struct hidp_conninfo ci;
++ struct socket *csock;
++ struct socket *isock;
++ int err;
++
++ BT_DBG("cmd %x arg %lx", cmd, arg);
++
++ switch (cmd) {
++ case HIDPCONNADD:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&ca, (void *) arg, sizeof(ca)))
++ return -EFAULT;
++
++ csock = sockfd_lookup(ca.ctrl_sock, &err);
++ if (!csock)
++ return err;
++
++ isock = sockfd_lookup(ca.intr_sock, &err);
++ if (!isock) {
++ fput(csock->file);
++ return err;
++ }
++
++ if (csock->sk->state != BT_CONNECTED || isock->sk->state != BT_CONNECTED) {
++ fput(csock->file);
++ fput(isock->file);
++ return -EBADFD;
++ }
++
++ err = hidp_add_connection(&ca, csock, isock);
++ if (!err) {
++ if (copy_to_user((void *) arg, &ca, sizeof(ca)))
++ err = -EFAULT;
++ } else {
++ fput(csock->file);
++ fput(isock->file);
++ }
++
++ return err;
++
++ case HIDPCONNDEL:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&cd, (void *) arg, sizeof(cd)))
++ return -EFAULT;
++
++ return hidp_del_connection(&cd);
++
++ case HIDPGETCONNLIST:
++ if (copy_from_user(&cl, (void *) arg, sizeof(cl)))
++ return -EFAULT;
++
++ if (cl.cnum <= 0)
++ return -EINVAL;
++
++ err = hidp_get_connlist(&cl);
++ if (!err && copy_to_user((void *) arg, &cl, sizeof(cl)))
++ return -EFAULT;
++
++ return err;
++
++ case HIDPGETCONNINFO:
++ if (copy_from_user(&ci, (void *) arg, sizeof(ci)))
++ return -EFAULT;
++
++ err = hidp_get_conninfo(&ci);
++ if (!err && copy_to_user((void *) arg, &ci, sizeof(ci)))
++ return -EFAULT;
++
++ return err;
++ }
++
++ return -EINVAL;
++}
++
++static struct proto_ops hidp_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: hidp_sock_release,
++ ioctl: hidp_sock_ioctl,
++ bind: sock_no_bind,
++ getname: sock_no_getname,
++ sendmsg: sock_no_sendmsg,
++ recvmsg: sock_no_recvmsg,
++ poll: sock_no_poll,
++ listen: sock_no_listen,
++ shutdown: sock_no_shutdown,
++ setsockopt: sock_no_setsockopt,
++ getsockopt: sock_no_getsockopt,
++ connect: sock_no_connect,
++ socketpair: sock_no_socketpair,
++ accept: sock_no_accept,
++ mmap: sock_no_mmap
++};
++
++static int hidp_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ if (sock->type != SOCK_RAW)
++ return -ESOCKTNOSUPPORT;
++
++ sock->ops = &hidp_sock_ops;
++
++ if (!(sk = sk_alloc(PF_BLUETOOTH, GFP_KERNEL, 1)))
++ return -ENOMEM;
++
++ MOD_INC_USE_COUNT;
++
++ sock->state = SS_UNCONNECTED;
++ sock_init_data(sock, sk);
++
++ sk->destruct = NULL;
++ sk->protocol = protocol;
++
++ return 0;
++}
++
++static struct net_proto_family hidp_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: hidp_sock_create
++};
++
++int __init hidp_init_sockets(void)
++{
++ int err;
++
++ if ((err = bluez_sock_register(BTPROTO_HIDP, &hidp_sock_family_ops)))
++ BT_ERR("Can't register HIDP socket layer (%d)", err);
++
++ return err;
++}
++
++void __exit hidp_cleanup_sockets(void)
++{
++ int err;
++
++ if ((err = bluez_sock_unregister(BTPROTO_HIDP)))
++ BT_ERR("Can't unregister HIDP socket layer (%d)", err);
++}
+diff -urN linux-2.4.18/net/bluetooth/l2cap.c linux-2.4.18-mh15/net/bluetooth/l2cap.c
+--- linux-2.4.18/net/bluetooth/l2cap.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/l2cap.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,2222 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * BlueZ L2CAP core and sockets.
++ *
++ * $Id: l2cap.c,v 1.15 2002/09/09 01:14:52 maxk Exp $
++ */
++#define VERSION "2.3"
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/init.h>
++#include <linux/skbuff.h>
++#include <linux/interrupt.h>
++#include <linux/socket.h>
++#include <linux/skbuff.h>
++#include <linux/proc_fs.h>
++#include <linux/list.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include <net/bluetooth/l2cap.h>
++
++#ifndef L2CAP_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
++
++static struct proto_ops l2cap_sock_ops;
++
++struct bluez_sock_list l2cap_sk_list = {
++ lock: RW_LOCK_UNLOCKED
++};
++
++static int l2cap_conn_del(struct hci_conn *conn, int err);
++
++static inline void l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent);
++static void l2cap_chan_del(struct sock *sk, int err);
++static int l2cap_chan_send(struct sock *sk, struct msghdr *msg, int len);
++
++static void __l2cap_sock_close(struct sock *sk, int reason);
++static void l2cap_sock_close(struct sock *sk);
++static void l2cap_sock_kill(struct sock *sk);
++
++static int l2cap_send_req(struct l2cap_conn *conn, __u8 code, __u16 len, void *data);
++static int l2cap_send_rsp(struct l2cap_conn *conn, __u8 ident, __u8 code, __u16 len, void *data);
++
++/* ----- L2CAP timers ------ */
++static void l2cap_sock_timeout(unsigned long arg)
++{
++ struct sock *sk = (struct sock *) arg;
++
++ BT_DBG("sock %p state %d", sk, sk->state);
++
++ bh_lock_sock(sk);
++ __l2cap_sock_close(sk, ETIMEDOUT);
++ bh_unlock_sock(sk);
++
++ l2cap_sock_kill(sk);
++ sock_put(sk);
++}
++
++static void l2cap_sock_set_timer(struct sock *sk, long timeout)
++{
++ BT_DBG("sk %p state %d timeout %ld", sk, sk->state, timeout);
++
++ if (!mod_timer(&sk->timer, jiffies + timeout))
++ sock_hold(sk);
++}
++
++static void l2cap_sock_clear_timer(struct sock *sk)
++{
++ BT_DBG("sock %p state %d", sk, sk->state);
++
++ if (timer_pending(&sk->timer) && del_timer(&sk->timer))
++ __sock_put(sk);
++}
++
++static void l2cap_sock_init_timer(struct sock *sk)
++{
++ init_timer(&sk->timer);
++ sk->timer.function = l2cap_sock_timeout;
++ sk->timer.data = (unsigned long)sk;
++}
++
++/* -------- L2CAP connections --------- */
++static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, __u8 status)
++{
++ struct l2cap_conn *conn;
++
++ if ((conn = hcon->l2cap_data))
++ return conn;
++
++ if (status)
++ return conn;
++
++ if (!(conn = kmalloc(sizeof(struct l2cap_conn), GFP_ATOMIC)))
++ return NULL;
++ memset(conn, 0, sizeof(struct l2cap_conn));
++
++ hcon->l2cap_data = conn;
++ conn->hcon = hcon;
++
++ conn->mtu = hcon->hdev->acl_mtu;
++ conn->src = &hcon->hdev->bdaddr;
++ conn->dst = &hcon->dst;
++
++ spin_lock_init(&conn->lock);
++ conn->chan_list.lock = RW_LOCK_UNLOCKED;
++
++ BT_DBG("hcon %p conn %p", hcon, conn);
++
++ MOD_INC_USE_COUNT;
++ return conn;
++}
++
++static int l2cap_conn_del(struct hci_conn *hcon, int err)
++{
++ struct l2cap_conn *conn;
++ struct sock *sk;
++
++ if (!(conn = hcon->l2cap_data))
++ return 0;
++
++ BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
++
++ if (conn->rx_skb)
++ kfree_skb(conn->rx_skb);
++
++ /* Kill channels */
++ while ((sk = conn->chan_list.head)) {
++ bh_lock_sock(sk);
++ l2cap_chan_del(sk, err);
++ bh_unlock_sock(sk);
++ l2cap_sock_kill(sk);
++ }
++
++ hcon->l2cap_data = NULL;
++ kfree(conn);
++
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++/* -------- Socket interface ---------- */
++static struct sock *__l2cap_get_sock_by_addr(__u16 psm, bdaddr_t *src)
++{
++ struct sock *sk;
++ for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
++ if (sk->sport == psm && !bacmp(&bluez_pi(sk)->src, src))
++ break;
++ }
++ return sk;
++}
++
++/* Find socket with psm and source bdaddr.
++ * Returns closest match.
++ */
++static struct sock *__l2cap_get_sock_by_psm(int state, __u16 psm, bdaddr_t *src)
++{
++ struct sock *sk, *sk1 = NULL;
++
++ for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
++ if (state && sk->state != state)
++ continue;
++
++ if (l2cap_pi(sk)->psm == psm) {
++ /* Exact match. */
++ if (!bacmp(&bluez_pi(sk)->src, src))
++ break;
++
++ /* Closest match */
++ if (!bacmp(&bluez_pi(sk)->src, BDADDR_ANY))
++ sk1 = sk;
++ }
++ }
++ return sk ? sk : sk1;
++}
++
++/* Find socket with given address (psm, src).
++ * Returns locked socket */
++static inline struct sock *l2cap_get_sock_by_psm(int state, __u16 psm, bdaddr_t *src)
++{
++ struct sock *s;
++ read_lock(&l2cap_sk_list.lock);
++ s = __l2cap_get_sock_by_psm(state, psm, src);
++ if (s) bh_lock_sock(s);
++ read_unlock(&l2cap_sk_list.lock);
++ return s;
++}
++
++static void l2cap_sock_destruct(struct sock *sk)
++{
++ BT_DBG("sk %p", sk);
++
++ skb_queue_purge(&sk->receive_queue);
++ skb_queue_purge(&sk->write_queue);
++
++ MOD_DEC_USE_COUNT;
++}
++
++static void l2cap_sock_cleanup_listen(struct sock *parent)
++{
++ struct sock *sk;
++
++ BT_DBG("parent %p", parent);
++
++ /* Close not yet accepted channels */
++ while ((sk = bluez_accept_dequeue(parent, NULL)))
++ l2cap_sock_close(sk);
++
++ parent->state = BT_CLOSED;
++ parent->zapped = 1;
++}
++
++/* Kill socket (only if zapped and orphan)
++ * Must be called on unlocked socket.
++ */
++static void l2cap_sock_kill(struct sock *sk)
++{
++ if (!sk->zapped || sk->socket)
++ return;
++
++ BT_DBG("sk %p state %d", sk, sk->state);
++
++ /* Kill poor orphan */
++ bluez_sock_unlink(&l2cap_sk_list, sk);
++ sk->dead = 1;
++ sock_put(sk);
++}
++
++/* Close socket.
++ */
++static void __l2cap_sock_close(struct sock *sk, int reason)
++{
++ BT_DBG("sk %p state %d socket %p", sk, sk->state, sk->socket);
++
++ switch (sk->state) {
++ case BT_LISTEN:
++ l2cap_sock_cleanup_listen(sk);
++ break;
++
++ case BT_CONNECTED:
++ case BT_CONFIG:
++ case BT_CONNECT2:
++ if (sk->type == SOCK_SEQPACKET) {
++ struct l2cap_conn *conn = l2cap_pi(sk)->conn;
++ l2cap_disconn_req req;
++
++ sk->state = BT_DISCONN;
++ l2cap_sock_set_timer(sk, sk->sndtimeo);
++
++ req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ l2cap_send_req(conn, L2CAP_DISCONN_REQ, L2CAP_DISCONN_REQ_SIZE, &req);
++ } else {
++ l2cap_chan_del(sk, reason);
++ }
++ break;
++
++ case BT_CONNECT:
++ case BT_DISCONN:
++ l2cap_chan_del(sk, reason);
++ break;
++
++ default:
++ sk->zapped = 1;
++ break;
++ };
++}
++
++/* Must be called on unlocked socket. */
++static void l2cap_sock_close(struct sock *sk)
++{
++ l2cap_sock_clear_timer(sk);
++ lock_sock(sk);
++ __l2cap_sock_close(sk, ECONNRESET);
++ release_sock(sk);
++ l2cap_sock_kill(sk);
++}
++
++static void l2cap_sock_init(struct sock *sk, struct sock *parent)
++{
++ struct l2cap_pinfo *pi = l2cap_pi(sk);
++
++ BT_DBG("sk %p", sk);
++
++ if (parent) {
++ sk->type = parent->type;
++ pi->imtu = l2cap_pi(parent)->imtu;
++ pi->omtu = l2cap_pi(parent)->omtu;
++ pi->link_mode = l2cap_pi(parent)->link_mode;
++ } else {
++ pi->imtu = L2CAP_DEFAULT_MTU;
++ pi->omtu = 0;
++ pi->link_mode = 0;
++ }
++
++ /* Default config options */
++ pi->conf_mtu = L2CAP_DEFAULT_MTU;
++ pi->flush_to = L2CAP_DEFAULT_FLUSH_TO;
++}
++
++static struct sock *l2cap_sock_alloc(struct socket *sock, int proto, int prio)
++{
++ struct sock *sk;
++
++ if (!(sk = sk_alloc(PF_BLUETOOTH, prio, 1)))
++ return NULL;
++
++ bluez_sock_init(sock, sk);
++
++ sk->zapped = 0;
++
++ sk->destruct = l2cap_sock_destruct;
++ sk->sndtimeo = L2CAP_CONN_TIMEOUT;
++
++ sk->protocol = proto;
++ sk->state = BT_OPEN;
++
++ l2cap_sock_init_timer(sk);
++
++ bluez_sock_link(&l2cap_sk_list, sk);
++
++ MOD_INC_USE_COUNT;
++ return sk;
++}
++
++static int l2cap_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ sock->state = SS_UNCONNECTED;
++
++ if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
++ return -ESOCKTNOSUPPORT;
++
++ if (sock->type == SOCK_RAW && !capable(CAP_NET_RAW))
++ return -EPERM;
++
++ sock->ops = &l2cap_sock_ops;
++
++ if (!(sk = l2cap_sock_alloc(sock, protocol, GFP_KERNEL)))
++ return -ENOMEM;
++
++ l2cap_sock_init(sk, NULL);
++ return 0;
++}
++
++static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
++{
++ struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p, %s %d", sk, batostr(&la->l2_bdaddr), la->l2_psm);
++
++ if (!addr || addr->sa_family != AF_BLUETOOTH)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_OPEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ write_lock_bh(&l2cap_sk_list.lock);
++ if (la->l2_psm && __l2cap_get_sock_by_addr(la->l2_psm, &la->l2_bdaddr)) {
++ err = -EADDRINUSE;
++ } else {
++ /* Save source address */
++ bacpy(&bluez_pi(sk)->src, &la->l2_bdaddr);
++ l2cap_pi(sk)->psm = la->l2_psm;
++ sk->sport = la->l2_psm;
++ sk->state = BT_BOUND;
++ }
++ write_unlock_bh(&l2cap_sk_list.lock);
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++static int l2cap_do_connect(struct sock *sk)
++{
++ bdaddr_t *src = &bluez_pi(sk)->src;
++ bdaddr_t *dst = &bluez_pi(sk)->dst;
++ struct l2cap_conn *conn;
++ struct hci_conn *hcon;
++ struct hci_dev *hdev;
++ int err = 0;
++
++ BT_DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst), l2cap_pi(sk)->psm);
++
++ if (!(hdev = hci_get_route(dst, src)))
++ return -EHOSTUNREACH;
++
++ hci_dev_lock_bh(hdev);
++
++ err = -ENOMEM;
++
++ hcon = hci_connect(hdev, ACL_LINK, dst);
++ if (!hcon)
++ goto done;
++
++ conn = l2cap_conn_add(hcon, 0);
++ if (!conn) {
++ hci_conn_put(hcon);
++ goto done;
++ }
++
++ err = 0;
++
++ /* Update source addr of the socket */
++ bacpy(src, conn->src);
++
++ l2cap_chan_add(conn, sk, NULL);
++
++ sk->state = BT_CONNECT;
++ l2cap_sock_set_timer(sk, sk->sndtimeo);
++
++ if (hcon->state == BT_CONNECTED) {
++ if (sk->type == SOCK_SEQPACKET) {
++ l2cap_conn_req req;
++ req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ req.psm = l2cap_pi(sk)->psm;
++ l2cap_send_req(conn, L2CAP_CONN_REQ, L2CAP_CONN_REQ_SIZE, &req);
++ } else {
++ l2cap_sock_clear_timer(sk);
++ sk->state = BT_CONNECTED;
++ }
++ }
++
++done:
++ hci_dev_unlock_bh(hdev);
++ hci_dev_put(hdev);
++ return err;
++}
++
++static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
++{
++ struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ lock_sock(sk);
++
++ BT_DBG("sk %p", sk);
++
++ if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_l2)) {
++ err = -EINVAL;
++ goto done;
++ }
++
++ if (sk->type == SOCK_SEQPACKET && !la->l2_psm) {
++ err = -EINVAL;
++ goto done;
++ }
++
++ switch(sk->state) {
++ case BT_CONNECT:
++ case BT_CONNECT2:
++ case BT_CONFIG:
++ /* Already connecting */
++ goto wait;
++
++ case BT_CONNECTED:
++ /* Already connected */
++ goto done;
++
++ case BT_OPEN:
++ case BT_BOUND:
++ /* Can connect */
++ break;
++
++ default:
++ err = -EBADFD;
++ goto done;
++ }
++
++ /* Set destination address and psm */
++ bacpy(&bluez_pi(sk)->dst, &la->l2_bdaddr);
++ l2cap_pi(sk)->psm = la->l2_psm;
++
++ if ((err = l2cap_do_connect(sk)))
++ goto done;
++
++wait:
++ err = bluez_sock_wait_state(sk, BT_CONNECTED,
++ sock_sndtimeo(sk, flags & O_NONBLOCK));
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++int l2cap_sock_listen(struct socket *sock, int backlog)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p backlog %d", sk, backlog);
++
++ lock_sock(sk);
++
++ if (sk->state != BT_BOUND || sock->type != SOCK_SEQPACKET) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ if (!l2cap_pi(sk)->psm) {
++ err = -EINVAL;
++ goto done;
++ }
++
++ sk->max_ack_backlog = backlog;
++ sk->ack_backlog = 0;
++ sk->state = BT_LISTEN;
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct sock *sk = sock->sk, *nsk;
++ long timeo;
++ int err = 0;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
++
++ BT_DBG("sk %p timeo %ld", sk, timeo);
++
++ /* Wait for an incoming connection. (wake-one). */
++ add_wait_queue_exclusive(sk->sleep, &wait);
++ while (!(nsk = bluez_accept_dequeue(sk, newsock))) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ if (!timeo) {
++ err = -EAGAIN;
++ break;
++ }
++
++ release_sock(sk);
++ timeo = schedule_timeout(timeo);
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ break;
++ }
++
++ if (signal_pending(current)) {
++ err = sock_intr_errno(timeo);
++ break;
++ }
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++
++ if (err)
++ goto done;
++
++ newsock->state = SS_CONNECTED;
++
++ BT_DBG("new socket %p", nsk);
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
++{
++ struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ addr->sa_family = AF_BLUETOOTH;
++ *len = sizeof(struct sockaddr_l2);
++
++ if (peer)
++ bacpy(&la->l2_bdaddr, &bluez_pi(sk)->dst);
++ else
++ bacpy(&la->l2_bdaddr, &bluez_pi(sk)->src);
++
++ la->l2_psm = l2cap_pi(sk)->psm;
++ return 0;
++}
++
++static int l2cap_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct scm_cookie *scm)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (sk->err)
++ return sock_error(sk);
++
++ if (msg->msg_flags & MSG_OOB)
++ return -EOPNOTSUPP;
++
++ /* Check outgoing MTU */
++ if (len > l2cap_pi(sk)->omtu)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ if (sk->state == BT_CONNECTED)
++ err = l2cap_chan_send(sk, msg, len);
++ else
++ err = -ENOTCONN;
++
++ release_sock(sk);
++ return err;
++}
++
++static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, int optlen)
++{
++ struct sock *sk = sock->sk;
++ struct l2cap_options opts;
++ int err = 0, len;
++ __u32 opt;
++
++ BT_DBG("sk %p", sk);
++
++ lock_sock(sk);
++
++ switch (optname) {
++ case L2CAP_OPTIONS:
++ len = MIN(sizeof(opts), optlen);
++ if (copy_from_user((char *)&opts, optval, len)) {
++ err = -EFAULT;
++ break;
++ }
++ l2cap_pi(sk)->imtu = opts.imtu;
++ l2cap_pi(sk)->omtu = opts.omtu;
++ break;
++
++ case L2CAP_LM:
++ if (get_user(opt, (__u32 *)optval)) {
++ err = -EFAULT;
++ break;
++ }
++
++ l2cap_pi(sk)->link_mode = opt;
++ break;
++
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ }
++
++ release_sock(sk);
++ return err;
++}
++
++static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, char *optval, int *optlen)
++{
++ struct sock *sk = sock->sk;
++ struct l2cap_options opts;
++ struct l2cap_conninfo cinfo;
++ int len, err = 0;
++
++ if (get_user(len, optlen))
++ return -EFAULT;
++
++ lock_sock(sk);
++
++ switch (optname) {
++ case L2CAP_OPTIONS:
++ opts.imtu = l2cap_pi(sk)->imtu;
++ opts.omtu = l2cap_pi(sk)->omtu;
++ opts.flush_to = l2cap_pi(sk)->flush_to;
++
++ len = MIN(len, sizeof(opts));
++ if (copy_to_user(optval, (char *)&opts, len))
++ err = -EFAULT;
++
++ break;
++
++ case L2CAP_LM:
++ if (put_user(l2cap_pi(sk)->link_mode, (__u32 *)optval))
++ err = -EFAULT;
++ break;
++
++ case L2CAP_CONNINFO:
++ if (sk->state != BT_CONNECTED) {
++ err = -ENOTCONN;
++ break;
++ }
++
++ cinfo.hci_handle = l2cap_pi(sk)->conn->hcon->handle;
++
++ len = MIN(len, sizeof(cinfo));
++ if (copy_to_user(optval, (char *)&cinfo, len))
++ err = -EFAULT;
++
++ break;
++
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ }
++
++ release_sock(sk);
++ return err;
++}
++
++static int l2cap_sock_shutdown(struct socket *sock, int how)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (!sk) return 0;
++
++ lock_sock(sk);
++ if (!sk->shutdown) {
++ sk->shutdown = SHUTDOWN_MASK;
++ l2cap_sock_clear_timer(sk);
++ __l2cap_sock_close(sk, 0);
++
++ if (sk->linger)
++ err = bluez_sock_wait_state(sk, BT_CLOSED, sk->lingertime);
++ }
++ release_sock(sk);
++ return err;
++}
++
++static int l2cap_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++ int err;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (!sk) return 0;
++
++ err = l2cap_sock_shutdown(sock, 2);
++
++ sock_orphan(sk);
++ l2cap_sock_kill(sk);
++ return err;
++}
++
++/* --------- L2CAP channels --------- */
++static struct sock * __l2cap_get_chan_by_dcid(struct l2cap_chan_list *l, __u16 cid)
++{
++ struct sock *s;
++ for (s = l->head; s; s = l2cap_pi(s)->next_c) {
++ if (l2cap_pi(s)->dcid == cid)
++ break;
++ }
++ return s;
++}
++
++static struct sock *__l2cap_get_chan_by_scid(struct l2cap_chan_list *l, __u16 cid)
++{
++ struct sock *s;
++ for (s = l->head; s; s = l2cap_pi(s)->next_c) {
++ if (l2cap_pi(s)->scid == cid)
++ break;
++ }
++ return s;
++}
++
++/* Find channel with given SCID.
++ * Returns locked socket */
++static inline struct sock *l2cap_get_chan_by_scid(struct l2cap_chan_list *l, __u16 cid)
++{
++ struct sock *s;
++ read_lock(&l->lock);
++ s = __l2cap_get_chan_by_scid(l, cid);
++ if (s) bh_lock_sock(s);
++ read_unlock(&l->lock);
++ return s;
++}
++
++static __u16 l2cap_alloc_cid(struct l2cap_chan_list *l)
++{
++ __u16 cid = 0x0040;
++
++ for (; cid < 0xffff; cid++) {
++ if(!__l2cap_get_chan_by_scid(l, cid))
++ return cid;
++ }
++
++ return 0;
++}
++
++static inline void __l2cap_chan_link(struct l2cap_chan_list *l, struct sock *sk)
++{
++ sock_hold(sk);
++
++ if (l->head)
++ l2cap_pi(l->head)->prev_c = sk;
++
++ l2cap_pi(sk)->next_c = l->head;
++ l2cap_pi(sk)->prev_c = NULL;
++ l->head = sk;
++}
++
++static inline void l2cap_chan_unlink(struct l2cap_chan_list *l, struct sock *sk)
++{
++ struct sock *next = l2cap_pi(sk)->next_c, *prev = l2cap_pi(sk)->prev_c;
++
++ write_lock(&l->lock);
++ if (sk == l->head)
++ l->head = next;
++
++ if (next)
++ l2cap_pi(next)->prev_c = prev;
++ if (prev)
++ l2cap_pi(prev)->next_c = next;
++ write_unlock(&l->lock);
++
++ __sock_put(sk);
++}
++
++static void __l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent)
++{
++ struct l2cap_chan_list *l = &conn->chan_list;
++
++ BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn, l2cap_pi(sk)->psm, l2cap_pi(sk)->dcid);
++
++ l2cap_pi(sk)->conn = conn;
++
++ if (sk->type == SOCK_SEQPACKET) {
++ /* Alloc CID for connection-oriented socket */
++ l2cap_pi(sk)->scid = l2cap_alloc_cid(l);
++ } else if (sk->type == SOCK_DGRAM) {
++ /* Connectionless socket */
++ l2cap_pi(sk)->scid = 0x0002;
++ l2cap_pi(sk)->dcid = 0x0002;
++ l2cap_pi(sk)->omtu = L2CAP_DEFAULT_MTU;
++ } else {
++ /* Raw socket can send/recv signalling messages only */
++ l2cap_pi(sk)->scid = 0x0001;
++ l2cap_pi(sk)->dcid = 0x0001;
++ l2cap_pi(sk)->omtu = L2CAP_DEFAULT_MTU;
++ }
++
++ __l2cap_chan_link(l, sk);
++
++ if (parent)
++ bluez_accept_enqueue(parent, sk);
++}
++
++static inline void l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent)
++{
++ struct l2cap_chan_list *l = &conn->chan_list;
++ write_lock(&l->lock);
++ __l2cap_chan_add(conn, sk, parent);
++ write_unlock(&l->lock);
++}
++
++/* Delete channel.
++ * Must be called on the locked socket. */
++static void l2cap_chan_del(struct sock *sk, int err)
++{
++ struct l2cap_conn *conn = l2cap_pi(sk)->conn;
++ struct sock *parent = bluez_pi(sk)->parent;
++
++ l2cap_sock_clear_timer(sk);
++
++ BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
++
++ if (conn) {
++ /* Unlink from channel list */
++ l2cap_chan_unlink(&conn->chan_list, sk);
++ l2cap_pi(sk)->conn = NULL;
++ hci_conn_put(conn->hcon);
++ }
++
++ sk->state = BT_CLOSED;
++ sk->zapped = 1;
++
++ if (err)
++ sk->err = err;
++
++ if (parent)
++ parent->data_ready(parent, 0);
++ else
++ sk->state_change(sk);
++}
++
++static void l2cap_conn_ready(struct l2cap_conn *conn)
++{
++ struct l2cap_chan_list *l = &conn->chan_list;
++ struct sock *sk;
++
++ BT_DBG("conn %p", conn);
++
++ read_lock(&l->lock);
++
++ for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
++ bh_lock_sock(sk);
++
++ if (sk->type != SOCK_SEQPACKET) {
++ l2cap_sock_clear_timer(sk);
++ sk->state = BT_CONNECTED;
++ sk->state_change(sk);
++ } else if (sk->state == BT_CONNECT) {
++ l2cap_conn_req req;
++ req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ req.psm = l2cap_pi(sk)->psm;
++ l2cap_send_req(conn, L2CAP_CONN_REQ, L2CAP_CONN_REQ_SIZE, &req);
++ }
++
++ bh_unlock_sock(sk);
++ }
++
++ read_unlock(&l->lock);
++}
++
++/* Notify sockets that we cannot guaranty reliability anymore */
++static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
++{
++ struct l2cap_chan_list *l = &conn->chan_list;
++ struct sock *sk;
++
++ BT_DBG("conn %p", conn);
++
++ read_lock(&l->lock);
++ for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
++ if (l2cap_pi(sk)->link_mode & L2CAP_LM_RELIABLE)
++ sk->err = err;
++ }
++ read_unlock(&l->lock);
++}
++
++static void l2cap_chan_ready(struct sock *sk)
++{
++ struct sock *parent = bluez_pi(sk)->parent;
++
++ BT_DBG("sk %p, parent %p", sk, parent);
++
++ l2cap_pi(sk)->conf_state = 0;
++ l2cap_sock_clear_timer(sk);
++
++ if (!parent) {
++ /* Outgoing channel.
++ * Wake up socket sleeping on connect.
++ */
++ sk->state = BT_CONNECTED;
++ sk->state_change(sk);
++ } else {
++ /* Incomming channel.
++ * Wake up socket sleeping on accept.
++ */
++ parent->data_ready(parent, 0);
++ }
++}
++
++/* Copy frame to all raw sockets on that connection */
++void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
++{
++ struct l2cap_chan_list *l = &conn->chan_list;
++ struct sk_buff *nskb;
++ struct sock * sk;
++
++ BT_DBG("conn %p", conn);
++
++ read_lock(&l->lock);
++ for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
++ if (sk->type != SOCK_RAW)
++ continue;
++
++ /* Don't send frame to the socket it came from */
++ if (skb->sk == sk)
++ continue;
++
++ if (!(nskb = skb_clone(skb, GFP_ATOMIC)))
++ continue;
++
++ if (sock_queue_rcv_skb(sk, nskb))
++ kfree_skb(nskb);
++ }
++ read_unlock(&l->lock);
++}
++
++static int l2cap_chan_send(struct sock *sk, struct msghdr *msg, int len)
++{
++ struct l2cap_conn *conn = l2cap_pi(sk)->conn;
++ struct sk_buff *skb, **frag;
++ int err, hlen, count, sent=0;
++ l2cap_hdr *lh;
++
++ BT_DBG("sk %p len %d", sk, len);
++
++ /* First fragment (with L2CAP header) */
++ if (sk->type == SOCK_DGRAM)
++ hlen = L2CAP_HDR_SIZE + 2;
++ else
++ hlen = L2CAP_HDR_SIZE;
++
++ count = MIN(conn->mtu - hlen, len);
++
++ skb = bluez_skb_send_alloc(sk, hlen + count,
++ msg->msg_flags & MSG_DONTWAIT, &err);
++ if (!skb)
++ return err;
++
++ /* Create L2CAP header */
++ lh = (l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
++ lh->cid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ lh->len = __cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
++
++ if (sk->type == SOCK_DGRAM)
++ put_unaligned(l2cap_pi(sk)->psm, (__u16 *) skb_put(skb, 2));
++
++ if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count)) {
++ err = -EFAULT;
++ goto fail;
++ }
++
++ sent += count;
++ len -= count;
++
++ /* Continuation fragments (no L2CAP header) */
++ frag = &skb_shinfo(skb)->frag_list;
++ while (len) {
++ count = MIN(conn->mtu, len);
++
++ *frag = bluez_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err);
++ if (!*frag)
++ goto fail;
++
++ if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count)) {
++ err = -EFAULT;
++ goto fail;
++ }
++
++ sent += count;
++ len -= count;
++
++ frag = &(*frag)->next;
++ }
++
++ if ((err = hci_send_acl(conn->hcon, skb, 0)) < 0)
++ goto fail;
++
++ return sent;
++
++fail:
++ kfree_skb(skb);
++ return err;
++}
++
++/* --------- L2CAP signalling commands --------- */
++static inline __u8 l2cap_get_ident(struct l2cap_conn *conn)
++{
++ __u8 id;
++
++ /* Get next available identificator.
++ * 1 - 199 are used by kernel.
++ * 200 - 254 are used by utilities like l2ping, etc
++ */
++
++ spin_lock(&conn->lock);
++
++ if (++conn->tx_ident > 199)
++ conn->tx_ident = 1;
++
++ id = conn->tx_ident;
++
++ spin_unlock(&conn->lock);
++
++ return id;
++}
++
++static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
++ __u8 code, __u8 ident, __u16 dlen, void *data)
++{
++ struct sk_buff *skb, **frag;
++ l2cap_cmd_hdr *cmd;
++ l2cap_hdr *lh;
++ int len, count;
++
++ BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d", conn, code, ident, dlen);
++
++ len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen;
++ count = MIN(conn->mtu, len);
++
++ skb = bluez_skb_alloc(count, GFP_ATOMIC);
++ if (!skb)
++ return NULL;
++
++ lh = (l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
++ lh->len = __cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
++ lh->cid = __cpu_to_le16(0x0001);
++
++ cmd = (l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
++ cmd->code = code;
++ cmd->ident = ident;
++ cmd->len = __cpu_to_le16(dlen);
++
++ if (dlen) {
++ count -= L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE;
++ memcpy(skb_put(skb, count), data, count);
++ data += count;
++ }
++
++ len -= skb->len;
++
++ /* Continuation fragments (no L2CAP header) */
++ frag = &skb_shinfo(skb)->frag_list;
++ while (len) {
++ count = MIN(conn->mtu, len);
++
++ *frag = bluez_skb_alloc(count, GFP_ATOMIC);
++ if (!*frag)
++ goto fail;
++
++ memcpy(skb_put(*frag, count), data, count);
++
++ len -= count;
++ data += count;
++
++ frag = &(*frag)->next;
++ }
++
++ return skb;
++
++fail:
++ kfree_skb(skb);
++ return NULL;
++}
++
++static int l2cap_send_req(struct l2cap_conn *conn, __u8 code, __u16 len, void *data)
++{
++ __u8 ident = l2cap_get_ident(conn);
++ struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
++
++ BT_DBG("code 0x%2.2x", code);
++
++ if (!skb)
++ return -ENOMEM;
++ return hci_send_acl(conn->hcon, skb, 0);
++}
++
++static int l2cap_send_rsp(struct l2cap_conn *conn, __u8 ident, __u8 code, __u16 len, void *data)
++{
++ struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
++
++ BT_DBG("code 0x%2.2x", code);
++
++ if (!skb)
++ return -ENOMEM;
++ return hci_send_acl(conn->hcon, skb, 0);
++}
++
++static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen, unsigned long *val)
++{
++ l2cap_conf_opt *opt = *ptr;
++ int len;
++
++ len = L2CAP_CONF_OPT_SIZE + opt->len;
++ *ptr += len;
++
++ *type = opt->type;
++ *olen = opt->len;
++
++ switch (opt->len) {
++ case 1:
++ *val = *((__u8 *) opt->val);
++ break;
++
++ case 2:
++ *val = __le16_to_cpu(*((__u16 *)opt->val));
++ break;
++
++ case 4:
++ *val = __le32_to_cpu(*((__u32 *)opt->val));
++ break;
++
++ default:
++ *val = (unsigned long) opt->val;
++ break;
++ };
++
++ BT_DBG("type 0x%2.2x len %d val 0x%lx", *type, opt->len, *val);
++ return len;
++}
++
++static inline void l2cap_parse_conf_req(struct sock *sk, void *data, int len)
++{
++ int type, hint, olen;
++ unsigned long val;
++ void *ptr = data;
++
++ BT_DBG("sk %p len %d", sk, len);
++
++ while (len >= L2CAP_CONF_OPT_SIZE) {
++ len -= l2cap_get_conf_opt(&ptr, &type, &olen, &val);
++
++ hint = type & 0x80;
++ type &= 0x7f;
++
++ switch (type) {
++ case L2CAP_CONF_MTU:
++ l2cap_pi(sk)->conf_mtu = val;
++ break;
++
++ case L2CAP_CONF_FLUSH_TO:
++ l2cap_pi(sk)->flush_to = val;
++ break;
++
++ case L2CAP_CONF_QOS:
++ break;
++
++ default:
++ if (hint)
++ break;
++
++ /* FIXME: Reject unknown option */
++ break;
++ };
++ }
++}
++
++static void l2cap_add_conf_opt(void **ptr, __u8 type, __u8 len, unsigned long val)
++{
++ register l2cap_conf_opt *opt = *ptr;
++
++ BT_DBG("type 0x%2.2x len %d val 0x%lx", type, len, val);
++
++ opt->type = type;
++ opt->len = len;
++
++ switch (len) {
++ case 1:
++ *((__u8 *) opt->val) = val;
++ break;
++
++ case 2:
++ *((__u16 *) opt->val) = __cpu_to_le16(val);
++ break;
++
++ case 4:
++ *((__u32 *) opt->val) = __cpu_to_le32(val);
++ break;
++
++ default:
++ memcpy(opt->val, (void *) val, len);
++ break;
++ };
++
++ *ptr += L2CAP_CONF_OPT_SIZE + len;
++}
++
++static int l2cap_build_conf_req(struct sock *sk, void *data)
++{
++ struct l2cap_pinfo *pi = l2cap_pi(sk);
++ l2cap_conf_req *req = (l2cap_conf_req *) data;
++ void *ptr = req->data;
++
++ BT_DBG("sk %p", sk);
++
++ if (pi->imtu != L2CAP_DEFAULT_MTU)
++ l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->imtu);
++
++ /* FIXME. Need actual value of the flush timeout */
++ //if (flush_to != L2CAP_DEFAULT_FLUSH_TO)
++ // l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO, 2, pi->flush_to);
++
++ req->dcid = __cpu_to_le16(pi->dcid);
++ req->flags = __cpu_to_le16(0);
++
++ return ptr - data;
++}
++
++static inline int l2cap_conf_output(struct sock *sk, void **ptr)
++{
++ struct l2cap_pinfo *pi = l2cap_pi(sk);
++ int result = 0;
++
++ /* Configure output options and let the other side know
++ * which ones we don't like.
++ */
++ if (pi->conf_mtu < pi->omtu) {
++ l2cap_add_conf_opt(ptr, L2CAP_CONF_MTU, 2, pi->omtu);
++ result = L2CAP_CONF_UNACCEPT;
++ } else {
++ pi->omtu = pi->conf_mtu;
++ }
++
++ BT_DBG("sk %p result %d", sk, result);
++ return result;
++}
++
++static int l2cap_build_conf_rsp(struct sock *sk, void *data, int *result)
++{
++ l2cap_conf_rsp *rsp = (l2cap_conf_rsp *) data;
++ void *ptr = rsp->data;
++ u16 flags = 0;
++
++ BT_DBG("sk %p complete %d", sk, result ? 1 : 0);
++
++ if (result)
++ *result = l2cap_conf_output(sk, &ptr);
++ else
++ flags |= 0x0001;
++
++ rsp->scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ rsp->result = __cpu_to_le16(result ? *result : 0);
++ rsp->flags = __cpu_to_le16(flags);
++
++ return ptr - data;
++}
++
++static inline int l2cap_connect_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
++{
++ struct l2cap_chan_list *list = &conn->chan_list;
++ l2cap_conn_req *req = (l2cap_conn_req *) data;
++ l2cap_conn_rsp rsp;
++ struct sock *sk, *parent;
++ int result = 0, status = 0;
++
++ __u16 dcid = 0, scid = __le16_to_cpu(req->scid);
++ __u16 psm = req->psm;
++
++ BT_DBG("psm 0x%2.2x scid 0x%4.4x", psm, scid);
++
++ /* Check if we have socket listening on psm */
++ parent = l2cap_get_sock_by_psm(BT_LISTEN, psm, conn->src);
++ if (!parent) {
++ result = L2CAP_CR_BAD_PSM;
++ goto sendresp;
++ }
++
++ result = L2CAP_CR_NO_MEM;
++
++ /* Check for backlog size */
++ if (parent->ack_backlog > parent->max_ack_backlog) {
++ BT_DBG("backlog full %d", parent->ack_backlog);
++ goto response;
++ }
++
++ sk = l2cap_sock_alloc(NULL, BTPROTO_L2CAP, GFP_ATOMIC);
++ if (!sk)
++ goto response;
++
++ write_lock(&list->lock);
++
++ /* Check if we already have channel with that dcid */
++ if (__l2cap_get_chan_by_dcid(list, scid)) {
++ write_unlock(&list->lock);
++ sk->zapped = 1;
++ l2cap_sock_kill(sk);
++ goto response;
++ }
++
++ hci_conn_hold(conn->hcon);
++
++ l2cap_sock_init(sk, parent);
++ bacpy(&bluez_pi(sk)->src, conn->src);
++ bacpy(&bluez_pi(sk)->dst, conn->dst);
++ l2cap_pi(sk)->psm = psm;
++ l2cap_pi(sk)->dcid = scid;
++
++ __l2cap_chan_add(conn, sk, parent);
++ dcid = l2cap_pi(sk)->scid;
++
++ l2cap_sock_set_timer(sk, sk->sndtimeo);
++
++ /* Service level security */
++ result = L2CAP_CR_PEND;
++ status = L2CAP_CS_AUTHEN_PEND;
++ sk->state = BT_CONNECT2;
++ l2cap_pi(sk)->ident = cmd->ident;
++
++ if (l2cap_pi(sk)->link_mode & L2CAP_LM_ENCRYPT) {
++ if (!hci_conn_encrypt(conn->hcon))
++ goto done;
++ } else if (l2cap_pi(sk)->link_mode & L2CAP_LM_AUTH) {
++ if (!hci_conn_auth(conn->hcon))
++ goto done;
++ }
++
++ sk->state = BT_CONFIG;
++ result = status = 0;
++
++done:
++ write_unlock(&list->lock);
++
++response:
++ bh_unlock_sock(parent);
++
++sendresp:
++ rsp.scid = __cpu_to_le16(scid);
++ rsp.dcid = __cpu_to_le16(dcid);
++ rsp.result = __cpu_to_le16(result);
++ rsp.status = __cpu_to_le16(status);
++ l2cap_send_rsp(conn, cmd->ident, L2CAP_CONN_RSP, L2CAP_CONN_RSP_SIZE, &rsp);
++ return 0;
++}
++
++static inline int l2cap_connect_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
++{
++ l2cap_conn_rsp *rsp = (l2cap_conn_rsp *) data;
++ __u16 scid, dcid, result, status;
++ struct sock *sk;
++ char req[128];
++
++ scid = __le16_to_cpu(rsp->scid);
++ dcid = __le16_to_cpu(rsp->dcid);
++ result = __le16_to_cpu(rsp->result);
++ status = __le16_to_cpu(rsp->status);
++
++ BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x", dcid, scid, result, status);
++
++ if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
++ return -ENOENT;
++
++ switch (result) {
++ case L2CAP_CR_SUCCESS:
++ sk->state = BT_CONFIG;
++ l2cap_pi(sk)->dcid = dcid;
++ l2cap_pi(sk)->conf_state |= L2CAP_CONF_REQ_SENT;
++
++ l2cap_send_req(conn, L2CAP_CONF_REQ, l2cap_build_conf_req(sk, req), req);
++ break;
++
++ case L2CAP_CR_PEND:
++ break;
++
++ default:
++ l2cap_chan_del(sk, ECONNREFUSED);
++ break;
++ }
++
++ bh_unlock_sock(sk);
++ return 0;
++}
++
++static inline int l2cap_config_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
++{
++ l2cap_conf_req * req = (l2cap_conf_req *) data;
++ __u16 dcid, flags;
++ __u8 rsp[64];
++ struct sock *sk;
++ int result;
++
++ dcid = __le16_to_cpu(req->dcid);
++ flags = __le16_to_cpu(req->flags);
++
++ BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
++
++ if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid)))
++ return -ENOENT;
++
++ l2cap_parse_conf_req(sk, req->data, cmd->len - L2CAP_CONF_REQ_SIZE);
++
++ if (flags & 0x0001) {
++ /* Incomplete config. Send empty response. */
++ l2cap_send_rsp(conn, cmd->ident, L2CAP_CONF_RSP, l2cap_build_conf_rsp(sk, rsp, NULL), rsp);
++ goto unlock;
++ }
++
++ /* Complete config. */
++ l2cap_send_rsp(conn, cmd->ident, L2CAP_CONF_RSP, l2cap_build_conf_rsp(sk, rsp, &result), rsp);
++
++ if (result)
++ goto unlock;
++
++ /* Output config done */
++ l2cap_pi(sk)->conf_state |= L2CAP_CONF_OUTPUT_DONE;
++
++ if (l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE) {
++ sk->state = BT_CONNECTED;
++ l2cap_chan_ready(sk);
++ } else if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT)) {
++ char req[64];
++ l2cap_send_req(conn, L2CAP_CONF_REQ, l2cap_build_conf_req(sk, req), req);
++ }
++
++unlock:
++ bh_unlock_sock(sk);
++ return 0;
++}
++
++static inline int l2cap_config_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
++{
++ l2cap_conf_rsp *rsp = (l2cap_conf_rsp *)data;
++ __u16 scid, flags, result;
++ struct sock *sk;
++ int err = 0;
++
++ scid = __le16_to_cpu(rsp->scid);
++ flags = __le16_to_cpu(rsp->flags);
++ result = __le16_to_cpu(rsp->result);
++
++ BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x", scid, flags, result);
++
++ if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
++ return -ENOENT;
++
++ switch (result) {
++ case L2CAP_CONF_SUCCESS:
++ break;
++
++ case L2CAP_CONF_UNACCEPT:
++ if (++l2cap_pi(sk)->conf_retry < L2CAP_CONF_MAX_RETRIES) {
++ char req[128];
++ /*
++ It does not make sense to adjust L2CAP parameters
++ that are currently defined in the spec. We simply
++ resend config request that we sent earlier. It is
++ stupid :) but it helps qualification testing
++ which expects at least some response from us.
++ */
++ l2cap_send_req(conn, L2CAP_CONF_REQ,
++ l2cap_build_conf_req(sk, req), req);
++ goto done;
++ }
++ default:
++ sk->state = BT_DISCONN;
++ sk->err = ECONNRESET;
++ l2cap_sock_set_timer(sk, HZ * 5);
++ {
++ l2cap_disconn_req req;
++ req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ l2cap_send_req(conn, L2CAP_DISCONN_REQ, L2CAP_DISCONN_REQ_SIZE, &req);
++ }
++ goto done;
++ }
++
++ if (flags & 0x01)
++ goto done;
++
++ /* Input config done */
++ l2cap_pi(sk)->conf_state |= L2CAP_CONF_INPUT_DONE;
++
++ if (l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE) {
++ sk->state = BT_CONNECTED;
++ l2cap_chan_ready(sk);
++ }
++
++done:
++ bh_unlock_sock(sk);
++ return err;
++}
++
++static inline int l2cap_disconnect_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
++{
++ l2cap_disconn_req *req = (l2cap_disconn_req *) data;
++ l2cap_disconn_rsp rsp;
++ __u16 dcid, scid;
++ struct sock *sk;
++
++ scid = __le16_to_cpu(req->scid);
++ dcid = __le16_to_cpu(req->dcid);
++
++ BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
++
++ if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid)))
++ return 0;
++
++ rsp.dcid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ rsp.scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ l2cap_send_rsp(conn, cmd->ident, L2CAP_DISCONN_RSP, L2CAP_DISCONN_RSP_SIZE, &rsp);
++
++ sk->shutdown = SHUTDOWN_MASK;
++
++ l2cap_chan_del(sk, ECONNRESET);
++ bh_unlock_sock(sk);
++
++ l2cap_sock_kill(sk);
++ return 0;
++}
++
++static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
++{
++ l2cap_disconn_rsp *rsp = (l2cap_disconn_rsp *) data;
++ __u16 dcid, scid;
++ struct sock *sk;
++
++ scid = __le16_to_cpu(rsp->scid);
++ dcid = __le16_to_cpu(rsp->dcid);
++
++ BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
++
++ if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
++ return 0;
++ l2cap_chan_del(sk, 0);
++ bh_unlock_sock(sk);
++
++ l2cap_sock_kill(sk);
++ return 0;
++}
++
++static inline int l2cap_information_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, u8 *data)
++{
++ l2cap_info_req *req = (l2cap_info_req *) data;
++ l2cap_info_rsp rsp;
++ u16 type;
++
++ type = __le16_to_cpu(req->type);
++
++ BT_DBG("type 0x%4.4x", type);
++
++ rsp.type = __cpu_to_le16(type);
++ rsp.result = __cpu_to_le16(L2CAP_IR_NOTSUPP);
++ l2cap_send_rsp(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(rsp), &rsp);
++ return 0;
++}
++
++static inline int l2cap_information_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, u8 *data)
++{
++ l2cap_info_rsp *rsp = (l2cap_info_rsp *) data;
++ u16 type, result;
++
++ type = __le16_to_cpu(rsp->type);
++ result = __le16_to_cpu(rsp->result);
++
++ BT_DBG("type 0x%4.4x result 0x%2.2x", type, result);
++
++ return 0;
++}
++
++static inline void l2cap_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
++{
++ __u8 *data = skb->data;
++ int len = skb->len;
++ l2cap_cmd_hdr cmd;
++ int err = 0;
++
++ l2cap_raw_recv(conn, skb);
++
++ while (len >= L2CAP_CMD_HDR_SIZE) {
++ memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
++ data += L2CAP_CMD_HDR_SIZE;
++ len -= L2CAP_CMD_HDR_SIZE;
++
++ cmd.len = __le16_to_cpu(cmd.len);
++
++ BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd.len, cmd.ident);
++
++ if (cmd.len > len || !cmd.ident) {
++ BT_DBG("corrupted command");
++ break;
++ }
++
++ switch (cmd.code) {
++ case L2CAP_COMMAND_REJ:
++ /* FIXME: We should process this */
++ break;
++
++ case L2CAP_CONN_REQ:
++ err = l2cap_connect_req(conn, &cmd, data);
++ break;
++
++ case L2CAP_CONN_RSP:
++ err = l2cap_connect_rsp(conn, &cmd, data);
++ break;
++
++ case L2CAP_CONF_REQ:
++ err = l2cap_config_req(conn, &cmd, data);
++ break;
++
++ case L2CAP_CONF_RSP:
++ err = l2cap_config_rsp(conn, &cmd, data);
++ break;
++
++ case L2CAP_DISCONN_REQ:
++ err = l2cap_disconnect_req(conn, &cmd, data);
++ break;
++
++ case L2CAP_DISCONN_RSP:
++ err = l2cap_disconnect_rsp(conn, &cmd, data);
++ break;
++
++ case L2CAP_ECHO_REQ:
++ l2cap_send_rsp(conn, cmd.ident, L2CAP_ECHO_RSP, cmd.len, data);
++ break;
++
++ case L2CAP_ECHO_RSP:
++ break;
++
++ case L2CAP_INFO_REQ:
++ err = l2cap_information_req(conn, &cmd, data);
++ break;
++
++ case L2CAP_INFO_RSP:
++ err = l2cap_information_rsp(conn, &cmd, data);
++ break;
++
++ default:
++ BT_ERR("Unknown signaling command 0x%2.2x", cmd.code);
++ err = -EINVAL;
++ break;
++ };
++
++ if (err) {
++ l2cap_cmd_rej rej;
++ BT_DBG("error %d", err);
++
++ /* FIXME: Map err to a valid reason */
++ rej.reason = __cpu_to_le16(0);
++ l2cap_send_rsp(conn, cmd.ident, L2CAP_COMMAND_REJ, L2CAP_CMD_REJ_SIZE, &rej);
++ }
++
++ data += cmd.len;
++ len -= cmd.len;
++ }
++
++ kfree_skb(skb);
++}
++
++static inline int l2cap_data_channel(struct l2cap_conn *conn, __u16 cid, struct sk_buff *skb)
++{
++ struct sock *sk;
++
++ sk = l2cap_get_chan_by_scid(&conn->chan_list, cid);
++ if (!sk) {
++ BT_DBG("unknown cid 0x%4.4x", cid);
++ goto drop;
++ }
++
++ BT_DBG("sk %p, len %d", sk, skb->len);
++
++ if (sk->state != BT_CONNECTED)
++ goto drop;
++
++ if (l2cap_pi(sk)->imtu < skb->len)
++ goto drop;
++
++ /* If socket recv buffers overflows we drop data here
++ * which is *bad* because L2CAP has to be reliable.
++ * But we don't have any other choice. L2CAP doesn't
++ * provide flow control mechanism */
++
++ if (!sock_queue_rcv_skb(sk, skb))
++ goto done;
++
++drop:
++ kfree_skb(skb);
++
++done:
++ if (sk) bh_unlock_sock(sk);
++ return 0;
++}
++
++static inline int l2cap_conless_channel(struct l2cap_conn *conn, __u16 psm, struct sk_buff *skb)
++{
++ struct sock *sk;
++
++ sk = l2cap_get_sock_by_psm(0, psm, conn->src);
++ if (!sk)
++ goto drop;
++
++ BT_DBG("sk %p, len %d", sk, skb->len);
++
++ if (sk->state != BT_BOUND && sk->state != BT_CONNECTED)
++ goto drop;
++
++ if (l2cap_pi(sk)->imtu < skb->len)
++ goto drop;
++
++ if (!sock_queue_rcv_skb(sk, skb))
++ goto done;
++
++drop:
++ kfree_skb(skb);
++
++done:
++ if (sk) bh_unlock_sock(sk);
++ return 0;
++}
++
++static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
++{
++ l2cap_hdr *lh = (l2cap_hdr *) skb->data;
++ __u16 cid, psm, len;
++
++ skb_pull(skb, L2CAP_HDR_SIZE);
++ cid = __le16_to_cpu(lh->cid);
++ len = __le16_to_cpu(lh->len);
++
++ BT_DBG("len %d, cid 0x%4.4x", len, cid);
++
++ switch (cid) {
++ case 0x0001:
++ l2cap_sig_channel(conn, skb);
++ break;
++
++ case 0x0002:
++ psm = get_unaligned((__u16 *) skb->data);
++ skb_pull(skb, 2);
++ l2cap_conless_channel(conn, psm, skb);
++ break;
++
++ default:
++ l2cap_data_channel(conn, cid, skb);
++ break;
++ }
++}
++
++/* ------------ L2CAP interface with lower layer (HCI) ------------- */
++
++static int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
++{
++ int exact = 0, lm1 = 0, lm2 = 0;
++ register struct sock *sk;
++
++ if (type != ACL_LINK)
++ return 0;
++
++ BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
++
++ /* Find listening sockets and check their link_mode */
++ read_lock(&l2cap_sk_list.lock);
++ for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
++ if (sk->state != BT_LISTEN)
++ continue;
++
++ if (!bacmp(&bluez_pi(sk)->src, &hdev->bdaddr)) {
++ lm1 |= (HCI_LM_ACCEPT | l2cap_pi(sk)->link_mode);
++ exact++;
++ } else if (!bacmp(&bluez_pi(sk)->src, BDADDR_ANY))
++ lm2 |= (HCI_LM_ACCEPT | l2cap_pi(sk)->link_mode);
++ }
++ read_unlock(&l2cap_sk_list.lock);
++
++ return exact ? lm1 : lm2;
++}
++
++static int l2cap_connect_cfm(struct hci_conn *hcon, __u8 status)
++{
++ BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
++
++ if (hcon->type != ACL_LINK)
++ return 0;
++
++ if (!status) {
++ struct l2cap_conn *conn;
++
++ conn = l2cap_conn_add(hcon, status);
++ if (conn)
++ l2cap_conn_ready(conn);
++ } else
++ l2cap_conn_del(hcon, bterr(status));
++
++ return 0;
++}
++
++static int l2cap_disconn_ind(struct hci_conn *hcon, __u8 reason)
++{
++ BT_DBG("hcon %p reason %d", hcon, reason);
++
++ if (hcon->type != ACL_LINK)
++ return 0;
++
++ l2cap_conn_del(hcon, bterr(reason));
++ return 0;
++}
++
++static int l2cap_auth_cfm(struct hci_conn *hcon, __u8 status)
++{
++ struct l2cap_chan_list *l;
++ struct l2cap_conn *conn;
++ l2cap_conn_rsp rsp;
++ struct sock *sk;
++ int result;
++
++ if (!(conn = hcon->l2cap_data))
++ return 0;
++ l = &conn->chan_list;
++
++ BT_DBG("conn %p", conn);
++
++ read_lock(&l->lock);
++
++ for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
++ bh_lock_sock(sk);
++
++ if (sk->state != BT_CONNECT2 ||
++ (l2cap_pi(sk)->link_mode & L2CAP_LM_ENCRYPT)) {
++ bh_unlock_sock(sk);
++ continue;
++ }
++
++ if (!status) {
++ sk->state = BT_CONFIG;
++ result = 0;
++ } else {
++ sk->state = BT_DISCONN;
++ l2cap_sock_set_timer(sk, HZ/10);
++ result = L2CAP_CR_SEC_BLOCK;
++ }
++
++ rsp.scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ rsp.dcid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ rsp.result = __cpu_to_le16(result);
++ rsp.status = __cpu_to_le16(0);
++ l2cap_send_rsp(conn, l2cap_pi(sk)->ident, L2CAP_CONN_RSP,
++ L2CAP_CONN_RSP_SIZE, &rsp);
++
++ bh_unlock_sock(sk);
++ }
++
++ read_unlock(&l->lock);
++ return 0;
++}
++
++static int l2cap_encrypt_cfm(struct hci_conn *hcon, __u8 status)
++{
++ struct l2cap_chan_list *l;
++ struct l2cap_conn *conn;
++ l2cap_conn_rsp rsp;
++ struct sock *sk;
++ int result;
++
++ if (!(conn = hcon->l2cap_data))
++ return 0;
++ l = &conn->chan_list;
++
++ BT_DBG("conn %p", conn);
++
++ read_lock(&l->lock);
++
++ for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
++ bh_lock_sock(sk);
++
++ if (sk->state != BT_CONNECT2) {
++ bh_unlock_sock(sk);
++ continue;
++ }
++
++ if (!status) {
++ sk->state = BT_CONFIG;
++ result = 0;
++ } else {
++ sk->state = BT_DISCONN;
++ l2cap_sock_set_timer(sk, HZ/10);
++ result = L2CAP_CR_SEC_BLOCK;
++ }
++
++ rsp.scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ rsp.dcid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ rsp.result = __cpu_to_le16(result);
++ rsp.status = __cpu_to_le16(0);
++ l2cap_send_rsp(conn, l2cap_pi(sk)->ident, L2CAP_CONN_RSP,
++ L2CAP_CONN_RSP_SIZE, &rsp);
++
++ bh_unlock_sock(sk);
++ }
++
++ read_unlock(&l->lock);
++ return 0;
++}
++
++static int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, __u16 flags)
++{
++ struct l2cap_conn *conn = hcon->l2cap_data;
++
++ if (!conn && !(conn = l2cap_conn_add(hcon, 0)))
++ goto drop;
++
++ BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);
++
++ if (flags & ACL_START) {
++ l2cap_hdr *hdr;
++ int len;
++
++ if (conn->rx_len) {
++ BT_ERR("Unexpected start frame (len %d)", skb->len);
++ kfree_skb(conn->rx_skb);
++ conn->rx_skb = NULL;
++ conn->rx_len = 0;
++ l2cap_conn_unreliable(conn, ECOMM);
++ }
++
++ if (skb->len < 2) {
++ BT_ERR("Frame is too short (len %d)", skb->len);
++ l2cap_conn_unreliable(conn, ECOMM);
++ goto drop;
++ }
++
++ hdr = (l2cap_hdr *) skb->data;
++ len = __le16_to_cpu(hdr->len) + L2CAP_HDR_SIZE;
++
++ if (len == skb->len) {
++ /* Complete frame received */
++ l2cap_recv_frame(conn, skb);
++ return 0;
++ }
++
++ BT_DBG("Start: total len %d, frag len %d", len, skb->len);
++
++ if (skb->len > len) {
++ BT_ERR("Frame is too long (len %d, expected len %d)",
++ skb->len, len);
++ l2cap_conn_unreliable(conn, ECOMM);
++ goto drop;
++ }
++
++ /* Allocate skb for the complete frame including header */
++ conn->rx_skb = bluez_skb_alloc(len, GFP_ATOMIC);
++ if (!conn->rx_skb)
++ goto drop;
++
++ memcpy(skb_put(conn->rx_skb, skb->len), skb->data, skb->len);
++ conn->rx_len = len - skb->len;
++ } else {
++ BT_DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);
++
++ if (!conn->rx_len) {
++ BT_ERR("Unexpected continuation frame (len %d)", skb->len);
++ l2cap_conn_unreliable(conn, ECOMM);
++ goto drop;
++ }
++
++ if (skb->len > conn->rx_len) {
++ BT_ERR("Fragment is too long (len %d, expected %d)",
++ skb->len, conn->rx_len);
++ kfree_skb(conn->rx_skb);
++ conn->rx_skb = NULL;
++ conn->rx_len = 0;
++ l2cap_conn_unreliable(conn, ECOMM);
++ goto drop;
++ }
++
++ memcpy(skb_put(conn->rx_skb, skb->len), skb->data, skb->len);
++ conn->rx_len -= skb->len;
++
++ if (!conn->rx_len) {
++ /* Complete frame received */
++ l2cap_recv_frame(conn, conn->rx_skb);
++ conn->rx_skb = NULL;
++ }
++ }
++
++drop:
++ kfree_skb(skb);
++ return 0;
++}
++
++/* ----- Proc fs support ------ */
++static int l2cap_sock_dump(char *buf, struct bluez_sock_list *list)
++{
++ struct l2cap_pinfo *pi;
++ struct sock *sk;
++ char *ptr = buf;
++
++ read_lock_bh(&list->lock);
++
++ for (sk = list->head; sk; sk = sk->next) {
++ pi = l2cap_pi(sk);
++ ptr += sprintf(ptr, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d 0x%x\n",
++ batostr(&bluez_pi(sk)->src), batostr(&bluez_pi(sk)->dst),
++ sk->state, pi->psm, pi->scid, pi->dcid, pi->imtu, pi->omtu,
++ pi->link_mode);
++ }
++
++ read_unlock_bh(&list->lock);
++
++ ptr += sprintf(ptr, "\n");
++ return ptr - buf;
++}
++
++static int l2cap_read_proc(char *buf, char **start, off_t offset, int count, int *eof, void *priv)
++{
++ char *ptr = buf;
++ int len;
++
++ BT_DBG("count %d, offset %ld", count, offset);
++
++ ptr += l2cap_sock_dump(ptr, &l2cap_sk_list);
++ len = ptr - buf;
++
++ if (len <= count + offset)
++ *eof = 1;
++
++ *start = buf + offset;
++ len -= offset;
++
++ if (len > count)
++ len = count;
++ if (len < 0)
++ len = 0;
++
++ return len;
++}
++
++static struct proto_ops l2cap_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: l2cap_sock_release,
++ bind: l2cap_sock_bind,
++ connect: l2cap_sock_connect,
++ listen: l2cap_sock_listen,
++ accept: l2cap_sock_accept,
++ getname: l2cap_sock_getname,
++ sendmsg: l2cap_sock_sendmsg,
++ recvmsg: bluez_sock_recvmsg,
++ poll: bluez_sock_poll,
++ socketpair: sock_no_socketpair,
++ ioctl: sock_no_ioctl,
++ shutdown: l2cap_sock_shutdown,
++ setsockopt: l2cap_sock_setsockopt,
++ getsockopt: l2cap_sock_getsockopt,
++ mmap: sock_no_mmap
++};
++
++static struct net_proto_family l2cap_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: l2cap_sock_create
++};
++
++static struct hci_proto l2cap_hci_proto = {
++ name: "L2CAP",
++ id: HCI_PROTO_L2CAP,
++ connect_ind: l2cap_connect_ind,
++ connect_cfm: l2cap_connect_cfm,
++ disconn_ind: l2cap_disconn_ind,
++ recv_acldata: l2cap_recv_acldata,
++ auth_cfm: l2cap_auth_cfm,
++ encrypt_cfm: l2cap_encrypt_cfm
++};
++
++int __init l2cap_init(void)
++{
++ int err;
++
++ if ((err = bluez_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops))) {
++ BT_ERR("Can't register L2CAP socket");
++ return err;
++ }
++
++ if ((err = hci_register_proto(&l2cap_hci_proto))) {
++ BT_ERR("Can't register L2CAP protocol");
++ return err;
++ }
++
++ create_proc_read_entry("bluetooth/l2cap", 0, 0, l2cap_read_proc, NULL);
++
++ BT_INFO("BlueZ L2CAP ver %s Copyright (C) 2000,2001 Qualcomm Inc", VERSION);
++ BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
++ return 0;
++}
++
++void l2cap_cleanup(void)
++{
++ remove_proc_entry("bluetooth/l2cap", NULL);
++
++ /* Unregister socket and protocol */
++ if (bluez_sock_unregister(BTPROTO_L2CAP))
++ BT_ERR("Can't unregister L2CAP socket");
++
++ if (hci_unregister_proto(&l2cap_hci_proto))
++ BT_ERR("Can't unregister L2CAP protocol");
++}
++
++void l2cap_load(void)
++{
++ /* Dummy function to trigger automatic L2CAP module loading by
++ other modules that use L2CAP sockets but do not use any other
++ symbols from it. */
++ return;
++}
++
++EXPORT_SYMBOL(l2cap_load);
++
++module_init(l2cap_init);
++module_exit(l2cap_cleanup);
++
++MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
++MODULE_DESCRIPTION("BlueZ L2CAP ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/l2cap_core.c linux-2.4.18-mh15/net/bluetooth/l2cap_core.c
+--- linux-2.4.18/net/bluetooth/l2cap_core.c 2001-09-30 21:26:08.000000000 +0200
++++ linux-2.4.18-mh15/net/bluetooth/l2cap_core.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,2316 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * BlueZ L2CAP core and sockets.
+- *
+- * $Id: l2cap_core.c,v 1.19 2001/08/03 04:19:50 maxk Exp $
+- */
+-#define VERSION "1.1"
+-
+-#include <linux/config.h>
+-#include <linux/module.h>
+-
+-#include <linux/types.h>
+-#include <linux/errno.h>
+-#include <linux/kernel.h>
+-#include <linux/major.h>
+-#include <linux/sched.h>
+-#include <linux/slab.h>
+-#include <linux/poll.h>
+-#include <linux/fcntl.h>
+-#include <linux/init.h>
+-#include <linux/skbuff.h>
+-#include <linux/interrupt.h>
+-#include <linux/socket.h>
+-#include <linux/skbuff.h>
+-#include <linux/proc_fs.h>
+-#include <linux/list.h>
+-#include <net/sock.h>
+-
+-#include <asm/system.h>
+-#include <asm/uaccess.h>
+-
+-#include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+-#include <net/bluetooth/hci_core.h>
+-#include <net/bluetooth/l2cap.h>
+-#include <net/bluetooth/l2cap_core.h>
+-
+-#ifndef L2CAP_DEBUG
+-#undef DBG
+-#define DBG( A... )
+-#endif
+-
+-struct proto_ops l2cap_sock_ops;
+-
+-struct bluez_sock_list l2cap_sk_list = {
+- lock: RW_LOCK_UNLOCKED
+-};
+-
+-struct list_head l2cap_iff_list = LIST_HEAD_INIT(l2cap_iff_list);
+-rwlock_t l2cap_rt_lock = RW_LOCK_UNLOCKED;
+-
+-static int l2cap_conn_del(struct l2cap_conn *conn, int err);
+-
+-static inline void l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent);
+-static void l2cap_chan_del(struct sock *sk, int err);
+-static int l2cap_chan_send(struct sock *sk, struct msghdr *msg, int len);
+-
+-static void l2cap_sock_close(struct sock *sk);
+-static void l2cap_sock_kill(struct sock *sk);
+-
+-static int l2cap_send_req(struct l2cap_conn *conn, __u8 code, __u16 len, void *data);
+-static int l2cap_send_rsp(struct l2cap_conn *conn, __u8 ident, __u8 code, __u16 len, void *data);
+-
+-/* -------- L2CAP interfaces & routing --------- */
+-/* Add/delete L2CAP interface.
+- * Must be called with locked rt_lock
+- */
+-
+-static void l2cap_iff_add(struct hci_dev *hdev)
+-{
+- struct l2cap_iff *iff;
+-
+- DBG("%s", hdev->name);
+-
+- DBG("iff_list %p next %p prev %p", &l2cap_iff_list, l2cap_iff_list.next, l2cap_iff_list.prev);
+-
+- /* Allocate new interface and lock HCI device */
+- if (!(iff = kmalloc(sizeof(struct l2cap_iff), GFP_KERNEL))) {
+- ERR("Can't allocate new interface %s", hdev->name);
+- return;
+- }
+- memset(iff, 0, sizeof(struct l2cap_iff));
+-
+- hci_dev_hold(hdev);
+- hdev->l2cap_data = iff;
+- iff->hdev = hdev;
+- iff->mtu = hdev->acl_mtu - HCI_ACL_HDR_SIZE;
+- iff->bdaddr = &hdev->bdaddr;
+-
+- spin_lock_init(&iff->lock);
+- INIT_LIST_HEAD(&iff->conn_list);
+-
+- list_add(&iff->list, &l2cap_iff_list);
+-}
+-
+-static void l2cap_iff_del(struct hci_dev *hdev)
+-{
+- struct l2cap_iff *iff;
+-
+- if (!(iff = hdev->l2cap_data))
+- return;
+-
+- DBG("%s iff %p", hdev->name, iff);
+-
+- list_del(&iff->list);
+-
+- l2cap_iff_lock(iff);
+-
+- /* Drop connections */
+- while (!list_empty(&iff->conn_list)) {
+- struct l2cap_conn *c;
+-
+- c = list_entry(iff->conn_list.next, struct l2cap_conn, list);
+- l2cap_conn_del(c, ENODEV);
+- }
+-
+- l2cap_iff_unlock(iff);
+-
+- /* Unlock HCI device */
+- hdev->l2cap_data = NULL;
+- hci_dev_put(hdev);
+-
+- kfree(iff);
+-}
+-
+-/* Get route. Returns L2CAP interface.
+- * Must be called with locked rt_lock
+- */
+-static struct l2cap_iff *l2cap_get_route(bdaddr_t *src, bdaddr_t *dst)
+-{
+- struct list_head *p;
+- int use_src;
+-
+- DBG("%s -> %s", batostr(src), batostr(dst));
+-
+- use_src = bacmp(src, BDADDR_ANY) ? 0 : 1;
+-
+- /* Simple routing:
+- * No source address - find interface with bdaddr != dst
+- * Source address - find interface with bdaddr == src
+- */
+-
+- list_for_each(p, &l2cap_iff_list) {
+- struct l2cap_iff *iff;
+-
+- iff = list_entry(p, struct l2cap_iff, list);
+-
+- if (use_src && !bacmp(iff->bdaddr, src))
+- return iff;
+- else if (bacmp(iff->bdaddr, dst))
+- return iff;
+- }
+- return NULL;
+-}
+-
+-/* ----- L2CAP timers ------ */
+-static void l2cap_sock_timeout(unsigned long arg)
+-{
+- struct sock *sk = (struct sock *) arg;
+-
+- DBG("sock %p state %d", sk, sk->state);
+-
+- bh_lock_sock(sk);
+- switch (sk->state) {
+- case BT_DISCONN:
+- l2cap_chan_del(sk, ETIMEDOUT);
+- break;
+-
+- default:
+- sk->err = ETIMEDOUT;
+- sk->state_change(sk);
+- break;
+- };
+- bh_unlock_sock(sk);
+-
+- l2cap_sock_kill(sk);
+- sock_put(sk);
+-}
+-
+-static void l2cap_sock_set_timer(struct sock *sk, long timeout)
+-{
+- DBG("sock %p state %d timeout %ld", sk, sk->state, timeout);
+-
+- if (!mod_timer(&sk->timer, jiffies + timeout))
+- sock_hold(sk);
+-}
+-
+-static void l2cap_sock_clear_timer(struct sock *sk)
+-{
+- DBG("sock %p state %d", sk, sk->state);
+-
+- if (timer_pending(&sk->timer) && del_timer(&sk->timer))
+- __sock_put(sk);
+-}
+-
+-static void l2cap_sock_init_timer(struct sock *sk)
+-{
+- init_timer(&sk->timer);
+- sk->timer.function = l2cap_sock_timeout;
+- sk->timer.data = (unsigned long)sk;
+-}
+-
+-static void l2cap_conn_timeout(unsigned long arg)
+-{
+- struct l2cap_conn *conn = (void *)arg;
+-
+- DBG("conn %p state %d", conn, conn->state);
+-
+- if (conn->state == BT_CONNECTED) {
+- hci_disconnect(conn->hconn, 0x13);
+- }
+-
+- return;
+-}
+-
+-static void l2cap_conn_set_timer(struct l2cap_conn *conn, long timeout)
+-{
+- DBG("conn %p state %d timeout %ld", conn, conn->state, timeout);
+-
+- mod_timer(&conn->timer, jiffies + timeout);
+-}
+-
+-static void l2cap_conn_clear_timer(struct l2cap_conn *conn)
+-{
+- DBG("conn %p state %d", conn, conn->state);
+-
+- del_timer(&conn->timer);
+-}
+-
+-static void l2cap_conn_init_timer(struct l2cap_conn *conn)
+-{
+- init_timer(&conn->timer);
+- conn->timer.function = l2cap_conn_timeout;
+- conn->timer.data = (unsigned long)conn;
+-}
+-
+-/* -------- L2CAP connections --------- */
+-/* Add new connection to the interface.
+- * Interface must be locked
+- */
+-static struct l2cap_conn *l2cap_conn_add(struct l2cap_iff *iff, bdaddr_t *dst)
+-{
+- struct l2cap_conn *conn;
+- bdaddr_t *src = iff->bdaddr;
+-
+- if (!(conn = kmalloc(sizeof(struct l2cap_conn), GFP_KERNEL)))
+- return NULL;
+-
+- memset(conn, 0, sizeof(struct l2cap_conn));
+-
+- conn->state = BT_OPEN;
+- conn->iff = iff;
+- bacpy(&conn->src, src);
+- bacpy(&conn->dst, dst);
+-
+- spin_lock_init(&conn->lock);
+- conn->chan_list.lock = RW_LOCK_UNLOCKED;
+-
+- l2cap_conn_init_timer(conn);
+-
+- __l2cap_conn_link(iff, conn);
+-
+- DBG("%s -> %s, %p", batostr(src), batostr(dst), conn);
+-
+- MOD_INC_USE_COUNT;
+-
+- return conn;
+-}
+-
+-/* Delete connection on the interface.
+- * Interface must be locked
+- */
+-static int l2cap_conn_del(struct l2cap_conn *conn, int err)
+-{
+- struct sock *sk;
+-
+- DBG("conn %p, state %d, err %d", conn, conn->state, err);
+-
+- l2cap_conn_clear_timer(conn);
+- __l2cap_conn_unlink(conn->iff, conn);
+-
+- conn->state = BT_CLOSED;
+-
+- if (conn->rx_skb)
+- kfree_skb(conn->rx_skb);
+-
+- /* Kill channels */
+- while ((sk = conn->chan_list.head)) {
+- bh_lock_sock(sk);
+- l2cap_sock_clear_timer(sk);
+- l2cap_chan_del(sk, err);
+- bh_unlock_sock(sk);
+-
+- l2cap_sock_kill(sk);
+- }
+-
+- kfree(conn);
+-
+- MOD_DEC_USE_COUNT;
+- return 0;
+-}
+-
+-static inline struct l2cap_conn *l2cap_get_conn_by_addr(struct l2cap_iff *iff, bdaddr_t *dst)
+-{
+- struct list_head *p;
+-
+- list_for_each(p, &iff->conn_list) {
+- struct l2cap_conn *c;
+-
+- c = list_entry(p, struct l2cap_conn, list);
+- if (!bacmp(&c->dst, dst))
+- return c;
+- }
+- return NULL;
+-}
+-
+-int l2cap_connect(struct sock *sk)
+-{
+- bdaddr_t *src = &l2cap_pi(sk)->src;
+- bdaddr_t *dst = &l2cap_pi(sk)->dst;
+- struct l2cap_conn *conn;
+- struct l2cap_iff *iff;
+- int err = 0;
+-
+- DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst), l2cap_pi(sk)->psm);
+-
+- read_lock_bh(&l2cap_rt_lock);
+-
+- /* Get route to remote BD address */
+- if (!(iff = l2cap_get_route(src, dst))) {
+- err = -EHOSTUNREACH;
+- goto done;
+- }
+-
+- /* Update source addr of the socket */
+- bacpy(src, iff->bdaddr);
+-
+- l2cap_iff_lock(iff);
+-
+- if (!(conn = l2cap_get_conn_by_addr(iff, dst))) {
+- /* Connection doesn't exist */
+- if (!(conn = l2cap_conn_add(iff, dst))) {
+- l2cap_iff_unlock(iff);
+- err = -ENOMEM;
+- goto done;
+- }
+- conn->out = 1;
+- }
+-
+- l2cap_iff_unlock(iff);
+-
+- l2cap_chan_add(conn, sk, NULL);
+-
+- sk->state = BT_CONNECT;
+- l2cap_sock_set_timer(sk, sk->sndtimeo);
+-
+- switch (conn->state) {
+- case BT_CONNECTED:
+- if (sk->type == SOCK_SEQPACKET) {
+- l2cap_conn_req req;
+- req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- req.psm = l2cap_pi(sk)->psm;
+- l2cap_send_req(conn, L2CAP_CONN_REQ, L2CAP_CONN_REQ_SIZE, &req);
+- } else {
+- l2cap_sock_clear_timer(sk);
+- sk->state = BT_CONNECTED;
+- }
+- break;
+-
+- case BT_CONNECT:
+- break;
+-
+- default:
+- /* Create ACL connection */
+- conn->state = BT_CONNECT;
+- hci_connect(iff->hdev, dst);
+- break;
+- };
+-
+-done:
+- read_unlock_bh(&l2cap_rt_lock);
+- return err;
+-}
+-
+-/* ------ Channel queues for listening sockets ------ */
+-void l2cap_accept_queue(struct sock *parent, struct sock *sk)
+-{
+- struct l2cap_accept_q *q = &l2cap_pi(parent)->accept_q;
+-
+- DBG("parent %p, sk %p", parent, sk);
+-
+- sock_hold(sk);
+- l2cap_pi(sk)->parent = parent;
+- l2cap_pi(sk)->next_q = NULL;
+-
+- if (!q->head) {
+- q->head = q->tail = sk;
+- } else {
+- struct sock *tail = q->tail;
+-
+- l2cap_pi(sk)->prev_q = tail;
+- l2cap_pi(tail)->next_q = sk;
+- q->tail = sk;
+- }
+-
+- parent->ack_backlog++;
+-}
+-
+-void l2cap_accept_unlink(struct sock *sk)
+-{
+- struct sock *parent = l2cap_pi(sk)->parent;
+- struct l2cap_accept_q *q = &l2cap_pi(parent)->accept_q;
+- struct sock *next, *prev;
+-
+- DBG("sk %p", sk);
+-
+- next = l2cap_pi(sk)->next_q;
+- prev = l2cap_pi(sk)->prev_q;
+-
+- if (sk == q->head)
+- q->head = next;
+- if (sk == q->tail)
+- q->tail = prev;
+-
+- if (next)
+- l2cap_pi(next)->prev_q = prev;
+- if (prev)
+- l2cap_pi(prev)->next_q = next;
+-
+- l2cap_pi(sk)->parent = NULL;
+-
+- parent->ack_backlog--;
+- __sock_put(sk);
+-}
+-
+-/* Get next connected channel in queue. */
+-struct sock *l2cap_accept_dequeue(struct sock *parent, int state)
+-{
+- struct l2cap_accept_q *q = &l2cap_pi(parent)->accept_q;
+- struct sock *sk;
+-
+- for (sk = q->head; sk; sk = l2cap_pi(sk)->next_q) {
+- if (!state || sk->state == state) {
+- l2cap_accept_unlink(sk);
+- break;
+- }
+- }
+-
+- DBG("parent %p, sk %p", parent, sk);
+-
+- return sk;
+-}
+-
+-/* -------- Socket interface ---------- */
+-static struct sock *__l2cap_get_sock_by_addr(struct sockaddr_l2 *addr)
+-{
+- bdaddr_t *src = &addr->l2_bdaddr;
+- __u16 psm = addr->l2_psm;
+- struct sock *sk;
+-
+- for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
+- if (l2cap_pi(sk)->psm == psm &&
+- !bacmp(&l2cap_pi(sk)->src, src))
+- break;
+- }
+-
+- return sk;
+-}
+-
+-/* Find socket listening on psm and source bdaddr.
+- * Returns closest match.
+- */
+-static struct sock *l2cap_get_sock_listen(bdaddr_t *src, __u16 psm)
+-{
+- struct sock *sk, *sk1 = NULL;
+-
+- read_lock(&l2cap_sk_list.lock);
+-
+- for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
+- struct l2cap_pinfo *pi;
+-
+- if (sk->state != BT_LISTEN)
+- continue;
+-
+- pi = l2cap_pi(sk);
+-
+- if (pi->psm == psm) {
+- /* Exact match. */
+- if (!bacmp(&pi->src, src))
+- break;
+-
+- /* Closest match */
+- if (!bacmp(&pi->src, BDADDR_ANY))
+- sk1 = sk;
+- }
+- }
+-
+- read_unlock(&l2cap_sk_list.lock);
+-
+- return sk ? sk : sk1;
+-}
+-
+-static void l2cap_sock_destruct(struct sock *sk)
+-{
+- DBG("sk %p", sk);
+-
+- skb_queue_purge(&sk->receive_queue);
+- skb_queue_purge(&sk->write_queue);
+-
+- MOD_DEC_USE_COUNT;
+-}
+-
+-static void l2cap_sock_cleanup_listen(struct sock *parent)
+-{
+- struct sock *sk;
+-
+- DBG("parent %p", parent);
+-
+- /* Close not yet accepted channels */
+- while ((sk = l2cap_accept_dequeue(parent, 0)))
+- l2cap_sock_close(sk);
+-
+- parent->state = BT_CLOSED;
+- parent->zapped = 1;
+-}
+-
+-/* Kill socket (only if zapped and orphan)
+- * Must be called on unlocked socket.
+- */
+-static void l2cap_sock_kill(struct sock *sk)
+-{
+- if (!sk->zapped || sk->socket)
+- return;
+-
+- DBG("sk %p state %d", sk, sk->state);
+-
+- /* Kill poor orphan */
+- bluez_sock_unlink(&l2cap_sk_list, sk);
+- sk->dead = 1;
+- sock_put(sk);
+-}
+-
+-/* Close socket.
+- * Must be called on unlocked socket.
+- */
+-static void l2cap_sock_close(struct sock *sk)
+-{
+- struct l2cap_conn *conn;
+-
+- l2cap_sock_clear_timer(sk);
+-
+- lock_sock(sk);
+-
+- conn = l2cap_pi(sk)->conn;
+-
+- DBG("sk %p state %d conn %p socket %p", sk, sk->state, conn, sk->socket);
+-
+- switch (sk->state) {
+- case BT_LISTEN:
+- l2cap_sock_cleanup_listen(sk);
+- break;
+-
+- case BT_CONNECTED:
+- case BT_CONFIG:
+- if (sk->type == SOCK_SEQPACKET) {
+- l2cap_disconn_req req;
+-
+- sk->state = BT_DISCONN;
+-
+- req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+- req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- l2cap_send_req(conn, L2CAP_DISCONN_REQ, L2CAP_DISCONN_REQ_SIZE, &req);
+-
+- l2cap_sock_set_timer(sk, sk->sndtimeo);
+- } else {
+- l2cap_chan_del(sk, ECONNRESET);
+- }
+- break;
+-
+- case BT_CONNECT:
+- case BT_DISCONN:
+- l2cap_chan_del(sk, ECONNRESET);
+- break;
+-
+- default:
+- sk->zapped = 1;
+- break;
+- };
+-
+- release_sock(sk);
+-
+- l2cap_sock_kill(sk);
+-}
+-
+-static void l2cap_sock_init(struct sock *sk, struct sock *parent)
+-{
+- struct l2cap_pinfo *pi = l2cap_pi(sk);
+-
+- DBG("sk %p", sk);
+-
+- if (parent) {
+- sk->type = parent->type;
+-
+- pi->imtu = l2cap_pi(parent)->imtu;
+- pi->omtu = l2cap_pi(parent)->omtu;
+- } else {
+- pi->imtu = L2CAP_DEFAULT_MTU;
+- pi->omtu = 0;
+- }
+-
+- /* Default config options */
+- pi->conf_mtu = L2CAP_DEFAULT_MTU;
+- pi->flush_to = L2CAP_DEFAULT_FLUSH_TO;
+-}
+-
+-static struct sock *l2cap_sock_alloc(struct socket *sock, int proto, int prio)
+-{
+- struct sock *sk;
+-
+- if (!(sk = sk_alloc(PF_BLUETOOTH, prio, 1)))
+- return NULL;
+-
+- sock_init_data(sock, sk);
+-
+- sk->zapped = 0;
+-
+- sk->destruct = l2cap_sock_destruct;
+- sk->sndtimeo = L2CAP_CONN_TIMEOUT;
+-
+- sk->protocol = proto;
+- sk->state = BT_OPEN;
+-
+- l2cap_sock_init_timer(sk);
+-
+- bluez_sock_link(&l2cap_sk_list, sk);
+-
+- MOD_INC_USE_COUNT;
+-
+- return sk;
+-}
+-
+-static int l2cap_sock_create(struct socket *sock, int protocol)
+-{
+- struct sock *sk;
+-
+- DBG("sock %p", sock);
+-
+- sock->state = SS_UNCONNECTED;
+-
+- if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_RAW)
+- return -ESOCKTNOSUPPORT;
+-
+- sock->ops = &l2cap_sock_ops;
+-
+- if (!(sk = l2cap_sock_alloc(sock, protocol, GFP_KERNEL)))
+- return -ENOMEM;
+-
+- l2cap_sock_init(sk, NULL);
+-
+- return 0;
+-}
+-
+-static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
+-{
+- struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
+- struct sock *sk = sock->sk;
+- int err = 0;
+-
+- DBG("sk %p, %s %d", sk, batostr(&la->l2_bdaddr), la->l2_psm);
+-
+- if (!addr || addr->sa_family != AF_BLUETOOTH)
+- return -EINVAL;
+-
+- lock_sock(sk);
+-
+- if (sk->state != BT_OPEN) {
+- err = -EBADFD;
+- goto done;
+- }
+-
+- write_lock(&l2cap_sk_list.lock);
+-
+- if (la->l2_psm && __l2cap_get_sock_by_addr(la)) {
+- err = -EADDRINUSE;
+- goto unlock;
+- }
+-
+- /* Save source address */
+- bacpy(&l2cap_pi(sk)->src, &la->l2_bdaddr);
+- l2cap_pi(sk)->psm = la->l2_psm;
+- sk->state = BT_BOUND;
+-
+-unlock:
+- write_unlock(&l2cap_sk_list.lock);
+-
+-done:
+- release_sock(sk);
+-
+- return err;
+-}
+-
+-static int l2cap_sock_w4_connect(struct sock *sk, int flags)
+-{
+- DECLARE_WAITQUEUE(wait, current);
+- long timeo = sock_sndtimeo(sk, flags & O_NONBLOCK);
+- int err = 0;
+-
+- DBG("sk %p", sk);
+-
+- add_wait_queue(sk->sleep, &wait);
+- current->state = TASK_INTERRUPTIBLE;
+-
+- while (sk->state != BT_CONNECTED) {
+- if (!timeo) {
+- err = -EAGAIN;
+- break;
+- }
+-
+- release_sock(sk);
+- timeo = schedule_timeout(timeo);
+- lock_sock(sk);
+-
+- err = 0;
+- if (sk->state == BT_CONNECTED)
+- break;
+-
+- if (sk->err) {
+- err = sock_error(sk);
+- break;
+- }
+-
+- if (signal_pending(current)) {
+- err = sock_intr_errno(timeo);
+- break;
+- }
+- }
+- current->state = TASK_RUNNING;
+- remove_wait_queue(sk->sleep, &wait);
+-
+- return err;
+-}
+-
+-static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
+-{
+- struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
+- struct sock *sk = sock->sk;
+- int err = 0;
+-
+- lock_sock(sk);
+-
+- DBG("sk %p", sk);
+-
+- if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_l2)) {
+- err = -EINVAL;
+- goto done;
+- }
+-
+- if (sk->state != BT_OPEN && sk->state != BT_BOUND) {
+- err = -EBADFD;
+- goto done;
+- }
+-
+- if (sk->type == SOCK_SEQPACKET && !la->l2_psm) {
+- err = -EINVAL;
+- goto done;
+- }
+-
+- /* Set destination address and psm */
+- bacpy(&l2cap_pi(sk)->dst, &la->l2_bdaddr);
+- l2cap_pi(sk)->psm = la->l2_psm;
+-
+- if ((err = l2cap_connect(sk)))
+- goto done;
+-
+- err = l2cap_sock_w4_connect(sk, flags);
+-
+-done:
+- release_sock(sk);
+- return err;
+-}
+-
+-int l2cap_sock_listen(struct socket *sock, int backlog)
+-{
+- struct sock *sk = sock->sk;
+- int err = 0;
+-
+- DBG("sk %p backlog %d", sk, backlog);
+-
+- lock_sock(sk);
+-
+- if (sk->state != BT_BOUND || sock->type != SOCK_SEQPACKET) {
+- err = -EBADFD;
+- goto done;
+- }
+-
+- if (!l2cap_pi(sk)->psm) {
+- err = -EINVAL;
+- goto done;
+- }
+-
+- sk->max_ack_backlog = backlog;
+- sk->ack_backlog = 0;
+- sk->state = BT_LISTEN;
+-
+-done:
+- release_sock(sk);
+- return err;
+-}
+-
+-int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags)
+-{
+- DECLARE_WAITQUEUE(wait, current);
+- struct sock *sk = sock->sk, *ch;
+- long timeo;
+- int err = 0;
+-
+- lock_sock(sk);
+-
+- if (sk->state != BT_LISTEN) {
+- err = -EBADFD;
+- goto done;
+- }
+-
+- timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
+-
+- DBG("sk %p timeo %ld", sk, timeo);
+-
+- /* Wait for an incoming connection. (wake-one). */
+- add_wait_queue_exclusive(sk->sleep, &wait);
+- current->state = TASK_INTERRUPTIBLE;
+- while (!(ch = l2cap_accept_dequeue(sk, BT_CONNECTED))) {
+- if (!timeo) {
+- err = -EAGAIN;
+- break;
+- }
+-
+- release_sock(sk);
+- timeo = schedule_timeout(timeo);
+- lock_sock(sk);
+-
+- if (sk->state != BT_LISTEN) {
+- err = -EBADFD;
+- break;
+- }
+-
+- if (signal_pending(current)) {
+- err = sock_intr_errno(timeo);
+- break;
+- }
+- }
+- current->state = TASK_RUNNING;
+- remove_wait_queue(sk->sleep, &wait);
+-
+- if (err)
+- goto done;
+-
+- sock_graft(ch, newsock);
+- newsock->state = SS_CONNECTED;
+-
+- DBG("new socket %p", ch);
+-
+-done:
+- release_sock(sk);
+-
+- return err;
+-}
+-
+-static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
+-{
+- struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
+- struct sock *sk = sock->sk;
+-
+- DBG("sock %p, sk %p", sock, sk);
+-
+- addr->sa_family = AF_BLUETOOTH;
+- *len = sizeof(struct sockaddr_l2);
+-
+- if (peer)
+- bacpy(&la->l2_bdaddr, &l2cap_pi(sk)->dst);
+- else
+- bacpy(&la->l2_bdaddr, &l2cap_pi(sk)->src);
+-
+- la->l2_psm = l2cap_pi(sk)->psm;
+-
+- return 0;
+-}
+-
+-static int l2cap_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct scm_cookie *scm)
+-{
+- struct sock *sk = sock->sk;
+- int err = 0;
+-
+- DBG("sock %p, sk %p", sock, sk);
+-
+- if (sk->err)
+- return sock_error(sk);
+-
+- if (msg->msg_flags & MSG_OOB)
+- return -EOPNOTSUPP;
+-
+- lock_sock(sk);
+-
+- if (sk->state == BT_CONNECTED)
+- err = l2cap_chan_send(sk, msg, len);
+- else
+- err = -ENOTCONN;
+-
+- release_sock(sk);
+- return err;
+-}
+-
+-static int l2cap_sock_recvmsg(struct socket *sock, struct msghdr *msg, int len, int flags, struct scm_cookie *scm)
+-{
+- struct sock *sk = sock->sk;
+- int noblock = flags & MSG_DONTWAIT;
+- int copied, err;
+- struct sk_buff *skb;
+-
+- DBG("sock %p, sk %p", sock, sk);
+-
+- if (flags & (MSG_OOB))
+- return -EOPNOTSUPP;
+-
+- if (sk->state == BT_CLOSED)
+- return 0;
+-
+- if (!(skb = skb_recv_datagram(sk, flags, noblock, &err)))
+- return err;
+-
+- msg->msg_namelen = 0;
+-
+- copied = skb->len;
+- if (len < copied) {
+- msg->msg_flags |= MSG_TRUNC;
+- copied = len;
+- }
+-
+- skb->h.raw = skb->data;
+- err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+-
+- skb_free_datagram(sk, skb);
+-
+- return err ? : copied;
+-}
+-
+-int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, int optlen)
+-{
+- struct sock *sk = sock->sk;
+- struct l2cap_options opts;
+- int err = 0;
+-
+- DBG("sk %p", sk);
+-
+- lock_sock(sk);
+-
+- switch (optname) {
+- case L2CAP_OPTIONS:
+- if (copy_from_user((char *)&opts, optval, optlen)) {
+- err = -EFAULT;
+- break;
+- }
+- l2cap_pi(sk)->imtu = opts.imtu;
+- l2cap_pi(sk)->omtu = opts.omtu;
+- break;
+-
+- default:
+- err = -ENOPROTOOPT;
+- break;
+- };
+-
+- release_sock(sk);
+- return err;
+-}
+-
+-int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, char *optval, int *optlen)
+-{
+- struct sock *sk = sock->sk;
+- struct l2cap_options opts;
+- struct l2cap_conninfo cinfo;
+- int len, err = 0;
+-
+- if (get_user(len, optlen))
+- return -EFAULT;
+-
+- lock_sock(sk);
+-
+- switch (optname) {
+- case L2CAP_OPTIONS:
+- opts.imtu = l2cap_pi(sk)->imtu;
+- opts.omtu = l2cap_pi(sk)->omtu;
+- opts.flush_to = l2cap_pi(sk)->flush_to;
+-
+- len = MIN(len, sizeof(opts));
+- if (copy_to_user(optval, (char *)&opts, len))
+- err = -EFAULT;
+-
+- break;
+-
+- case L2CAP_CONNINFO:
+- if (sk->state != BT_CONNECTED) {
+- err = -ENOTCONN;
+- break;
+- }
+-
+- cinfo.hci_handle = l2cap_pi(sk)->conn->hconn->handle;
+-
+- len = MIN(len, sizeof(cinfo));
+- if (copy_to_user(optval, (char *)&cinfo, len))
+- err = -EFAULT;
+-
+- break;
+-
+- default:
+- err = -ENOPROTOOPT;
+- break;
+- };
+-
+- release_sock(sk);
+- return err;
+-}
+-
+-static unsigned int l2cap_sock_poll(struct file * file, struct socket *sock, poll_table *wait)
+-{
+- struct sock *sk = sock->sk;
+- struct l2cap_accept_q *aq;
+- unsigned int mask;
+-
+- DBG("sock %p, sk %p", sock, sk);
+-
+- poll_wait(file, sk->sleep, wait);
+- mask = 0;
+-
+- if (sk->err || !skb_queue_empty(&sk->error_queue))
+- mask |= POLLERR;
+-
+- if (sk->shutdown == SHUTDOWN_MASK)
+- mask |= POLLHUP;
+-
+- aq = &l2cap_pi(sk)->accept_q;
+- if (!skb_queue_empty(&sk->receive_queue) || aq->head || (sk->shutdown & RCV_SHUTDOWN))
+- mask |= POLLIN | POLLRDNORM;
+-
+- if (sk->state == BT_CLOSED)
+- mask |= POLLHUP;
+-
+- if (sock_writeable(sk))
+- mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
+- else
+- set_bit(SOCK_ASYNC_NOSPACE, &sk->socket->flags);
+-
+- return mask;
+-}
+-
+-static int l2cap_sock_release(struct socket *sock)
+-{
+- struct sock *sk = sock->sk;
+-
+- DBG("sock %p, sk %p", sock, sk);
+-
+- if (!sk)
+- return 0;
+-
+- sock_orphan(sk);
+-
+- l2cap_sock_close(sk);
+-
+- return 0;
+-}
+-
+-/* --------- L2CAP channels --------- */
+-static struct sock * __l2cap_get_chan_by_dcid(struct l2cap_chan_list *l, __u16 cid)
+-{
+- struct sock *s;
+-
+- for (s = l->head; s; s = l2cap_pi(s)->next_c) {
+- if (l2cap_pi(s)->dcid == cid)
+- break;
+- }
+-
+- return s;
+-}
+-
+-static inline struct sock *l2cap_get_chan_by_dcid(struct l2cap_chan_list *l, __u16 cid)
+-{
+- struct sock *s;
+-
+- read_lock(&l->lock);
+- s = __l2cap_get_chan_by_dcid(l, cid);
+- read_unlock(&l->lock);
+-
+- return s;
+-}
+-
+-static struct sock *__l2cap_get_chan_by_scid(struct l2cap_chan_list *l, __u16 cid)
+-{
+- struct sock *s;
+-
+- for (s = l->head; s; s = l2cap_pi(s)->next_c) {
+- if (l2cap_pi(s)->scid == cid)
+- break;
+- }
+-
+- return s;
+-}
+-static inline struct sock *l2cap_get_chan_by_scid(struct l2cap_chan_list *l, __u16 cid)
+-{
+- struct sock *s;
+-
+- read_lock(&l->lock);
+- s = __l2cap_get_chan_by_scid(l, cid);
+- read_unlock(&l->lock);
+-
+- return s;
+-}
+-
+-static struct sock *__l2cap_get_chan_by_ident(struct l2cap_chan_list *l, __u8 ident)
+-{
+- struct sock *s;
+-
+- for (s = l->head; s; s = l2cap_pi(s)->next_c) {
+- if (l2cap_pi(s)->ident == ident)
+- break;
+- }
+-
+- return s;
+-}
+-
+-static inline struct sock *l2cap_get_chan_by_ident(struct l2cap_chan_list *l, __u8 ident)
+-{
+- struct sock *s;
+-
+- read_lock(&l->lock);
+- s = __l2cap_get_chan_by_ident(l, ident);
+- read_unlock(&l->lock);
+-
+- return s;
+-}
+-
+-static __u16 l2cap_alloc_cid(struct l2cap_chan_list *l)
+-{
+- __u16 cid = 0x0040;
+-
+- for (; cid < 0xffff; cid++) {
+- if(!__l2cap_get_chan_by_scid(l, cid))
+- return cid;
+- }
+-
+- return 0;
+-}
+-
+-static inline void __l2cap_chan_link(struct l2cap_chan_list *l, struct sock *sk)
+-{
+- sock_hold(sk);
+-
+- if (l->head)
+- l2cap_pi(l->head)->prev_c = sk;
+-
+- l2cap_pi(sk)->next_c = l->head;
+- l2cap_pi(sk)->prev_c = NULL;
+- l->head = sk;
+-}
+-
+-static inline void l2cap_chan_unlink(struct l2cap_chan_list *l, struct sock *sk)
+-{
+- struct sock *next = l2cap_pi(sk)->next_c, *prev = l2cap_pi(sk)->prev_c;
+-
+- write_lock(&l->lock);
+- if (sk == l->head)
+- l->head = next;
+-
+- if (next)
+- l2cap_pi(next)->prev_c = prev;
+- if (prev)
+- l2cap_pi(prev)->next_c = next;
+- write_unlock(&l->lock);
+-
+- __sock_put(sk);
+-}
+-
+-static void __l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent)
+-{
+- struct l2cap_chan_list *l = &conn->chan_list;
+-
+- DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn, l2cap_pi(sk)->psm, l2cap_pi(sk)->dcid);
+-
+- l2cap_conn_clear_timer(conn);
+-
+- atomic_inc(&conn->refcnt);
+- l2cap_pi(sk)->conn = conn;
+-
+- if (sk->type == SOCK_SEQPACKET) {
+- /* Alloc CID for normal socket */
+- l2cap_pi(sk)->scid = l2cap_alloc_cid(l);
+- } else {
+- /* Raw socket can send only signalling messages */
+- l2cap_pi(sk)->scid = 0x0001;
+- l2cap_pi(sk)->dcid = 0x0001;
+- l2cap_pi(sk)->omtu = L2CAP_DEFAULT_MTU;
+- }
+-
+- __l2cap_chan_link(l, sk);
+-
+- if (parent)
+- l2cap_accept_queue(parent, sk);
+-}
+-
+-static inline void l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent)
+-{
+- struct l2cap_chan_list *l = &conn->chan_list;
+-
+- write_lock(&l->lock);
+- __l2cap_chan_add(conn, sk, parent);
+- write_unlock(&l->lock);
+-}
+-
+-/* Delete channel.
+- * Must be called on the locked socket. */
+-static void l2cap_chan_del(struct sock *sk, int err)
+-{
+- struct l2cap_conn *conn;
+- struct sock *parent;
+-
+- conn = l2cap_pi(sk)->conn;
+- parent = l2cap_pi(sk)->parent;
+-
+- DBG("sk %p, conn %p, err %d", sk, conn, err);
+-
+- if (parent) {
+- /* Unlink from parent accept queue */
+- bh_lock_sock(parent);
+- l2cap_accept_unlink(sk);
+- bh_unlock_sock(parent);
+- }
+-
+- if (conn) {
+- long timeout;
+-
+- /* Unlink from channel list */
+- l2cap_chan_unlink(&conn->chan_list, sk);
+- l2cap_pi(sk)->conn = NULL;
+-
+- if (conn->out)
+- timeout = L2CAP_DISCONN_TIMEOUT;
+- else
+- timeout = L2CAP_CONN_IDLE_TIMEOUT;
+-
+- if (atomic_dec_and_test(&conn->refcnt) && conn->state == BT_CONNECTED) {
+- /* Schedule Baseband disconnect */
+- l2cap_conn_set_timer(conn, timeout);
+- }
+- }
+-
+- sk->state = BT_CLOSED;
+- sk->err = err;
+- sk->state_change(sk);
+-
+- sk->zapped = 1;
+-}
+-
+-static void l2cap_conn_ready(struct l2cap_conn *conn)
+-{
+- struct l2cap_chan_list *l = &conn->chan_list;
+- struct sock *sk;
+-
+- DBG("conn %p", conn);
+-
+- read_lock(&l->lock);
+-
+- for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
+- bh_lock_sock(sk);
+-
+- if (sk->type != SOCK_SEQPACKET) {
+- sk->state = BT_CONNECTED;
+- sk->state_change(sk);
+- l2cap_sock_clear_timer(sk);
+- } else if (sk->state == BT_CONNECT) {
+- l2cap_conn_req req;
+- req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- req.psm = l2cap_pi(sk)->psm;
+- l2cap_send_req(conn, L2CAP_CONN_REQ, L2CAP_CONN_REQ_SIZE, &req);
+-
+- l2cap_sock_set_timer(sk, sk->sndtimeo);
+- }
+-
+- bh_unlock_sock(sk);
+- }
+-
+- read_unlock(&l->lock);
+-}
+-
+-static void l2cap_chan_ready(struct sock *sk)
+-{
+- struct sock *parent = l2cap_pi(sk)->parent;
+-
+- DBG("sk %p, parent %p", sk, parent);
+-
+- l2cap_pi(sk)->conf_state = 0;
+- l2cap_sock_clear_timer(sk);
+-
+- if (!parent) {
+- /* Outgoing channel.
+- * Wake up socket sleeping on connect.
+- */
+- sk->state = BT_CONNECTED;
+- sk->state_change(sk);
+- } else {
+- /* Incomming channel.
+- * Wake up socket sleeping on accept.
+- */
+- parent->data_ready(parent, 1);
+- }
+-}
+-
+-/* Copy frame to all raw sockets on that connection */
+-void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
+-{
+- struct l2cap_chan_list *l = &conn->chan_list;
+- struct sk_buff *nskb;
+- struct sock * sk;
+-
+- DBG("conn %p", conn);
+-
+- read_lock(&l->lock);
+- for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
+- if (sk->type != SOCK_RAW)
+- continue;
+-
+- /* Don't send frame to the socket it came from */
+- if (skb->sk == sk)
+- continue;
+-
+- if (!(nskb = skb_clone(skb, GFP_ATOMIC)))
+- continue;
+-
+- skb_queue_tail(&sk->receive_queue, nskb);
+- sk->data_ready(sk, nskb->len);
+- }
+- read_unlock(&l->lock);
+-}
+-
+-static int l2cap_chan_send(struct sock *sk, struct msghdr *msg, int len)
+-{
+- struct l2cap_conn *conn = l2cap_pi(sk)->conn;
+- struct sk_buff *skb, **frag;
+- int err, size, count, sent=0;
+- l2cap_hdr *lh;
+-
+- /* Check outgoing MTU */
+- if (len > l2cap_pi(sk)->omtu)
+- return -EINVAL;
+-
+- DBG("sk %p len %d", sk, len);
+-
+- /* First fragment (with L2CAP header) */
+- count = MIN(conn->iff->mtu - L2CAP_HDR_SIZE, len);
+- size = L2CAP_HDR_SIZE + count;
+- if (!(skb = bluez_skb_send_alloc(sk, size, msg->msg_flags & MSG_DONTWAIT, &err)))
+- return err;
+-
+- /* Create L2CAP header */
+- lh = (l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
+- lh->len = __cpu_to_le16(len);
+- lh->cid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+-
+- if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count)) {
+- err = -EFAULT;
+- goto fail;
+- }
+-
+- sent += count;
+- len -= count;
+-
+- /* Continuation fragments (no L2CAP header) */
+- frag = &skb_shinfo(skb)->frag_list;
+- while (len) {
+- count = MIN(conn->iff->mtu, len);
+-
+- *frag = bluez_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err);
+- if (!*frag)
+- goto fail;
+-
+- if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count)) {
+- err = -EFAULT;
+- goto fail;
+- }
+-
+- sent += count;
+- len -= count;
+-
+- frag = &(*frag)->next;
+- }
+-
+- if ((err = hci_send_acl(conn->hconn, skb, 0)) < 0)
+- goto fail;
+-
+- return sent;
+-
+-fail:
+- kfree_skb(skb);
+- return err;
+-}
+-
+-/* --------- L2CAP signalling commands --------- */
+-static inline __u8 l2cap_get_ident(struct l2cap_conn *conn)
+-{
+- __u8 id;
+-
+- /* Get next available identificator.
+- * 1 - 199 are used by kernel.
+- * 200 - 254 are used by utilities like l2ping, etc
+- */
+-
+- spin_lock(&conn->lock);
+-
+- if (++conn->tx_ident > 199)
+- conn->tx_ident = 1;
+-
+- id = conn->tx_ident;
+-
+- spin_unlock(&conn->lock);
+-
+- return id;
+-}
+-
+-static inline struct sk_buff *l2cap_build_cmd(__u8 code, __u8 ident, __u16 len, void *data)
+-{
+- struct sk_buff *skb;
+- l2cap_cmd_hdr *cmd;
+- l2cap_hdr *lh;
+- int size;
+-
+- DBG("code 0x%2.2x, ident 0x%2.2x, len %d", code, ident, len);
+-
+- size = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + len;
+- if (!(skb = bluez_skb_alloc(size, GFP_ATOMIC)))
+- return NULL;
+-
+- lh = (l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
+- lh->len = __cpu_to_le16(L2CAP_CMD_HDR_SIZE + len);
+- lh->cid = __cpu_to_le16(0x0001);
+-
+- cmd = (l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
+- cmd->code = code;
+- cmd->ident = ident;
+- cmd->len = __cpu_to_le16(len);
+-
+- if (len)
+- memcpy(skb_put(skb, len), data, len);
+-
+- return skb;
+-}
+-
+-static int l2cap_send_req(struct l2cap_conn *conn, __u8 code, __u16 len, void *data)
+-{
+- struct sk_buff *skb;
+- __u8 ident;
+-
+- DBG("code 0x%2.2x", code);
+-
+- ident = l2cap_get_ident(conn);
+- if (!(skb = l2cap_build_cmd(code, ident, len, data)))
+- return -ENOMEM;
+- return hci_send_acl(conn->hconn, skb, 0);
+-}
+-
+-static int l2cap_send_rsp(struct l2cap_conn *conn, __u8 ident, __u8 code, __u16 len, void *data)
+-{
+- struct sk_buff *skb;
+-
+- DBG("code 0x%2.2x", code);
+-
+- if (!(skb = l2cap_build_cmd(code, ident, len, data)))
+- return -ENOMEM;
+- return hci_send_acl(conn->hconn, skb, 0);
+-}
+-
+-static inline int l2cap_get_conf_opt(__u8 **ptr, __u8 *type, __u32 *val)
+-{
+- l2cap_conf_opt *opt = (l2cap_conf_opt *) (*ptr);
+- int len;
+-
+- *type = opt->type;
+- switch (opt->len) {
+- case 1:
+- *val = *((__u8 *) opt->val);
+- break;
+-
+- case 2:
+- *val = __le16_to_cpu(*((__u16 *)opt->val));
+- break;
+-
+- case 4:
+- *val = __le32_to_cpu(*((__u32 *)opt->val));
+- break;
+-
+- default:
+- *val = 0L;
+- break;
+- };
+-
+- DBG("type 0x%2.2x len %d val 0x%8.8x", *type, opt->len, *val);
+-
+- len = L2CAP_CONF_OPT_SIZE + opt->len;
+-
+- *ptr += len;
+-
+- return len;
+-}
+-
+-static inline void l2cap_parse_conf_req(struct sock *sk, char *data, int len)
+-{
+- __u8 type, hint; __u32 val;
+- __u8 *ptr = data;
+-
+- DBG("sk %p len %d", sk, len);
+-
+- while (len >= L2CAP_CONF_OPT_SIZE) {
+- len -= l2cap_get_conf_opt(&ptr, &type, &val);
+-
+- hint = type & 0x80;
+- type &= 0x7f;
+-
+- switch (type) {
+- case L2CAP_CONF_MTU:
+- l2cap_pi(sk)->conf_mtu = val;
+- break;
+-
+- case L2CAP_CONF_FLUSH_TO:
+- l2cap_pi(sk)->flush_to = val;
+- break;
+-
+- case L2CAP_CONF_QOS:
+- break;
+-
+- default:
+- if (hint)
+- break;
+-
+- /* FIXME: Reject unknon option */
+- break;
+- };
+- }
+-}
+-
+-static inline void l2cap_add_conf_opt(__u8 **ptr, __u8 type, __u8 len, __u32 val)
+-{
+- register l2cap_conf_opt *opt = (l2cap_conf_opt *) (*ptr);
+-
+- DBG("type 0x%2.2x len %d val 0x%8.8x", type, len, val);
+-
+- opt->type = type;
+- opt->len = len;
+- switch (len) {
+- case 1:
+- *((__u8 *) opt->val) = val;
+- break;
+-
+- case 2:
+- *((__u16 *) opt->val) = __cpu_to_le16(val);
+- break;
+-
+- case 4:
+- *((__u32 *) opt->val) = __cpu_to_le32(val);
+- break;
+- };
+-
+- *ptr += L2CAP_CONF_OPT_SIZE + len;
+-}
+-
+-static int l2cap_build_conf_req(struct sock *sk, __u8 *data)
+-{
+- struct l2cap_pinfo *pi = l2cap_pi(sk);
+- l2cap_conf_req *req = (l2cap_conf_req *) data;
+- __u8 *ptr = req->data;
+-
+- DBG("sk %p", sk);
+-
+- if (pi->imtu != L2CAP_DEFAULT_MTU)
+- l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->imtu);
+-
+- /* FIXME. Need actual value of the flush timeout */
+- //if (flush_to != L2CAP_DEFAULT_FLUSH_TO)
+- // l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO, 2, pi->flush_to);
+-
+- req->dcid = __cpu_to_le16(pi->dcid);
+- req->flags = __cpu_to_le16(0);
+-
+- return ptr - data;
+-}
+-
+-static int l2cap_conf_output(struct sock *sk, __u8 **ptr)
+-{
+- struct l2cap_pinfo *pi = l2cap_pi(sk);
+- int result = 0;
+-
+- /* Configure output options and let other side know
+- * which ones we don't like.
+- */
+- if (pi->conf_mtu < pi->omtu) {
+- l2cap_add_conf_opt(ptr, L2CAP_CONF_MTU, 2, l2cap_pi(sk)->omtu);
+- result = L2CAP_CONF_UNACCEPT;
+- } else {
+- pi->omtu = pi->conf_mtu;
+- }
+-
+- DBG("sk %p result %d", sk, result);
+- return result;
+-}
+-
+-static int l2cap_build_conf_rsp(struct sock *sk, __u8 *data, int *result)
+-{
+- l2cap_conf_rsp *rsp = (l2cap_conf_rsp *) data;
+- __u8 *ptr = rsp->data;
+-
+- DBG("sk %p complete %d", sk, result ? 1 : 0);
+-
+- if (result)
+- *result = l2cap_conf_output(sk, &ptr);
+-
+- rsp->scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+- rsp->result = __cpu_to_le16(result ? *result : 0);
+- rsp->flags = __cpu_to_le16(0);
+-
+- return ptr - data;
+-}
+-
+-static inline int l2cap_connect_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
+-{
+- struct l2cap_chan_list *list = &conn->chan_list;
+- l2cap_conn_req *req = (l2cap_conn_req *) data;
+- l2cap_conn_rsp rsp;
+- struct sock *sk, *parent;
+-
+- __u16 scid = __le16_to_cpu(req->scid);
+- __u16 psm = req->psm;
+-
+- DBG("psm 0x%2.2x scid 0x%4.4x", psm, scid);
+-
+- /* Check if we have socket listening on psm */
+- if (!(parent = l2cap_get_sock_listen(&conn->src, psm)))
+- goto reject;
+-
+- bh_lock_sock(parent);
+- write_lock(&list->lock);
+-
+- /* Check if we already have channel with that dcid */
+- if (__l2cap_get_chan_by_dcid(list, scid))
+- goto unlock;
+-
+- /* Check for backlog size */
+- if (parent->ack_backlog > parent->max_ack_backlog)
+- goto unlock;
+-
+- if (!(sk = l2cap_sock_alloc(NULL, BTPROTO_L2CAP, GFP_ATOMIC)))
+- goto unlock;
+-
+- l2cap_sock_init(sk, parent);
+-
+- bacpy(&l2cap_pi(sk)->src, &conn->src);
+- bacpy(&l2cap_pi(sk)->dst, &conn->dst);
+- l2cap_pi(sk)->psm = psm;
+- l2cap_pi(sk)->dcid = scid;
+-
+- __l2cap_chan_add(conn, sk, parent);
+- sk->state = BT_CONFIG;
+-
+- write_unlock(&list->lock);
+- bh_unlock_sock(parent);
+-
+- rsp.dcid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- rsp.scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+- rsp.result = __cpu_to_le16(0);
+- rsp.status = __cpu_to_le16(0);
+- l2cap_send_rsp(conn, cmd->ident, L2CAP_CONN_RSP, L2CAP_CONN_RSP_SIZE, &rsp);
+-
+- return 0;
+-
+-unlock:
+- write_unlock(&list->lock);
+- bh_unlock_sock(parent);
+-
+-reject:
+- rsp.scid = __cpu_to_le16(scid);
+- rsp.dcid = __cpu_to_le16(0);
+- rsp.status = __cpu_to_le16(0);
+- rsp.result = __cpu_to_le16(L2CAP_CONN_NO_MEM);
+- l2cap_send_rsp(conn, cmd->ident, L2CAP_CONN_RSP, L2CAP_CONN_RSP_SIZE, &rsp);
+-
+- return 0;
+-}
+-
+-static inline int l2cap_connect_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
+-{
+- l2cap_conn_rsp *rsp = (l2cap_conn_rsp *) data;
+- __u16 scid, dcid, result, status;
+- struct sock *sk;
+-
+- scid = __le16_to_cpu(rsp->scid);
+- dcid = __le16_to_cpu(rsp->dcid);
+- result = __le16_to_cpu(rsp->result);
+- status = __le16_to_cpu(rsp->status);
+-
+- DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x", dcid, scid, result, status);
+-
+- if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
+- return -ENOENT;
+-
+- bh_lock_sock(sk);
+-
+- if (!result) {
+- char req[64];
+-
+- sk->state = BT_CONFIG;
+- l2cap_pi(sk)->dcid = dcid;
+- l2cap_pi(sk)->conf_state |= CONF_REQ_SENT;
+-
+- l2cap_send_req(conn, L2CAP_CONF_REQ, l2cap_build_conf_req(sk, req), req);
+- } else {
+- l2cap_chan_del(sk, ECONNREFUSED);
+- }
+-
+- bh_unlock_sock(sk);
+- return 0;
+-}
+-
+-static inline int l2cap_config_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
+-{
+- l2cap_conf_req * req = (l2cap_conf_req *) data;
+- __u16 dcid, flags;
+- __u8 rsp[64];
+- struct sock *sk;
+- int result;
+-
+- dcid = __le16_to_cpu(req->dcid);
+- flags = __le16_to_cpu(req->flags);
+-
+- DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
+-
+- if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid)))
+- return -ENOENT;
+-
+- bh_lock_sock(sk);
+-
+- l2cap_parse_conf_req(sk, req->data, cmd->len - L2CAP_CONF_REQ_SIZE);
+-
+- if (flags & 0x01) {
+- /* Incomplete config. Send empty response. */
+- l2cap_send_rsp(conn, cmd->ident, L2CAP_CONF_RSP, l2cap_build_conf_rsp(sk, rsp, NULL), rsp);
+- goto unlock;
+- }
+-
+- /* Complete config. */
+- l2cap_send_rsp(conn, cmd->ident, L2CAP_CONF_RSP, l2cap_build_conf_rsp(sk, rsp, &result), rsp);
+-
+- if (result)
+- goto unlock;
+-
+- /* Output config done */
+- l2cap_pi(sk)->conf_state |= CONF_OUTPUT_DONE;
+-
+- if (l2cap_pi(sk)->conf_state & CONF_INPUT_DONE) {
+- sk->state = BT_CONNECTED;
+- l2cap_chan_ready(sk);
+- } else if (!(l2cap_pi(sk)->conf_state & CONF_REQ_SENT)) {
+- char req[64];
+- l2cap_send_req(conn, L2CAP_CONF_REQ, l2cap_build_conf_req(sk, req), req);
+- }
+-
+-unlock:
+- bh_unlock_sock(sk);
+-
+- return 0;
+-}
+-
+-static inline int l2cap_config_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
+-{
+- l2cap_conf_rsp *rsp = (l2cap_conf_rsp *)data;
+- __u16 scid, flags, result;
+- struct sock *sk;
+- int err = 0;
+-
+- scid = __le16_to_cpu(rsp->scid);
+- flags = __le16_to_cpu(rsp->flags);
+- result = __le16_to_cpu(rsp->result);
+-
+- DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x", scid, flags, result);
+-
+- if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
+- return -ENOENT;
+-
+- bh_lock_sock(sk);
+-
+- if (result) {
+- l2cap_disconn_req req;
+-
+- /* They didn't like our options. Well... we do not negotiate.
+- * Close channel.
+- */
+- sk->state = BT_DISCONN;
+-
+- req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+- req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- l2cap_send_req(conn, L2CAP_DISCONN_REQ, L2CAP_DISCONN_REQ_SIZE, &req);
+-
+- l2cap_sock_set_timer(sk, sk->sndtimeo);
+- goto done;
+- }
+-
+- if (flags & 0x01)
+- goto done;
+-
+- /* Input config done */
+- l2cap_pi(sk)->conf_state |= CONF_INPUT_DONE;
+-
+- if (l2cap_pi(sk)->conf_state & CONF_OUTPUT_DONE) {
+- sk->state = BT_CONNECTED;
+- l2cap_chan_ready(sk);
+- }
+-
+-done:
+- bh_unlock_sock(sk);
+-
+- return err;
+-}
+-
+-static inline int l2cap_disconnect_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
+-{
+- l2cap_disconn_req *req = (l2cap_disconn_req *) data;
+- l2cap_disconn_rsp rsp;
+- __u16 dcid, scid;
+- struct sock *sk;
+-
+- scid = __le16_to_cpu(req->scid);
+- dcid = __le16_to_cpu(req->dcid);
+-
+- DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
+-
+- if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid)))
+- return 0;
+-
+- bh_lock_sock(sk);
+-
+- rsp.dcid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- rsp.scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+- l2cap_send_rsp(conn, cmd->ident, L2CAP_DISCONN_RSP, L2CAP_DISCONN_RSP_SIZE, &rsp);
+-
+- l2cap_chan_del(sk, ECONNRESET);
+-
+- bh_unlock_sock(sk);
+-
+- l2cap_sock_kill(sk);
+-
+- return 0;
+-}
+-
+-static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
+-{
+- l2cap_disconn_rsp *rsp = (l2cap_disconn_rsp *) data;
+- __u16 dcid, scid;
+- struct sock *sk;
+-
+- scid = __le16_to_cpu(rsp->scid);
+- dcid = __le16_to_cpu(rsp->dcid);
+-
+- DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
+-
+- if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
+- return -ENOENT;
+-
+- bh_lock_sock(sk);
+- l2cap_sock_clear_timer(sk);
+- l2cap_chan_del(sk, ECONNABORTED);
+- bh_unlock_sock(sk);
+-
+- l2cap_sock_kill(sk);
+-
+- return 0;
+-}
+-
+-static inline void l2cap_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
+-{
+- __u8 *data = skb->data;
+- int len = skb->len;
+- l2cap_cmd_hdr cmd;
+- int err = 0;
+-
+- while (len >= L2CAP_CMD_HDR_SIZE) {
+- memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
+- data += L2CAP_CMD_HDR_SIZE;
+- len -= L2CAP_CMD_HDR_SIZE;
+-
+- cmd.len = __le16_to_cpu(cmd.len);
+-
+- DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd.len, cmd.ident);
+-
+- if (cmd.len > len || !cmd.ident) {
+- DBG("corrupted command");
+- break;
+- }
+-
+- switch (cmd.code) {
+- case L2CAP_CONN_REQ:
+- err = l2cap_connect_req(conn, &cmd, data);
+- break;
+-
+- case L2CAP_CONN_RSP:
+- err = l2cap_connect_rsp(conn, &cmd, data);
+- break;
+-
+- case L2CAP_CONF_REQ:
+- err = l2cap_config_req(conn, &cmd, data);
+- break;
+-
+- case L2CAP_CONF_RSP:
+- err = l2cap_config_rsp(conn, &cmd, data);
+- break;
+-
+- case L2CAP_DISCONN_REQ:
+- err = l2cap_disconnect_req(conn, &cmd, data);
+- break;
+-
+- case L2CAP_DISCONN_RSP:
+- err = l2cap_disconnect_rsp(conn, &cmd, data);
+- break;
+-
+- case L2CAP_COMMAND_REJ:
+- /* FIXME: We should process this */
+- l2cap_raw_recv(conn, skb);
+- break;
+-
+- case L2CAP_ECHO_REQ:
+- l2cap_send_rsp(conn, cmd.ident, L2CAP_ECHO_RSP, cmd.len, data);
+- break;
+-
+- case L2CAP_ECHO_RSP:
+- case L2CAP_INFO_REQ:
+- case L2CAP_INFO_RSP:
+- l2cap_raw_recv(conn, skb);
+- break;
+-
+- default:
+- ERR("Uknown signaling command 0x%2.2x", cmd.code);
+- err = -EINVAL;
+- break;
+- };
+-
+- if (err) {
+- l2cap_cmd_rej rej;
+- DBG("error %d", err);
+-
+- /* FIXME: Map err to a valid reason. */
+- rej.reason = __cpu_to_le16(0);
+- l2cap_send_rsp(conn, cmd.ident, L2CAP_COMMAND_REJ, L2CAP_CMD_REJ_SIZE, &rej);
+- }
+-
+- data += cmd.len;
+- len -= cmd.len;
+- }
+-
+- kfree_skb(skb);
+-}
+-
+-static inline int l2cap_data_channel(struct l2cap_conn *conn, __u16 cid, struct sk_buff *skb)
+-{
+- struct sock *sk;
+-
+- if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, cid))) {
+- DBG("unknown cid 0x%4.4x", cid);
+- goto drop;
+- }
+-
+- DBG("sk %p, len %d", sk, skb->len);
+-
+- if (sk->state != BT_CONNECTED)
+- goto drop;
+-
+- if (l2cap_pi(sk)->imtu < skb->len)
+- goto drop;
+-
+- skb_queue_tail(&sk->receive_queue, skb);
+- sk->data_ready(sk, skb->len);
+-
+- return 0;
+-
+-drop:
+- kfree_skb(skb);
+-
+- return 0;
+-}
+-
+-static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
+-{
+- l2cap_hdr *lh = (l2cap_hdr *) skb->data;
+- __u16 cid, len;
+-
+- skb_pull(skb, L2CAP_HDR_SIZE);
+- cid = __le16_to_cpu(lh->cid);
+- len = __le16_to_cpu(lh->len);
+-
+- DBG("len %d, cid 0x%4.4x", len, cid);
+-
+- if (cid == 0x0001)
+- l2cap_sig_channel(conn, skb);
+- else
+- l2cap_data_channel(conn, cid, skb);
+-}
+-
+-/* ------------ L2CAP interface with lower layer (HCI) ------------- */
+-static int l2cap_dev_event(struct notifier_block *this, unsigned long event, void *ptr)
+-{
+- struct hci_dev *hdev = (struct hci_dev *) ptr;
+-
+- DBG("hdev %s, event %ld", hdev->name, event);
+-
+- write_lock(&l2cap_rt_lock);
+-
+- switch (event) {
+- case HCI_DEV_UP:
+- l2cap_iff_add(hdev);
+- break;
+-
+- case HCI_DEV_DOWN:
+- l2cap_iff_del(hdev);
+- break;
+- };
+-
+- write_unlock(&l2cap_rt_lock);
+-
+- return NOTIFY_DONE;
+-}
+-
+-int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
+-{
+- struct l2cap_iff *iff;
+-
+- DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
+-
+- if (!(iff = hdev->l2cap_data)) {
+- ERR("unknown interface");
+- return 0;
+- }
+-
+- /* Always accept connection */
+- return 1;
+-}
+-
+-int l2cap_connect_cfm(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 status, struct hci_conn *hconn)
+-{
+- struct l2cap_conn *conn;
+- struct l2cap_iff *iff;
+- int err = 0;
+-
+- DBG("hdev %s bdaddr %s hconn %p", hdev->name, batostr(bdaddr), hconn);
+-
+- if (!(iff = hdev->l2cap_data)) {
+- ERR("unknown interface");
+- return 0;
+- }
+-
+- l2cap_iff_lock(iff);
+-
+- conn = l2cap_get_conn_by_addr(iff, bdaddr);
+-
+- if (conn) {
+- /* Outgoing connection */
+- DBG("Outgoing connection: %s -> %s, %p, %2.2x", batostr(iff->bdaddr), batostr(bdaddr), conn, status);
+-
+- if (!status && hconn) {
+- conn->state = BT_CONNECTED;
+- conn->hconn = hconn;
+-
+- hconn->l2cap_data = (void *)conn;
+-
+- /* Establish channels */
+- l2cap_conn_ready(conn);
+- } else {
+- l2cap_conn_del(conn, bterr(status));
+- }
+- } else {
+- /* Incomming connection */
+- DBG("Incomming connection: %s -> %s, %2.2x", batostr(iff->bdaddr), batostr(bdaddr), status);
+-
+- if (status || !hconn)
+- goto done;
+-
+- if (!(conn = l2cap_conn_add(iff, bdaddr))) {
+- err = -ENOMEM;
+- goto done;
+- }
+-
+- conn->hconn = hconn;
+- hconn->l2cap_data = (void *)conn;
+-
+- conn->state = BT_CONNECTED;
+- }
+-
+-done:
+- l2cap_iff_unlock(iff);
+-
+- return err;
+-}
+-
+-int l2cap_disconn_ind(struct hci_conn *hconn, __u8 reason)
+-{
+- struct l2cap_conn *conn = hconn->l2cap_data;
+-
+- DBG("hconn %p reason %d", hconn, reason);
+-
+- if (!conn) {
+- ERR("unknown connection");
+- return 0;
+- }
+- conn->hconn = NULL;
+-
+- l2cap_iff_lock(conn->iff);
+- l2cap_conn_del(conn, bterr(reason));
+- l2cap_iff_unlock(conn->iff);
+-
+- return 0;
+-}
+-
+-int l2cap_recv_acldata(struct hci_conn *hconn, struct sk_buff *skb, __u16 flags)
+-{
+- struct l2cap_conn *conn = hconn->l2cap_data;
+-
+- if (!conn) {
+- ERR("unknown connection %p", hconn);
+- goto drop;
+- }
+-
+- DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);
+-
+- if (flags & ACL_START) {
+- int flen, tlen, size;
+- l2cap_hdr *lh;
+-
+- if (conn->rx_len) {
+- ERR("Unexpected start frame (len %d)", skb->len);
+- kfree_skb(conn->rx_skb); conn->rx_skb = NULL;
+- conn->rx_len = 0;
+- }
+-
+- if (skb->len < L2CAP_HDR_SIZE) {
+- ERR("Frame is too small (len %d)", skb->len);
+- goto drop;
+- }
+-
+- lh = (l2cap_hdr *)skb->data;
+- tlen = __le16_to_cpu(lh->len);
+- flen = skb->len - L2CAP_HDR_SIZE;
+-
+- DBG("Start: total len %d, frag len %d", tlen, flen);
+-
+- if (flen == tlen) {
+- /* Complete frame received */
+- l2cap_recv_frame(conn, skb);
+- return 0;
+- }
+-
+- /* Allocate skb for the complete frame (with header) */
+- size = L2CAP_HDR_SIZE + tlen;
+- if (!(conn->rx_skb = bluez_skb_alloc(size, GFP_ATOMIC)))
+- goto drop;
+-
+- memcpy(skb_put(conn->rx_skb, skb->len), skb->data, skb->len);
+-
+- conn->rx_len = tlen - flen;
+- } else {
+- DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);
+-
+- if (!conn->rx_len) {
+- ERR("Unexpected continuation frame (len %d)", skb->len);
+- goto drop;
+- }
+-
+- if (skb->len > conn->rx_len) {
+- ERR("Fragment is too large (len %d)", skb->len);
+- kfree_skb(conn->rx_skb); conn->rx_skb = NULL;
+- goto drop;
+- }
+-
+- memcpy(skb_put(conn->rx_skb, skb->len), skb->data, skb->len);
+- conn->rx_len -= skb->len;
+-
+- if (!conn->rx_len) {
+- /* Complete frame received */
+- l2cap_recv_frame(conn, conn->rx_skb);
+- conn->rx_skb = NULL;
+- }
+- }
+-
+-drop:
+- kfree_skb(skb);
+- return 0;
+-}
+-
+-struct proto_ops l2cap_sock_ops = {
+- family: PF_BLUETOOTH,
+- release: l2cap_sock_release,
+- bind: l2cap_sock_bind,
+- connect: l2cap_sock_connect,
+- listen: l2cap_sock_listen,
+- accept: l2cap_sock_accept,
+- getname: l2cap_sock_getname,
+- sendmsg: l2cap_sock_sendmsg,
+- recvmsg: l2cap_sock_recvmsg,
+- poll: l2cap_sock_poll,
+- socketpair: sock_no_socketpair,
+- ioctl: sock_no_ioctl,
+- shutdown: sock_no_shutdown,
+- setsockopt: l2cap_sock_setsockopt,
+- getsockopt: l2cap_sock_getsockopt,
+- mmap: sock_no_mmap
+-};
+-
+-struct net_proto_family l2cap_sock_family_ops = {
+- family: PF_BLUETOOTH,
+- create: l2cap_sock_create
+-};
+-
+-struct hci_proto l2cap_hci_proto = {
+- name: "L2CAP",
+- id: HCI_PROTO_L2CAP,
+- connect_ind: l2cap_connect_ind,
+- connect_cfm: l2cap_connect_cfm,
+- disconn_ind: l2cap_disconn_ind,
+- recv_acldata: l2cap_recv_acldata,
+-};
+-
+-struct notifier_block l2cap_nblock = {
+- notifier_call: l2cap_dev_event
+-};
+-
+-int __init l2cap_init(void)
+-{
+- INF("BlueZ L2CAP ver %s Copyright (C) 2000,2001 Qualcomm Inc",
+- VERSION);
+- INF("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
+-
+- if (bluez_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops)) {
+- ERR("Can't register L2CAP socket");
+- return -EPROTO;
+- }
+-
+- if (hci_register_proto(&l2cap_hci_proto) < 0) {
+- ERR("Can't register L2CAP protocol");
+- return -EPROTO;
+- }
+-
+- hci_register_notifier(&l2cap_nblock);
+-
+- l2cap_register_proc();
+-
+- return 0;
+-}
+-
+-void l2cap_cleanup(void)
+-{
+- l2cap_unregister_proc();
+-
+- /* Unregister socket, protocol and notifier */
+- if (bluez_sock_unregister(BTPROTO_L2CAP))
+- ERR("Can't unregister L2CAP socket");
+-
+- if (hci_unregister_proto(&l2cap_hci_proto) < 0)
+- ERR("Can't unregister L2CAP protocol");
+-
+- hci_unregister_notifier(&l2cap_nblock);
+-
+- /* We _must_ not have any sockets and/or connections
+- * at this stage.
+- */
+-
+- /* Free interface list and unlock HCI devices */
+- {
+- struct list_head *list = &l2cap_iff_list;
+-
+- while (!list_empty(list)) {
+- struct l2cap_iff *iff;
+-
+- iff = list_entry(list->next, struct l2cap_iff, list);
+- l2cap_iff_del(iff->hdev);
+- }
+- }
+-}
+-
+-module_init(l2cap_init);
+-module_exit(l2cap_cleanup);
+-
+-MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
+-MODULE_DESCRIPTION("BlueZ L2CAP ver " VERSION);
+-MODULE_LICENSE("GPL");
+-
+diff -urN linux-2.4.18/net/bluetooth/l2cap_proc.c linux-2.4.18-mh15/net/bluetooth/l2cap_proc.c
+--- linux-2.4.18/net/bluetooth/l2cap_proc.c 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/net/bluetooth/l2cap_proc.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,165 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * BlueZ L2CAP proc fs support.
+- *
+- * $Id: l2cap_proc.c,v 1.2 2001/06/02 01:40:09 maxk Exp $
+- */
+-
+-#include <linux/config.h>
+-#include <linux/module.h>
+-
+-#include <linux/types.h>
+-#include <linux/errno.h>
+-#include <linux/kernel.h>
+-#include <linux/major.h>
+-#include <linux/sched.h>
+-#include <linux/slab.h>
+-#include <linux/poll.h>
+-#include <linux/fcntl.h>
+-#include <linux/init.h>
+-#include <linux/skbuff.h>
+-#include <linux/interrupt.h>
+-#include <linux/socket.h>
+-#include <linux/skbuff.h>
+-#include <linux/proc_fs.h>
+-#include <linux/list.h>
+-#include <net/sock.h>
+-
+-#include <asm/system.h>
+-#include <asm/uaccess.h>
+-
+-#include <net/bluetooth/bluez.h>
+-#include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/hci_core.h>
+-#include <net/bluetooth/l2cap_core.h>
+-
+-#ifndef L2CAP_DEBUG
+-#undef DBG
+-#define DBG( A... )
+-#endif
+-
+-/* ----- PROC fs support ----- */
+-static int l2cap_conn_dump(char *buf, struct l2cap_iff *iff)
+-{
+- struct list_head *p;
+- char *ptr = buf;
+-
+- list_for_each(p, &iff->conn_list) {
+- struct l2cap_conn *c;
+-
+- c = list_entry(p, struct l2cap_conn, list);
+- ptr += sprintf(ptr, " %p %d %p %p %s %s\n",
+- c, c->state, c->iff, c->hconn, batostr(&c->src), batostr(&c->dst));
+- }
+-
+- return ptr - buf;
+-}
+-
+-static int l2cap_iff_dump(char *buf)
+-{
+- struct list_head *p;
+- char *ptr = buf;
+-
+- ptr += sprintf(ptr, "Interfaces:\n");
+-
+- write_lock(&l2cap_rt_lock);
+-
+- list_for_each(p, &l2cap_iff_list) {
+- struct l2cap_iff *iff;
+-
+- iff = list_entry(p, struct l2cap_iff, list);
+-
+- ptr += sprintf(ptr, " %s %p %p\n", iff->hdev->name, iff, iff->hdev);
+-
+- l2cap_iff_lock(iff);
+- ptr += l2cap_conn_dump(ptr, iff);
+- l2cap_iff_unlock(iff);
+- }
+-
+- write_unlock(&l2cap_rt_lock);
+-
+- ptr += sprintf(ptr, "\n");
+-
+- return ptr - buf;
+-}
+-
+-static int l2cap_sock_dump(char *buf, struct bluez_sock_list *list)
+-{
+- struct l2cap_pinfo *pi;
+- struct sock *sk;
+- char *ptr = buf;
+-
+- ptr += sprintf(ptr, "Sockets:\n");
+-
+- write_lock(&list->lock);
+-
+- for (sk = list->head; sk; sk = sk->next) {
+- pi = l2cap_pi(sk);
+- ptr += sprintf(ptr, " %p %d %p %d %s %s 0x%4.4x 0x%4.4x %d %d\n", sk, sk->state, pi->conn, pi->psm,
+- batostr(&pi->src), batostr(&pi->dst), pi->scid, pi->dcid, pi->imtu, pi->omtu );
+- }
+-
+- write_unlock(&list->lock);
+-
+- ptr += sprintf(ptr, "\n");
+-
+- return ptr - buf;
+-}
+-
+-static int l2cap_read_proc(char *buf, char **start, off_t offset, int count, int *eof, void *priv)
+-{
+- char *ptr = buf;
+- int len;
+-
+- DBG("count %d, offset %ld", count, offset);
+-
+- ptr += l2cap_iff_dump(ptr);
+- ptr += l2cap_sock_dump(ptr, &l2cap_sk_list);
+- len = ptr - buf;
+-
+- if (len <= count + offset)
+- *eof = 1;
+-
+- *start = buf + offset;
+- len -= offset;
+-
+- if (len > count)
+- len = count;
+- if (len < 0)
+- len = 0;
+-
+- return len;
+-}
+-
+-void l2cap_register_proc(void)
+-{
+- create_proc_read_entry("bluetooth/l2cap", 0, 0, l2cap_read_proc, NULL);
+-}
+-
+-void l2cap_unregister_proc(void)
+-{
+- remove_proc_entry("bluetooth/l2cap", NULL);
+-}
+diff -urN linux-2.4.18/net/bluetooth/lib.c linux-2.4.18-mh15/net/bluetooth/lib.c
+--- linux-2.4.18/net/bluetooth/lib.c 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/net/bluetooth/lib.c 2004-08-01 16:26:23.000000000 +0200
+@@ -25,7 +25,7 @@
+ /*
+ * BlueZ kernel library.
+ *
+- * $Id: lib.c,v 1.3 2001/06/22 23:14:23 maxk Exp $
++ * $Id: lib.c,v 1.2 2002/06/20 19:55:08 maxk Exp $
+ */
+
+ #include <linux/kernel.h>
+@@ -105,7 +105,7 @@
+ return EACCES;
+
+ case 0x06:
+- return EINVAL;
++ return EBADE;
+
+ case 0x07:
+ return ENOMEM;
+diff -urN linux-2.4.18/net/bluetooth/Makefile linux-2.4.18-mh15/net/bluetooth/Makefile
+--- linux-2.4.18/net/bluetooth/Makefile 2001-06-12 04:15:27.000000000 +0200
++++ linux-2.4.18-mh15/net/bluetooth/Makefile 2004-08-01 16:26:23.000000000 +0200
+@@ -1,20 +1,40 @@
+ #
+-# Makefile for the Bluetooth subsystem
++# Makefile for the Linux Bluetooth subsystem
+ #
+-O_TARGET := bluetooth.o
+
+-list-multi := hci.o l2cap.o
+-export-objs := syms.o
+-hci-objs := af_bluetooth.o hci_core.o hci_sock.o lib.o syms.o
+-l2cap-objs := l2cap_core.o l2cap_proc.o
++O_TARGET := bluetooth.o
+
+-obj-$(CONFIG_BLUEZ) += hci.o
++list-multi := bluez.o
++export-objs := syms.o l2cap.o
++
++bluez-objs := af_bluetooth.o hci_core.o hci_conn.o hci_event.o hci_sock.o lib.o syms.o
++
++obj-$(CONFIG_BLUEZ) += bluez.o
+ obj-$(CONFIG_BLUEZ_L2CAP) += l2cap.o
++obj-$(CONFIG_BLUEZ_SCO) += sco.o
+
+-include $(TOPDIR)/Rules.make
++subdir-$(CONFIG_BLUEZ_RFCOMM) += rfcomm
++subdir-$(CONFIG_BLUEZ_BNEP) += bnep
++subdir-$(CONFIG_BLUEZ_CMTP) += cmtp
++subdir-$(CONFIG_BLUEZ_HIDP) += hidp
++
++ifeq ($(CONFIG_BLUEZ_RFCOMM),y)
++obj-y += rfcomm/rfcomm.o
++endif
+
+-hci.o: $(hci-objs)
+- $(LD) -r -o $@ $(hci-objs)
++ifeq ($(CONFIG_BLUEZ_BNEP),y)
++obj-y += bnep/bnep.o
++endif
++
++ifeq ($(CONFIG_BLUEZ_CMTP),y)
++obj-y += cmtp/cmtp.o
++endif
++
++ifeq ($(CONFIG_BLUEZ_HIDP),y)
++obj-y += hidp/hidp.o
++endif
++
++include $(TOPDIR)/Rules.make
+
+-l2cap.o: $(l2cap-objs)
+- $(LD) -r -o $@ $(l2cap-objs)
++bluez.o: $(bluez-objs)
++ $(LD) -r -o $@ $(bluez-objs)
+diff -urN linux-2.4.18/net/bluetooth/rfcomm/Config.in linux-2.4.18-mh15/net/bluetooth/rfcomm/Config.in
+--- linux-2.4.18/net/bluetooth/rfcomm/Config.in 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/rfcomm/Config.in 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,10 @@
++#
++# Bluetooth RFCOMM layer configuration
++#
++
++dep_tristate 'RFCOMM protocol support' CONFIG_BLUEZ_RFCOMM $CONFIG_BLUEZ_L2CAP
++
++if [ "$CONFIG_BLUEZ_RFCOMM" != "n" ]; then
++ bool ' RFCOMM TTY support' CONFIG_BLUEZ_RFCOMM_TTY
++fi
++
+diff -urN linux-2.4.18/net/bluetooth/rfcomm/core.c linux-2.4.18-mh15/net/bluetooth/rfcomm/core.c
+--- linux-2.4.18/net/bluetooth/rfcomm/core.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/rfcomm/core.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,1940 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ RPN support - Dirk Husemann <hud@zurich.ibm.com>
++*/
++
++/*
++ * RFCOMM core.
++ *
++ * $Id: core.c,v 1.46 2002/10/18 20:12:12 maxk Exp $
++ */
++
++#define __KERNEL_SYSCALLS__
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/signal.h>
++#include <linux/init.h>
++#include <linux/wait.h>
++#include <linux/net.h>
++#include <linux/proc_fs.h>
++#include <net/sock.h>
++#include <asm/uaccess.h>
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/l2cap.h>
++#include <net/bluetooth/rfcomm.h>
++
++#define VERSION "1.1"
++
++#ifndef CONFIG_BLUEZ_RFCOMM_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++struct task_struct *rfcomm_thread;
++DECLARE_MUTEX(rfcomm_sem);
++unsigned long rfcomm_event;
++
++static LIST_HEAD(session_list);
++static atomic_t terminate, running;
++
++static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len);
++static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci);
++static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci);
++static int rfcomm_queue_disc(struct rfcomm_dlc *d);
++static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type);
++static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d);
++static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig);
++static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len);
++static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits);
++static void rfcomm_make_uih(struct sk_buff *skb, u8 addr);
++
++static void rfcomm_process_connect(struct rfcomm_session *s);
++
++/* ---- RFCOMM frame parsing macros ---- */
++#define __get_dlci(b) ((b & 0xfc) >> 2)
++#define __get_channel(b) ((b & 0xf8) >> 3)
++#define __get_dir(b) ((b & 0x04) >> 2)
++#define __get_type(b) ((b & 0xef))
++
++#define __test_ea(b) ((b & 0x01))
++#define __test_cr(b) ((b & 0x02))
++#define __test_pf(b) ((b & 0x10))
++
++#define __addr(cr, dlci) (((dlci & 0x3f) << 2) | (cr << 1) | 0x01)
++#define __ctrl(type, pf) (((type & 0xef) | (pf << 4)))
++#define __dlci(dir, chn) (((chn & 0x1f) << 1) | dir)
++#define __srv_channel(dlci) (dlci >> 1)
++#define __dir(dlci) (dlci & 0x01)
++
++#define __len8(len) (((len) << 1) | 1)
++#define __len16(len) ((len) << 1)
++
++/* MCC macros */
++#define __mcc_type(cr, type) (((type << 2) | (cr << 1) | 0x01))
++#define __get_mcc_type(b) ((b & 0xfc) >> 2)
++#define __get_mcc_len(b) ((b & 0xfe) >> 1)
++
++/* RPN macros */
++#define __rpn_line_settings(data, stop, parity) ((data & 0x3) | ((stop & 0x1) << 2) | ((parity & 0x3) << 3))
++#define __get_rpn_data_bits(line) ((line) & 0x3)
++#define __get_rpn_stop_bits(line) (((line) >> 2) & 0x1)
++#define __get_rpn_parity(line) (((line) >> 3) & 0x3)
++
++/* ---- RFCOMM FCS computation ---- */
++
++/* CRC on 2 bytes */
++#define __crc(data) (rfcomm_crc_table[rfcomm_crc_table[0xff ^ data[0]] ^ data[1]])
++
++/* FCS on 2 bytes */
++static inline u8 __fcs(u8 *data)
++{
++ return (0xff - __crc(data));
++}
++
++/* FCS on 3 bytes */
++static inline u8 __fcs2(u8 *data)
++{
++ return (0xff - rfcomm_crc_table[__crc(data) ^ data[2]]);
++}
++
++/* Check FCS */
++static inline int __check_fcs(u8 *data, int type, u8 fcs)
++{
++ u8 f = __crc(data);
++
++ if (type != RFCOMM_UIH)
++ f = rfcomm_crc_table[f ^ data[2]];
++
++ return rfcomm_crc_table[f ^ fcs] != 0xcf;
++}
++
++/* ---- L2CAP callbacks ---- */
++static void rfcomm_l2state_change(struct sock *sk)
++{
++ BT_DBG("%p state %d", sk, sk->state);
++ rfcomm_schedule(RFCOMM_SCHED_STATE);
++}
++
++static void rfcomm_l2data_ready(struct sock *sk, int bytes)
++{
++ BT_DBG("%p bytes %d", sk, bytes);
++ rfcomm_schedule(RFCOMM_SCHED_RX);
++}
++
++static int rfcomm_l2sock_create(struct socket **sock)
++{
++ int err;
++
++ BT_DBG("");
++
++ err = sock_create(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP, sock);
++ if (!err) {
++ struct sock *sk = (*sock)->sk;
++ sk->data_ready = rfcomm_l2data_ready;
++ sk->state_change = rfcomm_l2state_change;
++ }
++ return err;
++}
++
++/* ---- RFCOMM DLCs ---- */
++static void rfcomm_dlc_timeout(unsigned long arg)
++{
++ struct rfcomm_dlc *d = (void *) arg;
++
++ BT_DBG("dlc %p state %ld", d, d->state);
++
++ set_bit(RFCOMM_TIMED_OUT, &d->flags);
++ rfcomm_dlc_put(d);
++ rfcomm_schedule(RFCOMM_SCHED_TIMEO);
++}
++
++static void rfcomm_dlc_set_timer(struct rfcomm_dlc *d, long timeout)
++{
++ BT_DBG("dlc %p state %ld timeout %ld", d, d->state, timeout);
++
++ if (!mod_timer(&d->timer, jiffies + timeout))
++ rfcomm_dlc_hold(d);
++}
++
++static void rfcomm_dlc_clear_timer(struct rfcomm_dlc *d)
++{
++ BT_DBG("dlc %p state %ld", d, d->state);
++
++ if (timer_pending(&d->timer) && del_timer(&d->timer))
++ rfcomm_dlc_put(d);
++}
++
++static void rfcomm_dlc_clear_state(struct rfcomm_dlc *d)
++{
++ BT_DBG("%p", d);
++
++ d->state = BT_OPEN;
++ d->flags = 0;
++ d->mscex = 0;
++ d->mtu = RFCOMM_DEFAULT_MTU;
++ d->v24_sig = RFCOMM_V24_RTC | RFCOMM_V24_RTR | RFCOMM_V24_DV;
++
++ d->cfc = RFCOMM_CFC_DISABLED;
++ d->rx_credits = RFCOMM_DEFAULT_CREDITS;
++}
++
++struct rfcomm_dlc *rfcomm_dlc_alloc(int prio)
++{
++ struct rfcomm_dlc *d = kmalloc(sizeof(*d), prio);
++ if (!d)
++ return NULL;
++ memset(d, 0, sizeof(*d));
++
++ init_timer(&d->timer);
++ d->timer.function = rfcomm_dlc_timeout;
++ d->timer.data = (unsigned long) d;
++
++ skb_queue_head_init(&d->tx_queue);
++ spin_lock_init(&d->lock);
++ atomic_set(&d->refcnt, 1);
++
++ rfcomm_dlc_clear_state(d);
++
++ BT_DBG("%p", d);
++ return d;
++}
++
++void rfcomm_dlc_free(struct rfcomm_dlc *d)
++{
++ BT_DBG("%p", d);
++
++ skb_queue_purge(&d->tx_queue);
++ kfree(d);
++}
++
++static void rfcomm_dlc_link(struct rfcomm_session *s, struct rfcomm_dlc *d)
++{
++ BT_DBG("dlc %p session %p", d, s);
++
++ rfcomm_session_hold(s);
++
++ rfcomm_dlc_hold(d);
++ list_add(&d->list, &s->dlcs);
++ d->session = s;
++}
++
++static void rfcomm_dlc_unlink(struct rfcomm_dlc *d)
++{
++ struct rfcomm_session *s = d->session;
++
++ BT_DBG("dlc %p refcnt %d session %p", d, atomic_read(&d->refcnt), s);
++
++ list_del(&d->list);
++ d->session = NULL;
++ rfcomm_dlc_put(d);
++
++ rfcomm_session_put(s);
++}
++
++static struct rfcomm_dlc *rfcomm_dlc_get(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_dlc *d;
++ struct list_head *p;
++
++ list_for_each(p, &s->dlcs) {
++ d = list_entry(p, struct rfcomm_dlc, list);
++ if (d->dlci == dlci)
++ return d;
++ }
++ return NULL;
++}
++
++static int __rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
++{
++ struct rfcomm_session *s;
++ int err = 0;
++ u8 dlci;
++
++ BT_DBG("dlc %p state %ld %s %s channel %d",
++ d, d->state, batostr(src), batostr(dst), channel);
++
++ if (channel < 1 || channel > 30)
++ return -EINVAL;
++
++ if (d->state != BT_OPEN && d->state != BT_CLOSED)
++ return 0;
++
++ s = rfcomm_session_get(src, dst);
++ if (!s) {
++ s = rfcomm_session_create(src, dst, &err);
++ if (!s)
++ return err;
++ }
++
++ dlci = __dlci(!s->initiator, channel);
++
++ /* Check if DLCI already exists */
++ if (rfcomm_dlc_get(s, dlci))
++ return -EBUSY;
++
++ rfcomm_dlc_clear_state(d);
++
++ d->dlci = dlci;
++ d->addr = __addr(s->initiator, dlci);
++ d->priority = 7;
++
++ d->state = BT_CONFIG;
++ rfcomm_dlc_link(s, d);
++
++ d->mtu = s->mtu;
++ d->cfc = (s->cfc == RFCOMM_CFC_UNKNOWN) ? 0 : s->cfc;
++
++ if (s->state == BT_CONNECTED)
++ rfcomm_send_pn(s, 1, d);
++ rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT);
++ return 0;
++}
++
++int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
++{
++ mm_segment_t fs;
++ int r;
++
++ rfcomm_lock();
++
++ fs = get_fs(); set_fs(KERNEL_DS);
++ r = __rfcomm_dlc_open(d, src, dst, channel);
++ set_fs(fs);
++
++ rfcomm_unlock();
++ return r;
++}
++
++static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
++{
++ struct rfcomm_session *s = d->session;
++ if (!s)
++ return 0;
++
++ BT_DBG("dlc %p state %ld dlci %d err %d session %p",
++ d, d->state, d->dlci, err, s);
++
++ switch (d->state) {
++ case BT_CONNECTED:
++ case BT_CONFIG:
++ case BT_CONNECT:
++ d->state = BT_DISCONN;
++ if (skb_queue_empty(&d->tx_queue)) {
++ rfcomm_send_disc(s, d->dlci);
++ rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT);
++ } else {
++ rfcomm_queue_disc(d);
++ rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT * 2);
++ }
++ break;
++
++ default:
++ rfcomm_dlc_clear_timer(d);
++
++ rfcomm_dlc_lock(d);
++ d->state = BT_CLOSED;
++ d->state_change(d, err);
++ rfcomm_dlc_unlock(d);
++
++ skb_queue_purge(&d->tx_queue);
++ rfcomm_dlc_unlink(d);
++ }
++
++ return 0;
++}
++
++int rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
++{
++ mm_segment_t fs;
++ int r;
++
++ rfcomm_lock();
++
++ fs = get_fs(); set_fs(KERNEL_DS);
++ r = __rfcomm_dlc_close(d, err);
++ set_fs(fs);
++
++ rfcomm_unlock();
++ return r;
++}
++
++int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb)
++{
++ int len = skb->len;
++
++ if (d->state != BT_CONNECTED)
++ return -ENOTCONN;
++
++ BT_DBG("dlc %p mtu %d len %d", d, d->mtu, len);
++
++ if (len > d->mtu)
++ return -EINVAL;
++
++ rfcomm_make_uih(skb, d->addr);
++ skb_queue_tail(&d->tx_queue, skb);
++
++ if (!test_bit(RFCOMM_TX_THROTTLED, &d->flags))
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++ return len;
++}
++
++void __rfcomm_dlc_throttle(struct rfcomm_dlc *d)
++{
++ BT_DBG("dlc %p state %ld", d, d->state);
++
++ if (!d->cfc) {
++ d->v24_sig |= RFCOMM_V24_FC;
++ set_bit(RFCOMM_MSC_PENDING, &d->flags);
++ }
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++}
++
++void __rfcomm_dlc_unthrottle(struct rfcomm_dlc *d)
++{
++ BT_DBG("dlc %p state %ld", d, d->state);
++
++ if (!d->cfc) {
++ d->v24_sig &= ~RFCOMM_V24_FC;
++ set_bit(RFCOMM_MSC_PENDING, &d->flags);
++ }
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++}
++
++/*
++ Set/get modem status functions use _local_ status i.e. what we report
++ to the other side.
++ Remote status is provided by dlc->modem_status() callback.
++ */
++int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig)
++{
++ BT_DBG("dlc %p state %ld v24_sig 0x%x",
++ d, d->state, v24_sig);
++
++ if (test_bit(RFCOMM_RX_THROTTLED, &d->flags))
++ v24_sig |= RFCOMM_V24_FC;
++ else
++ v24_sig &= ~RFCOMM_V24_FC;
++
++ d->v24_sig = v24_sig;
++
++ if (!test_and_set_bit(RFCOMM_MSC_PENDING, &d->flags))
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++
++ return 0;
++}
++
++int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig)
++{
++ BT_DBG("dlc %p state %ld v24_sig 0x%x",
++ d, d->state, d->v24_sig);
++
++ *v24_sig = d->v24_sig;
++ return 0;
++}
++
++/* ---- RFCOMM sessions ---- */
++struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state)
++{
++ struct rfcomm_session *s = kmalloc(sizeof(*s), GFP_KERNEL);
++ if (!s)
++ return NULL;
++ memset(s, 0, sizeof(*s));
++
++ BT_DBG("session %p sock %p", s, sock);
++
++ INIT_LIST_HEAD(&s->dlcs);
++ s->state = state;
++ s->sock = sock;
++
++ s->mtu = RFCOMM_DEFAULT_MTU;
++ s->cfc = RFCOMM_CFC_UNKNOWN;
++
++ list_add(&s->list, &session_list);
++
++ /* Do not increment module usage count for listeting sessions.
++ * Otherwise we won't be able to unload the module. */
++ if (state != BT_LISTEN)
++ MOD_INC_USE_COUNT;
++ return s;
++}
++
++void rfcomm_session_del(struct rfcomm_session *s)
++{
++ int state = s->state;
++
++ BT_DBG("session %p state %ld", s, s->state);
++
++ list_del(&s->list);
++
++ if (state == BT_CONNECTED)
++ rfcomm_send_disc(s, 0);
++
++ sock_release(s->sock);
++ kfree(s);
++
++ if (state != BT_LISTEN)
++ MOD_DEC_USE_COUNT;
++}
++
++struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst)
++{
++ struct rfcomm_session *s;
++ struct list_head *p, *n;
++ struct bluez_pinfo *pi;
++ list_for_each_safe(p, n, &session_list) {
++ s = list_entry(p, struct rfcomm_session, list);
++ pi = bluez_pi(s->sock->sk);
++
++ if ((!bacmp(src, BDADDR_ANY) || !bacmp(&pi->src, src)) &&
++ !bacmp(&pi->dst, dst))
++ return s;
++ }
++ return NULL;
++}
++
++void rfcomm_session_close(struct rfcomm_session *s, int err)
++{
++ struct rfcomm_dlc *d;
++ struct list_head *p, *n;
++
++ BT_DBG("session %p state %ld err %d", s, s->state, err);
++
++ rfcomm_session_hold(s);
++
++ s->state = BT_CLOSED;
++
++ /* Close all dlcs */
++ list_for_each_safe(p, n, &s->dlcs) {
++ d = list_entry(p, struct rfcomm_dlc, list);
++ d->state = BT_CLOSED;
++ __rfcomm_dlc_close(d, err);
++ }
++
++ rfcomm_session_put(s);
++}
++
++struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst, int *err)
++{
++ struct rfcomm_session *s = NULL;
++ struct sockaddr_l2 addr;
++ struct l2cap_options opts;
++ struct socket *sock;
++ int size;
++
++ BT_DBG("%s %s", batostr(src), batostr(dst));
++
++ *err = rfcomm_l2sock_create(&sock);
++ if (*err < 0)
++ return NULL;
++
++ bacpy(&addr.l2_bdaddr, src);
++ addr.l2_family = AF_BLUETOOTH;
++ addr.l2_psm = 0;
++ *err = sock->ops->bind(sock, (struct sockaddr *) &addr, sizeof(addr));
++ if (*err < 0)
++ goto failed;
++
++ /* Set L2CAP options */
++ size = sizeof(opts);
++ sock->ops->getsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, &size);
++
++ opts.imtu = RFCOMM_MAX_L2CAP_MTU;
++ sock->ops->setsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, size);
++
++ s = rfcomm_session_add(sock, BT_BOUND);
++ if (!s) {
++ *err = -ENOMEM;
++ goto failed;
++ }
++
++ s->initiator = 1;
++
++ bacpy(&addr.l2_bdaddr, dst);
++ addr.l2_family = AF_BLUETOOTH;
++ addr.l2_psm = htobs(RFCOMM_PSM);
++ *err = sock->ops->connect(sock, (struct sockaddr *) &addr, sizeof(addr), O_NONBLOCK);
++ if (*err == 0 || *err == -EAGAIN)
++ return s;
++
++ rfcomm_session_del(s);
++ return NULL;
++
++failed:
++ sock_release(sock);
++ return NULL;
++}
++
++void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst)
++{
++ struct sock *sk = s->sock->sk;
++ if (src)
++ bacpy(src, &bluez_pi(sk)->src);
++ if (dst)
++ bacpy(dst, &bluez_pi(sk)->dst);
++}
++
++/* ---- RFCOMM frame sending ---- */
++static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len)
++{
++ struct socket *sock = s->sock;
++ struct iovec iv = { data, len };
++ struct msghdr msg;
++ int err;
++
++ BT_DBG("session %p len %d", s, len);
++
++ memset(&msg, 0, sizeof(msg));
++ msg.msg_iovlen = 1;
++ msg.msg_iov = &iv;
++
++ err = sock->ops->sendmsg(sock, &msg, len, 0);
++ return err;
++}
++
++static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_cmd cmd;
++
++ BT_DBG("%p dlci %d", s, dlci);
++
++ cmd.addr = __addr(s->initiator, dlci);
++ cmd.ctrl = __ctrl(RFCOMM_SABM, 1);
++ cmd.len = __len8(0);
++ cmd.fcs = __fcs2((u8 *) &cmd);
++
++ return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
++}
++
++static int rfcomm_send_ua(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_cmd cmd;
++
++ BT_DBG("%p dlci %d", s, dlci);
++
++ cmd.addr = __addr(!s->initiator, dlci);
++ cmd.ctrl = __ctrl(RFCOMM_UA, 1);
++ cmd.len = __len8(0);
++ cmd.fcs = __fcs2((u8 *) &cmd);
++
++ return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
++}
++
++static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_cmd cmd;
++
++ BT_DBG("%p dlci %d", s, dlci);
++
++ cmd.addr = __addr(s->initiator, dlci);
++ cmd.ctrl = __ctrl(RFCOMM_DISC, 1);
++ cmd.len = __len8(0);
++ cmd.fcs = __fcs2((u8 *) &cmd);
++
++ return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
++}
++
++static int rfcomm_queue_disc(struct rfcomm_dlc *d)
++{
++ struct rfcomm_cmd *cmd;
++ struct sk_buff *skb;
++
++ BT_DBG("dlc %p dlci %d", d, d->dlci);
++
++ skb = alloc_skb(sizeof(*cmd), GFP_KERNEL);
++ if (!skb)
++ return -ENOMEM;
++
++ cmd = (void *) __skb_put(skb, sizeof(*cmd));
++ cmd->addr = d->addr;
++ cmd->ctrl = __ctrl(RFCOMM_DISC, 1);
++ cmd->len = __len8(0);
++ cmd->fcs = __fcs2((u8 *) cmd);
++
++ skb_queue_tail(&d->tx_queue, skb);
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++ return 0;
++}
++
++static int rfcomm_send_dm(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_cmd cmd;
++
++ BT_DBG("%p dlci %d", s, dlci);
++
++ cmd.addr = __addr(!s->initiator, dlci);
++ cmd.ctrl = __ctrl(RFCOMM_DM, 1);
++ cmd.len = __len8(0);
++ cmd.fcs = __fcs2((u8 *) &cmd);
++
++ return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
++}
++
++static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d type %d", s, cr, type);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + 1);
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_NSC);
++ mcc->len = __len8(1);
++
++ /* Type that we didn't like */
++ *ptr = __mcc_type(cr, type); ptr++;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ struct rfcomm_pn *pn;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d dlci %d mtu %d", s, cr, d->dlci, d->mtu);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + sizeof(*pn));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_PN);
++ mcc->len = __len8(sizeof(*pn));
++
++ pn = (void *) ptr; ptr += sizeof(*pn);
++ pn->dlci = d->dlci;
++ pn->priority = d->priority;
++ pn->ack_timer = 0;
++ pn->max_retrans = 0;
++
++ if (s->cfc) {
++ pn->flow_ctrl = cr ? 0xf0 : 0xe0;
++ pn->credits = RFCOMM_DEFAULT_CREDITS;
++ } else {
++ pn->flow_ctrl = 0;
++ pn->credits = 0;
++ }
++
++ pn->mtu = htobs(d->mtu);
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_rpn(struct rfcomm_session *s, int cr, u8 dlci,
++ u8 bit_rate, u8 data_bits, u8 stop_bits,
++ u8 parity, u8 flow_ctrl_settings,
++ u8 xon_char, u8 xoff_char, u16 param_mask)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ struct rfcomm_rpn *rpn;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d dlci %d bit_r 0x%x data_b 0x%x stop_b 0x%x parity 0x%x"
++ "flwc_s 0x%x xon_c 0x%x xoff_c 0x%x p_mask 0x%x",
++ s, cr, dlci, bit_rate, data_bits, stop_bits, parity,
++ flow_ctrl_settings, xon_char, xoff_char, param_mask);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + sizeof(*rpn));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_RPN);
++ mcc->len = __len8(sizeof(*rpn));
++
++ rpn = (void *) ptr; ptr += sizeof(*rpn);
++ rpn->dlci = __addr(1, dlci);
++ rpn->bit_rate = bit_rate;
++ rpn->line_settings = __rpn_line_settings(data_bits, stop_bits, parity);
++ rpn->flow_ctrl = flow_ctrl_settings;
++ rpn->xon_char = xon_char;
++ rpn->xoff_char = xoff_char;
++ rpn->param_mask = param_mask;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_rls(struct rfcomm_session *s, int cr, u8 dlci, u8 status)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ struct rfcomm_rls *rls;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d status 0x%x", s, cr, status);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + sizeof(*rls));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_RLS);
++ mcc->len = __len8(sizeof(*rls));
++
++ rls = (void *) ptr; ptr += sizeof(*rls);
++ rls->dlci = __addr(1, dlci);
++ rls->status = status;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ struct rfcomm_msc *msc;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d v24 0x%x", s, cr, v24_sig);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + sizeof(*msc));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_MSC);
++ mcc->len = __len8(sizeof(*msc));
++
++ msc = (void *) ptr; ptr += sizeof(*msc);
++ msc->dlci = __addr(1, dlci);
++ msc->v24_sig = v24_sig | 0x01;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_fcoff(struct rfcomm_session *s, int cr)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d", s, cr);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_FCOFF);
++ mcc->len = __len8(0);
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_fcon(struct rfcomm_session *s, int cr)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d", s, cr);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_FCON);
++ mcc->len = __len8(0);
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len)
++{
++ struct socket *sock = s->sock;
++ struct iovec iv[3];
++ struct msghdr msg;
++ unsigned char hdr[5], crc[1];
++
++ if (len > 125)
++ return -EINVAL;
++
++ BT_DBG("%p cr %d", s, cr);
++
++ hdr[0] = __addr(s->initiator, 0);
++ hdr[1] = __ctrl(RFCOMM_UIH, 0);
++ hdr[2] = 0x01 | ((len + 2) << 1);
++ hdr[3] = 0x01 | ((cr & 0x01) << 1) | (RFCOMM_TEST << 2);
++ hdr[4] = 0x01 | (len << 1);
++
++ crc[0] = __fcs(hdr);
++
++ iv[0].iov_base = hdr;
++ iv[0].iov_len = 5;
++ iv[1].iov_base = pattern;
++ iv[1].iov_len = len;
++ iv[2].iov_base = crc;
++ iv[2].iov_len = 1;
++
++ memset(&msg, 0, sizeof(msg));
++ msg.msg_iovlen = 3;
++ msg.msg_iov = iv;
++ return sock->ops->sendmsg(sock, &msg, 6 + len, 0);
++}
++
++static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits)
++{
++ struct rfcomm_hdr *hdr;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p addr %d credits %d", s, addr, credits);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = addr;
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 1);
++ hdr->len = __len8(0);
++
++ *ptr = credits; ptr++;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static void rfcomm_make_uih(struct sk_buff *skb, u8 addr)
++{
++ struct rfcomm_hdr *hdr;
++ int len = skb->len;
++ u8 *crc;
++
++ if (len > 127) {
++ hdr = (void *) skb_push(skb, 4);
++ put_unaligned(htobs(__len16(len)), (u16 *) &hdr->len);
++ } else {
++ hdr = (void *) skb_push(skb, 3);
++ hdr->len = __len8(len);
++ }
++ hdr->addr = addr;
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++
++ crc = skb_put(skb, 1);
++ *crc = __fcs((void *) hdr);
++}
++
++/* ---- RFCOMM frame reception ---- */
++static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci)
++{
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (dlci) {
++ /* Data channel */
++ struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
++ if (!d) {
++ rfcomm_send_dm(s, dlci);
++ return 0;
++ }
++
++ switch (d->state) {
++ case BT_CONNECT:
++ rfcomm_dlc_clear_timer(d);
++
++ rfcomm_dlc_lock(d);
++ d->state = BT_CONNECTED;
++ d->state_change(d, 0);
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_send_msc(s, 1, dlci, d->v24_sig);
++ break;
++
++ case BT_DISCONN:
++ d->state = BT_CLOSED;
++ __rfcomm_dlc_close(d, 0);
++ break;
++ }
++ } else {
++ /* Control channel */
++ switch (s->state) {
++ case BT_CONNECT:
++ s->state = BT_CONNECTED;
++ rfcomm_process_connect(s);
++ break;
++ }
++ }
++ return 0;
++}
++
++static int rfcomm_recv_dm(struct rfcomm_session *s, u8 dlci)
++{
++ int err = 0;
++
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (dlci) {
++ /* Data DLC */
++ struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
++ if (d) {
++ if (d->state == BT_CONNECT || d->state == BT_CONFIG)
++ err = ECONNREFUSED;
++ else
++ err = ECONNRESET;
++
++ d->state = BT_CLOSED;
++ __rfcomm_dlc_close(d, err);
++ }
++ } else {
++ if (s->state == BT_CONNECT)
++ err = ECONNREFUSED;
++ else
++ err = ECONNRESET;
++
++ s->state = BT_CLOSED;
++ rfcomm_session_close(s, err);
++ }
++ return 0;
++}
++
++static int rfcomm_recv_disc(struct rfcomm_session *s, u8 dlci)
++{
++ int err = 0;
++
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (dlci) {
++ struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
++ if (d) {
++ rfcomm_send_ua(s, dlci);
++
++ if (d->state == BT_CONNECT || d->state == BT_CONFIG)
++ err = ECONNREFUSED;
++ else
++ err = ECONNRESET;
++
++ d->state = BT_CLOSED;
++ __rfcomm_dlc_close(d, err);
++ } else
++ rfcomm_send_dm(s, dlci);
++
++ } else {
++ rfcomm_send_ua(s, 0);
++
++ if (s->state == BT_CONNECT)
++ err = ECONNREFUSED;
++ else
++ err = ECONNRESET;
++
++ s->state = BT_CLOSED;
++ rfcomm_session_close(s, err);
++ }
++
++ return 0;
++}
++
++static int rfcomm_recv_sabm(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_dlc *d;
++ u8 channel;
++
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (!dlci) {
++ rfcomm_send_ua(s, 0);
++
++ if (s->state == BT_OPEN) {
++ s->state = BT_CONNECTED;
++ rfcomm_process_connect(s);
++ }
++ return 0;
++ }
++
++ /* Check if DLC exists */
++ d = rfcomm_dlc_get(s, dlci);
++ if (d) {
++ if (d->state == BT_OPEN) {
++ /* DLC was previously opened by PN request */
++ rfcomm_send_ua(s, dlci);
++
++ rfcomm_dlc_lock(d);
++ d->state = BT_CONNECTED;
++ d->state_change(d, 0);
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_send_msc(s, 1, dlci, d->v24_sig);
++ }
++ return 0;
++ }
++
++ /* Notify socket layer about incomming connection */
++ channel = __srv_channel(dlci);
++ if (rfcomm_connect_ind(s, channel, &d)) {
++ d->dlci = dlci;
++ d->addr = __addr(s->initiator, dlci);
++ rfcomm_dlc_link(s, d);
++
++ rfcomm_send_ua(s, dlci);
++
++ rfcomm_dlc_lock(d);
++ d->state = BT_CONNECTED;
++ d->state_change(d, 0);
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_send_msc(s, 1, dlci, d->v24_sig);
++ } else {
++ rfcomm_send_dm(s, dlci);
++ }
++
++ return 0;
++}
++
++static int rfcomm_apply_pn(struct rfcomm_dlc *d, int cr, struct rfcomm_pn *pn)
++{
++ struct rfcomm_session *s = d->session;
++
++ BT_DBG("dlc %p state %ld dlci %d mtu %d fc 0x%x credits %d",
++ d, d->state, d->dlci, pn->mtu, pn->flow_ctrl, pn->credits);
++
++ if (pn->flow_ctrl == 0xf0 || pn->flow_ctrl == 0xe0) {
++ d->cfc = s->cfc = RFCOMM_CFC_ENABLED;
++ d->tx_credits = pn->credits;
++ } else {
++ d->cfc = s->cfc = RFCOMM_CFC_DISABLED;
++ set_bit(RFCOMM_TX_THROTTLED, &d->flags);
++ }
++
++ d->priority = pn->priority;
++
++ d->mtu = s->mtu = btohs(pn->mtu);
++
++ return 0;
++}
++
++static int rfcomm_recv_pn(struct rfcomm_session *s, int cr, struct sk_buff *skb)
++{
++ struct rfcomm_pn *pn = (void *) skb->data;
++ struct rfcomm_dlc *d;
++ u8 dlci = pn->dlci;
++
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (!dlci)
++ return 0;
++
++ d = rfcomm_dlc_get(s, dlci);
++ if (d) {
++ if (cr) {
++ /* PN request */
++ rfcomm_apply_pn(d, cr, pn);
++ rfcomm_send_pn(s, 0, d);
++ } else {
++ /* PN response */
++ switch (d->state) {
++ case BT_CONFIG:
++ rfcomm_apply_pn(d, cr, pn);
++
++ d->state = BT_CONNECT;
++ rfcomm_send_sabm(s, d->dlci);
++ break;
++ }
++ }
++ } else {
++ u8 channel = __srv_channel(dlci);
++
++ if (!cr)
++ return 0;
++
++ /* PN request for non existing DLC.
++ * Assume incomming connection. */
++ if (rfcomm_connect_ind(s, channel, &d)) {
++ d->dlci = dlci;
++ d->addr = __addr(s->initiator, dlci);
++ rfcomm_dlc_link(s, d);
++
++ rfcomm_apply_pn(d, cr, pn);
++
++ d->state = BT_OPEN;
++ rfcomm_send_pn(s, 0, d);
++ } else {
++ rfcomm_send_dm(s, dlci);
++ }
++ }
++ return 0;
++}
++
++static int rfcomm_recv_rpn(struct rfcomm_session *s, int cr, int len, struct sk_buff *skb)
++{
++ struct rfcomm_rpn *rpn = (void *) skb->data;
++ u8 dlci = __get_dlci(rpn->dlci);
++
++ u8 bit_rate = 0;
++ u8 data_bits = 0;
++ u8 stop_bits = 0;
++ u8 parity = 0;
++ u8 flow_ctrl = 0;
++ u8 xon_char = 0;
++ u8 xoff_char = 0;
++ u16 rpn_mask = RFCOMM_RPN_PM_ALL;
++
++ BT_DBG("dlci %d cr %d len 0x%x bitr 0x%x line 0x%x flow 0x%x xonc 0x%x xoffc 0x%x pm 0x%x",
++ dlci, cr, len, rpn->bit_rate, rpn->line_settings, rpn->flow_ctrl,
++ rpn->xon_char, rpn->xoff_char, rpn->param_mask);
++
++ if (!cr)
++ return 0;
++
++ if (len == 1) {
++ /* request: return default setting */
++ bit_rate = RFCOMM_RPN_BR_115200;
++ data_bits = RFCOMM_RPN_DATA_8;
++ stop_bits = RFCOMM_RPN_STOP_1;
++ parity = RFCOMM_RPN_PARITY_NONE;
++ flow_ctrl = RFCOMM_RPN_FLOW_NONE;
++ xon_char = RFCOMM_RPN_XON_CHAR;
++ xoff_char = RFCOMM_RPN_XOFF_CHAR;
++
++ goto rpn_out;
++ }
++ /* check for sane values: ignore/accept bit_rate, 8 bits, 1 stop bit, no parity,
++ no flow control lines, normal XON/XOFF chars */
++ if (rpn->param_mask & RFCOMM_RPN_PM_BITRATE) {
++ bit_rate = rpn->bit_rate;
++ if (bit_rate != RFCOMM_RPN_BR_115200) {
++ BT_DBG("RPN bit rate mismatch 0x%x", bit_rate);
++ bit_rate = RFCOMM_RPN_BR_115200;
++ rpn_mask ^= RFCOMM_RPN_PM_BITRATE;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_DATA) {
++ data_bits = __get_rpn_data_bits(rpn->line_settings);
++ if (data_bits != RFCOMM_RPN_DATA_8) {
++ BT_DBG("RPN data bits mismatch 0x%x", data_bits);
++ data_bits = RFCOMM_RPN_DATA_8;
++ rpn_mask ^= RFCOMM_RPN_PM_DATA;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_STOP) {
++ stop_bits = __get_rpn_stop_bits(rpn->line_settings);
++ if (stop_bits != RFCOMM_RPN_STOP_1) {
++ BT_DBG("RPN stop bits mismatch 0x%x", stop_bits);
++ stop_bits = RFCOMM_RPN_STOP_1;
++ rpn_mask ^= RFCOMM_RPN_PM_STOP;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_PARITY) {
++ parity = __get_rpn_parity(rpn->line_settings);
++ if (parity != RFCOMM_RPN_PARITY_NONE) {
++ BT_DBG("RPN parity mismatch 0x%x", parity);
++ parity = RFCOMM_RPN_PARITY_NONE;
++ rpn_mask ^= RFCOMM_RPN_PM_PARITY;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_FLOW) {
++ flow_ctrl = rpn->flow_ctrl;
++ if (flow_ctrl != RFCOMM_RPN_FLOW_NONE) {
++ BT_DBG("RPN flow ctrl mismatch 0x%x", flow_ctrl);
++ flow_ctrl = RFCOMM_RPN_FLOW_NONE;
++ rpn_mask ^= RFCOMM_RPN_PM_FLOW;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_XON) {
++ xon_char = rpn->xon_char;
++ if (xon_char != RFCOMM_RPN_XON_CHAR) {
++ BT_DBG("RPN XON char mismatch 0x%x", xon_char);
++ xon_char = RFCOMM_RPN_XON_CHAR;
++ rpn_mask ^= RFCOMM_RPN_PM_XON;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_XOFF) {
++ xoff_char = rpn->xoff_char;
++ if (xoff_char != RFCOMM_RPN_XOFF_CHAR) {
++ BT_DBG("RPN XOFF char mismatch 0x%x", xoff_char);
++ xoff_char = RFCOMM_RPN_XOFF_CHAR;
++ rpn_mask ^= RFCOMM_RPN_PM_XOFF;
++ }
++ }
++
++rpn_out:
++ rfcomm_send_rpn(s, 0, dlci,
++ bit_rate, data_bits, stop_bits, parity, flow_ctrl,
++ xon_char, xoff_char, rpn_mask);
++
++ return 0;
++}
++
++static int rfcomm_recv_rls(struct rfcomm_session *s, int cr, struct sk_buff *skb)
++{
++ struct rfcomm_rls *rls = (void *) skb->data;
++ u8 dlci = __get_dlci(rls->dlci);
++
++ BT_DBG("dlci %d cr %d status 0x%x", dlci, cr, rls->status);
++
++ if (!cr)
++ return 0;
++
++ /* FIXME: We should probably do something with this
++ information here. But for now it's sufficient just
++ to reply -- Bluetooth 1.1 says it's mandatory to
++ recognise and respond to RLS */
++
++ rfcomm_send_rls(s, 0, dlci, rls->status);
++
++ return 0;
++}
++
++static int rfcomm_recv_msc(struct rfcomm_session *s, int cr, struct sk_buff *skb)
++{
++ struct rfcomm_msc *msc = (void *) skb->data;
++ struct rfcomm_dlc *d;
++ u8 dlci = __get_dlci(msc->dlci);
++
++ BT_DBG("dlci %d cr %d v24 0x%x", dlci, cr, msc->v24_sig);
++
++ d = rfcomm_dlc_get(s, dlci);
++ if (!d)
++ return 0;
++
++ if (cr) {
++ if (msc->v24_sig & RFCOMM_V24_FC && !d->cfc)
++ set_bit(RFCOMM_TX_THROTTLED, &d->flags);
++ else
++ clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
++
++ rfcomm_dlc_lock(d);
++ if (d->modem_status)
++ d->modem_status(d, msc->v24_sig);
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_send_msc(s, 0, dlci, msc->v24_sig);
++
++ d->mscex |= RFCOMM_MSCEX_RX;
++ } else
++ d->mscex |= RFCOMM_MSCEX_TX;
++
++ return 0;
++}
++
++static int rfcomm_recv_mcc(struct rfcomm_session *s, struct sk_buff *skb)
++{
++ struct rfcomm_mcc *mcc = (void *) skb->data;
++ u8 type, cr, len;
++
++ cr = __test_cr(mcc->type);
++ type = __get_mcc_type(mcc->type);
++ len = __get_mcc_len(mcc->len);
++
++ BT_DBG("%p type 0x%x cr %d", s, type, cr);
++
++ skb_pull(skb, 2);
++
++ switch (type) {
++ case RFCOMM_PN:
++ rfcomm_recv_pn(s, cr, skb);
++ break;
++
++ case RFCOMM_RPN:
++ rfcomm_recv_rpn(s, cr, len, skb);
++ break;
++
++ case RFCOMM_RLS:
++ rfcomm_recv_rls(s, cr, skb);
++ break;
++
++ case RFCOMM_MSC:
++ rfcomm_recv_msc(s, cr, skb);
++ break;
++
++ case RFCOMM_FCOFF:
++ if (cr) {
++ set_bit(RFCOMM_TX_THROTTLED, &s->flags);
++ rfcomm_send_fcoff(s, 0);
++ }
++ break;
++
++ case RFCOMM_FCON:
++ if (cr) {
++ clear_bit(RFCOMM_TX_THROTTLED, &s->flags);
++ rfcomm_send_fcon(s, 0);
++ }
++ break;
++
++ case RFCOMM_TEST:
++ if (cr)
++ rfcomm_send_test(s, 0, skb->data, skb->len);
++ break;
++
++ case RFCOMM_NSC:
++ break;
++
++ default:
++ BT_ERR("Unknown control type 0x%02x", type);
++ rfcomm_send_nsc(s, cr, type);
++ break;
++ }
++ return 0;
++}
++
++static int rfcomm_recv_data(struct rfcomm_session *s, u8 dlci, int pf, struct sk_buff *skb)
++{
++ struct rfcomm_dlc *d;
++
++ BT_DBG("session %p state %ld dlci %d pf %d", s, s->state, dlci, pf);
++
++ d = rfcomm_dlc_get(s, dlci);
++ if (!d) {
++ rfcomm_send_dm(s, dlci);
++ goto drop;
++ }
++
++ if (pf && d->cfc) {
++ u8 credits = *(u8 *) skb->data; skb_pull(skb, 1);
++
++ d->tx_credits += credits;
++ if (d->tx_credits)
++ clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
++ }
++
++ if (skb->len && d->state == BT_CONNECTED) {
++ rfcomm_dlc_lock(d);
++ d->rx_credits--;
++ d->data_ready(d, skb);
++ rfcomm_dlc_unlock(d);
++ return 0;
++ }
++
++drop:
++ kfree_skb(skb);
++ return 0;
++}
++
++static int rfcomm_recv_frame(struct rfcomm_session *s, struct sk_buff *skb)
++{
++ struct rfcomm_hdr *hdr = (void *) skb->data;
++ u8 type, dlci, fcs;
++
++ dlci = __get_dlci(hdr->addr);
++ type = __get_type(hdr->ctrl);
++
++ /* Trim FCS */
++ skb->len--; skb->tail--;
++ fcs = *(u8 *) skb->tail;
++
++ if (__check_fcs(skb->data, type, fcs)) {
++ BT_ERR("bad checksum in packet");
++ kfree_skb(skb);
++ return -EILSEQ;
++ }
++
++ if (__test_ea(hdr->len))
++ skb_pull(skb, 3);
++ else
++ skb_pull(skb, 4);
++
++ switch (type) {
++ case RFCOMM_SABM:
++ if (__test_pf(hdr->ctrl))
++ rfcomm_recv_sabm(s, dlci);
++ break;
++
++ case RFCOMM_DISC:
++ if (__test_pf(hdr->ctrl))
++ rfcomm_recv_disc(s, dlci);
++ break;
++
++ case RFCOMM_UA:
++ if (__test_pf(hdr->ctrl))
++ rfcomm_recv_ua(s, dlci);
++ break;
++
++ case RFCOMM_DM:
++ rfcomm_recv_dm(s, dlci);
++ break;
++
++ case RFCOMM_UIH:
++ if (dlci)
++ return rfcomm_recv_data(s, dlci, __test_pf(hdr->ctrl), skb);
++
++ rfcomm_recv_mcc(s, skb);
++ break;
++
++ default:
++ BT_ERR("Unknown packet type 0x%02x\n", type);
++ break;
++ }
++ kfree_skb(skb);
++ return 0;
++}
++
++/* ---- Connection and data processing ---- */
++
++static void rfcomm_process_connect(struct rfcomm_session *s)
++{
++ struct rfcomm_dlc *d;
++ struct list_head *p, *n;
++
++ BT_DBG("session %p state %ld", s, s->state);
++
++ list_for_each_safe(p, n, &s->dlcs) {
++ d = list_entry(p, struct rfcomm_dlc, list);
++ if (d->state == BT_CONFIG) {
++ d->mtu = s->mtu;
++ rfcomm_send_pn(s, 1, d);
++ }
++ }
++}
++
++/* Send data queued for the DLC.
++ * Return number of frames left in the queue.
++ */
++static inline int rfcomm_process_tx(struct rfcomm_dlc *d)
++{
++ struct sk_buff *skb;
++ int err;
++
++ BT_DBG("dlc %p state %ld cfc %d rx_credits %d tx_credits %d",
++ d, d->state, d->cfc, d->rx_credits, d->tx_credits);
++
++ /* Send pending MSC */
++ if (test_and_clear_bit(RFCOMM_MSC_PENDING, &d->flags))
++ rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
++
++ if (d->cfc) {
++ /* CFC enabled.
++ * Give them some credits */
++ if (!test_bit(RFCOMM_RX_THROTTLED, &d->flags) &&
++ d->rx_credits <= (d->cfc >> 2)) {
++ rfcomm_send_credits(d->session, d->addr, d->cfc - d->rx_credits);
++ d->rx_credits = d->cfc;
++ }
++ } else {
++ /* CFC disabled.
++ * Give ourselves some credits */
++ d->tx_credits = 5;
++ }
++
++ if (test_bit(RFCOMM_TX_THROTTLED, &d->flags))
++ return skb_queue_len(&d->tx_queue);
++
++ while (d->tx_credits && (skb = skb_dequeue(&d->tx_queue))) {
++ err = rfcomm_send_frame(d->session, skb->data, skb->len);
++ if (err < 0) {
++ skb_queue_head(&d->tx_queue, skb);
++ break;
++ }
++ kfree_skb(skb);
++ d->tx_credits--;
++ }
++
++ if (d->cfc && !d->tx_credits) {
++ /* We're out of TX credits.
++ * Set TX_THROTTLED flag to avoid unnesary wakeups by dlc_send. */
++ set_bit(RFCOMM_TX_THROTTLED, &d->flags);
++ }
++
++ return skb_queue_len(&d->tx_queue);
++}
++
++static inline void rfcomm_process_dlcs(struct rfcomm_session *s)
++{
++ struct rfcomm_dlc *d;
++ struct list_head *p, *n;
++
++ BT_DBG("session %p state %ld", s, s->state);
++
++ list_for_each_safe(p, n, &s->dlcs) {
++ d = list_entry(p, struct rfcomm_dlc, list);
++ if (test_bit(RFCOMM_TIMED_OUT, &d->flags)) {
++ __rfcomm_dlc_close(d, ETIMEDOUT);
++ continue;
++ }
++
++ if (test_bit(RFCOMM_TX_THROTTLED, &s->flags))
++ continue;
++
++ if ((d->state == BT_CONNECTED || d->state == BT_DISCONN) &&
++ d->mscex == RFCOMM_MSCEX_OK)
++ rfcomm_process_tx(d);
++ }
++}
++
++static inline void rfcomm_process_rx(struct rfcomm_session *s)
++{
++ struct socket *sock = s->sock;
++ struct sock *sk = sock->sk;
++ struct sk_buff *skb;
++
++ BT_DBG("session %p state %ld qlen %d", s, s->state, skb_queue_len(&sk->receive_queue));
++
++ /* Get data directly from socket receive queue without copying it. */
++ while ((skb = skb_dequeue(&sk->receive_queue))) {
++ skb_orphan(skb);
++ rfcomm_recv_frame(s, skb);
++ }
++
++ if (sk->state == BT_CLOSED) {
++ if (!s->initiator)
++ rfcomm_session_put(s);
++
++ rfcomm_session_close(s, sk->err);
++ }
++}
++
++static inline void rfcomm_accept_connection(struct rfcomm_session *s)
++{
++ struct socket *sock = s->sock, *nsock;
++ int err;
++
++ /* Fast check for a new connection.
++ * Avoids unnesesary socket allocations. */
++ if (list_empty(&bluez_pi(sock->sk)->accept_q))
++ return;
++
++ BT_DBG("session %p", s);
++
++ nsock = sock_alloc();
++ if (!nsock)
++ return;
++
++ nsock->type = sock->type;
++ nsock->ops = sock->ops;
++
++ err = sock->ops->accept(sock, nsock, O_NONBLOCK);
++ if (err < 0) {
++ sock_release(nsock);
++ return;
++ }
++
++ /* Set our callbacks */
++ nsock->sk->data_ready = rfcomm_l2data_ready;
++ nsock->sk->state_change = rfcomm_l2state_change;
++
++ s = rfcomm_session_add(nsock, BT_OPEN);
++ if (s) {
++ rfcomm_session_hold(s);
++ rfcomm_schedule(RFCOMM_SCHED_RX);
++ } else
++ sock_release(nsock);
++}
++
++static inline void rfcomm_check_connection(struct rfcomm_session *s)
++{
++ struct sock *sk = s->sock->sk;
++
++ BT_DBG("%p state %ld", s, s->state);
++
++ switch(sk->state) {
++ case BT_CONNECTED:
++ s->state = BT_CONNECT;
++
++ /* We can adjust MTU on outgoing sessions.
++ * L2CAP MTU minus UIH header and FCS. */
++ s->mtu = min(l2cap_pi(sk)->omtu, l2cap_pi(sk)->imtu) - 5;
++
++ rfcomm_send_sabm(s, 0);
++ break;
++
++ case BT_CLOSED:
++ s->state = BT_CLOSED;
++ rfcomm_session_close(s, sk->err);
++ break;
++ }
++}
++
++static inline void rfcomm_process_sessions(void)
++{
++ struct list_head *p, *n;
++
++ rfcomm_lock();
++
++ list_for_each_safe(p, n, &session_list) {
++ struct rfcomm_session *s;
++ s = list_entry(p, struct rfcomm_session, list);
++
++ if (s->state == BT_LISTEN) {
++ rfcomm_accept_connection(s);
++ continue;
++ }
++
++ rfcomm_session_hold(s);
++
++ switch (s->state) {
++ case BT_BOUND:
++ rfcomm_check_connection(s);
++ break;
++
++ default:
++ rfcomm_process_rx(s);
++ break;
++ }
++
++ rfcomm_process_dlcs(s);
++
++ rfcomm_session_put(s);
++ }
++
++ rfcomm_unlock();
++}
++
++static void rfcomm_worker(void)
++{
++ BT_DBG("");
++
++ daemonize(); reparent_to_init();
++ set_fs(KERNEL_DS);
++
++ while (!atomic_read(&terminate)) {
++ BT_DBG("worker loop event 0x%lx", rfcomm_event);
++
++ if (!test_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event)) {
++ /* No pending events. Let's sleep.
++ * Incomming connections and data will wake us up. */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule();
++ }
++
++ /* Process stuff */
++ clear_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event);
++ rfcomm_process_sessions();
++ }
++ set_current_state(TASK_RUNNING);
++ return;
++}
++
++static int rfcomm_add_listener(bdaddr_t *ba)
++{
++ struct sockaddr_l2 addr;
++ struct l2cap_options opts;
++ struct socket *sock;
++ struct rfcomm_session *s;
++ int size, err = 0;
++
++ /* Create socket */
++ err = rfcomm_l2sock_create(&sock);
++ if (err < 0) {
++ BT_ERR("Create socket failed %d", err);
++ return err;
++ }
++
++ /* Bind socket */
++ bacpy(&addr.l2_bdaddr, ba);
++ addr.l2_family = AF_BLUETOOTH;
++ addr.l2_psm = htobs(RFCOMM_PSM);
++ err = sock->ops->bind(sock, (struct sockaddr *) &addr, sizeof(addr));
++ if (err < 0) {
++ BT_ERR("Bind failed %d", err);
++ goto failed;
++ }
++
++ /* Set L2CAP options */
++ size = sizeof(opts);
++ sock->ops->getsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, &size);
++
++ opts.imtu = RFCOMM_MAX_L2CAP_MTU;
++ sock->ops->setsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, size);
++
++ /* Start listening on the socket */
++ err = sock->ops->listen(sock, 10);
++ if (err) {
++ BT_ERR("Listen failed %d", err);
++ goto failed;
++ }
++
++ /* Add listening session */
++ s = rfcomm_session_add(sock, BT_LISTEN);
++ if (!s)
++ goto failed;
++
++ rfcomm_session_hold(s);
++ return 0;
++failed:
++ sock_release(sock);
++ return err;
++}
++
++static void rfcomm_kill_listener(void)
++{
++ struct rfcomm_session *s;
++ struct list_head *p, *n;
++
++ BT_DBG("");
++
++ list_for_each_safe(p, n, &session_list) {
++ s = list_entry(p, struct rfcomm_session, list);
++ rfcomm_session_del(s);
++ }
++}
++
++static int rfcomm_run(void *unused)
++{
++ rfcomm_thread = current;
++
++ atomic_inc(&running);
++
++ daemonize(); reparent_to_init();
++
++ sigfillset(&current->blocked);
++ set_fs(KERNEL_DS);
++
++ sprintf(current->comm, "krfcommd");
++
++ BT_DBG("");
++
++ rfcomm_add_listener(BDADDR_ANY);
++
++ rfcomm_worker();
++
++ rfcomm_kill_listener();
++
++ atomic_dec(&running);
++ return 0;
++}
++
++/* ---- Proc fs support ---- */
++static int rfcomm_dlc_dump(char *buf)
++{
++ struct rfcomm_session *s;
++ struct sock *sk;
++ struct list_head *p, *pp;
++ char *ptr = buf;
++
++ rfcomm_lock();
++
++ list_for_each(p, &session_list) {
++ s = list_entry(p, struct rfcomm_session, list);
++ sk = s->sock->sk;
++
++ list_for_each(pp, &s->dlcs) {
++ struct rfcomm_dlc *d;
++ d = list_entry(pp, struct rfcomm_dlc, list);
++
++ ptr += sprintf(ptr, "dlc %s %s %ld %d %d %d %d\n",
++ batostr(&bluez_pi(sk)->src), batostr(&bluez_pi(sk)->dst),
++ d->state, d->dlci, d->mtu, d->rx_credits, d->tx_credits);
++ }
++ }
++
++ rfcomm_unlock();
++
++ return ptr - buf;
++}
++
++extern int rfcomm_sock_dump(char *buf);
++
++static int rfcomm_read_proc(char *buf, char **start, off_t offset, int count, int *eof, void *priv)
++{
++ char *ptr = buf;
++ int len;
++
++ BT_DBG("count %d, offset %ld", count, offset);
++
++ ptr += rfcomm_dlc_dump(ptr);
++ ptr += rfcomm_sock_dump(ptr);
++ len = ptr - buf;
++
++ if (len <= count + offset)
++ *eof = 1;
++
++ *start = buf + offset;
++ len -= offset;
++
++ if (len > count)
++ len = count;
++ if (len < 0)
++ len = 0;
++
++ return len;
++}
++
++/* ---- Initialization ---- */
++int __init rfcomm_init(void)
++{
++ l2cap_load();
++
++ kernel_thread(rfcomm_run, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
++
++ rfcomm_init_sockets();
++
++#ifdef CONFIG_BLUEZ_RFCOMM_TTY
++ rfcomm_init_ttys();
++#endif
++
++ create_proc_read_entry("bluetooth/rfcomm", 0, 0, rfcomm_read_proc, NULL);
++
++ BT_INFO("BlueZ RFCOMM ver %s", VERSION);
++ BT_INFO("Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>");
++ BT_INFO("Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>");
++ return 0;
++}
++
++void rfcomm_cleanup(void)
++{
++ /* Terminate working thread.
++ * ie. Set terminate flag and wake it up */
++ atomic_inc(&terminate);
++ rfcomm_schedule(RFCOMM_SCHED_STATE);
++
++ /* Wait until thread is running */
++ while (atomic_read(&running))
++ schedule();
++
++ remove_proc_entry("bluetooth/rfcomm", NULL);
++
++#ifdef CONFIG_BLUEZ_RFCOMM_TTY
++ rfcomm_cleanup_ttys();
++#endif
++
++ rfcomm_cleanup_sockets();
++ return;
++}
++
++module_init(rfcomm_init);
++module_exit(rfcomm_cleanup);
++
++MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueZ RFCOMM ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/rfcomm/crc.c linux-2.4.18-mh15/net/bluetooth/rfcomm/crc.c
+--- linux-2.4.18/net/bluetooth/rfcomm/crc.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/rfcomm/crc.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,71 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * RFCOMM FCS calculation.
++ *
++ * $Id: crc.c,v 1.2 2002/09/21 09:54:32 holtmann Exp $
++ */
++
++/* reversed, 8-bit, poly=0x07 */
++unsigned char rfcomm_crc_table[256] = {
++ 0x00, 0x91, 0xe3, 0x72, 0x07, 0x96, 0xe4, 0x75,
++ 0x0e, 0x9f, 0xed, 0x7c, 0x09, 0x98, 0xea, 0x7b,
++ 0x1c, 0x8d, 0xff, 0x6e, 0x1b, 0x8a, 0xf8, 0x69,
++ 0x12, 0x83, 0xf1, 0x60, 0x15, 0x84, 0xf6, 0x67,
++
++ 0x38, 0xa9, 0xdb, 0x4a, 0x3f, 0xae, 0xdc, 0x4d,
++ 0x36, 0xa7, 0xd5, 0x44, 0x31, 0xa0, 0xd2, 0x43,
++ 0x24, 0xb5, 0xc7, 0x56, 0x23, 0xb2, 0xc0, 0x51,
++ 0x2a, 0xbb, 0xc9, 0x58, 0x2d, 0xbc, 0xce, 0x5f,
++
++ 0x70, 0xe1, 0x93, 0x02, 0x77, 0xe6, 0x94, 0x05,
++ 0x7e, 0xef, 0x9d, 0x0c, 0x79, 0xe8, 0x9a, 0x0b,
++ 0x6c, 0xfd, 0x8f, 0x1e, 0x6b, 0xfa, 0x88, 0x19,
++ 0x62, 0xf3, 0x81, 0x10, 0x65, 0xf4, 0x86, 0x17,
++
++ 0x48, 0xd9, 0xab, 0x3a, 0x4f, 0xde, 0xac, 0x3d,
++ 0x46, 0xd7, 0xa5, 0x34, 0x41, 0xd0, 0xa2, 0x33,
++ 0x54, 0xc5, 0xb7, 0x26, 0x53, 0xc2, 0xb0, 0x21,
++ 0x5a, 0xcb, 0xb9, 0x28, 0x5d, 0xcc, 0xbe, 0x2f,
++
++ 0xe0, 0x71, 0x03, 0x92, 0xe7, 0x76, 0x04, 0x95,
++ 0xee, 0x7f, 0x0d, 0x9c, 0xe9, 0x78, 0x0a, 0x9b,
++ 0xfc, 0x6d, 0x1f, 0x8e, 0xfb, 0x6a, 0x18, 0x89,
++ 0xf2, 0x63, 0x11, 0x80, 0xf5, 0x64, 0x16, 0x87,
++
++ 0xd8, 0x49, 0x3b, 0xaa, 0xdf, 0x4e, 0x3c, 0xad,
++ 0xd6, 0x47, 0x35, 0xa4, 0xd1, 0x40, 0x32, 0xa3,
++ 0xc4, 0x55, 0x27, 0xb6, 0xc3, 0x52, 0x20, 0xb1,
++ 0xca, 0x5b, 0x29, 0xb8, 0xcd, 0x5c, 0x2e, 0xbf,
++
++ 0x90, 0x01, 0x73, 0xe2, 0x97, 0x06, 0x74, 0xe5,
++ 0x9e, 0x0f, 0x7d, 0xec, 0x99, 0x08, 0x7a, 0xeb,
++ 0x8c, 0x1d, 0x6f, 0xfe, 0x8b, 0x1a, 0x68, 0xf9,
++ 0x82, 0x13, 0x61, 0xf0, 0x85, 0x14, 0x66, 0xf7,
++
++ 0xa8, 0x39, 0x4b, 0xda, 0xaf, 0x3e, 0x4c, 0xdd,
++ 0xa6, 0x37, 0x45, 0xd4, 0xa1, 0x30, 0x42, 0xd3,
++ 0xb4, 0x25, 0x57, 0xc6, 0xb3, 0x22, 0x50, 0xc1,
++ 0xba, 0x2b, 0x59, 0xc8, 0xbd, 0x2c, 0x5e, 0xcf
++};
+diff -urN linux-2.4.18/net/bluetooth/rfcomm/Makefile linux-2.4.18-mh15/net/bluetooth/rfcomm/Makefile
+--- linux-2.4.18/net/bluetooth/rfcomm/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/rfcomm/Makefile 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,11 @@
++#
++# Makefile for the Linux Bluetooth RFCOMM layer
++#
++
++O_TARGET := rfcomm.o
++
++obj-y := core.o sock.o crc.o
++obj-$(CONFIG_BLUEZ_RFCOMM_TTY) += tty.o
++obj-m += $(O_TARGET)
++
++include $(TOPDIR)/Rules.make
+diff -urN linux-2.4.18/net/bluetooth/rfcomm/sock.c linux-2.4.18-mh15/net/bluetooth/rfcomm/sock.c
+--- linux-2.4.18/net/bluetooth/rfcomm/sock.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/rfcomm/sock.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,847 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * RFCOMM sockets.
++ *
++ * $Id: sock.c,v 1.30 2002/10/18 20:12:12 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/init.h>
++#include <linux/skbuff.h>
++#include <linux/interrupt.h>
++#include <linux/socket.h>
++#include <linux/skbuff.h>
++#include <linux/list.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/rfcomm.h>
++
++#ifndef CONFIG_BLUEZ_RFCOMM_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++static struct proto_ops rfcomm_sock_ops;
++
++static struct bluez_sock_list rfcomm_sk_list = {
++ lock: RW_LOCK_UNLOCKED
++};
++
++static void rfcomm_sock_close(struct sock *sk);
++static void rfcomm_sock_kill(struct sock *sk);
++
++/* ---- DLC callbacks ----
++ *
++ * called under rfcomm_dlc_lock()
++ */
++static void rfcomm_sk_data_ready(struct rfcomm_dlc *d, struct sk_buff *skb)
++{
++ struct sock *sk = d->owner;
++ if (!sk)
++ return;
++
++ atomic_add(skb->len, &sk->rmem_alloc);
++ skb_queue_tail(&sk->receive_queue, skb);
++ sk->data_ready(sk, skb->len);
++
++ if (atomic_read(&sk->rmem_alloc) >= sk->rcvbuf)
++ rfcomm_dlc_throttle(d);
++}
++
++static void rfcomm_sk_state_change(struct rfcomm_dlc *d, int err)
++{
++ struct sock *sk = d->owner, *parent;
++ if (!sk)
++ return;
++
++ BT_DBG("dlc %p state %ld err %d", d, d->state, err);
++
++ bh_lock_sock(sk);
++
++ if (err)
++ sk->err = err;
++ sk->state = d->state;
++
++ parent = bluez_pi(sk)->parent;
++ if (!parent) {
++ if (d->state == BT_CONNECTED)
++ rfcomm_session_getaddr(d->session, &bluez_pi(sk)->src, NULL);
++ sk->state_change(sk);
++ } else
++ parent->data_ready(parent, 0);
++
++ bh_unlock_sock(sk);
++}
++
++/* ---- Socket functions ---- */
++static struct sock *__rfcomm_get_sock_by_addr(u8 channel, bdaddr_t *src)
++{
++ struct sock *sk;
++
++ for (sk = rfcomm_sk_list.head; sk; sk = sk->next) {
++ if (rfcomm_pi(sk)->channel == channel &&
++ !bacmp(&bluez_pi(sk)->src, src))
++ break;
++ }
++
++ return sk;
++}
++
++/* Find socket with channel and source bdaddr.
++ * Returns closest match.
++ */
++static struct sock *__rfcomm_get_sock_by_channel(int state, u8 channel, bdaddr_t *src)
++{
++ struct sock *sk, *sk1 = NULL;
++
++ for (sk = rfcomm_sk_list.head; sk; sk = sk->next) {
++ if (state && sk->state != state)
++ continue;
++
++ if (rfcomm_pi(sk)->channel == channel) {
++ /* Exact match. */
++ if (!bacmp(&bluez_pi(sk)->src, src))
++ break;
++
++ /* Closest match */
++ if (!bacmp(&bluez_pi(sk)->src, BDADDR_ANY))
++ sk1 = sk;
++ }
++ }
++ return sk ? sk : sk1;
++}
++
++/* Find socket with given address (channel, src).
++ * Returns locked socket */
++static inline struct sock *rfcomm_get_sock_by_channel(int state, u8 channel, bdaddr_t *src)
++{
++ struct sock *s;
++ read_lock(&rfcomm_sk_list.lock);
++ s = __rfcomm_get_sock_by_channel(state, channel, src);
++ if (s) bh_lock_sock(s);
++ read_unlock(&rfcomm_sk_list.lock);
++ return s;
++}
++
++static void rfcomm_sock_destruct(struct sock *sk)
++{
++ struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
++
++ BT_DBG("sk %p dlc %p", sk, d);
++
++ skb_queue_purge(&sk->receive_queue);
++ skb_queue_purge(&sk->write_queue);
++
++ rfcomm_dlc_lock(d);
++ rfcomm_pi(sk)->dlc = NULL;
++
++ /* Detach DLC if it's owned by this socket */
++ if (d->owner == sk)
++ d->owner = NULL;
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_dlc_put(d);
++
++ MOD_DEC_USE_COUNT;
++}
++
++static void rfcomm_sock_cleanup_listen(struct sock *parent)
++{
++ struct sock *sk;
++
++ BT_DBG("parent %p", parent);
++
++ /* Close not yet accepted dlcs */
++ while ((sk = bluez_accept_dequeue(parent, NULL))) {
++ rfcomm_sock_close(sk);
++ rfcomm_sock_kill(sk);
++ }
++
++ parent->state = BT_CLOSED;
++ parent->zapped = 1;
++}
++
++/* Kill socket (only if zapped and orphan)
++ * Must be called on unlocked socket.
++ */
++static void rfcomm_sock_kill(struct sock *sk)
++{
++ if (!sk->zapped || sk->socket)
++ return;
++
++ BT_DBG("sk %p state %d refcnt %d", sk, sk->state, atomic_read(&sk->refcnt));
++
++ /* Kill poor orphan */
++ bluez_sock_unlink(&rfcomm_sk_list, sk);
++ sk->dead = 1;
++ sock_put(sk);
++}
++
++static void __rfcomm_sock_close(struct sock *sk)
++{
++ struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
++
++ BT_DBG("sk %p state %d socket %p", sk, sk->state, sk->socket);
++
++ switch (sk->state) {
++ case BT_LISTEN:
++ rfcomm_sock_cleanup_listen(sk);
++ break;
++
++ case BT_CONNECT:
++ case BT_CONNECT2:
++ case BT_CONFIG:
++ case BT_CONNECTED:
++ rfcomm_dlc_close(d, 0);
++
++ default:
++ sk->zapped = 1;
++ break;
++ }
++}
++
++/* Close socket.
++ * Must be called on unlocked socket.
++ */
++static void rfcomm_sock_close(struct sock *sk)
++{
++ lock_sock(sk);
++ __rfcomm_sock_close(sk);
++ release_sock(sk);
++}
++
++static void rfcomm_sock_init(struct sock *sk, struct sock *parent)
++{
++ BT_DBG("sk %p", sk);
++
++ if (parent)
++ sk->type = parent->type;
++}
++
++static struct sock *rfcomm_sock_alloc(struct socket *sock, int proto, int prio)
++{
++ struct rfcomm_dlc *d;
++ struct sock *sk;
++
++ sk = sk_alloc(PF_BLUETOOTH, prio, 1);
++ if (!sk)
++ return NULL;
++
++ d = rfcomm_dlc_alloc(prio);
++ if (!d) {
++ sk_free(sk);
++ return NULL;
++ }
++ d->data_ready = rfcomm_sk_data_ready;
++ d->state_change = rfcomm_sk_state_change;
++
++ rfcomm_pi(sk)->dlc = d;
++ d->owner = sk;
++
++ bluez_sock_init(sock, sk);
++
++ sk->zapped = 0;
++
++ sk->destruct = rfcomm_sock_destruct;
++ sk->sndtimeo = RFCOMM_CONN_TIMEOUT;
++
++ sk->sndbuf = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
++ sk->rcvbuf = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
++
++ sk->protocol = proto;
++ sk->state = BT_OPEN;
++
++ bluez_sock_link(&rfcomm_sk_list, sk);
++
++ BT_DBG("sk %p", sk);
++
++ MOD_INC_USE_COUNT;
++ return sk;
++}
++
++static int rfcomm_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ sock->state = SS_UNCONNECTED;
++
++ if (sock->type != SOCK_STREAM && sock->type != SOCK_RAW)
++ return -ESOCKTNOSUPPORT;
++
++ sock->ops = &rfcomm_sock_ops;
++
++ if (!(sk = rfcomm_sock_alloc(sock, protocol, GFP_KERNEL)))
++ return -ENOMEM;
++
++ rfcomm_sock_init(sk, NULL);
++ return 0;
++}
++
++static int rfcomm_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
++{
++ struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p %s", sk, batostr(&sa->rc_bdaddr));
++
++ if (!addr || addr->sa_family != AF_BLUETOOTH)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_OPEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ write_lock_bh(&rfcomm_sk_list.lock);
++
++ if (sa->rc_channel && __rfcomm_get_sock_by_addr(sa->rc_channel, &sa->rc_bdaddr)) {
++ err = -EADDRINUSE;
++ } else {
++ /* Save source address */
++ bacpy(&bluez_pi(sk)->src, &sa->rc_bdaddr);
++ rfcomm_pi(sk)->channel = sa->rc_channel;
++ sk->state = BT_BOUND;
++ }
++
++ write_unlock_bh(&rfcomm_sk_list.lock);
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
++{
++ struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
++ struct sock *sk = sock->sk;
++ struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
++ int err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_rc))
++ return -EINVAL;
++
++ if (sk->state != BT_OPEN && sk->state != BT_BOUND)
++ return -EBADFD;
++
++ if (sk->type != SOCK_STREAM)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ sk->state = BT_CONNECT;
++ bacpy(&bluez_pi(sk)->dst, &sa->rc_bdaddr);
++ rfcomm_pi(sk)->channel = sa->rc_channel;
++
++ err = rfcomm_dlc_open(d, &bluez_pi(sk)->src, &sa->rc_bdaddr, sa->rc_channel);
++ if (!err)
++ err = bluez_sock_wait_state(sk, BT_CONNECTED,
++ sock_sndtimeo(sk, flags & O_NONBLOCK));
++
++ release_sock(sk);
++ return err;
++}
++
++int rfcomm_sock_listen(struct socket *sock, int backlog)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p backlog %d", sk, backlog);
++
++ lock_sock(sk);
++
++ if (sk->state != BT_BOUND) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ sk->max_ack_backlog = backlog;
++ sk->ack_backlog = 0;
++ sk->state = BT_LISTEN;
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++int rfcomm_sock_accept(struct socket *sock, struct socket *newsock, int flags)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct sock *sk = sock->sk, *nsk;
++ long timeo;
++ int err = 0;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
++
++ BT_DBG("sk %p timeo %ld", sk, timeo);
++
++ /* Wait for an incoming connection. (wake-one). */
++ add_wait_queue_exclusive(sk->sleep, &wait);
++ while (!(nsk = bluez_accept_dequeue(sk, newsock))) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ if (!timeo) {
++ err = -EAGAIN;
++ break;
++ }
++
++ release_sock(sk);
++ timeo = schedule_timeout(timeo);
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ break;
++ }
++
++ if (signal_pending(current)) {
++ err = sock_intr_errno(timeo);
++ break;
++ }
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++
++ if (err)
++ goto done;
++
++ newsock->state = SS_CONNECTED;
++
++ BT_DBG("new socket %p", nsk);
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
++{
++ struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ sa->rc_family = AF_BLUETOOTH;
++ sa->rc_channel = rfcomm_pi(sk)->channel;
++ if (peer)
++ bacpy(&sa->rc_bdaddr, &bluez_pi(sk)->dst);
++ else
++ bacpy(&sa->rc_bdaddr, &bluez_pi(sk)->src);
++
++ *len = sizeof(struct sockaddr_rc);
++ return 0;
++}
++
++static int rfcomm_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len,
++ struct scm_cookie *scm)
++{
++ struct sock *sk = sock->sk;
++ struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
++ struct sk_buff *skb;
++ int err, size;
++ int sent = 0;
++
++ if (msg->msg_flags & MSG_OOB)
++ return -EOPNOTSUPP;
++
++ if (sk->shutdown & SEND_SHUTDOWN)
++ return -EPIPE;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ lock_sock(sk);
++
++ while (len) {
++ size = min_t(uint, len, d->mtu);
++
++ skb = sock_alloc_send_skb(sk, size + RFCOMM_SKB_RESERVE,
++ msg->msg_flags & MSG_DONTWAIT, &err);
++ if (!skb)
++ break;
++ skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
++
++ err = memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size);
++ if (err) {
++ kfree_skb(skb);
++ sent = err;
++ break;
++ }
++
++ err = rfcomm_dlc_send(d, skb);
++ if (err < 0) {
++ kfree_skb(skb);
++ break;
++ }
++
++ sent += size;
++ len -= size;
++ }
++
++ release_sock(sk);
++
++ return sent ? sent : err;
++}
++
++static long rfcomm_sock_data_wait(struct sock *sk, long timeo)
++{
++ DECLARE_WAITQUEUE(wait, current);
++
++ add_wait_queue(sk->sleep, &wait);
++ for (;;) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (skb_queue_len(&sk->receive_queue) || sk->err || (sk->shutdown & RCV_SHUTDOWN) ||
++ signal_pending(current) || !timeo)
++ break;
++
++ set_bit(SOCK_ASYNC_WAITDATA, &sk->socket->flags);
++ release_sock(sk);
++ timeo = schedule_timeout(timeo);
++ lock_sock(sk);
++ clear_bit(SOCK_ASYNC_WAITDATA, &sk->socket->flags);
++ }
++
++ __set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++ return timeo;
++}
++
++static int rfcomm_sock_recvmsg(struct socket *sock, struct msghdr *msg, int size,
++ int flags, struct scm_cookie *scm)
++{
++ struct sock *sk = sock->sk;
++ int target, err = 0, copied = 0;
++ long timeo;
++
++ if (flags & MSG_OOB)
++ return -EOPNOTSUPP;
++
++ msg->msg_namelen = 0;
++
++ BT_DBG("sk %p size %d", sk, size);
++
++ lock_sock(sk);
++
++ target = sock_rcvlowat(sk, flags & MSG_WAITALL, size);
++ timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
++
++ do {
++ struct sk_buff *skb;
++ int chunk;
++
++ skb = skb_dequeue(&sk->receive_queue);
++ if (!skb) {
++ if (copied >= target)
++ break;
++
++ if ((err = sock_error(sk)) != 0)
++ break;
++ if (sk->shutdown & RCV_SHUTDOWN)
++ break;
++
++ err = -EAGAIN;
++ if (!timeo)
++ break;
++
++ timeo = rfcomm_sock_data_wait(sk, timeo);
++
++ if (signal_pending(current)) {
++ err = sock_intr_errno(timeo);
++ goto out;
++ }
++ continue;
++ }
++
++ chunk = min_t(unsigned int, skb->len, size);
++ if (memcpy_toiovec(msg->msg_iov, skb->data, chunk)) {
++ skb_queue_head(&sk->receive_queue, skb);
++ if (!copied)
++ copied = -EFAULT;
++ break;
++ }
++ copied += chunk;
++ size -= chunk;
++
++ if (!(flags & MSG_PEEK)) {
++ atomic_sub(chunk, &sk->rmem_alloc);
++
++ skb_pull(skb, chunk);
++ if (skb->len) {
++ skb_queue_head(&sk->receive_queue, skb);
++ break;
++ }
++ kfree_skb(skb);
++
++ } else {
++ /* put message back and return */
++ skb_queue_head(&sk->receive_queue, skb);
++ break;
++ }
++ } while (size);
++
++out:
++ if (atomic_read(&sk->rmem_alloc) <= (sk->rcvbuf >> 2))
++ rfcomm_dlc_unthrottle(rfcomm_pi(sk)->dlc);
++
++ release_sock(sk);
++ return copied ? : err;
++}
++
++static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, int optlen)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ lock_sock(sk);
++
++ switch (optname) {
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ };
++
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_getsockopt(struct socket *sock, int level, int optname, char *optval, int *optlen)
++{
++ struct sock *sk = sock->sk;
++ int len, err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ if (get_user(len, optlen))
++ return -EFAULT;
++
++ lock_sock(sk);
++
++ switch (optname) {
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ };
++
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++{
++ struct sock *sk = sock->sk;
++ int err;
++
++ lock_sock(sk);
++
++#ifdef CONFIG_BLUEZ_RFCOMM_TTY
++ err = rfcomm_dev_ioctl(sk, cmd, arg);
++#else
++ err = -EOPNOTSUPP;
++#endif
++
++ release_sock(sk);
++
++ return err;
++}
++
++static int rfcomm_sock_shutdown(struct socket *sock, int how)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (!sk) return 0;
++
++ lock_sock(sk);
++ if (!sk->shutdown) {
++ sk->shutdown = SHUTDOWN_MASK;
++ __rfcomm_sock_close(sk);
++
++ if (sk->linger)
++ err = bluez_sock_wait_state(sk, BT_CLOSED, sk->lingertime);
++ }
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (!sk)
++ return 0;
++
++ err = rfcomm_sock_shutdown(sock, 2);
++
++ sock_orphan(sk);
++ rfcomm_sock_kill(sk);
++ return err;
++}
++
++/* ---- RFCOMM core layer callbacks ----
++ *
++ * called under rfcomm_lock()
++ */
++int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc **d)
++{
++ struct sock *sk, *parent;
++ bdaddr_t src, dst;
++ int result = 0;
++
++ BT_DBG("session %p channel %d", s, channel);
++
++ rfcomm_session_getaddr(s, &src, &dst);
++
++ /* Check if we have socket listening on this channel */
++ parent = rfcomm_get_sock_by_channel(BT_LISTEN, channel, &src);
++ if (!parent)
++ return 0;
++
++ /* Check for backlog size */
++ if (parent->ack_backlog > parent->max_ack_backlog) {
++ BT_DBG("backlog full %d", parent->ack_backlog);
++ goto done;
++ }
++
++ sk = rfcomm_sock_alloc(NULL, BTPROTO_RFCOMM, GFP_ATOMIC);
++ if (!sk)
++ goto done;
++
++ rfcomm_sock_init(sk, parent);
++ bacpy(&bluez_pi(sk)->src, &src);
++ bacpy(&bluez_pi(sk)->dst, &dst);
++ rfcomm_pi(sk)->channel = channel;
++
++ sk->state = BT_CONFIG;
++ bluez_accept_enqueue(parent, sk);
++
++ /* Accept connection and return socket DLC */
++ *d = rfcomm_pi(sk)->dlc;
++ result = 1;
++
++done:
++ bh_unlock_sock(parent);
++ return result;
++}
++
++/* ---- Proc fs support ---- */
++int rfcomm_sock_dump(char *buf)
++{
++ struct bluez_sock_list *list = &rfcomm_sk_list;
++ struct rfcomm_pinfo *pi;
++ struct sock *sk;
++ char *ptr = buf;
++
++ write_lock_bh(&list->lock);
++
++ for (sk = list->head; sk; sk = sk->next) {
++ pi = rfcomm_pi(sk);
++ ptr += sprintf(ptr, "sk %s %s %d %d\n",
++ batostr(&bluez_pi(sk)->src), batostr(&bluez_pi(sk)->dst),
++ sk->state, rfcomm_pi(sk)->channel);
++ }
++
++ write_unlock_bh(&list->lock);
++
++ return ptr - buf;
++}
++
++static struct proto_ops rfcomm_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: rfcomm_sock_release,
++ bind: rfcomm_sock_bind,
++ connect: rfcomm_sock_connect,
++ listen: rfcomm_sock_listen,
++ accept: rfcomm_sock_accept,
++ getname: rfcomm_sock_getname,
++ sendmsg: rfcomm_sock_sendmsg,
++ recvmsg: rfcomm_sock_recvmsg,
++ shutdown: rfcomm_sock_shutdown,
++ setsockopt: rfcomm_sock_setsockopt,
++ getsockopt: rfcomm_sock_getsockopt,
++ ioctl: rfcomm_sock_ioctl,
++ poll: bluez_sock_poll,
++ socketpair: sock_no_socketpair,
++ mmap: sock_no_mmap
++};
++
++static struct net_proto_family rfcomm_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: rfcomm_sock_create
++};
++
++int rfcomm_init_sockets(void)
++{
++ int err;
++
++ if ((err = bluez_sock_register(BTPROTO_RFCOMM, &rfcomm_sock_family_ops))) {
++ BT_ERR("Can't register RFCOMM socket layer");
++ return err;
++ }
++
++ return 0;
++}
++
++void rfcomm_cleanup_sockets(void)
++{
++ int err;
++
++ /* Unregister socket, protocol and notifier */
++ if ((err = bluez_sock_unregister(BTPROTO_RFCOMM)))
++ BT_ERR("Can't unregister RFCOMM socket layer %d", err);
++}
+diff -urN linux-2.4.18/net/bluetooth/rfcomm/tty.c linux-2.4.18-mh15/net/bluetooth/rfcomm/tty.c
+--- linux-2.4.18/net/bluetooth/rfcomm/tty.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/rfcomm/tty.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,960 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * RFCOMM TTY.
++ *
++ * $Id: tty.c,v 1.26 2002/10/18 20:12:12 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/tty.h>
++#include <linux/tty_driver.h>
++#include <linux/tty_flip.h>
++
++#include <linux/slab.h>
++#include <linux/skbuff.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/rfcomm.h>
++
++#ifndef CONFIG_BLUEZ_RFCOMM_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define RFCOMM_TTY_MAGIC 0x6d02 /* magic number for rfcomm struct */
++#define RFCOMM_TTY_PORTS RFCOMM_MAX_DEV /* whole lotta rfcomm devices */
++#define RFCOMM_TTY_MAJOR 216 /* device node major id of the usb/bluetooth.c driver */
++#define RFCOMM_TTY_MINOR 0
++
++struct rfcomm_dev {
++ struct list_head list;
++ atomic_t refcnt;
++
++ char name[12];
++ int id;
++ unsigned long flags;
++ int opened;
++ int err;
++
++ bdaddr_t src;
++ bdaddr_t dst;
++ u8 channel;
++
++ uint modem_status;
++
++ struct rfcomm_dlc *dlc;
++ struct tty_struct *tty;
++ wait_queue_head_t wait;
++ struct tasklet_struct wakeup_task;
++
++ atomic_t wmem_alloc;
++};
++
++static LIST_HEAD(rfcomm_dev_list);
++static rwlock_t rfcomm_dev_lock = RW_LOCK_UNLOCKED;
++
++static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb);
++static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err);
++static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig);
++
++static void rfcomm_tty_wakeup(unsigned long arg);
++
++/* ---- Device functions ---- */
++static void rfcomm_dev_destruct(struct rfcomm_dev *dev)
++{
++ struct rfcomm_dlc *dlc = dev->dlc;
++
++ BT_DBG("dev %p dlc %p", dev, dlc);
++
++ rfcomm_dlc_lock(dlc);
++ /* Detach DLC if it's owned by this dev */
++ if (dlc->owner == dev)
++ dlc->owner = NULL;
++ rfcomm_dlc_unlock(dlc);
++
++ rfcomm_dlc_put(dlc);
++ kfree(dev);
++
++ MOD_DEC_USE_COUNT;
++}
++
++static inline void rfcomm_dev_hold(struct rfcomm_dev *dev)
++{
++ atomic_inc(&dev->refcnt);
++}
++
++static inline void rfcomm_dev_put(struct rfcomm_dev *dev)
++{
++ /* The reason this isn't actually a race, as you no
++ doubt have a little voice screaming at you in your
++ head, is that the refcount should never actually
++ reach zero unless the device has already been taken
++ off the list, in rfcomm_dev_del(). And if that's not
++ true, we'll hit the BUG() in rfcomm_dev_destruct()
++ anyway. */
++ if (atomic_dec_and_test(&dev->refcnt))
++ rfcomm_dev_destruct(dev);
++}
++
++static struct rfcomm_dev *__rfcomm_dev_get(int id)
++{
++ struct rfcomm_dev *dev;
++ struct list_head *p;
++
++ list_for_each(p, &rfcomm_dev_list) {
++ dev = list_entry(p, struct rfcomm_dev, list);
++ if (dev->id == id)
++ return dev;
++ }
++
++ return NULL;
++}
++
++static inline struct rfcomm_dev *rfcomm_dev_get(int id)
++{
++ struct rfcomm_dev *dev;
++
++ read_lock(&rfcomm_dev_lock);
++
++ dev = __rfcomm_dev_get(id);
++ if (dev)
++ rfcomm_dev_hold(dev);
++
++ read_unlock(&rfcomm_dev_lock);
++
++ return dev;
++}
++
++static int rfcomm_dev_add(struct rfcomm_dev_req *req, struct rfcomm_dlc *dlc)
++{
++ struct rfcomm_dev *dev;
++ struct list_head *head = &rfcomm_dev_list, *p;
++ int err = 0;
++
++ BT_DBG("id %d channel %d", req->dev_id, req->channel);
++
++ dev = kmalloc(sizeof(struct rfcomm_dev), GFP_KERNEL);
++ if (!dev)
++ return -ENOMEM;
++ memset(dev, 0, sizeof(struct rfcomm_dev));
++
++ write_lock_bh(&rfcomm_dev_lock);
++
++ if (req->dev_id < 0) {
++ dev->id = 0;
++
++ list_for_each(p, &rfcomm_dev_list) {
++ if (list_entry(p, struct rfcomm_dev, list)->id != dev->id)
++ break;
++
++ dev->id++;
++ head = p;
++ }
++ } else {
++ dev->id = req->dev_id;
++
++ list_for_each(p, &rfcomm_dev_list) {
++ struct rfcomm_dev *entry = list_entry(p, struct rfcomm_dev, list);
++
++ if (entry->id == dev->id) {
++ err = -EADDRINUSE;
++ goto out;
++ }
++
++ if (entry->id > dev->id - 1)
++ break;
++
++ head = p;
++ }
++ }
++
++ if ((dev->id < 0) || (dev->id > RFCOMM_MAX_DEV - 1)) {
++ err = -ENFILE;
++ goto out;
++ }
++
++ sprintf(dev->name, "rfcomm%d", dev->id);
++
++ list_add(&dev->list, head);
++ atomic_set(&dev->refcnt, 1);
++
++ bacpy(&dev->src, &req->src);
++ bacpy(&dev->dst, &req->dst);
++ dev->channel = req->channel;
++
++ dev->flags = req->flags &
++ ((1 << RFCOMM_RELEASE_ONHUP) | (1 << RFCOMM_REUSE_DLC));
++
++ init_waitqueue_head(&dev->wait);
++ tasklet_init(&dev->wakeup_task, rfcomm_tty_wakeup, (unsigned long) dev);
++
++ rfcomm_dlc_lock(dlc);
++ dlc->data_ready = rfcomm_dev_data_ready;
++ dlc->state_change = rfcomm_dev_state_change;
++ dlc->modem_status = rfcomm_dev_modem_status;
++
++ dlc->owner = dev;
++ dev->dlc = dlc;
++ rfcomm_dlc_unlock(dlc);
++
++ MOD_INC_USE_COUNT;
++
++out:
++ write_unlock_bh(&rfcomm_dev_lock);
++
++ if (err) {
++ kfree(dev);
++ return err;
++ } else
++ return dev->id;
++}
++
++static void rfcomm_dev_del(struct rfcomm_dev *dev)
++{
++ BT_DBG("dev %p", dev);
++
++ write_lock_bh(&rfcomm_dev_lock);
++ list_del_init(&dev->list);
++ write_unlock_bh(&rfcomm_dev_lock);
++
++ rfcomm_dev_put(dev);
++}
++
++/* ---- Send buffer ---- */
++
++static inline unsigned int rfcomm_room(struct rfcomm_dlc *dlc)
++{
++ /* We can't let it be zero, because we don't get a callback
++ when tx_credits becomes nonzero, hence we'd never wake up */
++ return dlc->mtu * (dlc->tx_credits?:1);
++}
++
++static void rfcomm_wfree(struct sk_buff *skb)
++{
++ struct rfcomm_dev *dev = (void *) skb->sk;
++ atomic_sub(skb->truesize, &dev->wmem_alloc);
++ if (test_bit(RFCOMM_TTY_ATTACHED, &dev->flags))
++ tasklet_schedule(&dev->wakeup_task);
++ rfcomm_dev_put(dev);
++}
++
++static inline void rfcomm_set_owner_w(struct sk_buff *skb, struct rfcomm_dev *dev)
++{
++ rfcomm_dev_hold(dev);
++ atomic_add(skb->truesize, &dev->wmem_alloc);
++ skb->sk = (void *) dev;
++ skb->destructor = rfcomm_wfree;
++}
++
++static struct sk_buff *rfcomm_wmalloc(struct rfcomm_dev *dev, unsigned long size, int force, int priority)
++{
++ if (force || atomic_read(&dev->wmem_alloc) < rfcomm_room(dev->dlc)) {
++ struct sk_buff *skb = alloc_skb(size, priority);
++ if (skb) {
++ rfcomm_set_owner_w(skb, dev);
++ return skb;
++ }
++ }
++ return NULL;
++}
++
++/* ---- Device IOCTLs ---- */
++
++#define NOCAP_FLAGS ((1 << RFCOMM_REUSE_DLC) | (1 << RFCOMM_RELEASE_ONHUP))
++
++static int rfcomm_create_dev(struct sock *sk, unsigned long arg)
++{
++ struct rfcomm_dev_req req;
++ struct rfcomm_dlc *dlc;
++ int id;
++
++ if (copy_from_user(&req, (void *) arg, sizeof(req)))
++ return -EFAULT;
++
++ BT_DBG("sk %p dev_id %id flags 0x%x", sk, req.dev_id, req.flags);
++
++ if (req.flags != NOCAP_FLAGS && !capable(CAP_NET_ADMIN))
++ return -EPERM;
++
++ if (req.flags & (1 << RFCOMM_REUSE_DLC)) {
++ /* Socket must be connected */
++ if (sk->state != BT_CONNECTED)
++ return -EBADFD;
++
++ dlc = rfcomm_pi(sk)->dlc;
++ rfcomm_dlc_hold(dlc);
++ } else {
++ dlc = rfcomm_dlc_alloc(GFP_KERNEL);
++ if (!dlc)
++ return -ENOMEM;
++ }
++
++ id = rfcomm_dev_add(&req, dlc);
++ if (id < 0) {
++ rfcomm_dlc_put(dlc);
++ return id;
++ }
++
++ if (req.flags & (1 << RFCOMM_REUSE_DLC)) {
++ /* DLC is now used by device.
++ * Socket must be disconnected */
++ sk->state = BT_CLOSED;
++ }
++
++ return id;
++}
++
++static int rfcomm_release_dev(unsigned long arg)
++{
++ struct rfcomm_dev_req req;
++ struct rfcomm_dev *dev;
++
++ if (copy_from_user(&req, (void *) arg, sizeof(req)))
++ return -EFAULT;
++
++ BT_DBG("dev_id %id flags 0x%x", req.dev_id, req.flags);
++
++ if (!(dev = rfcomm_dev_get(req.dev_id)))
++ return -ENODEV;
++
++ if (dev->flags != NOCAP_FLAGS && !capable(CAP_NET_ADMIN)) {
++ rfcomm_dev_put(dev);
++ return -EPERM;
++ }
++
++ if (req.flags & (1 << RFCOMM_HANGUP_NOW))
++ rfcomm_dlc_close(dev->dlc, 0);
++
++ rfcomm_dev_del(dev);
++ rfcomm_dev_put(dev);
++ return 0;
++}
++
++static int rfcomm_get_dev_list(unsigned long arg)
++{
++ struct rfcomm_dev_list_req *dl;
++ struct rfcomm_dev_info *di;
++ struct list_head *p;
++ int n = 0, size, err;
++ u16 dev_num;
++
++ BT_DBG("");
++
++ if (get_user(dev_num, (u16 *) arg))
++ return -EFAULT;
++
++ if (!dev_num || dev_num > (PAGE_SIZE * 4) / sizeof(*di))
++ return -EINVAL;
++
++ size = sizeof(*dl) + dev_num * sizeof(*di);
++
++ if (!(dl = kmalloc(size, GFP_KERNEL)))
++ return -ENOMEM;
++
++ di = dl->dev_info;
++
++ read_lock_bh(&rfcomm_dev_lock);
++
++ list_for_each(p, &rfcomm_dev_list) {
++ struct rfcomm_dev *dev = list_entry(p, struct rfcomm_dev, list);
++ (di + n)->id = dev->id;
++ (di + n)->flags = dev->flags;
++ (di + n)->state = dev->dlc->state;
++ (di + n)->channel = dev->channel;
++ bacpy(&(di + n)->src, &dev->src);
++ bacpy(&(di + n)->dst, &dev->dst);
++ if (++n >= dev_num)
++ break;
++ }
++
++ read_unlock_bh(&rfcomm_dev_lock);
++
++ dl->dev_num = n;
++ size = sizeof(*dl) + n * sizeof(*di);
++
++ err = copy_to_user((void *) arg, dl, size);
++ kfree(dl);
++
++ return err ? -EFAULT : 0;
++}
++
++static int rfcomm_get_dev_info(unsigned long arg)
++{
++ struct rfcomm_dev *dev;
++ struct rfcomm_dev_info di;
++ int err = 0;
++
++ BT_DBG("");
++
++ if (copy_from_user(&di, (void *)arg, sizeof(di)))
++ return -EFAULT;
++
++ if (!(dev = rfcomm_dev_get(di.id)))
++ return -ENODEV;
++
++ di.flags = dev->flags;
++ di.channel = dev->channel;
++ di.state = dev->dlc->state;
++ bacpy(&di.src, &dev->src);
++ bacpy(&di.dst, &dev->dst);
++
++ if (copy_to_user((void *)arg, &di, sizeof(di)))
++ err = -EFAULT;
++
++ rfcomm_dev_put(dev);
++ return err;
++}
++
++int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, unsigned long arg)
++{
++ BT_DBG("cmd %d arg %ld", cmd, arg);
++
++ switch (cmd) {
++ case RFCOMMCREATEDEV:
++ return rfcomm_create_dev(sk, arg);
++
++ case RFCOMMRELEASEDEV:
++ return rfcomm_release_dev(arg);
++
++ case RFCOMMGETDEVLIST:
++ return rfcomm_get_dev_list(arg);
++
++ case RFCOMMGETDEVINFO:
++ return rfcomm_get_dev_info(arg);
++ }
++
++ return -EINVAL;
++}
++
++/* ---- DLC callbacks ---- */
++static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb)
++{
++ struct rfcomm_dev *dev = dlc->owner;
++ struct tty_struct *tty;
++
++ if (!dev || !(tty = dev->tty)) {
++ kfree_skb(skb);
++ return;
++ }
++
++ BT_DBG("dlc %p tty %p len %d", dlc, tty, skb->len);
++
++ if (test_bit(TTY_DONT_FLIP, &tty->flags)) {
++ register int i;
++ for (i = 0; i < skb->len; i++) {
++ if (tty->flip.count >= TTY_FLIPBUF_SIZE)
++ tty_flip_buffer_push(tty);
++
++ tty_insert_flip_char(tty, skb->data[i], 0);
++ }
++ tty_flip_buffer_push(tty);
++ } else
++ tty->ldisc.receive_buf(tty, skb->data, NULL, skb->len);
++
++ kfree_skb(skb);
++}
++
++static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err)
++{
++ struct rfcomm_dev *dev = dlc->owner;
++ if (!dev)
++ return;
++
++ BT_DBG("dlc %p dev %p err %d", dlc, dev, err);
++
++ dev->err = err;
++ wake_up_interruptible(&dev->wait);
++
++ if (dlc->state == BT_CLOSED) {
++ if (!dev->tty) {
++ if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags)) {
++ rfcomm_dev_hold(dev);
++ rfcomm_dev_del(dev);
++
++ /* We have to drop DLC lock here, otherwise
++ rfcomm_dev_put() will dead lock if it's
++ the last reference. */
++ rfcomm_dlc_unlock(dlc);
++ rfcomm_dev_put(dev);
++ rfcomm_dlc_lock(dlc);
++ }
++ } else
++ tty_hangup(dev->tty);
++ }
++}
++
++static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig)
++{
++ struct rfcomm_dev *dev = dlc->owner;
++ if (!dev)
++ return;
++
++ BT_DBG("dlc %p dev %p v24_sig 0x%02x", dlc, dev, v24_sig);
++
++ dev->modem_status =
++ ((v24_sig & RFCOMM_V24_RTC) ? (TIOCM_DSR | TIOCM_DTR) : 0) |
++ ((v24_sig & RFCOMM_V24_RTR) ? (TIOCM_RTS | TIOCM_CTS) : 0) |
++ ((v24_sig & RFCOMM_V24_IC) ? TIOCM_RI : 0) |
++ ((v24_sig & RFCOMM_V24_DV) ? TIOCM_CD : 0);
++}
++
++/* ---- TTY functions ---- */
++static void rfcomm_tty_wakeup(unsigned long arg)
++{
++ struct rfcomm_dev *dev = (void *) arg;
++ struct tty_struct *tty = dev->tty;
++ if (!tty)
++ return;
++
++ BT_DBG("dev %p tty %p", dev, tty);
++
++ if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags) && tty->ldisc.write_wakeup)
++ (tty->ldisc.write_wakeup)(tty);
++
++ wake_up_interruptible(&tty->write_wait);
++#ifdef SERIAL_HAVE_POLL_WAIT
++ wake_up_interruptible(&tty->poll_wait);
++#endif
++}
++
++static int rfcomm_tty_open(struct tty_struct *tty, struct file *filp)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct rfcomm_dev *dev;
++ struct rfcomm_dlc *dlc;
++ int err, id;
++
++ id = MINOR(tty->device) - tty->driver.minor_start;
++
++ BT_DBG("tty %p id %d", tty, id);
++
++ /* We don't leak this refcount. For reasons which are not entirely
++ clear, the TTY layer will call our ->close() method even if the
++ open fails. We decrease the refcount there, and decreasing it
++ here too would cause breakage. */
++ dev = rfcomm_dev_get(id);
++ if (!dev)
++ return -ENODEV;
++
++ BT_DBG("dev %p dst %s channel %d opened %d", dev, batostr(&dev->dst), dev->channel, dev->opened);
++
++ if (dev->opened++ != 0)
++ return 0;
++
++ dlc = dev->dlc;
++
++ /* Attach TTY and open DLC */
++
++ rfcomm_dlc_lock(dlc);
++ tty->driver_data = dev;
++ dev->tty = tty;
++ rfcomm_dlc_unlock(dlc);
++ set_bit(RFCOMM_TTY_ATTACHED, &dev->flags);
++
++ err = rfcomm_dlc_open(dlc, &dev->src, &dev->dst, dev->channel);
++ if (err < 0)
++ return err;
++
++ /* Wait for DLC to connect */
++ add_wait_queue(&dev->wait, &wait);
++ while (1) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (dlc->state == BT_CLOSED) {
++ err = -dev->err;
++ break;
++ }
++
++ if (dlc->state == BT_CONNECTED)
++ break;
++
++ if (signal_pending(current)) {
++ err = -EINTR;
++ break;
++ }
++
++ schedule();
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&dev->wait, &wait);
++
++ return err;
++}
++
++static void rfcomm_tty_close(struct tty_struct *tty, struct file *filp)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ if (!dev)
++ return;
++
++ BT_DBG("tty %p dev %p dlc %p opened %d", tty, dev, dev->dlc, dev->opened);
++
++ if (--dev->opened == 0) {
++ /* Close DLC and dettach TTY */
++ rfcomm_dlc_close(dev->dlc, 0);
++
++ clear_bit(RFCOMM_TTY_ATTACHED, &dev->flags);
++ tasklet_kill(&dev->wakeup_task);
++
++ rfcomm_dlc_lock(dev->dlc);
++ tty->driver_data = NULL;
++ dev->tty = NULL;
++ rfcomm_dlc_unlock(dev->dlc);
++ }
++
++ rfcomm_dev_put(dev);
++}
++
++static int rfcomm_tty_write(struct tty_struct *tty, int from_user, const unsigned char *buf, int count)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ struct rfcomm_dlc *dlc = dev->dlc;
++ struct sk_buff *skb;
++ int err = 0, sent = 0, size;
++
++ BT_DBG("tty %p from_user %d count %d", tty, from_user, count);
++
++ while (count) {
++ size = min_t(uint, count, dlc->mtu);
++
++ if (from_user)
++ skb = rfcomm_wmalloc(dev, size + RFCOMM_SKB_RESERVE, 0, GFP_KERNEL);
++ else
++ skb = rfcomm_wmalloc(dev, size + RFCOMM_SKB_RESERVE, 0, GFP_ATOMIC);
++
++ if (!skb)
++ break;
++
++ skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
++
++ if (from_user)
++ copy_from_user(skb_put(skb, size), buf + sent, size);
++ else
++ memcpy(skb_put(skb, size), buf + sent, size);
++
++ if ((err = rfcomm_dlc_send(dlc, skb)) < 0) {
++ kfree_skb(skb);
++ break;
++ }
++
++ sent += size;
++ count -= size;
++ }
++
++ return sent ? sent : err;
++}
++
++static void rfcomm_tty_put_char(struct tty_struct *tty, unsigned char ch)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ struct rfcomm_dlc *dlc = dev->dlc;
++ struct sk_buff *skb;
++
++ BT_DBG("tty %p char %x", tty, ch);
++
++ skb = rfcomm_wmalloc(dev, 1 + RFCOMM_SKB_RESERVE, 1, GFP_ATOMIC);
++
++ if (!skb)
++ return;
++
++ skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
++
++ *(char *)skb_put(skb, 1) = ch;
++
++ if ((rfcomm_dlc_send(dlc, skb)) < 0)
++ kfree_skb(skb);
++}
++
++static int rfcomm_tty_write_room(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ int room;
++
++ BT_DBG("tty %p", tty);
++
++ room = rfcomm_room(dev->dlc) - atomic_read(&dev->wmem_alloc);
++ if (room < 0)
++ room = 0;
++
++ return room;
++}
++
++static int rfcomm_tty_set_modem_status(uint cmd, struct rfcomm_dlc *dlc, uint status)
++{
++ u8 v24_sig, mask;
++
++ BT_DBG("dlc %p cmd 0x%02x", dlc, cmd);
++
++ if (cmd == TIOCMSET)
++ v24_sig = 0;
++ else
++ rfcomm_dlc_get_modem_status(dlc, &v24_sig);
++
++ mask = ((status & TIOCM_DSR) ? RFCOMM_V24_RTC : 0) |
++ ((status & TIOCM_DTR) ? RFCOMM_V24_RTC : 0) |
++ ((status & TIOCM_RTS) ? RFCOMM_V24_RTR : 0) |
++ ((status & TIOCM_CTS) ? RFCOMM_V24_RTR : 0) |
++ ((status & TIOCM_RI) ? RFCOMM_V24_IC : 0) |
++ ((status & TIOCM_CD) ? RFCOMM_V24_DV : 0);
++
++ if (cmd == TIOCMBIC)
++ v24_sig &= ~mask;
++ else
++ v24_sig |= mask;
++
++ rfcomm_dlc_set_modem_status(dlc, v24_sig);
++ return 0;
++}
++
++static int rfcomm_tty_ioctl(struct tty_struct *tty, struct file *filp, unsigned int cmd, unsigned long arg)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ struct rfcomm_dlc *dlc = dev->dlc;
++ uint status;
++ int err;
++
++ BT_DBG("tty %p cmd 0x%02x", tty, cmd);
++
++ switch (cmd) {
++ case TCGETS:
++ BT_DBG("TCGETS is not supported");
++ return -ENOIOCTLCMD;
++
++ case TCSETS:
++ BT_DBG("TCSETS is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCMGET:
++ BT_DBG("TIOCMGET");
++
++ return put_user(dev->modem_status, (unsigned int *)arg);
++
++ case TIOCMSET: /* Turns on and off the lines as specified by the mask */
++ case TIOCMBIS: /* Turns on the lines as specified by the mask */
++ case TIOCMBIC: /* Turns off the lines as specified by the mask */
++ if ((err = get_user(status, (unsigned int *)arg)))
++ return err;
++ return rfcomm_tty_set_modem_status(cmd, dlc, status);
++
++ case TIOCMIWAIT:
++ BT_DBG("TIOCMIWAIT");
++ break;
++
++ case TIOCGICOUNT:
++ BT_DBG("TIOCGICOUNT");
++ break;
++
++ case TIOCGSERIAL:
++ BT_ERR("TIOCGSERIAL is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCSSERIAL:
++ BT_ERR("TIOCSSERIAL is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCSERGSTRUCT:
++ BT_ERR("TIOCSERGSTRUCT is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCSERGETLSR:
++ BT_ERR("TIOCSERGETLSR is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCSERCONFIG:
++ BT_ERR("TIOCSERCONFIG is not supported");
++ return -ENOIOCTLCMD;
++
++ default:
++ return -ENOIOCTLCMD; /* ioctls which we must ignore */
++
++ }
++
++ return -ENOIOCTLCMD;
++}
++
++#define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
++
++static void rfcomm_tty_set_termios(struct tty_struct *tty, struct termios *old)
++{
++ BT_DBG("tty %p", tty);
++
++ if ((tty->termios->c_cflag == old->c_cflag) &&
++ (RELEVANT_IFLAG(tty->termios->c_iflag) == RELEVANT_IFLAG(old->c_iflag)))
++ return;
++
++ /* handle turning off CRTSCTS */
++ if ((old->c_cflag & CRTSCTS) && !(tty->termios->c_cflag & CRTSCTS)) {
++ BT_DBG("turning off CRTSCTS");
++ }
++}
++
++static void rfcomm_tty_throttle(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ rfcomm_dlc_throttle(dev->dlc);
++}
++
++static void rfcomm_tty_unthrottle(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ rfcomm_dlc_unthrottle(dev->dlc);
++}
++
++static int rfcomm_tty_chars_in_buffer(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ struct rfcomm_dlc *dlc = dev->dlc;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ if (skb_queue_len(&dlc->tx_queue))
++ return dlc->mtu;
++
++ return 0;
++}
++
++static void rfcomm_tty_flush_buffer(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ if (!dev)
++ return;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ skb_queue_purge(&dev->dlc->tx_queue);
++
++ if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags) && tty->ldisc.write_wakeup)
++ tty->ldisc.write_wakeup(tty);
++}
++
++static void rfcomm_tty_send_xchar(struct tty_struct *tty, char ch)
++{
++ BT_DBG("tty %p ch %c", tty, ch);
++}
++
++static void rfcomm_tty_wait_until_sent(struct tty_struct *tty, int timeout)
++{
++ BT_DBG("tty %p timeout %d", tty, timeout);
++}
++
++static void rfcomm_tty_hangup(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ if (!dev)
++ return;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ rfcomm_tty_flush_buffer(tty);
++
++ if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags))
++ rfcomm_dev_del(dev);
++}
++
++static int rfcomm_tty_read_proc(char *buf, char **start, off_t offset, int len, int *eof, void *unused)
++{
++ return 0;
++}
++
++/* ---- TTY structure ---- */
++static int rfcomm_tty_refcount; /* If we manage several devices */
++
++static struct tty_struct *rfcomm_tty_table[RFCOMM_TTY_PORTS];
++static struct termios *rfcomm_tty_termios[RFCOMM_TTY_PORTS];
++static struct termios *rfcomm_tty_termios_locked[RFCOMM_TTY_PORTS];
++
++static struct tty_driver rfcomm_tty_driver = {
++ magic: TTY_DRIVER_MAGIC,
++ driver_name: "rfcomm",
++#ifdef CONFIG_DEVFS_FS
++ name: "bluetooth/rfcomm/%d",
++#else
++ name: "rfcomm",
++#endif
++ major: RFCOMM_TTY_MAJOR,
++ minor_start: RFCOMM_TTY_MINOR,
++ num: RFCOMM_TTY_PORTS,
++ type: TTY_DRIVER_TYPE_SERIAL,
++ subtype: SERIAL_TYPE_NORMAL,
++ flags: TTY_DRIVER_REAL_RAW,
++
++ refcount: &rfcomm_tty_refcount,
++ table: rfcomm_tty_table,
++ termios: rfcomm_tty_termios,
++ termios_locked: rfcomm_tty_termios_locked,
++
++ open: rfcomm_tty_open,
++ close: rfcomm_tty_close,
++ put_char: rfcomm_tty_put_char,
++ write: rfcomm_tty_write,
++ write_room: rfcomm_tty_write_room,
++ chars_in_buffer: rfcomm_tty_chars_in_buffer,
++ flush_buffer: rfcomm_tty_flush_buffer,
++ ioctl: rfcomm_tty_ioctl,
++ throttle: rfcomm_tty_throttle,
++ unthrottle: rfcomm_tty_unthrottle,
++ set_termios: rfcomm_tty_set_termios,
++ send_xchar: rfcomm_tty_send_xchar,
++ stop: NULL,
++ start: NULL,
++ hangup: rfcomm_tty_hangup,
++ wait_until_sent: rfcomm_tty_wait_until_sent,
++ read_proc: rfcomm_tty_read_proc,
++};
++
++int rfcomm_init_ttys(void)
++{
++ int i;
++
++ /* Initalize our global data */
++ for (i = 0; i < RFCOMM_TTY_PORTS; i++)
++ rfcomm_tty_table[i] = NULL;
++
++ /* Register the TTY driver */
++ rfcomm_tty_driver.init_termios = tty_std_termios;
++ rfcomm_tty_driver.init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
++ rfcomm_tty_driver.flags = TTY_DRIVER_REAL_RAW;
++
++ if (tty_register_driver(&rfcomm_tty_driver)) {
++ BT_ERR("Can't register RFCOMM TTY driver");
++ return -1;
++ }
++
++ return 0;
++}
++
++void rfcomm_cleanup_ttys(void)
++{
++ tty_unregister_driver(&rfcomm_tty_driver);
++ return;
++}
+diff -urN linux-2.4.18/net/bluetooth/sco.c linux-2.4.18-mh15/net/bluetooth/sco.c
+--- linux-2.4.18/net/bluetooth/sco.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/sco.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,1019 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * BlueZ SCO sockets.
++ *
++ * $Id: sco.c,v 1.4 2002/07/22 20:32:54 maxk Exp $
++ */
++#define VERSION "0.3"
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/init.h>
++#include <linux/skbuff.h>
++#include <linux/interrupt.h>
++#include <linux/socket.h>
++#include <linux/skbuff.h>
++#include <linux/proc_fs.h>
++#include <linux/list.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include <net/bluetooth/sco.h>
++
++#ifndef SCO_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
++
++static struct proto_ops sco_sock_ops;
++
++static struct bluez_sock_list sco_sk_list = {
++ lock: RW_LOCK_UNLOCKED
++};
++
++static inline int sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent);
++static void sco_chan_del(struct sock *sk, int err);
++static inline struct sock * sco_chan_get(struct sco_conn *conn);
++
++static int sco_conn_del(struct hci_conn *conn, int err);
++
++static void sco_sock_close(struct sock *sk);
++static void sco_sock_kill(struct sock *sk);
++
++/* ----- SCO timers ------ */
++static void sco_sock_timeout(unsigned long arg)
++{
++ struct sock *sk = (struct sock *) arg;
++
++ BT_DBG("sock %p state %d", sk, sk->state);
++
++ bh_lock_sock(sk);
++ sk->err = ETIMEDOUT;
++ sk->state_change(sk);
++ bh_unlock_sock(sk);
++
++ sco_sock_kill(sk);
++ sock_put(sk);
++}
++
++static void sco_sock_set_timer(struct sock *sk, long timeout)
++{
++ BT_DBG("sock %p state %d timeout %ld", sk, sk->state, timeout);
++
++ if (!mod_timer(&sk->timer, jiffies + timeout))
++ sock_hold(sk);
++}
++
++static void sco_sock_clear_timer(struct sock *sk)
++{
++ BT_DBG("sock %p state %d", sk, sk->state);
++
++ if (timer_pending(&sk->timer) && del_timer(&sk->timer))
++ __sock_put(sk);
++}
++
++static void sco_sock_init_timer(struct sock *sk)
++{
++ init_timer(&sk->timer);
++ sk->timer.function = sco_sock_timeout;
++ sk->timer.data = (unsigned long)sk;
++}
++
++/* -------- SCO connections --------- */
++static struct sco_conn *sco_conn_add(struct hci_conn *hcon, __u8 status)
++{
++ struct hci_dev *hdev = hcon->hdev;
++ struct sco_conn *conn;
++
++ if ((conn = hcon->sco_data))
++ return conn;
++
++ if (status)
++ return conn;
++
++ if (!(conn = kmalloc(sizeof(struct sco_conn), GFP_ATOMIC)))
++ return NULL;
++ memset(conn, 0, sizeof(struct sco_conn));
++
++ spin_lock_init(&conn->lock);
++
++ hcon->sco_data = conn;
++ conn->hcon = hcon;
++
++ conn->src = &hdev->bdaddr;
++ conn->dst = &hcon->dst;
++
++ if (hdev->sco_mtu > 0)
++ conn->mtu = hdev->sco_mtu;
++ else
++ conn->mtu = 60;
++
++ BT_DBG("hcon %p conn %p", hcon, conn);
++
++ MOD_INC_USE_COUNT;
++ return conn;
++}
++
++static int sco_conn_del(struct hci_conn *hcon, int err)
++{
++ struct sco_conn *conn;
++ struct sock *sk;
++
++ if (!(conn = hcon->sco_data))
++ return 0;
++
++ BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
++
++ /* Kill socket */
++ if ((sk = sco_chan_get(conn))) {
++ bh_lock_sock(sk);
++ sco_sock_clear_timer(sk);
++ sco_chan_del(sk, err);
++ bh_unlock_sock(sk);
++ sco_sock_kill(sk);
++ }
++
++ hcon->sco_data = NULL;
++ kfree(conn);
++
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++int sco_connect(struct sock *sk)
++{
++ bdaddr_t *src = &bluez_pi(sk)->src;
++ bdaddr_t *dst = &bluez_pi(sk)->dst;
++ struct sco_conn *conn;
++ struct hci_conn *hcon;
++ struct hci_dev *hdev;
++ int err = 0;
++
++ BT_DBG("%s -> %s", batostr(src), batostr(dst));
++
++ if (!(hdev = hci_get_route(dst, src)))
++ return -EHOSTUNREACH;
++
++ hci_dev_lock_bh(hdev);
++
++ err = -ENOMEM;
++
++ hcon = hci_connect(hdev, SCO_LINK, dst);
++ if (!hcon)
++ goto done;
++
++ conn = sco_conn_add(hcon, 0);
++ if (!conn) {
++ hci_conn_put(hcon);
++ goto done;
++ }
++
++ /* Update source addr of the socket */
++ bacpy(src, conn->src);
++
++ err = sco_chan_add(conn, sk, NULL);
++ if (err)
++ goto done;
++
++ if (hcon->state == BT_CONNECTED) {
++ sco_sock_clear_timer(sk);
++ sk->state = BT_CONNECTED;
++ } else {
++ sk->state = BT_CONNECT;
++ sco_sock_set_timer(sk, sk->sndtimeo);
++ }
++done:
++ hci_dev_unlock_bh(hdev);
++ hci_dev_put(hdev);
++ return err;
++}
++
++static inline int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
++{
++ struct sco_conn *conn = sco_pi(sk)->conn;
++ struct sk_buff *skb;
++ int err, count;
++
++ /* Check outgoing MTU */
++ if (len > conn->mtu)
++ return -EINVAL;
++
++ BT_DBG("sk %p len %d", sk, len);
++
++ count = MIN(conn->mtu, len);
++ if (!(skb = bluez_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err)))
++ return err;
++
++ if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count)) {
++ err = -EFAULT;
++ goto fail;
++ }
++
++ if ((err = hci_send_sco(conn->hcon, skb)) < 0)
++ goto fail;
++
++ return count;
++
++fail:
++ kfree_skb(skb);
++ return err;
++}
++
++static inline void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
++{
++ struct sock *sk = sco_chan_get(conn);
++
++ if (!sk)
++ goto drop;
++
++ BT_DBG("sk %p len %d", sk, skb->len);
++
++ if (sk->state != BT_CONNECTED)
++ goto drop;
++
++ if (!sock_queue_rcv_skb(sk, skb))
++ return;
++
++drop:
++ kfree_skb(skb);
++ return;
++}
++
++/* -------- Socket interface ---------- */
++static struct sock *__sco_get_sock_by_addr(bdaddr_t *ba)
++{
++ struct sock *sk;
++
++ for (sk = sco_sk_list.head; sk; sk = sk->next) {
++ if (!bacmp(&bluez_pi(sk)->src, ba))
++ break;
++ }
++
++ return sk;
++}
++
++/* Find socket listening on source bdaddr.
++ * Returns closest match.
++ */
++static struct sock *sco_get_sock_listen(bdaddr_t *src)
++{
++ struct sock *sk, *sk1 = NULL;
++
++ read_lock(&sco_sk_list.lock);
++
++ for (sk = sco_sk_list.head; sk; sk = sk->next) {
++ if (sk->state != BT_LISTEN)
++ continue;
++
++ /* Exact match. */
++ if (!bacmp(&bluez_pi(sk)->src, src))
++ break;
++
++ /* Closest match */
++ if (!bacmp(&bluez_pi(sk)->src, BDADDR_ANY))
++ sk1 = sk;
++ }
++
++ read_unlock(&sco_sk_list.lock);
++
++ return sk ? sk : sk1;
++}
++
++static void sco_sock_destruct(struct sock *sk)
++{
++ BT_DBG("sk %p", sk);
++
++ skb_queue_purge(&sk->receive_queue);
++ skb_queue_purge(&sk->write_queue);
++
++ MOD_DEC_USE_COUNT;
++}
++
++static void sco_sock_cleanup_listen(struct sock *parent)
++{
++ struct sock *sk;
++
++ BT_DBG("parent %p", parent);
++
++ /* Close not yet accepted channels */
++ while ((sk = bluez_accept_dequeue(parent, NULL))) {
++ sco_sock_close(sk);
++ sco_sock_kill(sk);
++ }
++
++ parent->state = BT_CLOSED;
++ parent->zapped = 1;
++}
++
++/* Kill socket (only if zapped and orphan)
++ * Must be called on unlocked socket.
++ */
++static void sco_sock_kill(struct sock *sk)
++{
++ if (!sk->zapped || sk->socket)
++ return;
++
++ BT_DBG("sk %p state %d", sk, sk->state);
++
++ /* Kill poor orphan */
++ bluez_sock_unlink(&sco_sk_list, sk);
++ sk->dead = 1;
++ sock_put(sk);
++}
++
++/* Close socket.
++ * Must be called on unlocked socket.
++ */
++static void sco_sock_close(struct sock *sk)
++{
++ struct sco_conn *conn;
++
++ sco_sock_clear_timer(sk);
++
++ lock_sock(sk);
++
++ conn = sco_pi(sk)->conn;
++
++ BT_DBG("sk %p state %d conn %p socket %p", sk, sk->state, conn, sk->socket);
++
++ switch (sk->state) {
++ case BT_LISTEN:
++ sco_sock_cleanup_listen(sk);
++ break;
++
++ case BT_CONNECTED:
++ case BT_CONFIG:
++ case BT_CONNECT:
++ case BT_DISCONN:
++ sco_chan_del(sk, ECONNRESET);
++ break;
++
++ default:
++ sk->zapped = 1;
++ break;
++ };
++
++ release_sock(sk);
++}
++
++static void sco_sock_init(struct sock *sk, struct sock *parent)
++{
++ BT_DBG("sk %p", sk);
++
++ if (parent)
++ sk->type = parent->type;
++}
++
++static struct sock *sco_sock_alloc(struct socket *sock, int proto, int prio)
++{
++ struct sock *sk;
++
++ if (!(sk = sk_alloc(PF_BLUETOOTH, prio, 1)))
++ return NULL;
++
++ bluez_sock_init(sock, sk);
++
++ sk->zapped = 0;
++
++ sk->destruct = sco_sock_destruct;
++ sk->sndtimeo = SCO_CONN_TIMEOUT;
++
++ sk->protocol = proto;
++ sk->state = BT_OPEN;
++
++ sco_sock_init_timer(sk);
++
++ bluez_sock_link(&sco_sk_list, sk);
++
++ MOD_INC_USE_COUNT;
++ return sk;
++}
++
++static int sco_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ sock->state = SS_UNCONNECTED;
++
++ if (sock->type != SOCK_SEQPACKET)
++ return -ESOCKTNOSUPPORT;
++
++ sock->ops = &sco_sock_ops;
++
++ if (!(sk = sco_sock_alloc(sock, protocol, GFP_KERNEL)))
++ return -ENOMEM;
++
++ sco_sock_init(sk, NULL);
++ return 0;
++}
++
++static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
++{
++ struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
++ struct sock *sk = sock->sk;
++ bdaddr_t *src = &sa->sco_bdaddr;
++ int err = 0;
++
++ BT_DBG("sk %p %s", sk, batostr(&sa->sco_bdaddr));
++
++ if (!addr || addr->sa_family != AF_BLUETOOTH)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_OPEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ write_lock_bh(&sco_sk_list.lock);
++
++ if (bacmp(src, BDADDR_ANY) && __sco_get_sock_by_addr(src)) {
++ err = -EADDRINUSE;
++ } else {
++ /* Save source address */
++ bacpy(&bluez_pi(sk)->src, &sa->sco_bdaddr);
++ sk->state = BT_BOUND;
++ }
++
++ write_unlock_bh(&sco_sk_list.lock);
++
++done:
++ release_sock(sk);
++
++ return err;
++}
++
++static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
++{
++ struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++
++ BT_DBG("sk %p", sk);
++
++ if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_sco))
++ return -EINVAL;
++
++ if (sk->state != BT_OPEN && sk->state != BT_BOUND)
++ return -EBADFD;
++
++ if (sk->type != SOCK_SEQPACKET)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ /* Set destination address and psm */
++ bacpy(&bluez_pi(sk)->dst, &sa->sco_bdaddr);
++
++ if ((err = sco_connect(sk)))
++ goto done;
++
++ err = bluez_sock_wait_state(sk, BT_CONNECTED,
++ sock_sndtimeo(sk, flags & O_NONBLOCK));
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++int sco_sock_listen(struct socket *sock, int backlog)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p backlog %d", sk, backlog);
++
++ lock_sock(sk);
++
++ if (sk->state != BT_BOUND || sock->type != SOCK_SEQPACKET) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ sk->max_ack_backlog = backlog;
++ sk->ack_backlog = 0;
++ sk->state = BT_LISTEN;
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++int sco_sock_accept(struct socket *sock, struct socket *newsock, int flags)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct sock *sk = sock->sk, *ch;
++ long timeo;
++ int err = 0;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
++
++ BT_DBG("sk %p timeo %ld", sk, timeo);
++
++ /* Wait for an incoming connection. (wake-one). */
++ add_wait_queue_exclusive(sk->sleep, &wait);
++ while (!(ch = bluez_accept_dequeue(sk, newsock))) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ if (!timeo) {
++ err = -EAGAIN;
++ break;
++ }
++
++ release_sock(sk);
++ timeo = schedule_timeout(timeo);
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ break;
++ }
++
++ if (signal_pending(current)) {
++ err = sock_intr_errno(timeo);
++ break;
++ }
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++
++ if (err)
++ goto done;
++
++ newsock->state = SS_CONNECTED;
++
++ BT_DBG("new socket %p", ch);
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++static int sco_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
++{
++ struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ addr->sa_family = AF_BLUETOOTH;
++ *len = sizeof(struct sockaddr_sco);
++
++ if (peer)
++ bacpy(&sa->sco_bdaddr, &bluez_pi(sk)->dst);
++ else
++ bacpy(&sa->sco_bdaddr, &bluez_pi(sk)->src);
++
++ return 0;
++}
++
++static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct scm_cookie *scm)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (sk->err)
++ return sock_error(sk);
++
++ if (msg->msg_flags & MSG_OOB)
++ return -EOPNOTSUPP;
++
++ lock_sock(sk);
++
++ if (sk->state == BT_CONNECTED)
++ err = sco_send_frame(sk, msg, len);
++ else
++ err = -ENOTCONN;
++
++ release_sock(sk);
++ return err;
++}
++
++int sco_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, int optlen)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ lock_sock(sk);
++
++ switch (optname) {
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ };
++
++ release_sock(sk);
++ return err;
++}
++
++int sco_sock_getsockopt(struct socket *sock, int level, int optname, char *optval, int *optlen)
++{
++ struct sock *sk = sock->sk;
++ struct sco_options opts;
++ struct sco_conninfo cinfo;
++ int len, err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ if (get_user(len, optlen))
++ return -EFAULT;
++
++ lock_sock(sk);
++
++ switch (optname) {
++ case SCO_OPTIONS:
++ if (sk->state != BT_CONNECTED) {
++ err = -ENOTCONN;
++ break;
++ }
++
++ opts.mtu = sco_pi(sk)->conn->mtu;
++
++ BT_DBG("mtu %d", opts.mtu);
++
++ len = MIN(len, sizeof(opts));
++ if (copy_to_user(optval, (char *)&opts, len))
++ err = -EFAULT;
++
++ break;
++
++ case SCO_CONNINFO:
++ if (sk->state != BT_CONNECTED) {
++ err = -ENOTCONN;
++ break;
++ }
++
++ cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
++
++ len = MIN(len, sizeof(cinfo));
++ if (copy_to_user(optval, (char *)&cinfo, len))
++ err = -EFAULT;
++
++ break;
++
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ };
++
++ release_sock(sk);
++ return err;
++}
++
++static int sco_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (!sk)
++ return 0;
++
++ sco_sock_close(sk);
++ if (sk->linger) {
++ lock_sock(sk);
++ err = bluez_sock_wait_state(sk, BT_CLOSED, sk->lingertime);
++ release_sock(sk);
++ }
++
++ sock_orphan(sk);
++ sco_sock_kill(sk);
++ return err;
++}
++
++static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
++{
++ BT_DBG("conn %p", conn);
++
++ sco_pi(sk)->conn = conn;
++ conn->sk = sk;
++
++ if (parent)
++ bluez_accept_enqueue(parent, sk);
++}
++
++static inline int sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
++{
++ int err = 0;
++
++ sco_conn_lock(conn);
++ if (conn->sk) {
++ err = -EBUSY;
++ } else {
++ __sco_chan_add(conn, sk, parent);
++ }
++ sco_conn_unlock(conn);
++ return err;
++}
++
++static inline struct sock * sco_chan_get(struct sco_conn *conn)
++{
++ struct sock *sk = NULL;
++ sco_conn_lock(conn);
++ sk = conn->sk;
++ sco_conn_unlock(conn);
++ return sk;
++}
++
++/* Delete channel.
++ * Must be called on the locked socket. */
++static void sco_chan_del(struct sock *sk, int err)
++{
++ struct sco_conn *conn;
++
++ conn = sco_pi(sk)->conn;
++
++ BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
++
++ if (conn) {
++ sco_conn_lock(conn);
++ conn->sk = NULL;
++ sco_pi(sk)->conn = NULL;
++ sco_conn_unlock(conn);
++ hci_conn_put(conn->hcon);
++ }
++
++ sk->state = BT_CLOSED;
++ sk->err = err;
++ sk->state_change(sk);
++
++ sk->zapped = 1;
++}
++
++static void sco_conn_ready(struct sco_conn *conn)
++{
++ struct sock *parent, *sk;
++
++ BT_DBG("conn %p", conn);
++
++ sco_conn_lock(conn);
++
++ if ((sk = conn->sk)) {
++ sco_sock_clear_timer(sk);
++ bh_lock_sock(sk);
++ sk->state = BT_CONNECTED;
++ sk->state_change(sk);
++ bh_unlock_sock(sk);
++ } else {
++ parent = sco_get_sock_listen(conn->src);
++ if (!parent)
++ goto done;
++
++ bh_lock_sock(parent);
++
++ sk = sco_sock_alloc(NULL, BTPROTO_SCO, GFP_ATOMIC);
++ if (!sk) {
++ bh_unlock_sock(parent);
++ goto done;
++ }
++
++ sco_sock_init(sk, parent);
++
++ bacpy(&bluez_pi(sk)->src, conn->src);
++ bacpy(&bluez_pi(sk)->dst, conn->dst);
++
++ hci_conn_hold(conn->hcon);
++ __sco_chan_add(conn, sk, parent);
++
++ sk->state = BT_CONNECTED;
++
++ /* Wake up parent */
++ parent->data_ready(parent, 1);
++
++ bh_unlock_sock(parent);
++ }
++
++done:
++ sco_conn_unlock(conn);
++}
++
++/* ----- SCO interface with lower layer (HCI) ----- */
++int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
++{
++ BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
++
++ /* Always accept connection */
++ return HCI_LM_ACCEPT;
++}
++
++int sco_connect_cfm(struct hci_conn *hcon, __u8 status)
++{
++ BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
++
++ if (hcon->type != SCO_LINK)
++ return 0;
++
++ if (!status) {
++ struct sco_conn *conn;
++
++ conn = sco_conn_add(hcon, status);
++ if (conn)
++ sco_conn_ready(conn);
++ } else
++ sco_conn_del(hcon, bterr(status));
++
++ return 0;
++}
++
++int sco_disconn_ind(struct hci_conn *hcon, __u8 reason)
++{
++ BT_DBG("hcon %p reason %d", hcon, reason);
++
++ if (hcon->type != SCO_LINK)
++ return 0;
++
++ sco_conn_del(hcon, bterr(reason));
++ return 0;
++}
++
++int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
++{
++ struct sco_conn *conn = hcon->sco_data;
++
++ if (!conn)
++ goto drop;
++
++ BT_DBG("conn %p len %d", conn, skb->len);
++
++ if (skb->len) {
++ sco_recv_frame(conn, skb);
++ return 0;
++ }
++
++drop:
++ kfree_skb(skb);
++ return 0;
++}
++
++/* ----- Proc fs support ------ */
++static int sco_sock_dump(char *buf, struct bluez_sock_list *list)
++{
++ struct sco_pinfo *pi;
++ struct sock *sk;
++ char *ptr = buf;
++
++ write_lock_bh(&list->lock);
++
++ for (sk = list->head; sk; sk = sk->next) {
++ pi = sco_pi(sk);
++ ptr += sprintf(ptr, "%s %s %d\n",
++ batostr(&bluez_pi(sk)->src), batostr(&bluez_pi(sk)->dst),
++ sk->state);
++ }
++
++ write_unlock_bh(&list->lock);
++
++ ptr += sprintf(ptr, "\n");
++
++ return ptr - buf;
++}
++
++static int sco_read_proc(char *buf, char **start, off_t offset, int count, int *eof, void *priv)
++{
++ char *ptr = buf;
++ int len;
++
++ BT_DBG("count %d, offset %ld", count, offset);
++
++ ptr += sco_sock_dump(ptr, &sco_sk_list);
++ len = ptr - buf;
++
++ if (len <= count + offset)
++ *eof = 1;
++
++ *start = buf + offset;
++ len -= offset;
++
++ if (len > count)
++ len = count;
++ if (len < 0)
++ len = 0;
++
++ return len;
++}
++
++static struct proto_ops sco_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: sco_sock_release,
++ bind: sco_sock_bind,
++ connect: sco_sock_connect,
++ listen: sco_sock_listen,
++ accept: sco_sock_accept,
++ getname: sco_sock_getname,
++ sendmsg: sco_sock_sendmsg,
++ recvmsg: bluez_sock_recvmsg,
++ poll: bluez_sock_poll,
++ socketpair: sock_no_socketpair,
++ ioctl: sock_no_ioctl,
++ shutdown: sock_no_shutdown,
++ setsockopt: sco_sock_setsockopt,
++ getsockopt: sco_sock_getsockopt,
++ mmap: sock_no_mmap
++};
++
++static struct net_proto_family sco_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: sco_sock_create
++};
++
++static struct hci_proto sco_hci_proto = {
++ name: "SCO",
++ id: HCI_PROTO_SCO,
++ connect_ind: sco_connect_ind,
++ connect_cfm: sco_connect_cfm,
++ disconn_ind: sco_disconn_ind,
++ recv_scodata: sco_recv_scodata,
++};
++
++int __init sco_init(void)
++{
++ int err;
++
++ if ((err = bluez_sock_register(BTPROTO_SCO, &sco_sock_family_ops))) {
++ BT_ERR("Can't register SCO socket layer");
++ return err;
++ }
++
++ if ((err = hci_register_proto(&sco_hci_proto))) {
++ BT_ERR("Can't register SCO protocol");
++ return err;
++ }
++
++ create_proc_read_entry("bluetooth/sco", 0, 0, sco_read_proc, NULL);
++
++ BT_INFO("BlueZ SCO ver %s Copyright (C) 2000,2001 Qualcomm Inc", VERSION);
++ BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
++ return 0;
++}
++
++void sco_cleanup(void)
++{
++ int err;
++
++ remove_proc_entry("bluetooth/sco", NULL);
++
++ /* Unregister socket, protocol and notifier */
++ if ((err = bluez_sock_unregister(BTPROTO_SCO)))
++ BT_ERR("Can't unregister SCO socket layer %d", err);
++
++ if ((err = hci_unregister_proto(&sco_hci_proto)))
++ BT_ERR("Can't unregister SCO protocol %d", err);
++}
++
++module_init(sco_init);
++module_exit(sco_cleanup);
++
++MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
++MODULE_DESCRIPTION("BlueZ SCO ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/syms.c linux-2.4.18-mh15/net/bluetooth/syms.c
+--- linux-2.4.18/net/bluetooth/syms.c 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/net/bluetooth/syms.c 2004-08-01 16:26:23.000000000 +0200
+@@ -25,7 +25,7 @@
+ /*
+ * BlueZ symbols.
+ *
+- * $Id: syms.c,v 1.1 2001/07/12 19:31:24 maxk Exp $
++ * $Id: syms.c,v 1.1 2002/03/08 21:06:59 maxk Exp $
+ */
+
+ #include <linux/config.h>
+@@ -39,25 +39,28 @@
+ #include <linux/socket.h>
+
+ #include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+ #include <net/bluetooth/hci_core.h>
+
+ /* HCI Core */
+ EXPORT_SYMBOL(hci_register_dev);
+ EXPORT_SYMBOL(hci_unregister_dev);
++EXPORT_SYMBOL(hci_suspend_dev);
++EXPORT_SYMBOL(hci_resume_dev);
++
+ EXPORT_SYMBOL(hci_register_proto);
+ EXPORT_SYMBOL(hci_unregister_proto);
+-EXPORT_SYMBOL(hci_register_notifier);
+-EXPORT_SYMBOL(hci_unregister_notifier);
+
++EXPORT_SYMBOL(hci_get_route);
+ EXPORT_SYMBOL(hci_connect);
+-EXPORT_SYMBOL(hci_disconnect);
+ EXPORT_SYMBOL(hci_dev_get);
++EXPORT_SYMBOL(hci_conn_auth);
++EXPORT_SYMBOL(hci_conn_encrypt);
+
+ EXPORT_SYMBOL(hci_recv_frame);
+ EXPORT_SYMBOL(hci_send_acl);
+ EXPORT_SYMBOL(hci_send_sco);
+-EXPORT_SYMBOL(hci_send_raw);
++EXPORT_SYMBOL(hci_send_cmd);
++EXPORT_SYMBOL(hci_si_event);
+
+ /* BlueZ lib */
+ EXPORT_SYMBOL(bluez_dump);
+@@ -68,5 +71,11 @@
+ /* BlueZ sockets */
+ EXPORT_SYMBOL(bluez_sock_register);
+ EXPORT_SYMBOL(bluez_sock_unregister);
++EXPORT_SYMBOL(bluez_sock_init);
+ EXPORT_SYMBOL(bluez_sock_link);
+ EXPORT_SYMBOL(bluez_sock_unlink);
++EXPORT_SYMBOL(bluez_sock_recvmsg);
++EXPORT_SYMBOL(bluez_sock_poll);
++EXPORT_SYMBOL(bluez_accept_enqueue);
++EXPORT_SYMBOL(bluez_accept_dequeue);
++EXPORT_SYMBOL(bluez_sock_wait_state);
+diff -urN linux-2.4.18/net/netsyms.c linux-2.4.18-mh15/net/netsyms.c
+--- linux-2.4.18/net/netsyms.c 2002-02-25 20:38:14.000000000 +0100
++++ linux-2.4.18-mh15/net/netsyms.c 2004-08-01 16:26:23.000000000 +0200
+@@ -159,6 +159,7 @@
+ EXPORT_SYMBOL(put_cmsg);
+ EXPORT_SYMBOL(sock_kmalloc);
+ EXPORT_SYMBOL(sock_kfree_s);
++EXPORT_SYMBOL(sockfd_lookup);
+
+ #ifdef CONFIG_FILTER
+ EXPORT_SYMBOL(sk_run_filter);
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/bt950_cs.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/bt950_cs.patch
new file mode 100644
index 0000000000..c29f0d02f2
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/bt950_cs.patch
@@ -0,0 +1,1174 @@
+diff -Nur linux-orig/drivers/bluetooth/bt950_cs.c linux/drivers/bluetooth/bt950_cs.c
+--- linux-orig/drivers/bluetooth/bt950_cs.c 1970-01-01 03:00:00.000000000 +0300
++++ linux/drivers/bluetooth/bt950_cs.c 2004-02-04 09:55:04.000000000 +0300
+@@ -0,0 +1,1133 @@
++/*
++ *
++ * Driver for Bluetooth cards with OXCF950 UART interface
++ *
++ * Copyright (C) 2001-2002 Marcel Holtmann <marcel@holtmann.org>
++ * Albert Rybalkin <albertr@iral.com>
++ *
++ *
++ * 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;
++ *
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ *
++ * The initial developer of the original code is David A. Hinds
++ * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
++ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
++ *
++ */
++
++#include <linux/config.h>
++
++#ifdef CONFIG_MODVERSIONS
++#ifndef MODVERSIONS
++#define MODVERSIONS
++#endif
++#include <linux/modversions.h>
++#endif
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/timer.h>
++#include <linux/errno.h>
++#include <linux/ptrace.h>
++#include <linux/ioport.h>
++#include <linux/spinlock.h>
++#include <linux/delay.h>
++
++#include <linux/skbuff.h>
++#include <linux/string.h>
++#include <linux/serial.h>
++#include <linux/serial_reg.h>
++#include <asm/system.h>
++#include <asm/bitops.h>
++#include <asm/io.h>
++
++#include <pcmcia/version.h>
++#include <pcmcia/cs_types.h>
++#include <pcmcia/cs.h>
++#include <pcmcia/cistpl.h>
++#include <pcmcia/ciscode.h>
++#include <pcmcia/ds.h>
++#include <pcmcia/cisreg.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++/* Default baud rate: 57600, 115200, 230400 or 460800 */
++#define DEFAULT_BAUD_RATE 460800
++
++
++/* ======================== Module parameters ======================== */
++
++
++/* Bit map of interrupts to choose from */
++static u_int irq_mask = 0x86bc;
++static int irq_list[4] = { -1 };
++static long baud_rate = DEFAULT_BAUD_RATE;
++
++MODULE_PARM(irq_mask, "i");
++MODULE_PARM(irq_list, "1-4i");
++MODULE_PARM(baud_rate, "l");
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>, Albert Rybalkin <albertr@iral.com>");
++MODULE_DESCRIPTION("BlueZ driver for Bluetooth cards with OXCF950 UART interface");
++MODULE_LICENSE("GPL");
++
++
++
++/* ======================== Local structures ======================== */
++
++
++typedef struct bt950_info_t {
++ dev_link_t link;
++ dev_node_t node;
++
++ struct hci_dev hdev;
++
++ spinlock_t lock; /* For serializing operations */
++
++ struct sk_buff_head txq;
++ unsigned long tx_state;
++
++ unsigned long rx_state;
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++} bt950_info_t;
++
++
++static void bt950_config(dev_link_t *link);
++static void bt950_release(u_long arg);
++static int bt950_event(event_t event, int priority, event_callback_args_t *args);
++
++static dev_info_t dev_info = "bt950_cs";
++
++static dev_link_t *bt950_attach(void);
++static void bt950_detach(dev_link_t *);
++
++static dev_link_t *dev_list = NULL;
++
++/* Transmit states */
++#define XMIT_SENDING 1
++#define XMIT_WAKEUP 2
++#define XMIT_WAITING 8
++
++/* Receiver states */
++#define RECV_WAIT_PACKET_TYPE 0
++#define RECV_WAIT_EVENT_HEADER 1
++#define RECV_WAIT_ACL_HEADER 2
++#define RECV_WAIT_SCO_HEADER 3
++#define RECV_WAIT_DATA 4
++
++/* Special packet types */
++#define PKT_BAUD_RATE_57600 0x80
++#define PKT_BAUD_RATE_115200 0x81
++#define PKT_BAUD_RATE_230400 0x82
++#define PKT_BAUD_RATE_460800 0x83
++
++/* 950-specific stuff */
++#define MAX_WAIT 0xFFFF
++#define FIFO_SIZE 128
++
++#define TR_TX_INT 0x10 /* TTL: TX interrupt trigger level (0-127) */
++#define TR_RX_INT 0x40 /* RTL: RX interrupt trigger level (1-127) */
++#define TR_CTL_LO 0x08 /* FCL: auto flow control LOWER trigger level (0-127) */
++#define TR_CTL_HI 0x60 /* FCH: auto flow control HIGH trigger level (1-127) */
++
++/* 950-specific registers and values we use. It should
++ * eventually go to include/linux/serial_reg.h */
++#define UART_IER_CTS 0x80 /* enable CTS interrupt */
++#define UART_IER_RTS 0x40 /* enable RTS interrupt */
++#define UART_IER_SLP 0x10 /* enable sleep mode */
++#define UART_LCR_650 0xBF /* enable 650-compatible registers access */
++#define UART_LSR_DE 0x80 /* data error */
++#define UART_LSR_ERR (UART_LSR_OE|UART_LSR_PE|UART_LSR_FE|UART_LSR_BI|UART_LSR_DE)
++#define UART_IIR_RXTOUT 0x0C /* RX timeout interrupt */
++#define UART_IIR_CTSRTS 0x20 /* CTS or RTS change interrupt */
++#define UART_IIR_RTS 0x40
++#define UART_IIR_CTS 0x80
++#define UART_IIR_MASK 0x3E /* interrupt mask */
++#define UART_SRT 0x0D /* soft reset register */
++
++
++
++/* ======================== Interrupt handling ======================== */
++
++
++static int bt950_write(unsigned int iobase, int fifo_size, const unsigned char *buf, int len)
++{
++ int i, actual = 0;
++
++ /* Activate DTR and RTS */
++ outb(UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2, iobase + UART_MCR);
++
++ /* Wait for CTS flow control */
++ for (i = MAX_WAIT; i; i--)
++ if (inb(iobase + UART_MSR) & UART_MSR_CTS)
++ break;
++
++ if (!i) {
++ printk(KERN_WARNING "bt950_cs: Timeout waiting for CTS on write.\n");
++ return 0;
++ }
++
++ /* The TX FIFO should be empty */
++ for (i = MAX_WAIT; i; i--)
++ if (inb(iobase + UART_LSR) & UART_LSR_THRE)
++ break;
++
++ if (!i) {
++ printk(KERN_WARNING "bt950_cs: Timeout waiting for empty TX FIFO on write.\n");
++ return 0;
++ }
++
++ /* Fill FIFO with current frame */
++ while ((fifo_size-- > 0) && (actual < len)) {
++ /* Transmit next byte */
++ outb(buf[actual], iobase + UART_TX);
++ actual++;
++ }
++
++ return actual;
++}
++
++
++static void bt950_write_wakeup(bt950_info_t *info)
++{
++ unsigned char lcr;
++ unsigned int divisor;
++
++ if (!info) {
++ printk(KERN_WARNING "bt950_cs: Call of write_wakeup for unknown device.\n");
++ return;
++ }
++
++ if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) {
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++ return;
++ }
++
++ do {
++ register unsigned int iobase = info->link.io.BasePort1;
++ register struct sk_buff *skb;
++ register int len;
++
++ clear_bit(XMIT_WAKEUP, &(info->tx_state));
++
++ if (!(info->link.state & DEV_PRESENT))
++ return;
++
++ if (!(skb = skb_dequeue(&(info->txq))))
++ break;
++
++ if (skb->pkt_type & 0x80) {
++ /* Disable RTS */
++ outb((inb(iobase + UART_MCR) & ~UART_MCR_RTS), iobase + UART_MCR);
++ }
++
++ /* Send frame */
++ len = bt950_write(iobase, FIFO_SIZE, skb->data, skb->len);
++
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++
++ if (skb->pkt_type & 0x80) {
++
++ wait_queue_head_t wait;
++
++ switch (skb->pkt_type) {
++
++ case PKT_BAUD_RATE_460800:
++ divisor = 1;
++ break;
++
++ case PKT_BAUD_RATE_230400:
++ divisor = 2;
++ break;
++
++ case PKT_BAUD_RATE_115200:
++ divisor = 4;
++ break;
++
++ case PKT_BAUD_RATE_57600:
++ /* Fall through... */
++
++ default:
++ divisor = 8;
++ break;
++ }
++
++ /* Wait until the command reaches the baseband */
++ init_waitqueue_head(&wait);
++ interruptible_sleep_on_timeout(&wait, HZ / 10);
++
++ /* Set baud on baseband */
++ /* Enable divisor latch access */
++ lcr = inb(iobase + UART_LCR) & 0x3F;
++ outb(lcr | UART_LCR_DLAB, iobase + UART_LCR);
++
++ /* Setup divisor latch */
++ outb(divisor & 0x00FF, iobase + UART_DLL); /* divisor latch LOW byte */
++ outb((divisor & 0xFF00) >> 8, iobase + UART_DLM); /* divisor latch HI byte */
++
++ /* Disable divisor latch access */
++ outb(lcr, iobase + UART_LCR);
++
++ /* Enable RTS */
++ outb((inb(iobase + UART_MCR) | UART_MCR_RTS), iobase + UART_MCR);
++
++ /* Wait before the next HCI packet can be send */
++ interruptible_sleep_on_timeout(&wait, HZ);
++
++ }
++
++ if (len == skb->len) {
++ kfree_skb(skb);
++ } else {
++ skb_pull(skb, len);
++ skb_queue_head(&(info->txq), skb);
++ }
++
++ info->hdev.stat.byte_tx += len;
++
++ } while (test_bit(XMIT_WAKEUP, &(info->tx_state)));
++
++ clear_bit(XMIT_SENDING, &(info->tx_state));
++}
++
++
++static inline void bt950_receive(bt950_info_t *info)
++{
++ unsigned int iobase;
++ int boguscount = 0;
++
++ if (!info) {
++ printk(KERN_ERR "bt950_cs: Call of receive for unknown device.\n");
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ /* Fixme: BUG? */
++ inb(iobase + UART_MCR);
++
++ do {
++ info->hdev.stat.byte_rx++;
++
++ /* Allocate packet */
++ if (info->rx_skb == NULL) {
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ if (!(info->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
++ printk(KERN_ERR "bt950_cs: Can't allocate mem for new packet.\n");
++ return;
++ }
++ }
++
++ if (info->rx_state == RECV_WAIT_PACKET_TYPE) {
++
++ info->rx_skb->dev = (void *)&(info->hdev);
++ info->rx_skb->pkt_type = inb(iobase + UART_RX);
++
++ switch (info->rx_skb->pkt_type) {
++
++ case HCI_EVENT_PKT:
++ info->rx_state = RECV_WAIT_EVENT_HEADER;
++ info->rx_count = HCI_EVENT_HDR_SIZE;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ info->rx_state = RECV_WAIT_ACL_HEADER;
++ info->rx_count = HCI_ACL_HDR_SIZE;
++ break;
++
++ case HCI_SCODATA_PKT:
++ info->rx_state = RECV_WAIT_SCO_HEADER;
++ info->rx_count = HCI_SCO_HDR_SIZE;
++ break;
++
++ default:
++ /* Unknown packet */
++ printk(KERN_WARNING "bt950_cs: Unknown HCI packet with type 0x%02X received.\n", info->rx_skb->pkt_type);
++ info->hdev.stat.err_rx++;
++
++ kfree_skb(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ } else {
++
++ *skb_put(info->rx_skb, 1) = inb(iobase + UART_RX);
++ info->rx_count--;
++
++ if (info->rx_count == 0) {
++
++ int dlen;
++ hci_event_hdr *eh;
++ hci_acl_hdr *ah;
++ hci_sco_hdr *sh;
++
++
++ switch (info->rx_state) {
++
++ case RECV_WAIT_EVENT_HEADER:
++ eh = (hci_event_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = eh->plen;
++ break;
++
++ case RECV_WAIT_ACL_HEADER:
++ ah = (hci_acl_hdr *)(info->rx_skb->data);
++ dlen = __le16_to_cpu(ah->dlen);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = dlen;
++ break;
++
++ case RECV_WAIT_SCO_HEADER:
++ sh = (hci_sco_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = sh->dlen;
++ break;
++
++ case RECV_WAIT_DATA:
++ hci_recv_frame(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ }
++
++ }
++
++ /* Make sure we don't stay here too long */
++ if (boguscount++ > 16)
++ break;
++
++ } while (inb(iobase + UART_LSR) & UART_LSR_DR);
++}
++
++
++static void bt950_interrupt(int irq, void *dev_inst, struct pt_regs *regs)
++{
++ bt950_info_t *info = dev_inst;
++ unsigned int iobase;
++ int boguscount = 0;
++ int iir, lsr;
++
++ if (!info) {
++ printk(KERN_ERR "bt950_cs: Call of irq %d for unknown device.\n", irq);
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ spin_lock(&(info->lock));
++
++ iir = inb(iobase + UART_IIR);
++
++ while (!(iir & UART_IIR_NO_INT)) {
++
++ switch (iir & UART_IIR_ID) {
++ case UART_IIR_RLSI:
++ /* Clear RLSI interrupt */
++ lsr = inb(iobase + UART_LSR);
++ printk(KERN_NOTICE "bt950_cs: RLSI interrupt, LSR=%#x\n", lsr);
++ /* Fixme: we need to process errors ... */
++ break;
++ case UART_IIR_RDI:
++ /* Receive interrupt */
++ bt950_receive(info);
++ break;
++ case UART_IIR_THRI:
++ /* Transmitter ready for data */
++ bt950_write_wakeup(info);
++ break;
++ default:
++ printk(KERN_NOTICE "bt950_cs: Unhandled IIR=%#x\n", iir);
++ break;
++ }
++
++ /* Make sure we don't stay here too long */
++ if (boguscount++ > 100)
++ break;
++
++ iir = inb(iobase + UART_IIR);
++
++ }
++
++ spin_unlock(&(info->lock));
++}
++
++/* ======================== Device specific HCI commands ======================== */
++
++
++static int bt950_hci_set_baud_rate(struct hci_dev *hdev, int baud)
++{
++ bt950_info_t *info = (bt950_info_t *)(hdev->driver_data);
++ struct sk_buff *skb;
++
++ /* Ericsson baud rate command */
++ unsigned char cmd[] = { HCI_COMMAND_PKT, 0x09, 0xfc, 0x01, 0x03 };
++
++ if (!(skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
++ printk(KERN_WARNING "bt950_cs: Can't allocate mem for new packet.\n");
++ return -1;
++ }
++
++ switch (baud) {
++ case 460800:
++ cmd[4] = 0x00;
++ skb->pkt_type = PKT_BAUD_RATE_460800;
++ break;
++ case 230400:
++ cmd[4] = 0x01;
++ skb->pkt_type = PKT_BAUD_RATE_230400;
++ break;
++ case 115200:
++ cmd[4] = 0x02;
++ skb->pkt_type = PKT_BAUD_RATE_115200;
++ break;
++ case 57600:
++ /* Fall through... */
++ default:
++ baud = 57600;
++ cmd[4] = 0x03;
++ skb->pkt_type = PKT_BAUD_RATE_57600;
++ break;
++ }
++
++ memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
++
++ skb_queue_tail(&(info->txq), skb);
++
++ printk(KERN_WARNING "bt950_cs: setting baud rate: %d.\n", baud);
++
++ bt950_write_wakeup(info);
++
++ return 0;
++}
++
++
++/* ======================== HCI interface ======================== */
++
++
++static int bt950_hci_flush(struct hci_dev *hdev)
++{
++ bt950_info_t *info = (bt950_info_t *)(hdev->driver_data);
++
++ /* Drop TX queue */
++ skb_queue_purge(&(info->txq));
++
++ return 0;
++}
++
++
++static int bt950_hci_open(struct hci_dev *hdev)
++{
++ bt950_hci_set_baud_rate(hdev, baud_rate);
++ set_bit(HCI_RUNNING, &(hdev->flags));
++
++ return 0;
++}
++
++
++static int bt950_hci_close(struct hci_dev *hdev)
++{
++ if (!test_and_clear_bit(HCI_RUNNING, &(hdev->flags)))
++ return 0;
++
++ bt950_hci_flush(hdev);
++
++ return 0;
++}
++
++
++static int bt950_hci_send_frame(struct sk_buff *skb)
++{
++ bt950_info_t *info;
++ struct hci_dev *hdev = (struct hci_dev *)(skb->dev);
++
++ if (!hdev) {
++ printk(KERN_ERR "bt950_cs: Frame for unknown HCI device (hdev=NULL).");
++ return -ENODEV;
++ }
++
++ info = (bt950_info_t *)(hdev->driver_data);
++
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++ };
++
++ /* Prepend skb with frame type */
++ memcpy(skb_push(skb, 1), &(skb->pkt_type), 1);
++ skb_queue_tail(&(info->txq), skb);
++
++ bt950_write_wakeup(info);
++
++ return 0;
++}
++
++
++static void bt950_hci_destruct(struct hci_dev *hdev)
++{
++}
++
++
++static int bt950_hci_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
++{
++ return -ENOIOCTLCMD;
++}
++
++
++
++/* ======================== Card services HCI interaction ======================== */
++
++
++static int bt950_setup_uart(bt950_info_t *info)
++{
++ unsigned long flags;
++ unsigned int iobase = info->link.io.BasePort1;
++ unsigned char lcr, ier = UART_IER_RDI | UART_IER_RLSI | UART_IER_SLP;
++ unsigned int divisor = 8; /* Fixme: divisor == 0x0c ??? */
++ unsigned char id1, id2, id3, rev;
++ register int i;
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Disable interrupts */
++ outb(0, iobase + UART_IER);
++
++ /* Activate RTS and OUT2 */
++ /* Fixme: is OUT2 used to enable interrupts? */
++ outb(UART_MCR_RTS | UART_MCR_OUT2, iobase + UART_MCR);
++
++ /* Setup the FIFO's */
++ outb(0, iobase + UART_FCR);
++ inb(iobase + UART_RX);
++ outb(UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_RCVR |
++ UART_FCR_CLEAR_XMIT | UART_FCR_TRIGGER_14, iobase + UART_FCR);
++
++ /* Disable divisor latch access */
++ lcr = inb(iobase + UART_LCR) & 0x3F; /* mask out UART_LCR_DLAB and UART_LCR_SBC */
++ outb(lcr, iobase + UART_LCR);
++
++ /* Read up to 4 bytes from RX FIFO */
++ for (i = 0; i < 4; i++) {
++ inb(iobase + UART_RX);
++ if (!(inb(iobase + UART_LSR) & UART_LSR_DR))
++ break;
++ }
++
++ /* Wait if CTS/DSR/DCD changing */
++ for (i = 1; i < 0x3E8; i++) {
++ if (!(inb(iobase + UART_MSR) & UART_MSR_ANY_DELTA))
++ break;
++ }
++
++ /* Enable divisor latch access */
++ outb(lcr | UART_LCR_DLAB, iobase + UART_LCR);
++
++ /* Setup divisor latch */
++ outb(divisor & 0x00FF, iobase + UART_DLL); /* divisor latch LOW byte */
++ outb((divisor & 0xFF00) >> 8, iobase + UART_DLM); /* divisor latch HIGH byte */
++
++ /* Disable divisor latch access */
++ outb(lcr, iobase + UART_LCR);
++
++ /* Setup interrupts, enable sleep mode */
++ outb(ier, iobase + UART_IER); /* we don't want to handle TX interrupts */
++
++ /* Skip pending interrupts */
++ for (i = 0; i < 4; i++) {
++ if (inb(iobase + UART_IIR) & UART_IIR_NO_INT)
++ break;
++ }
++
++ /* 8N1 */
++ lcr = UART_LCR_WLEN8;
++ outb(lcr, iobase + UART_LCR);
++
++ /* Setup CTS/RTS flow control and 950 enhanced mode */
++ outb(UART_LCR_650, iobase + UART_LCR);
++ outb(UART_EFR_CTS | UART_EFR_RTS | UART_EFR_ECB,
++ iobase + UART_EFR);
++ outb(lcr, iobase + UART_LCR);
++
++ /* Read core id and revision */
++ outb(UART_ACR, iobase + UART_EMSR);
++ outb(UART_ACR_ICRRD, iobase + UART_LSR); /* enable ICR read access, we don't need to save the old value of ACR */
++
++ outb(UART_ID1, iobase + UART_EMSR);
++ id1 = inb(iobase + UART_LSR);
++
++ outb(UART_ID2, iobase + UART_EMSR);
++ id2 = inb(iobase + UART_LSR);
++
++ outb(UART_ID3, iobase + UART_EMSR);
++ id3 = inb(iobase + UART_LSR);
++
++ outb(UART_REV, iobase + UART_EMSR);
++ rev = inb(iobase + UART_LSR);
++
++ if (id1 != 0x16 || id2 != 0xC9 || id3 != 0x50) {
++ printk(KERN_ERR "bt950_cs: Unknown UART core %02X%02X%02X found.\n", id1, id2, id3);
++ spin_unlock_irqrestore(&(info->lock), flags);
++ return -ENODEV;
++ }
++
++
++ /* Init ICR registers */
++ outb(UART_TTL, iobase + UART_EMSR);
++ outb(TR_TX_INT, iobase + UART_LSR); /* TX interrupt trigger level (0-127) */
++
++ outb(UART_RTL, iobase + UART_EMSR);
++ outb(TR_RX_INT, iobase + UART_LSR); /* RX interrupt trigger level (1-127) */
++
++ outb(UART_FCL, iobase + UART_EMSR);
++ outb(TR_CTL_LO, iobase + UART_LSR); /* auto flow control LOWER trigger level (0-127) */
++
++ outb(UART_FCH, iobase + UART_EMSR);
++ outb(TR_CTL_HI, iobase + UART_LSR); /* auto flow control HIGH trigger level (1-127) */
++
++ outb(UART_ACR, iobase + UART_EMSR);
++ outb(UART_ACR_TLENB, iobase + UART_LSR); /* disable ICR read access, enable trigger levels */
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++
++ return 0;
++}
++
++
++static void bt950_stop_uart(bt950_info_t *info)
++{
++ unsigned long flags;
++ unsigned int iobase = info->link.io.BasePort1;
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Disable interrupts */
++ outb(0, iobase + UART_IER);
++
++ /* Set RTS and OUT2 low */
++ outb(0, iobase + UART_MCR);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++}
++
++
++static int bt950_open(bt950_info_t *info)
++{
++ struct hci_dev *hdev;
++ int err;
++
++ spin_lock_init(&(info->lock));
++
++ skb_queue_head_init(&(info->txq));
++
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ info->rx_skb = NULL;
++
++ /* Setup hardware */
++ if ((err = bt950_setup_uart(info)) < 0)
++ return err;
++
++ /* Timeout before it is safe to send the first HCI packet */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ);
++
++
++ /* Initialize and register HCI device */
++
++ hdev = &(info->hdev);
++
++ hdev->type = HCI_PCCARD;
++ hdev->driver_data = info;
++
++ hdev->open = bt950_hci_open;
++ hdev->close = bt950_hci_close;
++ hdev->flush = bt950_hci_flush;
++ hdev->send = bt950_hci_send_frame;
++ hdev->destruct = bt950_hci_destruct;
++ hdev->ioctl = bt950_hci_ioctl;
++
++ if (hci_register_dev(hdev) < 0) {
++ printk(KERN_ERR "bt950_cs: Can't register HCI device %s.\n", hdev->name);
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++
++static int bt950_close(bt950_info_t *info)
++{
++ struct hci_dev *hdev = &(info->hdev);
++
++ bt950_hci_close(hdev);
++
++ /* Stop hardware */
++ bt950_stop_uart(info);
++
++ if (hci_unregister_dev(hdev) < 0)
++ printk(KERN_ERR "bt950_cs: Can't unregister HCI device %s.\n", hdev->name);
++
++ return 0;
++}
++
++
++
++/* ======================== Card services ======================== */
++
++
++static void cs_error(client_handle_t handle, int func, int ret)
++{
++ error_info_t err = { func, ret };
++
++ CardServices(ReportError, handle, &err);
++}
++
++
++static dev_link_t *bt950_attach(void)
++{
++ bt950_info_t *info;
++ client_reg_t client_reg;
++ dev_link_t *link;
++ int i, ret;
++
++ /* Create new info device */
++ info = kmalloc(sizeof(*info), GFP_KERNEL);
++ if (!info)
++ return NULL;
++ memset(info, 0, sizeof(*info));
++
++ link = &info->link;
++ link->priv = info;
++
++ link->release.function = &bt950_release;
++ link->release.data = (u_long)link;
++ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
++ link->io.NumPorts1 = 8;
++ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
++ link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID;
++
++ if (irq_list[0] == -1)
++ link->irq.IRQInfo2 = irq_mask;
++ else
++ for (i = 0; i < 4; i++)
++ link->irq.IRQInfo2 |= 1 << irq_list[i];
++
++ link->irq.Handler = bt950_interrupt;
++ link->irq.Instance = info;
++
++ link->conf.Attributes = CONF_ENABLE_IRQ;
++ link->conf.IntType = INT_MEMORY_AND_IO;
++ link->conf.Present =
++ PRESENT_OPTION | PRESENT_STATUS | PRESENT_PIN_REPLACE |
++ PRESENT_COPY;
++
++ /* Register with Card Services */
++ link->next = dev_list;
++ dev_list = link;
++ client_reg.dev_info = &dev_info;
++ client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
++ client_reg.EventMask =
++ CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
++ CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
++ CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
++ client_reg.event_handler = &bt950_event;
++ client_reg.Version = 0x0210;
++ client_reg.event_callback_args.client_data = link;
++
++ ret = CardServices(RegisterClient, &link->handle, &client_reg);
++ if (ret != CS_SUCCESS) {
++ cs_error(link->handle, RegisterClient, ret);
++ bt950_detach(link);
++ return NULL;
++ }
++
++ return link;
++}
++
++
++static void bt950_detach(dev_link_t *link)
++{
++ bt950_info_t *info = link->priv;
++ dev_link_t **linkp;
++ int ret;
++
++ /* Locate device structure */
++ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
++ if (*linkp == link)
++ break;
++
++ if (*linkp == NULL)
++ return;
++
++ del_timer(&link->release);
++ if (link->state & DEV_CONFIG)
++ bt950_release((u_long) link);
++
++ if (link->handle) {
++ ret = CardServices(DeregisterClient, link->handle);
++ if (ret != CS_SUCCESS)
++ cs_error(link->handle, DeregisterClient, ret);
++ }
++
++ /* Unlink device structure, free bits */
++ *linkp = link->next;
++
++ kfree(info);
++}
++
++
++static int get_tuple(int fn, client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
++{
++ int i;
++
++ i = CardServices(fn, handle, tuple);
++ if (i != CS_SUCCESS)
++ return CS_NO_MORE_ITEMS;
++
++ i = CardServices(GetTupleData, handle, tuple);
++ if (i != CS_SUCCESS)
++ return i;
++
++ return CardServices(ParseTuple, handle, tuple, parse);
++}
++
++
++#define first_tuple(a, b, c) get_tuple(GetFirstTuple, a, b, c)
++#define next_tuple(a, b, c) get_tuple(GetNextTuple, a, b, c)
++
++static void bt950_config(dev_link_t *link)
++{
++ static ioaddr_t base[4] = { 0x2f8, 0x3e8, 0x2e8, 0x0 };
++ client_handle_t handle = link->handle;
++ bt950_info_t *info = link->priv;
++ tuple_t tuple;
++ u_short buf[256];
++ cisparse_t parse;
++ cistpl_cftable_entry_t *cf = &parse.cftable_entry;
++ config_info_t config;
++ int i, j, try, last_ret, last_fn;
++
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++
++ /* Get configuration register information */
++ tuple.DesiredTuple = CISTPL_CONFIG;
++ last_ret = first_tuple(handle, &tuple, &parse);
++ if (last_ret != CS_SUCCESS) {
++ last_fn = ParseTuple;
++ goto cs_failed;
++ }
++ link->conf.ConfigBase = parse.config.base;
++ link->conf.Present = parse.config.rmask[0];
++
++ /* Configure card */
++ link->state |= DEV_CONFIG;
++ i = CardServices(GetConfigurationInfo, handle, &config);
++ link->conf.Vcc = config.Vcc;
++
++ /* First pass: look for a config entry that looks normal. */
++ tuple.TupleData = (cisdata_t *) buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++ tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
++ /* Two tries: without IO aliases, then with aliases */
++ for (try = 0; try < 2; try++) {
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if (i != CS_SUCCESS)
++ goto next_entry;
++ if (cf->vpp1.present & (1 << CISTPL_POWER_VNOM))
++ link->conf.Vpp1 = link->conf.Vpp2 = cf->vpp1.param[CISTPL_POWER_VNOM] / 10000;
++ if ((cf->io.nwin > 0) && (cf->io.win[0].len == 8) && (cf->io.win[0].base != 0)) {
++ link->conf.ConfigIndex = cf->index;
++ link->io.BasePort1 = cf->io.win[0].base;
++ link->io.IOAddrLines = (try == 0) ? 16 : cf->io.flags & CISTPL_IO_LINES_MASK;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ goto found_port;
++ }
++next_entry:
++ i = next_tuple(handle, &tuple, &parse);
++ }
++ }
++
++ /* Second pass: try to find an entry that isn't picky about
++ its base address, then try to grab any standard serial port
++ address, and finally try to get any free port. */
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if ((i == CS_SUCCESS) && (cf->io.nwin > 0)
++ && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) {
++ link->conf.ConfigIndex = cf->index;
++ for (j = 0; j < 5; j++) {
++ link->io.BasePort1 = base[j];
++ link->io.IOAddrLines = base[j] ? 16 : 3;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ goto found_port;
++ }
++ }
++ i = next_tuple(handle, &tuple, &parse);
++ }
++
++found_port:
++ if (i != CS_SUCCESS) {
++ printk(KERN_ERR "bt950_cs: No usable port range found. Giving up.\n");
++ cs_error(link->handle, RequestIO, i);
++ goto failed;
++ }
++
++ i = CardServices(RequestIRQ, link->handle, &link->irq);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIRQ, i);
++ link->irq.AssignedIRQ = 0;
++ }
++
++ i = CardServices(RequestConfiguration, link->handle, &link->conf);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestConfiguration, i);
++ goto failed;
++ }
++
++ MOD_INC_USE_COUNT;
++
++ if (bt950_open(info) != 0)
++ goto failed;
++
++ strcpy(info->node.dev_name, info->hdev.name);
++ link->dev = &info->node;
++ link->state &= ~DEV_CONFIG_PENDING;
++
++ return;
++
++cs_failed:
++ cs_error(link->handle, last_fn, last_ret);
++
++failed:
++ bt950_release((u_long)link);
++ link->state &= ~DEV_CONFIG_PENDING;
++}
++
++
++static void bt950_release(u_long arg)
++{
++ dev_link_t *link = (dev_link_t *) arg;
++ bt950_info_t *info = link->priv;
++
++ if (link->state & DEV_PRESENT)
++ bt950_close(info);
++
++ MOD_DEC_USE_COUNT;
++
++ link->dev = NULL;
++
++ CardServices(ReleaseConfiguration, link->handle);
++ CardServices(ReleaseIO, link->handle, &link->io);
++ CardServices(ReleaseIRQ, link->handle, &link->irq);
++
++ link->state &= ~DEV_CONFIG;
++}
++
++
++static int bt950_event(event_t event, int priority, event_callback_args_t *args)
++{
++ dev_link_t *link = args->client_data;
++ bt950_info_t *info = link->priv;
++
++ switch (event) {
++ case CS_EVENT_CARD_REMOVAL:
++ link->state &= ~DEV_PRESENT;
++ if (link->state & DEV_CONFIG) {
++ bt950_close(info);
++ link->state |= DEV_RELEASE_PENDING;
++ mod_timer(&link->release, jiffies + HZ / 20);
++ }
++ break;
++ case CS_EVENT_CARD_INSERTION:
++ link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
++ bt950_config(link);
++ break;
++ case CS_EVENT_PM_SUSPEND:
++ link->state |= DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_RESET_PHYSICAL:
++ if (link->state & DEV_CONFIG) {
++ bt950_stop_uart(info);
++ CardServices(ReleaseConfiguration, link->handle);
++ }
++ break;
++ case CS_EVENT_PM_RESUME:
++ link->state &= ~DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_CARD_RESET:
++ if (link->state & DEV_CONFIG) {
++ CardServices(RequestConfiguration, link->handle, &link->conf);
++ bt950_setup_uart(info);
++ }
++ break;
++ }
++
++ return 0;
++}
++
++
++
++/* ======================== Module initialization ======================== */
++
++
++int __init init_bt950_cs(void)
++{
++ servinfo_t serv;
++ int err;
++
++ CardServices(GetCardServicesInfo, &serv);
++ if (serv.Revision != CS_RELEASE_CODE) {
++ printk(KERN_NOTICE "bt950_cs: Card Services release does not match!\n");
++// return -1;
++ }
++
++ err = register_pccard_driver(&dev_info, &bt950_attach, &bt950_detach);
++
++ return err;
++}
++
++
++void __exit exit_bt950_cs(void)
++{
++ unregister_pccard_driver(&dev_info);
++
++ while (dev_list != NULL)
++ bt950_detach(dev_list);
++}
++
++
++module_init(init_bt950_cs);
++module_exit(exit_bt950_cs);
++
++EXPORT_NO_SYMBOLS;
+diff -Nur linux-orig/drivers/bluetooth/Config.in linux/drivers/bluetooth/Config.in
+--- linux-orig/drivers/bluetooth/Config.in 2004-02-16 08:45:33.000000000 +0300
++++ linux/drivers/bluetooth/Config.in 2004-02-16 08:50:36.000000000 +0300
+@@ -21,7 +21,7 @@
+
+ dep_tristate 'HCI DTL1 (PC Card) driver' CONFIG_BLUEZ_HCIDTL1 $CONFIG_PCMCIA $CONFIG_BLUEZ
+
+-dep_tristate 'HCI BT3C (PC Card) driver' CONFIG_BLUEZ_HCIBT3C $CONFIG_PCMCIA $CONFIG_BLUEZ
++# dep_tristate 'HCI BT3C (PC Card) driver' CONFIG_BLUEZ_HCIBT3C $CONFIG_PCMCIA $CONFIG_BLUEZ
+
+ dep_tristate 'HCI BlueCard (PC Card) driver' CONFIG_BLUEZ_HCIBLUECARD $CONFIG_PCMCIA $CONFIG_BLUEZ
+
+@@ -29,5 +29,7 @@
+
+ dep_tristate 'HCI VHCI (Virtual HCI device) driver' CONFIG_BLUEZ_HCIVHCI $CONFIG_BLUEZ
+
++dep_tristate 'HCI BT950 (BT950 device) driver' CONFIG_BLUEZ_BT950 $CONFIG_BLUEZ
++
+ endmenu
+
+diff -Nur linux-orig/drivers/bluetooth/Makefile linux/drivers/bluetooth/Makefile
+--- linux-orig/drivers/bluetooth/Makefile 2004-02-16 08:45:33.000000000 +0300
++++ linux/drivers/bluetooth/Makefile 2004-02-16 08:50:47.000000000 +0300
+@@ -17,10 +17,12 @@
+ obj-$(CONFIG_BLUEZ_HCIBFUSB) += bfusb.o
+
+ obj-$(CONFIG_BLUEZ_HCIDTL1) += dtl1_cs.o
+-obj-$(CONFIG_BLUEZ_HCIBT3C) += bt3c_cs.o
++# obj-$(CONFIG_BLUEZ_HCIBT3C) += bt3c_cs.o
+ obj-$(CONFIG_BLUEZ_HCIBLUECARD) += bluecard_cs.o
+ obj-$(CONFIG_BLUEZ_HCIBTUART) += btuart_cs.o
+
++obj-$(CONFIG_BLUEZ_BT950) += bt950_cs.o
++
+ include $(TOPDIR)/Rules.make
+
+ hci_uart.o: $(uart-y)
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/buffered-fbmem.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/buffered-fbmem.patch
new file mode 100644
index 0000000000..554f118936
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/buffered-fbmem.patch
@@ -0,0 +1,19 @@
+
+#
+# Made by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- linux/drivers/video/fbmem.c~buffered-fbmem 2003-09-16 00:48:18.000000000 +0200
++++ linux/drivers/video/fbmem.c 2003-09-19 00:38:00.000000000 +0200
+@@ -650,7 +650,11 @@
+ pgprot_val(vma->vm_page_prot) &= ~_CACHE_MASK;
+ pgprot_val(vma->vm_page_prot) |= _CACHE_UNCACHED;
+ #elif defined(__arm__)
++#ifdef CONFIG_PXA
++ vma->vm_page_prot = pgprot_noncached_buffered(vma->vm_page_prot);
++#else
+ vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
++#endif
+ #ifdef CONFIG_POODLE_CONSISTENT_ALLOC
+ vma->vm_page_prot = __pgprot(pgprot_val(vma->vm_page_prot) | L_PTE_CACHEABLE);
+ #endif
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/compile.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/compile.patch
new file mode 100644
index 0000000000..1a19b85daa
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/compile.patch
@@ -0,0 +1,14 @@
+--- linux/include/linux/jffs2_fs_i.h.old 2003-02-01 00:24:48.000000000 -0600
++++ linux/include/linux/jffs2_fs_i.h 2003-02-01 00:25:14.000000000 -0600
+@@ -48,9 +48,11 @@
+ uint32_t nr_frags;
+ #endif
+
++#ifdef KERNEL_VERSION
+ #if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,2)
+ struct inode vfs_inode;
+ #endif
++#endif
+ };
+
+ #endif /* _JFFS2_FS_I */
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/corgi-default-brightness.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/corgi-default-brightness.patch
new file mode 100644
index 0000000000..10d0f80b7f
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/corgi-default-brightness.patch
@@ -0,0 +1,16 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- linux/drivers/video/corgi_backlight.c~reduce-default-brightness-on-corgi
++++ linux/drivers/video/corgi_backlight.c
+@@ -65,7 +65,7 @@
+ static int is_corgibl_pm = 0;
+
+ #define CORGI_LIGHT_SETTING 7 // range setting : 0(OFF) dim 1 2 3 4 5(MAX)
+-#define CORGI_LIGHT_DEFAULT 6
++#define CORGI_LIGHT_DEFAULT 3
+ static int is_corgibl_blank = 0;
+ int counter_step_contrast = CORGI_LIGHT_DEFAULT;
+ static corgibl_limit = CORGI_LIGHT_SETTING - 1;
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/corgi-fbcon-logo.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/corgi-fbcon-logo.patch
new file mode 100644
index 0000000000..4d3b42445b
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/corgi-fbcon-logo.patch
@@ -0,0 +1,281 @@
+--- linux/drivers/video/w100fb.c 2004-11-04 12:44:29.000000000 -0600
++++ linux/drivers/video/w100fb.c~corgi.patch 2004-11-04 12:50:27.000000000 -0600
+@@ -982,6 +982,17 @@
+ #endif
+ #endif
+
++#ifdef CONFIG_ARCH_SHARP_SL_E // English message
++#include "corgiLogoMsg.c"
++#if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++static int logo_msg_xoff __initdata = 400;
++static int logo_msg_yoff __initdata = 100;
++#else
++static int logo_msg_xoff __initdata = 120;
++static int logo_msg_yoff __initdata = 500;
++#endif
++#endif
++
+ #endif // CONFIG_ARCH_PXA_SHEPHERD
+
+ #endif
+--- /dev/null 2004-06-13 02:32:19.000000000 +0100
++++ linux/drivers/video/corgiLogoMsg.c 2004-11-12 19:57:23.000000000 +0000
+@@ -0,0 +1,258 @@
++/* Logo Screen 16bits RGB(565) data*/
++#ifndef __initdata
++#define __initdata
++#endif
++
++static int logo_msg_width __initdata = 30;
++static int logo_msg_height __initdata = 250;
++static unsigned short logo_msg_data[] __initdata ={
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0xad55,0x7bef,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0xc638,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x738e,0x0020,0x0000,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0x0020,0x528a,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x18c3,0x738e,0x9cf3,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x52aa,0x2104,0x0000,0x2104,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffbf,0x1082,0x18e3,0xef3d,0xffff,0xffff,0xffff,0xffff,0xe73c,0xbdf7,0xdebb,0xffdf,0xffff,0xffff,0xffdf,0x6b6d,0x0000,0x9cf3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xdebd,0xad17,0x0000,0x5a8c,0xef3e,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x7bb1,0xc5da,0xd67c,0xffbf,0xffff,0xef7d,0x0000,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xb558,0x0000,0x6b4e,0xf7bf,0xffff,0xffff,0xffff,0xffff,0x9492,0x0000,0x62ec,0xce1b,0xc5ba,0xce1b,0xffff,0xf7be,0x0000,0x630c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xc5fb,0xce1b,0xffff,0x18e3,0x2124,0xf79e,0xffff,0xffdf,0xf77e,0xef7d,0x2945,0x0000,0x10a2,0xe71c,0xdebd,0xc5ba,0xef1e,0x94b2,0x0000,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffbf,0xc5ba,0xdebd,0xffff,0x8c71,0x0000,0x2945,0x8430,0x9493,0x6b0e,0x2125,0x0000,0x94b2,0x0020,0x0841,0x526a,0x4209,0x3166,0x0000,0x2104,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffbf,0xc5ba,0xdedd,0xffff,0xffff,0x8430,0x0020,0x0000,0x0000,0x0000,0x0000,0x8410,0xffff,0xb596,0x18e3,0x0000,0x0000,0x0000,0x3186,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xcdfb,0xce1b,0xffff,0xffff,0xffff,0xe71c,0x9cd3,0x630d,0x6b4f,0xa4f6,0xffbf,0xffff,0xffff,0xffff,0xbdd8,0x9474,0xc5f9,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe6fd,0xc5ba,0xce1b,0xe6fd,0xef3e,0xe6fd,0xce1b,0xc5ba,0xe71d,0xc5da,0xc5db,0xd67c,0xde9c,0xd63c,0xc5ba,0xce1b,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe6fd,0xc5da,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xe6dd,0xffff,0xef5e,0xcdfb,0xc5ba,0xc5ba,0xc5ba,0xce3b,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffbf,0xef1e,0xe6dd,0xe71d,0xf79f,0xffff,0xffff,0xffff,0xffff,0xf79f,0xf77e,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x2124,0x2104,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c71,0x0000,0x4a69,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0x6b6d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xf79f,0xffff,0xffff,0x4a69,0x0000,0x738e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x52aa,0x0000,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xce1b,0xce1b,0xffff,0x4208,0x632c,0x2945,0x0000,0x630c,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0x1082,0x0841,0xc618,0xffff,0xffff,0xffff,0xe6fd,0xc5ba,0xd67c,0x2104,0x5aeb,0xe73c,0x2965,0x0000,0x39c7,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf7bf,0xdebd,0xffff,0xffff,0xc618,0x0861,0x0861,0x94b2,0xffdf,0xffff,0xffff,0xd67c,0xc5ba,0x18e3,0x5aeb,0xffff,0xf79e,0x5aeb,0x0000,0x0861,0x8c71,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xd67c,0xc5ba,0xe71d,0xffff,0xffff,0xc638,0x18e3,0x0000,0x18c3,0x6b6d,0x9494,0xc5fa,0xce1b,0x18c3,0x526a,0xffff,0xffff,0xffff,0xad55,0x10a2,0x0000,0x2124,0xef7d,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffbf,0xc5fb,0xc5db,0xf77e,0xffff,0xffff,0xf79e,0x8410,0x18e3,0x0000,0x0000,0x0000,0x0861,0x0000,0x4209,0xd63c,0xffbf,0xffff,0xffff,0xef7d,0x738e,0x39c7,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf77e,0xc5db,0xc5db,0xe71d,0xffff,0xffff,0xffff,0xffff,0xc618,0x6b0e,0x4209,0x2945,0x0000,0x4a6a,0xc5ba,0xc5db,0xe6fd,0xffff,0xffff,0xffff,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0x9cb5,0x8c13,0xcdfb,0xdebd,0xef5e,0xffdf,0xffff,0xce1b,0xde9c,0xffff,0x2104,0x5aeb,0xef3e,0xc5fb,0xc5ba,0xce1b,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x528a,0xcdfb,0xc5ba,0xc5ba,0xc5ba,0xc5db,0xc5da,0xde9c,0xffff,0x2104,0x5aeb,0xffff,0xffdf,0xdebd,0xd65c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x5aeb,0xffff,0xf77e,0xe6fd,0xd67c,0xce1b,0xc5ba,0xde9c,0xffff,0x2104,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xf7be,0x9492,0x630c,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf79e,0xef5e,0xffff,0x2104,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0x2104,0x5aeb,0xffff,0xffff,0xffff,0xbdf7,0x2124,0x0000,0x0841,0xef7d,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0x2104,0x528a,0xdefb,0xdefb,0xdefb,0xffdf,0xffff,0xce1b,0xde9c,0xffff,0x2104,0x5aeb,0xffff,0xffff,0x8410,0x0020,0x0020,0x6b4d,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0x4a49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5aeb,0xffdf,0x5acb,0x0000,0x18e3,0xce59,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0xdefb,0x5aeb,0x4228,0x4228,0x4228,0x4228,0x4228,0x31a7,0x20e4,0x2104,0x2104,0x73ae,0x4a6a,0x0000,0x2946,0xbd79,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xd67c,0xf7bf,0xf7bf,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0xffff,0x6b4e,0x0000,0x3187,0xd65b,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xd65c,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xde9c,0xffff,0x9473,0x0000,0x2105,0xe73d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf7bf,0xde9c,0xd65c,0xd65c,0xd65c,0xd65c,0xd65c,0xd65c,0xce1b,0xce1b,0xce1b,0xdebd,0xd67c,0x3166,0x0861,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xce1a,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0xd69a,0xffff,0xffff,0xffff,0xef5e,0xc5ba,0xce3b,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x0000,0x4228,0xad55,0xffdf,0xd65c,0xc5fb,0xffbf,0xffff,0xffff,0x2104,0x5aeb,0xffff,0xffff,0xce59,0x2945,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0x6b6d,0x2104,0x0000,0x10a2,0x630c,0xad55,0xf79e,0xffff,0xffff,0x2104,0x5aeb,0xffff,0xffff,0xce79,0x0000,0xb5b6,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xdebb,0xdefb,0xdefb,0xdefb,0xdefb,0xb5b6,0x6b6d,0x31a6,0x0000,0x0841,0x39c7,0x6b6d,0x1082,0x528a,0xdefb,0xdefb,0xce59,0x0000,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b6d,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0x9493,0x83d1,0x7bb1,0x7bb1,0x8c32,0x94b3,0xa514,0x8430,0x2945,0x0000,0x18e3,0x9492,0x10a2,0x39c7,0x7bb1,0x94b3,0xa514,0x2945,0x4208,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffbf,0xf7bf,0xf7bf,0xf7bf,0xf7bf,0xef5e,0xdebd,0xbdb9,0x7b90,0x3187,0x0000,0x10a2,0x734f,0xce3b,0xf7bf,0x2104,0x5acb,0xc5ba,0xe71d,0xffff,0x7bcf,0x0841,0xf79e,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0x62ee,0x0000,0x0000,0x20e4,0x7370,0xbd9a,0xc5ba,0xc5ba,0xc5ba,0x18c3,0x4209,0xc5ba,0xdebd,0xffff,0xbdd7,0x3186,0xe73c,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xef5e,0xef3e,0xef3e,0x8411,0x18e4,0xef3e,0xb577,0x526a,0x9c94,0xc5ba,0xce1b,0xe71d,0x8c33,0x9494,0xef3e,0xce3a,0xb5b7,0xb558,0xb578,0xdefb,0xdedb,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0xef1e,0xd65c,0xc5ba,0x0000,0x738e,0xffff,0xffff,0x31a7,0x39c7,0xffff,0xdefb,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x736e,0x0000,0xc5ba,0xce1b,0xe71d,0x0000,0x7bef,0xffff,0xffff,0x31a7,0x39c7,0xffff,0xdefb,0x0000,0x62ec,0x83f1,0x9cf3,0x39c7,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe71d,0xce1b,0xffff,0x7baf,0x0000,0xf77e,0xffff,0xffff,0x0000,0x73af,0xef5e,0xffff,0x4208,0x4208,0xf7bf,0xd6bb,0x0000,0x9cd3,0xf7bf,0xffff,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0x7bef,0x0000,0xc5ba,0xe6dd,0xffff,0x0000,0x6b2e,0xd65c,0xffff,0x4208,0x3187,0xc5ba,0xacf7,0x0000,0x7bb1,0xce1b,0xffff,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0x7bef,0x0000,0x62cd,0x736e,0x7bef,0x0000,0x3187,0x6b2e,0x7bef,0x2104,0x3187,0xdebc,0xce3a,0x0000,0x83f1,0xce1b,0xffff,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3187,0xef3e,0xdefb,0x0000,0x8c32,0xce1b,0xffff,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0x7bef,0x0000,0xc5ba,0xe6dd,0xffff,0x0000,0x6b2e,0xd65c,0xffff,0x4208,0x3187,0xef3e,0xdefb,0x0000,0x8c32,0xce1b,0xffff,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xe6dd,0x736e,0x0000,0xc5ba,0xd65c,0xe6dd,0x0000,0x630d,0xd65c,0xffff,0x4208,0x3187,0xef3e,0xdefb,0x0000,0x8c32,0xce1b,0xffff,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xc5ba,0x62cd,0x0000,0xc5ba,0xc5ba,0xc5ba,0x0000,0x62cd,0xd65c,0xffff,0x4208,0x3187,0xef3e,0xdefb,0x0000,0x738f,0xb537,0xdefb,0x528a,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0x7bef,0x0000,0xc5ba,0xe6dd,0xffff,0x0000,0x6b2e,0xd65c,0xffff,0x4208,0x3187,0xef3e,0xdefb,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0x7bef,0x0000,0xc5ba,0xe6dd,0xffff,0xc638,0xbd98,0xd65c,0xffff,0x736e,0x5a8c,0xef3e,0xf79e,0xa514,0x8c32,0x83d1,0xa514,0xa514,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0xe71c,0xc638,0xc5ba,0xe6dd,0xffff,0xffff,0xd65c,0xd65c,0xffff,0xf7bf,0xc5ba,0xe6fd,0xf7bf,0xf7bf,0xd67c,0xce1b,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0xffff,0xffff,0xc5ba,0xe6dd,0xffff,0xffff,0xd65c,0xd65c,0xffff,0xf7bf,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xce1b,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0xdefb,0xdedb,0xf77e,0xffbf,0xffff,0xffff,0xdebd,0xdebd,0xffff,0xffff,0xef3e,0xef3e,0xef3e,0xef3e,0xef3e,0xef5e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffbf,0xf77e,0xffff,0x5aeb,0x0000,0x39e7,0x8c71,0xbdf7,0xdefb,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cd3,0x2965,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf7bf,0xf7bf,0xffff,0xffff,0xffff,0xe73c,0xb5b6,0x9492,0x7bef,0x630c,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x528a,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xd65c,0xbdd8,0x9493,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc638,0xad75,0xffff,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe71d,0xce3b,0xc5ba,0x2945,0x1082,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0x4209,0x18c3,0xef3e,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x736e,0x0000,0xb577,0xde9c,0xde9c,0xd67c,0x9473,0x18e3,0xbdd9,0xde9c,0xde9c,0xde9c,0x4a4a,0x18c3,0xef3e,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf79f,0xef1e,0xffff,0xc618,0x0000,0x8430,0xffff,0xf7be,0x2965,0x528a,0x0000,0xdefb,0xa514,0x73af,0x7bef,0x2965,0x0861,0x738f,0xad75,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xd63c,0xcdfb,0xffff,0xffff,0x18e3,0x39e7,0xffff,0x7bcf,0x0000,0x5aeb,0x0000,0xdefb,0x4a6a,0x0000,0x0000,0x0000,0x0000,0x0000,0x8410,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xdedd,0xc5ba,0xf79e,0xffff,0x73ae,0x0000,0xbdb7,0x0020,0x4a69,0xa514,0x0000,0xdefb,0x4a6a,0x10a3,0xdefb,0x4a69,0x10a3,0xce3a,0xd69a,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf77e,0xc5ba,0xe6fd,0xffff,0xdefb,0x0000,0x10a2,0x0000,0xce59,0x9493,0x0000,0xc5f9,0x4a2a,0x18c3,0xe6dd,0x52ab,0x18c3,0xef3e,0xdefb,0x0000,0x39c7,0x5aeb,0xdedb,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xcdfb,0xd65c,0xffff,0xe6dd,0x39c8,0x0000,0x3187,0xf7bf,0x8c32,0x0000,0xacf7,0x4209,0x18c3,0xc5ba,0x528a,0x18c3,0xef3e,0xdefb,0x0000,0x0000,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdedd,0xc5ba,0xf79e,0xc5db,0x630d,0x0000,0x62ed,0xf7bf,0x8c32,0x0000,0xd6bb,0x4a4a,0x18c3,0xf7bf,0x5acb,0x18c3,0xef3e,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf7bf,0xc5ba,0xcdfb,0xbd9a,0x1082,0x0000,0x1082,0xef7e,0x8c32,0x0000,0xdefb,0x4a6a,0x18c3,0xffff,0x5acb,0x18c3,0xd65c,0xbdb8,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xd67c,0xc5ba,0x8411,0x0000,0x6b4d,0x0000,0x8410,0x8c32,0x0000,0xdefb,0x4a6a,0x18c3,0xffff,0x5acb,0x18c3,0xc5ba,0xacf7,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0x39a7,0x1082,0xe6fd,0x4a2a,0x0861,0x736e,0x0000,0xdefb,0x4a6a,0x0020,0x4228,0x18c3,0x0020,0x39e8,0x94b2,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xc5fb,0xb558,0x0000,0x5acb,0xef3e,0xb559,0x2104,0x0020,0x0000,0xdefb,0x62ed,0x18c3,0x2104,0x0861,0x0000,0x18e4,0x8c71,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0x9452,0x0000,0x9493,0xef3e,0xc5ba,0xce59,0x0841,0x0000,0xdefb,0xde9c,0xce1b,0xffff,0x5acb,0x18c3,0xef3e,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xc5fb,0x5aeb,0x0000,0xb558,0xe6fd,0xc5ba,0xf7bf,0xa515,0x62ed,0xc5fa,0xcdfb,0xc5db,0xd65c,0x528a,0x18c3,0xef3e,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffdf,0xc5da,0xde9c,0x5aeb,0x2124,0xce1b,0xc5db,0xc5ba,0xf7bf,0xdebd,0xce1b,0xce1b,0xc5db,0xc5da,0xce1b,0x7bcf,0x4209,0xef3e,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xef3e,0xc5ba,0xef3e,0xffff,0xef7d,0xf79f,0xc5db,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xde9c,0xce1b,0xffff,0xf7bf,0xc5ba,0xef3e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffdf,0xffff,0xffff,0xffff,0xf77e,0xe6dd,0xffdf,0xffff,0xffff,0xffff,0xde9c,0xce1b,0xffff,0xf7bf,0xc5ba,0xef3e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xde9c,0xce1b,0xffff,0xffff,0xffff,0xffff,0xef5d,0x9cd3,0x7bef,0xa534,0xef7d,0xffff,0xe6fd,0xde9c,0xffff,0xf7bf,0xc5ba,0xef3e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffdf,0xffff,0xffff,0xffff,0xad55,0x0861,0x0000,0x0000,0x0000,0x1082,0x9cf3,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x2104,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x0841,0x1082,0xa534,0xdefb,0xad75,0x2965,0x0000,0x94b2,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x6b4e,0x0000,0xa535,0xffdf,0xffff,0xffff,0xf79e,0x2965,0x0841,0xdefb,0xffff,0xffff,0xffff,0x7bef,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5db,0x4209,0x0000,0xbd9a,0xc5fb,0xef1e,0xffff,0xffff,0xd69a,0x0000,0x630c,0xe71d,0xce1b,0xffbf,0x7bef,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf7bf,0xc5db,0xc5fb,0x83f0,0x0000,0x4a6a,0x8c32,0x9474,0xb576,0xc638,0xc638,0x3186,0x0861,0xad56,0x9474,0xbdf8,0x630c,0x0000,0xad55,0xc638,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdedd,0xc5ba,0xef5e,0xf79e,0x4a49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffff,0xffff,0xffff,0xd6ba,0xad75,0x9cd3,0x7bb1,0x8c32,0xa514,0x8430,0x0000,0x528a,0x7bb1,0x9cf3,0x528a,0x0000,0x8c71,0xa514,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe6fd,0xc5ba,0xd67c,0xef5e,0xef3d,0xf77e,0xf77e,0xf77e,0xce3b,0xc5db,0xf77e,0xef5e,0x0000,0x5aac,0xc5ba,0xef3e,0x7baf,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xd65c,0xc5ba,0x4a2a,0x20e4,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0x18c3,0x3187,0xc5ba,0xc5ba,0x62cd,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0x41e8,0x0841,0xef3e,0xef3e,0xef3e,0xe6fd,0xc5ba,0xde9c,0xef3e,0x18e4,0x39a7,0xc5ba,0xe6fd,0x738f,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5acb,0x0000,0xef5d,0xffff,0xffff,0xffff,0xc5ba,0xdebc,0xffff,0x1082,0x4229,0xc5ba,0xf7bf,0x7bef,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xce1b,0xffff,0x8c71,0x0000,0xb596,0xffff,0xffff,0xffff,0xce1b,0xd65c,0xdefb,0x0000,0x630d,0xc5ba,0xf7bf,0xe71c,0xc638,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xc5db,0xffff,0xd69a,0x0000,0x5acb,0xffff,0xffff,0xffff,0xce1b,0xd65c,0x8410,0x0000,0xa515,0xc5ba,0xf7bf,0xffff,0x94b2,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffdf,0xffff,0x2965,0x0020,0xc618,0xffff,0xffff,0xc5fb,0xad57,0x0861,0x2124,0xdebc,0xc5ba,0xf7bf,0x8c71,0x0000,0x39e7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe6fd,0xc5ba,0xef5e,0xffff,0xce59,0x0020,0x0861,0x73ae,0x9cf3,0x526b,0x0020,0x0861,0xc638,0xffbf,0xf77e,0x7bef,0x0000,0x2124,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf79f,0xc5ba,0xde9c,0xffff,0xffff,0xb5b6,0x2104,0x0000,0x0000,0x0000,0x3186,0xd69a,0xffff,0xffff,0xce5a,0x18a3,0x39e7,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xce3b,0xc5da,0xf77e,0xffff,0xffff,0xffff,0xce39,0x9474,0xb578,0xffff,0xffff,0xffff,0xe6fd,0xc5ba,0xbd98,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xc5da,0xc5db,0xdedd,0xef3e,0xdebc,0xc5db,0xc5db,0xf77e,0xffff,0xffff,0xe6dd,0xc5ba,0xce1b,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5e,0xce1b,0xc5ba,0xc5ba,0xc5ba,0xd63b,0xf79f,0xd6ba,0xffff,0xffdf,0xcdfb,0xd65c,0xffdf,0xef5d,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79f,0xf77e,0xffbf,0xffff,0x9cd3,0x0020,0xad55,0xffff,0xffbf,0xffff,0xffdf,0x39e7,0x4a69,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc618,0x18c3,0x0000,0x8430,0xffff,0xffff,0xffdf,0x52aa,0x0000,0x3186,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x73ae,0x5aeb,0x5aeb,0x5aeb,0x5acb,0x5aeb,0x5aeb,0x4228,0x0000,0x0000,0x4228,0xe71c,0xffff,0xffdf,0x7bef,0x0000,0x1082,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x7bef,0xef7d,0xffff,0xbdf7,0x2104,0x0000,0x2965,0xd69a,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0xcdfb,0xc5ba,0xe6fd,0xffff,0xffff,0xffff,0xad57,0x2925,0x0000,0x1082,0xd69a,0xffff,0xf7be,0x8410,0x0841,0xdedb,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xdebd,0xde9c,0xde9c,0xde9c,0xde9c,0xde9c,0xde9c,0xd65c,0xc5ba,0xc5ba,0xd65c,0xffbf,0xffff,0xffff,0xe6dd,0x83d1,0x39a7,0xe6fd,0xffff,0xffff,0xffff,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0x3187,0x7bb1,0xe6dd,0xffdf,0x5aeb,0x2104,0xce1b,0xc5ba,0xa516,0x7bcf,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x0000,0x6b0d,0xc5ba,0xc5fb,0x5acb,0x2104,0xffff,0xe6dd,0x7bb1,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa534,0x4228,0xffdf,0x0000,0x7bef,0xef3e,0xd65c,0x5aeb,0x2104,0xffff,0xffff,0x9cf4,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0x5aeb,0x0000,0x10a3,0xd6ba,0x0000,0x6b4e,0xce1b,0xffff,0x5aeb,0x2104,0xe6dd,0xffdf,0xa514,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4208,0x0000,0x39a8,0xc61a,0xffff,0x0000,0x6b4e,0xce1b,0xffff,0x5aeb,0x18e4,0xc5ba,0xf7bf,0xa514,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef3e,0xb577,0xa514,0xc5ba,0xe6dd,0xffff,0x0000,0x6b4e,0xce1b,0xffff,0x5aeb,0x10a3,0x9474,0xbdf8,0x7bef,0x0000,0xad55,0xc638,0xef7d,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xd67c,0xacf7,0xcdfb,0xf79f,0xc5ba,0xe6dd,0xffff,0x0000,0x6b4e,0xce1b,0xffff,0x5aeb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xd65c,0x20e4,0x4a4a,0xffbf,0xffff,0xc5ba,0xe6dd,0xffff,0x0000,0x6b4e,0xce1b,0xffff,0x5aeb,0x1082,0x7bb1,0x9cf3,0x632c,0x0000,0x8c71,0xa514,0xe73c,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0x18e4,0x5aeb,0xffff,0xffff,0xc5ba,0xe6dd,0xffff,0x0000,0x6b4e,0xcdfb,0xf77e,0x5aab,0x18e3,0xc5ba,0xef3e,0x9cb3,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf7bf,0xffff,0x2104,0x4228,0xc638,0xc638,0x9474,0xad56,0xc638,0x0000,0x528b,0x9474,0x9474,0x31a7,0x18c3,0xc5ba,0xc5ba,0x7bb1,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0x4a69,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18e3,0xc5ba,0xe6fd,0x9493,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0xf79e,0xa534,0xa514,0xa514,0x7bb1,0x8c52,0xa514,0x0000,0x4209,0x83d1,0xa514,0x39c7,0x18e4,0xc5ba,0xf7bf,0xa514,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xd65c,0xf77e,0xf77e,0xf77e,0xf77e,0xf77e,0xc5ba,0xde9c,0xf77e,0x0000,0x6b2e,0xce1b,0xffff,0x5aeb,0x18e4,0xc5ba,0xf7bf,0xb5b6,0x4228,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xd67c,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xce1b,0xffff,0xdedb,0xb5b7,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef3e,0xef3e,0xef3e,0xef3e,0xef3e,0xef3e,0xc5ba,0xd67c,0xef3e,0xef3e,0xd65c,0xce1b,0xffff,0xffff,0xef3e,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc5ba,0xe6dd,0xffff,0xffff,0xde9c,0xce1b,0xffff,0xffff,0xef5e,0xa4d5,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc638,0xad75,0xef5d,0xf79e,0xffff,0xffff,0xffff,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x632c,0x0000,0x0841,0x4a69,0x9cf3,0xe73c,0xffff,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x632c,0x0000,0x18c3,0x1082,0x0000,0x0000,0x3186,0x5aeb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdf7,0x7bef,0xd6bb,0xef5e,0xffff,0xf79e,0x3186,0x0020,0xce79,0xa4f4,0x41e9,0x0841,0x0000,0x0000,0x0861,0x528a,0x9492,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x6b6d,0x0000,0xbdb8,0xc5ba,0xc5db,0xd67c,0xce5a,0x0861,0x4208,0xf77e,0xc5ba,0xe6fd,0x94b2,0x0000,0x18e3,0x0000,0x0000,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4a49,0x0861,0xdebc,0xc5ba,0xcdfb,0xc5fb,0xc5ba,0x62ed,0x0000,0xa4f5,0xc5ba,0xef3e,0xc638,0x0000,0xa514,0xef5d,0xa534,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf77e,0xe6dd,0xffbf,0x2965,0x31a6,0xffff,0xce3b,0xc5da,0xf79e,0xef3e,0xce1a,0x0020,0x4209,0xc5ba,0xc5db,0xa4f5,0x0000,0x9cf4,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdebd,0xc5ba,0xf7bf,0x2104,0x4228,0xffff,0xffbf,0xc5db,0xd65c,0xffff,0xffff,0x4229,0x10a2,0xc5ba,0xcdfb,0x9474,0x0000,0x9cf3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xc5db,0xffff,0x2104,0x4228,0xffff,0xffff,0xe6dd,0xc5ba,0xf77e,0xffff,0x738e,0x0000,0xb558,0xef3e,0xc5f8,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce3b,0xce3b,0xffff,0x4208,0x18e3,0xffff,0xffff,0xffdf,0xc5db,0xde9c,0xffff,0x7bef,0x0000,0xacf7,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xd65c,0xffff,0x632c,0x0000,0xef5d,0xffff,0xffff,0xd65c,0xcdfb,0xffff,0x6b4d,0x0000,0xb559,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xd65c,0xffff,0xad55,0x0000,0x9cd3,0xffff,0xffff,0xdebd,0xc5ba,0xffdf,0x2124,0x2104,0xc5ba,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xcdfb,0xffff,0xf7be,0x10a2,0x2104,0xf79e,0xffff,0xe6dd,0xc5ba,0xa4f4,0x0000,0x6b4d,0xc5ba,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdebc,0xc5ba,0xffdf,0xffff,0x9492,0x0000,0x4228,0xdedb,0xde9c,0x83d1,0x0861,0x10a2,0xdedc,0xc5ba,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0xe71d,0xffff,0xffff,0x5aeb,0x0000,0x0000,0x0000,0x0000,0x1082,0xc618,0xf77e,0xc5ba,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xc5fb,0xce1b,0xffff,0xffff,0xffff,0xbdd7,0x630d,0x4209,0x7bd0,0xef5d,0xffff,0xf77e,0xc5ba,0xef3e,0xe71c,0x7bef,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0xd65c,0xf7bf,0xffff,0xef3e,0xc5db,0xc5fb,0xffdf,0xffff,0xffff,0xf77e,0xc5ba,0xef3e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5fb,0xf77e,0xffff,0xe71c,0x8430,0xbdd8,0xc5ba,0xef3e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7e,0xdebd,0xde9c,0xe71d,0xffdf,0xffff,0xe73c,0x18c3,0x0000,0x0020,0xb557,0xf79f,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x6b4d,0x0000,0x73ae,0x0020,0x3186,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffbf,0xc619,0x0020,0x528a,0xffff,0x7bcf,0x0000,0x94b2,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xcdfb,0x41e9,0x0000,0xc639,0xffff,0xf7be,0x2104,0x1082,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdebc,0x9474,0x0000,0x39c8,0xce3b,0xffff,0xffff,0xb596,0x0000,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0xc5ba,0x2104,0x0020,0xc5f9,0xc5ba,0xe71d,0xffff,0xffff,0x52aa,0x0000,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd67c,0x62cd,0x0000,0x6b6d,0xffff,0xce1b,0xc5fb,0xffbf,0xffff,0xe71c,0x1082,0x10a2,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0x9cb5,0x0000,0x18c3,0xef7d,0xffff,0xef5e,0xc5ba,0xd67c,0xffff,0xffff,0x94b2,0x0000,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc5fa,0x2105,0x0000,0xad55,0xffff,0xffff,0xffff,0xd67c,0xc5ba,0xef3e,0xffff,0xffff,0x39c7,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe6dd,0x524b,0x0000,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffbf,0xc5fb,0xc5fb,0xffdf,0xffff,0xdedb,0x0841,0x0861,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79f,0x7bb1,0x0000,0x18c3,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0xd67c,0xffff,0xffff,0x9492,0x0000,0x4208,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce3b,0x5acd,0x0020,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd65c,0xc5ba,0xef3e,0xffff,0xffff,0x5aeb,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xdebc,0xc5ba,0xd67c,0xc618,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0xc5db,0xc5db,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0xcdfb,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0xd65c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe6dd,0xc5da,0xef7e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xde9c,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce79,0x528a,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x73ae,0x0000,0x0000,0x39e7,0xa534,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce59,0x5aeb,0x0861,0x0000,0x0861,0x52aa,0xa514,0xe73c,0xffff,0xffff,0xffff,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf79e,0xd67c,0xf79f,0xffff,0xffff,0xffff,0xf79e,0xa534,0x52aa,0x0861,0x0000,0x0000,0x2104,0x39c8,0x7bd0,0x8410,0x0000,0x8c71,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdebd,0xc5ba,0xc5ba,0xd65c,0xef3e,0xffff,0xffff,0xffff,0xffff,0xf7be,0xbdd7,0x7bcf,0x39c7,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x18e3,0xb596,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xde9c,0xc5db,0xc5ba,0xc5db,0xd67c,0xef3e,0xffdf,0xffff,0xffff,0xffff,0xf77e,0xc5ba,0xbdf8,0x8c51,0x0000,0x4208,0x4a69,0x2945,0xb596,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cd4,0x1082,0x0841,0x528c,0xbd79,0xce1b,0xd67c,0xe6fd,0xe6dd,0xc5ba,0xe6fd,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0x0841,0x0020,0x10a2,0x1082,0xd65b,0xd65c,0xc5db,0x9474,0x62cd,0xb559,0xc5ba,0x9474,0x0000,0x94b3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x0000,0x9cf3,0xffdf,0xbdf7,0xffff,0xffff,0xffff,0x7bf0,0x0000,0x9454,0xd65c,0xa4f5,0x0000,0x94b3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5fb,0x4a29,0x0000,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xad75,0x0000,0x7bb1,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffbf,0xc5db,0xc5da,0x3187,0x10a3,0xffdf,0xffff,0xffff,0xf77e,0xe6dd,0xffdf,0xce79,0x0000,0x62ed,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0xef1e,0x4228,0x2104,0xffff,0xffff,0xffff,0xe6fd,0xc5ba,0xf77e,0xdefb,0x0000,0x62cd,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffff,0x4228,0x18e3,0xffff,0xffff,0xffff,0xef5e,0xc5ba,0xef3e,0xdefb,0x0000,0x62cd,0xef3e,0xe71c,0x7bef,0xd69a,0xf7be,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xcdfb,0xffff,0x5acb,0x0000,0xffdf,0xffff,0xffff,0xf79e,0xc5ba,0xe6fd,0xc638,0x0000,0x7370,0xef3e,0xffff,0xe71c,0x630c,0x10a2,0x4a69,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xce1b,0xffff,0x738e,0x0000,0xd69a,0xffff,0xffff,0xf7bf,0xc5ba,0xe6dd,0xad55,0x0000,0x8c12,0xef3e,0xffff,0xf79e,0x1082,0x528a,0xb5b6,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xcdfb,0xffff,0xa534,0x0000,0x94b2,0xffff,0xffff,0xf7bf,0xc5ba,0xe6dd,0x9cf3,0x2104,0xbdd9,0xf79f,0xffff,0xffdf,0xf7be,0xffff,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffff,0xdedb,0x5aeb,0xbdf7,0xffff,0xffff,0xf77e,0xc5ba,0xe71d,0xffff,0xffff,0xffbf,0xde9c,0xc5fb,0xd67c,0xbdf7,0x4a69,0x0020,0xbdf7,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdebd,0xc5ba,0xf79f,0xffff,0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0xef5e,0xffff,0xffff,0xffff,0xc5fb,0xd67c,0xef5e,0xa534,0x18e3,0x73ae,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0xe71d,0xffff,0xffff,0xffff,0xffff,0xffff,0xef1e,0xce1b,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffbf,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf7bf,0xde9c,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0xd67c,0xc5da,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xa534,0x528a,0x4228,0x738e,0xe71c,0xffff,0xffff,0xffff,0xef3e,0xcdfb,0x0000,0x5acb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x52aa,0x0000,0x0861,0x18c3,0x0000,0x18c3,0xdedb,0xffff,0xffff,0xffff,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x0000,0x632c,0xf7be,0xffff,0xb5b6,0x0841,0x3186,0xffff,0xffff,0xffff,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0x10a2,0x20e4,0xdebc,0xffbf,0xffff,0xffff,0x73ae,0x0000,0xbdd7,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd67c,0x9474,0x0000,0x7370,0xc5ba,0xcdfb,0xf7bf,0xffff,0xd6ba,0x0000,0x6b6d,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0x7bd0,0x0000,0xd69a,0xef5e,0xc5db,0xce3b,0xffff,0xffff,0x1082,0x4a49,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xcdfb,0xce1b,0x6b6d,0x0000,0xf79e,0xffff,0xdedd,0xc5ba,0xef7e,0xffff,0x2104,0x4228,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf77e,0xc5ba,0xe71d,0x5aeb,0x0000,0xffff,0xffff,0xf7bf,0xc5ba,0xdebd,0xffff,0x10a2,0x4a69,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0xf79f,0x5aeb,0x0000,0xffff,0xffff,0xffff,0xc5fb,0xd65c,0xe71c,0x0000,0x6b6d,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdebd,0xc5ba,0xffff,0x6b6d,0x0000,0xe73c,0xffff,0xffff,0xce1b,0xd65c,0x9cd3,0x0000,0xb596,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xdedb,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffff,0x9492,0x0000,0xbdf7,0xffff,0xffff,0xc5fb,0xd67c,0x2965,0x1082,0xf7be,0xc5ba,0xde9c,0xd69a,0x0000,0x0841,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffff,0xbdf7,0x0000,0x8430,0xffff,0xffbf,0xc5ba,0x8c52,0x0000,0x8410,0xf7be,0x7370,0x2945,0x0000,0x0000,0x18c3,0x6b6d,0xb596,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdebd,0xc5ba,0xffdf,0xf7be,0x4228,0x6b4d,0xffff,0xe71d,0xbd79,0x18c3,0x1082,0x6b6d,0x10a2,0x0000,0x0861,0x632d,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0xf77e,0xffff,0xffff,0xffff,0xffff,0xce3b,0x5aac,0x0000,0x0000,0x0000,0x2124,0x7370,0xbd9a,0xc5ba,0x0000,0x5acb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf77e,0xc5ba,0xe6fd,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0x9cb4,0x0000,0x2945,0x8c33,0xc5ba,0xc5ba,0xcdfb,0xdebd,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xd65c,0xdebc,0xffff,0xffff,0xffff,0xcdfb,0xc5fb,0xdebd,0x9474,0xc5ba,0xc5fb,0xdebc,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedd,0xc5ba,0xc5ba,0xc5ba,0xce1b,0xe71d,0xffff,0xffff,0xc5ba,0xde9c,0xffff,0x7bef,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5e,0xc5ba,0xce3b,0xef5e,0xffff,0xffff,0xffff,0xffff,0xc5ba,0xde9c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc5ba,0xde9c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0xb596,0x9cf3,0x7bef,0x7bef,0x736e,0x73af,0xa514,0xad55,0xc638,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x632c,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x31a6,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cd3,0x0020,0x0000,0x18e3,0x632c,0xa514,0xc638,0xdefb,0xdefb,0xdefb,0xd69a,0xc638,0x9cf3,0x738e,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x0020,0x18c3,0x9cd4,0xe6fd,0xe6dd,0xe6dd,0xe6dd,0xe6dd,0xef3e,0xef3e,0xf77e,0xffbf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0x8c32,0x0000,0x4a2a,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xce3b,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5da,0xa4d6,0x0000,0x0000,0x4a49,0xb576,0xef7e,0xf7bf,0xf7bf,0xf79f,0xf77e,0xef1e,0xdebd,0xe6fd,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf7bf,0xc5da,0xcdfb,0xef3e,0x94b2,0x1082,0x0000,0x0000,0x2104,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0xde9c,0xffff,0xffff,0xef7d,0x94b2,0x4208,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf79f,0xc5ba,0xc5ba,0xd67c,0xef7e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5fb,0xc5ba,0xc5ba,0xce1b,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xe71d,0xd65c,0xe6dd,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0x8410,0x18e3,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xad55,0x52aa,0x0841,0x0000,0x0841,0xc618,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0xd69a,0xbdd7,0x94b2,0x6b4d,0x39c7,0x0020,0x0000,0x0000,0x2104,0x8c51,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4208,0x0000,0x0000,0x0000,0x0000,0x0000,0x2945,0x630d,0x9c94,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8410,0x4228,0x630c,0x8430,0xad35,0xc5fa,0xc5db,0xc5ba,0xc5db,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffbf,0xf79f,0xef7e,0xe71d,0xdebc,0xd63c,0xc5da,0xc5ba,0xc5ba,0xce1b,0xe6fd,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd65c,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xce1b,0xdebd,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe6dd,0xd65c,0xde9c,0xe6fd,0xef5e,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0x8c51,0x7bef,0x7bef,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe71d,0xe6dd,0xe6dd,0x8c71,0x7bef,0x7bef,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe71d,0xe6dd,0xe6dd,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff};
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-corgi b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-corgi
new file mode 100644
index 0000000000..0b9b2571e1
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-corgi
@@ -0,0 +1,1304 @@
+#
+# Automatically generated make config: don't edit
+#
+CONFIG_ARM=y
+# CONFIG_EISA is not set
+# CONFIG_SBUS is not set
+# CONFIG_MCA is not set
+CONFIG_UID16=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+# CONFIG_GENERIC_BUST_SPINLOCK is not set
+# CONFIG_GENERIC_ISA_DMA is not set
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+# CONFIG_OBSOLETE is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+CONFIG_KMOD=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_ANAKIN is not set
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_CAMELOT is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_MX1ADS is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_SHARK is not set
+
+#
+# Archimedes/A5000 Implementations
+#
+
+#
+# Archimedes/A5000 Implementations (select only ONE)
+#
+# CONFIG_ARCH_ARC is not set
+# CONFIG_ARCH_A5K is not set
+
+#
+# Footbridge Implementations
+#
+# CONFIG_ARCH_CATS is not set
+# CONFIG_ARCH_PERSONAL_SERVER is not set
+# CONFIG_ARCH_EBSA285_ADDIN is not set
+# CONFIG_ARCH_EBSA285_HOST is not set
+# CONFIG_ARCH_NETWINDER is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_ASSABET_NEPONSET is not set
+# CONFIG_SA1100_ADSBITSY is not set
+# CONFIG_SA1100_BRUTUS is not set
+# CONFIG_SA1100_CEP is not set
+# CONFIG_SA1100_CERF is not set
+# CONFIG_SA1100_COLLIE is not set
+# CONFIG_LOCOMO is not set
+# CONFIG_COLLIE_TS is not set
+# CONFIG_COLLIE_TR0 is not set
+# CONFIG_COLLIE_TR1 is not set
+# CONFIG_COLLIE_DEV is not set
+# CONFIG_COLLIE_G is not set
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+# CONFIG_SA1100_H3XXX is not set
+# CONFIG_SA1100_EXTENEX1 is not set
+# CONFIG_SA1100_FLEXANET is not set
+# CONFIG_SA1100_FREEBIRD is not set
+# CONFIG_SA1100_FRODO is not set
+# CONFIG_SA1100_GRAPHICSCLIENT is not set
+# CONFIG_SA1100_GRAPHICSMASTER is not set
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_HUW_WEBPANEL is not set
+# CONFIG_SA1100_ITSY is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_NANOENGINE is not set
+# CONFIG_SA1100_OMNIMETER is not set
+# CONFIG_SA1100_PANGOLIN is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_PT_SYSTEM3 is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SHERMAN is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_PFS168 is not set
+# CONFIG_SA1100_VICTOR is not set
+# CONFIG_SA1100_XP860 is not set
+# CONFIG_SA1100_YOPY is not set
+# CONFIG_SA1100_USB is not set
+# CONFIG_SA1100_USB_NETLINK is not set
+# CONFIG_SA1100_USB_CHAR is not set
+# CONFIG_H3600_SLEEVE is not set
+
+#
+# Intel PXA250/210 Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_ARCH_PXA_CERF is not set
+# CONFIG_COTULLA_DMA is not set
+# CONFIG_SABINAL_DISCOVERY is not set
+# CONFIG_ARCH_SABINAL is not set
+# CONFIG_ARCH_PXA_POODLE is not set
+# CONFIG_POODLE_TR0 is not set
+CONFIG_ARCH_PXA_CORGI=y
+# CONFIG_CORGI_TR0 is not set
+CONFIG_CORGI_LCD_BUFF=y
+# CONFIG_ARCH_PXA_SHEPHERD is not set
+# CONFIG_ARCH_PXA_HUSKY is not set
+# CONFIG_ARCH_PXA_BOXER is not set
+# CONFIG_ARCH_PXA_TOSA is not set
+# CONFIG_ARCH_PXA_TOSA_SKIP is not set
+CONFIG_ARCH_SHARP_SL=y
+CONFIG_SL_CCCR_CHANGE=y
+# CONFIG_SL_CCCR242 is not set
+# CONFIG_SL_CCCR162 is not set
+
+#
+# Language type
+#
+CONFIG_ARCH_SHARP_SL_E=y
+# CONFIG_ARCH_SHARP_SL_V is not set
+# CONFIG_ARCH_SHARP_SL_G is not set
+# CONFIG_ARCH_SHARP_SL_J is not set
+# CONFIG_ARCH_SHARP_SL_S is not set
+# CONFIG_ARCH_SHARP_SL_I is not set
+# CONFIG_PXA_USB is not set
+# CONFIG_PXA_USB_NETLINK is not set
+# CONFIG_PXA_USB_CHAR is not set
+
+#
+# CLPS711X/EP721X Implementations
+#
+# CONFIG_ARCH_AUTCPU12 is not set
+# CONFIG_ARCH_CDB89712 is not set
+# CONFIG_ARCH_CLEP7312 is not set
+# CONFIG_ARCH_EDB7211 is not set
+# CONFIG_ARCH_P720T is not set
+# CONFIG_ARCH_FORTUNET is not set
+# CONFIG_ARCH_EP7211 is not set
+# CONFIG_ARCH_EP7212 is not set
+# CONFIG_ARCH_ACORN is not set
+# CONFIG_FOOTBRIDGE is not set
+# CONFIG_FOOTBRIDGE_HOST is not set
+# CONFIG_FOOTBRIDGE_ADDIN is not set
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
+
+#
+# Processor Type
+#
+# CONFIG_CPU_32v3 is not set
+# CONFIG_CPU_32v4 is not set
+# CONFIG_CPU_ARM610 is not set
+# CONFIG_CPU_ARM710 is not set
+# CONFIG_CPU_ARM720T is not set
+# CONFIG_CPU_ARM920T is not set
+# CONFIG_CPU_ARM922T is not set
+# CONFIG_PLD is not set
+# CONFIG_CPU_ARM926T is not set
+# CONFIG_CPU_ARM1020 is not set
+# CONFIG_CPU_SA110 is not set
+# CONFIG_CPU_SA1100 is not set
+CONFIG_CPU_32v5=y
+CONFIG_CPU_XSCALE=y
+CONFIG_BATT=y
+CONFIG_XSCALE_CACHE_ERRATA=y
+CONFIG_ARM_THUMB=y
+# CONFIG_ARM_FCSE is not set
+# CONFIG_DISCONTIGMEM is not set
+# CONFIG_PREEMPT is not set
+
+#
+# General setup
+#
+# CONFIG_PCI is not set
+# CONFIG_ISA is not set
+# CONFIG_ISA_DMA is not set
+# CONFIG_ZBOOT_ROM is not set
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_HOTPLUG=y
+
+#
+# PCMCIA/CardBus support
+#
+CONFIG_PCMCIA=y
+# CONFIG_I82092 is not set
+# CONFIG_I82365 is not set
+# CONFIG_TCIC is not set
+# CONFIG_PCMCIA_CLPS6700 is not set
+# CONFIG_PCMCIA_SA1100 is not set
+CONFIG_PCMCIA_PXA=y
+CONFIG_NET=y
+CONFIG_SYSVIPC=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+
+#
+# At least one math emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_KCORE_ELF=y
+# CONFIG_KCORE_AOUT is not set
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+CONFIG_PM=y
+CONFIG_APM=y
+# CONFIG_APM_IGNORE_USER_SUSPEND is not set
+CONFIG_APM_CPU_IDLE=y
+CONFIG_APM_DISPLAY_BLANK=y
+CONFIG_APM_RTC_IS_GMT=y
+# CONFIG_ARTHUR is not set
+CONFIG_CMDLINE="<see .oe file>"
+# CONFIG_SHARPSL_BOOTLDR_PARAMS is not set
+CONFIG_ALIGNMENT_TRAP=y
+CONFIG_FREEPG_SIGNAL=y
+CONFIG_OOM_KILL_SURVIVAL=y
+CONFIG_DEVICEINFO=m
+CONFIG_CORGI_DEVICEINFO=m
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+# CONFIG_MTD_GEN_PROBE is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_AMDSTD is not set
+# CONFIG_MTD_SHARP is not set
+# CONFIG_MTD_JEDEC is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_LUBBOCK is not set
+# CONFIG_MTD_NORA is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_CDB89712 is not set
+# CONFIG_MTD_SA1100 is not set
+# CONFIG_MTD_DC21285 is not set
+# CONFIG_MTD_IQ80310 is not set
+# CONFIG_MTD_FORTUNET is not set
+# CONFIG_MTD_PXA_CERF is not set
+# CONFIG_MTD_EPXA10DB is not set
+# CONFIG_MTD_AUTCPU12 is not set
+# CONFIG_MTD_EDB7312 is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_DISCOVERY is not set
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_PCI is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_MTDROM_SA1100 is not set
+# CONFIG_MTD_MTDRAM_SA1100 is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_MTDRAM_SHARP_SL is not set
+# CONFIG_MTD_BLKMTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC1000 is not set
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOCPROBE is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_ECC=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+CONFIG_MTD_NAND_POST_BADBLOCK=y
+# CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS=y
+CONFIG_MTD_NAND_PAGE_CACHE=y
+CONFIG_MTD_NAND_SHARP_SL_CORGI=y
+CONFIG_MTD_NAND_SHARP_SL=y
+
+#
+# Plug and Play configuration
+#
+# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_MD_RAID1 is not set
+# CONFIG_MD_RAID5 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_BLK_DEV_LVM is not set
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_FILTER=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_ARPD is not set
+# CONFIG_INET_ECN is not set
+CONFIG_SYN_COOKIES=y
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_CONNTRACK is not set
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=y
+# CONFIG_IP_NF_MATCH_LIMIT is not set
+# CONFIG_IP_NF_MATCH_MAC is not set
+# CONFIG_IP_NF_MATCH_MARK is not set
+# CONFIG_IP_NF_MATCH_MULTIPORT is not set
+# CONFIG_IP_NF_MATCH_TOS is not set
+# CONFIG_IP_NF_MATCH_AH_ESP is not set
+# CONFIG_IP_NF_MATCH_LENGTH is not set
+# CONFIG_IP_NF_MATCH_TTL is not set
+# CONFIG_IP_NF_MATCH_TCPMSS is not set
+# CONFIG_IP_NF_MATCH_UNCLEAN is not set
+# CONFIG_IP_NF_MATCH_OWNER is not set
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+# CONFIG_IP_NF_TARGET_MIRROR is not set
+# CONFIG_IP_NF_MANGLE is not set
+CONFIG_IP_NF_TARGET_LOG=y
+# CONFIG_IP_NF_TARGET_ULOG is not set
+# CONFIG_IP_NF_TARGET_TCPMSS is not set
+CONFIG_IPV6=y
+
+#
+# IPv6: Netfilter Configuration
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=y
+# CONFIG_IP6_NF_MATCH_LIMIT is not set
+# CONFIG_IP6_NF_MATCH_MAC is not set
+# CONFIG_IP6_NF_MATCH_MULTIPORT is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_MARK is not set
+CONFIG_IP6_NF_FILTER=y
+CONFIG_IP6_NF_TARGET_LOG=y
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_KHTTPD is not set
+# CONFIG_ATM is not set
+# CONFIG_VLAN_8021Q is not set
+
+#
+#
+#
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_LLC is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+CONFIG_IPSEC=m
+
+#
+# IPSec options (Openswan)
+#
+CONFIG_IPSEC_IPIP=y
+CONFIG_IPSEC_AH=y
+# CONFIG_IPSEC_AUTH_HMAC_MD5 is not set
+CONFIG_IPSEC_AUTH_HMAC_SHA1=y
+CONFIG_IPSEC_ESP=y
+CONFIG_IPSEC_ENC_3DES=y
+# CONFIG_IPSEC_ENC_AES is not set
+CONFIG_IPSEC_ALG=y
+CONFIG_IPSEC_IPCOMP=y
+CONFIG_IPSEC_DEBUG=y
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_ETHERTAP is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_ARM_AM79C961A is not set
+# CONFIG_SUNLANCE is not set
+# CONFIG_SUNBMAC is not set
+# CONFIG_SUNQE is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_LANCE is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_MYRI_SBUS is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=y
+# CONFIG_PPP_SYNC_TTY is not set
+# CONFIG_PPP_DEFLATE is not set
+CONFIG_PPP_BSDCOMP=y
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_STRIP is not set
+# CONFIG_WAVELAN is not set
+# CONFIG_ARLAN is not set
+# CONFIG_AIRONET4500 is not set
+# CONFIG_AIRONET4500_NONCS is not set
+# CONFIG_AIRONET4500_PROC is not set
+# CONFIG_HERMES is not set
+
+#
+# Wireless Pcmcia cards support
+#
+# CONFIG_PCMCIA_HERMES is not set
+# CONFIG_AIRO_CS is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_NET_FC is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=y
+# CONFIG_PCMCIA_AXNET is not set
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_ARCNET_COM20020_CS is not set
+# CONFIG_PCMCIA_IBMTR is not set
+# CONFIG_NET_PCMCIA_RADIO is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+# CONFIG_IRLAN is not set
+CONFIG_IRNET=m
+CONFIG_IRCOMM=y
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_NSC_FIR is not set
+# CONFIG_WINBOND_FIR is not set
+# CONFIG_TOSHIBA_FIR is not set
+# CONFIG_SMC_IRCC_FIR is not set
+# CONFIG_ALI_FIR is not set
+# CONFIG_VLSI_FIR is not set
+
+#
+# ATA/IDE/MFM/RLL support
+#
+CONFIG_IDE=y
+
+#
+# IDE, ATA and ATAPI Block devices
+#
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_HD_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
+# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
+# CONFIG_BLK_DEV_IDEDISK_IBM is not set
+# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
+# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
+# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
+# CONFIG_BLK_DEV_IDEDISK_WD is not set
+# CONFIG_BLK_DEV_COMMERIAL is not set
+# CONFIG_BLK_DEV_TIVO is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_DMA_NONPCI is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
+# CONFIG_BLK_DEV_ATARAID is not set
+# CONFIG_BLK_DEV_ATARAID_PDC is not set
+# CONFIG_BLK_DEV_ATARAID_HPT is not set
+
+#
+# SCSI support
+#
+# CONFIG_SCSI is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input core support
+#
+# CONFIG_INPUT is not set
+# CONFIG_INPUT_KEYBDEV is not set
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_UINPUT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_SERIAL=y
+# CONFIG_SERIAL_CONSOLE is not set
+CONFIG_SERIAL_SL_SERIES=y
+# CONFIG_SL_TS_PRESSURE is not set
+# CONFIG_BOOT_PRESSURE_ON is not set
+CONFIG_SL7X0_POWER_KEY_OFF=y
+CONFIG_BOOT_POWER_KEY_OFF=y
+# CONFIG_SL_3BUTTON_PATCH is not set
+# CONFIG_BOOT_3BUTTON_PATCH_ON is not set
+# CONFIG_SL_WRITE_TS is not set
+# CONFIG_BLUETOOTH_SL is not set
+# CONFIG_KBD_DEV_FILE is not set
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_ANAKIN is not set
+# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
+# CONFIG_SERIAL_AMBA is not set
+# CONFIG_SERIAL_AMBA_CONSOLE is not set
+# CONFIG_SERIAL_CLPS711X is not set
+# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
+# CONFIG_SERIAL_21285 is not set
+# CONFIG_SERIAL_21285_OLD is not set
+# CONFIG_SERIAL_21285_CONSOLE is not set
+# CONFIG_SERIAL_UART00 is not set
+# CONFIG_SERIAL_UART00_CONSOLE is not set
+# CONFIG_SERIAL_SA1100 is not set
+# CONFIG_SERIAL_SA1100_CONSOLE is not set
+# CONFIG_SERIAL_8250 is not set
+# CONFIG_SERIAL_8250_CONSOLE is not set
+# CONFIG_SERIAL_8250_EXTENDED is not set
+# CONFIG_SERIAL_8250_MANY_PORTS is not set
+# CONFIG_SERIAL_8250_SHARE_IRQ is not set
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_MULTIPORT is not set
+# CONFIG_SERIAL_8250_HUB6 is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+# CONFIG_L3_ALGOBIT is not set
+# CONFIG_L3_BIT_SA1100_GPIO is not set
+
+#
+# Other L3 adapters
+#
+# CONFIG_L3_SA1111 is not set
+# CONFIG_BIT_SA1100_GPIO is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+# CONFIG_MOUSE is not set
+
+#
+# Joysticks
+#
+# CONFIG_INPUT_GAMEPORT is not set
+
+#
+# Input core support is needed for gameports
+#
+
+#
+# Input core support is needed for joysticks
+#
+# CONFIG_QIC02_TAPE is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_INTEL_RNG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+CONFIG_COTULLA_RTC=y
+CONFIG_ADS7846_TS=y
+# CONFIG_TOSA_TS is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+CONFIG_PCMCIA_SERIAL_CS=y
+CONFIG_PCMCIA_CHRDEV=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# File systems
+#
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FS_SYNC is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_ADFS_FS_RW is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_JBD is not set
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+# CONFIG_UMSDOS_FS is not set
+CONFIG_VFAT_FS=y
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_NAND=y
+CONFIG_JFFS2_PROC_FS=y
+CONFIG_JFFS2_NODEMERGE=y
+CONFIG_JFFS2_DYNFRAGTREE=y
+CONFIG_CRAMFS=y
+CONFIG_TMPFS=y
+CONFIG_RAMFS=y
+# CONFIG_ISO9660_FS is not set
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
+CONFIG_MINIX_FS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_RW is not set
+# CONFIG_HPFS_FS is not set
+CONFIG_PROC_FS=y
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+CONFIG_DEVPTS_FS=y
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_EXT2_FS=y
+# CONFIG_SYSV_FS is not set
+# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
+
+#
+# Network File Systems
+#
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_ROOT_NFS is not set
+# CONFIG_NFSD is not set
+# CONFIG_NFSD_V3 is not set
+CONFIG_SUNRPC=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+CONFIG_CIFS_POSIX=y
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+# CONFIG_ZISOFS_FS is not set
+CONFIG_ZLIB_FS_INFLATE=y
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+CONFIG_SMB_NLS=y
+CONFIG_NLS=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+CONFIG_NLS_CODEPAGE_932=y
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Console drivers
+#
+CONFIG_PC_KEYMAP=y
+# CONFIG_VGA_CONSOLE is not set
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_UNICON is not set
+# CONFIG_FB_COLLIE is not set
+# CONFIG_FB_ACORN is not set
+# CONFIG_FB_ANAKIN is not set
+# CONFIG_FB_CLPS711X is not set
+# CONFIG_FB_SA1100 is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_COTULLA is not set
+# CONFIG_FB_POODLE is not set
+CONFIG_FB_CORGI=y
+# CONFIG_FB_TOSA is not set
+# CONFIG_SHARP_LOGO_SCREEN is not set
+# CONFIG_SL_SYSCLK100 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_FBCON_ADVANCED=y
+# CONFIG_FBCON_MFB is not set
+# CONFIG_FBCON_CFB2 is not set
+# CONFIG_FBCON_CFB4 is not set
+# CONFIG_FBCON_CFB8 is not set
+CONFIG_FBCON_CFB16=y
+# CONFIG_FBCON_CFB24 is not set
+# CONFIG_FBCON_CFB32 is not set
+# CONFIG_FBCON_AFB is not set
+# CONFIG_FBCON_ILBM is not set
+# CONFIG_FBCON_IPLAN2P2 is not set
+# CONFIG_FBCON_IPLAN2P4 is not set
+# CONFIG_FBCON_IPLAN2P8 is not set
+# CONFIG_FBCON_MAC is not set
+# CONFIG_FBCON_VGA_PLANES is not set
+# CONFIG_FBCON_VGA is not set
+# CONFIG_FBCON_HGA is not set
+CONFIG_FBCON_ROTATE_R=y
+# CONFIG_FBCON_ROTATE_L is not set
+# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
+CONFIG_FBCON_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_COLLIE_SSP is not set
+# CONFIG_SOUND_COLLIE_TC35143 is not set
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_MIDI_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+# CONFIG_MIDI_VIA82CXXX is not set
+# CONFIG_SOUND_OSS is not set
+# CONFIG_SOUND_WAVEARTIST is not set
+# CONFIG_SOUND_PXA_AC97 is not set
+# CONFIG_SOUND_POODLE is not set
+CONFIG_SOUND_CORGI=y
+# CONFIG_SOUND_TOSA is not set
+# CONFIG_BUZZER_TOSA is not set
+# CONFIG_SOUND_TVMIXER is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+# CONFIG_MCP_SA1100 is not set
+# CONFIG_MCP_UCB1200 is not set
+# CONFIG_MCP_UCB1200_AUDIO is not set
+# CONFIG_MCP_UCB1200_TS is not set
+# CONFIG_MCP_UCB1400_TS is not set
+
+#
+# USB support
+#
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_LONG_TIMEOUT is not set
+
+#
+# USB Controllers
+#
+# CONFIG_USB_UHCI is not set
+# CONFIG_USB_UHCI_ALT is not set
+# CONFIG_USB_OHCI is not set
+# CONFIG_USB_OHCI_SA1111 is not set
+# CONFIG_USB_OHCI_TC6393 is not set
+# CONFIG_USB_USE_INTERNAL_MEMORY is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_AUDIO is not set
+
+#
+# USB Bluetooth can only be used with disabled Bluetooth subsystem
+#
+
+#
+# SCSI support is needed for USB Storage
+#
+# CONFIG_USB_STORAGE is not set
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_HP8200e is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# USB Human Interface Devices (HID)
+#
+
+#
+# Input core support is needed for USB HID
+#
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_DC2XX is not set
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_SCANNER is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+
+#
+# USB Multimedia devices
+#
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network adaptors
+#
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_CDCETHER is not set
+# CONFIG_USB_USBNET is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_PL2303 is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_RIO500 is not set
+
+#
+# USB Device Support
+#
+CONFIG_USBD=m
+CONFIG_USBD_VENDORID=04DD
+CONFIG_USBD_PRODUCTID=8007
+CONFIG_USBD_PRODUCT_NAME="SL-C700"
+CONFIG_USBD_MANUFACTURER="Sharp"
+# CONFIG_USBD_USE_SERIAL_NUMBER is not set
+CONFIG_USBD_SELFPOWERED=y
+CONFIG_USBD_MONITOR=m
+
+#
+#
+#
+# CONFIG_USBD_PROCFS is not set
+
+#
+# USB Device functions
+#
+
+#
+# Network Function
+#
+CONFIG_USBD_NET=m
+CONFIG_USBD_NET_VENDORID=04DD
+CONFIG_USBD_NET_PRODUCTID=8007
+CONFIG_USBD_NET_IFNAME="usbd"
+CONFIG_USBD_NET_OUT_ENDPOINT=1
+CONFIG_USBD_NET_OUT_PKTSIZE=64
+CONFIG_USBD_NET_IN_ENDPOINT=2
+CONFIG_USBD_NET_IN_PKTSIZE=64
+CONFIG_USBD_NET_INT_ENDPOINT=3
+CONFIG_USBD_NET_INT_PKTSIZE=16
+# CONFIG_USBD_NET_ALWAYSUP is not set
+# CONFIG_USBD_NET_SAFE is not set
+CONFIG_USBD_NET_MDLM=y
+# CONFIG_USBD_NET_CDC is not set
+CONFIG_USBD_NET_REMOTE_MACADDR="400001000002"
+CONFIG_USBD_NET_REMOTE_OUI=400002
+CONFIG_USBD_MAC_AS_SERIAL_NUMBER=y
+CONFIG_USBD_NET_LOCAL_MACADDR="400001000001"
+CONFIG_USBD_NET_LOCAL_OUI=400001
+
+#
+# Serial Function
+#
+# CONFIG_USBD_SERIAL is not set
+
+#
+# Mass Storage Function
+#
+CONFIG_USBD_STORAGE=m
+CONFIG_USBD_STORAGE_VENDORID=0000
+CONFIG_USBD_STORAGE_PRODUCTID=0000
+CONFIG_USBD_STORAGE_OUT_ENDPOINT=1
+CONFIG_USBD_STORAGE_OUT_PKTSIZE=64
+CONFIG_USBD_STORAGE_IN_ENDPOINT=2
+CONFIG_USBD_STORAGE_IN_PKTSIZE=64
+CONFIG_USBD_STORAGE_INT_ENDPOINT=3
+CONFIG_USBD_STORAGE_INT_PKTSIZE=16
+CONFIG_USBD_STORAGE_DEF_DEVICE_NAME="SL-C700"
+
+#
+# USB Device bus interfaces
+#
+
+#
+# USB Device Bus Interface Support
+#
+CONFIG_USBD_PXA_BUS=m
+# CONFIG_USBD_GENERIC_BUS is not set
+
+#
+# Bluetooth support
+#
+CONFIG_BLUEZ=y
+CONFIG_BLUEZ_L2CAP=y
+CONFIG_BLUEZ_SCO=y
+CONFIG_BLUEZ_RFCOMM=y
+CONFIG_BLUEZ_RFCOMM_TTY=y
+CONFIG_BLUEZ_BNEP=y
+CONFIG_BLUEZ_BNEP_MC_FILTER=y
+CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
+# CONFIG_BLUEZ_HIDP is not set
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BLUEZ_HCIUSB=m
+CONFIG_BLUEZ_HCIUSB_SCO=y
+CONFIG_BLUEZ_HCIUART=y
+CONFIG_BLUEZ_HCIUART_H4=y
+CONFIG_BLUEZ_HCIUART_BCSP=y
+CONFIG_BLUEZ_HCIUART_BCSP_TXCRC=y
+CONFIG_BLUEZ_HCIBFUSB=m
+CONFIG_BLUEZ_HCIDTL1=m
+CONFIG_BLUEZ_HCIBLUECARD=m
+CONFIG_BLUEZ_HCIBTUART=m
+CONFIG_BLUEZ_HCIVHCI=m
+CONFIG_BLUEZ_BT950=m
+
+#
+# Kernel hacking
+#
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_COREDUMP_SIGNAL is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_NO_PGT_CACHE is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_WAITQ is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_LL is not set
+# CONFIG_DEBUG_DC21285_PORT is not set
+# CONFIG_DEBUG_CLPS711X_UART2 is not set
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-husky b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-husky
new file mode 100644
index 0000000000..ddcc8bb9f1
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-husky
@@ -0,0 +1,1304 @@
+#
+# Automatically generated make config: don't edit
+#
+CONFIG_ARM=y
+# CONFIG_EISA is not set
+# CONFIG_SBUS is not set
+# CONFIG_MCA is not set
+CONFIG_UID16=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+# CONFIG_GENERIC_BUST_SPINLOCK is not set
+# CONFIG_GENERIC_ISA_DMA is not set
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+# CONFIG_OBSOLETE is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+CONFIG_KMOD=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_ANAKIN is not set
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_CAMELOT is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_MX1ADS is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_SHARK is not set
+
+#
+# Archimedes/A5000 Implementations
+#
+
+#
+# Archimedes/A5000 Implementations (select only ONE)
+#
+# CONFIG_ARCH_ARC is not set
+# CONFIG_ARCH_A5K is not set
+
+#
+# Footbridge Implementations
+#
+# CONFIG_ARCH_CATS is not set
+# CONFIG_ARCH_PERSONAL_SERVER is not set
+# CONFIG_ARCH_EBSA285_ADDIN is not set
+# CONFIG_ARCH_EBSA285_HOST is not set
+# CONFIG_ARCH_NETWINDER is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_ASSABET_NEPONSET is not set
+# CONFIG_SA1100_ADSBITSY is not set
+# CONFIG_SA1100_BRUTUS is not set
+# CONFIG_SA1100_CEP is not set
+# CONFIG_SA1100_CERF is not set
+# CONFIG_SA1100_COLLIE is not set
+# CONFIG_LOCOMO is not set
+# CONFIG_COLLIE_TS is not set
+# CONFIG_COLLIE_TR0 is not set
+# CONFIG_COLLIE_TR1 is not set
+# CONFIG_COLLIE_DEV is not set
+# CONFIG_COLLIE_G is not set
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+# CONFIG_SA1100_H3XXX is not set
+# CONFIG_SA1100_EXTENEX1 is not set
+# CONFIG_SA1100_FLEXANET is not set
+# CONFIG_SA1100_FREEBIRD is not set
+# CONFIG_SA1100_FRODO is not set
+# CONFIG_SA1100_GRAPHICSCLIENT is not set
+# CONFIG_SA1100_GRAPHICSMASTER is not set
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_HUW_WEBPANEL is not set
+# CONFIG_SA1100_ITSY is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_NANOENGINE is not set
+# CONFIG_SA1100_OMNIMETER is not set
+# CONFIG_SA1100_PANGOLIN is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_PT_SYSTEM3 is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SHERMAN is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_PFS168 is not set
+# CONFIG_SA1100_VICTOR is not set
+# CONFIG_SA1100_XP860 is not set
+# CONFIG_SA1100_YOPY is not set
+# CONFIG_SA1100_USB is not set
+# CONFIG_SA1100_USB_NETLINK is not set
+# CONFIG_SA1100_USB_CHAR is not set
+# CONFIG_H3600_SLEEVE is not set
+
+#
+# Intel PXA250/210 Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_ARCH_PXA_CERF is not set
+# CONFIG_COTULLA_DMA is not set
+# CONFIG_SABINAL_DISCOVERY is not set
+# CONFIG_ARCH_SABINAL is not set
+# CONFIG_ARCH_PXA_POODLE is not set
+# CONFIG_POODLE_TR0 is not set
+CONFIG_ARCH_PXA_CORGI=y
+# CONFIG_CORGI_TR0 is not set
+CONFIG_CORGI_LCD_BUFF=y
+CONFIG_ARCH_PXA_SHEPHERD=y
+CONFIG_ARCH_PXA_HUSKY=y
+CONFIG_ARCH_PXA_BOXER=y
+# CONFIG_ARCH_PXA_TOSA is not set
+# CONFIG_ARCH_PXA_TOSA_SKIP is not set
+CONFIG_ARCH_SHARP_SL=y
+CONFIG_SL_CCCR_CHANGE=y
+# CONFIG_SL_CCCR242 is not set
+# CONFIG_SL_CCCR162 is not set
+
+#
+# Language type
+#
+CONFIG_ARCH_SHARP_SL_E=y
+# CONFIG_ARCH_SHARP_SL_V is not set
+# CONFIG_ARCH_SHARP_SL_G is not set
+# CONFIG_ARCH_SHARP_SL_J is not set
+# CONFIG_ARCH_SHARP_SL_S is not set
+# CONFIG_ARCH_SHARP_SL_I is not set
+# CONFIG_PXA_USB is not set
+# CONFIG_PXA_USB_NETLINK is not set
+# CONFIG_PXA_USB_CHAR is not set
+
+#
+# CLPS711X/EP721X Implementations
+#
+# CONFIG_ARCH_AUTCPU12 is not set
+# CONFIG_ARCH_CDB89712 is not set
+# CONFIG_ARCH_CLEP7312 is not set
+# CONFIG_ARCH_EDB7211 is not set
+# CONFIG_ARCH_P720T is not set
+# CONFIG_ARCH_FORTUNET is not set
+# CONFIG_ARCH_EP7211 is not set
+# CONFIG_ARCH_EP7212 is not set
+# CONFIG_ARCH_ACORN is not set
+# CONFIG_FOOTBRIDGE is not set
+# CONFIG_FOOTBRIDGE_HOST is not set
+# CONFIG_FOOTBRIDGE_ADDIN is not set
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
+
+#
+# Processor Type
+#
+# CONFIG_CPU_32v3 is not set
+# CONFIG_CPU_32v4 is not set
+# CONFIG_CPU_ARM610 is not set
+# CONFIG_CPU_ARM710 is not set
+# CONFIG_CPU_ARM720T is not set
+# CONFIG_CPU_ARM920T is not set
+# CONFIG_CPU_ARM922T is not set
+# CONFIG_PLD is not set
+# CONFIG_CPU_ARM926T is not set
+# CONFIG_CPU_ARM1020 is not set
+# CONFIG_CPU_SA110 is not set
+# CONFIG_CPU_SA1100 is not set
+CONFIG_CPU_32v5=y
+CONFIG_CPU_XSCALE=y
+CONFIG_BATT=y
+# CONFIG_XSCALE_CACHE_ERRATA is not set
+CONFIG_ARM_THUMB=y
+CONFIG_ARM_FCSE=y
+# CONFIG_DISCONTIGMEM is not set
+# CONFIG_PREEMPT is not set
+
+#
+# General setup
+#
+# CONFIG_PCI is not set
+# CONFIG_ISA is not set
+# CONFIG_ISA_DMA is not set
+# CONFIG_ZBOOT_ROM is not set
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_HOTPLUG=y
+
+#
+# PCMCIA/CardBus support
+#
+CONFIG_PCMCIA=y
+# CONFIG_I82092 is not set
+# CONFIG_I82365 is not set
+# CONFIG_TCIC is not set
+# CONFIG_PCMCIA_CLPS6700 is not set
+# CONFIG_PCMCIA_SA1100 is not set
+CONFIG_PCMCIA_PXA=y
+CONFIG_NET=y
+CONFIG_SYSVIPC=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+
+#
+# At least one math emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_KCORE_ELF=y
+# CONFIG_KCORE_AOUT is not set
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+CONFIG_PM=y
+CONFIG_APM=y
+# CONFIG_APM_IGNORE_USER_SUSPEND is not set
+CONFIG_APM_CPU_IDLE=y
+CONFIG_APM_DISPLAY_BLANK=y
+CONFIG_APM_RTC_IS_GMT=y
+# CONFIG_ARTHUR is not set
+CONFIG_CMDLINE="<see .oe file>"
+# CONFIG_SHARPSL_BOOTLDR_PARAMS is not set
+CONFIG_ALIGNMENT_TRAP=y
+CONFIG_FREEPG_SIGNAL=y
+CONFIG_OOM_KILL_SURVIVAL=y
+CONFIG_DEVICEINFO=m
+CONFIG_CORGI_DEVICEINFO=m
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+# CONFIG_MTD_GEN_PROBE is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_AMDSTD is not set
+# CONFIG_MTD_SHARP is not set
+# CONFIG_MTD_JEDEC is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_LUBBOCK is not set
+# CONFIG_MTD_NORA is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_CDB89712 is not set
+# CONFIG_MTD_SA1100 is not set
+# CONFIG_MTD_DC21285 is not set
+# CONFIG_MTD_IQ80310 is not set
+# CONFIG_MTD_FORTUNET is not set
+# CONFIG_MTD_PXA_CERF is not set
+# CONFIG_MTD_EPXA10DB is not set
+# CONFIG_MTD_AUTCPU12 is not set
+# CONFIG_MTD_EDB7312 is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_DISCOVERY is not set
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_PCI is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_MTDROM_SA1100 is not set
+# CONFIG_MTD_MTDRAM_SA1100 is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_MTDRAM_SHARP_SL is not set
+# CONFIG_MTD_BLKMTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC1000 is not set
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOCPROBE is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_ECC=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+CONFIG_MTD_NAND_POST_BADBLOCK=y
+# CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS=y
+CONFIG_MTD_NAND_PAGE_CACHE=y
+CONFIG_MTD_NAND_SHARP_SL_CORGI=y
+CONFIG_MTD_NAND_SHARP_SL=y
+
+#
+# Plug and Play configuration
+#
+# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_MD_RAID1 is not set
+# CONFIG_MD_RAID5 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_BLK_DEV_LVM is not set
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_FILTER=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_ARPD is not set
+# CONFIG_INET_ECN is not set
+CONFIG_SYN_COOKIES=y
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_CONNTRACK is not set
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=y
+# CONFIG_IP_NF_MATCH_LIMIT is not set
+# CONFIG_IP_NF_MATCH_MAC is not set
+# CONFIG_IP_NF_MATCH_MARK is not set
+# CONFIG_IP_NF_MATCH_MULTIPORT is not set
+# CONFIG_IP_NF_MATCH_TOS is not set
+# CONFIG_IP_NF_MATCH_AH_ESP is not set
+# CONFIG_IP_NF_MATCH_LENGTH is not set
+# CONFIG_IP_NF_MATCH_TTL is not set
+# CONFIG_IP_NF_MATCH_TCPMSS is not set
+# CONFIG_IP_NF_MATCH_UNCLEAN is not set
+# CONFIG_IP_NF_MATCH_OWNER is not set
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+# CONFIG_IP_NF_TARGET_MIRROR is not set
+# CONFIG_IP_NF_MANGLE is not set
+CONFIG_IP_NF_TARGET_LOG=y
+# CONFIG_IP_NF_TARGET_ULOG is not set
+# CONFIG_IP_NF_TARGET_TCPMSS is not set
+CONFIG_IPV6=y
+
+#
+# IPv6: Netfilter Configuration
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=y
+# CONFIG_IP6_NF_MATCH_LIMIT is not set
+# CONFIG_IP6_NF_MATCH_MAC is not set
+# CONFIG_IP6_NF_MATCH_MULTIPORT is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_MARK is not set
+CONFIG_IP6_NF_FILTER=y
+CONFIG_IP6_NF_TARGET_LOG=y
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_KHTTPD is not set
+# CONFIG_ATM is not set
+# CONFIG_VLAN_8021Q is not set
+
+#
+#
+#
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_LLC is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+CONFIG_IPSEC=m
+
+#
+# IPSec options (Openswan)
+#
+CONFIG_IPSEC_IPIP=y
+CONFIG_IPSEC_AH=y
+# CONFIG_IPSEC_AUTH_HMAC_MD5 is not set
+CONFIG_IPSEC_AUTH_HMAC_SHA1=y
+CONFIG_IPSEC_ESP=y
+CONFIG_IPSEC_ENC_3DES=y
+# CONFIG_IPSEC_ENC_AES is not set
+CONFIG_IPSEC_ALG=y
+CONFIG_IPSEC_IPCOMP=y
+CONFIG_IPSEC_DEBUG=y
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_ETHERTAP is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_ARM_AM79C961A is not set
+# CONFIG_SUNLANCE is not set
+# CONFIG_SUNBMAC is not set
+# CONFIG_SUNQE is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_LANCE is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_MYRI_SBUS is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=y
+# CONFIG_PPP_SYNC_TTY is not set
+# CONFIG_PPP_DEFLATE is not set
+CONFIG_PPP_BSDCOMP=y
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_STRIP is not set
+# CONFIG_WAVELAN is not set
+# CONFIG_ARLAN is not set
+# CONFIG_AIRONET4500 is not set
+# CONFIG_AIRONET4500_NONCS is not set
+# CONFIG_AIRONET4500_PROC is not set
+# CONFIG_HERMES is not set
+
+#
+# Wireless Pcmcia cards support
+#
+# CONFIG_PCMCIA_HERMES is not set
+# CONFIG_AIRO_CS is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_NET_FC is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=y
+# CONFIG_PCMCIA_AXNET is not set
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_ARCNET_COM20020_CS is not set
+# CONFIG_PCMCIA_IBMTR is not set
+# CONFIG_NET_PCMCIA_RADIO is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+# CONFIG_IRLAN is not set
+CONFIG_IRNET=m
+CONFIG_IRCOMM=y
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_NSC_FIR is not set
+# CONFIG_WINBOND_FIR is not set
+# CONFIG_TOSHIBA_FIR is not set
+# CONFIG_SMC_IRCC_FIR is not set
+# CONFIG_ALI_FIR is not set
+# CONFIG_VLSI_FIR is not set
+
+#
+# ATA/IDE/MFM/RLL support
+#
+CONFIG_IDE=y
+
+#
+# IDE, ATA and ATAPI Block devices
+#
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_HD_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
+# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
+# CONFIG_BLK_DEV_IDEDISK_IBM is not set
+# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
+# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
+# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
+# CONFIG_BLK_DEV_IDEDISK_WD is not set
+# CONFIG_BLK_DEV_COMMERIAL is not set
+# CONFIG_BLK_DEV_TIVO is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_DMA_NONPCI is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
+# CONFIG_BLK_DEV_ATARAID is not set
+# CONFIG_BLK_DEV_ATARAID_PDC is not set
+# CONFIG_BLK_DEV_ATARAID_HPT is not set
+
+#
+# SCSI support
+#
+# CONFIG_SCSI is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input core support
+#
+# CONFIG_INPUT is not set
+# CONFIG_INPUT_KEYBDEV is not set
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_UINPUT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_SERIAL=y
+# CONFIG_SERIAL_CONSOLE is not set
+CONFIG_SERIAL_SL_SERIES=y
+# CONFIG_SL_TS_PRESSURE is not set
+# CONFIG_BOOT_PRESSURE_ON is not set
+CONFIG_SL7X0_POWER_KEY_OFF=y
+CONFIG_BOOT_POWER_KEY_OFF=y
+# CONFIG_SL_3BUTTON_PATCH is not set
+# CONFIG_BOOT_3BUTTON_PATCH_ON is not set
+# CONFIG_SL_WRITE_TS is not set
+# CONFIG_BLUETOOTH_SL is not set
+# CONFIG_KBD_DEV_FILE is not set
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_ANAKIN is not set
+# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
+# CONFIG_SERIAL_AMBA is not set
+# CONFIG_SERIAL_AMBA_CONSOLE is not set
+# CONFIG_SERIAL_CLPS711X is not set
+# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
+# CONFIG_SERIAL_21285 is not set
+# CONFIG_SERIAL_21285_OLD is not set
+# CONFIG_SERIAL_21285_CONSOLE is not set
+# CONFIG_SERIAL_UART00 is not set
+# CONFIG_SERIAL_UART00_CONSOLE is not set
+# CONFIG_SERIAL_SA1100 is not set
+# CONFIG_SERIAL_SA1100_CONSOLE is not set
+# CONFIG_SERIAL_8250 is not set
+# CONFIG_SERIAL_8250_CONSOLE is not set
+# CONFIG_SERIAL_8250_EXTENDED is not set
+# CONFIG_SERIAL_8250_MANY_PORTS is not set
+# CONFIG_SERIAL_8250_SHARE_IRQ is not set
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_MULTIPORT is not set
+# CONFIG_SERIAL_8250_HUB6 is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+# CONFIG_L3_ALGOBIT is not set
+# CONFIG_L3_BIT_SA1100_GPIO is not set
+
+#
+# Other L3 adapters
+#
+# CONFIG_L3_SA1111 is not set
+# CONFIG_BIT_SA1100_GPIO is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+# CONFIG_MOUSE is not set
+
+#
+# Joysticks
+#
+# CONFIG_INPUT_GAMEPORT is not set
+
+#
+# Input core support is needed for gameports
+#
+
+#
+# Input core support is needed for joysticks
+#
+# CONFIG_QIC02_TAPE is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_INTEL_RNG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+CONFIG_COTULLA_RTC=y
+CONFIG_ADS7846_TS=y
+# CONFIG_TOSA_TS is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+CONFIG_PCMCIA_SERIAL_CS=y
+CONFIG_PCMCIA_CHRDEV=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# File systems
+#
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FS_SYNC is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_ADFS_FS_RW is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_JBD is not set
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+# CONFIG_UMSDOS_FS is not set
+CONFIG_VFAT_FS=y
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_NAND=y
+CONFIG_JFFS2_PROC_FS=y
+CONFIG_JFFS2_NODEMERGE=y
+CONFIG_JFFS2_DYNFRAGTREE=y
+CONFIG_CRAMFS=y
+CONFIG_TMPFS=y
+CONFIG_RAMFS=y
+# CONFIG_ISO9660_FS is not set
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
+CONFIG_MINIX_FS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_RW is not set
+# CONFIG_HPFS_FS is not set
+CONFIG_PROC_FS=y
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+CONFIG_DEVPTS_FS=y
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_EXT2_FS=y
+# CONFIG_SYSV_FS is not set
+# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
+
+#
+# Network File Systems
+#
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_ROOT_NFS is not set
+# CONFIG_NFSD is not set
+# CONFIG_NFSD_V3 is not set
+CONFIG_SUNRPC=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+CONFIG_CIFS_POSIX=y
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+# CONFIG_ZISOFS_FS is not set
+CONFIG_ZLIB_FS_INFLATE=y
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+CONFIG_SMB_NLS=y
+CONFIG_NLS=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+CONFIG_NLS_CODEPAGE_932=y
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Console drivers
+#
+CONFIG_PC_KEYMAP=y
+# CONFIG_VGA_CONSOLE is not set
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_UNICON is not set
+# CONFIG_FB_COLLIE is not set
+# CONFIG_FB_ACORN is not set
+# CONFIG_FB_ANAKIN is not set
+# CONFIG_FB_CLPS711X is not set
+# CONFIG_FB_SA1100 is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_COTULLA is not set
+# CONFIG_FB_POODLE is not set
+CONFIG_FB_CORGI=y
+# CONFIG_FB_TOSA is not set
+# CONFIG_SHARP_LOGO_SCREEN is not set
+# CONFIG_SL_SYSCLK100 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_FBCON_ADVANCED=y
+# CONFIG_FBCON_MFB is not set
+# CONFIG_FBCON_CFB2 is not set
+# CONFIG_FBCON_CFB4 is not set
+# CONFIG_FBCON_CFB8 is not set
+CONFIG_FBCON_CFB16=y
+# CONFIG_FBCON_CFB24 is not set
+# CONFIG_FBCON_CFB32 is not set
+# CONFIG_FBCON_AFB is not set
+# CONFIG_FBCON_ILBM is not set
+# CONFIG_FBCON_IPLAN2P2 is not set
+# CONFIG_FBCON_IPLAN2P4 is not set
+# CONFIG_FBCON_IPLAN2P8 is not set
+# CONFIG_FBCON_MAC is not set
+# CONFIG_FBCON_VGA_PLANES is not set
+# CONFIG_FBCON_VGA is not set
+# CONFIG_FBCON_HGA is not set
+CONFIG_FBCON_ROTATE_R=y
+# CONFIG_FBCON_ROTATE_L is not set
+# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
+CONFIG_FBCON_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_COLLIE_SSP is not set
+# CONFIG_SOUND_COLLIE_TC35143 is not set
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_MIDI_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+# CONFIG_MIDI_VIA82CXXX is not set
+# CONFIG_SOUND_OSS is not set
+# CONFIG_SOUND_WAVEARTIST is not set
+# CONFIG_SOUND_PXA_AC97 is not set
+# CONFIG_SOUND_POODLE is not set
+CONFIG_SOUND_CORGI=y
+# CONFIG_SOUND_TOSA is not set
+# CONFIG_BUZZER_TOSA is not set
+# CONFIG_SOUND_TVMIXER is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+# CONFIG_MCP_SA1100 is not set
+# CONFIG_MCP_UCB1200 is not set
+# CONFIG_MCP_UCB1200_AUDIO is not set
+# CONFIG_MCP_UCB1200_TS is not set
+# CONFIG_MCP_UCB1400_TS is not set
+
+#
+# USB support
+#
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_LONG_TIMEOUT is not set
+
+#
+# USB Controllers
+#
+# CONFIG_USB_UHCI is not set
+# CONFIG_USB_UHCI_ALT is not set
+# CONFIG_USB_OHCI is not set
+# CONFIG_USB_OHCI_SA1111 is not set
+# CONFIG_USB_OHCI_TC6393 is not set
+# CONFIG_USB_USE_INTERNAL_MEMORY is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_AUDIO is not set
+
+#
+# USB Bluetooth can only be used with disabled Bluetooth subsystem
+#
+
+#
+# SCSI support is needed for USB Storage
+#
+# CONFIG_USB_STORAGE is not set
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_HP8200e is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# USB Human Interface Devices (HID)
+#
+
+#
+# Input core support is needed for USB HID
+#
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_DC2XX is not set
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_SCANNER is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+
+#
+# USB Multimedia devices
+#
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network adaptors
+#
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_CDCETHER is not set
+# CONFIG_USB_USBNET is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_PL2303 is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_RIO500 is not set
+
+#
+# USB Device Support
+#
+CONFIG_USBD=m
+CONFIG_USBD_VENDORID=04DD
+CONFIG_USBD_PRODUCTID=8007
+CONFIG_USBD_PRODUCT_NAME="SL-C750"
+CONFIG_USBD_MANUFACTURER="Sharp"
+# CONFIG_USBD_USE_SERIAL_NUMBER is not set
+CONFIG_USBD_SELFPOWERED=y
+CONFIG_USBD_MONITOR=m
+
+#
+#
+#
+# CONFIG_USBD_PROCFS is not set
+
+#
+# USB Device functions
+#
+
+#
+# Network Function
+#
+CONFIG_USBD_NET=m
+CONFIG_USBD_NET_VENDORID=04DD
+CONFIG_USBD_NET_PRODUCTID=8007
+CONFIG_USBD_NET_IFNAME="usbd"
+CONFIG_USBD_NET_OUT_ENDPOINT=1
+CONFIG_USBD_NET_OUT_PKTSIZE=64
+CONFIG_USBD_NET_IN_ENDPOINT=2
+CONFIG_USBD_NET_IN_PKTSIZE=64
+CONFIG_USBD_NET_INT_ENDPOINT=3
+CONFIG_USBD_NET_INT_PKTSIZE=16
+# CONFIG_USBD_NET_ALWAYSUP is not set
+# CONFIG_USBD_NET_SAFE is not set
+CONFIG_USBD_NET_MDLM=y
+# CONFIG_USBD_NET_CDC is not set
+CONFIG_USBD_NET_REMOTE_MACADDR="400001000002"
+CONFIG_USBD_NET_REMOTE_OUI=400002
+CONFIG_USBD_MAC_AS_SERIAL_NUMBER=y
+CONFIG_USBD_NET_LOCAL_MACADDR="400001000001"
+CONFIG_USBD_NET_LOCAL_OUI=400001
+
+#
+# Serial Function
+#
+# CONFIG_USBD_SERIAL is not set
+
+#
+# Mass Storage Function
+#
+CONFIG_USBD_STORAGE=m
+CONFIG_USBD_STORAGE_VENDORID=0000
+CONFIG_USBD_STORAGE_PRODUCTID=0000
+CONFIG_USBD_STORAGE_OUT_ENDPOINT=1
+CONFIG_USBD_STORAGE_OUT_PKTSIZE=64
+CONFIG_USBD_STORAGE_IN_ENDPOINT=2
+CONFIG_USBD_STORAGE_IN_PKTSIZE=64
+CONFIG_USBD_STORAGE_INT_ENDPOINT=3
+CONFIG_USBD_STORAGE_INT_PKTSIZE=16
+CONFIG_USBD_STORAGE_DEF_DEVICE_NAME="SL-C760"
+
+#
+# USB Device bus interfaces
+#
+
+#
+# USB Device Bus Interface Support
+#
+CONFIG_USBD_PXA_BUS=m
+# CONFIG_USBD_GENERIC_BUS is not set
+
+#
+# Bluetooth support
+#
+CONFIG_BLUEZ=y
+CONFIG_BLUEZ_L2CAP=y
+CONFIG_BLUEZ_SCO=y
+CONFIG_BLUEZ_RFCOMM=y
+CONFIG_BLUEZ_RFCOMM_TTY=y
+CONFIG_BLUEZ_BNEP=y
+CONFIG_BLUEZ_BNEP_MC_FILTER=y
+CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
+# CONFIG_BLUEZ_HIDP is not set
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BLUEZ_HCIUSB=m
+CONFIG_BLUEZ_HCIUSB_SCO=y
+CONFIG_BLUEZ_HCIUART=y
+CONFIG_BLUEZ_HCIUART_H4=y
+CONFIG_BLUEZ_HCIUART_BCSP=y
+CONFIG_BLUEZ_HCIUART_BCSP_TXCRC=y
+CONFIG_BLUEZ_HCIBFUSB=m
+CONFIG_BLUEZ_HCIDTL1=m
+CONFIG_BLUEZ_HCIBLUECARD=m
+CONFIG_BLUEZ_HCIBTUART=m
+CONFIG_BLUEZ_HCIVHCI=m
+CONFIG_BLUEZ_BT950=m
+
+#
+# Kernel hacking
+#
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_COREDUMP_SIGNAL is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_NO_PGT_CACHE is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_WAITQ is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_LL is not set
+# CONFIG_DEBUG_DC21285_PORT is not set
+# CONFIG_DEBUG_CLPS711X_UART2 is not set
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-poodle b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-poodle
new file mode 100644
index 0000000000..e318a9f427
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-poodle
@@ -0,0 +1,1158 @@
+#
+# Automatically generated by make menuconfig: don't edit
+#
+CONFIG_ARM=y
+# CONFIG_EISA is not set
+# CONFIG_SBUS is not set
+# CONFIG_MCA is not set
+CONFIG_UID16=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+# CONFIG_GENERIC_BUST_SPINLOCK is not set
+# CONFIG_GENERIC_ISA_DMA is not set
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+# CONFIG_OBSOLETE is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+CONFIG_KMOD=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_ANAKIN is not set
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_CAMELOT is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_MX1ADS is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_SHARK is not set
+
+#
+# Archimedes/A5000 Implementations
+#
+# CONFIG_ARCH_ARC is not set
+# CONFIG_ARCH_A5K is not set
+
+#
+# Footbridge Implementations
+#
+# CONFIG_ARCH_CATS is not set
+# CONFIG_ARCH_PERSONAL_SERVER is not set
+# CONFIG_ARCH_EBSA285_ADDIN is not set
+# CONFIG_ARCH_EBSA285_HOST is not set
+# CONFIG_ARCH_NETWINDER is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_ASSABET_NEPONSET is not set
+# CONFIG_SA1100_ADSBITSY is not set
+# CONFIG_SA1100_BRUTUS is not set
+# CONFIG_SA1100_CEP is not set
+# CONFIG_SA1100_CERF is not set
+# CONFIG_SA1100_COLLIE is not set
+# CONFIG_LOCOMO is not set
+# CONFIG_COLLIE_TS is not set
+# CONFIG_COLLIE_TR0 is not set
+# CONFIG_COLLIE_TR1 is not set
+# CONFIG_COLLIE_DEV is not set
+# CONFIG_COLLIE_G is not set
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+# CONFIG_SA1100_H3XXX is not set
+# CONFIG_SA1100_EXTENEX1 is not set
+# CONFIG_SA1100_FLEXANET is not set
+# CONFIG_SA1100_FREEBIRD is not set
+# CONFIG_SA1100_FRODO is not set
+# CONFIG_SA1100_GRAPHICSCLIENT is not set
+# CONFIG_SA1100_GRAPHICSMASTER is not set
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_HUW_WEBPANEL is not set
+# CONFIG_SA1100_ITSY is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_NANOENGINE is not set
+# CONFIG_SA1100_OMNIMETER is not set
+# CONFIG_SA1100_PANGOLIN is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_PT_SYSTEM3 is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SHERMAN is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_PFS168 is not set
+# CONFIG_SA1100_VICTOR is not set
+# CONFIG_SA1100_XP860 is not set
+# CONFIG_SA1100_YOPY is not set
+# CONFIG_SA1100_USB is not set
+# CONFIG_SA1100_USB_NETLINK is not set
+# CONFIG_SA1100_USB_CHAR is not set
+# CONFIG_H3600_SLEEVE is not set
+
+#
+# Intel PXA250/210 Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_ARCH_PXA_CERF is not set
+# CONFIG_COTULLA_DMA is not set
+# CONFIG_SABINAL_DISCOVERY is not set
+# CONFIG_ARCH_SABINAL is not set
+CONFIG_ARCH_PXA_POODLE=y
+# CONFIG_POODLE_TR0 is not set
+# CONFIG_ARCH_PXA_CORGI is not set
+# CONFIG_CORGI_TR0 is not set
+# CONFIG_CORGI_LCD_BUFF is not set
+# CONFIG_ARCH_PXA_SHEPHERD is not set
+# CONFIG_ARCH_PXA_HUSKY is not set
+# CONFIG_ARCH_PXA_BOXER is not set
+# CONFIG_ARCH_PXA_TOSA is not set
+# CONFIG_ARCH_PXA_TOSA_SKIP is not set
+CONFIG_ARCH_SHARP_SL=y
+CONFIG_SL_CCCR_CHANGE=y
+CONFIG_SL_CCCR242=y
+CONFIG_ARCH_SHARP_SL_E=y
+# CONFIG_ARCH_SHARP_SL_V is not set
+# CONFIG_ARCH_SHARP_SL_G is not set
+# CONFIG_ARCH_SHARP_SL_J is not set
+# CONFIG_ARCH_SHARP_SL_S is not set
+# CONFIG_ARCH_SHARP_SL_I is not set
+# CONFIG_PXA_USB is not set
+# CONFIG_PXA_USB_NETLINK is not set
+# CONFIG_PXA_USB_CHAR is not set
+
+#
+# CLPS711X/EP721X Implementations
+#
+# CONFIG_ARCH_AUTCPU12 is not set
+# CONFIG_ARCH_CDB89712 is not set
+# CONFIG_ARCH_CLEP7312 is not set
+# CONFIG_ARCH_EDB7211 is not set
+# CONFIG_ARCH_P720T is not set
+# CONFIG_ARCH_FORTUNET is not set
+# CONFIG_ARCH_EP7211 is not set
+# CONFIG_ARCH_EP7212 is not set
+# CONFIG_ARCH_ACORN is not set
+# CONFIG_FOOTBRIDGE is not set
+# CONFIG_FOOTBRIDGE_HOST is not set
+# CONFIG_FOOTBRIDGE_ADDIN is not set
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
+# CONFIG_CPU_32v3 is not set
+# CONFIG_CPU_32v4 is not set
+# CONFIG_CPU_ARM610 is not set
+# CONFIG_CPU_ARM710 is not set
+# CONFIG_CPU_ARM720T is not set
+# CONFIG_CPU_ARM920T is not set
+# CONFIG_CPU_ARM922T is not set
+# CONFIG_PLD is not set
+# CONFIG_CPU_ARM926T is not set
+# CONFIG_CPU_ARM1020 is not set
+# CONFIG_CPU_SA110 is not set
+# CONFIG_CPU_SA1100 is not set
+CONFIG_CPU_32v5=y
+CONFIG_CPU_XSCALE=y
+CONFIG_BATT=y
+CONFIG_XSCALE_CACHE_ERRATA=y
+CONFIG_ARM_THUMB=y
+CONFIG_ARM_FCSE=y
+# CONFIG_DISCONTIGMEM is not set
+# CONFIG_PREEMPT is not set
+
+#
+# General setup
+#
+# CONFIG_PCI is not set
+# CONFIG_ISA is not set
+# CONFIG_ISA_DMA is not set
+# CONFIG_ZBOOT_ROM is not set
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_HOTPLUG=y
+
+#
+# PCMCIA/CardBus support
+#
+CONFIG_PCMCIA=y
+# CONFIG_I82092 is not set
+# CONFIG_I82365 is not set
+# CONFIG_TCIC is not set
+# CONFIG_PCMCIA_CLPS6700 is not set
+# CONFIG_PCMCIA_SA1100 is not set
+CONFIG_PCMCIA_PXA=y
+CONFIG_NET=y
+CONFIG_SYSVIPC=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_KCORE_ELF=y
+# CONFIG_KCORE_AOUT is not set
+CONFIG_BINFMT_AOUT=y
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+CONFIG_PM=y
+CONFIG_APM=y
+# CONFIG_APM_IGNORE_USER_SUSPEND is not set
+CONFIG_APM_CPU_IDLE=y
+CONFIG_APM_DISPLAY_BLANK=y
+CONFIG_APM_RTC_IS_GMT=y
+# CONFIG_ARTHUR is not set
+CONFIG_CMDLINE="<see .oe file>"
+# CONFIG_SHARPSL_BOOTLDR_PARAMS is not set
+CONFIG_ALIGNMENT_TRAP=y
+CONFIG_FREEPG_SIGNAL=y
+CONFIG_OOM_KILL_SURVIVAL=y
+CONFIG_DEVICEINFO=m
+CONFIG_POODLE_DEVICEINFO=m
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+# CONFIG_MTD_GEN_PROBE is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_AMDSTD is not set
+# CONFIG_MTD_SHARP is not set
+# CONFIG_MTD_JEDEC is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_LUBBOCK is not set
+# CONFIG_MTD_NORA is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_CDB89712 is not set
+# CONFIG_MTD_SA1100 is not set
+# CONFIG_MTD_DC21285 is not set
+# CONFIG_MTD_IQ80310 is not set
+# CONFIG_MTD_FORTUNET is not set
+# CONFIG_MTD_PXA_CERF is not set
+# CONFIG_MTD_EPXA10DB is not set
+# CONFIG_MTD_AUTCPU12 is not set
+# CONFIG_MTD_EDB7312 is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_DISCOVERY is not set
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_PCI is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_MTDROM_SA1100 is not set
+# CONFIG_MTD_MTDRAM_SA1100 is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_MTDRAM_SHARP_SL is not set
+# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_DOC1000 is not set
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOCPROBE is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_ECC=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+CONFIG_MTD_NAND_POST_BADBLOCK=y
+# CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS=y
+CONFIG_MTD_NAND_PAGE_CACHE=y
+CONFIG_MTD_NAND_SHARP_SL_POODLE=y
+CONFIG_MTD_NAND_SHARP_SL=y
+
+#
+# Plug and Play configuration
+#
+# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_INITRD=y
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_MD_RAID1 is not set
+# CONFIG_MD_RAID5 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_BLK_DEV_LVM is not set
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_FILTER=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_ARPD is not set
+# CONFIG_INET_ECN is not set
+# CONFIG_SYN_COOKIES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_CONNTRACK is not set
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
+# CONFIG_IP_NF_COMPAT_IPFWADM is not set
+# CONFIG_IPV6 is not set
+# CONFIG_KHTTPD is not set
+# CONFIG_ATM is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_LLC is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+# CONFIG_IPSEC is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_ETHERTAP is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_ARM_AM79C961A is not set
+# CONFIG_SUNLANCE is not set
+# CONFIG_SUNBMAC is not set
+# CONFIG_SUNQE is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_LANCE is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_MYRI_SBUS is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=y
+# CONFIG_PPP_SYNC_TTY is not set
+# CONFIG_PPP_DEFLATE is not set
+CONFIG_PPP_BSDCOMP=y
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_STRIP is not set
+# CONFIG_WAVELAN is not set
+# CONFIG_ARLAN is not set
+# CONFIG_AIRONET4500 is not set
+# CONFIG_AIRONET4500_NONCS is not set
+# CONFIG_AIRONET4500_PROC is not set
+# CONFIG_HERMES is not set
+# CONFIG_PCMCIA_HERMES is not set
+# CONFIG_AIRO_CS is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_NET_FC is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=y
+# CONFIG_PCMCIA_AXNET is not set
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_ARCNET_COM20020_CS is not set
+# CONFIG_PCMCIA_IBMTR is not set
+# CONFIG_NET_PCMCIA_RADIO is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+CONFIG_IRDA=y
+# CONFIG_IRLAN is not set
+CONFIG_IRNET=m
+CONFIG_IRCOMM=y
+# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+CONFIG_IRTTY_SIR=y
+# CONFIG_IRPORT_SIR is not set
+# CONFIG_DONGLE is not set
+# CONFIG_USB_IRDA is not set
+# CONFIG_NSC_FIR is not set
+# CONFIG_WINBOND_FIR is not set
+# CONFIG_TOSHIBA_FIR is not set
+# CONFIG_SMC_IRCC_FIR is not set
+# CONFIG_ALI_FIR is not set
+# CONFIG_VLSI_FIR is not set
+
+#
+# ATA/IDE/MFM/RLL support
+#
+CONFIG_IDE=y
+
+#
+# IDE, ATA and ATAPI Block devices
+#
+CONFIG_BLK_DEV_IDE=y
+# CONFIG_BLK_DEV_HD_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
+# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
+# CONFIG_BLK_DEV_IDEDISK_IBM is not set
+# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
+# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
+# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
+# CONFIG_BLK_DEV_IDEDISK_WD is not set
+# CONFIG_BLK_DEV_COMMERIAL is not set
+# CONFIG_BLK_DEV_TIVO is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_DMA_NONPCI is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
+# CONFIG_BLK_DEV_ATARAID is not set
+# CONFIG_BLK_DEV_ATARAID_PDC is not set
+# CONFIG_BLK_DEV_ATARAID_HPT is not set
+
+#
+# SCSI support
+#
+# CONFIG_SCSI is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input core support
+#
+CONFIG_INPUT=m
+CONFIG_INPUT_KEYBDEV=m
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_SERIAL=y
+# CONFIG_SERIAL_CONSOLE is not set
+CONFIG_SERIAL_SL_SERIES=y
+# CONFIG_SL_TS_PRESSURE is not set
+# CONFIG_BOOT_PRESSURE_ON is not set
+# CONFIG_SL7X0_POWER_KEY_OFF is not set
+# CONFIG_BOOT_POWER_KEY_OFF is not set
+# CONFIG_SL_3BUTTON_PATCH is not set
+# CONFIG_BOOT_3BUTTON_PATCH_ON is not set
+# CONFIG_SL_WRITE_TS is not set
+# CONFIG_BLUETOOTH_SL is not set
+# CONFIG_KBD_DEV_FILE is not set
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_ANAKIN is not set
+# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
+# CONFIG_SERIAL_AMBA is not set
+# CONFIG_SERIAL_AMBA_CONSOLE is not set
+# CONFIG_SERIAL_CLPS711X is not set
+# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
+# CONFIG_SERIAL_21285 is not set
+# CONFIG_SERIAL_21285_OLD is not set
+# CONFIG_SERIAL_21285_CONSOLE is not set
+# CONFIG_SERIAL_UART00 is not set
+# CONFIG_SERIAL_UART00_CONSOLE is not set
+# CONFIG_SERIAL_SA1100 is not set
+# CONFIG_SERIAL_SA1100_CONSOLE is not set
+# CONFIG_SERIAL_8250 is not set
+# CONFIG_SERIAL_8250_CONSOLE is not set
+# CONFIG_SERIAL_8250_EXTENDED is not set
+# CONFIG_SERIAL_8250_MANY_PORTS is not set
+# CONFIG_SERIAL_8250_SHARE_IRQ is not set
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_MULTIPORT is not set
+# CONFIG_SERIAL_8250_HUB6 is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+# CONFIG_L3_ALGOBIT is not set
+# CONFIG_L3_BIT_SA1100_GPIO is not set
+# CONFIG_L3_SA1111 is not set
+# CONFIG_BIT_SA1100_GPIO is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+# CONFIG_MOUSE is not set
+
+#
+# Joysticks
+#
+# CONFIG_INPUT_GAMEPORT is not set
+# CONFIG_INPUT_NS558 is not set
+# CONFIG_INPUT_LIGHTNING is not set
+# CONFIG_INPUT_PCIGAME is not set
+# CONFIG_INPUT_CS461X is not set
+# CONFIG_INPUT_EMU10K1 is not set
+# CONFIG_INPUT_SERIO is not set
+# CONFIG_INPUT_SERPORT is not set
+# CONFIG_INPUT_ANALOG is not set
+# CONFIG_INPUT_A3D is not set
+# CONFIG_INPUT_ADI is not set
+# CONFIG_INPUT_COBRA is not set
+# CONFIG_INPUT_GF2K is not set
+# CONFIG_INPUT_GRIP is not set
+# CONFIG_INPUT_INTERACT is not set
+# CONFIG_INPUT_TMDC is not set
+# CONFIG_INPUT_SIDEWINDER is not set
+# CONFIG_INPUT_IFORCE_USB is not set
+# CONFIG_INPUT_IFORCE_232 is not set
+# CONFIG_INPUT_WARRIOR is not set
+# CONFIG_INPUT_MAGELLAN is not set
+# CONFIG_INPUT_SPACEORB is not set
+# CONFIG_INPUT_SPACEBALL is not set
+# CONFIG_INPUT_STINGER is not set
+# CONFIG_INPUT_DB9 is not set
+# CONFIG_INPUT_GAMECON is not set
+# CONFIG_INPUT_TURBOGRAFX is not set
+# CONFIG_QIC02_TAPE is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_INTEL_RNG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+CONFIG_COTULLA_RTC=y
+CONFIG_ADS7846_TS=y
+# CONFIG_TOSA_TS is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+CONFIG_PCMCIA_SERIAL_CS=y
+CONFIG_PCMCIA_CHRDEV=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# File systems
+#
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FS_SYNC is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_ADFS_FS_RW is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_JBD is not set
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+# CONFIG_UMSDOS_FS is not set
+CONFIG_VFAT_FS=y
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_NAND=y
+CONFIG_JFFS2_PROC_FS=y
+CONFIG_JFFS2_NODEMERGE=y
+CONFIG_JFFS2_DYNFRAGTREE=y
+CONFIG_CRAMFS=y
+CONFIG_TMPFS=y
+CONFIG_RAMFS=y
+# CONFIG_ISO9660_FS is not set
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
+CONFIG_MINIX_FS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_RW is not set
+# CONFIG_HPFS_FS is not set
+CONFIG_PROC_FS=y
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+CONFIG_DEVPTS_FS=y
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_EXT2_FS=y
+# CONFIG_SYSV_FS is not set
+# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
+
+#
+# Network File Systems
+#
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_ROOT_NFS is not set
+# CONFIG_NFSD is not set
+# CONFIG_NFSD_V3 is not set
+CONFIG_SUNRPC=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+CONFIG_CIFS_POSIX=y
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+# CONFIG_ZISOFS_FS is not set
+CONFIG_ZLIB_FS_INFLATE=y
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+CONFIG_SMB_NLS=y
+CONFIG_NLS=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+CONFIG_NLS_CODEPAGE_932=y
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Console drivers
+#
+CONFIG_PC_KEYMAP=y
+# CONFIG_VGA_CONSOLE is not set
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_UNICON is not set
+# CONFIG_FB_COLLIE is not set
+# CONFIG_FB_ACORN is not set
+# CONFIG_FB_ANAKIN is not set
+# CONFIG_FB_CLPS711X is not set
+# CONFIG_FB_SA1100 is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_COTULLA is not set
+CONFIG_FB_POODLE=y
+CONFIG_POODLE_CONSISTENT_ALLOC=y
+# CONFIG_FB_CORGI is not set
+# CONFIG_FB_TOSA is not set
+# CONFIG_SHARP_LOGO_SCREEN is not set
+# CONFIG_SL_SYSCLK100 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_FBCON_ADVANCED=y
+# CONFIG_FBCON_MFB is not set
+# CONFIG_FBCON_CFB2 is not set
+# CONFIG_FBCON_CFB4 is not set
+# CONFIG_FBCON_CFB8 is not set
+CONFIG_FBCON_CFB16=y
+# CONFIG_FBCON_CFB24 is not set
+# CONFIG_FBCON_CFB32 is not set
+# CONFIG_FBCON_AFB is not set
+# CONFIG_FBCON_ILBM is not set
+# CONFIG_FBCON_IPLAN2P2 is not set
+# CONFIG_FBCON_IPLAN2P4 is not set
+# CONFIG_FBCON_IPLAN2P8 is not set
+# CONFIG_FBCON_MAC is not set
+# CONFIG_FBCON_VGA_PLANES is not set
+# CONFIG_FBCON_VGA is not set
+# CONFIG_FBCON_HGA is not set
+CONFIG_FBCON_ROTATE_R=y
+# CONFIG_FBCON_ROTATE_L is not set
+# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
+CONFIG_FBCON_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_5x8 is not set
+CONFIG_FONT_4x6=y
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_COLLIE_SSP is not set
+# CONFIG_SOUND_COLLIE_TC35143 is not set
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_MIDI_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+# CONFIG_MIDI_VIA82CXXX is not set
+# CONFIG_SOUND_OSS is not set
+# CONFIG_SOUND_WAVEARTIST is not set
+# CONFIG_SOUND_PXA_AC97 is not set
+CONFIG_SOUND_POODLE=y
+# CONFIG_SOUND_CORGI is not set
+# CONFIG_SOUND_TOSA is not set
+# CONFIG_BUZZER_TOSA is not set
+# CONFIG_SOUND_TVMIXER is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+# CONFIG_MCP_SA1100 is not set
+# CONFIG_MCP_UCB1200 is not set
+# CONFIG_MCP_UCB1200_AUDIO is not set
+# CONFIG_MCP_UCB1200_TS is not set
+# CONFIG_MCP_UCB1400_TS is not set
+
+#
+# USB support
+#
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_LONG_TIMEOUT is not set
+# CONFIG_USB_UHCI is not set
+# CONFIG_USB_UHCI_ALT is not set
+# CONFIG_USB_OHCI is not set
+# CONFIG_USB_OHCI_SA1111 is not set
+# CONFIG_USB_OHCI_TC6393 is not set
+# CONFIG_USB_USE_INTERNAL_MEMORY is not set
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_STORAGE is not set
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_HP8200e is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_HID is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_DC2XX is not set
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_SCANNER is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_CDCETHER is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_PL2303 is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+# CONFIG_USB_RIO500 is not set
+
+#
+# USB Device Support
+#
+CONFIG_USBD=m
+CONFIG_USBD_VENDORID=04DD
+CONFIG_USBD_PRODUCTID=8006
+CONFIG_USBD_PRODUCT_NAME="SL-5600"
+CONFIG_USBD_MANUFACTURER="Sharp"
+# CONFIG_USBD_USE_SERIAL_NUMBER is not set
+CONFIG_USBD_SELFPOWERED=y
+CONFIG_USBD_MONITOR=m
+# CONFIG_USBD_PROCFS is not set
+
+#
+# Network Function
+#
+CONFIG_USBD_NET=m
+CONFIG_USBD_NET_VENDORID=04DD
+CONFIG_USBD_NET_PRODUCTID=8006
+CONFIG_USBD_NET_IFNAME="usbd"
+CONFIG_USBD_NET_OUT_ENDPOINT=1
+CONFIG_USBD_NET_OUT_PKTSIZE=64
+CONFIG_USBD_NET_IN_ENDPOINT=2
+CONFIG_USBD_NET_IN_PKTSIZE=64
+CONFIG_USBD_NET_INT_ENDPOINT=3
+CONFIG_USBD_NET_INT_PKTSIZE=16
+# CONFIG_USBD_NET_ALWAYSUP is not set
+# CONFIG_USBD_NET_SAFE is not set
+CONFIG_USBD_NET_MDLM=y
+# CONFIG_USBD_NET_CDC is not set
+CONFIG_USBD_NET_REMOTE_MACADDR="400001000002"
+CONFIG_USBD_NET_REMOTE_OUI=400002
+CONFIG_USBD_MAC_AS_SERIAL_NUMBER=y
+CONFIG_USBD_NET_LOCAL_MACADDR="400001000001"
+CONFIG_USBD_NET_LOCAL_OUI=400001
+
+#
+# Serial Function
+#
+# CONFIG_USBD_SERIAL is not set
+
+#
+# Mass Storage Function
+#
+CONFIG_USBD_STORAGE=m
+CONFIG_USBD_STORAGE_VENDORID=0000
+CONFIG_USBD_STORAGE_PRODUCTID=0000
+CONFIG_USBD_STORAGE_OUT_ENDPOINT=1
+CONFIG_USBD_STORAGE_OUT_PKTSIZE=64
+CONFIG_USBD_STORAGE_IN_ENDPOINT=2
+CONFIG_USBD_STORAGE_IN_PKTSIZE=64
+CONFIG_USBD_STORAGE_INT_ENDPOINT=3
+CONFIG_USBD_STORAGE_INT_PKTSIZE=16
+CONFIG_USBD_STORAGE_DEF_DEVICE_NAME="/dev/hda1"
+
+#
+# USB Device Bus Interface Support
+#
+CONFIG_USBD_PXA_BUS=m
+# CONFIG_USBD_GENERIC_BUS is not set
+
+#
+# Bluetooth support
+#
+CONFIG_BLUEZ=m
+CONFIG_BLUEZ_L2CAP=m
+CONFIG_BLUEZ_SCO=m
+CONFIG_BLUEZ_RFCOMM=m
+CONFIG_BLUEZ_RFCOMM_TTY=y
+CONFIG_BLUEZ_BNEP=m
+CONFIG_BLUEZ_BNEP_MC_FILTER=y
+CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
+# CONFIG_BLUEZ_HIDP is not set
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BLUEZ_HCIUSB=m
+CONFIG_BLUEZ_HCIUSB_SCO=y
+CONFIG_BLUEZ_HCIUART=m
+CONFIG_BLUEZ_HCIUART_H4=y
+CONFIG_BLUEZ_HCIUART_BCSP=y
+CONFIG_BLUEZ_HCIUART_BCSP_TXCRC=y
+CONFIG_BLUEZ_HCIBFUSB=m
+CONFIG_BLUEZ_HCIDTL1=m
+CONFIG_BLUEZ_HCIBLUECARD=m
+CONFIG_BLUEZ_HCIBTUART=m
+CONFIG_BLUEZ_HCIVHCI=m
+CONFIG_BLUEZ_BT950=m
+
+#
+# Kernel hacking
+#
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_COREDUMP_SIGNAL is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_NO_PGT_CACHE is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_WAITQ is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_LL is not set
+# CONFIG_DEBUG_DC21285_PORT is not set
+# CONFIG_DEBUG_CLPS711X_UART2 is not set
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-poodle255 b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-poodle255
new file mode 100644
index 0000000000..5115729ed7
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-poodle255
@@ -0,0 +1,1158 @@
+#
+# Automatically generated by make menuconfig: don't edit
+#
+CONFIG_ARM=y
+# CONFIG_EISA is not set
+# CONFIG_SBUS is not set
+# CONFIG_MCA is not set
+CONFIG_UID16=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+# CONFIG_GENERIC_BUST_SPINLOCK is not set
+# CONFIG_GENERIC_ISA_DMA is not set
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+# CONFIG_OBSOLETE is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+CONFIG_KMOD=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_ANAKIN is not set
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_CAMELOT is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_MX1ADS is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_SHARK is not set
+
+#
+# Archimedes/A5000 Implementations
+#
+# CONFIG_ARCH_ARC is not set
+# CONFIG_ARCH_A5K is not set
+
+#
+# Footbridge Implementations
+#
+# CONFIG_ARCH_CATS is not set
+# CONFIG_ARCH_PERSONAL_SERVER is not set
+# CONFIG_ARCH_EBSA285_ADDIN is not set
+# CONFIG_ARCH_EBSA285_HOST is not set
+# CONFIG_ARCH_NETWINDER is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_ASSABET_NEPONSET is not set
+# CONFIG_SA1100_ADSBITSY is not set
+# CONFIG_SA1100_BRUTUS is not set
+# CONFIG_SA1100_CEP is not set
+# CONFIG_SA1100_CERF is not set
+# CONFIG_SA1100_COLLIE is not set
+# CONFIG_LOCOMO is not set
+# CONFIG_COLLIE_TS is not set
+# CONFIG_COLLIE_TR0 is not set
+# CONFIG_COLLIE_TR1 is not set
+# CONFIG_COLLIE_DEV is not set
+# CONFIG_COLLIE_G is not set
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+# CONFIG_SA1100_H3XXX is not set
+# CONFIG_SA1100_EXTENEX1 is not set
+# CONFIG_SA1100_FLEXANET is not set
+# CONFIG_SA1100_FREEBIRD is not set
+# CONFIG_SA1100_FRODO is not set
+# CONFIG_SA1100_GRAPHICSCLIENT is not set
+# CONFIG_SA1100_GRAPHICSMASTER is not set
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_HUW_WEBPANEL is not set
+# CONFIG_SA1100_ITSY is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_NANOENGINE is not set
+# CONFIG_SA1100_OMNIMETER is not set
+# CONFIG_SA1100_PANGOLIN is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_PT_SYSTEM3 is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SHERMAN is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_PFS168 is not set
+# CONFIG_SA1100_VICTOR is not set
+# CONFIG_SA1100_XP860 is not set
+# CONFIG_SA1100_YOPY is not set
+# CONFIG_SA1100_USB is not set
+# CONFIG_SA1100_USB_NETLINK is not set
+# CONFIG_SA1100_USB_CHAR is not set
+# CONFIG_H3600_SLEEVE is not set
+
+#
+# Intel PXA250/210 Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_ARCH_PXA_CERF is not set
+# CONFIG_COTULLA_DMA is not set
+# CONFIG_SABINAL_DISCOVERY is not set
+# CONFIG_ARCH_SABINAL is not set
+CONFIG_ARCH_PXA_POODLE=y
+# CONFIG_POODLE_TR0 is not set
+# CONFIG_ARCH_PXA_CORGI is not set
+# CONFIG_CORGI_TR0 is not set
+# CONFIG_CORGI_LCD_BUFF is not set
+# CONFIG_ARCH_PXA_SHEPHERD is not set
+# CONFIG_ARCH_PXA_HUSKY is not set
+# CONFIG_ARCH_PXA_BOXER is not set
+# CONFIG_ARCH_PXA_TOSA is not set
+# CONFIG_ARCH_PXA_TOSA_SKIP is not set
+CONFIG_ARCH_SHARP_SL=y
+CONFIG_SL_CCCR_CHANGE=y
+CONFIG_SL_CCCR242=y
+CONFIG_ARCH_SHARP_SL_E=y
+# CONFIG_ARCH_SHARP_SL_V is not set
+# CONFIG_ARCH_SHARP_SL_G is not set
+# CONFIG_ARCH_SHARP_SL_J is not set
+# CONFIG_ARCH_SHARP_SL_S is not set
+# CONFIG_ARCH_SHARP_SL_I is not set
+# CONFIG_PXA_USB is not set
+# CONFIG_PXA_USB_NETLINK is not set
+# CONFIG_PXA_USB_CHAR is not set
+
+#
+# CLPS711X/EP721X Implementations
+#
+# CONFIG_ARCH_AUTCPU12 is not set
+# CONFIG_ARCH_CDB89712 is not set
+# CONFIG_ARCH_CLEP7312 is not set
+# CONFIG_ARCH_EDB7211 is not set
+# CONFIG_ARCH_P720T is not set
+# CONFIG_ARCH_FORTUNET is not set
+# CONFIG_ARCH_EP7211 is not set
+# CONFIG_ARCH_EP7212 is not set
+# CONFIG_ARCH_ACORN is not set
+# CONFIG_FOOTBRIDGE is not set
+# CONFIG_FOOTBRIDGE_HOST is not set
+# CONFIG_FOOTBRIDGE_ADDIN is not set
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
+# CONFIG_CPU_32v3 is not set
+# CONFIG_CPU_32v4 is not set
+# CONFIG_CPU_ARM610 is not set
+# CONFIG_CPU_ARM710 is not set
+# CONFIG_CPU_ARM720T is not set
+# CONFIG_CPU_ARM920T is not set
+# CONFIG_CPU_ARM922T is not set
+# CONFIG_PLD is not set
+# CONFIG_CPU_ARM926T is not set
+# CONFIG_CPU_ARM1020 is not set
+# CONFIG_CPU_SA110 is not set
+# CONFIG_CPU_SA1100 is not set
+CONFIG_CPU_32v5=y
+CONFIG_CPU_XSCALE=y
+CONFIG_BATT=y
+#CONFIG_XSCALE_CACHE_ERRATA is not set
+CONFIG_ARM_THUMB=y
+CONFIG_ARM_FCSE=y
+# CONFIG_DISCONTIGMEM is not set
+# CONFIG_PREEMPT is not set
+
+#
+# General setup
+#
+# CONFIG_PCI is not set
+# CONFIG_ISA is not set
+# CONFIG_ISA_DMA is not set
+# CONFIG_ZBOOT_ROM is not set
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_HOTPLUG=y
+
+#
+# PCMCIA/CardBus support
+#
+CONFIG_PCMCIA=y
+# CONFIG_I82092 is not set
+# CONFIG_I82365 is not set
+# CONFIG_TCIC is not set
+# CONFIG_PCMCIA_CLPS6700 is not set
+# CONFIG_PCMCIA_SA1100 is not set
+CONFIG_PCMCIA_PXA=y
+CONFIG_NET=y
+CONFIG_SYSVIPC=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_KCORE_ELF=y
+# CONFIG_KCORE_AOUT is not set
+CONFIG_BINFMT_AOUT=y
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+CONFIG_PM=y
+CONFIG_APM=y
+# CONFIG_APM_IGNORE_USER_SUSPEND is not set
+CONFIG_APM_CPU_IDLE=y
+CONFIG_APM_DISPLAY_BLANK=y
+CONFIG_APM_RTC_IS_GMT=y
+# CONFIG_ARTHUR is not set
+CONFIG_CMDLINE="<see .oe file>"
+# CONFIG_SHARPSL_BOOTLDR_PARAMS is not set
+CONFIG_ALIGNMENT_TRAP=y
+CONFIG_FREEPG_SIGNAL=y
+CONFIG_OOM_KILL_SURVIVAL=y
+CONFIG_DEVICEINFO=m
+CONFIG_POODLE_DEVICEINFO=m
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+# CONFIG_MTD_GEN_PROBE is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_AMDSTD is not set
+# CONFIG_MTD_SHARP is not set
+# CONFIG_MTD_JEDEC is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_LUBBOCK is not set
+# CONFIG_MTD_NORA is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_CDB89712 is not set
+# CONFIG_MTD_SA1100 is not set
+# CONFIG_MTD_DC21285 is not set
+# CONFIG_MTD_IQ80310 is not set
+# CONFIG_MTD_FORTUNET is not set
+# CONFIG_MTD_PXA_CERF is not set
+# CONFIG_MTD_EPXA10DB is not set
+# CONFIG_MTD_AUTCPU12 is not set
+# CONFIG_MTD_EDB7312 is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_DISCOVERY is not set
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_PCI is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_MTDROM_SA1100 is not set
+# CONFIG_MTD_MTDRAM_SA1100 is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_MTDRAM_SHARP_SL is not set
+# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_DOC1000 is not set
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOCPROBE is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_ECC=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+CONFIG_MTD_NAND_POST_BADBLOCK=y
+# CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS=y
+CONFIG_MTD_NAND_PAGE_CACHE=y
+CONFIG_MTD_NAND_SHARP_SL_POODLE=y
+CONFIG_MTD_NAND_SHARP_SL=y
+
+#
+# Plug and Play configuration
+#
+# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_INITRD=y
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_MD_RAID1 is not set
+# CONFIG_MD_RAID5 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_BLK_DEV_LVM is not set
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_FILTER=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_ARPD is not set
+# CONFIG_INET_ECN is not set
+# CONFIG_SYN_COOKIES is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_CONNTRACK is not set
+# CONFIG_IP_NF_QUEUE is not set
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
+# CONFIG_IP_NF_COMPAT_IPFWADM is not set
+# CONFIG_IPV6 is not set
+# CONFIG_KHTTPD is not set
+# CONFIG_ATM is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_LLC is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+# CONFIG_IPSEC is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_ETHERTAP is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_ARM_AM79C961A is not set
+# CONFIG_SUNLANCE is not set
+# CONFIG_SUNBMAC is not set
+# CONFIG_SUNQE is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_LANCE is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_MYRI_SBUS is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=y
+# CONFIG_PPP_SYNC_TTY is not set
+# CONFIG_PPP_DEFLATE is not set
+CONFIG_PPP_BSDCOMP=y
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_STRIP is not set
+# CONFIG_WAVELAN is not set
+# CONFIG_ARLAN is not set
+# CONFIG_AIRONET4500 is not set
+# CONFIG_AIRONET4500_NONCS is not set
+# CONFIG_AIRONET4500_PROC is not set
+# CONFIG_HERMES is not set
+# CONFIG_PCMCIA_HERMES is not set
+# CONFIG_AIRO_CS is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_NET_FC is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=y
+# CONFIG_PCMCIA_AXNET is not set
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_ARCNET_COM20020_CS is not set
+# CONFIG_PCMCIA_IBMTR is not set
+# CONFIG_NET_PCMCIA_RADIO is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+CONFIG_IRDA=y
+# CONFIG_IRLAN is not set
+CONFIG_IRNET=m
+CONFIG_IRCOMM=y
+# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+CONFIG_IRTTY_SIR=y
+# CONFIG_IRPORT_SIR is not set
+# CONFIG_DONGLE is not set
+# CONFIG_USB_IRDA is not set
+# CONFIG_NSC_FIR is not set
+# CONFIG_WINBOND_FIR is not set
+# CONFIG_TOSHIBA_FIR is not set
+# CONFIG_SMC_IRCC_FIR is not set
+# CONFIG_ALI_FIR is not set
+# CONFIG_VLSI_FIR is not set
+
+#
+# ATA/IDE/MFM/RLL support
+#
+CONFIG_IDE=y
+
+#
+# IDE, ATA and ATAPI Block devices
+#
+CONFIG_BLK_DEV_IDE=y
+# CONFIG_BLK_DEV_HD_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
+# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
+# CONFIG_BLK_DEV_IDEDISK_IBM is not set
+# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
+# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
+# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
+# CONFIG_BLK_DEV_IDEDISK_WD is not set
+# CONFIG_BLK_DEV_COMMERIAL is not set
+# CONFIG_BLK_DEV_TIVO is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_DMA_NONPCI is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
+# CONFIG_BLK_DEV_ATARAID is not set
+# CONFIG_BLK_DEV_ATARAID_PDC is not set
+# CONFIG_BLK_DEV_ATARAID_HPT is not set
+
+#
+# SCSI support
+#
+# CONFIG_SCSI is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input core support
+#
+CONFIG_INPUT=m
+CONFIG_INPUT_KEYBDEV=m
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_SERIAL=y
+# CONFIG_SERIAL_CONSOLE is not set
+CONFIG_SERIAL_SL_SERIES=y
+# CONFIG_SL_TS_PRESSURE is not set
+# CONFIG_BOOT_PRESSURE_ON is not set
+# CONFIG_SL7X0_POWER_KEY_OFF is not set
+# CONFIG_BOOT_POWER_KEY_OFF is not set
+# CONFIG_SL_3BUTTON_PATCH is not set
+# CONFIG_BOOT_3BUTTON_PATCH_ON is not set
+# CONFIG_SL_WRITE_TS is not set
+# CONFIG_BLUETOOTH_SL is not set
+# CONFIG_KBD_DEV_FILE is not set
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_ANAKIN is not set
+# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
+# CONFIG_SERIAL_AMBA is not set
+# CONFIG_SERIAL_AMBA_CONSOLE is not set
+# CONFIG_SERIAL_CLPS711X is not set
+# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
+# CONFIG_SERIAL_21285 is not set
+# CONFIG_SERIAL_21285_OLD is not set
+# CONFIG_SERIAL_21285_CONSOLE is not set
+# CONFIG_SERIAL_UART00 is not set
+# CONFIG_SERIAL_UART00_CONSOLE is not set
+# CONFIG_SERIAL_SA1100 is not set
+# CONFIG_SERIAL_SA1100_CONSOLE is not set
+# CONFIG_SERIAL_8250 is not set
+# CONFIG_SERIAL_8250_CONSOLE is not set
+# CONFIG_SERIAL_8250_EXTENDED is not set
+# CONFIG_SERIAL_8250_MANY_PORTS is not set
+# CONFIG_SERIAL_8250_SHARE_IRQ is not set
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_MULTIPORT is not set
+# CONFIG_SERIAL_8250_HUB6 is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+# CONFIG_L3_ALGOBIT is not set
+# CONFIG_L3_BIT_SA1100_GPIO is not set
+# CONFIG_L3_SA1111 is not set
+# CONFIG_BIT_SA1100_GPIO is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+# CONFIG_MOUSE is not set
+
+#
+# Joysticks
+#
+# CONFIG_INPUT_GAMEPORT is not set
+# CONFIG_INPUT_NS558 is not set
+# CONFIG_INPUT_LIGHTNING is not set
+# CONFIG_INPUT_PCIGAME is not set
+# CONFIG_INPUT_CS461X is not set
+# CONFIG_INPUT_EMU10K1 is not set
+# CONFIG_INPUT_SERIO is not set
+# CONFIG_INPUT_SERPORT is not set
+# CONFIG_INPUT_ANALOG is not set
+# CONFIG_INPUT_A3D is not set
+# CONFIG_INPUT_ADI is not set
+# CONFIG_INPUT_COBRA is not set
+# CONFIG_INPUT_GF2K is not set
+# CONFIG_INPUT_GRIP is not set
+# CONFIG_INPUT_INTERACT is not set
+# CONFIG_INPUT_TMDC is not set
+# CONFIG_INPUT_SIDEWINDER is not set
+# CONFIG_INPUT_IFORCE_USB is not set
+# CONFIG_INPUT_IFORCE_232 is not set
+# CONFIG_INPUT_WARRIOR is not set
+# CONFIG_INPUT_MAGELLAN is not set
+# CONFIG_INPUT_SPACEORB is not set
+# CONFIG_INPUT_SPACEBALL is not set
+# CONFIG_INPUT_STINGER is not set
+# CONFIG_INPUT_DB9 is not set
+# CONFIG_INPUT_GAMECON is not set
+# CONFIG_INPUT_TURBOGRAFX is not set
+# CONFIG_QIC02_TAPE is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_INTEL_RNG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+CONFIG_COTULLA_RTC=y
+CONFIG_ADS7846_TS=y
+# CONFIG_TOSA_TS is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+CONFIG_PCMCIA_SERIAL_CS=y
+CONFIG_PCMCIA_CHRDEV=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# File systems
+#
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FS_SYNC is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_ADFS_FS_RW is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_JBD is not set
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+# CONFIG_UMSDOS_FS is not set
+CONFIG_VFAT_FS=y
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_NAND=y
+CONFIG_JFFS2_PROC_FS=y
+CONFIG_JFFS2_NODEMERGE=y
+CONFIG_JFFS2_DYNFRAGTREE=y
+CONFIG_CRAMFS=y
+CONFIG_TMPFS=y
+CONFIG_RAMFS=y
+# CONFIG_ISO9660_FS is not set
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
+CONFIG_MINIX_FS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_RW is not set
+# CONFIG_HPFS_FS is not set
+CONFIG_PROC_FS=y
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+CONFIG_DEVPTS_FS=y
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_EXT2_FS=y
+# CONFIG_SYSV_FS is not set
+# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
+
+#
+# Network File Systems
+#
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_ROOT_NFS is not set
+# CONFIG_NFSD is not set
+# CONFIG_NFSD_V3 is not set
+CONFIG_SUNRPC=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+CONFIG_CIFS_POSIX=y
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+# CONFIG_ZISOFS_FS is not set
+CONFIG_ZLIB_FS_INFLATE=y
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+CONFIG_SMB_NLS=y
+CONFIG_NLS=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+CONFIG_NLS_CODEPAGE_932=y
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Console drivers
+#
+CONFIG_PC_KEYMAP=y
+# CONFIG_VGA_CONSOLE is not set
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_UNICON is not set
+# CONFIG_FB_COLLIE is not set
+# CONFIG_FB_ACORN is not set
+# CONFIG_FB_ANAKIN is not set
+# CONFIG_FB_CLPS711X is not set
+# CONFIG_FB_SA1100 is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_COTULLA is not set
+CONFIG_FB_POODLE=y
+CONFIG_POODLE_CONSISTENT_ALLOC=y
+# CONFIG_FB_CORGI is not set
+# CONFIG_FB_TOSA is not set
+# CONFIG_SHARP_LOGO_SCREEN is not set
+# CONFIG_SL_SYSCLK100 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_FBCON_ADVANCED=y
+# CONFIG_FBCON_MFB is not set
+# CONFIG_FBCON_CFB2 is not set
+# CONFIG_FBCON_CFB4 is not set
+# CONFIG_FBCON_CFB8 is not set
+CONFIG_FBCON_CFB16=y
+# CONFIG_FBCON_CFB24 is not set
+# CONFIG_FBCON_CFB32 is not set
+# CONFIG_FBCON_AFB is not set
+# CONFIG_FBCON_ILBM is not set
+# CONFIG_FBCON_IPLAN2P2 is not set
+# CONFIG_FBCON_IPLAN2P4 is not set
+# CONFIG_FBCON_IPLAN2P8 is not set
+# CONFIG_FBCON_MAC is not set
+# CONFIG_FBCON_VGA_PLANES is not set
+# CONFIG_FBCON_VGA is not set
+# CONFIG_FBCON_HGA is not set
+CONFIG_FBCON_ROTATE_R=y
+# CONFIG_FBCON_ROTATE_L is not set
+# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
+CONFIG_FBCON_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_5x8 is not set
+CONFIG_FONT_4x6=y
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_COLLIE_SSP is not set
+# CONFIG_SOUND_COLLIE_TC35143 is not set
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_MIDI_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+# CONFIG_MIDI_VIA82CXXX is not set
+# CONFIG_SOUND_OSS is not set
+# CONFIG_SOUND_WAVEARTIST is not set
+# CONFIG_SOUND_PXA_AC97 is not set
+CONFIG_SOUND_POODLE=y
+# CONFIG_SOUND_CORGI is not set
+# CONFIG_SOUND_TOSA is not set
+# CONFIG_BUZZER_TOSA is not set
+# CONFIG_SOUND_TVMIXER is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+# CONFIG_MCP_SA1100 is not set
+# CONFIG_MCP_UCB1200 is not set
+# CONFIG_MCP_UCB1200_AUDIO is not set
+# CONFIG_MCP_UCB1200_TS is not set
+# CONFIG_MCP_UCB1400_TS is not set
+
+#
+# USB support
+#
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_LONG_TIMEOUT is not set
+# CONFIG_USB_UHCI is not set
+# CONFIG_USB_UHCI_ALT is not set
+# CONFIG_USB_OHCI is not set
+# CONFIG_USB_OHCI_SA1111 is not set
+# CONFIG_USB_OHCI_TC6393 is not set
+# CONFIG_USB_USE_INTERNAL_MEMORY is not set
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_STORAGE is not set
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_HP8200e is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_HID is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_DC2XX is not set
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_SCANNER is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_CDCETHER is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_PL2303 is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+# CONFIG_USB_RIO500 is not set
+
+#
+# USB Device Support
+#
+CONFIG_USBD=m
+CONFIG_USBD_VENDORID=04DD
+CONFIG_USBD_PRODUCTID=8006
+CONFIG_USBD_PRODUCT_NAME="SL-5600"
+CONFIG_USBD_MANUFACTURER="Sharp"
+# CONFIG_USBD_USE_SERIAL_NUMBER is not set
+CONFIG_USBD_SELFPOWERED=y
+CONFIG_USBD_MONITOR=m
+# CONFIG_USBD_PROCFS is not set
+
+#
+# Network Function
+#
+CONFIG_USBD_NET=m
+CONFIG_USBD_NET_VENDORID=04DD
+CONFIG_USBD_NET_PRODUCTID=8006
+CONFIG_USBD_NET_IFNAME="usbd"
+CONFIG_USBD_NET_OUT_ENDPOINT=1
+CONFIG_USBD_NET_OUT_PKTSIZE=64
+CONFIG_USBD_NET_IN_ENDPOINT=2
+CONFIG_USBD_NET_IN_PKTSIZE=64
+CONFIG_USBD_NET_INT_ENDPOINT=3
+CONFIG_USBD_NET_INT_PKTSIZE=16
+# CONFIG_USBD_NET_ALWAYSUP is not set
+# CONFIG_USBD_NET_SAFE is not set
+CONFIG_USBD_NET_MDLM=y
+# CONFIG_USBD_NET_CDC is not set
+CONFIG_USBD_NET_REMOTE_MACADDR="400001000002"
+CONFIG_USBD_NET_REMOTE_OUI=400002
+CONFIG_USBD_MAC_AS_SERIAL_NUMBER=y
+CONFIG_USBD_NET_LOCAL_MACADDR="400001000001"
+CONFIG_USBD_NET_LOCAL_OUI=400001
+
+#
+# Serial Function
+#
+# CONFIG_USBD_SERIAL is not set
+
+#
+# Mass Storage Function
+#
+CONFIG_USBD_STORAGE=m
+CONFIG_USBD_STORAGE_VENDORID=0000
+CONFIG_USBD_STORAGE_PRODUCTID=0000
+CONFIG_USBD_STORAGE_OUT_ENDPOINT=1
+CONFIG_USBD_STORAGE_OUT_PKTSIZE=64
+CONFIG_USBD_STORAGE_IN_ENDPOINT=2
+CONFIG_USBD_STORAGE_IN_PKTSIZE=64
+CONFIG_USBD_STORAGE_INT_ENDPOINT=3
+CONFIG_USBD_STORAGE_INT_PKTSIZE=16
+CONFIG_USBD_STORAGE_DEF_DEVICE_NAME="/dev/hda1"
+
+#
+# USB Device Bus Interface Support
+#
+CONFIG_USBD_PXA_BUS=m
+# CONFIG_USBD_GENERIC_BUS is not set
+
+#
+# Bluetooth support
+#
+CONFIG_BLUEZ=m
+CONFIG_BLUEZ_L2CAP=m
+CONFIG_BLUEZ_SCO=m
+CONFIG_BLUEZ_RFCOMM=m
+CONFIG_BLUEZ_RFCOMM_TTY=y
+CONFIG_BLUEZ_BNEP=m
+CONFIG_BLUEZ_BNEP_MC_FILTER=y
+CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
+# CONFIG_BLUEZ_HIDP is not set
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BLUEZ_HCIUSB=m
+CONFIG_BLUEZ_HCIUSB_SCO=y
+CONFIG_BLUEZ_HCIUART=m
+CONFIG_BLUEZ_HCIUART_H4=y
+CONFIG_BLUEZ_HCIUART_BCSP=y
+CONFIG_BLUEZ_HCIUART_BCSP_TXCRC=y
+CONFIG_BLUEZ_HCIBFUSB=m
+CONFIG_BLUEZ_HCIDTL1=m
+CONFIG_BLUEZ_HCIBLUECARD=m
+CONFIG_BLUEZ_HCIBTUART=m
+CONFIG_BLUEZ_HCIVHCI=m
+CONFIG_BLUEZ_BT950=m
+
+#
+# Kernel hacking
+#
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_COREDUMP_SIGNAL is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_NO_PGT_CACHE is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_WAITQ is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_LL is not set
+# CONFIG_DEBUG_DC21285_PORT is not set
+# CONFIG_DEBUG_CLPS711X_UART2 is not set
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-shepherd b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-shepherd
new file mode 100644
index 0000000000..72da41cf56
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-shepherd
@@ -0,0 +1,1303 @@
+#
+# Automatically generated make config: don't edit
+#
+CONFIG_ARM=y
+# CONFIG_EISA is not set
+# CONFIG_SBUS is not set
+# CONFIG_MCA is not set
+CONFIG_UID16=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+# CONFIG_GENERIC_BUST_SPINLOCK is not set
+# CONFIG_GENERIC_ISA_DMA is not set
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+# CONFIG_OBSOLETE is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+CONFIG_KMOD=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_ANAKIN is not set
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_CAMELOT is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_MX1ADS is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_SHARK is not set
+
+#
+# Archimedes/A5000 Implementations
+#
+
+#
+# Archimedes/A5000 Implementations (select only ONE)
+#
+# CONFIG_ARCH_ARC is not set
+# CONFIG_ARCH_A5K is not set
+
+#
+# Footbridge Implementations
+#
+# CONFIG_ARCH_CATS is not set
+# CONFIG_ARCH_PERSONAL_SERVER is not set
+# CONFIG_ARCH_EBSA285_ADDIN is not set
+# CONFIG_ARCH_EBSA285_HOST is not set
+# CONFIG_ARCH_NETWINDER is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_ASSABET_NEPONSET is not set
+# CONFIG_SA1100_ADSBITSY is not set
+# CONFIG_SA1100_BRUTUS is not set
+# CONFIG_SA1100_CEP is not set
+# CONFIG_SA1100_CERF is not set
+# CONFIG_SA1100_COLLIE is not set
+# CONFIG_LOCOMO is not set
+# CONFIG_COLLIE_TS is not set
+# CONFIG_COLLIE_TR0 is not set
+# CONFIG_COLLIE_TR1 is not set
+# CONFIG_COLLIE_DEV is not set
+# CONFIG_COLLIE_G is not set
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+# CONFIG_SA1100_H3XXX is not set
+# CONFIG_SA1100_EXTENEX1 is not set
+# CONFIG_SA1100_FLEXANET is not set
+# CONFIG_SA1100_FREEBIRD is not set
+# CONFIG_SA1100_FRODO is not set
+# CONFIG_SA1100_GRAPHICSCLIENT is not set
+# CONFIG_SA1100_GRAPHICSMASTER is not set
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_HUW_WEBPANEL is not set
+# CONFIG_SA1100_ITSY is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_NANOENGINE is not set
+# CONFIG_SA1100_OMNIMETER is not set
+# CONFIG_SA1100_PANGOLIN is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_PT_SYSTEM3 is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SHERMAN is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_PFS168 is not set
+# CONFIG_SA1100_VICTOR is not set
+# CONFIG_SA1100_XP860 is not set
+# CONFIG_SA1100_YOPY is not set
+# CONFIG_SA1100_USB is not set
+# CONFIG_SA1100_USB_NETLINK is not set
+# CONFIG_SA1100_USB_CHAR is not set
+# CONFIG_H3600_SLEEVE is not set
+
+#
+# Intel PXA250/210 Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_ARCH_PXA_CERF is not set
+# CONFIG_COTULLA_DMA is not set
+# CONFIG_SABINAL_DISCOVERY is not set
+# CONFIG_ARCH_SABINAL is not set
+# CONFIG_ARCH_PXA_POODLE is not set
+# CONFIG_POODLE_TR0 is not set
+CONFIG_ARCH_PXA_CORGI=y
+# CONFIG_CORGI_TR0 is not set
+CONFIG_CORGI_LCD_BUFF=y
+CONFIG_ARCH_PXA_SHEPHERD=y
+# CONFIG_ARCH_PXA_HUSKY is not set
+# CONFIG_ARCH_PXA_BOXER is not set
+# CONFIG_ARCH_PXA_TOSA is not set
+# CONFIG_ARCH_PXA_TOSA_SKIP is not set
+CONFIG_ARCH_SHARP_SL=y
+CONFIG_SL_CCCR_CHANGE=y
+# CONFIG_SL_CCCR242 is not set
+# CONFIG_SL_CCCR162 is not set
+
+#
+# Language type
+#
+CONFIG_ARCH_SHARP_SL_E=y
+# CONFIG_ARCH_SHARP_SL_V is not set
+# CONFIG_ARCH_SHARP_SL_G is not set
+# CONFIG_ARCH_SHARP_SL_J is not set
+# CONFIG_ARCH_SHARP_SL_S is not set
+# CONFIG_ARCH_SHARP_SL_I is not set
+# CONFIG_PXA_USB is not set
+# CONFIG_PXA_USB_NETLINK is not set
+# CONFIG_PXA_USB_CHAR is not set
+
+#
+# CLPS711X/EP721X Implementations
+#
+# CONFIG_ARCH_AUTCPU12 is not set
+# CONFIG_ARCH_CDB89712 is not set
+# CONFIG_ARCH_CLEP7312 is not set
+# CONFIG_ARCH_EDB7211 is not set
+# CONFIG_ARCH_P720T is not set
+# CONFIG_ARCH_FORTUNET is not set
+# CONFIG_ARCH_EP7211 is not set
+# CONFIG_ARCH_EP7212 is not set
+# CONFIG_ARCH_ACORN is not set
+# CONFIG_FOOTBRIDGE is not set
+# CONFIG_FOOTBRIDGE_HOST is not set
+# CONFIG_FOOTBRIDGE_ADDIN is not set
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
+
+#
+# Processor Type
+#
+# CONFIG_CPU_32v3 is not set
+# CONFIG_CPU_32v4 is not set
+# CONFIG_CPU_ARM610 is not set
+# CONFIG_CPU_ARM710 is not set
+# CONFIG_CPU_ARM720T is not set
+# CONFIG_CPU_ARM920T is not set
+# CONFIG_CPU_ARM922T is not set
+# CONFIG_PLD is not set
+# CONFIG_CPU_ARM926T is not set
+# CONFIG_CPU_ARM1020 is not set
+# CONFIG_CPU_SA110 is not set
+# CONFIG_CPU_SA1100 is not set
+CONFIG_CPU_32v5=y
+CONFIG_CPU_XSCALE=y
+CONFIG_BATT=y
+# CONFIG_XSCALE_CACHE_ERRATA is not set
+CONFIG_ARM_THUMB=y
+CONFIG_ARM_FCSE=y
+# CONFIG_DISCONTIGMEM is not set
+# CONFIG_PREEMPT is not set
+
+#
+# General setup
+#
+# CONFIG_PCI is not set
+# CONFIG_ISA is not set
+# CONFIG_ISA_DMA is not set
+# CONFIG_ZBOOT_ROM is not set
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_HOTPLUG=y
+
+#
+# PCMCIA/CardBus support
+#
+CONFIG_PCMCIA=y
+# CONFIG_I82092 is not set
+# CONFIG_I82365 is not set
+# CONFIG_TCIC is not set
+# CONFIG_PCMCIA_CLPS6700 is not set
+# CONFIG_PCMCIA_SA1100 is not set
+CONFIG_PCMCIA_PXA=y
+CONFIG_NET=y
+CONFIG_SYSVIPC=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+
+#
+# At least one math emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_KCORE_ELF=y
+# CONFIG_KCORE_AOUT is not set
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+CONFIG_PM=y
+CONFIG_APM=y
+# CONFIG_APM_IGNORE_USER_SUSPEND is not set
+CONFIG_APM_CPU_IDLE=y
+CONFIG_APM_DISPLAY_BLANK=y
+CONFIG_APM_RTC_IS_GMT=y
+# CONFIG_ARTHUR is not set
+CONFIG_CMDLINE="<see .oe file>"
+# CONFIG_SHARPSL_BOOTLDR_PARAMS is not set
+CONFIG_ALIGNMENT_TRAP=y
+CONFIG_FREEPG_SIGNAL=y
+CONFIG_OOM_KILL_SURVIVAL=y
+CONFIG_DEVICEINFO=m
+CONFIG_CORGI_DEVICEINFO=m
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+# CONFIG_MTD_GEN_PROBE is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_AMDSTD is not set
+# CONFIG_MTD_SHARP is not set
+# CONFIG_MTD_JEDEC is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_LUBBOCK is not set
+# CONFIG_MTD_NORA is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_CDB89712 is not set
+# CONFIG_MTD_SA1100 is not set
+# CONFIG_MTD_DC21285 is not set
+# CONFIG_MTD_IQ80310 is not set
+# CONFIG_MTD_FORTUNET is not set
+# CONFIG_MTD_PXA_CERF is not set
+# CONFIG_MTD_EPXA10DB is not set
+# CONFIG_MTD_AUTCPU12 is not set
+# CONFIG_MTD_EDB7312 is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_DISCOVERY is not set
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_PCI is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_MTDROM_SA1100 is not set
+# CONFIG_MTD_MTDRAM_SA1100 is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_MTDRAM_SHARP_SL is not set
+# CONFIG_MTD_BLKMTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC1000 is not set
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOCPROBE is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_ECC=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+CONFIG_MTD_NAND_POST_BADBLOCK=y
+# CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS=y
+CONFIG_MTD_NAND_PAGE_CACHE=y
+CONFIG_MTD_NAND_SHARP_SL_CORGI=y
+CONFIG_MTD_NAND_SHARP_SL=y
+
+#
+# Plug and Play configuration
+#
+# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_MD_RAID1 is not set
+# CONFIG_MD_RAID5 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_BLK_DEV_LVM is not set
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_FILTER=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_ARPD is not set
+# CONFIG_INET_ECN is not set
+CONFIG_SYN_COOKIES=y
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_CONNTRACK is not set
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=y
+# CONFIG_IP_NF_MATCH_LIMIT is not set
+# CONFIG_IP_NF_MATCH_MAC is not set
+# CONFIG_IP_NF_MATCH_MARK is not set
+# CONFIG_IP_NF_MATCH_MULTIPORT is not set
+# CONFIG_IP_NF_MATCH_TOS is not set
+# CONFIG_IP_NF_MATCH_AH_ESP is not set
+# CONFIG_IP_NF_MATCH_LENGTH is not set
+# CONFIG_IP_NF_MATCH_TTL is not set
+# CONFIG_IP_NF_MATCH_TCPMSS is not set
+# CONFIG_IP_NF_MATCH_UNCLEAN is not set
+# CONFIG_IP_NF_MATCH_OWNER is not set
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+# CONFIG_IP_NF_TARGET_MIRROR is not set
+# CONFIG_IP_NF_MANGLE is not set
+CONFIG_IP_NF_TARGET_LOG=y
+# CONFIG_IP_NF_TARGET_ULOG is not set
+# CONFIG_IP_NF_TARGET_TCPMSS is not set
+CONFIG_IPV6=y
+
+#
+# IPv6: Netfilter Configuration
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=y
+# CONFIG_IP6_NF_MATCH_LIMIT is not set
+# CONFIG_IP6_NF_MATCH_MAC is not set
+# CONFIG_IP6_NF_MATCH_MULTIPORT is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_MARK is not set
+CONFIG_IP6_NF_FILTER=y
+CONFIG_IP6_NF_TARGET_LOG=y
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_KHTTPD is not set
+# CONFIG_ATM is not set
+# CONFIG_VLAN_8021Q is not set
+
+#
+#
+#
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_LLC is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+CONFIG_IPSEC=m
+
+#
+# IPSec options (Openswan)
+#
+CONFIG_IPSEC_IPIP=y
+CONFIG_IPSEC_AH=y
+# CONFIG_IPSEC_AUTH_HMAC_MD5 is not set
+CONFIG_IPSEC_AUTH_HMAC_SHA1=y
+CONFIG_IPSEC_ESP=y
+CONFIG_IPSEC_ENC_3DES=y
+# CONFIG_IPSEC_ENC_AES is not set
+CONFIG_IPSEC_ALG=y
+CONFIG_IPSEC_IPCOMP=y
+CONFIG_IPSEC_DEBUG=y
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_ETHERTAP is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_ARM_AM79C961A is not set
+# CONFIG_SUNLANCE is not set
+# CONFIG_SUNBMAC is not set
+# CONFIG_SUNQE is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_LANCE is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_MYRI_SBUS is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=y
+# CONFIG_PPP_SYNC_TTY is not set
+# CONFIG_PPP_DEFLATE is not set
+CONFIG_PPP_BSDCOMP=y
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_STRIP is not set
+# CONFIG_WAVELAN is not set
+# CONFIG_ARLAN is not set
+# CONFIG_AIRONET4500 is not set
+# CONFIG_AIRONET4500_NONCS is not set
+# CONFIG_AIRONET4500_PROC is not set
+# CONFIG_HERMES is not set
+
+#
+# Wireless Pcmcia cards support
+#
+# CONFIG_PCMCIA_HERMES is not set
+# CONFIG_AIRO_CS is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_NET_FC is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=y
+# CONFIG_PCMCIA_AXNET is not set
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_ARCNET_COM20020_CS is not set
+# CONFIG_PCMCIA_IBMTR is not set
+# CONFIG_NET_PCMCIA_RADIO is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+# CONFIG_IRLAN is not set
+CONFIG_IRNET=m
+CONFIG_IRCOMM=y
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_NSC_FIR is not set
+# CONFIG_WINBOND_FIR is not set
+# CONFIG_TOSHIBA_FIR is not set
+# CONFIG_SMC_IRCC_FIR is not set
+# CONFIG_ALI_FIR is not set
+# CONFIG_VLSI_FIR is not set
+
+#
+# ATA/IDE/MFM/RLL support
+#
+CONFIG_IDE=y
+
+#
+# IDE, ATA and ATAPI Block devices
+#
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_HD_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
+# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
+# CONFIG_BLK_DEV_IDEDISK_IBM is not set
+# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
+# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
+# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
+# CONFIG_BLK_DEV_IDEDISK_WD is not set
+# CONFIG_BLK_DEV_COMMERIAL is not set
+# CONFIG_BLK_DEV_TIVO is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_DMA_NONPCI is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
+# CONFIG_BLK_DEV_ATARAID is not set
+# CONFIG_BLK_DEV_ATARAID_PDC is not set
+# CONFIG_BLK_DEV_ATARAID_HPT is not set
+
+#
+# SCSI support
+#
+# CONFIG_SCSI is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input core support
+#
+# CONFIG_INPUT is not set
+# CONFIG_INPUT_KEYBDEV is not set
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_UINPUT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_SERIAL=y
+CONFIG_SERIAL_CONSOLE=y
+CONFIG_SERIAL_SL_SERIES=y
+# CONFIG_SL_TS_PRESSURE is not set
+# CONFIG_BOOT_PRESSURE_ON is not set
+CONFIG_SL7X0_POWER_KEY_OFF=y
+CONFIG_BOOT_POWER_KEY_OFF=y
+# CONFIG_SL_3BUTTON_PATCH is not set
+# CONFIG_BOOT_3BUTTON_PATCH_ON is not set
+# CONFIG_SL_WRITE_TS is not set
+# CONFIG_BLUETOOTH_SL is not set
+# CONFIG_KBD_DEV_FILE is not set
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_ANAKIN is not set
+# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
+# CONFIG_SERIAL_AMBA is not set
+# CONFIG_SERIAL_AMBA_CONSOLE is not set
+# CONFIG_SERIAL_CLPS711X is not set
+# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
+# CONFIG_SERIAL_21285 is not set
+# CONFIG_SERIAL_21285_OLD is not set
+# CONFIG_SERIAL_21285_CONSOLE is not set
+# CONFIG_SERIAL_UART00 is not set
+# CONFIG_SERIAL_UART00_CONSOLE is not set
+# CONFIG_SERIAL_SA1100 is not set
+# CONFIG_SERIAL_SA1100_CONSOLE is not set
+# CONFIG_SERIAL_8250 is not set
+# CONFIG_SERIAL_8250_CONSOLE is not set
+# CONFIG_SERIAL_8250_EXTENDED is not set
+# CONFIG_SERIAL_8250_MANY_PORTS is not set
+# CONFIG_SERIAL_8250_SHARE_IRQ is not set
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_MULTIPORT is not set
+# CONFIG_SERIAL_8250_HUB6 is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+# CONFIG_L3_ALGOBIT is not set
+# CONFIG_L3_BIT_SA1100_GPIO is not set
+
+#
+# Other L3 adapters
+#
+# CONFIG_L3_SA1111 is not set
+# CONFIG_BIT_SA1100_GPIO is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+# CONFIG_MOUSE is not set
+
+#
+# Joysticks
+#
+# CONFIG_INPUT_GAMEPORT is not set
+
+#
+# Input core support is needed for gameports
+#
+
+#
+# Input core support is needed for joysticks
+#
+# CONFIG_QIC02_TAPE is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_INTEL_RNG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+CONFIG_COTULLA_RTC=y
+CONFIG_ADS7846_TS=y
+# CONFIG_TOSA_TS is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+CONFIG_PCMCIA_SERIAL_CS=y
+CONFIG_PCMCIA_CHRDEV=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# File systems
+#
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FS_SYNC is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_ADFS_FS_RW is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_JBD is not set
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+# CONFIG_UMSDOS_FS is not set
+CONFIG_VFAT_FS=y
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_NAND=y
+CONFIG_JFFS2_PROC_FS=y
+CONFIG_JFFS2_NODEMERGE=y
+CONFIG_JFFS2_DYNFRAGTREE=y
+CONFIG_CRAMFS=y
+CONFIG_TMPFS=y
+CONFIG_RAMFS=y
+# CONFIG_ISO9660_FS is not set
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
+CONFIG_MINIX_FS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_RW is not set
+# CONFIG_HPFS_FS is not set
+CONFIG_PROC_FS=y
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+CONFIG_DEVPTS_FS=y
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_EXT2_FS=y
+# CONFIG_SYSV_FS is not set
+# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
+
+#
+# Network File Systems
+#
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_ROOT_NFS is not set
+# CONFIG_NFSD is not set
+# CONFIG_NFSD_V3 is not set
+CONFIG_SUNRPC=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+CONFIG_CIFS_POSIX=y
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+# CONFIG_ZISOFS_FS is not set
+CONFIG_ZLIB_FS_INFLATE=y
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+CONFIG_SMB_NLS=y
+CONFIG_NLS=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+CONFIG_NLS_CODEPAGE_932=y
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Console drivers
+#
+CONFIG_PC_KEYMAP=y
+# CONFIG_VGA_CONSOLE is not set
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_UNICON is not set
+# CONFIG_FB_COLLIE is not set
+# CONFIG_FB_ACORN is not set
+# CONFIG_FB_ANAKIN is not set
+# CONFIG_FB_CLPS711X is not set
+# CONFIG_FB_SA1100 is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_COTULLA is not set
+# CONFIG_FB_POODLE is not set
+CONFIG_FB_CORGI=y
+# CONFIG_FB_TOSA is not set
+# CONFIG_SHARP_LOGO_SCREEN is not set
+# CONFIG_SL_SYSCLK100 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_FBCON_ADVANCED=y
+# CONFIG_FBCON_MFB is not set
+# CONFIG_FBCON_CFB2 is not set
+# CONFIG_FBCON_CFB4 is not set
+# CONFIG_FBCON_CFB8 is not set
+CONFIG_FBCON_CFB16=y
+# CONFIG_FBCON_CFB24 is not set
+# CONFIG_FBCON_CFB32 is not set
+# CONFIG_FBCON_AFB is not set
+# CONFIG_FBCON_ILBM is not set
+# CONFIG_FBCON_IPLAN2P2 is not set
+# CONFIG_FBCON_IPLAN2P4 is not set
+# CONFIG_FBCON_IPLAN2P8 is not set
+# CONFIG_FBCON_MAC is not set
+# CONFIG_FBCON_VGA_PLANES is not set
+# CONFIG_FBCON_VGA is not set
+# CONFIG_FBCON_HGA is not set
+CONFIG_FBCON_ROTATE_R=y
+# CONFIG_FBCON_ROTATE_L is not set
+# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
+CONFIG_FBCON_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_COLLIE_SSP is not set
+# CONFIG_SOUND_COLLIE_TC35143 is not set
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_MIDI_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+# CONFIG_MIDI_VIA82CXXX is not set
+# CONFIG_SOUND_OSS is not set
+# CONFIG_SOUND_WAVEARTIST is not set
+# CONFIG_SOUND_PXA_AC97 is not set
+# CONFIG_SOUND_POODLE is not set
+CONFIG_SOUND_CORGI=y
+# CONFIG_SOUND_TOSA is not set
+# CONFIG_BUZZER_TOSA is not set
+# CONFIG_SOUND_TVMIXER is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+# CONFIG_MCP_SA1100 is not set
+# CONFIG_MCP_UCB1200 is not set
+# CONFIG_MCP_UCB1200_AUDIO is not set
+# CONFIG_MCP_UCB1200_TS is not set
+# CONFIG_MCP_UCB1400_TS is not set
+
+#
+# USB support
+#
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_LONG_TIMEOUT is not set
+
+#
+# USB Controllers
+#
+# CONFIG_USB_UHCI is not set
+# CONFIG_USB_UHCI_ALT is not set
+# CONFIG_USB_OHCI is not set
+# CONFIG_USB_OHCI_SA1111 is not set
+# CONFIG_USB_OHCI_TC6393 is not set
+# CONFIG_USB_USE_INTERNAL_MEMORY is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_AUDIO is not set
+
+#
+# USB Bluetooth can only be used with disabled Bluetooth subsystem
+#
+
+#
+# SCSI support is needed for USB Storage
+#
+# CONFIG_USB_STORAGE is not set
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_HP8200e is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# USB Human Interface Devices (HID)
+#
+
+#
+# Input core support is needed for USB HID
+#
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_DC2XX is not set
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_SCANNER is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+
+#
+# USB Multimedia devices
+#
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network adaptors
+#
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_CDCETHER is not set
+# CONFIG_USB_USBNET is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_PL2303 is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_RIO500 is not set
+
+#
+# USB Device Support
+#
+CONFIG_USBD=m
+CONFIG_USBD_VENDORID=04DD
+CONFIG_USBD_PRODUCTID=8007
+CONFIG_USBD_PRODUCT_NAME="SL-7500"
+CONFIG_USBD_MANUFACTURER="Sharp"
+# CONFIG_USBD_USE_SERIAL_NUMBER is not set
+CONFIG_USBD_SELFPOWERED=y
+CONFIG_USBD_MONITOR=m
+
+#
+#
+#
+# CONFIG_USBD_PROCFS is not set
+
+#
+# USB Device functions
+#
+
+#
+# Network Function
+#
+CONFIG_USBD_NET=m
+CONFIG_USBD_NET_VENDORID=04DD
+CONFIG_USBD_NET_PRODUCTID=8007
+CONFIG_USBD_NET_IFNAME="usbd"
+CONFIG_USBD_NET_OUT_ENDPOINT=1
+CONFIG_USBD_NET_OUT_PKTSIZE=64
+CONFIG_USBD_NET_IN_ENDPOINT=2
+CONFIG_USBD_NET_IN_PKTSIZE=64
+CONFIG_USBD_NET_INT_ENDPOINT=3
+CONFIG_USBD_NET_INT_PKTSIZE=16
+# CONFIG_USBD_NET_ALWAYSUP is not set
+# CONFIG_USBD_NET_SAFE is not set
+CONFIG_USBD_NET_MDLM=y
+# CONFIG_USBD_NET_CDC is not set
+CONFIG_USBD_NET_REMOTE_MACADDR="400001000002"
+CONFIG_USBD_NET_REMOTE_OUI=400002
+CONFIG_USBD_MAC_AS_SERIAL_NUMBER=y
+CONFIG_USBD_NET_LOCAL_MACADDR="400001000001"
+CONFIG_USBD_NET_LOCAL_OUI=400001
+
+#
+# Serial Function
+#
+# CONFIG_USBD_SERIAL is not set
+
+#
+# Mass Storage Function
+#
+CONFIG_USBD_STORAGE=m
+CONFIG_USBD_STORAGE_VENDORID=04DD
+CONFIG_USBD_STORAGE_PRODUCTID=9050
+CONFIG_USBD_STORAGE_OUT_ENDPOINT=1
+CONFIG_USBD_STORAGE_OUT_PKTSIZE=64
+CONFIG_USBD_STORAGE_IN_ENDPOINT=2
+CONFIG_USBD_STORAGE_IN_PKTSIZE=64
+CONFIG_USBD_STORAGE_INT_ENDPOINT=3
+CONFIG_USBD_STORAGE_INT_PKTSIZE=16
+CONFIG_USBD_STORAGE_DEF_DEVICE_NAME="/dev/hda1"
+
+#
+# USB Device bus interfaces
+#
+
+#
+# USB Device Bus Interface Support
+#
+CONFIG_USBD_PXA_BUS=m
+# CONFIG_USBD_GENERIC_BUS is not set
+
+#
+# Bluetooth support
+#
+CONFIG_BLUEZ=y
+CONFIG_BLUEZ_L2CAP=y
+CONFIG_BLUEZ_SCO=y
+CONFIG_BLUEZ_RFCOMM=y
+CONFIG_BLUEZ_RFCOMM_TTY=y
+CONFIG_BLUEZ_BNEP=y
+CONFIG_BLUEZ_BNEP_MC_FILTER=y
+CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
+# CONFIG_BLUEZ_HIDP is not set
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BLUEZ_HCIUSB is not set
+CONFIG_BLUEZ_HCIUART=y
+CONFIG_BLUEZ_HCIUART_H4=y
+CONFIG_BLUEZ_HCIUART_BCSP=y
+CONFIG_BLUEZ_HCIUART_BCSP_TXCRC=y
+# CONFIG_BLUEZ_HCIBFUSB is not set
+CONFIG_BLUEZ_HCIDTL1=m
+CONFIG_BLUEZ_HCIBLUECARD=m
+CONFIG_BLUEZ_HCIBTUART=m
+# CONFIG_BLUEZ_HCIVHCI is not set
+CONFIG_BLUEZ_BT950=m
+
+#
+# Kernel hacking
+#
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_COREDUMP_SIGNAL is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_NO_PGT_CACHE is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_WAITQ is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_LL is not set
+# CONFIG_DEBUG_DC21285_PORT is not set
+# CONFIG_DEBUG_CLPS711X_UART2 is not set
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-tosa b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-tosa
new file mode 100644
index 0000000000..aa7f25a2a4
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/defconfig-tosa
@@ -0,0 +1,1379 @@
+#
+# Automatically generated make config: don't edit
+#
+CONFIG_ARM=y
+# CONFIG_EISA is not set
+# CONFIG_SBUS is not set
+# CONFIG_MCA is not set
+CONFIG_UID16=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+# CONFIG_GENERIC_BUST_SPINLOCK is not set
+# CONFIG_GENERIC_ISA_DMA is not set
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+# CONFIG_OBSOLETE is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+CONFIG_KMOD=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_ANAKIN is not set
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_CAMELOT is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_MX1ADS is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_SHARK is not set
+
+#
+# Archimedes/A5000 Implementations
+#
+
+#
+# Archimedes/A5000 Implementations (select only ONE)
+#
+# CONFIG_ARCH_ARC is not set
+# CONFIG_ARCH_A5K is not set
+
+#
+# Footbridge Implementations
+#
+# CONFIG_ARCH_CATS is not set
+# CONFIG_ARCH_PERSONAL_SERVER is not set
+# CONFIG_ARCH_EBSA285_ADDIN is not set
+# CONFIG_ARCH_EBSA285_HOST is not set
+# CONFIG_ARCH_NETWINDER is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_ASSABET_NEPONSET is not set
+# CONFIG_SA1100_ADSBITSY is not set
+# CONFIG_SA1100_BRUTUS is not set
+# CONFIG_SA1100_CEP is not set
+# CONFIG_SA1100_CERF is not set
+# CONFIG_SA1100_COLLIE is not set
+# CONFIG_LOCOMO is not set
+# CONFIG_COLLIE_TS is not set
+# CONFIG_COLLIE_TR0 is not set
+# CONFIG_COLLIE_TR1 is not set
+# CONFIG_COLLIE_DEV is not set
+# CONFIG_COLLIE_G is not set
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+# CONFIG_SA1100_H3XXX is not set
+# CONFIG_SA1100_EXTENEX1 is not set
+# CONFIG_SA1100_FLEXANET is not set
+# CONFIG_SA1100_FREEBIRD is not set
+# CONFIG_SA1100_FRODO is not set
+# CONFIG_SA1100_GRAPHICSCLIENT is not set
+# CONFIG_SA1100_GRAPHICSMASTER is not set
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_HUW_WEBPANEL is not set
+# CONFIG_SA1100_ITSY is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_NANOENGINE is not set
+# CONFIG_SA1100_OMNIMETER is not set
+# CONFIG_SA1100_PANGOLIN is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_PT_SYSTEM3 is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SHERMAN is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_PFS168 is not set
+# CONFIG_SA1100_VICTOR is not set
+# CONFIG_SA1100_XP860 is not set
+# CONFIG_SA1100_YOPY is not set
+# CONFIG_SA1100_USB is not set
+# CONFIG_SA1100_USB_NETLINK is not set
+# CONFIG_SA1100_USB_CHAR is not set
+# CONFIG_H3600_SLEEVE is not set
+
+#
+# Intel PXA250/210 Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_ARCH_PXA_CERF is not set
+# CONFIG_COTULLA_DMA is not set
+# CONFIG_SABINAL_DISCOVERY is not set
+# CONFIG_ARCH_SABINAL is not set
+# CONFIG_ARCH_PXA_POODLE is not set
+# CONFIG_POODLE_TR0 is not set
+# CONFIG_ARCH_PXA_CORGI is not set
+# CONFIG_CORGI_TR0 is not set
+CONFIG_ARCH_PXA_TOSA=y
+CONFIG_ARCH_PXA_TOSA_SKIP=y
+CONFIG_ARCH_SHARP_SL=y
+CONFIG_SL_CCCR_CHANGE=y
+# CONFIG_SL_CCCR242 is not set
+# CONFIG_SL_CCCR162 is not set
+
+#
+# Language type
+#
+CONFIG_ARCH_SHARP_SL_E=y
+# CONFIG_ARCH_SHARP_SL_V is not set
+# CONFIG_ARCH_SHARP_SL_G is not set
+# CONFIG_ARCH_SHARP_SL_J is not set
+# CONFIG_ARCH_SHARP_SL_S is not set
+# CONFIG_ARCH_SHARP_SL_I is not set
+# CONFIG_PXA_USB is not set
+# CONFIG_PXA_USB_NETLINK is not set
+# CONFIG_PXA_USB_CHAR is not set
+
+#
+# CLPS711X/EP721X Implementations
+#
+# CONFIG_ARCH_AUTCPU12 is not set
+# CONFIG_ARCH_CDB89712 is not set
+# CONFIG_ARCH_CLEP7312 is not set
+# CONFIG_ARCH_EDB7211 is not set
+# CONFIG_ARCH_P720T is not set
+# CONFIG_ARCH_FORTUNET is not set
+# CONFIG_ARCH_EP7211 is not set
+# CONFIG_ARCH_EP7212 is not set
+# CONFIG_ARCH_ACORN is not set
+# CONFIG_FOOTBRIDGE is not set
+# CONFIG_FOOTBRIDGE_HOST is not set
+# CONFIG_FOOTBRIDGE_ADDIN is not set
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
+
+#
+# Processor Type
+#
+# CONFIG_CPU_32v3 is not set
+# CONFIG_CPU_32v4 is not set
+# CONFIG_CPU_ARM610 is not set
+# CONFIG_CPU_ARM710 is not set
+# CONFIG_CPU_ARM720T is not set
+# CONFIG_CPU_ARM920T is not set
+# CONFIG_CPU_ARM922T is not set
+# CONFIG_PLD is not set
+# CONFIG_CPU_ARM926T is not set
+# CONFIG_CPU_ARM1020 is not set
+# CONFIG_CPU_SA110 is not set
+# CONFIG_CPU_SA1100 is not set
+CONFIG_CPU_32v5=y
+CONFIG_CPU_XSCALE=y
+CONFIG_BATT=y
+# CONFIG_XSCALE_CACHE_ERRATA is not set
+CONFIG_ARM_THUMB=y
+CONFIG_ARM_FCSE=y
+# CONFIG_DISCONTIGMEM is not set
+# CONFIG_PREEMPT is not set
+
+#
+# General setup
+#
+# CONFIG_PCI is not set
+# CONFIG_ISA is not set
+# CONFIG_ISA_DMA is not set
+# CONFIG_ZBOOT_ROM is not set
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZWBOOT_ROM_BSS=0
+CONFIG_HOTPLUG=y
+
+#
+# PCMCIA/CardBus support
+#
+CONFIG_PCMCIA=y
+# CONFIG_I82092 is not set
+# CONFIG_I82365 is not set
+# CONFIG_TCIC is not set
+# CONFIG_PCMCIA_CLPS6700 is not set
+# CONFIG_PCMCIA_SA1100 is not set
+CONFIG_PCMCIA_PXA=y
+CONFIG_NET=y
+CONFIG_SYSVIPC=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+
+#
+# At least one math emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_KCORE_ELF=y
+# CONFIG_KCORE_AOUT is not set
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+CONFIG_PM=y
+CONFIG_APM=y
+# CONFIG_APM_IGNORE_USER_SUSPEND is not set
+CONFIG_APM_CPU_IDLE=y
+CONFIG_APM_DISPLAY_BLANK=y
+CONFIG_APM_RTC_IS_GMT=y
+# CONFIG_ARTHUR is not set
+CONFIG_CMDLINE="<see .oe file>"
+# CONFIG_SHARPSL_BOOTLDR_PARAMS is not set
+CONFIG_ALIGNMENT_TRAP=y
+CONFIG_FREEPG_SIGNAL=y
+CONFIG_OOM_KILL_SURVIVAL=y
+CONFIG_DEVICEINFO=m
+CONFIG_CORGI_DEVICEINFO=m
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+# CONFIG_MTD_GEN_PROBE is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_AMDSTD is not set
+# CONFIG_MTD_SHARP is not set
+# CONFIG_MTD_JEDEC is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_LUBBOCK is not set
+# CONFIG_MTD_NORA is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_CDB89712 is not set
+# CONFIG_MTD_SA1100 is not set
+# CONFIG_MTD_DC21285 is not set
+# CONFIG_MTD_IQ80310 is not set
+# CONFIG_MTD_FORTUNET is not set
+# CONFIG_MTD_PXA_CERF is not set
+# CONFIG_MTD_EPXA10DB is not set
+# CONFIG_MTD_AUTCPU12 is not set
+# CONFIG_MTD_EDB7312 is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_DISCOVERY is not set
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_PCI is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_MTDROM_SA1100 is not set
+# CONFIG_MTD_MTDRAM_SA1100 is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_MTDRAM_SHARP_SL is not set
+# CONFIG_MTD_BLKMTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC1000 is not set
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOCPROBE is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_ECC=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+CONFIG_MTD_NAND_POST_BADBLOCK=y
+# CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS=y
+CONFIG_MTD_NAND_PAGE_CACHE=y
+CONFIG_MTD_NAND_SHARP_SL_TC6393=y
+
+#
+# Plug and Play configuration
+#
+# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_MD_RAID1 is not set
+# CONFIG_MD_RAID5 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_BLK_DEV_LVM is not set
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_FILTER=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_ARPD is not set
+# CONFIG_INET_ECN is not set
+CONFIG_SYN_COOKIES=y
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_CONNTRACK is not set
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=y
+# CONFIG_IP_NF_MATCH_LIMIT is not set
+# CONFIG_IP_NF_MATCH_MAC is not set
+# CONFIG_IP_NF_MATCH_MARK is not set
+# CONFIG_IP_NF_MATCH_MULTIPORT is not set
+# CONFIG_IP_NF_MATCH_TOS is not set
+# CONFIG_IP_NF_MATCH_AH_ESP is not set
+# CONFIG_IP_NF_MATCH_LENGTH is not set
+# CONFIG_IP_NF_MATCH_TTL is not set
+# CONFIG_IP_NF_MATCH_TCPMSS is not set
+# CONFIG_IP_NF_MATCH_UNCLEAN is not set
+# CONFIG_IP_NF_MATCH_OWNER is not set
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+# CONFIG_IP_NF_TARGET_MIRROR is not set
+# CONFIG_IP_NF_MANGLE is not set
+CONFIG_IP_NF_TARGET_LOG=y
+# CONFIG_IP_NF_TARGET_ULOG is not set
+# CONFIG_IP_NF_TARGET_TCPMSS is not set
+CONFIG_IPV6=y
+
+#
+# IPv6: Netfilter Configuration
+#
+# CONFIG_IP6_NF_QUEUE is not set
+CONFIG_IP6_NF_IPTABLES=y
+# CONFIG_IP6_NF_MATCH_LIMIT is not set
+# CONFIG_IP6_NF_MATCH_MAC is not set
+# CONFIG_IP6_NF_MATCH_MULTIPORT is not set
+# CONFIG_IP6_NF_MATCH_OWNER is not set
+# CONFIG_IP6_NF_MATCH_MARK is not set
+CONFIG_IP6_NF_FILTER=y
+CONFIG_IP6_NF_TARGET_LOG=y
+# CONFIG_IP6_NF_MANGLE is not set
+# CONFIG_KHTTPD is not set
+# CONFIG_ATM is not set
+# CONFIG_VLAN_8021Q is not set
+
+#
+#
+#
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_LLC is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+CONFIG_IPSEC=m
+
+#
+# IPSec options (Openswan)
+#
+CONFIG_IPSEC_IPIP=y
+CONFIG_IPSEC_AH=y
+# CONFIG_IPSEC_AUTH_HMAC_MD5 is not set
+CONFIG_IPSEC_AUTH_HMAC_SHA1=y
+CONFIG_IPSEC_ESP=y
+CONFIG_IPSEC_ENC_3DES=y
+# CONFIG_IPSEC_ENC_AES is not set
+CONFIG_IPSEC_ALG=y
+CONFIG_IPSEC_IPCOMP=y
+CONFIG_IPSEC_DEBUG=y
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_ETHERTAP is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_ARM_AM79C961A is not set
+# CONFIG_SUNLANCE is not set
+# CONFIG_SUNBMAC is not set
+# CONFIG_SUNQE is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_LANCE is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_MYRI_SBUS is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=y
+# CONFIG_PPP_SYNC_TTY is not set
+# CONFIG_PPP_DEFLATE is not set
+CONFIG_PPP_BSDCOMP=y
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_STRIP is not set
+# CONFIG_WAVELAN is not set
+# CONFIG_ARLAN is not set
+# CONFIG_AIRONET4500 is not set
+# CONFIG_AIRONET4500_NONCS is not set
+# CONFIG_AIRONET4500_PROC is not set
+# CONFIG_HERMES is not set
+
+#
+# Wireless Pcmcia cards support
+#
+# CONFIG_PCMCIA_HERMES is not set
+# CONFIG_AIRO_CS is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_NET_FC is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=y
+# CONFIG_PCMCIA_AXNET is not set
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_ARCNET_COM20020_CS is not set
+# CONFIG_PCMCIA_IBMTR is not set
+# CONFIG_NET_PCMCIA_RADIO is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+# CONFIG_IRLAN is not set
+CONFIG_IRNET=m
+CONFIG_IRCOMM=y
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=y
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_NSC_FIR is not set
+# CONFIG_WINBOND_FIR is not set
+# CONFIG_TOSHIBA_FIR is not set
+# CONFIG_SMC_IRCC_FIR is not set
+# CONFIG_ALI_FIR is not set
+# CONFIG_VLSI_FIR is not set
+
+#
+# ATA/IDE/MFM/RLL support
+#
+CONFIG_IDE=y
+
+#
+# IDE, ATA and ATAPI Block devices
+#
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_HD_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
+# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
+# CONFIG_BLK_DEV_IDEDISK_IBM is not set
+# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
+# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
+# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
+# CONFIG_BLK_DEV_IDEDISK_WD is not set
+# CONFIG_BLK_DEV_COMMERIAL is not set
+# CONFIG_BLK_DEV_TIVO is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_DMA_NONPCI is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
+# CONFIG_BLK_DEV_ATARAID is not set
+# CONFIG_BLK_DEV_ATARAID_PDC is not set
+# CONFIG_BLK_DEV_ATARAID_HPT is not set
+
+#
+# SCSI support
+#
+CONFIG_SCSI=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+CONFIG_SD_EXTRA_DEVS=40
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_DEBUG_QUEUES is not set
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_SCSI_7000FASST is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AHA1542 is not set
+# CONFIG_SCSI_AHA1740 is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_AM53C974 is not set
+# CONFIG_SCSI_MEGARAID is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_EATA_DMA is not set
+# CONFIG_SCSI_EATA_PIO is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_NCR53C7xx is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PCI2000 is not set
+# CONFIG_SCSI_PCI2220I is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_SIM710 is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_U14_34F is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_SCSI_PCMCIA is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input core support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_KEYBDEV=y
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
+CONFIG_INPUT_JOYDEV=m
+CONFIG_INPUT_EVDEV=m
+CONFIG_INPUT_UINPUT=y
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_SERIAL=y
+# CONFIG_SERIAL_CONSOLE is not set
+CONFIG_SERIAL_SL_SERIES=y
+CONFIG_BLUETOOTH_SL=y
+# CONFIG_KBD_DEV_FILE is not set
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_ANAKIN is not set
+# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
+# CONFIG_SERIAL_AMBA is not set
+# CONFIG_SERIAL_AMBA_CONSOLE is not set
+# CONFIG_SERIAL_CLPS711X is not set
+# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
+# CONFIG_SERIAL_21285 is not set
+# CONFIG_SERIAL_21285_OLD is not set
+# CONFIG_SERIAL_21285_CONSOLE is not set
+# CONFIG_SERIAL_UART00 is not set
+# CONFIG_SERIAL_UART00_CONSOLE is not set
+# CONFIG_SERIAL_SA1100 is not set
+# CONFIG_SERIAL_SA1100_CONSOLE is not set
+# CONFIG_SERIAL_8250 is not set
+# CONFIG_SERIAL_8250_CONSOLE is not set
+# CONFIG_SERIAL_8250_EXTENDED is not set
+# CONFIG_SERIAL_8250_MANY_PORTS is not set
+# CONFIG_SERIAL_8250_SHARE_IRQ is not set
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_MULTIPORT is not set
+# CONFIG_SERIAL_8250_HUB6 is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+# CONFIG_L3_ALGOBIT is not set
+# CONFIG_L3_BIT_SA1100_GPIO is not set
+
+#
+# Other L3 adapters
+#
+# CONFIG_L3_SA1111 is not set
+# CONFIG_BIT_SA1100_GPIO is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+# CONFIG_MOUSE is not set
+
+#
+# Joysticks
+#
+# CONFIG_INPUT_GAMEPORT is not set
+# CONFIG_INPUT_NS558 is not set
+# CONFIG_INPUT_LIGHTNING is not set
+# CONFIG_INPUT_PCIGAME is not set
+# CONFIG_INPUT_CS461X is not set
+# CONFIG_INPUT_EMU10K1 is not set
+# CONFIG_INPUT_SERIO is not set
+# CONFIG_INPUT_SERPORT is not set
+
+#
+# Joysticks
+#
+# CONFIG_INPUT_ANALOG is not set
+# CONFIG_INPUT_A3D is not set
+# CONFIG_INPUT_ADI is not set
+# CONFIG_INPUT_COBRA is not set
+# CONFIG_INPUT_GF2K is not set
+# CONFIG_INPUT_GRIP is not set
+# CONFIG_INPUT_INTERACT is not set
+# CONFIG_INPUT_TMDC is not set
+# CONFIG_INPUT_SIDEWINDER is not set
+# CONFIG_INPUT_IFORCE_USB is not set
+# CONFIG_INPUT_IFORCE_232 is not set
+# CONFIG_INPUT_WARRIOR is not set
+# CONFIG_INPUT_MAGELLAN is not set
+# CONFIG_INPUT_SPACEORB is not set
+# CONFIG_INPUT_SPACEBALL is not set
+# CONFIG_INPUT_STINGER is not set
+# CONFIG_INPUT_DB9 is not set
+# CONFIG_INPUT_GAMECON is not set
+# CONFIG_INPUT_TURBOGRAFX is not set
+# CONFIG_QIC02_TAPE is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_INTEL_RNG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+CONFIG_COTULLA_RTC=y
+# CONFIG_ADS7846_TS is not set
+CONFIG_TOSA_TS=y
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+# these shouldnt be here
+CONFIG_TOSA_POWER_KEY_OFF=y
+CONFIG_BOOT_TOSA_POWER_KEY_OFF=y
+CONFIG_SL7X0_POWER_KEY_OFF=y
+CONFIG_BOOT_POWER_KEY_OFF=y
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+CONFIG_PCMCIA_SERIAL_CS=y
+CONFIG_PCMCIA_CHRDEV=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# File systems
+#
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FS_SYNC is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_ADFS_FS_RW is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_JBD is not set
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+# CONFIG_UMSDOS_FS is not set
+CONFIG_VFAT_FS=y
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_NAND=y
+CONFIG_JFFS2_PROC_FS=y
+CONFIG_JFFS2_NODEMERGE=y
+CONFIG_JFFS2_DYNFRAGTREE=y
+CONFIG_CRAMFS=y
+CONFIG_TMPFS=y
+CONFIG_RAMFS=y
+# CONFIG_ISO9660_FS is not set
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
+CONFIG_MINIX_FS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_RW is not set
+# CONFIG_HPFS_FS is not set
+CONFIG_PROC_FS=y
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+CONFIG_DEVPTS_FS=y
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_EXT2_FS=y
+# CONFIG_SYSV_FS is not set
+# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
+
+#
+# Network File Systems
+#
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_ROOT_NFS is not set
+# CONFIG_NFSD is not set
+# CONFIG_NFSD_V3 is not set
+CONFIG_SUNRPC=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+CONFIG_CIFS_POSIX=y
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+# CONFIG_ZISOFS_FS is not set
+CONFIG_ZLIB_FS_INFLATE=y
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+CONFIG_SMB_NLS=y
+CONFIG_NLS=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+CONFIG_NLS_CODEPAGE_932=y
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Console drivers
+#
+CONFIG_PC_KEYMAP=y
+# CONFIG_VGA_CONSOLE is not set
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_UNICON is not set
+# CONFIG_FB_COLLIE is not set
+# CONFIG_FB_ACORN is not set
+# CONFIG_FB_ANAKIN is not set
+# CONFIG_FB_CLPS711X is not set
+# CONFIG_FB_SA1100 is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_COTULLA is not set
+# CONFIG_FB_POODLE is not set
+# CONFIG_FB_CORGI is not set
+CONFIG_FB_TOSA=y
+# CONFIG_SHARP_LOGO_SCREEN is not set
+# CONFIG_SL_SYSCLK100 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_FBCON_ADVANCED=y
+# CONFIG_FBCON_MFB is not set
+# CONFIG_FBCON_CFB2 is not set
+# CONFIG_FBCON_CFB4 is not set
+# CONFIG_FBCON_CFB8 is not set
+CONFIG_FBCON_CFB16=y
+# CONFIG_FBCON_CFB24 is not set
+# CONFIG_FBCON_CFB32 is not set
+# CONFIG_FBCON_AFB is not set
+# CONFIG_FBCON_ILBM is not set
+# CONFIG_FBCON_IPLAN2P2 is not set
+# CONFIG_FBCON_IPLAN2P4 is not set
+# CONFIG_FBCON_IPLAN2P8 is not set
+# CONFIG_FBCON_MAC is not set
+# CONFIG_FBCON_VGA_PLANES is not set
+# CONFIG_FBCON_VGA is not set
+# CONFIG_FBCON_HGA is not set
+# CONFIG_FBCON_ROTATE_R is not set
+# CONFIG_FBCON_ROTATE_L is not set
+# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
+CONFIG_FBCON_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_COLLIE_SSP is not set
+# CONFIG_SOUND_COLLIE_TC35143 is not set
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_MIDI_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+# CONFIG_MIDI_VIA82CXXX is not set
+# CONFIG_SOUND_OSS is not set
+# CONFIG_SOUND_WAVEARTIST is not set
+# CONFIG_SOUND_PXA_AC97 is not set
+# CONFIG_SOUND_POODLE is not set
+# CONFIG_SOUND_CORGI is not set
+CONFIG_SOUND_TOSA=y
+CONFIG_BUZZER_TOSA=y
+# CONFIG_SOUND_TVMIXER is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+# CONFIG_MCP_SA1100 is not set
+# CONFIG_MCP_UCB1200 is not set
+# CONFIG_MCP_UCB1200_AUDIO is not set
+# CONFIG_MCP_UCB1200_TS is not set
+# CONFIG_MCP_UCB1400_TS is not set
+
+#
+# USB support
+#
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_LONG_TIMEOUT is not set
+
+#
+# USB Controllers
+#
+# CONFIG_USB_UHCI is not set
+# CONFIG_USB_UHCI_ALT is not set
+# CONFIG_USB_OHCI is not set
+# CONFIG_USB_OHCI_SA1111 is not set
+CONFIG_USB_OHCI_TC6393=m
+CONFIG_USB_USE_INTERNAL_MEMORY=y
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_BLUETOOTH is not set
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+CONFIG_USB_STORAGE_ISD200=y
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_HP8200e is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+CONFIG_USB_ACM=m
+# CONFIG_USB_PRINTER is not set
+
+#
+# USB Human Interface Devices (HID)
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDDEV is not set
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+# CONFIG_USB_WACOM is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_DC2XX is not set
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_SCANNER is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+
+#
+# USB Multimedia devices
+#
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# USB Network adaptors
+#
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_CDCETHER is not set
+# CONFIG_USB_USBNET is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_PL2303 is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_RIO500 is not set
+
+#
+# USB Device Support
+#
+CONFIG_USBD=m
+CONFIG_USBD_VENDORID=04DD
+CONFIG_USBD_PRODUCTID=9032
+CONFIG_USBD_PRODUCT_NAME="SL-6000"
+CONFIG_USBD_MANUFACTURER="Sharp"
+# CONFIG_USBD_USE_SERIAL_NUMBER is not set
+CONFIG_USBD_SELFPOWERED=y
+CONFIG_USBD_MONITOR=m
+
+#
+#
+#
+CONFIG_USBD_PROCFS=y
+
+#
+# USB Device functions
+#
+
+#
+# Network Function
+#
+CONFIG_USBD_NET=m
+CONFIG_USBD_NET_VENDORID=04DD
+CONFIG_USBD_NET_PRODUCTID=9032
+CONFIG_USBD_NET_IFNAME="usbd"
+CONFIG_USBD_NET_OUT_ENDPOINT=1
+CONFIG_USBD_NET_OUT_PKTSIZE=64
+CONFIG_USBD_NET_IN_ENDPOINT=2
+CONFIG_USBD_NET_IN_PKTSIZE=64
+CONFIG_USBD_NET_INT_ENDPOINT=3
+CONFIG_USBD_NET_INT_PKTSIZE=16
+# CONFIG_USBD_NET_ALWAYSUP is not set
+# CONFIG_USBD_NET_SAFE is not set
+CONFIG_USBD_NET_MDLM=y
+# CONFIG_USBD_NET_CDC is not set
+CONFIG_USBD_NET_REMOTE_MACADDR="400002000001"
+CONFIG_USBD_NET_REMOTE_OUI=400002
+CONFIG_USBD_MAC_AS_SERIAL_NUMBER=y
+CONFIG_USBD_NET_LOCAL_MACADDR="400001000001"
+CONFIG_USBD_NET_LOCAL_OUI=400001
+
+#
+# Serial Function
+#
+# CONFIG_USBD_SERIAL is not set
+
+#
+# Mass Storage Function
+#
+CONFIG_USBD_STORAGE=m
+CONFIG_USBD_STORAGE_VENDORID=0000
+CONFIG_USBD_STORAGE_PRODUCTID=0000
+CONFIG_USBD_STORAGE_OUT_ENDPOINT=1
+CONFIG_USBD_STORAGE_OUT_PKTSIZE=64
+CONFIG_USBD_STORAGE_IN_ENDPOINT=2
+CONFIG_USBD_STORAGE_IN_PKTSIZE=64
+CONFIG_USBD_STORAGE_INT_ENDPOINT=3
+CONFIG_USBD_STORAGE_INT_PKTSIZE=16
+CONFIG_USBD_STORAGE_DEF_DEVICE_NAME=""
+
+#
+# USB Device bus interfaces
+#
+
+#
+# USB Device Bus Interface Support
+#
+CONFIG_USBD_PXA_BUS=m
+# CONFIG_USBD_GENERIC_BUS is not set
+
+#
+# Bluetooth support
+#
+CONFIG_BLUEZ=y
+CONFIG_BLUEZ_L2CAP=y
+CONFIG_BLUEZ_SCO=y
+CONFIG_BLUEZ_RFCOMM=y
+CONFIG_BLUEZ_RFCOMM_TTY=y
+CONFIG_BLUEZ_BNEP=y
+CONFIG_BLUEZ_BNEP_MC_FILTER=y
+CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
+# CONFIG_BLUEZ_HIDP is not set
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BLUEZ_HCIUSB=m
+CONFIG_BLUEZ_HCIUSB_SCO=y
+CONFIG_BLUEZ_HCIUART=y
+CONFIG_BLUEZ_HCIUART_H4=y
+CONFIG_BLUEZ_HCIUART_BCSP=y
+CONFIG_BLUEZ_HCIUART_BCSP_TXCRC=y
+CONFIG_BLUEZ_HCIBFUSB=m
+CONFIG_BLUEZ_HCIDTL1=m
+CONFIG_BLUEZ_HCIBLUECARD=m
+CONFIG_BLUEZ_HCIBTUART=m
+CONFIG_BLUEZ_HCIVHCI=m
+CONFIG_BLUEZ_BT950=m
+
+#
+# Kernel hacking
+#
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_COREDUMP_SIGNAL is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_NO_PGT_CACHE is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_WAITQ is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_LL is not set
+# CONFIG_DEBUG_DC21285_PORT is not set
+# CONFIG_DEBUG_CLPS711X_UART2 is not set
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/deviceinfo.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/deviceinfo.patch
new file mode 100644
index 0000000000..58343c5b55
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/deviceinfo.patch
@@ -0,0 +1,26 @@
+--- linux/arch/arm/mach-pxa/Makefile.old 2004-09-24 20:49:09.000000000 +0930
++++ linux/arch/arm/mach-pxa/Makefile 2004-09-24 20:49:11.000000000 +0930
+@@ -94,6 +94,23 @@
+ endif
+ endif
+
++ifeq ($(CONFIG_DEVICEINFO),m)
++ obj-$(CONFIG_DEVICEINFO) += devinfo.o
++ ifeq ($(CONFIG_SABINAL_DISCOVERY),y)
++ devinfo-objs-m += deviceinfo.o
++ devinfo-objs-$(CONFIG_DISCOVERY_DEVICEINFO) += discovery_deviceinfo.o
++ endif
++ ifeq ($(CONFIG_ARCH_PXA_POODLE),y)
++ devinfo-objs-m += sharpsl_deviceinfo.o
++ endif
++ ifeq ($(CONFIG_ARCH_PXA_CORGI),y)
++ devinfo-objs-m += sharpsl_deviceinfo.o
++ endif
++ ifeq ($(CONFIG_ARCH_PXA_TOSA),y)
++ devinfo-objs-m += sharpsl_deviceinfo.o
++ endif
++endif
++
+ obj-m += registers.o
+
+ include $(TOPDIR)/Rules.make
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/disable-pcmcia-probe.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/disable-pcmcia-probe.patch
new file mode 100644
index 0000000000..79ba036323
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/disable-pcmcia-probe.patch
@@ -0,0 +1,17 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- linux/drivers/pcmcia/Config.in~disable-pcmcia-probe 2003-05-13 11:18:23.000000000 +0200
++++ linux/drivers/pcmcia/Config.in 2004-05-27 13:59:50.000000000 +0200
+@@ -15,9 +15,6 @@
+ tristate 'PCMCIA/CardBus support' CONFIG_PCMCIA
+ if [ "$CONFIG_PCMCIA" != "n" ]; then
+ # yes, I really mean the following...
+- if [ "$CONFIG_ISA" = "y" -o "$CONFIG_ARCH_SA1100" = "y" ]; then
+- define_bool CONFIG_PCMCIA_PROBE y
+- fi
+ if [ "$CONFIG_PCI" != "n" ]; then
+ bool ' CardBus support' CONFIG_CARDBUS
+ fi
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/dumb-hack-for-wlan-ng.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/dumb-hack-for-wlan-ng.patch
new file mode 100644
index 0000000000..2c412fdbb3
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/dumb-hack-for-wlan-ng.patch
@@ -0,0 +1,16 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- linux/arch/arm/tools/Makefile~dumb-hack-for-wlan-ng
++++ linux/arch/arm/tools/Makefile
+@@ -16,7 +16,7 @@
+ # any errors that occur along the way.
+
+ constants.h: constants-hdr getconstants.c
+- $(CC) $(CFLAGS) -S -o $@.tmp.1 getconstants.c
++ arm-linux-gcc-2.95 $(CFLAGS) -S -o $@.tmp.1 getconstants.c
+ sed 's/^\(#define .* \)[#$$]\(.*\)/\1\2/;/^#define/!d' $@.tmp.1 > $@.tmp.2
+ cat constants-hdr $@.tmp.2 > $@
+ $(RM) $@.tmp*
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/enable-sysrq.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/enable-sysrq.patch
new file mode 100644
index 0000000000..b1ea85018b
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/enable-sysrq.patch
@@ -0,0 +1,61 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- linux/drivers/char/corgi_keyb.c~enable-sysrq
++++ linux/drivers/char/corgi_keyb.c
+@@ -23,7 +23,7 @@
+ #include <linux/init.h>
+ #include <linux/poll.h>
+ #include <linux/wait.h>
+-#include <asm/arch/keyboard.h>
++#include <asm/keyboard.h>
+ #include <asm/uaccess.h>
+ #include <linux/tqueue.h>
+ #include <linux/kbd_ll.h>
+@@ -46,6 +46,18 @@
+ #endif
+
+ /*
++ * This is the KeyCode [not ScanCode!] to ASCII Code mapping table
++ */
++
++#ifdef CONFIG_MAGIC_SYSRQ
++static unsigned char corgi_sysrq_xlate[128] =
++ "\000abcdefghijklmno" /* 00-0f */
++ "pqrstuvwxyz\000\000\000\000\000" /* 10-1f */
++ " \000\000\000\000\000\000\000\0001234567" /* 20-2f */
++ "890\000\000\000\000\000\000\000\000\000\000\000\000\000"; /* 30-3f */
++#endif
++
++/*
+ * common logical driver definition
+ */
+ extern void sharppda_kbd_press(int keycode);
+@@ -251,7 +263,13 @@
+ corgi_wakeup_button_init();
+ #endif // USE_WAKEUP_BUTTON
+
+- printk("keyboard initilaized.\n");
++ printk("keyboard initialized.\n");
++#ifdef CONFIG_MAGIC_SYSRQ
++ k_sysrq_key = 0x28; // KEY_HOME
++ k_sysrq_xlate = corgi_sysrq_xlate;
++ printk("magic_sysrq initialized.\n");
++#endif
++
+ }
+
+ int corgi_kbd_translate(unsigned char scancode, unsigned char *keycode_p)
+--- linux/drivers/char/keyboard.c~enable-sysrq
++++ linux/drivers/char/keyboard.c
+@@ -366,7 +366,7 @@
+ #ifdef CONFIG_MAGIC_SYSRQ /* Handle the SysRq Hack */
+ if (keycode == SYSRQ_KEY) {
+ sysrq_pressed = !up_flag;
+- goto out;
++ // goto out;
+ } else if (sysrq_pressed) {
+ if (!up_flag) {
+ handle_sysrq(kbd_sysrq_xlate[keycode], kbd_pt_regs, kbd, tty);
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/fix_tosa_apm.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/fix_tosa_apm.patch
new file mode 100644
index 0000000000..092b0dcf49
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/fix_tosa_apm.patch
@@ -0,0 +1,72 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- linux/arch/arm/mach-pxa/sharpsl_apm.c~fix_tosa_apm.patch
++++ linux/arch/arm/mach-pxa/sharpsl_apm.c
+@@ -254,6 +254,8 @@
+ int magic;
+ struct apm_user * next;
+ int suser: 1;
++ int reader: 1;
++ int writer: 1;
+ int suspend_wait: 1;
+ int suspend_result;
+ int suspends_pending;
+@@ -1596,12 +1598,12 @@
+ {
+ struct apm_user * as;
+
+- DPRINTK("event=%d\n",event);
++ DPRINTK("event=%d, sender=%p\n",event,sender);
+
+ if (user_list == NULL)
+ return;
+ for (as = user_list; as != NULL; as = as->next) {
+- if (as == sender)
++ if ((as == sender) || (!as->reader))
+ continue;
+ as->event_head = (as->event_head + 1) % APM_MAX_EVENTS;
+ if (as->event_head == as->event_tail) {
+@@ -1611,8 +1613,8 @@
+ as->event_tail = (as->event_tail + 1) % APM_MAX_EVENTS;
+ }
+ as->events[as->event_head] = event;
+- if (!as->suser)
+- continue;
++ if ((!as->suser) || (!as->writer))
++ continue;
+ switch (event) {
+ case APM_SYS_SUSPEND:
+ case APM_USER_SUSPEND:
+@@ -1630,9 +1632,8 @@
+ #ifdef SHARPSL_NEW_IDLE
+ current->nice = save_nice;
+ current->counter = save_counter;
+-#else
+- wake_up_interruptible(&apm_waitqueue);
+ #endif
++ wake_up_interruptible(&apm_waitqueue);
+ }
+
+ static unsigned long get_cmos_time(void)
+@@ -2532,6 +2533,8 @@
+ * privileged operation -- cevans
+ */
+ as->suser = capable(CAP_SYS_ADMIN);
++ as->writer = (filp->f_mode & FMODE_WRITE) == FMODE_WRITE;
++ as->reader = (filp->f_mode & FMODE_READ) == FMODE_READ;
+ as->next = user_list;
+ user_list = as;
+ filp->private_data = as;
+@@ -3000,6 +3003,9 @@
+ #endif
+ #endif
+
++ suspends_pending = 0;
++ standbys_pending = 0;
++
+ apm_proc = create_proc_info_entry("apm", 0, NULL, apm_get_info);
+ if (apm_proc)
+ SET_MODULE_OWNER(apm_proc);
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/idecs.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/idecs.patch
new file mode 100644
index 0000000000..62038c34e2
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/idecs.patch
@@ -0,0 +1,77 @@
+--- linux/drivers/ide/ide-cs.c 2003-02-28 17:04:00.000000000 -0600
++++ linux.new/drivers/ide/ide-cs.c 2003-02-28 17:18:53.000000000 -0600
+@@ -2,7 +2,7 @@
+
+ A driver for PCMCIA IDE/ATA disk cards
+
+- ide_cs.c 1.26 1999/11/16 02:10:49
++ ide-cs.c 1.26 1999/11/16 02:10:49
+
+ The contents of this file are subject to the Mozilla Public
+ License Version 1.1 (the "License"); you may not use this file
+@@ -66,7 +66,7 @@
+ MODULE_PARM(pc_debug, "i");
+ #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
+ static char *version =
+-"ide_cs.c 1.26 1999/11/16 02:10:49 (David Hinds)";
++"ide-cs.c 1.26 1999/11/16 02:10:49 (David Hinds)";
+ #else
+ #define DEBUG(n, args...)
+ #endif
+@@ -110,7 +110,7 @@
+ static int ide_event(event_t event, int priority,
+ event_callback_args_t *args);
+
+-static dev_info_t dev_info = "ide_cs";
++static dev_info_t dev_info = "ide-cs";
+
+ static dev_link_t *ide_attach(void);
+ static void ide_detach(dev_link_t *);
+@@ -356,7 +356,7 @@
+ }
+
+ if (hd < 0) {
+- printk(KERN_NOTICE "ide_cs: ide_register() at 0x%03x & 0x%03x"
++ printk(KERN_NOTICE "ide-cs: ide_register() at 0x%03x & 0x%03x"
+ ", irq %u failed\n", io_base, ctl_base,
+ link->irq.AssignedIRQ);
+ goto failed;
+@@ -369,7 +369,7 @@
+ info->node.minor = 0;
+ info->hd = hd;
+ link->dev = &info->node;
+- printk(KERN_INFO "ide_cs: %s: Vcc = %d.%d, Vpp = %d.%d\n",
++ printk(KERN_INFO "ide-cs: %s: Vcc = %d.%d, Vpp = %d.%d\n",
+ info->node.dev_name, link->conf.Vcc/10, link->conf.Vcc%10,
+ link->conf.Vpp1/10, link->conf.Vpp1%10);
+
+@@ -409,9 +409,9 @@
+ MOD_DEC_USE_COUNT;
+ }
+
+- request_region(link->io.BasePort1, link->io.NumPorts1,"ide_cs");
++ request_region(link->io.BasePort1, link->io.NumPorts1,"ide-cs");
+ if (link->io.NumPorts2)
+- request_region(link->io.BasePort2, link->io.NumPorts2,"ide_cs");
++ request_region(link->io.BasePort2, link->io.NumPorts2,"ide-cs");
+
+ info->ndev = 0;
+ link->dev = NULL;
+@@ -508,7 +508,7 @@
+ DEBUG(0, "%s\n", version);
+ CardServices(GetCardServicesInfo, &serv);
+ if (serv.Revision != CS_RELEASE_CODE) {
+- printk(KERN_NOTICE "ide_cs: Card Services release "
++ printk(KERN_NOTICE "ide-cs: Card Services release "
+ "does not match!\n");
+ return -1;
+ }
+@@ -518,7 +518,7 @@
+
+ static void __exit exit_ide_cs(void)
+ {
+- DEBUG(0, "ide_cs: unloading\n");
++ DEBUG(0, "ide-cs: unloading\n");
+ unregister_pccard_driver(&dev_info);
+ while (dev_list != NULL)
+ ide_detach(dev_list);
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/initsh.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/initsh.patch
new file mode 100644
index 0000000000..a672631194
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/initsh.patch
@@ -0,0 +1,14 @@
+--- linux/init/main.c 2002-02-25 13:38:13.000000000 -0600
++++ linux.new/init/main.c 2003-03-16 11:49:45.000000000 -0600
+@@ -830,8 +830,10 @@
+ * trying to recover a really broken machine.
+ */
+
+- if (execute_command)
++ if (execute_command) {
++ argv_init[0] = execute_command;
+ execve(execute_command,argv_init,envp_init);
++ }
+ execve("/sbin/init",argv_init,envp_init);
+ execve("/etc/init",argv_init,envp_init);
+ execve("/bin/init",argv_init,envp_init);
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/keyboard-ctrl+alt.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/keyboard-ctrl+alt.patch
new file mode 100644
index 0000000000..93a80bae3c
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/keyboard-ctrl+alt.patch
@@ -0,0 +1,79 @@
+
+#
+# Made by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- linux/drivers/char/corgi_rawmap.h~keyboard-ctrl+alt 2003-09-15 14:30:08.000000000 +0200
++++ linux/drivers/char/corgi_rawmap.h 2003-09-16 00:45:39.000000000 +0200
+@@ -55,7 +55,7 @@
+ SLKEY_ACTIVITY, SLKEY_W, SLKEY_S, SLKEY_F, SLKEY_V, SLKEY_H, SLKEY_M, SLKEY_L, KEY_IGN, SLKEY_RSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_CONTACTS, SLKEY_A, SLKEY_D, SLKEY_C, SLKEY_B, SLKEY_N, SLKEY_PERIOD, KEY_IGN, SLKEY_ENTER, KEY_IGN, SLKEY_LSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_MAIL, SLKEY_Z, SLKEY_X, SLKEY_MINUS, SLKEY_SPACE, SLKEY_COMMA, KEY_IGN, SLKEY_UP, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_2ND, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+- SLKEY_HOME, SLKEY_KANA, SLKEY_ZENHAN, SLKEY_F9, SLKEY_F4, SLKEY_F2, SLKEY_LEFT, SLKEY_DOWN, SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++ SLKEY_HOME, SLKEY_LCONTROL, SLKEY_LALT, SLKEY_F9, SLKEY_F4, SLKEY_F2, SLKEY_LEFT, SLKEY_DOWN, SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_OFF, SLKEY_EXSELECT, SLKEY_EXCANCEL, SLKEY_EXJOGDOWN, SLKEY_EXJOGUP, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN};
+
+ static unsigned char rawkeytable_table_NormalUpper[(NR_KEYCODES+1)] = {
+@@ -66,7 +66,7 @@
+ SLKEY_ACTIVITY, SLKEY_W, SLKEY_S, SLKEY_F, SLKEY_V, SLKEY_H, SLKEY_M, SLKEY_L, KEY_IGN, SLKEY_RSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_CONTACTS, SLKEY_A, SLKEY_D, SLKEY_C, SLKEY_B, SLKEY_N, SLKEY_PERIOD, KEY_IGN, SLKEY_ENTER, KEY_IGN, SLKEY_LSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_MAIL, SLKEY_Z, SLKEY_X, SLKEY_MINUS, SLKEY_SPACE, SLKEY_COMMA, KEY_IGN, SLKEY_UP, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_2ND, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+- SLKEY_HOME, SLKEY_KANA, SLKEY_ZENHAN, SLKEY_F9, SLKEY_F4, SLKEY_F2, SLKEY_LEFT, SLKEY_DOWN, SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++ SLKEY_HOME, SLKEY_LCONTROL, SLKEY_LALT, SLKEY_F9, SLKEY_F4, SLKEY_F2, SLKEY_LEFT, SLKEY_DOWN, SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_OFF, SLKEY_EXSELECT, SLKEY_EXCANCEL, SLKEY_EXJOGDOWN, SLKEY_EXJOGUP, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN};
+
+ static unsigned char rawkeytable_table_2ndLower[(NR_KEYCODES+1)] = {
+@@ -77,7 +77,7 @@
+ SLKEY_ACTIVITY, SLKEY_W, SLKEY_S, SLKEY_F, SLKEY_V, SLKEY_H, SLKEY_M, SLKEY_L, KEY_IGN, SLKEY_RSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_CONTACTS, SLKEY_A, SLKEY_D, SLKEY_C, SLKEY_B, SLKEY_N, SLKEY_PERIOD, KEY_IGN, SLKEY_ENTER, KEY_IGN, SLKEY_LSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_MAIL, SLKEY_Z, SLKEY_X, SLKEY_MINUS, SLKEY_SPACE, SLKEY_COMMA, KEY_IGN, SLKEY_UP, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_2ND, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+- SLKEY_HOME, SLKEY_KANA, SLKEY_ZENHAN, SLKEY_F9, SLKEY_F4, SLKEY_F2, SLKEY_LEFT, SLKEY_DOWN, SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++ SLKEY_HOME, SLKEY_LCONTROL, SLKEY_LALT, SLKEY_F9, SLKEY_F4, SLKEY_F2, SLKEY_LEFT, SLKEY_DOWN, SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_OFF, SLKEY_EXSELECT, SLKEY_EXCANCEL, SLKEY_EXJOGDOWN, SLKEY_EXJOGUP, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN};
+
+ static unsigned char rawkeytable_table_2ndUpper[(NR_KEYCODES+1)] = {
+@@ -88,7 +88,7 @@
+ SLKEY_ACTIVITY, SLKEY_W, SLKEY_S, SLKEY_F, SLKEY_V, SLKEY_H, SLKEY_M, SLKEY_L, KEY_IGN, SLKEY_RSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_CONTACTS, SLKEY_A, SLKEY_D, SLKEY_PRINTSCREEN, SLKEY_B, SLKEY_N, SLKEY_PERIOD, KEY_IGN, SLKEY_ENTER, KEY_IGN, SLKEY_LSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_MAIL, SLKEY_Z, SLKEY_X, SLKEY_MINUS, SLKEY_SPACE, SLKEY_COMMA, KEY_IGN, SLKEY_UP, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_2ND, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+- SLKEY_HOME, SLKEY_KANA, SLKEY_ZENHAN, SLKEY_F9, SLKEY_F4, SLKEY_F2, SLKEY_LEFT, SLKEY_DOWN, SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++ SLKEY_HOME, SLKEY_LCONTROL, SLKEY_LALT, SLKEY_F9, SLKEY_F4, SLKEY_F2, SLKEY_LEFT, SLKEY_DOWN, SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_OFF, SLKEY_EXSELECT, SLKEY_EXCANCEL, SLKEY_EXJOGDOWN, SLKEY_EXJOGUP, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN};
+
+ static unsigned char rawkeytable_table_NumlockLower[(NR_KEYCODES+1)] = {
+@@ -99,7 +99,7 @@
+ SLKEY_ACTIVITY, SLKEY_W, SLKEY_S, SLKEY_F, SLKEY_V, SLKEY_H, SLKEY_M, SLKEY_L, KEY_IGN, SLKEY_RSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_CONTACTS, SLKEY_A, SLKEY_D, SLKEY_C, SLKEY_B, SLKEY_N, SLKEY_PERIOD, KEY_IGN, SLKEY_ENTER, KEY_IGN, SLKEY_LSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_MAIL, SLKEY_Z, SLKEY_X, SLKEY_MINUS, SLKEY_SPACE, SLKEY_COMMA, KEY_IGN, SLKEY_UP, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_2ND, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+- SLKEY_HOME, SLKEY_KANA, SLKEY_ZENHAN, SLKEY_F9, SLKEY_F4, SLKEY_F2, SLKEY_LEFT, SLKEY_DOWN, SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++ SLKEY_HOME, SLKEY_LCONTROL, SLKEY_LALT, SLKEY_F9, SLKEY_F4, SLKEY_F2, SLKEY_LEFT, SLKEY_DOWN, SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_OFF, SLKEY_EXSELECT, SLKEY_EXCANCEL, SLKEY_EXJOGDOWN, SLKEY_EXJOGUP, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN};
+
+ static unsigned char rawkeytable_table_NumlockUpper[(NR_KEYCODES+1)] = {
+@@ -110,7 +110,7 @@
+ SLKEY_ACTIVITY, SLKEY_W, SLKEY_S, SLKEY_F, SLKEY_V, SLKEY_H, SLKEY_M, SLKEY_L, KEY_IGN, SLKEY_RSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_CONTACTS, SLKEY_A, SLKEY_D, SLKEY_C, SLKEY_B, SLKEY_N, SLKEY_PERIOD, KEY_IGN, SLKEY_ENTER, KEY_IGN, SLKEY_LSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_MAIL, SLKEY_Z, SLKEY_X, SLKEY_MINUS, SLKEY_SPACE, SLKEY_COMMA, KEY_IGN, SLKEY_UP, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_2ND, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+- SLKEY_HOME, SLKEY_KANA, SLKEY_ZENHAN, SLKEY_F9, SLKEY_F4, SLKEY_F2, SLKEY_LEFT, SLKEY_DOWN, SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++ SLKEY_HOME, SLKEY_LCONTROL, SLKEY_LALT, SLKEY_F9, SLKEY_F4, SLKEY_F2, SLKEY_LEFT, SLKEY_DOWN, SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_OFF, SLKEY_EXSELECT, SLKEY_EXCANCEL, SLKEY_EXJOGDOWN, SLKEY_EXJOGUP, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN};
+
+ static unsigned char rawkeytable_table_Num2ndLower[(NR_KEYCODES+1)] = {
+@@ -121,7 +121,7 @@
+ SLKEY_ACTIVITY, SLKEY_W, SLKEY_S, SLKEY_F, SLKEY_V, SLKEY_H, SLKEY_M, SLKEY_L, KEY_IGN, SLKEY_RSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_CONTACTS, SLKEY_A, SLKEY_D, SLKEY_C, SLKEY_B, SLKEY_N, SLKEY_PERIOD, KEY_IGN, SLKEY_ENTER, KEY_IGN, SLKEY_LSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_MAIL, SLKEY_Z, SLKEY_X, SLKEY_MINUS, SLKEY_SPACE, SLKEY_COMMA, KEY_IGN, SLKEY_UP, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_2ND, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+- SLKEY_HOME, SLKEY_KANA, SLKEY_ZENHAN, SLKEY_F9, SLKEY_F4, SLKEY_F2, SLKEY_LEFT, SLKEY_DOWN, SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++ SLKEY_HOME, SLKEY_LCONTROL, SLKEY_LALT, SLKEY_F9, SLKEY_F4, SLKEY_F2, SLKEY_LEFT, SLKEY_DOWN, SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_OFF, SLKEY_EXSELECT, SLKEY_EXCANCEL, SLKEY_EXJOGDOWN, SLKEY_EXJOGUP, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN};
+
+ static unsigned char rawkeytable_table_Num2ndUpper[(NR_KEYCODES+1)] = {
+@@ -132,7 +132,7 @@
+ SLKEY_ACTIVITY, SLKEY_W, SLKEY_S, SLKEY_F, SLKEY_V, SLKEY_H, SLKEY_M, SLKEY_L, KEY_IGN, SLKEY_RSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_CONTACTS, SLKEY_A, SLKEY_D, SLKEY_PRINTSCREEN, SLKEY_B, SLKEY_N, SLKEY_PERIOD, KEY_IGN, SLKEY_ENTER, KEY_IGN, SLKEY_LSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_MAIL, SLKEY_Z, SLKEY_X, SLKEY_MINUS, SLKEY_SPACE, SLKEY_COMMA, KEY_IGN, SLKEY_UP, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_2ND, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+- SLKEY_HOME, SLKEY_KANA, SLKEY_ZENHAN, SLKEY_F9, SLKEY_F4, SLKEY_F2, SLKEY_LEFT, SLKEY_DOWN, SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++ SLKEY_HOME, SLKEY_LCONTROL, SLKEY_LALT, SLKEY_F9, SLKEY_F4, SLKEY_F2, SLKEY_LEFT, SLKEY_DOWN, SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
+ SLKEY_OFF, SLKEY_EXSELECT, SLKEY_EXCANCEL, SLKEY_EXJOGDOWN, SLKEY_EXJOGUP, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN};
+
+
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/keymap-more-sane.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/keymap-more-sane.patch
new file mode 100644
index 0000000000..a58dd13fbd
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/keymap-more-sane.patch
@@ -0,0 +1,23 @@
+--- linux/drivers/char/corgi_keymap.map~keymap-more-sane 2003-08-30 01:05:14.000000000 +0200
++++ linux/drivers/char/corgi_keymap.map 2003-09-03 20:44:27.000000000 +0200
+@@ -71,9 +71,11 @@
+ # (Cancel:34) F9 -> Escape
+ keycode 34 = Escape
+ keycode 35 = Left
++ alt keycode 35 = Decr_Console
+ keycode 36 = Up
+ keycode 37 = Down
+ keycode 38 = Right
++ alt keycode 38 = Incr_Console
+ # (OK:39) F4 -> Return
+ keycode 39 = Return
+ keycode 40 =
+@@ -100,7 +102,7 @@
+ keycode 60 = Shift_Lock
+ keycode 61 = at
+ keycode 62 = question
+-keycode 63 = comma slash
++keycode 63 = slash comma
+ alt keycode 63 = less
+ keycode 64 = period question
+ alt keycode 64 = greater
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/logo.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/logo.patch
new file mode 100644
index 0000000000..fd8084254c
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/logo.patch
@@ -0,0 +1,2598 @@
+--- linux/drivers/video/fbcon.c 2003-02-27 21:47:36.000000000 -0600
++++ linux.new/drivers/video/fbcon.c 2003-02-27 18:39:39.000000000 -0600
+@@ -126,8 +126,8 @@
+ #define LOGO_H (320-16)
+ #define LOGO_W 240
+ #else
+-#define LOGO_H 80
+-#define LOGO_W 80
++#define LOGO_H 52
++#define LOGO_W 240
+ #endif
+ #define LOGO_LINE (LOGO_W/8)
+ #if defined(CONFIG_SHARP_LOGO_SCREEN)
+--- linux/include/linux/linux_logo.h 2001-06-11 21:15:27.000000000 -0500
++++ linux.new/include/linux/linux_logo.h 2003-02-27 15:58:15.000000000 -0600
+@@ -1,4 +1,4 @@
+-/* $Id: linux_logo.h,v 1.5 1998/07/30 16:30:58 jj Exp $
++/* linux_logo.h created with fblogo, 2002/12/29 02:43:36
+ * include/linux/linux_logo.h: This is a linux logo
+ * to be displayed on boot.
+ *
+@@ -7,907 +7,1673 @@
+ *
+ * You can put anything here, but:
+ * LINUX_LOGO_COLORS has to be less than 224
+- * image size has to be 80x80
+- * values have to start from 0x20
+- * (i.e. RGB(linux_logo_red[0],
+- * linux_logo_green[0],
+- * linux_logo_blue[0]) is color 0x20)
+- * BW image has to be 80x80 as well, with MS bit
+- * on the left
+- * Serial_console ascii image can be any size,
+- * but should contain %s to display the version
++ * Generated by fblogo version 0.5.0
++ *
++ *
++ * Remember to modify drivers/video/fbcon.c:
++ * Change "#define LOGO_H 80" to "#define LOGO_H 52"
++ * Change "#define LOGO_W 80" to "#define LOGO_W 240"
+ */
+
+ #ifndef __HAVE_ARCH_LINUX_LOGO
+-#define LINUX_LOGO_COLORS 187
++#define LINUX_LOGO_COLORS 223
+ #endif
+-
+ #ifdef INCLUDE_LINUX_LOGO_DATA
+-
+ #ifndef __HAVE_ARCH_LINUX_LOGO
+-
+ unsigned char linux_logo_red[] __initdata = {
+- 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22,
+- 0x12, 0x00, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56,
+- 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x02, 0x65,
+- 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6,
+- 0xc3, 0x65, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6,
+- 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7,
+- 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x76, 0x79,
+- 0x62, 0x36, 0x9a, 0xe2, 0xec, 0xe1, 0xb8, 0xd7,
+- 0xaf, 0x25, 0xbc, 0xc0, 0xef, 0xea, 0xe8, 0xe8,
+- 0xf5, 0xf1, 0xda, 0xd3, 0x79, 0xdb, 0xf4, 0xf6,
+- 0xf6, 0xf6, 0xe2, 0x3d, 0xb4, 0xce, 0xe6, 0xee,
+- 0xf6, 0x68, 0xd8, 0xec, 0xf5, 0xc6, 0xc8, 0x9c,
+- 0x89, 0xd2, 0xee, 0xcb, 0xb9, 0xd2, 0x66, 0x5e,
+- 0x8b, 0xbe, 0xa8, 0xd5, 0xca, 0xb6, 0xae, 0x9c,
+- 0xc5, 0xbe, 0xbe, 0xca, 0x90, 0xb2, 0x9a, 0xa8,
+- 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0x12,
+- 0x4a, 0x8e, 0xf2, 0xf6, 0xf6, 0xee, 0xb5, 0xe4,
+- 0xf1, 0x26, 0x9a, 0xea, 0xf6, 0xe0, 0xd2, 0x16,
+- 0x9a, 0x2e, 0x70, 0xd6, 0x46, 0x7c, 0xb4, 0x62,
+- 0xd6, 0xa3, 0x74, 0xa7, 0xa2, 0xca, 0xe0, 0xae,
+- 0xbe, 0xce, 0xa3, 0x8e, 0x6d, 0x8e, 0x32, 0xaf,
+- 0x50, 0x9e, 0x5b, 0x8a, 0x98, 0x82, 0x7a, 0x82,
+- 0x56, 0x7c, 0x8a, 0x56, 0x5e, 0x86, 0x6a, 0x52,
+- 0x59, 0x64, 0x5e,
++ 0x00, 0x02, 0x06, 0x0A, 0x56, 0xA6, 0xBE, 0xBA,
++ 0xB6, 0x92, 0x3E, 0x1A, 0x8A, 0xF3, 0xFB, 0xEE,
++ 0xC6, 0x62, 0x4A, 0x12, 0x26, 0x0E, 0x76, 0xDA,
++ 0x6E, 0x32, 0x8E, 0x1E, 0x2A, 0xCE, 0xE2, 0x36,
++ 0x66, 0xA2, 0x2E, 0x9E, 0xCA, 0x6A, 0x5A, 0x82,
++ 0x7E, 0xE9, 0xD2, 0xDE, 0x22, 0x72, 0xAE, 0xD6,
++ 0x86, 0x3A, 0x52, 0x9A, 0xAA, 0x16, 0x46, 0x4E,
++ 0x42, 0xC2, 0x96, 0x7A, 0x5E, 0xB2, 0x32, 0x7E,
++ 0x3A, 0x16, 0x02, 0x02, 0x06, 0x1F, 0x02, 0x02,
++ 0x06, 0x02, 0x22, 0x3A, 0x35, 0x16, 0x0A, 0x02,
++ 0x2A, 0x3E, 0x39, 0x32, 0x2A, 0x1E, 0x16, 0x06,
++ 0x22, 0x22, 0x1E, 0x16, 0x6E, 0x82, 0x6E, 0x2E,
++ 0x1E, 0x2E, 0x1E, 0x0A, 0x3A, 0xDA, 0xFE, 0xFA,
++ 0xFA, 0xE2, 0x6A, 0x3A, 0x1A, 0xFA, 0xF6, 0x9E,
++ 0x02, 0x6E, 0xFE, 0xF6, 0x3E, 0x66, 0x52, 0x1B,
++ 0xD6, 0x5A, 0xEE, 0xC6, 0x72, 0x36, 0x22, 0x1E,
++ 0x02, 0x96, 0xF6, 0xDE, 0xA2, 0xD6, 0x39, 0x0E,
++ 0xAA, 0x52, 0x5A, 0xD2, 0xDE, 0x61, 0x46, 0xDE,
++ 0x7A, 0x57, 0x9E, 0xBA, 0xB6, 0x4A, 0x5A, 0xA6,
++ 0x96, 0x23, 0x1E, 0x12, 0x9A, 0x4E, 0x76, 0xAE,
++ 0x2E, 0xBE, 0x86, 0x48, 0xA6, 0x52, 0x06, 0x2E,
++ 0x56, 0x13, 0x2A, 0x4A, 0x36, 0x56, 0x2E, 0x1E,
++ 0x46, 0x3A, 0x66, 0x02, 0x3D, 0x3E, 0x2E, 0x3E,
++ 0x4A, 0x32, 0x52, 0x72, 0x76, 0x67, 0x68, 0x5A,
++ 0x3A, 0x1A, 0x0E, 0x2E, 0x4E, 0x02, 0x3E, 0x0A,
++ 0x28, 0x42, 0x10, 0x26, 0x8E, 0x0A, 0x86, 0xC2,
++ 0x02, 0x6E, 0x92, 0x02, 0x42, 0x02, 0xBE, 0x4E,
++ 0x02, 0x22, 0x02, 0x3E, 0x3A, 0x32
+ };
+
+ unsigned char linux_logo_green[] __initdata = {
+- 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22,
+- 0x12, 0x00, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56,
+- 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x02, 0x65,
+- 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6,
+- 0xc3, 0x62, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6,
+- 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7,
+- 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x62, 0x5c,
+- 0x4e, 0x26, 0x72, 0xaa, 0xba, 0xaf, 0x90, 0xae,
+- 0x92, 0x1a, 0xa4, 0x85, 0xb6, 0xbe, 0xc3, 0xc8,
+- 0xcf, 0xd0, 0xc2, 0xce, 0x57, 0xa2, 0xd6, 0xda,
+- 0xda, 0xd7, 0xb8, 0x2a, 0x7b, 0x91, 0xae, 0xca,
+- 0xda, 0x45, 0x9e, 0xb2, 0xd7, 0x9b, 0x90, 0x76,
+- 0x5c, 0xa2, 0xbe, 0xa6, 0x85, 0x96, 0x4e, 0x46,
+- 0x66, 0x92, 0x7a, 0x9a, 0x96, 0x9d, 0x9a, 0x6b,
+- 0x8a, 0x8e, 0xb2, 0xca, 0x90, 0xa6, 0x79, 0x7c,
+- 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0x0e,
+- 0x36, 0x86, 0xba, 0xbe, 0xe6, 0xcc, 0x8e, 0xb8,
+- 0xc4, 0x1e, 0x8e, 0xae, 0xba, 0xb2, 0xa6, 0x12,
+- 0x7a, 0x20, 0x64, 0xaa, 0x2f, 0x70, 0x85, 0x46,
+- 0xa6, 0x6e, 0x51, 0x72, 0x92, 0xa2, 0xa6, 0x87,
+- 0x96, 0xa2, 0x85, 0x7a, 0x6a, 0x6e, 0x22, 0x76,
+- 0x36, 0x76, 0x3c, 0x6e, 0x63, 0x53, 0x66, 0x62,
+- 0x42, 0x50, 0x56, 0x42, 0x56, 0x56, 0x56, 0x3e,
+- 0x51, 0x52, 0x56,
++ 0x00, 0x02, 0x06, 0x0A, 0x56, 0xA6, 0xBE, 0xBA,
++ 0xB6, 0x92, 0x3E, 0x1A, 0x8A, 0xF3, 0xFB, 0xEE,
++ 0xC6, 0x62, 0x4A, 0x12, 0x26, 0x0E, 0x76, 0xDA,
++ 0x6E, 0x32, 0x8E, 0x1E, 0x2A, 0xCE, 0xE2, 0x36,
++ 0x66, 0xA2, 0x2E, 0x9E, 0xCA, 0x6A, 0x5A, 0x82,
++ 0x7E, 0xE9, 0xD2, 0xDE, 0x22, 0x72, 0xAE, 0xD6,
++ 0x86, 0x3A, 0x52, 0x9A, 0xAA, 0x16, 0x46, 0x4E,
++ 0x42, 0xC2, 0x96, 0x7A, 0x5E, 0xB2, 0x2E, 0x7E,
++ 0x3A, 0x3E, 0x6A, 0xA2, 0x92, 0x30, 0x95, 0x76,
++ 0x4E, 0x86, 0x36, 0x7E, 0x9A, 0x6E, 0x42, 0x56,
++ 0x5A, 0xC2, 0xBE, 0xB2, 0xAA, 0x9A, 0x63, 0x1E,
++ 0xA2, 0x9E, 0x96, 0x5A, 0x3A, 0x42, 0x4A, 0x52,
++ 0x91, 0x46, 0x4E, 0x62, 0x22, 0x4A, 0x6E, 0x86,
++ 0x92, 0x9A, 0x52, 0x4A, 0x76, 0x7A, 0x9E, 0x76,
++ 0x62, 0x32, 0x5E, 0xAE, 0x3E, 0x66, 0x52, 0x81,
++ 0xA6, 0x5A, 0xEE, 0xC6, 0x72, 0x5C, 0x6A, 0x8A,
++ 0x36, 0x3E, 0xBA, 0xBA, 0xA2, 0xD6, 0xAA, 0x4E,
++ 0x8A, 0x4E, 0x5A, 0xD2, 0xDE, 0x64, 0x32, 0x9A,
++ 0x5E, 0x57, 0x9E, 0xBA, 0xB6, 0x52, 0x62, 0xA6,
++ 0x9A, 0x47, 0x3E, 0x56, 0x02, 0x1A, 0x76, 0xAE,
++ 0x4A, 0x02, 0x02, 0x38, 0x02, 0x4A, 0x46, 0x86,
++ 0x1E, 0x2E, 0x7A, 0xD2, 0x5E, 0x26, 0x92, 0x62,
++ 0xCA, 0x42, 0x66, 0x26, 0x67, 0xB6, 0x62, 0x92,
++ 0x9E, 0x72, 0xB2, 0xF2, 0xFE, 0xDE, 0xFE, 0xFE,
++ 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x8A, 0x2A,
++ 0x42, 0x52, 0x6A, 0x26, 0x8E, 0x26, 0x86, 0xC2,
++ 0xE2, 0x6E, 0x92, 0xBE, 0x42, 0xC6, 0xBE, 0x4E,
++ 0xEE, 0x5A, 0xEA, 0x3E, 0x4A, 0x32
+ };
+
+ unsigned char linux_logo_blue[] __initdata = {
+- 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22,
+- 0x12, 0x01, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56,
+- 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x06, 0x65,
+- 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6,
+- 0xc3, 0x59, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6,
+- 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7,
+- 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x2e, 0x08,
+- 0x0a, 0x06, 0x0a, 0x0b, 0x0b, 0x0f, 0x0c, 0x0f,
+- 0x3d, 0x09, 0x73, 0x09, 0x0d, 0x0a, 0x10, 0x1e,
+- 0x2d, 0x13, 0x86, 0xba, 0x19, 0x0a, 0x36, 0x3c,
+- 0x26, 0x14, 0x0d, 0x06, 0x07, 0x0a, 0x0b, 0x0f,
+- 0x4a, 0x06, 0x0a, 0x0c, 0x2b, 0x0a, 0x0b, 0x0a,
+- 0x06, 0x0a, 0x0a, 0x11, 0x0b, 0x0a, 0x0a, 0x1e,
+- 0x0f, 0x0d, 0x0a, 0x0b, 0x22, 0x6a, 0x72, 0x0b,
+- 0x0b, 0x22, 0x90, 0xca, 0x90, 0x92, 0x3c, 0x2c,
+- 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0x06,
+- 0x0e, 0x6a, 0x0e, 0x0e, 0xbe, 0x5b, 0x2c, 0x3e,
+- 0x0e, 0x0a, 0x5a, 0x0d, 0x0e, 0x3e, 0x0a, 0x06,
+- 0x2e, 0x06, 0x4e, 0x36, 0x06, 0x58, 0x24, 0x06,
+- 0x3a, 0x08, 0x08, 0x07, 0x5e, 0x45, 0x0a, 0x32,
+- 0x2e, 0x2a, 0x43, 0x48, 0x5f, 0x2e, 0x06, 0x06,
+- 0x07, 0x24, 0x06, 0x32, 0x06, 0x06, 0x46, 0x2e,
+- 0x22, 0x06, 0x06, 0x1e, 0x4c, 0x06, 0x3a, 0x22,
+- 0x42, 0x34, 0x42,
++ 0x00, 0x02, 0x06, 0x0A, 0x56, 0xA6, 0xBE, 0xBA,
++ 0xB6, 0x92, 0x3E, 0x1A, 0x8A, 0xF3, 0xFB, 0xEE,
++ 0xC6, 0x62, 0x4A, 0x12, 0x26, 0x0E, 0x76, 0xDA,
++ 0x6E, 0x32, 0x8E, 0x1E, 0x2A, 0xCE, 0xE2, 0x36,
++ 0x66, 0xA2, 0x2E, 0x9E, 0xCA, 0x6A, 0x5A, 0x82,
++ 0x7E, 0xE9, 0xD2, 0xDE, 0x22, 0x72, 0xAE, 0xD6,
++ 0x86, 0x3A, 0x52, 0x9A, 0xAA, 0x16, 0x46, 0x4E,
++ 0x42, 0xC2, 0x96, 0x7A, 0x5E, 0xB2, 0x1A, 0x06,
++ 0x1A, 0x2A, 0x36, 0x52, 0x46, 0x23, 0x4D, 0x3E,
++ 0x2A, 0x42, 0x2A, 0x5A, 0x69, 0x42, 0x26, 0x2E,
++ 0x42, 0x7E, 0x7C, 0x72, 0x6A, 0x5E, 0x3B, 0x12,
++ 0x62, 0x5E, 0x5A, 0x36, 0x26, 0x1E, 0x26, 0x42,
++ 0x56, 0x3A, 0x36, 0x36, 0x1E, 0x2E, 0x2A, 0x22,
++ 0x22, 0x1A, 0x16, 0x42, 0x46, 0x26, 0x1E, 0x12,
++ 0x32, 0x2A, 0x2E, 0x16, 0x2A, 0x1A, 0x2E, 0x4E,
++ 0x12, 0x22, 0x02, 0x02, 0x12, 0x4A, 0x46, 0x52,
++ 0x1E, 0x1E, 0x16, 0x0E, 0x02, 0x02, 0x6F, 0x2E,
++ 0x0E, 0x1A, 0x06, 0x02, 0x02, 0x04, 0x22, 0x16,
++ 0x0E, 0x12, 0x02, 0x02, 0x02, 0x0A, 0x5A, 0x02,
++ 0x02, 0x1B, 0x2E, 0x32, 0x02, 0x02, 0x02, 0x02,
++ 0x16, 0x02, 0x02, 0x10, 0x02, 0x02, 0x26, 0x5A,
++ 0x02, 0x1F, 0x52, 0x8E, 0x22, 0x02, 0x5E, 0x3E,
++ 0x86, 0x0E, 0x16, 0x16, 0x52, 0x7A, 0x4A, 0x66,
++ 0x72, 0x52, 0x82, 0xB2, 0xBA, 0xA4, 0xB2, 0xAA,
++ 0x9E, 0x8E, 0x88, 0x96, 0xA6, 0x82, 0x62, 0x1A,
++ 0x34, 0x4A, 0x31, 0x16, 0x02, 0x1A, 0x02, 0x02,
++ 0x72, 0x02, 0x02, 0x5E, 0x1A, 0x62, 0x02, 0x0E,
++ 0x76, 0x1E, 0x76, 0x1E, 0x0A, 0x02
+ };
+
+ unsigned char linux_logo[] __initdata = {
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22, 0x22,
+- 0x22, 0x21, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+- 0x26, 0x26, 0x25, 0x28, 0x23, 0x22, 0x21, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x21, 0x23, 0x25, 0x2a, 0x2b, 0x2c, 0x2d, 0x2d,
+- 0x2d, 0x2e, 0x2c, 0x2b, 0x2a, 0x25, 0x28, 0x22,
+- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x24, 0x2a, 0x2c, 0x2f, 0x2c, 0x30, 0x30, 0x24,
+- 0x25, 0x27, 0x2b, 0x2c, 0x2f, 0x31, 0x32, 0x25,
+- 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x25,
+- 0x33, 0x34, 0x35, 0x21, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x21, 0x2b, 0x2f, 0x2c,
+- 0x30, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, 0x33,
+- 0x2d, 0x27, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x31,
+- 0x2d, 0x32, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x21, 0x28, 0x2a, 0x34,
+- 0x25, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x23, 0x32, 0x27, 0x21, 0x36,
+- 0x2a, 0x2d, 0x2a, 0x28, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x2c, 0x35,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x25, 0x2f, 0x37, 0x32, 0x22,
+- 0x36, 0x35, 0x31, 0x27, 0x22, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x23, 0x2a, 0x2f, 0x22,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x26, 0x38, 0x38, 0x35, 0x25,
+- 0x36, 0x21, 0x2d, 0x2b, 0x24, 0x21, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x21, 0x24, 0x39, 0x39, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x25, 0x2b, 0x30, 0x28, 0x22,
+- 0x36, 0x36, 0x27, 0x34, 0x30, 0x23, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x21, 0x26, 0x2d, 0x26, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x22, 0x22, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x2d, 0x33, 0x28, 0x21, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x23, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x2b, 0x2c, 0x25, 0x21, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x2a, 0x34, 0x36, 0x36,
+- 0x36, 0x21, 0x22, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x21, 0x23, 0x22, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x28, 0x34, 0x27, 0x22, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x36,
+- 0x21, 0x21, 0x24, 0x27, 0x21, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x28, 0x27, 0x22, 0x33, 0x24, 0x36,
+- 0x36, 0x36, 0x36, 0x22, 0x2f, 0x2a, 0x23, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x36,
+- 0x30, 0x3a, 0x38, 0x24, 0x24, 0x36, 0x36, 0x36,
+- 0x23, 0x2f, 0x3b, 0x3c, 0x3d, 0x30, 0x25, 0x21,
+- 0x36, 0x36, 0x36, 0x36, 0x2f, 0x32, 0x23, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x23,
+- 0x3e, 0x3f, 0x40, 0x3a, 0x22, 0x36, 0x36, 0x21,
+- 0x41, 0x42, 0x43, 0x44, 0x45, 0x3e, 0x23, 0x21,
+- 0x36, 0x36, 0x36, 0x36, 0x2f, 0x33, 0x28, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x29, 0x20, 0x29, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x2b,
+- 0x44, 0x40, 0x46, 0x47, 0x35, 0x36, 0x36, 0x26,
+- 0x43, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x2e, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x31, 0x35, 0x24, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x32, 0x34, 0x36, 0x4d,
+- 0x4e, 0x25, 0x2f, 0x46, 0x4a, 0x22, 0x23, 0x32,
+- 0x4f, 0x50, 0x21, 0x31, 0x51, 0x52, 0x53, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x31, 0x35, 0x24, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x29, 0x20, 0x29, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x2a, 0x2f, 0x21, 0x3a,
+- 0x4d, 0x21, 0x31, 0x54, 0x55, 0x28, 0x30, 0x2b,
+- 0x4b, 0x4d, 0x36, 0x23, 0x32, 0x50, 0x3f, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x2e, 0x39, 0x24, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x29, 0x20, 0x29, 0x20, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x2a, 0x38, 0x23, 0x37,
+- 0x55, 0x36, 0x28, 0x3a, 0x56, 0x57, 0x57, 0x58,
+- 0x3c, 0x4d, 0x36, 0x36, 0x36, 0x40, 0x40, 0x21,
+- 0x36, 0x36, 0x36, 0x36, 0x2e, 0x39, 0x24, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x29, 0x29, 0x29, 0x20, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x30, 0x51, 0x23, 0x35,
+- 0x43, 0x25, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e,
+- 0x5f, 0x60, 0x61, 0x36, 0x31, 0x47, 0x3b, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x31, 0x2c, 0x25, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x23, 0x22,
+- 0x40, 0x62, 0x63, 0x5d, 0x64, 0x65, 0x66, 0x67,
+- 0x68, 0x69, 0x66, 0x5e, 0x6a, 0x6b, 0x2a, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x33, 0x2e, 0x26, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x27, 0x2f, 0x23, 0x36,
+- 0x6c, 0x63, 0x6d, 0x64, 0x5c, 0x66, 0x69, 0x6e,
+- 0x6f, 0x70, 0x71, 0x69, 0x69, 0x72, 0x6c, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x33, 0x34, 0x27, 0x22,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x27, 0x34, 0x26, 0x73,
+- 0x74, 0x75, 0x76, 0x64, 0x65, 0x77, 0x69, 0x78,
+- 0x70, 0x71, 0x71, 0x71, 0x72, 0x5f, 0x5e, 0x21,
+- 0x36, 0x36, 0x36, 0x36, 0x25, 0x38, 0x2a, 0x23,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x26, 0x2d, 0x33, 0x79,
+- 0x63, 0x7a, 0x7b, 0x5c, 0x66, 0x69, 0x6e, 0x7c,
+- 0x71, 0x71, 0x69, 0x7d, 0x7e, 0x7a, 0x7f, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x21, 0x51, 0x2b, 0x28,
+- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x26, 0x2d, 0x32, 0x24,
+- 0x80, 0x81, 0x64, 0x82, 0x77, 0x69, 0x71, 0x71,
+- 0x69, 0x83, 0x84, 0x85, 0x7a, 0x85, 0x86, 0x36,
+- 0x21, 0x2b, 0x23, 0x36, 0x36, 0x39, 0x2e, 0x26,
+- 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x27, 0x2d, 0x33, 0x21,
+- 0x87, 0x88, 0x89, 0x72, 0x67, 0x66, 0x5f, 0x89,
+- 0x8a, 0x63, 0x85, 0x8b, 0x8c, 0x8d, 0x41, 0x36,
+- 0x36, 0x2d, 0x3a, 0x35, 0x36, 0x24, 0x51, 0x32,
+- 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x33, 0x21,
+- 0x55, 0x8e, 0x8f, 0x8a, 0x7d, 0x5e, 0x90, 0x7e,
+- 0x75, 0x75, 0x90, 0x62, 0x40, 0x3f, 0x49, 0x23,
+- 0x36, 0x24, 0x3a, 0x3a, 0x24, 0x36, 0x2e, 0x31,
+- 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x21, 0x28, 0x33, 0x37, 0x25, 0x22,
+- 0x3b, 0x50, 0x8e, 0x8f, 0x90, 0x7e, 0x90, 0x63,
+- 0x74, 0x91, 0x92, 0x42, 0x93, 0x4b, 0x45, 0x2c,
+- 0x36, 0x36, 0x33, 0x39, 0x21, 0x36, 0x22, 0x51,
+- 0x33, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x22, 0x27, 0x2e, 0x2e, 0x36, 0x21,
+- 0x94, 0x3f, 0x50, 0x95, 0x96, 0x8f, 0x8f, 0x97,
+- 0x8e, 0x42, 0x50, 0x43, 0x47, 0x48, 0x48, 0x98,
+- 0x21, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x39,
+- 0x2e, 0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x22, 0x24, 0x2b, 0x38, 0x28, 0x36, 0x32,
+- 0x4c, 0x4b, 0x50, 0x50, 0x50, 0x42, 0x42, 0x50,
+- 0x50, 0x40, 0x45, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x34, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x23,
+- 0x2f, 0x2b, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x21, 0x28, 0x32, 0x51, 0x32, 0x28, 0x21, 0x98,
+- 0x48, 0x47, 0x9a, 0x50, 0x50, 0x50, 0x50, 0x50,
+- 0x9a, 0x4f, 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x93, 0x23, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x2a, 0x2f, 0x2a, 0x28, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x23, 0x30, 0x2e, 0x2c, 0x36, 0x21, 0x51, 0x9b,
+- 0x48, 0x48, 0x52, 0x3f, 0x50, 0x50, 0x40, 0x4b,
+- 0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x34, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x2d, 0x31, 0x27, 0x23, 0x21, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23,
+- 0x27, 0x2c, 0x2d, 0x21, 0x36, 0x28, 0x44, 0x48,
+- 0x48, 0x48, 0x48, 0x47, 0x46, 0x4f, 0x47, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x9c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x28, 0x51, 0x39, 0x26, 0x22, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x25,
+- 0x35, 0x51, 0x28, 0x36, 0x36, 0x9d, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x9b, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x4f, 0x28, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x28, 0x38, 0x2b, 0x25, 0x22, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, 0x33,
+- 0x51, 0x25, 0x36, 0x36, 0x23, 0x40, 0x9b, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x9b, 0x99, 0x2b, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x30, 0x2f, 0x33, 0x24, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x21, 0x23, 0x30, 0x34,
+- 0x27, 0x36, 0x36, 0x36, 0x2a, 0x40, 0x47, 0x48,
+- 0x48, 0x48, 0x48, 0x9b, 0x99, 0x99, 0x9b, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x9b, 0x47, 0x52,
+- 0x46, 0x4f, 0x37, 0x21, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x30, 0x34, 0x2a, 0x23,
+- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x22, 0x25, 0x39, 0x2c,
+- 0x36, 0x36, 0x36, 0x21, 0x31, 0x4e, 0x9a, 0x4c,
+- 0x47, 0x9b, 0x9b, 0x52, 0x46, 0x4f, 0x52, 0x9b,
+- 0x9b, 0x9b, 0x47, 0x4f, 0x45, 0x9a, 0x93, 0x93,
+- 0x3f, 0x93, 0x98, 0x28, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x39, 0x2c, 0x26,
+- 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x23, 0x2a, 0x34, 0x28,
+- 0x36, 0x36, 0x36, 0x22, 0x38, 0x98, 0x44, 0x99,
+- 0x9b, 0x48, 0x48, 0x9b, 0x4c, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x47, 0x52, 0x46, 0x43, 0x93,
+- 0x40, 0x40, 0x43, 0x53, 0x21, 0x23, 0x33, 0x23,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x2f, 0x32,
+- 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x21, 0x24, 0x2b, 0x31, 0x36,
+- 0x36, 0x22, 0x36, 0x24, 0x9e, 0x4f, 0x9b, 0x48,
+- 0x48, 0x48, 0x48, 0x9b, 0x99, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x47,
+- 0x4f, 0x9a, 0x3f, 0x46, 0x38, 0x36, 0x21, 0x30,
+- 0x26, 0x36, 0x36, 0x36, 0x36, 0x36, 0x39, 0x2c,
+- 0x25, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x26, 0x2e, 0x33, 0x36,
+- 0x25, 0x25, 0x36, 0x4d, 0x52, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x47, 0x44, 0x93, 0x43, 0x23, 0x36, 0x36,
+- 0x26, 0x24, 0x36, 0x36, 0x36, 0x36, 0x28, 0x2f,
+- 0x2a, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x2a, 0x51, 0x24, 0x36,
+- 0x2a, 0x36, 0x28, 0x44, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x9b, 0x4b, 0x44, 0x37, 0x36, 0x23,
+- 0x28, 0x30, 0x22, 0x36, 0x36, 0x36, 0x36, 0x2d,
+- 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x21, 0x28, 0x2b, 0x34, 0x36, 0x25,
+- 0x24, 0x36, 0x4a, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x9b, 0x52, 0x3f, 0x21, 0x30,
+- 0x35, 0x25, 0x30, 0x36, 0x36, 0x36, 0x36, 0x32,
+- 0x2d, 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x22, 0x26, 0x2e, 0x35, 0x36, 0x2a,
+- 0x36, 0x24, 0x4f, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x9b, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x47, 0x32, 0x30,
+- 0x2a, 0x23, 0x30, 0x23, 0x36, 0x36, 0x36, 0x21,
+- 0x2f, 0x32, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x21, 0x23, 0x2a, 0x51, 0x28, 0x28, 0x25,
+- 0x36, 0x3a, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x9b, 0x52, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x38, 0x21,
+- 0x36, 0x36, 0x22, 0x27, 0x36, 0x36, 0x36, 0x36,
+- 0x2e, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x22, 0x25, 0x2c, 0x34, 0x36, 0x30, 0x21,
+- 0x23, 0x43, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x47, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x94, 0x36,
+- 0x36, 0x36, 0x36, 0x32, 0x36, 0x36, 0x36, 0x36,
+- 0x2a, 0x2e, 0x26, 0x22, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x21, 0x23, 0x2a, 0x51, 0x25, 0x21, 0x2a, 0x36,
+- 0x2e, 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x99, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x98, 0x36,
+- 0x36, 0x36, 0x36, 0x32, 0x36, 0x36, 0x36, 0x36,
+- 0x22, 0x2f, 0x30, 0x22, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x22, 0x25, 0x2c, 0x34, 0x36, 0x24, 0x28, 0x36,
+- 0x54, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4c, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x9a, 0x36,
+- 0x36, 0x36, 0x36, 0x30, 0x36, 0x36, 0x36, 0x36,
+- 0x21, 0x2f, 0x32, 0x23, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x28, 0x32, 0x2f, 0x28, 0x36, 0x27, 0x22, 0x21,
+- 0x43, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4c, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4b, 0x21,
+- 0x36, 0x36, 0x21, 0x26, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x34, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x25, 0x2c, 0x39, 0x36, 0x36, 0x30, 0x22, 0x25,
+- 0x52, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x52, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4f, 0x21,
+- 0x36, 0x36, 0x22, 0x26, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x2c, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x30, 0x2d, 0x21, 0x36, 0x36, 0x32, 0x23, 0x2a,
+- 0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4c, 0x22,
+- 0x36, 0x36, 0x24, 0x23, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x2c, 0x39, 0x24, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
+- 0x33, 0x2e, 0x36, 0x36, 0x23, 0x31, 0x27, 0x39,
+- 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x47, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4c, 0x23,
+- 0x36, 0x36, 0x26, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x2c, 0x39, 0x24, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
+- 0x2b, 0x39, 0x36, 0x36, 0x36, 0x26, 0x32, 0x31,
+- 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x47, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x46, 0x22,
+- 0x36, 0x21, 0x26, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x2c, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24,
+- 0x35, 0x39, 0x36, 0x36, 0x36, 0x36, 0x26, 0x2d,
+- 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x47, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x9a, 0x36,
+- 0x24, 0x27, 0x9f, 0x24, 0x25, 0x28, 0x21, 0x36,
+- 0x36, 0x34, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x25,
+- 0x39, 0x4d, 0xa0, 0x84, 0x81, 0x57, 0x21, 0x39,
+- 0x52, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x47, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x53, 0x28,
+- 0x23, 0x36, 0x36, 0x36, 0x21, 0x28, 0x2c, 0x30,
+- 0x21, 0x38, 0x33, 0x28, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x21, 0x22, 0x22, 0x28, 0x30,
+- 0x2d, 0xa1, 0x7a, 0xa2, 0xa3, 0xa3, 0x7f, 0x22,
+- 0x51, 0x52, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x9b, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0xa4, 0xa5, 0xa5, 0xa6, 0x61,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x30, 0x32,
+- 0x25, 0x4d, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x21, 0x23, 0x24, 0x26, 0x30, 0x33, 0x31,
+- 0x4d, 0x91, 0x5b, 0xa2, 0xa3, 0xa3, 0xa3, 0x5a,
+- 0x21, 0x2e, 0x46, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x9b, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0xa7, 0xa8, 0x69, 0x66, 0xa9,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x26, 0x25,
+- 0x83, 0xaa, 0x2c, 0x25, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x21, 0x28, 0x30, 0x35, 0x2d, 0x2f, 0x37, 0x4a,
+- 0x60, 0x85, 0xab, 0xac, 0xa3, 0xa3, 0xa3, 0x82,
+- 0x86, 0x36, 0x32, 0x3f, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4c, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0xad, 0xa2, 0xa8, 0xae, 0xaf,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x57,
+- 0x77, 0x66, 0x34, 0x27, 0x22, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x23, 0x30, 0x31, 0xb0, 0x91, 0x7e, 0x90, 0x90,
+- 0x8b, 0x5b, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0x5d, 0xb1, 0x36, 0x24, 0x53, 0x9b, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x9b, 0x99, 0xad, 0x64, 0x5c, 0x8b, 0xb1,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x73, 0x5d,
+- 0x82, 0x5c, 0xb2, 0x2a, 0x23, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x24, 0x2b, 0xb0, 0x8b, 0x5b, 0x76, 0x5b, 0x5b,
+- 0x7b, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa8, 0x5e, 0x22, 0x36, 0x21, 0x3a, 0x99, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x4f, 0x3f, 0xb3, 0x7b, 0x7b, 0x85, 0x80,
+- 0x9f, 0x36, 0x36, 0x36, 0x21, 0xb4, 0x7e, 0x7b,
+- 0x64, 0x64, 0xb5, 0x35, 0x24, 0x21, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x26, 0x31, 0xb6, 0x5b, 0x64, 0xa2, 0xa2, 0xac,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0x66, 0xb7, 0x36, 0x36, 0x36, 0x2c, 0x4b,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x9a, 0x3f, 0xb8, 0x76, 0x76, 0x7a, 0x63,
+- 0xb9, 0xba, 0x86, 0xba, 0xbb, 0x90, 0x5b, 0x64,
+- 0xa2, 0xa2, 0xbc, 0x2d, 0x27, 0x23, 0x21, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x26, 0x2d, 0x91, 0x5b, 0x64, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa8, 0x83, 0xaf, 0x36, 0x36, 0x36, 0x30,
+- 0x44, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x9b, 0x9a, 0x3f, 0xbd, 0x5b, 0x7b, 0xbe, 0x85,
+- 0x7e, 0x90, 0x63, 0x90, 0x85, 0x5b, 0xa2, 0xa3,
+- 0xa3, 0xac, 0x5d, 0xb5, 0x39, 0x26, 0x23, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x26, 0x2d, 0xbf, 0xbe, 0x64, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa8, 0x88, 0x36, 0x36, 0x36, 0x36,
+- 0x2d, 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x9b, 0x45, 0x3f, 0xc0, 0x6d, 0x7b, 0xab, 0xbe,
+- 0x7a, 0x8b, 0x8b, 0x7a, 0x5b, 0x64, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa2, 0xc1, 0x37, 0x35, 0x26, 0x23,
+- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x26, 0x2e, 0xbf, 0x7a, 0x7b, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa8, 0x72, 0x73, 0x36, 0x36, 0x36,
+- 0x24, 0x52, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x46, 0x42, 0xb6, 0x7a, 0x7b, 0x64, 0x7b,
+- 0x76, 0x5b, 0x5b, 0x76, 0x7b, 0xa2, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xac, 0x64, 0xc1, 0x4d, 0x2c, 0x27,
+- 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x25, 0x31, 0xc2, 0x8b, 0x7b, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa8, 0x89, 0x9f, 0x36, 0x36,
+- 0x32, 0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x4b, 0x2f, 0x8f, 0x7a, 0x7b, 0xa2, 0xac,
+- 0xa2, 0x64, 0x64, 0xa2, 0xa2, 0xac, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0x5d, 0xc3, 0x2c,
+- 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x25, 0x31, 0xc2, 0x85, 0x7b, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0x66, 0x57, 0x27, 0x4d,
+- 0x4b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x99, 0x34, 0x9f, 0xb9, 0x7a, 0x7b, 0xa2, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0xc2,
+- 0x32, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x26, 0x2d, 0xc2, 0x85, 0x7b, 0xac, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa8, 0x5f, 0x92, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x44,
+- 0x35, 0x36, 0xaf, 0xbb, 0x7a, 0x7b, 0xac, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xac, 0xa2, 0xc0,
+- 0x2b, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23,
+- 0x30, 0x2f, 0xb6, 0x8b, 0x7b, 0xac, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0x66, 0x89, 0x45,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x9b, 0x4e, 0x25,
+- 0x36, 0x36, 0x61, 0xb9, 0x6d, 0x64, 0xac, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xac, 0x7b, 0xbe, 0xc3,
+- 0x32, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
+- 0x33, 0xc4, 0x63, 0xbe, 0xa2, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0x72, 0x81, 0xc5,
+- 0x46, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x3f, 0x2c, 0x36, 0x36,
+- 0x36, 0x36, 0xc6, 0x8f, 0x6d, 0x64, 0xac, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa2, 0xab, 0x8b, 0xb0, 0x2c,
+- 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24,
+- 0x35, 0x96, 0x75, 0xab, 0xa2, 0xac, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xac, 0x7b, 0x81, 0xb9,
+- 0x73, 0x3b, 0x44, 0x9b, 0x48, 0x48, 0x48, 0x9b,
+- 0x99, 0x43, 0x94, 0x2c, 0x21, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x73, 0xb9, 0x7a, 0x7b, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0x64, 0x76, 0x7a, 0x91, 0xb5, 0x31, 0x30,
+- 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24,
+- 0x39, 0x97, 0x75, 0xbe, 0x7b, 0x64, 0xa2, 0xa2,
+- 0xac, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0x7b, 0x7a, 0xc7,
+- 0xc8, 0x36, 0x21, 0x26, 0x2b, 0x39, 0x33, 0x30,
+- 0x23, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x21, 0xc8, 0xbb, 0x8b, 0x7b, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0x64, 0x64,
+- 0x76, 0x85, 0xbf, 0xb5, 0x34, 0x2b, 0x27, 0x28,
+- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
+- 0x33, 0xc9, 0x63, 0x7e, 0x7a, 0x6d, 0xbe, 0x5b,
+- 0x76, 0x7b, 0x64, 0x64, 0xa2, 0xac, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xac, 0x76, 0x85, 0xb9,
+- 0x79, 0x22, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x21, 0xca, 0xbb, 0x75, 0x76, 0xa2, 0xa3,
+- 0xa3, 0xa3, 0xac, 0xa2, 0x64, 0x76, 0xbe, 0x8b,
+- 0xb6, 0xb5, 0x2f, 0x35, 0x30, 0x24, 0x22, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23,
+- 0x27, 0x31, 0xcb, 0xc9, 0xbb, 0x74, 0x63, 0x90,
+- 0x7e, 0x75, 0x8b, 0x6d, 0xbe, 0x76, 0x64, 0xa2,
+- 0xac, 0xac, 0xac, 0xac, 0x64, 0x7a, 0x84, 0xcc,
+- 0x79, 0x9f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x21, 0xc8, 0xcc, 0x63, 0x6d, 0x7b, 0x64,
+- 0xac, 0xa2, 0x64, 0x7b, 0xbe, 0x75, 0x63, 0x96,
+- 0x38, 0x39, 0x2a, 0x24, 0x23, 0x21, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x28, 0x27, 0x35, 0x2d, 0x41, 0xb5, 0xc5, 0x8f,
+- 0xb9, 0xbb, 0xc7, 0x74, 0x84, 0x90, 0x85, 0x6d,
+- 0x5b, 0x7b, 0x7b, 0xab, 0x6d, 0x90, 0xb9, 0xcd,
+- 0xca, 0x22, 0x36, 0x36, 0x28, 0x30, 0x30, 0x30,
+- 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x25, 0x36,
+- 0x36, 0x21, 0xb4, 0x80, 0xc7, 0x7e, 0x6d, 0x76,
+- 0xab, 0x76, 0x6d, 0x85, 0x63, 0xb9, 0xb5, 0x34,
+- 0x33, 0x26, 0x23, 0x21, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x21, 0x23, 0x24, 0x27, 0x2a, 0x35, 0x2e, 0x2f,
+- 0x41, 0xce, 0xcf, 0x6c, 0x80, 0xcc, 0xb9, 0x74,
+- 0x84, 0x90, 0x75, 0x7e, 0x74, 0x8f, 0xcd, 0x79,
+- 0xc6, 0x2b, 0x9d, 0x41, 0x2f, 0x34, 0x2d, 0x2d,
+- 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x34, 0x2f, 0x38,
+- 0x4d, 0x37, 0xd0, 0xd1, 0x8f, 0x74, 0x63, 0x7e,
+- 0x75, 0x7e, 0x63, 0xc7, 0x88, 0xc4, 0x31, 0x2a,
+- 0x24, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x21, 0x22, 0x23, 0x24, 0x26, 0x30,
+- 0x33, 0x39, 0x2e, 0x51, 0x41, 0xb2, 0x6c, 0xd1,
+- 0x80, 0xcc, 0xcc, 0xcc, 0xd2, 0xd1, 0xb7, 0xd3,
+- 0x41, 0x34, 0x35, 0x32, 0x30, 0x27, 0x27, 0x27,
+- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x30, 0x2a,
+- 0x2b, 0x34, 0xd4, 0xca, 0xd5, 0x8f, 0xbb, 0xc7,
+- 0xc7, 0xbb, 0xcc, 0x6c, 0x41, 0x39, 0x27, 0x28,
+- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22,
+- 0x28, 0x24, 0x26, 0x2a, 0x33, 0x2c, 0x2f, 0x41,
+- 0xd6, 0xb7, 0x79, 0x79, 0x79, 0xca, 0xd7, 0x51,
+- 0x39, 0x30, 0x24, 0x23, 0x22, 0x22, 0x22, 0x22,
+- 0x22, 0x22, 0x21, 0x22, 0x22, 0x22, 0x22, 0x23,
+- 0x24, 0x2a, 0x31, 0xd8, 0xc8, 0x79, 0xd1, 0x80,
+- 0xd5, 0xba, 0xd9, 0x2f, 0x35, 0x26, 0x23, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x21, 0x22, 0x23, 0x28, 0x25, 0x30, 0x2b,
+- 0x31, 0x2f, 0xd4, 0xd8, 0xd8, 0x2f, 0x2e, 0x33,
+- 0x26, 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x21, 0x28, 0x27, 0x35, 0x34, 0xd8, 0xd8, 0xd8,
+- 0xda, 0xd4, 0x2e, 0x33, 0x25, 0x23, 0x21, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x23, 0x28,
+- 0x26, 0x30, 0x32, 0x2b, 0x33, 0x2a, 0x26, 0x28,
+- 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x21, 0x23, 0x25, 0x30, 0x33, 0x35, 0x35,
+- 0x2b, 0x2a, 0x26, 0x28, 0x22, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x21, 0x22, 0x23, 0x28, 0x28, 0x23, 0x22, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x21, 0x23, 0x28, 0x24, 0x24,
+- 0x28, 0x23, 0x22, 0x21, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x23, 0x33, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x23, 0x61, 0x62, 0x2B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x35, 0x61, 0x63, 0x64, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x65, 0x66, 0x66, 0x67, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3B,
++ 0x3B, 0x68, 0x64, 0x69, 0x62, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x22, 0x23, 0x23, 0x55, 0x6A, 0x6B,
++ 0x6C, 0x6D, 0x6E, 0x6F, 0x6F, 0x33, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23,
++ 0x22, 0x23, 0x35, 0x33, 0x3B, 0x70, 0x71, 0x72,
++ 0x73, 0x74, 0x75, 0x76, 0x77, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x23, 0x23, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x23, 0x55,
++ 0x2B, 0x34, 0x34, 0x42, 0x70, 0x71, 0x73, 0x78,
++ 0x78, 0x78, 0x79, 0x7A, 0x7B, 0x34, 0x22, 0x21,
++ 0x55, 0x33, 0x23, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x22, 0x3B, 0x7C, 0x7D, 0x7E, 0x34, 0x35,
++ 0x21, 0x21, 0x21, 0x21, 0x35, 0x3B, 0x4C, 0x3C,
++ 0x42, 0x3F, 0x56, 0x7F, 0x71, 0x74, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x79, 0x80, 0x81, 0x3C, 0x82,
++ 0x83, 0x62, 0x61, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x23, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A,
++ 0x3B, 0x21, 0x55, 0x55, 0x2B, 0x34, 0x39, 0x3F,
++ 0x2A, 0x57, 0x8B, 0x72, 0x74, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x75, 0x8C, 0x6F, 0x63,
++ 0x63, 0x66, 0x61, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x84, 0x85, 0x86, 0x8D, 0x88, 0x8E, 0x8F, 0x5E,
++ 0x3C, 0x34, 0x3B, 0x34, 0x3F, 0x2A, 0x58, 0x57,
++ 0x52, 0x46, 0x6C, 0x73, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x79, 0x7A, 0x6E, 0x69,
++ 0x69, 0x90, 0x34, 0x33, 0x22, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23,
++ 0x91, 0x92, 0x8D, 0x87, 0x8E, 0x93, 0x8A, 0x35,
++ 0x94, 0x95, 0x96, 0x56, 0x32, 0x32, 0x52, 0x5C,
++ 0x4D, 0x82, 0x72, 0x78, 0x78, 0x78, 0x78, 0x79,
++ 0x97, 0x78, 0x78, 0x78, 0x78, 0x75, 0x6D, 0x6F,
++ 0x62, 0x65, 0x34, 0x4C, 0x33, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x2B,
++ 0x91, 0x86, 0x87, 0x88, 0x93, 0x98, 0x60, 0x3F,
++ 0x99, 0x9A, 0x9A, 0x9B, 0x9C, 0x57, 0x5C, 0x36,
++ 0x9D, 0x9E, 0x6D, 0x78, 0x78, 0x78, 0x97, 0x6E,
++ 0x9F, 0x78, 0x78, 0x78, 0x78, 0x79, 0x80, 0xA0,
++ 0x61, 0x51, 0x51, 0x3C, 0x4C, 0x55, 0x35, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x3B, 0x22,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x4C,
++ 0xA1, 0x8D, 0x88, 0x8E, 0xA2, 0xA3, 0x94, 0x42,
++ 0x51, 0xA4, 0x9A, 0x9A, 0x9A, 0xA5, 0x9C, 0x2A,
++ 0xA6, 0x74, 0x8C, 0x75, 0x97, 0xA7, 0x76, 0x75,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x75, 0x6E,
++ 0x46, 0x52, 0x56, 0x3F, 0x42, 0x34, 0x33, 0x35,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x22, 0x21, 0x21, 0x22,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x52, 0x3A,
++ 0x5A, 0x53, 0x53, 0x29, 0x43, 0x50, 0x53, 0x5A,
++ 0x5A, 0x29, 0x5A, 0x43, 0x53, 0x5D, 0x44, 0x2A,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x55,
++ 0x7D, 0x87, 0x8E, 0x93, 0xA8, 0xA9, 0xAA, 0x2A,
++ 0x57, 0x94, 0xA4, 0x9B, 0xAB, 0xAC, 0x9A, 0x9B,
++ 0xAD, 0x76, 0x79, 0x78, 0x75, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x75, 0x6D,
++ 0x46, 0x5C, 0x57, 0x56, 0x51, 0x42, 0x4C, 0x55,
++ 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x23, 0x24, 0x25, 0x26, 0x26, 0x27, 0x28, 0x27,
++ 0x29, 0x2A, 0x2B, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x38, 0x30,
++ 0x59, 0x3D, 0x3D, 0x3D, 0x27, 0x27, 0x26, 0x5D,
++ 0x27, 0x27, 0x54, 0x37, 0x2E, 0x4A, 0x36, 0x2B,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0xAE, 0x88, 0xAF, 0xB0, 0xAA, 0x2A, 0x39, 0x34,
++ 0x4C, 0x5C, 0x58, 0xB1, 0xB2, 0xB3, 0xAB, 0xA5,
++ 0x9A, 0xB4, 0xB5, 0x8C, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x79, 0x80,
++ 0xB6, 0x38, 0x5C, 0x57, 0x56, 0x3F, 0x42, 0x3B,
++ 0x55, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23,
++ 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x32,
++ 0x31, 0x2C, 0x26, 0x2C, 0x33, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x34,
++ 0x32, 0x2B, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x33,
++ 0x33, 0x55, 0x55, 0x55, 0x23, 0x23, 0x35, 0x23,
++ 0x23, 0x35, 0x2B, 0x4E, 0x4F, 0x2A, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x55, 0x38, 0x25,
++ 0x2C, 0x52, 0x34, 0x22, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x22, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x55, 0x8A, 0x8F, 0x39, 0x34, 0x3C, 0x57, 0x32,
++ 0x46, 0x42, 0x52, 0x4A, 0x51, 0xAA, 0xB7, 0xB3,
++ 0xAB, 0xAC, 0xAC, 0xB8, 0xB9, 0x79, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x79, 0x7A,
++ 0xBA, 0x70, 0x7B, 0xBB, 0x82, 0x56, 0x3F, 0x34,
++ 0x4C, 0x55, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35, 0x36,
++ 0x2D, 0x37, 0x38, 0x2A, 0x2B, 0x21, 0x21, 0x21,
++ 0x21, 0x22, 0x39, 0x3A, 0x2C, 0x3B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x33, 0x3C, 0x22, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x24, 0x3D,
++ 0x3E, 0x25, 0x3C, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x33, 0x29, 0x26, 0x2A, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x54, 0x3E, 0x28,
++ 0x28, 0x59, 0x59, 0x48, 0x51, 0x3F, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x2B, 0x56, 0x4D, 0x29, 0x5B, 0x34,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x55, 0x60, 0x3F, 0x42, 0x51, 0x32, 0x52,
++ 0x40, 0x38, 0x40, 0x46, 0x42, 0xBC, 0xBD, 0xBE,
++ 0xBF, 0x9B, 0xAB, 0x9B, 0xC0, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x75,
++ 0xA7, 0x63, 0x63, 0x66, 0x6F, 0x58, 0x56, 0x39,
++ 0x34, 0x2B, 0x23, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x24, 0x2F,
++ 0x3D, 0x3F, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x40, 0x41, 0x3B, 0x21,
++ 0x21, 0x22, 0x42, 0x38, 0x43, 0x44, 0x3A, 0x45,
++ 0x34, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x46, 0x30, 0x47,
++ 0x2A, 0x48, 0x48, 0x21, 0x21, 0x21, 0x21, 0x22,
++ 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x22, 0x34, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x22, 0x4D, 0x44, 0x2A, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x50, 0x4A, 0x57, 0x35,
++ 0x35, 0x2B, 0x56, 0x27, 0x4B, 0x5D, 0x35, 0x21,
++ 0x21, 0x21, 0x21, 0x3B, 0x52, 0x23, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x2B,
++ 0x55, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3B, 0x38,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x33,
++ 0x3C, 0x42, 0x21, 0x33, 0x24, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x33,
++ 0x2B, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x33, 0x38, 0x59, 0x37, 0x27, 0x27, 0x4A, 0x47,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x23, 0x4C, 0x4C, 0x2A, 0x56, 0x46, 0x31,
++ 0x4D, 0x36, 0x50, 0x5A, 0x35, 0xC1, 0xC1, 0xC2,
++ 0xC3, 0xB7, 0xB3, 0xBE, 0x76, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x75,
++ 0x6D, 0x62, 0x69, 0x6F, 0x58, 0x46, 0x32, 0x2A,
++ 0x39, 0x34, 0x35, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x3B, 0x44, 0x49,
++ 0x31, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x23, 0x29, 0x48, 0x22,
++ 0x42, 0x3A, 0x4A, 0x49, 0x4B, 0x2E, 0x4B, 0x3E,
++ 0x4A, 0x2C, 0x34, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x30, 0x40, 0x22,
++ 0x21, 0x32, 0x3A, 0x22, 0x21, 0x21, 0x21, 0x39,
++ 0x36, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22,
++ 0x31, 0x4F, 0x2A, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x31, 0x59, 0x2A, 0x22, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x55, 0x27, 0x24, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x4C, 0x44, 0x27, 0x35, 0x21,
++ 0x21, 0x21, 0x21, 0x2A, 0x26, 0x2B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3A,
++ 0x40, 0x21, 0x21, 0x21, 0x21, 0x21, 0x51, 0x49,
++ 0x35, 0x21, 0x21, 0x21, 0x21, 0x22, 0x58, 0x25,
++ 0x5A, 0x57, 0x21, 0x4C, 0x3D, 0x34, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x38,
++ 0x47, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x3A, 0x4B, 0x53, 0x56, 0x55, 0x33, 0x42, 0x56,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x55, 0x4C, 0x42, 0x2A, 0x57, 0x5C, 0x38,
++ 0x36, 0x47, 0x5A, 0xB6, 0x77, 0xC4, 0xC1, 0xC1,
++ 0xC4, 0xC5, 0xB7, 0xB9, 0x79, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x75,
++ 0x97, 0xC6, 0x68, 0x57, 0x4D, 0x38, 0x46, 0x32,
++ 0x51, 0x42, 0x2B, 0x35, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x4D, 0x2D, 0x38,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x4C, 0x4E, 0x3C,
++ 0x47, 0x4F, 0x50, 0x51, 0x3F, 0x44, 0x42, 0x34,
++ 0x52, 0x53, 0x28, 0x2A, 0x22, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x48, 0x54, 0x33, 0x21,
++ 0x23, 0x3A, 0x3A, 0x22, 0x21, 0x21, 0x21, 0x2A,
++ 0x26, 0x33, 0x21, 0x21, 0x21, 0x21, 0x23, 0x45,
++ 0x37, 0x3D, 0x41, 0x22, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x31,
++ 0x59, 0x3F, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3C, 0x28, 0x33, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x23, 0x27, 0x5B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3C, 0x54, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x4C, 0x4B,
++ 0x46, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3B, 0x49,
++ 0x2B, 0x21, 0x21, 0x21, 0x23, 0x40, 0x43, 0x32,
++ 0x35, 0x21, 0x21, 0x33, 0x28, 0x4C, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x4F,
++ 0x5B, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x50,
++ 0x44, 0x39, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x23, 0x3B, 0x34, 0x3F, 0x58, 0x46, 0x40, 0x36,
++ 0x50, 0x41, 0x4D, 0xC7, 0x65, 0xC2, 0xC1, 0xC1,
++ 0xC8, 0xBF, 0xB1, 0x97, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x79,
++ 0x80, 0xC9, 0x36, 0x50, 0x36, 0x38, 0x31, 0x32,
++ 0x56, 0x39, 0x34, 0x33, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x2B, 0x3D, 0x28, 0x35,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x40, 0x4D,
++ 0x55, 0x2B, 0x21, 0x21, 0x2B, 0x28, 0x3B, 0x21,
++ 0x21, 0x22, 0x52, 0x27, 0x56, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x23, 0x2A, 0x30, 0x3F, 0x21, 0x22,
++ 0x57, 0x44, 0x58, 0x21, 0x21, 0x21, 0x21, 0x56,
++ 0x37, 0x2B, 0x21, 0x21, 0x21, 0x21, 0x56, 0x3E,
++ 0x36, 0x2A, 0x59, 0x23, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x33, 0x50, 0x3D,
++ 0x42, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x40, 0x5A, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x56, 0x49, 0x24, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x42, 0x54, 0x33, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x4D, 0x59,
++ 0x55, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35, 0x4A,
++ 0x51, 0x21, 0x21, 0x33, 0x47, 0x47, 0x33, 0x21,
++ 0x21, 0x21, 0x21, 0x55, 0x27, 0x3B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x32, 0x4B,
++ 0x4C, 0x21, 0x21, 0x21, 0x21, 0x21, 0x34, 0x44,
++ 0x3F, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x33, 0x4C, 0x3C, 0x51, 0x57, 0x5C, 0x38, 0x38,
++ 0x9D, 0xCA, 0x61, 0xCB, 0xCC, 0xCD, 0xC4, 0xC8,
++ 0xA4, 0x9C, 0x76, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x79,
++ 0x7A, 0x7F, 0x41, 0x29, 0x47, 0x38, 0x40, 0x57,
++ 0x32, 0x51, 0x42, 0x2B, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x57, 0x49, 0x32, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x57, 0x27,
++ 0x35, 0x21, 0x21, 0x21, 0x2B, 0x59, 0x2A, 0x21,
++ 0x21, 0x21, 0x21, 0x56, 0x54, 0x2B, 0x21, 0x21,
++ 0x21, 0x21, 0x4C, 0x2E, 0x5A, 0x23, 0x55, 0x5B,
++ 0x49, 0x3A, 0x22, 0x21, 0x21, 0x21, 0x21, 0x32,
++ 0x3E, 0x3B, 0x21, 0x21, 0x21, 0x35, 0x54, 0x53,
++ 0x23, 0x55, 0x4F, 0x55, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x25, 0x44, 0x42,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x23, 0x41, 0x46, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x23, 0x53, 0x2F, 0x2A, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x32, 0x28, 0x33, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x35, 0x59, 0x5B,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x54,
++ 0x57, 0x21, 0x35, 0x53, 0x47, 0x23, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3C, 0x44, 0x3B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x41, 0x43,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3F, 0x29,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x55, 0x4C, 0x3F, 0x2A, 0x46, 0x31, 0x36, 0x46,
++ 0x71, 0x97, 0xCE, 0xCB, 0xCF, 0xA4, 0x9C, 0xA4,
++ 0xAD, 0x76, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x80, 0x8C,
++ 0x7A, 0xA7, 0x36, 0x50, 0x3A, 0x36, 0x38, 0x52,
++ 0x32, 0x2A, 0x3F, 0x2B, 0x22, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x22, 0x5A, 0x5A, 0x23, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x52, 0x28,
++ 0x35, 0x21, 0x21, 0x21, 0x55, 0x30, 0x56, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x5B, 0x45, 0x21, 0x21,
++ 0x21, 0x21, 0x2B, 0x2E, 0x25, 0x47, 0x3D, 0x2D,
++ 0x25, 0x4C, 0x21, 0x21, 0x21, 0x21, 0x21, 0x39,
++ 0x44, 0x55, 0x21, 0x21, 0x21, 0x46, 0x59, 0x3B,
++ 0x21, 0x23, 0x30, 0x34, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x2A, 0x28, 0x4E, 0x42, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x3C, 0x3D, 0x42, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x51, 0x4B, 0x49, 0x39, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x5C, 0x25, 0x23, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x38, 0x4B, 0x3B,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x54,
++ 0x56, 0x21, 0x5B, 0x3A, 0x35, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x51, 0x59, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x32, 0x2D, 0x42,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x4C, 0x3A,
++ 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x2B, 0x3C, 0x39, 0x56, 0x46, 0x40, 0x36, 0xB6,
++ 0x73, 0x82, 0xCB, 0xD0, 0x75, 0xD1, 0xD2, 0xD1,
++ 0x8C, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x74, 0xCE,
++ 0x9E, 0x6E, 0xD3, 0xC6, 0x6F, 0x81, 0x38, 0x5C,
++ 0x52, 0x58, 0x39, 0x4C, 0x35, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x4C, 0x4A, 0x40, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x36, 0x3A,
++ 0x21, 0x21, 0x21, 0x21, 0x55, 0x27, 0x3F, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x25, 0x3B, 0x21,
++ 0x21, 0x21, 0x42, 0x2E, 0x2D, 0x2D, 0x26, 0x46,
++ 0x35, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x51,
++ 0x44, 0x55, 0x21, 0x21, 0x35, 0x25, 0x40, 0x21,
++ 0x21, 0x22, 0x4E, 0x58, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x39, 0x59, 0x38, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x56, 0x59, 0x23, 0x21, 0x21, 0x21,
++ 0x21, 0x4C, 0x54, 0x5B, 0x59, 0x4C, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x57, 0x3A, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x4D, 0x49, 0x26, 0x23,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x53,
++ 0x32, 0x51, 0x27, 0x42, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x42, 0x25, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x24, 0x37, 0x3E, 0x35,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x48,
++ 0x48, 0x33, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x33,
++ 0x3B, 0x39, 0x3F, 0x32, 0x5C, 0x38, 0x47, 0xD4,
++ 0x7A, 0xC7, 0xCB, 0xD0, 0x74, 0x80, 0x8C, 0x9F,
++ 0x80, 0x79, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x73, 0x72, 0xD5, 0xCA, 0x61, 0xD3, 0x40, 0x5C,
++ 0x46, 0x58, 0x51, 0x42, 0x33, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x39, 0x4B, 0x58, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x2A, 0x3D, 0x51,
++ 0x21, 0x21, 0x21, 0x21, 0x55, 0x28, 0x42, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x47, 0x52, 0x21,
++ 0x21, 0x21, 0x58, 0x59, 0x42, 0x3C, 0x35, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x57,
++ 0x4E, 0x23, 0x21, 0x22, 0x4D, 0x54, 0x35, 0x21,
++ 0x21, 0x21, 0x5A, 0x46, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x22, 0x56, 0x59, 0x36, 0x35, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x36, 0x5B, 0x21, 0x21, 0x21, 0x21,
++ 0x23, 0x53, 0x48, 0x3F, 0x27, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x24, 0x47, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x22, 0x40, 0x27, 0x29, 0x29, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x47,
++ 0x40, 0x41, 0x5C, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x39, 0x41, 0x23, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x32, 0x26, 0x47, 0x28, 0x22,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x2B,
++ 0x53, 0x28, 0x36, 0x42, 0x23, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x4C, 0x39, 0x58, 0x32, 0x31, 0x38, 0x47, 0xD4,
++ 0xCF, 0xD0, 0x6C, 0x9E, 0xD6, 0x6B, 0xD7, 0xD8,
++ 0xD7, 0x6B, 0xCF, 0x7B, 0x80, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x74, 0x72, 0xD0, 0xA6, 0x70, 0x51,
++ 0x46, 0x56, 0x51, 0x42, 0x55, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x5C, 0x27, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x32, 0x37, 0x54, 0x33,
++ 0x21, 0x21, 0x21, 0x21, 0x2B, 0x44, 0x2A, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x52, 0x2C, 0x21,
++ 0x21, 0x21, 0x47, 0x36, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x52,
++ 0x54, 0x23, 0x21, 0x24, 0x4F, 0x46, 0x21, 0x21,
++ 0x21, 0x21, 0x38, 0x2C, 0x22, 0x21, 0x21, 0x21,
++ 0x21, 0x42, 0x55, 0x21, 0x21, 0x21, 0x21, 0x33,
++ 0x45, 0x54, 0x56, 0x22, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x22, 0x53, 0x24, 0x21, 0x21, 0x21, 0x21,
++ 0x46, 0x5D, 0x4C, 0x52, 0x4E, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x31, 0x48, 0x22, 0x21, 0x21,
++ 0x21, 0x22, 0x46, 0x54, 0x3B, 0x45, 0x29, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x47,
++ 0x28, 0x28, 0x55, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x51, 0x41, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x56, 0x54, 0x39, 0x56, 0x28, 0x22,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x23, 0x34, 0x50, 0x30, 0x4E, 0x40, 0x34, 0x22,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x4C, 0x39, 0x58, 0x52, 0x5C, 0x38, 0x47, 0x9D,
++ 0xC9, 0xD9, 0xDA, 0xDB, 0xDC, 0xDC, 0xDC, 0xDC,
++ 0xDC, 0xDC, 0xDC, 0xDD, 0x6B, 0x7B, 0x75, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x74, 0x71, 0xD0, 0x3F,
++ 0x52, 0x57, 0x2A, 0x42, 0x2B, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x47, 0x3A, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x35, 0x45, 0x4A, 0x2C, 0x3B, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x2B, 0x30, 0x56, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x58, 0x29, 0x21,
++ 0x21, 0x21, 0x53, 0x3F, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x31,
++ 0x43, 0x22, 0x3B, 0x28, 0x48, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x56, 0x25, 0x35, 0x21, 0x21, 0x21,
++ 0x39, 0x54, 0x34, 0x21, 0x21, 0x21, 0x35, 0x3A,
++ 0x30, 0x57, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x33, 0x39, 0x21, 0x21,
++ 0x21, 0x35, 0x25, 0x3F, 0x21, 0x21, 0x21, 0x56,
++ 0x30, 0x58, 0x21, 0x24, 0x43, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x4D, 0x29, 0x22, 0x21, 0x21,
++ 0x22, 0x32, 0x26, 0x42, 0x21, 0x46, 0x2C, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x48,
++ 0x2E, 0x36, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x56, 0x28, 0x35, 0x21, 0x21,
++ 0x21, 0x3F, 0x27, 0x32, 0x21, 0x51, 0x25, 0x22,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x22, 0x39, 0x38, 0x25, 0x54, 0x50,
++ 0x58, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x33,
++ 0x4C, 0x3F, 0x56, 0x52, 0x31, 0x4D, 0x47, 0x39,
++ 0xD8, 0xDC, 0xDC, 0xDC, 0xDE, 0xDF, 0xDF, 0xDF,
++ 0xDF, 0xDF, 0xDE, 0xDE, 0xDC, 0xDD, 0xD6, 0x97,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x75, 0x97, 0x56,
++ 0x46, 0x57, 0x2A, 0x42, 0x2B, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x38, 0x29, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x35, 0x5B, 0x3D, 0x40, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x2B, 0x59, 0x3F, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x40, 0x5A, 0x21,
++ 0x21, 0x22, 0x5D, 0x34, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x5B,
++ 0x2C, 0x33, 0x29, 0x28, 0x3B, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x34, 0x59, 0x3C, 0x21, 0x21, 0x2B,
++ 0x53, 0x36, 0x22, 0x21, 0x21, 0x34, 0x5A, 0x28,
++ 0x3F, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x40, 0x41, 0x23, 0x21,
++ 0x21, 0x3B, 0x28, 0x2B, 0x21, 0x21, 0x2A, 0x44,
++ 0x38, 0x22, 0x21, 0x24, 0x50, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x50, 0x25, 0x23, 0x21, 0x23,
++ 0x45, 0x5D, 0x52, 0x21, 0x21, 0x40, 0x50, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x50,
++ 0x2D, 0x39, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x46, 0x30, 0x33, 0x21, 0x22,
++ 0x24, 0x4E, 0x45, 0x22, 0x21, 0x58, 0x25, 0x22,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x33, 0x3C, 0x48,
++ 0x27, 0x39, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x34, 0x3F, 0x58, 0x57, 0x31, 0x4D, 0x47, 0x56,
++ 0xDB, 0xDC, 0xDE, 0xE0, 0xE1, 0xE2, 0xE2, 0xE2,
++ 0xE2, 0xE2, 0xE1, 0xE3, 0xE4, 0xDE, 0xDC, 0x6B,
++ 0x8C, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x80, 0xA7, 0x38,
++ 0x46, 0x56, 0x2A, 0x39, 0x3B, 0x23, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x32, 0x44, 0x34, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x3F,
++ 0x4D, 0x41, 0x29, 0x42, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x2B, 0x44, 0x46, 0x34,
++ 0x2B, 0x55, 0x55, 0x2B, 0x56, 0x59, 0x36, 0x21,
++ 0x21, 0x22, 0x59, 0x2B, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x55, 0x5C, 0x21, 0x21, 0x21, 0x40,
++ 0x50, 0x4D, 0x4F, 0x32, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x55, 0x44, 0x31, 0x22, 0x3B, 0x5A,
++ 0x41, 0x55, 0x21, 0x35, 0x57, 0x4A, 0x2E, 0x48,
++ 0x57, 0x32, 0x3F, 0x55, 0x35, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x25, 0x47, 0x22, 0x21,
++ 0x21, 0x4C, 0x28, 0x35, 0x21, 0x34, 0x30, 0x3A,
++ 0x23, 0x21, 0x21, 0x58, 0x3A, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x4D, 0x4E, 0x35, 0x33, 0x48,
++ 0x44, 0x56, 0x21, 0x21, 0x21, 0x58, 0x41, 0x23,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x29,
++ 0x4A, 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x32, 0x44, 0x2B, 0x23, 0x45,
++ 0x3D, 0x31, 0x22, 0x21, 0x21, 0x4C, 0x27, 0x35,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x53, 0x53, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x34, 0x3F, 0x58, 0x57, 0x40, 0x38, 0x47, 0xD4,
++ 0xDC, 0xDE, 0xE0, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE2, 0xE1, 0xDF, 0xDC,
++ 0xE6, 0x8C, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x80, 0x2A, 0x40,
++ 0x46, 0x58, 0x2A, 0x42, 0x34, 0x34, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x2B, 0x54, 0x5A, 0x34, 0x23,
++ 0x35, 0x23, 0x35, 0x33, 0x2B, 0x24, 0x54, 0x4B,
++ 0x59, 0x5C, 0x23, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x4B, 0x44, 0x59,
++ 0x27, 0x26, 0x26, 0x4A, 0x3E, 0x41, 0x55, 0x21,
++ 0x21, 0x22, 0x41, 0x39, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x34, 0x53, 0x4D, 0x21, 0x21, 0x21, 0x5C,
++ 0x4B, 0x4F, 0x40, 0x22, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x48, 0x30, 0x50, 0x26, 0x54,
++ 0x34, 0x21, 0x55, 0x4E, 0x2D, 0x2F, 0x4F, 0x37,
++ 0x3E, 0x4B, 0x4B, 0x30, 0x27, 0x53, 0x2C, 0x57,
++ 0x42, 0x4C, 0x55, 0x22, 0x22, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x39, 0x4A, 0x3F, 0x21, 0x21,
++ 0x21, 0x55, 0x53, 0x55, 0x2A, 0x26, 0x54, 0x33,
++ 0x21, 0x21, 0x21, 0x51, 0x54, 0x3B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x51, 0x3D, 0x46, 0x5A, 0x4F,
++ 0x52, 0x21, 0x21, 0x21, 0x21, 0x22, 0x27, 0x31,
++ 0x33, 0x23, 0x42, 0x4C, 0x21, 0x21, 0x21, 0x5B,
++ 0x54, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3B, 0x44, 0x45, 0x48, 0x4B,
++ 0x38, 0x22, 0x21, 0x21, 0x21, 0x21, 0x53, 0x48,
++ 0x33, 0x23, 0x34, 0x3C, 0x22, 0x57, 0x4D, 0x33,
++ 0x21, 0x21, 0x21, 0x21, 0x22, 0x23, 0x34, 0x40,
++ 0x44, 0x31, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x3B, 0x42, 0x2A, 0x57, 0x31, 0x38, 0x5C, 0xD8,
++ 0xDC, 0xE4, 0xE2, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE2, 0xE0,
++ 0xDE, 0xCA, 0x9F, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x80, 0x76, 0x57, 0x5C,
++ 0x31, 0x6E, 0x34, 0x3C, 0xC9, 0x3B, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x33, 0x5B, 0x30, 0x25,
++ 0x5D, 0x5A, 0x53, 0x27, 0x26, 0x59, 0x36, 0x56,
++ 0x55, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x3D, 0x2A, 0x55,
++ 0x42, 0x51, 0x56, 0x24, 0x2A, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x45, 0x53, 0x3B, 0x22, 0x22, 0x35,
++ 0x46, 0x59, 0x54, 0x55, 0x21, 0x21, 0x21, 0x31,
++ 0x2D, 0x47, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x33, 0x50, 0x5D, 0x45, 0x55,
++ 0x21, 0x21, 0x34, 0x4F, 0x29, 0x58, 0x33, 0x4C,
++ 0x39, 0x3C, 0x2A, 0x40, 0x48, 0x54, 0x3D, 0x3D,
++ 0x37, 0x4A, 0x59, 0x29, 0x5B, 0x36, 0x52, 0x2A,
++ 0x42, 0x3C, 0x32, 0x30, 0x41, 0x35, 0x21, 0x21,
++ 0x21, 0x33, 0x41, 0x26, 0x4B, 0x5A, 0x35, 0x21,
++ 0x21, 0x21, 0x21, 0x3C, 0x3E, 0x41, 0x23, 0x21,
++ 0x21, 0x21, 0x21, 0x23, 0x41, 0x49, 0x30, 0x32,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x52, 0x4F,
++ 0x5D, 0x41, 0x27, 0x58, 0x21, 0x21, 0x21, 0x5B,
++ 0x41, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x47, 0x49, 0x4F, 0x5C,
++ 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x39, 0x4A,
++ 0x28, 0x43, 0x27, 0x5C, 0x35, 0x25, 0x49, 0x5B,
++ 0x58, 0x52, 0x5C, 0x38, 0x48, 0x41, 0x4A, 0x4B,
++ 0x50, 0x33, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x3B, 0x3C, 0x2A, 0x32, 0x5C, 0x40, 0x32, 0xDD,
++ 0xDC, 0xE3, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE1, 0xE0, 0xBB, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x80, 0xE7, 0x58, 0x52,
++ 0x5C, 0x67, 0xE7, 0x6C, 0xE8, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x23, 0x39, 0x5C,
++ 0x29, 0x5A, 0x4D, 0x5C, 0x2A, 0x2B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x44, 0x42, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x33, 0x27, 0x30, 0x5A, 0x2C, 0x25,
++ 0x4B, 0x50, 0x3B, 0x21, 0x21, 0x21, 0x21, 0x33,
++ 0x2C, 0x3B, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x4C, 0x22, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x55, 0x2B,
++ 0x39, 0x32, 0x4D, 0x29, 0x26, 0x3D, 0x2D, 0x2D,
++ 0x4B, 0x4B, 0x2F, 0x30, 0x42, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x3B, 0x29, 0x2C, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x23, 0x50, 0x4D, 0x22, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x2B, 0x32, 0x3B, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x51,
++ 0x48, 0x45, 0x34, 0x21, 0x21, 0x21, 0x21, 0x38,
++ 0x44, 0x35, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x33, 0x32, 0x34, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3C,
++ 0x5B, 0x4D, 0x42, 0x21, 0x21, 0x34, 0x4D, 0x47,
++ 0x5A, 0x5D, 0x27, 0x4E, 0x25, 0x3A, 0x5C, 0x42,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23,
++ 0x2B, 0x34, 0x51, 0x56, 0x46, 0x40, 0xE9, 0xDA,
++ 0xDD, 0xE1, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE2, 0xEA, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x76, 0xD3, 0x67, 0x39,
++ 0x3C, 0xCF, 0xD5, 0x9F, 0x3B, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x28, 0x2B, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3C, 0x53, 0x44, 0x3D, 0x43,
++ 0x57, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x35, 0x55, 0x3F, 0x2A,
++ 0x57, 0x24, 0x3F, 0x3B, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x22, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x55,
++ 0x3C, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x22, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x55, 0x4C, 0x3F, 0x58, 0x46, 0x31, 0x8B, 0xAD,
++ 0xCC, 0xE2, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xEA, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x97, 0x35, 0x6E, 0xC6, 0x82,
++ 0xA6, 0x73, 0x75, 0xBA, 0x2B, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x34, 0x44, 0x3B, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x23, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x33, 0x34, 0xEB, 0x34, 0x57, 0x5C, 0x4C, 0xA4,
++ 0xEC, 0x64, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0x83, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x80, 0xED, 0xCF, 0xCE, 0x78, 0x78,
++ 0x78, 0x7A, 0x6D, 0x34, 0x22, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x55, 0x25, 0x55, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x23, 0x34, 0xEE, 0xEF, 0x5F, 0x96, 0x23, 0xB3,
++ 0xBF, 0xB5, 0xF0, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xBB, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x9F, 0x78, 0x78, 0x78, 0x78,
++ 0x80, 0x9F, 0x65, 0x33, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x28, 0x55, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x22, 0x4C, 0xF1, 0xA5, 0xAC, 0xAB, 0x60, 0xB3,
++ 0xB3, 0xF2, 0xEA, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xF3, 0x6D, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x80, 0x61, 0x34, 0x23, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x25, 0x22, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x2B, 0x5E,
++ 0x4C, 0x3B, 0xF4, 0xA5, 0x9B, 0x9B, 0xB4, 0xEF,
++ 0xEF, 0xBF, 0xAD, 0xF5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0x67, 0x75, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x80,
++ 0xA7, 0x3F, 0x55, 0x22, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x4E, 0x23, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x2B, 0x5F,
++ 0x9B, 0xD2, 0x3C, 0xB7, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xB3, 0xB8, 0xEA, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xF0, 0xBB, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x80, 0x82,
++ 0x34, 0x3B, 0x33, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x5D, 0x23, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x60,
++ 0xAB, 0xA5, 0xB8, 0xB1, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xF6, 0xB7, 0xB5, 0xF0, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0x67, 0x80, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x80, 0x9F, 0xBA, 0x42,
++ 0x4C, 0x2B, 0x22, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x3A, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x55,
++ 0xF2, 0x9B, 0x9B, 0xB4, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xEF, 0xB4, 0x5F, 0x63, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xF5,
++ 0x76, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x80, 0x6D, 0x65, 0x3C, 0x34,
++ 0x3B, 0x35, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x2A, 0x29, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23,
++ 0xF7, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xEF, 0xB3, 0xB8, 0xEA, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xF8, 0x68,
++ 0x7A, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x80, 0x97, 0x82, 0x39, 0x39, 0x34, 0x3B,
++ 0x33, 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x2A, 0x29, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x3B, 0xB8, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xEF, 0xF6, 0xB2, 0xF9, 0xFA, 0xFA, 0xFA,
++ 0xFA, 0xF8, 0xF8, 0xF8, 0xF0, 0xF0, 0x6F, 0x97,
++ 0x80, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x8C, 0x61, 0x39, 0x2A, 0x3F, 0x3C, 0x4C, 0x55,
++ 0x33, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x31, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x22, 0xFB, 0xF6, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xEF, 0xB3, 0xB2, 0xF9, 0xF3, 0xF3, 0xF3,
++ 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x90, 0x6D, 0x97,
++ 0x8C, 0x6D, 0x76, 0xBB, 0xC6, 0xB9, 0xC0, 0xFC,
++ 0xAD, 0xFB, 0x2A, 0x58, 0x42, 0x4C, 0x55, 0x33,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x33, 0xD2, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xEF, 0xB4, 0xB8, 0xEB, 0xE8, 0x7F, 0xD6,
++ 0xD6, 0xD6, 0xD6, 0x9D, 0x9D, 0x52, 0xEB, 0x5F,
++ 0x5F, 0x5F, 0xF2, 0xA4, 0xBF, 0xBF, 0xB4, 0xBF,
++ 0xEE, 0x56, 0x2A, 0x42, 0x4C, 0x2B, 0x33, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x4C, 0xBE, 0xF6, 0xEF, 0xEF, 0xEF,
++ 0xF6, 0xB4, 0xB2, 0xF1, 0x3C, 0x56, 0x46, 0x5C,
++ 0x31, 0x38, 0x40, 0x40, 0x4D, 0x4D, 0xB8, 0xAC,
++ 0xBF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xB4,
++ 0xB1, 0x39, 0x39, 0x3B, 0x2B, 0x23, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3B, 0xAD, 0xA4, 0xBF, 0xBF,
++ 0xB7, 0xB2, 0xEE, 0x5E, 0x39, 0x51, 0x2A, 0x32,
++ 0x52, 0x46, 0x5C, 0x31, 0x31, 0x2A, 0xA5, 0xEF,
++ 0xFD, 0xB4, 0xEF, 0xF6, 0xF6, 0xEF, 0xF6, 0xB2,
++ 0x3F, 0x34, 0x2B, 0x55, 0x23, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x33, 0xEB, 0xF7, 0xAA,
++ 0xAA, 0xF7, 0xEB, 0x55, 0x3B, 0x3C, 0x39, 0x51,
++ 0x2A, 0x56, 0x32, 0x57, 0x57, 0x2A, 0x96, 0x3C,
++ 0x2A, 0xEE, 0xEF, 0x5F, 0xD2, 0xEF, 0xB4, 0xAA,
++ 0x42, 0x55, 0x35, 0x22, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x3B,
++ 0x3B, 0x35, 0x21, 0x23, 0x33, 0x3B, 0x4C, 0x3C,
++ 0x39, 0x3F, 0x51, 0x2A, 0x51, 0x51, 0x58, 0x32,
++ 0x56, 0xF4, 0xB1, 0x42, 0x3C, 0xF2, 0x9C, 0x3F,
++ 0x33, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x33, 0x55,
++ 0x3B, 0x4C, 0x4C, 0x3C, 0x42, 0x42, 0x3C, 0x34,
++ 0x34, 0x3F, 0x4C, 0x3B, 0x4C, 0x3B, 0x3C, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x35, 0x33, 0x55, 0x33, 0x33, 0x33, 0x55, 0x2B,
++ 0x2B, 0x35, 0x35, 0x35, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20
+ };
+
+ #endif /* !__HAVE_ARCH_LINUX_LOGO */
+@@ -994,7 +1760,7 @@
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+ };
+
+ #endif /* !__HAVE_ARCH_LINUX_LOGOBW */
+@@ -1401,7 +2167,7 @@
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+
+ #endif /* !__HAVE_ARCH_LINUX_LOGO16 */
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/mkdep.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/mkdep.patch
new file mode 100644
index 0000000000..4daeaa11be
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/mkdep.patch
@@ -0,0 +1,16 @@
+
+#
+# Made by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- linux/Makefile~mkdep 2003-12-19 09:36:51.000000000 -0800
++++ linux/Makefile 2003-12-19 09:57:44.000000000 -0800
+@@ -458,7 +458,7 @@
+
+ dep-files: scripts/mkdep archdep include/linux/version.h
+ scripts/mkdep -- init/*.c > .depend
+- scripts/mkdep -- `find $(FINDHPATH) -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` > .hdepend
++ $(foreach, dir, $(FINDHPATH), scripts/mkdep -- `find $(dir) -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` >> .hdepend)
+ $(MAKE) $(patsubst %,_sfdep_%,$(SUBDIRS)) _FASTDEP_ALL_SUB_DIRS="$(SUBDIRS)"
+ ifdef CONFIG_MODVERSIONS
+ $(MAKE) update-modverfile
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/module_licence.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/module_licence.patch
new file mode 100644
index 0000000000..e70fc28031
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/module_licence.patch
@@ -0,0 +1,96 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- linux/drivers/usb/device/bi/sa1100.c~modulelicence
++++ linux/drivers/usb/device/bi/sa1100.c
+@@ -43,6 +43,7 @@
+ #include "../usbd-build.h"
+ #include "../usbd-module.h"
+
++MODULE_LICENSE("GPL");
+ MODULE_AUTHOR ("sl@lineo.com, tbr@lineo.com");
+ MODULE_DESCRIPTION ("USB Device SA-1100 Bus Interface");
+
+--- linux/drivers/usb/device/usbd.c~modulelicence
++++ linux/drivers/usb/device/usbd.c
+@@ -72,6 +72,7 @@
+ #include "usbd-build.h"
+ #include "usbd-module.h"
+
++MODULE_LICENSE("GPL");
+ MODULE_AUTHOR ("sl@lineo.com, tbr@lineo.com");
+ MODULE_DESCRIPTION ("USB Device Core Support");
+
+--- linux/drivers/usb/device/usbd-monitor.c~modulelicence
++++ linux/drivers/usb/device/usbd-monitor.c
+@@ -35,6 +35,7 @@
+ #include "usbd-build.h"
+ #include "usbd-module.h"
+
++MODULE_LICENSE("GPL");
+ MODULE_AUTHOR ("sl@lineo.com, tbr@lineo.com");
+ MODULE_DESCRIPTION ("USB Device Monitor");
+ USBD_MODULE_INFO ("usbd_monitor 0.3");
+--- linux/drivers/usb/device/net_fd/net-fd.c~modulelicence
++++ linux/drivers/usb/device/net_fd/net-fd.c
+@@ -33,6 +33,7 @@
+ #include "../usbd-build.h"
+ #include "../usbd-module.h"
+
++MODULE_LICENSE("GPL");
+ MODULE_AUTHOR ("sl@lineo.com, tbr@lineo.com");
+ MODULE_DESCRIPTION ("USB Device Network Function");
+
+--- linux/arch/arm/mach-sa1100/deviceinfo.c~modulelicence
++++ linux/arch/arm/mach-sa1100/deviceinfo.c
+@@ -28,6 +28,7 @@
+
+ #define MODULE_NAME "deviceinfo"
+ #define DEVINFO_DIRNAME "deviceinfo"
++MODULE_LICENSE("GPL");
+
+ static int proc_read_deviceinfo(struct file * file, char * buf,
+ size_t nbytes, loff_t *ppos);
+--- linux/arch/arm/mach-sa1100/gpio.c~modulelicence
++++ linux/arch/arm/mach-sa1100/gpio.c
+@@ -15,7 +15,7 @@
+
+ #include <asm/hardware.h>
+
+-
++MODULE_LICENSE("GPL");
+
+ static int proc_gpio_read(char *page, char **start, off_t off,
+ int count, int *eof, void *data)
+--- linux/drivers/usb/device/serial_fd/serial.c~modulelicence
++++ linux/drivers/usb/device/serial_fd/serial.c
+@@ -80,6 +80,7 @@
+ #include "../usbd-module.h"
+
+
++MODULE_LICENSE("GPL");
+ MODULE_AUTHOR ("sl@lineo.com, tbr@lineo.com");
+ MODULE_DESCRIPTION ("USB Device Serial Function");
+
+--- linux/drivers/usb/device/usbd-serialnumber.c~modulelicence
++++ linux/drivers/usb/device/usbd-serialnumber.c
+@@ -33,6 +33,7 @@
+ #include "usbd-build.h"
+ #include "usbd-module.h"
+
++MODULE_LICENSE("GPL");
+ MODULE_AUTHOR ("sl@lineo.com, tbr@lineo.com");
+ MODULE_DESCRIPTION ("USB Device Monitor");
+ USBD_MODULE_INFO ("usbd_monitor 0.2-alpha");
+--- linux/drivers/usb/device/bi/pxa.c~modulelicence
++++ linux/drivers/usb/device/bi/pxa.c
+@@ -48,6 +48,7 @@
+ #include "../usbd-build.h"
+ #include "../usbd-module.h"
+
++MODULE_LICENSE ("GPL");
+ MODULE_AUTHOR ("sl@lineo.com, tbr@lineo.com");
+ MODULE_DESCRIPTION ("Xscale USB Device Bus Interface");
+
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/piro.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/piro.patch
new file mode 100644
index 0000000000..ebde460369
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/piro.patch
@@ -0,0 +1,75444 @@
+diff -Nur linux_c860_org/CREDITS linux/CREDITS
+--- linux_c860_org/CREDITS 2002-08-26 14:43:17.000000000 +0900
++++ linux/CREDITS 2004-06-10 21:09:10.000000000 +0900
+@@ -981,8 +981,8 @@
+
+ N: Nigel Gamble
+ E: nigel@nrg.org
+-E: nigel@sgi.com
+ D: Interrupt-driven printer driver
++D: Preemptible kernel
+ S: 120 Alley Way
+ S: Mountain View, California 94040
+ S: USA
+diff -Nur linux_c860_org/Documentation/Configure.help linux/Documentation/Configure.help
+--- linux_c860_org/Documentation/Configure.help 2002-10-09 10:20:29.000000000 +0900
++++ linux/Documentation/Configure.help 2004-06-10 21:09:10.000000000 +0900
+@@ -266,6 +266,29 @@
+ If you have a system with several CPUs, you do not need to say Y
+ here: the local APIC will be used automatically.
+
++Preemptible Kernel
++CONFIG_PREEMPT
++ This option reduces the latency of the kernel when reacting to
++ real-time or interactive events by allowing a low priority process to
++ be preempted even if it is in kernel mode executing a system call.
++ This allows applications to run more reliably even when the system is
++ under load.
++
++ Say Y here if you are building a kernel for a desktop, embedded or
++ real-time system. Say N if you are unsure.
++
++Break Selected Locks
++CONFIG_LOCK_BREAK
++ This option will break certain locks in high-latency regions
++ throughout the kernel. It is intended for use in conjunction with
++ the preemptible kernel (CONFIG_PREEMPT). Since in-kernel preemption
++ can not occur while locks are held, temporarily releasing and then
++ reacquiring long-held locks will further improve system response.
++
++ Say Y if you are compiling for a system with strict latency
++ requirements such as an embedded, real-time, or audio processing
++ system. Say N otherwise.
++
+ Kernel math emulation
+ CONFIG_MATH_EMULATION
+ Linux can emulate a math coprocessor (used for floating point
+diff -Nur linux_c860_org/Documentation/preempt-locking.txt linux/Documentation/preempt-locking.txt
+--- linux_c860_org/Documentation/preempt-locking.txt 1970-01-01 09:00:00.000000000 +0900
++++ linux/Documentation/preempt-locking.txt 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,104 @@
++ Proper Locking Under a Preemptible Kernel:
++ Keeping Kernel Code Preempt-Safe
++ Robert Love <rml@tech9.net>
++ Last Updated: 22 Jan 2002
++
++
++INTRODUCTION
++
++
++A preemptible kernel creates new locking issues. The issues are the same as
++those under SMP: concurrency and reentrancy. Thankfully, the Linux preemptible
++kernel model leverages existing SMP locking mechanisms. Thus, the kernel
++requires explicit additional locking for very few additional situations.
++
++This document is for all kernel hackers. Developing code in the kernel
++requires protecting these situations.
++
++
++RULE #1: Per-CPU data structures need explicit protection
++
++
++Two similar problems arise. An example code snippet:
++
++ struct this_needs_locking tux[NR_CPUS];
++ tux[smp_processor_id()] = some_value;
++ /* task is preempted here... */
++ something = tux[smp_processor_id()];
++
++First, since the data is per-CPU, it may not have explicit SMP locking, but
++require it otherwise. Second, when a preempted task is finally rescheduled,
++the previous value of smp_processor_id may not equal the current. You must
++protect these situations by disabling preemption around them.
++
++
++RULE #2: CPU state must be protected.
++
++
++Under preemption, the state of the CPU must be protected. This is arch-
++dependent, but includes CPU structures and state not preserved over a context
++switch. For example, on x86, entering and exiting FPU mode is now a critical
++section that must occur while preemption is disabled. Think what would happen
++if the kernel is executing a floating-point instruction and is then preempted.
++Remember, the kernel does not save FPU state except for user tasks. Therefore,
++upon preemption, the FPU registers will be sold to the lowest bidder. Thus,
++preemption must be disabled around such regions.
++
++Note, some FPU functions are already explicitly preempt safe. For example,
++kernel_fpu_begin and kernel_fpu_end will disable and enable preemption.
++However, math_state_restore must be called with preemption disabled.
++
++
++RULE #3: Lock acquire and release must be performed by same task
++
++
++A lock acquired in one task must be released by the same task. This
++means you can't do oddball things like acquire a lock and go off to
++play while another task releases it. If you want to do something
++like this, acquire and release the task in the same code path and
++have the caller wait on an event by the other task.
++
++
++SOLUTION
++
++
++Data protection under preemption is achieved by disabling preemption for the
++duration of the critical region.
++
++preempt_enable() decrement the preempt counter
++preempt_disable() increment the preempt counter
++preempt_enable_no_resched() decrement, but do not immediately preempt
++preempt_get_count() return the preempt counter
++
++The functions are nestable. In other words, you can call preempt_disable
++n-times in a code path, and preemption will not be reenabled until the n-th
++call to preempt_enable. The preempt statements define to nothing if
++preemption is not enabled.
++
++Note that you do not need to explicitly prevent preemption if you are holding
++any locks or interrupts are disabled, since preemption is implicitly disabled
++in those cases.
++
++Example:
++
++ cpucache_t *cc; /* this is per-CPU */
++ preempt_disable();
++ cc = cc_data(searchp);
++ if (cc && cc->avail) {
++ __free_block(searchp, cc_entry(cc), cc->avail);
++ cc->avail = 0;
++ }
++ preempt_enable();
++ return 0;
++
++Notice how the preemption statements must encompass every reference of the
++critical variables. Another example:
++
++ int buf[NR_CPUS];
++ set_cpu_val(buf);
++ if (buf[smp_processor_id()] == -1) printf(KERN_INFO "wee!\n");
++ spin_lock(&buf_lock);
++ /* ... */
++
++This code is not preempt-safe, but see how easily we can fix it by simply
++moving the spin_lock up two lines.
+diff -Nur linux_c860_org/MAINTAINERS linux/MAINTAINERS
+--- linux_c860_org/MAINTAINERS 2002-08-26 14:43:17.000000000 +0900
++++ linux/MAINTAINERS 2004-06-10 21:09:10.000000000 +0900
+@@ -1255,6 +1255,14 @@
+ M: mostrows@styx.uwaterloo.ca
+ S: Maintained
+
++PREEMPTIBLE KERNEL
++P: Robert M. Love
++M: rml@tech9.net
++L: linux-kernel@vger.kernel.org
++L: kpreempt-tech@lists.sourceforge.net
++W: http://tech9.net/rml/linux
++S: Supported
++
+ PROMISE DC4030 CACHING DISK CONTROLLER DRIVER
+ P: Peter Denison
+ M: promise@pnd-pc.demon.co.uk
+diff -Nur linux_c860_org/arch/alpha/kernel/entry.S linux/arch/alpha/kernel/entry.S
+--- linux_c860_org/arch/alpha/kernel/entry.S 2002-08-26 14:39:34.000000000 +0900
++++ linux/arch/alpha/kernel/entry.S 2004-06-10 21:09:10.000000000 +0900
+@@ -231,12 +231,12 @@
+ .end kernel_clone
+
+ /*
+- * kernel_thread(fn, arg, clone_flags)
++ * arch_kernel_thread(fn, arg, clone_flags)
+ */
+ .align 3
+ .globl kernel_thread
+ .ent kernel_thread
+-kernel_thread:
++arch_kernel_thread:
+ ldgp $29,0($27) /* we can be called from a module */
+ .frame $30, 4*8, $26
+ subq $30,4*8,$30
+diff -Nur linux_c860_org/arch/arm/boot/compressed/head-xscale.S linux/arch/arm/boot/compressed/head-xscale.S
+--- linux_c860_org/arch/arm/boot/compressed/head-xscale.S 2002-12-18 19:27:19.000000000 +0900
++++ linux/arch/arm/boot/compressed/head-xscale.S 2004-06-10 21:09:10.000000000 +0900
+@@ -5,6 +5,7 @@
+ *
+ * ChangLog:
+ * 12-Dec-2002 Lineo Japan, Inc.
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+ #include <linux/config.h>
+@@ -51,3 +52,7 @@
+ #ifdef CONFIG_ARCH_PXA_CORGI
+ mov r7, #MACH_TYPE_CORGI
+ #endif
++
++#ifdef CONFIG_ARCH_PXA_TOSA
++ mov r7, #MACH_TYPE_TOSA
++#endif
+diff -Nur linux_c860_org/arch/arm/config.in linux/arch/arm/config.in
+--- linux_c860_org/arch/arm/config.in 2003-10-09 14:41:35.000000000 +0900
++++ linux/arch/arm/config.in 2004-06-10 21:10:22.000000000 +0900
+@@ -196,16 +196,33 @@
+ dep_bool ' Using Trial 0' CONFIG_POODLE_TR0 $CONFIG_ARCH_PXA_POODLE
+ dep_bool ' SHARP Corgi' CONFIG_ARCH_PXA_CORGI $CONFIG_ARCH_PXA
+ dep_bool ' Using Trial 0' CONFIG_CORGI_TR0 $CONFIG_ARCH_PXA_CORGI
++dep_bool ' LCD Bufferable (EXPERIMENTAL)' CONFIG_CORGI_LCD_BUFF $CONFIG_ARCH_PXA_CORGI
+ dep_bool ' SHARP Shepherd' CONFIG_ARCH_PXA_SHEPHERD $CONFIG_ARCH_PXA_CORGI
+ dep_bool ' SHARP Husky' CONFIG_ARCH_PXA_HUSKY $CONFIG_ARCH_PXA_SHEPHERD
+ dep_bool ' SHARP Boxer' CONFIG_ARCH_PXA_BOXER $CONFIG_ARCH_PXA_HUSKY
++dep_bool ' SHARP Tosa' CONFIG_ARCH_PXA_TOSA $CONFIG_ARCH_PXA
++dep_bool ' SHARP Tosa skipping' CONFIG_ARCH_PXA_TOSA_SKIP $CONFIG_ARCH_PXA_TOSA
+
+ if [ "$CONFIG_SA1100_COLLIE" = "y" -o "$CONFIG_SABINAL_DISCOVERY" = "y" -o \
+- "$CONFIG_ARCH_PXA_POODLE" = "y" -o "$CONFIG_ARCH_PXA_CORGI" = "y" ]; then
++ "$CONFIG_ARCH_PXA_POODLE" = "y" -o "$CONFIG_ARCH_PXA_CORGI" = "y" -o \
++ "$CONFIG_ARCH_PXA_TOSA" = "y" ]; then
+ define_bool CONFIG_ARCH_SHARP_SL y
+ fi
+
+-if [ "$CONFIG_ARCH_PXA_POODLE" = "y" -o "$CONFIG_ARCH_PXA_CORGI" = "y" ]; then
++
++if [ "$CONFIG_ARCH_PXA_POODLE" = "y" -o "$CONFIG_ARCH_PXA_CORGI" = "y" -o \
++ "$CONFIG_ARCH_PXA_TOSA" = "y" ]; then
++ bool 'Use clock change(cccr_change) enable (EXPERIMENTAL)' CONFIG_SL_CCCR_CHANGE
++ if [ "$CONFIG_SL_CCCR162" != "y" -a "$CONFIG_SL_CCCR_CHANGE" = "y" ]; then
++ bool 'Boot CCCR=0x242 (EXPERIMENTAL)' CONFIG_SL_CCCR242
++ fi
++ if [ "$CONFIG_SL_CCCR242" != "y" -a "$CONFIG_SL_CCCR_CHANGE" = "y" ]; then
++ bool 'Boot CCCR=0x162 (DANGEROUS ESPECIALLY FOR SL-C700)' CONFIG_SL_CCCR162
++ fi
++fi
++
++if [ "$CONFIG_ARCH_PXA_POODLE" = "y" -o "$CONFIG_ARCH_PXA_CORGI" = "y" -o \
++ "$CONFIG_ARCH_PXA_TOSA" = "y" ]; then
+ comment 'Language type'
+ choice 'Language type' \
+ "English CONFIG_ARCH_SHARP_SL_E \
+@@ -472,7 +489,10 @@
+ else
+ define_bool CONFIG_DISCONTIGMEM n
+ fi
+-
++dep_bool 'Preemptible Kernel' CONFIG_PREEMPT $CONFIG_CPU_32
++if [ "$CONFIG_PREEMPT" = "y" ]; then
++ bool 'Break selected locks' CONFIG_LOCK_BREAK
++fi
+ endmenu
+
+ mainmenu_option next_comment
+@@ -628,6 +648,9 @@
+ if [ "$CONFIG_DEVICEINFO" = "m" -a "$CONFIG_ARCH_PXA_CORGI" = "y" ]; then
+ define_tristate CONFIG_CORGI_DEVICEINFO m
+ fi
++if [ "$CONFIG_DEVICEINFO" = "m" -a "$CONFIG_ARCH_PXA_TOSA" = "y" ]; then
++ define_tristate CONFIG_TOSA_DEVICEINFO m
++fi
+ endmenu
+
+ source drivers/parport/Config.in
+diff -Nur linux_c860_org/arch/arm/def-configs/boxer-j linux/arch/arm/def-configs/boxer-j
+--- linux_c860_org/arch/arm/def-configs/boxer-j 2003-11-07 11:37:08.000000000 +0900
++++ linux/arch/arm/def-configs/boxer-j 2004-06-10 21:09:10.000000000 +0900
+@@ -299,6 +299,7 @@
+ # CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+ CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS=y
+ CONFIG_MTD_NAND_PAGE_CACHE=y
++CONFIG_MTD_NAND_SHARP_SL_CORGI=y
+ CONFIG_MTD_NAND_SHARP_SL=y
+
+ #
+diff -Nur linux_c860_org/arch/arm/def-configs/corgi linux/arch/arm/def-configs/corgi
+--- linux_c860_org/arch/arm/def-configs/corgi 2002-11-26 15:25:56.000000000 +0900
++++ linux/arch/arm/def-configs/corgi 2004-06-10 21:09:10.000000000 +0900
+@@ -295,6 +295,7 @@
+ # CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+ CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS=y
+ CONFIG_MTD_NAND_PAGE_CACHE=y
++CONFIG_MTD_NAND_SHARP_SL_CORGI=y
+ CONFIG_MTD_NAND_SHARP_SL=y
+
+ #
+diff -Nur linux_c860_org/arch/arm/def-configs/corgi_cramfs linux/arch/arm/def-configs/corgi_cramfs
+--- linux_c860_org/arch/arm/def-configs/corgi_cramfs 2002-10-21 10:17:42.000000000 +0900
++++ linux/arch/arm/def-configs/corgi_cramfs 2004-06-10 21:09:10.000000000 +0900
+@@ -297,6 +297,7 @@
+ CONFIG_MTD_NAND_POST_BADBLOCK=y
+ # CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+ # CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS is not set
++CONFIG_MTD_NAND_SHARP_SL_CORGI=y
+ CONFIG_MTD_NAND_SHARP_SL=y
+
+ #
+diff -Nur linux_c860_org/arch/arm/def-configs/corgi_initrd linux/arch/arm/def-configs/corgi_initrd
+--- linux_c860_org/arch/arm/def-configs/corgi_initrd 2002-10-21 10:17:42.000000000 +0900
++++ linux/arch/arm/def-configs/corgi_initrd 2004-06-10 21:09:10.000000000 +0900
+@@ -297,6 +297,7 @@
+ CONFIG_MTD_NAND_POST_BADBLOCK=y
+ # CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+ # CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS is not set
++CONFIG_MTD_NAND_SHARP_SL_CORGI=y
+ CONFIG_MTD_NAND_SHARP_SL=y
+
+ #
+diff -Nur linux_c860_org/arch/arm/def-configs/husky linux/arch/arm/def-configs/husky
+--- linux_c860_org/arch/arm/def-configs/husky 2003-05-20 09:48:12.000000000 +0900
++++ linux/arch/arm/def-configs/husky 2004-06-10 21:09:10.000000000 +0900
+@@ -298,6 +298,7 @@
+ # CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+ CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS=y
+ CONFIG_MTD_NAND_PAGE_CACHE=y
++CONFIG_MTD_NAND_SHARP_SL_CORGI=y
+ CONFIG_MTD_NAND_SHARP_SL=y
+
+ #
+diff -Nur linux_c860_org/arch/arm/def-configs/husky-j linux/arch/arm/def-configs/husky-j
+--- linux_c860_org/arch/arm/def-configs/husky-j 2003-05-20 09:48:12.000000000 +0900
++++ linux/arch/arm/def-configs/husky-j 2004-06-10 21:09:10.000000000 +0900
+@@ -298,6 +298,7 @@
+ # CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+ CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS=y
+ CONFIG_MTD_NAND_PAGE_CACHE=y
++CONFIG_MTD_NAND_SHARP_SL_CORGI=y
+ CONFIG_MTD_NAND_SHARP_SL=y
+
+ #
+diff -Nur linux_c860_org/arch/arm/def-configs/poodle linux/arch/arm/def-configs/poodle
+--- linux_c860_org/arch/arm/def-configs/poodle 2002-11-26 15:25:56.000000000 +0900
++++ linux/arch/arm/def-configs/poodle 2004-06-10 21:09:10.000000000 +0900
+@@ -295,6 +295,7 @@
+ # CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+ CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS=y
+ CONFIG_MTD_NAND_PAGE_CACHE=y
++CONFIG_MTD_NAND_SHARP_SL_POODLE=y
+ CONFIG_MTD_NAND_SHARP_SL=y
+
+ #
+diff -Nur linux_c860_org/arch/arm/def-configs/poodle-j linux/arch/arm/def-configs/poodle-j
+--- linux_c860_org/arch/arm/def-configs/poodle-j 2002-11-26 15:25:56.000000000 +0900
++++ linux/arch/arm/def-configs/poodle-j 2004-06-10 21:09:10.000000000 +0900
+@@ -295,6 +295,7 @@
+ # CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+ CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS=y
+ CONFIG_MTD_NAND_PAGE_CACHE=y
++CONFIG_MTD_NAND_SHARP_SL_POODLE=y
+ CONFIG_MTD_NAND_SHARP_SL=y
+
+ #
+diff -Nur linux_c860_org/arch/arm/def-configs/poodle_cramfs linux/arch/arm/def-configs/poodle_cramfs
+--- linux_c860_org/arch/arm/def-configs/poodle_cramfs 2002-10-21 10:16:27.000000000 +0900
++++ linux/arch/arm/def-configs/poodle_cramfs 2004-06-10 21:09:10.000000000 +0900
+@@ -298,6 +298,7 @@
+ CONFIG_MTD_NAND_POST_BADBLOCK=y
+ # CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+ # CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS is not set
++CONFIG_MTD_NAND_SHARP_SL_POODLE=y
+ CONFIG_MTD_NAND_SHARP_SL=y
+
+ #
+diff -Nur linux_c860_org/arch/arm/def-configs/shepherd linux/arch/arm/def-configs/shepherd
+--- linux_c860_org/arch/arm/def-configs/shepherd 2003-04-04 08:55:58.000000000 +0900
++++ linux/arch/arm/def-configs/shepherd 2004-06-10 21:09:10.000000000 +0900
+@@ -297,6 +297,7 @@
+ # CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+ CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS=y
+ CONFIG_MTD_NAND_PAGE_CACHE=y
++CONFIG_MTD_NAND_SHARP_SL_CORGI=y
+ CONFIG_MTD_NAND_SHARP_SL=y
+
+ #
+diff -Nur linux_c860_org/arch/arm/def-configs/shepherd-j linux/arch/arm/def-configs/shepherd-j
+--- linux_c860_org/arch/arm/def-configs/shepherd-j 2003-04-04 08:56:28.000000000 +0900
++++ linux/arch/arm/def-configs/shepherd-j 2004-06-10 21:09:10.000000000 +0900
+@@ -297,6 +297,7 @@
+ # CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+ CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS=y
+ CONFIG_MTD_NAND_PAGE_CACHE=y
++CONFIG_MTD_NAND_SHARP_SL_CORGI=y
+ CONFIG_MTD_NAND_SHARP_SL=y
+
+ #
+diff -Nur linux_c860_org/arch/arm/def-configs/tosa-j linux/arch/arm/def-configs/tosa-j
+--- linux_c860_org/arch/arm/def-configs/tosa-j 1970-01-01 09:00:00.000000000 +0900
++++ linux/arch/arm/def-configs/tosa-j 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,1156 @@
++#
++# Automatically generated by make menuconfig: don't edit
++#
++CONFIG_ARM=y
++# CONFIG_EISA is not set
++# CONFIG_SBUS is not set
++# CONFIG_MCA is not set
++CONFIG_UID16=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
++# CONFIG_GENERIC_BUST_SPINLOCK is not set
++# CONFIG_GENERIC_ISA_DMA is not set
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++# CONFIG_OBSOLETE is not set
++
++#
++# Loadable module support
++#
++CONFIG_MODULES=y
++# CONFIG_MODVERSIONS is not set
++CONFIG_KMOD=y
++
++#
++# System Type
++#
++# CONFIG_ARCH_ANAKIN is not set
++# CONFIG_ARCH_ARCA5K is not set
++# CONFIG_ARCH_CLPS7500 is not set
++# CONFIG_ARCH_CLPS711X is not set
++# CONFIG_ARCH_CO285 is not set
++CONFIG_ARCH_PXA=y
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_CAMELOT is not set
++# CONFIG_ARCH_FOOTBRIDGE is not set
++# CONFIG_ARCH_INTEGRATOR is not set
++# CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_MX1ADS is not set
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++# CONFIG_ARCH_SHARK is not set
++
++#
++# Archimedes/A5000 Implementations
++#
++# CONFIG_ARCH_ARC is not set
++# CONFIG_ARCH_A5K is not set
++
++#
++# Footbridge Implementations
++#
++# CONFIG_ARCH_CATS is not set
++# CONFIG_ARCH_PERSONAL_SERVER is not set
++# CONFIG_ARCH_EBSA285_ADDIN is not set
++# CONFIG_ARCH_EBSA285_HOST is not set
++# CONFIG_ARCH_NETWINDER is not set
++
++#
++# SA11x0 Implementations
++#
++# CONFIG_SA1100_ASSABET is not set
++# CONFIG_ASSABET_NEPONSET is not set
++# CONFIG_SA1100_ADSBITSY is not set
++# CONFIG_SA1100_BRUTUS is not set
++# CONFIG_SA1100_CEP is not set
++# CONFIG_SA1100_CERF is not set
++# CONFIG_SA1100_COLLIE is not set
++# CONFIG_LOCOMO is not set
++# CONFIG_COLLIE_TS is not set
++# CONFIG_COLLIE_TR0 is not set
++# CONFIG_COLLIE_TR1 is not set
++# CONFIG_COLLIE_DEV is not set
++# CONFIG_COLLIE_G is not set
++# CONFIG_SA1100_H3100 is not set
++# CONFIG_SA1100_H3600 is not set
++# CONFIG_SA1100_H3800 is not set
++# CONFIG_SA1100_H3XXX is not set
++# CONFIG_SA1100_EXTENEX1 is not set
++# CONFIG_SA1100_FLEXANET is not set
++# CONFIG_SA1100_FREEBIRD is not set
++# CONFIG_SA1100_FRODO is not set
++# CONFIG_SA1100_GRAPHICSCLIENT is not set
++# CONFIG_SA1100_GRAPHICSMASTER is not set
++# CONFIG_SA1100_BADGE4 is not set
++# CONFIG_SA1100_JORNADA720 is not set
++# CONFIG_SA1100_HUW_WEBPANEL is not set
++# CONFIG_SA1100_ITSY is not set
++# CONFIG_SA1100_LART is not set
++# CONFIG_SA1100_NANOENGINE is not set
++# CONFIG_SA1100_OMNIMETER is not set
++# CONFIG_SA1100_PANGOLIN is not set
++# CONFIG_SA1100_PLEB is not set
++# CONFIG_SA1100_PT_SYSTEM3 is not set
++# CONFIG_SA1100_SHANNON is not set
++# CONFIG_SA1100_SHERMAN is not set
++# CONFIG_SA1100_SIMPAD is not set
++# CONFIG_SA1100_PFS168 is not set
++# CONFIG_SA1100_VICTOR is not set
++# CONFIG_SA1100_XP860 is not set
++# CONFIG_SA1100_YOPY is not set
++# CONFIG_SA1100_USB is not set
++# CONFIG_SA1100_USB_NETLINK is not set
++# CONFIG_SA1100_USB_CHAR is not set
++# CONFIG_H3600_SLEEVE is not set
++
++#
++# Intel PXA250/210 Implementations
++#
++# CONFIG_ARCH_LUBBOCK is not set
++# CONFIG_ARCH_PXA_IDP is not set
++# CONFIG_ARCH_PXA_CERF is not set
++# CONFIG_COTULLA_DMA is not set
++# CONFIG_SABINAL_DISCOVERY is not set
++# CONFIG_ARCH_SABINAL is not set
++# CONFIG_ARCH_PXA_POODLE is not set
++# CONFIG_POODLE_TR0 is not set
++# CONFIG_ARCH_PXA_CORGI is not set
++# CONFIG_CORGI_TR0 is not set
++# CONFIG_ARCH_PXA_SHEPHERD is not set
++# CONFIG_ARCH_PXA_HUSKY is not set
++CONFIG_ARCH_PXA_TOSA=y
++CONFIG_ARCH_PXA_TOSA_SKIP=y
++CONFIG_ARCH_SHARP_SL=y
++# CONFIG_ARCH_SHARP_SL_E is not set
++# CONFIG_ARCH_SHARP_SL_V is not set
++# CONFIG_ARCH_SHARP_SL_G is not set
++CONFIG_ARCH_SHARP_SL_J=y
++# CONFIG_ARCH_SHARP_SL_S is not set
++# CONFIG_ARCH_SHARP_SL_I is not set
++# CONFIG_PXA_USB is not set
++# CONFIG_PXA_USB_NETLINK is not set
++# CONFIG_PXA_USB_CHAR is not set
++
++#
++# CLPS711X/EP721X Implementations
++#
++# CONFIG_ARCH_AUTCPU12 is not set
++# CONFIG_ARCH_CDB89712 is not set
++# CONFIG_ARCH_CLEP7312 is not set
++# CONFIG_ARCH_EDB7211 is not set
++# CONFIG_ARCH_P720T is not set
++# CONFIG_ARCH_FORTUNET is not set
++# CONFIG_ARCH_EP7211 is not set
++# CONFIG_ARCH_EP7212 is not set
++# CONFIG_ARCH_ACORN is not set
++# CONFIG_FOOTBRIDGE is not set
++# CONFIG_FOOTBRIDGE_HOST is not set
++# CONFIG_FOOTBRIDGE_ADDIN is not set
++CONFIG_CPU_32=y
++# CONFIG_CPU_26 is not set
++# CONFIG_CPU_32v3 is not set
++# CONFIG_CPU_32v4 is not set
++# CONFIG_CPU_ARM610 is not set
++# CONFIG_CPU_ARM710 is not set
++# CONFIG_CPU_ARM720T is not set
++# CONFIG_CPU_ARM920T is not set
++# CONFIG_CPU_ARM922T is not set
++# CONFIG_PLD is not set
++# CONFIG_CPU_ARM926T is not set
++# CONFIG_CPU_ARM1020 is not set
++# CONFIG_CPU_SA110 is not set
++# CONFIG_CPU_SA1100 is not set
++CONFIG_CPU_32v5=y
++CONFIG_CPU_XSCALE=y
++CONFIG_BATT=y
++# CONFIG_XSCALE_CACHE_ERRATA is not set
++CONFIG_ARM_THUMB=y
++CONFIG_ARM_FCSE=y
++# CONFIG_DISCONTIGMEM is not set
++
++#
++# General setup
++#
++# CONFIG_PCI is not set
++# CONFIG_ISA is not set
++# CONFIG_ISA_DMA is not set
++# CONFIG_ZBOOT_ROM is not set
++CONFIG_ZBOOT_ROM_TEXT=0
++CONFIG_ZBOOT_ROM_BSS=0
++CONFIG_HOTPLUG=y
++
++#
++# PCMCIA/CardBus support
++#
++CONFIG_PCMCIA=y
++# CONFIG_I82092 is not set
++# CONFIG_I82365 is not set
++# CONFIG_TCIC is not set
++# CONFIG_PCMCIA_CLPS6700 is not set
++# CONFIG_PCMCIA_SA1100 is not set
++CONFIG_PCMCIA_PXA=y
++CONFIG_NET=y
++CONFIG_SYSVIPC=y
++# CONFIG_BSD_PROCESS_ACCT is not set
++CONFIG_SYSCTL=y
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_FASTFPE is not set
++CONFIG_KCORE_ELF=y
++# CONFIG_KCORE_AOUT is not set
++CONFIG_BINFMT_AOUT=y
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_MISC is not set
++CONFIG_PM=y
++CONFIG_APM=y
++# CONFIG_APM_IGNORE_USER_SUSPEND is not set
++CONFIG_APM_CPU_IDLE=y
++CONFIG_APM_DISPLAY_BLANK=y
++CONFIG_APM_RTC_IS_GMT=y
++# CONFIG_ARTHUR is not set
++CONFIG_CMDLINE="console=ttyS0 root=/dev/mtdblock2"
++CONFIG_SHARPSL_BOOTLDR_PARAMS=y
++CONFIG_ALIGNMENT_TRAP=y
++CONFIG_FREEPG_SIGNAL=y
++CONFIG_OOM_KILL_SURVIVAL=y
++CONFIG_DEVICEINFO=y
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Memory Technology Devices (MTD)
++#
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_CONCAT is not set
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_MTD_CMDLINE_PARTS=y
++# CONFIG_MTD_AFS_PARTS is not set
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++# CONFIG_MTD_CFI is not set
++# CONFIG_MTD_JEDECPROBE is not set
++# CONFIG_MTD_GEN_PROBE is not set
++# CONFIG_MTD_CFI_INTELEXT is not set
++# CONFIG_MTD_CFI_AMDSTD is not set
++# CONFIG_MTD_CFI_STAA is not set
++# CONFIG_MTD_RAM is not set
++CONFIG_MTD_ROM=y
++# CONFIG_MTD_ABSENT is not set
++# CONFIG_MTD_OBSOLETE_CHIPS is not set
++# CONFIG_MTD_AMDSTD is not set
++# CONFIG_MTD_SHARP is not set
++# CONFIG_MTD_JEDEC is not set
++
++#
++# Mapping drivers for chip access
++#
++# CONFIG_MTD_PHYSMAP is not set
++# CONFIG_MTD_LUBBOCK is not set
++# CONFIG_MTD_NORA is not set
++# CONFIG_MTD_ARM_INTEGRATOR is not set
++# CONFIG_MTD_CDB89712 is not set
++# CONFIG_MTD_SA1100 is not set
++# CONFIG_MTD_DC21285 is not set
++# CONFIG_MTD_IQ80310 is not set
++# CONFIG_MTD_FORTUNET is not set
++# CONFIG_MTD_PXA_CERF is not set
++# CONFIG_MTD_EPXA10DB is not set
++# CONFIG_MTD_AUTCPU12 is not set
++# CONFIG_MTD_EDB7312 is not set
++# CONFIG_MTD_IMPA7 is not set
++# CONFIG_MTD_DISCOVERY is not set
++CONFIG_MTD_SHARP_SL=y
++# CONFIG_MTD_PCI is not set
++
++#
++# Self-contained MTD device drivers
++#
++# CONFIG_MTD_PMC551 is not set
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_MTDROM_SA1100 is not set
++# CONFIG_MTD_MTDRAM_SA1100 is not set
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_MTDRAM_SHARP_SL is not set
++# CONFIG_MTD_BLKMTD is not set
++# CONFIG_MTD_DOC1000 is not set
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOCPROBE is not set
++
++#
++# NAND Flash Device Drivers
++#
++CONFIG_MTD_NAND=y
++CONFIG_MTD_NAND_ECC=y
++CONFIG_MTD_NAND_VERIFY_WRITE=y
++CONFIG_MTD_NAND_POST_BADBLOCK=y
++# CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
++CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS=y
++CONFIG_MTD_NAND_PAGE_CACHE=y
++CONFIG_MTD_NAND_SHARP_SL_TC6393=y
++# CONFIG_MTD_NAND_SHARP_SL is not set
++
++#
++# Plug and Play configuration
++#
++# CONFIG_PNP is not set
++# CONFIG_ISAPNP is not set
++
++#
++# Block devices
++#
++# CONFIG_BLK_DEV_FD is not set
++# CONFIG_BLK_DEV_XD is not set
++# CONFIG_PARIDE is not set
++# CONFIG_BLK_CPQ_DA is not set
++# CONFIG_BLK_CPQ_CISS_DA is not set
++# CONFIG_BLK_DEV_DAC960 is not set
++# CONFIG_BLK_DEV_COLLIE_MMCSD is not set
++CONFIG_BLK_DEV_SL_MMCSD=m
++CONFIG_BLK_DEV_SL_MMCSD_PSAVE=y
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_NBD is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_SIZE=8192
++CONFIG_BLK_DEV_INITRD=y
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++# CONFIG_BLK_DEV_MD is not set
++# CONFIG_MD_LINEAR is not set
++# CONFIG_MD_RAID0 is not set
++# CONFIG_MD_RAID1 is not set
++# CONFIG_MD_RAID5 is not set
++# CONFIG_MD_MULTIPATH is not set
++# CONFIG_BLK_DEV_LVM is not set
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++CONFIG_PACKET_MMAP=y
++CONFIG_NETLINK_DEV=y
++CONFIG_NETFILTER=y
++# CONFIG_NETFILTER_DEBUG is not set
++# CONFIG_FILTER is not set
++CONFIG_UNIX=y
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++# CONFIG_IP_ADVANCED_ROUTER is not set
++# CONFIG_IP_PNP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_INET_ECN is not set
++# CONFIG_SYN_COOKIES is not set
++
++#
++# IP: Netfilter Configuration
++#
++# CONFIG_IP_NF_CONNTRACK is not set
++# CONFIG_IP_NF_QUEUE is not set
++# CONFIG_IP_NF_IPTABLES is not set
++# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
++# CONFIG_IP_NF_COMPAT_IPFWADM is not set
++# CONFIG_IPV6 is not set
++# CONFIG_KHTTPD is not set
++# CONFIG_ATM is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_DECNET is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_LLC is not set
++# CONFIG_NET_DIVERT is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_NET_FASTROUTE is not set
++# CONFIG_NET_HW_FLOWCONTROL is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network device support
++#
++CONFIG_NETDEVICES=y
++
++#
++# ARCnet devices
++#
++# CONFIG_ARCNET is not set
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_ETHERTAP is not set
++
++#
++# Ethernet (10 or 100Mbit)
++#
++CONFIG_NET_ETHERNET=y
++# CONFIG_ARM_AM79C961A is not set
++# CONFIG_SUNLANCE is not set
++# CONFIG_SUNBMAC is not set
++# CONFIG_SUNQE is not set
++# CONFIG_SUNGEM is not set
++# CONFIG_NET_VENDOR_3COM is not set
++# CONFIG_LANCE is not set
++# CONFIG_NET_VENDOR_SMC is not set
++# CONFIG_NET_VENDOR_RACAL is not set
++# CONFIG_NET_ISA is not set
++# CONFIG_NET_PCI is not set
++# CONFIG_NET_POCKET is not set
++
++#
++# Ethernet (1000 Mbit)
++#
++# CONFIG_ACENIC is not set
++# CONFIG_DL2K is not set
++# CONFIG_MYRI_SBUS is not set
++# CONFIG_NS83820 is not set
++# CONFIG_HAMACHI is not set
++# CONFIG_YELLOWFIN is not set
++# CONFIG_SK98LIN is not set
++# CONFIG_FDDI is not set
++# CONFIG_HIPPI is not set
++# CONFIG_PLIP is not set
++CONFIG_PPP=y
++# CONFIG_PPP_MULTILINK is not set
++# CONFIG_PPP_FILTER is not set
++CONFIG_PPP_ASYNC=y
++# CONFIG_PPP_SYNC_TTY is not set
++# CONFIG_PPP_DEFLATE is not set
++CONFIG_PPP_BSDCOMP=y
++# CONFIG_PPPOE is not set
++# CONFIG_SLIP is not set
++
++#
++# Wireless LAN (non-hamradio)
++#
++CONFIG_NET_RADIO=y
++# CONFIG_STRIP is not set
++# CONFIG_WAVELAN is not set
++# CONFIG_ARLAN is not set
++# CONFIG_AIRONET4500 is not set
++# CONFIG_AIRONET4500_NONCS is not set
++# CONFIG_AIRONET4500_PROC is not set
++CONFIG_HERMES=y
++CONFIG_PCMCIA_HERMES=y
++# CONFIG_AIRO_CS is not set
++CONFIG_NET_WIRELESS=y
++
++#
++# Token Ring devices
++#
++# CONFIG_TR is not set
++# CONFIG_NET_FC is not set
++# CONFIG_RCPCI is not set
++# CONFIG_SHAPER is not set
++
++#
++# Wan interfaces
++#
++# CONFIG_WAN is not set
++
++#
++# PCMCIA network device support
++#
++CONFIG_NET_PCMCIA=y
++# CONFIG_PCMCIA_3C589 is not set
++# CONFIG_PCMCIA_3C574 is not set
++# CONFIG_PCMCIA_FMVJ18X is not set
++CONFIG_PCMCIA_PCNET=y
++# CONFIG_PCMCIA_AXNET is not set
++# CONFIG_PCMCIA_NMCLAN is not set
++# CONFIG_PCMCIA_SMC91C92 is not set
++# CONFIG_PCMCIA_XIRC2PS is not set
++# CONFIG_ARCNET_COM20020_CS is not set
++# CONFIG_PCMCIA_IBMTR is not set
++# CONFIG_NET_PCMCIA_RADIO is not set
++
++#
++# Amateur Radio support
++#
++# CONFIG_HAMRADIO is not set
++
++#
++# IrDA (infrared) support
++#
++CONFIG_IRDA=y
++# CONFIG_IRLAN is not set
++# CONFIG_IRNET is not set
++CONFIG_IRCOMM=y
++# CONFIG_IRDA_ULTRA is not set
++# CONFIG_IRDA_CACHE_LAST_LSAP is not set
++CONFIG_IRDA_FAST_RR=y
++# CONFIG_IRDA_DEBUG is not set
++
++#
++# Infrared-port device drivers
++#
++CONFIG_IRTTY_SIR=y
++# CONFIG_IRPORT_SIR is not set
++# CONFIG_DONGLE is not set
++# CONFIG_USB_IRDA is not set
++# CONFIG_NSC_FIR is not set
++# CONFIG_WINBOND_FIR is not set
++# CONFIG_TOSHIBA_FIR is not set
++# CONFIG_SMC_IRCC_FIR is not set
++# CONFIG_ALI_FIR is not set
++# CONFIG_VLSI_FIR is not set
++
++#
++# ATA/IDE/MFM/RLL support
++#
++CONFIG_IDE=y
++
++#
++# IDE, ATA and ATAPI Block devices
++#
++CONFIG_BLK_DEV_IDE=y
++# CONFIG_BLK_DEV_HD_IDE is not set
++# CONFIG_BLK_DEV_HD is not set
++CONFIG_BLK_DEV_IDEDISK=y
++# CONFIG_IDEDISK_MULTI_MODE is not set
++# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
++# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
++# CONFIG_BLK_DEV_IDEDISK_IBM is not set
++# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
++# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
++# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
++# CONFIG_BLK_DEV_IDEDISK_WD is not set
++# CONFIG_BLK_DEV_COMMERIAL is not set
++# CONFIG_BLK_DEV_TIVO is not set
++CONFIG_BLK_DEV_IDECS=y
++# CONFIG_BLK_DEV_IDECD is not set
++# CONFIG_BLK_DEV_IDETAPE is not set
++# CONFIG_BLK_DEV_IDEFLOPPY is not set
++# CONFIG_BLK_DEV_IDESCSI is not set
++# CONFIG_BLK_DEV_CMD640 is not set
++# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
++# CONFIG_BLK_DEV_ISAPNP is not set
++# CONFIG_IDE_CHIPSETS is not set
++# CONFIG_IDEDMA_AUTO is not set
++# CONFIG_DMA_NONPCI is not set
++# CONFIG_BLK_DEV_IDE_MODES is not set
++# CONFIG_BLK_DEV_ATARAID is not set
++# CONFIG_BLK_DEV_ATARAID_PDC is not set
++# CONFIG_BLK_DEV_ATARAID_HPT is not set
++
++#
++# SCSI support
++#
++CONFIG_SCSI=y
++CONFIG_BLK_DEV_SD=y
++CONFIG_SD_EXTRA_DEVS=40
++# CONFIG_CHR_DEV_ST is not set
++# CONFIG_CHR_DEV_OSST is not set
++# CONFIG_BLK_DEV_SR is not set
++# CONFIG_CHR_DEV_SG is not set
++# CONFIG_SCSI_DEBUG_QUEUES is not set
++# CONFIG_SCSI_MULTI_LUN is not set
++# CONFIG_SCSI_CONSTANTS is not set
++# CONFIG_SCSI_LOGGING is not set
++
++#
++# SCSI low-level drivers
++#
++# CONFIG_SCSI_7000FASST is not set
++# CONFIG_SCSI_ACARD is not set
++# CONFIG_SCSI_AHA152X is not set
++# CONFIG_SCSI_AHA1542 is not set
++# CONFIG_SCSI_AHA1740 is not set
++# CONFIG_SCSI_AACRAID is not set
++# CONFIG_SCSI_AIC7XXX is not set
++# CONFIG_SCSI_AIC7XXX_OLD is not set
++# CONFIG_SCSI_DPT_I2O is not set
++# CONFIG_SCSI_ADVANSYS is not set
++# CONFIG_SCSI_IN2000 is not set
++# CONFIG_SCSI_AM53C974 is not set
++# CONFIG_SCSI_MEGARAID is not set
++# CONFIG_SCSI_BUSLOGIC is not set
++# CONFIG_SCSI_DMX3191D is not set
++# CONFIG_SCSI_DTC3280 is not set
++# CONFIG_SCSI_EATA is not set
++# CONFIG_SCSI_EATA_DMA is not set
++# CONFIG_SCSI_EATA_PIO is not set
++# CONFIG_SCSI_FUTURE_DOMAIN is not set
++# CONFIG_SCSI_GDTH is not set
++# CONFIG_SCSI_GENERIC_NCR5380 is not set
++# CONFIG_SCSI_INITIO is not set
++# CONFIG_SCSI_INIA100 is not set
++# CONFIG_SCSI_NCR53C406A is not set
++# CONFIG_SCSI_NCR53C7xx is not set
++# CONFIG_SCSI_PAS16 is not set
++# CONFIG_SCSI_PCI2000 is not set
++# CONFIG_SCSI_PCI2220I is not set
++# CONFIG_SCSI_PSI240I is not set
++# CONFIG_SCSI_QLOGIC_FAS is not set
++# CONFIG_SCSI_SIM710 is not set
++# CONFIG_SCSI_SYM53C416 is not set
++# CONFIG_SCSI_T128 is not set
++# CONFIG_SCSI_U14_34F is not set
++# CONFIG_SCSI_DEBUG is not set
++
++#
++# PCMCIA SCSI adapter support
++#
++# CONFIG_SCSI_PCMCIA is not set
++
++#
++# I2O device support
++#
++# CONFIG_I2O is not set
++# CONFIG_I2O_BLOCK is not set
++# CONFIG_I2O_LAN is not set
++# CONFIG_I2O_SCSI is not set
++# CONFIG_I2O_PROC is not set
++
++#
++# ISDN subsystem
++#
++# CONFIG_ISDN is not set
++
++#
++# Input core support
++#
++CONFIG_INPUT=y
++CONFIG_INPUT_KEYBDEV=y
++CONFIG_INPUT_MOUSEDEV=y
++CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
++CONFIG_INPUT_JOYDEV=m
++CONFIG_INPUT_EVDEV=m
++
++#
++# Character devices
++#
++CONFIG_VT=y
++CONFIG_VT_CONSOLE=y
++CONFIG_SERIAL=y
++# CONFIG_SERIAL_CONSOLE is not set
++CONFIG_SERIAL_SL_SERIES=y
++CONFIG_BLUETOOTH_SL=y
++# CONFIG_SERIAL_EXTENDED is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_ANAKIN is not set
++# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
++# CONFIG_SERIAL_AMBA is not set
++# CONFIG_SERIAL_AMBA_CONSOLE is not set
++# CONFIG_SERIAL_CLPS711X is not set
++# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
++# CONFIG_SERIAL_21285 is not set
++# CONFIG_SERIAL_21285_OLD is not set
++# CONFIG_SERIAL_21285_CONSOLE is not set
++# CONFIG_SERIAL_UART00 is not set
++# CONFIG_SERIAL_UART00_CONSOLE is not set
++# CONFIG_SERIAL_SA1100 is not set
++# CONFIG_SERIAL_SA1100_CONSOLE is not set
++# CONFIG_SERIAL_8250 is not set
++# CONFIG_SERIAL_8250_CONSOLE is not set
++# CONFIG_SERIAL_8250_EXTENDED is not set
++# CONFIG_SERIAL_8250_MANY_PORTS is not set
++# CONFIG_SERIAL_8250_SHARE_IRQ is not set
++# CONFIG_SERIAL_8250_DETECT_IRQ is not set
++# CONFIG_SERIAL_8250_MULTIPORT is not set
++# CONFIG_SERIAL_8250_HUB6 is not set
++CONFIG_UNIX98_PTYS=y
++CONFIG_UNIX98_PTY_COUNT=256
++
++#
++# I2C support
++#
++# CONFIG_I2C is not set
++
++#
++# L3 serial bus support
++#
++# CONFIG_L3 is not set
++# CONFIG_L3_ALGOBIT is not set
++# CONFIG_L3_BIT_SA1100_GPIO is not set
++# CONFIG_L3_SA1111 is not set
++# CONFIG_BIT_SA1100_GPIO is not set
++
++#
++# Mice
++#
++# CONFIG_BUSMOUSE is not set
++# CONFIG_MOUSE is not set
++
++#
++# Joysticks
++#
++# CONFIG_INPUT_GAMEPORT is not set
++# CONFIG_INPUT_NS558 is not set
++# CONFIG_INPUT_LIGHTNING is not set
++# CONFIG_INPUT_PCIGAME is not set
++# CONFIG_INPUT_CS461X is not set
++# CONFIG_INPUT_EMU10K1 is not set
++# CONFIG_INPUT_SERIO is not set
++# CONFIG_INPUT_SERPORT is not set
++# CONFIG_INPUT_ANALOG is not set
++# CONFIG_INPUT_A3D is not set
++# CONFIG_INPUT_ADI is not set
++# CONFIG_INPUT_COBRA is not set
++# CONFIG_INPUT_GF2K is not set
++# CONFIG_INPUT_GRIP is not set
++# CONFIG_INPUT_INTERACT is not set
++# CONFIG_INPUT_TMDC is not set
++# CONFIG_INPUT_SIDEWINDER is not set
++# CONFIG_INPUT_IFORCE_USB is not set
++# CONFIG_INPUT_IFORCE_232 is not set
++# CONFIG_INPUT_WARRIOR is not set
++# CONFIG_INPUT_MAGELLAN is not set
++# CONFIG_INPUT_SPACEORB is not set
++# CONFIG_INPUT_SPACEBALL is not set
++# CONFIG_INPUT_STINGER is not set
++# CONFIG_INPUT_DB9 is not set
++# CONFIG_INPUT_GAMECON is not set
++# CONFIG_INPUT_TURBOGRAFX is not set
++# CONFIG_QIC02_TAPE is not set
++
++#
++# Watchdog Cards
++#
++# CONFIG_WATCHDOG is not set
++# CONFIG_INTEL_RNG is not set
++# CONFIG_NVRAM is not set
++# CONFIG_RTC is not set
++CONFIG_COTULLA_RTC=y
++# CONFIG_ADS7846_TS is not set
++CONFIG_TOSA_TS=y
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++# CONFIG_APPLICOM is not set
++
++#
++# Ftape, the floppy tape device driver
++#
++# CONFIG_FTAPE is not set
++# CONFIG_AGP is not set
++# CONFIG_DRM is not set
++
++#
++# PCMCIA character devices
++#
++CONFIG_PCMCIA_SERIAL_CS=y
++CONFIG_PCMCIA_CHRDEV=y
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++
++#
++# File systems
++#
++# CONFIG_QUOTA is not set
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++CONFIG_FS_SYNC=y
++# CONFIG_REISERFS_FS is not set
++# CONFIG_REISERFS_CHECK is not set
++# CONFIG_REISERFS_PROC_INFO is not set
++# CONFIG_ADFS_FS is not set
++# CONFIG_ADFS_FS_RW is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EXT3_FS is not set
++# CONFIG_JBD is not set
++# CONFIG_JBD_DEBUG is not set
++CONFIG_FAT_FS=y
++# CONFIG_MSDOS_FS is not set
++# CONFIG_UMSDOS_FS is not set
++CONFIG_VFAT_FS=y
++# CONFIG_EFS_FS is not set
++# CONFIG_JFFS_FS is not set
++CONFIG_JFFS2_FS=y
++CONFIG_JFFS2_FS_DEBUG=0
++CONFIG_JFFS2_FS_NAND=y
++CONFIG_JFFS2_PROC_FS=y
++CONFIG_JFFS2_NODEMERGE=y
++CONFIG_JFFS2_DYNFRAGTREE=y
++CONFIG_CRAMFS=y
++CONFIG_TMPFS=y
++# CONFIG_RAMFS is not set
++# CONFIG_ISO9660_FS is not set
++# CONFIG_JOLIET is not set
++# CONFIG_ZISOFS is not set
++CONFIG_MINIX_FS=y
++# CONFIG_VXFS_FS is not set
++# CONFIG_NTFS_FS is not set
++# CONFIG_NTFS_RW is not set
++# CONFIG_HPFS_FS is not set
++CONFIG_PROC_FS=y
++# CONFIG_DEVFS_FS is not set
++# CONFIG_DEVFS_MOUNT is not set
++# CONFIG_DEVFS_DEBUG is not set
++CONFIG_DEVPTS_FS=y
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_QNX4FS_RW is not set
++# CONFIG_ROMFS_FS is not set
++CONFIG_EXT2_FS=y
++# CONFIG_SYSV_FS is not set
++# CONFIG_UDF_FS is not set
++# CONFIG_UDF_RW is not set
++# CONFIG_UFS_FS is not set
++# CONFIG_UFS_FS_WRITE is not set
++
++#
++# Network File Systems
++#
++# CONFIG_CODA_FS is not set
++# CONFIG_INTERMEZZO_FS is not set
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_ROOT_NFS is not set
++# CONFIG_NFSD is not set
++# CONFIG_NFSD_V3 is not set
++CONFIG_SUNRPC=y
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_SMB_FS=y
++# CONFIG_SMB_NLS_DEFAULT is not set
++# CONFIG_NCP_FS is not set
++# CONFIG_NCPFS_PACKET_SIGNING is not set
++# CONFIG_NCPFS_IOCTL_LOCKING is not set
++# CONFIG_NCPFS_STRONG is not set
++# CONFIG_NCPFS_NFS_NS is not set
++# CONFIG_NCPFS_OS2_NS is not set
++# CONFIG_NCPFS_SMALLDOS is not set
++# CONFIG_NCPFS_NLS is not set
++# CONFIG_NCPFS_EXTRAS is not set
++# CONFIG_ZISOFS_FS is not set
++CONFIG_ZLIB_FS_INFLATE=y
++
++#
++# Partition Types
++#
++CONFIG_PARTITION_ADVANCED=y
++# CONFIG_ACORN_PARTITION is not set
++# CONFIG_OSF_PARTITION is not set
++# CONFIG_AMIGA_PARTITION is not set
++# CONFIG_ATARI_PARTITION is not set
++# CONFIG_MAC_PARTITION is not set
++CONFIG_MSDOS_PARTITION=y
++# CONFIG_BSD_DISKLABEL is not set
++# CONFIG_MINIX_SUBPARTITION is not set
++# CONFIG_SOLARIS_X86_PARTITION is not set
++# CONFIG_UNIXWARE_DISKLABEL is not set
++# CONFIG_LDM_PARTITION is not set
++# CONFIG_SGI_PARTITION is not set
++# CONFIG_ULTRIX_PARTITION is not set
++# CONFIG_SUN_PARTITION is not set
++CONFIG_SMB_NLS=y
++CONFIG_NLS=y
++
++#
++# Native Language Support
++#
++CONFIG_NLS_DEFAULT="iso8859-1"
++CONFIG_NLS_CODEPAGE_437=y
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++CONFIG_NLS_CODEPAGE_850=y
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++CONFIG_NLS_CODEPAGE_932=y
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++CONFIG_NLS_ISO8859_1=y
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++CONFIG_NLS_UTF8=y
++
++#
++# Console drivers
++#
++CONFIG_PC_KEYMAP=y
++# CONFIG_VGA_CONSOLE is not set
++
++#
++# Frame-buffer support
++#
++CONFIG_FB=y
++CONFIG_DUMMY_CONSOLE=y
++# CONFIG_FB_COLLIE is not set
++# CONFIG_FB_ACORN is not set
++# CONFIG_FB_ANAKIN is not set
++# CONFIG_FB_CLPS711X is not set
++# CONFIG_FB_SA1100 is not set
++# CONFIG_FB_PXA is not set
++# CONFIG_FB_COTULLA is not set
++# CONFIG_FB_POODLE is not set
++# CONFIG_FB_CORGI is not set
++CONFIG_FB_TOSA=y
++CONFIG_SHARP_LOGO_SCREEN=y
++# CONFIG_FB_CYBER2000 is not set
++# CONFIG_FB_VIRTUAL is not set
++CONFIG_FBCON_ADVANCED=y
++# CONFIG_FBCON_MFB is not set
++# CONFIG_FBCON_CFB2 is not set
++# CONFIG_FBCON_CFB4 is not set
++# CONFIG_FBCON_CFB8 is not set
++CONFIG_FBCON_CFB16=y
++# CONFIG_FBCON_CFB24 is not set
++# CONFIG_FBCON_CFB32 is not set
++# CONFIG_FBCON_AFB is not set
++# CONFIG_FBCON_ILBM is not set
++# CONFIG_FBCON_IPLAN2P2 is not set
++# CONFIG_FBCON_IPLAN2P4 is not set
++# CONFIG_FBCON_IPLAN2P8 is not set
++# CONFIG_FBCON_MAC is not set
++# CONFIG_FBCON_VGA_PLANES is not set
++# CONFIG_FBCON_VGA is not set
++# CONFIG_FBCON_HGA is not set
++# CONFIG_FBCON_ROTATE_R is not set
++# CONFIG_FBCON_ROTATE_L is not set
++# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
++CONFIG_FBCON_FONTS=y
++CONFIG_FONT_8x8=y
++CONFIG_FONT_8x16=y
++# CONFIG_FONT_SUN8x16 is not set
++# CONFIG_FONT_SUN12x22 is not set
++# CONFIG_FONT_6x11 is not set
++# CONFIG_FONT_PEARL_8x8 is not set
++# CONFIG_FONT_ACORN_8x8 is not set
++
++#
++# Sound
++#
++CONFIG_SOUND=y
++# CONFIG_SOUND_BT878 is not set
++# CONFIG_SOUND_COLLIE_SSP is not set
++# CONFIG_SOUND_COLLIE_TC35143 is not set
++# CONFIG_SOUND_CMPCI is not set
++# CONFIG_SOUND_EMU10K1 is not set
++# CONFIG_MIDI_EMU10K1 is not set
++# CONFIG_SOUND_FUSION is not set
++# CONFIG_SOUND_CS4281 is not set
++# CONFIG_SOUND_ES1370 is not set
++# CONFIG_SOUND_ES1371 is not set
++# CONFIG_SOUND_ESSSOLO1 is not set
++# CONFIG_SOUND_MAESTRO is not set
++# CONFIG_SOUND_MAESTRO3 is not set
++# CONFIG_SOUND_ICH is not set
++# CONFIG_SOUND_RME96XX is not set
++# CONFIG_SOUND_SONICVIBES is not set
++# CONFIG_SOUND_TRIDENT is not set
++# CONFIG_SOUND_MSNDCLAS is not set
++# CONFIG_SOUND_MSNDPIN is not set
++# CONFIG_SOUND_VIA82CXXX is not set
++# CONFIG_MIDI_VIA82CXXX is not set
++# CONFIG_SOUND_OSS is not set
++# CONFIG_SOUND_WAVEARTIST is not set
++# CONFIG_SOUND_PXA_AC97 is not set
++# CONFIG_SOUND_POODLE is not set
++# CONFIG_SOUND_CORGI is not set
++CONFIG_SOUND_TOSA=y
++CONFIG_BUZZER_TOSA=y
++# CONFIG_SOUND_TVMIXER is not set
++
++#
++# Multimedia Capabilities Port drivers
++#
++# CONFIG_MCP is not set
++# CONFIG_MCP_SA1100 is not set
++# CONFIG_MCP_UCB1200 is not set
++# CONFIG_MCP_UCB1200_AUDIO is not set
++# CONFIG_MCP_UCB1200_TS is not set
++# CONFIG_MCP_UCB1400_TS is not set
++
++#
++# USB support
++#
++CONFIG_USB=y
++# CONFIG_USB_DEBUG is not set
++CONFIG_USB_DEVICEFS=y
++# CONFIG_USB_BANDWIDTH is not set
++# CONFIG_USB_LONG_TIMEOUT is not set
++# CONFIG_USB_UHCI is not set
++# CONFIG_USB_UHCI_ALT is not set
++# CONFIG_USB_OHCI is not set
++# CONFIG_USB_OHCI_SA1111 is not set
++CONFIG_USB_OHCI_TC6393=m
++CONFIG_USB_USE_INTERNAL_MEMORY=y
++# CONFIG_USB_AUDIO is not set
++# CONFIG_USB_BLUETOOTH is not set
++CONFIG_USB_STORAGE=m
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++CONFIG_USB_STORAGE_ISD200=y
++# CONFIG_USB_STORAGE_DPCM is not set
++# CONFIG_USB_STORAGE_HP8200e is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++CONFIG_USB_ACM=m
++# CONFIG_USB_PRINTER is not set
++CONFIG_USB_HID=m
++# CONFIG_USB_HIDDEV is not set
++CONFIG_USB_KBD=m
++CONFIG_USB_MOUSE=m
++# CONFIG_USB_WACOM is not set
++# CONFIG_USB_DC2XX is not set
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_SCANNER is not set
++# CONFIG_USB_MICROTEK is not set
++# CONFIG_USB_HPUSBSCSI is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_CDCETHER is not set
++# CONFIG_USB_USBNET is not set
++# CONFIG_USB_USS720 is not set
++
++#
++# USB Serial Converter support
++#
++# CONFIG_USB_SERIAL is not set
++# CONFIG_USB_SERIAL_GENERIC is not set
++# CONFIG_USB_SERIAL_BELKIN is not set
++# CONFIG_USB_SERIAL_WHITEHEAT is not set
++# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
++# CONFIG_USB_SERIAL_EMPEG is not set
++# CONFIG_USB_SERIAL_FTDI_SIO is not set
++# CONFIG_USB_SERIAL_VISOR is not set
++# CONFIG_USB_SERIAL_IPAQ is not set
++# CONFIG_USB_SERIAL_IR is not set
++# CONFIG_USB_SERIAL_EDGEPORT is not set
++# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
++# CONFIG_USB_SERIAL_KEYSPAN is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
++# CONFIG_USB_SERIAL_MCT_U232 is not set
++# CONFIG_USB_SERIAL_KLSI is not set
++# CONFIG_USB_SERIAL_PL2303 is not set
++# CONFIG_USB_SERIAL_CYBERJACK is not set
++# CONFIG_USB_SERIAL_XIRCOM is not set
++# CONFIG_USB_SERIAL_OMNINET is not set
++# CONFIG_USB_RIO500 is not set
++
++#
++# USB Device Support
++#
++CONFIG_USBD=m
++CONFIG_USBD_VENDORID=04DD
++CONFIG_USBD_PRODUCTID=9032
++CONFIG_USBD_PRODUCT_NAME="SL-6000"
++CONFIG_USBD_MANUFACTURER="Sharp"
++# CONFIG_USBD_USE_SERIAL_NUMBER is not set
++CONFIG_USBD_SELFPOWERED=y
++CONFIG_USBD_MONITOR=m
++CONFIG_USBD_PROCFS=y
++
++#
++# Network Function
++#
++CONFIG_USBD_NET=m
++CONFIG_USBD_NET_VENDORID=04DD
++CONFIG_USBD_NET_PRODUCTID=9032
++CONFIG_USBD_NET_IFNAME="usbd"
++CONFIG_USBD_NET_OUT_ENDPOINT=1
++CONFIG_USBD_NET_OUT_PKTSIZE=64
++CONFIG_USBD_NET_IN_ENDPOINT=2
++CONFIG_USBD_NET_IN_PKTSIZE=64
++CONFIG_USBD_NET_INT_ENDPOINT=3
++CONFIG_USBD_NET_INT_PKTSIZE=16
++# CONFIG_USBD_NET_ALWAYSUP is not set
++# CONFIG_USBD_NET_SAFE is not set
++CONFIG_USBD_NET_MDLM=y
++# CONFIG_USBD_NET_CDC is not set
++CONFIG_USBD_NET_REMOTE_MACADDR=""
++CONFIG_USBD_NET_REMOTE_OUI=400002
++CONFIG_USBD_MAC_AS_SERIAL_NUMBER=y
++CONFIG_USBD_NET_LOCAL_MACADDR="400001000001"
++CONFIG_USBD_NET_LOCAL_OUI=400001
++
++#
++# Serial Function
++#
++# CONFIG_USBD_SERIAL is not set
++
++#
++# USB Device Bus Interface Support
++#
++CONFIG_USBD_PXA_BUS=m
++# CONFIG_USBD_GENERIC_BUS is not set
++
++#
++# Bluetooth support
++#
++# CONFIG_BLUEZ is not set
++
++#
++# Kernel hacking
++#
++CONFIG_FRAME_POINTER=y
++# CONFIG_DEBUG_USER is not set
++# CONFIG_DEBUG_COREDUMP_SIGNAL is not set
++# CONFIG_DEBUG_INFO is not set
++# CONFIG_NO_PGT_CACHE is not set
++# CONFIG_DEBUG_KERNEL is not set
++# CONFIG_DEBUG_SLAB is not set
++# CONFIG_MAGIC_SYSRQ is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_WAITQ is not set
++# CONFIG_DEBUG_BUGVERBOSE is not set
++# CONFIG_DEBUG_ERRORS is not set
++# CONFIG_DEBUG_LL is not set
++# CONFIG_DEBUG_DC21285_PORT is not set
++# CONFIG_DEBUG_CLPS711X_UART2 is not set
+diff -Nur linux_c860_org/arch/arm/kernel/entry-armv.S linux/arch/arm/kernel/entry-armv.S
+--- linux_c860_org/arch/arm/kernel/entry-armv.S 2002-12-18 19:27:21.000000000 +0900
++++ linux/arch/arm/kernel/entry-armv.S 2004-06-10 21:09:10.000000000 +0900
+@@ -769,6 +769,12 @@
+ add r4, sp, #S_SP
+ mov r6, lr
+ stmia r4, {r5, r6, r7, r8, r9} @ save sp_SVC, lr_SVC, pc, cpsr, old_ro
++#ifdef CONFIG_PREEMPT
++ get_current_task r9
++ ldr r8, [r9, #TSK_PREEMPT]
++ add r8, r8, #1
++ str r8, [r9, #TSK_PREEMPT]
++#endif
+ 1: get_irqnr_and_base r0, r6, r5, lr
+ movne r1, sp
+ @
+@@ -776,6 +782,25 @@
+ @
+ adrsvc ne, lr, 1b
+ bne do_IRQ
++#ifdef CONFIG_PREEMPT
++2: ldr r8, [r9, #TSK_PREEMPT]
++ subs r8, r8, #1
++ bne 3f
++ ldr r7, [r9, #TSK_NEED_RESCHED]
++ teq r7, #0
++ beq 3f
++ ldr r6, .LCirqstat
++ ldr r0, [r6, #IRQSTAT_BH_COUNT]
++ teq r0, #0
++ bne 3f
++ mov r0, #MODE_SVC
++ msr cpsr_c, r0 @ enable interrupts
++ bl SYMBOL_NAME(preempt_schedule)
++ mov r0, #I_BIT | MODE_SVC
++ msr cpsr_c, r0 @ disable interrupts
++ b 2b
++3: str r8, [r9, #TSK_PREEMPT]
++#endif
+ ldr r0, [sp, #S_PSR] @ irqs are already disabled
+ msr spsr, r0
+ ldmia sp, {r0 - pc}^ @ load r0 - pc, cpsr
+@@ -833,6 +858,9 @@
+ .LCprocfns: .word SYMBOL_NAME(processor)
+ #endif
+ .LCfp: .word SYMBOL_NAME(fp_enter)
++#ifdef CONFIG_PREEMPT
++.LCirqstat: .word SYMBOL_NAME(irq_stat)
++#endif
+
+ irq_prio_table
+
+@@ -873,6 +901,12 @@
+ stmdb r8, {sp, lr}^
+ alignment_trap r4, r7, __temp_irq
+ zero_fp
++ get_current_task tsk
++#ifdef CONFIG_PREEMPT
++ ldr r0, [tsk, #TSK_PREEMPT]
++ add r0, r0, #1
++ str r0, [tsk, #TSK_PREEMPT]
++#endif
+ 1: get_irqnr_and_base r0, r6, r5, lr
+ movne r1, sp
+ adrsvc ne, lr, 1b
+@@ -880,8 +914,12 @@
+ @ routine called with r0 = irq number, r1 = struct pt_regs *
+ @
+ bne do_IRQ
++#ifdef CONFIG_PREEMPT
++ ldr r0, [tsk, #TSK_PREEMPT]
++ sub r0, r0, #1
++ str r0, [tsk, #TSK_PREEMPT]
++#endif
+ mov why, #0
+- get_current_task tsk
+ b ret_to_user
+
+ .align 5
+diff -Nur linux_c860_org/arch/arm/kernel/process.c linux/arch/arm/kernel/process.c
+--- linux_c860_org/arch/arm/kernel/process.c 2003-06-18 16:12:25.000000000 +0900
++++ linux/arch/arm/kernel/process.c 2004-06-10 21:09:10.000000000 +0900
+@@ -382,7 +382,7 @@
+ * a system call from a "real" process, but the process memory space will
+ * not be free'd until both the parent and the child have exited.
+ */
+-pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
++pid_t arch_kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
+ {
+ pid_t __ret;
+
+diff -Nur linux_c860_org/arch/arm/kernel/time.c linux/arch/arm/kernel/time.c
+--- linux_c860_org/arch/arm/kernel/time.c 2002-08-26 14:39:49.000000000 +0900
++++ linux/arch/arm/kernel/time.c 2004-06-10 21:09:10.000000000 +0900
+@@ -15,6 +15,7 @@
+ * fixed set_rtc_mmss, fixed time.year for >= 2000, new mktime
+ * 1998-12-20 Updated NTP code according to technical memorandum Jan '96
+ * "A Kernel Model for Precision Timekeeping" by Dave Mills
++ * 1-Nov-2003 Sharp Corporation for Tosa
+ */
+ #include <linux/config.h>
+ #include <linux/module.h>
+@@ -149,6 +150,15 @@
+ #define do_leds()
+ #endif
+
++#ifdef CONFIG_ARCH_PXA_TOSA
++#define AVOID_ROLLBACK
++#ifdef AVOID_ROLLBACK
++int rollback_cancel = 0;
++static unsigned long last_sec = 0;
++static unsigned long last_usec = 0;
++#endif
++#endif
++
+ void do_gettimeofday(struct timeval *tv)
+ {
+ unsigned long flags;
+@@ -172,6 +182,25 @@
+ sec++;
+ }
+
++#ifdef CONFIG_ARCH_PXA_TOSA
++#ifdef AVOID_ROLLBACK
++ if (rollback_cancel && last_sec) {
++ if (last_sec>sec && last_sec-sec<4 ) {
++ //X printk("ERROR: time was fixed!(-%d sec)\n",last_sec-sec);
++ sec = last_sec;
++ usec = last_usec+1;
++ } else if (last_sec==sec) {
++ if (last_usec>usec) { // usec is always fixed.
++ //X printk("ERROR: time was fixed!!(-%d usec)\n",last_usec-usec);
++ usec = last_usec+1;
++ }
++ }
++ }
++ last_sec = sec;
++ last_usec = usec;
++#endif
++#endif
++
+ tv->tv_sec = sec;
+ tv->tv_usec = usec;
+ }
+@@ -199,6 +228,13 @@
+ time_maxerror = NTP_PHASE_LIMIT;
+ time_esterror = NTP_PHASE_LIMIT;
+ write_unlock_irq(&xtime_lock);
++
++#ifdef CONFIG_ARCH_PXA_TOSA
++#ifdef AVOID_ROLLBACK
++ last_sec = 0;
++ last_usec = 0;
++#endif
++#endif
+ }
+
+ static struct irqaction timer_irq = {
+diff -Nur linux_c860_org/arch/arm/kernel/traps.c linux/arch/arm/kernel/traps.c
+--- linux_c860_org/arch/arm/kernel/traps.c 2003-01-14 12:07:55.000000000 +0900
++++ linux/arch/arm/kernel/traps.c 2004-06-10 21:09:10.000000000 +0900
+@@ -14,6 +14,7 @@
+ *
+ * Change Log
+ * 12-Dec-2002 Sharp Corporation for Poodle and Corgi
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ *
+ */
+ #include <linux/config.h>
+@@ -35,7 +36,7 @@
+ #include <asm/unistd.h>
+
+
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ #include <asm/mach-types.h>
+ #include <asm/hardware.h>
+ #include <asm/memory.h>
+@@ -292,10 +293,12 @@
+ mm_segment_t fs;
+
+
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
++#if CONFIG_PM
+ extern sharpsl_fataloff(void);
+ sharpsl_fataloff();
+ #endif
++#endif
+
+ console_verbose();
+
+diff -Nur linux_c860_org/arch/arm/mach-pxa/Makefile linux/arch/arm/mach-pxa/Makefile
+--- linux_c860_org/arch/arm/mach-pxa/Makefile 2002-11-14 10:33:31.000000000 +0900
++++ linux/arch/arm/mach-pxa/Makefile 2004-06-10 21:09:10.000000000 +0900
+@@ -16,7 +16,8 @@
+
+ export-objs := generic.o irq.o dma.o sa1111.o \
+ usb_ctl.o usb_recv.o usb_send.o \
+- discovery.o cotulla_dma.o pxa_ssp.o
++ discovery.o cotulla_dma.o pxa_ssp.o tosa.o \
++ tosa_ac97.o
+
+ # Common support (must be linked before board specific support)
+ obj-y += generic.o irq.o
+@@ -33,6 +34,8 @@
+ obj-$(CONFIG_SABINAL_DISCOVERY) += discovery.o discovery_arch.o pxa_ssp.o
+ obj-$(CONFIG_ARCH_PXA_POODLE) += poodle.o m62332.o pxa_ssp.o poodle_buzzer.o
+ obj-$(CONFIG_ARCH_PXA_CORGI) += corgi.o pxa_ssp.o poodle_buzzer.o
++obj-$(CONFIG_ARCH_PXA_TOSA) += tosa.o pxa_nssp.o tosa_ac97.o
++obj-$(CONFIG_BUZZER_TOSA) += tosa_buzzer.o
+
+ # Support for blinky lights
+ leds-y := leds.o
+@@ -66,6 +69,10 @@
+ obj-$(CONFIG_BATT) += sharpsl_battery.o sharpsl_param.o
+ export-objs += sharpsl_battery.o
+ endif
++ ifeq ($(CONFIG_ARCH_PXA_TOSA),y)
++ obj-$(CONFIG_BATT) += tosa_battery.o sharpsl_param.o
++ export-objs += tosa_battery.o
++ endif
+ else
+ obj-$(CONFIG_PM) += pm.o sleep.o
+ endif
+@@ -82,6 +89,9 @@
+ ifeq ($(CONFIG_ARCH_PXA_CORGI),y)
+ devinfo-objs-m += sharpsl_deviceinfo.o
+ endif
++ ifeq ($(CONFIG_ARCH_PXA_TOSA),y)
++ devinfo-objs-m += sharpsl_deviceinfo.o
++ endif
+ endif
+
+ obj-m += registers.o
+diff -Nur linux_c860_org/arch/arm/mach-pxa/corgi.c linux/arch/arm/mach-pxa/corgi.c
+--- linux_c860_org/arch/arm/mach-pxa/corgi.c 2003-06-18 16:12:25.000000000 +0900
++++ linux/arch/arm/mach-pxa/corgi.c 2004-06-10 21:09:10.000000000 +0900
+@@ -298,7 +298,11 @@
+
+ static struct map_desc corgi_io_desc[] __initdata = {
+ /* virtual physical length domain r w c b */
++#if defined(CONFIG_CORGI_LCD_BUFF)
++ { 0xf1000000, 0x08000000, 0x01000000, DOMAIN_IO, 1, 1, 0, 1 }, /* LCDC (readable for Qt driver) */
++#else
+ { 0xf1000000, 0x08000000, 0x01000000, DOMAIN_IO, 1, 1, 0, 0 }, /* LCDC (readable for Qt driver) */
++#endif
+ { 0xf2000000, 0x10800000, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, /* SCOOP */
+ { 0xf2100000, 0x0C000000, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 }, /* Nand Flash */
+ { 0xef000000, 0x00000000, 0x00800000, DOMAIN_IO, 1, 1, 1, 0 }, /* Boot Flash */
+diff -Nur linux_c860_org/arch/arm/mach-pxa/pxa_nssp.c linux/arch/arm/mach-pxa/pxa_nssp.c
+--- linux_c860_org/arch/arm/mach-pxa/pxa_nssp.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/arch/arm/mach-pxa/pxa_nssp.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,57 @@
++/*
++ * linux/arch/arm/mach-pxa/pxa_nssp.c
++ *
++ * NSSP read routines for tosa (SHARP)
++ *
++ * (C) Copyright 2004 Lineo Solutions, Inc.
++ *
++ * May be copied or modified under the terms of the GNU General Public
++ * License. See linux/COPYING for more information.
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/interrupt.h>
++#include <linux/random.h>
++#include <linux/proc_fs.h>
++#include <linux/delay.h>
++#include <linux/init.h>
++#include <asm/hardware.h>
++
++static spinlock_t pxa_nssp_lock = SPIN_LOCK_UNLOCKED;
++static unsigned long flag;
++static unsigned char initialized = 0;
++
++void pxa_nssp_output(unsigned char reg, unsigned char data)
++{
++ int i;
++ unsigned char dat = ( ((reg << 5) & 0xe0) | (data & 0x1f) );
++
++ spin_lock_irqsave(&pxa_nssp_lock, flag);
++
++ GPCR(GPIO_TG_SPI_SCLK) |= GPIO_bit(GPIO_TG_SPI_SCLK);
++ GPCR(GPIO_TG_SPI_CS) |= GPIO_bit(GPIO_TG_SPI_CS);
++ for(i = 0; i < 8; i++) {
++ if( !(dat & (1<<(7-i))) )
++ GPCR(GPIO_TG_SPI_MOSI) |= GPIO_bit(GPIO_TG_SPI_MOSI);
++ else
++ GPSR(GPIO_TG_SPI_MOSI) |= GPIO_bit(GPIO_TG_SPI_MOSI);
++ GPSR(GPIO_TG_SPI_SCLK) |= GPIO_bit(GPIO_TG_SPI_SCLK);
++ GPCR(GPIO_TG_SPI_SCLK) |= GPIO_bit(GPIO_TG_SPI_SCLK);
++ }
++ GPSR(GPIO_TG_SPI_CS) |= GPIO_bit(GPIO_TG_SPI_CS);
++ spin_unlock_irqrestore(&pxa_nssp_lock, flag);
++}
++
++void pxa_nssp_init(void)
++{
++ /* initialize SSP */
++ set_GPIO_mode(GPIO_TG_SPI_SCLK | GPIO_OUT);
++ set_GPIO_mode(GPIO_TG_SPI_CS | GPIO_OUT);
++ set_GPIO_mode(GPIO_TG_SPI_MOSI | GPIO_OUT);
++ GPSR(GPIO_TG_SPI_CS) |= GPIO_bit(GPIO_TG_SPI_CS);
++ GPCR(GPIO_TG_SPI_SCLK) |= GPIO_bit(GPIO_TG_SPI_SCLK);
++}
+diff -Nur linux_c860_org/arch/arm/mach-pxa/registers.c linux/arch/arm/mach-pxa/registers.c
+--- linux_c860_org/arch/arm/mach-pxa/registers.c 2002-09-18 18:42:27.000000000 +0900
++++ linux/arch/arm/mach-pxa/registers.c 2004-06-10 21:09:10.000000000 +0900
+@@ -5,7 +5,10 @@
+ This code is based on SA1110's register moniter
+
+ ****************************************************************************/
+-
++/*
++ * ChangeLog:
++ * 1-Nov-2003 Sharp Corporation for Tosa
++ */
+ /****************************************************************************
+
+ registers.c: Register monitor of SA-1110
+@@ -66,6 +69,7 @@
+ #include <linux/ioport.h>
+ #include <asm/uaccess.h> /* to copy to/from userspace */
+ #include <asm/arch/hardware.h>
++#include <asm/io.h>
+
+ //typedef unsigned long Word;
+
+@@ -74,6 +78,10 @@
+ #define USE_LOCOMO
+ #elif defined(CONFIG_ARCH_PXA_CORGI)
+ #define USE_SCOOP
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++#define USE_SCOOP
++#define USE_SCOOP2
++#define USE_KUROHYO
+ #endif
+
+ #define MODULE_NAME "regmon"
+@@ -83,6 +91,12 @@
+ #ifdef USE_SCOOP
+ #define SCOOP_DIRNAME "scoop"
+ #endif
++#ifdef USE_SCOOP2
++#define SCOOP2_DIRNAME "scoop2"
++#endif
++#ifdef USE_KUROHYO
++#define KUROHYO_DIRNAME "kurohyo"
++#endif
+ #ifdef USE_LOCOMO
+ #define LOCOMO_DIRNAME "locomo"
+ #endif
+@@ -183,6 +197,223 @@
+ SCP_REG(current_reg->phyaddr)=newRegValue;
+ return (count+endp-buffer);
+ }
++#endif
++#ifdef USE_SCOOP2
++static ssize_t proc_scoop2_read_reg(struct file * file, char * buf,
++ size_t nbytes, loff_t *ppos);
++static ssize_t proc_scoop2_write_reg(struct file * file, const char * buffer,
++ size_t count, loff_t *ppos);
++
++
++static struct file_operations proc_scoop2_reg_operations = {
++ read: proc_scoop2_read_reg,
++ write: proc_scoop2_write_reg
++};
++
++typedef struct scoop2_reg_entry {
++ u32 phyaddr;
++ char* name;
++ char* description;
++ unsigned short low_ino;
++} scoop2_reg_entry_t;
++
++
++static scoop2_reg_entry_t scoop2_regs[] =
++{
++/* { phyaddr, name, description } */
++ { 0x00, "MCR", " " },
++ { 0x04, "CDR", " " },
++ { 0x08, "CSR", " " },
++ { 0x0C, "CPR", " " },
++ { 0x10, "CCR", " " },
++ { 0x14, "IRR", " " },
++ { 0x18, "IMR", " " },
++ { 0x1C, "ISR", " " },
++ { 0x20, "GPCR", " " },
++ { 0x24, "GPWR", " " },
++ { 0x28, "GPRR", " " }
++};
++
++
++#define NUM_OF_SCOOP2_REG_ENTRY (sizeof(scoop2_regs)/sizeof(scoop2_reg_entry_t))
++
++
++static int proc_scoop2_read_reg(struct file * file, char * buf,
++ size_t nbytes, loff_t *ppos)
++{
++ int i_ino = (file->f_dentry->d_inode)->i_ino;
++ char outputbuf[15];
++ int count;
++ int i;
++ scoop2_reg_entry_t* current_reg=NULL;
++ if (*ppos>0) /* Assume reading completed in previous read*/
++ return 0;
++ for (i=0;i<NUM_OF_SCOOP2_REG_ENTRY;i++) {
++ if (scoop2_regs[i].low_ino==i_ino) {
++ current_reg = &scoop2_regs[i];
++ break;
++ }
++ }
++ if (current_reg==NULL)
++ return -EINVAL;
++
++ count = sprintf(outputbuf, "0x%04X\n",SCP_JC_REG(current_reg->phyaddr));
++ *ppos+=count;
++ if (count>nbytes) /* Assume output can be read at one time */
++ return -EINVAL;
++ if (copy_to_user(buf, outputbuf, count))
++ return -EFAULT;
++ return count;
++}
++
++static ssize_t proc_scoop2_write_reg(struct file * file, const char * buffer,
++ size_t count, loff_t *ppos)
++{
++ int i_ino = (file->f_dentry->d_inode)->i_ino;
++ scoop2_reg_entry_t* current_reg=NULL;
++ int i;
++ unsigned long newRegValue;
++ char *endp;
++
++ for (i=0;i<NUM_OF_SCOOP2_REG_ENTRY;i++) {
++ if (scoop2_regs[i].low_ino==i_ino) {
++ current_reg = &scoop2_regs[i];
++ break;
++ }
++ }
++ if (current_reg==NULL)
++ return -EINVAL;
++
++ newRegValue = simple_strtoul(buffer,&endp,0);
++ SCP_JC_REG(current_reg->phyaddr)=newRegValue;
++ return (count+endp-buffer);
++}
++
++#endif
++#ifdef USE_KUROHYO
++static ssize_t proc_kurohyo_read_reg(struct file * file, char * buf,
++ size_t nbytes, loff_t *ppos);
++static ssize_t proc_kurohyo_write_reg(struct file * file, const char * buffer,
++ size_t count, loff_t *ppos);
++
++
++static struct file_operations proc_kurohyo_reg_operations = {
++ read: proc_kurohyo_read_reg,
++ write: proc_kurohyo_write_reg
++};
++
++typedef struct kurohyo_reg_entry {
++ u32 phyaddr;
++ char* name;
++ char* description;
++ unsigned short low_ino;
++} kurohyo_reg_entry_t;
++
++
++static kurohyo_reg_entry_t kurohyo_regs[] =
++{
++/* { phyaddr, name, description } */
++ { 0x000, "PINTST", " " },
++ { 0x008, "VHLIN", " " },
++ { 0x00A, "CMDADR_L", " " },
++ { 0x00C, "CMDADR_H", " " },
++ { 0x00E, "CMDFIF", " " },
++ { 0x010, "CMDFINT", " " },
++ { 0x012, "BINTMSK", " " },
++ { 0x014, "BINTST", " " },
++ { 0x016, "FIPT", " " },
++ { 0x018, "DMAST", " " },
++ { 0x01C, "COMD_L", " "},
++ { 0x01E, "COMD_H", " "},
++ { 0x022, "FIFOR", " "},
++ { 0x024, "COMSMD", " "},
++
++ { 0x100, "PLCNT", " " },
++ { 0x102, "PLCST", " " },
++ { 0x108, "PLIST", " " },
++ { 0x10A, "PLIEN", " " },
++ { 0x10C, "PLSEN", " " },
++ { 0x122, "PLDSA_L", " " },
++ { 0x124, "PLDSA_H", " " },
++ { 0x12A, "PLPIT_L", " " },
++ { 0x12C, "PLPIT_H", " " },
++ { 0x12E, "PLGMD", " " },
++ { 0x140, "PLHT", " " },
++ { 0x142, "PLHDS", " " },
++ { 0x144, "PLHSS", " " },
++ { 0x146, "PLHSE", " " },
++ { 0x14C, "PLHPX", " " },
++ { 0x150, "PLVT", " " },
++ { 0x152, "PLVDS", " " },
++ { 0x154, "PLVSS", " " },
++ { 0x156, "PLVSE", " " },
++ { 0x160, "PLCLN", " " },
++ { 0x162, "PLILN", " " },
++ { 0x164, "PLMOD", " " },
++ { 0x166, "MISC", " " },
++ { 0x16A, "PWHSP", " " },
++ { 0x16C, "PWVDS", " " },
++ { 0x16E, "PWVDE", " " },
++ { 0x170, "PWVSP", " " },
++ { 0x180, "VWADR_L", " " },
++ { 0x182, "VWADR_H", " " },
++};
++
++
++#define NUM_OF_KUROHYO_REG_ENTRY (sizeof(kurohyo_regs)/sizeof(kurohyo_reg_entry_t))
++
++#define KUROHYO_LCD_INNER_ADDRESS (TC6393_SYS_BASE+TC6393_GC_INTERNAL_REG_BASE)
++
++static int proc_kurohyo_read_reg(struct file * file, char * buf,
++ size_t nbytes, loff_t *ppos)
++{
++ int i_ino = (file->f_dentry->d_inode)->i_ino;
++ char outputbuf[15];
++ int count;
++ int i;
++ kurohyo_reg_entry_t* current_reg=NULL;
++ if (*ppos>0) /* Assume reading completed in previous read*/
++ return 0;
++ for (i=0;i<NUM_OF_KUROHYO_REG_ENTRY;i++) {
++ if (kurohyo_regs[i].low_ino==i_ino) {
++ current_reg = &kurohyo_regs[i];
++ break;
++ }
++ }
++ if (current_reg==NULL)
++ return -EINVAL;
++
++ count = sprintf(outputbuf, "0x%04X\n",readw(KUROHYO_LCD_INNER_ADDRESS + current_reg->phyaddr));
++ *ppos+=count;
++ if (count>nbytes) /* Assume output can be read at one time */
++ return -EINVAL;
++ if (copy_to_user(buf, outputbuf, count))
++ return -EFAULT;
++ return count;
++}
++
++static ssize_t proc_kurohyo_write_reg(struct file * file, const char * buffer,
++ size_t count, loff_t *ppos)
++{
++ int i_ino = (file->f_dentry->d_inode)->i_ino;
++ kurohyo_reg_entry_t* current_reg=NULL;
++ int i;
++ unsigned long newRegValue;
++ char *endp;
++
++ for (i=0;i<NUM_OF_KUROHYO_REG_ENTRY;i++) {
++ if (kurohyo_regs[i].low_ino==i_ino) {
++ current_reg = &kurohyo_regs[i];
++ break;
++ }
++ }
++ if (current_reg==NULL)
++ return -EINVAL;
++
++ newRegValue = simple_strtoul(buffer,&endp,0);
++ writew(newRegValue,KUROHYO_LCD_INNER_ADDRESS + current_reg->phyaddr);
++ return (count+endp-buffer);
++}
+
+ #endif
+
+@@ -814,6 +1045,14 @@
+ static struct proc_dir_entry *scoop_regdir;
+ static struct proc_dir_entry *scoopdir;
+ #endif
++#ifdef USE_SCOOP2
++static struct proc_dir_entry *scoop2_regdir;
++static struct proc_dir_entry *scoop2dir;
++#endif
++#ifdef USE_KUROHYO
++static struct proc_dir_entry *kurohyo_regdir;
++static struct proc_dir_entry *kurohyodir;
++#endif
+
+ #ifdef USE_LOCOMO
+ static struct proc_dir_entry *locomo_regdir;
+@@ -879,6 +1118,62 @@
+ }
+ }
+ #endif
++#ifdef USE_SCOOP2
++ scoop2dir = proc_mkdir(SCOOP2_DIRNAME, &proc_root);
++ if (scoop2dir == NULL) {
++ printk(KERN_ERR MODULE_NAME": can't create /proc/" SCOOP2_DIRNAME "\n");
++ return(-ENOMEM);
++ }
++
++ scoop2_regdir = proc_mkdir(REG_DIRNAME, scoop2dir);
++ if (scoop2_regdir == NULL) {
++ printk(KERN_ERR MODULE_NAME": can't create /proc/" SCOOP2_DIRNAME "/" REG_DIRNAME "\n");
++ return(-ENOMEM);
++ }
++
++ for(i=0;i<NUM_OF_SCOOP2_REG_ENTRY;i++) {
++ entry = create_proc_entry(scoop2_regs[i].name,
++ S_IWUSR |S_IRUSR | S_IRGRP | S_IROTH,
++ scoop2_regdir);
++ if(entry) {
++ scoop2_regs[i].low_ino = entry->low_ino;
++ entry->proc_fops = &proc_scoop2_reg_operations;
++ } else {
++ printk( KERN_ERR MODULE_NAME
++ ": can't create /proc/" REG_DIRNAME
++ "/%s\n", scoop2_regs[i].name);
++ return(-ENOMEM);
++ }
++ }
++#endif
++#ifdef USE_KUROHYO
++ kurohyodir = proc_mkdir(KUROHYO_DIRNAME, &proc_root);
++ if (kurohyodir == NULL) {
++ printk(KERN_ERR MODULE_NAME": can't create /proc/" KUROHYO_DIRNAME "\n");
++ return(-ENOMEM);
++ }
++
++ kurohyo_regdir = proc_mkdir(REG_DIRNAME, kurohyodir);
++ if (kurohyo_regdir == NULL) {
++ printk(KERN_ERR MODULE_NAME": can't create /proc/" KUROHYO_DIRNAME "/" REG_DIRNAME "\n");
++ return(-ENOMEM);
++ }
++
++ for(i=0;i<NUM_OF_KUROHYO_REG_ENTRY;i++) {
++ entry = create_proc_entry(kurohyo_regs[i].name,
++ S_IWUSR |S_IRUSR | S_IRGRP | S_IROTH,
++ kurohyo_regdir);
++ if(entry) {
++ kurohyo_regs[i].low_ino = entry->low_ino;
++ entry->proc_fops = &proc_kurohyo_reg_operations;
++ } else {
++ printk( KERN_ERR MODULE_NAME
++ ": can't create /proc/" REG_DIRNAME
++ "/%s\n", kurohyo_regs[i].name);
++ return(-ENOMEM);
++ }
++ }
++#endif
+
+ #ifdef USE_LOCOMO
+ locomodir = proc_mkdir(LOCOMO_DIRNAME, &proc_root);
+@@ -925,6 +1220,18 @@
+ remove_proc_entry(REG_DIRNAME, scoopdir);
+ remove_proc_entry(SCOOP_DIRNAME, &proc_root);
+ #endif
++#ifdef USE_SCOOP2
++ for(i=0;i<NUM_OF_SCOOP2_REG_ENTRY;i++)
++ remove_proc_entry(scoop2_regs[i].name,scoop2_regdir);
++ remove_proc_entry(REG_DIRNAME, scoop2dir);
++ remove_proc_entry(SCOOP2_DIRNAME, &proc_root);
++#endif
++#ifdef USE_KUROHYO
++ for(i=0;i<NUM_OF_KUROHYO_REG_ENTRY;i++)
++ remove_proc_entry(kurohyo_regs[i].name,kurohyo_regdir);
++ remove_proc_entry(REG_DIRNAME, kurohyodir);
++ remove_proc_entry(KUROHYO_DIRNAME, &proc_root);
++#endif
+ #ifdef USE_LOCOMO
+ for(i=0;i<NUM_OF_LOCOMO_REG_ENTRY;i++)
+ remove_proc_entry(locomo_regs[i].name,locomo_regdir);
+diff -Nur linux_c860_org/arch/arm/mach-pxa/sharpsl_apm.c linux/arch/arm/mach-pxa/sharpsl_apm.c
+--- linux_c860_org/arch/arm/mach-pxa/sharpsl_apm.c 2003-06-18 16:12:25.000000000 +0900
++++ linux/arch/arm/mach-pxa/sharpsl_apm.c 2004-06-10 21:09:10.000000000 +0900
+@@ -49,6 +49,8 @@
+ * 12-Dec-2002 Sharp Corporation for Poodle and Corgi
+ * 16-Jan-2003 SHARP sleep_on -> interruptible_sleep_on
+ * 13-Mar-2003 SHARP for PXA255
++ * 29-Jan-2004 Sharp Corporation for Tosa
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+ #include <linux/config.h>
+@@ -72,6 +74,12 @@
+ #include <asm/system.h>
+ #include <asm/hardware.h>
+
++extern int errno;
++
++// unistd.h is included for the configuration ioctl stuff
++#define __KERNEL_SYSCALLS__ 1
++#include <asm/unistd.h>
++
+ #ifdef CONFIG_ARCH_SHARP_SL
+ #include <asm/irq.h>
+ #include <asm/arch/irqs.h>
+@@ -91,7 +99,7 @@
+ #define KBDOWN (0)
+
+ #ifdef CONFIG_APM_CPU_IDLE
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ #define SHARPSL_NEW_IDLE
+ #endif
+ #endif
+@@ -99,9 +107,17 @@
+ #if defined(CONFIG_SABINAL_DISCOVERY)
+ extern int discovery_get_main_battery(void);
+ #define get_main_battery discovery_get_main_battery
+-#elif defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#elif defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
++
+ extern int sharpsl_get_main_battery(void);
+ #define get_main_battery sharpsl_get_main_battery
++
++#if defined(CONFIG_ARCH_PXA_TOSA)
++extern int sharpsl_jacket_battery;
++extern int sharpsl_jacket_exist;
++extern int sharpsl_get_cardslot_error(void);
++#endif
++
+ #ifdef SHARPSL_NEW_IDLE
+ static int chg_freq_mode = 0;
+ #endif
+@@ -119,17 +135,25 @@
+ extern int HWR_flag;
+ #endif
+
++#if defined(CONFIG_SL_CCCR_CHANGE)
++extern unsigned int cccr_clkparam;
++#endif
++
+ #if defined(CONFIG_SABINAL_DISCOVERY)
+ #define SHARPSL_AC_LINE_STATUS (( ASIC3_GPIO_PSTS_D & AC_IN )? APM_AC_OFFLINE : APM_AC_ONLINE)
+ #define BACKPACK_IN_DETECT() ( ASIC3_GPIO_PSTS_D & BACKPACK_DETECT ) /* 0: exist , 1: not in */
+ #else
+ #define SHARPSL_BATTERY_OK (( GPLR(GPIO_MAIN_BAT_LOW) & GPIO_bit(GPIO_MAIN_BAT_LOW) ) ? 1 : 0) /* 1: OK / 0: FATAL */
++#if defined(CONFIG_ARCH_PXA_TOSA)
++#define SHARPSL_AC_LINE_STATUS ((GPLR(GPIO_AC_IN) & GPIO_bit(GPIO_AC_IN)) ? APM_AC_OFFLINE : APM_AC_ONLINE)
++#else
+ #define SHARPSL_AC_LINE_STATUS ((GPLR(GPIO_AC_IN) & GPIO_bit(GPIO_AC_IN)) ? APM_AC_ONLINE : APM_AC_OFFLINE)
+ #endif
++#endif
+
+
+ /// ioctl
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ static u32 apm_event_mask = (APM_EVT_POWER_BUTTON);
+ #else
+ static u32 apm_event_mask = (APM_EVT_POWER_BUTTON | APM_EVT_BATTERY_STATUS);
+@@ -151,6 +175,7 @@
+
+ #endif
+
++#define DEBUG
+ #ifdef DEBUG
+ #define DPRINTK(x, args...) printk(__FUNCTION__ ": " x,##args)
+ #else
+@@ -339,6 +364,7 @@
+ };
+ #define ERROR_COUNT (sizeof(error_table)/sizeof(lookup_t))
+
++#define APP_NAME_LIST "/etc/suspend.lst"
+ /*
+ * Function
+ */
+@@ -347,6 +373,8 @@
+ static int set_power_state(u_short what, u_short state);
+ #ifndef CONFIG_SABINAL_DISCOVERY
+ extern int sharpsl_main_battery;
++extern int sharpsl_backup_battery;
++extern int sharpsl_bu_battery;
+ #endif
+ static int apm_get_power_status(u_char *ac_line_status,
+ u_char *battery_status,
+@@ -440,7 +468,8 @@
+
+ #if defined(CONFIG_ARCH_PXA_POODLE)
+ if (irq == IRQ_GPIO_ON_KEY) { /* suspend */
+- //DPRINTK("irq=%d count=%d sharpsl_suspend_request%d\n",irq, count, sharpsl_suspend_request);
++
++ DPRINTK("irq=%d count=%d sharpsl_suspend_request%d\n",irq, count, sharpsl_suspend_request);
+ if ( GPLR(GPIO_ON_KEY) & GPIO_bit(GPIO_ON_KEY) ) {
+ /* release */
+ count = 0;
+@@ -623,24 +652,75 @@
+ struct task_struct* p = NULL;
+ struct task_struct* tsk = current;
+
++ int fd,x;
++ mm_segment_t old_fs = get_fs ();
++ char line_buffer[256];
++
+ if (! spin_trylock(&lock))
+ return;
++
++ // Try opening the send sig application name list
++ set_fs(KERNEL_DS);
++// printk("open sig file\n");
++ fd = open(APP_NAME_LIST, O_RDONLY, 0);
++ set_fs(old_fs);
+
+ /* send signal to all procs except for kernel-threads */
+ read_lock(&tasklist_lock);
+- for_each_task(p) {
+- struct siginfo si;
+
+- if (p->pid == 1 || p->pid == tsk->pid || is_kernel_thread(p))
+- continue;
++ if(fd < 0){
++ for_each_task(p) {
++ struct siginfo si;
++
++ if (p->pid == 1 || p->pid == tsk->pid || is_kernel_thread(p))
++ continue;
++ if (!strcmp(p->comm,"cardmgr")) { //Send sig to cardmgr
++// printk ("Send SIG to application\n");
++ si.si_signo = signo;
++ si.si_errno = 0;
++ si.si_code = SI_KERNEL;
++ si.si_pid = tsk->pid;
++ si.si_uid = tsk->uid;
++ send_sig_info(signo, &si, p);
++ }
++ }
++
++ }else {
++ for(;;){
++ memset(line_buffer, '\0', 256);
++ set_fs(KERNEL_DS);
++ for (x = 0; x < 256; x++) {
++ if (!read(fd, &line_buffer[x], 1))
++ goto sig_send_done;
++ if (line_buffer[x] == '\n' || line_buffer[x] == '\r')
++ break;
++ }
++ set_fs(old_fs);
++
++ for_each_task(p) {
++ struct siginfo si;
++
++ if (p->pid == 1 || p->pid == tsk->pid || is_kernel_thread(p))
++ continue;
++ if (!strncmp(p->comm,line_buffer,strlen(p->comm))) { //Send sig to cardmgr
++// printk ("Send SIG to application\n");
++ si.si_signo = signo;
++ si.si_errno = 0;
++ si.si_code = SI_KERNEL;
++ si.si_pid = tsk->pid;
++ si.si_uid = tsk->uid;
++ send_sig_info(signo, &si, p);
++ }
++ }
++ }
+
+- si.si_signo = signo;
+- si.si_errno = 0;
+- si.si_code = SI_KERNEL;
+- si.si_pid = tsk->pid;
+- si.si_uid = tsk->uid;
+- send_sig_info(signo, &si, p);
++ sig_send_done:
++// printk("close sig\n");
++ close(fd);
+ }
++
++
++
+ read_unlock(&tasklist_lock);
+
+ if (signo == SIGSTOP) {
+@@ -652,16 +732,58 @@
+ schedule();
+ set_current_state(state);
+
++ set_fs(KERNEL_DS);
++ fd = open(APP_NAME_LIST, O_RDONLY, 0);
++// printk("open sigstop\n");
++ set_fs(old_fs);
++
+ read_lock(&tasklist_lock);
+- for_each_task(p) {
+- if (p->pid == 1 || p->pid == tsk->pid || is_kernel_thread(p))
+- continue;
+
+- if (p->state != TASK_STOPPED) {
+- read_unlock(&tasklist_lock);
+- goto retry;
++ if(fd < 0){
++ for_each_task(p) {
++ if (p->pid == 1 || p->pid == tsk->pid || is_kernel_thread(p))
++ continue;
++ if (!strcmp(p->comm,"cardmgr")) {
++// printk ("Check application stopped\n");
++
++ if (p->state != TASK_STOPPED) {
++ read_unlock(&tasklist_lock);
++ goto retry;
++ }
++ }
+ }
++ }else {
++
++ for(;;){
++ memset(line_buffer, '\0', 256);
++ old_fs = get_fs();
++ set_fs(KERNEL_DS);
++ for (x = 0; x < 256; x++) {
++ if (!read(fd, &line_buffer[x], 1))
++ goto sig_stop_done;
++ if (line_buffer[x] == '\n' || line_buffer[x] == '\r')
++ break;
++ }
++ set_fs(old_fs);
++
++ for_each_task(p) {
++ if (p->pid == 1 || p->pid == tsk->pid || is_kernel_thread(p))
++ continue;
++ if (!strncmp(p->comm,line_buffer,strlen(p->comm))) {
++// printk ("Check application stopped\n");
++
++ if (p->state != TASK_STOPPED) {
++ read_unlock(&tasklist_lock);
++ goto retry;
++ }
++ }
++ }
++ }
++ sig_stop_done:
++// printk("close sigstop\n");
++ close(fd);
+ }
++
+ read_unlock(&tasklist_lock);
+ }
+
+@@ -711,7 +833,11 @@
+ }
+
+ static spinlock_t locklockFCS = SPIN_LOCK_UNLOCKED;
++#if 0 // for debug
++static unsigned long lockFCS = 0x80000000;
++#else
+ static unsigned long lockFCS = 0;
++#endif
+ static int change_lockFCS = 0;
+ static spinlock_t lock_power_mode = SPIN_LOCK_UNLOCKED;
+ static unsigned long power_mode = 0;
+@@ -986,6 +1112,49 @@
+
+ EXPORT_SYMBOL(lock_FCS);
+
++#if defined(CONFIG_SL_CCCR_CHANGE)
++static ssize_t cccr_change_read_params(struct file *file, char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ char outputbuf[32];
++ int count;
++
++ if (*ppos>0) /* Assume reading completed in previous read*/
++ return 0;
++ count = sprintf(outputbuf, "0x%08X\n", (unsigned int)cccr_clkparam);
++ count++;
++ *ppos += count;
++ if (count>nbytes) /* Assume output can be read at one time */
++ return -EINVAL;
++ if (copy_to_user(buf, outputbuf, count+1))
++ return -EFAULT;
++ return count;
++}
++
++static ssize_t cccr_change_write_params(struct file *file, const char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ unsigned int param=0;
++
++ sscanf(buf,"%x",&param);
++ if (param) {
++ printk("Change CCCR = %x.\n",param);
++ cccr_clkparam = param;
++ sharpsl_chg_freq = param;
++ cpu_xscale_sl_change_speed_num();
++ cccr_reg = CCCR;
++ printk("Changed CCCR = %x.\n",cccr_reg);
++
++ }
++ return nbytes;
++}
++
++static struct file_operations proc_cccr_change_params_operations = {
++ read: cccr_change_read_params,
++ write: cccr_change_write_params,
++};
++#endif
++
+ #ifdef CONFIG_APM_CPU_IDLE
+ #ifdef SHARPSL_NEW_IDLE
+ static int save_icmr;
+@@ -1021,21 +1190,35 @@
+ if ( !chg_freq_mode ) {
+ //LCM_LPT1 = 0x0080;
+ // if (!lockFCS || ((lockFCS == LOCK_FCS_FFUART) && (!(FFMSR & MSR_DSR)))) {
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ if (!lockFCS) {
++#else
+ #if defined(CONFIG_ARCH_SHARP_SL_J)
+ if (!(lockFCS & ~LOCK_FCS_FFUART)) {
+ #else
+ if (!lockFCS) {
+ #endif
++#endif
+ #if defined(CONFIG_ARCH_PXA_POODLE)
+ while(1) {
+ if ( !( LCCR0 & 0x1 ) || ( GPLR(74) & GPIO_bit(74)) ) break;
+ }
+ #endif
++
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ CKEN &= ~CKEN2_AC97;
++#endif
++
+ if ( cccr_reg == 0x145 ) {
+ cpu_xscale_sl_change_speed_121();
+ } else {
+ cpu_xscale_change_speed_121();
+ }
++
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ CKEN |= CKEN2_AC97;
++#endif
++
+ }
+ }
+ chg_freq_mode = 1;
+@@ -1100,22 +1283,46 @@
+ }
+ #endif
+ MDREFR &= ~MDREFR_APD;
+-#if defined(CONFIG_ARCH_PXA_SHEPHERD)
++
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ CKEN &= ~CKEN2_AC97;
++#endif
++
++#if defined(CONFIG_ARCH_PXA_SHEPHERD) || defined(CONFIG_ARCH_PXA_TOSA)
+ if ( cccr_reg == 0x161 ) {
+ cpu_xscale_sl_change_speed_161();
+ }
+ else if ( cccr_reg == 0x145 ) {
+ cpu_xscale_sl_change_speed_145();
++#if defined(CONFIG_SL_CCCR_CHANGE)
++ } else {
++ cccr_clkparam = (unsigned int)cccr_reg;
++ cpu_xscale_sl_change_speed_num();
++ }
++#else
+ } else {
+ cpu_xscale_change_speed_241();
+ }
++#endif
+ #else
+ if ( cccr_reg == 0x145 ) {
+ cpu_xscale_sl_change_speed_145();
++#if defined(CONFIG_SL_CCCR_CHANGE)
++ } else {
++ cccr_clkparam = (unsigned int)cccr_reg;
++ cpu_xscale_sl_change_speed_num();
++ }
++#else
+ } else {
+ cpu_xscale_change_speed_241();
+ }
+ #endif
++#endif
++
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ CKEN |= CKEN2_AC97;
++#endif
++
+ } else {
+ MDREFR &= ~MDREFR_APD;
+ }
+@@ -1281,6 +1488,11 @@
+ u_short *battery_life)
+ {
+
++#if defined(CONFIG_ARCH_PXA_TOSA)
++u_char dumm_status;
++u_short dumm_life;
++#endif
++
+ #ifdef CONFIG_SABINAL_DISCOVERY
+ discovery_apm_get_power_status(ac_line_status,
+ battery_status, battery_flag, battery_percentage, battery_life);
+@@ -1290,7 +1502,11 @@
+ #if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
+ sharpsl_apm_get_power_status(ac_line_status,
+ battery_status, battery_flag, battery_percentage, battery_life);
+-
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++ sharpsl_apm_get_power_status(ac_line_status,
++ battery_status,&dumm_status,&dumm_status,battery_flag,
++ battery_percentage,&dumm_status,&dumm_status,
++ battery_life,&dumm_life,&dumm_life);
+ #endif
+ return APM_SUCCESS;
+ }
+@@ -1302,12 +1518,15 @@
+ u_short *battery_life)
+ {
+
+-#ifdef CONFIG_SABINAL_DISCOVERY
+-
++#if defined(CONFIG_SABINAL_DISCOVERY) || defined(CONFIG_ARCH_PXA_TOSA)
++#if defined(CONFIG_SABINAL_DISCOVERY)
+ discovery_apm_get_bp_status(ac_line_status,
+ battery_status, battery_flag, battery_percentage, battery_life);
+-
++#else
++ sharpsl_apm_get_bp_status(ac_line_status,
++ battery_status, battery_flag, battery_percentage, battery_life);
+ #endif // CONFIG_SABINAL_DISCOVERY
++#endif
+ return APM_SUCCESS;
+ }
+
+@@ -1475,6 +1694,9 @@
+ is_goto_suspend = 1;
+ #ifdef CONFIG_PCMCIA
+ pcmcia_set_detect_interrupt(0, 0, 1);
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ pcmcia_set_detect_interrupt(1, 0, 1);
++#endif
+ #endif
+ send_sig_to_all_procs(SIGSTOP);
+ /* map all suspends to ACPI D3 */
+@@ -1498,6 +1720,9 @@
+ resume_handling = 1;
+ #ifdef CONFIG_PCMCIA
+ pcmcia_set_detect_interrupt(0, 1, 0);
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ pcmcia_set_detect_interrupt(1, 1, 0);
++#endif
+ #endif
+
+ #ifdef CONFIG_SABINAL_DISCOVERY
+@@ -1533,6 +1758,9 @@
+ send_sig_to_all_procs(SIGCONT);
+ #ifdef CONFIG_PCMCIA
+ pcmcia_set_detect_interrupt(0, 1, 1);
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ pcmcia_set_detect_interrupt(1, 1, 1);
++#endif
+ #endif
+ resume_handling = 0;
+
+@@ -1681,8 +1909,9 @@
+ if (send_event(event)) {
+ queue_event(event, NULL);
+ waiting_for_resume = 1;
+- if (suspends_pending <= 0)
++ if (suspends_pending <= 0){
+ (void) suspend();
++ }
+ }
+ break;
+
+@@ -1833,7 +2062,7 @@
+
+ for (;;) {
+ /* Nothing to do, just sleep for the timeout */
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ timeout = 2*timeout;
+ if (timeout > APM_CHECK_TIMEOUT)
+ #endif
+@@ -1863,7 +2092,7 @@
+
+ for (;;) {
+ /* Nothing to do, just sleep for the timeout */
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ timeout = 2*timeout;
+ if (timeout > APM_CHECK_TIMEOUT)
+ #endif
+@@ -2012,6 +2241,7 @@
+ else
+ queue_event(APM_USER_SUSPEND, as);
+ if (suspends_pending <= 0) {
++
+ if (suspend() != APM_SUCCESS)
+ return -EIO;
+ } else {
+@@ -2040,7 +2270,7 @@
+ case APM_IOC_GET_REGISTER: {
+ } break;
+
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ case APM_IOC_RESET_PM: {
+ extern int sharpsl_main_bk_flag;
+ sharpsl_main_bk_flag = 1;
+@@ -2114,11 +2344,14 @@
+
+ case APM_IOC_BATTERY_BACK_CHK: {
+ //return collie_backup_battery;
++#ifdef CONFIG_ARCH_PXA_TOSA
++ return sharpsl_bu_battery;
++#endif
+ } break;
+
+ case APM_IOC_BATTERY_MAIN_CHK: {
+ #ifndef CONFIG_SABINAL_DISCOVERY
+- return sharpsl_main_battery;
++ return sharpsl_main_battery;
+ #endif
+ } break;
+
+@@ -2132,7 +2365,7 @@
+ return 1;
+ } break;
+
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ case APM_IOC_SFREQ: {
+ int freq;
+ get_user(freq, (unsigned int *)(arg));
+@@ -2179,11 +2412,11 @@
+ unsigned long flags;
+
+ sleeping = 1;
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ sharpsl_off_mode = 1;
+ #endif
+ save_flags_cli(flags);
+-#if defined(CONFIG_ARCH_PXA_SHEPHERD)
++#if defined(CONFIG_ARCH_PXA_SHEPHERD) || defined(CONFIG_ARCH_PXA_TOSA)
+ sharpsl_restart_nonstop();
+ #else
+ sharpsl_restart();
+@@ -2213,7 +2446,25 @@
+ apm_event_mask = arg;
+ return tmp;
+ }
++
++ case APM_IOC_GET_CARDSLOT_ERROR: {
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ return sharpsl_get_cardslot_error();
++#endif
++ }
++
++ case APM_IOC_BATTERY_JACKET_CHK: {
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ return sharpsl_jacket_battery;
++#endif
++ } break;
++
++ case APM_IOC_GET_JACKET_STATE:
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ return sharpsl_jacket_exist;
++#endif
+ #endif
++
+ default:
+ return -EINVAL;
+ }
+@@ -2236,8 +2487,9 @@
+ }
+ if (as->suspends_pending > 0) {
+ suspends_pending -= as->suspends_pending;
+- if (suspends_pending <= 0)
++ if (suspends_pending <= 0){
+ (void) suspend();
++ }
+ }
+ if (user_list == as)
+ user_list = as->next;
+@@ -2367,7 +2619,7 @@
+ }
+
+
+-#ifdef CONFIG_SABINAL_DISCOVERY
++#if defined(CONFIG_SABINAL_DISCOVERY) || defined(CONFIG_ARCH_PXA_TOSA)
+ static int apm_bp_get_info(char *buf, char **start, off_t fpos, int length)
+ {
+ char * p;
+@@ -2446,8 +2698,7 @@
+ }
+ #endif
+
+-
+-#ifdef CONFIG_SABINAL_DISCOVERY
++#if defined(CONFIG_SABINAL_DISCOVERY)
+ static int discovery_key_check(void *unused)
+ {
+
+@@ -2457,18 +2708,28 @@
+
+ while(1) {
+
+- interruptiblee_sleep_on(&fl_key);
++ interruptible_sleep_on(&fl_key);
+
+ while(1) {
+ interruptible_sleep_on_timeout((wait_queue_head_t*)&queue, KEY_TICK );
+- if ( (ASIC3_GPIO_PSTS_A & PWR_ON_KEY) != 0 ) { //key up
+- break;
+- }
++#ifdef CONFIG_SABINAL_DISCOVERY
++ if ( (ASIC3_GPIO_PSTS_A & PWR_ON_KEY) != 0 ) { //key up
++ break;
++ }
++#else
++ if ( GPLR(GPIO_ON_KEY) & GPIO_bit(GPIO_ON_KEY) ) {
++ break;
++ }
++#endif
+ if ( ( jiffies - on_press_time ) < 0 ) {
+
+ if ( ( jiffies + (0xffffffff - on_press_time) ) > FLONT_LIGHT_TOGGLE_TIME ) {
+ if ( apm_event_mask & APM_EVT_POWER_BUTTON ) {
++#ifdef CONFIG_SABINAL_DISCOVERY
+ discoveryfl_blank_power_button();
++#else
++ sharpslfl_blank_power_button();
++#endif
+ } else {
+ handle_scancode(SLKEY_FRONTLIGHT|KBDOWN , 1);
+ handle_scancode(SLKEY_FRONTLIGHT|KBUP , 0);
+@@ -2480,7 +2741,11 @@
+ if ( ( jiffies - on_press_time ) > FLONT_LIGHT_TOGGLE_TIME ) {
+
+ if ( apm_event_mask & APM_EVT_POWER_BUTTON ) {
++#ifdef CONFIG_SABINAL_DISCOVERY
+ discoveryfl_blank_power_button();
++#else
++ tosa_l_blank_power_button();
++#endif
+ } else {
+ handle_scancode(SLKEY_FRONTLIGHT|KBDOWN , 1);
+ handle_scancode(SLKEY_FRONTLIGHT|KBUP , 0);
+@@ -2623,6 +2888,7 @@
+ struct proc_dir_entry *apm_proc;
+ struct proc_dir_entry *lock_fcs_proc;
+ struct proc_dir_entry *power_mode_proc;
++ struct proc_dir_entry *cccr_change_proc;
+
+ apm_info.bios = apm_bios_info;
+ if (apm_info.bios.version == 0) {
+@@ -2640,19 +2906,35 @@
+ }
+
+
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
+-#if defined(CONFIG_ARCH_PXA_SHEPHERD)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
++#if defined(CONFIG_SL_CCCR242)
++ sharpsl_chg_freq = (unsigned int)0x00000242;
++ cccr_clkparam = (unsigned int)sharpsl_chg_freq;
++ cpu_xscale_sl_change_speed_num();
++#elif defined(CONFIG_SL_CCCR162)
++ sharpsl_chg_freq = (unsigned int)0x00000162;
++ cccr_clkparam = (unsigned int)sharpsl_chg_freq;
++ cpu_xscale_sl_change_speed_num();
++#else
++#if defined(CONFIG_ARCH_PXA_SHEPHERD) || defined(CONFIG_ARCH_PXA_TOSA)
+ sharpsl_chg_freq = (unsigned int)0x00000161;
++#if defined(CONFIG_SL_CCCR_CHANGE)
++ cccr_clkparam = (unsigned int)sharpsl_chg_freq;
++#endif
+ cpu_xscale_sl_change_speed_161();
+ #else
+ #if 1 // default 400MHz
+ sharpsl_chg_freq = (unsigned int)0x00000241;
++#if defined(CONFIG_SL_CCCR_CHANGE)
++ cccr_clkparam = (unsigned int)sharpsl_chg_freq;
++#endif
+ #else
+ cpu_xscale_sl_change_speed_145_without_lcd();
+ #endif
+ #endif
++#endif
+ cccr_reg = CCCR;
+- printk("FCS : CCCR = %x\n",cccr_reg);
++// printk("FCS : CCCR = %x\n",cccr_reg);
+ #endif
+
+ /*
+@@ -2732,11 +3014,19 @@
+ power_mode_proc->proc_fops = &proc_power_mode_params_operations;
+ }
+
++#if defined(CONFIG_SL_CCCR_CHANGE)
++ cccr_change_proc = create_proc_entry("cccr_change", 0, NULL);
++ if (cccr_change_proc) {
++ cccr_change_proc->proc_fops = &proc_cccr_change_params_operations;
++ }
++#endif
++
+ kernel_thread(apm_thread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
+
+-#ifdef CONFIG_SABINAL_DISCOVERY
++#if defined(CONFIG_SABINAL_DISCOVERY) || defined(CONFIG_ARCH_PXA_TOSA)
++#if defined(CONFIG_SABINAL_DISCOVERY)
+ kernel_thread( discovery_key_check, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
+-
++#endif
+ {
+ struct proc_dir_entry *apm_proc_backpack;
+
+diff -Nur linux_c860_org/arch/arm/mach-pxa/sharpsl_deviceinfo.c linux/arch/arm/mach-pxa/sharpsl_deviceinfo.c
+--- linux_c860_org/arch/arm/mach-pxa/sharpsl_deviceinfo.c 2002-11-14 19:27:18.000000000 +0900
++++ linux/arch/arm/mach-pxa/sharpsl_deviceinfo.c 2004-06-10 21:09:10.000000000 +0900
+@@ -14,6 +14,10 @@
+ * 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
++ *
++ * ChangeLog:
++ * 1-Nov-2003 Sharp Corporation for Tosa
++ *
+ */
+
+ #include <linux/config.h>
+@@ -63,7 +67,10 @@
+ {"serial", "device individual id"},
+ {"checksum", "ROM checksum"},
+ {"bootstr", "boot string"},
+- {"hardno", "hardware number"}
++ {"hardno", "hardware number"},
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ {"equipment", "built-in equipment"},
++#endif
+ };
+
+ #define NUM_OF_DEVICEINFO_ENTRY (sizeof(deviceinfo)/sizeof(deviceinfo_entry_t))
+diff -Nur linux_c860_org/arch/arm/mach-pxa/sharpsl_param.c linux/arch/arm/mach-pxa/sharpsl_param.c
+--- linux_c860_org/arch/arm/mach-pxa/sharpsl_param.c 2002-10-23 14:09:20.000000000 +0900
++++ linux/arch/arm/mach-pxa/sharpsl_param.c 2004-06-10 21:09:10.000000000 +0900
+@@ -16,11 +16,12 @@
+ * GNU General Public License for more details.
+ *
+ * ChangeLog:
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ *
+ */
+ #include <linux/types.h>
+
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ #include <asm/arch/sharpsl_param.h>
+ #endif
+
+@@ -28,7 +29,7 @@
+ sharpsl_flash_param_info sharpsl_flash_param;
+
+
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ int sharpsl_get_comadj()
+ {
+ if ( sharpsl_flash_param.comadj_keyword == FLASH_COMADJ_MAJIC ) {
+@@ -39,7 +40,7 @@
+ }
+ #endif
+
+-#if defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ int sharpsl_get_phadadj()
+ {
+ if ( sharpsl_flash_param.phad_keyword == FLASH_PHAD_MAJIC ) {
+@@ -51,7 +52,7 @@
+ #endif
+
+
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ void sharpsl_get_param(void)
+ {
+ // get comadj
+diff -Nur linux_c860_org/arch/arm/mach-pxa/sharpsl_power.c linux/arch/arm/mach-pxa/sharpsl_power.c
+--- linux_c860_org/arch/arm/mach-pxa/sharpsl_power.c 2003-10-09 14:47:25.000000000 +0900
++++ linux/arch/arm/mach-pxa/sharpsl_power.c 2004-06-10 21:09:10.000000000 +0900
+@@ -35,6 +35,8 @@
+ * 16-Jan-2003 SHARP sleep_on -> interruptible_sleep_on
+ * 09-Apr-2003 SHARP for Shaphard (software reset)
+ * October-2003 SHARP for boxer
++ * 28-Nov-2003 Sharp Corporation for Tosa
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ *
+ */
+
+@@ -42,12 +44,17 @@
+ /*
+ * Debug macros
+ */
++//#define DEBUG 1
+ #ifdef DEBUG
+ # define DPRINTK(fmt, args...) printk("%s: " fmt, __FUNCTION__ , ## args)
+ #else
+ # define DPRINTK(fmt, args...)
+ #endif
+
++//#define WUPSRC_DEBUG
++#ifdef WUPSRC_DEBUG
++unsigned int debug1,debug2,debug3,debug4;
++#endif
+
+ #include <linux/config.h>
+ #include <linux/module.h>
+@@ -82,8 +89,15 @@
+ #include <asm/arch/keyboard_poodle.h>
+ #elif defined(CONFIG_ARCH_PXA_CORGI)
+ #include <asm/arch/keyboard_corgi.h>
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++#include <asm/arch/keyboard_tosa.h>
++#include <linux/ac97_codec.h>
+ #endif
+
++#ifdef LOGICAL_WAKEUP_SRC
++#include <asm/arch/sharpsl_wakeup.h>
++unsigned long logical_wakeup_src_mask = IDPM_WAKEUP_REC|IDPM_WAKEUP_SYNC;
++#endif
+ #include "sharpsl_param.h"
+
+
+@@ -116,9 +130,16 @@
+ extern int cpu_pxa_do_suspend(void);
+ extern unsigned short chkFatalBatt(void);
+ extern int sharpsl_off_charge_battery(void);
+-void pxa_ssp_init(void);
++extern int charge_status;
+
+ #if defined(CONFIG_ARCH_PXA_POODLE)
++void pxa_ssp_init(void);
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++void tosa_ac97_init(void);
++int pxa_ac97_get(struct ac97_codec **codec, unsigned char *ac97_on);
++static unsigned char ac97_on = 0;
++#endif
++#if defined(CONFIG_ARCH_PXA_POODLE)
+ #define PWER_RTC 0x80000000
+ #define R_WAKEUP_SRC (GPIO_bit(GPIO_AC_IN) | GPIO_bit(GPIO_CF_STSCHG) /*|
+ GPIO_bit(GPIO_CHRG_FULL) */ )
+@@ -139,6 +160,32 @@
+ GPIO_bit(GPIO_AC_IN) | GPIO_bit(GPIO_MAIN_BAT_LOW))
+ #define WAKEUP_SRC ( R_WAKEUP_SRC | F_WAKEUP_SRC | PWER_RTC )
+ #define WAKEUP_DEF_SRC ( WAKEUP_SRC );
++
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++/*
++<F_WAKEUP_SRC>
++GPIO_POWERON (0)
++GPIO_AC_IN (2)
++GPIO_RECORD_BTN (3)
++GPIO_SYNC (4)
++GPIO_USB_IN (5)
++GPIO_JACKET_DETECT (7)
++GPIO_nSD_DETECT (9)
++GPIO_nSD_INT (10)
++GPIO_BAT1_CRG (12)
++GPIO_CF_CD (13)
++GPIO_BAT0_CRG (14)
++*/
++#define PWER_RTC 0x80000000
++#define R_WAKEUP_SRC (GPIO_bit(GPIO_AC_IN) | GPIO_bit(GPIO_JACKET_DETECT))
++#define F_WAKEUP_SRC (GPIO_bit(GPIO_POWERON) | GPIO_bit(GPIO_RESET) | \
++ GPIO_bit(GPIO_AC_IN) | GPIO_bit(GPIO_RECORD_BTN) | \
++ GPIO_bit(GPIO_SYNC) | GPIO_bit(GPIO_USB_IN) | \
++ GPIO_bit(GPIO_JACKET_DETECT) )
++#define WAKEUP_SRC ( R_WAKEUP_SRC | F_WAKEUP_SRC | PWER_RTC )
++#define WAKEUP_DEF_SRC ( GPIO_bit(GPIO_POWERON) | GPIO_bit(GPIO_RESET) | \
++ GPIO_bit(GPIO_AC_IN) | GPIO_bit(GPIO_JACKET_DETECT) | \
++ GPIO_bit(GPIO_RECORD_BTN) | GPIO_bit(GPIO_SYNC) )
+ #endif
+
+ #if defined(CONFIG_SABINAL_DISCOVERY)
+@@ -148,6 +195,7 @@
+ u32 sharpsl_emergency_off = 0;
+ unsigned int sharpsl_chg_freq = 0x0145;
+ static DECLARE_WAIT_QUEUE_HEAD(wq_off);
++static DECLARE_WAIT_QUEUE_HEAD(key_off);
+ int sharpsl_off_mode = 0;
+ int sharpsl_off_state = 0;
+ int pass_charge_flag = 0;
+@@ -158,18 +206,26 @@
+ extern int corgi_wakeup_remocon_hook(void);
+ #endif
+
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ extern unsigned long cccr_reg;
+ static int sharpsl_alarm_flag;
+ #endif
+
++//@@#if defined(CONFIG_ARCH_PXA_TOSA)
++//@@extern int sharpsl_get_jacket_status(void);
++//@@#endif
++
++#if defined(CONFIG_SL_CCCR_CHANGE)
++extern unsigned int cccr_clkparam;
++#endif
++
+ void PrintParamTable(void);
+
+ #ifdef CONFIG_SABINAL_DISCOVERY
+ static u32 alarm_enable=0;
+ #endif
+
+-#ifdef CONFIG_ARCH_PXA_SHEPHERD
++#if defined(CONFIG_ARCH_PXA_SHEPHERD) || defined(CONFIG_ARCH_PXA_TOSA)
+ int sharpsl_restart(void)
+ {
+ return sharpsl_restart_core(0);
+@@ -183,16 +239,23 @@
+ int sharpsl_restart_core(int nonstop_flag)
+ {
+ int flag = 1;
+-
++#if !defined(CONFIG_ARCH_PXA_TOSA)
+ if (nonstop_flag) {
+ SCP_REG_GPWR |= SCP_LED_GREEN;
+ }
+ else {
+ SCP_REG_GPWR &= ~SCP_LED_GREEN;
+ }
+-
++#endif
+ RCSR = 0xf;
+
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ if( nonstop_flag && ((MSC0 & 0xffff0000) == 0x7ff00000) )
++ MSC0 = (MSC0 & 0xffff)|0x7ee00000;
++ // GPIO reset
++ set_GPIO_mode(GPIO_ON_RESET | GPIO_OUT);
++ GPCR(GPIO_ON_RESET) |= GPIO_bit(GPIO_ON_RESET);
++#else
+ OSMR3 = OSCR+0x100;
+ OWER = 0x01;
+ OIER |= 0x08;
+@@ -200,7 +263,7 @@
+ while(1) {
+ if ( flag++ > 0x20000000 ) break;
+ }
+-
++#endif
+ return 0;
+ }
+ #else
+@@ -258,17 +321,47 @@
+
+ #if !defined(CONFIG_SABINAL_DISCOVERY)
+
+-#if defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ int sharpsl_wakeup_check_charge(void)
+ {
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ unsigned int pfer;
++ unsigned int prer;
++
++ pfer = F_WAKEUP_SRC & apm_wakeup_src_mask & WAKEUP_SRC;
++ prer = R_WAKEUP_SRC & apm_wakeup_src_mask & WAKEUP_SRC;
++ //printk("pfer = %08x",pfer);
++ //printk("prer = %08x",prer);
++
++ pfer &= ~(F_WAKEUP_SRC & R_WAKEUP_SRC);
++ prer &= ~(F_WAKEUP_SRC & R_WAKEUP_SRC);
++ //printk("pfer = %08x",pfer);
++ //printk("prer = %08x",prer);
++
++ pfer = ~GPLR0 & pfer;
++ prer = GPLR0 & prer;
++ //printk("pfer = %08x",pfer);
++ //printk("prer = %08x",prer);
++
++ if(pfer != 0 || prer != 0){
++ apm_wakeup_factor = pfer | prer;
++ return 0; // wakeup
++ }
++
++ if ( ( ( RTAR - RCNR ) < 20 ) && ( RTSR & RTSR_ALE ) ) {
++ return -1; // go off.
++ }
++
++ return 1; // continue.
++#else
+ unsigned int temp;
+
+ temp = ~GPLR0 & ( GPIO_bit(GPIO_AC_IN) | GPIO_bit(GPIO_KEY_INT) | GPIO_bit(GPIO_WAKEUP) );
+ if ( temp != 0 ) {
+ apm_wakeup_factor = temp;
+ }
+-
+ return temp;
++#endif
+ }
+ #endif
+
+@@ -276,31 +369,71 @@
+ {
+ int i;
+ u32 gplr;
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ int batt_fault = ((PSSR & 0x02) != 0);
++#endif
+
+ /* setting GPIO */
+ GPDR0 = sys_ctx.gpdr0;
+ GAFR0_L = sys_ctx.gafr0_l;
+ GPDR0 &= ~WAKEUP_SRC;
+- GAFR0_L &= ~WAKEUP_SRC;
++// GAFR0_L &= ~WAKEUP_SRC;
+ gplr = GPLR0;
+
++#ifdef WUPSRC_DEBUG
++ debug1 = PEDR;
++ debug2 = WAKEUP_SRC;
++ debug3 = apm_wakeup_src_mask;
++ debug4 = PSSR;
++#endif
+ apm_wakeup_factor = PEDR & WAKEUP_SRC & apm_wakeup_src_mask;
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ apm_wakeup_factor &= ~0x80000000; /* clear ALARM */
+ if ( ( RTSR & 0x1 ) && ( RTSR & RTSR_ALE ) )
+ #else
+ if ( RTSR & 0x1 )
+ #endif
+ apm_wakeup_factor |= 0x80000000; /* ALARM */
++
++
+ PEDR = WAKEUP_SRC;
+
+- if ( !apm_wakeup_factor )
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ if(batt_fault) PSSR = 0x02; /* clear BFS bit */
++#endif
++
++ if ( !apm_wakeup_factor ){
+ return 0; /* no wakeup factor */
++ }
+
+ #if defined(CONFIG_ARCH_PXA_CORGI)
+ gplr &= ~GPIO_bit(GPIO_KEY_INT);
+ #endif
+
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ //if(PSSR & 0x02){
++ if(batt_fault){
++ // Asserted battery fault.
++ // It must have changed the main battery.
++ if(GPIO_bit(GPIO_POWERON) & apm_wakeup_factor){
++ int change_ac_status = 0;
++ if ( apm_wakeup_src_mask & GPIO_bit(GPIO_AC_IN)){
++ if ( !charge_status && ( gplr & GPIO_bit(GPIO_AC_IN) ) == 0)
++ change_ac_status = 1;
++
++ if ( charge_status && ( gplr & GPIO_bit(GPIO_AC_IN) ) != 0)
++ change_ac_status = 1;
++ }
++ if(change_ac_status)
++ apm_wakeup_factor |= GPIO_bit(GPIO_AC_IN);
++
++ return apm_wakeup_factor;
++ }
++ if(GPIO_bit(GPIO_RESET) & apm_wakeup_factor){
++ return apm_wakeup_factor;
++ }
++ }
++#endif
+ /* Faulty operation check */
+ for (i = 0; i <= 15; i++) {
+ #if defined(CONFIG_ARCH_PXA_CORGI)
+@@ -329,27 +462,56 @@
+ u32 gplr = GPLR0;
+ int is_resume = 0;
+
++ DPRINTK("GPLR0 = %x\n",gplr);
++#ifdef WUPSRC_DEBUG
++ printk("PEDR=%08x\n",debug1);
++ printk("src=%08x\n",debug2);
++ printk("src_mask=%08x\n",debug3);
++ printk("PSSR=%08x->%08x\n",debug4,PSSR);
++#endif
+ if ( (apm_wakeup_factor & GPIO_bit(GPIO_AC_IN)) &&
+ sharpsl_battery_charge_hook ) {
++
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ if ( !(gplr & GPIO_bit(GPIO_AC_IN)) ) {
++#else
+ if ( gplr & GPIO_bit(GPIO_AC_IN) ) {
++#endif
+ sharpsl_battery_charge_hook(2); /* charge on */
+ } else
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ if ( gplr & GPIO_bit(GPIO_AC_IN) ) {
++#else
+ if ( !( gplr & GPIO_bit(GPIO_AC_IN) ) ) {
++#endif
+ sharpsl_battery_charge_hook(1); /* charge off */
+ }
+ }
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ if ( (apm_wakeup_factor & GPIO_bit(GPIO_BAT0_CRG)) &&
++ sharpsl_battery_charge_hook ) {
++ sharpsl_battery_charge_hook(0); /* tosa: main battery full */
++ }
++ if ( (apm_wakeup_factor & GPIO_bit(GPIO_BAT1_CRG)) &&
++ sharpsl_battery_charge_hook ) {
++ sharpsl_battery_charge_hook(3); /* tosa: jacket battery full */
++ }
++#else
+ if ( (apm_wakeup_factor & GPIO_bit(GPIO_CHRG_FULL)) &&
+ sharpsl_battery_charge_hook ) {
+ sharpsl_battery_charge_hook(0); /* charge off */
+ }
++#endif
++
+ #if defined(CONFIG_ARCH_PXA_POODLE)
+ if ( apm_wakeup_factor & GPIO_bit(GPIO_ON_KEY) )
+ is_resume |= GPIO_bit(GPIO_ON_KEY);
+ #endif
+ #if defined(CONFIG_ARCH_PXA_CORGI)
+ if ( apm_wakeup_factor & GPIO_bit(GPIO_KEY_INT) ) {
+- if (sharppda_kbd_is_wakeup())
++ if (sharppda_kbd_is_wakeup()){
+ is_resume |= GPIO_bit(GPIO_KEY_INT);
++ }
+ }
+ #if defined(CONFIG_ARCH_PXA_SHEPHERD)
+ if ((apm_wakeup_factor & GPIO_bit(GPIO_MAIN_BAT_LOW)) &&
+@@ -373,14 +535,15 @@
+ ( sharpsl_battery_charge_hook )) {
+ sharpsl_battery_charge_hook(1); /* charge off */
+ }
+-
+ #else
+ if ( apm_wakeup_factor & GPIO_bit(GPIO_MAIN_BAT_LOW) )
+ apm_wakeup_src_mask = 0;
+ #endif
+ #endif
++#if !defined(CONFIG_ARCH_PXA_TOSA)
+ if ( apm_wakeup_factor & GPIO_bit(GPIO_WAKEUP) )
+ is_resume |= GPIO_bit(GPIO_WAKEUP);
++#endif
+ #if defined(CONFIG_ARCH_PXA_POODLE)
+ if ( (apm_wakeup_factor & GPIO_bit(GPIO_GA_INT)) && (LCM_KIC & 1) ) {
+ LCM_KIC &= ~0x100;
+@@ -397,28 +560,116 @@
+ #endif
+ #if defined(CONFIG_ARCH_PXA_CORGI)
+ if ( apm_wakeup_factor & GPIO_bit(GPIO_AK_INT) ) {
+- if ( corgi_wakeup_remocon_hook() )
++ if ( corgi_wakeup_remocon_hook() ){
+ is_resume |= GPIO_bit(GPIO_AK_INT);
++ }
++ }
++#endif
++
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ if ( (apm_wakeup_factor & GPIO_bit(GPIO_AC_IN)) ) {
++#ifdef LOGICAL_WAKEUP_SRC
++ if (logical_wakeup_src_mask&IDPM_WAKEUP_AC) {
++ is_resume |= GPIO_bit(GPIO_AC_IN);
++ }
++#endif
++ }
++ if (apm_wakeup_factor & GPIO_bit(GPIO_POWERON)) { // function key
++ if (sharppda_kbd_is_wakeup()){
++ is_resume |= GPIO_bit(GPIO_POWERON);
++ }
++ }
++ if (apm_wakeup_factor & GPIO_bit(GPIO_RECORD_BTN)) { // rec key
++ if (sharppda_kbd_is_wakeup()){
++ is_resume |= GPIO_bit(GPIO_RECORD_BTN);
++ }
++ }
++ if (apm_wakeup_factor & GPIO_bit(GPIO_SYNC)) { // sync key
++ if (sharppda_kbd_is_wakeup()){
++ is_resume |= GPIO_bit(GPIO_SYNC);
++ }
++ }
++ if (apm_wakeup_factor & GPIO_bit(GPIO_USB_IN)) {
++#ifdef LOGICAL_WAKEUP_SRC
++ if (logical_wakeup_src_mask&IDPM_WAKEUP_USBD) {
++ is_resume |= GPIO_bit(GPIO_USB_IN);
++ }
++#endif
++ }
++ if (apm_wakeup_factor & GPIO_bit(GPIO_JACKET_DETECT)){
++ sharpsl_battery_charge_hook(4);
++#ifdef LOGICAL_WAKEUP_SRC
++ if (logical_wakeup_src_mask&IDPM_WAKEUP_JACKET) {
++ is_resume |= GPIO_bit(GPIO_JACKET_DETECT);
++ }
++#endif
+ }
+ #endif
+
+- DPRINTK("alarm flag = %8x\n",sharpsl_alarm_flag);
+- if ( ( apm_wakeup_factor & PWER_RTC ) && !sharpsl_alarm_flag)
++ if ( ( apm_wakeup_factor & PWER_RTC ) && !sharpsl_alarm_flag){
+ is_resume |= PWER_RTC;
++ }
+
+ return is_resume;
+ }
+ #endif
+
+-
++#if defined(CONFIG_ARCH_PXA_TOSA)
++#define BATTERY_CHECK_TIME (60*5) // 5 min
++#else
+ #define BATTERY_CHECK_TIME 60*10 // 10 min
+-extern int charge_status;
++#endif
++
++//extern int charge_status;
+ extern int sharpsl_off_charge;
+
+
++#if defined(CONFIG_ARCH_PXA_TOSA)
++#if 0 /////////////////////////////////////////////////////////
++static void tc6393_susx(void)
++{
++#if 1
++ reset_scoop_jc_gpio(SCP_JC_TC3693_L3V_ON);
++// reset_scoop_jc_gpio(SCP_JC_TC6393_SUSPEND);
++// reset_scoop_gpio(SCP_TC6393_REST_IN);
++#endif
++
++// TC6393_SYS_REG(TC6393_SYS_GPOOECR1) = TC6393_CARD_VCC_ON;
++// TC6393_SYS_REG(TC6393_SYS_GPODSR1) = 0; /* CARD_VCC_OFF */
++#if 1
++// TC6393_SYS_REG(TC6393_SYS_GPOOECR1) = TC6393_GPO_OE;
++// TC6393_SYS_REG(TC6393_SYS_GPOOECR1) = TC6393_CARD_VCC_ON;
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) |= TC6393_CARD_VCC_ON;
++ TC6393_SYS_REG(TC6393_SYS_GPOOECR1) = TC6393_GPO_OE;
++#endif
++}
++
++static void tc6393_resx(void)
++{
++ set_GPIO_mode(GPIO11_3_6MHz_MD);
++ set_GPIO_mode(GPIO18_RDY_MD);
++ mdelay(1);
++ set_scoop_jc_gpio(SCP_JC_TC6393_SUSPEND);
++ mdelay(10);
++ set_scoop_gpio(SCP_TC6393_REST_IN);
++ //set_scoop_jc_gpio(SCP_JC_TC3693_L3V_ON);
++ TC6393_SYS_REG(TC6393_SYS_FER) = 0;
++ /* clock setting */
++ TC6393_SYS_REG(TC6393_SYS_PLL2CR) = 0x0cc1;
++ TC6393_SYS_REG(TC6393_SYS_CCR) = 0x1310;
++ TC6393_SYS_REG(TC6393_SYS_MCR) = 0x80AA;
++ /* GPIO */
++ TC6393_SYS_REG(TC6393_SYS_GPER) = 0x0030; /* 15-0 GPO */
++ TC6393_SYS_REG(TC6393_SYS_GPOOECR1) = TC6393_GPO_OE;
++ /* 15-0 GPO set H */
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) = TC6393_CARD_VCC_ON;
++}
++#endif ///////////////////////////////////////////////
++#endif
+
+ int pxa_suspend(void)
+ {
++
+ unsigned long flags;
+ #if defined (CONFIG_SABINAL_DISCOVERY)
+ unsigned long RTAR_buffer;
+@@ -426,10 +677,11 @@
+ #else
+ unsigned long RTAR_buffer;
+ unsigned long RTAR_buffer2;
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ unsigned long RCNR_buffer;
++#endif
+ #endif
+
+-
+-
+ #ifndef CONFIG_SABINAL_DISCOVERY
+ sharpsl_off_state = 1;
+
+@@ -459,13 +711,22 @@
+ cpu_xscale_sl_change_speed_145_without_lcd();
+ cccr_reg = CCCR;
+ break;
+-#if defined(CONFIG_ARCH_PXA_SHEPHERD)
++#if defined(CONFIG_ARCH_PXA_SHEPHERD) || defined(CONFIG_ARCH_PXA_TOSA)
+ case 0x161:
+ if ( CCCR == 0x0161 ) break;
+ cpu_xscale_sl_change_speed_161();
+ cccr_reg = CCCR;
+ break;
+ #endif
++#if defined(CONFIG_SL_CCCR_CHANGE)
++ default:
++ if ( (sharpsl_chg_freq & 0xffff) !=0 ){
++ cccr_clkparam = (unsigned int)(sharpsl_chg_freq & 0xffff);
++ cpu_xscale_sl_change_speed_num();
++ cccr_reg = CCCR;
++ }
++ break;
++#endif
+ }
+ sharpsl_chg_freq &= 0x0000ffff;
+ mdelay(500);
+@@ -473,7 +734,7 @@
+ }
+ #endif
+
+-#if defined(CONFIG_ARCH_PXA_SHEPHERD)
++#if defined(CONFIG_ARCH_PXA_SHEPHERD) || defined(CONFIG_ARCH_PXA_TOSA)
+ if (sharpsl_off_mode == 2) sharpsl_restart(); /* off in maintenance */
+ #endif
+
+@@ -553,7 +814,7 @@
+ ASIC3_GPIO_INTSTAT_D = 0;
+ #endif
+
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ if ( CCCR != 0x241 ) {
+ cpu_xscale_sl_change_speed_241_without_lcd();
+ }
+@@ -561,20 +822,39 @@
+ DPRINTK("FCS : CCCR = %x\n",cccr_reg);
+ #endif
+
+-
+-DO_SUSPEND:
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ // check jacket status.
++ sharpsl_request_dac_init(); // in sharpsl_battery.c
++ if(sharpsl_battery_charge_hook)
++ sharpsl_battery_charge_hook(4); // check jacket.
++#endif
+
++DO_SUSPEND:
+
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
++ DPRINTK("pass_charge_flag = %d\n",pass_charge_flag);
+ if ( !pass_charge_flag ) {
+ // not charging and AC-IN !
+- if ( !charge_status && ( GPLR(GPIO_AC_IN) & GPIO_bit(GPIO_AC_IN)) != 0 ) {
++
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ DPRINTK("check AC-adaptor\n");
++ if ( !charge_status && ( GPLR(GPIO_AC_IN) & GPIO_bit(GPIO_AC_IN) ) == 0){
++#else
++ if ( !charge_status && ( GPLR(GPIO_AC_IN) & GPIO_bit(GPIO_AC_IN)) != 0){
++#endif
+ DPRINTK("kick charging\n");
+ charge_status = 1;
+ sharpsl_off_charge_battery();
+ }
+ }
+
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ tosa_check_ac_and_jacket_state();
++ DPRINTK("ac97&tc6393 down\n");
++ tc6393_suspend();
++ tosa_ac97_exit();
++#endif
++
+ if ( charge_status ) {
+ if ( ( ( RTAR - RCNR ) < ( BATTERY_CHECK_TIME + 30 ) ) && ( RTSR & RTSR_ALE ) ) {
+ // maybe alarm will occur
+@@ -611,6 +891,8 @@
+ } else {
+ PGSR1 &= ~GPIO_bit(GPIO43_BTTXD);
+ }
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++// non
+ #endif
+
+ #endif
+@@ -657,12 +939,12 @@
+ LCM_ICR &= ~0x100;
+ #endif
+
+-#if !defined(CONFIG_SABINAL_DISCOVERY)
++#if !defined(CONFIG_SABINAL_DISCOVERY)
+ /* Scoop suspend */
+ sys_ctx.scp_gpwr = SCP_REG_GPWR;
+ SCP_REG_GPWR = 0;
+-#endif
+
++#endif
+ sys_ctx.gpdr0 = GPDR0;
+ sys_ctx.gpdr1 = GPDR1;
+ sys_ctx.gpdr2 = GPDR2;
+@@ -718,7 +1000,9 @@
+ PWER = WAKEUP_SRC & apm_wakeup_src_mask;
+ PRER = R_WAKEUP_SRC & apm_wakeup_src_mask;
+ PFER = F_WAKEUP_SRC & apm_wakeup_src_mask;
++
+ PEDR = WAKEUP_SRC & apm_wakeup_src_mask;
++
+ for (i = 0; i <=15; i++) {
+ if ( PRER & PFER & GPIO_bit(i) ) {
+ if ( GPLR0 & GPIO_bit(i) )
+@@ -728,14 +1012,13 @@
+ }
+ }
+
+-
+ /* Clear reset status */
+ RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR;
+
+ /* Stop 3.6MHz and drive HIGH to PCMCIA and CS */
+ PCFR = PCFR_OPDE;
+
+-#ifdef CONFIG_ARCH_PXA_CORGI
++#if defined(CONFIG_ARCH_PXA_CORGI)
+ /* GPIO Sleep Register */
+ PGSR2 = (PGSR2 & ~GPIO_ALL_STROBE_BIT) | GPIO_STROBE_BIT(0);
+
+@@ -747,6 +1030,19 @@
+ #endif
+ GPDR1 = 0x00FFAFC3;
+ GPDR2 = 0x0001C004;
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++ /* GPIO Sleep Register */
++ PGSR1 = (PGSR1 & ~GPIO_LOW_STROBE_BIT);
++ PGSR2 = (PGSR2 & ~GPIO_HIGH_STROBE_BIT);
++#ifdef LOGICAL_WAKEUP_SRC
++ if (logical_wakeup_src_mask &
++ (IDPM_WAKEUP_ADDRESSBOOK|IDPM_WAKEUP_CALENDAR|IDPM_WAKEUP_MENU|IDPM_WAKEUP_MAIL)) {
++ PGSR1 |= GPIO_STROBE_BIT(4);
++ }
++#endif
++ GPDR0 = 0xC3810940;
++ GPDR1 = 0xFCFFAB82;
++ GPDR2 = 0x000F501f;
+ #endif
+ }
+ #endif
+@@ -764,7 +1060,6 @@
+
+ #if !defined(CONFIG_SABINAL_DISCOVERY)
+ sharpsl_wakeup_check();
+-
+ FFMCR = sys_ctx.ffmcr;
+ FFSPR = sys_ctx.ffspr;
+ FFLCR = sys_ctx.fflcr;
+@@ -847,15 +1142,42 @@
+ #endif
+
+ #if !defined(CONFIG_SABINAL_DISCOVERY)
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ if ( sharpsl_alarm_flag ) {
++ RCNR_buffer = RCNR;
++ }
++ DPRINTK("ac97&tc6393 up\n");
++ tosa_ac97_init();
++ pxa_ac97_get(&codec,&ac97_on); // initialize 'codec' pointer
++ i2c_init(1);
++ tc6393_resume();
++
++ sharpsl_request_dac_init(); // in sharpsl_battery.c
++#else
+ pxa_ssp_init();
++#endif
+
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ if ( sharpsl_alarm_flag ) {
+ RTAR_buffer2 = RTAR;
+ RTAR = RTAR_buffer;
+ DPRINTK("back the ALARM Time\n");
+ }
+
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ if ( sharpsl_alarm_flag && ( RCNR_buffer == RTAR_buffer2 ) ) {
++ //printk("RCNR_buffer=%d\n",RCNR_buffer);
++ if(sharpsl_battery_charge_hook)
++ sharpsl_battery_charge_hook(5);
++#if 1
++ if(tosa_check_charge_full(BATTERY_CHECK_TIME) < 0) {
++ goto DO_SUSPEND;
++ }
++#else
++ goto DO_SUSPEND;
++#endif
++ }
++#else
+ if ( sharpsl_alarm_flag && ( RCNR == RTAR_buffer2 ) ) {
+ if ( sharpsl_off_charge_battery() ) {
+ DPRINTK("charge timer \n");
+@@ -863,6 +1185,7 @@
+ }
+ }
+ #endif
++#endif
+
+ /* ----- hardware resume ----- */
+ if ( !sharpsl_wakeup_hook() ) {
+@@ -877,6 +1200,19 @@
+ printk("return to suspend (fatal) ....\n");
+ goto DO_SUSPEND;
+ }
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++ if ( (GPLR(GPIO_AC_IN) & GPIO_bit(GPIO_AC_IN)) == 0){
++ if(sharpsl_off_charge_battery() < 0){
++ printk("return to suspend (no main batt) ....\n");
++ goto DO_SUSPEND;
++ }
++ }
++
++ if ( ( (GPLR(GPIO_BAT_LOCKED) & GPIO_bit(GPIO_BAT_LOCKED)) == 0 )
++ || ( !sharpsl_off_mode && chkFatalBatt() == 0 ) ) {
++ printk("return to suspend (fatal) ....\n");
++ goto DO_SUSPEND;
++ }
+ #else
+ if ( ( (GPLR(GPIO_MAIN_BAT_LOW) & GPIO_bit(GPIO_MAIN_BAT_LOW)) == 0 )
+ || ( chkFatalBatt() == 0 ) ) {
+@@ -888,7 +1224,7 @@
+ #endif
+
+
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ PMCR = 0x01;
+
+ if ( sharpsl_off_mode )
+@@ -896,24 +1232,33 @@
+ #endif
+
+
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ if ( sharpsl_chg_freq == 0x0145 ) {
+ cpu_xscale_sl_change_speed_145_without_lcd();
++#if defined(CONFIG_ARCH_PXA_SHEPHERD) || defined(CONFIG_ARCH_PXA_TOSA)
+ }
+-#if defined(CONFIG_ARCH_PXA_SHEPHERD)
+ else if ( sharpsl_chg_freq == 0x0161 ) {
+ cpu_xscale_sl_change_speed_161();
++#endif
++#if defined(CONFIG_SL_CCCR_CHANGE)
+ }
++ else if ( sharpsl_chg_freq != 0x0 ){
++ cccr_clkparam = (unsigned int)sharpsl_chg_freq;
++ cpu_xscale_sl_change_speed_num();
+ #endif
++ }
++
+ cccr_reg = CCCR;
+ printk("FCS : CCCR = %x\n",cccr_reg);
+ #if defined(CONFIG_ARCH_PXA_SHEPHERD) && !defined(CONFIG_ARCH_SHARP_SL_J)
+ sharpsl_off_charge = 1;
+ #else
++
+ sharpsl_off_charge = 0;
+ #endif
+ #endif
+
++
+ #if 1 // ensure that OS Timer irq occurs
+ OSMR0 = sys_ctx.oscr + LATCH;
+ #else
+@@ -1004,16 +1349,14 @@
+ int pm_do_suspend(void)
+ {
+ int retval;
+-
+- DPRINTK("yea\n");
+-
+ retval = pm_send_all(PM_SUSPEND, (void *)2);
+- if (retval)
++ if (retval)
+ return retval;
+
+ retval = pxa_suspend();
+
+ retval = pm_send_all(PM_RESUME, (void *)0);
++
+ if (retval)
+ return retval;
+
+@@ -1040,7 +1383,7 @@
+
+
+
+-int pxa_fatal_suspend(void)
++static int pxa_fatal_suspend(void)
+ {
+ unsigned long flags;
+ unsigned long RTAR_buffer;
+@@ -1056,7 +1399,7 @@
+ save_flags_cli(flags);
+ clf();
+
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ if ( CCCR != 0x241 ) {
+ cpu_xscale_sl_change_speed_241_without_lcd();
+ }
+@@ -1092,6 +1435,8 @@
+ PGSR1 &= ~GPIO_bit(GPIO43_BTTXD);
+ }
+ #endif
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++// non
+ #endif
+
+ #if defined(CONFIG_ARCH_PXA_POODLE)
+@@ -1145,6 +1490,7 @@
+ PRER = R_WAKEUP_SRC & apm_wakeup_src_mask;
+ PFER = F_WAKEUP_SRC & apm_wakeup_src_mask;
+ PEDR = WAKEUP_SRC & apm_wakeup_src_mask;
++
+ for (i = 0; i <=15; i++) {
+ if ( PRER & PFER & GPIO_bit(i) ) {
+ if ( GPLR0 & GPIO_bit(i) )
+@@ -1154,14 +1500,14 @@
+ }
+ }
+
+-
+ /* Clear reset status */
+ RCSR = RCSR_HWR | RCSR_WDR | RCSR_SMR | RCSR_GPR;
+
+ /* Stop 3.6MHz and drive HIGH to PCMCIA and CS */
+ PCFR = PCFR_OPDE;
+
+-#ifdef CONFIG_ARCH_PXA_CORGI
++
++#if defined(CONFIG_ARCH_PXA_CORGI)
+ /* GPIO Sleep Register */
+ PGSR2 = (PGSR2 & ~GPIO_ALL_STROBE_BIT) | GPIO_STROBE_BIT(0);
+
+@@ -1172,6 +1518,19 @@
+ #endif
+ GPDR1 = 0x00FFAFC3;
+ GPDR2 = 0x0001C004;
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++ /* GPIO Sleep Register */
++ PGSR1 = (PGSR1 & ~GPIO_LOW_STROBE_BIT);
++ PGSR2 = (PGSR2 & ~GPIO_HIGH_STROBE_BIT);
++#ifdef LOGICAL_WAKEUP_SRC
++ if (logical_wakeup_src_mask &
++ (IDPM_WAKEUP_ADDRESSBOOK|IDPM_WAKEUP_CALENDAR|IDPM_WAKEUP_MENU|IDPM_WAKEUP_MAIL)) {
++ PGSR1 |= GPIO_STROBE_BIT(4);
++ }
++#endif
++ GPDR0 = 0xC3810940;
++ GPDR1 = 0xFCFFAB82;
++ GPDR2 = 0x000F501f;
+ #endif
+ }
+ #endif
+@@ -1228,14 +1587,20 @@
+ }
+ #endif
+
+-#if defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ #define SCP_INIT_DATA(adr,dat) (((adr)<<16)|(dat))
+ #define SCP_INIT_DATA_END ((unsigned long)-1)
+ void sharpsl_corgi_fataloff(void)
+ {
+ #ifdef CONFIG_PM
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ tc6393_fatal_off();
++ tc6393_suspend();
++ tosa_ac97_exit();
++#else
+ w100_fatal_off();
+ #endif
++#endif
+
+ {
+ static const unsigned long scp_init[] =
+@@ -1253,12 +1618,37 @@
+ SCP_INIT_DATA(SCP_GPWR,SCP_IO_OUT), // 24
+ SCP_INIT_DATA_END
+ };
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ static const unsigned long scp_jc_init[] =
++ {
++ SCP_INIT_DATA(SCP_MCR,0x0140), // 00
++ SCP_INIT_DATA(SCP_MCR,0x0100),
++ SCP_INIT_DATA(SCP_CDR,0x0000), // 04
++ SCP_INIT_DATA(SCP_CPR,0x0000), // 0C
++ SCP_INIT_DATA(SCP_CCR,0x0000), // 10
++ SCP_INIT_DATA(SCP_IMR,0x0000), // 18
++ SCP_INIT_DATA(SCP_IRM,0x00FF), // 14
++ SCP_INIT_DATA(SCP_ISR,0x0000), // 1C
++ SCP_INIT_DATA(SCP_IRM,0x0000),
++ SCP_INIT_DATA(SCP_GPCR,SCP_JC_IO_DIR), // 20
++ SCP_INIT_DATA(SCP_GPWR,SCP_JC_IO_OUT), // 24
++ SCP_INIT_DATA_END
++ };
++#endif
+ int i;
+ for(i=0; scp_init[i] != SCP_INIT_DATA_END; i++)
+ {
+ int adr = scp_init[i] >> 16;
+ SCP_REG(adr) = scp_init[i] & 0xFFFF;
+ }
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ for(i=0; scp_jc_init[i] != SCP_INIT_DATA_END; i++)
++ {
++ int adr = scp_jc_init[i] >> 16;
++ SCP_JC_REG(adr) = scp_jc_init[i] & 0xFFFF;
++ }
++#endif
++
+ }
+
+ }
+@@ -1267,6 +1657,10 @@
+
+ void sharpsl_fataloff(void)
+ {
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ return;
++#endif
++
+ if ( PSSR & 0x02 ) {
+
+ printk("PSSR = %8x\n",PSSR);
+@@ -1278,19 +1672,18 @@
+ PSPR = 0x00;
+ RCSR = 0xf;
+
+- printk("off\n");
+ pxa_fatal_suspend();
+- printk("off 2\n");
+ #endif
+-#if defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ sharpsl_corgi_fataloff();
+
+ PSPR = 0x00;
+ RCSR = 0xf;
+
+- printk("off\n");
+ pxa_fatal_suspend();
+- printk("off 2\n");
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ sharpsl_restart();
++#endif
+ #endif
+ }
+ }
+@@ -1308,15 +1701,14 @@
+ interruptible_sleep_on(&wq_off);
+ DPRINTK("start off sequence ! \n");
+
+-#if !defined(CONFIG_ARCH_PXA_SHEPHERD)
++#if !defined(CONFIG_ARCH_PXA_SHEPHERD) && !defined(CONFIG_ARCH_PXA_TOSA)
+ sharpsl_off_mode = 1;
+ #endif
+-
+ handle_scancode(SLKEY_OFF|KBDOWN , 1);
+ mdelay(10);
+ handle_scancode(SLKEY_OFF|KBUP , 0);
+
+-#if !defined(CONFIG_ARCH_PXA_SHEPHERD)
++#if !defined(CONFIG_ARCH_PXA_SHEPHERD) && !defined(CONFIG_ARCH_PXA_TOSA)
+ // wait off signal
+ // if can not recieve off siganl , so force off.
+ time_cnt = jiffies;
+@@ -1333,7 +1725,50 @@
+ return 0;
+ }
+
+-#if defined(CONFIG_ARCH_PXA_SHEPHERD)
++#if defined(CONFIG_SL7X0_POWER_KEY_OFF)
++static int key_suspend_thread(void* unused)
++{
++ int time_cnt = 0;
++
++ // daemonize();
++ strcpy(current->comm, "off_thread");
++ sigfillset(&current->blocked);
++
++ while(1) {
++ sleep_on(&key_off);
++ printk("start off sequence ! \n");
++
++ handle_scancode(SLKEY_OFF|KBDOWN , 1);
++ mdelay(10);
++ handle_scancode(SLKEY_OFF|KBUP , 0);
++
++ // wait off signal
++ // if can not recieve off siganl , so force off.
++// time_cnt = jiffies;
++// while(1) {
++// if ( ( jiffies - time_cnt ) > 500 ) break;
++// schedule();
++// }
++
++ // maybe apps is dead, so we have to restart.
++ pm_do_suspend();
++ }
++ return 0;
++}
++
++void slc7x0_key_suspend(void)
++{
++ apm_wakeup_src_mask = 0;
++ wake_up(&key_off);
++}
++
++EXPORT_SYMBOL(slc7x0_key_suspend);
++
++#endif
++
++
++
++#if defined(CONFIG_ARCH_PXA_SHEPHERD) || defined(CONFIG_ARCH_PXA_TOSA)
+ static struct timer_list bat_switch_timer;
+
+ void sharpsl_emerge_restart(void)
+@@ -1347,10 +1782,16 @@
+ void sharpsl_emerge_off(int irq, void *dev_id, struct pt_regs *regs)
+ {
+
++ DPRINTK("DBG:sharpsl_emerge_off [non-battery]\n");
++
+ /* noise ? */
+ mdelay(10);
+- if ( 0x1234ABCD != regs &&
+- GPLR(GPIO_MAIN_BAT_LOW) & GPIO_bit(GPIO_MAIN_BAT_LOW) ) {
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ if ( 0x1234ABCD != regs && GPLR(GPIO_BAT_LOCKED) & GPIO_bit(GPIO_BAT_LOCKED) )
++#else
++ if ( 0x1234ABCD != regs && GPLR(GPIO_MAIN_BAT_LOW) & GPIO_bit(GPIO_MAIN_BAT_LOW) )
++#endif
++ {
+ #if defined(CONFIG_ARCH_PXA_SHEPHERD)
+ sharpsl_battery_charge_hook(1); /* charge off */
+ if (sharppda_kbd_resetcheck()) {
+@@ -1364,11 +1805,10 @@
+ return;
+ }
+
+-#if defined(CONFIG_ARCH_PXA_CORGI) && !defined(CONFIG_ARCH_PXA_SHEPHERD)
++#if (defined(CONFIG_ARCH_PXA_CORGI)) && !defined(CONFIG_ARCH_PXA_SHEPHERD) && !defined(CONFIG_ARCH_PXA_TOSA)
+ if (!(GPLR(GPIO_MAIN_BAT_LOW) & GPIO_bit(GPIO_MAIN_BAT_LOW)))
+ apm_wakeup_src_mask = 0;
+ #endif
+-
+ wake_up(&wq_off);
+
+ }
+@@ -1386,6 +1826,8 @@
+ /* Set transition detect */
+ #ifdef CONFIG_ARCH_PXA_SHEPHERD
+ set_GPIO_IRQ_edge( GPIO_MAIN_BAT_LOW , GPIO_BOTH_EDGES );
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++ set_GPIO_IRQ_edge( GPIO_BAT_LOCKED , GPIO_BOTH_EDGES );
+ #else
+ set_GPIO_IRQ_edge( GPIO_MAIN_BAT_LOW , GPIO_FALLING_EDGE );
+ #endif
+@@ -1394,17 +1836,29 @@
+ /* this registration can be done in init/main.c. */
+ if(1){
+ int err;
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ err = request_irq(IRQ_GPIO_BAT_LOCKED,sharpsl_emerge_off , SA_INTERRUPT, "batok", NULL);
++#else
+ err = request_irq(IRQ_GPIO_MAIN_BAT_LOW,sharpsl_emerge_off , SA_INTERRUPT, "batok", NULL);
++#endif
+ if( err ){
+ printk("batok install error %d\n",err);
+ }else{
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ enable_irq(IRQ_GPIO_BAT_LOCKED);
++#else
+ enable_irq(IRQ_GPIO_MAIN_BAT_LOW);
++#endif
+ printk("batok installed\n");
+ }
+ }
+
+ kernel_thread(sharpsl_off_thread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
+-#if defined(CONFIG_ARCH_PXA_SHEPHERD)
++#if defined(CONFIG_SL7X0_POWER_KEY_OFF)
++ kernel_thread(key_suspend_thread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
++#endif
++#if defined(CONFIG_ARCH_PXA_SHEPHERD) || defined(CONFIG_ARCH_PXA_TOSA)
++//#if defined(CONFIG_ARCH_PXA_SHEPHERD)
+ init_timer(&bat_switch_timer);
+ bat_switch_timer.function = sharpsl_emerge_restart;
+ #endif
+@@ -1464,12 +1918,55 @@
+
+ void set_apm_wakeup_src_mask(u32 SetValue)
+ {
++#ifdef LOGICAL_WAKEUP_SRC
++ logical_wakeup_src_mask = 0;
++ // RTC
++ if (SetValue&IDPM_WAKEUP_RTC) {
++ apm_wakeup_src_mask |= GPIO_bit(31);
++ logical_wakeup_src_mask |= IDPM_WAKEUP_RTC;
++ } else apm_wakeup_src_mask &= ~GPIO_bit(31);
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ // Sync key
++ if (SetValue&IDPM_WAKEUP_SYNC) {
++ apm_wakeup_src_mask |= GPIO_bit(GPIO_SYNC);
++ logical_wakeup_src_mask |= IDPM_WAKEUP_SYNC;
++ } else apm_wakeup_src_mask &= ~GPIO_bit(GPIO_SYNC);
++ // Record key
++ if (SetValue&IDPM_WAKEUP_REC) {
++ apm_wakeup_src_mask |= GPIO_bit(GPIO_RECORD_BTN);
++ logical_wakeup_src_mask |= IDPM_WAKEUP_REC;
++ } else apm_wakeup_src_mask &= ~GPIO_bit(GPIO_RECORD_BTN);
++ // USBD
++ if (SetValue&IDPM_WAKEUP_USBD) {
++ apm_wakeup_src_mask |= GPIO_bit(GPIO_USB_IN);
++ logical_wakeup_src_mask |= IDPM_WAKEUP_USBD;
++ } else apm_wakeup_src_mask &= ~GPIO_bit(GPIO_USB_IN);
++ // only Logical
++ if (SetValue&IDPM_WAKEUP_AC) logical_wakeup_src_mask |= IDPM_WAKEUP_AC;
++ if (SetValue&IDPM_WAKEUP_JACKET) logical_wakeup_src_mask |= IDPM_WAKEUP_JACKET;
++ if (SetValue&IDPM_WAKEUP_CALENDAR) logical_wakeup_src_mask |= IDPM_WAKEUP_CALENDAR;
++ if (SetValue&IDPM_WAKEUP_ADDRESSBOOK) logical_wakeup_src_mask |= IDPM_WAKEUP_ADDRESSBOOK;
++ if (SetValue&IDPM_WAKEUP_MAIL) logical_wakeup_src_mask |= IDPM_WAKEUP_MAIL;
++ if (SetValue&IDPM_WAKEUP_MENU) logical_wakeup_src_mask |= IDPM_WAKEUP_MENU;
++#ifdef WUPSRC_DEBUG
++ printk("set_wakeup_src=%08x->%08x[%08x]\n",SetValue,logical_wakeup_src_mask,apm_wakeup_src_mask);
++#endif
++#endif
++#else
+ apm_wakeup_src_mask = SetValue;
++#endif
+ }
+
+ u32 get_apm_wakeup_src_mask(void)
+ {
++#ifdef LOGICAL_WAKEUP_SRC
++#ifdef WUPSRC_DEBUG
++ printk("get_wakeup_src=%08x\n",logical_wakeup_src_mask);
++#endif
++ return (u32)logical_wakeup_src_mask;
++#else
+ return (u32)apm_wakeup_src_mask;
++#endif
+ }
+
+ u32 get_apm_wakeup_factor(void)
+diff -Nur linux_c860_org/arch/arm/mach-pxa/sharpsl_suspend.S linux/arch/arm/mach-pxa/sharpsl_suspend.S
+--- linux_c860_org/arch/arm/mach-pxa/sharpsl_suspend.S 2003-06-18 16:12:25.000000000 +0900
++++ linux/arch/arm/mach-pxa/sharpsl_suspend.S 2004-06-10 21:09:10.000000000 +0900
+@@ -34,6 +34,7 @@
+ * 12-Dec-2002 Lineo Japan, Inc.
+ * 12-Dec-2002 Sharp Corporation for Poodle and Corgi
+ * 14-Mar-2003 Sharp for PXA255
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+ #include <linux/linkage.h>
+@@ -59,10 +60,17 @@
+
+ .global sleep_param
+ .global sleep_param_p
++#if defined(CONFIG_SL_CCCR_CHANGE)
++ .global cccr_clkparam
++#endif
+
+ sleep_param: .word 0 @ virtual address of parameter array
+ sleep_param_p: .word 0 @ physical address of parameter array
+
++#if defined(CONFIG_SL_CCCR_CHANGE)
++cccr_clkparam: .word 0
++#endif
++
+ IC_BASE: .word io_p2v(0x40D00000)
+
+
+@@ -228,7 +236,7 @@
+ str r1, [r0] @ turn off all GPIOs
+ #endif
+
+- ldr r3, sleep_param
++ ldr r3, sleep_param
+ ldr r2, =Awake_address @ store Virtual return address
+ str r2, [r3], #4
+
+@@ -1053,7 +1061,7 @@
+ .align 5
+ .text
+
+-#if defined(CONFIG_ARCH_PXA_SHEPHERD)
++#if defined(CONFIG_ARCH_PXA_SHEPHERD) || defined(CONFIG_ARCH_PXA_TOSA)
+
+ ENTRY(cpu_xscale_sl_change_speed_161)
+ stmfd sp!, {r0, r1, r2, r3, r4, lr}
+@@ -1081,3 +1089,30 @@
+ .text
+
+ #endif
++
++#if defined(CONFIG_SL_CCCR_CHANGE)
++ENTRY(cpu_xscale_sl_change_speed_num)
++ stmfd sp!, {r0, r1, r2, r3, r4, lr}
++
++ ldr r0, CMR_BASE
++ ldr r1, cccr_clkparam
++ str r1, [r0, #CMR_CCCR]
++
++ ldr r0, MD_BASE
++ ldr r2, [r0, #MD_MDREFR]
++
++ bl CodeOnCache_num
++
++ .align 5
++ .text
++CodeOnCache_num:
++ mov r1, #0x2
++ mcr p14, 0, r1, c6, c0, 0
++ str r2, [r0, #MD_MDREFR]
++ ldr r2, [r0, #MD_MDREFR]
++
++ ldmfd sp!, {r0, r1, r2, r3, r4, pc}
++
++ .align 5
++ .text
++#endif
+diff -Nur linux_c860_org/arch/arm/mach-pxa/tosa.c linux/arch/arm/mach-pxa/tosa.c
+--- linux_c860_org/arch/arm/mach-pxa/tosa.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/arch/arm/mach-pxa/tosa.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,483 @@
++/*
++ * arch/arm/mach-pxa/tosa.c
++ *
++ * Support for the SHARP Tosa Board.
++ *
++ * (C) Copyright 2004 Lineo Solutions, Inc.
++ *
++ * Based on:
++ * linux/arch/arm/mach-pxa/lubbock.c
++ *
++ * Support for the Intel DBPXA250 Development Platform.
++ *
++ * Author: Nicolas Pitre
++ * Created: Jun 15, 2001
++ * Copyright: MontaVista Software Inc.
++ *
++ * 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.
++ *
++ * Change Log
++ * 26-Dec-2003 Sharp Corporation for Tosa
++ *
++ */
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/major.h>
++#include <linux/fs.h>
++#include <linux/interrupt.h>
++#include <linux/sched.h>
++#include <linux/delay.h>
++
++#include <asm/types.h>
++#include <asm/setup.h>
++#include <asm/memory.h>
++#include <asm/mach-types.h>
++#include <asm/hardware.h>
++#include <asm/irq.h>
++
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++#include <asm/mach/irq.h>
++
++#include <asm/arch/irq.h>
++
++#include "generic.h"
++#include <linux/ac97_codec.h>
++#include <linux/pm.h>
++#ifdef CONFIG_PM
++static struct pm_dev *ga_pm_dev;
++extern int pxa_suspend(void);
++#endif
++
++extern void sharpsl_get_param(void);
++extern void sharpsl_charge_start(void);
++//extern unsigned short chkFatalBatt(void);
++extern void pxa_nssp_init(void);
++extern void tosa_ac97_init(void);
++extern void i2c_init(int reset);
++
++unsigned short reset_scoop_gpio(unsigned short);
++
++static void tc6393_IRQ_demux( int irq, void *dev_id, struct pt_regs *regs )
++{
++ int req, i;
++
++ while ( (req = (TC6393_SYS_REG(TC6393_SYS_ISR)
++ & ~(TC6393_SYS_REG(TC6393_SYS_IMR)))) ) {
++ for (i = 0; i <= 7; i++) {
++ if ((req & (0x0001<<i))) {
++ switch (TC6393_IRQ(i)) {
++ case TC6393_IRQ_USBINT:
++#if 0
++ if (!(TC6393_USB_REG(TC6393_USB_SVPMCS) & TC6393_USB_PM_PMES))
++ continue;
++#endif
++ break;
++ }
++ do_IRQ( TC6393_IRQ(i) , regs );
++ }
++ }
++ break;
++ }
++}
++
++static struct irqaction tc6393_irq = {
++ name: "TC6393",
++ handler: tc6393_IRQ_demux,
++ flags: SA_INTERRUPT
++};
++
++static void tc6393_mask_and_ack_irq(unsigned int irq)
++{
++ TC6393_SYS_REG(TC6393_SYS_IMR) |= (0x0001 << (irq - TC6393_IRQ(0)));
++ switch (irq) {
++ case TC6393_IRQ_USBINT:
++ TC6393_USB_REG(TC6393_USB_SVPMCS) |= TC6393_USB_PM_PMES;
++ break;
++ }
++}
++
++static void tc6393_mask_irq(unsigned int irq)
++{
++ TC6393_SYS_REG(TC6393_SYS_IMR) |= (0x0001 << (irq - TC6393_IRQ(0)));
++}
++
++static void tc6393_unmask_irq(unsigned int irq)
++{
++ TC6393_SYS_REG(TC6393_SYS_IMR) &= ~(0x0001 << (irq - TC6393_IRQ(0)));
++}
++
++static void __init scoop_init(void)
++{
++
++#define SCP_INIT_DATA(adr,dat) (((adr)<<16)|(dat))
++#define SCP_INIT_DATA_END ((unsigned long)-1)
++ static const unsigned long scp_init[] =
++ {
++ SCP_INIT_DATA(SCP_MCR,0x0140), // 00
++ SCP_INIT_DATA(SCP_MCR,0x0100),
++ SCP_INIT_DATA(SCP_CDR,0x0000), // 04
++ SCP_INIT_DATA(SCP_CPR,0x0000), // 0C
++ SCP_INIT_DATA(SCP_CCR,0x0000), // 10
++ SCP_INIT_DATA(SCP_IMR,0x0000), // 18
++ SCP_INIT_DATA(SCP_IRM,0x00FF), // 14
++ SCP_INIT_DATA(SCP_ISR,0x0000), // 1C
++ SCP_INIT_DATA(SCP_IRM,0x0000),
++ SCP_INIT_DATA(SCP_GPCR,SCP_IO_DIR), // 20
++ SCP_INIT_DATA(SCP_GPWR,SCP_IO_OUT), // 24
++ SCP_INIT_DATA_END
++ };
++ int i;
++ for(i=0; scp_init[i] != SCP_INIT_DATA_END; i++)
++ {
++ int adr = scp_init[i] >> 16;
++ SCP_REG(adr) = scp_init[i] & 0xFFFF;
++ }
++}
++
++static spinlock_t scoop_lock = SPIN_LOCK_UNLOCKED;
++
++unsigned short set_scoop_gpio(unsigned short bit)
++{
++ unsigned short gpio_bit;
++ unsigned long flag;
++
++ spin_lock_irqsave(&scoop_lock, flag);
++ gpio_bit = SCP_REG_GPWR | bit;
++ SCP_REG_GPWR = gpio_bit;
++ spin_unlock_irqrestore(&scoop_lock, flag);
++
++ return gpio_bit;
++}
++EXPORT_SYMBOL(set_scoop_gpio);
++
++unsigned short reset_scoop_gpio(unsigned short bit)
++{
++ unsigned short gpio_bit;
++ unsigned long flag;
++
++ spin_lock_irqsave(&scoop_lock, flag);
++ gpio_bit = SCP_REG_GPWR & ~bit;
++ SCP_REG_GPWR = gpio_bit;
++ spin_unlock_irqrestore(&scoop_lock, flag);
++
++ return gpio_bit;
++}
++EXPORT_SYMBOL(reset_scoop_gpio);
++
++
++static void __init scoop_jc_init(void)
++{
++ static const unsigned long scp_jc_init[] =
++ {
++ SCP_INIT_DATA(SCP_MCR,0x0140), // 00
++ SCP_INIT_DATA(SCP_MCR,0x0100),
++ SCP_INIT_DATA(SCP_CDR,0x0000), // 04
++ SCP_INIT_DATA(SCP_CPR,0x0000), // 0C
++ SCP_INIT_DATA(SCP_CCR,0x0000), // 10
++ SCP_INIT_DATA(SCP_IMR,0x0000), // 18
++ SCP_INIT_DATA(SCP_IRM,0x00FF), // 14
++ SCP_INIT_DATA(SCP_ISR,0x0000), // 1C
++ SCP_INIT_DATA(SCP_IRM,0x0000),
++ SCP_INIT_DATA(SCP_GPCR,SCP_JC_IO_DIR), // 20
++ SCP_INIT_DATA(SCP_GPWR,SCP_JC_IO_OUT), // 24
++ SCP_INIT_DATA_END
++ };
++ int i;
++ for(i=0; scp_jc_init[i] != SCP_INIT_DATA_END; i++) {
++ int adr = scp_jc_init[i] >> 16;
++ SCP_JC_REG(adr) = scp_jc_init[i] & 0xFFFF;
++ }
++
++ reset_scoop_gpio(SCP_IR_POWERDWN);
++}
++
++static spinlock_t scoop_jc_lock = SPIN_LOCK_UNLOCKED;
++
++unsigned short set_scoop_jc_gpio(unsigned short bit)
++{
++ unsigned short gpio_bit;
++ unsigned long flag;
++
++ spin_lock_irqsave(&scoop_jc_lock, flag);
++ gpio_bit = SCP_JC_REG_GPWR | bit;
++ SCP_JC_REG_GPWR = gpio_bit;
++ spin_unlock_irqrestore(&scoop_jc_lock, flag);
++
++ return gpio_bit;
++}
++EXPORT_SYMBOL(set_scoop_jc_gpio);
++
++unsigned short reset_scoop_jc_gpio(unsigned short bit)
++{
++ unsigned short gpio_bit;
++ unsigned long flag;
++
++ spin_lock_irqsave(&scoop_jc_lock, flag);
++ gpio_bit = SCP_JC_REG_GPWR & ~bit;
++ SCP_JC_REG_GPWR = gpio_bit;
++ spin_unlock_irqrestore(&scoop_jc_lock, flag);
++
++ return gpio_bit;
++}
++EXPORT_SYMBOL(reset_scoop_jc_gpio);
++
++static void tc6393_init(void)
++{
++ reset_scoop_jc_gpio(SCP_JC_TC3693_L3V_ON);
++ reset_scoop_jc_gpio(SCP_JC_TC6393_SUSPEND);
++ reset_scoop_gpio(SCP_TC6393_REST_IN);
++ set_GPIO_mode(GPIO11_3_6MHz_MD);
++ set_GPIO_mode(GPIO18_RDY_MD);
++ mdelay(1);
++ set_scoop_jc_gpio(SCP_JC_TC6393_SUSPEND);
++ mdelay(10);
++ set_scoop_gpio(SCP_TC6393_REST_IN);
++ set_scoop_jc_gpio(SCP_JC_TC3693_L3V_ON);
++
++ printk("init TC6369 Revision %d\n", TC6393_SYS_REG(TC6393_SYS_RIDR));
++ TC6393_SYS_REG(TC6393_SYS_FER) = 0;
++
++ /* clock setting */
++ TC6393_SYS_REG(TC6393_SYS_PLL2CR) = 0x0cc1;
++ //TC6393_SYS_REG(TC6393_SYS_ConfigCR) = 0x1;
++ //TC6393_SYS_REG(TC6393_SYS_PLL1CR1) = 0xdf00;
++ //TC6393_SYS_REG(TC6393_SYS_PLL1CR2) = 0x002c;
++ //TC6393_SYS_REG(TC6393_SYS_ConfigCR) = 0x0;
++ TC6393_SYS_REG(TC6393_SYS_CCR) = 0x1310;
++
++ TC6393_SYS_REG(TC6393_SYS_MCR) = 0x80AA;
++
++ /* GPIO */
++ TC6393_SYS_REG(TC6393_SYS_GPER) = 0x3300; /* 15-0 GPO */
++// TC6393_SYS_REG(TC6393_SYS_GPOOECR1) = TC6393_GPO_OE;
++// TC6393_SYS_REG(TC6393_SYS_GPODSR1) = TC6393_CARD_VCC_ON;/* 15-0 GPO set */
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) = TC6393_CARD_VCC_ON | TC6393_CHARGE_OFF_JC;/* 15-0 GPO set */
++ TC6393_SYS_REG(TC6393_SYS_GPOOECR1) = TC6393_GPO_OE;
++
++}
++
++void tc6393_resume(void)
++{
++ tc6393_init();
++}
++EXPORT_SYMBOL(tc6393_resume);
++
++void tc6393_suspend(void)
++{
++ reset_scoop_jc_gpio(SCP_JC_TC3693_L3V_ON);
++ reset_scoop_gpio(SCP_TC6393_REST_IN);
++ reset_scoop_jc_gpio(SCP_JC_TC6393_SUSPEND);
++ set_GPIO_mode(GPIO11_3_6MHz|GPIO_OUT);
++ GPSR0 = GPIO_bit(GPIO11_3_6MHz);
++}
++EXPORT_SYMBOL(tc6393_suspend);
++
++#ifdef CONFIG_PM
++static int ga_pm_callback(struct pm_dev* pm_dev, pm_request_t req, void *data)
++{
++ switch (req) {
++ case PM_SUSPEND:
++ break;
++ case PM_RESUME:
++ break;
++ }
++ return 0;
++}
++#endif
++
++void resume_init(void)
++{
++// MSC0 = 0x02da02da; //msc0
++// MSC1 = 0x7FFC7FFC; //msc1
++// MSC2 = 0x7FF47FFC; //msc2
++
++// GPDR0=0xDB828000;
++// GPDR1=0xFFB6A887;
++// GPDR2=0x0001FFFF;
++
++// PGSR0 = 0x01008000; //Sleep State
++// PGSR1 = 0x00160802; //Sleep State
++// PGSR2 = 0x0001C000; //Sleep State
++
++#if 0
++ GRER0 = (GRER0 | 1); //raising
++ GFER0 = (GFER0 | 1); //failing
++
++ ICLR = 0;
++
++ ICMR |= (1 << 10); //bit10, gpio02_80 enable
++ ICMR |= (1 << 8); //bit8, gpio00 enable
++
++ ICCR = 1; //Only enabled and unmasked will bring the Cotulla out of IDLE mode.
++#endif
++
++ CKEN |= 0x03;
++ CKEN |= CKEN3_SSP;
++ CKEN |= CKEN1_PWM1;
++}
++
++static int __init tosa_hw_init(void)
++{
++
++ /* scoop initialize */
++ scoop_init();
++ scoop_jc_init();
++
++ /* initialize I2C */
++ i2c_init(1);
++
++ /* TC6393 initialize */
++ tc6393_init();
++
++ /* initialize SSP & CS */
++ pxa_nssp_init();
++
++ /* initialize AC97 */
++ tosa_ac97_init();
++
++ return 0;
++}
++
++static void __init tosa_init_irq(void)
++{
++ int irq;
++
++ pxa_init_irq();
++
++ /* setup extra tosa irqs */
++ TC6393_SYS_REG(TC6393_SYS_IRR) = 0;
++ TC6393_SYS_REG(TC6393_SYS_IMR) = 0xbf;
++ for (irq = TC6393_IRQ(0); irq <= TC6393_IRQ(7); irq++) {
++ irq_desc[irq].valid = 1;
++ irq_desc[irq].probe_ok = 1;
++ irq_desc[irq].mask_ack = tc6393_mask_and_ack_irq;
++ irq_desc[irq].mask = tc6393_mask_irq;
++ irq_desc[irq].unmask = tc6393_unmask_irq;
++ }
++ GPDR(GPIO_TC6393_INT) &= ~GPIO_bit(GPIO_TC6393_INT);
++ set_GPIO_IRQ_edge( GPIO_TC6393_INT, GPIO_FALLING_EDGE );
++ setup_arm_irq( IRQ_GPIO_TC6393_INT, &tc6393_irq );
++
++ tosa_hw_init();
++}
++
++static int __init tosa_init(void)
++{
++#ifdef CONFIG_PM
++ extern u32 sharpsl_emergency_off;
++#endif
++
++ // enable batt_fault
++ PMCR = 0x01;
++
++ /* charge check */
++ if ((GPLR(GPIO_AC_IN) & GPIO_bit(GPIO_AC_IN)) == 0) {
++ sharpsl_charge_start();
++ }
++
++ //sharpsl_kick_jacket_check_queue();
++
++ printk("RCSR = %d\n",RCSR);
++
++#ifdef CONFIG_PM
++ /* fatal check */
++#ifndef CONFIG_ARCH_PXA_TOSA_SKIP
++ if ( !(GPLR(GPIO_MAIN_BAT_LOW) & GPIO_bit(GPIO_MAIN_BAT_LOW)) ) {
++ printk("corgi.c : main batt low\n");
++ sharpsl_emergency_off = 1;
++ pxa_suspend();
++ }
++#endif /* CONFIG_ARCH_PXA_TOSA_SKIP */
++
++ if ( RCSR == 0x01 || RCSR == 0x6) {
++ printk("full reset !\n");
++ sharpsl_emergency_off = 1;
++ }
++
++ ga_pm_dev = pm_register(PM_SYS_DEV, 0, ga_pm_callback);
++#endif
++
++ return 0;
++}
++
++__initcall(tosa_init);
++
++static void __init fixup_tosa(struct machine_desc *desc,
++ struct param_struct *params,
++ char **cmdline, struct meminfo *mi)
++{
++ SET_BANK (0, 0xa0000000, 64*1024*1024);
++ mi->nr_banks = 1;
++#if defined(CONFIG_BLK_DEV_INITRD)
++ setup_ramdisk (1, 0, 0, 8192);
++ setup_initrd (__phys_to_virt(0xa1000000), 4*1024*1024);
++ ROOT_DEV = MKDEV(RAMDISK_MAJOR,0);
++#elif defined(CONFIG_MTD)
++ ROOT_DEV = MKDEV(31, 0); /* /dev/mtdblock0 */
++#endif
++
++#ifdef CONFIG_SHARPSL_BOOTLDR_PARAMS
++ if (params->u1.s.page_size != PAGE_SIZE) {
++ params->u1.s.page_size = PAGE_SIZE;
++ params->u1.s.nr_pages = 32 * 1024 * 1024 / PAGE_SIZE;
++ params->u1.s.ramdisk_size = 0;
++ params->u1.s.flags = FLAG_READONLY | FLAG_RDLOAD | FLAG_RDPROMPT;
++ params->u1.s.rootdev = ROOT_DEV;
++ params->u1.s.initrd_start = 0;
++ params->u1.s.initrd_size = 0;
++ params->u1.s.rd_start = 0;
++ params->u1.s.system_rev = 0;
++ params->u1.s.system_serial_low = 0;
++ params->u1.s.system_serial_high = 0;
++ strcpy(params->commandline, CONFIG_CMDLINE);
++ }
++#endif
++
++ sharpsl_get_param();
++}
++
++static struct map_desc tosa_io_desc[] __initdata = {
++ /* virtual physical length domain r w c b */
++ /* TC6393 (LCDC, USBC, NANDC) */
++ { 0xf1000000, TOSA_LCDC_PHYS, 0x00400000, DOMAIN_IO, 1, 1, 0, 0 },
++ /* SCOOP2 for internel CF */
++ { 0xf2000000, TOSA_CF_PHYS, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 },
++ /* SCOOP2 for Jacket CF */
++ { 0xf2200000, TOSA_SCOOP_PHYS, 0x00001000, DOMAIN_IO, 0, 1, 0, 0 },
++ /* Nor Flash */
++ { 0xef000000, 0x00000000, 0x00800000, DOMAIN_IO, 1, 1, 1, 0 },
++ LAST_DESC
++};
++
++static void __init tosa_map_io(void)
++{
++ pxa_map_io();
++ iotable_init(tosa_io_desc);
++
++ set_GPIO_mode(GPIO_ON_RESET | GPIO_IN);
++
++ /* setup sleep mode values */
++ PWER = 0x00000002;
++ PFER = 0x00000000;
++ PRER = 0x00000002;
++ PGSR0 = 0x00000000;
++ PGSR1 = 0x00FF0002;
++ PGSR2 = 0x00014000;
++ PCFR |= PCFR_OPDE;
++}
++
++MACHINE_START(TOSA, "SHARP Tosa")
++ MAINTAINER("Lineo uSolutions, Inc.")
++ BOOT_MEM(0xa0000000, 0x40000000, io_p2v(0x40000000))
++#ifdef CONFIG_SHARPSL_BOOTLDR_PARAMS
++ BOOT_PARAMS(0xa0000100)
++#endif
++ FIXUP(fixup_tosa)
++ MAPIO(tosa_map_io)
++ INITIRQ(tosa_init_irq)
++MACHINE_END
++
+diff -Nur linux_c860_org/arch/arm/mach-pxa/tosa_ac97.c linux/arch/arm/mach-pxa/tosa_ac97.c
+--- linux_c860_org/arch/arm/mach-pxa/tosa_ac97.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/arch/arm/mach-pxa/tosa_ac97.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,587 @@
++/*
++ * linux/asm/arch/mach-pxa/tosa_ac97.c
++ *
++ * AC97 interface for the Tosa chip
++ *
++ * (C) Copyright 2004 Lineo Solutions, Inc.
++ *
++ * Based on:
++ * linux/drivers/sound/pxa-ac97.c -- AC97 interface for the Cotula chip
++ * Author: Nicolas Pitre
++ * Created: Aug 15, 2001
++ * Copyright: MontaVista Software Inc.
++ *
++ * linux/drivers/sound/ac97_codec.c -- Generic AC97 mixer/modem module
++ * Derived from ac97 mixer in maestro and trident driver.
++ * Copyright 2000 Silicon Integrated System Corporation
++ *
++ * ChangeLong:
++ * 1-Nov-2003 Sharp Corporation for Tosa
++ *
++ * 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 <linux/init.h>
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/bitops.h>
++#include <linux/slab.h>
++#include <linux/pci.h>
++#include <linux/completion.h>
++#include <linux/delay.h>
++#include <linux/poll.h>
++#include <linux/sound.h>
++#include <linux/soundcard.h>
++#include <linux/ac97_codec.h>
++
++#include <asm/hardware.h>
++#include <asm/irq.h>
++#include <asm/uaccess.h>
++#include <asm/semaphore.h>
++#include <asm/dma.h>
++
++#include <asm/arch/tosa_wm9712.h>
++
++#ifdef CONFIG_PM
++#include <asm/sharp_apm.h>
++#endif
++
++#define CODEC_ID_BUFSZ 14
++
++typedef struct {
++ unsigned short ctl_val, pdown_val;
++} power_mode_t;
++
++static power_mode_t pwr_values[] = {
++ { 0x6F00, 0x7FFF }, // Off
++ { 0x4600, 0x73FF }, // Rec with no HP
++ { 0x4100, 0x1F77 }, // Play with no HP
++ { 0x4600, 0x73FF }, // Rec with Stereo HP
++ { 0x0100, 0x1CEF }, // Play with Stereo HP
++ { 0x4600, 0x73FF }, // Rec with Mic HP
++ { 0x0100, 0x1EEF }, // Play with Mic HP
++ { 0x4700, 0x7FFF }, // Tablet (waiting for pen-down)
++ { 0x4700, 0x7FFF }, // Tablet (continuous conversion)
++ { 0x4700, 0x7BFF }, // Enable MICBIAS for detecting Mic HP
++ { 0x0000, 0x0000 }, // Full power
++};
++static const int num_of_pwr_values = sizeof(pwr_values)/sizeof(pwr_values[0]);
++
++static power_mode_t power_mode_status[NUM_OF_WM9712_DEV];
++static power_mode_t cur_power_status;
++
++struct ac97_codec *codec;
++
++static struct completion CAR_completion;
++static DECLARE_MUTEX(CAR_mutex);
++
++/************************************************************
++ * Debug
++ ************************************************************/
++#define DBG_LEVEL 0
++#define DBG_L1 1
++#define DBG_L2 2
++#define DBG_L3 3
++#define DEBUG(level, x, args...) \
++ if ( level <= DBG_LEVEL ) printk("%s: " x,__FUNCTION__ ,##args)
++
++/************************************************************
++ * AC97 Sequense
++ ************************************************************/
++typedef struct {
++ u16 val;
++ u8 seq;
++} ac97_seq_t;
++static volatile u32 *ac97_addr = NULL;
++static ac97_seq_t ac97_seq;
++
++#define AC97_SEQ_READ1 0x01
++#define AC97_SEQ_READ2 0x02
++#define AC97_SEQ_READ_DONE 0x03
++#define AC97_SEQ_WRITE_DONE 0x04
++
++/************************************************************
++ * AC97 IDs
++ ************************************************************/
++typedef struct {
++ u32 id;
++ char *name;
++ struct ac97_ops *ops;
++ int flags;
++} ac97_ids_t;
++
++static struct ac97_ops null_ops = { NULL, NULL, NULL };
++
++static ac97_ids_t ac97_ids[] = {
++ { 0x574D4C12, "Wolfson WM9711/WM9712", &null_ops },
++};
++
++/************************************************************
++ * Timer interrupt for AC97 lost interrupt
++ ************************************************************/
++static unsigned char ac97_timer_on = 0;
++static struct timer_list ac97_timer;
++static void ac97_timer_set(unsigned long);
++static void ac97_timer_clear(void);
++
++static void ac97_timer_func(unsigned long data)
++{
++ ac97_timer_on = 0;
++ if ( (ac97_seq.seq == AC97_SEQ_READ_DONE) ||
++ (ac97_seq.seq == AC97_SEQ_WRITE_DONE) ) {
++ DEBUG(DBG_L2, "CAR_completion\n");
++ complete(&CAR_completion);
++ ac97_timer_set(data);
++ } else {
++ printk(KERN_WARNING "AC97: lost interrupt(%08lx)\n", data);
++ ac97_timer_set(data);
++ }
++}
++
++static void ac97_timer_clear(void)
++{
++ if ( ac97_timer_on )
++ del_timer(&ac97_timer);
++ ac97_timer_on = 0;
++}
++
++static void ac97_timer_set(unsigned long val)
++{
++ ac97_timer_clear();
++ init_timer(&ac97_timer);
++ ac97_timer.data = val;
++ ac97_timer.function = ac97_timer_func;
++ ac97_timer.expires = jiffies + HZ;
++ add_timer(&ac97_timer);
++ ac97_timer_on = 1;
++}
++
++/************************************************************
++ * AC97 functions
++ ************************************************************/
++#define AC97_TIMEOUT_VAL 0x10000
++static u16 pxa_ac97_read(struct ac97_codec *codec, u8 reg)
++{
++ down(&CAR_mutex);
++ lock_FCS(LOCK_FCS_AC97_SUB, 1);
++ if ( !(CAR & CAR_CAIP) ) {
++ ac97_addr = (volatile u32 *)&PAC_REG_BASE + (reg >> 1);
++#ifdef USE_AC97_INTERRUPT
++ ac97_seq.val = -1;
++ ac97_seq.seq = AC97_SEQ_READ1;
++
++ init_completion(&CAR_completion);
++
++ ac97_timer_set(ac97_seq.seq);
++
++ (void)*ac97_addr;
++ wait_for_completion(&CAR_completion);
++
++ ac97_timer_clear();
++#else
++ {
++ u16 data=0;
++ int timeout;
++ // dummy
++ GSR |= GSR_RDCS;
++ GSR |= GSR_SDONE;
++ data = *ac97_addr;
++ timeout = 0;
++ while((GSR & GSR_SDONE)==0 && timeout++<AC97_TIMEOUT_VAL);
++ if ((GSR & GSR_RDCS)!=0 || timeout>=AC97_TIMEOUT_VAL) {
++ GSR |= GSR_RDCS;
++ printk(KERN_CRIT __FUNCTION__": AC97 is busy.\n");
++ lock_FCS(LOCK_FCS_AC97_SUB, 0);
++ up(&CAR_mutex);
++ return data;
++ }
++
++ // actual read
++ GSR |= GSR_SDONE;
++ data = *ac97_addr;
++ timeout = 0;
++ while((GSR & GSR_SDONE)==0 && timeout++<AC97_TIMEOUT_VAL);
++ if ((GSR & GSR_RDCS)!=0 || timeout>=AC97_TIMEOUT_VAL) {
++ GSR |= GSR_RDCS;
++ printk(KERN_CRIT __FUNCTION__": AC97 is busy.\n");
++ }
++ lock_FCS(LOCK_FCS_AC97_SUB, 0);
++ up(&CAR_mutex);
++ return data;
++ }
++#endif // end USE_AC97_INTERRUPT
++ } else {
++ printk(KERN_CRIT __FUNCTION__": CAR_CAIP already set\n");
++ }
++ lock_FCS(LOCK_FCS_AC97_SUB, 0);
++ up(&CAR_mutex);
++ return ac97_seq.val;
++}
++
++static void pxa_ac97_write(struct ac97_codec *codec, u8 reg, u16 val)
++{
++ down(&CAR_mutex);
++ lock_FCS(LOCK_FCS_AC97_SUB, 1);
++ if ( !(CAR & CAR_CAIP) ) {
++ ac97_addr = (volatile u32 *)&PAC_REG_BASE + (reg >> 1);
++#ifdef USE_AC97_INTERRUPT
++ ac97_seq.val = val;
++ ac97_seq.seq = AC97_SEQ_WRITE_DONE;
++ init_completion(&CAR_completion);
++
++ ac97_timer_set(ac97_seq.seq);
++
++ *ac97_addr = ac97_seq.val;
++ wait_for_completion(&CAR_completion);
++
++ ac97_timer_clear();
++#else
++ {
++ int timeout=0;
++ GSR |= GSR_CDONE;
++ *ac97_addr = val;
++ while((GSR & GSR_CDONE)==0 && timeout++<AC97_TIMEOUT_VAL);
++ if (timeout>=AC97_TIMEOUT_VAL) {
++ printk(KERN_CRIT __FUNCTION__": AC97 is busy.\n");
++ }
++ }
++#endif // end USE_AC97_INTERRUPT
++ } else {
++ printk(KERN_CRIT __FUNCTION__": CAR_CAIP already set\n");
++ }
++ lock_FCS(LOCK_FCS_AC97_SUB, 0);
++ up(&CAR_mutex);
++}
++
++static void pxa_ac97_bit_clear(struct ac97_codec *codec, u8 reg, u16 val)
++{
++ unsigned short dat = codec->codec_read(codec, reg);
++ dat &= ~val;
++ codec->codec_write(codec, reg, dat);
++}
++
++static void pxa_ac97_bit_set(struct ac97_codec *codec, u8 reg, u16 val)
++{
++ unsigned short dat = codec->codec_read(codec, reg);
++ dat |= val;
++ codec->codec_write(codec, reg, dat);
++}
++
++static void pxa_ac97_irq(int irq, void *dev_id, struct pt_regs *regs)
++{
++ if (GSR & (GSR_SDONE|GSR_CDONE)) {
++ GSR = GSR_SDONE|GSR_CDONE;
++
++ ac97_timer_set(ac97_seq.seq);
++
++ switch ( ac97_seq.seq ) {
++ case AC97_SEQ_READ1:
++ ac97_seq.seq = AC97_SEQ_READ2;
++ (void)*ac97_addr;
++ break;
++ case AC97_SEQ_READ2:
++ ac97_seq.seq = AC97_SEQ_READ_DONE;
++ if ( GSR & GSR_RDCS ) {
++ GSR |= GSR_RDCS;
++ printk(KERN_CRIT __FUNCTION__": read codec register timeout.\n");
++ }
++ ac97_seq.val = *ac97_addr;
++ break;
++ case AC97_SEQ_READ_DONE:
++ udelay(20);
++ complete(&CAR_completion);
++ break;
++ case AC97_SEQ_WRITE_DONE:
++ complete(&CAR_completion);
++ break;
++ }
++ }
++}
++
++static struct ac97_codec pxa_ac97_codec = {
++ codec_read: pxa_ac97_read,
++ codec_write: pxa_ac97_write,
++ codec_bit_clear: pxa_ac97_bit_clear,
++ codec_bit_set: pxa_ac97_bit_set,
++};
++
++static DECLARE_MUTEX(pxa_ac97_mutex);
++static int pxa_ac97_refcount = 0;
++
++static char *codec_id(u16 id1, u16 id2, char *buf)
++{
++ if(id1&0x8080) {
++ snprintf(buf, CODEC_ID_BUFSZ, "0x%04x:0x%04x", id1, id2);
++ } else {
++ buf[0] = (id1 >> 8);
++ buf[1] = (id1 & 0xFF);
++ buf[2] = (id2 >> 8);
++ snprintf(buf+3, CODEC_ID_BUFSZ - 3, "%d", id2&0xFF);
++ }
++ return buf;
++}
++
++static int ac97_check_modem(struct ac97_codec *codec)
++{
++ /* Check for an AC97 1.0 soft modem (ID1) */
++ if(codec->codec_read(codec, AC97_RESET) & 2)
++ return 1;
++ /* Check for an AC97 2.x soft modem */
++ codec->codec_write(codec, AC97_EXTENDED_MODEM_ID, 0L);
++ if(codec->codec_read(codec, AC97_EXTENDED_MODEM_ID) & 1)
++ return 1;
++ return 0;
++}
++
++static int ac97_probe(struct ac97_codec *codec)
++{
++ u16 id1, id2;
++ u16 audio;
++ int i;
++ char cidbuf[CODEC_ID_BUFSZ];
++
++ codec->codec_write(codec, AC97_RESET, 0L);
++
++ /* also according to spec, we wait for codec-ready state */
++ if ( codec->codec_wait ) codec->codec_wait(codec);
++ else udelay(10);
++
++ if ( (audio = codec->codec_read(codec, AC97_RESET)) & 0x8000 ) {
++ printk(KERN_ERR "ac97_codec: %s ac97 codec not present\n",
++ (codec->id & 0x2) ? (codec->id&1 ? "4th" : "Tertiary")
++ : (codec->id&1 ? "Secondary": "Primary"));
++ return 0;
++ }
++
++ /* probe for Modem Codec */
++ codec->modem = ac97_check_modem(codec);
++ codec->name = NULL;
++ codec->codec_ops = &null_ops;
++
++ id1 = codec->codec_read(codec, AC97_VENDOR_ID1);
++ id2 = codec->codec_read(codec, AC97_VENDOR_ID2);
++ for (i = 0; i < ARRAY_SIZE(ac97_ids); i++) {
++ if (ac97_ids[i].id == ((id1 << 16) | id2)) {
++ codec->type = ac97_ids[i].id;
++ codec->name = ac97_ids[i].name;
++ codec->codec_ops = ac97_ids[i].ops;
++ codec->flags = ac97_ids[i].flags;
++ break;
++ }
++ }
++
++ /* A device which thinks its a modem but isnt */
++ if ( codec->flags & AC97_DELUDED_MODEM )
++ codec->modem = 0;
++
++ if ( codec->name == NULL )
++ codec->name = "Unknown";
++ printk(KERN_INFO "ac97_codec: AC97 %s codec, id: %s (%s)\n",
++ codec->modem ? "Modem" : (audio ? "Audio" : ""),
++ codec_id(id1, id2, cidbuf), codec->name);
++ return 1;
++}
++
++int pxa_ac97_get(struct ac97_codec **codec, unsigned char *ac97_on)
++{
++ if ( *ac97_on != 0 ) return 0;
++
++ *codec = NULL;
++ down(&pxa_ac97_mutex);
++
++ DEBUG(DBG_L1, "count(%d)\n", pxa_ac97_refcount);
++ pxa_ac97_refcount++;
++ up(&pxa_ac97_mutex);
++ *codec = &pxa_ac97_codec;
++ *ac97_on = 1;
++
++ return 0;
++}
++
++void pxa_ac97_put(unsigned char *ac97_on)
++{
++ if ( *ac97_on == 0 ) return;
++ down(&pxa_ac97_mutex);
++ pxa_ac97_refcount--;
++ DEBUG(DBG_L1, "count(%d)\n", pxa_ac97_refcount);
++ up(&pxa_ac97_mutex);
++ *ac97_on = 0;
++}
++
++unsigned int ac97_set_dac_rate(struct ac97_codec *codec, unsigned int rate)
++{
++ unsigned int new_rate = rate;
++ u32 dacp;
++ u32 mast_vol, phone_vol, mono_vol, pcm_vol;
++ u32 mute_vol = 0x8000; /* The mute volume? */
++
++ if( rate != codec->codec_read(codec, AC97_PCM_FRONT_DAC_RATE) ) {
++ /* Mute several registers */
++ mast_vol = codec->codec_read(codec, AC97_MASTER_VOL_STEREO);
++ mono_vol = codec->codec_read(codec, AC97_MASTER_VOL_MONO);
++ phone_vol = codec->codec_read(codec, AC97_HEADPHONE_VOL);
++ pcm_vol = codec->codec_read(codec, AC97_PCMOUT_VOL);
++ codec->codec_write(codec, AC97_MASTER_VOL_STEREO, mute_vol);
++ codec->codec_write(codec, AC97_MASTER_VOL_MONO, mute_vol);
++ codec->codec_write(codec, AC97_HEADPHONE_VOL, mute_vol);
++ codec->codec_write(codec, AC97_PCMOUT_VOL, mute_vol);
++
++ /* Power down the DAC */
++ dacp=codec->codec_read(codec, AC97_POWER_CONTROL);
++ codec->codec_write(codec, AC97_POWER_CONTROL, dacp|0x0200);
++ /* Load the rate and read the effective rate */
++ codec->codec_write(codec, AC97_PCM_FRONT_DAC_RATE, rate);
++ new_rate=codec->codec_read(codec, AC97_PCM_FRONT_DAC_RATE);
++ /* Power it back up */
++ codec->codec_write(codec, AC97_POWER_CONTROL, dacp);
++
++ /* Restore volumes */
++ codec->codec_write(codec, AC97_MASTER_VOL_STEREO, mast_vol);
++ codec->codec_write(codec, AC97_MASTER_VOL_MONO, mono_vol);
++ codec->codec_write(codec, AC97_HEADPHONE_VOL, phone_vol);
++ codec->codec_write(codec, AC97_PCMOUT_VOL, pcm_vol);
++ }
++ return new_rate;
++}
++
++unsigned int ac97_set_adc_rate(struct ac97_codec *codec, unsigned int rate)
++{
++ unsigned int new_rate = rate;
++ u32 dacp;
++ if( rate != codec->codec_read(codec, AC97_PCM_LR_ADC_RATE) ) {
++ /* Power "Up" the ADC */
++ dacp=codec->codec_read(codec, AC97_POWER_CONTROL);
++ dacp &= ~(0x1<<8);
++ codec->codec_write(codec, AC97_POWER_CONTROL, dacp);
++
++ codec->codec_write(codec, AC97_PCM_LR_ADC_RATE, rate);
++ new_rate=codec->codec_read(codec, AC97_PCM_LR_ADC_RATE);
++
++ /* Power it back up */
++ codec->codec_write(codec, AC97_POWER_CONTROL, dacp);
++ }
++ return new_rate;
++}
++
++void wm9712_power_mode(int dev, int mode)
++{
++ int i;
++ power_mode_t new_power_status;
++ dev %= NUM_OF_WM9712_DEV;
++ mode %= num_of_pwr_values;
++ // printk("wm9712_power_mode(%d,%d)\n",dev,mode);
++ power_mode_status[dev] = pwr_values[mode];
++ // create new state
++ new_power_status = power_mode_status[0];
++ for (i=1; i<NUM_OF_WM9712_DEV; i++) {
++ new_power_status.ctl_val &= power_mode_status[i].ctl_val;
++ new_power_status.pdown_val &= power_mode_status[i].pdown_val;
++ }
++ // compare with current state
++ if (new_power_status.pdown_val != cur_power_status.pdown_val) {
++ ac97_write(AC97_POWERDOWN, new_power_status.pdown_val);
++ cur_power_status.pdown_val = new_power_status.pdown_val;
++ // printk("change status PWDOWN = %04X\n", cur_power_status.pdown_val);
++ }
++ if (new_power_status.ctl_val != cur_power_status.ctl_val) {
++ ac97_write(AC97_POWER_CONTROL, new_power_status.ctl_val);
++ cur_power_status.ctl_val = new_power_status.ctl_val;
++ // printk("change status PW_CTRL = %04X\n", cur_power_status.ctl_val);
++ }
++
++}
++
++void tosa_ac97_init(void)
++{
++ int i;
++ int ret,timeo;
++
++ lock_FCS(LOCK_FCS_AC97, 1);
++ codec = NULL;
++ pxa_ac97_refcount = 0;
++ set_GPIO_mode(GPIO31_SYNC_AC97_MD);
++ set_GPIO_mode(GPIO30_SDATA_OUT_AC97_MD);
++ set_GPIO_mode(GPIO28_BITCLK_AC97_MD);
++ set_GPIO_mode(GPIO29_SDATA_IN_AC97_MD);
++ set_GPIO_mode(GPIO20_DREQ0_MD);
++
++ for (i=0; i<NUM_OF_WM9712_DEV; i++) {
++ power_mode_status[i].ctl_val = pwr_values[WM9712_PWR_OFF].ctl_val;
++ power_mode_status[i].pdown_val = pwr_values[WM9712_PWR_OFF].pdown_val;
++ }
++ memset(&cur_power_status,0,sizeof(cur_power_status));
++
++#if 1 // move from ac97_get
++ CKEN |= CKEN2_AC97;
++ /* AC97 power on sequense */
++ while ( 1 ) {
++ GCR = 0;
++ udelay(100);
++ GCR |= GCR_COLD_RST;
++ udelay(5);
++ GCR |= GCR_WARM_RST;
++ udelay(5);
++ for ( timeo = 0x10000; timeo > 0; timeo-- ) {
++ if ( GSR & GSR_PCR ) break;
++ //X schedule();
++ mdelay(5);
++ }
++ if( timeo > 0 ) break;
++ printk(KERN_WARNING "AC97 power on retry!!\n");
++ }
++
++#ifdef USE_AC97_INTERRUPT
++ if( (ret = request_irq(IRQ_AC97, pxa_ac97_irq, 0, "AC97", NULL)) ) {
++ lock_FCS(LOCK_FCS_AC97, 0);
++ return ret;
++ }
++ }
++#endif
++
++ if ( (ret = ac97_probe(&pxa_ac97_codec)) != 1 ) {
++#ifdef USE_AC97_INTERRUPT
++ free_irq(IRQ_AC97, NULL);
++#endif
++ GCR = GCR_ACLINK_OFF;
++ CKEN &= ~CKEN2_AC97;
++ lock_FCS(LOCK_FCS_AC97, 0);
++ return ret;
++ }
++ pxa_ac97_write(&pxa_ac97_codec, AC97_EXTENDED_STATUS, 1);
++ /*
++ * Setting AC97 GPIO
++ * i/o function
++ * GPIO1: input EAR_IN signal
++ * GPIO2: output IRQ signal
++ * GPIO3: output PENDOWN signal
++ * GPIO4: input MASK signal
++ * GPIO5: input DETECT MIC signal
++ */
++ pxa_ac97_bit_clear(&pxa_ac97_codec, AC97_GPIO_FUNC,
++ ((1<<2)|(1<<3)|(1<<4)|(1<<5)));
++ pxa_ac97_bit_clear(&pxa_ac97_codec, AC97_GPIO_CONFIG,(1<<2)|(1<<3));
++ pxa_ac97_bit_set(&pxa_ac97_codec, AC97_GPIO_CONFIG, (1<<1)|(1<<4)|(1<<5));
++#endif
++ codec = &pxa_ac97_codec;
++ lock_FCS(LOCK_FCS_AC97, 0);
++}
++
++void tosa_ac97_exit(void)
++{
++#if 1 // move from ac97_put
++ GCR = GCR_ACLINK_OFF;
++ CKEN &= ~CKEN2_AC97;
++#ifdef USE_AC97_INTERRUPT
++ free_irq(IRQ_AC97, NULL);
++#endif
++ pxa_ac97_refcount = 0;
++#endif
++}
++
++EXPORT_SYMBOL(ac97_set_dac_rate);
++EXPORT_SYMBOL(ac97_set_adc_rate);
++EXPORT_SYMBOL(pxa_ac97_get);
++EXPORT_SYMBOL(pxa_ac97_put);
++EXPORT_SYMBOL(wm9712_power_mode);
+diff -Nur linux_c860_org/arch/arm/mach-pxa/tosa_battery.c linux/arch/arm/mach-pxa/tosa_battery.c
+--- linux_c860_org/arch/arm/mach-pxa/tosa_battery.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/arch/arm/mach-pxa/tosa_battery.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,2603 @@
++/*
++ * linux/arch/arm/mach-pxa/tosa_battery.c
++ *
++ * Based on
++ * linux/arch/arm/mach-sa1100/collie_battery.c
++ * linux/arch/arm/mach-pxa/sharpsl_battery.c
++ *
++ * Battery routines for tosa (SHARP)
++ *
++ * Copyright (C) 2004 SHARP
++ *
++ * 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.
++ *
++ * ChangeLog:
++ *
++ */
++
++
++/* this driver support the following functions
++ * - apm_get_power_status
++ * - charge proc
++ */
++
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/poll.h>
++#include <linux/types.h>
++#include <linux/stddef.h>
++#include <linux/timer.h>
++#include <linux/fcntl.h>
++#include <linux/slab.h>
++#include <linux/stat.h>
++#include <linux/proc_fs.h>
++#include <linux/miscdevice.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/pm.h>
++#include <linux/kernel.h>
++#include <linux/smp_lock.h>
++#include <linux/apm_bios.h>
++#include <linux/delay.h>
++
++#include <asm/io.h>
++#include <asm/hardware.h>
++#include <asm/irq.h>
++#include <asm/mach/irq.h>
++#include <asm/hardirq.h>
++
++#include <asm/sharp_char.h>
++#include <asm/sharp_keycode.h>
++#include <linux/ac97_codec.h>
++#include <asm/arch/tosa_wm9712.h>
++#include <asm/arch/keyboard_tosa.h>
++#include <asm/arch/tosa.h>
++#include <video/tosa_backlight.h>
++#include <asm/arch/sharpsl_battery.h>
++
++#define TOSA_BATTERY_FAILSAFE_LOWBAT
++#define TOSA_BATTERY_AD_OFFSET (0)
++
++#define TOSA_OFF_CHARGE_FAILSAFE
++
++#define TOSA_FOR_ENGLISH
++
++#ifdef DEBUG
++#define DPRINTK(x, args...) printk(x,##args)
++#else
++#define DPRINTK(x, args...) if ( msglevel & 1 ) printk(x,##args);
++#endif
++
++#ifdef DEBUG2
++#define DPRINTK2(x, args...) printk( x,##args)
++#else
++#define DPRINTK2(x, args...) if ( msglevel & 2 ) printk(x,##args);
++#endif
++
++#ifdef DEBUG3
++#define DPRINTK3(x, args...) printk( x,##args)
++#else
++#define DPRINTK3(x, args...) if ( msglevel & 4 ) printk(x,##args);
++#endif
++
++#ifdef DEBUG4
++#define DPRINTK4(x, args...) printk( x,##args)
++#else
++#define DPRINTK4(x, args...) if ( msglevel & 8 ) printk(x,##args);
++#endif
++
++#ifdef TOSA_FOR_ENGLISH
++#ifdef DEBUG5
++#define DPRINTK5(x, args...) printk( x,##args)
++#else
++#define DPRINTK5(x, args...) if ( msglevel & 16 ) printk("[CHKCHGFULL]: "x,##args);
++#endif
++#endif // TOSA_FOR_ENGLISH
++
++#define CHECK_LOG (0) // for DEBUG
++#if CHECK_LOG
++int gStartTime = 0;
++#endif
++
++/*
++ * The battery device is one of the misc char devices.
++ * This is its minor number.
++ */
++#define BATTERY_MINOR_DEV 215
++
++#define SEL_MAIN 0
++#define SEL_JACKET 1
++#define SEL_BU 2
++
++static void tosa_charge_on_off(int,int);
++
++#define CHARGE_ON() ( { CHARGE_0_ON(); CHARGE_1_ON(); } )
++#define CHARGE_OFF() ( { CHARGE_0_OFF(); CHARGE_1_OFF(); } )
++
++#define CHARGE_0_ON() tosa_charge_on_off(SEL_MAIN, 1)
++#define CHARGE_0_OFF() tosa_charge_on_off(SEL_MAIN, 0)
++
++#define CHARGE_1_ON() tosa_charge_on_off(SEL_JACKET, 1)
++#define CHARGE_1_OFF() tosa_charge_on_off(SEL_JACKET, 0)
++
++extern void sharpsl_charge_err_off(void);
++#define CHARGE_LED_ON() set_led_status(SHARP_LED_CHARGER,LED_CHARGER_CHARGING)
++#define CHARGE_LED_OFF() set_led_status(SHARP_LED_CHARGER,LED_CHARGER_OFF)
++#define CHARGE_LED_ERR() set_led_status(SHARP_LED_CHARGER,LED_CHARGER_ERROR)
++#define CHARGE_LED_ERR_OFF() sharpsl_charge_err_off()
++
++#define SHARPSL_BATTERY_STATUS_HIGH APM_BATTERY_STATUS_HIGH
++#define SHARPSL_BATTERY_STATUS_LOW APM_BATTERY_STATUS_LOW
++#define SHARPSL_BATTERY_STATUS_VERYLOW APM_BATTERY_STATUS_VERY_LOW
++#define SHARPSL_BATTERY_STATUS_CRITICAL APM_BATTERY_STATUS_CRITICAL
++
++#define APM_BATL_CLOSE 0
++#define APM_BATL_OPEN 1
++#define SHARPSL_BAT_LOCKED_STATUS \
++ (( GPLR(GPIO_BAT_LOCKED) & GPIO_bit(GPIO_BAT_LOCKED) ) ? APM_BATL_CLOSE : APM_BATL_OPEN)
++
++static int tosa_ac_line_status(int);
++#define SHARPSL_AC_LINE_STATUS tosa_ac_line_status(20 /* msec */)
++
++#define SHARPSL_MAIN_BATT_FATAL \
++ (( GPLR(GPIO_BAT0_LOW) & GPIO_bit(GPIO_BAT0_LOW) ) ? 0 : 1 )
++
++#define SHARPSL_JACKET_BATT_FATAL \
++ (( GPLR(GPIO_BAT1_LOW) & GPIO_bit(GPIO_BAT1_LOW) ) ? 0 : 1 )
++
++#define SHARPSL_MAIN_BATT_FULL \
++ (( GPLR(GPIO_BAT0_CRG) & GPIO_bit(GPIO_BAT0_CRG) ) ? 1 : 0 )
++
++#define SHARPSL_JACKET_BATT_FULL \
++ (( GPLR(GPIO_BAT1_CRG) & GPIO_bit(GPIO_BAT1_CRG) ) ? 1 : 0 )
++
++
++#define SHARPSL_APO_DEFAULT ( ( 3 * 60 ) * SHARPSL_PM_TICK ) // 3 min
++#define SHARPSL_LPO_DEFAULT ( 20 * SHARPSL_PM_TICK ) // 20 sec
++
++
++#define SHARPSL_PM_TICK ( HZ ) // 1 sec
++#define SHARPSL_BATCHK_TIME ( SHARPSL_PM_TICK ) // 1 sec
++#define SHARPSL_MAIN_GOOD_COUNT ( HZ / SHARPSL_PM_TICK ) // 1 sec
++#define SHARPSL_MAIN_NOGOOD_COUNT ( HZ / SHARPSL_PM_TICK ) // 1 sec
++
++#define SHARPSL_BATTERY_CK_TIME ( 10*60*1*100 ) // 10min ( base jiffies )
++#define TOSA_TEMP_READ_WAIT_TIME (5) // 5msec [Fix]
++#define TOSA_BATTERY_READ_WAIT_TIME (5) // 5msec [Fix]
++#define TOSA_DISCHARGE_WAIT_TIME (10) // 10msec
++
++#define TOSA_MAIN_BATTERY_EXIST_THRESH (3600) // 2.9V [Fix]
++#define TOSA_JACKET_BATTERY_EXIST_THRESH (3600) // 2.9V [Fix]
++
++#define TOSA_MAIN_BATTERY_ERR_THRESH (1200) // 2.9V [Fix]
++#define TOSA_JACKET_BATTERY_ERR_THRESH (1200) // 2.9V [Fix]
++
++
++#define TOSA_MAIN_BATT_FATAL_ACIN_VOLT (1572+TOSA_BATTERY_AD_OFFSET) // 3.80V [Fix]
++#define TOSA_JACKET_BATT_FATAL_ACIN_VOLT (1572+TOSA_BATTERY_AD_OFFSET) // 3.80V [Fix]
++#define TOSA_MAIN_BATT_FATAL_NOACIN_VOLT (1551+TOSA_BATTERY_AD_OFFSET) // 3.75V [Fix]
++#define TOSA_JACKET_BATT_FATAL_NOACIN_VOLT (1551+TOSA_BATTERY_AD_OFFSET) // 3.75V [Fix]
++
++
++#define TOSA_JC_CHECK_WAIT_TIME 10 // 10*10mS Jacket Check [Fix]
++#define TOSA_JC_CHECK_TIMES 5 // 5 times
++
++#define SHARPSL_TOSA_WAIT_CO_TIME 20 // 20 Sec
++ //NOTICE !! you want to change this value , so you must change
++ // alarm check mirgin time ( +30 ) in the sharpsl_power.c.
++
++#define SHARPSL_CAUTION_CONTRAST TOSA_BL_CAUTION_CONTRAST
++#define SHARPSL_RESET_CONTRAST TOSA_BL_RESET_CONTRAST
++#define SHARPSL_LIMIT_CONTRAST(x) tosa_bl_set_limit_contrast(x)
++
++#define CHARGE_STEP1 1
++#define CHARGE_STEP2 2
++#define CHARGE_STEP3 3
++#define CHARGE_STEP4 4
++#define CHARGE_STEP5 5
++#define CHARGE_STEP6 6
++#define CHARGE_STEP7 7
++#define CHARGE_STEP_END 10
++#define CHARGE_STEP_EXIT 11
++#define CHARGE_STEP_ERROR 12
++#define SHARPSL_CHARGE_RETRY_CNT 1 // 10 min
++#define SHARPSL_AFTER_CHARGE_CNT 0 // 0
++
++#define SHARPSL_CNV_VALUE_NUM 10
++#define SHARPSL_CNV_TEMP_NUM 10
++
++
++typedef struct BatteryThresh {
++ int voltage;
++ int percentage;
++ int status;
++} BATTERY_THRESH;
++
++/*** prototype *********************************************************************/
++static int tosa_get_jacket_status(void);
++static void tosa_request_off(void);
++static int tosa_battery_thread_main(void);
++static int tosa_get_sel_battery(int); //[Fix]
++static int tosa_read_battery(int); //[Fix]
++static int tosa_read_temp(int); //[Fix]
++static int tosa_read_battery_avg(int);
++static int tosa_read_temp_avg(int); //[Fix]
++static int tosa_check_battery_error(int,int);
++static int tosa_check_battery_exist(int,int); //[Fix]
++static int tosa_check_main_battery_error(void);
++static int tosa_check_jacket_battery_error(void);
++static int tosa_check_main_battery_not_exist(void); //[Fix]
++static int tosa_check_jacket_battery_not_exist(void); //[Fix]
++static int tosa_read_main_battery(void);
++static int tosa_read_jacket_battery(void);
++static int tosa_read_backup_battery(void);
++static int tosa_check_main_batt_fatal(void);
++static int tosa_check_jacket_batt_fatal(void);
++static void tosa_charge_start(void); //[Fix]
++static void tosa_charge_stop(void); //[Fix]
++static void tosa_reset_battery_info(void);
++static void tosa_jacket_kick_timer(void);
++static void tosa_jacket_interrupt(int,void *,struct pt_regs *);
++static void tosa_ac_interrupt(int,void *,struct pt_regs *);
++static void tosa_main_batt_fatal_interrupt(int,void *,struct pt_regs *);
++static void tosa_jacket_batt_fatal_interrupt(int,void *,struct pt_regs *);
++static int tosa_cnv_battery(int,int);
++static void tosa_get_all_battery(void); //[Fix]
++static int tosa_get_sel_charge_percent(int,int);
++static BATTERY_THRESH *tosa_get_sel_level(int,int);
++static int tosa_get_dac_value(int); //[Fix]
++static int get_select_val(int *);
++static int tosa_get_jacket_status_for_on(void);
++static void tosa_off_jc_card_limit(void);
++
++
++/* thread */
++static int tosa_charge_on(void*);
++static int tosa_charge_off(void*);
++static int tosa_battery_thread(void*);
++static int tosa_fatal_check(void*);
++static int tosa_jacket_check(void*);
++
++
++/*** extern ***********************************************************************/
++extern u32 apm_wakeup_src_mask;
++extern int counter_step_contrast;
++extern void handle_scancode(unsigned char,int);
++extern unsigned long ssp_get_dac_val(unsigned long,int);
++extern int sharpsl_is_power_mode_sensitive_battery(void);
++extern int ac97_ad_input(int,unsigned short *);
++extern int set_led_status(int,int);
++extern unsigned short set_scoop_jc_gpio(unsigned short);
++extern unsigned short reset_scoop_jc_gpio(unsigned short);
++
++#ifdef CONFIG_PM
++extern int pass_charge_flag;
++//extern int counter_step_save;
++#endif
++
++/*** variables ********************************************************************/
++
++/* BL 5-3 */
++BATTERY_THRESH sharpsl_main_battery_thresh_fl[] = {
++ { 1663, 100, SHARPSL_BATTERY_STATUS_HIGH},
++ { 1605, 75, SHARPSL_BATTERY_STATUS_HIGH},
++ { 1564, 50, SHARPSL_BATTERY_STATUS_HIGH},
++ { 1510, 25, SHARPSL_BATTERY_STATUS_LOW},
++ { 1435, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
++ { 0, 0, SHARPSL_BATTERY_STATUS_CRITICAL},
++};
++
++/* BL 2-0 */
++BATTERY_THRESH sharpsl_main_battery_thresh_nofl[] = {
++ { 1679, 100, SHARPSL_BATTERY_STATUS_HIGH},
++ { 1617, 75, SHARPSL_BATTERY_STATUS_HIGH},
++ { 1576, 50, SHARPSL_BATTERY_STATUS_HIGH},
++ { 1530, 25, SHARPSL_BATTERY_STATUS_LOW},
++ { 1448, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
++ { 0, 0, SHARPSL_BATTERY_STATUS_CRITICAL},
++};
++
++/* BL 5-3 */
++BATTERY_THRESH sharpsl_jacket_battery_thresh_fl[] = {
++ { 1663, 100, SHARPSL_BATTERY_STATUS_HIGH},
++ { 1605, 75, SHARPSL_BATTERY_STATUS_HIGH},
++ { 1564, 50, SHARPSL_BATTERY_STATUS_HIGH},
++ { 1510, 25, SHARPSL_BATTERY_STATUS_LOW},
++ { 1435, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
++ { 0, 0, SHARPSL_BATTERY_STATUS_CRITICAL},
++};
++
++/* BL 2-0 */
++BATTERY_THRESH sharpsl_jacket_battery_thresh_nofl[] = {
++ { 1679, 100, SHARPSL_BATTERY_STATUS_HIGH},
++ { 1617, 75, SHARPSL_BATTERY_STATUS_HIGH},
++ { 1576, 50, SHARPSL_BATTERY_STATUS_HIGH},
++ { 1530, 25, SHARPSL_BATTERY_STATUS_LOW},
++ { 1448, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
++ { 0, 0, SHARPSL_BATTERY_STATUS_CRITICAL},
++};
++
++BATTERY_THRESH sharpsl_bu_battery_thresh_fl[] = {
++ { 3226, 100, SHARPSL_BATTERY_STATUS_HIGH},
++ { 0, 0, SHARPSL_BATTERY_STATUS_VERYLOW},
++};
++
++BATTERY_THRESH sharpsl_bu_battery_thresh_nofl[] = {
++ { 3226, 100, SHARPSL_BATTERY_STATUS_HIGH},
++ { 0, 0, SHARPSL_BATTERY_STATUS_VERYLOW},
++};
++
++
++#if 1
++static struct file_operations sharpsl_battery_fops = {
++};
++#else
++static struct file_operations sharpsl_battery_fops = {
++ owner: THIS_MODULE,
++ read: do_read,
++ poll: do_poll,
++ ioctl: do_ioctl,
++ open: do_open,
++ release: do_release,
++};
++#endif
++
++static struct miscdevice battery_device = {
++ BATTERY_MINOR_DEV,
++ "battery",
++ &sharpsl_battery_fops
++};
++
++
++int charge_status = 0; /* charge status 1 : charge 0: not charge */
++int sharpsl_off_charge = 0; /* 0: on , 1 : off */
++
++unsigned int APOCnt = SHARPSL_APO_DEFAULT;
++unsigned int APOCntWk = 0;
++unsigned int LPOCnt = SHARPSL_LPO_DEFAULT;
++unsigned int LPOCntWk = 0;
++static DECLARE_WAIT_QUEUE_HEAD(battery_queue);
++static int msglevel;
++
++int sharpsl_main_battery = SHARPSL_BATTERY_STATUS_HIGH;
++int sharpsl_main_battery_percentage = 100;
++int sharpsl_jacket_battery = SHARPSL_BATTERY_STATUS_HIGH;
++int sharpsl_jacket_battery_percentage = 100;
++int sharpsl_bu_battery = SHARPSL_BATTERY_STATUS_HIGH;
++int sharpsl_bu_battery_percentage = 100;
++
++int sharpsl_bat_locked = 0;
++
++int sharpsl_jacket_exist = 0;
++int sharpsl_jacket_batt_exist = 0;
++static int tosa_jacket_status_change = 0;
++static int tosa_jacket_check_only = 0;
++static int tosa_cardslot_error = 0;
++#define ERR_CARDSLOT_CF1 (0x1<<0)
++#define ERR_CARDSLOT_CF2 (0x1<<1)
++#define ERR_CARDSLOT_SD (0x1<<2)
++
++int sharpsl_ac_status = APM_AC_OFFLINE;
++
++static int MainCntWk = SHARPSL_MAIN_GOOD_COUNT;
++static int MainCnt = SHARPSL_MAIN_NOGOOD_COUNT;
++static int back_ac_status = -1;
++
++static int back_battery_status = -1;
++static int back_jacket_battery_status = -1;
++static int back_bu_battery_status = -1;
++static int sharpsl_check_time = SHARPSL_BATCHK_TIME;
++
++static int sharpsl_main_status_bk = SHARPSL_BATTERY_STATUS_HIGH;
++static int sharpsl_main_percent_bk = 100;
++static int sharpsl_jacket_status_bk = SHARPSL_BATTERY_STATUS_HIGH;
++static int sharpsl_jacket_percent_bk = 100;
++static int sharpsl_bu_status_bk = SHARPSL_BATTERY_STATUS_HIGH;
++static int sharpsl_bu_percent_bk = 100;
++
++int sharpsl_main_bk_flag = 0;
++
++static struct timer_list ac_kick_timer;
++static struct timer_list jacket_kick_timer;
++
++#ifdef CONFIG_PM
++static struct pm_dev *battery_pm_dev; /* registered PM device */
++#endif
++
++static int battery_off_flag = 0; /* charge : suspend while get adc */
++static int is_ac_adaptor = 0; /* AC adaptor in/out */
++
++static DECLARE_WAIT_QUEUE_HEAD(charge_on_queue);
++static DECLARE_WAIT_QUEUE_HEAD(charge_off_queue);
++static DECLARE_WAIT_QUEUE_HEAD(battery_waitqueue);
++static DECLARE_WAIT_QUEUE_HEAD(fatal_chk_queue);
++static DECLARE_WAIT_QUEUE_HEAD(jacket_chk_queue);
++
++static int is_enabled_off = 1;
++
++int sharpsl_charge_cnt = 0;
++int sharpsl_charge_dummy_cnt = 1;
++
++static int sharpsl_ad_main[SHARPSL_CNV_VALUE_NUM+1];
++static int sharpsl_ad_index_main = 0;
++static int sharpsl_ad_jacket[SHARPSL_CNV_VALUE_NUM+1];
++static int sharpsl_ad_index_jacket = 0;
++static int sharpsl_ad_bu[SHARPSL_CNV_VALUE_NUM+1];
++static int sharpsl_ad_index_bu = 0;
++
++static int tosa_jacket_check_count = 0;
++static unsigned int tosa_jacket_state = 0;
++static int tosa_dac_init = 0;
++
++
++static int sharpsl_change_battery_status = 0;
++
++static int tosa_jc_card_limit_sel = 0;
++
++static int tosa_off_main_batt_full = 0;
++static int tosa_off_jacket_batt_full = 0;
++
++static int tosa_off_check_jacket_req = 0;
++
++// for DEBUG
++static int sharpsl_debug_flag = 0;
++
++#ifdef TOSA_OFF_CHARGE_FAILSAFE
++#define TOSA_CHARGE_FULL_MAX_TIME (4*60*60) // 4H
++#define TOSA_CHARGE_FULL_DIFF_VOLT (20) // about 50mV
++static int tosa_charge_full_enable = 0;
++static int tosa_charge_full_counter = 0;
++static int tosa_charge_full_main_batt = 0;
++static int tosa_charge_full_jacket_batt = 0;
++#endif //TOSA_OFF_CHARGE_FAILSAFE
++
++#ifdef TOSA_FOR_ENGLISH
++static int tosa_charge_full_state = 0;
++static int tosa_decide_charge_full_counter = 0;
++int logo_lang = 0; // (default): En , (1): Jp
++#define TOSA_DECIDE_CHARGE_FULL_COUNTER ( 60*100 ) // 1min ( base jiffies )
++#define DISCONNECT_AC (0)
++#define CONNECT_AC (1)
++#define DETECT_CHARGE_FULL (2)
++#define DECIDE_CHARGE_FULL (3)
++#define GET_CHARGE_FULL_STATE() tosa_charge_full_state
++#define SET_CHARGE_FULL_STATE(state) (tosa_charge_full_state = state)
++#define IS_ENGLISH_MODEL() (logo_lang != 1)
++#endif // TOSA_FOR_ENGLISH
++
++void set_jacketslot_error( int on )
++{
++ if (on) {
++ if (!(tosa_cardslot_error&ERR_CARDSLOT_CF2)) {
++ tosa_cardslot_error |= ERR_CARDSLOT_CF2;
++ sharpsl_change_battery_status = 1;
++ wake_up_interruptible(&battery_waitqueue);
++ }
++ } else {
++ if (tosa_cardslot_error&ERR_CARDSLOT_CF2) {
++ tosa_cardslot_error &= ~ERR_CARDSLOT_CF2;
++ sharpsl_change_battery_status = 1;
++ wake_up_interruptible(&battery_waitqueue);
++ }
++ }
++}
++
++int current_cardslot_error( int num )
++{
++ if (num==0) {
++ return (tosa_cardslot_error & ERR_CARDSLOT_CF1)?1:0;
++ } else { // slot 1
++ return (tosa_cardslot_error & ERR_CARDSLOT_CF2)?1:0;
++ }
++}
++
++/*** apm subroutines ***********************************************************/
++static int tosa_get_jacket_status(void)
++{
++ if (tosa_jacket_check_count == 0){
++ tosa_jacket_state = GPLR(GPIO_JACKET_DETECT) & GPIO_bit(GPIO_JACKET_DETECT);
++ tosa_jacket_check_count++;
++ return 0;
++ }
++
++ if (tosa_jacket_state == (GPLR(GPIO_JACKET_DETECT) & GPIO_bit(GPIO_JACKET_DETECT))){
++ if (tosa_jacket_check_count++ >= TOSA_JC_CHECK_TIMES){
++ if (tosa_jacket_state){
++ sharpsl_jacket_exist = 0; // non-exsistent (unit)
++ sharpsl_jacket_batt_exist = 0; // non-exststent (battery)
++ DPRINTK2("[BATT] jacket was removed.\n");
++ }else{
++ sharpsl_jacket_exist = 1; // exsistent (unit)
++ DPRINTK2("JACKET STATUS [ EXIST ]\n");
++ if(!tosa_check_jacket_battery_not_exist()){
++ sharpsl_jacket_batt_exist = 1; // exsistent (battery)
++ DPRINTK2("JACKET BATTERY STATUS [ EXIST ]\n");
++ }else{
++ sharpsl_jacket_batt_exist = 0; // non-exststent (battery)
++ DPRINTK2("JACKET BATTERY STATUS [ NOT EXIST ]\n");
++ }
++ }
++ // jacket battery charge control.
++ if(sharpsl_jacket_batt_exist){
++ CHARGE_1_ON();
++ }else{
++ CHARGE_1_OFF();
++ }
++
++ tosa_jacket_status_change = 1; // jacket status is changed.
++
++ if(!tosa_jacket_check_only){
++ sharpsl_change_battery_status = 1; // change status
++ wake_up_interruptible(&battery_waitqueue);
++ }
++
++ tosa_jacket_check_count = 0;
++ return 1;
++ }
++ }else{
++ tosa_jacket_check_count = 0;
++ }
++ return 0;
++}
++
++static int tosa_get_jacket_status_for_on(void)
++{
++ tosa_jacket_check_count = 0;
++ tosa_jacket_check_only = 1;
++ while(1){
++ if(tosa_get_jacket_status()){
++ mdelay(TOSA_JC_CHECK_WAIT_TIME*10);
++ break;
++ }
++ mdelay(TOSA_JC_CHECK_WAIT_TIME*10);
++ }
++ tosa_jacket_check_only = 0;
++ return 0;
++}
++
++int sharpsl_apm_get_power_status(u_char *ac_line_status,
++ u_char *battery_main_status,
++ u_char *battery_jacket_status,
++ u_char *battery_bu_status,
++ u_char *battery_flag,
++ u_char *battery_main_percentage,
++ u_char *battery_jacket_percentage,
++ u_char *battery_bu_percentage,
++ u_short *battery_main_life,
++ u_short *battery_jacket_life,
++ u_short *battery_bu_life)
++
++{
++ // set ac status
++ *ac_line_status = sharpsl_ac_status;
++
++ // set battery_status main
++ *battery_main_status = sharpsl_main_battery;
++ *battery_jacket_status = sharpsl_jacket_battery;
++ *battery_bu_status = sharpsl_bu_battery;
++
++ // set battery percentage
++ *battery_main_percentage = sharpsl_main_battery_percentage;
++ *battery_jacket_percentage = sharpsl_jacket_battery_percentage;
++ *battery_bu_percentage = sharpsl_bu_battery_percentage;
++
++ if ( *ac_line_status == APM_AC_ONLINE ){
++ *battery_main_percentage = 100;
++ *battery_jacket_percentage = 100;
++ *battery_bu_percentage = 100;
++ }
++
++ // set battery_flag
++ if ( *battery_main_status == SHARPSL_BATTERY_STATUS_VERYLOW ){
++ *battery_flag = (1 << 5);
++ }else{
++ *battery_flag = (1 << *battery_main_status);
++ }
++
++ // chk charge status
++#ifdef TOSA_FOR_ENGLISH
++ if ( charge_status && (!IS_ENGLISH_MODEL() || (GET_CHARGE_FULL_STATE() != DECIDE_CHARGE_FULL))) {
++#else
++ if ( charge_status ) {
++#endif // TOSA_FOR_ENGLISH
++ *battery_main_status = APM_BATTERY_STATUS_CHARGING;
++ *battery_jacket_status = APM_BATTERY_STATUS_CHARGING;
++ *battery_bu_status = APM_BATTERY_STATUS_CHARGING;
++ *battery_flag = (1 << 3);
++ // charging now, so can not get battery percentage.
++ *battery_main_percentage = -1;
++ *battery_jacket_percentage = -1;
++ *battery_bu_percentage = -1;
++ }
++
++ // set battery life
++ *battery_main_life = APM_BATTERY_LIFE_UNKNOWN;
++ *battery_jacket_life = APM_BATTERY_LIFE_UNKNOWN;
++ *battery_bu_life = APM_BATTERY_LIFE_UNKNOWN;
++
++ return APM_SUCCESS;
++}
++
++
++int sharpsl_apm_get_bp_status(u_char *ac_line_status,
++ u_char *battery_status,
++ u_char *battery_flag,
++ u_char *battery_percentage,
++ u_short *battery_life)
++{
++ *ac_line_status = APM_AC_OFFLINE;//collie_ac_status;
++
++ if ( sharpsl_jacket_batt_exist ){
++ /* In charging stage ,battery status */
++ if ( charge_status ){
++#ifdef TOSA_FOR_ENGLISH
++ if ( IS_ENGLISH_MODEL() && (GET_CHARGE_FULL_STATE() == DECIDE_CHARGE_FULL) ) {
++ *battery_status = SHARPSL_BATTERY_STATUS_HIGH;
++ *battery_percentage = 100;
++ *battery_flag = (1 << SHARPSL_BATTERY_STATUS_HIGH);
++ }else{
++#endif // TOSA_FOR_ENGLISH
++ *battery_status = APM_BATTERY_STATUS_CHARGING;
++ *battery_flag = (1 << 3);//0x08;
++ /* set battery percentage */
++ *battery_percentage = -1;
++#ifdef TOSA_FOR_ENGLISH
++ }
++#endif // TOSA_FOR_ENGLISH
++ }else{
++ *battery_status = sharpsl_jacket_battery;
++ if( !(*battery_status) ){
++ *battery_flag = 0x01;
++ }else if(*battery_status == APM_BATTERY_STATUS_VERY_LOW){
++ *battery_flag = 0x20;
++ }else{
++ *battery_flag = *battery_status << 1;
++ }
++ /* set battery percentage */
++ *battery_percentage = sharpsl_jacket_battery_percentage;
++ }
++ }else{
++ *battery_status = APM_BATTERY_STATUS_FAULT;
++ *battery_flag = APM_BATTERY_STATUS_FAULT << 1;
++ /* set battery percentage */
++ *battery_percentage = 0;
++ }
++
++ /* set battery life */
++ *battery_life = APM_BATTERY_LIFE_UNKNOWN;
++
++ return APM_SUCCESS;
++}
++
++
++/*** battery main thread ***********************************************************/
++// waitms : waitms*10 msec wait
++// flag : 0 : check battery w/o reflcting battery status.
++// 1 : check battery w/ reflcting battery status.
++// 2 : check battery w/ refresh battery status.
++void sharpsl_kick_battery_check(int before_waitms,int after_waitms,int flag)
++{
++ MainCntWk = MainCnt + 1;
++
++ // before check battery
++ mdelay(before_waitms*10);
++
++ switch (flag) {
++ case 0:
++ tosa_battery_thread_main();
++ break;
++ case 1:
++ if ( sharpsl_main_bk_flag == 0 ) {
++ sharpsl_main_bk_flag = 1;
++ tosa_battery_thread_main();
++ sharpsl_main_bk_flag = 0;
++ } else {
++ tosa_battery_thread_main();
++ }
++ break;
++ case 2:
++ back_battery_status = -1;
++ back_jacket_battery_status = -1;
++ back_bu_battery_status = -1;
++ tosa_battery_thread_main();
++ break;
++ }
++
++ // after check battery
++ mdelay(after_waitms*10);
++}
++
++static void tosa_request_off(void)
++{
++ is_enabled_off = 0;
++ handle_scancode(SLKEY_OFF|KBDOWN , 1);
++ mdelay(10);
++ handle_scancode(SLKEY_OFF|KBUP , 0);
++}
++
++static int tosa_battery_thread_main(void)
++{
++ // start battery check
++ if ((jiffies > SHARPSL_BATTERY_CK_TIME) && (sharpsl_main_bk_flag == 0)) {
++ sharpsl_main_bk_flag = 1;
++ DPRINTK2("start check battery ! \n");
++ }
++
++ // get ac status. if change ac status , chk main battery.
++ sharpsl_ac_status = SHARPSL_AC_LINE_STATUS;
++ if ( back_ac_status != sharpsl_ac_status ) {
++ MainCntWk = MainCnt + 1; // chk battery
++ sharpsl_change_battery_status = 1; // change status
++ wake_up_interruptible(&battery_waitqueue);
++ }
++ back_ac_status = sharpsl_ac_status;
++
++ // get battery status.
++ tosa_get_all_battery();
++
++ if ( sharpsl_ac_status == APM_AC_ONLINE ){
++ set_scoop_jc_gpio(SCP_JC_CARD_LIMIT_SEL); // non-limited
++ tosa_jc_card_limit_sel = 0;
++ }else if( !sharpsl_jacket_batt_exist ){
++ reset_scoop_jc_gpio(SCP_JC_CARD_LIMIT_SEL); // limited
++ tosa_jc_card_limit_sel = 1;
++ }else if(!sharpsl_main_bk_flag){
++ //default.
++ set_scoop_jc_gpio(SCP_JC_CARD_LIMIT_SEL); // non-limited
++ tosa_jc_card_limit_sel = 0;
++ }else if (sharpsl_jacket_battery == SHARPSL_BATTERY_STATUS_VERYLOW ||
++ sharpsl_jacket_battery == SHARPSL_BATTERY_STATUS_CRITICAL){
++ reset_scoop_jc_gpio(SCP_JC_CARD_LIMIT_SEL); // limited
++ tosa_jc_card_limit_sel = 1;
++ }else {
++ set_scoop_jc_gpio(SCP_JC_CARD_LIMIT_SEL); // non-limited
++ tosa_jc_card_limit_sel = 0;
++ }
++
++ // if battery is low , backlight driver become to save power.
++ if ( ( ( sharpsl_main_battery == SHARPSL_BATTERY_STATUS_VERYLOW ) ||
++ ( sharpsl_main_battery == SHARPSL_BATTERY_STATUS_CRITICAL ) ) &&
++ ( (sharpsl_main_battery != back_battery_status) || (sharpsl_jacket_battery != back_jacket_battery_status) ) &&
++ ( sharpsl_main_bk_flag ) &&
++ ( ( !sharpsl_jacket_batt_exist ) || ( tosa_jc_card_limit_sel ) ) ) {
++ SHARPSL_LIMIT_CONTRAST(SHARPSL_CAUTION_CONTRAST);
++ } else if ( (sharpsl_main_battery != back_battery_status) ||
++ (sharpsl_jacket_battery != back_jacket_battery_status) ) {
++ SHARPSL_LIMIT_CONTRAST(SHARPSL_RESET_CONTRAST);
++ }
++
++ back_battery_status = sharpsl_main_battery;
++ back_jacket_battery_status = sharpsl_jacket_battery;
++ back_bu_battery_status = sharpsl_bu_battery;
++
++ // good or ac in --> GOOD_COUNT
++ // low or very low --> NOGOOD_COUNT
++ if ( ( sharpsl_main_battery == SHARPSL_BATTERY_STATUS_HIGH ) || ( sharpsl_ac_status == APM_AC_ONLINE ) )
++ MainCnt = SHARPSL_MAIN_GOOD_COUNT;
++ else
++ MainCnt = SHARPSL_MAIN_NOGOOD_COUNT;
++ DPRINTK("[BATT] MainCnt = %d\n",MainCnt);
++
++ if(tosa_jacket_status_change && sharpsl_main_bk_flag){
++ int battlow = 1;
++
++ tosa_jacket_status_change = 0; // status clear.
++
++ // main battery low irq control.
++ if(tosa_check_main_batt_fatal()){
++ DPRINTK2("[BATT] IRQ: Disable BAT0\n");
++ disable_irq(IRQ_GPIO_BAT0_LOW);
++ }else{
++ DPRINTK2("[BATT] IRQ: Enable BAT0\n");
++ enable_irq(IRQ_GPIO_BAT0_LOW);
++ battlow = 0;
++ }
++
++ // jacket battery low irq control.
++ if(sharpsl_jacket_batt_exist){
++ if(tosa_check_jacket_batt_fatal()){
++ // jacket battery is fatal.
++ DPRINTK2("[BATT] IRQ: Disable BAT1 (jacket battery fatal)\n");
++ disable_irq(IRQ_GPIO_BAT1_LOW);
++ }else{
++ DPRINTK2("[BATT] IRQ: Enable BAT1 (status change)\n");
++ enable_irq(IRQ_GPIO_BAT1_LOW);
++ battlow = 0;
++ }
++ }else{
++ // no jacket.
++ DPRINTK2("[BATT] IRQ: Disable BAT1 (no jacket battery)\n");
++ disable_irq(IRQ_GPIO_BAT1_LOW);
++ }
++ if(battlow)
++ tosa_request_off();
++ }
++
++#ifdef TOSA_BATTERY_FAILSAFE_LOWBAT
++ // check critical ( check fatal )
++ if ( ( sharpsl_main_battery == SHARPSL_BATTERY_STATUS_CRITICAL ) &&
++ is_enabled_off && sharpsl_main_bk_flag ) {
++
++ if( !sharpsl_jacket_batt_exist ){
++ tosa_request_off();
++ DPRINTK2("[BATT] <* Fail-Safe *> Fatal Off by ADC \n");
++ }else{
++ if( sharpsl_jacket_battery == SHARPSL_BATTERY_STATUS_CRITICAL ){
++ tosa_request_off();
++ DPRINTK2("[BATT] <* Fail-Safe *>Fatal Off by ADC \n");
++ }
++ }
++ }
++#endif
++
++ DPRINTK("[BATT] LOWBAT0=%d\n",tosa_check_main_batt_fatal());
++ DPRINTK("[BATT] LOWBAT1=%d\n",tosa_check_jacket_batt_fatal());
++
++#ifdef TOSA_BATTERY_FAILSAFE
++ if( sharpsl_jacket_batt_exist ){
++ // jacket battery exists. (main battery always exists.)
++ if( sharpsl_main_bk_flag && is_enabled_off &&
++ tosa_check_main_batt_fatal() && tosa_check_jacket_batt_fatal() ){
++
++ tosa_request_off();
++ DPRINTK("Fatal Off by DETECTOR\n");
++ }
++ }else{
++ if( sharpsl_main_bk_flag && is_enabled_off &&
++ ( ( GPLR(GPIO_BAT0_LOW) & GPIO_bit(GPIO_BAT0_LOW) ) == 0 ) ){
++ tosa_request_off();
++ DPRINTK("Fatal Off by DETECTOR\n");
++ }
++ }
++#endif
++
++ if(TC6393_SYS_REG(TC6393_SYS_GPODSR1) & TC6393_CHARGE_OFF){
++ CHARGE_0_ON();
++ }else{
++ }
++
++#ifdef TOSA_FOR_ENGLISH
++ if(IS_ENGLISH_MODEL() && sharpsl_main_bk_flag){
++
++ int detected_charge_full = 0;
++
++ // In other than the Japanese version,
++ // the following processings are performed.
++ // Charging LED is switched off on a full charge.
++
++ switch(GET_CHARGE_FULL_STATE()){
++ case DISCONNECT_AC:
++ DPRINTK5("DISCONNECT_AC\n");
++ if( sharpsl_ac_status == APM_AC_ONLINE ){
++ DPRINTK5("* (%d) ac in !\n",tosa_charge_full_state);
++ SET_CHARGE_FULL_STATE(CONNECT_AC);
++ }
++ break;
++ case CONNECT_AC:
++ DPRINTK5("CONNECT_AC\n");
++ if( sharpsl_ac_status == APM_AC_OFFLINE ){
++ DPRINTK5("* (%d) ac out !\n",tosa_charge_full_state);
++ SET_CHARGE_FULL_STATE(DISCONNECT_AC);
++ break;
++ }
++
++ DPRINTK5("* (%d) ac in !\n",tosa_charge_full_state);
++ DPRINTK5("* TC6393_SYS_GPOOECR1 = %08x\n",TC6393_SYS_REG(TC6393_SYS_GPOOECR1));
++ DPRINTK5("* TC6393_SYS_GPODSR1 = %08x\n",TC6393_SYS_REG(TC6393_SYS_GPODSR1));
++ tosa_decide_charge_full_counter = 0;
++ detected_charge_full = SHARPSL_MAIN_BATT_FULL;
++ DPRINTK5("* (%d) main charge full = %d!\n",tosa_charge_full_state,detected_charge_full);
++ if( detected_charge_full && sharpsl_jacket_exist && sharpsl_jacket_batt_exist ){
++ detected_charge_full = SHARPSL_JACKET_BATT_FULL;
++ DPRINTK5("* (%d) jacket charge full = %d!\n",tosa_charge_full_state,detected_charge_full);
++ }
++ if( detected_charge_full ){
++ SET_CHARGE_FULL_STATE(DETECT_CHARGE_FULL);
++ tosa_decide_charge_full_counter = jiffies;
++ break;
++ }
++ break;
++ case DETECT_CHARGE_FULL:
++ DPRINTK5("DETECT_CHARGE_FULL !\n",tosa_charge_full_state);
++ DPRINTK5("* TC6393_SYS_GPOOECR1 = %08x\n",TC6393_SYS_REG(TC6393_SYS_GPOOECR1));
++ DPRINTK5("* TC6393_SYS_GPODSR1 = %08x\n",TC6393_SYS_REG(TC6393_SYS_GPODSR1));
++ if( sharpsl_ac_status == APM_AC_OFFLINE ){
++ DPRINTK5("* (%d) ac out !\n",tosa_charge_full_state);
++ SET_CHARGE_FULL_STATE(DISCONNECT_AC);
++ break;
++ }
++ DPRINTK5("* (%d) c = %d \n",tosa_charge_full_state,(jiffies - tosa_decide_charge_full_counter));
++ detected_charge_full = SHARPSL_MAIN_BATT_FULL;
++ DPRINTK5("* (%d) main charge full = %d!\n",tosa_charge_full_state,detected_charge_full);
++ if( detected_charge_full && sharpsl_jacket_exist && sharpsl_jacket_batt_exist ){
++ detected_charge_full = SHARPSL_JACKET_BATT_FULL;
++ DPRINTK5("* (%d) jacket charge full = %d!\n",tosa_charge_full_state,detected_charge_full);
++ }
++ if( !detected_charge_full ){
++ DPRINTK5("* (%d) canceled charge full !\n",tosa_charge_full_state);
++ SET_CHARGE_FULL_STATE(CONNECT_AC);
++ break;
++ }
++
++ if((jiffies - tosa_decide_charge_full_counter) > TOSA_DECIDE_CHARGE_FULL_COUNTER){
++ DPRINTK5("* (%d) fixed charge full !\n",tosa_charge_full_state);
++ CHARGE_LED_OFF();
++ SET_CHARGE_FULL_STATE(DECIDE_CHARGE_FULL);
++ sharpsl_change_battery_status = 1;
++ wake_up_interruptible(&battery_waitqueue);
++ break;
++ }
++ break;
++ case DECIDE_CHARGE_FULL:
++ DPRINTK5("DECIDE_CHARGE_FULL !\n",tosa_charge_full_state);
++ if( sharpsl_ac_status == APM_AC_OFFLINE ){
++ DPRINTK5("* (%d)ac out !\n",tosa_charge_full_state);
++ CHARGE_LED_OFF();
++ SET_CHARGE_FULL_STATE(DISCONNECT_AC);
++ break;
++ }
++ detected_charge_full = SHARPSL_MAIN_BATT_FULL;
++ DPRINTK5("* (%d) main charge full = %d!\n",tosa_charge_full_state,detected_charge_full);
++ if( detected_charge_full && sharpsl_jacket_exist && sharpsl_jacket_batt_exist ){
++ detected_charge_full = SHARPSL_JACKET_BATT_FULL;
++ DPRINTK5("* (%d) jacket charge full = %d!\n",tosa_charge_full_state,detected_charge_full);
++ }
++ if( !detected_charge_full ){
++ DPRINTK5("* (%d)canceled charge full !\n",tosa_charge_full_state);
++ CHARGE_LED_ON();
++ SET_CHARGE_FULL_STATE(CONNECT_AC);
++ sharpsl_change_battery_status = 1;
++ wake_up_interruptible(&battery_waitqueue);
++ break;
++ }
++ break;
++ default:
++ DPRINTK5("* (%d)error state !\n",tosa_charge_full_state);
++ SET_CHARGE_FULL_STATE(DISCONNECT_AC);
++ sharpsl_change_battery_status = 1;
++ wake_up_interruptible(&battery_waitqueue);
++ break;
++ }
++ }
++#endif // TOSA_FOR_ENGLISH
++ return 0;
++}
++
++
++static int tosa_battery_thread(void* unused)
++{
++ strcpy(current->comm, "sharpsl_bat");
++ sharpsl_check_time = SHARPSL_BATCHK_TIME;
++
++ while(1) {
++ interruptible_sleep_on_timeout((wait_queue_head_t*)&battery_queue, sharpsl_check_time );
++
++ // AC adapter is inserted , but charging not start.
++ // SW can not confirm inserted AC adapter, so kick !
++ if ( ( charge_status == 0 ) && ( sharpsl_ac_status == APM_AC_ONLINE )) {
++ wake_up(&charge_on_queue);
++ } else if ( ( charge_status == 1 ) && ( sharpsl_ac_status == APM_AC_OFFLINE )) {
++ wake_up(&charge_off_queue);
++ }
++
++ /* check battery ! */
++ tosa_battery_thread_main();
++ }
++ return 0;
++}
++
++
++
++// TOSA-FUNCTIONS
++
++static void tosa_charge_on_off(int nsel,int on)
++{
++ switch(nsel) {
++ case SEL_MAIN:
++ TC6393_SYS_REG(TC6393_SYS_GPOOECR1) |= TC6393_CHARGE_OFF;
++ if(on){
++ if((TC6393_SYS_REG(TC6393_SYS_GPODSR1) & TC6393_CHARGE_OFF) != TC6393_CHARGE_OFF){
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) |= TC6393_CHARGE_OFF;
++ mdelay(1);
++ }
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) &= ~TC6393_CHARGE_OFF;
++ mdelay(1);
++ }else{
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) |= TC6393_CHARGE_OFF;
++ }
++ break;
++ case SEL_JACKET:
++ TC6393_SYS_REG(TC6393_SYS_GPOOECR1) |= TC6393_CHARGE_OFF_JC;
++ if(on){
++ if((TC6393_SYS_REG(TC6393_SYS_GPODSR1) & TC6393_CHARGE_OFF_JC) != TC6393_CHARGE_OFF_JC){
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) |= TC6393_CHARGE_OFF_JC;
++ mdelay(1);
++ }
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) &= ~TC6393_CHARGE_OFF_JC;
++ mdelay(1);
++ }else{
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) |= TC6393_CHARGE_OFF_JC;
++ }
++ break;
++ default:
++ printk("%s: parameter error !\n",__func__);
++ break;
++ }
++}
++
++//
++// 0:main 1:jacket 2:backup
++//
++static int tosa_get_sel_battery(int nsel) //[Fix]
++{
++ int i = 0;
++ BATTERY_THRESH *thresh;
++ int voltage;
++
++ while(1) {
++ voltage = tosa_read_battery(nsel);
++ if ( voltage > 0 ) break;
++ if ( i++ > 5 ) {
++ switch(nsel) {
++ case SEL_MAIN:
++ voltage = sharpsl_main_battery_thresh_fl[0].voltage + TOSA_BATTERY_AD_OFFSET;
++ break;
++ case SEL_JACKET:
++ voltage = sharpsl_jacket_battery_thresh_fl[0].voltage + TOSA_BATTERY_AD_OFFSET;
++ break;
++ case SEL_BU:
++ voltage = sharpsl_bu_battery_thresh_fl[0].voltage + TOSA_BATTERY_AD_OFFSET;
++ break;
++ }
++ printk("please fix me! can not read battery[%d] \n",nsel);
++ break;
++ }
++ }
++
++ voltage = tosa_cnv_battery(nsel,voltage);
++ thresh = tosa_get_sel_level(nsel,voltage);
++
++ switch(nsel) {
++ case SEL_MAIN:
++ if ( sharpsl_main_bk_flag == 0 ) {
++ return sharpsl_main_battery;
++ }
++ sharpsl_main_battery = thresh->status;
++ sharpsl_main_battery_percentage = thresh->percentage;
++ break;
++ case SEL_JACKET:
++ if ( sharpsl_main_bk_flag == 0 ) {
++ return sharpsl_jacket_battery;
++ }
++ sharpsl_jacket_battery = thresh->status;
++ sharpsl_jacket_battery_percentage = thresh->percentage;
++ break;
++ case SEL_BU:
++ sharpsl_bu_battery = thresh->status;
++ sharpsl_bu_battery_percentage = thresh->percentage;
++ break;
++ }
++
++ // Value is kept until it will operate OFF and AC, once low AD comes out.
++ switch(nsel){
++ case SEL_MAIN:
++ if ( sharpsl_main_battery_percentage < sharpsl_main_percent_bk ) {
++ sharpsl_main_status_bk = sharpsl_main_battery;
++ sharpsl_main_percent_bk = sharpsl_main_battery_percentage;
++
++ sharpsl_change_battery_status = 1;
++ wake_up_interruptible(&battery_waitqueue);
++ } else {
++ sharpsl_main_battery = sharpsl_main_status_bk;
++ sharpsl_main_battery_percentage = sharpsl_main_percent_bk;
++ }
++ return sharpsl_main_battery;
++ break;
++ case SEL_JACKET:
++ if ( sharpsl_jacket_battery_percentage < sharpsl_jacket_percent_bk) {
++ sharpsl_jacket_status_bk = sharpsl_jacket_battery;
++ sharpsl_jacket_percent_bk = sharpsl_jacket_battery_percentage;
++
++ sharpsl_change_battery_status = 1;
++ wake_up_interruptible(&battery_waitqueue);
++ } else {
++ sharpsl_jacket_battery = sharpsl_jacket_status_bk;
++ sharpsl_jacket_battery_percentage = sharpsl_jacket_percent_bk;
++ }
++ return sharpsl_jacket_battery;
++ break;
++ case SEL_BU:
++ if ( sharpsl_bu_battery_percentage < sharpsl_bu_percent_bk ) {
++ sharpsl_bu_status_bk = sharpsl_bu_battery;
++ sharpsl_bu_percent_bk = sharpsl_bu_battery_percentage;
++
++ sharpsl_change_battery_status = 1;
++ wake_up_interruptible(&battery_waitqueue);
++ } else {
++ sharpsl_bu_battery = sharpsl_bu_status_bk;
++ sharpsl_bu_battery_percentage = sharpsl_bu_percent_bk;
++ }
++ return sharpsl_bu_battery;
++ break;
++ }
++ return sharpsl_main_battery;
++}
++
++// 0:main 1:jacket 2:backup
++static int tosa_read_battery(int nsel) //[Fix]
++{
++ int voltage = -1;
++
++ switch (nsel){
++ case SEL_MAIN:
++ TC6393_SYS_REG(TC6393_SYS_GPOOECR1) |= (TC6393_BAT0_V_ON | TC6393_BAT1_V_ON | TC6393_BAT_SW_ON);
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) &= ~(TC6393_BAT1_V_ON | TC6393_BAT_SW_ON);
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) |= TC6393_BAT0_V_ON;
++ mdelay(TOSA_BATTERY_READ_WAIT_TIME);
++ voltage = tosa_get_dac_value(BATT_V);
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) &= ~(TC6393_BAT0_V_ON | TC6393_BAT1_V_ON | TC6393_BAT_SW_ON);
++ DPRINTK("[BATT] main voltage = %d \n",voltage);
++ break;
++ case SEL_JACKET:
++ TC6393_SYS_REG(TC6393_SYS_GPOOECR1) |= (TC6393_BAT0_V_ON | TC6393_BAT1_V_ON | TC6393_BAT_SW_ON);
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) &= ~(TC6393_BAT0_V_ON | TC6393_BAT_SW_ON);
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) |= TC6393_BAT1_V_ON;
++ mdelay(TOSA_BATTERY_READ_WAIT_TIME);
++ voltage = tosa_get_dac_value(BATT_V);
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) &= ~(TC6393_BAT0_V_ON | TC6393_BAT1_V_ON | TC6393_BAT_SW_ON);
++ DPRINTK("[BATT] jacket voltage = %d \n",voltage);
++ break;
++ case SEL_BU:
++ TC6393_SYS_REG(TC6393_SYS_GPOOECR1) |= (TC6393_BU_CHRG_ON);
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) |= (TC6393_BU_CHRG_ON);
++ mdelay(TOSA_BATTERY_READ_WAIT_TIME);
++ voltage = tosa_get_dac_value(BU_V);
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) &= ~TC6393_BU_CHRG_ON;
++ DPRINTK("[BATT] backup voltage = %d \n",voltage);
++ break;
++ default:
++ printk("%s: parameter error !\n",__func__);
++ break;
++ }
++ return voltage;
++}
++
++static int tosa_read_temp(int nsel) //[Fix]
++{
++ int temp = -1;
++
++ switch (nsel){
++ case SEL_MAIN:
++ TC6393_SYS_REG(TC6393_SYS_GPOOECR1) |= TC6393_BAT0_TH_ON | TC6393_BAT1_TH_ON;
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) &= ~TC6393_BAT0_TH_ON;
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) |= TC6393_BAT1_TH_ON;
++ mdelay(TOSA_TEMP_READ_WAIT_TIME);
++ temp = tosa_get_dac_value(BATT_TH);
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) &= ~(TC6393_BAT0_TH_ON|TC6393_BAT1_TH_ON);
++ break;
++ case SEL_JACKET:
++ TC6393_SYS_REG(TC6393_SYS_GPOOECR1) |= TC6393_BAT0_TH_ON | TC6393_BAT1_TH_ON;
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) &= ~TC6393_BAT1_TH_ON;
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) |= TC6393_BAT0_TH_ON;
++ mdelay(TOSA_TEMP_READ_WAIT_TIME);
++ temp = tosa_get_dac_value(BATT_TH);
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) &= ~(TC6393_BAT0_TH_ON|TC6393_BAT1_TH_ON);
++ break;
++ default:
++ printk("%s: parameter error !\n",__func__);
++ break;
++ }
++ return temp;
++}
++
++static int tosa_read_battery_avg(int nsel)
++{
++ int temp,i;
++ int buff[5];
++
++ for(i=0;i<5;i++) {
++ buff[i] = tosa_read_battery(nsel);
++ }
++ temp = get_select_val(buff);
++ return temp;
++}
++
++static int tosa_read_temp_avg(int nsel) //[Fix]
++{
++ int temp,i;
++ int buff[5];
++
++ for(i=0;i<5;i++) {
++ buff[i] = tosa_read_temp(nsel);
++ }
++ temp = get_select_val(buff);
++ return temp;
++}
++
++static int tosa_check_battery_error(int nsel,int thresh)
++{
++ int temp;
++
++ if ( in_interrupt() ) {
++ printk("%s: call in interrupt.\n",__func__);
++ return 1;
++ }
++ temp = tosa_read_battery_avg(nsel);
++
++ if ( temp < thresh ) return 1; // (1) battery error!
++
++ return 0; // (0) battery ok!
++}
++
++static int tosa_check_battery_exist(int nsel,int thresh) //[Fix]
++{
++ int temp;
++
++ if ( in_interrupt() ) {
++ printk("%s: call in interrupt.<nsel:%d>\n",__func__,nsel);
++ return 1;
++ }
++ temp = tosa_read_temp_avg(nsel);
++ DPRINTK3("[BATT] batt exist check <nsel = %d, temp = %d>\n",nsel,temp);
++
++ if ( temp > thresh ) return 1; // (1) not exist
++
++ return 0; // (0) exist
++}
++
++static int tosa_check_main_battery_error(void)
++{
++ // 0: not error , 1: error
++ return tosa_check_battery_error(SEL_MAIN, TOSA_MAIN_BATTERY_ERR_THRESH);
++}
++
++static int tosa_check_jacket_battery_error(void)
++{
++ // 0: not error , 1: error
++ return tosa_check_battery_error(SEL_JACKET, TOSA_JACKET_BATTERY_ERR_THRESH);
++}
++
++static int tosa_check_main_battery_not_exist(void) //[Fix]
++{
++#ifdef TOSA_BATTERY_SKIP
++ return 0;
++#endif //TOSA_BATTERY_SKIP
++
++ // 0: exist , 1: not exist
++ return tosa_check_battery_exist(SEL_MAIN, TOSA_MAIN_BATTERY_EXIST_THRESH);
++}
++
++static int tosa_check_jacket_battery_not_exist(void) //[Fix]
++{
++ // 0: exist , 1: not exist
++ return tosa_check_battery_exist(SEL_JACKET, TOSA_JACKET_BATTERY_EXIST_THRESH);
++}
++
++static int tosa_read_main_battery(void)
++{
++ return tosa_get_sel_battery(SEL_MAIN);
++}
++
++static int tosa_read_jacket_battery(void)
++{
++ return tosa_get_sel_battery(SEL_JACKET);
++}
++
++static int tosa_read_backup_battery(void)
++{
++ return tosa_get_sel_battery(SEL_BU);
++}
++
++static int tosa_check_main_batt_fatal(void)
++{
++ int i;
++ for(i=0;i<2;i++){
++ udelay(1);
++ if(!SHARPSL_MAIN_BATT_FATAL) return 0;
++ }
++ return 1; // (1) fatal
++}
++
++static int tosa_check_jacket_batt_fatal(void)
++{
++ int i;
++ for(i=0;i<2;i++){
++ udelay(1);
++ if(!SHARPSL_JACKET_BATT_FATAL) return 0;
++ }
++ return 1; // (1) fatal
++}
++
++static void tosa_charge_start(void) //[Fix]
++{
++ if ( tosa_check_main_battery_not_exist() ) {
++
++ /* error led on */
++ CHARGE_LED_ERR();
++
++ /* charge status flag reset */
++ charge_status = 0;
++
++ } else {
++
++ /* led on */
++ CHARGE_LED_OFF();
++ CHARGE_LED_ON();
++
++ /* charge status flag set */
++ charge_status = 1;
++ }
++ sharpsl_change_battery_status = 1;
++ wake_up_interruptible(&battery_waitqueue);
++}
++
++static void tosa_charge_stop(void) //[Fix]
++{
++ if ( tosa_check_main_battery_not_exist() ){
++
++ /* error led on */
++ CHARGE_LED_ERR();
++
++ /* charge status flag reset */
++ charge_status = 0;
++
++ }else{
++ /* led off */
++ CHARGE_LED_OFF();
++
++ /* charge status flag reset */
++ charge_status = 0;
++ }
++ sharpsl_change_battery_status = 1;
++ wake_up_interruptible(&battery_waitqueue);
++}
++
++
++static void tosa_reset_battery_info(void)
++{
++ sharpsl_main_status_bk = SHARPSL_BATTERY_STATUS_HIGH;
++ sharpsl_main_percent_bk = 100;
++ sharpsl_jacket_status_bk = SHARPSL_BATTERY_STATUS_HIGH;
++ sharpsl_jacket_percent_bk = 100;
++ sharpsl_bu_status_bk = SHARPSL_BATTERY_STATUS_HIGH;
++ sharpsl_bu_percent_bk = 100;
++
++ sharpsl_ad_index_main = 0;
++ sharpsl_ad_index_jacket = 0;
++ sharpsl_ad_index_bu = 0;
++}
++
++static int tosa_ac_line_status(int m_sec)
++{
++ int ac_status=(( GPLR(GPIO_AC_IN) & GPIO_bit(GPIO_AC_IN) ) ? APM_AC_OFFLINE : APM_AC_ONLINE);
++ int counter=0;
++ if(m_sec == 0) return ac_status;
++ while(1){
++ mdelay(1);
++ if(ac_status == (( GPLR(GPIO_AC_IN) & GPIO_bit(GPIO_AC_IN) ) ? APM_AC_OFFLINE : APM_AC_ONLINE)){
++ counter++;
++ }else{
++ ac_status = (( GPLR(GPIO_AC_IN) & GPIO_bit(GPIO_AC_IN) ) ? APM_AC_OFFLINE : APM_AC_ONLINE);
++ counter=0;
++ }
++ if(counter>m_sec) break;
++ }
++ return ac_status;
++}
++
++//////////////////////
++
++void sharpsl_kick_battery_check_queue(void)
++{
++ MainCntWk = MainCnt + 1;
++ wake_up(&battery_queue);
++}
++
++void sharpsl_kick_jacket_check_queue(void)
++{
++ wake_up_interruptible(&jacket_chk_queue);
++}
++
++void sharpsl_charge_start(void)
++{
++ tosa_charge_start();
++}
++
++int sharpsl_get_main_battery(void)
++{
++ return tosa_read_main_battery();
++}
++
++void sharpsl_request_dac_init(void)
++{
++ tosa_dac_init = 0;
++}
++
++static int tosa_charge_on(void* unused)
++{
++
++ // daemonize();
++ strcpy(current->comm, "battchrgon");
++ sigfillset(&current->blocked);
++
++ while(1) {
++ interruptible_sleep_on(&charge_on_queue);
++
++ if (SHARPSL_AC_LINE_STATUS == APM_AC_OFFLINE) continue;
++
++ // flag clear
++ tosa_reset_battery_info();
++
++ is_ac_adaptor = 1;
++
++ tosa_charge_start();
++ }
++ return 0;
++}
++
++
++static int tosa_charge_off(void* unused)
++{
++ // daemonize();
++ strcpy(current->comm, "battchrgoff");
++ sigfillset(&current->blocked);
++
++ while(1) {
++ interruptible_sleep_on(&charge_off_queue);
++
++ if (SHARPSL_AC_LINE_STATUS == APM_AC_ONLINE) continue;
++
++ tosa_reset_battery_info();
++
++ is_ac_adaptor = 0;
++
++ tosa_charge_stop();
++ }
++ return 0;
++}
++
++static int tosa_fatal_check(void* unused)
++{
++ int is_fatal;
++
++ // daemonize();
++ strcpy(current->comm, "fatalchk");
++ sigfillset(&current->blocked);
++
++ while(1) {
++ interruptible_sleep_on(&fatal_chk_queue);
++
++ is_fatal=0;
++
++ DPRINTK2("[BATT] BAT0LOW OR BAT1LOW IRQ \n");
++ if(tosa_check_main_batt_fatal()){
++ disable_irq(IRQ_GPIO_BAT0_LOW);
++ DPRINTK2("[BATT] IRQ: Disable BAT0\n");
++ is_fatal = 1;
++ }
++ if(sharpsl_jacket_exist && sharpsl_jacket_batt_exist){
++ if(tosa_check_jacket_batt_fatal()){
++ disable_irq(IRQ_GPIO_BAT1_LOW);
++ DPRINTK2("[BATT] IRQ: Disable BAT1\n");
++ }else{
++ is_fatal = 0;
++ }
++ }
++
++ if(is_fatal){
++ DPRINTK2("[BATT] FATAL OFF !!!\n");
++ tosa_request_off();
++ }else{
++ DPRINTK2("[BATT] FATAL OFF CANCEL !\n");
++ }
++ }
++ return 0;
++}
++
++static int tosa_jacket_check(void* unused)
++{
++ int sts;
++
++ // daemonize();
++ strcpy(current->comm, "jacketchk");
++ sigfillset(&current->blocked);
++
++ while(1) {
++ interruptible_sleep_on(&jacket_chk_queue);
++
++ sts = tosa_get_jacket_status();
++ if (sts == 0){
++ mod_timer(&jacket_kick_timer,
++ jiffies + HZ / 100 * TOSA_JC_CHECK_WAIT_TIME);
++ }else{
++ sharpsl_kick_battery_check_queue();
++ }
++ }
++ return 0;
++}
++
++// card error ( System must eject the card )
++// RET = 0:no error, bit0:pcmcia slot0, bit1:pcmcia slot1, bit2:sdslot0
++int sharpsl_get_cardslot_error(void)
++{
++ int cardslot_err = tosa_cardslot_error;
++ //printk("%s:\n",__func__);
++ tosa_cardslot_error = 0; // clear
++ return cardslot_err;
++}
++
++/*** Int ***********************************************************************/
++
++static void tosa_jacket_kick_timer(void)
++{
++ sharpsl_kick_jacket_check_queue();
++}
++
++static void sharpsl_ac_kick_timer(void)
++{
++ int level = tosa_ac_line_status(0);
++ int match = 0;
++ int err = 0;
++
++ while(1) {
++ if ( level == tosa_ac_line_status(0) ) {
++ match++;
++ } else {
++ level = tosa_ac_line_status(0);
++ match = 0;
++ err++;
++ }
++ if ( match > 1 ) break;
++ if ( err > 50 ) {
++ // if ac port is not stable , so use last port data.
++ level = tosa_ac_line_status(0);
++ printk("err : ac port\n");
++ break;
++ }
++ }
++
++#if 1 // Hardware Issue.
++ if ( charge_status == 1 && level == APM_AC_OFFLINE ){
++ // AC IN -> OUT
++ wake_up(&charge_off_queue);
++ }else if ( charge_status == 0 && level == APM_AC_ONLINE ){
++ // AC OUT -> IN
++ wake_up(&charge_on_queue);
++ }
++#else
++ if ( level == APM_AC_OFFLINE ) {
++ /* High->Low : desert */
++ wake_up(&charge_off_queue);
++ } else {
++ /* Low->High : assert */
++ wake_up(&charge_on_queue);
++ }
++#endif
++
++ sharpsl_kick_battery_check_queue();
++}
++
++static void tosa_jacket_interrupt(int irq, void *dummy, struct pt_regs *fp)
++{
++ mod_timer(&jacket_kick_timer, jiffies + HZ / 100);
++}
++
++static void tosa_ac_interrupt(int irq, void *dummy, struct pt_regs *fp)
++{
++ mod_timer(&ac_kick_timer, jiffies + HZ / 100);
++}
++
++static void tosa_main_batt_fatal_interrupt(int irq, void *dummy, struct pt_regs *fp)
++{
++ wake_up_interruptible(&fatal_chk_queue);
++}
++
++static void tosa_jacket_batt_fatal_interrupt(int irq, void *dummy, struct pt_regs *fp)
++{
++ wake_up_interruptible(&fatal_chk_queue);
++}
++
++/*** get adc *********************************************************************/
++
++static int tosa_cnv_battery(int nsel,int ad)
++{
++ int ad_val = 0;
++ int ret = -1,i;
++
++ switch(nsel){
++ case SEL_MAIN:
++ if ( sharpsl_main_battery != SHARPSL_BATTERY_STATUS_HIGH ) {
++ sharpsl_ad_index_main = 0;
++ return ad;
++ }
++ sharpsl_ad_main[sharpsl_ad_index_main] = ad;
++ sharpsl_ad_index_main++;
++ if ( sharpsl_ad_index_main >= SHARPSL_CNV_VALUE_NUM ) {
++ for(i=0;i<(SHARPSL_CNV_VALUE_NUM-1);i++)
++ sharpsl_ad_main[i] = sharpsl_ad_main[i+1];
++ sharpsl_ad_index_main = SHARPSL_CNV_VALUE_NUM -1;
++ }
++ for(i=0;i<sharpsl_ad_index_main;i++)
++ ad_val += sharpsl_ad_main[i];
++ ret = ( ad_val / sharpsl_ad_index_main );
++ break;
++ case SEL_JACKET:
++ if ( sharpsl_jacket_battery != SHARPSL_BATTERY_STATUS_HIGH ) {
++ sharpsl_ad_index_jacket = 0;
++ return ad;
++ }
++ sharpsl_ad_jacket[sharpsl_ad_index_jacket] = ad;
++ sharpsl_ad_index_jacket++;
++ if ( sharpsl_ad_index_jacket >= SHARPSL_CNV_VALUE_NUM ) {
++ for(i=0;i<(SHARPSL_CNV_VALUE_NUM-1);i++)
++ sharpsl_ad_jacket[i] = sharpsl_ad_jacket[i+1];
++ sharpsl_ad_index_jacket = SHARPSL_CNV_VALUE_NUM -1;
++ }
++ for(i=0;i<sharpsl_ad_index_jacket;i++)
++ ad_val += sharpsl_ad_jacket[i];
++ ret = ( ad_val / sharpsl_ad_index_jacket );
++ break;
++ case SEL_BU:
++ if ( sharpsl_bu_battery != SHARPSL_BATTERY_STATUS_HIGH ) {
++ sharpsl_ad_index_bu = 0;
++ return ad;
++ }
++ sharpsl_ad_bu[sharpsl_ad_index_bu] = ad;
++ sharpsl_ad_index_bu++;
++ if ( sharpsl_ad_index_bu >= SHARPSL_CNV_VALUE_NUM ) {
++ for(i=0;i<(SHARPSL_CNV_VALUE_NUM-1);i++)
++ sharpsl_ad_bu[i] = sharpsl_ad_bu[i+1];
++ sharpsl_ad_index_bu = SHARPSL_CNV_VALUE_NUM -1;
++ }
++ for(i=0;i<sharpsl_ad_index_bu;i++)
++ ad_val += sharpsl_ad_bu[i];
++ ret = ( ad_val / sharpsl_ad_index_bu );
++ break;
++ default:
++ printk("%s: parameter error !\n",__func__);
++ break;
++ }
++ return ret;
++}
++
++static void tosa_get_all_battery(void) //[Fix]
++{
++ MainCntWk++;
++
++ if ( MainCntWk > MainCnt ) {
++
++ MainCntWk = 0;
++
++ // check main battery status.
++ tosa_read_main_battery();
++
++ // check backup battery status.
++ tosa_read_backup_battery();
++
++ if (sharpsl_jacket_exist && sharpsl_jacket_batt_exist){
++ // jacket exists , and jacket's battery exists.
++ // check jacket battery status.
++ tosa_read_jacket_battery();
++ DPRINTK3("[BATT] jacket-unit is existend, and battery is existent therein.\n");
++ }else{
++ if(!sharpsl_jacket_exist){
++ DPRINTK3("[BATT] jacket-unit is non-existent.\n");
++ }else{
++ DPRINTK3("[BATT] jacket-unit is existent, but battery is non-existent therein.\n");
++ }
++ }
++
++ }else{
++ DPRINTK("[BATT] MainCntWk = %d\n",MainCntWk);
++ }
++}
++
++static BATTERY_THRESH *tosa_get_sel_level(int nsel, int Volt )
++{
++ int i;
++ BATTERY_THRESH *thresh;
++
++ //DPRINTK(" volt = %d \n",Volt);
++
++ switch(nsel){
++ case SEL_MAIN:
++ if (counter_step_contrast > 2)
++ thresh = sharpsl_main_battery_thresh_fl;
++ else
++ thresh = sharpsl_main_battery_thresh_nofl;
++ break;
++ case SEL_JACKET:
++ if (counter_step_contrast > 2)
++ thresh = sharpsl_jacket_battery_thresh_fl;
++ else
++ thresh = sharpsl_jacket_battery_thresh_nofl;
++ break;
++ case SEL_BU:
++ if (counter_step_contrast > 2)
++ thresh = sharpsl_bu_battery_thresh_fl;
++ else
++ thresh = sharpsl_bu_battery_thresh_nofl;
++ break;
++ default:
++ printk("%s: parameter error !\n",__func__);
++ thresh = sharpsl_main_battery_thresh_fl;
++ break;
++ }
++ for (i = 0; thresh[i].voltage > 0; i++) {
++ if (Volt >= (thresh[i].voltage + TOSA_BATTERY_AD_OFFSET))
++ return &thresh[i];
++ }
++ return &thresh[i];
++}
++
++/*
++ * Translate Analog signal to Digital data
++ */
++static int tosa_get_dac_value(int channel) //[Fix]
++{
++ unsigned short indata;
++ int voltage;
++
++
++ lock_FCS(POWER_MODE_BATTERY, 1);
++
++ battery_off_flag = 0;
++
++ if (tosa_dac_init == 0){
++ ac97_write(AC97_TS_REG2, 0xc009);
++ ac97_write(AC97_TS_REG1, 0x0030);
++ //ac97_bit_set(AC97_ADITFUNC1, (1<<1));
++ set_GPIO_mode(GPIO32_SDATA_IN1_AC97_MD);
++ tosa_dac_init = 1;
++ }
++
++ wm9712_power_mode_ts(WM9712_PWR_TP_CONV);
++ if ((voltage = ac97_ad_input(channel,&indata)) == 0){
++ voltage = (int)(indata & 0xfff);
++ }
++ wm9712_power_mode_ts(WM9712_PWR_TP_WAIT);
++
++#ifdef TOSA_BATTERY_SKIP
++ voltage = 0xfff; // for TEST
++#endif //TOSA_BATTERY_SKIP
++
++ lock_FCS(POWER_MODE_BATTERY, 0);
++
++ if ( battery_off_flag )
++ voltage = -1;
++
++ return voltage;
++}
++
++
++static int get_select_val(int *val)
++{
++ int i,j,k,temp,sum = 0;
++
++ // Get MAX
++ temp = val[0];
++ j=0;
++ for(i=1;i<5;i++) {
++ if ( temp < val[i] ) { temp = val[i]; j = i; }
++ }
++
++ // Get MIN
++ temp = val[4];
++ k=4;
++ for(i=3;i>=0;i--) {
++ if ( temp > val[i] ) { temp = val[i]; k = i; }
++ }
++
++ for(i=0;i<5;i++) {
++ if ( i == j || i == k ) continue;
++ sum += val[i];
++ }
++ return ( sum / 3 );
++}
++
++
++/*** PM *************************************************************************/
++
++#ifdef CONFIG_PM
++static int Sharpsl_battery_pm_callback(struct pm_dev *pm_dev, pm_request_t req, void *data)
++{
++ switch (req) {
++ case PM_SUSPEND:
++
++ disable_irq(IRQ_GPIO_AC_IN);
++ disable_irq(IRQ_GPIO_JACKET_DETECT);
++#ifndef TOSA_BATTERY_SKIP
++ disable_irq(IRQ_GPIO_BAT0_LOW);
++ disable_irq(IRQ_GPIO_BAT1_LOW);
++#endif
++
++ // flag clear
++ tosa_reset_battery_info();
++
++ tosa_off_main_batt_full = 0;
++ tosa_off_jacket_batt_full = 0;
++ tosa_off_check_jacket_req = 0;
++
++ if ( !sharpsl_main_bk_flag )
++ sharpsl_main_battery = SHARPSL_BATTERY_STATUS_HIGH;
++
++ battery_off_flag = 1;
++
++ CHARGE_LED_OFF();
++ charge_status = 0;
++ pass_charge_flag = 0;
++
++ apm_wakeup_src_mask |= ( GPIO_bit(GPIO_AC_IN) |
++ GPIO_bit(GPIO_JACKET_DETECT) );
++ apm_wakeup_src_mask &= ~( GPIO_bit(GPIO_BAT0_CRG) | GPIO_bit(GPIO_BAT1_CRG) );
++
++ // wake up by key
++ apm_wakeup_src_mask |= GPIO_bit(0);
++
++#ifdef TOSA_OFF_CHARGE_FAILSAFE
++ tosa_charge_full_enable = 0;
++ tosa_charge_full_counter = 0;
++ tosa_charge_full_main_batt = 0;
++ tosa_charge_full_jacket_batt = 0;
++#endif //TOSA_OFF_CHARGE_FAILSAFE
++ break;
++
++ case PM_RESUME:
++ is_enabled_off = 1;
++ MainCntWk = MainCnt + 1; // chk battery
++ back_battery_status = -1;
++ back_jacket_battery_status = -1;
++ back_bu_battery_status = -1;
++ back_ac_status = -1;
++ tosa_dac_init = 0;
++ sharpsl_ad_index_main = 0;
++ sharpsl_ad_index_jacket = 0;
++ sharpsl_ad_index_bu = 0;
++ tosa_off_check_jacket_req = 0;
++#ifdef TOSA_FOR_ENGLISH
++ if(IS_ENGLISH_MODEL()){
++ SET_CHARGE_FULL_STATE(DISCONNECT_AC);
++ tosa_decide_charge_full_counter = 0;
++ }
++#endif // TOSA_FOR_ENGLISH
++
++ DPRINTK("[BATT] kick ac check!\n");
++ // AC insert , so kick the charging
++ if (SHARPSL_AC_LINE_STATUS != APM_AC_OFFLINE) {
++ wake_up(&charge_on_queue);
++ } else {
++ wake_up(&charge_off_queue);
++ }
++
++ DPRINTK2("[BATT] kick jacket check!\n");
++ tosa_get_jacket_status_for_on();
++ tosa_off_jc_card_limit();
++
++ CHARGE_0_ON();
++
++ DPRINTK("[BATT] kick battery check!\n");
++ sharpsl_kick_battery_check_queue();
++
++ DPRINTK("[BATT] enabled all irq!\n");
++#ifndef TOSA_BATTERY_SKIP
++ disable_irq(IRQ_GPIO_BAT1_LOW);
++ disable_irq(IRQ_GPIO_BAT0_LOW);
++#endif
++ enable_irq(IRQ_GPIO_JACKET_DETECT);
++ enable_irq(IRQ_GPIO_AC_IN);
++ break;
++ }
++ return 0;
++}
++#endif
++
++/*** check fatal battery ************************************************/
++// Fatal : 0
++// OK : 1
++unsigned short chkFatalBatt(void)
++{
++ int volt,thresh_mbat,thresh_jbat;
++ int charge_value;
++
++ DPRINTK("[BATT] check fatal battery\n");
++
++ if (SHARPSL_AC_LINE_STATUS != APM_AC_OFFLINE ) {
++ thresh_mbat = TOSA_MAIN_BATT_FATAL_ACIN_VOLT;
++ thresh_jbat = TOSA_JACKET_BATT_FATAL_ACIN_VOLT;
++ }else{
++ thresh_mbat = TOSA_MAIN_BATT_FATAL_NOACIN_VOLT;
++ thresh_jbat = TOSA_JACKET_BATT_FATAL_NOACIN_VOLT;
++ }
++
++ charge_value = TC6393_SYS_REG(TC6393_SYS_GPODSR1) & TC6393_CHARGE_OFF; //Main
++ CHARGE_0_OFF(); //Main
++ TC6393_SYS_REG(TC6393_SYS_GPOOECR1) |= TC6393_BAT_SW_ON;
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) |= TC6393_BAT_SW_ON;
++ mdelay(TOSA_DISCHARGE_WAIT_TIME);
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) &= ~TC6393_BAT_SW_ON;
++
++ volt = tosa_read_battery_avg(SEL_MAIN);
++
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) |= charge_value;
++ charge_value=0;
++ mdelay(1);
++
++ DPRINTK3("[BATT] check batt exist(1)\n");
++ if(tosa_check_jacket_battery_not_exist()){
++ if( volt < thresh_mbat ){
++ DPRINTK("[BATT] main fatal battery (no jacket)\n");
++ return 0; // MAIN BATTERY FATAL
++ }
++ }else{
++ if( volt < thresh_mbat ){
++
++ charge_value = TC6393_SYS_REG(TC6393_SYS_GPODSR1) & TC6393_CHARGE_OFF_JC; //Jacket
++ CHARGE_1_OFF(); //Jacket
++ TC6393_SYS_REG(TC6393_SYS_GPOOECR1) |= TC6393_BAT_SW_ON;
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) |= TC6393_BAT_SW_ON;
++ mdelay(TOSA_DISCHARGE_WAIT_TIME);
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) &= ~TC6393_BAT_SW_ON;
++
++ volt = tosa_read_battery_avg(SEL_JACKET);
++
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) |= charge_value;
++ mdelay(1);
++
++ if( volt < thresh_jbat ){
++ DPRINTK("[BATT] main & jacket fatal battery\n");
++ return 0; // MAIN & JACKET BATTERY FATAL
++ }
++ }
++ }
++ DPRINTK("[BATT] not fatal\n");
++
++ return 1; // OK
++}
++
++
++/*** for suspend hook ***********************************************************/
++#ifdef CONFIG_PM
++int sharpsl_off_charge_battery(void)
++{
++ if ( tosa_check_main_battery_not_exist() ) {
++
++ DPRINTK("No main battery !\n");
++
++ // battery error!
++ CHARGE_LED_ERR_OFF();
++ CHARGE_LED_ERR();
++ charge_status = 0; /* charge status flag reset */
++
++ // if error is occured , so led is blinking continue...
++ while(1) {
++ if (SHARPSL_AC_LINE_STATUS == APM_AC_OFFLINE) break;
++ }
++
++ CHARGE_LED_OFF();
++ return -1;
++
++ } else {
++
++ // charge start!
++ CHARGE_LED_OFF();
++ CHARGE_LED_ON(); /* led on */
++ charge_status = 1; /* charge status flag set */
++
++ }
++ return 0;
++}
++
++static void tosa_off_jc_card_limit(void)
++{
++ if(SHARPSL_AC_LINE_STATUS != APM_AC_OFFLINE){
++ // ac-in.
++ set_scoop_jc_gpio(SCP_JC_CARD_LIMIT_SEL); // non-limited
++ tosa_jc_card_limit_sel = 0;
++ }else if(sharpsl_jacket_exist && sharpsl_jacket_batt_exist){
++ // ac-out, and jacket exist.
++ int volt = tosa_read_battery_avg(SEL_JACKET);
++ if(volt > TOSA_JACKET_BATT_FATAL_NOACIN_VOLT){
++ set_scoop_jc_gpio(SCP_JC_CARD_LIMIT_SEL); // non-limited
++ tosa_jc_card_limit_sel = 0;
++ }else{
++ reset_scoop_jc_gpio(SCP_JC_CARD_LIMIT_SEL); // limited
++ tosa_jc_card_limit_sel = 1;
++ }
++ }else{
++ reset_scoop_jc_gpio(SCP_JC_CARD_LIMIT_SEL); // limited
++ tosa_jc_card_limit_sel = 1;
++ }
++}
++
++int tosa_check_charge_full(int cktime)
++{
++ int time;
++ unsigned int ret;
++ int is_all_battery_full;
++ int jacket_state, batt_sw_state;
++ extern int sharpsl_wakeup_check_charge(void);
++ time = RCNR;
++
++ jacket_state = (GPLR(GPIO_JACKET_DETECT) & GPIO_bit(GPIO_JACKET_DETECT));
++ batt_sw_state = SHARPSL_BAT_LOCKED_STATUS;
++
++#if CHECK_LOG
++ printk("*** CHG_CHK_START: time=%d(%08x) ***\n",RCNR-gStartTime,RCNR);
++ printk(" MAIN AD: %08x JACKET AD %08x\n",tosa_read_battery(SEL_MAIN),tosa_read_battery(SEL_JACKET));
++ printk(" TC6393_SYS_GPODSR1=%x\n",TC6393_SYS_REG(TC6393_SYS_GPODSR1));
++#endif
++
++ if(TC6393_SYS_REG(TC6393_SYS_GPODSR1) & TC6393_CHARGE_OFF_JC /*Jacket*/){
++ if(sharpsl_jacket_batt_exist){
++#if CHECK_LOG
++ printk(" jacket battery charge on !\n");
++#endif
++ CHARGE_1_ON();
++ }
++#if CHECK_LOG
++ printk(" TC6393_SYS_GPODSR1=%x\n",TC6393_SYS_REG(TC6393_SYS_GPODSR1));
++#endif
++ }
++
++#ifdef TOSA_OFF_CHARGE_FAILSAFE
++ if(!tosa_charge_full_enable){
++ tosa_charge_full_enable = 1; // @ Start!!
++ tosa_charge_full_counter = RCNR; // @ Reset Failsafe Counter.
++ tosa_charge_full_main_batt = tosa_read_battery(SEL_MAIN);
++ if(sharpsl_jacket_batt_exist)
++ tosa_charge_full_jacket_batt = tosa_read_battery(SEL_JACKET);
++#if CHECK_LOG
++ printk("*** CHG_FAILSAFE_COUNTER_START: time=%d(%08x) ***\n",RCNR-tosa_charge_full_counter,RCNR);
++#endif
++ }
++#endif //TOSA_OFF_CHARGE_FAILSAFE
++
++ while(1){
++ int jacket_batt_exist_now = 0;
++
++ // ac out ?
++ if ( SHARPSL_AC_LINE_STATUS == APM_AC_OFFLINE ) {
++ charge_status = 0;
++ CHARGE_LED_OFF();
++ //printk("%s: [go off] ac out !\n",__func__);
++#ifdef TOSA_OFF_CHARGE_FAILSAFE
++ tosa_charge_full_enable = 0; // @ Stop!!
++#endif
++ ret = -1;
++ break;
++ }
++
++ // check wakeup interrupt.
++ if ( ( ret = sharpsl_wakeup_check_charge() ) != 1 ) {
++ break;
++ }
++
++ // timeout ?
++ if ( ( RCNR - time ) > SHARPSL_TOSA_WAIT_CO_TIME ) {
++ //printk("%s: [go off] finished! not full !\n",__func__);
++ ret = -1;
++ break;
++ }
++
++ // battery switch status change ?
++ if(batt_sw_state != SHARPSL_BAT_LOCKED_STATUS){
++ //printk("%s: [go off] battery switch status is changed !\n",__func__);
++ ret = -1;
++ break;
++ }
++
++ // jacket detect status change ?
++ if(jacket_state != (GPLR(GPIO_JACKET_DETECT) & GPIO_bit(GPIO_JACKET_DETECT))) {
++ tosa_get_jacket_status_for_on();
++#ifdef TOSA_OFF_CHARGE_FAILSAFE
++ tosa_charge_full_enable = 0; // @ Stop!!
++#endif
++ //printk("%s: [go off] jacket status is changed !\n",__func__);
++ ret = -1;
++ break;
++ }
++
++ // battery full ?
++ tosa_off_main_batt_full = SHARPSL_MAIN_BATT_FULL;
++ tosa_off_jacket_batt_full = 0;
++ if(sharpsl_jacket_exist && sharpsl_jacket_batt_exist){
++ tosa_off_jacket_batt_full = SHARPSL_JACKET_BATT_FULL;
++ }
++ is_all_battery_full = 0;
++
++#ifdef TOSA_OFF_CHARGE_FAILSAFE
++ if(tosa_charge_full_enable){
++ if((RCNR - tosa_charge_full_counter) > (TOSA_CHARGE_FULL_MAX_TIME-cktime)){
++#if CHECK_LOG
++ printk("*** ALL BATTERY is FULL by FAILSAFE.***\n");
++ printk(" CHG_FAILSAFE_COUNTER: time=%d\n",RCNR - tosa_charge_full_counter);
++#endif
++ is_all_battery_full = 1;
++ }
++ }
++#endif //TOSA_OFF_CHARGE_FAILSAFE
++
++ if(charge_status && tosa_off_main_batt_full){
++ // main battery full !
++#if CHECK_LOG
++ printk("\n");
++ printk(" MAIN BATTERY is FULL.\n");
++#endif
++ if(sharpsl_jacket_batt_exist){
++ if(tosa_off_jacket_batt_full){
++ // all battery full !
++ is_all_battery_full = 1;
++#if CHECK_LOG
++ printk(" JACKET BATTERY is FULL.\n");
++#endif
++ }
++ }else{
++ // all battery full ! (non-jacket)
++ is_all_battery_full = 1;
++#if CHECK_LOG
++ printk(" JACKET BATTERY is NON.\n");
++#endif
++ }
++ }
++#if CHECK_LOG
++ else{
++ printk(".");
++ }
++#endif
++ if(is_all_battery_full){
++
++ // ac out ?
++ if ( SHARPSL_AC_LINE_STATUS == APM_AC_OFFLINE ) {
++ continue;
++ }
++
++ // all battery full !!!!
++ //printk("%s: [go off] all battery full !\n",__func__);
++#if CHECK_LOG
++ printk("\n");
++ printk(" CHG_FAILSAFE_COUNTER: time=%d\n",RCNR - tosa_charge_full_counter);
++ printk("*** CHG_CHK_END: t=%d (%08x) ***\n",RCNR-gStartTime,RCNR);
++ printk("*** ALL BATTERY is FULL!! ***\n");
++#endif
++ CHARGE_LED_OFF(); // led off
++ charge_status = 0;
++ pass_charge_flag = 1;
++ ret = -1; // go off.
++ return ret;
++ }
++ }
++
++#ifdef TOSA_OFF_CHARGE_FAILSAFE
++ if(tosa_charge_full_enable){
++ int batt_now;
++
++#if CHECK_LOG
++ printk("\n");
++ printk(" MAIN VOLTAGE CHECK: ");
++#endif
++ batt_now = tosa_read_battery(SEL_MAIN);
++ if((tosa_charge_full_main_batt - batt_now) >= TOSA_CHARGE_FULL_DIFF_VOLT){
++#if CHECK_LOG
++ printk("[NG] (%d->%d)\n",tosa_charge_full_main_batt,batt_now);
++ printk(" * RESTART: time=%d \n",RCNR);
++#endif
++ tosa_charge_full_counter = RCNR; // @ Reset Failsafe Counter.
++ }
++#if CHECK_LOG
++ else{
++ printk("[OK] (%d->%d)\n",tosa_charge_full_main_batt,batt_now);
++ }
++#endif
++ tosa_charge_full_main_batt = batt_now;
++
++#if CHECK_LOG
++ printk(" JACKET VOLTAGE CHECK: ");
++#endif
++ if(sharpsl_jacket_batt_exist){
++ batt_now = tosa_read_battery(SEL_JACKET);
++ if((tosa_charge_full_jacket_batt - batt_now) >= TOSA_CHARGE_FULL_DIFF_VOLT){
++ tosa_charge_full_counter = RCNR; // @ Reset Failsafe Counter.
++#if CHECK_LOG
++ printk("[NG] (%d->%d)\n",tosa_charge_full_main_batt,batt_now);
++ printk(" * RESTART: time=%d ***\n",RCNR);
++#endif
++ }
++#if CHECK_LOG
++ else{
++ printk("[OK] (%d->%d)\n",tosa_charge_full_jacket_batt,batt_now);
++ }
++#endif
++ tosa_charge_full_jacket_batt = batt_now;
++ }
++#if CHECK_LOG
++ else{
++ printk("[OK] (NON-JACKET)\n");
++ }
++#endif
++ }
++#endif //TOSA_OFF_CHARGE_FAILSAFE
++
++#ifdef TOSA_OFF_CHARGE_FAILSAFE
++#if CHECK_LOG
++ if(tosa_charge_full_enable){
++ printk(" CHG_FAILSAFE_COUNTER: time=%d\n",RCNR - tosa_charge_full_counter);
++ }
++#endif
++#endif
++
++#if CHECK_LOG
++ printk("*** CHG_CHK_END: time=%d(%08x) ***\n",RCNR-gStartTime,RCNR);
++ printk("\n");
++#endif
++
++ pass_charge_flag = 0;
++ return ret;
++}
++
++void tosa_check_ac_and_jacket_state(void)
++{
++ int is_all_battery_full = 0;
++
++ if(!pass_charge_flag){
++ if(SHARPSL_AC_LINE_STATUS != APM_AC_OFFLINE){
++ sharpsl_off_charge_battery();
++ charge_status = 1;
++ CHARGE_LED_ON();
++ }else{
++ charge_status = 0;
++ CHARGE_LED_OFF();
++ }
++ }
++ if(!tosa_off_check_jacket_req){
++ return;
++ }
++ tosa_off_check_jacket_req = 0;
++ // restart charge.
++ CHARGE_ON();
++
++ // check jacket.
++ tosa_get_jacket_status_for_on();
++ mdelay(100);
++
++ tosa_off_main_batt_full = 0;
++ tosa_off_jacket_batt_full = 0;
++ charge_status = 0;
++
++ if(SHARPSL_AC_LINE_STATUS != APM_AC_OFFLINE){
++ // ac in.
++ tosa_off_main_batt_full = SHARPSL_MAIN_BATT_FULL;
++ if(sharpsl_jacket_exist && sharpsl_jacket_batt_exist){
++ tosa_off_jacket_batt_full = SHARPSL_JACKET_BATT_FULL;
++ }
++ //sharpsl_off_charge_battery();
++ charge_status = 1;
++ CHARGE_LED_ON();
++#if CHECK_LOG
++ printk("*** CHG_START: time=0(%08x) ***\n",RCNR);
++ gStartTime = RCNR;
++ printk(" MAIN AD: %d JACKET AD %d\n",tosa_read_battery(SEL_MAIN),tosa_read_battery(SEL_JACKET));
++#endif
++ }else{
++ // ac out.
++ charge_status = 0;
++ CHARGE_LED_OFF();
++ }
++
++ tosa_off_jc_card_limit();
++
++ DPRINTK4("[BATT]sharpsl_jacket_exist = %d\n",sharpsl_jacket_exist);
++ DPRINTK4("[BATT]sharpsl_jacket_batt_exist = %d\n",sharpsl_jacket_batt_exist);
++ DPRINTK4("[BATT]charge_status = %d\n",charge_status);
++ DPRINTK4("[BATT]main_batt_full = %d\n",tosa_off_main_batt_full);
++ DPRINTK4("[BATT]jacket_batt_full = %d\n",tosa_off_jacket_batt_full);
++
++ pass_charge_flag = 0;
++ return;
++}
++
++void sharpsl_battery_charge_hook(int mode)
++{
++ switch (mode){
++ case 0: // Main Battery Full
++ DPRINTK4("[IRQ]main battery full.\n");
++ break;
++ case 1: // Charge Off
++ DPRINTK4("[IRQ]ac out.\n");
++ break;
++ case 2: // Charge On
++ DPRINTK4("[IRQ]ac in.\n");
++ break;
++ case 3: // Jacket Battery Full
++ DPRINTK4("[IRQ]jacket battery full.\n");
++ break;
++ case 4: // Jacket Detect
++ DPRINTK4("[IRQ]check jacket.\n");
++ break;
++ case 5:
++ DPRINTK4("[IRQ]timer.(%d)\n",RCNR);
++ tosa_check_ac_and_jacket_state();
++ tosa_off_check_jacket_req = 0;
++ return;
++ break;
++ default:
++ return;
++ break;
++ }
++#ifdef TOSA_OFF_CHARGE_FAILSAFE
++ if(tosa_charge_full_enable){
++ tosa_charge_full_enable = 0;
++ }
++#endif //TOSA_OFF_CHARGE_FAILSAFE
++ tosa_off_check_jacket_req = 1;
++ return;
++}
++
++#endif /* CONFIG_PM */
++
++
++/*** Config & Setup **********************************************************/
++void battery_init(void)
++{
++ int err;
++
++ init_timer(&ac_kick_timer);
++ ac_kick_timer.function = (void*)sharpsl_ac_kick_timer;
++
++ init_timer(&jacket_kick_timer);
++ jacket_kick_timer.function = (void*)tosa_jacket_kick_timer;
++
++ GPDR(GPIO_AC_IN) &= ~GPIO_bit(GPIO_AC_IN);
++ GPDR(GPIO_BAT0_CRG) &= ~GPIO_bit(GPIO_BAT0_CRG);
++ GPDR(GPIO_BAT1_CRG) &= ~GPIO_bit(GPIO_BAT1_CRG);
++
++ GPDR(GPIO_BAT0_LOW) &= ~GPIO_bit(GPIO_BAT0_LOW);
++ GPDR(GPIO_BAT1_LOW) &= ~GPIO_bit(GPIO_BAT1_LOW);
++
++ printk("SHARPSL_AC_LINE_STATUS=%x\n",SHARPSL_AC_LINE_STATUS);
++
++ /* Set transition detect */
++ set_GPIO_IRQ_edge( GPIO_AC_IN , GPIO_BOTH_EDGES ); /* AC IN */
++ set_GPIO_IRQ_edge( GPIO_JACKET_DETECT , GPIO_BOTH_EDGES );
++#ifndef TOSA_BATTERY_SKIP
++ set_GPIO_IRQ_edge( GPIO_BAT0_LOW , GPIO_FALLING_EDGE );
++ set_GPIO_IRQ_edge( GPIO_BAT1_LOW , GPIO_FALLING_EDGE );
++#endif
++
++ /* Register interrupt handler. */
++ if ((err = request_irq(IRQ_GPIO_AC_IN, tosa_ac_interrupt,
++ SA_INTERRUPT, "ACIN", tosa_ac_interrupt))) {
++ printk("Could not get irq %d.\n", IRQ_GPIO_AC_IN);
++ return;
++ }
++ if ((err = request_irq(IRQ_GPIO_JACKET_DETECT, tosa_jacket_interrupt,
++ SA_INTERRUPT, "JACKET_DETECT", tosa_jacket_interrupt))) {
++ printk("Could not get irq %d.\n", IRQ_GPIO_JACKET_DETECT);
++ return;
++ }
++
++#ifndef TOSA_BATTERY_SKIP
++ if ((err = request_irq(IRQ_GPIO_BAT0_LOW, tosa_main_batt_fatal_interrupt,
++ SA_INTERRUPT, "MAIN_FATAL", tosa_main_batt_fatal_interrupt))) {
++ printk("Could not get irq %d.\n", IRQ_GPIO_BAT0_LOW);
++ return;
++ }
++ disable_irq(IRQ_GPIO_BAT0_LOW);
++
++ if ((err = request_irq(IRQ_GPIO_BAT1_LOW, tosa_jacket_batt_fatal_interrupt,
++ SA_INTERRUPT, "JACKET_FATAL", tosa_jacket_batt_fatal_interrupt))) {
++ printk("Could not get irq %d.\n", IRQ_GPIO_BAT1_LOW);
++ return;
++ }
++ disable_irq(IRQ_GPIO_BAT1_LOW);
++#endif
++
++ /* regist to Misc driver */
++ misc_register(&battery_device);
++
++ /* Make threads */
++ kernel_thread(tosa_charge_on, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
++ kernel_thread(tosa_charge_off, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
++ kernel_thread(tosa_battery_thread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
++ kernel_thread(tosa_fatal_check, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
++ kernel_thread(tosa_jacket_check, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
++
++ tosa_get_jacket_status_for_on();
++}
++
++
++
++#ifdef CONFIG_PROC_FS
++struct proc_dir_entry *proc_batt;
++
++typedef struct sharpsl_battery_entry {
++ int* addr;
++ int def_value;
++ char* name;
++ char* description;
++ unsigned short low_ino;
++} sharpsl_battery_entry_t;
++
++static sharpsl_battery_entry_t sharpsl_battery_params[] = {
++/* { addr, def_value, name, description }*/
++ { &msglevel, 0, "msglevel", "debug message output level" },
++ { &sharpsl_debug_flag , 0 , "dflag", "debug flag" },
++ { &sharpsl_change_battery_status , 0 , "chg_status", "Change status" }
++};
++#define NUM_OF_BATTERY_ENTRY (sizeof(sharpsl_battery_params)/sizeof(sharpsl_battery_entry_t))
++
++static ssize_t sharpsl_battery_read_params(struct file *file, char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ int i_ino = (file->f_dentry->d_inode)->i_ino;
++ char outputbuf[15];
++ int count;
++ int i;
++ sharpsl_battery_entry_t *current_param = NULL;
++
++ if (*ppos>0) /* Assume reading completed in previous read*/
++ return 0;
++ for (i=0; i<NUM_OF_BATTERY_ENTRY; i++) {
++ if (sharpsl_battery_params[i].low_ino==i_ino) {
++ current_param = &sharpsl_battery_params[i];
++ break;
++ }
++ }
++ if (current_param==NULL) {
++ return -EINVAL;
++ }
++ count = sprintf(outputbuf, "0x%08X\n",
++ *((volatile Word *) current_param->addr));
++ *ppos += count;
++ if (count>nbytes) /* Assume output can be read at one time */
++ return -EINVAL;
++ if (copy_to_user(buf, outputbuf, count))
++ return -EFAULT;
++ return count;
++}
++
++static ssize_t sharpsl_battery_write_params(struct file *file, const char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ int i_ino = (file->f_dentry->d_inode)->i_ino;
++ sharpsl_battery_entry_t *current_param = NULL;
++ int i;
++ unsigned long param;
++ char *endp;
++
++ for (i=0; i<NUM_OF_BATTERY_ENTRY; i++) {
++ if(sharpsl_battery_params[i].low_ino==i_ino) {
++ current_param = &sharpsl_battery_params[i];
++ break;
++ }
++ }
++ if (current_param==NULL) {
++ return -EINVAL;
++ }
++
++ param = simple_strtoul(buf,&endp,0);
++ if (param == -1) {
++ *current_param->addr = current_param->def_value;
++ } else {
++ *current_param->addr = param;
++ }
++ return nbytes+endp-buf;
++}
++
++static unsigned int sharpsl_battery_poll(struct file *fp, poll_table * wait)
++{
++ poll_wait(fp, &battery_waitqueue, wait);
++ if ( sharpsl_change_battery_status ) {
++ sharpsl_change_battery_status = 0;
++ return POLLIN | POLLRDNORM;
++ } else {
++ return 0;
++ }
++}
++
++static struct file_operations proc_params_operations = {
++ read: sharpsl_battery_read_params,
++ write: sharpsl_battery_write_params,
++ poll: sharpsl_battery_poll,
++};
++#endif
++
++int __init Sharpsl_battery_init(void)
++{
++#ifdef CONFIG_PM
++ battery_pm_dev = pm_register(PM_SYS_DEV, 0, Sharpsl_battery_pm_callback);
++#endif
++
++ battery_init();
++
++#ifdef CONFIG_PROC_FS
++ {
++ int i;
++ struct proc_dir_entry *entry;
++
++ proc_batt = proc_mkdir("driver/battery", NULL);
++ if (proc_batt == NULL) {
++ free_irq(IRQ_GPIO_AC_IN, tosa_ac_interrupt);
++ free_irq(IRQ_GPIO_JACKET_DETECT, tosa_jacket_interrupt);
++#ifndef TOSA_BATTERY_SKIP
++ free_irq(IRQ_GPIO_BAT0_LOW, tosa_main_batt_fatal_interrupt);
++ free_irq(IRQ_GPIO_BAT1_LOW, tosa_jacket_batt_fatal_interrupt);
++#endif
++ misc_deregister(&battery_device);
++ printk(KERN_ERR "can't create /proc/driver/battery\n");
++ return -ENOMEM;
++ }
++ for (i=0; i<NUM_OF_BATTERY_ENTRY; i++) {
++ entry = create_proc_entry(sharpsl_battery_params[i].name,
++ S_IWUSR |S_IRUSR | S_IRGRP | S_IROTH,
++ proc_batt);
++ if (entry) {
++ sharpsl_battery_params[i].low_ino = entry->low_ino;
++ entry->proc_fops = &proc_params_operations;
++ } else {
++ int j;
++ for (j=0; j<i; j++) {
++ remove_proc_entry(sharpsl_battery_params[i].name, proc_batt);
++ }
++ remove_proc_entry("driver/battery", &proc_root);
++ proc_batt = 0;
++ free_irq(IRQ_GPIO_AC_IN, tosa_ac_interrupt);
++ free_irq(IRQ_GPIO_JACKET_DETECT, tosa_jacket_interrupt);
++#ifndef TOSA_BATTERY_SKIP
++ free_irq(IRQ_GPIO_BAT0_LOW, tosa_main_batt_fatal_interrupt);
++ free_irq(IRQ_GPIO_BAT1_LOW, tosa_jacket_batt_fatal_interrupt);
++#endif
++ misc_deregister(&battery_device);
++ printk(KERN_ERR "battery: can't create /proc/driver/battery\n");
++ return -ENOMEM;
++ }
++ }
++ }
++#endif
++ return 0;
++}
++
++module_init(Sharpsl_battery_init);
++
++
++
++#ifdef MODULE
++int init_module(void)
++{
++ Sharpsl_battery_init();
++ return 0;
++}
++
++void cleanup_module(void)
++{
++ free_irq(IRQ_GPIO_AC_IN, tosa_ac_interrupt);
++ free_irq(IRQ_GPIO_JACKET_DETECT, tosa_jacket_interrupt);
++#ifndef TOSA_BATTERY_SKIP
++ free_irq(IRQ_GPIO_BAT0_LOW, tosa_main_batt_fatal_interrupt);
++ free_irq(IRQ_GPIO_BAT1_LOW, tosa_jacket_batt_fatal_interrupt);
++#endif
++
++#ifdef CONFIG_PROC_FS
++ {
++ int i;
++ for (i=0; i<NUM_OF_BATTERY_ENTRY; i++) {
++ remove_proc_entry(sharpsl_battery_params[i].name, proc_batt);
++ }
++ remove_proc_entry("driver/battery", NULL);
++ proc_batt = 0;
++ }
++#endif
++
++ misc_deregister(&battery_device);
++}
++#endif /* MODULE */
++
+diff -Nur linux_c860_org/arch/arm/mach-pxa/tosa_buzzer.c linux/arch/arm/mach-pxa/tosa_buzzer.c
+--- linux_c860_org/arch/arm/mach-pxa/tosa_buzzer.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/arch/arm/mach-pxa/tosa_buzzer.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,279 @@
++/*
++ * arch/arm/mach-pxa/tosa_buzzer.c
++ *
++ * PXA buzzer ctrl for Tosa (SHARP)
++ *
++ * (C) Copyright 2004 Lineo Solutions, Inc.
++ *
++ * Based on collie_buzzer
++ *
++ *
++ * 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.
++ *
++ * ChangeLog:
++ * 16-Jan-2003 SHARP sleep_on -> interruptible_sleep_on
++ * 1-Nov-2003 Sharp Corporation for Tosa
++ *
++ */
++#include <linux/module.h>
++#include <linux/sched.h>
++#include <linux/timer.h>
++#include <linux/poll.h>
++#include <linux/major.h>
++#include <linux/config.h>
++#include <linux/fcntl.h>
++#include <linux/errno.h>
++#include <linux/mm.h>
++#include <linux/malloc.h>
++#include <linux/sound.h>
++#include <linux/init.h>
++#include <linux/delay.h>
++
++#ifdef CONFIG_PM
++#include <linux/pm.h>
++#endif /* CONFIG_PM */
++
++#include <asm/system.h>
++#include <asm/irq.h>
++#include <asm/pgtable.h>
++#include <asm/uaccess.h>
++#include <asm/io.h>
++#include <linux/soundcard.h>
++#include <asm/proc/cache.h>
++
++#include <asm/sharp_char.h>
++#include <asm/arch/tosa_wm9712.h>
++
++#undef DEBUG
++//#define DEBUG
++#ifdef DEBUG
++#define DPRINTK( x... ) printk( ##x )
++#else
++#define DPRINTK( x... )
++#endif
++
++/*** sound data *********************************************************/
++#include "poodle_key.h"
++#include "poodle_tap.h"
++#include "poodle_alarm.h"
++
++/*** Some declarations ***********************************************/
++static DECLARE_WAIT_QUEUE_HEAD(buzzer_proc);
++static int now_playing = 0 ;
++static int buzzer_soundid = 0;
++static int repeat_sound = 0;
++
++
++// following functions include tosa audio driver.
++int audio_buzzer_write(const char *,int);
++int audio_buzzer_intmode(const short *,int,int);
++int audio_buzzer_release(void);
++int audio_buzzer_open(int);
++
++/*** buzzer ******************************************************************/
++int tosa_buz_buffer_init()
++{
++ return 0;
++}
++
++int tosa_play_sound_by_id(int soundid,int volume)
++{
++
++ switch( soundid ){
++
++ case SHARP_BUZ_TOUCHSOUND:
++ if ( wm9712_busy() && !repeat_sound ) {
++ } else {
++ while (buzzer_soundid) schedule();
++ buzzer_soundid = soundid;
++ wake_up(&buzzer_proc);
++ }
++ break;
++
++ case SHARP_BUZ_KEYSOUND:
++ if ( wm9712_busy() && !repeat_sound ) {
++ } else {
++ while (buzzer_soundid) schedule();
++ buzzer_soundid = soundid;
++ wake_up(&buzzer_proc);
++ }
++ break;
++
++ case SHARP_BUZ_SCHEDULE_ALARM:
++ if ( wm9712_busy() ) {
++ buzzer_soundid = soundid;
++ wake_up(&buzzer_proc);
++ } else {
++ while (buzzer_soundid) schedule();
++ buzzer_soundid = soundid;
++ wake_up(&buzzer_proc);
++ }
++ break;
++
++ case SHARP_PDA_WARNSOUND:
++ break;
++
++ case SHARP_BUZ_GOT_MAIL:
++ case SHARP_BUZ_DAILY_ALARM:
++ case SHARP_PDA_ERRORSOUND:
++ case SHARP_PDA_CRITICALSOUND:
++ break;
++
++ default:
++ return -EINVAL;
++ break;
++ }
++
++ return 0;
++}
++int tosa_buzzer_supported(int which)
++{
++ switch( which ){
++ case SHARP_BUZ_TOUCHSOUND:
++ case SHARP_BUZ_KEYSOUND:
++ case SHARP_BUZ_SCHEDULE_ALARM:
++ case SHARP_BUZ_DAILY_ALARM:
++ case SHARP_BUZ_GOT_MAIL:
++ case SHARP_PDA_WARNSOUND:
++ case SHARP_PDA_ERRORSOUND:
++ case SHARP_PDA_CRITICALSOUND:
++ break;
++ default:
++ return -EINVAL;
++ break;
++ }
++ return 4;
++}
++
++int tosa_play_sound_by_hz(unsigned int hz,unsigned int msecs,int volume)
++{
++ return 0;
++}
++
++int current_freq;
++static void change_freq( int new_freq )
++{
++ if (current_freq!=new_freq) {
++ audio_buzzer_release();
++ audio_buzzer_open(new_freq);
++ current_freq = new_freq;
++ }
++}
++
++static void tosa_buzzer_thread(void)
++{
++ // daemonize();
++ strcpy(current->comm, "buzzer");
++ sigfillset(&current->blocked);
++
++ while(1) {
++ if (buzzer_soundid==0) {
++ //while(buzzer_soundid==0)
++ interruptible_sleep_on(&buzzer_proc);
++ } else {
++ if (wm9712_busy()) {
++ if (buzzer_soundid==SHARP_BUZ_SCHEDULE_ALARM) {
++ //audio_buzzer_intmode(alarm_data,sizeof(alarm_data),44100);
++ audio_buzzer_intmode(alarm_data,sizeof(alarm_data),8000);
++ }
++ buzzer_soundid=0;
++ continue;
++ }
++ now_playing = 1;
++ current_freq = key_freq;
++ audio_buzzer_open(current_freq);
++ while ( buzzer_soundid!=0 ) {
++ int tmpid = buzzer_soundid;
++ buzzer_soundid=0;
++
++ switch( tmpid ) {
++
++ case SHARP_BUZ_TOUCHSOUND:
++ repeat_sound = 1;
++ change_freq(tap_freq);
++ audio_buzzer_write(tap_data, sizeof(tap_data));
++ audio_buzzer_sync();
++ break;
++
++ case SHARP_BUZ_KEYSOUND:
++ repeat_sound = 1;
++ change_freq(key_freq);
++ audio_buzzer_write(key_data, sizeof(key_data));
++ audio_buzzer_sync();
++ break;
++
++ case SHARP_BUZ_SCHEDULE_ALARM:
++ {
++ int alarm_data_size = sizeof(alarm_data);
++ unsigned char *alarm_data0 = alarm_data;
++ int cnt;
++
++ repeat_sound = 0;
++ //change_freq(44100);
++ change_freq(8000);
++ while(1) {
++ cnt = audio_buzzer_write(alarm_data0,alarm_data_size);
++ audio_buzzer_sync();
++ if ( cnt <= 0 ) break;
++ alarm_data_size -= cnt;
++ alarm_data0 += cnt;
++ }
++ break;
++ }
++
++ case SHARP_PDA_WARNSOUND:
++ case SHARP_BUZ_GOT_MAIL:
++ case SHARP_BUZ_DAILY_ALARM:
++ case SHARP_PDA_ERRORSOUND:
++ case SHARP_PDA_CRITICALSOUND:
++ repeat_sound = 0;
++ break;
++
++ default:
++ repeat_sound = 0;
++ break;
++ } // switch
++ } // while loop
++ audio_buzzer_release();
++ repeat_sound = 0;
++ now_playing = 0;
++ }
++ } // while(1) loop
++}
++
++
++int tosa_buzzer_dev_init(void)
++{
++ kernel_thread(tosa_buzzer_thread, NULL,
++ CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
++ return 0;
++}
++
++int tosa_suspend_buzzer(void)
++{
++#if 0
++ printk("tosa_suspend_buzzer\n");
++ while ( now_playing ) {
++ schedule();
++ }
++#endif
++ return 0;
++}
++
++int tosa_resume_buzzer(void)
++{
++ return 0;
++}
++
++void tosa_stop_sound()
++{
++ return;
++}
+diff -Nur linux_c860_org/arch/arm/mm/fault-armv.c linux/arch/arm/mm/fault-armv.c
+--- linux_c860_org/arch/arm/mm/fault-armv.c 2003-06-18 16:12:26.000000000 +0900
++++ linux/arch/arm/mm/fault-armv.c 2004-06-10 21:09:10.000000000 +0900
+@@ -11,6 +11,7 @@
+ * Change Log
+ * 12-Dec-2002 Sharp Corporation for Poodle and Corgi
+ * 04-Apr-2003 Sharp for ARM FCSE
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ *
+ */
+ #include <linux/config.h>
+@@ -126,12 +127,14 @@
+ }
+ #endif
+
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
++#ifdef CONFIG_PM
+ {
+ extern sharpsl_fataloff(void);
+ sharpsl_fataloff();
+ }
+ #endif
++#endif
+
+ if (!inf->fn(addr, error_code, regs))
+ return;
+diff -Nur linux_c860_org/arch/arm/mm/proc-xscale.S linux/arch/arm/mm/proc-xscale.S
+--- linux_c860_org/arch/arm/mm/proc-xscale.S 2003-10-15 16:42:00.000000000 +0900
++++ linux/arch/arm/mm/proc-xscale.S 2004-06-10 21:09:10.000000000 +0900
+@@ -25,6 +25,7 @@
+ * 20-Mar-2003 SHARP supported PXA255
+ * 04-Apr-2003 Sharp for ARM FCSE
+ * 15-Oct-2003 Sharp fix icache flush
++ * 16-Jul-2003 Sharp Corporation
+ */
+
+ #include <linux/config.h>
+diff -Nur linux_c860_org/arch/arm/tools/getconstants.c linux/arch/arm/tools/getconstants.c
+--- linux_c860_org/arch/arm/tools/getconstants.c 2002-08-26 14:39:51.000000000 +0900
++++ linux/arch/arm/tools/getconstants.c 2004-06-10 21:09:10.000000000 +0900
+@@ -13,6 +13,7 @@
+
+ #include <asm/pgtable.h>
+ #include <asm/uaccess.h>
++#include <asm/hardirq.h>
+
+ /*
+ * Make sure that the compiler and target are compatible.
+@@ -39,6 +40,11 @@
+ DEFN("TSS_SAVE", OFF_TSK(thread.save));
+ DEFN("TSS_FPESAVE", OFF_TSK(thread.fpstate.soft.save));
+
++#ifdef CONFIG_PREEMPT
++DEFN("TSK_PREEMPT", OFF_TSK(preempt_count));
++DEFN("IRQSTAT_BH_COUNT", (unsigned long)&(((irq_cpustat_t *)0)->__local_bh_count));
++#endif
++
+ #ifdef CONFIG_CPU_32
+ DEFN("TSS_DOMAIN", OFF_TSK(thread.domain));
+
+diff -Nur linux_c860_org/arch/arm/tools/mach-types linux/arch/arm/tools/mach-types
+--- linux_c860_org/arch/arm/tools/mach-types 2002-08-29 12:27:22.000000000 +0900
++++ linux/arch/arm/tools/mach-types 2004-06-10 21:09:10.000000000 +0900
+@@ -205,3 +205,4 @@
+ discovery SABINAL_DISCOVERY DISCOVERY 194
+ poodle ARCH_PXA_POODLE POODLE 195
+ corgi ARCH_PXA_CORGI CORGI 196
++tosa ARCH_PXA_TOSA TOSA 197
+diff -Nur linux_c860_org/arch/cris/drivers/ds1302.c linux/arch/cris/drivers/ds1302.c
+--- linux_c860_org/arch/cris/drivers/ds1302.c 2002-08-26 14:39:59.000000000 +0900
++++ linux/arch/cris/drivers/ds1302.c 2004-06-10 21:09:10.000000000 +0900
+@@ -357,6 +357,7 @@
+ {
+ struct rtc_time rtc_tm;
+
++ memset(&rtc_tm, 0, sizeof (struct rtc_time));
+ get_rtc_time(&rtc_tm);
+ if (copy_to_user((struct rtc_time*)arg, &rtc_tm, sizeof(struct rtc_time)))
+ return -EFAULT;
+diff -Nur linux_c860_org/arch/i386/config.in linux/arch/i386/config.in
+--- linux_c860_org/arch/i386/config.in 2002-08-26 14:45:20.000000000 +0900
++++ linux/arch/i386/config.in 2004-06-10 21:09:10.000000000 +0900
+@@ -186,6 +186,10 @@
+ bool 'Math emulation' CONFIG_MATH_EMULATION
+ bool 'MTRR (Memory Type Range Register) support' CONFIG_MTRR
+ bool 'Symmetric multi-processing support' CONFIG_SMP
++bool 'Preemptible Kernel' CONFIG_PREEMPT
++if [ "$CONFIG_PREEMPT" = "y" ]; then
++ bool 'Break selected locks' CONFIG_LOCK_BREAK
++fi
+ if [ "$CONFIG_SMP" != "y" ]; then
+ bool 'Local APIC support on uniprocessors' CONFIG_X86_UP_APIC
+ dep_bool 'IO-APIC support on uniprocessors' CONFIG_X86_UP_IOAPIC $CONFIG_X86_UP_APIC
+@@ -199,9 +203,12 @@
+ bool 'Multiquad NUMA system' CONFIG_MULTIQUAD
+ fi
+
+-if [ "$CONFIG_SMP" = "y" -a "$CONFIG_X86_CMPXCHG" = "y" ]; then
+- define_bool CONFIG_HAVE_DEC_LOCK y
++if [ "$CONFIG_SMP" = "y" -o "$CONFIG_PREEMPT" = "y" ]; then
++ if [ "$CONFIG_X86_CMPXCHG" = "y" ]; then
++ define_bool CONFIG_HAVE_DEC_LOCK y
++ fi
+ fi
++
+ endmenu
+
+ mainmenu_option next_comment
+diff -Nur linux_c860_org/arch/i386/kernel/entry.S linux/arch/i386/kernel/entry.S
+--- linux_c860_org/arch/i386/kernel/entry.S 2002-08-26 14:39:33.000000000 +0900
++++ linux/arch/i386/kernel/entry.S 2004-06-10 21:09:10.000000000 +0900
+@@ -71,7 +71,7 @@
+ * these are offsets into the task-struct.
+ */
+ state = 0
+-flags = 4
++preempt_count = 4
+ sigpending = 8
+ addr_limit = 12
+ exec_domain = 16
+@@ -79,8 +79,28 @@
+ tsk_ptrace = 24
+ processor = 52
+
++/* These are offsets into the irq_stat structure
++ * There is one per cpu and it is aligned to 32
++ * byte boundry (we put that here as a shift count)
++ */
++irq_array_shift = CONFIG_X86_L1_CACHE_SHIFT
++
++irq_stat_local_irq_count = 4
++irq_stat_local_bh_count = 8
++
+ ENOSYS = 38
+
++#ifdef CONFIG_SMP
++#define GET_CPU_INDX movl processor(%ebx),%eax; \
++ shll $irq_array_shift,%eax
++#define GET_CURRENT_CPU_INDX GET_CURRENT(%ebx); \
++ GET_CPU_INDX
++#define CPU_INDX (,%eax)
++#else
++#define GET_CPU_INDX
++#define GET_CURRENT_CPU_INDX GET_CURRENT(%ebx)
++#define CPU_INDX
++#endif
+
+ #define SAVE_ALL \
+ cld; \
+@@ -247,12 +267,30 @@
+ ALIGN
+ ENTRY(ret_from_intr)
+ GET_CURRENT(%ebx)
++#ifdef CONFIG_PREEMPT
++ cli
++ decl preempt_count(%ebx)
++#endif
+ ret_from_exception:
+ movl EFLAGS(%esp),%eax # mix EFLAGS and CS
+ movb CS(%esp),%al
+ testl $(VM_MASK | 3),%eax # return to VM86 mode or non-supervisor?
+ jne ret_from_sys_call
++#ifdef CONFIG_PREEMPT
++ cmpl $0,preempt_count(%ebx)
++ jnz restore_all
++ cmpl $0,need_resched(%ebx)
++ jz restore_all
++ movl SYMBOL_NAME(irq_stat)+irq_stat_local_bh_count CPU_INDX,%ecx
++ addl SYMBOL_NAME(irq_stat)+irq_stat_local_irq_count CPU_INDX,%ecx
++ jnz restore_all
++ incl preempt_count(%ebx)
++ sti
++ call SYMBOL_NAME(preempt_schedule)
++ jmp ret_from_intr
++#else
+ jmp restore_all
++#endif
+
+ ALIGN
+ reschedule:
+@@ -289,6 +327,9 @@
+ GET_CURRENT(%ebx)
+ call *%edi
+ addl $8,%esp
++#ifdef CONFIG_PREEMPT
++ cli
++#endif
+ jmp ret_from_exception
+
+ ENTRY(coprocessor_error)
+@@ -308,12 +349,18 @@
+ movl %cr0,%eax
+ testl $0x4,%eax # EM (math emulation bit)
+ jne device_not_available_emulate
++#ifdef CONFIG_PREEMPT
++ cli
++#endif
+ call SYMBOL_NAME(math_state_restore)
+ jmp ret_from_exception
+ device_not_available_emulate:
+ pushl $0 # temporary storage for ORIG_EIP
+ call SYMBOL_NAME(math_emulate)
+ addl $4,%esp
++#ifdef CONFIG_PREEMPT
++ cli
++#endif
+ jmp ret_from_exception
+
+ ENTRY(debug)
+diff -Nur linux_c860_org/arch/i386/kernel/i387.c linux/arch/i386/kernel/i387.c
+--- linux_c860_org/arch/i386/kernel/i387.c 2002-08-26 14:39:33.000000000 +0900
++++ linux/arch/i386/kernel/i387.c 2004-06-10 21:09:10.000000000 +0900
+@@ -10,6 +10,7 @@
+
+ #include <linux/config.h>
+ #include <linux/sched.h>
++#include <linux/spinlock.h>
+ #include <asm/processor.h>
+ #include <asm/i387.h>
+ #include <asm/math_emu.h>
+@@ -65,6 +66,8 @@
+ {
+ struct task_struct *tsk = current;
+
++ preempt_disable();
++
+ if (tsk->flags & PF_USEDFPU) {
+ __save_init_fpu(tsk);
+ return;
+diff -Nur linux_c860_org/arch/i386/kernel/process.c linux/arch/i386/kernel/process.c
+--- linux_c860_org/arch/i386/kernel/process.c 2002-08-26 14:39:33.000000000 +0900
++++ linux/arch/i386/kernel/process.c 2004-06-10 21:09:10.000000000 +0900
+@@ -485,7 +485,7 @@
+ /*
+ * Create a kernel thread
+ */
+-int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
++int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
+ {
+ long retval, d0;
+
+@@ -508,6 +508,7 @@
+ "r" (arg), "r" (fn),
+ "b" (flags | CLONE_VM)
+ : "memory");
++
+ return retval;
+ }
+
+diff -Nur linux_c860_org/arch/i386/kernel/smp.c linux/arch/i386/kernel/smp.c
+--- linux_c860_org/arch/i386/kernel/smp.c 2002-08-26 14:39:33.000000000 +0900
++++ linux/arch/i386/kernel/smp.c 2004-06-10 21:09:10.000000000 +0900
+@@ -354,10 +354,13 @@
+
+ asmlinkage void smp_invalidate_interrupt (void)
+ {
+- unsigned long cpu = smp_processor_id();
++ unsigned long cpu;
++
++ preempt_disable();
+
++ cpu = smp_processor_id();
+ if (!test_bit(cpu, &flush_cpumask))
+- return;
++ goto out;
+ /*
+ * This was a BUG() but until someone can quote me the
+ * line from the intel manual that guarantees an IPI to
+@@ -378,6 +381,8 @@
+ }
+ ack_APIC_irq();
+ clear_bit(cpu, &flush_cpumask);
++out:
++ preempt_enable();
+ }
+
+ static void flush_tlb_others (unsigned long cpumask, struct mm_struct *mm,
+@@ -427,17 +432,22 @@
+ void flush_tlb_current_task(void)
+ {
+ struct mm_struct *mm = current->mm;
+- unsigned long cpu_mask = mm->cpu_vm_mask & ~(1 << smp_processor_id());
++ unsigned long cpu_mask;
+
++ preempt_disable();
++ cpu_mask = mm->cpu_vm_mask & ~(1UL << smp_processor_id());
+ local_flush_tlb();
+ if (cpu_mask)
+ flush_tlb_others(cpu_mask, mm, FLUSH_ALL);
++ preempt_enable();
+ }
+
+ void flush_tlb_mm (struct mm_struct * mm)
+ {
+- unsigned long cpu_mask = mm->cpu_vm_mask & ~(1 << smp_processor_id());
++ unsigned long cpu_mask;
+
++ preempt_disable();
++ cpu_mask = mm->cpu_vm_mask & ~(1UL << smp_processor_id());
+ if (current->active_mm == mm) {
+ if (current->mm)
+ local_flush_tlb();
+@@ -446,13 +456,16 @@
+ }
+ if (cpu_mask)
+ flush_tlb_others(cpu_mask, mm, FLUSH_ALL);
++ preempt_enable();
+ }
+
+ void flush_tlb_page(struct vm_area_struct * vma, unsigned long va)
+ {
+ struct mm_struct *mm = vma->vm_mm;
+- unsigned long cpu_mask = mm->cpu_vm_mask & ~(1 << smp_processor_id());
++ unsigned long cpu_mask;
+
++ preempt_disable();
++ cpu_mask = mm->cpu_vm_mask & ~(1UL << smp_processor_id());
+ if (current->active_mm == mm) {
+ if(current->mm)
+ __flush_tlb_one(va);
+@@ -462,6 +475,7 @@
+
+ if (cpu_mask)
+ flush_tlb_others(cpu_mask, mm, va);
++ preempt_enable();
+ }
+
+ static inline void do_flush_tlb_all_local(void)
+diff -Nur linux_c860_org/arch/i386/kernel/traps.c linux/arch/i386/kernel/traps.c
+--- linux_c860_org/arch/i386/kernel/traps.c 2002-08-26 14:39:33.000000000 +0900
++++ linux/arch/i386/kernel/traps.c 2004-06-10 21:09:10.000000000 +0900
+@@ -694,6 +694,8 @@
+ *
+ * Careful.. There are problems with IBM-designed IRQ13 behaviour.
+ * Don't touch unless you *really* know how it works.
++ *
++ * Must be called with kernel preemption disabled.
+ */
+ asmlinkage void math_state_restore(struct pt_regs regs)
+ {
+diff -Nur linux_c860_org/arch/i386/lib/dec_and_lock.c linux/arch/i386/lib/dec_and_lock.c
+--- linux_c860_org/arch/i386/lib/dec_and_lock.c 2002-08-26 14:39:33.000000000 +0900
++++ linux/arch/i386/lib/dec_and_lock.c 2004-06-10 21:09:10.000000000 +0900
+@@ -8,6 +8,7 @@
+ */
+
+ #include <linux/spinlock.h>
++#include <linux/sched.h>
+ #include <asm/atomic.h>
+
+ int atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock)
+diff -Nur linux_c860_org/arch/ia64/kernel/process.c linux/arch/ia64/kernel/process.c
+--- linux_c860_org/arch/ia64/kernel/process.c 2002-08-26 14:39:53.000000000 +0900
++++ linux/arch/ia64/kernel/process.c 2004-06-10 21:09:10.000000000 +0900
+@@ -182,7 +182,7 @@
+ * | | <-- sp (lowest addr)
+ * +---------------------+
+ *
+- * Note: if we get called through kernel_thread() then the memory
++ * Note: if we get called through arch_kernel_thread() then the memory
+ * above "(highest addr)" is valid kernel stack memory that needs to
+ * be copied as well.
+ *
+@@ -415,7 +415,7 @@
+ }
+
+ pid_t
+-kernel_thread (int (*fn)(void *), void *arg, unsigned long flags)
++arch_kernel_thread (int (*fn)(void *), void *arg, unsigned long flags)
+ {
+ struct task_struct *parent = current;
+ int result, tid;
+diff -Nur linux_c860_org/arch/m68k/bvme6000/rtc.c linux/arch/m68k/bvme6000/rtc.c
+--- linux_c860_org/arch/m68k/bvme6000/rtc.c 2002-08-26 14:39:46.000000000 +0900
++++ linux/arch/m68k/bvme6000/rtc.c 2004-06-10 21:09:10.000000000 +0900
+@@ -54,6 +54,7 @@
+ /* Ensure clock and real-time-mode-register are accessible */
+ msr = rtc->msr & 0xc0;
+ rtc->msr = 0x40;
++ memset(&wtime, 0, sizeof(struct rtc_time));
+ do {
+ wtime.tm_sec = BCD2BIN(rtc->bcd_sec);
+ wtime.tm_min = BCD2BIN(rtc->bcd_min);
+diff -Nur linux_c860_org/arch/m68k/kernel/process.c linux/arch/m68k/kernel/process.c
+--- linux_c860_org/arch/m68k/kernel/process.c 2002-08-26 14:39:45.000000000 +0900
++++ linux/arch/m68k/kernel/process.c 2004-06-10 21:09:10.000000000 +0900
+@@ -124,7 +124,7 @@
+ /*
+ * Create a kernel thread
+ */
+-int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
++int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
+ {
+ int pid;
+ mm_segment_t fs;
+diff -Nur linux_c860_org/arch/m68k/mvme16x/rtc.c linux/arch/m68k/mvme16x/rtc.c
+--- linux_c860_org/arch/m68k/mvme16x/rtc.c 2002-08-26 14:39:47.000000000 +0900
++++ linux/arch/m68k/mvme16x/rtc.c 2004-06-10 21:09:10.000000000 +0900
+@@ -52,6 +52,7 @@
+ cli();
+ /* Ensure clock and real-time-mode-register are accessible */
+ rtc->ctrl = RTC_READ;
++ memset(&wtime, 0, sizeof(struct rtc_time));
+ wtime.tm_sec = BCD2BIN(rtc->bcd_sec);
+ wtime.tm_min = BCD2BIN(rtc->bcd_min);
+ wtime.tm_hour = BCD2BIN(rtc->bcd_hr);
+diff -Nur linux_c860_org/arch/mips/kernel/process.c linux/arch/mips/kernel/process.c
+--- linux_c860_org/arch/mips/kernel/process.c 2002-08-26 14:39:37.000000000 +0900
++++ linux/arch/mips/kernel/process.c 2004-06-10 21:09:10.000000000 +0900
+@@ -154,7 +154,7 @@
+ /*
+ * Create a kernel thread
+ */
+-int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
++int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
+ {
+ long retval;
+
+diff -Nur linux_c860_org/arch/mips64/kernel/process.c linux/arch/mips64/kernel/process.c
+--- linux_c860_org/arch/mips64/kernel/process.c 2002-08-26 14:39:55.000000000 +0900
++++ linux/arch/mips64/kernel/process.c 2004-06-10 21:09:10.000000000 +0900
+@@ -150,7 +150,7 @@
+ /*
+ * Create a kernel thread
+ */
+-int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
++int arch_kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
+ {
+ int retval;
+
+diff -Nur linux_c860_org/arch/parisc/kernel/process.c linux/arch/parisc/kernel/process.c
+--- linux_c860_org/arch/parisc/kernel/process.c 2002-08-26 14:39:58.000000000 +0900
++++ linux/arch/parisc/kernel/process.c 2004-06-10 21:09:10.000000000 +0900
+@@ -118,7 +118,7 @@
+ */
+
+ extern pid_t __kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
+-pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
++pid_t arch_kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
+ {
+
+ /*
+diff -Nur linux_c860_org/arch/ppc/kernel/misc.S linux/arch/ppc/kernel/misc.S
+--- linux_c860_org/arch/ppc/kernel/misc.S 2002-08-26 14:39:39.000000000 +0900
++++ linux/arch/ppc/kernel/misc.S 2004-06-10 21:09:10.000000000 +0900
+@@ -860,9 +860,9 @@
+
+ /*
+ * Create a kernel thread
+- * kernel_thread(fn, arg, flags)
++ * arch_kernel_thread(fn, arg, flags)
+ */
+-_GLOBAL(kernel_thread)
++_GLOBAL(arch_kernel_thread)
+ mr r6,r3 /* function */
+ ori r3,r5,CLONE_VM /* flags */
+ li r0,__NR_clone
+diff -Nur linux_c860_org/arch/s390/kernel/process.c linux/arch/s390/kernel/process.c
+--- linux_c860_org/arch/s390/kernel/process.c 2002-08-26 14:39:56.000000000 +0900
++++ linux/arch/s390/kernel/process.c 2004-06-10 21:09:10.000000000 +0900
+@@ -93,7 +93,7 @@
+ show_trace((unsigned long *) regs->gprs[15]);
+ }
+
+-int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
++int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
+ {
+ int clone_arg = flags | CLONE_VM;
+ int retval;
+diff -Nur linux_c860_org/arch/s390x/kernel/process.c linux/arch/s390x/kernel/process.c
+--- linux_c860_org/arch/s390x/kernel/process.c 2002-08-26 14:39:59.000000000 +0900
++++ linux/arch/s390x/kernel/process.c 2004-06-10 21:09:10.000000000 +0900
+@@ -93,7 +93,7 @@
+ show_trace((unsigned long *) regs->gprs[15]);
+ }
+
+-int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
++int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
+ {
+ int clone_arg = flags | CLONE_VM;
+ int retval;
+diff -Nur linux_c860_org/arch/sh/config.in linux/arch/sh/config.in
+--- linux_c860_org/arch/sh/config.in 2002-08-26 14:45:40.000000000 +0900
++++ linux/arch/sh/config.in 2004-06-10 21:09:10.000000000 +0900
+@@ -125,6 +125,8 @@
+ hex 'Physical memory start address' CONFIG_MEMORY_START 08000000
+ hex 'Physical memory size' CONFIG_MEMORY_SIZE 00400000
+ fi
++bool 'Preemptible Kernel' CONFIG_PREEMPT
++dep_bool 'Break selected locks' CONFIG_LOCK_BREAK $CONFIG_PREEMPT
+ endmenu
+
+ if [ "$CONFIG_SH_HP690" = "y" ]; then
+diff -Nur linux_c860_org/arch/sh/kernel/entry.S linux/arch/sh/kernel/entry.S
+--- linux_c860_org/arch/sh/kernel/entry.S 2002-08-26 14:39:52.000000000 +0900
++++ linux/arch/sh/kernel/entry.S 2004-06-10 21:09:10.000000000 +0900
+@@ -60,10 +60,18 @@
+ /*
+ * These are offsets into the task-struct.
+ */
+-flags = 4
++preempt_count = 4
+ sigpending = 8
+ need_resched = 20
+ tsk_ptrace = 24
++flags = 84
++
++/*
++ * These offsets are into irq_stat.
++ * (Find irq_cpustat_t in asm-sh/hardirq.h)
++ */
++local_irq_count = 8
++local_bh_count = 12
+
+ PT_TRACESYS = 0x00000002
+ PF_USEDFPU = 0x00100000
+@@ -143,7 +151,7 @@
+ mov.l __INV_IMASK, r11; \
+ stc sr, r10; \
+ and r11, r10; \
+- stc k_g_imask, r11; \
++ stc k_g_imask, r11; \
+ or r11, r10; \
+ ldc r10, sr
+
+@@ -304,8 +312,8 @@
+ mov.l @(tsk_ptrace,r0), r0 ! Is current PTRACE_SYSCALL'd?
+ mov #PT_TRACESYS, r1
+ tst r1, r0
+- bt ret_from_syscall
+- bra syscall_ret_trace
++ bf syscall_ret_trace
++ bra ret_from_syscall
+ nop
+
+ .align 2
+@@ -505,8 +513,6 @@
+ .long syscall_ret_trace
+ __syscall_ret:
+ .long syscall_ret
+-__INV_IMASK:
+- .long 0xffffff0f ! ~(IMASK)
+
+
+ .align 2
+@@ -518,7 +524,84 @@
+ .align 2
+ 1: .long SYMBOL_NAME(schedule)
+
++#ifdef CONFIG_PREEMPT
++ !
++ ! Returning from interrupt during kernel mode: check if
++ ! preempt_schedule should be called. If need_resched flag
++ ! is set, preempt_count is zero, and we're not currently
++ ! in an interrupt handler (local irq or bottom half) then
++ ! call preempt_schedule.
++ !
++ ! Increment preempt_count to prevent a nested interrupt
++ ! from reentering preempt_schedule, then decrement after
++ ! and drop through to regular interrupt return which will
++ ! jump back and check again in case such an interrupt did
++ ! come in (and didn't preempt due to preempt_count).
++ !
++ ! NOTE: because we just checked that preempt_count was
++ ! zero before getting to the call, can't we use immediate
++ ! values (1 and 0) rather than inc/dec? Also, rather than
++ ! drop through to ret_from_irq, we already know this thread
++ ! is kernel mode, can't we go direct to ret_from_kirq? In
++ ! fact, with proper interrupt nesting and so forth could
++ ! the loop simply be on the need_resched w/o checking the
++ ! other stuff again? Optimize later...
++ !
++ .align 2
++ret_from_kirq:
++ ! Nonzero preempt_count prevents scheduling
++ stc k_current, r1
++ mov.l @(preempt_count,r1), r0
++ cmp/eq #0, r0
++ bf restore_all
++ ! Zero need_resched prevents scheduling
++ mov.l @(need_resched,r1), r0
++ cmp/eq #0, r0
++ bt restore_all
++ ! If in_interrupt(), don't schedule
++ mov.l __irq_stat, r1
++ mov.l @(local_irq_count,r1), r0
++ mov.l @(local_bh_count,r1), r1
++ or r1, r0
++ cmp/eq #0, r0
++ bf restore_all
++ ! Allow scheduling using preempt_schedule
++ ! Adjust preempt_count and SR as needed.
++ stc k_current, r1
++ mov.l @(preempt_count,r1), r0 ! Could replace this ...
++ add #1, r0 ! ... and this w/mov #1?
++ mov.l r0, @(preempt_count,r1)
++ STI()
++ mov.l __preempt_schedule, r0
++ jsr @r0
++ nop
++ /* CLI */
++ stc sr, r0
++ or #0xf0, r0
++ ldc r0, sr
++ !
++ stc k_current, r1
++ mov.l @(preempt_count,r1), r0 ! Could replace this ...
++ add #-1, r0 ! ... and this w/mov #0?
++ mov.l r0, @(preempt_count,r1)
++ ! Maybe should bra ret_from_kirq, or loop over need_resched?
++ ! For now, fall through to ret_from_irq again...
++#endif /* CONFIG_PREEMPT */
++
+ ret_from_irq:
++ mov #OFF_SR, r0
++ mov.l @(r0,r15), r0 ! get status register
++ shll r0
++ shll r0 ! kernel space?
++#ifndef CONFIG_PREEMPT
++ bt restore_all ! Yes, it's from kernel, go back soon
++#else /* CONFIG_PREEMPT */
++ bt ret_from_kirq ! From kernel: maybe preempt_schedule
++#endif /* CONFIG_PREEMPT */
++ !
++ bra ret_from_syscall
++ nop
++
+ ret_from_exception:
+ mov #OFF_SR, r0
+ mov.l @(r0,r15), r0 ! get status register
+@@ -564,6 +647,13 @@
+ .long SYMBOL_NAME(do_signal)
+ __irq_stat:
+ .long SYMBOL_NAME(irq_stat)
++#ifdef CONFIG_PREEMPT
++__preempt_schedule:
++ .long SYMBOL_NAME(preempt_schedule)
++#endif /* CONFIG_PREEMPT */
++__INV_IMASK:
++ .long 0xffffff0f ! ~(IMASK)
++
+
+ .align 2
+ restore_all:
+@@ -679,7 +769,7 @@
+ __fpu_prepare_fd:
+ .long SYMBOL_NAME(fpu_prepare_fd)
+ __init_task_flags:
+- .long SYMBOL_NAME(init_task_union)+4
++ .long SYMBOL_NAME(init_task_union)+flags
+ __PF_USEDFPU:
+ .long PF_USEDFPU
+ #endif
+diff -Nur linux_c860_org/arch/sh/kernel/irq.c linux/arch/sh/kernel/irq.c
+--- linux_c860_org/arch/sh/kernel/irq.c 2002-08-26 14:39:52.000000000 +0900
++++ linux/arch/sh/kernel/irq.c 2004-06-10 21:09:10.000000000 +0900
+@@ -229,6 +229,14 @@
+ struct irqaction * action;
+ unsigned int status;
+
++ /*
++ * At this point we're now about to actually call handlers,
++ * and interrupts might get reenabled during them... bump
++ * preempt_count to prevent any preemption while the handler
++ * called here is pending...
++ */
++ preempt_disable();
++
+ /* Get IRQ number */
+ asm volatile("stc r2_bank, %0\n\t"
+ "shlr2 %0\n\t"
+@@ -298,8 +306,17 @@
+ desc->handler->end(irq);
+ spin_unlock(&desc->lock);
+
++
+ if (softirq_pending(cpu))
+ do_softirq();
++
++ /*
++ * We're done with the handlers, interrupts should be
++ * currently disabled; decrement preempt_count now so
++ * as we return preemption may be allowed...
++ */
++ preempt_enable_no_resched();
++
+ return 1;
+ }
+
+diff -Nur linux_c860_org/arch/sh/kernel/process.c linux/arch/sh/kernel/process.c
+--- linux_c860_org/arch/sh/kernel/process.c 2002-08-26 14:39:52.000000000 +0900
++++ linux/arch/sh/kernel/process.c 2004-06-10 21:09:10.000000000 +0900
+@@ -118,7 +118,7 @@
+ * This is the mechanism for creating a new kernel thread.
+ *
+ */
+-int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
++int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
+ { /* Don't use this in BL=1(cli). Or else, CPU resets! */
+ register unsigned long __sc0 __asm__ ("r0");
+ register unsigned long __sc3 __asm__ ("r3") = __NR_clone;
+diff -Nur linux_c860_org/arch/sparc/kernel/process.c linux/arch/sparc/kernel/process.c
+--- linux_c860_org/arch/sparc/kernel/process.c 2002-08-26 14:39:35.000000000 +0900
++++ linux/arch/sparc/kernel/process.c 2004-06-10 21:09:10.000000000 +0900
+@@ -657,7 +657,7 @@
+ * a system call from a "real" process, but the process memory space will
+ * not be free'd until both the parent and the child have exited.
+ */
+-pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
++pid_t arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
+ {
+ long retval;
+
+diff -Nur linux_c860_org/arch/sparc64/kernel/process.c linux/arch/sparc64/kernel/process.c
+--- linux_c860_org/arch/sparc64/kernel/process.c 2002-08-26 14:39:47.000000000 +0900
++++ linux/arch/sparc64/kernel/process.c 2004-06-10 21:09:10.000000000 +0900
+@@ -661,7 +661,7 @@
+ * a system call from a "real" process, but the process memory space will
+ * not be free'd until both the parent and the child have exited.
+ */
+-pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
++pid_t arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
+ {
+ long retval;
+
+diff -Nur linux_c860_org/drivers/acorn/char/i2c.c linux/drivers/acorn/char/i2c.c
+--- linux_c860_org/drivers/acorn/char/i2c.c 2002-08-26 14:45:01.000000000 +0900
++++ linux/drivers/acorn/char/i2c.c 2004-06-10 21:09:10.000000000 +0900
+@@ -166,6 +166,7 @@
+ break;
+
+ case RTC_RD_TIME:
++ memset(&rtctm, 0, sizeof(struct rtc_time));
+ get_rtc_time(&rtc_raw, &year);
+ rtctm.tm_sec = rtc_raw.secs;
+ rtctm.tm_min = rtc_raw.mins;
+diff -Nur linux_c860_org/drivers/block/Config.in linux/drivers/block/Config.in
+--- linux_c860_org/drivers/block/Config.in 2003-11-07 11:46:57.000000000 +0900
++++ linux/drivers/block/Config.in 2004-06-10 21:09:10.000000000 +0900
+@@ -37,7 +37,6 @@
+ dep_tristate 'Compaq Smart Array 5xxx support' CONFIG_BLK_CPQ_CISS_DA $CONFIG_PCI
+ dep_tristate 'Mylex DAC960/DAC1100 PCI RAID Controller support' CONFIG_BLK_DEV_DAC960 $CONFIG_PCI
+
+-
+ tristate 'Loopback device support' CONFIG_BLK_DEV_LOOP
+ dep_tristate 'Network block device support' CONFIG_BLK_DEV_NBD $CONFIG_NET
+
+diff -Nur linux_c860_org/drivers/char/Config.in linux/drivers/char/Config.in
+--- linux_c860_org/drivers/char/Config.in 2002-08-29 12:25:54.000000000 +0900
++++ linux/drivers/char/Config.in 2004-06-10 21:09:10.000000000 +0900
+@@ -17,10 +17,26 @@
+ fi
+ if [ "$CONFIG_SABINAL_DISCOVERY" = "y" -o \
+ "$CONFIG_ARCH_PXA_POODLE" = "y" -o \
+- "$CONFIG_ARCH_PXA_CORGI" = "y" ]; then
++ "$CONFIG_ARCH_PXA_CORGI" = "y" -o \
++ "$CONFIG_ARCH_PXA_TOSA" = "y" ]; then
+ bool ' SL-series serial port support' CONFIG_SERIAL_SL_SERIES
+ fi
++ if [ "$CONFIG_SABINAL_DISCOVERY" = "y" -o \
++ "$CONFIG_ARCH_PXA_POODLE" = "y" -o \
++ "$CONFIG_ARCH_PXA_CORGI" = "y" ]; then
++ bool ' SL-series touchscreen pressure value read (EXPERIMENTAL)' CONFIG_SL_TS_PRESSURE
++ dep_bool ' Boot On touchscreen pressure value read' CONFIG_BOOT_PRESSURE_ON $CONFIG_SL_TS_PRESSURE
++ bool ' SL-C Series power key suspend (EXPERIMENTAL)' CONFIG_SL7X0_POWER_KEY_OFF
++ dep_bool ' Boot On power key suspend' CONFIG_BOOT_POWER_KEY_OFF $CONFIG_SL7X0_POWER_KEY_OFF
++ bool ' SL-C Series 3 Button touch screen (EXPERIMENTAL)' CONFIG_SL_3BUTTON_PATCH
++ dep_bool ' Boot On 3 Button touch screen' CONFIG_BOOT_3BUTTON_PATCH_ON $CONFIG_SL_3BUTTON_PATCH
++ bool ' SL-series write ts data (EXPERIMENTAL)' CONFIG_SL_WRITE_TS
++ fi
++ if [ "$CONFIG_SERIAL_SL_SERIES" = "y" ]; then
++ bool ' SL-series Bluetooth support' CONFIG_BLUETOOTH_SL
++ fi
+ fi
++bool 'Use Keyboard device file (EXPERIMENTAL)' CONFIG_KBD_DEV_FILE
+ if [ "$CONFIG_SA1100_COLLIE" = "y" ]; then
+ bool 'COLLIE serial port support' CONFIG_SERIAL_COLLIE
+ dep_bool ' Console on COLLIE serial port' CONFIG_SERIAL_COLLIE_CONSOLE $CONFIG_SERIAL_COLLIE
+@@ -216,6 +232,7 @@
+ if [ "$CONFIG_ARCH_SHARP_SL" = "y" ]; then
+ tristate 'Cotulla Real Time Clock' CONFIG_COTULLA_RTC
+ tristate 'ADS7846 Touch Pannel' CONFIG_ADS7846_TS
++ tristate 'Tosa Touch Pannel' CONFIG_TOSA_TS
+ fi
+ if [ "$CONFIG_SABINAL_DISCOVERY" = "y" ]; then
+ tristate 'Discovery LED ' CONFIG_DISCOVERY_LED $(CONFIG_SABINAL_DISCOVERY)
+diff -Nur linux_c860_org/drivers/char/Makefile linux/drivers/char/Makefile
+--- linux_c860_org/drivers/char/Makefile 2002-10-11 21:13:44.000000000 +0900
++++ linux/drivers/char/Makefile 2004-06-10 21:09:10.000000000 +0900
+@@ -12,7 +12,8 @@
+ #
+ # This file contains the font map for the default (hardware) font
+ #
+-FONTMAPFILE = cp437.uni
++#FONTMAPFILE = cp437.uni
++FONTMAPFILE = direct.uni
+
+ O_TARGET := char.o
+
+@@ -114,6 +115,11 @@
+ KEYMAP := corgi_keymap.o
+ # SERIAL =
+ endif
++ ifeq ($(CONFIG_ARCH_PXA_TOSA),y)
++ KEYBD := tosa_keyb.o tosa_logkey.o
++ KEYMAP := tosa_keymap.o
++# SERIAL =
++ endif
+ endif
+
+ ifeq ($(ARCH),sh)
+@@ -232,6 +238,9 @@
+ obj-$(CONFIG_DISCOVERY_LED) += sharp_led.o discovery_led.o
+ obj-$(CONFIG_ARCH_PXA_POODLE) += sharp_led.o sharp_kbdctl.o sharpsl_led.o sharp_buzzer.o
+ obj-$(CONFIG_ARCH_PXA_CORGI) += sharp_led.o sharpsl_led.o sharp_kbdctl.o corgi_rc.o sharp_buzzer.o
++obj-$(CONFIG_ARCH_PXA_TOSA) += sharp_led.o sharpsl_led.o sharp_kbdctl.o
++obj-$(CONFIG_BUZZER_TOSA) += sharp_buzzer.o
++
+ obj-$(CONFIG_BUSMOUSE) += busmouse.o
+ obj-$(CONFIG_DTLK) += dtlk.o
+ obj-$(CONFIG_R3964) += n_r3964.o
+@@ -248,6 +257,7 @@
+ obj-$(CONFIG_SA1100_RTC) += sa1100-rtc.o
+ obj-$(CONFIG_COTULLA_RTC) += cotulla-rtc.o
+ obj-$(CONFIG_ADS7846_TS) += ads7846_ts.o
++obj-$(CONFIG_TOSA_TS) += tosa_ts.o
+ ifeq ($(CONFIG_PPC),)
+ obj-$(CONFIG_NVRAM) += nvram.o
+ endif
+@@ -340,3 +350,7 @@
+
+ corgi_keymap.c: corgi_keymap.map
+ set -e ; loadkeys --mktable $< | sed -e 's/^static *//' > $@
++
++tosa_keymap.c: tosa_keymap.map
++ set -e ; loadkeys --mktable $< | sed -e 's/^static *//' > $@
++
+diff -Nur linux_c860_org/drivers/char/ads7846_ts.c linux/drivers/char/ads7846_ts.c
+--- linux_c860_org/drivers/char/ads7846_ts.c 2003-06-18 16:12:26.000000000 +0900
++++ linux/drivers/char/ads7846_ts.c 2004-06-10 21:09:10.000000000 +0900
+@@ -14,6 +14,7 @@
+ * 31-Jul-2002 Lineo Japan, Inc. for ARCH_PXA
+ * 12-Dec-2002 Sharp Corporation for Poodle and Corgi
+ * 27-Feb-2003 Sharp modified for Poodle
++ * 12-Dec-2002 Sharp Corporation for Poodle and Corgi
+ *
+ */
+
+@@ -85,7 +86,56 @@
+ static DECLARE_WAIT_QUEUE_HEAD(queue);
+ static int head, tail, sample;
+ static char pendown = 0;
+-unsigned long Pressure;
++static unsigned long Pressure;
++#if defined(CONFIG_SL_TS_PRESSURE) || defined(CONFIG_SL7X0_POWER_KEY_OFF) || \
++ defined(CONFIG_SL_3BUTTON_PATCH) || defined(CONFIG_SL_WRITE_TS)
++#include <linux/proc_fs.h>
++#endif
++
++#if defined(CONFIG_SL_TS_PRESSURE)
++static unsigned long tsPressure;
++#if defined(CONFIG_BOOT_PRESSURE_ON)
++static unsigned int tspressure_mode = 1;
++#else
++static unsigned int tspressure_mode = 0;
++#endif
++
++static ssize_t tspressure_read_params(struct file *file, char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ char outputbuf[32];
++ int count;
++
++ if (*ppos>0) /* Assume reading completed in previous read*/
++ return 0;
++ count = sprintf(outputbuf, "%d\n", (unsigned int)tspressure_mode);
++ count++;
++ *ppos += count;
++ if (count>nbytes) /* Assume output can be read at one time */
++ return -EINVAL;
++ if (copy_to_user(buf, outputbuf, count+1))
++ return -EFAULT;
++ return count;
++}
++
++static ssize_t tspressure_write_params(struct file *file, const char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ unsigned int param=0;
++
++ sscanf(buf,"%d",&param);
++ if (tspressure_mode != param) {
++ tspressure_mode = param;
++ printk("tspressure = %d\n", tspressure_mode);
++ }
++ return nbytes;
++}
++
++static struct file_operations proc_tspressure_operations = {
++ read: tspressure_read_params,
++ write: tspressure_write_params,
++};
++#endif
+ #if defined(CONFIG_ARCH_PXA_CORGI)
+ static char ispass = 1;
+ #endif
+@@ -97,6 +147,88 @@
+ static char PowerDownMode = PMPD_MODE_ACTIVE;
+ #endif // CONFIG_PM
+ #endif
++
++#if defined(CONFIG_SL7X0_POWER_KEY_OFF)
++extern unsigned int power_key_off_mode;
++
++static ssize_t power_key_off_read_params(struct file *file, char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ char outputbuf[32];
++ int count;
++
++ if (*ppos>0) /* Assume reading completed in previous read*/
++ return 0;
++ count = sprintf(outputbuf, "%d\n", (unsigned int)power_key_off_mode);
++ count++;
++ *ppos += count;
++ if (count>nbytes) /* Assume output can be read at one time */
++ return -EINVAL;
++ if (copy_to_user(buf, outputbuf, count+1))
++ return -EFAULT;
++ return count;
++}
++
++static ssize_t power_key_off_write_params(struct file *file, const char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ unsigned int param=0;
++
++ sscanf(buf,"%d",&param);
++ if (power_key_off_mode != param) {
++ power_key_off_mode = param;
++ printk("power_key_off = %d\n", power_key_off_mode);
++ }
++ return nbytes;
++}
++
++static struct file_operations proc_power_key_off_operations = {
++ read: power_key_off_read_params,
++ write: power_key_off_write_params,
++};
++#endif
++
++#if defined(CONFIG_SL_3BUTTON_PATCH)
++extern int pressure_alt;
++extern unsigned int three_button_mode;
++
++static ssize_t three_button_read_params(struct file *file, char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ char outputbuf[32];
++ int count;
++
++ if (*ppos>0) /* Assume reading completed in previous read*/
++ return 0;
++ count = sprintf(outputbuf, "%d\n", (unsigned int)three_button_mode);
++ count++;
++ *ppos += count;
++ if (count>nbytes) /* Assume output can be read at one time */
++ return -EINVAL;
++ if (copy_to_user(buf, outputbuf, count+1))
++ return -EFAULT;
++ return count;
++}
++
++static ssize_t three_button_write_params(struct file *file, const char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ unsigned int param=0;
++
++ sscanf(buf,"%d",&param);
++ if (three_button_mode != param) {
++ three_button_mode = param;
++ printk("three_button = %d\n", three_button_mode);
++ }
++ return nbytes;
++}
++
++static struct file_operations proc_three_button_operations = {
++ read: three_button_read_params,
++ write: three_button_write_params,
++};
++#endif
++
+ //extern unsigned short touch_panel_intr;
+
+ #if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
+@@ -147,7 +279,7 @@
+
+ //#define WAIT_AFTER_SYNC_HS 151 /* 41us */
+ //#define WAIT_AFTER_SYNC_HS 142 /* 38.5us */
+-static unsigned long wait_after_sync_hs = 0;
++static long wait_after_sync_hs = 0;
+ #define WAIT_AFTER_SYNC_HS wait_after_sync_hs
+ #define SyncHS() while((GPLR(GPIO_HSYNC) & GPIO_bit(GPIO_HSYNC)) == 0);\
+ while((GPLR(GPIO_HSYNC) & GPIO_bit(GPIO_HSYNC)) != 0);
+@@ -157,20 +289,35 @@
+ #if 1
+ #define WAIT_HS_333_VGA 5791 // 17.995us
+ #define WAIT_HS_400_VGA 7013 // 17.615us
++#define WAIT_HS_471_VGA 8257 // 17.615us
++#define WAIT_HS_400_VGA_FASTSYSCLK 5260 // 17.615us
++#define WAIT_HS_471_VGA_FASTSYSCLK 6192 // 17.615us
++
++#define WAIT_HS_400_VGA640 21376 // 17.615us
++#define WAIT_HS_471_VGA640 25170 // 17.615us
++#define WAIT_HS_400_VGA640_FASTSYSCLK 16032 // 17.615us
++#define WAIT_HS_471_VGA640_FASTSYSCLK 18878 // 17.615us
++
++
+ #define WAIT_HS_333_QVGA 13969 // 42.100us
+ #define WAIT_HS_400_QVGA 16621 // 41.750us
++#define WAIT_HS_471_QVGA 19571 // 41.750us
++
+ #else
+ #define WAIT_HS_333_VGA 6403 // 19.3us
+ #define WAIT_HS_400_VGA 7683 // 19.3us
+ #define WAIT_HS_333_QVGA 13935 // 42.0us
+ #define WAIT_HS_400_QVGA 16720 // 42.0us
++
+ #endif
+ #define LCD_MODE_480 0
+ #define LCD_MODE_320 1
+ #define LCD_MODE_240 2
++#define LCD_MODE_640 3
+ extern int w100fb_lcdMode;
+ extern int w100fb_isblank;
+ extern unsigned long cccr_reg;
++extern int fastsysclk_mode;
+
+ static int sync_receive_data_send_cmd(int doRecive,int doSend,int sCmd)
+ {
+@@ -195,21 +342,54 @@
+ // 332MHz
+ if (w100fb_lcdMode == LCD_MODE_480) {
+ wait_time = WAIT_HS_333_VGA - wait_after_sync_hs;
+- }
+- else {
++ }else {
+ wait_time = WAIT_HS_333_QVGA - wait_after_sync_hs;
+ }
+- }
+- else {
+- // 400MHz
+- if (w100fb_lcdMode == LCD_MODE_480) {
+- wait_time = WAIT_HS_400_VGA - wait_after_sync_hs;
++ }else if(cccr_reg == 0x242 || cccr_reg == 0x162) {
++
++ // 471MHz
++ if (fastsysclk_mode == 100 ){
++ if (w100fb_lcdMode == LCD_MODE_480) {
++ wait_time = WAIT_HS_471_VGA_FASTSYSCLK - wait_after_sync_hs;
++ }else if(w100fb_lcdMode == LCD_MODE_640){
++ wait_time = WAIT_HS_471_VGA640_FASTSYSCLK - wait_after_sync_hs;
++ }else {
++ wait_time = WAIT_HS_471_QVGA - wait_after_sync_hs;
++ }
++ }else {
++ if (w100fb_lcdMode == LCD_MODE_480) {
++ wait_time = WAIT_HS_471_VGA - wait_after_sync_hs;
++ }else if(w100fb_lcdMode == LCD_MODE_640){
++ wait_time = WAIT_HS_471_VGA640 - wait_after_sync_hs;
++ }else {
++ wait_time = WAIT_HS_471_QVGA - wait_after_sync_hs;
++ }
+ }
+- else {
+- wait_time = WAIT_HS_400_QVGA - wait_after_sync_hs;
++
++ }else {
++
++ // 400MHz
++ if (fastsysclk_mode == 100 ){
++ if (w100fb_lcdMode == LCD_MODE_480) {
++ wait_time = WAIT_HS_400_VGA_FASTSYSCLK - wait_after_sync_hs;
++ }else if(w100fb_lcdMode == LCD_MODE_640){
++ wait_time = WAIT_HS_400_VGA640_FASTSYSCLK - wait_after_sync_hs;
++ }else {
++ wait_time = WAIT_HS_400_QVGA - wait_after_sync_hs;
++ }
++ }else {
++ if (w100fb_lcdMode == LCD_MODE_480) {
++ wait_time = WAIT_HS_400_VGA - wait_after_sync_hs;
++ }else if(w100fb_lcdMode == LCD_MODE_640){
++ wait_time = WAIT_HS_400_VGA640 - wait_after_sync_hs;
++ }else {
++ wait_time = WAIT_HS_400_QVGA - wait_after_sync_hs;
++ }
+ }
+ }
+
++
++
+ CCNT_ON();
+
+ /* polling HSync */
+@@ -229,7 +409,7 @@
+
+ /* Wait after HSync */
+ CCNT(timer2);
+- if (w100fb_lcdMode != LCD_MODE_480) {
++ if ((w100fb_lcdMode != LCD_MODE_480) && (w100fb_lcdMode != LCD_MODE_640)) {
+ while((timer2-timer1) < wait_time){
+ CCNT(timer2);
+ }
+@@ -324,7 +504,11 @@
+ ((int)((x)-(y))<(int)(d)) && \
+ ((int)((y)-(x))<(int)(d)) )
+ unsigned long cmd;
++#if defined(CONFIG_SL_TS_PRESSURE)
++ unsigned int t,x,y,z[2],z2,dummy;
++#else
+ unsigned int t,x,y,z[2];
++#endif
+ int i,j,k;
+ int d = 8, c = 10;
+ int err = 0;
+@@ -335,7 +519,18 @@
+ (3u << ADSCTRL_ADR_SH) | (1u << ADSCTRL_STS_SH);
+ t = ads7846_rw(cmd);
+ z[i] = ads7846_rw(cmd);
+-
++
++#if defined(CONFIG_SL_TS_PRESSURE)
++ if (tspressure_mode) {
++ /* Z2 */
++ cmd = (1u << ADSCTRL_PD0_SH) | (1u << ADSCTRL_PD1_SH) |
++ (4u << ADSCTRL_ADR_SH) | (1u << ADSCTRL_STS_SH);
++ dummy = ads7846_rw(cmd);
++ udelay(1);
++ z2 = ads7846_rw(cmd);
++ }
++#endif
++
+ if( i ) break;
+
+ /* X-axis */
+@@ -369,6 +564,10 @@
+ }
+ }
+ Pressure = 1;
++#if defined(CONFIG_SL_TS_PRESSURE)
++ if (tspressure_mode)
++ if (z[1]) tsPressure = (15000 - x * (z2 - z[1]) / z[1]) >> 4;
++#endif
+ for(i=0;i<2;i++){
+ if( !z[i] )
+ Pressure = 0;
+@@ -482,12 +681,19 @@
+
+ // printk("x=%d,y=%d\n",tp->xd,tp->yd);
+
+- if (z1 != 0)
++ if (z1 != 0) {
+ Pressure = Rx * (tp->xd) * ((10*z2/z1) - 1*10) >> 10;
+- else
++#if defined(CONFIG_SL_TS_PRESSURE)
++ if (tspressure_mode)
++ tsPressure = (15000 - x[3] * (z2 - z1) / z1) >> 4;
++ }
++#endif
++ else
++#if defined(CONFIG_SL_TS_PRESSURE)
++ tsPressure = Pressure = 0;
++#else
+ Pressure = 0;
+-
+-
++#endif
+ cmd = (1u << ADSCTRL_PD0_SH) | (1u << ADSCTRL_PD1_SH) |
+ (4u << ADSCTRL_ADR_SH) | (1u << ADSCTRL_STS_SH);
+ /* Power-Down Enable */
+@@ -566,11 +772,25 @@
+ // printk("fail %d\n", fail);
+
+ if (fail == TOUCH_PANEL_AVERAGE) {
++#if defined(CONFIG_SL_TS_PRESSURE)
++ tsPressure = Pressure = 0;
++#else
+ Pressure = 0;
++#endif
+ // printk("pen up\n");
+ }
+ else {
++#if defined(CONFIG_SL_TS_PRESSURE)
++ if (tspressure_mode) {
++ if (z1) {
++ tsPressure = Pressure = (15000 - x * (z2 - z1) / z1) >> 4;
++ } else
++ tsPressure = Pressure = 0;
++ } else
++ tsPressure = Pressure = 1;
++#else
+ Pressure = 1;
++#endif
+ tp->xd = tx / (TOUCH_PANEL_AVERAGE - fail);
+ tp->yd = ty / (TOUCH_PANEL_AVERAGE - fail);
+ // printk("pen position (%d,%d)\n", tx, ty);
+@@ -742,7 +962,11 @@
+
+ static void new_data(void)
+ {
++#if !defined(CONFIG_ARCH_PXA_CORGI) && !defined(CONFIG_ARCH_PXA_POODLE)
++#if !defined(CONFIG_POODLE_TR0)
+ int diff0, diff1, diff2, diff3;
++#endif
++#endif
+
+ #ifdef CONFIG_PM
+ if( PowerDownMode != PMPD_MODE_ACTIVE )
+@@ -862,6 +1086,25 @@
+ }
+ #endif
+
++/// write ts data
++#if defined(CONFIG_SL_WRITE_TS)
++static void write_new_data(TS_EVENT write_data)
++{
++ write_data.millisecs = jiffies;
++ tbuf[head++] = write_data;
++
++ if (head >= BUFSIZE) { head = 0; }
++
++ if (head == tail && ++tail >= BUFSIZE) { tail = 0; }
++
++ if (fasync)
++ kill_fasync(&fasync, SIGIO, POLL_IN);
++
++ wake_up_interruptible(&queue);
++}
++#endif
++
++
+ static void cotulla_main_ts_timer(unsigned long irq)
+ {
+ // ts_interrupt(irq, NULL, NULL);
+@@ -896,6 +1139,7 @@
+ // printk("!(%d,%d)",pos_dt.xd,pos_dt.yd);
+ tc.x = pos_dt.xd;
+ tc.y = pos_dt.yd;
++
+ #if defined(CONFIG_ARCH_PXA_POODLE)
+ lock_FCS(POWER_MODE_TOUCH, 1); // not enter FCS mode.
+ #if defined(CONFIG_POODLE_TR0)
+@@ -907,11 +1151,53 @@
+ tc.pressure = 500;
+ #elif defined(CONFIG_ARCH_PXA_CORGI)
+ if( pos_dt.xd && pos_dt.yd && Pressure ) {
++#if defined(CONFIG_SL_3BUTTON_PATCH)
++ if (three_button_mode) {
++ switch (pressure_alt) {
++ case 0x00:
++ tc.pressure = 500;
++ break;
++ case 0x01:
++ tc.pressure = 1000;
++ break;
++ case 0x02:
++ tc.pressure = 2000;
++ break;
++ default:
++#if defined(CONFIG_SL_TS_PRESSURE)
++ if (tspressure_mode)
++ tc.pressure = Pressure;
++ else
++ tc.pressure = 500;
++#else
++ tc.pressure = 500;
++#endif
++ break;
++ }
++
++ /* printk("pressure = %d \n",tc.pressure); */
++ } else
++#endif
++#if defined(CONFIG_SL_TS_PRESSURE)
++ if (tspressure_mode)
++ tc.pressure = Pressure;
++ else
++ tc.pressure = 500;
++#else
+ tc.pressure = 500;
++#endif
++
+ #else
+ if( pos_dt.xd && pos_dt.yd ){
++#if defined(CONFIG_SL_TS_PRESSURE)
++ if (tspressure_mode)
++ tc.pressure = Pressure;
++ else
++ tc.pressure = 1;
++#else
+ tc.pressure = 1;
+ #endif
++#endif
+ before_data = tc;
+ pendown = 1;
+ new_data();
+@@ -956,7 +1242,37 @@
+ static void ts_hardware_init(void)
+ {
+ unsigned int dummy;
++
++#if defined(CONFIG_SL_TS_PRESSURE)
++ struct proc_dir_entry *tspressure_proc;
++#endif
++
++#if defined(CONFIG_SL_3BUTTON_PATCH)
++ struct proc_dir_entry *three_button_proc;
++#endif
++
++#if defined(CONFIG_SL7X0_POWER_KEY_OFF)
++ struct proc_dir_entry *power_key_off_proc;
++#endif
++
++#if defined(CONFIG_SL_TS_PRESSURE)
++ tspressure_proc = create_proc_entry("tspressure", 0, NULL);
++ if (tspressure_proc)
++ tspressure_proc->proc_fops = &proc_tspressure_operations;
++#endif
+
++#if defined(CONFIG_SL_3BUTTON_PATCH)
++ three_button_proc = create_proc_entry("three_button", 0, NULL);
++ if (three_button_proc)
++ three_button_proc->proc_fops = &proc_three_button_operations;
++#endif
++
++#if defined(CONFIG_SL7X0_POWER_KEY_OFF)
++ power_key_off_proc = create_proc_entry("power_key_off", 0, NULL);
++ if (power_key_off_proc)
++ power_key_off_proc->proc_fops = &proc_power_key_off_operations;
++#endif
++
+ #if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
+ pxa_ssp_init();
+ #else
+@@ -1043,6 +1359,7 @@
+ y_rev = 0;
+ xyswap = 1;
+ #else
++#ifdef CONFIG_FBCON_ROTATE_R
+ res_x = 480;
+ res_y = 640;
+
+@@ -1050,7 +1367,17 @@
+ x_rev = 1;
+ y_rev = 0;
+ xyswap = 1;
++#else
++ res_x = 640;
++ res_y = 480;
++
++ cal_ok = 1;
++ x_rev = 0;
++ y_rev = 0;
++ xyswap = 0;
++#endif
+ #endif
++
+ #else
+ #ifdef USE_SL5500_QT
+ res_x = 240;
+@@ -1170,7 +1497,6 @@
+
+ r.pressure = t.pressure;
+ r.millisecs = t.millisecs;
+- //printk("ts:ts_read(x, y, p) = (%d, %d, %d)\n", (unsigned int)r.x, (unsigned int)r.y, (unsigned int)r.pressure);
+
+ copy_to_user(buffer,&r,sizeof(TS_EVENT));
+ }
+@@ -1180,10 +1506,54 @@
+ static ssize_t ts_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
+ {
+ #if defined(CONFIG_ARCH_PXA_CORGI)
+- unsigned long param;
+ char *endp;
+- wait_after_sync_hs = simple_strtoul(buffer, &endp, 0);
++#if defined(CONFIG_SL_WRITE_TS)
++
++ static TS_EVENT data, raw_data;
++ char tmp[50];
++ int len;
++ len=49;
++ if(len>count) len=count;
++ copy_from_user(tmp,buffer,len);
++ tmp[len]='\0';
++
++ if (sscanf(tmp,"%d %d %d %d",&data.pressure, &data.x, &data.y, &data.millisecs) == 4) {
++// printk("pressure= %d : x= %d : y= %d : millosecs= %d\n", data.pressure, data.x, data.y, data.millisecs);
++
++ if (cal_ok) {
++ raw_data.x = (x_rev) ? raw_max_x - ((raw_max_x - raw_min_x) * data.x) / res_x
++ : raw_min_x + ((raw_max_x - raw_min_x) * data.x) / res_x;
++
++ raw_data.y = (y_rev) ? raw_max_y - ((raw_max_y - raw_min_y) * data.y) / res_y
++ : raw_min_y + ((raw_max_y - raw_min_y) * data.y) / res_y;
++
++ } else {
++ raw_data.x = data.x;
++ raw_data.y = data.y;
++ }
++
++ if (xyswap) {
++ short tmp = raw_data.x;
++ raw_data.x = raw_data.y;
++ raw_data.y = tmp;
++ }
++
++ raw_data.pressure = data.pressure;
++ raw_data.millisecs = data.millisecs;
++
++ write_new_data(raw_data);
++ return count;
++
++ }else {
++#endif
++ wait_after_sync_hs = simple_strtol(buffer, &endp, 0);
++ printk("Wait_after_sync_hs: %d\n",(int) wait_after_sync_hs);
+ return count+endp-buffer;
++
++#if defined(CONFIG_SL_WRITE_TS)
++ }
++#endif
++
+ #else
+ return 0;
+ #endif
+@@ -1234,6 +1604,13 @@
+ case 17: /* Clear all buffer data */
+ print_par();
+ break;
++#if defined(CONFIG_SL_TS_PRESSURE)
++ case 64: /* read Pressure */
++ if (tspressure_mode) {
++ copy_to_user((void *)arg, &tsPressure, sizeof(tsPressure));
++ break;
++ }
++#endif
+ default:
+ return -EINVAL;
+ }
+diff -Nur linux_c860_org/drivers/char/console.c linux/drivers/char/console.c
+--- linux_c860_org/drivers/char/console.c 2002-12-18 19:27:56.000000000 +0900
++++ linux/drivers/char/console.c 2004-06-10 21:09:10.000000000 +0900
+@@ -94,6 +94,11 @@
+ #include <linux/slab.h>
+ #include <linux/major.h>
+ #include <linux/mm.h>
++
++#ifdef CONFIG_UNICON
++#include <linux/fb_doublebyte.h>
++#endif
++
+ #include <linux/console.h>
+ #include <linux/init.h>
+ #include <linux/devfs_fs_kernel.h>
+@@ -118,7 +123,10 @@
+
+ #include "console_macros.h"
+
+-
++#ifdef CONFIG_UNICON
++#define video_erase_char_ext ((video_erase_char)&0xff)
++extern unsigned short translations[][256];
++#endif
+ const struct consw *conswitchp;
+
+ /* A bitmap for codes <32. A bit of 1 indicates that the code
+@@ -244,6 +252,20 @@
+ p = sw->con_screen_pos(vc_cons[currcons].d, offset);
+ return p;
+ }
++#ifdef CONFIG_UNICON
++static inline unsigned short *screenpos_ext(int currcons, int offset, int viewed)
++{
++ unsigned short *p;
++
++ if (!viewed)
++ p = (unsigned short *)(origin + offset + screenbuf_size);
++ else if (!sw->con_screen_pos)
++ p = (unsigned short *)(visible_origin + offset + screenbuf_size);
++ else
++ p = sw->con_screen_pos(vc_cons[currcons].d, -offset-1);
++ return p;
++}
++#endif
+
+ static inline void scrolldelta(int lines)
+ {
+@@ -270,6 +292,14 @@
+ s = (unsigned short *) (origin+video_size_row*(t+nr));
+ scr_memcpyw(d, s, (b-t-nr) * video_size_row);
+ scr_memsetw(d + (b-t-nr) * video_num_columns, video_erase_char, video_size_row*nr);
++
++#ifdef CONFIG_UNICON
++ d += (screenbuf_size>>1);
++ s += (screenbuf_size>>1);
++ scr_memcpyw(d, s, (b-t-nr) * video_size_row);
++ scr_memsetw(d + (b-t-nr) * video_num_columns, video_erase_char_ext, video_size_row*nr);
++#endif
++
+ }
+
+ static void
+@@ -288,6 +318,11 @@
+ step = video_num_columns * nr;
+ scr_memmovew(s + step, s, (b-t-nr)*video_size_row);
+ scr_memsetw(s, video_erase_char, 2*step);
++#ifdef CONFIG_UNICON
++ s += (screenbuf_size>>1);
++ scr_memmovew(s + step, s, (b-t-nr)*video_size_row);
++ scr_memsetw(s, video_erase_char_ext, 2*step);
++#endif
+ }
+
+ static void do_update_region(int currcons, unsigned long start, int count)
+@@ -311,6 +346,10 @@
+ int startx = xx;
+ u16 *q = p;
+ while (xx < video_num_columns && count) {
++#ifdef CONFIG_UNICON
++ //line by line, so the following putcs will be assured to
++ //handle only in-line string.
++#endif
+ if (attrib != (scr_readw(p) & 0xff00)) {
+ if (p > q)
+ sw->con_putcs(vc_cons[currcons].d, q, p-q, yy, startx);
+@@ -440,6 +479,39 @@
+ }
+
+ /* used by selection: complement pointer position */
++#ifdef CONFIG_UNICON
++void complement_pos(int currcons, int offset)
++{
++ static unsigned short *p = NULL;
++ static unsigned short old = 0;
++ static unsigned short oldx = 0, oldy = 0;
++ static unsigned short *p_ext = NULL;
++ static unsigned short old_ext = 0;
++
++ if (p) {
++ scr_writew(old, p);
++ //scr_writew(old_ext, p_ext);
++ if (DO_UPDATE)
++ sw->con_putc(vc_cons[currcons].d, (old_ext<<16)| old, oldy, oldx);
++ }
++ if (offset == -1)
++ p = NULL;
++ else {
++ unsigned short new;
++ p = screenpos(currcons, offset, 1);
++ p_ext = screenpos_ext(currcons, offset, 1);
++ old = scr_readw(p);
++ old_ext = scr_readw(p_ext);
++ new = old ^ complement_mask;
++ scr_writew(new, p);
++ if (DO_UPDATE) {
++ oldx = (offset >> 1) % video_num_columns;
++ oldy = (offset >> 1) / video_num_columns;
++ sw->con_putc(vc_cons[currcons].d, (old_ext<<16) | new, oldy, oldx);
++ }
++ }
++}
++#else
+ void complement_pos(int currcons, int offset)
+ {
+ static unsigned short *p;
+@@ -466,15 +538,23 @@
+ }
+ }
+ }
+-
++#endif
+ static void insert_char(int currcons, unsigned int nr)
+ {
+ unsigned short *p, *q = (unsigned short *) pos;
+
+ p = q + video_num_columns - nr - x;
+- while (--p >= q)
++ while (--p >= q) {
+ scr_writew(scr_readw(p), p + nr);
++#ifdef CONFIG_UNICON
++ scr_writew(scr_readw(p+(screenbuf_size>>1)),p+(screenbuf_size>>1)+nr);
++#endif
++ }
+ scr_memsetw(q, video_erase_char, nr*2);
++#ifdef CONFIG_UNICON
++ scr_memsetw(q+(screenbuf_size>>1),video_erase_char_ext,nr*2);
++#endif
++
+ need_wrap = 0;
+ if (DO_UPDATE) {
+ unsigned short oldattr = attr;
+@@ -482,8 +562,9 @@
+ video_num_columns-x-nr);
+ attr = video_erase_char >> 8;
+ while (nr--)
+- sw->con_putc(vc_cons[currcons].d,
++ sw->con_putc(vc_cons[currcons].d,
+ video_erase_char,y,x+nr);
++
+ attr = oldattr;
+ }
+ }
+@@ -492,12 +573,17 @@
+ {
+ unsigned int i = x;
+ unsigned short *p = (unsigned short *) pos;
+-
+ while (++i <= video_num_columns - nr) {
+ scr_writew(scr_readw(p+nr), p);
++#ifdef CONFIG_UNICON
++ scr_writew(scr_readw(p+nr+(screenbuf_size>>1)),p+(screenbuf_size>>1));
++#endif
+ p++;
+ }
+ scr_memsetw(p, video_erase_char, nr*2);
++#ifdef CONFIG_UNICON
++ scr_memsetw(p+(screenbuf_size>>1), video_erase_char_ext, nr*2);
++#endif
+ need_wrap = 0;
+ if (DO_UPDATE) {
+ unsigned short oldattr = attr;
+@@ -506,8 +592,8 @@
+ attr = video_erase_char >> 8;
+ while (nr--)
+ sw->con_putc(vc_cons[currcons].d,
+- video_erase_char, y,
+- video_num_columns-1-nr);
++ video_erase_char, y,
++ video_num_columns-1-nr);
+ attr = oldattr;
+ }
+ }
+@@ -528,7 +614,11 @@
+ if ((type & 0x40) && ((i & 0x700) == ((i & 0x7000) >> 4))) i ^= 0x0700;
+ scr_writew(i, (u16 *) pos);
+ if (DO_UPDATE)
++#ifndef CONFIG_UNICON
+ sw->con_putc(vc_cons[currcons].d, i, y, x);
++#else
++ sw->con_putc(vc_cons[currcons].d, scr_readw((u16 *) pos+ (screenbuf_size>>1))<<16 | (i & 0xffff), y, x);
++#endif
+ }
+
+ static void hide_cursor(int currcons)
+@@ -538,7 +628,11 @@
+ if (softcursor_original != -1) {
+ scr_writew(softcursor_original,(u16 *) pos);
+ if (DO_UPDATE)
++#ifndef CONFIG_UNICON
+ sw->con_putc(vc_cons[currcons].d, softcursor_original, y, x);
++#else
++ sw->con_putc(vc_cons[currcons].d, scr_readw((u16 *) pos+ (screenbuf_size>>1))<<16 | softcursor_original, y, x);
++#endif
+ softcursor_original = -1;
+ }
+ sw->con_cursor(vc_cons[currcons].d,CM_ERASE);
+@@ -685,7 +779,11 @@
+ visual_init(currcons, 1);
+ if (!*vc_cons[currcons].d->vc_uni_pagedir_loc)
+ con_set_default_unimap(currcons);
++#ifndef CONFIG_UNICON
+ q = (long)kmalloc(screenbuf_size, GFP_KERNEL);
++#else
++ q = (long)kmalloc(screenbuf_size*2,GFP_KERNEL);
++#endif
+ if (!q) {
+ kfree((char *) p);
+ vc_cons[currcons].d = NULL;
+@@ -727,7 +825,11 @@
+ (cc == video_num_columns && ll == video_num_lines))
+ newscreens[currcons] = NULL;
+ else {
++#ifndef CONFIG_UNICON
+ unsigned short *p = (unsigned short *) kmalloc(ss, GFP_USER);
++#else
++ unsigned short *p = (unsigned short *) kmalloc(ss*2, GFP_USER);
++#endif
+ if (!p) {
+ for (i = first; i< currcons; i++)
+ if (newscreens[i])
+@@ -769,13 +871,23 @@
+
+ while (ol < scr_end) {
+ scr_memcpyw((unsigned short *) nl, (unsigned short *) ol, rlth);
++#ifdef CONFIG_UNICON
++ scr_memcpyw((unsigned short *) (nl + ss), (unsigned short*) (ol + oss), rlth);
++#endif
+ if (rrem)
+ scr_memsetw((void *)(nl + rlth), video_erase_char, rrem);
++#ifdef CONFIG_UNICON
++ if (rrem)
++ scr_memsetw((void *)(nl + rlth + ss), video_erase_char_ext, rrem);
++#endif
+ ol += osr;
+ nl += sr;
+ }
+ if (nlend > nl)
+ scr_memsetw((void *) nl, video_erase_char, nlend - nl);
++#ifdef CONFIG_UNICON
++ scr_memsetw((void *) (nl + ss), video_erase_char_ext, nlend - nl);
++#endif
+ if (kmalloced)
+ kfree(screenbuf);
+ screenbuf = newscreens[currcons];
+@@ -998,6 +1110,9 @@
+ return;
+ }
+ scr_memsetw(start, video_erase_char, 2*count);
++#ifdef CONFIG_UNICON
++ scr_memsetw(start + (screenbuf_size>>1), video_erase_char_ext, 2*count);
++#endif
+ need_wrap = 0;
+ }
+
+@@ -1032,6 +1147,9 @@
+ return;
+ }
+ scr_memsetw(start, video_erase_char, 2 * count);
++#ifdef CONFIG_UNICON
++ scr_memsetw(start + (screenbuf_size>>1), video_erase_char_ext, 2*count);
++#endif
+ need_wrap = 0;
+ }
+
+@@ -1044,6 +1162,9 @@
+ count = (vpar > video_num_columns-x) ? (video_num_columns-x) : vpar;
+
+ scr_memsetw((unsigned short *) pos, video_erase_char, 2 * count);
++#ifdef CONFIG_UNICON
++ scr_memsetw((unsigned short *) pos + (screenbuf_size>>1), video_erase_char_ext, 2*count);
++#endif
+ if (DO_UPDATE)
+ sw->con_clear(vc_cons[currcons].d, y, x, 1, count);
+ need_wrap = 0;
+@@ -1720,7 +1841,12 @@
+ if (ques) {
+ clear_selection();
+ if (par[0])
++#ifndef CONFIG_UNICON
+ complement_mask = par[0]<<8 | par[1];
++#else
++ // force the low byte to be zero
++ complement_mask = par[0]<<8;
++#endif
+ else
+ complement_mask = s_complement_mask;
+ return 0;
+@@ -1966,6 +2092,11 @@
+ const unsigned char *orig_buf;
+ int orig_count;
+
++#ifdef CONFIG_UNICON
++#define GB_LEFT 0x8000
++#define GB_RIGHT 0xc000
++#endif
++
+ if (in_interrupt())
+ return count;
+
+@@ -2076,6 +2207,56 @@
+ ((attr << 8) & ~himask) + ((tc & 0x100) ? himask : 0) + (tc & 0xff) :
+ (attr << 8) + tc,
+ (u16 *) pos);
++#ifdef CONFIG_UNICON
++#define HIGH_WORD ((u16 *) ((long)pos + screenbuf_size))
++#define HIGH_WORD_PREV ((u16 *) ((long)pos - 2 + screenbuf_size))
++#define HIGH_WORD_NEXT ((u16 *) ((long)pos + 2 + screenbuf_size))
++ /*
++ * following condiction we do not tread the char as
++ * double byte.
++ * 1. default encoding is NULL. The encode module not
++ * install yet.
++ * 2. Current char set is not the default one. We are
++ * possible drawing a table lines right now.
++ * -Chris
++ */
++
++ if (doublebyte_default && translate == translations[0]
++ && (pos==origin||!(scr_readw(HIGH_WORD_PREV)&DB_HALF_MASK))
++ && doublebyte_default->is_left(tc)){
++ /*possible the left char of the Double Byte
++ , but we don't know yet, because the right
++ char is unknow right now. So mark it as
++ Half char, the possible candidate
++ -Chris
++ */
++ scr_writew(DB_HALF_MASK,HIGH_WORD);
++
++ } else if(doublebyte_default&& translate == translations
++ && scr_readw(HIGH_WORD_PREV)==DB_HALF_MASK
++ && doublebyte_default->is_right(tc)) {
++ scr_writew(DB_LEFT|(tc & 0xff),HIGH_WORD_PREV);
++ scr_writew(DB_RIGHT|(scr_readw((u16*)(pos-2))&0xff),HIGH_WORD);
++ if (DO_UPDATE && draw_x < 0) {
++ draw_from = pos-2 ;
++ if (x>0) {
++ draw_x = x-1;
++ } else {
++ draw_to = pos;
++ draw_x = video_num_columns -1;
++ y--;
++ FLUSH
++ y++;
++ draw_x = 0;
++ draw_from = pos;
++ }
++ }
++ } else {
++ /*normal ASCII or table lines, clean hight byte*/
++ scr_writew(0,HIGH_WORD);
++ }
++
++#endif
+ if (DO_UPDATE && draw_x < 0) {
+ draw_x = x;
+ draw_from = pos;
+@@ -2234,6 +2415,9 @@
+ continue;
+ }
+ scr_writew((attr << 8) + c, (unsigned short *) pos);
++#ifdef CONFIG_UNICON
++ scr_writew(0,(unsigned short *) pos + (screenbuf_size>>1));
++#endif
+ cnt++;
+ if (myx == video_num_columns - 1) {
+ need_wrap = 1;
+@@ -2591,7 +2775,11 @@
+ vt_cons[currcons] = (struct vt_struct *)
+ alloc_bootmem(sizeof(struct vt_struct));
+ visual_init(currcons, 1);
++#ifdef CONFIG_UNICON
++ screenbuf = (unsigned short *) alloc_bootmem(screenbuf_size * 2);
++#else
+ screenbuf = (unsigned short *) alloc_bootmem(screenbuf_size);
++#endif
+ kmalloced = 0;
+ vc_init(currcons, video_num_lines, video_num_columns,
+ currcons || !sw->con_save_screen);
+@@ -3064,7 +3252,12 @@
+ gotoxy(currcons, p[0], p[1]);
+ set_cursor(currcons);
+ }
+-
++#ifdef CONFIG_UNICON
++/*
++Now, the unicon doesn't support vcs!
++To support it, first change the vc_screen.c!
++*/
++#endif
+ u16 vcs_scr_readw(int currcons, const u16 *org)
+ {
+ if ((unsigned long)org == pos && softcursor_original != -1)
+@@ -3106,6 +3299,15 @@
+ /*
+ * Visible symbols for modules
+ */
++#ifdef CONFIG_UNICON
++int (*Unicon_fnKeyHook)
++ (struct tty_struct *tty, unsigned char ch, char flag) = NULL;
++int (*Unicon_fnLowerKeyHook) (unsigned char ch) = NULL;
++
++EXPORT_SYMBOL(Unicon_fnLowerKeyHook);
++EXPORT_SYMBOL(Unicon_fnKeyHook);
++EXPORT_SYMBOL(vc_cons);
++#endif
+
+ EXPORT_SYMBOL(color_table);
+ EXPORT_SYMBOL(default_red);
+diff -Nur linux_c860_org/drivers/char/consolemap.c linux/drivers/char/consolemap.c
+--- linux_c860_org/drivers/char/consolemap.c 2002-08-26 14:38:30.000000000 +0900
++++ linux/drivers/char/consolemap.c 2004-06-10 21:09:10.000000000 +0900
+@@ -22,7 +22,11 @@
+ #include <linux/console_struct.h>
+ #include <linux/vt_kern.h>
+
++#ifndef CONFIG_UNICON
+ static unsigned short translations[][256] = {
++#else
++unsigned short translations[][256] = {
++#endif
+ /* 8-bit Latin-1 mapped to Unicode -- trivial mapping */
+ {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+diff -Nur linux_c860_org/drivers/char/corgi_logkey.c linux/drivers/char/corgi_logkey.c
+--- linux_c860_org/drivers/char/corgi_logkey.c 2003-06-18 16:12:26.000000000 +0900
++++ linux/drivers/char/corgi_logkey.c 2004-06-10 21:09:10.000000000 +0900
+@@ -605,6 +605,7 @@
+
+ #if CHECK_ROLLOVER
+ #define MAX_KEY_PRESS (6)
++#define MAX_KEY_PRESS_THRESHOLD (6 + 1)
+ #endif
+
+ void sharppda_scan_key_gpio(void* dummy)
+@@ -707,8 +708,8 @@
+ if (ROLLOVER_CHECK_FLAG(rollover_flag, ROLLOVER_FUNCTION)) {
+ rollover_count--;
+ }
+- if ((rollover_count > 3) ||
+- ((rollover_count == 3) &&
++ if ((rollover_count > MAX_KEY_PRESS_THRESHOLD) ||
++ ((rollover_count == MAX_KEY_PRESS_THRESHOLD) &&
+ (!ROLLOVER_CHECK_FLAG(rollover_flag, ROLLOVER_TAB) ||
+ ROLLOVER_CHECK_FLAG(rollover_flag, ROLLOVER_DIRECT_ON)) &&
+ (!ROLLOVER_CHECK_FLAG(rollover_flag, ROLLOVER_VERTICAL) ||
+diff -Nur linux_c860_org/drivers/char/direct.uni linux/drivers/char/direct.uni
+--- linux_c860_org/drivers/char/direct.uni 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/char/direct.uni 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,259 @@
++0x00 U+0000
++0x20 U+0020
++0x21 U+0021
++0x22 U+0022
++0x23 U+0023
++0x24 U+0024
++0x25 U+0025
++0x26 U+0026
++0x27 U+0027
++0x28 U+0028
++0x29 U+0029
++0x2a U+002a
++0x2b U+002b
++0x2c U+002c
++0x2d U+002d
++0x2e U+002e
++0x2f U+002f
++0x30 U+0030
++0x31 U+0031
++0x32 U+0032
++0x33 U+0033
++0x34 U+0034
++0x35 U+0035
++0x36 U+0036
++0x37 U+0037
++0x38 U+0038
++0x39 U+0039
++0x3a U+003a
++0x3b U+003b
++0x3c U+003c
++0x3d U+003d
++0x3e U+003e
++0x3f U+003f
++0x40 U+0040
++0x41 U+0041
++0x42 U+0042
++0x43 U+0043
++0x44 U+0044
++0x45 U+0045
++0x46 U+0046
++0x47 U+0047
++0x48 U+0048
++0x49 U+0049
++0x4a U+004a
++0x4b U+004b
++0x4c U+004c
++0x4d U+004d
++0x4e U+004e
++0x4f U+004f
++0x50 U+0050
++0x51 U+0051
++0x52 U+0052
++0x53 U+0053
++0x54 U+0054
++0x55 U+0055
++0x56 U+0056
++0x57 U+0057
++0x58 U+0058
++0x59 U+0059
++0x5a U+005a
++0x5b U+005b
++0x5c U+005c
++0x5d U+005d
++0x5e U+005e
++0x5f U+005f
++0x60 U+0060
++0x61 U+0061
++0x62 U+0062
++0x63 U+0063
++0x64 U+0064
++0x65 U+0065
++0x66 U+0066
++0x67 U+0067
++0x68 U+0068
++0x69 U+0069
++0x6a U+006a
++0x6b U+006b
++0x6c U+006c
++0x6d U+006d
++0x6e U+006e
++0x6f U+006f
++0x70 U+0070
++0x71 U+0071
++0x72 U+0072
++0x73 U+0073
++0x74 U+0074
++0x75 U+0075
++0x76 U+0076
++0x77 U+0077
++0x78 U+0078
++0x79 U+0079
++0x7a U+007a
++0x7b U+007b
++0x7c U+007c
++0x7d U+007d
++0x7e U+007e
++0x7f U+007f
++0x80 U+0080
++0x81 U+0081
++0x82 U+0082
++0x83 U+0083
++0x84 U+0084
++0x85 U+0085
++0x86 U+0086
++0x87 U+0087
++0x88 U+0088
++0x89 U+0089
++0x8a U+008a
++0x8b U+008b
++0x8c U+008c
++0x8d U+008d
++0x8e U+008e
++0x8f U+008f
++0x90 U+0090
++0x91 U+0091
++0x92 U+0092
++0x93 U+0093
++0x94 U+0094
++0x95 U+0095
++0x96 U+0096
++0x97 U+0097
++0x98 U+0098
++0x99 U+0099
++0x9a U+009a
++0x9b U+009b
++0x9c U+009c
++0x9d U+009d
++0x9e U+009e
++0x9f U+009f
++0xa0 U+00a0
++0xa1 U+00a1
++0xa2 U+00a2
++0xa3 U+00a3
++0xa4 U+00a4
++0xa5 U+00a5
++0xa6 U+00a6
++0xa7 U+00a7
++0xa8 U+00a8
++0xa9 U+00a9
++0xaa U+00aa
++0xab U+00ab
++0xac U+00ac
++0xad U+00ad
++0xae U+00ae
++0xaf U+00af
++0xb0 U+00b0
++0xb1 U+00b1
++0xb2 U+00b2
++0xb3 U+00b3
++0xb4 U+00b4
++0xb5 U+00b5
++0xb6 U+00b6
++0xb7 U+00b7
++0xb8 U+00b8
++0xb9 U+00b9
++0xba U+00ba
++0xbb U+00bb
++0xbc U+00bc
++0xbd U+00bd
++0xbe U+00be
++0xbf U+00bf
++0xc0 U+00c0
++0xc1 U+00c1
++0xc2 U+00c2
++0xc3 U+00c3
++0xc4 U+00c4
++0xc5 U+00c5
++0xc6 U+00c6
++0xc7 U+00c7
++0xc8 U+00c8
++0xc9 U+00c9
++0xca U+00ca
++0xcb U+00cb
++0xcc U+00cc
++0xcd U+00cd
++0xce U+00ce
++0xcf U+00cf
++0xd0 U+00d0
++0xd1 U+00d1
++0xd2 U+00d2
++0xd3 U+00d3
++0xd4 U+00d4
++0xd5 U+00d5
++0xd6 U+00d6
++0xd7 U+00d7
++0xd8 U+00d8
++0xd9 U+00d9
++0xda U+00da
++0xdb U+00db
++0xdc U+00dc
++0xdd U+00dd
++0xde U+00de
++0xdf U+00df
++0xe0 U+00e0
++0xe1 U+00e1
++0xe2 U+00e2
++0xe3 U+00e3
++0xe4 U+00e4
++0xe5 U+00e5
++0xe6 U+00e6
++0xe7 U+00e7
++0xe8 U+00e8
++0xe9 U+00e9
++0xea U+00ea
++0xeb U+00eb
++0xec U+00ec
++0xed U+00ed
++0xee U+00ee
++0xef U+00ef
++0xf0 U+00f0
++0xf1 U+00f1
++0xf2 U+00f2
++0xf3 U+00f3
++0xf4 U+00f4
++0xf5 U+00f5
++0xf6 U+00f6
++0xf7 U+00f7
++0xf8 U+00f8
++0xf9 U+00f9
++0xfa U+00fa
++0xfb U+00fb
++0xfc U+00fc
++0xfd U+00fd
++0xfe U+00fe
++0xff U+00ff
++0x07 U+2022
++0x13 U+203c
++0x4b U+212a
++0x1b U+2190
++0x18 U+2191
++0x1a U+2192
++0x19 U+2193
++0x1d U+2194
++0x12 U+2195
++0x17 U+21a8
++0x1c U+221f
++0x16 U+25ac
++0x1e U+25b2
++0x10 U+25b6
++0x10 U+25ba
++0x1f U+25bc
++0x11 U+25c0
++0x11 U+25c4
++0x04 U+25c6
++0x09 U+25cb
++0x08 U+25d8
++0x0a U+25d9
++0x01 U+263a
++0x02 U+263b
++0x0f U+263c
++0x0c U+2640
++0x0b U+2642
++0x06 U+2660
++0x05 U+2663
++0x03 U+2665
++0x04 U+2666
++0x0d U+266a
++0x0e U+266b
++0x5f U+f804
+diff -Nur linux_c860_org/drivers/char/efirtc.c linux/drivers/char/efirtc.c
+--- linux_c860_org/drivers/char/efirtc.c 2002-08-26 14:38:31.000000000 +0900
++++ linux/drivers/char/efirtc.c 2004-06-10 21:09:10.000000000 +0900
+@@ -118,6 +118,7 @@
+ static void
+ convert_from_efi_time(efi_time_t *eft, struct rtc_time *wtime)
+ {
++ memset(wtime, 0, sizeof(struct rtc_time));
+ wtime->tm_sec = eft->second;
+ wtime->tm_min = eft->minute;
+ wtime->tm_hour = eft->hour;
+diff -Nur linux_c860_org/drivers/char/keyboard.c linux/drivers/char/keyboard.c
+--- linux_c860_org/drivers/char/keyboard.c 2002-12-18 19:27:58.000000000 +0900
++++ linux/drivers/char/keyboard.c 2004-06-10 21:09:10.000000000 +0900
+@@ -40,6 +40,7 @@
+
+ #include <asm/keyboard.h>
+ #include <asm/bitops.h>
++#include <asm/uaccess.h>
+
+ #include <linux/kbd_kern.h>
+ #include <linux/kbd_diacr.h>
+@@ -118,6 +119,23 @@
+ static struct kbd_struct * kbd = kbd_table;
+ static struct tty_struct * tty;
+
++#if defined(CONFIG_SL7X0_POWER_KEY_OFF)
++#if defined(CONFIG_BOOT_POWER_KEY_OFF)
++unsigned int power_key_off_mode = 1;
++#else
++unsigned int power_key_off_mode = 0;
++#endif
++#endif
++
++#if defined(CONFIG_SL_3BUTTON_PATCH)
++#if defined(CONFIG_BOOT_3BUTTON_PATCH_ON)
++unsigned int three_button_mode = 1;
++#else
++unsigned int three_button_mode = 0;
++#endif
++int pressure_alt;
++#endif
++
+ static void kbd_processkeycode(unsigned char scancode, char up_flag, int autorepeat);
+ void compute_shiftstate(void);
+
+@@ -179,6 +197,8 @@
+
+ static struct pm_dev *pm_kbd;
+
++
++
+ /*
+ * Many other routines do put_queue, but I think either
+ * they produce ASCII, or they produce some user-assigned
+@@ -224,6 +244,55 @@
+
+ void handle_scancode(unsigned char scancode, int down)
+ {
++
++#if defined(CONFIG_SL7X0_POWER_KEY_OFF)
++ /* printk("scancode = %x down = %x \n",scancode,down); */
++ /* SL-C700 side power 0x6d */
++ if ( power_key_off_mode && ( scancode == 0x6d ) && ( down == 0x01 ) ){
++
++ printk("power button\n");
++ slc7x0_key_suspend();
++
++
++ /* SL-C700 Calender down 0x58 */
++ } else
++#endif
++#if defined(CONFIG_SL_3BUTTON_PATCH)
++ if ( three_button_mode && ( scancode == 0x59 ) && ( down == 0x01 ) ){
++
++ pressure_alt=0x01;
++ handle_scancode_main ( scancode, down );
++
++ /* SL-C700 Calender up 0xd8 */
++ } else if ( three_button_mode && ( scancode == 0xd9 ) && ( down == 0x00 ) ){
++
++ pressure_alt=0x00;
++ handle_scancode_main ( scancode, down );
++
++ /* SL-C700 Address down 0x59 */
++ } else if ( three_button_mode && ( scancode == 0x28 ) && ( down == 0x01 ) ){
++
++ pressure_alt=0x02;
++ handle_scancode_main ( scancode, down );
++
++ /* SL-C700 Address up 0xd9 */
++ } else if ( three_button_mode && ( scancode == 0xa8 ) && ( down == 0x00 ) ){
++
++ pressure_alt=0x00;
++ handle_scancode_main ( scancode, down );
++ } else
++#endif
++#if defined(CONFIG_SL7X0_POWER_KEY_OFF) || defined(CONFIG_SL_3BUTTON_PATCH)
++ {
++
++ handle_scancode_main ( scancode, down );
++
++ }
++}
++
++void handle_scancode_main(unsigned char scancode, int down)
++{
++#endif
+ unsigned char keycode;
+ char up_flag = down ? 0 : 0200;
+ char raw_mode;
+@@ -274,8 +343,8 @@
+ static void
+ kbd_processkeycode(unsigned char keycode, char up_flag, int autorepeat)
+ {
+- char raw_mode = (kbd->kbdmode == VC_RAW);
+
++ char raw_mode = (kbd->kbdmode == VC_RAW);
+ if (up_flag) {
+ rep = 0;
+ if(!test_and_clear_bit(keycode, key_down))
+@@ -1020,12 +1089,35 @@
+
+ pm_callback pm_kbd_request_override = NULL;
+
++#if defined(CONFIG_KBD_DEV_FILE)
++#define KBD_MAJOR 241
++struct fasync_struct *fasync_kbd;
++
++static int kbd_open(struct inode *, struct file *);
++static int kbd_release(struct inode *, struct file *);
++static int kbd_fasync(int fd, struct file *filp, int on);
++static ssize_t kbd_read(struct file *, char *, size_t, loff_t *);
++static ssize_t kbd_write(struct file *, const char *, size_t, loff_t *);
++
++struct file_operations kbd_fops = {
++ open: kbd_open,
++ release: kbd_release,
++ fasync: kbd_fasync,
++ read: kbd_read,
++ write: kbd_write,
++};
++#endif
++
+ int __init kbd_init(void)
+ {
+ int i;
+ struct kbd_struct kbd0;
+ extern struct tty_driver console_driver;
+
++#if defined(CONFIG_KBD_DEV_FILE)
++ if ( register_chrdev(KBD_MAJOR,"kbd",&kbd_fops) )
++ printk("unable to get major %d for keyboard\n", KBD_MAJOR);
++#endif
+ kbd0.ledflagstate = kbd0.default_ledflagstate = KBD_DEFLEDS;
+ kbd0.ledmode = LED_SHOW_FLAGS;
+ kbd0.lockstate = KBD_DEFLOCK;
+@@ -1047,3 +1139,56 @@
+
+ return 0;
+ }
++
++#if defined(CONFIG_KBD_DEV_FILE)
++static int kbd_open(struct inode *inode, struct file *file)
++{
++ kdev_t dev = inode->i_rdev;
++
++ return 0;
++}
++
++
++static int kbd_release(struct inode *inode, struct file *file)
++{
++ kbd_fasync(-1, file, 0);
++ return 0;
++}
++
++static int kbd_fasync(int fd, struct file *filp, int on)
++{
++ int retval;
++
++ retval = fasync_helper(fd, filp, on, &fasync_kbd);
++ if (retval < 0)
++ return retval;
++ return 0;
++}
++
++static ssize_t kbd_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
++{
++// printk("kbd read\n");
++ return 0;
++}
++
++static ssize_t kbd_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
++{
++ char tmp[50];
++ int len;
++ int kbd_scancode,kbd_down;
++
++ len=49;
++
++ if(len>count) len=count;
++ copy_from_user(tmp,buffer,len);
++ tmp[len]='\0';
++
++ if (sscanf(tmp,"%d %d",&kbd_scancode, &kbd_down) == 2) {
++// printk("kbd write %02x %02x\n",kbd_scancode,kbd_down);
++ handle_scancode(kbd_scancode,kbd_down);
++ }
++
++// printk("kbd write\n");
++ return count;
++}
++#endif
+diff -Nur linux_c860_org/drivers/char/mem.c linux/drivers/char/mem.c
+--- linux_c860_org/drivers/char/mem.c 2002-08-26 14:44:15.000000000 +0900
++++ linux/drivers/char/mem.c 2004-06-10 21:09:10.000000000 +0900
+@@ -397,7 +397,7 @@
+ if (count > size)
+ count = size;
+
+- zap_page_range(mm, addr, count);
++ zap_page_range(mm, addr, count, ZPR_NORMAL);
+ zeromap_page_range(addr, count, PAGE_COPY);
+
+ size -= count;
+diff -Nur linux_c860_org/drivers/char/pc_keyb.c linux/drivers/char/pc_keyb.c
+--- linux_c860_org/drivers/char/pc_keyb.c 2002-08-26 14:38:31.000000000 +0900
++++ linux/drivers/char/pc_keyb.c 2004-06-10 21:09:10.000000000 +0900
+@@ -464,14 +464,36 @@
+
+ static unsigned char kbd_exists = 1;
+
+-static inline void handle_keyboard_event(unsigned char scancode)
++#ifdef CONFIG_UNICON
++extern int (*Unicon_fnLowerKeyHook) (unsigned char ch);
++extern int (*Unicon_fnKeyHook) (struct tty_struct *tty, \
++ unsigned char ch, char flag);
++#endif
++static inline int handle_keyboard_event(unsigned char scancode)
+ {
+ #ifdef CONFIG_VT
+ kbd_exists = 1;
+- if (do_acknowledge(scancode))
+- handle_scancode(scancode, !(scancode & 0x80));
++ if (do_acknowledge(scancode)){
++#ifdef CONFIG_UNICON
++ if (Unicon_fnLowerKeyHook != NULL){
++ /* return 1 ==> processed by kernel
++ return 0 ==> processed by app */
++ if (scancode == 0x58){ /* F12 kill unicode */
++ Unicon_fnKeyHook = NULL;
++ Unicon_fnLowerKeyHook = NULL;
++ return 1;
++ }
++ if ((*Unicon_fnLowerKeyHook) (scancode) == 1)
++ return 1;
++ else
++ handle_scancode(scancode,!(scancode & 0x80));
++ } else
++#endif
++ handle_scancode(scancode, !(scancode & 0x80));
++ }
+ #endif
+ tasklet_schedule(&keyboard_tasklet);
++ return 0;
+ }
+
+ /*
+@@ -501,7 +523,8 @@
+ if (status & KBD_STAT_MOUSE_OBF)
+ handle_mouse_event(scancode);
+ else
+- handle_keyboard_event(scancode);
++ if(handle_keyboard_event(scancode))
++ return status;
+ }
+
+ status = kbd_read_status();
+diff -Nur linux_c860_org/drivers/char/pcmcia/Config.in linux/drivers/char/pcmcia/Config.in
+--- linux_c860_org/drivers/char/pcmcia/Config.in 2002-08-26 14:44:23.000000000 +0900
++++ linux/drivers/char/pcmcia/Config.in 2004-06-10 21:09:10.000000000 +0900
+@@ -5,13 +5,7 @@
+ mainmenu_option next_comment
+ comment 'PCMCIA character devices'
+
+-if [ "$CONFIG_SERIAL" = "y" -o "$CONFIG_SERIAL_8250" = "y" ]; then
+- dep_tristate 'PCMCIA serial device support' CONFIG_PCMCIA_SERIAL_CS y
+-else
+- if [ "$CONFIG_SERIAL" = "m" -o "$CONFIG_SERIAL_8250" = "m" ]; then
+- dep_tristate 'PCMCIA serial device support' CONFIG_PCMCIA_SERIAL_CS m
+- fi
+-fi
++dep_tristate 'PCMCIA serial device support' CONFIG_PCMCIA_SERIAL_CS $CONFIG_SERIAL
+ if [ "$CONFIG_PCMCIA_SERIAL_CS" = "y" ]; then
+ define_bool CONFIG_PCMCIA_CHRDEV y
+ fi
+diff -Nur linux_c860_org/drivers/char/rtc.c linux/drivers/char/rtc.c
+--- linux_c860_org/drivers/char/rtc.c 2002-08-26 14:38:31.000000000 +0900
++++ linux/drivers/char/rtc.c 2004-06-10 21:09:10.000000000 +0900
+@@ -326,7 +326,7 @@
+ * means "don't care" or "match all". Only the tm_hour,
+ * tm_min, and tm_sec values are filled in.
+ */
+-
++ memset(&wtime, 0, sizeof(struct rtc_time));
+ get_rtc_alm_time(&wtime);
+ break;
+ }
+@@ -374,6 +374,7 @@
+ }
+ case RTC_RD_TIME: /* Read the time/date from RTC */
+ {
++ memset(&wtime, 0, sizeof(struct rtc_time));
+ get_rtc_time(&wtime);
+ break;
+ }
+diff -Nur linux_c860_org/drivers/char/serial.c linux/drivers/char/serial.c
+--- linux_c860_org/drivers/char/serial.c 2003-01-14 12:07:55.000000000 +0900
++++ linux/drivers/char/serial.c 2004-06-10 21:09:10.000000000 +0900
+@@ -61,6 +61,7 @@
+ * 30-Jul-2002 Lineo Japan, Inc. for 2.4.18
+ * 31-Jul-2002 Lineo Japan, Inc. for ARCH_PXA
+ * 12-Dec-2002 Sharp Corporation for Poodle and Corgi
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+ static char *serial_version = "5.05c";
+@@ -98,11 +99,14 @@
+
+ #include <linux/config.h>
+ #include <linux/version.h>
++
+ #if defined(CONFIG_SABINAL_DISCOVERY) || \
+ defined(CONFIG_ARCH_PXA_POODLE) || \
+- defined(CONFIG_ARCH_PXA_CORGI)
++ defined(CONFIG_ARCH_PXA_CORGI) || \
++ defined(CONFIG_ARCH_PXA_TOSA)
+ #undef CONFIG_SERIAL_CONSOLE
+ #endif
++
+ #if defined(CONFIG_SABINAL_DISCOVERY)
+ #define CONFIG_REDEFINE_IO8BIT
+ #endif
+@@ -259,7 +263,8 @@
+ #elif defined(CONFIG_SA1100_COLLIE) || \
+ defined(CONFIG_SABINAL_DISCOVERY) || \
+ defined(CONFIG_ARCH_PXA_POODLE) || \
+- defined(CONFIG_ARCH_PXA_CORGI)
++ defined(CONFIG_ARCH_PXA_CORGI) || \
++ defined(CONFIG_ARCH_PXA_TOSA)
+ #define SERIAL_DEV_OFFSET 3
+ #else
+ #define SERIAL_DEV_OFFSET 0
+@@ -1332,7 +1337,7 @@
+ #ifdef CONFIG_ARCH_PXA
+ if (state->type == PORT_PXA) {
+ switch ((long)state->iomem_base) {
+-#if defined(CONFIG_ARCH_SHARP_SL) && !defined(CONFIG_SABINAL_DISCOVERY)
++#if defined(CONFIG_PM) && defined(CONFIG_ARCH_SHARP_SL) && !defined(CONFIG_SABINAL_DISCOVERY)
+ case (long)&FFUART: lock_FCS(LOCK_FCS_FFUART, 1); CKEN |= CKEN6_FFUART; break;
+ case (long)&BTUART: lock_FCS(LOCK_FCS_BTUART, 1); CKEN |= CKEN7_BTUART; break;
+ case (long)&STUART: lock_FCS(LOCK_FCS_STUART, 1); CKEN |= CKEN5_STUART; break;
+@@ -1615,7 +1620,7 @@
+ #ifdef CONFIG_ARCH_PXA
+ if (state->type == PORT_PXA) {
+ switch ((long)state->iomem_base) {
+-#if defined(CONFIG_ARCH_SHARP_SL) && !defined(CONFIG_SABINAL_DISCOVERY)
++#if defined(CONFIG_PM) && defined(CONFIG_ARCH_SHARP_SL) && !defined(CONFIG_SABINAL_DISCOVERY)
+ case (long)&FFUART: CKEN &= ~CKEN6_FFUART; lock_FCS(LOCK_FCS_FFUART, 0); break;
+ case (long)&BTUART: CKEN &= ~CKEN7_BTUART; lock_FCS(LOCK_FCS_BTUART, 0); break;
+ case (long)&STUART: CKEN &= ~CKEN5_STUART; lock_FCS(LOCK_FCS_STUART, 0); break;
+@@ -6103,7 +6108,7 @@
+ {
+ register_console(&sercons);
+ }
+-#endif
++#endif /* CONFIG_SERIAL_CONSOLE */
+
+ /*
+ Local variables:
+diff -Nur linux_c860_org/drivers/char/serial_pxa200.c linux/drivers/char/serial_pxa200.c
+--- linux_c860_org/drivers/char/serial_pxa200.c 2003-01-29 16:14:45.000000000 +0900
++++ linux/drivers/char/serial_pxa200.c 2004-06-10 21:09:10.000000000 +0900
+@@ -59,6 +59,8 @@
+ *
+ * Change Log
+ * 12-Dec-2002 Sharp Corporation for Poodle and Corgi
++ * 1-Nov-2003 Sharp Corporation for Tosa
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+ static char *serial_version = "5.05c";
+@@ -228,8 +230,9 @@
+ #endif
+ #ifdef CONFIG_PM
+ #include <linux/pm.h>
+-#include <linux/apm_bios.h>
+ #endif
++#include <linux/apm_bios.h>
++#include <asm/sharp_char.h>
+
+ /*
+ * All of the compatibilty code so we can compile serial.c against
+@@ -414,7 +417,7 @@
+
+ #define CONFIG_DISCOVERY_DVT
+
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ #define CONFIG_SHARPSL_PXA
+ #endif
+
+@@ -439,17 +442,24 @@
+ #define XPA210_DISCOVERY_IRDA_LINE 1
+ #define xpa210_discovery_is_irda_line(line) ((line) == XPA210_DISCOVERY_IRDA_LINE)
+
+-void clr_discovery_irda(u8 x){
++static void clr_discovery_irda(u8 x){
+ #if defined(CONFIG_SABINAL_DISCOVERY)
+ ASIC3_GPIO_PIOD_B &= ~(0x1000);
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++ reset_scoop_gpio(SCP_IR_POWERDWN);
++ set_GPIO_mode(GPIO47_STTXD|GPIO_OUT);
++ GPCR(GPIO47_STTXD) = GPIO_bit(GPIO47_STTXD);
+ #elif defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
+ GPSR(GPIO_IR_ON) = GPIO_bit(GPIO_IR_ON);
+ #endif
+ //printk("discovery_irda power on\n");
+- }
+-void set_discovery_irda(u8 x){
++}
++static void set_discovery_irda(u8 x){
+ #if defined(CONFIG_SABINAL_DISCOVERY)
+ ASIC3_GPIO_PIOD_B |= 0x1000;
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++ set_GPIO_mode(GPIO47_STTXD_MD);
++ set_scoop_gpio(SCP_IR_POWERDWN);
+ #elif defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
+ GPCR(GPIO_IR_ON) = GPIO_bit(GPIO_IR_ON);
+ #endif
+@@ -470,14 +480,53 @@
+
+ #endif
+
++#if defined(CONFIG_BLUETOOTH_SL)
++#define PXA_BLUETOOTH_LINE 2
++#define pxa_is_bluetooth_line(line) ((line) == PXA_BLUETOOTH_LINE)
++
++static int has_bluetooth = -1;
++static int bluetooth_open = 0;
++struct async_struct *bluetooth_info = 0;
++#if defined(CONFIG_ARCH_PXA_TOSA)
++#define AVOID_ROLLBACK
++#ifdef AVOID_ROLLBACK
++extern int rollback_cancel;
++#endif
++#endif
++static int pxa_check_bluetooth_unit()
++{
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ set_GPIO_mode(GPIO42_BTRXD|GPIO_IN);
++ set_GPIO_mode(GPIO43_BTTXD|GPIO_IN);
++ set_GPIO_mode(GPIO44_BTCTS|GPIO_IN);
++ set_GPIO_mode(GPIO45_BTRTS|GPIO_IN);
++ set_scoop_gpio(SCP_BT_PWR_EN);
++ mdelay(5);
++ if ( (GPLR(GPIO42_BTRXD) & GPIO_bit(GPIO42_BTRXD))==0 &&
++ (GPLR(GPIO44_BTCTS) & GPIO_bit(GPIO44_BTCTS))==0) {
++ reset_scoop_gpio(SCP_BT_PWR_EN);
++ has_bluetooth=0;
++ return 0; // no bluetooth
++ }
++ reset_scoop_gpio(SCP_BT_PWR_EN);
++ has_bluetooth=1;
++ return 1;
++#else
++ return 0;
++#endif
++}
++#endif // end CONFIG_BLUETOOTH_SL
++
+ #ifdef CONFIG_PM
+ static struct pm_dev *serial_pm_dev;
+ #endif
+
+
+-#if (defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI))
++#if (defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA))
++#ifdef CONFIG_PM
+ extern int change_power_mode(unsigned long,int);
+ #endif
++#endif
+
+ /*
+ * tmp_buf is used as a temporary buffer by serial_write. We need to
+@@ -544,6 +593,7 @@
+ read &= ~UART_MSR_CTS;
+ else
+ read |= UART_MSR_CTS;
++
+ if ( read & UART_MSR_DSR )
+ read &= ~UART_MSR_DSR;
+ else
+@@ -633,9 +683,10 @@
+ #define STUART_MCR *(volatile unsigned char*)(&STUART + UART_MCR*4)
+ #define STUART_ISR *(volatile unsigned char*)(&STUART + 8*4)
+
++#ifdef CONFIG_PM
+ void xpa210_discovery_irda_resume (void) {
+
+-#if (defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI))
++#if (defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA))
+ if ( !change_power_mode(LOCK_FCS_STUART, 1) ) return;
+ #endif
+
+@@ -652,14 +703,17 @@
+ //printk("xpa210_discovery_irda_resume\n");
+
+ }
++#endif
+
+ int xpa210_discovery_irda_enable(struct async_struct * info, u8 x){
+
+ if (x == 0) {
+ CKEN &= ~(0x20); //stuart
+
+-#if (defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI))
++#if (defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA))
++#ifdef CONFIG_PM
+ change_power_mode(LOCK_FCS_STUART, 0);
++#endif /* CONFIG_PM */
+ #endif
+
+ info->IER &= ~(UART_IER_UUE);
+@@ -675,8 +729,10 @@
+
+ //printk("xpa210_discovery_irda_disable\n");
+ } else {
+-#if (defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI))
++#if (defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA))
++#ifdef CONFIG_PM
+ if ( !change_power_mode(LOCK_FCS_STUART, 1) ) return 1;
++#endif /* CONFIG_PM */
+ #endif
+
+ CKEN |= 0x20; //stuart
+@@ -696,9 +752,91 @@
+ }
+ return 0;
+ }
++#endif
++
++#if defined(CONFIG_BLUETOOTH_SL)
++static int pxa_bluetooth_enable(struct async_struct * info, u8 x)
++{
++ if (has_bluetooth==0) return -ENODEV;
++ if (x==0) { // off
++ set_scoop_gpio(SCP_BT_RESET);
++ CKEN &= ~(0x1<<7); //btuart
++ set_GPIO_mode(GPIO42_BTRXD|GPIO_IN);
++ set_GPIO_mode(GPIO43_BTTXD|GPIO_IN);
++ set_GPIO_mode(GPIO44_BTCTS|GPIO_IN);
++ set_GPIO_mode(GPIO45_BTRTS|GPIO_IN);
++ mdelay(10); // wait 10ms
++ reset_scoop_gpio(SCP_BT_RESET);
++ reset_scoop_gpio(SCP_BT_PWR_EN);
++ set_led_status(SHARP_LED_BLUETOOTH,0); // turn off BT LED
++
++ ICMR &= ~(1 << 21); //btuart
++
++ info->IER &= ~(UART_IER_UUE);
++ serial_out(info, UART_IER, info->IER);
++
++ info->MCR = 0x0;
++ serial_out(info, UART_MCR, info->MCR);
++
++ info->IER |= UART_IER_UUE; /* enable UUE */
++ serial_out(info, UART_IER, info->IER);
++
++#ifdef CONFIG_PM
++ change_power_mode(LOCK_FCS_BTUART, 0);
++#endif /* CONFIG_PM */
++#if defined(CONFIG_ARCH_PXA_TOSA)
++#ifdef AVOID_ROLLBACK
++ rollback_cancel = 0;
++#endif
++#endif
++ // printk("bluetooth close success.\n");
++ } else { // on
++#ifdef CONFIG_PM
++ if ( !change_power_mode(LOCK_FCS_BTUART, 1) ) return 1;
++#endif /* CONFIG_PM */
++ ICMR &= ~(1 << 21); //btuart
++ reset_scoop_gpio(SCP_BT_RESET);
++ set_scoop_gpio(SCP_BT_PWR_EN);
++
++ set_GPIO_mode(GPIO42_BTRXD_MD);
++ set_GPIO_mode(GPIO43_BTTXD_MD);
++ set_GPIO_mode(GPIO44_BTCTS_MD);
++ set_GPIO_mode(GPIO45_BTRTS_MD);
++
++ CKEN |= (0x1<<7); //btuart
+
++ info->IER &= ~(UART_IER_UUE);
++ serial_out(info, UART_IER, info->IER);
++
++ info->MCR = UART_MCR_OUT2;
++ serial_out(info, UART_MCR, info->MCR);
++
++ info->tty->termios->c_cflag &= ~CBAUD;
++ info->tty->termios->c_cflag |= (17 & CBAUD); // set 115.2k
++ change_speed(info, 0);
++
++ info->IER = UART_IER_UUE|UART_IER_RDI|UART_IER_MSI|UART_IER_RTOIE; /* enable UUE */
++ serial_out(info, UART_IER, info->IER);
++ serial_inp(info, UART_RX); // reset DR
++
++ ICMR |= (1 << 21); //btuart
++
++ set_scoop_gpio(SCP_BT_RESET);
++ mdelay(20); // wait 20ms
++ reset_scoop_gpio(SCP_BT_RESET);
++ set_led_status(SHARP_LED_BLUETOOTH,1); // BT LED on
++
++#if defined(CONFIG_ARCH_PXA_TOSA)
++#ifdef AVOID_ROLLBACK
++ rollback_cancel = 1;
++#endif
+ #endif
+
++ // printk("bluetooth open success.\n");
++ }
++ return 0;
++}
++#endif
+
+ /*
+ * For the 16C950
+@@ -824,11 +962,25 @@
+
+ icount = &info->state->icount;
+
++#if defined(CONFIG_BLUETOOTH_SL)
++ if (xpa2X0_is_st_uart(info->iomem_base) || xpa2X0_is_bt_uart(info->iomem_base)) {
++#else
+ if (xpa2X0_is_st_uart(info->iomem_base)) {
++#endif
+ *status = serial_inp(info, UART_LSR);
+ while (!(*status & UART_LSR_DR)) {
+ printk("WoWWWW!\n");
+ }
++#if 1 //
++ if (xpa2X0_is_bt_uart(info->iomem_base)) {
++ if (*status & UART_LSR_OE) {
++ printk("ERROR: Bluetooth Overrun!!\n");
++ }
++ if (*status & (UART_LSR_PE|UART_LSR_FE|0x80) ) {
++ printk("ERROR: Bluetooth Error!!\n");
++ }
++ }
++#endif
+ }
+
+ do {
+@@ -838,7 +990,11 @@
+ return; // if TTY_DONT_FLIP is set
+ }
+
++#if defined(CONFIG_BLUETOOTH_SL)
++ if (xpa2X0_is_st_uart(info->iomem_base) || xpa2X0_is_bt_uart(info->iomem_base)) {
++#else
+ if (xpa2X0_is_st_uart(info->iomem_base)) {
++#endif
+ while (!(*status & UART_LSR_DR))
+ ;
+ }
+@@ -851,7 +1007,11 @@
+ #ifdef SERIAL_DEBUG_INTR
+ printk("DR%02x:%02x...", ch, *status);
+ #endif
++#if defined(CONFIG_BLUETOOTH_SL)
++ if (xpa2X0_is_st_uart(info->iomem_base) || xpa2X0_is_bt_uart(info->iomem_base)) {
++#else
+ if (xpa2X0_is_st_uart(info->iomem_base)) {
++#endif
+ goto IRDA_SKIP;
+ }
+ *tty->flip.flag_buf_ptr = 0;
+@@ -894,7 +1054,11 @@
+ *status &= info->read_status_mask;
+
+ #ifdef CONFIG_SERIAL_CONSOLE
++#if defined(CONFIG_BLUETOOTH_SL)
++ if (!xpa2X0_is_st_uart(info->iomem_base) && !xpa2X0_is_bt_uart(info->iomem_base)) {
++#else
+ if (!xpa2X0_is_st_uart(info->iomem_base)) {
++#endif
+ if (info->line == sercons.index) {
+ /* Recover the break flag from console xmit */
+ *status |= lsr_break_flag;
+@@ -996,7 +1160,19 @@
+ // udelay(800);
+
+ serial_outp(info, XPA2X0_UART_ISR, XPA210_DISCOVERY_IR_RECV);
+-
++#if defined(CONFIG_BLUETOOTH_SL)
++ } else if (xpa2X0_is_bt_uart(info->iomem_base)) {
++
++ while (!(serial_inp(info, UART_LSR) & UART_LSR_TEMT))
++ ;
++
++ info->IER &= ~UART_IER_THRI;
++ serial_out(info, UART_IER, info->IER);
++ status0 = serial_inp(info, UART_IIR);
++
++ if (intr_done)
++ *intr_done = 0;
++#endif
+ } else {
+ info->IER &= ~UART_IER_THRI;
+ serial_out(info, UART_IER, info->IER);
+@@ -1008,7 +1184,11 @@
+ if( info->io_type == SERIAL_IO_MEM ){
+ count = info->xmit_fifo_size / 2;
+
++#if defined(CONFIG_BLUETOOTH_SL)
++ if (xpa2X0_is_st_uart(info->iomem_base) || xpa2X0_is_bt_uart(info->iomem_base)) {
++#else
+ if (xpa2X0_is_st_uart(info->iomem_base)) {
++#endif
+ count = info->xmit_fifo_size ;
+ }
+ } else count = info->xmit_fifo_size;
+@@ -1039,7 +1219,6 @@
+ } else {
+ do {
+ serial_out(info, UART_TX, info->xmit.buf[info->xmit.tail]);
+-
+ info->xmit.tail = (info->xmit.tail + 1) & (SERIAL_XMIT_SIZE-1);
+ info->state->icount.tx++;
+ if (info->xmit.head == info->xmit.tail)
+@@ -1064,6 +1243,10 @@
+ // while (!(serial_inp(info, UART_LSR) & UART_LSR_TEMT))
+ // ;
+
++#if defined(CONFIG_BLUETOOTH_SL)
++ } else if (xpa2X0_is_bt_uart(info->iomem_base)) {
++
++#endif
+ } else {
+ info->IER &= ~UART_IER_THRI;
+ serial_out(info, UART_IER, info->IER);
+@@ -1091,7 +1274,11 @@
+
+ status = serial_in(info, UART_MSR);
+
++#if defined(CONFIG_BLUETOOTH_SL)
++ if (xpa2X0_is_st_uart(info->iomem_base) || xpa2X0_is_bt_uart(info->iomem_base)) {
++#else
+ if (xpa2X0_is_st_uart(info->iomem_base)) {
++#endif
+ // printk("check_modem_status: do nothing\n");
+ return;
+ }
+@@ -1325,12 +1512,21 @@
+ goto IRDA_INTR_DONE;
+ }
+
+-
+ do {
+ status = serial_inp(info, UART_LSR);
+ #ifdef SERIAL_DEBUG_INTR
+ printk("status = %x...", status);
+ #endif
++#if 1 //
++ if (xpa2X0_is_bt_uart(info->iomem_base)) {
++ if (status & UART_LSR_OE) {
++ printk("ERROR: Bluetooth Overrun!\n");
++ }
++ if (status & (UART_LSR_PE|UART_LSR_FE|0x80) ) {
++ printk("ERROR: Bluetooth Error!\n");
++ }
++ }
++#endif
+ if (status & UART_LSR_DR)
+ receive_chars(info, &status, regs);
+
+@@ -2230,6 +2426,35 @@
+
+ return;
+ }
++#if defined(CONFIG_BLUETOOTH_SL)
++ if (xpa2X0_is_bt_uart(info->iomem_base)) {
++ cval = UART_LCR_WLEN8;
++#if 1 // for BCSP unit
++ if (cflag & PARENB) {
++ cval |= UART_LCR_PARITY;
++ printk("set even parity enable\n");
++ }
++ if (!(cflag & PARODD)) {
++ cval |= UART_LCR_EPAR;
++ }
++#endif
++ fcr = UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_RCVR |UART_FCR_CLEAR_XMIT | UART_FCR_TRIGGER_8;
++
++ save_flags(flags); cli();
++ quot = 0x0008; // 115.2kbps
++
++ serial_outp(info, UART_LCR, cval | UART_LCR_DLAB); /* set DLAB */
++ serial_outp(info, UART_DLL, quot & 0xff); /* LS of divisor */
++ serial_outp(info, UART_DLM, quot >> 8); /* MS of divisor */
++ serial_outp(info, UART_LCR, cval); /* reset DLAB */
++ info->LCR = cval; /* Save LCR */
++ serial_outp(info, UART_FCR, fcr); /* set fcr */
++
++ restore_flags(flags);
++
++ return;
++ }
++#endif
+
+ /* Set up FIFO's */
+ if (uart_config[info->state->type].flags & UART_USE_FIFO) {
+@@ -2448,7 +2673,11 @@
+
+ #if defined(CONFIG_ARCH_SHARP_SL)
+ if(info->io_type == SERIAL_IO_MEM){
++#if defined(CONFIG_BLUETOOTH_SL)
++ if (xpa2X0_is_st_uart(info->iomem_base) || xpa2X0_is_bt_uart(info->iomem_base)) {
++#else
+ if (xpa2X0_is_st_uart(info->iomem_base)) {
++#endif
+
+ info->IER |= UART_IER_THRI;
+ serial_out(info, UART_IER, info->IER);
+@@ -3508,9 +3737,10 @@
+
+
+ //close IR
++#ifdef CONFIG_PM
+ #if defined(CONFIG_ARCH_SHARP_SL)&& (CONFIG_IRDA)
+ if (xpa2X0_is_st_uart(info->iomem_base)) {
+- ICMR &= ~(1 << 20); //btuart
++ ICMR &= ~(1 << 20); //stuart
+ xpa210_discovery_irda_power_off();
+ xpa210_discovery_irda_enable(info, 0);
+ irda_open = 0; irda_info = 0;
+@@ -3519,6 +3749,13 @@
+ #endif
+ }
+ #endif
++#if defined(CONFIG_BLUETOOTH_SL)
++ if (xpa2X0_is_bt_uart(info->iomem_base)) {
++ pxa_bluetooth_enable(info, 0);
++ bluetooth_open = 0; bluetooth_info = 0;
++ }
++#endif // end CONFIG_BLUETOOTH_SL
++#endif /* CONFIG_PM */
+
+ shutdown(info);
+ if (tty->driver.flush_buffer)
+@@ -3540,12 +3777,14 @@
+ wake_up_interruptible(&info->close_wait);
+ MOD_DEC_USE_COUNT;
+
+-#if (defined(CONFIG_SABINAL_DISCOVERY) && (CONFIG_DISCOVERY_EVT2)) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if (defined(CONFIG_SABINAL_DISCOVERY) && (CONFIG_DISCOVERY_EVT2)) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
++#ifdef CONFIG_PM
+ xpa210_discovery_serial_power_off();
+ if (xpa2X0_is_ff_uart(info->iomem_base)) {
+ CKEN &= ~CKEN6_FFUART;
+ change_power_mode(LOCK_FCS_FFUART, 0);
+ }
++#endif /* CONFIG_PM */
+ #endif
+
+ }
+@@ -3906,12 +4145,14 @@
+ #endif
+ }
+
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
++#ifdef CONFIG_PM
+ xpa210_discovery_serial_power_on();
+ if (xpa2X0_is_ff_uart(info->iomem_base)) {
+- CKEN |= CKEN6_FFUART;
+ if ( !change_power_mode(LOCK_FCS_FFUART, 1) ) return -EAGAIN;
++ CKEN |= CKEN6_FFUART;
+ }
++#endif /* CONFIG_PM */
+ #endif
+
+ /*
+@@ -3964,7 +4205,7 @@
+ info->IER = 0x01;
+ if ( xpa210_discovery_irda_enable(info, 1) ) return -EAGAIN;
+ xpa210_discovery_irda_power_on();
+- ICMR |= (1 << 20); //btuart
++ ICMR |= (1 << 20); //stuart
+ irda_open = 1;
+ irda_info = info;
+ #if defined(CONFIG_SABINAL_DISCOVERY)
+@@ -3973,6 +4214,15 @@
+ }
+ #endif
+
++#if defined(CONFIG_BLUETOOTH_SL)
++ if (pxa_is_bluetooth_line(line)) {
++ int ret;
++ if ( (ret = pxa_bluetooth_enable(info, 1))!=0 ) return ret;
++ bluetooth_open = 1;
++ bluetooth_info = info;
++ }
++#endif // end CONFIG_BLUETOOTH_SL
++
+ #ifdef SERIAL_DEBUG_OPEN
+ printk("\nrs_open ttys%d successful...", info->line);
+ #endif
+@@ -6161,24 +6411,29 @@
+
+ void cotulla_serial_suspend(void) {
+
+-#if (defined(CONFIG_SABINAL_DISCOVERY) && (CONFIG_DISCOVERY_EVT2)) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if (defined(CONFIG_SABINAL_DISCOVERY) && (CONFIG_DISCOVERY_EVT2)) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ xpa210_discovery_serial_power_off();
+ #endif
+
+ #ifdef CONFIG_IRDA
+ if ( irda_open == 1 ) {
+- ICMR &= ~(1 << 20); //btuart
++ ICMR &= ~(1 << 20); //stuart
+ xpa210_discovery_irda_power_off();
+ xpa210_discovery_irda_enable(irda_info, 0);
+
+ }
+ #endif
+
++#if defined(CONFIG_BLUETOOTH_SL)
++ if ( bluetooth_open ) {
++ pxa_bluetooth_enable(bluetooth_info, 0);
++ }
++#endif // end CONFIG_BLUETOOTH_SL
+ }
+
+ void cotulla_serial_resume(void) {
+
+-#if (defined(CONFIG_SABINAL_DISCOVERY) && (CONFIG_DISCOVERY_EVT2)) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if (defined(CONFIG_SABINAL_DISCOVERY) && (CONFIG_DISCOVERY_EVT2)) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ xpa210_discovery_serial_power_on();
+ #endif
+
+@@ -6192,7 +6447,7 @@
+ #else
+ #if defined(CONFIG_SABINAL_DISCOVERY)
+ BTUART_MCR |= UART_MCR_OUT2;
+-#elif defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#elif defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ FFUART_MCR |= UART_MCR_OUT2;
+ #endif
+ STUART_MCR |= UART_MCR_OUT2;
+@@ -6202,10 +6457,16 @@
+ change_speed(irda_info, 0);
+ if ( xpa210_discovery_irda_enable(irda_info, 1) ) return;
+ xpa210_discovery_irda_power_on();
+- ICMR |= (1 << 20); //btuart
++ ICMR |= (1 << 20); //stuart
+ }
+ #endif
+
++#if defined(CONFIG_BLUETOOTH_SL)
++ if ( bluetooth_open == 1 ) {
++ change_speed(bluetooth_info, 0);
++ if ( pxa_bluetooth_enable(bluetooth_info, 1) ) return;
++ }
++#endif // end CONFIG_BLUETOOTH_SL
+ #endif
+
+ }
+@@ -6226,7 +6487,7 @@
+
+ return 0;
+ }
+-#endif
++#endif /* CONFIG_PM */
+
+ /*
+ * The serial driver boot-time initialization code!
+@@ -6289,7 +6550,7 @@
+ serial_driver.subtype = SERIAL_TYPE_NORMAL;
+ serial_driver.init_termios = tty_std_termios;
+ serial_driver.init_termios.c_cflag =
+- B9600 | CS8 | CREAD | HUPCL | CLOCAL;
++ B9600 | CS8 | CREAD | HUPCL | CLOCAL;
+ serial_driver.flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS;
+ serial_driver.refcount = &serial_refcount;
+ serial_driver.table = serial_table;
+@@ -6368,6 +6629,9 @@
+ if (state->flags & ASYNC_BOOT_AUTOCONF)
+ autoconfig(state);
+ }
++#if defined(CONFIG_BLUETOOTH_SL)
++ pxa_check_bluetooth_unit();
++#endif
+ for (i = 0, state = rs_table; i < NR_PORTS; i++,state++) {
+ if (state->type == PORT_UNKNOWN)
+ continue;
+@@ -6384,6 +6648,16 @@
+ state->iomem_base, state->irq,
+ uart_config[state->type].name);
+ printk(", using IRDA\n");
++#if defined(CONFIG_BLUETOOTH_SL)
++ } else if (xpa2X0_is_bt_uart(state->iomem_base)) {
++ printk(KERN_INFO"ttyS%02d%s at 0x%px (irq = %d) is a %s",
++ state->line + SERIAL_DEV_OFFSET,
++ (state->flags & ASYNC_FOURPORT) ? " FourPort" : "",
++ state->iomem_base, state->irq,
++ uart_config[state->type].name);
++ if (has_bluetooth==1) printk(", using Bluetooth\n");
++ else printk("\n");
++#endif // end CONFIG_BLUETOOTH_SL
+ } else {
+ printk(KERN_INFO"ttyS%02d%s at 0x%px (irq = %d) is a %s\n",
+ state->line + SERIAL_DEV_OFFSET,
+@@ -6418,7 +6692,7 @@
+ probe_serial_pnp();
+ #endif
+
+-#if (defined(CONFIG_SABINAL_DISCOVERY) && (CONFIG_DISCOVERY_EVT2)) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if (defined(CONFIG_SABINAL_DISCOVERY) && (CONFIG_DISCOVERY_EVT2)) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ xpa210_discovery_serial_power_off();
+ #endif
+
+@@ -6435,9 +6709,23 @@
+ v2 |= 0x00008000;
+ GPDR1 = v2;
+
+-#if !defined(CONFIG_SABINAL_DISCOVERY)
++#if !defined(CONFIG_SABINAL_DISCOVERY) && !defined(CONFIG_ARCH_PXA_TOSA)
+ GPDR(GPIO_IR_ON) |= GPIO_bit(GPIO_IR_ON);
+ #endif
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ SCP_REG_GPCR |= SCP_IR_POWERDWN;
++ set_GPIO_mode(GPIO47_STTXD|GPIO_OUT);
++ GPCR(GPIO47_STTXD) = GPIO_bit(GPIO47_STTXD);
++ set_GPIO_mode(GPIO46_STRXD_MD);
++
++#endif
++
++#if defined(CONFIG_BLUETOOTH_SL)
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ SCP_REG_GPCR |= SCP_BT_RESET;
++ SCP_REG_GPCR |= SCP_BT_PWR_EN;
++#endif
++#endif // end CONFIG_BLUETOOTH_SL
+ #endif
+
+ #ifdef CONFIG_PM
+diff -Nur linux_c860_org/drivers/char/sharp_buzzer.c linux/drivers/char/sharp_buzzer.c
+--- linux_c860_org/drivers/char/sharp_buzzer.c 2003-01-14 12:07:55.000000000 +0900
++++ linux/drivers/char/sharp_buzzer.c 2004-06-10 21:09:10.000000000 +0900
+@@ -18,6 +18,7 @@
+ * ChangeLog:
+ * 04-16-2001 Lineo Japan, Inc. ...
+ * 12-Dec-2002 Sharp Corporation for Poodle and Corgi
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+ #include <linux/config.h>
+@@ -52,7 +53,7 @@
+ # define SHARP_BUZZER_MAJOR 227 /* number of bare sharp_buzzer driver */
+ #endif
+
+-#if !defined(CONFIG_SA1100_COLLIE) && !defined(CONFIG_ARCH_PXA_POODLE) && !defined(CONFIG_ARCH_PXA_CORGI)
++#if !defined(CONFIG_SA1100_COLLIE) && !defined(CONFIG_ARCH_PXA_POODLE) && !defined(CONFIG_ARCH_PXA_CORGI) && !defined(CONFIG_ARCH_PXA_TOSA)
+ #define USE_IMELODY_FORMAT
+ #endif
+
+@@ -122,6 +123,22 @@
+ #define resume_buzzer_arch() poodle_resume_buzzer()
+ #endif
+
++#if defined (CONFIG_ARCH_PXA_TOSA)
++extern int tosa_play_sound_by_id(int soundid,int volume);
++extern int tosa_play_sound_by_hz(unsigned int hz,unsigned int msecs,int volume);
++extern int tosa_buzzer_dev_init(void);
++extern int tosa_buzzer_supported(int which); /* return -EINVAL if unspoorted , otherwise return >= 0 value */
++extern int tosa_suspend_buzzer(void);
++extern int tosa_resume_buzzer(void);
++#define play_sound_by_id(id,vol) tosa_play_sound_by_id((id),(vol))
++#define stop_sound() tosa_stop_sound()
++#define stop_sound_by_id(id) tosa_stop_sound()
++#define play_sound_by_hz(hz,msecs,vol) tosa_play_sound_by_hz((hz),(msecs),(vol))
++#define buzzer_dev_init() tosa_buzzer_dev_init()
++#define buzzer_supported_arch(w) tosa_buzzer_supported((w))
++#define suspend_buzzer_arch() tosa_suspend_buzzer()
++#define resume_buzzer_arch() tosa_resume_buzzer()
++#endif /* CONFIG_ARCH_PXA_TOSA */
+
+ /*
+ * logical level drivers
+@@ -498,7 +515,7 @@
+ if( minor != SHARP_BUZZER_MINOR ) return -ENODEV;
+ if( ! device_initialized ){
+ int i;
+-#if !defined(CONFIG_SA1100_COLLIE) && !defined(CONFIG_ARCH_PXA_POODLE) && !defined(CONFIG_ARCH_PXA_CORGI)
++#if !defined(CONFIG_SA1100_COLLIE) && !defined(CONFIG_ARCH_PXA_POODLE) && !defined(CONFIG_ARCH_PXA_CORGI) && !defined(CONFIG_ARCH_PXA_TOSA)
+ buzzer_dev_init();
+ #endif
+ for(i=0;i<=SHARP_BUZ_WHICH_MAX;i++){
+@@ -750,7 +767,7 @@
+ #endif
+
+
+-#if defined(CONFIG_SA1100_COLLIE) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_SA1100_COLLIE) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ buzzer_dev_init();
+ #endif
+
+diff -Nur linux_c860_org/drivers/char/sharp_kbdctl.c linux/drivers/char/sharp_kbdctl.c
+--- linux_c860_org/drivers/char/sharp_kbdctl.c 2003-01-14 12:07:55.000000000 +0900
++++ linux/drivers/char/sharp_kbdctl.c 2004-06-10 21:09:10.000000000 +0900
+@@ -18,6 +18,7 @@
+ * Change Log
+ * 30-Jul-2002 Lineo Japan, Inc. for 2.4.18
+ * 12-Dec-2002 Sharp Corporation for Poodle and Corgi
++ * 1-Nov-2003 Sharp Corporation for Tosa
+ */
+
+ #include <linux/config.h>
+@@ -67,9 +68,10 @@
+ extern int restore_all_holdkey_info(void);
+ extern int customize_del_holdkey_info(int hardcode);
+ extern int customize_restore_holdkey_info(int hardcode);
+-
+-
+-
++#if defined(CONFIG_ARCH_PXA_TOSA)
++extern int set_port_key_setting( int num, int val );
++extern int get_port_key_setting( int num );
++#endif
+
+ /*
+ * operations....
+@@ -157,7 +159,11 @@
+ break;
+ case SHARP_EXTMODIF_NUMLOCK:
+ sharppda_kbd_extmodif_togglestatus(c);
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ c = 32; f = 3; // numlock keycode
++#else
+ c = SLKEY_NUMLOCK; f = 3;
++#endif
+ break;
+ default:
+ return -EINVAL;
+@@ -195,6 +201,18 @@
+ error = sharppda_kbd_extmodif_togglestatus(arg);
+ if( error ) return error;
+ }
++ case SHARP_KBDCTL_SETMODIFSTAT:
++ {
++ int error;
++ int val;
++ sharp_kbdctl_modifstat* puser = (sharp_kbdctl_modifstat*)arg;
++ if( ! puser ) return -EINVAL;
++ val = sharppda_kbd_extmodif_showstatus(puser->which);
++ if (puser->stat!=val) {
++ error = sharppda_kbd_extmodif_togglestatus(puser->which);
++ if( error ) return error;
++ }
++ }
+ break;
+ case SHARP_KBDCTL_SETHOLDTH:
+ {
+@@ -311,6 +329,20 @@
+ if( error ) return error;
+ }
+ break;
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ case SHARP_KBDCTL_SETSWKEY:
++ {
++ sharp_kbdctl_swkey* puser = (sharp_kbdctl_swkey*)arg;
++ if( ! puser ) return -EINVAL;
++ return set_port_key_setting(puser->key,puser->mode);
++ }
++ break;
++ case SHARP_KBDCTL_GETSWKEY:
++ {
++ return get_port_key_setting(arg);
++ }
++ break;
++#endif
+ default:
+ return -EINVAL;
+ }
+diff -Nur linux_c860_org/drivers/char/sharp_led.c linux/drivers/char/sharp_led.c
+--- linux_c860_org/drivers/char/sharp_led.c 2002-12-18 19:28:00.000000000 +0900
++++ linux/drivers/char/sharp_led.c 2004-06-10 21:09:10.000000000 +0900
+@@ -19,6 +19,7 @@
+ * 30-Jul-2002 Lineo Japan, Inc. for 2.4.18
+ * 27-AUG-2002 Edward Chen, Steve Lin for Discovery
+ * 12-Dec-2002 Lineo Japan, Inc.
++ * 1-Nov-2003 Sharp Corporation for Tosa
+ *
+ */
+ #include <linux/config.h>
+@@ -72,7 +73,7 @@
+ #define suspend_led_arch() collie_suspend_led()
+ #define resume_led_arch() collie_resume_led()
+ #define standby_led_arch() (0)
+-#elif defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#elif defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ extern int sharpsl_led_supported(int which); /* return -EINVAL if unspoorted , otherwise return >= 0 value */
+ extern int sharpsl_turn_led_status(int which,int status); /* set LED status to directed value. */
+ extern int sharpsl_init_led(void);
+@@ -209,33 +210,33 @@
+ {
+ switch (req) {
+ case PM_STANDBY:
+-#if defined(CONFIG_SA1100_COLLIE) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_SA1100_COLLIE) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ set_led_status(SHARP_LED_PDA,LED_PDA_SUSPENDED);
+ standby_led_arch();
+ #endif
+ break;
+
+ case PM_BLANK:
+-#if defined(CONFIG_SA1100_COLLIE) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_SA1100_COLLIE) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ set_led_status(SHARP_LED_PDA,LED_PDA_SUSPENDED);
+ #endif
+ break;
+
+ case PM_UNBLANK:
+-#if defined(CONFIG_SA1100_COLLIE) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_SA1100_COLLIE) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ set_led_status(SHARP_LED_PDA,LED_PDA_RUNNING);
+ #endif
+ break;
+
+ case PM_SUSPEND:
+-#if defined(CONFIG_SA1100_COLLIE) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_SA1100_COLLIE) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ set_led_status(SHARP_LED_PDA,LED_PDA_OFF);
+ suspend_led_arch();
+ #endif
+ break;
+
+ case PM_RESUME:
+-#if defined(CONFIG_SA1100_COLLIE) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_SA1100_COLLIE) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ set_led_status(SHARP_LED_PDA,LED_PDA_RUNNING);
+ resume_led_arch();
+ #endif
+diff -Nur linux_c860_org/drivers/char/sharpsl_led.c linux/drivers/char/sharpsl_led.c
+--- linux_c860_org/drivers/char/sharpsl_led.c 2003-01-14 12:07:55.000000000 +0900
++++ linux/drivers/char/sharpsl_led.c 2004-06-10 21:09:10.000000000 +0900
+@@ -18,6 +18,7 @@
+ * ChangeLog:
+ * based on collie_led.c Aug. 26 2002 LINEO
+ * 12-Dec-2002 Sharp Corporation for Poodle and Corgi
++ * 1-Nov-2003 Sharp Corporation for Tosa
+ *
+ */
+
+@@ -47,6 +48,9 @@
+ #if defined(CONFIG_ARCH_PXA_CORGI)
+ #include <asm/arch/corgi.h>
+ #endif
++#if defined(CONFIG_ARCH_PXA_TOSA)
++#include <asm/arch/tosa.h>
++#endif
+ #include <asm/arch/hardware.h>
+
+ #include <linux/timer.h>
+@@ -69,7 +73,8 @@
+ {
+ set_led_status(SHARP_LED_CHARGER,LED_CHARGER_ERROR);
+ }
+-#elif defined(CONFIG_ARCH_PXA_CORGI)
++#elif defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
++static int led_suspended=0;
+ void sharpsl_charge_wait_ms(void)
+ {
+ unsigned long time = OSCR;
+@@ -88,6 +93,18 @@
+ }
+ }
+
++#if defined (CONFIG_ARCH_PXA_TOSA)
++void sharpsl_charge_err_off(void)
++{
++ while(1) {
++ set_scoop_jc_gpio(SCP_LED_ORANGE);
++ sharpsl_charge_wait( 250 );
++ reset_scoop_jc_gpio(SCP_LED_ORANGE);
++ sharpsl_charge_wait( 250 );
++ if ((GPLR(GPIO_AC_IN) & GPIO_bit(GPIO_AC_IN))!=0) break;
++ }
++}
++#else // for Corgi
+ void sharpsl_charge_err_off(void)
+ {
+ while(1) {
+@@ -99,6 +116,7 @@
+ }
+ }
+ #endif
++#endif
+
+ #if defined(CONFIG_ARCH_PXA_POODLE)
+ #define LED_ONOFF_MASK (LCM_LPT_TOFL|LCM_LPT_TOFH)
+@@ -109,7 +127,7 @@
+ #define LED_BLNK(REG,X,Y) ((REG)=((REG)&~LED_BLNK_MASK)|LED_BLNK_VAL(X,Y))
+ #endif
+
+-#if defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ struct timer_list orange_led_blink_timer;
+ struct st_orange_blink {
+ int blink_switch;
+@@ -120,16 +138,76 @@
+ #define BLINK_SLOW 2
+ #define ORANGE_LED_SW 1
+ #define GREEN_LED_SW 2
++#if defined (CONFIG_ARCH_PXA_TOSA)
++#define BLUE_LED_SW 3
++#define WLAN_LED_SW 4
++#define LED_NUM 4
++
++static int get_ledport( int sw )
++{
++ int port=-1;
++ switch(sw) {
++ case ORANGE_LED_SW:
++ port = SCP_LED_ORANGE;
++ break;
++ case GREEN_LED_SW:
++ port = SCP_LED_GREEN;
++ break;
++ case BLUE_LED_SW:
++ port = SCP_LED_BLUE;
++ break;
++ case WLAN_LED_SW:
++ port = SCP_LED_WLAN;
++ break;
++ }
++ return port;
++}
++
++static void set_led( int sw, int on )
++{
++ int port=get_ledport(sw);
++ if (port==-1) {
++ printk(__FUNCTION__ ": unknown LED %d\n",sw);
++ return;
++ }
++ if (on) set_scoop_jc_gpio(port);
++ else reset_scoop_jc_gpio(port);
++ // printk("setled(%d,%d)\n",sw,on);
++}
++
++static int get_led( int sw )
++{
++ int port=get_ledport(sw);
++ if (port==-1) {
++ printk(__FUNCTION__ ": unknown LED %d\n",sw);
++ return;
++ }
++ return (SCP_JC_REG_GPWR&port)?1:0;
++}
++
++#define LED_OFF(n) set_led(n,0)
++#define LED_ON(n) set_led(n,1)
++#define LED_STATUS(n) get_led(n)
++static int led_resume_buffer=0;
++#endif
+
+ static void blink_orange_led(unsigned long data)
+ {
+ struct st_orange_blink *orange = (struct st_orange_blink *)data;
+
+ if (orange->blink_switch == 0) {
++#if defined (CONFIG_ARCH_PXA_TOSA)
++ LED_ON(ORANGE_LED_SW);
++#else
+ GPSR(GPIO_LED_ORANGE) = GPIO_bit(GPIO_LED_ORANGE);
++#endif
+ orange->blink_switch = 1;
+ } else {
++#if defined (CONFIG_ARCH_PXA_TOSA)
++ LED_OFF(ORANGE_LED_SW);
++#else
+ GPCR(GPIO_LED_ORANGE) = GPIO_bit(GPIO_LED_ORANGE);
++#endif
+ orange->blink_switch = 0;
+ }
+
+@@ -165,9 +243,11 @@
+ del_timer(&orange_led_blink_timer);
+ }
+
++#if ! defined(CONFIG_ARCH_PXA_TOSA)
+ #define LED_OFF(n) ( (n == ORANGE_LED_SW) ? (GPCR(GPIO_LED_ORANGE) = GPIO_bit(GPIO_LED_ORANGE)) : (reset_scoop_gpio(SCP_LED_GREEN)) )
+
+ #define LED_ON(n) ( (n == ORANGE_LED_SW) ? (GPSR(GPIO_LED_ORANGE) = GPIO_bit(GPIO_LED_ORANGE)) : (set_scoop_gpio(SCP_LED_GREEN)) )
++#endif
+
+ #define LED_BLNK(n) orange_led_start_blink(n)
+ #endif /* CONFIG_ARCH_PXA_CORGI */
+@@ -178,7 +258,7 @@
+ {
+ #if defined(CONFIG_ARCH_PXA_POODLE)
+ LED_OFF(LCM_LPT0);
+-#elif defined(CONFIG_ARCH_PXA_CORGI)
++#elif defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ LED_OFF(ORANGE_LED_SW);
+ orange_led_stop_blink();
+ #endif
+@@ -188,7 +268,7 @@
+ {
+ #if defined(CONFIG_ARCH_PXA_POODLE)
+ LED_ON(LCM_LPT0);
+-#elif defined(CONFIG_ARCH_PXA_CORGI)
++#elif defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ LED_ON(ORANGE_LED_SW);
+ #endif
+ }
+@@ -198,7 +278,7 @@
+ led0_off();
+ #if defined(CONFIG_ARCH_PXA_POODLE)
+ LED_BLNK(LCM_LPT0,2,2);
+-#elif defined(CONFIG_ARCH_PXA_CORGI)
++#elif defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ LED_BLNK(BLINK_FAST);
+ #endif
+ }
+@@ -208,7 +288,7 @@
+ led0_off();
+ #if defined(CONFIG_ARCH_PXA_POODLE)
+ LED_BLNK(LCM_LPT0,7,7);
+-#elif defined(CONFIG_ARCH_PXA_CORGI)
++#elif defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ LED_BLNK(BLINK_SLOW);
+ #endif
+ }
+@@ -219,7 +299,7 @@
+ {
+ #if defined(CONFIG_ARCH_PXA_POODLE)
+ LED_OFF(LCM_LPT1);
+-#elif defined(CONFIG_ARCH_PXA_CORGI)
++#elif defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ LED_OFF(GREEN_LED_SW);
+ #endif
+ }
+@@ -228,7 +308,7 @@
+ {
+ #if defined(CONFIG_ARCH_PXA_POODLE)
+ LED_ON(LCM_LPT1);
+-#elif defined(CONFIG_ARCH_PXA_CORGI)
++#elif defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ LED_ON(GREEN_LED_SW);
+ #endif
+ }
+@@ -376,7 +456,7 @@
+ expires: -1,
+ next: -1
+ }
+-#elif defined(CONFIG_ARCH_PXA_CORGI)
++#elif defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ {
+ ledstate: SHARPSLLED_ON ,
+ expires: (HZ/10 + HZ/50),
+@@ -397,7 +477,7 @@
+ expires: -1,
+ next: -1
+ }
+-#elif defined(CONFIG_ARCH_PXA_CORGI)
++#elif defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ {
+ ledstate: SHARPSLLED_ON ,
+ expires: ((4*HZ)/5 + (2*HZ)/25),
+@@ -418,7 +498,7 @@
+ expires: -1,
+ next: -1
+ }
+-#elif defined(CONFIG_ARCH_PXA_CORGI)
++#elif defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ {
+ ledstate: SHARPSLLED_ON ,
+ expires: (HZ/10 + HZ/50),
+@@ -439,7 +519,7 @@
+ expires: -1,
+ next: -1
+ }
+-#elif defined(CONFIG_ARCH_PXA_CORGI)
++#elif defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ {
+ ledstate: SHARPSLLED_ON ,
+ expires: HZ/4,
+@@ -460,7 +540,7 @@
+ expires: -1,
+ next: -1
+ }
+-#elif defined(CONFIG_ARCH_PXA_CORGI)
++#elif defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ {
+ ledstate: SHARPSLLED_ON ,
+ expires: HZ/2,
+@@ -481,7 +561,7 @@
+ expires: -1,
+ next: -1
+ }
+-#elif defined(CONFIG_ARCH_PXA_CORGI)
++#elif defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ {
+ ledstate: SHARPSLLED_ON ,
+ expires: ((4*HZ)/5 + (2*HZ)/25),
+@@ -610,6 +690,98 @@
+ led0_off();
+ }
+
++#if defined(CONFIG_ARCH_PXA_TOSA)
++typedef struct {
++ int status;
++ int blink_switch;
++ long blink_interval;
++ struct timer_list timer;
++} LED_BLINK;
++static LED_BLINK st_led_status[LED_NUM+1];
++static int led_status_initialized=0;
++
++static void led_on(int led)
++{
++ del_timer(&st_led_status[led].timer);
++ st_led_status[led].status=1;
++ LED_ON(led);
++}
++static void led_off(int led)
++{
++ del_timer(&st_led_status[led].timer);
++ st_led_status[led].status=0;
++ LED_OFF(led);
++}
++
++static void led_blink_func(unsigned long data)
++{
++ int led = data;
++ if (st_led_status[led].blink_switch==0 && led_suspended==0 ) {
++ LED_ON(led);
++ st_led_status[led].blink_switch=1;
++ } else {
++ LED_OFF(led);
++ st_led_status[led].blink_switch=0;
++ }
++ init_timer(&st_led_status[led].timer);
++ st_led_status[led].timer.function = led_blink_func;
++ st_led_status[led].timer.expires = jiffies + st_led_status[led].blink_interval;
++ st_led_status[led].timer.data = led;
++ add_timer(&st_led_status[led].timer);
++}
++
++static void led_start_blink(int led, int interval)
++{
++ del_timer(&st_led_status[led].timer);
++ switch (interval) {
++ case BLINK_SLOW:
++ st_led_status[led].blink_interval = (4*HZ)/5 + (2*HZ)/25;
++ st_led_status[led].status = 2;
++ break;
++ case BLINK_FAST:
++ st_led_status[led].blink_interval = HZ / 4;
++ st_led_status[led].status = 3;
++ break;
++ default :
++ return;
++ }
++
++ st_led_status[led].blink_switch=0;
++ led_blink_func(led);
++}
++
++static void sharpsl_led_process_ex(int led_sw)
++{
++ int *leds = sharpslled_internal_logical;
++ int status=-1;
++ switch(led_sw) {
++ case BLUE_LED_SW:
++ status = leds[SHARP_LED_BLUETOOTH];
++ break;
++ case WLAN_LED_SW:
++ status = leds[SHARP_LED_WLAN];
++ break;
++ }
++ if ( status == -1 || status == st_led_status[led_sw].status ) return;
++ if (led_suspended) status=0; // force off
++ switch(status) {
++ case 0: // off
++ led_off(led_sw);
++ return;
++ case 1: // on
++ led_on(led_sw);
++ return;
++ case 2: // blink
++ led_start_blink(led_sw,BLINK_SLOW);
++ return;
++ case 3: // blink fast
++ led_start_blink(led_sw,BLINK_FAST);
++ return;
++ }
++ led_off(led_sw);
++}
++#endif
++
+ static sharpled_pattern_item* decide_physical_led(void)
+ {
+ int *leds = sharpslled_internal_logical;
+@@ -632,7 +804,7 @@
+ sharpslled_internal_logical[15]));
+
+ /******* 1st: controlled *******/
+-#if defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ if( (leds[SHARP_LED_COLLIE_1] > LED_COLLIE_1_ON) &&
+ (leds[SHARP_LED_PDA] == LED_PDA_OFF) )
+ return NULL;
+@@ -662,10 +834,10 @@
+ sharpsl_ledpat_softflash : NULL;
+ }
+
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ /* A3-1:R:SHARP_LED_CHARGER=LED_CHARGER_ERROR */
+
+-#if defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ /* A3-non-spec:G:turn off */
+ if( leds[SHARP_LED_PDA] == LED_PDA_OFF )
+ return NULL;
+@@ -777,6 +949,14 @@
+ if( which < 0 || which > SHARP_LED_WHICH_MAX ) return -EINVAL;
+ sharpslled_internal_logical[which] = status;
+ sharpsl_led0_process();
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ {
++ int i;
++ for (i=3; i<=LED_NUM; i++) {
++ sharpsl_led_process_ex(i);
++ }
++ }
++#endif
+ if( curpat ) sharpled_pattern_end(&sharpsl_led1_player);
+ if( ( pat = decide_physical_led() ) != NULL ){
+ sharpled_pattern_start(&sharpsl_led1_player,pat);
+@@ -787,13 +967,44 @@
+
+ int sharpsl_init_led(void)
+ {
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ if (!led_status_initialized) {
++ memset(&st_led_status,0,sizeof(st_led_status));
++ led_status_initialized=1;
++ }
++#endif
+ return 0;
+ }
+ int sharpsl_suspend_led(void)
+ {
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ led_suspended=1;
++ {
++ int i;
++ led_resume_buffer = 0;
++ for (i=1; i<=LED_NUM; i++) {
++ if (LED_STATUS(i)) {
++ led_resume_buffer |= 0x1<<i;
++ LED_OFF(i);
++ }
++ }
++ }
++#endif
+ return 0;
+ }
+ int sharpsl_resume_led(void)
+ {
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ led_suspended=0;
++ {
++ int i;
++ for (i=1; i<=LED_NUM; i++) {
++ if (led_resume_buffer & (0x1<<i)) {
++ LED_ON(i);
++ }
++ }
++ led_resume_buffer = 0;
++ }
++#endif
+ return 0;
+ }
+diff -Nur linux_c860_org/drivers/char/tosa_keyb.c linux/drivers/char/tosa_keyb.c
+--- linux_c860_org/drivers/char/tosa_keyb.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/char/tosa_keyb.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,234 @@
++/*
++ * linux/drivers/char/tosa_keyb.c
++ *
++ * (C) Copyright 2004 Lineo Solutions, Inc.
++ *
++ * May be copied or modified under the terms of the GNU General Public
++ * License. See linux/COPYING for more information.
++ *
++ * Based on:
++ * drivers/char/corgi_keyb.c
++ * drivers/char/collie_keyb.c
++ * drivers/char/iris_keyb.c
++ * drivers/char/kbd_linkup.c - Keyboard Driver for Linkup-7200
++ * Copyright (C) Roger Gammans 1998
++ * Written for Linkup 7200 by Xuejun Tao, ISDcorp
++ * Refer to kbd_7110.c (Cirrus Logic 7110 Keyboard driver)
++ *
++ * ChangeLong:
++ * 04-25-2001 Lineo Japan, Inc.
++ * 30-Jul-2002 Lineo Japan, Inc. for 2.4.18
++ * 12-Dec-2002 Sharp Corporation
++ * 1-Nov-2003 Sharp Corporation for Tosa
++ */
++#include <linux/config.h>
++#include <linux/init.h>
++#include <linux/poll.h>
++#include <linux/wait.h>
++#include <asm/arch/keyboard.h>
++#include <asm/uaccess.h>
++#include <linux/tqueue.h>
++#include <linux/kbd_ll.h>
++#include <linux/delay.h>
++#include <asm/arch/pxa-regs.h>
++
++#ifdef USE_KBD_IRQ // could be defined in asm/arch/keyboard.h
++#include <asm/irq.h> // for linkup keyboard interrupt
++#endif
++
++#include <asm/arch/irqs.h>
++
++#ifndef TOSA_KBD_MAJOR
++# define TOSA_KBD_MAJOR 61
++#endif
++
++#ifdef CONFIG_PM
++#include <linux/pm.h>
++static struct pm_dev *corgi_kbd_pm_dev;
++#endif
++
++/*
++ * common logical driver definition
++ */
++extern void sharppda_kbd_press(int keycode);
++extern void sharppda_kbd_release(int keycode);
++extern void sharppda_scan_logdriver_init(void);
++extern void sharppda_scan_key_gpio(void* dummy);
++#define tosa_kbd_tick sharppda_scan_key_gpio
++
++/*
++ * physical driver depending on TOSA target.
++ */
++void tosa_kbd_discharge_all(void)
++{
++ // STROBE All HiZ
++ GPCR1 = GPIO_HIGH_STROBE_BIT;
++ GPDR1 &= ~GPIO_HIGH_STROBE_BIT;
++ GPCR2 = GPIO_LOW_STROBE_BIT;
++ GPDR2 &= ~GPIO_LOW_STROBE_BIT;
++}
++
++void tosa_kbd_charge_all(void)
++{
++}
++
++void tosa_kbd_activate_all(void)
++{
++ // STROBE ALL -> High
++ GPSR1 = GPIO_HIGH_STROBE_BIT;
++ GPDR1 |= GPIO_HIGH_STROBE_BIT;
++ GPSR2 = GPIO_LOW_STROBE_BIT;
++ GPDR2 |= GPIO_LOW_STROBE_BIT;
++
++ udelay(KB_DISCHARGE_DELAY);
++
++ // STATE CLEAR
++ GEDR2 |= GPIO_ALL_SENSE_BIT;
++}
++
++void tosa_kbd_activate_col(int col)
++{
++ if (col<=5) {
++ // STROBE col -> High, not col -> HiZ
++ GPSR1 = GPIO_STROBE_BIT(col);
++ GPDR1 = (GPDR1 & ~GPIO_HIGH_STROBE_BIT) | GPIO_STROBE_BIT(col);
++ } else {
++ // STROBE col -> High, not col -> HiZ
++ GPSR2 = GPIO_STROBE_BIT(col);
++ GPDR2 = (GPDR2 & ~GPIO_LOW_STROBE_BIT) | GPIO_STROBE_BIT(col);
++ }
++}
++
++void tosa_kbd_reset_col(int col)
++{
++ if (col<=5) {
++ // STROBE col -> Low
++ GPCR1 = GPIO_STROBE_BIT(col);
++ // STROBE col -> out, not col -> HiZ
++ GPDR1 = (GPDR1 & ~GPIO_HIGH_STROBE_BIT) | GPIO_STROBE_BIT(col);
++ } else {
++ // STROBE col -> Low
++ GPCR2 = GPIO_STROBE_BIT(col);
++ // STROBE col -> out, not col -> HiZ
++ GPDR2 = (GPDR2 & ~GPIO_LOW_STROBE_BIT) | GPIO_STROBE_BIT(col);
++
++ }
++}
++
++
++#ifdef USE_KBD_IRQ
++
++static void tosa_kbd_irq(int irq,void *dev_id,struct pt_regs *regs)
++{
++#ifdef CONFIG_APM
++ extern int autoPowerCancel;
++ extern int autoLightCancel;
++#endif
++ tosa_kbd_tick(NULL);
++
++#if CONFIG_APM // auto power/light cancel
++ autoPowerCancel = 0;
++ autoLightCancel = 0;
++#endif
++
++}
++#endif
++
++
++#ifdef CONFIG_PM
++extern void sharppda_scan_logdriver_suspend(void);
++extern void sharppda_scan_logdriver_resume(void);
++
++extern int tosa_initial_keypress;
++
++static int tosa_kbd_pm_callback(struct pm_dev *pm_dev,
++ pm_request_t req, void *data)
++{
++ int i;
++
++ switch (req) {
++ case PM_SUSPEND:
++ for (i = 0; i < KEY_SENSE_NUM; i++) {
++ disable_irq(IRQ_GPIO_KEY_SENSE(i));
++ }
++ disable_irq(IRQ_GPIO_ON_KEY);
++ disable_irq(IRQ_GPIO_RECORD_BTN);
++ disable_irq(IRQ_GPIO_SYNC);
++ sharppda_scan_logdriver_suspend();
++ break;
++ case PM_RESUME:
++ // STROBE ALL -> High
++ GPSR1 = GPIO_HIGH_STROBE_BIT;
++ GPSR2 = GPIO_LOW_STROBE_BIT;
++ GPDR1 |= GPIO_HIGH_STROBE_BIT;
++ GPDR2 |= GPIO_LOW_STROBE_BIT;
++ for (i = 0; i < KEY_SENSE_NUM; i++) {
++ enable_irq(IRQ_GPIO_KEY_SENSE(i));
++ }
++ enable_irq(IRQ_GPIO_ON_KEY);
++ enable_irq(IRQ_GPIO_RECORD_BTN);
++ enable_irq(IRQ_GPIO_SYNC);
++ sharppda_scan_logdriver_resume();
++ tosa_initial_keypress = -1;
++ break;
++ }
++ return 0;
++}
++#endif
++
++void tosa_kbd_hw_init(void)
++{
++ int i;
++
++ sharppda_scan_logdriver_init();
++
++ // STROBE ALL -> High
++ // SENSE ALL -> In
++ GPSR1 = GPIO_HIGH_STROBE_BIT;
++ GPSR2 = GPIO_LOW_STROBE_BIT;
++ GPDR2 &= ~GPIO_ALL_SENSE_BIT;
++ GPDR1 |= GPIO_HIGH_STROBE_BIT;
++ GPDR2 |= GPIO_LOW_STROBE_BIT;
++ GEDR2 |= GPIO_ALL_SENSE_BIT;
++ GAFR1_U &= ~GAFR_HIGH_STROBE_BIT;
++ GAFR2_L &= ~(GAFR_LOW_STROBE_BIT | GAFR_ALL_SENSE_BIT);
++
++ /* SENSE:RisingEdge */
++ for (i = 0; i < KEY_SENSE_NUM; i++) {
++ set_GPIO_IRQ_edge(GPIO_KEY_SENSE(i), GPIO_RISING_EDGE);
++ if (request_irq(IRQ_GPIO_KEY_SENSE(i), tosa_kbd_irq,
++ SA_INTERRUPT, "keyboard", NULL)) {
++ printk("Could not allocate KEYBD IRQ%d!\n", i);
++ }
++ }
++ // Power&Rec Button
++ set_GPIO_IRQ_edge(GPIO_ON_KEY, GPIO_FALLING_EDGE);
++ set_GPIO_IRQ_edge(GPIO_RECORD_BTN, GPIO_FALLING_EDGE);
++ set_GPIO_IRQ_edge(GPIO_SYNC, GPIO_FALLING_EDGE);
++ if (request_irq(IRQ_GPIO_ON_KEY, tosa_kbd_irq, SA_INTERRUPT, "On key", NULL) ||
++ request_irq(IRQ_GPIO_RECORD_BTN, tosa_kbd_irq, SA_INTERRUPT, "Record key", NULL) ||
++ request_irq(IRQ_GPIO_SYNC, tosa_kbd_irq, SA_INTERRUPT, "Sync key", NULL)) {
++ printk("Could not allocate KEYBD IRQ%d!\n", i);
++ }
++
++
++#ifdef CONFIG_PM
++ corgi_kbd_pm_dev = pm_register(PM_SYS_DEV, 0, tosa_kbd_pm_callback);
++#endif
++
++ printk("keyboard initilaized.\n");
++}
++
++int tosa_kbd_translate(unsigned char scancode, unsigned char *keycode_p)
++{
++
++ /*
++ * We do this strangley to be more independent of
++ * our headers..
++ */
++
++ *keycode_p = scancode & ~(KBDOWN | KBUP);
++
++ return 1;
++}
++
+diff -Nur linux_c860_org/drivers/char/tosa_keymap.c linux/drivers/char/tosa_keymap.c
+--- linux_c860_org/drivers/char/tosa_keymap.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/char/tosa_keymap.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,466 @@
++
++/* Do not edit this file! It was automatically generated by */
++/* loadkeys --mktable defkeymap.map > defkeymap.c */
++
++#include <linux/types.h>
++#include <linux/keyboard.h>
++#include <linux/kd.h>
++
++u_short plain_map[] = {
++ 0xf200, 0xfb61, 0xfb62, 0xfb63, 0xfb64, 0xfb65, 0xfb66, 0xfb67,
++ 0xfb68, 0xfb69, 0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d, 0xfb6e, 0xfb6f,
++ 0xfb70, 0xfb71, 0xfb72, 0xfb73, 0xfb74, 0xfb75, 0xfb76, 0xfb77,
++ 0xfb78, 0xfb79, 0xfb7a, 0xf700, 0xf201, 0xf101, 0xf703, 0xf008,
++ 0xf208, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf201,
++ 0xf200, 0xf031, 0xf032, 0xf033, 0xf034, 0xf035, 0xf036, 0xf037,
++ 0xf038, 0xf039, 0xf030, 0xf02d, 0xf05e, 0xf05c, 0xf05b, 0xf040,
++ 0xf702, 0xf703, 0xf702, 0xf02b, 0xfa00, 0xf040, 0xf03f, 0xf02c,
++ 0xf02e, 0xf009, 0xf104, 0xf105, 0xf106, 0xf02f, 0xf027, 0xf301,
++ 0xf302, 0xf303, 0xf304, 0xf305, 0xf306, 0xf307, 0xf308, 0xf309,
++ 0xf300, 0xf07f, 0xf30d, 0xf30c, 0xf200, 0xf30b, 0xf30a, 0xf30e,
++ 0xf702, 0xf703, 0xf01b, 0xf020, 0xf020, 0xf310, 0xf200, 0xf03b,
++ 0xf03a, 0xf05d, 0xf02c, 0xf02e, 0xf02f, 0xf05f, 0xf200, 0xf700,
++ 0xf114, 0xf117, 0xf118, 0xf119, 0xf701, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf702, 0xf200, 0xf200,
++ 0xf702, 0xf703, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++};
++
++u_short shift_map[] = {
++ 0xf200, 0xfb41, 0xfb42, 0xfb43, 0xfb44, 0xfb45, 0xfb46, 0xfb47,
++ 0xfb48, 0xfb49, 0xfb4a, 0xfb4b, 0xfb4c, 0xfb4d, 0xfb4e, 0xfb4f,
++ 0xfb50, 0xfb51, 0xfb52, 0xfb53, 0xfb54, 0xfb55, 0xfb56, 0xfb57,
++ 0xfb58, 0xfb59, 0xfb5a, 0xf700, 0xf201, 0xf101, 0xf702, 0xf008,
++ 0xf208, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf201,
++ 0xf200, 0xf021, 0xf022, 0xf023, 0xf024, 0xf025, 0xf026, 0xf027,
++ 0xf028, 0xf029, 0xf07e, 0xf03d, 0xf07e, 0xf07c, 0xf07b, 0xf060,
++ 0xf702, 0xf703, 0xf702, 0xf02b, 0xfa00, 0xf040, 0xf03f, 0xf03b,
++ 0xf03a, 0xf009, 0xf104, 0xf105, 0xf106, 0xf03f, 0xf022, 0xf301,
++ 0xf302, 0xf303, 0xf304, 0xf305, 0xf306, 0xf307, 0xf308, 0xf309,
++ 0xf300, 0xf07f, 0xf30d, 0xf30c, 0xf200, 0xf30b, 0xf30a, 0xf30e,
++ 0xf702, 0xf703, 0xf01b, 0xf020, 0xf020, 0xf310, 0xf200, 0xf02b,
++ 0xf02a, 0xf07d, 0xf03c, 0xf03e, 0xf03f, 0xf05f, 0xf200, 0xf700,
++ 0xf114, 0xf117, 0xf20b, 0xf20a, 0xf701, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf702, 0xf200, 0xf200,
++ 0xf702, 0xf703, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++};
++
++u_short ctrl_map[] = {
++ 0xf200, 0xf001, 0xf002, 0xf003, 0xf004, 0xf005, 0xf006, 0xf007,
++ 0xf008, 0xf009, 0xf00a, 0xf00b, 0xf00c, 0xf00d, 0xf00e, 0xf00f,
++ 0xf010, 0xf011, 0xf012, 0xf013, 0xf014, 0xf015, 0xf016, 0xf017,
++ 0xf018, 0xf019, 0xf01a, 0xf700, 0xf201, 0xf101, 0xf200, 0xf008,
++ 0xf208, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf201,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf702, 0xf703, 0xf702, 0xf02b, 0xfa00, 0xf040, 0xf03f, 0xf200,
++ 0xf200, 0xf009, 0xf104, 0xf105, 0xf106, 0xf200, 0xf200, 0xf301,
++ 0xf302, 0xf303, 0xf304, 0xf305, 0xf306, 0xf307, 0xf308, 0xf309,
++ 0xf300, 0xf07f, 0xf30d, 0xf30c, 0xf200, 0xf30b, 0xf30a, 0xf30e,
++ 0xf702, 0xf703, 0xf01b, 0xf020, 0xf000, 0xf310, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf700,
++ 0xf114, 0xf117, 0xf118, 0xf119, 0xf701, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf702, 0xf200, 0xf200,
++ 0xf702, 0xf703, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++};
++
++u_short shift_ctrl_map[] = {
++ 0xf200, 0xf001, 0xf002, 0xf003, 0xf004, 0xf005, 0xf006, 0xf007,
++ 0xf008, 0xf009, 0xf00a, 0xf00b, 0xf00c, 0xf00d, 0xf00e, 0xf00f,
++ 0xf010, 0xf011, 0xf012, 0xf013, 0xf014, 0xf015, 0xf016, 0xf017,
++ 0xf018, 0xf019, 0xf01a, 0xf700, 0xf201, 0xf101, 0xf200, 0xf008,
++ 0xf208, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf201,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf702, 0xf703, 0xf702, 0xf02b, 0xfa00, 0xf040, 0xf03f, 0xf200,
++ 0xf200, 0xf009, 0xf104, 0xf105, 0xf106, 0xf200, 0xf200, 0xf301,
++ 0xf302, 0xf303, 0xf304, 0xf305, 0xf306, 0xf307, 0xf308, 0xf309,
++ 0xf300, 0xf07f, 0xf30d, 0xf30c, 0xf200, 0xf30b, 0xf30a, 0xf30e,
++ 0xf702, 0xf703, 0xf01b, 0xf020, 0xf020, 0xf310, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf700,
++ 0xf114, 0xf117, 0xf118, 0xf119, 0xf701, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf702, 0xf200, 0xf200,
++ 0xf702, 0xf703, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++};
++
++u_short alt_map[] = {
++ 0xf200, 0xf021, 0xf02d, 0xf863, 0xf023, 0xf033, 0xf024, 0xf025,
++ 0xf05f, 0xf038, 0xf026, 0xf02a, 0xf028, 0xf03d, 0xf02b, 0xf039,
++ 0xf030, 0xf031, 0xf034, 0xf040, 0xf035, 0xf037, 0xf876, 0xf032,
++ 0xf878, 0xf036, 0xf87a, 0xf700, 0xf201, 0xf101, 0xf200, 0xf07f,
++ 0xf208, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf07d,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf702, 0xf703, 0xf702, 0xf02b, 0xfa00, 0xf040, 0xf03f, 0xf029,
++ 0xf03c, 0xf207, 0xf104, 0xf105, 0xf106, 0xf200, 0xf07e, 0xf301,
++ 0xf302, 0xf303, 0xf304, 0xf305, 0xf306, 0xf307, 0xf308, 0xf309,
++ 0xf300, 0xf07f, 0xf30d, 0xf30c, 0xf200, 0xf30b, 0xf30a, 0xf30e,
++ 0xf702, 0xf703, 0xf01b, 0xf000, 0xf020, 0xf310, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf700,
++ 0xf114, 0xf117, 0xf118, 0xf119, 0xf701, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf702, 0xf200, 0xf200,
++ 0xf702, 0xf703, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++};
++
++ushort *key_maps[MAX_NR_KEYMAPS] = {
++ plain_map, shift_map, 0, 0,
++ ctrl_map, shift_ctrl_map, 0, 0,
++ alt_map, 0
++};
++
++unsigned int keymap_count = 5;
++
++
++/*
++ * Philosophy: most people do not define more strings, but they who do
++ * often want quite a lot of string space. So, we statically allocate
++ * the default and allocate dynamically in chunks of 512 bytes.
++ */
++
++char func_buf[] = {
++ '\033', '[', '[', 'A', 0,
++ '\033', '[', '[', 'B', 0,
++ '\033', '[', '[', 'C', 0,
++ '\033', '[', '[', 'D', 0,
++ '\033', '[', '[', 'E', 0,
++ '\033', '[', '1', '7', '~', 0,
++ '\033', '[', '1', '8', '~', 0,
++ '\033', '[', '1', '9', '~', 0,
++ '\033', '[', '2', '0', '~', 0,
++ '\033', '[', '2', '1', '~', 0,
++ '\033', '[', '2', '3', '~', 0,
++ '\033', '[', '2', '4', '~', 0,
++ '\033', '[', '2', '5', '~', 0,
++ '\033', '[', '2', '6', '~', 0,
++ '\033', '[', '2', '8', '~', 0,
++ '\033', '[', '2', '9', '~', 0,
++ '\033', '[', '3', '1', '~', 0,
++ '\033', '[', '3', '2', '~', 0,
++ '\033', '[', '3', '3', '~', 0,
++ '\033', '[', '3', '4', '~', 0,
++ '\033', '[', '1', '~', 0,
++ '\033', '[', '2', '~', 0,
++ '\033', '[', '3', '~', 0,
++ '\033', '[', '4', '~', 0,
++ '\033', '[', '5', '~', 0,
++ '\033', '[', '6', '~', 0,
++ '\033', '[', 'M', 0,
++ '\033', '[', 'P', 0,
++};
++
++
++char *funcbufptr = func_buf;
++int funcbufsize = sizeof(func_buf);
++int funcbufleft = 0; /* space left */
++
++char *func_table[MAX_NR_FUNC] = {
++ func_buf + 0,
++ func_buf + 5,
++ func_buf + 10,
++ func_buf + 15,
++ func_buf + 20,
++ func_buf + 25,
++ func_buf + 31,
++ func_buf + 37,
++ func_buf + 43,
++ func_buf + 49,
++ func_buf + 55,
++ func_buf + 61,
++ func_buf + 67,
++ func_buf + 73,
++ func_buf + 79,
++ func_buf + 85,
++ func_buf + 91,
++ func_buf + 97,
++ func_buf + 103,
++ func_buf + 109,
++ func_buf + 115,
++ func_buf + 120,
++ func_buf + 125,
++ func_buf + 130,
++ func_buf + 135,
++ func_buf + 140,
++ func_buf + 145,
++ 0,
++ 0,
++ func_buf + 149,
++ 0,
++};
++
++struct kbdiacr accent_table[MAX_DIACR] = {
++ {'`', 'A', '\300'}, {'`', 'a', '\340'},
++ {'\'', 'A', '\301'}, {'\'', 'a', '\341'},
++ {'^', 'A', '\302'}, {'^', 'a', '\342'},
++ {'~', 'A', '\303'}, {'~', 'a', '\343'},
++ {'"', 'A', '\304'}, {'"', 'a', '\344'},
++ {'O', 'A', '\305'}, {'o', 'a', '\345'},
++ {'0', 'A', '\305'}, {'0', 'a', '\345'},
++ {'A', 'A', '\305'}, {'a', 'a', '\345'},
++ {'A', 'E', '\306'}, {'a', 'e', '\346'},
++ {',', 'C', '\307'}, {',', 'c', '\347'},
++ {'`', 'E', '\310'}, {'`', 'e', '\350'},
++ {'\'', 'E', '\311'}, {'\'', 'e', '\351'},
++ {'^', 'E', '\312'}, {'^', 'e', '\352'},
++ {'"', 'E', '\313'}, {'"', 'e', '\353'},
++ {'`', 'I', '\314'}, {'`', 'i', '\354'},
++ {'\'', 'I', '\315'}, {'\'', 'i', '\355'},
++ {'^', 'I', '\316'}, {'^', 'i', '\356'},
++ {'"', 'I', '\317'}, {'"', 'i', '\357'},
++ {'-', 'D', '\320'}, {'-', 'd', '\360'},
++ {'~', 'N', '\321'}, {'~', 'n', '\361'},
++ {'`', 'O', '\322'}, {'`', 'o', '\362'},
++ {'\'', 'O', '\323'}, {'\'', 'o', '\363'},
++ {'^', 'O', '\324'}, {'^', 'o', '\364'},
++ {'~', 'O', '\325'}, {'~', 'o', '\365'},
++ {'"', 'O', '\326'}, {'"', 'o', '\366'},
++ {'/', 'O', '\330'}, {'/', 'o', '\370'},
++ {'`', 'U', '\331'}, {'`', 'u', '\371'},
++ {'\'', 'U', '\332'}, {'\'', 'u', '\372'},
++ {'^', 'U', '\333'}, {'^', 'u', '\373'},
++ {'"', 'U', '\334'}, {'"', 'u', '\374'},
++ {'\'', 'Y', '\335'}, {'\'', 'y', '\375'},
++ {'T', 'H', '\336'}, {'t', 'h', '\376'},
++ {'s', 's', '\337'}, {'"', 'y', '\377'},
++ {'s', 'z', '\337'}, {'i', 'j', '\377'},
++};
++
++unsigned int accent_table_size = 68;
+diff -Nur linux_c860_org/drivers/char/tosa_keymap.map linux/drivers/char/tosa_keymap.map
+--- linux_c860_org/drivers/char/tosa_keymap.map 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/char/tosa_keymap.map 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,277 @@
++# =======================================================
++# Iris-1 Default Kernel Keymap for Console Driver
++# =======================================================
++#
++# Default kernel keymap. This uses 7 modifier combinations.
++#
++# 0 for no modifier
++# 1 for [SHIFT]
++# 4 for [CTRL] , to symbol input for debug
++# 5 for [CTRL] [SHIFT] , to symbol input for debug
++# 8 for [ALT]
++#
++keymaps 0,1,4,5,8
++#
++# loadkeys --mktable iris_keymap.map
++#
++# !!!!!! CAUTION !!!!!!
++# This Keymap Defines Conversion to Console-Key from Soft-Keycode.
++# Soft-Keycode is created from Hard-Keycode , using iris_rawkey_conv.c
++#
++#
++keycode 1 = a
++ alt keycode 1 = exclam
++keycode 2 = b
++ alt keycode 2 = minus
++keycode 3 = c
++keycode 4 = d
++ alt keycode 4 = numbersign
++keycode 5 = e
++ alt keycode 5 = three
++keycode 6 = f
++ alt keycode 6 = dollar
++keycode 7 = g
++ alt keycode 7 = percent
++keycode 8 = h
++ alt keycode 8 = underscore
++keycode 9 = i
++ alt keycode 9 = eight
++keycode 10 = j
++ alt keycode 10 = ampersand
++keycode 11 = k
++ alt keycode 11 = asterisk
++keycode 12 = l
++ alt keycode 12 = parenleft
++keycode 13 = m
++ alt keycode 13 = equal
++keycode 14 = n
++ alt keycode 14 = plus
++keycode 15 = o
++ alt keycode 15 = nine
++keycode 16 = p
++ alt keycode 16 = zero
++keycode 17 = q
++ alt keycode 17 = one
++keycode 18 = r
++ alt keycode 18 = four
++keycode 19 = s
++ alt keycode 19 = at
++keycode 20 = t
++ alt keycode 20 = five
++keycode 21 = u
++ alt keycode 21 = seven
++keycode 22 = v
++keycode 23 = w
++ alt keycode 23 = two
++keycode 24 = x
++keycode 25 = y
++ alt keycode 25 = six
++keycode 26 = z
++keycode 27 = Shift
++keycode 28 = Return
++keycode 29 = F2
++keycode 30 = Alt Control
++keycode 31 = BackSpace
++ alt keycode 31 = Delete
++keycode 32 = Num_Lock
++keycode 33 =
++# (Cancel:34) F9 -> Escape
++keycode 34 = Escape
++keycode 35 = Left
++keycode 36 = Up
++keycode 37 = Down
++keycode 38 = Right
++# (OK:39) F4 -> Return
++keycode 39 = Return
++ alt keycode 39 = braceright
++keycode 40 =
++keycode 41 = one exclam
++keycode 42 = two quotedbl
++keycode 43 = three numbersign
++keycode 44 = four dollar
++keycode 45 = five percent
++keycode 46 = six ampersand
++keycode 47 = seven apostrophe
++keycode 48 = eight parenleft
++keycode 49 = nine parenright
++keycode 50 = zero asciitilde
++keycode 51 = minus equal
++keycode 52 = asciicircum asciitilde
++keycode 53 = backslash bar
++keycode 54 = bracketleft braceleft
++keycode 55 = at grave
++keycode 56 = Control
++keycode 57 = Alt
++keycode 58 = Control
++keycode 59 = plus
++keycode 60 = Shift_Lock
++keycode 61 = at
++keycode 62 = question
++keycode 63 = comma semicolon
++ alt keycode 63 = parenright
++keycode 64 = period colon
++ alt keycode 64 = less
++keycode 65 = Tab
++ alt keycode 65 = Caps_Lock
++keycode 66 = F5
++keycode 67 = F6
++keycode 68 = F7
++keycode 69 = slash question
++keycode 70 = apostrophe quotedbl
++ alt keycode 70 = asciitilde
++keycode 71 = KP_1
++keycode 72 = KP_2
++keycode 73 = KP_3
++keycode 74 = KP_4
++keycode 75 = KP_5
++keycode 76 = KP_6
++keycode 77 = KP_7
++keycode 78 = KP_8
++keycode 79 = KP_9
++keycode 80 = KP_0
++keycode 81 = Delete
++keycode 82 = KP_Divide
++keycode 83 = KP_Multiply
++keycode 84 =
++keycode 85 = KP_Subtract
++keycode 86 = KP_Add
++keycode 87 = KP_Enter
++# (Activity:88) -> Ctrl
++keycode 88 = Control
++# (Contacts:89) -> Alt
++keycode 89 = Alt
++keycode 90 = Escape
++# (select:91) F11 -> space
++keycode 91 = space
++ alt keycode 91 = nul
++keycode 92 = space
++ control keycode 92 = nul
++keycode 93 = KP_Period
++keycode 94 =
++keycode 95 = semicolon plus
++keycode 96 = colon asterisk
++keycode 97 = bracketright braceright
++keycode 98 = comma less
++keycode 99 = period greater
++keycode 100 = slash question
++keycode 101 = underscore underscore
++keycode 102 =
++keycode 103 = Shift
++keycode 104 = Find
++keycode 105 = Select
++keycode 106 = Prior
++ shift keycode 106 = Scroll_Backward
++keycode 107 = Next
++ shift keycode 107 = Scroll_Forward
++keycode 108 = AltGr
++keycode 109 =
++keycode 110 =
++keycode 111 =
++keycode 112 =
++keycode 113 =
++keycode 114 =
++keycode 115 =
++keycode 116 =
++keycode 117 = Control
++keycode 118 =
++keycode 119 =
++keycode 120 = Control
++keycode 121 = Alt
++
++
++string F1 = "\033[[A"
++string F2 = "\033[[B"
++string F3 = "\033[[C"
++string F4 = "\033[[D"
++string F5 = "\033[[E"
++string F6 = "\033[17~"
++string F7 = "\033[18~"
++string F8 = "\033[19~"
++string F9 = "\033[20~"
++string F10 = "\033[21~"
++string F11 = "\033[23~"
++string F12 = "\033[24~"
++string F13 = "\033[25~"
++string F14 = "\033[26~"
++string F15 = "\033[28~"
++string F16 = "\033[29~"
++string F17 = "\033[31~"
++string F18 = "\033[32~"
++string F19 = "\033[33~"
++string F20 = "\033[34~"
++string Find = "\033[1~"
++string Insert = "\033[2~"
++string Remove = "\033[3~"
++string Select = "\033[4~"
++string Prior = "\033[5~"
++string Next = "\033[6~"
++string Macro = "\033[M"
++string Pause = "\033[P"
++compose '`' 'A' to 'À'
++compose '`' 'a' to 'à'
++compose '\'' 'A' to 'Á'
++compose '\'' 'a' to 'á'
++compose '^' 'A' to 'Â'
++compose '^' 'a' to 'â'
++compose '~' 'A' to 'Ã'
++compose '~' 'a' to 'ã'
++compose '"' 'A' to 'Ä'
++compose '"' 'a' to 'ä'
++compose 'O' 'A' to 'Å'
++compose 'o' 'a' to 'å'
++compose '0' 'A' to 'Å'
++compose '0' 'a' to 'å'
++compose 'A' 'A' to 'Å'
++compose 'a' 'a' to 'å'
++compose 'A' 'E' to 'Æ'
++compose 'a' 'e' to 'æ'
++compose ',' 'C' to 'Ç'
++compose ',' 'c' to 'ç'
++compose '`' 'E' to 'È'
++compose '`' 'e' to 'è'
++compose '\'' 'E' to 'É'
++compose '\'' 'e' to 'é'
++compose '^' 'E' to 'Ê'
++compose '^' 'e' to 'ê'
++compose '"' 'E' to 'Ë'
++compose '"' 'e' to 'ë'
++compose '`' 'I' to 'Ì'
++compose '`' 'i' to 'ì'
++compose '\'' 'I' to 'Í'
++compose '\'' 'i' to 'í'
++compose '^' 'I' to 'Î'
++compose '^' 'i' to 'î'
++compose '"' 'I' to 'Ï'
++compose '"' 'i' to 'ï'
++compose '-' 'D' to 'Ð'
++compose '-' 'd' to 'ð'
++compose '~' 'N' to 'Ñ'
++compose '~' 'n' to 'ñ'
++compose '`' 'O' to 'Ò'
++compose '`' 'o' to 'ò'
++compose '\'' 'O' to 'Ó'
++compose '\'' 'o' to 'ó'
++compose '^' 'O' to 'Ô'
++compose '^' 'o' to 'ô'
++compose '~' 'O' to 'Õ'
++compose '~' 'o' to 'õ'
++compose '"' 'O' to 'Ö'
++compose '"' 'o' to 'ö'
++compose '/' 'O' to 'Ø'
++compose '/' 'o' to 'ø'
++compose '`' 'U' to 'Ù'
++compose '`' 'u' to 'ù'
++compose '\'' 'U' to 'Ú'
++compose '\'' 'u' to 'ú'
++compose '^' 'U' to 'Û'
++compose '^' 'u' to 'û'
++compose '"' 'U' to 'Ü'
++compose '"' 'u' to 'ü'
++compose '\'' 'Y' to 'Ý'
++compose '\'' 'y' to 'ý'
++compose 'T' 'H' to 'Þ'
++compose 't' 'h' to 'þ'
++compose 's' 's' to 'ß'
++compose '"' 'y' to 'ÿ'
++compose 's' 'z' to 'ß'
++compose 'i' 'j' to 'ÿ'
+diff -Nur linux_c860_org/drivers/char/tosa_logkey.c linux/drivers/char/tosa_logkey.c
+--- linux_c860_org/drivers/char/tosa_logkey.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/char/tosa_logkey.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,1617 @@
++/*
++ * linux/drivers/char/tosa_logkey.c
++ *
++ * (C) Copyright 2004 Lineo Solutions, Inc.
++ *
++ * Based on:
++ * linux/drivers/char/corgi_logkey.c
++ *
++ * Based on:
++ * linux/drivers/char/poodle_logkey.c
++ * linux/drivers/char/collie_logkey.c
++ * linux/drivers/char/sharp_logkey.c
++ *
++ * Logical GPIO Keyboard driver includeing
++ * Hard-Key to Soft-Key Mapper for SHARP PDA
++ *
++ * Copyright (C) 2001 SHARP
++ *
++ * 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.
++ *
++ * ChangeLog:
++ * 04-16-2001 Lineo Japan, Inc.
++ * 30-Jul-2002 Lineo Japan, Inc. for 2.4.18
++ * 12-Dec-2002 Sharp Corporation
++ */
++#include <linux/config.h>
++#include <linux/init.h>
++#include <linux/poll.h>
++#include <linux/wait.h>
++#include <asm/arch/keyboard_tosa.h>
++#include <asm/uaccess.h>
++#include <linux/tqueue.h>
++#include <linux/kbd_ll.h>
++#include <linux/slab.h>
++//#include <linux/spinlock.h>
++#include <linux/delay.h>
++
++#define DEBUGPRINT(s) /* printk s */
++#define CUS_DPRINTK(x, args...) /* printk(__FUNCTION__ ": " x,##args) */
++
++#ifdef LOGICAL_WAKEUP_SRC
++#include <asm/arch/sharpsl_wakeup.h>
++#endif
++#define KEYMASK_ON (0x1<<0)
++#define KEYMASK_REC (0x1<<1)
++#define KEYMASK_SYNC (0x1<<2)
++#define KEYMASK_ADDRESS (0x1<<3)
++#define KEYMASK_CALENDAR (0x1<<4)
++#define KEYMASK_MENU (0x1<<5)
++#define KEYMASK_MAIL (0x1<<6)
++
++#ifndef USE_KBD_IRQ
++# warning "this is not tested."
++#endif
++
++#ifdef USE_KBD_IRQ // could be defined in asm/arch/keyboard.h
++# include <asm/irq.h> /* for linkup keyboard interrupt */
++#endif
++
++/*
++ * physical driver definition
++ */
++# define WAIT_CHATTERING_DELAY udelay(100)
++extern void tosa_kbd_discharge_all(void);
++extern void tosa_kbd_charge_all(void);
++extern void tosa_kbd_activate_col(int col);
++extern void tosa_kbd_reset_col(int col);
++extern void tosa_kbd_activate_all(void);
++# define DISCHARGE_ALL tosa_kbd_discharge_all()
++# define CHARGE_ALL tosa_kbd_charge_all()
++# define WAIT_DISCHARGE_DELAY udelay(KB_DISCHARGE_DELAY)
++# define ACTIVATE_COL(c) tosa_kbd_activate_col((c))
++# define RESET_COL(c) tosa_kbd_reset_col((c))
++# define WAIT_ACTIVATE_DELAY udelay(KB_ACTIVATE_DELAY)
++# define GET_ROWS_STATUS(c) ((GPLR2 & GPIO_ALL_SENSE_BIT) >> GPIO_ALL_SENSE_RSHIFT)
++# define DRIVE_ALL_COLS tosa_kbd_activate_all()
++# define GET_REAL_COL_FROM_COL(c) (c)
++# define RAW_MAP "tosa_rawmap.h"
++# define RAW_MAP_ROLLOVER "tosa_rawmap_rollover.h"
++
++
++static int isBrb = 0;
++static int checkBrb(void)
++{
++ int rowd;
++
++ DISCHARGE_ALL;
++ WAIT_DISCHARGE_DELAY;
++
++ rowd = GET_ROWS_STATUS(1);
++ if (rowd!=0) return 1;
++ else return 0;
++}
++
++
++#if ! defined(KB_COLS) || ! defined(KB_ROWS)
++#error "KB_COLS or KB_ROWS not defined"
++#endif
++
++/*
++ * keyboard scancode mapper.
++ */
++#include <asm/sharp_keycode.h>
++
++#define CHECK_ROLLOVER 1
++
++#define CHECK_CHUTTER_BOUNCE 1
++
++/*
++ sharppda_kbdstate.in - state
++ 0 - not pressed
++ PRESSING1 - pressing (check chutter)
++ : - pressing (check chutter)
++ CHECK_CHUTTER - pressing (check chutter)
++ JUST_PRESSED - just pressed (throw key down)
++ PRESSED - pressed
++ RELEASING1 - releasing (check bounce)
++ : - releasing (check bounce)
++ PRESSED + CHECK_BOUNCE - releasing (check bounce)
++ JUST_RELEASED - just released (throw key up)
++*/
++#define CHECK_CHUTTER (2) /* * 10ms */
++#define CHECK_BOUNCE (4) /* * 10ms */
++#define NOTPRESSED (0)
++#define PRESSING1 (1)
++#define JUST_PRESSED (CHECK_CHUTTER+1)
++#define PRESSED (CHECK_CHUTTER+2)
++#define RELEASING1 (CHECK_CHUTTER+3)
++#define JUST_RELEASED (CHECK_CHUTTER+CHECK_BOUNCE+3)
++#define ROLLOVERERROR (CHECK_CHUTTER+CHECK_BOUNCE+4)
++#define IS_PRESSING(a) (((a) >= PRESSING1) && ((a) <= CHECK_CHUTTER))
++#define IS_RELEASING(a) (((a) >= RELEASING1) && ((a) <= PRESSED + CHECK_BOUNCE))
++#define CHUTTER_BOUNCE_LOG 0
++
++#include RAW_MAP
++#if CHECK_ROLLOVER
++#include RAW_MAP_ROLLOVER
++#endif
++
++/*
++ * This is the mapper for Hard-Key to Soft-Key conversion
++ */
++
++int sharp_cur_keycode[(NR_KEYCODES+1)];
++int sharp_cur_status;
++int tosa_initial_keypress = -1;
++
++kbd_keyinfo sharppda_kbdstate[(NR_KEYCODES+1)]; /* this map is expoted... */
++
++static int keysdown = 0;
++static struct tq_struct kbdhw_task;
++
++/*
++ * for panel-touch sound
++ */
++extern void sharpbuz_make_keytouch_sound(void);
++extern void sharpkbdctl_stat_changed(void);
++
++/*
++ * Keyboard mapping routine.
++ */
++
++int keypress_map(int hardkey)
++{
++ int softkey;
++ unsigned char* pmodmap;
++ int modif_ref = DOWN_NOP;
++ int next_status = sharp_cur_status;
++
++ /* ======== get soft keycode ========= */
++ pmodmap = state_to_keymap[sharp_cur_status];
++ softkey = pmodmap[hardkey];
++ sharp_cur_keycode[hardkey] = softkey;
++
++ /* ======== check automaton-map ======== */
++ modif_ref = down_modifs_ref[hardkey];
++ if( modif_ref != DOWN_NOP && modif_ref < DOWN_TABLES_SIZE ){
++ /* ======== need to check state machine ========= */
++ unsigned char* statemap;
++ statemap = down_tables[modif_ref];
++ next_status = statemap[sharp_cur_status];
++ }
++
++ if( sharp_cur_status != next_status ){
++ sharp_cur_status = next_status;
++ sharpkbdctl_stat_changed();
++ }else{
++ sharp_cur_status = next_status;
++ }
++ return softkey;
++}
++
++int keyrelease_map(int hardkey)
++{
++ int softkey;
++ int modif_ref = UP_NOP;
++ int next_status = sharp_cur_status;
++
++ /* ======== get soft keycode ========= */
++ softkey = sharp_cur_keycode[hardkey];
++ sharp_cur_keycode[hardkey] = KEY_IGN;
++
++ /* ======== check automaton-map ======== */
++ modif_ref = up_modifs_ref[hardkey];
++ if( modif_ref != UP_NOP && modif_ref < UP_TABLES_SIZE ){
++ /* ======== need to check state machine ========= */
++ unsigned char* statemap;
++ statemap = up_tables[modif_ref];
++ next_status = statemap[sharp_cur_status];
++ }
++
++ if( sharp_cur_status != next_status ){
++ sharp_cur_status = next_status;
++ sharpkbdctl_stat_changed();
++ }else{
++ sharp_cur_status = next_status;
++ }
++ return softkey;
++}
++
++/*
++ * Keyboard Repeat , including key-mapping
++ */
++#include <linux/kd.h>
++
++int (*mach_kbdrate) (struct kbd_repeat *);
++
++
++#define DEFAULT_KEYB_REP_DELAY (HZ*2)
++#define DEFAULT_KEYB_REP_RATE (HZ)
++
++static void sharppda_kbd_rep( unsigned long ignore );
++static unsigned char rep_scancode = 0;
++static unsigned int key_repeat_delay = DEFAULT_KEYB_REP_DELAY;
++static unsigned int key_repeat_rate = DEFAULT_KEYB_REP_RATE;
++
++static struct timer_list sharppda_kbd_rep_timer = { function: sharppda_kbd_rep };
++
++static void sharppda_kbd_rep( unsigned long ignore )
++{
++ unsigned long flags;
++ /* Disable keyboard for the time we call handle_scancode(), else a race
++ * in the keyboard tty queue may happen */
++ //DEBUGPRINT(("?"));
++ save_flags(flags); cli();
++ del_timer( &sharppda_kbd_rep_timer );
++ /* A keyboard int may have come in before we disabled the irq, so
++ * double-check whether rep_scancode is still != 0 */
++ if (rep_scancode) {
++ init_timer(&sharppda_kbd_rep_timer);
++ sharppda_kbd_rep_timer.expires = jiffies + key_repeat_rate;
++ add_timer( &sharppda_kbd_rep_timer );
++ DEBUGPRINT(("kbdrep_down %d (%x)\n",rep_scancode,rep_scancode));
++ }
++ restore_flags(flags);
++ //DEBUGPRINT(("!"));
++}
++
++static int sharppda_kbd_kbdrate( struct kbd_repeat *k )
++{
++ DEBUGPRINT(("sharppda_kbd_kbdrate\n"));
++ if (k->delay > 0) {
++ /* convert from msec to jiffies */
++ key_repeat_delay = (k->delay * HZ + 500) / 1000;
++ if (key_repeat_delay < 1)
++ key_repeat_delay = 1;
++ }
++ if (k->rate > 0) {
++ key_repeat_rate = (k->rate * HZ + 500) / 1000;
++ if (key_repeat_rate < 1)
++ key_repeat_rate = 1;
++ }
++ k->delay = key_repeat_delay * 1000 / HZ;
++ k->rate = key_repeat_rate * 1000 / HZ;
++ return( 0 );
++}
++
++/*
++ * Keyboard Press/Release function , including key-mapping , for HOLD-modified Key
++ */
++
++static unsigned long key_hold_delay = 120 * HZ / 100;
++
++static unsigned char holdkey_pending = 0;
++static int holdkey_pendinghardkey = 0;
++static int holdkey_pendingmappedkey = 0;
++static void sharppda_kbd_hold( unsigned long ignore );
++static struct timer_list sharppda_kbd_hold_timer = { function: sharppda_kbd_hold };
++
++static shappda_holdkey_info **custom_holdkey_info = NULL;
++
++#if CHECK_ROLLOVER
++// rollover_state
++// 0 .. not detected roll over error in previous key scan
++// 1 .. detected roll over error in previous key scan
++static int rollover_state = 0;
++
++static unsigned char rep_hardkey = 0;
++#endif
++
++static void sharppda_kbd_hold( unsigned long ignore )
++{
++ int hold_keycode;
++ unsigned long flags;
++ shappda_holdkey_info *hold_infop = NULL;
++ save_flags(flags); cli();
++ del_timer(&sharppda_kbd_hold_timer);
++ DEBUGPRINT(("sharppda_kbd_hold\n"));
++ CUS_DPRINTK("enter\n");
++ if( holdkey_pending && holdkey_info ){
++ CUS_DPRINTK("pending exists\n");
++ if( holdkey_pendinghardkey ){
++ CUS_DPRINTK("holdkey_pendinghardkey\n");
++ hold_infop = holdkey_info[holdkey_pendinghardkey];
++ if( custom_holdkey_info ){ /* use Customozed HoldKey */
++ CUS_DPRINTK("customized holdkey\n");
++ hold_infop = custom_holdkey_info[holdkey_pendinghardkey];
++ }
++ if( ! hold_infop ){
++ DEBUGPRINT(("NO VALID INFO found for %x\n",holdkey_pendinghardkey));
++ }else if( hold_infop->type == HOLDKEYTYPE_CHAR ){
++ DEBUGPRINT(("HOLD eventtype is HOLDKEYTYPE_CHAR for %x\n",holdkey_pendinghardkey));
++ hold_keycode = hold_infop->character;
++ DEBUGPRINT(("Pending Key Exists for Hard-Key %x.\n",holdkey_pendinghardkey));
++ DEBUGPRINT(("Current Keycode is %x , %x\n",
++ holdkey_pendingmappedkey,sharp_cur_keycode[holdkey_pendinghardkey]));
++ DEBUGPRINT(("Changing to HOLD-KEY %x\n",hold_keycode));
++ sharp_cur_keycode[holdkey_pendinghardkey] = hold_keycode;
++ DEBUGPRINT(("kbdhold %d (%x)\n",KBSCANCDE(hold_keycode,KBDOWN),KBSCANCDE(hold_keycode,KBDOWN)));
++ handle_scancode(KBSCANCDE(hold_keycode,KBDOWN), 1);
++ del_timer(&sharppda_kbd_rep_timer);
++ init_timer(&sharppda_kbd_rep_timer);
++ sharppda_kbd_rep_timer.expires = jiffies + key_repeat_delay;
++/* 2001.09.05 Nami. delete hold-key repeat */
++/* delete hold-key repeat on Iris , too. */
++ rep_scancode = KBSCANCDE(hold_keycode,KBDOWN);
++#if CHECK_ROLLOVER
++ rep_hardkey = holdkey_pendinghardkey;
++#endif
++ }else if( hold_infop->type == HOLDKEYTYPE_FUNC ){
++ DEBUGPRINT(("HOLD eventtype is HOLDKEYTYPE_FUNC for %x\n",holdkey_pendinghardkey));
++ if( hold_infop->func ){
++ DEBUGPRINT(("Executing FUNC\n"));
++ (*(hold_infop->func))();
++ }
++ }else{
++ DEBUGPRINT(("NO VALID TYPE found for %x\n",holdkey_pendinghardkey));
++ }
++ }
++ }
++ holdkey_pending = 0;
++ holdkey_pendinghardkey = 0;
++ holdkey_pendingmappedkey = 0;
++ DEBUGPRINT(("Pending Key Released.\n"));
++ restore_flags(flags);
++}
++
++
++
++/*
++ * Keyboard Press/Release function , including key-mapping
++ */
++
++void sharppda_kbd_press(int keycode)
++{
++ unsigned long flags;
++ unsigned char newpress = 0;
++ int keycode_mapped = keycode;
++
++// printk("kbd_press=%d\n",keycode);
++
++ spin_lock_irqsave(&kbd_spinlock,flags);
++#if CHECK_CHUTTER_BOUNCE
++ if (IS_RELEASING(sharppda_kbdstate[keycode].in)) {
++ // detected bounce ?
++ sharppda_kbdstate[keycode].in = PRESSED;
++#if CHUTTER_BOUNCE_LOG
++ printk("BOUNCE? keycode %d state %d\n", keycode, sharppda_kbdstate[keycode].in);
++#endif
++ }
++ else if (IS_PRESSING(sharppda_kbdstate[keycode].in) ||
++ (sharppda_kbdstate[keycode].in == NOTPRESSED)) {
++ // pressing
++ sharppda_kbdstate[keycode].in++;
++#if CHUTTER_BOUNCE_LOG
++ printk("PRESSING keycode %d state %d\n", keycode, sharppda_kbdstate[keycode].in);
++#endif
++ }
++ if (sharppda_kbdstate[keycode].in == JUST_PRESSED) {
++ keysdown++;
++ newpress = 1;
++ sharppda_kbdstate[keycode].in = PRESSED;
++#if CHUTTER_BOUNCE_LOG
++ printk("JUST_PRESSED keycode %d state %d\n", keycode, sharppda_kbdstate[keycode].in);
++#endif
++ }
++#else
++ if (!sharppda_kbdstate[keycode].in) {
++ keysdown++;
++ newpress = 1;
++#if CHECK_ROLLOVER
++ sharppda_kbdstate[keycode].in=1;
++#endif
++ }
++#endif
++
++ /*
++ * We approximate a retriggable monostable
++ * action.
++ */
++
++#if !CHECK_ROLLOVER
++ sharppda_kbdstate[keycode].in=1;
++#endif
++ spin_unlock_irqrestore(&kbd_spinlock,flags);
++
++ /* We only need to ensure keysdown consistent */
++
++ /* Map Keycode */
++ if( newpress ){
++ keycode_mapped = keypress_map(keycode);
++ }
++
++ /* put into upper layer */
++ if (newpress){
++ shappda_holdkey_info **use_holdkey_info;
++ use_holdkey_info = holdkey_info;
++ if( custom_holdkey_info ){
++ CUS_DPRINTK("customized holdkey\n");
++ use_holdkey_info = custom_holdkey_info;
++ }
++ if( use_holdkey_info && use_holdkey_info[keycode] ){
++ CUS_DPRINTK("keycode found\n");
++ if( ! holdkey_pending ){
++ DEBUGPRINT(("HOLD keyinfo found for %x. mapped=%x\n",keycode,keycode_mapped));
++ holdkey_pendinghardkey = keycode;
++ holdkey_pendingmappedkey = keycode_mapped;
++ holdkey_pending = 1;
++ del_timer(&sharppda_kbd_hold_timer);
++ init_timer(&sharppda_kbd_hold_timer);
++#ifdef HOLDKEY_INFO_HAS_TIMEOUT
++ if( use_holdkey_info[keycode]->timeout )
++ {
++ unsigned long diff = use_holdkey_info[keycode]->timeout * HZ / 1000;
++ CUS_DPRINTK("has timeout %d\n",use_holdkey_info[keycode]->timeout);
++ sharppda_kbd_hold_timer.expires = jiffies + diff;
++ }
++ else{ /* set default value */
++ CUS_DPRINTK("default timeout\n");
++ sharppda_kbd_hold_timer.expires = jiffies + key_hold_delay;
++ }
++#else
++ sharppda_kbd_hold_timer.expires = jiffies + key_hold_delay;
++#endif
++ add_timer( &sharppda_kbd_hold_timer );
++ DEBUGPRINT(("holding...\n"));
++ return;
++ }else{
++ DEBUGPRINT(("HOLD keyinfo found for %d but already pending...\n",keycode));
++ }
++ }
++ DEBUGPRINT(("kbdpress %d (%x)\n",KBSCANCDE(keycode_mapped,KBDOWN),KBSCANCDE(keycode_mapped,KBDOWN)));
++ handle_scancode(KBSCANCDE(keycode_mapped,KBDOWN), 1);
++ // printk("handle_scankey=%x\n",KBSCANCDE(keycode_mapped,KBDOWN));
++ del_timer(&sharppda_kbd_rep_timer);
++ init_timer(&sharppda_kbd_rep_timer);
++ sharppda_kbd_rep_timer.expires = jiffies + key_repeat_delay;
++ add_timer( &sharppda_kbd_rep_timer );
++ rep_scancode = KBSCANCDE(keycode_mapped,KBDOWN);
++#if CHECK_ROLLOVER
++ rep_hardkey = keycode;
++#endif
++ }
++}
++
++#if CHECK_ROLLOVER
++void sharppda_kbd_press_rollover(int keycode)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&kbd_spinlock,flags);
++#if CHECK_CHUTTER_BOUNCE
++ if (sharppda_kbdstate[keycode].in == NOTPRESSED) {
++ keysdown++;
++ sharppda_kbdstate[keycode].in=ROLLOVERERROR;
++#if CHUTTER_BOUNCE_LOG
++ printk("ROLLOVERERROR keycode %d state %d\n", keycode, sharppda_kbdstate[keycode].in);
++#endif
++ }
++#else
++ if (!sharppda_kbdstate[keycode].in) {
++ keysdown++;
++ sharppda_kbdstate[keycode].in=2;
++ }
++#endif
++ // key is down but not handle_scancode()
++ spin_unlock_irqrestore(&kbd_spinlock,flags);
++}
++
++void sharppda_kbd_press_force_rollover(int keycode)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&kbd_spinlock,flags);
++#if CHECK_CHUTTER_BOUNCE
++ if ((sharppda_kbdstate[keycode].in != PRESSED) &&
++ (sharppda_kbdstate[keycode].in != ROLLOVERERROR)) {
++ keysdown++;
++ }
++ sharppda_kbdstate[keycode].in=ROLLOVERERROR;
++#if CHUTTER_BOUNCE_LOG
++ printk("force ROLLOVERERROR keycode %d state %d\n", keycode, sharppda_kbdstate[keycode].in);
++#endif
++#else
++ if (!sharppda_kbdstate[keycode].in) {
++ keysdown++;
++ }
++ sharppda_kbdstate[keycode].in=2;
++#endif
++ // key is down but not handle_scancode()
++ spin_unlock_irqrestore(&kbd_spinlock,flags);
++}
++#endif
++
++void sharppda_kbd_release(int keycode)
++{
++ unsigned long flags;
++ unsigned char newrelease = 0;
++ int keycode_mapped = keycode;
++
++//printk("kbd_release=%d\n",keycode);
++ spin_lock_irqsave(&kbd_spinlock,flags);
++#if CHECK_CHUTTER_BOUNCE
++ if (IS_PRESSING(sharppda_kbdstate[keycode].in)) {
++ // detected chutter ?
++ sharppda_kbdstate[keycode].in = NOTPRESSED;
++#if CHUTTER_BOUNCE_LOG
++ printk("CHUTTER? keycode %d state %d\n", keycode, sharppda_kbdstate[keycode].in);
++#endif
++ }
++ else if (IS_RELEASING(sharppda_kbdstate[keycode].in) ||
++ (sharppda_kbdstate[keycode].in == PRESSED)) {
++ // releasing
++ sharppda_kbdstate[keycode].in++;
++#if CHUTTER_BOUNCE_LOG
++ printk("RELEASING keycode %d state %d\n", keycode, sharppda_kbdstate[keycode].in);
++#endif
++ }
++ else if (sharppda_kbdstate[keycode].in == ROLLOVERERROR) {
++ keysdown--;
++ sharppda_kbdstate[keycode].in = NOTPRESSED;
++#if CHUTTER_BOUNCE_LOG
++ printk("was ROLLOVERERROR keycode %d state %d\n", keycode, sharppda_kbdstate[keycode].in);
++#endif
++ }
++ if (sharppda_kbdstate[keycode].in == JUST_RELEASED) {
++ keysdown--;
++ newrelease = 1;
++ sharppda_kbdstate[keycode].in = NOTPRESSED;
++#if CHUTTER_BOUNCE_LOG
++ printk("JUST_RELEASED keycode %d state %d\n", keycode, sharppda_kbdstate[keycode].in);
++#endif
++ }
++#else
++ if (sharppda_kbdstate[keycode].in) {
++ keysdown--;
++#if CHECK_ROLLOVER
++ if (sharppda_kbdstate[keycode].in==1) {
++#endif
++ newrelease = 1;
++#if CHECK_ROLLOVER
++ }
++#endif
++ }
++#endif
++
++#if !CHECK_CHUTTER_BOUNCE
++ sharppda_kbdstate[keycode].in=0;
++#endif
++ spin_unlock_irqrestore(&kbd_spinlock,flags);
++
++ /* We only need to ensure keysdown consistent */
++
++
++ /* Map Keycode */
++ if( newrelease ){
++ keycode_mapped = keyrelease_map(keycode);
++ }
++
++ if (newrelease){
++ if( holdkey_pending ){
++ DEBUGPRINT(("HOLD pending.\n"));
++ if( holdkey_pendinghardkey == keycode ){
++ DEBUGPRINT(("HOLDed key is same as pending-key. %x\n",keycode));
++ DEBUGPRINT(("Current MappedKey is %x.\n",holdkey_pendingmappedkey));
++ DEBUGPRINT(("kbdrel hold %d (%x)\n",KBSCANCDE(holdkey_pendingmappedkey,KBDOWN),KBSCANCDE(holdkey_pendingmappedkey,KBDOWN)));
++ handle_scancode(KBSCANCDE(holdkey_pendingmappedkey,KBDOWN), 1);
++ del_timer(&sharppda_kbd_hold_timer);
++ holdkey_pending = 0;
++ holdkey_pendinghardkey = 0;
++ holdkey_pendingmappedkey = 0;
++ DEBUGPRINT(("HOLDed key is released.\n"));
++ }
++ }
++ DEBUGPRINT(("kbdrel nom %d (%x)\n",KBSCANCDE(keycode_mapped,KBUP),KBSCANCDE(keycode_mapped,KBUP)));
++ handle_scancode(KBSCANCDE(keycode_mapped,KBUP), 0);
++ // printk("handle_scankey=%x\n",KBSCANCDE(keycode_mapped,KBUP));
++ if( rep_scancode == KBSCANCDE(keycode_mapped,KBDOWN) ){
++ rep_scancode = 0;
++#if CHECK_ROLLOVER
++ rep_hardkey = 0;
++#endif
++ //DEBUGPRINT(("%%"));
++ del_timer( &sharppda_kbd_rep_timer );
++ }
++ }
++
++}
++
++/*
++ * Keyboard Scan routine , using GPIO
++ */
++
++
++#if CHECK_ROLLOVER
++#define MAX_KEY_PRESS (6)
++#endif
++
++static void port_key_delay_proc( unsigned long port_key );
++#define PORT_KEY_NUM 3
++#define IDPORT_ON 0
++#define IDPORT_REC 1
++#define IDPORT_SYNC 2
++static int port_key_setting[PORT_KEY_NUM] = { 30, 90, 5 }; // -1:disable, 0~: x10ms wait for detect
++static int port_key_delay_state[PORT_KEY_NUM] = {NOTPRESSED,NOTPRESSED,NOTPRESSED};
++static struct timer_list port_key_delay_timer = { function: port_key_delay_proc };
++static int port_key_pending = 0;
++
++static void reset_port_key_delay(void)
++{
++ int i;
++ del_timer(&port_key_delay_timer);
++ for (i=0; i<PORT_KEY_NUM; i++) port_key_delay_state[i]=NOTPRESSED;
++ port_key_pending = 0;
++}
++
++// num = 0:On key, 1:Rec key, 2:Sync key
++// val = -1:disable, 0~: x10ms wait for detect
++int set_port_key_setting( int num, int val )
++{
++ if (num<0 || num>=PORT_KEY_NUM) return -1;
++ port_key_setting[num] = val;
++ port_key_delay_state[num] = NOTPRESSED;
++ port_key_pending = 0;
++ return 0;
++}
++int get_port_key_setting( int num )
++{
++ if (num<0 || num>=PORT_KEY_NUM) return -1;
++ return port_key_setting[num];
++}
++
++static int read_port_key_status_raw(void)
++{
++ int val=0;
++ // Power
++ if ((GPLR0 & GPIO_bit(GPIO_ON_KEY))==0) val |= KEYMASK_ON;
++ // Record
++ if ((GPLR0 & GPIO_bit(GPIO_RECORD_BTN))==0) val |= KEYMASK_REC;
++ // Sync
++ if ((GPLR0 & GPIO_bit(GPIO_SYNC))==0) val |= KEYMASK_SYNC;
++ return val;
++}
++
++static void port_key_delay_proc( unsigned long port_key )
++{
++ int val=read_port_key_status_raw();
++
++ switch( port_key ) {
++ case IDPORT_ON:
++ if (port_key_delay_state[IDPORT_ON]!=PRESSING1 || (val&KEYMASK_ON) ) {
++ port_key_delay_state[IDPORT_ON] = PRESSED;
++ } else {
++ port_key_delay_state[IDPORT_ON] = NOTPRESSED;
++ }
++ break;
++ case IDPORT_REC:
++ if (port_key_delay_state[IDPORT_REC]!=PRESSING1 || (val&KEYMASK_REC) ) {
++ port_key_delay_state[IDPORT_REC] = PRESSED;
++ } else {
++ port_key_delay_state[IDPORT_REC] = NOTPRESSED;
++ }
++ break;
++ case IDPORT_SYNC:
++ if (port_key_delay_state[IDPORT_SYNC]!=PRESSING1 || (val&KEYMASK_SYNC) ) {
++ port_key_delay_state[IDPORT_SYNC] = PRESSED;
++ } else {
++ port_key_delay_state[IDPORT_SYNC] = NOTPRESSED;
++ }
++ break;
++ }
++ port_key_pending = 0;
++}
++
++static int read_port_key_status(void)
++{
++ int ret=0,val=read_port_key_status_raw();
++
++ // Power
++ if (val & KEYMASK_ON) { // press
++ if (port_key_setting[IDPORT_ON]==0) { // normal key
++ ret |= KEYMASK_ON;
++ } else if (port_key_setting[IDPORT_ON]>0) { // delay key
++ if (port_key_delay_state[IDPORT_ON]==PRESSED) { // already detected
++ ret |= KEYMASK_ON;
++ } else if (port_key_delay_state[IDPORT_ON]==NOTPRESSED) { // start timer
++ reset_port_key_delay();
++ port_key_delay_state[IDPORT_ON]=PRESSING1;
++ init_timer(&port_key_delay_timer);
++ port_key_delay_timer.expires = jiffies + port_key_setting[IDPORT_ON];
++ port_key_delay_timer.data = IDPORT_ON;
++ add_timer(&port_key_delay_timer);
++ port_key_pending = 1;
++ return ret; // ignore following key
++ }
++ }
++ } else { // release
++ if (port_key_delay_state[IDPORT_ON]!=NOTPRESSED && port_key_setting[IDPORT_ON]>0) {
++ del_timer(&port_key_delay_timer);
++ port_key_pending = 0;
++ port_key_delay_state[IDPORT_ON]=NOTPRESSED;
++ }
++ }
++
++
++ // Record
++ if (val & KEYMASK_REC) { // press
++ if (port_key_setting[IDPORT_REC]==0) { // normal key
++ ret |= KEYMASK_REC;
++ } else if (port_key_setting[IDPORT_REC]>0) { // delay key
++ if (port_key_delay_state[IDPORT_REC]==PRESSED) { // already detected
++ ret |= KEYMASK_REC;
++ } else if (port_key_delay_state[IDPORT_REC]==NOTPRESSED) { // start timer
++ reset_port_key_delay();
++ port_key_delay_state[IDPORT_REC]=PRESSING1;
++ init_timer(&port_key_delay_timer);
++ port_key_delay_timer.expires = jiffies + port_key_setting[IDPORT_REC];
++ port_key_delay_timer.data = IDPORT_REC;
++ add_timer(&port_key_delay_timer);
++ port_key_pending = 1;
++ return ret; // ignore following key
++ }
++ }
++ } else { // release
++ if (port_key_delay_state[IDPORT_REC]!=NOTPRESSED && port_key_setting[IDPORT_REC]>0) {
++ del_timer(&port_key_delay_timer);
++ port_key_pending = 0;
++ port_key_delay_state[IDPORT_REC]=NOTPRESSED;
++ }
++ }
++
++ // Sync
++ if (val & KEYMASK_SYNC) { // press
++ if (port_key_setting[IDPORT_SYNC]==0) { // normal key
++ ret |= KEYMASK_SYNC;
++ } else if (port_key_setting[IDPORT_SYNC]>0) { // delay key
++ if (port_key_delay_state[IDPORT_SYNC]==PRESSED) { // already detected
++ ret |= KEYMASK_SYNC;
++ } else if (port_key_delay_state[IDPORT_SYNC]==NOTPRESSED) { // start timer
++ reset_port_key_delay();
++ port_key_delay_state[IDPORT_SYNC]=PRESSING1;
++ init_timer(&port_key_delay_timer);
++ port_key_delay_timer.expires = jiffies + port_key_setting[IDPORT_SYNC];
++ port_key_delay_timer.data = IDPORT_SYNC;
++ add_timer(&port_key_delay_timer);
++ port_key_pending = 1;
++ return ret; // ignore following key
++ }
++ }
++ } else { // release
++ if (port_key_delay_state[IDPORT_SYNC]!=NOTPRESSED && port_key_setting[IDPORT_SYNC]>0) {
++ del_timer(&port_key_delay_timer);
++ port_key_pending = 0;
++ port_key_delay_state[IDPORT_SYNC]=NOTPRESSED;
++ }
++ }
++
++ return ret;
++}
++
++void sharppda_scan_key_gpio(void* dummy)
++{
++ int col,row;
++ int rowd;
++ unsigned long flags;
++ int real_col;
++ int count = 0;
++#if CHECK_ROLLOVER
++ int pressed_key[MAX_KEY_PRESS + 1];
++ int i, rollover_count = 0, rollover_error = 0;
++ unsigned long rollover_flag = 0;
++#endif
++#if CHECK_CHUTTER
++ int loop;
++#endif
++
++ WAIT_CHATTERING_DELAY;
++
++ spin_lock_irqsave(&kbd_spinlock,flags);
++
++ CHARGE_ALL;
++
++ for(col=0;col<KB_COLS+1;col++){
++ real_col = GET_REAL_COL_FROM_COL(col);
++ /*
++ * Discharge the output driver capacitatance
++ * in the keyboard matrix. (Yes it is significant..)
++ */
++ if (real_col<KB_COLS) { // matrix key
++ DISCHARGE_ALL;
++ WAIT_DISCHARGE_DELAY;
++ ACTIVATE_COL(real_col);
++
++ WAIT_ACTIVATE_DELAY;
++ rowd = GET_ROWS_STATUS(real_col);
++
++#if 1 // for BRB
++ if (isBrb) {
++ rowd &= 0x0000000f;
++ }
++#endif
++ } else { // GPIO port key
++ rowd = read_port_key_status();
++ }
++ for( row = 0 ; row < KB_ROWS ; row++ ){
++
++ if( rowd & KB_ROWMASK(row) ){
++#if CHECK_ROLLOVER
++ if ((rawkeytable_table_NormalLower[KEYCODE(row, col)] != KEY_IGN)) {
++ pressed_key[count] = KEYCODE(row, col);
++ rollover_flag |= rollover_flag_table[KEYCODE(row, col)];
++ if (count < MAX_KEY_PRESS) {
++ count++;
++ }
++ else {
++ sharppda_kbd_press_rollover(KEYCODE(row,col));
++ }
++ }
++#else
++ sharppda_kbd_press(KEYCODE(row,col));
++ count++;
++#endif
++ }
++ else{
++ if( sharppda_kbdstate[KEYCODE(row, col)].in ){
++ sharppda_kbd_release(KEYCODE(row,col));
++ }
++ }
++ }
++ if (real_col<KB_COLS) {
++ RESET_COL(real_col);
++ }
++ } /* end of for */
++
++#if CHECK_ROLLOVER
++ if (count >= MAX_KEY_PRESS) {
++ rollover_error = 1;
++ }
++ else {
++ rollover_count = count;
++ if (ROLLOVER_CHECK_FLAG(rollover_flag, ROLLOVER_LSHIFT)) {
++ rollover_count--;
++ }
++ if (ROLLOVER_CHECK_FLAG(rollover_flag, ROLLOVER_RSHIFT)) {
++ rollover_count--;
++ }
++ if (ROLLOVER_CHECK_FLAG(rollover_flag, ROLLOVER_FUNCTION)) {
++ rollover_count--;
++ }
++ if ((rollover_count > 3) ||
++ ((rollover_count == 3) &&
++ (!ROLLOVER_CHECK_FLAG(rollover_flag, ROLLOVER_TAB) ||
++ ROLLOVER_CHECK_FLAG(rollover_flag, ROLLOVER_DIRECT_ON)) &&
++ (!ROLLOVER_CHECK_FLAG(rollover_flag, ROLLOVER_VERTICAL) ||
++ !ROLLOVER_CHECK_FLAG(rollover_flag, ROLLOVER_HORIZONTAL) ||
++ !ROLLOVER_CHECK_FLAG(rollover_flag, ROLLOVER_ENTQUESPC)))) {
++ rollover_error = 1;
++ }
++ }
++ // printk("count=%d,rollover_count=%d,rollover_error=%d\n",count,rollover_count,rollover_error);
++ if (rollover_error == 0) {
++#if 0
++ if (ROLLOVER_CHECK_FLAG(rollover_flag, ROLLOVER_VERTICAL) &&
++ ROLLOVER_CHECK_FLAG(rollover_flag, ROLLOVER_HORIZONTAL) &&
++ ROLLOVER_CHECK_FLAG(rollover_flag, ROLLOVER_ENTQUESPC)) {
++ printk("keyboard : vertical and horizontal and [Enter, ?, Space] pressed\n");
++ }
++#endif
++ for (i = 0; i < count; i++) {
++ sharppda_kbd_press(pressed_key[i]);
++ }
++ rollover_state = 0;
++ }
++ else {
++ if (rollover_state == 0) {
++#if 0
++ printk("keyboard : roll over error!\n");
++ if (count >= MAX_KEY_PRESS) {
++ printk("keyboard : %d key pressed\n", count);
++ }
++ else if (rollover_count > 3) {
++ printk("keyboard : %d rollover key pressed\n", rollover_count);
++ }
++ else if (ROLLOVER_CHECK_FLAG(rollover_flag, ROLLOVER_TAB) &&
++ ROLLOVER_CHECK_FLAG(rollover_flag, ROLLOVER_DIRECT_ON)) {
++ printk("keyboard : TAB and direct ON key pressed\n");
++ }
++#endif
++ // stop repeat
++ if (rep_hardkey) {
++#if CHECK_CHUTTER_BOUNCE
++ for (loop = 0; loop <= CHECK_BOUNCE; loop++) {
++ sharppda_kbd_release(rep_hardkey);
++ }
++#else
++ sharppda_kbd_release(rep_hardkey);
++#endif
++ sharppda_kbd_press_rollover(rep_hardkey);
++ }
++ }
++ for (i = 0; i < count; i++) {
++ sharppda_kbd_press_rollover(pressed_key[i]);
++ }
++ rollover_state = 1;
++ }
++#endif
++
++#ifdef USE_KBD_IRQ
++ /*
++ * drive all for next interrupts
++ */
++ DRIVE_ALL_COLS;
++#endif
++
++ // press OK key to erase flash
++ if (tosa_initial_keypress<0) {
++#if CHECK_CHUTTER_BOUNCE
++ if ((sharppda_kbdstate[0x38].in==PRESSED) ||
++ IS_PRESSING(sharppda_kbdstate[0x38].in)) {
++#else
++#if CHECK_ROLLOVER
++ if (sharppda_kbdstate[0x38].in==1) {
++#else
++ if (sharppda_kbdstate[0x38].in) {
++#endif
++#endif
++ tosa_initial_keypress = 1;
++ } else {
++ tosa_initial_keypress = 0;
++ }
++ }
++
++
++ /*
++ * Re-queue ourselves
++ */
++#if CHECK_CHUTTER_BOUNCE
++ for (loop = 0; loop < NR_KEYS; loop++) {
++ if (port_key_pending) {
++ queue_task(&kbdhw_task,&tq_timer);
++ break;
++ }
++ if (sharppda_kbdstate[loop].in != NOTPRESSED) {
++ queue_task(&kbdhw_task,&tq_timer);
++ break;
++ }
++ }
++#else
++#ifdef USE_KBD_IRQ
++ if ( count > 0 )
++#endif
++ queue_task(&kbdhw_task,&tq_timer);
++#endif
++ spin_unlock_irqrestore(&kbd_spinlock,flags);
++}
++
++/*
++ * Logical Keyboard Driver initialization
++ */
++
++void sharppda_scan_logdriver_init(void)
++{
++ int ni;
++ kbdhw_task.routine = sharppda_scan_key_gpio;
++ kbdhw_task.sync = 0;
++ mach_kbdrate = sharppda_kbd_kbdrate;
++#ifndef USE_KBD_IRQ
++ queue_task(&kbdhw_task,&tq_timer);
++#endif
++ for (ni=0;ni<NR_KEYCODES;ni++){
++ sharppda_kbdstate[ni].in=0;
++ }
++ isBrb = checkBrb();
++ init_timer(&port_key_delay_timer);
++}
++
++void sharppda_scan_logdriver_suspend(void)
++{
++ del_timer( &sharppda_kbd_rep_timer );
++ del_timer( &sharppda_kbd_hold_timer );
++ rep_scancode = 0;
++#if CHECK_ROLLOVER
++ rep_hardkey = 0;
++#endif
++ holdkey_pending = 0;
++ holdkey_pendinghardkey = 0;
++ holdkey_pendingmappedkey = 0;
++}
++
++void sharppda_scan_logdriver_resume(void)
++{
++ queue_task(&kbdhw_task,&tq_timer);
++}
++
++
++
++/*
++ * External Modifier Status Functions
++ */
++
++int sharppda_kbd_extmodif_showstatus(int which)
++{
++#ifdef EXTMODIF_SHOWSTAT_KEYMAX
++ unsigned char* pmodmap;
++ if( which >= EXTMODIF_SHOWSTAT_KEYMAX ) return -EINVAL;
++ if( ! extmodif_status_tables ) return -EINVAL;
++ if( ! ( pmodmap = extmodif_status_tables[which] ) ) return -EINVAL;
++ return(pmodmap[sharp_cur_status]);
++#else /* ! EXTMODIF_SHOWSTAT_KEYMAX */
++ return -EINVAL; /* not supported on this arch. */
++#endif /* ! EXTMODIF_SHOWSTAT_KEYMAX */
++}
++
++int sharppda_kbd_extmodif_togglestatus(int which)
++{
++#ifdef EXTMODIF_MOVESTAT_KEYMAX
++ unsigned char* pmodmap;
++ if( which >= EXTMODIF_MOVESTAT_KEYMAX ) return -EINVAL;
++ if( ! extmodif_move_tables ) return -EINVAL;
++ if( ! ( pmodmap = extmodif_move_tables[which] ) ) return -EINVAL;
++ DEBUGPRINT(("moving from %d to %d\n",sharp_cur_status,pmodmap[sharp_cur_status]));
++ if( sharp_cur_status != pmodmap[sharp_cur_status] ){
++ sharp_cur_status = pmodmap[sharp_cur_status];
++ sharpkbdctl_stat_changed();
++ }else{
++ sharp_cur_status = pmodmap[sharp_cur_status];
++ }
++ return 0;
++#else /* ! EXTMODIF_MOVESTAT_KEYMAX */
++ return -EINVAL; /* not supported on this arch. */
++#endif /* ! EXTMODIF_MOVESTAT_KEYMAX */
++}
++
++unsigned long sharppda_kbd_extmodif_packstatus(void)
++{
++#ifdef EXTMODIF_SHOWSTAT_KEYMAX
++ unsigned long val = 0;
++ return val;
++#else /* ! EXTMODIF_SHOWSTAT_KEYMAX */
++ return 0;
++#endif /* ! EXTMODIF_SHOWSTAT_KEYMAX */
++}
++
++/*
++ * SL-Keycode Search Functions
++ */
++
++static int find_hardcode_from_slcode(int stateno,unsigned char sl_char)
++{
++ int i;
++ unsigned char* pmodmap;
++ if( stateno < 0 || stateno >= STATE_NUMS_TOTAL ) return -EINVAL;
++ pmodmap = state_to_keymap[stateno];
++ for(i=0;i<(NR_KEYCODES+1);i++){
++ if( pmodmap[i] == sl_char ) return i;
++ }
++ return -EINVAL;
++}
++
++
++/*
++ * HoldKey Customizing Functions
++ */
++
++static void delete_custom_holdkey_info(void)
++{
++ CUS_DPRINTK("\n");
++ if( custom_holdkey_info ){
++ int i;
++ for(i=0;i<(NR_KEYCODES+1);i++){
++ if( custom_holdkey_info[i] ){
++ kfree(custom_holdkey_info[i]);
++ custom_holdkey_info[i] = NULL;
++ }
++ }
++ kfree(custom_holdkey_info);
++ custom_holdkey_info = NULL;
++ }
++}
++
++static int duplicate_holdkey_info(void)
++{
++ int i;
++ CUS_DPRINTK("\n");
++ if( ! custom_holdkey_info ){
++ custom_holdkey_info = (shappda_holdkey_info**)kmalloc(sizeof(shappda_holdkey_info*)*(NR_KEYCODES+1),GFP_KERNEL);
++ if( ! custom_holdkey_info ) goto FAIL_SAFE;
++ memset(custom_holdkey_info,0,sizeof(shappda_holdkey_info*)*(NR_KEYCODES+1));
++ }
++ for(i=0;i<(NR_KEYCODES+1);i++){
++ if( holdkey_info[i] ){
++ if( ! custom_holdkey_info[i] ){
++ custom_holdkey_info[i] = (shappda_holdkey_info*)kmalloc(sizeof(shappda_holdkey_info),GFP_KERNEL);
++ if( ! custom_holdkey_info[i] ) goto FAIL_SAFE;
++ }
++ memcpy(custom_holdkey_info[i],holdkey_info[i],sizeof(shappda_holdkey_info));
++ }else{
++ if( custom_holdkey_info[i] ){
++ memset(custom_holdkey_info[i],0,sizeof(shappda_holdkey_info));
++ kfree(custom_holdkey_info[i]);
++ custom_holdkey_info[i] = NULL;
++ }
++ }
++ }
++ return 0;
++FAIL_SAFE:
++ delete_custom_holdkey_info();
++ return -ENOMEM;
++}
++
++static int add_custom_holdkey_info(int i)
++{
++ int error;
++ CUS_DPRINTK(" %d(%x)\n",i,i);
++ if( i < 0 || i >= (NR_KEYCODES+1) ) return -EINVAL;
++ if( ! custom_holdkey_info ){
++ if( ( error = duplicate_holdkey_info() ) ) return error;
++ }
++ if( ! custom_holdkey_info[i] ){
++ custom_holdkey_info[i] = (shappda_holdkey_info*)kmalloc(sizeof(shappda_holdkey_info),GFP_KERNEL);
++ if( ! custom_holdkey_info[i] ) goto FAIL_SAFE;
++ if( holdkey_info[i] )
++ memcpy(custom_holdkey_info[i],holdkey_info[i],sizeof(shappda_holdkey_info));
++ else
++ memset(custom_holdkey_info[i],0,sizeof(shappda_holdkey_info));
++ }
++ return 0;
++FAIL_SAFE:
++ return -ENOMEM;
++}
++
++static int del_custom_holdkey_info(int i)
++{
++ int error;
++ CUS_DPRINTK(" %d(%x)\n",i,i);
++ if( i < 0 || i >= (NR_KEYCODES+1) ) return -EINVAL;
++ if( ! custom_holdkey_info ){
++ if( ( error = duplicate_holdkey_info() ) ) return error;
++ }
++ if( custom_holdkey_info[i] ){
++ memset(custom_holdkey_info[i],0,sizeof(shappda_holdkey_info));
++ kfree(custom_holdkey_info[i]);
++ custom_holdkey_info[i] = NULL;
++ }
++ return 0;
++FAIL_SAFE:
++ return -ENOMEM;
++}
++
++static int restore_one_holdkey_info(int i)
++{
++ int error;
++ CUS_DPRINTK(" %d(%x)\n",i,i);
++ if( i < 0 || i >= (NR_KEYCODES+1) ) return -EINVAL;
++ if( ! custom_holdkey_info ) return 0;
++ if( holdkey_info[i] ){
++ if( ( error = add_custom_holdkey_info(i) ) ) return error;
++ memcpy(custom_holdkey_info[i],holdkey_info[i],sizeof(shappda_holdkey_info));
++ }else{
++ if( ( error = del_custom_holdkey_info(i) ) ) return error;
++ }
++ return 0;
++}
++
++int restore_all_holdkey_info(void)
++{
++ CUS_DPRINTK("\n");
++ if( ! custom_holdkey_info ) return 0;
++ delete_custom_holdkey_info();
++ return 0;
++}
++
++int customize_holdkey_char_info(int hardcode,int sl_char)
++{
++ int error;
++ CUS_DPRINTK(" %d(%x) %d(%x)\n",hardcode,hardcode,sl_char,sl_char);
++ if( ! custom_holdkey_info ){
++ if( ( error = duplicate_holdkey_info() ) ) return error;
++ }
++ if( ( error = add_custom_holdkey_info(hardcode) ) ) return error;
++ custom_holdkey_info[hardcode]->type = HOLDKEYTYPE_CHAR;
++ custom_holdkey_info[hardcode]->character = sl_char;
++ return 0;
++}
++
++int customize_holdkey_char_info_by_slkey(unsigned char slcode,int sl_char)
++{
++ int hardcode;
++ CUS_DPRINTK(" %d(%x) %d(%x)\n",slcode,slcode,sl_char,sl_char);
++ hardcode = find_hardcode_from_slcode(0,slcode);
++ if( hardcode < 0 ) return -EINVAL;
++ return customize_holdkey_char_info(hardcode,sl_char);
++}
++
++int customize_del_holdkey_info(int hardcode)
++{
++ CUS_DPRINTK(" %d(%x)\n",hardcode,hardcode);
++ return del_custom_holdkey_info(hardcode);
++}
++
++int customize_del_holdkey_info_by_slkey(int slcode)
++{
++ int hardcode;
++ CUS_DPRINTK(" %d(%x)\n",slcode,slcode);
++ hardcode = find_hardcode_from_slcode(0,slcode);
++ if( hardcode < 0 ) return -EINVAL;
++ return del_custom_holdkey_info(hardcode);
++}
++
++int customize_restore_holdkey_info(int hardcode)
++{
++ CUS_DPRINTK(" %d(%x)\n",hardcode,hardcode);
++ return restore_one_holdkey_info(hardcode);
++}
++
++int customize_restore_holdkey_info_by_slkey(int slcode)
++{
++ int hardcode;
++ CUS_DPRINTK(" %d(%x)\n",slcode,slcode);
++ hardcode = find_hardcode_from_slcode(0,slcode);
++ if( hardcode < 0 ) return -EINVAL;
++ return restore_one_holdkey_info(hardcode);
++}
++
++
++int sharppda_kbd_set_hold_threshold(int msecs)
++{
++ if( holdkey_info ){
++ key_hold_delay = (unsigned long)msecs * HZ / 1000;
++#ifdef HOLDKEY_INFO_HAS_TIMEOUT
++ if( ! custom_holdkey_info ) duplicate_holdkey_info();
++ if( custom_holdkey_info ){
++ int i;
++ for(i=0;i<=NR_KEYCODES;i++){
++ if( custom_holdkey_info[i] ){
++ custom_holdkey_info[i]->timeout = msecs;
++ }
++ }
++ }else{
++ int i;
++ for(i=0;i<=NR_KEYCODES;i++){
++ if( holdkey_info[i] ){
++ holdkey_info[i]->timeout = msecs;
++ }
++ }
++ }
++#endif
++ return 0;
++ }else{
++ return -EINVAL; /* not supported on this architecture */
++ }
++}
++
++int sharppda_kbd_set_hold_threshold_group(int group,int msecs)
++{
++#ifdef HOLDKEY_INFO_HAS_TIMEOUT
++ if( ! custom_holdkey_info ) duplicate_holdkey_info();
++ if( custom_holdkey_info ){
++ int i;
++ for(i=0;i<=NR_KEYCODES;i++){
++ if( custom_holdkey_info[i] && custom_holdkey_info[i]->setgroup == group ){
++ custom_holdkey_info[i]->timeout = msecs;
++ }
++ }
++ return 0;
++ }else if( holdkey_info ){
++ int i;
++ for(i=0;i<=NR_KEYCODES;i++){
++ if( holdkey_info[i] && holdkey_info[i]->setgroup == group ){
++ holdkey_info[i]->timeout = msecs;
++ }
++ }
++ return 0;
++ }else{
++ return -EINVAL; /* not supported on this architecture */
++ }
++#endif
++ return -EINVAL; /* not supported on this architecture */
++}
++
++#if 0
++static int sharppda_kbd_keyscan(void)
++{
++ unsigned long flags;
++ int row, col, rowd, press_row, press_col, real_col;
++
++ WAIT_CHATTERING_DELAY;
++
++ spin_lock_irqsave(&kbd_spinlock,flags);
++
++ press_col = -1;
++ press_row = -1;
++ CHARGE_ALL;
++ for (col = 0; col < KB_COLS; col++) {
++ real_col = (GET_REAL_COL_FROM_COL(col));
++ DISCHARGE_ALL;
++ WAIT_DISCHARGE_DELAY;
++ ACTIVATE_COL(real_col);
++
++ WAIT_ACTIVATE_DELAY;
++ rowd = GET_ROWS_STATUS(real_col);
++ for (row = 0; row < KB_ROWS; row++) {
++ if (rowd & KB_ROWMASK(row)) {
++ if (press_row >= 0) {
++ press_row = -1;
++ col = KB_COLS;
++ break;
++ }
++ press_row = row;
++ press_col = col;
++ }
++ }
++ RESET_COL(real_col);
++ }
++
++ if (press_col != 0)
++ press_row = -1;
++
++#ifdef USE_KBD_IRQ
++ DRIVE_ALL_COLS;
++#endif
++
++ spin_unlock_irqrestore(&kbd_spinlock,flags);
++
++ return press_row;
++}
++
++static int sharppda_kbd_keycheck(int row, int col)
++{
++ unsigned long flags;
++ int press, real_col;
++
++ WAIT_CHATTERING_DELAY;
++
++ spin_lock_irqsave(&kbd_spinlock,flags);
++
++ CHARGE_ALL;
++ real_col = (GET_REAL_COL_FROM_COL(col));
++ DISCHARGE_ALL;
++ WAIT_DISCHARGE_DELAY;
++ ACTIVATE_COL(real_col);
++
++ WAIT_ACTIVATE_DELAY;
++ if (GET_ROWS_STATUS(real_col) & KB_ROWMASK(row))
++ press = 1;
++ else
++ press = 0;
++ RESET_COL(real_col);
++
++#ifdef USE_KBD_IRQ
++ DRIVE_ALL_COLS;
++#endif
++
++ spin_unlock_irqrestore(&kbd_spinlock,flags);
++
++ return press;
++}
++
++#define KEYBOARD_WAKEUP_WAIT 300
++
++static void sharppda_kbd_holdkeycheck(int row, int col)
++{
++ int count;
++
++ for (count = 0; count < KEYBOARD_WAKEUP_WAIT; count++) {
++ if (!sharppda_kbd_keycheck(row, col))
++ break;
++ mdelay(1);
++ }
++ if (row != 7) /* Power key */
++ sharppda_kbd_press(KEYCODE(row, col));
++ if (count >= KEYBOARD_WAKEUP_WAIT) {
++ sharppda_kbd_press(KEYCODE(row, col));
++ sharppda_kbd_hold(0);
++ }
++}
++#endif
++
++static void sharppda_kbd_press_repeat( int code )
++{
++ int i;
++ for (i=0; i<JUST_PRESSED; i++) sharppda_kbd_press(code);
++}
++static void sharppda_kbd_release_repeat( int code )
++{
++ int i;
++ for (i=0; i<JUST_RELEASED-PRESSED; i++) sharppda_kbd_release(code);
++}
++
++int sharppda_kbd_is_wakeup(void)
++{
++ unsigned long flags;
++ int count = 0, err = 0;
++ int cur_portkey,last_portkey=0;
++ int cur_matrixkey,last_matrixkey=0;
++ const int strobe_num = 4;
++ const int success_count = 10;
++
++ while( !(count>success_count || err>50) ) {
++ // read GPIO(On,Rec,Sync) key
++ cur_portkey = read_port_key_status_raw();
++
++ // read Strobe4(Address,Calendar,Menu,Mail) key
++ spin_lock_irqsave(&kbd_spinlock,flags);
++ DISCHARGE_ALL;
++ WAIT_DISCHARGE_DELAY;
++ ACTIVATE_COL(strobe_num);
++ WAIT_ACTIVATE_DELAY;
++ cur_matrixkey = GET_ROWS_STATUS(strobe_num);
++ spin_unlock_irqrestore(&kbd_spinlock,flags);
++ // compare with last state
++ if (cur_portkey != last_portkey ||
++ cur_matrixkey != last_matrixkey) {
++ count = 0;
++ err++;
++ last_portkey = cur_portkey;
++ last_matrixkey = cur_matrixkey;
++ } else {
++ count++;
++ }
++ mdelay(10);
++ }
++ if (count>success_count) {
++ printk("key interrupt on (%04x,%04x)\n",last_portkey,last_matrixkey);
++ if (last_portkey & KEYMASK_ON) { // On ... only status change
++ sharppda_kbdstate[KEYCODE(0, KB_COLS)].in = PRESSED;
++ port_key_delay_state[IDPORT_ON]=PRESSED;
++ }
++ if (last_portkey & KEYMASK_REC) { // Rec
++ if (logical_wakeup_src_mask&IDPM_WAKEUP_REC) {
++ if (port_key_setting[IDPORT_REC]>=0) {
++ sharppda_kbd_press_repeat(KEYCODE(1, KB_COLS));
++ sharppda_kbd_release_repeat(KEYCODE(1, KB_COLS));
++ }
++ } else last_portkey &= ~KEYMASK_REC;
++ }
++ if (last_portkey & KEYMASK_SYNC) { // Sync
++ if (logical_wakeup_src_mask&IDPM_WAKEUP_SYNC) {
++ if (port_key_setting[IDPORT_SYNC]>=0) {
++ sharppda_kbd_press_repeat(KEYCODE(2, KB_COLS));
++ sharppda_kbd_release_repeat(KEYCODE(2, KB_COLS));
++ }
++ } else last_portkey &= ~KEYMASK_SYNC;
++ }
++ if (last_matrixkey & KEYMASK_ADDRESS) { // Address
++ if (logical_wakeup_src_mask&IDPM_WAKEUP_ADDRESSBOOK) {
++ sharppda_kbd_press_repeat(KEYCODE(3, strobe_num));
++ sharppda_kbd_release_repeat(KEYCODE(3, strobe_num));
++ } else last_matrixkey &= ~KEYMASK_ADDRESS;
++ }
++ if (last_matrixkey & KEYMASK_CALENDAR) { // Calendar
++ if (logical_wakeup_src_mask&IDPM_WAKEUP_CALENDAR) {
++ sharppda_kbd_press_repeat(KEYCODE(4, strobe_num));
++ sharppda_kbd_release_repeat(KEYCODE(4, strobe_num));
++ } else last_matrixkey &= ~KEYMASK_CALENDAR;
++ }
++ if (last_matrixkey & KEYMASK_MENU) { // Menu
++ if (logical_wakeup_src_mask&IDPM_WAKEUP_MENU) {
++ sharppda_kbd_press_repeat(KEYCODE(5, strobe_num));
++ sharppda_kbd_release_repeat(KEYCODE(5, strobe_num));
++ } else last_matrixkey &= ~KEYMASK_MENU;
++ }
++ if (last_matrixkey & KEYMASK_MAIL) { // Mail (Holdkey event)
++ if (logical_wakeup_src_mask&IDPM_WAKEUP_MAIL) {
++ sharppda_kbd_press_repeat(KEYCODE(6, strobe_num));
++ sharppda_kbd_hold(0);
++ } else last_matrixkey &= ~KEYMASK_MAIL;
++ }
++ return (last_portkey || last_matrixkey)?1:0;
++ }
++ return 0;
++}
++
++#define MAX_RESET_KEY_COMBINATION 3
++
++#define RESET_KEY_NONE (0)
++#define RESET_KEY_FUNC (KEYCODE(5, 10))
++#define RESET_KEY_HOME (KEYCODE(4, 5))
++#define RESET_KEY_A (KEYCODE(2, 0))
++#define RESET_KEY_B (KEYCODE(4, 2))
++#define RESET_KEY_C (KEYCODE(3, 2))
++#define RESET_KEY_D (KEYCODE(2, 2))
++#define RESET_KEY_K (KEYCODE(0, 5))
++#define RESET_KEY_M (KEYCODE(5, 3))
++#define RESET_KEY_P (KEYCODE(0, 7))
++#define RESET_KEY_Q (KEYCODE(1, 0))
++#define RESET_KEY_R (KEYCODE(4, 1))
++#define RESET_KEY_T (KEYCODE(1, 2))
++#define RESET_KEY_Z (KEYCODE(3, 0))
++
++static int reset_key_combination[][MAX_RESET_KEY_COMBINATION] = {
++ {RESET_KEY_FUNC, RESET_KEY_HOME, RESET_KEY_NONE}, /* Fn + Home */
++ {RESET_KEY_P, RESET_KEY_D, RESET_KEY_NONE}, /* P + D */
++ {RESET_KEY_M, RESET_KEY_D, RESET_KEY_NONE}, /* M + D */
++ {RESET_KEY_R, RESET_KEY_D, RESET_KEY_NONE}, /* R + D */
++ {RESET_KEY_FUNC, RESET_KEY_P, RESET_KEY_D}, /* Fn + P + D */
++ {RESET_KEY_FUNC, RESET_KEY_M, RESET_KEY_D}, /* Fn + M + D */
++ {RESET_KEY_Q, RESET_KEY_T, RESET_KEY_NONE}, /* Q + T */
++ {RESET_KEY_C, RESET_KEY_D, RESET_KEY_NONE}, /* C + D */
++ {RESET_KEY_Z, RESET_KEY_D, RESET_KEY_NONE}, /* Z + D */
++ {RESET_KEY_K, RESET_KEY_D, RESET_KEY_NONE}, /* K + D */
++ {RESET_KEY_A, RESET_KEY_B, RESET_KEY_NONE}, /* A + B */
++ {RESET_KEY_B, RESET_KEY_D, RESET_KEY_NONE}, /* B + D */
++ {RESET_KEY_A, RESET_KEY_D, RESET_KEY_NONE}, /* A + D */
++ {RESET_KEY_NONE, RESET_KEY_NONE, RESET_KEY_NONE} /* End Mark */
++};
++
++static int sharppda_kbd_resetcheck_one(void)
++{
++ unsigned long flags;
++ int row, col, rowd, real_col, i, j, k, press_num = 0, pressed, set_num;
++ int press_key[MAX_RESET_KEY_COMBINATION] = {0, 0, 0};
++
++ WAIT_CHATTERING_DELAY;
++ spin_lock_irqsave(&kbd_spinlock,flags);
++ CHARGE_ALL;
++ for (col = 0; col < KB_COLS; col++) {
++ real_col = (GET_REAL_COL_FROM_COL(col));
++ DISCHARGE_ALL;
++ WAIT_DISCHARGE_DELAY;
++ ACTIVATE_COL(real_col);
++ WAIT_ACTIVATE_DELAY;
++ rowd = GET_ROWS_STATUS(real_col);
++ for (row = 0; row < KB_ROWS; row++) {
++ if (rowd & KB_ROWMASK(row)) {
++ if (press_num >= MAX_RESET_KEY_COMBINATION) {
++ return 0; /* too many keys are pressed */
++ }
++ press_key[press_num++] = KEYCODE(row, col);
++ }
++ }
++ RESET_COL(real_col);
++ }
++
++#ifdef USE_KBD_IRQ
++ DRIVE_ALL_COLS;
++#endif
++
++ spin_unlock_irqrestore(&kbd_spinlock,flags);
++
++ for (i = 0; reset_key_combination[i][0] != 0; i++) {
++ set_num = 0;
++ for (j = 0; j < MAX_RESET_KEY_COMBINATION; j++) {
++ if (reset_key_combination[i][j] == RESET_KEY_NONE) continue;
++ set_num++;
++ pressed = 0;
++ for (k = 0; k < press_num; k++) {
++ if (press_key[k] == reset_key_combination[i][j]) {
++ pressed = 1;
++ break;
++ }
++ }
++ if (!pressed) break;
++ }
++ if ((j == MAX_RESET_KEY_COMBINATION) && (set_num == press_num)) {
++ return i + 1;
++ }
++ }
++
++ return 0;
++}
++
++int sharppda_kbd_resetcheck(void)
++{
++ int state, i;
++
++ state = sharppda_kbd_resetcheck_one();
++#if CHECK_CHUTTER_BOUNCE
++ if (!state) return 0;
++ for (i = 0; i < CHECK_CHUTTER; i++) {
++ mdelay(5);
++ if (sharppda_kbd_resetcheck_one() != state) return 0;
++ }
++#endif
++ return state;
++}
++/*
++ * end of source
++ */
+diff -Nur linux_c860_org/drivers/char/tosa_rawmap.h linux/drivers/char/tosa_rawmap.h
+--- linux_c860_org/drivers/char/tosa_rawmap.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/char/tosa_rawmap.h 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,340 @@
++#ifndef __KEYTABLE_H_INCLUDED__
++#define __KEYTABLE_H_INCLUDED__
++
++
++#ifndef NR_KEYS
++#define NR_KEYS 128
++#endif /* ! NR_KEYS */
++
++
++#ifndef NR_KEYCODES
++#define NR_KEYCODES 128
++#endif /* ! NR_KEYCODES */
++
++
++#define MODIF_2ND 0x01
++#define MODIF_CAPS 0x02
++#define MODIF_NUM 0x03
++
++#ifndef KEY_IGN
++#define KEY_IGN 0
++#endif /* ! KEY_IGN */
++
++
++static unsigned char rawkeytable_table_NormalLower[(NR_KEYCODES+1)] = {
++KEY_IGN,KEY_IGN,SLKEY_W,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_K,SLKEY_BACK_SPACE,SLKEY_P,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_OFF,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Q,SLKEY_E,SLKEY_T,SLKEY_Y,KEY_IGN,SLKEY_O,SLKEY_I,SLKEY_COMMA,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_RECORDER,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_A,SLKEY_D,SLKEY_G,SLKEY_U,KEY_IGN,SLKEY_L,SLKEY_ENTER,SLKEY_PERIOD,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_SYNCSTART,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Z,SLKEY_C,SLKEY_V,SLKEY_J,SLKEY_CONTACTS,SLKEY_F9,SLKEY_F11,SLKEY_F4,SLKEY_LSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_S,SLKEY_R,SLKEY_B,SLKEY_N,SLKEY_ACTIVITY,SLKEY_HOME,SLKEY_MINUS,SLKEY_FRONTLIGHT,KEY_IGN,SLKEY_RSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_TAB,SLKEY_SLASH,SLKEY_H,SLKEY_M,SLKEY_F2,KEY_IGN,SLKEY_UP,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_2ND,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_X,SLKEY_F,SLKEY_SPACE,SLKEY_APOSTROPHE,SLKEY_MAIL,SLKEY_LEFT,SLKEY_DOWN,SLKEY_RIGHT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN};
++
++static unsigned char rawkeytable_table_NormalUpper[(NR_KEYCODES+1)] = {
++KEY_IGN,KEY_IGN,SLKEY_W,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_K,SLKEY_BACK_SPACE,SLKEY_P,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_OFF,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Q,SLKEY_E,SLKEY_T,SLKEY_Y,KEY_IGN,SLKEY_O,SLKEY_I,SLKEY_COMMA,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_RECORDER,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_A,SLKEY_D,SLKEY_G,SLKEY_U,KEY_IGN,SLKEY_L,SLKEY_ENTER,SLKEY_PERIOD,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_SYNCSTART,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Z,SLKEY_C,SLKEY_V,SLKEY_J,SLKEY_CONTACTS,SLKEY_F9,SLKEY_F11,SLKEY_F4,SLKEY_LSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_S,SLKEY_R,SLKEY_B,SLKEY_N,SLKEY_ACTIVITY,SLKEY_HOME,SLKEY_MINUS,SLKEY_FRONTLIGHT,KEY_IGN,SLKEY_RSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_TAB,SLKEY_SLASH,SLKEY_H,SLKEY_M,SLKEY_F2,KEY_IGN,SLKEY_UP,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_2ND,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_X,SLKEY_F,SLKEY_SPACE,SLKEY_APOSTROPHE,SLKEY_MAIL,SLKEY_LEFT,SLKEY_DOWN,SLKEY_RIGHT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN};
++
++static unsigned char rawkeytable_table_2ndLower[(NR_KEYCODES+1)] = {
++KEY_IGN,KEY_IGN,SLKEY_W,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_K,SLKEY_BACK_SPACE,SLKEY_P,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_OFF,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Q,SLKEY_E,SLKEY_T,SLKEY_Y,KEY_IGN,SLKEY_O,SLKEY_I,SLKEY_COMMA,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_RECORDER,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_A,SLKEY_D,SLKEY_G,SLKEY_U,KEY_IGN,SLKEY_L,SLKEY_ENTER,SLKEY_PERIOD,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_SYNCSTART,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Z,SLKEY_C,SLKEY_V,SLKEY_J,SLKEY_CONTACTS,SLKEY_F9,SLKEY_F11,SLKEY_F4,SLKEY_LSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_S,SLKEY_R,SLKEY_B,SLKEY_N,SLKEY_ACTIVITY,SLKEY_HOME,SLKEY_MINUS,SLKEY_FRONTLIGHT,KEY_IGN,SLKEY_RSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_TAB,SLKEY_SLASH,SLKEY_H,SLKEY_M,SLKEY_F2,KEY_IGN,SLKEY_UP,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_2ND,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_X,SLKEY_F,SLKEY_SPACE,SLKEY_APOSTROPHE,SLKEY_MAIL,SLKEY_LEFT,SLKEY_DOWN,SLKEY_RIGHT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN};
++
++static unsigned char rawkeytable_table_2ndUpper[(NR_KEYCODES+1)] = {
++KEY_IGN,KEY_IGN,SLKEY_W,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_K,SLKEY_BACK_SPACE,SLKEY_P,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_OFF,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Q,SLKEY_E,SLKEY_T,SLKEY_Y,KEY_IGN,SLKEY_O,SLKEY_I,SLKEY_COMMA,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_RECORDER,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_A,SLKEY_D,SLKEY_G,SLKEY_U,KEY_IGN,SLKEY_L,SLKEY_ENTER,SLKEY_PERIOD,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_SYNCSTART,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Z,SLKEY_PRINTSCREEN,SLKEY_V,SLKEY_J,SLKEY_CONTACTS,SLKEY_F9,SLKEY_F11,SLKEY_F4,SLKEY_LSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_S,SLKEY_R,SLKEY_B,SLKEY_N,SLKEY_ACTIVITY,SLKEY_HOME,SLKEY_MINUS,SLKEY_FRONTLIGHT,KEY_IGN,SLKEY_RSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_TAB,SLKEY_SLASH,SLKEY_H,SLKEY_M,SLKEY_F2,KEY_IGN,SLKEY_UP,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_2ND,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_X,SLKEY_F,SLKEY_SPACE,SLKEY_APOSTROPHE,SLKEY_MAIL,SLKEY_LEFT,SLKEY_DOWN,SLKEY_RIGHT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN};
++
++static unsigned char rawkeytable_table_NumlockLower[(NR_KEYCODES+1)] = {
++KEY_IGN,KEY_IGN,SLKEY_W,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_K,SLKEY_BACK_SPACE,SLKEY_P,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_OFF,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Q,SLKEY_E,SLKEY_T,SLKEY_Y,KEY_IGN,SLKEY_O,SLKEY_I,SLKEY_COMMA,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_RECORDER,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_A,SLKEY_D,SLKEY_G,SLKEY_U,KEY_IGN,SLKEY_L,SLKEY_ENTER,SLKEY_PERIOD,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_SYNCSTART,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Z,SLKEY_C,SLKEY_V,SLKEY_J,SLKEY_CONTACTS,SLKEY_F9,SLKEY_F11,SLKEY_F4,SLKEY_LSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_S,SLKEY_R,SLKEY_B,SLKEY_N,SLKEY_ACTIVITY,SLKEY_HOME,SLKEY_MINUS,SLKEY_FRONTLIGHT,KEY_IGN,SLKEY_RSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_TAB,SLKEY_SLASH,SLKEY_H,SLKEY_M,SLKEY_F2,KEY_IGN,SLKEY_UP,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_2ND,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_X,SLKEY_F,SLKEY_SPACE,SLKEY_APOSTROPHE,SLKEY_MAIL,SLKEY_LEFT,SLKEY_DOWN,SLKEY_RIGHT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN};
++
++static unsigned char rawkeytable_table_NumlockUpper[(NR_KEYCODES+1)] = {
++KEY_IGN,KEY_IGN,SLKEY_W,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_K,SLKEY_BACK_SPACE,SLKEY_P,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_OFF,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Q,SLKEY_E,SLKEY_T,SLKEY_Y,KEY_IGN,SLKEY_O,SLKEY_I,SLKEY_COMMA,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_RECORDER,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_A,SLKEY_D,SLKEY_G,SLKEY_U,KEY_IGN,SLKEY_L,SLKEY_ENTER,SLKEY_PERIOD,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_SYNCSTART,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Z,SLKEY_C,SLKEY_V,SLKEY_J,SLKEY_CONTACTS,SLKEY_F9,SLKEY_F11,SLKEY_F4,SLKEY_LSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_S,SLKEY_R,SLKEY_B,SLKEY_N,SLKEY_ACTIVITY,SLKEY_HOME,SLKEY_MINUS,SLKEY_FRONTLIGHT,KEY_IGN,SLKEY_RSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_TAB,SLKEY_SLASH,SLKEY_H,SLKEY_M,SLKEY_F2,KEY_IGN,SLKEY_UP,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_2ND,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_X,SLKEY_F,SLKEY_SPACE,SLKEY_APOSTROPHE,SLKEY_MAIL,SLKEY_LEFT,SLKEY_DOWN,SLKEY_RIGHT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN};
++
++static unsigned char rawkeytable_table_Num2ndLower[(NR_KEYCODES+1)] = {
++KEY_IGN,KEY_IGN,SLKEY_W,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_K,SLKEY_BACK_SPACE,SLKEY_P,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_OFF,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Q,SLKEY_E,SLKEY_T,SLKEY_Y,KEY_IGN,SLKEY_O,SLKEY_I,SLKEY_COMMA,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_RECORDER,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_A,SLKEY_D,SLKEY_G,SLKEY_U,KEY_IGN,SLKEY_L,SLKEY_ENTER,SLKEY_PERIOD,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_SYNCSTART,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Z,SLKEY_C,SLKEY_V,SLKEY_J,SLKEY_CONTACTS,SLKEY_F9,SLKEY_F11,SLKEY_F4,SLKEY_LSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_S,SLKEY_R,SLKEY_B,SLKEY_N,SLKEY_ACTIVITY,SLKEY_HOME,SLKEY_MINUS,SLKEY_FRONTLIGHT,KEY_IGN,SLKEY_RSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_TAB,SLKEY_SLASH,SLKEY_H,SLKEY_M,SLKEY_F2,KEY_IGN,SLKEY_UP,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_2ND,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_X,SLKEY_F,SLKEY_SPACE,SLKEY_APOSTROPHE,SLKEY_MAIL,SLKEY_LEFT,SLKEY_DOWN,SLKEY_RIGHT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN};
++
++static unsigned char rawkeytable_table_Num2ndUpper[(NR_KEYCODES+1)] = {
++KEY_IGN,KEY_IGN,SLKEY_W,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_K,SLKEY_BACK_SPACE,SLKEY_P,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_OFF,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Q,SLKEY_E,SLKEY_T,SLKEY_Y,KEY_IGN,SLKEY_O,SLKEY_I,SLKEY_COMMA,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_RECORDER,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_A,SLKEY_D,SLKEY_G,SLKEY_U,KEY_IGN,SLKEY_L,SLKEY_ENTER,SLKEY_PERIOD,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_SYNCSTART,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Z,SLKEY_PRINTSCREEN,SLKEY_V,SLKEY_J,SLKEY_CONTACTS,SLKEY_F9,SLKEY_F11,SLKEY_F4,SLKEY_LSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_S,SLKEY_R,SLKEY_B,SLKEY_N,SLKEY_ACTIVITY,SLKEY_HOME,SLKEY_MINUS,SLKEY_FRONTLIGHT,KEY_IGN,SLKEY_RSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_TAB,SLKEY_SLASH,SLKEY_H,SLKEY_M,SLKEY_F2,KEY_IGN,SLKEY_UP,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_2ND,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_X,SLKEY_F,SLKEY_SPACE,SLKEY_APOSTROPHE,SLKEY_MAIL,SLKEY_LEFT,SLKEY_DOWN,SLKEY_RIGHT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN};
++
++
++
++#define STATE_S0 0
++#define STATE_S1 1
++#define STATE_S2 2
++#define STATE_S3 3
++#define STATE_S4 4
++#define STATE_S5 5
++#define STATE_S6 6
++#define STATE_S7 7
++#define STATE_S8 8
++#define STATE_S9 9
++#define STATE_S10 10
++#define STATE_S11 11
++#define STATE_S12 12
++#define STATE_S13 13
++#define STATE_S14 14
++#define STATE_S15 15
++#define STATE_S16 16
++#define STATE_S17 17
++#define STATE_S18 18
++#define STATE_S19 19
++#define STATE_S20 20
++#define STATE_S21 21
++#define STATE_S22 22
++#define STATE_S23 23
++#define STATE_S24 24
++#define STATE_S25 25
++#define STATE_S26 26
++#define STATE_S27 27
++#define STATE_S28 28
++#define STATE_S29 29
++#define STATE_S30 30
++#define STATE_S31 31
++#define STATE_S32 32
++#define STATE_S33 33
++#define STATE_S34 34
++#define STATE_S35 35
++#define STATE_S36 36
++#define STATE_S37 37
++#define STATE_S38 38
++#define STATE_S39 39
++#define STATE_S40 40
++#define STATE_S41 41
++#define STATE_S42 42
++#define STATE_S43 43
++#define STATE_S44 44
++#define STATE_S45 45
++#define STATE_S46 46
++#define STATE_S47 47
++#define STATE_S48 48
++#define STATE_S49 49
++#define STATE_S50 50
++#define STATE_S51 51
++#define STATE_S52 52
++#define STATE_S53 53
++#define STATE_S54 54
++#define STATE_S55 55
++#define STATE_S56 56
++#define STATE_S57 57
++#define STATE_S58 58
++#define STATE_S59 59
++#define STATE_S60 60
++#define STATE_S61 61
++#define STATE_S62 62
++#define STATE_S63 63
++#define STATE_S64 64
++#define STATE_S65 65
++#define STATE_S66 66
++#define STATE_S67 67
++#define STATE_S68 68
++#define STATE_S69 69
++#define STATE_S70 70
++#define STATE_S71 71
++#define STATE_S72 72
++#define STATE_S73 73
++#define STATE_S74 74
++#define STATE_S75 75
++#define STATE_S76 76
++#define STATE_S77 77
++#define STATE_S78 78
++#define STATE_S79 79
++
++
++#define STATE_NUMS_TOTAL 80
++
++
++#ifdef RAWKEY_MAP_DEBUG
++static char *state_names[STATE_NUMS_TOTAL] = {
++ "S0",
++ "S1",
++ "S2",
++ "S3",
++ "S4",
++ "S5",
++ "S6",
++ "S7",
++ "S8",
++ "S9",
++ "S10",
++ "S11",
++ "S12",
++ "S13",
++ "S14",
++ "S15",
++ "S16",
++ "S17",
++ "S18",
++ "S19",
++ "S20",
++ "S21",
++ "S22",
++ "S23",
++ "S24",
++ "S25",
++ "S26",
++ "S27",
++ "S28",
++ "S29",
++ "S30",
++ "S31",
++ "S32",
++ "S33",
++ "S34",
++ "S35",
++ "S36",
++ "S37",
++ "S38",
++ "S39",
++ "S40",
++ "S41",
++ "S42",
++ "S43",
++ "S44",
++ "S45",
++ "S46",
++ "S47",
++ "S48",
++ "S49",
++ "S50",
++ "S51",
++ "S52",
++ "S53",
++ "S54",
++ "S55",
++ "S56",
++ "S57",
++ "S58",
++ "S59",
++ "S60",
++ "S61",
++ "S62",
++ "S63",
++ "S64",
++ "S65",
++ "S66",
++ "S67",
++ "S68",
++ "S69",
++ "S70",
++ "S71",
++ "S72",
++ "S73",
++ "S74",
++ "S75",
++ "S76",
++ "S77",
++ "S78",
++ "S79"
++};
++#endif /* RAWKEY_MAP_DEBUG */
++
++
++static unsigned char state_table_LSHIFT_up[STATE_NUMS_TOTAL] = {
++STATE_S0,STATE_S0,STATE_S2,STATE_S2,STATE_S4,STATE_S4,STATE_S6,STATE_S6,STATE_S8,STATE_S8,STATE_S10,STATE_S10,STATE_S12,STATE_S12,STATE_S14,STATE_S14,STATE_S16,STATE_S16,STATE_S18,STATE_S18,STATE_S20,STATE_S20,STATE_S22,STATE_S22,STATE_S24,STATE_S24,STATE_S26,STATE_S26,STATE_S28,STATE_S28,STATE_S30,STATE_S30,STATE_S32,STATE_S32,STATE_S34,STATE_S34,STATE_S36,STATE_S36,STATE_S38,STATE_S38,STATE_S40,STATE_S40,STATE_S42,STATE_S42,STATE_S44,STATE_S44,STATE_S46,STATE_S46,STATE_S48,STATE_S48,STATE_S50,STATE_S50,STATE_S52,STATE_S52,STATE_S54,STATE_S54,STATE_S56,STATE_S56,STATE_S58,STATE_S58,STATE_S60,STATE_S60,STATE_S62,STATE_S62,STATE_S64,STATE_S64,STATE_S66,STATE_S66,STATE_S68,STATE_S68,STATE_S70,STATE_S70,STATE_S72,STATE_S72,STATE_S74,STATE_S74,STATE_S76,STATE_S76,STATE_S78,STATE_S78};
++
++static unsigned char state_table_RSHIFT_up[STATE_NUMS_TOTAL] = {
++STATE_S0,STATE_S1,STATE_S2,STATE_S3,STATE_S4,STATE_S5,STATE_S6,STATE_S7,STATE_S8,STATE_S9,STATE_S10,STATE_S11,STATE_S12,STATE_S13,STATE_S14,STATE_S15,STATE_S16,STATE_S17,STATE_S18,STATE_S19,STATE_S20,STATE_S21,STATE_S22,STATE_S23,STATE_S24,STATE_S25,STATE_S26,STATE_S27,STATE_S28,STATE_S29,STATE_S30,STATE_S31,STATE_S32,STATE_S33,STATE_S34,STATE_S35,STATE_S36,STATE_S37,STATE_S38,STATE_S39,STATE_S0,STATE_S1,STATE_S2,STATE_S3,STATE_S4,STATE_S5,STATE_S6,STATE_S7,STATE_S8,STATE_S9,STATE_S10,STATE_S11,STATE_S12,STATE_S13,STATE_S14,STATE_S15,STATE_S16,STATE_S17,STATE_S18,STATE_S19,STATE_S20,STATE_S21,STATE_S22,STATE_S23,STATE_S24,STATE_S25,STATE_S26,STATE_S27,STATE_S28,STATE_S29,STATE_S30,STATE_S31,STATE_S32,STATE_S33,STATE_S34,STATE_S35,STATE_S36,STATE_S37,STATE_S38,STATE_S39};
++
++static unsigned char state_table_2nd_up[STATE_NUMS_TOTAL] = {
++STATE_S0,STATE_S1,STATE_S6,STATE_S7,STATE_S0,STATE_S1,STATE_S6,STATE_S7,STATE_S0,STATE_S1,STATE_S10,STATE_S11,STATE_S16,STATE_S17,STATE_S10,STATE_S11,STATE_S16,STATE_S17,STATE_S10,STATE_S11,STATE_S20,STATE_S21,STATE_S26,STATE_S27,STATE_S20,STATE_S21,STATE_S26,STATE_S27,STATE_S20,STATE_S21,STATE_S30,STATE_S31,STATE_S36,STATE_S37,STATE_S30,STATE_S31,STATE_S36,STATE_S37,STATE_S30,STATE_S31,STATE_S40,STATE_S41,STATE_S46,STATE_S47,STATE_S40,STATE_S41,STATE_S46,STATE_S47,STATE_S40,STATE_S41,STATE_S50,STATE_S51,STATE_S56,STATE_S57,STATE_S50,STATE_S51,STATE_S56,STATE_S57,STATE_S50,STATE_S51,STATE_S60,STATE_S61,STATE_S66,STATE_S67,STATE_S60,STATE_S61,STATE_S66,STATE_S67,STATE_S60,STATE_S61,STATE_S70,STATE_S71,STATE_S76,STATE_S77,STATE_S70,STATE_S71,STATE_S76,STATE_S77,STATE_S70,STATE_S71};
++
++
++
++#define UP_TABLES_SIZE 3
++
++
++static unsigned char *up_tables[UP_TABLES_SIZE] = {
++ state_table_LSHIFT_up,state_table_RSHIFT_up,state_table_2nd_up
++};
++
++
++#define SEE_LSHIFT_UP 0
++#define SEE_RSHIFT_UP 1
++#define SEE_2nd_UP 2
++#define UP_NOP -1
++
++
++static char up_modifs_ref[(NR_KEYCODES+1)] = {
++UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,SEE_LSHIFT_UP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,SEE_RSHIFT_UP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,SEE_2nd_UP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP,UP_NOP};
++
++
++static unsigned char state_table_LSHIFT_down[STATE_NUMS_TOTAL] = {
++STATE_S1,STATE_S1,STATE_S3,STATE_S3,STATE_S5,STATE_S5,STATE_S7,STATE_S7,STATE_S9,STATE_S9,STATE_S11,STATE_S11,STATE_S13,STATE_S13,STATE_S15,STATE_S15,STATE_S17,STATE_S17,STATE_S19,STATE_S19,STATE_S21,STATE_S21,STATE_S23,STATE_S23,STATE_S25,STATE_S25,STATE_S27,STATE_S27,STATE_S29,STATE_S29,STATE_S31,STATE_S31,STATE_S33,STATE_S33,STATE_S35,STATE_S35,STATE_S37,STATE_S37,STATE_S39,STATE_S39,STATE_S41,STATE_S41,STATE_S43,STATE_S43,STATE_S45,STATE_S45,STATE_S47,STATE_S47,STATE_S49,STATE_S49,STATE_S51,STATE_S51,STATE_S53,STATE_S53,STATE_S55,STATE_S55,STATE_S57,STATE_S57,STATE_S59,STATE_S59,STATE_S61,STATE_S61,STATE_S63,STATE_S63,STATE_S65,STATE_S65,STATE_S67,STATE_S67,STATE_S69,STATE_S69,STATE_S71,STATE_S71,STATE_S73,STATE_S73,STATE_S75,STATE_S75,STATE_S77,STATE_S77,STATE_S79,STATE_S79};
++
++static unsigned char state_table_RSHIFT_down[STATE_NUMS_TOTAL] = {
++STATE_S40,STATE_S41,STATE_S42,STATE_S43,STATE_S44,STATE_S45,STATE_S46,STATE_S47,STATE_S48,STATE_S49,STATE_S50,STATE_S51,STATE_S52,STATE_S53,STATE_S54,STATE_S55,STATE_S56,STATE_S57,STATE_S58,STATE_S59,STATE_S60,STATE_S61,STATE_S62,STATE_S63,STATE_S64,STATE_S65,STATE_S66,STATE_S67,STATE_S68,STATE_S69,STATE_S70,STATE_S71,STATE_S72,STATE_S73,STATE_S74,STATE_S75,STATE_S76,STATE_S77,STATE_S78,STATE_S79,STATE_S40,STATE_S41,STATE_S42,STATE_S43,STATE_S44,STATE_S45,STATE_S46,STATE_S47,STATE_S48,STATE_S49,STATE_S50,STATE_S51,STATE_S52,STATE_S53,STATE_S54,STATE_S55,STATE_S56,STATE_S57,STATE_S58,STATE_S59,STATE_S60,STATE_S61,STATE_S62,STATE_S63,STATE_S64,STATE_S65,STATE_S66,STATE_S67,STATE_S68,STATE_S69,STATE_S70,STATE_S71,STATE_S72,STATE_S73,STATE_S74,STATE_S75,STATE_S76,STATE_S77,STATE_S78,STATE_S79};
++
++static unsigned char state_table_2nd_down[STATE_NUMS_TOTAL] = {
++STATE_S2,STATE_S3,STATE_S2,STATE_S3,STATE_S4,STATE_S5,STATE_S8,STATE_S9,STATE_S8,STATE_S9,STATE_S12,STATE_S13,STATE_S12,STATE_S13,STATE_S14,STATE_S15,STATE_S18,STATE_S19,STATE_S18,STATE_S19,STATE_S22,STATE_S23,STATE_S22,STATE_S23,STATE_S24,STATE_S25,STATE_S28,STATE_S29,STATE_S28,STATE_S29,STATE_S32,STATE_S33,STATE_S32,STATE_S33,STATE_S34,STATE_S35,STATE_S38,STATE_S39,STATE_S38,STATE_S39,STATE_S42,STATE_S43,STATE_S42,STATE_S43,STATE_S44,STATE_S45,STATE_S48,STATE_S49,STATE_S48,STATE_S49,STATE_S52,STATE_S53,STATE_S52,STATE_S53,STATE_S54,STATE_S55,STATE_S58,STATE_S59,STATE_S58,STATE_S59,STATE_S62,STATE_S63,STATE_S62,STATE_S63,STATE_S64,STATE_S65,STATE_S68,STATE_S69,STATE_S68,STATE_S69,STATE_S72,STATE_S73,STATE_S72,STATE_S73,STATE_S74,STATE_S75,STATE_S78,STATE_S79,STATE_S78,STATE_S79};
++
++static unsigned char state_table_caps_down[STATE_NUMS_TOTAL] = {
++STATE_S0,STATE_S1,STATE_S14,STATE_S15,STATE_S14,STATE_S15,STATE_S10,STATE_S11,STATE_S14,STATE_S15,STATE_S10,STATE_S11,STATE_S4,STATE_S5,STATE_S4,STATE_S5,STATE_S0,STATE_S1,STATE_S4,STATE_S5,STATE_S20,STATE_S21,STATE_S34,STATE_S35,STATE_S34,STATE_S35,STATE_S30,STATE_S31,STATE_S34,STATE_S35,STATE_S30,STATE_S31,STATE_S24,STATE_S25,STATE_S24,STATE_S25,STATE_S20,STATE_S21,STATE_S24,STATE_S25,STATE_S40,STATE_S41,STATE_S54,STATE_S55,STATE_S54,STATE_S55,STATE_S50,STATE_S51,STATE_S54,STATE_S55,STATE_S50,STATE_S51,STATE_S44,STATE_S45,STATE_S44,STATE_S45,STATE_S40,STATE_S41,STATE_S44,STATE_S45,STATE_S60,STATE_S61,STATE_S74,STATE_S75,STATE_S74,STATE_S75,STATE_S70,STATE_S71,STATE_S74,STATE_S75,STATE_S70,STATE_S71,STATE_S64,STATE_S65,STATE_S64,STATE_S65,STATE_S60,STATE_S61,STATE_S64,STATE_S65};
++
++static unsigned char state_table_num_down[STATE_NUMS_TOTAL] = {
++STATE_S0,STATE_S1,STATE_S24,STATE_S25,STATE_S24,STATE_S25,STATE_S20,STATE_S21,STATE_S24,STATE_S25,STATE_S10,STATE_S11,STATE_S34,STATE_S35,STATE_S34,STATE_S35,STATE_S30,STATE_S31,STATE_S34,STATE_S35,STATE_S20,STATE_S21,STATE_S4,STATE_S5,STATE_S4,STATE_S5,STATE_S0,STATE_S1,STATE_S4,STATE_S5,STATE_S30,STATE_S31,STATE_S14,STATE_S15,STATE_S14,STATE_S15,STATE_S10,STATE_S11,STATE_S14,STATE_S15,STATE_S40,STATE_S41,STATE_S64,STATE_S65,STATE_S64,STATE_S65,STATE_S60,STATE_S61,STATE_S64,STATE_S65,STATE_S50,STATE_S51,STATE_S74,STATE_S75,STATE_S74,STATE_S75,STATE_S70,STATE_S71,STATE_S74,STATE_S75,STATE_S60,STATE_S61,STATE_S44,STATE_S45,STATE_S44,STATE_S45,STATE_S40,STATE_S41,STATE_S44,STATE_S45,STATE_S70,STATE_S71,STATE_S54,STATE_S55,STATE_S54,STATE_S55,STATE_S50,STATE_S51,STATE_S54,STATE_S55};
++
++static unsigned char state_table_ANY_OTHER_down[STATE_NUMS_TOTAL] = {
++STATE_S0,STATE_S1,STATE_S4,STATE_S5,STATE_S4,STATE_S5,STATE_S0,STATE_S1,STATE_S4,STATE_S5,STATE_S10,STATE_S11,STATE_S14,STATE_S15,STATE_S14,STATE_S15,STATE_S10,STATE_S11,STATE_S14,STATE_S15,STATE_S20,STATE_S21,STATE_S24,STATE_S25,STATE_S24,STATE_S25,STATE_S20,STATE_S21,STATE_S24,STATE_S25,STATE_S30,STATE_S31,STATE_S34,STATE_S35,STATE_S34,STATE_S35,STATE_S30,STATE_S31,STATE_S34,STATE_S35,STATE_S40,STATE_S41,STATE_S44,STATE_S45,STATE_S44,STATE_S45,STATE_S40,STATE_S41,STATE_S44,STATE_S45,STATE_S50,STATE_S51,STATE_S54,STATE_S55,STATE_S54,STATE_S55,STATE_S50,STATE_S51,STATE_S54,STATE_S55,STATE_S60,STATE_S61,STATE_S64,STATE_S65,STATE_S64,STATE_S65,STATE_S60,STATE_S61,STATE_S64,STATE_S65,STATE_S70,STATE_S71,STATE_S74,STATE_S75,STATE_S74,STATE_S75,STATE_S70,STATE_S71,STATE_S74,STATE_S75};
++
++
++
++#define DOWN_TABLES_SIZE 6
++
++
++static unsigned char *down_tables[DOWN_TABLES_SIZE] = {
++ state_table_LSHIFT_down,state_table_RSHIFT_down,state_table_2nd_down,state_table_caps_down,state_table_num_down,state_table_ANY_OTHER_down
++};
++
++
++#define SEE_LSHIFT_DOWN 0
++#define SEE_RSHIFT_DOWN 1
++#define SEE_2nd_DOWN 2
++#define SEE_caps_DOWN 3
++#define SEE_num_DOWN 4
++#define SEE_ANY_OTHER_DOWN 5
++#define DOWN_NOP -1
++
++
++static char down_modifs_ref[(NR_KEYCODES+1)] = {
++DOWN_NOP,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_LSHIFT_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_RSHIFT_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_2nd_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_caps_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_num_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN,SEE_ANY_OTHER_DOWN};
++
++
++static unsigned char extmodif_map_2nd[STATE_NUMS_TOTAL] = {0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1};
++static unsigned char extmodif_map_CAPS[STATE_NUMS_TOTAL] = {0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1};
++static unsigned char extmodif_map_NUM[STATE_NUMS_TOTAL] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
++
++#define EXTMODIF_SHOWSTAT_KEYMAX 4
++
++static unsigned char *extmodif_status_tables[EXTMODIF_SHOWSTAT_KEYMAX] = {
++NULL,extmodif_map_2nd,extmodif_map_CAPS,extmodif_map_NUM};
++
++
++static unsigned char extmove_map_2nd[STATE_NUMS_TOTAL] = {STATE_S6,STATE_S7,STATE_S2,STATE_S3,STATE_S4,STATE_S5,STATE_S0,STATE_S1,STATE_S8,STATE_S9,STATE_S16,STATE_S17,STATE_S12,STATE_S13,STATE_S14,STATE_S15,STATE_S10,STATE_S11,STATE_S18,STATE_S19,STATE_S26,STATE_S27,STATE_S22,STATE_S23,STATE_S24,STATE_S25,STATE_S20,STATE_S21,STATE_S28,STATE_S29,STATE_S36,STATE_S37,STATE_S32,STATE_S33,STATE_S34,STATE_S35,STATE_S30,STATE_S31,STATE_S38,STATE_S39,STATE_S46,STATE_S47,STATE_S42,STATE_S43,STATE_S44,STATE_S45,STATE_S40,STATE_S41,STATE_S48,STATE_S49,STATE_S56,STATE_S57,STATE_S52,STATE_S53,STATE_S54,STATE_S55,STATE_S50,STATE_S51,STATE_S58,STATE_S59,STATE_S66,STATE_S67,STATE_S62,STATE_S63,STATE_S64,STATE_S65,STATE_S60,STATE_S61,STATE_S68,STATE_S69,STATE_S76,STATE_S77,STATE_S72,STATE_S73,STATE_S74,STATE_S75,STATE_S70,STATE_S71,STATE_S78,STATE_S79};
++static unsigned char extmove_map_CAPS[STATE_NUMS_TOTAL] = {STATE_S10,STATE_S11,STATE_S12,STATE_S13,STATE_S14,STATE_S15,STATE_S16,STATE_S17,STATE_S18,STATE_S19,STATE_S0,STATE_S1,STATE_S2,STATE_S3,STATE_S4,STATE_S5,STATE_S6,STATE_S7,STATE_S8,STATE_S9,STATE_S30,STATE_S31,STATE_S32,STATE_S33,STATE_S34,STATE_S35,STATE_S36,STATE_S37,STATE_S38,STATE_S39,STATE_S20,STATE_S21,STATE_S22,STATE_S23,STATE_S24,STATE_S25,STATE_S26,STATE_S27,STATE_S28,STATE_S29,STATE_S50,STATE_S51,STATE_S52,STATE_S53,STATE_S54,STATE_S55,STATE_S56,STATE_S57,STATE_S58,STATE_S59,STATE_S40,STATE_S41,STATE_S42,STATE_S43,STATE_S44,STATE_S45,STATE_S46,STATE_S47,STATE_S48,STATE_S49,STATE_S70,STATE_S71,STATE_S72,STATE_S73,STATE_S74,STATE_S75,STATE_S76,STATE_S77,STATE_S78,STATE_S79,STATE_S60,STATE_S61,STATE_S62,STATE_S63,STATE_S64,STATE_S65,STATE_S66,STATE_S67,STATE_S68,STATE_S69};
++static unsigned char extmove_map_NUM[STATE_NUMS_TOTAL] = {STATE_S20,STATE_S21,STATE_S22,STATE_S23,STATE_S24,STATE_S25,STATE_S26,STATE_S27,STATE_S28,STATE_S29,STATE_S30,STATE_S31,STATE_S32,STATE_S33,STATE_S34,STATE_S35,STATE_S36,STATE_S37,STATE_S38,STATE_S39,STATE_S0,STATE_S1,STATE_S2,STATE_S3,STATE_S4,STATE_S5,STATE_S6,STATE_S7,STATE_S8,STATE_S9,STATE_S10,STATE_S11,STATE_S12,STATE_S13,STATE_S14,STATE_S15,STATE_S16,STATE_S17,STATE_S18,STATE_S19,STATE_S60,STATE_S61,STATE_S62,STATE_S63,STATE_S64,STATE_S65,STATE_S66,STATE_S67,STATE_S68,STATE_S69,STATE_S70,STATE_S71,STATE_S72,STATE_S73,STATE_S74,STATE_S75,STATE_S76,STATE_S77,STATE_S78,STATE_S79,STATE_S40,STATE_S41,STATE_S42,STATE_S43,STATE_S44,STATE_S45,STATE_S46,STATE_S47,STATE_S48,STATE_S49,STATE_S50,STATE_S51,STATE_S52,STATE_S53,STATE_S54,STATE_S55,STATE_S56,STATE_S57,STATE_S58,STATE_S59};
++
++#define EXTMODIF_MOVESTAT_KEYMAX 4
++
++static unsigned char *extmodif_move_tables[EXTMODIF_MOVESTAT_KEYMAX] = {
++NULL,extmove_map_2nd,extmove_map_CAPS,extmove_map_NUM};
++
++
++
++typedef struct shappda_holdkey_info {
++ int type;
++ int character;
++ void (*func)(void);
++} shappda_holdkey_info;
++
++#define HOLDKEYTYPE_CHAR 1
++#define HOLDKEYTYPE_FUNC 2
++
++static shappda_holdkey_info shappda_holdkey_UserDef = {
++ type: HOLDKEYTYPE_CHAR,
++ character: SLKEY_EXCLAM,
++ func: NULL
++};
++static shappda_holdkey_info shappda_holdkey_Mail = {
++ type: HOLDKEYTYPE_CHAR,
++ character: SLKEY_MAIL2,
++ func: NULL
++};
++
++static shappda_holdkey_info *holdkey_info[(NR_KEYCODES+1)] = {
++NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&shappda_holdkey_UserDef,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&shappda_holdkey_Mail,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
++
++
++static unsigned char *state_to_keymap[STATE_NUMS_TOTAL] = {
++rawkeytable_table_NormalLower,rawkeytable_table_NormalUpper,rawkeytable_table_2ndLower,rawkeytable_table_2ndUpper,rawkeytable_table_2ndLower,rawkeytable_table_2ndUpper,rawkeytable_table_2ndLower,rawkeytable_table_2ndUpper,rawkeytable_table_2ndLower,rawkeytable_table_2ndUpper,rawkeytable_table_NormalLower,rawkeytable_table_NormalUpper,rawkeytable_table_2ndLower,rawkeytable_table_2ndUpper,rawkeytable_table_2ndLower,rawkeytable_table_2ndUpper,rawkeytable_table_2ndLower,rawkeytable_table_2ndUpper,rawkeytable_table_2ndLower,rawkeytable_table_2ndUpper,rawkeytable_table_NumlockLower,rawkeytable_table_NumlockUpper,rawkeytable_table_Num2ndLower,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndLower,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndLower,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndLower,rawkeytable_table_Num2ndUpper,rawkeytable_table_NumlockLower,rawkeytable_table_NumlockUpper,rawkeytable_table_Num2ndLower,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndLower,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndLower,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndLower,rawkeytable_table_Num2ndUpper,rawkeytable_table_NormalUpper,rawkeytable_table_NormalUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_NormalUpper,rawkeytable_table_NormalUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_NumlockUpper,rawkeytable_table_NumlockUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_NumlockUpper,rawkeytable_table_NumlockUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper};
++
++
++#endif /* ! __KEYTABLE_H_INCLUDED__ */
+diff -Nur linux_c860_org/drivers/char/tosa_rawmap_rollover.h linux/drivers/char/tosa_rawmap_rollover.h
+--- linux_c860_org/drivers/char/tosa_rawmap_rollover.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/char/tosa_rawmap_rollover.h 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,27 @@
++#ifndef __TOSA_RAWMAP_ROLLOVER_H__
++#define __TOSA_RAWMAP_ROLLOVER_H__
++
++#define ROLLOVER_NO_FLAG 0x00
++#define ROLLOVER_TAB 0x01
++#define ROLLOVER_DIRECT_ON 0x02
++#define ROLLOVER_HORIZONTAL 0x04
++#define ROLLOVER_VERTICAL 0x08
++#define ROLLOVER_ENTQUESPC 0x10
++#define ROLLOVER_LSHIFT 0x20
++#define ROLLOVER_RSHIFT 0x40
++#define ROLLOVER_FUNCTION 0x80
++
++#define ROLLOVER_CHECK_FLAG(a, b) (((a) & (b)) != 0)
++
++static unsigned int rollover_flag_table[(NR_KEYCODES+1)] = {
++ ROLLOVER_NO_FLAG,
++ /*0*/ ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG,
++ /*1*/ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG,
++ /*2*/ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_ENTQUESPC/**/, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG,
++ /*3*/ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_DIRECT_ON/**/, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_LSHIFT/**/, ROLLOVER_RSHIFT, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG,
++ /*4*/ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_DIRECT_ON/**/, ROLLOVER_DIRECT_ON/**/, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_RSHIFT/**/, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG,
++ /*5*/ROLLOVER_TAB/**/, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_DIRECT_ON/**/, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_VERTICAL/**/, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_FUNCTION/**/, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG,
++ /*6*/ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_ENTQUESPC/**/, ROLLOVER_DIRECT_ON/**/, ROLLOVER_NO_FLAG, ROLLOVER_HORIZONTAL/**/, ROLLOVER_VERTICAL/**/, ROLLOVER_HORIZONTAL/**/, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG,
++ /*7*/ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG, ROLLOVER_NO_FLAG
++};
++#endif // end __TOSA_RAWMAP_ROLLOVER_H__
+diff -Nur linux_c860_org/drivers/char/tosa_ts.c linux/drivers/char/tosa_ts.c
+--- linux_c860_org/drivers/char/tosa_ts.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/char/tosa_ts.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,807 @@
++/*
++ * drivers/char/tosa_ts.c
++ *
++ * (C) Copyright 2004 Lineo Solutions, Inc.
++ *
++ * May be copied or modified under the terms of the GNU General Public
++ * License. See linux/COPYING for more information.
++ *
++ * Based on:
++ * cotulla_ts.c
++ *
++ */
++
++/***************************************************************************/
++
++#include <linux/config.h>
++#include <linux/init.h>
++#include <linux/poll.h>
++#include <linux/delay.h>
++#include <linux/ioctl.h>
++#include <linux/ac97_codec.h>
++#include <linux/sched.h>
++#include <linux/tqueue.h>
++#include <linux/module.h>
++#include <linux/proc_fs.h>
++
++#include <asm/segment.h>
++#include <asm/uaccess.h>
++#include <asm/arch/hardware.h>
++#include <asm/arch/irqs.h>
++#include <asm/arch/tosa_wm9712.h>
++#include <asm/sharp_apm.h>
++
++#define TS_MAJOR 11
++#define ADD_TS_TIMER (HZ / 120)
++/* AC97 Touch Screen channel */
++#define ADCH_TPX 0x01
++#define ADCH_TPY 0x02
++/* AC97 Touch Screen bits */
++#define TSR1_POLL (1<<15)
++#define TSR1_COO (1<<11)
++#define TSR1_CTC (1<<10)
++#define TSR1_SLEN (1<< 3)
++#define TSR2_RPR (1<<13)
++#define TSR2_45W (1<<12)
++#define TSR2_PDEN (1<<11)
++#define TSR2_WAIT (1<< 9)
++#define TSR2_PIL (1<< 8)
++#define CODEC_PENDOWN (1<< 3)
++
++#define TS_REG1_POLL 0x8000
++#define TS_REG1_DEFVAL 0x0000
++#define TS_REG2_DEFVAL 0xe030
++
++#define DBG_LEVEL 0
++
++#define DBG_L1 1
++#define DBG_L2 2
++#define DBG_L3 3
++
++#define DEBUG(level, x, args...) \
++ if( level <= DBG_LEVEL ) printk("%s: " x, __FUNCTION__ , ## args)
++
++#define DEV_NAME "ts"
++
++int ts_type = 0;
++
++static DECLARE_WAIT_QUEUE_HEAD(ts_proc);
++
++static DECLARE_WAIT_QUEUE_HEAD(pd_mloop);
++
++static struct timer_list tp_main_timer;
++static unsigned char tp_timer_on = 0;
++static unsigned char ac97_on = 0;
++static unsigned char penup_irq = 1;
++
++int ac97_ad_input(int, unsigned short *);
++static void ts_interrupt(int, void*, struct pt_regs*);
++
++#define BUFSIZE 128
++
++typedef struct {
++ unsigned short xd;
++ unsigned short yd;
++ unsigned char pressure;
++} ts_pos_t;
++
++typedef struct {
++ short pressure;
++ short x;
++ short y;
++ short millisecs;
++} TS_EVENT;
++
++static DECLARE_WAIT_QUEUE_HEAD(queue);
++struct fasync_struct *fasync;
++static TS_EVENT tbuf[BUFSIZE], tc;
++static int raw_max_x, raw_max_y;
++static int res_x, res_y;
++static int raw_min_x, raw_min_y;
++static int cal_ok, x_rev, y_rev, xyswap;
++static int head = 0, tail = 0;
++
++#ifdef CONFIG_PM
++static int tp_suspend = 0;
++#endif /* CONFIG_PM */
++
++#define REMOVE_TP_NOISE_BY_SW
++/* #define REMOVE_TP_NOISE_BY_HW */
++
++#if 1 // 2003/9/4 Noise reduction
++#define TOUCH_PANEL_AVERAGE 5
++#define DEFAULT_TP_WAIT_VGA 25
++#define DEFAULT_TP_WAIT_QVGA 44
++#define SIMPLE_AVERAGE
++
++#define CCNT(a) asm("mrc p14, 0, %0, C1, C0, 0" : "=r"(a))
++#define CCNT_ON() {int pmnc = 1;asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(pmnc));}
++#define CCNT_OFF() {int pmnc = 0;asm("mcr p14, 0, %0, C0, C0, 0" : : "r"(pmnc));}
++static unsigned long g_TpWaitVga = DEFAULT_TP_WAIT_VGA;
++static unsigned long g_TpWaitQvga = DEFAULT_TP_WAIT_QVGA;
++static unsigned short XBuf[TOUCH_PANEL_AVERAGE];
++static unsigned short YBuf[TOUCH_PANEL_AVERAGE];
++static int TpBufIdx = -1;
++extern int tc6393fb_isblank; // no H-Sync while blanking
++
++#define PROC_DIRNAME "ts"
++
++struct proc_dir_entry *proc_ts = NULL;
++typedef struct tosa_ts_entry {
++ unsigned long* addr;
++ unsigned long def_value;
++ char* name;
++ char* description;
++ unsigned short low_ino;
++} tosa_ts_entry_t;
++static tosa_ts_entry_t tosa_ts_params[] = {
++/* { addr, def_value, name, description }*/
++ { &g_TpWaitVga, DEFAULT_TP_WAIT_VGA, "wait_vga","pen wait for VGA Screen" },
++ { &g_TpWaitQvga, DEFAULT_TP_WAIT_QVGA, "wait_qvga","pen wait for QVGA Screen"}
++};
++#define NUM_OF_TOSA_TS_ENTRY (sizeof(tosa_ts_params)/sizeof(tosa_ts_entry_t))
++
++static ssize_t tosa_ts_read_params(struct file *file, char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ int i_ino = (file->f_dentry->d_inode)->i_ino;
++ char outputbuf[15];
++ int count;
++ int i;
++ tosa_ts_entry_t *current_param = NULL;
++ if (*ppos>0) /* Assume reading completed in previous read*/
++ return 0;
++ for (i=0; i<NUM_OF_TOSA_TS_ENTRY; i++) {
++ if (tosa_ts_params[i].low_ino==i_ino) {
++ current_param = &tosa_ts_params[i];
++ break;
++ }
++ }
++ if (current_param==NULL) {
++ return -EINVAL;
++ }
++ count = sprintf(outputbuf, "%d\n",
++ *((volatile unsigned long *) current_param->addr));
++ *ppos += count;
++ if (count>nbytes) /* Assume output can be read at one time */
++ return -EINVAL;
++ if (copy_to_user(buf, outputbuf, count))
++ return -EFAULT;
++ return count;
++}
++
++static ssize_t tosa_ts_write_params(struct file *file, const char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ int i_ino = (file->f_dentry->d_inode)->i_ino;
++ tosa_ts_entry_t *current_param = NULL;
++ int i;
++ unsigned long param;
++ char *endp;
++
++ for (i=0; i<NUM_OF_TOSA_TS_ENTRY; i++) {
++ if(tosa_ts_params[i].low_ino==i_ino) {
++ current_param = &tosa_ts_params[i];
++ break;
++ }
++ }
++ if (current_param==NULL) {
++ return -EINVAL;
++ }
++
++ param = simple_strtoul(buf,&endp,0);
++ if (param == -1) {
++ *current_param->addr = current_param->def_value;
++ } else {
++ *current_param->addr = param;
++ }
++ return nbytes+endp-buf;
++}
++
++static struct file_operations proc_params_operations = {
++ read: tosa_ts_read_params,
++ write: tosa_ts_write_params,
++};
++
++static int init_procinfo(void)
++{
++ int i;
++ struct proc_dir_entry *entry;
++
++ proc_ts = proc_mkdir("driver/ts", NULL);
++ if (proc_ts == NULL) {
++ printk(KERN_ERR "ts: can't create /proc/driver/ts\n");
++ return -ENOMEM;
++ }
++ for (i=0; i<NUM_OF_TOSA_TS_ENTRY; i++) {
++ entry = create_proc_entry(tosa_ts_params[i].name,
++ S_IWUSR |S_IRUSR | S_IRGRP | S_IROTH,
++ proc_ts);
++ if (entry) {
++ tosa_ts_params[i].low_ino = entry->low_ino;
++ entry->proc_fops = &proc_params_operations;
++ } else {
++ int j;
++ for (j=0; j<i; j++) {
++ remove_proc_entry(tosa_ts_params[i].name,
++ proc_ts);
++ }
++ remove_proc_entry("driver/ts", &proc_root);
++ proc_ts = 0;
++ return -ENOMEM;
++ }
++ }
++
++ return 0;
++}
++
++static void cleanup_procinfo(void)
++{
++ int i;
++ for (i=0; i<NUM_OF_TOSA_TS_ENTRY; i++) {
++ remove_proc_entry(tosa_ts_params[i].name, proc_ts);
++ }
++ remove_proc_entry("driver/ts", NULL);
++ proc_ts = 0;
++}
++#endif
++
++static int read_xydata(ts_pos_t *tp)
++{
++#if defined(REMOVE_TP_NOISE_BY_SW) || defined(REMOVE_TP_NOISE_BY_HW)
++ unsigned short dx, dy;
++ unsigned long tx, ty;
++ int i, ret = 0, penstate = 0;
++
++ if (TpBufIdx<0) {
++ for (i=0; i<TOUCH_PANEL_AVERAGE; i++) {
++ if( (ret = ac97_ad_input(ADCH_TPX, &dx)) < 0 ) return ret;
++ XBuf[i] = dx & 0x0fff;
++ if( (ret = ac97_ad_input(ADCH_TPY, &dy)) < 0 ) return ret;
++ YBuf[i] = dy & 0x0fff;
++ }
++ TpBufIdx = 0;
++ } else {
++ if( (ret = ac97_ad_input(ADCH_TPX, &dx)) < 0 ) return ret;
++ XBuf[TpBufIdx] = dx & 0x0fff;
++ if( (ret = ac97_ad_input(ADCH_TPY, &dy)) < 0 ) return ret;
++ YBuf[TpBufIdx] = dy & 0x0fff;
++ if (++TpBufIdx>=TOUCH_PANEL_AVERAGE) TpBufIdx = 0;
++ }
++
++ /* If pen Up or Down */
++ penstate = (dy & 0x8000)?1:0;
++
++#if TOUCH_PANEL_AVERAGE<3
++#define SIMPLE_AVERAGE
++#endif
++ {
++#ifndef SIMPLE_AVERAGE
++ unsigned short max_dx=0,max_dy=0;
++ unsigned short min_dx=0x0fff,min_dy=0x0fff;
++#endif
++
++ for(i = 0, ty = 0, tx = 0; i < (TOUCH_PANEL_AVERAGE); i++) {
++ dx = XBuf[i];
++ dy = YBuf[i];
++#ifndef SIMPLE_AVERAGE
++ if(dx > max_dx) max_dx = dx;
++ if(dx < min_dx) min_dx = dx;
++ if(dy > max_dy) max_dy = dy;
++ if(dy < min_dy) min_dy = dy;
++#endif
++ tx += dx;
++ ty += dy;
++ }
++#ifndef SIMPLE_AVERAGE
++ tp->xd = (tx - max_dx - min_dx)/ (TOUCH_PANEL_AVERAGE-2);
++ tp->yd = (ty - max_dy - min_dy)/ (TOUCH_PANEL_AVERAGE-2);
++#else
++ tp->xd = tx/ TOUCH_PANEL_AVERAGE;
++ tp->yd = ty/ TOUCH_PANEL_AVERAGE;
++#endif
++ }
++#else
++ unsigned short dx, dy, tx, ty;
++ int i, ret = 0;
++
++ for(i = 0, ty = 0, tx = 0; i < TOUCH_PANEL_AVERAGE; i++) {
++ /* X */
++ if( (ret = ac97_ad_input(ADCH_TPX, &dx)) < 0 ) return ret;
++ /* Y */
++ if( (ret = ac97_ad_input(ADCH_TPY, &dy)) < 0 ) return ret;
++
++ tx += (dx & 0x0fff);
++ ty += (dy & 0x0fff);
++ }
++
++ /* If pen Up or Down */
++ penstate = (dy & 0x8000)?1:0;
++
++ tp->xd = tx / TOUCH_PANEL_AVERAGE;
++ tp->yd = ty / TOUCH_PANEL_AVERAGE;
++#endif
++ return penstate;
++}
++
++static void print_par(void)
++{
++ printk(" Kernel ==> cal_ok = %d\n",cal_ok);
++ printk(" Kernel ==> raw_max_x = %d\n",raw_max_x);
++ printk(" Kernel ==> raw_max_y = %d\n",raw_max_y);
++ printk(" Kernel ==> res_x = %d\n",res_x);
++ printk(" Kernel ==> res_y = %d\n",res_y);
++ printk(" Kernel ==> raw_min_x = %d\n",raw_min_x);
++ printk(" Kernel ==> raw_min_y = %d\n",raw_min_y);
++ printk(" Kernel ==> xyswap = %d\n",xyswap);
++ printk(" Kernel ==> x_rev = %d\n",x_rev);
++ printk(" Kernel ==> y_rev = %d\n",y_rev);
++}
++
++void ts_clear(void)
++{
++ int i;
++
++ for (i = 0; i < BUFSIZE; i++) {
++ tbuf[i].pressure = 0;
++ tbuf[i].x = 0;
++ tbuf[i].y = 0;
++ tbuf[i].millisecs = 0;
++ }
++ head = tail = 0;
++}
++
++static TS_EVENT get_data(void)
++{
++ int last = tail;
++ if (++tail == BUFSIZE) { tail = 0; }
++ return tbuf[last];
++}
++
++static void new_data(void)
++{
++ tc.millisecs = jiffies;
++ tbuf[head++] = tc;
++ if( head >= BUFSIZE )
++ head = 0;
++ if( head == tail && ++tail >= BUFSIZE )
++ tail = 0;
++ if( fasync )
++ kill_fasync(&fasync, SIGIO, POLL_IN);
++ wake_up_interruptible(&queue);
++}
++
++static void ts_timer(unsigned long irq);
++
++static void ts_timer_clear(void)
++{
++ if ( tp_timer_on )
++ del_timer(&tp_main_timer);
++ tp_timer_on = 0;
++}
++
++static void ts_timer_set(void)
++{
++ ts_timer_clear();
++ init_timer(&tp_main_timer);
++ tp_main_timer.data = IRQ_GPIO_TP_INT;
++ tp_main_timer.function = ts_timer;
++ tp_main_timer.expires = jiffies + ADD_TS_TIMER;
++ add_timer(&tp_main_timer);
++ tp_timer_on = 1;
++}
++
++static void ts_timer(unsigned long irq)
++{
++ wake_up(&ts_proc);
++}
++
++static int ts_pendown(void *unuse)
++{
++ int penstate;
++ ts_pos_t pos_dt;
++
++ while ( 1 ) {
++ interruptible_sleep_on(&pd_mloop);
++
++#ifdef CONFIG_PM
++ lock_FCS(POWER_MODE_TOUCH, 1); // not enter FCS mode.
++#endif /* CONFIG_PM */
++ wm9712_power_mode_ts(WM9712_PWR_TP_CONV);
++ while ( 1 ) {
++#ifdef CONFIG_PM
++ if ( !tp_suspend )
++#endif /* CONFIG_PM */
++ {
++ if ( (penstate = read_xydata(&pos_dt)) >= 0 ) {
++ if ( !penstate ) //penup
++ penup_irq = 1;
++ tc.x = pos_dt.xd;
++ tc.y = pos_dt.yd;
++ tc.pressure = 1;
++ new_data();
++ DEBUG(DBG_L3, "pen position (%d,%d,%d)\n",
++ (int)tc.y, (int)tc.x, tc.pressure);
++ }
++ /* wait */
++ if ( !penup_irq ) {
++ ts_timer_set();
++ interruptible_sleep_on(&ts_proc);
++ }
++ if ( penup_irq ){
++ ts_timer_clear();
++ /* setting interrupt edge */
++ set_GPIO_IRQ_edge(GPIO_TP_INT, GPIO_RISING_EDGE);
++ GEDR(GPIO_TP_INT) = GPIO_bit(GPIO_TP_INT); //Clear detect
++#ifdef CONFIG_PM
++ lock_FCS(POWER_MODE_TOUCH, 0); // not enter FCS mode.
++#endif /* CONFIG_PM */
++ wm9712_power_mode_ts(WM9712_PWR_TP_WAIT);
++ TpBufIdx = -1;
++ if ( tc.pressure ){
++ tc.pressure = 0;
++ new_data();
++ }
++ break;
++ }
++ }
++#ifdef CONFIG_PM
++ else {
++ DEBUG(DBG_L1, "suspend...\n");
++#ifdef CONFIG_PM
++ lock_FCS(POWER_MODE_TOUCH, 0); // enter FCS mode.
++#endif /* CONFIG_PM */
++ break;
++ }
++#endif
++ }
++ }
++
++}
++
++static void ts_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++{
++ if( (GPLR(GPIO_TP_INT) & GPIO_bit(GPIO_TP_INT)) == GPIO_bit(GPIO_TP_INT) ) {
++ /* pen down irq */
++ penup_irq = 0;
++
++ /* setting interrupt edge */
++ set_GPIO_IRQ_edge(GPIO_TP_INT, GPIO_FALLING_EDGE);
++ GEDR(GPIO_TP_INT) = GPIO_bit(GPIO_TP_INT); //Clear detect
++ wake_up(&pd_mloop);
++ } else {
++ /* setting interrupt edge */
++ set_GPIO_IRQ_edge(GPIO_TP_INT, GPIO_RISING_EDGE);
++ GEDR(GPIO_TP_INT) = GPIO_bit(GPIO_TP_INT); //Clear detect
++ /* pen up irq */
++ penup_irq = 1;
++ wake_up(&ts_proc);
++ }
++ return;
++}
++
++static int ts_open(struct inode *, struct file *);
++static int ts_release(struct inode *, struct file *);
++static int ts_fasync(int fd, struct file *filp, int on);
++static ssize_t ts_read(struct file *, char *, size_t, loff_t *);
++static unsigned int ts_poll(struct file *, poll_table *);
++static int ts_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
++struct file_operations ts_fops = {
++ open: ts_open,
++ release: ts_release,
++ fasync: ts_fasync,
++ read: ts_read,
++ poll: ts_poll,
++ ioctl: ts_ioctl,
++};
++
++static void ts_exit(void)
++{
++ ts_timer_clear();
++ ts_clear();
++ free_irq(IRQ_GPIO_TP_INT, NULL);
++ wm9712_power_mode_ts(WM9712_PWR_OFF);
++
++ pxa_ac97_put(&ac97_on);
++}
++
++#ifdef MODULE
++static void __exit ac97_ts_cleanup(void)
++{
++ ts_exit();
++ unregister_chrdev(TS_MAJOR, "ts");
++}
++module_exit(ac97_ts_cleanup);
++#endif /* MODULE */
++
++extern int tc6393fb_lcdMode;
++
++int ac97_ad_input(int ch, unsigned short *dat)
++{
++ unsigned short val = 0;
++ unsigned short adsel = (ch << 12) & 0x7000;
++ unsigned long timeo;
++ volatile unsigned long t1=0,t2=0;
++ volatile int isVga=(tc6393fb_lcdMode==1)?1:0;
++ volatile unsigned long tpwait=200;
++
++
++ if (ch >= 4){
++ /* Conversion start */
++ ac97_write(AC97_TS_REG1, (adsel | TS_REG1_DEFVAL|TS_REG1_POLL));
++
++ for(timeo = 0x10000; timeo > 0; timeo--) {
++ val = ac97_read(AC97_TS_REG1);
++ //udelay(100);
++ if( val & TS_REG1_POLL ) continue;
++ val = ac97_read(AC97_TS_READBACK);
++ if( (val & 0x7000) == adsel ) break;
++ }
++ if( !timeo ) return -EBUSY;
++
++ // *dat = val & 0xfff;
++ *dat = val;
++ return 0;
++ }
++
++
++#if defined(REMOVE_TP_NOISE_BY_SW) || defined(REMOVE_TP_NOISE_BY_HW)
++
++#ifndef REMOVE_TP_NOISE_BY_HW
++ tpwait *= (isVga)?g_TpWaitVga:g_TpWaitQvga;
++ CCNT_ON();
++ if (!tc6393fb_isblank) {
++ /* Sync */
++ while((GPLR(GPIO_VGA_LINE) & GPIO_bit(GPIO_VGA_LINE)) == 0)
++ ;
++ while((GPLR(GPIO_VGA_LINE) & GPIO_bit(GPIO_VGA_LINE)) != 0)
++ ;
++ }
++ if (tpwait>0) {
++ CCNT(t1);
++ CCNT(t2);
++ while((t2-t1)<tpwait) {
++ CCNT(t2);
++ }
++ }
++#endif
++
++ /* Conversion start */
++ ac97_write(AC97_TS_REG1, (adsel | TS_REG1_DEFVAL|TS_REG1_POLL));
++
++#ifndef REMOVE_TP_NOISE_BY_HW
++ CCNT_OFF();
++#endif
++
++ /* Busy wait */
++ for(timeo = 0x10000; timeo > 0; timeo--) {
++ val = ac97_read(AC97_TS_REG1);
++ if((val & TS_REG1_POLL) == 0) break;
++ }
++ if( !timeo ) return -EBUSY;
++
++ /* Read AD */
++ val = ac97_read(AC97_TS_READBACK);
++
++ if( (val & 0x8000) == 0) return -EBUSY;
++
++ if( (val & 0x7000) == adsel ) {
++ *dat = val;
++ return 0;
++ }
++ return -EBUSY;
++#else
++ /* Conversion start */
++ ac97_write(AC97_TS_REG1, (adsel | TS_REG1_DEFVAL|TS_REG1_POLL));
++
++ for(timeo = 0x10000; timeo > 0; timeo--) {
++ val = ac97_read(AC97_TS_REG1);
++ //udelay(100);
++ if( val & TS_REG1_POLL ) continue;
++ val = ac97_read(AC97_TS_READBACK);
++ if( (val & 0x7000) == adsel ) break;
++ }
++ if( !timeo ) return -EBUSY;
++
++ *dat = val;
++ return 0;
++#endif
++}
++
++static int ts_init(void)
++{
++ pxa_ac97_get(&codec, &ac97_on);
++
++ wm9712_power_mode_ts(WM9712_PWR_TP_WAIT);
++ /* Touch Screen Initialize */
++#ifdef REMOVE_TP_NOISE_BY_HW
++ ac97_write(AC97_TS_REG2, 0xe0f0);
++#else
++ ac97_write(AC97_TS_REG2, TS_REG2_DEFVAL);
++#endif
++ ac97_write(AC97_TS_REG1, TS_REG1_DEFVAL);
++ ac97_bit_set(AC97_ADITFUNC1, (1<<1));
++
++ /* GPIO3/PENDOWN wakeup */
++ ac97_bit_set(AC97_GPIO_WAKE_UP, CODEC_PENDOWN);
++
++ ts_clear();
++
++ /* Init queue */
++ //X kernel_thread(ts_pendown, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
++
++ /* Interrupt setting */
++ set_GPIO_mode(GPIO32_SDATA_IN1_AC97_MD);
++ set_GPIO_IRQ_edge(GPIO_TP_INT, GPIO_RISING_EDGE);
++ GEDR(GPIO_TP_INT) = GPIO_bit(GPIO_TP_INT);
++ if( request_irq(IRQ_GPIO_TP_INT, ts_interrupt, SA_INTERRUPT, "ts", NULL) ) {
++ DEBUG(DBG_L1, "IRQ error %d\n", IRQ_GPIO_TP_INT);
++ return -EBUSY;
++ }
++
++ // printk(KERN_INFO "Tosa Touch Screen driver initialized\n");
++
++ return 0;
++}
++
++static int __init ac97_ts_init(void)
++{
++ ac97_on = 0;
++
++ raw_max_x = 1024;
++ raw_max_y = 1024;
++ raw_min_x = 0;
++ raw_min_y = 0;
++ res_x = 480;
++ res_y = 640;
++ cal_ok = 0;
++ x_rev = 0;
++ y_rev = 0;
++ xyswap = 0;
++
++ ts_clear();
++
++ if( register_chrdev(TS_MAJOR,DEV_NAME, &ts_fops) ) {
++ printk("unable to get major %d for touch screen\n", TS_MAJOR);
++ ts_exit();
++ }
++
++ init_procinfo();
++
++ kernel_thread(ts_pendown, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
++
++ return 0;
++}
++
++module_init(ac97_ts_init);
++
++/*
++ * Driver functions
++ */
++static int ts_open(struct inode *inode, struct file *file)
++{
++ if( ts_init() < 0 ) {
++ ts_exit();
++ return -EINVAL;
++ }
++
++ MOD_INC_USE_COUNT;
++ return 0;
++}
++
++
++static int ts_release(struct inode *inode, struct file *file)
++{
++ ts_exit();
++
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++static int ts_fasync(int fd, struct file *filp, int on)
++{
++ int retval;
++
++ retval = fasync_helper(fd, filp, on, &fasync);
++ if( retval < 0 ) return retval;
++ return 0;
++}
++
++static ssize_t ts_read(struct file *file, char *buffer,
++ size_t count, loff_t *ppos)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ TS_EVENT t, r;
++ int i;
++
++ if( head == tail ) {
++ if( file->f_flags & O_NONBLOCK )
++ return -EAGAIN;
++ add_wait_queue(&queue, &wait);
++ current->state = TASK_INTERRUPTIBLE;
++ while( (head == tail)&& !signal_pending(current) ) {
++ schedule();
++ current->state = TASK_INTERRUPTIBLE;
++ }
++ current->state = TASK_RUNNING;
++ remove_wait_queue(&queue, &wait);
++ }
++
++ for(i = count ; i >= sizeof(TS_EVENT);
++ i -= sizeof(TS_EVENT), buffer += sizeof(TS_EVENT)) {
++ if( head == tail ) break;
++ t = get_data();
++ if( xyswap ) {
++ short tmp = t.x;
++ t.x = t.y;
++ t.y = tmp;
++ }
++ if( cal_ok ) {
++ r.x = (x_rev) ?
++ ((raw_max_x - t.x) * res_x) / (raw_max_x - raw_min_x) :
++ ((t.x - raw_min_x) * res_x) / (raw_max_x - raw_min_x);
++ r.y = (y_rev) ?
++ ((raw_max_y - t.y) * res_y) / (raw_max_y - raw_min_y) :
++ ((t.y - raw_min_y) * res_y) / (raw_max_y - raw_min_y);
++ } else {
++ r.x = t.x;
++ r.y = t.y;
++ }
++
++ r.pressure = t.pressure;
++ r.millisecs = t.millisecs;
++ DEBUG(DBG_L2, "ts_read(x, y, p) = (%d, %d, %d)\n",
++ (unsigned int)r.x, (unsigned int)r.y, (unsigned int)r.pressure);
++
++ copy_to_user(buffer,&r,sizeof(TS_EVENT));
++ }
++ return count - i;
++}
++
++static unsigned int ts_poll(struct file *filp, poll_table *wait)
++{
++ poll_wait(filp, &queue, wait);
++ if( head != tail )
++ return POLLIN | POLLRDNORM;
++ return 0;
++}
++
++static int ts_ioctl(struct inode *inode, struct file *file,
++ unsigned int cmd, unsigned long arg)
++{
++ switch(cmd) {
++ case 3: raw_max_x = arg; break;
++ case 4: raw_max_y = arg; break;
++ case 5: res_x = arg; break;
++ case 6: res_y = arg; break;
++ case 10: raw_min_x = arg; break;
++ case 11: raw_min_y = arg; break;
++ case 12: xyswap = arg; //New attribute for portrait modes
++ case 13: cal_ok = arg; //0 = Enable calibration ; 1 = Calibration OK
++ case 14: ts_clear(); break; //Clear all buffer data
++ case 15: x_rev = arg; break; //X axis reversed setting
++ case 16: y_rev = arg; break; //Y axis reversed setting
++ case 17: print_par(); break;
++ default: return -EINVAL;
++ }
++
++ return 0;
++}
++
++#ifdef CONFIG_PM
++void tosa_ts_suspend(void)
++{
++ DEBUG(DBG_L1, "in\n");
++ tp_suspend = 1;
++ ts_exit();
++ DEBUG(DBG_L1, "out\n");
++}
++
++void tosa_ts_resume(void)
++{
++ DEBUG(DBG_L1, "in\n");
++ tp_suspend = 0;
++ ts_init();
++ DEBUG(DBG_L1, "out\n");
++}
++#endif /* CONFIG_PM */
+diff -Nur linux_c860_org/drivers/char/tty_io.c linux/drivers/char/tty_io.c
+--- linux_c860_org/drivers/char/tty_io.c 2002-08-29 12:25:52.000000000 +0900
++++ linux/drivers/char/tty_io.c 2004-06-10 21:09:10.000000000 +0900
+@@ -730,6 +730,7 @@
+ ret = -ERESTARTSYS;
+ if (signal_pending(current))
+ break;
++ debug_lock_break(551);
+ if (current->need_resched)
+ schedule();
+ }
+diff -Nur linux_c860_org/drivers/ide/ide-cs.c linux/drivers/ide/ide-cs.c
+--- linux_c860_org/drivers/ide/ide-cs.c 2002-08-29 12:26:32.000000000 +0900
++++ linux/drivers/ide/ide-cs.c 2004-06-10 21:09:10.000000000 +0900
+@@ -32,6 +32,7 @@
+ Change Log
+ 12-Nov-2001 Lineo Japan, Inc.
+ 30-Jul-2002 Lineo Japan, Inc. for 2.4.18
++ 26-Feb-2004 Lineo Solutions, Inc. 2 slot support
+
+ ======================================================================*/
+
+@@ -72,7 +73,7 @@
+ #endif
+
+ #ifdef CONFIG_ARCH_SHARP_SL
+-extern int ide_resume_handling;
++extern int ide_resume_handling[];
+ #endif
+
+ /*====================================================================*/
+@@ -468,11 +469,11 @@
+ mod_timer(&link->release, jiffies + HZ/20);
+ break;
+ case CS_EVENT_CARD_INSERTION:
+-#ifdef CONFIG_ARCH_SHARP_SL
+- ide_resume_handling = 0;
+-#endif
+ link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
+ ide_config(link);
++#ifdef CONFIG_ARCH_SHARP_SL
++ ide_resume_handling[sharpsl_pcmcia_irq_to_sock(link->irq.AssignedIRQ)] = 0;
++#endif
+ break;
+ case CS_EVENT_PM_SUSPEND:
+ link->state |= DEV_SUSPEND;
+diff -Nur linux_c860_org/drivers/ide/ide-disk.c linux/drivers/ide/ide-disk.c
+--- linux_c860_org/drivers/ide/ide-disk.c 2002-08-29 12:26:32.000000000 +0900
++++ linux/drivers/ide/ide-disk.c 2004-06-10 21:09:10.000000000 +0900
+@@ -31,6 +31,7 @@
+ * Change Log
+ * 12-Nov-2001 Lineo Japan, Inc.
+ * 30-Jul-2002 Lineo Japan, Inc. for 2.4.18
++ * 26-Feb-2004 Lineo Solutions, Inc. 2 slot support
+ */
+
+ #define IDEDISK_VERSION "1.10"
+@@ -372,7 +373,8 @@
+ static ide_startstop_t do_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block)
+ {
+ #if defined(CONFIG_ARCH_SHARP_SL) && defined(CONFIG_PCMCIA)
+- if (!is_pcmcia_card_present(0)) {
++ ide_hwif_t *hwif = HWIF(drive);
++ if (!is_pcmcia_card_present(hwif->irq)) {
+ ide_end_request(0, HWGROUP(drive));
+ return ide_stopped;
+ }
+diff -Nur linux_c860_org/drivers/ide/ide-proc.c linux/drivers/ide/ide-proc.c
+--- linux_c860_org/drivers/ide/ide-proc.c 2002-08-29 12:26:32.000000000 +0900
++++ linux/drivers/ide/ide-proc.c 2004-06-10 21:09:10.000000000 +0900
+@@ -57,6 +57,7 @@
+ * Change Log
+ * 12-Nov-2001 Lineo Japan, Inc.
+ * 30-Jul-2002 Lineo Japan, Inc. for 2.4.18
++ * 26-Feb-2004 Lineo Solutions, Inc. 2 slot support
+ *
+ */
+
+@@ -456,8 +457,8 @@
+ }
+
+ #ifdef CONFIG_ARCH_SHARP_SL
+-static ide_drive_t *drive_save = NULL;
+-static u8 ide_info_buf[SECTOR_WORDS * 4 + 4];
++static ide_drive_t *drive_save[2] = { NULL, NULL };
++static u8 ide_info_buf[2][SECTOR_WORDS * 4 + 4];
+ #endif
+
+ static int proc_ide_read_identify
+@@ -470,8 +471,8 @@
+ unsigned short *val = ((unsigned short *)page) + 2;
+ char *out = ((char *)val) + (SECTOR_WORDS * 4);
+ #ifdef CONFIG_ARCH_SHARP_SL
+- drive_save = drive;
+- memcpy(ide_info_buf, page, SECTOR_WORDS * 4);
++ drive_save[sharpsl_pcmcia_irq_to_sock(HWIF(drive)->irq)] = drive;
++ memcpy(ide_info_buf[sharpsl_pcmcia_irq_to_sock(HWIF(drive)->irq)], page, SECTOR_WORDS * 4);
+ #endif
+ page = out;
+ do {
+@@ -487,13 +488,15 @@
+
+ #ifdef CONFIG_ARCH_SHARP_SL
+
+-int proc_ide_verify_identify()
++int proc_ide_verify_identify(int sock)
+ {
+ u8 buf[SECTOR_WORDS * 4 + 4];
++ int ret;
+
+- if (drive_save == NULL || proc_ide_get_identify(drive_save, buf))
++ if (drive_save[sock] == NULL || proc_ide_get_identify(drive_save[sock], buf))
+ return 0;
+- return memcmp(ide_info_buf, buf, SECTOR_WORDS * 4);
++ ret = memcmp(ide_info_buf[sock], buf, SECTOR_WORDS * 4);
++ return ret;
+ }
+
+ #endif
+@@ -777,7 +780,8 @@
+ drive->proc = NULL;
+ }
+ #ifdef CONFIG_ARCH_SHARP_SL
+- drive_save = NULL;
++ for (d = 0; d < 2; d++)
++ drive_save[d] = NULL;
+ #endif
+ }
+
+diff -Nur linux_c860_org/drivers/ide/ide.c linux/drivers/ide/ide.c
+--- linux_c860_org/drivers/ide/ide.c 2002-08-29 12:26:33.000000000 +0900
++++ linux/drivers/ide/ide.c 2004-06-10 21:09:10.000000000 +0900
+@@ -122,6 +122,7 @@
+ * Change Log
+ * 12-Nov-2001 Lineo Japan, Inc.
+ * 30-Jul-2002 Lineo Japan, Inc. for 2.4.18
++ * 26-Feb-2004 Lineo Solutions, Inc. 2 slot support
+ *
+ */
+
+@@ -201,7 +202,7 @@
+ ide_hwif_t ide_hwifs[MAX_HWIFS]; /* master data repository */
+
+ #if defined(CONFIG_ARCH_SHARP_SL) && defined(CONFIG_PCMCIA)
+-extern int ide_resume_handling;
++extern int ide_resume_handling[];
+ #endif
+
+ #if (DISK_RECOVERY_TIME > 0)
+@@ -548,7 +549,7 @@
+ {
+ byte stat = 0;
+ #if defined(CONFIG_ARCH_SHARP_SL) && defined(CONFIG_PCMCIA)
+- if (ide_resume_handling == 2)
++ if (ide_resume_handling[sharpsl_pcmcia_irq_to_sock(HWIF(drive)->irq)] == 2)
+ return 0;
+ #endif
+ if (drive->waiting_for_dma)
+@@ -712,11 +713,11 @@
+ byte tmp;
+
+ #if defined(CONFIG_ARCH_SHARP_SL) && defined(CONFIG_PCMCIA)
+- if (!is_pcmcia_card_present(0)) {
++ if (!is_pcmcia_card_present(hwif->irq)) {
+ hwgroup->poll_timeout = 0; /* done polling */
+ return ide_stopped;
+ }
+- if (ide_resume_handling == 2) {
++ if (ide_resume_handling[sharpsl_pcmcia_irq_to_sock(hwif->irq)] == 2) {
+ hwgroup->poll_timeout = 0; /* done polling */
+ return ide_stopped;
+ }
+@@ -1244,9 +1245,9 @@
+ ide_hwif_t *hwif = HWIF(drive);
+
+ #if defined(CONFIG_ARCH_SHARP_SL) && defined(CONFIG_PCMCIA)
+- if (!is_pcmcia_card_present(0))
++ if (!is_pcmcia_card_present(hwif->irq))
+ goto kill_rq;
+- if (ide_resume_handling == 2)
++ if (ide_resume_handling[sharpsl_pcmcia_irq_to_sock(hwif->irq)] == 2)
+ goto kill_rq;
+ #endif
+
+@@ -1625,7 +1626,7 @@
+ if (hwgroup->poll_timeout != 0) {
+ startstop = handler(drive);
+ #if defined(CONFIG_ARCH_SHARP_SL) && defined(CONFIG_PCMCIA)
+- } else if (!ide_resume_handling &&
++ } else if (!ide_resume_handling[sharpsl_pcmcia_irq_to_sock(hwif->irq)] &&
+ drive_is_ready(drive)) {
+ #else
+ } else if (drive_is_ready(drive)) {
+diff -Nur linux_c860_org/drivers/ieee1394/csr.c linux/drivers/ieee1394/csr.c
+--- linux_c860_org/drivers/ieee1394/csr.c 2002-08-26 14:39:22.000000000 +0900
++++ linux/drivers/ieee1394/csr.c 2004-06-10 21:09:10.000000000 +0900
+@@ -10,6 +10,7 @@
+ */
+
+ #include <linux/string.h>
++#include <linux/sched.h>
+
+ #include "ieee1394_types.h"
+ #include "hosts.h"
+diff -Nur linux_c860_org/drivers/input/keybdev.c linux/drivers/input/keybdev.c
+--- linux_c860_org/drivers/input/keybdev.c 2002-08-26 14:39:30.000000000 +0900
++++ linux/drivers/input/keybdev.c 2004-06-10 21:09:10.000000000 +0900
+@@ -26,6 +26,9 @@
+ * Should you need to contact me, the author, you can do so either by
+ * e-mail - mail your message to <vojtech@suse.cz>, or by paper mail:
+ * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic
++ *
++ * ChangeLog:
++ * 29-Aug-2003 SHARP Supported USB keybord for Tosa
+ */
+
+ #include <linux/config.h>
+@@ -107,6 +110,15 @@
+ }
+ #endif /* CONFIG_MAC_ADBKEYCODES || CONFIG_ADB_KEYBOARD */
+
++#ifdef CONFIG_ARCH_SHARP_SL
++ if (keycode > 255 || !keycode)
++ return -1;
++
++ handle_scancode(keycode & 0x7f, down);
++
++ return 0;
++#endif // end CONFIG_ARCH_SHARP_SL
++
+ if (keycode > 255 || !x86_keycodes[keycode])
+ return -1;
+
+diff -Nur linux_c860_org/drivers/macintosh/rtc.c linux/drivers/macintosh/rtc.c
+--- linux_c860_org/drivers/macintosh/rtc.c 2002-08-26 14:39:13.000000000 +0900
++++ linux/drivers/macintosh/rtc.c 2004-06-10 21:09:10.000000000 +0900
+@@ -64,6 +64,7 @@
+ case RTC_RD_TIME:
+ if (ppc_md.get_rtc_time)
+ {
++ memset(&rtc_tm, 0, sizeof(struct rtc_time));
+ get_rtc_time(&rtc_tm);
+
+ if (copy_to_user((struct rtc_time*)arg, &rtc_tm, sizeof(struct rtc_time)))
+diff -Nur linux_c860_org/drivers/mtd/maps/sharpsl-flash.c linux/drivers/mtd/maps/sharpsl-flash.c
+--- linux_c860_org/drivers/mtd/maps/sharpsl-flash.c 2002-08-26 15:19:16.000000000 +0900
++++ linux/drivers/mtd/maps/sharpsl-flash.c 2004-06-10 21:09:10.000000000 +0900
+@@ -23,6 +23,7 @@
+ * GNU General Public License for more details.
+ *
+ * ChangeLog:
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ *
+ */
+
+@@ -34,7 +35,6 @@
+ #include <linux/mtd/map.h>
+ #include <linux/mtd/partitions.h>
+
+-
+ #define WINDOW_ADDR 0x00000000
+ #define WINDOW_SIZE 0x01000000
+ #define BUS_WIDTH 2
+@@ -122,6 +122,14 @@
+ }
+ };
+
++static struct mtd_partition tosa_partitions[1] = {
++ {
++ name: "Filesystem",
++ size: 0x006A0000,
++ offset: 0x00160000
++ }
++};
++
+ #define NB_OF(x) (sizeof(x)/sizeof(x[0]))
+
+
+@@ -133,7 +141,6 @@
+
+ printk(KERN_NOTICE "Sharp SL series flash device: %x at %x\n", WINDOW_SIZE, WINDOW_ADDR);
+ sharpsl_map.map_priv_1 = (unsigned long)ioremap(WINDOW_ADDR, WINDOW_SIZE);
+-
+ if (!sharpsl_map.map_priv_1) {
+ printk("Failed to ioremap\n");
+ return -EIO;
+@@ -155,7 +162,10 @@
+ #elif CONFIG_ARCH_PXA_CORGI
+ parts = corgi_partitions;
+ nb_parts = NB_OF(corgi_partitions);
+-#endif
++#elif CONFIG_ARCH_PXA_TOSA
++ parts = tosa_partitions;
++ nb_parts = NB_OF(tosa_partitions);
++#endif /* CONFIG_ARCH_PXA_TOSA */
+
+ printk(KERN_NOTICE "Using %s partision definition\n", part_type);
+ add_mtd_partitions(mymtd, parts, nb_parts);
+diff -Nur linux_c860_org/drivers/mtd/nand/Config.in linux/drivers/mtd/nand/Config.in
+--- linux_c860_org/drivers/mtd/nand/Config.in 2003-01-14 16:51:07.000000000 +0900
++++ linux/drivers/mtd/nand/Config.in 2004-06-10 21:09:10.000000000 +0900
+@@ -29,10 +29,21 @@
+ fi
+
+ if [ "$CONFIG_ARCH_PXA_POODLE" = "y" ]; then
+- dep_tristate ' NAND Flash device on Sharp poodle' CONFIG_MTD_NAND_SHARP_SL $CONFIG_MTD_NAND
++ dep_tristate ' NAND Flash device on Sharp poodle' CONFIG_MTD_NAND_SHARP_SL_POODLE $CONFIG_MTD_NAND
+ fi
+ if [ "$CONFIG_ARCH_PXA_CORGI" = "y" ]; then
+- dep_tristate ' NAND Flash device on Sharp corgi' CONFIG_MTD_NAND_SHARP_SL $CONFIG_MTD_NAND
++ dep_tristate ' NAND Flash device on Sharp corgi' CONFIG_MTD_NAND_SHARP_SL_CORGI $CONFIG_MTD_NAND
++fi
++
++if [ "$CONFIG_MTD_NAND_SHARP_SL_POODLE" = "y" -o "$CONFIG_MTD_NAND_SHARP_SL_CORGI" = "y" ]; then
++ define_tristate CONFIG_MTD_NAND_SHARP_SL y
++else
++ if [ "$CONFIG_MTD_NAND_SHARP_SL_POODLE" = "m" -o "$CONFIG_MTD_NAND_SHARP_SL_CORGI" = "m" ]; then
++ define_tristate CONFIG_MTD_NAND_SHARP_SL m
++ fi
++fi
++if [ "$CONFIG_ARCH_PXA_TOSA" = "y" ]; then
++ dep_tristate ' NAND Flash device on Sharp tosa' CONFIG_MTD_NAND_SHARP_SL_TC6393 $CONFIG_MTD_NAND
+ fi
+
+ endmenu
+diff -Nur linux_c860_org/drivers/mtd/nand/Makefile linux/drivers/mtd/nand/Makefile
+--- linux_c860_org/drivers/mtd/nand/Makefile 2002-10-09 10:29:15.000000000 +0900
++++ linux/drivers/mtd/nand/Makefile 2004-06-10 21:09:10.000000000 +0900
+@@ -17,6 +17,7 @@
+ obj-$(CONFIG_MTD_NAND_AUTCPU12) += autcpu12.o
+ obj-$(CONFIG_MTD_NAND_EDB7312) += edb7312.o
+ obj-$(CONFIG_MTD_NAND_SHARP_SL) += sharp_sl.o
++obj-$(CONFIG_MTD_NAND_SHARP_SL_TC6393) += sharp_sl_tc6393.o
+ obj-$(CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS) += sharp_sl_logical.o
+
+ include $(TOPDIR)/Rules.make
+diff -Nur linux_c860_org/drivers/mtd/nand/nand.c linux/drivers/mtd/nand/nand.c
+--- linux_c860_org/drivers/mtd/nand/nand.c 2003-06-18 16:12:26.000000000 +0900
++++ linux/drivers/mtd/nand/nand.c 2004-06-10 21:09:10.000000000 +0900
+@@ -102,7 +102,7 @@
+ *
+ * 09-04-2002 tglx: fixed write_verify (John Hall (john.hall@optionexist.co.uk))
+ *
+- * $Id: nand.c,v 1.31 2002/09/04 11:19:33 gleixner Exp $
++ * $Id: nand.c,v 1.1.1.1 2003/06/27 03:04:33 yasui Exp $
+ *
+ * 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
+@@ -121,7 +121,7 @@
+ * add erase-by-force mode
+ * 18-Sep-2002 Lineo Japan, Inc. add dev_ready() call after read
+ * 17-Sep-2002 Lineo Japan, Inc. add code for post-badblock
+- * 14-Mar-2003 Sharp wait for ready in read_oob()
++ * 09-Sep-2003 SHARP support TC6393XB controller for Tosa
+ */
+
+ #include <linux/delay.h>
+@@ -371,6 +371,10 @@
+ int eccmode = oobsel ? this->eccmode : NAND_ECC_NONE;
+ int *oob_config = oobconfigs[oobsel];
+ int ecc_ret = 0;
++#ifdef CONFIG_MTD_NAND_SHARP_SL_TC6393
++ unsigned short data_w;
++ u_char data_b;
++#endif
+
+ START_MEASUREMENT(nand_write_page);
+ COUNTER_INC(nand_write_nr_pages);
+@@ -428,10 +432,17 @@
+ /* No ecc and software ecc 3/256, write all */
+ case NAND_ECC_NONE:
+ case NAND_ECC_SOFT:
++#ifdef CONFIG_MTD_NAND_SHARP_SL_TC6393
++ for (i = 0; i < mtd->oobblock; i+=2) {
++ writew ( (this->data_poi[i+1] << 8) | this->data_poi[i] , this->IO_ADDR_W);
++ }
++ break;
++#else
+ for (i = 0; i < mtd->oobblock; i++)
+ writeb ( this->data_poi[i] , this->IO_ADDR_W);
+ break;
+-
++#endif
++
+ /* Hardware ecc 3 byte / 256 data, write first half, get ecc, then second, if 512 byte pagesize */
+ case NAND_ECC_HW3_256:
+ this->enable_hwecc (NAND_ECC_WRITE); /* enable hardware ecc logic for write */
+@@ -465,8 +476,14 @@
+ /* Hardware ecc 6 byte / 512 byte data, write full page */
+ case NAND_ECC_HW6_512:
+ this->enable_hwecc (NAND_ECC_WRITE); /* enable hardware ecc logic */
++#ifdef CONFIG_MTD_NAND_SHARP_SL_TC6393
++ for (i = 0; i < mtd->oobblock; i+=2) {
++ writew ( (this->data_poi[i+1] << 8) | this->data_poi[i] , this->IO_ADDR_W);
++ }
++#else
+ for (i = 0; i < mtd->oobblock; i++)
+ writeb ( this->data_poi[i] , this->IO_ADDR_W);
++#endif
+ ecc_ret = this->calculate_ecc (NULL, &(ecc_code[0]));
+ for (i = 0; i < 6; i++)
+ oob_data[oob_config[i]] = ecc_code[i];
+@@ -484,8 +501,15 @@
+ }
+
+ /* Write out OOB data */
++#ifdef CONFIG_MTD_NAND_SHARP_SL_TC6393
++
++ for (i = 0; i < mtd->oobsize; i+=2) {
++ writew ( (oob_data[i+1] << 8) | oob_data[i] , this->IO_ADDR_W);
++ }
++#else
+ for (i = 0; i < mtd->oobsize; i++)
+ writeb ( oob_data[i] , this->IO_ADDR_W);
++#endif
+
+ /* Send command to actually program the data */
+ this->cmdfunc (mtd, NAND_CMD_PAGEPROG, -1, -1);
+@@ -526,23 +550,55 @@
+ }
+ /* Loop through and verify the data */
+ for (i = col; i < last; i++) {
++#ifdef CONFIG_MTD_NAND_SHARP_SL_TC6393
++ if((i-col) & 1){
++ data_b = data_w >> 8;
++ }else{
++ data_w = readw (this->IO_ADDR_W);
++ data_b = data_w & 0xff;
++
++ }
++ if (this->data_poi[i] != data_b) {
++ printk (KERN_WARNING "%s: Failed write verify, %d at page 0x%08x, col=%d last=%d\n", __func__, i, page, col, last);
++ ACCUMULATE_ELAPSED_TIME(nand_write_verify);
++ ACCUMULATE_ELAPSED_TIME(nand_write_page);
++ return -EIO;
++ }
++#else
+ if (this->data_poi[i] != readb (this->IO_ADDR_R)) {
+ printk (KERN_WARNING "%s: Failed write verify, %d at page 0x%08x, col=%d last=%d\n", __func__, i, page, col, last);
+ ACCUMULATE_ELAPSED_TIME(nand_write_verify);
+ ACCUMULATE_ELAPSED_TIME(nand_write_page);
+ return -EIO;
+ }
++#endif
+ }
+
+ /* check, if we have a fs-supplied oob-buffer */
+ if (oob_buf) {
+ for (i = 0; i < mtd->oobsize; i++) {
++#ifdef CONFIG_MTD_NAND_SHARP_SL_TC6393
++ if(i & 1){
++ data_b = data_w >> 8;
++ }else{
++ data_w = readw (this->IO_ADDR_W);
++ data_b = data_w & 0xff;
++
++ }
++ if (oob_data[i] != data_b) {
++ printk (KERN_WARNING "%s: Failed write verify, oob %d of page 0x%08x\n", __func__, i, page);
++ ACCUMULATE_ELAPSED_TIME(nand_write_verify);
++ ACCUMULATE_ELAPSED_TIME(nand_write_page);
++ return -EIO;
++ }
++#else
+ if (oob_data[i] != readb (this->IO_ADDR_R)) {
+ printk (KERN_WARNING "%s: Failed write verify, oob %d of page 0x%08x\n", __func__, i, page);
+ ACCUMULATE_ELAPSED_TIME(nand_write_verify);
+ ACCUMULATE_ELAPSED_TIME(nand_write_page);
+ return -EIO;
+ }
++#endif
+ }
+ } else {
+ if (eccmode != NAND_ECC_NONE && !col && last == mtd->oobblock) {
+@@ -555,8 +611,19 @@
+ case NAND_ECC_HW6_512: ecc_bytes = 6; break;
+ }
+
++#ifdef CONFIG_MTD_NAND_SHARP_SL_TC6393
++ for (i = 0; i < mtd->oobsize; i++) {
++ if(i & 1){
++ oob_data[i] = data_w >> 8;
++ }else{
++ data_w = readw (this->IO_ADDR_R);
++ oob_data[i] = data_w;
++ }
++ }
++#else
+ for (i = 0; i < mtd->oobsize; i++)
+ oob_data[i] = readb (this->IO_ADDR_R);
++#endif
+
+ for (i = 0; i < ecc_bytes; i++) {
+ if (oob_data[oob_config[i]] != ecc_code[i]) {
+@@ -826,7 +893,17 @@
+ * oob data, let the device transfer the data !
+ */
+ for (i = 0; i < tmp_len; i++) {
++#ifdef CONFIG_MTD_NAND_SHARP_SL_TC6393
++ unsigned short data;
++ if(i & 1){
++ buf[i] = data >> 8;
++ }else{
++ data = readw (this->IO_ADDR_R);
++ buf[i] = data;
++ }
++#else
+ buf[i] = readb (this->IO_ADDR_R);
++#endif
+ if ((col++ & (mtd->oobsize - 1)) == (mtd->oobsize - 1))
+ udelay (this->chip_delay);
+ }
+@@ -972,6 +1049,10 @@
+ {
+ int i, column, page, status, ret = 0;
+ struct nand_chip *this = mtd->priv;
++#ifdef CONFIG_MTD_NAND_SHARP_SL_TC6393
++ unsigned short tmp_buf[32]; // mtd->oobsize
++ u_char *p_tmp_buf;
++#endif
+
+ DEBUG (MTD_DEBUG_LEVEL3, "nand_write_oob: to = 0x%08x, len = %i\n", (unsigned int) to, (int) len);
+
+@@ -1010,6 +1091,17 @@
+
+ /* Write out desired data */
+ this->cmdfunc (mtd, NAND_CMD_SEQIN, mtd->oobblock, page);
++
++#ifdef CONFIG_MTD_NAND_SHARP_SL_TC6393
++ memset(tmp_buf,0xff,mtd->oobsize);
++ p_tmp_buf = (u_char *)tmp_buf;
++
++ for (i = 0; i < len; i++)
++ p_tmp_buf[i+column] = buf[i];
++
++ for (i = 0; i < mtd->oobsize; i++)
++ writew (tmp_buf[i], this->IO_ADDR_W);
++#else
+ /* prepad 0xff for partial programming */
+ for (i = 0; i < column; i++)
+ writeb (0xff, this->IO_ADDR_W);
+@@ -1019,7 +1111,7 @@
+ /* postpad 0xff for partial programming */
+ for (i = len + column; i < mtd->oobsize; i++)
+ writeb (0xff, this->IO_ADDR_W);
+-
++#endif
+ /* Send command to program the OOB data */
+ this->cmdfunc (mtd, NAND_CMD_PAGEPROG, -1, -1);
+
+@@ -1040,11 +1132,29 @@
+
+ /* Loop through and verify the data */
+ for (i = 0; i < len; i++) {
++#ifdef CONFIG_MTD_NAND_SHARP_SL_TC6393
++ unsigned short data;
++ if(i & 1){
++ if (buf[i] != (data >> 8)){
++ DEBUG (MTD_DEBUG_LEVEL0, "nand_write_oob: " "Failed write verify, page 0x%08x\n", page);
++ ret = -EIO;
++ goto out;
++ }
++ }else{
++ data = readw (this->IO_ADDR_R);
++ if (buf[i] != (data & 0xff)){
++ DEBUG (MTD_DEBUG_LEVEL0, "nand_write_oob: " "Failed write verify, page 0x%08x\n", page);
++ ret = -EIO;
++ goto out;
++ }
++ }
++#else
+ if (buf[i] != readb (this->IO_ADDR_R)) {
+ DEBUG (MTD_DEBUG_LEVEL0, "nand_write_oob: " "Failed write verify, page 0x%08x\n", page);
+ ret = -EIO;
+ goto out;
+ }
++#endif
+ }
+ #endif
+
+@@ -1256,6 +1366,7 @@
+ /* Check the WP bit */
+ this->cmdfunc (mtd, NAND_CMD_STATUS, -1, -1);
+ if (!(readb (this->IO_ADDR_R) & 0x80)) {
++
+ DEBUG (MTD_DEBUG_LEVEL0, "nand_erase: Device is write protected!!!\n");
+ instr->state = MTD_ERASE_FAILED;
+ goto erase_exit;
+@@ -1437,8 +1548,14 @@
+ this->cmdfunc (mtd, NAND_CMD_READID, 0x00, -1);
+
+ /* Read manufacturer and device IDs */
++#ifdef CONFIG_MTD_NAND_SHARP_SL_TC6393
++ nand_maf_id = readw (this->IO_ADDR_R);
++ nand_dev_id = nand_maf_id >> 8;
++ nand_maf_id = nand_maf_id & 0xff;
++#else
+ nand_maf_id = readb (this->IO_ADDR_R);
+ nand_dev_id = readb (this->IO_ADDR_R);
++#endif
+
+ /* Print and store flash device information */
+ for (i = 0; nand_flash_ids[i].name != NULL; i++) {
+@@ -1473,7 +1590,9 @@
+ this->eccsize = 256; /* set default eccsize */
+
+ switch (this->eccmode) {
+-
++#ifdef CONFIG_ARCH_SHARP_SL
++ case NAND_ECC_HW6_512:
++#endif
+ case NAND_ECC_HW3_512:
+ if (mtd->oobblock == 256) {
+ printk (KERN_WARNING "512 byte HW ECC not possible on 256 Byte pagesize, fallback to SW ECC \n");
+diff -Nur linux_c860_org/drivers/mtd/nand/sharp_sl_tc6393.c linux/drivers/mtd/nand/sharp_sl_tc6393.c
+--- linux_c860_org/drivers/mtd/nand/sharp_sl_tc6393.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/mtd/nand/sharp_sl_tc6393.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,1236 @@
++/*
++ * drivers/mtd/nand/sharp_sl_tc6393.c
++ *
++ * Copyright (C) 2004 SHARP
++ *
++ * $Id: sharp_sl_tc6393.c,v 1.4 2004/03/04 06:34:39 yasui Exp $
++ *
++ * Based on:
++ *
++ * drivers/mtd/nand/sharp_sl.c
++ *
++ * Copyright (C) 2002 Lineo Japan, Inc.
++ *
++ * drivers/mtd/nand/spia.c
++ *
++ * Copyright (C) 2000 Steven J. Hill (sjhill@cotw.com)
++ *
++ *
++ * 10-29-2001 TG change to support hardwarespecific access
++ * to controllines (due to change in nand.c)
++ * page_cache added
++ *
++ * 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.
++ *
++ * Overview:
++ * This is a device driver for the NAND flash device found on the
++ * SPIA board which utilizes the Toshiba TC58V64AFT part. This is
++ * a 64Mibit (8MiB x 8 bits) NAND flash device.
++ *
++ * ChangLog:
++ * 09-Sep-2003 SHARP support the Toshiba TC6393XB NAND flash controller.
++ */
++
++#include <linux/slab.h>
++#include <linux/module.h>
++#include <linux/delay.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/nand.h>
++#include <linux/mtd/nand_ecc.h>
++#include <linux/mtd/partitions.h>
++#include <asm/io.h>
++#include <asm/hardware.h>
++#ifdef CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS
++#include <asm-arm/sharp_nand_logical.h>
++#endif
++
++#undef DEBUG_PROC
++#ifdef DEBUG_PROC
++#include <linux/proc_fs.h>
++#endif
++#include "measure.h"
++#include <asm/sharp_tc6393.h>
++
++#define MAX_ECC_RETRY 3
++#define MAX_WRITE_RETRIES 32
++#define MAX_COPIES 100
++
++#ifdef CONFIG_ARCH_SHARP_SL
++#define FAILURECOUNTER_POS NAND_POSTBADBLOCK_POS
++#else
++#define FAILURECOUNTER_POS NAND_BADBLOCK_POS
++#endif
++
++#define HWECC_MODE_DISABLE 0
++#define HWECC_MODE_READ 1
++#define HWECC_MODE_WRITE 2
++static int hwecc_mode = HWECC_MODE_DISABLE;
++
++static TC6393XB_SysConfig *sysconfig = TC6393XB_SYSCONFIG_BASE;
++static TC6393XB_NandConfig *nandconfig = TC6393XB_NANDCONFIG_BASE;
++static TC6393XB_NandCtrl *nandctrl = TC6393XB_NANDCTRL_BASE;
++
++/*
++ * NAND low-level MTD interface functions
++ */
++static int tc6393_nand_read (struct mtd_info *mtd, loff_t from, size_t len, size_t * retlen, u_char * buf);
++static int tc6393_nand_read_ecc (struct mtd_info *mtd, loff_t from, size_t len,
++ size_t * retlen, u_char * buf, u_char * eccbuf, int oobsel);
++static int tc6393_nand_write (struct mtd_info *mtd, loff_t to, size_t len, size_t * retlen, const u_char * buf);
++static int tc6393_nand_write_ecc (struct mtd_info *mtd, loff_t to, size_t len,
++ size_t * retlen, const u_char * buf, u_char * eccbuf, int oobsel);
++static int tc6393_nand_write_oob (struct mtd_info *mtd, loff_t to, size_t len, size_t * retlen, const u_char *buf);
++static int tc6393_nand_writev (struct mtd_info *mtd, const struct iovec *vecs,
++ unsigned long count, loff_t to, size_t * retlen);
++static int tc6393_nand_writev_ecc (struct mtd_info *mtd, const struct iovec *vecs,
++ unsigned long count, loff_t to, size_t * retlen, u_char *eccbuf, int oobsel);
++/*
++ * MTD structure for Poodle
++ */
++static struct mtd_info *sharp_sl_mtd = NULL;
++
++/*
++ * original nand_* functions pointer
++ */
++static int (*orig_read_ecc)(struct mtd_info*, loff_t, size_t, size_t*, u_char*, u_char*, int);
++static int (*orig_write_ecc)(struct mtd_info*, loff_t, size_t, size_t*, const u_char*, u_char*, int);
++static int (*orig_writev_ecc)(struct mtd_info*, const struct iovec*, unsigned long, loff_t, size_t*, u_char*, int);
++static int (*orig_write_oob)(struct mtd_info*, loff_t, size_t, size_t*, const u_char*);
++
++
++/*
++ * out of band configuration for different filesystems
++ */
++static int oobconfigs[][6] = {
++ { 0,0,0,0,0,0},
++
++ { NAND_JFFS2_OOB_ECCPOS0, NAND_JFFS2_OOB_ECCPOS1, NAND_JFFS2_OOB_ECCPOS2,
++ NAND_JFFS2_OOB_ECCPOS3, NAND_JFFS2_OOB_ECCPOS4, NAND_JFFS2_OOB_ECCPOS5 },
++
++ { NAND_YAFFS_OOB_ECCPOS0, NAND_YAFFS_OOB_ECCPOS1, NAND_YAFFS_OOB_ECCPOS2,
++ NAND_YAFFS_OOB_ECCPOS3, NAND_YAFFS_OOB_ECCPOS4, NAND_YAFFS_OOB_ECCPOS5 }
++};
++
++/*
++ * Macros for low-level register control
++ */
++#define nand_select() this->hwcontrol(NAND_CTL_SETNCE);
++
++#define nand_deselect() this->hwcontrol(NAND_CTL_CLRNCE);
++
++
++/*
++ * Define partitions for flash device
++ */
++#define DEFAULT_NUM_PARTITIONS 3
++static struct mtd_info** sharp_sl_nand_part_mtdp;
++static int nr_partitions;
++static struct mtd_partition sharp_sl_nand_default_partition_info[] = {
++ {
++ .name = "NAND flash partition 0",
++ .offset = 0,
++ .size = 7 * 1024 * 1024,
++ },
++ {
++ .name = "NAND flash partition 1",
++ .offset = 7 * 1024 * 1024,
++ .size = 30 * 1024 * 1024,
++ },
++ {
++ .name = "NAND flash partition 2",
++ .offset = 37 * 1024 * 1024,
++ .size = (64 - 37) * 1024 * 1024,
++ },
++};
++static struct mtd_partition* sharp_sl_nand_partition_info;
++
++
++/*
++ * hardware specific access to control-lines
++ */
++static void
++tc6393_nand_hwcontrol(int cmd)
++{
++ switch (cmd) {
++ case NAND_CTL_SETCLE:
++ nandctrl->smode |= SMODE_CLE;
++ break;
++ case NAND_CTL_CLRCLE:
++ nandctrl->smode &= ~SMODE_CLE;
++ break;
++ case NAND_CTL_SETALE:
++ nandctrl->smode |= SMODE_ALE;
++ break;
++ case NAND_CTL_CLRALE:
++ nandctrl->smode &= ~SMODE_ALE;
++ break;
++ case NAND_CTL_SETNCE:
++ nandctrl->smode = SMODE_SELECT;
++ break;
++ case NAND_CTL_CLRNCE:
++ nandctrl->smode = SMODE_DESELECT;
++ default:
++ break;
++ }
++}
++
++
++/*
++ *
++ */
++static int
++tc6393_nand_command_1(struct mtd_info* mtd,
++ unsigned command,
++ int column,
++ int page_addr)
++{
++ register struct nand_chip *this = mtd->priv;
++ register unsigned long NAND_IO_ADDR = this->IO_ADDR_W;
++ int i;
++
++#ifdef CONFIG_ARCH_SHARP_SL
++ if (command != NAND_CMD_RESET &&
++ command != NAND_CMD_STATUS) {
++ for (i = 0; i < NAND_BUSY_TIMEOUT; i++)
++ if (this->dev_ready())
++ break;
++ if (i == NAND_BUSY_TIMEOUT)
++ return -EIO;
++ }
++#endif
++ this->hwcontrol (NAND_CTL_SETCLE);
++
++ /*
++ * Write out the command to the device.
++ */
++ if (command != NAND_CMD_SEQIN)
++ writeb (command, NAND_IO_ADDR);
++ else {
++ if (mtd->oobblock == 256 && column >= 256) {
++ column -= 256;
++ writeb (NAND_CMD_READOOB, NAND_IO_ADDR);
++ writeb (NAND_CMD_SEQIN, NAND_IO_ADDR);
++ } else if (mtd->oobblock == 512 && column >= 256) {
++ if (column < 512) {
++ column -= 256;
++ writeb (NAND_CMD_READ1, NAND_IO_ADDR);
++ writeb (NAND_CMD_SEQIN, NAND_IO_ADDR);
++ } else {
++ column -= 512;
++ writeb (NAND_CMD_READOOB, NAND_IO_ADDR);
++ writeb (NAND_CMD_SEQIN, NAND_IO_ADDR);
++ }
++ } else {
++ writeb (NAND_CMD_READ0, NAND_IO_ADDR);
++ writeb (NAND_CMD_SEQIN, NAND_IO_ADDR);
++ }
++ }
++
++ /* Set ALE and clear CLE to start address cycle */
++ this->hwcontrol (NAND_CTL_CLRCLE);
++
++ if (column != -1 || page_addr != -1) {
++ this->hwcontrol (NAND_CTL_SETALE);
++
++ /* Serially input address */
++ if (column != -1)
++ writeb (column, NAND_IO_ADDR);
++ if (page_addr != -1) {
++ writeb ((unsigned char) (page_addr & 0xff), NAND_IO_ADDR);
++ writeb ((unsigned char) ((page_addr >> 8) & 0xff), NAND_IO_ADDR);
++ /* One more address cycle for higher density devices */
++ if (mtd->size & 0x0c000000)
++ writeb ((unsigned char) ((page_addr >> 16) & 0x0f), NAND_IO_ADDR);
++ }
++ /* Latch in address */
++ this->hwcontrol (NAND_CTL_CLRALE);
++ }
++
++ /*
++ * program and erase have their own busy handlers
++ * status and sequential in needs no delay
++ */
++ switch (command) {
++ case NAND_CMD_PAGEPROG: /* wait in this->waitfunc() */
++ case NAND_CMD_ERASE1:
++ case NAND_CMD_ERASE2: /* wait in this->waitfunc() */
++ case NAND_CMD_SEQIN:
++/* case NAND_CMD_STATUS: */
++ return 0;
++
++ case NAND_CMD_RESET:
++ break;
++ }
++
++ /* wait until command is processed */
++ for (i = 0; i < NAND_BUSY_TIMEOUT; i++)
++ if (this->dev_ready())
++ return 0;
++ return -EIO;
++}
++
++
++/*
++ *
++ */
++static int
++tc6393_nand_command(struct mtd_info* mtd,
++ unsigned command,
++ int column,
++ int page_addr)
++{
++ if (command == NAND_CMD_SEQIN)
++ /* ignore Ready/Busy error */
++ tc6393_nand_command_1(mtd, NAND_CMD_READ0, column, page_addr);
++ return tc6393_nand_command_1(mtd, command, column, page_addr);
++}
++
++
++/*
++ * Get chip for selected access
++ * (copy from nand.c)
++ */
++static inline void
++nand_get_chip(struct nand_chip *this,
++ struct mtd_info *mtd,
++ int new_state)
++{
++
++ DECLARE_WAITQUEUE (wait, current);
++
++ /*
++ * Grab the lock and see if the device is available
++ * For erasing, we keep the spinlock until the
++ * erase command is written.
++ */
++ retry:
++ spin_lock_bh (&this->chip_lock);
++
++ if (this->state == FL_READY) {
++ this->state = new_state;
++ if (new_state != FL_ERASING)
++ spin_unlock_bh (&this->chip_lock);
++ return;
++ }
++
++#if 0
++ if (this->state == FL_ERASING) {
++ if (new_state != FL_ERASING) {
++ this->state = new_state;
++ spin_unlock_bh (&this->chip_lock);
++ nand_select (); /* select in any case */
++ this->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
++ return;
++ }
++ }
++#endif
++
++ set_current_state (TASK_UNINTERRUPTIBLE);
++ add_wait_queue (&this->wq, &wait);
++ spin_unlock_bh (&this->chip_lock);
++ schedule ();
++ remove_wait_queue (&this->wq, &wait);
++ goto retry;
++}
++
++
++static inline void
++tc6393_nand_read_page(struct mtd_info* mtd,
++ struct nand_chip* this,
++ u_char* data_poi,
++ u_char* oob_data,
++ u_char* ecc_calc,
++ int ecc,
++ int end)
++{
++ int j = 0;
++
++ START_MEASUREMENT(nand_read_page);
++
++ this->enable_hwecc (NAND_ECC_READ);
++
++ while (j < ecc){
++ unsigned short data = readw (this->IO_ADDR_R);
++ data_poi[j++] = data;
++ data_poi[j++] = data >> 8;
++ }
++
++ this->calculate_ecc (&data_poi[0], &ecc_calc[0]); /* read from hardware */
++
++ for (j = 0; j < mtd->oobsize; j+=2) {
++ unsigned short data = readw (this->IO_ADDR_R);
++ oob_data[j] = data;
++ oob_data[j+1] = data >> 8;
++ }
++ ACCUMULATE_ELAPSED_TIME(nand_read_page);
++ COUNTER_INC(nand_read_nr_pages);
++}
++
++
++/*
++ * this function is registered only if eccmode == NAND_ECC_HW6_512 &&
++ * oobblock == 512
++ */
++static int
++tc6393_nand_read_ecc(struct mtd_info* mtd,
++ loff_t from,
++ size_t len,
++ size_t* retlen,
++ u_char* buf,
++ u_char* oob_buf,
++ int oobsel)
++{
++ int col, page, end, ecc;
++ int read, ecc_failed, ret;
++ struct nand_chip *this;
++ u_char *oob_data;
++ int *oob_config;
++ u_char* data_poi = 0;
++
++ if (oob_buf || ! oobsel)
++ return orig_read_ecc(mtd, from, len, retlen, buf, oob_buf, oobsel);
++
++ DEBUG (MTD_DEBUG_LEVEL3, "%s: from = 0x%08x, len = %i\n",
++ __func__, (unsigned int) from, (int) len);
++
++ /* Do not allow reads past end of device */
++ if ((from + len) > mtd->size) {
++ DEBUG (MTD_DEBUG_LEVEL0, "%s: Attempt read beyond end of device\n", __func__);
++ *retlen = 0;
++ return -EINVAL;
++ }
++
++ /* Grab the lock and see if the device is available */
++ this = mtd->priv;
++ nand_get_chip (this, mtd ,FL_READING);
++
++ /* Select the NAND device */
++ nand_select ();
++
++ oob_config = oobconfigs[oobsel];
++ page = from >> this->page_shift;
++ col = from & (mtd->oobblock - 1);
++ end = mtd->oobblock;
++ ecc = mtd->eccsize;
++ oob_data = &this->data_buf[end];
++ read = 0;
++ ecc_failed = 0;
++ ret = 0;
++
++ /* Send the read command */
++ if (this->cmdfunc (mtd, NAND_CMD_READ0, 0x00, page)) {
++ printk(KERN_WARNING "%s: Failed in NAND_CMD_READ0 command, page 0x%08x\n",
++ __func__, page);
++ ret = -EIO;
++ goto nand_read_ecc_exit;
++ }
++
++ /* Loop until all data read */
++ while (read < len) {
++ int j;
++ int ecc_status;
++ int ecc_retry_counter = 0;
++ u_char ecc_calc[6];
++ u_char ecc_code[6];
++
++ /*
++ * If the read is not page aligned, we have to read into data buffer
++ * due to ecc, else we read into return buffer direct
++ */
++ if (!col && (len - read) >= end)
++ data_poi = &buf[read];
++ else
++ data_poi = this->data_buf;
++
++#ifdef CONFIG_MTD_NAND_PAGE_CACHE
++ if (page == this->cache_page) {
++ memcpy(data_poi, this->data_cache, end);
++
++ if (this->cmdfunc (mtd, NAND_CMD_READ0, 0x00, page + 1)) {
++ printk(KERN_WARNING "%s: Failed in NAND_CMD_READ0 command,"
++ " page 0x%08x\n", __func__, page);
++ ret = -EIO;
++ goto nand_read_ecc_exit;
++ }
++
++ goto loop_next;
++ }
++#endif
++
++ ecc_retry:
++ tc6393_nand_read_page(mtd, this, data_poi, oob_data, ecc_calc, ecc, end);
++
++ /* Pick the ECC bytes out of the oob data */
++ for (j = 0; j < 6; j++)
++ ecc_code[j] = oob_data[oob_config[j]];
++
++ /* If we have consequent page reads, apply delay or wait for ready/busy pin */
++ for (j = 0; j < NAND_BUSY_TIMEOUT; j++)
++ if (this->dev_ready())
++ break;
++ if (j == NAND_BUSY_TIMEOUT) {
++ ret = -EIO;
++ goto nand_read_ecc_exit;
++ }
++
++ /* correct data, if neccecary */
++ ecc_status = this->correct_data (&data_poi[0], &ecc_code[0], &ecc_calc[0]);
++ if (ecc_status == -1) {
++ if (ecc_retry_counter++ < MAX_ECC_RETRY) {
++ this->cmdfunc (mtd, NAND_CMD_RESET, -1, -1);
++ if (this->cmdfunc (mtd, NAND_CMD_READ0, 0x00, page)) {
++ printk(KERN_WARNING
++ "%s: Failed in NAND_CMD_READ0 command, page 0x%08x\n",
++ __func__, page);
++ ret = -EIO;
++ goto nand_read_ecc_exit;
++ }
++ goto ecc_retry;
++ }
++ else {
++ printk (KERN_WARNING "%s: Failed ECC read, page 0x%08x\n",
++ __func__, page);
++ ecc_failed++;
++ }
++ }
++
++ ecc_status = this->correct_data (&data_poi[256], &ecc_code[3], &ecc_calc[3]);
++ if (ecc_status == -1) {
++ if (ecc_retry_counter++ < MAX_ECC_RETRY) {
++ this->cmdfunc (mtd, NAND_CMD_RESET, -1, -1);
++ if (this->cmdfunc (mtd, NAND_CMD_READ0, 0x00, page)) {
++ printk(KERN_WARNING
++ "%s: Failed in NAND_CMD_READ0 command, page 0x%08x\n",
++ __func__, page);
++ ret = -EIO;
++ goto nand_read_ecc_exit;
++ }
++ goto ecc_retry;
++ }
++ else {
++ printk (KERN_WARNING "%s: Failed ECC read, page 0x%08x\n",
++ __func__, page);
++ ecc_failed++;
++ }
++ }
++
++#ifdef CONFIG_MTD_NAND_PAGE_CACHE
++ loop_next:
++#endif
++ if (col || (len - read) < end) {
++ for (j = col; j < end && read < len; j++)
++ buf[read++] = data_poi[j];
++ } else
++ read += mtd->oobblock;
++ /* For subsequent reads align to page boundary. */
++ col = 0;
++ /* Increment page address */
++ page++;
++ }
++
++ nand_read_ecc_exit:
++ ret = (ret == 0) ? (ecc_failed ? -EIO : 0) : ret;
++ if (ret == -EIO)
++ this->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
++#ifdef CONFIG_MTD_NAND_PAGE_CACHE
++ else if (page - 1 != this->cache_page && data_poi) {
++ memcpy(this->data_cache, data_poi, end);
++ this->cache_page = page - 1;
++ }
++#endif
++
++ /* De-select the NAND device */
++ nand_deselect ();
++
++ /* Wake up anyone waiting on the device */
++ spin_lock_bh (&this->chip_lock);
++ this->state = FL_READY;
++ wake_up (&this->wq);
++ spin_unlock_bh (&this->chip_lock);
++
++ /*
++ * Return success, if no ECC failures, else -EIO
++ * fs driver will take care of that, because
++ * retlen == desired len and result == -EIO
++ */
++ *retlen = read;
++ return ret;
++}
++
++
++static int
++tc6393_nand_read(struct mtd_info* mtd,
++ loff_t from,
++ size_t len,
++ size_t* retlen,
++ u_char* buf)
++{
++ return tc6393_nand_read_ecc(mtd, from, len, retlen, buf, NULL, NAND_JFFS2_OOB);
++}
++
++
++/* same as sharp_sl.c */
++static inline int jffs2_hamming_distance(unsigned int a, unsigned int b)
++{
++#ifdef __ARM_ARCH_5TE__
++ unsigned int n;
++ a ^= b;
++ asm (
++ "clz %0, %1\n"
++ : "=r" (n)
++ : "r" (a)
++ );
++ return (a << (n + 1)) == 0;
++#else
++ unsigned int n;
++ a ^= b;
++ for (n = 0; n < 8; n++)
++ if (! (a & ~(1 << n)))
++ return 1;
++ return 0;
++#endif
++}
++
++/* same as sharp_sl.c */
++static inline void
++jffs2_correct_badblock_val(u_char* oob)
++{
++#ifdef CONFIG_MTD_NAND_POST_BADBLOCK
++ if (jffs2_hamming_distance(oob[NAND_POSTBADBLOCK_POS], 0xff))
++ oob[NAND_POSTBADBLOCK_POS] = 0xff;
++#endif
++ if (jffs2_hamming_distance(oob[NAND_BADBLOCK_POS], 0xff))
++ oob[NAND_BADBLOCK_POS] = 0xff;
++}
++
++/* same as sharp_sl.c */
++static inline void
++jffs2_correct_failedblock_val(u_char* oob)
++{
++ if (jffs2_hamming_distance(oob[FAILURECOUNTER_POS], 0xff))
++ oob[FAILURECOUNTER_POS] = 0xff;
++}
++
++/* same as sharp_sl.c */
++static inline void
++jffs2_correct_cleanmarker(u_char* oob,
++ u_char* correct_data,
++ int len)
++{
++ int i;
++ for (i = 0; i < len; i++)
++ if (jffs2_hamming_distance(oob[i], correct_data[i]))
++ oob[i] = correct_data[i];
++}
++
++/* same as sharp_sl.c */
++static int
++tc6393_nand_prepare_rewrite(struct mtd_info* mtd,
++ loff_t to,
++ int oobsel)
++{
++ int i;
++ loff_t block_addr = to & ~(mtd->erasesize - 1);
++ size_t len = to & (mtd->erasesize - 1);
++ int nr_oobpages = 2; // JFFS2 only (JFFS2 uses only 2 oobpages)
++ int fsdata_pos = (mtd->oobblock == 256)
++ ? NAND_JFFS2_OOB8_FSDAPOS : NAND_JFFS2_OOB16_FSDAPOS;
++ int fsdata_len = (mtd->oobblock == 256)
++ ? NAND_JFFS2_OOB8_FSDALEN : NAND_JFFS2_OOB16_FSDALEN;
++ u_char* block_buf;
++ u_char* oob_buf;
++ int ret;
++ int retlen;
++ struct erase_info instr;
++
++ block_buf = kmalloc(len, GFP_KERNEL);
++ if (! block_buf) {
++ printk("Unable to allocate NAND block buffer (%u)\n", len);
++ return -EIO;
++ }
++ oob_buf = kmalloc(mtd->oobsize * nr_oobpages, GFP_KERNEL);
++ if (! oob_buf) {
++ printk("Unable to allocate NAND oob buffer\n");
++ kfree(block_buf);
++ return -EIO;
++ }
++
++ ret = mtd->read_ecc(mtd, block_addr, len, &retlen, block_buf, NULL, NAND_JFFS2_OOB);
++ if (ret || retlen != len) {
++ DEBUG(MTD_DEBUG_LEVEL0, "%s: read_ecc failed (%d)\n", __func__, ret);
++ kfree(block_buf);
++ kfree(oob_buf);
++ return ret ? ret : -EIO;
++ }
++
++ ret = mtd->read_oob(mtd, block_addr, mtd->oobsize * nr_oobpages, &retlen, oob_buf);
++ if (ret || retlen != mtd->oobsize * nr_oobpages) {
++ DEBUG(MTD_DEBUG_LEVEL0, "%s: read_oob failed (%d)\n", __func__, ret);
++ kfree(block_buf);
++ kfree(oob_buf);
++ return ret ? ret : -EIO;
++ }
++#if 1 /* FIXME */
++ {
++ struct {
++ /* All start like this */
++ uint16_t magic;
++ uint16_t nodetype;
++ uint32_t totlen; /* So we can skip over nodes we don't grok */
++ } __attribute__((packed)) n = {
++ .magic = 0x1985,
++ .nodetype = 0x2003,
++ .totlen = 8,
++ };
++ u_char* p;
++
++ p = (u_char*)&n;
++
++ jffs2_correct_badblock_val(oob_buf);
++ jffs2_correct_failedblock_val(&oob_buf[mtd->oobsize]);
++ jffs2_correct_cleanmarker(&oob_buf[fsdata_pos], p, fsdata_len);
++ }
++#endif
++
++ for (i = 0; i < MAX_COPIES; i++) {
++ int j;
++
++ memset(&instr, 0, sizeof instr);
++ instr.mtd = mtd;
++ instr.addr = block_addr;
++ instr.len = mtd->erasesize;
++ ret = mtd->erase(mtd, &instr);
++ if (ret) {
++ DEBUG(MTD_DEBUG_LEVEL0, "%s: erase failed (%d)\n", __func__, ret);
++ continue;
++ }
++
++ ret = orig_write_ecc(mtd, block_addr, len, &retlen, block_buf, NULL,
++ NAND_JFFS2_OOB);
++ if (ret || retlen != len) {
++ DEBUG(MTD_DEBUG_LEVEL0, "%s: write_ecc failed (%d)\n", __func__, ret);
++ continue;
++ }
++
++ for (j = 0; j < nr_oobpages; j++) {
++ loff_t addr = block_addr + mtd->oobblock * j;
++
++#ifdef CONFIG_MTD_NAND_POST_BADBLOCK
++ ret = orig_write_oob(mtd, addr + NAND_POSTBADBLOCK_POS, 1, &retlen,
++ oob_buf + mtd->oobsize * j + NAND_POSTBADBLOCK_POS);
++ if (ret || retlen != 1) {
++ DEBUG(MTD_DEBUG_LEVEL0, "%s: write_oob post_badblock(%d) failed (%d)\n",
++ __func__, j, ret);
++ break;
++ }
++#endif
++
++ ret = orig_write_oob(mtd, addr + NAND_BADBLOCK_POS, 1, &retlen,
++ oob_buf + mtd->oobsize * j + NAND_BADBLOCK_POS);
++ if (ret || retlen != 1) {
++ DEBUG(MTD_DEBUG_LEVEL0, "%s: write_oob badblock(%d) failed (%d)\n",
++ __func__, j, ret);
++ break;
++ }
++
++ ret = orig_write_oob(mtd, addr + fsdata_pos, fsdata_len, &retlen,
++ oob_buf + mtd->oobsize * j + fsdata_pos);
++ if (ret || retlen != fsdata_len) {
++ DEBUG(MTD_DEBUG_LEVEL0, "%s: write_oob fsdata(%d) failed (%d)\n",
++ __func__, j, ret);
++ break;
++ }
++ }
++ if (j < nr_oobpages)
++ continue;
++
++ break;
++ }
++
++ kfree(block_buf);
++ kfree(oob_buf);
++ DEBUG(MTD_DEBUG_LEVEL0,
++ "%s: %d\n", __func__, (i < MAX_COPIES) ? 0 : (ret ? ret : -EIO));
++ return (i < MAX_COPIES) ? 0 : (ret ? ret : -EIO);
++}
++
++/* same as sharp_sl.c */
++static int
++tc6393_nand_write_ecc(struct mtd_info* mtd,
++ loff_t to,
++ size_t len,
++ size_t* retlen,
++ const u_char* buf,
++ u_char* eccbuf,
++ int oobsel)
++{
++ int i;
++ int ret;
++
++ for (i = 0; i < MAX_WRITE_RETRIES; i++) {
++ ret = orig_write_ecc(mtd, to, len, retlen, buf, eccbuf, oobsel);
++ if (ret != -EIO){
++ return ret;
++ }
++
++ ret = tc6393_nand_prepare_rewrite(mtd, to, oobsel);
++ if (ret)
++ return ret;
++ }
++ return -EIO;
++}
++
++
++/* same as sharp_sl.c */
++static int
++tc6393_nand_write(struct mtd_info* mtd,
++ loff_t to,
++ size_t len,
++ size_t* retlen,
++ const u_char* buf)
++{
++ return tc6393_nand_write_ecc(mtd, to, len, retlen, buf, NULL, NAND_JFFS2_OOB);
++}
++
++/* same as sharp_sl.c */
++static int
++tc6393_nand_writev_ecc(struct mtd_info* mtd,
++ const struct iovec* vecs,
++ unsigned long count,
++ loff_t to,
++ size_t* retlen,
++ u_char* eccbuf,
++ int oobsel)
++{
++ int i;
++ int ret;
++
++ for (i = 0; i < MAX_WRITE_RETRIES; i++) {
++ ret = orig_writev_ecc(mtd, vecs, count, to, retlen, eccbuf, oobsel);
++ if (ret != -EIO)
++ return ret;
++
++ ret = tc6393_nand_prepare_rewrite(mtd, to, oobsel);
++ if (ret)
++ return ret;
++ }
++ return -EIO;
++}
++
++/* same as sharp_sl.c */
++static int
++tc6393_nand_writev(struct mtd_info* mtd,
++ const struct iovec* vecs,
++ unsigned long count,
++ loff_t to,
++ size_t* retlen)
++{
++ return tc6393_nand_writev_ecc(mtd, vecs, count, to, retlen, NULL, NAND_JFFS2_OOB);
++}
++
++
++/* same as sharp_sl.c */
++static int
++tc6393_nand_write_oob(struct mtd_info* mtd,
++ loff_t to,
++ size_t len,
++ size_t* retlen,
++ const u_char* buf)
++{
++ int i;
++ int ret;
++
++ for (i = 0; i < MAX_WRITE_RETRIES; i++) {
++ ret = orig_write_oob(mtd, to, len, retlen, buf);
++ if (ret != -EIO)
++ return ret;
++
++ ret = tc6393_nand_prepare_rewrite(mtd, to & ~(mtd->erasesize - 1), // JFFS2 only (JFFS2 calls write_oob only after erasing)
++ NAND_JFFS2_OOB);
++ if (ret)
++ return ret;
++ }
++ return -EIO;
++}
++
++
++/* same as sharp_sl.c */
++static int
++tc6393_nand_flash_busy(void)
++{
++ return (nandctrl->sustus & SUSTUS_BUSY) == SUSTUS_BUSY;
++}
++
++
++/*
++ *
++ */
++/* same as sharp_sl.c */
++static int
++tc6393_nand_dev_ready(void)
++{
++ int i;
++ for (i = 0; i < 5; i++)
++ tc6393_nand_flash_busy();
++ return ! tc6393_nand_flash_busy();
++}
++
++
++/*
++ *
++ */
++/* same as sharp_sl.c */
++static int
++tc6393_nand_suspend(struct mtd_info* mtd)
++{
++ int i;
++ printk("%s", __func__);
++ for (i = 0; i < nr_partitions; i++) {
++ invalidate_device(MKDEV(MTD_BLOCK_MAJOR, sharp_sl_nand_part_mtdp[i]->index), 1);
++ }
++ mtd->sync(mtd);
++
++ printk("\n");
++ return 0;
++}
++
++/*
++ *
++ */
++/* same as sharp_sl.c */
++static void
++tc6393_nand_resume(struct mtd_info* mtd)
++{
++ printk("%s\n", __func__);
++ tc6393_nand_hw_init();
++}
++
++
++#ifdef CONFIG_MTD_NAND_ECC
++/*
++ *
++ */
++static void
++tc6393_nand_enable_hwecc(int mode)
++{
++ volatile unsigned char dummy_read;
++
++ if(mode == NAND_ECC_WRITE){
++ /* Hard_ECC Reset_Mode(Read) */
++ nandctrl->smode = SMODE_HWECC_WRITE_RESET_ECC;
++ /* Read dummy data (1byte) */
++ dummy_read = nandctrl->sdata.data8.sdata0;
++ /* Hard_ECC CALC_Mode(Read) */
++ nandctrl->smode = SMODE_HWECC_WRITE_ECCCALC;
++
++ hwecc_mode = HWECC_MODE_WRITE;
++ return;
++ }else{
++ /* Hard_ECC Reset_Mode(Write) */
++ nandctrl->smode = SMODE_HWECC_READ_RESET_ECC;
++ /* Read dummy data (1byte) */
++ dummy_read = nandctrl->sdata.data8.sdata0;
++ /* Hard_ECC CALC_Mode(Read) */
++ nandctrl->smode = SMODE_HWECC_READ_ECCCALC;
++
++ hwecc_mode = HWECC_MODE_READ;
++ return;
++ }
++}
++
++
++/*
++ *
++ */
++static int
++tc6393_nand_calculate_ecc(const u_char* dat,
++ u_char* ecc_code)
++{
++ unsigned short ecc1,ecc2,ecc3;
++
++ if(hwecc_mode == HWECC_MODE_READ){
++ nandctrl->smode = SMODE_HWECC_READ_CALC_RESULT;
++ }else if(hwecc_mode == HWECC_MODE_WRITE){
++ nandctrl->smode = SMODE_HWECC_WRITE_CALC_RESULT;
++ }else{
++ printk("Unable to calcutate NAND ecc.");
++ return -EIO;
++ }
++
++ ecc1 = nandctrl->sdata.data16.sdata0_1;
++ ecc2 = nandctrl->sdata.data16.sdata0_1;
++ ecc3 = nandctrl->sdata.data16.sdata0_1;
++
++ ecc_code[0] = ecc1 >> 8; // 000-255 LP15-8
++ ecc_code[1] = ecc1 >> 0; // 000-255 LP7-0
++ ecc_code[2] = ecc2 >> 0; // 000-255 CP5-0,11b
++ ecc_code[3] = ecc3 >> 0; // 256-511 LP15-8
++ ecc_code[4] = ecc2 >> 8; // 256-511 LP7-0
++ ecc_code[5] = ecc3 >> 8; // 256-511 CP5-0,11b
++
++ if(hwecc_mode == HWECC_MODE_READ){
++ nandctrl->smode = SMODE_READ_DATAREAD;
++ }else{
++ nandctrl->smode = SMODE_WRITE_DATAWRITE;
++ }
++
++ hwecc_mode = HWECC_MODE_DISABLE;
++ return 0;
++}
++#endif
++
++
++static void tc6393_nand_hw_init(void)
++{
++ /* (89h) SMD Buffer ON By TC6393XB SystemConfig */
++ sysconfig->gpibfc1 = 0xff;
++
++ /* (4Ch) CLKRUN Enable 1st */
++ nandconfig->spcrunc = 0x81;
++
++ /* (10h)BaseAddress 0x1000 */
++ nandconfig->spba.spba2 = TC6393XB_NANDCTRL_OFFSET;
++
++ /* (04h)Command Register I/O */
++ nandconfig->spcmd = 0x02;
++
++ /* (62h) Power Supply Control */
++ /* HardPowerOFF - SuspendOFF - PowerSupplyWait_4MS */
++ nandconfig->ssmpwc = 0x02;
++
++ /* (63h) Detect Control */
++ nandconfig->ssmdtc = 0x02;
++
++ /* Interrupt status register clear */
++ nandctrl->sintst = 0x0f;
++
++ /* After power supply, Media are reset */
++ nandctrl->smode = SMODE_POWER_ON;
++ nandctrl->smode = SMODE_READ_COMMAND;
++ nandctrl->sdata.data8.sdata0 = NAND_CMD_RESET;
++
++ /* Stanby Mode */
++ nandctrl->smode = SMODE_STANDBY;
++
++ mdelay(100);
++
++ return;
++}
++
++/* same as sharp_sl.c */
++#ifdef DEBUG_PROC
++DEFINE_MEASUREMENT_VAR(nand_read_page);
++DEFINE_COUNTER_VAR(nand_read_nr_pages);
++DEFINE_MEASUREMENT_VAR(nand_write_page);
++DEFINE_MEASUREMENT_VAR(nand_write_verify);
++DEFINE_COUNTER_VAR(nand_write_nr_pages);
++static int
++sharp_sl_nand_read_proc(char* buf,
++ char** start,
++ off_t offset,
++ int count,
++ int* eof,
++ void* data)
++{
++ int len = 0;
++ PRINT_ELAPSED_TIME(nand_read_page, buf, len);
++ len += sprintf(buf + len, "nand_read_nr_pages %d\n", nand_read_nr_pages);
++ PRINT_ELAPSED_TIME(nand_write_page, buf, len);
++ PRINT_ELAPSED_TIME(nand_write_verify, buf, len);
++ len += sprintf(buf + len, "nand_write_nr_pages %d\n", nand_write_nr_pages);
++ *eof = 1;
++ return len;
++}
++
++
++static int sharp_sl_nand_write_proc(struct file* file,
++ const char* buffer,
++ unsigned long count,
++ void* data)
++{
++ CLEAR_TIME_VER(nand_read_page);
++ CLEAR_TIME_VER(nand_write_page);
++ CLEAR_TIME_VER(nand_write_verify);
++ nand_read_nr_pages = 0;
++ nand_write_nr_pages = 0;
++ return count;
++}
++#endif
++
++
++/*
++ * Main initialization routine
++ */
++int __init
++tc6393_nand_init (void)
++{
++ extern int parse_cmdline_partitions(struct mtd_info *, struct mtd_partition **,
++ const char *);
++ struct nand_chip *this;
++ int i;
++
++ //printk("**** %s:\n",__func__);
++
++ /* Allocate memory for MTD device structure and private data */
++ sharp_sl_mtd = kmalloc (sizeof(struct mtd_info) + sizeof (struct nand_chip),
++ GFP_KERNEL);
++ if (!sharp_sl_mtd) {
++ printk ("Unable to allocate Poodle NAND MTD device structure.\n");
++ return -ENOMEM;
++ }
++
++ /* Initialize NAND flash controller on TC6393XB */
++ tc6393_nand_hw_init();
++
++ /* Get pointer to private data */
++ this = (struct nand_chip *) (&sharp_sl_mtd[1]);
++
++ /* Initialize structures */
++ memset((char *) sharp_sl_mtd, 0, sizeof(struct mtd_info));
++ memset((char *) this, 0, sizeof(struct nand_chip));
++
++ /* Link the private data with the MTD structure */
++ sharp_sl_mtd->priv = this;
++
++ /*
++ * PXA initialize
++ */
++
++ /* Set address of NAND IO lines */
++ this->IO_ADDR_R = (unsigned long)&nandctrl->sdata.data8.sdata0;
++ this->IO_ADDR_W = (unsigned long)&nandctrl->sdata.data8.sdata0;
++
++ /* Set address of hardware control function */
++ this->hwcontrol = tc6393_nand_hwcontrol;
++ this->dev_ready = tc6393_nand_dev_ready;
++ this->cmdfunc = tc6393_nand_command;
++
++ /* 15 us command delay time */
++ this->chip_delay = 15;
++
++ /* set eccmode using hardware ECC */
++#ifdef CONFIG_MTD_NAND_ECC
++ this->eccmode = NAND_ECC_HW6_512;
++ this->enable_hwecc = tc6393_nand_enable_hwecc;
++ this->calculate_ecc = tc6393_nand_calculate_ecc;
++ this->correct_data = nand_correct_data;
++#endif
++
++ /* Scan to find existence of the device */
++ if (nand_scan (sharp_sl_mtd)) {
++ kfree (sharp_sl_mtd);
++ return -ENXIO;
++ }
++
++#if 1
++ sharp_sl_mtd->eccsize = this->eccsize;
++#endif
++
++ if (this->eccmode == NAND_ECC_HW6_512 && sharp_sl_mtd->oobblock == 512) {
++ orig_read_ecc = sharp_sl_mtd->read_ecc;
++ sharp_sl_mtd->read = tc6393_nand_read;
++ sharp_sl_mtd->read_ecc = tc6393_nand_read_ecc;
++
++ orig_write_ecc = sharp_sl_mtd->write_ecc;
++ sharp_sl_mtd->write = tc6393_nand_write;
++ sharp_sl_mtd->write_ecc = tc6393_nand_write_ecc;
++
++ orig_writev_ecc = sharp_sl_mtd->writev_ecc;
++ sharp_sl_mtd->writev = tc6393_nand_writev;
++ sharp_sl_mtd->writev_ecc = tc6393_nand_writev_ecc;
++
++ orig_write_oob = sharp_sl_mtd->write_oob;
++ sharp_sl_mtd->write_oob = tc6393_nand_write_oob;
++ }
++ sharp_sl_mtd->suspend = tc6393_nand_suspend;
++ sharp_sl_mtd->resume = tc6393_nand_resume;
++#ifdef CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS
++ sharp_sl_mtd->cleanup_laddr = sharp_sl_nand_cleanup_laddr;
++ sharp_sl_mtd->read_laddr = sharp_sl_nand_read_laddr;
++ sharp_sl_mtd->write_laddr = sharp_sl_nand_write_laddr;
++#endif
++
++ /* Allocate memory for internal data buffer */
++ this->data_buf = kmalloc (sizeof(u_char) * (sharp_sl_mtd->oobblock + sharp_sl_mtd->oobsize), GFP_KERNEL);
++ if (!this->data_buf) {
++ printk ("Unable to allocate NAND data buffer for Poodle.\n");
++ kfree (sharp_sl_mtd);
++ return -ENOMEM;
++ }
++
++ /* Allocate memory for internal data buffer */
++ this->data_cache = kmalloc (sizeof(u_char) * (sharp_sl_mtd->oobblock + sharp_sl_mtd->oobsize), GFP_KERNEL);
++ if (!this->data_cache) {
++ printk ("Unable to allocate NAND data cache for Poodle.\n");
++ kfree (this->data_buf);
++ kfree (sharp_sl_mtd);
++ return -ENOMEM;
++ }
++
++ /* Register the partitions */
++ nr_partitions = parse_cmdline_partitions(sharp_sl_mtd,
++ &sharp_sl_nand_partition_info,
++ "sharpsl-nand");
++ if (nr_partitions <= 0) {
++ nr_partitions = DEFAULT_NUM_PARTITIONS;
++ sharp_sl_nand_partition_info = sharp_sl_nand_default_partition_info;
++ }
++ sharp_sl_nand_part_mtdp = kmalloc(sizeof (struct mtd_info*) * nr_partitions,
++ GFP_KERNEL);
++ if (! sharp_sl_nand_part_mtdp) {
++ printk("Unable to allocate memory for sharp_sl_nand_part_mtdp\n");
++ kfree(this->data_buf);
++ kfree(this->data_cache);
++ kfree(sharp_sl_mtd);
++ return -ENOMEM;
++ }
++ for (i = 0; i < nr_partitions; i++)
++ sharp_sl_nand_partition_info[i].mtdp = &sharp_sl_nand_part_mtdp[i];
++ add_mtd_partitions(sharp_sl_mtd, sharp_sl_nand_partition_info, nr_partitions);
++
++ for (i = 0; i < nr_partitions; i++)
++ add_mtd_device(sharp_sl_nand_part_mtdp[i]);
++
++#ifdef DEBUG_PROC
++ struct proc_dir_entry* res = create_proc_read_entry("mtd-debug", 0, NULL, sharp_sl_nand_read_proc, NULL);
++ res->write_proc = sharp_sl_nand_write_proc;
++#endif
++
++ /* Return happy */
++ return 0;
++}
++module_init(tc6393_nand_init);
++
++/*
++ * Clean up routine
++ */
++#ifdef MODULE
++static void __exit sharp_sl_nand_cleanup (void)
++{
++ struct nand_chip *this = (struct nand_chip *) &sharp_sl_mtd[1];
++
++ /* Unregister the device */
++ del_mtd_partitions (sharp_sl_mtd);
++ int i;
++ for (i = 0; i < NUM_PARTITIONS)
++ del_mtd_device (sharp_sl_nand_part_mtdp[i]);
++
++ /* Free internal data buffer */
++ kfree (this->data_buf);
++ kfree (this->data_cache);
++ kfree (this->page_cache);
++
++ /* Free the MTD device structure */
++ kfree (sharp_sl_nand_part_mtdp);
++ if (sharp_sl_nand_partition_info != sharp_sl_nand_default_partition_info)
++ kfree (sharp_sl_nand_partition_info);
++ kfree (sharp_sl_mtd);
++}
++module_exit(sharp_sl_nand_cleanup);
++#endif
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("SHARP, Inc.");
++MODULE_DESCRIPTION("Board-specific glue layer for NAND flash on Tosa");
+diff -Nur linux_c860_org/drivers/net/Config.in linux/drivers/net/Config.in
+--- linux_c860_org/drivers/net/Config.in 2002-08-26 15:00:07.000000000 +0900
++++ linux/drivers/net/Config.in 2004-06-10 21:09:10.000000000 +0900
+@@ -280,6 +280,7 @@
+ dep_tristate ' PPP support for sync tty ports' CONFIG_PPP_SYNC_TTY $CONFIG_PPP
+ dep_tristate ' PPP Deflate compression' CONFIG_PPP_DEFLATE $CONFIG_PPP
+ dep_tristate ' PPP BSD-Compress compression' CONFIG_PPP_BSDCOMP $CONFIG_PPP
++ dep_tristate ' Microsoft PPP encryption (MPPE)' CONFIG_PPP_MPPE $CONFIG_PPP
+ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+ dep_tristate ' PPP over Ethernet (EXPERIMENTAL)' CONFIG_PPPOE $CONFIG_PPP
+ fi
+diff -Nur linux_c860_org/drivers/net/Makefile linux/drivers/net/Makefile
+--- linux_c860_org/drivers/net/Makefile 2002-08-26 14:43:55.000000000 +0900
++++ linux/drivers/net/Makefile 2004-06-10 21:09:10.000000000 +0900
+@@ -137,6 +137,14 @@
+ obj-$(CONFIG_PPP_BSDCOMP) += bsd_comp.o
+ obj-$(CONFIG_PPPOE) += pppox.o pppoe.o
+
++ifeq ($(CONFIG_PPP_MPPE),y)
++ obj-y += ppp_mppe.o
++else
++ ifeq ($(CONFIG_PPP_MPPE),m)
++ obj-m += ppp_mppe.o
++ endif
++endif
++
+ obj-$(CONFIG_SLIP) += slip.o
+ ifeq ($(CONFIG_SLIP_COMPRESSED),y)
+ obj-$(CONFIG_SLIP) += slhc.o
+diff -Nur linux_c860_org/drivers/net/md32_common.h linux/drivers/net/md32_common.h
+--- linux_c860_org/drivers/net/md32_common.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/net/md32_common.h 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,607 @@
++/* crypto/md32_common.h */
++/* ====================================================================
++ * Copyright (c) 1999 The OpenSSL Project. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ *
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ *
++ * 2. 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.
++ *
++ * 3. All advertising materials mentioning features or use of this
++ * software must display the following acknowledgment:
++ * "This product includes software developed by the OpenSSL Project
++ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
++ *
++ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
++ * endorse or promote products derived from this software without
++ * prior written permission. For written permission, please contact
++ * licensing@OpenSSL.org.
++ *
++ * 5. Products derived from this software may not be called "OpenSSL"
++ * nor may "OpenSSL" appear in their names without prior written
++ * permission of the OpenSSL Project.
++ *
++ * 6. Redistributions of any form whatsoever must retain the following
++ * acknowledgment:
++ * "This product includes software developed by the OpenSSL Project
++ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
++ * EXPRESSED 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 OpenSSL PROJECT OR
++ * ITS 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.
++ * ====================================================================
++ *
++ * This product includes cryptographic software written by Eric Young
++ * (eay@cryptsoft.com). This product includes software written by Tim
++ * Hudson (tjh@cryptsoft.com).
++ *
++ */
++
++/*
++ * This is a generic 32 bit "collector" for message digest algorithms.
++ * Whenever needed it collects input character stream into chunks of
++ * 32 bit values and invokes a block function that performs actual hash
++ * calculations.
++ *
++ * Porting guide.
++ *
++ * Obligatory macros:
++ *
++ * DATA_ORDER_IS_BIG_ENDIAN or DATA_ORDER_IS_LITTLE_ENDIAN
++ * this macro defines byte order of input stream.
++ * HASH_CBLOCK
++ * size of a unit chunk HASH_BLOCK operates on.
++ * HASH_LONG
++ * has to be at lest 32 bit wide, if it's wider, then
++ * HASH_LONG_LOG2 *has to* be defined along
++ * HASH_CTX
++ * context structure that at least contains following
++ * members:
++ * typedef struct {
++ * ...
++ * HASH_LONG Nl,Nh;
++ * HASH_LONG data[HASH_LBLOCK];
++ * int num;
++ * ...
++ * } HASH_CTX;
++ * HASH_UPDATE
++ * name of "Update" function, implemented here.
++ * HASH_TRANSFORM
++ * name of "Transform" function, implemented here.
++ * HASH_FINAL
++ * name of "Final" function, implemented here.
++ * HASH_BLOCK_HOST_ORDER
++ * name of "block" function treating *aligned* input message
++ * in host byte order, implemented externally.
++ * HASH_BLOCK_DATA_ORDER
++ * name of "block" function treating *unaligned* input message
++ * in original (data) byte order, implemented externally (it
++ * actually is optional if data and host are of the same
++ * "endianess").
++ * HASH_MAKE_STRING
++ * macro convering context variables to an ASCII hash string.
++ *
++ * Optional macros:
++ *
++ * B_ENDIAN or L_ENDIAN
++ * defines host byte-order.
++ * HASH_LONG_LOG2
++ * defaults to 2 if not states otherwise.
++ * HASH_LBLOCK
++ * assumed to be HASH_CBLOCK/4 if not stated otherwise.
++ * HASH_BLOCK_DATA_ORDER_ALIGNED
++ * alternative "block" function capable of treating
++ * aligned input message in original (data) order,
++ * implemented externally.
++ *
++ * MD5 example:
++ *
++ * #define DATA_ORDER_IS_LITTLE_ENDIAN
++ *
++ * #define HASH_LONG MD5_LONG
++ * #define HASH_LONG_LOG2 MD5_LONG_LOG2
++ * #define HASH_CTX MD5_CTX
++ * #define HASH_CBLOCK MD5_CBLOCK
++ * #define HASH_LBLOCK MD5_LBLOCK
++ * #define HASH_UPDATE MD5_Update
++ * #define HASH_TRANSFORM MD5_Transform
++ * #define HASH_FINAL MD5_Final
++ * #define HASH_BLOCK_HOST_ORDER md5_block_host_order
++ * #define HASH_BLOCK_DATA_ORDER md5_block_data_order
++ *
++ * <appro@fy.chalmers.se>
++ */
++
++#if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN)
++#error "DATA_ORDER must be defined!"
++#endif
++
++#ifndef HASH_CBLOCK
++#error "HASH_CBLOCK must be defined!"
++#endif
++#ifndef HASH_LONG
++#error "HASH_LONG must be defined!"
++#endif
++#ifndef HASH_CTX
++#error "HASH_CTX must be defined!"
++#endif
++
++#ifndef HASH_UPDATE
++#error "HASH_UPDATE must be defined!"
++#endif
++#ifndef HASH_TRANSFORM
++#error "HASH_TRANSFORM must be defined!"
++#endif
++#ifndef HASH_FINAL
++#error "HASH_FINAL must be defined!"
++#endif
++
++#ifndef HASH_BLOCK_HOST_ORDER
++#error "HASH_BLOCK_HOST_ORDER must be defined!"
++#endif
++
++#if 0
++/*
++ * Moved below as it's required only if HASH_BLOCK_DATA_ORDER_ALIGNED
++ * isn't defined.
++ */
++#ifndef HASH_BLOCK_DATA_ORDER
++#error "HASH_BLOCK_DATA_ORDER must be defined!"
++#endif
++#endif
++
++#ifndef HASH_LBLOCK
++#define HASH_LBLOCK (HASH_CBLOCK/4)
++#endif
++
++#ifndef HASH_LONG_LOG2
++#define HASH_LONG_LOG2 2
++#endif
++
++/*
++ * Engage compiler specific rotate intrinsic function if available.
++ */
++#undef ROTATE
++#ifndef PEDANTIC
++# if defined(_MSC_VER)
++# define ROTATE(a,n) _lrotl(a,n)
++# elif defined(__MWERKS__)
++# if defined(__POWERPC__)
++# define ROTATE(a,n) __rlwinm(a,n,0,31)
++# elif defined(__MC68K__)
++ /* Motorola specific tweak. <appro@fy.chalmers.se> */
++# define ROTATE(a,n) ( n<24 ? __rol(a,n) : __ror(a,32-n) )
++# else
++# define ROTATE(a,n) __rol(a,n)
++# endif
++# elif defined(__GNUC__) && __GNUC__>=2 && !defined(NO_ASM) && !defined(NO_INLINE_ASM)
++ /*
++ * Some GNU C inline assembler templates. Note that these are
++ * rotates by *constant* number of bits! But that's exactly
++ * what we need here...
++ *
++ * <appro@fy.chalmers.se>
++ */
++# if defined(__i386)
++# define ROTATE(a,n) ({ register unsigned int ret; \
++ asm ( \
++ "roll %1,%0" \
++ : "=r"(ret) \
++ : "I"(n), "0"(a) \
++ : "cc"); \
++ ret; \
++ })
++# elif defined(__powerpc) || defined(__ppc)
++# define ROTATE(a,n) ({ register unsigned int ret; \
++ asm ( \
++ "rlwinm %0,%1,%2,0,31" \
++ : "=r"(ret) \
++ : "r"(a), "I"(n)); \
++ ret; \
++ })
++# endif
++# endif
++
++/*
++ * Engage compiler specific "fetch in reverse byte order"
++ * intrinsic function if available.
++ */
++# if defined(__GNUC__) && __GNUC__>=2 && !defined(NO_ASM) && !defined(NO_INLINE_ASM)
++ /* some GNU C inline assembler templates by <appro@fy.chalmers.se> */
++# if defined(__i386) && !defined(I386_ONLY)
++# define BE_FETCH32(a) ({ register unsigned int l=(a);\
++ asm ( \
++ "bswapl %0" \
++ : "=r"(l) : "0"(l)); \
++ l; \
++ })
++# elif defined(__powerpc)
++# define LE_FETCH32(a) ({ register unsigned int l; \
++ asm ( \
++ "lwbrx %0,0,%1" \
++ : "=r"(l) \
++ : "r"(a)); \
++ l; \
++ })
++
++# elif defined(__sparc) && defined(ULTRASPARC)
++# define LE_FETCH32(a) ({ register unsigned int l; \
++ asm ( \
++ "lda [%1]#ASI_PRIMARY_LITTLE,%0"\
++ : "=r"(l) \
++ : "r"(a)); \
++ l; \
++ })
++# endif
++# endif
++#endif /* PEDANTIC */
++
++#if HASH_LONG_LOG2==2 /* Engage only if sizeof(HASH_LONG)== 4 */
++/* A nice byte order reversal from Wei Dai <weidai@eskimo.com> */
++#ifdef ROTATE
++/* 5 instructions with rotate instruction, else 9 */
++#define REVERSE_FETCH32(a,l) ( \
++ l=*(const HASH_LONG *)(a), \
++ ((ROTATE(l,8)&0x00FF00FF)|(ROTATE((l&0x00FF00FF),24))) \
++ )
++#else
++/* 6 instructions with rotate instruction, else 8 */
++#define REVERSE_FETCH32(a,l) ( \
++ l=*(const HASH_LONG *)(a), \
++ l=(((l>>8)&0x00FF00FF)|((l&0x00FF00FF)<<8)), \
++ ROTATE(l,16) \
++ )
++/*
++ * Originally the middle line started with l=(((l&0xFF00FF00)>>8)|...
++ * It's rewritten as above for two reasons:
++ * - RISCs aren't good at long constants and have to explicitely
++ * compose 'em with several (well, usually 2) instructions in a
++ * register before performing the actual operation and (as you
++ * already realized:-) having same constant should inspire the
++ * compiler to permanently allocate the only register for it;
++ * - most modern CPUs have two ALUs, but usually only one has
++ * circuitry for shifts:-( this minor tweak inspires compiler
++ * to schedule shift instructions in a better way...
++ *
++ * <appro@fy.chalmers.se>
++ */
++#endif
++#endif
++
++#ifndef ROTATE
++#define ROTATE(a,n) (((a)<<(n))|(((a)&0xffffffff)>>(32-(n))))
++#endif
++
++/*
++ * Make some obvious choices. E.g., HASH_BLOCK_DATA_ORDER_ALIGNED
++ * and HASH_BLOCK_HOST_ORDER ought to be the same if input data
++ * and host are of the same "endianess". It's possible to mask
++ * this with blank #define HASH_BLOCK_DATA_ORDER though...
++ *
++ * <appro@fy.chalmers.se>
++ */
++#if defined(B_ENDIAN)
++# if defined(DATA_ORDER_IS_BIG_ENDIAN)
++# if !defined(HASH_BLOCK_DATA_ORDER_ALIGNED) && HASH_LONG_LOG2==2
++# define HASH_BLOCK_DATA_ORDER_ALIGNED HASH_BLOCK_HOST_ORDER
++# endif
++# elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
++# ifndef HOST_FETCH32
++# ifdef LE_FETCH32
++# define HOST_FETCH32(p,l) LE_FETCH32(p)
++# elif defined(REVERSE_FETCH32)
++# define HOST_FETCH32(p,l) REVERSE_FETCH32(p,l)
++# endif
++# endif
++# endif
++#elif defined(L_ENDIAN)
++# if defined(DATA_ORDER_IS_LITTLE_ENDIAN)
++# if !defined(HASH_BLOCK_DATA_ORDER_ALIGNED) && HASH_LONG_LOG2==2
++# define HASH_BLOCK_DATA_ORDER_ALIGNED HASH_BLOCK_HOST_ORDER
++# endif
++# elif defined(DATA_ORDER_IS_BIG_ENDIAN)
++# ifndef HOST_FETCH32
++# ifdef BE_FETCH32
++# define HOST_FETCH32(p,l) BE_FETCH32(p)
++# elif defined(REVERSE_FETCH32)
++# define HOST_FETCH32(p,l) REVERSE_FETCH32(p,l)
++# endif
++# endif
++# endif
++#endif
++
++#if !defined(HASH_BLOCK_DATA_ORDER_ALIGNED)
++#ifndef HASH_BLOCK_DATA_ORDER
++#error "HASH_BLOCK_DATA_ORDER must be defined!"
++#endif
++#endif
++
++#if defined(DATA_ORDER_IS_BIG_ENDIAN)
++
++#define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++)))<<24), \
++ l|=(((unsigned long)(*((c)++)))<<16), \
++ l|=(((unsigned long)(*((c)++)))<< 8), \
++ l|=(((unsigned long)(*((c)++))) ), \
++ l)
++#define HOST_p_c2l(c,l,n) { \
++ switch (n) { \
++ case 0: l =((unsigned long)(*((c)++)))<<24; \
++ case 1: l|=((unsigned long)(*((c)++)))<<16; \
++ case 2: l|=((unsigned long)(*((c)++)))<< 8; \
++ case 3: l|=((unsigned long)(*((c)++))); \
++ } }
++#define HOST_p_c2l_p(c,l,sc,len) { \
++ switch (sc) { \
++ case 0: l =((unsigned long)(*((c)++)))<<24; \
++ if (--len == 0) break; \
++ case 1: l|=((unsigned long)(*((c)++)))<<16; \
++ if (--len == 0) break; \
++ case 2: l|=((unsigned long)(*((c)++)))<< 8; \
++ } }
++/* NOTE the pointer is not incremented at the end of this */
++#define HOST_c2l_p(c,l,n) { \
++ l=0; (c)+=n; \
++ switch (n) { \
++ case 3: l =((unsigned long)(*(--(c))))<< 8; \
++ case 2: l|=((unsigned long)(*(--(c))))<<16; \
++ case 1: l|=((unsigned long)(*(--(c))))<<24; \
++ } }
++#define HOST_l2c(l,c) (*((c)++)=(unsigned char)(((l)>>24)&0xff), \
++ *((c)++)=(unsigned char)(((l)>>16)&0xff), \
++ *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
++ *((c)++)=(unsigned char)(((l) )&0xff), \
++ l)
++
++#elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
++
++#define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++))) ), \
++ l|=(((unsigned long)(*((c)++)))<< 8), \
++ l|=(((unsigned long)(*((c)++)))<<16), \
++ l|=(((unsigned long)(*((c)++)))<<24), \
++ l)
++#define HOST_p_c2l(c,l,n) { \
++ switch (n) { \
++ case 0: l =((unsigned long)(*((c)++))); \
++ case 1: l|=((unsigned long)(*((c)++)))<< 8; \
++ case 2: l|=((unsigned long)(*((c)++)))<<16; \
++ case 3: l|=((unsigned long)(*((c)++)))<<24; \
++ } }
++#define HOST_p_c2l_p(c,l,sc,len) { \
++ switch (sc) { \
++ case 0: l =((unsigned long)(*((c)++))); \
++ if (--len == 0) break; \
++ case 1: l|=((unsigned long)(*((c)++)))<< 8; \
++ if (--len == 0) break; \
++ case 2: l|=((unsigned long)(*((c)++)))<<16; \
++ } }
++/* NOTE the pointer is not incremented at the end of this */
++#define HOST_c2l_p(c,l,n) { \
++ l=0; (c)+=n; \
++ switch (n) { \
++ case 3: l =((unsigned long)(*(--(c))))<<16; \
++ case 2: l|=((unsigned long)(*(--(c))))<< 8; \
++ case 1: l|=((unsigned long)(*(--(c)))); \
++ } }
++#define HOST_l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \
++ *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
++ *((c)++)=(unsigned char)(((l)>>16)&0xff), \
++ *((c)++)=(unsigned char)(((l)>>24)&0xff), \
++ l)
++
++#endif
++
++/*
++ * Time for some action:-)
++ */
++
++void HASH_UPDATE (HASH_CTX *c, const void *data_, unsigned long len)
++ {
++ const unsigned char *data=data_;
++ register HASH_LONG * p;
++ register unsigned long l;
++ int sw,sc,ew,ec;
++
++ if (len==0) return;
++
++ l=(c->Nl+(len<<3))&0xffffffffL;
++ /* 95-05-24 eay Fixed a bug with the overflow handling, thanks to
++ * Wei Dai <weidai@eskimo.com> for pointing it out. */
++ if (l < c->Nl) /* overflow */
++ c->Nh++;
++ c->Nh+=(len>>29);
++ c->Nl=l;
++
++ if (c->num != 0)
++ {
++ p=c->data;
++ sw=c->num>>2;
++ sc=c->num&0x03;
++
++ if ((c->num+len) >= HASH_CBLOCK)
++ {
++ l=p[sw]; HOST_p_c2l(data,l,sc); p[sw++]=l;
++ for (; sw<HASH_LBLOCK; sw++)
++ {
++ HOST_c2l(data,l); p[sw]=l;
++ }
++ HASH_BLOCK_HOST_ORDER (c,p,1);
++ len-=(HASH_CBLOCK-c->num);
++ c->num=0;
++ /* drop through and do the rest */
++ }
++ else
++ {
++ c->num+=len;
++ if ((sc+len) < 4) /* ugly, add char's to a word */
++ {
++ l=p[sw]; HOST_p_c2l_p(data,l,sc,len); p[sw]=l;
++ }
++ else
++ {
++ ew=(c->num>>2);
++ ec=(c->num&0x03);
++ l=p[sw]; HOST_p_c2l(data,l,sc); p[sw++]=l;
++ for (; sw < ew; sw++)
++ {
++ HOST_c2l(data,l); p[sw]=l;
++ }
++ if (ec)
++ {
++ HOST_c2l_p(data,l,ec); p[sw]=l;
++ }
++ }
++ return;
++ }
++ }
++
++ sw=len/HASH_CBLOCK;
++ if (sw > 0)
++ {
++#if defined(HASH_BLOCK_DATA_ORDER_ALIGNED)
++ /*
++ * Note that HASH_BLOCK_DATA_ORDER_ALIGNED gets defined
++ * only if sizeof(HASH_LONG)==4.
++ */
++ if ((((unsigned long)data)%4) == 0)
++ {
++ /* data is properly aligned so that we can cast it: */
++ HASH_BLOCK_DATA_ORDER_ALIGNED (c,(HASH_LONG *)data,sw);
++ sw*=HASH_CBLOCK;
++ data+=sw;
++ len-=sw;
++ }
++ else
++#if !defined(HASH_BLOCK_DATA_ORDER)
++ while (sw--)
++ {
++ memcpy (p=c->data,data,HASH_CBLOCK);
++ HASH_BLOCK_DATA_ORDER_ALIGNED(c,p,1);
++ data+=HASH_CBLOCK;
++ len-=HASH_CBLOCK;
++ }
++#endif
++#endif
++#if defined(HASH_BLOCK_DATA_ORDER)
++ {
++ HASH_BLOCK_DATA_ORDER(c,data,sw);
++ sw*=HASH_CBLOCK;
++ data+=sw;
++ len-=sw;
++ }
++#endif
++ }
++
++ if (len!=0)
++ {
++ p = c->data;
++ c->num = len;
++ ew=len>>2; /* words to copy */
++ ec=len&0x03;
++ for (; ew; ew--,p++)
++ {
++ HOST_c2l(data,l); *p=l;
++ }
++ HOST_c2l_p(data,l,ec);
++ *p=l;
++ }
++ }
++
++
++void HASH_TRANSFORM (HASH_CTX *c, const unsigned char *data)
++ {
++#if defined(HASH_BLOCK_DATA_ORDER_ALIGNED)
++ if ((((unsigned long)data)%4) == 0)
++ /* data is properly aligned so that we can cast it: */
++ HASH_BLOCK_DATA_ORDER_ALIGNED (c,(HASH_LONG *)data,1);
++ else
++#if !defined(HASH_BLOCK_DATA_ORDER)
++ {
++ memcpy (c->data,data,HASH_CBLOCK);
++ HASH_BLOCK_DATA_ORDER_ALIGNED (c,c->data,1);
++ }
++#endif
++#endif
++#if defined(HASH_BLOCK_DATA_ORDER)
++ HASH_BLOCK_DATA_ORDER (c,data,1);
++#endif
++ }
++
++
++void HASH_FINAL (unsigned char *md, HASH_CTX *c)
++ {
++ register HASH_LONG *p;
++ register unsigned long l;
++ register int i,j;
++ static const unsigned char end[4]={0x80,0x00,0x00,0x00};
++ const unsigned char *cp=end;
++
++ /* c->num should definitly have room for at least one more byte. */
++ p=c->data;
++ i=c->num>>2;
++ j=c->num&0x03;
++
++#if 0
++ /* purify often complains about the following line as an
++ * Uninitialized Memory Read. While this can be true, the
++ * following p_c2l macro will reset l when that case is true.
++ * This is because j&0x03 contains the number of 'valid' bytes
++ * already in p[i]. If and only if j&0x03 == 0, the UMR will
++ * occur but this is also the only time p_c2l will do
++ * l= *(cp++) instead of l|= *(cp++)
++ * Many thanks to Alex Tang <altitude@cic.net> for pickup this
++ * 'potential bug' */
++#ifdef PURIFY
++ if (j==0) p[i]=0; /* Yeah, but that's not the way to fix it:-) */
++#endif
++ l=p[i];
++#else
++ l = (j==0) ? 0 : p[i];
++#endif
++ HOST_p_c2l(cp,l,j); p[i++]=l; /* i is the next 'undefined word' */
++
++ if (i>(HASH_LBLOCK-2)) /* save room for Nl and Nh */
++ {
++ if (i<HASH_LBLOCK) p[i]=0;
++ HASH_BLOCK_HOST_ORDER (c,p,1);
++ i=0;
++ }
++ for (; i<(HASH_LBLOCK-2); i++)
++ p[i]=0;
++
++#if defined(DATA_ORDER_IS_BIG_ENDIAN)
++ p[HASH_LBLOCK-2]=c->Nh;
++ p[HASH_LBLOCK-1]=c->Nl;
++#elif defined(DATA_ORDER_IS_LITTLE_ENDIAN)
++ p[HASH_LBLOCK-2]=c->Nl;
++ p[HASH_LBLOCK-1]=c->Nh;
++#endif
++ HASH_BLOCK_HOST_ORDER (c,p,1);
++
++#ifndef HASH_MAKE_STRING
++#error "HASH_MAKE_STRING must be defined!"
++#else
++ HASH_MAKE_STRING(c,md);
++#endif
++
++ c->num=0;
++ /* clear stuff, HASH_BLOCK may be leaving some stuff on the stack
++ * but I'm not worried :-)
++ memset((void *)c,0,sizeof(HASH_CTX));
++ */
++ }
+diff -Nur linux_c860_org/drivers/net/mppe.h linux/drivers/net/mppe.h
+--- linux_c860_org/drivers/net/mppe.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/net/mppe.h 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,46 @@
++#ifndef MPPE_H
++#define MPPE_H
++
++typedef struct mppe_state {
++ int us_unit; /* Interface unit number */
++ u_char us_id; /* Current id */
++ u_char us_allowed;
++ int us_type;
++ char *us_number; /* Telefone Number */
++} mppe_state;
++
++
++extern struct protent mppe_protent;
++
++#define MPPE_CONFOPTION 18
++#define MPPC 0x01
++#define MPPE_40BIT 0x20
++#define MPPE_128BIT 0x40
++
++#define PPP_MPPE 0x00FD
++#define PPP_MPPC PPP_MPPE
++
++#define MPPE_BIT_A 0x80
++#define MPPE_BIT_B 0x40
++#define MPPE_BIT_C 0x20
++#define MPPE_BIT_D 0x10
++#define MPPE_BIT_FLUSHED MPPE_BIT_A
++#define MPPE_BIT_ENCRYPTED MPPE_BIT_D
++#define MPPE_CCOUNT 0x0FFF
++
++#define MPPC_BIT_RESET MPPE_BIT_A
++#define MPPC_BIT_FLUSH MPPE_BIT_B
++#define MPPC_BIT_COMP MPPC_BIT_C
++
++#define MPPE_40_SALT0 0xD1
++#define MPPE_40_SALT1 0x26
++#define MPPE_40_SALT2 0x9E
++
++#define MPPE_MINLEN 4
++
++#define MPPE_REQ 1
++#define MPPE_RESP 2
++#define MPPE_ACK 3
++
++#endif
++/*==FILEVERSION 970728==*/
+diff -Nur linux_c860_org/drivers/net/ppp_generic.c linux/drivers/net/ppp_generic.c
+--- linux_c860_org/drivers/net/ppp_generic.c 2002-08-29 12:25:24.000000000 +0900
++++ linux/drivers/net/ppp_generic.c 2004-06-10 21:09:10.000000000 +0900
+@@ -1014,7 +1014,10 @@
+ /* try to do packet compression */
+ if ((ppp->xstate & SC_COMP_RUN) && ppp->xc_state != 0
+ && proto != PPP_LCP && proto != PPP_CCP) {
+- new_skb = alloc_skb(ppp->dev->mtu + ppp->dev->hard_header_len,
++ int comp_overhead = (ppp->xcomp->compress_proto == CI_MPPE) ?
++ 4 : 0;
++ new_skb = alloc_skb(ppp->dev->mtu + ppp->dev->hard_header_len
++ + comp_overhead,
+ GFP_ATOMIC);
+ if (new_skb == 0) {
+ printk(KERN_ERR "PPP: no memory (comp pkt)\n");
+@@ -1027,7 +1030,8 @@
+ /* compressor still expects A/C bytes in hdr */
+ len = ppp->xcomp->compress(ppp->xc_state, skb->data - 2,
+ new_skb->data, skb->len + 2,
+- ppp->dev->mtu + PPP_HDRLEN);
++ ppp->dev->mtu + PPP_HDRLEN +
++ comp_overhead);
+ if (len > 0 && (ppp->flags & SC_CCP_UP)) {
+ kfree_skb(skb);
+ skb = new_skb;
+diff -Nur linux_c860_org/drivers/net/ppp_mppe.c linux/drivers/net/ppp_mppe.c
+--- linux_c860_org/drivers/net/ppp_mppe.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/net/ppp_mppe.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,669 @@
++/*
++ * ==FILEVERSION 9906180==
++ *
++ * ppp_mppe.c - MPPE "compressor/decompressor" module.
++ *
++ * Copyright (c) 1994 ª¡rp«¡d Magos«¡nyi <mag@bunuel.tii.matav.hu>
++ * All rights reserved.
++ * Copyright (c) 1999 Tim Hockin, Cobalt Networks Inc. <thockin@cobaltnet.com>
++ *
++ * Permission to use, copy, modify, and distribute this software and its
++ * documentation is hereby granted, provided that the above copyright
++ * notice appears in all copies. This software is provided without any
++ * warranty, express or implied. The Australian National University
++ * makes no representations about the suitability of this software for
++ * any purpose.
++ *
++ * IN NO EVENT SHALL THE AUSTRALIAN NATIONAL UNIVERSITY BE LIABLE TO ANY
++ * PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
++ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
++ * THE AUSTRALIAN NATIONAL UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY
++ * OF SUCH DAMAGE.
++ *
++ * THE AUSTRALIAN NATIONAL UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES,
++ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
++ * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
++ * ON AN "AS IS" BASIS, AND THE AUSTRALIAN NATIONAL UNIVERSITY HAS NO
++ * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
++ * OR MODIFICATIONS.
++ *
++ * From: deflate.c,v 1.1 1996/01/18 03:17:48 paulus Exp
++ */
++
++#include <linux/module.h>
++#include <linux/version.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/fcntl.h>
++#include <linux/interrupt.h>
++#include <linux/ptrace.h>
++#include <linux/ioport.h>
++#include <linux/in.h>
++#include <linux/malloc.h>
++
++#undef VERSION
++/* a nice define to generate linux version numbers */
++#define VERSION(major,minor,patch) (((((major)<<8)+(minor))<<8)+(patch))
++
++#if LINUX_VERSION_CODE >= VERSION(2,1,4)
++#include <linux/vmalloc.h>
++#endif
++#include <linux/errno.h>
++#include <linux/sched.h> /* to get the struct task_struct */
++#include <linux/string.h> /* used in new tty drivers */
++#include <linux/signal.h> /* used in new tty drivers */
++
++#include <asm/system.h>
++
++#include <linux/netdevice.h>
++#include <linux/skbuff.h>
++#include <linux/inet.h>
++#include <linux/ioctl.h>
++
++#include <linux/ppp_defs.h>
++#include <linux/ppp-comp.h>
++#include "rc4_enc.c"
++#include "rc4_skey.c"
++#include "sha1dgst.c"
++#include "mppe.h"
++
++/*
++ * State for a mppe "(de)compressor".
++ */
++struct ppp_mppe_state {
++ unsigned int ccount; /*coherency count */
++ RC4_KEY RC4_send_key; /* chap-ms-v2 dictates 2 keys */
++ RC4_KEY RC4_recv_key;
++ unsigned char session_send_key[16];
++ unsigned char session_recv_key[16];
++ unsigned char master_send_key[16];
++ unsigned char master_recv_key[16];
++ int keylen;
++ int stateless;
++ int decomp_error;
++ unsigned int bits;
++ int unit;
++ int debug;
++ int mru;
++ struct compstat stats;
++};
++
++#define MPPE_CCOUNT_FROM_PACKET(ibuf) ((((ibuf)[4] & 0x0f) << 8) + (ibuf)[5])
++#define MPPE_BITS(ibuf) ((ibuf)[4] & 0xf0 )
++#define MPPE_CTRLHI(state) ((((state)->ccount & 0xf00)>>8)|((state)->bits))
++#define MPPE_CTRLLO(state) ((state)->ccount & 0xff)
++
++#define MPPE_OVHD 4
++
++/* Procedures from the MPPE draft */
++
++/*
++ * Pads used in key derivation
++ */
++static unsigned char SHAPad1[40] =
++ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
++static unsigned char SHAPad2[40] =
++ {0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2,
++ 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2,
++ 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2,
++ 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2, 0xF2};
++
++/*
++ * SHAInit(), SHAUpdate() and SHAFinal() functions are an
++ * implementation of Secure Hash Algorithm (SHA-1) [7]. These are
++ * available in public domain or can be licensed from
++ * RSA Data Security, Inc.
++ *
++ * 1) H is 8 bytes long for 40 bit session keys.
++ * 2) H is 16 bytes long for 128 bit session keys.
++ * 3) H' is same as H when this routine is called for the first time
++ * for the session.
++ * 4) The generated key is returned in H'. This is the "current" key.
++ */
++static void
++GetNewKeyFromSHA(StartKey, SessionKey, SessionKeyLength, InterimKey)
++ unsigned char *StartKey;
++ unsigned char *SessionKey;
++ unsigned long SessionKeyLength;
++ unsigned char *InterimKey;
++{
++ SHA_CTX Context;
++ unsigned char Digest[SHA_DIGEST_LENGTH];
++
++ SHA1_Init(&Context);
++ SHA1_Update(&Context, StartKey, SessionKeyLength);
++ SHA1_Update(&Context, SHAPad1, 40);
++ SHA1_Update(&Context, SessionKey, SessionKeyLength);
++ SHA1_Update(&Context, SHAPad2, 40);
++ SHA1_Final(Digest,&Context);
++ memcpy(InterimKey, Digest, SessionKeyLength);
++}
++
++static void
++mppe_synchronize_key(struct ppp_mppe_state *state)
++{
++ /* get new keys and flag our state as such */
++ RC4_set_key(&(state->RC4_send_key),state->keylen,state->session_send_key);
++ RC4_set_key(&(state->RC4_recv_key),state->keylen,state->session_recv_key);
++
++ state->bits=MPPE_BIT_FLUSHED|MPPE_BIT_ENCRYPTED;
++}
++
++
++static void
++mppe_initialize_key(struct ppp_mppe_state *state)
++{
++ /* generate new session keys */
++ GetNewKeyFromSHA(state->master_send_key, state->master_send_key,
++ state->keylen, state->session_send_key);
++ GetNewKeyFromSHA(state->master_recv_key, state->master_recv_key,
++ state->keylen, state->session_recv_key);
++
++ if(state->keylen == 8) {
++ /* cripple them from 64bit->40bit */
++ state->session_send_key[0]=state->session_recv_key[0] = MPPE_40_SALT0;
++ state->session_send_key[1]=state->session_recv_key[1] = MPPE_40_SALT1;
++ state->session_send_key[2]=state->session_recv_key[2] = MPPE_40_SALT2;
++ }
++
++ mppe_synchronize_key(state);
++}
++
++
++static void
++mppe_change_key(struct ppp_mppe_state *state)
++{
++ unsigned char InterimSendKey[16];
++ unsigned char InterimRecvKey[16];
++
++ /* get temp keys */
++ GetNewKeyFromSHA(state->master_send_key, state->session_send_key,
++ state->keylen, InterimSendKey);
++ GetNewKeyFromSHA(state->master_recv_key, state->session_recv_key,
++ state->keylen, InterimRecvKey);
++
++ /* build RC4 keys from the temp keys */
++ RC4_set_key(&(state->RC4_send_key), state->keylen, InterimSendKey);
++ RC4_set_key(&(state->RC4_recv_key), state->keylen, InterimRecvKey);
++
++ /* make new session keys */
++ RC4(&(state->RC4_send_key), state->keylen, InterimSendKey,
++ state->session_send_key);
++ RC4(&(state->RC4_recv_key), state->keylen, InterimRecvKey,
++ state->session_recv_key);
++
++ if(state->keylen == 8)
++ {
++ /* cripple them from 64->40 bits*/
++ state->session_send_key[0]=state->session_recv_key[0] = MPPE_40_SALT0;
++ state->session_send_key[1]=state->session_recv_key[1] = MPPE_40_SALT1;
++ state->session_send_key[2]=state->session_recv_key[2] = MPPE_40_SALT2;
++ }
++
++ /* make the final rc4 keys */
++ RC4_set_key(&(state->RC4_send_key), state->keylen, state->session_send_key);
++ RC4_set_key(&(state->RC4_recv_key), state->keylen, state->session_recv_key);
++
++ state->bits |= MPPE_BIT_FLUSHED;
++}
++
++
++#ifdef DEBUG
++/* Utility procedures to print a buffer in hex/ascii */
++static void
++ppp_print_hex (register __u8 *out, const __u8 *in, int count)
++{
++ register __u8 next_ch;
++ static char hex[] = "0123456789ABCDEF";
++
++ while (count-- > 0) {
++ next_ch = *in++;
++ *out++ = hex[(next_ch >> 4) & 0x0F];
++ *out++ = hex[next_ch & 0x0F];
++ ++out;
++ }
++}
++
++
++static void
++ppp_print_char (register __u8 *out, const __u8 *in, int count)
++{
++ register __u8 next_ch;
++
++ while (count-- > 0) {
++ next_ch = *in++;
++
++ if (next_ch < 0x20 || next_ch > 0x7e)
++ *out++ = '.';
++ else {
++ *out++ = next_ch;
++ if (next_ch == '%') /* printk/syslogd has a bug !! */
++ *out++ = '%';
++ }
++ }
++ *out = '\0';
++}
++
++
++static void
++ppp_print_buffer (const __u8 *name, const __u8 *buf, int count)
++{
++ __u8 line[44];
++
++ if (name != (__u8 *) NULL)
++ printk (KERN_DEBUG "ppp: %s, count = %d\n", name, count);
++
++ while (count > 8) {
++ memset (line, 32, 44);
++ ppp_print_hex (line, buf, 8);
++ ppp_print_char (&line[8 * 3], buf, 8);
++ printk (KERN_DEBUG "%s\n", line);
++ count -= 8;
++ buf += 8;
++ }
++
++ if (count > 0) {
++ memset (line, 32, 44);
++ ppp_print_hex (line, buf, count);
++ ppp_print_char (&line[8 * 3], buf, count);
++ printk (KERN_DEBUG "%s\n", line);
++ }
++}
++#endif
++
++/* our 'compressor' proper */
++static void *mppe_comp_alloc __P((unsigned char *, int));
++static void mppe_comp_free __P((void *));
++static int mppe_comp_init __P((void *, unsigned char *,
++ int, int, int, int));
++static int mppe_decomp_init __P((void *, unsigned char *,
++ int, int, int, int, int));
++static int mppe_compress __P((void *, unsigned char *,
++ unsigned char *, int, int));
++static void mppe_incomp __P((void *, unsigned char *, int));
++static int mppe_decompress __P((void *, unsigned char *,
++ int, unsigned char *, int));
++static void mppe_comp_reset __P((void *));
++static void mppe_comp_stats __P((void *, struct compstat *));
++
++
++/* cleanup the compressor */
++static void
++mppe_comp_free(void *arg)
++{
++ struct ppp_mppe_state *state = (struct ppp_mppe_state *) arg;
++
++ if (state) {
++ kfree(state);
++ MOD_DEC_USE_COUNT;
++ }
++}
++
++
++/* allocate space for a compressor. */
++static void *
++mppe_comp_alloc(unsigned char *options, int opt_len)
++{
++ struct ppp_mppe_state *state;
++
++ if (((2*8)+3 != opt_len && (2*16)+3 != opt_len) /* 2 keys + 3 */
++ || options[0] != CI_MPPE || options[1] != CILEN_MPPE) {
++ printk(KERN_DEBUG "compress rejected: opt_len=%u,o[0]=%x,o[1]=%x\n",
++ opt_len,options[0],options[1]);
++ return NULL;
++ }
++
++ state = (struct ppp_mppe_state *)kmalloc(sizeof(*state), GFP_KERNEL);
++ if (state == NULL)
++ return NULL;
++
++ MOD_INC_USE_COUNT;
++
++ memset (state, 0, sizeof (struct ppp_mppe_state));
++
++ /* write the data in options to the right places */
++ memcpy(&state->stateless,options+2,1);
++
++ state->keylen = (opt_len-3)/2;
++ memcpy(state->master_send_key,options+3,state->keylen);
++ memcpy(state->master_recv_key,options+3+state->keylen,state->keylen);
++
++ mppe_initialize_key(state);
++
++ return (void *) state;
++}
++
++
++static int
++mppe_comp_init(void *arg, unsigned char *options, int opt_len, int unit,
++ int hdrlen, int debug)
++{
++ struct ppp_mppe_state *state = (struct ppp_mppe_state *)arg;
++
++ if (options[0] != CI_MPPE || options[1] != CILEN_MPPE) {
++ printk(KERN_DEBUG "compress rejected: opt_len=%u,o[0]=%x,o[1]=%x\n",
++ opt_len,options[0],options[1]);
++ return 0;
++ }
++
++ state->ccount = 0;
++ state->unit = unit;
++ state->debug = debug;
++
++ /* 19 is the min (2*keylen) + 3 */
++ if(opt_len >= 19) {
++ memcpy(&state->stateless,options+2,1);
++
++ state->keylen = (opt_len-3)/2;
++ memcpy(state->master_send_key,options+3,state->keylen);
++ memcpy(state->master_recv_key,options+3+state->keylen,state->keylen);
++
++ mppe_initialize_key(state);
++ }
++
++ return 1;
++}
++
++
++static int
++mppe_decomp_init(void *arg, unsigned char *options, int opt_len, int unit,
++ int hdrlen, int mru, int debug)
++{
++ struct ppp_mppe_state *state = (struct ppp_mppe_state *)arg;
++
++ if (options[0] != CI_MPPE || options[1] != CILEN_MPPE) {
++ printk(KERN_DEBUG"options are bad: %x %x\n",options[0],options[1]);
++ return 0;
++ }
++
++ state->ccount = 0;
++ state->unit = unit;
++ state->debug = debug;
++ state->mru = mru;
++
++ /* 19 is the min (2*keylen)+3 */
++ if(opt_len >= 19) {
++ memcpy(&state->stateless,options+2,1);
++
++ state->keylen = (opt_len-3)/2;
++ memcpy(state->master_send_key,options+3,state->keylen);
++ memcpy(state->master_recv_key,options+3+state->keylen,state->keylen);
++
++ mppe_initialize_key(state);
++ }
++
++ return 1;
++}
++
++
++static void
++mppe_comp_reset(void *arg)
++{
++ struct ppp_mppe_state *state = (struct ppp_mppe_state *)arg;
++
++ printk(KERN_DEBUG "mppe_comp_reset\n");
++
++ (state->stats).in_count = 0;
++ (state->stats).bytes_out = 0;
++ (state->stats).ratio = 0;
++
++ mppe_synchronize_key(state);
++}
++
++
++static void
++mppe_update_count(struct ppp_mppe_state *state)
++{
++ if(!state->stateless)
++ {
++ if ( 0xff == (state->ccount&0xff)){
++ /* time to change keys */
++ if ( 0xfff == (state->ccount&0xfff)){
++ state->ccount = 0;
++ } else {
++ (state->ccount)++;
++ }
++ mppe_change_key(state);
++ } else {
++ state->ccount++;
++ }
++ } else {
++ if ( 0xFFF == (state->ccount & 0xFFF)) {
++ state->ccount = 0;
++ } else {
++ (state->ccount)++;
++ }
++ mppe_change_key(state);
++ }
++}
++
++
++/* the big nasty */
++int
++mppe_compress(void *arg, unsigned char *rptr, unsigned char *obuf,
++ int isize, int osize)
++{
++ struct ppp_mppe_state *state = (struct ppp_mppe_state *) arg;
++ int proto, olen;
++ unsigned char *wptr;
++
++#ifdef DEBUG
++ ppp_print_buffer("mppe_encrypt",rptr,isize);
++#endif
++
++ if(osize < isize+MPPE_OVHD) {
++ printk(KERN_DEBUG "Not enough space to encrypt packet: %d<%d+%d!\n",
++ isize, osize, MPPE_OVHD);
++ return 0;
++ }
++
++ /* Check that the protocol is in the range we handle. */
++ proto = PPP_PROTOCOL(rptr);
++ if (proto < 0x0021 || proto > 0x00FA )
++ return 0;
++
++ wptr = obuf;
++
++ /* Copy over the PPP header and store the 2-byte sequence number. */
++ wptr[0] = PPP_ADDRESS(rptr);
++ wptr[1] = PPP_CONTROL(rptr);
++ wptr[2] = PPP_MPPE >>8;
++ wptr[3] = PPP_MPPE;
++ wptr += PPP_HDRLEN;
++ wptr[0] = MPPE_CTRLHI(state);
++ wptr[1] = MPPE_CTRLLO(state);
++ wptr += 2;
++
++ state->bits=MPPE_BIT_ENCRYPTED;
++ mppe_update_count(state);
++
++ /* read from rptr, write to wptr adjust for PPP_HDRLEN */
++ RC4(&(state->RC4_send_key),isize-2,rptr+2,wptr);
++ olen=isize+MPPE_OVHD;
++
++ (state->stats).comp_bytes += isize;
++ (state->stats).comp_packets++;
++
++#ifdef DEBUG
++ ppp_print_buffer("mppe_encrypt out",obuf,olen);
++#endif
++
++ return olen;
++}
++
++
++static void
++mppe_comp_stats(void *arg, struct compstat *stats)
++{
++ struct ppp_mppe_state *state = (struct ppp_mppe_state *)arg;
++
++ /* since we don't REALLY compress at all, this should be OK */
++ (state->stats).in_count = (state->stats).unc_bytes;
++ (state->stats).bytes_out = (state->stats).comp_bytes;
++
++ /* this _SHOULD_ always be 1 */
++ (state->stats).ratio = 1.0;
++// printk(" in count : %d , out bytes %d \n;",(state->stats).in_count,(state->stats).bytes_out);
++
++ *stats = state->stats;
++
++}
++
++
++/* the other big nasty */
++int
++mppe_decompress(void *arg, unsigned char *ibuf, int isize,
++ unsigned char *obuf, int osize)
++{
++ struct ppp_mppe_state *state = (struct ppp_mppe_state *)arg;
++ int seq;
++
++ if (isize <= PPP_HDRLEN + MPPE_OVHD) {
++ if (state->debug) {
++ printk(KERN_DEBUG "mppe_decompress%d: short packet (len=%d)\n",
++ state->unit, isize);
++ }
++
++ return DECOMP_ERROR;
++ }
++
++ /* Check the sequence number. */
++ seq = MPPE_CCOUNT_FROM_PACKET(ibuf);
++
++ if(!state->stateless && (MPPE_BITS(ibuf) & MPPE_BIT_FLUSHED)) {
++ state->decomp_error = 0;
++ state->ccount = seq;
++ }
++
++ if(state->decomp_error) {
++ return DECOMP_ERROR;
++ }
++
++ if (seq != state->ccount) {
++ if (state->debug) {
++ printk(KERN_DEBUG "mppe_decompress%d: bad seq # %d, expected %d\n",
++ state->unit, seq, state->ccount);
++ }
++
++ while(state->ccount != seq) {
++ mppe_update_count(state);
++ }
++
++ /*
++ * Packets with bad sequence numbers can still be decrypted
++ * successfully when stateless compression is in use.
++ */
++ if (!state->stateless) {
++ mppe_update_count(state);
++
++ return DECOMP_ERROR;
++ }
++ }
++
++ /*
++ * Fill in the first part of the PPP header. The protocol field
++ * comes from the decompressed data.
++ */
++ obuf[0] = PPP_ADDRESS(ibuf);
++ obuf[1] = PPP_CONTROL(ibuf);
++ obuf += 2;
++
++ if(!(MPPE_BITS(ibuf) & MPPE_BIT_ENCRYPTED)) {
++ printk(KERN_DEBUG"ERROR: not an encrypted packet");
++ mppe_synchronize_key(state);
++ return DECOMP_ERROR;
++ } else {
++ if(!state->stateless && (MPPE_BITS(ibuf) & MPPE_BIT_FLUSHED))
++ mppe_synchronize_key(state);
++ mppe_update_count(state);
++
++ /* decrypt - adjust for PPP_HDRLEN + MPPE_OVHD - mru should be OK */
++ RC4(&(state->RC4_recv_key),isize-6,ibuf+6,obuf);
++
++ (state->stats).unc_bytes += (isize-MPPE_OVHD);
++ (state->stats).unc_packets ++;
++
++ return isize-MPPE_OVHD;
++ }
++}
++
++
++/* Incompressible data has arrived - add it to the history. */
++static void
++mppe_incomp(void *arg, unsigned char *ibuf, int icnt)
++{
++ struct ppp_mppe_state *state = (struct ppp_mppe_state *)arg;
++
++ (state->stats).inc_bytes += icnt;
++ (state->stats).inc_packets++;
++}
++
++/*
++ * Help for Alpha users who have problems with undefined symbols on
++ * module load
++ */
++#ifdef ALPHA
++#include "../../arch/s390/kernel/floatlib.c"
++#endif
++
++
++/*************************************************************
++ * Module interface table
++ *************************************************************/
++
++/* These are in ppp.c */
++extern int ppp_register_compressor (struct compressor *cp);
++extern void ppp_unregister_compressor (struct compressor *cp);
++
++/*
++ * Procedures exported to if_ppp.c.
++ */
++struct compressor ppp_mppe = {
++ CI_MPPE, /* compress_proto */
++ mppe_comp_alloc, /* comp_alloc */
++ mppe_comp_free, /* comp_free */
++ mppe_comp_init, /* comp_init */
++ mppe_comp_reset, /* comp_reset */
++ mppe_compress, /* compress */
++ mppe_comp_stats, /* comp_stat */
++ mppe_comp_alloc, /* decomp_alloc */
++ mppe_comp_free, /* decomp_free */
++ mppe_decomp_init, /* decomp_init */
++ mppe_comp_reset, /* decomp_reset */
++ mppe_decompress, /* decompress */
++ mppe_incomp, /* incomp */
++ mppe_comp_stats, /* decomp_stat */
++};
++
++
++#ifdef MODULE
++/*************************************************************
++ * Module support routines
++ *************************************************************/
++
++int
++init_module(void)
++{
++ int answer = ppp_register_compressor(&ppp_mppe);
++ if (answer == 0) {
++ printk(KERN_INFO "PPP MPPE compression module registered\n");
++ }
++ return answer;
++}
++
++
++void
++cleanup_module(void)
++{
++ if (MOD_IN_USE) {
++ printk (KERN_INFO "MPPE module busy, remove delayed\n");
++ } else {
++ ppp_unregister_compressor (&ppp_mppe);
++ printk(KERN_INFO "PPP MPPE compression module unregistered\n");
++ }
++}
++#endif /* MODULE */
+diff -Nur linux_c860_org/drivers/net/rc4_enc.c linux/drivers/net/rc4_enc.c
+--- linux_c860_org/drivers/net/rc4_enc.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/net/rc4_enc.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,315 @@
++/* crypto/rc4/rc4_enc.c */
++/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
++ * All rights reserved.
++ *
++ * This package is an SSL implementation written
++ * by Eric Young (eay@cryptsoft.com).
++ * The implementation was written so as to conform with Netscapes SSL.
++ *
++ * This library is free for commercial and non-commercial use as long as
++ * the following conditions are aheared to. The following conditions
++ * apply to all code found in this distribution, be it the RC4, RSA,
++ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
++ * included with this distribution is covered by the same copyright terms
++ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
++ *
++ * Copyright remains Eric Young's, and as such any Copyright notices in
++ * the code are not to be removed.
++ * If this package is used in a product, Eric Young should be given attribution
++ * as the author of the parts of the library used.
++ * This can be in the form of a textual message at program startup or
++ * in documentation (online or textual) provided with the package.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. 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.
++ * 3. All advertising materials mentioning features or use of this software
++ * must display the following acknowledgement:
++ * "This product includes cryptographic software written by
++ * Eric Young (eay@cryptsoft.com)"
++ * The word 'cryptographic' can be left out if the rouines from the library
++ * being used are not cryptographic related :-).
++ * 4. If you include any Windows specific code (or a derivative thereof) from
++ * the apps directory (application code) you must include an acknowledgement:
++ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
++ *
++ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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.
++ *
++ * The licence and distribution terms for any publically available version or
++ * derivative of this code cannot be changed. i.e. this code cannot simply be
++ * copied and put under another distribution licence
++ * [including the GNU Public Licence.]
++ */
++
++#include <openssl/rc4.h>
++#include "rc4_locl.h"
++
++/* RC4 as implemented from a posting from
++ * Newsgroups: sci.crypt
++ * From: sterndark@netcom.com (David Sterndark)
++ * Subject: RC4 Algorithm revealed.
++ * Message-ID: <sternCvKL4B.Hyy@netcom.com>
++ * Date: Wed, 14 Sep 1994 06:35:31 GMT
++ */
++
++void RC4(RC4_KEY *key, unsigned long len, const unsigned char *indata,
++ unsigned char *outdata)
++ {
++ register RC4_INT *d;
++ register RC4_INT x,y,tx,ty;
++ int i;
++
++ x=key->x;
++ y=key->y;
++ d=key->data;
++
++#if defined(RC4_CHUNK)
++ /*
++ * The original reason for implementing this(*) was the fact that
++ * pre-21164a Alpha CPUs don't have byte load/store instructions
++ * and e.g. a byte store has to be done with 64-bit load, shift,
++ * and, or and finally 64-bit store. Peaking data and operating
++ * at natural word size made it possible to reduce amount of
++ * instructions as well as to perform early read-ahead without
++ * suffering from RAW (read-after-write) hazard. This resulted
++ * in ~40%(**) performance improvement on 21064 box with gcc.
++ * But it's not only Alpha users who win here:-) Thanks to the
++ * early-n-wide read-ahead this implementation also exhibits
++ * >40% speed-up on SPARC and 20-30% on 64-bit MIPS (depending
++ * on sizeof(RC4_INT)).
++ *
++ * (*) "this" means code which recognizes the case when input
++ * and output pointers appear to be aligned at natural CPU
++ * word boundary
++ * (**) i.e. according to 'apps/openssl speed rc4' benchmark,
++ * crypto/rc4/rc4speed.c exhibits almost 70% speed-up...
++ *
++ * Cavets.
++ *
++ * - RC4_CHUNK="unsigned long long" should be a #1 choice for
++ * UltraSPARC. Unfortunately gcc generates very slow code
++ * (2.5-3 times slower than one generated by Sun's WorkShop
++ * C) and therefore gcc (at least 2.95 and earlier) should
++ * always be told that RC4_CHUNK="unsigned long".
++ *
++ * <appro@fy.chalmers.se>
++ */
++
++# define RC4_STEP ( \
++ x=(x+1) &0xff, \
++ tx=d[x], \
++ y=(tx+y)&0xff, \
++ ty=d[y], \
++ d[y]=tx, \
++ d[x]=ty, \
++ (RC4_CHUNK)d[(tx+ty)&0xff]\
++ )
++
++ if ( ( ((unsigned long)indata & (sizeof(RC4_CHUNK)-1)) |
++ ((unsigned long)outdata & (sizeof(RC4_CHUNK)-1)) ) == 0 )
++ {
++ RC4_CHUNK ichunk,otp;
++ const union { long one; char little; } is_endian = {1};
++
++ /*
++ * I reckon we can afford to implement both endian
++ * cases and to decide which way to take at run-time
++ * because the machine code appears to be very compact
++ * and redundant 1-2KB is perfectly tolerable (i.e.
++ * in case the compiler fails to eliminate it:-). By
++ * suggestion from Terrel Larson <terr@terralogic.net>
++ * who also stands for the is_endian union:-)
++ *
++ * Special notes.
++ *
++ * - is_endian is declared automatic as doing otherwise
++ * (declaring static) prevents gcc from eliminating
++ * the redundant code;
++ * - compilers (those I've tried) don't seem to have
++ * problems eliminating either the operators guarded
++ * by "if (sizeof(RC4_CHUNK)==8)" or the condition
++ * expressions themselves so I've got 'em to replace
++ * corresponding #ifdefs from the previous version;
++ * - I chose to let the redundant switch cases when
++ * sizeof(RC4_CHUNK)!=8 be (were also #ifdefed
++ * before);
++ * - in case you wonder "&(sizeof(RC4_CHUNK)*8-1)" in
++ * [LB]ESHFT guards against "shift is out of range"
++ * warnings when sizeof(RC4_CHUNK)!=8
++ *
++ * <appro@fy.chalmers.se>
++ */
++ if (!is_endian.little)
++ { /* BIG-ENDIAN CASE */
++# define BESHFT(c) (((sizeof(RC4_CHUNK)-(c)-1)*8)&(sizeof(RC4_CHUNK)*8-1))
++ for (;len&-sizeof(RC4_CHUNK);len-=sizeof(RC4_CHUNK))
++ {
++ ichunk = *(RC4_CHUNK *)indata;
++ otp = RC4_STEP<<BESHFT(0);
++ otp |= RC4_STEP<<BESHFT(1);
++ otp |= RC4_STEP<<BESHFT(2);
++ otp |= RC4_STEP<<BESHFT(3);
++ if (sizeof(RC4_CHUNK)==8)
++ {
++ otp |= RC4_STEP<<BESHFT(4);
++ otp |= RC4_STEP<<BESHFT(5);
++ otp |= RC4_STEP<<BESHFT(6);
++ otp |= RC4_STEP<<BESHFT(7);
++ }
++ *(RC4_CHUNK *)outdata = otp^ichunk;
++ indata += sizeof(RC4_CHUNK);
++ outdata += sizeof(RC4_CHUNK);
++ }
++ if (len)
++ {
++ RC4_CHUNK mask=(RC4_CHUNK)-1, ochunk;
++
++ ichunk = *(RC4_CHUNK *)indata;
++ ochunk = *(RC4_CHUNK *)outdata;
++ otp = 0;
++ i = BESHFT(0);
++ mask <<= (sizeof(RC4_CHUNK)-len)<<3;
++ switch (len&(sizeof(RC4_CHUNK)-1))
++ {
++ case 7: otp = RC4_STEP<<i, i-=8;
++ case 6: otp |= RC4_STEP<<i, i-=8;
++ case 5: otp |= RC4_STEP<<i, i-=8;
++ case 4: otp |= RC4_STEP<<i, i-=8;
++ case 3: otp |= RC4_STEP<<i, i-=8;
++ case 2: otp |= RC4_STEP<<i, i-=8;
++ case 1: otp |= RC4_STEP<<i, i-=8;
++ case 0: ; /*
++ * it's never the case,
++ * but it has to be here
++ * for ultrix?
++ */
++ }
++ ochunk &= ~mask;
++ ochunk |= (otp^ichunk) & mask;
++ *(RC4_CHUNK *)outdata = ochunk;
++ }
++ key->x=x;
++ key->y=y;
++ return;
++ }
++ else
++ { /* LITTLE-ENDIAN CASE */
++# define LESHFT(c) (((c)*8)&(sizeof(RC4_CHUNK)*8-1))
++ for (;len&-sizeof(RC4_CHUNK);len-=sizeof(RC4_CHUNK))
++ {
++ ichunk = *(RC4_CHUNK *)indata;
++ otp = RC4_STEP;
++ otp |= RC4_STEP<<8;
++ otp |= RC4_STEP<<16;
++ otp |= RC4_STEP<<24;
++ if (sizeof(RC4_CHUNK)==8)
++ {
++ otp |= RC4_STEP<<LESHFT(4);
++ otp |= RC4_STEP<<LESHFT(5);
++ otp |= RC4_STEP<<LESHFT(6);
++ otp |= RC4_STEP<<LESHFT(7);
++ }
++ *(RC4_CHUNK *)outdata = otp^ichunk;
++ indata += sizeof(RC4_CHUNK);
++ outdata += sizeof(RC4_CHUNK);
++ }
++ if (len)
++ {
++ RC4_CHUNK mask=(RC4_CHUNK)-1, ochunk;
++
++ ichunk = *(RC4_CHUNK *)indata;
++ ochunk = *(RC4_CHUNK *)outdata;
++ otp = 0;
++ i = 0;
++ mask >>= (sizeof(RC4_CHUNK)-len)<<3;
++ switch (len&(sizeof(RC4_CHUNK)-1))
++ {
++ case 7: otp = RC4_STEP, i+=8;
++ case 6: otp |= RC4_STEP<<i, i+=8;
++ case 5: otp |= RC4_STEP<<i, i+=8;
++ case 4: otp |= RC4_STEP<<i, i+=8;
++ case 3: otp |= RC4_STEP<<i, i+=8;
++ case 2: otp |= RC4_STEP<<i, i+=8;
++ case 1: otp |= RC4_STEP<<i, i+=8;
++ case 0: ; /*
++ * it's never the case,
++ * but it has to be here
++ * for ultrix?
++ */
++ }
++ ochunk &= ~mask;
++ ochunk |= (otp^ichunk) & mask;
++ *(RC4_CHUNK *)outdata = ochunk;
++ }
++ key->x=x;
++ key->y=y;
++ return;
++ }
++ }
++#endif
++#define LOOP(in,out) \
++ x=((x+1)&0xff); \
++ tx=d[x]; \
++ y=(tx+y)&0xff; \
++ d[x]=ty=d[y]; \
++ d[y]=tx; \
++ (out) = d[(tx+ty)&0xff]^ (in);
++
++#ifndef RC4_INDEX
++#define RC4_LOOP(a,b,i) LOOP(*((a)++),*((b)++))
++#else
++#define RC4_LOOP(a,b,i) LOOP(a[i],b[i])
++#endif
++
++ i=(int)(len>>3L);
++ if (i)
++ {
++ for (;;)
++ {
++ RC4_LOOP(indata,outdata,0);
++ RC4_LOOP(indata,outdata,1);
++ RC4_LOOP(indata,outdata,2);
++ RC4_LOOP(indata,outdata,3);
++ RC4_LOOP(indata,outdata,4);
++ RC4_LOOP(indata,outdata,5);
++ RC4_LOOP(indata,outdata,6);
++ RC4_LOOP(indata,outdata,7);
++#ifdef RC4_INDEX
++ indata+=8;
++ outdata+=8;
++#endif
++ if (--i == 0) break;
++ }
++ }
++ i=(int)len&0x07;
++ if (i)
++ {
++ for (;;)
++ {
++ RC4_LOOP(indata,outdata,0); if (--i == 0) break;
++ RC4_LOOP(indata,outdata,1); if (--i == 0) break;
++ RC4_LOOP(indata,outdata,2); if (--i == 0) break;
++ RC4_LOOP(indata,outdata,3); if (--i == 0) break;
++ RC4_LOOP(indata,outdata,4); if (--i == 0) break;
++ RC4_LOOP(indata,outdata,5); if (--i == 0) break;
++ RC4_LOOP(indata,outdata,6); if (--i == 0) break;
++ }
++ }
++ key->x=x;
++ key->y=y;
++ }
+diff -Nur linux_c860_org/drivers/net/rc4_locl.h linux/drivers/net/rc4_locl.h
+--- linux_c860_org/drivers/net/rc4_locl.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/net/rc4_locl.h 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,4 @@
++#ifndef HEADER_RC4_LOCL_H
++#define HEADER_RC4_LOCL_H
++#include <openssl/opensslconf.h>
++#endif
+diff -Nur linux_c860_org/drivers/net/rc4_skey.c linux/drivers/net/rc4_skey.c
+--- linux_c860_org/drivers/net/rc4_skey.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/net/rc4_skey.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,117 @@
++/* crypto/rc4/rc4_skey.c */
++/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
++ * All rights reserved.
++ *
++ * This package is an SSL implementation written
++ * by Eric Young (eay@cryptsoft.com).
++ * The implementation was written so as to conform with Netscapes SSL.
++ *
++ * This library is free for commercial and non-commercial use as long as
++ * the following conditions are aheared to. The following conditions
++ * apply to all code found in this distribution, be it the RC4, RSA,
++ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
++ * included with this distribution is covered by the same copyright terms
++ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
++ *
++ * Copyright remains Eric Young's, and as such any Copyright notices in
++ * the code are not to be removed.
++ * If this package is used in a product, Eric Young should be given attribution
++ * as the author of the parts of the library used.
++ * This can be in the form of a textual message at program startup or
++ * in documentation (online or textual) provided with the package.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. 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.
++ * 3. All advertising materials mentioning features or use of this software
++ * must display the following acknowledgement:
++ * "This product includes cryptographic software written by
++ * Eric Young (eay@cryptsoft.com)"
++ * The word 'cryptographic' can be left out if the rouines from the library
++ * being used are not cryptographic related :-).
++ * 4. If you include any Windows specific code (or a derivative thereof) from
++ * the apps directory (application code) you must include an acknowledgement:
++ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
++ *
++ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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.
++ *
++ * The licence and distribution terms for any publically available version or
++ * derivative of this code cannot be changed. i.e. this code cannot simply be
++ * copied and put under another distribution licence
++ * [including the GNU Public Licence.]
++ */
++
++#include <openssl/rc4.h>
++#include "rc4_locl.h"
++#include <openssl/opensslv.h>
++
++const char *RC4_version="RC4" OPENSSL_VERSION_PTEXT;
++
++const char *RC4_options(void)
++ {
++#ifdef RC4_INDEX
++ if (sizeof(RC4_INT) == 1)
++ return("rc4(idx,char)");
++ else
++ return("rc4(idx,int)");
++#else
++ if (sizeof(RC4_INT) == 1)
++ return("rc4(ptr,char)");
++ else
++ return("rc4(ptr,int)");
++#endif
++ }
++
++/* RC4 as implemented from a posting from
++ * Newsgroups: sci.crypt
++ * From: sterndark@netcom.com (David Sterndark)
++ * Subject: RC4 Algorithm revealed.
++ * Message-ID: <sternCvKL4B.Hyy@netcom.com>
++ * Date: Wed, 14 Sep 1994 06:35:31 GMT
++ */
++
++void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data)
++ {
++ register RC4_INT tmp;
++ register int id1,id2;
++ register RC4_INT *d;
++ unsigned int i;
++
++ d= &(key->data[0]);
++ for (i=0; i<256; i++)
++ d[i]=i;
++ key->x = 0;
++ key->y = 0;
++ id1=id2=0;
++
++#define SK_LOOP(n) { \
++ tmp=d[(n)]; \
++ id2 = (data[id1] + tmp + id2) & 0xff; \
++ if (++id1 == len) id1=0; \
++ d[(n)]=d[id2]; \
++ d[id2]=tmp; }
++
++ for (i=0; i < 256; i+=4)
++ {
++ SK_LOOP(i+0);
++ SK_LOOP(i+1);
++ SK_LOOP(i+2);
++ SK_LOOP(i+3);
++ }
++ }
++
+diff -Nur linux_c860_org/drivers/net/sha1dgst.c linux/drivers/net/sha1dgst.c
+--- linux_c860_org/drivers/net/sha1dgst.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/net/sha1dgst.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,73 @@
++/* crypto/sha/sha1dgst.c */
++/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
++ * All rights reserved.
++ *
++ * This package is an SSL implementation written
++ * by Eric Young (eay@cryptsoft.com).
++ * The implementation was written so as to conform with Netscapes SSL.
++ *
++ * This library is free for commercial and non-commercial use as long as
++ * the following conditions are aheared to. The following conditions
++ * apply to all code found in this distribution, be it the RC4, RSA,
++ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
++ * included with this distribution is covered by the same copyright terms
++ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
++ *
++ * Copyright remains Eric Young's, and as such any Copyright notices in
++ * the code are not to be removed.
++ * If this package is used in a product, Eric Young should be given attribution
++ * as the author of the parts of the library used.
++ * This can be in the form of a textual message at program startup or
++ * in documentation (online or textual) provided with the package.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. 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.
++ * 3. All advertising materials mentioning features or use of this software
++ * must display the following acknowledgement:
++ * "This product includes cryptographic software written by
++ * Eric Young (eay@cryptsoft.com)"
++ * The word 'cryptographic' can be left out if the rouines from the library
++ * being used are not cryptographic related :-).
++ * 4. If you include any Windows specific code (or a derivative thereof) from
++ * the apps directory (application code) you must include an acknowledgement:
++ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
++ *
++ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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.
++ *
++ * The licence and distribution terms for any publically available version or
++ * derivative of this code cannot be changed. i.e. this code cannot simply be
++ * copied and put under another distribution licence
++ * [including the GNU Public Licence.]
++ */
++
++#if !defined(NO_SHA1) && !defined(NO_SHA)
++
++#undef SHA_0
++#define SHA_1
++
++#include <openssl/opensslv.h>
++
++const char *SHA1_version="SHA1" OPENSSL_VERSION_PTEXT;
++
++/* The implementation is in ../md32_common.h */
++
++#include "sha_locl.h"
++
++#endif
++
+diff -Nur linux_c860_org/drivers/net/sha_locl.h linux/drivers/net/sha_locl.h
+--- linux_c860_org/drivers/net/sha_locl.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/net/sha_locl.h 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,473 @@
++/* crypto/sha/sha_locl.h */
++/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
++ * All rights reserved.
++ *
++ * This package is an SSL implementation written
++ * by Eric Young (eay@cryptsoft.com).
++ * The implementation was written so as to conform with Netscapes SSL.
++ *
++ * This library is free for commercial and non-commercial use as long as
++ * the following conditions are aheared to. The following conditions
++ * apply to all code found in this distribution, be it the RC4, RSA,
++ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
++ * included with this distribution is covered by the same copyright terms
++ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
++ *
++ * Copyright remains Eric Young's, and as such any Copyright notices in
++ * the code are not to be removed.
++ * If this package is used in a product, Eric Young should be given attribution
++ * as the author of the parts of the library used.
++ * This can be in the form of a textual message at program startup or
++ * in documentation (online or textual) provided with the package.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. 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.
++ * 3. All advertising materials mentioning features or use of this software
++ * must display the following acknowledgement:
++ * "This product includes cryptographic software written by
++ * Eric Young (eay@cryptsoft.com)"
++ * The word 'cryptographic' can be left out if the rouines from the library
++ * being used are not cryptographic related :-).
++ * 4. If you include any Windows specific code (or a derivative thereof) from
++ * the apps directory (application code) you must include an acknowledgement:
++ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
++ *
++ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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.
++ *
++ * The licence and distribution terms for any publically available version or
++ * derivative of this code cannot be changed. i.e. this code cannot simply be
++ * copied and put under another distribution licence
++ * [including the GNU Public Licence.]
++ */
++
++#ifndef __KERNEL__
++#include <stdlib.h>
++#include <string.h>
++#endif
++
++#include <openssl/opensslconf.h>
++#include <openssl/sha.h>
++
++#ifndef SHA_LONG_LOG2
++#define SHA_LONG_LOG2 2 /* default to 32 bits */
++#endif
++
++#define DATA_ORDER_IS_BIG_ENDIAN
++
++#define HASH_LONG SHA_LONG
++#define HASH_LONG_LOG2 SHA_LONG_LOG2
++#define HASH_CTX SHA_CTX
++#define HASH_CBLOCK SHA_CBLOCK
++#define HASH_LBLOCK SHA_LBLOCK
++#define HASH_MAKE_STRING(c,s) do { \
++ unsigned long ll; \
++ ll=(c)->h0; HOST_l2c(ll,(s)); \
++ ll=(c)->h1; HOST_l2c(ll,(s)); \
++ ll=(c)->h2; HOST_l2c(ll,(s)); \
++ ll=(c)->h3; HOST_l2c(ll,(s)); \
++ ll=(c)->h4; HOST_l2c(ll,(s)); \
++ } while (0)
++
++#if defined(SHA_0)
++
++# define HASH_UPDATE SHA_Update
++# define HASH_TRANSFORM SHA_Transform
++# define HASH_FINAL SHA_Final
++# define HASH_INIT SHA_Init
++# define HASH_BLOCK_HOST_ORDER sha_block_host_order
++# define HASH_BLOCK_DATA_ORDER sha_block_data_order
++# define Xupdate(a,ix,ia,ib,ic,id) (ix=(a)=(ia^ib^ic^id))
++
++ void sha_block_host_order (SHA_CTX *c, const void *p,int num);
++ void sha_block_data_order (SHA_CTX *c, const void *p,int num);
++
++#elif defined(SHA_1)
++
++# define HASH_UPDATE SHA1_Update
++# define HASH_TRANSFORM SHA1_Transform
++# define HASH_FINAL SHA1_Final
++# define HASH_INIT SHA1_Init
++# define HASH_BLOCK_HOST_ORDER sha1_block_host_order
++# define HASH_BLOCK_DATA_ORDER sha1_block_data_order
++# if defined(__MWERKS__) && defined(__MC68K__)
++ /* Metrowerks for Motorola fails otherwise:-( <appro@fy.chalmers.se> */
++# define Xupdate(a,ix,ia,ib,ic,id) do { (a)=(ia^ib^ic^id); \
++ ix=(a)=ROTATE((a),1); \
++ } while (0)
++# else
++# define Xupdate(a,ix,ia,ib,ic,id) ( (a)=(ia^ib^ic^id), \
++ ix=(a)=ROTATE((a),1) \
++ )
++# endif
++
++# ifdef SHA1_ASM
++# if defined(__i386) || defined(_M_IX86) || defined(__INTEL__)
++# define sha1_block_host_order sha1_block_asm_host_order
++# define DONT_IMPLEMENT_BLOCK_HOST_ORDER
++# define sha1_block_data_order sha1_block_asm_data_order
++# define DONT_IMPLEMENT_BLOCK_DATA_ORDER
++# define HASH_BLOCK_DATA_ORDER_ALIGNED sha1_block_asm_data_order
++# endif
++# endif
++ void sha1_block_host_order (SHA_CTX *c, const void *p,int num);
++ void sha1_block_data_order (SHA_CTX *c, const void *p,int num);
++
++#else
++# error "Either SHA_0 or SHA_1 must be defined."
++#endif
++
++#include "md32_common.h"
++
++#define INIT_DATA_h0 0x67452301UL
++#define INIT_DATA_h1 0xefcdab89UL
++#define INIT_DATA_h2 0x98badcfeUL
++#define INIT_DATA_h3 0x10325476UL
++#define INIT_DATA_h4 0xc3d2e1f0UL
++
++void HASH_INIT (SHA_CTX *c)
++ {
++ c->h0=INIT_DATA_h0;
++ c->h1=INIT_DATA_h1;
++ c->h2=INIT_DATA_h2;
++ c->h3=INIT_DATA_h3;
++ c->h4=INIT_DATA_h4;
++ c->Nl=0;
++ c->Nh=0;
++ c->num=0;
++ }
++
++#define K_00_19 0x5a827999UL
++#define K_20_39 0x6ed9eba1UL
++#define K_40_59 0x8f1bbcdcUL
++#define K_60_79 0xca62c1d6UL
++
++/* As pointed out by Wei Dai <weidai@eskimo.com>, F() below can be
++ * simplified to the code in F_00_19. Wei attributes these optimisations
++ * to Peter Gutmann's SHS code, and he attributes it to Rich Schroeppel.
++ * #define F(x,y,z) (((x) & (y)) | ((~(x)) & (z)))
++ * I've just become aware of another tweak to be made, again from Wei Dai,
++ * in F_40_59, (x&a)|(y&a) -> (x|y)&a
++ */
++#define F_00_19(b,c,d) ((((c) ^ (d)) & (b)) ^ (d))
++#define F_20_39(b,c,d) ((b) ^ (c) ^ (d))
++#define F_40_59(b,c,d) (((b) & (c)) | (((b)|(c)) & (d)))
++#define F_60_79(b,c,d) F_20_39(b,c,d)
++
++#define BODY_00_15(i,a,b,c,d,e,f,xi) \
++ (f)=xi+(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \
++ (b)=ROTATE((b),30);
++
++#define BODY_16_19(i,a,b,c,d,e,f,xi,xa,xb,xc,xd) \
++ Xupdate(f,xi,xa,xb,xc,xd); \
++ (f)+=(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \
++ (b)=ROTATE((b),30);
++
++#define BODY_20_31(i,a,b,c,d,e,f,xi,xa,xb,xc,xd) \
++ Xupdate(f,xi,xa,xb,xc,xd); \
++ (f)+=(e)+K_20_39+ROTATE((a),5)+F_20_39((b),(c),(d)); \
++ (b)=ROTATE((b),30);
++
++#define BODY_32_39(i,a,b,c,d,e,f,xa,xb,xc,xd) \
++ Xupdate(f,xa,xa,xb,xc,xd); \
++ (f)+=(e)+K_20_39+ROTATE((a),5)+F_20_39((b),(c),(d)); \
++ (b)=ROTATE((b),30);
++
++#define BODY_40_59(i,a,b,c,d,e,f,xa,xb,xc,xd) \
++ Xupdate(f,xa,xa,xb,xc,xd); \
++ (f)+=(e)+K_40_59+ROTATE((a),5)+F_40_59((b),(c),(d)); \
++ (b)=ROTATE((b),30);
++
++#define BODY_60_79(i,a,b,c,d,e,f,xa,xb,xc,xd) \
++ Xupdate(f,xa,xa,xb,xc,xd); \
++ (f)=xa+(e)+K_60_79+ROTATE((a),5)+F_60_79((b),(c),(d)); \
++ (b)=ROTATE((b),30);
++
++#ifdef X
++#undef X
++#endif
++#ifndef MD32_XARRAY
++ /*
++ * Originally X was an array. As it's automatic it's natural
++ * to expect RISC compiler to accomodate at least part of it in
++ * the register bank, isn't it? Unfortunately not all compilers
++ * "find" this expectation reasonable:-( On order to make such
++ * compilers generate better code I replace X[] with a bunch of
++ * X0, X1, etc. See the function body below...
++ * <appro@fy.chalmers.se>
++ */
++# define X(i) XX##i
++#else
++ /*
++ * However! Some compilers (most notably HP C) get overwhelmed by
++ * that many local variables so that we have to have the way to
++ * fall down to the original behavior.
++ */
++# define X(i) XX[i]
++#endif
++
++#ifndef DONT_IMPLEMENT_BLOCK_HOST_ORDER
++void HASH_BLOCK_HOST_ORDER (SHA_CTX *c, const void *d, int num)
++ {
++ const SHA_LONG *W=d;
++ register unsigned long A,B,C,D,E,T;
++#ifndef MD32_XARRAY
++ unsigned long XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
++ XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
++#else
++ SHA_LONG XX[16];
++#endif
++
++ A=c->h0;
++ B=c->h1;
++ C=c->h2;
++ D=c->h3;
++ E=c->h4;
++
++ for (;;)
++ {
++ BODY_00_15( 0,A,B,C,D,E,T,W[ 0]);
++ BODY_00_15( 1,T,A,B,C,D,E,W[ 1]);
++ BODY_00_15( 2,E,T,A,B,C,D,W[ 2]);
++ BODY_00_15( 3,D,E,T,A,B,C,W[ 3]);
++ BODY_00_15( 4,C,D,E,T,A,B,W[ 4]);
++ BODY_00_15( 5,B,C,D,E,T,A,W[ 5]);
++ BODY_00_15( 6,A,B,C,D,E,T,W[ 6]);
++ BODY_00_15( 7,T,A,B,C,D,E,W[ 7]);
++ BODY_00_15( 8,E,T,A,B,C,D,W[ 8]);
++ BODY_00_15( 9,D,E,T,A,B,C,W[ 9]);
++ BODY_00_15(10,C,D,E,T,A,B,W[10]);
++ BODY_00_15(11,B,C,D,E,T,A,W[11]);
++ BODY_00_15(12,A,B,C,D,E,T,W[12]);
++ BODY_00_15(13,T,A,B,C,D,E,W[13]);
++ BODY_00_15(14,E,T,A,B,C,D,W[14]);
++ BODY_00_15(15,D,E,T,A,B,C,W[15]);
++
++ BODY_16_19(16,C,D,E,T,A,B,X( 0),W[ 0],W[ 2],W[ 8],W[13]);
++ BODY_16_19(17,B,C,D,E,T,A,X( 1),W[ 1],W[ 3],W[ 9],W[14]);
++ BODY_16_19(18,A,B,C,D,E,T,X( 2),W[ 2],W[ 4],W[10],W[15]);
++ BODY_16_19(19,T,A,B,C,D,E,X( 3),W[ 3],W[ 5],W[11],X( 0));
++
++ BODY_20_31(20,E,T,A,B,C,D,X( 4),W[ 4],W[ 6],W[12],X( 1));
++ BODY_20_31(21,D,E,T,A,B,C,X( 5),W[ 5],W[ 7],W[13],X( 2));
++ BODY_20_31(22,C,D,E,T,A,B,X( 6),W[ 6],W[ 8],W[14],X( 3));
++ BODY_20_31(23,B,C,D,E,T,A,X( 7),W[ 7],W[ 9],W[15],X( 4));
++ BODY_20_31(24,A,B,C,D,E,T,X( 8),W[ 8],W[10],X( 0),X( 5));
++ BODY_20_31(25,T,A,B,C,D,E,X( 9),W[ 9],W[11],X( 1),X( 6));
++ BODY_20_31(26,E,T,A,B,C,D,X(10),W[10],W[12],X( 2),X( 7));
++ BODY_20_31(27,D,E,T,A,B,C,X(11),W[11],W[13],X( 3),X( 8));
++ BODY_20_31(28,C,D,E,T,A,B,X(12),W[12],W[14],X( 4),X( 9));
++ BODY_20_31(29,B,C,D,E,T,A,X(13),W[13],W[15],X( 5),X(10));
++ BODY_20_31(30,A,B,C,D,E,T,X(14),W[14],X( 0),X( 6),X(11));
++ BODY_20_31(31,T,A,B,C,D,E,X(15),W[15],X( 1),X( 7),X(12));
++
++ BODY_32_39(32,E,T,A,B,C,D,X( 0),X( 2),X( 8),X(13));
++ BODY_32_39(33,D,E,T,A,B,C,X( 1),X( 3),X( 9),X(14));
++ BODY_32_39(34,C,D,E,T,A,B,X( 2),X( 4),X(10),X(15));
++ BODY_32_39(35,B,C,D,E,T,A,X( 3),X( 5),X(11),X( 0));
++ BODY_32_39(36,A,B,C,D,E,T,X( 4),X( 6),X(12),X( 1));
++ BODY_32_39(37,T,A,B,C,D,E,X( 5),X( 7),X(13),X( 2));
++ BODY_32_39(38,E,T,A,B,C,D,X( 6),X( 8),X(14),X( 3));
++ BODY_32_39(39,D,E,T,A,B,C,X( 7),X( 9),X(15),X( 4));
++
++ BODY_40_59(40,C,D,E,T,A,B,X( 8),X(10),X( 0),X( 5));
++ BODY_40_59(41,B,C,D,E,T,A,X( 9),X(11),X( 1),X( 6));
++ BODY_40_59(42,A,B,C,D,E,T,X(10),X(12),X( 2),X( 7));
++ BODY_40_59(43,T,A,B,C,D,E,X(11),X(13),X( 3),X( 8));
++ BODY_40_59(44,E,T,A,B,C,D,X(12),X(14),X( 4),X( 9));
++ BODY_40_59(45,D,E,T,A,B,C,X(13),X(15),X( 5),X(10));
++ BODY_40_59(46,C,D,E,T,A,B,X(14),X( 0),X( 6),X(11));
++ BODY_40_59(47,B,C,D,E,T,A,X(15),X( 1),X( 7),X(12));
++ BODY_40_59(48,A,B,C,D,E,T,X( 0),X( 2),X( 8),X(13));
++ BODY_40_59(49,T,A,B,C,D,E,X( 1),X( 3),X( 9),X(14));
++ BODY_40_59(50,E,T,A,B,C,D,X( 2),X( 4),X(10),X(15));
++ BODY_40_59(51,D,E,T,A,B,C,X( 3),X( 5),X(11),X( 0));
++ BODY_40_59(52,C,D,E,T,A,B,X( 4),X( 6),X(12),X( 1));
++ BODY_40_59(53,B,C,D,E,T,A,X( 5),X( 7),X(13),X( 2));
++ BODY_40_59(54,A,B,C,D,E,T,X( 6),X( 8),X(14),X( 3));
++ BODY_40_59(55,T,A,B,C,D,E,X( 7),X( 9),X(15),X( 4));
++ BODY_40_59(56,E,T,A,B,C,D,X( 8),X(10),X( 0),X( 5));
++ BODY_40_59(57,D,E,T,A,B,C,X( 9),X(11),X( 1),X( 6));
++ BODY_40_59(58,C,D,E,T,A,B,X(10),X(12),X( 2),X( 7));
++ BODY_40_59(59,B,C,D,E,T,A,X(11),X(13),X( 3),X( 8));
++
++ BODY_60_79(60,A,B,C,D,E,T,X(12),X(14),X( 4),X( 9));
++ BODY_60_79(61,T,A,B,C,D,E,X(13),X(15),X( 5),X(10));
++ BODY_60_79(62,E,T,A,B,C,D,X(14),X( 0),X( 6),X(11));
++ BODY_60_79(63,D,E,T,A,B,C,X(15),X( 1),X( 7),X(12));
++ BODY_60_79(64,C,D,E,T,A,B,X( 0),X( 2),X( 8),X(13));
++ BODY_60_79(65,B,C,D,E,T,A,X( 1),X( 3),X( 9),X(14));
++ BODY_60_79(66,A,B,C,D,E,T,X( 2),X( 4),X(10),X(15));
++ BODY_60_79(67,T,A,B,C,D,E,X( 3),X( 5),X(11),X( 0));
++ BODY_60_79(68,E,T,A,B,C,D,X( 4),X( 6),X(12),X( 1));
++ BODY_60_79(69,D,E,T,A,B,C,X( 5),X( 7),X(13),X( 2));
++ BODY_60_79(70,C,D,E,T,A,B,X( 6),X( 8),X(14),X( 3));
++ BODY_60_79(71,B,C,D,E,T,A,X( 7),X( 9),X(15),X( 4));
++ BODY_60_79(72,A,B,C,D,E,T,X( 8),X(10),X( 0),X( 5));
++ BODY_60_79(73,T,A,B,C,D,E,X( 9),X(11),X( 1),X( 6));
++ BODY_60_79(74,E,T,A,B,C,D,X(10),X(12),X( 2),X( 7));
++ BODY_60_79(75,D,E,T,A,B,C,X(11),X(13),X( 3),X( 8));
++ BODY_60_79(76,C,D,E,T,A,B,X(12),X(14),X( 4),X( 9));
++ BODY_60_79(77,B,C,D,E,T,A,X(13),X(15),X( 5),X(10));
++ BODY_60_79(78,A,B,C,D,E,T,X(14),X( 0),X( 6),X(11));
++ BODY_60_79(79,T,A,B,C,D,E,X(15),X( 1),X( 7),X(12));
++
++ c->h0=(c->h0+E)&0xffffffffL;
++ c->h1=(c->h1+T)&0xffffffffL;
++ c->h2=(c->h2+A)&0xffffffffL;
++ c->h3=(c->h3+B)&0xffffffffL;
++ c->h4=(c->h4+C)&0xffffffffL;
++
++ if (--num <= 0) break;
++
++ A=c->h0;
++ B=c->h1;
++ C=c->h2;
++ D=c->h3;
++ E=c->h4;
++
++ W+=SHA_LBLOCK;
++ }
++ }
++#endif
++
++#ifndef DONT_IMPLEMENT_BLOCK_DATA_ORDER
++void HASH_BLOCK_DATA_ORDER (SHA_CTX *c, const void *p, int num)
++ {
++ const unsigned char *data=p;
++ register unsigned long A,B,C,D,E,T,l;
++#ifndef MD32_XARRAY
++ unsigned long XX0, XX1, XX2, XX3, XX4, XX5, XX6, XX7,
++ XX8, XX9,XX10,XX11,XX12,XX13,XX14,XX15;
++#else
++ SHA_LONG XX[16];
++#endif
++
++ A=c->h0;
++ B=c->h1;
++ C=c->h2;
++ D=c->h3;
++ E=c->h4;
++
++ for (;;)
++ {
++
++ HOST_c2l(data,l); X( 0)=l; HOST_c2l(data,l); X( 1)=l;
++ BODY_00_15( 0,A,B,C,D,E,T,X( 0)); HOST_c2l(data,l); X( 2)=l;
++ BODY_00_15( 1,T,A,B,C,D,E,X( 1)); HOST_c2l(data,l); X( 3)=l;
++ BODY_00_15( 2,E,T,A,B,C,D,X( 2)); HOST_c2l(data,l); X( 4)=l;
++ BODY_00_15( 3,D,E,T,A,B,C,X( 3)); HOST_c2l(data,l); X( 5)=l;
++ BODY_00_15( 4,C,D,E,T,A,B,X( 4)); HOST_c2l(data,l); X( 6)=l;
++ BODY_00_15( 5,B,C,D,E,T,A,X( 5)); HOST_c2l(data,l); X( 7)=l;
++ BODY_00_15( 6,A,B,C,D,E,T,X( 6)); HOST_c2l(data,l); X( 8)=l;
++ BODY_00_15( 7,T,A,B,C,D,E,X( 7)); HOST_c2l(data,l); X( 9)=l;
++ BODY_00_15( 8,E,T,A,B,C,D,X( 8)); HOST_c2l(data,l); X(10)=l;
++ BODY_00_15( 9,D,E,T,A,B,C,X( 9)); HOST_c2l(data,l); X(11)=l;
++ BODY_00_15(10,C,D,E,T,A,B,X(10)); HOST_c2l(data,l); X(12)=l;
++ BODY_00_15(11,B,C,D,E,T,A,X(11)); HOST_c2l(data,l); X(13)=l;
++ BODY_00_15(12,A,B,C,D,E,T,X(12)); HOST_c2l(data,l); X(14)=l;
++ BODY_00_15(13,T,A,B,C,D,E,X(13)); HOST_c2l(data,l); X(15)=l;
++ BODY_00_15(14,E,T,A,B,C,D,X(14));
++ BODY_00_15(15,D,E,T,A,B,C,X(15));
++
++ BODY_16_19(16,C,D,E,T,A,B,X( 0),X( 0),X( 2),X( 8),X(13));
++ BODY_16_19(17,B,C,D,E,T,A,X( 1),X( 1),X( 3),X( 9),X(14));
++ BODY_16_19(18,A,B,C,D,E,T,X( 2),X( 2),X( 4),X(10),X(15));
++ BODY_16_19(19,T,A,B,C,D,E,X( 3),X( 3),X( 5),X(11),X( 0));
++
++ BODY_20_31(20,E,T,A,B,C,D,X( 4),X( 4),X( 6),X(12),X( 1));
++ BODY_20_31(21,D,E,T,A,B,C,X( 5),X( 5),X( 7),X(13),X( 2));
++ BODY_20_31(22,C,D,E,T,A,B,X( 6),X( 6),X( 8),X(14),X( 3));
++ BODY_20_31(23,B,C,D,E,T,A,X( 7),X( 7),X( 9),X(15),X( 4));
++ BODY_20_31(24,A,B,C,D,E,T,X( 8),X( 8),X(10),X( 0),X( 5));
++ BODY_20_31(25,T,A,B,C,D,E,X( 9),X( 9),X(11),X( 1),X( 6));
++ BODY_20_31(26,E,T,A,B,C,D,X(10),X(10),X(12),X( 2),X( 7));
++ BODY_20_31(27,D,E,T,A,B,C,X(11),X(11),X(13),X( 3),X( 8));
++ BODY_20_31(28,C,D,E,T,A,B,X(12),X(12),X(14),X( 4),X( 9));
++ BODY_20_31(29,B,C,D,E,T,A,X(13),X(13),X(15),X( 5),X(10));
++ BODY_20_31(30,A,B,C,D,E,T,X(14),X(14),X( 0),X( 6),X(11));
++ BODY_20_31(31,T,A,B,C,D,E,X(15),X(15),X( 1),X( 7),X(12));
++
++ BODY_32_39(32,E,T,A,B,C,D,X( 0),X( 2),X( 8),X(13));
++ BODY_32_39(33,D,E,T,A,B,C,X( 1),X( 3),X( 9),X(14));
++ BODY_32_39(34,C,D,E,T,A,B,X( 2),X( 4),X(10),X(15));
++ BODY_32_39(35,B,C,D,E,T,A,X( 3),X( 5),X(11),X( 0));
++ BODY_32_39(36,A,B,C,D,E,T,X( 4),X( 6),X(12),X( 1));
++ BODY_32_39(37,T,A,B,C,D,E,X( 5),X( 7),X(13),X( 2));
++ BODY_32_39(38,E,T,A,B,C,D,X( 6),X( 8),X(14),X( 3));
++ BODY_32_39(39,D,E,T,A,B,C,X( 7),X( 9),X(15),X( 4));
++
++ BODY_40_59(40,C,D,E,T,A,B,X( 8),X(10),X( 0),X( 5));
++ BODY_40_59(41,B,C,D,E,T,A,X( 9),X(11),X( 1),X( 6));
++ BODY_40_59(42,A,B,C,D,E,T,X(10),X(12),X( 2),X( 7));
++ BODY_40_59(43,T,A,B,C,D,E,X(11),X(13),X( 3),X( 8));
++ BODY_40_59(44,E,T,A,B,C,D,X(12),X(14),X( 4),X( 9));
++ BODY_40_59(45,D,E,T,A,B,C,X(13),X(15),X( 5),X(10));
++ BODY_40_59(46,C,D,E,T,A,B,X(14),X( 0),X( 6),X(11));
++ BODY_40_59(47,B,C,D,E,T,A,X(15),X( 1),X( 7),X(12));
++ BODY_40_59(48,A,B,C,D,E,T,X( 0),X( 2),X( 8),X(13));
++ BODY_40_59(49,T,A,B,C,D,E,X( 1),X( 3),X( 9),X(14));
++ BODY_40_59(50,E,T,A,B,C,D,X( 2),X( 4),X(10),X(15));
++ BODY_40_59(51,D,E,T,A,B,C,X( 3),X( 5),X(11),X( 0));
++ BODY_40_59(52,C,D,E,T,A,B,X( 4),X( 6),X(12),X( 1));
++ BODY_40_59(53,B,C,D,E,T,A,X( 5),X( 7),X(13),X( 2));
++ BODY_40_59(54,A,B,C,D,E,T,X( 6),X( 8),X(14),X( 3));
++ BODY_40_59(55,T,A,B,C,D,E,X( 7),X( 9),X(15),X( 4));
++ BODY_40_59(56,E,T,A,B,C,D,X( 8),X(10),X( 0),X( 5));
++ BODY_40_59(57,D,E,T,A,B,C,X( 9),X(11),X( 1),X( 6));
++ BODY_40_59(58,C,D,E,T,A,B,X(10),X(12),X( 2),X( 7));
++ BODY_40_59(59,B,C,D,E,T,A,X(11),X(13),X( 3),X( 8));
++
++ BODY_60_79(60,A,B,C,D,E,T,X(12),X(14),X( 4),X( 9));
++ BODY_60_79(61,T,A,B,C,D,E,X(13),X(15),X( 5),X(10));
++ BODY_60_79(62,E,T,A,B,C,D,X(14),X( 0),X( 6),X(11));
++ BODY_60_79(63,D,E,T,A,B,C,X(15),X( 1),X( 7),X(12));
++ BODY_60_79(64,C,D,E,T,A,B,X( 0),X( 2),X( 8),X(13));
++ BODY_60_79(65,B,C,D,E,T,A,X( 1),X( 3),X( 9),X(14));
++ BODY_60_79(66,A,B,C,D,E,T,X( 2),X( 4),X(10),X(15));
++ BODY_60_79(67,T,A,B,C,D,E,X( 3),X( 5),X(11),X( 0));
++ BODY_60_79(68,E,T,A,B,C,D,X( 4),X( 6),X(12),X( 1));
++ BODY_60_79(69,D,E,T,A,B,C,X( 5),X( 7),X(13),X( 2));
++ BODY_60_79(70,C,D,E,T,A,B,X( 6),X( 8),X(14),X( 3));
++ BODY_60_79(71,B,C,D,E,T,A,X( 7),X( 9),X(15),X( 4));
++ BODY_60_79(72,A,B,C,D,E,T,X( 8),X(10),X( 0),X( 5));
++ BODY_60_79(73,T,A,B,C,D,E,X( 9),X(11),X( 1),X( 6));
++ BODY_60_79(74,E,T,A,B,C,D,X(10),X(12),X( 2),X( 7));
++ BODY_60_79(75,D,E,T,A,B,C,X(11),X(13),X( 3),X( 8));
++ BODY_60_79(76,C,D,E,T,A,B,X(12),X(14),X( 4),X( 9));
++ BODY_60_79(77,B,C,D,E,T,A,X(13),X(15),X( 5),X(10));
++ BODY_60_79(78,A,B,C,D,E,T,X(14),X( 0),X( 6),X(11));
++ BODY_60_79(79,T,A,B,C,D,E,X(15),X( 1),X( 7),X(12));
++
++ c->h0=(c->h0+E)&0xffffffffL;
++ c->h1=(c->h1+T)&0xffffffffL;
++ c->h2=(c->h2+A)&0xffffffffL;
++ c->h3=(c->h3+B)&0xffffffffL;
++ c->h4=(c->h4+C)&0xffffffffL;
++
++ if (--num <= 0) break;
++
++ A=c->h0;
++ B=c->h1;
++ C=c->h2;
++ D=c->h3;
++ E=c->h4;
++
++ }
++ }
++#endif
+diff -Nur linux_c860_org/drivers/pcmcia/cs.c linux/drivers/pcmcia/cs.c
+--- linux_c860_org/drivers/pcmcia/cs.c 2003-02-27 13:28:33.000000000 +0900
++++ linux/drivers/pcmcia/cs.c 2004-06-10 21:09:10.000000000 +0900
+@@ -35,6 +35,8 @@
+ 30-Jul-2002 Lineo Japan, Inc. for 2.4.18
+ 12-Dec-2002 Sharp Corporation for Poodle and Corgi
+ 07-Feb-2003 Sharp Corporation
++ 08-Jan-2004 Sharp Corporation for Tosa
++ 26-Feb-2004 Lineo Solutions, Inc. 2 slot support
+
+ ======================================================================*/
+
+@@ -73,6 +75,8 @@
+ #include <asm/arch/keyboard_poodle.h>
+ #elif defined(CONFIG_ARCH_PXA_CORGI)
+ #include <asm/arch/keyboard_corgi.h>
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++#include <asm/arch/keyboard_tosa.h>
+ #endif
+ #include <asm/sharp_char.h>
+ #include <asm/sharp_keycode.h>
+@@ -124,7 +128,11 @@
+ INT_MODULE_PARM(shutdown_delay, 3); /* centiseconds */
+ #ifdef CONFIG_ARCH_SHARP_SL
+ //INT_MODULE_PARM(vcc_settle, 2); /* SL-5600@2 */
++#if defined (CONFIG_ARCH_PXA_TOSA)
++INT_MODULE_PARM(vcc_settle, 30); /* SL-6000 */
++#else
+ INT_MODULE_PARM(vcc_settle, 10); /* SL-C700+GW-CF11H@10 */
++#endif
+ INT_MODULE_PARM(reset_time, 1000);
+ INT_MODULE_PARM(unreset_delay, 3);
+ INT_MODULE_PARM(unreset_check, 1);
+@@ -490,6 +498,15 @@
+ schedule_timeout( (n_cs * HZ + 99) / 100);
+ }
+
++#if defined (CONFIG_ARCH_PXA_TOSA)
++static void cs_sleep2(unsigned int n_cs)
++{
++ current->state = TASK_UNINTERRUPTIBLE;
++ schedule_timeout( (n_cs * HZ + 99) / 100);
++}
++
++#endif
++
+ static void shutdown_socket(socket_info_t *s)
+ {
+ client_t **c;
+@@ -582,16 +599,45 @@
+ #endif /* CONFIG_SABINAL_DISCOVERY */
+
+
+-#if defined (CONFIG_ARCH_PXA_POODLE) || defined (CONFIG_ARCH_PXA_CORGI)
++#if defined (CONFIG_ARCH_PXA_POODLE) || defined (CONFIG_ARCH_PXA_CORGI) || defined (CONFIG_ARCH_PXA_TOSA)
+ {
+ extern int sharpsl_main_battery;
+ extern int sharpsl_main_bk_flag;
++#if defined (CONFIG_ARCH_PXA_TOSA)
++ extern int sharpsl_jacket_exist;
++ extern int sharpsl_jacket_batt_exist;
++ extern int sharpsl_jacket_battery;
++#endif
+
+ sharpsl_kick_battery_check(0,1,1); // check battery and wait 10msec
+
+ if ( ( sharpsl_main_battery == 0x7F ) || ( sharpsl_main_battery == 0x02 ) ) {
+ printk(KERN_ERR "cs: Main battery is critical low."
+ " (%d)\n", sharpsl_main_battery);
++#if defined (CONFIG_ARCH_PXA_TOSA)
++ {
++ int do_off = 0;
++
++ if(sharpsl_jacket_exist && sharpsl_jacket_batt_exist){
++ if( sharpsl_jacket_battery == 0x7F || sharpsl_jacket_battery == 0x02 ){
++ printk(KERN_ERR "cs: Jacket battery is critical low."
++ " (%d)\n", sharpsl_jacket_battery);
++ do_off = 1;
++ }
++ }else{
++ do_off = 1;
++ }
++ if(do_off){
++ if ( sharpsl_main_bk_flag ) {
++ handle_scancode(SLKEY_OFF|KBDOWN , 1);
++ mdelay(30);
++ handle_scancode(SLKEY_OFF|KBUP , 0);
++ }
++ ret = 0;
++ goto out;
++ }
++ }
++#else
+ if ( sharpsl_main_bk_flag ) {
+ handle_scancode(SLKEY_OFF|KBDOWN , 1);
+ mdelay(30);
+@@ -599,6 +645,7 @@
+ }
+ ret = 0;
+ goto out;
++#endif
+ }
+ }
+ #endif
+@@ -644,17 +691,52 @@
+ printk(KERN_NOTICE "cs: unsupported card type detected!\n");
+ #endif
+ }
++
+ set_socket(s, &s->socket);
++#if defined (CONFIG_ARCH_PXA_TOSA)
++ //printk(":start %d %d\n",jiffies,vcc_settle);
++ cs_sleep2(vcc_settle);
++ //cs_sleep(vcc_settle);
++ //printk(":end %d\n",jiffies);
++#else
+ cs_sleep(vcc_settle);
++#endif
+ reset_socket(s);
+
+-#if defined (CONFIG_ARCH_PXA_POODLE) || defined (CONFIG_ARCH_PXA_CORGI)
++#if defined (CONFIG_ARCH_PXA_POODLE) || defined (CONFIG_ARCH_PXA_CORGI) || defined (CONFIG_ARCH_PXA_TOSA)
+ {
+ extern int sharpsl_main_battery;
+ extern int sharpsl_main_bk_flag;
++#if defined (CONFIG_ARCH_PXA_TOSA)
++ extern int sharpsl_jacket_exist;
++ extern int sharpsl_jacket_batt_exist;
++ extern int sharpsl_jacket_battery;
++#endif
+
+ sharpsl_kick_battery_check(0,0,1); // check battery and wait 10msec
+
++#if defined (CONFIG_ARCH_PXA_TOSA)
++ if ( sharpsl_main_bk_flag && ( ( sharpsl_main_battery == 0x7F ) || ( sharpsl_main_battery == 0x02 ) ) ) {
++ int do_remove = 0;
++ if ( sharpsl_jacket_exist && sharpsl_jacket_batt_exist ) {
++ if( sharpsl_jacket_battery == 0x7F || sharpsl_jacket_battery == 0x02 ){
++ do_remove = 1;
++ }
++ }else{
++ do_remove = 1;
++ }
++ if(do_remove){
++ s->socket.Vcc = s->socket.Vpp = 0;
++ s->state &= ~SOCKET_PRESENT;
++ set_socket(s, &s->socket);
++ cs_sleep(vcc_settle);
++ reset_socket(s);
++ send_event(s, CS_EVENT_CARD_REMOVAL, CS_EVENT_PRI_HIGH);
++ ret = 0;
++ goto out;
++ }
++ }
++#else
+ if ( sharpsl_main_bk_flag && ( ( sharpsl_main_battery == 0x7F ) || ( sharpsl_main_battery == 0x02 ) ) ) {
+ s->socket.Vcc = s->socket.Vpp = 0;
+ s->state &= ~SOCKET_PRESENT;
+@@ -665,6 +747,7 @@
+ ret = 0;
+ goto out;
+ }
++#endif
+ }
+ #endif
+ ret = 1;
+@@ -701,8 +784,8 @@
+ (SOCKET_SETUP_PENDING|SOCKET_SUSPEND|SOCKET_RESET_PENDING)
+
+ #ifdef CONFIG_ARCH_SHARP_SL
+-int ide_resume_handling = 0;
+-int pcmcia_resume_handling = 0;
++int ide_resume_handling[2] = { 0, 0 };
++static int pcmcia_resume_handling = 0;
+ #endif
+
+ static void unreset_socket(socket_info_t *s)
+@@ -731,21 +814,21 @@
+ s->state &= ~EVENT_MASK;
+ #ifdef CONFIG_ARCH_SHARP_SL
+ if (verify_cis_cache(s) != 0) {
+- if (is_pcmcia_card_present(0))
+- ide_resume_handling = 2;
++ if (is_pcmcia_card_present(s->cap.pci_irq))
++ ide_resume_handling[s->sock] = 2;
+ parse_events(s, SS_DETECT);
+ } else {
+ cisparse_t parse;
+ send_event(s, CS_EVENT_PM_RESUME, CS_EVENT_PRI_LOW);
+ read_tuple(s->clients, CISTPL_FUNCID, &parse);
+ #ifdef CONFIG_IDE
+- ide_resume_handling = 1;
++ ide_resume_handling[s->sock] = 1;
+ if (parse.funcid.func == CISTPL_FUNCID_FIXED &&
+- proc_ide_verify_identify() != 0) {
+- ide_resume_handling = 2;
++ proc_ide_verify_identify(s->sock) != 0) {
++ ide_resume_handling[s->sock] = 2;
+ parse_events(s, SS_DETECT);
+ } else {
+- ide_resume_handling = 0;
++ ide_resume_handling[s->sock] = 0;
+ }
+ #endif
+ /* power off serial card */
+@@ -854,7 +937,7 @@
+ s->socket.flags |= SS_DEBOUNCED;
+ if (setup_socket(s) == 0){
+ s->state &= ~SOCKET_SETUP_PENDING;
+-#if defined(CONFIG_SABINAL_DISCOVERY) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_POODLE)
++#if defined(CONFIG_SABINAL_DISCOVERY) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_TOSA)
+ /* If power-on failed in resume, then card eject. */
+ if( s->state & SOCKET_SUSPEND )
+ do_shutdown(s);
+@@ -960,6 +1043,19 @@
+ return 0;
+ } /* handle_pm_event */
+
++#if defined(CONFIG_ARCH_PXA_TOSA)
++void force_cardslot_suspend( int num )
++{
++ int i;
++ socket_info_t *s;
++ s = socket_table [num];
++ if (s && !s->use_bus_pm) {
++ //pcmcia_suspend_socket (socket_table [num]);
++ suspend_socket (socket_table [num]);
++ }
++}
++#endif
++
+ /*======================================================================
+
+ Special stuff for managing IO windows, because they are scarce.
+@@ -2001,6 +2097,12 @@
+ if (!req)
+ return CS_UNSUPPORTED_MODE;
+ c = CONFIG(handle);
++#ifdef CONFIG_ARCH_SHARP_SL
++ if(c == NULL) {
++ printk("%s: c is NULL\n",__func__);
++ return CS_BAD_SOCKET;
++ }
++#endif
+ if (c->state & CONFIG_LOCKED)
+ return CS_CONFIGURATION_LOCKED;
+ if (c->state & CONFIG_IO_REQ)
+@@ -2272,7 +2374,7 @@
+ return CS_IN_USE;
+
+ DEBUG(1, "cs: waking up socket %d\n", i);
+-#if defined(CONFIG_SABINAL_DISCOVERY) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_POODLE)
++#if defined(CONFIG_SABINAL_DISCOVERY) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_TOSA)
+ /* If power-on failed, then card eject. */
+ if( setup_socket(s) == 0 )
+ do_shutdown(s);
+diff -Nur linux_c860_org/drivers/pcmcia/pxa/Makefile linux/drivers/pcmcia/pxa/Makefile
+--- linux_c860_org/drivers/pcmcia/pxa/Makefile 2002-08-29 12:26:51.000000000 +0900
++++ linux/drivers/pcmcia/pxa/Makefile 2004-06-10 21:09:10.000000000 +0900
+@@ -16,6 +16,7 @@
+ pxa_cs-objs-$(CONFIG_SABINAL_DISCOVERY) += pxa_sharpsl.o
+ pxa_cs-objs-$(CONFIG_ARCH_PXA_POODLE) += pxa_sharpsl.o
+ pxa_cs-objs-$(CONFIG_ARCH_PXA_CORGI) += pxa_sharpsl.o
++pxa_cs-objs-$(CONFIG_ARCH_PXA_TOSA) += pxa_sharpsl.o
+
+ obj-$(CONFIG_PCMCIA_PXA) += $(pxa_cs-objs-y)
+
+diff -Nur linux_c860_org/drivers/pcmcia/pxa/pxa.c linux/drivers/pcmcia/pxa/pxa.c
+--- linux_c860_org/drivers/pcmcia/pxa/pxa.c 2003-01-14 12:07:55.000000000 +0900
++++ linux/drivers/pcmcia/pxa/pxa.c 2004-06-10 21:09:10.000000000 +0900
+@@ -14,6 +14,7 @@
+ * ChangLog:
+ * 12-Dec-2002 Lineo Japan, Inc.
+ * 12-Dec-2002 Sharp Corporation for Poodle and Corgi
++ * 26-Feb-2004 Lineo Solutions, Inc. Tosa and 2 slot support
+ */
+
+ /*======================================================================
+@@ -170,7 +171,7 @@
+ #endif
+
+ #ifdef CONFIG_ARCH_SHARP_SL
+- u8 first = 1;
++ static u8 first[2] = {1, 1};
+ u8 force_8bit_access_check_done = 0;
+ #endif
+
+@@ -253,6 +254,8 @@
+ pcmcia_low_level=&sharpsl_pcmcia_ops;
+ } else if( machine_is_corgi()){
+ pcmcia_low_level=&sharpsl_pcmcia_ops;
++ } else if( machine_is_tosa() ) {
++ pcmcia_low_level=&sharpsl_pcmcia_ops;
+ }
+
+ if (!pcmcia_low_level) {
+@@ -415,17 +418,20 @@
+
+ #ifdef CONFIG_ARCH_SHARP_SL
+ printk("pxa_pcmcia_init(%d)\n",sock);
+- if(!first){
++ if(!first[sock]){
+ socket_state_t state;
+ pxa_pcmcia_get_socket(sock, &state);
+ state.flags &= ~SS_OUTPUT_ENA;
+ state.Vcc = state.Vpp = 0;
+ pxa_pcmcia_set_socket(sock, &state);
+ } else {
+- first = 0;
++ first[sock] = 0;
+ }
+ set_GPIO_mode(GPIO53_nPCE_2_MD); // reset force 8bit access.
+ force_8bit_access_check_done = 0;
++
++ if (pcmcia_low_level->socket_init)
++ return pcmcia_low_level->socket_init(sock);
+ #endif
+ return 0;
+ }
+diff -Nur linux_c860_org/drivers/pcmcia/pxa/pxa_sharpsl.c linux/drivers/pcmcia/pxa/pxa_sharpsl.c
+--- linux_c860_org/drivers/pcmcia/pxa/pxa_sharpsl.c 2003-01-14 12:07:55.000000000 +0900
++++ linux/drivers/pcmcia/pxa/pxa_sharpsl.c 2004-06-10 21:09:10.000000000 +0900
+@@ -16,6 +16,7 @@
+ *
+ * ChangLog:
+ * 12-Dec-2002 Sharp Corporation for Poodle and Corgi
++ * 26-Feb-2004 Lineo Solutions, Inc. 2 slot support for Tosa
+ */
+ #include <linux/config.h>
+ #include <linux/kernel.h>
+@@ -36,7 +37,11 @@
+ #include <asm/sharp_apm.h>
+
+ #include <linux/delay.h>
+-
++#if defined(CONFIG_ARCH_PXA_TOSA)
++#include <asm/arch/keyboard_tosa.h>
++#include <asm/sharp_char.h>
++#include <asm/sharp_keycode.h>
++#endif
+ //#define SHARPSL_PCMCIA_DEBUG
+
+ #ifdef CONFIG_SABINAL_DISCOVERY
+@@ -73,9 +78,15 @@
+ #define RESET_DONE 0x0001
+ #endif
+
++#if defined(CONFIG_ARCH_PXA_TOSA)
++extern void set_jacketslot_error( int ); // tosa_battery.c
++extern int current_jacketslot_error(void);
++extern void force_cardslot_suspend(int num); // ../cs.c
++#endif
++
+ void sharpsl_pcmcia_init_reset(void)
+ {
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ #define SCP_INIT_DATA(adr,dat) (((adr)<<16)|(dat))
+ #define SCP_INIT_DATA_END ((unsigned long)-1)
+ static const unsigned long scp_init[] =
+@@ -99,6 +110,15 @@
+ keep_vs[0] = NO_KEEP_VS;
+ keep_rd[0] = 0;
+ #endif
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ for(i=0; scp_init[i] != SCP_INIT_DATA_END; i++)
++ {
++ int adr = scp_init[i] >> 16;
++ SCP_JC_REG(adr) = scp_init[i] & 0xFFFF;
++ }
++ keep_vs[1] = NO_KEEP_VS;
++ keep_rd[1] = 0;
++#endif
+ }
+
+ static void sharpsl_cf_status_change(int irq, void *dev, struct pt_regs *regs){
+@@ -167,10 +187,16 @@
+ /* set GPIO_CF_CD & GPIO_CF_IRQ as inputs */
+ GPDR(GPIO_CF_CD) &= ~GPIO_bit(GPIO_CF_CD);
+ GPDR(GPIO_CF_IRQ) &= ~GPIO_bit(GPIO_CF_IRQ);
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ GPDR(GPIO_JC_CF_IRQ) &= ~GPIO_bit(GPIO_JC_CF_IRQ);
++#endif
+
+ /* Set transition detect */
+ set_GPIO_IRQ_edge( GPIO_CF_CD, GPIO_FALLING_EDGE );
+ set_GPIO_IRQ_edge( GPIO_CF_IRQ, GPIO_FALLING_EDGE );
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ set_GPIO_IRQ_edge( GPIO_JC_CF_IRQ, GPIO_FALLING_EDGE );
++#endif
+
+ /* Register interrupts */
+ irq = IRQ_GPIO_CF_CD;
+@@ -181,6 +207,10 @@
+ /* enable interrupt */
+ SCP_REG_IMR = 0x00C0;
+ SCP_REG_MCR = 0x0101;
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ SCP_JC_REG_IMR = 0x00C0;
++ SCP_JC_REG_MCR = 0x0101;
++#endif
+ keep_vs[0] = keep_vs[1] = NO_KEEP_VS;
+
+ /* There's only one slot, but it's "Slot 0": */
+@@ -240,6 +270,20 @@
+ is16 = (ASIC3_GPIO_PSTS_D & CF_IOIS) ? 0 : 1;
+ #else
+ cpr = SCP_REG_CPR;
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ if( (cpr & 0x0080) && ((cpr & 0x8040) != 0x8040) ){
++ extern int sharpsl_main_bk_flag;
++
++ printk(KERN_ERR "%s(): CPR=%04X, Low voltage!\n",
++ __FUNCTION__, cpr);
++ if ( sharpsl_main_bk_flag ) {
++ handle_scancode(SLKEY_OFF|KBDOWN , 1);
++ mdelay(30);
++ handle_scancode(SLKEY_OFF|KBUP , 0);
++ mdelay(30);
++ }
++ }
++#endif
+ //SCP_REG_CDR = 0x0002;
+ SCP_REG_IRM = 0x00FF;
+ SCP_REG_ISR = 0x0000;
+@@ -277,9 +321,67 @@
+ state_array->state[0].vs_Xv = (csr & 0x0080)? 0:1;
+
+ if( (cpr & 0x0080) && ((cpr & 0x8040) != 0x8040) ){
++#if defined(CONFIG_ARCH_PXA_TOSA)
++#if 0
++ if (!current_cardslot_error(0)) {
++ force_cardslot_suspend(0);
++ }
++#endif
++#else
+ printk(KERN_ERR "%s(): CPR=%04X, Low voltage!\n",
+ __FUNCTION__, cpr);
++#endif
+ }
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ cpr = SCP_JC_REG_CPR;
++ //SCP_REG_CDR = 0x0002;
++ SCP_JC_REG_IRM = 0x00FF;
++ SCP_JC_REG_ISR = 0x0000;
++ SCP_JC_REG_IRM = 0x0000;
++ csr = SCP_JC_REG_CSR;
++ if( csr & 0x0004 ){
++ /* card eject */
++ SCP_JC_REG_CDR = 0x0000;
++ keep_vs[1] = NO_KEEP_VS;
++ }
++ else if( !(keep_vs[1] & NO_KEEP_VS) ){
++ /* keep vs1,vs2 */
++ SCP_JC_REG_CDR = 0x0000;
++ csr |= keep_vs[1];
++ }
++ else if( cpr & 0x0003 ){
++ /* power on */
++ SCP_JC_REG_CDR = 0x0000;
++ keep_vs[1] = (csr & 0x00C0);
++ }
++ else{ /* card detect */
++ SCP_JC_REG_CDR = 0x0002;
++ }
++
++#ifdef SHARPSL_PCMCIA_DEBUG
++ printk("%s(): slot1 cpr=%04X, csr=%04X\n", __FUNCTION__, cpr, csr);
++#endif
++
++ state_array->state[1].detect = (csr & 0x0004)? 0:1;
++ state_array->state[1].ready = (csr & 0x0002)? 1:0;
++ state_array->state[1].bvd1 = (csr & 0x0010)? 1:0;
++ state_array->state[1].bvd2 = (csr & 0x0020)? 1:0;
++ state_array->state[1].wrprot = (csr & 0x0008)? 1:0;
++ state_array->state[1].vs_3v = (csr & 0x0040)? 0:1;
++ state_array->state[1].vs_Xv = (csr & 0x0080)? 0:1;
++
++ if( (cpr & 0x0080) && ((cpr & 0x8040) != 0x8040) ){
++#if 0
++ printk(KERN_ERR "%s(): slot1 CPR=%04X, Low voltage!\n",
++ __FUNCTION__, cpr);
++#else
++ if (!current_cardslot_error(1)) {
++ force_cardslot_suspend(1);
++ set_jacketslot_error(1);
++ }
++#endif
++ }
++#endif
+ #endif
+
+ return 1;
+@@ -296,6 +398,10 @@
+ #else
+ info->irq=IRQ_GPIO_CF_IRQ;
+ #endif
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ } else if (info->sock == 1) {
++ info->irq=IRQ_GPIO_JC_CF_IRQ;
++#endif
+ }
+
+ return 0;
+@@ -313,8 +419,10 @@
+ if (configure->sock > 1)
+ return -1;
+
++#if !defined(CONFIG_ARCH_PXA_TOSA)
+ if (configure->sock != 0)
+ return 0;
++#endif
+
+ #ifdef SHARPSL_PCMCIA_DEBUG
+ printk("%s(): sk=%d, vc=%d, vp=%d, m=%04X, oe=%d, rs=%d, io=%d\n",
+@@ -419,88 +527,205 @@
+
+ #else
+
++#if defined(CONFIG_PM)
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ if (configure->sock == 1) { // for socket1(Jacket)
++ switch( configure->vcc ){
++ case 0: sharpsl_batt_err = change_power_mode(LOCK_FCS_PCMCIA2, 0); break;
++ case 33: sharpsl_batt_err = change_power_mode(LOCK_FCS_PCMCIA2, 1); break;
++ case 50: sharpsl_batt_err = change_power_mode(LOCK_FCS_PCMCIA2, 1); break;
++ default:
++ printk(KERN_ERR "%s(): unrecognized Vcc %u\n",
++ __FUNCTION__, configure->vcc);
++ return -1;
++ }
++ } else {
++#endif
+ switch( configure->vcc ){
+ case 0: sharpsl_batt_err = change_power_mode(LOCK_FCS_PCMCIA, 0); break;
+ case 33: sharpsl_batt_err = change_power_mode(LOCK_FCS_PCMCIA, 1); break;
+- case 50: sharpsl_batt_err = change_power_mode(LOCK_FCS_PCMCIA, 1); break;
++ case 50:
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ if (configure->sock == 0) {
++ printk(KERN_ERR "%s(): unrecognized Vcc %u\n",
++ __FUNCTION__, configure->vcc);
++ return -1;
++ }
++#endif
++ sharpsl_batt_err = change_power_mode(LOCK_FCS_PCMCIA, 1); break;
+ default:
+ printk(KERN_ERR "%s(): unrecognized Vcc %u\n",
+ __FUNCTION__, configure->vcc);
+ return -1;
+ }
+-
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ }
++#endif
+ if ( !sharpsl_batt_err )
+- return -1;
++ return -1;
++#endif
+
+- if( (configure->vpp!=configure->vcc) && (configure->vpp!=0) ){
+- printk(KERN_ERR "%s(): CF slot cannot support Vpp %u\n",
+- __FUNCTION__, configure->vpp);
+- return -1;
+- }
++ if (configure->sock == 0) {
++ if( (configure->vpp!=configure->vcc) && (configure->vpp!=0) ){
++ printk(KERN_ERR "%s(): CF slot cannot support Vpp %u\n",
++ __FUNCTION__, configure->vpp);
++ return -1;
++ }
++ save_flags_cli(flags);
+
+- save_flags_cli(flags);
++ nmcr = (mcr = SCP_REG_MCR) & ~0x0010;
++ ncpr = (cpr = SCP_REG_CPR) & ~0x0083;
++ nccr = (ccr = SCP_REG_CCR) & ~0x0080;
++ nimr = (imr = SCP_REG_IMR) & ~0x003E;
++
++ ncpr |= (configure->vcc == 33) ? 0x0001:
++ (configure->vcc == 50) ? 0x0002:
++ 0;
++ nmcr |= (configure->flags&SS_IOCARD)? 0x0010: 0;
++ ncpr |= (configure->flags&SS_OUTPUT_ENA)? 0x0080: 0;
++ nccr |= (configure->flags&SS_RESET)? 0x0080: 0;
++ nimr |= ((configure->masks&SS_DETECT) ? 0x0004: 0)|
++ ((configure->masks&SS_READY) ? 0x0002: 0)|
++ ((configure->masks&SS_BATDEAD)? 0x0010: 0)|
++ ((configure->masks&SS_BATWARN)? 0x0020: 0)|
++ ((configure->masks&SS_STSCHG) ? 0x0010: 0)|
++ ((configure->masks&SS_WRPROT) ? 0x0008: 0);
++
++ if( !(ncpr & 0x0003) )
++ keep_rd[0] = 0;
++ else if( !(keep_rd[0] & RESET_DONE) ){
++ if( nccr & 0x0080 )
++ keep_rd[0] |= RESET_DONE;
++ else nccr |= 0x0080;
++ }
++
++ if( mcr != nmcr )
++ SCP_REG_MCR = nmcr;
++ if( cpr != ncpr )
++ SCP_REG_CPR = ncpr;
++ if( ccr != nccr )
++ SCP_REG_CCR = nccr;
++ if( imr != nimr )
++ SCP_REG_IMR = nimr;
++
++ restore_flags(flags);
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ } else if (configure->sock == 1) {
++ if( (configure->vpp!=configure->vcc) && (configure->vpp!=0) ){
++ printk(KERN_ERR "%s(): CF slot1 cannot support Vpp %u\n",
++ __FUNCTION__, configure->vpp);
++ return -1;
++ }
++ save_flags_cli(flags);
+
+- nmcr = (mcr = SCP_REG_MCR) & ~0x0010;
+- ncpr = (cpr = SCP_REG_CPR) & ~0x0083;
+- nccr = (ccr = SCP_REG_CCR) & ~0x0080;
+- nimr = (imr = SCP_REG_IMR) & ~0x003E;
+-
+- ncpr |= (configure->vcc == 33) ? 0x0001:
+- (configure->vcc == 50) ? 0x0002:
+- 0;
+- nmcr |= (configure->flags&SS_IOCARD)? 0x0010: 0;
+- ncpr |= (configure->flags&SS_OUTPUT_ENA)? 0x0080: 0;
+- nccr |= (configure->flags&SS_RESET)? 0x0080: 0;
+- nimr |= ((configure->masks&SS_DETECT) ? 0x0004: 0)|
+- ((configure->masks&SS_READY) ? 0x0002: 0)|
+- ((configure->masks&SS_BATDEAD)? 0x0010: 0)|
+- ((configure->masks&SS_BATWARN)? 0x0020: 0)|
+- ((configure->masks&SS_STSCHG) ? 0x0010: 0)|
+- ((configure->masks&SS_WRPROT) ? 0x0008: 0);
+-
+- if( !(ncpr & 0x0003) )
+- keep_rd[0] = 0;
+- else if( !(keep_rd[0] & RESET_DONE) ){
+- if( nccr & 0x0080 )
+- keep_rd[0] |= RESET_DONE;
+- else nccr |= 0x0080;
+- }
+-
+- if( mcr != nmcr )
+- SCP_REG_MCR = nmcr;
+- if( cpr != ncpr )
+- SCP_REG_CPR = ncpr;
+- if( ccr != nccr )
+- SCP_REG_CCR = nccr;
+- if( imr != nimr )
+- SCP_REG_IMR = nimr;
++ nmcr = (mcr = SCP_JC_REG_MCR) & ~0x0010;
++ ncpr = (cpr = SCP_JC_REG_CPR) & ~0x0083;
++ nccr = (ccr = SCP_JC_REG_CCR) & ~0x0080;
++ nimr = (imr = SCP_JC_REG_IMR) & ~0x003E;
++
++ ncpr |= (configure->vcc == 33) ? 0x0001:
++ (configure->vcc == 50) ? 0x0002:
++ 0;
++ nmcr |= (configure->flags&SS_IOCARD)? 0x0010: 0;
++ ncpr |= (configure->flags&SS_OUTPUT_ENA)? 0x0080: 0;
++ nccr |= (configure->flags&SS_RESET)? 0x0080: 0;
++ nimr |= ((configure->masks&SS_DETECT) ? 0x0004: 0)|
++ ((configure->masks&SS_READY) ? 0x0002: 0)|
++ ((configure->masks&SS_BATDEAD)? 0x0010: 0)|
++ ((configure->masks&SS_BATWARN)? 0x0020: 0)|
++ ((configure->masks&SS_STSCHG) ? 0x0010: 0)|
++ ((configure->masks&SS_WRPROT) ? 0x0008: 0);
++
++ if( !(ncpr & 0x0003) )
++ keep_rd[1] = 0;
++ else if( !(keep_rd[1] & RESET_DONE) ){
++ if( nccr & 0x0080 )
++ keep_rd[1] |= RESET_DONE;
++ else nccr |= 0x0080;
++ }
++
++ if( mcr != nmcr )
++ SCP_JC_REG_MCR = nmcr;
++ if( cpr != ncpr )
++ SCP_JC_REG_CPR = ncpr;
++ if( ccr != nccr )
++ SCP_JC_REG_CCR = nccr;
++ if( imr != nimr )
++ SCP_JC_REG_IMR = nimr;
+
+- restore_flags(flags);
++ restore_flags(flags);
++#endif
++ }
+
+ #endif
+
+ return 0;
+ }
+
++#if defined(CONFIG_ARCH_PXA_TOSA)
++static int sharpsl_pcmcia_socket_init(int sock)
++{
++ /* enable interrupt */
++ switch(sock) {
++ case 0:
++ SCP_REG_IMR = 0x00C0;
++ SCP_REG_MCR = 0x0101;
++ break;
++ case 1:
++ SCP_JC_REG_IMR = 0x00C0;
++ SCP_JC_REG_MCR = 0x0101;
++ break;
++ default:
++ return -1;
++ }
++ return 0;
++}
++#endif
++
+ struct pcmcia_low_level sharpsl_pcmcia_ops = {
+ sharpsl_pcmcia_init,
+ sharpsl_pcmcia_shutdown,
+ sharpsl_pcmcia_socket_state,
+ sharpsl_pcmcia_get_irq_info,
+- sharpsl_pcmcia_configure_socket
++ sharpsl_pcmcia_configure_socket,
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ sharpsl_pcmcia_socket_init,
++#endif
+ };
+
+-int is_pcmcia_card_present(int slot)
++int is_pcmcia_card_present(int irq)
+ {
+ int detect;
+ #ifdef CONFIG_SABINAL_DISCOVERY
+ detect = ((ASIC3_GPIO_PSTS_D & CF_DETECT) ? 0 : 1);
++ //printk("is_card_present: irq=%d detect=%d\n", irq, detect);
++ return detect;
+ #else
+- int active;
+- active = (SCP_REG_CPR & 0x0003)? 1:0;
+- detect = (SCP_REG_CSR & 0x0004)? 0:1;
++ int active = 0;
++ if (irq == IRQ_GPIO_CF_IRQ) {
++ active = (SCP_REG_CPR & 0x0003)? 1:0;
++ detect = (SCP_REG_CSR & 0x0004)? 0:1;
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ } else if (irq == IRQ_GPIO_JC_CF_IRQ) {
++ active = (SCP_JC_REG_CPR & 0x0003)? 1:0;
++ detect = (SCP_JC_REG_CSR & 0x0004)? 0:1;
+ #endif
+- //printk("is_card_present: detect=%d\n", detect);
+- //return detect;
++ } else {
++ /* unknown IRQ : return TRUE */
++ return 1;
++ }
++ //printk("is_card_present: irq=%d detect=%d active=%d\n", irq, detect, active);
+ return detect & active;
++#endif
++}
++
++int sharpsl_pcmcia_irq_to_sock(int irq)
++{
++#if defined(CONFIG_ARCH_PXA_TOSA)
++ if (irq == IRQ_GPIO_JC_CF_IRQ) {
++ return 1;
++ }
++#endif
++ return 0;
+ }
++
+diff -Nur linux_c860_org/drivers/sbus/char/rtc.c linux/drivers/sbus/char/rtc.c
+--- linux_c860_org/drivers/sbus/char/rtc.c 2002-08-26 14:39:04.000000000 +0900
++++ linux/drivers/sbus/char/rtc.c 2004-06-10 21:09:10.000000000 +0900
+@@ -89,6 +89,7 @@
+ switch (cmd)
+ {
+ case RTCGET:
++ memset(&rtc_tm, 0, sizeof(struct rtc_time));
+ get_rtc_time(&rtc_tm);
+
+ if (copy_to_user((struct rtc_time*)arg, &rtc_tm, sizeof(struct rtc_time)))
+diff -Nur linux_c860_org/drivers/sound/Config.in linux/drivers/sound/Config.in
+--- linux_c860_org/drivers/sound/Config.in 2002-10-11 21:13:04.000000000 +0900
++++ linux/drivers/sound/Config.in 2004-06-10 21:09:10.000000000 +0900
+@@ -224,6 +224,8 @@
+ dep_tristate ' Intel PXA250/210 AC97 audio' CONFIG_SOUND_PXA_AC97 $CONFIG_ARCH_PXA $CONFIG_SOUND
+ dep_tristate ' Poodle audio support' CONFIG_SOUND_POODLE $CONFIG_ARCH_PXA $CONFIG_SOUND
+ dep_tristate ' Corgi audio support' CONFIG_SOUND_CORGI $CONFIG_ARCH_PXA $CONFIG_SOUND
++ dep_tristate ' Tosa audio support' CONFIG_SOUND_TOSA $CONFIG_AC97_TOSA $CONFIG_SOUND
++ dep_tristate ' Tosa buzzer support' CONFIG_BUZZER_TOSA $CONFIG_SOUND_TOSA
+ fi
+
+ dep_tristate ' TV card (bt848) mixer support' CONFIG_SOUND_TVMIXER $CONFIG_SOUND $CONFIG_I2C
+diff -Nur linux_c860_org/drivers/sound/Makefile linux/drivers/sound/Makefile
+--- linux_c860_org/drivers/sound/Makefile 2002-10-11 21:13:04.000000000 +0900
++++ linux/drivers/sound/Makefile 2004-06-10 21:09:10.000000000 +0900
+@@ -11,7 +11,7 @@
+ msnd.o opl3.o sb_common.o sequencer_syms.o \
+ sound_core.o sound_syms.o uart401.o \
+ nm256_audio.o ac97.o ac97_codec.o aci.o \
+- sa1100-audio.o pxa-audio.o pxa-ac97.o
++ sa1100-audio.o pxa-audio.o pxa-ac97.o pxa-ac97_tosa.o
+
+ # Each configuration option enables a list of files.
+
+@@ -88,6 +88,7 @@
+ obj-$(CONFIG_SOUND_DISCOVERY) += discovery_audio.o i2sc.o
+ obj-$(CONFIG_SOUND_POODLE) += pxa-i2s.o poodle_i2sc.o poodle_wm8731.o
+ obj-$(CONFIG_SOUND_CORGI) += pxa-i2s_corgi.o poodle_i2sc.o poodle_wm8731.o
++obj-$(CONFIG_SOUND_TOSA) += pxa-ac97_tosa.o tosa_wm9712.o
+
+ ifeq ($(CONFIG_MIDI_EMU10K1),y)
+ obj-$(CONFIG_SOUND_EMU10K1) += sound.o
+diff -Nur linux_c860_org/drivers/sound/pxa-ac97_tosa.c linux/drivers/sound/pxa-ac97_tosa.c
+--- linux_c860_org/drivers/sound/pxa-ac97_tosa.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/sound/pxa-ac97_tosa.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,2250 @@
++/*
++ * linux/drivers/sound/pxa-ac97_tosa.c
++ *
++ * AC97 interface for the Tosa chip
++ *
++ * (C) Copyright 2004 Lineo Solutions, Inc.
++ *
++ * Based on:
++ * linux/drivers/sound/pxa-ac97.c -- AC97 interface for the Cotula chip
++ * Author: Nicolas Pitre
++ * Created: Aug 15, 2001
++ * Copyright: MontaVista Software Inc.
++ *
++ * 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 <linux/init.h>
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/slab.h>
++#include <linux/pci.h>
++#include <linux/completion.h>
++#include <linux/delay.h>
++#include <linux/poll.h>
++#include <linux/sound.h>
++#include <linux/soundcard.h>
++#include <linux/ac97_codec.h>
++
++#include <asm/hardware.h>
++#include <asm/irq.h>
++#include <asm/uaccess.h>
++#include <asm/semaphore.h>
++#include <asm/dma.h>
++
++#include "pxa-audio.h"
++
++#include <asm/arch/tosa_wm9712.h>
++
++//struct ac97_codec *codec;
++
++/************************************************************
++ * Debug
++ ************************************************************/
++#define DBG_LEVEL 0
++
++#define DBG_L0 0
++#define DBG_L1 1
++#define DBG_L2 2
++#define DBG_L3 3
++
++#ifdef DBG_LEVEL
++#define DEBUG(level, x, args...) \
++ if ( level <= DBG_LEVEL ) printk("%s: " x,__FUNCTION__ ,##args)
++#else
++#define DEBUG(level, x, args...) \
++ if ( !level ) printk("%s: " x,__FUNCTION__ ,##args)
++#endif /* DBG_LEVEL */
++
++/************************************************************
++ * Some declarations
++ ************************************************************/
++#define SND_DEV_STATUS 6 /* /dev/sndstat for Compatible for Collie */
++
++#define AUDIO_NBFRAGS_DEFAULT 8
++#define AUDIO_FRAGSIZE_DEFAULT 8192
++
++#define MAX_DMA_SIZE 4096
++#define DMA_DESC_SIZE sizeof(pxa_dma_desc)
++
++#define IOCTL_IN(arg, ret) \
++ do { int error = get_user(ret, (int *)(arg)); \
++ if (error) return error; \
++ } while (0)
++#define IOCTL_OUT(arg, ret) ioctl_return((int *)(arg), ret)
++
++#define DMA_NO_INITIALIZED 1
++#define ALARM_NO_MALLOC 1
++#ifdef CONFIG_BUZZER_TOSA
++#define BUZZER_FORCE_CLOSE 1
++#else
++#undef BUZZER_FORCE_CLOSE
++#endif /* CONFIG_BUZZER_TOSA */
++
++/************************************************************
++ * Power maneagement
++ ************************************************************/
++#ifdef CONFIG_PM
++#include <linux/pm.h>
++static struct pm_dev* pxa_sound_pm_dev;
++static int tosa_pm_callback(struct pm_dev *,pm_request_t, void *);
++extern void tosa_ts_suspend(void);
++extern void tosa_ts_resume(void);
++#endif /* CONFIG_PM */
++
++/************************************************************
++ * valiables
++ ************************************************************/
++static ssize_t (*ct_func)
++ (const u_char *, size_t, u_char *, ssize_t *, ssize_t) = NULL;
++static ssize_t (*ct_read_func)
++ (const u_char *, size_t, u_char *, ssize_t *, ssize_t) = NULL;
++
++static int tosa_intmode = 0;
++static int tosa_intmode_speed = 0;
++static int tosa_intmode_direct = 0;
++static short *int_data_org = NULL ;
++#ifdef ALARM_NO_MALLOC
++static int tosa_intmode_cur = 0;
++static int tosa_intmode_step = 0;
++#else /* ALARM_NO_MALLOC */
++static short *int_data = NULL ;
++#endif /* ALARM_NO_MALLOC */
++
++#if defined(BUZZER_FORCE_CLOSE) && defined(CONFIG_BUZZER_TOSA)
++#define WAIT_BZ_RELEASE ( ( 2 * 1000 ) / 10 )
++static int buzzer_open = 0;
++static int buzzer_close = 0;
++#endif /* BUZZER_FORCE_CLOSE */
++
++extern int wm9712_mono_out; // mix output data into mono
++
++/************************************************************
++ * Prototype
++ ************************************************************/
++static int tosa_init(void);
++static int tosa_set_volume(int);
++static int tosa_set_stereo(int);
++static int tosa_set_format(int);
++static int tosa_set_gain(int);
++static int tosa_get_gain(void);
++static int tosa_get_volume(void);
++static int tosa_set_freq(int);
++static int mixer_ioctl
++ (struct inode *, struct file *,unsigned int, unsigned long);
++static void tosa_intmode_mix(unsigned char *,int);
++
++/************************************************************
++ * Machine definitions
++ ************************************************************/
++typedef struct {
++ ssize_t (*ct_ulaw)(const u_char *, size_t, u_char *, ssize_t *, ssize_t);
++ ssize_t (*ct_alaw)(const u_char *, size_t, u_char *, ssize_t *, ssize_t);
++ ssize_t (*ct_s8)(const u_char *, size_t, u_char *, ssize_t *, ssize_t);
++ ssize_t (*ct_u8)(const u_char *, size_t, u_char *, ssize_t *, ssize_t);
++ ssize_t (*ct_s16be)(const u_char *, size_t, u_char *, ssize_t *, ssize_t);
++ ssize_t (*ct_u16be)(const u_char *, size_t, u_char *, ssize_t *, ssize_t);
++ ssize_t (*ct_s16le)(const u_char *, size_t, u_char *, ssize_t *, ssize_t);
++ ssize_t (*ct_u16le)(const u_char *, size_t, u_char *, ssize_t *, ssize_t);
++} TRANS;
++
++typedef struct {
++ int (*init)(void);
++ void (*silence)(void);
++ int (*setFormat)(int);
++ int (*setVolume)(int);
++ int (*getVolume)(void);
++ int (*setStereo)(int);
++ int (*setBass)(int);
++ int (*setTreble)(int);
++ int (*setGain)(int);
++ int (*getGain)(void);
++ int (*setFreq)(int);
++ void (*play)(void);
++} PLATFORM;
++
++static PLATFORM mach_tosa = {
++ tosa_init, // void init(void)
++ NULL, // void silence(void)
++ tosa_set_format, // int setFormat(int)
++ tosa_set_volume, // int setVolume(int)
++ tosa_get_volume, // int getVolume(void)
++ tosa_set_stereo, // int setStereo(int)
++ NULL, // int setBass(int)
++ NULL, // int setTreble(int)
++ tosa_set_gain, // int setGain(int)
++ tosa_get_gain, // int getGain(void)
++ tosa_set_freq, // int setFreq(int)
++ NULL, // void play(void)
++};
++
++/************************************************************
++ * /dev/setting
++ ************************************************************/
++struct sound_settings {
++ PLATFORM mach; /* platform dependent things */
++ TRANS *trans; /* supported translations */
++ TRANS *trans_read; /* supported translations */
++ unsigned short mode;
++ int format; /* AFMT_* */
++ int stereo; /* 0 = mono, 1 = stereo */
++ int size; /* 8/16 bit*/
++ int freq; /* freq */
++ int volume_left; /* volume (range is 0 - 100%) */
++ int volume_right;
++ int gain_left; /* input gain (range is 0 - 100%) */
++ int gain_right;
++ int bass; /* tone (not support) */
++ int treble;
++ /* device independ */
++ // int gain_shift; /* input gain shift */
++ // int gain; /* input gain */
++};
++static struct sound_settings sound;
++
++/* /dev/sndstat */
++struct sound_state {
++ int dev_state;
++ int busy;
++ char buf[512];
++ int len, ptr;
++};
++static struct sound_state tosa_sound_state;
++
++static audio_stream_t ac97_audio_out = {
++ name: "AC97 audio out",
++ dcmd: DCMD_TXPCDR,
++ drcmr: &DRCMRTXPCDR,
++ dev_addr: __PREG(PCDR),
++};
++
++static audio_stream_t ac97_audio_in = {
++ name: "AC97 audio in",
++ dcmd: DCMD_RXPCDR,
++ drcmr: &DRCMRRXPCDR,
++ dev_addr: __PREG(PCDR),
++};
++
++static audio_state_t ac97_audio_state = {
++ output_stream: &ac97_audio_out,
++ input_stream: &ac97_audio_in,
++ sem: __MUTEX_INITIALIZER(ac97_audio_state.sem),
++};
++
++#if 0
++typedef struct {
++ int shift;
++ int gain;
++} input_gain_t;
++
++static input_gain_t input_gain[7] = {
++ { 2 , 0 },
++ { 0 , 1 },
++ { 1 , 1 },
++ { 2 , 1 },
++ { 3 , 1 },
++ { 4 , 1 },
++ { 5 , 1 }
++};
++#endif
++
++/************************************************************
++ * data convert
++ ************************************************************/
++/* 16 bit mu-law */
++static short ulaw2dma16[] = {
++ -32124, -31100, -30076, -29052, -28028, -27004, -25980, -24956,
++ -23932, -22908, -21884, -20860, -19836, -18812, -17788, -16764,
++ -15996, -15484, -14972, -14460, -13948, -13436, -12924, -12412,
++ -11900, -11388, -10876, -10364, -9852, -9340, -8828, -8316,
++ -7932, -7676, -7420, -7164, -6908, -6652, -6396, -6140,
++ -5884, -5628, -5372, -5116, -4860, -4604, -4348, -4092,
++ -3900, -3772, -3644, -3516, -3388, -3260, -3132, -3004,
++ -2876, -2748, -2620, -2492, -2364, -2236, -2108, -1980,
++ -1884, -1820, -1756, -1692, -1628, -1564, -1500, -1436,
++ -1372, -1308, -1244, -1180, -1116, -1052, -988, -924,
++ -876, -844, -812, -780, -748, -716, -684, -652,
++ -620, -588, -556, -524, -492, -460, -428, -396,
++ -372, -356, -340, -324, -308, -292, -276, -260,
++ -244, -228, -212, -196, -180, -164, -148, -132,
++ -120, -112, -104, -96, -88, -80, -72, -64,
++ -56, -48, -40, -32, -24, -16, -8, 0,
++ 32124, 31100, 30076, 29052, 28028, 27004, 25980, 24956,
++ 23932, 22908, 21884, 20860, 19836, 18812, 17788, 16764,
++ 15996, 15484, 14972, 14460, 13948, 13436, 12924, 12412,
++ 11900, 11388, 10876, 10364, 9852, 9340, 8828, 8316,
++ 7932, 7676, 7420, 7164, 6908, 6652, 6396, 6140,
++ 5884, 5628, 5372, 5116, 4860, 4604, 4348, 4092,
++ 3900, 3772, 3644, 3516, 3388, 3260, 3132, 3004,
++ 2876, 2748, 2620, 2492, 2364, 2236, 2108, 1980,
++ 1884, 1820, 1756, 1692, 1628, 1564, 1500, 1436,
++ 1372, 1308, 1244, 1180, 1116, 1052, 988, 924,
++ 876, 844, 812, 780, 748, 716, 684, 652,
++ 620, 588, 556, 524, 492, 460, 428, 396,
++ 372, 356, 340, 324, 308, 292, 276, 260,
++ 244, 228, 212, 196, 180, 164, 148, 132,
++ 120, 112, 104, 96, 88, 80, 72, 64,
++ 56, 48, 40, 32, 24, 16, 8, 0,
++};
++
++/* 16 bit A-law */
++static short alaw2dma16[] = {
++ -5504, -5248, -6016, -5760, -4480, -4224, -4992, -4736,
++ -7552, -7296, -8064, -7808, -6528, -6272, -7040, -6784,
++ -2752, -2624, -3008, -2880, -2240, -2112, -2496, -2368,
++ -3776, -3648, -4032, -3904, -3264, -3136, -3520, -3392,
++ -22016, -20992, -24064, -23040, -17920, -16896, -19968, -18944,
++ -30208, -29184, -32256, -31232, -26112, -25088, -28160, -27136,
++ -11008, -10496, -12032, -11520, -8960, -8448, -9984, -9472,
++ -15104, -14592, -16128, -15616, -13056, -12544, -14080, -13568,
++ -344, -328, -376, -360, -280, -264, -312, -296,
++ -472, -456, -504, -488, -408, -392, -440, -424,
++ -88, -72, -120, -104, -24, -8, -56, -40,
++ -216, -200, -248, -232, -152, -136, -184, -168,
++ -1376, -1312, -1504, -1440, -1120, -1056, -1248, -1184,
++ -1888, -1824, -2016, -1952, -1632, -1568, -1760, -1696,
++ -688, -656, -752, -720, -560, -528, -624, -592,
++ -944, -912, -1008, -976, -816, -784, -880, -848,
++ 5504, 5248, 6016, 5760, 4480, 4224, 4992, 4736,
++ 7552, 7296, 8064, 7808, 6528, 6272, 7040, 6784,
++ 2752, 2624, 3008, 2880, 2240, 2112, 2496, 2368,
++ 3776, 3648, 4032, 3904, 3264, 3136, 3520, 3392,
++ 22016, 20992, 24064, 23040, 17920, 16896, 19968, 18944,
++ 30208, 29184, 32256, 31232, 26112, 25088, 28160, 27136,
++ 11008, 10496, 12032, 11520, 8960, 8448, 9984, 9472,
++ 15104, 14592, 16128, 15616, 13056, 12544, 14080, 13568,
++ 344, 328, 376, 360, 280, 264, 312, 296,
++ 472, 456, 504, 488, 408, 392, 440, 424,
++ 88, 72, 120, 104, 24, 8, 56, 40,
++ 216, 200, 248, 232, 152, 136, 184, 168,
++ 1376, 1312, 1504, 1440, 1120, 1056, 1248, 1184,
++ 1888, 1824, 2016, 1952, 1632, 1568, 1760, 1696,
++ 688, 656, 752, 720, 560, 528, 624, 592,
++ 944, 912, 1008, 976, 816, 784, 880, 848,
++};
++
++static ssize_t tosa_ct_law(const u_char *userPtr, size_t userCount,
++ u_char frame[], ssize_t *frameUsed, ssize_t frameLeft)
++{
++ short *table = sound.format == AFMT_MU_LAW ? ulaw2dma16: alaw2dma16;
++ ssize_t count, used;
++ short *p = (short *) &frame[*frameUsed];
++ int val, stereo = sound.stereo;
++
++ frameLeft >>= 2;
++ if (stereo)
++ userCount >>= 1;
++ used = count = min(userCount, frameLeft);
++ while (count > 0) {
++ u_char data;
++ if (get_user(data, userPtr++)) {
++ return -EFAULT;
++ }
++ val = table[data];
++ *p++ = val; /* Left Ch. */
++ if (stereo) {
++ if (get_user(data, userPtr++)) {
++ return -EFAULT;
++ }
++ val = table[data];
++ }
++ *p++ = val; /* Right Ch. */
++ count--;
++ }
++ *frameUsed += used * 4;
++ return stereo? used * 2: used;
++}
++
++static ssize_t tosa_ct_u8(const u_char *userPtr, size_t userCount,
++ u_char frame[], ssize_t *frameUsed, ssize_t frameLeft)
++{
++ int ch = (sound.stereo)?2:1;
++ unsigned char *src = (unsigned char *)userPtr;
++ short *dstct = (short *)frame;
++ short tmpval;
++ int frameMax = frameLeft >> 2;
++ int userMax = userCount >> (ch-1);
++ int idx,samplingCount = min(frameMax,userMax);
++
++ if (!wm9712_mono_out || ch==1) {
++ for (idx=0; idx<samplingCount; idx++) {
++ if (get_user(tmpval,src)) {
++ return -EFAULT;
++ }
++ *dstct++ = (tmpval-128)<<8;
++ if (ch>1) src++;
++ if (get_user(tmpval,src++)) {
++ return -EFAULT;
++ }
++ *dstct++ = (tmpval-128)<<8;
++ }
++ } else {
++ short vall,valr;
++ for (idx=0; idx<samplingCount; idx++) {
++ if (get_user(vall,src++) || get_user(valr,src++)) {
++ return -EFAULT;
++ }
++ vall = (vall-128)<<8;
++ valr = (valr-128)<<8;
++ vall = vall/2+valr/2;
++ *dstct++ = vall;
++ *dstct++ = vall;
++ }
++ }
++
++ *frameUsed = samplingCount * 2 * 2; // dma is always stereo 16bit
++ return samplingCount * ch;
++}
++
++static ssize_t tosa_ct_s16(const u_char *userPtr, size_t userCount,
++ u_char frame[], ssize_t *frameUsed, ssize_t frameLeft)
++{
++ int ch = (sound.stereo)?2:1;
++ short *src = (short *)userPtr;
++ short *dstct = (short *)frame;
++ int frameMax = frameLeft >> 2;
++ int userMax = userCount >> ch;
++ int samplingCount = min(frameMax,userMax);
++
++ if ( ch > 1 ) { // stereo
++ if (!wm9712_mono_out) {
++ if (copy_from_user(dstct,src,samplingCount * ch * 2)) {
++ return -EFAULT;
++ }
++ } else {
++ int idx;
++ short vall,valr;
++ for (idx=0; idx<samplingCount; idx++) {
++ if (get_user(vall,src++) || get_user(valr,src++)) {
++ return -EFAULT;
++ }
++ vall = vall/2+valr/2;
++ *dstct++ = vall;
++ *dstct++ = vall;
++ }
++ }
++ } else { // mono
++ int idx;
++ for (idx=0; idx<samplingCount; idx++) {
++ if (get_user(*dstct++,src) || get_user(*dstct++,src++)) {
++ return -EFAULT;
++ }
++ }
++ }
++
++ *frameUsed = samplingCount * 2 * 2; // dma is always stereo 16bit
++ return samplingCount * ch * 2;
++}
++
++static TRANS trans_tosa = {
++ tosa_ct_law,tosa_ct_law,0,tosa_ct_u8,0,0,tosa_ct_s16,0
++};
++
++/* data convert for recording */
++static ssize_t tosa_ct_read_u8(const u_char *userPtr, size_t userCount,
++ u_char frame[], ssize_t *frameUsed, ssize_t frameLeft)
++{
++ int ch = (sound.stereo)?2:1;
++ unsigned char *usrbuf = (unsigned char *)userPtr;
++ short *dmabuf = (short *)frame;
++ short tmpval;
++ int dmaMax = frameLeft >> 2; // dma is always stereo
++ int userMax = userCount >> ch;
++ int ct,samplingCount = min(dmaMax,userMax);
++
++ for (ct=0; ct<samplingCount; ct++) {
++ dmabuf++; // use right data
++ tmpval = *dmabuf>>8;
++ if (tmpval>127) tmpval = 127;
++ else if (tmpval<-128) tmpval = -128;
++ if (put_user((unsigned char)(tmpval+128),usrbuf++)) { // left channel
++ return -EFAULT;
++ }
++ if (ch>1) { // right channel
++ tmpval = *dmabuf>>8;
++ if (tmpval>127) tmpval = 127;
++ else if (tmpval<-128) tmpval = -128;
++ if (put_user((unsigned char)(tmpval+128),usrbuf++)) {
++ return -EFAULT;
++ }
++ }
++ dmabuf++;
++ }
++ *frameUsed = samplingCount * 2 * 2; // dma is always stereo
++ return samplingCount * ch;
++}
++
++static ssize_t tosa_ct_read_s16(const u_char *userPtr, size_t userCount,
++ u_char frame[], ssize_t *frameUsed, ssize_t frameLeft)
++{
++ int ch = (sound.stereo)?2:1;
++ short *usrbuf = (short *)userPtr;
++ short *dmabuf = (short *)frame;
++ int dmaMax = frameLeft >> 2; // dma is always stereo
++ int userMax = userCount >> ch;
++ int ct,samplingCount = min(dmaMax,userMax);
++
++ for (ct=0; ct<samplingCount; ct++) {
++ dmabuf++; // use right data
++ if (put_user((*dmabuf),usrbuf++)) { // left channel
++ return -EFAULT;
++ }
++ if (ch>1) { // right channel
++ if (put_user(*dmabuf,usrbuf++)) {
++ return -EFAULT;
++ }
++ }
++ dmabuf++;
++ }
++ *frameUsed = samplingCount * 2 * 2; // dma is always stereo
++ return samplingCount * ch * 2;
++}
++
++static TRANS trans_r_tosa = {
++ 0,0,0,tosa_ct_read_u8,0,0,tosa_ct_read_s16,0
++};
++
++/************************************************************
++ * Common stuff
++ ************************************************************/
++static inline int ioctl_return(int *addr, int value)
++{
++ if ( value < 0 ) return value;
++ return put_user(value, addr) ? -EFAULT: 0;
++}
++
++static inline void tosa_ac97_write(unsigned int data)
++{
++ while ( 1 ) {
++ if ( (GPLR(GPIO31_SYNC) & GPIO_bit(GPIO31_SYNC)) == GPIO_bit(GPIO31_SYNC) )
++ break;
++ }
++ PCDR = data;
++}
++
++/************************************************************
++ * This function frees all buffers
++ ************************************************************/
++
++#define audio_clear_buf pxa_audio_clear_buf
++
++void pxa_audio_clear_buf(audio_stream_t * s)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ int frag;
++
++ if (!s->buffers)
++ return;
++
++ /* Ensure DMA isn't running */
++ set_current_state(TASK_UNINTERRUPTIBLE);
++ add_wait_queue(&s->stop_wq, &wait);
++ DCSR(s->dma_ch) = DCSR_STOPIRQEN;
++ schedule();
++ remove_wait_queue(&s->stop_wq, &wait);
++
++ /* free DMA buffers */
++ for (frag = 0; frag < s->nbfrags; frag++) {
++ audio_buf_t *b = &s->buffers[frag];
++ if (!b->master)
++ continue;
++ consistent_free(b->data, b->master, b->dma_desc->dsadr);
++ }
++
++ /* free descriptor ring */
++ if (s->buffers->dma_desc)
++ consistent_free(s->buffers->dma_desc,
++ s->nbfrags * s->descs_per_frag * DMA_DESC_SIZE,
++ s->dma_desc_phys);
++
++ /* free buffer structure array */
++ kfree(s->buffers);
++ s->buffers = NULL;
++}
++
++/************************************************************
++ * This function allocates the DMA descriptor array and buffer data space
++ * according to the current number of fragments and fragment size.
++ ************************************************************/
++static int audio_setup_buf(audio_stream_t * s)
++{
++ pxa_dma_desc *dma_desc;
++ dma_addr_t dma_desc_phys;
++ int nb_desc, frag, i, buf_size = 0;
++ char *dma_buf = NULL;
++ dma_addr_t dma_buf_phys = 0;
++
++ DEBUG(DBG_L2, "Enter audio_setup buffer\n");
++
++ if (s->buffers)
++ return -EBUSY;
++
++ /* Our buffer structure array */
++ s->buffers = kmalloc(sizeof(audio_buf_t) * s->nbfrags, GFP_KERNEL);
++ if (!s->buffers)
++ goto err;
++ memzero(s->buffers, sizeof(audio_buf_t) * s->nbfrags);
++ /*
++ * Our DMA descriptor array:
++ * for Each fragment we have one checkpoint descriptor plus one
++ * descriptor per MAX_DMA_SIZE byte data blocks.
++ */
++ nb_desc = (1 + (s->fragsize + MAX_DMA_SIZE - 1)/MAX_DMA_SIZE) * s->nbfrags;
++ dma_desc = consistent_alloc(GFP_KERNEL,
++ nb_desc * DMA_DESC_SIZE, &dma_desc_phys);
++ if (!dma_desc)
++ goto err;
++ s->descs_per_frag = nb_desc / s->nbfrags;
++ s->buffers->dma_desc = dma_desc;
++ s->dma_desc_phys = dma_desc_phys;
++ for (i = 0; i < nb_desc - 1; i++)
++ dma_desc[i].ddadr = dma_desc_phys + (i + 1) * DMA_DESC_SIZE;
++ dma_desc[i].ddadr = dma_desc_phys;
++
++ /* Our actual DMA buffers */
++ for (frag = 0; frag < s->nbfrags; frag++) {
++ audio_buf_t *b = &s->buffers[frag];
++ /*
++ * Let's allocate non-cached memory for DMA buffers.
++ * We try to allocate all memory at once.
++ * If this fails (a common reason is memory fragmentation),
++ * then we'll try allocating smaller buffers.
++ */
++ if (!buf_size) {
++ buf_size = (s->nbfrags - frag) * s->fragsize;
++ do {
++ dma_buf = consistent_alloc(GFP_KERNEL,
++ buf_size,
++ &dma_buf_phys);
++ if (!dma_buf)
++ buf_size -= s->fragsize;
++ } while (!dma_buf && buf_size);
++ if (!dma_buf)
++ goto err;
++ b->master = buf_size;
++ memzero(dma_buf, buf_size);
++ }
++
++ /*
++ * is always zero, we'll abuse the dsadr and dtadr fields
++ * just in case this one is picked up by the hardware.
++ * while processing SOUND_DSP_GETPTR.
++ */
++ dma_desc->dsadr = dma_buf_phys;
++ dma_desc->dtadr = dma_buf_phys;
++ dma_desc->dcmd = DCMD_ENDIRQEN;
++ if (s->output && !s->mapped)
++ dma_desc->ddadr |= DDADR_STOP;
++ b->dma_desc = dma_desc++;
++
++ /* set up the actual data descriptors */
++ for (i = 0; (i * MAX_DMA_SIZE) < s->fragsize; i++) {
++ dma_desc[i].dsadr = (s->output) ?
++ (dma_buf_phys + i*MAX_DMA_SIZE) : s->dev_addr;
++ dma_desc[i].dtadr = (s->output) ?
++ s->dev_addr : (dma_buf_phys + i*MAX_DMA_SIZE);
++ dma_desc[i].dcmd = s->dcmd |
++ ((s->fragsize < MAX_DMA_SIZE) ?
++ s->fragsize : MAX_DMA_SIZE);
++
++ DEBUG(DBG_L3, "dsadr[%8x],dtadr[%8x],dcmd[%8x]\n",
++ dma_desc[i].dsadr,dma_desc[i].dtadr,dma_desc[i].dcmd);
++
++ }
++ dma_desc += i;
++
++ /* handle buffer pointers */
++ b->data = dma_buf;
++ dma_buf += s->fragsize;
++ dma_buf_phys += s->fragsize;
++ buf_size -= s->fragsize;
++ }
++
++ s->usr_frag = s->dma_frag = 0;
++ s->bytecount = 0;
++ s->fragcount = 0;
++ sema_init(&s->sem, (s->output) ? s->nbfrags : 0);
++ return 0;
++
++err:
++ DEBUG(DBG_L0, "unable to allocate audio memory\n ");
++ audio_clear_buf(s);
++ return -ENOMEM;
++}
++
++/************************************************************
++ * Our DMA interrupt handler
++ ************************************************************/
++static void audio_dma_irq(int ch, void *dev_id, struct pt_regs *regs)
++{
++ audio_stream_t *s = dev_id;
++ u_int dcsr;
++
++ dcsr = DCSR(ch);
++ DCSR(ch) = dcsr & ~DCSR_STOPIRQEN;
++
++ DEBUG(DBG_L2, "dcsr(ch) = %8x(%d)\n",dcsr,ch);
++
++ if (!s->buffers) {
++ DEBUG(DBG_L0, "DMA: wow... received IRQ for channel %d but no buffer exists\n", ch);
++ return;
++ }
++
++ if (dcsr & DCSR_BUSERR)
++ DEBUG(DBG_L0, "DMA: bus error interrupt on channel %d\n", ch);
++
++ if (dcsr & DCSR_ENDINTR) {
++ u_long cur_dma_desc;
++ u_int cur_dma_frag;
++
++ /*
++ * Find out which DMA desc is current. Note that DDADR
++ * points to the next desc, not the current one.
++ */
++ cur_dma_desc = DDADR(ch) - s->dma_desc_phys - DMA_DESC_SIZE;
++
++ /*
++ * Let the compiler nicely optimize constant divisors into
++ * multiplications for the common cases which is much faster.
++ * Common cases: x = 1 + (1 << y) for y = [0..3]
++ */
++ switch (s->descs_per_frag) {
++ case 2: cur_dma_frag = cur_dma_desc / (2*DMA_DESC_SIZE); break;
++ case 3: cur_dma_frag = cur_dma_desc / (3*DMA_DESC_SIZE); break;
++ case 5: cur_dma_frag = cur_dma_desc / (5*DMA_DESC_SIZE); break;
++ case 9: cur_dma_frag = cur_dma_desc / (9*DMA_DESC_SIZE); break;
++ default: cur_dma_frag =
++ cur_dma_desc / (s->descs_per_frag * DMA_DESC_SIZE);
++ }
++
++ /* Account for possible wrap back of cur_dma_desc above */
++ if (cur_dma_frag >= s->nbfrags)
++ cur_dma_frag = s->nbfrags - 1;
++
++ while (s->dma_frag != cur_dma_frag) {
++ if (!s->mapped) {
++ /*
++ * This fragment is done - set the checkpoint
++ * descriptor to STOP until it is gets
++ * processed by the read or write function.
++ */
++ s->buffers[s->dma_frag].dma_desc->ddadr |= DDADR_STOP;
++ up(&s->sem);
++ }
++ if (++s->dma_frag >= s->nbfrags)
++ s->dma_frag = 0;/* Accounting */
++ s->bytecount += s->fragsize;
++ s->fragcount++;
++ }
++
++ /* ... and for polling processes */
++ wake_up(&s->frag_wq);
++ }
++
++ if ((dcsr & DCSR_STOPIRQEN) && (dcsr & DCSR_STOPSTATE))
++ wake_up(&s->stop_wq);
++}
++
++/************************************************************
++ * Validate and sets up buffer fragments, etc.
++ ************************************************************/
++static int audio_set_fragments(audio_stream_t *s, int val)
++{
++ if (s->mapped || DCSR(s->dma_ch) & DCSR_RUN)
++ return -EBUSY;
++ if (s->buffers)
++ audio_clear_buf(s);
++ s->nbfrags = (val >> 16) & 0x7FFF;
++ val &= 0xffff;
++ if (val < 5)
++ val = 5;
++ if (val > 15)
++ val = 15;
++ s->fragsize = 1 << val;
++ if (s->nbfrags < 2)
++ s->nbfrags = 2;
++ if (s->nbfrags * s->fragsize > 256 * 1024)
++ s->nbfrags = 256 * 1024 / s->fragsize;
++ if (audio_setup_buf(s))
++ return -ENOMEM;
++ return val|(s->nbfrags << 16);
++}
++
++/************************************************************
++ * Detect HP Jack
++ ************************************************************/
++static void tosa_hp_thread(void)
++{
++ while(1) {
++ wm9712_checkjack_sleep();
++ wm9712_update_jack_state();
++ }
++}
++
++/************************************************************
++ * Prototype functions
++ ************************************************************/
++static int tosa_init(void)
++{
++ if ( wm9712_init() ) {
++ DEBUG(DBG_L0, "Fail Init\n");
++ }
++
++ /* Make threads */
++ kernel_thread(tosa_hp_thread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
++}
++
++static int tosa_set_volume(int volume)
++{
++ sound.volume_left = volume & 0xff;
++ if ( sound.volume_left > 100 ) sound.volume_left = 100;
++ sound.volume_right = ( (volume & 0xff00) >> 8);
++ if ( sound.volume_right > 100 ) sound.volume_right = 100;
++
++ wm9712_set_output_volume(sound.volume_left, sound.volume_right);
++
++ return 0;
++}
++
++static int tosa_get_volume(void)
++{
++ return ( sound.volume_right << 8 | sound.volume_left );
++}
++
++static int tosa_set_stereo(int stereo)
++{
++ if ( stereo < 0 ) return sound.stereo;
++ stereo = !!stereo; /* should be 0 or 1 now */
++ sound.stereo = stereo;
++ return stereo;
++}
++
++static int tosa_set_format(int format)
++{
++ int size;
++
++ switch ( format ) {
++ case AFMT_QUERY:
++ return sound.format;
++ case AFMT_MU_LAW:
++ size = 8;
++ ct_func = sound.trans->ct_ulaw;
++ break;
++ case AFMT_A_LAW:
++ size = 8;
++ ct_func = sound.trans->ct_alaw;
++ break;
++#if 0 // unsupport
++ case AFMT_S8:
++ size = 8;
++ ct_func = sound.trans->ct_s8;
++ break;
++ case AFMT_S16_BE:
++ size = 16;
++ ct_func = sound.trans->ct_s16be;
++ break;
++ case AFMT_U16_BE:
++ size = 16;
++ ct_func = sound.trans->ct_u16be;
++ break;
++ case AFMT_U16_LE:
++ size = 16;
++ ct_func = sound.trans->ct_u16le;
++ break;
++#endif
++ case AFMT_U8:
++ size = 8;
++ ct_func = sound.trans->ct_u8;
++ ct_read_func = sound.trans_read->ct_u8;
++ break;
++ case AFMT_S16_LE:
++ size = 16;
++ ct_func = sound.trans->ct_s16le;
++ ct_read_func = sound.trans_read->ct_s16le;
++ break;
++ default: /* :-) */
++ size = 16;
++ format = AFMT_S16_LE;
++ }
++
++ sound.format = format;
++ sound.size = size;
++ return format;
++}
++
++static int tosa_set_gain(int gain)
++{
++ sound.gain_left = gain & 0xff;
++ if ( sound.gain_left > 100 ) sound.gain_left = 100;
++
++ sound.gain_right = ( (gain & 0xff00) >> 8);
++ if ( sound.gain_right > 100 ) sound.gain_right = 100;
++
++ wm9712_set_input_gain(sound.gain_left,sound.gain_right);
++ return 1;
++}
++
++static int tosa_get_gain(void)
++{
++ return ( sound.gain_right << 8 | sound.gain_left );
++}
++
++static int tosa_set_freq(int speed)
++{
++ if ( speed < 0 ) return sound.freq;
++ sound.freq = speed;
++ if( wm9712_busy() ) {
++ SOUND_SETTINGS setting;
++ setting.mode = sound.mode;
++ setting.frequency = sound.freq;
++ wm9712_set_freq(&setting);
++ }
++ return sound.freq;
++}
++
++/************************************************************
++ * Audio stuff
++ ************************************************************/
++static int audio_open(struct inode *inode, struct file *file)
++{
++ audio_state_t *state = &ac97_audio_state;
++ audio_stream_t *is = state->input_stream;
++ audio_stream_t *os = state->output_stream;
++ SOUND_SETTINGS settings;
++ int ret = 0;
++
++ down(&state->sem);
++ ret = -ENODEV;
++ /* access control */
++ if ( (file->f_mode & FMODE_WRITE) && !os )
++ goto out;
++ if ( (file->f_mode & FMODE_READ) && !is )
++ goto out;
++ ret = -EBUSY;
++
++ if ( state->wr_ref || state->rd_ref )
++#ifdef BUZZER_FORCE_CLOSE
++ {
++ if( !buzzer_open ) {
++ goto out;
++ } else {
++ int now;
++
++ // force close buzzer
++ DEBUG(DBG_L1, "force a buzzer stop!\n");
++ buzzer_close = 1;
++ if ( DCSR(os->dma_ch) & DCSR_RUN ) {
++ DCSR(os->dma_ch) &=
++ (DCSR_RUN|DCSR_ENDINTR|DCSR_STARTINTR|DCSR_BUSERR);
++ }
++ now = jiffies;
++ while ( 1 ) {
++ if ( !buzzer_open ) break;
++ schedule();
++ if ( jiffies > ( now + WAIT_BZ_RELEASE ) ) break;
++ }
++ buzzer_close = 0;
++ if( buzzer_open ) goto out;
++ }
++ }
++#else
++ goto out;
++#endif /* BUZZER_FORCE_CLOSE */
++ /* request DMA channels */
++ if ( file->f_mode & FMODE_WRITE) {
++ ret = pxa_request_dma(os->name, DMA_PRIO_LOW, audio_dma_irq, os);
++ if ( ret < 0 )
++ goto out;
++ os->dma_ch = ret;
++ }
++ if ( file->f_mode & FMODE_READ ) {
++ ret = pxa_request_dma(is->name, DMA_PRIO_LOW, audio_dma_irq, is);
++ if ( ret < 0 ) {
++ if ( file->f_mode & FMODE_WRITE ) {
++ *os->drcmr = 0;
++ pxa_free_dma(os->dma_ch);
++ }
++ goto out;
++ }
++ is->dma_ch = ret;
++ }
++ file->private_data = state;
++
++ sound.mode = 0;
++ if ( file->f_mode & FMODE_WRITE ) {
++ sound.mode |= SOUND_PLAY_MODE;
++ state->wr_ref = 1;
++ os->fragsize = AUDIO_FRAGSIZE_DEFAULT;
++ os->nbfrags = AUDIO_NBFRAGS_DEFAULT;
++ os->output = 1;
++ os->mapped = 0;
++ init_waitqueue_head(&os->frag_wq);
++ init_waitqueue_head(&os->stop_wq);
++ *os->drcmr = os->dma_ch | DRCMR_MAPVLD;
++ }
++ if ( file->f_mode & FMODE_READ ) {
++ sound.mode |= SOUND_REC_MODE;
++ state->rd_ref = 1;
++ is->fragsize = AUDIO_FRAGSIZE_DEFAULT;
++ is->nbfrags = AUDIO_NBFRAGS_DEFAULT;
++ is->output = 0;
++ is->mapped = 0;
++ init_waitqueue_head(&is->frag_wq);
++ init_waitqueue_head(&is->stop_wq);
++ *is->drcmr = is->dma_ch | DRCMR_MAPVLD;
++ }
++
++ if ( (MINOR(inode->i_rdev) & 0x0f) == SND_DEV_AUDIO ) {
++ tosa_set_freq(8000);
++ tosa_set_stereo(0);
++ tosa_set_format(AFMT_MU_LAW);
++ }
++
++ settings.mode = sound.mode;
++ settings.output.left = sound.volume_left;
++ settings.output.right = sound.volume_right;
++ settings.input.left = sound.gain_left;
++ settings.input.right = sound.gain_right;
++ settings.frequency = sound.freq;
++ if ( (ret = wm9712_open(&settings)) < 0 ) {
++ DEBUG(DBG_L0, "Can not open wm9712\n");
++ goto error;
++ }
++ ret = 0;
++
++out:
++ up(&state->sem);
++ return ret;
++
++error:
++ up(&state->sem);
++ if ( (file->f_mode & FMODE_WRITE) && (os->dma_ch >= 0) ) {
++ *os->drcmr = 0;
++ pxa_free_dma(os->dma_ch);
++ }
++ if ( (file->f_mode & FMODE_READ) && (is->dma_ch >= 0) ) {
++ *is->drcmr = 0;
++ pxa_free_dma(is->dma_ch);
++ }
++ state->wr_ref = 0;
++ state->rd_ref = 0;
++ return ret;
++}
++
++static int audio_write(struct file *file, const char *buffer,
++ size_t count, loff_t * ppos)
++{
++ const char *buffer0 = buffer;
++ audio_state_t *state = (audio_state_t *)file->private_data;
++ audio_stream_t *s = state->output_stream;
++ int ret = 0;
++ ssize_t uUsed, bUsed, bLeft = 0;
++ u_char *dest;
++
++ DEBUG(DBG_L2, "Enter audio_write\n");\
++
++ // wait playing int sound.
++ while ( tosa_intmode_direct )
++ schedule();
++
++ if ( ppos != &file->f_pos )
++ return -ESPIPE;
++ if ( s->mapped )
++ return -ENXIO;
++ if ( !s->buffers && audio_setup_buf(s) )
++ return -ENOMEM;
++ while ( count > 0 ) {
++ audio_buf_t *b = &s->buffers[s->usr_frag];
++ DEBUG(DBG_L3, "audio_write count = %d\n",count);
++
++ /* Grab a fragment */
++ if ( file->f_flags & O_NONBLOCK ) {
++ ret = -EAGAIN;
++ if ( down_trylock(&s->sem) )
++ break;
++ } else {
++ ret = -ERESTARTSYS;
++ if ( down_interruptible(&s->sem) )
++ break;
++ }
++
++ /* Feed the current buffer */
++ dest = b->data + b->offset;
++ bUsed = 0;
++ bLeft = s->fragsize - b->offset;
++
++ if ( ct_func ) {
++ uUsed = ct_func(buffer, count, dest, &bUsed, bLeft);
++ } else {
++ return -EFAULT;
++ }
++
++ if ( tosa_intmode ) {
++ tosa_intmode_mix(dest,bUsed);
++ }
++
++ if ( uUsed < 0 ) {
++ up(&s->sem);
++ return -EFAULT;
++ }
++ b->offset += bUsed;
++ buffer += uUsed;
++ count -= uUsed;
++
++ if ( b->offset < s->fragsize ) {
++ up(&s->sem);
++ break;
++ }
++ /*
++ * Activate DMA on current buffer.
++ * We unlock this fragment's checkpoint descriptor and
++ * kick DMA if it is idle. Using checkpoint descriptors
++ * allows for control operations without the need for
++ * stopping the DMA channel if it is already running.
++ */
++ b->offset = 0;
++ b->dma_desc->ddadr &= ~DDADR_STOP;
++#ifdef DMA_NO_INITIALIZED
++ if ( (DCSR(s->dma_ch) & DCSR_STOPSTATE) || !(DCSR(s->dma_ch) & DCSR_RUN) ){
++ DDADR(s->dma_ch) = b->dma_desc->ddadr;
++ DCSR(s->dma_ch) = DCSR_RUN;
++ }
++#else
++ if ( DCSR(s->dma_ch) & DCSR_STOPSTATE ) {
++ DDADR(s->dma_ch) = b->dma_desc->ddadr;
++ DCSR(s->dma_ch) = DCSR_RUN;
++ }
++#endif /* DMA_NO_INITIALIZED */
++
++ /* move the index to the next fragment */
++ if ( ++s->usr_frag >= s->nbfrags )
++ s->usr_frag = 0;
++ }
++
++ if ( (buffer - buffer0) )
++ ret = buffer - buffer0;
++ return ret;
++}
++
++static int audio_read(struct file *file, char *buffer,
++ size_t count, loff_t * ppos)
++{
++ char *buffer0 = buffer;
++ audio_state_t *state = file->private_data;
++ audio_stream_t *s = state->input_stream;
++ int ret = 0;
++ ssize_t uUsed, bUsed, bLeft = 0;
++ u_char *dest;
++
++ if ( ppos != &file->f_pos )
++ return -ESPIPE;
++ if ( s->mapped )
++ return -ENXIO;
++ if ( !s->buffers && audio_setup_buf(s) )
++ return -ENOMEM;
++
++ while ( count > 0 ) {
++ audio_buf_t *b = &s->buffers[s->usr_frag];
++
++ /* prime DMA */
++#ifdef DMA_NO_INITIALIZED
++ if ( (DCSR(s->dma_ch) & DCSR_STOPSTATE) || !(DCSR(s->dma_ch) & DCSR_RUN) ){
++ DDADR(s->dma_ch) = s->buffers[s->dma_frag].dma_desc->ddadr;
++ DCSR(s->dma_ch) = DCSR_RUN;
++ }
++#else
++ if (DCSR(s->dma_ch) & DCSR_STOPSTATE) {
++ DDADR(s->dma_ch) = s->buffers[s->dma_frag].dma_desc->ddadr;
++ DCSR(s->dma_ch) = DCSR_RUN;
++ }
++#endif /* DMA_NO_INITIALIZED */
++
++ /* Wait for a buffer to become full */
++ if (file->f_flags & O_NONBLOCK) {
++ ret = -EAGAIN;
++ if (down_trylock(&s->sem))
++ break;
++ } else {
++ ret = -ERESTARTSYS;
++ if (down_interruptible(&s->sem))
++ break;
++ }
++
++ /* Grab data from current buffer */
++ dest = b->data + b->offset;
++ bUsed = 0;
++ bLeft = s->fragsize - b->offset;
++
++ if (ct_read_func) {
++ uUsed = ct_read_func(buffer, count, dest, &bUsed, bLeft);
++ } else {
++ return -EFAULT;
++ }
++ if ( uUsed < 0 ) {
++ up(&s->sem);
++ return -EFAULT;
++ }
++ b->offset += bUsed;
++ buffer += uUsed;
++ count -= uUsed;
++
++ if (b->offset < s->fragsize) {
++ up(&s->sem);
++ break;
++ }
++
++ /*
++ * Make this buffer available for DMA again.
++ * We unlock this fragment's checkpoint descriptor and
++ * kick DMA if it is idle. Using checkpoint descriptors
++ * allows for control operations without the need for
++ * stopping the DMA channel if it is already running.
++ */
++ b->offset = 0;
++ b->dma_desc->ddadr &= ~DDADR_STOP;
++
++ /* move the index to the next fragment */
++ if (++s->usr_frag >= s->nbfrags)
++ s->usr_frag = 0;
++ }
++
++ if ((buffer - buffer0))
++ ret = buffer - buffer0;
++ return ret;
++}
++
++static int audio_sync(struct file *file)
++{
++ audio_state_t *state = file->private_data;
++ audio_stream_t *s = state->output_stream;
++ audio_buf_t *b;
++ pxa_dma_desc *final_desc;
++ u_long dcmd_save = 0;
++ DECLARE_WAITQUEUE(wait, current);
++
++ if (!(file->f_mode & FMODE_WRITE) || !s->buffers || s->mapped)
++ return 0;
++
++ /*
++ * Send current buffer if it contains data. Be sure to send
++ * a full sample count.
++ */
++ final_desc = NULL;
++ b = &s->buffers[s->usr_frag];
++ if (b->offset &= ~3) {
++ final_desc = &b->dma_desc[1 + b->offset/MAX_DMA_SIZE];
++ b->offset &= (MAX_DMA_SIZE-1);
++ dcmd_save = final_desc->dcmd;
++ final_desc->dcmd = b->offset | s->dcmd | DCMD_ENDIRQEN;
++ final_desc->ddadr |= DDADR_STOP;
++ b->offset = 0;
++ b->dma_desc->ddadr &= ~DDADR_STOP;
++
++#ifdef DMA_NO_INITIALIZED
++ if ((DCSR(s->dma_ch) & DCSR_STOPSTATE)||!(DCSR(s->dma_ch) & DCSR_RUN)){
++ DDADR(s->dma_ch) = b->dma_desc->ddadr;
++ DCSR(s->dma_ch) = DCSR_RUN;
++ }
++#else
++ if (DCSR(s->dma_ch) & DCSR_STOPSTATE) {
++ DDADR(s->dma_ch) = b->dma_desc->ddadr;
++ DCSR(s->dma_ch) = DCSR_RUN;
++ }
++#endif /* DMA_NO_INITIALIZED */
++ }
++ /* Wait for DMA to complete. */
++ set_current_state(TASK_INTERRUPTIBLE);
++ add_wait_queue(&s->frag_wq, &wait);
++ while ((DCSR(s->dma_ch) & DCSR_RUN) && !signal_pending(current)) {
++ schedule();
++ set_current_state(TASK_INTERRUPTIBLE);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&s->frag_wq, &wait);
++
++ tosa_intmode = 0;
++
++ /* Restore the descriptor chain. */
++ if (final_desc) {
++ final_desc->dcmd = dcmd_save;
++ final_desc->ddadr &= ~DDADR_STOP;
++ b->dma_desc->ddadr |= DDADR_STOP;
++ }
++ return 0;
++}
++
++static unsigned int audio_poll(struct file *file,
++ struct poll_table_struct *wait)
++{
++ audio_state_t *state = file->private_data;
++ audio_stream_t *is = state->input_stream;
++ audio_stream_t *os = state->output_stream;
++ unsigned int mask = 0;
++
++ if (file->f_mode & FMODE_READ) {
++ /* Start audio input if not already active */
++ if (!is->buffers && audio_setup_buf(is))
++ return -ENOMEM;
++#ifdef DMA_NO_INITIALIZED
++ if ((DCSR(is->dma_ch) & DCSR_STOPSTATE)|| !(DCSR(is->dma_ch) & DCSR_RUN)){
++ DDADR(is->dma_ch) = is->buffers[is->dma_frag].dma_desc->ddadr;
++ DCSR(is->dma_ch) = DCSR_RUN;
++ }
++#else
++ if (DCSR(is->dma_ch) & DCSR_STOPSTATE) {
++ DDADR(is->dma_ch) = is->buffers[is->dma_frag].dma_desc->ddadr;
++ DCSR(is->dma_ch) = DCSR_RUN;
++ }
++#endif /* DMA_NO_INITIALIZED */
++ poll_wait(file, &is->frag_wq, wait);
++ }
++
++ if (file->f_mode & FMODE_WRITE) {
++ if (!os->buffers && audio_setup_buf(os))
++ return -ENOMEM;
++ poll_wait(file, &os->frag_wq, wait);
++ }
++
++ if (file->f_mode & FMODE_READ)
++ if (( is->mapped && is->bytecount > 0) ||
++ (!is->mapped && atomic_read(&is->sem.count) > 0))
++ mask |= POLLIN | POLLRDNORM;
++
++ if (file->f_mode & FMODE_WRITE)
++ if (( os->mapped && os->bytecount > 0) ||
++ (!os->mapped && atomic_read(&os->sem.count) > 0))
++ mask |= POLLOUT | POLLWRNORM;
++
++ return mask;
++}
++
++static int audio_ioctl(struct inode *inode, struct file *file,
++ unsigned int cmd, unsigned long arg)
++{
++ audio_state_t *state = file->private_data;
++ audio_stream_t *os = state->output_stream;
++ audio_stream_t *is = state->input_stream;
++ long val, fmt;
++ int data;
++
++ switch(cmd) {
++ case OSS_GETVERSION:
++ return put_user(SOUND_VERSION, (int *)arg);
++ case SNDCTL_DSP_GETBLKSIZE:
++ if ( file->f_mode & FMODE_WRITE )
++ return put_user(os->fragsize, (int *)arg);
++ else
++ return put_user(is->fragsize, (int *)arg);
++ case SNDCTL_DSP_GETCAPS:
++ val = DSP_CAP_REALTIME|DSP_CAP_TRIGGER|DSP_CAP_MMAP;
++ if (is && os)
++ val |= DSP_CAP_DUPLEX;
++ return put_user(val, (int *)arg);
++ case SNDCTL_DSP_SETFRAGMENT:
++ if ( get_user(val, (long *) arg) )
++ return -EFAULT;
++ if ( file->f_mode & FMODE_READ ) {
++ int ret = audio_set_fragments(is, val);
++ if (ret < 0) return ret;
++ if ( (ret = put_user(ret, (int *)arg)) )
++ return ret;
++ }
++ if ( file->f_mode & FMODE_WRITE ) {
++ int ret = audio_set_fragments(os, val);
++ if (ret < 0) return ret;
++ if ( (ret = put_user(ret, (int *)arg)) )
++ return ret;
++ }
++ return 0;
++ case SNDCTL_DSP_SYNC:
++ return audio_sync(file);
++ case SNDCTL_DSP_POST:
++ return 0;
++ case SNDCTL_DSP_GETTRIGGER:
++ val = 0;
++ if ( file->f_mode & FMODE_READ && DCSR(is->dma_ch) & DCSR_RUN )
++ val |= PCM_ENABLE_INPUT;
++ if ( file->f_mode & FMODE_WRITE && DCSR(os->dma_ch) & DCSR_RUN )
++ val |= PCM_ENABLE_OUTPUT;
++ return put_user(val, (int *)arg);
++ case SNDCTL_DSP_SETTRIGGER:
++ if ( get_user(val, (int *)arg) )
++ return -EFAULT;
++ if ( file->f_mode & FMODE_READ ) {
++ if ( val & PCM_ENABLE_INPUT ) {
++ if ( !is->buffers && audio_setup_buf(is) )
++ return -ENOMEM;
++ if ( !(DCSR(is->dma_ch) & DCSR_RUN) ) {
++ audio_buf_t *b = &is->buffers[is->dma_frag];
++ DDADR(is->dma_ch) = b->dma_desc->ddadr;
++ DCSR(is->dma_ch) = DCSR_RUN;
++ }
++ } else {
++ DCSR(is->dma_ch) = 0;
++ }
++ }
++ if ( file->f_mode & FMODE_WRITE ) {
++ if ( val & PCM_ENABLE_OUTPUT ) {
++ if ( !os->buffers && audio_setup_buf(os) )
++ return -ENOMEM;
++ if ( !(DCSR(os->dma_ch) & DCSR_RUN) ) {
++ audio_buf_t *b = &os->buffers[os->dma_frag];
++ DDADR(os->dma_ch) = b->dma_desc->ddadr;
++ DCSR(os->dma_ch) = DCSR_RUN;
++ }
++ } else {
++ DCSR(os->dma_ch) = 0;
++ }
++ }
++ return 0;
++ case SNDCTL_DSP_GETOSPACE:
++ {
++ audio_buf_info inf = { 0, };
++ audio_stream_t *s = os;
++ int j,k;
++ if ( (s == os && !(file->f_mode & FMODE_WRITE)) )
++ return -EINVAL;
++ if ( !s->buffers && audio_setup_buf(s) )
++ return -ENOMEM;
++ j = s->usr_frag;
++ k = s->dma_frag;
++ if ( atomic_read(&s->sem.count) > 0 ) {
++ if ( j > k ) {
++ inf.fragments = s->nbfrags - ( j - k );
++ } else if ( j < k ) {
++ inf.fragments = k - j;
++ } else {
++ inf.fragments = s->nbfrags;
++ }
++ }
++ inf.bytes = s->fragsize * inf.fragments;
++ inf.fragsize = s->fragsize;
++ inf.fragstotal = s->nbfrags;
++ return copy_to_user((void *)arg, &inf, sizeof(inf));
++ }
++ case SNDCTL_DSP_GETISPACE:
++ {
++ audio_buf_info inf = { 0, };
++ audio_stream_t *s = is;
++ int j,k;
++
++ if ( (s == is && !(file->f_mode & FMODE_READ)) )
++ return -EINVAL;
++ if (!s->buffers && audio_setup_buf(s))
++ return -ENOMEM;
++
++ j = s->usr_frag;
++ k = s->dma_frag;
++ if ( atomic_read(&s->sem.count) <= 0 ) {
++ inf.fragments = 0;
++ } else {
++ inf.fragments = atomic_read(&s->sem.count);
++ }
++ inf.bytes = s->fragsize * inf.fragments;
++ inf.fragsize = s->fragsize;
++ inf.fragstotal = s->nbfrags;
++ return copy_to_user((void *)arg, &inf, sizeof(inf));
++ }
++ case SNDCTL_DSP_GETOPTR:
++ case SNDCTL_DSP_GETIPTR:
++ {
++ count_info inf = { 0, };
++ audio_stream_t *s = (cmd == SNDCTL_DSP_GETOPTR) ? os : is;
++ dma_addr_t ptr;
++ int bytecount, offset, flags;
++ if ( (s == is && !(file->f_mode & FMODE_READ)) ||
++ (s == os && !(file->f_mode & FMODE_WRITE)) )
++ return -EINVAL;
++ if ( DCSR(s->dma_ch) & DCSR_RUN ) {
++ audio_buf_t *b;
++ save_flags_cli(flags);
++ ptr = (s->output) ? DSADR(s->dma_ch) : DTADR(s->dma_ch);
++ b = &s->buffers[s->dma_frag];
++ offset = ptr - b->dma_desc->dsadr;
++ if ( offset >= s->fragsize )
++ offset = s->fragsize - 4;
++ } else {
++ save_flags(flags);
++ offset = 0;
++ }
++ inf.ptr = s->dma_frag * s->fragsize + offset;
++ bytecount = s->bytecount + offset;
++ s->bytecount = -offset;
++ inf.blocks = s->fragcount;
++ s->fragcount = 0;
++ restore_flags(flags);
++ if ( bytecount < 0 )
++ bytecount = 0;
++ inf.bytes = bytecount;
++ return copy_to_user((void *)arg, &inf, sizeof(inf));
++ }
++ case SNDCTL_DSP_NONBLOCK:
++ file->f_flags |= O_NONBLOCK;
++ return 0;
++ case SNDCTL_DSP_RESET:
++ if ( file->f_mode & FMODE_WRITE )
++ pxa_audio_clear_buf(os);
++ if ( file->f_mode & FMODE_READ )
++ pxa_audio_clear_buf(is);
++ return 0;
++ case SNDCTL_DSP_SPEED:
++ audio_sync(file);
++ IOCTL_IN(arg, data);
++ return IOCTL_OUT(arg, (*sound.mach.setFreq)(data));
++ case SNDCTL_DSP_STEREO:
++ audio_sync(file);
++ IOCTL_IN(arg, data);
++ return IOCTL_OUT(arg, (*sound.mach.setStereo)(data));
++ case SOUND_PCM_WRITE_CHANNELS:
++ audio_sync(file);
++ IOCTL_IN(arg, data);
++ return IOCTL_OUT(arg, (*sound.mach.setStereo)(data-1)+1);
++ case SNDCTL_DSP_SETFMT:
++ audio_sync(file);
++ IOCTL_IN(arg, data);
++ return IOCTL_OUT(arg, (*sound.mach.setFormat)(data));
++ case SNDCTL_DSP_GETFMTS:
++ fmt = 0;
++ if (sound.trans) {
++ if (sound.trans->ct_ulaw)
++ fmt |= AFMT_MU_LAW;
++ if (sound.trans->ct_alaw)
++ fmt |= AFMT_A_LAW;
++ if (sound.trans->ct_s8)
++ fmt |= AFMT_S8;
++ if (sound.trans->ct_u8)
++ fmt |= AFMT_U8;
++ if (sound.trans->ct_s16be)
++ fmt |= AFMT_S16_BE;
++ if (sound.trans->ct_u16be)
++ fmt |= AFMT_U16_BE;
++ if (sound.trans->ct_s16le)
++ fmt |= AFMT_S16_LE;
++ if (sound.trans->ct_u16le)
++ fmt |= AFMT_U16_LE;
++ }
++ return IOCTL_OUT(arg, fmt);
++ default:
++ return mixer_ioctl(inode, file, cmd, arg);
++ }
++ return 0;
++}
++
++static int audio_mmap(struct file *file, struct vm_area_struct *vma)
++{
++ audio_state_t *state = file->private_data;
++ audio_stream_t *s;
++ unsigned long size, vma_addr;
++ int i, ret;
++
++ if (vma->vm_pgoff != 0)
++ return -EINVAL;
++
++ if (vma->vm_flags & VM_WRITE) {
++ if (!state->wr_ref)
++ return -EINVAL;;
++ s = state->output_stream;
++ } else if (vma->vm_flags & VM_READ) {
++ if (!state->rd_ref)
++ return -EINVAL;
++ s = state->input_stream;
++ } else return -EINVAL;
++
++ if (s->mapped)
++ return -EINVAL;
++ size = vma->vm_end - vma->vm_start;
++ if (size != s->fragsize * s->nbfrags)
++ return -EINVAL;
++ if (!s->buffers && audio_setup_buf(s))
++ return -ENOMEM;
++ vma_addr = vma->vm_start;
++ for (i = 0; i < s->nbfrags; i++) {
++ audio_buf_t *buf = &s->buffers[i];
++ if (!buf->master)
++ continue;
++ ret = remap_page_range(vma_addr, buf->dma_desc->dsadr,
++ buf->master, vma->vm_page_prot);
++ if (ret)
++ return ret;
++ vma_addr += buf->master;
++ }
++ for (i = 0; i < s->nbfrags; i++)
++ s->buffers[i].dma_desc->ddadr &= ~DDADR_STOP;
++ s->mapped = 1;
++ return 0;
++}
++
++static int audio_release(struct inode *inode, struct file *file)
++{
++ audio_state_t *state = file->private_data;
++ int err;
++
++ down(&state->sem);
++ if ( file->f_mode & FMODE_READ ) {
++ pxa_audio_clear_buf(state->input_stream);
++ *state->input_stream->drcmr = 0;
++ pxa_free_dma(state->input_stream->dma_ch);
++ state->rd_ref = 0;
++ }
++
++ if ( file->f_mode & FMODE_WRITE ) {
++ audio_sync(file);
++ pxa_audio_clear_buf(state->output_stream);
++ *state->output_stream->drcmr = 0;
++ pxa_free_dma(state->output_stream->dma_ch);
++ state->wr_ref = 0;
++ }
++
++ // Close wm9712
++ if( (err = wm9712_close()) ) {
++ DEBUG(DBG_L0, "Can not close wm9712\n");
++ return err;
++ }
++ sound.mode = 0;
++ up(&state->sem);
++ return 0;
++}
++
++static struct file_operations ac97_audio_fops = {
++ llseek: no_llseek,
++ write: audio_write,
++ read: audio_read,
++ poll: audio_poll,
++ ioctl: audio_ioctl,
++ open: audio_open,
++ release: audio_release,
++ mmap: audio_mmap,
++ owner: THIS_MODULE
++};
++
++static void tosa_intmode_mix(unsigned char *dest,int bUsed)
++#ifdef ALARM_NO_MALLOC
++{
++ int i;
++ short *cdata = (short *)dest;
++ int cnt = min(tosa_intmode, bUsed);
++ int idx;
++
++ for ( i = 0; i < (cnt/4); i++ ) {
++ idx = (tosa_intmode_cur>>8);
++ *cdata++ = int_data_org[idx*2];
++ *cdata++ = int_data_org[idx*2+1];
++ tosa_intmode_cur += tosa_intmode_step;
++ }
++
++ tosa_intmode -= cnt;
++ if ( tosa_intmode <= 0 ) {
++ tosa_intmode = 0;
++ int_data_org = NULL;
++ }
++}
++#else
++{
++ int i;
++ short *cdata = (short *)dest;
++ int cnt = min(tosa_intmode, bUsed);
++
++ for ( i = 0; i < (cnt/4); i++ ) {
++ *cdata = *int_data;
++ int_data++;
++ cdata++;
++ *cdata = *int_data;
++ int_data++;
++ cdata++;
++ }
++
++ tosa_intmode -= cnt;
++ if ( tosa_intmode <= 0 ) {
++ tosa_intmode = 0;
++ if ( int_data_org ) {
++ kfree(int_data_org);
++ int_data_org = NULL;
++ }
++ }
++}
++#endif /* ALARM_NO_MALLOC */
++
++/************************************************************
++ * Buzzer
++ ************************************************************/
++#ifdef CONFIG_BUZZER_TOSA
++
++#ifdef ALARM_NO_MALLOC
++int audio_buzzer_intmode(unsigned short *buffer,int count,int speed)
++{
++ int idx,i;
++ unsigned long snddata;
++ audio_state_t *state = &ac97_audio_state;
++ audio_stream_t *os = state->output_stream;
++ audio_stream_t *s = os;
++
++ int_data_org = buffer;
++ tosa_intmode = (count * sound.freq / speed)&(~3);
++ tosa_intmode_speed = speed;
++ tosa_intmode_cur = 0;
++ tosa_intmode_step = (speed << 8 ) / sound.freq; // fixed point (x256)
++ tosa_intmode_direct = 1;
++
++ // pause during play or recording , so kick this place.
++ if ( ((DCSR(s->dma_ch) & DCSR_STOPSTATE) && (state->wr_ref)) ||
++ ((!state->wr_ref ) && ( state->rd_ref)) ) {
++ for ( i = 0; i < (tosa_intmode/4) ; i++ ) {
++ idx = (tosa_intmode_cur>>8);
++ snddata = (buffer[idx*2]|(buffer[idx*2+1]<<16));
++ tosa_intmode_cur += tosa_intmode_step;
++ tosa_ac97_write(snddata);
++ }
++ tosa_intmode = 0;
++ int_data_org = NULL;
++ }
++ tosa_intmode_direct = 0;
++ return 1;
++}
++#else /* ALARM_NO_MALLOC */
++int audio_buzzer_intmode(unsigned short *buffer,int count,int speed)
++{
++ int samplingCount = count * sound.hw_freq / speed;
++ int idx,i ;
++ int cur=0,step = (speed << 8 ) / sound.hw_freq; // fixed point (x256)
++ unsigned short *dstct;
++
++ int_data = (unsigned short *)kmalloc(count * 6,GFP_KERNEL);
++ if ( !int_data ) return 0;
++ int_data_org = int_data;
++
++ samplingCount &= ~0x3;
++
++ dstct = int_data;
++ for( i = 0; i < (samplingCount/4); i++ ) {
++ idx = (cur>>8);
++ *dstct++ = buffer[idx*2];
++ *dstct++ = buffer[idx*2+1];
++ cur += step;
++ }
++
++ tosa_intmode = samplingCount;
++ tosa_intmode_speed = speed;
++ tosa_intmode_direct = 1;
++
++ {
++ audio_state_t *state = &ac97_audio_state;
++ audio_stream_t *os = state->output_stream;
++ audio_stream_t *s = os;
++
++ // pause during play or recording , so kick this place.
++ if ( ((DCSR(s->dma_ch) & DCSR_STOPSTATE) && (state->wr_ref)) ||
++ ((!state->wr_ref) && (state->rd_ref)) ) {
++ int i;
++ for ( i = 0; i < (tosa_intmode/4); i++ ) {
++ tosa_ac97_write(*(unsigned long *)int_data);
++ int_data++;
++ int_data++;
++ }
++ tosa_intmode = 0;
++ kfree(int_data_org);
++ int_data_org = NULL;
++ }
++ }
++
++ tosa_intmode_direct = 0;
++ return 1;
++}
++#endif /* ALARM_NO_MALLOC */
++
++int audio_buzzer_write(const char *buffer,int count)
++{
++ const char *buffer0 = buffer;
++ audio_state_t *state = &ac97_audio_state;
++ audio_stream_t *s = state->output_stream;
++ int chunksize, ret = 0;
++
++
++ if (!s->buffers && audio_setup_buf(s))
++ return -ENOMEM;
++
++ while ( count > 0 ) {
++ audio_buf_t *b = &s->buffers[s->usr_frag];
++
++#ifdef BUZZER_FORCE_CLOSE
++ if( buzzer_close ) break;
++#endif
++
++ chunksize = s->fragsize - b->offset;
++ if ( chunksize > count )
++ chunksize = count;
++ memcpy(b->data + b->offset, buffer, chunksize);
++
++ b->offset += chunksize;
++ buffer += chunksize;
++ count -= chunksize;
++
++ if ( b->offset < s->fragsize ) {
++ up(&s->sem);
++ break;
++ }
++
++ b->offset = 0;
++ b->dma_desc->ddadr &= ~DDADR_STOP;
++#ifdef DMA_NO_INITIALIZED
++ if ( (DCSR(s->dma_ch) & DCSR_STOPSTATE )|| !(DCSR(s->dma_ch) & DCSR_RUN) ){
++ DDADR(s->dma_ch) = b->dma_desc->ddadr;
++ DCSR(s->dma_ch) = DCSR_RUN;
++ }
++#else
++ if ( DCSR(s->dma_ch) & DCSR_STOPSTATE ) {
++ DDADR(s->dma_ch) = b->dma_desc->ddadr;
++ DCSR(s->dma_ch) = DCSR_RUN;
++ }
++#endif
++
++ /* move the index to the next fragment */
++ if ( ++s->usr_frag >= s->nbfrags )
++ s->usr_frag = 0;
++ }
++
++ if ( buffer - buffer0 )
++ ret = buffer - buffer0;
++
++ return ret;
++}
++
++void audio_buzzer_sync(void)
++{
++ audio_state_t *state = &ac97_audio_state;
++ audio_stream_t *s = state->output_stream;
++ audio_buf_t *b;
++ pxa_dma_desc *final_desc;
++ u_long dcmd_save = 0;
++ DECLARE_WAITQUEUE(wait, current);
++
++#ifdef BUZZER_FORCE_CLOSE
++ if( buzzer_close ) goto sync_end;
++#endif
++
++ //audio_sync(file);
++
++ /*
++ * Send current buffer if it contains data. Be sure to send
++ * a full sample count.
++ */
++ final_desc = NULL;
++ b = &s->buffers[s->usr_frag];
++ if ( b->offset &= ~3 ) {
++ final_desc = &b->dma_desc[1 + b->offset/MAX_DMA_SIZE];
++ b->offset &= (MAX_DMA_SIZE-1);
++ dcmd_save = final_desc->dcmd;
++ final_desc->dcmd = b->offset | s->dcmd | DCMD_ENDIRQEN;
++ final_desc->ddadr |= DDADR_STOP;
++ b->offset = 0;
++ b->dma_desc->ddadr &= ~DDADR_STOP;
++#ifdef DMA_NO_INITIALIZED
++ if ( (DCSR(s->dma_ch) & DCSR_STOPSTATE) || !(DCSR(s->dma_ch) & DCSR_RUN) ) {
++ DDADR(s->dma_ch) = b->dma_desc->ddadr;
++ DCSR(s->dma_ch) = DCSR_RUN;
++ }
++#else
++ if ( DCSR(s->dma_ch) & DCSR_STOPSTATE ) {
++ DDADR(s->dma_ch) = b->dma_desc->ddadr;
++ DCSR(s->dma_ch) = DCSR_RUN;
++ }
++#endif
++ }
++
++#ifdef BUZZER_FORCE_CLOSE
++sync_end:;
++#endif
++
++ /* Wait for DMA to complete. */
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ add_wait_queue(&s->frag_wq, &wait);
++ while ( (DCSR(s->dma_ch) & DCSR_RUN) && !signal_pending(current) ) {
++ schedule();
++ set_current_state(TASK_INTERRUPTIBLE);
++ }
++
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&s->frag_wq, &wait);
++}
++
++int audio_buzzer_release(void)
++{
++ audio_state_t *state = &ac97_audio_state;
++ audio_stream_t *s = state->output_stream;
++ int err, ret = 0;
++ DECLARE_WAITQUEUE(wait, current);
++
++
++ //audio_sync(file);
++ /* Wait for DMA to complete. */
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ add_wait_queue(&s->frag_wq, &wait);
++ while ( (DCSR(s->dma_ch) & DCSR_RUN) && !signal_pending(current) ) {
++ schedule();
++ set_current_state(TASK_INTERRUPTIBLE);
++ }
++
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&s->frag_wq, &wait);
++
++ audio_clear_buf(state->output_stream);
++ *state->output_stream->drcmr = 0;
++ pxa_free_dma(state->output_stream->dma_ch);
++ state->wr_ref = 0;
++
++#ifdef ALARM_NO_MALLOC
++ // wait playing int sound.
++#ifdef BUZZER_FORCE_CLOSE
++ while ( tosa_intmode_direct && !buzzer_close )
++ schedule();
++#else
++ while ( tosa_intmode_direct )
++ schedule();
++#endif /* BUZZER_FORCE_CLOSE */
++
++ tosa_intmode = 0;
++ int_data_org = NULL;
++#else
++ if ( int_data_org ) {
++ kfree(int_data_org);
++ int_data_org = NULL;
++ }
++#endif /* ALARM_NO_MALLOC */
++ if( (err = wm9712_close()) < 0 ) {
++ DEBUG(DBG_L0, "Can not close wm9712\n");
++ ret = err;
++ }
++ state->wr_ref = 0;
++#ifdef BUZZER_FORCE_CLOSE
++ buzzer_open = 0;
++#endif /* BUZZER_FORCE_CLOSE */
++ return 0;
++}
++
++int audio_buzzer_open(int speed)
++{
++ audio_state_t *state = &ac97_audio_state;
++ audio_stream_t *os = state->output_stream;
++ SOUND_SETTINGS settings;
++ int err;
++
++ err = -EBUSY;
++ if ( state->wr_ref || state->rd_ref )
++ goto out;
++
++ state->wr_ref = 1;
++
++#ifdef BUZZER_FORCE_CLOSE
++ buzzer_open = 1;
++#endif /* BUZZER_FORCE_CLOSE */
++
++ /* request DMA channels */
++ if ( (err = pxa_request_dma(os->name, DMA_PRIO_LOW, audio_dma_irq, os)) < 0 )
++ goto error;
++ os->dma_ch = err;
++
++ os->fragsize = AUDIO_FRAGSIZE_DEFAULT;
++ os->nbfrags = AUDIO_NBFRAGS_DEFAULT;
++ os->output = 1;
++ os->mapped = 0;
++ init_waitqueue_head(&os->frag_wq);
++ init_waitqueue_head(&os->stop_wq);
++ *os->drcmr = os->dma_ch | DRCMR_MAPVLD;
++
++ sound.mode = SOUND_PLAY_MODE;
++ settings.mode = sound.mode;
++ settings.output.left = sound.volume_left;
++ settings.output.right = sound.volume_right;
++ settings.input.left = sound.gain_left;
++ settings.input.right = sound.gain_right;
++ settings.frequency = speed;
++
++ if( (err = wm9712_open(&settings)) < 0 ) {
++ DEBUG(DBG_L0, "Can not open wm9712\n");
++ goto error;
++ }
++
++ sound.freq = speed;
++
++ err = 0;
++out:
++#ifdef BUZZER_FORCE_CLOSE
++ if( buzzer_close ){
++ err = -EBUSY;
++ goto error;
++ }
++#endif
++ return err;
++
++error:
++ *os->drcmr = 0;
++ pxa_free_dma(os->dma_ch);
++ state->wr_ref = 0;
++ return err;
++}
++#endif /* CONFIG_BUZZER_TOSA */
++
++/************************************************************
++ * /dev/sndstat
++ * Audio Stat stuff
++ ************************************************************/
++static int state_open(struct inode *inode, struct file *file)
++{
++ char *buffer = tosa_sound_state.buf;
++ int len = 0;
++
++ if ( tosa_sound_state.busy ) return -EBUSY;
++
++ MOD_INC_USE_COUNT;
++ tosa_sound_state.ptr = 0;
++ tosa_sound_state.busy = 1;
++
++ len += sprintf(buffer+len, " TOSA AC97 sound driver:\n");
++ len += sprintf(buffer+len, "\tsound.speed = %dHz\n", sound.freq);
++ len += sprintf(buffer+len, "\tsound.stereo = 0x%x (%s)\n",
++ sound.stereo, sound.stereo ? "stereo" : "mono");
++ tosa_sound_state.len = len;
++ return 0;
++}
++
++static int state_release(struct inode *inode, struct file *file)
++{
++ tosa_sound_state.busy = 0;
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++static ssize_t state_read(struct file *file, char *buf, size_t count,
++ loff_t *ppos)
++{
++ int n = tosa_sound_state.len - tosa_sound_state.ptr;
++ if ( n > count ) n = count;
++ if ( n <= 0 ) return 0;
++ if ( copy_to_user(buf, &tosa_sound_state.buf[tosa_sound_state.ptr], n) )
++ return -EFAULT;
++ tosa_sound_state.ptr += n;
++ return n;
++}
++
++static struct file_operations state_fops =
++{
++ llseek: no_llseek,
++ read: state_read,
++ open: state_open,
++ release: state_release,
++};
++
++static void state_init(void)
++{
++ tosa_sound_state.dev_state =
++ register_sound_special(&state_fops, SND_DEV_STATUS);
++ if ( tosa_sound_state.dev_state < 0 ) return;
++ tosa_sound_state.busy = 0;
++}
++
++/************************************************************
++ * /dev/mixer
++ * Audio Mixer stuff
++ ************************************************************/
++static int mixer_ioctl( struct inode *inode, struct file *file,
++ unsigned int cmd, unsigned long arg)
++{
++ int data;
++
++ switch (cmd) {
++ case SOUND_MIXER_READ_DEVMASK:
++ return IOCTL_OUT(arg, (SOUND_MASK_VOLUME|SOUND_MASK_MIC) );
++ case SOUND_MIXER_READ_RECMASK:
++ return IOCTL_OUT(arg, 0);
++ case SOUND_MIXER_READ_STEREODEVS:
++ return IOCTL_OUT(arg, SOUND_MASK_VOLUME);
++ case SOUND_MIXER_READ_CAPS:
++ return IOCTL_OUT(arg, 0);
++ case SOUND_MIXER_WRITE_VOLUME:
++ IOCTL_IN(arg, data);
++ (*sound.mach.setVolume)(data);
++ case SOUND_MIXER_READ_VOLUME:
++ return IOCTL_OUT(arg, (*sound.mach.getVolume)());
++ case SOUND_MIXER_READ_TREBLE:
++ return IOCTL_OUT(arg, 0);
++ case SOUND_MIXER_WRITE_TREBLE:
++ return IOCTL_OUT(arg, 0);
++ case SOUND_MIXER_READ_SPEAKER:
++ return IOCTL_OUT(arg, 0);
++ case SOUND_MIXER_WRITE_SPEAKER:
++ return IOCTL_OUT(arg, 0);
++ case SOUND_MIXER_WRITE_MIC:
++ IOCTL_IN(arg, data);
++ (*sound.mach.setGain)(data);
++ case SOUND_MIXER_READ_MIC:
++ return IOCTL_OUT(arg, (*sound.mach.getGain)());
++ case SOUND_MIXER_AGC:
++ IOCTL_IN(arg, data);
++ return IOCTL_OUT(arg, wm9712_set_agc(data));
++ }
++ return -EINVAL;
++}
++
++static int mixer_open(struct inode *inode, struct file *file)
++{
++ if ( codec->mixer_busy ) return -EBUSY;
++ MOD_INC_USE_COUNT;
++ codec->mixer_busy = 1;
++ return 0;
++}
++
++static int mixer_release(struct inode *inode, struct file *file)
++{
++ codec->mixer_busy = 0;
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++static struct file_operations mixer_fops = {
++ ioctl: mixer_ioctl,
++ llseek: no_llseek,
++ open: mixer_open,
++ release: mixer_release,
++ owner: THIS_MODULE
++};
++
++static void mixer_init(void)
++{
++ codec->dev_mixer = register_sound_mixer(&mixer_fops, -1);
++ if ( codec->dev_mixer < 0 ) return;
++ codec->mixer_busy = 0;
++}
++
++/************************************************************
++ * /dev/dsp
++ * Audio stuff
++ ************************************************************/
++static void sq_init(void)
++{
++ /* Regist /dev/dsp. */
++ ac97_audio_state.dev_dsp = register_sound_dsp(&ac97_audio_fops, -1);
++ if( ac97_audio_state.dev_dsp < 0 ) return;
++
++ ac97_audio_state.wr_ref = 0;
++ ac97_audio_state.rd_ref = 0;
++
++ /* Set default settings */
++ sound.format = AFMT_S16_LE;
++ sound.stereo = 1;
++ sound.freq = 48000;
++ sound.size = 16;
++ sound.trans = &trans_tosa;
++ sound.trans_read = &trans_r_tosa;
++ sound.volume_left = 80;
++ sound.volume_right = 80;
++ sound.gain_left = 40;
++ sound.gain_right = 40;
++
++ /* Change Format */
++ (*sound.mach.setFormat)(sound.format);
++}
++
++static int __init pxa_ac97_init(void)
++{
++ sound.mach = mach_tosa;
++
++ if( (*sound.mach.init)() < 0 ) {
++ wm9712_exit();
++ return -EBUSY;
++ }
++ /* Set default settings. */
++ sq_init();
++ /* Set up /dev/sndstat. */
++ state_init();
++ /* Set up /dev/mixer. */
++ mixer_init();
++#ifdef CONFIG_PM
++ pxa_sound_pm_dev = pm_register(PM_SYS_DEV, 0, tosa_pm_callback);
++#endif /* CONFIG_PM */
++
++ printk(KERN_INFO "Tosa AC97 initialize\n");
++
++ return 0;
++}
++
++static void __exit pxa_ac97_exit(void)
++{
++ if ( ac97_audio_state.dev_dsp >= 0 )
++ unregister_sound_dsp(ac97_audio_state.dev_dsp);
++ unregister_sound_mixer(codec->dev_mixer);
++ if ( tosa_sound_state.dev_state >= 0 )
++ unregister_sound_special(tosa_sound_state.dev_state);
++ wm9712_exit();
++}
++
++
++module_init(pxa_ac97_init);
++module_exit(pxa_ac97_exit);
++
++#ifdef CONFIG_PM
++/************************************************************
++ * Power Management
++ ************************************************************/
++static int tosa_pm_callback(struct pm_dev *pm_dev,pm_request_t req, void *data)
++{
++ int err;
++ switch (req) {
++ case PM_SUSPEND:
++ DEBUG(DBG_L1, "PM_SUSPEND: start\n");
++ wm9712_suspend();
++#ifdef CONFIG_TOSA_TS
++ tosa_ts_suspend();
++#endif /* CONFIG_TOSA_TS */
++ if ( ac97_audio_state.rd_ref != 0 ) {
++ audio_clear_buf(ac97_audio_state.input_stream);
++ *ac97_audio_state.input_stream->drcmr = 0;
++ pxa_free_dma(ac97_audio_state.input_stream->dma_ch);
++ }
++
++ if ( ac97_audio_state.wr_ref != 0 ) {
++ audio_clear_buf(ac97_audio_state.output_stream);
++ *ac97_audio_state.output_stream->drcmr = 0;
++ pxa_free_dma(ac97_audio_state.output_stream->dma_ch);
++ }
++ DEBUG(DBG_L1, "PM_SUSPEND: done\n");
++ break;
++ case PM_RESUME:
++ DEBUG(DBG_L1, "PM_RESUME: start\n");
++ /* request DMA channels */
++ if ( ac97_audio_state.wr_ref != 0 ) {
++ init_waitqueue_head(&ac97_audio_state.output_stream->frag_wq);
++ init_waitqueue_head(&ac97_audio_state.output_stream->stop_wq);
++ *ac97_audio_state.output_stream->drcmr =
++ ac97_audio_state.output_stream->dma_ch | DRCMR_MAPVLD;
++ err = pxa_request_dma(ac97_audio_state.output_stream->name, DMA_PRIO_LOW,
++ audio_dma_irq, ac97_audio_state.output_stream);
++ if ( err < 0 ) {
++ DEBUG(DBG_L0, "Can not get DMA\n");
++ }
++ ac97_audio_state.output_stream->dma_ch = err;
++ }
++ if ( ac97_audio_state.rd_ref != 0 ) {
++ init_waitqueue_head(&ac97_audio_state.input_stream->frag_wq);
++ init_waitqueue_head(&ac97_audio_state.input_stream->stop_wq);
++ *ac97_audio_state.input_stream->drcmr =
++ ac97_audio_state.input_stream->dma_ch | DRCMR_MAPVLD;
++ err = pxa_request_dma(ac97_audio_state.input_stream->name, DMA_PRIO_LOW,
++ audio_dma_irq, ac97_audio_state.input_stream);
++ if ( err < 0 ) {
++ DEBUG(DBG_L0, "Can not get DMA\n");
++ }
++ ac97_audio_state.input_stream->dma_ch = err;
++ }
++ wm9712_resume();
++#ifdef CONFIG_TOSA_TS
++ tosa_ts_resume();
++#endif /* CONFIG_TOSA_TS */
++ DEBUG(DBG_L1, "PM_RESUME: done\n");
++ break;
++ }
++ return 0;
++}
++#endif /* CONFIG_PM */
+diff -Nur linux_c860_org/drivers/sound/pxa-audio.c linux/drivers/sound/pxa-audio.c
+--- linux_c860_org/drivers/sound/pxa-audio.c 2002-08-26 15:00:56.000000000 +0900
++++ linux/drivers/sound/pxa-audio.c 2004-06-10 21:09:10.000000000 +0900
+@@ -8,6 +8,9 @@
+ * 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.
++ *
++ * ChangeLog:
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+ #include <linux/init.h>
+@@ -78,7 +81,11 @@
+ * This function allocates the DMA descriptor array and buffer data space
+ * according to the current number of fragments and fragment size.
+ */
++#ifdef CONFIG_ARCH_PXA_TOSA
++int audio_setup_buf(audio_stream_t * s)
++#else
+ static int audio_setup_buf(audio_stream_t * s)
++#endif /* CONFIG_ARCH_PXA_TOSA */
+ {
+ pxa_dma_desc *dma_desc;
+ dma_addr_t dma_desc_phys;
+@@ -258,7 +265,11 @@
+ /*
+ * Validate and sets up buffer fragments, etc.
+ */
++#ifdef CONFIG_ARCH_PXA_TOSA
++int audio_set_fragments(audio_stream_t *s, int val)
++#else
+ static int audio_set_fragments(audio_stream_t *s, int val)
++#endif /* CONFIG_ARCH_PXA_TOSA */
+ {
+ if (s->mapped || DCSR(s->dma_ch) & DCSR_RUN)
+ return -EBUSY;
+@@ -428,7 +439,11 @@
+ }
+
+
++#ifdef CONFIG_ARCH_PXA_TOSA
++int audio_sync(struct file *file)
++#else
+ static int audio_sync(struct file *file)
++#endif /* CONFIG_ARCH_PXA_TOSA */
+ {
+ audio_state_t *state = file->private_data;
+ audio_stream_t *s = state->output_stream;
+@@ -810,12 +825,16 @@
+ }
+
+ file->private_data = state;
++#ifndef CONFIG_ARCH_PXA_TOSA
+ file->f_op->release = audio_release;
++#endif /* CONFIG_ARCH_PXA_TOSA */
+ file->f_op->write = audio_write;
+ file->f_op->read = audio_read;
+ file->f_op->mmap = audio_mmap;
+ file->f_op->poll = audio_poll;
++#ifndef CONFIG_ARCH_PXA_TOSA
+ file->f_op->ioctl = audio_ioctl;
++#endif /* CONFIG_ARCH_PXA_TOSA */
+ file->f_op->llseek = no_llseek;
+
+ if ((file->f_mode & FMODE_WRITE)) {
+@@ -849,3 +868,8 @@
+ EXPORT_SYMBOL(pxa_audio_attach);
+ EXPORT_SYMBOL(pxa_audio_clear_buf);
+
++#ifdef CONFIG_ARCH_PXA_TOSA
++EXPORT_SYMBOL(audio_set_fragments);
++EXPORT_SYMBOL(audio_sync);
++EXPORT_SYMBOL(audio_setup_buf);
++#endif
+diff -Nur linux_c860_org/drivers/sound/sound_core.c linux/drivers/sound/sound_core.c
+--- linux_c860_org/drivers/sound/sound_core.c 2002-08-26 14:38:55.000000000 +0900
++++ linux/drivers/sound/sound_core.c 2004-06-10 21:09:10.000000000 +0900
+@@ -37,6 +37,7 @@
+ #include <linux/config.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
++#include <linux/sched.h>
+ #include <linux/slab.h>
+ #include <linux/types.h>
+ #include <linux/kernel.h>
+diff -Nur linux_c860_org/drivers/sound/tosa_wm9712.c linux/drivers/sound/tosa_wm9712.c
+--- linux_c860_org/drivers/sound/tosa_wm9712.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/sound/tosa_wm9712.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,861 @@
++/*
++ * linux/drivers/sound/tosa_wm9712.c
++ *
++ * wm9712 ctrl funstions for PXA (SHARP)
++ *
++ * (C) Copyright 2004 Lineo Solutions, Inc.
++ *
++ * Based on:
++ * linux/drivers/sound/poodle_wm8731.c
++ * wm8731 ctrl funstions for PXA (SHARP)
++ * Copyright (C) 2002 SHARP
++ *
++ * 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 <linux/sched.h>
++#include <linux/timer.h>
++#include <linux/poll.h>
++#include <linux/delay.h>
++#include <linux/config.h>
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/ac97_codec.h>
++#include <asm/arch/hardware.h>
++#include <asm/arch/irqs.h>
++
++#ifdef CONFIG_PM
++#include <asm/sharp_apm.h>
++#endif /* CONFIG_PM */
++
++#include <asm/arch/tosa_wm9712.h>
++
++/************************************************************
++ * Debug
++ ************************************************************/
++#define DBG_LEVEL 0
++
++#define DBG_L0 0
++#define DBG_L1 1
++#define DBG_L2 2
++#define DBG_L3 3
++
++#ifdef DBG_LEVEL
++#define DEBUG(level, x, args...) \
++ if ( level <= DBG_LEVEL ) printk("%s: " x,__FUNCTION__ ,##args)
++#else
++#define DEBUG(level, x, args...) \
++ if ( !level ) printk("%s: " x,__FUNCTION__ ,##args)
++#endif /* DBG_LEVEL */
++
++//X#define DISABLE_JACKCHECK_PLAYING
++//X#define USE_HARDWARE_LMIX
++
++/*** Some valiables **************************************************/
++typedef struct {
++ unsigned char used; //used: open(1) close(0)
++ unsigned char jack; //Jack: in(1) out(0)
++ unsigned char mic; // Mic headPhone(1) no mic(0)
++ unsigned char last_jack_state; // jack state
++ unsigned char open_play;
++ unsigned char open_rec;
++ unsigned short mode; //Sound mode
++ int out_left; //Volume out left
++ int out_right; //Volume out right
++ int in_left; //Volume in left
++ int in_right; //Volume in right
++ int rate; //Sampling rate
++ int agc; //Agc: on(1) off(0)
++ int vol0;
++#ifdef DISABLE_JACKCHECK_PLAYING
++ int need_after_check; // check jack after playing
++#endif
++#ifdef CONFIG_PM
++ int suspend; //Suspend: on(1) off(0)
++#endif /* CONFIG_PM */
++} wm9712_stat_t;
++
++static wm9712_stat_t wm9712_stat;
++static unsigned char ac97_on = 0;
++int wm9712_mono_out = 0; // mix output data into mono
++//static spinlock_t ear_in_lock = SPIN_LOCK_UNLOCKED;
++//static struct tq_struct wm9712_queue;
++static struct timer_list hp_wakeup_timer;
++#define HP_WAKEUP_DELAY (HZ*3)
++
++static int wm9712_setup(SOUND_SETTINGS *);
++static void wm9712_update_agc(int);
++
++#define MAKEJACKSTATE(jack,mic) ((jack)*2+(mic))
++#define INVALID_JACKSTATE -1
++#define DEV_OUTALL 0
++#define DEV_SP 1
++#define DEV_HP 2
++#define DEV_HPL 3
++#define DEV_MIC 4
++
++#define BIT_ZC (0x1<<7)
++#define BIT_INV (0x1<<6)
++#define VOLL_SHIFT 8
++#define VOLL_MASK (0x3f<<VOLL_SHIFT)
++#define VOLR_MASK (0x3f)
++#define VOLL_MUTE (0x2000)
++#define MASK_DACVOL (0x1f1f)
++#define LDACVOLSHIFT 8
++#define RDACVOLSHIFT 0
++#define BOOSTSHIFT 14
++#define MASK_BOOST (0x1<<BOOSTSHIFT)
++#define MASK_RECVOL (0x3f3f)
++#define RECVOLLSHIFT 8
++#define RECVOLRSHIFT 0
++#define DACVOL_MASK 0x1F1F
++
++#define RECSL_MASK 0x0707
++#define RECSL_BITS_MIC 0x0000
++#define RECSL_BITS_LINEIN 0x0304
++#define D2H_BIT (0x1<<15)
++#define D2S_BIT (0x1<<14)
++#define AC97_GPIO1 (0x1<<1)
++#define AC97_GPIO5 (0x1<<5)
++#define ALCM_MASK 0x0c00
++#define ALCM_MUTE 0x0c00
++#define ALCM_HP 0x0800
++#define ALC_MASK 0xc080
++#define ALC_ON 0x4080
++#define MS_MASK 0x0060
++#define MS_MIC2 0x0040
++#define MUTE_INPUT (0x1<<15)
++#define BIT_VRA (0x1<<0)
++
++#define DEFAULT_OUT_VOLUME (75)
++#define DEFAULT_IN_VOLUME (75)
++#define DEFAULT_RATE (8000)
++#define JACK_POLLING_WAIT (5)
++
++static DECLARE_WAIT_QUEUE_HEAD(hp_queue);
++static DECLARE_WAIT_QUEUE_HEAD(hp_proc);
++static int volume_table_initialized = FALSE;
++static unsigned short SpVolToReal[101];
++static unsigned short HpVolToReal[101];
++static unsigned short MicVolToReal[101];
++static unsigned short DacVolToReal[101];
++static unsigned short VolCnvTbl[38][2] __initdata = {
++ {8,31}, {8,31}, {8,30}, {8,29}, {8,28}, // 0 - 4
++ {8,27}, {8,26}, {8,25}, {8,24}, {8,23}, // 5 - 9
++ {8,22}, {8,21}, {8,20}, {8,19}, {8,18}, // 10 - 14
++ {8,17}, {8,16}, {8,15}, {8,14}, {8,13}, // 15 - 19
++ {8,12}, {8,11}, {8,10}, {8, 9}, {8, 8}, // 20 - 24
++ {8, 7}, {8, 6}, {8, 5}, {8, 4}, {8, 3}, // 25 - 29
++ {8, 2}, {8, 1}, {8, 0}, {7, 0}, {6, 0}, // 30 - 34
++ {5, 0}, {4, 0}, {3, 0}, }; // 35 - 37
++
++static unsigned short VolInitTbl[101] __initdata = {
++ 0, 1, 5, 9, 11, 13, 14, 15, 16, 17,
++ 18, 19, 19, 20, 21, 21, 22, 22, 23, 23,
++ 23, 24, 24, 25, 25, 25, 25, 26, 26, 26,
++ 27, 27, 27, 27, 28, 28, 28, 28, 28, 29,
++ 29, 29, 29, 29, 30, 30, 30, 30, 30, 30,
++ 31, 31, 31, 31, 31, 31, 31, 32, 32, 32,
++ 32, 32, 32, 32, 33, 33, 33, 33, 33, 33,
++ 33, 33, 33, 34, 34, 34, 34, 34, 34, 34,
++ 34, 34, 34, 35, 35, 35, 35, 35, 35, 35,
++ 35, 35, 35, 35, 36 ,36, 36, 36, 36, 36,
++ 37 };
++
++#ifdef CONFIG_PM
++#define ADEV_MAIN 0
++#define ADEV_HP 1
++#define ADEV_VOL 2
++#define ADEV_OFFON 3
++#define ADEV_INIT 4
++static int lockState = 0;
++static void audioLockFCS( int dev, int bLock )
++{
++ int curLockState = lockState;
++ int now,last;
++ if (bLock) {
++ curLockState |= 0x1<<dev;
++ } else {
++ curLockState &= ~(0x1<<dev);
++ }
++ if (curLockState!=lockState) {
++ now = (curLockState!=0)?TRUE:FALSE;
++ last = (lockState!=0)?TRUE:FALSE;
++ if ( now != last ) {
++ lock_FCS(LOCK_FCS_SOUND, (curLockState!=0)?TRUE:FALSE);
++ }
++ lockState = curLockState;
++ }
++}
++#endif // end CONFIG_PM
++
++/************************************************************
++ * Config & Setup
++ ************************************************************/
++int wm9712_busy(void)
++{
++ return wm9712_stat.used;
++}
++
++void wm9712_checkjack_sleep(void)
++{
++ interruptible_sleep_on(&hp_proc);
++}
++
++void wm9712_checkjack_wakeup(void)
++{
++ wake_up(&hp_proc);
++}
++
++static int check_hp_jack(void)
++{
++ unsigned short gpio_status;
++ int count = 0, err = 0;
++ int state;
++
++ gpio_status = ac97_read(AC97_GPIO_STATUS);
++ state = !(gpio_status & AC97_GPIO1); //Active L
++
++ while( !(count>10 || err>50) ) {
++ if (wm9712_stat.suspend) mdelay(JACK_POLLING_WAIT);
++ else interruptible_sleep_on_timeout((wait_queue_head_t*)&hp_queue, JACK_POLLING_WAIT ); // wait
++
++ gpio_status = ac97_read(AC97_GPIO_STATUS);
++ if (state == !(gpio_status & AC97_GPIO1)) {
++ count++;
++ } else {
++ err++;
++ state = !(gpio_status & AC97_GPIO1);
++ count=0;
++ }
++ }
++
++ if ( count > 10 ) {
++ wm9712_stat.jack = (state)?TRUE:FALSE;
++ } else { // error
++ wm9712_stat.jack = FALSE;
++ }
++ return wm9712_stat.jack;
++}
++
++static int check_hp_mic(void)
++{
++ unsigned short gpio_status;
++ int count = 0, err = 0;
++ volatile int state;
++ int LchMute;
++
++ if (!wm9712_stat.jack) {
++ wm9712_stat.mic = FALSE;
++ return FALSE;
++ }
++#ifdef DISABLE_JACKCHECK_PLAYING
++ if (wm9712_stat.open_play) { // cannot check mic while playing
++ wm9712_stat.need_after_check=TRUE;
++ return wm9712_stat.mic;
++ }
++ wm9712_stat.need_after_check=FALSE;
++#endif
++
++ wm9712_power_mode_tmp(WM9712_PWR_ENMICBIAS); // MICBIAS on
++ LchMute = !(TC6393_SYS_REG(TC6393_SYS_GPODSR1) & TC6393_L_MUTE);
++ if (!LchMute) TC6393_SYS_REG(TC6393_SYS_GPODSR1) &= ~TC6393_L_MUTE; // set L_Mute
++
++ gpio_status = ac97_read(AC97_GPIO_STATUS);
++ state = (gpio_status & AC97_GPIO5); //Active H
++
++ while( !(count>10 || err>50) ) {
++ if (wm9712_stat.suspend) mdelay(JACK_POLLING_WAIT);
++ else interruptible_sleep_on_timeout((wait_queue_head_t*)&hp_queue, JACK_POLLING_WAIT ); // wait
++
++ gpio_status = ac97_read(AC97_GPIO_STATUS);
++ if (state == (gpio_status & AC97_GPIO5)) {
++ count++;
++ } else {
++ err++;
++ state = (gpio_status & AC97_GPIO5);
++ count=0;
++ }
++ }
++
++ wm9712_power_mode_tmp(WM9712_PWR_OFF); // restore MICBIAS
++ if (!LchMute) TC6393_SYS_REG(TC6393_SYS_GPODSR1) |= TC6393_L_MUTE; // restore L_Mute
++
++ if ( count > 10 ) {
++ wm9712_stat.mic = (state)?TRUE:FALSE;
++ } else { // error
++ wm9712_stat.mic = FALSE;
++ }
++ return wm9712_stat.mic;
++}
++
++static void set_mute_registers( int dev, int mute )
++{
++ unsigned short val,val2;
++#ifdef USE_HARDWARE_LMIX
++ unsigned short val3;
++#endif
++
++ switch(dev) {
++ case DEV_MIC:
++ if (mute) {
++ ac97_bit_set(AC97_RECORD_GAIN, MUTE_INPUT);
++ } else {
++ ac97_bit_clear(AC97_RECORD_GAIN, MUTE_INPUT);
++ }
++ break;
++ case DEV_OUTALL:
++ set_mute_registers(DEV_SP,mute);
++ set_mute_registers(DEV_HP,mute);
++ break;
++ case DEV_SP: // speaker
++ val = ac97_read(AC97_MASTER_VOL_STEREO);
++ val2 = ac97_read(AC97_DAC_VOL);
++ if (mute || wm9712_stat.vol0) {
++ val |= AC97_MUTE;
++ val2 |= D2S_BIT;
++ } else {
++ val &= ~AC97_MUTE;
++ val2 &= ~D2S_BIT;
++ }
++ ac97_write(AC97_MASTER_VOL_STEREO,val);
++ ac97_write(AC97_DAC_VOL,val2);
++ break;
++ case DEV_HP: // headphone
++ val = ac97_read(AC97_HEADPHONE_VOL);
++ val2 = ac97_read(AC97_DAC_VOL);
++ if (mute || wm9712_stat.vol0) {
++ val |= AC97_MUTE;
++ val2 |= D2H_BIT;
++ } else {
++ val &= ~AC97_MUTE;
++ val2 &= ~D2H_BIT;
++ }
++ ac97_write(AC97_HEADPHONE_VOL,val);
++ ac97_write(AC97_DAC_VOL,val2);
++ break;
++ case DEV_HPL: // headphone Lch only
++ val = ac97_read(AC97_HEADPHONE_VOL);
++#ifdef USE_HARDWARE_LMIX
++ val2 = ac97_read(AC97_SIDETONE);
++ val3 = ac97_read(AC97_DAC_VOL);
++#endif
++ if (mute) {
++ wm9712_mono_out=1;
++ val |= VOLL_MUTE; // mute bit
++#ifdef USE_HARDWARE_LMIX
++ val2 &= ~ALCM_MASK; // SP Mix to Rch
++ val2 |= ALCM_HP;
++ val3 |= D2H_BIT;
++ val3 &= ~D2S_BIT;
++ if (!wm9712_stat.open_rec) set_mute_registers(DEV_MIC,FALSE);
++#endif
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) &= ~TC6393_L_MUTE; // Mute Lch
++ } else {
++ wm9712_mono_out=0;
++ val &= ~VOLL_MASK;
++ val |= (val&VOLR_MASK)<<VOLL_SHIFT;
++#ifdef USE_HARDWARE_LMIX
++ val2 &= ~ALCM_MASK; // mute SP Mix
++ val2 |= ALCM_MUTE;
++ val3 &= ~D2H_BIT;
++ val3 &= ~D2S_BIT;
++ if (!wm9712_stat.open_rec) set_mute_registers(DEV_MIC,TRUE);
++#endif
++ TC6393_SYS_REG(TC6393_SYS_GPODSR1) |= TC6393_L_MUTE; // Mute Lch off
++ }
++ ac97_write(AC97_HEADPHONE_VOL,val);
++#ifdef USE_HARDWARE_LMIX
++ ac97_write(AC97_SIDETONE,val2)
++ ac97_write(AC97_DAC_VOL,val3);
++#endif
++ break;
++ }
++}
++
++static void set_audio_registers( int jackmode )
++{
++ char play = wm9712_stat.open_play;
++ char rec = wm9712_stat.open_rec;
++ unsigned short val;
++
++ switch( jackmode ) {
++ case MAKEJACKSTATE(0,0): // Speaker (no HP)
++ case MAKEJACKSTATE(0,1):
++ // record from OnBoard Mic
++ val = ac97_read(AC97_RECORD_SELECT);
++ val &= ~RECSL_MASK;
++ val |= RECSL_BITS_MIC;
++ ac97_write(AC97_RECORD_SELECT,val);
++ // power down
++ wm9712_power_mode_audio((play)?WM9712_PWR_PLAY:WM9712_PWR_OFF);
++ wm9712_power_mode_audioin((rec)?WM9712_PWR_REC:WM9712_PWR_OFF);
++ // mute
++ set_mute_registers(DEV_HP,TRUE);
++ set_mute_registers(DEV_HPL,FALSE);
++ set_mute_registers(DEV_SP,FALSE);
++ break;
++ case MAKEJACKSTATE(1,0): // Stereo HP
++ // record from OnBoard Mic
++ val = ac97_read(AC97_RECORD_SELECT);
++ val &= ~RECSL_MASK;
++ val |= RECSL_BITS_MIC;
++ ac97_write(AC97_RECORD_SELECT,val);
++ // power down
++ wm9712_power_mode_audio((play)?WM9712_PWR_PLAY_HP:WM9712_PWR_OFF);
++ wm9712_power_mode_audioin((rec)?WM9712_PWR_REC_HP:WM9712_PWR_OFF);
++ // mute
++ set_mute_registers(DEV_SP,TRUE);
++ set_mute_registers(DEV_HPL,FALSE);
++ set_mute_registers(DEV_HP,FALSE);
++ break;
++ case MAKEJACKSTATE(1,1): // Mic HP
++ // record from HP Mic
++ val = ac97_read(AC97_RECORD_SELECT);
++ val &= ~RECSL_MASK;
++ val |= RECSL_BITS_LINEIN;
++ ac97_write(AC97_RECORD_SELECT,val);
++ // power down
++ wm9712_power_mode_audio((play)?WM9712_PWR_PLAY_MIC:WM9712_PWR_OFF);
++ wm9712_power_mode_audioin((rec)?WM9712_PWR_REC_MIC:WM9712_PWR_OFF);
++ // mute
++ set_mute_registers(DEV_SP,TRUE);
++ set_mute_registers(DEV_HPL,TRUE);
++ set_mute_registers(DEV_HP,FALSE);
++ break;
++ }
++}
++
++void wm9712_update_jack_state()
++{
++ int cur_jack_state;
++
++#ifdef CONFIG_PM
++ audioLockFCS( ADEV_HP, 1 );
++#endif
++ check_hp_jack();
++ check_hp_mic();
++ cur_jack_state = MAKEJACKSTATE(wm9712_stat.jack,wm9712_stat.mic);
++ if (wm9712_stat.last_jack_state == cur_jack_state) {
++#ifdef CONFIG_PM
++ audioLockFCS( ADEV_HP, 0 );
++#endif
++ return;
++ }
++
++ DEBUG(DBG_L0, "HP jack state changed (Jack=%d,Mic=%d)\r\n",wm9712_stat.jack,wm9712_stat.mic);
++
++ set_audio_registers(cur_jack_state);
++ wm9712_stat.last_jack_state = cur_jack_state;
++#ifdef CONFIG_PM
++ audioLockFCS( ADEV_HP, 0 );
++#endif
++}
++
++static void wm9712_ear_in_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++{
++ wm9712_checkjack_wakeup();
++}
++
++
++void wm9712_exit(void)
++{
++ set_mute_registers(DEV_OUTALL,TRUE);
++
++ free_irq(IRQ_GPIO_EAR_IN, NULL);
++
++ wm9712_power_mode_audio(WM9712_PWR_OFF);
++ wm9712_power_mode_audioin(WM9712_PWR_OFF);
++ wm9712_power_mode_tmp(WM9712_PWR_OFF);
++
++ pxa_ac97_put(&ac97_on);
++}
++
++
++int wm9712_init(void)
++{
++ unsigned short val;
++
++ printk("w9712_init\n");
++
++#ifdef CONFIG_PM
++ audioLockFCS( ADEV_INIT, 1 );
++#endif
++ if (!volume_table_initialized) {
++ int i;
++ // initialize status
++ memset(&wm9712_stat,0,sizeof(wm9712_stat));
++ wm9712_stat.out_left = DEFAULT_OUT_VOLUME;
++ wm9712_stat.out_right = DEFAULT_OUT_VOLUME;
++ wm9712_stat.in_left = DEFAULT_IN_VOLUME;
++ wm9712_stat.in_right = DEFAULT_IN_VOLUME;
++ wm9712_stat.rate = DEFAULT_RATE;
++
++ // set volume table
++ // volume '90' is 0dB, max volume is 7.5dB
++ for (i=0; i<=100; i++) {
++ SpVolToReal[i] = VolCnvTbl[VolInitTbl[i]][1];
++ HpVolToReal[i] = VolCnvTbl[VolInitTbl[i]][1];
++ DacVolToReal[i] = VolCnvTbl[VolInitTbl[i]][0];
++ MicVolToReal[i] = 0xf * i / 100;
++ }
++ volume_table_initialized=TRUE;
++ }
++ wm9712_stat.last_jack_state = INVALID_JACKSTATE;
++ pxa_ac97_get(&codec, &ac97_on);
++ wm9712_power_mode_audio(WM9712_PWR_OFF);
++ wm9712_power_mode_audioin(WM9712_PWR_OFF);
++ wm9712_power_mode_tmp(WM9712_PWR_OFF);
++
++
++ // set default values in wm9712 registers
++ // 0x02 MASTER_VOLUME ... ZC=1, INV=1
++ val = ac97_read(AC97_MASTER_VOL_STEREO);
++ val |= BIT_ZC|BIT_INV;
++ ac97_write(AC97_MASTER_VOL_STEREO,val);
++
++ // 0x04 HEADPHONE_VOLUME ... ZC=1
++ val = ac97_read(AC97_HEADPHONE_VOL);
++ val |= BIT_ZC;
++ ac97_write(AC97_HEADPHONE_VOL,val);
++
++ // 0x0E MIC VOLUME ... set MS
++ val = ac97_read(AC97_MIC_VOL);
++ val &= ~MS_MASK;
++ val |= MS_MIC2;
++ ac97_write(AC97_MIC_VOL,val);
++
++ // 0x1A RECORD_SELECT ... set BOOST
++ val = ac97_read(AC97_RECORD_SELECT);
++ val |= MASK_BOOST;
++ ac97_write(AC97_RECORD_SELECT,val);
++
++ // 0x1C RECORD_GAIN ... set ZC=1
++ val = ac97_read(AC97_RECORD_GAIN);
++ val |= BIT_ZC;
++ ac97_write(AC97_RECORD_GAIN,val);
++
++ // 0x2A AC97_EXTENDED_STATUS set VRA=1
++ val = ac97_read(AC97_EXTENDED_STATUS);
++ val |= BIT_VRA;
++ ac97_write(AC97_EXTENDED_STATUS,val);
++
++ // set default volume
++ wm9712_set_output_volume(wm9712_stat.out_left, wm9712_stat.out_right);
++ wm9712_set_input_gain(wm9712_stat.in_left, wm9712_stat.in_right);
++
++ // set default rate
++ ac97_set_dac_rate(codec, (unsigned int)wm9712_stat.rate);
++ ac97_set_adc_rate(codec, (unsigned int)wm9712_stat.rate);
++
++ wm9712_update_jack_state();
++ init_timer(&hp_wakeup_timer);
++ hp_wakeup_timer.function = wm9712_checkjack_wakeup;
++
++#ifdef CONFIG_PM
++ audioLockFCS( ADEV_INIT, 0 );
++#endif
++
++ set_GPIO_IRQ_edge(GPIO_HP_IN, GPIO_BOTH_EDGES);
++ if( request_irq(IRQ_GPIO_EAR_IN, wm9712_ear_in_interrupt, SA_INTERRUPT, "ear_in", NULL) ) {
++ DEBUG(DBG_L0, "IRQ error %d\n", IRQ_GPIO_EAR_IN);
++ return -EBUSY;
++ }
++
++ return 0;
++}
++
++/************************************************************
++ * Open & Close
++ ************************************************************/
++int wm9712_open(SOUND_SETTINGS *settings)
++{
++ DEBUG(DBG_L2, "wm9712 open\n");
++
++ if ( wm9712_stat.used ) {
++ DEBUG(DBG_L0, "wm9712 device is busy now !\n");
++ return -EBUSY;
++ }
++
++ wm9712_stat.used = TRUE;
++
++#ifdef CONFIG_PM
++ audioLockFCS( ADEV_MAIN, 1 );
++#endif /* CONFIG_PM */
++
++ if ( wm9712_setup(settings) < 0 ) {
++ wm9712_close();
++ wm9712_stat.used = FALSE;
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++int wm9712_close(void)
++{
++ DEBUG(DBG_L2 ,"wm9712 close\n");
++
++ // set_mute_registers(DEV_OUTALL,TRUE);
++ set_mute_registers(DEV_MIC,TRUE);
++
++ wm9712_stat.used = FALSE;
++ wm9712_stat.open_play = FALSE;
++ wm9712_stat.open_rec = FALSE;
++
++ wm9712_power_mode_audio(WM9712_PWR_OFF);
++ wm9712_power_mode_audioin(WM9712_PWR_OFF);
++ wm9712_power_mode_tmp(WM9712_PWR_OFF);
++
++#ifdef CONFIG_PM
++ audioLockFCS( ADEV_MAIN, 0 );
++#endif /* CONFIG_PM */
++
++#ifdef DISABLE_JACKCHECK_PLAYING
++ if (wm9712_stat.need_after_check) {
++ wm9712_checkjack_wakeup();
++ }
++#endif
++
++ return 0;
++}
++
++/************************************************************
++ * Setup
++ ************************************************************/
++static int wm9712_setup(SOUND_SETTINGS *setting)
++{
++ int ret = 0;
++
++ if( setting == NULL ) return -1;
++
++ if ( !wm9712_stat.used ) {
++ DEBUG(DBG_L0, "not opened !\n");
++ return -EINVAL;
++ }
++
++ wm9712_stat.mode = setting->mode & SOUND_MODE_MASK;
++ if (wm9712_stat.mode & SOUND_PLAY_MODE) {
++ DEBUG(DBG_L2, "Sound Play Setting\n");
++ // wm9712_set_output_volume(setting->output.left, setting->output.right);
++ wm9712_stat.open_play=TRUE;
++ }
++ if (wm9712_stat.mode & SOUND_REC_MODE) {
++ DEBUG(DBG_L2, "Sound Rec Mode\n");
++ set_mute_registers(DEV_MIC,FALSE);
++ // wm9712_set_input_gain(setting->input.left, setting->input.right);
++ wm9712_stat.open_rec=TRUE;
++ }
++ if (!wm9712_stat.open_play && !wm9712_stat.open_rec) {
++ DEBUG(DBG_L0, "Sound mode(%x) is not supported !\n", wm9712_stat.mode);
++ return -EINVAL;
++ }
++
++ set_audio_registers(wm9712_stat.last_jack_state);
++
++ if ( (ret = wm9712_set_freq(setting)) < 0 ) return ret;
++
++ return 0;
++}
++
++// for Freq.
++int wm9712_set_freq(SOUND_SETTINGS *setting)
++{
++ int ret = 0;
++ unsigned int actual_val;
++ wm9712_stat.rate = setting->frequency;
++ DEBUG(DBG_L2, "rate = %d\n", wm9712_stat.rate);
++
++ if ( !wm9712_stat.used ) {
++ DEBUG(DBG_L0, "not opened !\n");
++ return -EINVAL;
++ }
++ if ( wm9712_stat.rate < 8000 ) wm9712_stat.rate = 8000;
++ else if ( wm9712_stat.rate > 48000 ) wm9712_stat.rate = 48000;
++
++ if (wm9712_stat.open_play) {
++ actual_val = ac97_set_dac_rate(codec, (unsigned int)wm9712_stat.rate);
++ if ( actual_val != wm9712_stat.rate) {
++ DEBUG(DBG_L1,"Set DAC rate error: %d->%d\n",wm9712_stat.rate,actual_val);
++ }
++ }
++ if (wm9712_stat.open_rec) {
++ actual_val = ac97_set_adc_rate(codec, (unsigned int)wm9712_stat.rate);
++ if ( actual_val != wm9712_stat.rate) {
++ DEBUG(DBG_L1,"Set ADC rate error: %d->%d\n",wm9712_stat.rate,actual_val);
++ }
++ }
++
++ DEBUG(DBG_L2, "Sampling rate: %d\n", wm9712_stat.rate);
++
++ return ret;
++}
++
++
++/************************************************************
++ * Volume
++ ************************************************************/
++
++int wm9712_set_output_volume(int left, int right)
++{
++ unsigned short real_left_vol,real_right_vol,val;
++
++#ifdef CONFIG_PM
++ audioLockFCS( ADEV_VOL, 1 );
++#endif
++ // speaker volume
++ real_left_vol = SpVolToReal[left];
++ real_right_vol = SpVolToReal[right];
++
++ val = ac97_read(AC97_MASTER_VOL_STEREO);
++ val &= ~(VOLL_MASK|VOLR_MASK);
++ val |= (real_left_vol << VOLL_SHIFT) | real_right_vol;
++ ac97_write(AC97_MASTER_VOL_STEREO,val);
++
++ // head phone volume
++ real_left_vol = HpVolToReal[left];
++ real_right_vol = HpVolToReal[right];
++
++ val = ac97_read(AC97_HEADPHONE_VOL);
++ val &= ~(VOLL_MASK|VOLR_MASK);
++ if (wm9712_stat.mic) { // minimize Lch volume
++ val |= VOLL_MASK | real_right_vol;
++ } else {
++ val |= (real_left_vol << VOLL_SHIFT) | real_right_vol;
++ }
++ ac97_write(AC97_HEADPHONE_VOL,val);
++
++ // pcm volume
++ real_left_vol = DacVolToReal[left];
++ real_right_vol = DacVolToReal[right];
++
++ val = ac97_read(AC97_DAC_VOL);
++ val &= ~DACVOL_MASK;
++ val |= (real_left_vol << VOLL_SHIFT) | real_right_vol;
++ ac97_write(AC97_DAC_VOL,val);
++
++ wm9712_stat.out_left = left;
++ wm9712_stat.out_right = right;
++
++ // volume 0 means mute
++ if ( (left==0 && right==0) && wm9712_stat.vol0!=TRUE) {
++ wm9712_stat.vol0 = TRUE;
++ set_mute_registers(DEV_OUTALL,TRUE);
++ }
++ if ( (left>0 || right>0) && wm9712_stat.vol0==TRUE) {
++ wm9712_stat.vol0 = FALSE;
++ set_audio_registers(wm9712_stat.last_jack_state);
++ }
++
++#ifdef CONFIG_PM
++ audioLockFCS( ADEV_VOL, 0 );
++#endif
++ return 0;
++}
++
++int wm9712_set_input_gain(int left, int right)
++{
++ unsigned short real_left_vol,real_right_vol,val;
++
++#ifdef CONFIG_PM
++ audioLockFCS( ADEV_VOL, 1 );
++#endif
++
++ real_left_vol = MicVolToReal[left];
++ real_right_vol = MicVolToReal[left]; // Rch use left volume
++
++ val = ac97_read(AC97_RECORD_GAIN);
++ val &= ~(VOLL_MASK|VOLR_MASK);
++ val |= (real_left_vol << VOLL_SHIFT) | real_right_vol;
++ ac97_write(AC97_RECORD_GAIN,val);
++
++ wm9712_stat.in_left = left;
++ wm9712_stat.in_right = right;
++
++#ifdef CONFIG_PM
++ audioLockFCS( ADEV_VOL, 0 );
++#endif
++
++ return 0;
++}
++
++/*
++ * AGC
++ */
++static void wm9712_update_agc(int agc)
++{
++ unsigned short val;
++#ifdef CONFIG_PM
++ audioLockFCS( ADEV_VOL, 1 );
++#endif
++ if ( wm9712_stat.mode | SOUND_REC_MODE ) {
++ val = ac97_read(AC97_NOISE_CTL);
++ val &= ~ALC_MASK;
++ if (agc) val |= ALC_ON;
++ ac97_write(AC97_NOISE_CTL,val);
++ }
++#ifdef CONFIG_PM
++ audioLockFCS( ADEV_VOL, 0 );
++#endif
++
++}
++
++int wm9712_set_agc(int agc)
++{
++ if ( agc < 0 ) return wm9712_stat.agc;
++ agc = !!agc; /* should be 0 or 1 now */
++ if ( wm9712_stat.agc != agc ) {
++ wm9712_stat.agc = agc;
++ wm9712_update_agc(wm9712_stat.agc);
++ }
++ return agc;
++}
++
++/*** Suspend/Resume ***********************************************************/
++#ifdef CONFIG_PM
++void wm9712_suspend(void)
++{
++ DEBUG(DBG_L2, "in\n");
++#ifdef CONFIG_PM
++ audioLockFCS( ADEV_OFFON, 1 );
++#endif
++ wm9712_stat.suspend = 1;
++ wm9712_exit();
++#ifdef CONFIG_PM
++ audioLockFCS( ADEV_OFFON, 0 );
++#endif
++ DEBUG(DBG_L2, "out\n");
++}
++
++void wm9712_resume(void)
++{
++ DEBUG(DBG_L2, "in\n");
++#ifdef CONFIG_PM
++ audioLockFCS( ADEV_OFFON, 1 );
++#endif
++ wm9712_init();
++ if (wm9712_stat.open_play) {
++ ac97_set_dac_rate(codec, (unsigned int)wm9712_stat.rate);
++ }
++ if (wm9712_stat.open_rec) {
++ set_mute_registers(DEV_MIC,FALSE);
++ ac97_set_adc_rate(codec, (unsigned int)wm9712_stat.rate);
++ }
++ wm9712_stat.suspend = 0;
++ //X wm9712_checkjack_wakeup();
++ hp_wakeup_timer.expires = jiffies + HP_WAKEUP_DELAY;
++ add_timer(&hp_wakeup_timer);
++#ifdef CONFIG_PM
++ audioLockFCS( ADEV_OFFON, 0 );
++#endif
++ DEBUG(DBG_L2, "out\n");
++}
++#endif /* CONFIG_PM */
+diff -Nur linux_c860_org/drivers/usb/Config.in linux/drivers/usb/Config.in
+--- linux_c860_org/drivers/usb/Config.in 2002-08-29 12:26:42.000000000 +0900
++++ linux/drivers/usb/Config.in 2004-06-10 21:09:10.000000000 +0900
+@@ -36,6 +36,12 @@
+ fi
+ dep_tristate ' OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support' CONFIG_USB_OHCI $CONFIG_USB
+ dep_tristate ' SA1111 OHCI-compatible host interface support' CONFIG_USB_OHCI_SA1111 $CONFIG_USB
++dep_tristate ' TC6393 OHCI-compatible host interface support' CONFIG_USB_OHCI_TC6393 $CONFIG_USB
++if [ "$CONFIG_USB_OHCI_TC6393" != "n" ]; then
++ define_bool CONFIG_USB_USE_INTERNAL_MEMORY y
++else
++ define_bool CONFIG_USB_USE_INTERNAL_MEMORY n
++fi
+
+ comment 'USB Device Class drivers'
+ dep_tristate ' USB Audio support' CONFIG_USB_AUDIO $CONFIG_USB $CONFIG_SOUND
+diff -Nur linux_c860_org/drivers/usb/Makefile linux/drivers/usb/Makefile
+--- linux_c860_org/drivers/usb/Makefile 2002-08-29 12:26:42.000000000 +0900
++++ linux/drivers/usb/Makefile 2004-06-10 21:09:10.000000000 +0900
+@@ -16,10 +16,11 @@
+
+ # Multipart objects.
+
+-list-multi := usbcore.o hid.o pwc.o
++list-multi := usbcore.o hid.o pwc.o usb_ohci_tc6393.o
+ usbcore-objs := usb.o usb-debug.o hub.o
+ hid-objs := hid-core.o hid-input.o
+ pwc-objs := pwc-if.o pwc-misc.o pwc-ctrl.o pwc-uncompress.o
++ohci-tc6393-objs := usb-ohci.o usb-ohci-tc6393.o pcipool.o mem-onchip.o
+
+
+ # Optional parts of multipart objects.
+@@ -48,6 +49,7 @@
+ obj-$(CONFIG_USB_UHCI_ALT) += uhci.o
+ obj-$(CONFIG_USB_OHCI) += usb-ohci.o usb-ohci-pci.o
+ obj-$(CONFIG_USB_OHCI_SA1111) += usb-ohci.o usb-ohci-sa1111.o
++obj-$(CONFIG_USB_OHCI_TC6393) += usbcore.o usb_ohci_tc6393.o
+
+ obj-$(CONFIG_USB_MOUSE) += usbmouse.o
+ obj-$(CONFIG_USB_HID) += hid.o
+@@ -105,3 +107,6 @@
+
+ pwc.o: $(pwc-objs)
+ $(LD) -r -o $@ $(pwc-objs)
++
++usb_ohci_tc6393.o: $(ohci-tc6393-objs)
++ $(LD) -r -o $@ $(ohci-tc6393-objs)
+diff -Nur linux_c860_org/drivers/usb/device/bi/pxa.c linux/drivers/usb/device/bi/pxa.c
+--- linux_c860_org/drivers/usb/device/bi/pxa.c 2003-11-07 11:35:45.000000000 +0900
++++ linux/drivers/usb/device/bi/pxa.c 2004-06-10 21:09:10.000000000 +0900
+@@ -24,6 +24,8 @@
+ * Change Log
+ * 28-Nov-2003 Lineo Solutions, Inc. Add module parameter. 'shortpacket'
+ * and 'recvpacket'.
++ * ChangeLog:
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa (support cable gpio)
+ *
+ */
+
+@@ -912,6 +914,10 @@
+ PXA_REGS(UDCCS0," <-- ep0");
+ }
+
++#ifdef USBD_CABLE_GPIO
++static int udc_connect_state = 0;
++#endif
++
+ /* ********************************************************************************************* */
+ /* Interrupt Handler
+ */
+@@ -975,10 +981,24 @@
+ // uncommon interrupts
+ if ((udccr = UDCCR) & (UDCCR_RSTIR | UDCCR_RESIR | UDCCR_SUSIR)) {
+
++#ifdef USBD_CABLE_GPIO
++ if (!udc_connect_state && (udccr & UDCCR_RSTIR)) {
++ // printk("ignore UDC Reset\n");
++ UDCCR |= UDCCR_RSTIR;
++ udccr &= ~UDCCR_RSTIR;
++ }
++ if (!udc_connect_state && (udccr & UDCCR_RESIR)) {
++ // printk("ignore UDC Resume\n");
++ UDCCR |= UDCCR_RESIR;
++ udccr &= ~UDCCR_RESIR;
++ }
++#endif
++
+ // UDC Reset
+- if (udccr & UDCCR_RSTIR) {
++ if (udccr & UDCCR_RSTIR) {
+ #if defined(CONFIG_ARCH_SHARP_SL) && defined(CONFIG_APM_CPU_IDLE)
+ static int is1stReset = 1;
++ // printk("UDC Reset\n");
+ if (is1stReset) {
+ is1stReset = 0;
+ } else {
+@@ -995,7 +1015,8 @@
+ }
+
+ // UDC Resume
+- if (udccr & UDCCR_RESIR) {
++ if (udccr & UDCCR_RESIR) {
++ // printk("UDC Resume\n");
+ PXA_CCR(udccr, "------------------------> Resume");
+ if (udc_suspended) {
+ #if defined(CONFIG_ARCH_SHARP_SL) && defined(CONFIG_APM_CPU_IDLE)
+@@ -1009,6 +1030,7 @@
+
+ // UDC Suspend
+ if (udccr & UDCCR_SUSIR) {
++ // printk("UDC Suspend\n");
+ PXA_CCR(udccr, "------------------------> Suspend");
+ if (!udc_suspended) {
+ #if defined(CONFIG_ARCH_SHARP_SL) && defined(CONFIG_APM_CPU_IDLE)
+@@ -1284,7 +1306,17 @@
+ */
+ int udc_connected ()
+ {
+- return 1;
++ int rc = 1;
++#ifdef USBD_CABLE_GPIO
++#ifdef USBD_CABLE_ACTIVE_HIGH
++ rc = (GPLR(USBD_CABLE_GPIO) & GPIO_bit(USBD_CABLE_GPIO)) != 0;
++ //dbg_udc (1, "udc_connected: ACTIVE_HIGH: %d", rc);
++#else
++ rc = (GPLR(USBD_CABLE_GPIO) & GPIO_bit(USBD_CABLE_GPIO)) == 0;
++ //dbg_udc (1, "udc_connected: ACTIVE_LOW: %d", rc);
++#endif
++#endif
++ return rc;
+ }
+
+ /**
+@@ -1294,6 +1326,9 @@
+ */
+ void udc_connect (void)
+ {
++#ifdef USBD_CABLE_GPIO
++ udc_connect_state = 1;
++#endif
+ #ifdef CONFIG_SABINAL_DISCOVERY
+ /* Set GPIO pin function to I/O */
+ GAFR1_U &= ~(0x3 << ((USBD_CONNECT_GPIO & 0xF) << 1));
+@@ -1318,6 +1353,20 @@
+ GPCR(USBD_CONNECT_GPIO) = GPIO_bit(USBD_CONNECT_GPIO);
+ #endif
+
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++ if (!udc_connected()) {
++ //printk("USB Cable not connected!!\n");
++ return;
++ }
++ SCP_JC_REG_GPCR |= USBD_CONNECT_GPIO;
++#if defined(USBD_CONNECT_HIGH)
++ /* Set GPIO pin high to connect */
++ set_scoop_jc_gpio(USBD_CONNECT_GPIO);
++#else
++ /* Set GPIO pin low to connect */
++ reset_scoop_jc_gpio(USBD_CONNECT_GPIO);
++#endif
++
+ #else
+ #warning NO USB Device connect
+ #endif
+@@ -1330,6 +1379,9 @@
+ */
+ void udc_disconnect (void)
+ {
++#ifdef USBD_CABLE_GPIO
++ udc_connect_state = 0;
++#endif
+ #ifdef CONFIG_SABINAL_DISCOVERY
+ /* Set GPIO pin function to I/O */
+ GAFR1_U &= ~(0x3 << ((USBD_CONNECT_GPIO & 0xF) << 1));
+@@ -1354,18 +1406,35 @@
+ GPSR(USBD_CONNECT_GPIO) = GPIO_bit(USBD_CONNECT_GPIO);
+ #endif
+
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++ SCP_JC_REG_GPCR |= USBD_CONNECT_GPIO;
++#if defined(USBD_CONNECT_HIGH)
++ /* Set GPIO pin low to disconnect */
++ reset_scoop_jc_gpio(USBD_CONNECT_GPIO);
++#else
++ /* Set GPIO pin high to disconnect */
++ set_scoop_jc_gpio(USBD_CONNECT_GPIO);
++#endif
++
+ #else
+ #warning NO USB Device connect
+ #endif
+ }
+
+-#if 0
++#ifdef USBD_CABLE_GPIO
+ /**
+ * udc_int_hndlr_cable - interrupt handler for cable
+ */
+ static void udc_int_hndlr_cable (int irq, void *dev_id, struct pt_regs *regs)
+ {
+ // GPIOn interrupt
++ //dbg_udc("udc_cradle_interrupt: ->%08x\n",GPLR(USBD_CABLE_GPIO));
++ if (udc_connected()) {
++ usbd_device_event(udc_device, DEVICE_HUB_RESET, 0);
++ udc_cable_event ();
++ } else {
++ udc_disconnect();
++ }
+ }
+ #endif
+
+@@ -1663,12 +1732,14 @@
+ */
+ int udc_request_cable_irq ()
+ {
+-#ifdef XXXX_CABLE_IRQ
++#ifdef USBD_CABLE_GPIO
++ set_GPIO_mode(USBD_CABLE_GPIO | GPIO_IN);
++ set_GPIO_IRQ_edge(USBD_CABLE_GPIO, GPIO_BOTH_EDGES);
+ // request IRQ and IO region
+- if (request_irq
+- (XXXX_CABLE_IRQ, int_hndlr, SA_INTERRUPT | SA_SAMPLE_RANDOM, UDC_NAME " Cable",
+- NULL) != 0) {
+- printk (KERN_INFO "usb_ctl: Couldn't request USB irq\n");
++ if (request_irq (IRQ_GPIO(USBD_CABLE_GPIO), udc_int_hndlr_cable,
++ SA_INTERRUPT | SA_SAMPLE_RANDOM, UDC_NAME " Cable", NULL) != 0)
++ {
++ printk (KERN_INFO "usb_ctl: Couldn't request USB cable irq\n");
+ return -EINVAL;
+ }
+ #endif
+@@ -1921,8 +1992,8 @@
+ */
+ void udc_release_cable_irq ()
+ {
+-#ifdef XXXX_IRQ
+- free_irq (XXXX_CABLE_IRQ, NULL);
++#ifdef USBD_CABLE_GPIO
++ free_irq (IRQ_GPIO(USBD_CABLE_GPIO), NULL);
+ #endif
+ }
+
+diff -Nur linux_c860_org/drivers/usb/device/bi/pxa.h linux/drivers/usb/device/bi/pxa.h
+--- linux_c860_org/drivers/usb/device/bi/pxa.h 2002-08-26 15:19:05.000000000 +0900
++++ linux/drivers/usb/device/bi/pxa.h 2004-06-10 21:09:10.000000000 +0900
+@@ -21,6 +21,8 @@
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
++ * ChangeLog:
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+
+@@ -54,6 +56,15 @@
+ #define USBD_CONNECT_HIGH 1
+ #endif
+
++#if defined(CONFIG_ARCH_PXA_TOSA)
++/* SHARP SL-6000 specific GPIO assignments */
++#define USBD_CONNECT_GPIO SCP_JC_USB_PULLUP
++#define USBD_CONNECT_HIGH 1
++#define USBD_CABLE_GPIO GPIO_USB_IN
++// active low
++//#define USBD_CABLE_ACTIVE_HIGH 1
++#endif
++
+
+ /*
+ * DMA Notes
+diff -Nur linux_c860_org/drivers/usb/device/usbd-arch.h linux/drivers/usb/device/usbd-arch.h
+--- linux_c860_org/drivers/usb/device/usbd-arch.h 2003-10-16 13:59:01.000000000 +0900
++++ linux/drivers/usb/device/usbd-arch.h 2004-06-10 21:09:10.000000000 +0900
+@@ -42,6 +42,9 @@
+ * Typically during early development you will set these via the kernel
+ * configuration and migrate the values into here once specific values
+ * have been tested and will no longer change.
++ *
++ * Change Log
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+
+@@ -442,13 +445,13 @@
+ #define CONFIG_USBD_PRODUCT_NAME "SL-C750"
+ #else
+ #define CONFIG_USBD_PRODUCT_NAME "SL-7500"
+-#endif
+-#endif
+-#endif
++#endif // CONFIG_ARCH_SHARP_SL_J
++#endif // CONFIG_ARCH_PXA_HUSKY
++#endif // CONFIG_ARCH_PXA_SHEPHERD
+
+ #ifdef CONFIG_ARCH_PXA_BOXER
+- #undef CONFIG_USBD_PRODUCT_NAME
+- #define CONFIG_USBD_PRODUCT_NAME "SL-C860"
++ #undef CONFIG_USBD_PRODUCT_NAME
++ #define CONFIG_USBD_PRODUCT_NAME "SL-C860"
+ #endif
+
+ #undef CONFIG_USBD_NET_CDC
+@@ -458,4 +461,38 @@
+ #define CONFIG_USBD_NET_MDLM 1
+ #define CONFIG_USBD_MAC_AS_SERIAL_NUMBER 1
+
+-#endif
++#endif // CONFIG_ARCH_PXA_CORGI
++
++
++#ifdef CONFIG_ARCH_PXA_TOSA
++
++ #warning CONFIGURING FOR TOSA
++
++ #undef CONFIG_USBD_VENDORID
++ #define CONFIG_USBD_VENDORID 0x04dd
++ #undef CONFIG_USBD_SERIAL_PRODUCT ID
++ #define CONFIG_USBD_SERIAL_PRODUCT ID 0x9032
++ #undef CONFIG_USBD_NET_PRODUCTID
++ #define CONFIG_USBD_NET_PRODUCTID 0x9032
++
++ #undef CONFIG_USBD_SELFPOWERED
++ #undef CONFIG_USBD_MANUFACTURER
++ #undef CONFIG_USBD_PRODUCT_NAME
++
++ #define CONFIG_USBD_SELFPOWERED 1
++ #define CONFIG_USBD_MANUFACTURER "Sharp"
++#ifdef CONFIG_ARCH_SHARP_SL_J
++ #define CONFIG_USBD_PRODUCT_NAME "SL-6000"
++#else
++ #define CONFIG_USBD_PRODUCT_NAME "SL-6000"
++#endif // CONFIG_ARCH_SHARP_SL_J
++
++ #undef CONFIG_USBD_NET_CDC
++ #undef CONFIG_USBD_NET_MDLM
++ #undef CONFIG_USBD_NET_SAFE
++
++ #define CONFIG_USBD_NET_MDLM 1
++ #define CONFIG_USBD_MAC_AS_SERIAL_NUMBER 1
++
++#endif // CONFIG_ARCH_PXA_TOSA
++
+diff -Nur linux_c860_org/drivers/usb/device/usbd-monitor.c linux/drivers/usb/device/usbd-monitor.c
+--- linux_c860_org/drivers/usb/device/usbd-monitor.c 2002-08-26 15:19:04.000000000 +0900
++++ linux/drivers/usb/device/usbd-monitor.c 2004-06-10 21:09:10.000000000 +0900
+@@ -23,6 +23,8 @@
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
++ * ChangeLog:
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+
+@@ -62,7 +64,7 @@
+ * Architecture specific includes
+ */
+
+-#if defined(CONFIG_ARCH_SA1100) || defined(CONFIG_SABINAL_DISCOVERY) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_SA1100) || defined(CONFIG_SABINAL_DISCOVERY) || defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+
+ #include <asm/irq.h>
+ #include <asm/hardware.h>
+diff -Nur linux_c860_org/drivers/usb/inode.c linux/drivers/usb/inode.c
+--- linux_c860_org/drivers/usb/inode.c 2002-08-26 14:39:15.000000000 +0900
++++ linux/drivers/usb/inode.c 2004-06-10 21:09:10.000000000 +0900
+@@ -24,6 +24,9 @@
+ *
+ * History:
+ * 0.1 04.01.2000 Created
++ *
++ * Change Log
++ * 27-Dec-2003 SHARP fixed non-reentrant codes
+ */
+
+ /*****************************************************************************/
+@@ -628,6 +631,9 @@
+ s->s_root = d_alloc_root(root_inode);
+ if (!s->s_root)
+ goto out_no_root;
++#ifdef CONFIG_ARCH_SHARP_SL
++ lock_kernel();
++#endif
+ list_add_tail(&s->u.usbdevfs_sb.slist, &superlist);
+ for (i = 0; i < NRSPECIAL; i++) {
+ if (!(inode = iget(s, IROOT+1+i)))
+@@ -646,6 +652,9 @@
+ recurse_new_dev_inode(bus->root_hub, s);
+ }
+ up (&usb_bus_list_lock);
++#ifdef CONFIG_ARCH_SHARP_SL
++ unlock_kernel();
++#endif
+ return s;
+
+ out_no_root:
+@@ -674,9 +683,15 @@
+ struct list_head *slist;
+
+ lock_kernel();
++#ifdef CONFIG_ARCH_SHARP_SL
++ down (&usb_bus_list_lock);
++#endif
+ for (slist = superlist.next; slist != &superlist; slist = slist->next)
+ new_bus_inode(bus, list_entry(slist, struct super_block, u.usbdevfs_sb.slist));
+ update_special_inodes();
++#ifdef CONFIG_ARCH_SHARP_SL
++ up (&usb_bus_list_lock);
++#endif
+ unlock_kernel();
+ usbdevfs_conn_disc_event();
+ }
+@@ -684,9 +699,15 @@
+ void usbdevfs_remove_bus(struct usb_bus *bus)
+ {
+ lock_kernel();
++#ifdef CONFIG_ARCH_SHARP_SL
++ down (&usb_bus_list_lock);
++#endif
+ while (!list_empty(&bus->inodes))
+ free_inode(list_entry(bus->inodes.next, struct inode, u.usbdev_i.dlist));
+ update_special_inodes();
++#ifdef CONFIG_ARCH_SHARP_SL
++ up (&usb_bus_list_lock);
++#endif
+ unlock_kernel();
+ usbdevfs_conn_disc_event();
+ }
+@@ -696,9 +717,15 @@
+ struct list_head *slist;
+
+ lock_kernel();
++#ifdef CONFIG_ARCH_SHARP_SL
++ down (&usb_bus_list_lock);
++#endif
+ for (slist = superlist.next; slist != &superlist; slist = slist->next)
+ new_dev_inode(dev, list_entry(slist, struct super_block, u.usbdevfs_sb.slist));
+ update_special_inodes();
++#ifdef CONFIG_ARCH_SHARP_SL
++ up (&usb_bus_list_lock);
++#endif
+ unlock_kernel();
+ usbdevfs_conn_disc_event();
+ }
+@@ -709,6 +736,9 @@
+ struct siginfo sinfo;
+
+ lock_kernel();
++#ifdef CONFIG_ARCH_SHARP_SL
++ down (&usb_bus_list_lock);
++#endif
+ while (!list_empty(&dev->inodes))
+ free_inode(list_entry(dev->inodes.next, struct inode, u.usbdev_i.dlist));
+ while (!list_empty(&dev->filelist)) {
+@@ -728,6 +758,9 @@
+ }
+
+ update_special_inodes();
++#ifdef CONFIG_ARCH_SHARP_SL
++ up (&usb_bus_list_lock);
++#endif
+ unlock_kernel();
+ usbdevfs_conn_disc_event();
+ }
+diff -Nur linux_c860_org/drivers/usb/mem-onchip.c linux/drivers/usb/mem-onchip.c
+--- linux_c860_org/drivers/usb/mem-onchip.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/usb/mem-onchip.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,364 @@
++/*
++ * linux/drivers/usb/mem-onchip.c
++ *
++ * memory allocate functions for RAM on chip
++ *
++ * Copyright (c) 2003 Lineo Solutions, Inc.
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file "COPYING" in the main directory of this archive
++ * for more details.
++ *
++ */
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/ioport.h>
++#include <linux/interrupt.h>
++#include <linux/slab.h>
++#include <linux/usb.h>
++
++#include <asm/hardware.h>
++#include <asm/irq.h>
++#include <asm/io.h>
++
++#include "mem-onchip.h"
++
++#if 0
++#define dbg(format, arg...) printk(KERN_DEBUG __FILE__ ": " format "\n" , ## arg)
++#else
++#define dbg(format, arg...) do {} while (0)
++#endif
++
++
++
++//#define MALLOCK_BOUNDART_32BYTE
++#define MALLOCK_BOUNDART_16BYTE
++
++#define MAKE_POINTER(p, offset) ((oc_mem_head *)((u32)(p) + offset))
++
++#define INIT_OC_MEM_HEAD(p, s) \
++ {\
++ INIT_LIST_HEAD(&(p)->free_list);\
++ (p)->size = s;\
++ (p)->flag = 0;\
++ }
++
++#define IS_ALLOCATED_MEMORY(p) ((struct list_head *)(p) == (p)->free_list.next \
++ && (p)->free_list.next == (p)->free_list.prev)
++
++/* memory block header */
++typedef struct __oc_mem_head {
++ struct list_head free_list;
++ size_t size;
++ u32 flag;
++#ifdef MALLOCK_BOUNDART_32BYTE
++ u32 dummy[4]; // for 32byte boundary
++#endif
++} oc_mem_head;
++
++
++u32 OC_MEM_TOP = 0;
++static u32 OC_MEM_BASE = 0;
++static u32 OC_MEM_SIZE = 0;
++static u32 OC_MEM_HCCA_BASE = 0;
++#define OC_MEM_HCCA_SIZE 0x100
++
++static spinlock_t oc_mem_list_lock = SPIN_LOCK_UNLOCKED;
++static int is_oc_hcca_allocated = 0;
++
++static void oc_mem_list_add(oc_mem_head *cp);
++static void* oc_malloc(size_t size, int gfp);
++static void oc_mfree(void* fp);
++static size_t oc_mem_check(int verbose);
++
++
++/* mem_base is 256byte boundary */
++void oc_mem_init(unsigned int mem_base, size_t size)
++{
++ oc_mem_head *top, *cp;
++
++ if (OC_MEM_BASE) return;
++
++ OC_MEM_TOP = mem_base;
++ OC_MEM_HCCA_BASE = mem_base;
++ OC_MEM_BASE = mem_base + OC_MEM_HCCA_SIZE; /* 0x100 for HCCA */
++ OC_MEM_SIZE = size - OC_MEM_HCCA_SIZE;
++
++ top = MAKE_POINTER(OC_MEM_BASE, 0);
++ INIT_OC_MEM_HEAD(top, 0);
++
++ cp = MAKE_POINTER(top, sizeof(oc_mem_head) + top->size);
++ INIT_OC_MEM_HEAD(cp, OC_MEM_SIZE
++ - sizeof(oc_mem_head) - top->size
++ - sizeof(oc_mem_head));
++
++ list_add(&cp->free_list, &top->free_list);
++
++#if 0
++ // for test
++ {
++ char *a, *b, *c;
++ a = oc_malloc(oc_mem_check(1), 0);
++ oc_mem_check(1);
++
++ a = oc_malloc(256, 0);
++ oc_mem_check(1);
++ b = oc_malloc(256, 0);
++ oc_mem_check(1);
++ c = oc_malloc(256, 0);
++ oc_mem_check(1);
++ oc_mfree(b);
++ oc_mem_check(1);
++ b = oc_malloc(256, 0);
++ oc_mem_check();
++
++ oc_mfree(a);
++ oc_mem_check(1);
++ oc_mfree(b);
++ oc_mem_check(1);
++ oc_mfree(c);
++ oc_mem_check(1);
++
++ a = oc_malloc(256, 0);
++ oc_mem_check(1);
++ b = oc_malloc(256, 0);
++ oc_mem_check(1);
++ c = oc_malloc(256, 0);
++ oc_mem_check(1);
++ oc_mfree(a);
++ oc_mem_check(1);
++ oc_mfree(c);
++ oc_mem_check(1);
++ oc_mfree(b);
++ oc_mem_check(1);
++ }
++#endif
++}
++
++static void oc_mem_list_add(oc_mem_head *cp)
++{
++ oc_mem_head *top = (oc_mem_head *)OC_MEM_BASE;
++ struct list_head *n;
++
++ /* address order */
++ list_for_each(n, &top->free_list) {
++ if ((u32)n > (u32)cp) {
++ list_add_tail(&cp->free_list, n);
++ return;
++ }
++ }
++ list_add_tail(&cp->free_list, &top->free_list);
++}
++
++static void* oc_malloc(size_t size, int gfp)
++{
++ oc_mem_head *top = (oc_mem_head *)OC_MEM_BASE;
++ oc_mem_head *cp = NULL;
++ struct list_head *n;
++
++ if (!top)
++ panic("oc_malloc: not set OC_MEM_BASE.");
++
++ if (size == 0)
++ return (void*)0;
++
++#if defined(MALLOCK_BOUNDART_32BYTE)
++ size = ((size + 32 - 1) / 32) * 32; // for 32byte boundary
++#elif defined(MALLOCK_BOUNDART_16BYTE)
++ size = ((size + 16 - 1) / 16) * 16; // for 16byte boundary
++#else
++ size = ((size + sizeof(u32) - 1) / sizeof(u32)) * sizeof(u32);
++#endif
++
++ list_for_each(n, &top->free_list) {
++ if (((oc_mem_head *)n)->size >= size) {
++ cp = (oc_mem_head *)n;
++ break;
++ }
++ }
++ if (!cp) {
++ return (void*)0;
++ }
++
++ if (cp->size > size + sizeof(oc_mem_head)) {
++ oc_mem_head *fp;
++ size_t alloc = size + sizeof(oc_mem_head);
++ size_t new_size = cp->size - alloc;
++
++ list_del(&cp->free_list);
++ INIT_OC_MEM_HEAD(cp, size);
++
++ fp = MAKE_POINTER(cp, alloc);
++ INIT_OC_MEM_HEAD(fp, new_size);
++ oc_mem_list_add(fp);
++ dbg("separate %08x-%04x %08x-%04x\n", (u32)cp, cp->size, (u32)fp, fp->size);
++ } else if (cp->free_list.next == cp->free_list.prev
++ && cp->free_list.next == &top->free_list) {
++ dbg("mallock error %08x-%04x\n", (u32)cp, cp->size);
++ return (void*)0;
++ } else {
++ dbg("alloc this %08x-%04x\n", (u32)cp, cp->size);
++ list_del_init(&cp->free_list);
++ }
++
++ return (void *)(cp + 1);
++}
++
++static void oc_mfree(void* fp)
++{
++ oc_mem_head *top = (oc_mem_head *)OC_MEM_BASE;
++ oc_mem_head *cp = (oc_mem_head *)fp - 1;
++ struct list_head *n;
++
++ if (fp == (void*)0)
++ return;
++ if (!IS_ALLOCATED_MEMORY(cp)) {
++ dbg("%08x is not allocated memory. n=%08x p=%08x s=%04x\n",
++ (u32)fp, (u32)cp->free_list.next, (u32)cp->free_list.prev, cp->size);
++ return;
++ }
++
++ list_for_each(n, &top->free_list) {
++ /* cp is just previous of this free block */
++ if (MAKE_POINTER(cp, cp->size + sizeof(oc_mem_head))
++ == (oc_mem_head *)n) {
++ oc_mem_head *pp = (oc_mem_head *)n->prev;
++ dbg("P %08x-%04x merged to %08x-%04x\n", (u32)n, ((oc_mem_head *)n)->size, (u32)cp, cp->size);
++ list_del(n);
++ INIT_OC_MEM_HEAD(cp, cp->size
++ + ((oc_mem_head *)n)->size
++ + sizeof(oc_mem_head));
++ /* cp merge to previous free block */
++ if (cp == MAKE_POINTER(pp,
++ pp->size + sizeof(oc_mem_head)) && pp != top) {
++ dbg("P %08x-%04x merged to %08x-%04x\n", (u32)cp, cp->size, (u32)pp, pp->size);
++ list_del(&pp->free_list);
++ INIT_OC_MEM_HEAD(pp, pp->size
++ + cp->size + sizeof(oc_mem_head));
++ cp = pp;
++ }
++ break;
++ }
++ /* cp is just next of this free block */
++ if (cp == MAKE_POINTER(n, ((oc_mem_head *)n)->size
++ + sizeof(oc_mem_head))) {
++ oc_mem_head *np = (oc_mem_head *)n->next;
++ dbg("N %08x-%04x merged to %08x-%04x\n", (u32)cp, cp->size, (u32)n, ((oc_mem_head *)n)->size);
++ list_del(n);
++ INIT_OC_MEM_HEAD((oc_mem_head *)n,
++ ((oc_mem_head *)n)->size
++ + cp->size + sizeof(oc_mem_head));
++ cp = (oc_mem_head *)n;
++ if (np == MAKE_POINTER(cp,
++ cp->size + sizeof(oc_mem_head))) {
++ dbg("N %08x-%04x merged to %08x-%04x\n", (u32)np, np->size, (u32)cp, cp->size);
++ list_del(&np->free_list);
++ INIT_OC_MEM_HEAD(cp, cp->size
++ + np->size + sizeof(oc_mem_head));
++ }
++ break;
++ }
++ }
++
++ oc_mem_list_add(cp);
++}
++
++
++static size_t oc_mem_check(int verbose)
++{
++ oc_mem_head *top = (oc_mem_head *)OC_MEM_BASE;
++ oc_mem_head *nhp = top;
++ int bc = 0;
++ int alloc_bc = 0;
++ int free_bc = 0;
++ size_t alloc_size = 0;
++ size_t free_size = 0;
++ size_t total = 0;
++
++ if (verbose) {
++ printk("[No.] A HEAD PREV NEXT SIZE\n");
++ printk("-----+-+--------+--------+--------+----\n");
++ }
++ while ((u32)nhp < OC_MEM_BASE + OC_MEM_SIZE) {
++ char *mark;
++ if (IS_ALLOCATED_MEMORY(nhp)) {
++ mark = "*";
++ alloc_bc++;
++ alloc_size += nhp->size + sizeof(oc_mem_head);
++ } else {
++ mark = " ";
++ free_bc++;
++ free_size += nhp->size + sizeof(oc_mem_head);
++ }
++ total += nhp->size + sizeof(oc_mem_head);
++ if (verbose) {
++ printk("[%03d] %s %08x : %08x %08x %04x\n",
++ bc++, mark, (u32)nhp,
++ (u32)nhp->free_list.prev,
++ (u32)nhp->free_list.next, nhp->size);
++ }
++ nhp = MAKE_POINTER(nhp, nhp->size+sizeof(oc_mem_head));
++ }
++ if (verbose) {
++ printk("-----+-+--------+--------+--------+----\n");
++ }
++ printk("alloc=%08x(%d) free=%08x(%d) total=%08x\n",
++ alloc_size, alloc_bc, free_size, free_bc, total);
++
++ return free_size;
++}
++
++#undef kmalloc
++#undef kfree
++
++void KFREE(void* p)
++{
++ dbg("KFREE %08x\n", p);
++ spin_lock(&oc_mem_list_lock);
++ oc_mfree((void*)p);
++ spin_unlock(&oc_mem_list_lock);
++}
++
++void* KMALLOC(size_t s, int v)
++{
++ void *p;
++ spin_lock(&oc_mem_list_lock);
++ p = oc_malloc(s, v);
++ spin_unlock(&oc_mem_list_lock);
++
++//oc_mem_check(0);
++ dbg("KMALLOC %08x - %04x\n", p , s);
++ if (s != 0 && p == NULL) {
++ oc_mem_check(1);
++ panic("oc_malloc: no more memory on chip RAM (%dbyts)", s);
++ }
++ return p;
++}
++
++void* oc_hcca_alloc(struct pci_dev *hwdev, size_t size, dma_addr_t *handle)
++{
++ void *p;
++
++ if (!size)
++ return (void *)0;
++
++ if (!OC_MEM_HCCA_BASE)
++ panic("oc_malloc: not set OC_MEM_BASE.");
++ if (is_oc_hcca_allocated)
++ panic("oc_hcca_alloc: HCCA memory was alrady allocated.");
++ if (size > OC_MEM_HCCA_SIZE)
++ panic("oc_hcca_alloc: no more memory on RAM0 (size=%d)", size);
++
++ p = (void *)OC_MEM_HCCA_BASE; /* 256byte boundary */
++ //*handle = (dma_addr_t)OC_MEM_VAR_TO_OFFSET(p);
++ return p;
++}
++
++void oc_hcca_free(struct pci_dev *hwdev, size_t size, void *vaddr,
++ dma_addr_t dma_handle)
++{
++ is_oc_hcca_allocated = 0;
++}
++
+diff -Nur linux_c860_org/drivers/usb/mem-onchip.h linux/drivers/usb/mem-onchip.h
+--- linux_c860_org/drivers/usb/mem-onchip.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/usb/mem-onchip.h 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,144 @@
++/*
++ * linux/drivers/usb/mem-onchip.h
++ *
++ * Copyright (c) 2003 Lineo Solutions, Inc.
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file "COPYING" in the main directory of this archive
++ * for more details.
++ *
++ */
++
++#ifndef _MEM_ON_CHIP_H_
++#define _MEM_ON_CHIP_H_ 1
++
++#include <linux/pci.h>
++
++#define OC_MEM_PCI_MAP_DEBUG
++#define OC_MEM_PCI_MAP_USE_MEMCPY
++
++#define OC_MEM_VAR_TO_OFFSET(x) ((unsigned int)x - OC_MEM_TOP)
++#define OC_MEM_OFFSET_TO_VAR(x) ((unsigned int)x + OC_MEM_TOP)
++
++#ifdef __LINUX_USB_H
++#define pci_alloc_consistent(dev, size, dma_addr) \
++ oc_hcca_alloc(dev, size, dma_addr)
++#define pci_free_consistent(dev, size, var, dma_addr) \
++ oc_hcca_free(dev, size, var, dma_addr)
++#else
++#define pci_alloc_consistent(dev, size, dma_addr) \
++ PCI_ALLOC_CONSISTENT(dev, size, dma_addr)
++#define pci_free_consistent(dev, size, var, dma_addr) \
++ KFREE(var)
++#endif
++
++#define pci_map_single(hwdev, ptr, size, direction) \
++ PCI_MAP_SINGLE(hwdev, ptr, size, direction)
++#define pci_unmap_single(hwdev, dma_addr, size, direction) \
++ PCI_UNMAP_SINGLE(hwdev, dma_addr, size, direction)
++
++
++extern u32 OC_MEM_TOP;
++
++void oc_mem_init(unsigned int top, size_t size);
++void* KMALLOC(size_t s, int v);
++void KFREE(void* p);
++void* oc_hcca_alloc(struct pci_dev *hwdev, size_t size, dma_addr_t *handle);
++void oc_hcca_free(struct pci_dev *hwdev,
++ size_t size, void *vaddr, dma_addr_t dma_handle);
++
++
++/*
++ * replace PCI function
++*/
++static inline void* PCI_ALLOC_CONSISTENT(struct pci_dev *hwdev, size_t size, dma_addr_t *handle)
++{
++ void *p = KMALLOC(size, GFP_KERNEL | GFP_DMA);
++ *handle = (dma_addr_t)OC_MEM_VAR_TO_OFFSET(p);
++ return p;
++}
++
++#ifdef OC_MEM_PCI_MAP_DEBUG
++static inline char* PCI_DMA_FLAG_DESC(int direction)
++{
++ switch (direction) {
++ case PCI_DMA_NONE: return "NONE";
++ case PCI_DMA_FROMDEVICE: return "FROMDEVICE";
++ case PCI_DMA_TODEVICE: return "TODEVICE";
++ case PCI_DMA_BIDIRECTIONAL: return "BIDIRECTIONAL";
++ }
++ return "unknown";
++}
++#endif
++
++static inline dma_addr_t
++PCI_MAP_SINGLE(struct pci_dev *hwdev, void *ptr, size_t size, int direction)
++{
++#ifndef OC_MEM_PCI_MAP_USE_MEMCPY
++ return (dma_addr_t)OC_MEM_VAR_TO_OFFSET(ptr);
++#else
++ void *p;
++ size_t l = ((size + 3) / 4) * 4 + 4;
++
++ switch (direction) {
++ case PCI_DMA_NONE:
++ BUG();
++ break;
++ case PCI_DMA_FROMDEVICE: /* invalidate only */
++ p = KMALLOC(l, GFP_KERNEL | GFP_DMA);
++ break;
++ case PCI_DMA_TODEVICE: /* writeback only */
++ case PCI_DMA_BIDIRECTIONAL: /* writeback and invalidate */
++ p = KMALLOC(l, GFP_KERNEL | GFP_DMA);
++ memcpy(p, ptr, size);
++ break;
++ }
++
++ *((volatile unsigned int *)((unsigned int)p + l - 4))
++ = (unsigned int)ptr;
++#ifdef OC_MEM_PCI_MAP_DEBUG
++#if 0
++ printk("PCI_MAP_SINGLE: %s %08x - %04x , %08x - %04x\n",
++ PCI_DMA_FLAG_DESC(direction),
++ ptr, size, OC_MEM_VAR_TO_OFFSET(p), l);
++#endif
++#endif
++ return (dma_addr_t)OC_MEM_VAR_TO_OFFSET(p);
++#endif
++}
++
++static inline void
++PCI_UNMAP_SINGLE(struct pci_dev *hwdev, dma_addr_t dma_addr, size_t size, int direction)
++{
++#ifndef OC_MEM_PCI_MAP_USE_MEMCPY
++ /* nothing to do */
++#else
++ void *p, *ptr;
++ size_t l = ((size + 3) / 4) * 4 + 4;
++ p = (void *)OC_MEM_OFFSET_TO_VAR(dma_addr);
++ ptr = (void *)*((volatile unsigned int *)((unsigned int)p + l - 4));
++
++ switch (direction) {
++ case PCI_DMA_NONE:
++ BUG();
++ break;
++ case PCI_DMA_FROMDEVICE: /* invalidate only */
++ case PCI_DMA_BIDIRECTIONAL: /* writeback and invalidate */
++ memcpy(ptr, p, size);
++ KFREE(p);
++ break;
++ case PCI_DMA_TODEVICE: /* writeback only */
++ KFREE(p);
++ break;
++ }
++#ifdef OC_MEM_PCI_MAP_DEBUG
++#if 0
++ printk("PCI_UNMAP_SINGLE: %s %08x - %04x , %08x\n",
++ PCI_DMA_FLAG_DESC(direction), ptr, size, dma_addr);
++#endif
++#endif
++#endif
++}
++
++
++#endif /* _MEM_ON_CHIP_H_ */
+diff -Nur linux_c860_org/drivers/usb/pcipool.c linux/drivers/usb/pcipool.c
+--- linux_c860_org/drivers/usb/pcipool.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/usb/pcipool.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,401 @@
++/*
++ * linux/arch/arm/mach-pxa/pcipool.c
++ *
++ * Copyright (c) 2003 Lineo Solutions, Inc.
++ *
++ * Based on linux/arch/arm/mach-sa1100/pcipool.c
++ *
++ * May be copied or modified under the terms of the GNU General Public
++ * License. See linux/COPYING for more information.
++ *
++ */
++/*
++ NOTE:
++
++ this code was lifted straight out of drivers/pci/pci.c;
++ when compiling for the Intel StrongARM SA-1110/SA-1111 the
++ usb-ohci.c driver needs these routines even when the architecture
++ has no pci bus...
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <linux/pci.h>
++#include <linux/string.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/spinlock.h>
++#include <linux/bitops.h>
++
++#include <asm/page.h>
++
++#if defined(CONFIG_USB_USE_INTERNAL_MEMORY)
++#include "mem-onchip.h"
++#endif
++
++
++struct pci_pool *pci_pool_create (const char *name, struct pci_dev *dev,
++ size_t size, size_t align, size_t allocation, int flags);
++void pci_pool_destroy (struct pci_pool *pool);
++
++void *pci_pool_alloc (struct pci_pool *pool, int flags, dma_addr_t *handle);
++void pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t addr);
++
++
++/*
++ * Pool allocator ... wraps the pci_alloc_consistent page allocator, so
++ * small blocks are easily used by drivers for bus mastering controllers.
++ * This should probably be sharing the guts of the slab allocator.
++ */
++
++struct pci_pool { /* the pool */
++ struct list_head page_list;
++ spinlock_t lock;
++ size_t blocks_per_page;
++ size_t size;
++ int flags;
++ struct pci_dev *dev;
++ size_t allocation;
++ char name [32];
++ wait_queue_head_t waitq;
++};
++
++struct pci_page { /* cacheable header for 'allocation' bytes */
++ struct list_head page_list;
++ void *vaddr;
++ dma_addr_t dma;
++ unsigned long bitmap [0];
++};
++
++#define POOL_TIMEOUT_JIFFIES ((100 /* msec */ * HZ) / 1000)
++#define POOL_POISON_BYTE 0xa7
++
++// #define CONFIG_PCIPOOL_DEBUG
++
++
++/**
++ * pci_pool_create - Creates a pool of pci consistent memory blocks, for dma.
++ * @name: name of pool, for diagnostics
++ * @pdev: pci device that will be doing the DMA
++ * @size: size of the blocks in this pool.
++ * @align: alignment requirement for blocks; must be a power of two
++ * @allocation: returned blocks won't cross this boundary (or zero)
++ * @flags: SLAB_* flags (not all are supported).
++ *
++ * Returns a pci allocation pool with the requested characteristics, or
++ * null if one can't be created. Given one of these pools, pci_pool_alloc()
++ * may be used to allocate memory. Such memory will all have "consistent"
++ * DMA mappings, accessible by the device and its driver without using
++ * cache flushing primitives. The actual size of blocks allocated may be
++ * larger than requested because of alignment.
++ *
++ * If allocation is nonzero, objects returned from pci_pool_alloc() won't
++ * cross that size boundary. This is useful for devices which have
++ * addressing restrictions on individual DMA transfers, such as not crossing
++ * boundaries of 4KBytes.
++ */
++struct pci_pool *
++pci_pool_create (const char *name, struct pci_dev *pdev,
++ size_t size, size_t align, size_t allocation, int flags)
++{
++ struct pci_pool *retval;
++
++ if (align == 0)
++ align = 1;
++ if (size == 0)
++ return 0;
++ else if (size < align)
++ size = align;
++ else if ((size % align) != 0) {
++ size += align + 1;
++ size &= ~(align - 1);
++ }
++
++ if (allocation == 0) {
++ if (PAGE_SIZE < size)
++ allocation = size;
++ else
++ allocation = PAGE_SIZE;
++ // FIXME: round up for less fragmentation
++ } else if (allocation < size)
++ return 0;
++
++ if (!(retval = kmalloc (sizeof *retval, flags)))
++ return retval;
++
++#ifdef CONFIG_PCIPOOL_DEBUG
++ flags |= SLAB_POISON;
++#endif
++
++ strncpy (retval->name, name, sizeof retval->name);
++ retval->name [sizeof retval->name - 1] = 0;
++
++ retval->dev = pdev;
++ INIT_LIST_HEAD (&retval->page_list);
++ spin_lock_init (&retval->lock);
++ retval->size = size;
++ retval->flags = flags;
++ retval->allocation = allocation;
++ retval->blocks_per_page = allocation / size;
++ init_waitqueue_head (&retval->waitq);
++
++#ifdef CONFIG_PCIPOOL_DEBUG
++ printk (KERN_DEBUG "pcipool create %s/%s size %d, %d/page (%d alloc)\n",
++ pdev ? pdev->slot_name : NULL, retval->name, size,
++ retval->blocks_per_page, allocation);
++#endif
++
++ return retval;
++}
++
++
++static struct pci_page *
++pool_alloc_page (struct pci_pool *pool, int mem_flags)
++{
++ struct pci_page *page;
++ int mapsize;
++
++ mapsize = pool->blocks_per_page;
++ mapsize = (mapsize + BITS_PER_LONG - 1) / BITS_PER_LONG;
++ mapsize *= sizeof (long);
++
++ page = (struct pci_page *) kmalloc (mapsize + sizeof *page, mem_flags);
++ if (!page)
++ return 0;
++ page->vaddr = pci_alloc_consistent (pool->dev,
++ pool->allocation, &page->dma);
++ if (page->vaddr) {
++ memset (page->bitmap, 0xff, mapsize); // bit set == free
++ if (pool->flags & SLAB_POISON)
++ memset (page->vaddr, POOL_POISON_BYTE, pool->allocation);
++ list_add (&page->page_list, &pool->page_list);
++ } else {
++ kfree (page);
++ page = 0;
++ }
++ return page;
++}
++
++
++static inline int
++is_page_busy (int blocks, unsigned long *bitmap)
++{
++ while (blocks > 0) {
++ if (*bitmap++ != ~0UL)
++ return 1;
++ blocks -= BITS_PER_LONG;
++ }
++ return 0;
++}
++
++static void
++pool_free_page (struct pci_pool *pool, struct pci_page *page)
++{
++ dma_addr_t dma = page->dma;
++
++ if (pool->flags & SLAB_POISON)
++ memset (page->vaddr, POOL_POISON_BYTE, pool->allocation);
++ pci_free_consistent (pool->dev, pool->allocation, page->vaddr, dma);
++ list_del (&page->page_list);
++ kfree (page);
++}
++
++
++/**
++ * pci_pool_destroy - destroys a pool of pci memory blocks.
++ * @pool: pci pool that will be destroyed
++ *
++ * Caller guarantees that no more memory from the pool is in use,
++ * and that nothing will try to use the pool after this call.
++ */
++void
++pci_pool_destroy (struct pci_pool *pool)
++{
++ unsigned long flags;
++
++#ifdef CONFIG_PCIPOOL_DEBUG
++ printk (KERN_DEBUG "pcipool destroy %s/%s\n",
++ pool->dev ? pool->dev->slot_name : NULL,
++ pool->name);
++#endif
++
++ spin_lock_irqsave (&pool->lock, flags);
++ while (!list_empty (&pool->page_list)) {
++ struct pci_page *page;
++ page = list_entry (pool->page_list.next,
++ struct pci_page, page_list);
++ if (is_page_busy (pool->blocks_per_page, page->bitmap)) {
++ printk (KERN_ERR "pci_pool_destroy %s/%s, %p busy\n",
++ pool->dev ? pool->dev->slot_name : NULL,
++ pool->name, page->vaddr);
++ /* leak the still-in-use consistent memory */
++ list_del (&page->page_list);
++ kfree (page);
++ } else
++ pool_free_page (pool, page);
++ }
++ spin_unlock_irqrestore (&pool->lock, flags);
++ kfree (pool);
++}
++
++
++/**
++ * pci_pool_alloc - get a block of consistent memory
++ * @pool: pci pool that will produce the block
++ * @mem_flags: SLAB_KERNEL or SLAB_ATOMIC
++ * @handle: pointer to dma address of block
++ *
++ * This returns the kernel virtual address of a currently unused block,
++ * and reports its dma address through the handle.
++ * If such a memory block can't be allocated, null is returned.
++ */
++void *
++pci_pool_alloc (struct pci_pool *pool, int mem_flags, dma_addr_t *handle)
++{
++ unsigned long flags;
++ struct list_head *entry;
++ struct pci_page *page;
++ int map, block;
++ size_t offset;
++ void *retval;
++
++restart:
++ spin_lock_irqsave (&pool->lock, flags);
++ list_for_each (entry, &pool->page_list) {
++ int i;
++ page = list_entry (entry, struct pci_page, page_list);
++ /* only cachable accesses here ... */
++ for (map = 0, i = 0;
++ i < pool->blocks_per_page;
++ i += BITS_PER_LONG, map++) {
++ if (page->bitmap [map] == 0)
++ continue;
++ block = ffz (~ page->bitmap [map]);
++ if ((i + block) < pool->blocks_per_page) {
++ clear_bit (block, &page->bitmap [map]);
++ offset = (BITS_PER_LONG * map) + block;
++ offset *= pool->size;
++ goto ready;
++ }
++ }
++ }
++ if (!(page = pool_alloc_page (pool, mem_flags))) {
++ if (mem_flags == SLAB_KERNEL) {
++ DECLARE_WAITQUEUE (wait, current);
++
++ current->state = TASK_INTERRUPTIBLE;
++ add_wait_queue (&pool->waitq, &wait);
++ spin_unlock_irqrestore (&pool->lock, flags);
++
++ schedule_timeout (POOL_TIMEOUT_JIFFIES);
++
++ current->state = TASK_RUNNING;
++ remove_wait_queue (&pool->waitq, &wait);
++ goto restart;
++ }
++ retval = 0;
++ goto done;
++ }
++
++ clear_bit (0, &page->bitmap [0]);
++ offset = 0;
++ready:
++ retval = offset + page->vaddr;
++ *handle = offset + page->dma;
++done:
++ spin_unlock_irqrestore (&pool->lock, flags);
++ return retval;
++}
++
++
++static struct pci_page *
++pool_find_page (struct pci_pool *pool, dma_addr_t dma)
++{
++ unsigned long flags;
++ struct list_head *entry;
++ struct pci_page *page;
++
++ spin_lock_irqsave (&pool->lock, flags);
++ list_for_each (entry, &pool->page_list) {
++ page = list_entry (entry, struct pci_page, page_list);
++ if (dma < page->dma)
++ continue;
++ if (dma < (page->dma + pool->allocation))
++ goto done;
++ }
++ page = 0;
++done:
++ spin_unlock_irqrestore (&pool->lock, flags);
++ return page;
++}
++
++
++/**
++ * pci_pool_free - put block back into pci pool
++ * @pool: the pci pool holding the block
++ * @vaddr: virtual address of block
++ * @dma: dma address of block
++ *
++ * Caller promises neither device nor driver will again touch this block
++ * unless it is first re-allocated.
++ */
++void
++pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t dma)
++{
++ struct pci_page *page;
++ unsigned long flags;
++ int map, block;
++
++ if ((page = pool_find_page (pool, dma)) == 0) {
++ printk (KERN_ERR "pci_pool_free %s/%s, %p/%x (bad dma)\n",
++ pool->dev ? pool->dev->slot_name : NULL,
++ pool->name, vaddr, dma);
++ return;
++ }
++#ifdef CONFIG_PCIPOOL_DEBUG
++ if (((dma - page->dma) + (void *)page->vaddr) != vaddr) {
++ printk (KERN_ERR "pci_pool_free %s/%s, %p (bad vaddr)/%x\n",
++ pool->dev ? pool->dev->slot_name : NULL,
++ pool->name, vaddr, dma);
++ return;
++ }
++#endif
++
++ block = dma - page->dma;
++ block /= pool->size;
++ map = block / BITS_PER_LONG;
++ block %= BITS_PER_LONG;
++
++#ifdef CONFIG_PCIPOOL_DEBUG
++ if (page->bitmap [map] & (1UL << block)) {
++ printk (KERN_ERR "pci_pool_free %s/%s, dma %x already free\n",
++ pool->dev ? pool->dev->slot_name : NULL,
++ pool->name, dma);
++ return;
++ }
++#endif
++ if (pool->flags & SLAB_POISON)
++ memset (vaddr, POOL_POISON_BYTE, pool->size);
++
++ spin_lock_irqsave (&pool->lock, flags);
++ set_bit (block, &page->bitmap [map]);
++ if (waitqueue_active (&pool->waitq))
++ wake_up (&pool->waitq);
++ /*
++ * Resist a temptation to do
++ * if (!is_page_busy(bpp, page->bitmap)) pool_free_page(pool, page);
++ * it is not interrupt safe. Better have empty pages hang around.
++ */
++ spin_unlock_irqrestore (&pool->lock, flags);
++}
++
++
++/*
++EXPORT_SYMBOL (pci_pool_create);
++EXPORT_SYMBOL (pci_pool_destroy);
++EXPORT_SYMBOL (pci_pool_alloc);
++EXPORT_SYMBOL (pci_pool_free);
++*/
++
+diff -Nur linux_c860_org/drivers/usb/usb-ohci-tc6393.c linux/drivers/usb/usb-ohci-tc6393.c
+--- linux_c860_org/drivers/usb/usb-ohci-tc6393.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/usb/usb-ohci-tc6393.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,516 @@
++/*
++ * linux/drivers/usb/usb-ohci-tc6393.c
++ *
++ * (C) Copyright 2004 Lineo Solutions, Inc.
++ *
++ * May be copied or modified under the terms of the GNU General Public
++ * License. See linux/COPYING for more information.
++ *
++ * Based on:
++ *
++ * linux/drivers/usb/usb-ohci-pci.c
++ *
++ * and
++ *
++ * linux/drivers/usb/usb-ohci-sa1111.c
++ *
++ * The outline of this code was taken from Brad Parkers <brad@heeltoe.com>
++ * original OHCI driver modifications, and reworked into a cleaner form
++ * by Russell King <rmk@arm.linux.org.uk>.
++ */
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/ioport.h>
++#include <linux/interrupt.h>
++#include <linux/slab.h>
++#include <linux/usb.h>
++#include <linux/pm.h>
++#include <linux/delay.h>
++#include <linux/ioctl.h>
++#include <linux/miscdevice.h>
++#include <asm/uaccess.h>
++
++#include <asm/hardware.h>
++#include <asm/irq.h>
++#include <asm/io.h>
++#include <asm/sharp_tc6393_usb.h>
++
++#include "usb-ohci.h"
++
++#define TC6393_OHCI_CTL_MINOR_DEV 222
++
++static int tc6393_usb_internal_port_enable = 0; // default is disable
++static int tc6393_usb_external_port_enable = 1; // default is enable
++
++//#define THREAD_RESUME
++#ifdef THREAD_RESUME
++static int resume_thread_alive = 0;
++static int tc6393_ohci_pm_resume(void);
++#endif
++
++int __devinit
++hc_add_ohci(struct pci_dev *dev, int irq, void *membase, unsigned long flags,
++ ohci_t **ohci, const char *name, const char *slot_name);
++extern void hc_remove_ohci(ohci_t *ohci);
++
++static ohci_t *tc6393_ohci;
++
++#ifdef CONFIG_PM
++static int tc6393_ohci_pm_callback(
++ struct pm_dev *pm_device, pm_request_t rqst, void *data);
++#endif
++
++
++static int do_ioctl(struct inode * inode,
++ struct file *filp, u_int cmd, u_long arg)
++{
++ long val,res;
++
++#ifdef THREAD_RESUME
++ while(resume_thread_alive) udelay(100);
++#endif
++ switch (cmd) {
++ case TC6393_OHCI_IOC_PDOWN: /* Power Down */
++ //printk("TC6393_OHCI_IOC_PDOWN: %d\n",arg);
++ if (arg == 0) {
++ TC6393_USB_REG(TC6393_USB_SVPMCS)
++ |= TC6393_USB_PM_USPW1;
++ tc6393_usb_external_port_enable = 0;
++ } else if (arg == 1) {
++ TC6393_USB_REG(TC6393_USB_SVPMCS)
++ |= TC6393_USB_PM_USPW2;
++ tc6393_usb_internal_port_enable = 0;
++ } else
++ return -EINVAL;
++ return 0;
++ case TC6393_OHCI_IOC_PON: /* Power On */
++ //printk("TC6393_OHCI_IOC_PON: %d\n",arg);
++ if (arg == 0) {
++ TC6393_USB_REG(TC6393_USB_SVPMCS)
++ &= ~TC6393_USB_PM_USPW1;
++ tc6393_usb_external_port_enable = 1;
++ } else if (arg == 1) {
++ TC6393_USB_REG(TC6393_USB_SVPMCS)
++ &= ~TC6393_USB_PM_USPW2;
++ tc6393_usb_internal_port_enable = 1;
++ } else
++ return -EINVAL;
++ return 0;
++ case TC6393_OHCI_IOC_PCHECK: /* Check Power */
++ if ( get_user(val, (long *) arg) )
++ return -EFAULT;
++ if (val == 0) {
++ res = (TC6393_USB_REG(TC6393_USB_SVPMCS)&TC6393_USB_PM_USPW1)?0:1;
++ } else if (val == 1) {
++ res = (TC6393_USB_REG(TC6393_USB_SVPMCS)&TC6393_USB_PM_USPW2)?0:1;
++ } else return -EINVAL;
++ return put_user(res, (int *)arg);
++ default:
++ break;
++ }
++ return -EOPNOTSUPP;
++}
++
++static struct file_operations tc6393_ohci_fops = {
++ owner: THIS_MODULE,
++ ioctl: do_ioctl
++};
++
++static struct miscdevice tc6393_ohci_ctl_device = {
++ TC6393_OHCI_CTL_MINOR_DEV,
++ "tc6393_ohci_ctl",
++ &tc6393_ohci_fops
++};
++
++
++static void tc6393_ohci_configure(void)
++{
++ u16 portval;
++#if 0
++printk("TC6393_SYS_PLL2CR: %04x\n", TC6393_SYS_REG(TC6393_SYS_PLL2CR));
++TC6393_SYS_REG(TC6393_SYS_PLL2CR) = 0x0cc1;
++#endif
++
++ TC6393_SYS_REG(TC6393_SYS_CCR) |= 2; /* clock enable */
++ TC6393_SYS_REG(TC6393_SYS_FER) |= 1; /* USB enable */
++
++ //TC6393_USB_REG(TC6393_USB_SPPCNF) |= 1;
++ TC6393_USB_REG(TC6393_USB_SPBA1)
++ = TC6393_USB_OHCI_OP_REG_BASE & 0xffff; /* LW */
++ TC6393_USB_REG(TC6393_USB_SPBA2)
++ = TC6393_USB_OHCI_OP_REG_BASE >> 16; /* HW */
++ TC6393_USB_REG(TC6393_USB_ILME) = 1;
++
++ portval = TC6393_USB_PM_PMES | TC6393_USB_PM_PMEE | TC6393_USB_PM_CKRNEN | TC6393_USB_PM_GCKEN;
++ if (!tc6393_usb_external_port_enable) portval |= TC6393_USB_PM_USPW1;
++ if (!tc6393_usb_internal_port_enable) portval |= TC6393_USB_PM_USPW2;
++ TC6393_USB_REG(TC6393_USB_SVPMCS) = portval;
++
++ TC6393_USB_REG(TC6393_USB_INTC) = 2;
++
++#if 0
++printk("TC6393_SYS_ConfigCR: %04x\n", TC6393_SYS_REG(TC6393_SYS_ConfigCR));
++printk("TC6393_SYS_CCR: %04x\n", TC6393_SYS_REG(TC6393_SYS_CCR));
++printk("TC6393_SYS_PLL2CR: %04x\n", TC6393_SYS_REG(TC6393_SYS_PLL2CR));
++printk("TC6393_SYS_PLL1CR: %08x\n", (*(int *)(TC6393_SYS_BASE+TC6393_SYS_PLL1CR1)));
++printk("TC6393_SYS_MCR: %04x\n", TC6393_SYS_REG(TC6393_SYS_MCR));
++printk("TC6393_SYS_FER: %04x\n", TC6393_SYS_REG(TC6393_SYS_FER));
++printk("TC6393_USB_Rev: %d\n", TC6393_USB_REG(TC6393_USB_SPRID));
++printk("TC6393_USB_SPBA: %08x\n", (*(int *)(TC6393_USB_BASE+TC6393_USB_SPBA1)));
++printk("TC6393_USB_ILME: %04x\n", TC6393_USB_REG(TC6393_USB_ILME));
++printk("TC6393_USB_SVPMCS: %04x\n", TC6393_USB_REG(TC6393_USB_SVPMCS));
++printk("TC6393_USB_INTC: %04x\n", TC6393_USB_REG(TC6393_USB_INTC));
++printk("OHCI Rev: %08x\n", (*(int *)(TC6393_SYS_BASE+TC6393_USB_OHCI_OP_REG_BASE)));
++#endif
++#if 0
++ {
++ unsigned int top = TC6393_RAM0_BASE + 0x100;
++ volatile unsigned int *ip = (volatile unsigned int *)(top);
++ volatile unsigned short *sp = (volatile unsigned short *)(top+4);
++ volatile unsigned char *cp = (volatile unsigned char *)(top+8);
++ *ip = 0x12345678;
++ printk("int %08x\n", *ip);
++ sp[0] = 0x9876;
++ sp[1] = 0x5432;
++ printk("short %04x %04x\n", sp[0], sp[1]);
++ cp[0] = 0x12;
++ cp[1] = 0x23;
++ cp[2] = 0x34;
++ cp[3] = 0x45;
++ printk("byte: %02x %02x %02x %02x\n", cp[0], cp[1], cp[2], cp[3]);
++ }
++#endif
++}
++
++static int __init tc6393_ohci_init(void)
++{
++ int ret;
++
++ /*
++ * Request memory resources.
++ */
++// if (!request_mem_region(_USB_OHCI_OP_BASE, _USB_EXTENT, "usb-ohci"))
++// return -EBUSY;
++
++ tc6393_ohci_configure();
++ oc_mem_init(TC6393_RAM0_BASE, TC6393_RAM0_SIZE);
++
++ /*
++ * Initialise the generic OHCI driver.
++ */
++ ret = hc_add_ohci((struct pci_dev *)1, TC6393_IRQ_USBINT,
++ (void *)(TC6393_SYS_BASE+TC6393_USB_OHCI_OP_REG_BASE),
++ 0, &tc6393_ohci, "usb-ohci", "tc6393");
++
++#ifdef CONFIG_PM
++ pm_register(PM_SYS_DEV, PM_SYS_UNKNOWN, tc6393_ohci_pm_callback);
++#endif
++
++ if (misc_register(&tc6393_ohci_ctl_device))
++ printk("failed to register tc6393_ohci_ctl_device\n");
++
++// if (ret)
++// release_mem_region(_USB_OHCI_OP_BASE, _USB_EXTENT);
++
++ return ret;
++}
++
++static void __exit tc6393_ohci_exit(void)
++{
++ misc_deregister(&tc6393_ohci_ctl_device);
++
++#ifdef CONFIG_PM
++ pm_unregister_all(tc6393_ohci_pm_callback);
++#endif
++ hc_remove_ohci(tc6393_ohci);
++
++ /*
++ * Put the USB host controller into reset.
++ */
++ TC6393_SYS_REG(TC6393_SYS_FER) &= ~1;
++
++ /*
++ * Stop the USB clock.
++ */
++ TC6393_SYS_REG(TC6393_SYS_CCR) &= ~2;
++
++ /*
++ * Release memory resources.
++ */
++// release_mem_region(_USB_OHCI_OP_BASE, _USB_EXTENT);
++
++}
++
++module_init(tc6393_ohci_init);
++module_exit(tc6393_ohci_exit);
++
++
++#ifdef CONFIG_PM
++static void* tc6393_sram0_backup;
++static dma_addr_t tc6393_sram0_backup_phys;
++
++/* usb-ohci.c */
++#define OHCI_CONTROL_INIT \
++ (OHCI_CTRL_CBSR & 0x3) | OHCI_CTRL_IE | OHCI_CTRL_PLE
++extern spinlock_t usb_ed_lock;
++
++extern td_t * dl_reverse_done_list (ohci_t * ohci);
++extern void dl_done_list (ohci_t * ohci, td_t * td_list);
++extern int hc_start (ohci_t * ohci);
++extern int hc_reset (ohci_t * ohci);
++
++
++/* controller died; cleanup debris, then restart */
++/* must not be called from interrupt context */
++
++static void hc_restart (ohci_t *ohci)
++{
++ int temp;
++ int i;
++
++ ohci->disabled = 1;
++ ohci->sleeping = 0;
++ if (ohci->bus->root_hub)
++ usb_disconnect (&ohci->bus->root_hub);
++
++ /* empty the interrupt branches */
++ for (i = 0; i < NUM_INTS; i++) ohci->ohci_int_load[i] = 0;
++ for (i = 0; i < NUM_INTS; i++) ohci->hcca->int_table[i] = 0;
++
++ /* no EDs to remove */
++ ohci->ed_rm_list [0] = NULL;
++ ohci->ed_rm_list [1] = NULL;
++
++ /* empty control and bulk lists */
++ ohci->ed_isotail = NULL;
++ ohci->ed_controltail = NULL;
++ ohci->ed_bulktail = NULL;
++
++ if ((temp = hc_reset (ohci)) < 0 || (temp = hc_start (ohci)) < 0) {
++ err ("can't restart usb-%s, %d", ohci->ohci_dev->slot_name, temp);
++ } else
++ dbg ("restart usb-%s completed", ohci->ohci_dev->slot_name);
++}
++
++static unsigned int tc6393_usb_pm_uspw = 0;
++
++static int tc6393_ohci_pm_suspend(u32 state)
++{
++ ohci_t *ohci = tc6393_ohci;
++ unsigned long flags;
++
++ /* bus suspend */
++ if ((ohci->hc_control & OHCI_CTRL_HCFS) != OHCI_USB_OPER) {
++ dbg ("can't suspend usb-%s (state is %s)", ohci->slot_name,
++ hcfs2string (ohci->hc_control & OHCI_CTRL_HCFS));
++ return -EIO;
++ }
++
++ /* act as if usb suspend can always be used */
++ info ("USB suspend: usb-%s", ohci->slot_name);
++ ohci->sleeping = 1;
++
++ /* First stop processing */
++ spin_lock_irqsave (&usb_ed_lock, flags);
++ ohci->hc_control &= ~(OHCI_CTRL_PLE|OHCI_CTRL_CLE|OHCI_CTRL_BLE|OHCI_CTRL_IE);
++ writel (ohci->hc_control, &ohci->regs->control);
++ writel (OHCI_INTR_SF, &ohci->regs->intrstatus);
++ (void) readl (&ohci->regs->intrstatus);
++ spin_unlock_irqrestore (&usb_ed_lock, flags);
++
++ /* Wait a frame or two */
++ mdelay(1);
++ if (!readl (&ohci->regs->intrstatus) & OHCI_INTR_SF)
++ mdelay (1);
++
++ /* Enable remote wakeup */
++ writel (readl(&ohci->regs->intrenable) | OHCI_INTR_RD, &ohci->regs->intrenable);
++
++ /* Suspend chip and let things settle down a bit */
++ ohci->hc_control = OHCI_USB_SUSPEND;
++ writel (ohci->hc_control, &ohci->regs->control);
++#if 0
++ (void) readl (&ohci->regs->control);
++ mdelay (500); /* No schedule here ! */
++ switch (readl (&ohci->regs->control) & OHCI_CTRL_HCFS) {
++ case OHCI_USB_RESET:
++ dbg("Bus in reset phase ???");
++ break;
++ case OHCI_USB_RESUME:
++ dbg("Bus in resume phase ???");
++ break;
++ case OHCI_USB_OPER:
++ dbg("Bus in operational phase ???");
++ break;
++ case OHCI_USB_SUSPEND:
++ dbg("Bus suspended");
++ break;
++ }
++ tc6393_usb_pm_uspw = TC6393_USB_REG(TC6393_USB_SVPMCS);
++#else
++ /* Power Down */
++ tc6393_usb_pm_uspw = TC6393_USB_REG(TC6393_USB_SVPMCS);
++ TC6393_USB_REG(TC6393_USB_SVPMCS) |= TC6393_USB_PM_USPW1;
++ TC6393_USB_REG(TC6393_USB_SVPMCS) |= TC6393_USB_PM_USPW2;
++#endif
++
++ /* store SRAM */
++ tc6393_sram0_backup = consistent_alloc(GFP_KERNEL | GFP_DMA,
++ TC6393_RAM0_SIZE, &tc6393_sram0_backup_phys);
++ memcpy(tc6393_sram0_backup , TC6393_RAM0_BASE, TC6393_RAM0_SIZE);
++//memset(TC6393_RAM0_BASE, 0xff, TC6393_RAM0_SIZE);
++ /* device suspend */
++ TC6393_SYS_REG(TC6393_SYS_FER) &= ~1;
++ TC6393_SYS_REG(TC6393_SYS_CCR) &= ~2;
++
++ return 0;
++}
++
++static int tc6393_ohci_pm_resume(void)
++{
++ ohci_t *ohci = tc6393_ohci;
++ int temp;
++ unsigned long flags;
++ int ret = 0;
++
++#ifdef THREAD_RESUME
++ resume_thread_alive = 1;
++#endif
++
++ /* device resume */
++ tc6393_ohci_configure();
++
++ /* restore SRAM */
++ memcpy(TC6393_RAM0_BASE, tc6393_sram0_backup, TC6393_RAM0_SIZE);
++ consistent_free(tc6393_sram0_backup,
++ TC6393_RAM0_SIZE, tc6393_sram0_backup_phys);
++
++ /* Power On */
++ if ( !(tc6393_usb_pm_uspw & TC6393_USB_PM_USPW1) )
++ TC6393_USB_REG(TC6393_USB_SVPMCS) &= ~TC6393_USB_PM_USPW1;
++ if ( !(tc6393_usb_pm_uspw & TC6393_USB_PM_USPW2) )
++ TC6393_USB_REG(TC6393_USB_SVPMCS) &= ~TC6393_USB_PM_USPW2;
++
++ /* bus resume */
++ /* guard against multiple resumes */
++ atomic_inc (&ohci->resume_count);
++ if (atomic_read (&ohci->resume_count) != 1) {
++ err ("concurrent resumes for usb-%s", ohci->slot_name);
++ atomic_dec (&ohci->resume_count);
++#ifdef THREAD_RESUME
++ resume_thread_alive = 0;
++#endif
++ return 0;
++ }
++
++ /* did we suspend, or were we powered off? */
++ ohci->hc_control = readl (&ohci->regs->control);
++ temp = ohci->hc_control & OHCI_CTRL_HCFS;
++
++#ifdef DEBUG
++ /* the registers may look crazy here */
++ ohci_dump_status (ohci);
++#endif
++
++ switch (temp) {
++
++ case OHCI_USB_RESET: // lost power
++ info ("USB restart: usb-%s", ohci->slot_name);
++ hc_restart (ohci);
++ break;
++
++ case OHCI_USB_SUSPEND: // host wakeup
++ case OHCI_USB_RESUME: // remote wakeup
++ info ("USB continue: usb-%s from %s wakeup", ohci->slot_name,
++ (temp == OHCI_USB_SUSPEND)
++ ? "host" : "remote");
++ ohci->hc_control = OHCI_USB_RESUME;
++ writel (ohci->hc_control, &ohci->regs->control);
++ (void) readl (&ohci->regs->control);
++ mdelay (20); /* no schedule here ! */
++ /* Some controllers (lucent) need a longer delay here */
++ mdelay (15);
++ temp = readl (&ohci->regs->control);
++ temp = ohci->hc_control & OHCI_CTRL_HCFS;
++ if (temp != OHCI_USB_RESUME) {
++ err ("controller usb-%s won't resume", ohci->slot_name);
++ ohci->disabled = 1;
++#ifdef THREAD_RESUME
++ resume_thread_alive = 0;
++#endif
++ return -EIO;
++ }
++
++ /* Some chips likes being resumed first */
++ writel (OHCI_USB_OPER, &ohci->regs->control);
++ (void) readl (&ohci->regs->control);
++ mdelay (3);
++
++ /* Then re-enable operations */
++ spin_lock_irqsave (&usb_ed_lock, flags);
++ ohci->disabled = 0;
++ ohci->sleeping = 0;
++ ohci->hc_control = OHCI_CONTROL_INIT | OHCI_USB_OPER;
++ if (!ohci->ed_rm_list[0] && !ohci->ed_rm_list[1]) {
++ if (ohci->ed_controltail)
++ ohci->hc_control |= OHCI_CTRL_CLE;
++ if (ohci->ed_bulktail)
++ ohci->hc_control |= OHCI_CTRL_BLE;
++ }
++ writel (ohci->hc_control, &ohci->regs->control);
++ writel (OHCI_INTR_SF, &ohci->regs->intrstatus);
++ writel (OHCI_INTR_SF, &ohci->regs->intrenable);
++ /* Check for a pending done list */
++ writel (OHCI_INTR_WDH, &ohci->regs->intrdisable);
++ (void) readl (&ohci->regs->intrdisable);
++ spin_unlock_irqrestore (&usb_ed_lock, flags);
++ if (ohci->hcca->done_head)
++ dl_done_list (ohci, dl_reverse_done_list (ohci));
++ writel (OHCI_INTR_WDH, &ohci->regs->intrenable);
++ writel (OHCI_BLF, &ohci->regs->cmdstatus); /* start bulk list */
++ writel (OHCI_CLF, &ohci->regs->cmdstatus); /* start Control list */
++ break;
++
++ default:
++ warn ("odd resume for usb-%s", ohci->slot_name);
++ }
++
++ /* controller is operational, extra resumes are harmless */
++ atomic_dec (&ohci->resume_count);
++
++#ifdef THREAD_RESUME
++ resume_thread_alive = 0;
++#endif
++ return ret;
++}
++
++static int
++tc6393_ohci_pm_callback(struct pm_dev *pm_device, pm_request_t rqst, void *data)
++{
++ int error = 0;
++
++ switch (rqst) {
++ case PM_SAVE_STATE:
++ break;
++ case PM_SUSPEND:
++#ifdef THREAD_RESUME
++ while(resume_thread_alive) udelay(100);
++#endif
++ error = tc6393_ohci_pm_suspend((u32)data);
++ break;
++ case PM_RESUME:
++#ifdef THREAD_RESUME
++ kernel_thread(tc6393_ohci_pm_resume, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
++ error = 0;
++#else
++ error = tc6393_ohci_pm_resume();
++#endif
++ break;
++ default:
++ break;
++ }
++ return error;
++}
++#endif
+diff -Nur linux_c860_org/drivers/usb/usb-ohci.c linux/drivers/usb/usb-ohci.c
+--- linux_c860_org/drivers/usb/usb-ohci.c 2002-08-26 14:45:02.000000000 +0900
++++ linux/drivers/usb/usb-ohci.c 2004-06-10 21:09:10.000000000 +0900
+@@ -12,6 +12,7 @@
+ *
+ * History:
+ *
++ * 2004/02/26 Lineo Solutions, Inc. for Tosa (SHARP)
+ * 2001/09/19 USB_ZERO_PACKET support (Jean Tourrilhes)
+ * 2001/07/17 power management and pmac cleanup (Benjamin Herrenschmidt)
+ * 2001/03/24 td/ed hashing to remove bus_to_virt (Steve Longerbeam);
+@@ -89,7 +90,7 @@
+ #define OHCI_UNLINK_TIMEOUT (HZ / 10)
+
+ static LIST_HEAD (ohci_hcd_list);
+-static spinlock_t usb_ed_lock = SPIN_LOCK_UNLOCKED;
++spinlock_t usb_ed_lock = SPIN_LOCK_UNLOCKED;
+
+
+ /*-------------------------------------------------------------------------*/
+@@ -1295,7 +1296,7 @@
+ err("internal OHCI error: TD index > length");
+ return;
+ }
+-if (data & (1 << 20)) panic("td_fill: A20 = 1: %08x\n", data);
++//if (data & (1 << 20)) panic("td_fill: A20 = 1: %08x\n", data);
+
+ /* use this td as the next dummy */
+ td_pt = urb_priv->td [index];
+@@ -1509,7 +1510,7 @@
+ /* replies to the request have to be on a FIFO basis so
+ * we reverse the reversed done-list */
+
+-static td_t * dl_reverse_done_list (ohci_t * ohci)
++td_t * dl_reverse_done_list (ohci_t * ohci)
+ {
+ __u32 td_list_hc;
+ td_t * td_rev = NULL;
+@@ -1657,7 +1658,7 @@
+
+ /* td done list */
+
+-static void dl_done_list (ohci_t * ohci, td_t * td_list)
++void dl_done_list (ohci_t * ohci, td_t * td_list)
+ {
+ td_t * td_list_next = NULL;
+ ed_t * ed;
+@@ -2126,7 +2127,7 @@
+
+ /* reset the HC and BUS */
+
+-static int hc_reset (ohci_t * ohci)
++int hc_reset (ohci_t * ohci)
+ {
+ int timeout = 30;
+ int smm_timeout = 50; /* 0,5 sec */
+@@ -2171,7 +2172,7 @@
+ * enable interrupts
+ * connect the virtual root hub */
+
+-static int hc_start (ohci_t * ohci)
++int hc_start (ohci_t * ohci)
+ {
+ __u32 mask;
+ unsigned int fminterval;
+@@ -2418,7 +2419,8 @@
+ ohci_mem_cleanup (ohci);
+
+ /* unmap the IO address space */
+- iounmap (ohci->regs);
++ if ((int)ohci->ohci_dev != 1)
++ iounmap (ohci->regs);
+
+ pci_free_consistent (ohci->ohci_dev, sizeof *ohci->hcca,
+ ohci->hcca, ohci->hcca_dma);
+@@ -2432,7 +2434,7 @@
+ */
+ int __devinit
+ hc_add_ohci(struct pci_dev *dev, int irq, void *mem_base, unsigned long flags,
+- ohci_t **ohci, const char *name, const char *slot_name)
++ ohci_t **ohcip, const char *name, const char *slot_name)
+ {
+ char buf[8], *bufp = buf;
+ ohci_t * ohci;
+@@ -2447,6 +2449,7 @@
+ (unsigned long) mem_base, bufp);
+
+ ohci = hc_alloc_ohci (dev, mem_base);
++ *ohcip = ohci;
+ if (!ohci) {
+ return -ENOMEM;
+ }
+diff -Nur linux_c860_org/drivers/usb/usb-ohci.h linux/drivers/usb/usb-ohci.h
+--- linux_c860_org/drivers/usb/usb-ohci.h 2002-08-26 14:45:02.000000000 +0900
++++ linux/drivers/usb/usb-ohci.h 2004-06-10 21:09:10.000000000 +0900
+@@ -5,8 +5,15 @@
+ * (C) Copyright 2000-2001 David Brownell <dbrownell@users.sourceforge.net>
+ *
+ * usb-ohci.h
++ *
++ * ChangeLog:
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa (SHARP)
+ */
+
++#if defined(CONFIG_USB_USE_INTERNAL_MEMORY)
++#include "mem-onchip.h"
++#endif
++
+
+ static int cc_to_error[16] = {
+
+diff -Nur linux_c860_org/drivers/usb/usbkbd.c linux/drivers/usb/usbkbd.c
+--- linux_c860_org/drivers/usb/usbkbd.c 2002-08-26 14:39:14.000000000 +0900
++++ linux/drivers/usb/usbkbd.c 2004-06-10 21:09:10.000000000 +0900
+@@ -7,7 +7,11 @@
+ *
+ * Sponsored by SuSE
+ */
+-
++/*
++ * ChangeLog:
++ * 1-Nov-2003 Sharp Corporation for Tosa
++ *
++ */
+ /*
+ * 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
+@@ -46,6 +50,26 @@
+ MODULE_DESCRIPTION( DRIVER_DESC );
+ MODULE_LICENSE("GPL");
+
++#ifdef CONFIG_ARCH_PXA_TOSA
++static unsigned char usb_kbd_keycode[256] = {
++ 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
++ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 41, 42,
++ 43, 44, 45, 46, 47, 48, 49, 50, 28, 34, 31, 65, 92, 51, 52, 55,
++ 54, 0, 97, 95, 96, 70, 98, 99,100, 60, 33, 58, 94, 39, 88, 89,
++ 90,110,117,120, 30, 40,115, 0, 0, 0,104,106, 81,105,107, 124,
++ 121,123,122, 32, 82, 83, 85, 86, 87, 71, 72, 73, 74, 75, 76, 77,
++ 78, 79, 80, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0,101, 69, 53, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 56, 27, 57, 29,111,112,113,114, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++};
++#else
+ static unsigned char usb_kbd_keycode[256] = {
+ 0, 0, 0, 0, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38,
+ 50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44, 2, 3,
+@@ -64,6 +88,7 @@
+ 29, 42, 56,125, 97, 54,100,126,164,166,165,163,161,115,114,113,
+ 150,158,159,128,136,177,178,176,142,152,173,140
+ };
++#endif
+
+ struct usb_kbd {
+ struct input_dev dev;
+@@ -84,6 +109,12 @@
+
+ if (urb->status) return;
+
++#if 0
++ printk("kbd_irq[%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x]\n",
++ kbd->new[0],kbd->new[1],kbd->new[2],kbd->new[3],kbd->new[4],
++ kbd->new[5],kbd->new[6],kbd->new[7],kbd->new[8]);
++#endif
++
+ for (i = 0; i < 8; i++)
+ input_report_key(&kbd->dev, usb_kbd_keycode[i + 224], (kbd->new[0] >> i) & 1);
+
+@@ -200,7 +231,11 @@
+
+ kbd->usbdev = dev;
+
++#ifdef CONFIG_ARCH_SHARP_SL
++ kbd->dev.evbit[0] = BIT(EV_KEY) | BIT(EV_LED);
++#else
+ kbd->dev.evbit[0] = BIT(EV_KEY) | BIT(EV_LED) | BIT(EV_REP);
++#endif
+ kbd->dev.ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL) | BIT(LED_COMPOSE) | BIT(LED_KANA);
+
+ for (i = 0; i < 255; i++)
+diff -Nur linux_c860_org/drivers/video/Config.in linux/drivers/video/Config.in
+--- linux_c860_org/drivers/video/Config.in 2002-09-11 12:02:37.000000000 +0900
++++ linux/drivers/video/Config.in 2004-06-10 21:09:10.000000000 +0900
+@@ -10,6 +10,21 @@
+ if [ "$CONFIG_FB" = "y" ]; then
+ define_bool CONFIG_DUMMY_CONSOLE y
+ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
++ bool "UNICON Support(EXPERIMENTAL)" CONFIG_UNICON
++ if [ "$CONFIG_UNICON" = "y" ]; then
++ tristate "Double Byte GB encode (module only)" CONFIG_UNICON_GB
++ if [ "$CONFIG_UNICON_GB" = "y" ]; then
++ define_bool CONFIG_UNICON_GB m
++ fi
++ tristate "Double Byte SJIS encode (module only)" CONFIG_UNICON_SJIS
++ if [ "$CONFIG_UNICON_SJIS" = "y" ]; then
++ define_bool CONFIG_UNICON_SJIS m
++ fi
++ tristate "Double Byte EUCJP encode (module only)" CONFIG_UNICON_EUCJP
++ if [ "$CONFIG_UNICON_EUCJP" = "y" ]; then
++ define_bool CONFIG_UNICON_EUCJP m
++ fi
++ fi
+ if [ "$CONFIG_PCI" = "y" ]; then
+ tristate ' nVidia Riva support (EXPERIMENTAL)' CONFIG_FB_RIVA
+ fi
+@@ -58,7 +73,9 @@
+ dep_bool ' Cached FB support' CONFIG_POODLE_CONSISTENT_ALLOC $CONFIG_FB_POODLE
+ fi
+ dep_bool ' Corgi LCD support' CONFIG_FB_CORGI $CONFIG_ARCH_PXA_CORGI
++ dep_bool ' Tosa LCD support' CONFIG_FB_TOSA $CONFIG_ARCH_PXA_TOSA
+ dep_bool ' SHARP LOGO screen support' CONFIG_SHARP_LOGO_SCREEN $CONFIG_ARCH_SHARP_SL
++ dep_bool ' Boot fastsysclk 100MHz. (EXPERIMENTAL)' CONFIG_SL_SYSCLK100 $CONFIG_ARCH_PXA_CORGI
+ fi
+ dep_tristate ' CyberPro 2000/2010/5000 support' CONFIG_FB_CYBER2000 $CONFIG_PCI
+ if [ "$CONFIG_APOLLO" = "y" ]; then
+diff -Nur linux_c860_org/drivers/video/Makefile linux/drivers/video/Makefile
+--- linux_c860_org/drivers/video/Makefile 2002-10-04 21:01:43.000000000 +0900
++++ linux/drivers/video/Makefile 2004-06-10 21:09:10.000000000 +0900
+@@ -41,6 +41,10 @@
+ obj-$(CONFIG_PPC) += macmodes.o
+ endif
+
++obj-$(CONFIG_UNICON_GB) += encode-gb.o
++obj-$(CONFIG_UNICON_BIG5) += encode-big5.o
++obj-$(CONFIG_UNICON_SJIS) += encode-sjis.o
++obj-$(CONFIG_UNICON_EUCJP) += encode-eucjp.o
+ obj-$(CONFIG_FB_ACORN) += acornfb.o
+ obj-$(CONFIG_FB_AMIGA) += amifb.o
+ obj-$(CONFIG_FB_PM2) += pm2fb.o fbgen.o
+@@ -91,7 +95,7 @@
+ obj-$(CONFIG_FB_COTULLA) += cotulla_fb.o discovery_frontlight.o
+ obj-$(CONFIG_FB_POODLE) += cotulla_fb.o poodle_frontlight.o
+ obj-$(CONFIG_FB_CORGI) += w100fb.o fbgen.o corgi_backlight.o
+-
++obj-$(CONFIG_FB_TOSA) += tc6393fb.o fbgen.o tosa_backlight.o
+
+ subdir-$(CONFIG_FB_MATROX) += matrox
+ ifeq ($(CONFIG_FB_MATROX),y)
+diff -Nur linux_c860_org/drivers/video/encode-eucjp.c linux/drivers/video/encode-eucjp.c
+--- linux_c860_org/drivers/video/encode-eucjp.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/video/encode-eucjp.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,67 @@
++/*
++ * linux/video/encode_eucjp.c
++ *
++ * Copyright (C) 2000 Kazuhide Takahashi
++ * HOLON Inc.
++ * Copyright (C) 1999 Christopher Li, Jim Chen
++ * GNU/Linux Research Center
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive
++ * for more details.
++ *
++ *
++ */
++
++
++#include <linux/module.h>
++#include <linux/fb_doublebyte.h>
++#include "font_jis16.h"
++#define min1 0xa1
++#define max1 0xfe
++
++
++int is_left(int c)
++{
++ return ( c >= min1 && c<=max1);
++}
++int is_right(int c)
++{
++ return ( c >= min1 && c<=max1);
++}
++int index_euc (int left, int right)
++{
++ if ( left == 0x8E )
++ left = 0;
++ else
++ left &= 0x7F;
++ right &= 0x7F;
++
++ if (left > 0x29)
++ return ((right - 0x40 + (left - 0x25) * 96) << 5);
++ else
++ return ((right - 0x20 + (left - 0x20) * 96) << 5);
++}
++struct double_byte db_gb =
++{
++ 0,
++ "EUCJP",
++ is_left,
++ is_right,
++ index_euc,
++ 16,16,
++ max_jis16,
++ font_jis16
++};
++
++int init_module(void)
++{
++ if (doublebyte_default) return 1;
++ doublebyte_default = &db_gb;
++ return 0;
++}
++
++void cleanup_module(void)
++{
++ doublebyte_default = (void*) 0;
++}
+diff -Nur linux_c860_org/drivers/video/encode-gb.c linux/drivers/video/encode-gb.c
+--- linux_c860_org/drivers/video/encode-gb.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/video/encode-gb.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,50 @@
++/*
++ * linux/video/encode_gb.c
++ *
++ * Copyright (C) 1999 Christopher Li, Jim Chen
++ * GNU/Linux Research Center
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive
++ * for more details.
++ *
++ *
++ */
++
++
++#include <linux/module.h>
++#include <linux/fb_doublebyte.h>
++#include "font_gb16.h"
++#define min1 0xa1
++#define max1 0xfe
++int index_gb(int left, int right)
++{
++ return ((left-min1)*94+right-min1) << 5;
++}
++int is_hz(int c)
++{
++ return ( c >= min1 && c<=max1);
++}
++struct double_byte db_gb =
++{
++ 0,
++ "GB",
++ is_hz,
++ is_hz,
++ index_gb,
++ 16,16,
++ max_gb16,
++ font_gb16
++};
++
++int init_module(void)
++{
++ if (doublebyte_default) return 1;
++ doublebyte_default = &db_gb;
++ return 0;
++}
++
++void cleanup_module(void)
++{
++ doublebyte_default = (void*) 0;
++}
+diff -Nur linux_c860_org/drivers/video/encode-sjis.c linux/drivers/video/encode-sjis.c
+--- linux_c860_org/drivers/video/encode-sjis.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/video/encode-sjis.c 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,84 @@
++/*
++ * linux/video/encode_sjis.c
++ *
++ * Copyright (C) 2000 Kazuhide Takahashi
++ * HOLON Inc.
++ * Copyright (C) 1999 Christopher Li, Jim Chen
++ * GNU/Linux Research Center
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive
++ * for more details.
++ *
++ *
++ */
++
++
++#include <linux/module.h>
++#include <linux/fb_doublebyte.h>
++#include "font_jis16.h"
++#define min1 0x81
++#define max1 0xfc
++
++
++int is_left(int c)
++{
++ return ( (c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xfc) );
++}
++int is_right(int c)
++{
++ return ( (c >= 0x40 && c <= 0x7e) || (c >= 0x80 && c <= 0xfc) );
++}
++int index_sjis (int left, int right)
++{
++ int ch1, ch2;
++
++ if ( !is_left(left) || !is_right(right) ) return -512;
++
++ ch1 = left;
++ ch2 = right;
++
++ if ( ch1 <= 0x9f )
++ ch1 -= 0x71;
++ else
++ ch1 -= 0xb1;
++ ch1 *= 2;
++ ++ch1;
++
++ if ( ch2 >= 0x7f )
++ --ch2;
++ if ( ch2 >= 0x9e ) {
++ ch2 -= 0x7d;
++ ++ch1;
++ } else {
++ ch2 -= 0x1f;
++ }
++
++ if (ch1 > 0x29)
++ return ((ch2 - 0x40 + (ch1 - 0x25) * 96) << 5);
++ else
++ return ((ch2 - 0x20 + (ch1 - 0x20) * 96) << 5);
++}
++struct double_byte db_gb =
++{
++ 0,
++ "SJIS",
++ is_left,
++ is_right,
++ index_sjis,
++ 16,16,
++ max_jis16,
++ font_jis16
++};
++
++int init_module(void)
++{
++ if (doublebyte_default) return 1;
++ doublebyte_default = &db_gb;
++ return 0;
++}
++
++void cleanup_module(void)
++{
++ doublebyte_default = (void*) 0;
++}
+diff -Nur linux_c860_org/drivers/video/fbcon-cfb16.c linux/drivers/video/fbcon-cfb16.c
+--- linux_c860_org/drivers/video/fbcon-cfb16.c 2003-01-14 14:43:43.000000000 +0900
++++ linux/drivers/video/fbcon-cfb16.c 2004-06-10 21:09:10.000000000 +0900
+@@ -13,6 +13,7 @@
+ * 30-Jul-2002 Lineo Japan, Inc. for 2.4.18
+ * 31-Oct-2002 SHARP
+ * added support for rotation logo screen on SHARP SL-C700
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+ #include <linux/module.h>
+@@ -217,9 +218,11 @@
+
+ width *= fontwidth(p)/4;
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++#if 0 /* c700 bug fix 0 */
+ if (width * 8 == bytes)
+ rectfill(dest, 1, lines * width * 4, bgx, bytes);
+ else
++#endif
+ rectfill(dest, lines, width * 4, bgx, bytes);
+ #else
+ if (width * 8 == bytes)
+@@ -240,10 +243,17 @@
+ u8 *dest, *cdat, bits;
+ int bytes = p->next_line, rows;
+ u32 eorx, fgx, bgx;
++#ifdef CONFIG_UNICON
++ u8 *temp;
++#endif
+
+ #if defined(CONFIG_FBCON_ROTATE_R)
+ dest = p->screen_base +
++#ifdef CONFIG_UNICON
++ yy * fontwidth(p) * bytes + (p->var.xres - (xx+1) * fontheight(p) - 1) * 2;
++#else
+ yy * fontwidth(p) * bytes + (p->var.xres - xx * fontheight(p) - 1) * 2;
++#endif
+ #elif defined(CONFIG_FBCON_ROTATE_L)
+ dest = p->screen_base +
+ (p->var.yres - yy * fontwidth(p) - 1) * bytes + xx * fontheight(p) * 2;
+@@ -262,6 +272,32 @@
+ case 8:
+ cdat = p->fontdata + (c & p->charmask) * fontheight(p);
+ #if defined(CONFIG_FBCON_ROTATE_R)
++#ifdef CONFIG_UNICON
++ rows = fontheight(p);
++ temp = dest+rows*2;
++ for (; rows--; dest += 2,temp -= 2) {
++ bits = *cdat++;
++ fb_writew((tab_cfb16[bits >> 7 & 1] & eorx) ^ bgx,
++ temp);
++ fb_writew((tab_cfb16[bits >> 6 & 1] & eorx) ^ bgx,
++ temp+1*bytes);
++ fb_writew((tab_cfb16[bits >> 5 & 1] & eorx) ^ bgx,
++ temp+2*bytes);
++ fb_writew((tab_cfb16[bits >> 4 & 1] & eorx) ^ bgx,
++ temp+3*bytes);
++ if (fontwidth(p) == 8) {
++ fb_writew((tab_cfb16[bits >> 3 & 1] & eorx) ^ bgx,
++ temp+4*bytes);
++ fb_writew((tab_cfb16[bits >> 2 & 1] & eorx) ^ bgx,
++ temp+5*bytes);
++ fb_writew((tab_cfb16[bits >> 1 & 1] & eorx) ^ bgx,
++ temp+6*bytes);
++ fb_writew((tab_cfb16[bits & 1] & eorx) ^ bgx,
++ temp+7*bytes);
++ }
++ }
++ dest = temp;
++#else
+ for (rows = fontheight(p); rows--; dest += 2) {
+ bits = *cdat++;
+ fb_writew((tab_cfb16[bits >> 7 & 1] & eorx) ^ bgx,
+@@ -283,6 +319,7 @@
+ dest+7*bytes);
+ }
+ }
++#endif
+ #elif defined(CONFIG_FBCON_ROTATE_L)
+ for (rows = fontheight(p); rows--; dest += 2) {
+ bits = *cdat++;
+@@ -734,6 +771,15 @@
+ rectfill(p->screen_base +
+ (p->var.xres - (p->var.xoffset + bottom_start) - 1) * 2,
+ right_start, bottom_width, bgx, bytes);
++#else
++#ifdef CONFIG_FB_TOSA /* re_check */
++ if (!bottom_only && (right_width = p->var.yres - right_start))
++ rectfill(p->screen_base + right_start * bytes + (p->var.xres - 1) * 2,
++ right_width, p->var.xres_virtual, bgx, bytes);
++ if ((bottom_width = p->var.xres - bottom_start))
++ rectfill(p->screen_base +
++ (p->var.xres - (p->var.xoffset + bottom_start) - 1) * 2,
++ right_start, bottom_width, bgx, bytes);
+ #else // general R
+ if (!bottom_only && (right_width = p->var.yres - right_start))
+ rectfill(p->screen_base + right_start * bytes + (p->var.xres - 1) * 2,
+@@ -743,6 +789,7 @@
+ (p->var.xres - (p->var.xoffset + bottom_start) - 1) * 2,
+ right_start, bottom_width, bgx, bytes);
+ #endif
++#endif
+ #elif defined(CONFIG_FBCON_ROTATE_L)
+ #ifdef CONFIG_FB_CORGI
+ if (!bottom_only && (right_width = p->var.yres - right_start))
+@@ -752,6 +799,15 @@
+ rectfill(p->screen_base + (p->var.yres - 1) * bytes +
+ (p->var.xoffset + bottom_start) * 2,
+ right_start, bottom_width, bgx, bytes);
++#else
++#ifdef CONFIG_FB_TOSA /* re_check */
++ if (!bottom_only && (right_width = p->var.yres - right_start))
++ rectfill(p->screen_base + (p->var.yres - right_start - 1) * bytes,
++ right_width, p->var.xres_virtual, bgx, bytes);
++ if ((bottom_width = p->var.xres - bottom_start))
++ rectfill(p->screen_base + (p->var.yres - 1) * bytes +
++ (p->var.xoffset + bottom_start) * 2,
++ right_start, bottom_width, bgx, bytes);
+ #else // general L
+ if (!bottom_only && (right_width = p->var.yres - right_start))
+ rectfill(p->screen_base + (p->var.yres - right_start - 1) * bytes,
+@@ -761,6 +817,7 @@
+ (p->var.xoffset + bottom_start) * 2,
+ right_start, bottom_width, bgx, bytes);
+ #endif
++#endif
+ #else
+ if (!bottom_only && (right_width = p->var.xres-right_start))
+ rectfill(p->screen_base+right_start*2, right_width,
+diff -Nur linux_c860_org/drivers/video/fbcon.c linux/drivers/video/fbcon.c
+--- linux_c860_org/drivers/video/fbcon.c 2003-01-14 14:44:30.000000000 +0900
++++ linux/drivers/video/fbcon.c 2004-06-10 21:09:10.000000000 +0900
+@@ -66,6 +66,7 @@
+ * added support for rotation logo screen on SHARP SL-C700
+ * 08-Nov-2002 SHARP
+ * SHARP logo screen modification
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+ #undef FBCONDEBUG
+@@ -78,6 +79,11 @@
+ #include <linux/kernel.h>
+ #include <linux/delay.h> /* MSch: for IRQ probe */
+ #include <linux/tty.h>
++
++#ifdef CONFIG_UNICON
++#include <linux/fb_doublebyte.h>
++#endif
++
+ #include <linux/console.h>
+ #include <linux/string.h>
+ #include <linux/kd.h>
+@@ -668,7 +674,12 @@
+ if (con == fg_console && p->type != FB_TYPE_TEXT) {
+ if (fbcon_softback_size) {
+ if (!softback_buf) {
++#ifndef CONFIG_UNICON
+ softback_buf = (unsigned long)kmalloc(fbcon_softback_size, GFP_KERNEL);
++#else
++ softback_buf = (unsigned long)kmalloc(fbcon_softback_size*2, GFP_KERNEL);
++#endif
++
+ if (!softback_buf) {
+ fbcon_softback_size = 0;
+ softback_top = 0;
+@@ -816,11 +827,18 @@
+ (p->var.yres_virtual % fontwidth(p) < p->var.yres % fontwidth(p)))
+ p->vrows--;
+ #else
++#ifdef CONFIG_FB_TOSA /* re_check */
++ p->vrows = p->var.yres_virtual / fontwidth(p);
++ if ((p->var.yres % fontwidth(p)) &&
++ (p->var.yres_virtual % fontwidth(p) < p->var.yres % fontwidth(p)))
++ p->vrows--;
++#else
+ p->vrows = p->var.xres_virtual / fontheight(p);
+ if ((p->var.xres % fontheight(p)) &&
+ (p->var.xres_virtual % fontheight(p) < p->var.xres % fontheight(p)))
+ p->vrows--;
+ #endif
++#endif
+ #else
+ p->vrows = p->var.yres_virtual/fontheight(p);
+ if ((p->var.yres % fontheight(p)) &&
+@@ -916,6 +934,27 @@
+ * restriction is simplicity & efficiency at the moment.
+ */
+
++#ifdef CONFIG_UNICON
++static inline unsigned short * hibyte_pos(struct vc_data * conp,unsigned short* p)
++{
++ unsigned long pos=(long)p;
++
++ if (pos >= conp->vc_origin && pos < conp->vc_scr_end) {
++ /* pos in the vc buffer - Chrisl 99.11.12*/
++ return (unsigned short*)(pos+conp->vc_screenbuf_size);
++ } else if (conp->vc_num == fg_console){
++ /*&& softback_lines,because the scroll will first change
++ softback_lines, then call this function, so it is ignored here
++ -JimChen 99.11.12*/
++ return (unsigned short*)(pos+fbcon_softback_size);
++ } else {
++ /* Should not happen */
++ printk("Warnning, changing not active console\n");
++ return p;
++ }
++}
++#endif
++
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ static __inline__ int real_x(struct display *p, int xpos)
+ {
+@@ -993,6 +1032,60 @@
+ vbl_cursor_cnt = CURSOR_DRAW_DELAY;
+ }
+
++#ifdef CONFIG_UNICON
++struct double_byte * doublebyte_default = NULL;
++EXPORT_SYMBOL(doublebyte_default);
++/* ypos is absolute y(relative to video buffer), not y in screen coordinate,
++ and the validation is assured by the caller */
++#if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++void fbcon_putc_tl(struct vc_data *conp, int c, int xpos, int ypos)
++#else
++void fbcon_putc_tl(struct vc_data *conp, int c, int ypos, int xpos)
++#endif
++{
++ int unit = conp->vc_num;
++ struct display *p = &fb_display[unit];
++ int extendedchar;
++ u_char * fontdata_save;
++
++ if (!doublebyte_default){
++#if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++ p->dispsw->putc(conp, p, c&0xffff, xpos, ypos);
++#else
++ p->dispsw->putc(conp, p, c&0xffff, ypos, xpos);
++#endif
++ return;
++ }
++ extendedchar = c & (DB_VALIDATE<<16);
++ fontdata_save = p -> fontdata;
++ if (extendedchar) {
++ int index;
++ if ( c & (DB_RIGHT_MASK << 16)) {// right half
++ index = doublebyte_default->font_index((c>>16)&0xff, (c&0xff)) + 16;
++ } else {
++ index = doublebyte_default->font_index((c&0xff),(c>>16)&0xff);
++ }
++ //printk("<6>%d %x",(unsigned long)p->fontdata-(unsigned long) font_gb16,c);
++ if (index >=0 && index < doublebyte_default->charcount) {
++ p->fontdata = doublebyte_default->font_data +index;
++ c = (c & 0xff00);
++ }else c = c & 0xffff;
++ } else {
++ c = c & 0xffff;
++ }
++
++#if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++ p->dispsw->putc(conp, p, c, xpos, ypos);
++#else
++ p->dispsw->putc(conp, p, c, ypos, xpos);
++#endif
++
++ if (extendedchar) {
++ p->fontdata = fontdata_save;
++ }
++}
++EXPORT_SYMBOL(fbcon_putc_tl);
++#endif
+
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ static void fbcon_putc(struct vc_data *conp, int c, int xpos, int ypos)
+@@ -1019,16 +1112,39 @@
+ redraw_cursor = 1;
+ }
+
++#ifdef CONFIG_UNICON
++#if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++ fbcon_putc_tl(conp, c, real_x(p, xpos), ypos);
++#else
++ fbcon_putc_tl(conp, c, real_y(p, ypos), xpos);
++#endif
++#else
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ p->dispsw->putc(conp, p, c, real_x(p, xpos), ypos);
+ #else
+ p->dispsw->putc(conp, p, c, real_y(p, ypos), xpos);
+ #endif
++#endif
+
+ if (redraw_cursor)
+ vbl_cursor_cnt = CURSOR_DRAW_DELAY;
+ }
+
++#ifdef CONFIG_UNICON
++//ypos is absolute pos.
++static void fbcon_putcs_tl(struct vc_data *conp, const unsigned short *s, int count,
++ int ypos, int xpos)
++{
++ const unsigned short *str=s;
++
++ while (count--) {
++ fbcon_putc_tl(conp, (scr_readw(hibyte_pos(conp,(unsigned short *)str))<<16)|scr_readw(str),
++ ypos, xpos);
++ str++;
++ xpos++;
++ }
++}
++#endif
+
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ static void fbcon_putcs(struct vc_data *conp, const unsigned short *s, int count, int xpos, int ypos)
+@@ -1057,11 +1173,19 @@
+ cursor_undrawn();
+ redraw_cursor = 1;
+ }
++#ifndef CONFIG_UNICON
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ p->dispsw->putcs(conp, p, s, count, real_x(p, xpos), ypos);
+ #else
+ p->dispsw->putcs(conp, p, s, count, real_y(p, ypos), xpos);
+ #endif
++#else
++#if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++ fbcon_putcs_tl(conp,s,count,real_x(p,xpos),ypos);
++#else
++ fbcon_putcs_tl(conp,s,count,real_y(p,ypos),xpos);
++#endif
++#endif
+ if (redraw_cursor)
+ vbl_cursor_cnt = CURSOR_DRAW_DELAY;
+ }
+@@ -1362,6 +1486,9 @@
+ unsigned short *start;
+ unsigned short *le;
+ unsigned short c;
++#ifdef CONFIG_UNICON
++ unsigned short c_ext;
++#endif
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ int y = 0;
+ #else
+@@ -1373,30 +1500,53 @@
+ le = advance_row(s, 1);
+ do {
+ c = scr_readw(s);
++#ifdef CONFIG_UNICON
++ c_ext = scr_readw(hibyte_pos(conp,s));
++#endif
+ if (attr != (c & 0xff00)) {
+ attr = c & 0xff00;
+ if (s > start) {
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, s - start,
+ real_x(p, line), y);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_x(p,line),y);
++#endif
+ y += s - start;
+ #else
+- p->dispsw->putcs(conp, p, start, s - start,
+- real_y(p, line), x);
++#ifndef CONFIG_UNICON
++ p->dispsw->putcs(conp, p, start, s - start,
++ real_y(p, line), x);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_y(p,line),x);
++#endif
+ x += s - start;
+ #endif
+ start = s;
+ }
+ }
++#ifndef CONFIG_UNICON
+ if (c == scr_readw(d)) {
++#else
++ if (c == scr_readw(d) && c_ext == scr_readw(hibyte_pos(conp,d))) {
++#endif
+ if (s > start) {
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, s - start,
+ real_x(p, line), y);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_x(p,line),y);
++#endif
+ y += s - start + 1;
+ #else
+- p->dispsw->putcs(conp, p, start, s - start,
+- real_y(p, line), x);
++#ifndef CONFIG_UNICON
++ p->dispsw->putcs(conp, p, start, s - start,
++ real_y(p, line), x);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_y(p,line),x);
++#endif
+ x += s - start + 1;
+ #endif
+ start = s + 1;
+@@ -1414,9 +1564,17 @@
+ } while (s < le);
+ if (s > start)
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, s - start, real_x(p, line), y);
+ #else
++ fbcon_putcs_tl(conp,start,s-start,real_x(p,line),y);
++#endif
++#else
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, s - start, real_y(p, line), x);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_y(p,line),x);
++#endif
+ #endif
+ line++;
+ if (d == (u16 *)softback_end)
+@@ -1441,6 +1599,9 @@
+ unsigned short *start = s;
+ unsigned short *le = advance_row(s, 1);
+ unsigned short c;
++#ifdef CONFIG_UNICON
++ unsigned short c_ext;
++#endif
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ int y = 0;
+ #else
+@@ -1450,30 +1611,53 @@
+
+ do {
+ c = scr_readw(s);
++#ifdef CONFIG_UNICON
++ c_ext = scr_readw(hibyte_pos(conp,s));
++#endif
+ if (attr != (c & 0xff00)) {
+ attr = c & 0xff00;
+ if (s > start) {
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, s - start,
+ real_x(p, line), y);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_x(p,line),y);
++#endif
+ y += s - start;
+ #else
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, s - start,
+ real_y(p, line), x);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_y(p,line),x);
++#endif
+ x += s - start;
+ #endif
+ start = s;
+ }
+ }
++#ifndef CONFIG_UNICON
+ if (c == scr_readw(d)) {
++#else
++ if (c == scr_readw(d) && c_ext == scr_readw(hibyte_pos(conp,d))) {
++#endif
+ if (s > start) {
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, s - start,
+ real_x(p, line), y);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_x(p,line),y);
++#endif
+ y += s - start + 1;
+ #else
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, s - start,
+ real_y(p, line), x);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_y(p,line),x);
++#endif
+ x += s - start + 1;
+ #endif
+ start = s + 1;
+@@ -1487,17 +1671,28 @@
+ }
+ }
+ scr_writew(c, d);
++#ifdef CONFIG_UNICON
++ scr_writew(scr_readw(s+(conp->vc_screenbuf_size>>1)),d+(conp->vc_screenbuf_size>>1));
++#endif
+ console_conditional_schedule();
+ s++;
+ d++;
+ } while (s < le);
+ if (s > start)
++#ifndef CONFIG_UNICON
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ p->dispsw->putcs(conp, p, start, s - start, real_x(p, line), y);
+ #else
+ p->dispsw->putcs(conp, p, start, s - start, real_y(p, line), x);
+ #endif
+ console_conditional_schedule();
++#else
++#if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++ fbcon_putcs_tl(conp,start,s-start,real_x(p,line),y);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_y(p,line),x);
++#endif
++#endif
+ if (offset > 0)
+ line++;
+ else {
+@@ -1603,10 +1798,18 @@
+ attr = c & 0xff00;
+ if (d > start) {
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, d - start, dx, y);
++#else
++ fbcon_putcs_tl(conp,start,d-start,dx,y);
++#endif
+ y += d - start;
+ #else
+- p->dispsw->putcs(conp, p, start, d - start, dy, x);
++#ifndef CONFIG_UNICON
++ p->dispsw->putcs(conp, p, start, d - start, dy, x);
++#else
++ fbcon_putcs_tl(conp,start,d-start,dy,x);
++#endif
+ x += d - start;
+ #endif
+ start = d;
+@@ -1615,10 +1818,18 @@
+ if (s >= ls && s < le && c == scr_readw(s)) {
+ if (d > start) {
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, d - start, dx, y);
++#else
++ fbcon_putcs_tl(conp,start,d-start,dx,y);
++#endif
+ y += d - start + 1;
+ #else
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, d - start, dy, x);
++#else
++ fbcon_putcs_tl(conp,start,d-start,dy,x);
++#endif
+ x += d - start + 1;
+ #endif
+ start = d + 1;
+@@ -1636,9 +1847,17 @@
+ } while (d < le);
+ if (d > start)
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, d - start, dx, y);
+ #else
++ fbcon_putcs_tl(conp,start,d-start,dx,y);
++#endif
++#else
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, d - start, dy, x);
++#else
++ fbcon_putcs_tl(conp,start,d-start,dy,x);
++#endif
+ #endif
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ sx++;
+@@ -1660,6 +1879,9 @@
+
+ while (count) {
+ scr_memcpyw((u16 *)softback_in, p, conp->vc_size_row);
++#ifdef CONFIG_UNICON
++ scr_memcpyw((u16 *)softback_in+(fbcon_softback_size>>1),p+(conp->vc_screenbuf_size>>1),conp->vc_size_row);
++#endif
+ count--;
+ p = advance_row(p, 1);
+ softback_in += conp->vc_size_row;
+@@ -1764,6 +1986,13 @@
+ conp->vc_size_row * (b-count)),
+ conp->vc_video_erase_char,
+ conp->vc_size_row * count);
++#ifdef CONFIG_UNICON
++ scr_memsetw((unsigned short *)(conp->vc_origin +
++ conp->vc_size_row * (b-count) +
++ conp->vc_screenbuf_size),
++ conp->vc_video_erase_char & 0xff,
++ conp->vc_size_row * count);
++#endif
+ return 1;
+ }
+ #else
+@@ -1879,6 +2108,13 @@
+ conp->vc_size_row * t),
+ conp->vc_video_erase_char,
+ conp->vc_size_row * count);
++#ifdef CONFIG_UNICON
++ scr_memsetw((unsigned short *)(conp->vc_origin +
++ conp->vc_size_row * t +
++ conp->vc_screenbuf_size),
++ conp->vc_video_erase_char & 0xff,
++ conp->vc_size_row * count);
++#endif
+ return 1;
+ }
+ #else
+@@ -2566,11 +2802,31 @@
+ return p->fb_info->fbops->fb_set_cmap(&palette_cmap, 1, unit, p->fb_info);
+ }
+
++#ifdef CONFIG_UNICON
++/*offset:relative to softback_curr if softback valid in this vc
++The return pos may exists in buffer pointed by conp->vc_origin or softback_top.
++I assume the offset is always >=0 in normal case and I use the -offset-1 to mean to get the pos of the second word
++*/
++#endif
++
+ static u16 *fbcon_screen_pos(struct vc_data *conp, int offset)
+ {
+ int line;
+ unsigned long p;
+-
++#ifdef CONFIG_UNICON
++ if (offset < 0) {
++ offset = -offset - 1;
++ if (conp->vc_num != fg_console || !softback_lines)
++ return (u16 *)(conp->vc_origin + offset + conp->vc_screenbuf_size);
++ line = offset / conp->vc_size_row;
++ if (line >= softback_lines)
++ return (u16 *)(conp->vc_origin + offset - softback_lines * conp->vc_size_row + conp->vc_screenbuf_size);
++ p = softback_curr + offset;
++ if (p >= softback_end)
++ p += softback_buf - softback_end;
++ return (u16 *)(p+fbcon_softback_size);
++ }
++#endif
+ if (conp->vc_num != fg_console || !softback_lines)
+ return (u16 *)(conp->vc_origin + offset);
+ line = offset / conp->vc_size_row;
+@@ -2582,6 +2838,10 @@
+ return (u16 *)p;
+ }
+
++#ifdef CONFIG_UNICON
++// pos is a pointer either pointing into softback or (vc_origin--vc_scr_end),
++// return the pointer to the start of next row ( no matter in vi_origin or softback!)
++#endif
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ static unsigned long fbcon_getxy(struct vc_data *conp, unsigned long pos, int *py, int *px)
+ #else
+@@ -2684,6 +2944,11 @@
+ p -= conp->vc_size_row;
+ q -= conp->vc_size_row;
+ scr_memcpyw((u16 *)q, (u16 *)p, conp->vc_size_row);
++#ifdef CONFIG_UNICON
++ scr_memcpyw((u16* )(q+conp->vc_screenbuf_size),
++ (u16* )(p+fbcon_softback_size),
++ conp->vc_size_row);
++#endif
+ }
+ softback_in = p;
+ update_region(unit, conp->vc_origin, logo_lines * conp->vc_cols);
+diff -Nur linux_c860_org/drivers/video/fbmem.c linux/drivers/video/fbmem.c
+--- linux_c860_org/drivers/video/fbmem.c 2003-01-14 14:48:09.000000000 +0900
++++ linux/drivers/video/fbmem.c 2004-06-10 21:09:10.000000000 +0900
+@@ -16,6 +16,8 @@
+ * - Added support for ATI w100 on SHARP SL-C700
+ * 11-Sep-2002 SHARP
+ * - Allocated frame buffer to cache memory on SHARP SL-B500/5600
++ * 24-Jul-2003 Lineo Solutions, Inc.
++ * - Added support for TOSHIBA TC6393XB on SHARP SL-6
+ */
+
+ #include <linux/config.h>
+@@ -145,6 +147,8 @@
+ extern int cotulla_fb_init(void);
+ extern int w100fb_init(void);
+ extern int w100fb_setup(char*);
++extern int tc6393fb_init(void);
++extern int tc6393fb_setup(char*);
+
+ static struct {
+ const char *name;
+@@ -322,6 +326,9 @@
+ #ifdef CONFIG_FB_CORGI
+ { "w100fb", w100fb_init, w100fb_setup },
+ #endif
++#ifdef CONFIG_FB_TOSA
++ { "tc6393fb", tc6393fb_init, NULL },
++#endif
+
+ /*
+ * Generic drivers that don't use resource management (yet)
+diff -Nur linux_c860_org/drivers/video/font_gb16.h linux/drivers/video/font_gb16.h
+--- linux_c860_org/drivers/video/font_gb16.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/video/font_gb16.h 2004-06-10 21:09:10.000000000 +0900
+@@ -0,0 +1,8180 @@
++#define max_gb16 261696
++unsigned char font_gb16[max_gb16] = {
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60,0x30,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x50,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x8,0x8,0x4,0x4,0x2,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0xc,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x2,0x2,0x4,0x4,0x9,0x9,0x12,0x24,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x4,0x4,0x4,0x8,0x8,0x1f,0x20,0x40,0x0,0x8,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x10,0x10,0x20,0x40,0x80,0x0,0xc0,0x40,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x0,0x0,0x0,0x0,0x0,0x0,0x63,0x63,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x4,0x8,0xc,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x60,0x60,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44,0x88,0x10,0x98,0x98,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x0,0x1,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x98,0x98,0x88,0x10,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x8,0x4,0x0,
++0x0,0x40,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x0,0x0,
++0x0,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x12,0x24,0x48,0x90,0x20,0x40,0x80,0x40,0x20,0x90,0x48,0x24,0x12,0x8,0x4,
++0x20,0x90,0x48,0x24,0x12,0x9,0x4,0x2,0x4,0x9,0x12,0x24,0x48,0x90,0x20,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7,0x4,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x7,0x0,0x0,0x0,0xc0,0x40,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x7,0x4,0x7,0x0,0x0,0x0,0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x84,0x88,0x88,0x90,0x90,0x90,0x90,0x90,0x90,0x88,0x88,0x84,0xfe,0x0,
++0x0,0xfe,0x42,0x22,0x22,0x12,0x12,0x12,0x12,0x12,0x12,0x22,0x22,0x42,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0xfc,0xf8,0xf0,0xf0,0xe0,0xe0,0xe0,0xe0,0xf0,0xf0,0xf8,0xfc,0xfe,0x0,
++0x0,0xfe,0x7e,0x3e,0x1e,0x1e,0xe,0xe,0xe,0xe,0x1e,0x1e,0x3e,0x7e,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1,0x1,0x1,0xf,0x1,0x1,0x1,0x0,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x10,0x8,0x4,0x2,0x1,0x2,0x4,0x8,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x20,0x40,0x80,0x0,0x80,0x40,0x20,0x10,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x3,0x3,0x0,0x0,0x0,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x10,0x20,0x20,0x20,0x40,0x40,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x8,0x8,0x8,0x4,0x4,0x0,
++0x0,0x40,0x40,0x20,0x20,0x20,0x10,0x10,0x8,0x8,0x4,0x4,0x2,0x2,0x1,0x0,0x0,0x4,0x4,0x8,0x8,0x8,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x0,
++0x0,0x7f,0x20,0x10,0x8,0x4,0x2,0x1,0x2,0x4,0x8,0x10,0x20,0x7f,0x0,0x0,0x0,0xfc,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0xfc,0x0,0x0,
++0x0,0x3f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x78,0x0,0x0,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3c,0x0,
++0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0x8,0x7,0x0,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0x20,0xc0,0x0,
++0x0,0x7,0x8,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0,0x0,0xc0,0x20,0x10,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x0,
++0x0,0x7,0x18,0x20,0x20,0x40,0x40,0x7f,0x40,0x40,0x40,0x20,0x20,0x18,0x7,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,
++0x0,0x0,0x0,0x18,0x18,0x0,0x0,0x0,0x0,0x0,0x18,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x41,0xa2,0x14,0x8,0x0,0x0,0x0,0x0,0x0,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,
++0x2,0x2,0x2,0x2,0x2,0x2,0x4,0x4,0x4,0x4,0x4,0x9,0x9,0x9,0x9,0x9,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x4,0x8,0x10,0x20,0x7f,0x0,0x0,0x0,0x4,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0x0,0x0,
++0x0,0x0,0x0,0x7,0x18,0x20,0x20,0x40,0x40,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x60,0x10,0x10,0x8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x7,0x18,0x20,0x20,0x40,0x43,0x43,0x40,0x20,0x20,0x18,0x7,0x0,0x0,0x0,0x0,0x80,0x60,0x10,0x10,0x8,0x8,0x8,0x8,0x10,0x10,0x60,0x80,0x0,0x0,
++0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x6,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1,0x1,0x7,0x9,0x9,0xa,0xa,0x7,0x2,0x2,0x4,0x24,0x18,0x60,0x90,0x80,0x0,0x0,0x80,0x40,0x40,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x7f,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0x0,0xfc,0x0,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x18,0x20,0x41,0x41,0x42,0x22,0x1c,0x0,0x7f,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x70,0x88,0x4,0x4,0x4,0x8,0x30,0x0,0xfc,0x0,0xfc,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x38,0x47,0x0,0x38,0x47,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x8,0xf0,0x4,0x8,0xf0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x38,0x40,0x41,0x81,0x81,0x41,0x42,0x3c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x78,0x84,0x2,0x2,0x2,0x2,0x4,0x38,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x3c,0x42,0x41,0x81,0x81,0x41,0x42,0x3c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x80,0x0,0x0,0x0,0x0,0x80,0x7e,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x1,0x2,0x7f,0x4,0x4,0x8,0x10,0x10,0x20,0x10,0x20,0x20,0x40,0x40,0xfc,0x80,0x0,0x0,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x4,0x4,0x5,0x6,0x1c,0x64,0x84,0x64,0x1c,0x6,0x5,0x4,0x4,0x0,0x0,0x0,0x18,0x60,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x60,0x18,0x0,0x0,
++0x0,0x30,0xc,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0xc,0x30,0x0,0x0,0x0,0x40,0x40,0x40,0xc0,0x70,0x4c,0x42,0x4c,0x70,0xc0,0x40,0x40,0x40,0x0,0x0,
++0x0,0x0,0x1,0x6,0x18,0x60,0x80,0x60,0x98,0x66,0x19,0x6,0x1,0x0,0x0,0x0,0x18,0x60,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x60,0x98,0x60,0x18,0x0,
++0x30,0xc,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0xc,0x33,0xc,0x30,0x0,0x0,0x0,0x0,0xc0,0x30,0xc,0x2,0xc,0x32,0xcc,0x30,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x3c,0x42,0x81,0x81,0x81,0x42,0x3c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x78,0x84,0x2,0x2,0x2,0x84,0x78,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x30,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x0,0x0,0x0,
++0x0,0x1,0x3,0x5,0x9,0x11,0x1,0x1,0x1,0x1,0x3,0x4,0x4,0x4,0x3,0x0,0x0,0x0,0x80,0x40,0x20,0x10,0x0,0x0,0x0,0x0,0x80,0x40,0x40,0x40,0x80,0x0,
++0x0,0x3,0x4,0x4,0x4,0x3,0x1,0x1,0x3f,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x80,0x40,0x40,0x40,0x80,0x0,0x0,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x30,0x48,0x48,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x2,0x2,0x2,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x2,0x2,0x2,0x4,0x4,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x20,0x40,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x20,0x53,0x24,0x8,0x8,0x10,0x10,0x10,0x10,0x10,0x10,0x8,0x8,0x4,0x3,0x0,0x0,0xf4,0xc,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x8,0xf0,0x0,
++0x1,0xf,0x11,0x21,0x21,0x21,0x11,0xf,0x1,0x1,0x1,0x21,0x21,0x31,0x2f,0x1,0x0,0xe8,0x18,0x8,0x8,0x0,0x0,0x0,0xe0,0x10,0x8,0x8,0x8,0x10,0xe0,0x0,
++0x0,0x40,0x27,0x18,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0x18,0x27,0x40,0x0,0x0,0x2,0xe4,0x18,0x8,0x4,0x4,0x4,0x4,0x4,0x4,0x8,0x18,0xe4,0x2,0x0,
++0x0,0x0,0xf,0x10,0x20,0x40,0x40,0x41,0x41,0x42,0x42,0x24,0x14,0xf,0x10,0x20,0x10,0x20,0xe8,0x58,0x48,0x80,0x80,0x0,0x0,0x0,0x0,0x8,0x10,0xe0,0x0,0x0,
++0x1,0x2,0x2,0x2,0x2,0x2,0x3f,0x2,0x2,0x2,0x3a,0x46,0x42,0x45,0x38,0x0,0xc0,0x20,0x20,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0xf8,0x0,
++0x0,0x30,0x48,0x48,0x48,0x49,0x32,0x4,0x8,0x11,0x22,0x42,0x82,0x2,0x1,0x0,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x8c,0x52,0x52,0x52,0x52,0x8c,0x0,
++0x7,0x8,0x8,0x4,0x2,0x3,0x4,0x8,0x8,0x5,0x2,0x1,0x4,0x8,0x8,0x7,0x80,0x40,0xc0,0x0,0x0,0x0,0x80,0x40,0x40,0x80,0x0,0x0,0x80,0x40,0x40,0x80,
++0x60,0x21,0x31,0x31,0x29,0x29,0x29,0x29,0x25,0x25,0x25,0x25,0x23,0x23,0xa1,0x41,0x80,0x40,0x0,0x0,0x18,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x18,0x0,0x7e,0x0,
++0x1,0x1,0x2,0x2,0x2,0x4,0xfc,0x40,0x30,0x8,0x8,0x11,0x16,0x18,0x20,0x0,0x0,0x0,0x80,0x80,0x80,0x40,0x7e,0x4,0x18,0x20,0x20,0x90,0x50,0x30,0x8,0x0,
++0x1,0x1,0x3,0x3,0x3,0x7,0xff,0x3f,0x1f,0xf,0xf,0x1f,0x1e,0x18,0x20,0x0,0x0,0x0,0x80,0x80,0x80,0xc0,0xfe,0xf8,0xf0,0xe0,0xe0,0xf0,0xf0,0x30,0x8,0x0,
++0x0,0x7,0x18,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x18,0x7,0x0,0x0,0x0,0xc0,0x30,0x8,0x8,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x30,0xc0,0x0,0x0,
++0x0,0x7,0x1f,0x3f,0x3f,0x7f,0x7f,0x7f,0x7f,0x7f,0x3f,0x3f,0x1f,0x7,0x0,0x0,0x0,0xc0,0xf0,0xf8,0xf8,0xfc,0xfc,0xfc,0xfc,0xfc,0xf8,0xf8,0xf0,0xc0,0x0,0x0,
++0x0,0x7,0x18,0x27,0x28,0x50,0x50,0x50,0x50,0x50,0x28,0x27,0x18,0x7,0x0,0x0,0x0,0xc0,0x30,0xc8,0x28,0x14,0x14,0x14,0x14,0x14,0x28,0xc8,0x30,0xc0,0x0,0x0,
++0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x1,0x0,0x0,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x0,0x0,
++0x1,0x3,0x7,0xf,0x1f,0x3f,0x7f,0xff,0x7f,0x3f,0x1f,0xf,0x7,0x3,0x1,0x0,0x0,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x0,0x0,
++0x0,0x7f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7f,0x0,0x0,0x0,0xfc,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x0,0x0,
++0x0,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x0,0x0,0x0,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x0,0x0,
++0x0,0x1,0x2,0x4,0x4,0x8,0x8,0x10,0x10,0x20,0x20,0x40,0x40,0xff,0x0,0x0,0x0,0x0,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x8,0x8,0x4,0x4,0xfe,0x0,0x0,
++0x0,0x1,0x3,0x7,0x7,0xf,0xf,0x1f,0x1f,0x3f,0x3f,0x7f,0x7f,0xff,0x0,0x0,0x0,0x0,0x80,0xc0,0xc0,0xe0,0xe0,0xf0,0xf0,0xf8,0xf8,0xfc,0xfc,0xfe,0x0,0x0,
++0x0,0x43,0x23,0x10,0x8,0x4,0x2,0x61,0x62,0x4,0x8,0x10,0x23,0x43,0x80,0x0,0x0,0x4,0x8,0x10,0x20,0x40,0x80,0xc,0x8c,0x40,0x20,0x10,0x8,0x4,0x2,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x38,0xfe,0x38,0x20,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x8,0x38,0xff,0x38,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x3,0x3,0x7,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x80,0x80,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x7,0x3,0x3,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x80,0x80,0x0,0x0,
++0x0,0x0,0x0,0xff,0xff,0xff,0x0,0x0,0x0,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0xfe,0xfe,0x0,0x0,0x0,0xfe,0xfe,0xfe,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x2,0x6,0xa,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,
++0x0,0xf,0x10,0x10,0x0,0x0,0x0,0x1,0x6,0x8,0x10,0x10,0x10,0x10,0x1f,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x90,0x0,
++0x0,0xf,0x10,0x10,0x0,0x0,0x1,0x6,0x1,0x0,0x0,0x10,0x10,0x10,0xf,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x10,0x0,
++0x0,0x3,0x5,0x5,0x5,0x9,0x9,0x9,0x11,0x11,0x1f,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x8,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x10,0x10,0x17,0x18,0x10,0x0,0x0,0x10,0x10,0xf,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x10,0x0,
++0x0,0xf,0x10,0x10,0x10,0x10,0x10,0x17,0x18,0x10,0x10,0x10,0x10,0x10,0xf,0x0,0x0,0x0,0x80,0x80,0x80,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x10,0x0,
++0x0,0x1f,0x10,0x10,0x0,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0xc0,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,
++0x0,0xf,0x10,0x10,0x10,0x10,0x9,0x6,0x9,0x10,0x10,0x10,0x10,0x10,0xf,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x10,0x0,
++0x0,0xf,0x10,0x10,0x10,0x10,0x10,0x11,0xe,0x0,0x0,0x10,0x10,0x10,0xf,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x10,0x0,
++0x0,0x23,0x64,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xc8,0x0,
++0x0,0x20,0x61,0xa2,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x90,0x0,
++0x0,0x23,0x64,0xa4,0x20,0x20,0x20,0x20,0x21,0x22,0x24,0x24,0x24,0x24,0x27,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x20,0x20,0xe4,0x0,
++0x0,0x23,0x64,0xa4,0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x24,0x24,0x24,0x23,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x40,0x80,0x40,0x20,0x20,0x20,0x20,0x20,0xc4,0x0,
++0x0,0x20,0x61,0xa1,0x21,0x22,0x22,0x22,0x24,0x24,0x27,0x20,0x20,0x20,0x20,0x0,0x0,0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xf0,0x40,0x40,0x40,0x48,0x0,
++0x0,0x27,0x64,0xa4,0x24,0x24,0x24,0x25,0x26,0x24,0x20,0x20,0x24,0x24,0x23,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x20,0x20,0xc4,0x0,
++0x0,0x23,0x64,0xa4,0x24,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x24,0x24,0x23,0x0,0x0,0xc0,0x20,0x20,0x20,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x20,0x20,0xc4,0x0,
++0x0,0x27,0x64,0xa4,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0,0x0,0xf0,0x10,0x10,0x20,0x40,0x40,0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x84,0x0,
++0x0,0x23,0x64,0xa4,0x24,0x24,0x22,0x21,0x22,0x24,0x24,0x24,0x24,0x24,0x23,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x40,0x80,0x40,0x20,0x20,0x20,0x20,0x20,0xc4,0x0,
++0x0,0x23,0x64,0xa4,0x24,0x24,0x24,0x24,0x23,0x20,0x20,0x24,0x24,0x24,0x23,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x20,0x60,0xa0,0x20,0x20,0x20,0x20,0x20,0xc4,0x0,
++0x0,0x38,0x45,0x45,0x5,0x5,0x5,0x19,0x21,0x41,0x41,0x41,0x45,0x45,0x7c,0x0,0x0,0xe0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xe4,0x0,
++0x0,0x40,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x40,0x0,0x0,0x4,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x4,0x0,
++0x0,0x40,0x87,0x88,0x88,0x80,0x80,0x80,0x80,0x83,0x84,0x88,0x88,0x8f,0x40,0x0,0x0,0x4,0x82,0x42,0x42,0x42,0x42,0x42,0x82,0x2,0x2,0x42,0x42,0xc2,0x4,0x0,
++0x0,0x40,0x87,0x88,0x88,0x80,0x80,0x83,0x80,0x80,0x80,0x88,0x88,0x87,0x40,0x0,0x0,0x4,0x82,0x42,0x42,0x42,0x82,0x2,0x82,0x42,0x42,0x42,0x42,0x82,0x4,0x0,
++0x0,0x41,0x82,0x82,0x82,0x84,0x84,0x88,0x88,0x8f,0x80,0x80,0x80,0x80,0x40,0x0,0x0,0x84,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xe2,0x82,0x82,0x82,0x82,0x4,0x0,
++0x0,0x40,0x8f,0x88,0x88,0x88,0x8b,0x8c,0x88,0x80,0x80,0x88,0x88,0x87,0x40,0x0,0x0,0x4,0xc2,0x2,0x2,0x2,0x82,0x42,0x42,0x42,0x42,0x42,0x42,0x82,0x4,0x0,
++0x0,0x40,0x87,0x88,0x88,0x88,0x88,0x8b,0x8c,0x88,0x88,0x88,0x88,0x87,0x40,0x0,0x0,0x4,0x82,0x42,0x42,0x2,0x2,0x82,0x42,0x42,0x42,0x42,0x42,0x82,0x4,0x0,
++0x0,0x40,0x8f,0x88,0x88,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x40,0x0,0x0,0x4,0xe2,0x22,0x22,0x42,0x82,0x82,0x82,0x2,0x2,0x2,0x2,0x2,0x4,0x0,
++0x0,0x40,0x87,0x88,0x88,0x88,0x88,0x87,0x88,0x88,0x88,0x88,0x88,0x87,0x40,0x0,0x0,0x4,0x82,0x42,0x42,0x42,0x42,0x82,0x42,0x42,0x42,0x42,0x42,0x82,0x4,0x0,
++0x0,0x40,0x87,0x88,0x88,0x88,0x88,0x88,0x87,0x80,0x80,0x88,0x88,0x87,0x40,0x0,0x0,0x4,0x82,0x42,0x42,0x42,0x42,0xc2,0x42,0x42,0x42,0x42,0x42,0x82,0x4,0x0,
++0x0,0x40,0x88,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x88,0x40,0x0,0x0,0x4,0xe2,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xe2,0x4,0x0,
++0x0,0x40,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x40,0x0,0x0,0x4,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x4,0x0,
++0x0,0x40,0x91,0x92,0x92,0x90,0x90,0x90,0x90,0x91,0x92,0x92,0x92,0x93,0x40,0x0,0x0,0x4,0xe2,0x12,0x12,0x12,0x12,0x22,0xc2,0x2,0x2,0x12,0x12,0xf2,0x4,0x0,
++0x0,0x40,0x91,0x92,0x92,0x90,0x90,0x90,0x90,0x90,0x90,0x92,0x92,0x91,0x40,0x0,0x0,0x4,0xe2,0x12,0x12,0x12,0x22,0xc2,0x22,0x12,0x12,0x12,0x12,0xe2,0x4,0x0,
++0x0,0x40,0x90,0x90,0x90,0x90,0x91,0x91,0x92,0x92,0x93,0x90,0x90,0x90,0x40,0x0,0x0,0x4,0x62,0xa2,0xa2,0xa2,0x22,0x22,0x22,0x22,0xfa,0x22,0x22,0x22,0x4,0x0,
++0x0,0x40,0x93,0x92,0x92,0x92,0x92,0x93,0x92,0x90,0x90,0x92,0x92,0x91,0x40,0x0,0x0,0x4,0xf2,0x2,0x2,0x2,0xe2,0x12,0x12,0x12,0x12,0x12,0x12,0xe2,0x4,0x0,
++0x0,0x40,0x91,0x92,0x92,0x92,0x92,0x92,0x93,0x92,0x92,0x92,0x92,0x91,0x40,0x0,0x0,0x4,0xe2,0x12,0x12,0x2,0x2,0xe2,0x12,0x12,0x12,0x12,0x12,0xe2,0x4,0x0,
++0x0,0x40,0x93,0x92,0x92,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x40,0x0,0x0,0x4,0xf2,0x12,0x12,0x22,0x42,0x42,0x42,0x82,0x82,0x82,0x82,0x82,0x4,0x0,
++0x0,0x40,0x91,0x92,0x92,0x92,0x92,0x91,0x92,0x92,0x92,0x92,0x92,0x91,0x40,0x0,0x0,0x4,0xe2,0x12,0x12,0x12,0x12,0xe2,0x12,0x12,0x12,0x12,0x12,0xe2,0x4,0x0,
++0x0,0x40,0x91,0x92,0x92,0x92,0x92,0x92,0x91,0x90,0x90,0x92,0x92,0x91,0x40,0x0,0x0,0x4,0xe2,0x12,0x12,0x12,0x12,0x32,0xd2,0x12,0x12,0x12,0x12,0xe2,0x4,0x0,
++0x0,0x40,0x9c,0xa2,0xa2,0x82,0x82,0x84,0x88,0x90,0xa0,0xa2,0xa2,0xbe,0x40,0x0,0x0,0x4,0x72,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x72,0x4,0x0,
++0x7,0x18,0x20,0x41,0x41,0x81,0x81,0x81,0x81,0x81,0x41,0x41,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0x4,0x4,0x2,0x2,0x2,0x2,0x2,0x4,0x4,0x8,0x30,0xc0,0x0,
++0x7,0x18,0x20,0x47,0x44,0x80,0x80,0x81,0x82,0x84,0x44,0x47,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0xc4,0x44,0x42,0x42,0x82,0x2,0x2,0x44,0xc4,0x8,0x30,0xc0,0x0,
++0x7,0x18,0x20,0x47,0x44,0x80,0x80,0x83,0x80,0x80,0x44,0x47,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0xc4,0x44,0x42,0xc2,0x2,0xc2,0x42,0x44,0xc4,0x8,0x30,0xc0,0x0,
++0x7,0x18,0x20,0x43,0x45,0x85,0x85,0x89,0x89,0x8f,0x41,0x41,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0x4,0x4,0x2,0x2,0x2,0x2,0xc2,0x4,0x4,0x8,0x30,0xc0,0x0,
++0x7,0x18,0x20,0x47,0x44,0x84,0x84,0x87,0x80,0x80,0x44,0x47,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0xc4,0x4,0x2,0x2,0xc2,0x42,0x42,0x44,0xc4,0x8,0x30,0xc0,0x0,
++0x7,0x18,0x20,0x47,0x44,0x84,0x84,0x87,0x84,0x84,0x44,0x47,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0xc4,0x44,0x2,0x2,0xc2,0x42,0x42,0x44,0xc4,0x8,0x30,0xc0,0x0,
++0x7,0x18,0x20,0x47,0x44,0x80,0x80,0x80,0x81,0x81,0x41,0x41,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0xc4,0x44,0x42,0x82,0x82,0x2,0x2,0x4,0x4,0x8,0x30,0xc0,0x0,
++0x7,0x18,0x20,0x47,0x44,0x84,0x84,0x83,0x84,0x84,0x44,0x47,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0xc4,0x44,0x42,0x42,0x82,0x42,0x42,0x44,0xc4,0x8,0x30,0xc0,0x0,
++0x7,0x18,0x20,0x47,0x44,0x84,0x84,0x87,0x80,0x80,0x44,0x47,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0xc4,0x44,0x42,0x42,0xc2,0x42,0x42,0x44,0xc4,0x8,0x30,0xc0,0x0,
++0x7,0x18,0x20,0x4b,0x4a,0x8a,0x8a,0x8a,0x8a,0x8a,0x4a,0x4b,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0xe4,0x24,0x22,0x22,0x22,0x22,0x22,0x24,0xe4,0x8,0x30,0xc0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x20,0x40,0x80,0x80,0x80,0x80,0xbf,0x80,0x80,0x80,0x80,0x80,0x40,0x20,0x0,0x0,0x8,0x4,0x2,0x2,0x2,0x12,0xfa,0x2,0x2,0x2,0x2,0x2,0x4,0x8,0x0,
++0x0,0x20,0x40,0x80,0x9f,0x80,0x80,0x80,0x80,0x80,0xbf,0x80,0x80,0x40,0x20,0x0,0x0,0x8,0x4,0x22,0xf2,0x2,0x2,0x2,0x2,0x12,0xfa,0x2,0x2,0x4,0x8,0x0,
++0x0,0x20,0x40,0x9f,0x80,0x80,0x80,0x8f,0x80,0x80,0x80,0xbf,0x80,0x40,0x20,0x0,0x0,0x8,0x24,0xf2,0x2,0x2,0x42,0xe2,0x2,0x2,0x12,0xfa,0x2,0x4,0x8,0x0,
++0x0,0x20,0x40,0x80,0xbf,0xa4,0xa4,0xa4,0xa4,0xa4,0xbf,0x80,0x80,0x40,0x20,0x0,0x0,0x8,0x4,0x2,0xfa,0x4a,0x4a,0x4a,0x4a,0x4a,0xfa,0x2,0x2,0x4,0x8,0x0,
++0x0,0x20,0x40,0x9f,0x82,0x82,0x82,0x9f,0x84,0x84,0x84,0x84,0xbf,0x40,0x20,0x0,0x0,0x8,0x24,0xf2,0x2,0x2,0x22,0xf2,0x22,0x22,0x22,0x22,0xfa,0x4,0x8,0x0,
++0x0,0x20,0x40,0x82,0x81,0x80,0xbf,0x80,0x80,0x84,0x84,0x88,0x90,0x40,0x20,0x0,0x0,0x8,0x4,0x2,0x2,0x12,0xfa,0x2,0x2,0x42,0x22,0x12,0x12,0x4,0x8,0x0,
++0x0,0x20,0x42,0x82,0x82,0x82,0x82,0x83,0xbe,0x82,0x82,0x82,0x82,0x41,0x20,0x0,0x0,0x8,0x4,0x2,0x2,0x12,0x7a,0x82,0x2,0x2,0x2,0x22,0x22,0xe4,0x8,0x0,
++0x0,0x20,0x40,0x84,0x84,0x84,0x84,0x84,0x88,0x88,0x90,0xa0,0x80,0x40,0x20,0x0,0x0,0x8,0x84,0x82,0x82,0x82,0x82,0x82,0x42,0x22,0x1a,0x12,0x2,0x4,0x8,0x0,
++0x0,0x20,0x42,0x82,0x82,0x9f,0x82,0x82,0x82,0x84,0x84,0x88,0x90,0x40,0x20,0x0,0x0,0x8,0x4,0x2,0x42,0xe2,0x42,0x42,0x42,0x42,0x4a,0x4a,0x3a,0x4,0x8,0x0,
++0x0,0x20,0x41,0x81,0x81,0x81,0xbf,0x81,0x81,0x81,0x81,0x81,0x81,0x40,0x20,0x0,0x0,0x8,0x4,0x2,0x2,0x12,0xfa,0x2,0x2,0x2,0x2,0x2,0x2,0x4,0x8,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x3,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,
++0x0,0xe,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0xe,0x0,0x0,0xe0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xe0,0x0,
++0x0,0x3b,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x3b,0x0,0x0,0xb8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xb8,0x0,
++0x0,0x77,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x1c,0x8,0x8,0x8,0x10,0x10,0x10,0x10,0xa0,0xa0,0xa0,0xa0,0x40,0x40,0x0,
++0x0,0x70,0x20,0x10,0x10,0x8,0x8,0x8,0x4,0x4,0x4,0x2,0x2,0x1,0x1,0x0,0x0,0x1c,0x8,0x10,0x10,0x20,0x20,0x20,0x40,0x40,0x40,0x80,0x80,0x0,0x0,0x0,
++0x0,0x71,0x20,0x20,0x20,0x11,0x11,0x11,0x11,0xa,0xa,0xa,0xa,0x4,0x4,0x0,0x0,0xdc,0x88,0x88,0x88,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x1c,0x0,
++0x0,0xe3,0x41,0x41,0x41,0x22,0x22,0x22,0x22,0x14,0x14,0x14,0x14,0x8,0x8,0x0,0x0,0xfe,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x7e,0x0,
++0x0,0xe3,0x41,0x41,0x41,0x22,0x22,0x22,0x22,0x14,0x14,0x14,0x14,0x8,0x8,0x0,0x0,0xfe,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0xfe,0x0,
++0x0,0xee,0x44,0x42,0x42,0x41,0x40,0x40,0x40,0x40,0x41,0x41,0x42,0x44,0xee,0x0,0x0,0xe,0x4,0x8,0x8,0x10,0xa0,0x40,0xa0,0xa0,0x10,0x10,0x8,0x4,0xe,0x0,
++0x0,0x70,0x20,0x10,0x8,0x4,0x2,0x1,0x2,0x2,0x4,0x8,0x10,0x20,0x70,0x0,0x0,0x1c,0x8,0x10,0x20,0x40,0x80,0x0,0x80,0x80,0x40,0x20,0x10,0x8,0x1c,0x0,
++0x0,0xe0,0x40,0x20,0x11,0xa,0xa,0x4,0xa,0xa,0x11,0x11,0x20,0x40,0xe0,0x0,0x0,0xee,0x44,0x84,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x84,0x44,0xee,0x0,
++0x0,0xe0,0x40,0x20,0x11,0xa,0xa,0x4,0xa,0xa,0x11,0x11,0x20,0x40,0xe0,0x0,0x0,0xfe,0x54,0x94,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x94,0x54,0xfe,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x2,0x2,0x2,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x40,0x40,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x4,0x4,0x4,0x3f,0x4,0x4,0x4,0x4,0x3f,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x40,0x40,0x78,0xc0,0x40,0x40,0x40,0x78,0xc0,0x40,0x40,0x40,0x0,0x0,
++0x0,0x38,0x10,0x8,0x4,0x2,0x2,0x1,0x1,0xf,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x38,0x10,0x20,0x40,0x80,0x80,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0x80,0x0,
++0x0,0x18,0x24,0x24,0x24,0x24,0x24,0x19,0x2,0x4,0x8,0x10,0x20,0x40,0x0,0x0,0x0,0x4,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x60,0x90,0x90,0x90,0x90,0x90,0x60,
++0x0,0xf,0x10,0x10,0x10,0x10,0xb,0x4,0x1c,0x22,0x41,0x40,0x40,0x21,0x1e,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x70,0x20,0xa0,0x44,0xa4,0x18,0x0,
++0x10,0x10,0x10,0x20,0x20,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc,0x10,0x20,0x40,0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x40,0x40,0x20,0x10,0xc,
++0x60,0x10,0x8,0x4,0x4,0x2,0x2,0x2,0x2,0x2,0x2,0x4,0x4,0x8,0x10,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x1,0x1,0x21,0x11,0x9,0x5,0x1,0x2,0x4,0x8,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x10,0x20,0x40,0x0,0x80,0x40,0x20,0x10,0x0,0x0,0x0,
++0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1f,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x10,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x4,0x8,0x10,0x20,0x0,0x0,0x0,0x0,0x4,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,
++0x0,0x1,0x3,0x5,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,
++0x0,0x7,0x8,0x10,0x10,0x0,0x0,0x0,0x3,0x4,0x8,0x10,0x10,0x10,0x1f,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0xe0,0x0,0x0,0x0,0x0,0x10,0x10,0xf0,0x0,
++0x0,0xf,0x10,0x10,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x10,0x10,0xf,0x0,0x0,0xe0,0x10,0x10,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x10,0x10,0x20,0xc0,0x0,
++0x0,0x1,0x2,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x20,0x3f,0x0,0x0,0x3,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xf0,0x80,0x80,0xe0,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x10,0x17,0x18,0x10,0x0,0x0,0x0,0x10,0x10,0xf,0x0,0x0,0xf0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,
++0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x17,0x18,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0xc0,0x20,0x10,0x10,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,
++0x0,0x1f,0x10,0x10,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x2,0x2,0x2,0x0,0x0,0xf0,0x10,0x10,0x20,0x20,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x10,0x10,0x10,0x8,0x7,0x8,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x20,0xc0,0x20,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,
++0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x10,0x10,0x8,0x7,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0x30,0xd0,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x0,0x30,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x0,0x30,0x30,0x10,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x3,0xc,0x30,0x40,0x30,0xc,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0xc,0x30,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x30,0xc,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x1f,0x0,0x0,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,0x0,0xf0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x60,0x18,0x6,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x6,0x18,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x60,0x18,0x4,0x18,0x60,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x18,0x24,0x42,0x42,0x4,0x8,0x8,0x8,0x8,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7,0x18,0x20,0x46,0x49,0x48,0x48,0x48,0x49,0x46,0x20,0x18,0x7,0x0,0x0,0x0,0xc0,0x20,0x10,0x90,0x88,0x88,0x88,0x88,0x90,0x90,0x64,0x8,0xf0,0x0,0x0,
++0x0,0x1,0x2,0x2,0x4,0x4,0x8,0xf,0x10,0x10,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x20,0xe0,0x10,0x10,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x10,0x10,0x20,0xc0,0x20,0x10,0x10,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0xf,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x0,0x0,0x0,0x0,0x0,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0xfc,0x4,0x4,0x0,0x20,0xe0,0x20,0x0,0x4,0x4,0xfc,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xfc,0x4,0x4,0x0,0x20,0xe0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1f,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x1f,0x0,0x0,0x0,0x0,0x0,0xd0,0x30,0x10,0x0,0x0,0x0,0x38,0x10,0x10,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x3,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x3,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x5,0x2,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x71,0x21,0x22,0x24,0x38,0x24,0x22,0x21,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x70,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x8,0xf8,0x0,0x0,0x0,0x0,
++0x0,0xc0,0x60,0x50,0x48,0x44,0x42,0x41,0x40,0x40,0x40,0xe0,0x0,0x0,0x0,0x0,0x0,0x6,0xc,0x14,0x24,0x44,0x84,0x4,0x4,0x4,0x4,0xe,0x0,0x0,0x0,0x0,
++0x0,0x60,0x30,0x28,0x24,0x22,0x21,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0x8,0x8,0x88,0x48,0x28,0x18,0x8,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x10,0x20,0x20,0x20,0x20,0x20,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x8,0x8,0x8,0x8,0x8,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x10,0x20,0x20,0x20,0x20,0x20,0x11,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x8,0x8,0x8,0x8,0x8,0x90,0x60,0xc0,0x30,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x24,0x22,0x21,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x10,0x20,0xc0,0x0,0x0,0x0,0x80,0x70,0x0,0x0,0x0,0x0,
++0x0,0xf,0x10,0x20,0x20,0x10,0xf,0x0,0x0,0x20,0x30,0x2f,0x0,0x0,0x0,0x0,0x0,0xe8,0x18,0x8,0x0,0x0,0xe0,0x10,0x8,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x41,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x10,0x10,0x8,0x8,0x4,0x4,0x2,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0xe3,0x41,0x41,0x41,0x22,0x22,0x22,0x14,0x14,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x8e,0x4,0x4,0x4,0x88,0x88,0x88,0x50,0x50,0x20,0x20,0x0,0x0,0x0,0x0,
++0x0,0x70,0x10,0x8,0x4,0x2,0x1,0x2,0x4,0x8,0x10,0x70,0x0,0x0,0x0,0x0,0x0,0x1c,0x10,0x20,0x40,0x80,0x0,0x80,0x40,0x20,0x10,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x10,0x8,0x4,0x2,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x20,0x20,0x0,0x0,0x1,0x2,0x4,0x8,0x10,0x3f,0x0,0x0,0x0,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x8,0x8,0xf8,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0xe,0x0,0x0,
++0x0,0x40,0x20,0x10,0x8,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x10,0x8,0x4,0x0,0x0,
++0x0,0xe0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x2,0x2,0x4,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x10,0x10,0x8,0x8,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0xf,0x10,0x0,0xf,0x10,0x10,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x40,0x40,0xc0,0x40,0x50,0xa0,0x0,0x0,0x0,0x0,
++0x0,0x8,0x8,0x8,0x8,0xb,0xc,0x8,0x8,0x8,0xc,0xb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x0,0x0,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x20,0x20,0xa0,0x60,0x20,0x20,0x20,0x60,0xa0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0xf,0x10,0x10,0x1f,0x10,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x40,0xc0,0x0,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x2,0x2,0x2,0x2,0xf,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x80,0x80,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0xa0,0x60,0x20,0x20,0x20,0x60,0xa0,0x20,0x20,0x40,0x80,0x0,
++0x0,0x8,0x8,0x8,0x8,0xb,0xc,0x8,0x8,0x8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x20,0x20,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x5,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x8,0x8,0x8,0x8,0x8,0x9,0xa,0xd,0x8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x80,0x40,0x20,0x0,0x0,0x0,0x0,
++0x0,0x3,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x1a,0xd,0x9,0x9,0x9,0x9,0x9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x20,0x30,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x1b,0xc,0x8,0x8,0x8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x1b,0xc,0x8,0x8,0x8,0xc,0xb,0x8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x3,0x4,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa0,0x60,0x20,0x20,0x20,0x60,0xa0,0x20,0x20,0x20,0x30,0x0,
++0x0,0x0,0x0,0x0,0x0,0x5,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7,0x8,0x8,0x7,0x0,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x0,0x80,0x40,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x2,0x2,0x2,0xf,0x2,0x2,0x2,0x2,0x2,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0xc,0x4,0x4,0x4,0x4,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0xc0,0x60,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x8,0x8,0x4,0x4,0x2,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x11,0x9,0x9,0xa,0xa,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x20,0x20,0xa0,0xa0,0x40,0x40,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x8,0x4,0x2,0x1,0x2,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x40,0x80,0x0,0x80,0x40,0x20,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x8,0x4,0x4,0x2,0x1,0x1,0x2,0x2,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0xf,0x8,0x0,0x1,0x2,0x4,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x40,0x80,0x0,0x0,0x40,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x8,0x8,0x8,0x8,0x8,0x10,0x20,0x10,0x8,0x8,0x8,0x8,0x8,0x4,0x0,
++0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x40,0x20,0x20,0x20,0x20,0x20,0x10,0x8,0x10,0x20,0x20,0x20,0x20,0x20,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x4,0x4,0x25,0x1e,0x4,0x7,0xc,0x14,0x23,0x22,0x25,0x18,0x0,0x0,0x0,0x0,0x0,0x20,0xc0,0x0,0x80,0xe0,0x90,0x88,0x8,0x8,0x10,0x20,0xc0,
++0x4,0x4,0x4,0x47,0x3c,0x4,0x4,0x1f,0x24,0x42,0x42,0x41,0x22,0x1c,0x0,0x0,0x0,0x0,0x60,0x80,0x0,0x40,0x40,0xf0,0x48,0x84,0x84,0x4,0x84,0x8,0x30,0x0,
++0x0,0x0,0x0,0x0,0x0,0x10,0x18,0x10,0x10,0x10,0x10,0x11,0xa,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x10,0x8,0x18,0x10,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x20,0x30,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x14,0xc,0x0,0x0,0x0,0x0,0x0,0x20,0x10,0x8,0x4,0x4,0xc,0x8,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0xf,0x1,0x2,0x0,0x11,0xe,0x0,0x0,0x0,0x0,0x1,0x2,0xc,0x0,0x0,0x0,0x80,0x80,0x0,0x0,0xc0,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0xf,0x0,0x1,0x0,0x21,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0xc,0x0,0x0,0x80,0x40,0x80,0x0,0xe0,0x10,0x10,0x10,0x10,0x20,0x20,0xc0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x0,0x1,0x0,0x3,0x1c,0x1,0x3,0x4,0x8,0x10,0x20,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0xc0,0x80,0x0,0x0,0x80,0x80,0x40,0x38,0x0,
++0x0,0xf,0x0,0x1,0x0,0x3,0x3c,0x1,0x2,0x3,0x4,0x4,0x8,0x10,0x20,0x0,0x0,0x0,0x80,0x0,0x0,0xc0,0x80,0x0,0x0,0x80,0x80,0x80,0x80,0x40,0x3c,0x0,
++0x0,0x0,0x0,0x4,0x4,0x4,0x3f,0x4,0x7,0x4,0xc,0x14,0x34,0x15,0x8,0x0,0x0,0x0,0x0,0x0,0x10,0x8,0x4,0x8,0xe0,0x10,0x8,0x8,0x8,0x30,0xc0,0x0,
++0x0,0x4,0x4,0x7,0x3c,0x4,0x5,0x6,0xc,0x14,0x24,0x64,0x35,0xc,0x4,0x0,0x0,0x0,0x10,0x88,0x4,0x18,0xc0,0x20,0x10,0x8,0x8,0x8,0x10,0xe0,0x0,0x0,
++0x0,0x2,0x2,0x2,0x2,0x43,0x3c,0x4,0x4,0x4,0x8,0x8,0x10,0x22,0x41,0x0,0x0,0x0,0x0,0x20,0x10,0xc8,0x44,0x54,0x4c,0x40,0x40,0x80,0x80,0x80,0x0,0x0,
++0x0,0x4,0x4,0x4,0x4,0x87,0x78,0x8,0x8,0x8,0x10,0x11,0x21,0x45,0x82,0x0,0x8,0x4,0x12,0x48,0x24,0x90,0x88,0xa8,0x98,0x80,0x80,0x0,0x0,0x0,0x0,0x0,
++0x2,0x2,0x2,0x3,0x1d,0x0,0x3,0x1c,0x0,0x3,0x0,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x60,0x80,0x0,0xe0,0x80,0x40,0x40,0xe0,0x20,0x0,0x0,0x0,0xc0,0x0,
++0x4,0x4,0x4,0x7,0x3a,0x1,0x7,0x38,0x0,0x7,0x0,0x20,0x20,0x10,0xf,0x0,0x0,0x8,0xc4,0x12,0x8,0xc4,0x0,0x80,0x80,0xc0,0x40,0x0,0x0,0x0,0x80,0x0,
++0x0,0x1,0x0,0x0,0x1,0x2,0x4,0x8,0x10,0x8,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x0,
++0x0,0x2,0x1,0x1,0x2,0x4,0x8,0x10,0x20,0x10,0x8,0x4,0x2,0x1,0x1,0x0,0x0,0x8,0x4,0x22,0x10,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x10,0x10,0x20,0x20,0x27,0x40,0x40,0x40,0x50,0x50,0x20,0x20,0x1,0x0,0x0,0x80,0x40,0x40,0x40,0x78,0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x0,0x0,
++0x0,0x0,0x10,0x10,0x20,0x20,0x27,0x40,0x40,0x40,0x50,0x50,0x20,0x20,0x1,0x0,0x8,0x84,0x52,0x48,0x44,0x70,0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x0,0x0,
++0x0,0x0,0x10,0xf,0x0,0x3,0x4,0x0,0x20,0x20,0x20,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,
++0x0,0x0,0x10,0xf,0x0,0x3,0x4,0x0,0x20,0x20,0x20,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0x8,0xe4,0x82,0x10,0x8,0x4,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,
++0x0,0x4,0x2,0x2,0x3f,0x1,0x0,0x0,0x1,0x8,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x30,0xc0,0x0,0x0,0x80,0x40,0xe0,0x20,0x0,0x0,0x0,0x0,0xe0,0x0,
++0x0,0x4,0x2,0x2,0x3f,0x1,0x0,0x0,0x1,0x8,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x8,0x4,0xd2,0x8,0x4,0x80,0x40,0xe0,0x20,0x0,0x0,0x0,0x0,0xe0,0x0,
++0x0,0x18,0xc,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x9,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x20,0x40,0x80,0x0,0x0,
++0x0,0x18,0xc,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x9,0x6,0x0,0x0,0x10,0x8,0x24,0x10,0x8,0x0,0x0,0x0,0x0,0x10,0x20,0x40,0x80,0x0,0x0,
++0x0,0x3,0x1,0x1,0x7f,0x1,0x7,0x9,0x9,0x9,0x6,0x0,0x1,0x1,0x2,0xc,0x0,0x0,0x0,0x0,0xf8,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,
++0x3,0x1,0x1,0x1,0x7f,0x1,0x7,0x9,0x9,0x9,0x6,0x0,0x1,0x1,0x2,0xc,0x8,0x4,0x12,0x8,0xf4,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x10,0x8,0x8,0xb,0x7c,0x8,0x8,0x8,0x9,0x8,0x8,0x8,0x7,0x0,0x0,0x80,0x40,0x40,0x40,0xfc,0x40,0x40,0x40,0x40,0x40,0x80,0x0,0x0,0xf0,0x0,
++0x0,0x0,0x10,0x8,0x8,0xb,0x7c,0x8,0x8,0x8,0x9,0x8,0x8,0x8,0x7,0x0,0x8,0x84,0x52,0x48,0x44,0xf0,0x40,0x40,0x40,0x40,0x40,0x80,0x0,0x0,0xf0,0x0,
++0x0,0x10,0xf,0x1,0x2,0x4,0x8,0x1f,0x22,0x44,0x4,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,0x0,
++0x0,0x10,0xf,0x1,0x2,0x4,0x8,0x1f,0x22,0x44,0x4,0x4,0x2,0x1,0x0,0x0,0x8,0x24,0x92,0x8,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,0x0,
++0x0,0x4,0x4,0x47,0x3c,0x9,0x8,0x8,0x10,0x10,0x12,0x22,0x21,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x30,0x40,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,
++0x0,0x4,0x4,0x47,0x3c,0x9,0x8,0x8,0x10,0x10,0x12,0x22,0x21,0x40,0x0,0x0,0x8,0x4,0x12,0x8,0x4,0xe0,0x30,0x40,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,
++0x0,0x2,0x2,0x2,0x3,0x7e,0x4,0x7,0x4,0xc,0x8,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x80,0xc0,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x20,0x20,0xc0,0x0,
++0x0,0x4,0x4,0x5,0x7,0x7c,0x8,0xb,0xc,0x18,0x10,0x0,0x0,0x0,0x0,0x3,0x0,0x8,0x4,0x12,0x88,0x4,0x0,0xc0,0x20,0x10,0x10,0x10,0x20,0x20,0xc0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f,0x8,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x20,0x40,0x80,0x0,
++0x0,0x0,0x0,0x1,0x6,0x78,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x8,0x8,0x8,0x8,0x10,0x20,0xc0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3,0xc,0xf0,0x40,0x0,0x0,0x0,0x0,0x0,0x1,0xe,0x0,0x0,0x8,0x4,0x12,0xc8,0x24,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x80,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7f,0x21,0x2,0x4,0x4,0x4,0x4,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x8,0xfc,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7f,0x21,0x2,0x4,0x4,0x4,0x4,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x8,0xfc,0xc0,0x8,0x4,0x12,0x8,0x4,0x0,0x0,0x0,0xf0,0x0,
++0x0,0x0,0x2,0x1,0x1,0x1,0x1,0x1,0x6,0x8,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x60,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x0,
++0x0,0x0,0x2,0x1,0x1,0x1,0x1,0x1,0x6,0x8,0x10,0x10,0x10,0x8,0x7,0x0,0x8,0x4,0x12,0x8,0x4,0x30,0x60,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x0,
++0x0,0x0,0xc,0x4,0x7,0x7c,0x24,0x8,0x8,0x10,0x10,0x23,0x44,0x4,0x3,0x0,0x0,0x0,0x20,0x10,0x8,0x18,0x40,0x40,0x40,0x40,0x40,0xe0,0x50,0x48,0x84,0x0,
++0x0,0x20,0x10,0x10,0x13,0x20,0x20,0x20,0x40,0x4a,0x4a,0x52,0x51,0x60,0x40,0x0,0x0,0x0,0x0,0x1c,0xe8,0x10,0x20,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,
++0x0,0x2,0x1,0x21,0x11,0x17,0x19,0x11,0x31,0x4a,0x4a,0x44,0x44,0x4a,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x8,0x4,0x4,0x4,0x74,0x8c,0x94,0x62,0x0,0x0,
++0x0,0x10,0x8,0x8,0x8,0x1e,0x69,0xa,0xc,0x18,0x28,0x48,0xa9,0x29,0x18,0x0,0x0,0x0,0x0,0x0,0x60,0x90,0x10,0x10,0x10,0x10,0x10,0xf0,0x18,0x24,0xc2,0x0,
++0x0,0x0,0x0,0x7,0x19,0x21,0x42,0x42,0x42,0x44,0x44,0x28,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x30,0x8,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0xc0,0x0,
++0x0,0x20,0x10,0x10,0x10,0x27,0x20,0x20,0x40,0x48,0x48,0x53,0x54,0x64,0x43,0x0,0x0,0x80,0x40,0x50,0x78,0xc0,0x40,0x40,0x40,0x40,0x40,0xc0,0x70,0x48,0x84,0x0,
++0x0,0x20,0x10,0x10,0x10,0x27,0x20,0x20,0x40,0x48,0x48,0x53,0x54,0x64,0x43,0x0,0x8,0x84,0x52,0x48,0x74,0xc0,0x40,0x40,0x40,0x40,0x40,0xc0,0x70,0x48,0x84,0x0,
++0x0,0x20,0x10,0x10,0x10,0x27,0x20,0x20,0x40,0x48,0x48,0x53,0x54,0x64,0x43,0x0,0xc,0x92,0x52,0x4c,0x70,0xc0,0x40,0x40,0x40,0x40,0x40,0xc0,0x70,0x48,0x84,0x0,
++0x0,0x0,0x2,0x3e,0x4,0x8,0x8,0x10,0x10,0x20,0x20,0x20,0x20,0x10,0xf,0x0,0x0,0x0,0x0,0x20,0x20,0x30,0x28,0x24,0x20,0x20,0x40,0x40,0x40,0x80,0x0,0x0,
++0x0,0x0,0x2,0x3e,0x4,0x8,0x8,0x10,0x10,0x20,0x20,0x20,0x20,0x10,0xf,0x0,0x8,0x4,0x12,0x28,0x24,0x30,0x28,0x24,0x20,0x20,0x40,0x40,0x40,0x80,0x0,0x0,
++0x0,0x0,0x2,0x3e,0x4,0x8,0x8,0x10,0x10,0x20,0x20,0x20,0x20,0x10,0xf,0x0,0xc,0x12,0x12,0x2c,0x20,0x30,0x28,0x24,0x20,0x20,0x40,0x40,0x40,0x80,0x0,0x0,
++0x0,0x2,0x1,0x0,0x1,0x2,0x2,0x1,0x0,0x3,0x4,0x8,0x78,0x26,0x1,0x0,0x0,0x0,0x80,0xc0,0x0,0x0,0x0,0x0,0xe0,0x98,0x84,0x8c,0x90,0x80,0x0,0x0,
++0x0,0x2,0x1,0x0,0x1,0x2,0x2,0x1,0x0,0x3,0x4,0x8,0x78,0x26,0x1,0x0,0x8,0x4,0x92,0xc8,0x4,0x0,0x0,0x0,0xe0,0x98,0x84,0x8c,0x90,0x80,0x0,0x0,
++0x0,0x2,0x1,0x0,0x1,0x2,0x2,0x1,0x0,0x3,0x4,0x8,0x78,0x26,0x1,0x0,0xc,0x12,0x92,0xcc,0x0,0x0,0x0,0x0,0xe0,0x98,0x84,0x8c,0x90,0x80,0x0,0x0,
++0x0,0x0,0x0,0x0,0x7,0x8,0x10,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x18,0x6,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x7,0x8,0x10,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x4,0x12,0x8,0x84,0x40,0x20,0x18,0x6,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x7,0x8,0x10,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x24,0x24,0x18,0x80,0x40,0x20,0x18,0x6,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x20,0x17,0x10,0x10,0x20,0x27,0x20,0x40,0x48,0x48,0x51,0x52,0x62,0x41,0x0,0x0,0x70,0xc0,0x40,0x40,0x40,0xf8,0x40,0x40,0x40,0x40,0xc0,0x70,0x48,0x84,0x0,
++0x0,0x20,0x17,0x10,0x10,0x20,0x27,0x20,0x40,0x48,0x48,0x51,0x52,0x62,0x41,0x0,0x8,0xe4,0x52,0x48,0x44,0x40,0xf8,0x40,0x40,0x40,0x40,0xc0,0x70,0x48,0x84,0x0,
++0x0,0x20,0x17,0x10,0x10,0x20,0x27,0x20,0x40,0x48,0x48,0x51,0x52,0x62,0x41,0x0,0x0,0xec,0x52,0x52,0x4c,0x40,0xf0,0x40,0x40,0x40,0x40,0xc0,0x70,0x48,0x84,0x0,
++0x0,0x1,0x1,0x1,0x3f,0x1,0x1,0x1f,0x1,0x1,0x1,0x1d,0x23,0x21,0x1e,0x0,0x0,0x0,0x0,0xf0,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0x0,0xc0,0x30,0x8,0x0,
++0x0,0x0,0x13,0xc,0x0,0x1,0x1,0x1,0x2,0x1a,0x27,0x44,0x48,0x30,0x0,0x1,0x0,0x0,0x80,0x80,0x80,0x0,0x10,0x10,0x10,0x10,0xa0,0x70,0x28,0x44,0x80,0x0,
++0x0,0x8,0x4,0x4,0x7,0x7c,0x4,0x1c,0x24,0x24,0x24,0x1c,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x90,0xc8,0x4,0xc,0x10,0x0,0x0,0x10,0x10,0x10,0x18,0xf0,0x0,
++0x0,0x1,0x10,0x10,0x10,0x1f,0x11,0x29,0x45,0x42,0x45,0x48,0x30,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0xc0,0x20,0x10,0x8,0x8,0x8,0x10,0x10,0x20,0xc0,0x0,
++0x2,0x2,0x2,0x2,0x23,0x1e,0x4,0x4,0x44,0x3f,0x4,0x4,0x4,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x10,0x8,0xc8,0x8,0x8,0x8,0x8,0x8,0xf0,0x0,
++0x0,0x0,0x2,0x1,0x0,0x0,0x3,0x24,0x1f,0x2,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x30,0x48,0x88,0x8,0x8,0x70,0x0,0x80,0x80,0x40,
++0x0,0x2,0x1,0x0,0x6,0x9,0x10,0x11,0x7e,0x8,0x8,0x4,0x2,0x2,0x1,0x0,0x0,0x0,0x80,0x40,0x40,0x80,0x30,0xc8,0x4,0x4,0x88,0x70,0x0,0x0,0x0,0x80,
++0x0,0x0,0x0,0x1,0x0,0x0,0x11,0x12,0x14,0x14,0x18,0x1a,0x11,0x10,0x1,0x2,0x0,0x0,0x0,0x0,0x80,0x80,0xe0,0x90,0x88,0x88,0x88,0x88,0x90,0xe0,0x0,0x0,
++0x0,0x0,0x10,0x10,0x10,0x11,0x22,0x24,0x24,0x24,0x28,0x2a,0x31,0x10,0x0,0x3,0x0,0x80,0x40,0x40,0xf8,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x58,0xe0,0x80,0x0,
++0x0,0x0,0x0,0x2,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xf,0x11,0x11,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0xc0,0x0,0x0,0x0,0x0,0xc0,0x30,0x8,0x0,0x0,
++0x0,0x2,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1f,0x21,0x41,0x42,0x3c,0x0,0x0,0x0,0x0,0x0,0x10,0x38,0xc0,0x0,0x0,0x0,0x0,0xc0,0x30,0x8,0x4,0x0,
++0x0,0x1c,0x2,0x2,0x4,0x8,0x10,0x10,0x10,0x13,0x14,0x18,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x8,0x8,0x30,0xc0,0x0,
++0x0,0x10,0x8,0x9,0xa,0xa,0x12,0x14,0x14,0x18,0x8,0x0,0x0,0x0,0x1,0x2,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x0,
++0x0,0x0,0xf,0x0,0x0,0x0,0x1,0x2,0x7,0x8,0x10,0x3,0x4,0x4,0x3,0x0,0x0,0x40,0xa0,0x20,0x40,0x80,0x0,0xf0,0x8,0x4,0x4,0x84,0x44,0x28,0xf0,0x0,
++0x0,0x8,0x8,0x8,0xe,0x79,0xa,0xc,0x8,0x18,0x28,0x28,0x68,0x18,0x8,0x0,0x0,0x0,0x20,0x50,0x88,0x8,0x10,0x10,0x10,0x10,0x10,0x12,0x14,0x8,0x0,0x0,
++0x0,0x3,0x1c,0x0,0x1,0x2,0x4,0xf,0x18,0x20,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xc0,0x40,0x80,0x0,0x0,0xe0,0x10,0x8,0x8,0x8,0x10,0x10,0x60,0x80,0x0,
++0x0,0x0,0x8,0x4,0x4,0x7,0x3c,0x7,0xc,0x14,0x24,0x34,0xc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x8,0x8,0x8,0x8,0x10,0x20,0xc0,0x0,0x0,
++0x0,0x10,0x8,0x8,0x4f,0x38,0xb,0xc,0x8,0x18,0x28,0x48,0x68,0x18,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x18,0x4,0x4,0x4,0x4,0x8,0x10,0x60,0x0,
++0x0,0x0,0x3,0x1c,0x0,0x1,0x1,0x3,0xf,0x12,0x22,0x44,0x38,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x0,0x0,0xf0,0x8,0x4,0x4,0x64,0x94,0x88,0x70,0x0,
++0x0,0xf,0x0,0x1,0x3,0x6,0x8,0x13,0x24,0x3,0x2,0x4,0x18,0x26,0x41,0x0,0x0,0xc0,0x80,0x0,0xe0,0x10,0x10,0x90,0xa0,0xc0,0x0,0x0,0x38,0x44,0x88,0x0,
++0x0,0x2,0x1,0x1,0x1f,0x1,0x2,0x3,0x4,0x8,0x11,0x2,0x2,0x2,0x1,0x0,0x0,0x0,0x0,0xe0,0x0,0x8,0xc,0xd0,0x60,0xc0,0x40,0x40,0x40,0x0,0xf8,0x0,
++0x0,0x2,0x1,0x1,0x1,0x2,0x2,0x2,0x3,0x2,0x4,0x4,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x40,0x22,0x22,0x24,0x24,0x18,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x1f,0x0,0x2,0x1,0x1,0x1,0x1,0x1,0x2,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0xf0,0x10,0x60,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x3f,0x0,0x0,0x0,0x2,0x1,0x1,0x1,0x1,0x2,0x2,0x4,0x8,0x0,0x0,0x0,0xf8,0x8,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x5,0x9,0x11,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x5,0x9,0x11,0x21,0x1,0x1,0x1,0x1,0x1,0x0,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1,0x11,0x1f,0x10,0x10,0x10,0x0,0x0,0x0,0x0,0x3,0xc,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x0,
++0x0,0x0,0x1,0x21,0x3f,0x20,0x20,0x20,0x0,0x0,0x0,0x0,0x0,0x3,0xc,0x0,0x0,0x0,0x0,0x8,0xfc,0x8,0x8,0x10,0x10,0x20,0x20,0x40,0x80,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x1f,0x1,0x1,0x1,0x1,0x1,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x3f,0x1,0x1,0x1,0x1,0x1,0x1,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,
++0x0,0x0,0x1,0x1,0x1,0x3f,0x3,0x5,0x9,0x11,0x21,0x1,0x5,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x1,0x2,0x4,0x8,0x10,0x20,0x42,0x1,0x0,0x0,0x80,0x80,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x0,
++0x0,0x2,0x2,0x2,0x3f,0x2,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x21,0x40,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,0x0,
++0x0,0x2,0x2,0x2,0x3f,0x2,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x21,0x40,0x0,0x8,0x4,0x12,0x8,0xe4,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,0x0,
++0x0,0x8,0x8,0x4,0x4,0x3f,0x2,0x1,0x1,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x70,0x80,0x80,0x40,0x40,0x20,0x20,0x0,
++0x0,0x8,0x8,0x4,0x4,0x3f,0x2,0x1,0x1,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x4,0x12,0x8,0xe4,0x0,0x0,0x0,0x70,0x80,0x80,0x40,0x40,0x20,0x20,0x0,
++0x0,0x2,0x2,0x2,0x3,0x4,0x4,0x8,0x10,0x20,0x0,0x1,0x2,0xc,0x30,0x0,0x0,0x0,0x0,0x10,0xf8,0x10,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x2,0x2,0x2,0x3,0x4,0x4,0x8,0x10,0x20,0x0,0x1,0x2,0xc,0x30,0x0,0x8,0x4,0x12,0x8,0xe4,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x8,0x8,0x8,0xf,0x10,0x20,0x41,0x1,0x2,0x2,0x4,0x8,0x10,0x20,0x0,0x0,0x0,0x0,0x10,0xf8,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x8,0x8,0x8,0xf,0x10,0x20,0x41,0x1,0x2,0x2,0x4,0x8,0x10,0x20,0x0,0x8,0x4,0x12,0x8,0xf4,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x20,0x20,0xf0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0x8,0x4,0x12,0x8,0x24,0xf0,0x20,0x20,0x20,0x40,0xe0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x4,0x4,0x4,0x4,0x7f,0x4,0x4,0x4,0x4,0x4,0x0,0x0,0x1,0x0,0x0,0x40,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x40,0x80,0x80,0x0,0x0,
++0x0,0x0,0x0,0x8,0x8,0x8,0x8,0x7f,0x8,0x8,0x8,0x8,0x9,0x1,0x2,0x0,0x8,0x4,0x92,0x88,0x84,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x18,0x4,0x2,0x30,0x8,0x4,0x0,0x0,0x1,0x2,0x24,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x18,0x4,0x2,0x30,0x8,0x4,0x0,0x0,0x1,0x2,0x24,0x18,0x0,0x8,0x4,0x12,0x8,0x4,0x0,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x1,0x3,0x4,0x8,0x10,0x20,0x0,0x0,0x0,0x0,0x0,0xe0,0x20,0x40,0x40,0x80,0x0,0x0,0x80,0x40,0x30,0x10,0x0,0x0,
++0x0,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x1,0x3,0x4,0x8,0x10,0x20,0x0,0x8,0x4,0x12,0x8,0xe4,0x20,0x40,0x40,0x80,0x0,0x80,0x40,0x20,0x18,0x8,0x0,
++0x0,0x4,0x4,0x4,0x4,0x7,0x7c,0x4,0x4,0x4,0x4,0x4,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x20,0x40,0x80,0x0,0x0,0x0,0x20,0xf0,0x0,0x0,
++0x0,0x0,0x4,0x4,0x4,0x4,0x7,0x7c,0x4,0x4,0x4,0x4,0x4,0x3,0x0,0x0,0x8,0x4,0x12,0x8,0x4,0x0,0xe0,0x20,0x40,0x80,0x0,0x0,0x20,0xf0,0x0,0x0,
++0x0,0x0,0x0,0x20,0x10,0x8,0xc,0x4,0x0,0x0,0x0,0x1,0x2,0xc,0x30,0x0,0x0,0x0,0x20,0x10,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x40,0x20,0x10,0x18,0x8,0x0,0x0,0x1,0x2,0x4,0x18,0x60,0x8,0x4,0x12,0x48,0x24,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x4,0x4,0x7,0x4,0x8,0x8,0x10,0x24,0x2,0x1,0x2,0x4,0x18,0x60,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x8,0x8,0xf,0x8,0x10,0x10,0x20,0x49,0x5,0x2,0x5,0x8,0x30,0xc0,0x0,0x8,0x4,0x52,0xe8,0x44,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x1,0x1f,0x1,0x1,0x7f,0x1,0x1,0x2,0x2,0x4,0x4,0x8,0x10,0x0,0x0,0x20,0xf0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3,0x3e,0x2,0x2,0xff,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x20,0x8,0x4,0x52,0xe8,0x4,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x4,0x3,0x21,0x18,0x8,0x0,0x0,0x0,0x1,0x6,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x4,0x2,0x21,0x11,0x8,0x8,0x0,0x0,0x1,0x2,0x4,0x8,0x30,0x0,0x0,0x0,0x0,0x10,0x10,0x10,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x8,0x4,0x42,0x22,0x10,0x10,0x0,0x1,0x2,0x4,0x8,0x10,0x60,0x0,0x8,0x4,0x12,0x28,0x24,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x1f,0x0,0x0,0x0,0x7f,0x1,0x1,0x2,0x2,0x4,0x4,0x8,0x10,0x20,0x0,0x20,0xf0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0xff,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x20,0x8,0x4,0x92,0xc8,0x4,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x4,0x4,0x4,0x4,0x6,0x5,0x4,0x4,0x4,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x4,0x4,0x4,0x4,0x6,0x5,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x0,0x8,0x4,0x12,0x8,0x4,0x0,0x0,0x80,0x60,0x20,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0x2,0x2,0x4,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x1f,0x0,0x0,0xc,0x2,0x1,0x0,0x0,0x1,0x2,0x4,0x8,0x30,0x0,0x0,0x10,0xf8,0x10,0x20,0x20,0x40,0x40,0x80,0xc0,0x30,0x10,0x0,0x0,0x0,0x0,
++0x2,0x1,0x0,0x0,0x1f,0x0,0x1,0x3,0x5,0x9,0x11,0x21,0x1,0x1,0x1,0x0,0x0,0x80,0x80,0x0,0xc0,0x80,0x0,0x0,0x40,0x30,0x10,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x4,0x8,0x10,0x0,0x0,0x0,0x20,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x4,0x4,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x20,0x10,0x10,0x8,0x8,0xc,0x4,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x4,0x4,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x0,0x0,0x0,0x8,0x4,0x12,0x8,0x44,0x20,0x10,0x10,0x8,0x8,0xc,0x4,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x4,0x4,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x0,0x0,0x0,0x0,0xc,0x12,0x12,0x4c,0x20,0x10,0x10,0x8,0x8,0xc,0x4,0x0,0x0,0x0,0x0,
++0x0,0x0,0x8,0x8,0x8,0x8,0x9,0xe,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x60,0x80,0x0,0x0,0x0,0x0,0x20,0xf0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x20,0x20,0x21,0x21,0x26,0x38,0x20,0x20,0x20,0x20,0x1f,0x0,0x0,0x8,0x4,0x12,0x8,0x4,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x80,0xc0,0x0,0x0,
++0x0,0x0,0x0,0x20,0x20,0x21,0x21,0x26,0x38,0x20,0x20,0x20,0x20,0x1f,0x0,0x0,0x0,0xc,0x12,0x12,0xc,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x80,0xc0,0x0,0x0,
++0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x4,0x8,0x10,0x20,0x0,0x0,0x0,0x20,0xf0,0x20,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x1,0x1,0x2,0x4,0x8,0x10,0x20,0x0,0x8,0x4,0x12,0x48,0xe4,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x1,0x1,0x2,0x4,0x8,0x10,0x20,0x0,0x0,0xc,0x12,0x52,0xec,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x18,0x24,0x43,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x30,0xe,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x18,0x24,0x43,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x4,0x12,0x8,0x4,0x0,0x0,0x0,0xc0,0x30,0xe,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x18,0x24,0x43,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc,0x12,0x12,0xc,0x0,0x0,0x0,0xc0,0x30,0xe,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x1,0x7f,0x1,0x1,0x9,0x9,0x11,0x21,0x1,0x5,0x2,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x20,0x10,0x8,0x8,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x1,0x1,0x7f,0x1,0x1,0x9,0x9,0x11,0x21,0x5,0x2,0x0,0x8,0x4,0x12,0x8,0x4,0x8,0xfc,0x0,0x0,0x20,0x10,0x8,0x8,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x1,0x1,0x7f,0x1,0x1,0x9,0x9,0x11,0x21,0x5,0x2,0x0,0xc,0x12,0x12,0xc,0x0,0x8,0xfc,0x0,0x0,0x20,0x10,0x8,0x8,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x6,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x10,0x20,0x20,0x40,0x80,0x80,0x40,0x40,0x0,0x0,0x0,
++0x0,0x0,0xe,0x1,0x0,0x0,0x1c,0x3,0x0,0x0,0x1c,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x60,0x20,0x0,0x0,0xc0,0x40,0x0,0x80,0x60,0x20,0x0,0x0,
++0x0,0x2,0x2,0x2,0x2,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x10,0x3f,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x20,0x10,0xf8,0x8,0x8,0x0,
++0x0,0x0,0x0,0x0,0x0,0x4,0x2,0x1,0x0,0x1,0x2,0x4,0x8,0x10,0x60,0x0,0x0,0x0,0x20,0x10,0x20,0x20,0x40,0x80,0x80,0x60,0x20,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x3,0x3e,0x2,0x2,0x3,0x7e,0x2,0x2,0x2,0x2,0x2,0x1,0x0,0x0,0x0,0x40,0xe0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x8,0x4,0x5,0x3e,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x10,0x20,0x0,0x80,0x80,0x40,0x20,
++0x0,0x10,0x8,0x8,0x4,0x5,0x7e,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x10,0x20,0x0,0x80,0x80,0x40,0x40,0x20,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x40,0x48,0xfc,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x20,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x0,0x0,0x1f,0x0,0x0,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0xe0,0x20,0x20,0xe0,0x20,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x3f,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0xf0,0x10,0x0,0x0,0x0,0x0,
++0x0,0x0,0xf,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x6,0x18,0x0,0x0,0x40,0xe0,0x0,0x10,0xf8,0x10,0x10,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x0,0x1,0x1,0x2,0x4,0x8,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x84,0x88,0x90,0xa0,0xc0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x20,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x40,0x40,0xe0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x10,0x1f,0x10,0x10,0x0,0x0,0x0,0x0,0x1,0x2,0x4,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x20,0x3f,0x20,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x4,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x1f,0x9,0x9,0x9,0x9,0x7f,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x40,0xe0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x0,0x2,0x1,0x1,0x1,0x1,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x40,0x80,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x4,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0xf8,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x10,0x8,0x6,0x2,0x0,0x0,0x0,0x1,0x2,0x24,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x2,0x2,0x22,0x3f,0x20,0x20,0x0,0x0,0x0,0x0,0x1,0x2,0x4,0x8,0x0,0x8,0x4,0x12,0x28,0xf4,0x20,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x1,0x1,0x1,0xf,0x1,0x1,0x2,0x2,0x2,0x5,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,
++0x0,0x0,0x4,0x4,0x4,0x7,0x8,0x10,0x21,0x1,0x2,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0xe0,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x2,0x2,0x4,0x4,0x8,0xf,0x10,0x10,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x20,0xe0,0x10,0x10,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x10,0x10,0x20,0xc0,0x20,0x10,0x10,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x2,0x2,0x4,0x4,0x8,0x10,0x10,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x20,0x10,0x10,0x8,0x8,0xfc,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x0,0x40,0xc0,0x40,0x0,0x8,0x8,0xf8,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x20,0x20,0x0,0x0,0x1,0x2,0x4,0x8,0x10,0x3f,0x0,0x0,0x0,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x8,0x8,0xf8,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x10,0x20,0x28,0x2f,0x28,0x20,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x8,0x28,0xe8,0x28,0x8,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x3,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x71,0x21,0x22,0x24,0x28,0x38,0x24,0x22,0x21,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x10,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x60,0x30,0x30,0x28,0x28,0x24,0x24,0x22,0x22,0x21,0x70,0x0,0x0,0x0,0x0,0x0,0xc,0x18,0x18,0x28,0x28,0x48,0x48,0x88,0x88,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x60,0x30,0x28,0x24,0x22,0x21,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0x8,0x8,0x88,0x48,0x28,0x18,0xc,0x0,0x0,0x0,0x0,
++0x0,0x1f,0x10,0x10,0x0,0x4,0x7,0x4,0x0,0x10,0x10,0x1f,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x0,0x20,0xe0,0x20,0x0,0x8,0x8,0xf8,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x10,0x20,0x20,0x20,0x20,0x20,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x8,0x8,0x8,0x8,0x8,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x10,0x8,0x4,0x2,0x4,0x8,0x10,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x8,0x8,0xf8,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x41,0x41,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0xfc,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x6,0x9,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x40,0xa0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x3,0x1,0xf,0x11,0x21,0x21,0x21,0x11,0xf,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0xe0,0x10,0x8,0x8,0x8,0x10,0xe0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x70,0x10,0x8,0x4,0x2,0x1,0x2,0x4,0x8,0x10,0x70,0x0,0x0,0x0,0x0,0x0,0x1c,0x10,0x20,0x40,0x80,0x0,0x80,0x40,0x20,0x10,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x43,0x21,0x11,0x11,0x11,0x11,0xf,0x1,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x84,0x8,0x10,0x10,0x10,0x10,0xe0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x10,0x20,0x20,0x20,0x20,0x10,0x48,0x44,0x7c,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x8,0x8,0x8,0x8,0x10,0x24,0x44,0x7c,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0xc0,0x40,0x40,0x40,0x40,0x40,0xd0,0x20,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x8,0xc,0xb,0x8,0x8,0x8,0x0,0x0,0x80,0x40,0x40,0x80,0x0,0xc0,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0xc,0x12,0x22,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x3,0x4,0x2,0x1,0x2,0x4,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3,0x4,0x4,0x2,0x1,0x2,0x4,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x0,0x0,0x80,0x0,0x0,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x2,0x4,0x4,0x3,0x2,0x4,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x3,0x0,0x0,0x0,0x40,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x20,0xc0,0x0,
++0x0,0x0,0x0,0x1,0xa,0x14,0x4,0x4,0x4,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0,
++0x0,0x3,0x4,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0xe0,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x80,0x0,0x0,0x0,
++0x0,0x0,0x0,0x18,0x8,0x8,0xd,0xa,0x9,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x40,0x80,0x0,0x0,0x0,0x80,0x40,0x70,0x0,0x0,0x0,0x0,
++0x4,0xa,0x2,0x1,0x1,0x1,0x3,0x2,0x2,0x4,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x50,0x50,0x20,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0xc,0xb,0x8,0x8,0x8,0x0,0x0,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xd0,0x20,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x18,0x8,0x4,0x4,0x4,0x2,0x2,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x10,0x20,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x4,0x8,0x7,0x8,0x8,0x7,0x4,0x8,0x8,0x8,0x7,0x0,0x2,0x1,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0xc0,0x20,0x20,0xc0,0x0,
++0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x24,0x4,0x4,0x4,0x4,0x4,0x8,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x40,0x40,0x40,0x40,0x40,0x40,0x50,0x20,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x18,0x14,0x13,0x10,0x10,0x10,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x40,0x20,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x9,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x8,0x14,0x4,0x4,0x4,0x4,0x4,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x7,0x9,0x11,0x11,0x11,0x11,0x11,0x9,0x7,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x8,0x14,0x4,0x2,0x2,0x1,0x1,0x2,0x4,0x8,0x8,0x10,0x0,0x0,0x0,0x0,0x10,0x20,0x20,0x40,0x80,0x0,0x0,0x80,0x80,0x40,0x50,0x20,0x0,0x0,0x0,
++0x0,0x1,0x1,0x11,0x29,0x9,0x9,0x9,0x9,0x9,0x9,0x7,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x4,0x8,0x11,0x11,0x11,0x11,0x11,0xa,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x20,0x10,0x10,0x10,0x10,0x10,0xa0,0x40,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x2,0x2,0x4,0x4,0x8,0xf,0x10,0x10,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x20,0xe0,0x10,0x10,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x0,0x0,0xe0,0x10,0x8,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x8,0x10,0xe0,0x10,0x8,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1f,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x3f,0x20,0x0,0x0,0x0,0x0,0x0,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xf8,0x8,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x0,0x20,0xe0,0x20,0x0,0x8,0x8,0xf8,0x0,0x0,0x0,0x0,
++0x8,0x0,0x7f,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x20,0x0,0xf8,0x8,0x8,0x20,0xe0,0x20,0x0,0x8,0x8,0xf8,0x0,0x0,0x0,0x0,
++0x0,0x33,0x49,0x9,0x5,0x3,0x5,0x9,0x9,0x11,0x11,0x63,0x0,0x0,0x0,0x0,0x0,0x98,0x24,0x20,0x40,0x80,0x40,0x20,0x20,0x10,0x10,0x8c,0x0,0x0,0x0,0x0,
++0x0,0x17,0x18,0x10,0x0,0x0,0x1,0x0,0x20,0x20,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x8,0x10,0xe0,0x10,0x8,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x20,0x20,0x20,0x23,0x24,0x28,0x30,0x20,0x60,0x0,0x0,0x0,0x0,0x0,0xc,0x8,0x18,0x28,0xc8,0x8,0x8,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x4,0x74,0x23,0x20,0x20,0x20,0x23,0x24,0x28,0x30,0x20,0x60,0x0,0x0,0x0,0x0,0x40,0x4c,0x88,0x18,0x28,0xc8,0x8,0x8,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x21,0x22,0x3c,0x22,0x21,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x60,0x80,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x38,0x0,0x0,0x0,0x0,
++0x0,0x1f,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x28,0x10,0x0,0x0,0x0,0x0,0x0,0xf0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x30,0x28,0x28,0x24,0x24,0x22,0x21,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x18,0x28,0x28,0x48,0x48,0x88,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x10,0x20,0x20,0x20,0x20,0x20,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x8,0x8,0x8,0x8,0x8,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xf0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0xf,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0xd0,0x30,0x10,0x0,0x0,0x0,0x0,0x0,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x41,0x41,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0xfc,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x1c,0x8,0x8,0x4,0x4,0x2,0x1,0x0,0x1,0x12,0xc,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x8,0x10,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x70,0x10,0x8,0x4,0x2,0x1,0x2,0x4,0x8,0x10,0x70,0x0,0x0,0x0,0x0,0x0,0x1c,0x10,0x20,0x40,0x80,0x0,0x80,0x40,0x20,0x10,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x3,0x1,0x1f,0x21,0x41,0x41,0x41,0x21,0x1f,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0xf0,0x8,0x4,0x4,0x4,0x8,0xf0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3f,0x0,0x0,0x0,0x0,0x0,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xf8,0x4,0x4,0x0,0x0,
++0x0,0x38,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x10,0x10,0x10,0x10,0x30,0xd0,0x10,0x10,0x10,0x38,0x0,0x0,0x0,0x0,
++0x0,0x73,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x7f,0x0,0x0,0x0,0x0,0x0,0x9c,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0xfc,0x0,0x0,0x0,0x0,
++0x0,0x73,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x7f,0x0,0x0,0x0,0x0,0x0,0x9c,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0xfc,0x4,0x4,0x0,0x0,
++0x0,0x3e,0x24,0x4,0x4,0x7,0x4,0x4,0x4,0x4,0x4,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x8,0x4,0x4,0x4,0x8,0xf0,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0x8,0x88,0x48,0x48,0x48,0x88,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x1c,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x8,0x8,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x8,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x2f,0x30,0x20,0x0,0x0,0x1,0x0,0x0,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x4,0x4,0xfc,0x4,0x4,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x71,0x22,0x24,0x24,0x24,0x3c,0x24,0x24,0x24,0x22,0x71,0x0,0x0,0x0,0x0,0x0,0xf0,0x8,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x8,0xf0,0x0,0x0,0x0,0x0,
++0x0,0x3,0x4,0x8,0x8,0x4,0x3,0x0,0x3,0x4,0x8,0x38,0x0,0x0,0x0,0x0,0x0,0xfc,0x8,0x8,0x8,0x8,0xf8,0x88,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x8,0x0,0xf,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x40,0x40,0xc0,0x40,0x40,0xd0,0x20,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x10,0x17,0x18,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x20,0xc0,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x2,0x2,0x2,0x2,0x4,0x4,0x8,0x1f,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xf0,0x10,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x1f,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x20,0xe0,0x0,0x0,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x4,0x0,0x7,0x8,0x10,0x10,0x1f,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x80,0x40,0x20,0x20,0xe0,0x0,0x0,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x33,0x9,0x9,0x5,0x7,0x9,0x9,0x11,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x98,0x20,0x20,0x40,0xc0,0x20,0x20,0x10,0x88,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0xb,0xc,0x8,0x0,0x1,0x0,0x0,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x20,0x20,0xc0,0x20,0x20,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x38,0x10,0x10,0x10,0x11,0x12,0x14,0x18,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x70,0x20,0x60,0xa0,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,
++0x0,0x4,0x3,0x38,0x10,0x10,0x10,0x11,0x12,0x14,0x18,0x30,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x70,0x20,0x60,0xa0,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1c,0x8,0x8,0x9,0xe,0x9,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60,0x80,0x80,0x0,0x0,0x0,0x80,0x90,0x60,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0xf,0x4,0x4,0x4,0x4,0x4,0x14,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x38,0x10,0x18,0x14,0x12,0x12,0x11,0x10,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x10,0x30,0x50,0x90,0x90,0x10,0x10,0x38,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x70,0x20,0x20,0x20,0xe0,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3,0x4,0x8,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0xb,0x1c,0x8,0x8,0x8,0x8,0xc,0xb,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x40,0x0,0x0,0x0,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x11,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1c,0x8,0x8,0x4,0x4,0x4,0x2,0x1,0x1,0x2,0x14,0x8,0x0,0x0,0x0,0x0,0x70,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0xd,0x13,0x11,0x11,0x11,0x11,0x13,0xd,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x60,0x90,0x10,0x10,0x10,0x10,0x90,0x60,0x0,0x0,0x80,0x0,
++0x0,0x0,0x0,0x1c,0x8,0x4,0x2,0x1,0x2,0x4,0x8,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x70,0x20,0x40,0x80,0x0,0x80,0x40,0x20,0x70,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xf0,0x10,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x40,0x40,0x40,0xc0,0x40,0x40,0x40,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3b,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xf8,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3b,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xf8,0x8,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3c,0x28,0x8,0x8,0xf,0x8,0x8,0x8,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x20,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x38,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x10,0x10,0x10,0x10,0x90,0x90,0x90,0x38,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x20,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x8,0x0,0x0,0x1,0x0,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x20,0xe0,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x38,0x11,0x12,0x12,0x1e,0x12,0x12,0x11,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3,0x4,0x4,0x4,0x3,0x1,0x2,0xa,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x20,0x20,0x20,0xe0,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x7,0x0,0x0,0x7,0x8,0x8,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x40,0xc0,0x40,0x40,0x40,0x40,0xc0,0x60,0x0,0x0,0x0,
++0x0,0x0,0x1,0x2,0x0,0x7,0x8,0x8,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x40,0xc0,0x40,0x40,0x40,0x40,0xc0,0x60,0x0,0x0,0x0,
++0x0,0x4,0x2,0x1,0x0,0x7,0x8,0x8,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x40,0x80,0x0,0x0,0x40,0xc0,0x40,0x40,0x40,0x40,0xc0,0x60,0x0,0x0,0x0,
++0x0,0x2,0x1,0x0,0x0,0x7,0x8,0x8,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x40,0xc0,0x40,0x40,0x40,0x40,0xc0,0x60,0x0,0x0,0x0,
++0x0,0x0,0x7,0x0,0x0,0x3,0x4,0x8,0xf,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x80,0x40,0x20,0xe0,0x0,0x0,0x20,0xc0,0x0,0x0,0x0,
++0x0,0x0,0x1,0x2,0x0,0x3,0x4,0x8,0xf,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x80,0x40,0x20,0xe0,0x0,0x0,0x40,0x80,0x0,0x0,0x0,
++0x0,0x4,0x2,0x1,0x0,0x3,0x4,0x8,0xf,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x40,0x80,0x0,0x0,0x80,0x40,0x20,0xe0,0x0,0x0,0x20,0xc0,0x0,0x0,0x0,
++0x0,0x2,0x1,0x0,0x0,0x3,0x4,0x8,0xf,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x80,0x40,0x20,0xe0,0x0,0x0,0x20,0xc0,0x0,0x0,0x0,
++0x0,0x0,0x3,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x2,0x4,0x0,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x4,0x2,0x1,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x2,0x1,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x7,0x0,0x3,0x4,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x1,0x2,0x0,0x3,0x4,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,
++0x0,0x4,0x2,0x1,0x0,0x3,0x4,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x40,0x80,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,
++0x0,0x2,0x1,0x0,0x0,0x3,0x4,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,
++0x0,0x0,0xf,0x0,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0xe0,0x0,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xb0,0x0,0x0,0x0,
++0x0,0x0,0x1,0x2,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xb0,0x0,0x0,0x0,
++0x0,0x8,0x5,0x2,0x0,0x10,0x10,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,0x60,0x0,0x0,0x0,
++0x0,0x2,0x1,0x0,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xb0,0x0,0x0,0x0,
++0x0,0xf,0x0,0x2,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0xe0,0x0,0x80,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xb0,0x0,0x0,0x0,
++0x0,0x1,0x2,0x0,0x2,0x8,0x8,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x80,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xb0,0x0,0x0,0x0,
++0x4,0x2,0x1,0x0,0x2,0x8,0x8,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x40,0x80,0x0,0x0,0x80,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xb0,0x0,0x0,0x0,
++0x2,0x1,0x0,0x0,0x2,0x8,0x8,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x80,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xb0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x2,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xb0,0x0,0x0,0x0,
++0x0,0x1,0x2,0x4,0x0,0x3,0x4,0x8,0xf,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x0,0x80,0x40,0x20,0xe0,0x0,0x0,0x20,0xc0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7,0x8,0x8,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0xc0,0x40,0x40,0x40,0x40,0xc0,0x60,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x7,0x8,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0xa0,0x60,0x20,0x20,0x20,0x60,0xa0,0x20,0x20,0x40,0x80,0x0,
++0x0,0x0,0x1,0x2,0x0,0x1a,0xd,0x9,0x9,0x9,0x9,0x9,0x9,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x0,0x0,0x0,
++0x0,0x0,0x1,0x2,0x0,0xd,0x6,0x4,0x4,0x4,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x60,0x0,0x0,0x0,
++0x0,0x4,0x2,0x1,0x0,0xd,0x6,0x4,0x4,0x4,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x40,0x80,0x0,0x0,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x60,0x0,0x0,0x0,
++0x0,0x2,0x1,0x0,0x0,0xd,0x6,0x4,0x4,0x4,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x60,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x8,0x8,0x10,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0x10,0xa0,0x40,
++0x0,0x4,0x4,0x8,0x1f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x3,0xc,0x30,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x10,0x10,0xa0,0x40,0xa0,0x10,0x10,0x0,0x0,
++0x0,0x0,0x0,0x0,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x0,0x0,0x0,0x0,
++0x0,0x0,0x3f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xf,0x0,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0x0,0x0,
++0x0,0x4,0x4,0x8,0x1f,0x1,0x1,0x1,0x1,0x2,0x2,0x4,0x8,0x11,0x20,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0x10,0xa0,0x40,
++0x0,0x1,0x1,0x1,0x1,0x7f,0x1,0x1,0x2,0x2,0x4,0x8,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x8,0x0,0x0,
++0x0,0x0,0x3f,0x0,0x0,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0xc0,0x40,0x80,0x0,0xf8,0x8,0x8,0x8,0x8,0x8,0x10,0x10,0xa0,0x40,
++0x0,0x1,0x9,0x9,0x11,0x1f,0x1,0x1,0x1,0x2,0x2,0x4,0x4,0x8,0x10,0x20,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0x50,0x20,
++0x0,0x0,0x2,0x2,0x4,0x4,0x8,0x8,0x11,0x8,0x8,0x4,0x4,0x2,0x2,0x0,0x0,0x0,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x80,0x80,0x40,0x40,0x20,0x20,0x0,
++0x0,0x0,0x7f,0x2,0x2,0x4,0x8,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x20,0xa0,0x40,
++0x0,0x0,0x3f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x4,0x4,0x4,0x4,0x4,0x4,0x8,0x9,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xa0,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x4,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x0,
++0x0,0x0,0x7f,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x11,0x11,0x11,0x11,0x11,0x11,0x1f,0x1,0x1,0x1,0x7f,0x0,0x0,0x0,0x0,0x0,0x10,0x10,0x10,0x10,0x10,0x10,0xf0,0x0,0x0,0x0,0xfc,0x0,0x0,
++0x0,0x0,0x0,0x1,0x2,0x4,0x8,0x11,0x3,0x5,0x9,0x11,0x1,0x1,0x1,0x1,0x0,0x40,0x80,0x0,0x0,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x1f,0x0,0x0,0x0,0x1f,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x40,0x80,0x0,0x0,0xf8,0x8,0x8,0x8,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0xf,0x8,0x8,0x8,0xa,0x9,0x8,0x8,0x8,0x8,0x8,0xf,0x0,0x0,0x0,0x0,0xe0,0x20,0x20,0x20,0x20,0x20,0xa0,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,
++0x0,0x0,0x3f,0x4,0x4,0x4,0x4,0x4,0x4,0x5,0x4,0x4,0x4,0x4,0x4,0x4,0x0,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0xc0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x2,0x2,0x2,0x7f,0x4,0x4,0x4,0xf,0x0,0x0,0x0,0x0,0x0,0x2,0x1,0x0,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0xf0,0x10,0x10,0x20,0x20,0x40,0x80,0x0,
++0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x4,0x4,0x8,0x10,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x20,0xf0,0x8,0x0,0x0,
++0x0,0x10,0x8,0x4,0x2,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x7f,0x1,0x1,0x1,0xf,0x10,0x20,0x20,0x20,0x20,0x10,0xf,0x0,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x10,0xe0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x7f,0x1,0x1,0xf,0x10,0x20,0x20,0x20,0x20,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x10,0xe0,0x0,
++0x0,0x0,0x8,0x8,0x8,0x7f,0x8,0x8,0x8,0x8,0x8,0x9,0x8,0x7,0x0,0x0,0x0,0x0,0x40,0x40,0x40,0xfc,0x40,0x40,0x40,0x80,0x80,0x0,0x0,0xf0,0x0,0x0,
++0x0,0x0,0x7f,0x9,0x9,0x11,0x1f,0x1,0x1,0x1,0x2,0x2,0x4,0x8,0x10,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0xf8,0x8,0x8,0x8,0x8,0x8,0x10,0x10,0x20,0x0,
++0x0,0x0,0x1c,0x4,0x4,0x4,0x2,0x2,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x18,0x0,
++0x0,0x2,0x2,0x4,0x4,0x8,0x8,0x1f,0x1,0x2,0x4,0x8,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x40,0x20,0xf0,0x10,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x0,0x0,0x4,0x2,0x1,0x0,0x0,0x1,0x2,0x4,0x8,0x0,0x0,0x0,0x0,0xf0,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x40,0x20,0x0,0x0,0x0,
++0x0,0x3f,0x8,0x8,0x8,0x10,0x10,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x20,0x20,0x20,0x40,0x40,0xf8,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x0,
++0x0,0x8,0x8,0x8,0x8,0x10,0x10,0x10,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x8,0x10,0x10,0x20,0x0,
++0x0,0x2,0x2,0x2,0x2,0x7f,0x2,0x2,0x2,0x4,0x4,0x4,0x8,0x10,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7c,0x0,
++0x0,0x0,0x1,0x1,0x1,0x2,0x2,0x4,0x4,0x8,0x10,0x20,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,
++0x0,0x0,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x60,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x84,0x84,0x7c,0x0,
++0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x8,0x4,0x2,0x1,0x0,0x0,0x1,0x2,0x4,0x18,0x60,0x0,0x0,0x10,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x40,0x20,0x10,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x78,0x88,0x8,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x73,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x73,0x73,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9c,0x9c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x80,0x80,0x80,0x0,0x0,0x80,0x80,0x80,0x0,0x0,0x80,0x80,0x80,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xee,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xee,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xee,0xee,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xee,0xee,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x0,0x1,0x1,0x1,0x0,0x1,0x1,0x1,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x0,0x1,0x1,0x1,0x0,0x1,0x1,0x1,0x0,0x1,0x1,0x1,0x0,0x80,0x80,0x80,0x0,0x80,0x80,0x80,0x0,0x80,0x80,0x80,0x0,0x80,0x80,0x80,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x0,0x3,0x3,0x3,0x3,0x3,0x3,0x7f,0x7f,0x3,0x3,0x3,0x3,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x8,0x8,0x8,0x8,0x8,0x9,0x8,0xff,0x9,0x9,0x8,0x8,0x8,0x9,0xe,0x8,0x0,0x10,0x30,0x40,0x80,0x0,0x4,0xfe,0x0,0x0,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x20,0x20,0x20,0x27,0xfc,0x24,0x24,0x27,0x24,0x24,0x3c,0xe6,0x45,0x4,0x8,0x10,0x20,0x28,0x24,0xfe,0x20,0x20,0x24,0xa4,0xa8,0xa8,0x90,0x90,0x30,0x4a,0x8a,0x6,
++0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x10,0x17,0x18,0x10,0x0,0x0,0x0,0x10,0x10,0xf,0x0,0x0,0xf0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,
++0x0,0x7,0x8,0x10,0x10,0x0,0x0,0x0,0x3,0x4,0x8,0x10,0x10,0x10,0x1f,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0xe0,0x0,0x0,0x0,0x0,0x10,0x10,0xf0,0x0,
++0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x2f,0xf9,0xa9,0xaa,0xaa,0xac,0xaa,0xaa,0xa9,0xe9,0xad,0xa,0x8,0x8,0x8,0x4,0x7e,0x4,0x4,0x14,0x7c,0x54,0x54,0x54,0x54,0x74,0x54,0x4,0x4,0x14,0xc,
++0x0,0x7f,0x44,0x48,0x48,0x51,0x49,0x49,0x45,0x45,0x45,0x69,0x51,0x40,0x40,0x40,0x4,0xfe,0x8,0x8,0x28,0xf8,0x28,0x28,0x28,0x28,0x28,0xe8,0x28,0x8,0x28,0x10,
++0x10,0x10,0x10,0x11,0x13,0xfc,0x11,0x11,0x12,0x10,0x17,0x1c,0xf0,0x40,0x1,0x6,0x40,0x40,0x90,0x8,0xfc,0x4,0x10,0xf8,0x40,0x44,0xfe,0x40,0xa0,0x90,0xe,0x4,
++0x10,0x10,0x10,0x11,0xff,0x10,0x11,0x15,0x1a,0x30,0xd7,0x10,0x10,0x10,0x51,0x26,0x40,0x40,0x90,0x8,0xfc,0x4,0x10,0xf8,0x40,0x44,0xfe,0x40,0xa0,0x90,0xe,0x4,
++0x0,0x0,0x8,0x7f,0x48,0x48,0x49,0x49,0x48,0x48,0x48,0x78,0x48,0x1,0x2,0x4,0x90,0x90,0x94,0xfe,0x90,0x90,0x8,0x8,0x90,0x90,0x60,0x40,0xa0,0x10,0xe,0x4,
++0x0,0x0,0x8,0x7d,0x4b,0x48,0x49,0x49,0x4a,0x48,0x4f,0x78,0x48,0x0,0x1,0x6,0x40,0x40,0x90,0x8,0xfc,0x4,0x10,0xf8,0x40,0x44,0xfe,0x40,0xa0,0x90,0xe,0x4,
++0x2,0x1,0xff,0x0,0x1f,0x10,0x10,0x10,0x1f,0x5,0xc,0x14,0x24,0xc5,0x6,0x4,0x0,0x4,0xfe,0x10,0xf8,0x10,0x10,0x10,0xf0,0x8,0x90,0x60,0x30,0xe,0x4,0x0,
++0x10,0x10,0x25,0x7f,0x45,0x44,0x45,0x7c,0x44,0x45,0x45,0x45,0x7d,0x45,0x0,0x0,0x20,0x20,0x24,0x24,0xfc,0x0,0xfc,0x4,0x4,0xfc,0x4,0x0,0x2,0x2,0xfe,0x0,
++0x0,0x0,0x1f,0x10,0x93,0x52,0x53,0x10,0x37,0x54,0xd7,0x10,0x24,0x24,0x47,0x4,0x80,0x44,0xfe,0x0,0xf8,0x8,0xf8,0x0,0xbc,0xa4,0xbc,0x40,0x44,0x44,0xfc,0x4,
++0x8,0xff,0x8,0x43,0x32,0x13,0x2,0xf3,0x11,0x13,0x14,0x12,0x16,0x1a,0x13,0x0,0x24,0xfe,0x20,0xf8,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x44,0x44,0xa4,0x4,0xd4,0x8,
++0x20,0x21,0x28,0x3c,0x53,0x90,0x15,0xfe,0x10,0x17,0x10,0x29,0x24,0x44,0x81,0x6,0x18,0xe0,0x40,0x48,0xfc,0xe0,0x5c,0x48,0x40,0xfe,0x90,0x10,0xa0,0x60,0x98,0x8,
++0x4,0x4,0xff,0x4,0x4,0x0,0x8,0x4,0x4,0x2,0x1,0x2,0x4,0x8,0x30,0xc0,0x40,0x44,0xfe,0x40,0x40,0x20,0x20,0x40,0x40,0x80,0x0,0x80,0x40,0x30,0xe,0x4,
++0x0,0x5,0xff,0x11,0x11,0x21,0x24,0x7f,0xa4,0x27,0x25,0x24,0x3c,0x24,0x0,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xfc,0x10,0xfe,0x10,0x90,0x90,0x10,0x50,0x20,
++0x0,0x3f,0x11,0x9,0x7f,0x42,0x82,0x7f,0x4,0x7,0xa,0x9,0x10,0x11,0x22,0xc,0x78,0x80,0x10,0x20,0xfe,0x2,0x4,0xf8,0x0,0xf0,0x20,0x40,0x80,0x60,0x1c,0x8,
++0x4,0x7a,0x49,0x48,0x57,0x60,0x51,0x4a,0x4c,0x4b,0x6a,0x52,0x42,0x42,0x4f,0x40,0x4,0x8,0x10,0x4,0xfe,0xa0,0x10,0x8,0x8,0xfc,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x28,0x28,0xfe,0x29,0x39,0x12,0x7c,0x57,0x54,0x7c,0x11,0xfe,0x10,0x10,0x10,0x13,0x40,0x20,0x0,0xfe,0x2,0x44,0x40,0xfe,0x88,0x88,0x8,0x90,0x60,0x50,0x8c,0x4,
++0x10,0x1f,0x20,0x5f,0x80,0x3f,0x2,0x3f,0x22,0x4,0xff,0x8,0x19,0x6,0x9,0x30,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0xe8,0x28,0x8,0xf8,0x88,0x8,0xa,0x8a,0x44,
++0x2,0x1,0x7f,0x40,0x82,0x2,0x2,0xff,0x4,0x8,0x18,0x6,0x1,0x2,0xc,0x30,0x0,0x0,0xfe,0x2,0x4,0x0,0x4,0xfe,0x20,0x20,0x20,0x40,0x80,0x40,0x30,0x10,
++0x8,0x8,0x8,0x17,0x10,0x31,0x52,0x94,0x1b,0x12,0x13,0x12,0x13,0x12,0x10,0x10,0x40,0x40,0x48,0xfc,0xa0,0x10,0x4e,0x44,0xf8,0x48,0xf8,0x48,0xf8,0x4a,0x42,0x3e,
++0x10,0x10,0x10,0x13,0xfa,0x14,0x10,0x3f,0xd0,0x10,0x11,0x10,0x10,0x10,0x50,0x23,0x40,0x20,0x0,0xfe,0x2,0x44,0x40,0xfe,0x88,0x88,0x8,0x90,0x60,0x50,0x8c,0x4,
++0x0,0x8,0x7f,0x48,0x49,0x48,0x4f,0x78,0x4b,0x4a,0x4a,0x4b,0x7a,0x4a,0x3,0x2,0x80,0x48,0xfc,0x0,0x10,0xa4,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x1,0x21,0x21,0x3f,0x0,0x3f,0x20,0x2f,0x20,0x20,0x3f,0x20,0x20,0x40,0x80,0x0,0x0,0x8,0x8,0xf8,0x0,0xfc,0x10,0xf8,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,0x80,
++0x4,0x3e,0x24,0x25,0x25,0x3e,0x24,0x27,0x24,0x3c,0x25,0x24,0x24,0x44,0x94,0x9,0x40,0x20,0x0,0xfe,0x2,0x44,0x40,0xfe,0x88,0x88,0x8,0x90,0x60,0x50,0x8c,0x4,
++0x1,0x7f,0x41,0x82,0x7f,0x4,0xc,0x3,0x1c,0x1,0xff,0x5,0x9,0x11,0x61,0x1,0x0,0xfe,0x2,0x4,0xfc,0x20,0x40,0x80,0x70,0x4,0xfe,0x40,0x20,0x1c,0x8,0x0,
++0x4,0x3e,0x24,0x27,0x24,0x3c,0x24,0x24,0x24,0x3c,0x24,0x24,0x24,0x45,0x96,0x8,0x40,0x20,0x4,0xfe,0x10,0xf8,0x90,0x90,0x90,0x90,0x90,0x90,0x92,0x12,0xe,0x0,
++0x3f,0x20,0x3f,0x20,0x3f,0x0,0x6,0x78,0x40,0x40,0x40,0x46,0x58,0x60,0x0,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0x4,0xfe,0x84,0x84,0x84,0xa4,0x94,0x88,0x80,0x80,
++0x1,0x1,0x3f,0x21,0x21,0xff,0x2,0xc,0x30,0xc0,0x3f,0x24,0x24,0x24,0xff,0x0,0x0,0x8,0xfc,0x8,0x8,0xfe,0x80,0x60,0x1e,0x4,0xf8,0x48,0x48,0x48,0xfe,0x0,
++0x0,0x0,0x7c,0x44,0x44,0x44,0x44,0x44,0x44,0x47,0x40,0x40,0x40,0x7f,0x40,0x0,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0x44,0x44,0xc4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x8,0x8,0xa,0x7f,0x8,0x3f,0x8,0xff,0x10,0x1e,0x12,0x22,0x22,0x54,0x89,0x2,0x40,0x40,0x44,0x7e,0x88,0x8,0x48,0x48,0x48,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x8,0xa,0x7f,0x8,0x3e,0x9,0xfe,0x10,0x1e,0x22,0x4a,0x85,0x0,0x24,0x22,0x40,0x40,0x40,0x40,0x44,0xfe,0x8,0x48,0x50,0x20,0x50,0x8e,0x4,0x0,0x88,0x44,0x4,
++0x10,0x20,0x7d,0x44,0x7c,0x45,0x7c,0x10,0xfe,0x28,0x55,0x92,0x7c,0x10,0x11,0x10,0x0,0x4,0xde,0x44,0x44,0x54,0xcc,0x44,0x44,0xcc,0x54,0x44,0x44,0x44,0x54,0x88,
++0x20,0x10,0x13,0xfc,0x8,0x10,0x10,0x37,0x58,0x94,0x10,0x10,0x10,0x11,0x12,0x14,0x10,0x38,0xc0,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x12,0x12,0x12,0x2f,0x22,0x6f,0xa2,0x3f,0x24,0x27,0x24,0x24,0x28,0x33,0x20,0x20,0x10,0x10,0x10,0x94,0x3e,0xc4,0x24,0xa8,0x28,0xa8,0x90,0x90,0xa8,0x28,0x46,0x84,
++0x2,0x4,0x1f,0x11,0x15,0x11,0x1f,0x11,0x15,0x11,0x1,0xff,0x2,0x4,0x18,0x60,0x0,0x10,0xf8,0x10,0x50,0x10,0xf0,0x10,0x50,0x10,0x4,0xfe,0x80,0x60,0x1c,0x8,
++0x10,0x11,0x17,0x14,0x5d,0x54,0x57,0x94,0x15,0x14,0x10,0x1f,0x10,0x11,0x12,0x1c,0x80,0x4,0xfe,0x44,0x54,0x44,0xfc,0x44,0x54,0x4,0x40,0xfe,0xa0,0x10,0xe,0x4,
++0x0,0x41,0x37,0x14,0x85,0x64,0x27,0xc,0x15,0x24,0xe0,0x2f,0x20,0x21,0x22,0x2c,0x80,0x4,0xfe,0x44,0x54,0x44,0xfc,0x44,0x54,0x4,0x40,0xfe,0xa0,0x10,0xe,0x4,
++0x4,0x4,0xff,0x4,0x4,0x1f,0x11,0x11,0x11,0x1f,0x10,0x10,0x10,0x10,0xf,0x0,0x40,0x44,0xfe,0x40,0x50,0xf8,0x10,0x10,0x10,0xf0,0x10,0x0,0x4,0x4,0xfc,0x0,
++0x10,0x13,0x12,0x12,0xfe,0x13,0x11,0x19,0x37,0xd1,0x11,0x12,0x12,0x15,0x58,0x20,0x44,0xe4,0x44,0x54,0x54,0xd4,0x14,0x54,0xf4,0x54,0x54,0x44,0x44,0x44,0x94,0x8,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x15,0x19,0x31,0xd1,0x12,0x12,0x12,0x14,0x58,0x20,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0x10,0x18,0xe,0x4,0x0,
++0x0,0x0,0x9,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x7a,0x4a,0x4,0x8,0x10,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0x10,0x18,0xe,0x4,0x0,
++0x0,0x8,0x7f,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4a,0x4a,0x7a,0x4a,0x2,0x1,0x0,0x0,0x8,0xfc,0x48,0x48,0x48,0x48,0x48,0xf8,0x8,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x12,0x1f,0x28,0x45,0x80,0x3f,0x21,0x21,0x21,0x3f,0x20,0x20,0x20,0x20,0x1f,0x0,0x48,0x7c,0xa0,0x10,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x2,0x2,0xfe,0x0,
++0x0,0x0,0x4,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x20,0x10,0x8,0xe,0x4,0x0,
++0x0,0x0,0x1f,0x10,0x90,0x57,0x54,0x14,0x34,0x57,0xd4,0x14,0x24,0x24,0x43,0x0,0x80,0x44,0xfe,0x0,0x4,0xfe,0x44,0x44,0x44,0xfc,0x4,0x0,0x2,0x2,0xfe,0x0,
++0x0,0x0,0x3f,0x21,0x21,0x21,0x21,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x10,0xfc,0x13,0x10,0x14,0x19,0x31,0xd1,0x12,0x12,0x14,0x14,0x58,0x23,0xa0,0x90,0x90,0x84,0xfe,0x80,0x80,0xf8,0x8,0x8,0x90,0x60,0x20,0x50,0x8e,0x4,
++0x4,0x7e,0x44,0x44,0x47,0x7c,0x10,0x11,0x5d,0x51,0x52,0x52,0x5c,0x74,0xc8,0x3,0xa0,0x90,0x90,0x84,0xfe,0x80,0x80,0xf8,0x8,0x8,0x90,0x60,0x20,0x50,0x8e,0x4,
++0x28,0x28,0xff,0x29,0x39,0x11,0x7d,0x55,0x55,0x7d,0x11,0xff,0x11,0x11,0x10,0x10,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x11,0x50,0x20,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x15,0xff,0x11,0x7d,0x11,0xff,0x11,0x31,0x39,0x55,0x55,0x91,0x10,0x10,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x11,0x11,0x11,0x11,0xfd,0x11,0x11,0x11,0x11,0x1d,0xf1,0x40,0x0,0x0,0x3,0x4,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x48,0x86,0x2,
++0x3f,0x1,0x7f,0x89,0x22,0x7f,0x22,0x3e,0x8,0x7f,0x49,0x7f,0x8,0x7f,0x8,0x9,0xf8,0x0,0xfe,0x24,0x8,0x7c,0x48,0x48,0x78,0x48,0x48,0x78,0x48,0x48,0x88,0x18,
++0x0,0x3f,0x24,0x24,0x3f,0x1,0x1,0x3f,0x1,0x1,0xff,0x2,0x4,0x8,0x1f,0x0,0x8,0xfc,0x48,0x48,0xf8,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,0x20,0x10,0xf8,0x8,
++0x4,0x4,0xc,0x32,0x1,0x2,0xc,0x30,0xdf,0x11,0x11,0x1f,0x10,0x10,0x10,0xf,0x40,0x20,0x58,0x88,0x0,0x80,0x60,0x18,0xf6,0x10,0x10,0xf0,0x10,0x4,0x4,0xfc,
++0x2,0x4,0x8,0x3f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x3f,0x20,0x0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x0,0x20,0x40,0x84,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0xff,0x1,0x2,0x4,0x1f,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x4,0xfe,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x17,0x14,0x14,0xff,0x14,0x10,0x1b,0x30,0xd0,0x1f,0x10,0x11,0x12,0x57,0x20,0x4,0xfe,0xa4,0xa4,0xfc,0x44,0x50,0xf8,0x40,0x44,0xfe,0x80,0x10,0x8,0xfc,0x4,
++0x8,0x8,0xf,0x10,0x10,0x33,0x52,0x92,0x12,0x13,0x12,0x12,0x12,0x12,0x13,0x12,0x0,0x4,0xfe,0x40,0x88,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x7e,0x44,0x54,0x54,0x55,0x54,0x54,0x54,0x54,0x54,0x10,0x28,0x24,0x45,0x82,0x40,0x40,0x44,0x7e,0x88,0x8,0x48,0x48,0x48,0x50,0x50,0x20,0x50,0x8e,0x4,0x0,
++0x4,0xe,0x78,0x8,0x8,0x7e,0x8,0x8,0xff,0x8,0x9,0x8,0x10,0x10,0x20,0x40,0x8,0xfc,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x8,0x1c,0xf1,0x11,0x11,0xfd,0x11,0x39,0x35,0x50,0x51,0x97,0x10,0x10,0x10,0x10,0x20,0x44,0xfe,0x24,0x24,0xfc,0x24,0x44,0xfc,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x12,0xf9,0x20,0x2f,0x20,0x24,0xfa,0x21,0x21,0x22,0x22,0x3c,0xe4,0x48,0x0,0x0,0x4,0x7e,0x10,0xd0,0x10,0x90,0xfc,0x10,0x10,0x90,0x50,0x50,0x14,0xfe,0x0,
++0x1,0x9,0xfd,0x21,0x25,0x25,0x25,0xf5,0x25,0x29,0x21,0x22,0x3a,0xe2,0x44,0x8,0x0,0x4,0x7e,0x10,0x10,0x10,0x10,0x7c,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x0,
++0x21,0x22,0x27,0x24,0xfe,0x25,0x24,0x2f,0x34,0xe6,0x25,0x24,0x24,0x28,0xb2,0x41,0x4,0x3e,0xa4,0xa4,0xa4,0xa4,0xc2,0xbc,0xa4,0xa4,0xa4,0x98,0x88,0x94,0xa4,0x42,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x11,0x15,0x19,0x31,0xd1,0x12,0x12,0x14,0x59,0x20,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x4,0x48,0x48,0x50,0x30,0x20,0x50,0x8e,0x4,0x0,
++0x8,0x12,0x3f,0x22,0x32,0x2a,0x22,0xfe,0x22,0x32,0x2a,0x22,0x22,0x22,0x4a,0x85,0x8,0x7c,0x48,0x48,0x48,0x86,0x0,0xfc,0x44,0x48,0x28,0x10,0x30,0x48,0x8e,0x4,
++0x0,0x2b,0x28,0x24,0x45,0x43,0x85,0x7f,0x25,0x25,0x25,0x25,0x24,0x24,0x4c,0x83,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x48,0x86,0x2,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x31,0x39,0x55,0x51,0x91,0x12,0x12,0x14,0x19,0x10,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x4,0x48,0x48,0x50,0x30,0x20,0x50,0x8e,0x4,0x0,
++0x8,0x48,0x49,0x49,0x49,0x7d,0x41,0x41,0x79,0x49,0x49,0x4a,0x4a,0x4c,0x89,0x8,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x4,0x48,0x48,0x50,0x30,0x20,0x50,0x8e,0x4,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x11,0x12,0x1c,0x33,0xd0,0x10,0x10,0x11,0x11,0x52,0x24,0x20,0xa0,0xa0,0x90,0x10,0xe,0x4,0x8,0xfc,0x88,0x88,0x88,0x8,0x8,0x28,0x10,
++0x10,0x10,0x12,0x11,0xfc,0x13,0x14,0x18,0x30,0xd7,0x10,0x10,0x10,0x10,0x50,0x20,0x40,0x40,0x48,0x50,0x40,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x8,0x8,0xa,0x11,0x10,0x37,0x30,0x50,0x90,0x1f,0x10,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0x48,0x50,0x40,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x40,0x20,0xf8,0x7,0x54,0x55,0xfd,0x25,0x25,0x25,0x3d,0xe5,0x26,0x4b,0x90,0x0,0x10,0x48,0xbe,0x40,0x54,0x54,0x7e,0x48,0x48,0x48,0x7e,0x48,0xa8,0x98,0x8,0x8,
++0x1,0x21,0x19,0x9,0x1,0x3f,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x8,0x18,0x20,0x0,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,
++0x2,0x2,0x2,0x2,0x3f,0x2,0x2,0x12,0x32,0x22,0x44,0x84,0x8,0x10,0x20,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x30,0x2c,0x26,0x22,0x20,0x20,0xa0,0x40,0x0,
++0x10,0x10,0x21,0x20,0x44,0xf8,0x11,0x20,0x40,0xfc,0x3,0x0,0x1c,0xe0,0x40,0x0,0x20,0x20,0x24,0xac,0xb0,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x8,0x8,0xa,0xff,0x8,0x8,0x7e,0x8,0xa,0xff,0x8,0x10,0x10,0x20,0x40,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0xa,0xff,0x8,0x7e,0x8,0xff,0x8,0x11,0x3f,0xd1,0x11,0x11,0x11,0x11,0x1,0x0,0x7c,0x48,0x50,0x58,0x44,0x64,0x58,0x50,0xf0,0x10,0x10,0x10,0x50,0x20,0x0,
++0x11,0x11,0x11,0x17,0xf9,0x11,0x37,0x39,0x55,0x57,0x91,0x11,0x12,0x12,0x14,0x10,0x0,0x3e,0x22,0xe4,0x24,0x28,0xe4,0x24,0x22,0xe2,0x22,0x34,0x28,0x20,0x20,0x20,
++0x10,0x10,0x11,0x10,0xfc,0x13,0x32,0x38,0x57,0x50,0x90,0x10,0x10,0x11,0x12,0x14,0x40,0x28,0xfc,0x88,0x50,0xfe,0x44,0x20,0xfe,0x80,0xf8,0x88,0x88,0x8,0x28,0x10,
++0x8,0x7c,0x49,0x48,0x48,0x7b,0x4a,0x48,0x4f,0x78,0x48,0x48,0x48,0x48,0x89,0x1a,0x40,0x28,0xfc,0x88,0x50,0xfe,0x44,0x20,0xfe,0x80,0xf8,0x88,0x88,0x88,0x28,0x10,
++0x11,0x11,0x21,0x27,0x49,0xf1,0x27,0x41,0xf9,0x47,0x1,0x19,0xe2,0x42,0x4,0x0,0x0,0x3e,0x22,0xe4,0x24,0x28,0xe4,0x24,0x22,0xe2,0x22,0x34,0x28,0x20,0x20,0x20,
++0x10,0x10,0x17,0x10,0xfd,0x10,0x37,0x39,0x55,0x52,0x95,0x10,0x13,0x10,0x10,0x10,0x40,0x48,0xfc,0x40,0xf8,0x80,0xfe,0x20,0x50,0x4e,0xf4,0x40,0xf8,0x40,0x40,0x40,
++0x0,0x8,0xfd,0x10,0x10,0x23,0x22,0x3c,0x67,0xa4,0x24,0x24,0x24,0x3c,0x25,0x2,0x40,0x28,0xfc,0x88,0x50,0xfe,0x44,0x20,0xfe,0x80,0xf8,0x88,0x88,0x88,0x28,0x10,
++0x10,0x10,0x10,0x14,0x7f,0x54,0x54,0x55,0x54,0x7c,0x13,0x14,0x1c,0xe4,0x40,0x0,0x20,0x20,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x10,0x10,0x11,0x1c,0x20,0x23,0x7e,0x90,0x13,0x7c,0x10,0x10,0x14,0x18,0x11,0x2,0x40,0x28,0xfc,0x88,0x50,0xfe,0x44,0x20,0xfe,0x80,0xf8,0x88,0x88,0x88,0x28,0x10,
++0x8,0x8,0xb,0x11,0x10,0x37,0x54,0x90,0x1f,0x11,0x11,0x11,0x11,0x11,0x12,0x14,0x80,0x50,0xf8,0x10,0xa0,0xfc,0x88,0x40,0xfe,0x0,0xf0,0x10,0x10,0x10,0x50,0x20,
++0x0,0x40,0x37,0x11,0x0,0xf,0xe8,0x20,0x2f,0x21,0x21,0x21,0x29,0x31,0x22,0x4,0x80,0x48,0xfc,0x10,0xa0,0xfe,0x84,0x40,0xfe,0x0,0xf0,0x10,0x10,0x10,0x50,0x20,
++0x4,0x4,0xff,0x4,0x4,0xf,0x10,0x2f,0x48,0x8,0xf,0x8,0x8,0x8,0x7,0x0,0x40,0x44,0xfe,0x40,0x10,0xf8,0x10,0x90,0x90,0x90,0x90,0x30,0x4,0x4,0xfc,0x0,
++0x4,0x3e,0x24,0x25,0x26,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x45,0x94,0x8,0x80,0x88,0xfc,0x8,0x28,0xf8,0x28,0x28,0x28,0xe8,0x28,0x10,0x2,0x2,0xfe,0x0,
++0x4,0x4,0x4,0xf,0x10,0x20,0x5f,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0xf,0x0,0x0,0x0,0x10,0xf8,0x10,0x90,0xd0,0x90,0x90,0x90,0x90,0x30,0x4,0x4,0xfc,0x0,
++0x2,0x1,0x7f,0x8,0x17,0x14,0x37,0x50,0x9f,0x12,0x14,0x5,0xc,0x14,0x66,0x4,0x0,0x8,0xfc,0x0,0xf0,0x10,0xf0,0x80,0xfc,0xa0,0x90,0x8,0xd0,0x20,0x5c,0x8,
++0x1,0x7f,0x1,0x3f,0x1,0xff,0x8,0x49,0x29,0x2a,0x1c,0x2a,0xc9,0x8,0x28,0x10,0x4,0x84,0x4,0x24,0x24,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x84,0x84,0x14,0x8,
++0x8,0xff,0x8,0x47,0x20,0x27,0x84,0x4f,0x14,0x27,0xe4,0x20,0x2f,0x22,0x21,0x20,0x20,0xfe,0x50,0xfc,0x40,0xfc,0x44,0xfc,0x44,0xfc,0x44,0x10,0xfe,0x10,0x10,0x30,
++0x1f,0x1,0x7f,0x41,0x9d,0x1,0x1d,0x8,0xf,0x10,0x2f,0x48,0xf,0x8,0x8,0x7,0xf0,0x0,0xfe,0x2,0x74,0x0,0x70,0x0,0xf0,0x90,0xd0,0x90,0x90,0xb4,0x4,0xfc,
++0x8,0xb,0xa,0x12,0x12,0x33,0x32,0x50,0x9f,0x10,0x10,0x11,0x12,0x14,0x18,0x10,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x44,0xfe,0x40,0xe0,0x50,0x48,0x4e,0x44,0x40,
++0x10,0x17,0x14,0x24,0x27,0x60,0xbf,0x21,0x22,0x2c,0x1,0x3f,0x1,0x1,0xff,0x0,0x10,0xf8,0x10,0x10,0xf0,0x80,0xfc,0xc0,0xa0,0x9c,0x80,0xf8,0x0,0x4,0xfe,0x0,
++0x20,0x20,0x20,0x3c,0x25,0x4a,0x45,0xa1,0x21,0x21,0x21,0x25,0x29,0x31,0x20,0x0,0x80,0x80,0x84,0xfe,0x4,0x14,0xfc,0x14,0x14,0xf4,0x14,0x8,0x2,0x2,0xfe,0x0,
++0x2,0x1,0x7f,0x40,0x80,0x0,0x3f,0x1,0x1,0x1f,0x1,0x1,0x1,0x1,0x7f,0x0,0x0,0x0,0xfe,0x2,0x4,0x10,0xf8,0x0,0x20,0xf0,0x0,0x60,0x20,0x8,0xfc,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x11,0x1d,0x31,0xd1,0x11,0x11,0x11,0x11,0x50,0x20,0x80,0x80,0x84,0xfe,0x4,0x14,0xfc,0x14,0x14,0xf4,0x14,0x8,0x2,0x2,0xfe,0x0,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x11,0x51,0x21,0x8,0xfc,0x8,0x8,0x28,0x10,0x0,0xf8,0x8,0x90,0x50,0x20,0x50,0x8e,0x4,0x0,
++0x1f,0x10,0x1f,0x10,0x1f,0x4,0x7f,0x4,0xff,0x4,0x9,0x35,0xc3,0x9,0x11,0x3,0xf0,0x10,0xf0,0x10,0xf0,0x40,0xfc,0x40,0xfe,0x40,0x20,0x5e,0x84,0x20,0x10,0x0,
++0x8,0x10,0x22,0xd4,0x48,0x31,0x2a,0xcc,0x14,0x24,0xcc,0x14,0x64,0x4,0x28,0x10,0x40,0x40,0x40,0x44,0xfe,0x4,0x4,0x84,0x44,0x44,0x4,0x4,0x4,0x4,0x28,0x10,
++0x8,0x8,0x1e,0x14,0x28,0x7f,0xaa,0x2a,0x3e,0x2a,0x2a,0x3e,0x0,0xe,0x70,0x20,0x40,0x40,0x44,0x7e,0x84,0x14,0xf4,0x94,0x94,0xf4,0x94,0x88,0x82,0x82,0x7e,0x0,
++0x13,0x12,0x13,0x16,0x5b,0x51,0x57,0x91,0x1f,0x11,0x12,0x2d,0x28,0x41,0x82,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x10,0xfc,0x10,0xfe,0x10,0x48,0x56,0xe4,0x50,0x48,0xc0,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x30,0x38,0x55,0x52,0x94,0x18,0x10,0x10,0x10,0x10,0x0,0x4,0xfe,0x20,0x20,0x40,0x40,0xd0,0x48,0x46,0x42,0x40,0x40,0x40,0x40,0x40,
++0x0,0x8,0xfd,0x11,0x11,0x21,0x25,0x3f,0x65,0xa4,0x25,0x27,0x24,0x3c,0x24,0x0,0x20,0x44,0xfe,0x24,0x24,0xfc,0x24,0x44,0xfc,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x4,0xfc,0x4,0x4,0x7c,0x4,0x4,0xfc,0x4,0x0,0x12,0x51,0x50,0x90,0xf,0x0,0x44,0x7e,0x40,0x48,0x7c,0x40,0x44,0x7e,0x40,0x0,0x0,0x84,0x92,0x12,0xf0,0x0,
++0x1,0x2,0x1f,0x11,0x11,0x1f,0x11,0x12,0x1f,0x5,0x9,0xff,0x1,0x1,0x1,0x1,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x4,0x4,0x4,0x4,0x4,0x7c,0x4,0x4,0x4,0x4,0x4,0x4,0x1c,0xe4,0x44,0x0,0x80,0x80,0x88,0x98,0xa0,0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x4,0x7c,0x4,0x7c,0x4,0x7c,0x6,0x4,0x3f,0x9,0x1f,0x1,0xff,0x1,0x1,0x1,0x88,0xfc,0x80,0xfc,0x80,0xfc,0x80,0x10,0xf8,0x0,0xf0,0x4,0xfe,0x0,0x0,0x0,
++0x4,0x4,0x7c,0x4,0x1c,0xe4,0x40,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x10,0x40,0x44,0x78,0x42,0x42,0x3e,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x0,0x1f,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x2,0x4,0x8,0x30,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x40,0x20,0x18,0x8,
++0x10,0x10,0x11,0x1d,0x21,0x41,0xbd,0x11,0x11,0xfd,0x11,0x11,0x14,0x18,0x11,0x2,0x0,0x4,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x44,0x50,0x88,0x6,0x2,
++0x8,0x8,0xf,0x10,0x12,0x31,0x51,0x9f,0x10,0x13,0x12,0x12,0x12,0x12,0x13,0x12,0x80,0x48,0xfc,0x0,0x18,0x10,0x24,0xfe,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x44,0x29,0x11,0x29,0x49,0x89,0x9,0x19,0x29,0x49,0x89,0x8,0x8,0x51,0x22,0x0,0x4,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x44,0x50,0x88,0x6,0x2,
++0x4,0x7,0x8,0x14,0x23,0x2,0xc,0x30,0xdf,0x11,0x11,0x1f,0x11,0x11,0x1f,0x10,0x0,0xf0,0x20,0x40,0x80,0x80,0x60,0x1e,0xf4,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x8,0xf,0x14,0x12,0x23,0xc,0x30,0xdf,0x11,0x1f,0x11,0x1f,0x2,0x29,0x28,0x47,0x0,0xe0,0x40,0x80,0x80,0x60,0x1e,0xf4,0x10,0xf0,0x10,0xf0,0x0,0x88,0x94,0xf4,
++0x10,0x10,0x17,0x14,0x5a,0x51,0x51,0x9f,0x10,0x13,0x12,0x2a,0x26,0x46,0x83,0x2,0x80,0x48,0xfc,0x0,0x18,0x10,0x24,0xfe,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x10,0x10,0x5,0xfd,0x9,0x11,0x35,0x59,0x95,0x11,0x12,0x12,0x14,0x18,0x13,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0x20,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x1,0x1,0x7f,0x2,0x5,0x9,0x37,0xc1,0x9,0x8,0x7f,0x8,0x8,0x8,0x10,0x20,0x0,0x8,0xfc,0x80,0x40,0x30,0xce,0x4,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,
++0x4,0x4,0xff,0x4,0x1,0x1,0xff,0x3,0x5,0x9,0x11,0x2f,0xc1,0x1,0x1,0x1,0x40,0x44,0xfe,0x40,0x0,0x4,0xfe,0x80,0x40,0x20,0x10,0xee,0x4,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x7f,0x5,0x5,0x5,0x9,0x9,0x11,0x2f,0xc1,0x1,0x1,0x1,0x0,0x0,0x0,0x8,0xfc,0x40,0x40,0x40,0x20,0x20,0x10,0xee,0x4,0x0,0x0,0x0,
++0x8,0xa,0x1f,0x28,0x45,0x1,0x7f,0x3,0x5,0x9,0x11,0x2f,0xc1,0x1,0x1,0x1,0x40,0x48,0x7c,0xa0,0x10,0x0,0xfc,0x80,0x40,0x20,0x10,0xee,0x4,0x0,0x0,0x0,
++0x1,0x21,0x21,0x3f,0x0,0x3e,0x22,0x22,0x3e,0x22,0x22,0x3e,0x22,0x22,0x4a,0x85,0x0,0x8,0x8,0xf8,0x8,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,0x88,0xa8,0x10,
++0x10,0x17,0x24,0x24,0x44,0xff,0x14,0x24,0x44,0xff,0x44,0x4,0x1c,0xe4,0x4a,0x11,0x4,0xbe,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0xc4,0x94,0x8,
++0x0,0xff,0x1,0x7,0x19,0xe1,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x21,0x41,0x81,0x4,0xfe,0x0,0x60,0x18,0x4,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x28,0x10,
++0x0,0xff,0x4,0x8,0x1f,0x28,0xc8,0xf,0x9,0x1,0x7d,0x5,0x9,0x11,0x61,0x3,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0xf0,0x8,0x18,0xa0,0x40,0x20,0x1e,0x4,0x0,
++0x0,0x7a,0x4a,0x4b,0x48,0x7b,0x12,0x12,0x13,0x5a,0x52,0x53,0x5a,0xe2,0x44,0x9,0x40,0x44,0x44,0xfc,0x4,0xbe,0xa4,0xa4,0xbc,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0xcc,
++0x4,0x42,0x21,0x2f,0x2,0x2,0xe2,0x2f,0x22,0x22,0x22,0x22,0x24,0x58,0x8f,0x0,0x10,0x20,0x40,0xf8,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,0x26,0xfc,0x0,
++0x0,0x4f,0x20,0x27,0x4,0x4,0xe7,0x20,0x2f,0x28,0x2f,0x28,0x2f,0x50,0x8f,0x0,0x10,0xf8,0x0,0xf0,0x10,0x10,0xf0,0x0,0xf8,0x88,0xf8,0x88,0xf8,0x6,0xfc,0x0,
++0x1,0x1f,0x12,0x11,0x10,0x1f,0x0,0x3f,0x21,0x3f,0x21,0x3f,0x0,0xff,0x4,0x18,0x10,0xf8,0x10,0x10,0x90,0xf0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x40,0x40,
++0x0,0x20,0x20,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0x20,0x20,0x26,0x38,0x60,0x0,0x80,0x80,0x80,0x80,0x88,0x98,0xa0,0xc0,0x80,0x80,0x80,0x82,0x82,0x82,0x7e,0x0,
++0x2,0x3f,0x22,0x22,0x3e,0x9,0xff,0x8,0x7f,0x41,0x5d,0x55,0x5d,0x41,0x7f,0x41,0x0,0x7c,0x44,0x44,0x48,0x48,0xd0,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0xa,0x1f,0x28,0x45,0x0,0x7f,0x1,0x1,0x3f,0x1,0x1,0xff,0x1,0x1,0x0,0x20,0x28,0x7c,0xa0,0x10,0x7c,0x80,0x10,0x78,0x80,0x8,0x7c,0x80,0x2,0x2,0xfe,
++0x8,0x8,0x10,0x13,0x22,0x4a,0x8a,0x12,0x33,0x52,0x93,0x12,0x14,0x14,0x19,0x16,0x40,0x40,0x40,0xfc,0x44,0x48,0x40,0x40,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x4,0xfe,0x11,0x7d,0x11,0x1f,0xf1,0x0,0x7f,0x4,0x8,0x1f,0x28,0xc8,0xf,0x8,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xfc,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x8,0xff,0x9,0x2,0x3f,0x24,0x23,0x24,0x3f,0x0,0x20,0x3e,0x20,0x26,0x78,0x20,0x24,0xfe,0x20,0x10,0xf8,0x90,0x10,0x90,0xf0,0x0,0x88,0x98,0xa0,0xc4,0x84,0x7c,
++0x4,0x4,0xff,0x4,0x49,0x2a,0xc,0x7f,0x49,0x49,0x5d,0x6b,0x49,0x49,0x41,0x43,0x40,0x44,0xfe,0x40,0x20,0x24,0x3e,0x44,0xa4,0x24,0x24,0x28,0x10,0x28,0x46,0x84,
++0x20,0x20,0x20,0x3e,0x20,0x22,0x2c,0x70,0x21,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x98,0xe0,0x80,0x84,0x84,0x7c,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x20,0x20,0x3e,0x20,0x2e,0x30,0x0,0xff,0x10,0x1e,0x22,0x52,0xc,0x8,0x10,0x60,0x80,0x98,0xe0,0x80,0x88,0x78,0x4,0xfe,0x80,0x88,0x98,0xa0,0xc0,0x84,0x84,0x7c,
++0x0,0x20,0x24,0x3e,0x20,0x20,0x2e,0x30,0x4,0x12,0x50,0x51,0x96,0x18,0x67,0x0,0x80,0x88,0x98,0xa0,0xc0,0x84,0x84,0x7c,0x0,0x40,0x88,0x6,0x12,0x10,0xf0,0x0,
++0x0,0x3,0x7d,0x1,0x1,0x3f,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x1,0x1,0x1,0x38,0xc0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x28,0x10,0x0,0x0,0x0,
++0x1,0x0,0x3f,0x20,0x24,0x24,0x24,0x24,0x27,0x24,0x24,0x24,0x25,0x4e,0x84,0x0,0x0,0x88,0xfc,0x0,0x40,0x40,0x44,0x4c,0x50,0x60,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x1,0x0,0x3f,0x20,0xaf,0x68,0x2f,0x28,0x2f,0x60,0xbf,0x24,0x24,0x44,0x88,0x10,0x0,0x88,0xfc,0x0,0xf8,0x88,0xf8,0x88,0xf8,0x0,0xfe,0x10,0x10,0x10,0x10,0x10,
++0x20,0x1b,0x8,0x40,0x40,0x5f,0x40,0x41,0x42,0x44,0x48,0x50,0x40,0x42,0x41,0x40,0x4,0xfe,0x4,0x84,0xa4,0xf4,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x14,0x8,
++0x8,0x49,0x2b,0x2c,0x9,0x7f,0x49,0x49,0x5d,0x5b,0x69,0x49,0x49,0x4b,0x40,0x41,0x20,0x20,0x20,0x24,0x7e,0x84,0x44,0x44,0x44,0x48,0x28,0x10,0x28,0x48,0x86,0x4,
++0x8,0x49,0x2a,0x8,0x7f,0x49,0x5d,0x6b,0x49,0x43,0x8,0xff,0x8,0x8,0x10,0x20,0x20,0x20,0x24,0x3e,0x44,0xc4,0x28,0x10,0x28,0x46,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x2,0x1,0x1,0x1,0x8,0x8,0x48,0x48,0x48,0x89,0xa,0xc,0x18,0x28,0x47,0x0,0x0,0x0,0x20,0x30,0x20,0x40,0x48,0x46,0x82,0x0,0x0,0x10,0x10,0x10,0xf0,0x0,
++0x0,0x0,0x3e,0x23,0x22,0x22,0x3e,0x23,0x20,0x3e,0x23,0x62,0xa2,0x3e,0x20,0x0,0x40,0x20,0x8,0xfc,0x0,0x88,0x50,0xfe,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,
++0x2,0x3f,0x22,0x22,0x3e,0x21,0x3e,0x62,0xa2,0x3e,0x20,0x1f,0x0,0x0,0x7f,0x0,0x20,0x14,0xfe,0x44,0x28,0xfe,0x10,0xfe,0x10,0x90,0x80,0xf8,0x80,0x84,0xfe,0x0,
++0x2,0x3f,0x22,0x3e,0x21,0x3e,0x62,0xbe,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x20,0xfc,0x88,0x50,0xfe,0x20,0xf8,0x20,0x20,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x30,
++0x1,0x4f,0x29,0x9,0x9,0xf,0xe8,0x28,0x2f,0x39,0x29,0x29,0x2f,0x50,0x8f,0x0,0x20,0x90,0x14,0xfe,0x0,0x44,0x28,0xfe,0x10,0x10,0x7c,0x10,0x10,0x16,0xfc,0x0,
++0x2,0x7a,0x4a,0x53,0x52,0x62,0x52,0x4b,0x48,0x48,0x68,0x53,0x40,0x40,0x4f,0x40,0x20,0x20,0x24,0xac,0x30,0x20,0xa4,0x1c,0x40,0x40,0x50,0xf8,0x40,0x44,0xfe,0x0,
++0x28,0x28,0xfe,0x29,0x3b,0x15,0x7d,0x55,0x55,0x7d,0x11,0xff,0x11,0x11,0x11,0x11,0x84,0xfe,0x90,0x7c,0x54,0x54,0x7c,0x54,0x54,0x7c,0x10,0x50,0x20,0x30,0x4e,0x84,
++0x0,0x20,0x10,0x10,0x7,0x0,0xf0,0x10,0x11,0x11,0x11,0x12,0x14,0x28,0x47,0x0,0x80,0x80,0x80,0x88,0xfc,0x88,0x88,0x88,0x8,0x8,0x8,0x50,0x20,0x6,0xfc,0x0,
++0x10,0x10,0x23,0x22,0x4a,0xfb,0x12,0x22,0x43,0xf6,0x4a,0x3,0x1a,0xe2,0x42,0x2,0x80,0x48,0xfc,0x8,0x8,0xf8,0x0,0x4,0xfe,0x94,0x94,0xfc,0x94,0x94,0x94,0xc,
++0x4,0x7e,0x45,0x54,0x54,0x54,0x55,0x54,0x54,0x54,0x54,0x10,0x28,0x47,0x82,0x0,0x8,0x1c,0xe0,0x0,0x40,0x20,0xfc,0x4,0x8,0x10,0x20,0x40,0x80,0x46,0x3c,0x0,
++0x1,0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x19,0x29,0x2f,0x49,0x89,0x9,0x8,0x0,0x88,0xfc,0x8,0x8,0xf8,0x0,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0x24,0xc,
++0x10,0x17,0x10,0x10,0x27,0x24,0x67,0xa4,0x27,0x24,0x22,0x21,0x20,0x21,0x22,0x2c,0x4,0xfe,0x40,0x44,0xfe,0x44,0xfc,0x44,0xfc,0x44,0x40,0x40,0x80,0x60,0x1e,0x4,
++0x2,0x1,0x7f,0x4,0x14,0x14,0x24,0x44,0x1f,0x8,0x4,0x2,0x1,0x2,0xc,0x30,0x0,0x8,0xfc,0x40,0x50,0x48,0x4c,0x44,0xf0,0x20,0x40,0x80,0x0,0xc0,0x3c,0x8,
++0x2,0x1,0x1,0x0,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x40,0x20,0x10,0x10,0x0,0x0,0x0,0x0,0x0,
++0x20,0x10,0x10,0x7c,0x8,0x2a,0x2a,0xfe,0x12,0x10,0xfc,0x11,0x11,0x12,0x24,0x40,0x10,0x88,0x88,0xbe,0x84,0x94,0x94,0xbe,0x88,0x88,0xbe,0x8,0x8,0x8,0x8,0x8,
++0x20,0x12,0x11,0x7d,0x8,0x2f,0x29,0xfd,0x11,0x11,0xfd,0x11,0x11,0x11,0x21,0x40,0x20,0x10,0x10,0x7c,0x8,0x28,0x28,0x7e,0x10,0x10,0x7c,0x10,0x50,0x90,0x10,0x10,
++0x20,0x10,0x10,0x7d,0x9,0x2b,0x28,0xfc,0x11,0x13,0xfc,0x10,0x10,0x13,0x20,0x40,0x10,0x88,0x88,0x3e,0x4,0xd4,0x54,0xbe,0x8,0xc8,0x3e,0x8,0xc8,0x8,0x8,0x8,
++0x0,0x40,0x27,0x24,0x4,0x7,0xe4,0x27,0x26,0x26,0x2b,0x2a,0x32,0x50,0x8f,0x0,0x80,0x48,0xfc,0x8,0x8,0xf8,0x0,0xf8,0xa8,0xa8,0xf8,0xa8,0xa8,0x6,0xfc,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x10,0x37,0x38,0x54,0x51,0x91,0x12,0x14,0x10,0x11,0x10,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x40,0x40,0x50,0x48,0x4c,0x44,0x40,0x40,0x80,
++0x5,0x7,0x4,0x3f,0x24,0x27,0x3c,0x27,0x20,0x2f,0x29,0x29,0x29,0x49,0x90,0x20,0x0,0x84,0xc,0xd0,0xa0,0x4,0x8c,0x90,0x20,0x44,0xc,0x10,0x22,0x42,0xfe,0x0,
++0x0,0x7b,0x48,0x48,0x49,0x79,0x49,0x49,0x48,0x79,0x48,0x4b,0x48,0x49,0x4a,0x98,0x4,0xfe,0x50,0x54,0xfe,0x54,0x54,0xfc,0x0,0xfc,0x0,0xfe,0xa8,0x24,0x22,0x60,
++0x1,0x1,0x7f,0x1,0x3f,0x1,0x1,0xff,0x2,0x5,0xc,0x34,0xc4,0x5,0x6,0x4,0x0,0x8,0xfc,0x0,0xf8,0x0,0x4,0xfe,0x0,0x10,0xa0,0x40,0x30,0xe,0x4,0x0,
++0x8,0x2a,0x1c,0x7f,0x49,0x5d,0x6b,0x47,0x8,0x3f,0x51,0x1f,0x11,0x1f,0x0,0xff,0x20,0x24,0x3e,0x44,0xa8,0x10,0x2e,0xc4,0x90,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,
++0x49,0x2a,0x8,0x7f,0x49,0x5d,0x6b,0x49,0x43,0x0,0x2a,0x29,0x28,0x48,0x7,0x0,0x20,0x20,0x24,0x3e,0x48,0xa8,0x10,0x2e,0x44,0x0,0x10,0x88,0xa4,0x24,0xe0,0x0,
++0x1,0x3f,0x21,0x21,0x21,0x3f,0x28,0x9,0xff,0x9,0x9,0x11,0x11,0x25,0x42,0x0,0x4,0x84,0x4,0x24,0x24,0x24,0x24,0x24,0xa4,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x0,0x3f,0x21,0xa7,0x64,0x27,0x24,0x27,0x64,0xa7,0x21,0x22,0x26,0x3b,0x42,0x81,0x84,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x20,0x10,0x6e,0x84,0x8,0xf8,
++0x10,0x10,0x10,0x10,0xff,0x10,0x31,0x39,0x52,0x52,0x94,0x10,0x10,0x10,0x10,0x10,0x80,0x82,0x82,0x84,0xe8,0x90,0x82,0xc2,0xa4,0x88,0x92,0x82,0x84,0x88,0x90,0xa0,
++0x0,0x20,0x11,0x0,0xfc,0xb,0x48,0x28,0x29,0x11,0x29,0x25,0x45,0x81,0x3,0x0,0x10,0x10,0xf4,0x12,0x10,0xfe,0x10,0x50,0x50,0x70,0x50,0x48,0x48,0x6a,0x86,0x2,
++0x2,0x42,0x2a,0x2b,0xa,0x8a,0x5f,0x2,0x2a,0x2a,0xd3,0x42,0x44,0x48,0x50,0x1,0x4,0xfe,0x10,0xa4,0x7e,0x44,0xd4,0x54,0x54,0xd4,0x54,0x54,0x10,0x28,0x46,0x82,
++0x0,0x40,0x2f,0x28,0x10,0x83,0x52,0x13,0x12,0x22,0xe2,0x3f,0x20,0x23,0x22,0x24,0x80,0x40,0xfe,0x2,0x64,0x80,0x10,0xf8,0x20,0x20,0x24,0xfe,0x0,0x20,0x18,0x8,
++0x2,0x1,0x3f,0x20,0x40,0xf,0x8,0xf,0x8,0x8,0x8,0xff,0x0,0xc,0x8,0x10,0x0,0x0,0xfc,0x4,0xe8,0x0,0x20,0xf0,0x40,0x40,0x44,0xfe,0x0,0x40,0x30,0x10,
++0x10,0x10,0x17,0x14,0xfc,0x11,0x15,0x19,0x31,0xd1,0x11,0x1f,0x10,0x11,0x51,0x22,0x40,0x20,0xfe,0x2,0x34,0xc0,0x10,0xf8,0x10,0x10,0x14,0xfe,0x0,0x90,0xc,0x4,
++0x0,0x0,0xf,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0xff,0x0,0x4,0xc,0x10,0x20,0x20,0xf0,0x0,0x0,0x0,0x10,0xf8,0x40,0x40,0x44,0xfe,0x0,0x40,0x30,0x18,0x8,
++0x0,0x40,0x30,0x10,0x0,0xf,0x11,0x12,0x22,0xe4,0x24,0x28,0x30,0x20,0x22,0x21,0x80,0x80,0x84,0x8c,0x90,0xa0,0xc0,0xc0,0xa0,0x90,0x88,0x8e,0x84,0x80,0x80,0x0,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x33,0x3a,0x56,0x52,0x92,0x13,0x12,0x12,0x12,0x12,0x0,0x4,0xfe,0x40,0x40,0x44,0xfe,0x44,0x44,0x64,0x9c,0xc,0x4,0x4,0x14,0x8,
++0x0,0x0,0xff,0x1,0x1,0x1,0x3f,0x21,0x21,0x21,0x22,0x24,0x28,0x20,0x20,0x20,0x0,0x4,0xfe,0x0,0x0,0x8,0xfc,0x8,0x8,0x88,0x48,0x28,0x28,0x8,0x28,0x10,
++0x0,0x3f,0x1,0x7f,0x1,0x3f,0x1,0xff,0x1,0x3f,0x3,0x5,0x9,0x11,0x61,0x1,0x78,0x80,0x8,0xfc,0x0,0xf0,0x14,0xfe,0x10,0xf0,0x80,0x40,0x30,0xe,0x4,0x0,
++0x20,0x21,0x20,0x3c,0x47,0x48,0xa0,0x20,0x27,0x20,0x20,0x24,0x28,0x31,0x22,0x4,0x0,0x8,0x90,0x0,0xfc,0x90,0x90,0x94,0xfe,0x90,0x90,0x90,0x90,0x10,0x10,0x10,
++0x0,0x20,0x2f,0x20,0x28,0xb0,0xa7,0xa4,0x24,0x24,0x24,0x25,0x54,0x4c,0x84,0x4,0x0,0x4,0xfe,0x40,0x40,0x44,0xfe,0x44,0x44,0x64,0x94,0x14,0x4,0x4,0x14,0x8,
++0x0,0x0,0x1f,0x10,0x90,0x57,0x50,0x10,0x37,0x54,0x94,0x14,0x25,0x24,0x44,0x4,0x80,0x44,0xfe,0x0,0x8,0xfc,0x40,0x44,0xfe,0x44,0x44,0xa4,0x14,0x4,0x14,0x8,
++0x10,0xc,0x4,0x3f,0x4,0x4,0x4,0x4,0xff,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x10,0x30,0x40,0xfc,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x8,0xfc,0x11,0x11,0x11,0x7d,0x11,0x11,0x11,0x1e,0xf2,0x42,0x4,0x8,0x3,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xfc,0x4,0x88,0x48,0x50,0x20,0x50,0x8e,0x4,
++0x8,0x8,0xff,0x8,0x20,0x13,0x92,0x42,0xa,0x12,0xe2,0x24,0x24,0x24,0x29,0x32,0x20,0x24,0xfe,0x20,0x20,0xfe,0x22,0x24,0xf8,0x88,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x13,0x10,0x12,0xfd,0x17,0x11,0x1a,0x34,0xd3,0x12,0x12,0x13,0x12,0x52,0x23,0x38,0xc0,0x44,0x4c,0x50,0xfe,0x50,0x4e,0x44,0xf8,0x48,0x48,0xf8,0x48,0x48,0xf8,
++0x10,0x10,0x12,0x12,0xff,0x10,0x14,0x18,0x11,0x31,0xd2,0x12,0x14,0x18,0x51,0x22,0x40,0x50,0x48,0x40,0xfe,0x80,0x80,0xf8,0x8,0x90,0x50,0x20,0x50,0x88,0xe,0x4,
++0x20,0x20,0x20,0x38,0x47,0x80,0x78,0x20,0x21,0xfa,0x24,0x21,0x28,0x30,0x20,0x0,0x40,0x40,0x40,0x48,0xfc,0x40,0xe0,0xd0,0x48,0x4e,0x44,0xf0,0x40,0x40,0x40,0x40,
++0x0,0x40,0x30,0x17,0x4,0x84,0x44,0xf,0x14,0x25,0xe4,0x24,0x28,0x29,0x32,0x24,0x40,0x40,0x40,0xfc,0x44,0x48,0x40,0xf8,0x8,0x10,0xa0,0x40,0xa0,0x10,0xe,0x4,
++0x20,0x20,0x2f,0x20,0x27,0xfc,0x27,0x24,0x27,0x24,0x20,0x2f,0x22,0x21,0x20,0x20,0x50,0x48,0xfe,0x40,0xfc,0x44,0xfc,0x44,0xfc,0x44,0x10,0xfe,0x10,0x10,0x50,0x20,
++0x8,0xa,0x7f,0x8,0x8,0x7f,0x41,0x82,0x3e,0x4,0x8,0x7e,0x8,0x8,0x29,0x12,0x20,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x10,0x10,0x17,0x10,0xfb,0x12,0x13,0x1a,0x33,0xd2,0x10,0x1f,0x12,0x11,0x50,0x20,0x50,0x48,0xfc,0x40,0xf8,0x48,0xf8,0x48,0xf8,0x48,0x10,0xfe,0x10,0x10,0x50,0x20,
++0x10,0x10,0x10,0x1d,0x21,0x21,0x7d,0x91,0x11,0x7d,0x11,0x11,0x15,0x19,0x11,0x0,0x40,0x40,0x84,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x10,0x12,0x1f,0x28,0x45,0x20,0x10,0x83,0x42,0xa,0x13,0xe2,0x22,0x22,0x23,0x22,0x40,0x44,0x7e,0xa0,0x10,0x40,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0x8,0x11,0x11,0x31,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x40,0x40,0x84,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x2,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x11,0x1,0x3f,0x21,0x21,0x21,0x21,0x21,0x1,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0x8,0xfc,0x8,0x8,0x8,0x28,0x10,0x0,
++0x8,0x8,0x12,0x3f,0x22,0x32,0x2a,0x22,0xfe,0x22,0x32,0x2a,0x22,0x22,0x4a,0x84,0x20,0x20,0x44,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,0x84,0x84,0x84,0xfc,0x84,0x0,
++0x8,0x7c,0x4b,0x48,0x4b,0x7a,0x4c,0x49,0x48,0x78,0x4f,0x48,0x48,0x48,0x49,0x98,0x40,0x48,0xfc,0x40,0xfc,0x4,0x8,0xf0,0x20,0x44,0xfe,0x40,0x40,0x40,0x40,0x80,
++0x8,0x7c,0x4f,0x48,0x4b,0x7a,0x4b,0x4a,0x4b,0x7a,0x48,0x4f,0x4a,0x49,0x48,0x98,0x50,0x48,0xfe,0x40,0xf8,0x48,0xf8,0x48,0xf8,0x48,0x10,0xfe,0x10,0x10,0x50,0x20,
++0x2,0x42,0x32,0x1f,0x82,0x5f,0x50,0xf,0x11,0x22,0xe3,0x2e,0x22,0x22,0x2a,0x25,0x10,0x10,0x90,0xd4,0x3e,0xd4,0x54,0x94,0x14,0x24,0xa4,0x24,0x44,0x44,0x94,0x8,
++0x0,0x40,0x30,0x13,0x82,0x62,0x22,0xa,0x13,0x22,0xe2,0x22,0x22,0x23,0x22,0x20,0x40,0x40,0x88,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,
++0x4,0x7f,0x4,0x24,0x24,0x24,0x24,0x25,0x3e,0x2,0x2,0x1e,0xe2,0x42,0xb,0x4,0x0,0x8,0x88,0x50,0x20,0x50,0x88,0x8,0x4,0x8c,0x50,0x20,0x50,0x8e,0x4,0x0,
++0x20,0x20,0x20,0x2f,0xf8,0x27,0x24,0x2c,0x37,0xe4,0x24,0x27,0x24,0x24,0xa4,0x44,0x40,0x50,0x48,0xfe,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x54,0x8,
++0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x80,0x60,0x30,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x10,0x78,0x57,0x50,0x57,0x54,0x54,0x57,0x54,0x54,0x77,0x54,0x4,0x4,0x4,0x40,0x50,0x48,0xfe,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x54,0x8,
++0x10,0x8,0x8,0x2,0xfe,0x4,0x8,0xa,0x1c,0x2a,0x48,0x88,0x8,0x8,0x8,0x8,0x40,0x40,0x40,0x40,0x40,0x40,0x60,0x50,0x4c,0x44,0x40,0x40,0x40,0x40,0x40,0x40,
++0x20,0x21,0x23,0x22,0xfb,0x22,0x23,0x22,0x23,0x22,0x38,0xe7,0x40,0x0,0x0,0x0,0x80,0x8,0xfc,0x8,0xf8,0x0,0xf8,0x8,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x0,0xff,0x0,0x0,0x1,0x1,0x3,0x5,0x9,0x11,0x21,0x41,0x1,0x1,0x1,0x1,0x4,0xfe,0x80,0x80,0x0,0x0,0x40,0x20,0x18,0xc,0x4,0x0,0x0,0x0,0x0,0x0,
++0x2,0x2,0x2,0xff,0x4,0x9,0x11,0x3f,0x51,0x91,0x11,0x11,0x11,0x11,0x1,0x1,0x0,0x0,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x28,0x10,0x0,0x0,
++0x1,0x9,0x9,0x9,0x9,0x9,0xff,0x1,0x9,0xd,0x11,0x21,0x0,0x3,0xc,0x70,0x0,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,0x10,0x18,0x20,0x20,0xc0,0x0,0x0,0x0,
++0x10,0x3e,0x49,0x0,0x27,0x10,0x13,0x82,0x43,0xa,0x13,0xe2,0x2f,0x21,0x20,0x20,0x40,0xfc,0x20,0x48,0xfc,0x40,0xf8,0x48,0xf8,0x48,0xf8,0x48,0xfe,0x10,0x90,0x30,
++0x10,0x8,0x2,0x7f,0x0,0x22,0x14,0xff,0x2,0x3f,0x22,0x22,0x22,0x3e,0x22,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0xc8,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x10,0x10,0x10,0x13,0x58,0x55,0x51,0x93,0x15,0x19,0x11,0x11,0x11,0x10,0x10,0x10,0x40,0x40,0x44,0xfe,0x80,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x2c,0x20,0x20,0x20,
++0x20,0x20,0x2f,0x2a,0xfb,0x26,0x25,0x2b,0x32,0xe5,0x28,0x27,0x22,0x22,0xa5,0x40,0x80,0x40,0xfe,0x2,0xbc,0xa4,0x28,0x18,0x8,0xf6,0x0,0xfc,0x48,0x44,0x44,0x80,
++0x0,0x48,0x2f,0x10,0x2b,0x48,0xf,0x18,0x2b,0x4a,0x8b,0xa,0xb,0xa,0x52,0x22,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x18,
++0x4,0x4,0x3f,0x4,0xff,0x10,0x8,0x7f,0x8,0x11,0x3a,0x54,0x93,0x19,0x11,0x2,0x40,0x50,0x48,0x40,0xfe,0x40,0x44,0x44,0x48,0x48,0x50,0x20,0x60,0x92,0xa,0x6,
++0x8,0x8,0x8,0x8,0xfe,0x8,0x18,0x1c,0x2a,0x28,0x48,0x89,0x8,0x8,0x8,0x8,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x30,0x30,0x50,0x90,0x10,0x10,0x10,0x50,0x20,
++0x0,0x0,0x0,0x0,0xff,0x0,0x1,0x1,0x2,0x4,0x8,0x10,0x60,0x0,0x2,0x1,0x80,0x80,0x80,0x84,0xfe,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,
++0x4,0x7e,0x44,0x54,0x57,0x54,0x54,0x54,0x54,0x54,0x55,0x2a,0x24,0x44,0x80,0x0,0x10,0x10,0x10,0x14,0xfe,0x10,0x30,0x30,0x50,0x90,0x10,0x10,0x10,0x10,0x50,0x20,
++0x8,0x7f,0x48,0x4a,0x49,0x78,0x48,0x4f,0x48,0x78,0x48,0x49,0x4a,0x7c,0x48,0x0,0x1c,0xe0,0x88,0x48,0x50,0x0,0x44,0xfe,0x40,0xc0,0xe0,0x50,0x4e,0x44,0x40,0x40,
++0x4,0x7f,0x44,0x45,0x44,0x7c,0x10,0x13,0x5c,0x50,0x50,0x50,0x5d,0xe2,0x40,0x0,0x1c,0xe0,0x44,0x26,0xa8,0x0,0x24,0xfe,0x20,0x60,0x70,0xa8,0x26,0x24,0x20,0x20,
++0x0,0x0,0x7f,0x0,0x11,0x8,0x1,0x1,0xff,0x3,0x5,0x9,0x11,0x61,0x1,0x1,0x8,0x7c,0x80,0x8,0x18,0xa0,0x0,0x4,0xfe,0x80,0x40,0x30,0xe,0x4,0x0,0x0,
++0x1,0xe,0xf1,0x49,0x2a,0x20,0x8,0xff,0x8,0x1c,0x1b,0x29,0x48,0x88,0x8,0x8,0x0,0x8,0x18,0x20,0x40,0x84,0xc,0x10,0x20,0x40,0x4,0xc,0x10,0x20,0x40,0x80,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x12,0x9,0x1,0xff,0x3,0x5,0x9,0x11,0x61,0x1,0x40,0x44,0xfe,0x40,0x38,0xc0,0x10,0x20,0x4,0xfe,0x80,0x40,0x30,0xe,0x4,0x0,
++0x4,0x4,0xff,0x14,0x16,0x12,0x2c,0x68,0x17,0x20,0x5f,0x81,0x9,0x19,0x21,0x3,0x40,0x44,0xfe,0x40,0xf8,0x90,0x60,0x20,0xd0,0xe,0xf4,0x0,0x20,0x18,0x8,0x0,
++0x10,0x1e,0x10,0x3e,0x44,0x29,0x12,0x65,0xf,0x38,0xcf,0x8,0xf,0xa,0x9,0xc,0x0,0xf8,0x88,0x50,0x20,0x50,0x8c,0x44,0xe0,0x3e,0xe4,0x20,0xe0,0x10,0xa0,0x78,
++0x2,0x2,0x4,0x1f,0x2,0xff,0x4,0x8,0x13,0x2c,0xc1,0xe,0x0,0x1,0xe,0x70,0x0,0x40,0x20,0xf0,0x4,0xfe,0x40,0xa0,0x10,0x4e,0x84,0x10,0x60,0x80,0x0,0x0,
++0x0,0x3f,0x1,0x1,0xff,0x2,0x5,0x9,0x3f,0xd1,0x11,0x1f,0x1,0x1,0x3f,0x0,0x10,0xf8,0x0,0x4,0xfe,0x80,0x40,0x20,0xfe,0x14,0x10,0xf0,0x0,0x10,0xf8,0x8,
++0x0,0x4,0x7e,0x10,0x10,0x1f,0x22,0x22,0x65,0x94,0x8,0x8,0x10,0x20,0x43,0x80,0x40,0x50,0x48,0x40,0x7c,0xc0,0x48,0x7c,0xc0,0x48,0x50,0x20,0x60,0x92,0xa,0x6,
++0x21,0x21,0x21,0x2f,0xb2,0xad,0xa5,0x2f,0x21,0x21,0x21,0x2f,0x25,0x21,0x21,0x21,0x0,0x6,0x38,0xe0,0x20,0x20,0x3e,0xe8,0x28,0x28,0xe8,0x28,0x48,0x48,0x88,0x8,
++0x20,0x20,0x21,0x27,0xb0,0xaf,0xa1,0x22,0x24,0x39,0x22,0x20,0x23,0x20,0x20,0x27,0x80,0xa0,0x10,0xf8,0x80,0xfe,0x20,0x50,0x8e,0x24,0x40,0x88,0x10,0x20,0xc0,0x0,
++0x10,0x10,0x10,0x14,0x54,0x59,0x51,0x91,0x11,0x11,0x11,0x29,0x25,0x45,0x81,0x1,0x20,0x20,0x20,0x20,0x20,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x4,0x4,0xff,0x4,0x1,0x2,0x4,0x18,0x6f,0x88,0x8,0x8,0x8,0x8,0x7,0x0,0x40,0x44,0xfe,0x40,0x0,0x80,0x40,0x30,0xee,0x24,0xa0,0x40,0x10,0x10,0xf0,0x0,
++0x8,0x10,0x3c,0x24,0x34,0x2d,0x26,0xfc,0x24,0x34,0x2c,0x24,0x24,0x24,0x54,0x88,0x20,0x20,0x50,0x50,0x88,0x6,0x4,0xf8,0x88,0x88,0xa8,0x90,0x80,0x84,0x84,0x7c,
++0x1,0x1,0x2,0x2,0x4,0x8,0x30,0xcf,0x8,0x8,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x80,0x80,0x40,0x20,0x1e,0xe4,0x20,0x20,0xa0,0x40,0x8,0x8,0xf8,0x0,
++0x0,0x40,0x31,0x11,0x82,0x44,0x48,0x13,0x12,0x22,0xe2,0x22,0x22,0x22,0x21,0x20,0x80,0x80,0x40,0x40,0x20,0x10,0xe,0xf4,0x10,0x10,0x50,0x20,0x4,0x4,0xfc,0x0,
++0x4,0xff,0x4,0x4,0x5f,0x50,0x57,0x75,0x17,0x74,0x57,0x55,0x95,0x27,0x44,0x80,0x84,0xfe,0xa8,0xa4,0xfe,0x20,0xa0,0x24,0xa4,0xa4,0xa8,0x28,0x10,0xb2,0x4a,0x86,
++0x10,0x11,0x11,0x11,0xfc,0x17,0x14,0x1f,0x30,0xd0,0x1f,0x10,0x11,0x12,0x54,0x20,0x10,0xf8,0x10,0xf0,0x4,0xbe,0xa4,0xbc,0x40,0x44,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x10,0x10,0x55,0x39,0x10,0xfc,0x10,0x33,0x39,0x55,0x91,0x11,0x11,0x12,0x14,0x10,0x10,0x50,0x50,0x7c,0x90,0x10,0xfe,0x4,0x7e,0x44,0x44,0x44,0x7c,0x80,0x7e,0x0,
++0x10,0x10,0x17,0x10,0xff,0x12,0x33,0x3a,0x57,0x54,0x91,0x11,0x11,0x11,0x11,0x11,0x90,0x94,0xfe,0x90,0xfc,0x94,0xfc,0x94,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x4,0x4,0xff,0x4,0x3f,0x24,0x3f,0x24,0x3f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x40,0x44,0xfe,0x48,0xfc,0x48,0xf8,0x48,0xf8,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,
++0x8,0x8,0x7f,0x8,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x1,0x1,0x1,0x1,0x20,0x28,0xfc,0x20,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x20,0x2f,0x28,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x22,0x45,0x44,0x88,0x10,0x4,0xfe,0x0,0x84,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0x24,0x4,0x84,0x94,0x8,
++0x10,0x3e,0x50,0x9,0x1,0xff,0x1,0x3f,0x21,0x23,0x25,0x5,0x9,0x11,0x61,0x1,0x20,0x7c,0xa0,0x10,0x4,0xfe,0x8,0xfc,0x8,0x88,0x58,0x20,0x10,0xe,0x4,0x0,
++0x10,0x10,0x17,0x24,0x25,0x65,0xa5,0x25,0x25,0x25,0x25,0x21,0x22,0x24,0x28,0x20,0x0,0x44,0xe4,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x44,0x4,0x84,0x44,0x14,0x8,
++0x2,0x1f,0x12,0x12,0x12,0x12,0x12,0xff,0x12,0x12,0x12,0x12,0x12,0x12,0x26,0x41,0x8,0x7c,0x48,0x48,0x48,0x48,0x48,0xfe,0x48,0x48,0x48,0x48,0x48,0x48,0xa8,0x10,
++0x0,0x40,0x27,0x24,0x85,0x65,0x25,0xd,0x15,0x25,0xe5,0x21,0x22,0x24,0x28,0x20,0x0,0x44,0xe4,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x4,0x84,0x44,0x54,0x8,
++0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x17,0x10,0x10,0x1f,0x11,0x22,0x24,0x4f,0x80,0x4,0xfe,0x4,0x4,0xfc,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,0x10,0x8,0xfc,0x4,
++0x0,0x8,0x7c,0x4b,0x4a,0x4a,0x7a,0x12,0x53,0x5c,0x51,0x51,0x5d,0xf1,0x41,0x1,0x88,0x50,0x0,0xfe,0x22,0xaa,0x72,0x22,0xfe,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x4,
++0x10,0x10,0x17,0x10,0xf8,0x17,0x10,0x19,0x36,0xd4,0x14,0x17,0x14,0x14,0x57,0x24,0x10,0x38,0xc0,0x40,0x44,0xfe,0x40,0x44,0x5e,0x44,0x44,0x5c,0x44,0x44,0xfc,0x4,
++0x0,0x0,0x3f,0x0,0x12,0x11,0x9,0x4,0x4,0x2,0x1,0x2,0x4,0x8,0x30,0xc0,0x0,0x0,0xf8,0x8,0x8,0x10,0x10,0x20,0x40,0x80,0x0,0x80,0x40,0x30,0xe,0x4,
++0x8,0x8,0xff,0xa,0x2,0xff,0x4,0x8,0x10,0x17,0x30,0x50,0x90,0x10,0x1f,0x10,0x20,0x24,0xfe,0x20,0x4,0xfe,0x0,0x40,0x48,0xfc,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x4,0x4,0xff,0x4,0x1,0x2,0x4,0x19,0x21,0xdf,0x1,0x9,0x19,0x21,0x5,0x2,0x40,0x44,0xfe,0x40,0x0,0x80,0x40,0x30,0xe,0xf4,0x0,0x20,0x18,0x8,0x0,0x0,
++0x1,0x1,0xff,0x5,0x9,0x11,0x3f,0xd0,0x10,0x1f,0x10,0x10,0x1f,0x0,0xff,0x0,0x0,0x4,0xfe,0x40,0x20,0x10,0xfe,0x14,0x10,0xf0,0x10,0x10,0xf0,0x4,0xfe,0x0,
++0x0,0x8,0xfc,0x17,0x10,0x21,0x22,0x7c,0xab,0x2a,0x2b,0x2a,0x2b,0x38,0x27,0x0,0x40,0x40,0x44,0xfe,0xe0,0x50,0x4e,0x44,0xf8,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x0,
++0x11,0x11,0x17,0x11,0xfc,0x10,0x15,0x1a,0x34,0xd3,0x10,0x12,0x12,0x14,0x51,0x20,0x10,0x10,0xfc,0x10,0x40,0xa0,0x10,0x4e,0x44,0xf8,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x2,0x1,0x7f,0x48,0x8e,0x12,0x2c,0x68,0x17,0x20,0x5f,0x81,0x9,0x11,0x25,0x2,0x0,0x0,0xfe,0x2,0xf4,0x90,0x60,0x20,0xd0,0xe,0xf4,0x0,0x20,0x18,0x8,0x0,
++0x0,0x4,0x8,0x10,0x2f,0xc4,0x4,0x8,0x30,0x1,0x21,0x21,0x21,0x21,0x3f,0x20,0x80,0x40,0x20,0x10,0xee,0x24,0x20,0xa0,0x40,0x0,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x4,0x7f,0x1,0x1,0x3f,0x1,0x2,0xff,0x4,0x8,0x17,0x20,0x40,0x80,0x1f,0x20,0x48,0xfc,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,0x20,0xf0,0x80,0x80,0x88,0xfc,
++0x0,0x40,0x37,0x14,0x0,0x0,0xf7,0x10,0x10,0x10,0x17,0x10,0x14,0x18,0x10,0x0,0x80,0x40,0xfe,0x2,0x24,0x70,0x80,0x80,0x88,0xfc,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x11,0x1d,0x31,0xd1,0x11,0x11,0x11,0x12,0x54,0x20,0x8,0x1c,0xe0,0x0,0x0,0x4,0xfe,0x20,0x20,0x30,0x2c,0x24,0x20,0x20,0x20,0x20,
++0x8,0x8,0x28,0x2e,0x28,0x28,0x2e,0x71,0x1,0xff,0x3,0x5,0x9,0x11,0x21,0x1,0x80,0x88,0x98,0xa0,0xc0,0x84,0x84,0x7c,0x0,0xff,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x4,0x8,0x12,0xea,0x2c,0x29,0x14,0xe6,0xa,0x12,0x66,0xa,0x13,0xe2,0x14,0x8,0x8,0x8,0x8,0x8,0x8,0xfe,0x8,0x18,0x18,0x28,0x48,0x88,0x8,0x8,0x28,0x10,
++0x10,0x10,0x11,0x12,0xff,0x12,0x16,0x1b,0x30,0xd1,0x12,0x1c,0x10,0x11,0x50,0x20,0x40,0x80,0xf0,0x20,0xf8,0x48,0x48,0xf8,0xa0,0x22,0x1e,0xc0,0x30,0x80,0x60,0x10,
++0x10,0x10,0x11,0x13,0xf8,0x17,0x10,0x19,0x32,0xd4,0x19,0x12,0x10,0x11,0x50,0x23,0x80,0xa0,0x10,0xf8,0x80,0xfe,0xa0,0x10,0x48,0x8e,0x24,0x40,0x90,0x20,0x40,0x80,
++0x11,0x10,0x10,0x7d,0x55,0x55,0x55,0x55,0x7d,0x11,0x14,0x1f,0xe4,0x40,0x0,0x0,0x4,0x8c,0x50,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x20,0x20,0x20,0x20,
++0x20,0x20,0x20,0x39,0x4b,0x56,0x82,0x23,0x20,0x21,0x26,0x20,0x28,0x31,0x20,0x0,0x80,0x80,0xf0,0x20,0xf8,0x48,0x48,0xf8,0xa2,0x22,0x1e,0xc0,0x30,0x80,0x60,0x10,
++0x1,0x21,0x11,0x12,0x7,0x2,0xf2,0x13,0x10,0x11,0x16,0x10,0x10,0x15,0x18,0x0,0x0,0x0,0xf0,0x20,0xf8,0x48,0x48,0xf8,0xa2,0x22,0x1e,0xc0,0x30,0x80,0x60,0x10,
++0x10,0x10,0x27,0x24,0x4d,0xf5,0x25,0x45,0xfd,0x5,0x5,0x1c,0xe5,0x48,0x13,0x20,0x40,0x24,0xfe,0x0,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfc,0x20,0xfe,0x0,
++0x10,0x10,0x10,0x1d,0x20,0x20,0x7c,0x91,0x11,0xfd,0x11,0x11,0x15,0x19,0x12,0x4,0x20,0x10,0x4,0xfe,0x0,0x84,0x48,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x2,0x1,0x1,0x7f,0x8,0x4,0x4,0x1f,0x10,0x10,0x10,0x10,0x20,0x20,0x40,0x80,0x0,0x0,0x8,0xfc,0x10,0x20,0x48,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x20,0x17,0x50,0x44,0x42,0x4f,0x49,0x4f,0x49,0x4f,0x41,0x5f,0x41,0x41,0x41,0x40,0x4,0xfe,0x4,0x44,0x84,0xe4,0x24,0xe4,0x24,0xe4,0x4,0xf4,0x4,0x4,0x4,0xc,
++0x8,0xff,0x0,0x7f,0x55,0x5d,0x55,0x7f,0x0,0x3e,0x32,0x2a,0x3e,0x0,0xff,0x0,0x4,0xfe,0x10,0x24,0x7e,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x10,0x28,0x46,0x82,
++0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x20,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x1,0x45,0x29,0x11,0x29,0x49,0x9,0x18,0x2b,0x4a,0x8a,0xb,0xa,0xa,0x53,0x22,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x20,0x27,0x20,0x20,0xf8,0x21,0x27,0x21,0x21,0x21,0x3a,0xe2,0x44,0x8,0x11,0x0,0x0,0xf8,0x20,0x40,0x80,0x4,0xfe,0x24,0x24,0x24,0x24,0x44,0x44,0x84,0x28,0x10,
++0x1,0x11,0x9,0x1,0x7f,0x40,0x80,0x1f,0x0,0x0,0x7f,0x2,0x4,0x8,0x1f,0x0,0x0,0x10,0x20,0x0,0xfe,0x2,0x24,0xf0,0x0,0x8,0xfc,0x0,0x40,0x20,0xf0,0x10,
++0x1,0x11,0x9,0x7f,0x40,0x8f,0x8,0xf,0x1,0x1f,0x11,0x11,0x11,0x11,0x1,0x1,0x0,0x10,0x20,0xfe,0x2,0xe4,0x20,0xe0,0x10,0xf8,0x10,0x10,0x10,0x50,0x20,0x0,
++0x8,0x8,0x8,0x8,0x8,0x9,0x8,0xff,0x9,0x9,0x8,0x8,0x8,0x9,0xe,0x8,0x0,0x10,0x30,0x40,0x80,0x0,0x4,0xfe,0x0,0x0,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x8,0xa,0x9,0x10,0x17,0x34,0x58,0x93,0x10,0x10,0x1f,0x10,0x10,0x11,0x13,0x10,0x40,0x48,0x50,0x40,0xfe,0x2,0x14,0xf8,0x0,0x4,0xfe,0x40,0x90,0x8,0xfc,0x4,
++0x8,0x7f,0x48,0x48,0x48,0x79,0x4b,0x48,0x48,0x79,0x49,0x4a,0x4c,0x48,0x49,0x98,0x0,0xf8,0x20,0x40,0x80,0x4,0xfe,0x94,0x94,0x24,0x24,0x44,0x44,0x84,0x28,0x10,
++0x0,0x0,0x1f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x40,0x80,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x49,0x29,0x2a,0x8,0x7f,0x41,0x41,0x5d,0x55,0x55,0x55,0x5d,0x41,0x45,0x42,0x20,0x20,0x20,0x24,0x7e,0x84,0x44,0x44,0x48,0x28,0x28,0x10,0x28,0x28,0x46,0x84,
++0x10,0x13,0x10,0x7c,0x54,0x55,0x57,0x7c,0x54,0x55,0x55,0x7e,0x54,0x10,0x11,0x10,0x0,0xf8,0x20,0x40,0x80,0x4,0xfe,0x94,0x94,0x24,0x24,0x44,0x44,0x84,0x28,0x10,
++0x1,0x9,0x7d,0x49,0x49,0x49,0x49,0x48,0x4b,0x4a,0x7a,0x4b,0x2,0x2,0x3,0x2,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x13,0x12,0x12,0x23,0x22,0x62,0xa3,0x20,0x27,0x24,0x24,0x27,0x24,0x24,0x27,0x24,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x10,0x13,0x10,0x7c,0x10,0x10,0xfd,0x12,0x51,0x5d,0x51,0x51,0x71,0x48,0x87,0x0,0x8,0xfc,0x88,0x88,0x88,0xa8,0x10,0x0,0xf8,0x8,0x8,0x8,0xf8,0x6,0xfc,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x11,0x15,0x1a,0x32,0xd4,0x10,0x10,0x10,0x10,0x50,0x27,0x40,0x40,0x40,0x40,0x50,0x48,0x46,0x42,0x48,0x48,0x48,0x50,0x10,0x20,0xc0,0x0,
++0x10,0x10,0x10,0x1c,0x21,0x21,0x7d,0x92,0x12,0x7c,0x10,0x10,0x14,0x18,0x10,0x7,0x40,0x40,0x40,0x40,0x50,0x48,0x46,0x42,0x48,0x48,0x48,0x50,0x10,0x20,0xc0,0x0,
++0x8,0xa,0x7f,0x8,0x9,0x7f,0x41,0x7f,0x41,0x7f,0x48,0xa,0xff,0x8,0x8,0x9,0x4,0x7e,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x44,0x94,0x8,
++0x2,0x22,0xff,0xa2,0xa2,0xaf,0xa8,0xaf,0xa8,0xaf,0xaa,0xe2,0xbf,0x2,0x2,0x2,0x4,0x3e,0xa4,0x24,0xa4,0xfc,0xa4,0xa4,0xa4,0xbc,0x24,0xa4,0xe4,0x24,0x44,0x8c,
++0x2,0x42,0x2f,0x22,0x2,0x8f,0x48,0x4f,0x8,0x1f,0x2a,0xe2,0x3f,0x22,0x22,0x22,0x4,0x3e,0xa4,0x24,0xa4,0xfc,0xa4,0xa4,0xa4,0xbc,0x24,0xa4,0xe4,0x24,0x44,0x8c,
++0x11,0x11,0x22,0x11,0x3f,0x21,0x3f,0x21,0x3f,0x1,0xff,0x5,0x9,0x11,0x61,0x1,0x10,0x10,0x20,0x10,0xf8,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x40,0x20,0x1c,0x8,0x0,
++0x0,0x8,0x7c,0x48,0x49,0x49,0x49,0x4a,0x4a,0x4c,0x48,0x78,0x48,0x0,0x0,0x7,0x40,0x40,0x40,0x40,0x50,0x48,0x46,0x42,0x48,0x48,0x48,0x10,0x10,0x20,0xc0,0x0,
++0x10,0x10,0x10,0x10,0x55,0x59,0x51,0x92,0x12,0x14,0x10,0x28,0x24,0x44,0x80,0x7,0x40,0x40,0x40,0x40,0x50,0x48,0x46,0x42,0x48,0x48,0x48,0x10,0x10,0x20,0xc0,0x0,
++0x2,0x2,0x7f,0x4,0x9,0x11,0x21,0x3f,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x0,0x8,0xfc,0x0,0x0,0x0,0x20,0xf0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x10,0x10,0xfc,0x11,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x17,0x50,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x3c,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x22,0x21,0x2f,0x22,0xf4,0x2f,0x20,0x37,0x24,0xe7,0x24,0x27,0x24,0x24,0xa4,0x45,0x10,0x10,0xd0,0x14,0xbe,0xc4,0x24,0xa8,0xa8,0xa8,0x90,0x90,0xa8,0xa8,0xc6,0x84,
++0x25,0x3f,0x44,0xbf,0x4,0x3f,0x24,0x25,0x0,0x3f,0x1,0x1f,0x1,0x7f,0x1,0x3,0x4,0x84,0x24,0xa4,0x24,0xa4,0xa4,0x8c,0x30,0xc0,0x0,0xf0,0x0,0xfc,0x0,0x0,
++0x10,0x12,0x12,0x22,0x42,0x92,0x13,0x2e,0x62,0xa2,0x22,0x23,0x20,0x20,0x21,0x22,0x0,0x4,0xfe,0x24,0x24,0xa4,0xe4,0x24,0x24,0x64,0xa4,0x24,0x44,0x84,0x28,0x10,
++0x2,0x41,0x2f,0x22,0x4,0x8f,0x40,0x47,0x14,0x27,0xe4,0x27,0x24,0x24,0x24,0x25,0x10,0x10,0xd0,0x14,0xbe,0xc4,0x24,0xa8,0xa8,0xa8,0x90,0x90,0xa8,0xa8,0xc6,0x84,
++0x11,0x11,0x11,0x11,0xff,0x11,0x33,0x3b,0x55,0x55,0x99,0x11,0x11,0x11,0x11,0x11,0x0,0x3e,0x22,0x24,0xe4,0x28,0x28,0xa4,0x62,0x22,0x22,0x32,0x2a,0x24,0x20,0x20,
++0x0,0x3f,0x21,0x21,0x21,0x3f,0x20,0x20,0x20,0x3f,0x21,0x21,0x21,0x21,0x3f,0x0,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x8,0xfc,0x0,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x25,0x25,0x24,0x24,0x44,0x45,0x86,0x4,0x10,0xf8,0x0,0x20,0xf0,0x0,0x8,0xfc,0x0,0x10,0xa0,0x40,0x30,0xe,0x4,0x0,
++0x1,0x1,0x5,0xd,0x11,0x21,0x41,0x0,0x1,0x1,0x7f,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x40,0x20,0x18,0xc,0x4,0x0,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x0,
++0x1f,0x10,0x1f,0x10,0x1f,0x0,0x3f,0x20,0x2f,0x20,0x3f,0x25,0x44,0x44,0x87,0x4,0xf0,0x10,0xf0,0x10,0xf0,0x0,0xf8,0x0,0xf0,0x4,0xfe,0x8,0x90,0x60,0x1e,0x4,
++0x10,0x10,0x10,0x10,0x53,0x5a,0x54,0x90,0x10,0x10,0x10,0x11,0x11,0x12,0x14,0x18,0x40,0x40,0x40,0x40,0xfc,0x44,0x48,0x40,0x40,0xa0,0xa0,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x40,0x37,0x14,0x84,0x68,0x21,0x9,0x11,0x21,0xe1,0x21,0x22,0x22,0x24,0x28,0x0,0x0,0xfc,0x4,0x8,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x78,0x48,0x57,0x50,0x60,0x51,0x4a,0x4b,0x48,0x69,0x51,0x42,0x44,0x40,0x40,0x40,0x40,0x44,0xfe,0x80,0xa0,0x20,0x28,0xfc,0x20,0x28,0x24,0x26,0x22,0xa0,0x40,
++0x10,0x10,0x10,0x7d,0x11,0x12,0xfc,0x11,0x10,0x5c,0x51,0x50,0x70,0x48,0x87,0x0,0x40,0x40,0xa0,0x10,0x28,0x6e,0x84,0x20,0x60,0x88,0x18,0x20,0x40,0x86,0xfc,0x0,
++0x20,0x10,0x10,0x0,0xfc,0xb,0x10,0x34,0x59,0x94,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x90,0x90,0x10,0x10,0x10,0x50,0x20,
++0x12,0x11,0x17,0x14,0xf9,0x11,0x11,0x18,0x37,0xd0,0x13,0x10,0x17,0x10,0x51,0x20,0x48,0x50,0xfe,0x2,0xf4,0x10,0xf0,0x18,0xe0,0x40,0xf8,0x40,0xfc,0x40,0x40,0x80,
++0x4,0xe,0x78,0x8,0x9,0xfe,0x8,0x1c,0x1a,0x28,0x29,0x49,0x8a,0x8,0x8,0x8,0x40,0x40,0x80,0x80,0xfe,0x4,0x28,0x20,0xa8,0xa4,0x26,0x22,0x20,0x20,0xa0,0x40,
++0x20,0x20,0x20,0x27,0xfc,0x24,0x24,0x27,0x24,0x24,0x3c,0xe6,0x45,0x4,0x8,0x10,0x20,0x28,0x24,0xfe,0x20,0x20,0x24,0xa4,0xa8,0xa8,0x90,0x90,0x30,0x4a,0x8a,0x6,
++0x10,0x13,0x10,0x12,0xfd,0x12,0x37,0x38,0x57,0x52,0x92,0x13,0x11,0x10,0x1f,0x10,0x0,0xa8,0xb4,0xa8,0x10,0x8,0xfe,0x4,0xf8,0x8,0x8,0xf8,0x10,0xa0,0xfe,0x0,
++0x0,0x0,0x0,0x3f,0x20,0x20,0x20,0x3e,0x22,0x22,0x22,0x2a,0x24,0x40,0x81,0x0,0x80,0xa0,0x90,0xfc,0x80,0x80,0x84,0x44,0x48,0x48,0x30,0x20,0x62,0x92,0xa,0x6,
++0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x7f,0x1,0x1,0x3f,0x1,0x1,0xff,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x8,0xfc,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,
++0x0,0x0,0x1f,0x1,0xff,0x5,0x3d,0x5,0xd,0x75,0x3,0x5,0x9,0x11,0x61,0x1,0x20,0xf0,0x0,0x4,0xfe,0x40,0x58,0x60,0x44,0x3c,0x80,0x40,0x30,0x1c,0x8,0x0,
++0x8,0x1d,0xf1,0x11,0x11,0xff,0x11,0x38,0x37,0x54,0x50,0x91,0x10,0x10,0x17,0x10,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x0,0xfe,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,
++0x10,0x1b,0x20,0x40,0x12,0x1a,0x32,0x52,0x97,0x10,0x2a,0x29,0x28,0x48,0x7,0x0,0x8,0xfc,0x40,0x50,0x78,0x40,0x40,0x48,0xfc,0x0,0x10,0x88,0xa4,0x24,0xe0,0x0,
++0x0,0x47,0x31,0x15,0x82,0x44,0x4f,0x10,0x17,0x24,0xe4,0x27,0x22,0x21,0x3f,0x20,0x0,0x50,0x68,0x50,0x20,0x10,0xfe,0x4,0xf0,0x10,0x10,0xf0,0x20,0x44,0xfe,0x0,
++0x0,0x40,0x20,0x27,0x4,0x4,0xe4,0x27,0x24,0x24,0x24,0x2e,0x35,0x24,0x8,0x10,0x20,0x28,0x24,0xfe,0x20,0x20,0x24,0xa4,0xa8,0xa8,0x90,0x90,0x30,0x4a,0x8a,0x6,
++0x1f,0x0,0x1,0x1,0x79,0xf,0x9,0x11,0x17,0x21,0x21,0x4f,0x81,0x1,0x5,0x2,0xf0,0x20,0x40,0x84,0x2c,0xf0,0x20,0x10,0xd0,0x8,0x4e,0xe4,0x0,0x0,0x0,0x0,
++0x0,0x47,0x24,0x24,0x7,0x0,0xef,0x20,0x20,0x27,0x20,0x20,0x2f,0x50,0x8f,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0xf8,0x80,0xa0,0xf0,0x80,0x90,0xf8,0x6,0xfc,0x0,
++0x8,0xfc,0x9,0x49,0x49,0x49,0x49,0x48,0x7f,0x4,0x5,0x1c,0xe4,0x44,0x14,0x8,0x20,0x24,0xfe,0x24,0xfc,0x24,0xfc,0x4,0xfe,0x80,0xfc,0x4,0x4,0x4,0x28,0x10,
++0x8,0x1c,0xf1,0x10,0x11,0xfc,0x10,0x38,0x37,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x0,0x8,0xfc,0x20,0x24,0xa4,0xa8,0x20,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x8,0x7c,0x48,0x49,0x4a,0x4d,0x48,0x48,0x48,0x48,0x79,0x4a,0x2,0x1,0x0,0x80,0x80,0x88,0xfc,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x2,0x2,0xfe,0x0,
++0x1,0x0,0x1f,0x12,0x92,0x53,0x55,0x19,0x31,0x5f,0xd1,0x11,0x12,0x22,0x44,0x8,0x0,0x84,0xfe,0x0,0x4,0xfe,0x24,0x24,0x24,0xe4,0x24,0x24,0xa4,0x7c,0x24,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x17,0x18,0x30,0xd7,0x12,0x11,0x11,0x10,0x50,0x20,0x40,0x40,0x50,0xf8,0x40,0x48,0xfc,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x50,0x20,
++0x2,0x3f,0x22,0x22,0x3e,0x22,0x3e,0x2,0xff,0x8,0x2a,0x2f,0x28,0x58,0x87,0x0,0x40,0x40,0x40,0x40,0x48,0x58,0x60,0x40,0x40,0x44,0x44,0x3c,0x0,0x6,0xfc,0x0,
++0x0,0x40,0x32,0x12,0x82,0x63,0x2e,0x2,0x12,0x22,0xe2,0x22,0x22,0x22,0x21,0x20,0x40,0x40,0x40,0x48,0x7c,0xc8,0x48,0x48,0x48,0x48,0x68,0x50,0x42,0x2,0xfe,0x0,
++0x0,0x43,0x22,0x22,0x2,0x3,0xe2,0x22,0x22,0x22,0x22,0x24,0x28,0x50,0x8f,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x80,0x80,0x40,0x20,0x1c,0x0,0x6,0xfc,0x0,
++0x8,0x7c,0x9,0x9,0x9,0x79,0x41,0x47,0x41,0x79,0x9,0x9,0x9,0x9,0x50,0x20,0x20,0x20,0x20,0x20,0x24,0x3e,0xe4,0x24,0x24,0x24,0x34,0x28,0x22,0x2,0xfe,0x0,
++0x8,0xfc,0x9,0x49,0x49,0x49,0x49,0x4b,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x28,0x10,0x20,0x20,0x20,0x20,0x24,0x3e,0xe4,0x24,0x24,0x24,0x34,0x28,0x22,0x2,0xfe,0x0,
++0x2,0xff,0x24,0x24,0x3c,0x24,0x24,0x3c,0x24,0x24,0x3f,0xe4,0x44,0x7,0x4,0x4,0x10,0x10,0x10,0x90,0x94,0x9e,0x90,0x90,0x90,0x90,0x90,0x90,0x94,0xfe,0x0,0x0,
++0x1,0x11,0x11,0x11,0x11,0x11,0xff,0x0,0x21,0x21,0x22,0x24,0x28,0x20,0x3f,0x20,0x0,0x20,0xf0,0x0,0x0,0x4,0xfe,0x0,0x8,0x8,0x88,0x68,0x28,0x8,0xf8,0x8,
++0x8,0x8,0x9,0x13,0x10,0x30,0x50,0x91,0x16,0x10,0x10,0x13,0x10,0x10,0x10,0x17,0x80,0xfc,0x8,0x10,0xa0,0x40,0x90,0x10,0x20,0x7e,0x84,0x48,0x30,0x20,0xc0,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x10,0x1f,0x14,0x14,0x12,0x11,0x10,0x20,0x20,0x40,0x80,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,0x0,0x0,0x0,0x80,0x40,0x30,0xe,0x4,
++0x1,0x1,0x1,0x3f,0x1,0x1,0xff,0x4,0x4,0x14,0x14,0x24,0x48,0x88,0x11,0x20,0x0,0x0,0x10,0xf8,0x0,0x4,0xfe,0x40,0x40,0x50,0x48,0x46,0x42,0x40,0x40,0x80,
++0x20,0x20,0x27,0xf8,0x24,0x22,0x70,0x50,0x52,0x54,0x50,0x52,0x21,0x50,0x4f,0x80,0x0,0x4,0xbe,0x84,0xa4,0x94,0x84,0x84,0x94,0xa4,0x84,0x94,0x8,0x6,0xfc,0x0,
++0x0,0x0,0x3f,0x20,0x20,0x20,0x3f,0x20,0x20,0x23,0x20,0x20,0x40,0x40,0x80,0x0,0x10,0x78,0x80,0x0,0x0,0x8,0xfc,0x80,0x80,0x80,0xe0,0xb0,0x90,0x80,0x80,0x80,
++0x10,0x10,0x11,0x15,0x59,0x51,0x51,0x91,0x11,0x11,0x10,0x28,0x25,0x42,0x84,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x90,0x88,0xc,0x4,0x0,
++0x2,0x1,0x1,0xff,0x2,0x4,0x8,0x1f,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x60,0x0,0x0,0x4,0xfe,0x0,0x40,0x20,0xf0,0x50,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x40,0x20,0x20,0x7,0x14,0x14,0x14,0x24,0xe7,0x24,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xfc,0x44,0x40,0x40,0x40,0x40,0x40,
++0x1,0x1,0x1,0x1,0x3f,0x21,0x21,0x21,0x21,0x3f,0x21,0x1,0x1,0x1,0x7e,0x20,0x0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x10,0x8,0xfc,0x4,0x0,
++0x1,0x21,0x21,0x3f,0x22,0x1,0x7f,0x40,0x9f,0x0,0x7f,0x1,0x11,0x11,0x25,0x2,0x0,0x8,0x8,0xf8,0x8,0x0,0xfe,0x2,0xf4,0x0,0xfc,0x0,0x20,0x18,0x8,0x0,
++0x2,0x1,0x7f,0x42,0x82,0x2,0x3f,0x2,0x2,0x4,0x4,0x8,0x9,0x12,0x20,0x40,0x0,0x0,0xfe,0x2,0x84,0x50,0xf8,0x80,0x90,0xb0,0xc0,0x80,0x82,0x82,0x7e,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x11,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x11,0x51,0x21,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x2,0xff,0x28,0x2a,0xff,0xaa,0xaa,0xaa,0xc6,0x82,0xfe,0x82,0x82,0xfe,0x83,0x2,0x44,0x44,0x54,0x54,0x54,0x54,0xfc,0x54,0x54,0x54,0x54,0x54,0x94,0x94,0x4,0x4,
++0x0,0x4,0x7f,0x54,0x57,0x54,0x57,0x7c,0x54,0x57,0x55,0x55,0x7e,0x44,0x8,0x0,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x80,0x88,0xfe,0x8,0x48,0x28,0x8,0x28,0x10,
++0x0,0x7c,0x47,0x44,0x47,0x44,0x7f,0x10,0x10,0x5f,0x51,0x51,0x5a,0xe4,0x48,0x0,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x80,0x88,0xfe,0x8,0x48,0x28,0x8,0x28,0x10,
++0x8,0x1f,0xf2,0x12,0x12,0xfe,0x12,0x3a,0x36,0x52,0x52,0x92,0x12,0x12,0x14,0x18,0x0,0xfe,0x22,0x22,0xfa,0x22,0x22,0xfa,0x2,0xfa,0x8a,0x8a,0x8a,0xfa,0x8a,0x4,
++0x4,0xe,0x78,0x8,0xfe,0x8,0x1d,0x2a,0x48,0x9,0x2,0x29,0x28,0x48,0x7,0x0,0x20,0x20,0x20,0xa4,0xac,0xb0,0x50,0x48,0x8e,0x4,0x0,0x90,0xac,0x24,0xe0,0x0,
++0x10,0x1f,0x28,0x45,0x1,0x7f,0x2,0x3f,0x4,0xff,0x8,0x1f,0x24,0x42,0x2,0x0,0x40,0x7c,0xa0,0x10,0x0,0xfc,0x0,0xf8,0x0,0xfe,0x10,0xfc,0x10,0x10,0x50,0x20,
++0x9,0x9,0x9,0x11,0x17,0x31,0x51,0x91,0x11,0x11,0x11,0x12,0x12,0x14,0x18,0x10,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x10,0x17,0x24,0x24,0x4d,0xfc,0x14,0x25,0x44,0xfd,0x5,0x5,0x1d,0xe5,0x48,0x10,0x4,0xfe,0x44,0x44,0xf4,0x44,0x44,0xf4,0x4,0xf4,0x14,0x14,0x14,0xf4,0x14,0x8,
++0x0,0x9,0x7f,0x49,0x49,0x7f,0x49,0x4b,0x4b,0x7d,0x49,0x49,0x49,0x79,0x49,0x1,0x80,0xd0,0x10,0x12,0x56,0xb8,0x10,0x90,0x50,0x10,0x28,0x28,0x28,0x46,0x84,0x0,
++0x0,0x3f,0x2,0x2,0x2,0x2,0x2,0x1f,0x4,0x4,0x4,0x4,0x4,0x4,0xff,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x0,
++0x2,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x1,0x1,0xff,0x2,0x4,0x18,0x60,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x20,0x14,0xfe,0x80,0x60,0x1c,0x8,
++0x20,0x10,0x10,0x5,0xfc,0x8,0x10,0x34,0x58,0x94,0x10,0x10,0x10,0x11,0x12,0x14,0x0,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x4,0x28,0x10,
++0x1,0x1,0x21,0x21,0x21,0x21,0x3f,0x21,0x1,0x41,0x41,0x41,0x41,0x41,0x7f,0x40,0x0,0x0,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x20,0x27,0x24,0x24,0xff,0x24,0x75,0x6d,0xa5,0x25,0x24,0x25,0x25,0x2b,0x30,0x20,0x4,0xfe,0x0,0x44,0xe4,0x4,0xde,0x44,0x44,0xd4,0xc,0x44,0x44,0xe4,0x14,0x8,
++0x0,0x3f,0x20,0x3f,0x20,0x2f,0x29,0x29,0x29,0x2f,0x20,0x29,0x2a,0x23,0x5c,0x80,0x4,0xfe,0x0,0x88,0x8,0x8,0xfe,0x8,0x8,0x48,0x28,0x8,0x8,0x88,0x28,0x10,
++0x4,0x7f,0x44,0x44,0x47,0x7c,0x10,0x17,0x50,0x59,0x53,0x55,0x5d,0xf1,0x41,0x1,0x90,0xfe,0x90,0x48,0xf8,0x50,0x64,0xfe,0x80,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x20,0x20,0x23,0x7a,0x82,0x2,0xfb,0x22,0x22,0xfb,0x22,0x22,0x2f,0x30,0x20,0x0,0x10,0x10,0xd0,0x54,0x7e,0x54,0xd4,0x54,0x54,0xd4,0x54,0x54,0xf4,0x24,0x54,0x88,
++0x10,0x10,0x20,0x3c,0x45,0x8a,0x14,0xfe,0x4,0x4,0x7c,0x4,0x4,0xfc,0x4,0x0,0x40,0x50,0x94,0xfe,0x90,0x90,0xfc,0x90,0x90,0xfc,0x90,0x90,0x94,0xfe,0x80,0x80,
++0x0,0x5e,0x32,0x34,0x14,0x95,0x5a,0x14,0x32,0x33,0xda,0x54,0x51,0x52,0x50,0x10,0x20,0x20,0x50,0x50,0x88,0x6,0xfc,0x20,0x24,0xfe,0x20,0xa8,0x26,0x22,0xa0,0x40,
++0x0,0x78,0x48,0x50,0x51,0x62,0x55,0x48,0x48,0x4f,0x68,0x51,0x42,0x44,0x41,0x40,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x40,0x50,0xfc,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x8,0x8,0x7e,0x8,0x1c,0x2a,0x48,0x3f,0x1,0x9,0x9,0x11,0x11,0x29,0x47,0x80,0x20,0x28,0xfc,0x20,0x78,0xa4,0x20,0xf8,0x10,0x40,0xe0,0x0,0x0,0x6,0xfc,0x0,
++0x0,0x4,0xfe,0x11,0x11,0x21,0x25,0x7f,0xa4,0x25,0x25,0x25,0x25,0x3d,0x25,0x1,0x20,0x20,0x20,0x24,0x24,0x24,0x24,0xfc,0x20,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x10,0x18,0x25,0x24,0x60,0xbd,0x24,0x25,0x26,0x24,0x25,0x26,0x24,0x20,0x20,0x40,0x40,0x48,0xfc,0x50,0x64,0xfe,0x88,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,
++0x1,0x3f,0x1,0xf,0x8,0x9,0x9,0x7f,0x8,0x7e,0x8,0x3e,0x22,0x2a,0x2a,0xff,0x10,0xf8,0x0,0xe0,0x20,0x20,0x28,0xfc,0x20,0xfc,0x20,0xf8,0x88,0xa8,0xa8,0xfe,
++0x10,0x10,0x1f,0x10,0xfd,0x13,0x10,0x18,0x33,0xd0,0x17,0x14,0x17,0x14,0x57,0x24,0x80,0x44,0xfe,0x80,0x10,0xf0,0x40,0x88,0xf8,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x4,
++0x20,0x20,0x3c,0x48,0x51,0xfd,0x55,0x55,0x7d,0x55,0x55,0x7d,0x54,0x54,0x55,0x8c,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0xfc,0x20,0x28,0x3c,0xe2,0x82,
++0x0,0x10,0x10,0x10,0x1e,0x22,0x22,0x22,0x54,0x94,0x8,0x14,0x14,0x22,0x41,0x80,0x40,0x40,0x40,0x40,0x40,0x60,0x50,0x4c,0x44,0x40,0x40,0x40,0x40,0x6,0xfc,0x0,
++0x10,0x10,0x12,0x12,0xfb,0x10,0x17,0x18,0x30,0xd7,0x14,0x14,0x14,0x14,0x54,0x24,0x40,0x40,0x48,0x48,0xf8,0x4,0xfe,0x40,0x84,0xfe,0xa4,0xa4,0xa4,0xa4,0xb4,0x8,
++0x0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x0,0x4,0x4,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x4,0x4,0x4,
++0x2,0x1,0x7f,0x44,0x88,0x0,0x3f,0x8,0x10,0x3f,0x1,0x2,0x4,0x18,0x61,0x0,0x0,0x0,0xfe,0x42,0x24,0x0,0xf8,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x40,0x80,
++0x10,0x10,0x10,0x11,0xfc,0x13,0x30,0x39,0x56,0x50,0x91,0x16,0x10,0x17,0x10,0x10,0x80,0xf8,0x88,0xf8,0x14,0xfe,0x80,0x44,0x6c,0xb0,0x30,0x68,0xa6,0x24,0xa0,0x40,
++0x8,0x8,0x8,0x17,0x10,0x30,0x5f,0x90,0x11,0x13,0x10,0x11,0x10,0x10,0x10,0x10,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x80,0x0,0xfc,0x8,0x10,0xa0,0x40,0x60,0x20,
++0x8,0x12,0x3f,0x22,0x32,0x2a,0x22,0x23,0xfe,0x22,0x32,0x2a,0x22,0x42,0x8a,0x4,0x8,0x7c,0x48,0x48,0x48,0x48,0x86,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x0,0x8,0x7e,0x4a,0x4b,0x48,0x4f,0x48,0x48,0x4b,0x4a,0x4a,0x7a,0x4a,0x2,0x2,0x40,0x40,0x48,0x48,0xf8,0x4,0xfe,0x40,0x84,0xfe,0xa4,0xa4,0xa4,0xa4,0xb4,0x8,
++0x1,0x1,0x3f,0x21,0x21,0x3f,0x1,0x1,0x7f,0x41,0x41,0x7f,0x41,0x1,0x1,0x1,0x0,0x8,0xfc,0x8,0x8,0xf8,0x0,0x4,0xfe,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,
++0x1,0x0,0x1f,0x10,0x91,0x52,0x54,0x1b,0x32,0x52,0xd2,0x12,0x22,0x22,0x41,0x0,0x0,0x84,0xfe,0x80,0x40,0x20,0x10,0xee,0x24,0x20,0xa0,0x40,0x8,0x8,0xf8,0x0,
++0x2,0x1,0x7f,0x48,0x92,0x4,0x3f,0x22,0x23,0x24,0x2a,0x21,0x22,0x24,0x3f,0x20,0x0,0x0,0xfe,0x22,0x14,0x0,0xf8,0x8,0xc8,0x48,0x88,0x8,0x88,0x8,0xf8,0x8,
++0x20,0x20,0x27,0xf9,0xa8,0xaf,0xa8,0xab,0xaa,0xab,0xaa,0xbb,0x20,0x23,0x20,0x2f,0x80,0x48,0xfc,0x10,0xa4,0xfe,0x8,0xfc,0x48,0xf8,0x48,0xf8,0x40,0xf8,0x40,0xfe,
++0x1,0x0,0x3f,0x20,0x20,0x20,0x3f,0x20,0x21,0x21,0x22,0x24,0x48,0x50,0x80,0x0,0x0,0x84,0xfe,0x80,0x80,0x88,0xfc,0x80,0xc0,0xa0,0x90,0x88,0x8e,0x84,0x80,0x80,
++0x20,0x17,0x50,0x40,0x4f,0x40,0x44,0x44,0x44,0x47,0x40,0x5f,0x40,0x40,0x40,0x40,0x4,0xfe,0x4,0x44,0xe4,0x44,0x44,0x44,0x44,0xf4,0x14,0xd4,0x14,0x54,0x24,0xc,
++0x8,0x8,0x14,0x12,0x21,0x20,0x7e,0xa2,0x22,0x2a,0x24,0x20,0x21,0x21,0x1f,0x0,0x4,0x4,0x4,0x24,0xa4,0xa4,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x4,0x14,0x8,
++0x0,0x8,0x7c,0x48,0x49,0x4a,0x48,0x48,0x48,0x48,0x48,0x78,0x49,0x2,0x4,0x8,0x80,0x80,0x80,0xfc,0x4,0x48,0x40,0x40,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x10,0x10,0x10,0x10,0x55,0x5a,0x50,0x90,0x10,0x10,0x10,0x10,0x19,0x26,0x44,0x88,0x80,0x80,0x80,0xfc,0x4,0x48,0x40,0x40,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x10,0x10,0x13,0x10,0xfc,0x17,0x11,0x19,0x37,0xd1,0x11,0x17,0x10,0x10,0x53,0x20,0x8,0x3c,0xc0,0x40,0x48,0xfc,0x50,0x54,0xfe,0x50,0x50,0xfc,0x40,0x50,0xf8,0x0,
++0x10,0x10,0x13,0x1c,0x20,0x23,0x7d,0x91,0x17,0x79,0x11,0x13,0x14,0x18,0x13,0x0,0x8,0x3c,0xc0,0x40,0x48,0xfc,0x50,0x54,0xfe,0x50,0x50,0xfc,0x40,0x50,0xf8,0x0,
++0x0,0x0,0x3f,0x1,0x1,0x7f,0x9,0x9,0xff,0x9,0x9,0x7f,0x1,0x1,0x3f,0x0,0x10,0x78,0x80,0x0,0x8,0xfc,0x20,0x24,0xfe,0x20,0x28,0xfc,0x0,0x10,0xf8,0x0,
++0x1,0x7f,0x1,0x3f,0x2,0xff,0x4,0x8,0x1f,0x28,0xc8,0xf,0x8,0x8,0xf,0x8,0x0,0xfc,0x0,0xf8,0x0,0xfe,0x40,0x20,0xf0,0x2e,0x24,0xe0,0x20,0x20,0xe0,0x20,
++0x10,0x17,0x10,0x13,0xfc,0x17,0x39,0x32,0x57,0x5a,0x92,0x13,0x12,0x12,0x13,0x12,0x40,0xfc,0x40,0xf8,0x80,0xfe,0x10,0x8,0xfe,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x4,0xfe,0x29,0x28,0xfe,0xaa,0xaa,0xae,0xc2,0x82,0x82,0xfe,0x83,0x82,0xfe,0x82,0x20,0x10,0xfe,0x4,0xfe,0x84,0xfc,0x0,0xfc,0x8,0x30,0x24,0xfe,0x20,0xa0,0x40,
++0x0,0x3f,0x20,0x2f,0x20,0x3f,0x2a,0x29,0x28,0x2e,0x40,0x9f,0x10,0x10,0x1f,0x10,0x10,0xf8,0x0,0xf0,0x0,0xfc,0x10,0xa0,0x60,0x1e,0x4,0xf0,0x10,0x10,0xf0,0x10,
++0x0,0x40,0x37,0x10,0x83,0x62,0x23,0x8,0x13,0x20,0xe0,0x2f,0x20,0x20,0x21,0x20,0x80,0x44,0xfe,0x0,0xf8,0x8,0xf8,0x0,0xf8,0x10,0x64,0xfe,0x40,0x40,0x40,0x80,
++0x10,0x10,0x20,0x27,0x48,0xfa,0x12,0x22,0x42,0xfb,0x42,0x0,0x18,0xe0,0x40,0x0,0x40,0x40,0x44,0xfe,0x40,0x48,0x48,0x48,0x48,0xf8,0x48,0x40,0x42,0x42,0x3e,0x0,
++0x1,0x7f,0x1,0x3f,0x2,0x7f,0x8,0x1f,0xe8,0xf,0x10,0x7c,0x54,0x7c,0x12,0xfe,0x8,0xfc,0x0,0xf8,0x0,0xfc,0x20,0xf0,0x2e,0xe4,0x20,0xf8,0xa8,0xf8,0x24,0xfc,
++0x0,0xf7,0x52,0x31,0x52,0x94,0x10,0x14,0x3f,0x64,0xbf,0x24,0x3f,0x24,0x3f,0x20,0x20,0xa0,0xa8,0xa4,0xa0,0xae,0xf0,0x20,0xa4,0x24,0x18,0x10,0x30,0x4a,0x8a,0x4,
++0x10,0x10,0x20,0x20,0x4b,0xfa,0x13,0x22,0x43,0xf8,0x40,0x7,0x18,0xe0,0x40,0x0,0x48,0x7c,0x40,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x1,0x0,0x1f,0x11,0x91,0x51,0x55,0x15,0x35,0x55,0xd5,0x15,0x25,0x25,0x4e,0x4,0x0,0x84,0xfe,0x20,0x20,0x20,0x24,0x2c,0xf0,0x20,0x20,0x20,0x22,0xe2,0x1e,0x0,
++0x8,0x8,0xff,0x8,0x1,0x41,0x33,0x12,0x4,0x10,0xe0,0x20,0x21,0x21,0x22,0xc,0x20,0x24,0xfe,0x20,0x0,0x8,0xfc,0x8,0x90,0x80,0x80,0x80,0x40,0x30,0xe,0x4,
++0x2,0x11,0xf8,0x27,0x21,0x41,0x42,0x77,0xd0,0x51,0x51,0x52,0x54,0x77,0x50,0x0,0x8,0x98,0xa0,0xfe,0x8,0x8,0x52,0xbc,0x84,0x8,0x8,0x10,0xa4,0xfe,0x42,0x0,
++0x14,0x14,0x14,0x54,0x55,0x5e,0x54,0x54,0x54,0x54,0x54,0x54,0x5d,0xe6,0x44,0x0,0x50,0x50,0x84,0xfe,0x90,0x90,0xfc,0x90,0x90,0xfc,0x90,0x90,0x94,0xfe,0x80,0x80,
++0x8,0x1c,0xf0,0x11,0x10,0x14,0xfe,0x10,0x15,0x7e,0x44,0x45,0x44,0x44,0x7c,0x44,0x40,0x20,0x28,0xfc,0x0,0x88,0x50,0x4,0xfe,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,
++0x8,0x4,0xff,0x8,0x8,0x12,0x7c,0x8,0x12,0x7e,0x0,0xa,0x29,0x28,0x48,0x7,0x20,0x44,0xfe,0x20,0x20,0x44,0xf8,0x10,0x24,0xfc,0x0,0x0,0x88,0xa4,0x24,0xe0,
++0x21,0x11,0x1,0xa,0x70,0x20,0x27,0x0,0xff,0x10,0x1f,0x10,0x13,0x10,0x16,0x38,0x0,0x8,0xfc,0x48,0x40,0xa0,0x1c,0x4,0xfe,0x0,0xe0,0x20,0x20,0xa4,0x24,0x1c,
++0x20,0x13,0x10,0x0,0x7,0xf0,0x10,0x13,0x12,0x12,0x12,0x13,0x16,0x18,0x10,0x0,0x4,0xfe,0x4,0x24,0xf4,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x24,0x4,0x14,0x8,
++0x4,0x4,0x4,0x24,0x24,0x24,0x27,0x24,0x24,0x24,0x24,0x24,0x27,0xf8,0x40,0x0,0x40,0x40,0x40,0x44,0x4c,0x50,0x60,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x8,0x8,0x9,0xff,0x8,0x7f,0x49,0x49,0x4b,0x18,0x1c,0x2b,0x49,0x88,0x8,0x8,0x4,0x4,0x4,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x0,0x7d,0x45,0x55,0x55,0x55,0x55,0x54,0x55,0x56,0x54,0x11,0x2a,0x44,0x81,0x0,0x8,0xfc,0x8,0xf8,0x8,0x8,0xf8,0x84,0xfe,0x54,0x94,0x24,0x44,0x84,0x28,0x10,
++0x0,0x40,0x30,0x11,0x1,0x2,0x8,0x10,0x20,0xe0,0x20,0x20,0x21,0x22,0x24,0x28,0x80,0x80,0x80,0x8,0xfc,0x8,0x50,0x40,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x5,0xfe,0x24,0x24,0x3d,0x25,0x25,0x25,0x3d,0x25,0x24,0x24,0xfd,0x6,0x4,0x4,0x4,0xcc,0x50,0x4,0xfe,0x4,0x4,0x4,0xfc,0x44,0x20,0xa4,0x8a,0x8a,0x78,0x0,
++0x4,0x4,0xff,0x14,0x1f,0x12,0x2e,0x25,0x48,0x11,0x2,0x4,0x52,0x51,0x90,0xf,0x40,0x44,0xfe,0x40,0xf8,0x48,0x48,0x88,0xc8,0x28,0x10,0x0,0x4,0x92,0x92,0xf0,
++0x4,0x8,0x7f,0x44,0x44,0x47,0x44,0x48,0x54,0x42,0x41,0x42,0x44,0x48,0x7f,0x40,0x0,0x4,0xfe,0x4,0x4,0xe4,0x24,0x44,0x44,0x84,0x4,0x84,0x4,0x4,0xfc,0x4,
++0x8,0x8,0x8,0x1f,0x12,0x22,0x4a,0x86,0x5,0x4,0x8,0x11,0x22,0x44,0x8,0x0,0x0,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x44,0x84,0xc4,0x34,0x14,0x4,0x28,0x10,
++0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x14,0x12,0x21,0x21,0x42,0x84,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x50,0x50,0x88,0x88,0xc,0x6,0x4,
++0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x14,0x12,0x21,0x41,0x82,0x0,0xff,0x0,0x0,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x50,0x90,0x88,0xe,0x4,0x0,0xfe,0x0,
++0x0,0x40,0x2f,0x20,0x7,0x1,0xf,0x12,0x24,0xeb,0x30,0x27,0x20,0x21,0x22,0x24,0x80,0x88,0xfc,0x80,0xf8,0x0,0xfc,0x20,0x10,0xee,0x84,0xf0,0x80,0x40,0x30,0x10,
++0x8,0x8,0x4a,0x2a,0x1c,0x8,0xfe,0x8,0x1c,0x1a,0x28,0x48,0x88,0x8,0xb,0x8,0x0,0x8,0xfc,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0xfe,0x0,
++0x2,0x7f,0x14,0x15,0x7f,0x55,0x55,0x55,0x55,0x63,0x41,0x7f,0x41,0x41,0x7f,0x41,0x28,0x28,0xfe,0x28,0xa8,0x28,0xfe,0x4,0x7e,0x44,0x44,0x7c,0x44,0x44,0x7c,0x44,
++0x10,0x12,0x1f,0x24,0x42,0x10,0x8,0xff,0x10,0x1c,0x14,0x27,0x24,0x44,0x94,0xb,0x20,0x24,0x3e,0x48,0x84,0x80,0xfe,0x40,0x7c,0xa0,0x24,0xfe,0x20,0x50,0x8e,0x4,
++0x8,0xb,0xa,0x12,0x12,0x33,0x50,0x90,0x12,0x12,0x12,0x12,0x15,0x18,0x10,0x10,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0xc6,0x7c,0x0,
++0x0,0x78,0x4b,0x4a,0x4d,0x78,0x11,0x11,0x5d,0x50,0x53,0x52,0x5f,0xe2,0x40,0x0,0x40,0x20,0xfe,0x8a,0x24,0x20,0xfc,0x24,0xfc,0x20,0xfe,0x22,0xfe,0x22,0x20,0x20,
++0x10,0x1f,0x28,0x5f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x4,0xff,0xa,0x32,0xc4,0xf,0x40,0x7c,0xa0,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x20,0x9e,0x44,0xe0,
++0x2,0x1,0x7f,0x44,0x99,0x1,0x3f,0x21,0x3f,0x1,0x7f,0x41,0x7f,0x41,0x1,0x1,0x0,0x0,0xfe,0x42,0x34,0x0,0xf8,0x8,0xf8,0x0,0xfc,0x4,0xfc,0x4,0x0,0x0,
++0x10,0x11,0x11,0x11,0xfd,0x10,0x15,0x19,0x33,0xd5,0x11,0x11,0x11,0x11,0x51,0x21,0x20,0x24,0x24,0x24,0xfc,0xa0,0x14,0xfe,0x10,0xfc,0x10,0xfc,0x10,0x14,0xfe,0x0,
++0x1,0x21,0x21,0x3f,0x28,0x11,0x10,0x3f,0x50,0x9f,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0x8,0x8,0xf8,0x8,0x0,0x88,0xfc,0x80,0xf8,0x80,0xf8,0x80,0x84,0xfe,0x0,
++0x8,0x9,0x9,0x11,0x11,0x30,0x51,0x93,0x15,0x19,0x11,0x11,0x11,0x11,0x11,0x11,0x20,0x24,0x24,0x24,0xfc,0xa0,0x14,0xfe,0x20,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x8,0x7c,0x48,0x49,0x4a,0x79,0x49,0x49,0x49,0x79,0x49,0x49,0x49,0x49,0x5a,0x84,0x80,0x80,0xf8,0x10,0x24,0xfe,0x0,0x78,0x48,0x48,0x68,0x50,0x42,0x42,0x3e,0x0,
++0x1,0x0,0x1f,0x10,0x90,0x57,0x51,0x11,0x32,0x54,0xd0,0x1f,0x20,0x20,0x40,0x0,0x0,0x84,0xfe,0x80,0x48,0xfc,0x10,0x10,0xac,0x44,0x40,0xfe,0x40,0x40,0x40,0x40,
++0x10,0x10,0x10,0x55,0x38,0x10,0xfe,0x11,0x38,0x34,0x53,0x90,0x10,0x10,0x10,0x10,0x40,0x20,0x28,0xfc,0x88,0x88,0x88,0x54,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x40,0x30,0x17,0x1,0x81,0x61,0x22,0x4,0x10,0x2f,0xe0,0x20,0x20,0x20,0x20,0x20,0x80,0x48,0xfc,0x10,0x10,0x10,0xac,0x44,0x40,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x3e,0x2,0x12,0xa,0x12,0x1,0x7f,0x8,0x14,0x22,0x1,0xff,0x1,0x1,0x1,0x1,0xf8,0x8,0x48,0x28,0x48,0x0,0xfc,0x20,0x50,0x88,0x0,0xfe,0x0,0x0,0x0,0x0,
++0x10,0x10,0x10,0x14,0xff,0x10,0x30,0x38,0x54,0x54,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x90,0x50,0x50,0x10,0x10,0x10,0x10,0x50,0x20,
++0x2,0x2,0xff,0x4,0x8,0xb,0x10,0x10,0x30,0x5f,0x90,0x10,0x10,0x10,0x11,0x10,0x0,0x4,0xfe,0x0,0x0,0xf8,0x10,0x20,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x80,
++0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x8,0x4,0x4,0x0,0x0,0x0,0x0,0x1,0x0,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x0,0x4,0xfe,0x13,0x10,0x21,0x24,0x7f,0xa4,0x24,0x24,0x25,0x3d,0x22,0x4,0x0,0x88,0x4c,0x50,0xfe,0x20,0xfc,0x20,0xfe,0x40,0x88,0xfc,0x10,0x10,0x14,0xfe,0x0,
++0x20,0x23,0x22,0x23,0xfa,0x23,0x20,0x2f,0x34,0xe7,0x24,0x27,0x24,0x2f,0xa0,0x40,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x80,0xfc,0x84,0xa8,0x90,0x90,0xae,0xc4,
++0x11,0x10,0x10,0x17,0xfc,0x13,0x10,0x1f,0x30,0xd1,0x11,0x12,0x14,0x18,0x53,0x20,0x8,0x98,0xa0,0xfc,0x40,0xf8,0x40,0xfe,0x80,0x8,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x11,0x11,0x11,0x17,0xfd,0x11,0x17,0x18,0x33,0xd2,0x12,0x13,0x12,0x12,0x53,0x22,0x10,0x10,0x10,0xfc,0x10,0x14,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x12,0x12,0xfa,0x12,0x15,0x18,0x30,0xd0,0x17,0x10,0x10,0x10,0x5f,0x20,0x40,0x40,0x48,0x48,0x48,0x48,0x54,0xe2,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x10,0x1f,0x20,0x20,0x7f,0x90,0x11,0x7d,0x11,0x11,0x15,0x19,0x11,0x1,0x90,0x90,0x90,0xfc,0x90,0x94,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x11,0x11,0x17,0x11,0xfc,0x10,0x11,0x1a,0x35,0xd0,0x13,0x12,0x12,0x12,0x53,0x22,0x10,0x10,0xfc,0x10,0x40,0xa0,0x10,0xe,0xf4,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x20,0x20,0x0,0xf,0xe0,0x21,0x21,0x22,0x22,0x24,0x28,0x50,0x8f,0x0,0x80,0x80,0x80,0x80,0x88,0xfc,0x80,0x0,0x40,0x20,0x10,0x18,0x8,0x6,0xfc,0x0,
++0x10,0x12,0x1f,0x28,0x45,0x2,0x4,0x8,0x1f,0x20,0xcf,0x8,0x8,0x8,0xf,0x8,0x40,0x48,0x7c,0xa0,0x10,0x80,0x40,0x20,0xf8,0xe,0xe4,0x20,0x20,0x20,0xe0,0x20,
++0x1,0x0,0x1f,0x92,0x52,0x5f,0x12,0x31,0x52,0xd7,0x18,0x17,0x24,0x24,0x47,0x4,0x0,0x84,0xfe,0x20,0x28,0xfc,0xa0,0x40,0x20,0xf0,0xe,0xf4,0x10,0x10,0xf0,0x10,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x14,0x18,0x30,0xd0,0x10,0x10,0x10,0x10,0x50,0x20,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x2,0x2,0x2,0x4,0x4,0x8,0x10,0x60,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x80,0x80,0x40,0x40,0x20,0x10,0xe,0x4,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x1f,0x11,0x1,0xff,0x1,0x3,0x5,0x9,0x11,0x61,0x1,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x4,0xfe,0x0,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x0,0xff,0x2,0x2,0x2,0x3,0x4,0xc,0xa,0x11,0x20,0x40,0x0,0x3,0xc,0x30,0x4,0xfe,0x0,0x0,0x0,0xf8,0x8,0x8,0x10,0x90,0xa0,0x40,0x80,0x0,0x0,0x0,
++0x10,0x10,0x1f,0x20,0x2f,0x61,0xbf,0x22,0x24,0x2c,0x32,0x21,0x22,0x24,0x28,0x21,0x80,0x88,0xfc,0x80,0xf8,0x0,0xfe,0x20,0x90,0x9e,0xa4,0xc0,0xa0,0x98,0x88,0x80,
++0x8,0x7f,0x8,0xff,0x0,0x7f,0x49,0x7f,0x49,0x7f,0x22,0x7f,0x22,0xff,0x22,0x41,0x50,0x48,0x44,0xfe,0x40,0x48,0x48,0x50,0x50,0x20,0x20,0x60,0x90,0x92,0xa,0x6,
++0x9,0x9,0x7f,0x9,0x9,0x7f,0x41,0x81,0x1f,0x11,0x11,0x11,0x11,0x11,0x11,0x1,0x20,0x28,0xfc,0x20,0x20,0xfe,0x2,0x4,0xf0,0x10,0x10,0x10,0x10,0x50,0x20,0x0,
++0x4,0xfe,0x20,0x20,0x3c,0x25,0x27,0x44,0xa5,0x15,0x9,0x9,0x11,0x21,0x41,0x0,0x20,0x20,0x40,0x40,0x88,0x4,0xfe,0x2,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x8,0x8,0x8,0x10,0x10,0x30,0x5f,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x80,0xa0,0x90,0x90,0x84,0xfe,0x80,0x40,0x40,0x40,0x20,0x20,0x12,0x12,0xa,0x6,
++0x8,0x8,0x10,0x37,0x50,0x90,0x10,0x1f,0x10,0x11,0x11,0x11,0x11,0x2,0xc,0x30,0xa0,0x90,0xbc,0xc0,0x42,0x32,0xe,0xf0,0x10,0x10,0x10,0x10,0x10,0xc0,0x30,0x10,
++0x8,0x8,0x10,0x37,0xd0,0x10,0x12,0x11,0xff,0xa,0x9,0x18,0x28,0xc9,0xa,0xc,0xa0,0x90,0xfc,0x80,0x40,0x24,0x1c,0x0,0xfe,0x8,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x8,0x8,0x13,0x20,0x48,0x8,0x17,0x30,0x50,0x97,0x10,0x12,0x11,0x11,0x10,0x10,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x50,0x20,
++0x0,0x40,0x27,0x20,0xf,0x0,0xe7,0x20,0x24,0x22,0x24,0x28,0x22,0x51,0x8f,0x0,0x80,0x90,0xf8,0x90,0xfc,0x90,0xf0,0x80,0x90,0xa0,0x98,0x88,0x80,0x6,0xfc,0x0,
++0x4,0x4,0x8,0x10,0x7f,0x0,0x3f,0x20,0x20,0x3f,0x2,0x11,0x50,0x50,0x8f,0x0,0x0,0x40,0x20,0x10,0xfc,0x0,0xf8,0x8,0x8,0xf8,0x0,0x80,0x94,0x12,0xf2,0x0,
++0x4,0xfe,0x48,0x4b,0x7a,0x4c,0x48,0x48,0x78,0x48,0x48,0x4d,0xf9,0xa,0xc,0x8,0x40,0x40,0x44,0xfe,0x44,0x48,0x60,0x60,0xa0,0xa0,0xa0,0x20,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x13,0x1e,0x32,0xd2,0x13,0x10,0x10,0x1f,0x50,0x20,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x0,0x0,
++0x0,0x1f,0x10,0x12,0x11,0x11,0x10,0xff,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x10,0xf8,0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
++0x10,0x8,0x4,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x21,0x1,0xff,0x1,0x1,0x1,0x10,0x20,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x0,0x0,0x0,
++0x41,0x22,0x14,0x7f,0x49,0x49,0x7f,0x49,0x49,0x7f,0x8,0x8,0xff,0x8,0x8,0x8,0x0,0x7c,0x44,0x48,0x48,0x50,0x50,0x48,0x44,0x44,0x44,0x64,0xd4,0x48,0x40,0x40,
++0x11,0x10,0x10,0x11,0xfd,0x11,0x15,0x19,0x31,0xd1,0x10,0x17,0x10,0x10,0x50,0x20,0x4,0x88,0x50,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x20,0x20,0x20,0x20,
++0x4,0x3e,0x24,0x24,0x24,0x3c,0x24,0x24,0x24,0x3c,0x24,0x24,0x24,0x25,0x54,0x88,0x0,0x4,0xfe,0x84,0x84,0x84,0xfc,0x84,0x84,0x84,0xfc,0x0,0x4,0xfe,0x0,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0xff,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0xf0,0x10,0x4,0xfe,0x0,
++0x10,0x1f,0x10,0x3f,0x40,0xbf,0x12,0xa,0x5,0x38,0x2,0x12,0xa,0x5,0x8,0x70,0x8,0xfc,0x0,0xf8,0x0,0xf0,0x50,0x90,0x10,0xf0,0x10,0x50,0x90,0x12,0xca,0x24,
++0x10,0x10,0x17,0x24,0x24,0x64,0xa7,0x24,0x24,0x24,0x27,0x20,0x20,0x3f,0x20,0x20,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x0,0x0,
++0x12,0x11,0x10,0x13,0x5a,0x56,0x53,0x92,0x12,0x13,0x10,0x1f,0x10,0x10,0x10,0x10,0x8,0x10,0xa0,0xf8,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0xfe,0x40,0x40,0x40,0x40,
++0x0,0x44,0x33,0x11,0x80,0x40,0x41,0xa,0x10,0x22,0xe1,0x20,0x20,0x21,0x22,0x2c,0x40,0x44,0x4c,0x50,0x40,0xa0,0x1c,0x48,0x40,0x48,0x58,0xa0,0x90,0x10,0xe,0x4,
++0x0,0x40,0x2f,0x21,0x2,0x4,0xef,0x21,0x29,0x25,0x22,0x2a,0x33,0x24,0x8,0x10,0x8,0x1c,0x70,0x10,0x10,0x10,0x5c,0x50,0x50,0x50,0x50,0x7c,0x0,0x80,0x46,0x3c,
++0xa,0x7d,0x8,0xb,0xa,0x7a,0x4b,0x42,0x42,0x7b,0x8,0xf,0x8,0x8,0x50,0x20,0x8,0x10,0xa0,0xf8,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0xfe,0x40,0x40,0x40,0x40,
++0x7f,0x1,0x9,0x9,0x9,0x15,0x23,0x41,0x1f,0x11,0x11,0x1f,0x11,0x1,0x7f,0x0,0xfc,0x8,0x20,0xf0,0x0,0x6,0xfc,0x10,0xf8,0x10,0x10,0xf0,0x0,0x10,0xf8,0x4,
++0x1,0x21,0x19,0x9,0x1,0x1,0x7f,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x7f,0x0,0x0,0x8,0x18,0x20,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x12,0x11,0xfd,0x10,0x17,0x18,0x30,0xd0,0x13,0x10,0x10,0x10,0x57,0x20,0x40,0x40,0x44,0x4c,0x50,0x44,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x11,0xd,0x5,0x7f,0x40,0x8f,0x8,0x8,0x8,0xf,0x4,0x4,0x4,0x8,0x30,0x0,0x10,0x30,0x40,0xfe,0x22,0xf4,0x20,0x20,0x20,0xe0,0x80,0x80,0x84,0x84,0x7c,
++0x8,0x8,0xff,0x8,0x47,0x30,0x10,0x81,0x47,0x11,0x21,0xe2,0x22,0x24,0x29,0x20,0x20,0x24,0xfe,0x20,0xf0,0x40,0x80,0x4,0xfe,0x24,0x24,0x44,0x44,0x84,0x28,0x10,
++0x10,0x10,0x12,0x11,0xfd,0x10,0x37,0x38,0x54,0x50,0x93,0x10,0x10,0x10,0x17,0x10,0x40,0x40,0x44,0x4c,0x50,0x44,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x0,0x7f,0x2,0x2,0x2,0x2,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x50,0x20,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x15,0x19,0x31,0xd1,0x10,0x14,0x14,0x17,0x50,0x20,0x40,0x88,0xfc,0x8,0x48,0x8,0x28,0x10,0x0,0xfe,0x82,0x92,0x92,0xf2,0xa,0x4,
++0x4,0x7f,0x44,0x46,0x45,0x45,0x7c,0x13,0x12,0x5e,0x53,0x52,0x5e,0xf2,0x43,0x2,0x1c,0xe0,0x48,0x2c,0x28,0x10,0x44,0x9e,0x4,0x4,0x9c,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x1f,0x22,0x22,0x64,0xaf,0x21,0x21,0x2f,0x21,0x21,0x21,0x2f,0x24,0x20,0x4,0x44,0xe4,0x4,0x94,0x54,0xd4,0x14,0x14,0xd4,0x14,0x14,0xc4,0x4,0x14,0x8,
++0x1,0x2,0xf,0x8,0xa,0x9,0x8,0x8,0xf,0x8,0x2,0x22,0x22,0x3f,0x20,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x60,0x4,0xfe,0x4,0x4,0x24,0x24,0xe4,0x34,0x8,
++0x20,0x10,0x13,0x0,0xfd,0x8,0x13,0x38,0x54,0x93,0x11,0x11,0x12,0x14,0x18,0x10,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x80,0x88,0xfe,0x8,0x48,0x28,0x8,0x28,0x10,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x1f,0x0,0x0,0xff,0x0,0x8,0x4,0x0,0x0,0x10,0xf8,0x10,0x10,0xf0,0x14,0x4,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0xa0,0x40,
++0x1,0x7f,0x8,0x10,0x22,0x41,0x7f,0x8,0xa,0x7f,0x8,0x8,0x8,0xf,0xf8,0x0,0x4,0x84,0x4,0x24,0x24,0x24,0xa4,0xa4,0x24,0x24,0x24,0x24,0x4,0x84,0x14,0x8,
++0x8,0x1f,0xf0,0x12,0x11,0xfd,0x10,0x3b,0x36,0x52,0x53,0x92,0x12,0x12,0x13,0x12,0x1c,0xe0,0x48,0x4c,0x48,0x10,0x44,0x9e,0x4,0x4,0x9c,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x10,0x5b,0x56,0x53,0x92,0x13,0x12,0x10,0x1f,0x10,0x10,0x10,0x10,0x48,0x7c,0x40,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x2,0x41,0x37,0x10,0x1,0x3,0xf2,0x13,0x12,0x12,0x13,0x12,0x12,0x2b,0x44,0x3,0x8,0x10,0xfc,0x80,0x8,0xfc,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x6,0xfc,
++0x1,0x41,0x33,0x12,0x4,0x10,0x21,0xc6,0x40,0x1f,0x12,0x12,0x12,0x12,0xff,0x0,0x0,0x8,0xfc,0x48,0x40,0xa0,0x10,0xe,0x4,0xf0,0x90,0x90,0x90,0x94,0xfe,0x0,
++0x10,0x10,0x2f,0x20,0x47,0x94,0x14,0x27,0x60,0xaf,0x20,0x21,0x25,0x25,0x28,0x20,0x40,0x44,0xfe,0x40,0xfc,0xa4,0xa4,0xfc,0x0,0xfe,0x40,0x20,0x24,0xa,0xfa,0x0,
++0x8,0xb,0x12,0x13,0x22,0x4b,0x88,0x17,0x30,0x50,0x9f,0x12,0x11,0x11,0x10,0x10,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x10,0x14,0xfe,0x10,0x10,0x10,0x50,0x20,
++0x10,0x10,0x22,0x7f,0x42,0x43,0x42,0x42,0x7e,0x42,0x42,0x42,0x42,0x7e,0x42,0x0,0x40,0x40,0x44,0x7e,0x84,0x4,0x4,0x84,0x64,0x24,0x4,0x4,0x4,0x4,0x28,0x10,
++0x8,0x7f,0x48,0x4a,0x49,0x49,0x7b,0x14,0x13,0x5a,0x52,0x53,0x5d,0xe0,0x4f,0x0,0x20,0xa8,0xb0,0xa4,0x18,0x10,0xf8,0x6,0xf8,0x8,0x8,0xf8,0x10,0xa4,0xfe,0x0,
++0x10,0x10,0x17,0x10,0x54,0x58,0x50,0x90,0x10,0x10,0x10,0x28,0x24,0x44,0x80,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x3e,0x2,0x12,0xc,0x8,0x1f,0x20,0xcf,0x8,0x8,0xf,0x4,0x2,0x7f,0x0,0x80,0x90,0xa0,0x48,0x50,0x20,0xf0,0x2e,0xf4,0x20,0x20,0xe0,0x40,0x88,0xfc,0x0,
++0x10,0x14,0x3e,0x49,0x5,0x1,0x3f,0x1,0xff,0x0,0x0,0x3f,0x8,0x4,0x1,0x0,0x40,0x48,0xfc,0x20,0x10,0x0,0xf8,0x0,0xfe,0x40,0x50,0xf8,0x40,0x40,0x40,0x80,
++0x8,0x7f,0x48,0x4a,0x49,0x79,0x4b,0x4c,0x4b,0x7a,0x4a,0x4b,0x49,0x78,0x4f,0x0,0x20,0xa8,0xb0,0xa4,0x18,0x8,0xfe,0x4,0xf8,0x8,0x8,0xf8,0x10,0xa4,0xfe,0x0,
++0x3e,0x12,0xc,0xf,0x10,0x2f,0xc8,0xf,0x4,0x7f,0x0,0x7,0x4,0x4,0x8,0x30,0x90,0xa0,0x48,0xf0,0x10,0xee,0x24,0xe0,0x48,0xfc,0x40,0xe0,0x40,0x44,0x44,0x3c,
++0x0,0xfe,0x2,0x42,0x24,0x24,0x18,0x8,0x18,0x14,0x24,0x22,0x42,0x80,0x0,0x0,0x0,0xfc,0x84,0x88,0x88,0x90,0xa0,0x98,0x84,0x84,0x84,0xc4,0xa8,0x90,0x80,0x80,
++0x23,0x22,0x22,0x23,0xfa,0x22,0x23,0x20,0x2f,0x20,0x3a,0xe2,0x42,0x5,0x8,0x10,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x40,0x50,0x78,0x40,0x40,0xc6,0x7c,
++0x10,0x10,0x17,0x24,0x24,0x64,0xa4,0x27,0x24,0x24,0x24,0x24,0x25,0x26,0x24,0x20,0x8,0x3c,0xc0,0x40,0x40,0x40,0x44,0xfe,0x20,0x20,0x20,0x90,0x12,0x4a,0x2a,0x4,
++0x0,0x40,0x2f,0x22,0x1,0x87,0x44,0x4d,0x14,0x25,0xe5,0x25,0x25,0x25,0x24,0x24,0x80,0x44,0xfe,0x8,0x14,0xfe,0x44,0xf4,0x44,0xf4,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x0,0x40,0x20,0x2f,0x8,0x8,0xe8,0x2f,0x28,0x28,0x28,0x2f,0x28,0x50,0x8f,0x0,0x80,0x80,0x88,0xfc,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0xf8,0x8,0x6,0xfc,0x0,
++0x2,0x7,0x78,0x8,0x8,0xa,0xff,0x8,0xa,0x3f,0x22,0x22,0x22,0x3e,0x22,0x1,0x20,0x20,0x20,0x44,0x7e,0x88,0x48,0x48,0x48,0x48,0x50,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x12,0x1f,0x28,0x45,0x81,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x20,0x40,0x44,0x7e,0xa0,0x10,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x44,0x28,0x10,0x29,0x49,0x89,0xa,0x18,0x28,0x48,0x88,0x9,0x9,0x52,0x24,0x40,0x40,0x40,0x44,0x4c,0x50,0x60,0x40,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x1,0x41,0x31,0x13,0x84,0x60,0x20,0x9,0x12,0x24,0xeb,0x21,0x22,0x24,0x21,0x20,0x0,0x0,0xf8,0x10,0xa0,0x40,0xa0,0x10,0x4e,0x40,0xfc,0x50,0x4c,0x44,0x40,0x80,
++0x0,0x7e,0x2,0x22,0x1a,0x12,0x23,0x8,0x1f,0x30,0x5f,0x90,0x1f,0x10,0x1f,0x10,0x8,0xfc,0x8,0x48,0x38,0x28,0x48,0x80,0xfc,0x80,0xf8,0x80,0xf8,0x80,0xfe,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x0,0x40,0x24,0xfe,0x88,0x54,0xfe,0x24,0xfc,0x24,0x74,0x54,0x54,0x74,0x4,0x14,0x8,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x16,0x1b,0x32,0xd2,0x12,0x12,0x12,0x13,0x52,0x20,0x8,0x3c,0xe0,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x50,0xd0,0x2a,0xa,0x4,
++0x2,0x1,0x3f,0x20,0x20,0x2f,0x28,0x28,0x2f,0x28,0x28,0x28,0x4a,0x4d,0x88,0x0,0x0,0x4,0xfe,0x0,0x70,0x80,0x80,0x88,0xfc,0x80,0x80,0x40,0x40,0xa4,0x94,0xc,
++0x0,0x20,0x22,0x22,0x22,0x22,0xfb,0x26,0x22,0x22,0x22,0x22,0x3a,0xe2,0x41,0x0,0x40,0x40,0x40,0x40,0x48,0x7c,0xc8,0x48,0x48,0x48,0x68,0x50,0x42,0x2,0xfe,0x0,
++0x4,0x7f,0x4,0x1,0x3f,0x8,0x4,0x7f,0x41,0x81,0x1f,0x11,0x11,0x11,0x1,0x1,0x48,0xfc,0x40,0x10,0xf8,0x20,0x40,0xfe,0x2,0x14,0xf8,0x10,0x10,0x50,0x20,0x0,
++0x10,0x14,0x3e,0x49,0xbf,0x1,0x1,0x3f,0x21,0x21,0x3f,0x3,0x5,0x19,0x61,0x1,0x80,0x88,0xfc,0x20,0xf8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x4,0x4,0x24,0x18,0x0,
++0x2,0x1,0x3f,0x8,0x4,0x7f,0x41,0x81,0x1f,0x11,0x11,0x11,0x11,0x11,0x1,0x1,0x0,0x10,0xf8,0x20,0x40,0xfe,0x2,0x14,0xf8,0x10,0x10,0x10,0x50,0x20,0x0,0x0,
++0x8,0x6,0x2,0x7f,0x1,0x1,0x3f,0x21,0x21,0x3f,0x3,0x5,0x19,0x61,0x1,0x1,0x20,0x60,0x88,0xfc,0x8,0x8,0xf8,0x8,0x0,0xfc,0x4,0x4,0x14,0x8,0x0,0x0,
++0x4,0x42,0x2f,0x20,0x0,0xf,0xe8,0x28,0x2f,0x21,0x22,0x24,0x28,0x50,0x88,0x7,0x10,0x28,0xfc,0x88,0x88,0xf8,0x80,0x88,0xfc,0x88,0x88,0xa8,0x90,0x80,0x86,0xfc,
++0x10,0x10,0x27,0x21,0x48,0xff,0x14,0x28,0x43,0xfa,0x42,0x2,0x1a,0xe2,0x40,0x0,0x80,0x48,0xfc,0x10,0xa0,0xfe,0x42,0x44,0xf8,0x48,0x48,0x48,0x48,0x58,0x40,0x40,
++0x10,0x15,0xfe,0x10,0x7c,0x44,0x7c,0x44,0x7c,0x44,0x7c,0x44,0xfe,0x0,0x28,0x45,0x4,0xfe,0x20,0x44,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0xa4,0x40,0x48,0x86,0x2,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x16,0x1a,0x32,0xd2,0x12,0x12,0x14,0x14,0x58,0x20,0x40,0x20,0x4,0xfe,0x20,0x24,0x3e,0x20,0x24,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x0,0x40,0x37,0x10,0x83,0x62,0x23,0xa,0x13,0x22,0xe3,0x22,0x2f,0x21,0x23,0x24,0x40,0x48,0xfc,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x10,0xc,0x4,
++0x0,0x4,0xfe,0x11,0x11,0x21,0x25,0x3f,0x65,0xa5,0x25,0x27,0x24,0x3c,0x25,0x2,0x50,0x50,0x54,0xfe,0x54,0x54,0x54,0xfc,0x54,0x54,0x54,0xfe,0x0,0x88,0x86,0x2,
++0x2,0x2,0x2,0x3,0x2,0x2,0x3f,0x20,0x20,0x20,0x3f,0x0,0x29,0x24,0x44,0x80,0x0,0x0,0x8,0xfc,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x0,0x10,0xc8,0x44,0x4,
++0x4,0x4,0x4,0x3f,0x24,0x24,0x24,0x3f,0x24,0x24,0x24,0xff,0x0,0x10,0x30,0x40,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0xf8,0x48,0x48,0x48,0xfe,0x0,0x10,0xc,0x4,
++0x10,0x7c,0x11,0x7d,0x12,0xff,0x4,0x7e,0x44,0x7c,0x44,0x7c,0x44,0x45,0x56,0x48,0x40,0x20,0xfe,0x2,0x4,0xfe,0x20,0x20,0xa8,0xbc,0xa0,0xa0,0xa0,0x60,0x26,0x1c,
++0x8,0x8,0x7e,0x8,0xa,0x1c,0x68,0x8,0x2b,0x11,0x1,0x7f,0x1,0x1,0xff,0x0,0x40,0x48,0xfc,0x48,0xc8,0x68,0x58,0x8a,0x6,0x0,0x8,0xfc,0x0,0x4,0xfe,0x0,
++0x2,0x2,0x2,0x7f,0x42,0x42,0x7f,0x42,0x42,0x7f,0x42,0x2,0x2,0x2,0x1,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x0,0x4,0x4,0xfc,0x0,
++0x10,0x10,0x10,0x27,0x24,0x64,0xa4,0x24,0x27,0x24,0x24,0x24,0x24,0x27,0x24,0x20,0x0,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0x44,0xfc,0x4,0x0,
++0x8,0x8,0x1f,0x20,0x40,0x80,0x3f,0x22,0x22,0x3f,0x22,0x22,0x3f,0x20,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x24,0xf4,0x24,0x24,0xe4,0x24,0x24,0xe4,0x24,0x14,0x8,
++0x1,0x0,0x3f,0x20,0x20,0x20,0x20,0x20,0x2f,0x28,0x28,0x28,0x48,0x48,0x8f,0x8,0x0,0x84,0xfe,0x80,0x88,0xfc,0x80,0x88,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x10,0x13,0x5a,0x56,0x52,0x92,0x12,0x12,0x12,0x12,0x14,0x14,0x18,0x10,0x40,0x20,0x4,0xfe,0x20,0x24,0x3e,0x20,0x24,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x10,0x8,0x7f,0x4,0x1f,0x14,0x14,0x18,0x1f,0x10,0x1f,0x1,0xff,0x2,0x4,0x38,0x10,0x20,0xfc,0x50,0xf8,0x50,0x50,0x30,0xf0,0x10,0xf0,0x4,0xfe,0x80,0x78,0x10,
++0x0,0x40,0x30,0x17,0x84,0x68,0x27,0x0,0x12,0x22,0xe2,0x22,0x22,0x25,0x28,0x20,0x80,0x40,0x40,0xfe,0x4,0x8,0xfc,0x40,0x48,0x7c,0x40,0x40,0x40,0x40,0xc6,0x7c,
++0x0,0x7f,0x41,0x41,0x7f,0x40,0x52,0x7f,0x52,0x52,0x7f,0x40,0x52,0x51,0xa0,0x1,0x8,0x7c,0x48,0x48,0x48,0x48,0x86,0x0,0xfc,0x88,0x50,0x20,0x50,0x88,0x86,0x4,
++0x8,0xfd,0x11,0x11,0x21,0x25,0x3f,0x65,0xa5,0x25,0x25,0x25,0x25,0x3d,0x22,0x4,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,0x74,0x54,0x54,0x74,0x4,0x14,0x8,
++0x0,0x8,0x7d,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x7b,0x49,0x0,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x14,0x24,0x44,0x84,0x84,0x4,0x4,0x4,0x28,0x10,
++0x1,0x7f,0x49,0x49,0x7f,0x49,0x49,0x7f,0x41,0x5d,0x55,0x55,0x5d,0x51,0x85,0x2,0x20,0xa8,0x40,0x7e,0xc8,0x48,0x7c,0x48,0x48,0x7c,0x48,0x48,0x48,0x7e,0x40,0x40,
++0x0,0x7,0x44,0x24,0x25,0x4,0xc,0x17,0x24,0xe5,0x25,0x25,0x25,0x25,0x8,0x10,0x4,0xfe,0x44,0x44,0xf4,0x44,0x54,0xfc,0x4,0xf4,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x4,0x8,0x10,0x30,0x0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x48,0x88,0x8,0x8,0x8,0x8,0x8,0x8,0x50,0x20,0x0,
++0x10,0x10,0x10,0x10,0xff,0x12,0x17,0x1a,0x33,0xd2,0x10,0x1f,0x10,0x10,0x50,0x20,0x48,0x7c,0x40,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x0,0x1f,0x10,0x10,0x10,0x1f,0x11,0x1,0x3f,0x21,0x21,0x21,0x21,0x21,0x1,0x1,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x8,0xfc,0x8,0x8,0x8,0x28,0x10,0x0,0x0,
++0x10,0x10,0x10,0x1c,0x20,0x21,0x7c,0x90,0x10,0xfc,0x10,0x12,0x14,0x18,0x10,0x0,0x40,0x40,0x44,0x7e,0x84,0x4,0x4,0x84,0x64,0x24,0x4,0x4,0x4,0x44,0x28,0x10,
++0x40,0x27,0x24,0x4,0x5,0xe4,0x24,0x27,0x24,0x25,0x25,0x2d,0x35,0x25,0x8,0x10,0x4,0xfe,0x44,0x44,0xf4,0x44,0x54,0xfc,0x4,0xf4,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x4,0x7e,0x45,0x45,0x45,0x7d,0x52,0x10,0x13,0x5c,0x50,0x50,0x5e,0xf0,0x41,0x2,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x50,0x50,0x88,0x8c,0x6,0x4,
++0x4,0x8,0x34,0x3,0x6,0x1a,0x67,0x8c,0x13,0x6,0x19,0x2,0xd,0x1,0x6,0x38,0x40,0x20,0x58,0x80,0xc0,0x30,0xce,0x44,0x80,0x80,0xf0,0x20,0x40,0x80,0x0,0x0,
++0x0,0x9,0xfd,0x13,0x11,0x21,0x25,0x3f,0x65,0xa4,0x27,0x24,0x24,0x3d,0x22,0x0,0x50,0x50,0x54,0xfe,0x50,0x50,0x70,0x0,0xfc,0x20,0xfe,0x70,0xa8,0x26,0x24,0x20,
++0x10,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x50,0x17,0x1c,0xf4,0x41,0x2,0x0,0x50,0x50,0x54,0xfe,0x50,0x50,0x70,0x0,0xfc,0x20,0xfe,0x70,0xa8,0x26,0x24,0x20,
++0x0,0x42,0x32,0x13,0x2,0x4,0xf0,0x17,0x10,0x10,0x10,0x11,0x12,0x28,0x44,0x3,0x40,0x40,0x50,0xf8,0x40,0x40,0x48,0xfc,0x40,0x80,0xa0,0x18,0x8,0x0,0x6,0xfc,
++0x0,0x41,0x31,0x17,0x1,0x1,0xf1,0x11,0x11,0x10,0x17,0x10,0x14,0x19,0x12,0x0,0x50,0x50,0x54,0xfe,0x50,0x50,0x70,0x0,0xfc,0x20,0xfe,0x70,0xa8,0x26,0x24,0x20,
++0x1f,0x4,0x3,0x3e,0x14,0x8,0x76,0x0,0x7f,0x40,0x9f,0x10,0x1e,0x11,0x10,0xff,0xf0,0x40,0x80,0xf8,0x50,0x20,0xdc,0x0,0xfe,0x2,0xf4,0x10,0x10,0xf0,0x14,0xfe,
++0x0,0x0,0x7f,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x78,0x4f,0x48,0x48,0x78,0x48,0x48,0x48,0x78,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x8,0x7f,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x10,0x13,0x1c,0x20,0x20,0x7c,0x90,0x10,0xfc,0x10,0x12,0x14,0x18,0x10,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0xb,0xfc,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x50,0x20,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x40,0x58,0x84,0x2,
++0xf,0x8,0xf,0x28,0x2f,0x28,0x2f,0x20,0x3e,0x2,0xfe,0x12,0x12,0x22,0xc2,0x2,0xe0,0x20,0xe0,0x28,0xe8,0x28,0xe8,0x8,0xf8,0x80,0xfc,0x84,0x84,0x84,0x84,0x80,
++0x10,0x10,0x10,0x1d,0x21,0x22,0x7d,0x90,0x10,0x7d,0x11,0x11,0x15,0x1a,0x14,0x8,0x40,0x20,0x20,0xfe,0x2,0x4,0xfc,0x20,0x28,0x3c,0x20,0x20,0x20,0xa0,0x66,0x3c,
++0x2,0x1,0x7f,0x40,0x80,0x1f,0x1,0x1,0x11,0x11,0x11,0x11,0x11,0x29,0x47,0x80,0x0,0x0,0xfe,0x2,0x24,0xf0,0x0,0x0,0x20,0xf0,0x0,0x0,0x0,0x6,0xfc,0x0,
++0x0,0x40,0x27,0x20,0x0,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x14,0x18,0x10,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x3f,0x1,0x1,0x1,0x3f,0x1,0x1,0x1,0xff,0x2,0x4,0x8,0x10,0x3f,0x0,0xf0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x20,0x10,0xf8,0x8,
++0x2,0x2,0x2,0xff,0x4,0x9,0x9,0x11,0x3f,0x1,0x9,0x9,0x11,0x21,0x45,0x2,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x10,0xf8,0x0,0x40,0x20,0x10,0x18,0x8,0x0,
++0x4,0x4,0x7,0x8,0x14,0x22,0x1,0x2,0xc,0x30,0xc6,0x1,0x0,0x6,0x1,0x0,0x0,0x0,0xf0,0x20,0x40,0x80,0x0,0xc0,0x30,0xe,0x4,0x80,0x0,0x0,0x80,0x40,
++0x4,0xff,0x4,0x3f,0x1,0xff,0x1,0x1f,0x11,0x1f,0x11,0x1f,0x1,0x3f,0x1,0x7f,0x44,0xfe,0x40,0xf8,0x0,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0xf8,0x0,0xfc,
++0x21,0x2f,0x21,0x27,0xb0,0xaf,0xa0,0x27,0x24,0x27,0x24,0x27,0x20,0x27,0x20,0x2f,0x14,0xfe,0x10,0xfc,0x40,0xfe,0x44,0xfe,0x44,0xfc,0x44,0xfc,0x40,0xfc,0x40,0xfe,
++0x0,0x8,0x7c,0x0,0x5,0xfe,0x10,0x10,0x20,0x24,0x42,0xfe,0x41,0x1,0x2,0x4,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x4,0x4,0x28,0x10,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x38,0x35,0x53,0x50,0x91,0x11,0x12,0x14,0x10,0x10,0x40,0x40,0x48,0xfc,0x80,0x80,0xa0,0x24,0xfe,0x20,0x28,0x24,0x22,0x22,0xa0,0x40,
++0x8,0xb,0xa,0x12,0x13,0x32,0x52,0x92,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x4,0xfe,0x4,0x14,0xfc,0x4,0x14,0xfc,0x94,0x94,0x94,0xf4,0x94,0x4,0x14,0x8,
++0x10,0x13,0x12,0x12,0x5b,0x56,0x52,0x92,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x4,0xfe,0x4,0x14,0xfc,0x4,0x14,0xfc,0x94,0x94,0x94,0xf4,0x94,0x4,0x14,0x8,
++0x0,0x40,0x23,0x10,0x10,0x1,0x1,0xb,0x10,0x60,0x20,0x21,0x22,0x24,0x20,0x0,0x40,0x48,0xfc,0x80,0x80,0x20,0x24,0xfe,0x20,0xa0,0xa8,0x24,0x22,0x22,0xa0,0x40,
++0x0,0x43,0x32,0x12,0x83,0x42,0x4a,0x12,0x12,0x22,0xe2,0x22,0x22,0x22,0x22,0x22,0x4,0xfe,0x4,0x14,0xfc,0x4,0x14,0xfc,0x94,0x94,0x94,0xf4,0x94,0x4,0x14,0x8,
++0x1,0xa,0x37,0x24,0x24,0x27,0x24,0x2c,0x37,0x20,0x4,0x4,0x4,0x8,0x10,0x60,0x0,0x8,0xdc,0x48,0x48,0xc8,0x48,0x48,0xd8,0x8,0x40,0x42,0x42,0x42,0x3e,0x0,
++0x10,0x11,0x10,0x10,0xfc,0x11,0x14,0x18,0x30,0xd0,0x17,0x10,0x10,0x10,0x50,0x20,0x10,0x10,0xd0,0x50,0x10,0x10,0xd0,0x50,0x14,0x1e,0xf0,0x10,0x10,0x10,0x10,0x10,
++0x0,0x8,0x6,0x2,0x10,0xc,0x4,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0x7e,0xc0,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x78,0x48,0x53,0x50,0x60,0x57,0x48,0x4a,0x4a,0x6a,0x52,0x45,0x44,0x48,0x40,0x40,0x40,0x50,0xf8,0x40,0x48,0xfc,0x40,0x50,0x78,0x40,0x40,0x40,0xc6,0x3c,0x0,
++0x0,0x7f,0x0,0x0,0x1f,0x10,0x10,0x10,0x10,0x1f,0x0,0x8,0x4,0x2,0xff,0x0,0x8,0xfc,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x0,0x20,0x40,0x84,0xfe,0x0,
++0x0,0x47,0x20,0x20,0x3,0x2,0xf2,0x13,0x10,0x11,0x10,0x17,0x10,0x28,0x47,0x0,0x8,0xfc,0x0,0x8,0xfc,0x8,0x8,0xf8,0x0,0x10,0xa0,0xfc,0x0,0x6,0xfc,0x0,
++0x1,0x0,0x1f,0x10,0x97,0x50,0x53,0x12,0x32,0x52,0xd3,0x10,0x21,0x20,0x4f,0x0,0x0,0x84,0xfe,0x0,0xfc,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x10,0xa4,0xfe,0x0,
++0x10,0x12,0x7f,0x12,0x14,0xff,0x8,0x12,0x3f,0x62,0xa2,0x3e,0x22,0x22,0x3e,0x22,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0xe,0x8,0xff,0x28,0x2a,0x49,0x58,0x9f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x0,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0xf4,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x1,0x3f,0x1,0x1f,0x1,0x7f,0x0,0x1f,0x12,0x11,0xff,0x22,0x21,0x3f,0x0,0x0,0x10,0xf8,0x0,0xf0,0x0,0xfc,0x0,0xf0,0x10,0x14,0xfe,0x10,0x10,0xf8,0x10,0x60,
++0x10,0x10,0x51,0x50,0x7c,0x53,0x90,0x14,0x19,0x30,0xd7,0x10,0x10,0x10,0x10,0x13,0x20,0x28,0xfc,0x20,0x20,0xfe,0x92,0x54,0x10,0x94,0xfe,0x20,0x20,0x50,0x8c,0x4,
++0x0,0x44,0x28,0x10,0x2b,0x4a,0x8a,0x1a,0x2a,0x4b,0xa,0x8,0x8,0x8,0x57,0x20,0x40,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0x48,0xf8,0x48,0x40,0x48,0x78,0x84,0x4,
++0x0,0x20,0x13,0x10,0x0,0x7,0xf0,0x10,0x11,0x10,0x17,0x10,0x14,0x18,0x10,0x3,0x20,0x28,0xfc,0x20,0x20,0xfe,0x92,0x54,0x10,0x94,0xfe,0x20,0x20,0x50,0x8c,0x4,
++0x10,0x10,0x10,0x11,0xfc,0x10,0x17,0x10,0x10,0x11,0x1e,0xe4,0x48,0x10,0x0,0x0,0x40,0x40,0x44,0xf8,0x48,0x50,0xfe,0x48,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,
++0x8,0x7c,0x48,0x49,0x48,0x78,0x4f,0x48,0x48,0x79,0x4a,0x4c,0x48,0x78,0x48,0x0,0x40,0x40,0x44,0xf8,0x48,0x50,0xfe,0x48,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,
++0x4,0x7e,0x44,0x55,0x54,0x54,0x57,0x54,0x54,0x55,0x56,0x54,0x10,0x28,0x44,0x84,0x40,0x40,0x44,0xf8,0x48,0x50,0xfe,0x48,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,
++0x10,0x10,0x10,0x14,0xfe,0x10,0x31,0x38,0x54,0x54,0x90,0x10,0x10,0x10,0x13,0x10,0x20,0x20,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x20,0x20,0x3b,0x42,0x82,0x7b,0x22,0x22,0xfa,0x23,0x22,0x2a,0x34,0x24,0x8,0x3,0x40,0x24,0xfe,0x50,0x50,0xfc,0x50,0x70,0x0,0xf8,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x4,0x3e,0x24,0x24,0x24,0x3c,0x25,0x24,0x24,0x3c,0x24,0x24,0x24,0x27,0x54,0x88,0x20,0x20,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x1,0x0,0x3f,0x22,0x22,0x3f,0x22,0x23,0x20,0x2f,0x22,0x21,0x20,0x43,0x8c,0x30,0x0,0x84,0xfe,0x20,0x28,0xfc,0x20,0xe0,0x0,0xf0,0x20,0x40,0x80,0x60,0x1e,0x4,
++0x0,0x40,0x37,0x14,0x84,0x67,0x24,0x4,0x14,0x25,0xe4,0x24,0x28,0x28,0x31,0x26,0x80,0x44,0xfe,0x90,0x94,0xfe,0x90,0xf0,0x0,0xf8,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x10,0x10,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x2a,0x46,0x84,0x8,0x40,0x20,0x20,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x20,0x11,0x11,0xfd,0x1,0x48,0x4b,0x48,0x49,0x49,0x11,0x1d,0xe1,0x41,0x1,0x20,0x20,0x24,0x24,0x24,0xfc,0x0,0xfe,0x44,0xfe,0x54,0x54,0x54,0x54,0x4,0xc,
++0x20,0x20,0x2b,0x3c,0x50,0x91,0x11,0x15,0xff,0x11,0x10,0x11,0x28,0x24,0x47,0x80,0x0,0x8,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x8,0x90,0x94,0xfe,0x0,
++0x21,0x26,0x3c,0x44,0x87,0x7c,0x24,0x27,0xfd,0x24,0x24,0x27,0x2c,0x34,0x25,0x6,0x88,0x7c,0x48,0x48,0x48,0x48,0x86,0x0,0xfc,0x88,0x50,0x20,0x50,0x88,0xe,0x4,
++0x0,0x6,0x38,0x20,0x24,0x3e,0x21,0x24,0x3e,0x20,0x20,0x3e,0xe0,0x20,0x20,0x23,0x8,0xfc,0x88,0x88,0x88,0x88,0x6,0x0,0xf8,0x88,0x90,0x50,0x20,0x50,0x8e,0x4,
++0x4,0x44,0x64,0x55,0x4e,0x44,0x7f,0x44,0x4e,0x55,0x64,0x44,0x44,0x7f,0x40,0x1,0x0,0xc,0xf0,0x40,0x40,0x44,0x7e,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x88,0x8,
++0x21,0x26,0x24,0x44,0x4f,0xf4,0x24,0x47,0x45,0xfc,0x4,0xf,0x34,0xc4,0x5,0x6,0x88,0x7c,0x48,0x48,0x48,0x48,0x86,0x0,0xfc,0x88,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x10,0x10,0x10,0x11,0xfd,0x13,0x15,0x11,0x11,0x1d,0xe1,0x41,0x1,0x1,0x1,0x80,0xa0,0x90,0x84,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x10,0x14,0xfe,0x0,
++0x10,0x8,0x4,0x1f,0x10,0x10,0x10,0x10,0x1f,0x14,0x4,0x4,0x8,0x8,0x10,0x60,0x10,0x20,0x50,0xf8,0x10,0x10,0x10,0x10,0xf0,0x50,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x7c,0x44,0x48,0x48,0x50,0x48,0x48,0x44,0x44,0x44,0x69,0x51,0x42,0x44,0x48,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xa0,0xa0,0xa0,0x10,0x10,0x8,0x6,0x4,
++0x0,0x0,0x0,0xfc,0x7,0x4,0x48,0x29,0x10,0x10,0x28,0x24,0x44,0x80,0x0,0x0,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x90,0x90,0x10,0x10,0x10,0x10,0x50,0x20,
++0x24,0x22,0x3f,0x20,0x2f,0xf8,0x2f,0x20,0x2f,0x21,0x22,0x3f,0xe2,0x42,0xa,0x4,0x20,0xa0,0xe0,0x24,0xbe,0xc4,0xa4,0x24,0xa4,0x28,0x28,0x90,0x10,0x28,0x46,0x84,
++0x0,0x8,0x7c,0x4f,0x48,0x48,0x4a,0x4a,0x4a,0x4a,0x4b,0x7a,0x48,0x0,0x0,0x0,0x40,0x40,0x48,0xfc,0x40,0x40,0x48,0x48,0x48,0x48,0xf8,0x48,0x40,0x42,0x42,0x3e,
++0x8,0x7f,0x48,0x49,0x49,0x49,0x79,0x51,0x11,0x59,0x50,0x57,0x59,0xe0,0x40,0x0,0x88,0xfe,0x54,0xfe,0x54,0xdc,0x4,0xfc,0x4,0xfc,0x8,0xfe,0x8,0x88,0x28,0x10,
++0x10,0xa,0xff,0x0,0x7e,0x43,0x42,0x7e,0x0,0x7e,0x4,0x8,0xfe,0x8,0x29,0x12,0x40,0x40,0x44,0x7e,0x88,0x8,0x88,0x88,0x88,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x11,0x14,0xfe,0x11,0x55,0x55,0x55,0x55,0x7d,0x55,0x11,0x14,0x18,0x10,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x20,0x50,0x8c,0x4,
++0x0,0x7f,0x41,0x41,0x5f,0x41,0x49,0x49,0x49,0x4f,0x49,0x41,0x40,0x40,0x7f,0x40,0x4,0xfe,0x4,0x24,0xf4,0x4,0x24,0x24,0x24,0xe4,0x4,0x14,0xf4,0x4,0xfc,0x4,
++0x10,0x10,0x1c,0x23,0x20,0x7d,0x91,0x11,0xfd,0x11,0x11,0x10,0x14,0x18,0x10,0x0,0x20,0x20,0x24,0xfe,0x20,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x2f,0x28,0x2f,0x28,0x2f,0x48,0x48,0x8f,0x8,0x78,0x80,0x80,0x84,0xfe,0x80,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x47,0x24,0x24,0x7,0x4,0xe5,0x25,0x25,0x25,0x25,0x29,0x21,0x50,0x8f,0x0,0x38,0xc0,0x40,0x48,0xfc,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x6,0xfc,0x0,
++0x20,0x2f,0x24,0x25,0xfa,0x25,0x28,0x20,0x3f,0xe0,0x28,0x25,0x22,0x25,0xa8,0x50,0x0,0xfc,0xa4,0x28,0x10,0x28,0xc4,0x0,0xbc,0x84,0xc4,0x28,0x10,0x28,0xce,0x84,
++0x0,0x8,0x7c,0x49,0x4a,0x48,0x48,0x49,0x4e,0x48,0x49,0x7a,0x48,0x0,0x1,0x6,0x40,0x40,0xfc,0x8,0x90,0x60,0x40,0xa0,0x7e,0x84,0x88,0x50,0x20,0x40,0x80,0x0,
++0x2,0x2,0x7,0x8,0x18,0x25,0x2,0xc,0x71,0x2,0xc,0x12,0x21,0x1,0xe,0x70,0x0,0x0,0xf0,0x20,0x40,0x80,0x80,0x80,0xfc,0x8,0x10,0x20,0xc0,0x0,0x0,0x0,
++0x1,0x1,0x7f,0x2,0x4,0x8,0x30,0xc0,0x0,0x7f,0x4,0x2,0x2,0x0,0x0,0x0,0x0,0x8,0xfc,0x80,0x40,0x30,0xe,0x24,0x20,0xfc,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x16,0x10,0x1f,0x10,0x1c,0xf1,0x42,0x4,0x8,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x4c,0x40,0xfe,0xc0,0xe0,0x50,0x48,0x46,0x44,0x40,
++0x8,0x10,0x3c,0x24,0x3c,0x24,0x3d,0x24,0xff,0x14,0x14,0x24,0x24,0x45,0x96,0x8,0x8,0xfc,0x88,0x88,0x88,0x88,0x26,0x24,0xfe,0x60,0x70,0xb0,0xa8,0x26,0x24,0x20,
++0x0,0xf,0x8,0x8,0x8,0x8,0x31,0x1,0xff,0x3,0x3,0x5,0x9,0x11,0x61,0x1,0x20,0xf0,0x20,0x20,0x20,0x20,0x1c,0x0,0xfe,0x0,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x8,0x7d,0x49,0x49,0x49,0x49,0x7a,0x10,0x17,0x58,0x50,0x51,0x5d,0xe2,0x44,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xc,0x40,0xfe,0xc0,0xe0,0x50,0x4e,0x44,0x40,0x40,
++0x8,0x10,0x3c,0x25,0x35,0x2e,0x24,0xfc,0x24,0x34,0x2c,0x24,0x24,0x44,0x94,0x8,0x40,0x20,0x0,0xfe,0x2,0x4,0x80,0x88,0x90,0xa0,0xc0,0x80,0x84,0x84,0x7c,0x0,
++0x2,0x3f,0x22,0x22,0x22,0x22,0x49,0x9,0xff,0x8,0x1c,0x2b,0x49,0x88,0x8,0x8,0x4,0x4,0x4,0x24,0x24,0x24,0xa4,0x24,0xa4,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x10,0x10,0x17,0x11,0x59,0x56,0x53,0x94,0x19,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x80,0x84,0xfe,0x0,0xfc,0x20,0xfe,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x4,0x14,0x8,
++0x0,0x7b,0x48,0x49,0x52,0x4c,0x48,0x68,0x50,0x41,0x41,0x3f,0x1,0x1,0xff,0x0,0x44,0xfe,0x88,0xfc,0x88,0xf8,0x88,0xf8,0x88,0x98,0x0,0xf8,0x0,0x4,0xfe,0x0,
++0x10,0x10,0x13,0x10,0x7c,0x57,0x54,0x54,0x54,0x57,0x7c,0x50,0x14,0x1c,0xf2,0x41,0x10,0xd4,0x92,0x90,0x90,0xfe,0x90,0x90,0xd4,0x98,0x90,0xa8,0xc8,0x8a,0x86,0x2,
++0x10,0x10,0x13,0x54,0x54,0x57,0x54,0x54,0x54,0x57,0x54,0x54,0x5c,0x74,0x42,0x1,0x10,0xd0,0x94,0x92,0x90,0xfe,0x90,0x90,0xd4,0x98,0x90,0xa8,0xc8,0x8a,0x86,0x2,
++0x8,0x38,0xec,0x2a,0x28,0xfe,0x28,0x28,0x38,0xea,0x2c,0x28,0x35,0x24,0xa5,0x42,0x20,0x48,0xfc,0x88,0xa8,0x88,0xa8,0x90,0x80,0xfe,0x2,0x12,0xfa,0x2,0x14,0x8,
++0x8,0x9,0xf,0x11,0x11,0x3f,0x51,0x91,0x11,0x13,0x1d,0x11,0x11,0x11,0x15,0x12,0x20,0xa8,0x24,0x20,0x24,0xfe,0x20,0x20,0xa4,0x18,0x10,0x30,0x48,0x8a,0x6,0x2,
++0x10,0x8,0x7f,0x41,0x92,0x1e,0x22,0x54,0x8,0x14,0x22,0x7f,0xa2,0x22,0x3e,0x20,0x4,0xfe,0x10,0x24,0x7e,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x10,0x28,0x46,0x82,
++0x1,0x41,0x31,0x11,0x1,0x3,0xf5,0x19,0x11,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x20,0x20,0x20,0x24,0x2c,0x30,0x20,0x60,0xa0,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x27,0x24,0x24,0x24,0x45,0x2a,0x10,0x28,0x44,0x86,0x1,0x10,0xd0,0x94,0x92,0x90,0xfe,0x90,0x90,0xd4,0x98,0x90,0xa8,0xc8,0x8a,0x86,0x2,
++0x0,0x7f,0x4,0x24,0x14,0x14,0x4,0x4,0xff,0x0,0x2a,0x29,0x28,0x48,0x7,0x0,0x8,0xfc,0x40,0x48,0x58,0x60,0x40,0x44,0xfe,0x0,0x10,0x88,0xa4,0x24,0xe0,0x0,
++0x0,0x3f,0x20,0x20,0x20,0x27,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x43,0x80,0x8,0xfc,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0xa0,0x40,0x0,0x4,0x4,0xfc,0x0,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x16,0x1a,0x32,0xd2,0x12,0x12,0x12,0x14,0x58,0x20,0x0,0x4,0xfe,0x0,0x8,0xfc,0x88,0x88,0x88,0xa8,0x90,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x47,0x24,0x27,0x4,0x7,0xe2,0x25,0x2c,0x34,0x25,0x24,0x27,0x50,0x8f,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x8,0xfc,0x88,0x88,0x48,0x28,0xd0,0x6,0xfc,0x0,
++0x0,0x77,0x55,0x55,0x77,0x0,0x7f,0x0,0xff,0x10,0x22,0x3f,0x2,0x2,0x12,0xc,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0xc4,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x20,0x20,0x23,0x3c,0x24,0x4b,0x40,0xa0,0x20,0x21,0x22,0x20,0x28,0x30,0x22,0x1,0x10,0xd0,0x94,0x92,0x90,0xfe,0x90,0x90,0xd4,0x98,0x90,0xa8,0xc8,0x8a,0x86,0x2,
++0x0,0x3f,0x21,0x21,0x2f,0x21,0x22,0x24,0x28,0x3f,0x20,0x2,0x51,0x50,0x90,0xf,0x8,0xfc,0x8,0x48,0xe8,0x8,0x88,0x68,0x28,0xf8,0x8,0x0,0x84,0x92,0x12,0xf0,
++0x0,0xff,0x2,0x2,0x4,0x7f,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x40,0x4,0xfe,0x0,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x54,0x8,
++0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x42,0x3e,0x0,
++0x0,0x7f,0x8,0x8,0xf,0x8,0x8,0xf,0x8,0x8,0x8,0xff,0x0,0x0,0x0,0x0,0x8,0xfc,0x20,0x20,0xe0,0x20,0x20,0xe0,0x20,0x24,0x3e,0xe0,0x20,0x20,0x20,0x20,
++0x8,0xc,0x8,0x1f,0x20,0x41,0x81,0x1,0x9,0x9,0x11,0x11,0x21,0x1,0x5,0x2,0x0,0x0,0x8,0xfc,0x8,0x10,0x0,0x0,0x40,0x20,0x10,0x18,0x8,0x0,0x0,0x0,
++0x20,0x23,0x21,0x3d,0x25,0x49,0x41,0xa1,0x21,0x21,0x27,0x20,0x28,0x30,0x20,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0xfe,0x8,0x8,0x8,0x8,0x8,
++0x0,0x47,0x32,0x12,0x83,0x62,0x22,0xb,0x12,0x22,0xe2,0x2f,0x20,0x20,0x20,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x8,0xfe,0x8,0x8,0x8,0x8,
++0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,
++0x0,0x0,0xff,0x0,0x3f,0x0,0x7f,0x0,0x3f,0x20,0x24,0x24,0x24,0xa,0x11,0x60,0x28,0x24,0xfe,0x20,0xa0,0x20,0xe0,0x20,0xa0,0x90,0x90,0x90,0x92,0xa,0x8a,0x84,
++0x1,0x11,0x11,0x21,0x7f,0x2,0x2,0x7,0x6,0xa,0x9,0x10,0x21,0x42,0x8c,0x30,0x0,0x20,0x10,0x4,0xfe,0x0,0x0,0xf0,0x10,0x20,0x40,0x80,0x40,0x30,0xe,0x4,
++0x0,0x7f,0x44,0x44,0x7f,0x20,0x18,0x8,0x0,0xf0,0x10,0x12,0x14,0x18,0x10,0x0,0x4,0xfe,0x44,0x44,0xfc,0x0,0x8,0x88,0x88,0x88,0x88,0x88,0x88,0x8,0x28,0x10,
++0x10,0x1f,0x28,0x45,0x0,0x8,0x8,0x10,0x37,0x50,0x90,0x10,0x10,0x10,0x13,0x10,0x40,0x7c,0xa0,0x10,0x80,0x90,0x88,0xfe,0x80,0x50,0x50,0x20,0x60,0x92,0xa,0x6,
++0x8,0x8,0x8,0x10,0x10,0x30,0x57,0x90,0x10,0x10,0x10,0x10,0x10,0x11,0x16,0x10,0x80,0xa0,0x98,0x88,0x80,0xfc,0x80,0x88,0x88,0x50,0x60,0x40,0xa0,0x12,0xa,0x6,
++0x0,0x0,0x7f,0x4,0x3,0x1,0x3f,0x0,0x0,0x1,0x6,0x8,0x30,0x48,0x7,0x0,0x10,0x78,0x80,0x0,0x0,0x0,0xf8,0x10,0x60,0x80,0x0,0x0,0x0,0x6,0xfc,0x0,
++0x20,0x17,0x10,0x45,0x45,0x49,0x49,0x5f,0x69,0x48,0x48,0x49,0x4a,0x48,0x48,0x40,0x4,0xfe,0x4,0x44,0x24,0x4,0xf4,0x4,0x24,0xc4,0x84,0x44,0x54,0x34,0x4,0xc,
++0x0,0x40,0x30,0x10,0x87,0x60,0x20,0x8,0x17,0x20,0xe0,0x20,0x21,0x22,0x27,0x20,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0x80,0x10,0x8,0xfc,0x4,
++0x0,0x10,0xf8,0x20,0x27,0x20,0x20,0xf8,0x2f,0x20,0x20,0x20,0x39,0xe2,0x47,0x0,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0x80,0x8,0x4,0xfe,0x2,
++0x8,0xff,0x8,0x4f,0x24,0x22,0x8f,0x62,0x2a,0x14,0x2f,0xe4,0x27,0x24,0x27,0x24,0x24,0xfe,0x20,0xf8,0x90,0xa0,0xfc,0xa0,0x90,0x8e,0xf4,0x90,0xf0,0x90,0xf0,0x10,
++0x10,0x10,0x14,0x7e,0x54,0x54,0x54,0x54,0x54,0x54,0x5c,0x54,0x11,0x11,0x12,0x14,0x8,0xfc,0x88,0x88,0x88,0xc8,0xa8,0xa8,0x88,0x88,0x88,0x88,0xa,0xa,0x6,0x0,
++0x0,0x3f,0x11,0xd,0x5,0xff,0x9,0x11,0x3f,0xd1,0x11,0x1f,0x11,0x11,0x1f,0x10,0x78,0x80,0x10,0x30,0x44,0xfe,0x20,0x10,0xfe,0x14,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0xe,0xf1,0x54,0x38,0xfe,0x11,0x54,0x92,0x7c,0x54,0x55,0x7c,0x54,0x54,0x7d,0x44,0x4,0xde,0x44,0x44,0x44,0x54,0xcc,0x44,0x44,0xcc,0x54,0x44,0x44,0x44,0x54,0x88,
++0x10,0x14,0x12,0xfd,0x12,0x38,0x56,0x91,0x12,0x14,0x1,0xff,0x2,0x4,0x18,0x60,0x10,0x50,0x94,0x7e,0x90,0x38,0xd4,0x12,0x90,0x50,0x4,0xfe,0x80,0x40,0x3c,0x8,
++0x8,0xfd,0x11,0x11,0x21,0x29,0x7d,0xa9,0x29,0x29,0x29,0x29,0x3a,0x2a,0x4,0x8,0x10,0xf8,0x10,0x10,0x10,0x90,0x50,0x50,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x10,0x11,0x3d,0x21,0x41,0xfd,0x11,0x11,0xfd,0x11,0x11,0x15,0x1a,0x12,0x4,0x8,0x10,0xf8,0x10,0x10,0x10,0x90,0x50,0x50,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x22,0x3f,0x40,0xbe,0x2a,0xff,0x2a,0x3e,0x2,0x1f,0x1,0x6,0x3f,0x9,0x19,0x22,0x20,0x24,0x7e,0xc4,0x28,0x90,0x2e,0xc4,0x20,0xc0,0x80,0x10,0xf8,0x20,0x18,0x8,
++0x0,0xf,0x8,0x8,0x8,0xa,0x9,0x9,0x8,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0xa0,0xa0,0x20,0x20,0x22,0x22,0x22,0x1e,0x0,
++0x10,0x13,0x10,0x14,0x59,0x51,0x51,0x91,0x11,0x11,0x11,0x29,0x24,0x44,0x81,0x2,0x4,0xfe,0x40,0x88,0xfc,0x8,0x28,0x28,0x28,0x48,0x48,0x48,0x80,0x90,0xc,0x4,
++0x0,0x0,0x3f,0x20,0x20,0x3f,0x24,0x24,0x22,0x22,0x21,0x20,0x41,0x42,0x84,0x18,0x10,0x78,0x80,0x0,0x0,0xf8,0x8,0x10,0x10,0x20,0x40,0x80,0x40,0x30,0xe,0x4,
++0x0,0x40,0x33,0x12,0x2,0x2,0xf2,0x12,0x12,0x12,0x12,0x14,0x15,0x28,0x44,0x3,0x8,0x1c,0xe0,0x0,0x0,0xf8,0x8,0x90,0x50,0x20,0x50,0x8c,0x4,0x0,0x6,0xfc,
++0x8,0x8,0xff,0x8,0x20,0x1b,0x4a,0x22,0x22,0xa,0xf2,0x22,0x22,0x22,0x21,0x20,0x20,0x24,0xfe,0x20,0x10,0xf8,0x10,0x10,0x10,0x50,0x20,0x0,0x2,0x2,0xfe,0x0,
++0x4,0x7e,0x45,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x11,0x2a,0x44,0x81,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x4,0x48,0x48,0x50,0x30,0x20,0x50,0x48,0x8e,0x4,
++0x2,0x44,0x29,0x11,0x29,0x49,0x89,0x9,0x19,0x29,0x49,0x89,0x9,0x9,0x50,0x20,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x28,0x10,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x20,0x20,0x21,0x3d,0x25,0x49,0x41,0xa1,0x21,0x21,0x21,0x25,0x29,0x32,0x24,0x9,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x4,0x48,0x48,0x50,0x30,0x20,0x50,0x48,0x8e,0x4,
++0x0,0x40,0x37,0x10,0x80,0x40,0x47,0x10,0x10,0x20,0xe0,0x21,0x26,0x29,0x20,0x20,0x10,0x38,0xc0,0x80,0x40,0x40,0xfc,0x8,0x30,0x40,0x80,0x0,0x0,0x6,0xfc,0x0,
++0x10,0x10,0x10,0x10,0x13,0xfc,0x10,0x10,0x10,0x10,0x1c,0xf0,0x41,0x1,0x2,0x4,0x80,0x40,0x40,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0x8,0x8,0x50,0x20,
++0x8,0x8,0xff,0x8,0xa,0x1,0xff,0x4,0x4,0x7,0x4,0x4,0x8,0x8,0x10,0x20,0x20,0x24,0xfe,0x20,0x20,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xa0,0x40,
++0x4,0x3,0x1,0x0,0xff,0x4,0x4,0x7,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x0,0x0,0x0,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0xa0,0x40,
++0x4,0x3e,0x24,0x24,0x27,0x3c,0x24,0x24,0x24,0x3c,0x24,0x24,0x25,0x25,0x4e,0x84,0x80,0x40,0x40,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0x8,0x8,0x50,0x20,
++0x2,0x1,0x3f,0x20,0x3f,0x21,0x20,0x3f,0x22,0x22,0x23,0x22,0x44,0x44,0x88,0x10,0x0,0x8,0xfc,0x8,0xf8,0x0,0x84,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0xa0,0x40,
++0x0,0x7c,0x44,0x48,0x4f,0x50,0x48,0x48,0x44,0x44,0x44,0x68,0x51,0x41,0x42,0x44,0x80,0x40,0x40,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0x8,0x8,0x50,0x20,
++0x10,0x10,0x10,0x10,0xff,0x24,0x24,0x24,0x24,0x44,0x28,0x10,0x29,0x45,0x82,0x4,0x80,0x40,0x40,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0x8,0x8,0x50,0x20,
++0x8,0x8,0x8,0x10,0x17,0x30,0x50,0x90,0x10,0x10,0x10,0x10,0x11,0x11,0x12,0x14,0x80,0x40,0x40,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0x8,0x8,0x50,0x20,
++0x0,0x20,0x10,0x10,0x7,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x15,0x19,0x12,0x4,0x80,0x40,0x40,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0x8,0x8,0x50,0x20,
++0x10,0x10,0x20,0x20,0x47,0xfc,0x10,0x20,0x40,0xfc,0x40,0x0,0x1d,0xe1,0x42,0x4,0x80,0x40,0x40,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0x8,0x8,0x50,0x20,
++0x20,0x10,0x10,0x0,0xff,0x20,0x24,0x3e,0x24,0x24,0x24,0x24,0x44,0x54,0x89,0x2,0x40,0x40,0x40,0x84,0xfe,0x8,0x88,0x88,0x50,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x8,0x8,0xff,0x8,0x4,0x4,0x7c,0x4,0x4,0x7c,0x4,0x4,0xfc,0x4,0x4,0x4,0x20,0x24,0xfe,0x20,0x40,0x48,0x7c,0x40,0x48,0x7c,0x40,0x44,0x7e,0x40,0x40,0x40,
++0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x7c,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x40,0x40,0x44,0x7e,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0x44,0x7e,0x40,0x40,0x40,
++0x0,0x8,0x7c,0x4f,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x78,0x4f,0x0,0x0,0x0,0x90,0x90,0x94,0x9e,0x90,0x90,0x94,0x9e,0x90,0x90,0x90,0x94,0x9e,0x90,0x90,0x90,
++0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x24,0x2c,0x30,0x20,0x30,0x2c,0x24,0x20,0x20,0x10,0x12,0xa,0x4,
++0x4,0x7f,0x45,0x45,0x45,0x7d,0x45,0x45,0x45,0x7d,0x45,0x45,0x45,0x45,0x54,0x88,0x4,0xfe,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,0x0,0x2,0x2,0x2,0xfe,0x0,
++0x0,0x7f,0x42,0x42,0x5e,0x42,0x42,0x5e,0x42,0x42,0x7e,0x42,0x42,0x42,0x7f,0x0,0x4,0xfe,0x40,0x50,0x78,0x40,0x50,0x78,0x40,0x48,0x7c,0x40,0x40,0x44,0xfe,0x0,
++0x20,0x10,0x10,0x7,0x0,0xf0,0x10,0x13,0x10,0x10,0x10,0x17,0x14,0x18,0x10,0x0,0x90,0x90,0x94,0x9e,0x90,0x90,0x90,0x9c,0x90,0x90,0x94,0x9e,0x90,0x90,0x90,0x90,
++0x0,0x8,0x7c,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x49,0x79,0x4a,0x2,0x4,0x8,0x40,0x50,0x48,0x48,0x40,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x10,0x8,0xe,0x4,0x0,
++0x4,0x3e,0x24,0x27,0x24,0x3c,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x24,0x54,0x88,0x20,0x20,0x24,0xfe,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x2c,0x20,0x20,0x20,
++0x1,0x0,0x3f,0x20,0x24,0x24,0x2f,0x21,0x23,0x22,0x25,0x24,0x28,0x30,0x43,0x8c,0x0,0x88,0xfc,0x80,0x90,0x88,0xfe,0x0,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x1,0x41,0x2f,0x21,0x1,0x8f,0x49,0x9,0x1f,0x29,0xe1,0x21,0x22,0x22,0x24,0x28,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x20,0xfe,0x22,0x22,0x2a,0x24,0x20,0x20,0x20,
++0x4,0x7f,0x4,0x7f,0x44,0x7f,0x4,0x8,0x3f,0xd0,0x11,0x11,0x11,0x2,0xc,0x30,0x48,0xfc,0x48,0xf8,0x40,0xfe,0x42,0x4a,0xf4,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x8,0x8,0xff,0x8,0x4,0x4,0x8,0x10,0x20,0xcf,0x4,0x4,0x4,0x8,0x10,0x20,0x20,0x24,0xfe,0x20,0x80,0x80,0x40,0x30,0xe,0xe4,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x4,0xfe,0x28,0x28,0xfe,0xaa,0xab,0xae,0xc2,0x82,0xfe,0x82,0x82,0xfe,0x82,0x1,0x8,0x48,0x48,0x48,0x84,0x84,0x2,0xfc,0x44,0x44,0x44,0x44,0x44,0x44,0x94,0x8,
++0x0,0x8,0x7c,0x48,0x48,0x49,0x49,0x4a,0x4d,0x48,0x48,0x78,0x49,0x1,0x2,0x4,0x20,0xa0,0xa0,0x90,0x90,0x8,0xe,0x4,0xf8,0x88,0x88,0x88,0x8,0x8,0x28,0x10,
++0x10,0x1f,0x10,0x2f,0x40,0xbf,0x1,0x9,0x8,0x10,0x3f,0x48,0x8,0x8,0x12,0x21,0x8,0xfc,0x0,0xf8,0x0,0xf8,0x8,0x8,0x88,0x48,0xb8,0xa8,0x88,0x8a,0x8a,0x4,
++0x0,0x4,0x4,0x8,0x8,0x10,0x20,0x4f,0x84,0x4,0x4,0x4,0x4,0x8,0x11,0x20,0x80,0x80,0x40,0x40,0x20,0x10,0x8,0xee,0x24,0x20,0x20,0x20,0x20,0x20,0x40,0x80,
++0x10,0x10,0x20,0x20,0x48,0xf9,0x11,0x22,0x45,0xf8,0x40,0x0,0x19,0xe1,0x42,0x4,0x20,0xa0,0xa0,0x90,0x90,0x8,0xe,0x4,0xf8,0x88,0x88,0x88,0x8,0x8,0x28,0x10,
++0x10,0x10,0x10,0x10,0x13,0xfc,0x10,0x10,0x10,0x10,0x10,0x1c,0xf0,0x40,0x1,0x6,0x40,0x20,0x20,0x4,0xfe,0x88,0x88,0x88,0x88,0x48,0x50,0x20,0x50,0x88,0xe,0x4,
++0x8,0x8,0x8,0xfe,0x18,0x2c,0x4b,0x8,0x1,0x11,0x9,0xa,0x4,0x8,0x30,0xc0,0x20,0x20,0x24,0xfe,0x60,0xb8,0x24,0x20,0x10,0x30,0x40,0x80,0x40,0x30,0xe,0x4,
++0x0,0x41,0x31,0x11,0x82,0x64,0x28,0x7,0x11,0x21,0xe1,0x21,0x22,0x22,0x24,0x28,0x20,0x20,0x20,0x10,0x10,0xe,0x4,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0xa0,0x40,
++0x10,0x10,0x10,0x54,0x38,0x11,0xfd,0x12,0x39,0x34,0x50,0x90,0x11,0x11,0x12,0x14,0x20,0xa0,0xa0,0x90,0x90,0x8,0xe,0x4,0xf8,0x88,0x88,0x88,0x8,0x8,0x28,0x10,
++0x1,0x1,0x1,0xff,0x2,0x4,0x8,0x30,0xdf,0x11,0x11,0x1f,0x11,0x11,0x1f,0x10,0x0,0x0,0x4,0xfe,0x80,0x40,0x20,0x1e,0xf4,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x8,0x9,0x9,0x11,0x12,0x32,0x54,0x9b,0x11,0x11,0x11,0x11,0x12,0x12,0x14,0x10,0x20,0x20,0x20,0x10,0x10,0xe,0x4,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0xa0,0x40,
++0x0,0x4,0x4,0x8,0x1f,0x24,0xc4,0x9,0x30,0x0,0x2a,0x29,0x28,0x48,0x7,0x0,0x80,0x80,0x40,0x20,0xf0,0x2e,0x24,0x20,0xc0,0x0,0x10,0x88,0xa4,0x24,0xe0,0x0,
++0x10,0x10,0x13,0x10,0x59,0x57,0x51,0x93,0x12,0x12,0x12,0x12,0x12,0x10,0x11,0x16,0x40,0x50,0xf8,0x40,0x54,0xfe,0x10,0xf8,0x8,0x48,0x48,0x48,0x48,0xa0,0x18,0x8,
++0x11,0xd,0x5,0x7f,0x3,0x5,0x19,0x4,0x4,0x3f,0x4,0x4,0xff,0x8,0x18,0x20,0x10,0x30,0x40,0xfc,0x80,0x40,0x3c,0x48,0x40,0xf8,0x40,0x44,0xfe,0x20,0x18,0x8,
++0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0x3f,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x0,0x0,0x8,0xfc,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x8,0x8,0xa,0x7f,0x8,0xa,0xff,0x8,0xa,0x7f,0x8,0x8,0xf,0x78,0x20,0x0,0x8,0x8,0x8,0x8,0x8,0xfe,0x8,0x8,0x48,0x28,0x28,0x8,0x8,0x8,0x28,0x10,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x3b,0x36,0x52,0x52,0x92,0x13,0x12,0x14,0x14,0x18,0x0,0x8,0xfc,0x8,0x8,0x8,0x18,0xa8,0x48,0x48,0xa8,0x18,0x8,0xa,0xa,0x6,
++0x10,0x10,0x10,0x15,0x7e,0x54,0x54,0x57,0x54,0x7c,0x51,0x14,0x1d,0xe4,0x40,0x0,0x80,0x80,0xfc,0x88,0x50,0x20,0xde,0x24,0xf8,0x20,0xfc,0x20,0xfc,0x20,0x20,0x20,
++0x10,0x10,0x10,0x11,0x56,0x54,0x54,0x57,0x54,0x54,0x55,0x5c,0x65,0x0,0x0,0x0,0x80,0x80,0xfc,0x88,0x50,0x20,0xde,0x24,0xf8,0x20,0xfc,0x20,0xfc,0x20,0x20,0x20,
++0x10,0x10,0x10,0x1d,0x22,0x20,0x7c,0x93,0x10,0xfc,0x11,0x10,0x15,0x18,0x10,0x0,0x80,0x80,0xfc,0x88,0x50,0x20,0xde,0x24,0xf8,0x20,0xfc,0x20,0xfc,0x20,0x20,0x20,
++0x0,0x3f,0x20,0x28,0x24,0x22,0x22,0x21,0x21,0x22,0x22,0x24,0x28,0x30,0x40,0x80,0x10,0xf8,0x10,0x50,0x50,0x90,0x90,0x10,0x10,0x90,0x90,0x50,0x50,0x12,0xa,0x6,
++0x1,0x0,0x1f,0x10,0x97,0x54,0x56,0x15,0x34,0x54,0xd4,0x14,0x25,0x2a,0x48,0x10,0x0,0x84,0xfe,0x8,0xfc,0x8,0x18,0x18,0xa8,0x48,0x48,0xa8,0x18,0x1a,0xa,0x6,
++0x10,0x10,0x10,0x15,0x5a,0x50,0x50,0x93,0x10,0x10,0x29,0x24,0x45,0x40,0x80,0x0,0x80,0x80,0xfc,0x88,0x50,0x20,0xde,0x24,0xf8,0x20,0xfc,0x20,0xfc,0x20,0x20,0x20,
++0x0,0x41,0x23,0x24,0x0,0x1,0xee,0x20,0x27,0x20,0x23,0x20,0x27,0x20,0x50,0x8f,0x80,0xfc,0x8,0xb0,0x40,0xb0,0x4e,0x40,0xfc,0x40,0xf8,0x40,0xfc,0x40,0x46,0xfc,
++0x0,0x47,0x30,0x12,0x2,0xa,0x12,0x12,0x23,0xe0,0x20,0x2f,0x20,0x20,0x20,0x20,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x4,0x24,0xf4,0x4,0x4,0x28,0x10,
++0x10,0x10,0x24,0x23,0x4a,0xf8,0x17,0x22,0x42,0xfa,0x42,0x3,0x1a,0xe2,0x45,0x8,0x40,0x7c,0x88,0x50,0x20,0xd8,0x26,0xf8,0x20,0xf8,0x20,0xfc,0x20,0x20,0x26,0xfc,
++0x0,0x47,0x24,0x24,0x6,0x5,0xe4,0x24,0x24,0x24,0x25,0x2e,0x34,0x24,0x8,0x10,0x8,0xfc,0x8,0x8,0x18,0x18,0xa8,0x48,0x48,0xa8,0x18,0x18,0x8,0xa,0xa,0x6,
++0x1,0x1,0x7f,0x1,0x3f,0x2,0xff,0x4,0x9,0x31,0xcf,0x1,0x1f,0x1,0x1,0x1,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x40,0x20,0x1e,0xe4,0x0,0xf0,0x0,0x0,0x0,
++0x0,0x3f,0x20,0x20,0x2f,0x20,0x28,0x24,0x22,0x21,0x22,0x24,0x28,0x20,0x40,0x80,0x10,0xf8,0x10,0x10,0xf0,0x50,0x50,0x90,0x90,0x10,0x90,0xd0,0x50,0x12,0xa,0x6,
++0x10,0x12,0x12,0x2f,0x22,0x62,0xaf,0x2a,0x2a,0x2f,0x22,0x22,0x22,0x24,0x28,0x20,0x40,0x40,0x48,0xfc,0x48,0x48,0xf8,0x40,0x44,0xfe,0x44,0x44,0x54,0x48,0x40,0x40,
++0x0,0xff,0x0,0x1,0x3,0x5,0x9,0x31,0xc1,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x4,0xfe,0x80,0x0,0x0,0x60,0x18,0x6,0x12,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0xff,0x1,0x2,0x2,0x4,0x4,0x8,0x10,0x60,0x0,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x0,0x80,0x80,0x40,0x40,0x30,0xe,0x4,
++0x8,0xff,0x8,0x7f,0x49,0x7f,0x49,0x7f,0x49,0x8,0xff,0x10,0x1e,0x12,0x22,0x47,0x20,0xa0,0x20,0x24,0x7e,0x84,0x44,0x44,0x28,0x28,0x90,0x10,0x28,0x48,0x86,0x4,
++0x4,0x3e,0x24,0x25,0x24,0x3c,0x24,0x27,0x24,0x3c,0x24,0x24,0x24,0x24,0x4d,0x86,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x50,0x50,0x88,0x88,0x6,0x4,
++0x10,0x20,0x57,0x55,0x55,0x55,0x77,0x55,0x55,0x55,0x77,0x14,0x24,0x24,0x44,0x84,0xc,0xf0,0x2,0x54,0x54,0x0,0x7c,0x8,0x10,0x14,0xfe,0x10,0x10,0x10,0x50,0x20,
++0x10,0x10,0x10,0x11,0xfc,0x10,0x14,0x1b,0x30,0xd0,0x10,0x10,0x10,0x10,0x51,0x26,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x50,0x50,0x88,0x88,0x6,0x4,
++0x10,0x11,0x11,0x17,0xf9,0x11,0x17,0x1d,0x35,0xd7,0x11,0x11,0x11,0x12,0x54,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x20,0xfe,0x22,0x22,0x2a,0x24,0x20,0x20,
++0x10,0x17,0x20,0xfb,0x22,0x52,0x53,0xf8,0x17,0x14,0xfc,0x17,0x14,0x14,0x17,0x14,0x8,0xfc,0x0,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x10,0x11,0x14,0x7e,0x54,0x54,0x54,0x54,0x55,0x55,0x55,0x5d,0x11,0x11,0x11,0x11,0x8,0xfc,0x0,0xf8,0x88,0x88,0xf8,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,
++0x10,0x1f,0x10,0x2f,0x40,0xbf,0xa,0x7f,0xa,0x7f,0x4a,0x7f,0xa,0xa,0x12,0x62,0x8,0xfc,0x0,0xf8,0x0,0xf8,0x8,0xc8,0x48,0xc8,0x8,0xe8,0x28,0xaa,0x4a,0x4,
++0x10,0x12,0x1f,0x28,0x45,0x88,0x8,0x17,0x30,0x52,0x91,0x11,0x10,0x10,0x10,0x10,0x40,0x44,0x7e,0xa0,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
++0x8,0x8,0x8,0x10,0x10,0x3f,0x50,0x90,0x10,0x10,0x10,0x11,0x11,0x12,0x14,0x18,0x40,0x40,0x50,0x4c,0x44,0xfe,0x40,0x40,0x40,0xa0,0xa0,0x10,0x10,0x8,0xe,0x4,
++0x10,0x10,0x17,0x20,0x22,0x62,0xa0,0x27,0x20,0x20,0x2f,0x20,0x20,0x20,0x21,0x20,0x8,0x3c,0xc0,0x8,0x48,0x50,0x0,0xf8,0x20,0x44,0xfe,0x40,0x40,0x40,0x40,0x80,
++0x2,0x3f,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x22,0x4a,0x84,0x8,0xfc,0x88,0x88,0x88,0x98,0x80,0xfc,0xa4,0xa4,0xa8,0x90,0xa8,0xa8,0xc6,0x84,
++0x40,0x30,0x17,0x0,0x82,0x62,0x20,0xb,0x10,0x20,0xef,0x20,0x20,0x20,0x21,0x20,0x8,0x3c,0xc0,0x8,0x48,0x50,0x0,0xf8,0x20,0x44,0xfe,0x40,0x40,0x40,0x40,0x80,
++0x40,0x30,0x17,0x0,0x81,0x60,0x20,0xf,0x10,0x23,0xe2,0x22,0x22,0x22,0x23,0x22,0x80,0x48,0xfc,0x0,0x10,0xa0,0x4,0xfe,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x17,0x10,0x3,0xfa,0xa,0x13,0x38,0x57,0x94,0x14,0x17,0x14,0x14,0x17,0x14,0x8,0xfc,0x0,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x20,0x10,0x10,0x1,0xfd,0xb,0x15,0x31,0x55,0x99,0x15,0x11,0x11,0x11,0x11,0x11,0x90,0x90,0x94,0x12,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x28,0x28,0x46,0x84,0x0,
++0x4,0x4,0x4,0x7f,0x4,0x4,0x7f,0x44,0x44,0x7f,0x44,0x4,0x8,0x30,0xc0,0x0,0x40,0x40,0x48,0xfc,0x48,0x48,0xf8,0x40,0x44,0xfe,0x44,0x44,0x54,0x48,0x40,0x40,
++0x1,0x1,0xff,0x1,0x1,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x21,0x21,0x21,0x20,0x20,0x14,0xfe,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x17,0x18,0x30,0xd0,0x10,0x11,0x11,0x12,0x54,0x28,0x0,0x8,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0xa0,0xa0,0x20,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x15,0xfe,0x20,0x29,0x49,0x7f,0x9,0x9,0xf,0xf9,0x49,0x9,0x9,0x9,0x28,0x24,0xfe,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x24,0x24,0xc,
++0x10,0x10,0x17,0x24,0x24,0x64,0xa5,0x25,0x27,0x25,0x25,0x25,0x29,0x29,0x31,0x21,0x80,0x44,0xfe,0x80,0x88,0x88,0x8,0xfe,0x8,0x48,0x28,0x28,0x8,0x8,0x28,0x10,
++0x4,0x8,0x14,0x62,0x1,0xe,0x30,0xdf,0x1,0x1,0x3f,0x1,0x9,0x5,0x7f,0x0,0x40,0x20,0x50,0x8c,0x0,0xe0,0x1e,0xf4,0x0,0x10,0xf8,0x0,0x20,0x48,0xfc,0x0,
++0x4,0x8,0x34,0x3,0xc,0x30,0xc0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x20,0x40,0x0,0x40,0x20,0x58,0x80,0x60,0x1e,0xe4,0x0,0x0,0x10,0xf8,0x80,0x80,0x80,0x80,0x80,
++0x0,0x3c,0x27,0x24,0x24,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x25,0x45,0x8d,0x28,0x24,0xfe,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x24,0x24,0xc,
++0x8,0x7c,0x4b,0x4a,0x4a,0x7a,0x4a,0x4a,0x4b,0x7a,0x4a,0x4a,0x4a,0x5a,0x84,0x8,0x40,0x24,0xfe,0x40,0x44,0x44,0x84,0xfe,0x84,0xa4,0x94,0x94,0x84,0x84,0x94,0x88,
++0x2,0x1,0x3f,0x22,0x22,0x22,0x24,0x27,0x2c,0x35,0x24,0x24,0x24,0x44,0x84,0x4,0x0,0x8,0xfc,0x0,0x10,0x10,0x14,0xfe,0x10,0x10,0x90,0x90,0x10,0x10,0x50,0x20,
++0x1,0x0,0x3f,0x22,0x22,0x25,0x2c,0x34,0x24,0x2f,0x29,0x2a,0x48,0x49,0x8a,0x8,0x0,0x84,0xfe,0x10,0x14,0xfe,0x90,0x10,0xb4,0xfe,0x44,0xa4,0x84,0x44,0x34,0x8,
++0x8,0x8,0xa,0x7f,0x8,0xa,0xff,0x8,0x28,0x2a,0x2f,0x28,0x28,0x58,0x88,0x7,0x40,0x40,0x40,0x40,0x40,0x60,0x50,0x4c,0x44,0x40,0x40,0x40,0x40,0x40,0x6,0xfc,
++0x0,0xff,0x0,0x3f,0x20,0x20,0x3f,0x0,0x7f,0x44,0x44,0x7f,0x44,0x44,0x7f,0x40,0x44,0xe4,0x84,0xd4,0x94,0x94,0x94,0x54,0xf4,0x54,0x54,0xd4,0x44,0x44,0xd4,0x48,
++0xff,0x4,0x3f,0x24,0x3f,0x12,0x23,0x4a,0x17,0x32,0x53,0x91,0x13,0x1d,0x10,0x17,0xfe,0x40,0xf8,0x48,0xf8,0x0,0xfc,0x0,0xf8,0x48,0xf8,0x0,0xf8,0x10,0xe2,0x1c,
++0x4,0x7e,0x44,0x55,0x54,0x54,0x57,0x54,0x55,0x55,0x55,0x11,0x29,0x27,0x45,0x80,0x8,0x8,0x2c,0xfa,0x8,0x8,0xfe,0x48,0x48,0x78,0x48,0x48,0x78,0xca,0xa,0x4,
++0x10,0x1f,0x20,0x2f,0x48,0x8f,0x8,0xf,0x4,0xf,0xc,0x12,0x21,0x42,0x4,0x38,0x8,0xfc,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x0,0xf0,0x20,0x40,0x80,0x40,0x30,0xe,
++0x8,0x8,0xf,0x10,0x17,0x34,0x57,0x94,0x17,0x14,0x10,0x1f,0x12,0x11,0x10,0x10,0x50,0x48,0xfe,0x40,0xfc,0x44,0xfc,0x44,0xfc,0x44,0x10,0xfe,0x10,0x10,0x50,0x20,
++0x8,0x8,0x8,0x10,0x10,0x37,0x50,0x90,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x90,0x90,0x10,0x10,0x10,0x50,0x20,
++0x1,0x2,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x1f,0x11,0x1,0xff,0x1,0x1,0x1,0x0,0x10,0xf8,0x10,0xf0,0x0,0xf0,0x10,0x10,0xf0,0x0,0x4,0xfe,0x0,0x0,0x0,
++0x4,0x8,0x10,0x20,0x40,0x8,0x4,0x4,0x2,0x2,0x1,0x2,0x4,0x8,0x30,0xc0,0x40,0x20,0x10,0xc,0x24,0x20,0x40,0x40,0x80,0x80,0x0,0x80,0x40,0x30,0xe,0x4,
++0x9,0x7d,0x49,0x4b,0x4d,0x79,0x49,0x49,0x49,0x79,0x4a,0x4c,0x48,0x48,0x49,0x9e,0x4,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x4,0x4,0xf,0x10,0x20,0x5f,0x10,0x11,0x11,0x11,0x11,0x11,0x2,0x4,0x18,0x60,0x0,0x0,0xe0,0x40,0x90,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0xc0,0x30,0x18,0x8,
++0x2,0x1,0x7f,0x40,0x9f,0x0,0x1f,0x10,0x1f,0x0,0x3f,0x21,0x3f,0x21,0x3f,0x20,0x0,0x0,0xfe,0x22,0xf4,0x0,0xf0,0x10,0xf0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x0,0x20,0x18,0x8,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x12,0x14,0x18,0x10,0x0,0x40,0x40,0x40,0x40,0x40,0x50,0x48,0x46,0x42,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x7c,0x44,0x49,0x49,0x53,0x4d,0x49,0x45,0x45,0x45,0x69,0x51,0x41,0x41,0x41,0x88,0x88,0x88,0x8,0x8,0xfe,0x8,0x8,0x48,0x28,0x28,0x8,0x8,0x8,0x28,0x10,
++0x10,0x10,0x10,0x13,0xfc,0x24,0x24,0x24,0x25,0x48,0x28,0x10,0x28,0x47,0x84,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x10,0x10,0x27,0x20,0x43,0xfa,0x13,0x22,0x43,0xfa,0x40,0x7,0x1a,0xe1,0x40,0x0,0x50,0x48,0xfc,0x40,0xf8,0x48,0xf8,0x48,0xf8,0x48,0x10,0xfe,0x10,0x10,0x10,0x20,
++0x0,0x8,0x7c,0x49,0x49,0x4b,0x4d,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0x1,0x1,0x88,0x88,0x88,0x8,0x8,0xfe,0x8,0x8,0x48,0x28,0x28,0x8,0x8,0x8,0x28,0x10,
++0x1,0xf,0x79,0x4b,0x4a,0x4b,0x4a,0x4b,0x49,0x49,0x4a,0x7c,0x4a,0x2,0x3,0x0,0x10,0xfe,0x10,0xf8,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x44,0x64,0x94,0x4,0xe4,0xc,
++0x7,0x8,0x7f,0x4a,0x4b,0x4a,0x4b,0x4a,0x4b,0x49,0x49,0x7f,0x48,0x0,0x1,0xe,0xfc,0x80,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x40,0x3e,0xc0,0xa0,0x42,0xb2,0xe,
++0x1,0x40,0x2f,0x0,0x1,0x1,0xe2,0x27,0x20,0x20,0x20,0x25,0x2a,0x30,0x23,0xc,0x0,0x84,0xfe,0x80,0x0,0x10,0x10,0xe0,0x48,0x48,0x90,0x20,0x50,0x88,0x4,0x4,
++0x0,0x4,0xfe,0x4,0x4,0x5,0x7e,0x44,0x40,0x40,0x40,0x40,0x4c,0x70,0x41,0x6,0x80,0x80,0x80,0x84,0xfe,0x8,0x88,0x88,0x88,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x10,0x17,0x14,0xfc,0x17,0x34,0x3c,0x57,0x54,0x95,0x15,0x16,0x14,0x10,0x10,0x0,0x84,0xfe,0x88,0x88,0xa8,0xa8,0xbe,0x88,0x10,0x18,0xa8,0xaa,0x4a,0x86,0x0,
++0x10,0x13,0x10,0x1c,0x21,0x21,0x7d,0x91,0x11,0x7c,0x10,0x10,0x14,0x18,0x10,0x0,0x4,0xfe,0x20,0x28,0x3c,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x8,0x4,0x7f,0x1,0x1,0x3f,0x1,0x1,0x7f,0x0,0x3f,0x24,0x24,0x24,0xff,0x0,0x20,0x48,0xfc,0x0,0x10,0xf8,0x0,0x8,0xfc,0x0,0xf8,0x48,0x48,0x48,0xfe,0x0,
++0x41,0x2f,0x29,0x9,0x8f,0x49,0x49,0x1f,0x28,0x28,0xca,0x4b,0x4d,0x48,0x40,0x41,0x4,0xfe,0x10,0x10,0x50,0x50,0x54,0x7e,0x10,0x10,0x20,0x30,0x52,0x52,0x8e,0x0,
++0x0,0x3f,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x10,0xf8,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x8,0x8,0x8,0xff,0x8,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x8,0xf,0x8,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0xe0,0x20,0x20,0x20,0x20,0xe0,0x20,
++0x10,0x10,0x11,0x10,0xfc,0x10,0x30,0x3b,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x0,0x8,0xfc,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x11,0x11,0x11,0x11,0xff,0x11,0x39,0x35,0x51,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x8,0x8,0x8,0x8,0xfe,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x12,0x1f,0x28,0x45,0x80,0x3f,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x40,0x44,0x7e,0xa0,0x10,0x0,0xf8,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x3d,0x24,0x24,0x24,0x3c,0x24,0x27,0x24,0x3c,0x24,0x24,0x24,0x44,0x94,0x8,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x8,0x8,0x9,0x7e,0x8,0x8,0xfe,0x9,0x28,0x28,0x2e,0x28,0x28,0x38,0x48,0x87,0x0,0x8,0xfc,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x6,0xfc,
++0x0,0x0,0x7f,0x40,0x7f,0x40,0x5f,0x51,0x51,0x5f,0x90,0x2,0x29,0x28,0x48,0x7,0x50,0x48,0xfc,0x40,0xc0,0x48,0x48,0x50,0x22,0x52,0x8e,0x0,0x90,0xac,0x24,0xe0,
++0x8,0x1d,0xf0,0x10,0x10,0xfc,0x10,0x3b,0x34,0x50,0x50,0x90,0x10,0x10,0x10,0x10,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x7c,0x4,0x8,0xff,0x24,0x24,0x3c,0x24,0x3c,0x24,0x24,0xfe,0x4,0x5,0x6,0x40,0x40,0x40,0x84,0xfe,0x8,0x88,0x88,0x50,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x10,0xfe,0x44,0x29,0xfe,0x1,0x7c,0x44,0x7d,0x44,0x7c,0x10,0xfe,0x10,0x10,0x11,0x40,0x78,0xd0,0x20,0x58,0x86,0xf8,0x20,0xfc,0x0,0xf8,0x88,0xa8,0xa8,0x58,0x84,
++0x0,0x7f,0x40,0x40,0x48,0x44,0x42,0x41,0x42,0x44,0x48,0x50,0x40,0x40,0x40,0x40,0x4,0xfe,0x4,0x4,0x24,0x64,0x84,0x4,0x84,0x64,0x34,0x14,0x4,0x4,0x14,0x8,
++0x1,0x7f,0x41,0x41,0x63,0x63,0x55,0x55,0x49,0x55,0x53,0x63,0x41,0x41,0x45,0x42,0x4,0x84,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x10,0x13,0x12,0x1e,0x23,0x22,0x7e,0x92,0x12,0x7e,0x12,0x13,0x16,0x1a,0x12,0x2,0x4,0xfe,0x4,0x4,0xc,0x8c,0x54,0x24,0x24,0x54,0x8c,0xc,0x4,0x4,0x14,0x8,
++0x20,0x22,0x3f,0x48,0x48,0x88,0x9,0xff,0x8,0x2a,0x2a,0x2a,0x2a,0x3e,0x23,0x2,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0xa0,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x4,0x3e,0x25,0x24,0x24,0x3c,0x24,0x24,0x24,0x3c,0x24,0x24,0x24,0x27,0x44,0x8c,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x20,0x23,0x22,0x4a,0x4b,0xf2,0x12,0x22,0x42,0xfa,0x42,0x3,0x1a,0xe2,0x42,0x2,0x4,0xfe,0x4,0x4,0xc,0x8c,0x54,0x24,0x24,0x54,0x8c,0xc,0x4,0x4,0x14,0x8,
++0x1,0x41,0x41,0x7f,0x0,0x7f,0x40,0x48,0x44,0x42,0x41,0x42,0x44,0x48,0x50,0x40,0x0,0x4,0x4,0xfc,0x4,0xfe,0x4,0x24,0x44,0x84,0x4,0x84,0x44,0x34,0x14,0x8,
++0x41,0x31,0x17,0x81,0x61,0x2f,0x1,0x12,0x27,0xea,0x22,0x23,0x22,0x22,0x21,0x20,0x10,0x10,0xfc,0x10,0x14,0xfe,0x20,0x10,0xfe,0x14,0x10,0xf0,0x4,0x4,0xfc,0x0,
++0x10,0x10,0x10,0x11,0xfc,0x10,0x30,0x38,0x54,0x50,0x90,0x10,0x10,0x13,0x10,0x10,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x20,0x3e,0x50,0x81,0x7f,0x0,0x1f,0x10,0x1f,0x0,0x7f,0x40,0x4f,0x48,0x4f,0x40,0x40,0x7c,0x90,0x0,0xfc,0x0,0xf0,0x10,0xf0,0x4,0xfe,0x4,0xe4,0x24,0xe4,0xc,
++0x2,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x2,0xff,0x4,0x9,0x11,0x2f,0xc1,0x1,0x1,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x40,0x20,0x50,0xee,0x4,0x0,0x0,
++0x2,0x1,0xff,0x0,0x1f,0x10,0x10,0x1f,0x0,0x7f,0x40,0x4f,0x48,0x48,0x4f,0x40,0x0,0x4,0xfe,0x0,0xf0,0x10,0x10,0xf0,0x4,0xfe,0x4,0xe4,0x24,0x24,0xe4,0xc,
++0x1,0x7f,0x8,0xf,0x0,0x7f,0x48,0x8f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x8,0xfc,0x20,0xe0,0x0,0xfe,0x22,0xe4,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x30,
++0x10,0xc,0x4,0x7f,0x1,0x1,0x1,0x3f,0x1,0x1,0x1,0xff,0x20,0x24,0x22,0x40,0x10,0x30,0x40,0xfc,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x10,0x88,0x44,0x4,
++0x11,0x10,0x92,0x55,0x38,0x10,0xfe,0x11,0x38,0x34,0x54,0x53,0x90,0x12,0x12,0x14,0x4,0x88,0x50,0xfc,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0xa4,0x92,0x2,
++0x10,0x10,0x1f,0x10,0xfb,0x12,0x12,0x1b,0x30,0xd7,0x14,0x15,0x15,0x15,0x54,0x24,0x80,0x44,0xfe,0x0,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x4,0xf4,0x14,0xf4,0x4,0xc,
++0x10,0x10,0x1f,0x20,0x21,0x7d,0x91,0x11,0x7c,0x13,0x12,0x12,0x16,0x1a,0x12,0x2,0x40,0x24,0xfe,0x0,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x4,0xf4,0x94,0xf4,0x4,0xc,
++0x8,0x1c,0xf3,0x10,0x11,0xfd,0x11,0x39,0x34,0x53,0x52,0x92,0x12,0x12,0x12,0x12,0x40,0x24,0xfe,0x0,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x4,0xf4,0x94,0xf4,0x4,0xc,
++0x1,0x11,0x11,0x1f,0x11,0x21,0x1,0xff,0x0,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x7f,0x0,0x1f,0x10,0x10,0x1f,0x0,0xff,0x0,0x1f,0x10,0x10,0x1f,0x10,0x0,0x0,0xfc,0x10,0x90,0x90,0x90,0x90,0x14,0xfe,0x10,0x90,0x90,0x90,0x90,0x10,0x50,0x20,
++0x2,0xff,0x2,0x7a,0x4a,0x4a,0x7b,0x2,0xff,0x2,0x7a,0x4a,0x4a,0x7a,0x4a,0x5,0x20,0x20,0x20,0x40,0x7c,0x84,0x28,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x8e,0x4,
++0x10,0x14,0x12,0x10,0xfc,0x15,0x16,0x1c,0x34,0xd7,0x15,0x15,0x15,0x15,0x55,0x24,0x0,0x4,0xfe,0x44,0xf4,0x14,0xa4,0x44,0xa4,0x1c,0xf4,0x14,0x14,0xf4,0x14,0x8,
++0x4,0x4,0x4,0x4,0x4,0xff,0x4,0x4,0x4,0x2,0x2,0x1,0x2,0xc,0x70,0x0,0x0,0x80,0x40,0x4,0xfe,0x0,0x0,0x20,0x30,0x40,0x80,0x0,0x80,0x44,0x34,0xc,
++0x10,0x10,0x29,0x29,0x25,0x43,0x89,0x7d,0x1,0x7d,0x44,0x44,0x47,0x44,0x7c,0x40,0x20,0x48,0xfc,0x8,0x48,0x28,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x4,0x3e,0x24,0x24,0x24,0x3d,0x26,0x24,0x24,0x3d,0x26,0x24,0x24,0x44,0x94,0x8,0x40,0x40,0x7c,0x84,0x88,0x50,0x20,0x50,0x8e,0x4,0xf8,0x88,0x88,0x88,0xf8,0x88,
++0x1,0x0,0x1f,0x12,0x92,0x53,0x54,0x18,0x37,0x50,0xd0,0x13,0x24,0x24,0x44,0x3,0x0,0x84,0xfe,0x0,0x10,0xf8,0x0,0x0,0xf0,0x20,0xc0,0x0,0x0,0x2,0x2,0xfe,
++0x8,0x4,0x7f,0x44,0xbf,0x4,0x3f,0x4,0x7f,0x0,0x3f,0x20,0x20,0x20,0x3f,0x20,0x4,0x4,0xe4,0x54,0x94,0x14,0x94,0x14,0xd4,0x94,0xd4,0x94,0x84,0x84,0x94,0x88,
++0x8,0x8,0x7f,0x8,0xf,0x1,0x3f,0x21,0x21,0x3f,0x1,0xff,0x1,0x1,0x1,0x1,0x20,0x28,0xfc,0x20,0xe0,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x4,0xff,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x4,0xf,0x11,0x22,0x54,0x10,0x1f,0x0,0x44,0xfe,0x40,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x4,0x84,0x44,0x4,0xd4,0x8,
++0x11,0x11,0x11,0x12,0xff,0x14,0x38,0x34,0x51,0x52,0x97,0x1a,0x12,0x12,0x13,0x12,0x0,0x0,0xf8,0x8,0x10,0xa0,0x40,0xa0,0x10,0xe,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x14,0x7e,0x55,0x56,0x55,0x54,0x7c,0x51,0x11,0x15,0x1d,0xe5,0x41,0x1,0x20,0x20,0x50,0x88,0x6,0x4,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x20,0x1b,0x4a,0x42,0x47,0x4c,0x52,0x41,0x46,0x58,0x60,0x4f,0x48,0x48,0x4f,0x40,0x4,0xfe,0x4,0x4,0xe4,0x44,0x84,0x4,0xc4,0x3c,0x14,0xe4,0x24,0x24,0xf4,0x8,
++0x0,0x7f,0x48,0x53,0x52,0x62,0x53,0x48,0x4f,0x4d,0x6c,0x57,0x44,0x44,0x44,0x44,0x8,0xfc,0x0,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x14,0xa4,0xfc,0x44,0x44,0x54,0x8,
++0x10,0x10,0x1c,0x11,0x21,0x3e,0x50,0x90,0x7c,0x13,0x11,0x11,0x15,0x19,0x11,0x1,0x80,0x80,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x1,0x2,0x4,0x8,0x11,0x21,0xc1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x80,0x40,0x20,0x10,0xe,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x4,0x4,0x7,0x8,0x14,0x22,0x1,0x6,0x18,0xe0,0xf,0x8,0x8,0x8,0xf,0x8,0x0,0x0,0xf0,0x10,0x20,0x40,0x80,0x60,0x1e,0x4,0xf0,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x10,0x20,0x20,0x49,0xfa,0x14,0x23,0x40,0xf8,0x43,0x2,0x1a,0xe2,0x43,0x2,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,0xf8,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x39,0x35,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x44,0x48,0x30,0x20,0x10,0x4e,0x84,0x0,
++0x0,0x7d,0x45,0x45,0x45,0x45,0x7d,0x11,0x51,0x5d,0x51,0x51,0x51,0x5d,0xe1,0x41,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x44,0x48,0x30,0x20,0x10,0x4e,0x84,0x0,
++0x10,0x10,0x14,0xfe,0x11,0x7c,0x10,0xfe,0x13,0x38,0x34,0x54,0x51,0x91,0x12,0x10,0x88,0x88,0x88,0x88,0xfc,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x8,0x8,0x8,0x8,
++0x0,0xff,0x1,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x29,0x5,0x2,0x5,0x18,0xe0,0x4,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x0,0x0,0x80,0x70,0xe,
++0x1,0x0,0x3f,0x20,0x20,0x2f,0x20,0x3f,0x20,0x2f,0x20,0x21,0x41,0x42,0x84,0x18,0x0,0x84,0xfe,0x80,0x88,0xfc,0x88,0xfe,0x88,0xf8,0x88,0x40,0x40,0x30,0xe,0x4,
++0x4,0x7f,0x1,0x3f,0x1,0xff,0x28,0x42,0x3f,0x1,0x1f,0x1,0xff,0x2,0xc,0x30,0x48,0xfc,0x0,0xf8,0x0,0xfe,0x28,0x84,0xf8,0x0,0xf0,0x4,0xfe,0x80,0x78,0x10,
++0x20,0x2f,0x20,0x27,0xfc,0x24,0x27,0x24,0x24,0x27,0x3c,0xe3,0x40,0x1,0x6,0x18,0x4,0xfe,0x40,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x40,0x80,0x60,0x1e,0x4,
++0x2,0xff,0x24,0x24,0x3c,0x24,0x24,0x3d,0x24,0x24,0x24,0x3e,0xe4,0x44,0x7,0x4,0x20,0x20,0x20,0x20,0xa4,0xac,0xb0,0x20,0x20,0x20,0x20,0x50,0x50,0x8e,0x4,0x0,
++0x10,0x1f,0x10,0x13,0xfe,0x12,0x33,0x3a,0x52,0x53,0x92,0x11,0x10,0x11,0x12,0x1c,0x4,0xfe,0x48,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x48,0x40,0x80,0x60,0x1e,0x4,
++0x0,0x0,0x7f,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,
++0x0,0x0,0x8,0xfd,0x11,0x12,0x14,0x11,0x11,0x11,0x10,0x1c,0xf0,0x41,0x2,0xc,0x80,0x80,0x80,0x8,0xfc,0x10,0x10,0x10,0x20,0x20,0xc0,0x40,0xa0,0x10,0xe,0x4,
++0x0,0x0,0x8,0xfc,0x10,0x17,0x10,0x10,0x10,0x10,0x1d,0xf1,0x41,0x2,0x4,0x8,0x80,0x80,0x80,0x80,0x84,0xfe,0x84,0x84,0x84,0x84,0x4,0x4,0x4,0x44,0x28,0x10,
++0x8,0x8,0x7f,0x8,0x8,0xff,0x4,0x9,0x11,0x21,0xc9,0x9,0x11,0x21,0x5,0x2,0x20,0x28,0xfc,0x20,0x24,0xfe,0x40,0x20,0x10,0xe,0x24,0x90,0x48,0x8,0x0,0x0,
++0x2,0x2,0xff,0x5,0x5,0x9,0x32,0xc8,0x8,0x3f,0x8,0x8,0xff,0x8,0x18,0x20,0x20,0x14,0xfe,0x0,0x64,0x84,0xfc,0x20,0x20,0xf8,0x20,0x24,0xfe,0x20,0x18,0x8,
++0x12,0x12,0x12,0x22,0x2f,0x62,0xa2,0x22,0x22,0x3f,0x20,0x22,0x22,0x24,0x28,0x20,0x10,0x10,0x10,0x10,0xfc,0x10,0x10,0x10,0x14,0xfe,0x0,0x10,0x8,0xc,0x4,0x0,
++0x8,0x12,0x3f,0x22,0x3e,0x22,0x3e,0x22,0x22,0xfe,0x6,0xa,0x12,0x22,0x4a,0x4,0x0,0x4,0xfe,0x4,0x4,0xfc,0x80,0x84,0xfe,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x0,0x0,0x4,0x4,0x8,0x8,0x11,0x21,0xc2,0x2,0x4,0x8,0x10,0x1f,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x20,0x10,0xe,0x4,0x0,0x0,0x40,0x20,0xf0,0x10,0x0,
++0x2,0x1,0x7f,0x40,0x80,0xf,0x8,0x8,0xf,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0xfe,0x2,0x24,0xf0,0x20,0x20,0xe0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x0,0x7f,0x0,0x0,0x0,0x3f,0x20,0x20,0x40,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0xe0,0x20,0x0,0x8,0xfc,0x8,0x8,0x8,0x90,0x50,0x20,
++0x0,0x9,0xfd,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x1d,0xf1,0x42,0x2,0x4,0x8,0x8,0xfc,0x8,0x8,0x8,0x8,0x48,0x28,0x28,0x8,0x8,0x8,0xa,0xa,0x6,0x0,
++0x0,0x3f,0x1,0x1,0xff,0x0,0x1,0x1,0x7d,0x5,0x9,0x11,0x21,0xc1,0x5,0x2,0x10,0xf8,0x0,0x4,0xfe,0x0,0x8,0x18,0xa0,0x40,0x20,0x10,0xe,0x4,0x0,0x0,
++0x11,0x11,0x11,0x11,0xfb,0x11,0x11,0x19,0x31,0xdf,0x10,0x11,0x11,0x12,0x54,0x20,0x10,0x10,0x10,0x10,0xfc,0x10,0x10,0x10,0x14,0xfe,0x0,0x10,0x8,0xc,0x4,0x0,
++0x0,0x3f,0x1,0x1,0xff,0x0,0x1f,0x10,0x11,0x11,0x11,0x11,0x11,0x2,0xc,0x30,0x10,0xf8,0x0,0x4,0xfe,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x8,0x8,0x8,0x8,0x7f,0x8,0x8,0x8,0x8,0x8,0xff,0x0,0x4,0xc,0x10,0x20,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,0x40,0x30,0x18,0x8,
++0x10,0x10,0x10,0x1c,0x21,0x22,0x7c,0x90,0x10,0x7c,0x11,0x10,0x14,0x18,0x10,0x0,0x80,0x80,0x84,0xfe,0x4,0x4,0x44,0x44,0x84,0xa4,0xf4,0x14,0x4,0x4,0x28,0x10,
++0x8,0x8,0x8,0xf,0x10,0x22,0x42,0x84,0x4,0x8,0x10,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x84,0x44,0xc4,0x44,0x4,0x28,0x10,
++0x2,0x42,0x32,0x13,0x84,0x68,0x20,0x1,0x9,0x12,0xe4,0x27,0x20,0x20,0x20,0x20,0x0,0x0,0x4,0xfe,0x4,0x84,0x84,0x4,0x4,0x44,0x24,0xe4,0x24,0x4,0x28,0x10,
++0x8,0x8,0xff,0x8,0x10,0x1f,0x20,0x20,0x5f,0x90,0x10,0x10,0x1f,0x10,0x0,0x0,0x20,0x24,0xfe,0x20,0x8,0xfc,0x8,0x88,0xc8,0x88,0x88,0x88,0x88,0x8,0x50,0x20,
++0x4,0x44,0x28,0x11,0x29,0x4a,0x8,0x9,0x19,0x29,0x49,0x89,0x9,0x8,0x50,0x20,0x80,0x80,0x84,0xfe,0x4,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x4,0x4,0x28,0x10,
++0x10,0x13,0x12,0x12,0xfe,0x13,0x12,0x12,0x12,0x12,0x16,0x1a,0xe4,0x44,0x8,0x0,0xc,0xf0,0x0,0x0,0x4,0xfe,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x30,0x38,0x54,0x50,0x11,0x11,0x10,0x10,0x10,0x10,0x80,0x80,0x84,0xfe,0x4,0x4,0x44,0x44,0x84,0xa4,0x14,0xf4,0x14,0x4,0x28,0x10,
++0x4,0x7e,0x44,0x54,0x55,0x56,0x54,0x54,0x54,0x54,0x55,0x55,0x10,0x28,0x44,0x84,0x80,0x80,0x84,0xfe,0x4,0x4,0x44,0x44,0x84,0xa4,0x14,0xf4,0x14,0x4,0x28,0x10,
++0x20,0x20,0x22,0x3f,0x42,0x83,0x7a,0x4a,0x4a,0x4b,0x4a,0x7a,0x42,0xa,0x4,0x0,0x20,0x20,0x7c,0x44,0x88,0x50,0x20,0x50,0x9e,0x22,0x44,0xa8,0x10,0x20,0x40,0x80,
++0x1,0xff,0x1,0x3f,0x20,0x3f,0x1,0x3f,0x8,0x4,0xff,0x1,0x3f,0x1,0x1,0x1,0x4,0xfe,0x0,0xf8,0x8,0xf8,0x0,0xf8,0x20,0x44,0xfe,0x0,0xf8,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x10,0x10,0xff,0x12,0x12,0x22,0x22,0x14,0x8,0x14,0x22,0x40,0x40,0x44,0xfe,0x40,0x20,0x24,0xfe,0x20,0x24,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x0,0x8,0x7c,0x48,0x4f,0x48,0x48,0x48,0x4b,0x4a,0x4a,0x7a,0x4a,0x2,0x3,0x2,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x1f,0x28,0x45,0x90,0x13,0x12,0xfe,0x12,0x1a,0x32,0xd2,0x12,0x12,0x53,0x20,0x40,0x7e,0xa0,0x10,0x0,0xfc,0x20,0x28,0xfc,0xa8,0xa8,0xa8,0xb8,0x20,0xfe,0x0,
++0x8,0x8,0x8,0x10,0x1f,0x30,0x50,0x90,0x13,0x12,0x12,0x12,0x12,0x12,0x13,0x12,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x30,0x10,0x87,0x60,0x20,0x8,0x13,0x22,0xe2,0x22,0x22,0x22,0x23,0x22,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x7c,0x7,0xa,0x12,0x12,0x16,0x1a,0x32,0xd2,0x12,0x12,0x14,0x15,0x58,0x20,0x8,0x3c,0xc0,0x10,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0xa8,0xee,0x24,0x0,
++0x10,0x10,0x10,0x10,0x13,0xfc,0x24,0x24,0x45,0x25,0x19,0x11,0x29,0x45,0x81,0x1,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x14,0xfe,0x11,0x7c,0x0,0x7d,0x44,0x44,0x7c,0x0,0x44,0x28,0xfe,0x40,0x3,0x20,0x20,0x24,0xfe,0x20,0x28,0xfc,0x88,0x88,0x88,0x50,0x20,0x50,0x48,0x8e,0x4,
++0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1f,0x10,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x1,0x1,0x1f,0x11,0x11,0x1f,0x11,0x1,0x3f,0x0,0x3f,0x24,0x24,0x24,0xff,0x0,0x0,0x10,0xf8,0x10,0x10,0xf0,0x0,0x8,0xfc,0x4,0xf8,0x48,0x48,0x48,0xfe,0x0,
++0x1f,0x10,0x1f,0x11,0x11,0x7f,0x40,0x9f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0xfe,0x2,0xf4,0x10,0xf0,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x8,0x8,0x10,0x21,0x41,0x2,0x4,0x8,0x30,0xc0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x40,0x30,0x18,0x8,0x0,0x80,0x40,0x30,0xe,0x4,0xf0,0x10,0x10,0x10,0xf0,0x10,
++0x4,0x3e,0x24,0x24,0x24,0x3d,0x26,0x25,0x24,0x3c,0x24,0x24,0x24,0x24,0x4d,0x86,0x8,0xfc,0x88,0x88,0x88,0xe,0x0,0xfc,0x84,0x88,0x48,0x70,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x10,0x14,0xfe,0x11,0x12,0x10,0x7c,0x44,0x44,0x44,0x44,0x7c,0x44,0x3,0x40,0x40,0x40,0x44,0xfe,0x8,0x88,0x88,0x88,0x88,0x50,0x20,0x20,0x50,0x8e,0x4,
++0x4,0x7f,0x40,0x40,0x5e,0x52,0x52,0x52,0x5a,0x54,0x50,0x52,0x54,0x58,0x80,0x1,0x4,0xfe,0x20,0x44,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0xa4,0x30,0x4c,0x86,0x2,
++0x0,0x7f,0x41,0x41,0x5f,0x41,0x41,0x4f,0x48,0x48,0x48,0x4f,0x48,0x40,0x7f,0x40,0x4,0xfe,0x4,0x24,0xf4,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x24,0x4,0xfc,0x4,
++0x2,0x1,0x3f,0x20,0x3f,0x22,0x22,0x27,0x24,0x2f,0x34,0x27,0x24,0x24,0x47,0x84,0x0,0x4,0xfe,0x4,0xfc,0x80,0x48,0xfc,0x40,0xf8,0x40,0xf8,0x40,0x48,0xfc,0x0,
++0x1,0x7e,0x8,0x8,0x9,0xff,0x8,0x8,0x9,0x7f,0x41,0x41,0x41,0x41,0x7f,0x41,0x84,0x4,0x4,0x24,0x24,0xa4,0x24,0x24,0x24,0xa4,0x24,0x24,0x4,0x4,0x14,0x8,
++0x0,0x1,0x3e,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x42,0x83,0x0,0x38,0xc0,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0x10,0x10,0x88,0x68,0xa6,0x4,0x0,
++0x0,0x3f,0x20,0x20,0x20,0x3f,0x24,0x4,0x7f,0x44,0x44,0x4a,0x51,0x40,0x41,0x40,0x84,0xc4,0x84,0x94,0x94,0x94,0x94,0x14,0xd4,0x54,0x54,0x54,0x44,0x44,0x54,0x88,
++0x1,0x7f,0x40,0x9f,0x2,0xf,0xa,0x9,0x8,0x7f,0x4,0xf,0x32,0xc2,0x4,0x18,0x0,0xfe,0x22,0xf4,0x0,0xe0,0x20,0x20,0xa8,0xfc,0x40,0xe0,0x5e,0x44,0x40,0xc0,
++0x10,0x10,0x10,0x17,0xfc,0x10,0x14,0x1f,0x30,0xd0,0x17,0x10,0x10,0x10,0x5f,0x20,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x41,0x21,0x21,0x7,0xf1,0x11,0x2f,0x71,0xa1,0x37,0x21,0x21,0x21,0x2f,0x24,0x20,0x10,0x10,0x10,0xd0,0x10,0x10,0xf8,0x16,0x12,0xd0,0x10,0x10,0xf0,0x10,0x10,0x10,
++0x0,0x1f,0x1,0x1,0xff,0x1,0x9,0x9,0x79,0x9,0x9,0x39,0xc9,0x1,0x1,0x1,0x70,0x80,0x0,0x4,0xfe,0x0,0x24,0x2c,0x30,0x20,0x22,0x22,0x1e,0x0,0x0,0x0,
++0x10,0x11,0x11,0xfd,0x11,0x15,0x18,0x30,0xd3,0x10,0x10,0x10,0x11,0x11,0x52,0x24,0x8,0xfc,0x8,0x8,0x8,0xf8,0x80,0x84,0xfe,0x84,0x84,0x84,0x4,0x4,0x14,0x8,
++0x10,0x17,0x12,0x11,0x58,0x54,0x50,0x93,0x1c,0x10,0x17,0x10,0x10,0x10,0x1f,0x10,0x8,0xfc,0x8,0x10,0xa0,0x40,0xb0,0xe,0x44,0x40,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x13,0x12,0xfc,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x11,0x40,0x20,0xfe,0x2,0x4,0xfc,0x4,0x4,0xfc,0x0,0xfc,0x4,0x4,0x4,0xfc,0x0,
++0x10,0x8,0x4,0x4,0x7f,0x1,0x1,0x1,0xff,0x1,0x2,0x2,0x4,0x8,0x30,0xc0,0x10,0x18,0x20,0x48,0xfc,0x0,0x0,0x4,0xfe,0x0,0x80,0x80,0x40,0x30,0xe,0x4,
++0x2,0x1,0x7f,0x40,0x80,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0x0,0xfe,0x2,0x14,0xf8,0x10,0x10,0xf0,0x0,0x10,0xf8,0x10,0x10,0xf0,0x0,
++0x0,0x7f,0x40,0x84,0x3e,0x0,0x2,0x7f,0x14,0x14,0x14,0x14,0x24,0x24,0x43,0x80,0x0,0xfe,0x2,0xc,0x8,0x8,0xfe,0x8,0x48,0x28,0x8,0x28,0x12,0x2,0xfe,0x0,
++0x0,0x1,0x7d,0x5,0x45,0x29,0x29,0x11,0x11,0x29,0x25,0x44,0x80,0x1,0x6,0x18,0x8,0xfc,0x8,0x28,0x28,0x28,0x28,0x48,0x48,0x48,0x68,0xa0,0xa0,0x22,0x22,0x1e,
++0x10,0x1f,0x28,0x45,0x1,0x7f,0x40,0x9f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x1f,0x10,0x40,0x7c,0x90,0x8,0x0,0xfe,0x2,0xf4,0x10,0xf0,0x0,0xf0,0x10,0x10,0xf0,0x0,
++0x20,0x20,0x23,0x3a,0x4c,0x51,0x81,0x21,0x21,0x21,0x21,0x25,0x29,0x31,0x21,0x1,0x80,0x40,0xfe,0x2,0x4,0xf8,0x8,0x8,0xf8,0x0,0xf8,0x8,0x8,0x8,0xf8,0x0,
++0x20,0x23,0x3c,0x51,0x91,0x11,0xfe,0x10,0x55,0x56,0x54,0x54,0x54,0x7c,0x44,0x0,0x88,0xfe,0x88,0xdc,0x54,0xdc,0x90,0xfc,0x90,0xfc,0x90,0xfc,0x90,0x94,0xfe,0x80,
++0x10,0x13,0x12,0x1f,0x5a,0x57,0x50,0x93,0x12,0x12,0x12,0x12,0x12,0x10,0x11,0x16,0x8,0xfc,0x48,0xfe,0x48,0xf8,0x0,0xf8,0x8,0x48,0x48,0x48,0x48,0xb0,0xc,0x4,
++0x1,0x4f,0x31,0x17,0x84,0x67,0x22,0x3,0x16,0x2b,0xc2,0x43,0x42,0x42,0x43,0x42,0x10,0xfe,0x10,0xbc,0xa4,0xbc,0x20,0xfc,0x20,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x0,0x1f,0x11,0x11,0xff,0x11,0x1f,0x0,0x1f,0x10,0x11,0x11,0x11,0x2,0xc,0x30,0x10,0xf8,0x10,0x14,0xfe,0x10,0xf0,0x0,0xf0,0x10,0x10,0x10,0x10,0x60,0x18,0x8,
++0x1,0x21,0x11,0x9,0x9,0x1,0xff,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x0,0x8,0xc,0x10,0x20,0x4,0xfe,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x1,0x0,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x84,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x40,0x29,0x27,0x2,0x6,0xea,0x22,0x26,0x2a,0x32,0x22,0x2b,0x24,0x50,0x8f,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0xf8,0x20,0x20,0x20,0x28,0xfc,0x0,0x6,0xfc,0x0,
++0x0,0x11,0xfb,0x22,0x22,0x23,0xfa,0x22,0x23,0x22,0x20,0x39,0xe1,0x42,0x4,0x8,0x80,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x80,0xd0,0x68,0x78,0x42,0x42,0x3e,
++0x10,0x10,0x11,0x11,0x7d,0x11,0x15,0xff,0x11,0x11,0x10,0x28,0x24,0x41,0x82,0x4,0x0,0x8,0xfc,0x28,0x28,0x28,0x28,0x48,0x48,0x48,0x40,0x90,0x90,0x12,0x12,0xe,
++0x1,0x1,0x1,0x7f,0x1,0x1,0xff,0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x8,0xfc,0x0,0x4,0xfe,0x0,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x4,0xfe,0x11,0x10,0x20,0x23,0x7c,0xa4,0x24,0x25,0x24,0x24,0x3c,0x27,0x0,0x20,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x4,0x4,0x25,0x24,0x24,0x24,0x24,0x25,0x24,0x24,0x24,0x4,0x8,0x13,0x60,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x8,0x8,0x1f,0x10,0x20,0x7f,0xa1,0x21,0x3f,0x21,0x21,0x3f,0x21,0x1,0x1,0x0,0x0,0x0,0xe0,0x40,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0xa,0x2,0x2,0xfe,
++0x20,0x1b,0x49,0x41,0x4f,0x41,0x41,0x5f,0x41,0x41,0x4f,0x41,0x41,0x5f,0x40,0x40,0x4,0xfe,0x4,0x44,0xe4,0x4,0x24,0xf4,0x4,0x44,0xe4,0x4,0x24,0xf4,0x4,0xc,
++0x10,0x10,0x14,0xfe,0x21,0x28,0x48,0x7e,0x8,0x8,0x8,0xfe,0x8,0x8,0x9,0xa,0x40,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0x48,0x48,0x48,0x88,0x8a,0x8a,0x6,0x0,
++0x2,0x4,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x22,0x2,0x4,0x4,0x8,0x10,0x60,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x88,0x80,0x90,0xa8,0xba,0x82,0x7e,
++0x1,0x41,0x21,0x22,0x4,0xb,0xe2,0x22,0x22,0x22,0x22,0x26,0x2a,0x32,0x24,0x8,0x0,0x0,0xf0,0x20,0x44,0xfe,0x0,0xf8,0x88,0x88,0xa8,0x90,0x82,0x82,0x7e,0x0,
++0x0,0x3e,0x2,0x24,0x18,0x10,0x20,0x4f,0x81,0x1,0x3f,0x1,0x2,0x4,0x18,0x60,0x80,0x90,0xa0,0x48,0x50,0x20,0x10,0xee,0x4,0x10,0xf8,0x0,0xc0,0x30,0x18,0x8,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x37,0x38,0x54,0x50,0x93,0x10,0x10,0x10,0x1f,0x10,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x13,0x12,0x12,0xfe,0x13,0x32,0x3a,0x56,0x53,0x92,0x12,0x12,0x12,0x13,0x10,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x4,0xfe,0x0,
++0x4,0x7e,0x44,0x45,0x46,0x7d,0x51,0x11,0x51,0x5d,0x51,0x51,0x5d,0xf2,0x44,0x8,0x80,0x80,0xf8,0x10,0x24,0xfe,0x8,0x7c,0x48,0x48,0x68,0x50,0x42,0x42,0x3e,0x0,
++0x1,0x1,0x3f,0x21,0x3f,0x1,0xff,0x0,0x1f,0x10,0x11,0x11,0x11,0x2,0xc,0x30,0x0,0x8,0xfc,0x8,0xf8,0x0,0xfe,0x10,0xf8,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x8,0x8,0x14,0x22,0x41,0xbe,0x0,0x2,0x7f,0x8,0x8,0x10,0x22,0x7f,0x1,0x0,0x4,0x4,0x4,0x24,0xa4,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x20,0x23,0x22,0xfe,0x43,0x42,0x92,0xff,0x12,0x12,0x1f,0xf2,0x52,0x12,0x13,0x10,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x24,0x2c,0xb0,0x20,0x22,0xa2,0x1e,0x0,
++0x0,0x40,0x37,0x11,0x83,0x64,0x20,0x9,0x13,0x20,0xe1,0x23,0x25,0x29,0x21,0x21,0x80,0x48,0xfc,0x10,0x4c,0x44,0x80,0x10,0xf8,0x80,0x44,0x28,0x10,0x4e,0x84,0x0,
++0x10,0x13,0x12,0x12,0xff,0x12,0x32,0x3b,0x56,0x52,0x93,0x12,0x12,0x12,0x13,0x10,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x24,0x2c,0xb0,0x20,0x22,0xa2,0x1e,0x0,
++0x10,0x11,0x11,0x1d,0x21,0x21,0x7d,0x90,0x13,0xfe,0x12,0x12,0x17,0x1a,0x12,0x2,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x44,0xfe,0x44,0x64,0x9c,0xc,0x4,0x14,0x8,
++0x8,0x4,0xff,0x0,0x3f,0x21,0x21,0x3f,0x0,0x7f,0x2,0x4,0xff,0x4,0x14,0x8,0x0,0x7c,0xc4,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x0,0x7f,0x40,0x5f,0x41,0x41,0x41,0x4f,0x41,0x41,0x41,0x41,0x5f,0x40,0x7f,0x40,0x4,0xfe,0x24,0xf4,0x4,0x4,0x44,0xe4,0x4,0x44,0x24,0x4,0xf4,0x4,0xfc,0x4,
++0x0,0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x1,0xff,0x3,0x5,0x9,0x11,0x61,0x1,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x4,0xfe,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x1,0x7f,0x0,0x1f,0x11,0x1f,0x11,0x1f,0x1,0xff,0x9,0x35,0xc,0x14,0x65,0x6,0x0,0xfc,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x20,0x18,0xa0,0x40,0x3c,0x8,
++0x0,0x40,0x20,0x17,0x0,0x0,0xf1,0x10,0x10,0x10,0x10,0x10,0x10,0x28,0x47,0x0,0x10,0x10,0x10,0xfc,0x10,0x10,0x10,0x90,0x90,0x10,0x10,0x50,0x20,0x6,0xfc,0x0,
++0x0,0x0,0x8,0x7c,0x49,0x49,0x4a,0x4d,0x48,0x48,0x4b,0x7a,0x4a,0x2,0x3,0x2,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0xf4,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x7e,0x44,0x77,0x54,0x54,0xfe,0x82,0x7c,0x44,0x7c,0x45,0x7c,0x44,0x54,0x4b,0x40,0x20,0x4,0xfe,0x20,0x20,0x44,0xfc,0x10,0x24,0x44,0x88,0x10,0x28,0xc6,0x2,
++0x0,0xfc,0x4,0xb,0x10,0x10,0x15,0x1b,0x31,0xd0,0x10,0x11,0x16,0x10,0x51,0x26,0x80,0x40,0x4,0xfe,0x40,0x80,0x8,0xf8,0x10,0x24,0x4c,0x90,0x20,0x50,0x8c,0x4,
++0x2,0x42,0x33,0x14,0x8b,0x62,0x22,0xa,0x1f,0x24,0xe4,0x24,0x27,0x20,0x20,0x20,0x0,0x8,0xfc,0x0,0xf8,0x88,0x48,0x8,0xfe,0x88,0x48,0x8,0xfc,0x8,0x28,0x10,
++0x10,0x1f,0x10,0x2f,0x40,0xbf,0x2,0x3f,0x4,0x8,0x3f,0x2,0xc,0x31,0x46,0x18,0x8,0xfc,0x0,0xf8,0x0,0xf8,0x8,0xe8,0x8,0x88,0x8,0x8,0x88,0x8a,0x6a,0x24,
++0x2,0x1,0x1,0xff,0x1,0x2,0x4,0x8,0x1f,0x2,0x4,0x8,0x31,0x6,0x18,0x60,0x0,0x0,0x4,0xfe,0x0,0x20,0x60,0x80,0x10,0x30,0x40,0xc0,0x20,0x10,0xc,0x4,
++0x2,0x1,0x7f,0x41,0x9f,0x1,0x1f,0x1,0x7f,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0xfe,0x2,0xf4,0x0,0xf0,0x0,0xfc,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x8,0xfc,0x8,0x4f,0x48,0x48,0x49,0x4b,0x7d,0x4,0x4,0x1d,0xe6,0x44,0x15,0xa,0x80,0x40,0x44,0xfe,0x40,0x80,0x8,0xf8,0x10,0x24,0x4c,0x90,0x20,0x58,0x8c,0x4,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x63,0x41,0x41,0x7f,0x41,0x41,0x7f,0x41,0x44,0xc4,0x44,0x44,0xfe,0x44,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x44,0x7c,0x44,
++0x3e,0x4,0xff,0x22,0x3f,0x22,0x3e,0x22,0xff,0x2,0xa,0x29,0x28,0x48,0x7,0x0,0x40,0x44,0x7e,0x84,0x44,0x48,0x28,0x10,0x2e,0xc4,0x0,0x88,0xa4,0x24,0xe0,0x0,
++0x22,0x22,0x22,0x22,0xff,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x22,0x3e,0x22,0x0,0x0,0x7c,0x44,0x44,0xc8,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0xa,0xff,0x8,0x8,0x7f,0x41,0x7f,0x41,0x7f,0x8,0x9,0xff,0x8,0x8,0x8,0x20,0x20,0x24,0xfe,0x20,0x28,0xfc,0x20,0x20,0xfe,0x22,0x22,0xaa,0x24,0x20,0x20,
++0x1,0x1,0x2,0x4,0xa,0x11,0x20,0xdf,0x0,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x80,0x40,0x20,0x90,0x8e,0xe4,0x40,0x90,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x40,0x37,0x10,0x0,0x84,0x44,0x46,0xd,0x14,0x25,0xe6,0x24,0x25,0x24,0x27,0x24,0x0,0xfc,0x8,0x10,0x64,0x44,0x4c,0x54,0xe4,0x54,0x4c,0x44,0x44,0x84,0xfc,0x4,
++0x2,0x1,0x7f,0x44,0x9f,0x4,0x1f,0x4,0x7f,0x4,0xb,0x10,0x20,0xc6,0x1,0x0,0x0,0x0,0xfe,0x42,0xf4,0x40,0xf0,0x40,0xfc,0x40,0x20,0x90,0x4e,0x4,0x80,0x40,
++0x0,0x1f,0x0,0x0,0x41,0x51,0x49,0x45,0x41,0x45,0x49,0x51,0x45,0x42,0x7f,0x40,0x0,0xf0,0x20,0x40,0x84,0x14,0x34,0x44,0x4,0x44,0x34,0x14,0x4,0x4,0xfc,0x4,
++0x0,0x10,0x78,0x57,0x54,0x57,0x54,0x55,0x55,0x55,0x55,0x75,0x45,0x8,0x11,0x20,0x10,0x18,0x14,0xfe,0x10,0xf0,0x14,0xd4,0x54,0x54,0x58,0xd0,0x28,0x4a,0x8a,0x4,
++0x0,0x7f,0x40,0x84,0x8,0x0,0x3f,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x0,0xfe,0x2,0x44,0x20,0x0,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x14,0xfe,0x11,0x7e,0x45,0x7c,0x45,0x7c,0x10,0xfe,0x11,0x10,0x11,0x10,0x20,0x20,0x50,0x88,0x6,0x4,0xdc,0x44,0x54,0xcc,0x44,0xcc,0x54,0x44,0x54,0x88,
++0x10,0x10,0x10,0x17,0xfc,0x17,0x14,0x1d,0x35,0xd5,0x15,0x14,0x19,0x13,0x55,0x20,0x10,0x14,0x10,0xfe,0x10,0xf0,0x14,0xd4,0x58,0x52,0xea,0x6,0x40,0x24,0xa,0xf8,
++0x13,0x12,0x12,0x13,0xfa,0x12,0x13,0x18,0x37,0xd0,0x10,0x1f,0x10,0x10,0x50,0x20,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x40,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x0,0x3f,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,0x0,0xf8,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x10,0x10,0x10,0x17,0x5c,0x57,0x54,0x95,0x15,0x15,0x15,0x14,0x19,0x13,0x15,0x10,0x10,0x14,0x10,0xfe,0x10,0xf0,0x14,0xd4,0x58,0x52,0xea,0x6,0x40,0x24,0xa,0xf8,
++0x13,0x12,0x12,0x13,0x5a,0x56,0x53,0x90,0x17,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x11,0x11,0x11,0x15,0x59,0x51,0x51,0x90,0x13,0x10,0x10,0x2b,0x24,0x44,0x80,0x0,0xfc,0x4,0x4,0xfc,0x4,0x4,0xfc,0x0,0xfe,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x47,0x30,0x10,0x80,0x60,0x20,0xf,0x10,0x20,0xe0,0x20,0x20,0x20,0x20,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x40,0x37,0x10,0x82,0x62,0x22,0x9,0x11,0x20,0xe0,0x20,0x21,0x22,0x24,0x8,0x0,0x8,0xfc,0x8,0x8,0x8,0x10,0x10,0x20,0xa0,0x40,0xa0,0x10,0x8,0xe,0x4,
++0x1,0x1,0x1,0x7f,0x2,0x4,0xa,0x32,0xc2,0x1f,0x2,0x2,0x2,0x4,0x8,0x30,0x0,0x0,0x8,0xfc,0x80,0x40,0x30,0xe,0x4,0xf0,0x10,0x10,0x10,0x10,0xa0,0x40,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x12,0x14,0x18,0x80,0x40,0x48,0xfc,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x8,0x10,0x3e,0x23,0x32,0x2a,0x22,0xfe,0x22,0x32,0x2a,0x22,0x22,0x22,0x4a,0x85,0x40,0x30,0x14,0xfe,0x0,0x8,0x7c,0x48,0x48,0x48,0x48,0x48,0x4a,0x4a,0x86,0x0,
++0x20,0x23,0x20,0x21,0xf9,0x27,0x24,0x2b,0x20,0x23,0x20,0x3b,0xe0,0x47,0x0,0x0,0x40,0xfc,0x0,0xf8,0x8,0xfe,0x2,0xfc,0xc0,0x68,0xb0,0x28,0xe6,0x24,0xa0,0x40,
++0x0,0x17,0xf8,0x91,0x91,0x97,0x94,0x9b,0x90,0x91,0x96,0xf1,0x96,0x1,0x6,0x0,0x48,0xfc,0x0,0xf0,0x10,0xfe,0x2,0xfc,0x80,0x48,0xf0,0x50,0xce,0x44,0x40,0xc0,
++0x1,0x7f,0x0,0xf,0x8,0x7f,0x40,0x9f,0x6,0xb,0x35,0x9,0x33,0x5,0x39,0x3,0x8,0xfc,0x0,0xe0,0x20,0xfe,0x2,0xf4,0x10,0x20,0x40,0x80,0x60,0x1c,0x8,0x0,
++0x1,0x7f,0x0,0xf,0x8,0xf,0x0,0x7f,0x40,0x9f,0x1,0xf,0x1,0x3f,0x1,0x0,0x8,0xfc,0x20,0xf0,0x20,0xe0,0x0,0xfe,0x2,0xf4,0x0,0xe0,0x0,0xf4,0x4,0xfc,
++0x8,0x8,0xa,0x7f,0x8,0x9,0xff,0x14,0x14,0x56,0x55,0x95,0x24,0x24,0x4c,0x80,0x0,0x7c,0x44,0x44,0x48,0x48,0xd0,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x10,0x11,0x10,0x10,0xfc,0x24,0x24,0x27,0x24,0x44,0x28,0x10,0x28,0x44,0x84,0x0,0x0,0xfc,0x4,0x8,0x10,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x10,0x15,0xfe,0x10,0x7c,0x11,0xfe,0x10,0x38,0x35,0x54,0x50,0x90,0x10,0x10,0x8,0x3c,0xc0,0x40,0x50,0x78,0xc0,0x40,0x48,0x7c,0xc0,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x1f,0x0,0xff,0x4,0x8,0x1f,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0xa0,0x40,
++0x40,0x32,0x12,0x3,0x84,0x68,0x20,0xf,0x10,0x23,0xe2,0x22,0x22,0x22,0x23,0x22,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0xb,0x7c,0x48,0x48,0x4b,0x4a,0x4a,0x4a,0x4a,0x4b,0x7a,0x48,0x0,0x0,0x0,0x4,0xfe,0x8,0x8,0x48,0xe8,0x48,0x48,0x48,0x48,0xc8,0x48,0x8,0x8,0x28,0x10,
++0x0,0xb,0x7e,0x4b,0x4a,0x4b,0x48,0x49,0x4a,0x4c,0x4a,0x7a,0x4a,0x3,0x0,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x84,0xfe,0x4,0x44,0x44,0xa4,0x4,0xe4,0x14,0x8,
++0x8,0x8,0xff,0x8,0x10,0x1f,0x10,0x30,0x53,0x92,0x12,0x12,0x13,0x12,0x10,0x10,0x20,0x24,0xfe,0x20,0x4,0xfe,0x8,0x48,0xe8,0x48,0x48,0x48,0xc8,0x8,0x28,0x10,
++0x8,0x8,0xff,0x8,0x40,0x3f,0x10,0x80,0x63,0x22,0xa,0x12,0xe3,0x22,0x20,0x20,0x20,0x24,0xfe,0x20,0x4,0xfe,0x8,0x48,0xe8,0x48,0x48,0x48,0xc8,0x8,0x28,0x10,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x39,0x37,0x55,0x50,0x90,0x11,0x16,0x10,0x11,0x16,0x80,0x40,0x44,0xfe,0x40,0x80,0x8,0xf8,0x10,0x24,0x4c,0x90,0x20,0x50,0x8c,0x4,
++0x0,0x0,0x3f,0x1,0x1,0x1,0xff,0x1,0x3,0x5,0x9,0x11,0x21,0x41,0x1,0x1,0x10,0x38,0xc0,0x0,0x0,0x4,0xfe,0x0,0x80,0x40,0x20,0x18,0xe,0x4,0x0,0x0,
++0x2,0x7,0x78,0x8,0xa,0xff,0x8,0x18,0x1c,0x2a,0x2a,0x48,0x88,0x8,0x8,0x8,0x0,0x0,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,0x0,0x0,
++0x8,0x8,0xf,0x10,0x10,0x33,0x52,0x92,0x12,0x12,0x13,0x12,0x10,0x10,0x10,0x10,0x0,0x4,0xfe,0x8,0x48,0xe8,0x48,0x48,0x48,0x48,0xc8,0x48,0x8,0x8,0x28,0x10,
++0x1,0x1,0x2,0x4,0x8,0x10,0x2f,0xc0,0x0,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x80,0x40,0x20,0x10,0xee,0x4,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x1,0x2,0x4,0xf,0x10,0x2f,0xc8,0x8,0xf,0x0,0x1f,0x12,0x12,0x12,0xff,0x0,0x0,0x80,0x40,0xe0,0x10,0xee,0x24,0x20,0xe0,0x10,0xf8,0x90,0x90,0x94,0xfe,0x0,
++0x8,0x10,0x24,0x54,0x89,0x52,0x28,0x4c,0x94,0x27,0x4c,0x94,0x24,0x44,0x14,0x8,0x40,0x40,0x7c,0x84,0x88,0x50,0x20,0x50,0x88,0xe,0xfc,0x88,0x88,0x88,0xf8,0x88,
++0x20,0x1b,0x48,0x42,0x41,0x5f,0x41,0x42,0x44,0x4f,0x42,0x44,0x49,0x52,0x44,0x40,0x4,0xfe,0x4,0x4,0x24,0xf4,0x4,0x44,0x84,0x24,0x44,0x84,0x84,0x64,0x24,0xc,
++0x40,0x3f,0x10,0x0,0x80,0x67,0x24,0xc,0x14,0x24,0xe7,0x24,0x20,0x20,0x20,0x20,0x4,0xfe,0x8,0x8,0x48,0xe8,0x48,0x48,0x48,0x48,0xc8,0x48,0x8,0x8,0x28,0x10,
++0x40,0x37,0x14,0x4,0x87,0x64,0x24,0xd,0x15,0x25,0xe5,0x25,0x25,0x24,0x27,0x24,0x4,0xfe,0x44,0x54,0xfc,0x44,0x54,0xfc,0x14,0x14,0x14,0xf4,0x14,0x4,0xfc,0x4,
++0x8,0x8,0x7e,0x8,0x8,0xff,0x14,0x14,0x36,0x75,0x94,0x14,0x14,0x14,0x24,0x4d,0x20,0x28,0xfc,0x20,0x24,0xfe,0x50,0x50,0xd8,0x56,0x52,0x50,0x50,0x50,0x90,0x30,
++0x40,0x23,0x22,0x3,0xfa,0x13,0x21,0x6b,0xb4,0x28,0x22,0x22,0x22,0x23,0x20,0x20,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x4,0x44,0x44,0xa4,0x4,0xe4,0x14,0x8,
++0x8,0x8,0x7f,0x52,0x90,0x28,0x7e,0xa8,0x3e,0x28,0x3e,0x28,0x29,0x3e,0x20,0x20,0x20,0x48,0xfc,0x88,0xa8,0x88,0xa8,0x90,0x84,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x10,0x7f,0x11,0x11,0x25,0x42,0x9f,0x10,0x11,0x11,0x11,0x11,0x2,0xc,0x30,0x0,0x4,0x7e,0x44,0x44,0x7c,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x0,0xb,0x7e,0x4b,0x4a,0x4a,0x4a,0x4b,0x48,0x4b,0x48,0x4f,0x78,0x4a,0x2,0x4,0x8,0xfc,0x48,0x58,0xe8,0x48,0x48,0xf8,0x40,0xf8,0x40,0xfe,0x0,0xa8,0xa4,0x4,
++0x0,0x3f,0x21,0x31,0x2d,0x25,0x21,0x3f,0x1,0x7f,0x1,0xff,0x0,0x28,0x24,0x44,0x8,0xfc,0x8,0x28,0x38,0x48,0x8,0xf8,0x0,0xfc,0x0,0xfe,0x0,0x90,0x4c,0x44,
++0x1,0x0,0x1f,0x10,0x97,0x54,0x57,0x14,0x37,0x54,0xd4,0x14,0x24,0x25,0x46,0x4,0x0,0x84,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x84,0x8c,0x50,0x20,0x10,0xe,0x4,
++0x8,0xb,0x12,0x12,0x23,0x4a,0x8a,0x13,0x32,0x52,0x92,0x12,0x12,0x12,0x13,0x12,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x8c,0x50,0x20,0x10,0x88,0xe,0x4,
++0x0,0x8b,0x5a,0x22,0x53,0x8a,0xa,0x1b,0x2a,0x4a,0x8a,0xa,0xa,0xa,0x53,0x22,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x8c,0x50,0x20,0x10,0x88,0xe,0x4,
++0x10,0x13,0x12,0x12,0x5b,0x56,0x52,0x93,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x12,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x8c,0x50,0x20,0x10,0x88,0xe,0x4,
++0x0,0x8,0x7f,0x48,0x49,0x49,0x49,0x49,0x48,0x4b,0x48,0x78,0x48,0x0,0x0,0x0,0x40,0x24,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x0,0xfc,0x8,0x30,0x20,0x20,0xa0,0x40,
++0x2,0x1,0xff,0x0,0x1f,0x10,0x10,0x1f,0x0,0x3f,0x0,0x1,0x1,0x1,0x5,0x3,0x0,0x4,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x0,0xf8,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x11,0x11,0x17,0x11,0xfd,0x17,0x30,0x3b,0x56,0x53,0x92,0x13,0x10,0x11,0x13,0x14,0x10,0x10,0xfc,0x10,0x14,0xfe,0x48,0xfc,0x48,0xf8,0x48,0xf8,0x0,0x10,0xc,0x4,
++0x12,0x13,0x24,0x49,0x9f,0x19,0x2f,0x69,0xaf,0x21,0x21,0x3f,0x22,0x24,0x28,0x20,0x0,0xc4,0x9e,0x0,0xe0,0x20,0xfe,0x24,0xe4,0x4,0x24,0xf4,0x84,0x44,0x54,0x8,
++0x10,0x17,0x10,0x10,0x5b,0x56,0x52,0x93,0x12,0x12,0x13,0x10,0x10,0x1f,0x10,0x10,0x8,0xfc,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x0,0x0,
++0x2,0x7f,0x8,0x11,0x3f,0x1,0xff,0x1,0x1,0x7e,0x22,0x14,0x8,0x14,0x22,0xc1,0x8,0xfc,0x0,0x0,0xf8,0x0,0xfe,0x0,0x0,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x0,0x8,0x7c,0x48,0x4b,0x48,0x48,0x48,0x48,0x48,0x4f,0x78,0x48,0x0,0x1,0x2,0x90,0x90,0x90,0x90,0xfc,0x90,0x90,0x90,0x90,0x94,0xfe,0x0,0x90,0x88,0xc,0x4,
++0x10,0x10,0x10,0x10,0x57,0x58,0x50,0x90,0x10,0x10,0x17,0x28,0x24,0x44,0x81,0x2,0x90,0x90,0x90,0x90,0xfc,0x90,0x90,0x90,0x90,0x94,0xfe,0x0,0x90,0x88,0xc,0x4,
++0x10,0x10,0x15,0x7e,0x54,0x54,0x54,0x54,0x7c,0x50,0x10,0x14,0x1e,0xe2,0x47,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x40,0x30,0x10,0x2,0x9f,0x64,0x24,0x4,0x14,0x14,0xe7,0x3c,0x29,0x20,0x20,0x20,0x20,0x48,0xfc,0x88,0xa8,0x88,0xa8,0x90,0x84,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x42,0x32,0x12,0x2,0x8f,0x62,0x22,0xa,0x12,0x3f,0xe0,0x22,0x22,0x24,0x24,0x28,0x10,0x10,0x10,0x10,0xfc,0x10,0x10,0x10,0x14,0xfe,0x0,0x20,0x10,0x8,0xc,0x4,
++0x2,0x1,0x7f,0x40,0x82,0x2,0xff,0x4,0x4,0x8,0x9,0x11,0x12,0x24,0x4f,0x0,0x0,0x0,0xfc,0x4,0x8,0x0,0xfe,0x0,0x80,0x80,0x0,0x0,0x20,0x10,0xf8,0x8,
++0x4,0xfe,0x4,0x4,0x4,0x7c,0x40,0x40,0x44,0x7e,0x4,0x4,0x5,0x45,0x2b,0x10,0x20,0x20,0x20,0x20,0x40,0x40,0x40,0x40,0x80,0x80,0x80,0x90,0x8,0x4,0xfc,0x4,
++0x10,0x10,0x23,0x20,0x44,0xf8,0x10,0x20,0x40,0xfc,0x40,0x0,0x1c,0xe0,0x47,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x1,0x9,0x7d,0x4a,0x4a,0x4e,0x4a,0x4a,0x4a,0x4a,0x4b,0x7a,0x4a,0x2,0x2,0x2,0x8,0x7c,0x8,0x8,0xfe,0x0,0x40,0x7e,0x90,0x14,0xfe,0x10,0x20,0x28,0x46,0x82,
++0x8,0xb,0x8,0x10,0x17,0x32,0x52,0x93,0x14,0x10,0x1f,0x10,0x10,0x10,0x11,0x16,0x10,0xf8,0x10,0x10,0xfc,0x0,0x8,0xfc,0x40,0x44,0xfe,0x40,0xa0,0x90,0xe,0x4,
++0x5,0x89,0x51,0x22,0x53,0x96,0x1a,0x12,0x33,0x52,0x93,0x12,0x12,0x12,0x52,0x23,0x8,0xfc,0x8,0x8,0xfe,0x0,0x88,0xfc,0x20,0x24,0xfe,0x20,0x20,0x50,0x8e,0x4,
++0x0,0x7,0x78,0x48,0x49,0x49,0x49,0x49,0x49,0x4f,0x49,0x79,0x49,0x1,0x5,0x2,0x10,0xd0,0x50,0x90,0x10,0x10,0x10,0x50,0x90,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x0,0x3f,0x20,0x2f,0x28,0x2f,0x28,0x2f,0x20,0x2f,0x20,0x20,0x5f,0x40,0x82,0x1,0x8,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xf8,0x40,0x84,0xfe,0x80,0x80,0x0,
++0x10,0x13,0x20,0x28,0x6f,0xa9,0x29,0x2b,0x2c,0x28,0x2f,0x28,0x28,0x21,0x22,0x24,0x10,0xf8,0x10,0x14,0xfe,0x0,0x8,0xfc,0x40,0x44,0xfe,0x40,0xa0,0x10,0xe,0x4,
++0x0,0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x27,0x24,0x24,0x24,0x44,0x44,0x87,0x4,0x10,0x78,0x80,0x0,0x4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x8,0x7f,0x48,0x4a,0x49,0x49,0x48,0x4f,0x48,0x48,0x78,0x48,0x0,0x1,0x0,0x8,0x1c,0xe0,0x40,0x48,0x58,0x60,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x0,0x3f,0x1,0x1,0x11,0xd,0x5,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x78,0x80,0x0,0x0,0x10,0x30,0x40,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x8,0xf,0x12,0x12,0x22,0x44,0x4,0x9,0x12,0x2,0x29,0x28,0x48,0x7,0x0,0x0,0x8,0xfc,0x48,0x48,0x48,0x88,0x88,0x28,0x10,0x0,0x88,0xa4,0x24,0xe0,0x0,
++0x1,0x11,0xf9,0x27,0x21,0x21,0xf9,0x27,0x24,0x24,0x24,0x3c,0xe7,0x44,0x0,0x1,0x4,0x3e,0x24,0xe4,0x24,0x3c,0x24,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0x44,0x94,0x8,
++0x1,0x1,0x7f,0x1,0x3f,0x1,0x7f,0x44,0x84,0x24,0x14,0xc,0x4,0x4,0x7f,0x0,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x44,0x40,0x48,0x58,0x60,0x40,0x48,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x8,0x9,0x7f,0x8,0xa,0x3f,0x22,0x22,0x22,0x3e,0x22,0x1,0x40,0x44,0xfe,0x40,0x7c,0x44,0xc4,0x7c,0x44,0x44,0x7c,0x44,0x44,0x44,0x94,0x8,
++0x8,0x8,0x8,0x9,0xff,0x8,0x8,0xa,0x3f,0x22,0x22,0x22,0x22,0x3e,0x22,0x1,0x4,0x7e,0x44,0x44,0xc4,0x7c,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x44,0x94,0x8,
++0x21,0x21,0x21,0x21,0xf9,0xaf,0xa9,0xa9,0xab,0xfa,0xa2,0x2a,0x3b,0xea,0x0,0x1,0x4,0x3e,0x24,0x24,0x24,0xfc,0x24,0x24,0xa4,0xbc,0xa4,0xa4,0xa4,0x44,0x94,0x8,
++0x0,0x88,0x53,0x22,0x52,0x92,0x12,0x12,0x32,0x52,0x92,0x12,0x14,0x15,0x58,0x20,0x8,0x1c,0xe0,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xa8,0x94,0xf6,0x4,0x0,
++0x11,0x11,0x55,0x39,0x17,0x11,0xfd,0x33,0x3a,0x56,0x52,0x93,0x12,0x10,0x10,0x11,0x4,0x3e,0x24,0x24,0xe4,0x3c,0x24,0xa4,0xa4,0xbc,0xa4,0xa4,0x24,0x44,0x94,0x8,
++0x42,0x32,0x12,0x2,0x9f,0x62,0x22,0xf,0x18,0x28,0xc8,0x48,0x48,0x4f,0x48,0x40,0x4,0x3e,0x24,0x24,0xe4,0x3c,0xa4,0xe4,0xa4,0xbc,0xa4,0xa4,0xa4,0xa4,0x54,0x88,
++0x0,0xf8,0xb,0xa,0xa,0x7a,0x42,0x42,0x42,0x7a,0xa,0xa,0xa,0xa,0x54,0x28,0x8,0x1c,0xe8,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xa8,0x94,0xf6,0x4,
++0x1,0x1,0x1,0x3f,0x22,0x22,0x3f,0x22,0x21,0x20,0x27,0x24,0x24,0x24,0x48,0x90,0x20,0xf0,0x0,0xfc,0x4,0x68,0x80,0x8,0xf8,0x40,0xe0,0x40,0x40,0x44,0x44,0x3c,
++0x0,0x8,0x7c,0x4b,0x4a,0x4a,0x4b,0x4a,0x4a,0x4a,0x4a,0x7a,0x4c,0x8,0x11,0x6,0x48,0x7c,0x40,0xfe,0x42,0x5c,0xe0,0x44,0x3c,0x10,0xf8,0x90,0x90,0x92,0x12,0xe,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x16,0x1b,0x32,0xd2,0x12,0x12,0x12,0x14,0x54,0x28,0x80,0x60,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x8,0x8,0xf,0x8,0x8,0x8,0x8,0x10,0x1f,0x0,0x0,0x0,0xff,0x0,0x8,0xfc,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0xe0,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x40,0x30,0x13,0x82,0x62,0x22,0xb,0x12,0x12,0xe2,0x22,0x22,0x24,0x24,0x28,0x80,0x60,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x0,0x0,0x3f,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,0x0,0x80,0x84,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x8,0xff,0x8,0x8,0x8,0x10,0x10,0x30,0x50,0x90,0x11,0x12,0x14,0x10,0x10,0x20,0x24,0xfe,0x20,0x20,0x80,0x88,0x98,0xa0,0xc0,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x8,0x7d,0x49,0x4b,0x4d,0x49,0x49,0x49,0x48,0x4f,0x78,0x48,0x0,0x0,0x0,0xa0,0xa4,0x2c,0x30,0x60,0x22,0x22,0x1e,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x4,0x4,0x8,0x8,0x18,0x29,0x4a,0x8,0x9,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x40,0x48,0x58,0x60,0xc0,0x40,0x44,0x44,0x3c,0x0,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x83,0x4a,0x2b,0x12,0x32,0x57,0x94,0x1b,0x32,0x53,0x92,0x13,0x12,0x12,0xa2,0x42,0xf8,0x8,0xc8,0x48,0x48,0xfe,0x2,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x43,0x32,0x13,0x2,0x82,0x4f,0x48,0x13,0x12,0x23,0xe2,0x23,0x22,0x22,0x22,0x22,0xf8,0x8,0xc8,0x48,0x48,0xfe,0x2,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x7f,0x0,0x1f,0x11,0x51,0x51,0x5f,0x51,0x51,0x51,0x5f,0x50,0x40,0x7f,0x40,0x8,0xfc,0x10,0xf8,0x10,0x14,0x14,0xf4,0x14,0x14,0x14,0xf4,0x14,0x4,0xfc,0x4,
++0x10,0x14,0x12,0x10,0x13,0xfc,0x10,0x10,0x11,0xb,0xc,0x8,0x14,0x24,0x42,0x1,0x4,0x4,0x4,0x24,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x84,0x94,0x88,
++0x8,0x8,0x8,0x10,0x10,0x30,0x50,0x90,0x11,0x12,0x14,0x10,0x10,0x10,0x10,0x10,0x80,0x80,0x80,0x88,0x98,0xa0,0xc0,0x80,0x80,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x40,0x33,0x10,0x0,0x0,0xf7,0x10,0x10,0x13,0x12,0x12,0x16,0x1a,0x13,0x2,0x10,0x38,0xc0,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x13,0x12,0xfe,0x13,0x3a,0x36,0x53,0x52,0x90,0x11,0x11,0x12,0x14,0x18,0x40,0x88,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x80,0xc8,0x54,0x5c,0x42,0x42,0x3e,
++0x8,0x8,0x13,0x12,0x22,0x4a,0x8a,0x12,0x32,0x52,0x92,0x12,0x12,0x13,0x12,0x10,0x0,0x4,0xfe,0x4,0x4,0xf4,0x94,0x94,0x94,0x94,0xf4,0x4,0x4,0xfc,0x4,0x0,
++0x10,0x10,0x17,0x10,0x58,0x54,0x50,0x90,0x11,0x12,0x14,0x18,0x10,0x10,0x10,0x10,0x0,0x4,0xfe,0x20,0x20,0x40,0x40,0xd0,0x4c,0x46,0x42,0x40,0x40,0x40,0x40,0x40,
++0x41,0x31,0x11,0x3,0x86,0x6a,0x23,0xa,0x12,0x23,0xe2,0x22,0x22,0x23,0x22,0x22,0x40,0x20,0x4,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x20,0x20,0x2f,0x20,0xf8,0x20,0x20,0x20,0x21,0x2a,0x34,0xe8,0x40,0x0,0x0,0x0,0x0,0x4,0xfe,0x20,0x20,0x40,0x40,0xd0,0x4c,0x46,0x42,0x40,0x40,0x40,0x40,0x40,
++0x0,0x0,0xfc,0x4,0x45,0x46,0x28,0x28,0x10,0x28,0x24,0x44,0x81,0x1,0x2,0xc,0x80,0x80,0x80,0xfc,0x4,0x48,0x40,0x40,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x10,0xf8,0x27,0x20,0x20,0x20,0xf8,0x20,0x21,0x22,0x24,0x20,0x38,0xe0,0x40,0x0,0x0,0x4,0xfe,0x20,0x20,0x40,0x40,0xd0,0x4c,0x46,0x42,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x17,0x10,0xff,0x12,0x3a,0x36,0x53,0x52,0x92,0x12,0x13,0x10,0x1f,0x10,0x0,0x8,0xfc,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x4,0xfe,0x0,
++0x0,0x40,0x2f,0x20,0x0,0xe0,0x20,0x21,0x22,0x24,0x28,0x20,0x20,0x50,0x8f,0x0,0x0,0x4,0xfe,0x40,0x40,0x80,0x80,0xa0,0x98,0x8c,0x84,0x80,0x80,0x6,0xfc,0x0,
++0x10,0x13,0x22,0x21,0x44,0xfb,0x10,0x27,0x40,0xfc,0x1,0x1,0x1a,0xe4,0x49,0x2,0xc,0xf0,0x48,0x50,0x20,0xfc,0x40,0xfe,0x80,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x11,0x12,0xfc,0x13,0x12,0x1e,0x32,0xd2,0x1f,0x10,0x10,0x11,0x52,0x2c,0x80,0x80,0xf0,0x20,0x48,0xfc,0x48,0x48,0x48,0x48,0xfe,0x40,0xa0,0x10,0xe,0x4,
++0x1,0x3f,0x21,0x21,0x3f,0x1,0x7f,0x41,0x41,0x7f,0x41,0x2,0x29,0x28,0x48,0x7,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x4,0x4,0xfc,0x4,0x0,0x90,0xac,0x24,0xe0,
++0x0,0x8,0x7c,0x49,0x4a,0x49,0x49,0x49,0x49,0x49,0x4f,0x78,0x48,0x0,0x1,0x6,0x40,0x40,0xf8,0x10,0x24,0xfe,0x24,0x24,0x24,0x24,0xfe,0x20,0x50,0x88,0x6,0x4,
++0x1,0x0,0x1f,0x11,0x51,0x32,0x14,0x33,0x52,0xd2,0x12,0x1f,0x20,0x21,0x42,0xc,0x0,0x84,0xfe,0x0,0xf0,0x20,0x48,0xfc,0x48,0x48,0x48,0xfe,0xa0,0x10,0xe,0x4,
++0x9,0x5,0x7f,0x2,0xff,0x4,0xf,0x12,0x25,0xda,0x4,0x19,0x62,0xc,0x72,0x1,0x20,0x48,0xfc,0x0,0xfe,0x40,0xe0,0x10,0x1e,0xa4,0xc0,0xa0,0x98,0x88,0x80,0x0,
++0x10,0x10,0x10,0x15,0x5a,0x51,0x51,0x91,0x11,0x11,0x17,0x28,0x24,0x40,0x81,0x6,0x40,0x40,0xf8,0x10,0x24,0xfe,0x24,0x24,0x24,0x24,0xfe,0x20,0x50,0x88,0x6,0x4,
++0x40,0x30,0x11,0x2,0x84,0x63,0x22,0xa,0x12,0x12,0xef,0x20,0x20,0x21,0x22,0x2c,0x80,0x80,0xf0,0x20,0x48,0xfc,0x48,0x48,0x48,0x48,0xfe,0x40,0xa0,0x10,0xe,0x4,
++0x2,0x1,0x7f,0x40,0x9f,0x11,0x11,0x1f,0x10,0x10,0x1f,0x11,0x11,0x11,0x1f,0x10,0x0,0x0,0xfe,0x2,0xf4,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x0,0x10,0xf8,0x0,
++0x8,0x8,0xb,0x10,0x10,0x20,0x42,0xfe,0x4,0x8,0x10,0x20,0x42,0xff,0x1,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x4,0x4,0x7f,0x4,0x1,0xff,0x10,0x10,0x1f,0x0,0x11,0x11,0x11,0x11,0x21,0x41,0x40,0x48,0xfc,0x40,0x4,0xfe,0x0,0x20,0xf0,0x0,0x10,0x10,0x10,0x12,0x12,0xe,
++0x11,0x11,0x1f,0x11,0x58,0x57,0x52,0x92,0x13,0x10,0x12,0x12,0x12,0x12,0x14,0x18,0x10,0x14,0xfe,0x10,0x44,0xfe,0x0,0x8,0xfc,0x0,0x48,0x48,0x48,0x4a,0x4a,0x46,
++0x4,0x4,0x3f,0x4,0x4,0xff,0x1,0x1f,0x11,0x1f,0x11,0x1f,0x10,0x4,0x18,0x60,0x40,0x50,0xf8,0x40,0x44,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0x60,0x18,0x4,
++0x0,0x8,0xfd,0x10,0x10,0x23,0x3c,0x65,0xa5,0x25,0x25,0x25,0x3c,0x24,0x1,0x6,0x88,0x88,0xfc,0x88,0x88,0xfe,0x24,0xfe,0x24,0xfc,0x24,0xfc,0x0,0x88,0x6,0x2,
++0x10,0x10,0x11,0x15,0x7f,0x55,0x55,0x54,0x57,0x7c,0x50,0x15,0x1c,0xf4,0x43,0x0,0x20,0x44,0xfe,0x4,0xfc,0x4,0xfc,0x4,0xfe,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,
++0x10,0x1f,0x28,0x45,0x4,0x7f,0x4,0xff,0x1,0x1f,0x11,0x1f,0x11,0x1f,0xc,0x30,0x40,0x7c,0xa0,0x50,0x40,0xfc,0x40,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x60,0x18,
++0x2,0x4,0x3f,0x20,0x3f,0x20,0x3f,0x0,0x7f,0x1,0x1,0x3f,0x1,0x1,0xff,0x0,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,
++0x0,0x3f,0x22,0x2f,0x28,0x2f,0x28,0x2f,0x20,0x2f,0x21,0x27,0x21,0x5f,0x40,0x80,0x8,0xfc,0x8,0xe8,0x28,0xe8,0x28,0xe8,0x8,0xe8,0x8,0xc8,0xa,0xfa,0xa,0x4,
++0x10,0x10,0x13,0x12,0x5b,0x56,0x53,0x90,0x17,0x10,0x10,0x13,0x10,0x10,0x1f,0x10,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x40,0x50,0xf8,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x13,0x16,0x5b,0x52,0x53,0x90,0x17,0x10,0x10,0x13,0x28,0x44,0x8f,0x0,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x40,0x50,0xf8,0x40,0x44,0xfe,0x0,
++0x0,0x3f,0x20,0x3f,0x20,0x3f,0x1,0x11,0x9,0xff,0x4,0x4,0x4,0x8,0x10,0x60,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0x10,0x24,0xfe,0x40,0x40,0x40,0x42,0x42,0x3e,
++0x10,0x11,0x15,0x7f,0x55,0x55,0x54,0x55,0x54,0x54,0x57,0x5c,0x10,0x11,0x11,0x16,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x20,0x24,0xac,0x30,0xfe,0x90,0x90,0x12,0x12,0xe,
++0x10,0x10,0x12,0x11,0x59,0x54,0x57,0x90,0x10,0x10,0x11,0x11,0x11,0x12,0x12,0x1c,0x40,0x40,0x44,0x4c,0x50,0x44,0xfe,0xa0,0xa0,0xa0,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x1,0x41,0x2f,0x21,0x0,0xf,0xe2,0x22,0x23,0x20,0x22,0x22,0x2a,0x32,0x24,0x8,0x10,0x14,0xfe,0x10,0x44,0xfe,0x0,0x8,0xfc,0x0,0x48,0x48,0x48,0x4a,0x4a,0x46,
++0x4,0x4,0x4,0xff,0x4,0x8,0x8,0xc,0x12,0x10,0x21,0x41,0x82,0x2,0x4,0x18,0x0,0x0,0x4,0xfe,0x80,0x80,0x88,0x98,0xa0,0x80,0x40,0x40,0x20,0x10,0xe,0x4,
++0x10,0x13,0x12,0x14,0xfb,0x10,0x11,0x1a,0x33,0xd0,0x10,0x17,0x10,0x10,0x50,0x20,0x0,0xfe,0x44,0x48,0xfc,0x80,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x10,0x11,0x95,0x56,0x38,0x11,0xfe,0x29,0x29,0x28,0x28,0x2b,0x4c,0x48,0x80,0x0,0x0,0xfe,0x4,0x40,0x48,0xfc,0x80,0x20,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x12,0x12,0x2a,0x2a,0x4f,0x90,0x1f,0x24,0x6f,0xa2,0x25,0x2f,0x22,0x2a,0x32,0x26,0x10,0x10,0x90,0x90,0xbe,0x44,0x84,0xa4,0x24,0x24,0x28,0x98,0x10,0xa8,0x46,0x84,
++0x10,0x10,0x10,0x17,0x58,0x55,0x51,0x91,0x12,0x12,0x12,0x14,0x14,0x18,0x10,0x13,0x80,0x80,0x84,0xfe,0x80,0x20,0x20,0x24,0xac,0x70,0x20,0x20,0x50,0x50,0x8e,0x4,
++0x10,0x10,0x11,0x11,0x7d,0x55,0x55,0x55,0x55,0x7d,0x11,0x11,0x15,0xfd,0x5,0x1,0x0,0x4,0xfe,0x4,0x4,0x74,0x54,0x54,0x54,0x54,0x54,0x74,0x4,0x4,0xfc,0x4,
++0x0,0x0,0x7f,0x40,0x40,0x47,0x44,0x44,0x44,0x44,0x47,0x44,0x40,0x7f,0x40,0x0,0x0,0x4,0xfe,0x4,0x44,0xe4,0x44,0x44,0x44,0x44,0xc4,0x44,0x4,0xfc,0x4,0x0,
++0x10,0x66,0x42,0x42,0x66,0x42,0x43,0x7e,0x1,0x7e,0x8,0x8,0xe,0xf8,0x40,0x3,0x8,0xfc,0x88,0x88,0x88,0x88,0x6,0x0,0xfc,0x88,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x11,0x11,0x11,0x1a,0x55,0x51,0x51,0x91,0x1f,0x12,0x12,0x12,0x13,0x10,0x10,0x10,0x0,0x8,0xfc,0x0,0xf8,0x8,0x48,0x28,0xfe,0x8,0x88,0x48,0xfc,0x8,0x28,0x10,
++0x8,0x7e,0x8,0x3e,0x8,0x7e,0x8,0x3f,0x0,0xff,0x0,0x3f,0x9,0x28,0x48,0x7,0x20,0xfc,0x20,0xf8,0x20,0xfc,0x20,0xf8,0x8,0xfe,0x8,0xf8,0x0,0xa8,0x24,0xe0,
++0x1,0x1,0x1,0x7f,0x1,0x9,0x9,0x8,0xff,0x8,0x8,0x8,0x8,0x10,0x20,0x0,0x0,0x0,0x8,0xfc,0x0,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x1,0x1,0xff,0x1,0x3f,0x21,0x3f,0x21,0x3f,0x1,0x7f,0x2,0x29,0x28,0x48,0x7,0x0,0x4,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x10,0xf8,0x4,0x90,0x8c,0x24,0xe0,
++0x1,0x1,0x79,0x4a,0x4d,0x49,0x49,0x79,0x4f,0x4a,0x4a,0x4a,0x7b,0x48,0x0,0x0,0x0,0x8,0xfc,0x0,0xf8,0x8,0x48,0x28,0xfe,0x8,0x88,0x48,0xfc,0x8,0x50,0x20,
++0x4,0x7e,0x44,0x57,0x54,0x54,0x55,0x56,0x54,0x54,0x54,0x54,0x28,0x24,0x44,0x80,0x20,0x20,0x24,0xfe,0x40,0x84,0xfe,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,0x94,0x88,
++0x8,0x1c,0xf1,0x11,0x11,0xfd,0x11,0x38,0x34,0x51,0x52,0x90,0x10,0x10,0x10,0x17,0x20,0x20,0x24,0x24,0x24,0xfc,0x44,0x40,0xfe,0x4,0x84,0x48,0x30,0x20,0xc0,0x0,
++0x1,0x1,0x2,0x4,0x8,0x10,0x2f,0xc0,0x0,0x3f,0x2,0x2,0x4,0x8,0x1f,0x0,0x0,0x0,0x80,0x40,0x20,0x10,0xee,0x4,0x10,0xf8,0x0,0x0,0x40,0x20,0xf0,0x10,
++0x10,0x10,0x10,0x14,0x59,0x52,0x55,0x90,0x10,0x17,0x10,0x28,0x24,0x41,0x83,0x0,0x40,0x40,0xa0,0x90,0x8,0x26,0xf4,0x0,0x4,0xfe,0x40,0x40,0x90,0x8,0xfc,0x4,
++0x0,0x40,0x37,0x14,0x4,0x84,0x64,0x24,0xc,0x14,0xe4,0x24,0x24,0x24,0x27,0x20,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x40,0x2f,0x20,0x0,0x7,0xe0,0x20,0x2f,0x20,0x20,0x24,0x28,0x30,0x20,0x0,0x40,0x44,0xfe,0x40,0x48,0xfc,0x40,0x44,0xfe,0x44,0x44,0x44,0x54,0x48,0x40,0x40,
++0x1,0x41,0x31,0x12,0x5,0x1,0xf1,0x11,0x17,0x12,0x12,0x12,0x17,0x18,0x10,0x0,0x0,0x8,0xfc,0x0,0xf8,0x8,0x48,0x28,0xfe,0x8,0x88,0x48,0xfc,0x8,0x28,0x10,
++0x10,0x10,0x20,0x20,0x49,0xfa,0x15,0x20,0x40,0xfb,0x0,0x0,0x18,0xe1,0x43,0x0,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x0,0x8,0xfc,0x40,0x40,0x90,0x8,0xfc,0x4,
++0x4,0x4,0x7f,0x4,0x7f,0x42,0x82,0x3f,0x5,0x9,0x1f,0x1,0xff,0x1,0x1,0x1,0x40,0x48,0xfc,0x40,0xfe,0x4,0x8,0xf8,0x0,0x20,0xf0,0x4,0xfe,0x0,0x0,0x0,
++0x0,0x3f,0x21,0x21,0x3f,0x20,0x28,0x30,0x20,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x78,0x80,0x0,0x10,0xf8,0x80,0x42,0x32,0xe,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x24,0x45,0x29,0x11,0x29,0x45,0x85,0x1,0xc,0xf0,0x20,0x24,0xfe,0x10,0x50,0x8a,0x6,0xfc,0x4,0x4,0xfc,0x4,0x4,0xfc,
++0x0,0x11,0x7b,0x2,0xa,0xff,0x22,0x22,0x23,0x42,0x48,0xfd,0x5,0x2,0x4,0x8,0x80,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x80,0xc8,0x48,0x54,0x5c,0x42,0x3e,
++0x40,0x27,0x24,0x8,0x81,0x67,0x21,0xa,0x14,0x27,0xe0,0x20,0x2f,0x20,0x20,0x20,0x0,0xfe,0x84,0x88,0x0,0xfc,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,
++0x40,0x37,0x14,0x4,0x87,0x64,0x24,0xf,0x10,0x24,0xe7,0x24,0x24,0x24,0x25,0x26,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x40,0x48,0x58,0x60,0x40,0xc2,0x42,0x3e,
++0x20,0x10,0xfe,0x92,0x7d,0x10,0x7c,0x10,0xfe,0x11,0x7c,0x44,0x44,0x44,0x7c,0x44,0x0,0x50,0x48,0x84,0x20,0x20,0x50,0x48,0x86,0xfc,0x88,0x88,0x88,0x88,0xf8,0x88,
++0x40,0x30,0x17,0x0,0x80,0x60,0x2f,0x8,0x10,0x23,0xe2,0x22,0x22,0x22,0x23,0x22,0x10,0x38,0xc0,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0x8,0x10,0x12,0x32,0x52,0x94,0x10,0x10,0x10,0x11,0x11,0x12,0x14,0x18,0x40,0x40,0x40,0x40,0x44,0x4c,0x50,0x60,0x40,0xa0,0xa0,0x10,0x10,0x8,0xe,0x4,
++0x1,0x1,0x1,0x1,0x11,0x11,0x11,0x21,0x42,0x2,0x4,0x4,0x8,0x10,0x20,0x40,0x0,0x0,0x0,0x0,0x8,0x18,0x20,0x40,0x80,0x80,0x40,0x40,0x20,0x10,0xe,0x4,
++0x4,0x4,0xff,0x4,0x24,0x18,0x10,0x2b,0x48,0x8,0x18,0x28,0xc8,0x8,0x29,0x12,0x40,0x44,0xfe,0x40,0x28,0x24,0x20,0xfe,0x20,0x20,0x20,0x50,0x50,0x88,0x6,0x4,
++0x0,0x0,0x0,0xff,0x0,0x2,0x3f,0x22,0x22,0x22,0x3e,0x20,0x7,0x78,0x0,0x3,0x50,0x48,0x40,0xfe,0x40,0x40,0x48,0x48,0x48,0x50,0x50,0x20,0x22,0x52,0x8a,0x4,
++0x0,0x0,0xff,0x0,0x3e,0x22,0x3e,0x20,0xe,0x70,0x0,0x2,0x29,0x28,0x48,0x7,0xa0,0x94,0xfe,0x80,0x88,0x88,0x50,0x50,0x22,0x52,0x8e,0x0,0x90,0xac,0x24,0xe0,
++0x3f,0x1,0x7f,0x41,0x9d,0x1,0x1d,0x8,0x1f,0x30,0x57,0x90,0x17,0x10,0x1f,0x10,0xf8,0x0,0xfe,0x2,0x74,0x0,0x70,0x80,0xfc,0x80,0xf8,0x80,0xf8,0x80,0xfe,0x0,
++0x8,0x8,0x10,0x30,0x57,0x90,0x10,0x10,0x1f,0x10,0x11,0x11,0x11,0x2,0xc,0x30,0x80,0x88,0x98,0xe0,0x82,0x82,0x7e,0x10,0xf8,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x40,0x23,0x22,0x2,0xfa,0x13,0x20,0x70,0xaf,0x24,0x24,0x24,0x25,0x24,0x24,0x24,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x44,0xfe,0x44,0x44,0xb4,0x14,0x4,0x14,0x8,
++0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x21,0x21,0x21,0x3f,0x20,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x17,0x11,0x11,0x11,0xfd,0x11,0x11,0x11,0x11,0x1e,0xf2,0x44,0x4,0x9,0x12,0x8,0xfc,0x8,0x8,0x10,0x10,0x3c,0x84,0x88,0x48,0x50,0x20,0x50,0x90,0xe,0x4,
++0x8,0x8,0x7f,0x8,0xf,0x8,0xf,0x8,0xff,0x4,0x9,0x31,0xcf,0x1,0x1,0x3f,0x20,0x28,0xfc,0x20,0xe0,0x20,0xe0,0x24,0xfe,0x40,0x30,0x4e,0xe4,0x0,0x10,0xf8,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x12,0x14,0x18,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x0,0x4,0x7f,0x54,0x54,0x54,0x7f,0x54,0x55,0x55,0x7d,0x45,0x1,0x1,0x0,0x0,0x20,0x28,0xfc,0x20,0x50,0x88,0xfe,0x8,0xe8,0x28,0x28,0x28,0xe8,0x8,0x28,0x10,
++0x8,0x1c,0xf3,0x10,0x10,0xfd,0x13,0x31,0x39,0x55,0x50,0x91,0x11,0x11,0x11,0x11,0x50,0x48,0xfc,0xa0,0xa2,0x3e,0x0,0xf0,0x4,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,
++0x4,0xe,0x78,0x8,0x8,0xfe,0x8,0x18,0x1c,0x2a,0x28,0x48,0x88,0x9,0xa,0x8,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,0x0,0x88,0xc4,0x6,0x2,0x0,
++0x12,0x1f,0x28,0x45,0x88,0x3f,0x8,0xf,0x8,0xf,0x8,0xff,0x0,0x8,0x18,0x20,0x44,0x7e,0xa0,0x10,0x20,0xf8,0x20,0xe0,0x20,0xe0,0x24,0xfe,0x0,0x20,0x18,0x8,
++0x4,0x3e,0x24,0x24,0x24,0x3c,0x24,0x24,0x24,0x3c,0x24,0x24,0x24,0x24,0x4d,0x86,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x8a,0x8a,0x6,0x0,
++0x20,0x20,0x21,0x3d,0x25,0x49,0x41,0xa1,0x21,0x21,0x21,0x25,0x29,0x32,0x24,0x8,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x1,0x40,0x20,0x2f,0x1,0x1,0xe5,0x25,0x25,0x29,0x21,0x21,0x22,0x50,0x8f,0x0,0x0,0xc0,0x48,0xfc,0x20,0x20,0x28,0x24,0x24,0x24,0x20,0x20,0x60,0x6,0xfc,0x0,
++0x2,0x44,0x2f,0x28,0xf,0x88,0x4f,0x42,0x1f,0x24,0xc7,0x44,0x44,0x48,0x4a,0x51,0x10,0x90,0xd0,0x94,0xbe,0xc4,0xa4,0x28,0xa8,0x28,0x90,0x90,0xa8,0xa8,0xc6,0x84,
++0x0,0x20,0x11,0x11,0x1,0xf1,0x11,0x11,0x11,0x11,0x11,0x15,0x19,0x12,0x4,0x8,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x0,0x0,0x1,0xfd,0x5,0x49,0x29,0x11,0x11,0x29,0x24,0x40,0x87,0x0,0x0,0x0,0x40,0x88,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x0,0x4,0xfe,0x10,0x10,0x14,0x7e,0x44,0x44,0x44,0x44,0x7c,0x10,0x10,0x14,0xfe,0x0,
++0x10,0x10,0x27,0x20,0x49,0xf8,0x17,0x20,0x43,0xfa,0x2,0x2,0x1a,0xe0,0x41,0x6,0x40,0x48,0xfc,0x40,0xf0,0x40,0xfe,0x8,0xfc,0x8,0x48,0x48,0x48,0x90,0xc,0x4,
++0x10,0x11,0x21,0x21,0x49,0xf8,0x17,0x21,0x41,0xf9,0x1,0x1,0x19,0xe7,0x40,0x0,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x8,0xf8,0x8,0xf8,0x8,0x8,0xfe,0x8,0x8,
++0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x3f,0x0,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x4,0xfe,0x0,0x0,0x10,0xf8,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x17,0x11,0x11,0xfd,0x11,0x31,0x39,0x55,0x51,0x92,0x12,0x12,0x14,0x19,0x12,0x8,0xfc,0x8,0x8,0x10,0x10,0x3c,0x84,0x88,0x48,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x14,0xfe,0x10,0x14,0x7e,0x54,0x54,0x54,0x54,0x38,0x54,0x93,0x12,0x10,0x10,0x20,0x24,0xfe,0x20,0x28,0xfc,0xa8,0xa8,0xa8,0xa8,0x70,0xa8,0x26,0x24,0x20,0x20,
++0x10,0x11,0x11,0xfd,0x21,0x28,0x4b,0x7d,0x9,0x9,0xf,0xf9,0x49,0xf,0x8,0x8,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x8,0xf8,0x8,0xf8,0x8,0x8,0xfe,0x8,0x8,
++0x10,0x14,0x3e,0x49,0x90,0x7d,0x10,0x7c,0x13,0xfe,0x11,0x39,0x55,0x91,0x11,0x11,0x40,0x48,0xfc,0x20,0x90,0xfc,0x90,0x94,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x9,0x8,0x1f,0x31,0x5f,0x91,0x1f,0x11,0x1f,0x11,0xff,0x5,0x9,0x11,0x61,0x1,0x0,0x90,0xf8,0x0,0xf0,0x0,0xf0,0x0,0xf8,0x0,0xfe,0x40,0x20,0x1c,0x8,0x0,
++0x0,0x7f,0x8,0x8,0x8,0x8,0x8,0x8,0x14,0x12,0x11,0x20,0x21,0x42,0x84,0x8,0x0,0xf0,0x20,0x20,0x40,0x40,0xf8,0x8,0x10,0x20,0x40,0x80,0x40,0x30,0xe,0x4,
++0x4,0x4,0xf,0x8,0x10,0x3f,0x40,0x1f,0x0,0x3f,0x2,0x51,0x50,0x90,0xf,0x0,0x0,0x0,0xe0,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x0,0x84,0x92,0x12,0xf0,0x0,
++0x1,0x0,0x1f,0x12,0x92,0x53,0x54,0x18,0x30,0x5f,0xd0,0x10,0x20,0x21,0x42,0xc,0x0,0x84,0xfe,0x0,0x8,0xfc,0x40,0x40,0x44,0xfe,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x40,0x37,0x11,0x1,0x81,0x61,0x25,0x9,0x11,0x21,0xe2,0x22,0x22,0x24,0x29,0x22,0x8,0xfc,0x8,0x8,0x10,0x10,0x3c,0x84,0x88,0x48,0x50,0x20,0x50,0x88,0xe,0x4,
++0x0,0x7e,0x42,0x42,0x7e,0x42,0x42,0x7e,0x40,0x44,0x44,0x4a,0x72,0x40,0x0,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0xa4,0x94,0x88,0x80,0x80,0x80,0x80,
++0x20,0x20,0x21,0x21,0xf9,0x4d,0x4b,0x49,0x49,0x8b,0x55,0x51,0x22,0x52,0x8c,0x8,0x20,0x14,0xfe,0x40,0x48,0x7c,0x50,0x90,0x14,0xfe,0x10,0x10,0x20,0x28,0x46,0x82,
++0x10,0x17,0x21,0x21,0x49,0xf9,0x11,0x21,0x41,0xf9,0x2,0x2,0x1a,0xe4,0x49,0x2,0x8,0xfc,0x8,0x8,0x10,0x10,0x3c,0x84,0x88,0x48,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x10,0x17,0x10,0xfd,0x10,0x14,0x19,0x36,0xd1,0x11,0x11,0x11,0x11,0x52,0x24,0x80,0x48,0xfc,0x8,0x10,0xa0,0x40,0xb0,0xe,0x14,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0xf,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0x20,0x40,0x40,0xe0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x1,0x21,0x11,0xa,0x12,0x24,0x8,0x1f,0x28,0xcf,0x8,0xf,0x8,0x8,0x8,0x8,0x0,0x8,0x10,0xa0,0x98,0x48,0x20,0xf0,0x2e,0xe4,0x20,0xe0,0x20,0x20,0xa0,0x40,
++0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,0x0,0x0,0x0,0x4,0x4,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x8,0x1f,0x22,0x7f,0x24,0x3f,0x24,0x3f,0x20,0x3,0x7c,0x0,0x40,0x44,0xfe,0x40,0x4,0x24,0x24,0xa4,0xa4,0xa4,0xa4,0xa4,0x4,0x84,0x14,0x8,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x10,0x13,0x1a,0x31,0xd1,0x10,0x10,0x10,0x51,0x26,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0xf8,0x8,0x10,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x2,0x7e,0x2,0xfe,0x0,0x3f,0x21,0x3f,0x21,0x3f,0x4,0x3f,0x4,0xff,0x10,0x60,0x80,0xf8,0x82,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xf8,0x40,0xfe,0x10,0xc,
++0x0,0x1f,0x1,0x1,0x7f,0x5,0x9,0x11,0x6f,0x0,0x0,0xff,0x1,0x1,0x5,0x2,0xe0,0x0,0x0,0x8,0xfc,0x40,0x20,0x1c,0xe8,0x40,0x84,0xfe,0x0,0x0,0x0,0x0,
++0x8,0x8,0x8,0x17,0x10,0x30,0x50,0x93,0x12,0x11,0x11,0x10,0x10,0x10,0x11,0x16,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0xf8,0x8,0x10,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x10,0x10,0x1e,0x22,0x52,0xcc,0x28,0x17,0x20,0xc0,0x1f,0x1,0x9,0x11,0x25,0x2,0x0,0x0,0xfc,0x88,0x50,0x20,0x20,0xd0,0xe,0x24,0xf0,0x0,0x40,0x30,0x10,0x0,
++0x8,0x4,0x7f,0x11,0xa,0x4,0xa,0x31,0xd1,0x11,0x11,0x11,0x11,0x21,0x41,0x0,0x4,0x84,0xc4,0x24,0x24,0x24,0x24,0xa4,0x64,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x10,0x13,0x10,0x18,0x57,0x50,0x51,0x92,0x15,0x10,0x10,0x1f,0x10,0x10,0x11,0x10,0x38,0xc0,0x40,0x48,0xfc,0xe0,0x50,0x4e,0xf4,0x20,0x44,0xfe,0x40,0x40,0x40,0x80,
++0x0,0x40,0x37,0x11,0x80,0x60,0x21,0xe,0x11,0x21,0xe1,0x21,0x21,0x22,0x24,0x20,0x80,0x44,0xfe,0x10,0xa0,0x40,0xb0,0xe,0x14,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x2,0x1,0x7f,0x41,0x81,0x1f,0x2,0x4,0xff,0x0,0x1f,0x10,0x10,0x1f,0x10,0x0,0x0,0x0,0xfe,0x2,0x24,0xf0,0x80,0x44,0xfe,0x10,0x90,0x90,0x90,0x90,0x50,0x20,
++0x2,0x1,0x7f,0x40,0x88,0xe,0x8,0x8,0xff,0x8,0x2c,0x2b,0x49,0x88,0x28,0x13,0x0,0x0,0xfe,0x2,0x4,0xf8,0x8,0x88,0x88,0x50,0x50,0x20,0x20,0x50,0x8e,0x4,
++0x0,0x20,0x10,0x10,0x0,0x0,0xf7,0x10,0x10,0x10,0x10,0x12,0x14,0x18,0x10,0x0,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x20,0x17,0x10,0x0,0x0,0xf0,0x13,0x12,0x12,0x12,0x12,0x16,0x1a,0x11,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x2,0x2,0x2,0xfe,0x0,
++0x0,0x7d,0x44,0x44,0x7d,0x45,0x45,0x45,0x7c,0x40,0x48,0x44,0x5c,0x60,0x41,0x6,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x50,0x50,0x92,0x92,0xe,0x0,
++0x0,0x7f,0x0,0x0,0x3f,0x20,0x20,0x20,0x1f,0x0,0x52,0x51,0x50,0x90,0xf,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x4,0x4,0xfc,0x0,0x4,0x82,0x92,0x12,0xf0,0x0,
++0x0,0x7d,0x44,0x48,0x48,0x50,0x4b,0x48,0x44,0x44,0x44,0x69,0x52,0x40,0x40,0x40,0x8,0xfc,0x0,0x0,0x0,0x4,0xfe,0x20,0x20,0xa8,0xa4,0x22,0x22,0x20,0xa0,0x40,
++0x10,0x10,0x10,0x13,0xfc,0x24,0x24,0x25,0x25,0x44,0x28,0x10,0x28,0x44,0x84,0x3,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0xfc,0x4,0x88,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x12,0x22,0x23,0x4a,0xfa,0x12,0x23,0x42,0xfa,0x42,0x3,0x1a,0xe2,0x43,0x0,0x20,0x20,0x20,0x24,0xac,0x70,0x20,0xfc,0x20,0x70,0xac,0x24,0x20,0x24,0xfe,0x0,
++0x8,0x8,0x13,0x10,0x24,0xfc,0x8,0x11,0x21,0xfd,0x41,0x1,0x1d,0xe1,0x40,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x1,0x7f,0x1,0x3f,0x0,0x1f,0x10,0x1f,0x4,0xff,0x10,0x7e,0x12,0x12,0x2a,0x44,0x8,0xfc,0x0,0xf8,0x0,0xf0,0x10,0xf0,0x44,0xfe,0x8,0xfc,0x88,0x88,0xf8,0x88,
++0x12,0x12,0x12,0x12,0xfe,0x17,0x32,0x3a,0x56,0x52,0x92,0x12,0x14,0x15,0x18,0x10,0x0,0x0,0x0,0x4,0x1e,0xd4,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x5c,0x94,0x0,
++0x1,0x1,0x1,0x7f,0x1,0x11,0x9,0x1,0xff,0x1,0x2,0x2,0x4,0x8,0x30,0xc0,0x0,0x0,0x8,0xfc,0x0,0x10,0x20,0x4,0xfe,0x0,0x80,0x80,0x40,0x30,0xe,0x4,
++0x8,0x8,0x8,0x17,0x10,0x30,0x5f,0x90,0x10,0x10,0x17,0x10,0x10,0x10,0x1f,0x10,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x2,0x1,0x7f,0x40,0x80,0x3f,0x4,0x1a,0x63,0x5,0x19,0x63,0x5,0x19,0x65,0x2,0x0,0x0,0xfe,0x2,0x4,0xf8,0x0,0x10,0x30,0x40,0x80,0x40,0x30,0xe,0x4,0x0,
++0x10,0x10,0x10,0x12,0xff,0x12,0x12,0x12,0x12,0x22,0x22,0x22,0x22,0x4a,0x84,0x0,0x0,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x7c,0x44,0x0,
++0x4,0x4,0xff,0x4,0x1,0x7f,0x1,0x9,0x5,0xff,0x1,0x2,0x4,0x8,0x30,0xc0,0x40,0x44,0xfe,0x40,0x8,0xfc,0x0,0x20,0x44,0xfe,0x0,0x80,0x40,0x30,0xe,0x4,
++0x10,0x13,0x10,0xfe,0x11,0x55,0x39,0x11,0xff,0x11,0x11,0x29,0x25,0x44,0x81,0x2,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x44,0x54,0x8c,0x4,0x2,
++0x0,0xff,0x4,0x7f,0x44,0x44,0x7f,0x0,0x1f,0x10,0x11,0x11,0x11,0x2,0xc,0x30,0x4,0xfe,0x40,0xfc,0x44,0x44,0xfc,0x10,0xf8,0x10,0x10,0x10,0x10,0x60,0x18,0x8,
++0x0,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x21,0x1,0x1,0x1,0x1,0x1,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x11,0x1d,0x21,0x21,0x7d,0x91,0x11,0xfd,0x11,0x11,0x14,0x18,0x10,0x0,0x0,0x4,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,
++0x10,0x17,0x14,0x24,0x24,0x67,0xa4,0x24,0x27,0x24,0x24,0x27,0x24,0x24,0x25,0x26,0x4,0xbe,0x84,0x84,0x84,0xbc,0x0,0x7c,0x84,0x88,0x50,0x20,0x50,0x88,0xe,0x4,
++0x8,0x1c,0xf3,0x12,0x10,0xfd,0x10,0x39,0x36,0x54,0x51,0x92,0x14,0x11,0x12,0x10,0x40,0x20,0xfe,0x2,0x4,0xfc,0x80,0x44,0x6c,0xb0,0x30,0x68,0xa8,0x26,0xa4,0x40,
++0x8,0x8,0x8,0x10,0x11,0x32,0x54,0x99,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x14,0x40,0x40,0x40,0xa0,0x10,0x8,0x6,0x14,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x10,0x7e,0x12,0x12,0x12,0x2a,0x44,0x1,0xff,0x3,0x5,0x9,0x11,0x61,0x1,0x0,0x8,0xfc,0x88,0x88,0x88,0xf8,0x80,0x4,0xfe,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x10,0x10,0x7f,0x11,0x11,0x25,0x42,0x9f,0x0,0x8,0x8,0xf,0x0,0x7f,0x0,0x0,0x0,0x4,0x7e,0x44,0x44,0x7c,0x44,0xe0,0x20,0x20,0x24,0xfe,0x4,0xc4,0x14,0x8,
++0x10,0x10,0x13,0x12,0xfc,0x25,0x24,0x25,0x26,0x44,0x29,0x12,0x28,0x45,0x84,0x0,0x40,0x20,0xfe,0x2,0x4,0xfc,0x80,0x44,0x6c,0xb0,0x30,0x68,0xa8,0x26,0xa4,0x40,
++0x4,0x7e,0x11,0x10,0x10,0x3e,0x22,0x63,0x92,0xc,0x4,0x8,0x10,0x20,0x40,0x0,0x8,0x1c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x4,0x4,0x24,0x24,0x24,0x25,0x24,0x24,0x4,0x3f,0x24,0x24,0x24,0x24,0xff,0x0,0x40,0x40,0x48,0x7c,0xa0,0x18,0x8,0x0,0x8,0xfc,0x48,0x48,0x48,0x48,0xfe,0x0,
++0x4,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x27,0x5,0x1,0x3f,0x1,0x1,0xff,0x0,0x0,0xf8,0x8,0x90,0x90,0x60,0x20,0xd0,0xe,0x4,0x10,0xf8,0x0,0x4,0xfe,0x0,
++0x1,0x1,0x9,0xd,0x11,0x21,0x0,0x1,0xff,0x1,0x2,0x2,0x4,0x8,0x30,0xc0,0x0,0x0,0x20,0x10,0x18,0x8,0x0,0x4,0xfe,0x0,0x80,0x80,0x40,0x30,0xe,0x4,
++0x10,0x14,0x3e,0x48,0x2,0x2,0x7f,0x2,0x1,0x7f,0x1,0x1,0x0,0x7,0x38,0x0,0x40,0x48,0xfc,0x20,0x80,0x50,0xf8,0x0,0x4,0xfe,0x10,0x20,0xc0,0x44,0x24,0x1c,
++0x20,0x1b,0x8,0x40,0x4f,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x4f,0x48,0x40,0x40,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x24,0x24,0x24,0xe4,0x24,0x14,0x8,
++0x8,0x4,0xff,0x2,0x3f,0x22,0x3e,0x22,0x3e,0x22,0x22,0x26,0x0,0x24,0x22,0x40,0x20,0x44,0xfe,0x0,0x8,0x48,0x48,0x48,0x48,0x48,0x8,0x18,0x0,0x90,0x4c,0x4,
++0x10,0x8,0x7f,0x4,0x3f,0x4,0x4,0xff,0x4,0x4,0x3f,0xc,0x14,0x24,0xc4,0x4,0x20,0x48,0xfc,0x90,0xf8,0x90,0x94,0xfe,0x90,0x90,0xf0,0xc0,0xb0,0x8e,0x84,0x80,
++0x2,0x1,0x1f,0x10,0x10,0x1f,0x10,0x17,0x14,0x17,0x14,0x27,0x24,0x44,0x84,0x4,0x0,0x8,0xfc,0x8,0x8,0xf8,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x1,0x7d,0x5,0x45,0x29,0x29,0x11,0x11,0x29,0x29,0x45,0x85,0x1,0x1,0x1,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x44,0x4c,0x30,0x20,0x10,0x4e,0x84,0x0,
++0x10,0x11,0x10,0x14,0xfe,0x24,0x24,0x27,0x24,0x44,0x28,0x10,0x28,0x44,0x84,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x10,0x10,0x20,0x27,0x44,0xfc,0x15,0x24,0x45,0xfd,0x45,0x5,0x1d,0xe5,0x48,0x10,0x10,0x18,0x14,0xfe,0x10,0x10,0xd0,0x14,0xd4,0x54,0x54,0x58,0xd0,0x2a,0x46,0x82,
++0x8,0x8,0xff,0x8,0x9,0x1,0x3f,0x21,0x21,0x21,0x3f,0x21,0x1,0x1,0x7f,0x0,0x20,0x24,0xfe,0x20,0x20,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x10,0xf8,0x4,0x4,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x35,0x30,0x58,0x56,0x91,0x11,0x11,0x10,0x1f,0x10,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x0,0x40,0x48,0x4c,0x48,0x50,0x4,0xfe,0x0,
++0x1,0x1,0xff,0x1,0x3f,0x21,0x29,0x25,0x21,0x3f,0x23,0x5,0x9,0x31,0xc1,0x1,0x0,0x4,0xfe,0x8,0xfc,0x8,0x28,0x48,0x8,0xf8,0x88,0x40,0x30,0xe,0x4,0x0,
++0x0,0x10,0xf8,0x27,0x24,0x44,0x55,0x7c,0xd5,0x55,0x55,0x55,0x55,0x75,0x48,0x10,0x10,0x18,0x14,0xfe,0x10,0x10,0xd0,0x14,0xd4,0x54,0x54,0x58,0xd0,0x2a,0x46,0x82,
++0x0,0x8,0xfc,0x10,0x11,0x22,0x2d,0x78,0xa8,0x2a,0x29,0x29,0x29,0x38,0x27,0x0,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x0,0x40,0x48,0x4c,0x48,0x50,0x4,0xfe,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x13,0x11,0x1e,0x33,0xd0,0x10,0x10,0x11,0x12,0x54,0x20,0x40,0x44,0xfe,0x80,0x80,0xe0,0x20,0x24,0xfe,0x20,0x20,0xa8,0x24,0x22,0xa2,0x40,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x15,0x18,0x30,0xd2,0x11,0x11,0x11,0x10,0x57,0x20,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x0,0x40,0x48,0x4c,0x48,0x50,0x4,0xfe,0x0,
++0x12,0x1f,0x28,0x45,0x90,0x2b,0x20,0x27,0x24,0x24,0x27,0x24,0x24,0x27,0x20,0x20,0x44,0x7e,0xa0,0x10,0x8,0xfc,0x8,0xc8,0x48,0x48,0xc8,0x48,0x48,0xc8,0x28,0x10,
++0x8,0x8,0x8,0x10,0x11,0x32,0x55,0x98,0x10,0x12,0x11,0x11,0x11,0x10,0x1f,0x10,0x40,0x40,0xa0,0xa0,0x10,0x8,0xf6,0x4,0x40,0x48,0x4c,0x48,0x50,0x4,0xfe,0x0,
++0x8,0x4,0xff,0x2,0x3f,0x22,0x3e,0x22,0x3e,0x22,0x26,0x7f,0x4,0x4,0x18,0x60,0x20,0x44,0xfe,0x0,0x48,0x48,0x48,0x48,0x48,0x18,0x8,0xfc,0x8,0x8,0x28,0x10,
++0x0,0x40,0x30,0x17,0x4,0x4,0xd,0x14,0x25,0xe5,0x25,0x25,0x25,0x25,0x8,0x10,0x10,0x18,0x14,0xfe,0x10,0x10,0xd0,0x14,0xd4,0x54,0x54,0x58,0xd0,0x2a,0x46,0x82,
++0x8,0x8,0xff,0xa,0x2,0x7f,0x4,0xb,0x10,0x10,0x3f,0x50,0x90,0x10,0x11,0x10,0x20,0x24,0xfe,0x20,0x8,0xfc,0x0,0xf0,0x20,0x44,0xfe,0x40,0x40,0x40,0x40,0x80,
++0x10,0x10,0x12,0x12,0xfe,0x12,0x32,0x38,0x54,0x53,0x92,0x12,0x12,0x12,0x1f,0x10,0x80,0x90,0x94,0xbe,0xd0,0x8c,0x84,0x80,0x8,0xfc,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x4,0x24,0x24,0x25,0x26,0x25,0x1,0x6,0x18,0x6f,0x81,0x1f,0x9,0x5,0x7f,0x0,0x40,0x48,0xfc,0x40,0x30,0x10,0x0,0xc0,0x30,0xee,0x4,0xf0,0x20,0x48,0xfc,0x0,
++0x4,0x7e,0x44,0x44,0x44,0x7d,0x10,0x10,0x53,0x5c,0x50,0x50,0x5c,0x70,0xc3,0x0,0x40,0x50,0x48,0x40,0x7c,0xc0,0x48,0x7c,0xc0,0x48,0x50,0x20,0x60,0x92,0xa,0x6,
++0x4,0x7e,0x44,0x54,0x54,0x55,0x54,0x54,0x57,0x54,0x54,0x54,0x10,0x28,0x47,0x84,0x40,0x50,0x48,0x40,0x7c,0xc0,0x48,0x7c,0xc0,0x48,0x50,0x20,0x60,0x92,0xa,0x6,
++0x0,0x1f,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x4,0x4,0x8,0x30,0xc0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x90,0x80,0x82,0x82,0x7e,0x0,
++0x20,0x27,0x39,0x41,0x82,0x7a,0x24,0x27,0xf9,0x21,0x25,0x22,0x2a,0x35,0x28,0x0,0x10,0x10,0x7c,0x14,0xfe,0x14,0x7c,0x10,0x7c,0x10,0x14,0xfe,0x10,0x10,0x96,0x7c,
++0x10,0x1e,0x28,0x45,0x8,0x4,0xff,0x2,0x3f,0x22,0x3e,0x22,0x3e,0x22,0x2a,0x24,0x40,0x7c,0x90,0x8,0x20,0x44,0xfe,0x8,0x8,0x48,0x48,0x48,0x48,0x48,0x8,0x18,
++0x10,0x10,0x12,0x22,0x23,0x64,0xa4,0x28,0x20,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x10,0x2e,0x23,0x62,0xa4,0x28,0x2f,0x22,0x32,0x2d,0x24,0x2a,0x31,0x20,0x20,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfe,0x20,0x24,0xfe,0x20,0x20,0x26,0xfc,
++0x8,0x10,0x3e,0x22,0x22,0x32,0x2a,0x22,0xfe,0x22,0x32,0x2a,0x22,0x22,0x4a,0x85,0x0,0x4,0xfe,0x84,0x94,0x94,0x94,0x94,0xa4,0xa4,0x20,0x50,0x50,0x52,0x92,0xe,
++0x4,0x4,0xa,0x11,0x20,0x42,0xbf,0x0,0x24,0x14,0x15,0x15,0x3,0x7c,0x20,0x0,0x4,0x4,0x4,0x24,0xa4,0x64,0x24,0x24,0xa4,0xa4,0x24,0x24,0x84,0x4,0x14,0x8,
++0x20,0x20,0x20,0x3c,0x24,0x4b,0x40,0xa0,0x23,0x20,0x20,0x24,0x28,0x30,0x23,0x0,0x40,0x50,0x48,0x40,0x7c,0xc0,0x48,0x7c,0xc0,0x48,0x50,0x20,0x60,0x92,0xa,0x6,
++0x2,0x42,0x22,0x2f,0x4,0x85,0x69,0x2f,0x11,0x21,0xe1,0x3f,0x29,0x21,0x21,0x21,0x0,0xc,0x30,0xe0,0x20,0x24,0x3e,0xe8,0x28,0x28,0xe8,0x28,0x28,0x48,0x88,0x8,
++0x0,0x40,0x2f,0x28,0xa,0x8a,0x4a,0x4a,0x1a,0x2a,0xca,0x4a,0x42,0x45,0x48,0x50,0x20,0x20,0xa4,0xae,0xf0,0xa0,0xae,0xf0,0xa4,0xa4,0xa8,0x90,0x30,0x4a,0x8a,0x6,
++0x2,0x41,0x34,0x14,0x84,0x65,0x25,0xd,0x15,0x25,0xe5,0x25,0x25,0x24,0x24,0x24,0x4,0xbe,0x84,0x4,0x4,0xf4,0x14,0x14,0xf4,0x14,0x14,0xf4,0x14,0x4,0x14,0x8,
++0x0,0x0,0xfb,0x8,0x17,0x10,0x3b,0x8,0x8b,0x50,0x50,0x37,0x20,0x50,0x88,0x7,0x40,0x48,0xfc,0x48,0xfe,0x48,0xf8,0x40,0xf8,0x40,0x48,0xfc,0x40,0x40,0x46,0xfc,
++0x10,0x1f,0x10,0x27,0x24,0x67,0xa4,0x2f,0x20,0x27,0x24,0x27,0x24,0x27,0x20,0x2f,0x4,0xfe,0x0,0xfc,0x44,0xfc,0x44,0xfe,0x0,0xfc,0x44,0xfc,0x44,0xfc,0x0,0xfe,
++0x8,0x4,0x7f,0x1,0x3f,0x1,0x7f,0x2,0x2,0xff,0x4,0x8,0x6,0x1,0x6,0x38,0x20,0x48,0xfc,0x0,0xf8,0x0,0xfc,0x0,0x4,0xfe,0x20,0x20,0xc0,0x80,0x60,0x10,
++0x10,0x10,0x11,0x91,0x73,0x34,0x10,0x10,0x1f,0x30,0x52,0xd1,0x10,0x10,0x10,0x10,0x80,0x80,0xf8,0x8,0x10,0xa0,0x40,0x94,0xfe,0x10,0x10,0x90,0x90,0x10,0x50,0x20,
++0x4,0x44,0x24,0x4,0x15,0x24,0x64,0x5,0x1,0x7d,0x5,0x9,0x9,0x11,0x65,0x2,0x40,0x40,0x7c,0x84,0x48,0x30,0x20,0x40,0x8,0x98,0x60,0x20,0x10,0xe,0x4,0x0,
++0x40,0x30,0x17,0x0,0x80,0x60,0x20,0x8,0x10,0x20,0xe0,0x20,0x20,0x2f,0x20,0x20,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,0x0,
++0x0,0xff,0x4,0x5,0x7d,0x45,0x41,0x43,0x7c,0x25,0x75,0x25,0x35,0xc5,0x14,0xb,0x4,0xfe,0x0,0xfc,0x24,0xfc,0x24,0xfe,0x0,0xfc,0x24,0xfc,0x24,0xfc,0x0,0xfe,
++0x4,0x4,0xff,0x4,0x4,0x8,0x49,0x2a,0x28,0x8,0x1f,0x28,0x49,0x88,0x8,0x8,0x40,0x44,0xfe,0x40,0x40,0xf8,0x8,0xb0,0x50,0x94,0xfe,0x10,0x10,0x90,0x10,0x30,
++0x4,0x44,0x24,0x4,0x15,0x24,0x64,0x5,0x1,0xff,0x5,0x9,0x11,0x21,0xc1,0x1,0x40,0x40,0x7c,0x84,0x48,0x30,0x20,0x40,0x4,0xfe,0x40,0x20,0x10,0xe,0x4,0x0,
++0x4,0x44,0x24,0x4,0x15,0x24,0x64,0x4,0x1,0xff,0x1,0x2,0x4,0x8,0x30,0xc0,0x40,0x40,0x7c,0x84,0x48,0x30,0x20,0x40,0x4,0xfe,0x0,0x80,0x40,0x30,0xe,0x4,
++0x1,0x21,0x11,0x17,0x1,0x1,0xf1,0x11,0x1f,0x11,0x11,0x15,0x19,0x11,0x2,0x0,0x10,0x10,0x10,0xfc,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0x7f,0x40,0x40,0x4f,0x48,0x48,0x4f,0x48,0x48,0x48,0x50,0x60,0x40,0x7f,0x0,0x8,0xfc,0x20,0x70,0x80,0x0,0x10,0xf8,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x4,0x44,0x24,0xd,0x16,0x64,0x4,0xff,0x4,0x3f,0x24,0x38,0x27,0x20,0x3f,0x20,0x80,0xf8,0x88,0x90,0x60,0x40,0x84,0xfe,0x40,0xf8,0x48,0x38,0xc8,0x8,0xf8,0x8,
++0x0,0x7c,0x45,0x4a,0x48,0x50,0x49,0x4a,0x44,0x45,0x45,0x69,0x53,0x40,0x40,0x40,0x80,0x80,0xf8,0x10,0xa0,0x40,0xb0,0x4e,0x44,0xf0,0x40,0x48,0xfc,0x40,0x40,0x40,
++0x8,0x8,0xff,0x9,0x8,0x1f,0x10,0x3f,0x50,0x1f,0x10,0x1f,0x10,0x24,0x22,0x40,0x20,0x24,0xfe,0x20,0x88,0xfc,0x80,0xf8,0x80,0xf8,0x80,0xfc,0x0,0x48,0x26,0x2,
++0x22,0x22,0x22,0x23,0xfa,0x22,0x7f,0x6a,0xa2,0x27,0x2a,0x32,0x22,0x2a,0x24,0x21,0x0,0x0,0x7c,0xc4,0x44,0x24,0x28,0x28,0x28,0x10,0x90,0x28,0x28,0x46,0x84,0x0,
++0x1,0x9,0xfd,0x11,0x13,0x25,0x21,0x79,0xa9,0x29,0x29,0x29,0x29,0x3a,0x22,0x4,0x20,0x14,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x14,0xfe,0x0,0xa4,0x92,0x2,
++0x9,0x8,0xf,0x10,0x10,0x3f,0x50,0x90,0x1f,0x10,0x10,0x1f,0x10,0x24,0x22,0x40,0x0,0x88,0xfc,0x80,0x90,0xf8,0x80,0x90,0xf8,0x80,0x84,0xfe,0x0,0x90,0x4c,0x4,
++0x4,0x3e,0x24,0x27,0x24,0x3c,0x25,0x26,0x24,0x3c,0x24,0x24,0x24,0x44,0x95,0xa,0x40,0x20,0x24,0xfe,0x0,0x88,0x6,0x2,0x88,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x2,0x1,0x1,0xff,0x8,0x8,0x10,0x28,0x44,0x2,0x1,0x2,0x4,0x8,0x30,0xc0,0x0,0x0,0x4,0xfe,0x20,0x10,0xc,0x24,0x40,0x80,0x0,0x80,0x40,0x30,0xe,0x4,
++0x10,0x8,0x9,0xff,0x0,0x14,0x22,0x41,0xa2,0x14,0x8,0x14,0x12,0x22,0x40,0x0,0x0,0x7c,0x44,0xc4,0x48,0x48,0x50,0x48,0xc4,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x41,0x31,0x10,0x7,0x80,0x60,0x20,0xb,0x10,0x27,0xe1,0x21,0x21,0x21,0x22,0x2c,0x0,0x8,0xfc,0x80,0xa0,0x44,0xa4,0x1c,0x0,0xfc,0x20,0x20,0x20,0x22,0x22,0x1e,
++0x8,0xfd,0x8,0x48,0x4b,0x48,0x48,0x49,0x7e,0x4,0x1c,0xe4,0x44,0x14,0x9,0x2,0xc,0xf0,0x20,0x24,0xfe,0x50,0x88,0x6,0x8c,0x88,0x88,0x88,0x88,0x88,0x8,0x8,
++0x10,0x13,0x10,0x10,0xfc,0x27,0x24,0x25,0x27,0x45,0x29,0x11,0x29,0x45,0x82,0x4,0x18,0xe0,0x40,0x40,0x44,0xfe,0xa0,0x10,0x1e,0x14,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0xf,0x2,0xef,0xa9,0xaf,0xa0,0xaf,0xa8,0xaf,0xa8,0xaf,0xe8,0x89,0xf,0x0,0x1c,0xe0,0x48,0xfc,0x24,0xfc,0x0,0x88,0x88,0xfe,0x88,0xa8,0x28,0x8,0xa8,0x10,
++0x12,0x11,0x11,0x17,0xfc,0x14,0x13,0x1a,0x32,0xd2,0x12,0x12,0x12,0x10,0x51,0x26,0x44,0x24,0x28,0xfe,0x2,0x4,0xf8,0x8,0x48,0x48,0x48,0x48,0x48,0xa2,0x22,0x1e,
++0x10,0x10,0x10,0x1f,0x20,0x20,0x7d,0x92,0x10,0x7c,0x10,0x10,0x14,0x18,0x11,0x2,0x40,0x20,0x24,0xfe,0x0,0x88,0x6,0x2,0x88,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x20,0x23,0x28,0x3c,0x50,0x97,0x10,0xfd,0x13,0x15,0x11,0x29,0x25,0x41,0x82,0x4,0x18,0xe0,0x40,0x40,0x44,0xfe,0xa0,0x10,0x1e,0x14,0x10,0x10,0x10,0x10,0x10,0x10,
++0x9,0x9,0x8,0x17,0x10,0x30,0x50,0x93,0x10,0x17,0x11,0x11,0x11,0x11,0x12,0x1c,0x0,0x8,0xfc,0x80,0xa0,0x44,0xa4,0x1c,0x0,0xfc,0x20,0x20,0x20,0x22,0x22,0x1e,
++0x9,0x7d,0x49,0x4f,0x49,0x79,0x49,0x4f,0x49,0x79,0x4a,0x4a,0x4f,0x48,0x88,0x18,0x0,0x4,0x3e,0xe4,0x24,0x24,0x24,0xe4,0x24,0x24,0x24,0xb4,0xe8,0x60,0x20,0x20,
++0x8,0x88,0x50,0x27,0x50,0x89,0xa,0x1c,0x29,0x48,0x88,0x8,0x8,0x9,0x52,0x24,0x80,0x40,0x44,0xfe,0x0,0x10,0xc,0x4,0x10,0xa0,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x8,0xf,0x10,0x20,0x5f,0x91,0x11,0x1f,0x11,0x11,0x1f,0x11,0x11,0x21,0x41,0x80,0x0,0xe0,0x40,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x8,0x28,0x10,
++0x20,0x20,0x20,0x3f,0x24,0x48,0x41,0xa2,0x20,0x20,0x20,0x24,0x28,0x30,0x21,0x2,0x40,0x20,0x24,0xfe,0x0,0x88,0x6,0x2,0x88,0x50,0x20,0x50,0x50,0x88,0x6,0x4,
++0x22,0x24,0x2f,0x48,0x4f,0xf8,0x1f,0x22,0x5f,0x84,0xf7,0x4,0x34,0xc8,0x49,0x10,0x10,0x90,0xd0,0x94,0xbe,0xc4,0xa4,0x28,0xe8,0x28,0x90,0x90,0xa8,0xa8,0xc6,0x84,
++0x10,0x10,0x20,0x23,0x44,0xf8,0x11,0x22,0x40,0xfc,0x0,0x0,0x1c,0xe0,0x41,0x2,0x40,0x20,0x24,0xfe,0x0,0x88,0x6,0x2,0x88,0x50,0x20,0x50,0x50,0x88,0x6,0x4,
++0x24,0x24,0x49,0x24,0x3f,0x24,0x3f,0x24,0x3f,0x4,0xff,0x15,0x14,0x24,0x44,0x4,0x84,0x84,0x24,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0x24,0xe4,0x24,0x84,0x84,0x14,0x8,
++0x8,0x8,0x7f,0x9,0xa,0xff,0x8,0x1f,0x22,0xcc,0x8,0xe,0x78,0x8,0x29,0x12,0x40,0x40,0x40,0x44,0x7e,0x88,0x8,0x48,0x50,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x2,0xff,0x28,0x28,0xfe,0xab,0xaa,0xaa,0xc7,0x82,0x83,0xfe,0x82,0x82,0xfe,0x82,0x20,0x24,0xfc,0x28,0x28,0xfe,0x10,0x20,0xfc,0x88,0x10,0xfe,0x10,0x10,0x50,0x20,
++0x10,0x13,0x20,0xfc,0x20,0x57,0x50,0xfd,0x13,0x15,0x1d,0xf1,0x51,0x11,0x12,0x14,0xc,0xf0,0x40,0x40,0x44,0xfe,0x90,0x18,0x1e,0x14,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x10,0x20,0xff,0x20,0x50,0x51,0xfe,0x10,0x10,0x1e,0xf0,0x50,0x10,0x11,0x12,0x40,0x20,0x24,0xfe,0x0,0x88,0x6,0x2,0x88,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x7c,0x44,0x0,0x0,0x0,0x4,0x4,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x9c,0xe4,0x84,0x4,0x4,0x4,
++0x2,0x1,0x7f,0x48,0x91,0x9,0xf,0x11,0x1,0xff,0x0,0x1f,0x10,0x10,0x1f,0x10,0x0,0x0,0xfe,0x22,0x14,0x0,0xf0,0x0,0x4,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x10,0x13,0x12,0x13,0xfe,0x13,0x14,0x19,0x33,0xd4,0x1c,0x14,0x15,0x17,0x50,0x20,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x80,0x4,0xfe,0x44,0x44,0xa4,0x14,0xe4,0x28,0x10,
++0x10,0x10,0x17,0x10,0xfd,0x10,0x17,0x18,0x30,0xdf,0x10,0x11,0x10,0x10,0x50,0x23,0x80,0x48,0xfc,0x0,0x10,0xa0,0xfc,0x80,0x84,0xfe,0x90,0x10,0xa0,0x60,0x98,0x8,
++0x20,0x24,0x3e,0x20,0x20,0x26,0x78,0x2,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x80,0x88,0x98,0xe0,0x82,0x82,0x7e,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x4,0xe,0x78,0xb,0x8,0xfe,0x8,0x19,0x1c,0x2a,0x29,0x49,0x89,0x9,0x9,0x9,0x20,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x12,0x12,0x22,0x4f,0x82,0x12,0x1f,0x22,0x62,0xaf,0x22,0x22,0x23,0x3e,0x28,0x20,0x0,0x8,0x7c,0x80,0x0,0x4,0xfe,0x8,0x8,0x88,0x8,0x8,0xc8,0x8,0x28,0x10,
++0x0,0x78,0x48,0x50,0x51,0x62,0x55,0x49,0x49,0x49,0x69,0x51,0x41,0x41,0x42,0x44,0x40,0x40,0xa0,0xa0,0x10,0xe,0x14,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x4,0x4,0x7f,0x4,0xff,0x10,0x15,0x3f,0x64,0xbf,0x24,0x3f,0x24,0x24,0x3f,0x20,0x40,0x50,0x48,0x40,0xfe,0x40,0x40,0xa0,0x24,0x28,0x30,0x20,0x52,0x92,0x8a,0x4,
++0x8,0x8,0xa,0x7f,0x8,0x8,0x9,0xff,0x10,0x10,0x20,0x24,0x42,0x7e,0x1,0x2,0x20,0x20,0x20,0x20,0x24,0xfe,0x24,0xa4,0x24,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x4,0x4,0xff,0x4,0x4,0x7f,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x40,0x44,0xfe,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0x48,0x28,0x10,0x0,0x0,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x31,0x38,0x54,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x20,0x20,0x24,0xfe,0x20,0x28,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x1,0x1,0xff,0x3,0x5,0x9,0x11,0x21,0xc1,0x1,0x0,0x24,0x22,0x22,0x40,0x0,0x0,0x4,0xfe,0x80,0x40,0x20,0x10,0xe,0x4,0x0,0x0,0x90,0x48,0x44,0x4,
++0x10,0x10,0x17,0x10,0xfb,0x10,0x17,0x18,0x33,0xd0,0x12,0x12,0x12,0x13,0x54,0x28,0x40,0x48,0xfc,0x40,0xf8,0x48,0xfe,0x48,0xf8,0x40,0x48,0x7c,0x40,0x40,0xc6,0x3c,
++0x0,0x0,0x7f,0x48,0x4b,0x48,0x7f,0x48,0x4b,0x78,0x4a,0x4a,0x4a,0x7b,0x44,0x8,0x40,0x48,0xfc,0x40,0xf8,0x48,0xfe,0x48,0xf8,0x40,0x48,0x7c,0x40,0x40,0xc6,0x3c,
++0x20,0x13,0x12,0xff,0x2,0x4b,0x48,0x49,0x4a,0x54,0x12,0x1e,0xe2,0x43,0x0,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x80,0x4,0xfe,0x44,0x44,0xa4,0x4,0xe4,0x28,0x10,
++0x0,0x40,0x30,0x17,0x0,0x80,0x67,0x20,0x8,0x13,0xe2,0x22,0x22,0x22,0x23,0x22,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0x10,0x23,0x44,0x78,0x9,0x10,0x20,0x7d,0x1,0x1,0xd,0x71,0x21,0x1,0x20,0x20,0x24,0xfe,0x20,0x20,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x11,0x3e,0x24,0x48,0xbe,0x2b,0x2a,0x3e,0x2a,0x2a,0x3f,0x2a,0x2a,0x42,0x86,0x4,0xfe,0x44,0x44,0x54,0x88,0x10,0x50,0x7c,0x90,0x14,0xfe,0x10,0x10,0x10,0x10,
++0x10,0x11,0x11,0x15,0xff,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x87,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xfe,0x0,
++0x0,0x0,0x0,0xff,0x0,0x12,0x12,0x12,0x7f,0x12,0x12,0x12,0x12,0x22,0x41,0x2,0x40,0x50,0x48,0xfe,0x40,0x40,0x44,0x44,0x48,0x48,0x50,0x20,0x62,0x92,0xa,0x4,
++0x4,0xff,0x4,0x10,0x7f,0x10,0x7c,0x13,0x7c,0x11,0x39,0x35,0x51,0x91,0x11,0x11,0x44,0xfe,0x40,0x90,0xfc,0x90,0x94,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,
++0x8,0x8,0xff,0x8,0x9,0x2,0x4,0x8,0x14,0x24,0xc4,0x4,0x4,0x8,0x10,0x20,0x20,0x24,0xfe,0x20,0x20,0x80,0x40,0x20,0x50,0x4e,0x44,0x40,0x40,0x40,0x40,0x40,
++0x0,0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x2,0x4,0xc,0x34,0xc4,0x4,0x8,0x10,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x80,0x60,0x50,0x4e,0x44,0x40,0x40,0x40,
++0x9,0x9,0x9,0x17,0x11,0x31,0x5f,0x90,0x13,0x12,0x12,0x13,0x12,0x12,0x13,0x12,0x10,0x10,0x10,0xfc,0x10,0x14,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x1,0x1,0x2,0x4,0x8,0x10,0x24,0xc4,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x0,0x0,0x0,0x80,0x40,0x20,0x10,0x4e,0x44,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x0,0x1f,0x10,0x90,0x50,0x51,0x12,0x3d,0x51,0xd1,0x11,0x22,0x22,0x44,0x0,0x80,0x44,0xfe,0x40,0x40,0xa0,0x10,0xe,0x14,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0x40,0x20,0x2f,0x0,0xe5,0x25,0x25,0x2f,0x25,0x25,0x2d,0x35,0x24,0x9,0x0,0x20,0x28,0x24,0xfe,0x20,0x20,0x24,0x24,0xe8,0x28,0x30,0x20,0x60,0x92,0xa,0x4,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x20,0x2f,0x28,0x28,0x2f,0x28,0x48,0x8f,0x8,0x8,0xfc,0x8,0x8,0xf8,0x80,0x80,0x88,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x8,
++0x1,0x1,0x1,0x3f,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x1,0x1,0x1,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x28,0x10,0x0,0x0,0x0,
++0x10,0x14,0x3e,0x49,0x80,0x3e,0x22,0x23,0x3e,0x22,0x22,0x3e,0x22,0x22,0x4a,0x85,0x40,0x48,0xfc,0x10,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x94,0x8,
++0x0,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x40,0x0,0x10,0x38,0xc0,0x0,0x0,0x4,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x1,0x1,0x2,0x4,0x8,0x10,0x2f,0xc1,0x1,0x1f,0x1,0x11,0x9,0x5,0x7f,0x0,0x0,0x0,0x80,0x40,0x20,0x50,0xee,0x4,0x0,0xf0,0x0,0x10,0x20,0x48,0xfc,0x0,
++0x1,0x1,0x2,0x4,0x8,0x12,0x21,0xc0,0x0,0x1f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x80,0x40,0x20,0x10,0x8e,0x84,0x0,0xf0,0x10,0x20,0x20,0x40,0x80,0x0,
++0x0,0x40,0x37,0x10,0xf,0x80,0x67,0x20,0x8,0x17,0xe0,0x20,0x2f,0x20,0x20,0x20,0x80,0x88,0xfc,0x88,0xfe,0x88,0xf8,0x80,0x90,0xf8,0x80,0x88,0xfc,0x80,0x80,0x80,
++0x41,0x31,0x17,0x1,0xfb,0xd,0x11,0x29,0x73,0xa8,0x2f,0x20,0x21,0x22,0x24,0x20,0x10,0x10,0xfc,0x10,0xb8,0x56,0x10,0x10,0xf8,0x0,0xfe,0x40,0x50,0x4c,0x44,0xc0,
++0x4,0x25,0x25,0x24,0x24,0x24,0x7,0x4,0x1f,0x1,0x2,0x7f,0x1,0x9,0x11,0x63,0x0,0xf8,0x10,0xa0,0x40,0xb0,0xe,0x24,0xc0,0x0,0x10,0xf8,0x8,0x20,0x18,0x8,
++0x20,0x20,0x3b,0x42,0x83,0x7a,0x23,0x20,0xff,0x24,0x24,0x24,0x2c,0x30,0x20,0x0,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfc,0x44,0x44,0x44,0x54,0x48,0x40,0x40,
++0x8,0x8,0xb,0x10,0x11,0x31,0x51,0x91,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x16,0x0,0x4,0xfe,0x4,0x4,0x4,0x8,0x8,0x88,0x90,0x50,0x20,0x50,0x88,0x6,0x4,
++0x41,0x21,0x2f,0x1,0x1,0xe0,0x27,0x24,0x27,0x20,0x27,0x20,0x2b,0x30,0x2f,0x0,0x10,0x14,0xfe,0x10,0xf0,0x44,0xfe,0x44,0xfc,0x40,0xfc,0x40,0xf8,0x40,0xfe,0x0,
++0x2,0x42,0x22,0x2f,0x2,0x2,0xe2,0x22,0x2f,0x22,0x22,0x22,0x24,0x50,0x8f,0x0,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x26,0xfc,0x0,
++0x22,0x22,0xff,0x22,0x3e,0x8,0x7f,0x49,0x49,0x7f,0x8,0xff,0x8,0x8,0x9,0x8,0x2,0x6,0xf8,0x40,0x40,0x44,0x7e,0x48,0x48,0x48,0x48,0xc8,0x48,0x88,0x8,0x8,
++0x0,0x7f,0x4,0x24,0x14,0x4,0xff,0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x8,0xfc,0x40,0x48,0x50,0x44,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x8,0x8,0x7e,0x18,0x2c,0x4b,0x88,0x0,0x3f,0x0,0xff,0x1,0x9,0x11,0x25,0x2,0x20,0x28,0xfc,0x70,0xa8,0x24,0x22,0x0,0xf8,0x0,0xfe,0x0,0x20,0x18,0x8,0x0,
++0x0,0x40,0x33,0x12,0x2,0x2,0xf3,0x12,0x12,0x12,0x12,0x14,0x10,0x28,0x44,0x3,0x8,0x1c,0xe0,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6,0xfc,
++0x10,0x11,0x11,0x15,0x59,0x51,0x51,0x92,0x12,0x14,0x10,0x10,0x28,0x44,0x84,0x0,0x8,0xfc,0x8,0x8,0xf8,0x28,0x20,0x10,0xe,0xc4,0x20,0x10,0xc0,0x30,0x8,0x0,
++0x40,0x33,0x10,0x1,0x80,0x63,0x20,0x7,0x14,0x29,0xe1,0x20,0x20,0x20,0x23,0x2c,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x2,0xf4,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x0,0x1f,0x10,0x10,0x1f,0x11,0x10,0x10,0x10,0x16,0x21,0x40,0x86,0x1,0x0,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x80,0x80,0x40,0x20,0x90,0xe,0x4,0x80,0xc0,0x40,
++0x0,0xff,0x2,0x4,0xc,0x12,0x21,0x40,0xfe,0x8,0x8,0x8,0xf,0x71,0x22,0x0,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x84,0x4,0x28,0x10,
++0x12,0x12,0xff,0x12,0x0,0x7f,0x12,0x12,0xff,0x12,0x12,0x12,0x12,0x22,0x42,0x2,0x4,0x84,0xc4,0x24,0x24,0xa4,0x24,0xa4,0xe4,0x24,0x24,0x24,0x24,0x4,0x14,0x8,
++0x8,0x8,0x8,0xfe,0x8,0x7e,0x42,0x42,0x42,0x7e,0x14,0x15,0x16,0x24,0x41,0x82,0x20,0x20,0x24,0xfe,0x20,0xfc,0x84,0x84,0x84,0xfc,0x50,0x50,0x50,0x92,0x12,0xe,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x0,0x1,0xe,0x70,0x1f,0x1,0x1,0x1,0xff,0x0,0x40,0x44,0xfe,0x40,0x0,0xf8,0x20,0xc0,0x38,0x6,0xf0,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x8,0x7f,0x48,0x4b,0x48,0x7f,0x48,0x4b,0x7a,0x4b,0x4a,0x4b,0x7a,0x4a,0x2,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x28,0x10,
++0xf,0x8,0x8,0xf,0x8,0x8,0xf,0x8,0x7e,0x42,0x42,0x7e,0x42,0x42,0x7e,0x42,0xe0,0x20,0x20,0xe0,0x20,0x20,0xe0,0x24,0xfe,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,
++0x10,0x10,0x1e,0x25,0x48,0xbe,0x2a,0x2a,0x3e,0x2a,0x2a,0x3e,0x0,0xf,0x70,0x20,0x40,0x20,0x24,0xfe,0x8,0xfc,0x88,0x88,0x88,0xf8,0x20,0x70,0xac,0x24,0xa0,0x40,
++0x2,0x1,0x1,0xff,0x0,0x1f,0x10,0x10,0x10,0x1f,0x1,0x9,0x9,0x11,0x25,0x2,0x0,0x0,0x4,0xfe,0x10,0xf8,0x10,0x10,0x10,0xf0,0x0,0x40,0x30,0x18,0x8,0x0,
++0x10,0x10,0x17,0x10,0x58,0x57,0x52,0x92,0x12,0x13,0x10,0x11,0x12,0x14,0x11,0x10,0x80,0x44,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x10,0x10,0x93,0x54,0x19,0xfc,0x13,0x10,0x39,0x35,0x51,0x91,0x11,0x11,0x11,0x11,0x20,0x24,0xfe,0x20,0xfc,0x20,0xfe,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x4,0x4,0xc,
++0x10,0x13,0x92,0x54,0x19,0xfd,0x11,0x31,0x39,0x55,0x90,0x10,0x10,0x10,0x11,0x16,0x4,0xfe,0x20,0x24,0xfe,0x24,0xfc,0x24,0xfc,0x24,0xa0,0x40,0x60,0x90,0xe,0x4,
++0x10,0x13,0x20,0x20,0x44,0xfc,0x8,0x13,0x20,0x41,0xfc,0x0,0x1c,0xe0,0x47,0x0,0x0,0xfc,0x8,0x10,0x30,0x48,0x86,0x2,0x0,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x8,0x8,0x8,0x8,0x7f,0x8,0x8,0x8,0x8,0xff,0x8,0x8,0x8,0x8,0x10,0x20,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,
++0x14,0x7f,0x10,0x3f,0x55,0x1d,0x3,0xff,0x0,0x1f,0x0,0x1f,0x0,0x1f,0x10,0x1f,0x40,0x7c,0xc8,0x28,0x10,0x6e,0x4,0xfe,0x0,0xf0,0x0,0xf0,0x0,0xf0,0x10,0xf0,
++0x1f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x0,0x1f,0x10,0x10,0x1f,0x9,0x11,0x65,0x2,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x20,0x18,0x8,0x0,
++0x0,0xfd,0x4,0x8,0x18,0x26,0xc2,0x0,0x7c,0x10,0x10,0x10,0x1e,0xe0,0x40,0x3,0x4,0xfe,0x10,0x24,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0xa4,0x20,0x58,0x84,0x2,
++0x8,0x8,0x7e,0x9,0x3e,0x8,0xff,0x0,0x3f,0x22,0x3e,0x22,0x3e,0x22,0x22,0x26,0x40,0x40,0xf8,0x10,0x24,0xfe,0x24,0x24,0xfe,0x24,0x24,0xfc,0x24,0x20,0xa0,0x40,
++0x20,0x20,0x27,0x21,0x20,0xff,0x20,0x23,0x22,0x23,0x22,0x3b,0xe1,0x41,0x2,0xc,0x80,0x48,0xfc,0x10,0xa4,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x20,0x22,0x22,0x1e,
++0x12,0x12,0xff,0x12,0x20,0x3f,0x41,0xbd,0x25,0x25,0x25,0x25,0x3d,0x21,0x5,0x2,0x20,0x20,0xa0,0x24,0x7e,0x84,0x44,0x44,0x48,0x28,0x28,0x10,0x28,0x28,0x46,0x84,
++0x20,0x20,0x27,0x79,0x40,0x87,0x78,0x23,0x22,0xfb,0x22,0x23,0x29,0x31,0x22,0xc,0x80,0x48,0xfc,0x10,0xa4,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x20,0x22,0x22,0x1e,
++0x8,0xb,0x10,0x20,0x40,0x8,0x11,0x36,0x50,0x93,0x10,0x10,0x10,0x10,0x17,0x10,0x0,0xf8,0x10,0x20,0x60,0x98,0xe,0x2,0x0,0xf8,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x0,0x1f,0x10,0x57,0x30,0x10,0x13,0x3c,0x50,0x97,0x10,0x20,0x20,0x4f,0x80,0x80,0x44,0xfe,0x0,0xf8,0x30,0xc0,0x38,0x6,0x0,0xf8,0x40,0x40,0x44,0xfe,0x0,
++0x20,0x10,0x13,0xfc,0x3,0x48,0x4f,0x48,0x4b,0x12,0x13,0x1e,0xe3,0x42,0x2,0x2,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x28,0x10,
++0x2,0x1,0x3f,0x8,0x4,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x14,0x4,0x8,0x70,0x0,0x10,0xf8,0x20,0x44,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x50,0x42,0x42,0x3e,
++0x2,0x1,0x3f,0x8,0x4,0xff,0x0,0x1f,0x10,0x10,0x1f,0x14,0x4,0x4,0x8,0x70,0x0,0x10,0xf8,0x20,0x44,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x50,0x40,0x42,0x42,0x3e,
++0x1,0x1,0x83,0x64,0x28,0x7,0x10,0x20,0x3f,0xe0,0x20,0x2f,0x20,0x20,0x22,0x21,0x0,0x0,0xf0,0x20,0x48,0xfc,0x88,0x88,0xfe,0x88,0x88,0xf8,0x88,0x80,0x80,0x0,
++0x10,0x10,0x13,0x12,0x56,0x5a,0x52,0x92,0x12,0x12,0x12,0x12,0x2a,0x46,0x82,0x2,0x0,0x4,0xfe,0x4,0x4,0xf4,0x94,0x94,0x94,0x94,0x94,0xf4,0x94,0x4,0x14,0x8,
++0x2,0x1,0x7f,0x44,0x88,0x3f,0x4,0xff,0x4,0x3f,0x8,0xf,0x18,0x28,0xcf,0x8,0x0,0x0,0xfe,0x42,0x24,0xf0,0x14,0xfe,0x10,0xf0,0x0,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x17,0x11,0xf9,0x17,0x11,0x1b,0x33,0xd5,0x19,0x11,0x11,0x11,0x51,0x21,0x10,0xd0,0x10,0x12,0x54,0xb8,0x10,0x10,0x90,0x50,0x10,0x10,0x28,0x46,0x84,0x0,
++0x2,0x1,0x7f,0x44,0x88,0x12,0x2,0x3f,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x60,0x0,0x0,0xfe,0x42,0x34,0x10,0x20,0xf0,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x20,0x21,0x45,0xfd,0x9,0x11,0x21,0xfd,0x41,0x0,0x1c,0xe0,0x40,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x78,0x88,0x8,0x8,0x8,0x8,0x8,
++0x0,0x4,0xfe,0x10,0x11,0x11,0xfe,0x10,0x10,0x10,0x1e,0xf0,0x40,0x1,0x2,0xc,0x40,0x40,0x88,0xfc,0x8,0x8,0x10,0x10,0x20,0x20,0x50,0x50,0x88,0xe,0x4,0x0,
++0x4,0x4,0x7c,0x4,0x4,0x4,0x7c,0x4,0x4,0x4,0x7c,0x4,0x4,0x4,0xff,0x0,0x40,0x48,0x7c,0x40,0x40,0x48,0x7c,0x40,0x40,0x48,0x7c,0x40,0x40,0x44,0xfe,0x0,
++0x4,0x4,0x7,0x8,0x8,0x10,0x20,0x0,0x1,0x1,0x2,0x4,0x8,0x30,0xc0,0x0,0x0,0x40,0xe0,0x40,0x40,0x80,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0xe,0x4,0x0,
++0x4,0x7,0x8,0x10,0x21,0x2,0xc,0x11,0x69,0x9,0x9,0x11,0x2,0x4,0x18,0xe0,0x20,0xf0,0x20,0x40,0x80,0x60,0x10,0xc,0x24,0x30,0x20,0x40,0x0,0x40,0x30,0xe,
++0x4,0x4,0x4,0x4,0xff,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x10,0x20,0xc0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x40,0x2f,0x20,0x0,0x87,0x64,0x24,0xc,0x15,0x26,0xe4,0x25,0x24,0x24,0x27,0x24,0x4,0xfe,0xa0,0xa4,0xfe,0xa4,0xa4,0xa4,0x1c,0x4,0x4,0xf4,0x4,0x4,0xfc,0x4,
++0x0,0x3f,0x20,0x2f,0x29,0x29,0x2f,0x29,0x29,0x2f,0x2a,0x29,0x2e,0x48,0x41,0x82,0x4,0xfe,0x0,0x7c,0x10,0x50,0x50,0x54,0x7e,0x20,0x30,0x50,0xd2,0x92,0xe,0x0,
++0x10,0x14,0x12,0x10,0xfe,0x11,0x92,0x54,0x18,0x30,0x54,0xd2,0x10,0x10,0x50,0x23,0x40,0x40,0x40,0x44,0xfe,0x8,0x88,0x88,0x90,0x50,0x50,0x20,0x50,0x50,0x8e,0x4,
++0x0,0x20,0x23,0x22,0x22,0x22,0x22,0x23,0x22,0x22,0x22,0x22,0x22,0x23,0x22,0x20,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x0,0x1,0x6,0x78,0x40,0x40,0x40,0x44,0x7e,0x40,0x40,0x40,0x40,0x40,0x7f,0x40,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x3e,0x20,0x3c,0x20,0x3f,0x0,0x1f,0x11,0x1f,0x11,0x1f,0x1,0x7f,0x2,0xc,0x70,0x78,0x8,0x78,0x8,0xf8,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0xf8,0x8,0x48,0x30,
++0x10,0x10,0x1f,0x21,0x62,0x14,0x8,0x14,0x23,0xc0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x40,0x40,0x40,0x50,0x4c,0x44,0x40,0x46,0xfc,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x8,0x2,0xff,0x0,0x3f,0x22,0x22,0x22,0x3e,0x8,0x2a,0x49,0x88,0x29,0x12,0x40,0x50,0x48,0x40,0x44,0xfe,0x40,0x50,0x50,0x50,0x50,0x50,0x52,0x92,0xe,0x0,
++0x1,0x0,0x1f,0x11,0x91,0x51,0x52,0x14,0x30,0x50,0xd0,0x11,0x22,0x24,0x48,0x10,0x0,0x84,0xfe,0x0,0x0,0xf8,0x10,0x20,0x20,0x40,0xc0,0x20,0x10,0x8,0xe,0x4,
++0x28,0x28,0xfe,0x29,0x3a,0x11,0x7c,0x54,0x57,0x7c,0x10,0xfe,0x11,0x12,0x10,0x10,0x80,0x84,0xfe,0x4,0x44,0x54,0xe4,0x44,0xfc,0x44,0xe4,0xd4,0x54,0x44,0x54,0x48,
++0x10,0x10,0x11,0x11,0xfe,0x14,0x11,0x1d,0x31,0xd1,0x11,0x11,0x11,0x11,0x50,0x20,0x80,0x80,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0x24,0xe4,0x4,0x14,0x8,
++0x0,0x45,0x2d,0x11,0x29,0x49,0x89,0x19,0x29,0x49,0x89,0x9,0x9,0x9,0x57,0x20,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xfe,0x0,
++0x1,0x0,0x1f,0x10,0x93,0x52,0x12,0x13,0x32,0x52,0xd3,0x12,0x12,0x22,0x2f,0x40,0x0,0x84,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x8,0xfe,0x0,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x20,0x20,0x2f,0x28,0x48,0x48,0x8f,0x8,0x8,0xfc,0x8,0x8,0xf8,0x80,0x84,0xfe,0x80,0x88,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x8,0xfc,0x9,0x49,0x4a,0x4c,0x49,0x49,0x49,0x7d,0x5,0x1d,0xe5,0x4,0x28,0x10,0x80,0x80,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0xe4,0x24,0x4,0x14,0x8,
++0x8,0x8,0xff,0x8,0x10,0x1f,0x22,0x52,0x8a,0x7f,0x6,0xb,0xa,0x12,0x22,0x2,0x20,0x24,0xfe,0x20,0x4,0xfe,0x4,0x44,0x84,0xf4,0x4,0x84,0xc4,0x44,0x14,0x8,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x20,0x27,0x24,0x24,0x27,0x24,0x40,0x80,0x8,0xfc,0x8,0x8,0xf8,0x0,0x4,0xfe,0x4,0xe4,0x24,0x24,0xe4,0x4,0x14,0x8,
++0x0,0x9,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0xf,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xfe,0x0,
++0x20,0x23,0x2a,0x3e,0x52,0x93,0x12,0xfe,0x12,0x12,0x13,0x2a,0x26,0x42,0x83,0x0,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x4,0xfe,0x0,
++0x22,0x19,0x9,0x0,0xff,0x4,0x9,0x11,0x2f,0xc1,0x1,0x3f,0x1,0x1,0x1,0x1,0x8,0x18,0x20,0x44,0xfe,0x40,0x20,0x10,0xee,0x4,0x10,0xf8,0x0,0x0,0x0,0x0,
++0x40,0x33,0x12,0x2,0x82,0x63,0x22,0xa,0x12,0x23,0xe2,0x22,0x22,0x22,0x3f,0x20,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x14,0xfe,0x0,
++0xff,0x22,0x3e,0x22,0x3e,0x22,0xff,0x2,0x3f,0x5,0x9,0x33,0x5,0x9,0x71,0x1,0x80,0xfe,0x44,0x28,0x10,0x28,0xc6,0x70,0x88,0x18,0xa0,0x40,0x30,0xe,0x4,0x0,
++0x10,0x13,0x12,0x12,0xfe,0x13,0x16,0x1a,0x32,0xd2,0x13,0x12,0x12,0x12,0x53,0x20,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x4,0xfe,0x0,
++0x10,0x13,0x12,0x12,0xff,0x12,0x16,0x1b,0x32,0xd2,0x13,0x15,0x15,0x15,0x59,0x21,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0xfe,0x20,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x3f,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x3f,0x0,0x10,0xf8,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x0,0x0,0x8,0xfc,0x0,
++0x0,0xf,0x8,0x8,0xf,0x8,0xf,0x8,0xf,0x8,0x8,0xff,0x4,0xc,0x10,0x20,0x20,0xf0,0x20,0x20,0xe0,0x20,0xe0,0x20,0xe0,0x20,0x24,0xfe,0x40,0x20,0x18,0x8,
++0x0,0x7d,0x45,0x45,0x45,0x7d,0x11,0x11,0x51,0x5d,0x51,0x51,0x5d,0xf1,0x41,0x0,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x7d,0x45,0x45,0x45,0x7d,0x11,0x11,0x51,0x5d,0x51,0x52,0x5e,0xe4,0x48,0x0,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0xfe,0x20,0x24,0xfe,0x84,0x84,0x84,0xfc,0x84,
++0x20,0x21,0x3d,0x41,0x81,0x7d,0x21,0x21,0xfd,0x21,0x25,0x2a,0x32,0x24,0x8,0x0,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0xfe,0x20,0x24,0xfe,0x84,0x84,0x84,0xfc,0x84,
++0x8,0xb,0xa,0x12,0x13,0x32,0x53,0x92,0x13,0x12,0x12,0x1f,0x10,0x11,0x13,0x14,0x8,0xfc,0x8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0xfe,0x0,0x10,0xc,0x4,
++0x4,0x4,0x8,0xf,0x10,0x20,0x4f,0x8,0x8,0x8,0x8,0xf,0x8,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x4,0x44,0xe4,0x44,0x44,0x44,0x44,0xc4,0x44,0x4,0x28,0x10,
++0x10,0x13,0x12,0x12,0x5b,0x56,0x53,0x92,0x13,0x12,0x12,0x1f,0x10,0x11,0x13,0x14,0x8,0xfc,0x8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0xfe,0x0,0x10,0xc,0x4,
++0x10,0x11,0x11,0x15,0x59,0x51,0x51,0x91,0x11,0x11,0x11,0x29,0x25,0x45,0x81,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x3f,0x20,0x20,0x3f,0x24,0x25,0x3f,0x24,0x24,0x3f,0x50,0x50,0x50,0x9f,0x10,0x84,0xc4,0xa4,0xa4,0xa4,0x24,0x24,0xa4,0x24,0xa4,0xe4,0xa4,0x84,0x84,0x94,0x88,
++0x10,0x11,0x11,0x11,0xfd,0x10,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x11,0x51,0x21,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0xc,
++0x2,0x7f,0x42,0x42,0x7e,0x0,0x7e,0x42,0x42,0x7e,0x42,0x42,0x7f,0x42,0x4a,0x44,0x20,0x44,0xfe,0x84,0xa4,0x84,0x94,0x88,0x80,0xfe,0x2,0x12,0xfa,0x2,0x14,0x8,
++0x10,0x11,0x11,0x11,0xfd,0x24,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x81,0x1,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x14,0x8,
++0x8,0xa,0x9,0x10,0x17,0x30,0x5f,0x91,0x12,0x15,0x19,0x11,0x11,0x11,0x11,0x10,0x40,0x48,0x50,0x40,0xfc,0xa0,0xfe,0x10,0x8,0xf6,0x14,0x10,0x50,0x24,0x4,0xfc,
++0x1,0x11,0x9,0x7f,0x2,0xff,0x4,0x8,0x1f,0x28,0xcf,0x8,0xf,0x8,0xf,0x8,0x0,0x10,0x20,0xfc,0x0,0xfe,0x40,0x20,0xf0,0x2e,0xe4,0x20,0xe0,0x20,0xe0,0x20,
++0x1,0x11,0x9,0x1,0x7f,0x2,0xff,0x4,0x8,0x1f,0x28,0xc8,0x9,0x8,0x8,0x7,0x0,0x10,0x20,0x8,0xfc,0x80,0xfe,0x40,0x20,0xf0,0x2e,0x24,0x20,0xc8,0x8,0xf8,
++0x8,0x9,0x11,0x21,0x45,0xfc,0x9,0x11,0x21,0xfd,0x41,0x1,0x1d,0xe1,0x41,0x1,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x14,0x8,
++0x20,0x2f,0x28,0x2a,0xf9,0x2f,0x38,0x6a,0xaa,0x2a,0x2b,0x2a,0x28,0x31,0xa1,0x42,0x4,0xfe,0x8,0x28,0x4e,0xf2,0xa0,0xa8,0xa8,0xa8,0xe8,0x94,0x94,0x24,0x22,0x40,
++0x27,0x26,0x25,0x24,0xff,0x20,0x23,0x26,0x3b,0xe2,0x22,0x20,0x23,0x20,0xa0,0x47,0xbc,0xb4,0xac,0xa4,0xbc,0x40,0xfc,0x40,0xf8,0x40,0x7c,0x0,0xf8,0x90,0x60,0x9e,
++0x10,0x10,0x10,0x10,0xff,0x10,0x14,0x18,0x30,0xd7,0x10,0x11,0x11,0x12,0x54,0x28,0x80,0x80,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0xfe,0x80,0x40,0x20,0x10,0xe,0x4,
++0x20,0x27,0x24,0x24,0xff,0x24,0x25,0x2d,0x35,0xe5,0x24,0x25,0x25,0x29,0xb1,0x41,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0x24,0x24,0xfc,0x20,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x17,0x14,0x24,0x27,0x64,0xa5,0x25,0x25,0x25,0x24,0x25,0x25,0x29,0x31,0x21,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0x24,0x24,0xfc,0x20,0x24,0x24,0x24,0xfc,0x4,
++0x0,0x7f,0x11,0x9,0x7f,0x44,0x7f,0x0,0x7e,0x43,0x7e,0x42,0x7e,0x44,0x7e,0x2,0x38,0xd0,0x10,0x24,0xfe,0x44,0xfc,0x8,0x8,0xfe,0x8,0x88,0x48,0x8,0x28,0x10,
++0x12,0x9,0x9,0x7f,0x40,0x80,0x1f,0x10,0x11,0x11,0x11,0x12,0x12,0x4,0x8,0x70,0x10,0x10,0x20,0xfe,0x2,0x14,0xf8,0x10,0x10,0x10,0x90,0x90,0x90,0x84,0x84,0x7c,
++0x0,0x40,0x30,0x10,0x7,0x8,0x10,0x10,0x20,0xef,0x20,0x21,0x21,0x22,0x24,0x28,0x80,0x80,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0xfe,0x80,0x40,0x20,0x10,0xe,0x4,
++0x0,0x40,0x30,0x10,0x7,0x0,0xf0,0x10,0x10,0x1f,0x10,0x15,0x19,0x12,0x4,0x8,0x80,0x80,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0xfe,0x80,0x40,0x20,0x10,0xe,0x4,
++0x10,0x10,0x10,0x20,0x45,0xff,0x9,0x11,0x21,0xfd,0x41,0x1,0x1d,0xe1,0x41,0x0,0x40,0x40,0x78,0x90,0x24,0xfe,0x24,0x24,0x24,0xfc,0x4,0x0,0x0,0x2,0x2,0xfe,
++0x10,0x10,0x10,0x10,0x11,0xfd,0x12,0x10,0x10,0x10,0x10,0x1d,0xf0,0x40,0x0,0x0,0x80,0x80,0x84,0xfe,0x4,0x4,0x84,0x44,0x14,0x24,0x44,0x84,0x84,0x4,0x28,0x10,
++0x8,0x8,0xff,0x8,0x7f,0x40,0x41,0x4f,0x41,0x7f,0x45,0x49,0x51,0x41,0x7f,0x40,0x20,0x24,0xfe,0x20,0xfc,0x44,0xe4,0x4,0x24,0xf4,0x44,0x34,0x14,0x4,0xfc,0x4,
++0x10,0x10,0x14,0x1e,0x21,0x41,0xbe,0x10,0x10,0x7c,0x10,0x11,0x14,0x18,0x10,0x0,0x80,0x80,0x84,0xfe,0x4,0x4,0x84,0x44,0x14,0x24,0x44,0x84,0x84,0x4,0x28,0x10,
++0x0,0x7f,0x42,0x82,0x3f,0x4,0x9,0x11,0x3f,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x0,0xfe,0x2,0x14,0xf8,0x0,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x4,0x4,0xff,0x4,0x4,0x3f,0x8,0x8,0x1f,0x18,0x28,0x48,0x8f,0x8,0x10,0xf8,0x10,0x14,0xfe,0x10,0x10,0xf0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x10,0x11,0x57,0x54,0x55,0x56,0x54,0x55,0x56,0x7c,0x44,0x0,0x1,0x6,0x40,0x40,0x90,0x8,0xfc,0x90,0xc,0x84,0xf8,0x88,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x8,0x8,0x8,0x11,0x17,0x31,0x52,0x95,0x11,0x12,0x13,0x14,0x18,0x10,0x11,0x16,0x40,0x40,0x90,0x8,0xfc,0x10,0xc,0x4,0xf0,0x10,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x0,0x40,0x30,0x10,0xff,0x0,0x49,0x4a,0x48,0x49,0x51,0x12,0x1c,0xe0,0x40,0x3,0x20,0x20,0x48,0x84,0xfe,0x88,0x6,0x82,0xf8,0x8,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x40,0x30,0x10,0x1,0x87,0x61,0x22,0x5,0x11,0x22,0xe3,0x24,0x28,0x20,0x21,0x26,0x40,0x40,0x90,0x8,0xfc,0x10,0xc,0x4,0xf0,0x10,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x0,0x7f,0x11,0x11,0xff,0x11,0x11,0x7f,0x20,0x41,0xbf,0x21,0x21,0x21,0x3f,0x21,0x0,0x7c,0x44,0x44,0xc8,0x48,0x50,0x48,0x44,0x42,0xc2,0x62,0x54,0x48,0x40,0x40,
++0x8,0xfc,0x8,0x48,0x4b,0x48,0x49,0x4a,0x48,0x7d,0x6,0x4,0x34,0xc4,0x14,0xb,0x20,0x20,0x48,0x84,0xfe,0x88,0x6,0x82,0xf8,0x8,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x0,0x0,0xf7,0x94,0x98,0x91,0x92,0x90,0x91,0x9e,0x93,0xf2,0x92,0x2,0x3,0x2,0x80,0x40,0xfe,0x82,0xf4,0x10,0xa0,0x40,0xb0,0xe,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x4,0x74,0x54,0x5f,0x54,0x54,0x54,0x54,0x54,0x54,0x74,0x48,0xa,0x11,0x20,0x0,0x0,0x4,0xbe,0xe4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xbc,0x24,0x0,
++0x2,0x2,0x3,0x2,0x2,0x2,0xff,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x20,0xf0,0x0,0x0,0x4,0xfe,0x0,0x0,0x80,0x60,0x30,0x10,0x0,0x0,0x0,
++0x0,0x8,0x7c,0x49,0x4b,0x4c,0x48,0x48,0x49,0x4e,0x49,0x79,0x49,0x1,0x1,0x1,0x80,0x80,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,0x4,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x7f,0x8,0x8,0x8,0x8,0x8,0xff,0x8,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x10,0x12,0x12,0x13,0xfe,0x12,0x17,0x1a,0x30,0xd3,0x12,0x12,0x13,0x12,0x52,0x23,0x20,0x20,0x24,0xac,0x30,0xa2,0x22,0x1e,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,
++0x10,0x12,0x12,0x13,0xfe,0x12,0x3b,0x36,0x50,0x53,0x92,0x12,0x13,0x12,0x12,0x13,0x20,0x20,0x24,0xac,0x30,0xa2,0x22,0x5e,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,
++0x8,0x49,0x49,0x49,0x7f,0x2,0xff,0x2,0x2,0x7e,0x42,0x40,0x46,0x58,0x61,0x2,0x8,0x7c,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x8a,0x8a,0x6,0x0,
++0x20,0x27,0x24,0x24,0xb7,0xac,0xa4,0x27,0x24,0x24,0x25,0x24,0x27,0x24,0x20,0x21,0x4,0xbe,0x88,0xa8,0xa8,0xa8,0xa8,0xbe,0x8,0x10,0x18,0xa8,0xaa,0x4a,0x86,0x0,
++0x1,0x3f,0x4,0x4,0x4,0x4,0x4,0xff,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x84,0x4,0x24,0x24,0x24,0xa4,0xe4,0x24,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x11,0x11,0x17,0x11,0xfd,0x11,0x11,0x11,0x11,0x1f,0x12,0x1e,0xf3,0x42,0x3,0x0,0x10,0x10,0xfc,0x10,0xf0,0x10,0xf0,0x10,0x14,0xfe,0x0,0x90,0x8,0x0,0xfc,0x0,
++0x22,0x22,0x7f,0x22,0x3e,0x22,0x3e,0x22,0x22,0xff,0x54,0x62,0x40,0x7e,0x1,0x2,0x20,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0xa4,0x24,0x44,0x44,0x84,0x14,0x8,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x14,0x10,0x10,0x10,0x10,0x1c,0xe1,0x42,0x4,0x8,0x80,0x80,0x80,0xfc,0x4,0x8,0x40,0x40,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x0,0x4,0xfe,0x10,0x11,0x22,0x24,0x7e,0xa4,0x24,0x24,0x24,0x25,0x3e,0x24,0x8,0x80,0x80,0x80,0xfc,0x4,0x8,0x40,0x40,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x0,0x7f,0x2,0x7f,0x4,0xff,0x8,0x1f,0x30,0x5f,0x90,0x1f,0x10,0x10,0x1f,0x10,0x70,0x80,0x10,0xf8,0x0,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x1,0x0,0x3f,0x20,0x2f,0x20,0x3f,0x20,0x2f,0x28,0x24,0x22,0x44,0x48,0x92,0x1,0x0,0x84,0xfe,0x80,0xf8,0x88,0xfe,0x88,0xf8,0x80,0xc4,0xa8,0x90,0x8e,0x84,0x0,
++0x20,0x20,0x27,0x24,0xb7,0xac,0xa7,0xa4,0x27,0x24,0x25,0x24,0x25,0x2a,0x30,0x20,0x80,0x44,0xfe,0x40,0xfc,0x44,0xfe,0x44,0xfc,0x48,0x50,0xe0,0x50,0x4e,0x44,0xc0,
++0x20,0x20,0x27,0xac,0x77,0x24,0xff,0x24,0x77,0x6c,0xa5,0x24,0x25,0x2a,0x30,0x20,0x80,0x44,0xfe,0x40,0xfc,0x44,0xfe,0x44,0xfc,0x48,0x50,0xe0,0x50,0x4e,0x44,0xc0,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x14,0x18,0x30,0xd0,0x10,0x10,0x10,0x1f,0x50,0x20,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,0x0,
++0x10,0x10,0x10,0x17,0xfc,0x10,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x12,0x52,0x24,0x80,0x40,0x44,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x2,0x1,0x1,0xff,0x0,0x0,0xf,0x8,0x8,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x0,0x0,0x4,0xfe,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x10,0x17,0x54,0x58,0x51,0x91,0x11,0x11,0x11,0x29,0x25,0x42,0x82,0x4,0x80,0x40,0x44,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x2,0x2,0x3f,0x2,0x2,0xff,0x2,0x4,0xf,0x12,0x27,0x40,0x80,0x2,0x1,0x0,0x0,0x10,0xe0,0x40,0x84,0xfe,0x0,0x10,0xf8,0x0,0xf0,0x10,0x10,0x20,0x20,0xc0,
++0x10,0x10,0x13,0x10,0xfc,0x17,0x10,0x19,0x33,0xd4,0x19,0x10,0x10,0x11,0x50,0x20,0x80,0x88,0xf8,0x90,0xa4,0xfe,0x80,0x8,0xfc,0x80,0xf8,0x8,0x8,0x10,0x90,0x60,
++0x10,0x10,0x13,0x54,0x58,0x53,0x90,0x11,0x13,0x14,0x19,0x28,0x24,0x45,0x80,0x0,0x80,0x88,0xf8,0x90,0xa4,0xfe,0x80,0x8,0xfc,0x80,0xf8,0x8,0x8,0x10,0x90,0x60,
++0x11,0x1f,0x21,0xff,0x0,0x1f,0x10,0x1f,0x2,0x7e,0x2,0x3e,0x2,0x7e,0x2,0x2,0x20,0xf0,0x4,0xfe,0x0,0xf0,0x10,0xf0,0x80,0xfc,0x80,0xf8,0x80,0xfc,0x80,0x80,
++0x10,0x10,0x17,0x10,0x10,0xfd,0x11,0x11,0x11,0x11,0x11,0x1d,0xf1,0x40,0x0,0x0,0x0,0x4,0xfe,0x8,0x8,0xe8,0x28,0x28,0x28,0x28,0x28,0xe8,0x28,0x8,0x28,0x10,
++0x8,0x8,0x7f,0x8,0x0,0xff,0x0,0x1,0x1f,0x11,0x11,0x11,0x1f,0x11,0x0,0x0,0x20,0x28,0xfc,0x20,0x4,0xfe,0x20,0x20,0xa0,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x10,0x17,0x10,0xfc,0x11,0x39,0x35,0x51,0x51,0x91,0x11,0x11,0x10,0x10,0x10,0x0,0x4,0xfe,0x8,0x8,0xe8,0x28,0x28,0x28,0x28,0x28,0xe8,0x28,0x8,0x28,0x10,
++0x10,0x13,0x12,0x12,0xff,0x12,0x3a,0x37,0x50,0x5f,0x90,0x10,0x11,0x12,0x1c,0x10,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0xfe,0x40,0xe0,0x50,0x4e,0x44,0x40,
++0x0,0x4,0xff,0x10,0x10,0x21,0x20,0x7c,0xa5,0x24,0x25,0x25,0x25,0x3d,0x23,0x0,0x20,0x28,0xfc,0x20,0x24,0xfe,0x40,0x88,0xfc,0x0,0xfc,0x54,0x54,0x54,0xfe,0x0,
++0x0,0x7f,0x54,0x54,0x7d,0x55,0x55,0x7d,0x11,0xff,0x31,0x39,0x55,0x54,0x90,0x13,0x4,0xfe,0x40,0x84,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x8c,0x4,
++0x4,0xe,0xf8,0x8,0x8,0xfe,0x8,0x1c,0x1a,0x29,0x28,0x48,0x88,0x8,0x8,0x8,0x10,0x10,0x90,0x50,0x10,0x90,0x50,0x14,0x1e,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,
++0x1,0x1,0x7f,0x1,0x3f,0x0,0x7f,0x40,0x8f,0x8,0x8,0x8,0x8,0x8,0x10,0x60,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x22,0xf4,0x20,0x20,0x20,0x24,0x24,0x1c,0x0,
++0x0,0x0,0x8,0x7f,0x48,0x48,0x49,0x4b,0x48,0x48,0x48,0x79,0x4e,0x0,0x1,0x6,0x80,0x40,0x44,0xfe,0x40,0x80,0x8,0xf8,0x10,0x24,0x4c,0x90,0x20,0x50,0x8c,0x4,
++0x0,0xff,0x0,0x0,0x1f,0x10,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x0,0x0,0x4,0xfe,0x10,0x90,0xd0,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x10,0x10,0x50,0x20,
++0x0,0x47,0x34,0x17,0x84,0x67,0x22,0x3,0x14,0x24,0xe8,0x35,0x24,0x27,0x20,0x20,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x44,0x44,0xa4,0x14,0x4,0xe4,0x14,0x8,
++0x1,0x1,0xff,0x1,0x1,0x1f,0x10,0x10,0x10,0x1f,0x14,0x4,0x4,0x8,0x10,0x60,0x0,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x50,0x40,0x40,0x42,0x42,0x3e,
++0x8,0x4,0x4,0xff,0x4,0x8,0x10,0x7f,0x2,0x4,0x9,0x72,0x6,0x19,0xe0,0x0,0x4,0x4,0x84,0xc4,0x4,0xa4,0xa4,0x24,0x24,0xa4,0x24,0x24,0x4,0x84,0x94,0x8,
++0x2,0x1,0x7f,0x48,0x8f,0x8,0x14,0x23,0xc,0x30,0xcf,0x8,0x8,0x8,0xf,0x8,0x0,0x0,0xfe,0x2,0xf4,0x20,0x40,0x80,0x60,0x1e,0xe4,0x20,0x20,0x20,0xe0,0x20,
++0x0,0x43,0x22,0x22,0x3,0x2,0xe2,0x23,0x20,0x2f,0x20,0x29,0x32,0x24,0x8,0x0,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0xfe,0xe0,0x50,0x48,0x4e,0x44,0x40,
++0x1,0x9,0x9,0x9,0x9,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x10,0x0,0x10,0xf8,0x0,0x4,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x0,0x9,0x7d,0x49,0x49,0x4f,0x48,0x4b,0x4a,0x4b,0x4a,0x7b,0x4a,0x2,0x2,0x2,0x40,0x48,0x7c,0x40,0x44,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x3f,0x20,0x3f,0x20,0x3f,0x22,0x21,0x24,0x38,0x1,0x7f,0x1,0x1,0xff,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x8,0x90,0x60,0x1c,0x8,0xfc,0x0,0x4,0xfe,0x0,
++0x0,0x3f,0x20,0x3f,0x20,0x3f,0x22,0x21,0x24,0x38,0x2,0x51,0x50,0x90,0xf,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x8,0x90,0x60,0x1c,0x8,0x84,0x92,0x12,0xf0,0x0,
++0x10,0x10,0x10,0x17,0xfc,0x10,0x11,0x11,0x11,0x11,0x1d,0xf1,0x41,0x2,0x2,0x4,0x80,0x40,0x44,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x0,0x8,0x7c,0x4f,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x79,0x49,0x2,0x2,0x4,0x80,0x40,0x44,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x2,0x1,0x7f,0x40,0x84,0xc,0x10,0x20,0x0,0x3f,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0xfe,0x2,0x44,0x30,0x18,0x8,0x0,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x4,0xfe,0x10,0x10,0x10,0x10,0x1e,0xf1,0x42,0x0,0x52,0x51,0x50,0x90,0xf,0x0,0x10,0xf8,0x90,0x90,0xd0,0xb0,0x92,0x12,0xe,0x0,0x4,0x82,0x92,0x12,0xf0,0x0,
++0x0,0x7f,0x21,0x2,0xc,0x8,0x8,0xb,0x1c,0xe8,0x8,0x8,0x8,0x8,0x28,0x10,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x10,0x13,0x12,0xfc,0x10,0x15,0x18,0x30,0xd3,0x10,0x10,0x10,0x10,0x57,0x20,0x40,0x20,0xfe,0x2,0x54,0x88,0x4,0x0,0x8,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x13,0x12,0x13,0xfe,0x12,0x16,0x1a,0x32,0xd2,0x12,0x13,0x12,0x12,0x53,0x20,0x8,0xfc,0x0,0x8,0x88,0x50,0x50,0x20,0x20,0x50,0x98,0x8,0x0,0x4,0xfe,0x0,
++0x0,0x0,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3f,0x20,0x0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,
++0x8,0x8,0x8,0x8,0xfe,0x8,0x8,0xa,0xc,0x18,0xe8,0x8,0x8,0x8,0x28,0x10,0x0,0x0,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,0x0,0x0,
++0x2,0x1,0x7f,0x40,0x84,0x3e,0x0,0x1,0x7f,0x14,0x14,0x14,0x25,0x26,0x44,0x83,0x0,0x0,0xfe,0x42,0x74,0x40,0x40,0xf0,0x10,0xa0,0x40,0xa0,0x18,0xa,0x2,0xfe,
++0x10,0x10,0x10,0x10,0xff,0x10,0x38,0x34,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x2,0x3f,0x22,0x22,0x22,0x3e,0x22,0x1,0x1,0xff,0x1,0x2,0x4,0x8,0x30,0xc0,0x8,0xfc,0x88,0x88,0x88,0xf8,0x88,0x40,0x24,0xfe,0x0,0x80,0x40,0x30,0xe,0x4,
++0x2,0x1,0x7f,0x44,0x88,0x1f,0x10,0x1f,0x10,0x14,0x17,0x10,0x28,0x28,0x4f,0x88,0x0,0x0,0xfe,0x42,0x24,0xf8,0x8,0xf8,0x80,0x90,0xf0,0x80,0x88,0x88,0xf8,0x8,
++0x8,0x8,0x7f,0x8,0x9,0x1,0xff,0x1,0x1,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x20,0x28,0xfc,0x20,0x20,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x57,0x61,0x41,0x41,0x7f,0x41,0x41,0x7f,0x41,0x10,0x90,0x50,0x7c,0x50,0x90,0x10,0xfe,0x4,0x7e,0x44,0x44,0x44,0x44,0x7c,0x44,
++0x1,0x0,0x3f,0x21,0x21,0x3f,0x22,0x24,0x28,0x2f,0x20,0x20,0x3f,0x40,0x40,0x80,0x0,0x88,0xfc,0x0,0x8,0xfc,0x0,0x80,0x90,0xf8,0x80,0x84,0xfe,0x80,0x80,0x80,
++0x40,0x30,0x13,0x2,0xfe,0xb,0x12,0x37,0x5b,0x96,0x12,0x13,0x12,0x14,0x18,0x10,0x40,0x24,0xfe,0x40,0x48,0xfc,0x80,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x1,0x1,0x7f,0x2,0x4,0x18,0xe7,0x0,0x3f,0x4,0xf,0x0,0x0,0x4,0x2,0x1,0x0,0x8,0xfc,0x80,0x40,0x30,0xce,0x4,0xf8,0x0,0xe0,0x20,0x20,0x20,0x40,0x80,
++0x20,0x20,0x20,0x27,0xf8,0x21,0x22,0x25,0x28,0x23,0x38,0xe1,0x40,0x0,0x0,0x0,0x40,0x40,0x48,0xfc,0xa0,0x10,0xe,0xf4,0x0,0xfc,0x80,0xf8,0x8,0x8,0x90,0x60,
++0x10,0x10,0x10,0x17,0xf8,0x11,0x1a,0x35,0xd0,0x17,0x10,0x11,0x10,0x10,0x50,0x20,0x40,0x40,0x48,0xfc,0xa0,0x10,0xe,0xf4,0x0,0xfc,0x80,0xf8,0x8,0x8,0x90,0x60,
++0x4,0x7e,0x44,0x47,0x44,0x7d,0x12,0x15,0x5c,0x53,0x50,0x51,0x5c,0xf0,0x40,0x0,0x40,0x40,0x48,0xfc,0xa0,0x10,0xe,0xf4,0x0,0xfc,0x80,0xf8,0x8,0x8,0x90,0x60,
++0x0,0x78,0x48,0x4f,0x48,0x79,0x4a,0x4d,0x48,0x7b,0x48,0x49,0x48,0x48,0x48,0x98,0x40,0x40,0x48,0xfc,0xa0,0x10,0xe,0xf4,0x0,0xfc,0x80,0xf8,0x8,0x8,0x90,0x60,
++0x10,0x10,0x10,0x10,0x13,0xfc,0x10,0x10,0x10,0x17,0x1c,0xf1,0x41,0x2,0x4,0x8,0x80,0x80,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0xfe,0x80,0x40,0x20,0x10,0xe,0x4,
++0x12,0x1f,0x28,0x45,0x90,0x10,0x13,0x58,0x54,0x50,0x97,0x10,0x10,0x11,0x12,0x1c,0x44,0x7e,0xa0,0x10,0x40,0x48,0xfc,0x48,0x48,0x48,0xfe,0x40,0xa0,0x10,0xe,0x4,
++0x10,0x10,0x11,0x21,0x22,0x64,0xa8,0x33,0x20,0x20,0x2f,0x21,0x21,0x22,0x27,0x20,0x80,0x80,0x40,0x40,0x20,0x10,0x4e,0xe4,0x0,0x8,0xfc,0x0,0x20,0x10,0xf8,0x8,
++0x10,0x10,0x10,0x10,0x5b,0x54,0x50,0x90,0x10,0x1f,0x10,0x11,0x11,0x12,0x14,0x18,0x80,0x80,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0xfe,0x80,0x40,0x20,0x10,0xe,0x4,
++0x2,0x1,0x7f,0x44,0x84,0x7f,0x4,0x1f,0x10,0x11,0x11,0x11,0x12,0x4,0x8,0x70,0x0,0x0,0xfe,0x42,0x44,0xfc,0x50,0xf8,0x10,0x10,0x10,0x90,0x90,0x82,0x82,0x7e,
++0x8,0x9,0xff,0x8,0xa,0x7f,0x0,0x7f,0x0,0xff,0x8,0x2a,0x49,0x88,0x29,0x12,0x20,0x20,0xa0,0x7e,0x82,0x4,0x28,0x20,0x20,0xa0,0x20,0x50,0x50,0x88,0xe,0x4,
++0x0,0x7f,0x40,0x5f,0x41,0x41,0x41,0x4f,0x41,0x41,0x41,0x5f,0x40,0x40,0x7f,0x0,0x8,0xfc,0x0,0xf0,0x0,0x0,0x40,0xe0,0x0,0x0,0x20,0xf0,0x0,0x4,0xfe,0x0,
++0x12,0x1f,0x28,0x45,0xbf,0x20,0x2f,0x20,0x20,0x27,0x20,0x20,0x2f,0x20,0x3f,0x0,0x48,0x7c,0xa0,0x10,0xfc,0x0,0xf8,0x80,0xa0,0xf0,0x80,0x90,0xf8,0x0,0xfc,0x0,
++0x82,0x47,0x28,0x10,0x28,0x48,0x88,0x9,0x18,0x28,0x48,0x88,0x8,0x8,0x57,0x20,0x4,0xfe,0x20,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x13,0x12,0x12,0xfe,0x12,0x3a,0x36,0x52,0x52,0x92,0x12,0x13,0x12,0x13,0x10,0x8,0xfc,0x0,0xf8,0x20,0x20,0x20,0xf8,0x20,0x20,0x20,0x28,0xfc,0x0,0xfe,0x0,
++0x0,0x4,0xfe,0x11,0x11,0x21,0x25,0x3f,0x65,0xa5,0x25,0x25,0x3d,0x22,0x4,0x8,0x40,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0xb,0x7e,0x4a,0x4a,0x4a,0x7a,0x4a,0x4a,0x7a,0x4a,0x4a,0x4b,0x7a,0x4b,0x0,0x8,0xfc,0x0,0xf8,0x20,0x20,0x20,0xf8,0x20,0x20,0x20,0x28,0xfc,0x0,0xfe,0x0,
++0x0,0x8,0x7c,0x4b,0x4a,0x4a,0x7a,0x4a,0x4a,0x4a,0x4a,0x7a,0x44,0x4,0x8,0x10,0x40,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x47,0x34,0x14,0x4,0x4,0xf,0x12,0x22,0xe2,0x22,0x22,0x24,0x24,0x28,0x30,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x3f,0x0,0x0,0x0,0xff,0x4,0x4,0x8,0xf,0x0,0x0,0x0,0x2,0x1,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x20,0xc0,
++0x2,0x2,0xff,0x4,0x4,0xa,0x9,0x11,0x22,0x44,0x3f,0x24,0x24,0x24,0xff,0x0,0x0,0x4,0xfe,0x80,0x90,0xa0,0x40,0x20,0x1c,0x8,0xf8,0x48,0x48,0x48,0xfe,0x0,
++0x1,0x21,0x21,0x3f,0x20,0x8,0x4f,0x48,0x48,0x4b,0x48,0x50,0x10,0x27,0x40,0x80,0x0,0x8,0x8,0xf8,0x8,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x2,0x1,0x7f,0x44,0x88,0x8,0x3e,0x8,0x8,0x7e,0x8,0x8,0x14,0x12,0x20,0x43,0x0,0x0,0xfe,0x42,0x24,0xf8,0x88,0xa8,0xa8,0xa8,0xa8,0x30,0x52,0x52,0x8e,0x0,
++0x8,0x8,0xff,0x8,0x3e,0x22,0x14,0x8,0x3f,0xc1,0x1,0x3f,0x1,0x2,0xc,0x30,0x20,0x24,0xfe,0x20,0xa0,0x48,0x30,0x10,0xee,0x4,0x10,0xf8,0x0,0xc0,0x30,0x8,
++0x1,0x1,0xff,0x4,0x9,0x11,0x2f,0xc1,0x3f,0x1,0x1,0x1f,0x1,0x1,0x7f,0x0,0x0,0x4,0xfe,0x40,0x20,0x10,0xee,0x4,0xf8,0x0,0x20,0xf0,0x0,0x8,0xfc,0x0,
++0x10,0x20,0x7f,0x49,0x49,0x7f,0x49,0x49,0x7f,0x49,0xc,0x15,0x15,0x27,0x44,0x83,0x0,0x8,0x48,0x28,0x8,0x48,0x28,0x8,0xe,0xf8,0x8,0x8,0x48,0xc8,0x2,0xfe,
++0x10,0x11,0x17,0x24,0x24,0x67,0xa4,0x24,0x27,0x24,0x20,0x21,0x21,0x22,0x24,0x28,0x80,0x8,0xfc,0x48,0x48,0xf8,0x48,0x88,0xf8,0x88,0x90,0x50,0x68,0x7a,0x42,0x3e,
++0x20,0x20,0x23,0x3a,0x4b,0x50,0x8f,0x20,0x23,0x22,0x22,0x22,0x2a,0x30,0x21,0x6,0x40,0x48,0xfc,0x48,0xf8,0x40,0xfe,0x8,0xfc,0x8,0x48,0x48,0x48,0xb0,0xc,0x4,
++0x10,0x11,0x13,0x12,0x5a,0x57,0x52,0x92,0x13,0x12,0x10,0x11,0x11,0x12,0x14,0x18,0x80,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x80,0xc8,0x48,0x54,0x5e,0x42,0x3e,
++0x0,0x40,0x33,0x12,0x83,0x60,0x2f,0x8,0x13,0x22,0xe2,0x22,0x22,0x20,0x21,0x26,0x40,0x48,0xfc,0x48,0xf8,0x40,0xfe,0x8,0xfc,0x8,0x48,0x48,0x48,0xb0,0xc,0x4,
++0x20,0x20,0x20,0x27,0xfc,0x24,0x24,0x27,0x24,0x24,0x3c,0xe7,0x44,0x0,0x0,0x0,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x44,0x40,0x40,0x40,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x0,0x20,0x24,0x3e,0x20,0x20,0x2e,0x70,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x80,0x84,0x98,0xe0,0x80,0x82,0x82,0x7e,
++0x10,0x17,0x14,0x14,0xfc,0x17,0x14,0x1c,0x34,0xd5,0x16,0x14,0x14,0x14,0x57,0x24,0x4,0xfe,0x44,0x44,0x44,0xfc,0x44,0xc4,0xe4,0x5c,0x4c,0x44,0x44,0x4,0xfc,0x4,
++0x0,0x7f,0x41,0x41,0x41,0x5f,0x41,0x43,0x43,0x45,0x49,0x51,0x41,0x41,0x7f,0x40,0x4,0xfe,0x4,0x4,0x24,0xf4,0x4,0x4,0x84,0x64,0x34,0x14,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x13,0x10,0xfc,0x10,0x17,0x18,0x30,0xd3,0x12,0x12,0x12,0x12,0x53,0x22,0x8,0x3c,0xc0,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x16,0x1a,0x32,0xd2,0x12,0x12,0x12,0x14,0x54,0x28,0x40,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x22,0x3f,0x20,0x2f,0x28,0x2f,0x20,0x3f,0x21,0x22,0x5f,0x42,0x8a,0x4,0x84,0xfe,0x0,0xc0,0x3e,0xa2,0xa4,0xa8,0x24,0xa2,0x22,0x32,0xac,0x20,0x20,0x20,
++0x10,0xd,0x44,0x50,0x4b,0x40,0x60,0x57,0x40,0x48,0x53,0x72,0x52,0x53,0x52,0x40,0x4,0xfe,0x4,0x64,0x84,0x84,0xa4,0xf4,0x84,0xa4,0xf4,0x24,0x24,0xe4,0x14,0x8,
++0x10,0x10,0x10,0x13,0x10,0xfd,0x11,0x11,0x10,0x10,0x10,0x1c,0xe0,0x40,0x7,0x0,0x80,0x40,0x48,0xfc,0x0,0x8,0x8,0x8,0x90,0x90,0x90,0xa0,0x20,0x44,0xfe,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x11,0x15,0x19,0x30,0xd0,0x10,0x10,0x10,0x10,0x57,0x20,0x80,0x40,0x48,0xfc,0x0,0x8,0x8,0x8,0x90,0x90,0x90,0xa0,0x20,0x44,0xfe,0x0,
++0x1,0x11,0x7f,0x51,0x51,0x57,0x55,0x55,0x55,0x57,0x51,0x73,0x45,0x9,0x1,0x1,0x4,0x44,0xe4,0x4,0x54,0xf4,0x54,0x54,0x54,0xd4,0x14,0x84,0x44,0x4,0x14,0x8,
++0x10,0x10,0x10,0x13,0x7c,0x54,0x57,0x54,0x55,0x7d,0x51,0x15,0x1d,0xf5,0x41,0x1,0x90,0x90,0x90,0xfc,0x90,0x94,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x8,0x7c,0x48,0x4b,0x48,0x78,0x4f,0x48,0x49,0x79,0x49,0x49,0x49,0x49,0x89,0x19,0x90,0x90,0x90,0xfc,0x90,0x94,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x20,0x10,0x13,0xfe,0x44,0x29,0x29,0xff,0x11,0x15,0xfe,0x10,0x11,0x12,0x20,0x40,0x20,0x24,0xfe,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x70,0xa8,0x2e,0x24,0x20,0x20,
++0x2,0x2,0x72,0x5f,0x52,0x52,0x52,0x53,0x52,0x5e,0x52,0x72,0x52,0x2,0xb,0x4,0x20,0x10,0x14,0xfe,0x0,0x44,0xc4,0x44,0x44,0x48,0x28,0x28,0x28,0x0,0xfe,0x0,
++0x8,0x8,0xff,0x9,0x1,0x7f,0x1,0x9,0x5,0xff,0x3,0x5,0x9,0x31,0xc1,0x1,0x20,0x24,0xfe,0x20,0x8,0xfc,0x0,0x20,0x44,0xfe,0x80,0x40,0x30,0xe,0x4,0x0,
++0x1,0x1,0x1,0x7f,0x1,0x21,0x19,0x9,0xff,0x3,0x5,0x9,0x31,0xc1,0x1,0x1,0x0,0x0,0x8,0xfc,0x0,0x10,0x30,0x44,0xfe,0x80,0x40,0x30,0x1e,0x4,0x0,0x0,
++0x10,0x14,0xfe,0x10,0x7d,0x56,0x54,0x54,0x7c,0x10,0x38,0x34,0x54,0x90,0x10,0x13,0x20,0x20,0x7c,0x88,0x14,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0x20,0x58,0x84,0x2,
++0x8,0x8,0xff,0x8,0x4,0x24,0x25,0x26,0x24,0x4,0x3f,0x24,0x24,0x24,0xff,0x0,0x20,0x24,0xfe,0x20,0x90,0xf8,0x0,0x40,0x20,0x8,0xfc,0x48,0x48,0x48,0xfe,0x0,
++0x8,0x8,0x7e,0x8,0x1c,0x2a,0x49,0xa,0x2,0xff,0x4,0x8,0x4,0x3,0x4,0x18,0x20,0x28,0xfc,0x20,0x70,0xac,0x24,0x20,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x10,0x12,0x11,0x10,0xff,0x10,0x30,0x38,0x57,0x50,0x90,0x10,0x10,0x10,0x1f,0x10,0x0,0x8,0x10,0xa4,0xfe,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x10,0x12,0x11,0x10,0xff,0x10,0x14,0x18,0x33,0xd0,0x10,0x10,0x10,0x10,0x5f,0x20,0x0,0x8,0x10,0xa4,0xfe,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x12,0x1f,0x28,0x45,0x84,0x24,0x25,0x26,0x24,0x4,0x3f,0x24,0x24,0x24,0xff,0x0,0x48,0x7c,0xa0,0x10,0x80,0xfc,0x40,0x20,0x20,0x8,0xfc,0x48,0x48,0x48,0xfe,0x0,
++0x20,0x1b,0x49,0x41,0x7f,0x41,0x5f,0x59,0x55,0x51,0x5f,0x43,0x45,0x49,0x51,0x41,0x4,0xfe,0x4,0x14,0xfc,0x4,0xf4,0x34,0x54,0x14,0xf4,0x84,0x44,0x34,0x14,0xc,
++0x10,0x8,0x4,0x7f,0x0,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x10,0x20,0x48,0xfc,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x42,0x31,0x15,0x4,0x87,0x64,0x25,0xd,0x15,0x25,0xe5,0x24,0x25,0x26,0x24,0x24,0x4,0x7e,0x4,0x54,0xfc,0x44,0xf4,0x54,0xf4,0x54,0xf4,0xe4,0x54,0x4c,0x44,0xc,
++0x2,0x41,0x25,0x24,0x7,0x4,0xe5,0x25,0x25,0x25,0x25,0x24,0x2d,0x36,0x24,0x4,0x4,0x7e,0x4,0x54,0xfc,0x44,0xf4,0x54,0xf4,0x54,0xf4,0xe4,0x54,0x4c,0x44,0xc,
++0x10,0x12,0x12,0x12,0xfe,0x12,0x14,0x1b,0x32,0xd2,0x12,0x12,0x12,0x10,0x51,0x26,0x90,0x94,0x9e,0xa8,0xc4,0x84,0x88,0xfc,0x8,0x48,0x48,0x68,0xa8,0xa2,0x22,0x1e,
++0x8,0x48,0x48,0x49,0x4a,0x48,0x1f,0x10,0x11,0x11,0x11,0x11,0x12,0x4,0x18,0xe0,0x80,0x84,0xfe,0x20,0x10,0x10,0xf8,0x10,0x10,0x10,0x10,0x90,0x90,0x82,0x82,0x7e,
++0x22,0x22,0x3f,0x22,0xaf,0xaa,0xaa,0xaa,0x2f,0x22,0x27,0x2a,0x32,0x22,0x22,0x22,0x10,0x10,0xdc,0x24,0xc8,0xbe,0xa2,0xaa,0xaa,0x2a,0x2a,0xaa,0x2a,0x8,0x14,0x62,
++0x10,0x12,0x22,0x22,0x42,0xfe,0x8,0x13,0x22,0xfe,0x2,0x2,0x1c,0xe0,0x41,0xe,0x90,0x90,0x9e,0xa8,0xc4,0x84,0x88,0xfc,0x8,0x48,0x48,0x68,0xa0,0xa2,0x22,0x1e,
++0x10,0x11,0x10,0x54,0x58,0x57,0x50,0x90,0x10,0x13,0x10,0x28,0x24,0x40,0x8f,0x0,0x0,0x8,0x90,0xa0,0x4,0xfe,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x1,0x41,0x35,0x15,0x85,0x65,0x25,0x1,0x10,0x27,0xe5,0x25,0x25,0x25,0x3f,0x20,0x20,0x20,0x24,0x3e,0x50,0x88,0x8,0x0,0x8,0xfc,0x28,0x28,0x28,0x28,0xfe,0x0,
++0x0,0x8,0xff,0x12,0x12,0x13,0x12,0xfe,0x13,0x12,0x12,0x12,0x1e,0xf2,0x43,0x2,0x80,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x48,0x30,0x10,0x8e,0x4,0x0,
++0x22,0x21,0x20,0x27,0xfc,0x24,0x77,0x6c,0xa4,0x27,0x24,0x25,0x25,0x26,0x24,0x20,0x0,0x0,0x3e,0xa2,0xa4,0xa4,0xa8,0xa4,0xa4,0xa2,0x22,0x22,0xb4,0xa8,0x20,0x20,
++0x0,0x44,0x2b,0x12,0x2a,0x4b,0x8a,0xa,0x1b,0x2a,0x4a,0x8a,0xa,0xa,0x53,0x22,0x80,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x48,0x30,0x10,0x8e,0x4,0x0,
++0x0,0x3f,0x24,0x22,0x2f,0x28,0x2f,0x28,0x2f,0x28,0x29,0x2b,0x4c,0x48,0x80,0x0,0x84,0xfe,0x0,0x0,0xbe,0xa2,0xa4,0xa8,0xa4,0x22,0x22,0xa2,0xb4,0x28,0x20,0x20,
++0x8,0x5,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x21,0x20,0x24,0x26,0x79,0x20,0x0,0x0,0x0,0xfc,0x44,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,0x40,
++0x8,0x5,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x21,0x20,0x24,0x26,0x79,0x21,0x2,0x4,0x7e,0xc4,0x44,0x44,0x7c,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x84,0x14,0x8,
++0x0,0x40,0x33,0x12,0x82,0x63,0x26,0xa,0x13,0x22,0xe2,0x22,0x22,0x22,0x23,0x22,0x80,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x48,0x30,0x10,0x8e,0x4,0x0,
++0x11,0x11,0x17,0x11,0xf8,0x17,0x14,0x18,0x33,0xd0,0x10,0x10,0x10,0x11,0x51,0x2e,0x10,0x10,0xfc,0x10,0x0,0xfe,0x82,0x84,0xf8,0x88,0x88,0x88,0x88,0x8,0x28,0x10,
++0x4,0x4,0x7f,0x4,0x4,0x7f,0x42,0x82,0x1f,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x48,0xfc,0x40,0x40,0xfe,0x2,0x14,0xf8,0x10,0x10,0x10,0x10,0x10,0xa0,0x40,
++0x2,0x1,0x7f,0x41,0x91,0x11,0x1f,0x11,0x21,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0xfe,0x2,0x4,0x20,0xf0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x2,0x2,0x2,0x3f,0x2,0x2,0xff,0x1,0x2,0x4,0xc,0x14,0x27,0x44,0x84,0x3,0x0,0x0,0x88,0xd8,0x20,0x44,0xfe,0x0,0x0,0x10,0x30,0xc0,0x0,0x4,0x4,0xfc,
++0x8,0x8,0x8,0x17,0x10,0x30,0x50,0x9f,0x11,0x13,0x15,0x19,0x11,0x11,0x10,0x10,0x80,0x80,0x84,0xec,0x90,0xa0,0xc4,0xfe,0x0,0x8,0x30,0xc0,0x4,0x4,0xfc,0x0,
++0x20,0x20,0x20,0x27,0xf8,0x48,0x48,0x4f,0x49,0x8b,0x55,0x21,0x51,0x49,0x80,0x0,0x80,0x80,0x84,0xec,0x90,0xa0,0xc4,0xfe,0x0,0x8,0x30,0xc0,0x4,0x4,0xfc,0x0,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x55,0x55,0x63,0x41,0x7f,0x41,0x7f,0x41,0x20,0xa0,0x3c,0x44,0xc4,0x28,0x10,0x28,0xc6,0x4,0x7e,0x44,0x44,0x44,0x7c,0x44,
++0x10,0x10,0x10,0x15,0x59,0x52,0x50,0x90,0x11,0x16,0x11,0x11,0x29,0x25,0x41,0x81,0x80,0x80,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x41,0x31,0x17,0x81,0x60,0x2f,0x8,0x10,0x10,0x27,0xe0,0x21,0x21,0x22,0x24,0x28,0x10,0x10,0xfc,0x10,0x0,0xfe,0x2,0x84,0x88,0xfc,0x88,0x8,0x8,0x8,0x50,0x20,
++0x22,0x22,0xff,0x22,0x22,0x3e,0x8,0x7f,0x49,0x49,0x7f,0x8,0xff,0x8,0x9,0xa,0x20,0x20,0xa0,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x44,0x44,0xc4,0x84,0x14,0x8,
++0x0,0x0,0x1f,0x10,0x11,0x11,0x21,0x7f,0x1,0x1,0x9,0x9,0x11,0x21,0x45,0x2,0x20,0xf0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x20,0x10,0x8,0xc,0x4,0x0,
++0x0,0x3f,0x1,0x7f,0x41,0x9d,0x1,0x1d,0x1,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x10,0xf8,0x0,0xfe,0x2,0x74,0x0,0x70,0x0,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,
++0x20,0x23,0x38,0x47,0x84,0x7b,0x20,0x23,0xf8,0x27,0x24,0x24,0x2f,0x34,0x24,0x7,0x8,0xfc,0x40,0xfe,0x42,0x58,0x40,0x58,0x40,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,
++0x4,0x7f,0x4,0x3f,0x1,0x7f,0x41,0x9d,0x1,0x1d,0x1,0x3f,0x21,0x3f,0x21,0x3f,0x48,0xfc,0x40,0xf8,0x0,0xfe,0x2,0x74,0x0,0x70,0x0,0xf8,0x8,0xf8,0x8,0xf8,
++0x3f,0x4,0x8,0x1f,0x28,0x48,0x8f,0x4,0xfe,0x10,0x20,0x7e,0xa3,0x22,0x3e,0x20,0xf8,0x0,0x10,0xf8,0x10,0x10,0xf0,0x4,0xfe,0x20,0x44,0xfe,0x44,0x44,0x7c,0x40,
++0x0,0x3f,0x21,0x3f,0x21,0x3f,0x22,0x4,0x3f,0x2,0x4,0x3f,0x9,0x11,0x65,0x2,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x20,0xc0,0x10,0x8,0xf8,0x20,0x18,0x8,0x0,
++0x13,0x12,0x12,0x23,0x22,0x62,0xa3,0x20,0x2f,0x2a,0x2a,0x2f,0x2a,0x2a,0x2f,0x28,0xf8,0x48,0x48,0xf8,0x48,0x48,0xf8,0x0,0xbe,0xaa,0xaa,0xbe,0xaa,0xaa,0xbe,0xa2,
++0x1,0x2,0x4,0x8,0x3f,0x8,0x10,0x24,0x7e,0x1,0x1,0x3f,0x1,0x1,0xff,0x0,0x0,0x0,0x20,0x10,0xf8,0x10,0x20,0x48,0xfc,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,
++0x20,0x23,0x20,0x27,0xfc,0x2b,0x20,0x2b,0x30,0xe7,0x24,0x24,0x27,0x24,0xa4,0x47,0x8,0xfc,0x40,0xfe,0x42,0x5c,0x40,0x58,0x0,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,
++0x2,0x3f,0x22,0x22,0x22,0x3f,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x22,0x4b,0x84,0x40,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x28,0x10,
++0x1,0x11,0x9,0x1,0x7f,0x1,0x5,0x9,0x11,0x1,0xff,0x2,0x4,0x8,0x10,0x60,0x0,0x10,0x20,0x8,0xfc,0x0,0x40,0x30,0x10,0x4,0xfe,0x80,0x40,0x20,0x1c,0x8,
++0x0,0x47,0x34,0x14,0x4,0x87,0x64,0x24,0xc,0x17,0xe4,0x24,0x24,0x24,0x27,0x24,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x13,0x10,0xfc,0x17,0x39,0x36,0x54,0x51,0x91,0x12,0x14,0x10,0x11,0x16,0x40,0x50,0xf8,0x40,0x44,0xfe,0x10,0x8c,0xf4,0x10,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x10,0x13,0x12,0x12,0xfe,0x13,0x30,0x38,0x57,0x54,0x90,0x10,0x11,0x11,0x12,0x14,0x4,0xfe,0x94,0x94,0x94,0xfc,0x40,0x24,0xfe,0x80,0xf8,0x88,0x8,0x8,0x28,0x10,
++0x0,0x40,0x31,0x12,0x4,0x9,0x10,0x10,0x27,0xe0,0x20,0x20,0x22,0x21,0x20,0x0,0x80,0x80,0x40,0x20,0x10,0x8,0x8e,0x84,0xf0,0x10,0x20,0x40,0x80,0x0,0xc0,0x40,
++0x0,0x3f,0x20,0x2f,0x28,0x28,0x2f,0x28,0x28,0x2f,0x20,0x2f,0x20,0x20,0x5f,0x80,0x4,0xfe,0x8,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x80,0xf8,0x80,0x84,0xfe,0x0,
++0x3,0x3c,0x4,0x7f,0x4,0xe,0x15,0x64,0x5,0x1,0xff,0x3,0x5,0x19,0x61,0x1,0x8,0x8,0x48,0xc8,0x48,0x48,0x48,0x8,0x18,0x4,0xfe,0x80,0x40,0x3c,0x8,0x0,
++0x3,0x3c,0x4,0x7f,0x4,0xe,0x15,0x65,0x11,0x1f,0x21,0x1,0xff,0x1,0x1,0x1,0x8,0x8,0x48,0xc8,0x48,0x48,0x48,0x18,0x0,0xf8,0x0,0x4,0xfe,0x0,0x0,0x0,
++0x6,0x78,0x8,0xfe,0x9,0x1c,0x2a,0x49,0x2,0xc,0x31,0xc9,0x5,0x9,0x11,0x3,0x40,0x44,0x7e,0xa4,0x24,0x44,0x94,0x8,0x80,0x60,0x1e,0x24,0x40,0x30,0x10,0x0,
++0x12,0x1f,0x28,0x45,0x1,0xff,0x14,0x13,0x14,0x1f,0x1,0x3f,0x22,0x27,0x20,0x20,0x48,0x7c,0xa0,0x10,0x4,0xfe,0x50,0x90,0x50,0xf0,0x8,0xfc,0x48,0xe8,0x28,0x10,
++0x4,0x44,0x2b,0x12,0x2a,0x4b,0x8a,0xa,0x1b,0x28,0x48,0x8b,0x8,0x8,0x57,0x20,0x0,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0x50,0xf8,0x40,0x44,0xfe,0x0,
++0x2,0x1,0xff,0x4,0x12,0x11,0x12,0x14,0x1f,0x1,0x7f,0x42,0x44,0x4f,0x40,0x40,0x0,0x4,0xfe,0x40,0x90,0x10,0x90,0x50,0xf0,0x4,0xfe,0x4,0x44,0xe4,0x14,0x8,
++0x0,0x40,0x2f,0x10,0x85,0x64,0x25,0x7,0x10,0x2f,0xe8,0x29,0x2b,0x28,0x28,0x28,0x80,0x48,0xfc,0x0,0x28,0xc8,0x28,0xf8,0x84,0xfe,0x84,0x24,0xf4,0x4,0x14,0x8,
++0x0,0x13,0xfa,0x22,0x23,0x22,0xfa,0x23,0x20,0x20,0x23,0x3c,0xe0,0x40,0xf,0x0,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x0,
++0x1,0x1,0x7f,0x1,0x5,0x9,0x31,0xc1,0xf,0x0,0x1,0x7f,0x1,0x1,0x5,0x2,0x0,0x8,0xfc,0x0,0x40,0x30,0xe,0x4,0xe0,0x40,0x88,0xfc,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x1,0x1,0x7f,0x1,0x1,0xff,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x0,0x8,0xfc,0x0,0x4,0xfe,0x0,
++0x20,0x20,0x3d,0x49,0x95,0x7f,0x55,0x55,0x7d,0x54,0x54,0x7d,0x0,0x1c,0xe3,0x40,0x0,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,
++0x20,0x18,0x8,0x0,0xfe,0x4,0x8,0x1c,0x2a,0x4a,0x88,0x8,0x8,0x8,0x8,0x8,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x8,0x8,0xff,0x8,0x6,0x78,0x8,0x8,0xff,0x8,0x1c,0x1a,0x2a,0x48,0x88,0x8,0x20,0x24,0xfe,0x20,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x8,0x28,0x10,
++0x8,0xff,0xa,0x2,0x1f,0x4,0x4,0x8,0x10,0x10,0x7e,0x12,0x12,0x22,0x4a,0x85,0x20,0xfe,0x20,0x0,0xf0,0x10,0x90,0x60,0x20,0x24,0xfe,0x24,0x24,0x44,0x94,0x8,
++0x1,0x1,0x1,0xff,0x1,0x3f,0x21,0x21,0x21,0x3f,0x29,0x5,0x2,0x5,0x18,0x60,0x0,0x0,0x4,0xfe,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x80,0x70,0xe,
++0x0,0xff,0x4,0x3f,0x24,0x24,0x3f,0x1,0x1,0xff,0x3,0x3,0x5,0x19,0x61,0x1,0x4,0xfe,0x48,0xfc,0x48,0x48,0xf8,0x0,0x4,0xfe,0x80,0x40,0x30,0xe,0x4,0x0,
++0x0,0xff,0x0,0x0,0x3e,0x22,0x22,0x22,0x32,0x2a,0x22,0x22,0x22,0x22,0x2a,0x24,0x4,0xfe,0x0,0x8,0xfc,0x88,0x88,0x88,0xc8,0xa8,0x88,0x88,0x88,0x88,0xa8,0x90,
++0x0,0x3f,0x20,0x20,0x3f,0x22,0x22,0x23,0x22,0x22,0x22,0x22,0x44,0x44,0x88,0x10,0x8,0xfc,0x0,0x4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x88,0x50,0x20,
++0x1,0x7f,0x40,0x41,0x7f,0x48,0x49,0x4f,0x49,0x49,0x49,0x49,0x55,0x52,0xa0,0x1,0x20,0xa0,0x20,0x20,0xa4,0x7e,0x24,0xa4,0x24,0x24,0x24,0x44,0x44,0x84,0xa8,0x10,
++0x0,0x8,0xfd,0x11,0x11,0x21,0x25,0x7f,0xa4,0x24,0x24,0x25,0x3d,0x22,0x4,0x0,0x8,0x1c,0xe0,0x0,0x20,0x20,0x24,0xfe,0x20,0x20,0xa8,0x24,0x22,0x22,0xa0,0x40,
++0x0,0x3f,0x21,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x21,0x22,0x42,0x44,0x88,0x10,0x8,0xfc,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x1,0x7,0x7c,0x4,0x4,0x5,0xff,0xc,0xe,0x15,0x14,0x24,0x44,0x4,0x4,0x4,0x4,0x84,0x4,0x24,0x24,0x24,0xa4,0x24,0x24,0xa4,0xa4,0x24,0x4,0x4,0x14,0x8,
++0x10,0x1f,0x10,0x27,0x24,0x64,0xa4,0x27,0x20,0x20,0x2f,0x20,0x21,0x22,0x2c,0x20,0x4,0xfe,0xa4,0xfe,0xa4,0xa4,0xa4,0xfc,0x40,0x44,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x10,0x10,0x1f,0x22,0x22,0x67,0xa4,0x28,0x34,0x22,0x21,0x22,0x24,0x28,0x20,0x20,0x4,0x44,0xe4,0x4,0x14,0xd4,0x54,0x54,0x94,0x94,0x14,0x4,0x4,0x4,0x14,0x8,
++0x10,0x11,0x1f,0x21,0x21,0x7f,0xa1,0x23,0x23,0x25,0x25,0x29,0x31,0x21,0x21,0x21,0x84,0xc4,0x4,0x4,0x14,0xf4,0x14,0x14,0x94,0x54,0x54,0x4,0x4,0x4,0x14,0x8,
++0x1,0x0,0x1f,0x10,0x97,0x51,0x51,0x1f,0x31,0x53,0xd3,0x15,0x29,0x21,0x41,0x1,0x0,0x84,0xfe,0x44,0x84,0x14,0x54,0xf4,0x14,0x94,0x54,0x54,0x4,0x4,0x14,0x8,
++0x2,0x1,0x1,0x0,0x7f,0x0,0x0,0x10,0x8,0x8,0x4,0x4,0x4,0x0,0xff,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x4,0xfe,0x0,
++0x10,0x10,0x10,0x54,0x3b,0x10,0xfd,0x11,0x38,0x34,0x54,0x90,0x10,0x10,0x17,0x10,0x80,0x40,0x40,0x8,0xfc,0x0,0x8,0x8,0x90,0x90,0x90,0xa0,0xa0,0x24,0xfe,0x0,
++0x0,0x47,0x34,0x14,0x4,0x84,0x67,0x24,0xc,0x14,0xe4,0x24,0x24,0x28,0x29,0x32,0x4,0xfe,0x40,0x40,0x44,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x14,0x8,
++0x1,0x3f,0x1,0x1,0xff,0x1,0x1,0x3f,0x21,0x11,0xd,0x9,0x31,0xc1,0x5,0x2,0x10,0xf8,0x10,0x14,0xfe,0x10,0x10,0xf0,0x8,0x98,0x60,0x20,0x18,0xe,0x4,0x0,
++0x2,0x2,0x2,0x2,0x7f,0x2,0x2,0x2,0x2,0x2,0x2,0x4,0x4,0x8,0x8,0x70,0x0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x88,0x50,0x20,
++0x0,0x10,0xff,0x20,0x22,0x22,0xfb,0x23,0x20,0x27,0x24,0x3c,0xe5,0x44,0x4,0x4,0x40,0x24,0xfe,0x90,0x64,0x94,0xc,0xfc,0x40,0xfe,0x42,0x92,0xfa,0x2,0xa,0x4,
++0x0,0xb,0x7e,0x4a,0x4b,0x4a,0x4a,0x4b,0x48,0x48,0x4b,0x78,0x48,0x0,0xf,0x0,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x1f,0x21,0x21,0x6f,0xa9,0x29,0x29,0x29,0x2a,0x2c,0x28,0x28,0x28,0x28,0x0,0x4,0xfe,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xd4,0x8c,0x4,0x4,0x14,0x8,
++0x1,0xfe,0x24,0x24,0x3d,0x24,0x24,0x24,0x3f,0x24,0x24,0x24,0x3e,0xe4,0x5,0x6,0x4,0xcc,0x50,0x0,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x50,0x50,0x88,0xe,0x4,
++0x4,0x4,0xff,0x24,0x10,0x17,0x1,0x71,0x13,0x10,0x10,0x17,0x10,0x28,0x47,0x0,0x40,0x44,0xfe,0x40,0x90,0xf8,0x0,0x50,0xf8,0x40,0x48,0xfc,0x40,0x46,0xfc,0x0,
++0x0,0x40,0x2f,0x21,0x1,0x2,0xe7,0x20,0x20,0x20,0x2f,0x20,0x20,0x50,0x8f,0x0,0x80,0x88,0xfc,0x0,0x40,0x50,0xf8,0x40,0x40,0x48,0xfc,0x40,0x40,0x46,0xfc,0x0,
++0x20,0x27,0x25,0x3f,0x44,0x85,0x7c,0x27,0x24,0xfd,0x24,0x25,0x2d,0x36,0x28,0x0,0x44,0xfe,0x8,0xfe,0x90,0xfc,0x94,0xfe,0x94,0xfc,0x94,0x98,0x98,0x96,0x90,0x90,
++0x1,0x3f,0x24,0x22,0x3f,0x22,0x2f,0x22,0x3f,0x22,0x2f,0x26,0x4a,0x52,0xa2,0x2,0x8,0xfc,0x20,0x48,0xfc,0x40,0xf8,0x48,0xfe,0x48,0xf8,0x68,0x50,0x4e,0x44,0x40,
++0x10,0x10,0x10,0x18,0x55,0x52,0x54,0x98,0x10,0x13,0x10,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0xa0,0xa0,0x10,0x88,0x4e,0x44,0x0,0xf8,0x8,0x10,0xa0,0x40,0x20,0x20,
++0x0,0x88,0x65,0x24,0x0,0x81,0x6d,0x24,0xc,0x14,0xe7,0x24,0x24,0x2a,0x31,0x20,0x20,0x28,0xfc,0x40,0xa0,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x26,0xfc,0x0,
++0x2,0x1,0x7f,0x40,0x89,0x11,0x21,0x1f,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x1,0x0,0x0,0xfe,0x2,0x24,0x10,0x8,0xf0,0x10,0x10,0x10,0x10,0x10,0x50,0x20,0x0,
++0x8,0x8,0x14,0x13,0x21,0x40,0xbe,0x0,0x11,0x49,0x2a,0x2a,0x2a,0x7,0x78,0x21,0x20,0x20,0x20,0x24,0x7e,0x84,0x44,0x44,0x48,0x28,0x28,0x10,0x28,0x28,0x46,0x84,
++0x8,0x7c,0x48,0x48,0x49,0x7a,0x4d,0x48,0x4a,0x7a,0x49,0x49,0x49,0x48,0x4f,0x98,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x0,0x88,0x48,0x48,0x50,0x50,0x24,0xfe,0x0,
++0x20,0x24,0x3a,0x42,0x40,0xf8,0x26,0x22,0xfa,0x22,0x23,0x2a,0x32,0x25,0x8,0x0,0x10,0x14,0xfe,0x20,0x50,0x94,0xfe,0x10,0x10,0x14,0xfe,0x10,0x10,0x16,0xfc,0x0,
++0x2,0x1,0xff,0x4,0xc,0xc,0x14,0x24,0x44,0x2,0x29,0x29,0x28,0x48,0x7,0x0,0x0,0x4,0xfe,0x40,0x60,0x58,0x4c,0x44,0x40,0x0,0x10,0x28,0x24,0x24,0xe0,0x0,
++0x10,0x10,0x17,0x14,0x58,0x57,0x51,0x91,0x12,0x13,0x10,0x28,0x25,0x42,0x84,0x0,0x40,0x48,0xfc,0x80,0xa0,0xf0,0x20,0x20,0x24,0xfe,0x20,0xa8,0x26,0x22,0xa0,0x40,
++0x10,0x10,0x27,0x40,0x48,0xfb,0x11,0x21,0x42,0xfb,0x0,0x0,0x39,0xc2,0x44,0x0,0x40,0x48,0xfc,0x80,0xa0,0xf0,0x20,0x20,0x24,0xfe,0x20,0xa8,0x26,0x22,0xa0,0x40,
++0x10,0x10,0x57,0x3a,0x12,0xff,0x12,0x32,0x3b,0x56,0x52,0x92,0x12,0x12,0x13,0x12,0x40,0x28,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x48,0x30,0x10,0x8e,0x4,0x0,
++0x0,0x40,0x2f,0x10,0x3,0x2,0xa,0x12,0x23,0xe2,0x20,0x21,0x22,0x24,0x29,0x0,0x80,0x44,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x48,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x10,0xb,0x40,0x22,0xa,0x54,0x21,0x22,0x25,0x1,0xff,0x5,0x9,0x11,0x61,0x1,0x8,0xfc,0x88,0x8c,0x8a,0x88,0x8,0x28,0x10,0x4,0xfe,0x40,0x20,0x1c,0x8,0x0,
++0x10,0xb,0x40,0x22,0xa,0x55,0x22,0x21,0x9,0x5,0xff,0x5,0x9,0x11,0x61,0x1,0x8,0xfc,0x88,0x8c,0x8a,0x28,0x10,0x0,0x20,0x44,0xfe,0x40,0x20,0x1c,0x8,0x0,
++0x2,0x1,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x24,0x24,0x22,0x21,0x28,0x30,0x20,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf8,0x10,0x20,0x40,0x80,0x60,0x1c,0x8,
++0x0,0xff,0x4,0x4,0x7f,0x44,0x44,0x44,0x44,0x44,0x4a,0x51,0x62,0x40,0x40,0x40,0x4,0xfe,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0xa4,0x1c,0xc,0x4,0x14,0x8,
++0x10,0x13,0xfc,0x20,0x33,0x52,0x52,0xfe,0x12,0x12,0x1f,0xf2,0x52,0x12,0x12,0x12,0x4,0xfe,0x90,0x94,0xfe,0x94,0x94,0x94,0x94,0x94,0x54,0x2c,0x4,0x4,0x14,0x8,
++0x0,0x1f,0x10,0x1f,0x10,0xff,0x0,0x1f,0x11,0x1f,0x11,0x1f,0x1,0x1f,0x1,0x7f,0x10,0xf8,0x10,0xf0,0x14,0xfe,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x0,0xf0,0x0,0xfc,
++0x0,0x0,0x78,0x4f,0x48,0x4b,0x4a,0x7a,0x4a,0x4b,0x48,0x49,0x7a,0x44,0x9,0x0,0x80,0x40,0x44,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x1,0x7f,0x0,0x1f,0x10,0x10,0x1f,0x0,0x7f,0x40,0x8f,0x8,0x8,0x8,0x10,0x60,0x8,0xfc,0x10,0xf8,0x10,0x10,0xf0,0x0,0xfe,0x22,0xf4,0x20,0x20,0x22,0x22,0x1e,
++0x0,0x40,0x2f,0x20,0x3,0x2,0xe2,0x22,0x23,0x20,0x24,0x29,0x32,0x24,0x9,0x0,0x80,0x44,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x40,0x50,0x4c,0x46,0x42,0x80,
++0x10,0x10,0x1f,0x10,0xfd,0x12,0x17,0x1a,0x33,0xd2,0x13,0x10,0x11,0x12,0x55,0x20,0x40,0x44,0xfe,0xa0,0x14,0x8,0xfe,0x8,0xf8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x80,
++0x8,0xfd,0x4a,0x4a,0x4a,0x7a,0x4a,0x4a,0x4a,0x7a,0x4b,0x4a,0xfc,0x8,0x9,0xa,0x80,0x4,0x3e,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xb4,0xa8,0xa0,0x20,0x20,
++0x10,0x10,0x1f,0x21,0x2a,0x64,0xaf,0x34,0x27,0x24,0x27,0x20,0x22,0x24,0x2a,0x21,0x80,0x88,0xfc,0x40,0x28,0x10,0xfe,0x14,0xf0,0x10,0xf0,0x80,0xa0,0x98,0x88,0x0,
++0x1,0x0,0x1f,0x10,0x90,0x57,0x50,0x10,0x30,0x50,0xd0,0x10,0x20,0x22,0x41,0x0,0x0,0x84,0xfe,0x0,0x0,0xf8,0x10,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x10,0x10,0x17,0x10,0x56,0x59,0x53,0x96,0x1b,0x12,0x13,0x28,0x25,0x42,0x84,0x0,0x40,0x44,0xfe,0x40,0xa8,0x10,0xf8,0xe,0xf8,0x8,0xf8,0x40,0x50,0x4c,0x44,0xc0,
++0x1,0x7f,0x40,0xbc,0x24,0x14,0x25,0x6,0x8,0x33,0xcc,0x1,0xe,0x0,0x3,0x1c,0x0,0xfe,0x2,0xfc,0x48,0x28,0x48,0x88,0x40,0x30,0x4e,0x84,0x20,0xc0,0x0,0x0,
++0x40,0x37,0x10,0x0,0x0,0x70,0x10,0x10,0x10,0x10,0x10,0x11,0x10,0x28,0x47,0x0,0x0,0xfc,0x8,0x10,0x60,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x6,0xfc,0x0,
++0x0,0x40,0x2f,0x10,0x82,0x61,0x23,0xe,0x13,0x22,0xe3,0x20,0x21,0x22,0x25,0x20,0x40,0x44,0xfe,0x40,0xa8,0x10,0xf8,0xe,0xf8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x80,
++0x0,0x7f,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x13,0x12,0x13,0xfe,0x13,0x14,0x19,0x33,0xd0,0x13,0x1f,0x12,0x12,0x53,0x22,0x8,0xfc,0x48,0xf8,0x48,0xf8,0x80,0xf8,0x10,0xe0,0x18,0xfe,0x8,0x8,0xf8,0x8,
++0x20,0x20,0x3f,0x40,0x82,0x79,0x23,0x26,0xfb,0x22,0x23,0x20,0x29,0x32,0x25,0x0,0x40,0x44,0xfe,0x40,0xa8,0x10,0xf8,0xe,0xf8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x80,
++0x0,0x3f,0x20,0x3f,0x29,0x25,0x29,0x23,0x2c,0x31,0x26,0x21,0x46,0x40,0x83,0xc,0x88,0xfc,0x0,0x78,0x48,0x28,0xc8,0x60,0x5e,0x84,0x40,0x90,0x20,0xc0,0x0,0x0,
++0x8,0x49,0x2a,0x2c,0x8,0xff,0x8,0x18,0x1c,0x2b,0x2a,0x48,0x88,0x8,0x8,0x8,0x8,0x8,0x48,0x28,0x8,0x48,0x28,0x28,0xe,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,
++0x1,0x7f,0x10,0x10,0x1f,0x21,0x21,0x52,0x8a,0x4,0x4,0x8,0x10,0x20,0x40,0x0,0x4,0x84,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x1,0xff,0x10,0x1f,0x31,0x4a,0x4,0x39,0x1,0xff,0x2,0x4,0xc,0x15,0x66,0x4,0x4,0x84,0x24,0x24,0x24,0x24,0x24,0xc,0x4,0xfe,0x8,0x90,0x60,0x30,0xe,0x4,
++0x1,0x7f,0x10,0x10,0x1f,0x21,0x21,0x52,0xc,0x8,0x30,0x40,0x28,0x24,0x44,0x80,0x4,0x84,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0xc,0x0,0x90,0x4c,0x46,0x2,
++0x1,0x9,0x9,0x11,0x21,0x41,0x6,0x19,0xe1,0x1f,0x1,0x2,0x2,0x4,0x8,0x30,0x0,0x20,0x18,0xc,0x34,0xc0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x50,0x20,
++0x0,0x44,0x2c,0x13,0x28,0x48,0x8f,0x8,0x19,0x29,0x49,0x89,0x9,0x9,0x51,0x21,0x90,0x90,0x90,0xfc,0x90,0x94,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x2,0x12,0xfa,0x22,0x2f,0x22,0xfa,0x27,0x26,0x2a,0x3a,0xe2,0x42,0x2,0x2,0x2,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x38,0xb8,0x54,0x54,0x92,0x10,0x10,0x10,0x10,
++0x8,0x8,0x8,0x8,0xfe,0x8,0x18,0x1c,0x2a,0x28,0x49,0x8a,0x8,0x8,0x8,0x8,0x20,0x20,0x20,0x24,0xfe,0x20,0x60,0x70,0xa8,0xae,0x24,0x20,0x20,0x20,0x20,0x20,
++0x8,0xfd,0x10,0x13,0x20,0x20,0x7d,0xa6,0x24,0x25,0x26,0x25,0x24,0x3d,0x22,0x0,0x20,0x24,0xa8,0xfe,0x70,0xa8,0x26,0xa4,0xa4,0xde,0x54,0x54,0xbe,0x4,0x4,0x4,
++0x1f,0x1,0x7f,0x41,0x9d,0x1,0x1d,0x8,0x8,0x7e,0x8,0x1c,0x2a,0x49,0x8,0x8,0xf0,0x0,0xfe,0x2,0x74,0x0,0x70,0x20,0x28,0xfc,0x20,0x70,0xae,0x24,0x20,0x20,
++0x10,0x10,0x51,0x51,0x52,0x54,0x58,0x50,0x57,0x54,0x54,0x54,0x54,0x14,0x17,0x14,0x80,0x80,0x4,0xfe,0x0,0x80,0x60,0x24,0xfe,0x44,0x44,0x44,0x44,0x44,0xfc,0x4,
++0x8,0x8,0x14,0x12,0x21,0x50,0x88,0x0,0x7f,0x1,0x2,0x14,0x8,0x4,0x4,0x0,0x0,0x7c,0x44,0x44,0xc8,0xc8,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x20,0x21,0x3c,0x4b,0x90,0x7c,0x55,0x56,0x7c,0x55,0x56,0x7d,0x0,0x1d,0xe2,0x40,0x20,0x24,0xa8,0xfe,0x70,0xa8,0x26,0xa4,0x84,0xde,0x54,0x54,0xbe,0x4,0x4,0x4,
++0x2,0x42,0x22,0x22,0x1f,0x82,0x42,0x47,0x16,0x2a,0xea,0x32,0x22,0x22,0x22,0x22,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x38,0xb8,0x54,0x54,0x92,0x10,0x10,0x10,0x10,
++0x0,0x9f,0x60,0x2f,0xa,0xb,0x1a,0x1f,0x20,0xe7,0x20,0x3f,0x24,0x28,0x32,0x1,0x80,0xfc,0x8,0xfc,0x28,0xe8,0x28,0xf8,0x0,0xf0,0x0,0xfc,0x90,0x8c,0x84,0x0,
++0x8,0x17,0x30,0x5f,0x90,0x17,0x0,0x1f,0x10,0x11,0x11,0x11,0x11,0x2,0xc,0x30,0x18,0xe0,0x44,0xfe,0x40,0xfc,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x2,0x1,0x7f,0x4,0x2,0x1,0x6,0x18,0xe0,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x8,0xfc,0x40,0x80,0x0,0xc0,0x30,0xe,0xf4,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x14,0x18,0x30,0xd3,0x10,0x10,0x10,0x10,0x50,0x20,0x40,0x40,0xa0,0xa0,0x10,0x88,0x4e,0x44,0x0,0xf8,0x8,0x10,0xa0,0x40,0x20,0x20,
++0x0,0x10,0xf8,0x20,0x21,0x22,0xfc,0x28,0x20,0x23,0x20,0x38,0xc0,0x0,0x0,0x0,0x40,0x40,0xa0,0xa0,0x10,0x88,0x4e,0x44,0x0,0xf8,0x8,0x10,0xa0,0x40,0x20,0x20,
++0x8,0xff,0x9,0x1,0x3f,0x1,0xff,0x8,0xa,0x13,0x24,0xc,0x12,0x1,0xe,0x70,0x24,0xfe,0x20,0x0,0xf8,0x0,0xfe,0x20,0x18,0xe8,0x20,0x20,0x40,0x80,0x70,0xe,
++0x1f,0x1,0x7f,0x41,0x9d,0x1,0x1d,0x2,0xc,0x32,0xc1,0xf,0x0,0x2,0x1,0x0,0xf0,0x0,0xfe,0x2,0x74,0x0,0x70,0x80,0x60,0x18,0x6,0xe0,0x40,0x80,0x0,0x80,
++0x8,0x28,0x28,0x2f,0x28,0x29,0xff,0x0,0x49,0x49,0x49,0x55,0x63,0x41,0x7f,0x41,0x20,0x20,0x50,0x50,0x88,0x4e,0x24,0x20,0x0,0xfc,0x4,0x8,0x50,0x20,0x10,0x10,
++0x10,0x10,0x10,0x1c,0x21,0x22,0x7c,0x90,0x10,0x7d,0x10,0x10,0x14,0x18,0x10,0x0,0x40,0x40,0xa0,0xa0,0x10,0x88,0x4e,0x44,0x0,0xf8,0x8,0x10,0xa0,0x40,0x20,0x20,
++0x8,0x8,0x8,0x10,0x11,0x32,0x54,0x98,0x10,0x13,0x10,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0xa0,0xa0,0x10,0x88,0x4e,0x44,0x0,0xf8,0x8,0x10,0xa0,0x40,0x20,0x20,
++0x0,0x44,0x28,0xfe,0x11,0x12,0x7c,0x10,0x10,0x13,0xfc,0x10,0x10,0x20,0x20,0x40,0x40,0x40,0xa0,0xa0,0x10,0x8e,0x44,0x40,0x0,0xf8,0x8,0x10,0xa0,0x40,0x20,0x20,
++0x0,0x40,0x37,0x10,0x0,0xf,0x9,0x12,0x24,0xe1,0x23,0x24,0x28,0x20,0x23,0xc,0x40,0x48,0xfc,0x40,0x44,0xfe,0x10,0x8c,0xf4,0x10,0x10,0xa0,0x40,0xa0,0x1e,0x4,
++0x0,0x7f,0x0,0x3f,0x0,0x7f,0x1,0x1,0x21,0x19,0xa,0x2,0x4,0x8,0x30,0xc0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x0,0x8,0x18,0xa0,0x80,0x40,0x30,0xe,0x4,
++0x0,0x7c,0x45,0x48,0x48,0x53,0x48,0x49,0x46,0x44,0x45,0x6a,0x50,0x40,0x41,0x46,0x20,0x28,0xfc,0x20,0x24,0xfe,0x88,0x44,0x7a,0x88,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x10,0x10,0x54,0x55,0x56,0x54,0x54,0x55,0x54,0x5c,0x74,0x44,0x0,0x0,0x20,0x20,0x50,0x50,0x88,0x4e,0x24,0x20,0x0,0xfc,0x4,0x8,0x50,0x20,0x10,0x10,
++0x10,0x13,0x28,0x24,0x43,0xa1,0x11,0x1,0xff,0x3,0x5,0x29,0x10,0x8,0x8,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x48,0x86,0x2,
++0x0,0x1f,0x10,0x10,0x10,0x1f,0x12,0x2,0x7f,0x2,0x2,0x4,0x4,0x8,0x10,0x60,0x10,0xf8,0x10,0x10,0x10,0xf0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x88,0x50,0x20,
++0x1,0x1,0x2,0x4,0xa,0x11,0x21,0xc0,0x1f,0x0,0x0,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x10,0xe,0x4,0xf0,0x10,0x20,0x40,0x80,0x0,0x80,0x80,
++0x0,0x47,0x34,0x15,0x84,0x65,0x26,0x8,0x17,0x24,0xe4,0x27,0x24,0x24,0x27,0x24,0x84,0x7e,0x24,0x24,0xa4,0x24,0x54,0x88,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x0,0x8,0xff,0x10,0x10,0x11,0x7f,0x10,0x11,0x11,0x1d,0xf1,0x41,0x1,0x2,0x4,0x80,0x48,0xfc,0x40,0x90,0x8,0xfc,0x4,0x50,0x50,0x50,0x50,0x52,0x52,0x4e,0x40,
++0x20,0x27,0x24,0x25,0xfc,0x25,0x66,0x70,0xaf,0x24,0x24,0x27,0x24,0x24,0x27,0x24,0x84,0x7e,0x24,0x24,0xa4,0x24,0x54,0x88,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x0,0x8,0xff,0x10,0x10,0x21,0x23,0x3c,0x65,0xa5,0x25,0x25,0x25,0x3d,0x22,0x4,0x80,0x48,0xfc,0x40,0x90,0x8,0xfc,0x4,0x50,0x50,0x50,0x50,0x52,0x52,0x4e,0x40,
++0x20,0x27,0x24,0x3d,0x4c,0x55,0x86,0x20,0x27,0x24,0x24,0x27,0x2c,0x34,0x27,0x4,0x84,0x7e,0x24,0x24,0xa4,0x24,0x54,0x88,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x2,0x7c,0x40,0x48,0x46,0x4a,0xf0,0x1,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x20,0x4,0xfe,0x44,0x44,0x44,0x44,0x94,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x20,0x18,0x9,0xff,0x2,0x42,0x22,0x14,0x14,0x8,0x8,0x14,0x22,0x43,0x81,0x0,0x4,0x4,0x24,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x0,0x1f,0x10,0x97,0x54,0x55,0x15,0x16,0x30,0x57,0xd4,0x14,0x27,0x24,0x44,0x7,0x84,0xfe,0x80,0x7c,0x24,0x24,0xa4,0x4c,0x80,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,
++0x0,0x40,0x37,0x10,0x80,0x61,0x27,0x8,0x11,0x21,0xe1,0x21,0x21,0x21,0x22,0x24,0x80,0x48,0xfc,0x40,0x90,0x8,0xfc,0x4,0x50,0x50,0x50,0x50,0x52,0x52,0x4e,0x40,
++0x20,0x27,0x24,0x24,0xfc,0x24,0x64,0x74,0xac,0x25,0x26,0x24,0x20,0x21,0x22,0x24,0x84,0x3e,0x24,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xb4,0xa8,0x20,0x20,0x20,
++0x0,0x4,0x2,0x3,0x1,0xff,0x0,0x0,0x4,0xc,0x8,0x10,0x10,0x20,0x40,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x40,0x20,0x10,0x18,0xc,0xc,0x4,0x0,
++0x2,0x2,0x2,0x2,0xff,0x2,0x2,0x4,0x4,0x4,0x8,0x8,0x11,0x16,0x20,0x40,0x0,0x40,0x20,0x4,0xfe,0x80,0x88,0x88,0x90,0xa0,0xc0,0x82,0x82,0x82,0x7e,0x0,
++0x2,0x2,0xff,0x2,0x4,0x18,0x23,0x7f,0x8,0xf,0x8,0xf,0x8,0xff,0x0,0x0,0x40,0x24,0xfe,0xa0,0xc4,0xfc,0x0,0xfc,0x20,0xe0,0x20,0xe0,0x24,0xfe,0x20,0x20,
++0x0,0x8,0x7c,0x48,0x4f,0x48,0x48,0x48,0x49,0x49,0x49,0x7a,0x42,0x4,0xb,0x10,0x80,0xa0,0x90,0x84,0xfe,0xa0,0xa4,0xa4,0x28,0x28,0x30,0x20,0x62,0xa2,0x1e,0x0,
++0x10,0x1f,0x28,0x45,0x2,0x2,0xff,0x2,0x2,0x4,0x4,0x8,0x8,0x11,0x26,0x40,0x40,0x7c,0xa0,0x10,0x40,0x24,0xfe,0x80,0x90,0x90,0xa0,0xc2,0x82,0x82,0x7e,0x0,
++0x1,0x7f,0x48,0x91,0x79,0x4a,0x54,0x61,0x56,0x49,0x4a,0x6b,0x54,0x43,0x40,0x4f,0x0,0xfe,0x22,0x14,0xf0,0xa0,0x40,0xb0,0xe,0xf4,0x40,0xf8,0x40,0xf8,0x40,0xfc,
++0x0,0x7c,0x45,0x4a,0x48,0x50,0x4b,0x48,0x44,0x45,0x45,0x6a,0x51,0x40,0x47,0x40,0x80,0xfc,0x88,0x50,0x20,0xd8,0x6,0xf8,0x20,0x28,0xfc,0x20,0xfc,0x20,0xfe,0x0,
++0x2,0x2,0xff,0x5,0x5,0x9,0x11,0x27,0xc0,0x1,0x1,0x7f,0x1,0x1,0xff,0x0,0x80,0x44,0xfe,0x0,0x10,0x20,0xc4,0x4,0xfc,0x0,0x8,0xfc,0x0,0x4,0xfe,0x0,
++0x10,0x10,0x10,0x10,0xfc,0x13,0x14,0x18,0x31,0xd1,0x11,0x12,0x12,0x14,0x54,0x28,0x80,0xa0,0x90,0x90,0x84,0xfe,0xa0,0xa0,0x24,0x24,0x28,0x32,0x22,0x62,0x9e,0x0,
++0x0,0x7c,0x44,0x48,0x48,0x57,0x48,0x48,0x45,0x45,0x65,0x5a,0x42,0x44,0x44,0x48,0x80,0xa0,0x90,0x90,0x84,0xfe,0xa0,0xa0,0x24,0x24,0x28,0x32,0x22,0x62,0x9e,0x0,
++0x10,0x12,0x11,0x10,0xff,0x11,0x3a,0x34,0x50,0x5f,0x91,0x12,0x11,0x10,0x11,0x16,0x40,0x48,0x50,0x44,0xfe,0x50,0x4c,0x44,0x80,0xfe,0x8,0x8,0xb0,0x40,0xb0,0x8,
++0x11,0xd,0x5,0x7f,0x5,0xd,0x11,0x21,0x2,0xff,0x4,0x8,0x6,0x1,0x6,0x38,0x10,0x30,0x40,0xfc,0x40,0x20,0x1c,0x8,0x0,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x10,0x12,0x11,0x10,0xff,0x11,0x12,0x1c,0x30,0xd7,0x11,0x12,0x11,0x10,0x51,0x26,0x40,0x48,0x50,0x44,0xfe,0x50,0x4c,0x44,0x80,0xfe,0x8,0x8,0xb0,0x40,0xb0,0x8,
++0x10,0x1f,0x28,0x45,0x9,0x5,0x7f,0x5,0x9,0x11,0xff,0x4,0xc,0x3,0x4,0x38,0x40,0x7c,0xa0,0x10,0x20,0x48,0xfc,0x40,0x20,0x14,0xfe,0x20,0x40,0x80,0x60,0x10,
++0x40,0x2f,0x28,0x8,0x8f,0x68,0x2f,0x8,0x2f,0x4c,0xd5,0x54,0x55,0x64,0x44,0x44,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfe,0x4,0xfe,0x44,0x54,0x44,0x54,0x44,0x54,0x48,
++0x0,0x7b,0x48,0x50,0x52,0x62,0x52,0x4a,0x4a,0x4a,0x6a,0x52,0x42,0x42,0x43,0x40,0x4,0xfe,0x20,0x24,0xfe,0xa4,0xa4,0xa4,0xd4,0xcc,0x84,0x94,0x88,0x0,0xfe,0x0,
++0x8,0x8,0xff,0x8,0x1,0x3f,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x40,0x40,0x80,0x20,0x24,0xfe,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x3f,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x0,0x0,
++0x10,0x15,0x1e,0x10,0x12,0x7f,0x42,0x42,0x42,0x7e,0x42,0x40,0x40,0x40,0x80,0x3,0x4,0xfe,0x20,0x44,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0xa4,0x50,0x48,0x86,0x2,
++0x1,0x0,0x3f,0x21,0x20,0x27,0x24,0x24,0x24,0x27,0x24,0x24,0x44,0x44,0x88,0x10,0x0,0x84,0xfe,0x0,0x88,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x12,0x15,0x59,0x51,0x51,0x91,0x11,0x11,0x11,0x11,0x29,0x45,0x82,0x4,0x40,0x20,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x17,0x1a,0x32,0xd2,0x13,0x12,0x12,0x14,0x54,0x29,0x48,0x7c,0x40,0xfe,0x44,0x70,0xc4,0x7c,0x0,0x44,0xfe,0x44,0x44,0x84,0x94,0x8,
++0x1,0x1,0x1,0x1,0x3f,0x20,0x28,0x24,0x22,0x21,0x21,0x22,0x24,0x28,0x3f,0x20,0x4,0xfe,0x0,0x8,0xfc,0x8,0x28,0x68,0x88,0x8,0x88,0x48,0x28,0x18,0xf8,0x8,
++0x1,0x1,0x1,0x3f,0x21,0x21,0x2f,0x21,0x20,0x21,0x2f,0x21,0x41,0x41,0x82,0x1c,0x10,0xf8,0x0,0xfe,0x2,0xf4,0x0,0x8,0xf8,0x0,0xf8,0x8,0x8,0x8,0x28,0x10,
++0x4,0xf,0x10,0x3f,0xe1,0x3f,0x21,0x3f,0x0,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x0,0xe0,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,
++0x8,0x8,0xff,0x1c,0x2a,0x49,0x3f,0x22,0x3f,0x22,0x3f,0x28,0x2f,0x28,0x4f,0x88,0x20,0x24,0xfe,0x70,0xae,0x24,0xfc,0x40,0xf8,0x48,0xf8,0x48,0x50,0x62,0x42,0x3e,
++0x8,0xff,0x10,0x11,0x20,0x23,0x3c,0x64,0xa5,0x24,0x24,0x24,0x25,0x3e,0x20,0x0,0x8,0xfc,0x8,0xf8,0x8,0xfe,0x20,0x24,0x2c,0xb0,0x20,0xb0,0x2e,0x24,0xa0,0x40,
++0x3f,0x1,0x7f,0x49,0x85,0x9,0x3e,0x22,0x22,0x3f,0x8,0x2e,0x29,0x2e,0x70,0x20,0xf8,0x0,0xfe,0x22,0x44,0x20,0x40,0x78,0x88,0x50,0x20,0x50,0xfe,0x88,0x88,0xf8,
++0x4,0x7e,0x44,0x45,0x46,0x44,0x7c,0x50,0x13,0x5d,0x51,0x51,0x51,0x5d,0xe1,0x1,0x40,0x40,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x4,0x7e,0x44,0x55,0x56,0x54,0x54,0x54,0x57,0x55,0x55,0x55,0x29,0x25,0x45,0x81,0x40,0x40,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x0,0x3f,0x22,0x22,0x3f,0x22,0x22,0x3f,0x28,0x28,0x2f,0x48,0x49,0x8a,0xc,0x0,0x84,0xfe,0x40,0x48,0xfc,0x48,0x48,0xf8,0x40,0x48,0x58,0x60,0x42,0x42,0x3e,
++0x40,0x2f,0x28,0x8,0x88,0x4f,0x4a,0x2,0x1a,0x2b,0xca,0x4a,0x4a,0x4b,0x5c,0x8,0x20,0xa0,0xbc,0xc4,0xc4,0xa8,0x90,0x28,0x46,0x84,0x7c,0x44,0x44,0xc4,0x7c,0x44,
++0x20,0x13,0x10,0x1,0xf8,0xb,0x10,0x38,0x56,0x91,0x10,0x11,0x12,0x14,0x11,0x10,0x8,0xfc,0x8,0xf8,0x8,0xfe,0x40,0x44,0x68,0x70,0xd0,0x48,0x4e,0x44,0x40,0x80,
++0x0,0x3f,0x0,0x0,0x1f,0x0,0x0,0xff,0x1,0x11,0x9,0x5,0x9,0x11,0x65,0x2,0x10,0xf8,0x10,0x10,0xf0,0x10,0x14,0xfe,0x8,0x10,0xa0,0x40,0x20,0x1e,0x4,0x0,
++0x0,0x7c,0x44,0x49,0x48,0x50,0x48,0x4b,0x44,0x45,0x45,0x69,0x51,0x41,0x41,0x41,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x1,0xf7,0x11,0x55,0x33,0x55,0x9,0x14,0x2b,0xd1,0x24,0x48,0x12,0x24,0x9,0x10,0x20,0xa8,0x24,0x20,0x3e,0xe0,0x20,0x24,0x24,0x28,0x10,0x30,0x52,0x8a,0xa,0x4,
++0x8,0xfc,0x9,0x49,0x49,0x49,0x49,0x49,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x2a,0x14,0x40,0x24,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x3f,0x20,0x20,0x20,0x20,0x3f,0x20,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x11,0x1d,0x21,0x21,0x7d,0x91,0x10,0x7c,0x13,0x12,0x12,0x16,0x1a,0x13,0x2,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0xb,0xa,0x12,0x12,0x33,0x50,0x90,0x17,0x14,0x14,0x14,0x14,0x14,0x17,0x14,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x20,0x10,0x10,0xfd,0x22,0x20,0x3d,0x25,0x25,0x25,0x25,0x25,0x25,0x45,0x95,0x9,0x80,0x80,0x88,0xfc,0x10,0x60,0x84,0x4c,0x50,0x20,0x20,0x10,0x10,0x4e,0x84,0x0,
++0x3f,0x20,0x3f,0x25,0x29,0x32,0x25,0x29,0x39,0x29,0x29,0x29,0x4b,0x4c,0x88,0xb,0xfc,0x4,0xfc,0x0,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xf8,0x90,0x60,0x9c,
++0x3f,0x20,0x3f,0x24,0x22,0x3f,0x22,0x24,0x28,0x21,0x3f,0x22,0x46,0x41,0x82,0xc,0xfc,0x4,0xfc,0x90,0xa4,0xfe,0xa0,0x98,0x88,0x0,0xfe,0x10,0x20,0xc0,0x30,0x8,
++0x10,0x12,0x21,0x20,0x47,0xf9,0x12,0x24,0x40,0xff,0x1,0x2,0x19,0xe0,0x41,0x6,0x40,0x48,0x50,0x40,0xfe,0x50,0x4c,0x44,0x80,0xfe,0x8,0x8,0xb0,0x40,0xb0,0x8,
++0x1,0x1,0x1,0x3f,0x21,0x21,0x2f,0x21,0x20,0x20,0x20,0x2a,0x4a,0x52,0x81,0x0,0x10,0xf8,0x0,0xfe,0x2,0xf4,0x0,0x8,0xf8,0x0,0x80,0x48,0x46,0x12,0xf0,0x0,
++0x10,0x1f,0x10,0x2f,0x40,0xbf,0x0,0x3f,0x0,0x1f,0x0,0xff,0x12,0xa,0x32,0x6,0x8,0xfc,0x0,0xf8,0x0,0xf8,0x48,0xe8,0x48,0xc8,0x48,0xf8,0x48,0x8a,0x6a,0x4,
++0x8,0x8,0x13,0x10,0x27,0x48,0x8b,0x10,0x30,0x57,0x90,0x10,0x1f,0x10,0x10,0x10,0x40,0x48,0xfc,0x48,0xfe,0x48,0xf8,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,
++0x2,0x1,0x7f,0x1,0x42,0x27,0x11,0x22,0x4f,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x0,0x8,0xfc,0x0,0x44,0x88,0x10,0x48,0xe4,0x20,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x0,0x40,0x20,0x2f,0x8,0x88,0x5f,0x48,0x18,0x28,0xc9,0x4b,0x4d,0x51,0x50,0x60,0x90,0xf8,0x80,0xfe,0x82,0xf4,0x80,0x88,0x78,0x0,0x40,0x24,0x2a,0xa,0xf8,0x0,
++0x10,0x13,0x20,0x21,0x44,0xff,0x10,0x22,0x41,0xf9,0x0,0x1,0x1a,0xe4,0x41,0x0,0x8,0xfc,0x8,0xf8,0x8,0xfe,0x40,0x44,0x4c,0x50,0xe0,0x50,0x48,0x4e,0x44,0x80,
++0x2,0x1,0xff,0x4,0x14,0x14,0x24,0x24,0x44,0x1,0x21,0x21,0x21,0x21,0x3f,0x20,0x0,0x4,0xfe,0x40,0x50,0x48,0x44,0x44,0x40,0x0,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x2,0x1,0xff,0x4,0x14,0x34,0x44,0x3f,0x1,0x1f,0x1,0xff,0x1,0x1,0x5,0x2,0x0,0x4,0xfe,0x40,0x50,0x4c,0x74,0x80,0x0,0xf0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x2,0x1,0xff,0x4,0x14,0x24,0x44,0x1f,0x0,0x1,0xff,0x1,0x1,0x1,0x5,0x2,0x0,0x4,0xfe,0x40,0x50,0x4c,0x44,0xe0,0x80,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x1,0x40,0x3f,0x22,0x6,0x8a,0x52,0x42,0x10,0x2f,0xc1,0x42,0x44,0x48,0x50,0x40,0x0,0x84,0xfe,0x20,0x30,0x2c,0x24,0xa0,0x84,0xfe,0xc0,0xa0,0x90,0x8e,0x84,0x80,
++0xc,0x70,0x44,0x44,0x64,0x54,0x54,0x44,0x44,0x5c,0xe4,0x4,0x8,0x10,0x60,0x0,0x4,0xfe,0x84,0x84,0xa4,0x94,0x94,0x84,0x84,0xc4,0xa8,0x90,0x80,0x80,0x80,0x80,
++0x2,0x7,0x78,0x8,0x8,0x9,0xff,0x8,0xa,0x3f,0x22,0x22,0x22,0x22,0x3e,0x22,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,0x40,0x40,0x40,0x40,0x42,0x42,0x42,0x3e,0x0,
++0x10,0x10,0x17,0x10,0xfc,0x13,0x16,0x1a,0x32,0xd3,0x10,0x11,0x12,0x14,0x51,0x20,0x80,0x44,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x0,0x4,0x7e,0x55,0x56,0x54,0x7c,0x54,0x55,0x57,0x55,0x7d,0x41,0x1,0x1,0x1,0x80,0x80,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x10,0xfd,0x11,0x12,0x1d,0x31,0xd1,0x11,0x11,0x11,0x11,0x50,0x20,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,0x10,0x30,0xc0,0x0,0x4,0x4,0xfc,0x0,
++0x10,0x10,0x20,0xfc,0x21,0x51,0x52,0xfd,0x11,0x11,0x1d,0xf1,0x51,0x11,0x10,0x10,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,0x10,0x30,0xc0,0x0,0x4,0x4,0xfc,0x0,
++0x8,0x8,0x8,0x10,0x11,0x32,0x54,0x99,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,0x10,0x30,0xc0,0x0,0x4,0x4,0xfc,0x0,
++0x1,0x1,0x2,0x2,0x4,0x8,0x30,0xc8,0x8,0x9,0xe,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x80,0x80,0x40,0x30,0x1e,0x24,0x60,0x80,0x0,0x0,0x8,0x8,0xf8,0x0,
++0x0,0x40,0x30,0x10,0x1,0x82,0x64,0x29,0x11,0x11,0xe1,0x21,0x21,0x21,0x20,0x20,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,0x10,0x30,0xc0,0x0,0x4,0x4,0xfc,0x0,
++0x10,0x10,0x10,0x20,0x25,0x7e,0x4,0x9,0x11,0x7d,0x1,0x1,0xd,0x71,0x20,0x0,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,0x0,0x10,0x30,0xc0,0x0,0x4,0x4,0xfc,0x0,
++0x0,0x40,0x30,0x10,0x1,0x2,0xf4,0x11,0x11,0x11,0x11,0x11,0x15,0x19,0x10,0x0,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,0x0,0x10,0x30,0xc0,0x0,0x4,0x4,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x3f,0x24,0x24,0x3f,0x2,0x7,0x18,0x64,0x2,0x1,0x6,0x78,0x40,0x44,0xfe,0x48,0xfc,0x48,0x48,0xf8,0x0,0xf8,0x8,0x10,0x60,0x80,0x0,0x0,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x54,0x54,0x55,0x7c,0x51,0x14,0x1c,0xe5,0x42,0x0,0x4,0xfe,0x24,0xfc,0x24,0xfc,0x20,0x48,0xf0,0x24,0xfc,0x20,0xa8,0x26,0xa2,0x40,
++0x0,0x7f,0x44,0x44,0x44,0x7f,0x42,0x2,0x7,0x8,0x14,0x62,0x1,0x6,0x18,0xe0,0x4,0xfe,0x44,0x44,0x44,0xfc,0x4,0x0,0xf0,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x4f,0x29,0x29,0xf,0x8,0xe1,0x23,0x26,0x29,0x20,0x20,0x27,0x50,0x8f,0x0,0x4,0xfe,0x24,0x24,0xfc,0x84,0x0,0xf8,0x8,0x10,0xa0,0xc0,0x0,0x6,0xfc,0x0,
++0x10,0x13,0x22,0x3e,0x42,0x83,0x7e,0x10,0x10,0x7d,0x13,0x10,0x14,0x18,0x11,0x6,0x4,0xfe,0x94,0x94,0x94,0xfc,0x44,0x80,0xfc,0x4,0x8,0x90,0x60,0x40,0x80,0x0,
++0x22,0x3f,0x50,0x89,0x7f,0x44,0x44,0x7f,0x44,0xf,0x10,0x28,0x4,0x3,0xe,0x70,0x44,0x7e,0xa0,0x14,0xfe,0x44,0x44,0xfc,0x4,0xf0,0x10,0x20,0x40,0x80,0x0,0x0,
++0x8,0xfd,0x9,0x49,0x49,0x49,0x48,0x48,0x7d,0x4,0x5,0x1c,0xe4,0x45,0x16,0x8,0x4,0xfe,0x24,0xfc,0x24,0xfc,0x20,0x48,0xf0,0x24,0xfc,0x20,0xa8,0x26,0xa2,0x40,
++0x40,0x33,0x12,0x2,0xfb,0xa,0x12,0x33,0x58,0x97,0x18,0x11,0x12,0x1c,0x10,0x10,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0xfe,0xe0,0x50,0x4e,0x44,0x40,0x40,
++0x8,0x8,0xff,0x9,0x41,0x23,0x24,0x80,0x49,0x12,0x2f,0xe2,0x22,0x22,0x23,0x22,0x20,0x24,0xfe,0x20,0xf8,0x10,0xa0,0x40,0xb0,0xe,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x1,0x41,0x31,0x13,0x84,0x60,0x20,0x9,0x12,0x27,0xea,0x22,0x22,0x22,0x23,0x22,0x0,0x0,0xf8,0x10,0xa0,0x40,0xa0,0x10,0xe,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0xfc,0x8,0x49,0x4a,0x48,0x48,0x48,0x7d,0x7,0x5,0x1d,0xe5,0x45,0x15,0x9,0x80,0x80,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x20,0x21,0x4a,0xf8,0x10,0x20,0x41,0xfb,0x5,0x1,0x19,0xe1,0x41,0x1,0x80,0x80,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x13,0x10,0x11,0xfd,0x25,0x25,0x25,0x25,0x44,0x28,0x13,0x28,0x44,0x84,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x4,0x24,0xf4,0x4,0x4,0x28,0x10,
++0x2,0x1,0x7f,0x44,0x44,0x44,0x7f,0x44,0x4e,0x4d,0x54,0x54,0x65,0x44,0x84,0x4,0x0,0x8,0xfc,0x20,0x20,0x24,0xfe,0x20,0x70,0x68,0xae,0xa4,0x20,0x20,0x20,0x20,
++0x0,0xb,0xfc,0x11,0x11,0x11,0x7d,0x11,0x11,0x10,0x1c,0xf3,0x40,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x4,0x24,0xf4,0x4,0x4,0x14,0x8,
++0x8,0xff,0x10,0x11,0x21,0x25,0x3f,0x65,0xa5,0x24,0x24,0x27,0x24,0x3c,0x24,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x4,0x24,0xf4,0x4,0x4,0x14,0x8,
++0x10,0x13,0x10,0x7d,0x55,0x55,0x55,0x55,0x55,0x7c,0x10,0x17,0x1c,0xe4,0x40,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0xfc,0x4,0x24,0xf4,0x4,0x4,0x14,0x8,
++0x0,0x3f,0x0,0x8,0x8,0x8,0x8,0x8,0xf,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x4,0x24,0xf4,0x4,0x4,0x28,0x10,
++0x7e,0x42,0x42,0x7e,0x0,0x3f,0x0,0x8,0x8,0x8,0xf,0x0,0x0,0xff,0x0,0x0,0xfc,0x84,0x84,0xfc,0x20,0xf0,0x20,0x20,0x20,0x24,0xfe,0x4,0x24,0xf4,0x14,0x8,
++0x0,0x20,0xff,0xa9,0xa9,0xa9,0xaf,0xa9,0xab,0xab,0xad,0xe9,0x89,0x11,0x21,0x1,0x80,0x44,0xfe,0x10,0x10,0x14,0xfe,0x10,0x30,0xb8,0x56,0x54,0x90,0x10,0x10,0x10,
++0x0,0xb,0x7c,0x49,0x49,0x49,0x49,0x49,0x49,0x48,0x48,0x7f,0x48,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x4,0x24,0xf4,0x4,0x4,0x14,0x8,
++0x20,0x27,0x24,0x24,0xff,0x24,0x24,0x24,0x27,0x20,0x38,0xe7,0x40,0x0,0x1f,0x0,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x40,0x48,0xfc,0x40,0x44,0xfe,0x0,
++0x0,0x7f,0x0,0x8,0x6,0x2,0x20,0x19,0x9,0xff,0x2,0x2,0x4,0x8,0x30,0xc0,0x0,0xfc,0x84,0x88,0x80,0x80,0x80,0x0,0x4,0xfe,0x0,0xc0,0x30,0x18,0xc,0x4,
++0x1,0x1,0x7f,0x1,0x3f,0x1,0x1,0xff,0x4,0xf,0xa,0x11,0x20,0x43,0xc,0x30,0x0,0x8,0xfc,0x0,0xf8,0x0,0x4,0xfe,0x0,0xf0,0x20,0x40,0x80,0x40,0x30,0xe,
++0x1,0x1,0x3f,0x1,0x1,0x7f,0x8,0x6,0x22,0x18,0x8,0xff,0x1,0x2,0xc,0x30,0x0,0x10,0xf8,0x0,0x0,0xfc,0x4,0x88,0x80,0x80,0x84,0xfe,0x40,0x30,0x18,0x8,
++0x0,0x47,0x31,0x11,0x1,0x1,0xf1,0x11,0x11,0x11,0x12,0x14,0x10,0x28,0x47,0x0,0x4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0x50,0x20,0x6,0xfc,0x0,
++0x8,0x7c,0x48,0x4b,0x48,0x78,0x4f,0x48,0x49,0x79,0x4a,0x4a,0x4c,0x48,0x49,0x98,0x80,0x40,0x0,0xc4,0x4c,0x50,0xe0,0xe0,0x50,0x50,0x48,0x4e,0x44,0x40,0x40,0x80,
++0x1,0x79,0x4f,0x49,0x48,0x7f,0x48,0x48,0x4b,0x7a,0x4a,0x4b,0x4a,0x7a,0x4a,0x2,0x10,0x14,0xfe,0x10,0x4,0xfe,0x90,0x94,0xfe,0x94,0x94,0x6c,0x4,0x4,0x14,0x8,
++0x23,0x22,0x23,0x3a,0x2b,0x48,0x57,0x84,0x27,0x20,0x23,0x21,0x28,0x30,0x21,0x6,0xfc,0x4,0xfc,0x4,0xfc,0x0,0xfe,0x92,0xfe,0x0,0xfc,0x8,0x90,0x60,0x9e,0x4,
++0x2,0x1,0xff,0x4,0x14,0x24,0x45,0x1,0x1f,0x11,0x11,0x1f,0x1,0x1,0x7f,0x0,0x0,0x4,0xfe,0x40,0x50,0x4c,0x44,0x10,0xf8,0x10,0x10,0xf0,0x0,0x8,0xfc,0x8,
++0x41,0x31,0x1f,0x1,0x80,0x6f,0x21,0x1,0x1f,0x29,0xe9,0x2a,0x2c,0x28,0x28,0x28,0x20,0x24,0xfe,0x20,0x8,0xfc,0x20,0x24,0xfe,0x24,0x24,0xd4,0xc,0x4,0x14,0x8,
++0x8,0xff,0x8,0x1f,0x11,0x1f,0x0,0x7f,0x44,0x7f,0x40,0x1f,0x4,0x3,0xc,0x70,0x24,0xfe,0x20,0xf0,0x10,0xf0,0x4,0xfe,0x44,0xfc,0x4,0xf0,0x40,0x80,0x60,0x1c,
++0x1f,0x10,0x1f,0x10,0x1f,0x0,0x7f,0x44,0x44,0x7f,0x40,0x1f,0x4,0x3,0xc,0x70,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x44,0x44,0xfc,0x4,0xf0,0x40,0x80,0x60,0x1c,
++0x13,0x12,0x13,0x5a,0x57,0x50,0x97,0x14,0x14,0x17,0x10,0x13,0x11,0x10,0x11,0x16,0xf8,0x8,0xf8,0x8,0xf8,0x4,0xfe,0xa4,0xa4,0xfc,0x0,0xf8,0x10,0xe0,0x18,0x6,
++0x47,0x34,0x17,0x4,0x87,0x60,0x2f,0x9,0x19,0x2f,0xe0,0x27,0x22,0x21,0x26,0x38,0xf8,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x24,0x24,0xfc,0x0,0xf0,0x20,0xc0,0x30,0xe,
++0x47,0x24,0x27,0x4,0x7,0xe0,0x2f,0x29,0x2f,0x28,0x23,0x22,0x29,0x30,0x23,0xc,0xf8,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x24,0xfc,0x4,0xf0,0x10,0x20,0xc0,0x30,0xe,
++0x8,0x8,0xff,0x8,0x8,0x2,0x1,0xff,0x10,0x10,0x10,0x10,0x10,0x10,0x1f,0x0,0x20,0x24,0xfe,0x20,0x20,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,
++0x8,0x8,0xff,0x8,0x20,0x10,0x90,0x47,0x41,0x9,0x11,0xe1,0x21,0x21,0x21,0x20,0x20,0x24,0xfe,0x20,0x0,0x80,0x44,0xfe,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,
++0x2,0x1,0xff,0x10,0x10,0x10,0x1f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x0,0x4,0xfe,0x0,0x0,0x10,0xf8,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x20,0x13,0x12,0x2,0xfe,0x43,0x42,0x42,0x43,0x42,0x42,0x4a,0x7e,0x2,0x3,0x2,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x44,0xfe,0x40,0x20,0x20,0x10,0x92,0xa,0x6,
++0x10,0x10,0x10,0x10,0x5f,0x5a,0x52,0x92,0x12,0x12,0x12,0x12,0x12,0x13,0x10,0x10,0x80,0x60,0x20,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,
++0x4,0x4,0xff,0x4,0x5,0x2,0xff,0x4,0x8,0x34,0xc4,0x3f,0x4,0x4,0x8,0x30,0x40,0x44,0xfe,0x40,0x50,0x8,0xfe,0x40,0x30,0x4e,0x44,0xf8,0x40,0x40,0x40,0x40,
++0x1,0x89,0x51,0x2f,0x51,0x91,0x17,0x14,0x34,0x54,0x97,0x14,0x14,0x14,0x57,0x24,0x10,0x10,0x14,0xfe,0x10,0x14,0xfe,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x4,
++0x4,0x4,0xff,0x4,0x1f,0x0,0x1,0x0,0xff,0x1,0x2,0x4,0x8,0x10,0x22,0x1,0x40,0x44,0xfe,0x40,0xf0,0x20,0x40,0x80,0xfe,0x82,0x84,0x80,0x80,0x80,0x80,0x0,
++0x21,0x21,0x39,0x27,0x41,0x79,0xa7,0x24,0xfc,0x24,0x27,0x24,0x2c,0x34,0x27,0x4,0x10,0x10,0x14,0xfe,0x10,0x14,0xfe,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x4,
++0x0,0x0,0x3f,0x2,0x2,0x3,0x3e,0x2,0x3,0xfe,0x2,0x2,0x2,0x2,0x1,0x0,0x10,0x78,0x80,0x0,0x20,0xf0,0x0,0x8,0xfc,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x0,0x1f,0x0,0x2,0x1,0x0,0xff,0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x2,0x1,0x0,0xf0,0x20,0x40,0x80,0x80,0xfe,0x84,0x88,0x80,0x80,0x80,0x80,0x80,0x80,0x0,
++0x21,0x26,0x3c,0x44,0x84,0x7c,0x24,0x24,0xfd,0x26,0x24,0x20,0x29,0x31,0x22,0x4,0x4,0x3e,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xb4,0xa8,0xa0,0x20,0x20,0x20,0x20,
++0x4,0xe,0x30,0x22,0x22,0x22,0x22,0x22,0x22,0x2e,0x32,0x2,0x4,0x18,0x60,0x0,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x54,0x48,0x40,0x40,0x40,0x40,
++0x8,0x8,0xff,0x8,0x9,0x1,0x3f,0x21,0x20,0x20,0x20,0x20,0x20,0x23,0x4c,0x80,0x40,0x44,0xfe,0x40,0x20,0x10,0xfc,0x0,0x88,0x88,0x50,0x60,0xa0,0x12,0xa,0x6,
++0x0,0x7f,0x40,0x5f,0x40,0x5f,0x40,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x1f,0x10,0x4,0xfe,0x4,0xf4,0x4,0xf4,0x4,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x20,0x23,0x22,0xfa,0xaa,0xaa,0xa8,0xa9,0xa9,0xa9,0xa9,0xb9,0x21,0x21,0x21,0x21,0x4,0xfe,0x4,0xf4,0x4,0xf4,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x4,0x8,0x35,0xd5,0x49,0x39,0x25,0xcd,0x15,0x65,0xc,0x14,0x64,0x4,0x29,0x12,0x40,0x84,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x54,0x50,0x50,0x92,0x92,0xe,0x0,
++0x6,0x78,0x40,0x48,0x4e,0x72,0xc1,0x1f,0x10,0x11,0x11,0x11,0x11,0x2,0xc,0x70,0x4,0xfe,0x44,0x44,0x54,0x88,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0xc0,0x38,0x8,
++0x1,0x1,0x2,0x2,0x4,0x8,0x10,0x21,0x41,0x2,0x4,0x8,0x10,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x40,0x80,0x0,0x0,0x0,0x20,0x10,0x8,0xfc,0x4,0x0,
++0x0,0x8,0xfc,0x10,0x10,0x11,0x12,0x7c,0x10,0x10,0x10,0x10,0x1c,0xe0,0x41,0x6,0x40,0x40,0x40,0x84,0xfe,0x8,0x88,0x88,0x88,0x90,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x10,0x10,0x10,0xfc,0x11,0x32,0x38,0x54,0x50,0x90,0x10,0x10,0x10,0x11,0x16,0x40,0x40,0x40,0x84,0xfe,0x8,0x88,0x88,0x88,0x90,0x50,0x20,0x50,0x88,0xe,0x4,
++0x12,0x12,0x13,0x14,0xff,0x12,0x32,0x3a,0x57,0x52,0x94,0x14,0x17,0x10,0x10,0x10,0x0,0x8,0xfc,0x0,0xf8,0x8,0x88,0x48,0xfe,0x8,0x88,0x48,0xfc,0x8,0x28,0x10,
++0x2,0xff,0x28,0x2a,0xff,0xaa,0xaa,0xae,0xc2,0x83,0x82,0xfe,0x82,0x82,0xfe,0x82,0x40,0x44,0x7e,0x80,0x4,0x7e,0x44,0x64,0x54,0xfe,0x84,0xa4,0x94,0xfc,0x4,0x18,
++0x1f,0x1,0x7f,0x49,0x85,0x9,0x10,0x1f,0x20,0x5f,0x12,0xff,0x20,0x3f,0x0,0x0,0xf0,0x0,0xfe,0x22,0x44,0x20,0x0,0xf8,0x0,0xf0,0x14,0xfe,0x90,0xf8,0x10,0x30,
++0x11,0x11,0x11,0x17,0x55,0x59,0x51,0x91,0x10,0x1f,0x10,0x10,0x29,0x46,0x84,0x0,0x10,0x10,0x14,0xfe,0x10,0xf0,0x10,0xf0,0x44,0xfe,0x40,0xe0,0x50,0x4e,0x44,0x40,
++0x40,0x31,0x11,0x1,0x81,0x62,0x24,0x3,0x12,0x21,0xe1,0x20,0x20,0x20,0x23,0x2c,0x10,0xf8,0x10,0x10,0x10,0xe,0x0,0xf8,0x8,0x10,0x10,0xa0,0x40,0xa0,0x1e,0x8,
++0x0,0x3f,0x21,0x21,0x3f,0x20,0x2f,0x28,0x28,0x2f,0x28,0x2f,0x28,0x48,0x8f,0x8,0x8,0xfc,0x8,0x8,0xf8,0x8,0xfc,0x8,0x8,0xf8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x21,0x21,0x21,0x27,0xf9,0x49,0x49,0x49,0x48,0x8f,0x50,0x20,0x51,0x4a,0x84,0x0,0x10,0x10,0x10,0xfc,0x10,0xf0,0x10,0xf0,0x44,0xfe,0x40,0xe0,0x50,0x4e,0x44,0x40,
++0x21,0x20,0x3f,0x20,0x43,0x78,0xa0,0x27,0xf8,0x20,0x2f,0x20,0x28,0x31,0x22,0xc,0x10,0xa0,0xfc,0x40,0xf8,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0xa0,0x10,0xe,0x4,
++0x10,0x10,0x1f,0x20,0x5f,0x12,0x11,0x10,0xff,0x12,0x21,0x20,0x3f,0x0,0x0,0x0,0x0,0x8,0xfc,0x10,0xf8,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0xf8,0x20,0xa0,0x40,
++0x8,0x6,0x2,0x7f,0x1,0x3f,0x1,0xff,0x1,0x1,0x7f,0x1,0x2,0x4,0x18,0xe0,0x20,0x60,0x88,0xfc,0x0,0xf8,0x0,0xfe,0x0,0x8,0xfc,0x0,0x80,0x60,0x1e,0x4,
++0x0,0x8,0x7c,0x4b,0x48,0x48,0x48,0x7f,0x48,0x48,0x48,0x49,0x7a,0x44,0x8,0x0,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0xe0,0xd0,0x48,0x4e,0x44,0x40,0x40,
++0x2,0x1,0x7f,0x40,0xa4,0x24,0x25,0x3c,0x4,0xff,0x24,0x24,0x24,0x25,0x46,0x4,0x0,0x0,0xfe,0x2,0x24,0x20,0xfc,0x20,0x24,0xfe,0x20,0x70,0xa8,0x2e,0x24,0x20,
++0x20,0x20,0x20,0x23,0xf8,0x48,0x48,0x4f,0x48,0x88,0x50,0x21,0x52,0x4c,0x88,0x0,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0xe0,0xd0,0x48,0x4e,0x44,0x40,0x40,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x46,0x84,0x0,0x4,0xfe,0x24,0x24,0xfc,0x0,0x7c,0x44,0x44,0x7c,0x44,0x7c,0x44,0x44,0x7c,0x44,
++0x20,0x1b,0x48,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x14,0x8,
++0x20,0x1b,0x48,0x42,0x41,0x44,0x54,0x54,0x64,0x44,0x44,0x43,0x40,0x40,0x40,0x40,0x4,0xfe,0x4,0x4,0x4,0x84,0x94,0xc,0xc,0x24,0x24,0xe4,0x4,0x4,0x14,0x8,
++0x10,0x12,0x11,0x24,0x24,0x64,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x0,0x4,0x7e,0x84,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x14,0x8,
++0x8,0x8,0xff,0x8,0x7c,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x7d,0x41,0x2,0xc,0x20,0x24,0xfe,0x28,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,0x8,0x8,0x28,0x10,
++0x4,0x7f,0x4,0x7f,0x40,0x8f,0x0,0x7f,0x6,0x3b,0x5,0x1a,0x64,0x18,0x62,0x1,0x48,0xfc,0x40,0xfe,0x2,0xe4,0x0,0xfc,0x10,0x30,0xc0,0xa0,0x90,0x8e,0x84,0x0,
++0x10,0x10,0x17,0x10,0xff,0x14,0x39,0x34,0x53,0x50,0x97,0x10,0x13,0x10,0x17,0x10,0x90,0x94,0xfe,0x90,0xfe,0x2,0xf4,0x0,0xfc,0xc0,0x68,0xb0,0x68,0xae,0x24,0x60,
++0x3e,0x22,0x22,0x3e,0x22,0x22,0x3e,0x21,0x2,0x4,0x3f,0x24,0x24,0x24,0xff,0x0,0xf8,0x88,0x88,0xf8,0x88,0x88,0xf8,0x8,0x28,0x10,0xf8,0x48,0x48,0x48,0xfe,0x0,
++0x20,0x23,0x38,0x40,0x80,0x7b,0x20,0x21,0xf8,0x23,0x22,0x22,0x2a,0x32,0x2f,0x0,0x0,0xf8,0x10,0x60,0x48,0xfc,0x40,0x40,0x88,0xfc,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x0,0x8b,0x50,0x20,0x50,0x97,0x10,0x11,0x30,0x53,0x92,0x12,0x12,0x12,0xaf,0x40,0x0,0xf8,0x10,0x60,0x48,0xfc,0x40,0x40,0x88,0xfc,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x8,0x8,0xff,0x8,0x1c,0x2a,0x49,0x8c,0x7,0xc,0x14,0x22,0x1,0x1,0xe,0x70,0x20,0x24,0xfe,0x20,0x70,0xae,0x24,0x20,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,
++0x0,0x1f,0x0,0x0,0x1,0xff,0x1,0x5,0x2,0x3f,0x24,0x24,0x24,0x24,0xff,0x0,0x0,0xf0,0x20,0xc0,0x4,0xfe,0x0,0x0,0x8,0xfc,0x48,0x48,0x48,0x48,0xfe,0x0,
++0x8,0x7c,0x4a,0x49,0x49,0x78,0x4f,0x48,0x78,0x48,0x49,0x49,0x7a,0x44,0x0,0x0,0x40,0x40,0x44,0x4c,0x50,0x44,0xfe,0x40,0xe0,0xe0,0x50,0x48,0x4e,0x44,0x40,0x40,
++0x2,0xff,0x28,0x29,0xfe,0xaa,0xaa,0xaf,0xc2,0x82,0x82,0xfe,0x82,0x82,0xff,0x82,0x10,0x10,0x52,0x34,0xb8,0x10,0x7e,0x90,0xb0,0xb8,0xd6,0x92,0x90,0x90,0x46,0x3c,
++0x1,0x0,0x7f,0x44,0x5f,0x4e,0x55,0x64,0x41,0x5f,0x41,0x4f,0x41,0x5f,0x81,0x1,0x0,0x84,0xfe,0x10,0x7c,0x38,0x54,0x92,0x40,0x7c,0x40,0x78,0x40,0x7c,0x40,0x40,
++0x1,0x0,0x7f,0x44,0x5f,0x4e,0x55,0x64,0x44,0x42,0x7f,0x41,0x42,0x4c,0xb0,0x0,0x0,0x84,0xfe,0x10,0x7c,0x38,0x54,0x92,0x90,0xa4,0xfe,0xc0,0xb0,0x8e,0x84,0x80,
++0x0,0x40,0x32,0x11,0x0,0x0,0xf7,0x10,0x11,0x11,0x12,0x14,0x10,0x28,0x44,0x83,0x40,0x40,0x48,0x50,0x40,0x44,0xfe,0x40,0x60,0x50,0x48,0x48,0x40,0x40,0x6,0xfc,
++0x0,0x40,0x29,0x24,0x4,0x0,0xe3,0x2c,0x24,0x24,0x24,0x2d,0x34,0x24,0xa,0x11,0x20,0x20,0x24,0xa8,0x20,0x24,0xfe,0x20,0x70,0x68,0xa4,0x24,0x20,0x20,0x6,0xfc,
++0x8,0xfc,0x8,0x8,0x9,0x79,0x4a,0x40,0x48,0x7c,0x9,0xa,0x8,0x8,0x50,0x20,0x80,0x80,0x80,0xfe,0x2,0x4,0x20,0x20,0xa8,0xa4,0x26,0x22,0x20,0x20,0xa0,0x40,
++0x1,0x21,0x19,0xd,0x5,0x1,0xff,0x3,0x3,0x5,0x9,0x11,0x21,0xc1,0x1,0x1,0x0,0x8,0x18,0x20,0x40,0x4,0xfe,0x0,0x80,0x40,0x20,0x10,0xe,0x4,0x0,0x0,
++0x8,0x1c,0xf0,0x10,0x11,0xfd,0x11,0x39,0x35,0x55,0x55,0x99,0x13,0x15,0x18,0x10,0x0,0x80,0x60,0x2c,0x8,0x10,0x10,0x20,0x28,0x44,0x86,0x2,0x8,0x8,0xf8,0x0,
++0x0,0x7f,0x11,0x9,0x0,0x1f,0x10,0x11,0x11,0x11,0x11,0x12,0x2,0x4,0x18,0x60,0xfc,0x0,0x10,0x20,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x90,0x80,0x82,0x82,0x7e,
++0x40,0x30,0x10,0x0,0x81,0x61,0x21,0x9,0x15,0x25,0xe5,0x29,0x23,0x25,0x28,0x20,0x0,0x80,0x60,0x2c,0x8,0x10,0x10,0x20,0x28,0x44,0x86,0x2,0x8,0x8,0xf8,0x0,
++0x2,0x1,0x7f,0x42,0x89,0x28,0x4b,0xc,0x77,0x1,0x3f,0x21,0x3f,0x1,0x7f,0x20,0x0,0x0,0xfe,0x2,0x24,0xc8,0x4,0x10,0xf0,0x0,0xf8,0x8,0xf8,0x4,0xfc,0x4,
++0x2,0x1,0x7f,0x42,0x89,0x28,0x4b,0xc,0x77,0x1,0x21,0x21,0x21,0x21,0x3f,0x20,0x0,0x0,0xfe,0x2,0x24,0xc8,0x4,0x10,0xf0,0x0,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x7f,0x40,0x9f,0x10,0x1f,0x10,0x1f,0x0,0xff,0x9,0x1f,0x29,0xc9,0x9,0x1,0x0,0xfe,0x2,0xf4,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x20,0xf0,0x2e,0x24,0x60,0x0,
++0x10,0x10,0x13,0x12,0xff,0x12,0x33,0x38,0x57,0x54,0x94,0x14,0x14,0x14,0x10,0x10,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x44,0xfe,0x44,0x44,0x44,0x54,0x48,0x40,0x40,
++0x0,0x7b,0x4a,0x4a,0x4a,0x7b,0x4a,0x4a,0x4b,0x7a,0x4a,0x4a,0x4a,0x7a,0x4b,0x2,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x44,0xfe,0x40,0x20,0x20,0x10,0x92,0xa,0x6,
++0x10,0x10,0x23,0x22,0x4b,0xfa,0x13,0x20,0x47,0xfc,0x4,0x4,0x1c,0xe4,0x40,0x0,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x44,0xfe,0x44,0x44,0x44,0x54,0x48,0x40,0x40,
++0x7f,0x40,0x5f,0x40,0x5f,0x8,0xf,0x10,0x1f,0x31,0x51,0x9f,0x12,0x4,0x18,0x60,0xfc,0x4,0xf4,0x4,0xf4,0x0,0xe0,0x48,0xfc,0x8,0x8,0xf8,0x88,0x82,0x82,0x7e,
++0x8,0x8,0x1f,0x10,0x20,0x7f,0xa1,0x21,0x21,0x3f,0x22,0x2,0x4,0x8,0x30,0xc0,0x0,0x0,0xe0,0x40,0x88,0xfc,0x8,0x8,0x8,0xf8,0x88,0x80,0x80,0x82,0x82,0x7e,
++0x10,0x10,0x3e,0x24,0x48,0xff,0x49,0x49,0x7f,0x55,0x14,0x24,0x25,0x44,0x83,0x0,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x44,0x44,0x94,0xa,0x2,0xfe,0x0,
++0x10,0x10,0x10,0x11,0xfe,0x25,0x25,0x25,0x25,0x45,0x28,0x10,0x28,0x45,0x82,0x4,0x80,0x80,0xf8,0x10,0x24,0xfe,0x24,0x24,0xfc,0x54,0x50,0x90,0x92,0x12,0xe,0x0,
++0x10,0x17,0x20,0x20,0x4b,0xfa,0x12,0x22,0x42,0xfa,0x2,0x2,0x1a,0xe2,0x43,0x2,0x4,0xfe,0x40,0x84,0xfe,0x94,0x94,0xf4,0x94,0x94,0xf4,0x94,0x94,0x94,0xfc,0x4,
++0x0,0xff,0x2,0x4,0x7f,0x44,0x44,0x47,0x44,0x44,0x44,0x47,0x44,0x44,0x7f,0x40,0x4,0xfe,0x0,0x4,0xfe,0x44,0x44,0xc4,0x44,0x44,0x44,0xc4,0x44,0x44,0xfc,0x4,
++0x4,0x4,0xff,0x4,0x4,0x0,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x20,0x40,0x44,0xfe,0x40,0x40,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x21,0x21,0x21,0x2f,0xf9,0x21,0x27,0x2c,0x34,0xe4,0x27,0x24,0x24,0x24,0xa7,0x44,0x10,0x10,0x14,0xfe,0x10,0x14,0xfe,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x4,
++0x9,0x7d,0x49,0x4f,0x49,0x79,0x4b,0x4a,0x4a,0x7a,0x4b,0x4a,0x4a,0x7a,0x4b,0x2,0x10,0x10,0x14,0xfe,0x10,0x14,0xfe,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x4,
++0x8,0xff,0xa,0xc,0x12,0x6b,0x2d,0x31,0xc9,0x15,0x24,0xcc,0x14,0xe4,0x29,0x12,0x24,0xfe,0x20,0x20,0x44,0xfe,0x4,0xfc,0x4,0xfc,0x90,0x90,0x92,0x92,0xe,0x0,
++0x4,0xe,0x78,0x8,0x8,0xfe,0x8,0x1d,0x1a,0x28,0x28,0x48,0x88,0x8,0x8,0xb,0x20,0x20,0x20,0x20,0xa8,0xa6,0xa2,0x20,0x24,0x24,0x28,0x10,0x20,0x40,0x80,0x0,
++0x80,0x61,0x2f,0x9,0x9,0x8f,0x69,0x29,0x9,0x1f,0x29,0xc9,0x4f,0x48,0x41,0x46,0x10,0x10,0x90,0x10,0x10,0x54,0x52,0x52,0x90,0x14,0x14,0x8,0x10,0x60,0x80,0x0,
++0x1,0x0,0x3f,0x20,0x20,0x20,0x2f,0x28,0x28,0x28,0x2f,0x28,0x48,0x48,0x8f,0x8,0x0,0x84,0xfe,0x0,0x80,0x88,0xfc,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0xf8,0x8,
++0x10,0x10,0x10,0x10,0xfc,0x24,0x24,0x25,0x24,0x44,0x28,0x10,0x28,0x44,0x80,0x3,0x20,0x20,0x20,0x20,0xa8,0xa6,0xa2,0x20,0x24,0x24,0x28,0x10,0x20,0x40,0x80,0x0,
++0x4,0xff,0x4,0x3f,0x24,0x24,0x3f,0x1,0x3f,0x21,0x21,0x28,0x24,0x40,0x41,0x8e,0x44,0xfe,0x40,0xf8,0x48,0x48,0xf8,0x20,0xfc,0x0,0x8,0x90,0xa0,0x42,0xa2,0x1e,
++0x0,0xff,0x1,0x1,0x11,0x11,0x11,0x21,0x2,0x2,0x4,0x4,0x8,0x10,0x60,0x0,0x4,0xfe,0x0,0x0,0x8,0x18,0x20,0x40,0x80,0x80,0x40,0x20,0x10,0xe,0x4,0x0,
++0x0,0x7f,0x40,0x40,0x40,0x7f,0x42,0x42,0x7f,0x42,0x41,0x41,0x48,0x50,0x60,0x40,0x10,0xf8,0x10,0x10,0x10,0xf0,0x0,0x8,0xfc,0x0,0x0,0x0,0x80,0x42,0x32,0xe,
++0x10,0x13,0x12,0x12,0xfe,0x13,0x16,0x1a,0x33,0xd2,0x12,0x12,0x12,0x12,0x53,0x22,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x44,0xfe,0x40,0x20,0x20,0x10,0x92,0xa,0x6,
++0x0,0x0,0x3f,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0xff,0x0,0x0,0x0,0x8,0xfc,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xfe,0x0,0x0,
++0x10,0x11,0x3f,0x20,0x7f,0xa9,0x25,0x21,0xff,0x29,0x45,0x41,0x7f,0x1,0xa,0x4,0x20,0x20,0xa0,0x24,0x7e,0x84,0x44,0x44,0xc8,0x28,0x28,0x10,0xa8,0x28,0x46,0x84,
++0x12,0x11,0x10,0x12,0x5a,0x57,0x52,0x92,0x12,0x12,0x12,0x13,0x12,0x12,0x12,0x12,0x4,0x7e,0x4,0x44,0x24,0xfc,0x94,0x54,0x54,0x24,0x54,0x8c,0x4,0x4,0x14,0x8,
++0x20,0x1b,0x48,0x41,0x41,0x4f,0x49,0x49,0x49,0x4f,0x49,0x41,0x41,0x5f,0x40,0x40,0x4,0xfe,0x4,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x4,0x24,0xf4,0x14,0x14,0x8,
++0x0,0x4,0x7e,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x7c,0x44,0x1,0x1,0x2,0x4,0x4,0xfe,0x84,0x84,0x84,0xfc,0x84,0x84,0x84,0xfc,0x84,0x84,0x4,0x4,0x14,0x8,
++0x10,0x13,0x12,0x14,0x7d,0x55,0x55,0x55,0x7d,0x54,0x10,0x17,0x1c,0xe4,0x41,0x2,0x0,0xfe,0x2,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x40,0x24,0xfe,0x0,0x88,0x6,0x2,
++0x0,0x8,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x78,0x48,0x7,0x0,0x0,0x0,0x40,0x88,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x10,0x1e,0x20,0x21,0x7e,0x90,0x10,0x7c,0x11,0x12,0x10,0x14,0x18,0x10,0x0,0x40,0x40,0xfc,0x84,0x88,0x50,0x20,0x40,0x84,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x2,0x2,0x7,0x4,0xc,0x12,0x1,0x6,0x18,0xef,0x8,0x8,0x8,0x8,0xf,0x8,0x0,0x0,0xf0,0x10,0x20,0x40,0x80,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x1,0x1,0x2,0x4,0x8,0x3f,0xc0,0x3e,0x22,0x22,0x22,0x22,0x3e,0x22,0x0,0x0,0x0,0x0,0x80,0x40,0x30,0xfe,0x8,0xfc,0x88,0x88,0x88,0xc8,0xa8,0x90,0x80,0x80,
++0x0,0x4f,0x24,0x22,0x4,0xe0,0x21,0x22,0x2c,0x21,0x22,0x20,0x2b,0x30,0x20,0x3,0x84,0xfe,0xa4,0x94,0xa4,0xc4,0x20,0x50,0x8e,0x24,0x40,0x90,0x20,0x40,0x80,0x0,
++0x11,0x11,0x1f,0x11,0xfd,0x13,0x16,0x1b,0x32,0xd3,0x10,0x1f,0x10,0x10,0x51,0x26,0x10,0x14,0xfe,0x10,0x18,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0xa0,0x1c,0x8,
++0x8,0xff,0x8,0x3f,0x21,0x3f,0x2,0xff,0x4,0x1f,0x21,0xdf,0x1,0x3f,0x1,0x3,0x24,0xfe,0x20,0xf8,0x8,0xf8,0x0,0xfe,0x40,0xf0,0x8,0xf6,0x0,0xf8,0x0,0x0,
++0x8,0xff,0x9,0x7f,0x44,0x7f,0x4c,0x56,0x65,0x7f,0x42,0x44,0x4f,0x74,0x84,0x7,0x24,0xfe,0x20,0xfc,0x20,0xfc,0x70,0xae,0x24,0xfc,0x0,0x8,0xfc,0x8,0x8,0xf8,
++0x11,0x11,0x1f,0x11,0xfd,0x13,0x32,0x3b,0x56,0x53,0x90,0x1f,0x10,0x10,0x11,0x16,0x10,0x14,0xfe,0x10,0x18,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0xb0,0xe,0x4,
++0x1,0x79,0x4f,0x49,0x49,0x7b,0x4a,0x4b,0x4a,0x7b,0x48,0x4f,0x48,0x48,0x49,0x9e,0x10,0x14,0xfe,0x10,0x18,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0xb0,0xe,0x4,
++0x1,0x7f,0x44,0x44,0x7f,0x4e,0x55,0x64,0x7f,0x42,0x44,0x4f,0x54,0x64,0x87,0x4,0x4,0xfe,0x20,0x24,0xfe,0x70,0xa8,0x24,0xfe,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,
++0x1,0x7f,0x44,0x44,0x7f,0x4e,0x55,0x64,0x5f,0x41,0x4f,0x41,0x7f,0x41,0x85,0x2,0x8,0xfc,0x20,0x20,0xfc,0x70,0xae,0x24,0xf0,0x0,0xf0,0x0,0xfc,0x0,0x0,0x0,
++0x0,0x3f,0x22,0x3f,0x26,0x2b,0x32,0x2f,0x28,0x2f,0x28,0x2f,0x49,0x42,0x8c,0x30,0x84,0xfe,0x20,0xfc,0x30,0x6e,0xa4,0xf8,0x88,0xf8,0x88,0xf8,0x40,0x52,0x42,0x3e,
++0x10,0x10,0x10,0x17,0xfc,0x10,0x13,0x1c,0x30,0xd0,0x11,0x12,0x14,0x10,0x50,0x20,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x40,0xe0,0xd0,0x48,0x4e,0x44,0x40,0x40,0x40,
++0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x7f,0x3,0x3,0x5,0x9,0x11,0x61,0x1,0x1,0x0,0x0,0x4,0xfe,0x0,0x0,0x8,0xfc,0x80,0x40,0x20,0x18,0xe,0x4,0x0,0x0,
++0x4,0x4,0x7f,0x4,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x1,0x2,0xc,0x70,0x40,0x48,0xfc,0x40,0x50,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,0x80,0x60,0x1c,
++0x0,0x3f,0x29,0x25,0x3f,0x1,0x3f,0x1,0x7f,0x24,0x42,0x81,0x3f,0x1,0x1,0x7f,0x8,0xfc,0x28,0x48,0xf8,0x0,0xf8,0x0,0xfc,0x48,0x26,0x12,0xf8,0x0,0x8,0xfc,
++0x1,0x7f,0x49,0x6b,0x5d,0x7f,0x8,0x7f,0x8,0xf,0x78,0x5,0x55,0x54,0x91,0x2,0x20,0xb0,0x28,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0xe,0x4,
++0x0,0x40,0x30,0x1f,0x80,0x60,0x27,0x8,0x10,0x20,0xe1,0x22,0x24,0x20,0x20,0x20,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x40,0xe0,0xd0,0x48,0x4e,0x44,0x40,0x40,0x40,
++0x1,0x41,0x2f,0x11,0x81,0x63,0x22,0xb,0x12,0x23,0xe0,0x3f,0x20,0x20,0x23,0x2c,0x10,0x14,0xfe,0x10,0x18,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0xb0,0xe,0x4,
++0x1,0x7f,0x44,0x84,0x3f,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x2,0xc,0x30,0x0,0xfe,0x42,0x54,0xf8,0x40,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x80,0x60,0x1c,
++0x0,0x7f,0x44,0x48,0x48,0x51,0x49,0x49,0x45,0x45,0x45,0x69,0x51,0x41,0x41,0x41,0x4,0xfe,0x20,0x20,0x44,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x2,0x42,0x3f,0x12,0x3,0x2,0xf2,0x13,0x10,0x1f,0x10,0x10,0x15,0x1a,0x14,0x0,0x8,0x8,0xfe,0x8,0xf8,0x8,0x8,0xf8,0x44,0xfe,0x40,0xe0,0x50,0x4e,0x44,0x40,
++0x1,0x2,0x4,0x8,0x3f,0x1,0x11,0x1f,0x21,0x41,0x1,0xff,0x1,0x1,0x1,0x1,0x0,0x0,0x20,0x10,0xf8,0x8,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x8,0x8,0x7f,0x8,0xf,0x8,0x8,0xf,0x1,0xff,0x1,0x3,0x5,0x19,0x61,0x1,0x20,0x28,0xfc,0x20,0xe0,0x20,0x20,0xe0,0x4,0xfe,0x0,0x80,0x60,0x1c,0x8,0x0,
++0x10,0x13,0x12,0x12,0xfe,0x12,0x12,0x1f,0x34,0xd4,0x14,0x14,0x17,0x10,0x50,0x20,0x8,0xfc,0x8,0x88,0x48,0x8,0x8,0xfe,0x8,0x88,0x48,0x8,0xfc,0x8,0x50,0x20,
++0x8,0x8,0x48,0x4a,0x7f,0x48,0x89,0x8,0x8,0xe,0x18,0xe8,0x8,0x8,0xb,0x8,0x20,0x20,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x2,0x1,0xff,0x0,0x0,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x21,0x3f,0x20,0x0,0x4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x10,0x10,0xfc,0x24,0x24,0x27,0x25,0x45,0x29,0x11,0x29,0x44,0x84,0x0,0x4,0xfe,0x84,0xa4,0x94,0x84,0x84,0xfe,0x4,0x24,0x14,0x4,0xfe,0x4,0x28,0x10,
++0x0,0x1f,0x10,0x12,0x11,0x10,0x10,0xff,0x20,0x22,0x21,0x20,0x3f,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x90,0x90,0x14,0xfe,0x10,0x10,0x90,0x90,0xf8,0x10,0xa0,0x40,
++0x4,0x7f,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x2,0xff,0x4,0x9,0x37,0xc1,0x1,0x1f,0x48,0xfc,0x50,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x40,0x30,0xce,0x4,0x20,0xf0,
++0x4,0x7f,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x4,0xff,0x8,0x1f,0x28,0xcf,0x8,0xf,0x48,0xfc,0x50,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x20,0xf0,0x28,0xe6,0x20,0xe0,
++0x4,0x7f,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x4,0xff,0x11,0x3f,0xd1,0x11,0x11,0x1,0x48,0xfc,0x50,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x10,0xfe,0x14,0x50,0x20,0x0,
++0x4,0x7f,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x4,0xff,0x12,0x22,0xdf,0x4,0x8,0x30,0x48,0xfc,0x50,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x10,0xe,0xe4,0x20,0xa0,0x40,
++0x4,0x7f,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x4,0xff,0x12,0x22,0xcb,0x12,0x22,0x6,0x48,0xfc,0x50,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x10,0xe,0x24,0x90,0x90,0x0,
++0x1,0x1,0x1,0x1,0xff,0x1,0x3,0x3,0x5,0x9,0x11,0x21,0xc1,0x1,0x1,0x1,0x0,0x0,0x0,0x4,0xfe,0x0,0x80,0x40,0x20,0x10,0x8,0xe,0x4,0x0,0x0,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0xf0,0x10,0x0,
++0x8,0x7c,0x4b,0x48,0x48,0x78,0x4f,0x49,0x4a,0x7c,0x4b,0x48,0x48,0x78,0x4f,0x0,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x10,0x4c,0x44,0xf8,0x40,0x40,0x44,0xfe,0x0,
++0x8,0x8,0x48,0x48,0x7e,0x49,0x8a,0x8,0xe,0x18,0xe8,0x8,0x8,0x8,0x9,0xe,0x40,0x40,0x40,0x84,0xfe,0x8,0x88,0x88,0x88,0x90,0x50,0x20,0x50,0x88,0xe,0x4,
++0x8,0x1c,0xf3,0x12,0x13,0xfe,0x33,0x39,0x52,0x54,0x53,0x90,0x13,0x10,0x10,0x17,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x50,0x64,0x42,0x90,0x20,0xc8,0x10,0x60,0x80,
++0x1,0x2,0xc,0x37,0xc0,0x1f,0x10,0x1f,0x0,0x3f,0x1,0x1f,0x1,0x7f,0x1,0x3,0x0,0x80,0x60,0xde,0x4,0xf0,0x10,0xf0,0x30,0xc0,0x0,0xf0,0x0,0xfc,0x0,0x0,
++0x0,0xf,0x72,0x52,0x5f,0x52,0x52,0x52,0x5f,0x52,0x52,0x74,0x54,0x9,0x10,0x0,0x0,0xde,0x52,0x54,0xd4,0x54,0x58,0x54,0xd2,0x52,0x52,0x52,0x5a,0x54,0x90,0x10,
++0x0,0x8,0x7c,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4a,0x7a,0x4a,0x2,0x2,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xa4,0x94,0x14,0x4,0x4,0x4,0x14,0x8,
++0x20,0x20,0x38,0x23,0x42,0x7a,0xa2,0x22,0xfa,0x22,0x23,0x22,0x2a,0x32,0x22,0x2,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xa4,0x94,0x14,0x4,0x4,0x4,0x14,0x8,
++0x0,0x7f,0x9,0x9,0x7f,0x9,0x9,0x9,0x7f,0x9,0x9,0x11,0x11,0x25,0x42,0x0,0x4,0x7e,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x20,0x27,0x22,0x22,0xfa,0x4f,0x4a,0x4a,0x8a,0x57,0x22,0x52,0x4d,0x84,0x8,0x0,0x0,0xde,0x52,0x52,0x54,0xd4,0x58,0x54,0x54,0xd2,0x52,0x5a,0x54,0x90,0x10,0x10,
++0x10,0x10,0x20,0x23,0x4a,0xfa,0x12,0x22,0x42,0xfa,0x3,0x2,0x1a,0xe2,0x42,0x2,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xa4,0x94,0x14,0x4,0x4,0x4,0x14,0x8,
++0x10,0x1f,0x10,0x2f,0x40,0x9f,0x0,0x7f,0x8,0x8,0x9,0x8,0x10,0x10,0x21,0x40,0x8,0xfc,0x0,0xf8,0x0,0xf8,0x88,0xc8,0x88,0x88,0xe8,0x28,0x2a,0x2a,0x4a,0x84,
++0x0,0x7f,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0x10,0x10,0x20,0x40,0x80,0x0,0x10,0xf8,0x10,0x10,0x20,0x44,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x10,0x17,0x10,0x10,0xfc,0x24,0x24,0x24,0x24,0x49,0x29,0x11,0x2a,0x4a,0x84,0x8,0x8,0xfc,0x88,0x88,0x88,0x90,0x94,0xbe,0x84,0x4,0x4,0x4,0x4,0x4,0x28,0x10,
++0x1,0xff,0x8,0x8,0x10,0x7f,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x43,0x0,0x8,0x88,0x8,0x8,0xfe,0x8,0x8,0x88,0x68,0x28,0x8,0x8,0x8,0x8,0x28,0x10,
++0x1,0x1,0x7f,0x2,0x4,0x8,0x10,0xef,0x0,0x0,0x3f,0x1,0x9,0x11,0x65,0x2,0x0,0x8,0xfc,0x80,0x40,0x30,0x4e,0xe4,0x0,0x10,0xf8,0x0,0x20,0x18,0x8,0x0,
++0x1,0x1,0xff,0x1,0x1,0x7f,0x48,0x44,0x5f,0x41,0x41,0x5f,0x41,0x41,0x41,0x40,0x0,0x4,0xfe,0x0,0x4,0xfe,0x24,0x44,0xf4,0x4,0x4,0xf4,0x4,0x4,0x14,0x8,
++0x0,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x21,0x1,0xff,0x2,0x2,0x4,0x18,0x60,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x4,0x4,0x4,0x28,0x10,
++0x0,0x4,0xfe,0x4,0x44,0x45,0x2a,0x28,0x10,0x10,0x28,0x24,0x44,0x80,0x0,0x0,0x60,0x50,0x44,0xfe,0x90,0x90,0xfc,0x90,0x90,0xfc,0x90,0x90,0x94,0xfe,0x80,0x80,
++0x1,0x3f,0x9,0x7f,0x52,0x9e,0x4,0x7f,0x4,0x3f,0x4,0x7f,0xc,0x14,0x65,0x6,0x10,0xf8,0x20,0xfe,0x92,0xf4,0x40,0xfc,0x40,0xf8,0x40,0xfc,0x90,0x60,0x1c,0x8,
++0x10,0x10,0x10,0x17,0xfc,0x10,0x10,0x1f,0x30,0xd7,0x11,0x11,0x11,0x11,0x52,0x2c,0x80,0x88,0xfc,0x80,0x48,0x32,0xd2,0xe,0x8,0xfc,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x8,0x7c,0x48,0x4f,0x48,0x7a,0x4b,0x4a,0x4a,0x7a,0x4a,0x4b,0x4a,0x4a,0x4b,0x9a,0x80,0x40,0x4,0xfe,0x0,0x14,0x14,0xa4,0xa4,0x44,0xa4,0x1c,0xc,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x17,0x58,0x52,0x53,0x92,0x12,0x12,0x12,0x13,0x12,0x12,0x13,0x12,0x80,0x40,0x4,0xfe,0x0,0x14,0x14,0xa4,0xa4,0x44,0xa4,0x1c,0xc,0x4,0xfc,0x4,
++0x40,0x37,0x10,0x42,0x41,0x5f,0x41,0x41,0x4f,0x49,0x49,0x49,0x49,0x41,0x41,0x40,0x4,0xfe,0x4,0x4,0x24,0xf4,0x4,0x24,0xf4,0x24,0x24,0x24,0x64,0x4,0x14,0x8,
++0x40,0x30,0x10,0x0,0x87,0x64,0x27,0xc,0x17,0x20,0xe0,0x3f,0x20,0x20,0x20,0x20,0x88,0xfc,0x80,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x80,0x84,0xfe,0x80,0x80,0x80,0x80,
++0x0,0xb,0x7e,0x4a,0x4a,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x7c,0x44,0x8,0x10,0x20,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x88,0x98,0xa0,0xc0,0x80,0x82,0x82,0x7e,0x0,
++0x20,0x27,0x20,0x3a,0x49,0x51,0x80,0x20,0x2f,0x21,0x22,0x21,0x28,0x30,0x21,0x6,0x1c,0xe0,0x0,0x44,0x24,0x28,0x80,0x84,0xfe,0x8,0x8,0x10,0xa0,0xe0,0x18,0x8,
++0x1,0x1,0x1,0x1,0x7f,0x41,0x41,0x42,0x42,0x44,0x48,0x50,0x40,0x40,0x40,0x40,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x84,0x64,0x34,0x14,0x4,0x4,0x14,0x8,
++0x21,0x21,0x2f,0x21,0xf1,0x57,0x55,0x55,0x55,0x97,0x53,0x23,0x55,0x49,0x81,0x1,0x10,0x50,0xf4,0x1e,0x24,0xd4,0x54,0x54,0x54,0xd4,0x14,0x88,0x54,0x14,0x24,0x42,
++0x10,0x10,0x24,0x44,0xfe,0x2,0x7c,0x44,0x7c,0x44,0x44,0x7c,0x44,0x44,0x54,0x48,0x80,0x88,0x98,0xa0,0xc0,0x84,0x84,0x7c,0x0,0x88,0x98,0xa0,0xc0,0x82,0x82,0x7e,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x49,0x29,0x12,0x2a,0x46,0x84,0x8,0x4,0xfe,0x4,0x4,0x4,0xfc,0x0,0x40,0x44,0x4c,0x50,0x60,0x42,0x42,0x3e,0x0,
++0x1f,0x1,0x7f,0x49,0x85,0x9,0x2,0x3c,0x20,0x3e,0x20,0x3f,0x24,0x4,0x18,0x60,0xf0,0x0,0xfe,0x22,0x44,0x20,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x48,0x42,0x42,0x3e,
++0x8,0x8,0xb,0x12,0x12,0x33,0x52,0x92,0x13,0x12,0x10,0x10,0x11,0x11,0x12,0x14,0x40,0x84,0x3e,0x4,0x4,0xbc,0x4,0x4,0xfc,0x94,0x90,0x90,0x12,0x12,0xe,0x0,
++0x40,0x37,0x14,0x4,0x84,0x67,0x25,0xd,0x15,0x25,0xe5,0x25,0x25,0x29,0x28,0x10,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x8,0x18,0x20,0x40,0x80,0x2,0x2,0xfe,0x0,
++0x0,0x3f,0x20,0x20,0x20,0x3f,0x24,0x24,0x24,0x24,0x27,0x24,0x24,0x44,0x43,0x80,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x10,0x30,0xc0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x10,0x12,0xfe,0x12,0x16,0x1a,0x32,0xd2,0x12,0x12,0x13,0x12,0x50,0x20,0x0,0x8,0x88,0x48,0x68,0x28,0x8,0x8,0x8,0x8,0x48,0x88,0x14,0x22,0x42,0x80,
++0x11,0x11,0x11,0x23,0x22,0x64,0xa8,0x20,0x21,0x21,0x22,0x24,0x20,0x20,0x21,0x20,0x0,0x0,0x0,0xfc,0x4,0x8,0x40,0x40,0x50,0x48,0x4c,0x44,0x40,0x40,0x40,0x80,
++0x0,0x7f,0x44,0x44,0x7f,0x44,0x41,0x7f,0x42,0x47,0x4c,0x54,0x47,0x40,0x7f,0x0,0x8,0xfc,0x40,0x50,0xf8,0x40,0x8,0xfc,0x0,0xf0,0x10,0x10,0xf0,0x8,0xfc,0x0,
++0x0,0x78,0x4f,0x48,0x4b,0x78,0x4f,0x48,0x4b,0x7a,0x4a,0x4a,0x4a,0x4a,0x49,0x9a,0x14,0x10,0xfe,0x10,0xd0,0x10,0xf0,0x10,0xe8,0x28,0xa8,0xa8,0xaa,0xaa,0x4a,0x24,
++0x2,0x41,0x30,0x17,0x0,0x2,0xf2,0x12,0x12,0x13,0x12,0x10,0x10,0x29,0x47,0x0,0x8,0x10,0xa0,0xfc,0x40,0x48,0x48,0x48,0x48,0xf8,0x48,0x40,0x80,0x6,0xfc,0x0,
++0x0,0x47,0x30,0x10,0x87,0x64,0x24,0xf,0x10,0x24,0xe2,0x22,0x24,0x20,0x22,0x21,0x0,0xbc,0x84,0x84,0xbc,0x20,0x24,0xbe,0x84,0xa4,0x94,0x94,0xa4,0x84,0x94,0x8,
++0x8,0xff,0x8,0x3f,0x1,0x9,0x9,0xff,0x10,0x1f,0x10,0x1f,0x29,0x24,0x44,0x0,0x24,0xfe,0x20,0xf8,0x0,0xf0,0x4,0xfe,0x0,0xf8,0x0,0xfc,0x24,0x94,0x94,0xc,
++0x10,0x10,0x10,0x10,0xfc,0x10,0x14,0x18,0x33,0xd2,0x12,0x12,0x12,0x12,0x53,0x22,0x40,0x40,0x44,0x7e,0x40,0x40,0x40,0x44,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x8,0x1f,0x11,0x21,0x41,0x1f,0x11,0x11,0x11,0xff,0x1,0x1,0x1,0x1,0x1,0x0,0x8,0xfc,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x0,0xb,0xfe,0x12,0x13,0x22,0x2b,0x7e,0xaa,0x2b,0x2a,0x2a,0x3c,0x24,0x8,0x0,0x4,0xfe,0x4,0x4,0xfc,0x50,0xfc,0x50,0x54,0xfe,0xc4,0xa8,0x90,0x8e,0xc4,0x80,
++0x21,0x21,0x27,0x21,0xff,0x21,0x22,0x3c,0x67,0xa1,0x22,0x27,0x20,0x3f,0xa0,0x40,0x10,0x10,0xfc,0x10,0xfe,0x10,0xae,0x84,0xf8,0x0,0x40,0xf8,0x40,0xfe,0x40,0x40,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x14,0x18,0x33,0xd0,0x10,0x12,0x16,0x1a,0x52,0x21,0x40,0x40,0xa0,0xa0,0x10,0x8e,0x44,0x0,0xf8,0x10,0x20,0x80,0x64,0x22,0x8,0xf8,
++0x1,0x2,0x4,0x8,0x12,0x21,0xc1,0x1f,0x0,0x0,0x4,0x13,0x51,0x50,0x8f,0x0,0x0,0x80,0x40,0x20,0x10,0xe,0x4,0xf8,0x20,0x40,0x0,0x0,0x14,0x12,0xf2,0x0,
++0x10,0x10,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x1,0x40,0x28,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x44,0x48,0x30,0x10,0x4e,0x84,0x0,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x57,0x61,0x41,0x41,0x7f,0x41,0x41,0x7f,0x41,0x20,0x94,0x7e,0x44,0x44,0x7c,0x44,0x44,0x7c,0x60,0x52,0x54,0x48,0x48,0x64,0x42,
++0x2,0x4,0x1f,0x10,0x14,0x12,0x12,0x10,0x10,0x1f,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0xa0,0x44,0xfe,0x4,0x24,0xf4,0x4,0x28,0x10,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x2e,0x22,0x22,0x24,0x24,0x48,0x50,0x82,0x1,0x4,0xfe,0x4,0x4,0xfc,0x84,0x80,0xa4,0xa8,0xb0,0xa0,0x90,0x8e,0x84,0x80,0x0,
++0x10,0x13,0x12,0x12,0xff,0x12,0x16,0x1b,0x30,0xd0,0x17,0x10,0x10,0x10,0x5f,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x7f,0x8,0xf,0x8,0xf,0x8,0x7f,0x0,0x7e,0x2,0x24,0x14,0x8,0x16,0x62,0x8,0xfc,0x20,0xe0,0x20,0xe0,0x28,0xfc,0x20,0xfc,0x4,0x48,0x28,0x10,0x2e,0xc4,
++0x4,0xff,0x10,0x7e,0x42,0x7e,0x41,0x7e,0x42,0x7e,0x40,0xf,0x0,0x7f,0x1,0x3,0x44,0xfe,0x20,0xf8,0x50,0x50,0xfc,0x20,0xf8,0x20,0x20,0xe0,0x88,0xfc,0x0,0x0,
++0x0,0x8,0x7d,0x49,0x49,0x49,0x4f,0x48,0x4a,0x4a,0x4a,0x4a,0x7b,0x4a,0x3,0x2,0x40,0x48,0x7c,0x40,0x40,0x44,0xfe,0x0,0x44,0x44,0x44,0xb4,0x14,0x4,0xfc,0x4,
++0x23,0x21,0x39,0x41,0x81,0x79,0x27,0x20,0xff,0x24,0x22,0x22,0x29,0x32,0x22,0xc,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x8,0xfe,0x62,0x94,0x94,0x8,0x98,0xa4,0x42,
++0x20,0x21,0x3b,0x42,0x83,0x7a,0x23,0x22,0xfb,0x20,0x2f,0x20,0x29,0x32,0x24,0x0,0x80,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x44,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x40,0x37,0x14,0x4,0x87,0x64,0x24,0xf,0x10,0x20,0xe7,0x20,0x20,0x20,0x2f,0x20,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x9,0x9,0x13,0x12,0x34,0x59,0x91,0x12,0x14,0x11,0x10,0x2,0x51,0x50,0x90,0xf,0x0,0x0,0xfc,0x4,0x48,0x40,0x50,0x4c,0x44,0x40,0x80,0x0,0x84,0x92,0x12,0xf0,
++0x10,0x10,0x10,0x13,0xfe,0x14,0x30,0x3b,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x40,0x20,0x20,0xfe,0x2,0x4,0x0,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x44,0x2c,0x13,0x2a,0x4c,0x88,0xb,0x18,0x28,0x48,0x88,0x8,0x8,0x50,0x20,0x40,0x20,0x20,0xfe,0x2,0x4,0x0,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x8,0x89,0x6e,0x28,0x8,0x7,0x28,0x2f,0x32,0xc2,0x5f,0x42,0x45,0x44,0x48,0x11,0x0,0x7c,0x4,0x28,0x90,0x88,0x7e,0x82,0x14,0x50,0xdc,0x50,0x70,0xd0,0x8e,0x4,
++0x2,0x1,0x7f,0x40,0x80,0x0,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x0,0x0,0xfe,0x2,0x4,0x0,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x10,0x13,0xfa,0x14,0x10,0x1b,0x30,0xd0,0x10,0x10,0x10,0x10,0x50,0x20,0x40,0x20,0x20,0xfe,0x2,0x4,0x0,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x40,0x30,0x10,0x7,0x84,0x68,0x20,0xf,0x10,0x20,0xe0,0x20,0x20,0x20,0x21,0x20,0x80,0x40,0x40,0xfe,0x2,0x4,0x0,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x1,0x11,0x11,0x1f,0x21,0x21,0x41,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x13,0x10,0x10,0xfc,0x10,0x14,0x1b,0x30,0xd0,0x10,0x10,0x10,0x10,0x57,0x20,0x8,0xfc,0x88,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0x88,0x88,0xfe,0x0,
++0x20,0x27,0x39,0x41,0x81,0x79,0x21,0x27,0xf9,0x21,0x21,0x29,0x31,0x21,0xf,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0xfe,0x0,
++0x10,0x17,0x21,0x21,0x49,0xf9,0x11,0x27,0x41,0xf9,0x1,0x1,0x19,0xe1,0x47,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0xfe,0x0,
++0x8,0x7c,0x4b,0x4a,0x4c,0x78,0x48,0x49,0x4b,0x7d,0x49,0x49,0x49,0x49,0x49,0x99,0x40,0x40,0xfc,0x44,0x48,0x80,0x84,0x4c,0x50,0x20,0x20,0x10,0xe,0x44,0x80,0x0,
++0x40,0x30,0x17,0x4,0x88,0x60,0x20,0x9,0x13,0x25,0xe9,0x21,0x21,0x21,0x21,0x21,0x40,0x40,0xfc,0x44,0x48,0x80,0x84,0x4c,0x50,0x20,0x20,0x10,0xe,0x44,0x80,0x0,
++0x1,0x1,0x7f,0x41,0x81,0x2,0x2,0x5,0x9,0x18,0x28,0x48,0x88,0xa,0xc,0x8,0x0,0x0,0xfe,0x2,0x4,0x0,0x8,0x18,0x20,0xc0,0x80,0x40,0x30,0xe,0x4,0x0,
++0x0,0x7f,0x1,0x1,0x3f,0x1,0x1,0x7f,0x4,0x4,0xff,0x4,0x8,0x8,0x10,0x60,0x8,0xfc,0x0,0x10,0xf8,0x0,0x8,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x11,0x10,0xfe,0x22,0x22,0x22,0x42,0x24,0x14,0x8,0x14,0x22,0x41,0x6,0x0,0x0,0xfc,0x4,0x84,0x84,0x88,0x88,0x48,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x10,0xfe,0x22,0x24,0x64,0x18,0x14,0x62,0x2,0x3f,0x2,0x4,0x4,0x18,0x60,0x0,0x0,0xfc,0x84,0x48,0x30,0x20,0x50,0x8e,0x4,0xf0,0x10,0x10,0x10,0x50,0x20,
++0x10,0x10,0xfe,0x22,0x24,0x64,0x18,0x14,0x62,0x0,0x12,0x51,0x50,0x90,0xf,0x0,0x0,0x0,0xfc,0x84,0x48,0x30,0x20,0x50,0x8e,0x4,0x0,0x84,0x92,0x12,0xf0,0x0,
++0x2,0x2,0x2,0x2,0x2,0xff,0x4,0x4,0x8,0x10,0xc,0x2,0x1,0x6,0x18,0x60,0x0,0x0,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x40,0x80,0x80,0x60,0x18,0x8,
++0x0,0xb,0x7c,0x4a,0x49,0x4b,0x48,0x7f,0x48,0x48,0x49,0x49,0x7a,0x44,0x8,0x3,0xc,0xf0,0x84,0x4c,0x50,0xfc,0x80,0xfe,0x80,0xf8,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x1,0x1,0x1,0x3f,0x21,0x21,0x3f,0x21,0x20,0x20,0x27,0x24,0x3f,0x24,0x47,0x80,0x10,0xf8,0x0,0xfc,0x4,0xe8,0x0,0x8,0xf8,0x0,0xf0,0x4,0xfe,0x0,0xf8,0x0,
++0x1,0x0,0x1f,0x10,0x90,0x53,0x52,0x12,0x32,0x5f,0xd2,0x12,0x22,0x22,0x43,0x0,0x0,0x84,0xfe,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x8,0xfc,0x0,
++0x10,0x17,0x12,0x12,0xfa,0x17,0x12,0x1a,0x32,0xd7,0x12,0x12,0x14,0x19,0x50,0x20,0x0,0xde,0x52,0x54,0x54,0xd4,0x58,0x58,0x54,0xd2,0x52,0x52,0x5a,0x54,0x90,0x10,
++0x20,0x27,0x20,0x2f,0xba,0xa9,0xa2,0x20,0x2f,0x20,0x27,0x24,0x24,0x24,0x24,0x24,0x8,0xfc,0x40,0xfe,0x4a,0x50,0x48,0x40,0xfc,0x80,0xfc,0xa4,0xa4,0xa4,0xa4,0xc,
++0x10,0x11,0x54,0x3b,0x12,0xfc,0x10,0x30,0x3b,0x54,0x53,0x92,0x12,0x12,0x12,0x12,0x8,0xfc,0x20,0xfe,0xaa,0x70,0xa8,0x20,0xfe,0x40,0xfe,0x52,0x52,0x52,0x52,0x6,
++0x1,0x41,0x37,0x11,0x1,0x0,0xef,0x20,0x21,0x23,0x2d,0x21,0x29,0x31,0x21,0x1,0x10,0x10,0xfc,0x10,0x50,0x44,0xfe,0x80,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x8,0x7f,0x49,0x49,0x4f,0x49,0x49,0x49,0x49,0x4f,0x49,0x79,0x41,0x5,0x2,0x20,0xb0,0x28,0x20,0x24,0xfe,0x20,0x20,0x20,0xd4,0x18,0x10,0x30,0x4a,0x8a,0x6,
++0x4,0x7e,0x40,0x42,0x62,0x55,0x54,0x48,0x54,0x52,0x62,0x40,0x44,0x7e,0x1,0x2,0x40,0x40,0x40,0x7e,0x82,0x24,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x8e,0x4,0x0,
++0x4,0x7e,0x40,0x42,0x62,0x54,0x54,0x48,0x54,0x52,0x62,0x40,0x45,0x7e,0x0,0x0,0x10,0x24,0xfe,0x84,0xa4,0x84,0x94,0x88,0x80,0xfe,0x2,0x12,0xfa,0x2,0x14,0x8,
++0x4,0x7e,0x40,0x42,0x62,0x54,0x55,0x48,0x55,0x52,0x62,0x40,0x44,0x7e,0x0,0x3,0x8,0xfc,0x88,0x88,0x88,0x88,0x6,0x0,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x4,0x4,0xff,0x14,0x11,0x7d,0x11,0x7d,0x11,0xfc,0x13,0x3a,0x56,0x92,0x12,0x12,0x40,0x44,0xfe,0x40,0xfc,0x24,0xfc,0x24,0xfc,0x20,0xfe,0x22,0x2a,0xfa,0xa,0x4,
++0x0,0xb,0x7e,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x7b,0x4a,0x3,0x0,0x8,0xfc,0x0,0x8,0x88,0x50,0x50,0x20,0x20,0x50,0x50,0x88,0x8,0x4,0xfe,0x0,
++0x10,0x17,0x14,0x24,0x27,0x64,0xa4,0x27,0x20,0x2f,0x28,0x28,0x2b,0x28,0x28,0x28,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x40,0xfe,0x42,0x4a,0xfa,0x2,0xa,0x4,
++0x0,0x43,0x32,0x13,0x82,0x62,0x22,0xa,0x12,0x22,0xe2,0x22,0x23,0x22,0x23,0x20,0x8,0xfc,0x0,0x8,0x88,0x50,0x50,0x20,0x20,0x50,0x50,0x88,0x8,0x4,0xfe,0x0,
++0x2,0x12,0x7a,0x5f,0x52,0x52,0x52,0x52,0x53,0x5e,0x52,0x72,0x52,0x2,0xa,0x4,0x10,0x10,0x24,0xfe,0x44,0x44,0x44,0xc4,0x7c,0x44,0x44,0x44,0x44,0x44,0x7c,0x44,
++0x4,0x7e,0x44,0x44,0x44,0x7c,0x10,0x10,0x5c,0x51,0x51,0x51,0x5e,0xe2,0x44,0x8,0x10,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x10,0x10,0x10,0x8,0xe,0x4,0x0,
++0x7,0x78,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x52,0x52,0x51,0x90,0x10,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0xfc,0x0,0x2,0x2,0xfe,0x0,0x6,0xfc,0x0,
++0x10,0x10,0x10,0x7d,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5d,0x11,0x11,0x11,0x20,0x20,0x44,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x11,0x59,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x20,0x20,0x44,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x4,0x7e,0x8,0x3e,0x8,0x7e,0x0,0x3f,0x21,0x21,0x3f,0x20,0x20,0x20,0x1f,0x0,0x8,0xfc,0x20,0xf8,0x20,0xfc,0x8,0xfc,0x8,0x8,0xf8,0x8,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x10,0x11,0xfd,0x11,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x11,0x51,0x21,0x20,0x20,0x44,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x17,0xfc,0x10,0x14,0x1b,0x30,0xd0,0x10,0x1f,0x10,0x10,0x50,0x20,0xa0,0xa0,0xa4,0xbe,0xa0,0xa0,0xa8,0xbc,0xa0,0xa0,0xa4,0xbe,0xa0,0xa0,0xa0,0xa0,
++0x8,0x48,0x49,0x49,0x49,0x7d,0x41,0x41,0x79,0x48,0x49,0x4f,0x48,0x48,0x88,0x8,0x40,0x84,0xfe,0x24,0x24,0xfc,0x24,0x44,0xfc,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x8,0x8,0x10,0x2f,0x40,0x88,0x8,0x17,0x30,0x50,0x90,0x1f,0x10,0x10,0x10,0x10,0xa0,0xa0,0xa4,0xbe,0xa0,0xa0,0xa8,0xbc,0xa0,0xa0,0xa4,0xbe,0xa0,0xa0,0xa0,0xa0,
++0x40,0x3f,0x12,0x2,0x82,0x6f,0x22,0xa,0x12,0x22,0xef,0x22,0x22,0x24,0x24,0x28,0x88,0x7c,0x10,0x10,0x7c,0x90,0x10,0x7c,0x10,0x10,0x94,0xfe,0x10,0x10,0x10,0x10,
++0x40,0x37,0x14,0x4,0x85,0x65,0x25,0xd,0x15,0x25,0xe5,0x25,0x25,0x29,0x29,0x11,0x1c,0xe0,0x8,0x3c,0xc0,0x40,0x40,0x24,0x2c,0x30,0x20,0x10,0x10,0x4e,0x84,0x0,
++0x22,0x21,0xfa,0x22,0x71,0xaa,0x22,0xff,0x4,0xf,0x31,0xcf,0x1,0x3f,0x1,0x3,0x88,0x8,0xbe,0x88,0x1c,0xaa,0x8,0xfe,0x40,0xe0,0x18,0xe6,0x0,0xf8,0x0,0x0,
++0x0,0x47,0x32,0x11,0x8f,0x61,0x22,0xc,0x17,0x24,0xe4,0x27,0x24,0x24,0x27,0x24,0x3c,0xc0,0x48,0x50,0xfe,0x50,0x48,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x2,0x1f,0x10,0x12,0x11,0xff,0x10,0x12,0x21,0x40,0x3f,0x24,0x24,0x24,0xff,0x0,0x10,0xf8,0x10,0x10,0x14,0xfe,0x10,0x10,0x50,0x20,0xf8,0x48,0x48,0x48,0xfe,0x0,
++0x10,0x3e,0x22,0x2a,0xff,0x22,0x2a,0x22,0x46,0xff,0x4,0xf,0x18,0x68,0xf,0x8,0x78,0x48,0x48,0x86,0x78,0x48,0x30,0x4e,0x84,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x0,0x8,0x7c,0x49,0x49,0x7a,0x4a,0x4d,0x48,0x78,0x48,0x48,0x49,0x79,0x42,0x4,0x20,0xa0,0xa0,0x10,0x10,0x8,0xe,0xf4,0x90,0x90,0x90,0x90,0x10,0x10,0x50,0x20,
++0x0,0x4,0x7f,0x54,0x54,0x54,0x55,0x7c,0x54,0x54,0x57,0x54,0x7c,0x44,0x0,0x0,0x20,0x20,0x24,0xa8,0xa8,0x20,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x4,0x44,0x34,0x15,0x4,0x7f,0x4,0x4,0x5,0xff,0x4,0x8,0x8,0x10,0x20,0x0,0x4,0x44,0xc4,0x24,0x24,0xa4,0x24,0x24,0x24,0xa4,0x24,0x24,0x4,0x4,0x14,0x8,
++0x10,0x10,0x93,0x55,0x39,0x11,0x7d,0x11,0x11,0xfd,0x11,0x11,0x22,0x22,0x44,0x89,0x8,0x1c,0xe0,0x0,0x0,0x0,0xf8,0x8,0x88,0x48,0x50,0x20,0x50,0x48,0x8e,0x4,
++0x0,0xf,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x8,0xff,0x0,0x0,0x0,0x0,0x0,0x30,0xc0,0x0,0x0,0x10,0xf8,0x20,0x20,0x20,0x24,0xfe,0x0,0x40,0x30,0x18,0x8,
++0x2,0x1,0x7f,0x42,0x42,0x42,0x7f,0x42,0x42,0x44,0x44,0x44,0x48,0x4b,0x90,0x20,0x0,0x4,0xfe,0x0,0x40,0x28,0xfc,0x80,0x80,0x88,0x90,0xa0,0xc2,0x82,0x82,0x7e,
++0x2,0x1,0x7f,0x8,0x4,0x7f,0x42,0x81,0x7f,0x4,0x7,0x4,0x8,0x8,0x10,0x60,0x0,0x8,0xfc,0x20,0x40,0xfe,0x2,0x4,0xfc,0x0,0xf0,0x10,0x10,0x10,0xa0,0x40,
++0x10,0x10,0x13,0xfc,0x10,0x7f,0x12,0xfc,0x13,0x38,0x34,0x50,0x90,0x11,0x12,0x14,0x40,0x24,0xfe,0x88,0x50,0xfe,0x42,0x24,0xfe,0x80,0xf8,0x88,0x88,0x8,0x28,0x10,
++0x0,0x78,0x4c,0x4a,0x49,0x78,0x4f,0x48,0x48,0x78,0x4f,0x48,0x48,0x48,0x48,0x98,0x40,0x40,0x44,0x48,0x50,0x40,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x12,0x12,0x12,0x12,0xfe,0x17,0x12,0x1a,0x32,0xd2,0x12,0x12,0x12,0x12,0x54,0x28,0x20,0x20,0x20,0x24,0x7e,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xd4,0x8a,0x82,0x7e,0x0,
++0x0,0x8,0x7c,0x49,0x49,0x4b,0x4d,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0x0,0x0,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x14,0x8,0x2,0x2,0xfe,0x0,
++0x10,0x11,0x1f,0x21,0x21,0x7d,0xa5,0x25,0x25,0x3d,0x25,0x22,0x20,0x20,0x1f,0x0,0x4,0x4,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x84,0x84,0x94,0x8,
++0x10,0x10,0x10,0x15,0x59,0x53,0x55,0x91,0x11,0x11,0x11,0x29,0x25,0x45,0x80,0x0,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x14,0x8,0x2,0x2,0xfe,0x0,
++0x20,0x10,0x10,0x1,0xf9,0xb,0x11,0x35,0x59,0x95,0x11,0x11,0x11,0x11,0x10,0x10,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x14,0x8,0x2,0x2,0xfe,0x0,
++0x4,0x7e,0x44,0x45,0x45,0x7f,0x15,0x11,0x5d,0x51,0x51,0x51,0x5d,0xe1,0x40,0x0,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x14,0x8,0x2,0x2,0xfe,0x0,
++0x1,0x41,0x31,0x12,0x82,0x67,0x2a,0x2,0xa,0x13,0xe2,0x22,0x22,0x22,0x21,0x20,0x0,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x14,0x8,0x2,0x2,0xfe,0x0,
++0x0,0x7,0x78,0x48,0x48,0x48,0x48,0x49,0x49,0x4a,0x4c,0x78,0x48,0x0,0xf,0x0,0x8,0xfc,0x20,0x20,0x40,0xc0,0xc0,0x50,0x4c,0x46,0x42,0x40,0x40,0x44,0xfe,0x0,
++0x8,0x7f,0x48,0x48,0x48,0x78,0x48,0x49,0x49,0x7a,0x4c,0x48,0x48,0x48,0x4f,0x98,0x8,0xfc,0x20,0x20,0x40,0xc0,0xc0,0x50,0x4c,0x46,0x42,0x40,0x40,0x44,0xfe,0x0,
++0x20,0x20,0x27,0x20,0x21,0xf8,0x20,0x2f,0x20,0x23,0x22,0x22,0x3a,0xe2,0x43,0x2,0x80,0x48,0xfc,0x0,0x10,0xa0,0x4,0xfe,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x2,0x2,0x7e,0x2,0x3e,0x2,0x7e,0x2,0x1,0xff,0x2,0x4,0xc,0x35,0xc6,0x4,0x80,0x88,0xfc,0x80,0xf8,0x80,0xfc,0x80,0x4,0xfe,0x80,0x88,0x50,0x30,0xe,0x4,
++0x0,0x7c,0x45,0x54,0x54,0x54,0x54,0x57,0x54,0x55,0x55,0x55,0x11,0x29,0x45,0x81,0x40,0x20,0xfc,0x0,0x88,0x50,0x4,0xfe,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x78,0x4f,0x50,0x51,0x50,0x60,0x57,0x48,0x4b,0x6a,0x52,0x42,0x42,0x43,0x42,0x80,0x48,0xfc,0x0,0x10,0xa0,0x4,0xfe,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x55,0x63,0x41,0x7f,0x41,0x41,0x7f,0x41,0x4,0xfe,0x4,0x4,0x4,0x4,0x7c,0x44,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x1f,0x28,0x2f,0x68,0xa8,0x2b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x28,0x30,0x20,0x8,0xfc,0x8,0xf8,0x88,0xa8,0xf8,0xa8,0xa8,0xa8,0xa8,0xa8,0xea,0x8a,0x86,0x80,
++0x0,0x40,0x20,0x2f,0x80,0x60,0x27,0xc,0x14,0x24,0xe4,0x24,0x24,0x20,0x20,0x20,0x40,0x40,0x44,0xfe,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x54,0x48,0x40,0x40,0x40,
++0x0,0xb,0x7c,0x49,0x4f,0x49,0x48,0x4b,0x4a,0x4a,0x4a,0x7a,0x4a,0x0,0x1,0x6,0x48,0xfc,0x40,0x14,0xfe,0x10,0x8,0xfc,0x8,0x48,0x48,0x48,0x48,0x90,0xc,0x4,
++0x0,0x4,0x8,0x10,0x2f,0xc4,0x4,0x9,0x30,0x0,0x3f,0x24,0x24,0x24,0xff,0x0,0x80,0x80,0x40,0x20,0xd0,0x4e,0x44,0x40,0x80,0x8,0xfc,0x48,0x48,0x48,0xfe,0x0,
++0x4,0xff,0x10,0x10,0x21,0x24,0x3e,0x64,0xa7,0x24,0x24,0x24,0x24,0x3c,0x24,0x0,0x8,0xfc,0x20,0x20,0x24,0xa8,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x10,0x11,0x10,0x10,0xfd,0x10,0x14,0x18,0x33,0xd0,0x10,0x10,0x10,0x10,0x50,0x20,0x8,0xfc,0x20,0x20,0x24,0xa8,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x1,0xff,0x0,0x1f,0x10,0x10,0x1f,0x0,0x3f,0x0,0x1,0x5,0x3,0x48,0x44,0x84,0x4,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x0,0xf0,0x40,0x80,0x0,0x0,0x48,0x24,0x24,
++0x41,0x21,0x2f,0x1,0x87,0x60,0x27,0xc,0x14,0x27,0xe0,0x24,0x22,0x20,0x2f,0x0,0x0,0x42,0xe6,0x8,0xd0,0x2,0xc6,0x48,0x50,0xc0,0x2,0x46,0x88,0xf0,0x20,0x40,
++0x8,0x9,0xff,0x8,0x7f,0x0,0x7f,0x41,0x41,0x7f,0x0,0x22,0x14,0xf,0xf0,0x40,0x4,0xc,0x90,0x20,0x40,0x4,0xc,0x10,0x20,0x42,0x6,0x8,0x10,0x20,0x40,0x80,
++0x4,0xff,0x5,0x41,0x33,0x14,0x1,0xf6,0x1b,0x10,0x13,0x10,0x17,0x10,0x28,0x47,0x44,0xfe,0x40,0xf8,0x10,0xe0,0x18,0x46,0xf8,0x40,0xf8,0x40,0xfc,0x40,0x46,0xfc,
++0x20,0x27,0x24,0x24,0xfc,0x27,0x64,0x74,0xac,0x27,0x24,0x24,0x24,0x24,0x25,0x28,0x4,0xbe,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0xa4,0xa4,0x4c,
++0x10,0xff,0x24,0x24,0x44,0x47,0x74,0xd4,0x54,0x57,0x54,0x54,0x54,0x74,0x45,0x8,0x4,0xbe,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0xa4,0xa4,0x4c,
++0x10,0x3e,0x49,0x81,0x43,0x24,0x1,0xf6,0x1b,0x10,0x13,0x10,0x17,0x10,0x28,0x47,0x40,0xfc,0x20,0xf8,0x10,0xe0,0x18,0x46,0xf8,0x40,0xf8,0x40,0xfc,0x40,0x46,0xfc,
++0x0,0x78,0x4f,0x48,0x4b,0x78,0x4b,0x4a,0x4a,0x7b,0x48,0x4a,0x49,0x4f,0x48,0x98,0x80,0xa2,0xf2,0x84,0xe8,0x12,0xe2,0x24,0x28,0xf0,0x2,0x22,0x44,0xe8,0x10,0x60,
++0x2,0x3f,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x4a,0x44,0x81,0x4,0x7e,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x84,0x94,0x8,
++0x0,0x77,0x55,0x55,0x55,0x77,0x55,0x55,0x55,0x77,0x55,0x55,0x55,0x55,0x8b,0x0,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0xa,0xfe,0x2,0xa,0x4,
++0x10,0x10,0x17,0xfc,0x13,0x10,0x17,0x18,0x31,0xd2,0x1d,0x10,0x17,0x10,0x50,0x20,0x40,0x48,0xfc,0x40,0xf8,0x80,0xfe,0xa0,0x50,0x4e,0xf4,0x40,0xfc,0x40,0x40,0x40,
++0x1,0x8,0xfc,0x20,0x23,0x40,0x48,0x7c,0xca,0x4a,0x4a,0x48,0x48,0x78,0x47,0x0,0x8,0x88,0x90,0x8,0xfc,0x90,0x90,0x92,0x96,0x94,0x98,0x90,0x90,0x94,0xfe,0x0,
++0x10,0x10,0x13,0x10,0x10,0xfc,0x10,0x10,0x10,0x11,0x12,0x1c,0xf0,0x40,0x7,0x0,0x0,0x4,0xfe,0x10,0x10,0x20,0x20,0x68,0xa4,0x22,0x22,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x5,0xff,0x11,0x11,0x21,0x25,0x3f,0x65,0xa5,0x25,0x25,0x25,0x3d,0x25,0x0,0x10,0x10,0x10,0x10,0x12,0x16,0xd8,0x10,0x10,0x10,0x10,0x10,0x12,0x52,0x8e,0x0,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x3e,0x23,0x22,0x3e,0x21,0x3e,0x62,0xa2,0x3e,0x20,0xf0,0x0,0xfe,0x12,0x64,0x10,0x20,0xfc,0x88,0x50,0xfe,0x20,0xfc,0x20,0x20,0x20,
++0x12,0x12,0x12,0x12,0xfe,0x12,0x13,0x1a,0x32,0xd2,0x12,0x12,0x12,0x13,0x52,0x20,0x20,0x20,0x20,0x20,0x24,0x2c,0xb0,0x20,0x20,0x20,0x20,0x20,0xa4,0x24,0x1c,0x0,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x16,0x1b,0x32,0xd2,0x12,0x12,0x12,0x14,0x54,0x29,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xf8,0x88,0x88,0x50,0x20,0x50,0x48,0x8e,0x4,
++0x0,0x3e,0x23,0x22,0x3e,0x21,0x3e,0x62,0xa2,0x3e,0x0,0x7f,0x4,0x4,0x8,0x30,0x40,0x20,0xfc,0x88,0x50,0xfe,0x20,0xf8,0x20,0x20,0x8,0xfc,0x8,0x8,0x50,0x20,
++0x4,0x7e,0x8,0x8,0x3e,0x8,0x8,0x7e,0x0,0x20,0x24,0x3e,0x20,0x20,0x2e,0x30,0x8,0xfc,0x20,0x20,0xf8,0x20,0x28,0xfc,0x0,0x80,0x98,0xe0,0x80,0x82,0x82,0x7e,
++0x0,0x5,0x7f,0x55,0x55,0x55,0x55,0x7d,0x55,0x55,0x55,0x55,0x7d,0x45,0x1,0x0,0x10,0x10,0x10,0x10,0x10,0x12,0xdc,0x10,0x10,0x10,0x10,0x10,0x52,0x92,0xe,0x0,
++0x0,0x8,0x7f,0x4a,0x4a,0x4b,0x4a,0x4a,0x4b,0x48,0x49,0x4f,0x78,0x48,0x0,0x0,0x40,0x88,0xfc,0x48,0x48,0xf8,0x48,0x88,0xf8,0x80,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x4,0x3e,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x3c,0x24,0x27,0x24,0x24,0x54,0x88,0x20,0x44,0xfe,0x24,0x24,0xfc,0x24,0x44,0xfc,0x40,0xa4,0xfe,0x20,0x20,0x20,0x20,
++0x1,0x0,0x1f,0x90,0x50,0x57,0x14,0x14,0x37,0x54,0xd5,0x14,0x24,0x24,0x49,0x12,0x0,0x84,0xfe,0x40,0x40,0xfc,0x44,0x40,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x0,0x0,0x0,0x3f,0x20,0x20,0x20,0x2f,0x20,0x24,0x22,0x21,0x20,0x41,0x46,0x98,0x80,0x80,0x80,0xfc,0x84,0x88,0x80,0xf8,0x8,0x10,0x20,0x40,0x80,0x60,0x1e,0x4,
++0x0,0x0,0x7f,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x48,0x50,0x40,0x7f,0x0,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0x44,0x3c,0x0,0x4,0xfe,0x0,
++0x1,0x0,0x1f,0x90,0x57,0x50,0x10,0x10,0x31,0x56,0xdb,0x12,0x22,0x22,0x43,0x2,0x0,0x84,0xfe,0x8,0xfc,0x20,0x40,0xd8,0x46,0x42,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x1f,0x29,0x29,0x69,0xaf,0x28,0x28,0x2f,0x29,0x39,0x29,0x2f,0x28,0x20,0x20,0x10,0x14,0xfe,0x44,0x28,0x10,0xfe,0x10,0x10,0xfe,0x10,0x10,0x10,0x10,0x10,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x28,0x28,0x2a,0x2f,0x28,0x28,0x29,0x4e,0x48,0x80,0x8,0xfc,0x8,0x8,0xf8,0x48,0x40,0x40,0x4c,0x70,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x3f,0x21,0x3f,0x20,0x7f,0xa1,0x3f,0x21,0x7f,0x0,0x3f,0x0,0x0,0x1f,0x10,0x1f,0x10,0x7c,0x28,0xfe,0x10,0x7c,0x10,0x14,0xfe,0x0,0x0,0xf8,0x0,0xf0,0x10,0xf0,
++0x12,0x1f,0x28,0x45,0x80,0x3f,0x20,0x3f,0x20,0x3f,0x32,0x52,0x5f,0x52,0x92,0x10,0x44,0x7e,0xa0,0x10,0x80,0xf8,0x8,0xf8,0x4,0xfe,0x24,0x24,0xfc,0x24,0x34,0x8,
++0x10,0x10,0x17,0x24,0x24,0x67,0xa4,0x24,0x27,0x26,0x2a,0x2b,0x2a,0x32,0x22,0x22,0x80,0x44,0xfe,0x4,0x4,0xfc,0x0,0x4,0xfe,0x94,0x94,0xfc,0x94,0x94,0x94,0xc,
++0x0,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x20,0x40,0x80,0x80,0x80,0x80,0x80,0x84,0xfe,0x0,0x0,0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0xf8,0x13,0x52,0x52,0x53,0x52,0x52,0x7b,0xa,0xa,0x3b,0xce,0xa,0x2a,0x12,0x40,0x28,0xfc,0x8,0x8,0xf8,0x0,0x4,0xfe,0x94,0x94,0xfc,0x94,0x94,0x94,0xc,
++0x4,0xfe,0x28,0xfe,0xaa,0xaa,0xfe,0x0,0x7c,0x0,0xfe,0x10,0x58,0x55,0x92,0x34,0x8,0xfc,0x88,0x88,0x88,0xd8,0xd8,0xa8,0xa8,0xd8,0xd8,0x88,0x8a,0xa,0x6,0x0,
++0x40,0x3f,0x10,0x7,0x84,0x64,0x27,0x8,0x13,0x20,0xef,0x20,0x22,0x24,0x29,0x20,0x4,0xfe,0xa0,0xfc,0xa4,0xa4,0xfc,0x0,0xf8,0x0,0xfe,0x40,0x50,0x4c,0x44,0x80,
++0x4,0xfe,0x28,0xfe,0xaa,0xaa,0xfe,0x0,0x7c,0x0,0xfe,0x10,0x59,0x55,0x92,0x30,0x4,0xf8,0x80,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa4,0x24,0x52,0x78,0x0,
++0x0,0x7f,0x4,0x3f,0x24,0x24,0x3f,0x0,0x1f,0x0,0xff,0x1,0x11,0x21,0x45,0x2,0x8,0xfc,0x40,0xf8,0x48,0x48,0xf8,0x0,0xf0,0x4,0xfe,0x0,0x20,0x18,0x8,0x0,
++0x22,0x22,0x2a,0x27,0xf2,0x2f,0x2a,0x2a,0x3a,0xef,0x2e,0x2a,0x2a,0x29,0xa8,0x40,0x10,0x10,0x90,0x24,0x3e,0xc4,0xa4,0xa4,0xa8,0xa8,0x90,0x90,0xa8,0xa8,0x46,0x84,
++0x8,0x49,0x2a,0x7f,0x49,0x5d,0x6b,0x49,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x20,0x20,0x7e,0xc4,0x28,0x10,0x2e,0x44,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x12,0x11,0x10,0x13,0xfd,0x11,0x15,0x19,0x37,0xd1,0x11,0x11,0x11,0x11,0x52,0x24,0x8,0x18,0xa0,0xfc,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x13,0x54,0x5e,0x51,0x55,0xff,0x11,0x55,0x55,0x55,0x95,0x8,0x10,0x20,0x43,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x20,0x50,0x8c,0x4,
++0x0,0x4,0x8,0x1f,0x24,0xc4,0x9,0x30,0x1f,0x10,0x11,0x11,0x11,0x2,0xc,0x30,0x40,0x40,0x20,0xd0,0x4e,0x44,0x40,0x90,0xf8,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x2,0x7f,0x42,0x42,0x42,0x42,0x42,0x7e,0x42,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x8,0xfc,0x4b,0x4a,0x7b,0x4a,0x4b,0x78,0x4f,0x48,0x5c,0xe9,0x48,0x8,0x8,0x8,0x40,0x48,0xfc,0x48,0xf8,0x48,0xf8,0x0,0xfe,0x80,0x80,0xf8,0x8,0x8,0x50,0x20,
++0x0,0xf,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x8,0xff,0x0,0x2,0x6,0x8,0x10,0x30,0xc0,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x10,0x17,0x10,0x10,0x12,0xfd,0x11,0x11,0x10,0x1f,0x10,0x1c,0xe0,0x40,0x0,0x0,0x8,0xfc,0x40,0x40,0x48,0x48,0x50,0x50,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x4,0x4,0xff,0x4,0x0,0x7f,0x1,0x11,0x9,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x40,0x44,0xfe,0x40,0x8,0xfc,0x0,0x10,0x20,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x20,0x17,0x80,0x4a,0x11,0x20,0xef,0x20,0x20,0x20,0x20,0x20,0x40,0x44,0xfe,0x40,0x8,0xfc,0x40,0x48,0x50,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x0,0x7f,0x1,0x11,0x11,0x9,0x9,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x8,0xfc,0x0,0x10,0x10,0x20,0x20,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0xb,0x10,0x10,0x37,0x50,0x90,0x13,0x10,0x7,0x4,0x4,0x4,0x4,0x8,0x30,0x30,0xc0,0x40,0x48,0xfc,0x40,0x50,0xf8,0x20,0xf0,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x42,0x25,0x28,0xfe,0x24,0x24,0x24,0x24,0xff,0x24,0x24,0x25,0x25,0x45,0x85,0x4,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0xc8,0xa8,0xa8,0x88,0x8,0x28,0xca,0xa,0x6,
++0x0,0x47,0x30,0x10,0x4,0x3,0xf1,0x10,0x1f,0x10,0x10,0x10,0x14,0x18,0x10,0x0,0x8,0xfc,0x40,0x40,0x44,0x4c,0x50,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x3f,0x20,0x20,0x3f,0x22,0x21,0x2f,0x22,0x22,0x3f,0x22,0x22,0x42,0x84,0x8,0x8,0xfc,0x8,0x8,0xf8,0x20,0x48,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x12,0x13,0x12,0x12,0x1e,0xe2,0x42,0x4,0x8,0x13,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xfc,0x84,0x88,0x48,0x50,0x20,0x50,0x8e,0x4,
++0x0,0x42,0x32,0x14,0x87,0x60,0x20,0x9,0x11,0x23,0xe2,0x24,0x28,0x20,0x21,0x26,0x40,0x50,0x48,0x40,0xfe,0x80,0x80,0xf8,0x8,0x10,0x90,0xa0,0x40,0xb0,0xe,0x4,
++0x8,0x9,0x8,0x7f,0x49,0x4a,0x48,0x7e,0x42,0x54,0x54,0x48,0x54,0x52,0xa2,0x1,0x4,0xfe,0x20,0x44,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0xa4,0x20,0x50,0x8c,0x4,
++0x20,0x1b,0x4a,0x22,0x3,0x12,0x22,0x64,0x28,0x22,0xff,0x8,0x4,0x3,0xc,0x30,0x20,0xfe,0x22,0x24,0xf8,0x88,0x50,0x20,0x50,0x8c,0xfe,0x20,0x40,0x80,0x60,0x10,
++0x0,0x8,0xfc,0x13,0x12,0x22,0x22,0x7b,0xaa,0x2a,0x2a,0x2a,0x3c,0x24,0x8,0x13,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xfc,0x84,0x88,0x48,0x50,0x20,0x50,0x8e,0x4,
++0x0,0x10,0x23,0x7a,0x4a,0x4b,0x4a,0x7a,0x4b,0x48,0x48,0x49,0x79,0x42,0x4,0x8,0x40,0x88,0xfc,0x48,0x48,0xf8,0x48,0x88,0xf8,0x80,0xd0,0x54,0x7c,0x42,0x42,0x3e,
++0x0,0x40,0x33,0x12,0x2,0x2,0xf3,0x12,0x12,0x12,0x12,0x13,0x12,0x28,0x47,0x0,0x40,0x88,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x0,0x6,0xfc,0x0,
++0x10,0x10,0x54,0x39,0x11,0xff,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x20,0x20,0x44,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x4,0x7f,0x21,0x11,0x12,0xff,0x1,0x3f,0x21,0x21,0x21,0x21,0x3f,0x21,0x0,0x4,0x4,0x84,0x24,0x24,0x24,0xe4,0x24,0xa4,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x8,0x8,0x8,0xa,0x7f,0x8,0xa,0xc,0x18,0x68,0x8,0x8,0x8,0x8,0x28,0x10,0x40,0x40,0x40,0x40,0x40,0x50,0x4c,0x46,0x42,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x1c,0x23,0x20,0x7d,0x91,0x11,0x7d,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x20,0x28,0x24,0xfe,0x20,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x24,0x34,0x28,
++0x4,0x4,0x4,0x8,0x8,0x10,0x30,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x80,0x80,0x80,0x80,0x80,0xa0,0x98,0x8c,0x84,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x4,0x4,0x7f,0x4,0x5,0x1,0xff,0x1,0x1f,0x11,0x1f,0x11,0x1f,0x11,0x11,0x11,0x40,0x48,0xfc,0x40,0x50,0x8,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x8,0x8,0xff,0x8,0x1f,0x21,0x7f,0x81,0x1f,0x11,0x1f,0x11,0x1f,0x11,0x11,0x11,0x20,0x24,0xfe,0x20,0xfc,0x44,0xfc,0x4,0xf4,0x14,0xf4,0x14,0xf4,0x14,0x34,0xc,
++0x4,0x4,0xff,0x4,0x1,0x3f,0x8,0x4,0xff,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x40,0x44,0xfe,0x40,0x10,0xf8,0x20,0x44,0xfe,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x4,0x4,0xff,0x4,0x40,0x2f,0x0,0x87,0x54,0x17,0x24,0xe7,0x24,0x24,0x24,0x24,0x40,0x44,0xfe,0x50,0x48,0xfe,0x44,0xfe,0x44,0xfc,0x44,0xfc,0x44,0x44,0x54,0x48,
++0x20,0x20,0x20,0x2f,0xf8,0x27,0x24,0x24,0x27,0x24,0x3c,0xe7,0x44,0x4,0x4,0x4,0x40,0x50,0x48,0xfe,0x40,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x54,0x48,
++0x10,0x10,0x10,0x14,0xfe,0x10,0x30,0x38,0x54,0x54,0x90,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0x40,0x40,0x40,0x60,0x58,0x4c,0x44,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x7f,0x41,0x41,0x5f,0x41,0x4f,0x49,0x4f,0x49,0x4f,0x49,0x49,0x40,0x7f,0x40,0x4,0xfe,0x4,0x44,0xf4,0x4,0xe4,0x24,0xe4,0x24,0xe4,0x24,0x64,0x4,0xfc,0x4,
++0x8,0x4,0x7f,0x4,0x24,0x14,0x4,0xff,0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x20,0x48,0xfc,0x40,0x48,0x50,0x44,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,
++0x0,0x40,0x30,0x1f,0x80,0x67,0x24,0x4,0x17,0x24,0xe4,0x27,0x24,0x24,0x24,0x24,0x40,0x50,0x48,0xfe,0x40,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x54,0x48,
++0x1,0x40,0x27,0x20,0x2,0x1,0xef,0x20,0x23,0x22,0x22,0x23,0x2a,0x32,0x23,0x2,0x10,0xa0,0xfc,0xa0,0xa8,0xb0,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x3,0xa,0x7f,0x4a,0x4b,0x49,0x7b,0x49,0x4f,0x49,0x4a,0x7d,0x48,0x1,0x2,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x10,0xf8,0x10,0xfe,0x10,0x48,0x56,0xe0,0x58,0x48,0xc0,
++0x3,0x42,0x33,0x12,0x83,0x61,0x27,0x1,0x1f,0x21,0xe2,0x25,0x28,0x21,0x22,0x20,0xf8,0x8,0xf8,0x8,0xf8,0x10,0xfc,0x10,0xfe,0x10,0x48,0x56,0xe0,0x58,0x48,0xc0,
++0x22,0x22,0x22,0x7f,0x22,0x3e,0x22,0x3e,0x22,0x22,0xff,0x0,0x24,0x22,0x41,0x82,0x4,0x7e,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x7c,0xc4,0x44,0x44,0x84,0x14,0x8,
++0x22,0x22,0x22,0x7f,0x22,0x3e,0x23,0x3e,0x22,0x22,0xff,0x0,0x24,0x22,0x41,0x82,0x40,0x40,0x40,0x7c,0x44,0x88,0x20,0x20,0x20,0x20,0xd0,0x50,0x50,0x88,0xe,0x4,
++0x20,0x20,0x2f,0x20,0xf8,0x27,0x64,0x74,0xac,0x24,0x24,0x25,0x26,0x24,0x27,0x24,0x0,0x4,0xfe,0xa0,0xa4,0xfe,0xa4,0xa4,0xa4,0xa4,0xa4,0x1c,0x4,0x4,0xfc,0x4,
++0x0,0x0,0x0,0x3f,0x22,0x23,0x22,0x22,0x3f,0x22,0x2b,0x2a,0x32,0x42,0x8a,0x4,0x20,0x28,0x24,0xfe,0x20,0xa0,0x24,0xa4,0xe8,0x28,0x10,0x90,0x30,0x4a,0x8a,0x6,
++0x1,0x7f,0x1,0x3f,0x1,0xff,0x1,0x3f,0x1,0xff,0x4,0x8,0x6,0x1,0x6,0x18,0x8,0xfc,0x0,0xf0,0x14,0xfe,0x10,0xf0,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x2,0x2,0x2,0x2,0x2,0x2,0x3,0xfe,0x2,0x2,0x2,0x2,0x2,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0xfc,0x0,
++0x0,0x8f,0x60,0x27,0x0,0x1f,0x0,0x17,0x20,0xe1,0x3f,0x22,0x26,0x21,0x22,0xc,0x88,0xfc,0x80,0xf8,0x88,0xfe,0x88,0xf8,0x80,0x4,0xfe,0x20,0x20,0xc0,0x30,0x8,
++0x0,0x40,0x37,0x11,0x81,0x62,0x24,0x1,0x12,0x2c,0xe2,0x21,0x22,0x24,0x21,0x20,0x40,0x48,0xfc,0x50,0x4c,0x44,0xa0,0x10,0x4e,0x44,0x48,0x50,0x4c,0x44,0x40,0x80,
++0x20,0x10,0x40,0x20,0xf,0x10,0x60,0x20,0x21,0xff,0x5,0x5,0x9,0x11,0x61,0x1,0x80,0x80,0x88,0xfc,0x80,0x88,0x88,0x78,0x4,0xfe,0x40,0x20,0x10,0x1c,0x8,0x0,
++0x44,0x34,0x14,0x4,0x85,0x5f,0x44,0x4,0x14,0x24,0xe5,0x26,0x24,0x20,0x21,0x22,0x0,0x4,0xfe,0x24,0x24,0xa4,0x24,0x24,0x24,0x24,0x44,0x44,0x44,0x84,0x14,0x8,
++0x8,0x8,0x3f,0x8,0x8,0xf,0x8,0x8,0xf,0x8,0x8,0xff,0x0,0x8,0x18,0x20,0x20,0x20,0xf8,0x20,0x20,0xe0,0x20,0x20,0xe0,0x20,0x24,0xfe,0x0,0x20,0x18,0x8,
++0x11,0x11,0x13,0x11,0xfd,0x11,0x31,0x39,0x55,0x51,0x91,0x17,0x10,0x11,0x13,0x14,0x8,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0xfe,0x0,0x8,0x6,0x2,
++0x1,0x1,0x3f,0x2,0x4,0x8,0xff,0x0,0x0,0x1f,0x10,0x10,0x1f,0x10,0x0,0x0,0x0,0x10,0xf8,0x80,0x60,0x24,0xfe,0x10,0x90,0xd0,0x90,0x90,0x90,0x90,0x50,0x20,
++0x10,0x10,0x10,0x17,0x50,0x5c,0x53,0x52,0x51,0x51,0x50,0x5c,0xe0,0x41,0x6,0x18,0x40,0x40,0x48,0xfc,0x40,0x40,0xf8,0x8,0x10,0x10,0xa0,0x40,0xa0,0x10,0xe,0x4,
++0x0,0x4,0x7e,0x55,0x54,0x54,0x54,0x7f,0x54,0x54,0x54,0x55,0x7c,0x44,0x0,0x3,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,
++0x10,0x10,0x13,0x54,0x54,0x55,0x57,0x54,0x55,0x55,0x55,0x55,0x7d,0x45,0x0,0x0,0x40,0x48,0xfc,0x40,0xa0,0x14,0xfe,0x8,0xe8,0x28,0x28,0x28,0xe8,0x8,0x28,0x10,
++0x0,0x78,0x4f,0x49,0x48,0x78,0x48,0x49,0x4e,0x79,0x49,0x49,0x49,0x4a,0x8c,0x18,0x80,0x48,0xfc,0x10,0xa0,0x40,0xb0,0xe,0x14,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x2,0x1,0x7f,0x8,0x4,0x2,0x1,0x6,0x18,0x20,0xc8,0x8,0x8,0x8,0x10,0x20,0x0,0x8,0xfc,0x20,0x40,0x80,0x0,0xc0,0x30,0x2e,0x24,0x20,0x20,0x20,0x20,0x20,
++0x20,0x10,0x10,0xff,0x22,0x21,0x3c,0x24,0x24,0x24,0x24,0x27,0x24,0x34,0x49,0x82,0x80,0x84,0xfe,0x0,0x88,0xfc,0x88,0xf8,0x88,0xf8,0x88,0xfe,0x0,0x88,0x86,0x2,
++0x20,0x10,0x11,0xfd,0x5,0x9,0x11,0x39,0x55,0x91,0x11,0x11,0x11,0x12,0x14,0x10,0x0,0xc,0xf0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x8,0x8,0xfe,0x2,0x4,0x8,0x1c,0x2a,0x48,0x88,0x8,0x8,0x8,0x8,0x8,0x0,0xf8,0x88,0x88,0x90,0x90,0xa0,0x90,0x88,0x84,0x84,0xc4,0xa8,0x90,0x80,0x80,
++0x8,0xfc,0xb,0x48,0x48,0x49,0x4f,0x48,0x7d,0x5,0x5,0x1d,0xe5,0x45,0x14,0x8,0x40,0x48,0xfc,0x40,0xb0,0x14,0xfe,0x8,0xe8,0x28,0x28,0x28,0xe8,0x8,0x28,0x10,
++0x8,0x8,0x8,0x7e,0x8,0x8,0xfe,0x8,0x28,0x2e,0x28,0x28,0x28,0x58,0x8f,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x88,0x80,0x84,0x84,0x7c,0x0,0x6,0xfc,0x0,
++0x1,0x21,0x21,0x21,0x3f,0x0,0x7f,0x0,0x0,0x0,0x3f,0x20,0x20,0x20,0x20,0x1f,0x0,0x8,0x8,0x8,0xf8,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x0,0x2,0x2,0xfe,
++0x8,0x8,0x10,0x1f,0x20,0x40,0x9f,0x0,0x1,0x6,0x8,0x10,0x10,0x10,0x10,0xf,0x0,0x0,0x8,0xfc,0x0,0x0,0xe0,0x40,0x80,0x0,0x0,0x0,0x0,0x2,0x2,0xfe,
++0x1,0x1,0x2,0x4,0x9,0x11,0x21,0xc9,0x9,0x9,0x9,0x9,0x9,0x9,0xff,0x0,0x0,0x0,0x80,0x40,0x20,0x10,0xe,0x24,0xf0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x1,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x10,0x1f,0x18,0x28,0x28,0x48,0x8f,0x8,0x0,0x84,0xfe,0x4,0x4,0x4,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0xa,0x7f,0x8,0x3e,0x8,0x7f,0x8,0x9,0x1,0xff,0x1,0x2,0x4,0x18,0x60,0x0,0x4,0x7e,0x24,0x24,0x24,0x44,0x54,0x88,0x0,0xfe,0x0,0x80,0x60,0x1c,0x8,
++0x1,0x9,0xfd,0x11,0x11,0x21,0x27,0x79,0xa9,0x29,0x29,0x29,0x29,0x38,0x20,0x1,0x0,0x4,0x7e,0x24,0x24,0xe4,0x24,0x24,0x24,0x24,0x64,0xa4,0x24,0x44,0x94,0x8,
++0x3e,0x22,0x22,0x22,0x3e,0x1,0x1,0xff,0x2,0xc,0x30,0xfe,0x22,0x22,0x22,0x3e,0xf8,0x88,0x88,0x88,0xf8,0x20,0x14,0xfe,0x80,0x60,0x18,0xfe,0x88,0x88,0x88,0xf8,
++0x10,0x10,0x1f,0x20,0x2f,0x40,0xbf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0xf0,0x0,0xe0,0x20,0x20,0x20,0x20,0x20,0x22,0x12,0xa,0x4,
++0x1,0x41,0x31,0x12,0x4,0x1,0xf0,0x10,0x11,0x12,0x12,0x12,0x11,0x10,0x28,0x47,0x0,0x8,0xfc,0x0,0x0,0xf8,0x10,0x60,0x80,0x0,0x4,0x4,0xfc,0x0,0x6,0xfc,
++0x2,0x1,0x7f,0x2,0x4,0x8,0x1f,0x4,0x4,0xff,0x4,0x4,0x4,0x8,0x30,0x0,0x0,0x8,0xfc,0x0,0x40,0x20,0xf0,0x50,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x2,0x42,0x33,0x14,0x87,0x68,0x27,0x0,0x10,0x20,0xe0,0x20,0x20,0x20,0x20,0x20,0x0,0x8,0xfc,0x0,0xf8,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0xa,0xa,0x6,
++0x0,0x40,0x30,0x17,0x0,0x82,0x42,0x4a,0x12,0x21,0xe1,0x21,0x21,0x20,0x2f,0x20,0x80,0x40,0x48,0xfc,0x0,0x8,0x8,0x8,0x10,0x10,0x10,0x20,0x20,0x44,0xfe,0x0,
++0x1,0x41,0x21,0x22,0x2,0x4,0xeb,0x20,0x20,0x20,0x20,0x21,0x2a,0x32,0x21,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0xf0,0x10,0x20,0x40,0x80,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x11,0x12,0xfc,0x10,0x17,0x1a,0x32,0xd2,0x13,0x12,0x12,0x12,0x53,0x22,0x80,0x80,0xfc,0x8,0x10,0xa4,0x1e,0x4,0x4,0x4,0xbc,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x10,0x59,0x56,0x54,0x9b,0x10,0x10,0x13,0x12,0x12,0x12,0x13,0x12,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,0xf8,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x30,0x10,0x81,0x62,0x2c,0x3,0x10,0x20,0xe3,0x22,0x22,0x22,0x23,0x22,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,0xf8,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x1,0x1,0x3f,0x2,0x4,0x8,0x7f,0x49,0x89,0x1f,0x21,0x1,0x7f,0x1,0x1,0x1,0x0,0x10,0xf8,0x80,0x60,0x20,0xfe,0x2,0x24,0xf0,0x0,0x8,0xfc,0x0,0x0,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x10,0x14,0x1f,0x30,0xd0,0x10,0x10,0x10,0x10,0x50,0x20,0x10,0x38,0xc0,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x11,0x1c,0x20,0x40,0xbc,0x13,0x10,0xfc,0x10,0x10,0x14,0x18,0x10,0x0,0x8,0x1c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x10,0x10,0x10,0x1c,0x20,0x40,0xbd,0x12,0x10,0xfd,0x11,0x11,0x15,0x19,0x11,0x1,0x8,0xfc,0x88,0x88,0x88,0x88,0x6,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x0,0x3f,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x20,0xf0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x40,0x33,0x10,0x0,0x0,0xf7,0x10,0x10,0x10,0x10,0x10,0x10,0x28,0x47,0x0,0x10,0x38,0xc0,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x6,0xfc,0x0,
++0x10,0x12,0x1f,0x28,0x45,0x2,0x4,0x8,0x30,0xcf,0x0,0x12,0x9,0x9,0x0,0x3f,0x40,0x48,0x7c,0xa0,0x10,0x80,0x40,0x30,0x4e,0xe4,0x0,0x10,0x10,0x20,0x40,0xf8,
++0x8,0x8,0xb,0x10,0x10,0x30,0x50,0x9f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0xc0,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x42,0x21,0x2f,0x1,0x7,0xe1,0x21,0x3f,0x21,0x21,0x27,0x29,0x33,0x25,0x9,0x1,0x10,0x20,0xfc,0x20,0xf8,0x28,0x28,0xfe,0x28,0x28,0xf8,0x20,0x30,0x2e,0x24,0x20,
++0x10,0x14,0xfe,0x10,0x10,0x7d,0x46,0x7c,0x44,0x7c,0x10,0x14,0xfe,0x10,0x10,0x10,0x40,0x40,0x44,0x7e,0x80,0x0,0xf8,0x10,0x20,0x40,0x40,0x80,0x82,0x82,0x7e,0x0,
++0x1,0x7f,0x49,0x6b,0x5d,0x49,0x7f,0x8,0x7f,0x8,0x7f,0x0,0x55,0x55,0x94,0x0,0x10,0x90,0x28,0x28,0x44,0x86,0x20,0x10,0x0,0x7c,0x4,0x4,0x8,0x8,0x90,0x0,
++0x10,0x10,0x10,0x3c,0x43,0x80,0x3c,0x10,0x13,0xfc,0x10,0x10,0x14,0x18,0x11,0x0,0x40,0x50,0x48,0x7c,0xc0,0x40,0x44,0x7e,0xc0,0x44,0x4c,0x30,0x20,0x52,0x8a,0x6,
++0x10,0x10,0x10,0x1c,0x23,0x40,0xbc,0x10,0x10,0xfc,0x10,0x10,0x14,0x18,0x10,0x0,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0xf8,0x88,
++0x10,0xc,0x4,0xff,0x0,0x3e,0x22,0x22,0x3e,0x22,0x22,0x3e,0x22,0x22,0x2a,0x24,0x10,0x30,0x44,0xfe,0x0,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0x8,0x8,0x28,0x10,
++0x42,0x22,0x2f,0x82,0x62,0x2f,0x2,0x15,0x28,0xe7,0x24,0x24,0x27,0x24,0x24,0x27,0x10,0x10,0xbc,0x10,0x10,0xfe,0x10,0x28,0xc6,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,
++0x0,0x43,0x32,0x13,0x0,0xf,0xf0,0x13,0x12,0x13,0x12,0x13,0x12,0x13,0x2a,0x47,0x48,0xfc,0x48,0xf8,0x40,0xfe,0x0,0xf8,0x8,0xf8,0x0,0xf8,0x8,0xf8,0x6,0xfc,
++0x40,0x30,0x10,0x0,0x87,0x60,0x20,0x8,0x17,0x20,0xe0,0x20,0x20,0x23,0x2c,0x20,0x80,0xa0,0x90,0xfc,0x80,0x80,0x88,0xfc,0x80,0x90,0xa0,0x40,0xc0,0x24,0x14,0xc,
++0x40,0x21,0x29,0x5,0x0,0xef,0x24,0x25,0x25,0x25,0x25,0x2d,0x35,0x25,0xa,0x11,0x20,0xfc,0x24,0xfc,0x20,0xfe,0x0,0xfc,0x4,0xfc,0x0,0xfc,0x4,0xfc,0x0,0xfe,
++0x10,0xfe,0x20,0x28,0x7e,0x8,0xf,0xf9,0x4a,0x9,0x1,0x3f,0x1,0x1,0xff,0x0,0xc,0xf0,0x80,0x84,0xfe,0x90,0x90,0x10,0x10,0x10,0x0,0xf8,0x0,0x4,0xfe,0x0,
++0x1,0x21,0x21,0x3f,0x22,0x22,0xff,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x3e,0x21,0x0,0x8,0x8,0xf8,0x28,0x20,0x7c,0x44,0xa8,0x20,0x20,0x20,0x50,0x48,0x8e,0x4,
++0x8,0x8,0x8,0x1f,0x10,0x21,0x41,0x81,0x2,0x2,0x4,0x4,0x8,0x10,0x20,0xc0,0x0,0x0,0x0,0xfc,0x4,0x8,0x10,0x0,0x80,0x80,0x40,0x40,0x20,0x10,0xe,0x4,
++0x22,0x14,0xff,0x14,0x7f,0x15,0x15,0xff,0x15,0x15,0x7f,0x14,0x36,0x55,0x94,0x15,0x20,0x20,0xa0,0x3e,0x42,0x94,0x10,0xd0,0x10,0x10,0x28,0x28,0x48,0x4c,0x86,0x4,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x35,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x10,0x10,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x10,0x10,0x10,0x50,0x20,0x4,0x4,0xfc,0x0,
++0x0,0x8,0x7c,0x48,0x49,0x4a,0x4d,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0x0,0x0,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x10,0x10,0x10,0x50,0x20,0x4,0x4,0xfc,0x0,
++0x8,0x7c,0x4b,0x4a,0x4c,0x79,0x4a,0x4c,0x48,0x7b,0x48,0x48,0x48,0x48,0x4f,0x98,0x80,0x40,0xfe,0x2,0x4,0x10,0x8,0x4,0x0,0xf8,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x8,0x4,0x7f,0x1,0x1,0x3f,0x1,0x1,0xff,0x2,0x2,0x2,0x4,0x8,0x10,0x60,0x20,0x48,0xfc,0x0,0x10,0xf8,0x0,0x4,0xfe,0x80,0x80,0x80,0x80,0x82,0x82,0x7e,
++0x20,0x20,0x27,0x20,0xfa,0x21,0x2f,0x20,0x23,0x22,0x3a,0xe2,0x42,0x2,0x3,0x2,0x40,0x48,0xfc,0x40,0x48,0x50,0xfe,0x8,0xfc,0x8,0xe8,0xa8,0xe8,0x8,0xf8,0x8,
++0x8,0x7f,0x9,0x1,0x7f,0x9,0x5,0xff,0x0,0x1f,0x10,0x17,0x14,0x17,0x10,0x1f,0x28,0xfc,0x20,0x8,0xfc,0x20,0x44,0xfe,0x10,0xf8,0x10,0xd0,0x50,0xd0,0x10,0xf0,
++0x8,0xfd,0x9,0x9,0x9,0x79,0x48,0x43,0x42,0x7a,0xb,0xa,0x8,0x88,0x53,0x20,0x4,0xfe,0x4,0x4,0xfc,0x24,0x20,0xfe,0x22,0x22,0xfe,0x22,0x20,0x24,0xfe,0x2,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x11,0x50,0x20,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x10,0x10,0x10,0x50,0x20,0x4,0x4,0xfc,0x0,
++0x13,0x10,0x11,0x10,0xff,0x10,0x30,0x38,0x57,0x51,0x97,0x11,0x1f,0x11,0x11,0x11,0xf8,0x40,0xf0,0x40,0xf8,0x42,0x7e,0x0,0xbc,0x10,0xbc,0x10,0xbe,0x10,0x52,0x8e,
++0x20,0x27,0x39,0x41,0x41,0xff,0x21,0x23,0xfb,0x25,0x29,0x21,0x29,0x31,0x21,0x1,0xd0,0x10,0x10,0x52,0x34,0xd8,0x10,0x10,0x90,0x50,0x28,0x28,0x44,0x44,0x82,0x0,
++0x10,0x9,0xff,0x0,0x3e,0x22,0x3e,0x0,0x7f,0x41,0x5d,0x55,0x5d,0x41,0x45,0x42,0x10,0x10,0x94,0x1e,0x10,0x10,0xfc,0x4,0x44,0x44,0x28,0x28,0x10,0x28,0x4e,0x84,
++0x10,0x12,0x11,0x11,0x58,0x57,0x52,0x92,0x13,0x12,0x12,0x13,0x12,0x12,0x12,0x12,0x40,0x44,0x48,0x50,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x10,0x13,0x10,0x10,0xfc,0x17,0x31,0x39,0x56,0x55,0x99,0x11,0x11,0x12,0x14,0x10,0x38,0xc0,0x40,0x40,0x84,0xfe,0x20,0x10,0xe,0x14,0x10,0x10,0x10,0x10,0x10,0x10,
++0x9,0x7d,0x49,0x4b,0x4d,0x79,0x49,0x49,0x49,0x79,0x49,0x49,0x49,0x7a,0x42,0x4,0x40,0x28,0xfc,0x20,0x20,0xf8,0x20,0x20,0xf8,0x20,0x28,0xfc,0x0,0xa8,0xa6,0x2,
++0x0,0x1f,0x2,0x2,0xff,0x4,0x4,0x8,0x34,0xc4,0x4,0x4,0x8,0x8,0x10,0x0,0xf0,0x0,0x0,0x4,0xfe,0x40,0x20,0x50,0x4e,0x44,0x40,0x40,0x40,0x40,0x40,0x40,
++0x8,0xb,0x8,0x10,0x10,0x3f,0x51,0x91,0x12,0x15,0x19,0x11,0x11,0x12,0x14,0x10,0x38,0xc0,0x40,0x40,0x84,0xfe,0x20,0x10,0xe,0x14,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0xb,0xfc,0x10,0x10,0x10,0x10,0x11,0x10,0x10,0x1e,0xf0,0x40,0x0,0x0,0x0,0x4,0xfe,0x40,0x40,0x40,0x80,0x84,0xfe,0x4,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x44,0x45,0xfe,0x44,0x7c,0x11,0x7d,0x55,0x55,0x55,0x7d,0x11,0xff,0x11,0x11,0x11,0x20,0x24,0xa4,0xa8,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x14,0x8,
++0x13,0x10,0x11,0x10,0xff,0x10,0x14,0x18,0x37,0xd1,0x17,0x11,0x1f,0x11,0x51,0x21,0xf8,0x40,0xf0,0x40,0xf8,0x42,0x7e,0x0,0xbc,0x10,0xbc,0x10,0xbe,0x10,0x52,0x8e,
++0x20,0x21,0xfe,0x28,0x11,0x2a,0xc6,0x0,0xfd,0x2a,0x28,0x29,0x28,0x28,0x47,0x80,0x4,0xde,0x44,0x44,0x54,0xcc,0x44,0xcc,0x54,0x64,0x44,0x54,0x88,0x2,0xfe,0x0,
++0x10,0x11,0x10,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x45,0x1,0x1,0x20,0x24,0xa8,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x4,0x14,0x8,
++0x8,0x9,0x8,0x10,0x11,0x31,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x20,0x24,0xa8,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x4,0x14,0x8,
++0x2,0x1,0x7f,0x44,0x88,0x10,0x3,0x7e,0x8,0x9,0x8,0x8,0xe,0x78,0x20,0x0,0x0,0x0,0xfe,0x42,0x34,0x10,0xfc,0x80,0x88,0xfc,0x8,0x8,0x8,0x88,0x50,0x20,
++0x10,0x10,0x11,0x10,0x14,0x1e,0xf0,0x10,0x10,0x12,0x14,0x18,0x10,0x1,0x2,0xc,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x4,0x28,0x10,
++0x4,0x4,0xff,0x4,0x14,0x12,0xff,0x12,0x12,0x12,0x12,0x12,0x22,0x22,0x4a,0x84,0x40,0x44,0xfe,0x40,0x40,0x4,0x7e,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x7c,0x44,
++0x0,0xf,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x8,0xff,0x0,0x20,0xf0,0x20,0x20,0x20,0xe0,0x20,0x20,0x20,0xe0,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x10,0x10,0x5b,0x54,0x50,0x90,0x17,0x10,0x10,0x10,0x11,0x12,0x17,0x10,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0x80,0x80,0x10,0x8,0xfc,0x4,
++0x2,0x1,0x7f,0x44,0x88,0x10,0x0,0x11,0x14,0xfe,0x10,0x10,0x14,0x18,0x11,0x2,0x0,0x0,0xfe,0x42,0x34,0x10,0x4,0xfe,0x44,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x10,0x10,0x10,0x1c,0x20,0x21,0x7e,0x90,0x10,0xfc,0x10,0x12,0x14,0x18,0x11,0x2,0x40,0x40,0x40,0x7c,0x84,0x8,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x8e,0x4,0x0,
++0x8,0xb,0x8,0x13,0x10,0x33,0x50,0x97,0x14,0x19,0x11,0x10,0x10,0x10,0x11,0x16,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x2,0xf4,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x2,0x1,0x7f,0x8,0x4,0x2,0xff,0x1,0x1,0x7f,0x1,0x9,0x19,0x21,0x45,0x2,0x0,0x8,0xfc,0x20,0x40,0x84,0xfe,0x0,0x8,0xfc,0x0,0x20,0x18,0xc,0x4,0x0,
++0x1,0x7f,0x1,0x3f,0x2,0xff,0x4,0x8,0x37,0xc1,0x1f,0x1,0x5,0x9,0x31,0x1,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x40,0xe0,0x1e,0x24,0xf0,0x0,0x60,0x18,0x8,0x0,
++0x4,0x7e,0x8,0x3e,0x8,0x7e,0x1,0x2,0xc,0x32,0xc1,0xf,0x0,0x0,0x0,0x1,0x8,0xfc,0x20,0xf8,0x20,0xfc,0x0,0x80,0x60,0x1e,0x4,0xe0,0x20,0x40,0x80,0x0,
++0x22,0xff,0x22,0x3e,0x8,0x7f,0x49,0x49,0x7f,0x8,0x7f,0x8,0x3e,0x8,0xff,0x1,0x20,0xa0,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x94,0x8,
++0x8,0x8,0xff,0x8,0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x20,0x20,0xfe,0x20,0x18,0xe0,0x0,0x4,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x11,0x12,0xfd,0x10,0x12,0x1a,0x33,0xd0,0x17,0x14,0x14,0x15,0x54,0x24,0x40,0xa0,0x10,0x48,0xf6,0xa4,0x48,0xa8,0xf8,0x44,0xfe,0x84,0xa4,0xf4,0x4,0xc,
++0x1,0x2,0x6,0x8,0x3f,0xc4,0x13,0x14,0x1f,0x1,0x3f,0x22,0x24,0x2f,0x20,0x20,0x0,0x80,0x40,0x30,0xfe,0x44,0x90,0x50,0xf0,0x8,0xfc,0x8,0x48,0xe8,0x8,0x18,
++0x1,0x7f,0x40,0x97,0x10,0x97,0x50,0x57,0x10,0x37,0x58,0x93,0x11,0x10,0x11,0x16,0x0,0xfe,0x2,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x4,0xf0,0x20,0xc0,0x20,0x1c,
++0x20,0x18,0x8,0x80,0x61,0x21,0x1,0x15,0x25,0x25,0xe9,0x29,0x21,0x21,0x20,0x20,0x0,0x80,0x40,0x60,0x20,0x20,0x0,0x8,0x4,0x6,0x2,0x8,0x8,0x8,0xf8,0x0,
++0x1,0x1,0x7f,0x1,0x3f,0x1,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x10,0x11,0x14,0xfe,0x20,0x28,0x4b,0x7c,0x8,0x9,0xe,0xf8,0x48,0x8,0xb,0x8,0x0,0xfc,0x8,0x10,0x38,0xcc,0x2,0x0,0x8,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x1f,0x10,0x2f,0x40,0xbf,0x0,0x3f,0x2,0xd,0x70,0x1f,0x2,0x2,0x7f,0x0,0x8,0xfc,0x0,0xf8,0x10,0xf8,0x10,0x90,0x10,0x90,0x70,0xd0,0x10,0x52,0xea,0x6,
++0x10,0x13,0x10,0x28,0x29,0x69,0xaf,0x29,0x29,0x29,0x2b,0x2d,0x28,0x20,0x20,0x23,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x4c,0x86,0x2,
++0x8,0x77,0x44,0x54,0x54,0x57,0x54,0x54,0x54,0x57,0x74,0x55,0x14,0x25,0x46,0x80,0x4,0xbe,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0x24,0x34,0xa8,0xa0,0x20,0x20,
++0x0,0x40,0x37,0x10,0x83,0x60,0x2f,0x8,0x13,0x22,0xe3,0x22,0x23,0x22,0x22,0x22,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x28,0x10,
++0x24,0xff,0x24,0x3f,0x41,0xbd,0x25,0x3d,0x2,0x3f,0x1,0x1f,0x1,0xff,0x1,0x3,0x20,0x24,0x3e,0x44,0xa8,0x10,0x2e,0x44,0x70,0x80,0x0,0xf0,0x4,0xfe,0x0,0x0,
++0x0,0x8,0x7f,0x48,0x4b,0x48,0x4f,0x78,0x4b,0x4a,0x4b,0x4a,0x7b,0x4a,0x2,0x2,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x28,0x10,
++0x10,0x1f,0x10,0x2f,0x40,0xbf,0x4,0x3f,0x4,0x3f,0x4,0x7f,0x0,0x9,0x6,0x2,0x8,0xfc,0x0,0xf8,0x10,0xf8,0x10,0x90,0x10,0x90,0x10,0xd0,0x90,0x12,0xa,0x6,
++0x10,0x17,0x10,0x13,0x58,0x57,0x50,0x93,0x12,0x13,0x12,0x13,0x12,0x12,0x12,0x12,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x4f,0x40,0x40,0x53,0x7a,0x42,0x42,0x42,0x4a,0x52,0x62,0x40,0x1,0x2,0xc,0x4,0xfe,0x40,0x88,0xfc,0x8,0x48,0x48,0x48,0x48,0x48,0x88,0xa0,0x18,0xc,0x4,
++0x0,0x47,0x20,0x23,0x0,0xef,0x20,0x23,0x22,0x23,0x22,0x23,0x2a,0x32,0x22,0x2,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x1,0x0,0x3f,0x20,0x20,0x20,0x3f,0x20,0x20,0x21,0x21,0x22,0x22,0x44,0x88,0x30,0x0,0x88,0xfc,0x80,0x80,0x88,0xfc,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0xe,0x4,
++0x0,0x10,0xf8,0x27,0x20,0x23,0xfa,0x22,0x22,0x23,0x20,0x39,0xe3,0x44,0x1,0x0,0x80,0x40,0x4,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x2,0x1,0x7f,0x40,0x84,0xc,0x12,0x2,0x3f,0x2,0x2,0x4,0x4,0x8,0x10,0x20,0x0,0x0,0xfe,0x2,0x44,0x30,0x10,0x8,0xfc,0x8,0x8,0x8,0x8,0x88,0x50,0x20,
++0x8,0x1c,0xf0,0x10,0x11,0xfd,0x11,0x32,0x38,0x54,0x50,0x91,0x11,0x12,0x14,0x18,0x40,0x40,0x40,0x40,0x44,0x4c,0x50,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,0x0,
++0x0,0x0,0x1,0xe,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x8,0x8,0x8,0xff,0x0,0x20,0x70,0x80,0x0,0x0,0x0,0x10,0xf8,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x2,0x6,0x38,0x20,0x20,0x21,0x3f,0x22,0x22,0x22,0x22,0x22,0x3f,0xe0,0x40,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0xd0,0x48,0x44,0x42,0x42,0x62,0xd4,0x48,0x40,0x40,
++0x0,0x8,0xfc,0x13,0x10,0x12,0x7d,0x11,0x10,0x10,0x11,0x1e,0xe4,0x0,0x1,0x0,0x40,0x50,0x48,0xfe,0x40,0x44,0x4c,0x50,0x60,0xd0,0x50,0x4e,0x44,0x40,0x40,0x80,
++0x1,0x1,0x1,0x7f,0x1,0x21,0x19,0x9,0x3,0x5,0x9,0x11,0x61,0x1,0x5,0x2,0x0,0x40,0x28,0xfc,0x0,0x8,0x18,0xa0,0x40,0x40,0x30,0xe,0x4,0x0,0x0,0x0,
++0x0,0x7f,0x40,0x41,0x41,0x41,0x41,0x42,0x42,0x44,0x44,0x48,0x50,0x40,0x7f,0x40,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x84,0x84,0x44,0x24,0x3c,0x14,0x4,0xfc,0x4,
++0x10,0xc,0x4,0xff,0x4,0x4,0x3f,0x24,0x24,0x38,0x20,0x2f,0x20,0x20,0x3f,0x20,0x10,0x30,0x44,0xfe,0x40,0x48,0xfc,0x48,0x48,0x38,0x8,0xe8,0x8,0x8,0xf8,0x8,
++0x40,0x37,0x14,0x4,0x84,0x44,0x54,0x14,0x14,0x24,0xe4,0x25,0x26,0x24,0x27,0x24,0x4,0xfe,0x4,0x44,0x44,0x44,0x44,0xa4,0xa4,0xa4,0x94,0x1c,0x4,0x4,0xfc,0x4,
++0x8,0x8,0x8,0x7e,0x9,0x8,0xff,0x8,0x28,0x2e,0x28,0x28,0x29,0x58,0x88,0x7,0x40,0x40,0x78,0x88,0x10,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x0,0x6,0xfc,
++0x0,0x3f,0x20,0x28,0x24,0x22,0x21,0x20,0x21,0x22,0x24,0x28,0x20,0x20,0x3f,0x0,0x8,0xfc,0x0,0x8,0x18,0x20,0x40,0x80,0x40,0x30,0x18,0x8,0x0,0x4,0xfe,0x0,
++0x10,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xf5,0x47,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xfe,0x0,
++0x4,0x4,0x4,0x4,0x7f,0x44,0x44,0x44,0x44,0x7f,0x44,0x44,0x44,0x44,0x7f,0x40,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0x44,0xfc,0x4,
++0x8,0x11,0x7d,0x45,0x7d,0x45,0x7d,0x45,0x45,0xfd,0x15,0x25,0x45,0x85,0x15,0x8,0x4,0xfe,0x0,0x44,0x44,0x28,0x28,0x10,0x10,0x28,0x28,0x44,0x84,0x0,0xfe,0x0,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x28,0x28,0x28,0x2f,0x20,0x30,0x50,0x50,0x9f,0x10,0x4,0xfe,0x4,0x4,0xfc,0x80,0x88,0x88,0x88,0xf8,0x80,0x84,0x84,0x84,0xfc,0x4,
++0x8,0xfd,0x9,0x49,0x49,0x49,0x49,0x49,0x7d,0x5,0x5,0x1d,0xe5,0x45,0x15,0x8,0x4,0xfe,0x0,0x44,0x44,0x28,0x28,0x10,0x10,0x28,0x28,0x44,0x84,0x0,0xfe,0x0,
++0x23,0x12,0x43,0x22,0xa,0x13,0x62,0x23,0x20,0x0,0xff,0x5,0x9,0x11,0x61,0x1,0xfc,0x0,0xf8,0x8,0x8,0xf8,0x0,0xfc,0x0,0x4,0xfe,0x40,0x20,0x1c,0x8,0x0,
++0x1,0xff,0x22,0x23,0x3e,0x22,0x22,0x3e,0x22,0x22,0x22,0x3e,0xe2,0x42,0x3,0x2,0x0,0x80,0x0,0xfc,0x4,0x84,0x88,0x88,0x48,0x50,0x20,0x50,0x48,0x8e,0x4,0x0,
++0x0,0x7f,0x22,0x3e,0x22,0x3e,0x22,0xff,0x2,0x1,0xff,0x4,0xc,0x2,0x1,0xe,0x0,0x0,0xfc,0x44,0x48,0x28,0x10,0x2e,0x44,0x0,0xfe,0x20,0x20,0x40,0x80,0x70,
++0x10,0x13,0x10,0x5d,0x51,0x51,0xfd,0x0,0x55,0x55,0x55,0x6d,0x45,0x7d,0x45,0x1,0xc,0xf0,0x24,0xfe,0x24,0x24,0xfc,0x20,0xfc,0x24,0x24,0x54,0x74,0x4,0x14,0x8,
++0x10,0x17,0x12,0x7e,0x13,0x12,0xfe,0x13,0x52,0x5e,0x52,0x57,0x70,0x50,0x8f,0x0,0x40,0xe0,0x40,0x7c,0xc4,0x54,0x54,0xd4,0x48,0x54,0x52,0xe2,0x40,0x46,0xfc,0x0,
++0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0xff,0x2,0x2,0x4,0x8,0x10,0x3f,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x40,0x20,0x10,0xf8,0x8,
++0x0,0x7f,0x49,0x45,0x5f,0x42,0x7f,0x44,0x4f,0x74,0x45,0x44,0x43,0x40,0x7f,0x40,0x4,0xfe,0x24,0x44,0xf4,0x4,0xfc,0x44,0xe4,0x5c,0x84,0x24,0xe4,0x4,0xfc,0x4,
++0x22,0x22,0xff,0x22,0x77,0x55,0x77,0x24,0x3f,0x64,0xbf,0x24,0x3f,0x24,0x3f,0x20,0x4,0xfe,0x90,0x24,0x7e,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x10,0x28,0x46,0x82,
++0x10,0x10,0x13,0x10,0xfe,0x12,0x31,0x39,0x55,0x50,0x90,0x10,0x11,0x12,0x14,0x10,0x0,0x0,0xf8,0x8,0x8,0x8,0x8,0x10,0x10,0xa0,0x40,0xa0,0x10,0xe,0x4,0x0,
++0x4,0xfe,0x2b,0x28,0xfe,0xaa,0xaa,0xab,0xc6,0x82,0xfe,0x82,0x82,0xfe,0x83,0x0,0x88,0x88,0xfe,0x88,0x20,0x50,0x8e,0x4,0xf8,0x20,0x20,0xf8,0x20,0x24,0xfe,0x0,
++0x2,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x1,0x7d,0x5,0x9,0x11,0x21,0xc5,0x2,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x4,0x8c,0x50,0x20,0x10,0xe,0x4,0x0,
++0x1,0x1,0x2,0x4,0x8,0x10,0x2f,0xc1,0x1,0x1,0xf,0x1,0x1,0x1,0x7f,0x0,0x0,0x0,0x80,0x40,0x20,0x50,0xee,0x4,0x0,0x40,0xe0,0x0,0x0,0x8,0xfc,0x0,
++0x0,0x0,0x1f,0x10,0x90,0x51,0x52,0x1d,0x30,0x50,0xd3,0x10,0x20,0x20,0x4f,0x0,0x80,0x44,0xfe,0x40,0xa0,0x10,0xe,0xf4,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x0,
++0x1,0x9,0x5,0x7f,0x2,0xff,0x4,0x9,0x1f,0x21,0xcf,0x1,0x3f,0x1,0x5,0x2,0x0,0x20,0x48,0xfc,0x0,0xfe,0x40,0xe0,0x10,0xe,0xe4,0x0,0xf8,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x2,0x2,0x4,0x4,0x8,0x10,0x60,0x0,0x0,0x40,0x30,0x10,0x4,0xfe,0x0,0x0,0x80,0x80,0x40,0x20,0x10,0xe,0x4,0x0,
++0x1,0x9,0x5,0x7f,0x2,0xff,0x4,0x8,0x1f,0x22,0xc2,0x4,0x4,0x8,0x10,0x20,0x0,0x20,0x48,0xfc,0x0,0xfe,0x40,0x20,0xf0,0x2e,0x24,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x0,0x7e,0x2,0x23,0x22,0x14,0x14,0x8,0x14,0x14,0x22,0x42,0x81,0x2,0x4,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x4,0x28,0x10,
++0x20,0x20,0x24,0x3e,0x51,0x90,0x14,0xfe,0x13,0x54,0x54,0x54,0x54,0x7d,0x46,0x4,0x40,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0xfe,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x10,0x10,0x12,0x56,0x59,0x50,0x90,0x10,0x17,0x28,0x28,0x24,0x44,0x41,0x82,0x4,0x40,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0xfe,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x0,0x1f,0x12,0x9f,0x52,0x52,0x12,0x15,0x38,0x57,0xd4,0x15,0x24,0x24,0x45,0x4,0x84,0xfe,0x0,0xbc,0xa4,0xa4,0xa4,0xbc,0x44,0xfe,0x44,0xb4,0x44,0xa4,0x14,0x8,
++0x8,0x8,0xa,0x7f,0x8,0x8,0x9,0xff,0x8,0x10,0x10,0x24,0x22,0x7f,0x1,0x0,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0xc4,0x44,0x44,0x64,0x54,0x48,0x40,0x40,0x40,
++0x24,0x24,0x24,0x7e,0x24,0x24,0xff,0x0,0x7e,0x42,0x42,0x7e,0x43,0x42,0x7e,0x42,0x20,0x48,0xfc,0x88,0xa8,0x88,0xa8,0x90,0x84,0xfe,0x4,0x14,0xfc,0x4,0x14,0x8,
++0x10,0x10,0x13,0x12,0xfc,0x11,0x31,0x3b,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x40,0x40,0xfe,0xa2,0xa4,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,
++0x0,0x4,0xfe,0x10,0x11,0x23,0x25,0x7d,0xa5,0x25,0x25,0x25,0x25,0x3d,0x22,0x4,0x40,0x40,0x78,0x90,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x24,0x24,0xc,
++0x1,0x9,0xd,0x11,0x21,0x3,0xc,0x30,0xdf,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x0,0x20,0x18,0x4c,0x84,0x0,0x0,0x88,0xfc,0x80,0xf8,0x80,0xf8,0x80,0xfe,0x0,
++0x20,0x11,0x10,0x0,0xfb,0x8,0x10,0x35,0x58,0x95,0x11,0x12,0x14,0x10,0x10,0x10,0x4,0xfe,0x84,0x84,0xfe,0x84,0x84,0xfc,0x80,0x4,0xfe,0x84,0x84,0x84,0xfc,0x84,
++0x2,0x7f,0x22,0x22,0xff,0x22,0x22,0x7e,0x20,0x42,0xbf,0x22,0x22,0x22,0x3e,0x22,0x82,0x44,0x28,0xfe,0x10,0x10,0x14,0xfe,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,
++0x10,0x10,0x10,0x1e,0x22,0x33,0x4a,0xa4,0x14,0x8,0x11,0x22,0x40,0x24,0x24,0x40,0x20,0x20,0x28,0x24,0x20,0xfe,0x20,0x50,0x50,0x88,0xe,0x4,0x0,0x48,0x46,0x2,
++0x11,0x11,0x11,0x15,0x5a,0x53,0x54,0x9a,0x11,0x12,0x20,0x28,0x44,0x42,0x82,0x4,0x10,0x18,0xd4,0x50,0x7e,0x50,0x90,0x90,0x28,0x28,0x46,0x84,0x0,0xa8,0xa4,0x4,
++0x1,0x1,0x1,0x3f,0x21,0x21,0x3f,0x21,0x21,0xff,0x20,0x20,0x20,0x20,0x20,0x20,0x0,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xfe,0x8,0x8,0x8,0x8,0x28,0x10,
++0x20,0x10,0x43,0x20,0x8,0x51,0x22,0x25,0x1,0xff,0x3,0x5,0x9,0x11,0x61,0x1,0x80,0x90,0xf8,0x90,0x90,0x12,0x12,0xe,0x0,0xfe,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x10,0xfe,0x0,0xee,0xaa,0xee,0x28,0xfe,0x28,0x7c,0x28,0xfe,0x24,0x68,0xa5,0x32,0x8,0x1c,0xe0,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa4,0xaa,0x38,0x0,
++0x20,0x27,0x20,0x23,0xfa,0x23,0x21,0x27,0x21,0x23,0x39,0xef,0x41,0x3,0xd,0x1,0x44,0xfe,0x0,0xb8,0xa8,0xb8,0x10,0xfc,0x10,0xf8,0x10,0xfe,0x48,0x30,0xe,0x84,
++0x10,0x17,0x10,0x13,0xfe,0x13,0x11,0x1f,0x31,0xd3,0x11,0x1f,0x11,0x13,0x55,0x21,0x44,0xfe,0x0,0xb8,0xa8,0xb8,0x10,0xfc,0x10,0xf8,0x10,0xfe,0x48,0x30,0xe,0x84,
++0x0,0xf,0x70,0x53,0x52,0x53,0x51,0x57,0x51,0x53,0x51,0x5f,0x71,0x43,0xd,0x1,0x44,0xfe,0x0,0xb8,0xa8,0xb8,0x10,0xfc,0x10,0xf8,0x10,0xfe,0x48,0x30,0xe,0x84,
++0x0,0x40,0x30,0x10,0x0,0x0,0xf0,0x10,0x10,0x10,0x10,0x12,0x14,0x18,0x17,0x0,0x40,0x40,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x20,0x20,0x20,0x38,0x4f,0x50,0x80,0x20,0x27,0x20,0x27,0x21,0x29,0x31,0x22,0xc,0x80,0x80,0x88,0xfc,0x80,0x50,0x22,0xd2,0xe,0x8,0xfc,0x20,0x20,0x22,0x22,0x1e,
++0x10,0x10,0x10,0x10,0xfc,0x13,0x14,0x18,0x30,0xd0,0x10,0x10,0x11,0x11,0x52,0x24,0x40,0x50,0x48,0x40,0x44,0xfe,0x40,0x60,0xa0,0xa0,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x20,0x20,0x47,0xf8,0x10,0x20,0x47,0xf8,0x7,0x1,0x19,0xe1,0x42,0xc,0x80,0x80,0x88,0xfc,0x80,0x50,0x22,0xd2,0xe,0x8,0xfc,0x20,0x20,0x22,0x22,0x1e,
++0x8,0x8,0x7f,0xa,0x2,0xff,0x4,0xf,0x18,0x28,0xcf,0x2,0x29,0x28,0x48,0x7,0x20,0x28,0xfc,0x20,0x4,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x0,0x88,0x84,0x14,0xf0,
++0x8,0x8,0x8,0x7f,0x8,0xa,0x1c,0x68,0x8,0x8,0x29,0x12,0x0,0x48,0x44,0x84,0x40,0x40,0x48,0xfc,0x48,0x48,0xc8,0x48,0xa8,0x8a,0xa,0x4,0x0,0x88,0x46,0x42,
++0x0,0x0,0x3f,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x3f,0x0,0x10,0x78,0x80,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,
++0x8,0x8,0x8,0x17,0x10,0x30,0x50,0x90,0x10,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x4,0x4,0x8,0x10,0x20,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x40,0x40,0x20,0x10,0xe,0x4,
++0x0,0x7f,0x2,0x12,0x12,0x22,0x4,0x18,0x60,0x0,0x4,0x13,0x51,0x50,0x8f,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x50,0x20,0x0,0x0,0x0,0x14,0x12,0xf2,0x0,
++0x10,0x10,0x15,0xfe,0x10,0x10,0x7c,0x10,0x11,0xfe,0x12,0x12,0x1a,0x14,0x10,0x13,0x0,0x4,0xfe,0x24,0x24,0xa4,0xa4,0xa4,0x24,0x24,0x24,0x44,0x44,0x84,0x94,0x8,
++0x8,0x8,0xb,0x10,0x10,0x30,0x50,0x9f,0x10,0x10,0x10,0x10,0x10,0x17,0x10,0x10,0x0,0x18,0xe0,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x48,0xfc,0x0,0x0,
++0x0,0x40,0x30,0x10,0x0,0x0,0xf0,0x10,0x10,0x11,0x11,0x15,0x1a,0x12,0x4,0x8,0x40,0x40,0x40,0x40,0x40,0x40,0xa0,0xa0,0xa0,0x10,0x10,0x10,0x8,0x8,0x6,0x4,
++0x0,0x7f,0x1,0x1,0x1,0x9,0x9,0x11,0x21,0x1,0x2,0x2,0x4,0x8,0x10,0x60,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x10,0x10,0x11,0x10,0xfc,0x24,0x24,0x27,0x24,0x44,0x28,0x10,0x28,0x44,0x85,0x0,0x8,0x3c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x28,0xfc,0x0,
++0x10,0x10,0x23,0x20,0x44,0xf9,0x11,0x22,0x40,0xfc,0x0,0x0,0x1c,0xe1,0x42,0x4,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x84,0x4,0x28,0x10,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x14,0x18,0x30,0xd0,0x11,0x11,0x11,0x12,0x54,0x28,0x0,0x8,0xfc,0x88,0x88,0x90,0x94,0xbe,0x84,0x84,0x4,0x4,0x4,0x44,0x28,0x10,
++0x10,0x10,0x1f,0x21,0x21,0x61,0xa1,0x21,0x21,0x21,0x22,0x22,0x22,0x24,0x28,0x30,0x0,0x8,0xfc,0x8,0x8,0x8,0x10,0x14,0x3e,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x0,0x1f,0x10,0x10,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0x10,0xf0,0x10,0x0,
++0x0,0x0,0x0,0xff,0x0,0x8,0x8,0x8,0x7e,0x8,0x8,0x10,0x11,0x22,0x4c,0x0,0x80,0xa0,0x94,0xfe,0x80,0x80,0x88,0x88,0x90,0x60,0x40,0xc0,0x20,0x12,0xa,0x6,
++0x4,0x4,0xff,0x4,0x0,0x7f,0x8,0xf,0x8,0xf,0x8,0x8,0x7f,0x0,0x0,0x0,0x40,0x44,0xfe,0x40,0x8,0xfc,0x20,0xe0,0x20,0xe0,0x28,0x3c,0xe0,0x20,0x20,0x20,
++0x8,0x8,0xff,0x8,0x1,0x7f,0x40,0x89,0x12,0x4,0x1f,0x28,0xc8,0x8,0xf,0x8,0x20,0x24,0xfe,0x20,0x0,0xfe,0x2,0x24,0x90,0x40,0xf0,0x2e,0x24,0x20,0xe0,0x20,
++0x4,0x4,0xff,0x4,0x0,0x7f,0x41,0x81,0x1,0x7f,0x3,0x5,0x9,0x11,0x61,0x1,0x40,0x44,0xfe,0x40,0x0,0xfe,0x2,0x4,0x0,0xfc,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x2,0x7f,0x0,0x3e,0x22,0x22,0x3e,0x0,0x7f,0x63,0x55,0x7f,0x49,0x49,0x49,0x43,0x10,0x10,0x10,0x14,0x7e,0x54,0x54,0x54,0x54,0x7c,0x54,0x10,0x10,0x14,0xfe,0x2,
++0x10,0x10,0x17,0x14,0x59,0x52,0x54,0x91,0x12,0x14,0x1b,0x12,0x2a,0x26,0x43,0x82,0x80,0x40,0xfe,0x2,0x14,0x48,0xa4,0x10,0xe,0x4,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x40,0x30,0x17,0x4,0x89,0x62,0x24,0x1,0x12,0x24,0xeb,0x22,0x22,0x22,0x23,0x22,0x80,0x40,0xfe,0x2,0x14,0x48,0xa4,0x10,0xe,0x4,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x2,0x1,0x7f,0x40,0x84,0x9,0x12,0x4,0x8,0x10,0x2f,0xc8,0x8,0x8,0xf,0x8,0x0,0x0,0xfe,0x2,0x44,0x30,0x90,0x40,0x20,0x10,0xee,0x24,0x20,0x20,0xe0,0x20,
++0x10,0x10,0x20,0x27,0x44,0xf9,0x11,0x21,0x47,0xf9,0x1,0x1,0x1a,0xe2,0x45,0x0,0x20,0x30,0x28,0xfe,0x20,0x24,0x24,0x28,0xe8,0x28,0x30,0x20,0x50,0x92,0xa,0x6,
++0x0,0x0,0x7f,0x40,0x80,0xf,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x0,0x0,0xfe,0x2,0x44,0xe0,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0x44,0x3c,0x0,
++0x10,0x13,0x10,0x10,0xfb,0x10,0x11,0x1a,0x30,0xd7,0x10,0x11,0x11,0x12,0x54,0x20,0x0,0xf8,0x90,0x60,0xfc,0xa8,0x20,0x60,0x44,0xfe,0xe0,0x50,0x48,0x4e,0x44,0x40,
++0x0,0x1f,0x2,0x1,0x7f,0x2,0x4,0x19,0x1,0xff,0x3,0x5,0x9,0x11,0x61,0x1,0x0,0xe0,0x40,0x80,0xfc,0x88,0x90,0x80,0x4,0xfe,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x1,0x1,0x1,0x7f,0x41,0x41,0x42,0x44,0x49,0x41,0x42,0x44,0x48,0x40,0x40,0x40,0x0,0x0,0x4,0xfe,0x4,0x4,0x84,0x64,0x24,0x4,0x84,0x64,0x24,0x4,0x14,0x8,
++0x4,0x4,0xff,0x4,0x14,0x10,0xfe,0x22,0x22,0x22,0x42,0x24,0x14,0x8,0x14,0x62,0x40,0x44,0xfe,0x40,0x40,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,0x0,
++0x20,0x23,0x20,0x27,0xfd,0xac,0xa9,0xa8,0xaf,0xf8,0xa3,0x22,0x2a,0xfa,0x4a,0x2,0x10,0xf8,0x40,0xfe,0x52,0xe4,0x50,0x40,0xfc,0x88,0xfc,0xa8,0xa8,0xa8,0xa8,0x18,
++0x10,0x13,0x10,0x27,0x25,0x68,0xa1,0x20,0x2f,0x20,0x27,0x24,0x24,0x24,0x24,0x24,0x10,0xf8,0x40,0xfe,0x52,0xe4,0x50,0x44,0xfe,0x84,0xfe,0xa4,0xa4,0xa4,0xa4,0xc,
++0x0,0xfb,0x8,0x17,0x25,0x28,0x21,0x28,0x37,0xe0,0x27,0x24,0x24,0x24,0xa4,0x44,0x10,0xf8,0x40,0xfe,0x52,0xe4,0x50,0x44,0xfe,0x84,0xfe,0xa4,0xa4,0xa4,0xa4,0xc,
++0x10,0x10,0x10,0x10,0xfe,0x22,0x22,0x22,0x22,0x42,0x24,0x14,0x8,0x14,0x22,0x40,0x0,0x0,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,0x0,
++0x0,0x3f,0x20,0x2f,0x20,0x3f,0x29,0x28,0x4a,0x8c,0x0,0xff,0x4,0x2,0x0,0x0,0x10,0xf8,0x0,0xf0,0x0,0xfc,0x10,0xa0,0x60,0x1c,0x20,0xfe,0x20,0x20,0xa0,0x40,
++0x2,0xf,0x70,0x29,0x2a,0x7f,0x2,0xc,0x8,0xb,0xc,0x38,0xc8,0x8,0x28,0x10,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x42,0x3e,0x0,
++0x20,0x18,0x8,0x80,0x60,0x2f,0x1,0x9,0x12,0x24,0xe2,0x21,0x20,0x21,0x22,0x2c,0x80,0x80,0x80,0x80,0x84,0xfe,0x8,0x8,0x8,0x10,0x10,0x20,0xc0,0x20,0x18,0x8,
++0x4,0x2,0x1,0x1,0x1,0x2,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0xe,0x4,
++0x20,0x13,0x12,0x3,0xfe,0xb,0x12,0x36,0x5a,0x94,0x10,0x17,0x11,0x10,0x10,0x10,0x8,0xfc,0x0,0xfc,0x0,0xfe,0xc4,0xa8,0x90,0xce,0x8,0xfe,0x8,0x88,0x28,0x10,
++0x10,0x10,0x14,0xfe,0x20,0x29,0x48,0x7e,0x8,0x8,0xe,0xf8,0x48,0x8,0x9,0xa,0x40,0x40,0x40,0x7c,0x84,0x8,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x88,0x6,0x4,
++0x0,0x7d,0x44,0x48,0x48,0x53,0x48,0x48,0x44,0x44,0x44,0x68,0x51,0x41,0x42,0x44,0x8,0xfc,0x0,0x0,0x4,0xfe,0x90,0x90,0x90,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x8,0x8,0xff,0x8,0x2,0x29,0x29,0x48,0x7,0x10,0x8,0x20,0x66,0xa5,0x3c,0x0,0x20,0x24,0xfe,0x20,0x0,0x8,0x24,0x24,0xe0,0x20,0x10,0x40,0xcc,0x4a,0x78,0x0,
++0x0,0x14,0xfc,0x24,0x24,0x27,0x20,0xff,0x20,0x27,0x24,0x24,0x3c,0xe4,0x44,0x4,0x40,0x44,0x44,0x44,0x44,0xfc,0x0,0xfe,0x84,0xfe,0xa4,0xa4,0xa4,0xa4,0xa4,0xc,
++0x11,0x10,0x10,0x1c,0x21,0x21,0x7d,0x91,0x11,0x7c,0x10,0x10,0x15,0x19,0x12,0x4,0x4,0x88,0x50,0x4,0xfe,0x4,0x4,0x4,0xfc,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x20,0x1b,0x8,0x40,0x5f,0x41,0x41,0x41,0x4f,0x41,0x41,0x41,0x5f,0x40,0x40,0x40,0x4,0xfe,0x4,0x24,0xf4,0x4,0x4,0x44,0xe4,0x4,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x4,0x43,0x31,0x14,0x85,0x44,0x44,0x14,0x15,0x24,0xe4,0x24,0x25,0x24,0x24,0x24,0x4,0x7e,0x4,0x24,0xf4,0x44,0x44,0x44,0xf4,0x44,0x44,0x44,0xf4,0x4,0x14,0x8,
++0x8,0x8,0x7f,0x8,0xa,0x2,0xff,0x4,0x8,0x1f,0x28,0x48,0x88,0x8,0xf,0x8,0x20,0x28,0xfc,0x20,0x20,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x0,0x7e,0x2,0x2,0x7e,0x40,0x40,0x7e,0x22,0x12,0x6,0x1a,0x62,0x22,0x2,0x4,0x4,0xfe,0x4,0x4,0xfc,0x80,0x84,0xfe,0x44,0x24,0xc,0x34,0xc4,0x44,0x14,0x8,
++0x22,0x22,0x27,0x22,0xfa,0x2f,0x20,0x2f,0x34,0xe7,0x24,0x27,0x24,0x24,0xa5,0x44,0x90,0x90,0xd4,0x9e,0xa4,0xf4,0x14,0xd4,0x54,0xd4,0x48,0xc8,0x54,0x54,0x62,0x80,
++0x0,0x40,0x3f,0x10,0x0,0x87,0x44,0x4c,0x14,0x24,0xe5,0x26,0x24,0x24,0x27,0x24,0x0,0x4,0xfe,0xa0,0xa4,0xfe,0xa4,0xa4,0xa4,0xa4,0x1c,0x4,0x4,0x4,0xfc,0x4,
++0x4,0x4,0xff,0x4,0x7c,0x45,0x48,0x50,0x49,0x45,0x45,0x65,0x59,0x41,0x42,0x44,0x40,0x44,0xfe,0x40,0x20,0xfc,0x88,0x50,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x7d,0x49,0x49,0x49,0x79,0x49,0x49,0x49,0x78,0x48,0x4a,0x4a,0x4c,0x48,0x98,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,0x0,0x40,0xa4,0xa2,0x8a,0x88,0x78,
++0x20,0x21,0x7d,0x89,0x11,0x7d,0x55,0x55,0x7d,0x54,0x54,0x7e,0x2,0x1c,0xe0,0x40,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,0x0,0x40,0xa4,0xa2,0x8a,0x88,0x78,
++0x2,0x1,0x7f,0x44,0x9f,0x4,0x1f,0x4,0x7f,0x5,0x19,0x67,0x81,0x1,0x7f,0x0,0x0,0x0,0xfe,0x42,0xf4,0x40,0xf0,0x40,0xfc,0x40,0x30,0xce,0x4,0x10,0xf8,0x0,
++0x1,0x7f,0x44,0x9f,0x4,0x1f,0x4,0x7f,0x8,0x1f,0x28,0xc9,0x9,0x1,0x6,0x18,0x0,0xfe,0x42,0xf4,0x40,0xf0,0x40,0xfc,0x20,0xf0,0x2e,0x24,0x20,0x0,0xc0,0x30,
++0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,
++0x2,0x4,0x8,0x3f,0x2,0x2,0xff,0x4,0xf,0x10,0x20,0xcf,0x0,0x0,0x3f,0x0,0x0,0x40,0x20,0xf0,0x10,0x4,0xfe,0x40,0xe0,0x10,0x4e,0xe4,0x0,0x10,0xf8,0x0,
++0x1,0x1,0x2,0x4,0x9,0x11,0x21,0xd1,0xd,0x5,0xff,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x80,0x40,0x20,0x10,0xe,0x14,0x30,0x44,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x24,0x24,0x7e,0x24,0x24,0xff,0x2,0x7f,0x42,0x7e,0x42,0x7e,0x42,0x42,0x4a,0x45,0x40,0x40,0x40,0x84,0xfe,0x8,0x88,0x88,0x88,0x50,0x50,0x20,0x50,0x48,0x8e,0x4,
++0x1f,0x8,0x4,0x3,0x4,0x8,0x7f,0x24,0x18,0x66,0x1,0xff,0x5,0x19,0x61,0x1,0xf0,0x20,0x40,0x80,0x40,0x20,0xfc,0x48,0x30,0xcc,0x0,0xfe,0x40,0x30,0xc,0x0,
++0x3,0x11,0xf8,0x91,0x92,0x97,0x94,0x93,0x94,0x90,0x9f,0x90,0xf1,0x92,0xc,0x0,0xf8,0x10,0xe0,0x10,0x8,0xbc,0xa4,0x18,0xa4,0x40,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x1,0x1,0x3f,0x1,0x11,0xd,0x5,0xff,0x10,0x12,0x11,0x10,0x10,0x14,0x18,0x10,0x0,0x10,0xf8,0x0,0x10,0x30,0x44,0xfe,0x10,0x20,0x40,0x80,0x40,0x30,0xe,0x4,
++0x10,0x17,0x10,0x11,0xfc,0x11,0x16,0x18,0x33,0xd2,0x12,0x13,0x12,0x10,0x57,0x20,0x0,0xfc,0x48,0x10,0xe0,0x10,0x4e,0x48,0xfc,0x48,0x48,0xf8,0x40,0x48,0xfc,0x4,
++0x8,0xff,0x9,0x48,0x48,0x48,0x4b,0x48,0x7d,0x5,0x1d,0xe5,0x45,0x4,0x15,0x8,0x0,0xfc,0x24,0x88,0x70,0x88,0x26,0x24,0xfe,0x24,0x24,0xfc,0x20,0x28,0xfc,0x4,
++0x10,0x10,0x13,0x10,0xfc,0x10,0x14,0x19,0x30,0xd0,0x10,0x10,0x10,0x13,0x50,0x20,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x24,0x45,0x28,0x10,0x28,0x44,0x84,0x3,0xa0,0x2c,0x24,0x24,0xac,0x24,0x24,0xfc,0x20,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x4,0x7e,0x8,0x8,0x3e,0x8,0x8,0x7e,0x2,0x1,0x11,0x50,0x51,0x96,0x18,0x6f,0x8,0xfc,0x20,0x20,0xf8,0x20,0x28,0xfc,0x0,0x20,0x40,0x84,0x2,0xa,0x8,0xf8,
++0x4,0x4,0x7,0x8,0x8,0x1f,0x28,0x48,0x8,0xf,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0xf0,0x20,0x48,0xfc,0x88,0x88,0x88,0xf8,0x8,0x0,0x2,0x2,0xfe,0x0,
++0x20,0x1b,0x8,0x81,0x62,0x20,0x9,0x12,0x24,0xe2,0x22,0x22,0x22,0x22,0x2f,0x20,0x4,0xfe,0x44,0x44,0x44,0x84,0x14,0x8,0x40,0x48,0x7c,0x40,0x40,0x44,0xfe,0x0,
++0x1,0x1,0x3f,0x3,0x5,0x19,0x61,0x9,0x8,0x7e,0x8,0x1c,0x2a,0xc9,0x8,0x8,0x0,0x8,0xfc,0x80,0x60,0x1c,0x8,0x20,0x28,0xfc,0x20,0x70,0xae,0x24,0x20,0x20,
++0x12,0x11,0x17,0x24,0x25,0x64,0xa7,0x20,0x23,0x22,0x22,0x23,0x22,0x22,0x23,0x22,0x8,0x14,0xfe,0x44,0x54,0x44,0xfc,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0xff,0x8,0x20,0x10,0x81,0x49,0x12,0x24,0xe0,0x20,0x20,0x20,0x23,0x2c,0x20,0x24,0xfe,0x20,0x40,0x40,0x48,0x46,0x42,0x48,0x50,0x20,0x40,0x80,0x0,0x0,
++0x0,0x4,0xfe,0x10,0x10,0x20,0x20,0x3d,0x64,0xa4,0x24,0x24,0x24,0x3c,0x23,0xc,0x20,0x20,0x20,0x20,0xa8,0xa6,0xa2,0x20,0x24,0x28,0x10,0x20,0x40,0x80,0x0,0x0,
++0x10,0x8,0x6,0x1,0x2,0xc,0x31,0x1,0xff,0x3,0x5,0x9,0x11,0x61,0x5,0x2,0x10,0x30,0xc0,0x0,0xc0,0x30,0x8,0x0,0xfe,0x80,0x40,0x20,0x1c,0x8,0x0,0x0,
++0x20,0x11,0xa,0x4,0xa,0x11,0x64,0x4,0xff,0x4,0x15,0x14,0x24,0x44,0x14,0x8,0x84,0x84,0x24,0x24,0x24,0xa4,0xa4,0x24,0xe4,0x24,0x24,0x84,0x84,0x4,0x14,0x8,
++0x0,0x20,0x18,0x8,0x81,0x61,0x22,0xa,0x14,0x20,0xe0,0x20,0x20,0x20,0x23,0x2c,0x40,0x40,0x40,0x40,0x50,0x48,0x46,0x42,0x48,0x48,0x50,0x20,0x40,0x80,0x0,0x0,
++0x10,0x10,0x20,0x20,0x49,0xf9,0x12,0x22,0x44,0xf8,0x0,0x0,0x18,0xe0,0x43,0xc,0x40,0x40,0x40,0x40,0x50,0x48,0x46,0x42,0x48,0x48,0x50,0x20,0x40,0x80,0x0,0x0,
++0x10,0x11,0x17,0x25,0x24,0x65,0xa7,0x22,0x25,0x29,0x23,0x24,0x28,0x20,0x23,0x2c,0x80,0x4,0xfe,0x14,0xe4,0x14,0xfc,0x8,0x6,0xfa,0x8,0x90,0x60,0x90,0xe,0x4,
++0x0,0x8,0x7c,0x49,0x4b,0x4c,0x48,0x4f,0x48,0x48,0x4b,0x7a,0x4a,0x2,0x3,0x2,0x40,0x40,0xa0,0x10,0xfe,0x44,0x40,0xfc,0x40,0x48,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x1e,0x24,0x48,0xff,0x1,0x1,0x7f,0x1,0x1,0x7f,0x0,0x44,0x42,0x80,0x20,0x24,0x3e,0x44,0xa4,0x24,0x24,0x28,0x10,0x28,0x46,0x84,0x0,0x88,0x46,0x2,
++0x12,0x1f,0x28,0x45,0x8,0x4b,0x48,0x49,0x49,0x49,0x49,0x49,0x11,0x11,0x20,0x40,0x48,0x7c,0xa0,0x10,0x4,0xfe,0x20,0xfc,0x24,0x24,0x24,0x24,0x34,0x28,0x20,0x20,
++0x0,0x7,0x78,0x48,0x4b,0x4a,0x4a,0x7a,0x4a,0x4a,0x4a,0x4b,0x7a,0x4a,0x3,0x2,0x4,0xfe,0x90,0x94,0xfe,0x94,0x94,0x94,0x94,0x94,0x9c,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x17,0xfc,0x24,0x24,0x24,0xfc,0x2f,0x24,0x24,0x3c,0xe4,0x44,0x5,0x8,0x10,0x4,0xbe,0xa4,0xa4,0xa4,0xa4,0xa4,0xfe,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0x44,0x8c,
++0x8,0x8,0xff,0x8,0x9,0x1,0x1,0x1,0x1,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x20,0x24,0xfe,0x20,0x20,0x8,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0x8,0x8,0xfe,0x8,0x18,0x1c,0x2a,0x2a,0x48,0x88,0x8,0x8,0x8,0x9,0x4,0x8,0x10,0x20,0xc0,0x4,0x8,0x10,0x20,0xc0,0x2,0x4,0x8,0x10,0x60,0x80,
++0x1,0x1,0x1,0x1,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x7f,0x40,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x0,0x7b,0x4a,0x4a,0x4a,0x4a,0x4a,0xff,0x4a,0x4a,0x4a,0x4a,0x4a,0x5a,0x42,0x84,0x44,0xe4,0x44,0x54,0x54,0x54,0x54,0xf4,0x54,0x54,0x54,0x54,0x44,0x44,0x54,0xc8,
++0x10,0x10,0x13,0x16,0x5a,0x53,0x52,0x92,0x13,0x12,0x13,0x2a,0x25,0x44,0x89,0x0,0x40,0x24,0xfe,0x4,0x4,0xfc,0x0,0x44,0xfe,0x44,0x54,0xcc,0x54,0x44,0x54,0x88,
++0x10,0x8,0x8,0xfe,0x2,0x4,0x8,0xa,0x1c,0x2a,0x48,0x8,0x8,0x8,0x8,0x9,0x4,0x8,0x10,0x20,0xc0,0x4,0x8,0x10,0x20,0xc0,0x2,0x4,0x8,0x10,0x60,0x80,
++0x20,0x1b,0x8,0x40,0x41,0x41,0x41,0x41,0x42,0x42,0x44,0x48,0x40,0x40,0x40,0x40,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x84,0x44,0x24,0x24,0x4,0x4,0x14,0x8,
++0x0,0x78,0x48,0x57,0x50,0x62,0x51,0x48,0x4f,0x48,0x68,0x50,0x41,0x42,0x44,0x48,0x40,0x40,0x48,0xfc,0x40,0x48,0x50,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x10,0x17,0x10,0x13,0xfe,0x12,0x16,0x1b,0x30,0xd1,0x11,0x11,0x11,0x11,0x50,0x27,0x40,0xfe,0x0,0xfc,0x94,0xf4,0x94,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,
++0x0,0x7c,0x45,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x2a,0x44,0x88,0x80,0xfc,0x8,0xfe,0x44,0x92,0xfe,0x0,0x7c,0x0,0x7c,0x0,0x7c,0x44,0x44,0x7c,
++0x2,0x79,0x4f,0x48,0x4b,0x78,0x4f,0x4a,0x49,0x7f,0x48,0x4b,0x4a,0x4a,0x4b,0x9a,0x8,0x10,0xfc,0x40,0xf8,0x40,0xfc,0x48,0x50,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,
++0x8,0x4,0x7f,0x1,0x3f,0x1,0x7f,0x9,0x5,0xff,0x0,0x1f,0x10,0x10,0x1f,0x10,0x20,0x48,0xfc,0x0,0xf8,0x0,0xfc,0x20,0x44,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x0,0x40,0x30,0x10,0x84,0x64,0x24,0xc,0x14,0x24,0xe4,0x24,0x24,0x24,0x27,0x24,0x40,0x40,0x40,0x40,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xfc,0x4,
++0x2,0x1,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x21,0x29,0x25,0x29,0x51,0x85,0x2,0x0,0x8,0xfc,0x8,0x8,0xf8,0x0,0x4,0x7e,0x4,0x24,0x14,0x24,0x44,0x14,0x8,
++0x12,0x11,0x27,0x20,0x4b,0xf8,0x17,0x22,0x41,0xff,0x40,0x3,0x1a,0xe2,0x43,0x2,0x8,0x10,0xfc,0x40,0xf8,0x40,0xfc,0x48,0x50,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x17,0x11,0xfc,0x13,0x12,0x12,0x13,0x12,0x1e,0xf2,0x42,0x2,0x2,0x2,0x40,0x24,0xfe,0x8,0x94,0xfe,0x4,0x94,0xc,0xf4,0x94,0x94,0xf4,0x4,0x14,0x8,
++0x9,0x9,0xa,0x13,0x14,0x38,0x50,0x97,0x10,0x10,0x10,0x11,0x11,0x12,0x14,0x18,0x0,0x0,0x4,0xfe,0x80,0x80,0x88,0xfc,0x88,0x88,0x88,0x8,0x8,0x8,0x50,0x20,
++0x2,0x1,0xff,0x8,0x4,0x3f,0x20,0x24,0x28,0x37,0x24,0x24,0x24,0x27,0x20,0x20,0x0,0x4,0xfe,0x20,0x48,0xfc,0x8,0x48,0x28,0xd8,0x48,0x48,0x48,0xc8,0x28,0x10,
++0x1,0x11,0x9,0x7f,0x40,0x8f,0x8,0xf,0x0,0x1f,0x10,0x11,0x11,0x2,0xc,0x30,0x0,0x10,0x20,0xfe,0x2,0xe4,0x20,0xe0,0x10,0xf8,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x0,0x8,0x7c,0x4b,0x4a,0x4a,0x4a,0x7a,0x4a,0x4a,0x4a,0x4a,0x7a,0x4a,0x2,0x2,0x20,0x40,0x84,0xfe,0x4,0x14,0xfc,0x94,0x94,0x94,0x94,0xf4,0x94,0x4,0x14,0x8,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x1,0x21,0x19,0x9,0x1,0x7f,0x40,0x40,0x4f,0x48,0x48,0x48,0x4f,0x48,0x40,0x40,0x0,0x8,0x18,0x20,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x24,0x14,0x8,
++0x1,0x9,0x5,0x7f,0x40,0x8f,0x8,0xf,0x1,0x7f,0x5,0xc,0x14,0x25,0x46,0x4,0x0,0x20,0x40,0xfe,0x2,0xe4,0x20,0xe0,0x8,0xfc,0x10,0xa0,0x40,0x20,0x1c,0x8,
++0x10,0x11,0x10,0x10,0xfc,0x11,0x31,0x39,0x55,0x55,0x91,0x11,0x11,0x11,0x11,0x11,0x20,0x24,0xa4,0xa8,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x14,0x8,
++0x10,0x11,0x10,0x10,0xfc,0x11,0x15,0x19,0x11,0x31,0xd1,0x11,0x11,0x11,0x51,0x21,0x20,0x24,0xa4,0xa8,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x14,0x8,
++0x8,0x1d,0xf0,0x10,0x10,0xfd,0x11,0x39,0x35,0x51,0x51,0x91,0x11,0x11,0x11,0x11,0x20,0x24,0xa4,0xa8,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x14,0x8,
++0x10,0x10,0x10,0x14,0x5f,0x50,0x50,0x90,0x17,0x10,0x17,0x29,0x25,0x45,0x82,0xc,0x80,0x80,0x88,0xfc,0x80,0x50,0x22,0xd2,0xe,0x8,0xfc,0x20,0x20,0x22,0x22,0x1e,
++0x4,0x4,0xff,0x4,0x10,0x1f,0x10,0x20,0x24,0x43,0x81,0x0,0x0,0x0,0x0,0x0,0x40,0x44,0xfe,0x40,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x50,0x20,
++0x10,0x10,0x10,0x3f,0x20,0x40,0x80,0x4,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x10,0x8,0x7f,0x0,0x22,0x14,0xff,0x2,0x3f,0x22,0x22,0x3e,0x22,0x22,0x3e,0x22,0x4,0xfe,0x24,0x24,0x24,0x44,0x54,0x88,0x4,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x1,0x1,0x1,0x9,0x9,0x11,0x11,0x21,0x41,0x1,0x1,0x0,0x1,0x2,0xc,0x70,0x0,0x0,0x0,0x20,0x10,0xc,0x4,0x10,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x9,0x7c,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0x1,0x1,0x20,0x24,0xa4,0xa8,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x14,0x8,
++0x2,0xff,0x22,0x22,0x22,0x42,0x4a,0x84,0x2,0x7f,0x42,0x42,0x42,0x7e,0x42,0x0,0x0,0xfc,0x84,0x84,0x88,0x88,0x90,0x88,0x84,0x82,0xc2,0xa2,0x94,0x88,0x80,0x80,
++0x10,0x13,0x20,0x20,0x44,0xf9,0x11,0x22,0x44,0xfc,0x1,0x1,0x1d,0xe1,0x41,0x1,0x4,0xfe,0x84,0x84,0x84,0x4,0x4,0x14,0x8,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x2,0x2,0xff,0x4,0xa,0x32,0xcf,0x2,0x7f,0x4,0xf,0x38,0xcf,0x8,0xf,0x8,0x0,0x8,0xfc,0x40,0x20,0x5e,0xe4,0x80,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,
++0x4,0x7e,0x44,0x54,0x55,0x56,0x54,0x54,0x57,0x54,0x54,0x10,0x29,0x26,0x44,0x80,0x20,0x20,0x50,0x88,0x6,0xf8,0x0,0x4,0xfe,0x20,0x20,0xa8,0xa6,0x22,0xa0,0x40,
++0x10,0x10,0x10,0x11,0x7d,0x56,0x54,0x54,0x54,0x7c,0x50,0x14,0x1c,0xe4,0x40,0x0,0x40,0x20,0x20,0xfe,0x2,0x4,0x80,0x88,0x98,0xa0,0xc0,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x0,0x1f,0x1,0x1,0xff,0x1,0x1,0x1,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x20,0xf0,0x0,0x0,0x4,0xfe,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x1,0x1,0x2,0x4,0x8,0x37,0xc1,0x1,0x3f,0x1,0x1,0x1f,0x10,0x10,0x1f,0x10,0x0,0x0,0x80,0x40,0x30,0xce,0x4,0x10,0xf8,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x8,0x8,0xa,0x7f,0x8,0xa,0xff,0x14,0x14,0x56,0x55,0x94,0x14,0x24,0x44,0x8c,0x20,0x20,0x20,0x24,0x7e,0x84,0x44,0x44,0x48,0x28,0x28,0x10,0x28,0x28,0x46,0x84,
++0x10,0x13,0x11,0x11,0xfd,0x11,0x15,0x1b,0x30,0xd7,0x14,0x12,0x11,0x12,0x54,0x28,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x8,0xbc,0xa4,0xa8,0x10,0xa8,0x46,0x4,
++0x8,0x12,0x3f,0x22,0x22,0x3f,0x22,0x3e,0x22,0x22,0xfe,0xa,0x12,0x22,0xca,0x4,0x8,0x8,0x8,0x8,0x8,0xfe,0x8,0x8,0x88,0x48,0x48,0x8,0x8,0x8,0x28,0x10,
++0x10,0x13,0x11,0x59,0x55,0x51,0x91,0x17,0x10,0x17,0x14,0x12,0x11,0x12,0x14,0x18,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x8,0xbc,0xa4,0xa8,0x10,0xa8,0x46,0x4,
++0x0,0x40,0x32,0x12,0x82,0x62,0x2f,0x8,0x10,0x22,0xe2,0x24,0x20,0x20,0x23,0x2c,0x40,0x48,0x7c,0x40,0x40,0x44,0xfe,0x40,0x44,0x44,0x48,0x50,0x20,0xc0,0x0,0x0,
++0x20,0x10,0x10,0x0,0xfc,0xb,0x10,0x38,0x54,0x90,0x10,0x10,0x10,0x17,0x10,0x10,0x40,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,0x0,
++0x1,0x21,0x11,0x11,0x1,0x2,0xf4,0x13,0x11,0x11,0x10,0x10,0x14,0x18,0x13,0xc,0xf0,0x10,0x10,0x10,0x10,0xe,0x0,0xf8,0x8,0x10,0x90,0xa0,0x40,0xb0,0xe,0x4,
++0x0,0x4,0xfe,0x11,0x11,0x21,0x25,0x7f,0xa5,0x25,0x25,0x25,0x3d,0x24,0x0,0x0,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,
++0x1,0x1,0x1,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x21,0x1,0x1,0x1,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,
++0x0,0x0,0x8,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x79,0x49,0x0,0x0,0x0,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,
++0x8,0x8,0x8,0x17,0x14,0x34,0x54,0x97,0x14,0x14,0x14,0x17,0x14,0x10,0x10,0x10,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x44,0x40,0x40,0x40,
++0x1,0x2,0xf,0x8,0xf,0x8,0xf,0x8,0x8,0x7f,0x0,0x0,0x3,0x1c,0xe0,0x0,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf2,0x14,0x18,0xf0,0x50,0x90,0x10,0x10,0x50,0x20,
++0x0,0x47,0x34,0x18,0x81,0x62,0x20,0x8,0x17,0x20,0xe1,0x22,0x2c,0x20,0x20,0x20,0x0,0xfe,0x2,0xa4,0x10,0x48,0x40,0x44,0xfe,0xe0,0x50,0x4e,0x44,0x40,0x40,0x40,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x12,0x2a,0x44,0x88,0x0,0x4,0xfe,0x0,0x8,0x7c,0x0,0x4,0xfe,0x54,0x58,0x50,0x48,0x48,0x56,0x64,0x40,
++0x10,0x10,0x20,0x21,0x45,0xf9,0x11,0x21,0x41,0xfd,0x1,0x1,0x1d,0xe0,0x40,0x0,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,
++0x20,0x10,0x10,0xfd,0x9,0x11,0x39,0x55,0x91,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,
++0x0,0x40,0x30,0x17,0x84,0x68,0x20,0x9,0x11,0x21,0xe1,0x22,0x22,0x24,0x28,0x30,0x80,0x80,0x80,0xfc,0x84,0x88,0xc0,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x2,0x1,0x7f,0x41,0x81,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x21,0x1,0x1,0x1,0x0,0x0,0xfe,0x2,0x4,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,
++0x10,0x10,0x13,0x12,0xfc,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x44,0x80,0x0,0x40,0x20,0xfe,0x22,0x20,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,
++0x8,0x8,0xff,0x8,0xf,0x8,0xf,0x8,0x8,0xff,0x10,0x12,0x14,0x10,0x1f,0x0,0x20,0x28,0xfc,0x20,0xe0,0x20,0xe0,0x20,0x24,0xfe,0x0,0x20,0x10,0x0,0xf8,0x0,
++0x8,0x4b,0x49,0x48,0x48,0x48,0x49,0x4a,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x0,0xf8,0x10,0xa0,0x40,0xa0,0x10,0xe,0xf4,0x10,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x10,0x10,0x17,0x10,0x5b,0x56,0x53,0x92,0x13,0x12,0x13,0x12,0x1f,0x11,0x12,0x14,0x40,0x48,0xfc,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x10,0xc,0x4,
++0x40,0x31,0x12,0x7,0x80,0x6f,0x21,0xa,0x14,0x29,0xe2,0x20,0x23,0x20,0x21,0x26,0x80,0x20,0x10,0xf8,0x80,0xfc,0x20,0x50,0x8e,0x24,0x40,0x90,0x20,0x40,0x80,0x0,
++0x1,0x1,0xff,0x1,0x7f,0x0,0x3f,0x21,0x21,0x3f,0x20,0x20,0x20,0x40,0x40,0x80,0x0,0x4,0xfe,0x0,0xfc,0x8,0xfc,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x0,0x0,
++0x1,0x11,0x11,0x11,0x3f,0x21,0x41,0x41,0x81,0x3f,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x10,0x11,0x51,0x51,0x7d,0x91,0x11,0x11,0x7c,0x13,0x10,0x10,0x1c,0xf0,0x41,0x2,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x40,0xfc,0x44,0x44,0x84,0x84,0x28,0x10,
++0x8,0x28,0x29,0x29,0x3f,0x4a,0x8c,0xa,0xd,0x38,0xc8,0x8,0x8,0xb,0x8,0x8,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x1,0x7,0x7c,0x4,0x4,0x4,0x4,0xff,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x0,0x20,0xa0,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x10,0x13,0x22,0x22,0x4b,0xf8,0x17,0x24,0x44,0xff,0x44,0x4,0x1f,0xe4,0x40,0x0,0x8,0xfc,0x8,0x8,0xf8,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x40,0x42,0x3e,
++0x1,0x9,0x9,0x11,0x11,0x20,0x3,0xc,0x3f,0xc8,0xf,0x8,0xf,0x8,0xf,0x8,0x0,0x20,0x10,0xc,0x24,0xc0,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,
++0x0,0x0,0x3f,0x20,0x20,0x3e,0x22,0x22,0x4a,0x44,0x80,0x1f,0x12,0x12,0xff,0x0,0xa0,0x90,0xfc,0x80,0x88,0x88,0x50,0x50,0x22,0xd2,0xe,0xf0,0x90,0x94,0xfe,0x0,
++0x3,0x3c,0x4,0xff,0x4,0x15,0x75,0x15,0x75,0xc,0x16,0x25,0x44,0x4,0x4,0x4,0x84,0x4,0x84,0xd4,0x14,0x14,0xd4,0x14,0xd4,0x14,0x14,0x94,0x84,0x4,0x14,0x8,
++0x8,0x7c,0x49,0x49,0x49,0x79,0x4a,0x4c,0x48,0x79,0x48,0x48,0x48,0x48,0x4b,0x98,0x20,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x3f,0x10,0xc,0x2,0x1,0x2,0xc,0x31,0xc1,0x1f,0x1,0x1,0x1,0xff,0x0,0x0,0xf8,0x10,0x60,0x80,0x0,0xc0,0x30,0xe,0x24,0xf0,0x0,0x0,0x4,0xfe,0x0,
++0x8,0xb,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x11,0x11,0x20,0x40,0x4,0xfe,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x34,0x28,0x20,0x20,
++0x1,0x11,0x11,0x11,0x1f,0x21,0x41,0x1,0xff,0x1,0x2,0x2,0x4,0x8,0x10,0x60,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x80,0x80,0x40,0x30,0xe,0x4,
++0x1,0x89,0x51,0x25,0x55,0x95,0x15,0x15,0x35,0x55,0x95,0x15,0x11,0x12,0x54,0x20,0x4,0xfe,0x10,0x10,0x7c,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x5c,0x10,0x10,
++0x20,0x10,0x14,0xfe,0x21,0x22,0x3d,0x25,0x25,0x27,0x25,0x25,0x25,0x45,0x94,0x8,0x80,0x80,0x84,0xfe,0x20,0x20,0x24,0x3e,0xe4,0x24,0x34,0x28,0x22,0x2,0xfe,0x0,
++0x0,0x47,0x34,0x14,0x87,0x64,0x24,0xf,0x11,0x21,0xe9,0x25,0x23,0x21,0x3f,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x20,0x20,0x24,0x28,0x30,0x24,0xfe,0x0,
++0x0,0x20,0x13,0x10,0x0,0x7,0xf0,0x10,0x17,0x10,0x11,0x10,0x14,0x18,0x10,0x0,0x40,0x48,0xfc,0x40,0x44,0xfe,0x10,0x14,0xfe,0x10,0x10,0x90,0x10,0x10,0x50,0x20,
++0x0,0x3f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x0,0x3,0x7c,0x4,0x3f,0x24,0x24,0x24,0x3f,0x4,0x4,0x7,0x7c,0x20,0x10,0xf8,0x90,0xd0,0x10,0x90,0xd0,0x90,0x90,0x90,0x90,0x10,0x92,0xca,0x46,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0xff,0x2,0x2,0x4,0x4,0x8,0x1f,0x28,0x48,0x88,0x8,0x8,0xf,0x8,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x15,0x1c,0x30,0xd3,0x12,0x12,0x12,0x12,0x53,0x22,0x40,0x40,0xa0,0xa0,0x10,0x8,0xf6,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x4,0x7e,0x44,0x47,0x44,0x44,0x7c,0x44,0x44,0x44,0x44,0x7c,0x44,0x0,0x0,0x8,0x8,0x8,0x8,0xfe,0x8,0x8,0x88,0x48,0x48,0x8,0x8,0x8,0x48,0x28,0x10,
++0x8,0x8,0x8,0x10,0x10,0x30,0x5f,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x1,0x2,0x4,0xa,0x31,0xdf,0x10,0x1f,0x10,0x1f,0x10,0x13,0x10,0x14,0x18,0x10,0x0,0x80,0x40,0x30,0xe,0xf4,0x10,0xf0,0x10,0xf8,0x10,0x20,0xc0,0x30,0x18,0x8,
++0x20,0x20,0x20,0x3d,0x25,0x49,0x41,0xa1,0x21,0x21,0x21,0x24,0x28,0x30,0x23,0x1,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x24,0x3e,0xc2,0x0,
++0x2,0x1,0x7f,0x48,0x86,0x2,0x10,0xc,0x4,0xff,0x1,0x1,0x2,0x4,0x18,0x60,0x0,0x0,0xfe,0x2,0x84,0x80,0x80,0x80,0x84,0xfe,0x0,0x40,0x20,0x10,0xc,0x4,
++0x20,0x13,0x12,0x2,0x2,0xf2,0x12,0x12,0x13,0x12,0x10,0x15,0x19,0x12,0x4,0x8,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x20,0x10,0x8,0x4,0x4,
++0x1,0x1,0x1,0x3f,0x21,0x21,0x21,0x3f,0x21,0x9,0x5,0x2,0x5,0x8,0x30,0xc0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x80,0x60,0x1e,0x4,
++0x10,0x10,0x10,0x1f,0x11,0x21,0x41,0x1,0xff,0x1,0x2,0x2,0x4,0x8,0x10,0x60,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,0x80,0x80,0x40,0x20,0x1c,0x8,
++0x10,0x10,0x1f,0x20,0x27,0x64,0xa4,0x24,0x27,0x24,0x22,0x21,0x20,0x21,0x26,0x28,0x40,0x44,0xfe,0x40,0xfc,0x44,0x44,0x44,0xfc,0x44,0x40,0x80,0xc0,0x30,0xe,0x4,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x24,0x22,0x3f,0x20,0x21,0x22,0x44,0x48,0x90,0x0,0x4,0xfe,0x4,0x4,0xfc,0x84,0x90,0xa4,0xfe,0x80,0xc0,0xa0,0x90,0x8e,0x84,0x80,
++0x8,0xfc,0x8,0x49,0x49,0x49,0x49,0x49,0x7d,0x4,0x4,0x1c,0xe4,0x44,0x15,0xa,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x20,0xa0,0x40,0x60,0x90,0xe,0x4,
++0x10,0x10,0x10,0x10,0xfc,0x25,0x27,0x24,0x24,0x49,0x29,0x11,0x29,0x45,0x85,0x1,0x40,0x40,0x40,0x80,0x88,0x4,0xfe,0x2,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x3e,0x8,0x8,0x8,0x9,0xe,0x70,0x20,0x0,0x80,0xa0,0x90,0x84,0xfe,0x80,0x80,0x80,0x80,0x40,0x40,0x20,0x22,0x12,0xa,0x4,
++0x0,0x3f,0x0,0x0,0x0,0x0,0xff,0x1,0x1,0x9,0x19,0x21,0x41,0x1,0x5,0x2,0x10,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x20,0x18,0xc,0x4,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,
++0x1,0x11,0x11,0x11,0x11,0xff,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x1f,0x0,0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0xf0,0x10,0x0,0x8,0xfc,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x10,0x10,0x40,0x20,0x4,0xfe,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x34,0x28,0x20,0x20,
++0x1,0x1,0xff,0x1,0x3f,0x21,0x3f,0x1,0x3f,0x1,0xff,0x1,0x3f,0x1,0x5,0x2,0x0,0x4,0xfe,0x0,0xf8,0x8,0xf8,0x0,0xf8,0x8,0xfe,0x8,0xf8,0x8,0x0,0x0,
++0x10,0x10,0x10,0x10,0xff,0x10,0x14,0x1b,0x31,0xd1,0x11,0x11,0x11,0x17,0x52,0x20,0x20,0x28,0x24,0x20,0xfe,0x20,0x20,0xe0,0x20,0x10,0x10,0x10,0xd2,0x12,0xa,0x4,
++0x8,0x7e,0x8,0x1c,0x68,0xa,0x19,0xff,0x0,0x3f,0x0,0x3f,0x0,0x1f,0x10,0x1f,0x8,0xf0,0x80,0xfc,0x90,0x90,0x14,0xfe,0x0,0xf8,0x0,0xf8,0x0,0xf0,0x10,0xf0,
++0x2,0x42,0x22,0x2f,0x2,0x2,0xe3,0x26,0x2a,0x22,0x22,0x2b,0x24,0x50,0x8f,0x0,0x4,0x78,0x40,0xc0,0x40,0x7e,0x48,0x48,0x48,0x48,0x88,0x8,0x8,0x6,0xfc,0x0,
++0x8,0x8,0x7d,0x8,0x1c,0xe9,0x8,0x29,0x12,0x2,0x7f,0x2,0x4,0x8,0x10,0x60,0x40,0x48,0xfc,0x48,0x48,0x88,0xca,0x2a,0x6,0x0,0xf8,0x8,0x8,0x88,0x50,0x20,
++0xf,0x8,0x8,0xf,0x8,0x8,0xf,0x0,0xff,0x1,0x9,0x9,0x9,0x15,0x23,0x40,0xe0,0x20,0x20,0xe0,0x20,0x20,0xe0,0x4,0xfe,0x0,0x20,0xf0,0x0,0x0,0x6,0xfc,
++0x0,0x0,0x7b,0x48,0x4f,0x48,0x49,0x4a,0x4c,0x48,0x4b,0x7a,0x4b,0x2,0x3,0x2,0x80,0x88,0xf0,0xa4,0xfe,0x80,0xf0,0x82,0x7e,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x2,0x2,0x7b,0x4d,0x48,0x48,0x4f,0x48,0x4a,0x4a,0x4a,0x7d,0x48,0x0,0xf,0x0,0x10,0x10,0xde,0x28,0x84,0x0,0xfc,0x40,0x48,0x48,0x48,0x54,0xe2,0x40,0xfe,0x0,
++0x0,0x47,0x30,0x10,0xf,0x0,0xf0,0x13,0x12,0x12,0x12,0x13,0x12,0x28,0x47,0x0,0x38,0xc0,0x40,0x44,0xfe,0x40,0x48,0xfc,0x8,0x8,0x8,0xf8,0x8,0x6,0xfc,0x0,
++0x8,0x8,0x8,0x10,0x10,0x3f,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x17,0x10,0x10,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x48,0xfc,0x0,0x0,
++0x8,0x8,0x8,0x17,0x10,0x30,0x5f,0x90,0x10,0x17,0x10,0x12,0x11,0x11,0x10,0x10,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x10,0x10,0xfc,0x10,0x10,0x10,0x10,0x50,0x20,
++0x4,0xf9,0x10,0x54,0x38,0x10,0xfe,0x13,0x30,0x39,0x54,0x50,0x93,0x10,0x10,0x10,0x0,0xfc,0x88,0x50,0x20,0x50,0x8e,0x24,0x20,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,
++0x20,0x20,0x20,0x3c,0x25,0x4a,0x41,0xa1,0x21,0x21,0x21,0x25,0x29,0x31,0x20,0x0,0x80,0x80,0x84,0xfe,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x34,0x28,0x20,0x20,
++0x0,0x20,0x3f,0x21,0x21,0x21,0x21,0x3f,0x20,0x20,0x20,0x24,0x28,0x30,0x60,0x0,0x20,0xf0,0x0,0x0,0x0,0x0,0x8,0xfc,0x80,0x80,0x40,0x40,0x22,0x12,0xa,0x6,
++0x2,0x1,0x0,0xff,0x1,0x1,0x3f,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x1,0x1,0x0,0x0,0x4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x28,0x10,0x0,0x0,
++0x10,0x10,0x10,0x13,0x58,0x54,0x57,0x90,0x10,0x17,0x10,0x12,0x11,0x11,0x10,0x10,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x10,0x10,0xfc,0x10,0x10,0x10,0x10,0x50,0x20,
++0x2,0x1,0x7f,0x40,0x80,0x3f,0x4,0x8,0x1f,0x1,0x1,0x1f,0x1,0x1,0x7f,0x0,0x0,0x0,0xfe,0x2,0x14,0xf8,0x0,0x20,0xf0,0x10,0x0,0xf0,0x0,0x8,0xfc,0x0,
++0x20,0x13,0x12,0x2,0xfe,0xa,0x12,0x32,0x5a,0x96,0x12,0x10,0x11,0x11,0x12,0x14,0x8,0xfc,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0x68,0xa8,0xa0,0x22,0x22,0x1e,0x0,
++0x0,0x40,0x20,0x20,0xf,0x0,0xe0,0x27,0x21,0x21,0x21,0x21,0x29,0x37,0x22,0x0,0x20,0x28,0x24,0x20,0xfe,0x20,0x20,0xe0,0x20,0x10,0x10,0x10,0xd2,0x12,0xa,0x4,
++0x8,0x8,0x8,0x48,0x48,0x49,0x49,0x4a,0x48,0x58,0x68,0x48,0x8,0x8,0x9,0xe,0x80,0x80,0x80,0x84,0xfe,0x8,0x88,0x88,0x88,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x0,0x0,0x7f,0x1,0x1,0x3f,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x5,0x2,0x10,0xf8,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x4,0xff,0x1,0x2,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x20,0x44,0xfe,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x2,0x1,0x7f,0x40,0x80,0x0,0x0,0x7f,0x0,0x8,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x2,0x24,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x2,0x2,0x7f,0x2,0x3f,0x4,0xff,0x8,0x8,0x17,0x10,0x22,0x41,0x81,0x0,0x0,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x50,0x20,
++0x10,0x13,0x10,0x11,0xfc,0x13,0x12,0x1c,0x31,0xd1,0x10,0x10,0x10,0x10,0x51,0x26,0xc,0xf0,0x0,0x24,0xa8,0xfe,0x2,0x4,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x9,0x8,0xf,0x10,0x3f,0x50,0x9f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x88,0xfc,0x80,0xf8,0x80,0xf8,0x80,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x3f,0x11,0x9,0x9,0x7f,0x40,0x80,0x1f,0x8,0x4,0x2,0x1,0x6,0x18,0x60,0x78,0x80,0x10,0x10,0x20,0xfe,0x2,0x4,0xf0,0x20,0x40,0x80,0x0,0xc0,0x3c,0x8,
++0x1,0x0,0x3f,0x22,0xac,0x68,0x2e,0x28,0x2f,0x60,0xaf,0x22,0x21,0x40,0x83,0x1c,0x0,0x88,0xfc,0x80,0xb8,0x88,0xb8,0x88,0xf8,0x80,0xf0,0x20,0x40,0x80,0x60,0x1c,
++0x8,0x4,0x3f,0x21,0x3f,0x21,0x3f,0x0,0xff,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x20,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x4,0x4,0xff,0x4,0x0,0xfd,0x8,0x10,0x51,0x5c,0x50,0x50,0x5e,0xf0,0x41,0x2,0x40,0x44,0xfe,0x40,0x24,0xfe,0x40,0x88,0xfc,0x0,0xa8,0xa8,0xaa,0xaa,0x26,0x0,
++0x10,0x13,0x12,0x12,0xfe,0x12,0x32,0x3a,0x56,0x52,0x92,0x12,0x12,0x12,0x13,0x10,0x8,0xfc,0x0,0x8,0x88,0x50,0x50,0x20,0x20,0x50,0x48,0x88,0x0,0x4,0xfe,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x30,0x39,0x54,0x50,0x90,0x10,0x10,0x11,0x12,0x14,0x40,0x20,0x24,0xfe,0x20,0x40,0x88,0xfc,0x0,0xa8,0xa8,0xa8,0xaa,0x2a,0x26,0x20,
++0x0,0xa,0xfe,0x23,0x22,0x3c,0x48,0x4f,0x48,0xb0,0x11,0x22,0x44,0x88,0x0,0x0,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0xc0,0xe0,0x50,0x4e,0x44,0x40,0x40,0x40,
++0x10,0x13,0x10,0x10,0xfc,0x10,0x17,0x18,0x30,0xd0,0x10,0x10,0x10,0x10,0x51,0x20,0x0,0xf8,0x10,0xa0,0x40,0x40,0xfe,0x42,0x44,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x20,0x20,0x28,0xfd,0x22,0x45,0x50,0x93,0xfa,0x13,0x3a,0xd3,0x12,0x12,0x12,0x12,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x0,0xc4,0x54,0xd4,0x54,0xd4,0x54,0x44,0x44,0xcc,
++0x8,0xa,0xf,0x8,0x8,0xa,0xff,0x8,0x8,0x2c,0x2b,0x49,0x48,0x88,0x29,0x12,0x0,0x0,0x0,0xfc,0x84,0x84,0x48,0x48,0x48,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x8,0x8,0x14,0x22,0x41,0xbe,0x9,0x8,0x7f,0xa,0x3f,0x22,0x22,0x22,0x3e,0x22,0x0,0xfc,0x4,0x48,0x28,0x10,0xfe,0x12,0x14,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
++0x2,0x42,0x33,0x12,0x82,0x62,0x2f,0xa,0x12,0x27,0xea,0x32,0x22,0x2a,0x24,0x21,0x0,0x0,0x80,0x7c,0x44,0x44,0xc4,0x44,0x28,0x28,0x90,0x10,0x28,0x46,0x84,0x0,
++0x0,0x0,0x3c,0xb,0x10,0x10,0x10,0x5d,0x50,0x50,0x50,0x50,0x5c,0xf1,0x42,0x4,0x40,0x20,0x24,0xfe,0x20,0x40,0x88,0xfc,0x0,0xa8,0xa8,0xa8,0xaa,0x2a,0x26,0x20,
++0x2,0x2,0x2,0x7f,0x2,0x2,0x2,0x2,0xff,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x10,0xc,0xe4,0x20,0x20,0x20,0x20,0xfc,0x4,0x4,0x4,0x4,0x28,0x10,0x0,
++0x4,0x7e,0x45,0x54,0x54,0x57,0x54,0x54,0x55,0x54,0x54,0x55,0x28,0x24,0x44,0x83,0x20,0x28,0xfc,0x20,0x20,0xfe,0x82,0x54,0x10,0x90,0x14,0xfe,0x20,0x50,0x8c,0x4,
++0x10,0xa,0xff,0x0,0x7f,0x42,0x7e,0x0,0x7e,0x4,0x8,0x1e,0xe8,0x9,0x2a,0x14,0x40,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0xc8,0x68,0x58,0x88,0x89,0x9,0x3,0x0,
++0x8,0xff,0x0,0x7e,0x42,0x7e,0x0,0x7e,0x4,0x8,0x7c,0x9,0x1a,0x44,0x42,0x82,0x40,0x40,0x48,0xfc,0x48,0x48,0xc8,0x48,0xa8,0x8a,0x8a,0x6,0x0,0x88,0x46,0x42,
++0x4,0xff,0x4,0x3f,0x24,0x3f,0x2,0x3f,0x2,0xff,0xc,0x1f,0x30,0xdf,0x10,0x1f,0x44,0xfe,0x40,0xf8,0x48,0xf8,0x20,0xf0,0x84,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,
++0x1f,0x10,0x1f,0x10,0x1f,0x2,0x3f,0x2,0xff,0x4,0xf,0x38,0xcf,0x8,0xf,0x8,0xf0,0x10,0xf0,0x14,0xf8,0x20,0xf0,0x84,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x0,0xb,0x7e,0x4a,0x4b,0x48,0x4b,0x78,0x4f,0x48,0x49,0x49,0x7b,0x4d,0x1,0x1,0x4,0xfe,0x94,0x94,0xfc,0x48,0xfc,0x50,0xfe,0x40,0xfc,0x4,0xfc,0x4,0xfc,0x4,
++0x3f,0x24,0x24,0x3f,0x2,0x3f,0x2,0xff,0x3,0xc,0x3f,0xc8,0xf,0x8,0xf,0x8,0xf8,0x48,0x48,0xf8,0x20,0xf0,0x44,0xfe,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x0,0x3f,0x24,0x24,0x3f,0x10,0x3f,0x42,0xbf,0x22,0x22,0x3f,0x2,0x3,0x7e,0x20,0x8,0xfc,0x48,0x48,0xf8,0x4,0xfe,0x4,0xe4,0x24,0x24,0xe4,0x24,0xf4,0x14,0x8,
++0x0,0x3f,0x1,0xff,0x5,0x9,0x32,0x4,0x9,0x39,0xc5,0x3,0xd,0x31,0x5,0x2,0xf0,0x0,0x4,0xfe,0x40,0x30,0x90,0x40,0x30,0x2e,0x44,0x80,0x60,0x18,0x8,0x0,
++0xc,0x71,0x40,0x7c,0x40,0x7f,0x2,0x52,0x4a,0x42,0x52,0x4a,0x42,0x73,0xc6,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0x90,0x50,0x10,0x90,0x50,0x10,0x8a,0xa,0x6,
++0x3f,0x20,0x3f,0x20,0x2f,0x20,0x2f,0x28,0x2f,0x20,0x3f,0x50,0x50,0x57,0x90,0x10,0xf8,0x8,0xf8,0x0,0xf8,0x80,0xf8,0x88,0xf8,0x84,0xfe,0x84,0x94,0xf4,0x14,0x8,
++0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x3,0x5,0x9,0x11,0x21,0xc1,0x1,0x1,0x1,0x0,0x40,0x30,0x10,0x4,0xfe,0x0,0x80,0x40,0x20,0x10,0xe,0x4,0x0,0x0,0x0,
++0x0,0x40,0x20,0x20,0xf,0x0,0xe1,0x22,0x24,0x28,0x20,0x20,0x20,0x50,0x8f,0x0,0x80,0xa0,0x90,0x80,0xfc,0x80,0xc0,0xa0,0x98,0x88,0x80,0x80,0x80,0x6,0xfc,0x0,
++0x10,0x10,0x10,0x17,0xfc,0x14,0x32,0x3a,0x51,0x51,0x92,0x12,0x14,0x18,0x10,0x10,0x8,0x8,0x8,0xc8,0x7e,0x48,0x88,0xa8,0x18,0x8,0x88,0x48,0x48,0x8,0x28,0x10,
++0x1,0x1,0xff,0x1,0x1,0x3f,0x21,0x21,0x21,0x3f,0x23,0x5,0x9,0x31,0xc1,0x1,0x0,0x4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x88,0x40,0x30,0xe,0x4,0x0,
++0x0,0x0,0x0,0x3f,0x20,0x20,0x20,0x28,0x26,0x22,0x20,0x20,0x20,0x21,0x42,0x84,0x80,0xa0,0x90,0xfc,0x80,0x80,0x88,0x48,0x50,0x50,0x20,0x60,0x90,0x12,0xa,0x6,
++0x4,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x7,0x1,0x3f,0x8,0x8,0x4,0xff,0x0,0x0,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0x4,0x10,0xf8,0x20,0x20,0x44,0xfe,0x0,
++0x7f,0x49,0x7f,0x49,0x7f,0x8,0x7f,0x8,0xf,0x79,0x1,0x3f,0x1,0x1,0xff,0x0,0x7c,0x4,0x28,0x10,0xfe,0x12,0x14,0x10,0x50,0x20,0x0,0xf8,0x0,0x4,0xfe,0x0,
++0x1,0x0,0x3f,0x20,0x22,0x22,0x3f,0x22,0x22,0x22,0x23,0x22,0x40,0x4a,0x89,0x11,0x0,0x84,0xfe,0x0,0x20,0x24,0xfe,0x20,0x20,0x20,0xe0,0x20,0x0,0x48,0x26,0x22,
++0x8,0x49,0x2a,0x8,0xff,0x19,0x2c,0x4a,0x10,0xfe,0x22,0x22,0x14,0x18,0x25,0x42,0x40,0x40,0x40,0x84,0xfe,0x8,0x88,0x88,0x88,0x90,0x50,0x20,0x50,0x88,0xe,0x4,
++0x2,0x42,0x3f,0x22,0x82,0x4f,0x4a,0xa,0x1f,0x22,0xe7,0x2a,0x32,0x22,0x22,0x23,0x10,0x90,0xd0,0x10,0xbe,0xc2,0x94,0x90,0x90,0x10,0x10,0xa8,0x28,0x48,0x86,0x4,
++0x10,0x10,0x10,0xfe,0x22,0x22,0x14,0x8,0x14,0x62,0x0,0x2a,0x29,0x28,0x48,0x7,0x0,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0xf8,0x88,0x0,0x10,0x88,0xa4,0x24,0xe0,
++0x0,0x3f,0x20,0x20,0x3f,0x22,0x22,0x3f,0x32,0x32,0x52,0x52,0x53,0x92,0x2,0x2,0x44,0xe4,0x44,0x54,0xd4,0x14,0x54,0xf4,0x54,0x54,0x54,0x54,0x44,0x84,0x14,0x8,
++0x0,0x7f,0x2,0x3f,0x24,0x24,0x24,0x22,0x2,0xff,0x4,0x8,0x4,0x3,0xc,0x30,0x8,0xfc,0x0,0xf8,0x48,0x48,0x48,0x18,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x10,0x10,0x13,0x10,0xfc,0x12,0x15,0x1a,0x30,0xd0,0x17,0x10,0x10,0x10,0x50,0x20,0x40,0x24,0xfe,0x20,0x48,0xf2,0x24,0x52,0xf8,0x20,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x2,0x1,0x7f,0x0,0x1f,0x10,0xff,0x10,0x1f,0x4,0x9,0x18,0x28,0x4a,0x8c,0x8,0x0,0x8,0xfc,0x0,0xf0,0x14,0xfe,0x10,0xf0,0x8,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x0,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x21,0x41,0x80,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x28,0x12,0x2,0xfe,
++0x8,0x8,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x9,0x11,0x11,0x20,0x40,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x34,0x28,0x20,0x20,
++0x10,0x10,0x10,0x11,0xfe,0x14,0x33,0x38,0x54,0x50,0x97,0x10,0x10,0x10,0x1f,0x10,0x40,0x40,0xa0,0x10,0xe,0x4,0xf8,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x10,0x11,0xfe,0x14,0x13,0x1c,0x30,0xd0,0x17,0x10,0x10,0x10,0x5f,0x20,0x40,0x40,0xa0,0x10,0xe,0x4,0xf8,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x1f,0x1,0x7f,0x41,0x9d,0x1,0x1d,0x8,0x8,0x7e,0x8,0x1c,0x2a,0x48,0x8,0x8,0xf0,0x0,0xfe,0x2,0x74,0x0,0x70,0x4,0xfe,0x84,0xfc,0x84,0xfc,0x84,0xfc,0x84,
++0x0,0x0,0xfd,0x4,0x44,0x44,0x28,0x28,0x10,0x10,0x28,0x28,0x44,0x44,0x81,0x6,0x0,0x4,0xfe,0x84,0x84,0x84,0x88,0x48,0x48,0x50,0x20,0x30,0x50,0x88,0xe,0x4,
++0x1,0x1,0xff,0x1,0x29,0x11,0x29,0x1,0x29,0x11,0x29,0x2,0x4,0x8,0x30,0xc0,0x0,0x4,0xfe,0x0,0x28,0x10,0x28,0x0,0x28,0x10,0x28,0x80,0x40,0x30,0xe,0x4,
++0x0,0x20,0x11,0x11,0x3,0x5,0xf1,0x11,0x11,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x80,0xa0,0x14,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x10,0x14,0xfe,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x7d,0x5,0x5,0x9,0x9,0x11,0x21,0x41,0x81,0x5,0x2,0x0,0x0,0x0,0x8,0x18,0x20,0xc0,0x80,0x40,0x20,0x10,0xe,0x4,0x0,0x0,0x0,
++0x0,0x8,0x7b,0x48,0x48,0x4f,0x79,0x49,0x4f,0x79,0x49,0x49,0x4f,0x78,0x48,0x3,0x0,0x18,0xe0,0x40,0x48,0xfc,0x50,0x54,0xfe,0x50,0x50,0x50,0xfc,0x40,0x50,0xf8,
++0x8,0x1d,0xf0,0x10,0x11,0xfd,0x11,0x39,0x35,0x51,0x90,0x10,0x10,0x10,0x11,0x12,0x0,0x4,0x88,0x50,0xfc,0x4,0x4,0x4,0xfc,0x54,0x50,0x50,0x92,0x92,0xe,0x0,
++0x0,0x8,0x7c,0x48,0x49,0x4b,0x48,0x48,0x48,0x48,0x49,0x79,0x4a,0x2,0x4,0x8,0x40,0x40,0x80,0x80,0x8,0xfc,0x94,0x90,0x90,0x90,0x10,0x10,0x12,0x12,0xe,0x0,
++0x0,0x8,0x7f,0x49,0x48,0x4b,0x7a,0x4d,0x49,0x7a,0x4d,0x48,0x48,0x79,0x4a,0x0,0x8,0x3c,0xc0,0x24,0xa8,0xfe,0x2,0x4,0xde,0x44,0x54,0x94,0xbe,0x4,0x4,0x4,
++0x0,0x47,0x54,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x44,0x84,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x20,0x58,0x84,0x2,
++0x0,0x3f,0x11,0x9,0x7f,0x48,0x88,0x1e,0x12,0x22,0x54,0xd,0x8,0x10,0x20,0x40,0x78,0x80,0x10,0x20,0xfe,0x22,0x24,0xf8,0x20,0xa0,0xa8,0xfc,0x20,0x20,0x20,0x20,
++0x0,0x22,0x11,0x10,0x3,0x2,0xf2,0x12,0x13,0x12,0x10,0x10,0x15,0x19,0x12,0x4,0x0,0x8,0x10,0xa0,0xf8,0x8,0x8,0x8,0xf8,0xa8,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x8,0xfd,0x10,0x10,0x21,0x25,0x3f,0x65,0xa5,0x25,0x25,0x25,0x3c,0x24,0x0,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x20,0x58,0x84,0x2,
++0x41,0x22,0x14,0xff,0x8,0x49,0x49,0x49,0x49,0x49,0x7f,0x9,0x8,0x10,0x21,0x42,0x4,0x7e,0x44,0xc4,0x44,0x7c,0x44,0x44,0x44,0x7c,0x44,0x44,0x84,0x84,0x14,0x8,
++0x10,0x10,0x13,0x16,0x5a,0x52,0x52,0x93,0x10,0x10,0x10,0x29,0x26,0x44,0x80,0x0,0x8,0x1c,0xe0,0x0,0x20,0x20,0x24,0xfe,0x20,0x20,0xa8,0x24,0x22,0x22,0xa0,0x40,
++0x22,0x22,0x7f,0x22,0x22,0x3e,0x22,0x22,0x3e,0x22,0x22,0xff,0x0,0x15,0x22,0x40,0x8,0x1c,0x60,0x40,0x40,0x40,0x7e,0x48,0x48,0x48,0x48,0x48,0x88,0x8,0x8,0x8,
++0x24,0x24,0x2f,0x24,0xfc,0x27,0x2c,0x34,0x27,0xe4,0x24,0x3f,0x20,0x24,0xa8,0x40,0x80,0x8c,0xf0,0xa0,0xa0,0xa4,0xbe,0xa8,0xa8,0xa8,0xa8,0xe8,0x28,0xa8,0x48,0x8,
++0x4,0x14,0x7f,0x54,0x54,0x57,0x54,0x54,0x57,0x54,0x54,0x7f,0x50,0x4,0x8,0x0,0x80,0x8c,0xf0,0xa0,0xa0,0xa4,0xbe,0xa8,0xa8,0xa8,0xa8,0xe8,0x28,0xa8,0x48,0x8,
++0x0,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x20,0x2,0x51,0x50,0x90,0xf,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x0,0x88,0x96,0x12,0xf0,
++0x4,0xe,0xf8,0x8,0xa,0xff,0x8,0x1c,0x1a,0x28,0x48,0x89,0x9,0xb,0x8,0x8,0x20,0x20,0x20,0x20,0x40,0x40,0x40,0x40,0x80,0x80,0x80,0x8,0x4,0xfe,0x2,0x0,
++0x0,0x3f,0x0,0x0,0xff,0x0,0x0,0x3f,0x20,0x20,0x20,0x20,0x3f,0x20,0x0,0x0,0x8,0xfc,0x8,0x48,0xe8,0x8,0x88,0xc8,0x88,0x88,0x88,0x88,0x88,0x88,0x28,0x10,
++0x8,0x8,0x8,0x10,0x10,0x22,0x7e,0x4,0x8,0x10,0x20,0x7e,0x0,0x0,0xff,0x0,0x10,0x10,0x10,0x20,0x20,0x44,0xfc,0x8,0x10,0x20,0x40,0xfc,0x0,0x4,0xfe,0x0,
++0x0,0xff,0x8,0x8,0x10,0x1f,0x21,0x21,0x62,0x92,0xc,0x4,0x8,0x10,0x20,0x40,0x4,0xfe,0x40,0x40,0x40,0x44,0x4c,0x50,0x60,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x4,0x3e,0x21,0x24,0x3f,0x20,0x25,0x3e,0x20,0x21,0xff,0x10,0x25,0x7e,0x2,0x0,0x20,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,
++0x1,0x1,0x7f,0x1,0x1,0x1,0xff,0x0,0x0,0x7f,0x8,0x4,0x4,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x2,0x3f,0x22,0x22,0x3e,0x0,0x7f,0x55,0x55,0x55,0x7f,0x55,0x55,0x55,0x55,0x43,0x4,0x7e,0x4,0x4,0xfc,0x4,0x74,0x54,0x54,0x54,0x54,0x54,0x74,0x4,0x14,0x8,
++0x0,0x0,0x7f,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x48,0x50,0x40,0x7f,0x40,0x0,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x3c,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x8,0xb,0x8,0x10,0x17,0x30,0x50,0x93,0x12,0x12,0x12,0x12,0x13,0x12,0x10,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0xe4,0x4,0x14,0x8,
++0x10,0x11,0x10,0x20,0x24,0x64,0xa4,0x24,0x24,0x24,0x24,0x25,0x26,0x24,0x20,0x21,0x0,0x8,0x88,0x48,0x48,0x8,0x8,0x8,0x8,0x10,0x90,0x20,0x28,0x46,0x82,0x0,
++0x20,0x23,0x20,0x3c,0x27,0x48,0x40,0xa3,0x22,0x22,0x22,0x26,0x2b,0x32,0x20,0x0,0x4,0xfe,0x4,0x24,0xf4,0x4,0x4,0xf4,0x24,0x24,0x24,0x24,0xe4,0x4,0x14,0x8,
++0x0,0x7f,0x40,0x40,0x40,0x40,0x7f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x3f,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x11,0x39,0x36,0x54,0x50,0x90,0x10,0x11,0x13,0x10,0x10,0x10,0x90,0x90,0x90,0x8,0x8,0x4,0x42,0x40,0x40,0x80,0x88,0x4,0xfc,0x4,0x0,
++0x8,0x8,0x18,0x24,0x43,0x82,0x7f,0x10,0x1f,0x10,0x1f,0x10,0x10,0xff,0x0,0x0,0x20,0x20,0x50,0x88,0x6,0x0,0xfc,0x10,0xf0,0x10,0xf0,0x14,0xfe,0x10,0x10,0x10,
++0x8,0x8,0x8,0x8,0x14,0x14,0x22,0x22,0x41,0x80,0x2a,0x29,0x28,0x48,0x7,0x0,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x8e,0x4,0x0,0x10,0x88,0xa4,0x24,0xe0,0x0,
++0x0,0x2b,0x28,0x28,0x45,0x53,0x91,0x11,0x21,0x21,0x29,0x45,0x7c,0x4,0x0,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x20,0x58,0x84,0x2,
++0x2,0x41,0x30,0x17,0x0,0x0,0xf0,0x1f,0x10,0x10,0x10,0x10,0x11,0x2a,0x44,0x3,0x8,0x10,0xa0,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0x80,0xa0,0x18,0x8,0x6,0xfc,
++0x2,0x1,0x7f,0x40,0x81,0x1,0x1,0xff,0x3,0x5,0x9,0x11,0x21,0x41,0x1,0x1,0x0,0x0,0xfe,0x2,0x4,0x0,0x4,0xfe,0x80,0x40,0x30,0xe,0x4,0x0,0x0,0x0,
++0x0,0x40,0x31,0x11,0x1,0x2,0xf2,0x14,0x18,0x10,0x10,0x10,0x15,0x1b,0x10,0x0,0x40,0x20,0x20,0x20,0x10,0x8,0xe,0x44,0x40,0x40,0x80,0x90,0x8,0xf8,0x8,0x0,
++0x0,0x47,0x20,0x20,0x0,0x7,0xe4,0x24,0x27,0x24,0x24,0x27,0x2c,0x34,0x24,0x4,0x0,0xf8,0x10,0xa0,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x54,0x48,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x15,0x19,0x30,0xd3,0x10,0x10,0x10,0x10,0x50,0x23,0x24,0xae,0x24,0x24,0xac,0x24,0x24,0xfc,0x20,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x8,0x10,0x3d,0x25,0x35,0x2d,0x25,0x25,0xfc,0x27,0x34,0x2c,0x44,0x44,0x94,0xb,0x24,0xae,0x24,0x24,0xac,0x24,0x24,0xfc,0x20,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x22,0x2a,0x27,0x22,0xff,0x22,0x37,0x2a,0x62,0xbf,0x24,0x28,0x25,0x22,0xa5,0x48,0x10,0x90,0x10,0x14,0xbe,0x44,0x24,0xa4,0x28,0xe8,0x90,0x90,0x28,0x28,0x46,0x84,
++0x2,0x22,0xff,0xa2,0xa2,0xaf,0xaa,0xaa,0xaf,0xa2,0xa7,0xea,0x92,0x2,0x2,0x3,0x10,0x90,0xd0,0x10,0xbe,0xc2,0x94,0x90,0x90,0x10,0x10,0xa8,0x28,0x48,0x86,0x4,
++0x8,0x8,0xff,0x8,0xa,0x2,0x3f,0x2,0x2,0x22,0x24,0x44,0x8,0x10,0x20,0x40,0x20,0x24,0xfe,0x20,0x20,0x10,0xf8,0x10,0x10,0x18,0x16,0x12,0x10,0x10,0x50,0x20,
++0x4,0xfe,0x29,0x28,0xfe,0xaa,0xab,0xaa,0xae,0xc2,0x82,0xff,0x82,0xfe,0x82,0x0,0x8,0x1c,0xe0,0x20,0x20,0x24,0xfe,0x20,0x70,0x68,0xae,0x24,0x20,0x20,0x20,0x20,
++0x10,0x11,0x11,0x22,0x24,0x60,0xa1,0x22,0x24,0x2b,0x22,0x22,0x22,0x22,0x23,0x22,0x0,0x10,0xc,0x44,0x40,0xa0,0x10,0xe,0x4,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x1,0x1,0x7f,0x1,0x3f,0x1,0xff,0x4,0x1f,0x1,0x2,0x1f,0x1,0x9,0x15,0x22,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x20,0xc0,0x0,0x20,0xf0,0x0,0x20,0x18,0x8,
++0x0,0x40,0x37,0x10,0x7,0x4,0xf4,0x17,0x14,0x10,0x11,0x12,0x14,0x28,0x47,0x0,0x40,0x44,0xfe,0x40,0xfc,0x44,0x44,0xfc,0x44,0xe0,0x58,0x48,0x40,0x46,0xfc,0x0,
++0x0,0x7f,0x4,0x3f,0x24,0x24,0x3f,0x1,0x11,0x9,0xff,0x5,0x9,0x31,0xc1,0x1,0x8,0xfc,0x40,0xf8,0x48,0x48,0xf8,0x0,0x10,0x24,0xfe,0x40,0x30,0xe,0x4,0x0,
++0x10,0x1f,0x10,0x27,0x24,0x64,0xa7,0x20,0x22,0x21,0x2f,0x21,0x22,0x24,0x28,0x20,0x4,0xfe,0xa0,0xfc,0xa4,0xa4,0xfc,0x40,0x48,0x50,0xfe,0x50,0x48,0x46,0x44,0x40,
++0x22,0x14,0xff,0x8,0x2a,0x2a,0x2a,0x3e,0x8,0x11,0x21,0x7f,0x1,0x1,0xff,0x0,0x4,0x7e,0xc4,0x7c,0x44,0x7c,0x44,0x44,0x94,0x8,0x0,0xfc,0x0,0x4,0xfe,0x0,
++0x48,0x25,0x20,0x1f,0x82,0x4a,0x4a,0xa,0x1a,0x2a,0xef,0x22,0x22,0x24,0x28,0x21,0x84,0x3e,0x24,0xe4,0x24,0xbc,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0x44,0x44,0x94,0x8,
++0x2,0x1,0x7f,0x40,0x88,0xf,0x8,0x10,0x13,0x32,0x52,0x93,0x12,0x12,0x13,0x12,0x0,0x0,0xfe,0x2,0x4,0xfe,0x40,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x43,0x32,0x12,0x2,0x2,0xf3,0x12,0x12,0x12,0x12,0x16,0x1a,0x14,0x8,0x0,0x1c,0xe0,0x0,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x60,0x30,0x2c,0x24,0x20,0x20,
++0x1,0x1,0x3f,0x1,0xff,0x1,0x3f,0x1,0x21,0x25,0x25,0x25,0x29,0x21,0x41,0x81,0x0,0x8,0xfc,0x8,0xfe,0x8,0xf8,0x0,0x8,0x48,0x48,0x28,0x28,0x8,0x8,0x8,
++0x4,0xfe,0x28,0x28,0xff,0xaa,0xaa,0xab,0xae,0xc2,0x83,0xfe,0x82,0xfe,0x82,0x1,0x20,0x20,0x40,0x84,0xfe,0x48,0x86,0x42,0x78,0x88,0x48,0x50,0x20,0x50,0x8e,0x4,
++0x8,0x8,0xff,0x8,0x4,0x7e,0x0,0x4,0xfe,0x8,0x2c,0x2a,0x48,0x89,0x28,0x10,0x20,0x24,0xfe,0x20,0x8,0xfc,0x0,0x4,0xfe,0x10,0x58,0x56,0x92,0x10,0x50,0x20,
++0x20,0x3e,0x49,0x9f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x8,0xff,0x8,0x8,0x10,0x20,0x80,0xfc,0x20,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x1f,0x10,0x10,0x1f,0x1,0x1,0x3f,0x21,0x21,0x3f,0x1,0x1,0x1,0x7f,0x0,0x10,0xf8,0x10,0x10,0xf0,0x0,0x8,0xfc,0x8,0x8,0xf8,0x0,0x10,0xfc,0x4,0x0,
++0x0,0x78,0x4f,0x51,0x51,0x62,0x55,0x48,0x4b,0x4a,0x6b,0x52,0x43,0x42,0x42,0x42,0x80,0x84,0xfe,0x0,0xf8,0x40,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x28,0x10,
++0x0,0x78,0x4a,0x51,0x51,0x60,0x57,0x49,0x49,0x49,0x69,0x51,0x41,0x41,0x42,0x44,0x20,0x24,0xfe,0x20,0x44,0xfe,0x44,0x7c,0x44,0x7c,0x44,0x44,0x54,0x48,0x80,0x7e,
++0x10,0x17,0x20,0x22,0x41,0xf8,0x10,0x2f,0x41,0xf9,0x42,0x1,0x18,0xe0,0x41,0x6,0x1c,0xe0,0x0,0x48,0x50,0x20,0x84,0xfe,0x8,0x8,0x10,0x10,0xa0,0x40,0xb0,0x8,
++0x0,0x7d,0x44,0x76,0x55,0x55,0xfe,0x83,0x7d,0x45,0x7d,0x45,0x7d,0x45,0x56,0x48,0x20,0xfe,0x40,0x7c,0x90,0x7c,0x0,0x7c,0x44,0x7c,0x44,0x7c,0x44,0x4c,0x80,0x7e,
++0x0,0x8,0xfd,0x10,0x10,0x21,0x22,0x7c,0xa4,0x27,0x24,0x24,0x24,0x3c,0x20,0x0,0x40,0x20,0xfc,0x88,0x88,0x54,0x22,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,
++0x1,0x21,0x21,0x21,0x3f,0x24,0x4,0xf,0x10,0x24,0x42,0x1,0x1,0x3,0x1c,0xe0,0x0,0x8,0x8,0x8,0xf8,0x8,0x0,0xfc,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,
++0x8,0x1c,0xf3,0x10,0x11,0xff,0x11,0x31,0x39,0x54,0x51,0x90,0x12,0x12,0x14,0x10,0x20,0x24,0xfe,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x28,0xfc,0x40,0xa4,0xa2,0x8a,0x78,
++0x2,0x81,0x60,0x2f,0x1,0x2,0xe4,0x29,0x22,0x24,0x29,0x22,0x25,0x50,0x8f,0x0,0x10,0x20,0x48,0xfc,0x0,0x88,0xd0,0x60,0x40,0xe0,0x58,0x48,0x40,0x86,0xfc,0x0,
++0x0,0x78,0x49,0x54,0x52,0x60,0x50,0x4e,0x4a,0x4a,0x6a,0x52,0x42,0x45,0x48,0x40,0x44,0x28,0xfe,0x20,0x40,0xa4,0x38,0x50,0x98,0x34,0x54,0x90,0x30,0x6,0xfc,0x0,
++0x1,0x21,0x21,0x3f,0x1,0x41,0x7f,0x0,0x3f,0x0,0x0,0xff,0x9,0x11,0x25,0x2,0x0,0x8,0x8,0xf8,0x0,0x4,0xfc,0x0,0xf8,0x0,0x4,0xfe,0x20,0x18,0x8,0x0,
++0x0,0x7e,0x2,0x4,0x8,0xa,0xc,0x39,0xc9,0xa,0xc,0x8,0x8,0x8,0x28,0x10,0x20,0x20,0x20,0x20,0x20,0xb0,0xa8,0x24,0x26,0x22,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x11,0x11,0x11,0xfd,0x10,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x10,0x50,0x23,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x4,0x24,0x24,0x24,0x24,0x24,0x50,0x8c,0x4,
++0x10,0x12,0x1f,0x28,0x45,0xbf,0x4,0x4,0xff,0x4,0x4,0x3f,0x4,0x8,0x10,0x60,0x40,0x44,0x7e,0xa0,0x10,0xf0,0x10,0x14,0xfe,0x10,0x10,0xf0,0x10,0x0,0x0,0x0,
++0x8,0x8,0xff,0x9,0x7f,0x0,0x1f,0x10,0xff,0x10,0x1f,0x9,0x18,0x2a,0xcc,0x8,0x20,0x24,0xfe,0x20,0xfc,0x0,0xf0,0x14,0xfe,0x10,0xf0,0x8,0x90,0x60,0x1c,0x8,
++0x10,0x10,0x11,0x13,0xfc,0x10,0x31,0x3a,0x54,0x51,0x92,0x14,0x10,0x10,0x11,0x16,0x40,0x90,0x8,0xfc,0x4,0x88,0x6,0x82,0xf8,0x8,0x90,0x50,0x20,0x50,0x8e,0x4,
++0x0,0x8,0x7d,0x4b,0x48,0x48,0x49,0x4a,0x48,0x49,0x4a,0x7c,0x48,0x0,0x1,0x6,0x40,0x90,0x8,0xfc,0x4,0x88,0x6,0x82,0xf8,0x8,0x90,0x50,0x20,0x50,0x8e,0x4,
++0x20,0x20,0x27,0x44,0x49,0xf1,0x12,0x26,0x4a,0xfa,0x42,0x2,0x1a,0xe2,0x42,0x2,0x40,0x20,0xfe,0x2,0x4,0xfe,0x20,0x44,0xfe,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,
++0x0,0x9,0xfc,0x10,0x10,0x11,0x11,0x7d,0x11,0x11,0x11,0x1d,0xf0,0x40,0x1,0x6,0x20,0x24,0xa4,0xa8,0x24,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x20,0x58,0x84,0x2,
++0x1,0x1,0x3f,0x1,0x7f,0x42,0x84,0xf,0x1,0x2,0x3f,0x1,0x9,0x11,0x25,0x2,0x0,0x10,0xf8,0x0,0xfe,0x2,0x24,0xc0,0x0,0x10,0xf8,0x8,0x20,0x18,0x8,0x0,
++0x10,0x11,0x10,0x1c,0x20,0x21,0x7d,0x91,0x11,0x7d,0x11,0x11,0x14,0x18,0x11,0x6,0x20,0x24,0xa4,0xa8,0x24,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x20,0x58,0x84,0x2,
++0x2,0x7,0x38,0x20,0x20,0x3e,0x22,0x22,0x22,0x3e,0x22,0x20,0x21,0x42,0x84,0x0,0x8,0x1c,0xe0,0x80,0x80,0x84,0xfe,0x88,0x88,0x88,0x88,0x88,0x8,0x8,0x8,0x8,
++0x20,0x23,0x22,0x23,0x22,0xfb,0x20,0x27,0x20,0x24,0x22,0x39,0xe2,0x44,0x2,0x1,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x4,0xbe,0x84,0xa4,0x94,0x8c,0x94,0xa4,0x94,0x8,
++0x8,0x8,0x8,0x10,0x12,0x32,0x53,0x9e,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10,0x40,0x40,0x40,0x40,0x48,0x7c,0xc8,0x48,0x48,0x68,0x50,0x40,0x42,0x2,0xfe,0x0,
++0x2,0x1,0x7f,0x40,0x80,0x8,0x8,0x8,0x9,0xe,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0xfe,0x2,0x4,0x0,0x20,0x60,0x80,0x0,0x0,0x0,0x8,0x8,0xf8,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x25,0x25,0x27,0x25,0x45,0x29,0x11,0x29,0x45,0x84,0x0,0x20,0x20,0x20,0x20,0x24,0x3e,0xe4,0x24,0x24,0x34,0x28,0x20,0x22,0x2,0xfe,0x0,
++0x21,0x21,0x27,0x21,0x20,0xf8,0x21,0x22,0x2d,0x20,0x23,0x3a,0xe2,0x42,0x3,0x2,0x10,0x10,0xfc,0x10,0x40,0xa0,0x10,0xe,0xf4,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x8a,0x52,0x2f,0x62,0xaf,0x2a,0x2a,0x6a,0xaf,0x22,0x27,0x2a,0x32,0x22,0xa2,0x42,0x10,0x10,0x9c,0x24,0xc8,0xbe,0xa2,0xaa,0xaa,0x2a,0x2a,0xaa,0x8,0x14,0x22,0x42,
++0x10,0x12,0x11,0x11,0xfc,0x10,0x17,0x19,0x31,0xd1,0x11,0x11,0x11,0x12,0x54,0x20,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x28,0x28,0x46,0x84,0x0,0x86,0x7c,0x0,
++0x0,0x7d,0x45,0x45,0x45,0x7d,0x10,0x13,0x5c,0x51,0x50,0x51,0x5e,0xf0,0x41,0x0,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x0,0xdc,0x44,0x54,0xcc,0x54,0x64,0x44,0x54,0x88,
++0x0,0x7d,0x44,0x44,0x44,0x7d,0x12,0x10,0x5d,0x51,0x51,0x51,0x5d,0xf1,0x41,0x1,0x20,0x24,0xa8,0x70,0xa8,0x26,0x24,0x60,0xfc,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x4,0x3e,0x24,0x24,0x24,0x3d,0x27,0x24,0x24,0x3d,0x25,0x25,0x25,0x45,0x95,0x9,0x20,0x20,0x40,0x40,0x88,0x4,0xfe,0x2,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x8,0xff,0x8,0x2,0x4,0x8,0x3f,0x0,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x20,0x24,0xfe,0x20,0x0,0x20,0x10,0xf8,0x8,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x10,0x10,0x10,0xfc,0x11,0x17,0x18,0x30,0xd1,0x11,0x11,0x11,0x11,0x51,0x21,0x20,0x20,0x40,0x40,0x88,0x4,0xfe,0x2,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x2,0x2,0x4,0x8,0x10,0x20,0x7f,0x0,0x0,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x0,0x20,0x10,0x8,0xfc,0x4,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x1,0x1,0x7f,0x1,0x3f,0x2,0xff,0x4,0x9,0x39,0xc5,0x3,0xd,0x11,0x5,0x2,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x40,0x20,0x30,0x4e,0x84,0x60,0x10,0x0,0x0,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x57,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x10,0x90,0x10,0x10,0x14,0xfe,0x10,0x10,0x28,0x28,0x28,0x28,0x44,0x54,0x82,0x0,
++0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x2,0x2,0x4,0x6,0x9,0x31,0xc0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x80,0x80,0x40,0x40,0x30,0xe,0x4,0x0,
++0x1,0x1,0xff,0x1,0x2,0x4,0xa,0x31,0xc0,0x2,0x29,0x29,0x28,0x48,0x7,0x0,0x0,0x4,0xfe,0x0,0x80,0x40,0x30,0xe,0x4,0x0,0x10,0x8,0x24,0x24,0xe0,0x0,
++0x0,0x40,0x30,0x10,0x87,0x60,0x20,0x8,0x10,0x20,0xe1,0x21,0x22,0x24,0x28,0x20,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0xa0,0xa0,0x10,0x90,0x48,0x4e,0x4,0x0,
++0x20,0x23,0x22,0x22,0x22,0xfa,0x22,0x22,0x2f,0x22,0x22,0x3a,0xe2,0x44,0x4,0x8,0x8,0xfc,0x8,0x8,0x88,0x48,0x48,0x8,0xfe,0x8,0x8,0x8,0x8,0x8,0x28,0x10,
++0x20,0x20,0x20,0x2e,0xf3,0x2a,0x2a,0x3a,0x6a,0xa4,0x2a,0x29,0x31,0x20,0xa0,0x40,0x40,0x50,0x44,0xfe,0x90,0x90,0xfc,0x90,0x90,0xfc,0x90,0x90,0x94,0xfe,0x80,0x80,
++0x1,0x2,0x6,0x9,0x37,0xc0,0x0,0x1f,0x10,0x11,0x11,0x11,0x12,0x4,0x8,0x30,0x0,0x80,0x40,0x30,0xce,0x44,0x90,0xf8,0x10,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x0,0x0,0x1f,0x10,0x90,0x5f,0x51,0x19,0x35,0x52,0x92,0x15,0x25,0x28,0x40,0x0,0x80,0x44,0xfe,0x20,0x28,0x7e,0x48,0xc8,0x7e,0x48,0x48,0x7e,0x48,0x48,0x7e,0x40,
++0x0,0x40,0x30,0x1f,0x81,0x69,0x29,0x6,0x12,0x25,0xe9,0x30,0x20,0x20,0x20,0x20,0x20,0x28,0x20,0x7e,0x48,0xc8,0x7c,0x48,0x48,0x7c,0x48,0x48,0x48,0x7e,0x40,0x40,
++0x10,0x10,0x13,0x10,0x10,0xfc,0x17,0x10,0x10,0x10,0x10,0x1d,0xf1,0x43,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x40,0x40,0x80,0x90,0x8,0x4,0xfc,0x4,0x0,
++0x10,0x17,0x10,0x17,0xfd,0x15,0x3d,0x37,0x50,0x53,0x92,0x13,0x12,0x13,0x10,0x1f,0x40,0xfe,0x0,0xfc,0x14,0xf4,0x14,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,
++0x1,0x0,0x1f,0x10,0x92,0x51,0x50,0x11,0x36,0x50,0x92,0x11,0x20,0x21,0x42,0xc,0x0,0x84,0xfe,0x40,0x48,0x50,0xa0,0x10,0x4c,0x40,0x48,0x50,0xa0,0x10,0xe,0x4,
++0x40,0x3f,0x10,0x7,0x84,0x67,0x20,0xb,0x12,0x23,0xe2,0x23,0x20,0x2f,0x20,0x20,0x4,0xfe,0xa0,0xfc,0xa4,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0x40,
++0x40,0x2f,0x20,0x7,0x4,0xe7,0x20,0x23,0x22,0x23,0x22,0x23,0x28,0x37,0x20,0x0,0x4,0xfe,0xa0,0xfc,0xa4,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0x40,
++0x0,0x40,0x32,0x11,0x0,0x0,0xf1,0x16,0x10,0x12,0x11,0x10,0x14,0x19,0x12,0x4,0x40,0x40,0x48,0x50,0xa0,0x90,0xe,0x44,0x40,0x48,0x50,0xa0,0xa0,0x10,0xe,0x4,
++0x10,0x10,0x11,0x11,0x11,0xfd,0x11,0x11,0x11,0x11,0x11,0x1d,0xf1,0x40,0xf,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,0x0,0xfe,0x0,
++0x4,0xe,0xf0,0x11,0x10,0x7c,0x11,0x10,0xfe,0x10,0x11,0x10,0x10,0x13,0x10,0xf,0x20,0xa4,0xa8,0x30,0x50,0x8c,0x24,0x20,0xa8,0xb0,0x20,0x50,0x8c,0x6,0x2,0xfe,
++0x20,0x10,0x11,0x1,0xfd,0x9,0x11,0x35,0x59,0x95,0x11,0x11,0x11,0x10,0x17,0x10,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,0x0,0xfe,0x0,
++0x0,0x8,0xfd,0x11,0x11,0x20,0x23,0x7c,0xa4,0x25,0x25,0x26,0x24,0x3c,0x25,0x2,0x20,0x20,0x24,0x24,0xfc,0x80,0xfe,0x80,0xa0,0x24,0xa8,0x50,0x50,0x88,0xe,0x4,
++0x10,0x13,0x12,0x14,0xfc,0x11,0x14,0x18,0x33,0xd0,0x10,0x10,0x11,0x12,0x50,0x20,0x0,0xfe,0x2,0x54,0x88,0x4,0x20,0x24,0xfe,0x20,0x70,0xa8,0x26,0x24,0x20,0x20,
++0x0,0x8,0x7f,0x4a,0x4a,0x49,0x49,0x48,0x48,0x48,0x48,0x78,0x49,0x2,0x4,0x18,0x0,0x0,0xf8,0x8,0x8,0x10,0x10,0xa0,0xa0,0x40,0xa0,0xa0,0x10,0x10,0xe,0x4,
++0x1,0x21,0x21,0x3f,0x8,0xff,0x9,0x9,0x15,0x15,0x2a,0x22,0x44,0x84,0x8,0x30,0x0,0x8,0x8,0xf8,0x4,0xfe,0x0,0x10,0x30,0x40,0x80,0x80,0x40,0x20,0x1c,0x8,
++0x0,0x23,0x18,0x8,0x80,0x60,0x23,0x8,0x10,0x21,0xe1,0x22,0x24,0x29,0x22,0x20,0x0,0xf8,0x10,0x20,0x40,0x84,0xfe,0xa4,0xa4,0x24,0x44,0x44,0x84,0x4,0x28,0x10,
++0x10,0x10,0x13,0x12,0x13,0xfe,0x13,0x12,0x13,0x12,0x13,0x1d,0xf5,0x45,0x9,0x1,0x40,0x24,0xfe,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x13,0x12,0xff,0x12,0x17,0x1a,0x33,0xd2,0x13,0x15,0x15,0x15,0x59,0x21,0x40,0x24,0xfe,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x11,0x9,0x7f,0x40,0x9f,0x10,0x10,0x1f,0x1,0x1,0x7f,0x1,0x1,0xff,0x0,0x0,0x10,0x20,0xfe,0x2,0xf4,0x10,0x10,0xf0,0x0,0x8,0xfc,0x0,0x4,0xfe,0x0,
++0x1,0x9,0x5,0x7f,0x40,0x8f,0x8,0x8,0xf,0x1,0xff,0x3,0x5,0x19,0x61,0x1,0x0,0x20,0x40,0xfe,0x2,0xe4,0x20,0x20,0xe0,0x4,0xfe,0x80,0x60,0x1c,0x8,0x0,
++0x8,0x7d,0x48,0x4b,0x4a,0x7d,0x49,0x49,0x49,0x78,0x48,0x49,0x48,0x48,0x8b,0x18,0x20,0x24,0xa8,0xfe,0x2,0xfc,0x4,0x4,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,
++0x1,0x0,0x3f,0x20,0x2f,0x20,0x3f,0x20,0x2f,0x20,0x2f,0x28,0x48,0x48,0x8f,0x8,0x0,0x88,0xfc,0x80,0xf8,0x88,0xfe,0x88,0xf8,0x80,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x57,0x3a,0x13,0xfe,0x13,0x32,0x3b,0x56,0x53,0x93,0x15,0x15,0x19,0x11,0x40,0x24,0xfe,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x8,0xa,0x9,0x11,0x10,0x37,0x54,0x94,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x40,0x48,0x48,0x50,0x44,0xfe,0x4,0x4,0xf4,0x14,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x10,0x22,0x79,0x49,0x48,0x7b,0x4a,0x7a,0x4a,0x4a,0xfa,0x2a,0x4a,0x8a,0x2a,0x12,0x40,0x48,0x48,0x50,0x44,0xfe,0x4,0x4,0xf4,0x94,0x94,0x94,0xf4,0x84,0x14,0x8,
++0x0,0x42,0x31,0x11,0x80,0x67,0x24,0xc,0x15,0x25,0xe5,0x25,0x25,0x25,0x24,0x24,0x40,0x48,0x48,0x50,0x44,0xfe,0x4,0x4,0xf4,0x14,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x10,0x12,0x11,0x7d,0x10,0x13,0xfe,0x12,0x52,0x5e,0x52,0x72,0x52,0x48,0x87,0x0,0x40,0x48,0x48,0x50,0x44,0xfe,0x4,0xf4,0x94,0x94,0x94,0xf4,0xc,0x6,0xfc,0x0,
++0x23,0x10,0x40,0x23,0x9,0x71,0x11,0x12,0x14,0x1,0x9,0xa,0x12,0x4,0x18,0x60,0xf0,0x40,0x84,0xfe,0x24,0x24,0x24,0x54,0x88,0x0,0x10,0xa0,0x80,0x60,0x1c,0x8,
++0x11,0x11,0x11,0x13,0xfc,0x12,0x13,0x1c,0x30,0xd3,0x10,0x12,0x12,0x13,0x50,0x20,0x0,0x0,0x4,0xfe,0x4,0x44,0xe4,0x84,0xa4,0xf4,0x84,0xa4,0xa4,0xe4,0x14,0x8,
++0x0,0x40,0x37,0x10,0x83,0x60,0x2f,0x9,0x11,0x23,0xe2,0x25,0x28,0x30,0x20,0x20,0x80,0x88,0xfc,0x80,0xf8,0x80,0xfe,0x8,0x8,0xfe,0x8,0x8,0x88,0x88,0x28,0x10,
++0x40,0x30,0x17,0x0,0x82,0x61,0x20,0xf,0x14,0x24,0xe7,0x24,0x24,0x24,0x27,0x24,0x8,0x3c,0xc0,0x4,0x4c,0x50,0x84,0x3e,0x4,0x4,0xbc,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x21,0x23,0x4c,0xf8,0x10,0x21,0x46,0xf8,0x47,0x0,0x19,0xe2,0x45,0x0,0x80,0x80,0xf8,0x10,0xa0,0x40,0xa0,0x10,0x4e,0x44,0xfc,0x40,0x50,0x4c,0x44,0x80,
++0x4,0x4,0xff,0x14,0x1f,0x28,0x4f,0x11,0x21,0xff,0x1,0x11,0x11,0x1f,0x0,0x0,0x40,0x44,0xfe,0x40,0xfc,0x4,0xf4,0x4,0x14,0xfc,0x4,0x14,0x14,0xf4,0x14,0x8,
++0x10,0x10,0x10,0x10,0xfc,0x12,0x39,0x34,0x51,0x52,0x94,0x11,0x11,0x12,0x14,0x18,0xa0,0xa0,0xa0,0xa0,0xa4,0xac,0xb0,0xa0,0xb0,0xa8,0xa8,0x20,0x22,0x22,0x1e,0x0,
++0x1,0x41,0x29,0x25,0x5,0x1,0xe3,0x25,0x29,0x21,0x22,0x24,0x28,0x50,0x88,0x7,0x40,0x40,0x48,0x58,0x60,0x40,0x60,0x50,0x50,0x40,0x44,0x44,0x3c,0x0,0x6,0xfc,
++0x42,0x32,0x13,0x5,0x89,0x63,0x24,0x0,0x1f,0x20,0xe4,0x24,0x27,0x20,0x20,0x20,0x0,0x4,0xfe,0x4,0x24,0xf4,0x84,0x94,0xfc,0x84,0x94,0x94,0xf4,0x4,0x14,0x8,
++0x1,0x79,0x49,0x52,0x55,0x61,0x52,0x48,0x4f,0x48,0x69,0x51,0x41,0x40,0x40,0x40,0x0,0x4,0xfe,0x4,0x24,0xf4,0x44,0x54,0xfc,0x44,0x54,0x54,0xf4,0x4,0x14,0x8,
++0x0,0x40,0x30,0x10,0x7,0x0,0xf0,0x11,0x10,0x10,0x10,0x10,0x14,0x18,0x10,0x0,0x8,0x8,0x8,0x8,0xfe,0x8,0x8,0x8,0x88,0x88,0x8,0x8,0x8,0x8,0x28,0x10,
++0x1,0x1,0xff,0x2,0x4,0xf,0x18,0x2f,0xc8,0xf,0x8,0xff,0x4,0x8,0x1f,0x0,0x0,0x4,0xfe,0x80,0x40,0xe0,0x10,0xee,0x4,0xe0,0x4,0xfe,0x0,0x20,0xf0,0x10,
++0x10,0x10,0x50,0x53,0x7c,0x90,0x17,0x18,0x30,0xd7,0x11,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x10,0x14,0xfe,0x10,0x90,0x90,0x10,0x50,0x20,
++0x4,0x4,0xff,0x4,0x7a,0x49,0x4b,0x78,0x4f,0x49,0x7a,0x4d,0x48,0x49,0x8a,0x18,0x20,0x24,0xfe,0x20,0x48,0x50,0xfc,0x80,0xfe,0x10,0x4e,0x54,0xe0,0x58,0x48,0xc0,
++0x0,0x7a,0x49,0x4b,0x48,0x7f,0x49,0x4a,0x4d,0x78,0x49,0x49,0x48,0x4f,0x88,0x18,0x40,0x48,0x50,0xfc,0x80,0xfe,0x10,0xe,0xf4,0x10,0x14,0xfe,0x4,0xe4,0x14,0x8,
++0x1,0x0,0x1f,0x11,0x91,0x53,0x55,0x10,0x30,0x50,0x93,0x2c,0x20,0x40,0x80,0x0,0x0,0x84,0xfe,0x0,0x0,0xf8,0x10,0xa0,0x40,0xb0,0x8e,0x64,0x20,0x80,0x60,0x20,
++0x11,0x9,0x7f,0x2,0xff,0x4,0x9,0x3f,0xc0,0x1f,0x0,0x1f,0x0,0x1f,0x10,0x1f,0x10,0x20,0xfc,0x0,0xfe,0x40,0x20,0xfe,0x4,0xf0,0x0,0xf0,0x0,0xf0,0x10,0xf0,
++0x12,0x11,0x10,0x13,0xfc,0x10,0x33,0x3a,0x56,0x53,0x90,0x11,0x12,0x14,0x18,0x10,0x8,0x10,0xa0,0xf8,0x48,0x48,0xf8,0x40,0x44,0xfe,0xc4,0x44,0x54,0x48,0x40,0x40,
++0x1,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x10,0x3f,0x54,0x94,0x14,0x24,0x4a,0x11,0x4,0x84,0x24,0x24,0x24,0x24,0x24,0x24,0xa4,0xe4,0xa4,0x84,0x84,0x84,0x94,0x8,
++0x0,0x7d,0x45,0x45,0x45,0x7d,0x11,0x11,0x5c,0x51,0x52,0x54,0x5c,0xf1,0x42,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0xfe,0xa4,0xa4,0xa4,0x24,0x54,0x88,
++0x22,0x21,0x38,0x43,0x80,0x78,0x23,0x22,0xfa,0x23,0x20,0x29,0x32,0x24,0x8,0x0,0x8,0x10,0xa0,0xf8,0x48,0x48,0xf8,0x40,0x44,0xfe,0xc4,0x44,0x54,0x48,0x40,0x40,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x15,0x19,0x30,0xd7,0x10,0x11,0x11,0x11,0x52,0x24,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xfe,0x20,0x28,0x3c,0x20,0xa6,0x7c,
++0x3e,0x23,0x22,0x3e,0x22,0x22,0x3e,0x0,0xff,0x8,0x2a,0x2f,0x28,0x58,0x49,0x87,0x4,0xfe,0x20,0x44,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0x20,0x58,0x84,0x6,0xfc,
++0x0,0x7c,0x45,0x44,0x44,0x7f,0x12,0x14,0x5d,0x51,0x51,0x51,0x5d,0xf1,0x40,0x0,0x40,0x20,0xfc,0x88,0x50,0xfe,0x22,0x24,0xfe,0x24,0x24,0x24,0x24,0x2c,0x20,0x20,
++0x0,0x8,0x7d,0x48,0x48,0x4b,0x4a,0x4c,0x49,0x49,0x49,0x79,0x49,0x1,0x0,0x0,0x40,0x20,0xfc,0x88,0x50,0xfe,0x22,0x24,0xfe,0x24,0x24,0x24,0x24,0x2c,0x20,0x20,
++0x10,0x10,0x10,0x20,0x2f,0x62,0xa2,0x24,0x24,0x28,0x2b,0x30,0x20,0x20,0x20,0x20,0x80,0x80,0x80,0x88,0xfc,0xa0,0xa0,0x90,0x90,0x88,0xee,0x84,0x80,0x80,0x80,0x80,
++0x8,0x8,0x7e,0x8,0xfe,0x8,0x14,0x22,0xdf,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x20,0x28,0xfc,0x20,0xfe,0x20,0x50,0x8e,0xf4,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x0,0x13,0x78,0x57,0x54,0x5b,0x52,0x53,0x52,0x53,0x50,0x77,0x52,0x3,0x4,0x8,0x50,0xf8,0x40,0xfe,0x2,0xfc,0x48,0xf8,0x48,0xf8,0x0,0xfc,0x44,0x70,0xc0,0x7e,
++0x10,0x11,0x11,0x11,0x59,0x55,0x51,0x91,0x10,0x11,0x12,0x14,0x10,0x11,0x12,0x10,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0xfe,0xa4,0xa4,0xa4,0x24,0x54,0x88,
++0x2,0x41,0x30,0x17,0x80,0x60,0x27,0xc,0x14,0x27,0xe0,0x21,0x22,0x24,0x28,0x20,0x8,0x10,0xa0,0xf8,0x48,0x48,0xf8,0x40,0x44,0xfe,0xc4,0x44,0x54,0x48,0x40,0x40,
++0x41,0x22,0x14,0x7f,0x9,0x9,0x7f,0x48,0x49,0x7f,0x19,0x29,0x4d,0x8a,0x8,0x8,0x4,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0xa4,0x24,0x24,0x24,0x4,0x14,0x8,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x24,0x24,0x3f,0x24,0x24,0x24,0x24,0x44,0x87,0x0,0x8,0xfc,0x8,0x8,0xf8,0x90,0x90,0x94,0xfe,0x90,0x90,0xf0,0x0,0x8,0xfc,0x0,
++0x0,0x7f,0x1,0x1,0x1,0x1,0xff,0x1,0x2,0x2,0x4,0x4,0x8,0x10,0x20,0xc0,0x8,0xfc,0x0,0x0,0x0,0x4,0xfe,0x0,0x80,0x80,0x40,0x40,0x20,0x10,0xe,0x4,
++0x40,0x37,0x10,0x0,0x8f,0x61,0x21,0xa,0x14,0x28,0xe2,0x22,0x24,0x20,0x22,0x21,0x8,0xfc,0x80,0x84,0xfe,0x20,0x10,0x90,0x8e,0x84,0xd0,0xa8,0xa8,0x88,0x80,0x0,
++0x10,0x10,0x17,0x10,0x13,0xfe,0x13,0x12,0x13,0x12,0x1f,0xf2,0x4f,0x1,0x3,0x4,0x40,0x44,0xfe,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x10,0xc,0x4,
++0x0,0x3f,0x21,0x21,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x21,0x21,0x3f,0x20,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,
++0x4,0xe,0xf8,0x8,0xb,0x8,0xff,0x8,0xa,0x3f,0x22,0x22,0x22,0x3e,0x22,0x0,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0xf8,0x88,
++0x10,0x10,0x17,0x10,0x58,0x54,0x57,0x90,0x10,0x13,0x12,0x12,0x12,0x12,0x13,0x12,0x10,0x78,0xc0,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0xc,0xf3,0x10,0x10,0x13,0xfe,0x10,0x11,0x7d,0x46,0x45,0x45,0x46,0x7c,0x45,0x0,0x8,0xfc,0x40,0x44,0xfe,0x90,0x88,0x48,0x46,0x44,0x48,0x64,0x54,0x54,0x40,0x80,
++0x8,0x7c,0x48,0x4b,0x4a,0x7a,0x4a,0x4b,0x4a,0x7a,0x4a,0x4f,0x48,0x49,0x8b,0x1c,0x90,0x90,0x94,0xfe,0x94,0x94,0x94,0xfc,0x94,0x94,0x94,0xfe,0x0,0x10,0xc,0x4,
++0x10,0x10,0x10,0x10,0xfc,0x12,0x15,0x18,0x31,0xd2,0x14,0x11,0x11,0x12,0x54,0x28,0xa0,0xa0,0xa0,0xa0,0xa4,0xac,0xb0,0xa0,0xb0,0xa8,0xa8,0x20,0x22,0x22,0x1e,0x0,
++0x8,0xf,0x18,0x24,0x43,0xc,0x30,0xc1,0x1,0x3f,0x1,0x9,0x11,0x21,0x5,0x2,0x0,0xf0,0x20,0x40,0x80,0x60,0x1e,0x4,0x10,0xf8,0x0,0x20,0x18,0x8,0x0,0x0,
++0x0,0x47,0x31,0x11,0x1,0x2,0xf4,0x1b,0x12,0x12,0x12,0x13,0x12,0x28,0x47,0x0,0x8,0xfc,0x8,0x8,0x8,0x28,0x10,0xf8,0x8,0x8,0x8,0xf8,0x8,0x6,0xfc,0x0,
++0x8,0x7c,0x48,0x48,0x48,0x7a,0x49,0x48,0x49,0x7a,0x4c,0x49,0x49,0x7a,0x44,0x8,0xa0,0xa0,0xa0,0xa0,0xa4,0xac,0xb0,0xa0,0xb0,0xa8,0xa8,0x20,0x22,0x22,0x1e,0x0,
++0x4,0x7e,0x44,0x44,0x44,0x7e,0x11,0x10,0x5d,0x52,0x54,0x51,0x5d,0xf2,0x44,0x8,0xa0,0xa0,0xa0,0xa0,0xa4,0xac,0xb0,0xa0,0xb0,0xa8,0xa8,0x20,0x22,0x22,0x1e,0x0,
++0x4,0x7e,0x44,0x54,0x54,0x54,0x54,0x55,0x55,0x55,0x55,0x55,0x11,0x29,0x45,0x81,0x40,0x40,0x44,0x7e,0x40,0x40,0x44,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x11,0x11,0x1d,0x21,0x22,0x7c,0x93,0x10,0x7c,0x10,0x10,0x15,0x19,0x12,0x4,0x40,0x40,0x50,0xf8,0x40,0x40,0x48,0xfc,0x40,0x40,0xa0,0xa0,0x10,0x10,0xe,0x4,
++0x10,0x10,0x14,0x7e,0x54,0x54,0x54,0x55,0x55,0x55,0x55,0x55,0x5d,0x11,0x11,0x11,0x40,0x40,0x44,0x7e,0x40,0x40,0x44,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x3f,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x82,0x1,0x8,0xfc,0x0,0x0,0x4,0xfe,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,
++0x0,0x8,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x7a,0x44,0x8,0x0,0x10,0x38,0xc0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x13,0x10,0x14,0x58,0x50,0x51,0x96,0x10,0x11,0x10,0x28,0x24,0x40,0x87,0x0,0x0,0xfc,0x8,0x10,0x20,0x58,0x86,0x2,0x8,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x40,0x30,0x17,0x0,0x80,0x60,0x20,0x8,0x10,0x20,0xe0,0x20,0x20,0x20,0x21,0x20,0x0,0x4,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x0,0x0,0xfb,0x8,0x10,0x20,0x47,0x78,0x8,0x8,0x48,0x2b,0x10,0x28,0x47,0x80,0x10,0x38,0xc0,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x50,0xf8,0x0,0x6,0xfc,0x0,
++0x10,0x10,0x17,0x20,0x23,0x62,0xa3,0x20,0x2f,0x28,0x33,0x20,0x20,0x20,0x21,0x20,0x80,0x48,0xfc,0x0,0xf8,0x8,0xf8,0x0,0xfe,0x2,0xf4,0x40,0x40,0x40,0x40,0x80,
++0x2,0x1,0x7f,0x0,0x1f,0x10,0x1f,0x0,0x7f,0x40,0x9f,0x1,0x1,0x1,0x5,0x2,0x0,0x8,0xfc,0x10,0xf8,0x10,0xf0,0x0,0xfe,0x2,0xf4,0x0,0x0,0x0,0x0,0x0,
++0x1,0x0,0x3f,0x20,0x3f,0x22,0x24,0x28,0x2f,0x21,0x21,0x2a,0x44,0x4a,0x91,0x20,0x0,0x88,0xfc,0x0,0x1c,0x70,0x10,0x14,0xfe,0x10,0x10,0x10,0x7c,0x0,0x6,0xfc,
++0x20,0x20,0x2f,0x21,0xf2,0x24,0x28,0x2f,0x31,0xe1,0x29,0x25,0x22,0x25,0xa8,0x50,0x0,0xc,0x70,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x7c,0x0,0x0,0x86,0x7c,
++0x10,0x20,0x7f,0x48,0x49,0x6a,0x5c,0x4f,0xf8,0x48,0x48,0x6c,0x5a,0x49,0x8a,0x1c,0x0,0xc,0xf0,0x90,0x10,0x14,0x7e,0x90,0x90,0x90,0x90,0xfc,0x80,0x0,0x86,0x7c,
++0x3,0x40,0x30,0x10,0x3,0x2,0xf2,0x13,0x12,0x12,0x13,0x12,0x12,0x2a,0x44,0x3,0xf8,0x10,0xa0,0x48,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x48,0x68,0x50,0x6,0xfc,
++0x10,0x13,0x12,0x12,0xfe,0x12,0x32,0x3a,0x56,0x52,0x92,0x12,0x12,0x12,0x12,0x12,0x4,0xfe,0x4,0x4,0xf4,0x4,0x4,0xf4,0x94,0x94,0x94,0xf4,0x4,0x4,0x14,0x8,
++0x4,0xfe,0x28,0x28,0xfe,0xaa,0xaa,0xae,0xc2,0x82,0x82,0xfe,0x82,0x82,0xfe,0x82,0x0,0xfe,0x82,0x82,0xfe,0x82,0x82,0xba,0xaa,0xaa,0xaa,0xba,0x82,0x82,0x8a,0x84,
++0x0,0x0,0x7b,0x49,0x48,0x4f,0x78,0x4b,0x4a,0x7b,0x4a,0x4b,0x48,0x7b,0x40,0xf,0x80,0x48,0xfc,0x10,0xa4,0xfe,0x0,0xf8,0x48,0xf8,0x48,0xf8,0x40,0xf8,0x40,0xfe,
++0x0,0x7f,0x40,0x40,0x5f,0x40,0x40,0x4f,0x48,0x48,0x48,0x48,0x4f,0x48,0x40,0x40,0x4,0xfe,0x4,0x24,0xf4,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0xe4,0x24,0x14,0x8,
++0x20,0x23,0x3e,0x42,0x82,0x7a,0x22,0x22,0xfa,0x22,0x22,0x26,0x2a,0x32,0x22,0x2,0x4,0xfe,0x4,0x4,0xf4,0x4,0x4,0xf4,0x94,0x94,0x94,0xf4,0x4,0x4,0x14,0x8,
++0x2,0x3f,0x22,0x22,0x32,0x2a,0x2a,0x22,0xff,0x22,0x22,0x22,0x22,0x42,0x4a,0x85,0x4,0xc,0x10,0x20,0x40,0x84,0xc,0x10,0xa0,0x42,0x6,0x8,0x10,0x20,0x40,0x80,
++0x2,0x1,0x3f,0x8,0x4,0xff,0x0,0x1f,0x11,0x1f,0x11,0x1f,0x1,0x3f,0x1,0x7f,0x0,0x10,0xf8,0x20,0x44,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0xf8,0x0,0xfc,
++0x20,0x27,0x20,0x20,0xf8,0x27,0x74,0x6c,0xa7,0x24,0x24,0x27,0x24,0x24,0x24,0x24,0x0,0xf8,0x10,0xa0,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x54,0x48,
++0x20,0x27,0x20,0x20,0xf8,0x27,0x24,0x2c,0x37,0xe4,0x24,0x27,0x24,0x24,0xa4,0x44,0x0,0xf8,0x10,0xa0,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x54,0x48,
++0x10,0x14,0x3e,0x49,0x84,0x3f,0x20,0x2f,0x20,0x27,0x24,0x24,0x24,0x27,0x20,0x20,0x40,0x44,0xfe,0x20,0x10,0xf8,0x8,0xe8,0x8,0xc8,0x48,0x48,0x48,0xc8,0x28,0x10,
++0x10,0x10,0x20,0x27,0x48,0xf9,0x12,0x27,0x41,0xf9,0x41,0x1,0x1a,0xe2,0x44,0x8,0x80,0x40,0x48,0xfc,0x80,0x10,0x8,0xfc,0x24,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x1,0x0,0x1f,0x10,0x97,0x50,0x50,0x17,0x34,0x57,0xd4,0x17,0x24,0x24,0x44,0x4,0x0,0x84,0xfe,0x0,0xf8,0xa0,0x44,0xfe,0x44,0xfc,0x44,0xfc,0x44,0x44,0x54,0x48,
++0x10,0x10,0x11,0x22,0x24,0x6b,0xb0,0x27,0x24,0x27,0x24,0x27,0x24,0x24,0x24,0x25,0x80,0x80,0x40,0x20,0x10,0xee,0x4,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0x88,0xa8,0x90,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x15,0x1a,0x33,0xd0,0x11,0x10,0x10,0x10,0x51,0x26,0x10,0xf8,0x10,0x10,0x10,0x14,0xe,0x0,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x0,0x0,0x8,0x6,0x22,0x18,0x8,0x0,0xff,0x0,0x1,0x1,0x2,0x4,0x18,0x60,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x84,0xfe,0x80,0x0,0x60,0x10,0x8,0xc,0x4,
++0x0,0x43,0x30,0x17,0x0,0x1,0xf2,0x17,0x11,0x11,0x12,0x12,0x14,0x28,0x44,0x3,0x18,0xe0,0x40,0xfc,0xe0,0x50,0x4e,0xf4,0x10,0x38,0x8,0x8,0x50,0x20,0x6,0xfc,
++0x0,0xf,0x8,0x8,0x8,0x8,0x8,0x78,0x40,0x40,0x40,0x40,0x40,0x40,0x7f,0x40,0x20,0xf0,0x20,0x20,0x20,0x20,0x24,0x3e,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x3f,0x1,0x1,0xff,0x5,0x9,0x11,0x27,0x44,0x4,0x4,0x8,0x8,0x10,0x60,0xf0,0x0,0x0,0x4,0xfe,0x40,0x20,0x10,0xce,0x44,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x2,0x1,0x7f,0x44,0x88,0x11,0x1,0x1,0xff,0x1,0x2,0x2,0x4,0x8,0x30,0xc0,0x0,0x0,0xfe,0x42,0x34,0x10,0x40,0x24,0xfe,0x0,0x80,0x80,0x40,0x30,0xe,0x4,
++0x0,0x7f,0x44,0x47,0x4c,0x52,0x41,0x42,0x46,0x49,0x70,0x46,0x41,0x40,0x7f,0x40,0x4,0xfe,0x4,0xe4,0x44,0x84,0x4,0x84,0x44,0x3c,0x94,0x4,0x4,0x84,0xfc,0x4,
++0x8,0x8,0x10,0x27,0x48,0x8,0x17,0x30,0x52,0x92,0x12,0x12,0x15,0x14,0x18,0x10,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x48,0x7c,0x40,0x40,0x40,0xc6,0x7c,0x0,
++0x0,0x40,0x30,0x11,0x2,0x5,0xf0,0x10,0x17,0x10,0x11,0x12,0x14,0x29,0x44,0x3,0x40,0x40,0xa0,0x10,0xe,0xf4,0x40,0x48,0xfc,0x40,0x50,0x4c,0x44,0x40,0x86,0xfc,
++0x0,0x40,0x31,0x12,0x84,0x48,0x57,0x0,0x10,0x2f,0xe0,0x22,0x24,0x28,0x22,0x21,0x80,0x80,0x40,0x20,0x10,0x2e,0xf4,0x80,0x88,0xfc,0x80,0xa0,0x98,0x88,0x80,0x0,
++0x0,0x3f,0x20,0x3f,0x21,0x2f,0x21,0x3f,0x21,0x22,0x27,0x2c,0x57,0x64,0x87,0x4,0x8,0xfc,0x8,0xf8,0x10,0xe0,0x44,0xfe,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x1,0x1,0x1,0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x8,0x7c,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0xf,0x0,0x40,0x40,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x8,0xf,0x10,0x20,0x7f,0xa1,0x21,0x21,0x3f,0x22,0x2,0x4,0x4,0x8,0x10,0x60,0x0,0xe0,0x40,0x88,0xfc,0x8,0x8,0x8,0xf8,0x88,0xa0,0x90,0x92,0x82,0x7e,0x0,
++0x0,0x44,0x34,0x14,0x87,0x40,0x4f,0x8,0x17,0x24,0xe4,0x24,0x24,0x24,0x24,0x24,0x40,0x44,0x44,0x44,0xfc,0x0,0xfe,0x84,0xfe,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xc,
++0x0,0x7f,0x40,0x40,0x40,0x7f,0x41,0x42,0x44,0x48,0x50,0x60,0x42,0x41,0x7f,0x40,0x4,0xfe,0x84,0x84,0x94,0xfc,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x11,0xfd,0x13,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x11,0x51,0x21,0xa0,0x90,0x84,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x10,0x14,0xff,0x0,0x0,
++0xc,0xf1,0x10,0x14,0xfe,0x10,0x38,0x56,0x92,0x38,0x28,0x28,0x2a,0x4c,0x48,0x81,0x4,0xfe,0x20,0x44,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0x20,0x58,0x44,0x82,0x2,
++0x0,0x78,0x4c,0x4a,0x48,0x78,0x4e,0x4a,0x4a,0x7a,0x4a,0x4a,0x4a,0x4d,0x88,0x18,0x8,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x84,0xa8,0x90,0x8c,0xc4,0x80,0x86,0x7c,
++0x10,0x11,0x10,0x14,0x7f,0x55,0x55,0x55,0x55,0x7c,0x50,0x14,0x1d,0xf5,0x42,0x4,0x0,0x8,0x90,0x8,0xfc,0x8,0x8,0x8,0xf8,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x40,0x34,0x13,0x1,0xfc,0x8,0x17,0x39,0x55,0x91,0x11,0x11,0x11,0x12,0x14,0x10,0x4,0x7e,0x44,0x44,0x7c,0x44,0x44,0x7c,0x42,0x54,0x48,0x66,0x42,0x80,0x46,0x3c,
++0x3,0x42,0x32,0x13,0x2,0x2,0xf3,0x12,0x12,0x12,0x12,0x13,0x12,0x28,0x44,0x3,0xf8,0x8,0x8,0xf8,0x8,0x8,0xfc,0x8,0xd0,0x20,0x90,0xc,0x4,0x0,0x6,0xfc,
++0x0,0x3f,0x2,0x2,0xff,0x4,0x4,0x8,0x10,0x2f,0x48,0x88,0x8,0x8,0xf,0x8,0x10,0xf8,0x0,0x4,0xfe,0x40,0x40,0x20,0x10,0xee,0x24,0x20,0x20,0x20,0xe0,0x20,
++0x1,0x1,0x1,0xff,0x1,0x21,0x21,0x21,0x21,0x21,0x3f,0x21,0x1,0x1,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x2,0x2,0xfe,0x0,
++0x7f,0x41,0x7f,0x52,0x7f,0x52,0x7f,0x52,0xa1,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x78,0x48,0x4c,0x80,0xfc,0x48,0x30,0x4e,0x84,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x30,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x11,0x1d,0x31,0xd7,0x11,0x11,0x11,0x11,0x50,0x20,0x80,0x80,0x84,0xfe,0x20,0x20,0x24,0x3e,0xe4,0x24,0x34,0x28,0x22,0x2,0xfe,0x0,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x14,0x18,0x37,0xd0,0x10,0x10,0x10,0x10,0x50,0x20,0x10,0x38,0xc0,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x8,0x7d,0x48,0x48,0x4b,0x7a,0x4a,0x4a,0x4b,0x7a,0x48,0x48,0x49,0x49,0x8a,0x1c,0x0,0x10,0xa0,0x8,0xfc,0x8,0x8,0x8,0xf8,0xa8,0xa0,0xa0,0x20,0x22,0x22,0x1e,
++0x10,0x20,0x7c,0x45,0x55,0x46,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0x14,0x8,0x40,0x20,0x0,0xfe,0x2,0x4,0x80,0x88,0x90,0xe0,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x7c,0x44,0x49,0x49,0x52,0x48,0x48,0x44,0x44,0x44,0x68,0x50,0x40,0x40,0x40,0x40,0x20,0x0,0xfe,0x2,0x4,0x80,0x88,0x90,0xe0,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x4,0x7e,0x4,0x24,0x24,0x27,0x24,0x24,0x3e,0x2,0x2,0x1a,0xe2,0x42,0x15,0xa,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x50,0x50,0x50,0x90,0x88,0xe,0x4,
++0x4,0x7e,0x4,0x25,0x25,0x26,0x24,0x24,0x3e,0x2,0x2,0x1a,0xe2,0x42,0x14,0x8,0x40,0x20,0x0,0xfe,0x2,0x4,0x80,0x88,0x90,0xe0,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x20,0x27,0x24,0x25,0xfd,0x26,0x75,0x6d,0xa4,0x24,0x26,0x25,0x24,0x24,0x24,0x24,0x10,0x90,0x94,0x7e,0x10,0x24,0x7e,0xa4,0xa4,0xbc,0xa4,0x24,0x3c,0x24,0x24,0x2c,
++0x0,0x3f,0x2,0x11,0xd,0x4,0x2,0x2,0xff,0x4,0x8,0x18,0x6,0x1,0x6,0x18,0x78,0x80,0x8,0x18,0x20,0x40,0x0,0x4,0xfe,0x10,0x10,0x20,0x40,0x80,0x60,0x10,
++0x10,0x10,0x13,0x10,0xfc,0x11,0x15,0x19,0x33,0xd5,0x19,0x11,0x11,0x11,0x51,0x21,0x0,0x4,0xfe,0x80,0x80,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0xb,0x7c,0x48,0x4f,0x49,0x49,0x49,0x4f,0x49,0x49,0x79,0x4f,0x0,0x0,0x7,0x38,0xc0,0x40,0x44,0xfe,0x50,0x50,0x54,0xfe,0x50,0x50,0x54,0xfe,0x40,0x48,0xfc,
++0x10,0x10,0x10,0x13,0xfa,0x14,0x11,0x1a,0x31,0xd0,0x10,0x11,0x12,0x12,0x52,0x21,0x40,0x20,0x0,0xfe,0x2,0x94,0x8,0x4,0xf8,0x10,0x60,0x80,0x0,0x2,0x2,0xfe,
++0x0,0x8,0x7c,0x4b,0x48,0x48,0x4f,0x48,0x48,0x48,0x4f,0x78,0x48,0x0,0xf,0x0,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x10,0x11,0x7c,0x54,0x57,0x54,0x54,0x7c,0x51,0x14,0x1c,0xf4,0x43,0x0,0x20,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x40,0x30,0x17,0x80,0x60,0x2f,0x8,0x10,0x20,0xe7,0x20,0x20,0x20,0x2f,0x20,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x10,0x11,0xfc,0x24,0x27,0x24,0x24,0x44,0x29,0x10,0x28,0x44,0x87,0x0,0x20,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x7f,0x8,0x8,0xf,0x8,0x8,0xa,0x11,0x11,0x10,0x24,0x28,0x30,0x60,0x0,0x8,0xfc,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x22,0x22,0x1e,0x0,
++0x40,0x30,0x10,0x7,0xfc,0x8,0x10,0x37,0x58,0x94,0x11,0x11,0x12,0x14,0x10,0x10,0x40,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0xe0,0xd0,0x48,0x4e,0x44,0x40,0x40,0x40,
++0x0,0x7f,0x3,0x5,0x19,0x61,0x1,0x7f,0x1,0x9,0x9,0x9,0x9,0x9,0xff,0x0,0x8,0xfc,0x0,0x60,0x18,0x8,0x0,0xfc,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,
++0x8,0x8,0x8,0x10,0x1f,0x21,0x21,0x62,0x92,0xa,0x4,0x8,0x10,0x20,0x40,0x0,0x40,0x40,0x40,0x40,0x40,0x60,0x50,0x48,0x46,0x42,0x40,0x40,0x40,0x40,0x40,0x40,
++0x8,0xfc,0x3,0x2,0x7d,0x49,0x49,0x49,0x7a,0x2,0x4d,0x48,0x10,0xf9,0x2,0x4,0x40,0x20,0xfe,0x2,0x4,0xde,0x54,0x54,0x54,0x54,0x5c,0x94,0x90,0x12,0xe,0x0,
++0x1,0xff,0x4,0x14,0x34,0x44,0x3f,0x0,0x1f,0x10,0x1f,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x40,0x50,0x4c,0x44,0xf0,0x10,0xf0,0x0,0xf8,0x8,0x8,0x88,0x50,0x20,
++0x40,0x3f,0x10,0x2,0x86,0x68,0x27,0x8,0x17,0x24,0xe7,0x20,0x20,0x20,0x20,0x20,0x44,0xfe,0xa0,0xa8,0xa6,0xa2,0xf8,0x8,0xf8,0x0,0xfc,0x4,0x4,0x44,0x28,0x10,
++0x8,0xfd,0x10,0x10,0x10,0x13,0x7c,0x10,0x10,0x10,0x10,0x1c,0xf1,0x41,0x2,0x4,0x8,0xfc,0x0,0x0,0x4,0xfe,0x90,0x90,0x90,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x8,0x7d,0x0,0x0,0x4,0xfe,0x28,0x28,0x28,0x28,0x28,0x2a,0x2c,0x48,0x80,0x1,0x4,0xfe,0x10,0x24,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0xa4,0x58,0x44,0x82,0x2,
++0x2,0x2,0x2,0x2,0x7f,0x2,0x2,0xe,0x2,0x5,0x4,0x4,0x8,0x8,0x30,0xc0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0xa0,0xa2,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x13,0x16,0x5a,0x51,0x50,0x90,0x13,0x10,0x10,0x28,0x25,0x45,0x82,0x4,0x40,0x20,0xfe,0x2,0x14,0xf8,0x0,0x8,0xfc,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x2,0x1,0x7f,0x40,0x80,0x1f,0x0,0x0,0x7f,0x4,0x4,0x4,0x8,0x8,0x10,0x60,0x0,0x0,0xfe,0x2,0x24,0xf0,0x0,0x8,0xfc,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x8,0xff,0x12,0x15,0x21,0x21,0x79,0xaa,0x2a,0x2d,0x28,0x28,0x39,0x22,0x4,0x40,0x20,0xfe,0x2,0x4,0xde,0x54,0x54,0x54,0x54,0x5c,0x94,0x90,0x12,0xe,0x0,
++0x10,0x10,0x11,0x12,0xfc,0x13,0x12,0x1a,0x32,0xd3,0x12,0x10,0x10,0x11,0x52,0x24,0x80,0x80,0xf8,0x10,0x24,0xfe,0x44,0x44,0x44,0xfc,0x64,0xa0,0xa2,0x22,0x1e,0x0,
++0x0,0x8,0x7d,0x4a,0x4c,0x4b,0x4a,0x7a,0x4a,0x4b,0x4a,0x48,0x78,0x49,0x2,0x4,0x80,0x80,0xf8,0x10,0x24,0xfe,0x44,0x44,0x44,0xfc,0x64,0xa0,0xa2,0x22,0x1e,0x0,
++0x10,0x10,0x21,0x7d,0x46,0x44,0x44,0x7c,0x47,0x44,0x44,0x44,0x7d,0x45,0x2,0x4,0x40,0x20,0xfe,0x2,0x14,0xf8,0x0,0x4,0xfe,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x20,0x20,0x27,0x34,0xaa,0xa2,0xa3,0xa4,0x24,0x24,0x2a,0x21,0x21,0x22,0x24,0x28,0x80,0x40,0xfe,0x2,0x4,0x0,0xbc,0xa4,0xa4,0xb4,0xa8,0x20,0x22,0x22,0x1e,0x0,
++0x2,0x1,0x7f,0x40,0x90,0x1e,0x12,0x12,0x22,0x32,0x4a,0x4,0x8,0x10,0x20,0x40,0x0,0x0,0xfe,0x2,0x4,0xf8,0x88,0x88,0x88,0xa8,0x90,0x80,0x82,0x82,0x7e,0x0,
++0x20,0x20,0x23,0x22,0xfd,0x49,0x49,0x49,0x4a,0x92,0x55,0x20,0x50,0x49,0x82,0x4,0x40,0x20,0xfe,0x2,0x4,0xde,0x54,0x54,0x54,0x5c,0x54,0x90,0x92,0x12,0xe,0x0,
++0x0,0x0,0xff,0x2,0x2,0x2,0x3,0x2,0x2,0x4,0x4,0x4,0x8,0x10,0x20,0x40,0x0,0x4,0xfe,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xa0,0x40,
++0x8,0x7c,0x4b,0x4a,0x4d,0x79,0x49,0x49,0x4a,0x7a,0x4d,0x48,0x48,0x49,0x4a,0x9c,0x40,0x20,0xfe,0x2,0x4,0xdc,0x54,0x54,0x54,0x54,0x5c,0x94,0x90,0x12,0xe,0x0,
++0x0,0x40,0x37,0x10,0x80,0x60,0x20,0xb,0x10,0x20,0xe0,0x20,0x20,0x20,0x2f,0x20,0x0,0x8,0xfc,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x7f,0x1,0x1,0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x2,0x1,0x1,0x0,0xff,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xf,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x30,0x38,0x57,0x50,0x90,0x10,0x10,0x10,0x1f,0x10,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x7f,0x40,0x42,0x62,0x54,0x54,0x48,0x48,0x54,0x52,0x62,0x61,0x42,0x40,0x40,0x4,0xfe,0x4,0xc,0x8c,0x54,0x54,0x24,0x24,0x54,0x4c,0x8c,0x4,0x4,0x14,0x8,
++0x8,0x8,0x10,0x27,0x40,0x8,0x8,0x10,0x37,0x50,0x90,0x10,0x10,0x10,0x1f,0x10,0x80,0x40,0x8,0xfc,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x0,0x7,0x78,0x48,0x48,0x48,0x78,0x4f,0x48,0x48,0x48,0x78,0x40,0xf,0x0,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x10,0xa,0xff,0x20,0x20,0x26,0x38,0x20,0x0,0x3f,0x1,0x1f,0x1,0x1,0xff,0x0,0x4,0x7e,0x44,0x7c,0x44,0x7c,0x44,0x8c,0x0,0xf8,0x0,0xf0,0x0,0x4,0xfe,0x0,
++0x2,0x1,0xff,0x10,0x10,0x10,0x10,0x1f,0x0,0x2,0x11,0x50,0x50,0x90,0xf,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x84,0x92,0x12,0xf0,0x0,
++0x2,0x1,0x7f,0x10,0x10,0x10,0x1f,0x2,0x2,0xff,0x4,0x8,0x4,0x3,0x4,0x38,0x0,0x8,0xfc,0x0,0x0,0x20,0xf0,0x0,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x0,0x0,0x0,0x3f,0x20,0x3f,0x24,0x24,0x3f,0x29,0x31,0x2a,0x24,0x4a,0x91,0x2,0x80,0xa0,0x90,0xfc,0x80,0x80,0x84,0x44,0xc8,0x48,0x30,0x20,0x60,0x92,0xa,0x6,
++0x1,0x21,0x3f,0x0,0x7c,0x11,0xff,0x39,0x55,0x11,0xfd,0x24,0x48,0x30,0x29,0x46,0x0,0x8,0xf8,0x20,0x44,0xfe,0x24,0xfc,0x24,0xfc,0x44,0x60,0xa8,0xa2,0x22,0x1e,
++0x12,0x12,0x2a,0x4a,0x8a,0x1f,0x20,0x7f,0xa0,0x2f,0x29,0x29,0x29,0x29,0x30,0x20,0x10,0x10,0x90,0xa4,0xbe,0xc4,0x24,0xa8,0x28,0x28,0x10,0x50,0xa8,0x28,0x46,0x84,
++0x8,0xf,0x10,0x20,0x5f,0x10,0x10,0x13,0x12,0x12,0x12,0x12,0x22,0x22,0x41,0x80,0x0,0xe0,0x40,0x88,0xfc,0x0,0x10,0xf8,0x10,0x10,0x50,0x20,0x2,0x2,0xfe,0x0,
++0x1,0x1,0x1,0xff,0x1,0x1,0x3f,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x4,0xfe,0x0,0x10,0xf8,0x0,0x4,0xfe,0x4,0x4,0x4,0x28,0x10,0x0,
++0x0,0x40,0x2f,0x20,0x0,0x7,0xe0,0x20,0x2f,0x20,0x20,0x20,0x20,0x50,0x8f,0x0,0x80,0x88,0xfc,0x80,0x90,0xf8,0x80,0x88,0xfc,0x88,0x88,0xa8,0x90,0x86,0xfc,0x0,
++0x10,0x10,0x11,0x12,0xff,0x12,0x32,0x3a,0x56,0x52,0x92,0x12,0x12,0x14,0x14,0x18,0x80,0xf8,0x10,0x24,0xfe,0x0,0x8,0xfc,0x88,0x88,0xa8,0x90,0x82,0x82,0x7e,0x0,
++0x0,0x7f,0x41,0x41,0x5f,0x41,0x4f,0x41,0x5f,0x41,0x41,0x41,0x41,0x41,0x7f,0x40,0x4,0xfe,0x4,0x24,0xf4,0x4,0xe4,0x4,0xf4,0x14,0x14,0x54,0x24,0x4,0xfc,0x4,
++0x0,0x8,0x7c,0x49,0x49,0x4b,0x4d,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0x1,0x1,0x80,0xa0,0x94,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x10,0x14,0xfe,0x0,0x0,
++0x10,0x10,0x10,0x11,0x59,0x57,0x55,0x91,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x80,0xa0,0x94,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x10,0x14,0xfe,0x0,0x0,
++0x0,0x10,0xc,0x4,0x0,0xff,0x1,0x1,0x2,0x2,0x4,0x8,0x10,0x20,0x40,0x0,0x80,0x80,0x80,0x80,0x84,0xfe,0x4,0x4,0x4,0x84,0x64,0x24,0x4,0x4,0x28,0x10,
++0x0,0x44,0x24,0x24,0x88,0x5f,0x42,0x4,0x28,0x5f,0xc0,0x40,0x43,0x5c,0x48,0x40,0x40,0x50,0x44,0xfe,0x90,0x90,0xfc,0x90,0x90,0xfc,0x90,0x90,0x94,0xfe,0x80,0x80,
++0x10,0x10,0x20,0x21,0x49,0xfb,0x15,0x21,0x41,0xfd,0x1,0x1,0x1d,0xe1,0x41,0x1,0x80,0xa0,0x94,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x10,0x14,0xfe,0x0,0x0,
++0x8,0x8,0xff,0x9,0x1,0x7f,0x1,0x3f,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x20,0x24,0xfe,0x20,0x8,0xfc,0x0,0xf8,0x0,0xfc,0x4,0x4,0x4,0x28,0x10,0x0,
++0x4,0x4,0xff,0x4,0x1f,0x1,0x7f,0x5,0x19,0x2,0xff,0x4,0x8,0x7,0x4,0x18,0x40,0x44,0xfe,0x40,0xf0,0x0,0xfc,0x40,0x30,0x4,0xfe,0x20,0x40,0x80,0x60,0x10,
++0x0,0x3f,0x1,0x1,0xff,0x5,0x9,0x31,0x5,0xff,0x4,0x8,0x4,0x3,0xc,0x30,0x30,0xc0,0x0,0x4,0xfe,0x40,0x38,0x10,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x8,0x8,0x8,0x17,0x10,0x30,0x57,0x90,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x40,0x44,0xfe,0x44,0x44,0x54,0x48,0x40,0x40,
++0x8,0xa,0x9,0x10,0x17,0x30,0x50,0x90,0x10,0x10,0x11,0x11,0x12,0x14,0x18,0x10,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0xc4,0xa4,0x14,0x4,0x4,0x4,0x28,0x10,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x2f,0x21,0x21,0x2f,0x21,0x21,0x5f,0x41,0x81,0x0,0x8,0xfc,0x8,0x8,0xf8,0x20,0xf0,0x8,0xfc,0x0,0x8,0xfc,0x0,0x2,0x2,0xfe,
++0x10,0x10,0x20,0x27,0x48,0xf8,0x17,0x20,0x40,0xff,0x0,0x0,0x1c,0xe0,0x40,0x0,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x40,0x44,0xfe,0x44,0x44,0x54,0x48,0x40,0x40,
++0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0xff,0x3,0x5,0x9,0x11,0x21,0x41,0x1,0x1,0x0,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x80,0x40,0x20,0x10,0xe,0x4,0x0,0x0,
++0x8,0x8,0xff,0x8,0x3f,0x21,0x3f,0x20,0x3f,0x20,0x3f,0x44,0x56,0x95,0x24,0xc,0x20,0x24,0xfe,0x20,0x8,0x8,0x8,0xfe,0x8,0x48,0x28,0x28,0x8,0x8,0x28,0x10,
++0x0,0x8,0x7c,0x4b,0x48,0x48,0x48,0x4f,0x48,0x48,0x49,0x7a,0x44,0x8,0x0,0x0,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0xe0,0x50,0x50,0x4e,0x44,0x40,0x40,
++0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x0,0xff,0x10,0x12,0x11,0x10,0x14,0x18,0x10,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,0x4,0xfe,0x0,0x20,0x40,0x80,0x60,0x1c,0x8,
++0x0,0x3f,0x21,0x3f,0x21,0x3f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x10,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x0,0xb,0x7e,0x4a,0x4b,0x4a,0x4a,0x4b,0x48,0x4f,0x4a,0x7a,0x4a,0x2,0x3,0x2,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x0,0xfe,0x88,0x50,0x20,0x90,0xe,0x4,
++0x6,0xf8,0x11,0x11,0xff,0x39,0x55,0x91,0x11,0xfe,0x24,0x44,0x28,0x11,0x2a,0x44,0x40,0x84,0xfe,0x24,0x24,0xfc,0x24,0x44,0xfc,0x40,0x60,0xa0,0xa8,0x22,0x22,0x1e,
++0x8,0x8,0x8,0x10,0x17,0x30,0x52,0x92,0x11,0x11,0x10,0x10,0x10,0x1f,0x10,0x10,0x80,0x40,0x40,0x8,0xfc,0x0,0x8,0x8,0x10,0x10,0x90,0xa0,0x24,0xfe,0x0,0x0,
++0x0,0x47,0x34,0x17,0x84,0x67,0x20,0xb,0x12,0x23,0xe2,0x23,0x22,0x22,0x22,0x22,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x47,0x24,0x27,0x4,0x7,0xe0,0x23,0x22,0x23,0x22,0x23,0x2a,0x32,0x22,0x2,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x1,0x3f,0x21,0x21,0x3f,0x20,0x3f,0x20,0x3f,0x24,0x24,0x55,0x54,0xa4,0x14,0x8,0x8,0x88,0x8,0x8,0x8,0xfe,0x8,0x48,0x28,0x28,0x8,0x8,0x88,0x8,0x28,0x10,
++0x3f,0x21,0x3f,0x20,0x3f,0x20,0x3f,0x24,0x56,0x95,0x2c,0x2,0x51,0x50,0x90,0xf,0x8,0x8,0x8,0xfe,0x8,0x48,0x28,0x28,0x8,0x28,0x10,0x0,0x84,0x92,0x12,0xf0,
++0x0,0x0,0x7f,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0xff,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0x28,0x10,0x0,0x0,0x4,0xfe,0x0,
++0x1,0x0,0x1f,0x10,0x93,0x52,0x53,0x12,0x33,0x50,0xd7,0x14,0x24,0x24,0x4f,0x0,0x0,0x84,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0xa4,0xa4,0xa4,0xfe,0x0,
++0x0,0x43,0x32,0x12,0x83,0x62,0x22,0xb,0x10,0x27,0xe4,0x24,0x24,0x24,0x2f,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xfc,0xa4,0xa4,0xa4,0xa4,0xfe,0x0,
++0x10,0x10,0x10,0x14,0x7f,0x54,0x54,0x54,0x54,0x7c,0x50,0x14,0x1e,0xe2,0x41,0x2,0x40,0x20,0x20,0x4,0xfe,0x88,0x88,0x88,0x50,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x2,0x1,0x1,0xff,0x10,0x8,0x8,0x4,0x4,0x2,0x1,0x2,0x4,0x8,0x30,0xc0,0x0,0x0,0x4,0xfe,0x10,0x10,0x20,0x20,0x40,0x80,0x0,0x80,0x60,0x10,0xe,0x4,
++0x20,0x1b,0x48,0x40,0x5f,0x44,0x47,0x44,0x47,0x44,0x44,0x5f,0x40,0x40,0x40,0x40,0x4,0xfe,0x4,0x24,0xf4,0x44,0xc4,0x44,0xc4,0x44,0x44,0xf4,0x44,0x44,0x54,0x8,
++0x10,0x10,0x20,0x20,0x4f,0xfa,0x11,0x21,0x40,0xfc,0x0,0x0,0x1c,0xe1,0x42,0x4,0x80,0x40,0x40,0x4,0xfe,0x8,0x10,0x10,0xa0,0xa0,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x1,0x9,0x7d,0x49,0x4a,0x4c,0x48,0x48,0x49,0x49,0x49,0x7a,0x4c,0x1,0x2,0x0,0x0,0x0,0x4,0xfe,0xa4,0xa4,0xa4,0xa4,0x24,0x24,0x44,0x44,0x84,0x4,0x28,0x10,
++0x8,0x1c,0xf0,0x11,0x12,0xff,0x10,0x33,0x38,0x57,0x50,0x95,0x15,0x19,0x10,0x10,0x40,0x40,0xf8,0x10,0x24,0xfe,0x4,0xfc,0x4,0xfc,0x40,0x24,0x22,0xa,0xf8,0x0,
++0x2,0x1,0x7f,0x8,0x4,0x3,0x1c,0xe2,0x1f,0x1,0x2,0x3f,0x9,0x11,0x25,0x2,0x0,0x8,0xfc,0x20,0x40,0x80,0x70,0x4e,0x80,0x20,0x10,0xf0,0x20,0x18,0x8,0x0,
++0x20,0x1b,0x8,0x40,0x40,0x4f,0x48,0x48,0x48,0x48,0x48,0x4f,0x48,0x40,0x40,0x40,0x4,0xfe,0x4,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0x24,0xe4,0x24,0x4,0x14,0x8,
++0x0,0x10,0x79,0x52,0x54,0x59,0x53,0x50,0x57,0x50,0x54,0x72,0x54,0x0,0x2,0x1,0x20,0xa0,0x10,0x48,0x86,0x14,0xf8,0x0,0xbc,0x84,0xa4,0x94,0xa4,0x84,0x94,0x8,
++0x4,0x4,0x9,0x12,0xe4,0xf,0x0,0x3e,0x2,0x22,0x12,0xa,0x12,0x22,0xa,0x4,0x40,0x40,0x20,0x10,0x4e,0xe0,0x8,0xfc,0x8,0x88,0x48,0x28,0x48,0x88,0x28,0x10,
++0x4,0x4,0x9,0x12,0xe4,0xf,0x0,0x7f,0x8,0x8,0xf,0x9,0x8,0xb,0x1c,0x0,0x40,0x40,0x20,0x10,0x4e,0xe0,0x8,0xfc,0x0,0x20,0xf0,0x20,0xa0,0x22,0x22,0x1e,
++0x10,0x10,0x14,0x12,0xf8,0x10,0x16,0x1a,0x32,0xd2,0x12,0x12,0x12,0x15,0x58,0x20,0x8,0x8,0x8,0x8,0xfe,0x8,0x8,0x48,0x28,0x28,0x8,0x8,0x28,0x16,0xfc,0x0,
++0x10,0x10,0x10,0x14,0x7e,0x54,0x54,0x55,0x7d,0x55,0x11,0x15,0x1d,0xe5,0x41,0x1,0x8,0xfc,0x88,0x88,0x88,0xf8,0x24,0xfe,0x24,0x24,0x54,0x8c,0x4,0x4,0x14,0x8,
++0x0,0x43,0x32,0x12,0x82,0x63,0x20,0xf,0x14,0x24,0xe4,0x24,0x25,0x24,0x24,0x24,0x8,0xfc,0x8,0x8,0x8,0xf8,0x44,0xfe,0x44,0x44,0x44,0xa4,0x14,0x4,0x14,0x8,
++0x2,0x1,0x7f,0x44,0x88,0x1f,0x28,0x8,0xf,0x1,0x3f,0x21,0x22,0x2c,0x20,0x20,0x0,0x0,0xfe,0x42,0x24,0xf0,0x28,0x20,0xe0,0x8,0xfc,0x8,0x88,0x68,0x28,0x10,
++0x4,0xe,0x78,0x8,0x8,0xff,0x8,0x8,0xa,0xc,0x18,0x68,0x9,0xa,0x28,0x10,0x80,0xa0,0x90,0x90,0x84,0xfe,0x80,0x90,0x90,0x60,0x40,0xa0,0x20,0x14,0x14,0xc,
++0x10,0x14,0xfe,0x10,0x7c,0x45,0x7e,0x44,0x7d,0x10,0xfe,0x11,0x10,0x10,0x10,0x10,0x20,0x20,0x50,0x50,0x88,0x16,0x94,0x50,0x10,0x94,0x1e,0xf0,0x10,0x10,0x10,0x10,
++0x2,0x7f,0x48,0x48,0x48,0x7e,0x42,0x42,0x42,0x7e,0x48,0x48,0x4a,0x7f,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0x60,0x50,0x48,0x44,0x44,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x13,0x12,0x12,0xff,0x12,0x17,0x1a,0x32,0xd3,0x12,0x12,0x14,0x14,0x5b,0x20,0x8,0xfc,0x8,0x8,0xf8,0x0,0xfc,0x40,0x88,0xfc,0x20,0xf8,0x20,0x24,0xfe,0x0,
++0x0,0x40,0x37,0x10,0x80,0x60,0x2f,0x8,0x10,0x20,0xe0,0x20,0x21,0x22,0x24,0x28,0x8,0x3c,0xc0,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x0,0x0,0x7f,0x1,0x11,0x11,0x11,0x11,0x29,0x29,0x45,0x85,0x1,0x1,0xff,0x0,0x0,0x8,0xfc,0x0,0x10,0x10,0x10,0x10,0x28,0x28,0x44,0x84,0x0,0x4,0xfe,0x0,
++0x0,0x8,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x48,0x78,0x47,0x0,0x0,0x0,0x40,0x88,0xfc,0x8,0x8,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x10,0x11,0x1d,0x21,0x21,0x7d,0x91,0x11,0x7d,0x10,0x10,0x17,0x18,0x10,0x0,0x40,0x88,0xfc,0x8,0x8,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x2,0x4,0x1f,0x10,0x10,0x10,0x10,0x10,0x10,0x1f,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0xa0,0x40,0x4,0xfe,0x4,0x24,0xf4,0x4,0x28,0x10,
++0x0,0x23,0x18,0x8,0x80,0x6f,0x21,0x9,0x11,0x23,0xe0,0x20,0x20,0x20,0x20,0x20,0x8,0xfc,0x0,0x0,0x4,0xfe,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x88,0x50,0x20,
++0x40,0x37,0x10,0x0,0x2,0xe2,0x22,0x22,0x25,0x29,0x20,0x28,0x30,0x20,0x1f,0x0,0x8,0xfc,0x40,0x40,0x48,0x48,0x48,0x48,0x54,0x64,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x3f,0x20,0x3f,0x20,0x2f,0x21,0x22,0x27,0x20,0x20,0x3f,0x40,0x40,0xbf,0x0,0x8,0xfc,0x8,0xf8,0x0,0xfc,0x0,0x20,0xf0,0x80,0x88,0xfc,0x80,0x84,0xfe,0x0,
++0x0,0x3f,0x2,0x2,0x2,0x2,0x7f,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x20,0xf0,0x0,0x0,0x0,0x8,0xfc,0x80,0x80,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x2,0x2,0x7f,0x2,0x2,0x4,0x4,0x8,0x10,0x60,0x40,0x44,0xfe,0x40,0x0,0xf0,0x0,0x8,0xfc,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x10,0x13,0x10,0x10,0xfd,0x10,0x39,0x35,0x57,0x50,0x91,0x11,0x11,0x11,0x11,0x11,0x8,0xfc,0x80,0x88,0xfc,0x88,0x8,0x8,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x7f,0x4,0x4,0x3f,0x8,0x8,0xff,0x0,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x8,0xfc,0x0,0x20,0xf0,0x20,0x24,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x0,0x1f,0x10,0x10,0x1f,0x0,0x0,0x3f,0x1,0x1,0xff,0x2,0x2,0x4,0x18,0x60,0x10,0xf8,0x10,0x10,0xf0,0x0,0x10,0xf8,0x0,0x4,0xfe,0x80,0x40,0x20,0x1c,0x8,
++0x0,0x1f,0x11,0x11,0x11,0x11,0x11,0xff,0x11,0x11,0x22,0x22,0x3f,0x8,0x10,0x20,0x10,0xf8,0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0xfc,0x10,0x50,0x20,
++0x0,0x2,0x3f,0x0,0x0,0xff,0x4,0x4,0x27,0x24,0x24,0x24,0x27,0xf8,0x40,0x0,0x40,0x50,0x48,0x48,0x40,0xfe,0x40,0x40,0x40,0x40,0x20,0x20,0xa0,0x12,0xa,0x6,
++0x0,0x0,0x7f,0x2,0x2,0x2,0x2,0x3f,0x4,0x4,0x4,0x8,0x8,0x8,0xff,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x10,0xfc,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x0,
++0x10,0x13,0x10,0x10,0xfd,0x10,0x15,0x19,0x37,0xd0,0x11,0x11,0x11,0x11,0x51,0x21,0x8,0xfc,0x80,0x88,0xfc,0x88,0x8,0x8,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0xf,0x11,0x11,0x21,0x41,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x20,0x3f,0x52,0x92,0x7f,0x12,0x12,0xff,0x10,0x1e,0x22,0x52,0xd,0x18,0xe0,0x0,0x8,0xfc,0x90,0x90,0xfc,0x90,0x94,0xfe,0x10,0xfc,0x90,0x94,0xfe,0x10,0x10,0x10,
++0x10,0x10,0x17,0x20,0x20,0x60,0xa0,0x27,0x21,0x21,0x21,0x22,0x22,0x22,0x3f,0x20,0x0,0x8,0xfc,0x80,0x80,0x80,0x88,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0xfe,0x0,
++0x9,0x9,0x9,0x12,0x15,0x31,0x51,0x91,0x1f,0x12,0x12,0x12,0x13,0x10,0x10,0x10,0x0,0x8,0xfc,0x0,0xf8,0x48,0x28,0x8,0xfe,0x48,0x28,0x8,0xfc,0x8,0x28,0x10,
++0x10,0x10,0x11,0x11,0x11,0xfd,0x11,0x11,0x11,0x11,0x10,0x1c,0xf3,0x40,0x0,0x0,0x40,0x88,0xfc,0x8,0x8,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x0,0x0,0x0,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x83,0x0,0x80,0xa0,0x90,0xfc,0x80,0x80,0x84,0x44,0x48,0x48,0x30,0x20,0x60,0x92,0xa,0x6,
++0x3f,0x1,0x7f,0x51,0x89,0x14,0x7,0xc,0x13,0xc,0xf2,0xf,0x2,0x4,0x8,0x30,0xf8,0x0,0xfe,0x12,0x24,0x10,0xe0,0x40,0x80,0x60,0x1e,0xe4,0x20,0x20,0xa0,0x40,
++0x0,0xb,0x7c,0x48,0x49,0x48,0x49,0x79,0x4f,0x48,0x49,0x49,0x79,0x49,0x1,0x1,0x8,0xfc,0x80,0x88,0xfc,0x88,0x8,0x8,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x11,0x11,0x51,0x51,0x7b,0x54,0x90,0x1c,0x31,0xd1,0x12,0x12,0x14,0x10,0x11,0x10,0x0,0x0,0x0,0x4,0xfe,0xa4,0xa4,0xa4,0x24,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x10,0x10,0x10,0x1f,0x24,0x44,0x84,0x8,0x8,0x8,0x10,0x11,0x21,0x42,0x4,0x8,0x0,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x84,0x84,0x84,0x4,0x4,0x4,0x28,0x10,
++0x8,0x8,0xf,0x18,0x26,0x41,0x6,0x1a,0xe2,0x1f,0x2,0x2,0x4,0x4,0x8,0x30,0x0,0x0,0xf0,0x20,0xc0,0x0,0xc0,0x30,0xe,0xf4,0x10,0x10,0x10,0x10,0xa0,0x40,
++0x10,0x13,0x10,0x10,0x59,0x54,0x51,0x91,0x17,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x8,0xfc,0x80,0x88,0xfc,0x88,0x8,0x8,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x43,0x32,0x12,0x3,0x0,0xe7,0x20,0x20,0x2f,0x20,0x20,0x28,0x31,0x22,0x4,0x8,0xfc,0x8,0x8,0xf8,0x0,0xfc,0x40,0x44,0xfe,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x4,0x4,0x3f,0x4,0x4,0x4,0xff,0x0,0xf,0x8,0x8,0xf,0x8,0x8,0xf,0x8,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x20,0xf0,0x20,0x20,0xe0,0x20,0x20,0xe0,0x20,
++0x2,0x7f,0x44,0x44,0x5f,0x51,0x51,0x5f,0x44,0x44,0x7f,0x0,0x24,0x22,0x42,0x80,0x4,0x7e,0x44,0x44,0x44,0x7c,0x40,0x40,0x44,0x44,0x3c,0x0,0x88,0x44,0x42,0x2,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x12,0x12,0x14,0x10,0x8,0x1c,0xe0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0x0,0xff,0x4,0x4,0x4,0x7f,0x44,0x44,0x44,0x44,0x48,0x50,0x40,0x7f,0x40,0x0,0x4,0xfe,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x34,0x4,0x4,0xfc,0x4,
++0x0,0xb,0xfc,0x10,0x10,0x21,0x25,0x7f,0xa5,0x25,0x25,0x25,0x25,0x3d,0x25,0x1,0x4,0xfe,0x50,0x50,0x54,0xfe,0x54,0x54,0x54,0x54,0x5c,0x84,0x4,0x4,0xfc,0x4,
++0x0,0x4,0xfe,0x10,0x10,0x20,0x20,0x7d,0xa6,0x24,0x24,0x24,0x24,0x3c,0x24,0x1,0x40,0x40,0x40,0x7e,0x42,0x82,0x84,0x44,0x24,0x18,0x8,0x10,0x20,0x40,0x80,0x0,
++0x1,0x9,0x7d,0x49,0x4f,0x49,0x4b,0x7b,0x4d,0x49,0x49,0x49,0x79,0x49,0x1,0x1,0x0,0x6,0x38,0x20,0xe0,0x20,0xbe,0x68,0x28,0x28,0x28,0x28,0x48,0x48,0x88,0x8,
++0x0,0x8,0x7f,0x48,0x4b,0x48,0x4b,0x4a,0x4b,0x49,0x4f,0x78,0x4b,0x2,0x2,0x3,0x40,0x48,0xfc,0x40,0xf8,0x0,0xf8,0x8,0xf8,0x10,0xfe,0x8,0xfc,0x8,0x8,0xf8,
++0x0,0x7,0x7a,0x4a,0x4a,0x4a,0x4b,0x4a,0x4a,0x4a,0x4a,0x7a,0x4c,0x8,0x11,0x2,0x8,0xfc,0x8,0x8,0x10,0x20,0x3c,0x84,0x88,0x48,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x11,0x11,0x1d,0x21,0x21,0x7d,0x91,0x11,0x7d,0x12,0x10,0x15,0x1a,0x10,0x0,0x8,0xfc,0x8,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x54,0x54,0xa4,0x24,0x44,0xa8,0x10,
++0x10,0x10,0x57,0x50,0x7c,0x50,0x97,0x1a,0x32,0xd2,0x12,0x12,0x13,0x12,0x13,0x12,0x0,0x4,0xfe,0x90,0x90,0x94,0xfe,0x94,0x94,0x94,0x94,0x8c,0x4,0x4,0xfc,0x4,
++0x9,0x1c,0xf0,0x10,0x11,0xfc,0x13,0x38,0x35,0x51,0x53,0x95,0x11,0x10,0x10,0x10,0x4,0xd8,0x20,0xd8,0x4,0x80,0xfe,0xa0,0x24,0xfe,0x24,0x24,0x34,0x28,0x20,0x20,
++0x2,0x4,0x1f,0x10,0x10,0x1f,0x10,0x1f,0x10,0x10,0x1f,0x2,0x51,0x50,0x90,0xf,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0xf0,0x10,0x10,0xf0,0x0,0x84,0x92,0x12,0xf0,
++0x8,0x6,0x1,0x6,0x3a,0x2,0xff,0x4,0x8,0x1f,0x28,0xc8,0x8,0x8,0x0,0x0,0x30,0xc0,0x0,0xc0,0x38,0x0,0xfe,0x80,0x88,0xfc,0x88,0x88,0xa8,0x90,0x80,0x80,
++0x0,0x3f,0x11,0x9,0x5,0xff,0x3,0x5,0x9,0x31,0x0,0x12,0x51,0x50,0x90,0xf,0xf8,0x0,0x10,0x20,0x44,0xfe,0x80,0x60,0x1c,0x8,0x0,0x0,0x84,0x92,0x12,0xf0,
++0x0,0x78,0x4f,0x48,0x49,0x7a,0x48,0x49,0x4e,0x7a,0x49,0x48,0x49,0x4a,0x48,0x98,0x40,0x44,0xfe,0xe0,0x58,0x48,0xa0,0x10,0x4e,0x48,0x50,0xe0,0x58,0x48,0x40,0xc0,
++0x2,0x2,0x2,0x7,0x4,0x8,0x10,0x24,0x43,0x1,0x0,0x1,0x2,0x4,0x18,0x60,0x0,0x0,0x8,0xfc,0x8,0x8,0x10,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,
++0x11,0x11,0x17,0x11,0x59,0x55,0x5f,0x90,0x13,0x12,0x12,0x13,0x12,0x12,0x13,0x12,0x10,0x10,0xfc,0x10,0x10,0x14,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x13,0x12,0x56,0x5b,0x52,0x93,0x12,0x12,0x13,0x28,0x2a,0x46,0x8a,0x1,0x40,0x88,0xfc,0x8,0x8,0xf8,0x8,0xf8,0x8,0x8,0xf8,0x80,0x60,0x2c,0xa,0xf8,
++0x11,0x10,0x10,0x14,0x59,0x50,0x57,0x90,0x11,0x11,0x13,0x2d,0x29,0x45,0x80,0x0,0x4,0xd8,0x20,0xd8,0x4,0x80,0xfe,0xa0,0x24,0xfe,0x24,0x24,0x34,0x28,0x20,0x20,
++0x40,0x37,0x12,0x1,0x80,0x61,0x23,0x8,0x10,0x27,0xe0,0x3f,0x20,0x21,0x22,0x2c,0x1c,0xe0,0x48,0x50,0x80,0x10,0xf8,0x40,0x84,0xfc,0x40,0xfe,0xa0,0x10,0xe,0x4,
++0x20,0x18,0x8,0x0,0x81,0x61,0x22,0xb,0x14,0x20,0xe0,0x20,0x20,0x21,0x22,0x2c,0x80,0x80,0x84,0xfe,0x4,0x4,0x4,0x8,0xc8,0x50,0x20,0x40,0x80,0x0,0x0,0x0,
++0x0,0x3f,0x20,0x3f,0x24,0x22,0x24,0x28,0x24,0x27,0x28,0x3f,0x40,0x40,0x80,0x0,0x8,0xfc,0x8,0xf8,0x90,0xa0,0x98,0x88,0x80,0xf0,0x84,0xfe,0x80,0x80,0x80,0x80,
++0x21,0x22,0x27,0x24,0xff,0x24,0x77,0x62,0xbf,0x24,0x27,0x24,0x24,0x2a,0x31,0x20,0x10,0x10,0x90,0x94,0xbe,0xc4,0xa4,0x28,0xe8,0x28,0x90,0x90,0xa8,0xa8,0x46,0x84,
++0x2,0x2,0x7f,0x4,0x4,0xb,0x10,0x22,0x1,0xff,0x5,0x9,0x38,0xca,0xc,0x8,0x40,0x28,0xfc,0x80,0xf0,0x84,0x7c,0x0,0x4,0xfe,0x8,0x10,0xa0,0x60,0x1c,0x8,
++0x1,0x0,0x3f,0x22,0x22,0x3f,0x22,0x22,0x23,0x20,0x2f,0x28,0x48,0x48,0x88,0x0,0x0,0x88,0xfc,0x20,0x24,0xfe,0x20,0x20,0xe0,0x88,0xfc,0x88,0x88,0xa8,0x90,0x80,
++0x0,0x0,0xff,0x0,0x8,0x4,0x2,0x2,0x0,0x3,0xc,0x30,0x10,0x0,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x24,0xc4,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x10,0x10,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x10,0x29,0x47,0x85,0x0,0x40,0x84,0xfe,0x4,0x4,0xfc,0x4,0xfc,0x4,0x4,0xfc,0x40,0x20,0x2c,0xa,0xf8,
++0x1,0x7f,0x1,0x3f,0x0,0x1f,0x10,0x1f,0x4,0xff,0x0,0x1f,0x10,0x10,0x1f,0x10,0x8,0xfc,0x0,0xf8,0x0,0xf0,0x10,0xf0,0x44,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x10,0x11,0x11,0x1d,0x21,0x22,0x7c,0x93,0x10,0x7c,0x10,0x10,0x14,0x19,0x12,0x4,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x50,0x50,0x50,0x90,0x92,0x12,0xe,0x0,
++0x0,0x42,0x32,0x13,0x82,0x64,0x20,0xf,0x10,0x20,0xe0,0x21,0x21,0x22,0x24,0x28,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0xa0,0xa0,0xa0,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x7f,0x4,0x4,0x8,0x3f,0x1,0x2,0x4,0x3f,0x1,0x9,0x9,0x11,0x25,0x2,0x38,0xc0,0x0,0x10,0x20,0xc0,0x0,0x20,0x10,0xf8,0x8,0x20,0x10,0x8,0x8,0x0,
++0x0,0x79,0x4b,0x54,0x50,0x63,0x52,0x4b,0x4a,0x4b,0x68,0x51,0x42,0x44,0x41,0x40,0x40,0x50,0x4c,0x44,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x0,0x0,0x7e,0x2,0x43,0x24,0x14,0x14,0x8,0x14,0x12,0x22,0x40,0x80,0x1,0x2,0x40,0x50,0x48,0x40,0xfe,0x40,0x44,0x44,0x48,0x48,0x50,0x20,0x60,0x92,0xa,0x6,
++0x10,0x10,0x21,0x21,0x45,0xf9,0x11,0x21,0x41,0xfd,0x1,0x1,0x1d,0xe1,0x41,0x1,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x0,0x0,0x7b,0x4a,0x4d,0x78,0x48,0x48,0x7f,0x48,0x49,0x49,0x79,0x49,0x1,0x1,0x40,0x20,0xfe,0x22,0xfc,0x20,0xf8,0x20,0xfe,0x20,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x13,0x14,0x7e,0x54,0x54,0x54,0x54,0x7c,0x50,0x14,0x1e,0xf2,0x40,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x30,0x28,0x24,0x24,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x7f,0x40,0x5f,0x51,0x51,0x5f,0x51,0x51,0x5f,0x51,0x41,0x41,0x41,0x7f,0x0,0x8,0xfc,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x0,0x0,0x4,0xfe,0x0,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x3e,0x22,0x3e,0x20,0x3e,0x20,0x3e,0x20,0x20,0x23,0xf0,0x0,0xfe,0x12,0x64,0x10,0xf8,0x8,0xf8,0x0,0xf8,0x88,0x50,0x20,0xde,0x4,
++0x10,0x10,0x23,0xfe,0x25,0x50,0x51,0xfc,0x13,0x10,0x1d,0xf1,0x51,0x11,0x11,0x11,0x40,0x20,0xfe,0x22,0xfc,0x20,0xf8,0x20,0xfe,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x17,0x7c,0x54,0x54,0x57,0x54,0x74,0x57,0x54,0x54,0x57,0x74,0x54,0x4,0x4,0x4,0xbe,0x84,0x84,0x84,0xbc,0x0,0x7c,0xc4,0x44,0x28,0x90,0x28,0x28,0x46,0x84,
++0x10,0x10,0x10,0x55,0x54,0x55,0x54,0x54,0x57,0x54,0x54,0x7c,0x4,0x0,0x1,0x6,0x20,0x20,0x28,0xfc,0x20,0x24,0xa8,0x20,0xfe,0x20,0x20,0x50,0x50,0x88,0xe,0x4,
++0x8,0x8,0x8,0x17,0x10,0x32,0x51,0x90,0x1f,0x10,0x10,0x10,0x11,0x12,0x14,0x18,0x40,0x40,0x48,0xfc,0x40,0x48,0x50,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x0,0x44,0x2c,0x11,0x28,0x49,0x88,0x8,0x1b,0x28,0x48,0x88,0x8,0x8,0x51,0x26,0x20,0x20,0x28,0xfc,0x20,0x24,0xa8,0x20,0xfe,0x20,0x20,0x50,0x50,0x88,0xe,0x4,
++0x0,0xff,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x4,0xfe,0x0,0x0,0x0,0x80,0x40,0x30,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x3f,0x20,0x3f,0x22,0x27,0x24,0x27,0x24,0x27,0x24,0x27,0x22,0x47,0x4a,0x81,0x1e,0xfe,0x0,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xf0,0x20,0xc0,0x3e,
++0x7f,0x2,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x8,0xf,0x14,0x22,0x41,0x6,0x38,0xfc,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x0,0xf0,0x20,0x40,0x80,0x60,0x1c,
++0x0,0xf,0x7c,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x4,0xfe,0x40,0x40,0x40,0x40,0x50,0x48,0x44,0x44,0x40,0x40,0x40,0x40,0x40,0x40,
++0x20,0x20,0x27,0x24,0xfc,0x24,0x27,0x2d,0x35,0xe5,0x25,0x25,0x25,0x29,0xa1,0x40,0x10,0x90,0x10,0x20,0x3e,0x42,0x94,0x10,0x10,0x10,0x28,0x28,0x28,0x44,0x44,0x82,
++0x20,0x20,0x27,0x3c,0x44,0x84,0x7f,0x25,0x25,0xfd,0x25,0x25,0x2d,0x35,0x29,0x0,0x10,0x90,0x10,0x20,0x3e,0x42,0x94,0x10,0x10,0x10,0x28,0x28,0x28,0x44,0x44,0x82,
++0x1,0x11,0x11,0x1f,0x11,0x21,0x1,0xff,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x80,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x10,0x10,0x10,0x20,0x24,0x64,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x27,0x24,0x40,0x40,0x40,0x40,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xfc,0x4,
++0x11,0x10,0x1e,0x25,0x28,0x7e,0xaa,0x2b,0x3e,0x2a,0x2a,0x3f,0x0,0xe,0xf0,0x40,0x4,0x88,0x54,0xfe,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x8,0x8,0x11,0x10,0x22,0x7e,0x8,0x13,0x20,0x7e,0x0,0x0,0x1e,0xe0,0x40,0x0,0x8,0x1c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x0,0x0,0x3f,0x20,0x20,0x3f,0x20,0x2f,0x29,0x29,0x29,0x4f,0x48,0x83,0x0,0x80,0xa0,0x90,0xfc,0x80,0x80,0x84,0x44,0x48,0x48,0x30,0x20,0x60,0x92,0xa,0x6,
++0x8,0x4b,0x49,0x48,0x48,0x48,0x4b,0x1f,0x10,0x11,0x11,0x11,0x12,0x2,0xc,0x30,0x0,0xf8,0x10,0xa0,0x40,0xa0,0x1e,0xf4,0x10,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x9,0x9,0x11,0x23,0x42,0xc,0x13,0x31,0x51,0x97,0x11,0x11,0x11,0x11,0x10,0x10,0x4,0x3e,0x0,0xc0,0x4,0x7e,0x88,0x8,0x8,0xc8,0x8,0x48,0x88,0x8,0x28,0x10,
++0x8,0x12,0x3f,0x23,0x32,0x2a,0x22,0xfe,0x22,0x32,0x2a,0x22,0x22,0x43,0x8a,0x4,0x40,0x20,0x4,0xfe,0x20,0x20,0x40,0x84,0xf8,0x10,0x20,0x40,0x88,0xfc,0x4,0x0,
++0x20,0x1b,0x48,0x41,0x41,0x41,0x5f,0x41,0x43,0x45,0x49,0x51,0x41,0x41,0x40,0x40,0x4,0xfe,0x4,0x4,0x4,0x24,0xf4,0x4,0x84,0x44,0x34,0x14,0x4,0x4,0x14,0x8,
++0x40,0x20,0x2f,0x1,0x82,0x42,0x44,0x7,0x11,0x29,0xe6,0x22,0x25,0x24,0x28,0x30,0x0,0xc,0x70,0x10,0x10,0x50,0x5c,0x50,0x50,0x50,0x54,0xfe,0x0,0x80,0x7e,0x0,
++0x0,0xf8,0x8,0xf,0x8,0x78,0x40,0x41,0x41,0x78,0x8,0x8,0x9,0xb,0x50,0x20,0x80,0x40,0x4,0xfe,0x40,0x40,0x80,0x8,0xf0,0x20,0x40,0x80,0x8,0xfc,0x4,0x0,
++0x21,0x20,0x2f,0x20,0xfb,0x48,0x4f,0x48,0x4b,0x88,0x51,0x22,0x52,0x4c,0x88,0x0,0x10,0xa4,0xfe,0xa0,0xf8,0xa8,0xfe,0xa8,0xf8,0xa0,0xb0,0xa8,0xa8,0xa6,0xa0,0xa0,
++0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x14,0x44,0x34,0x14,0x4,0x4,0xff,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x50,0x44,0x4c,0x50,0x40,0x44,0xfe,0x0,
++0x0,0x78,0x48,0x51,0x52,0x65,0x50,0x4a,0x4a,0x49,0x69,0x51,0x41,0x40,0x4f,0x40,0x40,0x40,0xa0,0x10,0x2e,0xf4,0x0,0x48,0x48,0x48,0x48,0x50,0x50,0x24,0xfe,0x0,
++0x0,0x9,0xfd,0x11,0x11,0x11,0x11,0x7d,0x11,0x11,0x10,0x1c,0xf0,0x41,0x2,0xc,0x8,0xfc,0x8,0x28,0x28,0x28,0x28,0x48,0x48,0x48,0x40,0xa0,0xa0,0x22,0x22,0x1e,
++0x8,0x8,0x9,0xff,0x8,0x9,0x7f,0x55,0x55,0x7f,0x49,0x7f,0x49,0x49,0x43,0x41,0x10,0x10,0x18,0x94,0x10,0x14,0xfe,0x10,0x10,0x10,0x28,0x28,0x28,0x44,0x44,0x82,
++0x0,0xf,0x8,0x8,0xf,0x8,0x8,0xf,0x8,0x8,0xff,0x4,0x8,0x10,0x3f,0x0,0x20,0xf0,0x20,0x20,0xe0,0x20,0x20,0xe0,0x20,0x24,0xfe,0x0,0x20,0x10,0xf8,0x8,
++0x8,0x7c,0x4b,0x4a,0x4b,0x7a,0x4b,0x48,0x48,0x7f,0x49,0x49,0x4a,0x4c,0x49,0x98,0x40,0x88,0xfc,0x8,0xf8,0x8,0xfc,0x48,0x50,0xe0,0x60,0x50,0x4e,0x44,0x40,0x80,
++0x20,0x20,0x20,0x3d,0x26,0x48,0x41,0xa2,0x22,0x22,0x23,0x26,0x2a,0x32,0x23,0x2,0x80,0x80,0xf8,0x8,0x10,0x24,0x9e,0x4,0x4,0x4,0x9c,0x4,0x4,0x4,0xfc,0x4,
++0x4,0x2,0x7f,0x1,0x3f,0x1,0xff,0x0,0x44,0x29,0x12,0x20,0x60,0x20,0x23,0x2c,0x40,0x88,0xfc,0x0,0xf8,0x0,0xfe,0x80,0xfc,0x4,0x48,0x40,0xa0,0x90,0xe,0x4,
++0x2,0x1,0x7f,0x49,0x89,0xf,0x11,0x21,0xff,0x2,0x2,0x2,0x4,0x4,0x18,0x60,0x0,0x0,0xfe,0x2,0x24,0xf0,0x0,0x4,0xfe,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x78,0x48,0x51,0x52,0x64,0x51,0x4a,0x4a,0x4a,0x6b,0x52,0x42,0x42,0x43,0x42,0x80,0x80,0xf8,0x8,0x10,0x24,0x9e,0x4,0x4,0x4,0x9c,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x7d,0x45,0x49,0x49,0x51,0x49,0x49,0x45,0x45,0x45,0x69,0x51,0x41,0x41,0x41,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x4,0x88,0x50,0x20,0x10,0x4e,0x84,0x0,
++0x8,0x8,0x10,0x10,0x22,0x7f,0x8,0x10,0x23,0x7c,0x0,0x0,0x1c,0xe0,0x43,0x0,0x40,0x50,0x48,0x40,0x7c,0xc0,0x44,0x7e,0xc0,0x48,0x50,0x20,0x60,0x92,0xa,0x6,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x3f,0x22,0x22,0x22,0x3f,0x22,0x26,0x27,0x2a,0x2a,0x32,0x42,0x42,0x82,0x2,0x4,0xfe,0x0,0x4,0x7e,0xc4,0x44,0x7c,0x44,0xc4,0x7c,0x44,0x44,0x44,0x7c,0x44,
++0x20,0x27,0x38,0x43,0x82,0x7b,0x21,0x27,0xf9,0x23,0x21,0x2f,0x29,0x33,0x2d,0x1,0x40,0xfc,0x0,0xb8,0xa8,0xb8,0x10,0xfc,0x10,0xf8,0x10,0xfe,0x48,0x30,0x8e,0x4,
++0x0,0x3f,0x1,0x1,0xff,0x5,0x9,0x31,0xcf,0x8,0x8,0xf,0x8,0x8,0xf,0x8,0x30,0xc0,0x0,0x4,0xfe,0x40,0x30,0xe,0xe4,0x20,0x20,0xe0,0x20,0x20,0xe0,0x20,
++0x12,0x1f,0x28,0x45,0x8,0x8,0xfe,0x8,0x18,0x1c,0x2a,0x28,0x48,0x88,0x8,0x8,0x44,0x7e,0xa0,0x10,0x4,0xfe,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,
++0x1,0xff,0x0,0x3e,0x22,0x3e,0x4,0x7f,0x4,0x3f,0x4,0xff,0x9,0x18,0x6c,0x8,0x4,0xfe,0x0,0xf8,0x88,0xf8,0x40,0xfc,0x40,0xf8,0x40,0xfe,0x10,0xa0,0x70,0xe,
++0x2,0x42,0x32,0x12,0x8f,0x62,0x26,0x7,0x1a,0x2a,0xf2,0x22,0x22,0x22,0x22,0x22,0x0,0x4,0x7e,0x44,0xc4,0x44,0x7c,0x44,0xc4,0x44,0x7c,0x44,0x44,0x44,0x7c,0x44,
++0x2,0x2,0x4,0x8,0x10,0x3f,0x1,0x2,0x4,0x3f,0x0,0x0,0x0,0x3,0xc,0x70,0x0,0x0,0x20,0x20,0x40,0x80,0x0,0x8,0x8,0xf0,0x20,0x40,0x80,0x0,0x0,0x0,
++0x82,0x44,0x29,0xfe,0x10,0x11,0x7c,0x10,0x10,0xfe,0x11,0x12,0x10,0x20,0x21,0x40,0x0,0x4,0xde,0x44,0x44,0x54,0xcc,0x44,0x44,0xcc,0x54,0x64,0x44,0x44,0x54,0x88,
++0x22,0x11,0x10,0xff,0x8,0x10,0x3b,0x54,0x90,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x8,0x10,0xa0,0xfc,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x2,0x41,0x30,0x17,0x0,0x0,0xf3,0x10,0x10,0x10,0x1f,0x10,0x14,0x18,0x10,0x0,0x8,0x10,0xa0,0xfc,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x10,0x11,0x11,0xff,0x11,0x31,0x39,0x55,0x91,0x11,0x0,0x12,0x51,0x50,0x90,0xf,0x8,0xfc,0x8,0x8,0xf8,0x8,0xf8,0x8,0x8,0xf8,0x0,0x0,0x84,0x92,0x12,0xf0,
++0x0,0x8,0x7c,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x4a,0x2,0x2,0x2,0x20,0x40,0x84,0xfe,0x4,0x4,0xf4,0x94,0x94,0x94,0x94,0xf4,0x4,0x4,0x14,0x8,
++0x2,0x1,0x7f,0x0,0x1f,0x10,0x1f,0x0,0x3f,0x0,0x1,0xff,0x1,0x1,0x5,0x2,0x0,0x8,0xfc,0x0,0xf0,0x10,0xf0,0x0,0xf8,0x40,0x84,0xfe,0x0,0x0,0x0,0x0,
++0x0,0xb,0xfc,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x1d,0xf1,0x41,0x0,0x0,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x58,0x84,0x2,
++0x8,0x8,0x7f,0x8,0x8,0xff,0x4,0x8,0x1f,0x28,0xc8,0xf,0x8,0x8,0x8,0x7,0x20,0x28,0xfc,0x20,0x24,0xfe,0x40,0x20,0xf0,0x2e,0x24,0xe0,0x20,0x8,0x8,0xf8,
++0x11,0x11,0x12,0x17,0xfc,0x17,0x30,0x39,0x56,0x51,0x96,0x10,0x11,0x16,0x10,0x10,0x0,0xf0,0x24,0xfe,0x44,0xfc,0x80,0x44,0x68,0xb0,0x30,0x68,0xa6,0x20,0xa0,0x40,
++0x9,0x9,0xa,0x17,0x1c,0x37,0x50,0x91,0x16,0x10,0x17,0x10,0x11,0x16,0x10,0x10,0x0,0xf0,0x24,0xfe,0x44,0xfc,0x80,0x44,0x68,0xb0,0x30,0x68,0xa6,0x20,0xa0,0x40,
++0x2,0x4,0x8,0x7f,0x40,0x40,0x4f,0x48,0x48,0x48,0x48,0x4f,0x48,0x40,0x40,0x40,0x0,0x0,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0xe4,0x24,0x4,0x14,0x8,
++0x8,0xf,0x10,0x3f,0x61,0xa1,0x3f,0x6,0x19,0x62,0xc,0x31,0x6,0x18,0x62,0x1,0x0,0xe0,0x48,0xfc,0x8,0x8,0xf8,0x10,0x20,0xc0,0xc0,0xa0,0x90,0x8e,0x84,0x0,
++0x8,0xff,0x9,0x3f,0x1,0xff,0x1,0x3f,0x1,0x21,0x25,0x25,0x25,0x29,0x41,0x1,0x24,0xfe,0x20,0xf8,0x8,0xfe,0x8,0xf8,0x0,0x8,0x48,0x28,0x28,0x28,0x8,0x8,
++0x0,0x5,0xfe,0x10,0x11,0x21,0x25,0x7f,0xa5,0x25,0x25,0x25,0x25,0x3d,0x25,0x1,0x20,0x24,0xa8,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x4,0x14,0x8,
++0x1f,0x1,0x7f,0x51,0x89,0x11,0x5,0x3,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0xf0,0x0,0xfe,0x12,0x24,0x10,0x40,0x90,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x8,0x49,0x2a,0x9,0x7f,0x41,0x41,0x7f,0x41,0x41,0x7f,0x41,0x41,0x41,0x45,0x42,0x4,0x4,0x4,0x24,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x0,0x8,0x7f,0x48,0x48,0x4f,0x48,0x49,0x4a,0x4c,0x4b,0x48,0x78,0x48,0x0,0x0,0x40,0x44,0xf8,0x50,0x64,0xfe,0x80,0xf8,0x10,0x24,0xfe,0x20,0x20,0x20,0xa0,0x40,
++0x3e,0x22,0x3e,0x0,0xff,0x2,0x1f,0x10,0x11,0x12,0x4,0x78,0x0,0x3e,0x22,0x3e,0xf8,0x88,0xf8,0x4,0xfe,0x0,0xf0,0x10,0x10,0x90,0x40,0x3c,0x0,0xf8,0x88,0xf8,
++0x10,0x11,0x10,0x3c,0x21,0x41,0xbd,0x11,0x11,0xfd,0x11,0x11,0x15,0x19,0x11,0x1,0x20,0x24,0xa8,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x4,0x14,0x8,
++0x0,0x42,0x31,0x10,0x83,0x62,0x22,0xb,0x12,0x22,0xe3,0x22,0x22,0x22,0x22,0x22,0x40,0x48,0x50,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x8,0x28,0x10,
++0x2,0x1,0x7f,0x41,0x89,0x5,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x10,0x10,0x0,0x0,0xfe,0x2,0x24,0x50,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x50,0x20,
++0x2,0x41,0x30,0x11,0x82,0x6f,0x20,0x9,0x13,0x25,0xe9,0x21,0x21,0x21,0x21,0x21,0x8,0xb0,0x40,0xb0,0x48,0xfe,0x80,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x8,0x7c,0x4f,0x48,0x48,0x78,0x4b,0x48,0x4b,0x48,0x78,0x49,0x1,0x2,0xc,0x80,0x88,0xfc,0x80,0x50,0x22,0xd2,0xe,0x0,0xfc,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x1,0x1,0x1,0x1,0x1,0x5,0x5,0x9,0x9,0x11,0x21,0x41,0x1,0x1,0x5,0x2,0x0,0x0,0x0,0x0,0x0,0x40,0x20,0x10,0x8,0x4,0x4,0x0,0x0,0x0,0x0,0x0,
++0x2,0x2,0x3f,0x2,0x2,0xff,0x2,0x4,0x3f,0x10,0x21,0x5f,0x81,0x1,0x5,0x2,0x0,0x10,0xe0,0x40,0x84,0xfe,0x0,0x0,0xe0,0x80,0x8,0xfc,0x0,0x0,0x0,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x31,0x3a,0x54,0x50,0x90,0x10,0x10,0x10,0x13,0x1c,0x40,0x20,0x4,0xfe,0x0,0x88,0x6,0x8a,0x88,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x1,0x11,0x9,0x5,0x1,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0x0,0x10,0x20,0x40,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x0,0x0,0x7b,0x48,0x4f,0x48,0x4b,0x48,0x4a,0x4a,0x4a,0x7b,0x42,0x4,0x8,0x0,0x40,0x48,0xfc,0x48,0xfe,0x48,0xf8,0x40,0x48,0xe8,0xd8,0x58,0x48,0x48,0x48,0x40,
++0x10,0x12,0x1f,0x28,0x45,0x0,0x3f,0x1,0x1,0xff,0x2,0x2,0x4,0x8,0x10,0x60,0x40,0x48,0x7c,0xa0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x80,0x40,0x30,0xe,0x4,
++0x10,0x8,0x2,0xff,0x24,0x22,0x41,0xa4,0x14,0x8,0x14,0x24,0x22,0x42,0x80,0x1,0x20,0x20,0x20,0x24,0x7e,0x84,0x44,0x44,0x48,0x28,0x28,0x10,0x28,0x28,0x46,0x84,
++0x21,0x21,0x27,0x21,0xff,0x21,0x77,0x69,0xa1,0x20,0x2f,0x20,0x20,0x20,0x23,0x2c,0x0,0x4,0xfe,0x14,0xd4,0x14,0xd4,0x24,0x4c,0x44,0xfe,0x40,0xa0,0x90,0xe,0x4,
++0x4,0x4,0x24,0x27,0x24,0x24,0x24,0x27,0xfc,0x0,0x0,0x1f,0x0,0x0,0x7f,0x0,0x40,0x40,0x40,0x4c,0x70,0x40,0x42,0x42,0x3e,0x0,0x20,0xf0,0x0,0x8,0xfc,0x0,
++0x1,0x3f,0x21,0x3f,0x21,0x3f,0x10,0x10,0x3f,0x48,0xc8,0x54,0x40,0x7c,0x5,0x2,0x20,0xa0,0x20,0x3e,0x42,0x94,0x10,0x90,0xd0,0x90,0x90,0xa8,0xa8,0xa4,0x44,0x82,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x54,0x54,0x55,0x7e,0x51,0x15,0x1d,0xf5,0x40,0x0,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x80,0x80,0xfe,0x22,0x22,0x52,0x2,0xfa,0xa,0x4,
++0x28,0x28,0xfe,0x29,0x38,0x10,0x7f,0x54,0x54,0x7c,0x11,0xfe,0x10,0x10,0x13,0x10,0x20,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x20,0x20,0x20,0x20,0xfb,0x20,0x20,0x24,0x24,0x24,0x29,0x21,0x21,0x22,0x24,0x20,0x80,0x80,0x80,0x88,0xfc,0x88,0x88,0x8c,0x8a,0x8a,0x8,0x8,0x8,0x8,0x28,0x10,
++0x10,0x10,0x10,0x17,0xf8,0x12,0x11,0x18,0x37,0xd0,0x10,0x10,0x11,0x11,0x52,0x24,0x40,0x40,0x48,0xfc,0x40,0x48,0x50,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x10,0xe,0x4,
++0x12,0x12,0x13,0x16,0xfb,0x12,0x13,0x1a,0x33,0xd2,0x17,0x11,0x11,0x11,0x52,0x24,0x80,0x48,0xfc,0x40,0xf8,0x40,0xf8,0x40,0xfc,0x0,0xf8,0x10,0x3c,0x4,0x14,0x8,
++0x2,0x7f,0x4,0x24,0x24,0x45,0x7f,0xc,0xc,0x14,0x24,0x44,0x84,0x4,0x14,0x8,0x0,0x7c,0x44,0x44,0x48,0x48,0xd0,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0x8,0x14,0x22,0x41,0xbe,0x8,0x8,0x7f,0x8,0x2a,0x29,0x49,0x8,0x28,0x10,0x8,0x8,0x8,0x48,0x28,0x8,0x48,0x28,0xe,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,
++0x8,0x7c,0x48,0x48,0x4b,0x78,0x48,0x4a,0x4a,0x7a,0x4d,0x49,0x49,0x4a,0x4c,0x98,0x80,0x80,0x80,0x88,0xfc,0x88,0x88,0x8c,0x8a,0x8a,0x8,0x8,0x8,0x8,0x28,0x10,
++0x4,0x24,0x17,0x14,0x4,0x5,0xf6,0x10,0x13,0x12,0x12,0x13,0x16,0x1a,0x13,0x2,0x20,0x24,0xa8,0x30,0x22,0xa2,0x5e,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x7f,0x40,0x88,0x8,0xf,0x8,0x8,0xf,0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0xfe,0x2,0x4,0x20,0xf0,0x0,0x8,0xfc,0x8,0x48,0xe8,0x8,0x8,0x50,0x20,
++0x10,0x10,0x10,0x17,0xfc,0x12,0x32,0x3a,0x57,0x52,0x92,0x12,0x14,0x18,0x10,0x13,0x20,0x28,0x24,0xfe,0x20,0xa0,0xa0,0xa4,0xe4,0xa8,0xa8,0x90,0xb0,0x52,0x8a,0x6,
++0x20,0x22,0x3f,0x48,0x88,0xa,0xff,0x8,0x28,0x2e,0x28,0x28,0x2f,0xf8,0x40,0x0,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x54,0x48,0x40,0x40,
++0x20,0x3e,0x44,0xbe,0x2a,0x3e,0x2a,0x3f,0x2a,0x41,0x9f,0x11,0x1f,0x1,0x7f,0x20,0x0,0xfc,0x24,0x4c,0xd0,0x7c,0x90,0xfe,0x10,0x10,0xf8,0x10,0xf0,0x8,0xfc,0x4,
++0x22,0x22,0x27,0x29,0xbf,0xaa,0xaa,0x2f,0x2a,0x2a,0x2f,0x2a,0x2a,0x2a,0x31,0x20,0x4,0x7e,0xa4,0x24,0xa4,0xc8,0xa8,0xbe,0xc8,0x88,0xfe,0x88,0x88,0x88,0x88,0x8,
++0x2,0x42,0x32,0x12,0x82,0x62,0x2f,0xa,0x12,0x22,0xe2,0x22,0x22,0x22,0x23,0x20,0x48,0x48,0x48,0x48,0x48,0x48,0xfe,0x48,0x48,0x48,0x48,0x78,0x40,0x8,0xfc,0x0,
++0x40,0x27,0x24,0x9,0x81,0x61,0x21,0x9,0x11,0x20,0xe0,0x2f,0x20,0x20,0x20,0x20,0x0,0xfe,0x2,0x4,0x0,0xfc,0x0,0x4,0xfe,0x4,0x24,0xf4,0x4,0x4,0x14,0x8,
++0x2,0x44,0x2f,0x28,0xf,0x8,0xef,0x28,0x28,0x3f,0x21,0x2a,0x34,0x28,0x12,0x1,0x8,0x88,0xc8,0x88,0x88,0xfe,0x88,0x88,0xc8,0xa8,0xa8,0x88,0x88,0x88,0xa8,0x10,
++0x3f,0x20,0x3f,0x20,0x24,0x22,0x2f,0x28,0x28,0x2f,0x28,0x28,0x4f,0x48,0x88,0x8,0xf8,0x8,0xf8,0x80,0x90,0xa8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x28,0x10,
++0x4,0xff,0x14,0x8,0x7f,0x22,0x14,0xff,0x8,0xa,0x7f,0x2a,0x49,0x88,0x29,0x10,0x40,0xfe,0x40,0x6,0x78,0x40,0x44,0xfe,0x48,0x48,0x48,0x48,0x88,0x88,0x8,0x8,
++0x8,0x8,0xff,0x8,0x8,0x0,0x2,0x1,0x50,0x50,0x50,0x90,0x10,0x10,0xf,0x0,0x20,0x24,0xfe,0x20,0x20,0x0,0x0,0x0,0x84,0x82,0x2,0x2,0x8,0x8,0xf8,0x0,
++0x10,0x10,0x1d,0x20,0x20,0x7c,0x93,0x10,0x7c,0x10,0x11,0x10,0x14,0x18,0x10,0x0,0x40,0x20,0xfc,0x0,0x88,0x50,0xfe,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,
++0x2,0x7,0x38,0x20,0x20,0x20,0x3f,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x85,0x2,0x40,0x40,0x40,0x40,0x7e,0x82,0x24,0x20,0x20,0x20,0x50,0x50,0x88,0x88,0x6,0x4,
++0x2,0x1,0x3f,0x8,0x4,0x4,0xff,0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0x1,0x0,0x10,0xf8,0x20,0x20,0x44,0xfe,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,
++0x10,0xa,0x7f,0x0,0x22,0x14,0xff,0xa,0x7f,0x8,0xa,0x29,0x48,0x89,0x28,0x10,0x8,0x1c,0x60,0x40,0x40,0x44,0xfe,0x48,0x48,0x48,0x48,0x88,0x88,0x8,0x8,0x8,
++0x10,0x10,0x11,0x11,0x59,0x55,0x51,0x91,0x11,0x11,0x11,0x12,0x12,0x14,0x18,0x10,0x8,0x1c,0xe0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x2,0x1,0x0,0x0,0x8,0x8,0x28,0x28,0x28,0x48,0x88,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x80,0xc0,0x80,0x0,0x8,0x4,0x2,0x2,0x2,0x0,0x10,0x10,0xf0,0x0,
++0x8,0x8,0xf,0x10,0x10,0x37,0x50,0x90,0x17,0x10,0x13,0x12,0x12,0x12,0x13,0x12,0x80,0x44,0xfe,0x0,0x8,0xfc,0x0,0x8,0xfc,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x8,0x10,0x7f,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0xf8,0x40,0x0,0x0,0x10,0x92,0x54,0x54,0x10,0xfe,0x10,0x10,0x14,0xfe,0x10,0x90,0x10,0x10,0x10,0x10,
++0x0,0x3f,0x20,0x3f,0x20,0x3f,0x1,0x21,0x3f,0x21,0x41,0xbf,0x1,0x1,0xff,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0x8,0xfc,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,
++0x0,0x7b,0x4a,0x4b,0x4a,0x7b,0x48,0x4a,0x4b,0x7c,0x48,0x4b,0x48,0x48,0x8f,0x18,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0x48,0xfc,0x40,0x50,0xf8,0x40,0x44,0xfe,0x0,
++0x2,0x45,0x29,0x11,0x29,0x49,0x88,0x9,0x19,0x2a,0x4c,0x89,0x8,0x8,0x57,0x20,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x20,0x24,0xfe,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,
++0x10,0x13,0x12,0x13,0x5a,0x57,0x50,0x92,0x13,0x14,0x18,0x13,0x10,0x10,0x1f,0x10,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0x48,0xfc,0x40,0x50,0xf8,0x40,0x44,0xfe,0x0,
++0x2,0x2,0x21,0x11,0x19,0x9,0x0,0x0,0xff,0x0,0x0,0x4,0xc,0x10,0x20,0x40,0x0,0x8,0x8,0x10,0x10,0x20,0x20,0x44,0xfe,0x0,0x0,0x40,0x20,0x18,0xc,0x4,
++0x0,0x7f,0x11,0x11,0x11,0x11,0x11,0xff,0x11,0x11,0x11,0x11,0x21,0x21,0x41,0x1,0x84,0xc4,0x4,0x24,0x24,0x24,0x24,0xe4,0x24,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x1,0x7f,0x12,0x12,0x12,0xff,0x12,0x12,0x12,0x23,0x41,0x7f,0x1,0x1,0xff,0x0,0x4,0x84,0x24,0x24,0x24,0xa4,0x24,0x24,0x4,0x14,0x8,0xfc,0x0,0x4,0xfe,0x0,
++0x0,0x7f,0x11,0x11,0x11,0x11,0x11,0xff,0x11,0x11,0x11,0x11,0x21,0x21,0x41,0x1,0x80,0xc4,0xc,0x10,0x20,0x44,0xc,0xd0,0x20,0x42,0x6,0x8,0x10,0x20,0x40,0x80,
++0x0,0x7f,0x12,0x12,0x12,0x12,0x12,0xff,0x12,0x12,0x12,0x12,0x22,0x22,0x42,0x2,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0xc8,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0xb,0x10,0x20,0x40,0x8,0x17,0x30,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x8,0xfc,0x0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
++0x4,0xfe,0x28,0x28,0xfe,0xaa,0xaa,0xae,0xc2,0x83,0x82,0xfe,0x82,0x82,0xff,0x82,0x4,0xfe,0x84,0xfc,0x84,0xfc,0x20,0xa0,0xfc,0x20,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x1,0x1,0x3f,0x1,0x1,0xff,0x8,0x4,0x3f,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0x0,0x10,0xf8,0x0,0x4,0xfe,0x20,0x50,0xf8,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0xff,0x3,0x5,0x9,0x31,0xc1,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x4,0xfe,0x80,0x40,0x30,0xe,0x4,0xf0,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x10,0x12,0x12,0x5b,0x54,0x54,0x98,0x10,0x13,0x10,0x10,0x10,0x10,0x1f,0x10,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x50,0xf8,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x11,0x11,0xfd,0x25,0x26,0x24,0x24,0x45,0x28,0x10,0x28,0x44,0x87,0x0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x10,0x1f,0x14,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x50,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x0,0x20,0x50,0x48,0x44,0x42,0x41,0x42,0x44,0x48,0x50,0x40,0x7f,0x40,0x0,0x0,0x10,0x10,0x24,0x24,0x44,0x84,0x4,0x84,0x44,0x34,0x14,0x4,0xfc,0x4,0x0,
++0x8,0x7c,0x49,0x49,0x4a,0x7c,0x49,0x4a,0x4a,0x7a,0x4b,0x4a,0x4b,0x4a,0x88,0x18,0x80,0x80,0x0,0xfe,0x2,0x2,0x12,0xaa,0x4a,0xaa,0x1a,0xa,0xfa,0x2,0x14,0x8,
++0x8,0x8,0x10,0x1f,0x20,0x40,0x90,0x28,0x25,0x22,0x25,0x28,0x20,0x3f,0x20,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x44,0xa4,0x24,0x24,0x24,0xa4,0x24,0xe4,0x14,0x8,
++0x0,0x42,0x31,0x14,0x84,0x64,0x24,0xc,0x14,0x25,0xe5,0x26,0x24,0x27,0x24,0x20,0x0,0x8,0x10,0x94,0xa4,0x44,0x44,0xa4,0xa4,0x14,0xc,0xc,0x4,0xfc,0x4,0x0,
++0x10,0x10,0x10,0xfd,0x11,0x13,0x25,0x21,0x51,0x51,0x91,0x25,0x45,0x7d,0x1,0x1,0x40,0xa0,0x88,0xfc,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x10,0x10,0x22,0x7f,0x0,0x3e,0x22,0x3e,0x22,0x3e,0x22,0x26,0x0,0x48,0x44,0x80,0x80,0x98,0xe0,0x84,0x84,0x7c,0x80,0x98,0xe0,0x84,0x84,0x7c,0x0,0x88,0x46,0x2,
++0x8,0x8,0x8,0x10,0x17,0x30,0x50,0x90,0x11,0x11,0x12,0x14,0x18,0x10,0x10,0x10,0x40,0x40,0x40,0x44,0xfe,0x40,0xe0,0xe0,0x50,0x50,0x48,0x46,0x44,0x40,0x40,0x40,
++0x11,0x11,0x11,0x21,0x2a,0x6c,0xa9,0x2e,0x28,0x2b,0x28,0x28,0x23,0x20,0x21,0x26,0x0,0x0,0xf8,0x10,0xa0,0x40,0xb0,0x2e,0xc0,0x10,0x60,0x88,0x10,0x60,0x80,0x0,
++0x8,0x4,0x2,0x7f,0x1,0x3f,0x2,0xff,0x4,0xf,0x11,0x2f,0x42,0x84,0x3f,0x0,0x20,0x40,0x88,0xfc,0x0,0xf8,0x0,0xfe,0x10,0xf8,0x10,0xf0,0x10,0x14,0xfe,0x0,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x31,0x39,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x0,0x4,0xfe,0x80,0x80,0x80,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x88,0x50,0x20,
++0x0,0x8,0x7f,0x4a,0x4b,0x4a,0x4b,0x4a,0x4b,0x48,0x48,0x7f,0x48,0x1,0x2,0xc,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x50,0x48,0xfe,0xa0,0x10,0xe,0x4,
++0x10,0x13,0x1c,0x20,0x27,0x7c,0x91,0x12,0x7d,0x10,0x10,0x10,0x15,0x19,0x12,0x4,0x18,0xe0,0x40,0x48,0xfc,0xe0,0x50,0x4e,0xf8,0x88,0x90,0x9c,0x4,0x4,0x28,0x10,
++0x0,0x3f,0x1,0x1,0x7f,0x5,0x9,0x31,0xcf,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x78,0x80,0x0,0x8,0xfc,0x40,0x30,0xe,0xe4,0x20,0x40,0x70,0x10,0x10,0xa0,0x40,
++0x20,0x10,0x10,0x0,0xfd,0x9,0x11,0x35,0x59,0x95,0x11,0x11,0x11,0x11,0x11,0x11,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x13,0x20,0x20,0x4f,0xf8,0x11,0x22,0x45,0xf8,0x0,0x0,0x19,0xe1,0x42,0x4,0x18,0xe0,0x40,0x48,0xfc,0xe0,0x50,0x4e,0xf8,0x88,0x90,0x9c,0x4,0x4,0x28,0x10,
++0x20,0x20,0x20,0x27,0xfc,0x24,0x27,0x24,0x24,0x24,0x3e,0xe5,0x48,0x8,0x17,0x20,0x88,0xfc,0x80,0xfe,0x82,0xf0,0x84,0xfc,0x0,0xa0,0xa8,0xb0,0xa0,0xa4,0xfe,0x0,
++0x0,0x0,0x0,0x3f,0x20,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0x40,0x40,0x83,0x0,0x80,0xa0,0x90,0xfc,0x80,0x80,0x84,0x44,0x48,0x48,0x30,0x20,0x60,0x92,0xa,0x6,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x1,0xff,0x2,0x4,0x3f,0x24,0x24,0x24,0x24,0x20,0xf0,0x0,0xfe,0x12,0x64,0x10,0x4,0xfe,0x0,0x8,0xfc,0x88,0x88,0x88,0xa8,0x10,
++0x2,0x3,0x2,0x3f,0x22,0x23,0x3e,0x23,0x20,0x22,0x32,0x2a,0x4a,0x42,0xbf,0x0,0x10,0xf8,0x0,0xfe,0x2,0xe4,0x8,0xf8,0x0,0x40,0x48,0x58,0x60,0x40,0xfe,0x0,
++0x0,0x8,0x7c,0x4b,0x4a,0x4a,0x4b,0x4a,0x4a,0x4a,0x4b,0x7a,0x4c,0x4,0xb,0x0,0x48,0x7c,0x40,0xfe,0x42,0x70,0xc4,0x7c,0x0,0x50,0x54,0xd8,0x50,0x54,0xfe,0x0,
++0x4,0xb,0x10,0x20,0x41,0x5,0x9,0x11,0x21,0x41,0x5,0x9,0x11,0x20,0x40,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x44,0x58,0x86,0x2,
++0x8,0x8,0x10,0x21,0x42,0xc,0x13,0x30,0x50,0x97,0x10,0x11,0x12,0x14,0x11,0x10,0x40,0x40,0xa0,0x10,0xe,0x4,0xf8,0x40,0x48,0xfc,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x2,0x42,0x33,0x12,0x4,0x0,0xf0,0x1f,0x10,0x10,0x10,0x12,0x14,0x18,0x10,0x0,0x0,0x8,0xfc,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x8,0x7f,0x9,0x7f,0x2,0x4,0x1f,0x1,0x2,0x3f,0x0,0x1f,0x11,0x1f,0x11,0x1f,0x20,0xfc,0x20,0xfc,0x0,0x10,0xe0,0x0,0x8,0xf8,0x0,0xf0,0x10,0xf0,0x10,0xf0,
++0x4,0xfe,0x28,0x28,0xfe,0xaa,0xaa,0xae,0xa2,0xc2,0x82,0xfe,0x82,0x82,0xfe,0x82,0x0,0x0,0x44,0x44,0xaa,0xaa,0xaa,0x92,0x92,0xaa,0xaa,0xa6,0xc6,0x82,0xfe,0x82,
++0x8,0x8,0x14,0x12,0x21,0x5e,0x88,0x8,0x7e,0x8,0x2c,0x2a,0x4a,0x8,0x29,0x12,0x0,0x0,0x8,0xfc,0x8,0x88,0x88,0x88,0x50,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x10,0x10,0x10,0x10,0xfe,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x22,0x22,0x41,0x80,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0xfa,0x2,0xfe,0x0,
++0x1,0x0,0x3f,0x20,0x2f,0x20,0x21,0x20,0x2f,0x20,0x20,0x20,0x40,0x40,0x82,0x1,0x0,0x88,0xfc,0x0,0xf8,0x20,0x40,0x80,0xfc,0x88,0x90,0x80,0x80,0x80,0x80,0x0,
++0x2,0x1,0xff,0x2,0x4,0x1f,0x1,0x2,0x3f,0x0,0x1f,0x11,0x1f,0x11,0x1f,0x10,0x0,0x4,0xfe,0x0,0x10,0xe0,0x0,0x8,0xf8,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x10,0x10,0x11,0x13,0x5a,0x56,0x52,0x92,0x12,0x12,0x12,0x12,0x12,0x1f,0x10,0x10,0x80,0x80,0x8,0xfc,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,0x0,
++0x10,0xfe,0x22,0x64,0x18,0x14,0x62,0x4,0x1f,0x3,0xc,0x3f,0x1,0x11,0x65,0x2,0x4,0xfe,0x84,0x84,0x84,0xfc,0x84,0x20,0xc0,0x0,0x10,0xf8,0x0,0x30,0x8,0x0,
++0x10,0x13,0x10,0x11,0xfd,0x25,0x26,0x24,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x1,0x0,0xfe,0x42,0x70,0x40,0x40,0xfe,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x4,0x4,0xc,
++0x10,0x10,0x23,0x20,0x48,0xf8,0x17,0x21,0x43,0xfd,0x9,0x1,0x1d,0xe1,0x41,0x1,0x40,0x44,0xf8,0x50,0x60,0x44,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x23,0x20,0x48,0xff,0x11,0x20,0x42,0xf9,0x7,0x0,0x1c,0xe0,0x41,0x2,0x40,0x50,0xf8,0x40,0x40,0xfc,0x24,0xa8,0x20,0x24,0xfe,0x40,0x60,0x90,0xc,0x4,
++0x10,0x11,0x14,0xfe,0x20,0x28,0x48,0x7f,0x8,0x8,0xe,0xf8,0x48,0x8,0x8,0x8,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x0,0x7b,0x4a,0x4c,0x4b,0x48,0x4b,0x4a,0x4b,0x4a,0x7b,0x48,0x0,0x7,0x0,0x40,0x20,0xfe,0x2,0x4,0xfc,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x0,0x4,0xfe,0x0,
++0x2,0x1,0x7f,0x40,0x80,0x3f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x0,0xff,0x0,0x0,0x0,0xfe,0x2,0x14,0xf8,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x4,0xfe,0x0,
++0x1f,0x10,0x1f,0x10,0x1f,0x10,0xff,0x4,0x8,0x1f,0x2,0x51,0x50,0x90,0xf,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x14,0xfe,0x0,0x20,0xf0,0x10,0x84,0x82,0x12,0xf0,0x0,
++0x20,0x10,0x14,0xfe,0x21,0x22,0x3c,0x24,0x24,0x24,0x24,0x24,0x44,0x55,0x8a,0x4,0x80,0x84,0xfe,0x80,0x0,0xfe,0x22,0x24,0xa0,0xa8,0xbc,0xa0,0xa0,0x60,0x26,0x1c,
++0x2,0x1,0x1,0xff,0x2,0x2,0x4,0x8,0x3f,0x1,0x2,0x4,0x8,0x10,0x3f,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x10,0x20,0xc0,0x0,0x0,0x0,0x10,0x10,0xf8,0x8,
++0x0,0x42,0x32,0x13,0x2,0x4,0xf7,0x10,0x10,0x10,0x11,0x11,0x12,0x2c,0x44,0x3,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0xa0,0xa0,0xa0,0x22,0x22,0x1e,0x0,0x6,0xfc,
++0x1,0x0,0x3f,0x24,0xa4,0x6f,0x32,0x2f,0x6a,0xaf,0x2a,0x2f,0x40,0x43,0x9c,0x8,0x0,0x84,0xfe,0x44,0x28,0x7c,0x10,0x90,0xfc,0x90,0x94,0xfe,0x10,0x90,0x10,0x10,
++0x0,0x8,0x7c,0x4f,0x48,0x48,0x79,0x4a,0x4b,0x78,0x48,0x49,0x4a,0x7b,0x48,0x0,0x80,0x40,0x44,0xfe,0x40,0x80,0x8,0x10,0xe0,0x40,0x80,0x0,0x8,0xfc,0x4,0x0,
++0x10,0x10,0x20,0x20,0x45,0xfa,0x11,0x21,0x41,0xfd,0x1,0x1,0x1d,0xe0,0x40,0x0,0x80,0x80,0x84,0xfe,0x4,0x4,0xf4,0x14,0x14,0xf4,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x28,0x28,0xfe,0x29,0x29,0x3b,0x15,0x7d,0x55,0x55,0x7d,0x11,0xff,0x11,0x11,0x11,0xa0,0xa0,0xa0,0x20,0x24,0x28,0x30,0x20,0x60,0xa0,0x20,0x22,0x22,0x22,0x1e,0x0,
++0x8,0x8,0xff,0x8,0x20,0x7c,0x45,0x44,0x7c,0x43,0x7c,0x44,0x45,0x7c,0x40,0x0,0x20,0x24,0xfe,0x20,0x40,0x28,0xfc,0x88,0x50,0xfe,0x20,0x28,0xfc,0x20,0x20,0x20,
++0x22,0x11,0x11,0x0,0x7f,0x40,0x80,0x1f,0x0,0x1,0xff,0x1,0x1,0x1,0x5,0x2,0x8,0x8,0x10,0x20,0xfe,0x2,0x4,0xe0,0x40,0x84,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x2,0x1,0x1,0x7f,0x40,0x80,0x4,0x4,0x4,0x8,0x8,0x10,0x10,0x20,0x40,0x0,0x0,0x0,0x0,0xfe,0x2,0x84,0x80,0x80,0x40,0x40,0x40,0x20,0x10,0xe,0x4,0x0,
++0x1f,0x1,0x7f,0x41,0x9d,0x1,0x1d,0x1,0x3f,0x0,0x0,0x1f,0x0,0x0,0x3f,0x0,0xf0,0x0,0xfe,0x2,0x74,0x0,0x70,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x1,0x1,0x2,0x3f,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0xff,0x0,0x0,0x0,0x0,0x8,0xfc,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xfe,0x0,
++0x2,0x3f,0x22,0x22,0x3e,0x0,0x7f,0x41,0x49,0x49,0x49,0x49,0x49,0x14,0x23,0xc1,0x20,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x94,0x8,
++0x0,0x3f,0x1,0xff,0x1,0x3f,0x29,0x25,0x3f,0x1,0x3f,0x1,0x7f,0x24,0x22,0x40,0x38,0xc0,0x4,0xfe,0x0,0xf8,0x28,0x48,0xf8,0x0,0xf8,0x0,0xfc,0x48,0x24,0x4,
++0x10,0x17,0x24,0x24,0x47,0x94,0x25,0x65,0xa5,0x25,0x25,0x25,0x29,0x29,0x31,0x21,0x1c,0xe0,0x20,0x24,0xfe,0x20,0xfc,0x4,0x4,0xfc,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x8,0x8,0xf,0x10,0x10,0x2f,0x48,0x88,0xf,0x8,0x8,0xf,0x8,0x0,0x0,0x0,0x0,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0xe4,0x24,0x24,0xe4,0x24,0x4,0x28,0x10,
++0x2,0x42,0x33,0x14,0x4,0x9,0xf1,0x11,0x11,0x11,0x11,0x13,0x15,0x18,0x10,0x0,0x0,0x4,0xfe,0x4,0x4,0xf4,0x14,0x14,0xf4,0x14,0x14,0xf4,0x14,0x4,0x14,0x8,
++0x0,0x3f,0x0,0x0,0x1f,0x0,0x0,0x3f,0x0,0x0,0xff,0x8,0x4,0x4,0x0,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x20,0x24,0xfe,0x20,0x20,0x20,0xa0,0x40,
++0x9,0xfd,0x9,0x49,0x49,0x49,0x49,0x49,0x7d,0x5,0x1d,0xe5,0x45,0x15,0xa,0x4,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,
++0x0,0x41,0x31,0x12,0x2,0x4,0xf9,0x14,0x12,0x12,0x11,0x11,0x11,0x28,0x44,0x3,0x0,0x24,0x24,0x48,0x48,0x90,0x20,0x90,0x48,0x48,0x24,0x24,0x24,0x0,0x6,0xfc,
++0x0,0x4,0xfe,0x21,0x21,0x3f,0x45,0x45,0xa5,0x19,0x9,0x11,0x21,0x40,0x80,0x0,0x80,0x84,0xfe,0x4,0x4,0xf4,0x14,0x14,0xf4,0x14,0x14,0xf4,0x14,0x4,0x14,0x8,
++0x0,0x47,0x30,0x11,0x81,0x61,0x21,0x9,0x17,0x21,0xe1,0x21,0x21,0x21,0x21,0x21,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x50,0xf0,0x10,0x10,0x10,0xa,0xa,0x6,0x0,
++0x1,0x41,0x31,0x11,0x1,0x1,0xf1,0x11,0x11,0x11,0x11,0x11,0x16,0x1a,0x14,0x8,0x4,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x4,
++0x0,0x47,0x30,0x11,0x1,0x1,0xf1,0x11,0x17,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x50,0xf0,0x10,0x10,0x10,0xa,0xa,0x6,0x0,
++0x0,0x40,0x3f,0x21,0x2,0x4,0xe4,0x27,0x3c,0x24,0x25,0x24,0x2c,0x54,0x88,0x7,0x10,0x10,0x10,0x10,0x10,0x10,0x58,0x54,0x94,0x92,0x12,0x50,0x20,0x0,0x6,0xfc,
++0x0,0x47,0x30,0x11,0x1,0x1,0xf7,0x11,0x11,0x11,0x11,0x11,0x11,0x29,0x44,0x3,0x10,0xf8,0x10,0x10,0x10,0x50,0xf0,0x10,0x10,0x10,0x12,0xa,0x6,0x0,0x6,0xfc,
++0x0,0x3f,0x20,0x20,0x20,0x20,0x20,0x2f,0x20,0x20,0x20,0x20,0x40,0x40,0x9f,0x0,0x8,0xfc,0x80,0x80,0x80,0x80,0x88,0xfc,0x80,0xa0,0x98,0x88,0x80,0x84,0xfe,0x0,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x15,0x19,0x31,0xd1,0x11,0x10,0x10,0x10,0x50,0x20,0x4,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,0x20,
++0x4,0xfe,0x9,0x29,0x29,0x49,0xff,0x9,0x19,0x29,0x48,0x88,0xb,0x8,0x28,0x10,0x40,0x88,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x2,0xff,0x92,0x92,0x92,0xfe,0x92,0x92,0x92,0xfe,0x92,0x10,0x11,0x10,0x10,0x10,0x20,0x44,0xfe,0x84,0xa4,0x84,0x94,0x88,0x80,0xfe,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x0,0xb,0x7c,0x48,0x48,0x49,0x49,0x4b,0x48,0x48,0x48,0x79,0x46,0x0,0x0,0x0,0x8,0xfc,0x10,0x90,0x90,0x10,0x14,0xfe,0x10,0x30,0x50,0x90,0x10,0x10,0x50,0x20,
++0x0,0x20,0x10,0xc,0x4,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x10,0x30,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x8,0xff,0x8,0x0,0x3f,0x8,0x8,0x10,0x3f,0x0,0x3,0xc,0x30,0xc0,0x0,0x40,0x44,0xfe,0x40,0x10,0xf8,0x20,0x20,0x24,0xfe,0xa0,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x7f,0x0,0x10,0x10,0x20,0x20,0x7f,0x1,0x2,0x4,0x8,0x30,0xc0,0x1,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x10,0x11,0x14,0x7e,0x54,0x55,0x55,0x57,0x7c,0x10,0x14,0x1c,0xf4,0x41,0x2,0x0,0x8,0xfc,0x8,0x88,0x88,0x8,0x8,0xfe,0x28,0x28,0x48,0x48,0x88,0x8,0x28,0x10,
++0x1,0x21,0x21,0x3f,0x0,0x3f,0x20,0x2f,0x20,0x3f,0x20,0x20,0x2f,0x40,0x5f,0x80,0x0,0x8,0x8,0xf8,0x0,0xfc,0x80,0xf8,0x80,0xfe,0x80,0x80,0xf8,0x80,0xfe,0x0,
++0x10,0x1f,0x22,0x42,0x8f,0x14,0x24,0x7f,0xa0,0x2f,0x28,0x28,0x28,0x2f,0x28,0x20,0x80,0xc4,0x3e,0x0,0x84,0xfe,0x88,0xe8,0x48,0xe8,0x48,0x48,0x48,0xc8,0x28,0x10,
++0x0,0x43,0x32,0x12,0x83,0x62,0x22,0xb,0x12,0x22,0xe3,0x22,0x24,0x24,0x2b,0x30,0x8,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x2,0x7f,0x4,0x24,0x24,0x45,0xfe,0x4,0xc,0x14,0x24,0x44,0x84,0x4,0x14,0x8,0x40,0x50,0x54,0xfe,0x90,0x90,0xfc,0x90,0x90,0xfc,0x90,0x90,0x94,0xfe,0x80,0x80,
++0x0,0xb,0x7c,0x48,0x48,0x48,0x4c,0x4a,0x4a,0x49,0x48,0x78,0x48,0x0,0x7,0x0,0x8,0xfc,0x90,0x90,0x90,0x90,0x92,0x94,0x94,0x98,0x90,0x90,0x90,0x94,0xfe,0x0,
++0x0,0x7f,0x4,0x4,0x4,0x4,0x44,0x24,0x24,0x14,0x14,0x4,0x4,0x4,0xff,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x48,0x4c,0x50,0x50,0x60,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x47,0x20,0x22,0x2,0x4,0xef,0x20,0x20,0x20,0x24,0x29,0x32,0x24,0x8,0x0,0x8,0xfc,0x10,0x10,0x10,0x14,0xfe,0x10,0x30,0x50,0x90,0x10,0x10,0x10,0x50,0x20,
++0x0,0x7f,0x1,0x11,0x11,0x11,0xff,0x10,0x1f,0x10,0x1f,0x0,0x29,0x24,0x40,0x0,0x8,0xfc,0x0,0xf0,0x0,0x4,0xfe,0x0,0xf0,0x4,0xfe,0x4,0x24,0x94,0x14,0x8,
++0x0,0x17,0x7c,0x54,0x54,0x54,0x57,0x54,0x54,0x54,0x54,0x75,0x56,0x4,0x7,0x4,0x4,0xfe,0x4,0x44,0x44,0x44,0xfc,0x44,0x44,0xa4,0x94,0xc,0xc,0x4,0xfc,0x4,
++0x20,0x1b,0x49,0x41,0x5f,0x42,0x44,0x49,0x5f,0x69,0x4f,0x49,0x4f,0x41,0x40,0x40,0x4,0xfe,0x4,0x24,0xf4,0x84,0x44,0x24,0xfc,0x24,0xe4,0x24,0xe4,0x14,0xf4,0x8,
++0x20,0x27,0x24,0x24,0x2c,0xb4,0xa7,0xa4,0x24,0x24,0x24,0x25,0x56,0x4c,0x87,0x4,0x4,0xfe,0x4,0x44,0x44,0x44,0xfc,0x44,0x44,0xa4,0x94,0xc,0xc,0x4,0xfc,0x4,
++0x0,0x40,0x37,0x10,0x81,0x62,0x27,0xa,0x12,0x23,0xe2,0x22,0x23,0x20,0x20,0x20,0x40,0x48,0xfc,0xa0,0x10,0x8,0xfe,0x48,0x48,0xf8,0x48,0x48,0xf8,0x42,0x42,0x3e,
++0x8,0x8,0x8,0x7f,0x8,0x8,0xf,0x78,0x0,0x3f,0x24,0x24,0x24,0x24,0xff,0x0,0x40,0x40,0x40,0x50,0x48,0x44,0x44,0x40,0x8,0xfc,0x48,0x48,0x48,0x48,0xfe,0x0,
++0x0,0x7f,0x2,0x12,0xa,0x2,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x80,0x8,0xfc,0x40,0x48,0x50,0x44,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0xfd,0x10,0x10,0x20,0x20,0x7c,0xa7,0x24,0x24,0x24,0x25,0x3d,0x22,0x4,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x8,0x8,0x8,0x8,0x8,
++0x20,0x20,0x27,0x20,0xf9,0xa9,0xaa,0xaf,0xa8,0xf8,0x22,0x29,0x39,0xea,0x44,0x8,0x0,0x6,0xb8,0x88,0x8,0x8,0x2e,0xa8,0xa8,0xa8,0xa8,0x3e,0x0,0x86,0x7c,0x0,
++0x1,0x21,0x21,0x21,0x3f,0x0,0xff,0x2,0x4,0xf,0x18,0x28,0x48,0x8,0xf,0x8,0x0,0x8,0x8,0x8,0xf8,0x0,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x0,0x7d,0x4,0x8,0x11,0x21,0x7d,0x5,0x5,0x49,0x29,0x10,0x28,0x47,0x80,0x8,0x1c,0xe0,0x20,0x20,0x28,0x3c,0x20,0x20,0x20,0x28,0xfc,0x0,0x6,0xfc,0x0,
++0x2,0x1,0xff,0x0,0x0,0x1f,0x0,0x1f,0x0,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x4,0xfe,0x0,0x20,0xf0,0x0,0xf0,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x9,0x7f,0x22,0x14,0x7f,0x44,0x48,0x52,0x44,0x48,0x52,0x44,0x48,0x90,0x21,0x4,0xfe,0x20,0x44,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0xa4,0xa4,0x48,0x86,0x2,
++0x20,0x1b,0x4a,0x42,0x47,0x48,0x51,0x4e,0x48,0x48,0x4e,0x48,0x48,0x4f,0x40,0x40,0x4,0xfe,0x4,0x4,0xc4,0x84,0x24,0xf4,0x24,0x24,0xe4,0x24,0x24,0xe4,0x14,0x8,
++0x1,0x1,0x11,0x11,0x22,0x4,0x19,0x61,0x1,0x11,0x11,0x22,0x2,0x4,0x18,0x60,0x0,0x8,0x18,0x20,0xc0,0x30,0xc,0x4,0x10,0x30,0x40,0x80,0x40,0x30,0xe,0x4,
++0x0,0x41,0x31,0x11,0x81,0x61,0x22,0xc,0x10,0x23,0xe2,0x22,0x22,0x22,0x23,0x22,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0xe,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x1,0x1,0x7f,0x2,0xc,0x31,0xdf,0x11,0x11,0x1f,0x11,0x11,0x1f,0x11,0x1,0x0,0x0,0x8,0xfc,0x80,0x60,0x1e,0xf4,0x10,0x10,0xf0,0x10,0x10,0xf0,0x14,0x4,0xfc,
++0x10,0x10,0x10,0x13,0xfc,0x11,0x13,0x1e,0x32,0xd3,0x12,0x12,0x13,0x10,0x50,0x20,0x40,0x40,0x48,0xfc,0xa0,0x50,0xf8,0x4e,0x48,0xf8,0x48,0x48,0xf8,0x42,0x42,0x3e,
++0x0,0xb,0x7e,0x4a,0x4b,0x4a,0x7a,0x4b,0x4a,0x7a,0x4a,0x4a,0x4a,0x7a,0x4b,0x2,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x88,0x50,0x20,0x10,0x8e,0x4,0x0,
++0x10,0x14,0x23,0x41,0x80,0x14,0x23,0x61,0xa0,0x21,0x22,0x2e,0x22,0x22,0x22,0x22,0x8,0x7c,0x0,0x0,0x0,0x4,0x7e,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x28,0x10,
++0x40,0x20,0x2f,0x8,0x90,0x67,0x20,0xf,0x14,0x27,0xe4,0x27,0x20,0x21,0x23,0x24,0x80,0x40,0xfe,0x2,0x4,0xfc,0x40,0xfc,0x44,0xfc,0x44,0xfc,0x0,0x10,0xc,0x4,
++0x10,0x10,0x10,0xff,0x11,0x13,0x7d,0x11,0x11,0xff,0x11,0x11,0x11,0x11,0x10,0x10,0x40,0x40,0xf8,0x10,0x24,0xfe,0x24,0x24,0x24,0xfc,0x4,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x13,0x12,0x12,0x12,0xfe,0x12,0x12,0x12,0x13,0x1e,0xf2,0x42,0x2,0x3,0x0,0x8,0xfc,0x0,0xfc,0x84,0xfc,0x84,0xfc,0x20,0xfe,0x48,0xc8,0x30,0x48,0xfe,0x0,
++0x4,0x4,0xff,0x4,0x14,0x17,0xf0,0x17,0x14,0x14,0x34,0xc7,0x0,0x48,0x44,0x80,0x40,0x44,0xfe,0x40,0x50,0xd0,0x12,0xdc,0x50,0x52,0x52,0xce,0x0,0x88,0x46,0x2,
++0x0,0x3f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x21,0x21,0x22,0x42,0x44,0x88,0x10,0x8,0xfc,0x80,0xa0,0x90,0x94,0xfe,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0xe,0x4,
++0x4,0x7f,0x11,0x11,0x21,0x25,0x7f,0xa5,0x25,0x25,0x24,0x24,0x3c,0x25,0x2,0x4,0x8,0xfc,0x8,0x28,0x28,0x28,0x48,0x48,0x48,0x48,0x60,0xa0,0xa2,0x22,0x1e,0x0,
++0x0,0x3f,0x24,0x24,0x29,0x29,0x3b,0x2d,0x29,0x29,0x29,0x29,0x49,0x49,0x89,0x9,0x8,0xfc,0x80,0xa0,0x14,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x14,0xfe,0x0,
++0x0,0x8,0x7f,0x48,0x48,0x4b,0x48,0x4b,0x48,0x48,0x4b,0x7a,0x4a,0x2,0x3,0x2,0x40,0x24,0xfe,0x0,0x8,0xfc,0x0,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x2,0x1,0x3f,0x8,0x4,0x3f,0x20,0x20,0x23,0x2c,0x20,0x23,0x4c,0x40,0x83,0x1c,0x0,0x10,0xf8,0x20,0x44,0xfe,0x20,0xc0,0x10,0x20,0xc0,0x8,0x10,0x60,0x80,0x0,
++0x10,0x10,0x10,0x15,0x5a,0x50,0x53,0x92,0x12,0x12,0x13,0x2a,0x26,0x46,0x83,0x2,0x80,0x80,0xfc,0x8,0x10,0x84,0x3e,0x4,0x4,0x4,0xbc,0x4,0x4,0x4,0xfc,0x4,
++0x2,0x1,0x7f,0x40,0x9f,0x10,0x1f,0x10,0x1f,0x2,0xff,0x4,0xc,0x3,0xc,0x30,0x0,0x0,0xfe,0x2,0xf4,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x20,0x40,0x80,0x60,0x18,
++0x0,0x40,0x33,0x10,0x0,0x3,0xf2,0x12,0x12,0x12,0x12,0x12,0x16,0x1a,0x14,0x9,0x40,0x24,0xfe,0x88,0x50,0xfe,0x10,0x20,0x48,0x90,0x24,0x44,0x88,0x10,0x60,0x80,
++0x8,0xfc,0x8,0x48,0x49,0x4a,0x4d,0x48,0x7c,0x6,0x5,0x1d,0xe5,0x44,0x17,0x8,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x0,0x48,0x48,0x48,0x50,0x10,0x24,0xfe,0x0,
++0x4,0xfe,0x20,0x21,0x3d,0x25,0x25,0x45,0x65,0x9b,0x8,0x10,0x20,0x40,0x81,0x2,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0xfe,0x20,0x50,0x50,0x88,0x6,0x4,
++0x1,0x1,0x1,0x1f,0x11,0x11,0x11,0x11,0x11,0xff,0x1,0x2,0x2,0x4,0x8,0x30,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x14,0xfe,0x0,0x80,0x80,0x60,0x1c,0x8,
++0x1,0x1f,0x11,0x11,0xff,0x4,0xa,0x3f,0xca,0x8,0x8,0xf,0x0,0x7f,0x0,0x0,0x10,0xf8,0x10,0x14,0xfe,0x40,0x30,0xee,0x24,0xa0,0x44,0xfe,0x4,0xc4,0x14,0x8,
++0x8,0x1c,0xf0,0x11,0x15,0xff,0x11,0x39,0x35,0x53,0x50,0x90,0x10,0x10,0x11,0x12,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0xfe,0x20,0x50,0x50,0x88,0x6,0x4,
++0x10,0x13,0x10,0x10,0xfc,0x10,0x33,0x38,0x54,0x50,0x91,0x11,0x12,0x14,0x11,0x10,0x0,0xf8,0x10,0x20,0x40,0x84,0xfe,0xa4,0xa4,0xa4,0x24,0x44,0x44,0x84,0x28,0x10,
++0x10,0x13,0x10,0x10,0xfc,0x10,0x17,0x18,0x30,0xd0,0x11,0x11,0x12,0x14,0x51,0x20,0x0,0xf8,0x10,0x20,0x40,0x84,0xfe,0xa4,0xa4,0xa4,0x24,0x44,0x44,0x84,0x28,0x10,
++0xa,0x9,0x8,0x17,0x10,0x30,0x53,0x90,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x8,0x10,0xa0,0xfc,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x1,0x0,0x1f,0x10,0x97,0x50,0x50,0x11,0x37,0x51,0xd1,0x12,0x22,0x24,0x49,0x0,0x0,0x84,0xfe,0x0,0xf0,0x40,0x80,0x4,0xfe,0x24,0x24,0x44,0x44,0x84,0x28,0x10,
++0x8,0x4,0x2,0x7f,0x1,0x1,0x1,0x3f,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x20,0x40,0x88,0xfc,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x2,0x41,0x30,0x17,0x80,0x60,0x23,0x8,0x10,0x20,0xef,0x20,0x20,0x20,0x20,0x20,0x8,0x10,0xa0,0xfc,0x40,0x40,0xf8,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x0,0x7d,0x45,0x49,0x49,0x51,0x49,0x49,0x45,0x45,0x45,0x69,0x51,0x41,0x41,0x41,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x8,0x5,0x3f,0x2,0x1f,0x2,0x7f,0x2,0x2,0x2,0x0,0xfc,0x0,0xf8,0x0,0xf8,0x88,0x8,0xe8,0x8,0xc8,0x8,0xfa,0xa,0x4,0x0,
++0x10,0x11,0x12,0x24,0x24,0x64,0xa4,0x24,0x24,0x24,0x25,0x26,0x24,0x20,0x20,0x20,0x80,0x4,0x7e,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x54,0x48,0x40,0x40,0x40,
++0x1,0x0,0x1f,0x11,0x90,0x5f,0x50,0x10,0x37,0x50,0xd0,0x1f,0x20,0x20,0x40,0x0,0x0,0x84,0xfe,0x10,0xa4,0xfe,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x8,0x4,0x2,0x7f,0x1,0x3f,0x1,0xff,0x4,0x8,0x34,0xc4,0x4,0x4,0x8,0x10,0x20,0x40,0x88,0xfc,0x0,0xf8,0x0,0xfe,0x40,0x30,0x4e,0x44,0x40,0x40,0x40,0x40,
++0x12,0x11,0x10,0x17,0xfc,0x10,0x3b,0x34,0x50,0x50,0x9f,0x10,0x10,0x10,0x10,0x10,0x8,0x10,0xa0,0xfc,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x1,0x40,0x3f,0x10,0x87,0x60,0x2f,0x8,0x10,0x23,0xe0,0x27,0x21,0x22,0x2d,0x20,0x10,0xa4,0xfe,0x40,0xfc,0x40,0xfe,0x80,0x40,0xc8,0x50,0x60,0x50,0x4e,0x44,0x80,
++0x2,0x44,0x2f,0x28,0xf,0x8,0xef,0x22,0x3f,0x24,0x27,0x24,0x28,0x52,0x89,0x7,0x10,0x10,0x94,0xbe,0xc4,0xa4,0xa4,0x28,0xa8,0x10,0x90,0xa8,0xa4,0xc4,0x6,0xfc,
++0x8,0x7f,0x48,0x4b,0x4a,0x7a,0x4b,0x48,0x48,0x7f,0x48,0x49,0x48,0x48,0x88,0x1b,0x4,0xfe,0x90,0xfc,0x94,0x94,0xfc,0x40,0x40,0xfe,0x88,0x8,0x90,0x60,0x98,0x4,
++0x10,0x10,0x11,0x10,0xfc,0x24,0x24,0x27,0x24,0x44,0x28,0x10,0x28,0x45,0x82,0x4,0x8,0x1c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x50,0x50,0x88,0x8,0x6,0x4,
++0x8,0xfd,0x10,0x11,0x10,0x10,0x7d,0x11,0x12,0x14,0x13,0x1c,0xf1,0x41,0x1,0x1,0x1c,0xe0,0x0,0x24,0xa4,0xa8,0x0,0xfc,0x20,0x24,0xfe,0x20,0x24,0x24,0xfc,0x4,
++0x10,0x10,0x17,0x12,0xfd,0x11,0x16,0x1b,0x34,0xd0,0x1f,0x10,0x12,0x12,0x53,0x22,0x8,0x3c,0xc0,0x48,0x48,0x50,0x0,0xfc,0x40,0x44,0xfe,0x40,0x48,0x48,0xf8,0x8,
++0x4,0x4,0x3,0x7e,0x1,0x0,0x7,0x38,0x0,0x7f,0x2,0x2,0x4,0x4,0x8,0x70,0x0,0x8,0xfc,0x20,0x40,0x84,0x64,0x1c,0x8,0xfc,0x40,0x40,0x40,0x42,0x42,0x3e,
++0x0,0x47,0x32,0x11,0x2,0x3,0xf4,0x10,0x1f,0x10,0x12,0x13,0x12,0x28,0x47,0x0,0x38,0xc0,0x48,0x50,0x40,0xf8,0x40,0x44,0xfe,0x40,0x48,0xf8,0x8,0x6,0xfc,0x0,
++0x2,0x1,0x7f,0x48,0x90,0x28,0xf,0x11,0x21,0xff,0x1,0x21,0x21,0x21,0x3f,0x20,0x0,0x0,0xfe,0x22,0x14,0x8,0xf0,0x0,0x4,0xfe,0x0,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x27,0x22,0x1,0x1,0xe2,0x23,0x24,0x20,0x2f,0x20,0x2a,0x32,0x23,0x2,0x8,0x3c,0xc0,0x48,0x48,0x50,0x0,0xfc,0x40,0x44,0xfe,0x40,0x48,0x48,0xf8,0x8,
++0x10,0x10,0x10,0x12,0xfd,0x25,0x24,0x24,0x24,0x45,0x2a,0x10,0x28,0x45,0x82,0x4,0x50,0x50,0x50,0x52,0x54,0x58,0x50,0x50,0xd8,0x54,0x54,0x90,0x92,0x12,0xe,0x0,
++0x0,0x8,0x7c,0x4f,0x48,0x49,0x4a,0x4d,0x49,0x48,0x48,0x48,0x78,0x49,0x2,0xc,0x80,0x40,0x44,0xfe,0x0,0x10,0x8,0x14,0x10,0xa0,0xa0,0x40,0xa0,0x10,0xe,0x4,
++0x0,0x0,0x7f,0x2,0x21,0x11,0x11,0x4,0x38,0x20,0x20,0x3e,0x20,0x20,0x3f,0x20,0x10,0x78,0x80,0x8,0x8,0x10,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x4,0x4,0xff,0x4,0x8,0x10,0x22,0x7c,0x9,0x10,0x7e,0x0,0xe,0x70,0x20,0x0,0x40,0x44,0xfe,0x40,0x40,0x44,0x7e,0x84,0x4,0x44,0x24,0x24,0x4,0x4,0x28,0x10,
++0x0,0x7f,0x4,0x3f,0x24,0x24,0x3f,0x2,0x2,0xff,0x4,0x8,0x6,0x1,0x6,0x38,0x8,0xfc,0x40,0xf8,0x48,0x48,0xf8,0x0,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x10,0x13,0x11,0x54,0x39,0x10,0xfd,0x29,0x2b,0x2d,0x29,0x2b,0x2d,0x49,0x81,0x1,0x0,0xfc,0x54,0xcc,0x54,0x44,0x20,0xfe,0x20,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x10,0x17,0x12,0x12,0xfe,0x13,0x3a,0x36,0x53,0x52,0x92,0x13,0x1e,0x10,0x10,0x10,0x0,0xfe,0x52,0x54,0x54,0xd8,0x54,0x52,0xd2,0x52,0x5a,0xd4,0x50,0x50,0x50,0x50,
++0x0,0x17,0x78,0x53,0x50,0x57,0x54,0x5b,0x50,0x53,0x52,0x73,0x41,0x0,0xf,0x0,0x48,0xfc,0x40,0xf8,0x0,0xfe,0x2,0xfc,0x0,0xf8,0x8,0xf8,0x10,0xa4,0xfe,0x0,
++0x2,0x7f,0x22,0x22,0x3e,0x22,0x22,0x3e,0x22,0x22,0x27,0xfa,0x42,0x2,0x2,0x2,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x64,0x58,0x40,0x40,0x40,
++0x4,0x8,0x14,0x2,0x1,0x6,0x18,0xe0,0x1f,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x40,0x20,0x50,0x80,0x0,0xc0,0x30,0xe,0xf0,0x10,0x10,0x10,0x50,0x20,0x0,0x0,
++0x0,0x7f,0x49,0x49,0x7f,0x49,0x49,0x7f,0x8,0xa,0x7f,0x8,0x8,0xf,0xf8,0x40,0x0,0x7c,0x4,0x28,0x10,0x10,0xfe,0x12,0x14,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
++0x0,0x40,0x30,0x10,0x1,0x2,0xf,0x10,0x20,0xe3,0x22,0x22,0x22,0x22,0x23,0x2,0x40,0x40,0x80,0x80,0x10,0x8,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x1,0x1,0x1,0x11,0x11,0x11,0x1f,0xf1,0x11,0x11,0x11,0x11,0x10,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0x30,0xd0,0x10,0x10,0x10,0x50,0x20,0x2,0x2,0x2,0xfe,0x0,
++0x0,0xff,0x2,0x4,0x1f,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x4,0x8,0x30,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x90,0x60,0x18,0x8,
++0x10,0x10,0x17,0x10,0xf9,0x11,0x12,0x1a,0x36,0xdb,0x12,0x12,0x12,0x12,0x53,0x22,0x80,0x44,0xfe,0x20,0x20,0x3c,0x44,0x64,0x98,0x48,0x50,0x20,0x50,0x8e,0x4,0x0,
++0x4,0x4,0x4,0x4,0x44,0x24,0x24,0x14,0x14,0x14,0x14,0x4,0x4,0x4,0xff,0x0,0x40,0x40,0x40,0x40,0x44,0x44,0x48,0x48,0x50,0x50,0x60,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x8,0x7c,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x2,0x2,0x3f,0x22,0x22,0x3f,0x22,0x22,0x3f,0x22,0x1,0x1,0x6,0x18,0xe0,0x0,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x20,0xc0,0x80,0x44,0x34,0xc,
++0x0,0x78,0x4f,0x48,0x49,0x79,0x4a,0x4a,0x4e,0x7b,0x4a,0x4a,0x4a,0x4a,0x8b,0x1a,0x80,0x44,0xfe,0x20,0x20,0x3c,0x44,0x64,0x98,0x48,0x50,0x20,0x50,0x8e,0x4,0x0,
++0x2,0x1,0xff,0x8,0x8,0x10,0x11,0x32,0x56,0x99,0x10,0x10,0x10,0x11,0x12,0x1c,0x0,0x4,0xfe,0x80,0x80,0xf8,0x8,0x88,0x50,0x10,0xa0,0x40,0xa0,0x10,0xe,0x4,
++0x0,0x40,0x37,0x10,0x81,0x61,0x22,0xa,0x16,0x2b,0xe2,0x22,0x22,0x22,0x23,0x22,0x80,0x44,0xfe,0x20,0x20,0x3c,0x44,0x64,0x98,0x48,0x50,0x20,0x50,0x8e,0x4,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x7f,0x1,0x3f,0x0,0x7f,0x40,0x9f,0x0,0x1f,0x10,0x10,0x1f,0x4,0xff,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x2,0xf4,0x0,0xf0,0x10,0x10,0xf0,0x44,0xfe,0x0,
++0x0,0x7f,0x44,0x44,0x4f,0x50,0x40,0x5f,0x40,0x41,0x41,0x42,0x4c,0x40,0x7f,0x0,0x8,0xfc,0x0,0x10,0xf8,0x80,0x88,0xfc,0x80,0x40,0x30,0x18,0x8,0x0,0xfc,0x0,
++0x10,0x11,0x11,0x11,0xfd,0x10,0x17,0x19,0x31,0xd1,0x11,0x11,0x11,0x17,0x50,0x20,0x8,0xfc,0x8,0x8,0xf8,0x0,0xfe,0x8,0xf8,0x8,0xf8,0x8,0xe,0xf8,0x8,0x8,
++0x10,0x10,0x10,0x1f,0x20,0x20,0x7c,0x90,0x11,0x7e,0x14,0x10,0x14,0x18,0x10,0x0,0x40,0x20,0x24,0xfe,0x40,0x40,0xa0,0xa4,0xa8,0x90,0x90,0x88,0x8e,0xa4,0xc0,0x80,
++0x8,0x8,0x8,0x17,0x10,0x30,0x50,0x90,0x11,0x12,0x14,0x10,0x10,0x10,0x10,0x10,0x40,0x20,0x24,0xfe,0x40,0x40,0xa0,0xa4,0xa8,0x90,0x90,0x88,0x8e,0xa4,0xc0,0x80,
++0x8,0xb,0x8,0x10,0x10,0x3f,0x50,0x90,0x10,0x13,0x10,0x10,0x11,0x11,0x12,0x14,0x8,0xfc,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0xf8,0x88,0x80,0x0,0x0,0x0,0x0,
++0x2,0x1,0x1,0xff,0x2,0x2,0x5,0x5,0xc,0x14,0x24,0xc4,0x4,0x5,0x6,0x4,0x0,0x0,0x4,0xfe,0x0,0x8,0x18,0x20,0xc0,0x80,0x40,0x20,0x18,0xe,0x4,0x0,
++0x4,0x7f,0x48,0x48,0x48,0x5e,0x52,0x52,0x52,0x5e,0x48,0x48,0x48,0x48,0x7e,0x1,0x4,0xfe,0x20,0x44,0xfe,0x84,0x94,0x94,0x94,0x94,0xa4,0xa4,0xa4,0x58,0x86,0x2,
++0x1,0x1,0xff,0x1,0x3f,0x1,0x1,0x3f,0x21,0x21,0x3f,0x1,0x2,0xc,0x30,0xc0,0x0,0x4,0xfe,0x0,0xf8,0x8,0x8,0xf8,0x8,0x0,0xfc,0x4,0x94,0x48,0x30,0xe,
++0x0,0x43,0x32,0x13,0x0,0xf,0xf0,0x13,0x12,0x12,0x12,0x10,0x11,0x2a,0x44,0x3,0x48,0xfc,0x48,0xf8,0x40,0xfe,0x8,0xfc,0x8,0x48,0x48,0xa0,0x18,0x8,0x6,0xfc,
++0x8,0x1c,0xf0,0x11,0x12,0xfc,0x10,0x39,0x34,0x54,0x90,0x11,0x10,0x10,0x10,0x17,0x40,0x40,0xfc,0x84,0x48,0x30,0x60,0xa0,0x3e,0x42,0xc4,0x24,0x18,0x30,0xc0,0x0,
++0x8,0x8,0x8,0x12,0x12,0x32,0x51,0x91,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x18,0x0,0x80,0x64,0x24,0x4,0x8,0x8,0x10,0x90,0xa0,0x40,0xa0,0x10,0x8,0xe,0x4,
++0x0,0x78,0x4f,0x48,0x4b,0x78,0x4b,0x4a,0x4a,0x7b,0x48,0x48,0x48,0x48,0x89,0x1e,0x40,0x44,0xfe,0x40,0xf8,0x48,0xf8,0x48,0x40,0xfe,0x42,0x4a,0xa4,0x90,0xe,0x4,
++0x20,0x26,0x38,0x22,0x1e,0x21,0x3e,0x48,0x8,0xfe,0x8,0x8,0x14,0x22,0x41,0x2,0x0,0xfc,0x8,0x50,0x20,0xfe,0x22,0x24,0xa0,0xb8,0xa0,0xa0,0xe0,0xa0,0x1e,0x4,
++0x0,0x40,0x33,0x12,0x82,0x62,0x23,0xa,0x12,0x22,0xe2,0x22,0x24,0x24,0x28,0x20,0x8,0x3c,0xc0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x2,0x1,0x7f,0x40,0x80,0xf,0x8,0x8,0xf,0x8,0x8,0xf,0x8,0x8,0xff,0x0,0x0,0x0,0xfe,0x2,0x24,0xf0,0x20,0x20,0xe0,0x20,0x20,0xe0,0x20,0x24,0xfe,0x0,
++0x20,0x20,0x2f,0x20,0xfb,0x48,0x4b,0x4a,0x4a,0x93,0x50,0x20,0x50,0x48,0x81,0x6,0x40,0x44,0xfe,0x40,0xf8,0x48,0xf8,0x48,0x40,0xfe,0x42,0x4a,0xa4,0x90,0xe,0x4,
++0x8,0xf,0x10,0x1f,0x0,0xff,0x49,0x2a,0x7f,0x1c,0x2a,0x48,0xff,0x8,0x10,0x60,0x20,0xf0,0x20,0xe0,0x24,0xfe,0x20,0x78,0x24,0xfe,0x54,0x92,0xfe,0x10,0x10,0x10,
++0x10,0x10,0x17,0x10,0xfc,0x11,0x37,0x38,0x57,0x52,0x92,0x12,0x13,0x12,0x10,0x10,0x40,0x48,0xfc,0x40,0xa0,0x14,0xfe,0x8,0xe8,0x28,0x28,0x28,0xe8,0x8,0x28,0x10,
++0x10,0x10,0x10,0x12,0x7e,0x55,0x55,0x55,0x54,0x7c,0x10,0x14,0x1c,0xf5,0x42,0xc,0x0,0x80,0x64,0x24,0x4,0x8,0x8,0x10,0x90,0xa0,0x40,0xa0,0x90,0x8,0xe,0x4,
++0x8,0x8,0xf,0x10,0x10,0x31,0x5f,0x90,0x13,0x12,0x12,0x12,0x13,0x12,0x10,0x10,0x40,0x48,0xfc,0x40,0xa0,0x14,0xfe,0x8,0xe8,0x28,0x28,0x28,0xe8,0x8,0x28,0x10,
++0x0,0x7f,0x0,0x0,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,0x0,0x0,0x0,0x4,0x4,0x4,0xfc,0x0,
++0x0,0x0,0x7f,0x0,0x0,0x1,0x2,0x4,0x8,0x10,0x10,0x20,0x20,0x20,0x1f,0x0,0x0,0x0,0xe0,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0xfc,0x0,
++0x2,0x4,0x8,0x10,0x3f,0x8,0x8,0x1f,0x21,0x1,0xff,0x2,0x4,0x8,0x10,0x60,0x0,0x0,0x20,0x10,0xf8,0x8,0x10,0xf8,0x0,0x4,0xfe,0x80,0x40,0x30,0x1c,0x8,
++0x0,0x4,0x42,0x43,0x41,0x40,0x40,0x40,0x41,0x42,0x44,0x48,0x50,0x60,0x1,0x6,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0x10,0x10,0x20,0x30,0x48,0x84,0x4,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x0,0x1,0x2,0x4,0x8,0x10,0x20,0x20,0x20,0x1f,0x40,0x44,0xfe,0x40,0x0,0xc0,0x80,0x0,0x0,0x0,0x0,0x0,0x2,0x2,0x2,0xfe,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x16,0x1a,0x32,0xd2,0x12,0x13,0x12,0x10,0x50,0x20,0x40,0x84,0x3e,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0xa4,0x34,0x28,0x20,0x20,0x20,
++0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x8,0x1f,0x24,0x44,0x88,0x10,0x21,0x2,0x4,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,0x4,0xfe,0x44,0x44,0x84,0x84,0x4,0x28,0x10,
++0x1f,0x10,0x10,0x1f,0x0,0x3f,0x21,0x21,0x21,0x3f,0x20,0x20,0x20,0x20,0x1f,0x0,0xf0,0x10,0x10,0xf0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x4,0x4,0xfc,0x0,
++0x10,0x10,0x10,0x10,0x55,0x56,0x55,0x54,0x54,0x54,0x54,0x55,0x7d,0x45,0x0,0x0,0x80,0x80,0x88,0xfc,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x2,0x2,0xfe,0x0,
++0x8,0x8,0xb,0x10,0x10,0x30,0x50,0x91,0x12,0x12,0x14,0x14,0x14,0x14,0x13,0x10,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x8,0x9,0x11,0x21,0x41,0xa,0x14,0x33,0x51,0x91,0x10,0x10,0x10,0x10,0x13,0x1c,0x10,0xf8,0x10,0x10,0x10,0xe,0x0,0xf8,0x8,0x10,0x90,0xe0,0x40,0xb0,0xe,0x4,
++0x0,0x7b,0x49,0x48,0x4f,0x78,0x4b,0x4a,0x4b,0x7a,0x4b,0x48,0x4b,0x4b,0x8d,0x18,0x40,0xf8,0x10,0xa4,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x80,0x68,0x26,0xa,0xf8,
++0x2,0x43,0x24,0x28,0x1f,0x8,0xe8,0x2f,0x20,0x21,0x21,0x22,0x24,0x58,0x88,0x7,0x0,0xe0,0x20,0x48,0xfc,0x88,0x88,0xf8,0x80,0x40,0x54,0x44,0x3c,0x0,0x6,0xfc,
++0x40,0x4c,0x71,0x40,0x47,0x3c,0x41,0x7c,0x91,0x10,0xfe,0x13,0x28,0x24,0x44,0x80,0x20,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x0,0x1f,0x10,0x91,0x51,0x51,0x12,0x34,0x53,0xd1,0x10,0x20,0x21,0x46,0x18,0x80,0x44,0xfe,0x0,0xf0,0x10,0x10,0xc,0x0,0xf8,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x2,0x1,0x1,0xff,0x4,0x4,0x4,0x14,0x14,0x24,0x44,0x4,0x8,0x8,0x11,0x0,0x0,0x0,0x4,0xfe,0x40,0x40,0x40,0x50,0x48,0x44,0x44,0x40,0x40,0x40,0x40,0x80,
++0x2,0x1,0xff,0x5,0xc,0x34,0xc5,0x6,0x3f,0x24,0x28,0x37,0x24,0x24,0x27,0x20,0x0,0x4,0xfe,0x10,0xa0,0x60,0x1c,0x8,0xfc,0x48,0x28,0xd8,0x48,0x48,0xc8,0x18,
++0x1,0x3f,0x8,0x4,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x2,0x51,0x50,0x90,0xf,0x10,0xf8,0x20,0x44,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0x84,0x92,0x12,0xf0,
++0x10,0x8,0x7f,0x22,0x14,0xff,0x20,0x52,0x9c,0x28,0x4c,0x1b,0x29,0xc8,0x28,0x11,0x8,0x7c,0x48,0x48,0x48,0x86,0x0,0xf8,0x48,0x48,0x48,0x30,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x13,0x10,0x58,0x54,0x50,0x91,0x12,0x12,0x14,0x14,0x14,0x14,0x13,0x10,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x0,0x2,0x21,0x21,0x10,0x10,0x8,0x8,0x4,0x2,0x1,0x2,0x4,0x8,0x10,0x60,0x0,0x8,0x8,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x0,0x80,0x60,0x18,0xe,0x4,
++0x8,0x4,0x0,0x7f,0x0,0x4,0x8,0x10,0x0,0x3f,0x24,0x24,0x24,0x24,0xff,0x0,0x20,0x40,0x8,0xfc,0x0,0x40,0x30,0x10,0x0,0xf8,0x48,0x48,0x48,0x48,0xfe,0x0,
++0x2,0x41,0x30,0x17,0x80,0x61,0x22,0xc,0x10,0x27,0xe5,0x25,0x25,0x25,0x3f,0x20,0x10,0x20,0x8,0xfc,0x0,0x20,0x18,0x8,0x0,0xf8,0x28,0x28,0x28,0x28,0xfe,0x0,
++0x2,0x42,0x33,0x12,0x2,0x1,0xf0,0x10,0x13,0x12,0x12,0x13,0x16,0x1a,0x13,0x2,0x0,0x38,0xc0,0x2,0x2,0xfe,0x0,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x0,0x40,0x30,0x12,0x2,0x2,0xf1,0x11,0x10,0x10,0x10,0x14,0x19,0x12,0x4,0x8,0x0,0x80,0x44,0x44,0x4,0x8,0x8,0x10,0x90,0xa0,0x40,0xa0,0x10,0x8,0xe,0x4,
++0x0,0x40,0x2f,0x28,0x10,0x3,0xe2,0x22,0x23,0x22,0x22,0x23,0x2a,0x32,0x2f,0x0,0x80,0x40,0xfe,0x2,0x4,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0xfe,0x0,
++0x0,0x47,0x22,0x21,0x0,0x0,0xe3,0x2c,0x20,0x23,0x20,0x24,0x2f,0x30,0x20,0x0,0x0,0xfc,0x8,0xb0,0x40,0xa0,0x1e,0x44,0x50,0xf8,0x40,0x48,0xfc,0x40,0x40,0x40,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x1f,0x8,0x8,0xff,0x8,0x8,0x8,0x10,0x20,0x10,0xf8,0x10,0x10,0xf0,0x4,0x4,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x7e,0x22,0x1a,0x22,0x2,0x1f,0x11,0x1f,0x11,0x1f,0x4,0x3f,0x4,0xff,0x8,0x30,0xf8,0x88,0x68,0x88,0x8,0xf0,0x10,0xf0,0x10,0xf0,0x40,0xf8,0x40,0xfe,0x20,0x10,
++0x0,0x7e,0x22,0x12,0x6,0x1a,0x62,0x1,0x1,0x7f,0x0,0x8,0x4,0x4,0xff,0x0,0x4,0xfe,0x44,0x24,0xc,0x34,0xc4,0x0,0x8,0xfc,0x20,0x20,0x40,0x44,0xfe,0x0,
++0x10,0x11,0x20,0x20,0x44,0xf8,0x10,0x23,0x40,0xfd,0x0,0x0,0x1d,0xe0,0x40,0x0,0x0,0xfc,0x88,0x50,0x20,0x50,0x8e,0x24,0x20,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,
++0x4,0x4,0xff,0x4,0x3f,0x21,0x21,0x2f,0x21,0x22,0x22,0x24,0x28,0x20,0x3f,0x20,0x40,0x44,0xfe,0x40,0xf8,0x8,0x8,0xe8,0x8,0x88,0x88,0x48,0x28,0x8,0xf8,0x8,
++0x8,0x8,0xff,0x8,0x7c,0x44,0x48,0x50,0x48,0x44,0x44,0x64,0x59,0x41,0x42,0x44,0x20,0x24,0xfe,0x20,0xfc,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,0x4,0x4,0x14,0x8,
++0x0,0x7f,0x41,0x41,0x41,0x5f,0x41,0x41,0x42,0x42,0x44,0x48,0x50,0x40,0x7f,0x40,0x4,0xfe,0x4,0x4,0x24,0xf4,0x4,0x4,0x84,0x84,0x44,0x34,0x14,0x4,0xfc,0x4,
++0xc,0x70,0x44,0x7e,0x44,0x7d,0x46,0x7d,0x40,0x7c,0x44,0x44,0x44,0x54,0x48,0x83,0x8,0xfc,0x88,0x88,0x88,0x6,0x0,0xfc,0x88,0x88,0x50,0x20,0x50,0x50,0x8e,0x4,
++0x2,0x1,0x3f,0x8,0x4,0x4,0xff,0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0x10,0xf8,0x20,0x20,0x44,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x0,0x7c,0x44,0x48,0x48,0x50,0x48,0x48,0x44,0x44,0x44,0x68,0x51,0x41,0x42,0x44,0x4,0xfe,0x84,0x84,0x84,0xfc,0x84,0x84,0x84,0xfc,0x84,0x84,0x4,0x4,0x14,0x8,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x1,0x4,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x54,0x54,0x54,0x8c,0x4,0x4,0xfc,0x4,
++0x0,0x8,0x7c,0x48,0x49,0x49,0x4a,0x4c,0x48,0x4b,0x48,0x78,0x48,0x0,0x0,0x0,0x40,0x40,0xa0,0xa0,0x10,0x10,0x8e,0x44,0x40,0xf8,0x8,0x10,0x10,0x20,0x40,0x80,
++0x10,0x11,0x11,0x3d,0x21,0x21,0x7d,0x91,0x11,0xfd,0x11,0x13,0x15,0x19,0x11,0x1,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x4,0x8c,0x50,0x20,0x10,0x4e,0x84,0x0,
++0x40,0x30,0x17,0x0,0x84,0x62,0x22,0x7,0x10,0x20,0xef,0x20,0x20,0x20,0x27,0x20,0x8,0x3c,0xc0,0x4,0x84,0x48,0x10,0xfc,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x0,
++0x2,0x1,0x7f,0x40,0x80,0x3f,0x1,0x3f,0x21,0x3f,0x21,0x3f,0x0,0xc,0x30,0x40,0x0,0x0,0xfe,0x2,0x14,0xf8,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0x60,0x18,0x4,
++0x10,0x10,0x10,0x10,0x1e,0x22,0x25,0x50,0x90,0x10,0x10,0x12,0x14,0x18,0x11,0x2,0x20,0x20,0x20,0x40,0x7e,0x82,0x24,0x20,0x20,0x20,0x50,0x50,0x90,0x88,0xe,0x4,
++0x0,0x0,0x3f,0x4,0x4,0xff,0x4,0x4,0x3f,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x0,0x10,0xf8,0x10,0x14,0xfe,0x10,0x10,0xf0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x7f,0x1,0x1,0x1,0x3f,0x20,0x20,0x41,0x7f,0x1,0x1,0x1,0x11,0xa,0x4,0x8,0x88,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x88,0x8,0x8,0x8,0x8,0x8,0x8,
++0x0,0x78,0x48,0x51,0x52,0x67,0x50,0x4b,0x48,0x4b,0x68,0x52,0x42,0x46,0x4a,0x41,0x80,0x80,0xf0,0x10,0x24,0xfe,0x4,0xfc,0x4,0xfc,0x4,0x80,0x60,0x2c,0xa,0xf8,
++0x6,0x78,0x40,0x40,0x40,0x44,0x7e,0x40,0x40,0x40,0x40,0x4e,0x70,0x0,0x0,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0xa8,0x90,0x80,0x80,0x80,
++0x8,0x8,0x7f,0x8,0x1,0x1f,0x11,0x11,0x11,0xff,0x1,0x2,0x2,0x4,0x18,0x60,0x20,0x28,0xfc,0x20,0x10,0xf8,0x10,0x10,0x14,0xfe,0x0,0x80,0x80,0x60,0x1c,0x8,
++0x10,0x17,0x14,0x15,0xfd,0x16,0x3b,0x34,0x50,0x5f,0x90,0x11,0x10,0x10,0x11,0x16,0x0,0xbc,0xa4,0xac,0xac,0xb4,0x18,0xa4,0x80,0xfe,0x90,0x10,0xa0,0x40,0xb0,0x8,
++0x0,0x3e,0x22,0x2a,0x2a,0x2a,0x14,0x62,0x2,0xff,0x4,0x8,0x4,0x3,0x4,0x38,0x8,0xfc,0x88,0xa8,0xa8,0xa8,0x50,0x88,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x0,0x3f,0x22,0x24,0x2c,0x35,0x24,0x24,0x21,0x27,0x24,0x24,0x47,0x40,0x9f,0x0,0x80,0xfe,0x50,0x7c,0xd0,0x7c,0x50,0x5c,0x0,0xf0,0x90,0x20,0xfc,0x4,0xe4,0xc,
++0x1,0x0,0x3f,0x20,0x21,0x28,0x24,0x24,0x22,0x22,0x22,0x22,0x40,0x40,0x9f,0x0,0x0,0x84,0xfe,0x0,0x4,0x84,0x84,0x48,0x48,0x48,0x10,0x10,0x20,0x44,0xfe,0x0,
++0x10,0x17,0x24,0x25,0x45,0xfe,0x13,0x24,0x40,0xff,0x0,0x1,0x1c,0xe0,0x41,0x6,0x0,0xbc,0xa4,0xac,0xac,0xb4,0x18,0xa4,0x80,0xfe,0x90,0x10,0xa0,0x40,0xb0,0x8,
++0x4,0x4,0x7f,0x4,0x4,0x7f,0x40,0xbf,0x1,0x1,0x3f,0x1,0x1,0x1,0xff,0x0,0x40,0x48,0xfc,0x40,0x40,0xfe,0x2,0xf4,0x0,0x10,0xf8,0x0,0x40,0x24,0xfe,0x0,
++0x4,0x4,0x7f,0x4,0x4,0x7f,0x41,0x81,0x1f,0x11,0x11,0x1f,0x1,0x1,0x3f,0x0,0x40,0x48,0xfc,0x40,0x40,0xfe,0x2,0x14,0xf8,0x10,0x10,0xf0,0x0,0x10,0xf8,0x8,
++0x4,0x4,0x7f,0x4,0x7f,0x40,0x8f,0x8,0x8,0xf,0x0,0x1f,0x10,0x10,0x1f,0x10,0x40,0x48,0xfc,0x40,0xfe,0x2,0xe4,0x20,0x20,0xe0,0x0,0xf0,0x10,0x10,0xf0,0x10,
++0x4,0x4,0x7f,0x4,0x4,0x7f,0x41,0x81,0x9,0x9,0x11,0x2,0x2,0x4,0x18,0x60,0x40,0x48,0xfc,0x40,0x40,0xfe,0x2,0x14,0x30,0x40,0x0,0x80,0x40,0x30,0xe,0x4,
++0x10,0x10,0x14,0x7e,0x54,0x54,0x55,0x55,0x55,0x7d,0x11,0x15,0x1d,0xf4,0x40,0x0,0x8,0xfc,0x88,0x88,0xf8,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0x22,0x1e,
++0x0,0x41,0x26,0x14,0x4,0x4,0xf4,0x14,0x15,0x16,0x14,0x10,0x10,0x28,0x47,0x0,0x0,0x84,0x7e,0x44,0x44,0x44,0x44,0xc4,0x44,0x54,0x48,0x40,0x40,0x46,0xfc,0x0,
++0x1,0xff,0x10,0x1f,0x0,0x1f,0x10,0x1f,0x0,0x77,0x54,0x75,0x55,0x71,0x52,0xb4,0x0,0xfe,0x0,0xf0,0x0,0xf0,0x10,0xf0,0x0,0xdc,0x54,0x54,0x5c,0x14,0x96,0x62,
++0x0,0x7f,0x10,0x17,0x14,0x12,0x21,0x22,0x44,0x0,0x3f,0x24,0x24,0x24,0xff,0x0,0x10,0xf8,0x10,0xd0,0x7c,0x84,0x4,0xd4,0x48,0x0,0xf8,0x48,0x48,0x48,0xfe,0x0,
++0x0,0x3f,0x20,0x3f,0x20,0x3f,0x4,0xff,0x0,0x3f,0x20,0x3f,0x15,0x24,0x54,0x8,0x84,0xc4,0x88,0x90,0xa0,0x84,0x4,0xe8,0x10,0xa2,0x82,0x84,0x8,0x90,0xa0,0x40,
++0x40,0x4b,0x70,0x40,0x45,0x3d,0x1,0x1d,0xf1,0x15,0xff,0x11,0x38,0x54,0x91,0x16,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x20,0x58,0x84,0x2,
++0x4,0xff,0x10,0x10,0x21,0x25,0x7f,0xa5,0x25,0x25,0x25,0x24,0x3d,0x24,0x0,0x3,0x4,0xfe,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xa0,0x60,0x9e,0x4,
++0x0,0x8,0x7c,0x4b,0x4a,0x4a,0x4a,0x7a,0x4a,0x4f,0x48,0x48,0x78,0x49,0x2,0xc,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0x48,0x48,0xfe,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x0,0x11,0x79,0x52,0x52,0x54,0x5f,0x52,0x54,0x5f,0x50,0x71,0x4e,0x4,0x0,0x0,0x20,0x20,0x24,0x3e,0x44,0x84,0x4,0x44,0x24,0xa4,0x4,0x84,0x4,0x44,0x28,0x10,
++0x20,0x27,0x24,0x24,0xfc,0x27,0x2c,0x34,0x64,0xa7,0x24,0x24,0x28,0x28,0xb0,0x40,0x4,0xfe,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0x44,0x54,0x8,
++0x10,0x17,0x14,0x24,0x24,0x67,0xa4,0x24,0x24,0x27,0x24,0x24,0x28,0x28,0x30,0x20,0x4,0xfe,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0x44,0x54,0x8,
++0x0,0x78,0x4f,0x49,0x4a,0x7a,0x4f,0x49,0x4a,0x7c,0x4f,0x48,0x48,0x49,0x4a,0x9c,0x40,0x24,0xfe,0x10,0x28,0xbe,0x68,0x28,0xbe,0xa8,0xa8,0xbe,0xa8,0x28,0x3e,0x20,
++0x0,0x0,0x1f,0x10,0x97,0x54,0x54,0x17,0x34,0x54,0xd7,0x14,0x24,0x24,0x48,0x10,0x80,0x44,0xfe,0x0,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x44,0x54,0x8,
++0x0,0x3f,0x20,0x2f,0x20,0x3f,0x20,0x2f,0x20,0x2f,0x28,0x2f,0x48,0x4f,0x88,0x8,0x84,0xfe,0x80,0xf8,0x88,0xfe,0x88,0xf8,0x80,0xf8,0x88,0xf8,0x88,0xf8,0x88,0x98,
++0x1,0x0,0xff,0x8,0x10,0x21,0x49,0xfb,0x11,0x25,0x45,0xf9,0x9,0x11,0x21,0x41,0x0,0x84,0xfe,0xa0,0x94,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x14,0xfe,0x0,
++0x0,0x7d,0x44,0x44,0x44,0x7d,0x11,0x11,0x5d,0x51,0x51,0x51,0x5d,0xf1,0x41,0x1,0x0,0xfc,0x8,0x50,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x24,0x24,0xc,
++0x10,0x11,0x10,0x14,0x7e,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xf5,0x41,0x1,0x0,0xfc,0x8,0x50,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x24,0x24,0xc,
++0x0,0x8,0x7c,0x4b,0x48,0x48,0x4f,0x48,0x49,0x49,0x4a,0x7a,0x44,0x8,0x1,0x0,0x80,0x40,0x0,0xc0,0x44,0x4c,0xf0,0xe0,0x50,0x50,0x48,0x4e,0x44,0x40,0x40,0x80,
++0x0,0x40,0x30,0x13,0x80,0x60,0x27,0x8,0x11,0x21,0xe2,0x22,0x24,0x28,0x21,0x20,0x80,0x40,0x0,0xc0,0x44,0x4c,0xf0,0xe0,0x50,0x50,0x48,0x4e,0x44,0x40,0x40,0x80,
++0x0,0x47,0x30,0x10,0x80,0x67,0x24,0xc,0x17,0x24,0xe4,0x27,0x24,0x24,0x24,0x24,0x0,0xf8,0x10,0xa0,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x54,0x8,
++0x2,0x1,0x0,0x1f,0x1,0x1,0x7d,0x5,0x5,0x9,0x9,0x11,0x21,0x41,0x5,0x2,0x0,0x0,0x0,0x0,0x8,0x18,0xa0,0x40,0x40,0x20,0x20,0x10,0xe,0x4,0x0,0x0,
++0x3f,0x2,0x1,0x3f,0x21,0x3f,0x21,0x3f,0x21,0x21,0x2,0x51,0x50,0x90,0xf,0x0,0xf0,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x18,0x0,0x84,0x92,0x12,0xf0,0x0,
++0x3f,0x2,0x1,0x3f,0x21,0x3f,0x21,0x3f,0x21,0x21,0x7f,0x2,0x2,0x4,0x18,0x60,0xf0,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x10,0xf8,0x8,0x8,0x8,0x50,0x20,
++0x0,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x41,0x41,0x80,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x28,0x10,
++0x1,0x1,0x9,0x49,0x49,0x51,0x53,0x7d,0x45,0x49,0x55,0x7f,0x43,0x41,0x7f,0x40,0x0,0x0,0x20,0x24,0x24,0x44,0x4c,0xf4,0x14,0x24,0x54,0xfc,0xc,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x20,0x20,0x7f,0xa1,0x21,0x21,0x22,0x22,0x22,0x24,0x24,0x28,0x30,0x80,0xa0,0x90,0x90,0x84,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x8,0x8,0x10,0x15,0x36,0x54,0x94,0x14,0x14,0x11,0x2,0x51,0x50,0x90,0xf,0x0,0x80,0x84,0xfe,0x8,0x88,0x50,0x20,0x50,0x8e,0x4,0x0,0x84,0x92,0x12,0xf0,0x0,
++0x10,0x10,0x10,0x10,0x58,0x57,0x51,0x91,0x11,0x11,0x12,0x12,0x12,0x14,0x14,0x18,0x80,0xa0,0x90,0x90,0x84,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x1,0x1,0x1,0x1,0x1,0xff,0x2,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x0,0x40,0x20,0x20,0x4,0xfe,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x1,0x1,0x1,0x1,0x7f,0x41,0x41,0x41,0x41,0x7f,0x41,0x41,0x41,0x41,0x7f,0x40,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x8,0x9,0x7f,0x49,0x49,0x49,0x49,0x7f,0x49,0x49,0x49,0x49,0x7f,0x41,0x0,0x0,0x0,0x7c,0xc4,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x10,0x10,0x10,0x1d,0x21,0x21,0x7d,0x91,0x11,0x7d,0x11,0x11,0x15,0x19,0x11,0x0,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,
++0x0,0x44,0x2c,0x10,0x28,0x4f,0x89,0x9,0x19,0x29,0x49,0x8a,0xa,0xa,0x54,0x28,0x80,0xa0,0x90,0x90,0x84,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x40,0x30,0x10,0x87,0x64,0x24,0xc,0x14,0x27,0xe4,0x24,0x24,0x24,0x27,0x24,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0x44,0xfc,0x4,
++0x2,0x41,0x20,0x2f,0x82,0x62,0x23,0x2,0x12,0x22,0xe2,0x24,0x24,0x28,0x31,0x20,0x10,0x14,0x1e,0xe0,0x40,0x3e,0x84,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0xa8,0x10,
++0x0,0xff,0x4,0x4,0x3f,0x24,0x24,0x24,0x24,0x28,0x30,0x2f,0x20,0x20,0x3f,0x20,0x4,0xfe,0x40,0x48,0xfc,0x48,0x48,0x48,0x78,0x8,0x48,0xe8,0x8,0x8,0xf8,0x8,
++0x2,0x2,0xff,0x4,0x4,0xf,0x8,0x18,0x2f,0x48,0x88,0xf,0x8,0x8,0x8,0x8,0x0,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x4,0x4,0x4,0xff,0x4,0x4,0xf,0x8,0x14,0x12,0x21,0x40,0x81,0x6,0x18,0x60,0x0,0x0,0x4,0xfe,0x0,0x0,0xf0,0x10,0x20,0x20,0x40,0x80,0x40,0x30,0xe,0x4,
++0x2,0x2,0x2,0xff,0x4,0x4,0x8,0x8,0x1f,0x28,0x48,0x88,0x8,0x8,0xf,0x8,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0x8,0x10,0x1f,0x31,0x51,0x92,0x13,0x15,0x19,0x11,0x11,0x11,0x11,0x11,0x80,0x80,0x80,0x84,0xfe,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x4,0xe,0xf0,0x12,0x57,0x39,0x11,0xff,0x11,0x39,0x35,0x55,0x91,0x11,0x11,0x11,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x0,0x47,0x20,0x20,0xf,0x1,0xe2,0x24,0x2b,0x21,0x21,0x21,0x2a,0x32,0x24,0x8,0x38,0xc0,0x40,0x44,0xfe,0x60,0x50,0x4e,0xf4,0x10,0x20,0x3c,0x4,0x4,0x28,0x10,
++0x0,0x7f,0x10,0x10,0x10,0x8,0x8,0x4,0x4,0x2,0x1,0x2,0x4,0x8,0x30,0xc0,0x0,0xf0,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x80,0x40,0x30,0xe,0x4,
++0x0,0x10,0x10,0x10,0x20,0x25,0x44,0xf8,0x10,0x10,0x20,0x48,0xfc,0x45,0x2,0x4,0x40,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x4,0x28,0x10,
++0x0,0x43,0x30,0x10,0x0,0x7,0xf0,0x10,0x10,0x10,0x10,0x11,0x10,0x28,0x47,0x0,0x10,0xf8,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x6,0xfc,0x0,
++0x4,0x42,0x22,0x3f,0x84,0x44,0x47,0xd,0x15,0x25,0xe5,0x25,0x25,0x29,0x35,0x22,0x10,0x10,0x90,0xd0,0x28,0x28,0x44,0x82,0x20,0x18,0x8,0x0,0x20,0x18,0xc,0x4,
++0x0,0x3f,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x10,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x1,0x1,0xff,0x1,0x1,0x5,0x2,0x3f,0x24,0x24,0x24,0x24,0xff,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,0x0,0x0,0x8,0xfc,0x48,0x48,0x48,0x48,0xfe,0x0,
++0x10,0x10,0x10,0x11,0xfe,0x14,0x33,0x3a,0x56,0x53,0x92,0x12,0x13,0x12,0x12,0x12,0x40,0x60,0x90,0x8,0xf6,0x0,0xc4,0x54,0x54,0xd4,0x54,0x54,0xc4,0x44,0x54,0xc8,
++0x1,0x1,0x3f,0x20,0x2f,0x20,0x27,0x24,0x27,0x20,0x2f,0x20,0x5f,0x41,0x86,0x18,0xf8,0x0,0xfe,0x84,0xf0,0x84,0xfc,0x10,0xf0,0x80,0xf8,0x80,0xfe,0x40,0x30,0xc,
++0x0,0x1f,0x11,0x1f,0x11,0x1f,0x1,0x3f,0x21,0x22,0x27,0x22,0x51,0x50,0x90,0xf,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x8,0xfc,0x8,0x48,0xe8,0x10,0x84,0x92,0x12,0xf0,
++0x1,0x9,0x31,0x27,0x22,0x3d,0x27,0x21,0x39,0x27,0x21,0xff,0x0,0x10,0x30,0x40,0x0,0x8,0x3c,0xc8,0x8,0x38,0xc8,0x8,0x38,0xc8,0x8,0xfe,0x0,0x10,0xc,0x4,
++0x1,0x1,0x2,0x4,0x8,0x10,0x2f,0xc1,0x1,0x3f,0x1,0x9,0x19,0x21,0x45,0x2,0x0,0x0,0x80,0x40,0x20,0x10,0xee,0x4,0x10,0xf8,0x0,0x20,0x18,0xc,0x4,0x0,
++0x1,0x2,0x4,0x8,0x37,0xc0,0x3e,0x22,0x22,0x3e,0x22,0x22,0x3e,0x22,0x22,0x26,0x0,0x80,0x40,0x30,0xce,0x4,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x8,0x18,
++0x0,0x41,0x22,0x24,0xb,0x10,0xe7,0x24,0x27,0x24,0x27,0x24,0x25,0x50,0x8f,0x0,0x80,0x40,0x20,0x10,0xee,0x4,0x88,0xa8,0xa8,0xa8,0xa8,0x88,0x98,0x6,0xfc,0x0,
++0x4,0x4,0xf,0x10,0x20,0x7f,0xa1,0x21,0x3f,0x21,0x21,0x3f,0x20,0x0,0xff,0x0,0x0,0x0,0xe0,0x40,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x4,0xfe,0x0,
++0x20,0x20,0x21,0x22,0xb5,0xa8,0xa7,0x24,0x24,0x27,0x24,0x24,0x27,0x24,0x24,0x25,0x40,0xc0,0x20,0x10,0xee,0x4,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x88,0xa8,0x90,
++0x0,0x40,0x31,0x12,0x85,0x68,0x27,0xc,0x14,0x27,0xe4,0x24,0x27,0x24,0x24,0x25,0x40,0xc0,0x20,0x10,0xee,0x4,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x88,0xa8,0x90,
++0x1,0x41,0x31,0x12,0x84,0x6f,0x24,0xc,0x17,0x24,0xe4,0x27,0x24,0x20,0x2f,0x20,0x0,0x0,0xf8,0x10,0x24,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,0x0,0xfe,0x0,
++0x0,0x7b,0x4a,0x52,0x53,0x62,0x52,0x4b,0x48,0x4f,0x6c,0x54,0x45,0x44,0x44,0x44,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x44,0xfe,0x44,0x54,0xf4,0x84,0x14,0x8,
++0x0,0x3f,0x0,0x2,0x1,0x0,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x0,0xf0,0x40,0x80,0x0,0x80,0xfc,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x24,0x25,0x24,0x44,0x2f,0x10,0x28,0x45,0x82,0x4,0x8,0xfc,0x8,0x8,0xf8,0x8,0x0,0xf8,0x40,0x44,0xfe,0x40,0xa0,0x10,0xe,0x4,
++0x0,0xff,0x1,0x1,0x3f,0x21,0x21,0x29,0x25,0x21,0x21,0x29,0x25,0x21,0x21,0x20,0x4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x48,0x28,0x8,0x8,0x48,0x28,0x8,0x28,0x10,
++0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x1f,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0x8,0x48,0xe8,0x8,0x8,0x50,0x20,
++0x10,0x10,0x10,0x10,0x54,0x54,0x54,0x54,0x54,0x54,0x57,0x7c,0x44,0x0,0x0,0x0,0x80,0x80,0x88,0xfc,0x80,0x80,0x84,0xfe,0x4,0x24,0xf4,0x4,0x4,0x4,0x28,0x10,
++0x0,0x0,0x7f,0x1,0x3f,0x21,0x21,0x3f,0x1,0x7f,0x41,0x41,0x5f,0x48,0x40,0x40,0x10,0x78,0x80,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x4,0x44,0xe4,0x24,0x4,0xc,
++0x2,0x1,0x7f,0x40,0x80,0x1f,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x0,0x0,0xfe,0x2,0x24,0xf0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x4f,0x21,0x21,0x7,0x2,0xe2,0x3f,0x20,0x20,0x27,0x24,0x2c,0x34,0x27,0x4,0x8,0xfc,0x0,0x10,0xf8,0x10,0x14,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x7e,0x2,0x2,0x22,0x12,0x12,0x2,0xa,0x12,0x62,0x22,0x2,0x2,0x14,0x8,0x4,0xfe,0x4,0x4,0x44,0x24,0x24,0x4,0x14,0x24,0xc4,0x44,0x4,0x4,0x28,0x10,
++0x0,0x7f,0x1,0x1,0x1,0x1,0x1,0x3f,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x40,0x30,0x10,0x4,0xfe,0x0,
++0x20,0x20,0x20,0x27,0xf8,0x20,0x27,0x24,0x24,0x24,0x3f,0xe0,0x43,0xc,0x0,0x1,0x20,0x28,0x24,0xfe,0x20,0xa0,0xe0,0xa4,0xa4,0xa8,0x90,0x10,0xaa,0x4a,0x86,0x0,
++0x8,0x8,0xff,0x8,0x0,0x3f,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x20,0x24,0xfe,0x20,0x10,0xf8,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x11,0xff,0x20,0x22,0x7f,0x62,0xa2,0x3e,0x22,0x22,0x3e,0x22,0x22,0x2a,0x24,0x0,0x7c,0xc4,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x0,0xb,0x7c,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x1,0x0,0x8,0xfc,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x0,0x47,0x24,0x27,0x4,0x7,0xe0,0x2f,0x28,0x28,0x2b,0x28,0x28,0x50,0x88,0x7,0x8,0xfc,0x88,0xf8,0x88,0xf8,0x84,0xfe,0x84,0xa4,0xf4,0x4,0x14,0x8,0x6,0xfc,
++0x0,0x10,0x79,0x52,0x55,0x58,0x57,0x54,0x54,0x57,0x54,0x74,0x57,0x4,0x4,0x5,0x40,0xc0,0x20,0x10,0xee,0x4,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x88,0xa8,0x90,
++0x10,0x10,0x10,0x55,0x54,0x54,0x54,0x55,0x56,0x55,0x55,0x7d,0x45,0x1,0x1,0x1,0x50,0x50,0x88,0x24,0x50,0x50,0x88,0x6,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x14,0x14,0x27,0x4a,0x82,0x12,0x2f,0x62,0xaa,0x2b,0x2a,0x2a,0x2b,0x3c,0x28,0x20,0x0,0x4,0xbe,0x24,0x24,0xa4,0xe4,0x24,0x24,0xa4,0x24,0x34,0xa8,0x20,0x20,0x20,
++0x1,0x2,0x4,0xf,0x30,0xde,0x12,0x1e,0x12,0x1e,0x12,0x16,0x29,0x28,0x48,0x7,0x0,0x80,0x40,0xf0,0xe,0x14,0x90,0x90,0x90,0x90,0x10,0x30,0x4,0x92,0x12,0xf0,
++0x28,0x28,0x44,0x92,0x10,0x29,0x46,0x82,0x7c,0x44,0x44,0x44,0x44,0x7c,0x45,0x2,0x40,0x40,0x40,0x7c,0x84,0x28,0x20,0x20,0x20,0x20,0x50,0x50,0x90,0x88,0xe,0x4,
++0x4,0x88,0x54,0x22,0x52,0x91,0x1e,0x12,0x32,0x52,0x92,0x13,0x12,0x10,0xa1,0x42,0x20,0x20,0x30,0x28,0x20,0xfe,0x20,0x20,0x20,0x20,0xd0,0x50,0x88,0x88,0x6,0x4,
++0x2,0x1,0xff,0x4,0x8,0x3f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x10,0x0,0x4,0xfe,0x0,0x10,0xf8,0x8,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x22,0x11,0x9,0xff,0x4,0x9,0x1f,0x20,0xdf,0x0,0x1f,0x0,0x1f,0x10,0x1f,0x10,0x8,0x10,0x24,0xfe,0x40,0x20,0xf0,0xe,0xf4,0x0,0xf0,0x0,0xf0,0x10,0xf0,0x10,
++0x1,0x41,0x32,0x14,0x80,0x60,0x20,0x9,0x12,0x27,0xea,0x22,0x22,0x22,0x23,0x22,0x10,0x10,0x8,0x44,0x40,0xa0,0xa0,0x10,0x8,0xfe,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x2,0x1,0x7f,0x40,0x9f,0x11,0x1f,0x11,0x1f,0x1,0x3f,0x21,0x21,0x2f,0x20,0x20,0x0,0x0,0xfe,0x2,0xf4,0x10,0xf0,0x10,0xf0,0x8,0xfc,0x8,0x28,0xe8,0x28,0x10,
++0x21,0x11,0x12,0xfc,0x8,0x10,0x10,0x35,0x5a,0x97,0x12,0x12,0x12,0x12,0x13,0x12,0x10,0x10,0x8,0x44,0x40,0xa0,0xa0,0x10,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x7d,0x4,0x8,0x29,0x11,0xff,0x15,0x11,0x11,0x11,0x11,0x11,0x10,0x50,0x23,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x58,0x84,0x2,
++0x0,0x7c,0x4,0x9,0x2b,0x11,0xff,0x15,0x10,0x11,0x12,0x11,0x16,0x10,0x53,0x20,0x40,0x78,0x90,0x24,0xfe,0x24,0x44,0xfc,0x84,0x48,0xb0,0x30,0x68,0xa6,0x24,0x60,
++0x4,0x7e,0x5,0x24,0x24,0x24,0x24,0x24,0x3e,0x2,0x2,0x1e,0xe2,0x42,0x14,0xb,0x0,0x0,0xfc,0x4,0x4,0x84,0x84,0x88,0x88,0x50,0x20,0x50,0x50,0x88,0x8e,0x4,
++0x10,0x1e,0x22,0x52,0x14,0x8,0x12,0xef,0xa,0x8,0x8,0xf,0x0,0x7f,0x0,0x0,0x8,0xfc,0x88,0xa8,0x98,0x82,0x7e,0xe0,0x20,0xa0,0x48,0xfc,0x8,0xe8,0x8,0x18,
++0x0,0x44,0x36,0x15,0x85,0x64,0x27,0x4,0xc,0x14,0x25,0xe5,0x26,0x24,0x28,0x30,0x4,0x44,0x4c,0x54,0x64,0x44,0xfc,0x44,0xc4,0xe4,0x5c,0x4c,0x44,0x44,0x44,0x4,
++0x0,0x7f,0x44,0x87,0x8,0x10,0x3f,0x51,0x11,0x1f,0x12,0x2,0x4,0x8,0x10,0x60,0x0,0xfe,0x2,0xe4,0x40,0x90,0xf8,0x10,0x10,0xf0,0x90,0x80,0xa2,0x92,0x7e,0x0,
++0x0,0x3f,0x0,0x0,0x0,0xff,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0xc0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x13,0x10,0x10,0xfd,0x11,0x11,0x11,0x11,0x11,0x11,0x1d,0xf1,0x40,0x7,0x0,0x4,0xfe,0x0,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,0x0,0xfe,0x0,
++0x1,0x1,0x3f,0x1,0xff,0x0,0x1f,0x10,0x10,0x1f,0x5,0x8,0x18,0xea,0xc,0x8,0x0,0x10,0xf8,0x0,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x8,0x90,0x60,0x30,0xe,0x4,
++0x0,0x3f,0x21,0x21,0x22,0x2f,0x28,0x2f,0x28,0x2f,0x20,0x24,0x44,0x48,0x92,0x1,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x80,0x90,0x88,0x84,0x84,0x0,
++0x10,0x17,0x12,0x11,0xff,0x10,0x10,0x1f,0x30,0xd1,0x11,0x12,0x12,0x14,0x59,0x22,0x1c,0xe8,0x48,0x50,0xfc,0x80,0x84,0xfe,0x80,0xf8,0x8,0x90,0x60,0x90,0xe,0x4,
++0x10,0x10,0x23,0xfc,0x27,0x40,0x93,0xfe,0x12,0x13,0x1d,0xf1,0x53,0x15,0x11,0x11,0x40,0x48,0xfc,0x40,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x44,0x28,0x10,0x4e,0x84,0x0,
++0x0,0x7f,0x40,0x4f,0x40,0x40,0x5f,0x44,0x44,0x44,0x44,0x48,0x50,0x40,0x7f,0x40,0x4,0xfe,0x44,0xe4,0x4,0x24,0xf4,0x84,0x84,0x84,0x94,0x94,0x74,0x4,0xfc,0x4,
++0x0,0x1f,0x10,0x10,0x1f,0x0,0x3f,0x20,0x21,0x21,0x21,0x21,0x22,0x4,0x18,0x60,0x10,0xf8,0x10,0x10,0xf0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0x60,0x18,0x4,
++0x0,0x7f,0x40,0x4f,0x48,0x4f,0x40,0x5f,0x50,0x51,0x51,0x52,0x44,0x48,0x7f,0x40,0x4,0xfe,0x4,0xe4,0x24,0xe4,0x4,0xf4,0x14,0x14,0x14,0x94,0x44,0x24,0xfc,0x4,
++0x2,0x44,0x2b,0x10,0x2f,0x48,0x8b,0xa,0x1a,0x2b,0x49,0x89,0xb,0xd,0x51,0x21,0x40,0x48,0xfc,0x40,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x44,0x28,0x10,0x4e,0x84,0x0,
++0x0,0x47,0x34,0x14,0x84,0x65,0x25,0xd,0x15,0x25,0xe4,0x24,0x29,0x2a,0x30,0x20,0x4,0xfe,0x20,0x20,0x44,0xfe,0x4,0xfc,0x4,0xfc,0x20,0xa8,0xa6,0x22,0xa0,0x40,
++0x10,0x10,0x21,0x23,0x48,0xff,0x10,0x21,0x42,0xfc,0x1,0x2,0x1c,0xe1,0x46,0x0,0x80,0xf8,0x8,0xf0,0x14,0xfe,0x80,0x88,0x50,0xe0,0x60,0x50,0xc8,0x4e,0x44,0xc0,
++0x0,0x43,0x30,0x10,0x0,0x7,0xf1,0x11,0x11,0x11,0x12,0x12,0x14,0x28,0x47,0x0,0x10,0xf8,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x24,0x24,0x1c,0x0,0x6,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x10,0x1e,0x12,0x22,0x22,0x64,0x94,0x8,0x8,0x10,0x20,0x40,0x40,0x44,0xfe,0x40,0x8,0xfc,0x88,0x88,0x88,0x88,0xa8,0x90,0x82,0x82,0x7e,0x0,
++0x0,0x3f,0x21,0x22,0x2f,0x28,0x2f,0x28,0x2f,0x20,0x44,0x89,0x9,0x28,0x28,0x47,0x8,0xfc,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x80,0x90,0x88,0x0,0x94,0x12,0xf2,
++0x10,0x1e,0x12,0x22,0x22,0x54,0x8c,0x8,0x10,0x20,0x42,0x11,0x51,0x50,0x8f,0x0,0x8,0xfc,0x88,0x88,0x88,0xa8,0x90,0x84,0x84,0x7c,0x0,0x0,0x14,0x12,0xf2,0x0,
++0x0,0x78,0x4f,0x54,0x58,0x63,0x50,0x48,0x4f,0x48,0x68,0x50,0x41,0x41,0x42,0x4c,0x80,0x40,0xfe,0x2,0x14,0xf8,0x0,0x8,0xfc,0xa0,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x0,0x0,0x7f,0x40,0x40,0x40,0x40,0x7f,0x40,0x40,0x40,0x40,0x7f,0x40,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,
++0x10,0x10,0x20,0x21,0x45,0xfa,0x14,0x20,0x40,0xfc,0x0,0x0,0x1c,0xe0,0x40,0x0,0x80,0x80,0x80,0x4,0xfe,0x4,0x4,0x84,0x64,0x24,0x4,0x4,0x4,0x44,0x28,0x10,
++0x10,0x10,0x10,0x7d,0x11,0x11,0xff,0x11,0x51,0x5d,0x51,0x50,0x70,0x49,0x44,0x83,0x20,0x28,0x28,0xfc,0x20,0x20,0x28,0x28,0x70,0xa0,0x24,0x54,0x8c,0x0,0x6,0xfc,
++0x0,0x7c,0x47,0x44,0x44,0x7c,0x10,0x13,0x5c,0x50,0x50,0x51,0x5d,0xf2,0x44,0x8,0x8,0x1c,0xe0,0x40,0x40,0x40,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x10,0x8,0xe,0x4,
++0x10,0x11,0x11,0x1d,0x21,0x21,0x7d,0x91,0x11,0xfd,0x11,0x11,0x15,0x19,0x12,0x4,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x28,0x10,
++0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x10,0xff,0x1,0x11,0x11,0x11,0x11,0x1f,0x10,0xf0,0x0,0x0,0x10,0xf8,0x80,0x80,0x84,0xfe,0x0,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x2,0x1f,0x15,0x11,0x1f,0x11,0x15,0x1f,0x0,0xff,0x4,0xf,0x0,0x0,0x0,0x0,0x10,0xf8,0x50,0x10,0xf0,0x10,0x50,0xf0,0x4,0xfe,0x0,0xf0,0x10,0x10,0xa0,0x40,
++0x0,0xf,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0xf,0x8,0x8,0x10,0x10,0x20,0x40,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0x50,0x20,
++0x12,0x11,0x10,0x13,0x5a,0x56,0x52,0x92,0x13,0x11,0x11,0x11,0x12,0x12,0x14,0x18,0x8,0x18,0xa0,0xf8,0x8,0x8,0x8,0x8,0xf8,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x20,0x17,0x50,0x44,0x42,0x4f,0x48,0x48,0x4f,0x4a,0x42,0x42,0x44,0x48,0x50,0x40,0x4,0xfe,0x4,0x44,0x84,0xe4,0x24,0x24,0xe4,0xa4,0x84,0x94,0x94,0x74,0x4,0xc,
++0x8,0x8,0x7e,0x8,0x8,0x7e,0x9,0x8,0xfe,0x18,0x1c,0x2a,0x28,0x49,0x8,0x8,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x20,0x20,0x40,0x40,0x88,0x84,0xfc,0x4,0x0,
++0x0,0x0,0x1f,0x0,0x0,0x0,0xff,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x3f,0x0,0x0,0x20,0xf0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x20,0x10,0xf8,0x8,
++0x2,0x3f,0x22,0x22,0x3e,0x1,0x7f,0x41,0x49,0x49,0x49,0x49,0x14,0x12,0x21,0x41,0x0,0x7c,0x44,0x48,0x48,0x50,0xc8,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,0x40,
++0x8,0x8,0xf,0x10,0x10,0x26,0x43,0x81,0x0,0x0,0x3,0x1c,0x8,0x0,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x24,0xc4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x0,0x7c,0x44,0x48,0x48,0x50,0x49,0x49,0x45,0x45,0x45,0x69,0x50,0x40,0x40,0x43,0x8,0xfc,0x88,0x88,0xf8,0x4,0xfe,0x4,0x24,0x24,0x24,0x24,0x50,0x48,0x84,0x4,
++0x2,0x2,0x4,0x8,0x10,0x7f,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x10,0x20,0xc0,0x0,0x0,0x40,0x20,0x10,0xf8,0x88,0x80,0x80,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x43,0x30,0x10,0x0,0x7,0xf0,0x10,0x11,0x11,0x12,0x17,0x10,0x28,0x47,0x0,0x10,0xf8,0x0,0x0,0x8,0xfc,0x80,0x80,0x0,0x20,0x10,0xf8,0x8,0x6,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x11,0x21,0x45,0x79,0x11,0x20,0x7f,0x2,0x1e,0xe2,0x47,0x0,0x40,0x44,0xfe,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x94,0x94,0x94,0xfe,0x0,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x53,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x0,0x88,0x7c,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x20,0x20,0x44,0xfe,0x2,0x0,
++0x1f,0x10,0x1f,0x10,0x1f,0x0,0x7f,0x42,0x9f,0x4,0x9,0x1f,0x1,0x7f,0x1,0x1,0xf0,0x10,0xf0,0x10,0xf0,0x0,0xfe,0x2,0xf4,0x0,0x0,0xf0,0x0,0xfc,0x0,0x0,
++0x10,0x8,0x7f,0x0,0x22,0x14,0xff,0x2,0x3f,0x22,0x22,0x3e,0x22,0x22,0x3e,0x22,0x20,0x20,0x24,0x7e,0x84,0x4,0x44,0x24,0x24,0xc,0x34,0xc4,0x4,0x4,0x28,0x10,
++0x0,0x3f,0x8,0x8,0x8,0x10,0x1f,0x20,0x40,0x1,0xff,0x1,0x1,0x1,0x5,0x2,0x20,0xf0,0x20,0x24,0x7e,0x4,0xc4,0x54,0x88,0x0,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x20,0x20,0x20,0x2f,0x28,0x28,0x28,0x28,0x28,0x28,0x20,0x20,0x3f,0x0,0x8,0xfc,0x80,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0xa8,0x90,0x80,0x84,0xfe,0x0,
++0x8,0xfd,0x11,0x11,0x21,0x25,0x7f,0xa5,0x25,0x25,0x25,0x25,0x3d,0x25,0x1,0x0,0x4,0xfe,0x10,0x10,0x7c,0x54,0x54,0x54,0x54,0x54,0x54,0x5c,0x10,0x14,0xfe,0x0,
++0x4,0x4,0x3f,0x4,0x4,0x8,0x8,0x11,0x21,0x1,0xff,0x1,0x9,0x11,0x25,0x2,0x0,0x20,0xf0,0x20,0x20,0x24,0x24,0x1c,0x0,0x4,0xfe,0x0,0x20,0x18,0x8,0x0,
++0x8,0xa,0x7f,0x8,0x8,0xff,0x8,0xa,0x7f,0x8,0x1c,0x1a,0x2a,0x48,0x89,0xa,0x40,0x50,0x48,0x48,0x40,0xfe,0x40,0x40,0x48,0x48,0x30,0x20,0x60,0x92,0xa,0x6,
++0x8,0x8,0xa,0x7f,0x8,0x8,0xff,0x2,0x3f,0x22,0x22,0x22,0x22,0x3e,0x21,0x2,0x40,0x60,0x58,0x48,0x40,0x44,0xfe,0x40,0x48,0x48,0x30,0x20,0x60,0x92,0xa,0x6,
++0x2,0x1,0x7f,0x40,0x81,0x1,0x11,0x11,0x11,0x21,0x2,0x2,0x4,0x8,0x10,0x60,0x0,0x0,0xfe,0x2,0x4,0x0,0x10,0x18,0x20,0x40,0x80,0x80,0x40,0x30,0xe,0x4,
++0x2,0x1,0x7f,0x42,0x81,0x3f,0x8,0x4,0x2,0xff,0x1,0x1,0x3f,0x1,0x1,0x1,0x0,0x0,0xfe,0x2,0x14,0xf8,0x20,0x40,0x84,0xfe,0x0,0x10,0xf8,0x0,0x0,0x0,
++0x8,0xa,0x7f,0x8,0x8,0xff,0x10,0xff,0x20,0x28,0x7e,0x8,0xf,0xf8,0x9,0xa,0x40,0x50,0x48,0x48,0x40,0xfe,0x40,0x40,0x48,0x48,0x30,0x20,0x60,0x92,0xa,0x6,
++0x0,0x7f,0x1,0x1,0x1f,0x11,0x11,0x1f,0x11,0x11,0xff,0x10,0x10,0x10,0x10,0x10,0x8,0xfc,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x14,0xfe,0x10,0x10,0x10,0x50,0x20,
++0x2,0x2,0x2,0xff,0x4,0x4,0x8,0x8,0x13,0x30,0x50,0x90,0x10,0x10,0x17,0x10,0x0,0x0,0x4,0xfe,0x0,0x40,0x40,0x50,0xf8,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x8,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0x1,0x1,0x20,0x44,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x22,0x2a,0x2f,0x32,0xff,0x25,0x25,0x29,0x33,0xe2,0x22,0x22,0x22,0x20,0xa3,0x4c,0x8,0x28,0xbe,0x48,0xfe,0x14,0x14,0xa6,0xf8,0x8,0x48,0x48,0x48,0xa0,0x18,0x4,
++0x10,0x7e,0x10,0x28,0x7e,0x8,0xfe,0x9,0xa,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0xc,0xf0,0x80,0x84,0xfe,0x90,0x90,0x10,0x10,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,
++0x8,0x28,0x3e,0x48,0xff,0x14,0x16,0x24,0x40,0x1f,0x10,0x11,0x11,0x12,0xc,0x30,0x10,0x50,0x7c,0x90,0xfe,0x28,0x28,0x4a,0x86,0xf0,0x10,0x10,0x10,0x90,0x60,0x18,
++0x4,0x7e,0x45,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x29,0x45,0x82,0x20,0x14,0xfe,0x0,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x0,
++0x4,0x3e,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x45,0x95,0xa,0x20,0x14,0xfe,0x0,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x0,
++0x4,0xff,0x4,0x7f,0x10,0x1e,0x22,0x54,0x8,0x70,0x4,0xff,0x4,0x4,0x8,0x10,0x44,0xfe,0x40,0xfc,0x80,0x98,0xe0,0x84,0x84,0x7c,0x40,0xfe,0x40,0x40,0x40,0x40,
++0x0,0x4f,0x30,0x17,0x4,0x7,0xf4,0x17,0x10,0x13,0x12,0x13,0x12,0x13,0x28,0x47,0xa4,0xfe,0xa0,0xfc,0xa4,0xfc,0xa4,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x6,0xfc,
++0x20,0x20,0xaf,0x70,0x27,0x24,0xff,0x24,0x77,0x68,0xa3,0x22,0x23,0x22,0x23,0x22,0xa0,0xa4,0xfe,0xa0,0xfc,0xa4,0xfc,0xa4,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x4,0x24,0x14,0x4,0xff,0x0,0x4,0x22,0x2f,0x21,0x21,0x2f,0x21,0x21,0x3f,0x20,0x40,0x48,0x50,0x44,0xfe,0x0,0x40,0x88,0xe8,0x8,0x48,0xe8,0x8,0x8,0xf8,0x8,
++0x4,0xff,0x4,0x23,0x1a,0x8b,0x40,0x4f,0x14,0x27,0xe0,0x2f,0x20,0x21,0x22,0x24,0x44,0xfe,0x40,0xf8,0x8,0xf8,0x0,0xbc,0xa4,0xbc,0x40,0xfe,0xe0,0x50,0x4e,0x44,
++0x1,0x1,0xff,0x1,0x3f,0x21,0x23,0x25,0x9,0x30,0xc7,0x0,0x0,0xe,0x1,0x0,0x0,0x4,0xfe,0x0,0xf8,0x8,0x88,0x50,0x30,0xe,0x4,0xc0,0x40,0x0,0xc0,0x40,
++0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x11,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x3,0x42,0x32,0x13,0x80,0x67,0x24,0xc,0x17,0x20,0xef,0x20,0x21,0x22,0x24,0x28,0xf8,0x8,0x8,0xf8,0x0,0xbc,0xa4,0xa4,0xbc,0x40,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x3f,0x0,0x11,0x9,0x4,0x3,0xd,0x11,0x7f,0x91,0x11,0x1f,0x1,0x1,0x3f,0x10,0xf8,0x8,0x10,0x20,0x40,0x80,0x60,0x10,0xfe,0x14,0x10,0xf0,0x20,0xf0,0x8,0x8,
++0x4,0x7e,0x44,0x44,0x44,0x7d,0x11,0x51,0x5d,0x50,0x53,0x50,0x5c,0xf1,0x42,0x0,0xf8,0x88,0x88,0xf8,0x0,0xdc,0x54,0x54,0xdc,0x20,0xfe,0x70,0xa8,0x2e,0x24,0x20,
++0x3,0x12,0x7a,0x53,0x50,0x57,0x54,0x54,0x57,0x50,0x5f,0x70,0x51,0x2,0x4,0x0,0xf8,0x8,0x8,0xf8,0x0,0xbc,0xa4,0xa4,0xbc,0x40,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x0,0x42,0x32,0x13,0x4,0x0,0xf7,0x10,0x13,0x12,0x12,0x12,0x13,0x28,0x47,0x0,0x40,0x40,0x50,0xf8,0x40,0x44,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x6,0xfc,0x0,
++0x2,0x4,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x1,0x1,0xff,0x1,0x1,0x1,0x0,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x4,0xfe,0x0,0x0,0x4,0x4,0xfc,
++0x10,0x10,0x10,0x12,0x54,0x58,0x53,0x90,0x10,0x10,0x10,0x28,0x24,0x44,0x87,0x0,0x40,0x40,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x10,0x12,0x54,0x59,0x51,0x91,0x11,0x10,0x13,0x28,0x24,0x45,0x82,0x0,0xf8,0x88,0x88,0xf8,0x0,0xdc,0x54,0x54,0xdc,0x20,0xfe,0x70,0xa8,0x2e,0x24,0x20,
++0x1,0x1,0x3f,0x1,0x1f,0x1,0xff,0x0,0x1f,0x10,0x11,0x11,0x12,0x2,0xc,0x30,0x0,0x10,0xf8,0x0,0xf0,0x4,0xfe,0x10,0xf8,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x10,0x13,0x11,0x10,0xfc,0x10,0x15,0x1a,0x35,0xd0,0x10,0x17,0x10,0x10,0x50,0x20,0x0,0xf8,0x10,0xa0,0x40,0xa0,0x10,0x4e,0xf4,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,
++0x1,0x7f,0x41,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x14,0x12,0x21,0xc1,0x4,0x84,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x4,0x14,0x8,
++0x40,0x33,0x11,0x0,0x80,0x60,0x21,0xa,0x15,0x20,0xe0,0x27,0x20,0x20,0x20,0x20,0x0,0xf8,0x10,0xa0,0x40,0xa0,0x10,0x4e,0xf4,0x40,0x40,0xfc,0x40,0x40,0x40,0x40,
++0x4,0x7e,0x44,0x54,0x57,0x54,0x54,0x54,0x57,0x54,0x54,0x54,0x29,0x25,0x42,0x84,0x20,0x28,0x24,0x20,0xfe,0xa0,0xa0,0x94,0xf4,0x98,0x98,0x90,0x28,0x2a,0x4a,0x86,
++0x8,0x8,0xf,0x14,0x24,0x47,0x4,0x4,0x7,0x4,0x4,0x52,0x51,0x90,0xf,0x0,0x0,0x8,0xfc,0x0,0x20,0xf0,0x0,0x20,0xf0,0x0,0x0,0x4,0x92,0x92,0xf0,0x0,
++0x22,0x21,0x20,0x20,0x27,0xfc,0x25,0x24,0x27,0x20,0x3b,0xe2,0x43,0x2,0x3,0x2,0x8,0x10,0xa0,0x4,0xfe,0x44,0x54,0x44,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x12,0x11,0x10,0x10,0x5f,0x54,0x55,0x94,0x17,0x10,0x13,0x12,0x13,0x12,0x13,0x12,0x8,0x10,0xa0,0x4,0xfe,0x44,0x54,0x44,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x10,0x8,0x4,0x0,0x3f,0x21,0x29,0x21,0x3f,0x0,0xf,0x8,0xf,0x8,0xf,0x8,0x10,0x20,0x40,0x8,0xfc,0x8,0x28,0x8,0xf8,0x20,0xf0,0x20,0xe0,0x20,0xe0,0x20,
++0x1,0x7c,0x44,0x54,0x55,0x55,0x55,0x55,0x55,0x54,0x54,0x54,0x20,0x28,0x44,0x80,0x4,0x88,0x50,0x4,0xfe,0x24,0xac,0x24,0xfc,0x8,0xfc,0x88,0xf8,0x88,0xf8,0x88,
++0x8,0x8,0x8,0xa,0xff,0x8,0xa,0xc,0x38,0xc8,0x8,0x8,0x8,0x8,0x28,0x10,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x8,0x7c,0x4f,0x48,0x49,0x4a,0x4c,0x4b,0x4a,0x4b,0x7a,0x4b,0x0,0xf,0x0,0x40,0x40,0x48,0xfc,0xe0,0x50,0x4e,0x44,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x0,
++0x0,0x40,0x30,0x17,0x80,0x61,0x22,0xc,0x13,0x22,0xe3,0x22,0x23,0x20,0x2f,0x20,0x40,0x40,0x48,0xfc,0xe0,0x50,0x4e,0x44,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x0,
++0x8,0x8,0x8,0x8,0xff,0x8,0x18,0x1c,0x2a,0x28,0x48,0x8,0x8,0x8,0x8,0x8,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x10,0x12,0xff,0x20,0x28,0x4a,0x7f,0x8,0x8,0xf,0xf8,0x48,0x8,0x8,0x8,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x20,0x27,0x3c,0x45,0x85,0x7d,0x25,0x25,0xfd,0x25,0x25,0x21,0x2a,0x32,0x24,0x8,0x44,0xe4,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x14,0x84,0x44,0x54,0x8,
++0x20,0x1b,0x48,0x40,0x4f,0x49,0x49,0x4f,0x49,0x49,0x4f,0x49,0x41,0x41,0x41,0x40,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0xe4,0x24,0x24,0xe4,0x24,0x4,0x4,0x14,0x8,
++0x8,0x7c,0x4b,0x48,0x48,0x78,0x4b,0x48,0x48,0x78,0x48,0x49,0x4e,0x7d,0x48,0x0,0xc,0x30,0xc0,0x80,0x40,0x40,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x6,0xfc,0x0,
++0x20,0x27,0x24,0x24,0xfc,0x24,0x74,0x6f,0xa4,0x24,0x24,0x24,0x24,0x29,0x30,0x20,0x4,0xbe,0xa4,0xa4,0xa4,0xa4,0xa4,0xfe,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0x54,0x88,
++0x10,0x10,0x13,0x12,0xfd,0x10,0x38,0x35,0x52,0x54,0x90,0x10,0x10,0x10,0x10,0x10,0x40,0x20,0xfe,0x8a,0x4,0x40,0xfe,0x80,0x88,0xfc,0x80,0x84,0xfe,0x80,0x80,0x80,
++0x1,0x9,0x7d,0x49,0x4a,0x4a,0x4c,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x80,0x80,0x88,0xfc,0x80,0x80,0x84,0xfe,0x80,0x80,0x80,0x80,
++0x8,0x8,0xf,0x12,0x12,0x22,0x43,0x82,0x2,0x2,0x3,0x2,0x2,0x2,0x2,0x2,0x0,0x4,0xfe,0x0,0x0,0x10,0xf8,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,
++0x11,0x11,0x11,0x15,0x5a,0x52,0x54,0x90,0x10,0x10,0x10,0x28,0x24,0x44,0x80,0x0,0x0,0x0,0x4,0xfe,0x80,0x80,0x88,0xfc,0x80,0x80,0x84,0xfe,0x80,0x80,0x80,0x80,
++0x1,0x41,0x31,0x11,0x2,0x2,0xf4,0x10,0x10,0x10,0x10,0x10,0x14,0x18,0x10,0x0,0x0,0x0,0x4,0xfe,0x80,0x80,0x88,0xfc,0x80,0x80,0x84,0xfe,0x80,0x80,0x80,0x80,
++0x10,0x10,0x17,0x11,0xf8,0x17,0x14,0x1c,0x37,0xd4,0x15,0x15,0x15,0x15,0x55,0x24,0x80,0x44,0xfe,0x10,0xa4,0xfe,0x44,0x44,0xfc,0x44,0xf4,0x14,0x14,0xf4,0x14,0x8,
++0x2,0x1,0xff,0x8,0x4,0x3,0x1c,0xe0,0x1f,0x2,0x4,0x3f,0x24,0x24,0x24,0x20,0x0,0x4,0xfe,0x20,0x40,0x80,0x70,0xe,0xf0,0x0,0x8,0xfc,0x48,0x48,0x48,0x18,
++0x2,0x1,0x7f,0x40,0x80,0x3,0x3e,0x2,0x3,0x7e,0x2,0x2,0x2,0x2,0x1,0x0,0x0,0x0,0xfe,0x2,0x34,0xc0,0x0,0x8,0xfc,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x2,0x1,0x7f,0x48,0x94,0x4,0xb,0x12,0x22,0x43,0x2,0x2,0x3,0x2,0x2,0x2,0x0,0x0,0xfe,0x22,0x14,0x0,0xfc,0x0,0x20,0xf0,0x0,0x10,0xf8,0x0,0x0,0x0,
++0x8,0xf,0x8,0x13,0x10,0x3f,0x50,0x93,0x12,0x12,0x12,0x12,0x12,0x10,0x11,0x16,0x40,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0x48,0x48,0x48,0x48,0xb0,0x8,0x4,
++0x2,0x1,0x7f,0x44,0xbf,0x4,0x1f,0x4,0xff,0x4,0x9,0x3f,0xc5,0x9,0x15,0x2,0x0,0x0,0xfe,0x42,0xfc,0x40,0xf0,0x44,0xfe,0x40,0x20,0xf8,0x46,0x30,0x10,0x0,
++0x8,0x7c,0x49,0x4b,0x4a,0x7b,0x4b,0x4a,0x4a,0x7a,0x4a,0x4a,0x4a,0x7a,0x44,0x8,0x80,0xf8,0x10,0xfe,0x88,0x24,0xfe,0x0,0xfc,0x0,0xfc,0x0,0xfc,0x84,0xfc,0x84,
++0x4,0xe,0xf0,0x10,0x14,0x1e,0x70,0x14,0x1f,0xf1,0x11,0x11,0x11,0x11,0xf,0x0,0x40,0x40,0x40,0x48,0x7c,0x40,0x40,0x48,0xfc,0x8,0x8,0x8,0xfa,0xa,0xfe,0x0,
++0x10,0x1f,0x20,0x7f,0xa5,0x28,0x3f,0x20,0x27,0x20,0x27,0x20,0x47,0x44,0x87,0x4,0x0,0xf0,0x44,0xfe,0x10,0x88,0xfe,0x0,0xf8,0x0,0xf8,0x8,0xfc,0x8,0xf8,0x8,
++0x8,0x8,0x49,0x2a,0x8,0xff,0x8,0x18,0x1d,0x2b,0x29,0x49,0x89,0x9,0x9,0x8,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x0,0x40,0x30,0x10,0x80,0x60,0x20,0xf,0x14,0x24,0xe4,0x24,0x24,0x24,0x27,0x24,0x80,0x80,0x84,0xfe,0x80,0x80,0x88,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x2,0x2,0x3,0x7e,0x3,0x7e,0x1,0x1,0xe,0x70,0x3f,0x24,0x24,0x24,0xff,0x0,0x40,0x20,0xf8,0x0,0xfc,0x20,0x40,0x82,0x62,0x1e,0xf8,0x48,0x48,0x48,0xfe,0x0,
++0x10,0x10,0x14,0xfe,0x20,0x28,0x48,0x7e,0x8,0x8,0xe,0xf8,0x49,0x9,0xa,0x8,0x8,0x1c,0xe0,0x80,0x80,0x84,0xfe,0x90,0x90,0x90,0x90,0x90,0x10,0x10,0x10,0x10,
++0x20,0x23,0x2a,0xff,0x42,0x52,0x93,0xfe,0x12,0x13,0x1e,0xf2,0x54,0x14,0x18,0x10,0x4,0xfe,0x4,0xfc,0x50,0x50,0xfc,0x50,0x54,0xfe,0xa4,0xa8,0x90,0x88,0xce,0x84,
++0x1,0x21,0x3f,0x10,0x14,0xfe,0x20,0x48,0x7e,0x8,0xe,0xf8,0x49,0x9,0xa,0x8,0x0,0x8,0xf8,0x0,0x1c,0xe0,0x80,0x84,0xfe,0x90,0x90,0x90,0x10,0x10,0x10,0x10,
++0x0,0x3f,0x20,0x3f,0x22,0x22,0x2f,0x22,0x22,0x3f,0x24,0x24,0x24,0x45,0x86,0x4,0x8,0xfc,0x8,0xf8,0x20,0x20,0xf8,0x20,0x24,0xfe,0x88,0x50,0x30,0xe,0x4,0x0,
++0x8,0xff,0x8,0xfe,0x28,0x29,0x7e,0x54,0x54,0x54,0x6c,0x44,0x7c,0x45,0x7d,0x46,0x20,0xfe,0x20,0x90,0x90,0xfe,0x90,0xfc,0x90,0xfc,0x90,0xfe,0x0,0x54,0x52,0x2,
++0x10,0x10,0x10,0x10,0xfc,0x13,0x30,0x38,0x57,0x50,0x10,0x10,0x10,0x11,0x16,0x10,0x80,0x90,0x88,0x80,0xf8,0x80,0x88,0xfc,0x80,0x48,0x50,0x20,0x60,0x92,0xa,0x6,
++0x2,0x2,0x2,0x3,0x2,0x2,0x2,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x3f,0x20,0x0,0x0,0x8,0xfc,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x10,0x12,0x1f,0x10,0x13,0x10,0x7e,0x42,0x42,0x42,0x42,0x42,0x7e,0x41,0x2,0x40,0x50,0x48,0x48,0x7e,0xc0,0x40,0x40,0x48,0x28,0x30,0x20,0x50,0x92,0xa,0x6,
++0x0,0x20,0x10,0x10,0xfe,0x0,0x44,0x44,0x25,0x25,0x29,0x9,0x1f,0xe1,0x41,0x1,0x40,0x40,0x44,0x7e,0x40,0x40,0x40,0x44,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x41,0x37,0x11,0x81,0x61,0x21,0x9,0x11,0x2f,0xe4,0x25,0x26,0x24,0x27,0x20,0x10,0x10,0xfc,0x10,0xf0,0x10,0xf0,0x10,0x14,0xfe,0xa0,0x18,0x8,0x0,0xfc,0x0,
++0x10,0x10,0x23,0x22,0x44,0xf8,0x13,0x20,0x40,0xfc,0x40,0x1,0x1d,0xe2,0x44,0x0,0x40,0x20,0xfe,0x2,0x4,0x0,0xfe,0x20,0xa8,0xbc,0xa0,0x20,0xa0,0x66,0x1c,0x0,
++0x10,0x17,0x11,0x10,0xff,0x10,0x33,0x3a,0x57,0x52,0x93,0x10,0x1f,0x10,0x10,0x10,0x48,0xfc,0x10,0xa4,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0x40,0x40,
++0x1,0x3f,0x8,0x4,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x1,0x1,0x1,0x0,0xf8,0x20,0x44,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,0x0,0x0,
++0x4,0x7f,0x11,0xa,0xff,0x0,0x3f,0x20,0x3f,0x20,0x3f,0x4,0xff,0x4,0x4,0x4,0x4,0xc4,0x8,0x10,0xe0,0x84,0xc4,0x88,0x90,0xa2,0x82,0x4,0xe8,0x10,0x20,0xc0,
++0x0,0x47,0x31,0x10,0x8f,0x60,0x23,0xa,0x13,0x22,0xe3,0x20,0x2f,0x20,0x20,0x20,0x40,0xfc,0x10,0xa4,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0x40,0x40,
++0x9,0xfd,0x9,0x9,0x9,0x79,0x41,0x47,0x41,0x79,0x9,0x9,0x9,0x9,0x51,0x21,0x0,0x8,0x8,0x10,0x20,0x40,0x4,0xfe,0x40,0x40,0x20,0x20,0x10,0x4e,0x84,0x0,
++0x11,0x9,0x7f,0x40,0x9f,0x10,0x1f,0x0,0x7f,0x1,0x3f,0x1,0xff,0x1,0x5,0x2,0x10,0x20,0xfe,0x2,0xf4,0x10,0xf0,0x38,0xc0,0x0,0xf8,0x0,0xfe,0x0,0x0,0x0,
++0x40,0x2f,0x21,0x1,0x81,0x4f,0x48,0x8,0x18,0x2f,0xe1,0x21,0x21,0x21,0x2a,0x24,0x40,0x40,0x44,0x44,0x48,0x50,0x44,0xfe,0x50,0x50,0x50,0x48,0x48,0x44,0x62,0x40,
++0x10,0x10,0x10,0x10,0xff,0x10,0x31,0x39,0x54,0x50,0x90,0x10,0x10,0x10,0x11,0x16,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0xa0,0xa0,0xa0,0x40,0x60,0x90,0xe,0x4,
++0x0,0x0,0x0,0x0,0xff,0x0,0x8,0x8,0x4,0x4,0x2,0x1,0x2,0x4,0x18,0xe0,0x80,0x80,0x80,0x84,0xfe,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x60,0x1e,0x4,
++0x10,0x10,0x14,0x7e,0x54,0x54,0x54,0x57,0x54,0x54,0x54,0x5c,0x10,0x10,0x10,0x10,0x80,0x84,0x84,0x88,0x90,0xa0,0x84,0xfe,0xa0,0xa0,0x90,0x90,0x88,0x8e,0xc4,0x80,
++0x4,0x7e,0x44,0x54,0x54,0x54,0x54,0x57,0x54,0x54,0x54,0x54,0x10,0x28,0x44,0x80,0x80,0x84,0x84,0x88,0x90,0xa0,0x84,0xfe,0xa0,0xa0,0x90,0x90,0x88,0x8e,0xc4,0x80,
++0x8,0x8,0x8,0x10,0x17,0x30,0x51,0x91,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x16,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0xa0,0xa0,0xa0,0x40,0x60,0x90,0xe,0x4,
++0x4,0x3e,0x24,0x24,0x24,0x3c,0x24,0x27,0x24,0x3c,0x24,0x24,0x24,0x44,0x94,0x8,0x80,0x84,0x84,0x88,0x90,0xa0,0x84,0xfe,0xa0,0xa0,0x90,0x90,0x88,0x8e,0xc4,0x80,
++0x0,0x1f,0x10,0x97,0x51,0x5f,0x10,0x17,0x34,0x57,0x94,0x17,0x20,0x2f,0x40,0x0,0x80,0xfe,0x40,0xfc,0x10,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x40,0xfe,0x40,0x40,
++0x0,0x7b,0x49,0x50,0x57,0x60,0x53,0x4a,0x4b,0x4a,0x6b,0x50,0x4f,0x40,0x40,0x40,0x40,0xf8,0x10,0xa4,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0x40,0x40,
++0x10,0x13,0x10,0x10,0xfc,0x10,0x15,0x19,0x32,0xd5,0x11,0x11,0x11,0x11,0x51,0x21,0x4,0xfe,0x84,0x84,0x84,0x84,0x14,0x8,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0xb,0x7c,0x48,0x48,0x48,0x49,0x79,0x4a,0x4d,0x49,0x49,0x79,0x49,0x1,0x1,0x4,0xfe,0x84,0x84,0x84,0x84,0x14,0x8,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x10,0xfc,0x13,0x10,0x1c,0x30,0xd0,0x10,0x10,0x11,0x12,0x54,0x20,0x80,0xa0,0x90,0x84,0x9e,0xe0,0x80,0x88,0x50,0x60,0x40,0xc0,0x20,0x12,0xa,0x6,
++0x40,0x33,0x10,0x0,0x80,0x60,0x21,0x9,0x12,0x25,0xe1,0x21,0x21,0x21,0x21,0x21,0x4,0xfe,0x84,0x84,0x84,0x84,0x14,0x8,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x8,0x8,0x7e,0x8,0xa,0xff,0x8,0x28,0x2e,0x28,0x39,0x48,0x44,0x83,0x0,0x0,0x8,0x88,0x88,0x50,0x50,0x20,0x20,0x50,0x48,0x8c,0x4,0x0,0x6,0xfc,0x0,
++0x0,0x7d,0x44,0x44,0x44,0x44,0x7d,0x44,0x44,0x44,0x44,0x7c,0x0,0x24,0x62,0x82,0x4,0xfe,0x44,0x44,0x84,0x94,0x8,0xfc,0x84,0x84,0x84,0xfc,0x0,0x88,0x46,0x42,
++0x7f,0x44,0x7f,0x1,0x1,0x1,0x3f,0x20,0x3f,0x20,0x3f,0x1,0xff,0x1,0x1,0x1,0xfc,0x44,0xfc,0x0,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x0,0x0,0x0,
++0x4,0x4,0x4,0x24,0x14,0x14,0x4,0x4,0x1c,0x64,0x4,0x8,0x8,0x10,0x20,0x40,0x80,0x80,0x80,0x90,0xa0,0xc0,0x80,0xc0,0xb0,0x90,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x8,0x3e,0x22,0x3e,0x21,0x5f,0x81,0xff,0x1,0x1f,0x1,0x3f,0x1,0xff,0x1,0x1,0x44,0x7e,0xa8,0x10,0x6e,0xf0,0x14,0xfe,0x10,0xf0,0x0,0xf8,0x0,0xfe,0x0,0x0,
++0x0,0x3f,0x4,0x4,0x4,0x8,0x8,0x10,0x3f,0x50,0x10,0x10,0x10,0x10,0x1f,0x10,0x8,0xfc,0x8,0x8,0x8,0x28,0x10,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x27,0x24,0x4,0x7,0xe4,0x24,0x24,0x24,0x25,0x29,0x32,0x50,0x88,0x7,0x40,0x20,0xfc,0x90,0x94,0xfe,0x90,0x90,0xf0,0x0,0x54,0x52,0x52,0x0,0x6,0xfc,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x15,0x19,0x31,0xd1,0x11,0x11,0x12,0x12,0x54,0x20,0x8,0x3c,0xc0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x8,0x8,0xfe,0x8,0xe,0x78,0x9,0x9,0x2a,0x10,0x1f,0x10,0x10,0x10,0x1f,0x10,0xc,0xf0,0x80,0x84,0xfe,0x90,0x10,0x10,0x10,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x8,0x8,0xff,0x8,0xe,0x78,0x8,0x29,0x11,0x1f,0x11,0x11,0x1f,0x1,0x7f,0x0,0x40,0x48,0xfc,0x48,0xc8,0x48,0x6a,0x8a,0x6,0xf0,0x10,0x10,0xf0,0x4,0xfc,0x4,
++0x22,0x21,0x27,0xfa,0x24,0x57,0x50,0xff,0x14,0x17,0x1c,0xf7,0x54,0x14,0x14,0x15,0x20,0x20,0xe4,0x3e,0xc4,0xa4,0xa4,0xa4,0xa4,0xa8,0x90,0x90,0xa8,0xa8,0xc6,0x84,
++0x2,0x2,0x3f,0x2,0x2,0xff,0x2,0x4,0xf,0x18,0x28,0x4f,0x88,0x8,0xf,0x8,0x0,0x10,0xe0,0x40,0x84,0xfe,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x10,0x10,0x13,0x1c,0x20,0x23,0x7c,0x91,0x13,0xfd,0x11,0x11,0x15,0x19,0x11,0x1,0x40,0x44,0xf8,0x50,0x64,0xfe,0x80,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0xff,0x9,0x0,0x3f,0x22,0x22,0x3f,0x22,0x22,0x23,0x40,0x49,0x89,0x10,0x20,0x24,0xfe,0x20,0x88,0xfc,0x20,0x28,0xfc,0x20,0x20,0xe0,0x0,0x24,0x22,0x2,
++0x0,0x40,0x30,0x17,0x0,0x2,0xf1,0x10,0x10,0x10,0x10,0x11,0x12,0x28,0x47,0x0,0x80,0x40,0x48,0xfc,0x10,0x10,0x20,0xa0,0x40,0x40,0xa0,0x10,0x10,0x6,0xfc,0x0,
++0x2,0x42,0x32,0x12,0x8f,0x62,0x22,0xa,0x13,0x2e,0xe2,0x22,0x22,0x22,0x2b,0x24,0x0,0xc,0x70,0x40,0xc0,0x44,0x7e,0xc8,0x48,0x48,0x48,0x48,0x48,0x88,0x8,0x8,
++0x0,0x8,0xfc,0x10,0x11,0x12,0x14,0x7d,0x10,0x10,0x11,0x1c,0xf0,0x40,0x0,0x3,0x40,0x40,0xa0,0xa0,0x10,0x2e,0x44,0x80,0x10,0x60,0x84,0x8,0x10,0x20,0xc0,0x0,
++0x22,0x22,0x7f,0x22,0x3e,0x22,0x3e,0x22,0x22,0xff,0x40,0x54,0x62,0x40,0x7f,0x0,0x8,0x8,0x48,0x28,0x8,0x88,0x48,0x8,0x8,0x8e,0xf8,0x8,0x8,0x8,0x8,0x8,
++0x1,0x1,0x7f,0x1,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0xff,0x8,0x10,0x20,0x0,0x8,0xfc,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x14,0xfe,0x20,0x18,0x8,
++0x2,0xff,0x14,0x15,0x7f,0x55,0x55,0x7f,0x49,0x8,0x7f,0x8,0x8,0xf,0x78,0x20,0x4,0xfe,0x40,0x40,0xc8,0x7c,0x48,0x48,0x68,0x58,0x58,0x88,0x88,0xaa,0xca,0x6,
++0x4,0xfe,0x10,0x10,0x20,0x24,0x7e,0xa5,0x25,0x25,0x25,0x25,0x3d,0x25,0x1,0x1,0x40,0x40,0x44,0x7e,0x40,0x40,0x44,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0xfc,0x23,0x20,0x4b,0xfc,0x27,0x21,0xfa,0x25,0x20,0x3b,0xe1,0x42,0x4,0x0,0x40,0x48,0xfc,0x40,0xf8,0x80,0xfe,0x10,0xe,0xf4,0x40,0xf8,0x50,0x4c,0x44,0x40,
++0x1,0x1,0x1,0x1,0x1,0x1f,0x10,0x11,0x11,0x11,0x11,0x11,0x2,0x4,0x18,0x60,0x0,0x8,0xfc,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x40,0x30,0x8,0x4,
++0x10,0x10,0x10,0x1e,0x20,0x20,0x7d,0x90,0x10,0xfe,0x10,0x12,0x14,0x18,0x10,0x0,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x8,0x8,0x8,0x10,0x10,0x37,0x54,0x94,0x14,0x14,0x14,0x14,0x10,0x11,0x16,0x18,0x40,0x44,0x7e,0x40,0x44,0xfe,0x4,0x44,0x44,0x44,0x44,0x44,0x90,0xc,0x6,0x2,
++0x10,0x10,0x10,0x13,0xfe,0x14,0x30,0x38,0x54,0x50,0x90,0x10,0x11,0x11,0x12,0x14,0x40,0x40,0x40,0xfc,0x44,0x48,0x40,0x60,0x60,0xa0,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x1,0x0,0x1f,0x10,0x90,0x51,0x52,0x14,0x39,0x52,0xd4,0x11,0x22,0x20,0x43,0xc,0x0,0x88,0xfc,0x80,0x80,0x40,0x30,0x8e,0x24,0x40,0x80,0x10,0x20,0xc0,0x0,0x0,
++0x0,0x40,0x20,0x21,0x2,0x4,0xe8,0x20,0x23,0x20,0x20,0x23,0x28,0x30,0x23,0xc,0x40,0x40,0xa0,0x20,0x10,0x2e,0x44,0x90,0x20,0x40,0x88,0x10,0x20,0xc0,0x0,0x0,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x3f,0x20,0x2f,0x20,0x3f,0x2a,0x29,0x48,0x8c,0x8,0xf0,0x0,0xfe,0x12,0x64,0x10,0xf8,0x0,0xf0,0x0,0xf8,0x10,0x20,0xc0,0x30,0xc,
++0x10,0x13,0x12,0x12,0xff,0x12,0x16,0x1b,0x32,0xd2,0x12,0x12,0x14,0x14,0x58,0x20,0x4,0xfe,0x0,0x8,0xfc,0x0,0x4,0xfe,0xa0,0xa2,0xa4,0x98,0x90,0x8e,0xc4,0x80,
++0x10,0x10,0x13,0x1c,0x21,0x21,0x7d,0x91,0x11,0xfd,0x11,0x11,0x17,0x18,0x11,0x2,0x20,0x24,0xfe,0x20,0xfc,0x4,0xfc,0x4,0xfc,0x4,0xfc,0x4,0xfe,0x88,0x6,0x2,
++0x0,0x78,0x4f,0x50,0x50,0x61,0x51,0x4b,0x48,0x48,0x68,0x57,0x40,0x40,0x40,0x40,0x80,0x84,0xfe,0x80,0xa0,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x8,0x8,0xff,0x8,0x1f,0x0,0x3d,0x5,0x5,0x9,0x35,0xc2,0xf,0x20,0x24,0x42,0x20,0x24,0xfe,0x20,0xe0,0x48,0x98,0x20,0x40,0x30,0xe,0x4,0xe0,0x10,0x8c,0x44,
++0x10,0x10,0x11,0x12,0xfc,0x13,0x14,0x18,0x37,0xd0,0x10,0x13,0x10,0x10,0x51,0x20,0x80,0x80,0xf8,0x10,0x20,0xf8,0x48,0x48,0xfe,0x48,0x48,0xf8,0x48,0x40,0x40,0x80,
++0x8,0x7c,0x49,0x4a,0x48,0x7b,0x48,0x48,0x4f,0x78,0x48,0x4b,0x48,0x78,0x49,0x0,0x80,0x80,0xf8,0x10,0x20,0xf8,0x48,0x48,0xfe,0x48,0x48,0xf8,0x48,0x40,0x40,0x80,
++0x8,0xb,0x10,0x10,0x20,0x48,0x88,0x12,0x32,0x52,0x92,0x12,0x12,0x12,0x1f,0x10,0x8,0xfc,0x40,0x40,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x2,0x44,0x29,0x12,0x28,0x4b,0x88,0x8,0x1f,0x28,0x48,0x8b,0x8,0x8,0x29,0x10,0x80,0x80,0xf8,0x10,0x20,0xf8,0x48,0x48,0xfe,0x48,0x48,0xf8,0x48,0x40,0x40,0x80,
++0x8,0xf,0x8,0x10,0x3f,0x41,0x1,0xff,0x1,0x1,0x3f,0x1,0x1,0x1,0x5,0x2,0x0,0xe0,0x40,0x90,0xf8,0x10,0x14,0xfe,0x10,0x10,0xf0,0x10,0x0,0x0,0x0,0x0,
++0x10,0x17,0x10,0x10,0x58,0x54,0x50,0x92,0x12,0x12,0x12,0x12,0x12,0x12,0x1f,0x10,0x8,0xfc,0x40,0x40,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x8,0x7f,0x8,0x7f,0x49,0x7f,0x1c,0x2a,0xc8,0x3f,0x1,0x9,0x9,0x9,0xff,0x0,0x40,0x44,0x7e,0x88,0x48,0x50,0x20,0x50,0x8e,0xf8,0x0,0xf0,0x0,0x4,0xfe,0x0,
++0x10,0x13,0x10,0x10,0xfc,0x13,0x15,0x19,0x31,0xd2,0x14,0x10,0x11,0x10,0x5f,0x20,0x0,0xf8,0x10,0x20,0x44,0x48,0x70,0x50,0x50,0x4e,0x44,0x40,0x40,0x84,0xfe,0x0,
++0x0,0x7f,0x1,0x1,0x1,0x1,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xff,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x4,0xfe,0x10,0x10,0x11,0x5e,0x50,0x50,0x50,0x50,0x5e,0xf0,0x40,0x1,0x2,0x40,0x40,0x44,0xfe,0x88,0x8,0x88,0x88,0x50,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x10,0x10,0x10,0x7c,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5d,0x11,0x10,0x10,0x13,0x20,0x24,0x3e,0x20,0xfc,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x44,0x58,0x84,0x2,
++0x0,0x0,0x1f,0x10,0x90,0x57,0x50,0x10,0x32,0x52,0xd2,0x12,0x22,0x22,0x5f,0x0,0x80,0x48,0xfc,0x0,0x8,0xfc,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x41,0x22,0x14,0x7f,0x8,0x8,0x9,0xff,0x8,0x8,0x8,0x14,0x12,0x22,0x40,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0xc8,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x20,0x17,0x10,0x0,0x0,0xf0,0x11,0x11,0x11,0x11,0x11,0x11,0x15,0x19,0x17,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x8,0x8,0xff,0x8,0x2,0x1,0x3f,0x0,0x0,0x3,0xc,0x10,0x60,0x90,0xf,0x0,0x20,0x24,0xfe,0x20,0x0,0x0,0xf0,0x20,0xc0,0x0,0x0,0x0,0x0,0x6,0xfc,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x31,0x39,0x54,0x50,0x90,0x10,0x10,0x10,0x11,0x16,0x20,0x20,0x24,0xfe,0x20,0x20,0xfc,0x4,0x88,0x88,0x50,0x20,0x50,0x88,0xe,0x4,
++0x1,0x1,0x1,0xff,0x1,0x1,0x3f,0x8,0x8,0x4,0x2,0x1,0x2,0xc,0x30,0xc0,0x0,0x0,0x4,0xfe,0x0,0x0,0xf0,0x20,0x20,0x40,0x80,0x0,0x80,0x60,0x1e,0x4,
++0x0,0x8,0x7c,0x4b,0x48,0x48,0x49,0x49,0x48,0x48,0x48,0x78,0x48,0x0,0x1,0x6,0x20,0x20,0x24,0xfe,0x20,0x20,0xfc,0x4,0x88,0x88,0x50,0x20,0x50,0x88,0xe,0x4,
++0x22,0x22,0x22,0xfb,0xad,0xa9,0xa9,0xaf,0xf9,0xa1,0x29,0x39,0xea,0x42,0x4,0x8,0x0,0x0,0x4,0xfe,0x24,0x24,0x24,0xe4,0x24,0x24,0x24,0x24,0xbc,0x64,0x40,0x0,
++0x20,0x20,0x22,0x3f,0x28,0x48,0x88,0x9,0xff,0x8,0x8,0x14,0x12,0x22,0x40,0x80,0x0,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0xc4,0x44,0x44,0x44,0x44,0x7c,0x44,0x0,
++0x4,0x3e,0x24,0x27,0x24,0x3c,0x25,0x25,0x24,0x3c,0x24,0x24,0x24,0x44,0x95,0xa,0x20,0x20,0x24,0xfe,0x20,0x20,0xfc,0x4,0x88,0x88,0x50,0x20,0x50,0x88,0xe,0x4,
++0x5,0x3f,0x25,0x25,0x25,0x3d,0x24,0x24,0x25,0x3d,0x25,0x25,0x25,0x45,0x95,0x9,0x0,0x8,0x1c,0xe0,0x2,0x2,0xfe,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x0,0x40,0x30,0x10,0x80,0x60,0x27,0x8,0x10,0x20,0xe0,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x2,0x1,0x1,0x0,0x7f,0x0,0x0,0x0,0x0,0x1,0x2,0xc,0x30,0x48,0x7,0x0,0x0,0x0,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x6,0xfc,0x0,
++0x10,0x10,0x21,0x21,0x45,0xf9,0x11,0x21,0x41,0xfd,0x40,0x0,0x1c,0xe0,0x41,0x2,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,0x50,0x48,0x84,0x2,0x2,
++0x4,0xfe,0x24,0x24,0x3c,0x24,0x24,0x3c,0x24,0x24,0x27,0xfc,0x44,0x4,0x5,0x4,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,0x48,0x48,0x84,0x86,0x2,0x0,
++0x1,0x1,0x7f,0x1,0x1,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0xff,0x0,0x0,0x8,0xfc,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x14,0xfe,0x0,
++0x10,0x10,0x17,0x10,0xfc,0x13,0x32,0x3b,0x56,0x53,0x92,0x13,0x12,0x12,0x1f,0x10,0x40,0x48,0xfc,0x40,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0xfe,0x0,
++0x4,0xfe,0x13,0x10,0x10,0x3d,0x25,0x45,0xa5,0x19,0x9,0x11,0x21,0x41,0x87,0x0,0x20,0x24,0xfe,0x20,0x24,0xfe,0x4,0xfc,0x4,0xfc,0x4,0xfc,0x4,0x4,0xfe,0x0,
++0x10,0x10,0x10,0x10,0xff,0x10,0x14,0x18,0x31,0xd0,0x11,0x11,0x11,0x12,0x54,0x28,0x80,0x80,0x80,0x90,0xf8,0x90,0x90,0x90,0x90,0x90,0x50,0x52,0x12,0x12,0xe,0x0,
++0x8,0x8,0xf,0x10,0x10,0x33,0x52,0x93,0x12,0x13,0x12,0x13,0x12,0x12,0x1f,0x10,0x40,0x48,0xfc,0x40,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0xfe,0x0,
++0x8,0x8,0xf,0x10,0x11,0x32,0x57,0x90,0x10,0x10,0x17,0x10,0x10,0x10,0x1f,0x10,0x0,0x8,0xfc,0x80,0x0,0x8,0xfc,0x44,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x10,0x15,0xff,0x11,0x11,0x11,0x11,0x11,0x11,0x13,0x1d,0xf1,0x47,0x0,0x20,0x20,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x11,0x11,0x11,0x11,0xfd,0x11,0x14,0x18,0x31,0xd1,0x11,0x11,0x11,0x11,0x51,0x21,0x0,0x8,0x1c,0xe0,0x2,0x2,0xfe,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x1,0x1,0x1,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x4,0x7e,0x44,0x44,0x45,0x7d,0x11,0x51,0x5d,0x51,0x51,0x51,0x5d,0xf1,0x47,0x0,0x20,0x20,0x20,0x20,0x28,0x3c,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x0,0x1f,0x10,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x4,0xc,0x10,0x20,0x40,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0xf0,0x10,0x0,0x40,0x20,0x18,0xc,0x4,
++0x20,0x20,0x21,0x3e,0x20,0x20,0x1f,0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0x18,0xe0,0x0,0x4,0x4,0xfc,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x10,0x10,0x23,0x22,0x46,0xfa,0x12,0x23,0x42,0xfe,0x2,0x2,0x1e,0xe2,0x43,0x2,0x0,0x3c,0xe0,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x10,0x92,0xa,0x6,
++0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x3f,0x0,0x2,0x11,0x50,0x50,0x90,0xf,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x10,0xf8,0x0,0x0,0x80,0x84,0x12,0x12,0xf0,0x0,
++0x8,0x8,0x7e,0x8,0xe,0xf8,0x48,0x19,0x3f,0x1,0x1f,0x1,0xff,0x1,0x1,0x3,0x40,0x48,0xfc,0x48,0xc8,0x68,0x8a,0x36,0xc0,0x0,0xf0,0x4,0xfe,0x0,0x0,0x0,
++0x28,0x25,0x20,0x2f,0xf2,0x22,0x22,0x2a,0x3f,0xe2,0x22,0x25,0x24,0x28,0xb0,0x40,0x80,0x7c,0x44,0xc4,0x48,0x48,0x50,0x48,0xc4,0x42,0x42,0x62,0xd4,0x48,0x40,0x40,
++0x0,0x7f,0x2,0x4,0x8,0x10,0x3f,0x1,0x1,0x1,0x3f,0x1,0x1,0x1,0xff,0x0,0x8,0xfc,0x0,0x0,0x20,0x10,0xf8,0x8,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,
++0x4,0xfe,0x10,0x10,0x20,0x45,0xfe,0x10,0x10,0x7c,0x10,0x10,0x1e,0xf0,0x41,0x6,0x40,0x40,0x40,0x44,0xfe,0x8,0x88,0x88,0x88,0x90,0x50,0x20,0x50,0x88,0xe,0x4,
++0x3f,0x24,0x3f,0x1,0x7f,0x1,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0xff,0x0,0xf8,0x48,0xf8,0x0,0xfc,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x14,0xfe,0x0,
++0x10,0x10,0x15,0x7f,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x5c,0x10,0x10,0x11,0x12,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,0x50,0x48,0x84,0x6,0x2,
++0x10,0x10,0x11,0x54,0x54,0x57,0x54,0x54,0x57,0x54,0x54,0x54,0x7c,0x44,0x0,0x0,0x20,0x28,0xfc,0x20,0x24,0xfe,0x8,0x8,0xfe,0x8,0x88,0x48,0x48,0x8,0x28,0x10,
++0x4,0x24,0x25,0x3f,0x24,0x44,0xff,0x4,0x3f,0x24,0x24,0x24,0x26,0x25,0x4,0x4,0x4,0x4,0x4,0xa4,0x24,0xa4,0xe4,0x24,0xa4,0xa4,0xa4,0x84,0x84,0x4,0x14,0x8,
++0x20,0x22,0x3f,0x48,0x8,0xff,0x10,0x14,0x22,0x42,0x9f,0x10,0x1f,0x10,0x1f,0x10,0x0,0x4,0x7e,0x44,0x44,0xc4,0x44,0x7c,0x44,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,
++0x8,0x1c,0xf2,0x12,0x13,0xfe,0x14,0x30,0x3b,0x54,0x50,0x90,0x11,0x11,0x12,0x1c,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x10,0xe,0x4,
++0x8,0x1c,0xf0,0x11,0x13,0xfd,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0xa0,0x90,0x84,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x2f,0x28,0x28,0x28,0x28,0x49,0x42,0x8c,0x30,0x78,0x80,0x80,0x84,0xfe,0x80,0x88,0xfc,0x8,0x88,0x88,0x88,0x8,0x70,0xc,0x4,
++0x4,0x4,0xf,0x11,0x28,0x44,0x3,0xc,0x71,0x9,0x9,0x12,0x4,0x8,0x30,0xc0,0x0,0x0,0xf8,0x10,0xa0,0xc0,0x0,0x0,0x10,0x30,0x40,0x80,0x40,0x30,0xe,0x4,
++0x1,0x0,0x1f,0x10,0x90,0x57,0x50,0x10,0x3f,0x50,0xd7,0x12,0x21,0x21,0x40,0x0,0x0,0x88,0xfc,0x80,0x90,0xf8,0x80,0x84,0xfe,0x10,0xfc,0x10,0x10,0x10,0x50,0x20,
++0x2,0x42,0x2f,0x22,0x80,0x67,0x24,0x8,0x13,0x22,0xe2,0x22,0x22,0x22,0x20,0x20,0x48,0x48,0xfe,0x48,0x0,0xfe,0x42,0x44,0xf8,0x48,0x48,0x48,0x48,0x58,0x40,0x40,
++0x0,0x40,0x31,0x11,0x82,0x67,0x20,0x8,0x13,0x22,0xe2,0x22,0x22,0x22,0x23,0x22,0x80,0x80,0x0,0x10,0x8,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x2,0x1,0x7f,0x44,0x88,0x3f,0x2,0x4,0x1f,0x1,0x1,0x7f,0x1,0x1,0xff,0x0,0x0,0x0,0xfe,0x42,0x24,0xf8,0x0,0x20,0xf0,0x0,0x8,0xfc,0x0,0x4,0xfe,0x0,
++0x1,0x1,0x1,0x7f,0x41,0x41,0x41,0x41,0x7f,0x41,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x3f,0x21,0x21,0x21,0x3f,0x21,0x1,0x1,0x3f,0x24,0x24,0x24,0xff,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x8,0xfc,0x48,0x48,0x48,0xfe,0x0,
++0x1,0x1,0x3f,0x21,0x21,0x21,0x3f,0x21,0x1,0x1,0x12,0x51,0x51,0x90,0xf,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x4,0x12,0x12,0xf0,0x0,
++0x10,0x10,0x10,0x1c,0x21,0x21,0x7d,0x91,0x11,0xfd,0x11,0x10,0x14,0x18,0x10,0x0,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,0x20,
++0x2,0x1,0xff,0x1,0x1f,0x11,0x11,0x1f,0x11,0x5,0x8,0x18,0x28,0xca,0xc,0x8,0x0,0x4,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x8,0x18,0xa0,0x40,0x30,0xe,0x4,0x0,
++0x10,0x10,0x20,0x21,0x45,0xfa,0x10,0x20,0x40,0xfd,0x2,0x0,0x1c,0xe0,0x40,0x0,0x80,0x80,0xfc,0x8,0x90,0x50,0x20,0x50,0x88,0xe,0x64,0x10,0x8,0xc0,0x30,0x8,
++0x8,0x1c,0xf0,0x10,0x11,0xff,0x11,0x39,0x35,0x55,0x51,0x90,0x10,0x10,0x10,0x10,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,0x20,
++0x4,0x3e,0x24,0x24,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x24,0x24,0x44,0x94,0x8,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,0x20,
++0x0,0x3f,0x1,0xff,0x1,0x1f,0x11,0x1f,0x11,0x1f,0x1,0x3f,0x1,0x1,0xff,0x0,0x38,0xc0,0x4,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0xf8,0x0,0x4,0xfe,0x0,
++0x8,0x8,0x8,0x10,0x17,0x34,0x54,0x94,0x14,0x17,0x14,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xfc,0x44,0x40,0x40,0x40,0x40,0x40,
++0x1,0x1,0x1,0x2,0x4,0x8,0x30,0x0,0x8,0x8,0x14,0x12,0x22,0x41,0x82,0x0,0x0,0x0,0x0,0x80,0x40,0x38,0x10,0x0,0x20,0x20,0x50,0x50,0x88,0xe,0x4,0x0,
++0x2,0x4,0x1f,0x10,0x12,0x11,0x11,0xff,0x10,0x12,0x11,0x11,0x10,0x20,0x40,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
++0x0,0x3f,0x21,0x21,0x2f,0x21,0x21,0x3f,0x20,0x27,0x24,0x24,0x24,0x47,0x84,0x0,0x8,0xfc,0x8,0x48,0xe8,0x8,0x28,0xf8,0x48,0xe8,0x48,0x48,0x48,0xc8,0x28,0x10,
++0x10,0x10,0x10,0x10,0x54,0x52,0x52,0x90,0x10,0x10,0x10,0x10,0x20,0x20,0x40,0x0,0x4,0x84,0x84,0x84,0xa4,0x94,0x94,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x4,0x4,
++0x1,0x41,0x31,0x11,0x81,0x65,0x23,0xb,0x11,0x21,0xe1,0x21,0x22,0x22,0x24,0x20,0x4,0x4,0x24,0x24,0x24,0xb4,0x6c,0x6c,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,
++0x1,0x41,0x21,0x22,0x4,0x8,0xe7,0x20,0x20,0x20,0x23,0x20,0x28,0x30,0x27,0x0,0x0,0x0,0xf8,0x10,0x20,0x44,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x9,0xfd,0x9,0x9,0xd,0x7b,0x41,0x47,0x41,0x79,0xb,0xd,0x9,0x89,0x51,0x21,0x4,0x3e,0x4,0x4,0x44,0xbc,0x20,0xe0,0x24,0x3e,0x84,0x44,0x4,0x4,0x28,0x10,
++0x10,0x10,0x14,0xfe,0x21,0x21,0x49,0x7f,0x9,0x9,0xf,0xf9,0x49,0x9,0x9,0x8,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,
++0x4,0x3e,0x24,0x24,0x24,0x3d,0x24,0x24,0x24,0x3c,0x24,0x24,0x24,0x44,0x94,0x8,0x8,0x8,0x8,0x8,0x8,0xfe,0x8,0x8,0x88,0x48,0x48,0x8,0x8,0x8,0x28,0x10,
++0x0,0x3f,0x0,0x1f,0x0,0x3f,0x1,0x7f,0x41,0x9f,0x11,0x11,0x11,0x11,0x1,0x1,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0xfe,0x2,0xf4,0x10,0x10,0x50,0x20,0x0,0x0,
++0x4,0x7e,0x44,0x44,0x44,0x7c,0x0,0xf,0x8,0x8,0x8,0x8,0x8,0x10,0x20,0x40,0x8,0xfc,0x88,0x88,0x88,0xf8,0x40,0xe0,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x10,0x1e,0x22,0xc4,0x8,0x7e,0x2,0x2,0x7e,0x2,0x2,0x7f,0x1,0x2,0x0,0x10,0x10,0x10,0xfe,0x92,0x94,0x90,0xfc,0x84,0xc4,0xa8,0xa8,0x10,0x28,0x4e,0x84,
++0x2,0x1,0x7f,0x40,0x81,0x1,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x20,0x0,0x0,0xfe,0x2,0x4,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x20,0x3f,0x50,0x9f,0x10,0x1f,0x0,0x7f,0x0,0x10,0xf8,0x10,0x10,0xf0,0x90,0x40,0x20,0xfe,0x14,0xf0,0x10,0xf0,0x0,0xfc,0x0,
++0x10,0xff,0x12,0x53,0x52,0x53,0x52,0x57,0x78,0xb,0x8,0x3b,0xc8,0x9,0x2e,0x10,0x0,0xfc,0x44,0xd4,0x48,0xd4,0x62,0xd8,0x60,0xa4,0x68,0xb0,0x68,0xa6,0x20,0x20,
++0x0,0x9,0xfd,0x11,0x11,0x12,0x7c,0x13,0x10,0x10,0x1c,0xf0,0x41,0x2,0x4,0x0,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x60,0x70,0xb0,0xa8,0x2e,0x24,0x20,0x20,
++0x10,0x11,0x11,0x11,0xfd,0x12,0x30,0x3b,0x54,0x50,0x90,0x10,0x11,0x12,0x14,0x10,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x60,0x70,0xb0,0xa8,0x2e,0x24,0x20,0x20,
++0x10,0x11,0x11,0x11,0x7d,0x56,0x54,0x57,0x54,0x7c,0x10,0x14,0x1d,0xf6,0x44,0x0,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x60,0x70,0xb0,0xa8,0x2e,0x24,0x20,0x20,
++0x1,0x11,0x11,0x1f,0x11,0x21,0x1,0xff,0x3,0x5,0x9,0x11,0x21,0xc1,0x1,0x1,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x80,0x40,0x30,0xe,0x4,0x0,0x0,
++0x2,0x44,0x2b,0x10,0x28,0x4b,0x88,0x9,0x1b,0x2d,0x49,0x89,0x9,0x9,0x29,0x11,0x40,0x44,0xf8,0x50,0x64,0xfe,0x80,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x20,0x1b,0x8,0x0,0x7,0xf0,0x11,0x13,0x15,0x19,0x11,0x15,0x19,0x11,0x1,0x40,0x44,0xf8,0x50,0x64,0xfe,0x80,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x42,0x22,0x23,0x2,0x4,0xe0,0x2f,0x20,0x20,0x21,0x29,0x32,0x24,0x8,0x0,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0xc0,0xe0,0x60,0x50,0x4e,0x44,0x40,0x40,
++0x0,0x4f,0x20,0x21,0x3,0xc,0xe1,0x22,0x2c,0x21,0x22,0x2c,0x21,0x50,0x8f,0x0,0x8,0xfc,0x80,0x0,0x88,0xd8,0x60,0x40,0xe0,0x50,0x48,0x48,0x40,0x86,0xfc,0x0,
++0x10,0x10,0x10,0x12,0x1f,0x28,0x49,0x8a,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x40,0x40,0x40,0x44,0x7e,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
++0x10,0x10,0x10,0x12,0x55,0x59,0x51,0x91,0x11,0x11,0x11,0x28,0x24,0x44,0x83,0x1,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x24,0x3c,0xe2,0x2,
++0x2,0x2,0x3f,0x2,0xff,0x2,0xf,0x38,0xc8,0xf,0x8,0x8,0xf,0x20,0x24,0x42,0x0,0x20,0xf0,0x84,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x8,0x84,0x44,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x14,0x18,0x31,0xd0,0x10,0x10,0x10,0x10,0x57,0x20,0x40,0x20,0x4,0xfe,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x7,0x74,0x57,0x54,0x75,0x54,0x55,0x75,0x55,0x54,0x77,0x4a,0x12,0x22,0x2,0x4,0xfe,0x4,0xfc,0x0,0xfc,0x20,0xfc,0x24,0xfc,0x20,0xfe,0x22,0x2a,0xfa,0x6,
++0x0,0x7,0x74,0x57,0x54,0x55,0x54,0x55,0x55,0x55,0x54,0x77,0x4a,0x12,0x22,0x2,0x4,0xfe,0x4,0xfc,0x0,0xfc,0x20,0xfc,0x24,0xfc,0x20,0xfe,0x22,0x2a,0xfa,0x6,
++0x2,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0x3f,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x8,0x8,0xff,0x9,0x1,0x1f,0x1,0xff,0x1,0x2,0xf,0x18,0x2f,0xc8,0xf,0x8,0x20,0x24,0xfe,0x20,0x10,0xe0,0x44,0xfe,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x30,0x38,0x55,0x50,0x90,0x10,0x10,0x10,0x17,0x10,0x40,0x20,0x24,0xfe,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x2,0x3f,0x22,0x22,0x23,0x3e,0x22,0x22,0x3e,0x22,0x22,0x22,0x2f,0xf0,0x41,0x2,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x44,0x84,0x28,0x10,
++0x10,0x10,0x10,0x15,0x7e,0x54,0x54,0x54,0x55,0x7c,0x54,0x10,0x14,0xfc,0x47,0x0,0x40,0x20,0x24,0xfe,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x4,0x7e,0x44,0x54,0x55,0x55,0x56,0x54,0x54,0x54,0x54,0x54,0x10,0x2b,0x44,0x84,0x40,0x20,0x20,0x0,0xfe,0x2,0x4,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,
++0x10,0x10,0x13,0x1c,0x20,0x23,0x7c,0x90,0x13,0xfd,0x12,0x15,0x10,0x14,0x18,0x0,0x40,0x48,0xfc,0x40,0x48,0xfc,0x80,0x84,0xfe,0x8,0x8,0xfe,0x8,0x88,0x48,0x18,
++0x10,0x12,0x1f,0x28,0x45,0x80,0x8,0x7d,0x11,0x11,0x11,0x11,0x1d,0xf2,0x44,0x8,0x40,0x44,0x7e,0xa0,0x10,0x0,0x10,0xf8,0x10,0x10,0x90,0x50,0x52,0x12,0xe,0x0,
++0x8,0x8,0x8,0x17,0x10,0x30,0x50,0x90,0x17,0x10,0x10,0x10,0x10,0x10,0x1f,0x10,0x80,0x40,0x44,0xfe,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x40,0x30,0x17,0x80,0x60,0x20,0x8,0x17,0x20,0xe0,0x20,0x20,0x20,0x2f,0x20,0x80,0x40,0x44,0xfe,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x20,0x13,0x12,0x2,0xfe,0xa,0x12,0x3b,0x56,0x90,0x10,0x11,0x11,0x12,0x14,0x18,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0xa8,0xa0,0xa0,0x20,0x22,0x22,0x1e,0x0,
++0x8,0xfc,0x8,0x4b,0x48,0x48,0x48,0x48,0x7d,0x4,0x4,0x1c,0xe4,0x44,0x17,0x8,0x40,0x20,0x24,0xfe,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x16,0x1a,0x32,0xd2,0x12,0x12,0x14,0x14,0x58,0x20,0x8,0x1c,0xe0,0x50,0x50,0x50,0x50,0x50,0x50,0x48,0x48,0x48,0x44,0x44,0x42,0x40,
++0x0,0x0,0x1f,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x21,0x21,0x41,0x81,0x1,0x10,0x78,0x80,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0x10,0x10,0x8,0xe,0x4,0x0,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x17,0x1a,0x32,0xd3,0x12,0x10,0x10,0x10,0x57,0x20,0x40,0x40,0x48,0xfc,0x48,0x48,0xf8,0x48,0x48,0xfc,0x48,0x50,0x20,0xd2,0xa,0x6,
++0x1,0x1,0x1,0x3f,0x2,0x2,0xff,0x4,0x4,0xf,0x0,0x0,0x0,0x6,0x1,0x0,0x0,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x80,0x40,
++0x0,0x4,0xfe,0x11,0x10,0x20,0x23,0x7c,0xa4,0x25,0x24,0x24,0x24,0x3c,0x24,0x0,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x80,0x80,0xfc,0x8,0x10,0x90,0x60,0x20,0x10,
++0x10,0x10,0x10,0xfd,0x20,0x28,0x4b,0x7c,0x8,0x9,0x1c,0xe8,0x48,0x8,0x8,0x8,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x80,0x80,0xfc,0x8,0x10,0x90,0x60,0x20,0x10,
++0x10,0x17,0x14,0x14,0xff,0x14,0x13,0x19,0x31,0xd7,0x11,0x11,0x1f,0x11,0x52,0x24,0x4,0xbe,0xa4,0xa4,0xbc,0x62,0xde,0x10,0x10,0xfc,0x10,0x14,0xfe,0x10,0xc,0x4,
++0x0,0x7c,0x47,0x54,0x55,0x54,0x54,0x57,0x54,0x54,0x55,0x54,0x10,0x29,0x46,0x80,0x88,0x50,0xfe,0x50,0xfc,0x54,0x54,0xfe,0x54,0x54,0xfc,0x50,0xd8,0x56,0x54,0x50,
++0x10,0x1e,0x28,0x4f,0x8,0x1f,0x0,0xff,0x2,0xd,0x71,0x6,0x39,0x6,0x78,0x3,0x40,0x7c,0xa0,0xc0,0x40,0x80,0x84,0xfe,0x10,0x20,0xc0,0xa0,0x90,0x8e,0x84,0x0,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x32,0x3a,0x57,0x52,0x92,0x12,0x14,0x14,0x1b,0x10,0x40,0x20,0x24,0xfe,0x0,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x1,0x0,0x0,0x3f,0x20,0x20,0x20,0x20,0x2f,0x20,0x20,0x20,0x40,0x40,0xbf,0x0,0x0,0x80,0x88,0xfc,0x0,0x80,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,0x84,0xfe,0x0,
++0x8,0x48,0x2b,0x8,0x18,0x29,0x4a,0x9,0xff,0x2,0x4,0xc,0x14,0x65,0x6,0x4,0x40,0x48,0xfc,0x40,0x50,0xf8,0x0,0x4,0xfe,0x8,0x90,0xa0,0x40,0x30,0xe,0x4,
++0x8,0x8,0x8,0x48,0x28,0x2f,0x9,0x9,0x19,0x2a,0x49,0xc8,0x8,0x8,0x9,0xa,0x40,0x40,0x40,0x80,0x84,0xfe,0x8,0x8,0x8,0x8,0x10,0xa0,0x40,0xb0,0xc,0x4,
++0x10,0x17,0x11,0x10,0xff,0x10,0x17,0x1a,0x33,0xd2,0x13,0x10,0x17,0x10,0x5f,0x20,0x40,0xfc,0x10,0xa4,0xfe,0x8,0xfc,0x48,0xf8,0x48,0xf8,0x40,0xfc,0x40,0xfe,0x0,
++0x10,0x10,0x10,0x90,0x50,0x50,0x1f,0x10,0x30,0x50,0xd0,0x10,0x10,0x17,0x10,0x10,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x48,0xfc,0x0,0x0,
++0x8,0x8,0x8,0x48,0x28,0x2f,0x8,0x8,0x18,0x28,0x49,0xc9,0x9,0xa,0xc,0x8,0x40,0x50,0x48,0x40,0x44,0xfe,0x40,0x40,0xa0,0xa0,0x10,0x10,0x8,0xe,0x4,0x0,
++0x10,0x10,0x10,0x11,0xfd,0x13,0x35,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0xa0,0xa0,0x84,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x10,0x10,0x10,0x1d,0x21,0x23,0x7d,0x91,0x11,0xfd,0x11,0x11,0x15,0x19,0x11,0x1,0xa0,0xa0,0x84,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x0,0x40,0x33,0x12,0x2,0x3,0xf2,0x12,0x13,0x12,0x12,0x12,0x13,0x2a,0x47,0x0,0x40,0x90,0xf8,0x10,0x10,0xf0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x6,0xfc,0x0,
++0x8,0x7f,0x8,0x3e,0x8,0xff,0x10,0x1e,0x22,0xcc,0x1f,0x10,0x11,0x11,0x6,0x38,0x40,0x44,0x7e,0x84,0xc4,0x28,0x10,0x28,0x46,0x90,0xf8,0x10,0x10,0x10,0xc0,0x38,
++0x0,0x7c,0x44,0x48,0x50,0x48,0x45,0x65,0x5a,0x44,0x41,0x5f,0x1,0x1,0xff,0x0,0x40,0x40,0x40,0xa0,0xa0,0xa0,0x10,0x8,0xe,0x4,0x0,0xf0,0x0,0x0,0xfe,0x0,
++0x10,0x17,0x24,0x22,0x41,0xfa,0x12,0x24,0x47,0xfc,0x4,0x2,0x19,0xe2,0x44,0x8,0x0,0xbc,0xa4,0xa8,0x10,0xa8,0xa6,0x40,0xbc,0xa4,0xa4,0xa8,0x10,0xa8,0x46,0x4,
++0x0,0x4f,0x30,0x13,0x2,0x2,0xf3,0x10,0x13,0x10,0x10,0x17,0x14,0x18,0x11,0x0,0x44,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x0,0xf8,0x20,0x44,0xfe,0x40,0x40,0x40,0x80,
++0x1,0x41,0x31,0x13,0x2,0x16,0x1b,0x12,0x22,0xe3,0x22,0x22,0x22,0x23,0x22,0x2,0x40,0x20,0x24,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x10,0x13,0x12,0x12,0xfe,0x12,0x17,0x1a,0x30,0xd2,0x12,0x12,0x13,0x14,0x58,0x20,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x48,0x40,0x48,0x7c,0x40,0x40,0xc6,0x7c,0x0,
++0x10,0x10,0x12,0x12,0xfe,0x12,0x17,0x18,0x30,0xd4,0x14,0x14,0x14,0x14,0x57,0x20,0x40,0x40,0x48,0x48,0x48,0x48,0xf8,0x48,0x40,0x44,0x44,0x44,0x44,0x44,0xfc,0x4,
++0x1,0x1,0x1,0x1,0x1f,0x10,0x1f,0x10,0x1f,0x11,0x1,0xff,0x1,0x1,0x1,0x1,0x8,0xfc,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x3,0x5,0x9,0x31,0x1,0x8,0xfc,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x80,0x60,0x1c,0x8,0x0,
++0x0,0x17,0xf8,0x20,0x21,0x22,0x26,0xf9,0x22,0x24,0x20,0x21,0x3a,0xe4,0x41,0x0,0x4,0xfe,0x40,0x80,0x84,0x4c,0xb0,0x20,0xb0,0x68,0xa8,0x24,0x22,0x20,0x40,0x80,
++0x8,0x8,0xff,0x8,0x1,0x21,0x21,0x21,0x3f,0x1,0x41,0x41,0x41,0x41,0x7f,0x40,0x20,0x24,0xfe,0x20,0x0,0x8,0x8,0x8,0xf8,0x0,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x55,0x63,0x41,0x7f,0x41,0x41,0x7f,0x41,0x20,0xa0,0x20,0x24,0x7e,0x84,0x4,0x44,0x24,0x24,0x4,0x4,0x4,0x4,0x28,0x10,
++0x0,0xb,0x7c,0x48,0x49,0x4a,0x4e,0x49,0x4a,0x4c,0x48,0x79,0x4a,0x4,0x1,0x0,0x4,0xfe,0x40,0x80,0x84,0x4c,0xb0,0x20,0xb0,0x68,0xa8,0x24,0x22,0x20,0x40,0x80,
++0x8,0x4,0x7f,0x1,0x3f,0x2,0xff,0x4,0xf,0x18,0x2f,0xc8,0xf,0x8,0xf,0x8,0x20,0x48,0xfc,0x0,0xf8,0x0,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x10,0x10,0x10,0x12,0x54,0x59,0x52,0x90,0x10,0x10,0x10,0x28,0x24,0x44,0x80,0x0,0x40,0x40,0x40,0x44,0xfe,0x4,0x4,0x84,0x44,0x44,0x4,0x4,0x4,0x44,0x28,0x10,
++0x0,0x40,0x30,0x10,0x87,0x64,0x24,0xc,0x14,0x27,0xe4,0x20,0x20,0x20,0x2f,0x24,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xfc,0x44,0x50,0x48,0x7c,0xc4,0x4,
++0x10,0xc,0x4,0x0,0xff,0x10,0x10,0x22,0x24,0x78,0x8,0x10,0x14,0x22,0x7e,0x2,0x10,0x30,0x40,0x4,0xfe,0x20,0x20,0x44,0x48,0xf0,0x10,0x20,0x28,0x44,0xfc,0x4,
++0x41,0x31,0x11,0x2,0xa,0xf4,0x20,0x20,0x21,0x26,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0xfc,0x4,0x48,0x40,0xa0,0x90,0xe,0x4,0xf0,0x10,0x10,0x10,0xf0,0x10,
++0x41,0x21,0x21,0xa,0x34,0xe0,0x21,0x26,0x1f,0x10,0x11,0x11,0x11,0x2,0xc,0x30,0x0,0x0,0xfc,0x44,0x48,0xa0,0x10,0xe,0xf4,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x20,0x10,0x10,0x5,0xa,0x70,0x10,0x13,0x12,0xff,0x4,0x8,0x4,0x3,0x4,0x38,0x80,0xfc,0x84,0x28,0x20,0x50,0x8e,0x4,0x0,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x44,0x22,0x21,0xf,0x82,0x42,0x44,0x14,0x1f,0x21,0xe2,0x24,0x29,0x2f,0x21,0x20,0x8,0x10,0x24,0xfe,0x10,0x10,0x20,0xa4,0x78,0x8,0x10,0x20,0x44,0x7c,0x4,0x0,
++0x2,0x42,0x24,0x29,0x84,0x62,0x22,0x8,0x17,0x24,0xe4,0x27,0x24,0x24,0x27,0x24,0x48,0x48,0x90,0x20,0x90,0x48,0x48,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x0,0x0,0xfe,0x4,0x8,0x11,0x15,0x1a,0xf0,0x50,0x10,0x10,0x10,0x10,0x51,0x26,0x80,0x80,0x80,0x84,0xfe,0x8,0x88,0x88,0x88,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x8,0x28,0x2e,0x28,0x2e,0xf8,0x42,0x4,0x3f,0x1,0x2,0x3f,0x1,0x9,0x11,0x23,0x80,0x80,0x98,0xe2,0x82,0x7e,0x0,0x10,0xe0,0x0,0x10,0xf8,0x8,0x20,0x18,0x8,
++0x8,0xb,0x8,0x10,0x10,0x30,0x50,0x9f,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x10,0x0,0xf8,0x8,0x10,0x20,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x10,0x11,0x52,0x34,0x18,0xfe,0x10,0x33,0x38,0x54,0x54,0x90,0x10,0x10,0x10,0x10,0x0,0xfc,0x4,0x8,0x10,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x40,0x37,0x14,0x88,0x67,0x20,0x9,0x10,0x2f,0xe0,0x20,0x27,0x20,0x20,0x20,0x80,0x40,0xfe,0x2,0x44,0xfc,0x0,0x10,0xa4,0xfe,0x40,0x48,0xfc,0x40,0x40,0x40,
++0x0,0x3f,0x0,0x0,0x0,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x0,0xf0,0x10,0x20,0x40,0x80,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x2,0x4,0x1f,0x10,0x10,0x1f,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0xf0,0x10,
++0x0,0x47,0x30,0x13,0x80,0x6f,0x20,0xb,0x12,0x22,0xe2,0x22,0x22,0x20,0x23,0x2c,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0x48,0x48,0x48,0x48,0xb0,0xc,0x4,
++0x2,0x1,0x3f,0x20,0x40,0x1f,0x0,0x0,0x1,0xff,0x1,0x1,0x1,0x1,0x5,0x2,0x0,0x0,0xfc,0x4,0x8,0xe0,0x40,0x80,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x13,0x1c,0x10,0x7f,0x14,0x3e,0x1,0x7f,0x40,0x9f,0x0,0x7f,0x9,0x11,0x23,0x4,0x18,0x64,0x18,0x64,0x18,0x60,0x0,0xfe,0x2,0xf4,0x0,0xfc,0x20,0x18,0x8,
++0x10,0x10,0x13,0x12,0xfc,0x11,0x30,0x38,0x57,0x50,0x90,0x11,0x11,0x12,0x10,0x10,0x40,0x20,0xfe,0x2,0x4,0xfc,0x0,0x4,0xfe,0x20,0xa8,0x24,0x22,0x22,0xa0,0x40,
++0x0,0x78,0x4b,0x4a,0x4c,0x79,0x50,0x10,0x13,0x5c,0x50,0x51,0x5d,0xf2,0x40,0x0,0x40,0x20,0xfe,0x2,0x4,0xfc,0x0,0x4,0xfe,0x20,0xa8,0x24,0x22,0x22,0xa0,0x40,
++0x2,0x1,0x7f,0x40,0x80,0x1f,0x0,0x0,0xff,0x1,0x9,0x9,0x11,0x21,0x5,0x2,0x0,0x0,0xfe,0x2,0x24,0xf0,0x0,0x4,0xfe,0x0,0x20,0x10,0x8,0x8,0x0,0x0,
++0x10,0x10,0x23,0x22,0x44,0xf9,0x10,0x20,0x43,0xf8,0x0,0x1,0x19,0xe2,0x40,0x0,0x40,0x20,0xfe,0x2,0x4,0xfc,0x0,0x4,0xfe,0x20,0xa8,0x24,0x22,0x22,0xa0,0x40,
++0x10,0x8,0x4,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x2,0x51,0x50,0x90,0xf,0x0,0x10,0x20,0x40,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x0,0x84,0x92,0x12,0xf0,0x0,
++0x11,0x11,0x21,0x21,0x45,0xf9,0x11,0x21,0x41,0xfd,0x42,0x2,0x1c,0xe4,0x48,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xa8,0xa8,0x48,0x44,0x82,0x0,
++0x10,0x10,0x10,0x3f,0x42,0x84,0x7f,0x1,0x1,0x3f,0x1,0x1,0x7f,0x1,0x0,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x1,0x1,0x1,0x3f,0x1,0x1,0xff,0x1,0x9,0x9,0x9,0x9,0x9,0x15,0x23,0x40,0x0,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,0x0,0x10,0xf8,0x0,0x0,0x6,0xfc,0x0,
++0x1,0x1,0x7f,0x1,0x3f,0x2,0xff,0x4,0x8,0x37,0xc1,0x1f,0x1,0x2,0x4,0x38,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x40,0x30,0xce,0x4,0xf0,0x0,0xc0,0x30,0x8,
++0x10,0x10,0x17,0x10,0xfb,0x10,0x17,0x19,0x32,0xdd,0x10,0x17,0x10,0x10,0x51,0x26,0x40,0x48,0xfc,0x40,0xf8,0x80,0xfe,0x10,0xe,0xf4,0x40,0xfc,0x40,0xb0,0xc,0x4,
++0x8,0x1c,0xf1,0x11,0x15,0xff,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x1f,0x10,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xfe,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x10,0x1f,0x11,0x1,0x11,0x11,0x11,0x11,0x29,0x47,0x80,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,0x0,0x10,0xf8,0x0,0x0,0x6,0xfc,0x0,
++0x2,0x1,0x7f,0x8,0x8,0x8,0x14,0x22,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x0,0x8,0xfc,0x20,0x20,0x20,0x50,0x88,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x20,0x18,0x8,0x0,0xfe,0x21,0x20,0x3c,0x24,0x25,0x27,0x24,0x44,0x44,0x94,0x9,0x40,0x40,0x48,0x7c,0x80,0x48,0x7c,0xa0,0xa0,0x24,0xfe,0x20,0x50,0x50,0x8e,0x4,
++0x20,0x10,0x11,0x1,0xfd,0x9,0x11,0x39,0x55,0x91,0x11,0x11,0x11,0x11,0x17,0x10,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xfe,0x0,
++0x40,0x30,0x11,0x1,0x1,0xf1,0x11,0x11,0x11,0x11,0x11,0x13,0x15,0x19,0x17,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xfe,0x0,
++0x0,0x7c,0x45,0x49,0x49,0x51,0x49,0x49,0x45,0x45,0x45,0x69,0x51,0x41,0x47,0x40,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xfe,0x0,
++0x10,0x10,0x21,0x21,0x45,0xf9,0x11,0x21,0x41,0xfd,0x41,0x1,0x1d,0xe1,0x47,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xfe,0x0,
++0x10,0x10,0x10,0x1e,0x20,0x20,0x7c,0x91,0x11,0xff,0x11,0x13,0x15,0x19,0x11,0x1,0x20,0x20,0x24,0x3e,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x20,0x3e,0x48,0x9f,0x12,0x10,0x1f,0x8,0xff,0x14,0x2f,0x41,0x9f,0x5,0x9,0x13,0x40,0x7e,0x90,0xf0,0x10,0x90,0xf0,0x4,0xfe,0x50,0x88,0x2e,0xe4,0x40,0x30,0x10,
++0x1,0x5,0x75,0x55,0x55,0x5f,0x51,0x52,0x57,0x5a,0x53,0x72,0x43,0x2,0x4,0x8,0x20,0x20,0xe6,0x38,0xe2,0x1e,0xf0,0x28,0xfc,0x48,0xf8,0x48,0xf8,0x48,0x48,0x58,
++0x4,0xfe,0x29,0x28,0xfe,0xaa,0xaa,0xab,0xa6,0xc2,0x83,0xfe,0x82,0x82,0xfe,0x82,0x20,0x24,0xfe,0x0,0x88,0x88,0x88,0x54,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x1f,0x10,0x1f,0x10,0x1f,0x0,0xff,0x22,0x3f,0x22,0x3e,0x22,0x3e,0xe2,0x2,0x3,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,0xfc,0x84,0x88,0x50,0x20,0x58,0x8e,0x4,
++0x0,0x7f,0x44,0x44,0x7f,0x0,0x4,0xfc,0x4,0x4,0x7c,0x4,0x4,0xfc,0x4,0x4,0x4,0xfe,0x44,0x44,0xfc,0x0,0x44,0x7e,0x40,0x48,0x7c,0x40,0x44,0x7e,0x40,0x40,
++0x8,0x7f,0x4,0x3f,0x24,0x24,0x28,0x3f,0x20,0x3f,0x0,0xff,0x8,0x4,0x4,0x0,0x40,0xfc,0x80,0xf8,0x88,0xe8,0x8,0xf8,0x8,0xf8,0x20,0xfe,0x20,0x20,0xa0,0x40,
++0x2,0x5f,0x21,0x2f,0x9,0xa,0xe8,0x2b,0x28,0x2f,0x20,0x3f,0x24,0x22,0x50,0x8f,0x20,0xfc,0x40,0xf8,0x48,0x38,0x8,0xe8,0x8,0xf8,0x20,0xfe,0x20,0xa0,0x46,0xfc,
++0x1,0x9,0x7d,0x49,0x4a,0x4c,0x48,0x78,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x0,0x4,0xfe,0x80,0x80,0x90,0xf8,0x80,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,
++0x2,0x2,0x2,0xff,0x4,0x4,0x4,0x8,0xf,0x10,0x10,0x20,0x40,0x80,0x7f,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x10,0xf8,0x80,0x80,0x80,0x80,0x84,0xfe,0x0,
++0x8,0x8,0x8,0x17,0x10,0x30,0x51,0x91,0x11,0x12,0x14,0x18,0x10,0x10,0x17,0x10,0x80,0x80,0x84,0xfe,0x80,0x80,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x11,0x11,0x11,0x11,0xfe,0x14,0x30,0x38,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x4,0xfe,0x80,0x80,0x90,0xf8,0x80,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,
++0x10,0x12,0x12,0x22,0x3f,0x62,0xa2,0x22,0x2f,0x28,0x28,0x28,0x28,0x2f,0x28,0x20,0x20,0x20,0x20,0x24,0xfe,0x84,0x44,0x44,0xc8,0xa8,0xa8,0x90,0xa8,0xa8,0x46,0x84,
++0x9,0x9,0x9,0x11,0x12,0x32,0x54,0x98,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x4,0xfe,0x80,0x80,0x90,0xf8,0x80,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,
++0x1,0x1,0x11,0x11,0x11,0x29,0x25,0x45,0x81,0x1,0x3f,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x10,0x10,0x10,0x28,0x24,0x44,0x80,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,
++0x1,0x0,0x3f,0x20,0x24,0x24,0x24,0x2a,0x29,0x31,0x20,0x2f,0x40,0x40,0xbf,0x0,0x0,0x84,0xfe,0x80,0x90,0x90,0x90,0xa8,0xa4,0xc4,0x90,0xf8,0x80,0x84,0xfe,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x0,0x0,0x0,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x8,0xfc,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0xff,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x4,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0xff,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x4,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0xff,0x1,0x1,0x21,0x21,0x21,0x21,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x0,0x8,0x8,0x8,0x8,0xff,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0xf,0x8,0x0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xe0,0x20,
++0x10,0x11,0x11,0x11,0x11,0x11,0x11,0xff,0x11,0x11,0x11,0x11,0x11,0x21,0x20,0x40,0x10,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0x7f,0x0,0x0,0x1,0x3,0x5,0x9,0x11,0x21,0x41,0x1,0x1,0x1,0xff,0x0,0x8,0xfc,0x80,0x80,0x0,0x0,0x60,0x10,0x8,0x4,0x4,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x7f,0x0,0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0x0,0xff,0x0,0x8,0xfc,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x0,0x4,0xfe,0x0,
++0x0,0x3f,0x0,0x0,0x1,0x7d,0x5,0x9,0x9,0x11,0x11,0x21,0x45,0x2,0xff,0x0,0x20,0xf0,0x40,0x80,0x8,0x18,0xa0,0x40,0x20,0x10,0xe,0x4,0x0,0x4,0xfe,0x0,
++0x0,0xff,0x0,0x1f,0x10,0x10,0x1f,0x0,0x7f,0x44,0x42,0x5f,0x41,0x41,0x41,0x40,0x4,0xfe,0x0,0xf0,0x10,0x10,0xf0,0x4,0xfe,0x44,0x84,0xf4,0x4,0x4,0x14,0x8,
++0x0,0x7f,0x3,0x5,0x19,0x61,0x10,0x10,0xfe,0x22,0x22,0x23,0x14,0x8,0x14,0x62,0x8,0xfc,0x0,0x60,0x18,0x4,0x0,0xf8,0x8,0x10,0x24,0xfe,0x20,0x20,0xa0,0x40,
++0x0,0xff,0x1,0x3d,0x25,0x3d,0x1,0x7f,0x1,0x3d,0x25,0x25,0x3d,0x1,0xff,0x0,0x4,0xfe,0x0,0x78,0x48,0x78,0x0,0xfc,0x0,0x78,0x48,0x48,0x78,0x4,0xfe,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x1,0x7f,0x41,0x41,0x4f,0x40,0x40,0x40,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x4,0xfe,0x4,0x24,0xe4,0x24,0x14,0x8,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x2,0x2,0x4,0x8,0x10,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x18,0x10,0x10,0x10,0x10,0x10,0xf,0x0,0x0,0x0,0x20,0x60,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0xfc,0x0,
++0x0,0x3,0x7e,0x2,0x2,0x2,0x2,0x3,0xfe,0x2,0x2,0x2,0x2,0x2,0x2,0x1,0x10,0xf8,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x2,0x2,0xfe,
++0x0,0x1,0x3f,0x1,0x1,0x1,0x1,0xff,0x1,0x2,0x2,0x4,0x4,0x8,0x30,0xc0,0x10,0xf8,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x80,0x80,0x40,0x20,0x10,0xe,0x4,
++0x0,0x10,0xc,0x2,0x1,0x2,0xc,0x70,0x8,0x4,0x2,0x1,0x2,0xc,0x30,0xc0,0x10,0x30,0x40,0x80,0x0,0xc0,0x30,0x28,0x40,0x40,0x80,0x0,0x80,0x60,0x1e,0x4,
++0x0,0x1,0x3e,0x20,0x3f,0x20,0x20,0x27,0x24,0x24,0x24,0x24,0x44,0x44,0x84,0x3,0x10,0xf8,0x0,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x90,0x50,0x20,0x2,0x2,0xfe,
++0x0,0x0,0x3f,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x22,0x24,0x28,0x33,0x20,0x0,0x10,0xf8,0x80,0x80,0x80,0x84,0xfe,0x80,0x80,0x40,0x40,0x20,0x20,0x12,0x8a,0x6,
++0x2,0x2,0x4,0x3f,0x20,0x28,0x24,0x22,0x21,0x22,0x24,0x28,0x30,0x20,0x3f,0x20,0x0,0x0,0x8,0xfc,0x8,0x28,0x48,0x88,0x8,0x88,0x48,0x28,0x18,0x8,0xf8,0x8,
++0x1,0x12,0x14,0x1f,0x11,0x12,0x1f,0x10,0x17,0x14,0x17,0x24,0x27,0x44,0x85,0x4,0x0,0x10,0x50,0x90,0x10,0x50,0xf0,0x10,0xd0,0x50,0xd0,0x50,0xd2,0x52,0x4e,0x80,
++0x10,0x10,0x10,0x13,0xfc,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x24,0x24,0x43,0x80,0x0,0x88,0x50,0xfe,0x20,0xf8,0x88,0xf8,0x88,0xf8,0x88,0xf8,0x8a,0x2,0xfe,0x0,
++0x20,0x20,0x24,0x7f,0x80,0x7c,0x44,0x55,0x44,0xfe,0x44,0x54,0x44,0x7e,0x5,0x1a,0x40,0x20,0x24,0xfe,0x40,0x50,0x88,0xfc,0x0,0xa8,0xa8,0xa8,0xaa,0xaa,0x2e,0x0,
++0x4,0x8,0x3f,0x24,0x3f,0x1,0x1f,0x1,0xff,0x4,0x1f,0x1,0x7f,0x1,0x1,0x1,0x0,0x8,0xfc,0x48,0xf8,0x0,0xf0,0x4,0xfe,0x40,0xf0,0x0,0xfc,0x0,0x0,0x0,
++0x12,0xa,0x12,0x2,0x3c,0x8,0x7e,0x9,0xff,0x0,0x3e,0x22,0x3e,0x14,0x7e,0x1,0x48,0x50,0x48,0x44,0x3c,0x20,0x28,0xfc,0x20,0xf8,0x88,0x88,0x50,0x20,0x50,0x8e,
++0x0,0x0,0x0,0x0,0x0,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x0,0x0,0x1,0x3d,0x25,0x25,0x25,0x25,0x25,0x3d,0x1,0x2,0xff,0x0,0x20,0xf0,0x40,0x80,0x8,0x7c,0x8,0x48,0x30,0x10,0x28,0x48,0x0,0x4,0xfe,0x0,
++0x7f,0x10,0x17,0x14,0x27,0x24,0x57,0x94,0x17,0x10,0x1e,0x2,0x7e,0x12,0x12,0x62,0xf0,0x10,0xd4,0x5e,0xc4,0x44,0xd4,0x5c,0xd0,0x10,0xf0,0x80,0xf8,0x88,0x88,0x88,
++0x0,0x8,0x8,0x8,0x8,0x9,0xe,0x18,0x68,0x8,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x20,0x70,0xa0,0x20,0x20,0x20,0x20,0xa0,0x44,0x4,0x4,0xfc,0x0,
++0x10,0x10,0x12,0x1f,0x10,0x10,0x10,0x12,0x7f,0x42,0x42,0x42,0x42,0x42,0x7e,0x42,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x42,0x3e,0x0,
++0x0,0x3f,0x0,0x0,0x0,0xff,0x4,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x10,0xf8,0x0,0x0,0x4,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x1,0x9,0x9,0x79,0x9,0x9,0x9,0x7f,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x0,0x20,0x28,0x3c,0x20,0x20,0x28,0xfc,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x1,0x1,0x7f,0x1,0x41,0x7f,0x40,0x9f,0x0,0x1,0x1,0xff,0x1,0x1,0x5,0x2,0x0,0x8,0xfc,0x0,0x0,0xfe,0x2,0xe4,0x40,0x80,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x1,0x1,0x7f,0x1,0x9,0x5,0xff,0x0,0x3f,0x20,0x27,0x24,0x27,0x20,0x3f,0x20,0x0,0x8,0xfc,0x0,0x20,0x44,0xfe,0x0,0xf8,0x8,0xc8,0x48,0xc8,0x8,0xf8,0x8,
++0x20,0x27,0x24,0xfc,0x24,0x27,0x24,0x74,0x57,0x54,0x54,0x57,0x74,0x54,0x4,0x4,0x4,0xbe,0x84,0x84,0x84,0xbc,0x84,0x0,0xbc,0x4,0x24,0xa8,0x10,0x28,0x2e,0xc4,
++0x0,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x22,0x22,0x44,0x48,0x90,0x20,0x8,0xfc,0x0,0x80,0x80,0x80,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0xe,0x4,
++0x0,0x3f,0x21,0x21,0x2f,0x22,0x22,0x24,0x2f,0x20,0x20,0x3f,0x40,0x40,0x80,0x0,0x8,0xfc,0x0,0x8,0xfc,0x40,0x40,0x50,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x0,0x3f,0x22,0x22,0x2f,0x22,0x3f,0x20,0x27,0x24,0x24,0x27,0x44,0x44,0x87,0x4,0x8,0xfc,0x20,0x28,0xfc,0x20,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x3f,0x20,0x20,0x2f,0x21,0x3e,0x20,0x2f,0x28,0x2f,0x28,0x4f,0x48,0x80,0x0,0x8,0xfc,0xa0,0x90,0xfc,0x40,0x3c,0x8,0xfc,0x88,0xf8,0x88,0xf8,0x88,0x80,0x80,
++0x0,0x3f,0x20,0x28,0x25,0x3f,0x22,0x2a,0x2a,0x2a,0x2f,0x22,0x42,0x44,0x88,0x10,0x8,0xfc,0x20,0xa0,0x20,0xbe,0x22,0xd4,0x90,0x90,0x90,0x90,0x28,0x28,0x44,0x82,
++0x0,0x3f,0x29,0x29,0x3f,0x29,0x2f,0x29,0x2f,0x29,0x29,0x3f,0x42,0x49,0x90,0x1,0x8,0xfc,0x0,0xc,0xf0,0x40,0x44,0x7e,0x48,0x48,0x48,0xc8,0x48,0x48,0x88,0x8,
++0x0,0x3f,0x20,0x2f,0x21,0x26,0x38,0x2f,0x20,0x2f,0x29,0x29,0x49,0x49,0x89,0xf,0x8,0xfc,0xa0,0xfc,0x40,0x30,0xe,0xfc,0x80,0xfc,0x24,0xe4,0x24,0xe4,0x24,0xfc,
++0x0,0x3f,0x22,0x24,0x2d,0x36,0x24,0x24,0x24,0x2f,0x28,0x28,0x48,0x41,0x86,0x18,0x8,0xfc,0x50,0xfc,0x90,0xfc,0x90,0x9e,0x80,0xf8,0x8,0x88,0x88,0x60,0x18,0x4,
++0x0,0x7f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7f,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x7f,0x40,0x40,0x47,0x44,0x44,0x44,0x44,0x44,0x47,0x44,0x40,0x40,0x7f,0x0,0x8,0xfc,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0xe0,0x20,0x0,0x4,0xfe,0x0,
++0x0,0x7f,0x48,0x4a,0x7f,0x50,0x54,0x7f,0x44,0x44,0x7f,0x44,0x44,0x45,0x7f,0x0,0x8,0xfc,0x40,0x40,0x50,0xf8,0x50,0x50,0x50,0x50,0x54,0x54,0x8c,0x0,0xfe,0x0,
++0x0,0x7f,0x40,0x4f,0x48,0x4f,0x40,0x7f,0x40,0x4f,0x48,0x48,0x43,0x4c,0x7f,0x0,0x8,0xfc,0x80,0xf8,0x88,0xf8,0x80,0xfc,0x8,0xfc,0x88,0x88,0x60,0x18,0xfe,0x0,
++0x0,0x7f,0x40,0x4f,0x48,0x4f,0x48,0x4f,0x59,0x69,0x4f,0x49,0x49,0x48,0x7f,0x0,0x8,0xfc,0x80,0xf8,0x8,0xf8,0x0,0xfc,0x24,0x24,0xfc,0x24,0x2c,0x4,0xfe,0x0,
++0x0,0x4,0x7f,0x48,0x49,0x48,0x5f,0x54,0x55,0x55,0x5d,0x49,0x49,0x48,0x7e,0x1,0x20,0x24,0xfe,0x20,0xfc,0x20,0xfe,0x4,0xfe,0x4,0x24,0x24,0x24,0x50,0x4c,0x84,
++0x8,0x8,0xa,0x7f,0x8,0x9,0xff,0x8,0xa,0x7f,0x8,0x8,0xf,0x78,0x20,0x0,0x40,0x40,0x40,0x40,0x40,0x60,0xd0,0x48,0x44,0x44,0x40,0x40,0x40,0x40,0x40,0x40,
++0x1,0x1,0x1,0x1,0x1,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x20,0x0,0x8,0xfc,0x0,0x8,0xfc,0x8,0x88,0xc8,0x88,0x88,0x88,0x88,0x8,0xf8,0x8,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x4,0x14,0x8,
++0x0,0x41,0x21,0x11,0x12,0xa,0xa,0x4,0x4,0xa,0x9,0x11,0x10,0x20,0x40,0x0,0x4,0x4,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x84,0x84,0x14,0x8,
++0x20,0x20,0x20,0x3f,0x2a,0x4a,0x4a,0x8a,0x12,0x14,0x14,0x24,0x48,0x12,0x1,0x0,0x4,0x4,0xa4,0xe4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0x84,0x84,0x14,0x8,
++0x0,0x7f,0x1,0x2,0x4,0xb,0x30,0xc0,0x3f,0x4,0x4,0x4,0x7,0x7c,0x20,0x0,0x4,0x84,0x4,0x24,0x24,0x24,0xa4,0x24,0xa4,0x24,0x24,0x4,0x84,0x4,0x14,0x8,
++0x8,0x9,0xff,0x14,0x12,0x21,0xde,0x0,0xff,0x10,0x3f,0x1,0x1,0x11,0xa,0x4,0x4,0x4,0x84,0x24,0x24,0xa4,0xa4,0x24,0xa4,0x24,0x24,0x4,0x4,0x4,0x14,0x8,
++0x4,0x4,0x24,0x24,0x3f,0x8,0x8,0xf,0x10,0x11,0x31,0x4a,0x4,0x8,0x10,0x60,0x4,0x4,0x84,0xa4,0xa4,0xa4,0x24,0xa4,0xa4,0x24,0x24,0x4,0x4,0x4,0x14,0x8,
++0x8,0x8,0x49,0x49,0x7f,0x0,0x7f,0x1,0x1,0x3f,0x21,0x20,0x21,0x26,0x38,0x0,0x4,0x4,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x84,0x4,0x14,0x8,
++0x8,0x9,0xff,0x8,0x9,0x7f,0x49,0x49,0x7f,0x59,0x1c,0x2a,0x29,0x49,0x88,0x8,0x4,0x4,0x84,0x24,0x24,0xa4,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x4,0x14,0x8,
++0x8,0x9,0xff,0x8,0x14,0x22,0xff,0x1,0x3d,0x25,0x25,0x25,0x3d,0x21,0x5,0x2,0x4,0x4,0x84,0x24,0x24,0xa4,0xe4,0x24,0x24,0x24,0x24,0x4,0x4,0x4,0x14,0x8,
++0x8,0x49,0x29,0x2a,0x8,0x16,0x21,0xc8,0x8,0x29,0x2a,0x48,0x16,0x21,0xc0,0x0,0x4,0x4,0x4,0x24,0x24,0x24,0xa4,0xa4,0x24,0x24,0x24,0x4,0x4,0x84,0x94,0x8,
++0x8,0x44,0x7f,0x40,0xa0,0x3b,0x2a,0x4a,0x6a,0x93,0x12,0x22,0x22,0x42,0x83,0x0,0x4,0x4,0xc4,0x54,0x94,0xd4,0x94,0x94,0x94,0x94,0x14,0x4,0x44,0x84,0x14,0x8,
++0x11,0x11,0xff,0x11,0x7b,0x4a,0x4a,0x7b,0x4a,0x4a,0x7b,0x4a,0x4a,0x4a,0x9c,0x8,0x4,0x44,0xe4,0x14,0xd4,0x54,0x54,0xd4,0x54,0x54,0xd4,0x44,0x44,0x44,0xd4,0x48,
++0x0,0xff,0xa,0xa,0x7f,0x4a,0x4a,0x7f,0x0,0x7f,0x0,0xff,0x15,0x24,0x44,0xc,0x84,0xc4,0x4,0x54,0xf4,0x54,0x54,0xd4,0x14,0xd4,0x14,0xe4,0x4,0xc4,0x54,0x8,
++0x0,0x7f,0x40,0x51,0x4a,0x7f,0x44,0x55,0x55,0x55,0x5f,0x44,0x44,0x48,0x91,0x22,0x22,0xf2,0x2,0x4a,0x4a,0x7a,0x9a,0xa,0x4a,0x4a,0x4a,0x4a,0xa2,0x92,0x16,0x2,
++0x4,0x25,0x3f,0x24,0x25,0x7f,0xa4,0x25,0x3f,0x24,0x25,0x3f,0x20,0x54,0x4a,0x8a,0x4,0x4,0x84,0x24,0x24,0xa4,0x24,0x24,0xa4,0x24,0x24,0x84,0x4,0x84,0x54,0x48,
++0x11,0x7f,0x11,0x12,0x3f,0x52,0x1f,0x12,0x13,0x10,0x3f,0x11,0xa,0x4,0x1b,0x60,0x4,0xc4,0x4,0x24,0xa4,0x24,0xa4,0x24,0xa4,0x24,0xa4,0x4,0x4,0x4,0x14,0x88,
++0x4,0x3f,0x28,0x24,0x3f,0x0,0x7f,0x44,0x7f,0x44,0x7f,0x0,0xff,0x11,0x11,0x21,0x4,0x84,0x84,0x94,0x94,0x14,0xd4,0x54,0xd4,0x54,0xd4,0x4,0xc4,0x4,0x14,0x8,
++0x0,0x7f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x14,0x8,
++0x0,0x7f,0x48,0x44,0x42,0x5f,0x42,0x41,0x5f,0x48,0x48,0x48,0x4f,0x40,0x40,0x40,0x4,0xfe,0x24,0x44,0x84,0xf4,0x4,0x24,0xf4,0x4,0x4,0x44,0xe4,0x4,0x14,0x8,
++0x8,0x8,0x8,0x10,0x10,0x30,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x8,0xb,0x10,0x10,0x30,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x11,0x10,0x10,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x8,0x8,0x9,0x11,0x11,0x31,0x51,0x91,0x11,0x11,0x11,0x11,0x12,0x12,0x14,0x18,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x8,0x8,0x8,0x10,0x17,0x30,0x50,0x90,0x10,0x10,0x11,0x11,0x11,0x12,0x14,0x18,0x80,0x80,0x80,0x84,0xfe,0x84,0x84,0x84,0x84,0x84,0x4,0x4,0x4,0x48,0x28,0x10,
++0x8,0x8,0xb,0x10,0x10,0x30,0x50,0x93,0x10,0x10,0x10,0x10,0x10,0x17,0x10,0x10,0x0,0x8,0xfc,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,
++0x9,0x9,0x9,0x12,0x12,0x37,0x58,0x90,0x10,0x10,0x11,0x12,0x12,0x12,0x11,0x10,0x0,0x8,0xfc,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x8,0x8,0x8,0x10,0x10,0x30,0x51,0x92,0x14,0x18,0x11,0x12,0x14,0x17,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0xa0,0x20,0x40,0x40,0x80,0x0,0x10,0x8,0xfc,0x4,0x0,
++0x8,0x8,0xf,0x10,0x10,0x32,0x52,0x92,0x12,0x14,0x10,0x11,0x11,0x12,0x14,0x18,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x4,0x4,0x4,0x28,0x10,
++0x8,0x8,0xb,0x12,0x12,0x32,0x52,0x92,0x12,0x12,0x12,0x12,0x13,0x12,0x13,0x10,0x0,0x8,0xfc,0x0,0x8,0x88,0x50,0x50,0x20,0x20,0x50,0x88,0x8,0x4,0xfe,0x0,
++0x8,0xa,0xa,0x12,0x12,0x32,0x53,0x92,0x12,0x12,0x12,0x12,0x12,0x13,0x12,0x10,0x20,0x20,0x20,0x20,0x22,0x24,0xb8,0x20,0x20,0x20,0x20,0x20,0x20,0xa2,0x22,0x1e,
++0x8,0x8,0xb,0x10,0x11,0x31,0x53,0x90,0x10,0x10,0x10,0x11,0x12,0x14,0x10,0x10,0x0,0x8,0xfc,0x10,0x10,0x14,0xfe,0x30,0x30,0x50,0x90,0x10,0x10,0x10,0x50,0x20,
++0x8,0x8,0xf,0x11,0x11,0x31,0x51,0x91,0x11,0x12,0x12,0x12,0x13,0x16,0x10,0x10,0x0,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x90,0x50,0x30,0x10,0xd2,0x12,0xe,0x0,
++0x9,0x9,0xa,0x13,0x14,0x38,0x50,0x90,0x1f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x8,0xfc,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x9,0x9,0x9,0x11,0x11,0x31,0x51,0x9f,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x0,0x8,0x10,0x20,0x40,0x80,0x4,0xfe,0x40,0x40,0x20,0x10,0x8,0x46,0x84,0x0,
++0x8,0x8,0x8,0x10,0x11,0x32,0x54,0x99,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,0xf0,0x10,0x10,0x50,0x20,0x4,0x4,0xfc,0x0,
++0x8,0x8,0x8,0x17,0x10,0x30,0x51,0x91,0x11,0x11,0x11,0x11,0x12,0x12,0x14,0x18,0x80,0x40,0x44,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x8,0x8,0x8,0x13,0x12,0x34,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x1f,0x10,0x10,0x80,0x40,0x40,0xfc,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,
++0x8,0xb,0x8,0x10,0x17,0x30,0x50,0x9f,0x11,0x11,0x12,0x11,0x10,0x10,0x11,0x16,0x10,0xf8,0x0,0x8,0xfc,0x80,0x84,0xfe,0x10,0x10,0x10,0xa0,0x40,0xa0,0x18,0x4,
++0x8,0x8,0x8,0x10,0x10,0x30,0x50,0x9f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x80,0x80,0x90,0xf8,0x80,0x80,0x84,0xfe,0x80,0xc0,0xa0,0x98,0x88,0x80,0x80,0x80,
++0x8,0x8,0x8,0x10,0x15,0x35,0x56,0x94,0x14,0x14,0x14,0x14,0x14,0x10,0x11,0x16,0x80,0x80,0x80,0x84,0xfe,0x8,0x88,0x88,0x88,0x50,0x50,0x20,0x50,0x90,0xe,0x4,
++0x8,0x8,0xa,0x12,0x13,0x34,0x58,0x90,0x1f,0x10,0x10,0x10,0x11,0x11,0x12,0x14,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x10,0xe,0x4,
++0x9,0x9,0x9,0x13,0x12,0x34,0x5b,0x92,0x12,0x12,0x12,0x13,0x12,0x10,0x10,0x10,0x0,0x0,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0xe4,0x24,0x44,0x28,0x10,
++0x9,0x9,0x9,0x12,0x15,0x38,0x50,0x90,0x11,0x12,0x1c,0x10,0x11,0x10,0x10,0x10,0x0,0x0,0xf8,0x8,0x10,0xa0,0x40,0xa0,0x10,0x8e,0x64,0x20,0x80,0x60,0x30,0x10,
++0x8,0x8,0x8,0x13,0x12,0x35,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x80,0x40,0x40,0xfc,0x4,0x8,0x0,0x10,0x30,0x40,0x80,0x0,0x4,0x4,0xfc,0x0,
++0x8,0xb,0xa,0x12,0x12,0x33,0x52,0x92,0x12,0x12,0x12,0x12,0x14,0x14,0x18,0x10,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x80,0x88,0x98,0xa0,0xc0,0x82,0x82,0x7e,0x0,
++0x14,0x14,0x14,0x24,0x3f,0x64,0xa4,0x24,0x24,0x24,0x24,0x24,0x28,0x28,0x32,0x21,0x0,0x0,0x4,0xbe,0xe4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xbc,0xa4,0x0,
++0x8,0x8,0x8,0x1f,0x10,0x30,0x57,0x90,0x10,0x13,0x12,0x12,0x12,0x12,0x13,0x12,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0xf,0x9,0x11,0x11,0x31,0x51,0x91,0x11,0x11,0x11,0x17,0x10,0x10,0x10,0x10,0x4,0xfe,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x7e,0x88,0x8,0x8,0x8,0x8,
++0x8,0x8,0x8,0x17,0x11,0x31,0x53,0x95,0x19,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x80,0x80,0x84,0xfe,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x28,0x10,
++0x8,0x8,0x8,0x1f,0x10,0x31,0x52,0x9c,0x13,0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0x44,0xfe,0xa0,0x10,0xee,0x4,0xf8,0x0,0xf8,0x8,0x8,0x90,0x50,0x20,
++0x8,0xb,0xa,0x12,0x12,0x33,0x50,0x92,0x12,0x12,0x12,0x12,0x12,0x14,0x18,0x10,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x48,0x48,0x48,0x48,0x48,0x4a,0x4a,0x4e,0x0,
++0x8,0xa,0xa,0x13,0x14,0x38,0x50,0x9f,0x10,0x10,0x11,0x12,0x14,0x18,0x10,0x10,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0xc0,0xe0,0x50,0x48,0x4e,0x44,0x40,0x40,
++0x8,0x9,0x9,0x12,0x14,0x3b,0x52,0x92,0x13,0x12,0x12,0x13,0x12,0x12,0x12,0x12,0x40,0x40,0x20,0x10,0xe,0xf4,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x8,0x8,0x8,0x14,0x12,0x32,0x50,0x91,0x12,0x14,0x10,0x11,0x11,0x12,0x14,0x18,0xa0,0xa0,0xa0,0xa4,0xac,0xb0,0xa0,0xb0,0xac,0xa4,0xa0,0x20,0x22,0x22,0x1e,0x0,
++0x8,0x8,0xf,0x11,0x10,0x30,0x50,0x93,0x1d,0x11,0x11,0x11,0x11,0x11,0x12,0x14,0x40,0x28,0xfc,0x10,0xa0,0x40,0xb0,0xe,0x14,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x8,0x8,0x8,0x17,0x11,0x31,0x52,0x95,0x11,0x10,0x10,0x10,0x10,0x11,0x12,0x1c,0x80,0x40,0x48,0xfc,0x20,0x10,0xc,0x14,0x10,0xa0,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x8,0x8,0x8,0x17,0x14,0x38,0x51,0x91,0x13,0x15,0x19,0x11,0x11,0x11,0x11,0x11,0x40,0x40,0x40,0xfe,0x82,0x84,0x40,0x48,0x30,0x20,0x10,0x10,0x8,0x4e,0x84,0x0,
++0x8,0x8,0x9,0x12,0x17,0x32,0x52,0x93,0x14,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x80,0x80,0x10,0x8,0xfc,0x44,0x50,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x8,0x8,0xf,0x10,0x17,0x31,0x5f,0x91,0x12,0x13,0x15,0x18,0x10,0x10,0x10,0x10,0x80,0x88,0xfc,0x80,0xf8,0x0,0xfe,0x10,0x14,0xfe,0x10,0x90,0x90,0x10,0x50,0x20,
++0x8,0xf,0x8,0x14,0x12,0x30,0x57,0x94,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x18,0x8,0xfc,0xa0,0xa4,0xa8,0xa0,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x8,0xf,0x10,0x10,0x37,0x54,0x94,0x16,0x15,0x14,0x14,0x14,0x14,0x14,0x15,0x0,0x4,0xfe,0x0,0x4,0xbe,0xa4,0xa4,0xb4,0xac,0xa4,0xa4,0xa4,0xa4,0xa4,0xac,
++0x8,0x8,0x8,0x10,0x17,0x30,0x54,0x92,0x12,0x10,0x11,0x12,0x14,0x10,0x11,0x10,0x40,0x50,0x48,0x48,0xfe,0x40,0x48,0x50,0x60,0xd0,0x50,0x48,0x4e,0x44,0x40,0x80,
++0x8,0x8,0xf,0x14,0x14,0x37,0x54,0x94,0x17,0x14,0x10,0x17,0x10,0x10,0x1f,0x10,0x0,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x40,0xfc,0x40,0x44,0xfe,0x0,
++0x8,0xb,0xa,0x12,0x12,0x33,0x50,0x97,0x10,0x10,0x1f,0x10,0x10,0x11,0x12,0x1c,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0xfc,0x40,0x44,0xfe,0xa0,0xa0,0x10,0xe,0x4,
++0x8,0x8,0xb,0x12,0x13,0x32,0x53,0x90,0x1f,0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x40,0x48,0xfc,0x48,0xf8,0x48,0xf8,0x0,0xfe,0x0,0xf8,0x8,0x8,0x88,0x50,0x20,
++0x8,0xb,0x8,0x10,0x10,0x37,0x54,0x94,0x17,0x14,0x14,0x17,0x14,0x14,0x14,0x14,0x0,0xf8,0x10,0xa0,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x54,0x8,
++0x8,0x8,0x9,0x12,0x17,0x31,0x51,0x91,0x12,0x14,0x1f,0x10,0x10,0x10,0x11,0x16,0x80,0x80,0x10,0x8,0xfc,0x4,0x0,0xf8,0x40,0x44,0xfe,0x40,0xa0,0x90,0xe,0x4,
++0x8,0x8,0xf,0x10,0x13,0x30,0x5f,0x91,0x12,0x15,0x18,0x10,0x17,0x10,0x10,0x10,0x40,0x48,0xfc,0x40,0xf8,0x80,0xfe,0x10,0x48,0xfe,0x44,0x40,0xfc,0x40,0x40,0x40,
++0x8,0x8,0xf,0x10,0x13,0x30,0x5f,0x90,0x13,0x12,0x13,0x12,0x13,0x12,0x12,0x12,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x28,0x10,
++0x9,0x9,0xf,0x11,0x11,0x30,0x5f,0x91,0x11,0x12,0x13,0x16,0x1a,0x12,0x13,0x12,0x10,0x10,0xfc,0x10,0x90,0x84,0xfe,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0x8,0x17,0x10,0x30,0x50,0x97,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0xa0,0xa0,0xa4,0xbe,0xa0,0xa0,0xa8,0xbc,0xa0,0xa0,0xa4,0xbe,0xa0,0xa0,0xa0,0xa0,
++0x8,0x8,0x8,0x10,0x13,0x32,0x53,0x92,0x13,0x12,0x10,0x1f,0x10,0x10,0x10,0x10,0x40,0x48,0x7c,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x11,0x11,0x11,0x29,0x2a,0x6c,0xa8,0x29,0x2e,0x28,0x2f,0x28,0x20,0x20,0x21,0x26,0x0,0x8,0xfc,0x10,0xa0,0x40,0xb0,0x4e,0x50,0x48,0xfc,0x40,0xa0,0x90,0xe,0x4,
++0x8,0xf,0xc,0x14,0x17,0x34,0x54,0x97,0x14,0x10,0x1f,0x10,0x11,0x12,0x1c,0x10,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x40,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x8,0xb,0x8,0x10,0x17,0x31,0x52,0x94,0x10,0x1f,0x11,0x12,0x11,0x10,0x11,0x16,0x18,0xe0,0x40,0x48,0xfc,0x50,0x48,0x46,0x80,0xfe,0x10,0x10,0xa0,0x40,0xb0,0x8,
++0x8,0x9,0xb,0x12,0x12,0x33,0x52,0x92,0x13,0x10,0x11,0x1f,0x10,0x10,0x10,0x10,0x80,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x8,0xf,0xc,0x14,0x17,0x34,0x54,0x95,0x14,0x15,0x15,0x15,0x15,0x14,0x14,0x18,0x4,0xfe,0x44,0x54,0xfc,0x44,0x44,0xf4,0x4,0xf4,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x8,0x8,0xb,0x12,0x14,0x33,0x52,0x92,0x13,0x12,0x13,0x12,0x12,0x12,0x13,0x12,0x80,0x40,0xfe,0x2,0x4,0xf8,0x8,0x8,0xf8,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0x8,0x17,0x14,0x39,0x52,0x94,0x10,0x13,0x10,0x10,0x10,0x10,0x1f,0x10,0x80,0x40,0x40,0xfe,0x2,0x14,0x8,0x4,0x10,0xf8,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x8,0xb,0xa,0x12,0x13,0x32,0x52,0x93,0x12,0x12,0x13,0x13,0x15,0x15,0x19,0x11,0x4,0xfe,0x4,0x4,0xfc,0x24,0x20,0xfe,0x20,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x8,0xf,0x10,0x11,0x3f,0x51,0x90,0x13,0x12,0x12,0x12,0x12,0x10,0x11,0x16,0x40,0x48,0xfc,0x40,0x54,0xfe,0x10,0x8,0xfc,0x8,0x48,0x48,0x48,0xb0,0xc,0x4,
++0x8,0xf,0xc,0x15,0x15,0x35,0x55,0x95,0x14,0x17,0x14,0x14,0x14,0x14,0x17,0x10,0x4,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x40,0xfe,0x48,0x90,0x70,0x88,0xfe,0x0,
++0xa,0xa,0xb,0x12,0x12,0x33,0x56,0x90,0x13,0x12,0x12,0x13,0x12,0x12,0x13,0x12,0x20,0x24,0xac,0x30,0xa2,0x22,0x5e,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x8,0xb,0xa,0x13,0x12,0x33,0x51,0x91,0x13,0x14,0x1a,0x12,0x12,0x13,0x10,0x10,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0x4,0xfe,0x44,0x44,0xa4,0x4,0xe4,0x14,0x8,
++0x8,0xb,0xa,0x12,0x13,0x32,0x52,0x93,0x10,0x1f,0x12,0x12,0x12,0x12,0x13,0x12,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x4,0xfe,0x88,0x50,0x20,0x90,0xe,0x4,
++0x9,0x9,0x9,0x12,0x13,0x34,0x59,0x92,0x14,0x11,0x10,0x15,0x15,0x19,0x10,0x10,0x0,0x4,0xfe,0xa4,0xa4,0xf4,0x2c,0x44,0x94,0x8,0x40,0x24,0x22,0xa,0xf8,0x0,
++0x8,0xa,0x9,0x10,0x17,0x30,0x51,0x92,0x10,0x1f,0x11,0x12,0x11,0x10,0x11,0x16,0x40,0x48,0x50,0x40,0xfc,0xe0,0x50,0x4c,0x80,0xfe,0x10,0x10,0x20,0xc0,0x30,0x8,
++0x10,0x14,0x12,0x20,0x2f,0x68,0xb7,0x24,0x24,0x24,0x27,0x25,0x21,0x21,0x22,0x2c,0x80,0x90,0xa0,0x80,0xfc,0x4,0xf8,0x10,0x10,0x10,0xf0,0x50,0x40,0x44,0x44,0x3c,
++0x8,0x8,0xb,0x12,0x14,0x31,0x51,0x91,0x11,0x11,0x11,0x1f,0x10,0x10,0x11,0x16,0x80,0x40,0xfe,0x2,0x34,0xc0,0x8,0xfc,0x10,0x10,0x14,0xfe,0x0,0x90,0xc,0x4,
++0x10,0x10,0x10,0x2f,0x21,0x71,0xaa,0x2a,0x24,0x24,0x2a,0x29,0x31,0x20,0x20,0x20,0x20,0x30,0x28,0x7e,0x48,0xc8,0x7e,0x48,0x48,0x7e,0x48,0x48,0x48,0x7e,0x40,0x40,
++0xa,0xa,0xb,0x14,0x1a,0x35,0x53,0x92,0x14,0x18,0x17,0x11,0x12,0x14,0x11,0x10,0x0,0x20,0xbc,0xa4,0xa8,0x10,0x10,0xe8,0x6,0x0,0xfc,0x50,0x4c,0x44,0x40,0x80,
++0x8,0xf,0x8,0x13,0x10,0x33,0x52,0x93,0x11,0x1f,0x10,0x13,0x12,0x12,0x13,0x12,0x48,0xfc,0x40,0xf8,0x0,0xf8,0x8,0xf8,0x10,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,
++0x15,0x15,0x1f,0x25,0x25,0x68,0xaf,0x28,0x30,0x2e,0x2a,0x2a,0x2e,0x20,0x22,0x21,0x20,0x20,0xa0,0x24,0x7e,0x84,0xc4,0xc4,0xa8,0xa8,0xa8,0x90,0xa8,0xa8,0xc6,0x4,
++0x11,0x1f,0x1a,0x2a,0x2f,0x62,0xa6,0x2a,0x33,0x20,0x27,0x24,0x27,0x24,0x27,0x24,0x4,0xbe,0x28,0x28,0xbe,0x8,0x18,0xaa,0x4e,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x9,0x9,0x9,0x12,0x16,0x3b,0x52,0x92,0x13,0x12,0x12,0x13,0x12,0x15,0x14,0x18,0x40,0x24,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,0x24,0x92,0x2,
++0x14,0x12,0x12,0x3f,0x20,0x6f,0xa8,0x28,0x28,0x2f,0x22,0x2b,0x2a,0x32,0x26,0x20,0x10,0x10,0x98,0xd4,0x10,0xfe,0x90,0x90,0x98,0x98,0x28,0x28,0xa8,0xca,0x4a,0x86,
++0x8,0xf,0x9,0x10,0x1f,0x30,0x57,0x94,0x17,0x14,0x17,0x10,0x17,0x10,0x1f,0x10,0x40,0xfc,0x10,0xa4,0xfe,0x0,0xfc,0x44,0xfc,0x44,0xfc,0x40,0xfc,0x40,0xfe,0x0,
++0x8,0xf,0xc,0x14,0x17,0x30,0x5f,0x90,0x13,0x12,0x13,0x10,0x11,0x13,0x1d,0x11,0x4,0xfe,0xa4,0xa4,0xfc,0x0,0xfe,0x8,0xfc,0x8,0xf8,0xc4,0x28,0x10,0x8e,0x4,
++0x9,0x9,0xa,0x17,0x14,0x35,0x57,0x94,0x15,0x14,0x15,0x14,0x15,0x15,0x19,0x11,0x0,0xf8,0x10,0xfe,0x88,0x24,0xfe,0x0,0xfc,0x0,0xfc,0x0,0xfc,0x4,0xfc,0x4,
++0x1,0x1,0x2,0x4,0x8,0x10,0x20,0xc0,0x1f,0x1,0x1,0x1,0x1,0x1,0x7f,0x0,0x0,0x0,0x80,0x40,0x20,0x10,0xe,0x24,0xf0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,
++0x1,0x1,0x2,0x4,0x9,0x31,0xc1,0x3d,0x5,0x9,0x9,0x11,0x21,0x41,0x5,0x2,0x0,0x0,0x80,0x40,0x30,0xe,0x4,0x90,0x60,0x40,0x20,0x10,0xe,0x4,0x0,0x0,
++0x1,0x1,0x2,0x4,0x8,0x30,0xcf,0x0,0x0,0x7f,0x1,0x9,0x19,0x21,0x45,0x2,0x0,0x0,0x80,0x40,0x30,0x4e,0xe4,0x0,0x8,0xfc,0x0,0x20,0x18,0xc,0x4,0x0,
++0x1,0x1,0x2,0x4,0x8,0x10,0x2f,0xc0,0x12,0x9,0x9,0x9,0x8,0x0,0xff,0x0,0x0,0x0,0x80,0x40,0x20,0x50,0xee,0x4,0x10,0x10,0x20,0x20,0x40,0x84,0xfe,0x0,
++0x10,0x11,0x11,0x29,0x29,0x45,0x95,0x11,0x11,0x29,0x29,0x45,0x45,0x81,0xf,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xfe,0x0,
++0x1,0x1,0x2,0xc,0x37,0xc0,0x3b,0x2a,0x3b,0x0,0x3f,0x24,0x3f,0x24,0x24,0x20,0x0,0x0,0x80,0x60,0xd8,0x6,0xb8,0xa8,0xb8,0x0,0xf8,0x48,0xf8,0x48,0x48,0x18,
++0x6,0x1,0x2,0xc,0x31,0xc1,0x1,0x3d,0x5,0x9,0x9,0x11,0x21,0x41,0x5,0x2,0x0,0x0,0x80,0x60,0x18,0x6,0x0,0x90,0x60,0x40,0x20,0x10,0xe,0x4,0x0,0x0,
++0x6,0x1,0x2,0xc,0x31,0xc1,0x11,0x9,0x1,0x7f,0x3,0x5,0x9,0x11,0x61,0x1,0x0,0x0,0x80,0x60,0x18,0x6,0x10,0x20,0x8,0xfc,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x4,0x4,0x8,0x8,0x10,0x20,0x5f,0x88,0x8,0x1f,0x0,0x0,0x0,0x2,0x1,0x0,0x40,0x40,0x20,0x20,0x10,0x58,0xee,0x4,0x20,0xf0,0x20,0x20,0x20,0x20,0x40,0x80,
++0x0,0x3e,0x22,0x22,0x3e,0x20,0x22,0x1e,0x4,0x3f,0x4,0x4,0xff,0x4,0x18,0x20,0x8,0xfc,0x88,0x88,0xf8,0x80,0x84,0x7c,0x40,0xf8,0x40,0x44,0xfe,0x40,0x30,0x8,
++0x22,0x11,0x7f,0x44,0x9f,0x4,0xff,0x1,0x1f,0x11,0x1f,0x11,0x1f,0x4,0x18,0x20,0x8,0x10,0xfe,0x42,0xf4,0x40,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x40,0x30,0x8,
++0x0,0x44,0x28,0xff,0x10,0x20,0x7d,0x45,0x45,0x7d,0x45,0x7c,0x44,0x47,0x7c,0x44,0x10,0x18,0x14,0xfe,0x10,0x10,0xd4,0x54,0x54,0x54,0xd4,0x18,0xd2,0x2a,0x46,0x82,
++0x44,0x25,0x29,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7d,0x12,0xfe,0x12,0x14,0x18,0x10,0x4,0xfe,0x4,0x4,0xfc,0x48,0xfc,0x48,0x48,0xfe,0xa4,0xa8,0x90,0x88,0xc6,0x80,
++0x4,0xff,0x1,0x17,0x54,0x5f,0x54,0x57,0x5c,0xe7,0x14,0x27,0x4c,0x13,0xc,0x70,0x40,0xfe,0x0,0xdc,0x54,0xd4,0x5c,0xd0,0x52,0xce,0x10,0xc8,0x44,0x80,0x60,0x1c,
++0x10,0x10,0x1f,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x10,0x10,0x1f,0x22,0x42,0xbf,0x2,0x3f,0x22,0x3f,0x22,0x3f,0x22,0x22,0x22,0x0,0x0,0x4,0xfe,0x84,0x44,0xf4,0x4,0xe4,0x24,0xe4,0x24,0xe4,0x24,0x64,0x34,0x8,
++0x10,0x10,0x1f,0x24,0x42,0xbf,0x0,0x1f,0x0,0x1f,0x0,0x1f,0x10,0x10,0x1f,0x0,0x0,0x4,0xfe,0x4,0x44,0xe4,0x4,0xc4,0x4,0xc4,0x4,0xc4,0x44,0x44,0xd4,0x8,
++0x10,0x10,0x1f,0x20,0x7f,0x80,0x1f,0x10,0x1f,0x0,0x3f,0x22,0x3f,0x22,0x3f,0x0,0x0,0x4,0xfe,0x44,0xe4,0x4,0xc4,0x44,0xc4,0x4,0xe4,0x24,0xe4,0x24,0xf4,0x8,
++0x2,0x4,0x3f,0x20,0x24,0x22,0x20,0x3f,0x0,0xf,0x8,0x8,0x8,0x10,0x20,0xc0,0x0,0x20,0xf0,0x20,0x20,0xa0,0x48,0xfc,0x8,0xa8,0x90,0x80,0x80,0x82,0x82,0x7e,
++0x0,0x3f,0x20,0x20,0x2f,0x22,0x22,0x27,0x24,0x2c,0x32,0x21,0x22,0x44,0x48,0x80,0x10,0xf8,0x10,0x90,0xd0,0x10,0x10,0xd0,0x50,0x50,0x90,0x10,0x12,0x12,0xa,0x4,
++0x0,0x3c,0x24,0x24,0x27,0x20,0x20,0x3f,0x24,0x4,0x4,0x4,0x8,0x10,0x20,0x40,0x8,0x7c,0x48,0x48,0xc8,0x8,0x8,0xf8,0x48,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x0,0x0,0x0,0x2,0x1,0x1,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x2,0x1,0xff,0x8,0x12,0x22,0x44,0x8,0x1f,0x4,0x4,0x4,0x4,0x8,0x10,0x60,0x0,0x4,0xfe,0x20,0x18,0xc,0x44,0x20,0xf0,0x90,0x80,0x80,0x84,0x84,0x7c,0x0,
++0x1,0xff,0x0,0x1f,0x10,0x1f,0x40,0x7f,0x40,0x9f,0x1,0x1,0x3f,0x1,0x1,0x0,0x0,0xfe,0x0,0xf0,0x10,0xf0,0x0,0xfe,0x12,0xe4,0x0,0xf8,0x0,0x4,0x4,0xfc,
++0x2,0x1,0xff,0x8,0x12,0x22,0x44,0x1f,0x2,0x6,0xd,0x14,0x24,0xc5,0x6,0x4,0x0,0x4,0xfe,0x20,0x18,0x4c,0x24,0xf0,0x0,0x18,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x1,0xff,0x0,0x1f,0x2,0x1,0x7f,0x4,0x8,0x32,0x1,0x2,0xc,0x15,0x66,0x4,0x0,0xfe,0x0,0xf0,0x40,0x80,0xfc,0x84,0x88,0x80,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x1,0xff,0x8,0x8,0x7e,0x8,0xe,0x78,0x9,0x1a,0x1,0x2,0xc,0x15,0x66,0x4,0x0,0xfe,0x40,0x48,0xfc,0x48,0xc8,0xa8,0xa,0x6,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x1,0xff,0x4,0x14,0x24,0x45,0x1,0x3f,0x22,0x24,0x29,0x22,0x24,0x28,0x20,0x20,0x0,0xfe,0x40,0x50,0x4c,0x44,0x0,0xf8,0x88,0x68,0x28,0x88,0x68,0x28,0x28,0x10,
++0x1,0xff,0x2,0x1c,0x10,0x10,0x1c,0x10,0x10,0x1f,0x5,0x8,0x18,0x2a,0xcc,0x8,0x0,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x8,0x90,0x60,0x30,0xe,0x4,
++0x1,0xff,0x0,0x3f,0x24,0x27,0x24,0x3f,0x0,0x3f,0x0,0xff,0x9,0x11,0x21,0x3,0x0,0xfe,0x8,0xfc,0x48,0xc8,0x48,0xf8,0x0,0xf8,0x0,0xfe,0x20,0x18,0x8,0x0,
++0x1,0xff,0x20,0x3f,0x0,0x1f,0x10,0x1f,0x79,0x49,0x7f,0x4a,0x7a,0x49,0x4e,0x98,0x0,0xfe,0x0,0xf8,0x0,0xf0,0x10,0xf0,0x38,0x28,0xe8,0xb8,0xa8,0x2a,0xea,0x46,
++0x1,0xff,0x20,0x3f,0x0,0x1f,0x10,0x1f,0x71,0x57,0x75,0x57,0x71,0x51,0x57,0xb0,0x0,0xfe,0x0,0xf8,0x0,0xf0,0x10,0xf0,0x1c,0xd4,0x54,0xdc,0x14,0x54,0xd4,0x22,
++0x1,0xff,0x20,0x3f,0x0,0x1f,0x10,0x1f,0x7a,0x4f,0x79,0x4f,0x79,0x4f,0x49,0x99,0x0,0xfe,0x0,0xf8,0x0,0xf0,0x10,0xf0,0xb8,0xe8,0x28,0xe8,0x38,0xea,0x2a,0x46,
++0x0,0x40,0x20,0x10,0x10,0x0,0x0,0x10,0x20,0x20,0xe0,0x20,0x20,0x20,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x4f,0x22,0x12,0x12,0x3,0x2,0x12,0x22,0x22,0xe7,0x20,0x20,0x20,0x2f,0x0,0x8,0xfc,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x20,0x20,0x44,0xfe,0x0,
++0x0,0x4f,0x22,0x12,0x13,0x2,0x14,0x14,0x26,0x29,0xe0,0x21,0x22,0x24,0x28,0x0,0x44,0xe4,0x4,0x14,0xd4,0x54,0x54,0x54,0x54,0x94,0x94,0x14,0x4,0x4,0x14,0x8,
++0x0,0x42,0x22,0x13,0x12,0x4,0x0,0x17,0x21,0x21,0xe1,0x21,0x22,0x22,0x24,0x8,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x2,0x42,0x22,0x22,0x1f,0x2,0x26,0x27,0x2a,0x4a,0xd2,0x42,0x42,0x42,0x42,0x2,0x0,0x28,0x28,0x28,0xc4,0x44,0x92,0x10,0x90,0xa0,0x20,0x48,0x44,0xfe,0x2,0x0,
++0x0,0x0,0x0,0x0,0x40,0x7f,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x2,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x40,0x80,0x3f,0x6,0x9,0x1a,0x74,0xb,0x16,0x64,0x8,0x10,0x62,0x1,0x0,0xfe,0x2,0x24,0xf0,0x0,0x8,0x90,0xe0,0xa0,0xa0,0x90,0x8e,0x84,0x80,0x0,
++0x40,0x7f,0x40,0x80,0x1f,0x10,0x1f,0x10,0x1f,0x12,0x1,0xff,0x0,0x8,0x10,0x20,0x0,0xfe,0x2,0x14,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x4,0xfe,0x0,0x20,0x18,0x8,
++0x0,0x40,0x30,0x10,0x0,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x14,0x18,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x47,0x30,0x10,0x0,0x0,0xf0,0x17,0x10,0x10,0x10,0x10,0x14,0x18,0x10,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x40,0x37,0x10,0x0,0x0,0xf0,0x10,0x10,0x10,0x10,0x12,0x14,0x1f,0x10,0x0,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,0x0,
++0x0,0x40,0x20,0x20,0x4,0x4,0xe4,0x24,0x24,0x24,0x24,0x24,0x2c,0x37,0x20,0x0,0x40,0x40,0x40,0x40,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xfc,0x4,0x0,
++0x0,0x47,0x24,0x24,0x5,0x4,0xe4,0x24,0x24,0x24,0x25,0x26,0x2c,0x34,0x27,0x0,0x8,0xfc,0x0,0x4,0x4,0x88,0x50,0x20,0x50,0x88,0xc,0x4,0x0,0x4,0xfe,0x0,
++0x0,0x43,0x32,0x12,0x2,0x3,0xf2,0x12,0x12,0x13,0x12,0x12,0x16,0x1a,0x13,0x0,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x40,0x20,0x20,0x7,0x4,0xe4,0x24,0x24,0x24,0x25,0x25,0x2e,0x34,0x24,0x4,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0xa4,0xa4,0x14,0x14,0xc,0x4,0x14,0x8,
++0x0,0x40,0x30,0x10,0x7,0x0,0xf0,0x10,0x13,0x12,0x12,0x12,0x16,0x1a,0x13,0x2,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x37,0x10,0x0,0x3,0xf2,0x12,0x12,0x12,0x13,0x10,0x14,0x18,0x10,0x0,0x0,0x4,0xfe,0x8,0x48,0xe8,0x48,0x48,0x48,0x48,0xc8,0x8,0x8,0x8,0x28,0x10,
++0x0,0x40,0x27,0x24,0x4,0x4,0xe7,0x24,0x24,0x24,0x24,0x24,0x2d,0x36,0x24,0x0,0x10,0x78,0xc0,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x20,0xa0,0x12,0x92,0x4a,0x6,
++0x0,0x47,0x30,0x10,0x0,0x1,0xf1,0x12,0x14,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x4,0xfe,0x84,0x84,0x84,0x4,0x14,0x8,0x0,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x40,0x22,0x22,0x2,0x2,0xe2,0x23,0x20,0x24,0x24,0x24,0x2c,0x34,0x27,0x0,0x40,0x40,0x48,0x48,0x48,0x48,0x48,0xf8,0x40,0x44,0x44,0x44,0x44,0x44,0xfc,0x4,
++0x0,0x40,0x30,0x11,0x2,0x7,0xf0,0x10,0x13,0x12,0x12,0x12,0x16,0x1a,0x13,0x2,0x40,0x40,0x80,0x8,0x4,0xfe,0x2,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x43,0x32,0x12,0x3,0x2,0xf2,0x12,0x12,0x12,0x12,0x13,0x16,0x1a,0x13,0x0,0x8,0xfc,0x0,0x8,0xfc,0x20,0x20,0xf8,0x20,0x20,0x28,0xfc,0x0,0x4,0xfe,0x0,
++0x0,0x40,0x37,0x10,0x0,0x3,0xf0,0x10,0x1f,0x10,0x10,0x15,0x19,0x12,0x4,0x0,0x40,0x48,0xfc,0x40,0x50,0xf8,0x40,0x44,0xfe,0xc0,0xe0,0x50,0x48,0x4e,0x44,0x40,
++0x0,0x40,0x33,0x10,0x0,0x0,0xf7,0x10,0x10,0x10,0x13,0x10,0x14,0x18,0x17,0x0,0x40,0x50,0xf8,0x40,0x40,0x48,0xfc,0x0,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x40,0x30,0x1f,0x0,0x0,0xf7,0x10,0x10,0x13,0x12,0x12,0x16,0x1a,0x13,0x2,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x30,0x17,0x1,0x1,0xf1,0x12,0x12,0x14,0x19,0x10,0x14,0x18,0x11,0x2,0x80,0x80,0x84,0xfe,0x0,0x20,0x20,0xa4,0xac,0xb0,0x20,0x50,0x50,0x88,0xe,0x4,
++0x0,0x42,0x32,0x13,0x4,0x0,0xf0,0x1f,0x11,0x11,0x11,0x15,0x1a,0x12,0x4,0x8,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x0,0x40,0x33,0x12,0x2,0x3,0xf2,0x12,0x12,0x12,0x12,0x16,0x1a,0x12,0x4,0x8,0x8,0x1c,0xe0,0x0,0x4,0xfe,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x0,0x40,0x30,0x11,0x2,0xc,0xf3,0x10,0x10,0x10,0x13,0x10,0x14,0x18,0x17,0x0,0x40,0x40,0xa0,0x10,0xe,0x4,0xf8,0x40,0x40,0x50,0xf8,0x40,0x40,0x48,0xfc,0x0,
++0x1,0x41,0x31,0x12,0x4,0xb,0xf0,0x10,0x1f,0x10,0x10,0x13,0x14,0x18,0x11,0x0,0x0,0x0,0xf0,0x20,0x48,0xfc,0x48,0x48,0xfe,0x48,0x48,0xf8,0x48,0x40,0x40,0x80,
++0x0,0x47,0x34,0x18,0x7,0x1,0xf1,0x12,0x17,0x10,0x10,0x1f,0x10,0x14,0x18,0x0,0x0,0xfc,0x84,0x88,0xfc,0x0,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x0,0x40,0x37,0x10,0x0,0x4,0xf2,0x12,0x10,0x11,0x16,0x10,0x14,0x18,0x12,0x1,0x0,0x4,0xbe,0x84,0x84,0xa4,0x94,0x94,0x84,0x8c,0xb4,0x84,0x84,0x84,0x94,0x8,
++0x0,0x42,0x31,0x11,0x0,0x3,0xf2,0x12,0x13,0x12,0x12,0x13,0x16,0x1a,0x12,0x2,0x40,0x48,0x58,0x60,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x42,0x32,0x13,0x4,0x8,0xf7,0x10,0x10,0x13,0x12,0x12,0x16,0x1a,0x13,0x2,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x45,0x32,0x15,0x9,0x1,0xf1,0x13,0x15,0x19,0x11,0x11,0x15,0x19,0x15,0x2,0x80,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x7c,0x10,0x10,0x10,0x10,0x14,0xfe,0x0,
++0x0,0x40,0x31,0x12,0x7,0x1,0xf1,0x11,0x12,0x10,0x1f,0x10,0x14,0x18,0x11,0x6,0x80,0x80,0x10,0x8,0xfc,0x4,0x10,0xf8,0x40,0x44,0xfe,0x40,0xa0,0x90,0xe,0x4,
++0x0,0x5f,0x24,0x24,0x7,0x4,0xe4,0x27,0x24,0x24,0x24,0x2f,0x28,0x30,0x20,0x0,0x4,0xfe,0x80,0x80,0xbe,0x82,0xa2,0x94,0x94,0x94,0x88,0xc8,0x94,0x94,0xa2,0xc0,
++0x0,0x4f,0x20,0x21,0x3,0x4,0xe8,0x25,0x22,0x26,0x29,0x21,0x2a,0x34,0x21,0x0,0x4,0xfe,0x80,0x0,0x4,0x8c,0xd0,0x60,0x60,0x50,0xd0,0x48,0x4e,0x44,0x40,0x80,
++0x0,0x43,0x30,0x10,0x7,0x1,0xf2,0x14,0x10,0x1f,0x11,0x11,0x14,0x18,0x11,0x6,0x3c,0xc0,0x40,0x48,0xfc,0x50,0x4e,0x44,0x80,0xfe,0x10,0x10,0xa0,0x60,0x98,0x4,
++0x0,0x41,0x36,0x14,0x4,0x7,0xf4,0x14,0x17,0x14,0x10,0x10,0x15,0x19,0x12,0xc,0x40,0x44,0x5e,0x44,0x44,0x5c,0x44,0x44,0xfc,0x44,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x0,0x40,0x20,0x21,0x2,0x4,0xe8,0x23,0x20,0x20,0x21,0x2d,0x35,0x25,0x9,0x0,0x40,0x40,0xa0,0x10,0x88,0x46,0x4,0xf0,0x10,0x20,0x0,0x48,0x24,0x4,0x10,0xf0,
++0x0,0x40,0x30,0x11,0x2,0x4,0xf0,0x13,0x12,0x12,0x13,0x12,0x16,0x1a,0x13,0x2,0x80,0x80,0xfc,0x8,0x10,0x20,0x84,0x3e,0x4,0x4,0xbc,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x40,0x37,0x11,0x1,0x1,0xf2,0x14,0x10,0x1f,0x10,0x10,0x14,0x18,0x10,0x0,0x80,0x48,0xfc,0x10,0x10,0x10,0xa8,0x44,0x40,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x1,0x41,0x37,0x11,0x1,0x1,0xf1,0x11,0x11,0x1f,0x12,0x12,0x17,0x1a,0x13,0x0,0x10,0x10,0xfc,0x10,0xf0,0x10,0xf0,0x10,0x14,0xfe,0x0,0x90,0x8,0x0,0xfc,0x0,
++0x0,0x40,0x2f,0x20,0x7,0x4,0xe5,0x24,0x24,0x27,0x21,0x29,0x32,0x24,0x8,0x0,0x40,0x44,0xfe,0x40,0xfc,0x44,0x54,0xe4,0x44,0xfc,0x60,0x50,0x48,0x4e,0x44,0x40,
++0x0,0x40,0x20,0x27,0x4,0x4,0xe7,0x24,0x24,0x24,0x25,0x2d,0x37,0x29,0x9,0x10,0x48,0x7c,0x40,0xfe,0x42,0x7c,0xc0,0x44,0x7c,0x0,0xfc,0x0,0xfe,0x0,0xfc,0x0,
++0x0,0x43,0x22,0x23,0x2,0x3,0xe1,0x23,0x24,0x28,0x22,0x23,0x2a,0x33,0x20,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x44,0x44,0xb4,0x14,0x4,0xf4,0x14,0x8,
++0x0,0x47,0x24,0x24,0x7,0x0,0xe3,0x20,0x2f,0x21,0x21,0x24,0x28,0x30,0x20,0x0,0x4,0xbe,0xa4,0xa4,0xbc,0x0,0xf8,0x0,0xfe,0x0,0xf8,0x8,0x8,0x88,0x50,0x20,
++0x0,0x40,0x21,0x22,0x4,0xb,0xf0,0x27,0x24,0x27,0x24,0x27,0x2c,0x34,0x24,0x5,0x80,0x80,0x40,0x20,0x10,0xee,0x4,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0x88,0xa8,0x90,
++0x0,0x47,0x20,0x22,0x1,0xf,0xe0,0x20,0x2f,0x21,0x21,0x2b,0x32,0x24,0x8,0x3,0x3c,0xc0,0x88,0x48,0x50,0xfc,0x80,0x84,0xfe,0x0,0xf0,0x10,0xa0,0x40,0xb0,0xc,
++0x0,0x40,0x37,0x12,0x1,0x0,0xf7,0x10,0x13,0x12,0x12,0x13,0x16,0x1a,0x13,0x2,0x80,0x48,0xfc,0x10,0x10,0xa4,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x37,0x11,0x0,0x7,0xf4,0x18,0x13,0x12,0x12,0x12,0x16,0x1a,0x10,0x0,0x80,0x48,0xfc,0x10,0xa0,0xfe,0x42,0x44,0xf8,0x48,0x48,0x48,0x48,0x58,0x40,0x40,
++0x0,0x48,0x24,0x24,0x1,0x6,0xe8,0x30,0x21,0x22,0x27,0x22,0x2a,0x32,0x23,0x2,0x80,0x80,0x80,0xfc,0x4,0x48,0x40,0xa0,0x10,0xe,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x27,0x24,0x4,0x7,0xe4,0x24,0x27,0x24,0x2c,0x37,0x24,0x2c,0x34,0x4,0x80,0x48,0xfc,0x8,0x8,0xf8,0x0,0x4,0xfe,0xa4,0xa4,0xfc,0xa4,0xa4,0xb4,0x8,
++0x1,0x41,0x37,0x11,0x0,0x3,0xf2,0x13,0x12,0x13,0x10,0x1f,0x10,0x19,0x12,0xc,0x10,0x14,0xfe,0x10,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x44,0xfe,0xa0,0x10,0xe,0x4,
++0x0,0x42,0x21,0x2f,0x8,0x13,0xe2,0x22,0x22,0x23,0x20,0x21,0x29,0x32,0x24,0x8,0x40,0x48,0x50,0xfe,0x2,0xfc,0x8,0x8,0x8,0xf8,0xa0,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x47,0x24,0x27,0x4,0x7,0xe2,0x25,0x29,0x22,0x25,0x20,0x28,0x30,0x23,0xc,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x8,0x4,0xfa,0x8,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x4,0x42,0x21,0x2f,0x0,0x1,0xe2,0x24,0x23,0x22,0x22,0x22,0x2a,0x32,0x2f,0x0,0x4,0x8,0x10,0xfe,0x0,0x10,0xc,0x4,0xf8,0xa8,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x1,0x40,0x30,0x15,0x5,0x9,0xf1,0x12,0x14,0x13,0x12,0x12,0x16,0x1a,0x17,0x0,0x0,0xc8,0x48,0x14,0x22,0x42,0x88,0xf8,0x0,0xf8,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x0,0x40,0x2f,0x21,0x0,0x7,0xe4,0x24,0x27,0x24,0x25,0x25,0x2d,0x35,0x25,0x4,0x80,0x44,0xfe,0x10,0xa4,0xfe,0x44,0x54,0xfc,0x44,0xf4,0x14,0x14,0xf4,0x14,0x8,
++0x1,0x40,0x37,0x10,0x3,0x2,0xf3,0x12,0x13,0x12,0x10,0x13,0x14,0x18,0x11,0x6,0x8,0x90,0xfe,0x0,0xd4,0x54,0xd4,0x54,0xc4,0x4c,0x0,0xfc,0x84,0x84,0x14,0x8,
++0x2,0x4f,0x22,0x2a,0xf,0x2,0xe6,0x2b,0x32,0x20,0x23,0x22,0x2b,0x32,0x23,0x2,0x4,0xbe,0x8,0x28,0xbe,0x8,0x98,0x2a,0x4e,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x1,0x41,0x23,0x22,0x6,0xb,0xe2,0x22,0x23,0x22,0x22,0x23,0x2a,0x35,0x24,0x8,0x40,0x24,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,0x24,0x92,0x2,
++0x0,0x47,0x20,0x20,0xf,0x1,0xe2,0x2c,0x27,0x24,0x27,0x25,0x2d,0x35,0x24,0x4,0x0,0xf8,0x90,0x60,0xfe,0x44,0x40,0xc4,0xfe,0xa4,0x1c,0xf4,0x14,0xf4,0x14,0x8,
++0x1,0x41,0x21,0x2f,0x1,0x1,0xef,0x2a,0x2a,0x2f,0x29,0x2f,0x29,0x39,0x28,0x0,0x8,0x8,0x4c,0xe8,0x3e,0x8,0xe8,0xa8,0xa8,0xe8,0x28,0xe8,0x28,0x74,0x24,0x42,
++0x1,0x41,0x22,0x27,0xc,0x5,0xe7,0x24,0x25,0x24,0x25,0x2c,0x35,0x25,0x9,0x1,0x0,0xf8,0x10,0xfe,0x88,0x24,0xfe,0x0,0xfc,0x0,0xfc,0x0,0xfc,0x4,0xfc,0x4,
++0x0,0x44,0x24,0x2b,0x0,0x1f,0xe2,0x2e,0x22,0x2e,0x22,0x2e,0x2a,0x32,0x2f,0x0,0x10,0x90,0x98,0x54,0x10,0xfe,0x90,0xf0,0x94,0xf4,0x94,0xe8,0x9a,0xaa,0xe6,0x2,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x34,0x28,0x20,0x20,0x20,0x20,
++0x1f,0x0,0x1,0x3d,0x5,0x9,0x33,0xc1,0x3f,0x0,0x1f,0x10,0x10,0x10,0x10,0xf,0xf0,0x40,0x88,0xb0,0x40,0x30,0xe,0x4,0xf8,0x10,0xf8,0x10,0x90,0x64,0x4,0xfc,
++0x0,0x78,0x48,0x48,0x50,0x50,0x60,0x50,0x50,0x48,0x48,0x68,0x50,0x40,0x40,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x78,0x4f,0x49,0x51,0x51,0x61,0x51,0x51,0x49,0x49,0x69,0x52,0x42,0x44,0x48,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x7c,0x45,0x48,0x48,0x50,0x48,0x4b,0x44,0x44,0x44,0x68,0x50,0x40,0x40,0x40,0x8,0x1c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x1,0x79,0x49,0x49,0x57,0x51,0x61,0x51,0x51,0x4f,0x49,0x69,0x51,0x42,0x42,0x44,0x10,0x10,0x10,0x10,0xfc,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0x78,0x4b,0x4a,0x52,0x53,0x62,0x52,0x52,0x4a,0x4a,0x6a,0x54,0x44,0x49,0x42,0x8,0x3c,0xc0,0x0,0x8,0xfc,0x8,0x88,0x88,0x90,0x50,0x20,0x50,0x88,0xe,0x4,
++0x0,0x7c,0x44,0x48,0x48,0x50,0x48,0x49,0x45,0x45,0x45,0x69,0x51,0x41,0x41,0x41,0x40,0x40,0x44,0x7e,0x40,0x40,0x44,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x7d,0x45,0x49,0x4a,0x52,0x4c,0x48,0x44,0x44,0x44,0x68,0x50,0x40,0x40,0x40,0x0,0x0,0x4,0xfe,0x80,0x80,0x88,0xfc,0x80,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,
++0x0,0x78,0x48,0x4b,0x52,0x52,0x62,0x53,0x52,0x4a,0x4a,0x6a,0x54,0x44,0x49,0x42,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xf8,0x88,0x88,0x50,0x20,0x50,0x88,0xe,0x4,
++0x0,0x7b,0x48,0x48,0x50,0x50,0x61,0x56,0x50,0x4b,0x48,0x68,0x50,0x40,0x4f,0x40,0x0,0xf8,0x10,0x20,0x40,0xb0,0xc,0x4,0x10,0xf8,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x78,0x48,0x4f,0x50,0x50,0x61,0x53,0x51,0x48,0x48,0x6b,0x50,0x40,0x43,0x4c,0x80,0x40,0x44,0xfe,0x80,0x90,0x10,0xe0,0x28,0x48,0x90,0x10,0x20,0xd8,0x6,0x2,
++0x0,0x78,0x49,0x49,0x51,0x51,0x67,0x50,0x51,0x49,0x4a,0x68,0x50,0x40,0x43,0x4c,0x40,0x48,0x7c,0x40,0x40,0x44,0xfe,0x40,0x48,0x48,0x50,0x60,0x40,0x80,0x0,0x0,
++0x0,0x7b,0x4a,0x4a,0x53,0x52,0x62,0x53,0x52,0x48,0x4b,0x68,0x50,0x40,0x4f,0x40,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x48,0x40,0xf8,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x70,0x5f,0x54,0x54,0x57,0x64,0x54,0x57,0x54,0x54,0x5f,0x70,0x40,0x40,0x40,0x0,0x40,0xe0,0x80,0xbc,0x84,0xa4,0xa8,0xa8,0x90,0x90,0xe8,0xa8,0xc6,0x80,0x80,
++0x0,0x78,0x4f,0x48,0x50,0x5f,0x61,0x51,0x57,0x49,0x49,0x6f,0x50,0x40,0x47,0x40,0x8,0x3c,0xc0,0x40,0x44,0xfe,0x50,0x50,0xfc,0x50,0x54,0xfe,0x40,0x48,0xfc,0x0,
++0x0,0x79,0x4b,0x4a,0x52,0x53,0x62,0x52,0x53,0x48,0x49,0x6f,0x50,0x40,0x40,0x40,0x80,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x7b,0x4a,0x4a,0x53,0x52,0x62,0x53,0x50,0x4f,0x4a,0x6a,0x52,0x42,0x43,0x42,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x4,0xfe,0x88,0x50,0x20,0x90,0xe,0x4,
++0x0,0x78,0x4b,0x4a,0x53,0x52,0x63,0x50,0x57,0x48,0x48,0x6b,0x50,0x40,0x4f,0x40,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x40,0x50,0xf8,0x40,0x44,0xfe,0x0,
++0x0,0x78,0x4b,0x4a,0x52,0x53,0x62,0x52,0x4b,0x48,0x68,0x51,0x41,0x42,0x44,0x48,0x40,0x88,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x80,0xc8,0x54,0x5c,0x42,0x42,0x3e,
++0x0,0x7b,0x4a,0x4b,0x52,0x53,0x61,0x52,0x57,0x49,0x4a,0x6f,0x50,0x45,0x44,0x48,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x8,0x10,0xbe,0x8,0x94,0xbe,0x0,0x24,0x92,0x2,
++0x2,0x7f,0x8,0x8,0x8,0x9,0xff,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x0,0x7c,0x44,0x44,0x48,0x48,0xd0,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x0,0x2,0x7f,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0xf,0xf8,0x40,0x0,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x4,0x2,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x7c,0xc4,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x10,0x8,0x9,0xff,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x3f,0x0,0x0,0x0,0x0,0x0,0x7c,0x44,0xc4,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0x12,0x3f,0x22,0x22,0x22,0x2a,0x24,0x20,0x3f,0x0,0x4,0xfe,0x0,0x2,0x1,0x0,0x3c,0x24,0x24,0x28,0x28,0x30,0x28,0xa4,0xe2,0xa2,0xa2,0xb4,0xa8,0xa0,0x20,
++0x10,0x8,0x9,0xff,0x10,0x12,0x1f,0x12,0x12,0x12,0x12,0x22,0x22,0x4a,0x84,0x0,0x0,0x7c,0x44,0xc4,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x1,0xff,0x8,0x8,0x9,0x7f,0x49,0x49,0x49,0x55,0x63,0x41,0x41,0x45,0x42,0x0,0x0,0xfc,0x44,0x44,0x48,0xc8,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x1,0xff,0x4,0x8,0x18,0x1c,0x2a,0x29,0x49,0x88,0x8,0x8,0xf,0xf8,0x40,0x0,0x0,0xfc,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x14,0x14,0x14,0x14,0x15,0xf7,0x14,0x14,0x14,0x14,0x14,0x35,0xd6,0x14,0x0,0x0,0x0,0x7c,0x44,0x44,0x48,0xc8,0x50,0x48,0x44,0x42,0xc2,0x62,0x54,0x48,0x40,0x40,
++0x14,0x14,0x14,0x14,0x94,0x54,0x55,0x35,0x36,0x14,0x14,0x17,0xf8,0x40,0x0,0x0,0x0,0x7c,0x44,0x44,0xc8,0xc8,0x50,0x48,0x44,0x42,0x42,0xe2,0x54,0x48,0x40,0x40,
++0x2,0x7,0x78,0x48,0x48,0x4a,0x7f,0x48,0x48,0x48,0x44,0x44,0x52,0x69,0x44,0x0,0x0,0x3c,0x24,0x24,0x28,0x28,0x30,0x28,0x24,0x22,0x22,0xa2,0xb4,0xa8,0x20,0x20,
++0x10,0x10,0x20,0x24,0x42,0xff,0x0,0x2,0x7f,0x42,0x42,0x42,0x42,0x7e,0x42,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0x8,0x9,0xff,0x8,0x49,0x29,0x2a,0xff,0x8,0x8,0x14,0x12,0x23,0xc1,0x0,0x0,0x7c,0x44,0xc4,0x48,0x48,0x50,0x48,0xc4,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x2,0xff,0x10,0x10,0x22,0x41,0x7f,0x8,0x8,0x7f,0x8,0x8,0xf,0xf8,0x40,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0xd4,0x48,0x40,0x40,
++0x8,0x8,0x4a,0x7f,0x48,0x88,0x9,0xff,0x8,0x1c,0x1c,0x2a,0x29,0x48,0x88,0x8,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0xc8,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0x8,0x14,0x12,0x21,0x20,0x7f,0x80,0x1,0xff,0x10,0x14,0x22,0x7f,0x21,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0xd0,0x48,0x44,0xc2,0x42,0x62,0x54,0x48,0x40,0x40,
++0x41,0x22,0x14,0x8,0x14,0x63,0x10,0xff,0x10,0x24,0x28,0x48,0x92,0x3f,0x1,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0xc8,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x20,0x21,0x3f,0x41,0x41,0xbd,0x25,0x25,0x3d,0x25,0x25,0x3d,0x25,0x1,0xa,0x4,0x0,0x7c,0xc4,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x0,0x7f,0x50,0x91,0x3f,0x10,0x14,0x25,0x7f,0x4,0x4,0x7,0xfc,0x44,0x4,0x4,0x0,0xfc,0xc4,0x44,0x48,0x48,0x50,0x48,0xc4,0x42,0x42,0xe2,0x54,0x48,0x40,0x40,
++0x0,0xff,0x0,0x0,0x7b,0x4a,0x4a,0x4a,0x6b,0x5a,0x4a,0x4a,0x4a,0x4a,0x5a,0x0,0x40,0xfe,0x12,0x52,0xf4,0x54,0x58,0x54,0x54,0xd2,0x52,0x5a,0x54,0x50,0xd0,0x10,
++0x2,0x3f,0x22,0x22,0x22,0x3e,0x0,0xff,0x8,0xa,0x7f,0x8,0xf,0xf8,0x40,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0xd4,0x48,0x40,0x40,
++0x8,0x28,0x2a,0x3f,0x48,0x88,0x9,0xff,0x0,0x7f,0x41,0x41,0x41,0x7f,0x41,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0xc8,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x20,0x11,0xe,0x11,0x28,0x8,0xff,0x14,0x24,0x7f,0xa4,0x24,0x24,0x25,0x24,0x4,0x80,0x3c,0x24,0x24,0xa8,0x28,0xf0,0x28,0xa4,0xe2,0xa2,0xa2,0xb4,0xa8,0xa0,0x20,
++0x1,0x3,0xfc,0x49,0x29,0x2,0x7f,0x2,0xc,0x8,0xff,0x48,0x8,0x8,0x28,0x10,0x0,0xfc,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0x11,0x7f,0x49,0x49,0x7f,0x49,0x51,0x7f,0x10,0x29,0xff,0x8,0x8,0x8,0x8,0x0,0x7c,0xc4,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0xe2,0x54,0x48,0x40,0x40,
++0x8,0x29,0x2a,0x4c,0x94,0x12,0x21,0xc8,0x8,0x29,0x2a,0x54,0x12,0x21,0xc1,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x1,0x7f,0x40,0x5f,0x51,0x5f,0x51,0x5f,0x48,0x7f,0x49,0x52,0x4e,0x51,0x7f,0x0,0x0,0xbc,0x24,0x24,0x28,0x28,0x30,0x28,0x24,0xe2,0x22,0x22,0x34,0x28,0xa0,0x20,
++0x1,0xff,0x14,0x15,0x7f,0x55,0x55,0x55,0x7f,0x49,0x8,0x7f,0x8,0xf,0xf8,0x40,0x0,0xfc,0x44,0x44,0xc8,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x1,0x7f,0x4,0x17,0x14,0xff,0x20,0x3f,0x20,0x3f,0x0,0xaa,0xaa,0x0,0x2,0x1,0x0,0xbc,0x24,0xa4,0x28,0xe8,0x30,0x28,0x24,0xa2,0xa2,0xa2,0xb4,0xa8,0xa0,0x20,
++0x22,0xff,0x22,0x3e,0x8,0x7f,0x49,0x7f,0x8,0x7f,0x8,0x3e,0x8,0xf,0x78,0x20,0x0,0xfc,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0x7f,0x22,0x14,0xff,0x0,0x7f,0x41,0x7f,0x41,0x7f,0x8,0xff,0x8,0x8,0x8,0x0,0x7c,0x44,0x44,0xc8,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0xd4,0x48,0x40,0x40,
++0x3,0x7c,0x24,0x15,0x7f,0xc,0x15,0x24,0xff,0x24,0x24,0x3f,0x24,0x24,0x3f,0x20,0x80,0x3c,0xa4,0x24,0xe8,0x28,0x30,0xa8,0xe4,0xa2,0xa2,0xa2,0xb4,0xa8,0xa0,0xa0,
++0x11,0xa,0x7f,0x4,0x3f,0x4,0x7f,0x24,0x15,0xff,0x0,0x3f,0x20,0x20,0x3f,0x20,0x0,0x3c,0xe4,0x24,0xa8,0x28,0xf0,0xa8,0x24,0xe2,0x22,0xa2,0xb4,0xa8,0xa0,0xa0,
++0xff,0x48,0x7b,0x4a,0x7a,0x49,0xfa,0x8,0x7f,0x14,0x25,0x4e,0x15,0x24,0xc4,0x4,0x80,0x3c,0xa4,0xa4,0xa8,0x28,0xb0,0x28,0x24,0xa2,0x22,0x22,0xb4,0xa8,0x20,0x20,
++0x2,0x7f,0x8,0x7f,0x48,0xaa,0x8,0x2a,0x0,0x7f,0x55,0x55,0x55,0x55,0x7f,0x0,0x0,0x7c,0x44,0xc4,0xc8,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x2a,0x7f,0xaa,0xff,0xaa,0xff,0xaa,0xff,0x0,0xff,0x1,0x7f,0x41,0x7f,0x22,0xff,0x0,0x3c,0xa4,0xa4,0xa8,0xa8,0xb0,0xa8,0x24,0xa2,0x22,0xa2,0x34,0x28,0x20,0xa0,
++0x8,0x8,0xf,0x10,0x10,0x20,0x5f,0x80,0x0,0x0,0x1f,0x0,0x0,0x0,0x3f,0x0,0x0,0x20,0xf0,0x20,0x40,0x88,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0xf,0x10,0x10,0x20,0x5f,0x11,0x11,0x11,0xff,0x1,0x2,0x4,0x18,0x60,0x0,0x0,0xe0,0x20,0x40,0x90,0xf8,0x10,0x10,0x14,0xfe,0x0,0x80,0x60,0x1c,0x8,
++0x0,0x1,0xff,0x10,0x10,0x12,0x1f,0x12,0x12,0x12,0x12,0x22,0x22,0x4a,0x84,0x1,0x20,0x20,0xa0,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x44,0x84,0xa8,0x10,
++0x20,0x22,0x3f,0x42,0x42,0x8a,0x7e,0x4a,0x4a,0x4a,0x4a,0x7a,0x42,0xa,0x4,0x1,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x44,0x84,0xa8,0x10,
++0x2,0xff,0x22,0x22,0x22,0x2a,0x44,0x80,0x7e,0x42,0x42,0x42,0x42,0x7e,0x42,0x1,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x44,0x84,0xa8,0x10,
++0x10,0x9,0xff,0x10,0x12,0x22,0x24,0x7c,0x8,0xa,0x12,0x24,0x4c,0x92,0x20,0x1,0x20,0x20,0xa0,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x44,0x84,0xa8,0x10,
++0x8,0x8,0x7f,0x9,0x11,0x15,0x62,0x0,0xff,0x0,0x1f,0x10,0x10,0x1f,0x10,0x0,0x0,0x4,0x7e,0x44,0x44,0x44,0x7c,0x0,0xfe,0x10,0x90,0x90,0x90,0x90,0x50,0x20,
++0x0,0x7f,0x2,0x4,0x7e,0x4,0x14,0x8,0x7f,0x55,0x55,0x55,0x55,0xff,0x0,0x1,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x44,0x84,0xa8,0x10,
++0x1,0xff,0x81,0xbd,0x81,0xbd,0x0,0x7e,0x42,0x7e,0x42,0x7e,0x42,0x7e,0x42,0x1,0x20,0xa0,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x44,0x84,0xa8,0x10,
++0x10,0x12,0x7f,0x12,0x12,0x2a,0x44,0x0,0x44,0xff,0x55,0x55,0x55,0x55,0x99,0x33,0x0,0xfe,0x92,0x92,0xfe,0x92,0x92,0xfe,0x82,0x20,0x10,0x50,0xc2,0xc6,0x44,0x3c,
++0x5,0x39,0x21,0x21,0x3d,0x21,0x21,0x3f,0x1,0x7f,0x8,0x6,0x1,0x6,0x18,0xe0,0x8,0x7c,0x8,0x8,0x78,0x8,0x8,0xf8,0x0,0xf0,0x20,0xc0,0x0,0xc0,0x30,0xe,
++0x21,0x2f,0x20,0xaf,0x70,0x2f,0x20,0x27,0x54,0x87,0x0,0x1f,0x4,0x3,0xc,0x70,0x8,0xe8,0x8,0xea,0x1c,0xe8,0x8,0xc8,0x54,0xc2,0x0,0xe0,0x40,0x80,0x60,0x1c,
++0x3e,0x32,0x2a,0x26,0x3e,0x8,0x1f,0x28,0x4f,0x8,0x8,0x1f,0x4,0x3,0x1c,0xe0,0xf8,0xc8,0xa8,0x98,0xf8,0x80,0xf8,0x80,0xf0,0x84,0x7c,0xe0,0x40,0x80,0x70,0xe,
++0x0,0x0,0xf8,0x8,0x10,0x20,0x40,0x78,0x8,0x88,0x50,0x30,0x20,0x50,0x88,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0xfc,
++0x0,0x0,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x1,0x1,0x1,0x41,0x41,0x5f,0x43,0x45,0x45,0x49,0x51,0x61,0x45,0x42,0x7f,0x0,0x0,0x0,0x0,0x14,0x34,0x44,0x84,0x44,0x44,0x24,0x24,0x1c,0x4,0x4,0xfc,0x4,
++0x9,0x4,0x22,0x29,0x22,0x24,0x29,0x20,0x3f,0x28,0x8,0x9,0xe,0x8,0x7,0x0,0x20,0x40,0x88,0x28,0x88,0x48,0x28,0x8,0xf8,0x8,0x60,0x80,0x0,0x4,0xfc,0x0,
++0x0,0x0,0x1,0x1,0x1,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x10,0x8,0xfc,0x4,0x0,
++0x1,0x1,0x2,0x4,0x1f,0x0,0x4,0x4,0xff,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x0,0x0,0x0,0x20,0xf0,0x10,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x2,0x4,0x8,0x1f,0x2,0xff,0x4,0x8,0x3f,0xd1,0x11,0x1f,0x11,0x11,0x1f,0x10,0x0,0x40,0x20,0xf0,0x4,0xfe,0x40,0x20,0xf8,0x16,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x0,0x0,0xfb,0x8,0x10,0x2d,0xc3,0x8,0x7d,0x11,0x11,0x11,0x1d,0xf2,0x44,0x8,0x80,0x44,0xfe,0x80,0x80,0x8,0xfc,0x4,0x50,0x50,0x50,0x50,0x52,0x52,0x4e,0x0,
++0x1,0x4,0x4,0x8,0x10,0x2f,0xc4,0x4,0x8,0x31,0x1,0x3f,0x1,0x1,0xff,0x0,0x80,0x80,0x40,0x20,0x10,0xee,0x24,0x20,0xa0,0x40,0x10,0xf8,0x0,0x4,0xfe,0x0,
++0x0,0x7f,0x2,0x22,0x1a,0xa,0x2,0xff,0x1,0x1,0x3f,0x1,0x1,0x1,0xff,0x0,0x8,0xfc,0x80,0x88,0x98,0xa0,0x84,0xfe,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,
++0x9,0x9,0x9,0x11,0x1f,0x30,0x50,0x90,0x11,0x17,0x1,0x3f,0x1,0x1,0xff,0x0,0x20,0x10,0x0,0xfc,0x0,0x90,0xa0,0x44,0xa4,0x1c,0x0,0xf8,0x0,0x4,0xfe,0x0,
++0x8,0xff,0x0,0x3e,0x22,0x3e,0x0,0x7e,0x4,0x7e,0x9,0x19,0x7f,0x1,0x1,0xff,0x20,0xa0,0x28,0xfc,0x28,0x68,0x28,0x58,0x48,0x8a,0x6,0x10,0xfc,0x0,0x4,0xfe,
++0x8,0xff,0x8,0x7f,0x49,0x7f,0x49,0x7f,0x8,0xff,0x49,0x7f,0x1,0x3f,0x1,0xff,0x8,0x7c,0x48,0x48,0x86,0x7c,0x44,0x44,0x28,0x90,0x28,0xc6,0x0,0xf8,0x0,0xfe,
++0x1,0xff,0x10,0x14,0x25,0x7a,0x10,0x24,0x7c,0x8,0x11,0x61,0x3f,0x1,0x1,0xff,0x0,0xfe,0x90,0xfe,0x90,0xfc,0x90,0xfc,0x90,0xfe,0x80,0x10,0xf8,0x0,0x4,0xfe,
++0x8,0xf,0x48,0x7f,0x40,0xbf,0x8,0x55,0x3e,0xe3,0x22,0x3e,0x1,0x3f,0x1,0xff,0x0,0x0,0x7c,0x84,0xc4,0x28,0x28,0x10,0x28,0xa8,0x46,0x0,0x10,0xf8,0x0,0xfe,
++0x10,0x10,0x11,0x10,0x14,0xfe,0x10,0x13,0x10,0x10,0x1e,0xf0,0x40,0x0,0x0,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x10,0x11,0x10,0x14,0xfe,0x13,0x10,0x10,0x11,0x1e,0xf0,0x40,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x80,0x88,0xfc,0x8,0x8,0x8,0x88,0x50,0x20,
++0x10,0x10,0x10,0x10,0x15,0xfe,0x11,0x10,0x10,0x10,0x1e,0xf1,0x41,0x1,0x0,0x0,0x80,0x80,0x84,0xfe,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x11,0x11,0x11,0x15,0xff,0x11,0x11,0x11,0x11,0x1d,0xf1,0x42,0x2,0x4,0x0,0x4,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x4,
++0x10,0x10,0x10,0x13,0x12,0xfe,0x12,0x12,0x12,0x12,0x1e,0xf2,0x44,0x4,0x8,0x10,0x40,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x13,0x10,0x14,0xfe,0x10,0x13,0x12,0x12,0x1e,0xf2,0x42,0x2,0x1,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x13,0x12,0x12,0xfe,0x12,0x13,0x12,0x12,0x1e,0xf2,0x42,0x2,0x1,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x13,0x12,0x12,0xfe,0x13,0x12,0x12,0x12,0x1e,0xf2,0x44,0x4,0x9,0x12,0x0,0x4,0xfe,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x10,0x10,0x11,0x11,0x15,0xff,0x11,0x11,0x11,0x11,0x1d,0xf1,0x42,0x2,0x4,0x8,0x8,0x1c,0xe0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x10,0x11,0x11,0x11,0xfd,0x11,0x11,0x11,0x11,0x1d,0xf2,0x42,0x4,0x9,0x12,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x4,0x88,0x48,0x50,0x30,0x20,0x50,0x88,0xe,0x4,
++0x11,0x11,0x11,0x11,0x17,0xfd,0x11,0x11,0x11,0x11,0x1d,0xf1,0x41,0x1,0x1,0x1,0x8,0x8,0x8,0xa,0xfe,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x10,0x10,0x17,0xfc,0x10,0x10,0x10,0x11,0x1d,0xf1,0x42,0x2,0x4,0x8,0x80,0xa0,0x90,0x94,0xfe,0xa0,0xa0,0xa4,0xa4,0x28,0x28,0x30,0x62,0xa2,0x1e,0x0,
++0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x13,0x12,0x12,0x1e,0xf2,0x42,0x3,0x2,0x40,0x40,0x44,0x7e,0x40,0x40,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x10,0x10,0x10,0xff,0x12,0x12,0x12,0x13,0x1e,0xf2,0x44,0x4,0x8,0x10,0x40,0x44,0x7e,0x40,0x48,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x11,0x11,0x11,0xfd,0x11,0x11,0x11,0x11,0x1d,0xf1,0x42,0x2,0x4,0x0,0x8,0x1c,0xe0,0x0,0x0,0x4,0xfe,0x10,0x10,0x50,0x30,0x18,0x14,0x10,0x10,0x10,
++0x10,0x10,0x13,0x12,0x12,0xfe,0x13,0x12,0x12,0x12,0x1e,0xf2,0x42,0x3,0x6,0x0,0x8,0x3c,0xe0,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x10,0x90,0x52,0x2a,0x6,
++0x10,0x10,0x10,0x13,0x12,0xfc,0x11,0x11,0x11,0x11,0x1d,0xf1,0x41,0x1,0x0,0x0,0x40,0x20,0x20,0xfe,0x2,0x4,0x0,0x10,0x30,0x40,0x80,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x13,0x12,0x12,0x12,0xff,0x12,0x12,0x12,0x12,0x1e,0xf2,0x44,0x4,0x8,0x10,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x80,0x88,0x98,0xa0,0xc0,0x82,0x82,0x7e,0x0,
++0x10,0x11,0x11,0x11,0x11,0xfd,0x11,0x17,0x12,0x12,0x1e,0xf2,0x43,0x0,0x0,0x0,0x8,0xfc,0x8,0x48,0x28,0x28,0xa,0xfe,0x8,0x88,0x48,0x48,0xfc,0x8,0x50,0x20,
++0x10,0x11,0x11,0x12,0x12,0xfc,0x17,0x11,0x12,0x14,0x17,0x1c,0xf0,0x40,0x0,0x1,0x20,0x20,0x20,0x24,0x7e,0xa4,0xa4,0x24,0x24,0xa4,0xa4,0x24,0x44,0x44,0x94,0x8,
++0x10,0x17,0x10,0x10,0x10,0xfc,0x14,0x12,0x12,0x12,0x1c,0xf0,0x40,0x0,0xf,0x0,0x8,0xfc,0xa0,0xa0,0xa0,0xa4,0xa4,0xa4,0xa8,0xa8,0xa0,0xa0,0xa0,0xa4,0xfe,0x0,
++0x10,0x17,0x10,0x10,0x11,0xfd,0x13,0x10,0x10,0x10,0x13,0x1c,0xf0,0x40,0xf,0x0,0x8,0xfc,0x80,0x80,0x10,0x8,0xfc,0x0,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x13,0x12,0x12,0x12,0xfe,0x12,0x12,0x12,0x12,0x1e,0xf2,0x42,0x2,0x2,0x2,0x4,0xfe,0x4,0x4,0xf4,0x4,0x4,0xf4,0x94,0x94,0x94,0xf4,0x4,0x4,0x14,0x8,
++0x10,0x10,0x14,0x14,0x17,0xfc,0x10,0x13,0x10,0x10,0x13,0x1e,0xf2,0x42,0x2,0x1,0x40,0x40,0x44,0x44,0xfc,0x4,0x8,0xfc,0x8,0x8,0xf8,0x8,0x0,0x2,0x2,0xfe,
++0x20,0x20,0x2f,0x21,0x22,0xfa,0x24,0x2f,0x21,0x29,0x25,0x3a,0xe2,0x5,0x8,0x10,0x4,0xc,0x70,0x10,0x10,0x50,0x5c,0x50,0x50,0x50,0x50,0x50,0x7c,0x0,0x86,0x7c,
++0x10,0x10,0x10,0x13,0x12,0xfe,0x12,0x12,0x12,0x12,0x1e,0xf2,0x42,0x2,0x2,0x2,0x40,0x40,0x84,0xfe,0x4,0x4,0xf4,0x94,0x94,0x94,0x94,0xf4,0x4,0x4,0x14,0x8,
++0x20,0x20,0x20,0x2f,0x20,0xf8,0x25,0x24,0x24,0x24,0x24,0x3c,0xe5,0x44,0x7,0x4,0x80,0x40,0x44,0xfe,0x0,0x10,0x14,0xa4,0xa4,0x44,0xa4,0x94,0x14,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x17,0x10,0xfc,0x11,0x13,0x11,0x10,0x1c,0xf1,0x46,0x0,0x3,0xc,0x80,0x40,0x44,0xfe,0x80,0x90,0x10,0xe0,0x28,0x48,0x90,0x10,0x20,0xd8,0x6,0x2,
++0x10,0x13,0x12,0x12,0x13,0xfe,0x12,0x13,0x12,0x12,0x1e,0xf2,0x42,0x2,0x3,0x2,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x88,0x50,0x20,0x10,0x8e,0x4,0x0,
++0x10,0x11,0x11,0x11,0x11,0xfd,0x11,0x10,0x13,0x10,0x10,0x1d,0xf0,0x40,0x7,0x0,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0xfe,0x20,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x20,0x20,0x27,0x24,0x24,0xfc,0x24,0x27,0x24,0x24,0x24,0x3c,0xe7,0x44,0x0,0x0,0x8,0x88,0xc8,0x88,0x8a,0xfe,0x88,0x88,0xc8,0xa8,0xa8,0x88,0x88,0x88,0x28,0x10,
++0x10,0x11,0x11,0x11,0x11,0xfd,0x10,0x13,0x12,0x12,0x1e,0xf2,0x43,0x2,0x2,0x2,0x8,0xfc,0x8,0x8,0xf8,0x48,0x44,0xfe,0x44,0x44,0x44,0xb4,0x14,0x4,0x14,0x8,
++0x10,0x11,0x11,0x11,0x11,0xfc,0x13,0x12,0x12,0x12,0x1e,0xf2,0x42,0x0,0x3,0xc,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x4,0x24,0x24,0x24,0x44,0x44,0x98,0x4,0x2,
++0x10,0x10,0x17,0x10,0x12,0xfd,0x10,0x10,0x17,0x11,0x10,0x1c,0xf0,0x40,0x0,0x0,0x8,0x3c,0xc0,0x44,0x24,0x28,0x10,0x14,0xfe,0x10,0x90,0x90,0x10,0x10,0x50,0x20,
++0x10,0x10,0x13,0x12,0x14,0xfd,0x10,0x10,0x17,0x10,0x1c,0xf0,0x41,0x1,0x2,0xc,0x80,0x40,0xfe,0x2,0x24,0xf0,0x0,0x4,0xfe,0xa0,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x17,0x10,0x10,0xff,0x12,0x13,0x12,0x13,0x1e,0xf3,0x42,0x2,0xf,0x0,0x40,0x48,0xfc,0x40,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xa,0xfe,0x0,
++0x10,0x10,0x10,0x17,0x11,0xfd,0x13,0x16,0x1a,0x13,0x1e,0xf2,0x43,0x2,0x0,0x0,0x80,0x80,0x84,0xfe,0x10,0x50,0xf8,0x4e,0x48,0xf8,0x48,0x48,0xf8,0x4a,0x42,0x3e,
++0x10,0x13,0x12,0x13,0x12,0xff,0x11,0x11,0x13,0x14,0x10,0x1d,0xf1,0x42,0x4,0x1,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0x4,0xfe,0xa4,0xa4,0x24,0x44,0x44,0x94,0x8,
++0x10,0x10,0x13,0x12,0x12,0xff,0x12,0x12,0x13,0x10,0x1d,0xf7,0x40,0x0,0x0,0x0,0x40,0x84,0xfe,0x24,0x24,0xfc,0x44,0x44,0xfc,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x10,0x10,0x10,0x10,0x11,0xfe,0x14,0x13,0x10,0x10,0x1c,0xf0,0x45,0x5,0x9,0x0,0x40,0x40,0xa0,0xa0,0x10,0x8e,0x44,0xf8,0x10,0x20,0x80,0x40,0x44,0x12,0x12,0xf0,
++0x20,0x27,0x24,0x24,0x24,0xff,0x24,0x24,0x24,0x27,0x3c,0xe4,0x44,0x8,0x9,0x10,0x4,0xbe,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0xa4,0xd4,0x88,
++0x10,0x10,0x10,0x11,0x12,0xff,0x12,0x12,0x12,0x13,0x1e,0xf0,0x40,0x1,0x6,0x18,0x80,0x80,0xf8,0x10,0x24,0xfe,0x24,0x24,0x44,0xfc,0x44,0xa0,0xb0,0x2a,0x22,0x1e,
++0x20,0x23,0x20,0x21,0x28,0xfb,0x20,0x27,0x24,0x2b,0x3a,0xe2,0x42,0x2,0x0,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x42,0xfc,0x48,0x48,0x48,0x58,0x40,0x40,
++0x10,0x10,0x13,0x10,0x10,0xff,0x10,0x10,0x13,0x10,0x1e,0xf1,0x42,0xc,0x1,0x0,0x40,0x48,0xfc,0x48,0x4a,0xfe,0x48,0x48,0xf8,0x40,0x48,0x50,0x50,0x4e,0x44,0x80,
++0x10,0x13,0x12,0x12,0x13,0xfe,0x12,0x12,0x12,0x12,0x1e,0xf3,0x45,0x5,0x9,0x10,0x4,0xfe,0x4,0x4,0xfc,0x20,0xa8,0xa8,0xa8,0xf8,0x20,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x12,0x12,0x17,0x12,0xfe,0x12,0x12,0x13,0x10,0x1f,0xf0,0x41,0x2,0xc,0x0,0x90,0x90,0x94,0xfe,0x90,0x90,0xf0,0x0,0xfc,0x40,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x10,0x17,0x10,0x10,0x17,0xfc,0x14,0x14,0x17,0x10,0x1c,0xf7,0x40,0x0,0xf,0x0,0x4,0xfe,0xa0,0xa4,0xfe,0xa4,0xa4,0xa4,0xfc,0x40,0x48,0xfc,0x40,0x44,0xfe,0x0,
++0x10,0x13,0x12,0x12,0x12,0xff,0x12,0x10,0x17,0x10,0x1c,0xf0,0x41,0x1,0x2,0xc,0x4,0xfe,0x94,0x94,0x94,0xfc,0x44,0x20,0xfe,0x80,0xf8,0x88,0x8,0x8,0x28,0x10,
++0x11,0x11,0x11,0x12,0x13,0xfe,0x16,0x1a,0x13,0x12,0x1f,0xf2,0x42,0x2,0x2,0x3,0x0,0x78,0x8,0x12,0xfe,0x0,0x88,0xfc,0x20,0x24,0xfe,0x20,0x20,0x50,0x8e,0x4,
++0x10,0x17,0x10,0x13,0x12,0xfe,0x13,0x10,0x17,0x15,0x1c,0xf5,0x44,0x4,0x4,0x4,0x8,0xfc,0x0,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x14,0xa4,0xf4,0x44,0x44,0x54,0x8,
++0x10,0x13,0x12,0x12,0x12,0xfe,0x12,0x12,0x12,0x12,0x1e,0xf2,0x44,0x5,0xa,0x0,0x4,0xfe,0x20,0x44,0xfe,0x84,0x84,0xfc,0x84,0x84,0xfc,0x20,0xa8,0x26,0x22,0x60,
++0x13,0x12,0x13,0x12,0x13,0xfc,0x17,0x14,0x14,0x17,0x1c,0xf3,0x41,0x0,0x3,0xc,0xf8,0x8,0xf8,0x8,0xf8,0x4,0xfe,0xa4,0xa4,0xfc,0x0,0xf8,0x10,0xe0,0x18,0x6,
++0x20,0x27,0x24,0x25,0x24,0xff,0x24,0x25,0x24,0x25,0x3d,0xe5,0x49,0x9,0x11,0x1,0x20,0xfe,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x24,0x2c,
++0x24,0x22,0x28,0x24,0x21,0xfc,0x24,0x29,0x20,0x2f,0x38,0xe0,0x41,0x2,0xc,0x0,0x8,0xfc,0x48,0xc8,0x48,0x88,0xa8,0x10,0x44,0xfe,0x40,0xe0,0x50,0x4e,0x44,0x40,
++0x20,0x27,0x24,0x27,0x24,0xfd,0x24,0x25,0x24,0x25,0x3e,0xe4,0x47,0x8,0x10,0x0,0x4,0xfe,0x4,0xfc,0x20,0x24,0xa8,0x24,0xa0,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,
++0x8,0x7f,0x8,0x7f,0x49,0x7f,0x40,0x4f,0x81,0x3f,0x5,0xf,0x18,0x2f,0x8,0xf,0x78,0x48,0x4c,0x80,0x7c,0x28,0x10,0xee,0x0,0xf8,0x0,0xf0,0x1c,0xf0,0x10,0xf0,
++0x8,0x7f,0x8,0xff,0x22,0x3e,0x14,0x7f,0x2,0x1f,0x11,0x1f,0x12,0xff,0x1,0x1,0x10,0x10,0xfe,0x10,0x7c,0x28,0x10,0x6e,0x0,0xf0,0x10,0xf0,0x14,0xfe,0x0,0x0,
++0x10,0xfe,0x11,0x7c,0x0,0xfe,0x82,0x7c,0x1,0x7c,0x44,0x44,0x7d,0x29,0xfe,0x0,0x20,0x20,0x20,0xbe,0x42,0x14,0x50,0x98,0x26,0x42,0x20,0x10,0x54,0x42,0x4a,0x38,
++0x4,0x4,0xff,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x44,0xfe,0x40,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x6,0x2,0x2,0x7f,0x2,0x4,0x4,0x4,0x8,0x8,0x10,0x60,0x40,0x44,0xfe,0x40,0x40,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x4,0x4,0xff,0x4,0x4,0x3f,0x4,0x4,0x4,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x40,0x44,0xfe,0x40,0x40,0xf0,0x10,0x20,0x48,0xfc,0x8,0x8,0x8,0x88,0x50,0x20,
++0x4,0x4,0xff,0x4,0x4,0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x40,0x44,0xfe,0x40,0x40,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x4,0x4,0xff,0x4,0x4,0x0,0x3f,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x40,0x44,0xfe,0x40,0x50,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x4,0x3f,0x8,0x8,0xc,0x12,0x12,0x11,0x20,0x20,0x43,0xc,0x40,0x44,0xfe,0x40,0x40,0xf0,0x20,0x40,0xf0,0x10,0x20,0x20,0xc0,0xb0,0xe,0x4,
++0x4,0x4,0xff,0x4,0x6,0x2,0x3f,0x2,0x1a,0x4,0x6,0x5,0x8,0x8,0x10,0x60,0x40,0x44,0xfe,0x40,0x40,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0xa2,0x22,0x1e,0x0,
++0x4,0x4,0xff,0x4,0x4,0x3f,0x0,0x0,0x1f,0x10,0x20,0x3f,0x0,0x0,0x0,0x0,0x40,0x44,0xfe,0x40,0x50,0xf8,0x10,0x10,0xf0,0x0,0x8,0xfc,0x8,0x8,0x50,0x20,
++0x4,0x4,0xff,0x4,0x4,0x3f,0x0,0x0,0x1f,0x10,0x10,0x10,0x10,0x10,0xf,0x0,0x40,0x44,0xfe,0x40,0x50,0xf8,0x10,0x10,0xf0,0x10,0x0,0x0,0x4,0x4,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x2,0x4,0x1f,0x0,0x3,0xc,0x3f,0x0,0x0,0x1,0xe,0x70,0x40,0x44,0xfe,0x40,0x0,0x20,0xc0,0x80,0x20,0x20,0xc0,0x40,0x80,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x5,0x1,0x3f,0x1,0x1,0xff,0x2,0x2,0x4,0x8,0x30,0xc0,0x40,0x44,0xfe,0x40,0x40,0x10,0xf8,0x0,0x4,0xfe,0x80,0x80,0x40,0x30,0xe,0x4,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x0,0x0,0xff,0x4,0x4,0x4,0x8,0x8,0x10,0x60,0x40,0x44,0xfe,0x40,0x10,0xf8,0x0,0x4,0xfe,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x4,0x4,0xff,0x4,0x4,0x0,0x3f,0x0,0x0,0xff,0x2,0x2,0x4,0x8,0x1f,0x0,0x40,0x44,0xfe,0x40,0x40,0x10,0xf8,0x0,0x4,0xfe,0x0,0x0,0x40,0x20,0xf0,0x10,
++0x4,0x4,0xff,0x4,0x1,0xff,0x1,0x1,0x1f,0x11,0x11,0x11,0x11,0x11,0x1,0x1,0x40,0x44,0xfe,0x40,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x50,0x20,0x0,0x0,
++0x4,0x4,0xff,0x5,0x1,0xff,0x1,0x1,0x3f,0x8,0x4,0x2,0x1,0x6,0x18,0xe0,0x40,0x44,0xfe,0x40,0x4,0xfe,0x0,0x0,0xf0,0x20,0x40,0x80,0x0,0xc0,0x30,0xe,
++0x4,0x4,0xff,0x4,0x4,0x3f,0x21,0x21,0x2f,0x21,0x21,0x22,0x42,0x44,0x88,0x10,0x40,0x44,0xfe,0x40,0x48,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x50,0x20,
++0x4,0x4,0xff,0x4,0x4,0x1f,0x10,0x10,0x17,0x14,0x14,0x24,0x24,0x44,0x84,0x3,0x40,0x44,0xfe,0x40,0x48,0xfc,0x0,0x20,0xf0,0x20,0x20,0xa0,0x40,0x4,0x4,0xfc,
++0x4,0x4,0xff,0x4,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x20,0x20,0x20,0x3f,0x0,0x40,0x44,0xfe,0x40,0xf8,0x0,0x20,0xf0,0x20,0x20,0xe0,0x20,0x0,0x8,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x4,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0x26,0x38,0x20,0x0,0x40,0x44,0xfe,0x40,0x40,0x80,0x88,0x98,0xa0,0xc0,0x80,0x80,0x84,0x84,0x7c,0x0,
++0x4,0x4,0xff,0x4,0x5,0x1,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0xff,0x0,0x40,0x44,0xfe,0x40,0x40,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x4,0x4,0xff,0x4,0x5,0x1,0x3f,0x21,0x21,0x22,0x22,0x24,0x28,0x20,0x20,0x20,0x40,0x44,0xfe,0x40,0x40,0x8,0xfc,0x8,0x8,0x88,0x48,0x68,0x28,0x8,0x28,0x10,
++0x4,0x4,0xff,0x4,0x0,0x1f,0x10,0x11,0x11,0x11,0x12,0x12,0x4,0x8,0x30,0xc0,0x40,0x44,0xfe,0x40,0x10,0xf8,0x10,0x10,0x10,0x90,0x90,0x90,0x80,0x84,0x84,0x7c,
++0x4,0x4,0xff,0x4,0x8,0x8,0xb,0x8,0xff,0xa,0x9,0x8,0x8,0xa,0xc,0x8,0x40,0x44,0xfe,0x40,0x20,0xc0,0x0,0x4,0xfe,0x0,0x0,0x80,0x40,0x20,0x1c,0x8,
++0x4,0x4,0xff,0x4,0x4,0x8,0x8,0x8,0x8,0x8,0x8,0x14,0x12,0x20,0x41,0x2,0x40,0x44,0xfe,0x40,0x40,0x20,0x20,0x20,0x20,0x50,0x50,0x50,0x88,0x88,0x4,0x2,
++0x4,0x4,0xff,0x5,0x2,0x4,0x8,0x33,0xc0,0x0,0x1f,0x0,0x0,0x0,0x0,0x1,0x40,0x44,0xfe,0x40,0x80,0x40,0x30,0xe,0x84,0x20,0xf0,0x20,0x40,0x40,0x80,0x0,
++0x4,0x4,0xff,0x4,0x8,0x8,0xf,0x12,0x22,0x44,0x4,0x8,0x11,0x22,0x4,0x0,0x40,0x44,0xfe,0x40,0x0,0x8,0xfc,0x48,0x48,0x48,0x88,0x88,0x8,0x8,0x50,0x20,
++0x4,0x4,0xff,0x4,0xc,0x8,0xf,0x11,0x11,0x21,0x2,0x2,0x4,0x8,0x10,0x60,0x40,0x44,0xfe,0x40,0x40,0x0,0xf8,0x10,0x20,0x0,0x80,0x80,0x40,0x30,0xe,0x4,
++0x4,0x4,0xff,0x4,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x14,0x18,0x10,0x40,0x44,0xfe,0x40,0xf8,0x80,0x80,0x80,0x88,0xfc,0x80,0x40,0x40,0x22,0x12,0xe,
++0x4,0x4,0xff,0x4,0x0,0x7,0x4,0x8,0x30,0xf,0x4,0x2,0x1,0x2,0xc,0x70,0x40,0x44,0xfe,0x40,0x0,0xc0,0x48,0x7c,0x0,0xe0,0x40,0x80,0x0,0x80,0x60,0x1c,
++0x4,0x4,0xff,0x4,0x6,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x40,0x44,0xfe,0x40,0x40,0x4,0xfe,0x0,0x0,0x40,0x30,0x10,0x0,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x6,0x41,0x7f,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x40,0x44,0xfe,0x40,0x40,0x0,0xfe,0x2,0x4,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x0,0x7f,0x2,0xc,0x8,0xf,0xf8,0x48,0x8,0x8,0x28,0x10,0x40,0x44,0xfe,0x40,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x4,0x4,0xff,0x4,0x0,0x24,0x22,0x21,0x21,0x20,0x20,0x24,0x28,0x30,0x1,0x6,0x40,0x44,0xfe,0x40,0x8,0x8,0x8,0x10,0x10,0x10,0x20,0x20,0x50,0x8c,0x4,0x0,
++0x4,0x4,0xff,0x5,0x1,0xff,0x1,0x1,0x7f,0x3,0x5,0x9,0x31,0xc1,0x1,0x1,0x40,0x44,0xfe,0x40,0x4,0xfe,0x0,0x8,0xfc,0x80,0x40,0x30,0xe,0x4,0x0,0x0,
++0x4,0x4,0xff,0x4,0x8,0x8,0xff,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0xf,0x8,0x40,0x44,0xfe,0x40,0x20,0x24,0xfe,0x20,0x20,0x20,0xe0,0x20,0x20,0x20,0xe0,0x20,
++0x4,0x4,0xff,0x4,0x0,0x7f,0x0,0x1,0x3,0x5,0x19,0x61,0x1,0x1,0xff,0x0,0x40,0x44,0xfe,0x40,0x4,0xfe,0x80,0x0,0x0,0x60,0x18,0x4,0x0,0x4,0xfe,0x0,
++0x4,0x4,0xff,0x4,0x2,0x2,0xff,0x2,0x2,0x4,0x4,0x8,0x8,0x11,0x26,0x40,0x40,0x44,0xfe,0x40,0x20,0x14,0xfe,0x80,0x88,0x98,0xa0,0xc0,0x82,0x82,0x7e,0x0,
++0x4,0x4,0xff,0x4,0x2,0x2,0xff,0x4,0x4,0x7,0xa,0x9,0x10,0x21,0x46,0x18,0x40,0x44,0xfe,0x40,0x40,0x24,0xfe,0x0,0x0,0xf0,0x20,0x40,0x80,0x60,0x1c,0x8,
++0x4,0x4,0xff,0x4,0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x40,0x44,0xfe,0x40,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x4,0x4,0xff,0x4,0x0,0xf,0x8,0x8,0xf,0x8,0x8,0xf,0x8,0x8,0xff,0x0,0x40,0x44,0xfe,0x40,0x20,0xf0,0x20,0x20,0xe0,0x20,0x20,0xe0,0x20,0x24,0xfe,0x0,
++0x4,0x4,0xff,0x4,0x1,0x1f,0x11,0x11,0x1f,0x11,0x11,0xff,0x10,0x10,0x10,0x10,0x40,0x44,0xfe,0x40,0x10,0xf8,0x10,0x10,0xf0,0x10,0x14,0xfe,0x10,0x10,0x50,0x20,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x20,0x20,0x27,0x24,0x24,0x24,0x27,0x24,0x20,0x20,0x40,0x44,0xfe,0x40,0x8,0xfc,0x8,0x48,0xe8,0x48,0x48,0x48,0xc8,0x48,0x28,0x10,
++0x4,0x4,0xff,0x4,0x8,0x8,0x10,0x1f,0x30,0x50,0x90,0x10,0x10,0x17,0x10,0x10,0x20,0x24,0xfe,0x20,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x48,0xfc,0x0,0x0,
++0x4,0x4,0xff,0x4,0x8,0x8,0x10,0x17,0x30,0x51,0x90,0x10,0x10,0x10,0x10,0x10,0x40,0x44,0xfe,0x40,0x10,0x10,0x14,0xfe,0x10,0x10,0x90,0x90,0x10,0x10,0x50,0x20,
++0x4,0x4,0xff,0x5,0x2,0x4,0xa,0x31,0xc1,0x3f,0x0,0x0,0xc,0x3,0x0,0x0,0x40,0x44,0xfe,0x40,0x80,0x40,0x30,0xe,0x4,0xf0,0x20,0x40,0x80,0x0,0xc0,0x40,
++0x4,0x4,0xff,0x5,0x2,0xf,0x8,0xa,0x9,0x8,0xf,0x0,0xff,0x0,0x0,0x0,0x40,0x44,0xfe,0x40,0x20,0xf0,0x20,0x20,0x60,0x8,0xfc,0x8,0xc8,0x8,0x50,0x20,
++0x4,0x4,0xff,0x4,0x6,0x38,0x20,0x20,0x3e,0x20,0x20,0x26,0x38,0x20,0x0,0x0,0x40,0x44,0xfe,0x40,0x8,0xfc,0x88,0x88,0x88,0x88,0x88,0xa8,0x90,0x80,0x80,0x80,
++0x4,0x4,0xff,0x4,0x6,0x38,0x22,0x22,0x22,0x22,0x22,0x3c,0x24,0x8,0x10,0x60,0x40,0x44,0xfe,0x40,0x8,0xfc,0x88,0x88,0x88,0x88,0xc8,0xa8,0x90,0x80,0x80,0x80,
++0x4,0x4,0xff,0x4,0x0,0x7f,0x41,0x81,0x1,0x3f,0x1,0x1,0x1,0x1,0x7f,0x0,0x40,0x44,0xfe,0x40,0x0,0xfe,0x2,0x4,0x10,0xf8,0x0,0x0,0x0,0x8,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x0,0x7f,0x40,0x9f,0x4,0x5,0x3f,0x4,0x4,0x4,0x4,0x4,0x40,0x44,0xfe,0x40,0x0,0xfe,0x2,0xe4,0x20,0x20,0xa0,0x20,0x20,0x24,0x14,0x8,
++0x4,0x4,0xff,0x4,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x20,0x20,0x28,0x30,0x20,0x40,0x44,0xfe,0x40,0xf8,0x8,0x8,0xf8,0x80,0x88,0xfc,0x40,0x40,0x22,0x12,0xe,
++0x4,0x4,0xff,0x4,0x3f,0x4,0x4,0x8,0x10,0x60,0x1f,0x10,0x10,0x10,0x1f,0x10,0x40,0x44,0xfe,0x40,0xf8,0x8,0x8,0x8,0x50,0x20,0xf0,0x10,0x10,0x10,0xf0,0x10,
++0x4,0x4,0xff,0x4,0x0,0xff,0x4,0x4,0x3f,0x24,0x24,0x28,0x30,0x20,0x3f,0x20,0x40,0x44,0xfe,0x40,0x4,0xfe,0x40,0x48,0xfc,0x48,0x48,0x38,0x8,0x8,0xf8,0x8,
++0x4,0x4,0xff,0x4,0x1,0xff,0x1,0x3f,0x1,0x3f,0x21,0x3f,0x2,0xc,0x30,0xc0,0x40,0x44,0xfe,0x40,0x4,0xfe,0x0,0xf8,0x8,0xf8,0x0,0xfc,0x84,0x4c,0x30,0xe,
++0x4,0x4,0xff,0x4,0x1,0x1,0x7f,0x1,0x3,0x3c,0x0,0x7f,0x4,0x4,0x8,0x70,0x40,0x44,0xfe,0x40,0x0,0xf8,0x20,0x44,0x84,0x7c,0x10,0xf8,0x80,0x82,0x82,0x7e,
++0x4,0x4,0xff,0x4,0x20,0x20,0x3e,0x20,0x26,0x39,0x1,0xff,0x1,0x1,0x1,0x1,0x40,0x44,0xfe,0x40,0x80,0x98,0xe0,0x80,0x84,0x7c,0x0,0xfe,0x0,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x0,0x4,0x24,0x27,0x24,0x24,0x24,0x24,0x27,0xf8,0x40,0x0,0x40,0x44,0xfe,0x40,0x0,0x40,0x44,0x4c,0x50,0x60,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x4,0x4,0xff,0x4,0x1f,0x10,0x10,0x10,0x1f,0x0,0x3f,0x20,0x20,0x20,0x3f,0x20,0x40,0x44,0xfe,0x40,0xf0,0x10,0x10,0x10,0xf0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x4,0xff,0x4,0x3f,0x20,0x2f,0x20,0x27,0x24,0x24,0x24,0x27,0x20,0x20,0x20,0x40,0x44,0xfe,0x40,0xf8,0x8,0xe8,0x8,0xc8,0x48,0x48,0x48,0xc8,0x8,0x28,0x10,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x20,0x20,0x27,0x24,0x24,0x27,0x20,0x20,0x3f,0x20,0x40,0x44,0xfe,0x40,0x8,0xfc,0x8,0x48,0xe8,0x48,0x48,0xc8,0x8,0x8,0xf8,0x8,
++0x4,0x4,0xff,0x4,0x11,0x11,0x1f,0x21,0x1,0xff,0x3,0x5,0x9,0x11,0x61,0x1,0x40,0x44,0xfe,0x40,0x0,0x20,0xf0,0x0,0x4,0xfe,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x4,0x4,0xff,0x4,0x0,0x7d,0x4,0x8,0x13,0x3c,0x4,0x24,0x19,0xc,0x32,0xc1,0x40,0x44,0xfe,0x40,0x1c,0xe0,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x0,0x6,0xfc,
++0x4,0x4,0xff,0x4,0x1,0x3e,0x2,0xff,0x4,0x8,0x34,0xc4,0x4,0x4,0x8,0x10,0x40,0x44,0xfe,0x40,0xf0,0x0,0x4,0xfe,0x40,0x30,0x4e,0x44,0x40,0x40,0x40,0x40,
++0x4,0x4,0xff,0x4,0x8,0x8,0x10,0x1f,0x30,0x50,0x90,0x10,0x11,0x12,0x14,0x18,0x40,0x44,0xfe,0x40,0x50,0x48,0x40,0xfe,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x4,0x4,0xff,0x4,0x8,0x8,0x17,0x10,0x30,0x50,0x9f,0x10,0x10,0x10,0x17,0x10,0x40,0x44,0xfe,0x40,0x8,0x3c,0xc0,0x40,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x4,0x9,0x10,0x64,0xb,0x18,0x28,0xc8,0x8,0x8,0x8,0x8,0x40,0x44,0xfe,0x40,0x8,0xfc,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
++0x4,0x4,0xff,0x5,0x2,0x4,0x8,0x30,0xdf,0x1,0x1,0x1f,0x1,0x1,0x7f,0x0,0x40,0x44,0xfe,0x40,0x80,0x40,0x30,0xe,0xf4,0x0,0x20,0xf0,0x0,0x8,0xfc,0x0,
++0x4,0x4,0xff,0x5,0x2,0x4,0x8,0x30,0xcf,0x0,0x3f,0x2,0x4,0x8,0x1f,0x0,0x40,0x44,0xfe,0x40,0x80,0x40,0x30,0x4e,0xe4,0x0,0xf8,0x0,0x40,0x20,0xf0,0x10,
++0x4,0x4,0xff,0x14,0x10,0x3f,0x20,0x5f,0x90,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0x40,0x44,0xfe,0x40,0x8,0xfc,0x8,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xa8,0x10,
++0x4,0x4,0xff,0x4,0x2,0x7,0x8,0x14,0x23,0x4,0xf,0x38,0xc8,0x8,0xf,0x8,0x40,0x44,0xfe,0x40,0x0,0xf0,0x20,0xc0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x4,0xff,0x4,0x1,0x7f,0x8,0x6,0x1,0x2,0xc,0x34,0xc4,0x4,0x8,0x10,0x40,0x44,0xfe,0x40,0x8,0xfc,0x20,0xc0,0x0,0xc0,0x70,0x4e,0x44,0x40,0x40,0x40,
++0x4,0x4,0xff,0x4,0x1,0x7f,0x8,0x8,0x14,0x24,0x42,0x1,0x2,0x4,0x18,0x60,0x40,0x44,0xfe,0x40,0x8,0xfc,0x0,0x10,0x4c,0x44,0x80,0x0,0x80,0x60,0x1c,0x8,
++0x4,0x4,0xff,0x4,0x1,0xff,0x2,0x4,0x8,0x1f,0x4,0x4,0x4,0x8,0x10,0x60,0x40,0x44,0xfe,0x40,0x4,0xfe,0x0,0x40,0x20,0xf0,0x90,0x80,0x80,0x84,0x84,0x7c,
++0x4,0x4,0xff,0x4,0x20,0x18,0xb,0x40,0x20,0x28,0x10,0x20,0x60,0x20,0x2f,0x20,0x40,0x44,0xfe,0x40,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x4,0x4,0xff,0x4,0x40,0x7f,0x41,0x89,0xf,0x11,0x21,0x7f,0x1,0x1,0x1,0x1,0x40,0x44,0xfe,0x40,0x0,0xfe,0x2,0x24,0xf0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x40,0x7f,0x41,0x41,0xbd,0x5,0x9,0x9,0x11,0x61,0x5,0x2,0x40,0x44,0xfe,0x40,0x0,0xfe,0x2,0x14,0x20,0xc0,0x40,0x20,0x20,0x1c,0x0,0x0,
++0x4,0x4,0xff,0x4,0x1f,0x0,0xf,0x0,0x1f,0x0,0xff,0x8,0x4,0x4,0x0,0x0,0x40,0x44,0xfe,0x40,0xf0,0x10,0xf0,0x10,0xf0,0x24,0xfe,0x20,0x20,0x20,0xa0,0x40,
++0x4,0x4,0xff,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x14,0x12,0x11,0x10,0x14,0x18,0x10,0x40,0x44,0xfe,0x40,0xf0,0x10,0xf0,0x10,0xf8,0x10,0x20,0x40,0x80,0x60,0x1c,0x8,
++0x4,0x4,0xff,0x4,0x1f,0x10,0x10,0x1f,0x10,0x12,0x11,0x20,0x20,0x43,0x80,0x0,0x40,0x44,0xfe,0x40,0xf0,0x10,0x10,0xf0,0x40,0x20,0x90,0x8e,0x4,0x0,0xc0,0x20,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x0,0xc,0x2,0x18,0x4,0xff,0x1,0x2,0xc,0x30,0x40,0x44,0xfe,0x40,0x0,0xf8,0x8,0x90,0x80,0x80,0x84,0xfe,0x0,0x60,0x18,0x4,
++0x4,0x4,0xff,0x4,0x0,0x7e,0x4,0x8,0xe,0x38,0xc9,0x9,0xa,0x8,0x28,0x10,0x40,0x44,0xfe,0x40,0x20,0x20,0x20,0xa0,0xa8,0xa4,0x24,0x22,0x22,0x20,0xa0,0x40,
++0x4,0x4,0xff,0x4,0x10,0x10,0x23,0x7c,0x8,0x10,0x26,0x78,0x20,0xe,0x73,0x20,0x40,0x44,0xfe,0x40,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x4,0x4,0xff,0x4,0x10,0x10,0x22,0x7d,0x8,0x10,0x26,0x78,0x0,0xe,0x70,0x20,0x40,0x44,0xfe,0x40,0x8,0x8,0x8,0xfe,0x8,0x88,0x48,0x48,0x8,0x8,0x28,0x10,
++0x4,0x4,0xff,0x4,0x10,0x10,0x10,0xfd,0x12,0x10,0x10,0x10,0x1c,0xe1,0x42,0x4,0x40,0x44,0xfe,0x40,0x80,0x84,0xfe,0x4,0x48,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x4,0x4,0xff,0x5,0x1,0x3f,0x1,0x7f,0x40,0x9f,0x0,0x1,0x7f,0x1,0x5,0x2,0x40,0x44,0xfe,0x40,0x10,0xf8,0x0,0xfe,0x2,0xe4,0x80,0x8,0xfc,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x0,0x7c,0x44,0x47,0x44,0x7c,0x44,0x44,0x44,0x7c,0x44,0x0,0x40,0x44,0xfe,0x40,0x10,0x10,0x14,0xfe,0x10,0x90,0x50,0x50,0x10,0x10,0x50,0x20,
++0x4,0x4,0xff,0x4,0xf,0x8,0x8,0xf,0x1,0x3f,0x21,0x21,0x22,0x2c,0x20,0x20,0x40,0x44,0xfe,0x40,0xe0,0x20,0x20,0xe0,0x8,0xfc,0x8,0x8,0xc8,0x48,0x28,0x10,
++0x4,0x4,0xff,0x4,0x1,0x3f,0x1,0x7f,0x5,0x9,0x3f,0xc4,0x4,0x4,0x8,0x30,0x40,0x44,0xfe,0x40,0xf0,0x0,0x4,0xfe,0x40,0x30,0xce,0x44,0xf0,0x10,0x50,0x20,
++0x4,0x4,0xff,0x4,0x6,0x3c,0x4,0xff,0x4,0x5,0x6,0x1c,0x64,0x4,0x15,0x8,0x40,0x44,0xfe,0x40,0x60,0x50,0x44,0xfe,0x40,0x48,0x48,0x30,0x20,0x52,0x8a,0x6,
++0x4,0x4,0xff,0x14,0x10,0x1f,0x20,0x5f,0x12,0x11,0xff,0x22,0x21,0x3f,0x0,0x0,0x40,0x44,0xfe,0x40,0x10,0xf8,0x0,0xf0,0x10,0x14,0xfe,0x10,0x10,0xfc,0x50,0x20,
++0x4,0x4,0xff,0x4,0x8,0x8,0x14,0x15,0x36,0x54,0x94,0x14,0x14,0x10,0x11,0x12,0x40,0x44,0xfe,0x40,0x80,0x84,0xfe,0x88,0x88,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x4,0x4,0xff,0x4,0x8,0x8,0x10,0x17,0x30,0x52,0x91,0x11,0x11,0x10,0x1f,0x10,0x40,0x44,0xfe,0x40,0x80,0x40,0x48,0xfc,0x0,0x18,0x10,0x10,0x20,0x24,0xfe,0x0,
++0x4,0x4,0xff,0x5,0x2,0x4,0x8,0x3f,0xc1,0x1,0x3f,0x1,0x9,0x11,0x25,0x2,0x40,0x44,0xfe,0x40,0x80,0x40,0x30,0xee,0x4,0x10,0xf8,0x0,0x20,0x18,0x8,0x0,
++0x4,0x4,0xff,0x5,0x2,0x4,0x8,0x3f,0xc0,0x2,0x11,0x9,0x9,0x0,0x7f,0x0,0x40,0x44,0xfe,0x40,0x80,0x40,0x30,0xee,0x4,0x10,0x10,0x20,0x20,0x48,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x0,0x7f,0x11,0x9,0x3f,0x0,0x1,0x1,0xff,0x1,0x5,0x2,0x40,0x44,0xfe,0x40,0xf8,0x10,0x10,0x20,0xf0,0x40,0x80,0x4,0xfe,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x11,0x9,0x2,0xff,0x4,0x8,0x6,0x1,0x6,0x38,0x40,0x44,0xfe,0x40,0xf8,0x10,0x10,0x20,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x4,0x4,0xff,0x4,0x20,0x14,0xb,0x14,0x64,0xc,0x14,0x24,0xc5,0x5,0x2a,0x14,0x40,0x44,0xfe,0x40,0x50,0x48,0xfe,0x40,0x60,0xa0,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x4,0x4,0xff,0x4,0x20,0x14,0x8,0x14,0x64,0xd,0x14,0x24,0xc4,0x4,0x29,0x12,0x40,0x44,0xfe,0x40,0x20,0x20,0xa4,0xa4,0xa8,0x20,0x50,0x50,0x90,0x88,0xe,0x4,
++0x4,0x4,0xff,0x4,0x1,0x3f,0x8,0x4,0x4,0xff,0x1,0x1,0x3f,0x1,0x1,0x1,0x40,0x44,0xfe,0x40,0x10,0xf8,0x20,0x40,0x84,0xfe,0x0,0x10,0xf8,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x1,0x7f,0x40,0x9f,0x0,0x7f,0x4,0x4,0x4,0x8,0x10,0x60,0x40,0x44,0xfe,0x40,0x0,0xfe,0x2,0xf4,0x0,0xfc,0x80,0x80,0x80,0x84,0x84,0x7c,
++0x4,0x4,0xff,0x4,0x1,0x1f,0x10,0x1f,0x10,0x1f,0x12,0x11,0x10,0x14,0x18,0x10,0x40,0x44,0xfe,0x40,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x20,0xc0,0x60,0x1e,0x4,
++0x4,0x4,0xff,0x4,0x7f,0x42,0x8f,0x8,0xb,0x8,0x8,0xf,0x0,0x7f,0x0,0x0,0x40,0x44,0xfe,0x40,0xfe,0x2,0xe4,0x20,0x20,0xa0,0x48,0xfc,0x8,0xc8,0x28,0x10,
++0x4,0x4,0xff,0x4,0x10,0x17,0x20,0x7e,0xa,0x12,0x23,0x7c,0x0,0xe,0x70,0x20,0x40,0x44,0xfe,0x40,0x48,0xfc,0x40,0x48,0x48,0x48,0xf8,0x48,0x40,0x42,0x42,0x3e,
++0x4,0xff,0x5,0x3f,0x1,0x1f,0x1,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x40,0xfe,0x40,0xf8,0x0,0xf0,0x4,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x30,
++0x4,0x4,0xff,0x4,0x8,0x7f,0x8,0xf,0x8,0xf,0x8,0x8,0xff,0x4,0x8,0x30,0x40,0x44,0xfe,0x40,0x28,0xfc,0x20,0xe0,0x20,0xe0,0x20,0x24,0xfe,0x40,0x30,0x8,
++0x4,0x4,0xff,0x4,0x8,0x8,0xfe,0x8,0x1c,0x1a,0x28,0x48,0x89,0x9,0xa,0x8,0x40,0x44,0xfe,0x40,0x1c,0xe0,0x80,0x84,0xfe,0x90,0x90,0x90,0x10,0x10,0x10,0x10,
++0x4,0x4,0x7f,0x4,0x8,0xa,0x7f,0x8,0x1c,0x1a,0x29,0x48,0x88,0x8,0x9,0x8,0x40,0x44,0xfe,0x40,0x0,0x50,0x50,0x50,0x88,0xae,0x24,0x40,0x50,0x88,0xfc,0x4,
++0x8,0x8,0xff,0x8,0xf,0x1,0x3f,0x21,0x3f,0x1,0x7f,0x1,0x3f,0x1,0xff,0x0,0x20,0x24,0xfe,0x20,0xe0,0x8,0xfc,0x8,0xf8,0x0,0xfc,0x0,0xf8,0x0,0xfe,0x0,
++0x4,0x4,0xff,0x5,0x1,0x7f,0x2,0x4,0xf,0x30,0xdf,0x1,0x9,0x11,0x25,0x2,0x40,0x44,0xfe,0x40,0x8,0xfc,0x80,0x40,0xf0,0xe,0xf4,0x0,0x20,0x18,0x8,0x0,
++0x4,0xff,0x5,0x7f,0x1,0x3f,0x1,0xff,0x1,0x3f,0x2,0xff,0x4,0x8,0x7,0x38,0x40,0xfe,0x40,0xfc,0x0,0xf0,0x14,0xfe,0x10,0xf0,0x4,0xfe,0x40,0x80,0x80,0x78,
++0x4,0x4,0xff,0x4,0x10,0x10,0xff,0x11,0x11,0x1d,0xf2,0x52,0x14,0x18,0x50,0x23,0x40,0x44,0xfe,0x40,0x90,0x88,0xfe,0x0,0xf8,0x88,0x90,0x50,0x20,0x50,0x8e,0x4,
++0x4,0x4,0xff,0x4,0x8,0xf,0x8,0xa,0xff,0x8,0x2c,0x2b,0x49,0x88,0x28,0x11,0x40,0x44,0xfe,0x40,0x0,0x7c,0x4,0x44,0x44,0x28,0x28,0x10,0x28,0x48,0x86,0x4,
++0x4,0x4,0xff,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x0,0x3f,0x20,0x3f,0x20,0x3f,0x20,0x40,0x44,0xfe,0x40,0xf0,0x10,0xf0,0x10,0xf0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x4,0x4,0xff,0x4,0x10,0x10,0x7c,0x54,0x54,0x55,0x55,0x55,0x5d,0x11,0x11,0x11,0x40,0x44,0xfe,0x40,0x20,0x24,0x3e,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x4,0x4,0xff,0x4,0xd,0x31,0x21,0x21,0x3d,0x21,0x21,0x3f,0x2,0x4,0x18,0x60,0x40,0x44,0xfe,0x40,0x8,0x7c,0x8,0x8,0x78,0x8,0x8,0xf8,0x80,0x60,0x1c,0x8,
++0x4,0xff,0x4,0x9,0x8,0x1f,0x10,0x30,0x5f,0x90,0x10,0x1f,0x10,0x10,0x1f,0x10,0x40,0xfe,0x40,0x0,0x88,0xfc,0x80,0x90,0xf8,0x80,0x90,0xf8,0x80,0x88,0xfc,0x0,
++0x4,0x4,0xff,0x5,0x2,0x3f,0x21,0x3f,0x22,0x3f,0x5,0x9,0xff,0x1,0x1,0x1,0x40,0x44,0xfe,0x40,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0x4,0xfe,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x3d,0x25,0x25,0x3d,0x25,0x25,0x3d,0x25,0x25,0x45,0x55,0x89,0x40,0x44,0xfe,0x40,0xf8,0x8,0x48,0x30,0x0,0xf8,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x4,0x4,0xff,0x4,0xf,0x8,0x10,0x3f,0x51,0x11,0x1f,0x12,0x2,0x4,0x18,0x60,0x40,0x44,0xfe,0x40,0xe0,0x20,0x48,0xfc,0x8,0x8,0xf8,0x80,0xa0,0x94,0x84,0x7c,
++0x4,0x4,0xff,0x4,0x8,0xf,0x10,0x26,0x78,0xa0,0x24,0x3e,0x20,0x20,0x3f,0x20,0x40,0x44,0xfe,0x40,0x0,0xf0,0x20,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x4,0x4,0xff,0x4,0x1,0x7f,0x8,0x8,0x14,0x22,0x1,0xff,0x1,0x1,0x1,0x1,0x40,0x44,0xfe,0x40,0x8,0xfc,0x20,0x20,0x50,0x88,0x0,0xfe,0x0,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x10,0x8,0xff,0x10,0x1e,0x13,0x12,0x22,0x22,0x42,0x8a,0x4,0x40,0x44,0xfe,0x40,0x20,0x20,0x50,0x50,0x8e,0x4,0x60,0x10,0x0,0xc0,0x30,0x8,
++0x4,0x4,0xff,0x4,0x40,0x33,0x12,0x82,0x4b,0x12,0x22,0xe3,0x22,0x22,0x3f,0x20,0x40,0x44,0xfe,0x40,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x14,0xfe,0x0,
++0x4,0xff,0x4,0x41,0x7f,0x40,0x80,0x7f,0x4,0x4,0xf,0x18,0x28,0x48,0xf,0x8,0x40,0xfe,0x40,0x0,0xfe,0x2,0x4,0xfc,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x4,0xff,0x4,0x41,0x7f,0x40,0x8f,0x8,0x8,0xf,0x8,0xf,0x8,0x8,0xf,0x8,0x40,0xfe,0x40,0x0,0xfe,0x2,0xe4,0x20,0x20,0xe0,0x0,0xf0,0x10,0x10,0xf0,0x0,
++0x4,0x4,0xff,0x4,0x41,0x7f,0x50,0x9e,0x12,0x22,0x52,0xc,0x4,0x8,0x30,0x40,0x40,0x44,0xfe,0x40,0x0,0xfe,0x2,0xfc,0x88,0x88,0x88,0xa8,0x92,0x82,0x7e,0x0,
++0x4,0x4,0xff,0x4,0x40,0x7f,0x42,0x84,0x1f,0x1,0x2,0x1f,0x9,0x9,0x31,0x3,0x40,0x44,0xfe,0x40,0x0,0xfe,0x2,0x24,0xc0,0x0,0x20,0xf0,0x20,0x18,0x8,0x0,
++0x4,0x4,0xff,0x4,0x7c,0x9,0x11,0x11,0x15,0x39,0xd2,0x12,0x12,0x14,0x58,0x20,0x40,0x44,0xfe,0x40,0x1c,0xe0,0x50,0x50,0x50,0x50,0x50,0x48,0x48,0x54,0xf6,0x0,
++0x4,0x4,0xff,0x4,0x1f,0x0,0x40,0x51,0x49,0x45,0x45,0x49,0x53,0x41,0x7f,0x40,0x40,0x44,0xfe,0x40,0xe0,0x20,0x44,0x94,0x24,0x44,0x44,0x34,0x14,0x4,0xfc,0x4,
++0x4,0xff,0x4,0x8,0x7e,0x8,0x3e,0x8,0x7e,0x9,0x1,0xff,0x2,0x4,0x18,0x60,0x40,0xfe,0x40,0x8,0xfc,0x48,0x48,0x48,0xa8,0x10,0x4,0xfe,0x80,0x40,0x30,0xc,
++0x4,0x4,0xff,0x4,0x8,0x7f,0x8,0x8,0x7f,0x0,0x8,0x7f,0x8,0xf,0x78,0x20,0x40,0x44,0xfe,0x40,0x8,0x8,0xfe,0x8,0x48,0x28,0x28,0x8,0x8,0x8,0x28,0x10,
++0x4,0xff,0x4,0x8,0x3f,0x8,0xf,0x8,0xf,0x8,0xff,0x12,0x14,0x10,0x1f,0x0,0x40,0xfe,0x40,0x20,0xf8,0x20,0xe0,0x20,0xe0,0x24,0xfe,0x80,0x40,0x10,0xf8,0x0,
++0x4,0x4,0xff,0x4,0x8,0x8,0x7e,0x8,0x18,0x1c,0x2a,0x28,0x48,0x88,0x8,0x8,0x40,0x44,0xfe,0x40,0x4,0xfe,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x20,0x3f,0x24,0x3f,0x25,0x29,0x2a,0x44,0x5b,0x80,0x40,0x44,0xfe,0x50,0x48,0xfc,0x40,0xc8,0x48,0xd0,0x20,0x20,0x60,0xa2,0x12,0xe,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x20,0x2f,0x28,0x2a,0x2a,0x2a,0x2a,0x45,0x44,0x98,0x40,0x44,0xfe,0x50,0x28,0xfc,0x20,0xa0,0xa4,0xa4,0xa8,0xa8,0x90,0x32,0xca,0x86,
++0x4,0x4,0xff,0x4,0x20,0x3e,0x20,0x2e,0x72,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x40,0x44,0xfe,0x40,0x80,0x98,0xe0,0x84,0x7c,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,
++0x4,0xff,0x4,0xf,0x8,0xf,0x0,0xff,0x8,0xf,0x8,0xf,0x8,0x7f,0x0,0x0,0x44,0xfe,0x40,0xe0,0x20,0xe0,0x4,0xfe,0x20,0xe0,0x20,0xe0,0x28,0xfc,0x20,0x20,
++0x4,0xff,0x5,0x1f,0x11,0x1f,0x1,0xff,0x0,0x1f,0x10,0x11,0x11,0x12,0xc,0x30,0x40,0xfe,0x40,0xf0,0x10,0xf0,0x4,0xfe,0x10,0xf8,0x10,0x10,0x10,0x90,0x60,0x1c,
++0x4,0x4,0xff,0x4,0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x2,0x29,0x29,0x48,0x7,0x40,0x44,0xfe,0x40,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,0x0,0x8,0x24,0x24,0xe0,
++0x4,0xff,0x4,0x3e,0x22,0x3e,0x0,0x1f,0x0,0xff,0x8,0xf,0x0,0x0,0x0,0x0,0x40,0xfe,0x40,0xf8,0x88,0xf8,0x0,0xf0,0x4,0xfe,0x0,0xf0,0x10,0x10,0xa0,0x40,
++0x4,0x4,0xff,0x4,0xb,0xa,0x12,0x13,0x30,0x5f,0x90,0x10,0x11,0x12,0x14,0x10,0x40,0x44,0xfe,0x40,0xf8,0x8,0x8,0xf8,0x40,0xfe,0x40,0xe0,0x50,0x4e,0x44,0x40,
++0x4,0x4,0xff,0x14,0x20,0x7d,0x45,0x45,0x45,0x7d,0x45,0x45,0x45,0x7d,0x44,0x0,0x40,0x44,0xfe,0x40,0x4,0xfe,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,0x2,0xfe,0x0,
++0x4,0xff,0x5,0x7f,0x0,0x1f,0x10,0x1f,0x40,0x7f,0x40,0x9f,0x1,0x1,0x5,0x2,0x40,0xfe,0x40,0xfc,0x0,0xf0,0x10,0xf0,0x0,0xfe,0x2,0xf4,0x0,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x11,0x9,0x7f,0x5,0x39,0x2,0xff,0x4,0xc,0x3,0x6,0x38,0x40,0x44,0xfe,0x40,0x10,0x20,0xfc,0x40,0x38,0x0,0xfe,0x40,0x40,0x80,0x60,0x18,
++0x4,0x4,0xff,0x4,0x20,0x1b,0x4a,0x22,0xa,0x12,0x22,0x64,0x24,0x24,0x28,0x30,0x40,0x44,0xfe,0x40,0x1c,0xe0,0xc,0xf0,0xa4,0xa8,0x90,0x90,0x90,0xa8,0xce,0x84,
++0x4,0xff,0x4,0x41,0x7f,0x40,0x9f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x0,0xff,0x0,0x40,0xfe,0x40,0x0,0xfe,0x2,0xf4,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,
++0x4,0x4,0xff,0x4,0x7e,0x42,0x42,0x7e,0x40,0x49,0x7c,0x40,0x44,0x7e,0x41,0x46,0x40,0x44,0xfe,0x40,0xfc,0x4,0x4,0xfc,0x0,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x4,0xff,0x5,0x7f,0x1,0x1f,0x2,0xff,0x4,0xf,0x31,0xdf,0x5,0x9,0x31,0x1,0x40,0xfe,0x40,0xfc,0x0,0xf0,0x4,0xfe,0x40,0xf0,0xe,0xf4,0x40,0x30,0x8,0x0,
++0x4,0xff,0x5,0x3f,0x1,0xff,0x1,0x7,0x1c,0x67,0x0,0xf,0x8,0xf,0x8,0xf,0x40,0xfe,0x40,0xd0,0x24,0xfe,0x0,0xe8,0x8,0xf8,0x0,0xe0,0x20,0xe0,0x20,0xe0,
++0x4,0xff,0x4,0x3f,0x20,0x2f,0x20,0x3f,0x29,0x2a,0x2c,0x20,0x5f,0x44,0x82,0x0,0x40,0xfe,0x40,0xfc,0x0,0xf0,0x4,0xfe,0x10,0xe0,0x1e,0x20,0xfc,0x20,0x20,0x60,
++0x4,0xff,0x4,0x1f,0x10,0x1f,0x10,0xff,0x8,0x3f,0xc0,0x8,0xf,0x0,0x3f,0x0,0x40,0xfe,0x40,0xf0,0x10,0xf0,0x14,0xfe,0x20,0xf8,0x26,0x20,0xf8,0x8,0xc8,0x30,
++0x4,0x4,0xff,0x4,0x1f,0x11,0x11,0x1f,0x11,0x12,0x14,0x1f,0x29,0x28,0x48,0x7,0x40,0x44,0xfe,0x40,0xf0,0x10,0x10,0xf0,0x10,0x90,0x50,0xf0,0x8,0x84,0x24,0xe0,
++0x4,0x4,0xff,0x4,0x8,0xf,0x10,0x11,0x30,0x5f,0x90,0x13,0x12,0x12,0x13,0x12,0x40,0x44,0xfe,0x80,0x48,0xfc,0x0,0x10,0xa4,0xfe,0x0,0xf8,0x8,0x8,0xf8,0x8,
++0x4,0xff,0x4,0x5,0xa,0x14,0xef,0x0,0x7e,0x2,0x12,0x6,0x1a,0x63,0xa,0x4,0x40,0xfe,0x40,0x40,0x20,0x50,0xee,0x4,0xf8,0x8,0x48,0x18,0x68,0x88,0x28,0x10,
++0x4,0xff,0x5,0x7f,0x0,0x1f,0x10,0x1f,0x0,0x7f,0x40,0x4f,0x48,0x4f,0x40,0x40,0x40,0xfe,0x40,0xfc,0x0,0xf0,0x10,0xf0,0x4,0xfe,0x4,0xe4,0x24,0xe4,0x14,0x8,
++0x4,0x4,0x7f,0x5,0x1f,0x92,0x52,0x13,0x34,0x50,0x9f,0x10,0x20,0x21,0x42,0xc,0x40,0x44,0xfe,0x40,0xfc,0x0,0x10,0xf8,0x40,0x44,0xfe,0xa0,0xa0,0x10,0xe,0x4,
++0x4,0xff,0x4,0x1,0xff,0x14,0x13,0x14,0x1f,0x1,0x7f,0x42,0x44,0x4f,0x40,0x40,0x40,0xfe,0x40,0x4,0xfe,0x50,0x90,0x50,0xf0,0x4,0xfe,0x4,0x24,0xf4,0x14,0x8,
++0x4,0xff,0x4,0x1,0x3f,0x4,0x7f,0x42,0x81,0x3f,0x4,0x7,0x8,0x8,0x10,0x60,0x40,0xfe,0x40,0x10,0xf8,0x40,0xfe,0x2,0x14,0xf8,0x0,0xe0,0x20,0x20,0xa0,0x40,
++0x4,0xff,0x14,0x8,0x7f,0x4,0x3f,0x4,0xff,0x4,0x3f,0xc,0x14,0x24,0xc4,0x4,0x40,0xfe,0x50,0x20,0xfc,0x40,0xf8,0x48,0xfe,0x48,0xf8,0x60,0x50,0x4e,0x44,0x40,
++0x4,0x4,0xff,0x4,0x22,0x14,0xff,0x8,0x49,0x49,0x7f,0x9,0x8,0x8,0x10,0x21,0x40,0x44,0xfe,0x40,0x7c,0x44,0xc4,0x7c,0x44,0x44,0x7c,0x44,0x44,0x84,0x94,0x8,
++0x4,0x4,0xff,0x4,0x20,0x1b,0xa,0x43,0x26,0xb,0x12,0x72,0x12,0x12,0x13,0x12,0x40,0x44,0xfe,0x80,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x88,0x50,0x20,0x90,0xe,0x4,
++0x4,0x4,0xff,0x4,0x7f,0x41,0x82,0xc,0x37,0xc1,0x1f,0x1,0x9,0x5,0x7f,0x0,0x40,0x44,0xfe,0x40,0xfe,0x2,0x84,0x60,0xde,0x4,0xf0,0x0,0x20,0x48,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x7d,0x4,0x28,0x11,0xfd,0x15,0x11,0x11,0x11,0x10,0x50,0x23,0x40,0x44,0xfe,0x40,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x44,0x58,0x84,0x2,
++0x4,0x4,0xff,0x4,0x9,0xff,0x8,0x7f,0x49,0x49,0x7f,0x18,0x1c,0x2a,0xc8,0x9,0x40,0x44,0xfe,0x40,0x20,0xa4,0x7e,0x44,0xa8,0x20,0x20,0x20,0x50,0x48,0x8e,0x4,
++0x4,0xff,0x4,0x3f,0x24,0x3f,0x40,0x7f,0x40,0x9f,0x4,0x7,0xa,0x9,0x1f,0x0,0x40,0xfe,0x40,0xf8,0x48,0xf8,0x0,0xfe,0x22,0xf4,0x0,0xc0,0x40,0x44,0xc4,0x3c,
++0x4,0x4,0xff,0x5,0xa,0x37,0x24,0x27,0x24,0x2f,0x30,0x4,0x4,0x8,0x30,0xc0,0x40,0x44,0xfe,0x40,0x8,0xfc,0x48,0xc8,0x48,0xc8,0x38,0x40,0x40,0x42,0x42,0x3e,
++0x4,0x4,0xff,0x4,0x8,0x11,0x25,0x49,0x17,0x30,0x52,0x92,0x13,0x12,0x14,0x18,0x40,0x44,0xfe,0x40,0x48,0x7c,0x40,0x44,0xfe,0x40,0x48,0x7c,0x40,0xc0,0x3e,0x8,
++0x4,0x4,0xff,0x4,0x8,0x14,0x22,0x41,0xbe,0x0,0x49,0x29,0x2a,0x7,0x78,0x20,0x40,0x44,0xfe,0x40,0x20,0x24,0x3e,0x44,0xa4,0x24,0x24,0x28,0x10,0x28,0x46,0x84,
++0x4,0x4,0xff,0x4,0x11,0x11,0xfe,0x24,0x20,0x3c,0x25,0x27,0x24,0x44,0x54,0x89,0x40,0x44,0xfe,0x40,0x4,0xfe,0x0,0x88,0xfc,0xa0,0x24,0xfe,0x50,0x50,0x8e,0x4,
++0x4,0x4,0xff,0x4,0x17,0x45,0x44,0x4f,0x58,0x6f,0x48,0x4f,0x48,0x4f,0x48,0x40,0x40,0x44,0xfe,0x40,0xfc,0x4,0xa4,0xf4,0x84,0xe4,0x84,0xe4,0x84,0xf4,0x14,0x8,
++0x4,0xff,0x24,0x13,0x42,0x2b,0x12,0x63,0x22,0x23,0x1,0xff,0x5,0x19,0x61,0x1,0x40,0xfe,0x40,0xfc,0x0,0xf8,0x8,0xf8,0x0,0xfc,0x0,0xfe,0x40,0x30,0xc,0x0,
++0x4,0xff,0x4,0x1,0x7f,0x40,0x84,0x3e,0x0,0xff,0x14,0x14,0x14,0x25,0x44,0x83,0x40,0xfe,0x40,0x0,0xfe,0x42,0x74,0x40,0xf8,0x8,0x50,0x20,0x50,0x8a,0x2,0xfe,
++0x4,0xff,0x4,0x1,0x7f,0x48,0x88,0x17,0x30,0x53,0x92,0x13,0x12,0x12,0x13,0x12,0x40,0xfe,0x40,0x0,0xfe,0x2,0x8,0xfc,0x40,0xf8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x4,0xff,0x4,0x3e,0x12,0xa,0x13,0x22,0xc,0x31,0xc6,0x18,0x7,0x18,0x3,0x3c,0x40,0xfe,0x40,0xf8,0x48,0x28,0x48,0x88,0x60,0x98,0x6,0xc0,0x18,0x60,0x80,0x0,
++0x4,0xff,0x5,0x7f,0x1,0x1f,0x11,0x1f,0x11,0x1f,0x1,0x7f,0x12,0x51,0x50,0x8f,0x40,0xfe,0x40,0xfc,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x8,0xfc,0x0,0x14,0x12,0xf2,
++0x4,0xff,0x4,0x7f,0x4,0x3f,0x24,0x3f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x1,0x1,0x40,0xfe,0x40,0xfc,0x40,0xf8,0x48,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,0x0,
++0x4,0xff,0x4,0x3f,0x28,0x25,0x3f,0x22,0x2a,0x2a,0x2a,0x2f,0x42,0x42,0x84,0x8,0x40,0xfe,0x40,0xfc,0xa0,0x20,0xbe,0x42,0x94,0x90,0x90,0xa8,0xa8,0x28,0x46,0x84,
++0x4,0xff,0x4,0xff,0x10,0x31,0x4a,0x96,0x25,0x4d,0x15,0x25,0x44,0x84,0x28,0x10,0x40,0xfe,0x40,0x10,0x50,0x7c,0x90,0x10,0x7c,0x10,0x14,0xfe,0x80,0x40,0x3e,0xc,
++0x4,0xff,0x4,0x1f,0x10,0x1f,0x10,0xff,0x21,0x3f,0x21,0x3f,0x21,0xff,0x1,0x1,0x40,0xfe,0x40,0xf0,0x10,0xf0,0x14,0xfe,0x0,0x7c,0x44,0x28,0x10,0xa8,0x4e,0x84,
++0x4,0xff,0x4,0x3e,0x22,0x3e,0x0,0xff,0x22,0x3e,0x22,0x3e,0x22,0xff,0x2,0x2,0x40,0xfe,0x40,0x10,0x48,0x48,0x40,0xfe,0x40,0x48,0x48,0x30,0x20,0x52,0x8a,0x4,
++0x4,0xff,0x4,0x3f,0x24,0x3f,0x0,0x7f,0x40,0x9f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x40,0xfe,0x40,0xf8,0x48,0xf8,0x0,0xfe,0x2,0xf4,0x10,0xf0,0x10,0xf0,0x10,0xf0,
++0x4,0xff,0x4,0x3f,0x9,0x5,0xff,0x5,0x9,0x31,0xdf,0x11,0x1f,0x11,0x1f,0x10,0x40,0xfe,0x40,0xf8,0x20,0x44,0xfe,0x40,0x20,0x18,0xf6,0x10,0xf0,0x10,0xf0,0x10,
++0x4,0xff,0x4,0x22,0x14,0x7f,0x49,0x7f,0x49,0x7f,0x8,0xff,0x8,0x8,0x9,0x8,0x40,0xfe,0x40,0xc,0x70,0x40,0x40,0x7e,0x48,0x48,0x48,0x48,0x88,0x88,0x8,0x8,
++0x4,0x4,0xff,0x4,0x3e,0x20,0x3d,0x20,0x3c,0x20,0xff,0x10,0x24,0x24,0x7d,0x2,0x40,0x44,0xfe,0x40,0x90,0x90,0xfc,0x90,0x90,0x94,0xfe,0x0,0x90,0x88,0x4,0x4,
++0x4,0xff,0x4,0x0,0x7e,0x11,0x10,0x1c,0x25,0x54,0x8,0x9,0x10,0x20,0x43,0x0,0x20,0xfe,0x20,0x50,0x50,0xdc,0x50,0x50,0xdc,0x50,0x50,0xdc,0x50,0x54,0xfe,0x0,
++0x4,0xff,0x4,0x3f,0x24,0x3f,0x0,0x7f,0x40,0x9f,0x8,0x1e,0x32,0x4c,0x8,0x70,0x40,0xfe,0x40,0xf8,0x48,0xf8,0x0,0xfe,0x2,0xf4,0x80,0x90,0xa0,0xc4,0x84,0x7c,
++0x4,0xff,0x4,0x12,0x1a,0x2a,0x4f,0x90,0x2f,0x60,0xa7,0x25,0x25,0x29,0x28,0x30,0x40,0xfe,0x40,0x20,0xa4,0xbe,0xc4,0x24,0xa4,0x28,0x28,0x10,0x90,0x28,0x46,0x84,
++0x4,0xff,0x5,0x3f,0x8,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x9,0x28,0x28,0x47,0x40,0xfe,0x40,0xf8,0x20,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0x88,0x24,0xe4,
++0x4,0x4,0xff,0x5,0xff,0x10,0x14,0x25,0x7a,0x10,0x24,0x7c,0x4,0x8,0x10,0x60,0x40,0x40,0xfe,0x40,0xfe,0xa0,0x94,0xfe,0x90,0xfc,0x90,0xfc,0x90,0x94,0xfe,0x80,
++0x4,0x4,0xff,0x4,0x49,0x2a,0xff,0x2a,0x49,0x10,0xff,0x22,0x64,0x18,0x26,0x41,0x40,0x44,0xfe,0x40,0x20,0x24,0x7e,0x84,0x44,0x48,0x48,0x30,0x20,0x50,0x8e,0x4,
++0x4,0x4,0xff,0x4,0x3e,0x23,0x22,0x3e,0x21,0x20,0x3e,0x53,0x52,0x92,0x1e,0x10,0x40,0x44,0xfe,0x40,0x20,0xfc,0x88,0x50,0xfe,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,
++0x4,0xff,0x24,0x23,0x22,0xfa,0x4a,0x4b,0x4a,0x92,0x52,0x22,0x55,0x4c,0x88,0x10,0x40,0xfe,0x40,0xfc,0x0,0xf8,0x0,0xfe,0xa8,0x90,0xce,0x8,0xfe,0x88,0x48,0x18,
++0x4,0xff,0x8,0x3f,0xa,0x9,0x48,0x7f,0x40,0x9f,0x4,0xf,0x1,0x1f,0x1,0x7f,0x40,0xfe,0x20,0xf8,0x20,0x20,0xa0,0xfe,0x2,0xf4,0x40,0xe0,0x0,0xf0,0x0,0xfc,
++0x4,0xff,0x4,0x7f,0x1,0x7f,0x51,0x8d,0x11,0x7f,0x2,0x3f,0x24,0x24,0x24,0x20,0x40,0xfe,0x40,0xfc,0x0,0xfe,0x12,0x64,0x10,0xfc,0x0,0xf8,0x48,0x48,0x48,0x18,
++0x4,0xff,0x4,0x3f,0x1,0xff,0x1,0x3f,0x25,0x3f,0x1,0x3f,0x1,0x7f,0x24,0x42,0x40,0xfe,0x40,0xf8,0x0,0xfe,0x0,0xf8,0x48,0xf8,0x0,0xf8,0x0,0xfc,0x88,0x44,
++0x4,0xff,0x14,0x10,0x3e,0x44,0x88,0x7f,0x49,0x7f,0x49,0x7f,0x0,0xf,0xf0,0x0,0x40,0xfe,0x40,0x44,0x28,0xfe,0x10,0x10,0x7c,0x10,0x10,0xfe,0x10,0x10,0x10,0x10,
++0x4,0xff,0x5,0x7f,0x9,0x8,0x7f,0x40,0x4f,0x48,0x4f,0x1,0xff,0x5,0x19,0x61,0x40,0xfe,0x40,0xfc,0x20,0xa0,0xfc,0x4,0xe4,0x24,0xec,0x0,0xfe,0x40,0x30,0xc,
++0x4,0xff,0x4,0x3e,0x8,0x7e,0x18,0x2d,0x4a,0x4,0x19,0xe9,0x5,0x9,0x15,0x2,0x40,0xfe,0x40,0x44,0x7e,0x94,0x24,0x44,0x98,0x40,0x30,0x2e,0x40,0x20,0x10,0x0,
++0x4,0xff,0x4,0x3f,0x1,0x7f,0x51,0x8d,0x10,0x1f,0x30,0x5f,0x90,0x1f,0x10,0x1f,0x40,0xfe,0x40,0xf8,0x0,0xfe,0x12,0x64,0x90,0xfc,0x80,0xf8,0x80,0xf8,0x80,0xfc,
++0x4,0xff,0x4,0x40,0x30,0x17,0x4,0x5,0xf4,0x15,0x16,0x15,0x14,0x19,0x28,0x47,0x40,0xfe,0x40,0x78,0x40,0xfc,0x44,0xf0,0x44,0x3c,0xa8,0x68,0xa8,0x24,0x40,0xfe,
++0x4,0xff,0x4,0x12,0x13,0x24,0x4f,0x95,0x27,0x65,0xa7,0x21,0x2f,0x21,0x22,0x2c,0x40,0xfe,0x40,0x0,0xdc,0x80,0xc0,0x7e,0xc8,0x48,0xc8,0x8,0xe8,0x8,0x88,0x58,
++0x4,0xff,0x24,0x3f,0x40,0xbf,0x29,0xff,0x25,0x3f,0x2,0xf,0x2,0x1f,0x5,0x39,0x40,0xfe,0x20,0xa4,0x7e,0x84,0x24,0xa8,0x10,0x2e,0x44,0xe0,0x20,0xf0,0x40,0x38,
++0x4,0xff,0x14,0x3f,0x62,0x3e,0x21,0x3e,0x23,0x3e,0x1,0xff,0x5,0x19,0x61,0x1,0x40,0xfe,0x20,0xfc,0x88,0x50,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x40,0x30,0xc,0x0,
++0x2,0x7f,0x2,0x3f,0x22,0x3f,0x2b,0x32,0x21,0x2f,0x21,0x2f,0x41,0x5f,0x81,0x1,0x20,0xfe,0xa0,0xfc,0x10,0xfe,0x54,0x92,0x20,0x3c,0x20,0x3c,0x20,0x3e,0x20,0x20,
++0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,0x4,0xff,0x4,0x4,0x8,0x8,0x10,0x20,0x0,0x0,0x0,0x0,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x2,0x1,0x7f,0x4,0x14,0x24,0x48,0x10,0x4,0x4,0xff,0x4,0x4,0x8,0x10,0x20,0x0,0x8,0xfc,0x40,0x50,0x4c,0xc4,0x0,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x1,0x1,0xff,0x2,0x4,0x8,0x30,0xc9,0x9,0x9,0x9,0x9,0x11,0x11,0x21,0x0,0x0,0x4,0xfe,0x80,0x40,0x30,0xe,0x24,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x1,0x1,0xff,0x2,0x4,0x8,0x3f,0xd0,0x14,0x12,0x11,0x12,0x14,0x18,0x1f,0x0,0x0,0x4,0xfe,0x80,0x40,0x20,0xf8,0x26,0x40,0x80,0x0,0x80,0x60,0x20,0xf8,0x0,
++0x1,0x1,0xff,0x2,0x4,0x8,0x3f,0xc8,0xf,0x8,0xf,0x8,0x8,0x7f,0x0,0x0,0x0,0x4,0xfe,0x80,0x40,0x20,0xf8,0x26,0xe0,0x20,0xe0,0x28,0xfc,0x20,0x20,0x20,
++0x2,0x1,0x7f,0x4,0x14,0x24,0x48,0x11,0x1,0xff,0x2,0x2,0x4,0x8,0x30,0xc0,0x0,0x8,0xfc,0x40,0x50,0x4c,0xc4,0x0,0x4,0xfe,0x80,0x80,0x40,0x30,0xe,0x4,
++0x0,0x7f,0x22,0x11,0x12,0x4,0x1f,0x2,0x4,0x1f,0x1,0xff,0x1,0x2,0xc,0x70,0x3c,0xc8,0x8,0x10,0x40,0x20,0xf0,0x0,0x20,0xf0,0x4,0xfe,0x0,0x80,0x60,0x1c,
++0x4,0x24,0x24,0x3d,0x4,0x7c,0x24,0x25,0x44,0x1,0xff,0x1,0x2,0x4,0x18,0x60,0x20,0x20,0x28,0xfc,0x20,0x20,0x28,0xfc,0x0,0x4,0xfe,0x0,0x80,0x40,0x30,0xe,
++0x10,0x10,0x10,0xfe,0x29,0x46,0xfd,0x1,0xff,0x21,0x3d,0x5,0x5,0x5,0x28,0x10,0x80,0x80,0x88,0xfc,0x8,0x8,0xe8,0x28,0x28,0xe8,0x28,0x10,0x2,0x2,0xfe,0x0,
++0x2,0x2,0x2,0x2,0xff,0x2,0x2,0x2,0x2,0x4,0x4,0x4,0x8,0x10,0x20,0x40,0x0,0x0,0x0,0x4,0xfe,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x84,0x84,0x7c,0x0,
++0x20,0x20,0x20,0x20,0xfd,0x29,0x2a,0x28,0x28,0x28,0x28,0x28,0x28,0x48,0x47,0x80,0x80,0x80,0x88,0xfc,0x8,0x8,0x88,0x48,0x48,0x8,0x8,0x88,0x52,0x22,0xfe,0x0,
++0x20,0x20,0x20,0x20,0xfd,0x2a,0x2c,0x28,0x28,0x28,0x29,0x29,0x2a,0x48,0x47,0x80,0x20,0x20,0x50,0x90,0x8,0x6,0x94,0x90,0x90,0x90,0x10,0x10,0x12,0x2,0xfe,0x0,
++0x20,0x22,0x22,0x22,0xfe,0x2a,0x28,0x28,0x2b,0x2a,0x2a,0x2a,0x2f,0x48,0x47,0x80,0x90,0x90,0xa0,0xfc,0x80,0x90,0x88,0x80,0xf8,0xa8,0xa8,0xa8,0xfe,0x2,0xfe,0x0,
++0x10,0x10,0x10,0x10,0xfc,0x10,0x10,0x14,0x18,0x30,0xd0,0x10,0x10,0x10,0x50,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x12,0x11,0x12,0xfe,0x12,0x12,0x16,0x1a,0x32,0xd2,0x12,0x12,0x12,0x52,0x20,0x0,0x4,0x7e,0x84,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x14,0x8,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x17,0x14,0x18,0x31,0xd0,0x13,0x10,0x10,0x50,0x20,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x80,0x80,0xf8,0x8,0x10,0xd0,0x20,0x10,0x8,
++0x10,0x10,0x10,0x10,0xfb,0x12,0x12,0x1b,0x32,0xd2,0x13,0x12,0x10,0x10,0x50,0x20,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x40,0x40,0x40,0x40,
++0x10,0x10,0x10,0x11,0xfd,0x13,0x15,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x51,0x21,0x88,0x88,0x88,0x8,0x8,0xfe,0x8,0x48,0x28,0x28,0x8,0x8,0x8,0x8,0x28,0x10,
++0x10,0x10,0x10,0x11,0xff,0x10,0x11,0x15,0x19,0x37,0xd1,0x11,0x11,0x11,0x52,0x24,0x40,0x40,0x90,0x8,0xfc,0x4,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x11,0x11,0x12,0xfa,0x14,0x1f,0x11,0x1a,0x32,0xd4,0x1f,0x10,0x10,0x50,0x21,0x20,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xa4,0xa4,0x44,0x44,0x94,0x8,
++0x10,0x10,0x10,0x10,0xff,0x10,0x10,0x17,0x18,0x30,0xd3,0x12,0x12,0x12,0x53,0x22,0x40,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x17,0x10,0xfc,0x17,0x10,0x15,0x1a,0x35,0xd9,0x11,0x11,0x12,0x52,0x24,0x8,0x3c,0xc0,0x40,0x84,0xfe,0xa0,0x10,0x8,0x16,0x14,0x10,0x10,0x10,0x10,0x10,
++0x11,0x11,0x12,0x11,0xfd,0x10,0x10,0x14,0x19,0x31,0xd2,0x14,0x10,0x10,0x50,0x23,0x24,0x24,0x48,0x24,0x24,0x80,0x84,0xfe,0x4,0x84,0x48,0x28,0x10,0x20,0xc0,0x0,
++0x10,0x11,0x11,0x11,0xfd,0x10,0x13,0x16,0x1a,0x32,0xd3,0x12,0x12,0x12,0x52,0x21,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x44,0x44,0x44,0xfc,0x4,0x0,0x2,0x2,0xfe,
++0x10,0x10,0x17,0x12,0xfd,0x11,0x10,0x14,0x1b,0x30,0xd1,0x10,0x10,0x10,0x50,0x20,0x8,0x7c,0x80,0x48,0x48,0x50,0x20,0x8,0xfe,0x8,0x8,0x88,0x88,0x8,0x28,0x10,
++0x10,0x17,0x11,0x11,0xff,0x11,0x11,0x17,0x19,0x32,0xd3,0x15,0x15,0x19,0x51,0x21,0x8,0xfc,0x8,0x8,0xfe,0x8,0x8,0xf8,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x13,0x10,0x10,0xfc,0x17,0x10,0x15,0x1a,0x34,0xd9,0x11,0x12,0x14,0x51,0x20,0x8,0xfc,0x40,0x40,0x84,0xfe,0xa0,0x10,0x4e,0x44,0x68,0x54,0x54,0x44,0x40,0x80,
++0x20,0x2f,0x24,0x24,0xfc,0x27,0x24,0x24,0x2f,0x34,0xe4,0x24,0x2f,0x20,0xa0,0x40,0x0,0xfc,0xa4,0xa4,0xa4,0xa8,0xa4,0xa4,0xa2,0xa2,0xa2,0xb4,0xe8,0xa0,0xa0,0xa0,
++0x10,0x13,0x12,0x12,0xff,0x12,0x12,0x17,0x1a,0x32,0xd3,0x12,0x14,0x14,0x5b,0x20,0x4,0xfe,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x10,0x17,0xf8,0x11,0x12,0x15,0x18,0x30,0xd7,0x10,0x12,0x12,0x55,0x20,0x40,0x40,0x48,0xfc,0xa0,0x10,0x8,0xf6,0x4,0x8,0xfc,0x40,0x50,0x4c,0x44,0x80,
++0x10,0x10,0x17,0x10,0xfc,0x11,0x17,0x10,0x18,0x33,0xd2,0x12,0x13,0x10,0x50,0x20,0x40,0x48,0xfc,0x40,0xa0,0x14,0xfe,0x8,0x8,0xc8,0x48,0x48,0xc8,0x8,0x28,0x10,
++0x20,0x27,0x24,0x24,0xfd,0x24,0x24,0x25,0x2c,0x34,0xe4,0x27,0x24,0x24,0xa7,0x44,0x4,0xfe,0x4,0x4,0xf4,0x44,0x44,0xf4,0x44,0x54,0x44,0xfc,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x13,0x12,0xfe,0x13,0x12,0x16,0x1b,0x30,0xd1,0x1f,0x10,0x10,0x50,0x20,0x40,0x84,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x11,0x11,0x11,0x13,0xfe,0x14,0x12,0x10,0x1b,0x30,0xd1,0x12,0x14,0x10,0x50,0x20,0x0,0x0,0x4,0xfe,0x84,0x94,0xa4,0x84,0xf4,0x84,0xc4,0xb4,0x94,0x84,0x14,0x8,
++0x10,0x10,0x10,0x17,0xfc,0x11,0x10,0x17,0x18,0x30,0xd3,0x12,0x12,0x12,0x53,0x22,0x80,0x40,0x48,0xfc,0x0,0x10,0xa4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x13,0x12,0xfe,0x13,0x12,0x16,0x1a,0x33,0xd2,0x12,0x14,0x14,0x59,0x22,0x40,0x24,0xfe,0x4,0x4,0xfc,0x20,0x28,0x24,0xfe,0x50,0x50,0x88,0x88,0x6,0x4,
++0x10,0x10,0x13,0x12,0xfe,0x13,0x12,0x16,0x1a,0x32,0xd2,0x12,0x14,0x14,0x58,0x20,0x40,0x24,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x84,0xfc,0x84,0xfc,0x84,0x84,0x94,0x88,
++0x10,0x13,0x12,0x17,0xfa,0x12,0x13,0x10,0x1b,0x32,0xd2,0x12,0x12,0x10,0x51,0x26,0x8,0xfc,0x48,0xfe,0x48,0x48,0xf8,0x0,0xf8,0x8,0x48,0x48,0x48,0xb0,0x8,0x4,
++0x10,0x12,0x12,0x17,0xfa,0x12,0x12,0x16,0x1b,0x30,0xd7,0x10,0x11,0x12,0x54,0x20,0x90,0x90,0x94,0xfe,0x90,0x90,0xf0,0x0,0xfc,0x40,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x10,0x10,0x17,0x10,0xfc,0x11,0x12,0x14,0x1b,0x32,0xd3,0x12,0x13,0x10,0x5f,0x20,0x40,0x48,0xfc,0x40,0xe0,0x50,0x4e,0x44,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x0,
++0x10,0x17,0x14,0x15,0xfd,0x15,0x15,0x15,0x1c,0x37,0xd4,0x15,0x14,0x14,0x57,0x20,0x8,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x88,0x90,0x60,0x98,0xfe,0x0,
++0x20,0x24,0x24,0x27,0xf4,0x28,0x37,0x22,0x32,0x2f,0xe2,0x22,0x23,0x22,0xa0,0x41,0x20,0x20,0x20,0xa4,0x3e,0x44,0xa8,0x20,0x20,0xa0,0x20,0x50,0x50,0x88,0x8e,0x4,
++0x10,0x10,0x10,0x11,0xfe,0x15,0x18,0x13,0x1a,0x33,0xd2,0x13,0x12,0x12,0x52,0x22,0x40,0x40,0xa0,0x10,0x8,0xf6,0x0,0xc4,0x54,0xd4,0x54,0xd4,0x54,0x44,0x54,0xc8,
++0x10,0x10,0x17,0x10,0xfd,0x10,0x1f,0x14,0x1b,0x32,0xd2,0x13,0x12,0x12,0x53,0x22,0x80,0x48,0xfc,0x0,0x10,0xa4,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x14,0x17,0x14,0xfc,0x13,0x10,0x13,0x1a,0x33,0xd2,0x13,0x12,0x10,0x57,0x20,0x80,0x40,0xfe,0x2,0x8,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x4,0xfe,0x0,
++0x20,0x27,0x24,0x24,0xff,0x25,0x24,0x27,0x2c,0x34,0xe7,0x24,0x28,0x28,0xb1,0x42,0x4,0xfe,0x4,0x4,0xfc,0x8,0x90,0xfc,0x90,0x94,0xfe,0x90,0x90,0x90,0x10,0x10,
++0x10,0x17,0x10,0x14,0xfb,0x11,0x12,0x13,0x1c,0x30,0xd7,0x10,0x10,0x11,0x52,0x24,0x20,0xa8,0xb0,0xa4,0x28,0x10,0x8,0xf6,0x44,0x40,0xfc,0x80,0xa0,0x10,0x8,0x4,
++0x10,0x10,0x10,0x11,0xfd,0x10,0x17,0x14,0x19,0x36,0xd1,0x16,0x11,0x16,0x50,0x20,0x80,0x80,0xf8,0x8,0xf0,0x14,0xfe,0x88,0x50,0xa0,0x30,0x68,0xae,0x24,0xa0,0x40,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x13,0x16,0x1a,0x32,0xd2,0x14,0x1a,0x12,0x54,0x20,0x48,0x7c,0x40,0xfc,0x44,0x48,0xf8,0x40,0x44,0x3c,0x0,0xa0,0x94,0x82,0x8a,0x78,
++0x10,0x13,0x12,0x12,0xff,0x12,0x12,0x17,0x1a,0x33,0xd0,0x11,0x15,0x15,0x59,0x20,0x8,0xfc,0x48,0x48,0xf8,0x48,0xa8,0x18,0x8,0xf8,0x0,0x40,0x44,0x12,0x12,0xf0,
++0x10,0x10,0x17,0x14,0xfc,0x15,0x15,0x15,0x1d,0x35,0xd5,0x15,0x15,0x16,0x58,0x23,0x8,0x7c,0xa0,0x3c,0x20,0xfe,0x22,0xf8,0x24,0x3c,0x0,0x78,0x48,0x4a,0x8a,0x6,
++0x12,0x11,0x10,0x17,0xf8,0x10,0x17,0x10,0x1f,0x30,0xd7,0x11,0x12,0x14,0x58,0x20,0x8,0x10,0xa4,0xfe,0xa0,0xa4,0xfe,0xa4,0xfe,0xa4,0xfc,0xb0,0xa8,0xa6,0xa4,0xa0,
++0x20,0x28,0x25,0x20,0xff,0x22,0x2a,0x2a,0x2a,0x3a,0xef,0x22,0x22,0x24,0xa8,0x51,0x4,0xbe,0x24,0x24,0xe4,0x3c,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0x44,0x44,0x94,0x8,
++0x10,0x13,0x12,0x12,0xff,0x12,0x12,0x17,0x1a,0x32,0xd3,0x15,0x15,0x15,0x59,0x21,0x4,0xfe,0x4,0x4,0xfc,0x94,0x90,0xfc,0x90,0x94,0xfe,0x40,0x28,0x10,0x8e,0x4,
++0x10,0x17,0x10,0x10,0xff,0x14,0x14,0x17,0x18,0x34,0xd2,0x12,0x14,0x10,0x52,0x21,0x4,0xbe,0x84,0x84,0xbc,0x20,0x24,0xbe,0x84,0xa4,0x94,0x94,0xa4,0x84,0x94,0x8,
++0x10,0x13,0x11,0x10,0xfb,0x10,0x17,0x14,0x1b,0x34,0xd0,0x1f,0x11,0x12,0x54,0x20,0x0,0xf8,0x10,0xe0,0x18,0x0,0xbc,0xa4,0x18,0xa4,0x40,0xfe,0x50,0x48,0x46,0x40,
++0x10,0x17,0x14,0x17,0xfc,0x17,0x14,0x11,0x1b,0x30,0xd0,0x17,0x11,0x12,0x54,0x20,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x84,0x10,0xe0,0x40,0x88,0xfc,0x50,0x4c,0x44,0xc0,
++0x10,0x17,0x14,0x15,0xfd,0x16,0x13,0x14,0x18,0x37,0xd1,0x12,0x11,0x10,0x51,0x26,0x0,0xbc,0xa4,0xac,0xac,0x34,0x18,0xa4,0x80,0xfe,0x10,0x10,0x20,0xe0,0x98,0x4,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x13,0x16,0x1a,0x32,0xd4,0x14,0x15,0x15,0x5a,0x20,0x40,0x24,0xfe,0x88,0x88,0x88,0xfe,0x88,0x88,0xf8,0x88,0x0,0x54,0x52,0x52,0x0,
++0x20,0x20,0x27,0x21,0xfa,0x2f,0x24,0x27,0x2c,0x37,0xe4,0x24,0x3f,0x20,0xa0,0x40,0x0,0x10,0x90,0x24,0x3e,0xc4,0xa4,0xa8,0xa8,0xa8,0x90,0xd0,0xa8,0xa8,0xc6,0x84,
++0x10,0x17,0x10,0x14,0xfa,0x12,0x14,0x10,0x1b,0x32,0xd2,0x13,0x12,0x12,0x53,0x22,0x4,0xbe,0x84,0xa4,0x94,0x94,0xa4,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x12,0x12,0x12,0xff,0x12,0x12,0x17,0x18,0x37,0xd5,0x15,0x15,0x17,0x50,0x21,0x0,0x4,0x7e,0x10,0xa4,0x7e,0x44,0xd4,0x54,0x54,0x54,0x54,0x54,0x20,0x4c,0x82,
++0x11,0x13,0x14,0x17,0xfc,0x17,0x14,0x17,0x18,0x37,0xd0,0x13,0x12,0x13,0x52,0x23,0x0,0xf0,0x24,0xfe,0x44,0xfc,0x44,0xfc,0x0,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,
++0x12,0x11,0x17,0x10,0xfb,0x12,0x13,0x12,0x1a,0x33,0xd0,0x1f,0x12,0x11,0x50,0x20,0x8,0x10,0xfc,0xa8,0xfc,0xa8,0x18,0xe8,0x8,0xf8,0x14,0xfe,0x10,0x10,0x50,0x20,
++0x10,0x10,0x17,0x15,0xfa,0x14,0x13,0x12,0x1b,0x30,0xd7,0x14,0x17,0x10,0x50,0x20,0x80,0x40,0xfe,0x12,0x48,0x44,0xf8,0x48,0xf8,0x40,0xfc,0x44,0xfc,0x40,0x40,0x40,
++0x22,0x22,0x22,0x2f,0xf2,0x2f,0x28,0x2f,0x38,0xef,0x22,0x2f,0x22,0x22,0xa2,0x42,0x10,0x10,0x28,0xa8,0x44,0x82,0xfc,0x90,0x90,0x94,0x7e,0x90,0x10,0x10,0x10,0x10,
++0x10,0x17,0x14,0x14,0xff,0x10,0x17,0x10,0x1b,0x32,0xd3,0x11,0x13,0x15,0x59,0x21,0x4,0xfe,0xa4,0xa4,0xfc,0x0,0xfe,0x0,0xf8,0x8,0xf8,0x44,0x28,0x10,0x8e,0x4,
++0x20,0x20,0x27,0x24,0xf4,0x27,0x24,0x34,0x27,0xe6,0x26,0x2a,0x2a,0x33,0xa2,0x40,0x10,0x8,0xc8,0x7e,0x40,0xd4,0x14,0x3e,0xc8,0x48,0x7e,0x48,0x48,0xc8,0x48,0x8,
++0x10,0x13,0x12,0x12,0xfb,0x10,0x17,0x14,0x1f,0x34,0xd7,0x10,0x1f,0x11,0x51,0x26,0x80,0xf8,0x88,0x48,0xf8,0x0,0xfc,0x44,0xfc,0x44,0xfc,0x0,0xfe,0x10,0x10,0x10,
++0x10,0x17,0x10,0x12,0xf8,0x12,0x11,0x11,0x1a,0x37,0xda,0x13,0x12,0x12,0x53,0x22,0x0,0xbc,0x84,0x94,0x84,0x94,0x20,0xfe,0x20,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x20,0x27,0x20,0x2f,0xfa,0x21,0x22,0x28,0x37,0xe4,0x2f,0x34,0x27,0x24,0xa7,0x44,0x8,0xfc,0x40,0xfe,0x4a,0x50,0x48,0x40,0xfc,0x40,0xf8,0x40,0xf8,0x40,0xfe,0x0,
++0x12,0x13,0x15,0x13,0xfe,0x12,0x13,0x18,0x17,0x31,0xd2,0x1d,0x10,0x13,0x51,0x26,0x10,0xde,0x28,0xf8,0x88,0x48,0xf8,0x80,0xfe,0x50,0x98,0xe6,0x90,0xf8,0x50,0x4c,
++0x20,0x27,0x20,0x23,0xf2,0x2f,0x29,0x27,0x21,0x33,0xe1,0x27,0x21,0x23,0xad,0x41,0x40,0xfc,0x40,0xf8,0x48,0xfe,0x12,0xfc,0x10,0xf8,0x10,0xfc,0x48,0x30,0x8e,0x4,
++0x2,0x2,0x2,0x2,0x3,0xfe,0x2,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x44,0x24,0x1c,0x0,
++0x0,0x0,0x0,0x0,0xff,0x0,0x8,0x4,0x14,0x54,0x50,0x50,0x91,0x11,0xf,0x0,0x80,0xa0,0x94,0xfe,0x80,0x40,0x40,0x40,0x20,0xa0,0x60,0x50,0x12,0xa,0xa,0x4,
++0x0,0x0,0x0,0x0,0xff,0x22,0x22,0xff,0x22,0x22,0x3e,0x22,0x22,0x3e,0x22,0x0,0x80,0xa0,0x94,0xfe,0x80,0x40,0x40,0xc0,0x40,0x40,0x20,0x20,0x12,0x12,0xa,0x4,
++0x0,0x22,0x14,0xb,0x14,0x62,0x8,0x9,0xfe,0x8,0x2c,0x2a,0x48,0xb,0x28,0x10,0x20,0x28,0x24,0xfe,0x20,0x20,0x20,0xd0,0x90,0x90,0x90,0x90,0xf2,0x8a,0xa,0x4,
++0x0,0x0,0x8,0x7c,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0xa0,0x98,0x8c,0x84,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x0,0x8,0x7c,0x48,0x48,0x48,0x48,0x49,0x4a,0x4c,0x48,0x78,0x48,0x0,0x0,0x0,0x80,0x80,0x88,0x98,0xa0,0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x9,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x79,0x4a,0x2,0x4,0x8,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x0,0x8,0x7c,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xc8,0xa8,0x90,0x80,0x80,0x80,
++0x0,0x8,0x7d,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x79,0x49,0x2,0x4,0x8,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x4,0x4,0x4,0x28,0x10,
++0x0,0x8,0x7c,0x48,0x4b,0x48,0x48,0x48,0x48,0x48,0x48,0x79,0x49,0x2,0x4,0x8,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x84,0x84,0x4,0x4,0x4,0x28,0x10,
++0x0,0x8,0x7d,0x48,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x8,0x1c,0xe0,0x40,0x40,0x44,0x7e,0xc0,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0xa,0x7d,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x0,0x4,0xc,0x90,0xa0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x8,0x7c,0x48,0x48,0x49,0x4b,0x48,0x48,0x48,0x48,0x78,0x49,0x2,0x3,0x0,0x40,0x40,0x40,0x80,0x84,0x4,0xf8,0x8,0x10,0x20,0x40,0x80,0x8,0x4,0xfe,0x2,
++0x0,0x8,0x7c,0x4b,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x79,0x49,0x2,0x4,0x8,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x10,0x8,0xe,0x4,
++0x0,0xb,0x7c,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x49,0x79,0x4a,0x2,0x4,0x8,0x8,0xfc,0x80,0x80,0x80,0x84,0xfe,0xa0,0xa0,0xa0,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x0,0x7b,0x48,0x48,0x4b,0x48,0x48,0x48,0x48,0x49,0x7a,0x4a,0x2,0x1,0x0,0x90,0x94,0xfe,0x90,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x0,0x8,0x7c,0x48,0x4f,0x48,0x48,0x48,0x48,0x48,0x49,0x79,0x4a,0x4,0x8,0x10,0x40,0x40,0x40,0x44,0xfe,0x40,0xa0,0xa0,0xa0,0xa0,0x10,0x90,0x48,0x48,0x6,0x4,
++0x0,0xb,0x7e,0x4a,0x4a,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x44,0x4,0x9,0x12,0x4,0xfe,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x0,0xb,0x7e,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x44,0x4,0x8,0x10,0x4,0xfe,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0xa8,0x90,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x2,0xa,0x7e,0x4a,0x4a,0x4b,0x4a,0x4a,0x4a,0x4a,0x7a,0x4a,0x3,0x2,0x0,0x20,0x20,0x20,0x20,0x24,0x28,0xb0,0x20,0x20,0x20,0x20,0x20,0xa2,0x22,0x1e,0x0,
++0x0,0x9,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x79,0x48,0x0,0x1,0x2,0x4,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x40,0x98,0x6,0x2,
++0x0,0x1f,0x10,0x10,0x10,0x1f,0x11,0x1,0x7f,0x42,0x42,0x44,0x48,0x40,0x40,0x40,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x4,0xfe,0x84,0x44,0x24,0x24,0x4,0x14,0x8,
++0x0,0x0,0x8,0x7c,0x48,0x48,0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x44,0x0,0x0,0x0,0x40,0x20,0x20,0x20,0xa0,0x80,0x88,0x84,0x82,0x82,0x82,0x8a,0x8a,0x88,0x78,0x0,
++0x0,0xb,0x7c,0x48,0x48,0x4b,0x4a,0x4a,0x4a,0x4b,0x48,0x78,0x48,0x2,0x1,0x0,0x24,0xf4,0x24,0x24,0x24,0xe4,0x4,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0x44,0x84,
++0x0,0x3,0x7a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x4a,0x2,0x3,0x0,0x8,0xfc,0x20,0x28,0xfc,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xb8,0x20,0x24,0xfe,0x0,
++0x0,0x0,0x8,0x7c,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x80,0x80,0x88,0xfc,0x80,0x80,0x84,0xfe,0x80,0xa0,0x90,0x88,0x88,0x80,0x80,0x80,
++0x0,0x9,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x79,0x48,0x0,0x0,0x0,0x0,0x4,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,0x20,
++0x0,0x0,0x7b,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x44,0x5,0x9,0x10,0x8,0x1c,0xe0,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xa4,0x14,0xf2,0x0,
++0x0,0x0,0x8,0x7c,0x49,0x4a,0x4c,0x48,0x48,0x4b,0x48,0x79,0x48,0x0,0x0,0x0,0x40,0x40,0xa0,0xa0,0x10,0x8e,0x64,0x20,0x0,0xf8,0x8,0x10,0xa0,0x40,0x20,0x20,
++0x0,0x8,0x7c,0x49,0x49,0x4a,0x48,0x48,0x49,0x4a,0x4c,0x78,0x49,0x0,0x0,0x0,0x80,0x80,0xf8,0x8,0x10,0xa0,0x40,0xa0,0x10,0x8e,0x64,0x20,0x80,0x60,0x10,0x0,
++0x0,0x8,0x7c,0x4b,0x4a,0x4a,0x48,0x4b,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x40,0x20,0x20,0xfe,0x2,0x4,0x0,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x8,0x7d,0x49,0x49,0x49,0x49,0x48,0x48,0x49,0x49,0x79,0x49,0x1,0x1,0x0,0x20,0x20,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x2,0x12,0x7a,0x52,0x5f,0x52,0x52,0x52,0x54,0x54,0x55,0x72,0x55,0x8,0x10,0x0,0x0,0x0,0x8,0x7c,0x88,0x88,0xa8,0xa8,0xa8,0x90,0x10,0x28,0x28,0xc4,0x44,0x82,
++0x0,0x11,0x79,0x51,0x52,0x54,0x5f,0x51,0x52,0x52,0x54,0x7f,0x54,0x0,0x1,0x2,0x20,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xa4,0xc4,0x44,0x84,0x28,0x10,
++0x0,0x11,0x79,0x51,0x52,0x52,0x57,0x51,0x52,0x52,0x54,0x77,0x50,0x0,0xf,0x0,0x0,0x8,0x8,0x8,0x10,0x94,0xbc,0x8,0x10,0x10,0x20,0xbc,0x0,0x4,0xfe,0x0,
++0x0,0xb,0x7e,0x4a,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x7b,0x4a,0x2,0x3,0x0,0x8,0xfc,0x0,0x8,0xfc,0x20,0x20,0xf8,0x20,0x20,0x28,0xfc,0x0,0x4,0xfe,0x0,
++0x0,0x8,0x7c,0x4b,0x48,0x48,0x49,0x48,0x48,0x49,0x49,0x79,0x49,0x1,0x1,0x1,0x20,0x20,0x24,0xfe,0x20,0x20,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x7,0x8,0x7c,0x48,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x7b,0x4a,0x2,0x3,0x2,0x4,0xfe,0x90,0x90,0x94,0xfe,0x94,0x94,0x94,0x94,0x9c,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x0,0x8,0x7f,0x48,0x48,0x49,0x49,0x4a,0x4c,0x49,0x78,0x48,0x0,0x1,0x2,0x80,0x80,0x84,0xfe,0x80,0xa0,0x20,0x24,0xac,0xb0,0x20,0x50,0x50,0x88,0xe,0x4,
++0x0,0x0,0x70,0x54,0x52,0x52,0x50,0x5e,0x52,0x52,0x52,0x72,0x53,0x6,0x9,0x0,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x50,0x48,0x8c,0x4,0x0,0x6,0xfc,
++0x0,0x7,0x9,0x7d,0x49,0x4a,0x4a,0x4a,0x4d,0x48,0x48,0x79,0x49,0x2,0x4,0x8,0x44,0xe4,0x4,0x4,0xd4,0x54,0x54,0x54,0x54,0x94,0x94,0x14,0x4,0x4,0x14,0x8,
++0x0,0x0,0x7b,0x48,0x4b,0x48,0x48,0x4b,0x4a,0x4a,0x7b,0x48,0x0,0x1,0x2,0xc,0x40,0x48,0xfc,0x40,0xf8,0x48,0x48,0xf8,0x40,0x44,0xfe,0x44,0xac,0x10,0x8,0x6,
++0x0,0x8,0x7c,0x4b,0x48,0x48,0x48,0x4b,0x48,0x4f,0x49,0x79,0x49,0x2,0x4,0x18,0x80,0x88,0xfc,0x80,0x48,0x50,0x62,0x92,0xe,0xf8,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x2,0x2,0x7a,0x4b,0x4a,0x4a,0x4a,0x4b,0x48,0x48,0x4f,0x78,0x48,0x0,0x0,0x0,0x20,0x20,0x24,0xa8,0x30,0x24,0xa4,0x1c,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x0,0x8,0x7c,0x48,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x4a,0x3,0xc,0x0,0x90,0x90,0x90,0x90,0x92,0x94,0xf8,0x90,0x90,0x90,0x90,0xb0,0xd2,0x12,0xe,0x0,
++0x0,0x0,0x7a,0x49,0x49,0x49,0x48,0x4f,0x49,0x49,0x49,0x79,0x4a,0x2,0x4,0x8,0x40,0x40,0x48,0x4c,0x50,0x50,0x44,0xfe,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x8,0x7d,0x49,0x49,0x49,0x48,0x48,0x48,0x49,0x4a,0x78,0x48,0x0,0x1,0x6,0x20,0x20,0x24,0x24,0x24,0xfc,0x44,0x40,0xfc,0x84,0x44,0x28,0x10,0x60,0x80,0x0,
++0x1,0x1,0x11,0x7a,0x52,0x57,0x5a,0x52,0x52,0x52,0x52,0x72,0x53,0x2,0x2,0x2,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x70,0x68,0xa8,0xa8,0xa6,0x24,0x20,0x20,0x20,
++0x1,0x1,0x11,0x7a,0x52,0x56,0x5b,0x52,0x52,0x52,0x53,0x72,0x52,0x2,0x2,0x3,0x0,0x4,0xfe,0x44,0x44,0x44,0xfe,0x44,0x44,0x44,0xfc,0x44,0x40,0x40,0x80,0x0,
++0x0,0x0,0x7b,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x44,0x4,0x8,0x0,0x8,0x3c,0xc0,0x4,0x18,0xe0,0xa0,0xa4,0xa8,0x90,0x90,0x90,0x88,0xae,0xc4,0x80,
++0x0,0x0,0x8,0x7c,0x49,0x4a,0x4d,0x48,0x48,0x4f,0x48,0x78,0x49,0x2,0x7,0x0,0x40,0x40,0xa0,0xa0,0x10,0x8,0xf6,0x0,0x4,0xfe,0x80,0x80,0x10,0x8,0xfc,0x4,
++0x0,0x1,0x9,0x7d,0x49,0x49,0x4a,0x48,0x4f,0x48,0x48,0x78,0x49,0x2,0xc,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x4c,0x40,0xfe,0x40,0xe0,0xd0,0x48,0x4e,0x44,0x40,
++0x0,0x0,0x78,0x4b,0x49,0x48,0x48,0x48,0x49,0x4e,0x48,0x78,0x48,0x1,0x2,0x4,0x80,0x40,0x24,0xfe,0x8,0x90,0x60,0x90,0xe,0x94,0x90,0x90,0x90,0x10,0x10,0x10,
++0x2,0x9,0x7c,0x4b,0x48,0x48,0x48,0x4b,0x48,0x48,0x48,0x7f,0x48,0x0,0x0,0x0,0x8,0x10,0xa0,0xfc,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x0,0x8,0x7c,0x4a,0x49,0x48,0x4f,0x48,0x48,0x48,0x49,0x79,0x4a,0x4,0x8,0x0,0x40,0x40,0x44,0x48,0x50,0x44,0xfe,0x40,0xe0,0xd0,0x50,0x48,0x46,0x44,0x40,0x40,
++0x0,0x0,0x7b,0x4a,0x4c,0x48,0x4b,0x48,0x48,0x4f,0x48,0x78,0x48,0x0,0x0,0x0,0x80,0x40,0xfe,0x2,0x4,0x38,0xc0,0x44,0x7e,0xc0,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x8,0x7c,0x49,0x49,0x4a,0x48,0x48,0x48,0x49,0x49,0x7a,0x44,0x8,0x0,0x0,0x20,0x20,0x20,0xfe,0x42,0x44,0x40,0xa0,0xa4,0x28,0x90,0x90,0x88,0xae,0xc4,0x80,
++0x0,0x9,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0x1,0x1,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x44,0x48,0x30,0x20,0x10,0x4e,0x84,0x0,
++0x0,0x0,0x8,0x7d,0x4b,0x48,0x49,0x49,0x49,0x4a,0x48,0x7b,0x48,0x0,0x0,0x0,0x20,0x40,0x88,0x4,0xfe,0x22,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x0,0x7b,0x48,0x4b,0x48,0x4f,0x48,0x49,0x49,0x49,0x7a,0x44,0x0,0x3,0xc,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x80,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x0,0x0,0x7b,0x48,0x48,0x48,0x4f,0x48,0x4a,0x4a,0x7a,0x45,0x9,0x2,0x4,0x0,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0xa0,0xa8,0xa4,0xa4,0x24,0x20,0x20,0xa0,0x40,
++0x0,0x0,0x7b,0x48,0x48,0x4b,0x4a,0x4c,0x4b,0x48,0x48,0x78,0x49,0x2,0x4,0x8,0x90,0x94,0xfe,0x90,0x90,0xfe,0x42,0x44,0xf8,0x48,0x88,0x88,0x8,0x8,0x50,0x20,
++0x0,0x3,0x78,0x48,0x4b,0x4a,0x4a,0x4b,0x4a,0x4a,0x4b,0x7a,0x49,0x0,0x3,0xc,0x8,0xfc,0x40,0x48,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0x40,0xc0,0x30,0xe,
++0x0,0x3,0x8,0x7c,0x4b,0x49,0x49,0x49,0x4f,0x48,0x4b,0x7a,0x4a,0x2,0x3,0x2,0x10,0xf8,0x80,0x90,0xf8,0x10,0x10,0x14,0xfe,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x2,0x2,0x72,0x5f,0x52,0x52,0x52,0x52,0x53,0x5e,0x52,0x72,0x52,0x2,0xb,0x4,0x0,0xc,0x70,0xc0,0x40,0x44,0x7e,0xc8,0x48,0x48,0x48,0x48,0x88,0x88,0x8,0x8,
++0x0,0x2,0x9,0x7d,0x48,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x4a,0x0,0x1,0x6,0x40,0x44,0x4c,0x50,0x48,0xfc,0x8,0x48,0x48,0x48,0x48,0x48,0xa8,0x90,0xc,0x4,
++0x0,0x0,0x7b,0x4a,0x4a,0x4b,0x4a,0x4a,0x4b,0x4a,0x78,0x40,0xf,0x0,0x0,0x0,0x40,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x40,0x44,0x7e,0xc0,0x44,0x44,0x3c,
++0x1,0x8,0x7c,0x48,0x49,0x48,0x4f,0x48,0x49,0x4b,0x4d,0x79,0x49,0x1,0x0,0x0,0x8,0xd0,0x20,0x58,0x84,0x40,0xfe,0xa0,0x24,0xfe,0x24,0x24,0x34,0x28,0x20,0x20,
++0x0,0x0,0x2,0x7a,0x4a,0x4a,0x4d,0x48,0x48,0x48,0x4b,0x78,0x48,0x0,0xf,0x0,0x40,0x40,0x48,0x48,0x48,0x48,0x54,0xe2,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x7,0x74,0x54,0x57,0x54,0x54,0x57,0x54,0x54,0x55,0x74,0x55,0x6,0x0,0x0,0x80,0xc4,0xbe,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0x24,0x24,0xb4,0x28,0x20,0x20,0x20,
++0x0,0x8,0x7f,0x48,0x4b,0x48,0x4f,0x48,0x49,0x4b,0x4c,0x78,0x47,0x0,0x0,0x0,0x40,0x44,0xfe,0x40,0xfc,0x40,0xfe,0xa0,0x50,0xf8,0x46,0x40,0xfc,0x40,0x40,0x40,
++0x0,0x8,0x7f,0x48,0x4b,0x48,0x4f,0x48,0x4b,0x4a,0x4a,0x7a,0x4a,0x0,0x1,0x6,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0x48,0x48,0x48,0xb0,0xc,0x4,
++0x1,0x9,0x7f,0x49,0x48,0x48,0x4f,0x48,0x48,0x49,0x49,0x7b,0x45,0x9,0x1,0x1,0x10,0x10,0xfc,0x10,0x40,0x44,0xfe,0x80,0x88,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x1,0x11,0x7f,0x51,0x51,0x50,0x57,0x54,0x54,0x54,0x57,0x74,0x54,0x4,0x7,0x4,0x10,0x14,0xfe,0x10,0x10,0x4,0xfe,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x4,
++0x1,0x11,0x79,0x51,0x5f,0x51,0x53,0x53,0x55,0x55,0x55,0x79,0x51,0x1,0x1,0x1,0x10,0x10,0x10,0x14,0xfe,0x10,0x30,0xb8,0x58,0x54,0x54,0x92,0x10,0x10,0x10,0x10,
++0x1,0x11,0x79,0x57,0x52,0x52,0x55,0x55,0x5f,0x51,0x51,0x73,0x4d,0x1,0x1,0x1,0x10,0x10,0x14,0xfe,0x10,0x14,0x7e,0x10,0x90,0x20,0x7e,0x84,0x28,0x10,0xc,0x4,
++0x0,0x9,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x79,0x4a,0x2,0x4,0x8,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,0x74,0x54,0x54,0x74,0x4,0x14,0x8,
++0x2,0x12,0x7b,0x54,0x5a,0x53,0x54,0x50,0x5f,0x50,0x54,0x74,0x57,0x0,0x0,0x0,0x0,0x4,0xfe,0x4,0x24,0xf4,0x84,0x94,0xfc,0x84,0x94,0x94,0xf4,0x4,0x14,0x8,
++0x1,0x9,0x7d,0x4a,0x4a,0x4c,0x49,0x49,0x4a,0x48,0x49,0x7d,0x45,0x9,0x0,0x0,0x0,0x4,0xfe,0x94,0x94,0x94,0x24,0x24,0x54,0x8,0x40,0x24,0x22,0xa,0xf8,0x0,
++0x0,0x8,0x7f,0x49,0x49,0x49,0x4a,0x4a,0x4c,0x48,0x4f,0x78,0x48,0x0,0x0,0x0,0x80,0x48,0xfc,0x10,0x10,0x10,0xa8,0x44,0x44,0x40,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x0,0x0,0xb,0x7c,0x49,0x48,0x4f,0x48,0x48,0x4f,0x49,0x7a,0x49,0x0,0x1,0x6,0x80,0x50,0xf8,0x0,0x10,0xa0,0xfc,0x80,0x84,0xfe,0x10,0x10,0x20,0xc0,0x30,0x8,
++0x0,0x8,0x7f,0x48,0x49,0x4b,0x48,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0x1,0x1,0x80,0x44,0xfe,0x80,0x8,0xfc,0x4,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x8,0x7d,0x49,0x4a,0x48,0x49,0x4a,0x48,0x49,0x49,0x7a,0x48,0x0,0x3,0xc,0x40,0x40,0x48,0x50,0x40,0xa0,0x10,0xc,0x40,0x48,0x50,0x40,0xa0,0x90,0xe,0x4,
++0x0,0x4,0x72,0x52,0x58,0x54,0x50,0x52,0x52,0x54,0x5c,0x74,0x55,0x5,0x6,0x4,0x10,0x10,0x10,0xfe,0x92,0x94,0x90,0xfc,0xa4,0xa4,0xa8,0x90,0x28,0x28,0x46,0x84,
++0x0,0x8,0x7c,0x4b,0x4a,0x4c,0x48,0x4b,0x48,0x49,0x49,0x79,0x49,0x2,0x4,0x8,0x40,0x20,0x20,0xfe,0x2,0x4,0x0,0xfe,0x20,0x20,0x3c,0x20,0x20,0xa0,0x60,0x1e,
++0x2,0x1,0x17,0x7c,0x54,0x57,0x54,0x54,0x57,0x54,0x54,0x75,0x54,0x5,0x6,0x0,0x0,0x0,0xbc,0xa4,0xa8,0xa8,0xb0,0xa8,0xa4,0x24,0x24,0x24,0xb4,0xa8,0x20,0x20,
++0x0,0x8,0x7f,0x4a,0x4a,0x4b,0x4a,0x4a,0x4a,0x4b,0x4a,0x7a,0x44,0x4,0x9,0x2,0x40,0x24,0xfe,0x4,0x4,0xfc,0x20,0x28,0x24,0xfe,0x20,0x50,0x50,0x88,0xe,0x4,
++0x0,0x17,0x7c,0x54,0x57,0x55,0x55,0x57,0x55,0x75,0x4d,0x15,0x15,0x25,0x1,0x1,0x4,0xc4,0x54,0x54,0xd4,0x14,0x14,0xd4,0x54,0x54,0x54,0x44,0x44,0xc4,0x14,0x8,
++0x0,0xf,0x4,0x75,0x52,0x55,0x58,0x50,0x5f,0x50,0x55,0x75,0x52,0x5,0x8,0x10,0x0,0xfc,0xa4,0x28,0x10,0x28,0xc4,0x0,0xfc,0x84,0x28,0x28,0x10,0x28,0xc6,0x84,
++0x0,0x2,0x12,0x7f,0x52,0x52,0x52,0x52,0x53,0x50,0x5f,0x70,0x51,0x2,0xc,0x0,0x90,0x90,0x94,0xfe,0x90,0x90,0xf0,0x0,0xfc,0x40,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x1,0x1,0xf,0x79,0x48,0x48,0x49,0x4a,0x4d,0x48,0x4b,0x7a,0x4a,0x2,0x3,0x2,0x10,0x14,0xfe,0x50,0x40,0xa0,0x10,0xe,0xf4,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x0,0xf,0x70,0x50,0x57,0x55,0x54,0x55,0x54,0x54,0x77,0x54,0x4,0x4,0x4,0x40,0x44,0xfe,0x40,0x44,0xfe,0x14,0xa4,0xf4,0x44,0x44,0xfc,0x44,0x44,0x54,0x8,
++0x0,0x17,0x7c,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x74,0x49,0x8,0x10,0x3,0x4,0xfe,0x0,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,
++0x0,0x0,0x0,0x77,0x50,0x51,0x53,0x5c,0x53,0x50,0x50,0x77,0x50,0x0,0xf,0x0,0x40,0x40,0x44,0xfe,0xa0,0x50,0xf8,0x46,0xf8,0x40,0x48,0xfc,0x40,0x44,0xfe,0x0,
++0x2,0x2,0x7b,0x4a,0x4a,0x4a,0x4b,0x48,0x49,0x49,0x79,0x49,0x1,0x1,0x1,0x1,0x20,0x24,0xa8,0x30,0x22,0xa2,0x5e,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x13,0x7a,0x52,0x53,0x52,0x52,0x53,0x50,0x57,0x74,0x54,0x5,0x4,0x4,0x4,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x44,0xfe,0x44,0x54,0xf4,0x4,0x14,0x8,
++0x0,0x7,0x74,0x57,0x54,0x57,0x50,0x53,0x52,0x53,0x72,0x53,0x2,0x2,0x2,0x2,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x1,0x77,0x51,0x51,0x51,0x57,0x51,0x53,0x53,0x55,0x75,0x49,0x11,0x1,0x1,0x90,0xd0,0x10,0x52,0x34,0x38,0xd0,0x10,0x90,0x50,0x28,0x28,0x28,0x44,0x44,0x82,
++0x0,0x1,0x7a,0x4a,0x4a,0x4b,0x4a,0x4a,0x4b,0x48,0x7b,0x49,0x0,0x0,0x1,0xe,0x40,0x48,0x5c,0x48,0x48,0x58,0x48,0x48,0xf8,0x40,0xf8,0x10,0xa0,0x40,0xb0,0xe,
++0x0,0x0,0x7,0x78,0x49,0x48,0x4f,0x48,0x4b,0x4a,0x4a,0x7b,0x4a,0x2,0x3,0x2,0x80,0x48,0xfc,0x0,0x10,0xa4,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x1,0x3f,0x8,0x4,0x7f,0x41,0x9f,0x11,0x11,0x11,0x1,0x1f,0x10,0x10,0x1f,0x10,0x0,0xf8,0x20,0x40,0xfe,0x2,0xf4,0x10,0x10,0x30,0x0,0xf0,0x10,0x10,0xf0,0x10,
++0x0,0x9,0x7c,0x4b,0x48,0x49,0x48,0x4f,0x48,0x48,0x49,0x7a,0x44,0x8,0x13,0x0,0x8,0x8,0x90,0xfc,0x40,0xf8,0x40,0xfe,0x80,0x88,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x0,0xa,0x7d,0x48,0x4f,0x48,0x49,0x4a,0x48,0x4f,0x49,0x7a,0x49,0x0,0x1,0x6,0x40,0x48,0x50,0x40,0xfc,0x40,0x50,0x48,0x80,0xfe,0x10,0x10,0x20,0xc0,0x30,0x8,
++0x22,0x11,0x0,0x7f,0x41,0x91,0x1f,0x21,0xff,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x8,0x10,0x20,0xfe,0x2,0x24,0xf0,0x4,0xfe,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x0,0x3,0x7a,0x4a,0x4b,0x4a,0x4b,0x4a,0x4a,0x4a,0x7a,0x42,0x4,0x4,0xb,0x10,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x40,0x88,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x1,0x1,0x7a,0x4b,0x48,0x4f,0x49,0x49,0x4a,0x4c,0x79,0x46,0x1,0xe,0x1,0x0,0x0,0xf0,0x10,0xf0,0x24,0xfe,0x0,0x88,0x50,0xe0,0x50,0xd0,0x4e,0x44,0x40,0x80,
++0x0,0x0,0xb,0x7c,0x4b,0x48,0x4f,0x48,0x49,0x4b,0x4c,0x7b,0x48,0x1,0x6,0x0,0x40,0x48,0xfc,0x40,0xf8,0x80,0xfe,0xa0,0x10,0xf8,0x46,0xf8,0xc0,0x70,0x48,0x40,
++0x1,0x1,0x17,0x79,0x57,0x51,0x5f,0x52,0x53,0x52,0x52,0x74,0x44,0x9,0x10,0x0,0x10,0x10,0xd0,0x14,0xfe,0x24,0xe4,0x28,0xa8,0xa8,0x90,0x90,0xa8,0xa8,0x46,0x84,
++0x0,0x0,0x7,0x78,0x4b,0x48,0x4f,0x48,0x48,0x4b,0x48,0x7b,0x49,0x2,0x4,0x0,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x40,0x90,0xe0,0x48,0xf8,0x50,0x4c,0x44,0x40,
++0x2,0x12,0x7f,0x52,0x52,0x5f,0x52,0x57,0x5c,0x54,0x57,0x74,0x54,0x7,0x4,0x0,0x0,0x3c,0xa4,0x24,0xa4,0xe8,0x24,0xa4,0xa2,0xa2,0xa2,0xb4,0xa8,0xa0,0xa0,0x20,
++0x0,0x0,0xb,0x7c,0x48,0x4f,0x48,0x49,0x4b,0x48,0x4b,0x7a,0x4a,0x2,0xf,0x0,0x40,0x48,0xfc,0x40,0x44,0xfe,0x80,0x10,0xf8,0x0,0xf8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x0,0xf,0x72,0x53,0x52,0x53,0x52,0x5f,0x50,0x5f,0x50,0x74,0x55,0x2,0x5,0x8,0x8,0xfc,0x10,0xf0,0x10,0xf0,0x14,0xfe,0x10,0xbc,0x84,0xa4,0x28,0x10,0x28,0xc6,
++0x1,0x1,0x17,0x79,0x51,0x53,0x52,0x56,0x5a,0x52,0x52,0x72,0x52,0x2,0x2,0x2,0x20,0x28,0xfc,0x20,0x4,0xfe,0x8,0x8,0xe8,0xa8,0xa8,0xe8,0x8,0x8,0x28,0x10,
++0x0,0x0,0x7,0x78,0x4b,0x4a,0x4b,0x4a,0x4b,0x4a,0x4b,0x7a,0x4f,0x1,0x2,0x4,0x40,0x44,0xfe,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x10,0xc,0x4,
++0x0,0x0,0x17,0x78,0x57,0x54,0x58,0x53,0x50,0x50,0x57,0x71,0x52,0x4,0x1,0x0,0x40,0x48,0xfc,0x40,0xfe,0x42,0x94,0xf0,0x40,0x88,0xfc,0x50,0x4c,0x44,0x40,0x80,
++0x0,0x7,0x10,0x7b,0x52,0x52,0x53,0x50,0x57,0x55,0x54,0x75,0x54,0x4,0x4,0x4,0x4,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x14,0xa4,0xf4,0x44,0x44,0x54,0x8,
++0x0,0x7,0x0,0x7b,0x4a,0x4b,0x4a,0x4b,0x4a,0x4b,0x49,0x79,0x4a,0x4,0x8,0x3,0x4,0xfe,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xf8,0x90,0x60,0x90,0xe,
++0x0,0x3,0x7a,0x4a,0x4b,0x4a,0x4a,0x4b,0x4a,0x4b,0x78,0x45,0x5,0x9,0x0,0x0,0x8,0xfc,0x48,0x48,0xf8,0x48,0xa8,0x18,0x8,0xf8,0x0,0x44,0x22,0xa,0xf8,0x0,
++0x0,0x0,0x7b,0x4a,0x4b,0x4a,0x4b,0x48,0x4f,0x48,0x49,0x7a,0x45,0x8,0x0,0x0,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x84,0xfe,0xa0,0x50,0x48,0xfe,0x44,0x40,0x40,
++0x0,0x1,0xa,0x7c,0x49,0x4e,0x48,0x4b,0x48,0x4b,0x48,0x7b,0x48,0x0,0x0,0x7,0x90,0x18,0xa4,0x40,0xb0,0x4e,0xf0,0x90,0x60,0xa0,0x78,0x88,0x90,0x60,0xc0,0x0,
++0x0,0x10,0x7b,0x52,0x51,0x57,0x54,0x58,0x57,0x51,0x51,0x73,0x52,0x4,0x8,0x3,0x10,0x78,0x80,0x48,0x50,0xfe,0x82,0x84,0xfc,0x0,0xf0,0x10,0xa0,0x40,0xb0,0xc,
++0x0,0x2,0x1,0x78,0x4f,0x48,0x49,0x4a,0x48,0x4b,0x4a,0x7a,0x4a,0x2,0xf,0x0,0x0,0x8,0x10,0x4,0xfe,0xa0,0x18,0x8,0x0,0xf8,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x8,0x4,0x12,0x7f,0x51,0x55,0x55,0x55,0x55,0x55,0x57,0x71,0x51,0x2,0x4,0x8,0x24,0x5e,0x94,0xf4,0x14,0x5c,0x54,0x54,0x54,0x5c,0xd4,0x54,0x24,0x24,0x54,0x88,
++0x0,0x8,0x75,0x51,0x53,0x59,0x55,0x51,0x57,0x55,0x55,0x75,0x59,0x9,0x8,0x0,0x80,0x88,0xfc,0x0,0xf8,0x8,0x48,0x28,0xfe,0x8,0x48,0x28,0x8,0xfc,0x8,0x30,
++0x1,0x8,0x74,0x54,0x51,0x51,0x5d,0x55,0x55,0x55,0x55,0x75,0x55,0xa,0x11,0x0,0xfc,0x8,0x50,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x2c,0x6,0xfc,0x0,
++0x0,0x2,0x7a,0x4b,0x48,0x4f,0x48,0x48,0x4b,0x4a,0x4a,0x7b,0x4a,0x0,0x7,0x0,0x40,0x48,0x48,0xf8,0x40,0xfe,0x40,0x48,0xfc,0x48,0x48,0xf8,0x40,0x48,0xfc,0x4,
++0x11,0x11,0x27,0x22,0x7d,0x17,0x21,0x79,0x7,0xf9,0x1,0x1f,0x10,0x10,0x1f,0x10,0x8,0x8,0xd0,0x10,0x3c,0xc8,0x10,0x3c,0xc0,0x3e,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x2,0x12,0x7f,0x52,0x53,0x51,0x57,0x55,0x55,0x57,0x51,0x5f,0x71,0x1,0x1,0x1,0x90,0x90,0xf0,0x94,0xbe,0x14,0xd4,0x54,0x54,0xd4,0x14,0xf4,0x24,0x24,0x54,0x88,
++0x0,0x0,0xf,0x70,0x57,0x54,0x57,0x54,0x57,0x50,0x53,0x72,0x53,0x2,0x3,0x2,0xa0,0xa4,0xfe,0xa0,0xfc,0xa4,0xfc,0xa4,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,
++0x0,0x7,0x70,0x50,0x57,0x54,0x54,0x57,0x50,0x57,0x50,0x7f,0x51,0x2,0x5,0x0,0x4,0xfe,0xa0,0xa4,0xfe,0xa4,0xa4,0xfc,0x0,0xfc,0x0,0xfe,0x50,0x4c,0x44,0x80,
++0x0,0x0,0x77,0x54,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x7b,0x4d,0x11,0x23,0x0,0x28,0x24,0xfe,0x20,0x20,0xe4,0x24,0x24,0xe8,0x28,0x28,0x90,0x50,0x2a,0x4a,0x84,
++0x7,0x14,0x7d,0x55,0x56,0x56,0x55,0x58,0x50,0x5f,0x51,0x72,0x51,0x0,0x1,0x6,0xbc,0xa4,0xac,0xac,0xb4,0xb4,0x28,0xc4,0x80,0xfe,0x10,0x10,0x20,0xc0,0x30,0x8,
++0x0,0x14,0x7c,0x57,0x50,0x57,0x54,0x54,0x57,0x54,0x54,0x77,0x54,0x8,0xa,0x11,0x40,0x44,0x44,0xfc,0x4,0xbe,0xa4,0xa4,0xbc,0xa4,0xa4,0xbc,0xa4,0xa4,0xd4,0x8,
++0x4,0x2,0x72,0x5f,0x54,0x54,0x57,0x55,0x55,0x55,0x55,0x75,0x49,0xb,0x10,0x0,0x20,0x24,0x3e,0x40,0xa0,0x24,0x3e,0x50,0x14,0xfe,0x10,0x10,0x28,0x28,0x44,0x82,
++0x0,0x10,0x7f,0x51,0x50,0x57,0x54,0x54,0x57,0x54,0x55,0x75,0x55,0x5,0x4,0x4,0x80,0x44,0xfe,0x10,0xa4,0xfe,0x44,0x44,0xfc,0x44,0xf4,0x14,0x14,0xf4,0x14,0x8,
++0x0,0x0,0x7,0x74,0x58,0x51,0x55,0x55,0x59,0x52,0x5c,0x72,0x52,0x2,0x3,0x0,0x80,0x40,0xfe,0x2,0x94,0x50,0x24,0x4a,0x8a,0xf8,0x40,0x48,0x48,0x48,0xf8,0x8,
++0x1,0x1,0xf,0x71,0x57,0x50,0x57,0x54,0x54,0x57,0x50,0x74,0x52,0xf,0x0,0x0,0x4,0x44,0xe4,0x8,0xc8,0x10,0xc4,0x44,0x48,0xd2,0x2,0x44,0x84,0xe8,0x10,0x20,
++0x0,0x7,0x74,0x56,0x55,0x57,0x54,0x56,0x56,0x56,0x7b,0x48,0x8,0x11,0x22,0x0,0x4,0xfe,0x8,0x28,0x4e,0xf2,0x84,0xa8,0xa8,0xa8,0xe8,0xa8,0x88,0x14,0x24,0x42,
++0x0,0x8,0x7f,0x48,0x4a,0x49,0x4b,0x4e,0x4b,0x4a,0x4b,0x78,0x49,0x2,0x5,0x0,0x40,0x44,0xfe,0x40,0xa8,0x10,0xf8,0xe,0xf8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x80,
++0x0,0x2,0x79,0x48,0x4f,0x49,0x48,0x4b,0x48,0x4b,0x48,0x7f,0x48,0x1,0x1,0x6,0xa0,0xa8,0xb0,0xa4,0xfe,0x10,0xa0,0xf8,0x40,0xf8,0x40,0xfe,0xa0,0x10,0x10,0xc,
++0x1,0x9,0x7d,0x49,0x49,0x48,0x4f,0x4a,0x4b,0x4a,0x4b,0x7a,0x43,0xe,0x4,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x40,0xfc,0x44,0xe8,0x68,0xd0,0x68,0x46,0x40,
++0x0,0x8,0x7d,0x49,0x4b,0x4d,0x49,0x49,0x49,0x49,0x49,0x79,0x49,0x2,0x2,0x4,0xa0,0x90,0xfc,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,0xa8,0xa4,0x4,
++0x0,0x1,0x77,0x54,0x55,0x54,0x57,0x54,0x55,0x56,0x70,0x4f,0x0,0x1,0x2,0xc,0x80,0x4,0xfe,0x44,0x54,0x44,0xfc,0xc4,0x74,0x4c,0x40,0xfe,0xa0,0x10,0x8,0x6,
++0x0,0x0,0x10,0x79,0x52,0x55,0x58,0x52,0x52,0x53,0x50,0x77,0x54,0x5,0x4,0x4,0x40,0x40,0xa0,0x10,0x48,0xf6,0xa0,0x48,0xa8,0xf8,0x44,0xfe,0x94,0xf4,0x4,0xc,
++0x1,0x11,0x7a,0x57,0x5c,0x57,0x54,0x57,0x50,0x5f,0x50,0x73,0x52,0x3,0x2,0x3,0x0,0xf0,0x20,0xfc,0x44,0xfc,0x44,0xfc,0x0,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,
++0x2,0x11,0x78,0x57,0x54,0x55,0x54,0x57,0x50,0x53,0x52,0x72,0x53,0x2,0x2,0x3,0x8,0x10,0xa4,0xfe,0x44,0x54,0x44,0xfc,0x0,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,
++0x0,0x7,0x71,0x55,0x52,0x53,0x54,0x5b,0x52,0x52,0x53,0x70,0x52,0x1,0x1f,0x0,0x40,0x48,0x30,0x24,0x18,0xf0,0x8,0xf6,0x10,0x10,0xf0,0x0,0x10,0x24,0xfe,0x0,
++0x1,0xf,0x71,0x50,0x57,0x50,0x53,0x52,0x53,0x50,0x57,0x74,0x55,0x5,0x5,0x4,0x10,0xfe,0x10,0x44,0xfe,0x0,0xf8,0x8,0xf8,0x4,0xfe,0x4,0xf4,0x14,0xf4,0xc,
++0x1,0x11,0x7f,0x51,0x53,0x55,0x59,0x51,0x57,0x50,0x5f,0x70,0x52,0x4,0x9,0x0,0x10,0x14,0xfe,0x10,0xb8,0x54,0x12,0x10,0xfc,0x0,0xfe,0x40,0x48,0x46,0x42,0x80,
++0x0,0x10,0x78,0x57,0x54,0x57,0x54,0x54,0x57,0x54,0x55,0x7a,0x49,0x10,0x23,0x0,0x48,0x7c,0x40,0xfe,0x42,0xf8,0x40,0x38,0xfe,0x80,0x48,0xb0,0x70,0xae,0x24,0x60,
++0x0,0x0,0x77,0x52,0x51,0x5f,0x50,0x53,0x52,0x53,0x52,0x73,0x54,0x5,0x9,0x1,0x80,0x40,0xfc,0x8,0x10,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x44,0x42,0x12,0xf0,
++0x0,0x0,0x77,0x55,0x5b,0x51,0x53,0x51,0x5f,0x51,0x52,0x75,0x48,0x0,0x7,0x0,0x80,0x40,0xfe,0x12,0xfc,0x10,0xf8,0x10,0xfe,0x50,0x48,0xf6,0x40,0x48,0xfc,0x0,
++0x0,0x7,0x74,0x54,0x54,0x57,0x54,0x54,0x57,0x56,0x76,0x4a,0xa,0x13,0x22,0x0,0x10,0xc8,0x7e,0x40,0x54,0xd4,0x3e,0x8,0xc8,0x48,0x7e,0x48,0x48,0xc8,0x48,0x8,
++0x0,0x7,0x70,0x57,0x54,0x5b,0x50,0x53,0x50,0x5f,0x50,0x77,0x54,0x4,0x4,0x4,0x8,0xfc,0x40,0xfe,0x42,0x5c,0x40,0x58,0x4,0xfe,0x80,0xfc,0xa4,0xa4,0xa4,0xc,
++0x0,0x0,0x77,0x55,0x59,0x52,0x56,0x51,0x53,0x54,0x5b,0x70,0x51,0x2,0x5,0x0,0x80,0x40,0xfe,0x2,0xbc,0xa8,0xb0,0x10,0xf8,0x6,0xf8,0x40,0x50,0x4c,0x44,0x80,
++0x0,0x7,0x70,0x57,0x55,0x58,0x51,0x51,0x53,0x56,0x5b,0x72,0x53,0x2,0x3,0x2,0x8,0xfc,0x40,0xfe,0x52,0xe4,0x50,0x20,0xfc,0x20,0xfc,0x20,0xfc,0x20,0xfe,0x0,
++0x0,0x17,0x78,0x53,0x52,0x57,0x55,0x5b,0x51,0x57,0x51,0x7f,0x51,0x3,0xd,0x1,0x48,0xfc,0x40,0xf8,0x8,0xfe,0x12,0xfc,0x10,0xfc,0x10,0xfe,0x48,0x30,0x9e,0x4,
++0x0,0x7f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7f,0x40,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x7f,0x40,0x4f,0x40,0x40,0x41,0x5f,0x41,0x41,0x41,0x41,0x43,0x40,0x7f,0x40,0x4,0xfe,0x4,0xe4,0x44,0x84,0x24,0xf4,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x7f,0x42,0x42,0x42,0x7f,0x44,0x44,0x48,0x44,0x43,0x42,0x44,0x48,0x7f,0x40,0x4,0xfe,0x4,0x4,0x14,0xfc,0x44,0x44,0x44,0x44,0x84,0x84,0x64,0x14,0xfc,0x4,
++0x0,0x7f,0x41,0x41,0x42,0x44,0x48,0x54,0x64,0x45,0x46,0x44,0x43,0x40,0x7f,0x40,0x4,0xfe,0x4,0x4,0x84,0x44,0x24,0x5c,0x84,0x4,0x4,0x24,0xe4,0x4,0xfc,0x4,
++0x0,0x7f,0x48,0x48,0x4f,0x54,0x54,0x64,0x48,0x49,0x51,0x62,0x44,0x40,0x7f,0x40,0x4,0xfe,0x4,0x14,0xfc,0x94,0x94,0x94,0x94,0x14,0x14,0x54,0x24,0x4,0xfc,0x4,
++0x0,0x7f,0x41,0x41,0x42,0x44,0x4a,0x51,0x6f,0x40,0x44,0x42,0x41,0x40,0x7f,0x40,0x4,0xfe,0x4,0x4,0x84,0x44,0x24,0x1c,0xe4,0x24,0x44,0x84,0x4,0x84,0xfc,0x4,
++0x0,0x7f,0x42,0x42,0x7f,0x44,0x47,0x4c,0x57,0x64,0x47,0x44,0x44,0x44,0x7f,0x40,0x4,0xfe,0x4,0x14,0xfc,0x4,0xe4,0x24,0xe4,0x24,0xe4,0x24,0xa4,0x44,0xfc,0x4,
++0x0,0x7f,0x40,0x5f,0x42,0x4f,0x44,0x7f,0x40,0x4f,0x48,0x48,0x4f,0x40,0x7f,0x40,0x4,0xfe,0x4,0xf4,0x4,0xe4,0x24,0xfc,0x4,0xe4,0x24,0x24,0xe4,0x4,0xfc,0x4,
++0x0,0x7f,0x41,0x41,0x5f,0x41,0x4f,0x41,0x5f,0x40,0x44,0x42,0x41,0x40,0x7f,0x40,0x4,0xfe,0x4,0x4,0xf4,0x4,0xe4,0x4,0xf4,0x24,0x44,0x84,0x4,0x84,0xfc,0x4,
++0x0,0x7f,0x41,0x41,0x5f,0x41,0x7f,0x44,0x42,0x4f,0x41,0x5f,0x41,0x41,0x7f,0x40,0x4,0xfe,0x4,0x24,0xf4,0x4,0xfc,0x44,0x84,0xe4,0x4,0xf4,0x4,0x4,0xfc,0x4,
++0x0,0x7f,0x40,0x5f,0x52,0x5f,0x40,0x7f,0x48,0x4f,0x45,0x4c,0x56,0x44,0x7f,0x40,0x4,0xfe,0x4,0xf4,0x94,0xf4,0x4,0xfc,0x24,0xe4,0x44,0x84,0x74,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x7f,0x54,0x54,0x55,0x54,0x54,0x57,0x5c,0x54,0x10,0x10,0x10,0x10,0x20,0x20,0x24,0xfe,0x20,0x28,0xfc,0x20,0x20,0xfe,0x22,0x22,0x2a,0x24,0x20,0x20,
++0x10,0x10,0x11,0x7d,0x55,0x55,0x56,0x54,0x57,0x54,0x5c,0x54,0x10,0x10,0x11,0x16,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x24,0xfe,0x20,0x50,0x50,0x88,0x88,0x4,0x2,
++0x10,0x10,0x10,0x7d,0x55,0x55,0x55,0x55,0x55,0x55,0x5d,0x55,0x12,0x12,0x14,0x13,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xf8,0x8,0x48,0x50,0x50,0x20,0x50,0x8e,0x4,
++0x8,0x8,0xfe,0x12,0x32,0xc,0x12,0x61,0x1,0x1f,0x11,0x11,0x11,0x11,0x1,0x1,0x0,0x0,0xfc,0x44,0x28,0x10,0x28,0x46,0x10,0xf8,0x10,0x10,0x50,0x20,0x0,0x0,
++0x10,0x10,0x13,0x7c,0x55,0x54,0x57,0x54,0x54,0x55,0x5d,0x52,0x14,0x10,0x10,0x10,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x88,0x88,0xfe,0x8,0x88,0x48,0x8,0x28,0x10,
++0x10,0x10,0x11,0x7c,0x55,0x54,0x57,0x54,0x55,0x55,0x5d,0x55,0x11,0x10,0x10,0x13,0x20,0x28,0xfc,0x20,0xfc,0x20,0xfe,0x0,0xfc,0x4,0x24,0x24,0x20,0x58,0x86,0x2,
++0x10,0x11,0x11,0x7d,0x55,0x55,0x55,0x55,0x55,0x55,0x5d,0x55,0x11,0x11,0x11,0x11,0x4,0xfe,0x4,0xfc,0x24,0x24,0xfc,0x24,0x34,0x2c,0x24,0xfc,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x7d,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x5d,0x11,0x11,0x11,0x11,0x80,0xa0,0x94,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x10,0x14,0xfe,0x0,0x0,
++0x10,0x11,0x11,0x7d,0x55,0x55,0x55,0x55,0x55,0x55,0x5d,0x56,0x12,0x14,0x19,0x10,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x20,0x48,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x21,0x21,0x21,0xf9,0xa9,0xa8,0xab,0xaa,0xab,0xa8,0xab,0xb9,0x20,0x20,0x21,0x2e,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x94,0xfc,0x0,0xf8,0x10,0xa0,0x40,0xb0,0xe,
++0x10,0x11,0x10,0x7c,0x57,0x54,0x55,0x55,0x55,0x55,0x5d,0x54,0x13,0x10,0x10,0x10,0x20,0xfc,0x88,0x50,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x20,0xfe,0x20,0x20,0x20,
++0x10,0x11,0x10,0x7c,0x57,0x54,0x54,0x55,0x54,0x55,0x5c,0x57,0x10,0x10,0x10,0x13,0x50,0x54,0xd8,0x50,0xfe,0x88,0x50,0xfc,0x20,0xfc,0x20,0xfe,0x20,0x50,0x88,0x6,
++0x10,0x10,0x13,0x7d,0x54,0x57,0x54,0x54,0x57,0x54,0x5d,0x55,0x11,0x11,0x11,0x11,0x8,0x1c,0xe0,0x24,0xa8,0xfe,0x70,0xa8,0x26,0x24,0xfe,0x24,0xfc,0x24,0xfc,0x4,
++0x1,0x21,0x21,0x3f,0x0,0x3f,0x8,0x8,0x8,0x14,0x12,0x21,0x20,0x41,0x86,0x18,0x0,0x8,0x8,0xf8,0x0,0xf0,0x20,0x40,0x80,0xf0,0x10,0x20,0xc0,0x40,0x30,0xe,
++0x10,0x10,0x11,0x10,0x54,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x5,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x13,0x10,0x54,0x54,0x54,0x57,0x54,0x54,0x54,0x54,0x7d,0x5,0x2,0x4,0x0,0x4,0xfe,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0x8,0x8,0x8,0x8,
++0x10,0x10,0x10,0x13,0x54,0x54,0x54,0x55,0x54,0x54,0x54,0x54,0x7c,0x4,0x1,0x6,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0xfc,0x84,0x88,0x50,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x11,0x11,0x11,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x5,0x1,0x0,0x4,0xfe,0x0,0x4,0x44,0x28,0x28,0x10,0x10,0x28,0x24,0x44,0x80,0x0,0xfe,0x0,
++0x10,0x10,0x11,0x10,0x55,0x55,0x55,0x54,0x54,0x54,0x54,0x55,0x7e,0x4,0x0,0x0,0x0,0x8,0xfc,0x10,0x10,0x14,0xfe,0x10,0x30,0x50,0x90,0x10,0x10,0x10,0x50,0x20,
++0x10,0x11,0x11,0x11,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x54,0x7d,0x5,0x2,0xc,0x8,0xfc,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0x68,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x0,0x0,0x3f,0x2,0x2,0xff,0x4,0x8,0x31,0xc1,0x11,0x11,0x11,0x11,0x1f,0x0,0x10,0x38,0xc0,0x0,0x4,0xfe,0x40,0x30,0xe,0x4,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x1,0x21,0x21,0x3f,0x21,0x2,0x4,0xa,0x31,0xc0,0xf,0x0,0x0,0x0,0x0,0x1,0x0,0x8,0x8,0xf8,0x8,0x80,0x40,0x30,0xe,0x4,0xf0,0x10,0x20,0x40,0x80,0x0,
++0x1,0x21,0x21,0x3f,0x0,0x1f,0x10,0x10,0x14,0x12,0x11,0x12,0x24,0x28,0x40,0x80,0x0,0x8,0x8,0xf8,0x0,0xf0,0x10,0x10,0x50,0x90,0x10,0x90,0x50,0x52,0xa,0x4,
++0x1,0x21,0x21,0x3f,0x0,0x3f,0x21,0x21,0x21,0x3f,0x20,0x20,0x20,0x20,0x1f,0x0,0x0,0x8,0x8,0xf8,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x10,0x10,0x55,0x54,0x54,0x54,0x54,0x55,0x55,0x55,0x7d,0x5,0x1,0x1,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x21,0x21,0x3f,0x0,0xff,0x0,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x0,0x8,0x8,0xf8,0x4,0xfe,0x10,0x90,0xd0,0x90,0x90,0x90,0x90,0x10,0x50,0x20,
++0x1,0x21,0x21,0x3f,0x2,0x2,0xff,0x4,0x4,0x8,0x1f,0x0,0x8,0x10,0x62,0x1,0x0,0x8,0x8,0xf8,0x0,0x4,0xfe,0x0,0x80,0x90,0xf8,0x80,0x90,0x8c,0x84,0x0,
++0x10,0x10,0x11,0x11,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7c,0x4,0x0,0x0,0x0,0x4,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,
++0x10,0x10,0x10,0x10,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x5,0x1,0x1,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x9,0x9,0x11,0x11,0x3f,0x50,0x90,0x10,0x11,0x1,0x21,0x21,0x21,0x21,0x3f,0x0,0x0,0x40,0x24,0xfe,0x0,0x80,0x84,0x44,0x3c,0x0,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x10,0x10,0x55,0x56,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x4,0x0,0x0,0x80,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0xe4,0x24,0x4,0x28,0x10,
++0x1,0x21,0x21,0x3f,0x4,0x78,0x42,0x42,0x42,0x42,0x4e,0x72,0x4,0x4,0x18,0x60,0x0,0x8,0x8,0xf8,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0xa4,0x98,0x80,0x80,0x80,
++0x10,0x11,0x11,0x11,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x5,0x1,0x0,0x4,0xfe,0x4,0x4,0xfc,0x20,0x20,0x24,0xfe,0x10,0x10,0x10,0x8,0x4a,0x86,0x2,
++0x10,0x13,0x10,0x10,0x54,0x54,0x57,0x54,0x55,0x54,0x54,0x57,0x7c,0x4,0x0,0x0,0x0,0xfc,0x88,0x50,0x20,0xd8,0x6,0x20,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x10,0x11,0x11,0x11,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x5,0x1,0x1,0x4,0xfe,0x4,0x14,0xfc,0x4,0x4,0x74,0x54,0x54,0x54,0x74,0x54,0x4,0x14,0x8,
++0x20,0x20,0x23,0x20,0xa8,0xaf,0xa8,0xa9,0xa9,0xab,0xad,0xa9,0xf9,0x9,0x2,0x4,0x8,0x3c,0xc0,0x40,0x44,0xfe,0xa0,0x10,0x18,0x16,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x10,0x10,0x10,0x55,0x56,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x5,0x0,0x0,0x80,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0xe4,0x24,0x24,0xe4,0x4,0x28,0x10,
++0x10,0x10,0x10,0x11,0x56,0x55,0x54,0x54,0x57,0x54,0x54,0x55,0x7c,0x4,0x0,0x0,0x40,0x40,0xf8,0x10,0x24,0xfe,0x24,0x24,0xfe,0x24,0x24,0xfc,0x24,0x20,0xa0,0x40,
++0x10,0x10,0x17,0x10,0x54,0x57,0x56,0x54,0x55,0x54,0x54,0x54,0x7c,0x4,0x1,0x2,0x90,0x94,0xfe,0x90,0x0,0xfe,0x42,0x44,0xf8,0x48,0x48,0x48,0x88,0x88,0x28,0x10,
++0x10,0x10,0x10,0x13,0x54,0x55,0x54,0x54,0x57,0x54,0x54,0x54,0x7c,0x5,0x2,0x0,0x20,0x20,0x24,0xfe,0x20,0x24,0xa8,0x20,0xfe,0x20,0x70,0xa8,0xa8,0x24,0x22,0x20,
++0x1,0x21,0x21,0x3f,0x8,0x8,0x8,0x7e,0x9,0x1d,0x2a,0x28,0x48,0x89,0x9,0x8,0x0,0x8,0x8,0xf8,0x0,0x10,0x90,0x90,0x8,0x48,0x46,0x80,0x90,0x8,0xfc,0x4,
++0x10,0x10,0x10,0x13,0x54,0x54,0x55,0x57,0x55,0x55,0x55,0x55,0x7d,0x4,0x0,0x0,0x20,0x20,0x24,0xfe,0x50,0xa8,0xfc,0x26,0x24,0xfc,0x24,0x24,0xfc,0x20,0x22,0x1e,
++0x1,0x21,0x21,0x3f,0x0,0x3f,0x21,0x2f,0x21,0x27,0x24,0x24,0x27,0x20,0x3f,0x20,0x0,0x8,0x8,0xf8,0x0,0xf8,0x8,0xe8,0x8,0xc8,0x48,0x48,0xc8,0x8,0xf8,0x8,
++0x11,0x10,0x10,0x10,0x55,0x54,0x57,0x54,0x54,0x55,0x56,0x54,0x7c,0x4,0x0,0x0,0x8,0x90,0x60,0x90,0x48,0x40,0xfe,0x80,0xf8,0x88,0xf8,0x88,0xf8,0x88,0xa8,0x90,
++0x10,0x10,0x13,0x10,0x55,0x55,0x55,0x54,0x55,0x54,0x54,0x57,0x7c,0x4,0x1,0x0,0x80,0x48,0xfc,0x0,0xf8,0x8,0xf8,0x0,0xf8,0x10,0x60,0xfe,0x40,0x40,0x40,0x80,
++0x10,0x10,0x10,0x11,0x55,0x56,0x54,0x55,0x54,0x55,0x54,0x54,0x7c,0x4,0x3,0x0,0x40,0x20,0x20,0xfe,0x2,0x54,0x88,0x4,0x0,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x11,0x11,0x11,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x2,0x4,0x8,0x0,0x4,0xfe,0x4,0x4,0xfc,0x10,0x54,0x54,0x54,0x7c,0x10,0x12,0x92,0x92,0xfe,0x2,
++0x10,0x10,0x13,0x10,0x54,0x55,0x55,0x56,0x54,0x55,0x54,0x54,0x7c,0x5,0x2,0x0,0x88,0x88,0xfe,0x88,0x0,0xfe,0x2,0x24,0x20,0xfe,0x20,0x70,0xa8,0x26,0x24,0x20,
++0x10,0x13,0x10,0x10,0x55,0x55,0x55,0x55,0x54,0x54,0x57,0x54,0x7c,0x4,0x0,0x3,0x4,0xfe,0x50,0x54,0xfe,0x54,0x54,0xfc,0x40,0x44,0xfe,0x88,0x90,0x60,0x98,0x4,
++0x1,0x21,0x21,0x3f,0x0,0x3f,0x20,0x3f,0x24,0x3f,0x24,0x29,0x46,0x45,0x98,0x0,0x0,0x8,0x8,0xf8,0x50,0xfe,0x40,0xc4,0x44,0xc8,0xa8,0x30,0x20,0x52,0x8a,0x6,
++0x1,0x21,0x21,0x3f,0x0,0x1f,0x11,0x1f,0x11,0x1f,0x2,0x51,0x51,0x90,0xf,0x0,0x0,0x8,0x8,0xf8,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x0,0x8,0x6,0x12,0xf0,0x0,
++0x1,0x21,0x21,0x3f,0x0,0x1f,0x11,0x1f,0x11,0x1f,0x12,0x2,0x4,0x8,0x30,0x40,0x0,0x8,0x8,0xf8,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x90,0xa8,0xba,0x82,0x7e,0x0,
++0x1,0x21,0x21,0x3f,0x1,0x6,0x38,0xcf,0x0,0x3e,0x22,0x3e,0x22,0x3e,0x22,0x26,0x0,0x8,0x8,0xf8,0x0,0xc0,0x30,0xee,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0x18,
++0x11,0x10,0x10,0x13,0x54,0x55,0x54,0x57,0x54,0x54,0x55,0x55,0x7e,0x4,0xb,0x0,0x8,0x90,0xa0,0xfe,0x40,0xfc,0x40,0xfe,0x80,0x88,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x11,0x10,0x54,0x57,0x54,0x54,0x55,0x54,0x57,0x54,0x55,0x7c,0x4,0x0,0x3,0x20,0x24,0xa8,0x20,0xfe,0x20,0xa8,0x24,0x40,0xfe,0x88,0x8,0x90,0x60,0x98,0x4,
++0x11,0x10,0x10,0x13,0x54,0x54,0x55,0x55,0x57,0x54,0x55,0x55,0x7e,0x3,0x0,0x0,0x4,0x88,0x0,0xfe,0x88,0x88,0x10,0x54,0xb8,0x88,0x10,0x14,0xa4,0xfc,0x84,0x0,
++0x10,0x11,0x11,0x11,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x2,0x4,0x0,0x4,0xfe,0x24,0x24,0xfc,0x0,0x4,0x7e,0x44,0x7c,0x44,0x7c,0x44,0x44,0x7c,0x44,
++0x20,0x20,0x27,0x20,0xaf,0xa8,0xa9,0xaf,0xa9,0xaf,0xa8,0xa9,0xf9,0xa,0x4,0x0,0x8,0x3c,0xc0,0x44,0xfe,0x40,0x50,0x5c,0x50,0x5c,0xe0,0x50,0x48,0x4e,0x44,0x40,
++0x1,0x21,0x3f,0x1,0xff,0x0,0x1f,0x10,0x1f,0x0,0x3f,0x20,0x2f,0x28,0x2f,0x20,0x0,0x8,0xf8,0x0,0xfe,0x0,0xf0,0x10,0xf0,0x0,0xf8,0x8,0xe8,0x28,0xe8,0x18,
++0x20,0x22,0x21,0xaa,0xa8,0xa9,0xab,0xad,0xa9,0xa9,0xa9,0xa9,0xf9,0x9,0x1,0x1,0x40,0x48,0x50,0x48,0xa0,0x10,0xfe,0x14,0x10,0xf0,0x10,0x10,0xf0,0x10,0x50,0x20,
++0x10,0x13,0x10,0x54,0x57,0x54,0x55,0x55,0x55,0x55,0x55,0x54,0x7f,0x4,0x0,0x0,0x20,0xfe,0x88,0x50,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x20,0xfe,0x20,0x20,0x20,
++0x20,0x22,0x21,0x20,0xaf,0xa9,0xaa,0xac,0xaa,0xab,0xac,0xaa,0xf9,0x9,0x2,0x4,0x40,0x48,0x50,0x44,0xfe,0x50,0x48,0x44,0x8,0xbc,0xa8,0xa8,0x7e,0x8,0x8,0x8,
++0x20,0x27,0x20,0x22,0xa9,0xa9,0xaa,0xac,0xab,0xaa,0xaa,0xab,0xf9,0x8,0x7,0x0,0x20,0xa8,0xb0,0xa4,0x18,0xf0,0xe,0x4,0xf8,0x8,0x8,0xf8,0x10,0xa4,0xfe,0x0,
++0x1,0x1,0x45,0x7f,0x51,0x59,0x6b,0x5d,0x69,0x5d,0x6b,0x49,0x59,0x41,0x7f,0x40,0x0,0x0,0x14,0xfc,0x44,0x64,0xac,0x74,0xa4,0x74,0xac,0x24,0x64,0x4,0xfc,0x4,
++0x1,0x21,0x3f,0x0,0x26,0x38,0x21,0x1f,0x20,0x3e,0x48,0xa,0xff,0x14,0x22,0x41,0x0,0x8,0xf8,0x0,0xfc,0x8,0x30,0x10,0xfe,0x14,0x50,0x5c,0x50,0xb0,0x90,0xe,
++0x1,0x21,0x3f,0x8,0xff,0x8,0x3e,0x22,0x2a,0x2a,0x2a,0x2a,0xff,0x8,0x14,0x62,0x0,0x8,0xf8,0x0,0xfe,0x20,0x7c,0x44,0x54,0x54,0x54,0x54,0x54,0x28,0x26,0xc2,
++0x0,0x0,0x1,0x2,0x4,0x8,0x10,0x1,0x3,0x5,0x9,0x31,0x1,0x1,0x1,0x1,0x80,0x80,0x0,0x0,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x8,0x10,0x27,0x40,0x8,0x10,0x20,0x50,0x90,0x11,0x11,0x12,0x14,0x18,0x10,0x80,0x40,0x44,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x8,0x8,0x8,0x8,0x50,0x20,
++0x8,0x8,0x11,0x21,0x49,0x9,0x11,0x31,0x51,0x91,0x11,0x11,0x11,0x11,0x1f,0x10,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xfe,0x0,
++0x8,0x8,0x10,0x20,0x49,0xa,0x11,0x31,0x51,0x91,0x11,0x11,0x11,0x11,0x10,0x10,0x80,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0xe4,0x24,0x24,0xe4,0x4,0x28,0x10,
++0xa,0x9,0x10,0x20,0x4b,0x8,0x10,0x37,0x50,0x90,0x1f,0x10,0x10,0x10,0x10,0x10,0x8,0x10,0xa0,0x8,0xfc,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x8,0x8,0x10,0x21,0x4b,0x8,0x10,0x37,0x51,0x91,0x12,0x15,0x10,0x10,0x11,0x16,0x40,0x40,0x88,0x10,0xe0,0x40,0x88,0xfc,0x0,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,
++0x8,0x8,0x10,0x27,0x48,0xa,0x11,0x37,0x50,0x90,0x11,0x12,0x14,0x18,0x10,0x10,0x40,0x40,0x48,0xfc,0x40,0x48,0x50,0xfe,0x40,0xe0,0x50,0x48,0x4e,0x44,0x40,0x40,
++0x8,0x8,0x12,0x22,0x4a,0xa,0x17,0x30,0x50,0x92,0x12,0x12,0x13,0x14,0x14,0x18,0x40,0x40,0x48,0x7c,0x40,0x44,0xfe,0x40,0x40,0x48,0x7c,0x40,0x40,0xc0,0x66,0x1c,
++0x8,0x8,0x12,0x21,0x49,0x8,0x17,0x34,0x54,0x95,0x15,0x15,0x15,0x14,0x14,0x14,0x40,0x48,0x4c,0x48,0x50,0x44,0xfe,0x4,0x4,0xf4,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x8,0x8,0x13,0x22,0x4b,0xa,0x13,0x30,0x57,0x90,0x10,0x13,0x10,0x10,0x1f,0x10,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x40,0x48,0xfc,0x40,0x44,0xfe,0x0,
++0x8,0x8,0x17,0x22,0x49,0x9,0x12,0x33,0x54,0x90,0x1f,0x10,0x12,0x12,0x13,0x10,0x8,0x7c,0x80,0x48,0x48,0x50,0x0,0xfc,0x40,0x44,0xfe,0x40,0x48,0x48,0xf8,0x8,
++0x12,0x12,0x2a,0x4a,0x8f,0x10,0x2f,0x60,0xaf,0x22,0x2f,0x22,0x23,0x2e,0x20,0x21,0x10,0x10,0x90,0xa4,0xbe,0x44,0xa4,0x28,0xa8,0x10,0x90,0x28,0xa8,0x44,0x86,0x0,
++0x12,0x14,0x2f,0x48,0x8f,0x18,0x2f,0x62,0xbf,0x24,0x27,0x24,0x28,0x2b,0x30,0x21,0x10,0x10,0x90,0xa4,0xbe,0xc4,0xa4,0x28,0xa8,0x10,0x90,0xa8,0xa8,0x44,0x86,0x0,
++0xe,0x1a,0x2e,0x4a,0x8e,0x1a,0x2e,0x64,0xa7,0x2c,0x37,0x24,0x27,0x24,0x27,0x24,0xe0,0xa4,0xfe,0xa0,0xe0,0xa0,0xfe,0x84,0xe4,0x84,0xe4,0x84,0xe4,0x84,0xf4,0x8,
++0x0,0x0,0x8,0x10,0x20,0x40,0x8,0x10,0x20,0x40,0x8,0x10,0x20,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x4,0x88,0x50,0x20,0x50,0x88,0x8,0x18,0x28,0x48,0x88,0x8,0x8,0x8,0x50,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x4,0x88,0x50,0x20,0x57,0x88,0x8,0x18,0x28,0x49,0x89,0x9,0xa,0xa,0x54,0x28,0x80,0x80,0x80,0x90,0xf8,0x90,0x90,0x90,0x90,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x4,0x8b,0x50,0x20,0x50,0x88,0xf,0x18,0x28,0x48,0x88,0x8,0x8,0x8,0x50,0x20,0x10,0xf8,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x4,0x88,0x50,0x21,0x51,0x89,0x9,0x19,0x29,0x49,0x89,0x9,0xa,0xa,0x54,0x28,0x40,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x4,0x8b,0x50,0x21,0x51,0x89,0x9,0x19,0x29,0x48,0x88,0xf,0x8,0x8,0x50,0x20,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x4,0x24,0xf4,0x4,0x4,0x28,0x10,
++0x4,0x88,0x53,0x20,0x50,0x88,0x8,0x18,0x2b,0x48,0x88,0x8,0x8,0x8,0x57,0x20,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0x88,0xfe,0x0,
++0x4,0x88,0x50,0x20,0x51,0x8a,0xb,0x18,0x28,0x48,0x88,0x8,0x9,0x9,0x52,0x24,0x40,0x40,0x40,0x90,0x8,0x4,0xfe,0x90,0x90,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x4,0x88,0x51,0x21,0x51,0x89,0x9,0x19,0x29,0x49,0x89,0x9,0x8,0x8,0x50,0x20,0x0,0x4,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,
++0x5,0x89,0x51,0x22,0x52,0x8d,0x9,0x19,0x29,0x49,0x89,0x9,0x9,0x9,0x50,0x20,0x0,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x28,0x10,0x2,0x2,0xfe,0x0,
++0x4,0x88,0x50,0x27,0x50,0x88,0xb,0x1a,0x2a,0x4b,0x88,0x8,0x9,0x9,0x52,0x24,0xa0,0xa0,0xa8,0xfc,0xa8,0xa8,0xf8,0xa0,0xa4,0xfe,0xa4,0xa4,0x34,0x28,0x20,0x20,
++0x4,0x88,0x50,0x20,0x57,0x88,0x9,0x19,0x2f,0x49,0x89,0x9,0x9,0xa,0x50,0x20,0x20,0x28,0x24,0x20,0xfe,0x20,0x20,0x28,0xe8,0x28,0x28,0x10,0x12,0x2a,0xc6,0x2,
++0x4,0x88,0x50,0x21,0x52,0x8c,0x9,0x18,0x28,0x4f,0x88,0x8,0x9,0xa,0x53,0x20,0x40,0x40,0xa0,0x10,0xe,0x24,0xf0,0x0,0x4,0xfe,0x40,0x80,0x10,0x8,0xfc,0x4,
++0x4,0x88,0x53,0x22,0x54,0x88,0x8,0x1f,0x28,0x49,0x88,0x8,0x8,0x8,0x50,0x20,0x40,0x20,0xfe,0x2,0x14,0x10,0x14,0xfe,0x10,0x10,0x90,0x90,0x10,0x10,0x50,0x20,
++0x0,0x88,0x57,0x20,0x51,0x92,0x12,0x33,0x56,0x9a,0x12,0x12,0x12,0x1a,0xa4,0x40,0x10,0x10,0x90,0x90,0x10,0x10,0xd8,0x54,0x54,0x52,0x92,0x10,0x10,0x10,0x50,0x20,
++0x4,0x8a,0x52,0x22,0x53,0x8a,0xa,0x1a,0x2b,0x48,0x88,0xb,0x8,0x8,0x57,0x20,0x0,0x20,0x24,0x28,0xb0,0x20,0x22,0xa2,0x1e,0x40,0x48,0xfc,0x40,0x44,0xfe,0x0,
++0x4,0x89,0x51,0x21,0x51,0x88,0xb,0x1a,0x2a,0x4b,0x8a,0xa,0xb,0xa,0x52,0x22,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x14,0x8,
++0x4,0x88,0x57,0x21,0x51,0x91,0x1f,0x31,0x53,0x93,0x15,0x15,0x19,0x11,0xa1,0x41,0x4,0xc4,0x4,0x14,0x14,0x54,0xf4,0x14,0x14,0x94,0x54,0x14,0x4,0x4,0x14,0x8,
++0x4,0x88,0x50,0x21,0x52,0x8d,0x8,0x18,0x2f,0x48,0x89,0x9,0xa,0xc,0x51,0x20,0x40,0x40,0xa0,0x10,0x8,0xf6,0x40,0x48,0xfc,0x40,0x50,0x48,0x44,0x44,0x40,0x80,
++0x4,0x88,0x50,0x21,0x52,0x8c,0xb,0x18,0x28,0x4a,0x89,0x9,0x9,0x8,0x57,0x20,0x40,0x40,0xa0,0x10,0x8,0x6,0xf8,0x0,0x8,0x48,0x48,0x50,0x50,0x4,0xfe,0x0,
++0x4,0x88,0x57,0x20,0x50,0x8b,0x8,0x1b,0x28,0x48,0x8b,0xa,0xa,0xa,0x53,0x22,0x80,0x44,0xfe,0x0,0x0,0xfc,0x0,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x4,0x88,0x51,0x22,0x57,0x91,0x12,0x35,0x51,0x91,0x13,0x14,0x10,0x10,0xa1,0x46,0x40,0x80,0x10,0x8,0xfc,0x10,0x8,0x4,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x4,0x88,0x57,0x20,0x50,0x89,0xf,0x18,0x2b,0x4a,0x8a,0xa,0xb,0xa,0x50,0x20,0x40,0x44,0xfe,0x40,0xa0,0x14,0xfe,0x8,0xc8,0x48,0x48,0x48,0xc8,0x8,0x28,0x10,
++0x4,0x8b,0x52,0x22,0x53,0x8a,0xa,0x1b,0x28,0x4f,0x88,0x8,0x9,0xa,0x54,0x20,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0xfe,0x40,0xe0,0x50,0x4e,0x44,0x40,
++0x4,0x8f,0x54,0x24,0x54,0x97,0x14,0x10,0x31,0x52,0x95,0x10,0x10,0x10,0xa1,0x46,0x4,0xfe,0xa4,0xa4,0xa4,0xfc,0x84,0x80,0xf8,0x8,0x8,0x90,0x60,0x40,0x80,0x0,
++0x4,0x88,0x53,0x22,0x52,0x8b,0xa,0x1a,0x2b,0x4a,0x88,0x8,0x8,0x9,0x52,0x24,0x0,0x44,0x9e,0x4,0x4,0x9c,0x4,0x4,0xfc,0x94,0x90,0x90,0x90,0x12,0x12,0xe,
++0x4,0x88,0x50,0x21,0x52,0x95,0x18,0x30,0x57,0x90,0x13,0x12,0x12,0x12,0xa3,0x42,0x40,0x40,0xa0,0x10,0x8,0xf6,0x40,0x48,0xfc,0x40,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x88,0x57,0x21,0x51,0x89,0xa,0x1c,0x28,0x4f,0x88,0x8,0x8,0x8,0x50,0x20,0x80,0x48,0xfc,0x10,0x10,0x10,0xa8,0x44,0x40,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x8,0x8f,0x51,0x21,0x51,0x97,0x14,0x34,0x54,0x97,0x11,0x11,0x11,0x11,0xaa,0x44,0x20,0x20,0x20,0x40,0x7e,0x82,0x14,0x10,0x54,0x54,0x52,0x52,0x92,0x10,0x50,0x20,
++0x5,0x89,0x51,0x21,0x5f,0x91,0x11,0x31,0x57,0x94,0x14,0x14,0x17,0x14,0xa0,0x41,0x4,0x3e,0x24,0x24,0xe4,0x3c,0x24,0x24,0xa4,0xbc,0xa4,0xa4,0xa4,0x44,0x94,0x8,
++0x4,0x88,0x57,0x20,0x51,0x92,0x14,0x3b,0x52,0x93,0x12,0x13,0x12,0x10,0xaf,0x40,0x40,0x48,0xfc,0xe0,0x50,0x48,0x46,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x0,0xfe,0x0,
++0x4,0x8b,0x52,0x22,0x53,0x92,0x12,0x33,0x50,0x9f,0x12,0x12,0x12,0x12,0xa3,0x42,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x0,0xfe,0x40,0x48,0x30,0x90,0xe,0x4,
++0x0,0x8f,0x54,0x27,0x54,0x97,0x10,0x33,0x52,0x93,0x12,0x13,0x12,0x12,0xa2,0x42,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x4,0x8b,0x52,0x22,0x53,0x8a,0xa,0x1a,0x2a,0x4a,0x8a,0xa,0xa,0xa,0x54,0x28,0x4,0xfe,0x24,0x24,0xfc,0x0,0xfc,0x84,0xfc,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,
++0x4,0x8b,0x50,0x20,0x57,0x88,0x9,0xa,0x18,0x2f,0x48,0x88,0x9,0xa,0x54,0x20,0x0,0xf8,0x90,0x60,0xfc,0xc4,0x48,0xc0,0x44,0xfe,0x40,0xe0,0x50,0x4e,0x44,0x40,
++0x4,0x8f,0x51,0x20,0x5f,0x88,0xb,0x1a,0x2b,0x4a,0x8b,0x8,0xf,0x8,0x50,0x20,0x40,0xfc,0x10,0xa4,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0x40,0x40,
++0x4,0x8f,0x51,0x20,0x5f,0x88,0xb,0x1a,0x2b,0x4a,0x8b,0x8,0x8,0x9,0x52,0x2c,0x40,0xfc,0x10,0xa4,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0xa0,0xa0,0x22,0x22,0x1e,
++0x0,0x8f,0x58,0x2a,0x69,0xaf,0x28,0x2a,0x6a,0xaa,0x2b,0x28,0x28,0x29,0xb2,0x44,0x4,0xfe,0x0,0x28,0x48,0xee,0x92,0xa4,0xa8,0xa8,0xe8,0x88,0x94,0x14,0x24,0x42,
++0x4,0x88,0x57,0x20,0x52,0x91,0x13,0x36,0x5b,0x92,0x13,0x10,0x12,0x14,0xa9,0x40,0x40,0x44,0xfe,0x40,0xa8,0x10,0xf8,0xe,0xf8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x80,
++0x2,0x8a,0x53,0x24,0x59,0x97,0x15,0x35,0x57,0x95,0x15,0x17,0x15,0x15,0xa8,0x40,0x4,0x3e,0x94,0x94,0x14,0xec,0x40,0x58,0xde,0x68,0x48,0xfe,0x48,0x48,0xc8,0x8,
++0x0,0x8b,0x50,0x2f,0x50,0x97,0x15,0x34,0x57,0x90,0x17,0x10,0x1f,0x15,0xa4,0x48,0x38,0xc0,0x44,0xfe,0x40,0xfc,0x54,0xe4,0xfc,0x40,0xfc,0x40,0xfe,0x24,0x92,0x2,
++0x1,0x8f,0x51,0x27,0x54,0x97,0x11,0x32,0x57,0x9a,0x13,0x12,0x13,0x12,0xa3,0x42,0x10,0xfe,0x10,0xbc,0xa4,0xbc,0x40,0x24,0xfe,0x20,0xfc,0x20,0xfc,0x20,0xfe,0x0,
++0x0,0x10,0x10,0x10,0x1f,0x22,0x22,0x22,0x54,0x8c,0x8,0x8,0x10,0x20,0xc0,0x0,0x10,0x10,0x10,0x10,0xfc,0x10,0x90,0x90,0x90,0x94,0xfe,0x10,0x10,0x10,0x10,0x10,
++0x1,0x7f,0x49,0x49,0x7f,0x49,0x49,0x7f,0x8,0xff,0x8,0x1c,0x2a,0x49,0x88,0x8,0x20,0xa0,0x3c,0x44,0xa8,0x10,0x20,0x60,0xbe,0x22,0x44,0xa4,0x18,0x10,0x20,0xc0,
++0x20,0x20,0x20,0x21,0x3a,0x4c,0x4b,0x4a,0xab,0x12,0x13,0x22,0x22,0x42,0x83,0x2,0x40,0x40,0xa0,0x10,0x8e,0x44,0xf8,0x8,0xf8,0x8,0xf8,0x48,0x30,0x90,0xc,0x4,
++0x4,0xf,0x32,0x7,0x59,0x7f,0x40,0x9f,0x1,0x1f,0x11,0x1f,0x11,0x1f,0x8,0x30,0x0,0xf0,0x60,0x80,0x0,0xfe,0x2,0xf4,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x20,0x18,
++0x2,0x2,0x7,0x4,0xa,0x11,0x6,0x18,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x40,0x80,0x0,0xc0,0x30,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x10,0x1e,0x24,0x28,0x40,0x90,0x10,0x10,0x10,0x12,0x14,0x18,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x20,0x23,0x20,0x3c,0x44,0x89,0x23,0x20,0x20,0x20,0x21,0x25,0x2a,0x32,0x24,0x0,0x0,0xf8,0x20,0x40,0x80,0x4,0xfe,0x94,0x94,0x94,0x24,0x24,0x44,0x44,0xa8,0x10,
++0x20,0x20,0x20,0x3f,0x44,0x8a,0x22,0x22,0x22,0x22,0x23,0x20,0x28,0x30,0x20,0x0,0x40,0x40,0x44,0xfe,0x40,0x48,0x48,0x48,0x48,0x48,0xf8,0x48,0x40,0x42,0x42,0x3e,
++0x21,0x21,0x21,0x3d,0x46,0x89,0x20,0x23,0x20,0x20,0x20,0x24,0x28,0x30,0x20,0x0,0x0,0x0,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0x8,0x8,0x8,0x8,0xa,0xa,0x6,
++0x20,0x20,0x23,0x3c,0x44,0x88,0x20,0x20,0x2f,0x20,0x20,0x24,0x28,0x30,0x27,0x0,0x8,0x3c,0xc0,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x48,0xfc,0x0,
++0x20,0x20,0x23,0x3c,0x44,0x88,0x20,0x2f,0x20,0x20,0x20,0x24,0x29,0x31,0x22,0xc,0x8,0x3c,0xc0,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x20,0x20,0x21,0x3d,0x46,0x88,0x23,0x20,0x20,0x20,0x20,0x24,0x28,0x30,0x21,0x6,0x80,0x84,0xfe,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x20,0x20,0x20,0x3c,0x45,0x8a,0x27,0x20,0x20,0x23,0x22,0x26,0x2a,0x32,0x23,0x2,0x40,0x40,0x80,0x80,0x10,0x8,0xfc,0x4,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x20,0x20,0x3f,0x46,0x8a,0x22,0x22,0x22,0x22,0x22,0x26,0x2a,0x32,0x22,0x2,0x40,0x40,0x84,0xfe,0x4,0x4,0xf4,0x94,0x94,0x94,0x94,0xf4,0x4,0x4,0x14,0x8,
++0x20,0x20,0x23,0x3c,0x44,0x8b,0x22,0x24,0x21,0x20,0x20,0x27,0x28,0x30,0x21,0x0,0x40,0x48,0xfc,0x40,0x40,0xfc,0x4,0x8,0xf0,0x20,0x44,0xfe,0x40,0x40,0x40,0x80,
++0x20,0x20,0x20,0x3c,0x45,0x8a,0x25,0x20,0x20,0x27,0x20,0x21,0x2a,0x34,0x21,0x0,0x40,0x40,0xa0,0xa0,0x10,0x8,0xf6,0x40,0x48,0xfc,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x20,0x23,0x22,0x3e,0x47,0x8a,0x22,0x23,0x22,0x22,0x23,0x26,0x2a,0x32,0x23,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x20,0x24,0xa8,0x30,0x22,0xa2,0x1e,0x0,
++0x20,0x20,0x27,0x3c,0x45,0x8a,0x24,0x2b,0x22,0x23,0x22,0x23,0x2a,0x30,0x27,0x0,0x40,0x48,0xfc,0xe0,0x50,0x48,0x46,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x0,0xfc,0x0,
++0x20,0x20,0x21,0x3d,0x45,0x89,0x21,0x21,0x21,0x20,0x23,0x20,0x28,0x30,0x20,0x7,0x20,0xa4,0x2e,0x24,0x24,0xac,0x24,0x24,0xfc,0x20,0xfc,0x88,0x50,0x20,0xd8,0x6,
++0x21,0x21,0x27,0x39,0x49,0x93,0x2,0x23,0x22,0x23,0x20,0x27,0x28,0x31,0x22,0xc,0x10,0x14,0xfe,0x10,0x10,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0xa0,0x10,0xe,0x4,
++0x21,0x20,0x27,0x38,0x4b,0x90,0xf,0x20,0x21,0x21,0x22,0x2b,0x34,0x28,0x17,0x0,0x10,0xa0,0xfc,0x40,0xfc,0x40,0xfe,0x88,0xfc,0x48,0x48,0xf8,0x88,0x88,0xfe,0x0,
++0x21,0x21,0x27,0x39,0x49,0x90,0x3,0x22,0x23,0x20,0x27,0x20,0x2b,0x30,0x2f,0x0,0x10,0x14,0xfe,0x10,0xf0,0x40,0xf8,0x48,0xf8,0x40,0xfc,0x40,0xf8,0x40,0xfe,0x0,
++0x22,0x22,0x22,0x3f,0x4a,0x92,0xf,0x20,0x27,0x24,0x27,0x24,0x2f,0x34,0x25,0x4,0x88,0x88,0x88,0xd0,0x9e,0xa4,0xf4,0x14,0xd4,0x54,0xc8,0x48,0xd4,0x54,0x64,0x82,
++0x20,0x27,0x24,0x3c,0x4f,0x94,0x4,0x27,0x21,0x27,0x21,0x21,0x2f,0x31,0x22,0x4,0x4,0xbe,0xa4,0xa4,0xbc,0x20,0xa4,0xbc,0x10,0xfc,0x10,0x14,0xfe,0x10,0xc,0x4,
++0x20,0x2f,0x20,0x3b,0x4a,0x97,0x5,0x2b,0x21,0x23,0x21,0x27,0x29,0x33,0x2d,0x1,0x40,0xfe,0x40,0xf8,0x48,0xfe,0x12,0xfc,0x10,0xf8,0x10,0xfe,0x48,0x30,0x8e,0x4,
++0x1,0x0,0x3f,0x20,0x24,0x24,0x24,0x24,0x24,0x27,0x24,0x24,0x44,0x44,0x83,0x0,0x0,0x88,0xfc,0x0,0x0,0x0,0x8,0x30,0xc0,0x0,0x0,0x0,0x4,0x4,0xfc,0x0,
++0x1,0x0,0x3f,0x20,0x20,0x2f,0x20,0x20,0x3f,0x21,0x21,0x21,0x42,0x42,0x84,0x18,0x0,0x88,0xfc,0x0,0x10,0xf8,0x80,0x84,0xfe,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,
++0x1,0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x2f,0x24,0x22,0x21,0x40,0x41,0x86,0x18,0x0,0x88,0xfc,0x80,0x84,0xfe,0x80,0x80,0xf8,0x10,0x20,0x40,0x80,0x60,0x1e,0x4,
++0x1,0x0,0x3f,0x24,0x24,0x27,0x28,0x30,0x27,0x24,0x24,0x27,0x44,0x44,0x84,0x3,0x0,0x88,0xfc,0x0,0x8,0xfc,0x8,0x48,0xe8,0x48,0x48,0xc8,0x28,0x12,0x2,0xfe,
++0x1,0x0,0x3f,0x20,0x22,0x24,0x24,0x2f,0x34,0x24,0x24,0x24,0x45,0x46,0x84,0x4,0x0,0x88,0xfc,0x0,0x20,0x20,0x24,0xfe,0x60,0x70,0xa8,0xa8,0x26,0x24,0x20,0x20,
++0x1,0x0,0x3f,0x24,0x22,0x3f,0x20,0x20,0x2f,0x20,0x20,0x3f,0x40,0x40,0x80,0x0,0x0,0x88,0xfc,0x10,0x20,0xfc,0x80,0x90,0xf8,0x80,0x84,0xfe,0x80,0x80,0x80,0x80,
++0x1,0x0,0x3f,0x22,0x3f,0x22,0x23,0x20,0x27,0x24,0x27,0x24,0x44,0x48,0x88,0x10,0x0,0x88,0xfc,0x20,0xfc,0x20,0xe0,0x0,0xf0,0x10,0xf0,0x80,0x40,0x30,0xe,0x4,
++0x1,0x0,0x3f,0x20,0x2f,0x21,0x22,0x24,0x2f,0x34,0x27,0x24,0x47,0x44,0x80,0x0,0x0,0x88,0xfc,0x80,0xfc,0x40,0xa0,0x90,0xfe,0x94,0xf0,0x90,0xf0,0x92,0x82,0x7e,
++0x1,0x0,0x3f,0x22,0x2c,0x28,0x28,0x2e,0x28,0x28,0x2f,0x29,0x42,0x44,0x88,0x30,0x0,0x88,0xfc,0x80,0xb8,0x88,0x88,0xb8,0x88,0x88,0xf8,0x48,0x20,0x10,0xe,0x4,
++0x1,0x0,0x3f,0x21,0x2f,0x28,0x2f,0x28,0x2f,0x21,0x22,0x3f,0x40,0x40,0x80,0x0,0x0,0x88,0xfc,0x0,0xf8,0x88,0xf8,0x88,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x0,0x3f,0x20,0x2f,0x20,0x3f,0x21,0x2f,0x22,0x27,0x2c,0x34,0x24,0x41,0x42,0x8c,0x80,0xfe,0x80,0xf8,0x88,0xfe,0x8,0xf8,0x20,0xf0,0x1e,0x94,0x90,0x40,0x30,0x8,
++0x1,0x0,0x3f,0x22,0x2f,0x22,0x2f,0x22,0x3f,0x24,0x27,0x24,0x44,0x4a,0x91,0x0,0x0,0x88,0xfc,0x20,0xa4,0x3e,0xa8,0x48,0xa8,0x28,0xa8,0x90,0x90,0xa8,0x44,0x82,
++0x0,0x3f,0x24,0x3f,0x24,0x27,0x20,0x2f,0x28,0x2f,0x20,0x2f,0x20,0x4f,0x40,0xbf,0x80,0xfe,0x10,0xfc,0x10,0xf0,0x80,0xf8,0x88,0xf8,0x80,0xf8,0x80,0xf8,0x80,0xfe,
++0x0,0x3f,0x20,0x2f,0x28,0x2f,0x28,0x2f,0x20,0x2f,0x20,0x3f,0x24,0x4b,0x40,0xbf,0x80,0xfe,0x0,0xf8,0x88,0xf8,0x88,0xf8,0x80,0xf8,0x80,0xfe,0x90,0xe8,0x80,0xfe,
++0x0,0x3f,0x24,0x27,0x29,0x2a,0x3f,0x2a,0x2f,0x2a,0x2f,0x2a,0x2a,0x4a,0x51,0x80,0x80,0xfe,0x0,0xfc,0x24,0x24,0xac,0xc8,0xa8,0xbe,0xc8,0x88,0xfe,0x88,0x88,0x8,
++0x0,0x3f,0x20,0x3f,0x20,0x2f,0x2a,0x2b,0x2a,0x2f,0x20,0x27,0x20,0x5f,0x42,0x8c,0x80,0xfe,0x80,0xfe,0x0,0xf8,0x28,0xe8,0x28,0xf8,0x0,0xf0,0x0,0xfc,0xa0,0x98,
++0x0,0x3f,0x22,0x24,0x2d,0x36,0x24,0x24,0x27,0x24,0x27,0x24,0x27,0x44,0x44,0x84,0x80,0xfe,0x50,0xfc,0x90,0xfc,0x90,0x9c,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x10,0x10,0x10,0x10,0x58,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x17,0x10,0x58,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x84,0x4,0x28,0x10,
++0x10,0x10,0x10,0x10,0x5b,0x54,0x50,0x91,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x90,0x90,0x10,0x10,0x10,0x10,0x50,0x20,
++0x10,0x10,0x13,0x10,0x58,0x54,0x50,0x97,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x8,0x1c,0xe0,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x17,0x10,0x58,0x54,0x5f,0x90,0x10,0x10,0x10,0x10,0x11,0x11,0x12,0x14,0x0,0x8,0xfc,0x40,0x40,0x44,0xfe,0x40,0x60,0xa0,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x10,0x17,0x58,0x54,0x50,0x93,0x12,0x11,0x10,0x10,0x10,0x11,0x12,0x1c,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0xf8,0x8,0x10,0xa0,0x40,0xa0,0x10,0xe,0x4,
++0x10,0x13,0x12,0x12,0x5a,0x56,0x52,0x92,0x12,0x12,0x12,0x12,0x13,0x12,0x13,0x10,0x8,0xfc,0x0,0x4,0x84,0x48,0x48,0x30,0x10,0x28,0x48,0x84,0x4,0x0,0xfe,0x0,
++0x20,0x20,0x20,0x20,0xb7,0xac,0xa4,0xa4,0x24,0x27,0x24,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xfc,0x44,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x10,0x10,0x59,0x56,0x50,0x90,0x17,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x80,0x80,0x88,0xfc,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x11,0x11,0x11,0x12,0x5b,0x54,0x53,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x4,0xfe,0x0,0xf8,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x12,0xa,0x6,0x2,
++0x11,0x11,0x11,0x11,0x59,0x55,0x51,0x9f,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x0,0x8,0x10,0x20,0x40,0x80,0x4,0xfe,0x40,0x40,0x20,0x20,0x10,0x4e,0x84,0x0,
++0x10,0x10,0x10,0x10,0x59,0x56,0x54,0x91,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x40,0x40,0xa0,0x90,0x8,0xe,0x4,0xf0,0x10,0x10,0x50,0x20,0x4,0x4,0xfc,0x0,
++0x10,0x10,0x10,0x10,0x59,0x55,0x52,0x94,0x10,0x10,0x10,0x11,0x12,0x13,0x10,0x10,0x0,0x20,0xa0,0x90,0x10,0x8,0xe,0x44,0x40,0x80,0x80,0x10,0x8,0xfc,0x4,0x0,
++0x10,0x10,0x10,0x17,0x58,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x80,0x40,0x4,0xfe,0x40,0x40,0x60,0x50,0x4c,0x44,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x13,0x10,0x58,0x54,0x50,0x93,0x10,0x10,0x10,0x10,0x10,0x10,0x17,0x10,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0x88,0x88,0xfe,0x0,
++0x10,0x10,0x10,0x10,0x5f,0x54,0x50,0x90,0x13,0x12,0x12,0x12,0x12,0x12,0x13,0x12,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x10,0x10,0x5b,0x54,0x50,0x90,0x11,0x11,0x12,0x14,0x18,0x10,0x10,0x10,0x40,0x50,0x48,0x40,0xfe,0x40,0xc0,0xe0,0x50,0x50,0x48,0x4e,0x44,0x40,0x40,0x40,
++0x10,0x17,0x10,0x12,0x59,0x55,0x51,0x90,0x1f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x8,0xfc,0x40,0x48,0x48,0x48,0x50,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x13,0x12,0x5a,0x56,0x53,0x92,0x12,0x12,0x13,0x12,0x10,0x10,0x1f,0x10,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x0,0x4,0xfe,0x0,
++0x10,0x10,0x10,0x13,0x5a,0x56,0x52,0x92,0x12,0x1f,0x10,0x10,0x10,0x11,0x12,0x14,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0x48,0x48,0xfe,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x11,0x11,0x11,0x11,0x5a,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x4,0xfe,0x80,0x80,0x88,0xfc,0x80,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,
++0x10,0x13,0x12,0x12,0x5b,0x56,0x52,0x92,0x12,0x12,0x12,0x12,0x14,0x14,0x18,0x10,0x4,0xfe,0x4,0x4,0xfc,0x0,0x80,0x84,0x88,0x90,0xa0,0xc0,0x82,0x82,0x7e,0x0,
++0x10,0x10,0x10,0x17,0x58,0x54,0x57,0x94,0x14,0x17,0x10,0x10,0x11,0x11,0x12,0x14,0xa0,0xa0,0xa4,0xfe,0xa4,0xa4,0xfc,0xa4,0xa0,0xfe,0xa2,0xa2,0x2a,0x24,0x20,0x20,
++0x10,0x10,0x13,0x10,0x58,0x54,0x51,0x92,0x14,0x13,0x12,0x12,0x12,0x12,0x13,0x12,0x0,0x4,0xfe,0x84,0x84,0x84,0x14,0x8,0x0,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x13,0x11,0x10,0x58,0x54,0x51,0x92,0x15,0x10,0x10,0x17,0x10,0x10,0x10,0x10,0x0,0xf8,0x10,0xa0,0x40,0xa0,0x50,0x4e,0xf4,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,
++0x10,0x10,0x10,0x18,0x55,0x52,0x57,0x90,0x10,0x13,0x12,0x12,0x12,0x12,0x13,0x12,0x40,0x40,0x80,0x80,0x10,0x8,0xfc,0x4,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x21,0x2f,0x30,0xa8,0xa0,0xbf,0xa2,0x22,0x24,0x25,0x28,0x2f,0x20,0x20,0x21,0x10,0x10,0x90,0x14,0x7e,0x14,0xd4,0x14,0x14,0x14,0x24,0xa4,0xa4,0x44,0x94,0x8,
++0x20,0x27,0x24,0x24,0xb4,0xac,0xa7,0xa4,0x24,0x24,0x24,0x24,0x28,0x29,0x31,0x26,0x4,0xfe,0x40,0x50,0x48,0x40,0xfe,0x40,0x40,0x40,0xa0,0xa0,0xa0,0x10,0xe,0x4,
++0x20,0x27,0x24,0x24,0xb5,0xad,0xa5,0xa5,0x25,0x25,0x25,0x21,0x22,0x22,0x24,0x28,0x44,0xe4,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x4,0x84,0x44,0x54,0x8,
++0x10,0x12,0x12,0x12,0x5b,0x54,0x53,0x90,0x10,0x13,0x12,0x12,0x12,0x12,0x11,0x10,0x40,0x48,0x48,0x48,0xf8,0x0,0xf8,0x8,0x8,0xf8,0x8,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x10,0x11,0x5a,0x54,0x53,0x92,0x12,0x13,0x12,0x12,0x13,0x12,0x10,0x10,0x80,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0xe4,0x24,0x24,0xe4,0x4,0x28,0x10,
++0x10,0x10,0x11,0x11,0x5a,0x54,0x50,0x91,0x12,0x14,0x1b,0x12,0x12,0x12,0x13,0x12,0x80,0x80,0xf8,0x10,0xa0,0x40,0xa0,0x10,0xe,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x27,0x24,0x28,0xb7,0xa9,0xa1,0xa2,0x27,0x20,0x20,0x2f,0x20,0x20,0x20,0x20,0x0,0xfe,0x82,0x84,0xf8,0x0,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x10,0x10,0x17,0x10,0x58,0x57,0x54,0x98,0x13,0x10,0x10,0x17,0x10,0x10,0x11,0x10,0x40,0x48,0xfc,0x40,0x40,0xfe,0x2,0x4,0xf8,0x10,0x24,0xfe,0x40,0x40,0x40,0x80,
++0x10,0x10,0x17,0x10,0x58,0x57,0x54,0x94,0x17,0x14,0x10,0x11,0x12,0x14,0x18,0x10,0x40,0x44,0xfe,0x40,0x44,0xfe,0x44,0x44,0xfc,0x44,0xe0,0x50,0x48,0x46,0x44,0x40,
++0x21,0x25,0x25,0x25,0xb5,0xad,0xa5,0xa5,0x25,0x20,0x20,0x2f,0x20,0x20,0x3f,0x20,0x0,0x0,0xfc,0x4,0x28,0x10,0x28,0x46,0x80,0x80,0x90,0xf8,0x80,0x84,0xfe,0x0,
++0x10,0x10,0x17,0x14,0x5c,0x57,0x54,0x94,0x17,0x10,0x10,0x17,0x10,0x10,0x1f,0x10,0x0,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x40,0x48,0xfc,0x40,0x44,0xfe,0x0,
++0x10,0x17,0x14,0x14,0x5c,0x57,0x54,0x94,0x14,0x15,0x16,0x14,0x14,0x14,0x17,0x14,0x4,0xfe,0x44,0x44,0x54,0xfc,0x44,0xc4,0xe4,0x5c,0x4c,0x44,0x44,0x4,0xfc,0x4,
++0x10,0x13,0x12,0x12,0x5b,0x54,0x57,0x94,0x14,0x14,0x17,0x14,0x14,0x14,0x13,0x10,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x44,0x44,0x44,0xfc,0x0,0x2,0x2,0xfe,0x0,
++0x12,0x11,0x10,0x13,0x58,0x50,0x57,0x94,0x14,0x17,0x10,0x11,0x12,0x14,0x10,0x10,0x8,0x10,0xa0,0xf8,0x48,0x48,0xf8,0x40,0x44,0xfe,0xc4,0x44,0x54,0x48,0x40,0x40,
++0x10,0x10,0x11,0x1a,0x57,0x51,0x52,0x94,0x11,0x12,0x15,0x10,0x10,0x10,0x13,0x14,0x40,0x80,0x10,0x8,0xfc,0x10,0x8c,0x84,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x10,0x17,0x14,0x14,0x5d,0x54,0x54,0x94,0x17,0x14,0x14,0x14,0x14,0x15,0x17,0x10,0x8,0xfc,0x20,0x28,0xfc,0x20,0xa8,0x20,0xfe,0x20,0x50,0x50,0x88,0x4,0xfe,0x0,
++0x10,0x10,0x17,0x10,0x58,0x57,0x52,0x91,0x10,0x17,0x10,0x10,0x1f,0x10,0x10,0x10,0x40,0x48,0xfc,0x40,0x44,0xfe,0x8,0x10,0xa0,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,
++0x10,0x10,0x10,0x17,0x58,0x54,0x50,0x97,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0xa0,0xa0,0xa8,0xbc,0xa0,0xa0,0xa0,0xbc,0xa0,0xa0,0xa4,0xbe,0xa0,0xa0,0xa0,0xa0,
++0x10,0x14,0x12,0x11,0x58,0x57,0x54,0x94,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x40,0x44,0x48,0x50,0x44,0xfe,0x4,0x4,0xf4,0x14,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x10,0x17,0x14,0x15,0x5c,0x57,0x54,0x94,0x17,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x4,0xfe,0x4,0x14,0xa4,0xfc,0x44,0x54,0xfc,0x4,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x17,0x14,0x14,0x5d,0x54,0x54,0x97,0x14,0x15,0x15,0x15,0x15,0x15,0x18,0x10,0x4,0xfe,0x44,0x44,0xf4,0x44,0x54,0xfc,0x4,0xf4,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x11,0x11,0x11,0x12,0x5c,0x55,0x51,0x92,0x14,0x11,0x11,0x15,0x15,0x19,0x10,0x10,0x0,0x4,0xfe,0xa4,0xa4,0x24,0x44,0x54,0x88,0x40,0x20,0x24,0xa,0xa,0xf8,0x0,
++0x10,0x10,0x17,0x11,0x59,0x55,0x52,0x94,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x10,0x80,0x48,0xfc,0x10,0x10,0x10,0xa8,0x44,0x40,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x20,0x27,0x24,0x24,0xb7,0xac,0xa4,0xa7,0x20,0x2f,0x29,0x29,0x29,0x29,0x3f,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xfc,0x24,0x24,0x24,0x24,0xfe,0x0,
++0x10,0x10,0x13,0x1a,0x53,0x50,0x5f,0x90,0x13,0x12,0x12,0x12,0x12,0x10,0x11,0x16,0x40,0x48,0xfc,0x48,0xf8,0x40,0xfe,0x8,0xfc,0x8,0x48,0x48,0x48,0xb0,0x8,0x4,
++0x10,0x17,0x14,0x14,0x5f,0x54,0x53,0x90,0x1f,0x11,0x13,0x10,0x10,0x10,0x10,0x10,0x4,0xbe,0xa4,0xa4,0xbc,0x0,0xf8,0x0,0xfe,0x0,0xf8,0x8,0x8,0x88,0x50,0x20,
++0x10,0x17,0x14,0x14,0x5f,0x54,0x50,0x9f,0x10,0x10,0x10,0x10,0x11,0x11,0x12,0x14,0x4,0xfe,0xa4,0xa4,0xfc,0x80,0x44,0xfe,0x80,0x88,0xfc,0x88,0x8,0x8,0x28,0x10,
++0x10,0x12,0x12,0x12,0x5b,0x54,0x50,0x97,0x10,0x10,0x17,0x14,0x14,0x14,0x14,0x14,0x40,0x48,0x48,0x48,0xf8,0x0,0x4,0xfe,0x40,0x84,0xfe,0xa4,0xa4,0xa4,0xa4,0xc,
++0x10,0x11,0x17,0x11,0x59,0x55,0x57,0x91,0x13,0x13,0x15,0x15,0x19,0x11,0x11,0x11,0x90,0xd0,0x10,0x10,0x52,0x34,0xd8,0x10,0x10,0x90,0x50,0x28,0x28,0x44,0x82,0x0,
++0x11,0x11,0x11,0x1a,0x55,0x51,0x51,0x91,0x11,0x11,0x11,0x13,0x14,0x10,0x11,0x16,0x0,0x4,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xf8,0x10,0xa0,0x40,0xb0,0xe,
++0x10,0x10,0x17,0x18,0x57,0x50,0x5f,0x90,0x11,0x13,0x10,0x17,0x11,0x12,0x14,0x10,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x80,0x10,0xe0,0x48,0xfc,0x50,0x4c,0x44,0xc0,
++0x22,0x21,0x2f,0x21,0xb7,0xa9,0xa1,0xbf,0x21,0x21,0x27,0x21,0x23,0x25,0x29,0x21,0x10,0x24,0xfe,0x20,0xfc,0x24,0x24,0xfe,0x24,0x24,0xfc,0x20,0x30,0x2e,0x24,0x20,
++0x10,0x13,0x12,0x13,0x5a,0x57,0x52,0x93,0x12,0x13,0x13,0x13,0x15,0x15,0x19,0x11,0x20,0xfe,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x24,0x2c,
++0x10,0x13,0x12,0x13,0x5a,0x57,0x50,0x9f,0x10,0x13,0x12,0x13,0x11,0x12,0x14,0x10,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x0,0xf8,0x8,0xf8,0x50,0x4c,0x44,0xc0,
++0x11,0x11,0x11,0x1a,0x56,0x5b,0x52,0x92,0x13,0x12,0x12,0x13,0x12,0x12,0x12,0x14,0x40,0x24,0xfe,0x20,0x20,0xfc,0x20,0x20,0xfc,0x20,0x20,0xfe,0x0,0x94,0x4a,0x2,
++0x10,0x17,0x11,0x10,0x5f,0x54,0x53,0x92,0x13,0x12,0x13,0x10,0x17,0x10,0x1f,0x10,0x40,0xfc,0x10,0xa4,0xfe,0x0,0xf8,0x48,0xf8,0x48,0xf8,0x40,0xfc,0x40,0xfe,0x0,
++0x11,0x11,0x1f,0x11,0x5b,0x55,0x51,0x97,0x10,0x12,0x12,0x12,0x13,0x12,0x14,0x18,0x10,0x14,0xfe,0x10,0xb8,0x54,0x10,0xfc,0x48,0x40,0x7c,0x40,0x40,0xc0,0x46,0x3c,
++0x10,0x1f,0x10,0x17,0x5d,0x55,0x55,0x97,0x10,0x13,0x10,0x1f,0x11,0x12,0x14,0x10,0x40,0xfe,0x0,0xfc,0x14,0xf4,0x14,0xfc,0x0,0xf8,0x0,0xfe,0x50,0x4c,0x44,0xc0,
++0x21,0x2f,0x21,0x23,0xb2,0xab,0xa0,0xaf,0x28,0x33,0x22,0x23,0x22,0x23,0x22,0x23,0x10,0xfe,0x10,0xf8,0xa8,0xf8,0x0,0xfe,0x2,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,
++0x0,0x3f,0x2,0x2,0xff,0x4,0x4,0x8,0x12,0x22,0xcb,0xa,0x12,0x22,0xa,0x4,0x10,0xf8,0x0,0x4,0xfe,0x80,0x40,0x20,0x10,0xe,0x24,0x90,0x48,0x48,0x0,0x0,
++0x3c,0x27,0x24,0x29,0x26,0x24,0x34,0x28,0x21,0x26,0x18,0xe1,0x9,0x11,0x25,0x2,0x40,0xfc,0x80,0xf8,0x88,0xf8,0x88,0xf8,0x88,0xc0,0x30,0xe,0x50,0x28,0x28,0x0,
++0x20,0x17,0x40,0x40,0x40,0x40,0x40,0x5f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x4,0xfe,0x4,0x4,0x4,0x4,0x24,0xf4,0x4,0x4,0x4,0x4,0x4,0x4,0x14,0x8,
++0x20,0x17,0x40,0x40,0x5f,0x40,0x40,0x40,0x4f,0x40,0x40,0x40,0x5f,0x40,0x40,0x40,0x4,0xfe,0x4,0x24,0xf4,0x4,0x4,0x44,0xe4,0x4,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x20,0x17,0x41,0x41,0x5f,0x41,0x41,0x4f,0x41,0x41,0x5f,0x41,0x41,0x41,0x41,0x41,0x4,0xfe,0x4,0x24,0xf4,0x4,0x44,0xe4,0x4,0x14,0xfc,0x14,0x54,0x24,0xc,0x4,
++0x20,0x17,0x42,0x42,0x42,0x5f,0x42,0x44,0x45,0x49,0x4a,0x52,0x67,0x40,0x40,0x40,0x4,0xfe,0x4,0x4,0x24,0xf4,0x4,0x84,0x4,0x4,0x44,0x24,0xe4,0x4,0x14,0x8,
++0x20,0x17,0x40,0x42,0x41,0x5f,0x40,0x44,0x42,0x41,0x42,0x44,0x48,0x40,0x40,0x40,0x4,0xfe,0x4,0x4,0x24,0xf4,0x44,0x44,0x84,0x4,0x84,0x64,0x24,0x4,0x14,0x8,
++0x20,0x17,0x40,0x42,0x41,0x5f,0x40,0x47,0x44,0x44,0x44,0x44,0x48,0x50,0x40,0x40,0x4,0xfe,0x4,0x4,0x24,0xf4,0x4,0xc4,0x44,0x44,0x44,0x54,0x74,0x4,0x14,0x8,
++0x20,0x17,0x40,0x50,0x48,0x47,0x40,0x58,0x49,0x49,0x4a,0x4c,0x53,0x60,0x40,0x40,0x4,0xfe,0x4,0x84,0xa4,0xf4,0x84,0x84,0x44,0x34,0x14,0x4,0xfc,0x4,0x14,0x8,
++0x20,0x17,0x40,0x40,0x47,0x44,0x44,0x47,0x40,0x4f,0x48,0x48,0x48,0x4f,0x48,0x40,0x4,0xfe,0x4,0x44,0xe4,0x44,0x44,0xc4,0x4,0xe4,0x24,0x24,0x24,0xe4,0x14,0x8,
++0x20,0x17,0x40,0x40,0x5f,0x51,0x51,0x5f,0x51,0x53,0x55,0x59,0x51,0x5f,0x50,0x40,0x4,0xfe,0x4,0x4,0xf4,0x14,0x54,0xf4,0x14,0x94,0x54,0x34,0x14,0xf4,0x14,0x8,
++0x20,0x17,0x42,0x47,0x48,0x51,0x4f,0x49,0x4f,0x49,0x4f,0x41,0x41,0x40,0x40,0x40,0x4,0xfe,0x4,0xc4,0x84,0x24,0xf4,0x24,0xe4,0x24,0xe4,0x4,0x14,0xf4,0x4,0xc,
++0x20,0x17,0x42,0x41,0x4f,0x48,0x4f,0x48,0x4f,0x4a,0x49,0x48,0x4a,0x4c,0x48,0x40,0x4,0xfe,0x4,0x24,0xf4,0x24,0xe4,0x24,0xe4,0x14,0x24,0xc4,0x44,0x34,0x4,0xc,
++0x20,0x17,0x40,0x40,0x7f,0x40,0x5e,0x52,0x52,0x52,0x5e,0x40,0x7e,0x41,0x42,0x40,0x4,0xfe,0xa4,0x94,0xfc,0x84,0x84,0x94,0x54,0x64,0x44,0x54,0xb4,0x14,0x4,0xc,
++0x20,0x17,0x40,0x4f,0x48,0x4f,0x48,0x4f,0x40,0x5f,0x50,0x5f,0x50,0x5f,0x40,0x40,0x4,0xfe,0x4,0xe4,0x24,0xe4,0x24,0xe4,0x4,0xf4,0x14,0xf4,0x14,0xf4,0x14,0x8,
++0x20,0x17,0x40,0x42,0x4c,0x48,0x4e,0x48,0x4f,0x42,0x42,0x44,0x44,0x48,0x50,0x40,0x4,0xfe,0x4,0x24,0xf4,0x24,0xe4,0x24,0xe4,0x84,0x84,0x94,0x94,0x74,0x4,0xc,
++0x20,0x17,0x40,0x40,0x5f,0x49,0x45,0x5f,0x50,0x67,0x44,0x42,0x41,0x46,0x58,0x40,0x4,0xfe,0x24,0xf4,0x4,0x24,0x44,0xfc,0xc,0xd4,0x44,0x84,0x4,0xc4,0x34,0x8,
++0x20,0x17,0x40,0x4f,0x49,0x4f,0x48,0x4a,0x4c,0x40,0x4f,0x48,0x4f,0x48,0x4f,0x40,0x4,0xfe,0x4,0xe4,0x4,0xf4,0x84,0x54,0x34,0x4,0xe4,0x24,0xe4,0x24,0xf4,0x8,
++0x20,0x17,0x48,0x44,0x44,0x7f,0x48,0x49,0x4e,0x4a,0x4a,0x52,0x52,0x66,0x40,0x40,0x4,0xfe,0x4,0x44,0x44,0xa4,0xa4,0x14,0x8c,0x64,0x24,0x4,0x84,0x64,0x24,0xc,
++0x20,0x17,0x40,0x4f,0x48,0x4f,0x48,0x4f,0x48,0x4f,0x41,0x7f,0x41,0x46,0x58,0x40,0x4,0xfe,0x4,0xe4,0x24,0xe4,0x24,0xe4,0x24,0xe4,0x44,0xfc,0x4,0xc4,0x34,0xc,
++0x20,0x17,0x40,0x5e,0x52,0x4a,0x44,0x4f,0x71,0x41,0x5f,0x41,0x42,0x44,0x58,0x40,0x4,0xfe,0x84,0xa4,0xcc,0x94,0x64,0xe4,0x1c,0x4,0xf4,0x4,0xc4,0x34,0x14,0x8,
++0x20,0x17,0x41,0x4f,0x41,0x5f,0x42,0x44,0x4f,0x40,0x4f,0x4a,0x4a,0x4a,0x5f,0x40,0x4,0xfe,0x4,0xe4,0x4,0xf4,0x4,0x44,0xe4,0x4,0xe4,0xa4,0xa4,0xa4,0xf4,0x8,
++0x20,0x17,0x41,0x5f,0x41,0x4f,0x48,0x4f,0x48,0x4f,0x48,0x4f,0x48,0x7f,0x44,0x48,0x4,0xfe,0x4,0xf4,0x4,0xe4,0x24,0xe4,0x24,0xe4,0x24,0xe4,0x24,0xfc,0x44,0x2c,
++0x20,0x17,0x40,0x51,0x4a,0x7f,0x44,0x55,0x55,0x5f,0x54,0x44,0x48,0x51,0x40,0x40,0x4,0xfe,0x4,0x44,0x44,0xfc,0x94,0x44,0x44,0x44,0x44,0xa4,0xa4,0x14,0x14,0x8,
++0x20,0x17,0x40,0x5c,0x44,0x7e,0x53,0x5e,0x52,0x5e,0x52,0x7e,0x43,0x42,0x42,0x40,0x4,0xfe,0x4,0x44,0x44,0xfc,0x14,0x94,0xa4,0xa4,0x44,0xa4,0x1c,0x4,0x14,0x8,
++0x10,0x10,0x10,0x90,0x50,0x50,0x10,0x10,0x10,0x30,0x50,0x90,0x10,0x10,0x10,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x8,0x8,0x8,0x8,0xf,0x0,0x0,0x7f,0x8,0x8,0x8,0x8,0x10,0x60,0x0,0x20,0x20,0x20,0x20,0x20,0xe0,0x20,0x20,0xe0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x4,0x24,0x24,0x24,0x24,0x3c,0x7,0x4,0xfc,0x24,0x24,0x24,0x24,0x44,0x85,0x4,0x40,0x50,0x48,0x40,0x44,0x7e,0xc0,0x40,0x48,0x48,0x50,0x20,0x60,0x92,0xa,0x4,
++0x0,0x40,0x30,0x10,0x80,0x48,0x48,0x10,0x10,0x20,0xe0,0x20,0x20,0x20,0x20,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x41,0x31,0x11,0x82,0x4c,0x4b,0x10,0x10,0x20,0xe0,0x21,0x22,0x22,0x21,0x20,0x0,0x0,0x4,0xfe,0x0,0x0,0xf0,0x10,0x20,0x40,0x80,0x0,0x2,0x2,0xfe,0x0,
++0x0,0x40,0x33,0x12,0x82,0x4a,0x4a,0x13,0x12,0x22,0xe2,0x22,0x22,0x22,0x21,0x20,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x0,0x40,0x37,0x10,0x82,0x4a,0x49,0x11,0x10,0x20,0xe0,0x20,0x20,0x21,0x22,0x2c,0x0,0x0,0xfc,0x8,0x88,0x50,0x50,0x10,0xa0,0xa0,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x0,0x40,0x30,0x17,0x80,0x48,0x4b,0x10,0x10,0x20,0xef,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x48,0xfc,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x0,0x47,0x30,0x10,0x80,0x4f,0x49,0x11,0x11,0x21,0xe1,0x22,0x22,0x24,0x28,0x30,0x8,0xfc,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x40,0x30,0x10,0x87,0x48,0x48,0x11,0x11,0x22,0xe2,0x24,0x28,0x20,0x20,0x20,0x40,0x40,0x40,0x44,0xfe,0x40,0xe0,0x50,0x50,0x48,0x48,0x44,0x46,0x40,0x40,0x40,
++0x0,0x4f,0x30,0x10,0x82,0x4a,0x4a,0x12,0x12,0x23,0xe0,0x20,0x20,0x20,0x20,0x20,0x4,0xfe,0x40,0x40,0x44,0x7e,0x44,0x44,0x44,0xfc,0x4,0x4,0x4,0x4,0x28,0x10,
++0x0,0x40,0x20,0x2f,0x80,0x44,0x4c,0x14,0x14,0x27,0xe0,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x44,0xfe,0x40,0x44,0x44,0x44,0x44,0xfc,0x44,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x40,0x33,0x12,0x82,0x4a,0x4a,0x12,0x13,0x22,0xe2,0x22,0x22,0x22,0x23,0x22,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x30,0x17,0x84,0x44,0x4c,0x14,0x17,0x24,0xe4,0x24,0x24,0x27,0x24,0x20,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x1,0x40,0x30,0x10,0x8f,0x40,0x48,0x10,0x10,0x20,0xe0,0x20,0x20,0x20,0x20,0x20,0x0,0x80,0x80,0x4,0xfe,0x80,0x80,0xa0,0x90,0x8c,0x84,0x80,0x80,0x80,0x80,0x80,
++0x0,0x40,0x30,0x17,0x80,0x4a,0x4a,0x11,0x11,0x20,0xe0,0x20,0x21,0x22,0x24,0x28,0x80,0x40,0x44,0xfe,0x8,0x8,0x8,0x10,0x10,0xa0,0x40,0xa0,0x10,0x8,0xe,0x4,
++0x0,0x40,0x30,0x17,0x80,0x48,0x49,0x11,0x11,0x21,0xe1,0x21,0x22,0x22,0x24,0x28,0x80,0x40,0x44,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x0,0x40,0x34,0x13,0x81,0x4f,0x48,0x10,0x10,0x20,0xe1,0x21,0x22,0x22,0x24,0x28,0x40,0x40,0x40,0x40,0x44,0xfe,0x84,0x84,0x84,0xc4,0x34,0x14,0x4,0x44,0x28,0x10,
++0x0,0x4f,0x39,0x1a,0x8a,0x4c,0x4a,0x19,0x19,0x29,0xed,0x2a,0x28,0x28,0x29,0x2a,0x20,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x84,0x28,0x10,
++0x2,0x42,0x22,0x22,0x9f,0x42,0x4a,0x12,0x12,0x23,0xe2,0x22,0x22,0x22,0x23,0x22,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x0,0x40,0x30,0x10,0x87,0x48,0x48,0x11,0x11,0x22,0xe2,0x24,0x28,0x20,0x20,0x20,0x40,0x50,0x4c,0x44,0xfe,0x40,0xe0,0x50,0x50,0x48,0x48,0x44,0x46,0x40,0x40,0x40,
++0x1,0x41,0x31,0x11,0x8f,0x49,0x49,0x11,0x11,0x22,0xe2,0x22,0x24,0x25,0x28,0x30,0x0,0x20,0x10,0x4,0xfe,0x40,0x48,0x48,0x50,0x50,0x60,0x40,0xc2,0x42,0x3e,0x0,
++0x0,0x40,0x30,0x10,0x80,0x4b,0x4a,0x12,0x12,0x23,0xe2,0x22,0x22,0x24,0x24,0x28,0x40,0x44,0x7e,0x40,0x44,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,
++0x0,0x40,0x30,0x13,0x82,0x4a,0x4a,0x12,0x12,0x2f,0xe0,0x20,0x20,0x21,0x22,0x2c,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0x48,0x48,0xfe,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x0,0x40,0x30,0x1f,0x89,0x49,0x59,0x19,0x29,0x29,0xca,0x4c,0x48,0x4f,0x48,0x40,0x0,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0x24,0x24,0x1c,0x4,0x4,0xfc,0x4,0x0,
++0x1,0x41,0x31,0x12,0x84,0x42,0x4a,0x13,0x16,0x22,0xe2,0x22,0x22,0x22,0x21,0x20,0x0,0x8,0xfc,0x40,0x40,0x48,0x7c,0xc8,0x48,0x48,0x68,0x50,0x42,0x2,0xfe,0x0,
++0x0,0x40,0x30,0x11,0x81,0x4a,0x4c,0x10,0x17,0x20,0xe0,0x21,0x20,0x20,0x20,0x20,0x40,0x40,0xa0,0x10,0x10,0x88,0x46,0x40,0xf8,0x8,0x10,0x20,0xc0,0x40,0x30,0x10,
++0x0,0x41,0x36,0x14,0x84,0x44,0x4c,0x14,0x15,0x26,0xe0,0x21,0x21,0x22,0x24,0x28,0x80,0x4,0x3e,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xb4,0xa8,0x20,0x20,0x20,0x20,0x20,
++0x0,0x40,0x37,0x14,0x84,0x44,0x44,0x17,0x10,0x20,0xe1,0x22,0x24,0x28,0x21,0x20,0x8,0x7c,0x80,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x50,0x48,0x46,0x42,0x40,0x80,
++0x0,0x40,0x30,0x17,0x80,0x40,0x49,0x12,0x17,0x20,0xe0,0x21,0x22,0x24,0x27,0x20,0x80,0x40,0x44,0xfe,0x80,0x80,0x8,0x18,0xe0,0x40,0x80,0x0,0x10,0x8,0xfc,0x4,
++0x0,0x44,0x33,0x11,0x80,0x47,0x48,0x10,0x10,0x2f,0xe0,0x20,0x20,0x20,0x20,0x20,0x40,0x44,0x4c,0x50,0x40,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x40,0x30,0x17,0x84,0x48,0x42,0x12,0x12,0x22,0xe3,0x22,0x22,0x22,0x21,0x20,0x80,0x40,0x40,0xfc,0x4,0x4,0x10,0x30,0x40,0x80,0x0,0x0,0x4,0x4,0xfc,0x0,
++0x0,0x4f,0x30,0x10,0x80,0x47,0x4c,0x14,0x14,0x27,0xe0,0x20,0x20,0x21,0x25,0x22,0x0,0x90,0x90,0x90,0x90,0x90,0x10,0x20,0x20,0xa0,0xa0,0xa8,0xa4,0x42,0x7e,0x0,
++0x0,0x47,0x34,0x14,0x84,0x47,0x4c,0x14,0x14,0x27,0xe4,0x24,0x24,0x25,0x26,0x24,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x40,0x44,0xfe,0x40,0x20,0x20,0x12,0xa,0x4,
++0x0,0x40,0x37,0x10,0x80,0x48,0x49,0x12,0x14,0x27,0xe0,0x20,0x20,0x20,0x2f,0x20,0x0,0x10,0xf8,0x10,0x20,0xc0,0x18,0x6,0x2,0xfc,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x47,0x30,0x10,0x83,0x4a,0x4a,0x13,0x12,0x22,0xe2,0x23,0x22,0x20,0x2f,0x20,0x8,0xfc,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x0,0xfe,0x0,
++0x0,0x40,0x37,0x10,0x81,0x49,0x4b,0x15,0x11,0x21,0xe1,0x21,0x21,0x21,0x21,0x21,0x80,0x84,0xfe,0x80,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x40,0x37,0x12,0x82,0x43,0x42,0x14,0x16,0x29,0xe0,0x20,0x21,0x21,0x22,0x24,0x4,0x44,0xe4,0x4,0x14,0xd4,0x54,0x54,0x54,0x94,0x94,0x94,0x4,0x4,0x14,0x8,
++0x0,0x40,0x30,0x17,0x80,0x4a,0x49,0x10,0x1f,0x20,0xe0,0x20,0x21,0x21,0x22,0x2c,0x40,0x40,0x48,0xfc,0x40,0x48,0x50,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x0,0x40,0x30,0x10,0x80,0x4b,0x4a,0x12,0x12,0x22,0xe2,0x22,0x20,0x20,0x21,0x26,0x40,0x44,0x7e,0x40,0x48,0xfc,0x8,0x48,0x48,0x48,0x48,0x48,0xa0,0x90,0xc,0x4,
++0x0,0x47,0x34,0x14,0x84,0x4f,0x4c,0x14,0x14,0x24,0xe4,0x25,0x26,0x24,0x27,0x24,0x4,0xfe,0x44,0x44,0x54,0xfc,0x44,0x44,0xa4,0xa4,0xa4,0x14,0xc,0x4,0xfc,0x4,
++0x0,0x4f,0x28,0x18,0x89,0x49,0x49,0x19,0x19,0x29,0xe9,0x29,0x28,0x28,0x2f,0x28,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0x24,0xe4,0x24,0x4,0x4,0xfc,0x4,
++0x0,0x42,0x32,0x13,0x84,0x48,0x48,0x17,0x10,0x21,0xe1,0x22,0x24,0x28,0x20,0x20,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0xe0,0x50,0x50,0x48,0x4e,0x44,0x40,0x40,
++0x0,0x40,0x33,0x12,0x82,0x4a,0x4b,0x12,0x12,0x22,0xe3,0x22,0x22,0x22,0x23,0x22,0x40,0x88,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x30,0x11,0x87,0x45,0x4d,0x15,0x15,0x25,0xe5,0x25,0x25,0x25,0x3f,0x20,0x40,0x40,0x80,0x8,0xfc,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0xfe,0x0,
++0x0,0x40,0x30,0x11,0x82,0x4c,0x49,0x10,0x10,0x2f,0xe0,0x20,0x21,0x22,0x27,0x20,0x40,0x40,0xa0,0x10,0x8,0xe,0xf4,0x0,0x4,0xfe,0x40,0x80,0x10,0x8,0xfc,0x4,
++0x0,0x40,0x30,0x14,0x82,0x4a,0x48,0x11,0x12,0x24,0xe0,0x21,0x21,0x22,0x24,0x28,0xa0,0xa0,0xa0,0xa4,0xac,0xb0,0xa0,0xb0,0xac,0xa4,0xa0,0x20,0x22,0x22,0x1e,0x0,
++0x1,0x41,0x31,0x11,0x82,0x4c,0x4b,0x12,0x12,0x23,0xe2,0x22,0x23,0x22,0x20,0x20,0x0,0x0,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0xe4,0x24,0x24,0xe4,0x4,0x28,0x10,
++0x1,0x41,0x31,0x13,0x84,0x40,0x49,0x16,0x10,0x23,0xe2,0x22,0x27,0x20,0x20,0x20,0x0,0x0,0xf8,0x10,0xa0,0x40,0xb0,0x4e,0x40,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,
++0x2,0x41,0x31,0x1f,0x80,0x44,0x42,0x12,0x11,0x21,0xe2,0x22,0x24,0x28,0x20,0x20,0x4,0x4,0x14,0xf4,0x54,0x54,0x94,0x94,0x14,0x14,0x94,0x94,0x44,0x44,0x14,0x8,
++0x0,0x48,0x24,0x24,0x80,0x51,0x5c,0x14,0x25,0x24,0xe4,0x25,0x26,0x24,0x20,0x20,0x40,0x40,0x48,0xfc,0xa0,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x47,0x30,0x10,0x83,0x48,0x48,0x13,0x10,0x2f,0xe2,0x21,0x21,0x20,0x20,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x14,0xfe,0x10,0x10,0x10,0x10,0x50,0x20,
++0x4,0x44,0x24,0x24,0x9f,0x44,0x44,0x14,0x14,0x28,0xe5,0x22,0x25,0x24,0x28,0x30,0x0,0x0,0x0,0x4,0xbe,0xa4,0xa4,0xa4,0xa4,0xa4,0x24,0x24,0x24,0xbc,0xa4,0x0,
++0x0,0x40,0x37,0x10,0x80,0x4b,0x4a,0x12,0x12,0x23,0xe0,0x21,0x22,0x2c,0x20,0x20,0x40,0x44,0xfe,0x40,0x48,0xfc,0x48,0x48,0x48,0xf8,0xe0,0x50,0x4e,0x44,0x40,0x40,
++0x0,0x47,0x30,0x10,0x87,0x49,0x49,0x11,0x1f,0x20,0xe3,0x22,0x22,0x22,0x23,0x22,0x8,0xfc,0x80,0x90,0xf8,0x10,0x10,0x14,0xfe,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x30,0x17,0x80,0x42,0x49,0x10,0x17,0x20,0xe1,0x22,0x24,0x28,0x20,0x20,0x40,0x40,0x48,0xfc,0x40,0x48,0x50,0x44,0xfe,0xd0,0x50,0x48,0x4e,0x44,0x40,0x40,
++0x0,0x47,0x34,0x14,0x87,0x4c,0x4d,0x14,0x17,0x24,0xe4,0x24,0x24,0x24,0x27,0x24,0x4,0xfe,0x44,0x54,0xfc,0x44,0xf4,0x44,0xf4,0x54,0x54,0x74,0x44,0x44,0xfc,0x4,
++0x0,0x43,0x32,0x12,0x82,0x4b,0x48,0x10,0x12,0x22,0xe2,0x22,0x23,0x22,0x24,0x28,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0xc0,0x30,0xe,
++0x0,0x41,0x31,0x11,0x81,0x48,0x4b,0x12,0x12,0x23,0xe2,0x22,0x23,0x22,0x22,0x22,0x8,0xfc,0x8,0x8,0xf8,0x0,0xfc,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x14,0x8,
++0x0,0x40,0x34,0x14,0x87,0x40,0x48,0x11,0x12,0x24,0xeb,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x44,0x44,0xfc,0x44,0xa0,0x10,0x4e,0x4,0xf8,0x8,0x10,0x20,0x40,0x80,
++0x0,0x40,0x33,0x12,0x82,0x43,0x42,0x12,0x12,0x22,0xef,0x20,0x21,0x22,0x24,0x28,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x10,0x10,0x10,0x14,0xfe,0x0,0x20,0x10,0xc,0x4,
++0x2,0x41,0x30,0x11,0x82,0x40,0x4f,0x11,0x12,0x27,0xea,0x22,0x22,0x22,0x20,0x0,0x8,0xb0,0x40,0xb0,0x48,0x80,0xfe,0x40,0x48,0xfc,0x48,0x48,0x48,0x58,0x40,0x40,
++0x1,0x41,0x31,0x12,0x84,0x47,0x4c,0x14,0x14,0x27,0xe4,0x20,0x21,0x21,0x22,0x2c,0x0,0x0,0xf8,0x10,0x24,0xfe,0x44,0x44,0x44,0xfc,0xa4,0xa0,0x20,0x22,0x22,0x1e,
++0x0,0x44,0x37,0x14,0x88,0x43,0x48,0x10,0x17,0x21,0xe1,0x21,0x21,0x22,0x24,0x28,0x80,0x40,0xfe,0x2,0x24,0xf0,0x0,0x8,0xfc,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x40,0x27,0x10,0x80,0x4f,0x48,0x10,0x13,0x22,0xe6,0x2b,0x32,0x22,0x23,0x22,0x80,0x88,0xf8,0x90,0xa4,0xfe,0x40,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x2,0x42,0x37,0x12,0x82,0x4b,0x4a,0x12,0x13,0x22,0xe2,0x3f,0x20,0x22,0x24,0x28,0x10,0x10,0xfc,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x14,0xfe,0x0,0x10,0xc,0x4,
++0x2,0x42,0x32,0x12,0x8f,0x42,0x56,0x17,0x2a,0x2a,0xf2,0x22,0x22,0x22,0x23,0x22,0x0,0xc,0x70,0x40,0xc0,0x44,0x7e,0x48,0xc8,0x48,0x48,0x48,0x88,0x88,0x8,0x8,
++0x2,0x42,0x32,0x12,0x8f,0x42,0x56,0x17,0x2a,0x2a,0xf2,0x22,0x22,0x22,0x22,0x22,0x0,0x10,0x50,0x50,0xd0,0x48,0x88,0x26,0xa0,0x20,0x40,0x48,0x44,0xfc,0x4,0x0,
++0x0,0x40,0x37,0x10,0x80,0x4f,0x41,0x10,0x12,0x21,0xe0,0x2f,0x20,0x20,0x21,0x26,0x40,0x48,0xfc,0x40,0x40,0xfe,0x22,0xa4,0x60,0x20,0xa4,0xfe,0x40,0x50,0x8c,0x4,
++0x0,0x4f,0x30,0x11,0x86,0x40,0x55,0x12,0x16,0x29,0xe2,0x24,0x28,0x20,0x21,0x20,0x4,0xfe,0x80,0x0,0x88,0xd0,0x60,0x60,0xd0,0x50,0x48,0x4e,0x44,0x40,0x40,0x80,
++0x0,0x47,0x34,0x14,0x87,0x54,0x54,0x17,0x10,0x2f,0xe1,0x21,0x21,0x22,0x24,0x28,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x0,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0x43,0x32,0x12,0x83,0x48,0x4f,0x14,0x14,0x27,0xe4,0x24,0x27,0x20,0x20,0x20,0x8,0xfc,0x8,0x8,0xf8,0x40,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x40,0x42,0x3e,
++0x0,0x40,0x30,0x11,0x82,0x4d,0x48,0x10,0x17,0x20,0xe2,0x21,0x21,0x20,0x2f,0x20,0x40,0x40,0xa0,0x10,0xe,0xf4,0x40,0x48,0xfc,0x40,0x44,0x48,0x50,0x40,0xfe,0x0,
++0x0,0x4f,0x29,0x29,0x89,0x4f,0x59,0x19,0x29,0x2f,0xe9,0x29,0x29,0x29,0x2b,0x10,0x4,0x7e,0x54,0x54,0x54,0x54,0x54,0x54,0x7c,0x44,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x40,0x37,0x14,0x88,0x43,0x48,0x10,0x17,0x20,0xe1,0x22,0x24,0x28,0x21,0x20,0x80,0x40,0xfe,0x2,0x14,0xf8,0x0,0x4,0xfe,0x40,0x50,0x48,0x44,0x44,0x40,0x80,
++0x0,0x40,0x37,0x14,0x88,0x47,0x44,0x14,0x17,0x24,0xe4,0x27,0x24,0x20,0x20,0x20,0x80,0x40,0xfe,0x42,0x40,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x40,0x40,0x40,
++0x0,0x40,0x37,0x14,0x88,0x43,0x4a,0x12,0x13,0x22,0xe3,0x22,0x22,0x22,0x23,0x22,0x80,0x40,0xfe,0x2,0x4,0xf8,0x8,0x8,0xf8,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x43,0x30,0x10,0x83,0x48,0x48,0x17,0x10,0x24,0xe2,0x21,0x22,0x2c,0x21,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xfe,0x40,0x44,0xe8,0x50,0x48,0x4e,0x44,0x80,
++0x0,0x47,0x34,0x14,0x87,0x45,0x4d,0x17,0x15,0x2d,0xed,0x35,0x25,0x25,0x21,0x21,0x44,0xe4,0x44,0x54,0xd4,0x14,0x54,0xf4,0x54,0x54,0x54,0x54,0x44,0xc4,0x14,0x8,
++0x0,0x42,0x32,0x17,0x82,0x4a,0x4a,0x12,0x13,0x20,0xe7,0x20,0x21,0x22,0x2c,0x20,0x90,0x90,0x94,0xfe,0x90,0x90,0xf0,0x0,0xfc,0x40,0xfc,0xe0,0x50,0x4e,0x44,0x40,
++0x0,0x47,0x30,0x10,0x87,0x44,0x4c,0x14,0x17,0x24,0xe0,0x27,0x20,0x20,0x2f,0x20,0x4,0xfe,0xa0,0xa4,0xfe,0xa4,0xa4,0xa4,0xfc,0x44,0x40,0xfc,0x40,0x44,0xfe,0x0,
++0x0,0x40,0x37,0x10,0x81,0x4f,0x49,0x19,0x19,0x29,0xe9,0x29,0x29,0x29,0x2f,0x28,0x0,0x4,0xfe,0x80,0x4,0xfe,0x24,0x24,0xe4,0x24,0x24,0xe4,0x24,0x24,0xfc,0x4,
++0x0,0x41,0x36,0x12,0x82,0x5f,0x42,0x16,0x17,0x2a,0xea,0x32,0x22,0x22,0x22,0x23,0x10,0x90,0x10,0x10,0x92,0xd4,0x38,0x10,0x10,0x90,0x28,0x28,0x48,0x48,0x84,0x2,
++0x0,0x41,0x36,0x14,0x87,0x44,0x4c,0x17,0x10,0x27,0xe2,0x21,0x20,0x20,0x23,0x2c,0x40,0x44,0x5e,0x44,0x5c,0x44,0x44,0xfc,0x40,0xfc,0x8,0x10,0xe0,0xa0,0x10,0xe,
++0x0,0x41,0x33,0x12,0x83,0x4a,0x4b,0x10,0x17,0x20,0xe0,0x27,0x20,0x20,0x2f,0x20,0x80,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x40,0x48,0xfc,0x40,0x44,0xfe,0x0,
++0x2,0x42,0x35,0x14,0x88,0x57,0x42,0x12,0x1f,0x22,0xe7,0x2a,0x32,0x22,0x2a,0x24,0x0,0x0,0x4,0xfe,0x44,0x44,0x44,0x28,0xa8,0x28,0x10,0x90,0x28,0x28,0x44,0x82,
++0x0,0x41,0x31,0x12,0x87,0x49,0x41,0x12,0x14,0x27,0xe5,0x25,0x25,0x25,0x3f,0x20,0x20,0x20,0x20,0x10,0xfe,0x14,0x10,0x50,0x20,0xf8,0x28,0x28,0x28,0x28,0xfe,0x0,
++0x4,0x42,0x31,0x1f,0x80,0x47,0x44,0x14,0x17,0x24,0xe4,0x27,0x24,0x24,0x25,0x24,0x8,0x10,0x24,0xfe,0x0,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x88,0x88,0xa8,0x90,
++0x0,0x40,0x37,0x14,0x89,0x40,0x4b,0x12,0x12,0x23,0xe2,0x22,0x23,0x20,0x2f,0x20,0x80,0x40,0xfe,0x2,0xf4,0x0,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xfe,0x0,
++0x0,0x47,0x34,0x14,0x87,0x4c,0x4d,0x14,0x14,0x25,0xe4,0x25,0x28,0x28,0x33,0x20,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x40,0x88,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x0,0x47,0x34,0x14,0x87,0x44,0x4d,0x15,0x15,0x25,0xe5,0x25,0x25,0x29,0x29,0x31,0x4,0xfe,0x44,0x44,0xfc,0x0,0xfc,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0xfc,
++0x2,0x42,0x22,0x2f,0x82,0x42,0x4f,0x12,0x12,0x22,0xef,0x22,0x22,0x22,0x22,0x22,0x20,0x20,0x3c,0x48,0x94,0x7e,0xd4,0x54,0x54,0x54,0xfc,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x40,0x37,0x10,0x87,0x40,0x4f,0x11,0x12,0x25,0xe8,0x23,0x20,0x21,0x26,0x20,0x40,0x44,0xfe,0x40,0xfc,0x80,0xfe,0x10,0x8,0xfe,0x44,0xf8,0xe0,0x50,0x4c,0x40,
++0x0,0x40,0x37,0x10,0x80,0x4f,0x48,0x11,0x13,0x20,0xe7,0x24,0x24,0x24,0x2f,0x20,0x40,0x48,0xfc,0x40,0x44,0xfe,0x80,0x10,0xf8,0x0,0xfc,0xa4,0xa4,0xa4,0xfe,0x0,
++0x0,0x4f,0x32,0x13,0x82,0x4b,0x4a,0x1f,0x10,0x2f,0xe8,0x25,0x22,0x25,0x28,0x30,0x8,0xfc,0x10,0xf0,0x10,0xf0,0x14,0xfe,0x10,0xfc,0x84,0x28,0x10,0x28,0xc6,0x84,
++0x1,0x41,0x3f,0x11,0x80,0x4f,0x40,0x11,0x12,0x2d,0xe1,0x27,0x21,0x21,0x22,0x24,0x10,0x10,0xfe,0x10,0x48,0xfe,0xa0,0x10,0xe,0x14,0x10,0xfc,0x10,0x10,0x10,0x10,
++0x1,0x41,0x3f,0x11,0x8f,0x48,0x48,0x17,0x10,0x20,0xe3,0x20,0x20,0x20,0x2f,0x20,0x10,0x14,0xfe,0x10,0xfe,0x2,0x4,0xfc,0x40,0x50,0xf8,0x40,0x50,0x48,0xfe,0x0,
++0x0,0x40,0x37,0x10,0x87,0x44,0x4f,0x14,0x17,0x24,0xe0,0x2f,0x21,0x20,0x20,0x20,0x50,0x48,0xfe,0x40,0xfc,0x44,0xfc,0x44,0xfc,0x44,0x40,0xfe,0x8,0x88,0x28,0x10,
++0x0,0x47,0x30,0x10,0x87,0x44,0x44,0x17,0x10,0x20,0xef,0x20,0x21,0x22,0x2c,0x20,0x4,0xfe,0xa0,0xa4,0xfe,0xa4,0xa4,0xfc,0x40,0x44,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x0,0x47,0x34,0x15,0x84,0x47,0x4d,0x15,0x15,0x29,0xe0,0x2f,0x22,0x21,0x20,0x20,0x8,0xfc,0x0,0xf8,0x0,0xfc,0x44,0x28,0x90,0xe,0x10,0xfe,0x10,0x10,0x50,0x20,
++0x0,0x47,0x34,0x17,0x84,0x4f,0x48,0x17,0x10,0x24,0xe3,0x22,0x24,0x20,0x22,0x21,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x4,0xbe,0x84,0xa4,0x9c,0x94,0xa4,0x84,0x94,0x8,
++0x0,0x47,0x34,0x17,0x84,0x45,0x4e,0x14,0x17,0x24,0xe7,0x24,0x25,0x24,0x27,0x24,0x4,0xfe,0x4,0xfc,0x84,0x8c,0x54,0xe4,0x44,0xe4,0x5c,0x4c,0x44,0x84,0xfc,0x4,
++0x2,0x42,0x33,0x15,0x88,0x40,0x4f,0x10,0x17,0x20,0xe0,0x2f,0x20,0x20,0x20,0x20,0x20,0x24,0xbe,0x50,0x88,0x3c,0xc0,0x90,0xf8,0x80,0x84,0xfe,0x80,0x84,0x84,0x7c,
++0x0,0x41,0x37,0x14,0x87,0x44,0x47,0x14,0x17,0x20,0xe0,0x3f,0x21,0x21,0x22,0x2c,0x80,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0xa0,0x94,0xfe,0x40,0x20,0x10,0xe,
++0x1,0x42,0x35,0x10,0x80,0x49,0x4e,0x13,0x10,0x20,0xe7,0x22,0x21,0x20,0x2f,0x20,0x10,0xc,0x14,0xa0,0x40,0xb0,0xe,0xf8,0x40,0x40,0xfc,0x48,0x50,0x44,0xfe,0x0,
++0x0,0x40,0x37,0x14,0x85,0x44,0x57,0x14,0x25,0x24,0xe5,0x25,0x25,0x29,0x29,0x31,0x40,0x24,0xfe,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x40,0x37,0x11,0x80,0x4f,0x48,0x10,0x1f,0x21,0xe1,0x21,0x21,0x21,0x22,0x24,0x80,0x48,0xfc,0x10,0xa0,0xfe,0x82,0x44,0xfe,0x10,0xf8,0x10,0x10,0x10,0x50,0x20,
++0x0,0x4f,0x28,0x10,0x83,0x4a,0x4b,0x12,0x13,0x20,0xe0,0x2f,0x20,0x21,0x22,0x24,0x0,0xfe,0x2,0x4,0xf8,0x8,0xf8,0x8,0xf8,0x80,0x44,0xfe,0x0,0x10,0xc,0x4,
++0x1,0x41,0x37,0x11,0x81,0x4f,0x48,0x17,0x14,0x27,0xe4,0x27,0x24,0x21,0x22,0x24,0x10,0x10,0xfc,0x10,0x14,0xfe,0x40,0xfc,0x44,0xfc,0x44,0xfc,0x4,0x10,0xc,0x4,
++0x1,0x41,0x2f,0x11,0x87,0x44,0x49,0x13,0x10,0x21,0xe7,0x20,0x22,0x24,0x29,0x20,0x10,0x14,0xfe,0x10,0xfe,0x82,0x14,0xe0,0x80,0x8,0xfc,0x44,0x50,0x4c,0x44,0x80,
++0x1,0x4f,0x31,0x10,0x87,0x40,0x4f,0x10,0x17,0x20,0xe4,0x25,0x25,0x26,0x28,0x30,0x10,0xfe,0x10,0x40,0xfc,0x44,0xfe,0x44,0xfc,0x40,0x44,0x64,0x54,0x54,0x44,0x44,
++0x2,0x42,0x2f,0x12,0x87,0x4a,0x52,0x12,0x10,0x2f,0xe1,0x22,0x21,0x20,0x23,0x2c,0x10,0x10,0xfc,0x10,0x38,0xd4,0x12,0x90,0x84,0xfe,0x10,0x10,0x20,0xc0,0x30,0x8,
++0x1,0x41,0x3f,0x11,0x8f,0x49,0x4f,0x19,0x2f,0x20,0xe7,0x24,0x27,0x24,0x27,0x24,0x20,0x24,0xfe,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,
++0x0,0x40,0x30,0x17,0x84,0x45,0x44,0x14,0x14,0x25,0xe5,0x24,0x2b,0x28,0x30,0x20,0x48,0x7c,0x40,0xfe,0x44,0xf0,0x44,0x3c,0x8,0xf0,0x24,0xa8,0xfe,0x20,0xa0,0x40,
++0x0,0x47,0x34,0x17,0x84,0x47,0x44,0x11,0x17,0x20,0xe1,0x27,0x22,0x24,0x29,0x20,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x84,0x8,0xf0,0x80,0x8,0xfc,0x50,0x4c,0x44,0x80,
++0x0,0x40,0x37,0x14,0x84,0x47,0x40,0x17,0x14,0x24,0xe7,0x20,0x2a,0x2a,0x32,0x21,0x40,0x44,0xfe,0x44,0x44,0xfc,0x40,0xfc,0x44,0x44,0xfc,0x40,0x88,0x46,0xa,0xf8,
++0x2,0x42,0x35,0x14,0x88,0x57,0x40,0x1a,0x1a,0x2a,0xea,0x21,0x23,0x3c,0x28,0x21,0x10,0x10,0x10,0xa4,0x7e,0xa4,0x24,0xa4,0xa8,0xa8,0x90,0x10,0xa8,0x28,0x44,0x82,
++0x0,0x48,0x25,0x12,0x86,0x4a,0x4b,0x12,0x16,0x2b,0xf2,0x22,0x22,0x22,0x2a,0x24,0x20,0xa0,0x24,0xfc,0x28,0x30,0xfe,0x40,0xfc,0x44,0x44,0x7c,0x44,0x44,0x7c,0x44,
++0x1,0x49,0x25,0x12,0x86,0x4a,0x53,0x12,0x26,0x2a,0xf2,0x22,0x22,0x22,0x2a,0x24,0x20,0x28,0xfc,0x20,0x50,0x88,0xfe,0x4,0xf4,0x94,0x94,0x94,0xf4,0x4,0x14,0x8,
++0x0,0x40,0x37,0x14,0x84,0x4f,0x4c,0x14,0x17,0x25,0xe5,0x25,0x29,0x29,0x31,0x21,0x80,0x44,0xfe,0xa0,0xa4,0xfe,0xa4,0xa4,0xfc,0x20,0x24,0xe8,0x30,0x62,0xa2,0x1e,
++0x4,0x42,0x32,0x1f,0x84,0x44,0x4f,0x15,0x15,0x25,0xe5,0x29,0x29,0x2d,0x32,0x21,0x20,0x20,0x24,0xfe,0x80,0x0,0x7e,0x12,0x14,0x50,0x5c,0x50,0x50,0x70,0x98,0x6,
++0x0,0x47,0x30,0x11,0x8f,0x44,0x4c,0x17,0x14,0x24,0xe7,0x24,0x24,0x3f,0x20,0x20,0x10,0x90,0x90,0x24,0xfe,0xa4,0xa4,0xa4,0xa8,0xa8,0x90,0x90,0xa8,0xa8,0xc4,0x82,
++0x2,0x42,0x2f,0x22,0x8f,0x50,0x1f,0x28,0x28,0x4f,0xc0,0x48,0x45,0x5f,0x40,0x40,0x8,0x88,0xc8,0x8,0xbe,0x8,0x88,0xa8,0x98,0x88,0x8,0x88,0x8,0xc8,0x28,0x10,
++0x9,0x49,0x29,0x1f,0x89,0x49,0x5f,0x19,0x2f,0x29,0xe9,0x3f,0x24,0x29,0x30,0x21,0x0,0xc,0x70,0xc0,0x40,0x44,0x7e,0x48,0x48,0x48,0x48,0xc8,0x48,0x48,0x88,0x8,
++0x2,0x42,0x2f,0x12,0x87,0x4a,0x42,0x17,0x14,0x27,0xe4,0x24,0x27,0x24,0x24,0x24,0x10,0x10,0xfc,0x10,0x38,0xd6,0x10,0xf8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x28,0x10,
++0x0,0x41,0x2e,0x12,0x82,0x5f,0x42,0x16,0x17,0x2a,0xea,0x32,0x22,0x22,0x22,0x22,0x10,0x90,0x54,0x38,0x10,0xfc,0x44,0x44,0x7c,0xc4,0x44,0x7c,0x44,0x44,0x54,0x48,
++0x0,0x47,0x31,0x10,0x8f,0x40,0x47,0x14,0x17,0x24,0xe7,0x20,0x27,0x20,0x2f,0x20,0x40,0xfc,0x10,0xa4,0xfe,0x0,0xfc,0x44,0xfc,0x44,0xfc,0x40,0xfc,0x40,0xfe,0x0,
++0x7,0x44,0x37,0x14,0x85,0x44,0x4f,0x14,0x14,0x27,0xe4,0x25,0x2b,0x29,0x31,0x23,0xfc,0x4,0xfc,0x0,0xf8,0x10,0xfe,0x20,0x64,0xde,0x84,0x8,0xfe,0x8,0x8,0x18,
++0x4,0x44,0x3f,0x24,0x84,0x5f,0x15,0x55,0x5f,0x44,0xcc,0x4e,0x55,0x64,0x44,0x44,0x20,0x20,0x7c,0x88,0x10,0x7c,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x28,0x46,0x82,
++0x0,0x40,0x2f,0x29,0x89,0x49,0x5f,0x19,0x29,0x2f,0xe9,0x29,0x29,0x2f,0x29,0x20,0x20,0x30,0x48,0x7e,0xc8,0x48,0x7e,0x48,0x48,0x7e,0x48,0x48,0x48,0x7e,0x40,0x40,
++0x0,0x40,0x37,0x14,0x87,0x44,0x57,0x10,0x27,0x20,0xe3,0x22,0x23,0x21,0x20,0x2f,0xa0,0xa4,0xfe,0xa4,0xfc,0xa4,0xfc,0x0,0xfc,0x0,0xf8,0x8,0xf8,0x10,0xa0,0xfe,
++0x0,0x41,0x32,0x17,0x84,0x45,0x57,0x14,0x25,0x24,0xe5,0x24,0x29,0x29,0x31,0x21,0x80,0xf0,0x24,0xfe,0x88,0x24,0xfe,0x0,0xfc,0x0,0xfc,0x0,0xfc,0x4,0x4,0xfc,
++0x0,0x4f,0x20,0x27,0x85,0x45,0x45,0x17,0x10,0x23,0xe2,0x23,0x22,0x23,0x20,0x2f,0x40,0xfe,0x0,0xfc,0x14,0xf4,0x14,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,
++0x0,0x40,0x37,0x15,0x87,0x4c,0x4f,0x14,0x17,0x24,0xe7,0x24,0x29,0x2a,0x34,0x20,0x40,0x24,0xfe,0x8,0xfc,0x90,0xfc,0x94,0xfe,0x94,0xfc,0x90,0x98,0x94,0x92,0x90,
++0x0,0x47,0x20,0x2f,0x88,0x53,0x40,0x13,0x10,0x2f,0xe0,0x27,0x24,0x24,0x24,0x24,0x8,0xfc,0x40,0xfe,0x42,0x58,0x40,0x58,0x40,0xfe,0x80,0xfc,0xa4,0xa4,0xa4,0xc,
++0x2,0x43,0x22,0x24,0x8f,0x54,0x44,0x17,0x14,0x25,0xe4,0x27,0x24,0x24,0x24,0x27,0x50,0x54,0xd8,0x50,0xfe,0x88,0x50,0xfe,0x20,0xfc,0x20,0xfe,0x20,0x50,0x8e,0x4,
++0x0,0x43,0x32,0x12,0x83,0x48,0x4f,0x14,0x17,0x24,0xe7,0x20,0x2f,0x21,0x21,0x22,0x80,0xf8,0x88,0x48,0xf8,0x0,0xfc,0x44,0xfc,0x44,0xfc,0x0,0xfe,0x10,0x10,0x10,
++0x0,0x4f,0x30,0x13,0x82,0x4f,0x48,0x13,0x10,0x23,0xec,0x23,0x2c,0x23,0x2d,0x20,0x40,0xfe,0x0,0xf8,0x8,0xfe,0x2,0xfc,0x80,0x48,0x50,0x60,0xd0,0x4e,0x44,0x80,
++0x0,0x4f,0x34,0x12,0x82,0x44,0x41,0x11,0x13,0x26,0xeb,0x22,0x23,0x22,0x23,0x22,0x0,0xbc,0xa4,0x94,0x94,0xa4,0x0,0x24,0xfe,0x20,0xfc,0x20,0xfc,0x20,0xfe,0x0,
++0x4,0x44,0x3f,0x4,0x9f,0x51,0x11,0x3f,0x51,0x51,0xdf,0x44,0x7f,0x44,0x44,0x44,0x10,0x10,0xa8,0x28,0x44,0x82,0xfc,0x24,0xb4,0x6c,0x6c,0xb4,0x24,0x24,0xb4,0x48,
++0x2,0x43,0x32,0x17,0x84,0x4a,0x41,0x12,0x17,0x20,0xe7,0x20,0x27,0x20,0x2f,0x20,0x0,0xbc,0x24,0xa8,0x90,0xa8,0x46,0xa0,0xbc,0xa0,0xbc,0xa0,0xbc,0xa0,0xfe,0x0,
++0x0,0x5f,0x24,0x27,0x80,0x47,0x4c,0x17,0x10,0x2e,0xeb,0x2e,0x2b,0x2f,0x2a,0x37,0x80,0xfe,0x0,0xf8,0x0,0xf8,0x8,0xf8,0x80,0x9c,0xf4,0x9c,0x54,0x54,0x96,0x62,
++0x0,0x41,0x22,0x24,0x8b,0x50,0x4f,0x19,0x2f,0x20,0xef,0x29,0x29,0x2f,0x29,0x28,0x80,0x40,0x20,0x10,0xee,0x4,0xfc,0x24,0xfc,0x0,0xfc,0x24,0x24,0xfc,0x24,0xc,
++0x0,0x42,0x2f,0x21,0x82,0x4f,0x44,0x17,0x14,0x27,0xe1,0x27,0x21,0x2f,0x22,0x24,0x40,0x48,0xfe,0x50,0x48,0xfe,0x44,0xfc,0x44,0xfc,0x10,0xfc,0x10,0xfe,0x8,0x4,
++0x40,0x3f,0x31,0x9f,0x51,0x5f,0x4,0x3f,0x20,0x5f,0xd1,0x5f,0x44,0x55,0x64,0x4c,0x4,0x7e,0x10,0x24,0x7e,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x20,0x28,0x46,0x82,
++0x47,0x20,0x2f,0xa,0x95,0x4f,0x45,0x17,0x12,0x2f,0xea,0x2f,0x22,0x3f,0x22,0x22,0xfc,0x40,0xfe,0x4a,0x40,0xbc,0x24,0x24,0x3c,0xa4,0xa4,0xbc,0x24,0xe4,0x54,0x88,
++0x0,0x0,0x0,0x2,0x1,0x1,0x7f,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x2,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x2,0x1,0x7f,0x42,0x82,0x2,0x3f,0x2,0x2,0x2,0x4,0x4,0x8,0x10,0x20,0x40,0x0,0x0,0xfe,0x2,0x4,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x2,0x1,0x7f,0x40,0x80,0xff,0x4,0x4,0x8,0xf,0x18,0x28,0x48,0x8,0xf,0x8,0x0,0x0,0xfe,0x2,0x4,0xfe,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x2,0x1,0x7f,0x40,0x82,0x1,0x9,0x8,0x28,0x28,0x29,0x4a,0xc,0x18,0x67,0x0,0x0,0x0,0xfe,0x2,0x4,0x10,0x10,0x20,0x48,0x84,0x4,0x4,0x10,0x10,0xf0,0x0,
++0x2,0x1,0x7f,0x42,0x82,0xff,0x4,0xf,0x18,0x2f,0xc8,0xf,0x8,0x8,0x8,0x8,0x0,0x0,0xfe,0x2,0x4,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x2,0x1,0x7f,0x40,0x9f,0x10,0x17,0x10,0x1f,0x15,0x25,0x24,0x24,0x45,0x86,0x4,0x0,0x0,0xfe,0x2,0xf4,0x0,0xe0,0x8,0xfc,0x0,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x2,0x1,0x7f,0x42,0xa9,0x28,0x47,0x0,0x3f,0x21,0x3f,0x21,0x3f,0x21,0x21,0x21,0x0,0x0,0xfe,0x2,0x14,0x28,0xe4,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x28,0x10,
++0x1,0x7f,0x44,0x9f,0x4,0x1f,0x4,0xff,0x8,0x1f,0xe4,0x4,0x7,0x0,0x3f,0x0,0x0,0xfe,0x42,0xf4,0x40,0xf0,0x44,0xfe,0x20,0xd0,0x4e,0x40,0xf8,0x8,0xe8,0x10,
++0x1,0x7f,0x44,0x9f,0x4,0x1f,0x4,0xff,0x8,0x17,0x21,0xcf,0x1,0x3f,0x1,0x3,0x0,0xfe,0x42,0xf4,0x40,0xf0,0x44,0xfe,0x20,0xd0,0xe,0xe4,0x0,0xf8,0x0,0x0,
++0x2,0x1,0x7f,0x40,0xa5,0x24,0x25,0x3c,0x4,0xff,0x24,0x25,0x25,0x25,0x45,0x5,0x0,0x0,0xfe,0x2,0xfc,0x40,0xf8,0x88,0x88,0xfe,0x0,0xfc,0x4,0x4,0xfc,0x4,
++0x1,0x7f,0x41,0xbf,0x1,0xa,0x4,0x1f,0x30,0xdf,0x10,0x1f,0x9,0x11,0x25,0x2,0x0,0xfe,0x2,0xf8,0x0,0xa0,0x40,0xf0,0x1e,0xf4,0x10,0xf0,0x20,0x18,0x8,0x0,
++0x1,0x7f,0x44,0x9f,0x4,0x1f,0x4,0xff,0x9,0x1f,0x22,0xc4,0xc,0x35,0x6,0x4,0x0,0xfe,0x42,0xf4,0x40,0xf0,0x44,0xfe,0x20,0xf0,0x1e,0xa4,0x40,0x20,0x1c,0x8,
++0x1,0x7f,0x40,0xbf,0x24,0x3f,0x0,0xff,0x0,0x1f,0x10,0x1f,0x4,0xc,0x75,0x6,0x0,0xfe,0x2,0xfc,0x48,0xf8,0x0,0xfe,0x0,0xf0,0x10,0xf0,0x88,0x50,0x20,0x1c,
++0x1,0x7f,0x44,0x9f,0x4,0x1f,0x4,0xff,0x8,0x1f,0x28,0xcf,0x9,0xd,0x13,0x20,0x0,0xfe,0x42,0xf4,0x40,0xf0,0x44,0xfe,0x20,0xf0,0x2e,0xe4,0x0,0xe0,0x0,0xf8,
++0x1,0x7f,0x44,0x9f,0x4,0x1f,0x4,0xff,0x9,0x1f,0x27,0xc0,0xf,0x8,0x8,0xf,0x0,0xfe,0x42,0xf4,0x40,0xf0,0x44,0xfe,0x20,0xf0,0x8,0xe6,0xe0,0x20,0x20,0xe0,
++0x0,0x40,0x30,0x10,0x0,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x28,0x47,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0xfc,0x0,
++0x0,0x40,0x37,0x10,0x2,0x2,0xf7,0x10,0x10,0x10,0x11,0x12,0x14,0x28,0x47,0x0,0x0,0x8,0xfc,0x10,0x10,0x14,0xfe,0x50,0x50,0x90,0x10,0x10,0x50,0x26,0xfc,0x0,
++0x1,0x41,0x31,0x12,0x4,0x0,0xf0,0x1f,0x10,0x10,0x10,0x10,0x10,0x28,0x47,0x0,0x0,0x8,0xfc,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x46,0xfc,0x0,
++0x0,0x40,0x27,0x24,0x4,0x5,0xe5,0x25,0x25,0x25,0x25,0x24,0x24,0x50,0x8f,0x0,0x0,0x8,0xfc,0x8,0x8,0xe8,0x28,0x28,0x28,0xe8,0x28,0x8,0x18,0x6,0xfc,0x0,
++0x1,0x41,0x31,0x11,0x2,0x4,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x28,0x47,0x0,0x0,0x0,0x8,0xfc,0x80,0x90,0xf8,0x80,0x90,0xf8,0x80,0x80,0x80,0x86,0xfc,0x0,
++0x2,0x42,0x33,0x14,0x8,0x2,0xf3,0x16,0x12,0x12,0x12,0x11,0x10,0x28,0x47,0x0,0x0,0x8,0xfc,0x40,0x48,0x7c,0xc8,0x48,0x68,0x50,0x4,0xfc,0x0,0x6,0xfc,0x0,
++0x1,0x41,0x21,0x21,0x2,0x4,0xf0,0x11,0x11,0x12,0x14,0x11,0x20,0x48,0x87,0x0,0x0,0x0,0x8,0xfc,0x8,0x10,0x40,0x50,0x48,0x44,0x44,0x40,0x80,0x6,0xfc,0x0,
++0x4,0x44,0x2f,0x24,0x4,0x4,0xe4,0x24,0x24,0x24,0x28,0x32,0x21,0x50,0x8f,0x0,0x0,0x4,0xbe,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xbc,0x20,0x6,0xfc,0x0,
++0x0,0x43,0x30,0x10,0x1,0x6,0xf0,0x13,0x10,0x10,0x10,0x17,0x10,0x28,0x47,0x0,0x0,0xf8,0x10,0x60,0x98,0x4,0x10,0xf8,0x40,0x40,0x48,0xfc,0x0,0x6,0xfc,0x0,
++0x0,0x40,0x31,0x12,0x4,0x7,0xf0,0x13,0x12,0x12,0x12,0x13,0x12,0x28,0x47,0x0,0x80,0x80,0x10,0x8,0x4,0xfc,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,0x6,0xfc,0x0,
++0x0,0x40,0x27,0x24,0x4,0x7,0xe4,0x24,0x25,0x29,0x29,0x31,0x21,0x50,0x8f,0x0,0x0,0x18,0xe0,0x0,0x8,0xfc,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x6,0xfc,0x0,
++0x1,0x41,0x31,0x12,0x4,0x1,0xf6,0x10,0x13,0x12,0x12,0x17,0x10,0x28,0x47,0x0,0x0,0xf8,0x10,0xa0,0x40,0xb0,0x4e,0x40,0xf8,0x40,0x48,0xfc,0x40,0x46,0xfc,0x0,
++0x0,0x40,0x2f,0x20,0xf,0x8,0xe8,0x2f,0x28,0x28,0x2f,0x28,0x28,0x50,0x8f,0x0,0xa0,0x90,0xfc,0x80,0xf8,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,0x98,0x6,0xfc,0x0,
++0x0,0x4f,0x30,0x17,0x4,0x4,0xf6,0x15,0x14,0x14,0x14,0x15,0x14,0x28,0x47,0x0,0x4,0xfe,0x0,0xbc,0xa4,0xa4,0xb4,0xac,0xa4,0xa4,0xa4,0xac,0xa4,0x2,0xfc,0x0,
++0x0,0x40,0x30,0x17,0x0,0x2,0xf1,0x10,0x11,0x16,0x10,0x11,0x10,0x28,0x47,0x0,0x40,0x50,0x48,0xfc,0x40,0x48,0x50,0x40,0x50,0x4c,0x44,0x40,0x80,0x6,0xfc,0x0,
++0x0,0x42,0x31,0x10,0x3,0x2,0xf2,0x13,0x12,0x12,0x13,0x12,0x12,0x28,0x47,0x0,0x40,0x48,0x50,0x40,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x18,0x6,0xfc,0x0,
++0x0,0x48,0x25,0x22,0x5,0x9,0xe3,0x25,0x29,0x31,0x21,0x25,0x22,0x50,0x8f,0x0,0x10,0x90,0x10,0x10,0x52,0x54,0x58,0x90,0x28,0x28,0x28,0x44,0x82,0x6,0xfc,0x0,
++0x0,0x41,0x32,0x17,0x1,0x2,0xf5,0x11,0x11,0x12,0x14,0x10,0x13,0x28,0x47,0x0,0x80,0x10,0x8,0xfc,0x10,0xc,0x4,0xf0,0x10,0xa0,0x40,0xa0,0x1c,0x6,0xfc,0x0,
++0x0,0x40,0x37,0x10,0x0,0xf,0xf1,0x16,0x10,0x17,0x10,0x10,0x17,0x28,0x47,0x0,0x40,0x48,0xfc,0x40,0x44,0xfe,0x10,0x4c,0x40,0xfc,0x40,0x44,0xfe,0x0,0xfe,0x0,
++0x0,0x43,0x30,0x17,0x0,0x1,0xf6,0x10,0x1f,0x11,0x13,0x10,0x11,0x2a,0x47,0x0,0x18,0xe0,0x48,0xfc,0xe0,0x50,0x4e,0x84,0xfe,0x10,0x10,0xe0,0x10,0x8,0xfe,0x0,
++0x0,0x40,0x2f,0x28,0x13,0x2,0xe2,0x23,0x22,0x23,0x22,0x22,0x23,0x52,0x8f,0x0,0x80,0x40,0xfe,0x2,0xf4,0x10,0x10,0xf0,0x0,0xf8,0x8,0x8,0xf8,0x6,0xfc,0x0,
++0x0,0x47,0x20,0x13,0x0,0xf,0xf0,0x12,0x11,0x11,0x12,0x14,0x11,0x28,0x47,0x0,0x8,0xfc,0x8,0xf8,0x8,0xfe,0x40,0x44,0x68,0x50,0x48,0x44,0x40,0x86,0xfc,0x0,
++0x0,0x42,0x32,0x12,0x3,0x0,0xf7,0x10,0x17,0x14,0x14,0x14,0x14,0x28,0x47,0x0,0x40,0x48,0x48,0x48,0xf8,0x0,0xfe,0x80,0xfc,0xa4,0xa4,0xa4,0xac,0x2,0xfc,0x0,
++0x0,0x40,0x33,0x12,0x3,0x2,0xf3,0x10,0x17,0x10,0x13,0x10,0x17,0x28,0x47,0x0,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x40,0xf8,0x40,0xfc,0x0,0xfe,0x0,
++0x1,0x40,0x37,0x10,0x7,0x4,0xf4,0x14,0x15,0x16,0x15,0x14,0x17,0x28,0x47,0x0,0x10,0xa4,0xfe,0xa0,0xfc,0xa4,0xa4,0xa4,0x1c,0x4,0xf4,0x4,0xfc,0x0,0xfe,0x0,
++0x0,0x47,0x34,0x14,0x7,0x4,0xf4,0x17,0x14,0x14,0x17,0x14,0x14,0x28,0x47,0x0,0x4,0xbe,0x84,0x84,0xbc,0x4,0x0,0x7c,0x44,0x44,0xa8,0x10,0x28,0x44,0xfe,0x0,
++0x2,0x42,0x2f,0x22,0xf,0x2,0xff,0x24,0x27,0x24,0x24,0x28,0x29,0x50,0x8f,0x0,0x10,0x10,0x94,0x3e,0xa4,0x44,0xe4,0x14,0x94,0x88,0x94,0x94,0xa2,0x42,0xfe,0x0,
++0x1,0x47,0x31,0x17,0x1,0xf,0xf0,0x13,0x12,0x13,0x12,0x1f,0x12,0x2a,0x47,0x0,0x10,0xfc,0x10,0xfc,0x10,0xfe,0x40,0xf8,0x48,0xf8,0x48,0xfe,0x8,0x18,0xfe,0x0,
++0x3,0x42,0x33,0x12,0x3,0x0,0xf7,0x10,0x14,0x12,0x12,0x14,0x11,0x28,0x47,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xbc,0x84,0xa4,0x94,0x94,0xa4,0x8c,0x86,0xfc,0x0,
++0x1,0x46,0x34,0x15,0x6,0x4,0xf3,0x12,0x12,0x13,0x12,0x12,0x13,0x28,0x47,0x0,0x4,0xfe,0x24,0x24,0x54,0x88,0xf8,0x48,0x48,0xf8,0x48,0x48,0xf8,0x6,0xfc,0x0,
++0x7,0x44,0x27,0x24,0x7,0x2,0xe7,0x2c,0x37,0x24,0x27,0x24,0x27,0x54,0x8f,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x40,0xfc,0x40,0xf8,0x40,0xf8,0x40,0xfc,0x0,0xfe,0x0,
++0x0,0x42,0x31,0x17,0x0,0x1,0xf6,0x12,0x13,0x14,0x1a,0x11,0x12,0x2c,0x47,0x0,0x40,0x48,0x50,0xfc,0xe0,0x50,0x4c,0x8,0xfe,0xa8,0xa8,0x3e,0x8,0x8,0xfe,0x0,
++0x0,0x40,0x20,0x27,0x4,0x7,0xe4,0x25,0x26,0x25,0x2a,0x28,0x33,0x50,0x8f,0x0,0x48,0x7c,0x40,0xfc,0x84,0xf0,0x84,0x78,0xa0,0x30,0x68,0xa4,0x24,0x60,0xfe,0x0,
++0x4,0x47,0x29,0x32,0xf,0xa,0xea,0x2f,0x2a,0x2a,0x2f,0x2a,0x2a,0x51,0x8f,0x0,0x4,0xfe,0x24,0x24,0xac,0xc4,0xa8,0xbe,0xc8,0x88,0xfe,0x88,0x88,0x88,0xfe,0x0,
++0x0,0x43,0x3c,0x2a,0x5,0x6,0xeb,0x25,0x39,0x23,0x25,0x39,0x25,0x52,0x8f,0x0,0x90,0x24,0xfe,0xc4,0x44,0x7c,0x44,0x44,0x7c,0x28,0x28,0x2a,0x4e,0x80,0xfe,0x0,
++0x0,0x40,0x2f,0x29,0x12,0x1,0xef,0x21,0x2e,0x21,0x2e,0x21,0x2e,0x50,0x8f,0x0,0x80,0x40,0xfe,0x12,0xc,0x10,0xfc,0x88,0x50,0xe0,0x50,0xce,0x40,0xc6,0xfc,0x0,
++0x2,0x44,0x22,0x2f,0x9,0x8,0xe9,0x2f,0x24,0x26,0x24,0x26,0x24,0x56,0x88,0x7,0x48,0x90,0x48,0xfc,0x24,0xc4,0x24,0xfc,0x90,0xd0,0x90,0xd4,0x94,0xdc,0x0,0xfe,
++0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,
++0x10,0x14,0xfe,0x10,0x7c,0x10,0xfe,0x10,0x7f,0x0,0x0,0x3f,0x0,0x0,0x7f,0x0,0x10,0x14,0xfe,0x10,0x7c,0x10,0xfe,0x10,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x4,0x7,0x8,0x1f,0x0,0xff,0x2,0x5,0x19,0x62,0x4,0x19,0x62,0xc,0x72,0x1,0x0,0xf0,0x10,0xe0,0x44,0xfe,0x8,0x10,0xa0,0xc0,0xa0,0x90,0x8e,0x84,0x80,0x0,
++0x4,0x7,0x8,0x1f,0x0,0xff,0x2,0x22,0x27,0x39,0x21,0x2f,0x29,0x32,0x24,0x8,0x0,0xf0,0x20,0xe0,0x44,0xfe,0x0,0x20,0xe4,0x28,0x30,0xe0,0x22,0xa2,0x5e,0x0,
++0x0,0x3f,0x20,0x20,0x3f,0x22,0x22,0x22,0x3f,0x22,0x22,0x22,0x44,0x44,0x88,0x10,0x8,0xfc,0x8,0x8,0xf8,0x8,0x0,0x20,0xf0,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x2,0x3f,0x22,0x22,0x22,0x22,0x3e,0x28,0x28,0x24,0x24,0x22,0x41,0x40,0x80,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0x7c,0x0,0x28,0x24,0x46,0x82,0x80,0x60,0x1e,0x4,
++0x0,0x3f,0x20,0x3f,0x22,0x24,0x29,0x32,0x24,0x2d,0x34,0x24,0x44,0x44,0x84,0x5,0x4,0xfe,0x4,0xfc,0x20,0x28,0xfc,0x20,0x20,0xf8,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x0,0x3f,0x20,0x3f,0x20,0x2f,0x2a,0x2a,0x2c,0x2a,0x2a,0x2e,0x4a,0x48,0x88,0x8,0x4,0xfe,0x4,0xfc,0x0,0xfe,0x8,0xe8,0xa8,0xa8,0xa8,0xa8,0xe8,0x8,0x28,0x10,
++0x3f,0x20,0x3f,0x20,0x27,0x20,0x2f,0x20,0x21,0x3f,0x22,0x24,0x5f,0x44,0x84,0xc,0xfc,0x4,0xfc,0x0,0xe0,0x48,0xfc,0x80,0x80,0x7c,0x8,0x10,0x7e,0x10,0x10,0x30,
++0x0,0x3f,0x20,0x3f,0x22,0x24,0x28,0x32,0x25,0x2c,0x34,0x24,0x44,0x45,0x86,0x4,0x4,0xfe,0x4,0xfc,0x20,0xbc,0xa0,0xa8,0xfc,0x20,0xa8,0xbc,0xa0,0x60,0x3e,0x0,
++0x0,0x3f,0x20,0x3f,0x22,0x24,0x28,0x33,0x24,0x2d,0x34,0x27,0x44,0x44,0x84,0x5,0x4,0xfe,0x4,0xfc,0x20,0xa8,0x20,0xfc,0xa8,0x24,0x40,0xfe,0x88,0x70,0x48,0x84,
++0x3f,0x20,0x3f,0x22,0x2f,0x20,0x27,0x20,0x3f,0x2a,0x3f,0x24,0x5f,0x44,0xbf,0x4,0xfc,0x4,0xfc,0x20,0xf8,0x80,0xf0,0x80,0xfc,0xa8,0x7c,0x10,0x7c,0x10,0xfe,0x10,
++0x0,0x7d,0x4,0x4,0x4,0x7c,0x43,0x40,0x41,0x7c,0x4,0x4,0x4,0x4,0x2b,0x10,0x8,0xfc,0x8,0x30,0x58,0x86,0x2,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x8,0x7e,0x12,0x22,0x1c,0x14,0x62,0x3f,0x0,0x1f,0x10,0x1f,0x0,0x0,0x0,0x0,0x0,0xfc,0x44,0x48,0x30,0x48,0x86,0xf0,0x10,0xf0,0x0,0xf8,0x8,0x8,0x50,0x20,
++0x0,0x7f,0x5,0x5,0x5,0x7d,0x41,0x41,0x41,0x7d,0x7,0x4,0x4,0x4,0x28,0x10,0x4,0xfe,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0xfe,0x8,0x8,0x8,0x8,0x8,
++0x14,0x14,0x7f,0x15,0x15,0x7f,0x54,0x54,0x54,0x7f,0x15,0x15,0x15,0x27,0x24,0x44,0x20,0x20,0x3c,0x48,0x90,0x7c,0x54,0x54,0x54,0x7c,0x44,0x40,0x42,0x42,0x3e,0x0,
++0x0,0xf0,0x1f,0x12,0x12,0x77,0x44,0x44,0x44,0x77,0x14,0x14,0x14,0x17,0xa4,0x40,0x4,0xbe,0xc4,0x4,0x4,0xbc,0xa0,0xa0,0xa4,0xbe,0x84,0x84,0x84,0x84,0xa8,0x10,
++0x79,0xd,0x79,0x47,0x79,0xd,0x31,0xff,0x0,0xf,0x8,0x3f,0x24,0x2f,0x21,0x21,0x3c,0x44,0x3c,0xe0,0x3c,0x44,0x18,0xfe,0x0,0xe0,0x20,0xf8,0x48,0xe8,0x8,0x18,
++0x1,0x11,0x11,0x11,0x11,0x1f,0x11,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x10,0x10,0x10,0x10,0xf0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x26,0x24,0x24,0x24,0x44,0x28,0x10,0x28,0x44,0x84,0x0,0x80,0x80,0x84,0xfe,0x4,0x4,0x4,0x84,0x44,0x44,0x4,0x4,0x4,0x44,0x28,0x10,
++0x10,0x10,0x11,0x10,0xfc,0x24,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x84,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x17,0x10,0x10,0xfc,0x24,0x24,0x27,0x24,0x44,0x28,0x10,0x28,0x44,0x81,0x2,0x4,0xfe,0x88,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0x88,0x88,0x8,0x8,
++0x10,0x11,0x10,0x10,0xfc,0x24,0x27,0x24,0x24,0x44,0x28,0x10,0x28,0x45,0x82,0x4,0x8,0xfc,0x40,0x40,0x40,0x44,0xfe,0x50,0x50,0x50,0x90,0x90,0x92,0x12,0xe,0x0,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x0,0x4,0xfe,0x0,0x4,0x84,0x48,0x28,0x10,0x10,0x28,0x44,0x84,0x0,0x4,0xfe,0x0,
++0x11,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x0,0x20,0x20,0x20,0x24,0x2c,0xf0,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0xa2,0x1e,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x25,0x26,0x24,0x24,0x45,0x28,0x10,0x28,0x44,0x84,0x0,0x40,0x40,0xa0,0xa0,0x10,0xe,0x44,0x20,0x0,0xf8,0x8,0x10,0x10,0x20,0x40,0x80,
++0x10,0x10,0x10,0x11,0xfd,0x25,0x25,0x25,0x24,0x44,0x28,0x10,0x29,0x46,0x80,0x0,0x20,0x28,0x3c,0xe0,0x20,0x20,0x20,0xfe,0x22,0x62,0x6a,0xa4,0x20,0x20,0x20,0x20,
++0x10,0x12,0x11,0x11,0xfc,0x27,0x24,0x24,0x24,0x44,0x28,0x10,0x29,0x45,0x82,0x4,0x40,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xa4,0x94,0x4,0x4,0x28,0x10,
++0x10,0x13,0x10,0x10,0xfc,0x24,0x24,0x25,0x24,0x44,0x28,0x10,0x28,0x44,0x87,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0x88,0x88,0xfe,0x0,
++0x10,0x11,0x10,0x10,0xfc,0x24,0x27,0x24,0x24,0x44,0x28,0x10,0x28,0x44,0x84,0x0,0x0,0xf8,0x8,0x50,0x20,0x20,0xfe,0x22,0x24,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x10,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x44,0x84,0x0,0x0,0x8,0x48,0x28,0x28,0x28,0x8,0x8,0x8,0x8,0x48,0x90,0x10,0x28,0x46,0x82,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x28,0x44,0x87,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x1,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x27,0x25,0x45,0x29,0x11,0x29,0x45,0x82,0x4,0x4,0xde,0x54,0x54,0x54,0x54,0x54,0xfe,0x54,0x54,0x54,0x54,0x54,0x54,0xec,0x44,
++0x2,0x1,0x7f,0x0,0x8,0x4,0xff,0x1,0x2,0xff,0x4,0x8,0x6,0x1,0x6,0x38,0x0,0x8,0xfc,0x0,0x20,0x44,0xfe,0x0,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x18,
++0x10,0x10,0x17,0x10,0xfc,0x24,0x24,0x26,0x25,0x44,0x28,0x10,0x28,0x44,0x87,0x0,0x0,0x4,0xfe,0x90,0x90,0x90,0x92,0x94,0x98,0x90,0x90,0x90,0x90,0x94,0xfe,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x24,0x24,0x27,0x24,0x47,0x28,0x10,0x28,0x44,0x81,0x6,0x40,0x40,0x5c,0xe0,0x48,0x52,0x62,0x9e,0x0,0xf8,0x90,0x90,0x90,0x92,0x12,0xe,
++0x10,0x11,0x11,0x11,0xfd,0x26,0x24,0x27,0x24,0x44,0x28,0x10,0x29,0x46,0x84,0x0,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x70,0xa8,0xa8,0x24,0x22,0x20,0x20,
++0x2,0x1,0x7f,0x4,0x14,0x24,0x44,0x5,0x2,0xff,0x4,0x8,0x6,0x1,0x6,0x38,0x0,0x8,0xfc,0x40,0x50,0x4c,0x44,0x40,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x18,
++0x10,0x10,0x10,0x13,0xfc,0x24,0x25,0x26,0x24,0x44,0x28,0x10,0x28,0x44,0x81,0x6,0x40,0x20,0x4,0xfe,0x0,0x88,0x6,0x8a,0x88,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x11,0x10,0x10,0x13,0xfc,0x24,0x24,0x24,0x27,0x44,0x28,0x10,0x28,0x44,0x81,0x2,0x4,0x88,0x0,0xfe,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0x88,0x8,0x8,
++0x10,0x10,0x13,0x12,0xfc,0x24,0x25,0x24,0x24,0x47,0x28,0x10,0x28,0x44,0x84,0x0,0x40,0x20,0xfe,0x2,0x4,0x38,0xc0,0x40,0x44,0xfe,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x10,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x44,0x28,0x11,0x28,0x44,0x87,0x0,0x0,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x11,0x11,0xfd,0x25,0x25,0x24,0x27,0x44,0x28,0x10,0x28,0x44,0x84,0x0,0x20,0x24,0xfe,0x24,0xfc,0x24,0xfc,0x0,0xfe,0x80,0xfc,0x4,0x4,0x44,0x28,0x10,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x24,0x27,0x4a,0x2a,0x12,0x2a,0x46,0x82,0x2,0x4,0xfe,0x4,0x4,0x4,0xfc,0x24,0x20,0xfe,0x22,0x22,0x52,0x8a,0x2,0xa,0x4,
++0x11,0x10,0x10,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x1,0x4,0xbe,0x84,0x24,0x24,0x24,0xfc,0x24,0x74,0x6c,0xac,0x24,0x24,0x4,0x14,0x8,
++0x10,0x8,0x41,0x25,0x9,0x72,0x10,0x17,0x1,0xff,0x4,0x8,0x6,0x1,0x6,0x38,0x40,0x40,0x50,0x4c,0x44,0x50,0xe0,0x0,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x18,
++0x10,0x10,0x10,0x11,0xfc,0x24,0x25,0x25,0x25,0x45,0x28,0x10,0x28,0x45,0x82,0x0,0x88,0x48,0x10,0xfc,0x24,0x24,0xfc,0x20,0x20,0xfe,0x62,0x62,0xaa,0x24,0x20,0x20,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x82,0x4,0x4,0xfe,0x4,0x4,0xfc,0x0,0xc,0xf0,0x20,0xfc,0x20,0xfe,0x20,0x22,0x22,0x1e,
++0x20,0x27,0x24,0x25,0xf5,0x56,0x55,0x55,0x55,0x95,0x55,0x27,0x25,0x54,0x94,0x4,0x0,0x84,0xfe,0x4,0x4,0x74,0x54,0x54,0x54,0x54,0x54,0x74,0x4,0x4,0x14,0x8,
++0x10,0x10,0x13,0x10,0xfd,0x24,0x27,0x24,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x1,0x20,0x24,0xfe,0x20,0xfc,0x20,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x4,0x14,0x8,
++0x10,0x10,0x13,0x10,0xfc,0x25,0x24,0x24,0x27,0x44,0x28,0x11,0x2a,0x44,0x80,0x0,0x20,0x24,0xfe,0x20,0x20,0xfc,0x20,0x24,0xfe,0x40,0xa4,0xa8,0x90,0x88,0xc6,0x80,
++0x20,0x20,0x27,0x20,0xfb,0x48,0x4f,0x48,0x4b,0x90,0x52,0x22,0x23,0x52,0x84,0x8,0x40,0x48,0xfc,0x40,0xf8,0x48,0xfe,0x48,0xf8,0x40,0x48,0x7c,0x40,0xc0,0x60,0x1e,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x24,0x27,0x4a,0x2a,0x13,0x2a,0x46,0x83,0x2,0x8,0xfc,0x8,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x44,0x28,0x13,0x28,0x44,0x80,0x0,0x20,0x44,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x50,0x94,0xfe,0x10,0x10,0x10,0x10,
++0x11,0x10,0x10,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x28,0x13,0x28,0x44,0x84,0x0,0x4,0x88,0x50,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x20,0x20,0x20,0x20,
++0x10,0x10,0xfe,0x12,0x34,0xc,0x32,0xc1,0x3f,0x21,0x22,0x24,0x21,0x22,0x24,0x20,0x0,0x0,0xfc,0x8,0x50,0x20,0xd8,0x6,0xf8,0x8,0x88,0x48,0x8,0x88,0x48,0x18,
++0x20,0x23,0x22,0x22,0xfb,0x4a,0x4a,0x4b,0x48,0x97,0x54,0x24,0x24,0x54,0x8f,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xfc,0xa4,0xa4,0xa4,0xa4,0xfe,0x0,
++0x10,0x10,0x13,0x11,0xfc,0x25,0x24,0x27,0x24,0x44,0x28,0x11,0x2a,0x44,0x84,0x3,0x8,0x1c,0xe0,0x24,0xa8,0xfc,0x40,0xfe,0x80,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x13,0x10,0xfd,0x25,0x25,0x24,0x27,0x4a,0x29,0x10,0x28,0x44,0x84,0x0,0x40,0x24,0xfe,0x0,0xfc,0x4,0xfc,0x0,0xfe,0x2,0xfc,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x7f,0x12,0xc,0x7f,0x15,0x24,0x4c,0x2,0xff,0x4,0x8,0x4,0x3,0x4,0x38,0x40,0x44,0x7e,0x88,0x50,0x20,0x50,0x8e,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x10,0x10,0x13,0x10,0xfd,0x24,0x27,0x24,0x25,0x45,0x29,0x11,0x2b,0x45,0x85,0x1,0x88,0x88,0xfe,0x88,0xfc,0x88,0xfe,0x20,0xfc,0x24,0xfc,0x24,0xfe,0x4,0x14,0x8,
++0x10,0x10,0x13,0x10,0xfc,0x25,0x25,0x25,0x25,0x45,0x28,0x13,0x28,0x44,0x84,0x3,0x88,0x88,0xfe,0x88,0x88,0xfc,0x4,0xfc,0x4,0xfc,0x20,0xfe,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x81,0x0,0x20,0x44,0xfe,0x54,0x24,0x54,0x4,0xfc,0x10,0x12,0xd4,0x18,0x12,0x52,0x8e,0x0,
++0x20,0x23,0x21,0x20,0xfb,0x4a,0x4c,0x4b,0x48,0x88,0x51,0x22,0x24,0x50,0x88,0x3,0x1c,0xe0,0x24,0xa8,0xfe,0x42,0x44,0xfe,0x80,0x80,0xfc,0x88,0x50,0x20,0xd8,0x6,
++0x10,0x10,0x13,0x12,0xfc,0x24,0x24,0x24,0x24,0x44,0x28,0x13,0x28,0x44,0x85,0x2,0x40,0x20,0xfe,0x2,0x1c,0xe0,0x80,0xfc,0x88,0x88,0x88,0xfe,0x0,0x88,0x6,0x2,
++0x10,0x11,0x11,0x11,0xfc,0x27,0x24,0x24,0x25,0x45,0x29,0x11,0x28,0x44,0x85,0x0,0x20,0x24,0x24,0xfc,0x20,0xfe,0x0,0x24,0xfe,0x24,0x24,0xfc,0x20,0x24,0xfe,0x2,
++0x4,0x3f,0x4,0x7f,0xe,0x15,0x24,0x3f,0x21,0x21,0x3f,0x22,0x26,0x41,0x46,0x98,0x20,0x24,0x3e,0xe8,0x10,0x28,0x44,0xfe,0x0,0x4,0xfe,0x10,0x20,0xc0,0x30,0x8,
++0x20,0x23,0x20,0x21,0xf9,0x4f,0x49,0x49,0x49,0x89,0x51,0x20,0x22,0x52,0x88,0x0,0x8,0xfc,0x20,0x3c,0x20,0xfe,0x0,0x8,0xfc,0x0,0xfe,0x2,0xaa,0xaa,0x2,0xc,
++0x10,0x10,0x11,0x10,0xfd,0x24,0x27,0x24,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x1,0x20,0x28,0xfc,0x20,0x24,0xa8,0xfe,0x0,0xfc,0x4,0x74,0x54,0x74,0x4,0xfc,0x4,
++0x10,0x13,0x10,0x10,0xfd,0x25,0x25,0x25,0x24,0x45,0x28,0x13,0x28,0x45,0x82,0x0,0x4,0xfe,0x50,0x54,0xfe,0x54,0x54,0xfc,0x0,0xfc,0x0,0xfe,0xa8,0x24,0x22,0x20,
++0x10,0x11,0x10,0x13,0xfe,0x24,0x24,0x24,0x24,0x44,0x29,0x11,0x29,0x45,0x84,0x0,0x20,0x24,0xa8,0xfe,0x2,0xfc,0x88,0x88,0xf8,0x20,0xfc,0x24,0x24,0x2c,0x20,0x20,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x24,0x24,0x25,0x44,0x28,0x11,0x28,0x45,0x86,0x0,0x4,0xfe,0x24,0xfc,0x24,0xfc,0x40,0x84,0xf8,0x20,0x48,0xfc,0xa8,0x26,0x22,0x60,
++0x10,0x11,0x10,0x10,0xff,0x24,0x25,0x25,0x25,0x45,0x29,0x10,0x2b,0x44,0x84,0x0,0x20,0xfc,0x88,0x50,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x20,0xfe,0x20,0x20,0x20,
++0x10,0x13,0x10,0x11,0xfc,0x25,0x25,0x25,0x24,0x47,0x28,0x11,0x29,0x45,0x85,0x1,0x20,0xfe,0x20,0xfc,0x0,0xfc,0x4,0xfc,0x88,0xfe,0x0,0xfc,0x4,0x4,0xfc,0x4,
++0x10,0x13,0x10,0x11,0xfd,0x25,0x25,0x25,0x24,0x45,0x29,0x11,0x29,0x45,0x84,0x3,0x20,0xfe,0x0,0xfc,0x54,0x74,0x54,0xfc,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x0,0xfe,
++0x0,0x3e,0x23,0x3e,0x20,0x3f,0x52,0x52,0x9e,0x1,0xff,0x4,0xc,0x3,0x4,0x18,0x40,0x20,0xfc,0x88,0x50,0xfc,0x20,0xf8,0x20,0x20,0xfe,0x20,0x40,0x80,0x60,0x10,
++0x2,0xfa,0xaa,0xaa,0xff,0xaa,0xaa,0xfa,0x22,0xfa,0x2a,0x2a,0x49,0x4a,0xac,0x10,0x0,0x3e,0x2a,0xaa,0xfe,0xaa,0xaa,0xbe,0x88,0xbe,0x8a,0x8a,0x12,0x92,0x6a,0x4,
++0x40,0x40,0x47,0x44,0xf4,0x57,0x54,0x55,0x56,0x94,0x54,0x25,0x24,0x54,0x89,0x10,0x40,0x24,0xfe,0x88,0x88,0xfe,0x88,0xdc,0xaa,0x40,0x90,0x20,0x48,0x84,0xfc,0x4,
++0x20,0x21,0x20,0x23,0xfa,0x4c,0x49,0x49,0x4f,0x89,0x53,0x23,0x25,0x55,0x89,0x1,0x8,0xfc,0x20,0xfe,0xaa,0x70,0xa8,0x20,0xfc,0x24,0x3c,0xa4,0x7c,0x24,0x3c,0x24,
++0x0,0x3f,0x4,0x4,0x4,0x8,0x8,0x11,0x21,0x49,0x89,0x11,0x11,0x21,0x5,0x2,0x0,0xf0,0x10,0x24,0x7e,0x4,0x4,0x14,0x8,0x0,0x20,0x10,0x10,0xc,0x4,0x0,
++0x1,0x9,0x9,0x11,0x23,0x0,0x1,0xff,0x2,0xc,0x31,0xc9,0x9,0x11,0x25,0x2,0x0,0x20,0x10,0x8,0x8,0x0,0x4,0xfe,0x80,0x60,0x1e,0x24,0x20,0x18,0x8,0x0,
++0x0,0x0,0x3f,0x0,0x11,0x9,0x3f,0x0,0x0,0x1,0xff,0x1,0x1,0x1,0x5,0x2,0x10,0x78,0x80,0x10,0x10,0x20,0xf0,0x40,0x80,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0xfe,0x12,0x34,0xc,0x32,0xc1,0x1f,0x0,0x1,0xff,0x1,0x1,0x5,0x2,0x0,0x8,0xfc,0x8,0x50,0x20,0xd8,0x6,0xe0,0x40,0x84,0xfe,0x0,0x0,0x0,0x0,
++0x4,0xff,0x8,0x12,0x3c,0x8,0x14,0x3e,0x0,0x1f,0x0,0x1,0xff,0x1,0x5,0x2,0x40,0xfe,0x20,0x48,0xf0,0x20,0x50,0xf8,0x0,0xe0,0x40,0x84,0xfe,0x0,0x0,0x0,
++0x0,0x3f,0x0,0x0,0x1,0x1,0x1,0x1,0x7,0x19,0x61,0x1,0x1,0x1,0x5,0x2,0x0,0xf0,0x20,0x40,0x80,0xc,0x30,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x0,0x0,0x11,0x9,0x5,0x3,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x0,0xf0,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x80,0x40,0x30,0xc,0x0,0x0,0x0,
++0x0,0x0,0xfc,0x5,0xa,0x10,0x13,0x1e,0x32,0xd3,0x12,0x12,0x12,0x12,0x51,0x20,0x80,0x80,0x88,0xfc,0x8,0x8,0xe8,0x28,0x28,0xe8,0x8,0x28,0x12,0x2,0xfe,0x0,
++0x8,0xfd,0x9,0x49,0x49,0x49,0x49,0x49,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x17,0x8,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xfe,0x0,
++0x8,0xfc,0x9,0x49,0x49,0x49,0x49,0x49,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x15,0x8,0x0,0x4,0xfe,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x9c,0x4,0x4,0xfc,0x4,0x0,
++0x8,0xfc,0x8,0x49,0x49,0x4b,0x4d,0x49,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x15,0x9,0x88,0x88,0x88,0x8,0x8,0xfe,0x8,0x48,0x28,0x28,0x8,0x8,0x8,0x8,0x28,0x10,
++0x8,0xfc,0x8,0x49,0x4a,0x48,0x4b,0x48,0x7c,0x4,0x5,0x1c,0xe4,0x4,0x17,0x8,0x80,0x80,0xf8,0x8,0x10,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x8,0xfd,0x8,0x48,0x48,0x48,0x48,0x4b,0x7c,0x5,0x4,0x1c,0xe7,0x4,0x14,0x8,0x0,0xfc,0x88,0x50,0x20,0x50,0x8e,0x24,0x20,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,
++0x10,0x10,0xfe,0x12,0x34,0xc,0x32,0xc1,0x1f,0x0,0x8,0xf,0x0,0x7f,0x0,0x0,0x0,0x0,0xfc,0x8,0x50,0x20,0xd8,0x6,0xe0,0x20,0x24,0xfe,0x4,0xf4,0x14,0x8,
++0x8,0xfc,0x8,0x48,0x49,0x4b,0x48,0x48,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x15,0x9,0x20,0x20,0x40,0x88,0x4,0xfe,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0xfc,0x8,0x4b,0x48,0x48,0x48,0x4b,0x7c,0x7,0x4,0x1c,0xe4,0x5,0x15,0xa,0x80,0x80,0xbc,0xc0,0x50,0x24,0xd4,0xc,0x0,0xfc,0x90,0x90,0x90,0x12,0x12,0xe,
++0x8,0xfc,0x9,0x49,0x4b,0x4d,0x49,0x49,0x7d,0x4,0x7,0x1c,0xe4,0x4,0x14,0x8,0xa0,0xa0,0x24,0x28,0x30,0x60,0xa2,0x1e,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x9,0xfc,0x8,0x4b,0x48,0x48,0x48,0x48,0x7f,0x4,0x4,0x1c,0xe4,0x4,0x15,0xa,0x4,0x88,0x50,0xfe,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0x88,0x8,0x8,
++0x0,0xfb,0x8,0x48,0x49,0x49,0x49,0x49,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x15,0x8,0x4,0xfe,0x0,0x0,0xdc,0x54,0x54,0x54,0xdc,0x54,0x54,0x54,0x54,0x54,0x54,0x0,
++0x8,0xfc,0xb,0x48,0x48,0x48,0x48,0x48,0x7c,0x4,0x4,0x1f,0xe4,0x4,0x15,0xa,0x88,0x88,0xfe,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,0x88,0xfe,0x0,0x88,0x6,0x2,
++0x8,0xfd,0x9,0x49,0x49,0x49,0x49,0x49,0x7c,0x7,0x4,0x1c,0xe5,0x6,0x14,0x8,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x70,0xa8,0x2e,0x24,0x20,0x20,
++0x8,0xfc,0x9,0x49,0x4b,0x4d,0x49,0x49,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x15,0x9,0xa0,0x90,0x4,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x10,0x14,0xfe,0x0,0x0,
++0x8,0xfc,0x9,0x4b,0x48,0x4f,0x48,0x49,0x7e,0x5,0x4,0x1c,0xe5,0x4,0x14,0xb,0x40,0x80,0x8,0xfc,0x44,0xfe,0x90,0x28,0x46,0x90,0x20,0x44,0x88,0x30,0xc0,0x0,
++0x0,0x79,0x49,0x57,0x48,0x69,0x56,0x41,0x5f,0x0,0x8,0xf,0x0,0x7f,0x0,0x0,0x40,0x7c,0x40,0xfe,0x48,0x50,0x60,0x80,0xe0,0x20,0x24,0xfe,0x4,0xf4,0x14,0x8,
++0x0,0xfe,0x14,0x8,0xfe,0x1a,0x28,0x49,0x1f,0x0,0x8,0xf,0x0,0x7f,0x0,0x0,0x80,0x88,0xfc,0x88,0x50,0x20,0xd0,0xe,0xe0,0x20,0x24,0xfe,0x4,0xf4,0x14,0x8,
++0x8,0x7e,0x8,0x7e,0x8,0xff,0x10,0x3e,0x42,0x9f,0x0,0x8,0xf,0x0,0x7f,0x0,0x40,0x44,0xfe,0x88,0x50,0x20,0x58,0x86,0x0,0xf0,0x10,0x14,0xfe,0x4,0xf4,0x8,
++0x8,0xff,0xa,0x4a,0x4a,0x4b,0x4a,0x48,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x15,0x9,0x40,0xbe,0x12,0x12,0x92,0x2a,0x44,0x0,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,
++0x8,0xfc,0x9,0x49,0x49,0x49,0x49,0x49,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x16,0x8,0x20,0x10,0xfe,0x2,0xfe,0x0,0xee,0x22,0x22,0xaa,0x66,0x66,0xaa,0x22,0xaa,0x44,
++0x8,0xfd,0x8,0x48,0x49,0x49,0x49,0x49,0x7c,0x5,0x4,0x1f,0xe4,0x5,0x16,0x8,0x4,0xfe,0x50,0x54,0xfe,0x54,0x54,0xfc,0x0,0xfc,0x0,0xfe,0xa8,0x26,0x22,0x60,
++0x8,0xfc,0x9,0x49,0x49,0x49,0x49,0x49,0x7d,0x5,0x4,0x1c,0xe5,0x6,0x14,0x8,0x20,0x44,0xfe,0x44,0x74,0x54,0xb4,0x24,0x44,0xfc,0x0,0xa0,0xa4,0x8a,0x88,0x78,
++0x13,0xfa,0x13,0x52,0x52,0x52,0x53,0x52,0x7a,0xb,0xa,0x3a,0xcb,0xa,0x2c,0x11,0xfc,0x4,0xfc,0x0,0xf8,0x10,0xfe,0x20,0x60,0xdc,0x44,0x88,0xfe,0x88,0x88,0x98,
++0x8,0xfd,0x8,0x4b,0x48,0x49,0x49,0x49,0x7d,0x5,0x4,0x1d,0xe4,0x7,0x14,0x9,0x50,0xdc,0x50,0xde,0x0,0xfc,0x24,0xfc,0x24,0xfc,0x88,0xfc,0x88,0xfe,0x88,0x4,
++0x10,0xff,0x10,0x57,0x54,0x57,0x51,0x53,0x79,0xb,0x9,0x3f,0xc9,0xb,0x2d,0x11,0x40,0xfe,0x0,0xbc,0xa4,0xbc,0x10,0xf8,0x10,0xf8,0x10,0xfe,0x48,0x30,0x8e,0x4,
++0x8,0x8,0x10,0x12,0x24,0x7c,0x8,0x10,0x20,0x7e,0x20,0x0,0xe,0x70,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x8,0x10,0x11,0x22,0x7e,0x8,0x13,0x20,0x7e,0x20,0x0,0xe,0x70,0x20,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x8,0x8,0x10,0x12,0x24,0x7d,0x8,0x10,0x20,0x7e,0x20,0x0,0xe,0x70,0x20,0x0,0x8,0x8,0x8,0x8,0x8,0xfe,0x8,0x8,0x88,0x48,0x48,0x8,0x8,0x8,0x28,0x10,
++0x8,0x8,0x10,0x12,0x25,0x7c,0x9,0x10,0x20,0x7e,0x20,0x0,0xf,0x71,0x20,0x0,0x80,0x80,0x84,0xfe,0x0,0x0,0xf8,0x8,0x10,0x20,0x40,0x80,0x2,0x2,0xfe,0x0,
++0x8,0x8,0x10,0x12,0x25,0x7c,0x8,0x11,0x20,0x7e,0x20,0x0,0xe,0x71,0x21,0x2,0x40,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0xc8,0x48,0xa8,0x88,0x8a,0xa,0xa,0x4,
++0x8,0x8,0x10,0x13,0x25,0x7d,0x9,0x11,0x21,0x7d,0x21,0x1,0xe,0x72,0x24,0x8,0x40,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x8,0x11,0x12,0x24,0x7c,0xb,0x10,0x20,0x7e,0x20,0x0,0xe,0x71,0x21,0x0,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x40,0x40,0x40,0x80,0x80,0x88,0x4,0xfc,0x4,
++0x9,0x9,0x11,0x13,0x25,0x7d,0x9,0x11,0x21,0x7f,0x21,0x1,0xf,0x71,0x21,0x0,0x20,0x20,0x20,0x20,0x24,0x2c,0xf0,0x20,0x20,0x20,0x20,0x20,0x62,0xa2,0x1e,0x0,
++0x8,0x9,0x10,0x10,0x24,0x7c,0x9,0x10,0x20,0x7e,0x20,0x0,0xe,0x70,0x20,0x0,0x8,0xfc,0x8,0x50,0x20,0x10,0xfe,0x22,0x24,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x8,0x8,0x10,0x12,0x27,0x7c,0x8,0x10,0x20,0x7e,0x20,0x0,0xe,0x70,0x20,0x0,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0xf8,0x88,
++0x10,0x11,0x21,0x25,0x49,0xff,0x11,0x21,0x41,0xfd,0x41,0x1,0x1d,0xe1,0x41,0x0,0x48,0x48,0x48,0x48,0x48,0xfe,0x48,0x48,0x48,0x48,0x48,0x78,0x0,0x0,0xfc,0x0,
++0x10,0x10,0x20,0x24,0x4f,0xf8,0x10,0x21,0x41,0xfd,0x42,0x2,0x1c,0xe4,0x48,0x13,0xa0,0x90,0x90,0x84,0xfe,0x80,0x80,0xf8,0x8,0x8,0x90,0x60,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x20,0x25,0x4a,0xf8,0x13,0x20,0x40,0xfc,0x41,0x0,0x1c,0xe0,0x43,0x0,0x80,0x80,0xf8,0x8,0x10,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x20,0x27,0x48,0xf8,0x13,0x22,0x46,0xfb,0x40,0x0,0x1c,0xe1,0x41,0x2,0x90,0x90,0x94,0xfe,0x94,0x94,0xfc,0x90,0x90,0xfe,0x92,0x92,0x9a,0x14,0x10,0x10,
++0x8,0x8,0x11,0x11,0x25,0x7d,0x9,0x10,0x21,0x7d,0x21,0x1,0xd,0x71,0x20,0x0,0x20,0x20,0x24,0x24,0x24,0x24,0xfc,0x20,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,
++0x10,0x10,0x20,0x20,0x48,0xf9,0x13,0x20,0x40,0xfd,0x41,0x1,0x1d,0xe1,0x41,0x1,0x20,0x20,0x40,0x40,0x88,0x4,0xfe,0x2,0x0,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x27,0x24,0x48,0xf9,0x13,0x24,0x43,0xfd,0x41,0x0,0x1c,0xe0,0x40,0x0,0x40,0x44,0xfe,0xa0,0xa0,0x10,0xf8,0x6,0xfc,0x0,0xf8,0x8,0x8,0x88,0x50,0x20,
++0x10,0x10,0x21,0x25,0x7f,0xf8,0x11,0x23,0x45,0xf9,0x41,0x1,0x1d,0xe1,0x41,0x1,0x80,0x88,0x7c,0x0,0xff,0x84,0xfe,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x28,0x10,
++0x11,0x11,0x23,0x24,0x40,0xf8,0x11,0x26,0x43,0xfa,0x42,0x7,0x18,0xe0,0x40,0x0,0x0,0xf8,0x10,0xa0,0x40,0xa0,0x58,0x46,0xf8,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,
++0x10,0x17,0x20,0x23,0x4a,0xfa,0x13,0x22,0x42,0xfb,0x42,0x1,0x18,0xe1,0x42,0x4,0x4,0xfe,0x40,0xf8,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0x40,0x80,0x60,0x1e,0x4,
++0x8,0x9,0x10,0x10,0x24,0x7d,0x9,0x11,0x21,0x7f,0x21,0x1,0xf,0x71,0x21,0x1,0x20,0x24,0xa8,0xb0,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x14,0x8,
++0x12,0x11,0x20,0x27,0x48,0xf8,0x13,0x22,0x42,0xfb,0x40,0x4,0x19,0xe2,0x44,0x8,0x8,0x10,0xa0,0xf8,0x48,0x48,0xf8,0x40,0x44,0xfe,0xc4,0xc4,0x54,0x48,0x40,0x40,
++0x10,0x10,0x21,0x24,0x48,0xfb,0x10,0x21,0x42,0xfc,0x40,0x1,0x1c,0xe0,0x41,0x6,0x20,0x28,0xfc,0x20,0x24,0xfe,0x88,0x46,0x7a,0x88,0x90,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x27,0x20,0x48,0xf9,0x17,0x20,0x43,0xfa,0x42,0x2,0x1b,0xe2,0x40,0x0,0x40,0x48,0xfc,0x40,0xb0,0x14,0xfe,0x8,0xc8,0x48,0x48,0x48,0xc8,0x8,0x28,0x10,
++0x10,0x10,0x20,0x23,0x48,0xf8,0x10,0x23,0x40,0xfc,0x40,0x3,0x1c,0xe0,0x40,0x0,0x50,0x50,0x54,0xde,0x50,0x50,0x54,0xde,0x50,0x50,0x54,0xde,0x50,0x50,0x50,0x50,
++0x10,0x12,0x21,0x21,0x48,0xff,0x14,0x24,0x45,0xfd,0x45,0x5,0x1d,0xe4,0x44,0x4,0x40,0x48,0x48,0x50,0x44,0xfe,0x4,0x4,0xf4,0x14,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x8,0x9,0x11,0x13,0x25,0x7d,0x9,0x11,0x20,0x7d,0x21,0x1,0xd,0x71,0x21,0x1,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x10,0x12,0x16,0xd8,0x10,0x52,0x92,0xe,
++0x10,0x13,0x20,0x2f,0x49,0xf9,0x11,0x27,0x41,0xf9,0x41,0x7,0x18,0xe0,0x47,0x0,0x18,0xe0,0x44,0xfe,0x50,0x50,0x50,0xfc,0x50,0x50,0x54,0xfe,0x40,0x48,0xfc,0x0,
++0x10,0x17,0x20,0x22,0x41,0xf7,0x14,0x28,0x41,0xfc,0x41,0x0,0x1c,0xe0,0x41,0x6,0x1c,0xe0,0x0,0x48,0x50,0xfe,0x2,0x4,0xf0,0x10,0x10,0xa0,0x40,0xa0,0x1e,0x4,
++0x11,0x11,0x21,0x25,0x4a,0xfb,0x14,0x21,0x42,0xfc,0x41,0x1,0x1d,0xe1,0x41,0x1,0x10,0x10,0xd0,0x58,0x56,0x52,0x90,0x50,0x3e,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x12,0x21,0x20,0x47,0xf8,0x1f,0x20,0x41,0xfb,0x45,0x1,0x1d,0xe1,0x41,0x0,0x40,0x48,0x50,0x40,0xfc,0x40,0xfe,0xa0,0x10,0xfe,0x14,0x10,0x50,0x24,0x4,0xfc,
++0x10,0x10,0x24,0x27,0x4c,0xf3,0x12,0x22,0x43,0xfe,0x43,0x2,0x1e,0xe2,0x43,0x2,0x80,0x40,0x40,0xfe,0x2,0xf8,0x8,0x8,0xf8,0x0,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x11,0x11,0x22,0x24,0x4a,0xf9,0x11,0x20,0x47,0xfc,0x44,0x7,0x1c,0xe4,0x47,0x4,0x24,0x24,0x48,0x90,0x48,0x24,0x24,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x11,0x11,0x2f,0x21,0x49,0xf8,0x13,0x22,0x42,0xfb,0x40,0x7,0x18,0xe0,0x40,0x0,0x10,0x14,0xfe,0x10,0xf0,0x40,0xf8,0x48,0x48,0xf8,0x40,0xfe,0x40,0x40,0x40,0x40,
++0x11,0x11,0x21,0x21,0x4f,0xf9,0x13,0x23,0x45,0xfd,0x49,0x1,0x1d,0xe1,0x41,0x1,0x0,0x4,0x3e,0x24,0xe4,0x24,0x3c,0xa4,0x64,0x24,0x3c,0x24,0x24,0x24,0x3c,0x24,
++0x13,0x12,0x22,0x23,0x4a,0xfa,0x13,0x20,0x47,0xf8,0x2,0x2,0x1a,0xe3,0x44,0x18,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xfe,0x40,0x48,0x7c,0x40,0x40,0xc6,0x3c,
++0x10,0x10,0x27,0x24,0x4c,0xfc,0x17,0x24,0x44,0xff,0x44,0x4,0x1c,0xe7,0x44,0x1,0x10,0x90,0xd0,0x90,0xb8,0xb6,0xd2,0x90,0x94,0x94,0x98,0x88,0x90,0xa0,0x40,0x80,
++0x10,0x10,0x23,0x22,0x4b,0xf8,0x17,0x20,0x43,0xfa,0x42,0x2,0x1a,0xe0,0x41,0x6,0x40,0x48,0xfc,0x48,0xf8,0x40,0xfe,0x0,0xf8,0x8,0x48,0x48,0x88,0xb0,0xc,0x4,
++0x10,0x10,0x23,0x22,0x4a,0xfb,0x12,0x22,0x43,0xf8,0x41,0x5,0x1d,0xe5,0x48,0x0,0x0,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x80,0x40,0x24,0x2,0xa,0xf8,0x0,
++0x12,0x13,0x22,0x25,0x4d,0xf5,0x15,0x25,0x45,0xfd,0x44,0x4,0x1c,0xe4,0x44,0x7,0x4,0xfe,0x20,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0xa0,0xa0,0x40,0x60,0x98,0x6,
++0x11,0x11,0x21,0x22,0x4b,0xf6,0x1a,0x22,0x43,0xfa,0x43,0x2,0x1a,0xe2,0x42,0x3,0x8,0x7c,0x8,0x8,0xfe,0x40,0x48,0xfc,0x20,0x24,0xfe,0x20,0x20,0x50,0x8e,0x4,
++0x10,0x14,0x22,0x22,0x48,0xf8,0x16,0x22,0x42,0xfa,0x42,0x2,0x1a,0xe5,0x48,0x0,0x20,0x48,0xfc,0x88,0x88,0x88,0xf8,0x80,0xf8,0x88,0x88,0x88,0xf8,0x0,0x86,0x7c,
++0x10,0x13,0x22,0x27,0x4a,0xfb,0x12,0x22,0x43,0xfd,0x41,0x1,0x1d,0xe1,0x41,0x1,0x8,0xfc,0x8,0xf8,0x40,0xfc,0x20,0x92,0xe,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,
++0x10,0x13,0x20,0x22,0x49,0xf8,0x17,0x20,0x41,0xfd,0x41,0x1,0x1d,0xe1,0x41,0x1,0x8,0xfc,0x90,0x94,0x98,0x90,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x27,0x20,0x4b,0xfa,0x13,0x22,0x43,0xfa,0x43,0x2,0x1f,0xe1,0x42,0x4,0x40,0x48,0xfc,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x10,0xc,0x4,
++0x10,0x17,0x24,0x25,0x4c,0xf7,0x15,0x25,0x45,0xfc,0x47,0x4,0x1c,0xe4,0x48,0x0,0x4,0xfe,0x0,0xf8,0x0,0xfe,0x48,0x30,0x8e,0x10,0xfe,0x90,0x50,0x10,0x50,0x20,
++0x10,0x10,0x27,0x20,0x49,0xf9,0x11,0x20,0x43,0xfa,0x42,0x2,0x1a,0xe2,0x42,0x2,0x40,0x24,0xfe,0x0,0xf8,0x8,0xf8,0x4,0xfe,0x4,0xf4,0x94,0x94,0xf4,0x14,0x8,
++0x10,0x10,0x2f,0x21,0x4a,0xfa,0x12,0x23,0x40,0xff,0x44,0x4,0x1d,0xe4,0x44,0x4,0x80,0x44,0xfe,0x10,0xa8,0x48,0xa8,0xf8,0x44,0xfe,0x44,0x94,0xf4,0x4,0x14,0x8,
++0x10,0x12,0x21,0x20,0x4b,0xf8,0x11,0x22,0x44,0xfb,0x42,0x2,0x1a,0xe2,0x4f,0x0,0x0,0x8,0x10,0x0,0xfc,0x0,0x10,0x8,0x4,0xf8,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x11,0x10,0x2f,0x20,0x4b,0xf8,0x17,0x20,0x40,0xfb,0x40,0x1,0x1a,0xe4,0x48,0x0,0x10,0xa4,0xfe,0xa0,0xf8,0xa8,0xfe,0xa8,0xa8,0xf8,0xa0,0xb0,0xa8,0xae,0xa4,0xa0,
++0x10,0x10,0x27,0x24,0x48,0xf9,0x11,0x21,0x41,0xf9,0x41,0x7,0x18,0xe1,0x42,0x4,0x40,0x20,0xfe,0x2,0x34,0xc0,0x8,0xfc,0x10,0x10,0x14,0xfe,0x0,0x10,0xc,0x4,
++0x10,0x17,0x20,0x28,0x4f,0xf4,0x14,0x27,0x40,0xfb,0x40,0xf,0x19,0xe2,0x45,0x0,0x8,0xfc,0xa0,0xa4,0xfe,0xa4,0xa4,0xfc,0x0,0xf8,0x0,0xfe,0x50,0x4c,0x44,0x80,
++0x13,0x12,0x23,0x22,0x4b,0xf8,0x17,0x24,0x47,0xf8,0x43,0x2,0x19,0xe0,0x43,0xc,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfc,0xa4,0xfc,0x0,0xf8,0x8,0xb0,0x40,0xb0,0xe,
++0x10,0x17,0x24,0x2f,0x54,0xf7,0x14,0x21,0x43,0xf8,0x40,0x7,0x19,0xe2,0x45,0x0,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x84,0x10,0xe0,0x40,0x88,0xfc,0x50,0x4c,0x44,0x80,
++0x10,0x17,0x24,0x22,0x4a,0xf4,0x10,0x20,0x41,0xfa,0x45,0x0,0x19,0xe0,0x40,0x7,0x4,0xbe,0xa4,0x94,0x94,0xa4,0x50,0x88,0x24,0x42,0x90,0x60,0x88,0x30,0xc0,0x0,
++0x12,0x12,0x24,0x22,0x4a,0xf7,0x14,0x27,0x44,0xf7,0x40,0xf,0x18,0xe1,0x46,0x0,0x48,0x48,0x90,0x48,0x48,0xfc,0x44,0xfc,0x44,0xfc,0x40,0xfe,0xe0,0x50,0x4e,0x40,
++0x12,0x12,0x22,0x2f,0x42,0xfa,0x17,0x20,0x47,0xfd,0x45,0x5,0x1d,0xe7,0x40,0x0,0x4,0xfe,0x10,0xa4,0x7e,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x28,0x26,0xc2,
++0x10,0x10,0x2f,0x20,0x4a,0xf9,0x13,0x22,0x43,0xfa,0x43,0x1,0x1a,0xe4,0x41,0x0,0x40,0x44,0xfe,0xa0,0xa8,0x10,0xfe,0xc,0xf8,0x8,0xf8,0x50,0x4c,0x44,0x40,0x80,
++0x12,0x11,0x27,0x24,0x4d,0xfc,0x17,0x24,0x43,0xfa,0x42,0x3,0x1a,0xe2,0x43,0x2,0x8,0x10,0xfc,0x44,0x54,0x44,0xfc,0x4,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x1f,0x20,0x27,0x4c,0xff,0x14,0x27,0x40,0xff,0x44,0x7,0x1c,0xe7,0x40,0xf,0x4,0xfe,0x0,0xfc,0x44,0xfc,0x44,0xfc,0x0,0xfe,0x44,0xfc,0x44,0xfc,0x0,0xfe,
++0x10,0x11,0x25,0x23,0x4a,0xf9,0x10,0x2e,0x42,0xfa,0x42,0x2,0x1a,0xe5,0x48,0x0,0x24,0xfe,0x24,0xfc,0x20,0xfe,0x0,0xf8,0x88,0xf8,0x80,0xf8,0x88,0xf8,0x86,0x7c,
++0x10,0x11,0x21,0x25,0x49,0xf8,0x17,0x24,0x44,0xff,0x40,0x7,0x18,0xe1,0x46,0x0,0x10,0xf8,0x10,0x10,0xf0,0x0,0xbc,0xa4,0xa4,0xbc,0x40,0xfe,0xe0,0x50,0x4e,0x40,
++0x10,0x13,0x22,0x26,0x4b,0xf8,0x17,0x20,0x43,0xfa,0x43,0x1,0x1b,0xe5,0x49,0x1,0x8,0xfc,0xa8,0xa8,0xf8,0x4,0xfe,0x0,0xf8,0x8,0xf8,0x44,0x48,0x30,0x8e,0x4,
++0x11,0x15,0x27,0x29,0x47,0xfb,0x15,0x29,0x43,0xfa,0x42,0x2,0x1a,0xe0,0x41,0x6,0x8,0x28,0xbc,0x48,0xbe,0x18,0x2a,0x4e,0xf8,0x8,0x48,0x48,0x48,0xb0,0xc,0x4,
++0x0,0x2,0x2,0x4,0x4,0x8,0x10,0x3f,0x0,0x1,0x2,0x4,0x8,0x10,0x3f,0x0,0x0,0x0,0x0,0x0,0x10,0x10,0x20,0xc0,0x80,0x0,0x0,0x0,0x20,0x10,0xf8,0x8,
++0x11,0x25,0x79,0x11,0x29,0x7d,0x1,0xff,0x0,0x7f,0x49,0x7f,0x49,0x7f,0x40,0x3,0x10,0x24,0x78,0x10,0x28,0x7c,0x10,0xfe,0x80,0x88,0x48,0x50,0x50,0x22,0xd2,0xe,
++0x0,0x0,0x4,0x4,0x4,0x9,0x9,0x12,0x9,0x9,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x90,0x90,0x90,0x20,0x20,0x40,0x20,0x20,0x90,0x90,0x90,0x0,0x0,0x0,
++0x11,0x11,0x22,0x44,0x22,0x11,0x11,0x0,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x20,0x10,0x10,0x20,0x40,0x20,0x10,0x10,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x21,0x42,0x21,0x10,0x1f,0x10,0x1f,0x0,0x3f,0x21,0x21,0x3f,0x20,0x20,0x1f,0x84,0x8,0x10,0x8,0x88,0xf0,0x10,0xf0,0x8,0xfc,0x8,0x8,0xf8,0xa,0x2,0xfe,
++0x0,0x8,0x7d,0x10,0x10,0x10,0x7c,0x10,0x10,0x10,0x10,0x1c,0x70,0x21,0x0,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x9,0x7d,0x11,0x11,0x11,0x7d,0x11,0x11,0x11,0x11,0x1e,0x72,0x24,0x8,0x10,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x0,0x8,0x7c,0x13,0x10,0x10,0x7d,0x10,0x10,0x17,0x10,0x1c,0x70,0x20,0x0,0x0,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x40,0x44,0xfe,0x44,0x44,0x44,0x54,0x48,0x40,
++0x0,0x8,0x7c,0x10,0x11,0x12,0x7c,0x13,0x10,0x10,0x10,0x1c,0x71,0x21,0x2,0x4,0x10,0x90,0x90,0x90,0x8,0x4,0x2,0xf8,0x88,0x88,0x88,0x88,0x8,0x8,0x50,0x20,
++0x0,0x8,0x7c,0x17,0x10,0x11,0x7d,0x11,0x10,0x10,0x10,0x1c,0x71,0x22,0x4,0x8,0x80,0x40,0x24,0xfe,0x8,0x8,0x8,0x10,0x90,0xa0,0x40,0xa0,0x10,0x8,0xe,0x4,
++0x0,0xb,0x7c,0x10,0x10,0x10,0x7c,0x13,0x10,0x10,0x10,0x10,0x1c,0x70,0x27,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x50,0x48,0x48,0x40,0xfe,0x0,
++0x0,0x8,0x7f,0x10,0x10,0x11,0x11,0x7d,0x11,0x11,0x11,0x1d,0x70,0x20,0x0,0x0,0x0,0x4,0xfe,0x8,0x8,0xe8,0x28,0x28,0x28,0x28,0xe8,0x8,0x8,0x8,0x28,0x10,
++0x0,0x8,0x7c,0x10,0x17,0x10,0x7c,0x10,0x11,0x11,0x11,0x1e,0x72,0x24,0x8,0x10,0x80,0xa0,0x98,0x88,0xfe,0xa0,0xa0,0xa4,0x24,0x28,0x30,0x20,0x62,0xa2,0x1e,0x0,
++0x0,0x8,0x7c,0x10,0x10,0x10,0x7c,0x10,0x11,0x11,0x11,0x1d,0x71,0x21,0x1,0x1,0x40,0x40,0x44,0x7e,0x40,0x40,0x40,0x44,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x8,0xfc,0x21,0x21,0x23,0xfd,0x21,0x21,0x21,0x25,0x39,0xe1,0x41,0x1,0x1,0xa0,0xa8,0xa4,0x24,0x20,0x3e,0xe0,0x20,0x20,0x20,0x10,0x10,0x12,0xa,0xa,0x4,
++0x0,0x8,0x7c,0x11,0x11,0x11,0x7d,0x11,0x11,0x11,0x11,0x11,0x1d,0x71,0x21,0x1,0x20,0x20,0x44,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x9,0x7d,0x11,0x11,0x11,0x7d,0x11,0x11,0x11,0x11,0x11,0x1d,0x71,0x21,0x1,0x4,0xfe,0x4,0x4,0xfc,0x24,0x20,0x24,0xfe,0x20,0x20,0x10,0x10,0x4a,0x8a,0x6,
++0x2,0x12,0xfa,0x2f,0x22,0x22,0xfa,0x22,0x22,0x22,0x22,0x3a,0xe4,0x4a,0x11,0x0,0x0,0x0,0x4,0xbe,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xbc,0xa4,0x0,0x0,
++0x0,0xb,0x7d,0x11,0x11,0x11,0x7d,0x11,0x11,0x11,0x11,0x1d,0x73,0x20,0x0,0x0,0x4,0xfe,0x8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0xe,0xf8,0x8,0x8,0x8,
++0x1,0x11,0xf9,0x21,0x27,0x21,0xf9,0x21,0x21,0x21,0x2f,0x20,0x39,0xe2,0x44,0x8,0x10,0x10,0x10,0x10,0xfc,0x10,0x10,0x10,0x10,0x14,0xfe,0x0,0x10,0x8,0x4,0x4,
++0x0,0xb,0x7c,0x10,0x11,0x11,0x7d,0x11,0x11,0x11,0x11,0x1d,0x70,0x20,0x0,0x3,0x4,0xfe,0x20,0x40,0xfc,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x48,0x86,0x2,
++0x0,0x17,0xf8,0x22,0x22,0x24,0xf7,0x21,0x21,0x22,0x2a,0x34,0xe4,0x4a,0x1,0x0,0x0,0xc0,0xbe,0xa2,0xa4,0xa4,0xe8,0xa4,0xa4,0xa2,0xa2,0xa2,0xb4,0xa8,0x20,0x20,
++0x1,0x11,0xfa,0x24,0x29,0x21,0xfa,0x26,0x2a,0x22,0x22,0x3a,0xe2,0x42,0x2,0x2,0x0,0x8,0x7c,0x0,0x0,0x4,0xfe,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x28,0x10,
++0x1,0x11,0xf9,0x25,0x23,0x21,0xf9,0x21,0x23,0x2d,0x21,0x39,0xe2,0x42,0x4,0x18,0x20,0x20,0x24,0x2c,0x30,0x20,0x20,0x30,0x2c,0x24,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x1,0x11,0xf9,0x22,0x25,0x20,0xf8,0x20,0x23,0x2c,0x23,0x3a,0xe2,0x42,0x3,0x2,0x0,0x0,0xfc,0x8,0x10,0xa0,0x40,0xa0,0x18,0x6,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0x1f,0x21,0x49,0x11,0x23,0x0,0x7f,0x1,0x1,0x3f,0x1,0x1,0xff,0x0,0x0,0x8,0xfc,0x8,0x20,0x18,0x8,0x0,0xfc,0x0,0x10,0xf8,0x40,0x24,0xfe,0x0,
++0x0,0x13,0xfa,0x24,0x23,0x20,0xf8,0x21,0x23,0x20,0x28,0x37,0xe0,0x40,0x0,0x0,0x0,0xfe,0x42,0x44,0xfc,0x80,0xa0,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x14,0xfa,0x21,0x20,0x26,0xfa,0x22,0x22,0x22,0x22,0x3a,0xe2,0x45,0x8,0x0,0x20,0x20,0x24,0xfe,0x40,0x50,0x90,0xfc,0x10,0x14,0xfe,0x10,0x10,0x16,0xfc,0x0,
++0x1,0x9,0x7f,0x11,0x11,0x11,0x7d,0x11,0x11,0x11,0x11,0x17,0x1c,0x71,0x22,0x4,0x10,0x10,0xfc,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x14,0xfe,0x0,0x10,0xc,0x4,
++0x1,0x11,0xff,0x21,0x20,0x23,0xfa,0x22,0x22,0x22,0x27,0x38,0xe0,0x41,0x2,0xc,0x10,0x14,0xfe,0x10,0x40,0xf8,0x48,0x48,0x48,0x48,0xfe,0x40,0xa0,0x10,0xe,0x4,
++0x0,0x10,0xfb,0x20,0x20,0x21,0xfb,0x20,0x23,0x22,0x22,0x3a,0xe3,0x42,0x0,0x0,0x40,0x48,0xfc,0x40,0xa0,0x14,0xfe,0x8,0xc8,0x48,0x48,0x48,0xc8,0x8,0x28,0x10,
++0x0,0x10,0xf8,0x23,0x22,0x22,0xfb,0x22,0x22,0x22,0x22,0x3a,0xe2,0x44,0x9,0x2,0x48,0x7c,0x40,0xfe,0x42,0x78,0xc4,0x7c,0x0,0xf0,0x90,0x90,0x90,0x92,0x12,0xe,
++0x0,0xb,0x7e,0x12,0x13,0x12,0x7e,0x13,0x12,0x12,0x13,0x1e,0x72,0x22,0x3,0x2,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x20,0x24,0xa8,0x30,0x20,0xa2,0x22,0x1e,
++0x0,0x8,0x7d,0x11,0x12,0x10,0x7c,0x11,0x12,0x11,0x11,0x1e,0x70,0x21,0x2,0xc,0x40,0x40,0x48,0x50,0x40,0xa0,0x98,0x48,0x44,0x48,0x50,0xa0,0xa0,0x10,0xe,0x4,
++0x0,0x14,0xff,0x24,0x28,0x23,0xf8,0x20,0x27,0x20,0x21,0x39,0xe2,0x44,0x1,0x0,0x80,0x40,0xfe,0x2,0x14,0xf8,0x0,0x4,0xfe,0x40,0x50,0x48,0x44,0x44,0x40,0x80,
++0x0,0x14,0xff,0x24,0x2a,0x23,0xfa,0x24,0x24,0x2a,0x21,0x39,0xe2,0x44,0x8,0x10,0x80,0x40,0xfe,0x2,0x4,0xbc,0xa4,0xa4,0xa4,0xa4,0x34,0x28,0x22,0x22,0x1e,0x0,
++0x0,0x17,0xfc,0x28,0x21,0x22,0xf8,0x20,0x2f,0x20,0x20,0x39,0xe2,0x44,0x8,0x0,0x0,0xfe,0x2,0xa4,0x18,0x8,0x40,0x44,0xfe,0x40,0xe0,0x50,0x48,0x4e,0x44,0x40,
++0x0,0x13,0xfa,0x22,0x23,0x22,0xfa,0x23,0x22,0x22,0x23,0x3d,0xe5,0x49,0x11,0x1,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0xfe,0x20,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x7,0xfc,0x25,0x24,0x25,0xf8,0x20,0x23,0x22,0x23,0x3a,0xe3,0x42,0x3,0x2,0x4,0xfe,0x4,0xf4,0x4,0xf4,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,
++0x0,0x10,0xf9,0x22,0x25,0x28,0xff,0x24,0x24,0x27,0x24,0x3c,0xe7,0x44,0x4,0x5,0x40,0xc0,0x20,0x10,0xe8,0x6,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x88,0xa8,0x90,
++0x0,0x17,0xfa,0x21,0x20,0x23,0xf8,0x27,0x21,0x21,0x22,0x3a,0xe4,0x48,0x1,0x6,0x1c,0xe0,0x48,0x50,0x20,0xfc,0x80,0xfe,0x0,0xf8,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x0,0x17,0xfc,0x24,0x24,0x27,0xfc,0x24,0x27,0x24,0x24,0x3f,0xe4,0x44,0x4,0x4,0x4,0xbe,0x84,0x84,0x84,0xbc,0x4,0x0,0xbc,0x4,0x24,0xa8,0x10,0x28,0x46,0x84,
++0x1,0x11,0xfa,0x21,0x21,0x20,0xf8,0x23,0x22,0x22,0x22,0x3a,0xe3,0x42,0x3,0x2,0x24,0x24,0x48,0x24,0x24,0x40,0x84,0xfe,0x4,0x94,0x64,0x94,0xc,0x4,0xfc,0x4,
++0x0,0x17,0xfa,0x21,0x27,0x24,0xf8,0x27,0x21,0x21,0x22,0x3a,0xe4,0x48,0x1,0x6,0x38,0xc0,0x48,0x50,0xfe,0x82,0x84,0xfe,0x0,0xf0,0x10,0xa0,0x40,0xa0,0x1e,0x4,
++0x0,0x10,0xfb,0x22,0x22,0x22,0xfb,0x22,0x22,0x22,0x23,0x3d,0xe5,0x49,0x11,0x1,0x40,0x24,0xfe,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x11,0xff,0x21,0x21,0x20,0xff,0x24,0x27,0x20,0x27,0x38,0xe7,0x40,0xf,0x0,0x10,0x14,0xfe,0x10,0xf0,0x44,0xfe,0x44,0xfc,0x40,0xfc,0x40,0xfc,0x40,0xfe,0x0,
++0x1,0x11,0xff,0x21,0x21,0x2f,0xf8,0x23,0x22,0x23,0x22,0x3b,0xe0,0x41,0x2,0x4,0x10,0x10,0xfc,0x10,0x14,0xfe,0x40,0xf8,0x48,0xf8,0x48,0xf8,0x0,0x10,0xc,0x4,
++0x0,0x17,0xfd,0x25,0x26,0x26,0xfb,0x24,0x20,0x2f,0x20,0x39,0xe0,0x40,0x1,0x6,0x0,0xbc,0xac,0xac,0xb4,0xb4,0x18,0xa4,0x40,0xfe,0x90,0x10,0xa0,0x40,0xb0,0xc,
++0x0,0x14,0xfc,0x27,0x21,0x21,0xfb,0x22,0x27,0x2a,0x23,0x3a,0xe2,0x43,0x2,0x2,0x40,0x44,0x44,0xfc,0x44,0x20,0xfe,0x20,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,0x0,
++0x0,0x10,0xfb,0x22,0x22,0x22,0xfa,0x23,0x22,0x22,0x23,0x38,0xe5,0x45,0x9,0x0,0x40,0x84,0xfe,0x44,0x74,0x94,0xd4,0x24,0x44,0x84,0xfc,0x40,0x24,0x2a,0xa,0xf8,
++0x4,0x2,0xf2,0x2f,0x24,0x24,0xf7,0x25,0x25,0x25,0x35,0xe9,0x49,0x15,0x22,0x1,0x40,0x40,0x44,0xfe,0x80,0x0,0x7e,0x12,0x54,0x50,0x5e,0x50,0x50,0xb0,0x90,0xe,
++0x0,0x17,0xf9,0x20,0x2f,0x20,0xfb,0x22,0x23,0x22,0x23,0x38,0xef,0x40,0x0,0x0,0x40,0xfc,0x10,0xa0,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0x40,0x40,
++0x0,0x14,0xfa,0x20,0x2f,0x21,0xf8,0x27,0x20,0x23,0x20,0x3f,0xe0,0x40,0x3,0xc,0xa0,0xa4,0xa8,0xa0,0xfe,0x10,0xa0,0xfc,0x40,0xf8,0x40,0xfe,0x40,0xa0,0x18,0x6,
++0x2,0x13,0xfa,0x27,0x28,0x25,0xfa,0x24,0x2a,0x21,0x27,0x38,0xe1,0x42,0xc,0x0,0x0,0xbc,0x4,0xa8,0x90,0x28,0x46,0x40,0x48,0x50,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x0,0x10,0xff,0x24,0x24,0x27,0xfc,0x24,0x27,0x24,0x27,0x3c,0xe7,0x48,0x13,0x0,0x78,0x40,0xfe,0x82,0xf4,0x88,0xf8,0x0,0xfe,0xc0,0x68,0xb0,0x68,0xa6,0x24,0x40,
++0x0,0xf,0xf8,0x28,0x28,0x2f,0xf2,0x22,0x2b,0x2a,0x2a,0x3a,0xcb,0x5e,0x0,0x0,0x20,0xa0,0xbe,0xc4,0xa4,0xa8,0x10,0x28,0xc4,0x82,0x7c,0x44,0xc4,0x44,0x7c,0x44,
++0x3e,0x23,0x3e,0x20,0x3f,0x22,0x62,0xbe,0x0,0x7f,0x1,0x3f,0x1,0x1,0xff,0x0,0x20,0xfc,0x88,0x50,0xfe,0x20,0xf8,0x20,0x20,0xfc,0x0,0xf8,0x40,0x24,0xfe,0x0,
++0x1,0x5,0xf7,0x29,0x2f,0x23,0xf5,0x29,0x23,0x22,0x22,0x3a,0xe2,0x40,0x1,0x6,0x8,0x28,0xbc,0x48,0xbe,0x18,0xaa,0x4e,0xf8,0x8,0x48,0x48,0x48,0xb0,0xc,0x4,
++0xf,0x78,0x4b,0x68,0x4b,0x6a,0x4b,0x48,0xff,0x80,0x3f,0x1,0x1f,0x1,0x1,0xff,0xe4,0x3e,0xa4,0x2c,0xa4,0xac,0xa4,0x24,0xfe,0x2,0xf8,0x0,0xf0,0x40,0x24,0xfe,
++0x0,0x3e,0x22,0x3e,0x22,0x3e,0x0,0xff,0x9,0x28,0x2f,0x28,0x38,0x48,0x84,0x3,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x24,0x24,0x34,0x28,0x20,0x26,0xfc,
++0x20,0x23,0x22,0xfa,0x23,0x22,0xfa,0x23,0x20,0xfb,0x2a,0x2a,0x3a,0x22,0x2f,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xf8,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x20,0x20,0x27,0xfa,0x21,0x21,0xf8,0x23,0x22,0xfa,0x2b,0x2a,0x3a,0x22,0x23,0x22,0x8,0x3c,0xc0,0x48,0x48,0x50,0x84,0x3e,0x4,0x4,0xbc,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x30,0x38,0x54,0x50,0x90,0x11,0x11,0x12,0x14,0x18,0x0,0x4,0xfe,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x10,0x12,0x12,0xe,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x30,0x38,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x80,0x80,0x80,0x84,0xfe,0x4,0x4,0x84,0x44,0x44,0x4,0x4,0x4,0x4,0x28,0x10,
++0x10,0x10,0x13,0x10,0xfc,0x10,0x30,0x3b,0x56,0x52,0x92,0x12,0x12,0x12,0x11,0x10,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x12,0x31,0x39,0x54,0x50,0x90,0x10,0x11,0x12,0x14,0x18,0x0,0x8,0xfc,0x8,0x88,0x50,0x50,0x10,0xa0,0xa0,0x40,0xa0,0x20,0x18,0xe,0x4,
++0x10,0x10,0x13,0x10,0xfd,0x11,0x31,0x39,0x55,0x51,0x90,0x10,0x17,0x10,0x10,0x10,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x33,0x3a,0x56,0x52,0x92,0x12,0x14,0x14,0x19,0x12,0x0,0x4,0xfe,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x10,0x12,0x12,0x12,0xfe,0x12,0x33,0x3a,0x56,0x52,0x92,0x12,0x12,0x13,0x12,0x10,0x20,0x20,0x20,0x20,0x24,0x2c,0xb0,0x20,0x20,0x20,0x20,0x22,0xa2,0x22,0x1e,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x11,0x32,0x3a,0x54,0x50,0x90,0x10,0x10,0x10,0x13,0x1c,0x40,0x40,0x40,0x40,0x50,0x48,0x46,0x42,0x48,0x48,0x50,0x50,0x20,0xc0,0x0,0x0,
++0x1,0x1,0x1,0xff,0x3,0x5,0x9,0x31,0xdf,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0x0,0x4,0xfe,0x80,0x40,0x30,0xe,0xf4,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x10,0x10,0x10,0x10,0xff,0x12,0x32,0x3a,0x56,0x52,0x92,0x13,0x12,0x12,0x12,0x12,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xa4,0x9c,0xc,0x4,0x4,0x14,0x8,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x31,0x39,0x55,0x51,0x90,0x10,0x10,0x11,0x12,0x14,0x8,0xfc,0x8,0x28,0x28,0x28,0x28,0x28,0x48,0x48,0x60,0xa0,0xa2,0x22,0x1e,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x11,0x32,0x38,0x57,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x80,0x80,0x88,0xfc,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x11,0x11,0x11,0x11,0xfd,0x11,0x31,0x3b,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x0,0x8,0x18,0x20,0x40,0x80,0x4,0xfe,0x40,0x20,0x20,0x10,0x10,0x4e,0x84,0x0,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x31,0x39,0x55,0x52,0x92,0x14,0x14,0x18,0x11,0x10,0x0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xa8,0xa8,0x48,0x44,0x84,0x2,0x0,
++0x2,0x4,0x1f,0x10,0x12,0x11,0x10,0x1f,0x1,0x1,0x7f,0x3,0x5,0x19,0x61,0x1,0x0,0x10,0xf8,0x10,0x10,0x60,0x4,0xfe,0x4,0x4,0xf4,0x94,0x48,0x30,0xe,0x0,
++0x10,0x10,0x10,0x10,0xff,0x10,0x30,0x38,0x54,0x50,0x90,0x10,0x11,0x11,0x12,0x14,0x80,0x40,0x40,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0x8,0x8,0x50,0x20,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x32,0x3a,0x57,0x52,0x92,0x12,0x12,0x12,0x11,0x10,0x0,0x8,0xfc,0x48,0x48,0x48,0x48,0x48,0xf8,0x8,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x11,0x10,0x10,0xfc,0x10,0x33,0x38,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x0,0xfc,0x8,0x90,0x60,0x20,0xfe,0x22,0x24,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x1,0x1,0x7f,0x5,0x9,0x11,0x20,0xdf,0x0,0x0,0x7f,0x1,0x9,0x11,0x25,0x2,0x0,0x8,0xfc,0x40,0x30,0xe,0x24,0xf0,0x0,0x8,0xfc,0x0,0x20,0x18,0x8,0x0,
++0x11,0x11,0x11,0x17,0xfd,0x10,0x33,0x38,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x8,0xfc,0x88,0x88,0x88,0x88,0xa8,0x90,0x80,0x80,0x80,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x31,0x39,0x55,0x53,0x95,0x19,0x11,0x11,0x11,0x11,0x0,0x4,0xfe,0x80,0x80,0x80,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x10,0xff,0x10,0x30,0x38,0x54,0x50,0x91,0x11,0x12,0x12,0x14,0x18,0x80,0xa0,0x90,0x94,0xfe,0xa0,0xa0,0xa4,0xa4,0xa8,0x28,0x30,0x62,0xa2,0x1e,0x0,
++0x10,0x13,0x12,0x12,0xfe,0x12,0x32,0x3b,0x56,0x52,0x92,0x12,0x13,0x12,0x13,0x10,0x8,0xfc,0x0,0x40,0x40,0x78,0x88,0x10,0x20,0x20,0x50,0x8c,0x4,0x0,0xfe,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x12,0x31,0x38,0x57,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x0,0x8,0xfc,0x40,0x40,0x48,0x50,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x10,0x10,0xfc,0x13,0x32,0x3a,0x56,0x53,0x92,0x12,0x12,0x14,0x14,0x18,0x40,0x44,0x7e,0x40,0x44,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x10,0x10,0x10,0x10,0x0,0x4,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x30,0x3b,0x54,0x50,0x91,0x10,0x10,0x10,0x10,0x10,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0xfe,0x80,0x88,0xfc,0x8,0x8,0x88,0x50,0x20,
++0x10,0x10,0x10,0x10,0xfd,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x32,0x3a,0x57,0x52,0x91,0x11,0x12,0x12,0x14,0x10,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x10,0x10,0x8,0x4,0x4,0x0,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x33,0x3a,0x56,0x52,0x92,0x12,0x14,0x14,0x18,0x10,0x8,0x1c,0xe0,0x0,0x0,0x4,0xfe,0x20,0x60,0x20,0x30,0x2c,0x24,0x20,0x20,0x20,
++0x10,0x10,0x13,0x12,0xfe,0x13,0x32,0x3a,0x56,0x52,0x92,0x12,0x14,0x14,0x18,0x10,0x8,0x1c,0xe0,0x0,0x8,0xfc,0x0,0xf8,0x88,0x88,0xa8,0x90,0x82,0x82,0x7e,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x34,0x38,0x54,0x53,0x90,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0xa0,0xa0,0x10,0x8e,0x44,0x40,0x0,0xf8,0x8,0x10,0x10,0xa0,0x40,0x20,
++0x10,0x10,0x10,0x11,0xfd,0x12,0x35,0x39,0x55,0x51,0x91,0x11,0x11,0x10,0x10,0x10,0x80,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0xe4,0x24,0x4,0x28,0x10,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x33,0x3a,0x56,0x52,0x92,0x12,0x12,0x13,0x12,0x10,0x8,0x1c,0xe0,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x10,0x52,0x8a,0x26,0x12,0x0,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x32,0x3b,0x54,0x50,0x90,0x11,0x12,0x14,0x10,0x10,0x8,0x1c,0xe0,0x0,0x20,0x20,0x24,0xfe,0x20,0x20,0xa8,0x24,0x22,0x22,0xa0,0x40,
++0x10,0x10,0x10,0x13,0xfe,0x14,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x10,0x10,0x40,0x20,0x20,0xfe,0x2,0x4,0x0,0x10,0x30,0x40,0x80,0x0,0x4,0x4,0xfc,0x0,
++0x10,0x13,0x12,0x11,0xfc,0x10,0x30,0x3b,0x54,0x50,0x93,0x10,0x10,0x10,0x17,0x10,0x0,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,0x44,0x50,0xf8,0x40,0x40,0x48,0xfc,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x37,0x38,0x55,0x52,0x94,0x18,0x10,0x10,0x10,0x10,0x40,0x40,0x48,0xf8,0x50,0x64,0xfe,0x80,0xfc,0x40,0x88,0xfc,0x8,0x8,0x28,0x10,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x37,0x38,0x54,0x51,0x92,0x14,0x18,0x10,0x10,0x10,0x40,0x40,0x44,0xf8,0x50,0x64,0xfe,0x40,0x88,0x98,0xa0,0xc0,0x84,0x84,0x7c,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x10,0x32,0x3a,0x55,0x50,0x90,0x10,0x10,0x10,0x17,0x10,0x0,0x8,0xfc,0x90,0x90,0x90,0x94,0x94,0x94,0x98,0x90,0x90,0x90,0x94,0xfe,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x30,0x39,0x54,0x53,0x90,0x10,0x10,0x11,0x12,0x14,0x80,0x80,0x9c,0xe0,0x50,0x20,0x52,0x8e,0x0,0xfc,0x90,0x90,0x90,0x12,0x12,0xe,
++0x10,0x10,0x17,0x10,0xfc,0x11,0x32,0x3b,0x54,0x50,0x97,0x10,0x10,0x10,0x1f,0x10,0x0,0x4,0xfe,0x40,0x80,0x10,0x8,0xfc,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x10,0x10,0xfc,0x13,0x32,0x3a,0x56,0x52,0x92,0x12,0x10,0x10,0x11,0x16,0x40,0x44,0x7e,0x40,0x48,0xfc,0x8,0x48,0x48,0x48,0x48,0x48,0x80,0xb0,0xc,0x4,
++0x10,0x10,0x14,0x12,0xfd,0x10,0x37,0x38,0x54,0x50,0x90,0x10,0x11,0x11,0x12,0x14,0x40,0x40,0x44,0x48,0x50,0x44,0xfe,0xa0,0xa0,0xa0,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x12,0x12,0xff,0x10,0x33,0x38,0x54,0x53,0x92,0x12,0x12,0x12,0x11,0x10,0x40,0x40,0x48,0x48,0xf8,0x0,0xf8,0x8,0x8,0xf8,0x8,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x17,0x11,0xfd,0x12,0x3a,0x37,0x51,0x51,0x95,0x15,0x12,0x15,0x18,0x10,0x0,0xc,0x70,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x7c,0x0,0x6,0xfc,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x10,0x37,0x38,0x54,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x8,0x3c,0xe0,0x20,0x20,0x24,0xfe,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x11,0xfe,0x12,0x32,0x3a,0x57,0x52,0x92,0x12,0x12,0x12,0x13,0x12,0x0,0x40,0xc0,0x4,0x3e,0x4,0x4,0x4,0xbc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x11,0xfd,0x13,0x35,0x39,0x55,0x50,0x97,0x10,0x10,0x10,0x10,0x10,0xa0,0xa0,0xa4,0x28,0x30,0x60,0xa4,0x1c,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x11,0x12,0xfe,0x14,0x31,0x39,0x53,0x55,0x91,0x11,0x11,0x11,0x11,0x11,0x80,0x88,0x7c,0x0,0x80,0x84,0x7e,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x28,0x10,
++0x10,0x10,0x10,0x11,0xfe,0x14,0x31,0x38,0x54,0x57,0x90,0x10,0x11,0x12,0x17,0x10,0x40,0x40,0xa0,0x10,0xe,0x24,0xf0,0x0,0x8,0xfc,0x80,0x80,0x10,0x8,0xfc,0x4,
++0x10,0x10,0x1e,0x22,0x24,0x54,0x8,0x11,0x21,0xff,0x3,0x5,0x9,0x11,0x61,0x1,0x10,0x10,0xfc,0x10,0x50,0x90,0xfc,0x10,0x14,0xfe,0x80,0x40,0x30,0xe,0x4,0x0,
++0x2,0x1,0x7f,0x4,0x14,0x14,0x24,0x45,0x1,0xff,0x3,0x5,0x9,0x11,0x61,0x1,0x0,0x8,0xfc,0x40,0x50,0x48,0x44,0x44,0x0,0xfe,0x80,0x40,0x30,0xe,0x4,0x0,
++0x1,0x11,0x9,0x3f,0x2,0x7f,0x4,0x8,0x31,0xc1,0x3f,0x1,0x9,0x11,0x25,0x2,0x0,0x10,0x20,0xf8,0x0,0xfc,0x40,0x30,0xe,0x4,0xf8,0x0,0x20,0x18,0x8,0x0,
++0x10,0x10,0x12,0x13,0xfe,0x14,0x30,0x38,0x57,0x50,0x91,0x10,0x10,0x10,0x11,0x12,0x40,0x20,0x20,0xfe,0x2,0x44,0x40,0x84,0xfe,0x88,0x8,0x90,0x60,0x90,0xc,0x4,
++0x10,0x10,0x17,0x10,0xfc,0x12,0x32,0x38,0x54,0x51,0x96,0x10,0x10,0x10,0x12,0x11,0x0,0x4,0xbe,0x84,0x84,0xa4,0x94,0x94,0x84,0x8c,0xb4,0x84,0x84,0x84,0x94,0x8,
++0x8,0x8,0x8,0xfe,0x1c,0x2a,0x49,0x0,0xf,0x8,0xa,0x9,0x8,0x10,0x10,0x60,0x20,0x20,0x24,0xfe,0x70,0xa8,0x26,0x20,0xf0,0x20,0x20,0xa0,0xa0,0x22,0x22,0x1e,
++0x10,0x11,0x11,0x11,0xfd,0x12,0x30,0x3b,0x54,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x17,0x12,0xfd,0x11,0x33,0x38,0x54,0x50,0x97,0x10,0x10,0x10,0x11,0x10,0x8,0x3c,0xc0,0x48,0x48,0x50,0xf8,0x10,0x60,0x44,0xfe,0x40,0x40,0x40,0x40,0x80,
++0x10,0x10,0x10,0x11,0xfe,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x12,0x12,0x14,0x40,0x40,0xf8,0x10,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x24,0x34,0x28,
++0x10,0x10,0x10,0x17,0xfc,0x11,0x30,0x3f,0x54,0x50,0x90,0x17,0x10,0x10,0x10,0x10,0x80,0x40,0x48,0xfc,0x0,0x10,0xa4,0xfe,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,
++0x10,0x12,0x11,0x11,0xfc,0x12,0x32,0x38,0x55,0x51,0x92,0x16,0x12,0x12,0x10,0x13,0x10,0x10,0x10,0x10,0x54,0x52,0x90,0x14,0x14,0x18,0x8,0x10,0x20,0x40,0x80,0x0,
++0x10,0x13,0x10,0x10,0xfd,0x10,0x30,0x3b,0x54,0x51,0x91,0x12,0x10,0x10,0x11,0x16,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x40,0x48,0x48,0x50,0xa0,0x90,0xe,0x4,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x37,0x38,0x55,0x53,0x95,0x19,0x11,0x11,0x11,0x11,0x40,0x40,0x44,0xf8,0x50,0x64,0xfe,0x80,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0x7e,0x8,0x1c,0x2a,0x49,0x4,0x8,0x10,0x2f,0xc4,0x4,0x4,0x8,0x10,0x20,0x28,0xfc,0x20,0x70,0xac,0x20,0xc0,0x20,0x10,0xee,0x24,0x20,0x20,0xa0,0x40,
++0x10,0x10,0x13,0x10,0xfc,0x13,0x31,0x38,0x56,0x51,0x90,0x17,0x10,0x10,0x11,0x16,0x40,0x48,0xfc,0x40,0x40,0xfe,0x22,0xa4,0x20,0x20,0x24,0xfe,0x40,0x58,0x86,0x2,
++0x8,0xa,0x7f,0x14,0x14,0x3f,0x4,0x7f,0x4,0x5,0xff,0x3,0x5,0x19,0x61,0x1,0x8,0xc,0x70,0x40,0x44,0x7e,0x48,0x48,0x88,0x8,0xfe,0x80,0x40,0x30,0xe,0x0,
++0x10,0x10,0x10,0x10,0xff,0x12,0x33,0x3a,0x57,0x52,0x90,0x1f,0x10,0x10,0x10,0x10,0x44,0x7e,0x40,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x48,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x10,0x13,0x12,0x12,0xfe,0x13,0x30,0x38,0x55,0x51,0x92,0x14,0x10,0x10,0x13,0x1c,0x4,0xfe,0x94,0x94,0x94,0xfc,0x80,0x88,0xfc,0x8,0x88,0x50,0x20,0xc0,0x0,0x0,
++0x10,0x10,0x17,0x10,0xff,0x12,0x32,0x3a,0x57,0x52,0x92,0x1f,0x10,0x10,0x17,0x10,0x10,0x38,0xc0,0x44,0xfe,0x48,0x48,0x48,0xfc,0x48,0x48,0xfe,0x40,0x48,0xfc,0x0,
++0x10,0x10,0x10,0x17,0xf8,0x10,0x33,0x3a,0x56,0x52,0x93,0x10,0x12,0x14,0x19,0x10,0x80,0x40,0x44,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x48,0x46,0x42,0x80,
++0x10,0x10,0x17,0x10,0xff,0x12,0x32,0x3b,0x54,0x53,0x90,0x1f,0x10,0x10,0x11,0x10,0x80,0x48,0xfc,0x0,0xf8,0x8,0x8,0xf8,0x0,0xf8,0x10,0xfe,0x40,0x40,0x40,0x80,
++0x10,0x10,0x17,0x11,0xfd,0x12,0x37,0x39,0x55,0x51,0x95,0x15,0x12,0x15,0x18,0x10,0x10,0x14,0x7e,0x14,0xfe,0x14,0x7c,0x10,0x7c,0x10,0xfe,0x10,0x10,0x16,0xfc,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x13,0x30,0x38,0x57,0x52,0x91,0x10,0x11,0x16,0x11,0x10,0x40,0x48,0xfc,0x48,0x48,0xfe,0x48,0x48,0xf8,0x48,0x50,0xe0,0x50,0x4e,0x44,0x80,
++0x10,0x13,0x12,0x12,0xff,0x12,0x32,0x3b,0x56,0x52,0x93,0x13,0x15,0x15,0x19,0x11,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0xfe,0x20,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x13,0x10,0xfd,0x10,0x37,0x39,0x56,0x55,0x98,0x13,0x10,0x10,0x11,0x16,0x40,0x48,0xfc,0x40,0xf8,0x80,0xfc,0x10,0x8,0xf6,0x40,0xf8,0x40,0xb0,0xc,0x4,
++0x11,0x11,0x13,0x11,0xfd,0x11,0x31,0x39,0x55,0x51,0x9f,0x12,0x12,0x12,0x13,0x10,0x10,0x10,0xfc,0x10,0xf0,0x10,0x10,0xf0,0x10,0x14,0xfe,0x50,0x88,0x0,0xfc,0x0,
++0x20,0x20,0x20,0x2f,0xf8,0x20,0x37,0x6d,0x64,0xa5,0x24,0x24,0x27,0x24,0x24,0x24,0x40,0x40,0x44,0xfe,0x40,0x44,0xfe,0x14,0xa4,0xf4,0x44,0x44,0xfc,0x44,0x54,0x8,
++0x10,0x10,0x10,0x17,0xfc,0x11,0x32,0x3c,0x57,0x52,0x93,0x12,0x13,0x10,0x1f,0x10,0x40,0x40,0x48,0xfc,0xe0,0x50,0x4e,0x44,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x0,
++0x10,0x10,0x17,0x10,0xff,0x12,0x33,0x3a,0x56,0x53,0x90,0x10,0x11,0x12,0x14,0x10,0x40,0x44,0xfe,0x40,0xf8,0x48,0x58,0xe8,0x48,0xf8,0xc0,0xe0,0x50,0x4e,0x44,0x40,
++0x11,0x15,0x15,0x15,0xfd,0x15,0x30,0x3b,0x56,0x52,0x92,0x12,0x12,0x10,0x11,0x16,0x20,0x20,0x24,0x3e,0x50,0x88,0x8,0xfc,0x8,0x48,0x48,0x48,0xa8,0xa2,0x22,0x1e,
++0x10,0x13,0x12,0x12,0xfb,0x10,0x37,0x3a,0x57,0x52,0x93,0x12,0x12,0x1f,0x10,0x10,0x8,0xfc,0x8,0x8,0xf8,0x0,0xfe,0x8,0xf8,0x8,0xf8,0x8,0xe,0xf8,0x8,0x8,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x33,0x38,0x54,0x57,0x94,0x14,0x14,0x14,0x17,0x14,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x4,0xbe,0xa4,0xa4,0xa4,0xa4,0xbc,0xa4,
++0x10,0x10,0x3e,0x48,0x8,0x7e,0x14,0x22,0x41,0x1,0xff,0x3,0x5,0x39,0xc1,0x1,0x8,0xfc,0x80,0xf8,0x88,0xf8,0x80,0xfc,0x0,0x4,0xfe,0x80,0x40,0x30,0xe,0x0,
++0x10,0x10,0x17,0x11,0xf9,0x17,0x31,0x3b,0x53,0x55,0x95,0x19,0x11,0x11,0x11,0x11,0x10,0xd0,0x10,0x10,0x54,0xd4,0x38,0x90,0x50,0x28,0x28,0x28,0x28,0x44,0x82,0x0,
++0x10,0x10,0x13,0x12,0xfe,0x13,0x32,0x3a,0x57,0x52,0x92,0x13,0x1e,0x12,0x12,0x13,0x40,0xbc,0x24,0x24,0x24,0xa6,0x40,0x3c,0x84,0x24,0x28,0xa8,0x10,0x28,0x46,0x84,
++0x10,0x14,0x12,0x12,0xfc,0x10,0x36,0x3a,0x56,0x52,0x92,0x12,0x12,0x15,0x18,0x10,0x20,0x44,0xfe,0x84,0x84,0xfc,0x80,0xfc,0x84,0x84,0x84,0xfc,0x80,0x6,0xfc,0x0,
++0x10,0x10,0x17,0x10,0xfd,0x10,0x37,0x38,0x54,0x57,0x90,0x11,0x12,0x14,0x11,0x10,0x80,0x48,0xfc,0x0,0x10,0xa4,0xfe,0x40,0x48,0xfc,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x10,0x14,0x12,0x14,0xfc,0x15,0x35,0x3d,0x55,0x54,0x95,0x15,0x15,0x15,0x14,0x14,0x0,0x4,0xfe,0x4,0x4,0xf4,0x14,0x14,0xf4,0x4,0xf4,0x14,0x14,0xf4,0x14,0x8,
++0x11,0x10,0x13,0x10,0xfc,0x13,0x30,0x38,0x57,0x50,0x91,0x12,0x14,0x18,0x13,0x10,0x8,0x90,0xfc,0x40,0x50,0xf8,0x40,0x44,0xfe,0x80,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x14,0x12,0x10,0xfc,0x17,0x30,0x39,0x56,0x55,0x98,0x13,0x10,0x10,0x10,0x10,0x80,0x44,0x48,0x10,0x4,0xfe,0xa0,0x10,0x48,0xf6,0x40,0xf8,0x40,0x40,0x40,0x40,
++0x10,0x14,0x17,0x14,0xf8,0x13,0x30,0x3b,0x56,0x53,0x92,0x13,0x12,0x10,0x1f,0x10,0x80,0x40,0xfe,0x2,0x14,0xf8,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x0,0xfe,0x0,
++0x10,0x13,0x12,0x12,0xff,0x12,0x32,0x3a,0x56,0x52,0x92,0x12,0x14,0x14,0x18,0x10,0x4,0xfe,0x24,0x24,0xfc,0x0,0xfc,0x84,0x84,0xfc,0x84,0xfc,0x84,0x84,0xfc,0x84,
++0x10,0x17,0x11,0x11,0xfd,0x12,0x3a,0x35,0x54,0x5b,0x92,0x12,0x12,0x12,0x1f,0x10,0x0,0xf8,0x10,0x1c,0xe4,0xa4,0x44,0xb4,0x8,0xfc,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x10,0x10,0x17,0x10,0xff,0x10,0x37,0x39,0x52,0x55,0x98,0x17,0x10,0x11,0x16,0x10,0x40,0x48,0xfc,0x40,0xf8,0x80,0xfe,0x10,0x38,0xce,0x44,0xfc,0xe0,0x58,0x44,0x40,
++0x10,0x13,0x12,0x12,0xff,0x12,0x32,0x3b,0x56,0x52,0x93,0x12,0x12,0x12,0x13,0x10,0x8,0xfc,0x50,0x50,0xdc,0x50,0x50,0xdc,0x50,0x50,0xdc,0x50,0x50,0x54,0xfe,0x0,
++0x10,0x13,0x12,0x13,0xfe,0x13,0x38,0x37,0x50,0x54,0x92,0x11,0x16,0x10,0x12,0x11,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x4,0xbe,0x84,0xa4,0x94,0x8c,0xb4,0x84,0x94,0x8,
++0x11,0x11,0x11,0xfa,0x17,0x32,0x3b,0x56,0x53,0x92,0x10,0x17,0x10,0x10,0x10,0x10,0x40,0x24,0xfe,0x20,0xfc,0x20,0xfc,0x20,0xfe,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x10,0x11,0x13,0x12,0xff,0x12,0x3b,0x36,0x52,0x57,0x90,0x11,0x12,0x14,0x11,0x10,0x84,0x4,0xc4,0x44,0xc4,0x7e,0xc4,0x64,0x54,0xd4,0xc4,0x44,0x44,0x44,0x54,0x88,
++0x10,0x10,0x13,0x12,0xff,0x12,0x33,0x38,0x57,0x51,0x92,0x14,0x1b,0x10,0x10,0x10,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x80,0xfe,0x10,0x48,0x46,0xf8,0x40,0x40,0x40,
++0x10,0x10,0x17,0x10,0xfd,0x11,0x37,0x39,0x55,0x50,0x91,0x13,0x15,0x19,0x11,0x11,0x40,0x24,0xfe,0x0,0xf8,0x8,0xfe,0x8,0xf8,0x84,0x48,0x30,0x10,0x4e,0x84,0x0,
++0x10,0x10,0x17,0x10,0xfb,0x12,0x33,0x38,0x57,0x54,0x95,0x15,0x15,0x15,0x14,0x14,0x80,0x44,0xfe,0x0,0xf8,0x8,0xf8,0x0,0xfc,0x4,0xf4,0x14,0x14,0xf4,0x14,0x8,
++0x22,0x14,0xff,0x8,0x49,0x49,0x7f,0x8,0x11,0x21,0xff,0x3,0xd,0x31,0xc1,0x1,0x4,0x7e,0xc4,0x7c,0x44,0x7c,0x44,0x94,0x8,0x0,0xfe,0x80,0x40,0x30,0xe,0x0,
++0x10,0x10,0x17,0x14,0xf8,0x11,0x31,0x39,0x55,0x51,0x91,0x1f,0x10,0x11,0x12,0x14,0x80,0x40,0xfe,0x2,0x34,0xc0,0x8,0xfc,0x10,0x10,0x14,0xfe,0x0,0x10,0xc,0x4,
++0x10,0x10,0x17,0x14,0xf8,0x11,0x32,0x38,0x55,0x52,0x97,0x1a,0x12,0x12,0x13,0x12,0x80,0x40,0xfe,0x2,0xa4,0x10,0x48,0xa0,0x10,0x8,0xfe,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x14,0x12,0x12,0xf8,0x16,0x33,0x3a,0x56,0x53,0x92,0x12,0x12,0x13,0x12,0x10,0x20,0x20,0x24,0xfc,0x28,0x30,0xfe,0x40,0xfc,0x44,0x44,0x7c,0xc4,0x44,0x7c,0x44,
++0x10,0x13,0x12,0x12,0xff,0x12,0x33,0x3a,0x57,0x53,0x95,0x15,0x15,0x15,0x19,0x11,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0xa8,0xfc,0x4,0xfc,0x4,0xfc,0x4,0x14,0x8,
++0x11,0x11,0x1f,0x11,0xfd,0x10,0x37,0x3c,0x57,0x50,0x97,0x10,0x13,0x10,0x1f,0x10,0x10,0x14,0xfe,0x10,0xf0,0x44,0xfe,0x44,0xfc,0x40,0xfc,0x40,0xf8,0x40,0xfe,0x0,
++0x10,0x10,0x17,0x10,0xfa,0x11,0x37,0x38,0x57,0x54,0x95,0x15,0x15,0x14,0x17,0x14,0x40,0x48,0xfc,0x40,0x48,0x50,0xfe,0x0,0xfc,0x4,0xf4,0x14,0xf4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x32,0x3a,0x57,0x52,0x93,0x12,0x14,0x15,0x18,0x10,0x10,0x18,0x14,0xfe,0x10,0x90,0xd2,0x92,0xf4,0x94,0xd8,0xa8,0x9a,0xaa,0xc6,0x4,
++0x10,0x13,0x10,0x17,0xfd,0x14,0x31,0x38,0x57,0x50,0x9f,0x11,0x11,0x10,0x10,0x10,0x10,0xf8,0x40,0xfe,0x52,0xe4,0x50,0x40,0xfc,0x0,0xfe,0x0,0xf8,0x8,0x48,0x30,
++0x10,0x12,0x11,0x14,0xff,0x14,0x31,0x39,0x55,0x51,0x90,0x17,0x10,0x10,0x17,0x10,0x40,0x48,0x50,0x40,0xfe,0x2,0xf4,0x10,0x10,0xf0,0x40,0xfc,0x40,0x44,0xfe,0x0,
++0x44,0x29,0x10,0x2f,0x48,0x19,0x2b,0x4d,0x9,0x29,0x11,0xff,0x5,0x19,0x61,0x1,0x48,0xf0,0x54,0xfe,0x80,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x40,0x30,0xe,0x0,
++0x22,0x22,0x23,0x24,0xff,0x25,0x75,0x6f,0x65,0xa5,0x27,0x25,0x25,0x25,0x29,0x30,0x4,0x4,0xd4,0x8c,0xcc,0x64,0x54,0xd4,0x46,0x7c,0xc4,0x44,0x44,0x44,0x44,0x84,
++0x10,0x13,0x10,0x11,0xff,0x12,0x32,0x3b,0x56,0x53,0x92,0x12,0x17,0x10,0x10,0x10,0x8,0xc8,0x88,0x10,0xfe,0x64,0x54,0xd4,0x54,0xd4,0x48,0x68,0xc8,0x54,0x52,0x60,
++0x22,0x22,0x22,0x2f,0xf2,0x22,0x7f,0x6a,0xa2,0x2b,0x2a,0x2a,0x2e,0x2a,0x31,0x20,0x10,0x18,0x14,0x94,0x7e,0x50,0xd0,0x54,0x54,0xc8,0x6a,0x56,0x20,0x6,0xfc,0x0,
++0x14,0xff,0x14,0x3f,0x41,0xbd,0x25,0x3d,0x2,0x1,0xff,0x3,0xd,0x31,0xc1,0x1,0x20,0x24,0x3e,0x44,0xa4,0x28,0x10,0x28,0x46,0x0,0xfe,0x80,0x40,0x30,0xe,0x0,
++0x1,0x3f,0x9,0x7f,0x40,0x9f,0x8,0x1f,0x68,0xf,0x1,0xff,0x5,0x19,0x61,0x1,0x0,0xf8,0x20,0xfe,0x2,0xf4,0x0,0xf0,0x10,0xf0,0x4,0xfe,0x40,0x30,0xe,0x0,
++0x20,0x20,0x2f,0x28,0xfa,0x29,0x6f,0x78,0x6a,0xaa,0x2b,0x28,0x28,0x28,0x29,0x32,0x0,0x4,0xfe,0x8,0x28,0x48,0xee,0x92,0xa4,0xa8,0xe8,0xa8,0x88,0x94,0x14,0x22,
++0x10,0x10,0x10,0x11,0xfd,0x13,0x35,0x39,0x55,0x51,0x91,0x11,0x11,0x12,0x12,0x14,0xa0,0x90,0x84,0xfe,0x10,0x10,0xfc,0x10,0xfc,0x10,0x14,0xfe,0x0,0xa8,0xa6,0x2,
++0x10,0x10,0x11,0x12,0xfd,0x10,0x3a,0x36,0x53,0x50,0x97,0x14,0x14,0x15,0x14,0x14,0x40,0xa0,0x10,0x48,0xf6,0xa0,0x48,0xa8,0xf8,0x44,0xfe,0x44,0xa4,0xf4,0x14,0x8,
++0x11,0x11,0x12,0x17,0xfc,0x17,0x3c,0x37,0x50,0x5f,0x90,0x13,0x12,0x13,0x12,0x13,0x0,0xf0,0x24,0xfe,0x44,0xfc,0x44,0xfc,0x0,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,
++0x11,0x10,0x17,0x10,0xff,0x12,0x33,0x3a,0x56,0x52,0x93,0x10,0x1f,0x12,0x11,0x10,0x10,0xa0,0xfc,0xa0,0xf8,0xa8,0x38,0x8,0xe8,0x8,0xf8,0x10,0xfe,0x10,0x50,0x20,
++0x10,0x13,0x12,0x13,0xfe,0x13,0x32,0x3b,0x56,0x52,0x92,0x12,0x13,0x14,0x18,0x10,0x4,0xfe,0x4,0xfc,0x20,0xac,0x70,0xac,0x20,0xa8,0xfc,0x20,0xfe,0x20,0x20,0x20,
++0x10,0x13,0x10,0x10,0xff,0x10,0x33,0x38,0x57,0x54,0x95,0x17,0x15,0x15,0x14,0x14,0x0,0xf8,0x90,0x60,0xfe,0xc4,0x48,0x44,0xfe,0xa4,0x14,0xfc,0x14,0xf4,0x14,0x8,
++0x20,0x22,0x22,0x22,0xf4,0x2f,0x32,0x6c,0x64,0xaf,0x20,0x23,0x2c,0x20,0x21,0x20,0x40,0x78,0x48,0x48,0xf8,0x8,0xfe,0x20,0x54,0xb8,0x50,0xb8,0x54,0x92,0x10,0x30,
++0x10,0x13,0x10,0x17,0xfd,0x14,0x31,0x38,0x57,0x52,0x92,0x13,0x12,0x12,0x13,0x12,0x10,0xf8,0x40,0xfe,0x52,0xe4,0x50,0x40,0xf8,0x48,0x48,0xf8,0x48,0x48,0xf8,0x8,
++0x10,0x10,0x11,0x13,0xfe,0x13,0x33,0x3a,0x56,0x52,0x92,0x12,0x14,0x14,0x18,0x10,0x80,0xf8,0x10,0xfe,0x88,0x24,0xfe,0x0,0xfc,0x0,0xfc,0x0,0xfc,0x84,0xfc,0x84,
++0x10,0x1f,0x10,0x17,0xfd,0x15,0x35,0x3f,0x50,0x53,0x90,0x1f,0x11,0x12,0x15,0x10,0x40,0xfe,0x0,0xfc,0x14,0xf4,0x14,0xfc,0x0,0xf8,0x0,0xfe,0x50,0x4c,0x44,0x80,
++0x0,0x3e,0x23,0x3e,0x20,0x3f,0x62,0xa2,0x3e,0x1,0xff,0x3,0xd,0x31,0xc1,0x1,0x20,0x28,0xfc,0x88,0x50,0xfe,0x20,0xf8,0x20,0x24,0xfe,0x80,0x40,0x30,0xe,0x0,
++0x10,0x14,0x17,0x15,0xf9,0x12,0x35,0x3b,0x52,0x54,0x9b,0x10,0x11,0x12,0x14,0x10,0x80,0x40,0xfe,0x2,0xbc,0xa8,0xb0,0x10,0xe8,0x6,0xf8,0x40,0x50,0x4c,0x44,0xc0,
++0x0,0x22,0x14,0xff,0x14,0x7f,0x55,0x55,0x67,0x41,0x7f,0x41,0x41,0x7f,0x40,0x1,0x20,0x28,0x24,0xa4,0x20,0xfe,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x8e,0x4,
++0x8,0x7f,0x8,0x3e,0x8,0x7f,0x10,0x1e,0x22,0x4a,0x5,0xff,0x1,0x2,0xc,0x70,0x40,0x44,0x7e,0x48,0x88,0x28,0x10,0x28,0x46,0x90,0x8,0xfe,0x0,0x80,0x70,0xe,
++0x0,0x4,0xfe,0x20,0x20,0x3d,0x26,0x45,0x64,0x98,0x8,0x10,0x10,0x20,0x41,0x6,0x8,0xfc,0x88,0x88,0x88,0xe,0x0,0xf8,0x8,0x88,0x50,0x20,0x50,0x90,0xe,0x4,
++0x0,0x5,0xff,0x21,0x21,0x3d,0x25,0x45,0x65,0x99,0x9,0x11,0x11,0x21,0x47,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xfe,0x0,
++0x0,0x4,0xfe,0x21,0x22,0x3c,0x24,0x45,0x64,0x98,0x9,0x11,0x12,0x24,0x41,0x0,0x80,0x84,0xfe,0x0,0xf8,0x10,0x24,0xfe,0x94,0x94,0x24,0x24,0x44,0x84,0x28,0x10,
++0x0,0x4,0xfe,0x20,0x21,0x3e,0x24,0x44,0x67,0x98,0x8,0x11,0x10,0x20,0x41,0x6,0x40,0x40,0xa0,0xa0,0x18,0x26,0x40,0x88,0x10,0x20,0x44,0x88,0x10,0x60,0x80,0x0,
++0x0,0x5,0xff,0x21,0x21,0x3c,0x25,0x45,0x65,0x99,0x9,0x11,0x11,0x20,0x40,0x3,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x4,0x24,0x24,0x24,0x24,0x24,0x50,0x8c,0x4,
++0x0,0x4,0xfe,0x20,0x21,0x3e,0x25,0x44,0x64,0x99,0x9,0x11,0x11,0x20,0x47,0x0,0x20,0x20,0x50,0x88,0x4,0xa,0xfc,0x0,0x44,0x24,0x24,0x28,0x28,0x10,0xfe,0x0,
++0x0,0x5,0xfe,0x21,0x20,0x3c,0x25,0x44,0x64,0x98,0xb,0x10,0x10,0x20,0x40,0x0,0x1c,0xe0,0x0,0x24,0xa8,0x0,0xfc,0x8,0x30,0x24,0xfe,0x20,0x20,0x20,0xa0,0x40,
++0x1,0x4,0xfe,0x21,0x21,0x3d,0x25,0x45,0x65,0x99,0x8,0x10,0x13,0x20,0x40,0x0,0x4,0x88,0x10,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,
++0x0,0x5,0xfe,0x20,0x20,0x3b,0x2a,0x4a,0x6a,0x9a,0xb,0x12,0x10,0x20,0x4f,0x0,0x0,0xfc,0x8,0x10,0x20,0xbe,0xa2,0xb4,0xb4,0xa8,0xb6,0x22,0xa0,0x44,0xfe,0x0,
++0x0,0x4,0xff,0x22,0x24,0x3d,0x25,0x45,0x65,0x99,0x9,0x17,0x10,0x21,0x42,0x4,0x80,0x40,0xfe,0x2,0x34,0xc0,0x8,0xfc,0x10,0x10,0x14,0xfe,0x0,0x10,0xc,0x4,
++0x0,0xb,0xfc,0x21,0x20,0x3b,0x2a,0x4d,0x68,0x99,0x9,0x11,0x10,0x20,0x47,0x0,0x20,0xfe,0x20,0xfc,0x0,0xfe,0x2,0xfc,0x0,0xfc,0x4,0xfc,0x88,0x50,0xfe,0x0,
++0x10,0x10,0x15,0xfe,0x20,0x28,0x48,0x7e,0x9,0x8,0xe,0xf8,0x48,0x8,0x9,0x8,0x0,0x4,0xfe,0x24,0x24,0xa4,0xa4,0xa4,0x24,0x24,0x24,0x44,0x44,0x84,0x28,0x10,
++0x20,0x21,0x29,0xfd,0x41,0x51,0x91,0xfd,0x11,0x11,0x1d,0xf2,0x52,0x14,0x18,0x10,0x4,0xfe,0x0,0x0,0x4,0x7e,0x44,0x44,0x44,0x54,0x48,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x10,0x14,0xfe,0x23,0x28,0x48,0x7e,0x9,0x9,0xf,0xf9,0x49,0x9,0x9,0x9,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x15,0xfe,0x20,0x29,0x49,0x7f,0x9,0x9,0xf,0xf9,0x48,0x8,0x8,0x8,0x0,0x4,0xfe,0x8,0x8,0xe8,0x28,0x28,0x28,0x28,0xe8,0x28,0x8,0x8,0x28,0x10,
++0x10,0x10,0x14,0xfe,0x20,0x29,0x49,0x7f,0x9,0x9,0xf,0xf9,0x49,0xa,0xa,0xc,0x20,0x24,0x3e,0x20,0x24,0xfe,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x14,0xfe,0x20,0x28,0x48,0x7e,0x8,0x8,0xe,0xf8,0x48,0x8,0x9,0xa,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,0x0,0x48,0x48,0x84,0x6,0x2,
++0x10,0x10,0x14,0xfe,0x20,0x29,0x48,0x7e,0x9,0x8,0xe,0xf8,0x48,0x8,0x8,0xb,0x20,0xa0,0xa0,0xa8,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x50,0x50,0x88,0x8e,0x4,
++0x20,0x20,0x28,0xfc,0x41,0x52,0x94,0xfc,0x11,0x10,0x18,0xf1,0x50,0x10,0x11,0x16,0x40,0x40,0xa0,0xa0,0x18,0x26,0x40,0x80,0x10,0x20,0x40,0x88,0x10,0x60,0x80,0x0,
++0x10,0x10,0x15,0xfe,0x20,0x29,0x48,0x7e,0x8,0x9,0xe,0xf8,0x48,0x8,0x8,0x8,0x8,0x1c,0xe0,0x20,0x24,0x24,0xa8,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x10,0x15,0xff,0x21,0x29,0x49,0x7f,0x9,0x8,0xe,0xf8,0x49,0xa,0x8,0x8,0x8,0x1c,0xe0,0x0,0x20,0x20,0x20,0x24,0xfe,0x20,0xa8,0xa4,0x26,0x22,0xa0,0x40,
++0x10,0x11,0x14,0xfe,0x20,0x28,0x48,0x7e,0x9,0x8,0xe,0xf8,0x48,0x8,0x8,0x8,0x4,0xfe,0x44,0x44,0x44,0x44,0x94,0x88,0x4,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x10,0x10,0x14,0xfe,0x21,0x28,0x48,0x7d,0x8,0x8,0xe,0xf8,0x4b,0x8,0x8,0x8,0x10,0x18,0x14,0x14,0xfe,0x10,0x10,0xf0,0x90,0x90,0x90,0xf0,0x88,0xa,0x6,0x2,
++0x10,0x13,0x14,0xfe,0x20,0x29,0x49,0x7e,0x8,0x8,0xf,0xf8,0x48,0x8,0xb,0x8,0x4,0xfe,0x40,0x40,0x88,0x4,0xfe,0x22,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x14,0xfe,0x20,0x29,0x4a,0x7e,0x8,0x8,0xe,0xf8,0x48,0x8,0xb,0x8,0x20,0x20,0x50,0x50,0x88,0x4,0xfa,0x20,0x20,0x20,0xf8,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x14,0xff,0x21,0x2a,0x48,0x7e,0x8,0x9,0xf,0xf9,0x49,0x9,0x9,0x9,0x80,0x80,0xfc,0x4,0x88,0x50,0x20,0x50,0x88,0x6,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x13,0x15,0xff,0x21,0x29,0x49,0x7f,0x9,0x9,0xf,0xf9,0x4b,0x9,0x8,0x8,0x4,0xfe,0x20,0x28,0xe8,0x28,0x28,0x28,0xe8,0x28,0x28,0x3a,0xea,0x2e,0x20,0x20,
++0x8,0x8,0x7e,0x8,0x7e,0x14,0x22,0x42,0x3f,0x5,0x9,0x1f,0x1,0xff,0x1,0x1,0x20,0x20,0xfc,0x20,0xfc,0x50,0x88,0x6,0xf8,0x0,0x20,0xf0,0x4,0xfe,0x0,0x0,
++0x20,0x20,0x2b,0xfe,0x42,0x52,0x93,0xfe,0x12,0x13,0x1e,0xf2,0x52,0x12,0x12,0x12,0x0,0x4,0xfe,0x4,0x94,0x94,0xfc,0x44,0x24,0xfc,0x84,0x84,0xf4,0x4,0x14,0x8,
++0x20,0x2f,0x24,0xfd,0x42,0x55,0x90,0xf8,0x17,0x10,0x18,0xf5,0x52,0x15,0x18,0x10,0x0,0xfc,0xa4,0x28,0x10,0x28,0xc4,0x0,0xbc,0x84,0xc4,0x28,0x10,0x28,0xce,0x84,
++0x20,0x21,0x29,0xfe,0x42,0x51,0x91,0xfc,0x11,0x11,0x1d,0xf1,0x51,0x11,0x11,0x11,0x0,0x24,0x24,0x48,0x48,0x24,0x24,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,
++0x10,0x10,0x13,0xfe,0x21,0x28,0x4b,0x7e,0x8,0x9,0xe,0xf9,0x48,0x8,0x8,0xb,0x20,0x24,0xfe,0x20,0xfc,0x20,0xfe,0x50,0x88,0xfc,0x22,0xfc,0x20,0x58,0x86,0x2,
++0x20,0x20,0x2b,0xfe,0x42,0x53,0x92,0xfe,0x13,0x12,0x1e,0xf2,0x52,0x12,0x14,0x10,0x40,0x24,0xfe,0x50,0x54,0xfe,0x54,0x54,0xfc,0x92,0x94,0xf8,0x90,0xb2,0xd2,0x8e,
++0x20,0x22,0x29,0xff,0x41,0x52,0x94,0xfa,0x13,0x12,0x1a,0xf5,0x51,0x11,0x12,0x14,0x40,0x48,0x50,0xfe,0x50,0x4c,0x44,0x8,0xbe,0x88,0xa8,0xa8,0x3e,0x8,0x8,0x8,
++0x1,0x7f,0x1,0x3f,0x21,0x3f,0x21,0x3f,0x1,0xff,0x1,0x1f,0x10,0x10,0x1f,0x10,0x0,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x4,0x4,0x4,0x4,0x7f,0x4,0x2,0x2,0xff,0x1,0x1,0x0,0x1,0x6,0x38,0x0,0x0,0x80,0x48,0xfc,0x0,0x0,0x4,0xfe,0x0,0x10,0x20,0xc0,0x80,0x44,0x24,0x1c,
++0x8,0x8,0x14,0x13,0x21,0x40,0xbf,0x22,0x22,0x2a,0x24,0x20,0x22,0x22,0x1e,0x0,0x40,0x50,0x48,0x48,0x40,0x7e,0xc0,0x24,0x24,0x28,0x28,0x10,0x12,0x2a,0x4a,0x84,
++0x0,0x7f,0x1,0xf,0x8,0xf,0x8,0xf,0x8,0xf,0x1,0xff,0x1,0x0,0x7,0x38,0x8,0xfc,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x44,0xfe,0x20,0xc4,0x44,0x3c,
++0x8,0x9,0xff,0x8,0x9,0x7f,0x41,0x7f,0x41,0x7f,0x8,0x9,0xff,0x8,0x8,0x9,0x20,0x28,0xa4,0x24,0x20,0xfe,0x20,0x20,0x24,0x24,0x28,0x10,0xb2,0x4a,0x8a,0x4,
++0x1,0x3f,0x21,0x3f,0x0,0xff,0x21,0x3f,0x21,0x3f,0x21,0x21,0xff,0x41,0x1,0x1,0x20,0xa8,0x24,0x24,0x20,0xfe,0x20,0x20,0x24,0x24,0x28,0x10,0xb2,0x4a,0x8a,0x4,
++0x22,0x22,0xff,0x22,0x3e,0x22,0x3e,0x22,0x22,0xff,0x54,0x53,0x61,0x40,0x7f,0x1,0x20,0x28,0xa4,0x24,0x20,0xfe,0x20,0x20,0x24,0xa4,0x28,0x10,0x32,0x4a,0x8a,0x4,
++0x1,0x7f,0x41,0x7f,0x41,0x7f,0x28,0x2a,0x3f,0x48,0xbe,0x8,0xf,0xf8,0x40,0x1,0x20,0xa8,0x24,0x24,0x20,0xfe,0x20,0x20,0x24,0x24,0x28,0x10,0x32,0x4a,0x8a,0x4,
++0x1,0xff,0x21,0x22,0x3d,0x55,0x49,0x55,0x82,0x7f,0x55,0x55,0x55,0xff,0x0,0x1,0x20,0xa8,0x24,0x24,0x20,0xfe,0x20,0x20,0x24,0x24,0x28,0x10,0x32,0xca,0x8a,0x4,
++0x2,0x7f,0x14,0x55,0x36,0x14,0xff,0x0,0x3e,0x22,0x22,0x3e,0x22,0x22,0x3e,0x1,0x20,0x28,0x24,0x24,0x20,0xfe,0x20,0x20,0x24,0x24,0x28,0x10,0x32,0x4a,0x8a,0x4,
++0x0,0x0,0x1f,0x50,0x57,0x55,0x75,0x17,0xf4,0x54,0x57,0x95,0x25,0x27,0x40,0x80,0x28,0x24,0xfe,0x20,0xa0,0x20,0x24,0xa4,0xa8,0xa8,0x90,0x10,0x12,0xaa,0x4a,0x84,
++0x0,0x3,0x7e,0x40,0x62,0x52,0x54,0x48,0x48,0x54,0x52,0x62,0x40,0x44,0x7e,0x0,0x4,0xfe,0x80,0x88,0xfc,0x88,0xc8,0xa8,0xa8,0x88,0x88,0x88,0xaa,0xca,0x86,0x2,
++0x8,0xb,0x14,0x14,0x22,0x51,0x88,0x0,0x7e,0x2,0x24,0x14,0x8,0x4,0x4,0x0,0x4,0xfe,0x80,0x88,0xfc,0x88,0xc8,0xa8,0xa8,0x88,0x88,0x88,0xaa,0xca,0x86,0x2,
++0x40,0x23,0xfe,0x0,0x44,0x28,0xfe,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0x7c,0x44,0x4,0xfe,0x80,0x88,0xfc,0x88,0xc8,0xa8,0xa8,0x88,0x88,0x88,0xaa,0xca,0x86,0x2,
++0x8,0x7f,0x8,0x7f,0x22,0x3e,0x14,0x7f,0x0,0xff,0x8,0xf,0x9,0x8,0xe,0x10,0x4,0x8,0x74,0x8,0x74,0x8,0x10,0x60,0x4,0xfe,0x0,0xe0,0x20,0xa4,0x24,0x1c,
++0x44,0x29,0xfe,0x92,0xd6,0xba,0x92,0xfe,0x4,0x7e,0x44,0x7c,0x44,0x44,0x7c,0x0,0x4,0xfe,0x80,0x88,0xfc,0x88,0xc8,0xa8,0xa8,0x88,0x88,0x88,0xaa,0xca,0x86,0x2,
++0x0,0x7f,0x42,0x7e,0x41,0x7e,0x62,0xbe,0x0,0xff,0x8,0xf,0x9,0x8,0xe,0x10,0x20,0xfc,0x88,0x50,0xfe,0x0,0xf8,0x20,0x24,0xfe,0x0,0xe0,0x20,0xa4,0x24,0x1c,
++0x1,0x1,0x1,0x1,0x1,0x3f,0x0,0x8,0x8,0x4,0x2,0x1,0x2,0xc,0x30,0xc0,0x0,0x8,0xfc,0x0,0x0,0xf0,0x10,0x20,0x20,0x40,0x80,0x0,0xc0,0x30,0xe,0x4,
++0x2,0x2,0x7f,0x4,0x4,0x8,0x10,0x20,0xdf,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0x20,0xf0,0x20,0x20,0x22,0x22,0x1e,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x2,0x2,0x7f,0x4,0x4,0x8,0x10,0x60,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x0,0x20,0xf0,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x4,0x7f,0x44,0x44,0x44,0x44,0x7c,0x47,0x44,0x44,0x44,0x7c,0x44,0x0,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x1f,0x10,0x1f,0x10,0x1f,0x0,0x3f,0x1,0x1,0xff,0x1,0x2,0x4,0x18,0x60,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0xf8,0x0,0x4,0xfe,0x0,0x80,0x60,0x1c,0x8,
++0x0,0x1f,0x10,0x1f,0x10,0x1f,0x0,0x3f,0x0,0x0,0xff,0x2,0x4,0x8,0x1f,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0xf8,0x0,0x4,0xfe,0x0,0x40,0x20,0xf0,0x10,
++0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x1,0x1,0xff,0x3,0x5,0x19,0x61,0x1,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x0,0x4,0xfe,0x80,0x60,0x1c,0x8,0x0,
++0x0,0x1f,0x10,0x1f,0x10,0x1f,0x0,0x3f,0x20,0x20,0x21,0x21,0x42,0x44,0x88,0x10,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x80,0x80,0x40,0x40,0x20,0x10,0xe,0x4,
++0x0,0x4,0x7f,0x45,0x45,0x45,0x45,0x7d,0x45,0x45,0x45,0x45,0x7d,0x41,0x2,0x4,0x8,0x1c,0xe0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0x4,0x7e,0x44,0x45,0x46,0x44,0x7c,0x44,0x44,0x45,0x44,0x7c,0x44,0x0,0x0,0x80,0x80,0x84,0xfe,0x4,0x84,0x44,0x44,0x14,0x64,0x84,0x4,0x4,0x44,0x28,0x10,
++0x0,0x1f,0x10,0x1f,0x10,0x1f,0x1,0x1,0x9,0xa,0x12,0x24,0x4,0x8,0x10,0x60,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0x8,0x18,0xa0,0xc0,0x40,0x20,0x10,0xe,0x4,
++0x0,0x1f,0x10,0x1f,0x10,0x1f,0x8,0x1f,0x21,0x61,0xa2,0x24,0x20,0x3f,0x0,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x4,0x4,0xc4,0x44,0x4,0xc4,0x28,0x10,
++0x10,0x1e,0x22,0x34,0x48,0x16,0x21,0x40,0x9f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x40,0x40,0x60,0x58,0x40,0x46,0xfc,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x0,0x3f,0x20,0x3f,0x20,0x3f,0x4,0x78,0x42,0x42,0x4e,0x72,0x2,0x4,0x18,0x60,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x84,0x84,0x84,0xa4,0x98,0x80,0x80,0x80,
++0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x2,0x1,0x7f,0x8,0x4,0x4,0xff,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x0,0x8,0xfc,0x20,0x20,0x44,0xfe,0x0,
++0x10,0xc,0x0,0x3c,0x4,0x5,0x7e,0x16,0x15,0x15,0x24,0x24,0x44,0x84,0x14,0x8,0x0,0x4,0x7e,0x44,0xc4,0x44,0x7c,0x44,0x44,0x44,0xfc,0x84,0x40,0x30,0xe,0x4,
++0x0,0x5,0x7f,0x45,0x45,0x45,0x45,0x7d,0x45,0x45,0x45,0x45,0x7e,0x42,0x4,0x8,0x4,0xfe,0x4,0x4,0xfc,0x4,0x40,0x44,0x4c,0x50,0x60,0x40,0x42,0x42,0x3e,0x0,
++0x2,0x3f,0x2,0xff,0x1,0xa,0xf,0x38,0xc7,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0xe0,0x44,0xfe,0x0,0x70,0x84,0x4,0xfc,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,
++0x0,0x3f,0x20,0x3f,0x20,0x3f,0x0,0x3f,0x20,0x3e,0x22,0x22,0x2a,0x44,0x41,0x80,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x90,0xfc,0x80,0x88,0x50,0x60,0x40,0xa2,0x12,0xe,
++0x0,0x8,0x7d,0x49,0x4b,0x4d,0x49,0x79,0x49,0x48,0x4f,0x48,0x78,0x48,0x0,0x0,0xa0,0xa4,0x2c,0x30,0x20,0x62,0xa2,0x1e,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x0,0x3f,0x20,0x3f,0x20,0x3f,0x2,0x22,0x12,0x16,0xa,0x72,0x2,0x4,0x18,0x60,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x80,0x90,0xa0,0xc0,0xa0,0x98,0x8a,0x82,0x7e,0x0,
++0x0,0x1f,0x10,0x1f,0x10,0x1f,0x1,0x3f,0x22,0x42,0xff,0x4,0xc,0x3,0x4,0x18,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0xfc,0x4,0x8,0xfe,0x20,0x40,0x80,0x60,0x10,
++0x0,0x3,0x7a,0x4a,0x48,0x4b,0x48,0x79,0x4b,0x48,0x48,0x4b,0x78,0x48,0x0,0x0,0x0,0xfe,0x2,0x44,0x40,0xfc,0x80,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x0,0x78,0x4f,0x48,0x4b,0x4a,0x7a,0x4b,0x4a,0x4a,0x4b,0x7a,0x4a,0x2,0x2,0x50,0x48,0x40,0xfe,0x48,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x48,0x48,0x68,0x50,
++0x0,0x8,0x7c,0x48,0x49,0x4a,0x4c,0x7b,0x48,0x48,0x4b,0x4a,0x7a,0x4a,0x3,0x2,0x40,0x40,0xa0,0xa0,0x90,0x4e,0x4,0xf0,0x20,0x48,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x1f,0x10,0x1f,0x10,0x1f,0x8,0x1f,0x22,0xd4,0x8,0x37,0xc0,0x1f,0x10,0x10,0x1f,0xf0,0x10,0xf0,0x10,0xf0,0x40,0x60,0x58,0x40,0x46,0xfc,0x8,0xfc,0x8,0x8,0xf8,
++0x0,0x8,0x7f,0x4c,0x4b,0x48,0x4b,0x7a,0x4a,0x4b,0x4a,0x4a,0x7b,0x40,0xf,0x0,0x80,0x40,0xfe,0x2,0xfc,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xfe,0x0,
++0x0,0xb,0x7c,0x4a,0x49,0x49,0x4a,0x7d,0x48,0x48,0x4f,0x48,0x78,0x49,0x2,0x4,0x20,0xa8,0xb4,0xa8,0x10,0x10,0xe,0xf4,0x40,0x44,0xfe,0x40,0xa0,0x10,0xc,0x4,
++0x0,0xb,0x7d,0x48,0x4f,0x4c,0x48,0x7b,0x48,0x48,0x49,0x49,0x7a,0x4c,0x1,0x6,0x1c,0xe0,0x24,0xa8,0xfe,0x42,0x44,0xfe,0x80,0xf8,0x8,0x50,0x20,0x50,0x8e,0x4,
++0x0,0x3,0x7a,0x4c,0x4b,0x4a,0x4b,0x7a,0x4b,0x48,0x48,0x4f,0x78,0x49,0x2,0x4,0x0,0xfc,0x4,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x80,0x44,0xfe,0x0,0x10,0xc,0x4,
++0x2,0x11,0x7f,0x50,0x57,0x54,0x54,0x77,0x50,0x5f,0x50,0x51,0x7f,0x51,0x5,0x2,0x10,0x10,0xd4,0x1e,0xa4,0xc4,0xa4,0xa4,0x24,0xa8,0x90,0x50,0xa8,0x28,0x44,0x82,
++0x0,0x7,0x70,0x5f,0x50,0x57,0x55,0x75,0x57,0x50,0x57,0x50,0x7f,0x55,0x4,0x8,0x1c,0xe0,0x44,0xfe,0x40,0xfc,0x54,0x54,0xfc,0x40,0xfc,0x40,0xfe,0x24,0x92,0x92,
++0x0,0x7,0x78,0x4a,0x49,0x4a,0x48,0x79,0x49,0x4b,0x4d,0x49,0x79,0x49,0x1,0x1,0x84,0xbe,0x84,0x94,0x8c,0x94,0xa4,0x10,0xfe,0x10,0xfc,0x10,0xfc,0x10,0xfe,0x0,
++0x1,0x7,0x78,0x4b,0x48,0x4f,0x48,0x7b,0x49,0x4f,0x4d,0x4f,0x7a,0x4b,0x0,0x1,0x10,0xfc,0x40,0xf8,0x40,0xfc,0x10,0xd8,0x14,0xfe,0x10,0x94,0x8,0x9a,0xaa,0x84,
++0x3f,0x20,0x3f,0x20,0x3f,0x1,0xff,0x4,0x3f,0x4,0x3f,0x4,0x7f,0xd,0x74,0x6,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x40,0xf8,0x40,0xf8,0x40,0xfc,0x10,0xe0,0x1e,
++0x1,0x1,0x3f,0x1,0x8,0xff,0x8,0x8,0x1f,0x10,0x11,0x11,0x11,0x2,0x4,0x38,0x0,0x10,0xf8,0x0,0x24,0xfe,0x20,0x20,0xf0,0x10,0x10,0x10,0x10,0xc0,0x20,0x18,
++0x12,0x12,0xff,0x12,0x13,0x10,0x1f,0x0,0x1f,0x10,0x11,0x11,0x11,0x2,0x4,0x38,0x20,0x24,0xfe,0x20,0xe0,0x0,0xf8,0x0,0xf0,0x10,0x10,0x10,0x10,0xc0,0x20,0x18,
++0x0,0x7d,0x45,0x55,0x55,0x55,0x55,0x55,0x54,0x54,0x54,0x10,0x28,0x25,0x42,0x84,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x90,0x90,0x90,0x90,0x92,0x12,0x12,0x1e,
++0x4,0x7e,0x44,0x54,0x55,0x57,0x54,0x54,0x55,0x55,0x55,0x11,0x29,0x25,0x45,0x81,0x20,0x20,0x40,0x88,0x4,0xfe,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0xfd,0x10,0x1d,0xf0,0x11,0x62,0x1f,0x10,0x11,0x11,0x11,0x2,0xc,0x30,0x40,0x48,0xfc,0x48,0xc8,0xa8,0xa,0x6,0xf0,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x8,0x8,0x2e,0x28,0x28,0x2e,0xf0,0x0,0x1f,0x10,0x11,0x11,0x11,0x2,0x4,0x38,0x80,0x84,0x98,0xe0,0x82,0x82,0x7e,0x10,0xf8,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x4,0x7e,0x44,0x57,0x54,0x54,0x54,0x55,0x54,0x54,0x54,0x11,0x28,0x24,0x44,0x81,0x40,0x20,0x4,0xfe,0x40,0x44,0x88,0xf4,0x24,0x48,0x88,0x10,0x28,0x44,0x82,0x2,
++0x4,0x7e,0x44,0x54,0x54,0x54,0x54,0x55,0x55,0x56,0x54,0x10,0x28,0x24,0x44,0x80,0x4,0xfe,0x84,0x84,0xfc,0xa0,0x90,0x8,0x4e,0x24,0x20,0x0,0xc0,0x30,0x18,0x8,
++0x0,0x7d,0x45,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x11,0x2a,0x24,0x48,0x80,0x4,0xfe,0x0,0x0,0x7c,0x0,0x0,0xfe,0x52,0x54,0x48,0x48,0x44,0x54,0x62,0x40,
++0x1,0x1,0x7f,0x9,0x5,0xff,0x5,0x9,0x3f,0xd0,0x11,0x11,0x11,0x12,0x4,0x38,0x0,0x8,0xfc,0x20,0x44,0xfe,0x40,0x20,0xf8,0x16,0x10,0x10,0x10,0xc0,0x20,0x18,
++0x4,0x7e,0x44,0x57,0x54,0x55,0x54,0x54,0x54,0x54,0x54,0x13,0x28,0x24,0x44,0x80,0x20,0x28,0x24,0xfe,0x20,0x24,0xa8,0xb0,0x30,0x68,0xa8,0x24,0x22,0x20,0xa0,0x40,
++0x1,0x1,0x7f,0x9,0x9,0x15,0x7f,0x40,0x9f,0x10,0x11,0x11,0x11,0x2,0x4,0x38,0x0,0x8,0xfc,0x20,0x20,0x50,0xfe,0x2,0xf4,0x10,0x10,0x10,0x10,0xc0,0x20,0x18,
++0x4,0x7e,0x44,0x54,0x55,0x54,0x54,0x55,0x54,0x54,0x54,0x11,0x28,0x24,0x44,0x83,0x20,0x24,0xac,0xb0,0x20,0x50,0x4c,0xa4,0x20,0xa4,0xa8,0x30,0x50,0x48,0x8e,0x4,
++0x0,0x7c,0x47,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x13,0x29,0x24,0x44,0x80,0x30,0x28,0xfe,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x24,0x8,0xfe,0x8,0x88,0xa8,0x10,
++0x10,0x11,0x15,0x1f,0x11,0x11,0x15,0x7f,0x45,0x45,0x45,0x44,0x7c,0x44,0x1,0x6,0x4,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x34,0x50,0x50,0x92,0x12,0xe,
++0x8,0x49,0x49,0x49,0x7f,0x0,0x7f,0x1,0x1,0x3f,0x21,0x20,0x23,0x2c,0x30,0x3,0x4,0x7e,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x18,0x28,0x28,0x4a,0x8a,0x6,
++0x0,0x1,0xff,0x8,0x8,0x2a,0x2a,0x2a,0x5d,0x88,0x8,0xf,0xf8,0x40,0x0,0x3,0x4,0x7e,0xc4,0x54,0x54,0x54,0x54,0x54,0x54,0xd4,0x18,0xa8,0x28,0x4a,0x8a,0x6,
++0x8,0xa,0x7f,0x8,0x8,0xff,0x25,0x14,0x64,0x14,0xff,0x4,0x8,0xc,0x12,0x61,0x4,0x7e,0x44,0x54,0x54,0xd4,0x54,0x54,0x54,0x54,0x18,0x28,0x28,0x4a,0x8a,0x6,
++0x8,0x8,0x14,0x14,0x22,0x7f,0x80,0x71,0x55,0x75,0x55,0x75,0x51,0x55,0x52,0x3,0x4,0x7e,0x44,0x54,0x54,0x54,0xd4,0x54,0x54,0x54,0x18,0x28,0x28,0x4a,0x8a,0x6,
++0x14,0x14,0x7f,0x14,0x7f,0x14,0xff,0x8,0x7f,0x49,0x7f,0x49,0xff,0x41,0x45,0x43,0x4,0x7e,0x44,0x54,0x54,0x54,0xd4,0x54,0x54,0x54,0x18,0x28,0xa8,0x4a,0x8a,0x6,
++0x22,0x22,0xff,0x22,0x3e,0x8,0x7f,0x49,0x7f,0x8,0x7f,0x8,0x7f,0x8,0xff,0x1,0x4,0x7e,0xc4,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x18,0x28,0x28,0x4a,0x8a,0x6,
++0xa,0xf,0x8,0x7f,0x49,0x4e,0x79,0x4f,0x40,0x4a,0x6a,0x5b,0x4a,0x4a,0xbf,0x1,0x4,0x7e,0x44,0xd4,0x54,0x54,0x54,0x54,0x54,0x54,0x98,0x28,0x28,0x4a,0x8a,0x6,
++0x8,0x8,0x8,0x17,0x30,0x50,0x91,0x19,0x9,0xf,0x11,0x21,0xff,0x1,0x1,0x1,0xa0,0x94,0x9e,0xe0,0x80,0x44,0x34,0xc,0x20,0xf0,0x0,0x4,0xfe,0x0,0x0,0x0,
++0x7d,0x5,0x7d,0x44,0x41,0x7d,0x5,0x28,0x13,0x11,0x1f,0x21,0xff,0x1,0x1,0x1,0xfc,0x4,0xfc,0x20,0xfc,0x24,0xfc,0x28,0xfc,0x2,0xf8,0x0,0xfe,0x0,0x0,0x0,
++0x8,0x8,0x28,0x28,0x3e,0x48,0x48,0x88,0xe,0x18,0x68,0x8,0x8,0x8,0x8,0x8,0x80,0x80,0x80,0x84,0x8c,0x90,0xa0,0xc0,0x80,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x8,0x8,0x2b,0x28,0x3e,0x48,0x49,0x88,0xe,0x18,0x6b,0x8,0x8,0x8,0x8,0x8,0x8,0x1c,0xe0,0x40,0x40,0x5c,0xe0,0x40,0x44,0x7e,0xc0,0x40,0x42,0x42,0x3e,0x0,
++0x8,0x8,0x28,0x28,0x3e,0x4b,0x48,0x88,0xe,0x19,0x69,0x9,0x9,0x9,0x9,0x9,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0xb,0x28,0x28,0x3f,0x48,0x48,0x88,0xf,0x18,0x69,0x9,0x9,0x9,0x9,0x9,0x8,0xfc,0x40,0x48,0xfc,0x88,0x88,0x88,0xfe,0x0,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x8,0x28,0x28,0x3e,0x49,0x48,0x8b,0xe,0x18,0x69,0x9,0x9,0x9,0x9,0x9,0x20,0x20,0xa0,0xa8,0xfc,0x20,0x24,0xfe,0x0,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x8,0x2b,0x28,0x3e,0x49,0x4f,0x88,0xd,0x19,0x69,0x9,0x9,0x8,0x8,0x8,0x40,0x48,0xfc,0xa0,0x98,0x8,0xfe,0x8,0xe8,0x28,0x28,0x28,0xe8,0x8,0x28,0x10,
++0x8,0x9,0x29,0x29,0x3f,0x49,0x4b,0x8d,0x9,0x19,0x6f,0x8,0x9,0x9,0xa,0xc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0xfe,0x0,0x10,0x8,0x4,0x4,
++0x10,0x10,0x57,0x51,0x7d,0x92,0x14,0x17,0x19,0x35,0xd5,0x12,0x13,0x12,0x14,0x18,0x10,0x10,0x7c,0x14,0xfe,0x14,0x7c,0x10,0x7c,0x10,0xfe,0x10,0x10,0x96,0x7c,0x0,
++0x10,0x10,0x53,0x52,0x7e,0x93,0x12,0x12,0x1f,0x33,0xd3,0x15,0x15,0x19,0x11,0x11,0x40,0x24,0xfe,0x4,0x4,0xfc,0x0,0x4,0xfe,0x54,0x54,0xfc,0x54,0x54,0x54,0xc,
++0x10,0x10,0x5f,0x50,0x7b,0x92,0x13,0x10,0x1f,0x34,0xd5,0x15,0x15,0x15,0x14,0x14,0x80,0x44,0xfe,0x0,0xf8,0x8,0xf8,0x0,0xfc,0x4,0xf4,0x14,0x14,0xf4,0x14,0x8,
++0x8,0x7f,0x8,0x3e,0x8,0x7e,0x9,0x0,0x7f,0x1,0x3f,0x1,0xff,0x1,0x5,0x2,0x4,0xfe,0x44,0x44,0x44,0x94,0x8,0xf0,0x0,0x10,0xf8,0x0,0xfe,0x0,0x0,0x0,
++0x10,0x9,0x41,0x26,0x8,0x70,0x23,0xc,0x7f,0x1,0x3f,0x1,0xff,0x1,0x5,0x2,0x40,0x50,0x4c,0x54,0x60,0xc0,0x0,0xf0,0x0,0x10,0xf8,0x0,0xfe,0x0,0x0,0x0,
++0x0,0xc,0xf2,0x12,0x14,0x78,0x17,0x12,0x1e,0xf2,0x12,0x14,0x24,0x29,0x40,0x0,0x0,0x86,0xb8,0x88,0x48,0x3e,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0x28,0x10,
++0x0,0xd,0xf1,0x12,0x14,0x78,0x17,0x10,0x17,0xfc,0x14,0x14,0x24,0x27,0x20,0x40,0x0,0x6,0x38,0x88,0x48,0x3e,0xc8,0x8,0xc8,0x7e,0x48,0x48,0x48,0xc8,0x28,0x10,
++0x0,0x3e,0x23,0x3e,0x21,0x3e,0x62,0xbe,0x0,0x3f,0x1,0x1f,0x1,0xff,0x1,0x3,0x40,0x28,0xfc,0x50,0xfe,0x20,0xf8,0x20,0x20,0xf8,0x0,0xf0,0x4,0xfe,0x0,0x0,
++0x2,0x3f,0x2,0xff,0x2,0xf,0x34,0xc7,0x0,0x3f,0x2,0x1f,0x2,0xff,0x2,0x1,0x20,0xc0,0x84,0xfe,0x0,0xe0,0x8,0xf8,0x30,0xc0,0x0,0xf0,0x0,0xfa,0x2,0xfe,
++0x4,0x1e,0xf0,0x10,0x11,0x10,0x7d,0x11,0x11,0x1e,0xf3,0x10,0x10,0x10,0xf,0x0,0x40,0x40,0x88,0x84,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x22,0x22,0xfe,0x0,
++0x3f,0x1,0x1f,0x1,0x7f,0x1,0x0,0x4,0x79,0x10,0x7c,0x10,0xff,0x10,0x14,0x18,0xf8,0x0,0xf0,0x0,0xf8,0x2,0xfe,0x0,0xf8,0x40,0xf8,0x40,0xfc,0x40,0x42,0x3e,
++0x0,0x18,0xe0,0x2e,0x23,0x24,0xf4,0x2e,0x22,0x22,0xfb,0x24,0x2a,0x31,0x20,0x1f,0x20,0x28,0xfc,0x28,0xfe,0x28,0xf8,0x20,0xf8,0x20,0xfc,0x20,0x22,0xfe,0x2,0xfe,
++0x10,0x10,0x25,0x7e,0x10,0xff,0x28,0x4c,0x92,0x24,0x49,0x12,0x64,0x8,0x30,0xc0,0x8,0x3c,0xe0,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x22,0x22,0x1e,
++0x8,0x8,0x15,0x22,0x7f,0x80,0x71,0x55,0x55,0x75,0x55,0x55,0x75,0x51,0x55,0x52,0x8,0x3c,0xe0,0x20,0x20,0xa8,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x22,0x22,0x1e,
++0x8,0x49,0x2a,0x7f,0x41,0x5d,0x55,0x5d,0x41,0x3f,0x2,0x1f,0x2,0xff,0x2,0x1,0x20,0x20,0x24,0x7e,0xa8,0x10,0x28,0xc6,0x30,0xc0,0x0,0xf0,0x0,0xfa,0x2,0xfe,
++0x1,0x39,0xe2,0x27,0x2a,0x23,0xf2,0x2f,0x20,0x23,0xfa,0x23,0x22,0x23,0x20,0x1f,0x0,0xf0,0x20,0xf8,0x48,0xf8,0x48,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xfa,0x2,0xfe,
++0x2,0x39,0xe7,0x21,0x25,0x23,0xf1,0x2f,0x20,0x23,0xfa,0x23,0x22,0x23,0x20,0x1f,0x10,0x20,0xfc,0x20,0x28,0x30,0x24,0xfe,0x0,0xf0,0x10,0xf0,0x10,0xf2,0x2,0xfe,
++0x77,0x55,0x77,0x55,0x77,0x55,0x77,0x24,0x3f,0x64,0x7f,0xa4,0x3f,0x24,0x3f,0x20,0x8,0x3c,0xe0,0x20,0x20,0x28,0xfc,0x20,0xa0,0x24,0xfe,0x20,0x20,0x22,0xa2,0x1e,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x0,0x2,0x2,0x2,0x2,0x2,0x4,0x4,0x8,0x10,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0xa,0xa,0x4,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x0,0x8,0x8,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0x88,0x88,0x88,0x88,0x88,0x88,0x8a,0x8a,0x84,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x2,0x2,0x22,0x22,0x22,0x22,0x22,0x3f,0x0,0x0,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0x8,0x28,0x28,0x28,0x28,0x28,0xea,0x2a,0x4,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x0,0x12,0x12,0x12,0x12,0x12,0x12,0x22,0x22,0x40,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0x4a,0x4a,0x44,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x4,0xf,0x10,0x6d,0x2,0xd,0x76,0x1,0xc,0x3,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0xc8,0x88,0x8,0x8,0x88,0x78,0xa,0xa,0x4,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x0,0x7f,0x9,0x49,0x29,0x29,0x9,0x9,0xff,0x0,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0xe8,0x8,0x28,0x48,0x88,0x8,0xa,0xfa,0x4,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x0,0x3f,0x22,0x22,0x2f,0x22,0x25,0x28,0x3f,0x20,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0xe8,0x28,0x28,0xa8,0x28,0x28,0xaa,0xea,0x24,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x4,0x7f,0x4,0x3f,0x20,0x3f,0xa,0xa,0x12,0x61,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0xe8,0x8,0x88,0x88,0x88,0x8,0x2a,0x2a,0xe4,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x0,0x3f,0x26,0x3f,0x0,0x7f,0x49,0x49,0xff,0x0,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0xc8,0x48,0xc8,0x8,0xe8,0x28,0x2a,0xfa,0x4,
++0x10,0x10,0x11,0x1f,0x22,0x42,0x12,0x12,0x12,0x14,0x14,0x8,0x14,0x22,0x43,0x81,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,
++0x8,0x8,0xa,0xff,0x8,0x7f,0x49,0x49,0x7f,0x49,0x1c,0x2b,0x49,0x88,0x9,0xa,0x40,0x40,0x44,0x7e,0x48,0x88,0x48,0x48,0x48,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x8,0x10,0x7e,0x42,0x7e,0x42,0x7f,0x10,0xa,0xff,0x10,0x1e,0x22,0x22,0x4b,0x86,0x40,0x40,0x44,0x7e,0x88,0x88,0x48,0x48,0x48,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x8,0x48,0x4b,0x48,0x4b,0x7c,0x41,0x40,0x7a,0x49,0x48,0x4f,0x48,0x48,0x88,0x3,0x40,0x48,0xfc,0x40,0xfe,0x2,0x24,0xa0,0x20,0x20,0x24,0xfe,0x40,0x50,0x8c,0x4,
++0x9,0x49,0x4f,0x49,0x49,0x7d,0x41,0x41,0x78,0x48,0x4b,0x48,0x48,0x49,0x8a,0x8,0x48,0x48,0xfe,0x48,0x48,0x78,0x0,0xfc,0x20,0x24,0xfe,0x70,0xa8,0x2e,0x24,0x20,
++0x10,0x50,0x57,0x54,0x57,0x7c,0x47,0x44,0x75,0x55,0x55,0x55,0x55,0x55,0x99,0x11,0x40,0x24,0xfe,0x4,0xfc,0x28,0xfe,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x24,0x24,0x2c,
++0x0,0x0,0x3f,0x11,0x9,0x9,0x7f,0x2,0xff,0x4,0x7,0xa,0x11,0x20,0x43,0x1c,0x10,0x78,0x80,0x10,0x10,0x20,0xfc,0x0,0xfe,0x0,0xf0,0x20,0x40,0x80,0x60,0x1e,
++0x4,0xe,0xf0,0x3,0x93,0x55,0x1,0x9,0xff,0x9,0x49,0x29,0x9,0xa,0x2c,0x11,0x24,0x3e,0x20,0xfe,0x22,0xf8,0x24,0x3c,0x0,0x78,0x48,0x48,0x48,0x4a,0x8a,0x6,
++0x2,0x3f,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x3e,0x22,0x22,0x42,0x42,0x8a,0x4,0x8,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x8,0x8,0x28,0x10,
++0x4,0x3e,0x24,0x24,0x24,0x3f,0x24,0x24,0x24,0x3c,0x24,0x24,0x44,0x44,0x94,0x8,0x8,0xfc,0x0,0x0,0x4,0xfe,0x80,0x80,0x84,0xfe,0x4,0x4,0x4,0x44,0x28,0x10,
++0x2,0x3f,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x3e,0x22,0x22,0x42,0x42,0x8a,0x4,0x8,0x18,0x20,0x40,0x84,0xc,0x10,0x20,0x40,0x80,0x4,0xc,0x10,0x20,0x40,0x80,
++0x2,0x1,0xff,0x10,0x10,0x1f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x10,0x0,0x4,0xfe,0x0,0x10,0xf8,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x4,0x3e,0x24,0x24,0x25,0x3c,0x24,0x24,0x27,0x3c,0x24,0x24,0x44,0x45,0x95,0xa,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0x8,0x8,0x8,
++0x4,0x3f,0x24,0x24,0x24,0x3c,0x27,0x24,0x24,0x3c,0x24,0x24,0x44,0x45,0x96,0x8,0x8,0xfc,0x0,0x0,0x0,0x4,0xfe,0x90,0x90,0x90,0x90,0x90,0x92,0x12,0xe,0x0,
++0x4,0x3e,0x24,0x24,0x24,0x3f,0x24,0x24,0x24,0x3c,0x24,0x24,0x44,0x44,0x95,0xa,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x50,0x50,0x50,0x50,0x88,0xc8,0xa8,0x6,0x4,
++0x4,0x3e,0x24,0x24,0x27,0x3c,0x24,0x24,0x24,0x3d,0x25,0x26,0x44,0x44,0x95,0x8,0x40,0x40,0x40,0x44,0xfe,0x80,0x80,0xa0,0xa0,0x20,0x40,0x50,0x48,0x84,0xfc,0x4,
++0x4,0x3e,0x24,0x27,0x24,0x3d,0x25,0x25,0x25,0x3d,0x24,0x24,0x44,0x44,0x94,0x8,0x20,0x20,0x24,0xfe,0x20,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x22,0x22,0x1e,0x0,
++0x4,0x3e,0x24,0x24,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x45,0x45,0x95,0x9,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x54,0x4c,0x8c,0x4,0x4,0x14,0x8,
++0x10,0xc,0x3,0xc,0x12,0xff,0x4,0x8,0x1f,0x28,0xcf,0x8,0xf,0x8,0x8,0x8,0x10,0x70,0x80,0x60,0x14,0xfe,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x4,0x3e,0x24,0x24,0x24,0x3d,0x26,0x24,0x24,0x3c,0x24,0x24,0x44,0x44,0x95,0xa,0x80,0x80,0x80,0xfe,0x82,0x24,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x88,0x6,0x4,
++0x4,0x3e,0x24,0x24,0x27,0x3c,0x24,0x24,0x24,0x3c,0x24,0x24,0x45,0x45,0x96,0x8,0x80,0xa0,0x90,0x94,0xfe,0xa0,0xa4,0xa4,0xa8,0xa8,0xb0,0xa0,0x62,0x22,0x1e,0x0,
++0x4,0x3e,0x24,0x27,0x24,0x3c,0x25,0x25,0x27,0x3c,0x24,0x24,0x45,0x46,0x94,0x8,0x40,0x40,0x44,0xfe,0x80,0xa0,0x20,0x24,0xfe,0x20,0xa8,0xa4,0x26,0x22,0xa0,0x40,
++0x4,0x3e,0x24,0x24,0x24,0x3c,0x24,0x27,0x24,0x3c,0x24,0x24,0x44,0x44,0x94,0x8,0x40,0x40,0x48,0x7c,0x40,0x40,0x44,0xfe,0x40,0x40,0x60,0x50,0x4c,0x44,0x40,0x40,
++0x4,0x3e,0x24,0x24,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x45,0x45,0x95,0xa,0x24,0x3e,0x20,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x24,0x44,0x44,0x94,0x8,0x4,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,0x20,
++0x0,0x3c,0x24,0x25,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x45,0x44,0x94,0x8,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,
++0x1,0x1,0x3f,0x21,0x3f,0x21,0x3f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x4,0x3e,0x24,0x24,0x25,0x3d,0x26,0x24,0x24,0x3c,0x24,0x24,0x44,0x44,0x94,0x8,0x80,0x80,0x84,0xfe,0x40,0x40,0x48,0x7c,0x40,0x48,0x7c,0x40,0x40,0x40,0x40,0x40,
++0x4,0x3e,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x45,0x45,0x96,0x8,0x8,0x1c,0xe0,0x10,0x50,0x50,0x50,0x50,0x48,0x48,0x48,0x44,0x54,0x54,0x72,0x0,
++0x4,0x3e,0x24,0x24,0x25,0x3e,0x24,0x24,0x25,0x3c,0x24,0x25,0x44,0x44,0x94,0xb,0x40,0x40,0xa0,0xa0,0x18,0x36,0x40,0x88,0x10,0x20,0x44,0x88,0x10,0x20,0xc0,0x0,
++0x4,0x3e,0x24,0x24,0x25,0x3e,0x24,0x24,0x24,0x3c,0x24,0x24,0x44,0x44,0x94,0x8,0x80,0x80,0x84,0xfe,0x4,0x4,0xf4,0x94,0x94,0x94,0x94,0xf4,0x84,0x4,0x14,0x8,
++0x4,0x3e,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x45,0x45,0x95,0x9,0x8,0x1c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x10,0x10,0x10,0x2a,0x4a,0xa6,0x12,
++0x4,0x3f,0x24,0x24,0x24,0x3c,0x24,0x27,0x24,0x3d,0x24,0x24,0x44,0x44,0x97,0x8,0x0,0xfc,0x8,0x10,0x20,0x58,0x86,0x2,0x0,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x4,0x3e,0x25,0x24,0x24,0x3c,0x27,0x24,0x24,0x3c,0x24,0x24,0x44,0x45,0x96,0x8,0x20,0x20,0x24,0xac,0xb0,0x24,0xfe,0x50,0x50,0x50,0x50,0x90,0x92,0x12,0xe,0x0,
++0x0,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x45,0x45,0x95,0x9,0x4,0xfe,0x4,0x14,0xfc,0x4,0x4,0x74,0x54,0x54,0x54,0x74,0x4,0x4,0x14,0x8,
++0x0,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x45,0x45,0x95,0x9,0x4,0xfe,0x4,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x54,0x4c,0x8c,0x4,0xfc,0x4,
++0x4,0x3e,0x24,0x24,0x25,0x3e,0x24,0x24,0x24,0x3f,0x24,0x24,0x44,0x44,0x95,0x8,0x20,0x20,0x50,0x88,0x6,0x10,0xf8,0x0,0x4,0xfe,0x40,0x40,0x48,0x84,0xfc,0x4,
++0x0,0x3d,0x24,0x24,0x24,0x3c,0x25,0x24,0x27,0x3c,0x24,0x25,0x46,0x44,0x94,0x8,0x0,0x8,0x90,0x60,0x50,0x8c,0x24,0x20,0xfe,0x20,0xa8,0x26,0x22,0x20,0xa0,0x40,
++0x4,0x3e,0x24,0x27,0x24,0x3c,0x24,0x25,0x24,0x3c,0x24,0x25,0x44,0x44,0x94,0x9,0x40,0x20,0x4,0xfe,0x40,0x48,0x88,0xf4,0x24,0x48,0x88,0x10,0x28,0x44,0x82,0x2,
++0x5,0x3e,0x24,0x27,0x24,0x3c,0x24,0x24,0x27,0x3c,0x24,0x24,0x45,0x45,0x96,0x8,0x8,0x90,0x0,0xfc,0x90,0x90,0x90,0x94,0xfe,0x90,0x90,0x90,0x10,0x10,0x10,0x10,
++0x4,0x3e,0x24,0x24,0x25,0x3c,0x24,0x24,0x27,0x3c,0x24,0x24,0x44,0x44,0x95,0xa,0x0,0x88,0x50,0x0,0xfc,0x20,0x20,0x24,0xfe,0x20,0x50,0x50,0x88,0x88,0x4,0x2,
++0x4,0x3e,0x25,0x24,0x24,0x3c,0x27,0x24,0x24,0x3c,0x24,0x24,0x45,0x46,0x94,0x8,0x20,0x20,0x24,0xa4,0xa8,0x20,0xfe,0x20,0x60,0x70,0xa8,0xa8,0x26,0x24,0x20,0x20,
++0x0,0x3c,0x27,0x24,0x24,0x3d,0x26,0x24,0x25,0x3e,0x24,0x25,0x46,0x44,0x94,0x8,0x0,0x4,0xfe,0x40,0x84,0x4c,0x70,0xa0,0x30,0x70,0xa8,0x28,0x26,0x24,0xa0,0x40,
++0x0,0x3d,0x25,0x25,0x25,0x3d,0x24,0x24,0x25,0x3d,0x25,0x25,0x45,0x45,0x95,0x9,0x4,0xfe,0x4,0x4,0x4,0xfc,0x20,0x24,0xfe,0x24,0x24,0x54,0x8c,0x4,0x14,0x8,
++0x4,0x3e,0x24,0x24,0x24,0x3d,0x26,0x24,0x24,0x3d,0x24,0x24,0x44,0x44,0x97,0x8,0x20,0x20,0xa8,0xa8,0xa8,0x74,0x22,0x20,0x28,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x4,0x3e,0x25,0x25,0x24,0x3c,0x25,0x24,0x24,0x3c,0x27,0x24,0x44,0x44,0x94,0x8,0x8,0x1c,0xe0,0x4,0xa4,0xa8,0xfc,0x10,0x20,0x24,0xfe,0x20,0x20,0x20,0xa0,0x40,
++0x4,0x3e,0x25,0x25,0x26,0x3c,0x24,0x24,0x27,0x3c,0x24,0x24,0x44,0x45,0x96,0x8,0x40,0x20,0xfe,0x2,0x14,0xf8,0x0,0x4,0xfe,0x90,0x90,0x90,0x92,0x12,0xe,0x0,
++0x0,0x7b,0x4a,0x4a,0x4b,0x7a,0x4a,0x4b,0x4a,0x7a,0x4a,0x4a,0x4b,0x4a,0xac,0x10,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0xa8,0xb0,0xa8,0xa8,0xa4,0x24,0x22,0xa0,0x40,
++0x4,0x3e,0x27,0x24,0x25,0x3c,0x27,0x24,0x25,0x3d,0x25,0x25,0x45,0x45,0x95,0x9,0x20,0x24,0xfe,0x20,0xfc,0x20,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x4,0x14,0x8,
++0x8,0x7c,0x48,0x4f,0x48,0x79,0x4a,0x4f,0x4a,0x7b,0x4a,0x4b,0x4a,0x48,0xa8,0x10,0x40,0x40,0x44,0xfe,0xa0,0x10,0x48,0xfe,0x48,0xf8,0x48,0xf8,0x48,0x40,0x44,0x3c,
++0x4,0x3e,0x24,0x27,0x24,0x3c,0x24,0x27,0x24,0x3c,0x24,0x27,0x44,0x44,0x94,0x8,0x50,0x50,0x54,0xde,0x50,0x50,0x54,0xde,0x50,0x50,0x54,0xde,0x50,0x50,0x50,0x50,
++0x4,0x3e,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x3d,0x24,0x24,0x44,0x45,0x96,0x8,0x20,0xa4,0x2e,0x24,0x24,0xac,0x24,0x24,0xfc,0x24,0x50,0x50,0x88,0x6,0x4,0x0,
++0x0,0x7a,0x4b,0x4a,0x4c,0x79,0x48,0x48,0x4b,0x78,0x49,0x49,0x49,0x4a,0xa8,0x10,0x40,0x20,0xfe,0x2,0x4,0xfc,0x0,0x4,0xfe,0x20,0x20,0x28,0x26,0x22,0xa0,0x40,
++0x0,0x78,0x4b,0x4a,0x4c,0x78,0x4b,0x48,0x48,0x79,0x49,0x49,0x49,0x4a,0xac,0x10,0x40,0x20,0xfe,0x2,0x4,0x0,0xfe,0x20,0x20,0x28,0x3c,0x20,0x20,0xa6,0x7c,0x0,
++0x0,0x78,0x4f,0x49,0x49,0x79,0x4a,0x4f,0x49,0x79,0x4d,0x4b,0x49,0x4a,0xac,0x10,0x10,0x10,0x7c,0x14,0xfe,0x14,0x7c,0x10,0x7c,0x10,0xfe,0x10,0x10,0x96,0x7c,0x0,
++0x8,0x7c,0x4b,0x48,0x4b,0x78,0x4f,0x48,0x49,0x7b,0x4c,0x4b,0x48,0x48,0xa8,0x13,0x40,0x48,0xfc,0x40,0xfc,0x40,0xfe,0xa0,0x10,0xf8,0x46,0xf8,0x40,0xa0,0x98,0x8,
++0x0,0x3c,0x27,0x24,0x24,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x45,0x45,0x95,0x9,0x20,0x24,0xfe,0x20,0x24,0xfe,0x4,0x54,0xfc,0x24,0x24,0xfc,0x24,0x24,0x24,0xc,
++0x8,0x7c,0x4b,0x48,0x48,0x7b,0x4a,0x4a,0x4a,0x7a,0x4a,0x4a,0x4a,0x4a,0xab,0x12,0x0,0x4,0xfe,0x40,0x84,0xfe,0x94,0x94,0xf4,0x94,0x94,0xf4,0x94,0x94,0xfc,0x4,
++0x8,0x7d,0x49,0x49,0x49,0x79,0x49,0x49,0x48,0x7b,0x4a,0x4a,0x4a,0x4a,0xaf,0x10,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xfc,0x94,0x94,0x94,0x94,0xfe,0x0,
++0x0,0x7b,0x4a,0x4a,0x4b,0x78,0x4b,0x48,0x4f,0x79,0x49,0x48,0x48,0x48,0xa8,0x10,0x8,0xbc,0xa8,0xa8,0xb8,0x0,0xf8,0x0,0xfe,0x0,0xf8,0x8,0x8,0x88,0x50,0x20,
++0x8,0x7c,0x48,0x49,0x4b,0x7c,0x4b,0x4a,0x4a,0x7b,0x4a,0x4a,0x4b,0x4a,0xaa,0x12,0x40,0x40,0xa0,0x10,0xf8,0x6,0xc4,0x54,0x54,0xd4,0x54,0x54,0xd4,0x44,0x54,0xc8,
++0x0,0x7a,0x49,0x48,0x4b,0x78,0x4f,0x48,0x49,0x7a,0x4c,0x4b,0x48,0x48,0xab,0x10,0x40,0x48,0x50,0x40,0xfc,0x40,0xfe,0xa0,0x10,0x4e,0x44,0xf8,0x40,0x48,0xfc,0x0,
++0x0,0x7a,0x49,0x4b,0x48,0x7f,0x48,0x49,0x4a,0x7c,0x4f,0x48,0x49,0x48,0xa9,0x16,0x40,0x48,0x50,0xfc,0x40,0xfe,0xa0,0x10,0x4e,0x44,0xfe,0x90,0x10,0xe0,0x18,0x4,
++0x0,0x7b,0x48,0x49,0x49,0x79,0x49,0x48,0x4b,0x7a,0x4a,0x4b,0x4a,0x4a,0xaa,0x12,0x4,0xfe,0x0,0xfc,0x4,0x4,0xfc,0x0,0xfe,0x8a,0x52,0xfe,0x22,0x22,0x2a,0x4,
++0x10,0x8,0xfe,0x11,0x1e,0x22,0x2a,0x44,0x9f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x40,0x44,0xfe,0x18,0xe4,0xa8,0x90,0xc8,0xf6,0x10,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x8,0x7c,0x4b,0x4a,0x4c,0x79,0x49,0x49,0x49,0x79,0x49,0x4f,0x48,0x48,0xa9,0x12,0x40,0x20,0xfe,0x2,0x34,0xc0,0x8,0xfc,0x10,0x10,0x14,0xfe,0x0,0x90,0xc,0x4,
++0x0,0x7a,0x49,0x48,0x4f,0x78,0x4f,0x48,0x49,0x7a,0x4d,0x49,0x48,0x49,0xaa,0x10,0x40,0x48,0x50,0x40,0xfc,0x40,0xfe,0xa0,0x10,0x4e,0x54,0x50,0xe0,0x50,0x4c,0xc0,
++0x0,0x78,0x4b,0x4a,0x4d,0x78,0x4b,0x48,0x48,0x79,0x48,0x49,0x48,0x48,0xab,0x10,0x40,0x20,0xfe,0x52,0x8c,0x0,0xfe,0x40,0x88,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x8,0x7d,0x48,0x48,0x4b,0x7a,0x4d,0x49,0x49,0x79,0x48,0x49,0x49,0x49,0xa9,0x11,0x20,0xfc,0x88,0x50,0xfe,0x22,0xfc,0x24,0x24,0x2c,0x20,0xfc,0x4,0x4,0xfc,0x4,
++0x1,0x79,0x4f,0x49,0x4b,0x78,0x4b,0x4a,0x4a,0x7a,0x4b,0x48,0x4a,0x49,0xae,0x10,0x8,0x8,0xc8,0x3e,0x88,0x8,0xbe,0xa2,0xa2,0x94,0x94,0x8,0x88,0xd4,0x14,0x62,
++0x8,0x7f,0x48,0x4b,0x4a,0x7c,0x48,0x4b,0x48,0x79,0x4a,0x49,0x4a,0x49,0xaa,0x10,0x88,0xfe,0x88,0xfe,0x2,0xf8,0x0,0xfe,0x80,0x44,0xa8,0x70,0xa8,0x26,0xa4,0x40,
++0x9,0x7d,0x49,0x49,0x48,0x7b,0x4a,0x4a,0x4b,0x78,0x4f,0x48,0x48,0x49,0xaa,0x10,0xfc,0x4,0x4,0xfc,0x0,0xde,0x52,0x52,0xde,0x20,0xfe,0x70,0xa8,0x2e,0x24,0x20,
++0x8,0x7f,0x48,0x4b,0x4a,0x7a,0x4a,0x4b,0x48,0x7b,0x4a,0x4b,0x4a,0x4b,0xa8,0x17,0x40,0xfe,0x0,0xfc,0x94,0xf4,0x94,0xfc,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x0,0xfe,
++0x8,0x7c,0x4b,0x4a,0x4b,0x7a,0x4b,0x4a,0x4b,0x7a,0x4b,0x4a,0x4a,0x4a,0xad,0x10,0x40,0x24,0xfe,0x88,0xfe,0x50,0xfc,0x54,0xfe,0x54,0xfc,0x50,0xd8,0xd4,0x52,0x50,
++0x0,0x7a,0x49,0x4f,0x48,0x79,0x4a,0x4a,0x4b,0x7a,0x4c,0x4b,0x49,0x4a,0xac,0x10,0x40,0x48,0x50,0xfc,0xe0,0x50,0x48,0x8,0xbe,0xa8,0xa8,0x28,0x7e,0x8,0x8,0x8,
++0x0,0x20,0x24,0x3e,0x20,0x21,0x22,0x3f,0x2,0x2,0x1a,0xe2,0x2,0x14,0x9,0x2,0x40,0x40,0x40,0x7e,0x82,0x24,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x6,0x4,
++0x42,0x24,0x18,0x24,0x42,0x1,0xff,0x28,0x3e,0x6a,0xaa,0x2a,0x2a,0x2e,0x9,0xa,0x40,0x40,0x40,0x7e,0x82,0x24,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x6,0x4,
++0x10,0x12,0xff,0x10,0x28,0x45,0xff,0x2,0x7a,0x4a,0x4a,0x4a,0x7a,0x2,0xb,0x6,0x40,0x40,0x40,0x7e,0x82,0x24,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x6,0x4,
++0x2,0xf,0x78,0x8,0x8,0xff,0x28,0x4b,0x49,0x49,0x6b,0x49,0x49,0x7f,0x41,0x2,0x40,0x40,0x40,0x7e,0x82,0x24,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x6,0x4,
++0x10,0xa,0x7f,0x0,0x22,0x15,0xff,0x0,0x3e,0x22,0x22,0x3e,0x22,0x22,0x3f,0x22,0x40,0x40,0x40,0x7e,0x82,0x24,0xa0,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x6,0x4,
++0x8,0x14,0x22,0x7f,0x80,0x3e,0x23,0x3e,0x0,0x77,0x11,0x55,0x33,0x55,0x11,0x33,0x40,0x40,0x40,0x7e,0x42,0x84,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x6,0x4,
++0x4,0x7e,0x44,0x45,0x46,0x6d,0x6d,0x55,0x55,0x55,0x6d,0x6d,0x44,0x44,0x43,0x80,0x80,0x88,0xfc,0x8,0x8,0xe8,0x28,0x28,0xe8,0x28,0x10,0x4,0xfe,0x2,0xfe,0x0,
++0x0,0x23,0x12,0x12,0xff,0x2,0x4a,0x4a,0x4a,0x52,0x52,0x1e,0xf3,0x44,0x4,0x18,0x8,0xfc,0x8,0x8,0x18,0x98,0xa8,0xa8,0x48,0x48,0xa8,0x98,0x1a,0xa,0xa,0x4,
++0x4,0x7e,0x44,0x44,0x44,0x6c,0x6c,0x54,0x54,0x54,0x6f,0x6c,0x44,0x44,0x43,0x80,0x8,0xfc,0x88,0xf8,0x88,0xf8,0x88,0xf8,0x88,0x88,0xfe,0x50,0x8a,0x2,0xfe,0x0,
++0x0,0x7d,0x45,0x45,0x45,0x6d,0x6d,0x54,0x55,0x54,0x6c,0x6c,0x44,0x44,0x43,0x80,0x20,0xac,0x24,0xac,0x24,0x24,0xfc,0x20,0xfc,0x88,0x50,0x20,0x52,0x8a,0xfe,0x0,
++0x10,0x18,0x14,0xfe,0x10,0x28,0x44,0x82,0x24,0x36,0xff,0x24,0x24,0x5a,0x49,0x92,0x8,0xfc,0x88,0x88,0x88,0xd8,0xd8,0xa8,0xa8,0xa8,0xd8,0xd8,0x8a,0x8a,0xa,0x4,
++0x4,0x7e,0x44,0x44,0x45,0x6c,0x6d,0x54,0x56,0x55,0x6c,0x6d,0x46,0x44,0x43,0x80,0x20,0x20,0xa4,0xa8,0x50,0x88,0x6,0x88,0xaa,0xdc,0x88,0x54,0x22,0x2,0xfe,0x0,
++0x2,0x3f,0x22,0x22,0x22,0x22,0x41,0x80,0x7f,0x21,0x22,0x14,0x8,0x14,0x23,0xc1,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,
++0x10,0xfe,0x10,0x7c,0x0,0xfe,0x83,0xbe,0x1,0x7c,0x4,0x7c,0x40,0x7c,0x4,0x1b,0x8,0xfc,0x88,0x88,0x88,0x88,0x6,0x0,0xfc,0x84,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x8,0x7f,0x8,0x3e,0x0,0xff,0x91,0x92,0x7f,0x28,0x28,0x7e,0x8,0xff,0x8,0xb,0x8,0x7c,0x48,0x48,0x48,0x48,0x86,0x0,0xfc,0x84,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x8,0x7f,0x8,0x3e,0x0,0xff,0x91,0x9c,0x25,0x7e,0xaa,0x3e,0x2a,0x3e,0x4a,0x8b,0x8,0xfc,0x88,0x88,0x88,0x88,0x6,0x0,0xfc,0x84,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x2,0x2,0x7e,0x2,0x3e,0x2,0x7e,0x2,0x1,0xff,0x8,0x4,0x3,0x2,0xc,0x70,0x80,0x88,0xfc,0x80,0xf8,0x80,0xfc,0x80,0x4,0xfe,0x20,0x40,0x80,0x80,0x60,0x1c,
++0x1,0xff,0x18,0x6,0x1,0xe,0xf2,0x2e,0x22,0x2e,0x22,0x2e,0x22,0x3f,0x20,0x40,0x0,0xfe,0x30,0xc0,0x0,0xe0,0x9e,0xe8,0x88,0xe8,0x88,0xe8,0x88,0xf8,0x8,0x8,
++0x4,0x42,0x20,0x4,0xff,0x14,0x55,0x25,0x25,0x55,0x55,0x4c,0x8d,0x6,0x4,0x4,0x4,0xfe,0x44,0x54,0xfc,0x44,0xf4,0x54,0xf4,0x54,0xf4,0xe4,0x54,0x4c,0x54,0x48,
++0x20,0x18,0x8,0x0,0xfe,0x20,0x25,0x3e,0x24,0x24,0x24,0x24,0x44,0x44,0x94,0x8,0x20,0x20,0x50,0x50,0x88,0x88,0x6,0x44,0x30,0x10,0x80,0x40,0x30,0x18,0x8,0x0,
++0x20,0x18,0x8,0x1,0xfe,0x20,0x25,0x3e,0x25,0x25,0x25,0x25,0x45,0x45,0x94,0x8,0x80,0x80,0x84,0xfe,0x20,0x24,0xfe,0x20,0xfc,0x24,0x24,0x24,0x34,0x28,0x20,0x20,
++0x20,0x18,0x8,0x1,0xfe,0x21,0x24,0x3e,0x25,0x24,0x24,0x27,0x44,0x44,0x94,0x8,0x80,0x84,0xfe,0x0,0x18,0xe0,0x28,0x3c,0xe0,0x24,0x3e,0xe0,0x20,0x22,0x22,0x1e,
++0x21,0x19,0x9,0xfe,0x24,0x21,0x3d,0x25,0x25,0x27,0x25,0x25,0x45,0x45,0x95,0xa,0x0,0x4,0xfe,0x0,0x8,0xfc,0x8,0x48,0x28,0xfe,0x8,0x8,0x8,0x8,0x28,0x10,
++0x20,0x18,0x8,0x1,0xfe,0x21,0x21,0x3d,0x26,0x24,0x25,0x24,0x44,0x44,0x97,0x8,0x80,0x80,0x84,0xfe,0x20,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x20,0x18,0x8,0x0,0xfd,0x22,0x20,0x3c,0x24,0x24,0x24,0x24,0x44,0x45,0x95,0xa,0x80,0x80,0x84,0xfe,0x0,0xfc,0x84,0x84,0xfc,0x80,0xa4,0xa8,0xb0,0x22,0x22,0x1e,
++0x20,0x18,0x8,0x1,0xfe,0x23,0x20,0x3c,0x25,0x24,0x24,0x24,0x44,0x45,0x95,0xa,0x80,0x84,0xfe,0x40,0x24,0xfe,0x40,0x88,0xfc,0x0,0xa8,0xa8,0xa8,0x2a,0x2a,0x26,
++0x20,0x18,0x9,0x2,0xfe,0x20,0x20,0x3c,0x27,0x24,0x25,0x25,0x45,0x45,0x94,0x8,0x80,0x84,0xfe,0x20,0xf8,0x20,0x50,0x88,0xfe,0x8,0xe8,0x28,0x28,0xe8,0x8,0x18,
++0x10,0x13,0x10,0x14,0x54,0x58,0x53,0x90,0x10,0x10,0x19,0x25,0x22,0x44,0x81,0x0,0x0,0xf8,0x10,0x20,0x40,0x84,0xfe,0xa4,0xa4,0xa4,0x24,0x44,0x44,0x84,0x28,0x10,
++0x10,0x10,0x10,0x17,0x54,0x58,0x53,0x90,0x10,0x17,0x10,0x28,0x24,0x44,0x80,0x0,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x40,0x44,0xfe,0x44,0x44,0x54,0x48,0x40,0x40,
++0x10,0x10,0x10,0x17,0x54,0x5a,0x52,0x92,0x12,0x13,0x10,0x28,0x24,0x44,0x80,0x0,0x40,0x40,0x44,0xfe,0x40,0x48,0x48,0x48,0x48,0xf8,0x48,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x10,0x10,0x14,0x55,0x59,0x52,0x95,0x19,0x11,0x11,0x29,0x25,0x45,0x80,0x0,0x40,0x40,0xa0,0xa0,0x10,0x10,0xe,0xf4,0x10,0x10,0x10,0x50,0x24,0x4,0xfc,0x0,
++0x10,0x10,0x17,0x10,0x54,0x54,0x58,0x91,0x13,0x15,0x11,0x29,0x25,0x45,0x41,0x81,0x0,0x4,0xfe,0x40,0x40,0x80,0x80,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x13,0x10,0x55,0x54,0x58,0x90,0x17,0x10,0x10,0x28,0x24,0x44,0x40,0x80,0x8,0x1c,0xe0,0x20,0x24,0xac,0xb0,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x10,0x10,0x13,0x54,0x54,0x58,0x90,0x11,0x10,0x10,0x28,0x24,0x44,0x43,0x80,0x40,0x20,0x24,0xfe,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x10,0x17,0x54,0x58,0x50,0x91,0x13,0x10,0x10,0x28,0x25,0x42,0x47,0x80,0x40,0x20,0x4,0xfe,0x40,0x40,0x80,0x8,0xf0,0x20,0x40,0x80,0x8,0x4,0xfc,0x4,
++0x1,0x2,0x4,0x8,0x3f,0x0,0x1f,0x10,0x10,0x1f,0x1,0x11,0x11,0x22,0xc,0x70,0x0,0x0,0x20,0x10,0xf8,0x0,0xf0,0x10,0x10,0xf0,0x8,0x10,0x20,0x80,0x60,0x1c,
++0x10,0x10,0x10,0x15,0x55,0x59,0x53,0x95,0x11,0x10,0x17,0x28,0x24,0x44,0x40,0x80,0xa0,0xa0,0xa0,0x24,0x28,0x30,0x64,0x1c,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x12,0x11,0x10,0x14,0x57,0x58,0x50,0x93,0x10,0x10,0x17,0x28,0x24,0x44,0x40,0x80,0x8,0x10,0xa0,0x8,0xfc,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x10,0x13,0x10,0x14,0x57,0x59,0x51,0x91,0x17,0x10,0x11,0x29,0x25,0x45,0x41,0x81,0x8,0xfc,0x80,0x88,0xfc,0x8,0x8,0x8,0xfe,0x0,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x14,0x55,0x59,0x52,0x95,0x18,0x10,0x13,0x2a,0x26,0x46,0x43,0x82,0x40,0x40,0xa0,0xa0,0x10,0x90,0x48,0xf6,0x14,0x20,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x24,0x22,0x20,0x24,0xac,0xb4,0xa4,0x24,0x25,0x26,0x24,0x24,0x54,0x4c,0x84,0x4,0x4,0xfe,0x4,0x4,0x44,0x24,0xa4,0x84,0x94,0xac,0xa4,0xe4,0x4,0x4,0x14,0x8,
++0x10,0x10,0x10,0x14,0x57,0x5a,0x53,0x92,0x13,0x10,0x10,0x2b,0x24,0x44,0x40,0x80,0x48,0x7c,0x40,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x1,0x11,0x11,0x11,0x22,0xc,0x30,0xc8,0x8,0x2a,0x2a,0x4d,0x14,0x12,0x20,0xc1,0x0,0x10,0x30,0x40,0x80,0x60,0x1e,0x24,0x20,0xa4,0xa8,0x30,0x50,0x48,0x8e,0x4,
++0x21,0x21,0x21,0x2f,0xa9,0xb1,0xa1,0x27,0x24,0x24,0x24,0x24,0x57,0x48,0x80,0x1,0x4,0x3e,0x24,0xe4,0x24,0x3c,0x24,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0x44,0x94,0x8,
++0x10,0x13,0x12,0x12,0x57,0x5a,0x52,0x93,0x10,0x10,0x13,0x29,0x24,0x40,0x47,0x80,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x40,0x20,0xfc,0x8,0x88,0x90,0xfe,0x0,
++0x10,0x13,0x12,0x12,0x57,0x5a,0x52,0x93,0x10,0x1f,0x12,0x12,0x2a,0x26,0x43,0x82,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x0,0xfe,0x88,0x50,0x20,0x90,0xe,0x4,
++0x10,0x13,0x12,0x12,0x57,0x5a,0x52,0x93,0x12,0x12,0x12,0x17,0x2a,0x2a,0x42,0x82,0x44,0xbe,0x24,0x24,0xa4,0x42,0x0,0xbc,0x4,0x24,0x28,0x90,0x10,0x28,0x4e,0x84,
++0x8,0xb,0xa,0x13,0x30,0x5f,0x90,0x11,0x16,0x11,0x9,0x9,0x12,0x4,0x18,0x60,0x8,0xfc,0x8,0xf8,0x40,0xfe,0xe0,0x50,0x4e,0x40,0x10,0x20,0xc0,0x40,0x30,0xe,
++0x10,0x10,0x17,0x14,0x54,0x5b,0x50,0x93,0x12,0x13,0x12,0x2b,0x24,0x40,0x47,0x80,0x80,0x40,0xfe,0x2,0x4,0xf8,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0x4,0xfe,0x0,
++0x10,0x10,0x13,0x12,0x56,0x5b,0x52,0x92,0x13,0x15,0x15,0x29,0x25,0x45,0x41,0x81,0x40,0x24,0xfe,0x4,0x4,0xfc,0x0,0x4,0xfe,0x54,0x54,0xfc,0x54,0x54,0x54,0xc,
++0x10,0x10,0x14,0x12,0x56,0x58,0x50,0x96,0x12,0x12,0x12,0x2a,0x26,0x45,0x88,0x0,0x8,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0xa4,0xa8,0x90,0xc8,0x84,0x6,0xfc,0x0,
++0x20,0x27,0x24,0x25,0xac,0xb5,0xa6,0x20,0x27,0x24,0x24,0x27,0x54,0x4c,0x87,0x4,0x84,0x7e,0x24,0x24,0xa4,0xa4,0x54,0x88,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x11,0x11,0x11,0x15,0x55,0x58,0x53,0x92,0x13,0x10,0x13,0x29,0x24,0x44,0x41,0x86,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x94,0xfc,0x0,0xfc,0x8,0x90,0x60,0x90,0xe,
++0x20,0x20,0x2f,0x21,0xa8,0xb7,0xa4,0x25,0x26,0x25,0x25,0x25,0x55,0x4c,0x84,0x4,0x80,0x44,0xfe,0x10,0xa4,0xfe,0xa4,0x14,0xc,0xf4,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x0,0x3f,0x21,0x3f,0x20,0x3f,0x40,0x7f,0x95,0x24,0xd,0x11,0x11,0x22,0xc,0x70,0x8,0x8,0x8,0x8,0x7e,0x8,0x28,0xa8,0x8,0xa8,0x10,0x10,0x20,0x80,0x60,0x1c,
++0x20,0x2f,0x24,0x22,0xa8,0xb2,0xa4,0x20,0x23,0x22,0x22,0x23,0x52,0x4a,0x83,0x2,0x84,0xfe,0xa4,0x94,0x84,0x94,0xa4,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x20,0x20,0x27,0x24,0xad,0xb4,0xa7,0x24,0x25,0x26,0x24,0x2f,0x50,0x49,0x86,0x18,0x40,0x84,0xfe,0x44,0x54,0x44,0xfc,0x44,0x54,0x4c,0x44,0xfe,0xa0,0x10,0xe,0x4,
++0x10,0x17,0x12,0x11,0x57,0x59,0x52,0x94,0x1b,0x12,0x12,0x13,0x2a,0x26,0x43,0x82,0x1c,0xe0,0x48,0x50,0xfe,0x50,0x48,0x4e,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x8,
++0x21,0x28,0x24,0x23,0xa8,0xb0,0xad,0x26,0x24,0x27,0x24,0x27,0x54,0x4a,0x91,0x0,0x4,0x88,0x0,0xfe,0x40,0xc0,0x24,0x68,0xb0,0x70,0xa8,0x26,0xa0,0x46,0xfc,0x0,
++0x4,0xfe,0x10,0x32,0xdc,0x28,0xdc,0x2a,0xd9,0x1,0x9,0x9,0x12,0x4,0x18,0xe0,0x4,0xfe,0x10,0x32,0xdc,0x28,0xdc,0x2a,0xd8,0x0,0x10,0x20,0x80,0x40,0x30,0xe,
++0x27,0x22,0x21,0x27,0xac,0xb7,0xa0,0x27,0x24,0x27,0x24,0x27,0x55,0x4d,0x86,0x4,0xfc,0x48,0x50,0xfc,0xa4,0xfc,0x0,0x88,0x88,0xfe,0x88,0xc8,0x28,0x8,0xa8,0x10,
++0x11,0x9,0x7f,0x48,0xbe,0x1c,0x2a,0x9,0x7f,0x2,0xd,0x39,0xc5,0x2,0x4,0x18,0x10,0x20,0xfe,0x22,0xfc,0x70,0xa8,0x20,0xfc,0x80,0x60,0x38,0x46,0x80,0x40,0x38,
++0x0,0x0,0x0,0x0,0x0,0x0,0x48,0x44,0x44,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x88,0x44,0x42,0x2,0x0,0x0,0x0,0x0,0x0,0x0,
++0x2,0x2,0x7f,0x2,0x3f,0x4,0xff,0x8,0x1f,0x24,0x42,0x80,0x0,0x24,0x22,0x42,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x20,0xfc,0x20,0x20,0xa0,0x40,0x88,0x44,0x44,
++0x0,0x78,0x48,0x49,0x4a,0x79,0x49,0x49,0x49,0x79,0x49,0x0,0x28,0x24,0x44,0x80,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x14,0x8,0x90,0x48,0x46,0x2,
++0x1,0x7f,0x1,0x3f,0x0,0x1f,0x10,0x1f,0x4,0xff,0x0,0x1f,0x10,0x1f,0x24,0x42,0x0,0xfc,0x0,0xf8,0x0,0xf0,0x10,0xf0,0x44,0xfe,0x0,0xf0,0x10,0xf0,0x88,0x44,
++0x2,0x1,0x3f,0x20,0x20,0x3f,0x21,0x21,0x3f,0x21,0x21,0x22,0x42,0x44,0x88,0x30,0x0,0x8,0xfc,0x8,0x8,0xf8,0x40,0x24,0xfe,0x0,0x0,0x80,0x80,0x60,0x1c,0x8,
++0x2,0x1,0x3f,0x20,0x20,0x3f,0x24,0x23,0x29,0x26,0x22,0x3f,0x40,0x40,0x80,0x0,0x0,0x8,0xfc,0x8,0x8,0xf8,0x20,0x20,0x20,0x24,0x3e,0xe0,0x20,0x20,0x20,0x20,
++0x2,0x1,0x3f,0x20,0x20,0x3f,0x20,0x2f,0x28,0x28,0x2b,0x2a,0x4a,0x4b,0x88,0x8,0x0,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x4,0x4,0xf4,0x14,0x14,0xf4,0x4,0x8,
++0x1,0x0,0x3f,0x20,0x3f,0x20,0x2f,0x28,0x2f,0x20,0x2f,0x28,0x4f,0x48,0x88,0x7,0x0,0x88,0xfc,0x8,0xf8,0x0,0xf0,0x10,0xf0,0x0,0xf8,0x88,0xf8,0x2,0x2,0xfe,
++0x1,0x0,0x3f,0x20,0x3f,0x22,0x22,0x3e,0x22,0x22,0x3e,0x22,0x42,0x5e,0x82,0x2,0x0,0x88,0xfc,0x8,0xf8,0x40,0x48,0x7c,0x40,0x50,0x78,0x40,0x48,0x7c,0x40,0x40,
++0x2,0x1,0x0,0x1f,0x0,0x1,0x1,0x3,0x5,0x9,0x11,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0xc0,0x80,0x0,0x0,0x80,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x20,0x13,0x2,0xfe,0xa,0x12,0x12,0x3b,0x56,0x92,0x12,0x12,0x12,0x12,0x11,0x10,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x20,0x10,0x3,0xfc,0x8,0x10,0x10,0x3b,0x54,0x90,0x10,0x11,0x11,0x12,0x14,0x18,0x8,0x7c,0xc0,0x40,0x40,0x40,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x10,0x8,0xe,0x4,
++0x20,0x10,0x0,0xfd,0x9,0x11,0x11,0x39,0x55,0x91,0x11,0x11,0x11,0x11,0x17,0x10,0x20,0x20,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x20,0x10,0x0,0xfc,0xb,0x10,0x10,0x38,0x57,0x90,0x10,0x10,0x11,0x12,0x17,0x10,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0x80,0x10,0x8,0xfc,0x4,
++0x20,0x10,0x0,0xfb,0x8,0x10,0x10,0x38,0x57,0x92,0x12,0x12,0x12,0x12,0x13,0x12,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x10,0x0,0xfb,0x8,0x10,0x10,0x39,0x55,0x91,0x12,0x12,0x14,0x18,0x11,0x12,0xa0,0x90,0x84,0xfe,0x80,0x80,0xf8,0x8,0x88,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x21,0x11,0x1,0xfd,0xa,0x14,0x10,0x38,0x54,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x4,0xfe,0x80,0x80,0x88,0xfc,0x80,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,
++0x20,0x10,0x0,0xfc,0x9,0x12,0x10,0x38,0x54,0x90,0x11,0x11,0x12,0x10,0x10,0x10,0x80,0x80,0x80,0xfe,0x2,0x4,0x20,0x20,0xa8,0xa4,0x24,0x22,0x22,0x20,0xa0,0x40,
++0x20,0x10,0x3,0xfa,0xa,0x12,0x13,0x3a,0x56,0x92,0x12,0x12,0x12,0x13,0x12,0x10,0x8,0x3c,0xe0,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x50,0x90,0x4a,0x2a,0x4,
++0x20,0x13,0x0,0xfc,0xb,0x10,0x10,0x3b,0x56,0x92,0x12,0x13,0x12,0x10,0x10,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x24,0x4,0x14,0x8,
++0x20,0x10,0x0,0xfc,0xb,0x12,0x12,0x3a,0x56,0x92,0x12,0x12,0x10,0x10,0x11,0x16,0x40,0x48,0x7c,0x40,0xf8,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0xa0,0x98,0xc,0x4,
++0x20,0x10,0x0,0xfc,0xa,0x11,0x10,0x38,0x55,0x92,0x14,0x10,0x11,0x11,0x12,0x14,0x20,0xa0,0xa0,0xa4,0xac,0xb0,0xa0,0xa0,0xb0,0xac,0xa4,0xa0,0x22,0x22,0x1e,0x0,
++0x21,0x11,0x7,0xf9,0x9,0x11,0x11,0x39,0x55,0x91,0x11,0x1f,0x10,0x11,0x12,0x14,0x10,0x10,0xfc,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x14,0xfe,0x0,0x10,0xc,0x4,
++0x21,0x10,0x0,0xfd,0x9,0x11,0x11,0x39,0x55,0x91,0x10,0x17,0x10,0x10,0x10,0x10,0x4,0x88,0x50,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x20,0x20,0x20,0x20,
++0x21,0x11,0x7,0xf9,0x17,0x11,0x17,0x39,0x55,0x90,0x17,0x10,0x10,0x10,0x13,0x14,0x0,0x4,0xfe,0x14,0xd4,0x14,0xd4,0x24,0x4c,0x40,0xfe,0x40,0x40,0xa0,0x1e,0x4,
++0x21,0x10,0x0,0xfb,0x8,0x10,0x11,0x38,0x54,0x90,0x13,0x10,0x12,0x12,0x14,0x10,0x4,0x88,0x50,0xfe,0x20,0x20,0xfc,0x20,0x20,0x24,0xfe,0x0,0xa4,0x52,0x52,0x0,
++0x20,0x17,0x0,0xff,0x8,0x13,0x1a,0x37,0x51,0x9f,0x10,0x13,0x12,0x12,0x13,0x12,0x40,0xfe,0x40,0xfc,0x0,0xf8,0x8,0xf8,0x10,0xfe,0x0,0xf8,0x8,0x8,0xf8,0x8,
++0x20,0x17,0x0,0xff,0xc,0x17,0x11,0x3b,0x55,0x93,0x11,0x1f,0x11,0x13,0x1d,0x11,0x40,0xfe,0x0,0xbc,0xa4,0xbc,0x10,0xf8,0x10,0xf8,0x10,0xfe,0x48,0x30,0x8e,0x4,
++0x0,0x7f,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0xa,0x29,0x28,0x48,0x88,0x7,0x0,0x4,0xfe,0x0,0x80,0x60,0x30,0x10,0x0,0x0,0x0,0x88,0x84,0x12,0x12,0xf0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x7f,0x0,0xa,0x29,0x28,0x48,0x88,0x7,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x88,0x84,0x12,0x12,0xf0,0x0,
++0x0,0x0,0x7e,0x3,0x24,0x14,0x8,0x14,0x22,0x40,0x2a,0x29,0x48,0x88,0x7,0x0,0x10,0x10,0x14,0xfe,0x10,0x90,0x50,0x10,0x50,0x20,0x8,0x84,0x92,0x12,0xf0,0x0,
++0x8,0x8,0x7f,0x8,0x3e,0x8,0x7f,0x8,0x8,0x0,0x2a,0x29,0x48,0x88,0x7,0x0,0x0,0x4,0x7e,0x24,0x24,0x24,0x44,0x54,0x88,0x0,0x8,0x84,0x92,0x12,0xf0,0x0,
++0x1,0x1,0x3f,0x1,0xff,0x1,0x3f,0x1,0xff,0x0,0x2a,0x29,0x48,0x88,0x7,0x0,0x0,0x10,0xf8,0x0,0xfe,0x0,0xf8,0x0,0xfe,0x0,0x8,0x84,0x92,0x12,0xf0,0x0,
++0x0,0xff,0x2,0x4,0x3f,0x24,0x24,0x24,0x24,0x0,0x2a,0x29,0x48,0x88,0x7,0x0,0x4,0xfe,0x0,0x8,0xfc,0x48,0x48,0x48,0x58,0x0,0x8,0x84,0x92,0x12,0xf0,0x0,
++0x8,0x8,0x17,0x10,0x30,0x5f,0x90,0x10,0x17,0x10,0x2a,0x29,0x48,0x88,0x7,0x0,0x8,0x1c,0xe0,0x40,0x44,0xfe,0x40,0x48,0xfc,0x0,0x8,0x84,0x92,0x12,0xf0,0x0,
++0x8,0x4,0x7f,0x1,0x1,0x3f,0x1,0x1,0xff,0x0,0x2a,0x29,0x48,0x88,0x7,0x0,0x20,0x48,0xfc,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,0x8,0x84,0x92,0x12,0xf0,0x0,
++0x40,0x30,0x10,0x5,0xa,0x10,0xe0,0x21,0x26,0x0,0x2a,0x29,0x48,0x88,0x7,0x0,0x80,0x80,0xfc,0x4,0x48,0x40,0xa0,0x10,0xe,0x0,0x8,0x84,0x92,0x12,0xf0,0x0,
++0x1,0x7f,0x1,0x3f,0x0,0x7f,0x40,0x8f,0x8,0x8,0x30,0xa,0x29,0x48,0x88,0x7,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x2,0xe4,0x20,0x28,0x38,0x0,0x84,0x92,0x12,0xf0,
++0x8,0x12,0x21,0x4c,0x12,0x30,0x51,0x96,0x12,0x10,0xa,0x29,0x28,0x48,0x88,0x7,0x8,0x7c,0x0,0x4,0xfe,0x88,0x8,0x8,0x28,0x10,0x0,0x88,0x84,0x12,0x12,0xf0,
++0x0,0x7e,0x42,0x7e,0x49,0x7e,0x48,0x49,0x65,0x42,0x0,0x2a,0x29,0x48,0x88,0x7,0x40,0x40,0x44,0xfe,0x48,0x28,0x10,0x28,0x4e,0x84,0x0,0x8,0x84,0x92,0x12,0xf0,
++0x3f,0x22,0x2f,0x22,0x3f,0x22,0x27,0x2a,0x23,0x20,0x3f,0xa,0x29,0x48,0x88,0x7,0xfc,0x20,0xf8,0xa0,0xfc,0x0,0xf0,0x10,0xf0,0x0,0xfc,0x0,0x84,0x92,0x12,0xf0,
++0xe,0x78,0x8,0xff,0x8,0x3e,0x22,0x22,0x22,0x3e,0x0,0x2a,0x29,0x48,0x88,0x7,0x20,0x24,0xfe,0x84,0xfc,0x84,0xfc,0x84,0xfc,0x84,0x0,0x8,0x84,0x92,0x12,0xf0,
++0x8,0xff,0x0,0x7e,0x43,0x7e,0x0,0x7f,0x4,0xff,0x8,0x1a,0x51,0x50,0x90,0xf,0x40,0x40,0x44,0xfe,0x4,0x44,0x28,0x10,0x28,0x46,0x84,0x0,0x84,0x92,0x12,0xf0,
++0x10,0x17,0x12,0xf9,0x17,0x39,0x33,0x55,0x91,0x13,0x0,0x2a,0x29,0x48,0x88,0x7,0x10,0xd0,0x94,0x7e,0xd0,0x58,0x34,0x52,0x90,0x10,0x0,0x8,0x84,0x92,0x12,0xf0,
++0x41,0x2f,0x11,0x87,0x61,0x2f,0x15,0x26,0xe4,0x24,0x0,0x2a,0x29,0x48,0x88,0x7,0x10,0xfe,0x10,0xfc,0x10,0xfc,0x14,0xac,0x44,0xc,0x0,0x8,0x84,0x92,0x12,0xf0,
++0x8,0xff,0x14,0xff,0x22,0x3e,0x22,0x3e,0x8,0x7f,0x8,0xa,0x51,0x50,0x90,0xf,0x40,0x7e,0xa8,0x10,0xee,0x0,0x7c,0x44,0x54,0x54,0x28,0x44,0x84,0x92,0x12,0xf0,
++0x1,0x1,0x3f,0x1,0xff,0x1,0x3f,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x8,0xfc,0x8,0xfe,0x8,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x3f,0x1,0xff,0x1,0x3f,0x1,0x7f,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x0,0x8,0xfc,0x8,0xfe,0x8,0xf8,0x0,0xfc,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x1,0x1,0x7d,0x5,0x9,0x11,0x25,0xc2,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0x8,0x18,0xa0,0x40,0x30,0xe,0x4,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x22,0x11,0x9,0x0,0x7f,0x41,0x81,0x1,0x3d,0x5,0x9,0x11,0x21,0xc1,0x5,0x2,0x8,0x18,0x20,0x40,0xfe,0x2,0x4,0x10,0xa0,0x40,0x20,0x10,0xe,0x4,0x0,0x0,
++0x1,0x1,0x7d,0x5,0x9,0x11,0x25,0x42,0x8,0x9,0xfa,0x1c,0x2c,0xcb,0x28,0x10,0x8,0x10,0xa0,0xc0,0x40,0x30,0xe,0x4,0x20,0x24,0xe8,0x70,0xa8,0x26,0xa4,0x40,
++0x4,0xfe,0x10,0x10,0x20,0x24,0x3e,0x64,0xa4,0x24,0x24,0x24,0x25,0x3d,0x22,0x4,0x8,0xfc,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xa,0xa,0x6,0x0,
++0x4,0xfd,0x10,0x10,0x20,0x20,0x3c,0x67,0xa4,0x24,0x24,0x24,0x24,0x3c,0x20,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x1,0xfe,0x10,0x20,0x20,0x21,0x7c,0xa4,0x24,0x24,0x24,0x25,0x3d,0x22,0x0,0x0,0xf8,0x10,0x20,0x40,0x84,0xfe,0x54,0x54,0x54,0x94,0xa4,0x24,0x44,0x54,0x88,
++0x1,0x7f,0x1,0x3f,0x1,0x7f,0x1,0xff,0x4,0x4,0xf,0x18,0x28,0xc8,0xf,0x8,0x0,0xfc,0x0,0xf8,0x0,0xfc,0x0,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x4,0xfe,0x13,0x10,0x20,0x21,0x3d,0x67,0xa4,0x24,0x24,0x27,0x24,0x3c,0x20,0x0,0x40,0x48,0xfc,0x80,0xa0,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x4,0xfe,0x11,0x10,0x21,0x21,0x3d,0x65,0xa5,0x25,0x25,0x24,0x24,0x3c,0x20,0x0,0x20,0x24,0xfe,0x20,0x24,0x24,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x22,0x1e,0x0,
++0x4,0xfe,0x10,0x10,0x20,0x21,0x3d,0x64,0xa4,0x24,0x24,0x24,0x25,0x3e,0x24,0x0,0x4,0xfe,0x8,0x88,0x88,0x8,0xfe,0x28,0x28,0x48,0x48,0x88,0x8,0x8,0x28,0x10,
++0x4,0xfe,0x11,0x11,0x21,0x21,0x3d,0x65,0xa5,0x25,0x25,0x25,0x3d,0x21,0x2,0x4,0x0,0x1c,0xe0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x4,0xfe,0x13,0x10,0x20,0x24,0x3f,0x64,0xa4,0x24,0x24,0x24,0x25,0x3f,0x22,0x0,0x8,0x3c,0xc0,0x40,0x20,0x20,0xfc,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x86,0x7c,
++0x4,0xff,0x12,0x12,0x23,0x22,0x3a,0x6a,0xaa,0x2a,0x2a,0x2a,0x3b,0x24,0x8,0x10,0x8,0xfc,0x8,0x8,0x18,0x98,0xa8,0xa8,0x48,0x48,0xa8,0x98,0x1a,0xa,0xa,0x4,
++0x4,0xfe,0x10,0x11,0x20,0x20,0x3c,0x67,0xa4,0x24,0x24,0x24,0x25,0x3d,0x20,0x0,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x40,0x80,0x8,0xfc,0x4,0x0,
++0x4,0xfe,0x13,0x10,0x20,0x20,0x3d,0x65,0xa4,0x24,0x24,0x24,0x24,0x3c,0x21,0x6,0x88,0x88,0xfe,0x88,0x88,0x0,0x4,0x4,0x88,0x88,0x50,0x20,0x50,0x88,0xe,0x4,
++0x8,0xff,0x12,0x12,0x23,0x22,0x3a,0x6a,0xaa,0x2a,0x2a,0x2a,0x3a,0x24,0x9,0x12,0x8,0xfc,0x0,0x4,0xfe,0x40,0x44,0x7e,0x44,0x44,0x44,0x84,0x84,0x84,0x28,0x10,
++0x4,0x4,0x7f,0x5,0x5,0x9,0x37,0xc1,0x0,0xff,0x4,0xf,0x18,0x28,0xcf,0x8,0x40,0x28,0xfc,0x0,0x30,0xc4,0x4,0xfc,0x4,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x4,0xfe,0x10,0x10,0x21,0x22,0x3c,0x64,0xa4,0x24,0x24,0x24,0x24,0x3c,0x20,0x0,0x80,0x80,0x84,0xfe,0x40,0x40,0x48,0x7c,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0x40,
++0x4,0xfe,0x10,0x10,0x20,0x25,0x3e,0x64,0xa5,0x24,0x24,0x24,0x24,0x3c,0x23,0x0,0x20,0x20,0x50,0x50,0x88,0x4,0x2,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x4,0xfe,0x11,0x11,0x21,0x21,0x3d,0x65,0xa5,0x25,0x25,0x25,0x25,0x3d,0x21,0x0,0x8,0x1c,0xe0,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x10,0x50,0x4a,0xaa,0x4,
++0x4,0xfe,0x10,0x13,0x20,0x20,0x3d,0x65,0xa4,0x24,0x24,0x24,0x24,0x3c,0x27,0x0,0x40,0x20,0x24,0xfe,0x0,0x8,0x8,0x8,0x90,0x90,0x90,0x90,0x20,0x24,0xfe,0x0,
++0x4,0xfe,0x10,0x13,0x22,0x24,0x3e,0x64,0xa4,0x24,0x24,0x24,0x24,0x3c,0x20,0x0,0x40,0x20,0x20,0xfe,0x2,0x84,0x80,0x88,0x98,0xa0,0xc0,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x0,0xfc,0x13,0x20,0x20,0x23,0x7a,0xaa,0x2b,0x28,0x28,0x28,0x38,0x1,0x2,0x90,0x90,0x94,0xfe,0x94,0x94,0xfc,0x90,0x90,0xfe,0x92,0x92,0x9a,0x94,0x10,0x10,
++0x8,0xff,0x12,0x12,0x22,0x22,0x3a,0x6f,0xaa,0x2a,0x2a,0x2a,0x3a,0x22,0x4,0x8,0x44,0xe4,0x44,0x54,0x54,0x54,0x54,0xf4,0x54,0x54,0x54,0x54,0x44,0x44,0x54,0x48,
++0x4,0xfe,0x13,0x10,0x20,0x20,0x3c,0x67,0xa5,0x25,0x25,0x25,0x25,0x3d,0x20,0x0,0x88,0x88,0xfe,0x88,0x88,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,
++0x8,0xfc,0x17,0x10,0x22,0x21,0x39,0x68,0xaf,0x28,0x28,0x29,0x29,0x3a,0x24,0x8,0x40,0x48,0xfc,0x40,0x48,0x48,0x50,0x44,0xfe,0xa0,0xa0,0x10,0x10,0x8,0xe,0x4,
++0x4,0xfe,0x10,0x13,0x20,0x20,0x3c,0x65,0xa4,0x27,0x24,0x24,0x24,0x3d,0x21,0x6,0x40,0x48,0x7c,0xc0,0x28,0x12,0x6a,0x86,0x0,0xfc,0x90,0x90,0x90,0x12,0x12,0xe,
++0x4,0x4,0x27,0x24,0x24,0x3f,0xe0,0x0,0x7f,0x4,0x8,0x1f,0x28,0xc8,0xf,0x8,0x40,0x40,0x4c,0x70,0x42,0x42,0x3e,0x0,0xfc,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x8,0xff,0x12,0x12,0x22,0x22,0x3a,0x6a,0xaa,0x2a,0x2a,0x2a,0x2a,0x3a,0x22,0x2,0x4,0xfe,0x4,0x4,0xf4,0x4,0x4,0xf4,0x94,0x94,0x94,0xf4,0x94,0x4,0x14,0x8,
++0x4,0xfe,0x10,0x11,0x21,0x21,0x3d,0x65,0xa5,0x25,0x25,0x25,0x25,0x3d,0x21,0x1,0x20,0x20,0x44,0xfe,0x4,0x8c,0x54,0x54,0x24,0x54,0x4c,0x8c,0x4,0x4,0xfc,0x4,
++0x0,0x4,0xfe,0x11,0x21,0x22,0x20,0x7c,0xa4,0x25,0x27,0x25,0x25,0x3d,0x21,0x1,0x80,0x88,0xfc,0x8,0x88,0x50,0x20,0x50,0x8e,0x4,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x4,0xfe,0x13,0x10,0x20,0x23,0x3c,0x64,0xa4,0x24,0x27,0x24,0x24,0x3c,0x22,0x1,0x10,0x58,0x94,0x94,0x90,0xfe,0x90,0x90,0xb4,0xd4,0x98,0x90,0xaa,0xca,0x8a,0x4,
++0x8,0xfc,0x13,0x10,0x21,0x24,0x3f,0x64,0xa5,0x25,0x25,0x25,0x25,0x3c,0x20,0x3,0x20,0x24,0xfe,0x20,0xfc,0x20,0xfe,0x0,0xfc,0x4,0x24,0x24,0x24,0x58,0x84,0x2,
++0x4,0xfe,0x10,0x10,0x20,0x25,0x3e,0x64,0xa4,0x24,0x24,0x24,0x24,0x3c,0x20,0x0,0x60,0x50,0x44,0xfe,0x90,0x90,0x90,0xfc,0x90,0x90,0xfc,0x90,0x90,0x94,0xfe,0x80,
++0x4,0xfe,0x13,0x10,0x21,0x20,0x3c,0x67,0xa4,0x25,0x25,0x25,0x25,0x3d,0x21,0x1,0x40,0x28,0xfc,0x0,0x8,0x90,0x4,0xfe,0x0,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x4,0xfe,0x13,0x12,0x24,0x21,0x3c,0x64,0xa5,0x25,0x25,0x25,0x25,0x3d,0x22,0x4,0x40,0x20,0xfe,0x2,0x4,0xfc,0x20,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0xa6,0x7c,
++0x8,0xfc,0x11,0x13,0x20,0x27,0x38,0x69,0xaa,0x2d,0x28,0x28,0x2b,0x38,0x20,0x3,0x40,0x90,0x8,0xfc,0x40,0xfe,0x90,0x28,0x46,0x94,0x20,0xc8,0x10,0x20,0xc0,0x0,
++0x4,0xff,0x10,0x11,0x20,0x23,0x3c,0x65,0xa5,0x25,0x27,0x25,0x25,0x3d,0x20,0x0,0x20,0xfc,0x20,0xfc,0x20,0xfe,0x0,0xfc,0x44,0x24,0xfe,0x44,0x24,0xfe,0x4,0x18,
++0x8,0xfd,0x11,0x11,0x21,0x29,0x3d,0x69,0xaa,0x2c,0x2a,0x2b,0x2a,0x3b,0x20,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x44,0x44,0xb4,0x14,0x4,0xfc,0x4,0x8,
++0x4,0xfe,0x11,0x10,0x20,0x23,0x3e,0x64,0xa5,0x25,0x25,0x25,0x25,0x3c,0x20,0x0,0x40,0x24,0xfe,0x88,0x50,0xfe,0x22,0x24,0xfe,0x24,0x24,0x34,0x28,0x20,0x20,0x20,
++0x4,0xfe,0x13,0x12,0x24,0x21,0x3c,0x65,0xa5,0x25,0x25,0x25,0x24,0x3c,0x23,0x0,0x40,0x20,0xfe,0x2,0x4,0xfc,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x0,0x4,0xfe,0x0,
++0x8,0xfc,0x13,0x12,0x22,0x23,0x3a,0x6a,0xab,0x2b,0x2b,0x2d,0x29,0x39,0x21,0x1,0x40,0x24,0xfe,0x4,0x4,0xfc,0x0,0x4,0xfe,0x54,0x54,0xfc,0x54,0x54,0x54,0xc,
++0x9,0xfd,0x11,0x12,0x26,0x21,0x39,0x6a,0xa8,0x2f,0x28,0x28,0x29,0x3a,0x2c,0x0,0x8,0x8,0xfc,0x48,0xa8,0x3e,0x8,0x48,0x44,0xfe,0xc0,0xe0,0x50,0x4e,0x44,0x40,
++0x8,0xfc,0x17,0x11,0x22,0x24,0x39,0x6b,0xa8,0x28,0x29,0x2b,0x2d,0x39,0x21,0x1,0x40,0x24,0xfe,0x8,0x46,0x92,0x8,0xfc,0x80,0x88,0x50,0x20,0x10,0x48,0x8e,0x4,
++0x5,0xfe,0x10,0x10,0x21,0x23,0x3d,0x64,0xa5,0x24,0x27,0x24,0x24,0x3d,0x22,0x0,0xfc,0x88,0x70,0x88,0x6,0xfc,0x54,0x88,0x54,0x22,0xfe,0x70,0xa8,0x26,0x20,0x20,
++0x8,0x7f,0x8,0x3e,0x0,0x7f,0x49,0x7f,0x40,0x40,0xbf,0x4,0xf,0x18,0x68,0xf,0x78,0x48,0x48,0x48,0x86,0x78,0x48,0x30,0x48,0x86,0xfc,0x0,0xf0,0x10,0x10,0xf0,
++0xa,0xff,0x11,0x14,0x22,0x20,0x39,0x6a,0xaa,0x28,0x2f,0x28,0x29,0x3a,0x24,0x0,0x4,0x7e,0x40,0x7c,0x44,0xfc,0x40,0x7e,0x40,0x44,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x9,0xfd,0x17,0x10,0x27,0x24,0x3f,0x68,0xaf,0x28,0x29,0x29,0x2f,0x39,0x25,0x2,0x10,0x10,0xd0,0x1e,0xe4,0x44,0xd4,0x14,0xd4,0x94,0x8,0xc8,0x14,0x14,0x22,0x40,
++0x8,0xff,0x10,0x12,0x21,0x21,0x3b,0x6c,0xab,0x2a,0x2a,0x2b,0x29,0x38,0x27,0x0,0x20,0xa8,0xb0,0xa4,0x18,0x10,0xf8,0x6,0xf8,0x8,0x8,0xf8,0x10,0xa4,0xfe,0x0,
++0xb,0xfc,0x11,0x11,0x21,0x25,0x3f,0x64,0xa5,0x25,0x25,0x25,0x25,0x3c,0x23,0x0,0xfe,0x0,0xfc,0x24,0xfc,0x24,0xfe,0x0,0xfc,0x24,0xfc,0x24,0xfc,0x0,0xfe,0x0,
++0x1,0xff,0x21,0x22,0x23,0x44,0x7b,0xd6,0x55,0x58,0x57,0x50,0x51,0x72,0x44,0x0,0x10,0xfe,0x10,0x20,0xbc,0xa4,0x18,0x8,0xf4,0x2,0xfc,0x40,0x50,0x4c,0x44,0xc0,
++0x1,0xff,0x21,0x27,0x24,0x49,0x70,0xd7,0x50,0x51,0x56,0x50,0x57,0x70,0x47,0x0,0x10,0xfe,0x10,0xfe,0x2,0xf4,0x0,0xfc,0x80,0x48,0x70,0xb0,0x68,0xa6,0x20,0x60,
++0x1,0xff,0x21,0x2b,0x24,0x41,0x79,0xd5,0x55,0x51,0x55,0x57,0x54,0x78,0x48,0x0,0x10,0xfe,0x28,0xfe,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x24,0xfe,0x88,0x48,0x8,0x18,
++0x1,0x2,0xc,0x3f,0xc0,0x1f,0x10,0x1f,0x2,0xff,0x2,0x4,0x4,0x9,0x12,0x60,0x0,0x80,0x60,0xf8,0x6,0xf0,0x10,0xf0,0x24,0xfe,0x80,0xa0,0xc0,0x84,0x84,0x7c,
++0x4,0x24,0x14,0x4,0xff,0x9,0x5,0x3f,0x21,0x21,0x23,0x25,0x29,0x21,0x21,0x21,0x40,0x48,0x50,0x44,0xfe,0x20,0x48,0xfc,0x8,0x8,0x88,0x68,0x28,0x8,0x28,0x10,
++0x14,0x55,0x36,0x14,0xff,0x49,0x2a,0x7f,0x49,0x49,0x5d,0x6b,0x49,0x49,0x49,0x43,0x20,0x28,0x24,0x24,0xfe,0x20,0x20,0x3c,0x54,0x54,0x54,0x48,0x54,0x94,0x24,0x42,
++0x28,0xaa,0x6c,0x29,0xfe,0x54,0x39,0x7d,0x55,0x55,0x7d,0x55,0x55,0x55,0x55,0x45,0x20,0x28,0x24,0xfe,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x24,0x2c,
++0x0,0x5,0x7e,0x44,0x44,0x7c,0x44,0x47,0x7c,0x44,0x44,0x44,0x7c,0x44,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x3,0x7c,0x45,0x45,0x7d,0x45,0x45,0x7d,0x44,0x44,0x44,0x7c,0x44,0x0,0x0,0x4,0xfe,0x20,0x20,0x24,0x3e,0x24,0x24,0xfc,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x0,0x1,0x7d,0x45,0x45,0x7d,0x45,0x45,0x7d,0x45,0x45,0x45,0x7d,0x45,0x1,0x0,0x4,0xfe,0x0,0x4,0x84,0x48,0x28,0x10,0x28,0x28,0x44,0x84,0x0,0x4,0xfe,0x0,
++0x0,0x0,0x78,0x4f,0x48,0x7a,0x4a,0x4a,0x7a,0x4a,0x4b,0x48,0x78,0x48,0x0,0x0,0x40,0x40,0x44,0xfe,0x40,0x48,0x48,0x48,0x48,0x48,0xf8,0x48,0x42,0x42,0x3e,0x0,
++0x0,0x8,0x7c,0x48,0x49,0x79,0x4a,0x4a,0x7c,0x48,0x48,0x48,0x78,0x48,0x3,0xc,0x40,0x40,0x40,0x40,0x50,0x48,0x46,0x4a,0x48,0x50,0x50,0x20,0x40,0x80,0x0,0x0,
++0x0,0x8,0x7c,0x4b,0x4a,0x7c,0x48,0x48,0x78,0x48,0x48,0x48,0x79,0x49,0x2,0xc,0x40,0x40,0x40,0xfe,0x42,0x44,0x40,0x40,0x60,0xa0,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x11,0x11,0x1f,0x21,0x5f,0x1,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x0,0x10,0xf8,0x0,0xf0,0x4,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x10,0x1e,0x12,0x32,0x4a,0x4,0x8,0x30,0xdf,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x8,0xfc,0x88,0x88,0xa8,0x90,0x82,0x7e,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x0,0x4,0x7e,0x44,0x44,0x7d,0x47,0x44,0x7c,0x45,0x45,0x45,0x7d,0x45,0x1,0x1,0x20,0x20,0x40,0x40,0x88,0x4,0xfe,0x2,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x0,0x7d,0x44,0x44,0x7c,0x47,0x44,0x7c,0x44,0x45,0x44,0x7c,0x44,0x3,0x0,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x8,0x7c,0x48,0x4a,0x7a,0x4a,0x4a,0x7a,0x4a,0x4a,0x4a,0x7a,0x4b,0x6,0x0,0x10,0x90,0x90,0x90,0x90,0x92,0xf6,0x98,0x90,0x90,0x90,0x90,0xf2,0x92,0x1e,0x0,
++0x0,0x4,0x7e,0x45,0x46,0x7c,0x44,0x44,0x7f,0x44,0x44,0x45,0x7c,0x44,0x0,0x3,0x40,0x40,0xfc,0x8,0x90,0x60,0x40,0xa0,0x3e,0x42,0x84,0x44,0x28,0x10,0x60,0x80,
++0x0,0x8,0x7c,0x49,0x4b,0x78,0x49,0x49,0x7a,0x48,0x4f,0x48,0x78,0x48,0x0,0x0,0x40,0x40,0x90,0x8,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x0,0x0,0x78,0x4f,0x48,0x7a,0x49,0x48,0x7f,0x48,0x48,0x49,0x79,0x4a,0x4,0x0,0x40,0x40,0x48,0xfc,0x40,0x48,0x50,0x64,0xfe,0xc0,0xe0,0x50,0x48,0x4e,0x44,0x40,
++0x0,0x8,0x7c,0x49,0x4a,0x7c,0x49,0x48,0x7a,0x4a,0x49,0x49,0x79,0x48,0x7,0x0,0x40,0x40,0xa0,0x10,0xe,0x24,0xf0,0x0,0x48,0x48,0x48,0x50,0x50,0x24,0xfe,0x0,
++0x2,0x9,0x7c,0x4b,0x48,0x78,0x4b,0x4a,0x7a,0x4b,0x48,0x49,0x7a,0x44,0x0,0x0,0x8,0x10,0xa0,0xf8,0x48,0x48,0xf8,0x40,0x44,0xfe,0xc4,0x44,0x54,0x48,0x40,0x40,
++0x0,0x8,0x7c,0x49,0x4b,0x78,0x49,0x4a,0x78,0x49,0x49,0x4a,0x7c,0x48,0x1,0x6,0x40,0x40,0x90,0x8,0xfc,0x90,0xc,0x84,0xf8,0x8,0x10,0xa0,0x40,0xa0,0x18,0x6,
++0x0,0xb,0x7e,0x4a,0x4a,0x7a,0x4a,0x4b,0x7a,0x4a,0x4a,0x4a,0x7a,0x42,0x5,0x8,0x4,0xfe,0x20,0x20,0xf8,0x20,0x20,0xfc,0x20,0x20,0xf8,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x7d,0x45,0x45,0x45,0x7d,0x45,0x45,0x7d,0x44,0x44,0x44,0x7c,0x41,0x2,0xc,0x44,0x9e,0x4,0x4,0xdc,0x4,0x4,0xfc,0x54,0x50,0x50,0x90,0x92,0x12,0xe,0x0,
++0x0,0x8,0x7c,0x49,0x49,0x7b,0x4d,0x49,0x79,0x49,0x49,0x49,0x79,0x49,0x1,0x1,0xc0,0xa0,0x84,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x0,0x8,0x7f,0x4a,0x4a,0x7b,0x4a,0x4a,0x7b,0x48,0x49,0x4f,0x78,0x48,0x0,0x0,0x40,0x84,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x1,0x1,0x41,0x7f,0x40,0x9f,0x9,0x32,0xc,0x3f,0xd0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0xf8,0x0,0xfe,0x2,0xf4,0x20,0x98,0x60,0xf0,0x1e,0xf0,0x10,0xf0,0x10,0xf0,
++0x0,0x7d,0x45,0x45,0x45,0x7d,0x45,0x45,0x7c,0x47,0x44,0x44,0x7c,0x44,0x1,0x6,0x24,0xae,0x24,0x24,0xac,0x24,0x24,0xfc,0x20,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x0,0x3,0x78,0x4a,0x49,0x79,0x4a,0x4d,0x78,0x48,0x4b,0x48,0x78,0x48,0x1,0x6,0x28,0xb0,0xa4,0xa8,0x10,0x8,0xe,0xf4,0x40,0x48,0xfc,0x40,0xa0,0xa0,0x1c,0x8,
++0x7e,0x24,0x18,0xfe,0x2b,0x28,0x48,0x89,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x40,0x44,0x7e,0x88,0x50,0x20,0x50,0x8e,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x0,0x0,0x7b,0x48,0x4f,0x78,0x49,0x4b,0x78,0x4b,0x4a,0x4a,0x7a,0x4a,0x7,0x0,0x40,0x48,0xfc,0x40,0xfe,0x80,0x10,0xf8,0x0,0xfc,0x94,0x94,0x94,0x94,0xfe,0x0,
++0x0,0x7b,0x4a,0x4c,0x49,0x79,0x49,0x49,0x79,0x48,0x48,0x4f,0x78,0x48,0x1,0x2,0x0,0xfe,0x2,0x4,0xf8,0x8,0xf8,0x8,0xf8,0x40,0x24,0xfe,0x0,0x88,0x6,0x2,
++0x0,0x7,0x78,0x48,0x4b,0x7a,0x4a,0x4b,0x78,0x49,0x48,0x4f,0x79,0x4a,0x4,0x0,0x4,0xfe,0x90,0x94,0xfe,0x94,0x94,0xfc,0x0,0xf8,0x0,0xfe,0x50,0x4c,0x44,0xc0,
++0x0,0x9,0x7c,0x48,0x4b,0x7a,0x4d,0x49,0x79,0x49,0x48,0x49,0x78,0x48,0x3,0x0,0x20,0x24,0xa8,0x20,0xfe,0x2,0xfc,0x4,0x4,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x0,0xb,0x7c,0x48,0x4f,0x7a,0x4a,0x4b,0x7a,0x4a,0x4b,0x4a,0x7a,0x4f,0x0,0x0,0x10,0x90,0x90,0x9e,0xe4,0x54,0x54,0xd4,0x54,0x4c,0xc8,0x54,0xf4,0x54,0x62,0x40,
++0x0,0x2,0x79,0x4f,0x49,0x7a,0x4c,0x4a,0x7b,0x4a,0x4a,0x4d,0x79,0x42,0x4,0x0,0x40,0x48,0x50,0xfe,0x50,0x48,0x46,0x8,0xbc,0xa8,0xa8,0x28,0x7e,0x8,0x8,0x8,
++0x8,0xff,0x8,0x7f,0x22,0x3e,0x14,0x1f,0xf0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0xfe,0x10,0x7c,0x44,0x28,0x10,0x28,0x46,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,
++0x0,0x3,0x7c,0x54,0x54,0x54,0x54,0x7c,0x54,0x54,0x54,0x54,0x7c,0x44,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x0,0xff,0x8,0x8,0x8,0x8,0x10,0x20,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x4,0x7e,0x54,0x54,0x57,0x54,0x7c,0x54,0x54,0x54,0x55,0x7d,0x42,0x4,0x8,0x40,0x60,0x50,0x50,0x44,0xfe,0x40,0x40,0x40,0xa0,0xa0,0x10,0x10,0x8,0xe,0x4,
++0x0,0x4,0x7e,0x54,0x54,0x55,0x56,0x7c,0x54,0x54,0x54,0x54,0x7c,0x44,0x1,0x2,0x40,0x40,0x40,0x84,0xfe,0x8,0x88,0x88,0x50,0x50,0x20,0x50,0x50,0x88,0x6,0x4,
++0x0,0x4,0x7f,0x55,0x55,0x55,0x55,0x7d,0x55,0x55,0x55,0x55,0x7e,0x42,0x4,0x1,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x4,0x44,0x48,0x28,0x28,0x10,0x28,0x28,0x44,0x82,
++0x0,0x4,0x7e,0x54,0x55,0x56,0x54,0x7c,0x57,0x54,0x54,0x55,0x7c,0x44,0x0,0x3,0x40,0x40,0xa0,0xa0,0x18,0x16,0x20,0xc8,0x10,0x20,0x44,0x88,0x10,0x20,0xc0,0x0,
++0x1,0x2,0xc,0x17,0xe0,0x1f,0x9,0x11,0x25,0x2,0x1f,0x11,0x1f,0x11,0x1f,0x10,0x0,0x80,0x60,0xd0,0xe,0xf0,0x20,0x18,0x8,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x0,0x4,0x7f,0x56,0x55,0x55,0x55,0x7d,0x55,0x56,0x54,0x54,0x7c,0x45,0x2,0x4,0x40,0x20,0xfe,0x2,0x4,0xde,0x54,0x54,0x54,0xd4,0x5c,0x94,0x90,0x12,0xe,0x0,
++0x0,0x5,0x7e,0x54,0x57,0x54,0x55,0x7d,0x55,0x55,0x55,0x54,0x7d,0x44,0x3,0x0,0x20,0xfc,0x88,0x50,0xfe,0x0,0xfc,0x24,0xfc,0x24,0xfc,0x20,0xfc,0x20,0xfe,0x0,
++0x0,0x3f,0x24,0x24,0x24,0x3f,0x0,0xff,0x0,0x1,0x3,0x5,0x19,0x61,0x1,0x1,0x8,0xfc,0x48,0x48,0x48,0xf8,0x4,0xfe,0x80,0x0,0x0,0x60,0x18,0x4,0x0,0x0,
++0x0,0x3f,0x24,0x24,0x24,0x3f,0x0,0x3f,0x1,0x11,0x11,0x11,0x11,0x11,0xff,0x0,0x8,0xfc,0x48,0x48,0x48,0xf8,0x0,0xfc,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x7f,0x44,0x44,0x7f,0x1,0x1,0xff,0x1,0x1,0x1f,0x10,0x10,0x10,0x1f,0x10,0x4,0xfe,0x44,0x44,0xfc,0x0,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x0,0x7f,0x44,0x44,0x7f,0x1,0xff,0x0,0x3f,0x0,0x3f,0x0,0x1f,0x10,0x10,0x1f,0x4,0xfe,0x44,0x44,0xfc,0x0,0xfe,0x0,0xf8,0x0,0xf8,0x0,0xf0,0x10,0x10,0xf0,
++0x0,0x7f,0x44,0x44,0x7f,0x2,0xff,0x4,0x9,0x3f,0xd1,0x1f,0x11,0x1f,0x1,0x0,0x4,0xfe,0x44,0x44,0xfc,0x0,0xfe,0x40,0x20,0xf8,0x16,0xf0,0x10,0xf4,0x4,0xfc,
++0x0,0x7f,0x44,0x44,0x7f,0x1,0x3f,0x1,0xff,0x2,0x4,0x1f,0x0,0x24,0x22,0x42,0x4,0xfe,0x44,0x44,0xfc,0x0,0xf8,0x0,0xfe,0x0,0x20,0xf0,0x0,0x88,0x44,0x44,
++0x0,0x7f,0x44,0x44,0x7f,0x1,0xff,0x1,0x3f,0x24,0x2f,0x21,0x3f,0x21,0x21,0x20,0x4,0xfe,0x44,0x44,0xfc,0x0,0xfe,0x8,0xfc,0x48,0xe8,0x8,0xf8,0x8,0x28,0x10,
++0x0,0x7f,0x44,0x44,0x7f,0x11,0x11,0x5b,0x52,0x97,0x1a,0x13,0x12,0x12,0x13,0x12,0x4,0xfe,0x44,0x44,0xfc,0x40,0x24,0xfe,0x20,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x0,0x7f,0x44,0x7f,0x22,0xff,0x22,0x3e,0x8,0x7f,0x49,0x7f,0x8,0xff,0x8,0x8,0x4,0xfe,0x44,0xfc,0x0,0xf8,0x8,0x48,0x48,0x48,0x7c,0x4,0xf4,0x4,0x14,0x8,
++0x0,0x3f,0x24,0x3f,0x8,0x7f,0x51,0x49,0x7f,0x40,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x8,0xfc,0x48,0xf8,0x20,0xfc,0x14,0x24,0xfc,0x4,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x1,0x1,0x3f,0x1,0x1,0x7f,0x4,0x8,0x1f,0x0,0x3f,0x24,0x24,0x24,0xff,0x0,0x0,0x10,0xf8,0x0,0x8,0xfc,0x0,0x20,0xf0,0x8,0xfc,0x48,0x48,0x48,0xfe,0x0,
++0x9,0x71,0x4d,0x45,0x75,0x49,0x41,0x75,0x42,0x3f,0x24,0x24,0x24,0x24,0xff,0x0,0x4,0x3e,0xc4,0x84,0x5c,0x44,0x24,0x1c,0x4,0xf8,0x48,0x48,0x48,0x48,0xfe,0x0,
++0x0,0x45,0x29,0xff,0x1,0x28,0x44,0x1,0x7f,0x45,0x65,0x55,0x4c,0x44,0xff,0x0,0x4,0xfe,0x54,0x54,0xfc,0x84,0xfe,0x44,0xf4,0x54,0x54,0xf4,0x54,0x74,0x94,0x8,
++0x10,0x14,0x1e,0x20,0x20,0x7c,0x90,0x14,0xfe,0x10,0x10,0x12,0x14,0x18,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x14,0x1e,0x20,0x20,0x7c,0x90,0x14,0xfe,0x10,0x10,0x12,0x14,0x18,0x10,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x82,0x82,0x7e,0x0,
++0x10,0x14,0x1e,0x20,0x20,0x7c,0x90,0x14,0xfe,0x10,0x10,0x11,0x15,0x19,0x10,0x0,0x0,0x0,0xfc,0x8,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x14,0x1e,0x20,0x20,0x7c,0x90,0x14,0xfe,0x10,0x10,0x12,0x14,0x18,0x10,0x0,0x40,0x40,0x40,0x40,0x40,0x60,0x50,0x48,0x44,0x44,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x12,0x1f,0x20,0x24,0x7e,0x90,0x12,0xff,0x10,0x10,0x12,0x14,0x18,0x10,0x0,0x4,0x4,0x4,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x4,0x4,0x14,0x8,
++0x10,0x14,0x1e,0x20,0x20,0x7c,0x90,0x14,0xfe,0x10,0x10,0x12,0x14,0x18,0x10,0x0,0x0,0x0,0xfc,0x4,0x8,0x30,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x14,0x1e,0x20,0x20,0x7c,0x91,0x14,0xfe,0x10,0x10,0x12,0x14,0x18,0x13,0x0,0x20,0x20,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x15,0xff,0x11,0x11,0x13,0x15,0x19,0x12,0x4,0x4,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,
++0x10,0x12,0x1f,0x20,0x24,0x7e,0x90,0x12,0xff,0x10,0x10,0x12,0x14,0x18,0x11,0x6,0x4,0xc,0x10,0x20,0x40,0x84,0xc,0x10,0x20,0x42,0x6,0x8,0x10,0x60,0x80,0x0,
++0x12,0x11,0x1c,0x22,0x22,0x7e,0x92,0x12,0xfe,0x12,0x12,0x12,0x16,0x1a,0x12,0x2,0x4,0x7e,0x84,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x14,0x8,
++0x10,0x14,0x1e,0x20,0x21,0x7c,0x90,0x14,0xfe,0x10,0x10,0x12,0x14,0x18,0x11,0x6,0x0,0x4,0xfe,0x4,0x44,0xa8,0xa8,0x48,0x50,0x20,0x50,0x50,0x88,0x88,0x6,0x4,
++0x10,0x14,0x1e,0x20,0x20,0x7f,0x90,0x14,0xfe,0x11,0x10,0x12,0x14,0x18,0x11,0x6,0x40,0x40,0x40,0x40,0x44,0xfe,0x88,0x88,0x88,0x8,0x88,0x50,0x20,0x50,0x8c,0x4,
++0x10,0x14,0x1f,0x20,0x20,0x7c,0x90,0x14,0xfe,0x11,0x12,0x10,0x14,0x18,0x10,0x0,0x0,0x4,0xfe,0x10,0x10,0x20,0x20,0x60,0xa8,0x26,0x22,0x20,0x20,0x20,0x20,0x20,
++0x10,0x14,0x1e,0x20,0x20,0x7f,0x90,0x14,0xfe,0x10,0x10,0x15,0x19,0x12,0x4,0x8,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0xa0,0xa0,0x90,0x10,0x88,0x48,0x46,0x4,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x15,0xff,0x11,0x11,0x11,0x15,0x19,0x11,0x0,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x10,0x14,0x1f,0x21,0x21,0x7d,0x91,0x15,0xff,0x11,0x11,0x11,0x15,0x1a,0x12,0x5,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x4,0x44,0x48,0x48,0x30,0x10,0x28,0x48,0x86,0x4,
++0x10,0x14,0x1e,0x20,0x21,0x7e,0x94,0x10,0xfe,0x11,0x10,0x12,0x14,0x18,0x10,0x0,0x40,0x40,0xa0,0xa0,0x10,0x8e,0x44,0x40,0x0,0xf8,0x8,0x10,0x10,0x20,0x40,0x80,
++0x10,0x14,0x1e,0x21,0x20,0x7c,0x90,0x14,0xfe,0x10,0x10,0x10,0x15,0x19,0x12,0x4,0x40,0x20,0x24,0xfe,0x40,0x44,0x7e,0x44,0x44,0x44,0x84,0x84,0x4,0x4,0x28,0x10,
++0x10,0x14,0x1e,0x21,0x20,0x7c,0x90,0x14,0xfe,0x10,0x10,0x12,0x15,0x19,0x12,0x4,0x40,0x20,0x4,0xfe,0x0,0x10,0xf8,0x90,0x90,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x10,0x14,0x1e,0x20,0x24,0x7e,0x90,0x14,0xfe,0x10,0x13,0x10,0x14,0x18,0x10,0x0,0x8,0x88,0x48,0x48,0x8,0x88,0x48,0x48,0xe,0x78,0x88,0x8,0x8,0x8,0x8,0x8,
++0x10,0x14,0x1e,0x20,0x20,0x7c,0x90,0x11,0xfe,0x10,0x10,0x12,0x14,0x18,0x11,0x2,0x20,0x20,0x20,0x20,0xa4,0xac,0xb0,0x20,0x20,0x50,0x50,0x50,0x88,0x88,0x6,0x4,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x11,0xff,0x11,0x11,0x13,0x15,0x19,0x10,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x15,0x1e,0x20,0x20,0x7c,0x90,0x11,0xfe,0x10,0x10,0x12,0x14,0x18,0x13,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x28,0xfc,0x20,0x30,0x28,0x28,0x20,0x24,0xfe,0x0,
++0x10,0x13,0x1e,0x20,0x20,0x7c,0x91,0x11,0xfd,0x11,0x11,0x11,0x15,0x19,0x17,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x14,0x1e,0x20,0x23,0x7c,0x90,0x10,0xfd,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x14,0x1f,0x20,0x20,0x7d,0x91,0x11,0xff,0x11,0x11,0x11,0x14,0x18,0x10,0x0,0x0,0x4,0xfe,0x8,0x8,0xe8,0x28,0x28,0x28,0x28,0xe8,0x8,0x8,0x8,0x28,0x10,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x11,0xff,0x11,0x11,0x11,0x15,0x19,0x11,0x0,0x4,0xfe,0x0,0x8,0x7c,0x48,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x4,0xfe,0x0,
++0x10,0x10,0x1e,0x23,0x20,0x7c,0x91,0x13,0xfd,0x11,0x11,0x11,0x15,0x19,0x10,0x0,0x40,0x40,0x44,0xfe,0x80,0xa0,0x24,0xfe,0x24,0x24,0x24,0x24,0x34,0x28,0x20,0x20,
++0x10,0x14,0x1e,0x20,0x23,0x7c,0x90,0x14,0xfe,0x10,0x10,0x13,0x15,0x19,0x12,0x4,0x40,0x50,0x48,0x48,0xfe,0x40,0x40,0xfc,0x84,0xa4,0xa8,0x28,0x10,0x28,0x46,0x84,
++0x10,0x14,0x1e,0x20,0x21,0x7d,0x91,0x15,0xff,0x11,0x11,0x13,0x15,0x19,0x10,0x0,0x20,0x28,0x24,0x20,0xfe,0x20,0x20,0x24,0x24,0x24,0x18,0x50,0x92,0x2a,0x4a,0x84,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x11,0xff,0x11,0x11,0x13,0x15,0x19,0x11,0x1,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x14,0x1f,0x21,0x21,0x7d,0x91,0x11,0xff,0x11,0x11,0x11,0x14,0x18,0x13,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0xfe,0x0,
++0x10,0x14,0x1f,0x21,0x21,0x7d,0x91,0x11,0xfd,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x10,0x1d,0x21,0x21,0x7d,0x91,0x15,0xfe,0x10,0x10,0x10,0x15,0x1a,0x10,0x0,0x8,0x1c,0xe0,0x0,0x20,0x20,0x24,0xfe,0x20,0x20,0xa8,0xa4,0x26,0x22,0xa0,0x40,
++0x10,0x10,0x1e,0x23,0x20,0x7c,0x91,0x15,0xff,0x11,0x11,0x11,0x15,0x19,0x10,0x0,0x40,0x20,0x24,0xfe,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x24,0x2c,0x20,0x20,
++0x10,0x10,0x1e,0x23,0x20,0x7c,0x90,0x11,0xfd,0x10,0x10,0x12,0x14,0x19,0x13,0x0,0x40,0x20,0x24,0xfe,0x40,0x40,0x88,0x8,0xf0,0x20,0x40,0x40,0x88,0x4,0xfc,0x4,
++0x10,0x10,0x1e,0x23,0x22,0x7c,0x90,0x14,0xfc,0x10,0x10,0x10,0x14,0x18,0x10,0x0,0x40,0x20,0x20,0xfe,0x2,0x84,0x80,0x90,0xb0,0xc0,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x10,0x14,0x1e,0x20,0x20,0x7c,0x90,0x12,0xfe,0x12,0x14,0x10,0x15,0x1a,0x14,0x0,0x0,0x44,0x24,0x28,0x88,0x90,0x90,0xa4,0xa2,0xc2,0x82,0x80,0x84,0x84,0x7c,0x0,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x15,0xff,0x11,0x11,0x11,0x15,0x19,0x12,0x4,0x4,0xfe,0x4,0x4,0xfc,0x0,0x40,0x44,0x4c,0x50,0x60,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x14,0x1e,0x21,0x21,0x7d,0x91,0x15,0xff,0x11,0x11,0x11,0x15,0x1a,0x12,0x5,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xfc,0x8,0x48,0x50,0x20,0x50,0x48,0x8e,0x4,
++0x10,0x15,0x1e,0x20,0x20,0x7c,0x90,0x13,0xfe,0x10,0x10,0x11,0x14,0x18,0x10,0x0,0x0,0xfc,0x88,0x50,0x20,0x50,0x8e,0x24,0xf8,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,
++0x10,0x14,0x1f,0x20,0x24,0x7f,0x90,0x10,0xfd,0x12,0x14,0x12,0x14,0x18,0x10,0x0,0x40,0x44,0xf8,0x50,0x64,0xfe,0x40,0x88,0xfc,0x40,0x7c,0x4,0x4,0x44,0x28,0x10,
++0x10,0x10,0x1d,0x20,0x20,0x7c,0x93,0x10,0xfd,0x12,0x14,0x10,0x14,0x18,0x10,0x0,0x40,0x44,0xfc,0x48,0x50,0x64,0xfe,0x80,0x88,0x98,0xa0,0xc0,0x84,0x84,0x7c,0x0,
++0x10,0x17,0x1d,0x21,0x21,0x7d,0x91,0x11,0xfd,0x11,0x11,0x11,0x17,0x18,0x10,0x0,0x4,0xfe,0x8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x3e,0xc8,0x8,0x8,0x8,
++0x10,0x14,0x1f,0x20,0x21,0x7d,0x93,0x15,0xfd,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x80,0x84,0xfe,0x80,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x10,0x10,0x1c,0x23,0x22,0x7e,0x92,0x13,0xfe,0x12,0x12,0x17,0x1a,0x12,0x4,0x8,0x10,0x18,0x14,0xfe,0x10,0x10,0x10,0xd4,0x54,0x54,0x54,0x58,0x88,0xa,0xa,0x6,
++0x10,0x10,0x1e,0x23,0x20,0x7e,0x91,0x10,0xff,0x10,0x10,0x10,0x15,0x19,0x12,0xc,0x40,0x40,0x48,0xfc,0x40,0x48,0x50,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x10,0xe,0x4,
++0x10,0x10,0x1e,0x23,0x20,0x7c,0x91,0x14,0xff,0x10,0x10,0x10,0x15,0x19,0x12,0x4,0x40,0x40,0x5c,0xe0,0x28,0x32,0xce,0x0,0xfc,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x20,0x2f,0x38,0x22,0x42,0x7c,0xa4,0x27,0xf9,0x21,0x22,0x2a,0x34,0x24,0xa,0x1,0x0,0xfc,0xa4,0xa4,0xa4,0xa8,0xa4,0xe4,0xa2,0xa2,0xa2,0xb4,0xa8,0xa0,0xa0,0x20,
++0x10,0x15,0x1e,0x20,0x20,0x7c,0x93,0x10,0xfe,0x10,0x11,0x10,0x14,0x18,0x13,0x0,0x20,0x24,0xa4,0xa8,0xb0,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x20,0x23,0x3a,0x22,0x43,0x78,0xa0,0x27,0xfc,0x24,0x24,0x24,0x2c,0x34,0x20,0x0,0x8,0xfc,0x8,0x8,0xf8,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x54,0x48,0x40,0x40,
++0x20,0x27,0x3c,0x24,0x44,0x7c,0xa7,0x24,0xfc,0x24,0x24,0x25,0x2c,0x34,0x27,0x4,0x4,0xfe,0x4,0x44,0x44,0x54,0xfc,0x44,0x44,0xa4,0x94,0x14,0x4,0x4,0xfc,0x4,
++0x10,0x15,0x1f,0x21,0x21,0x7c,0x91,0x14,0xfe,0x11,0x11,0x11,0x15,0x19,0x10,0x0,0x20,0x24,0x24,0x24,0xfc,0x0,0xfc,0x4,0x4,0xfc,0x4,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x11,0x1d,0x21,0x22,0x7e,0x90,0x13,0xfc,0x10,0x10,0x14,0x19,0x12,0x4,0x0,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x60,0x70,0xa8,0xa8,0x24,0x26,0x20,0x20,
++0x10,0x10,0x1c,0x27,0x20,0x7d,0x92,0x13,0xfc,0x10,0x14,0x12,0x15,0x19,0x12,0x4,0x0,0xc,0x70,0x90,0x90,0x14,0x7e,0x90,0x90,0x90,0x94,0xfe,0x0,0x80,0x46,0x3c,
++0x10,0x10,0x1d,0x20,0x20,0x7d,0x90,0x10,0xfc,0x13,0x10,0x12,0x14,0x19,0x13,0x0,0x8,0x3c,0xe0,0x20,0x20,0xfc,0x20,0x20,0x24,0xfe,0x40,0x40,0x90,0x8,0xfc,0x4,
++0x10,0x10,0x1c,0x20,0x21,0x7e,0x94,0x10,0xfc,0x10,0x13,0x10,0x14,0x18,0x10,0x0,0x50,0x50,0x94,0x98,0x90,0xb0,0xd2,0x8e,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x10,0x10,0x1c,0x21,0x22,0x7f,0x90,0x10,0xfc,0x13,0x10,0x10,0x14,0x18,0x17,0x0,0x40,0x40,0xa0,0x10,0x8,0xfe,0x44,0x40,0x40,0xf8,0x40,0x40,0x40,0x48,0xfc,0x0,
++0x10,0x10,0x1e,0x20,0x21,0x7e,0x91,0x10,0xfe,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x20,0x20,0x50,0x88,0x4,0x2,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x11,0x14,0x1e,0x20,0x20,0x7c,0x91,0x10,0xfd,0x10,0x10,0x12,0x15,0x1a,0x10,0x0,0x4,0x8c,0x50,0x20,0x50,0x8c,0x24,0x20,0xfe,0x20,0xa8,0xa4,0x22,0x22,0xa0,0x40,
++0x10,0x14,0x1e,0x20,0x24,0x7e,0x91,0x10,0xfc,0x11,0x16,0x10,0x15,0x19,0x12,0x4,0x20,0xa0,0xa0,0xa0,0xa4,0xac,0xb0,0xa0,0xa0,0xb0,0xa8,0xa8,0x22,0x22,0x1e,0x0,
++0x10,0x14,0x1e,0x21,0x20,0x7d,0x90,0x10,0xfd,0x10,0x10,0x11,0x14,0x18,0x10,0x0,0x40,0x40,0xf8,0x10,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x20,0xa0,0x40,
++0x10,0x14,0x1e,0x21,0x22,0x7d,0x91,0x15,0xff,0x11,0x11,0x13,0x15,0x19,0x10,0x0,0x80,0x80,0xf8,0x10,0x24,0xfe,0x24,0x24,0x24,0xfc,0x4,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x14,0x1e,0x23,0x20,0x7c,0x90,0x15,0xfe,0x10,0x10,0x12,0x14,0x19,0x12,0x0,0x40,0x20,0x24,0xfe,0x40,0x88,0x84,0xfc,0x90,0x90,0x90,0x90,0x92,0x12,0xe,0x0,
++0x20,0x24,0x3b,0x41,0x40,0x74,0xa2,0x22,0xf8,0x21,0x22,0x22,0x2c,0x35,0x22,0x0,0x0,0xfc,0x8,0x10,0x20,0x44,0xfe,0x54,0x54,0x54,0x54,0x94,0xa4,0x24,0x54,0x88,
++0x10,0x10,0x1e,0x23,0x22,0x7c,0x90,0x17,0xfc,0x10,0x11,0x10,0x14,0x18,0x11,0x2,0x40,0x20,0x20,0xfe,0x2,0x44,0x40,0xfe,0x88,0x88,0x8,0x90,0x60,0x90,0xc,0x4,
++0x11,0x11,0x1d,0x27,0x21,0x7d,0x91,0x11,0xfd,0x12,0x11,0x14,0x19,0x12,0x4,0x0,0x0,0x0,0x4,0xde,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x94,0x54,0x5c,0x14,0x0,
++0x10,0x10,0x1f,0x20,0x20,0x7b,0x92,0x12,0xfd,0x10,0x10,0x10,0x14,0x18,0x11,0x2,0x88,0x88,0xfe,0x88,0x88,0xfe,0x42,0x44,0xfe,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x20,0x20,0x3b,0x40,0x42,0x79,0xa0,0x27,0xf8,0x20,0x21,0x21,0x2a,0x34,0x28,0x0,0x40,0x40,0xfc,0x40,0x48,0x50,0x44,0xfe,0x40,0xe0,0x50,0x50,0x48,0x46,0x44,0x40,
++0x20,0x20,0x38,0x47,0x40,0x7a,0xa1,0x20,0xfa,0x22,0x26,0x2a,0x2a,0x32,0x21,0x0,0x20,0x28,0x24,0xfe,0x20,0x20,0xa0,0xa0,0x10,0x90,0x50,0x50,0x90,0x8a,0x86,0x2,
++0x20,0x22,0x3a,0x42,0x42,0x7a,0xa2,0x22,0xf8,0x20,0x20,0x25,0x28,0x30,0x23,0x0,0x80,0xfc,0xa4,0xa8,0x90,0xa8,0xa6,0xc4,0x80,0xa0,0x28,0xfc,0x20,0x24,0xfe,0x0,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x90,0x13,0xfc,0x10,0x11,0x10,0x14,0x18,0x13,0x0,0x4,0xfe,0x4,0x4,0x4,0xfc,0x0,0xfe,0x20,0x20,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x11,0xff,0x10,0x11,0x10,0x14,0x18,0x13,0x0,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x20,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x1c,0x21,0x21,0x7e,0x90,0x13,0xfc,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x20,0xa0,0xa4,0xfe,0x20,0x20,0x24,0xfe,0x0,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x1c,0x23,0x20,0x7f,0x90,0x10,0xfc,0x11,0x12,0x10,0x14,0x18,0x12,0x1,0x10,0x58,0x94,0x90,0x90,0xfe,0x90,0x94,0xd4,0x98,0x90,0xb0,0xd2,0x92,0x8a,0x4,
++0x10,0x14,0x1e,0x21,0x21,0x7d,0x91,0x12,0xfc,0x10,0x11,0x10,0x14,0x18,0x13,0x0,0x20,0x20,0x20,0x24,0x24,0x28,0xac,0x72,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x14,0x1f,0x20,0x21,0x7c,0x90,0x10,0xfd,0x10,0x11,0x10,0x14,0x18,0x10,0x0,0x8,0x1c,0xe0,0x44,0x24,0xa8,0x90,0x8,0xfe,0x8,0x8,0x88,0x88,0x8,0x28,0x10,
++0x10,0x14,0x1f,0x20,0x20,0x7d,0x93,0x10,0xfd,0x11,0x11,0x11,0x15,0x19,0x12,0x4,0x40,0x24,0xfe,0x80,0x90,0x8,0xfc,0x4,0x50,0x50,0x50,0x50,0x52,0x52,0x4e,0x0,
++0x12,0x11,0x1c,0x22,0x22,0x7f,0x92,0x12,0xfe,0x13,0x12,0x12,0x16,0x1b,0x12,0x2,0x4,0x7e,0x84,0x4,0x4,0xfc,0x94,0x94,0x94,0xfc,0x94,0x94,0x94,0x14,0x4,0xc,
++0x12,0x11,0x1c,0x22,0x22,0x7e,0x92,0x12,0xfe,0x12,0x12,0x12,0x16,0x1a,0x12,0x2,0x4,0x7e,0x84,0x4,0x4,0xf4,0x94,0x94,0xf4,0x94,0x94,0xf4,0x94,0x4,0x14,0x8,
++0x10,0x14,0x1f,0x21,0x21,0x7d,0x91,0x11,0xfd,0x11,0x11,0x13,0x15,0x19,0x11,0x1,0x40,0x28,0xfc,0x8,0x8,0xf8,0x8,0x8,0xfc,0x48,0x50,0x20,0x10,0x48,0x86,0x0,
++0x10,0x11,0x1e,0x20,0x20,0x7d,0x90,0x13,0xfe,0x14,0x10,0x12,0x14,0x18,0x10,0x3,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x0,0xfe,0x2,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x13,0x1e,0x22,0x23,0x7e,0x92,0x13,0xfe,0x12,0x12,0x16,0x1a,0x12,0x4,0x8,0x4,0xfe,0x4,0x4,0xfc,0x0,0x4,0xfe,0x4,0xf4,0x94,0x94,0xf4,0x4,0x14,0x8,
++0x20,0x27,0x3d,0x45,0x45,0x7e,0xa5,0x25,0xfd,0x25,0x27,0x25,0x2c,0x34,0x24,0x4,0x0,0x4,0xfe,0x4,0x4,0x74,0x54,0x54,0x54,0x54,0x54,0x74,0x44,0x4,0x14,0x8,
++0x10,0x14,0x1f,0x20,0x21,0x7c,0x93,0x10,0xfd,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x20,0x24,0xfe,0x20,0xfc,0x20,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x4,0x14,0x8,
++0x10,0x10,0x1f,0x20,0x20,0x7c,0x97,0x10,0xfc,0x11,0x13,0x15,0x11,0x19,0x11,0x1,0x88,0x88,0xfe,0x88,0x40,0x44,0xfe,0x80,0x84,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x1f,0x20,0x21,0x7e,0x95,0x10,0xfd,0x11,0x1f,0x11,0x15,0x19,0x12,0x4,0x40,0x44,0xfe,0xa0,0x10,0x4e,0xf4,0x40,0x50,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x90,0x15,0xfe,0x10,0x13,0x10,0x14,0x18,0x10,0x0,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x0,0xfc,0x8,0x8,0xfe,0x88,0x48,0x8,0x28,0x10,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x11,0xfc,0x13,0x10,0x10,0x14,0x19,0x12,0x0,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x20,0x70,0xa8,0x26,0x24,0x20,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x11,0xfe,0x11,0x11,0x13,0x15,0x19,0x11,0x0,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x10,0x14,0xd8,0x10,0x12,0x52,0x8e,0x0,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x11,0xff,0x11,0x11,0x13,0x15,0x19,0x11,0x1,0x4,0xfe,0x4,0x24,0x24,0xfc,0x24,0x24,0x74,0x54,0x54,0x74,0x54,0x4,0xfc,0x4,
++0x11,0x11,0x1d,0x22,0x22,0x7c,0x91,0x11,0xfe,0x10,0x13,0x13,0x15,0x19,0x10,0x0,0x0,0x4,0xfe,0x94,0x94,0xa4,0x24,0x54,0x8,0x40,0x28,0x26,0xa,0x8,0xf8,0x0,
++0x10,0x14,0x1f,0x20,0x21,0x7c,0x90,0x13,0xfc,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x40,0x28,0xfc,0x0,0x8,0x90,0x4,0xfe,0x0,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x12,0x1d,0x20,0x23,0x7c,0x97,0x10,0xfd,0x13,0x15,0x11,0x15,0x19,0x11,0x0,0x40,0x48,0x50,0x40,0xfc,0x40,0xfe,0xa0,0x10,0xf8,0x16,0x10,0x50,0x24,0x4,0xfc,
++0x10,0x14,0x1e,0x20,0x21,0x7c,0x90,0x13,0xfe,0x10,0x10,0x11,0x14,0x18,0x10,0x3,0x20,0x24,0xac,0xb0,0x20,0x58,0x86,0x22,0x20,0xa4,0xac,0x30,0x50,0x50,0x8e,0x4,
++0x21,0x21,0x3a,0x44,0x42,0x79,0xa1,0x27,0xfc,0x24,0x27,0x24,0x2c,0x34,0x27,0x4,0x24,0x24,0x48,0x90,0x48,0x24,0x24,0xfe,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x4,
++0x21,0x21,0x3f,0x41,0x47,0x79,0xa7,0x21,0xf9,0x20,0x27,0x20,0x28,0x30,0x21,0x6,0x0,0x4,0xfe,0x14,0xd4,0x14,0xd4,0x24,0x4c,0x40,0xfe,0x40,0xa0,0x90,0xe,0x4,
++0x10,0x12,0x1f,0x22,0x22,0x7e,0x93,0x10,0xfd,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x20,0x24,0xa8,0x30,0x22,0xa2,0x5e,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x11,0x1d,0x21,0x21,0x7d,0x91,0x11,0xfd,0x10,0x12,0x12,0x14,0x18,0x10,0x0,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,0x40,0xa8,0xa4,0x8a,0x8a,0x78,0x0,
++0x10,0x15,0x1f,0x21,0x21,0x7c,0x91,0x10,0xff,0x10,0x10,0x10,0x14,0x18,0x10,0x0,0x0,0xdc,0x54,0x54,0xdc,0x8,0xfc,0x0,0xfe,0x80,0xf8,0x8,0x8,0x8,0x50,0x20,
++0x20,0x20,0x3b,0x40,0x48,0x7f,0xa0,0x21,0xfe,0x24,0x24,0x27,0x2c,0x34,0x27,0x4,0x8,0x7c,0xc0,0x40,0x44,0xfe,0x40,0x44,0x5e,0x44,0x44,0x5c,0x44,0x44,0xfc,0x4,
++0x10,0x10,0x1d,0x21,0x21,0x7d,0x91,0x11,0xfe,0x11,0x10,0x12,0x14,0x18,0x11,0x6,0x20,0xac,0x24,0x24,0xac,0x24,0x24,0xfc,0x20,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x13,0x1c,0x21,0x20,0x7d,0x90,0x13,0xfc,0x10,0x11,0x11,0x16,0x1a,0x14,0x1,0x3c,0xc0,0x24,0x24,0xa8,0xfc,0x40,0xfe,0x80,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x14,0x1f,0x20,0x21,0x7d,0x91,0x11,0xfe,0x10,0x10,0x10,0x15,0x1a,0x14,0x0,0x40,0x24,0xfe,0x0,0xfc,0x4,0x4,0xfc,0x40,0x44,0xa8,0x90,0x90,0xa8,0xc6,0x84,
++0x10,0x11,0x1c,0x20,0x23,0x7c,0x90,0x11,0xfc,0x13,0x10,0x11,0x14,0x18,0x10,0x3,0x20,0x24,0xa8,0x20,0xfe,0x70,0xa8,0x26,0x40,0xfe,0x88,0x8,0xd0,0x30,0xcc,0x4,
++0x21,0x21,0x39,0x45,0x43,0x79,0xa1,0x21,0xfb,0x25,0x29,0x21,0x29,0x31,0x21,0x1,0x20,0x20,0x3c,0x44,0xa8,0x10,0x28,0x48,0xfe,0x8,0x48,0x28,0x28,0x8,0x28,0x10,
++0x21,0x21,0x3f,0x41,0x47,0x7d,0xa7,0x21,0xfb,0x22,0x22,0x22,0x2a,0x30,0x21,0x6,0x10,0x14,0xfe,0x14,0xfc,0x10,0xfe,0x12,0xfe,0x8,0x48,0x48,0x48,0xb0,0xc,0x4,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x11,0xfe,0x12,0x12,0x16,0x1a,0x12,0x4,0x8,0x4,0xfe,0x24,0x24,0xfc,0x0,0xfc,0x84,0x84,0xfc,0x84,0xfc,0x84,0x84,0xfc,0x84,
++0x11,0x11,0x1f,0x21,0x23,0x7e,0x93,0x12,0xff,0x10,0x10,0x17,0x14,0x18,0x11,0x6,0x10,0x14,0xfe,0x10,0xf8,0x8,0xf8,0x8,0xf8,0x40,0x44,0xfe,0x40,0xa0,0x1c,0x8,
++0x20,0x27,0x38,0x43,0x42,0x7a,0xa3,0x20,0xff,0x25,0x24,0x27,0x2c,0x34,0x24,0x4,0x8,0xfc,0x0,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x14,0xa4,0xfc,0x44,0x44,0x54,0x8,
++0x10,0x10,0x1d,0x21,0x23,0x7d,0x91,0x11,0xfd,0x11,0x13,0x10,0x14,0x19,0x12,0x4,0xa0,0xa8,0xfc,0x20,0xf8,0x20,0xf8,0x20,0xfe,0x0,0xf8,0x88,0x9c,0x4,0x28,0x10,
++0x20,0x20,0x39,0x43,0x44,0x7b,0xa2,0x23,0xf8,0x27,0x20,0x23,0x28,0x37,0x20,0x0,0x40,0xa0,0x10,0xf8,0x6,0xf8,0x8,0xf8,0x1c,0xe0,0x40,0xf8,0x40,0xfe,0x40,0xc0,
++0x20,0x27,0x3c,0x44,0x45,0x7d,0xa6,0x20,0xff,0x24,0x24,0x27,0x2c,0x34,0x27,0x4,0x84,0x7e,0x24,0x24,0x24,0xa4,0x54,0x88,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x10,0x14,0x1e,0x20,0x23,0x7c,0x90,0x15,0xfe,0x11,0x11,0x11,0x15,0x19,0x13,0x0,0x0,0x88,0x50,0x4,0xfe,0x50,0x8c,0x4,0x0,0xfc,0x54,0x54,0x54,0x54,0xfe,0x0,
++0x10,0x12,0x1f,0x22,0x24,0x7f,0x90,0x10,0xff,0x10,0x13,0x10,0x14,0x1b,0x10,0x0,0x40,0x20,0xfe,0x2,0x4,0xfe,0x40,0xc4,0x68,0xb0,0x30,0x68,0xa8,0x26,0xa4,0x40,
++0x10,0x12,0x1f,0x22,0x24,0x7d,0x91,0x11,0xfd,0x11,0x11,0x17,0x14,0x19,0x12,0x4,0x40,0x20,0xfe,0x2,0x34,0xc0,0x8,0xfc,0x10,0x10,0x14,0xfe,0x0,0x10,0xc,0x4,
++0x10,0x13,0x1c,0x20,0x21,0x7d,0x91,0x15,0xfe,0x11,0x10,0x13,0x14,0x19,0x12,0x0,0x4,0xfe,0x50,0x54,0xfe,0x54,0x54,0xfc,0x0,0xfc,0x0,0xfe,0xa8,0x26,0x22,0x60,
++0x20,0x22,0x39,0x40,0x47,0x7c,0xa9,0x21,0xf9,0x21,0x20,0x23,0x28,0x30,0x2f,0x0,0x40,0x48,0x50,0x40,0xfe,0x2,0xf4,0x10,0x10,0xf0,0x40,0xf8,0x40,0x44,0xfe,0x0,
++0x20,0x23,0x3a,0x43,0x42,0x7b,0xa0,0x27,0xfc,0x27,0x20,0x23,0x29,0x30,0x23,0xc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x4,0xfe,0xa4,0xfc,0x0,0xf8,0x10,0xe0,0x10,0xe,
++0x20,0x27,0x3c,0x47,0x44,0x7f,0xa0,0x21,0xfb,0x20,0x20,0x27,0x29,0x32,0x24,0x0,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x80,0x8,0xf0,0x20,0x48,0xfc,0x50,0x4c,0x44,0xc0,
++0x20,0x27,0x3c,0x45,0x44,0x7f,0xa4,0x25,0xfc,0x25,0x25,0x25,0x2d,0x35,0x29,0x11,0x20,0xfe,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x24,0x2c,
++0x22,0x21,0x39,0x47,0x42,0x7a,0xa3,0x22,0xfa,0x22,0x22,0x22,0x2c,0x34,0x29,0x0,0x20,0x20,0x24,0xfe,0x40,0x20,0xbc,0xd0,0x94,0xfe,0x90,0x90,0xa8,0xa6,0xc2,0x0,
++0x24,0x22,0x38,0x4f,0x44,0x7c,0xa7,0x25,0xfd,0x25,0x25,0x2d,0x35,0x25,0xb,0x11,0x40,0x40,0x44,0xfe,0x80,0x0,0x7e,0x14,0x10,0x54,0x5e,0x50,0x50,0x70,0x9e,0x4,
++0x20,0x28,0x3f,0x41,0x40,0x7f,0xa4,0x24,0xff,0x24,0x25,0x25,0x2d,0x35,0x24,0x4,0x80,0x44,0xfe,0x10,0xa4,0xfe,0x44,0x54,0xfc,0x44,0xf4,0x14,0x14,0xf4,0x4,0xc,
++0x10,0x13,0x1c,0x21,0x21,0x7d,0x90,0x15,0xff,0x11,0x11,0x11,0x14,0x1b,0x10,0x0,0x4,0xfe,0x50,0xfc,0x54,0xfc,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x20,0xfe,0x20,0x20,
++0x20,0x2f,0x38,0x4a,0x49,0x7f,0xa8,0x2a,0xfa,0x2a,0x2b,0x28,0x38,0x29,0x12,0x24,0x4,0xfe,0x8,0x28,0x48,0xee,0x92,0xa4,0xa8,0xa8,0xe8,0xa8,0x94,0x14,0x24,0x42,
++0x20,0x24,0x3a,0x40,0x4f,0x79,0xa0,0x27,0xf8,0x23,0x20,0x27,0x28,0x30,0x21,0x6,0xa0,0xa4,0xa8,0xa0,0xfe,0x10,0xa0,0xfc,0x40,0xf8,0x40,0xfc,0x40,0xa0,0x1c,0x8,
++0x10,0x10,0x1d,0x23,0x21,0x7d,0x91,0x11,0xfc,0x13,0x10,0x11,0x15,0x19,0x11,0x1,0x80,0xf8,0x10,0xfc,0x24,0xfc,0x24,0xfc,0x0,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,
++0x22,0x21,0x3f,0x40,0x47,0x7c,0xa4,0x27,0xf8,0x27,0x20,0x21,0x2f,0x31,0x25,0x2,0x10,0x10,0xf4,0x1e,0xe4,0x54,0x54,0xd4,0x14,0xc8,0x88,0xd4,0x14,0x24,0x22,0x40,
++0x24,0x22,0x39,0x44,0x47,0x7c,0xa5,0x25,0xfd,0x25,0x25,0x24,0x2d,0x36,0x24,0x4,0x4,0xfe,0x44,0x54,0xfc,0x44,0xf4,0x54,0xf4,0x54,0xf4,0xe4,0x54,0x4c,0x44,0x4c,
++0x11,0x10,0x1f,0x20,0x22,0x7d,0x90,0x17,0xfc,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x8,0x90,0xfc,0x90,0x94,0x98,0x90,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,
++0x20,0x20,0x3f,0x45,0x4a,0x78,0xa3,0x22,0xfb,0x20,0x23,0x22,0x2b,0x32,0x20,0x0,0x80,0x40,0xfe,0x12,0x4c,0x40,0xf8,0x48,0xf8,0x40,0xf8,0x48,0xf8,0x48,0x40,0x40,
++0x20,0x27,0x39,0x41,0x41,0x7f,0xa4,0x24,0xfc,0x27,0x21,0x21,0x29,0x31,0x2a,0x4,0x4,0x7e,0x44,0x44,0x7c,0x10,0xfe,0x92,0x92,0x92,0xfe,0x10,0x10,0x14,0xfe,0x42,
++0x20,0x23,0x38,0x42,0x41,0x7b,0xa4,0x23,0xfa,0x22,0x23,0x20,0x29,0x30,0x2f,0x0,0x28,0xb0,0xa4,0x98,0x10,0xf8,0x4,0xfa,0x8,0x8,0xf8,0x0,0x10,0xa4,0xfe,0x0,
++0x21,0x27,0x39,0x41,0x42,0x7f,0xa2,0x23,0xfa,0x23,0x22,0x23,0x29,0x30,0x23,0xc,0x8,0xfe,0x28,0xfe,0x20,0xfc,0x20,0xfc,0x20,0xfe,0x0,0xf8,0x10,0xe0,0x18,0x6,
++0x20,0x27,0x3c,0x44,0x47,0x79,0xa3,0x24,0xf8,0x27,0x24,0x27,0x28,0x30,0x27,0x0,0x4,0xfe,0xa4,0xa4,0xfc,0x0,0xfc,0x84,0x84,0xf4,0x94,0xf4,0x84,0xa4,0xf4,0x8,
++0x20,0x28,0x3f,0x41,0x48,0x7f,0xa0,0x23,0xfe,0x23,0x22,0x2b,0x30,0x25,0x9,0x0,0x80,0x48,0xfc,0x10,0xa4,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0x24,0xa,0xf8,
++0x20,0x20,0x3f,0x45,0x41,0x7a,0xa7,0x2d,0xf3,0x24,0x2b,0x20,0x29,0x32,0x24,0x0,0x80,0x40,0xfe,0x2,0xbc,0xa4,0xa8,0x10,0xf8,0x6,0xf8,0x40,0x50,0x4c,0x44,0xc0,
++0x20,0x20,0x3f,0x44,0x47,0x7c,0xa7,0x25,0xfd,0x25,0x25,0x2d,0x34,0x25,0x9,0x12,0x40,0x24,0xfe,0x90,0xfc,0x94,0xfc,0x10,0xd4,0x18,0x52,0x8e,0x0,0x54,0x52,0x2,
++0x20,0x20,0x3b,0x40,0x4f,0x78,0xa3,0x2a,0xff,0x22,0x23,0x20,0x2b,0x30,0x2f,0x0,0x8,0x1c,0xe0,0x44,0xfe,0x40,0xf8,0x48,0xf8,0x48,0xf8,0x40,0xf8,0x40,0xfe,0x0,
++0x20,0x23,0x20,0x3c,0x50,0x93,0x12,0xfe,0x12,0x13,0x10,0x28,0x24,0x44,0x81,0x0,0x44,0xe4,0x44,0x44,0x44,0xc4,0x44,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0x44,0x84,
++0x20,0x20,0x22,0x3e,0x52,0x92,0x15,0xfc,0x10,0x10,0x13,0x28,0x24,0x40,0x8f,0x0,0x40,0x40,0x48,0x48,0x48,0x48,0x54,0xe2,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x20,0x20,0x20,0x3d,0x51,0x93,0x15,0xfd,0x11,0x11,0x11,0x29,0x25,0x45,0x81,0x1,0x80,0xa0,0x94,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x0,0xe,0xf2,0x12,0x12,0xfe,0x13,0x32,0x3a,0x56,0x52,0x92,0x12,0x13,0x12,0x10,0x20,0x20,0x20,0x20,0x20,0x24,0xac,0x30,0x20,0x20,0x20,0x20,0xa2,0x22,0x1e,0x0,
++0x0,0xc,0xf0,0x13,0x12,0xfe,0x12,0x33,0x38,0x54,0x51,0x92,0x14,0x10,0x10,0x10,0x40,0x50,0x78,0xc0,0x40,0x40,0x44,0xfe,0x44,0xc4,0x44,0x54,0x48,0x40,0x40,0x40,
++0x0,0xc,0xf0,0x17,0x10,0xfc,0x13,0x30,0x38,0x55,0x51,0x92,0x14,0x10,0x10,0x10,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0xc0,0xe0,0x50,0x50,0x48,0x4e,0x44,0x40,0x40,
++0x0,0xc,0xf0,0x10,0x17,0xfc,0x10,0x30,0x38,0x55,0x51,0x91,0x12,0x14,0x18,0x10,0x40,0x50,0x48,0x48,0xfe,0x40,0x40,0xc0,0xe0,0x50,0x50,0x48,0x4e,0x44,0x40,0x40,
++0x0,0xd,0xf1,0x11,0x11,0xfd,0x11,0x30,0x38,0x57,0x52,0x92,0x12,0x12,0x13,0x12,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0xc,0xf0,0x17,0x10,0xfc,0x11,0x31,0x3a,0x54,0x50,0x92,0x12,0x12,0x13,0x10,0x80,0xa0,0x94,0xfe,0xa0,0xa0,0x22,0x22,0x1e,0x40,0x40,0x48,0x48,0x48,0xf8,0x8,
++0x8,0xc,0xf7,0x12,0x11,0xfc,0x13,0x30,0x38,0x54,0x57,0x90,0x10,0x10,0x11,0x10,0x8,0x3c,0xc0,0x48,0x50,0x0,0xf8,0x10,0x60,0x44,0xfe,0x40,0x40,0x40,0x40,0x80,
++0x0,0xc,0xf3,0x12,0x12,0xff,0x12,0x32,0x3b,0x56,0x52,0x92,0x12,0x12,0x13,0x12,0x80,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x4c,0x50,0x20,0x90,0xe,0x4,
++0x4,0xf,0xf1,0x11,0x15,0xff,0x11,0x31,0x38,0x57,0x50,0x90,0x10,0x11,0x12,0x10,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x20,0x70,0xa8,0x26,0x24,0x20,
++0x0,0xc,0xf0,0x10,0x11,0xfe,0x14,0x31,0x38,0x54,0x50,0x95,0x15,0x19,0x10,0x10,0x40,0x40,0xa0,0xa0,0x10,0x8e,0x44,0xf0,0x10,0xa0,0x40,0x44,0x12,0x12,0xf0,0x0,
++0x0,0xc,0xf7,0x10,0x13,0xfe,0x13,0x32,0x3b,0x56,0x53,0x92,0x1f,0x11,0x12,0x14,0x40,0x48,0xfc,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x10,0xc,0x4,
++0x0,0xd,0xf1,0x11,0x11,0xfd,0x11,0x31,0x39,0x56,0x50,0x91,0x12,0x10,0x11,0x16,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x44,0x7a,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x0,0xc,0xf7,0x10,0x12,0xf9,0x17,0x30,0x3f,0x54,0x55,0x95,0x15,0x14,0x17,0x14,0x40,0x48,0xfc,0x40,0x48,0x50,0xfe,0x4,0xfe,0x4,0xf4,0x14,0xf4,0x4,0xfc,0x4,
++0x0,0x6,0x78,0x9,0xff,0x1c,0x2a,0x48,0x14,0x2a,0x6b,0x9c,0x1a,0x69,0x8,0x18,0x20,0x20,0x24,0x3e,0xa0,0x20,0x24,0xfe,0x84,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x4,0xe,0xf1,0x12,0xfe,0x10,0x38,0x56,0x92,0x7c,0x44,0x7d,0x46,0x7c,0x44,0x1,0x84,0xfe,0x0,0xfc,0x84,0xfc,0x84,0xfc,0x40,0xfc,0x84,0x88,0x50,0x20,0x50,0x8e,
++0x4,0xb,0xf0,0x17,0x14,0xff,0x11,0x37,0x39,0x57,0x51,0x9f,0x11,0x13,0x1d,0x11,0x40,0xfe,0x0,0xbc,0xa4,0xbc,0x10,0xfc,0x10,0xf8,0x10,0xfe,0x48,0x30,0x8e,0x4,
++0x10,0x10,0x21,0x7d,0x45,0x45,0x45,0x7d,0x45,0x45,0x45,0x45,0x7e,0x42,0x4,0xb,0x8,0x1c,0xe0,0x0,0x0,0x0,0xfc,0x4,0x84,0x88,0x48,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x20,0x7f,0x48,0x49,0x4a,0x4d,0x79,0x48,0x48,0x48,0x48,0x79,0x42,0xc,0x80,0x40,0x44,0xfe,0x0,0x10,0xc,0x14,0x10,0xa0,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x10,0x11,0x21,0x79,0x49,0x4a,0x48,0x4f,0x78,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x8,0xfe,0x8,0x1c,0x2a,0x48,0x89,0xa,0x1f,0x10,0x1f,0x10,0x10,0x1f,0x10,0xc,0xf0,0x80,0x84,0xfe,0x90,0x90,0x10,0x10,0xf8,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x10,0x17,0x20,0x7a,0x4f,0x48,0x49,0x4a,0x7f,0x4a,0x4a,0x4b,0x4a,0x7a,0x4b,0x2,0x38,0xc0,0x48,0x54,0xfe,0xe0,0x50,0x48,0xfe,0x48,0x48,0xf8,0x48,0x48,0xf8,0x8,
++0x2,0x7,0x7a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x2a,0x5e,0x40,0x80,0x10,0x10,0x50,0x54,0x7e,0x90,0x14,0xfe,0x10,0x28,0x26,0x42,0x80,0x40,0x3e,0x4,
++0x10,0x12,0xff,0x28,0x26,0x42,0xbc,0x0,0xfe,0x20,0x7c,0x4,0x4,0x44,0x29,0x12,0x0,0xc,0xf8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xc8,0xd4,0x74,0x2,
++0x0,0x7f,0x4,0x2,0x1,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x21,0x21,0x21,0x20,0x10,0xf8,0x20,0xc0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x20,0x20,0x21,0x29,0xfd,0x29,0x29,0x29,0x29,0x29,0x28,0x2a,0x4d,0x48,0x80,0x0,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x4,0x4,0x2,0xff,0x0,0x4,0x1f,0x14,0x12,0x10,0x10,0x1f,0x0,0x7f,0x0,0x0,0x80,0x44,0x7e,0x80,0x82,0x62,0xfe,0x20,0x20,0xa0,0x44,0xfe,0x4,0xe4,0x14,0x8,
++0x0,0x40,0x49,0x59,0x61,0x45,0x45,0x3d,0x11,0x11,0xfe,0x10,0x13,0x10,0x10,0x10,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x10,0x11,0x51,0x7f,0x53,0x95,0x11,0x11,0x29,0x28,0x2a,0x4d,0x48,0x80,0x0,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x10,0x11,0x15,0xff,0x11,0x11,0x11,0x7d,0x45,0x44,0x44,0x47,0x7c,0x44,0x0,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x10,0x15,0xff,0x21,0x51,0x95,0xff,0x11,0x39,0x34,0x54,0x93,0x10,0x50,0x20,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x14,0x1f,0x11,0x15,0x7f,0x45,0x45,0x7d,0x45,0x40,0x40,0x43,0x40,0x80,0x0,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x20,0x20,0x25,0x7f,0x85,0x5,0x75,0x55,0x55,0x55,0x74,0x54,0x5,0x8,0x28,0x10,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x0,0x6,0x79,0x51,0x51,0x55,0x7f,0x49,0x49,0x49,0x48,0x44,0x45,0x54,0x6a,0x1,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x94,0x8,
++0x8,0x8,0x32,0xc,0x10,0x3e,0x0,0xff,0x2,0x1f,0x12,0x11,0x1f,0x0,0x7f,0x0,0x20,0x20,0xc8,0x30,0x40,0xf8,0x4,0xfe,0x0,0xf0,0x10,0x24,0xfe,0x4,0xe4,0xc,
++0x0,0x1,0xff,0x8,0x10,0x7f,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x43,0x0,0x10,0x24,0xfe,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x8,0x8,0xfe,0x8,0xe,0x78,0x9,0x1a,0x1f,0x12,0x11,0x1f,0x0,0x7f,0x0,0x0,0x40,0x48,0xfc,0x48,0xc8,0xaa,0xa,0x6,0xe0,0x20,0x44,0xfe,0x4,0xf4,0x4,0x18,
++0x0,0xc,0x71,0x11,0x11,0x15,0xff,0x11,0x15,0x7f,0x44,0x44,0x47,0x7c,0x44,0x0,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x12,0x12,0x12,0x22,0x3f,0x62,0xa6,0x27,0x2a,0x2a,0x32,0x22,0x22,0x22,0x22,0x22,0x10,0x24,0x7e,0x44,0xd4,0x44,0x54,0x48,0xc0,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x2,0x1,0xff,0x4,0x14,0x25,0x46,0x1f,0x12,0x11,0x10,0x1f,0x0,0x7f,0x0,0x0,0x0,0x4,0xfe,0x40,0x50,0x4c,0x44,0xe0,0x20,0x20,0x44,0xfe,0x4,0xf4,0x4,0x18,
++0x8,0xa,0x7f,0x8,0x48,0x7f,0x41,0x82,0x3e,0x4,0x8,0xfe,0xb,0x8,0x28,0x10,0x20,0x48,0xfc,0x88,0xa8,0x88,0xa8,0x90,0x84,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x0,0x1,0xff,0x0,0x0,0x77,0x55,0x55,0x55,0x77,0x55,0x55,0x55,0x55,0x55,0x0,0x10,0x24,0xfe,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x8,0x28,0x2a,0x3f,0x48,0x88,0xa,0xff,0x0,0x3e,0x22,0x22,0x23,0x22,0x3e,0x22,0x20,0x48,0xfc,0x88,0xa8,0x88,0xa8,0x90,0x84,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x0,0x28,0x45,0x93,0x11,0x29,0x45,0x83,0x7d,0x45,0x44,0x44,0x47,0x7c,0x44,0x0,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x40,0x2f,0x11,0x49,0x49,0x7f,0x49,0x59,0x5d,0x5b,0x69,0x49,0x49,0x41,0x45,0x42,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x22,0x14,0x7f,0x9,0x9,0x7f,0x48,0x48,0x7f,0x9,0x19,0x1d,0x2a,0xc8,0x8,0x8,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x4,0x6,0x7d,0x4,0x4,0xff,0x14,0x54,0x5c,0x54,0x52,0x52,0x5e,0xf1,0x40,0x0,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x82,0x8a,0x4,
++0x22,0x22,0xff,0x22,0x22,0x0,0x7f,0x49,0x49,0x49,0x7f,0x49,0x49,0x49,0x7f,0x41,0x10,0x24,0xfe,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x8,0x9,0xff,0x14,0x12,0x29,0x7f,0xc9,0x7f,0x49,0x49,0x7f,0x8,0xa,0xc,0x8,0x10,0x24,0xfe,0x44,0x54,0x44,0xd4,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x8,0x11,0x7f,0x49,0x49,0x7f,0x49,0x51,0x7f,0x10,0x29,0xff,0x8,0x8,0x8,0x8,0x10,0x24,0xfe,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x92,0xfa,0x2,0xa,0x4,
++0x10,0xa,0xff,0x0,0x3e,0x22,0x22,0x3e,0x0,0x7e,0x4,0xff,0x9,0x8,0x28,0x10,0x20,0x48,0xfc,0x88,0xa8,0x88,0xa8,0x90,0x84,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x20,0x27,0x25,0xfd,0x25,0x27,0x25,0x75,0x55,0x57,0x55,0x55,0x75,0x49,0x13,0x0,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x0,0x77,0x55,0x55,0x77,0x0,0x7f,0x0,0xff,0x20,0x3e,0x2,0x2,0x2,0x14,0x8,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0xc0,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x0,0x41,0x22,0x0,0xff,0x0,0x22,0x22,0x55,0xff,0x22,0x22,0x55,0xff,0x11,0x0,0x10,0x24,0x7e,0x44,0xd4,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x1,0x7f,0x49,0x49,0x7f,0x40,0x5f,0x51,0x51,0x5f,0x51,0x5f,0x51,0x51,0x9f,0x11,0x10,0xa4,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x7c,0x8,0xff,0x32,0x54,0x91,0x32,0x1f,0x12,0x11,0x10,0x1f,0x0,0x7f,0x0,0x0,0x80,0xfe,0x88,0x50,0x20,0x50,0x8e,0xe0,0x20,0x20,0x44,0xfe,0x4,0xf4,0x4,0x18,
++0x2,0x7,0xf8,0x41,0x2a,0x2a,0x40,0x7e,0x88,0x9,0xff,0x8,0x49,0x49,0x7f,0x1,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x82,0x12,0xfa,0x2,0xa,0x4,
++0x22,0x14,0x7f,0x14,0x7f,0x15,0xff,0x15,0x7f,0x14,0x36,0x55,0x94,0x14,0x14,0x14,0x10,0x24,0x7e,0x44,0x54,0x44,0xd4,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x0,0x77,0x55,0x55,0x55,0x55,0x22,0x55,0x10,0xff,0x22,0x22,0x14,0x8,0x16,0x61,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0xfe,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x8,0x5,0x7f,0x52,0x52,0x52,0x7f,0x52,0x52,0x5e,0x40,0x52,0x52,0x6d,0x80,0x0,0x10,0x24,0xfe,0x44,0x54,0x44,0xd4,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x0,0xee,0x22,0xaa,0x66,0xaa,0x32,0x10,0x28,0x46,0x9a,0x60,0x19,0x64,0x8,0x70,0x20,0x48,0xfc,0x88,0xa8,0x88,0xa8,0x90,0x84,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x8,0x9,0xff,0x55,0x22,0x41,0xbe,0x22,0x3e,0x22,0x3e,0x8,0x2a,0x49,0x88,0x18,0x10,0x24,0xfe,0x44,0x54,0x44,0xd4,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0x8a,0x4,
++0x14,0x14,0x3f,0x24,0x64,0xbf,0x24,0x24,0x3f,0x24,0x24,0x3f,0x20,0x55,0x54,0x80,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0x8a,0x84,
++0x8,0xff,0x22,0x3e,0x2a,0x49,0x9a,0x1f,0x12,0x11,0x10,0x1f,0x0,0x7f,0x0,0x0,0x28,0xa4,0xfe,0x20,0x52,0x92,0xe,0xe0,0x20,0x20,0x44,0xfe,0x4,0xe4,0x14,0x8,
++0x2,0x7f,0x14,0x8,0xff,0x1a,0x28,0x49,0x7f,0x55,0x63,0x5d,0x55,0x5d,0x41,0x43,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0xc0,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x10,0x23,0x7c,0x45,0x57,0x45,0x55,0x49,0x41,0x7f,0x2,0x12,0xfa,0x2,0xa,0x5,0x88,0xfe,0xa8,0xfc,0x20,0xfc,0x20,0xfc,0x20,0xfe,0x0,0xf8,0x48,0x30,0x48,0x86,
++0x0,0x7c,0x45,0x7c,0x10,0x5d,0x50,0xfe,0x4,0x1f,0x12,0x11,0x1f,0x0,0x7f,0x0,0x80,0xf8,0x50,0x20,0x50,0xfe,0x88,0xf8,0x0,0xe0,0x20,0x44,0xfe,0x4,0xe4,0x18,
++0x22,0xff,0x22,0x77,0x55,0x77,0x24,0x3f,0x64,0xbf,0x24,0x3f,0x24,0x24,0x3f,0x20,0x10,0xa4,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0x8a,0x4,
++0x0,0x0,0x1f,0x10,0x90,0x50,0x50,0x10,0x30,0x50,0xd0,0x10,0x20,0x20,0x40,0x0,0x80,0x44,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x1f,0x10,0x90,0x5f,0x50,0x10,0x30,0x50,0xd0,0x10,0x20,0x20,0x41,0x0,0x80,0x44,0xfe,0x0,0x4,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x0,0x0,0x1f,0x10,0x90,0x57,0x50,0x10,0x30,0x50,0xd0,0x10,0x20,0x20,0x40,0x0,0x80,0x44,0xfe,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0xa4,0x94,0x88,0x80,0x80,0x80,
++0x0,0x0,0x1f,0x10,0x90,0x5f,0x51,0x11,0x31,0x51,0xd1,0x12,0x22,0x24,0x48,0x10,0x80,0x44,0xfe,0x0,0x4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x50,0x20,
++0x0,0x0,0x1f,0x10,0x90,0x50,0x54,0x14,0x34,0x54,0xd4,0x14,0x24,0x27,0x40,0x0,0x80,0x44,0xfe,0x0,0x40,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xfc,0x4,0x4,
++0x0,0x0,0x1f,0x10,0x97,0x54,0x54,0x14,0x35,0x54,0xd4,0x14,0x28,0x28,0x51,0x2,0x80,0x44,0xfe,0x0,0xfc,0x0,0x40,0x44,0xfe,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x0,0x0,0x1f,0x10,0x90,0x50,0x5f,0x10,0x30,0x51,0xd1,0x11,0x22,0x22,0x44,0x8,0x80,0x44,0xfe,0x80,0xa0,0x94,0xfe,0xa0,0xa0,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x0,0x1f,0x12,0x92,0x52,0x5f,0x12,0x32,0x52,0xd3,0x12,0x22,0x22,0x43,0x2,0x80,0x44,0xfe,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0xf0,0x10,
++0x0,0x0,0x1f,0x10,0x90,0x5f,0x50,0x10,0x33,0x52,0xd2,0x12,0x23,0x20,0x40,0x0,0x80,0x44,0xfe,0x0,0x4,0xfe,0x8,0x8,0xc8,0x48,0x48,0x48,0xc8,0x8,0x28,0x10,
++0x0,0x0,0x1f,0x10,0x90,0x53,0x52,0x12,0x33,0x52,0xd2,0x13,0x22,0x20,0x4f,0x0,0x80,0x44,0xfe,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x0,0xfe,0x0,
++0x0,0x0,0x1f,0x11,0x91,0x51,0x52,0x12,0x34,0x58,0xd0,0x10,0x20,0x20,0x40,0x0,0x80,0x44,0xfe,0x0,0x8,0xfc,0x80,0x90,0xf8,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,
++0x0,0x0,0x1f,0x12,0x92,0x53,0x54,0x1b,0x32,0x52,0xd3,0x12,0x22,0x22,0x41,0x0,0x80,0x44,0xfe,0x0,0x8,0xfc,0x8,0xc8,0x48,0x48,0xc8,0x28,0x12,0x2,0xfe,0x0,
++0x0,0x0,0x1f,0x10,0x90,0x50,0x57,0x10,0x30,0x50,0xd3,0x10,0x20,0x20,0x4f,0x0,0x80,0x44,0xfe,0x0,0x80,0x48,0xfc,0x40,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x0,0x1f,0x10,0x90,0x5f,0x50,0x11,0x32,0x57,0xd0,0x10,0x21,0x22,0x47,0x0,0x80,0x44,0xfe,0x80,0x44,0xfe,0x80,0x0,0x10,0xe0,0x40,0x80,0x10,0x8,0xfc,0x4,
++0x0,0x0,0x1f,0x12,0x92,0x52,0x5f,0x12,0x32,0x52,0xd2,0x12,0x24,0x24,0x4a,0x11,0x80,0x44,0xfe,0x0,0x0,0x4,0xbe,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xbc,0x24,
++0x0,0x0,0x1f,0x10,0x9f,0x51,0x51,0x19,0x35,0x55,0xd5,0x15,0x21,0x21,0x5f,0x0,0x80,0x44,0xfe,0x0,0xfc,0x20,0x20,0x24,0x24,0x28,0x28,0x30,0x20,0x24,0xfe,0x0,
++0x1,0x0,0x3f,0x20,0xbf,0x60,0x2f,0x20,0x6f,0xa8,0x2f,0x20,0x41,0x41,0x86,0x18,0x0,0x84,0xfe,0x80,0xfe,0x80,0xf8,0x88,0xf8,0x80,0xfc,0x84,0x54,0x48,0x20,0x1c,
++0x0,0x0,0x1f,0x10,0x90,0x5f,0x50,0x10,0x37,0x50,0xd0,0x15,0x25,0x29,0x40,0x0,0x80,0x44,0xfe,0x40,0x44,0xfe,0x40,0x48,0xfc,0x0,0x80,0x64,0x2a,0xa,0xf8,0x0,
++0x0,0x0,0x1f,0x11,0x97,0x51,0x51,0x17,0x34,0x58,0xd3,0x10,0x20,0x21,0x42,0xc,0x80,0x44,0xfe,0x10,0xfc,0x10,0x10,0xfe,0x82,0x84,0xf8,0x88,0x88,0x8,0x28,0x10,
++0x0,0x0,0x1f,0x10,0x97,0x50,0x53,0x11,0x31,0x5f,0xd0,0x13,0x22,0x22,0x43,0x2,0x80,0x44,0xfe,0x0,0xfc,0x80,0xf0,0x10,0x14,0xfe,0x0,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x0,0x1f,0x10,0x92,0x52,0x52,0x15,0x38,0x50,0xd7,0x10,0x20,0x20,0x4f,0x0,0x80,0x44,0xfe,0x40,0x48,0x48,0x48,0x54,0xe2,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x0,0x1f,0x12,0x91,0x55,0x54,0x17,0x34,0x54,0xd4,0x15,0x26,0x24,0x44,0x4,0x80,0x44,0xfe,0x0,0xfc,0x44,0x44,0xf4,0x44,0xc4,0xe4,0x54,0x4c,0x44,0x54,0x8,
++0x0,0x0,0x1f,0x10,0x94,0x52,0x52,0x18,0x35,0x50,0xd2,0x14,0x2c,0x24,0x44,0x3,0x80,0x44,0xfe,0x20,0x20,0xa8,0xa4,0xa2,0x2a,0x28,0x30,0x10,0x20,0x40,0x80,0x0,
++0x0,0x0,0x1f,0x10,0x9f,0x50,0x53,0x1c,0x35,0x52,0xdd,0x11,0x22,0x2c,0x41,0x0,0x80,0x44,0xfe,0x0,0xfc,0x80,0x8,0x98,0x60,0x40,0xe0,0x50,0x4e,0x44,0x40,0x80,
++0x0,0x0,0x1f,0x11,0x91,0x5f,0x51,0x11,0x3f,0x51,0xd1,0x1f,0x21,0x21,0x41,0x1,0x80,0x44,0xfe,0x20,0x24,0x3e,0x20,0x28,0x3c,0x20,0x24,0x3e,0x20,0x20,0x20,0x20,
++0x0,0x0,0x1f,0x10,0x97,0x54,0x54,0x17,0x34,0x55,0xd5,0x15,0x25,0x24,0x47,0x4,0x80,0x44,0xfe,0x0,0xfc,0x44,0x44,0xfc,0x44,0xf4,0x14,0x14,0xf4,0x4,0xfc,0x4,
++0x0,0x0,0x1f,0x10,0x93,0x50,0x5f,0x11,0x36,0x50,0xdf,0x11,0x23,0x20,0x41,0x6,0x80,0x44,0xfe,0x0,0xf8,0x40,0xfe,0x50,0x4c,0x80,0xfe,0x10,0x20,0xc0,0x30,0x8,
++0x1,0x0,0x3f,0x22,0xac,0x68,0x28,0x2e,0x68,0xa8,0x2f,0x28,0x41,0x42,0x8c,0x30,0x0,0x84,0xfe,0x80,0xb8,0x88,0x88,0xb8,0x88,0x88,0xf8,0x88,0x40,0x20,0x1e,0x4,
++0x0,0x0,0x1f,0x14,0x92,0x50,0x5f,0x12,0x33,0x52,0xd2,0x14,0x24,0x2a,0x51,0x0,0x80,0x44,0xfe,0x0,0x10,0x10,0xe8,0x28,0xa4,0xc6,0xb0,0x88,0xa0,0x98,0x8,0x0,
++0x1,0x0,0x3f,0x24,0xa2,0x6f,0x28,0x2f,0x68,0xaf,0x20,0x3f,0x40,0x40,0x80,0x0,0x0,0x84,0xfe,0x10,0x20,0xf8,0x88,0xf8,0x88,0xf8,0x80,0xfe,0x80,0x80,0x80,0x80,
++0x0,0x0,0x1f,0x11,0x9f,0x51,0x57,0x15,0x35,0x57,0xd1,0x13,0x25,0x29,0x41,0x1,0x80,0x44,0xfe,0x0,0xe4,0x4,0xd4,0x54,0x54,0xd4,0x14,0x94,0x54,0x44,0x14,0x8,
++0x1,0x0,0x3f,0x20,0xaf,0x64,0x22,0x3f,0x62,0xa4,0x28,0x37,0x40,0x40,0x9f,0x0,0x0,0x84,0xfe,0x80,0xf8,0x90,0xa4,0xfe,0x20,0x90,0x8e,0xf4,0x80,0x88,0xfc,0x0,
++0x0,0x0,0x1f,0x12,0x92,0x54,0x55,0x1c,0x34,0x55,0xd4,0x17,0x24,0x24,0x44,0x7,0x80,0x44,0xfe,0x0,0xf8,0x8,0xfe,0x40,0xfc,0x20,0x24,0xfe,0x20,0x50,0x8e,0x4,
++0x0,0x0,0x1f,0x11,0x9f,0x50,0x57,0x10,0x3f,0x51,0xd2,0x17,0x28,0x30,0x47,0x0,0x80,0x44,0xfe,0x20,0xfc,0x80,0xf8,0x80,0xfe,0x0,0x8,0xfc,0x40,0x44,0xfe,0x0,
++0x0,0x0,0x1f,0x10,0x92,0x51,0x57,0x11,0x36,0x50,0xdf,0x11,0x23,0x20,0x41,0x6,0x80,0x44,0xfe,0x40,0x48,0x50,0xfc,0x50,0x4c,0x80,0xfe,0x10,0x20,0xc0,0x30,0x8,
++0x0,0x0,0x1f,0x10,0x97,0x54,0x54,0x17,0x34,0x57,0xd4,0x14,0x27,0x24,0x44,0x5,0x80,0x44,0xfe,0x0,0xbc,0x84,0x84,0xbc,0x0,0xfc,0x24,0x28,0x90,0x28,0x46,0x84,
++0x1,0x0,0x3f,0x20,0xaf,0x64,0x22,0x21,0x62,0xbc,0x27,0x24,0x47,0x40,0x9f,0x0,0x0,0x84,0xfe,0x0,0xf8,0x90,0x20,0xc0,0x20,0x9e,0xf4,0x90,0xf0,0x88,0xfc,0x4,
++0x0,0x0,0x1f,0x12,0x9f,0x52,0x5f,0x12,0x3f,0x52,0xd1,0x12,0x2a,0x2a,0x51,0x0,0x80,0x44,0xfe,0x0,0xfc,0x24,0xa4,0x24,0xd4,0x88,0x0,0xc0,0x54,0x12,0xf2,0x0,
++0x1,0x0,0x3f,0x22,0xbf,0x62,0x2f,0x28,0x6f,0xa8,0x2f,0x20,0x5f,0x41,0x86,0x18,0x0,0x84,0xfe,0x20,0xfc,0x20,0xf8,0x8,0xf8,0x8,0xf8,0x80,0xfe,0x40,0x20,0x1c,
++0x1,0x0,0x3f,0x24,0xaf,0x69,0x2d,0x2b,0x7f,0xa9,0x2d,0x2b,0x49,0x49,0x93,0x20,0x0,0x84,0xfe,0x0,0x78,0x48,0x48,0x46,0x80,0x78,0x48,0x28,0x10,0x28,0x46,0x84,
++0x1,0x0,0x3f,0x28,0xa4,0x69,0x22,0x24,0x6f,0xb4,0x27,0x24,0x47,0x44,0x84,0x4,0x0,0x84,0xfe,0x88,0x90,0x48,0x20,0x10,0xfe,0x14,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x1,0x0,0x3f,0x22,0xaf,0x62,0x3f,0x20,0x6f,0xa8,0x2f,0x28,0x4f,0x42,0x84,0x8,0x0,0x84,0xfe,0x20,0xf8,0x20,0xfe,0x88,0xf8,0x88,0xf8,0x88,0xf8,0x20,0x18,0x8,
++0x0,0x3f,0x20,0x3f,0xa1,0x6f,0x29,0x2f,0x60,0xaf,0x20,0x3f,0x44,0x48,0x92,0x1,0x80,0xfe,0x0,0xfc,0x40,0xf8,0x48,0xf8,0x0,0xf8,0x0,0xfe,0x90,0x8c,0x84,0x0,
++0x0,0x3f,0x20,0x2f,0xa8,0x6f,0x28,0x2f,0x61,0xaf,0x21,0x2f,0x44,0x48,0x92,0x1,0x80,0xfe,0x8,0xfc,0x88,0xf8,0x88,0xf8,0x10,0xe0,0x8,0xfc,0x90,0x8c,0x84,0x0,
++0x0,0x3f,0x20,0x2f,0xa9,0x6b,0x2b,0x26,0x69,0xa1,0x3f,0x22,0x46,0x41,0x82,0xc,0x80,0xfe,0x0,0x78,0x48,0x58,0x58,0x30,0x48,0x0,0xfe,0x20,0x40,0xc0,0x30,0x10,
++0x0,0x3f,0x24,0x27,0xa9,0x75,0x2a,0x24,0x6b,0xb0,0x2f,0x20,0x44,0x44,0x8a,0x1,0x80,0xfe,0x40,0x78,0x48,0x50,0x20,0x18,0xe6,0x0,0xf8,0x80,0x90,0x8c,0x84,0x0,
++0x0,0x3f,0x20,0x2f,0xa9,0x6a,0x2c,0x2a,0x69,0xa9,0x2d,0x2a,0x48,0x48,0x89,0x8,0x80,0xfe,0x20,0x3c,0x68,0x90,0x28,0xc6,0x38,0x50,0x7c,0x90,0x7c,0x10,0xfe,0x0,
++0x0,0x3f,0x20,0x2e,0xaa,0x6a,0x2c,0x2a,0x69,0xa9,0x2d,0x2a,0x49,0x49,0x8a,0x8,0x80,0xfe,0x40,0x78,0x90,0xfc,0x4,0xfc,0x4,0xfc,0x20,0x10,0x44,0x4a,0x4a,0x38,
++0x0,0x3f,0x20,0xaf,0x69,0x25,0x25,0x69,0xa6,0x28,0x37,0x20,0x47,0x40,0x80,0xf,0x80,0xfc,0x0,0x78,0x48,0x28,0xa8,0x48,0x70,0x8e,0x24,0x40,0x90,0x20,0xc0,0x0,
++0x0,0x3f,0x21,0x20,0xbc,0x6b,0x28,0x29,0x69,0xbd,0x28,0x29,0x4a,0x4e,0xb8,0x0,0x80,0xfe,0x0,0x80,0x1e,0xe8,0x48,0x48,0x48,0x5c,0x88,0x48,0x28,0x8,0x3e,0x0,
++0x0,0x3f,0x22,0x22,0xaf,0x62,0x2f,0x2a,0x6a,0xaf,0x22,0x27,0x4a,0x52,0x82,0x2,0x80,0xfe,0x20,0x3c,0xa4,0x48,0xbe,0xa2,0xaa,0xaa,0x2a,0x2a,0xaa,0x10,0x14,0x22,
++0x0,0x3f,0x20,0x2f,0xa2,0x7f,0x20,0x2f,0x68,0xaf,0x28,0x2f,0x40,0x4a,0x92,0x21,0x80,0xfe,0x80,0xf8,0x20,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x80,0x44,0x14,0xf0,
++0x0,0x3f,0x20,0x2f,0xa8,0x6f,0x28,0x2a,0x6f,0xaa,0x2a,0x2f,0x50,0x52,0xa4,0x0,0x80,0xfe,0x0,0xdc,0x54,0xd4,0x14,0xa6,0xc0,0xbc,0x94,0xd4,0x8,0x94,0x62,0x0,
++0x1,0x0,0x3f,0x20,0xaf,0x69,0x29,0x2f,0x68,0xaf,0x39,0x29,0x49,0x4f,0x89,0x0,0x0,0x84,0xfe,0x20,0x14,0xfe,0x4,0x8,0xfe,0x10,0x10,0x7c,0x10,0x10,0x10,0x10,
++0x0,0x3f,0x22,0xbf,0x62,0x2f,0x28,0x6f,0xa8,0x2f,0x28,0x2f,0x48,0x5f,0x85,0x8,0x80,0xfe,0x0,0xfe,0x10,0xbe,0xa2,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xd0,0x14,0xa2,
++0x0,0x3f,0x20,0x2f,0xad,0x6b,0x2f,0x22,0x67,0xac,0x37,0x24,0x47,0x44,0x87,0x4,0x80,0xfe,0x0,0x78,0x68,0x58,0x78,0x40,0xfc,0x40,0xf8,0x40,0xf8,0x40,0xfc,0x0,
++0x20,0x10,0x13,0x0,0xfe,0x1,0x5,0x44,0x24,0x29,0x2a,0x8,0x16,0xf8,0x1,0x0,0x0,0x4,0xfe,0x44,0x64,0x54,0x54,0x44,0xcc,0x54,0x64,0x44,0x44,0x44,0x54,0x88,
++0x20,0x10,0x13,0x0,0xfe,0x1,0x5,0x45,0x25,0x29,0x28,0x8,0x16,0xf9,0x2,0x0,0x20,0x24,0xfe,0x20,0x24,0xfe,0x24,0x24,0x24,0xfc,0x20,0x70,0xa8,0x26,0x24,0x20,
++0x2,0x41,0x7f,0x40,0x88,0x12,0x22,0x7,0x8,0x14,0x22,0x1,0x1,0x6,0x18,0x60,0x0,0x0,0xfe,0x2,0x24,0x10,0x8,0xf0,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x2,0x41,0x7f,0x48,0x90,0x2f,0x0,0x0,0x1f,0x10,0x10,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x22,0x14,0xf8,0x10,0x10,0xf0,0x0,0x8,0xfc,0x8,0x8,0x50,0x20,
++0x2,0x41,0x7f,0x48,0x91,0x1,0xff,0x1,0x11,0x11,0x11,0x1f,0x1,0x1,0x1,0x0,0x0,0x0,0xfe,0x22,0x14,0x0,0xfe,0x0,0x10,0x10,0x10,0xf0,0x10,0x2,0x2,0xfe,
++0x2,0x41,0x7f,0x48,0x90,0x0,0x1f,0x2,0x1,0x3f,0x0,0x1,0xe,0x30,0x48,0x7,0x0,0x0,0xfe,0x22,0x14,0x70,0x80,0x0,0x20,0xf0,0x40,0x80,0x0,0x0,0x6,0xfc,
++0x2,0x41,0x7f,0x48,0x90,0x4,0x8,0x11,0x7e,0x4,0x8,0x14,0x22,0x7e,0x1,0x2,0x0,0x0,0xfe,0x22,0x14,0x40,0x48,0xfc,0x48,0x48,0x48,0x48,0x88,0x88,0x28,0x10,
++0x2,0x41,0x7f,0x48,0x92,0x2,0x22,0x12,0x16,0xa,0x12,0x62,0x4,0x4,0x18,0x60,0x0,0x0,0xfe,0x22,0x94,0x80,0x90,0x98,0xa0,0xc0,0xa0,0x98,0x8a,0x82,0x7e,0x0,
++0x41,0x7f,0x48,0x91,0x2f,0x1,0x3f,0x8,0x4,0x12,0x8,0xff,0x1,0x2,0xc,0x30,0x0,0xfe,0x22,0x14,0xe8,0x0,0xfc,0x84,0x88,0x80,0x84,0xfe,0x40,0x30,0x18,0x8,
++0x41,0x7f,0x48,0x90,0x3f,0x11,0x1f,0x11,0x1f,0x1,0xff,0x3,0x5,0x19,0x61,0x1,0x0,0xfe,0x22,0x14,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x80,0x60,0x1e,0x8,0x0,
++0x41,0x7f,0x48,0x91,0x22,0x4,0xf,0x30,0xde,0x12,0x1e,0x12,0x1e,0x12,0x12,0x16,0x0,0xfe,0x22,0x14,0x88,0x40,0xf0,0xe,0x14,0x90,0x90,0x90,0x90,0x90,0x10,0x30,
++0x41,0x7f,0x48,0x92,0x1,0x3f,0x8,0x4,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x0,0xfe,0x22,0x14,0x0,0xf8,0x20,0x44,0xfe,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x41,0x7f,0x49,0x91,0x29,0x5,0x7f,0x9,0x31,0x2,0xff,0x4,0xe,0x1,0x6,0x38,0x0,0xfe,0x22,0x14,0x28,0x40,0xfc,0x20,0x18,0x4,0xfe,0x20,0x40,0x80,0x70,0x8,
++0x41,0x7f,0x48,0x90,0x26,0x38,0x2c,0x2c,0x2a,0x2a,0x29,0x29,0x34,0x5d,0x81,0x2,0x0,0xfe,0x22,0x14,0x18,0xe8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa4,0x54,0x72,0x0,
++0x20,0x10,0x10,0x0,0xfc,0x8,0x10,0x34,0x58,0x94,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x20,0x10,0x13,0x0,0xfd,0x8,0x10,0x34,0x58,0x94,0x10,0x10,0x10,0x11,0x12,0x14,0x0,0x4,0xfe,0x4,0x44,0xa8,0xa8,0x88,0x50,0x50,0x20,0x50,0x90,0x8,0x6,0x4,
++0x20,0x10,0x10,0x0,0xfd,0x9,0x11,0x35,0x59,0x95,0x11,0x11,0x11,0x11,0x11,0x11,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x54,0x4c,0x8c,0x4,0x4,0x4,0x14,0x8,
++0x20,0x10,0x13,0x0,0xfc,0x8,0x10,0x35,0x58,0x94,0x10,0x10,0x10,0x10,0x13,0x10,0x8,0x1c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x20,0x10,0x10,0x0,0xfd,0xa,0x14,0x30,0x54,0x9b,0x14,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0xa0,0xa0,0x10,0x8e,0x64,0x20,0x0,0xf8,0x8,0x10,0x10,0x20,0x40,0x80,
++0x20,0x10,0x10,0x0,0xfd,0x8,0x10,0x34,0x5b,0x94,0x10,0x10,0x10,0x11,0x12,0x14,0x40,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0xfe,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x20,0x10,0x11,0x0,0xfc,0x8,0x11,0x34,0x58,0x94,0x13,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x24,0xac,0xb0,0x20,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x20,0x10,0x11,0x0,0xfc,0x8,0x11,0x34,0x58,0x94,0x11,0x10,0x10,0x10,0x13,0x10,0x20,0x20,0x24,0xac,0xb0,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x20,0x10,0x10,0x0,0xfd,0xa,0x15,0x30,0x54,0x99,0x15,0x11,0x11,0x11,0x11,0x11,0x40,0x40,0xa0,0x90,0x8,0xe,0xf4,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x10,0x10,0x1,0xfd,0xa,0x10,0x34,0x5b,0x95,0x11,0x11,0x11,0x11,0x11,0x11,0x80,0x88,0xfc,0x88,0x50,0x20,0x50,0x88,0x6,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x11,0x11,0x1,0xfd,0x9,0x11,0x35,0x59,0x95,0x11,0x11,0x11,0x11,0x11,0x11,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x44,0x48,0x30,0x20,0x10,0x4e,0x84,0x0,
++0x40,0x24,0x22,0x2,0xf8,0x10,0x26,0x2a,0x72,0xaa,0x22,0x22,0x22,0x25,0x28,0x20,0x20,0x20,0x28,0xfc,0x40,0x50,0x90,0xfc,0x10,0x14,0xfe,0x10,0x10,0x16,0xfc,0x0,
++0x20,0x11,0x11,0x1,0xfd,0x9,0x10,0x35,0x58,0x94,0x11,0x10,0x10,0x10,0x17,0x10,0x4,0xfe,0x4,0x4,0x4,0xfc,0x0,0xfc,0x20,0x20,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x20,0x10,0x10,0x1,0xfd,0xa,0x15,0x34,0x5a,0x95,0x11,0x11,0x11,0x10,0x17,0x10,0x40,0x40,0xa0,0x10,0x10,0x28,0xf6,0x0,0x48,0x48,0x48,0x50,0x50,0x24,0xfe,0x0,
++0x22,0x11,0x10,0x2,0xfe,0xa,0x12,0x36,0x5a,0x96,0x12,0x12,0x12,0x12,0x12,0x12,0x4,0xbe,0x84,0x4,0x4,0xf4,0x94,0x94,0xf4,0x94,0x94,0xf4,0x4,0x4,0x14,0x8,
++0x20,0x10,0x10,0x3,0xfc,0x9,0x10,0x37,0x58,0x94,0x11,0x13,0x15,0x11,0x11,0x11,0x40,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x44,0xa8,0x30,0x20,0x10,0x48,0x8e,0x4,
++0x20,0x10,0x10,0x3,0xfc,0x8,0x13,0x34,0x59,0x95,0x13,0x15,0x19,0x11,0x11,0x11,0x80,0x80,0x88,0xf8,0x90,0xa4,0xfe,0x40,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x20,0x11,0x11,0x1,0xfd,0x9,0x11,0x34,0x58,0x95,0x12,0x14,0x11,0x12,0x10,0x11,0x8,0xfc,0x8,0xf8,0x8,0x8,0xf8,0x84,0xfe,0x54,0x94,0xa4,0x24,0x44,0xa8,0x10,
++0x20,0x10,0x11,0x1,0xfd,0x9,0x11,0x35,0x59,0x94,0x11,0x17,0x10,0x10,0x10,0x10,0x20,0x44,0xfe,0x24,0x24,0xfc,0x24,0x44,0xfc,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x20,0x11,0x11,0x1,0xfd,0x9,0x11,0x35,0x59,0x95,0x11,0x12,0x12,0x14,0x18,0x10,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0xfe,0x20,0x24,0xfe,0x84,0x84,0x84,0xfc,0x84,
++0x40,0x2f,0x20,0x5,0xfa,0x15,0x20,0x68,0xb7,0x28,0x24,0x25,0x22,0x25,0x28,0x30,0x0,0xfc,0x84,0x28,0x10,0x28,0xc4,0x0,0xbc,0x84,0xc4,0x28,0x10,0x28,0xce,0x84,
++0x21,0x11,0x17,0x1,0xfc,0x8,0x11,0x3a,0x55,0x98,0x13,0x12,0x12,0x12,0x13,0x12,0x10,0x14,0xfe,0x10,0x40,0xa0,0x10,0x8,0xf6,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x10,0x13,0x0,0xfc,0xb,0x10,0x35,0x59,0x95,0x11,0x11,0x11,0x11,0x11,0x11,0x90,0x94,0x98,0x90,0x92,0x8e,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x21,0x11,0x11,0x1,0xfa,0xa,0x16,0x3a,0x52,0x9a,0x12,0x12,0x12,0x12,0x12,0x12,0x4,0x7e,0x44,0x44,0x44,0x7c,0x10,0x10,0xfe,0x10,0x38,0x54,0x54,0x92,0x10,0x10,
++0x20,0x12,0x11,0x0,0xff,0x9,0x12,0x34,0x58,0x97,0x19,0x12,0x11,0x10,0x11,0x16,0x40,0x48,0x50,0x44,0xfe,0x50,0x48,0x46,0x80,0xfe,0x10,0x10,0xa0,0x40,0xb0,0xc,
++0x40,0x20,0x27,0x4,0xfc,0x17,0x24,0x6c,0xb7,0x2e,0x26,0x2b,0x2a,0x32,0x22,0x22,0x80,0x44,0xfe,0x4,0x4,0xfc,0x0,0x4,0xfe,0x94,0x94,0xfc,0x94,0x94,0x94,0x8,
++0x20,0x12,0x12,0x2,0xfe,0xa,0x12,0x34,0x58,0x97,0x12,0x12,0x12,0x12,0x17,0x10,0x90,0x90,0x94,0xbe,0xa0,0xd0,0x88,0x80,0x4,0xfe,0x94,0x94,0x94,0x94,0xfe,0x0,
++0x40,0x27,0x24,0x4,0xfd,0x15,0x25,0x6d,0xb5,0x2d,0x25,0x25,0x29,0x2a,0x34,0x21,0x3c,0xe0,0x3c,0x20,0xfe,0x22,0xf8,0x24,0x1c,0x0,0x78,0x48,0x48,0x4a,0x8a,0x6,
++0x40,0x2f,0x20,0x4,0xfa,0x12,0x24,0x68,0xb3,0x2a,0x22,0x23,0x22,0x22,0x23,0x22,0x4,0xbe,0x84,0xa4,0x94,0x94,0xa4,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x40,0x2f,0x21,0x1,0xf9,0x17,0x24,0x6c,0xb7,0x29,0x21,0x21,0x21,0x21,0x2a,0x24,0x4,0x7e,0x44,0x44,0x44,0x7c,0x10,0x7c,0x54,0x54,0x54,0x7c,0x10,0x14,0xfe,0x2,
++0x43,0x20,0x2f,0x8,0xfb,0x10,0x23,0x68,0xb7,0x28,0x27,0x24,0x24,0x24,0x24,0x24,0xf8,0x40,0xfe,0x42,0x5c,0x40,0x58,0x44,0xfe,0x80,0xfc,0xa4,0xa4,0xa4,0xb4,0x8,
++0x42,0x22,0x2f,0x2,0xf7,0x2a,0x22,0x77,0xa1,0x33,0x24,0x29,0x20,0x27,0x20,0x20,0xa8,0x48,0xbe,0xa8,0x5c,0xaa,0x8,0xfe,0x10,0xf8,0x44,0xf2,0x40,0xfc,0x40,0xc0,
++0x0,0x0,0x7f,0x1,0x1,0x9,0x9,0x9,0x9,0x11,0x11,0x19,0x25,0x23,0x41,0x80,0x0,0x8,0xfc,0x8,0x10,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x86,0x7c,
++0x7f,0x1,0x9,0x9,0x9,0x15,0x23,0xc0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0xfc,0x8,0x0,0xf0,0x0,0x6,0xfc,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x0,0x7f,0x52,0x91,0x7d,0x11,0x29,0x29,0x7d,0x9,0x9,0xfd,0xa,0xa,0xd,0xa,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xfc,0x88,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x10,0x10,0x28,0x45,0xfd,0x45,0xa3,0x3d,0x25,0x45,0xa9,0x11,0x2a,0x44,0x89,0x2,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xf8,0x88,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x0,0x7e,0x2,0x24,0x18,0x9,0xfe,0xa,0x18,0x19,0x28,0x48,0x88,0x8,0x28,0x10,0x20,0x20,0x50,0x50,0x88,0x46,0x24,0x20,0x8,0xfc,0x8,0x8,0x10,0x10,0x20,0x40,
++0x1,0x1,0x7f,0x1,0x1,0x3f,0x1,0x1,0xff,0x3,0x5,0x9,0x11,0x21,0x41,0x1,0x0,0x8,0xfc,0x0,0x0,0xf8,0x0,0x4,0xfe,0x80,0x40,0x20,0x10,0xe,0x4,0x0,
++0x10,0x10,0x15,0xfe,0x10,0x7c,0x10,0xfe,0x33,0x38,0x54,0x50,0x90,0x10,0x10,0x10,0x0,0x8,0xfc,0x8,0x10,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x10,0x14,0xfe,0x10,0x10,0x7c,0x11,0xfd,0x30,0x38,0x54,0x50,0x90,0x11,0x16,0x20,0x20,0x20,0x20,0xa8,0xa4,0xa2,0x22,0x28,0x2c,0x10,0x20,0x40,0x80,0x0,0x0,
++0x10,0x11,0x15,0xff,0x11,0x7d,0x11,0xff,0x31,0x39,0x55,0x55,0x91,0x11,0x11,0x11,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x14,0xfe,0x11,0x7e,0x11,0xfe,0x30,0x39,0x55,0x55,0x91,0x11,0x11,0x11,0x40,0x40,0xa0,0x90,0x8,0x2e,0xf4,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x13,0xfc,0x10,0x7f,0x12,0xfc,0x30,0x3b,0x54,0x54,0x91,0x11,0x12,0x14,0x88,0x88,0xfe,0x88,0x88,0xfe,0x2,0x84,0x80,0xf8,0x88,0x88,0x8,0x8,0x28,0x10,
++0x10,0x12,0x11,0xfd,0x11,0x7c,0x13,0xfe,0x32,0x3a,0x56,0x56,0x92,0x12,0x12,0x12,0x40,0x48,0x4c,0x48,0x50,0x44,0xfe,0x4,0xf4,0x94,0x94,0x94,0xf4,0x4,0x14,0x8,
++0x10,0x11,0x15,0xff,0x11,0x7d,0x11,0xfd,0x30,0x3b,0x56,0x56,0x92,0x12,0x12,0x12,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x22,0x2a,0xfa,0x2,0xa,0x4,
++0x10,0x12,0x11,0xfc,0x13,0x7d,0x12,0xfc,0x38,0x37,0x51,0x52,0x91,0x10,0x11,0x16,0x40,0x48,0x50,0x44,0xfe,0x50,0x4c,0x44,0x80,0xfe,0x10,0x10,0xa0,0x40,0xb0,0xc,
++0x11,0x11,0x17,0xf9,0x13,0x79,0x17,0xf8,0x33,0x3a,0x57,0x52,0x9f,0x12,0x12,0x12,0x10,0x10,0xfc,0x10,0xf8,0x10,0xfe,0x40,0xf8,0x48,0xf8,0x48,0xfe,0x8,0x28,0x10,
++0x10,0x13,0x12,0xff,0x12,0x7f,0x12,0xfe,0x32,0x32,0x52,0x53,0x94,0x14,0x18,0x10,0x8,0xfc,0x0,0xf8,0x0,0xfe,0xa4,0x98,0xae,0xc4,0x8,0xfe,0x88,0x88,0x28,0x10,
++0x10,0x10,0x13,0xfe,0x13,0x7e,0x12,0xff,0x32,0x3b,0x56,0x52,0x92,0x15,0x1a,0x10,0x40,0x24,0xfe,0x48,0xfe,0x58,0xec,0x4a,0x48,0xfe,0x40,0xfc,0x84,0x84,0xfc,0x84,
++0x1,0x1f,0x1,0xff,0x4,0x1b,0x68,0x7,0x0,0x7f,0x10,0x3f,0x1,0x1f,0x1,0xff,0x20,0xc0,0x4,0xfe,0x0,0xe0,0x8,0xf8,0x0,0xfc,0x10,0xf8,0x4,0xf0,0x4,0xfe,
++0x2,0xff,0x25,0x24,0x3c,0x24,0x24,0x3c,0x24,0x24,0x27,0x3c,0xe4,0x44,0x4,0x4,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x2,0xff,0x24,0x25,0x3d,0x25,0x25,0x3d,0x25,0x27,0x25,0x3f,0xe5,0x45,0x5,0x5,0x20,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfe,0x4,0x4,0x4,0x4,0x14,0x8,
++0x2,0xff,0x24,0x24,0x3c,0x25,0x26,0x3c,0x25,0x24,0x26,0x3c,0xe4,0x44,0x4,0x4,0x20,0x20,0x50,0x50,0x88,0x46,0x24,0x20,0xfc,0x4,0x8,0x90,0x60,0x20,0x10,0x0,
++0x2,0xff,0x24,0x25,0x3d,0x26,0x24,0x3f,0x24,0x24,0x27,0x3c,0xe4,0x44,0x4,0x4,0x40,0x20,0x20,0xfe,0x2,0x4,0x0,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x2,0xff,0x25,0x24,0x3c,0x27,0x24,0x3c,0x24,0x25,0x27,0x3d,0xe5,0x45,0x5,0x5,0x8,0x1c,0xe0,0x20,0x24,0xfe,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x2,0xff,0x25,0x25,0x3d,0x24,0x27,0x3c,0x25,0x25,0x27,0x3d,0xe5,0x44,0x4,0x5,0x20,0x24,0xfe,0x24,0xfc,0x20,0xfe,0x0,0xfc,0x4,0x24,0x24,0x24,0x50,0x8c,0x4,
++0x8,0x7f,0x8,0x7f,0x8,0xff,0x10,0x2e,0x42,0xbf,0xc,0xb,0x8,0xff,0x0,0x0,0x40,0x44,0x7e,0x44,0xa8,0x10,0x28,0x46,0x84,0xf8,0x20,0xa0,0x64,0xfe,0x20,0x20,
++0xff,0x4,0x3f,0x24,0x3f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x1,0x1,0x1,0xfe,0x40,0xf8,0x48,0xf8,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,0x0,0x0,
++0x0,0xb,0x7c,0x10,0x11,0x11,0x15,0xff,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x13,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x44,0x58,0x86,0x2,
++0x4,0xf,0x70,0x40,0x41,0x41,0x7f,0x49,0x49,0x49,0x49,0x49,0x49,0x88,0x8,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x44,0x58,0x86,0x2,
++0x20,0x13,0x10,0xfe,0x1,0x9,0x7d,0x49,0x49,0x49,0x49,0x49,0x4d,0x48,0x80,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x44,0x58,0x86,0x2,
++0x10,0x13,0x10,0xfe,0x11,0x11,0x7d,0x1,0x7d,0x45,0x45,0x45,0x44,0x7c,0x40,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x48,0x86,0x2,
++0x10,0x13,0x10,0x28,0x45,0x81,0x7d,0x1,0x7d,0x45,0x45,0x45,0x44,0x7c,0x40,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x48,0x86,0x2,
++0x40,0x45,0x48,0x70,0x45,0x7d,0x1,0x13,0xf5,0x39,0x39,0x55,0x54,0x90,0x30,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x48,0x86,0x2,
++0x20,0x13,0x10,0xfe,0x11,0x11,0x25,0x7d,0x9,0x11,0x25,0xc9,0x18,0x24,0xc2,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x48,0x86,0x2,
++0x10,0x13,0x28,0x26,0x53,0x81,0x7d,0x5,0x9,0x7d,0x45,0x45,0x44,0x7c,0x44,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x48,0x86,0x2,
++0x1,0x77,0x55,0x55,0x77,0x0,0x3e,0x0,0xff,0x20,0x3e,0x2,0x2,0x2,0x14,0x9,0x4,0xfe,0x10,0x24,0x7e,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x64,0x28,0x46,0x82,
++0x8,0x49,0x49,0x49,0x7f,0x0,0xff,0x8,0x7f,0x55,0x55,0x55,0x55,0x55,0x43,0x0,0x4,0xfe,0x10,0x24,0x7e,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x64,0x28,0x46,0x82,
++0x2,0xff,0x22,0x3e,0x22,0x3e,0x22,0xff,0x2,0x77,0x11,0x55,0x22,0x22,0x55,0x88,0x4,0xfe,0x10,0x24,0x7e,0x44,0x54,0xd4,0x54,0x54,0x54,0x54,0x64,0x28,0x46,0x82,
++0x24,0x24,0xff,0x24,0x2,0xff,0x24,0x24,0xff,0xa5,0xa5,0xdb,0x81,0x85,0x82,0x0,0x4,0xfe,0x10,0x24,0x7e,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x20,0x28,0x46,0x82,
++0x0,0x3e,0x14,0x8,0x14,0x77,0x55,0x22,0x55,0x8,0xff,0x18,0x2c,0x4b,0x89,0x8,0x4,0xfe,0x10,0x24,0x7e,0x44,0x54,0x54,0x54,0x54,0xd4,0x54,0x20,0x28,0x46,0x82,
++0x2,0x3f,0x22,0x3e,0x22,0x3e,0x8,0xff,0x0,0x3e,0x22,0x3e,0x8,0x2a,0x49,0x18,0x4,0xfe,0x10,0x24,0x7e,0x44,0x54,0xd4,0x54,0x54,0x54,0x54,0x20,0x28,0x46,0x82,
++0x2,0x7f,0x8,0xff,0x88,0x6b,0x8,0x6b,0x8,0xff,0x10,0x7f,0x55,0x55,0x55,0x43,0x4,0xfe,0x10,0xa4,0xfe,0x44,0x54,0x54,0x54,0xd4,0x54,0x54,0x20,0x28,0x46,0x82,
++0x9,0x2e,0x28,0xff,0x4a,0xc,0x32,0xdf,0x11,0x1f,0x12,0x1f,0x5,0xff,0x1,0x1,0xfe,0x20,0xfc,0x94,0x94,0x28,0xc4,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,0x0,
++0x1,0x1,0x1,0x1,0x3f,0x20,0x22,0x22,0x22,0x22,0x23,0x26,0x5a,0x42,0x81,0x0,0x0,0x10,0xf8,0x0,0xfc,0x4,0x8,0x20,0x60,0x80,0x0,0x0,0x4,0x4,0xfc,0x0,
++0x1,0x1,0x1,0x3f,0x22,0x3f,0x22,0x23,0x21,0x20,0x2f,0x22,0x41,0x40,0x83,0x1c,0x10,0xf8,0x0,0xfc,0x4,0xc8,0x10,0xf0,0x0,0x88,0xfc,0x20,0x40,0x80,0x60,0x1c,
++0x8,0x8,0x8,0x9,0x7f,0x49,0x49,0x49,0x49,0x7f,0x48,0x9,0xf,0xf1,0x40,0x0,0x40,0x40,0x40,0x40,0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x10,0x10,0x14,0x7e,0x54,0x54,0x54,0x54,0x7c,0x50,0x14,0x1d,0xe5,0x42,0x4,0x0,0x10,0xf8,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x0,0xff,0x4,0x4,0x7,0x8,0x31,0xc1,0x3f,0x21,0x21,0x3f,0x1,0x1,0x7f,0x0,0x4,0xfe,0x0,0x10,0xf8,0x10,0x50,0x28,0xfc,0x8,0x8,0xf8,0x0,0x8,0xfc,0x4,
++0x0,0x2,0xff,0x24,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x25,0x44,0x43,0x80,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0xfc,0x20,0x24,0x3c,0xc6,0x2,0xfe,0x0,
++0x10,0x10,0x10,0x15,0x7e,0x54,0x55,0x54,0x54,0x7c,0x50,0x14,0x1d,0xe5,0x40,0x0,0x80,0x80,0x88,0xfc,0x0,0x0,0xf8,0x8,0x10,0x20,0x40,0x80,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x10,0x14,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x40,0x0,0x40,0x20,0x20,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,
++0x10,0x10,0x10,0x14,0x7d,0x54,0x54,0x54,0x57,0x7c,0x50,0x14,0x1c,0xe4,0x41,0x6,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x50,0x50,0x88,0x88,0x6,0x4,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x0,0x20,0x20,0x20,0x20,0x24,0xec,0x30,0x20,0x20,0x20,0x20,0x20,0x62,0xa2,0x1e,0x0,
++0x10,0x10,0x10,0x14,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x54,0x4c,0x8c,0x4,0x4,0x14,0x8,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x14,0x1c,0xe5,0x42,0xc,0x8,0xfc,0x8,0x28,0x28,0x28,0x28,0x48,0x48,0x48,0xa8,0xa0,0xa0,0x22,0x22,0x1e,
++0x10,0x10,0x13,0x14,0x7e,0x54,0x57,0x54,0x54,0x7c,0x53,0x14,0x1c,0xe4,0x40,0x0,0x8,0x1c,0xe0,0x40,0x48,0x7c,0xc0,0x40,0x44,0x7e,0xc0,0x40,0x40,0x42,0x42,0x3e,
++0x10,0x10,0x10,0x14,0x7e,0x55,0x56,0x54,0x54,0x7c,0x50,0x14,0x1c,0xe4,0x41,0x2,0x20,0x20,0x50,0x50,0x88,0xe,0x4,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x8,0x8,
++0x10,0x10,0x10,0x14,0x7e,0x54,0x54,0x55,0x56,0x7c,0x50,0x14,0x1c,0xe5,0x41,0x0,0x0,0x10,0x58,0x50,0x50,0x88,0x88,0x26,0x24,0x20,0x40,0x40,0x90,0x8,0xfc,0x4,
++0x10,0x10,0x11,0x14,0x7e,0x54,0x55,0x54,0x54,0x7c,0x53,0x14,0x1c,0xe4,0x40,0x0,0x10,0x10,0x10,0xd0,0x50,0x10,0x10,0x90,0x94,0x1e,0xf0,0x10,0x10,0x10,0x10,0x10,
++0x10,0x13,0x10,0x14,0x7f,0x55,0x55,0x55,0x55,0x7c,0x50,0x14,0x1c,0xe4,0x1,0x0,0x24,0xf4,0x24,0x24,0xe4,0x4,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0x24,0x44,0x84,
++0x1,0x21,0x21,0x3f,0x1,0xff,0x1,0x1,0x1f,0x11,0x11,0x1f,0x1,0x1,0x7f,0x0,0x0,0x8,0x8,0xf8,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0xf0,0x0,0x8,0xfc,0x4,
++0x10,0x10,0x10,0x14,0x7f,0x54,0x54,0x54,0x54,0x7c,0x50,0x14,0x1c,0xe4,0x40,0x0,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0xf8,0x88,
++0x10,0x10,0x10,0x14,0x7f,0x54,0x54,0x54,0x54,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x17,0x14,0x7e,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1c,0xe4,0x40,0x0,0x0,0x4,0xfe,0x8,0x8,0xe8,0x28,0x28,0x28,0x28,0xe8,0x28,0x8,0x8,0x28,0x10,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe6,0x44,0x9,0x4,0xfe,0x0,0x4,0xfe,0x20,0x24,0x3e,0x24,0x24,0x24,0x24,0x44,0x44,0x94,0x8,
++0x10,0x10,0x10,0x14,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x10,0x10,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x17,0x1d,0xe5,0x41,0x1,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfe,0x4,0x4,0x14,0x8,
++0x10,0x10,0x10,0x14,0x7f,0x55,0x56,0x54,0x54,0x7c,0x50,0x14,0x1c,0xe4,0x40,0x0,0x80,0xc0,0x84,0xfe,0x40,0x40,0x48,0x7c,0x40,0x40,0x44,0x7e,0x40,0x40,0x40,0x40,
++0x10,0x10,0x10,0x14,0x7e,0x54,0x54,0x54,0x54,0x7c,0x50,0x14,0x1c,0xe4,0x47,0x0,0x8,0x1c,0xe0,0x80,0x80,0x80,0x88,0xfc,0x90,0x90,0x90,0x90,0x90,0x94,0xfe,0x0,
++0x10,0x10,0x10,0x14,0x7e,0x55,0x56,0x54,0x54,0x7d,0x50,0x14,0x1c,0xe4,0x40,0x0,0x20,0x20,0x50,0x50,0x88,0x46,0x24,0x20,0x0,0xfc,0x8,0x10,0xa0,0x40,0x20,0x20,
++0x10,0x11,0x11,0x14,0x7e,0x54,0x54,0x54,0x57,0x7c,0x51,0x14,0x1c,0xe4,0x43,0x0,0x0,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0x24,0x20,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x10,0x14,0x7e,0x55,0x55,0x57,0x54,0x7c,0x51,0x17,0x1c,0xe4,0x40,0x1,0x10,0x90,0x90,0x94,0xbe,0x14,0x54,0xd4,0x94,0x94,0x54,0xf4,0x24,0x44,0x94,0x8,
++0x4,0x7e,0x8,0x8,0x8,0xe,0xf1,0x1,0x1f,0x11,0x11,0x1f,0x11,0x1,0x7f,0x0,0x8,0xfc,0x88,0xc8,0xaa,0x8a,0x6,0x10,0xf8,0x10,0x10,0xf0,0x0,0x8,0xfc,0x4,
++0x10,0x10,0x10,0x15,0x7e,0x55,0x54,0x54,0x54,0x7f,0x50,0x14,0x1c,0xe4,0x41,0x2,0x20,0x20,0x28,0xfc,0x20,0x24,0xac,0xb0,0x24,0xfe,0x50,0x50,0x90,0x88,0x6,0x4,
++0x10,0x10,0x10,0x15,0x7e,0x54,0x54,0x57,0x54,0x7d,0x50,0x14,0x1c,0xe4,0x41,0x2,0x80,0x80,0x5c,0xe0,0x50,0x22,0xd2,0xe,0x0,0xfc,0x90,0x90,0x92,0x92,0xe,0x0,
++0x10,0x10,0x11,0x14,0x7e,0x54,0x54,0x55,0x54,0x7c,0x51,0x14,0x1c,0xe4,0x43,0x0,0x0,0x8,0xfc,0x20,0x20,0x48,0x84,0xfe,0x22,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x20,0x20,0x22,0x2a,0xfe,0xaa,0xaa,0xaa,0xaa,0xfa,0xa2,0x2a,0x38,0xc9,0x1,0x2,0x80,0x84,0xbe,0x88,0x88,0xbe,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xae,0x8,0x8,0x8,
++0x10,0x10,0x10,0x14,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x50,0x50,0x50,0x54,0xfe,0x54,0x54,0x54,0x54,0xfc,0x54,0x54,0x54,0x54,0xfc,0x4,
++0x20,0x20,0x27,0x29,0xfd,0xaa,0xaa,0xaf,0xa9,0xf9,0xa5,0x2b,0x39,0xca,0x4,0x8,0x0,0xc,0x70,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x7c,0x0,0x86,0x7c,0x0,
++0x10,0x10,0x11,0x14,0x7e,0x54,0x57,0x54,0x54,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x8,0x1c,0xe0,0x20,0x20,0x24,0xfe,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x15,0x7e,0x54,0x54,0x54,0x57,0x7c,0x50,0x14,0x1c,0xe4,0x41,0x2,0x40,0x20,0x24,0xfe,0x88,0x50,0x20,0xd8,0x6,0x88,0x88,0x88,0x88,0x88,0x8,0x8,
++0x10,0x10,0x10,0x15,0x7e,0x54,0x55,0x56,0x54,0x7c,0x50,0x14,0x1c,0xe4,0x1,0x6,0x40,0x20,0x4,0xfe,0x88,0x88,0x4,0x8a,0x88,0x50,0x50,0x20,0x50,0x88,0x6,0x4,
++0x11,0x10,0x10,0x10,0x7d,0x54,0x54,0x55,0x54,0x7c,0x53,0x14,0x1c,0xe4,0x40,0x0,0x4,0x8c,0x50,0x4,0xfe,0x20,0x20,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x10,0x10,0x10,0x14,0x7f,0x54,0x54,0x54,0x55,0x7c,0x53,0x14,0x1c,0xe4,0x40,0x0,0x20,0x20,0x40,0x88,0xfc,0x20,0xa8,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x3f,0x20,0x2f,0x20,0x3f,0x24,0x24,0x26,0x24,0x2f,0x28,0x28,0x4f,0x40,0xbf,0x0,0xfc,0x0,0xf8,0x0,0xfe,0x88,0x50,0xb0,0x8e,0xf8,0x88,0x88,0xf8,0x84,0xfc,0x2,
++0x8,0x8,0xfe,0x8,0xe,0xf8,0x9,0x2a,0x11,0x3f,0x21,0x21,0x3f,0x1,0x7f,0x0,0x4,0xf8,0x80,0x84,0xfe,0x90,0x10,0x10,0x10,0xf8,0x8,0x8,0xf8,0x4,0xfc,0x2,
++0x10,0x11,0x10,0x14,0x7e,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x20,0x24,0xa8,0xb0,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x14,0x8,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x54,0x57,0x54,0x7c,0x53,0x14,0x1c,0xe5,0x42,0x4,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0xfc,0x40,0x44,0xfe,0xa0,0xa0,0x10,0xe,0x4,
++0x10,0x10,0x13,0x10,0x7c,0x57,0x54,0x55,0x55,0x7e,0x52,0x14,0x1c,0xe4,0x40,0x0,0x44,0xe4,0x84,0x84,0x94,0xf4,0x94,0x94,0xd4,0xb4,0x94,0x94,0x84,0x84,0x94,0x88,
++0x10,0x10,0x10,0x14,0x7e,0x55,0x56,0x54,0x54,0x7d,0x50,0x14,0x1d,0xe6,0x40,0x0,0x20,0x20,0x50,0x88,0x88,0x6,0xf8,0x20,0x28,0xfc,0x20,0xa8,0x26,0x22,0xa0,0x40,
++0x10,0x10,0x13,0x11,0x7c,0x54,0x55,0x54,0x54,0x7c,0x53,0x14,0x1c,0xe4,0x40,0x0,0x8,0x1c,0xe0,0x24,0xa4,0xa8,0xfc,0x8,0x30,0x24,0xfe,0x20,0x20,0x20,0xa0,0x40,
++0x11,0x10,0x13,0x14,0x7e,0x55,0x54,0x54,0x57,0x7c,0x50,0x14,0x1c,0xe4,0x41,0x6,0x4,0x88,0xfe,0x20,0x28,0xfc,0x20,0x24,0xfe,0x50,0x50,0x50,0x92,0x92,0xe,0x0,
++0x10,0x10,0x13,0x10,0x7d,0x54,0x57,0x54,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x20,0x24,0xfe,0x20,0xfc,0x20,0xfe,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x4,0x14,0x8,
++0x10,0x10,0x13,0x14,0x7e,0x54,0x54,0x54,0x54,0x7c,0x50,0x17,0x1c,0xe4,0x41,0x2,0x88,0x88,0xfe,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,0x88,0xfe,0x0,0x88,0x6,0x2,
++0x10,0x10,0x10,0x14,0x7f,0x54,0x55,0x55,0x55,0x7e,0x52,0x14,0x1c,0xe4,0x40,0x0,0x80,0x86,0x98,0x90,0xf0,0x90,0x9e,0xd4,0xb4,0x94,0x94,0x94,0xa4,0xa4,0xc4,0x84,
++0x20,0x20,0x20,0x27,0xf8,0xa8,0xab,0xaa,0xaa,0xfa,0xa3,0x28,0x39,0xce,0x4,0x0,0x20,0x28,0x24,0xfe,0x20,0x20,0xa4,0xa4,0xa4,0xa8,0xa8,0x10,0xb2,0x52,0x8a,0x4,
++0x2,0x2,0x7e,0x2,0x3e,0x2,0x7e,0x2,0x1,0x3f,0x21,0x21,0x3f,0x1,0xff,0x0,0x80,0x88,0xfc,0x80,0xf8,0x80,0xfe,0x80,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfc,0x2,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x55,0x55,0x54,0x7f,0x50,0x14,0x1c,0xe5,0x42,0x0,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x20,0x70,0xa8,0x2e,0x24,0x20,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x4,0xfe,0x4,0x14,0xfc,0x24,0x24,0xfc,0x24,0x34,0x2c,0xfc,0x4,0x4,0xfc,0x4,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x55,0x54,0x54,0x7d,0x52,0x14,0x1d,0xe6,0x40,0x1,0x8,0xfc,0x8,0xf8,0x8,0x8,0xf8,0x84,0xfe,0x54,0x94,0xa4,0x24,0x44,0xa8,0x10,
++0x10,0x10,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7c,0x50,0x17,0x1c,0xe4,0x40,0x0,0x20,0x44,0xfe,0x24,0x24,0xfc,0x24,0x44,0xfc,0x50,0x94,0xfe,0x10,0x10,0x10,0x10,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x42,0x4,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,0x74,0x54,0x54,0x74,0x4,0x14,0x8,
++0x10,0x11,0x10,0x10,0x7d,0x54,0x57,0x54,0x54,0x7d,0x52,0x14,0x1c,0xe4,0x40,0x0,0x20,0x24,0xa8,0x20,0xfc,0x20,0xfe,0x50,0x88,0xfe,0x88,0x88,0xa8,0x92,0x82,0x7e,
++0x10,0x12,0x13,0x12,0x7d,0x55,0x55,0x55,0x56,0x7d,0x50,0x14,0x1c,0xe5,0x42,0x4,0x40,0x20,0xfe,0x2,0x4,0x0,0xdc,0x54,0x54,0x54,0xdc,0x90,0x92,0x12,0xe,0x0,
++0x21,0x20,0x20,0x2b,0xfe,0xaa,0xab,0xaa,0xaa,0xfb,0xa2,0x2a,0x3a,0xcb,0x2,0x0,0x0,0x80,0x9e,0xd2,0x54,0x54,0xd8,0x54,0x54,0xd2,0x12,0x9a,0xd4,0x50,0x10,0x10,
++0x10,0x11,0x10,0x14,0x7e,0x55,0x54,0x54,0x54,0x7d,0x51,0x15,0x1d,0xe5,0x43,0x0,0x0,0xfc,0x8,0x30,0x24,0xfe,0x20,0xa0,0x44,0xfe,0x54,0x54,0x54,0x54,0xfe,0x0,
++0x20,0x20,0x27,0x20,0xfb,0xa8,0xaf,0xa9,0xab,0xfe,0xaa,0x23,0x3a,0xca,0x3,0x2,0x40,0x48,0xfc,0x40,0xf8,0x80,0xfe,0x10,0xf8,0xc,0xa,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x13,0x10,0x7c,0x57,0x56,0x54,0x55,0x7c,0x50,0x14,0x1c,0xe5,0x42,0x0,0x88,0x88,0xfe,0x88,0x88,0xfe,0x2,0x24,0xfc,0x20,0x70,0x68,0xa8,0x26,0x24,0x20,
++0x10,0x10,0x10,0x13,0x7c,0x54,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x20,0x20,0x24,0xfe,0x20,0x24,0xfe,0x4,0x54,0xfc,0x24,0xfc,0x24,0x24,0x24,0xc,
++0x10,0x13,0x10,0x14,0x7e,0x54,0x54,0x54,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x4,0xfe,0x8,0xfc,0x88,0x88,0xf8,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,
++0x10,0x10,0x10,0x13,0x7c,0x54,0x55,0x56,0x54,0x7d,0x50,0x14,0x1c,0xe4,0x43,0x0,0x20,0x20,0x24,0xfe,0x50,0x88,0x26,0xf8,0x20,0xfc,0x20,0xf8,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x13,0x10,0x7c,0x57,0x54,0x55,0x55,0x7e,0x52,0x14,0x1c,0xe4,0x40,0x0,0x4,0x64,0x84,0xa4,0x94,0xc4,0xa4,0x94,0xc4,0xbe,0x84,0x84,0x84,0x84,0x84,0x84,
++0x10,0x10,0x10,0x15,0x7e,0x54,0x54,0x54,0x54,0x7c,0x50,0x14,0x1d,0xe6,0x40,0x3,0x80,0x84,0xfe,0x0,0xfc,0x84,0xfc,0x84,0xfc,0x80,0xfc,0x84,0x58,0x20,0xd8,0x6,
++0x10,0x10,0x11,0x15,0x7f,0x55,0x55,0x55,0x54,0x7d,0x50,0x14,0x1c,0xe4,0x40,0x3,0x20,0xac,0x24,0x24,0xac,0x24,0x24,0xfc,0x20,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x20,0x20,0x20,0x28,0xfd,0xaa,0xac,0xab,0xaa,0xfb,0xa2,0x2b,0x3a,0xca,0x2,0x2,0x20,0x20,0x50,0x90,0x8,0xf4,0x2,0xc4,0x54,0xd4,0x54,0xd4,0x54,0x54,0x44,0xcc,
++0x22,0x21,0x21,0x27,0xfa,0xaa,0xab,0xaa,0xfa,0xa2,0x22,0x2a,0x3a,0xcc,0x5,0x8,0x20,0x20,0x24,0xbe,0x40,0x0,0xbc,0x88,0x90,0xfe,0x90,0x90,0x90,0x90,0xd0,0x20,
++0x20,0x22,0x21,0x28,0xff,0xa8,0xa9,0xaa,0xa8,0xff,0xa1,0x2a,0x39,0xe8,0x1,0x6,0x40,0x48,0x50,0x40,0xfc,0xe0,0x58,0x48,0x80,0xfe,0x10,0x10,0xa0,0x40,0xb0,0x8,
++0x10,0x10,0x10,0x13,0x7c,0x54,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x0,0x88,0x50,0xfe,0x50,0x54,0xfe,0x54,0x54,0x54,0x9c,0x4,0x74,0x4,0xfc,0x4,
++0x10,0x10,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x53,0x15,0x1d,0xe5,0x41,0x1,0x40,0x24,0xfe,0x4,0x4,0xfc,0x4,0x0,0xfe,0x4a,0x4a,0xfe,0x4a,0x4a,0x4a,0x6,
++0x0,0x7e,0x14,0x8,0xff,0x1a,0x28,0x49,0x19,0x3f,0x21,0x21,0x3f,0x1,0xff,0x0,0x40,0x44,0x7e,0xc8,0x28,0x10,0x28,0x46,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfc,0x2,
++0x20,0x20,0x27,0x28,0xff,0xa8,0xaf,0xa8,0xa9,0xfb,0xa4,0x2b,0x38,0xc9,0x2,0x0,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0xa0,0x10,0xe8,0x46,0xf8,0x40,0x50,0x48,0x40,
++0x8,0x7f,0x8,0x3e,0x8,0xff,0x10,0x1c,0x25,0x4d,0x3f,0x21,0x21,0x3f,0x1,0xff,0x20,0x20,0x24,0x7e,0xc8,0x28,0x10,0x28,0x46,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,
++0x20,0x20,0x27,0x28,0xfc,0xab,0xa8,0xaa,0xab,0xfa,0xa2,0x2b,0x3a,0xca,0x2,0x2,0x90,0x94,0xfe,0x90,0x90,0xfc,0x90,0x94,0xfe,0x94,0x94,0x6c,0x44,0x4,0x14,0x8,
++0x21,0x21,0x27,0x21,0xf8,0xaf,0xa8,0xa9,0xaa,0xfd,0xa1,0x2f,0x39,0xc9,0x2,0x4,0x10,0x14,0xfe,0x18,0x44,0xfe,0xa0,0x10,0xe,0x14,0x10,0xfe,0x10,0x10,0x10,0x10,
++0x10,0x10,0x13,0x14,0x7e,0x55,0x55,0x55,0x55,0x7d,0x50,0x17,0x1c,0xe4,0x40,0x3,0x88,0x88,0xfe,0x88,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x20,0xfe,0x20,0x50,0x8e,0x4,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe6,0x42,0x4,0x4,0xfe,0x10,0x24,0x7e,0x44,0x44,0x7c,0x44,0x44,0x7c,0x10,0x58,0x56,0x92,0x30,
++0x10,0x10,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x14,0x1c,0xe6,0x42,0x4,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0xf8,0x48,0x20,0xa4,0x82,0x8a,0x78,
++0x10,0x10,0x13,0x10,0x7d,0x55,0x55,0x55,0x54,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x40,0x24,0xfe,0x0,0x54,0x24,0x54,0xfc,0x24,0xfe,0x24,0x54,0x74,0x4,0x14,0x8,
++0x10,0x10,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe6,0x42,0x4,0x20,0x14,0xfe,0x10,0x7c,0x14,0xfe,0x14,0x7c,0x10,0x7c,0x44,0x44,0x44,0x7c,0x44,
++0x10,0x10,0x13,0x10,0x7c,0x57,0x56,0x54,0x57,0x7c,0x50,0x14,0x1c,0xe5,0x42,0x4,0x40,0x20,0xfe,0x88,0x50,0xfe,0x42,0x20,0xfe,0x80,0xf8,0x88,0x88,0x8,0x28,0x10,
++0x8,0x7f,0x8,0xff,0x14,0x56,0x55,0x94,0x25,0x3f,0x21,0x21,0x3f,0x1,0xff,0x0,0x40,0x40,0x44,0x7e,0xc8,0x28,0x10,0x28,0x46,0xf8,0x8,0x8,0xf8,0x4,0xfc,0x2,
++0x10,0x10,0x13,0x10,0x7c,0x57,0x54,0x55,0x55,0x7d,0x51,0x15,0x1c,0xe4,0x41,0x2,0x88,0x88,0xfe,0x88,0x88,0xfe,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x0,0x88,0x6,0x2,
++0x20,0x20,0x27,0x20,0xfb,0xaa,0xab,0xaa,0xab,0xf8,0xa1,0x29,0x39,0xc9,0x1,0x1,0x90,0x94,0xfe,0x90,0xfc,0x94,0xfc,0x94,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,
++0x10,0x13,0x10,0x10,0x7d,0x55,0x55,0x55,0x54,0x7c,0x50,0x17,0x1c,0xe5,0x42,0x0,0x4,0xfe,0x50,0x54,0xfe,0x54,0x54,0xfc,0x0,0xf8,0x0,0xfe,0xa8,0x26,0x22,0x60,
++0x10,0x11,0x10,0x10,0x7d,0x55,0x56,0x54,0x54,0x7c,0x50,0x15,0x1c,0xe4,0x43,0x0,0x20,0x24,0xa8,0x20,0xfe,0x2,0xf8,0x88,0x88,0xf8,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x10,0x11,0x10,0x11,0x7c,0x57,0x54,0x54,0x55,0x7e,0x50,0x14,0x1d,0xe2,0x44,0x0,0xc,0xf0,0x24,0x24,0xa8,0xfe,0x68,0xa8,0x26,0x24,0x0,0xa0,0xa4,0x8a,0x8a,0x78,
++0x10,0x10,0x11,0x13,0x7d,0x55,0x55,0x54,0x54,0x7d,0x52,0x14,0x1f,0xe4,0x43,0x0,0x80,0xf8,0x10,0xfc,0x24,0x24,0xfc,0x40,0xc4,0x28,0x70,0xb0,0x68,0xae,0x24,0x60,
++0x8,0xf,0x18,0x26,0x1,0xe,0xf2,0x1,0xa,0x9,0x3e,0x2a,0x3e,0x9,0x7f,0x1,0x0,0xf0,0x20,0xc0,0x0,0xe0,0x1e,0x0,0x20,0x20,0xf8,0xa8,0xf8,0x24,0xfc,0x4,
++0x10,0x11,0x10,0x14,0x7f,0x54,0x55,0x55,0x55,0x7d,0x51,0x14,0x1f,0xe4,0x40,0x0,0x20,0xfc,0x88,0x50,0xfe,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x20,0xfe,0x20,0x20,0x20,
++0x10,0x10,0x13,0x10,0x7c,0x56,0x55,0x56,0x54,0x7c,0x53,0x14,0x1c,0xe4,0x40,0x0,0x40,0x24,0xfe,0x20,0x48,0xf2,0x24,0x52,0xf8,0x20,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x0,0x1f,0x2,0x1,0x7f,0x2,0xc,0x30,0xca,0x9,0x3e,0x2a,0x3e,0x9,0x7f,0x1,0x0,0xf0,0x20,0x40,0xfe,0x82,0x84,0x80,0xa0,0x28,0xfc,0xa8,0xf8,0x24,0xfc,0x4,
++0x20,0x20,0x27,0x20,0xfb,0xa8,0xab,0xaa,0xaa,0xfb,0xa0,0x2a,0x39,0xcf,0x0,0x0,0x82,0xa2,0xf4,0x84,0xe8,0x12,0xe2,0x24,0x28,0xf0,0x2,0x22,0x44,0xe8,0x10,0x60,
++0x10,0x10,0x13,0x10,0x7d,0x55,0x55,0x55,0x55,0x7c,0x53,0x14,0x1c,0xe6,0x42,0x0,0x20,0x24,0xfe,0x24,0xfe,0x24,0xfc,0x24,0xfc,0x22,0xfe,0x42,0xa0,0xa4,0x8a,0x78,
++0x10,0x11,0x10,0x11,0x7c,0x57,0x54,0x54,0x55,0x7f,0x51,0x15,0x1d,0xe5,0x41,0x1,0xc,0xf0,0x20,0x24,0xa8,0xfe,0x70,0xa8,0x26,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,
++0x10,0x10,0x13,0x10,0x7d,0x54,0x57,0x55,0x54,0x7f,0x50,0x15,0x1d,0xe5,0x41,0x1,0x88,0x50,0xfe,0x20,0xfc,0x20,0xfe,0x24,0xa8,0xfe,0x4,0xfe,0x4,0x4,0xfc,0x4,
++0x10,0x13,0x10,0x10,0x7d,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1c,0xe4,0x41,0x6,0x88,0xfe,0x88,0xa0,0xfc,0x20,0xfc,0x20,0x3c,0x0,0xfc,0x8,0x90,0x60,0x98,0x6,
++0x20,0x20,0x27,0x20,0xfb,0xaa,0xad,0xa8,0xaf,0xf8,0xa3,0x28,0x3b,0xe8,0x43,0x0,0x90,0x94,0xfe,0x90,0xfe,0x2,0xf4,0x0,0xfe,0x40,0xa4,0x78,0xb0,0x68,0xa6,0x60,
++0x10,0x10,0x11,0x13,0x7d,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe6,0x42,0x4,0x80,0xf8,0x10,0xfe,0x44,0x92,0xfe,0x0,0x7c,0x0,0x7c,0x0,0x7c,0x44,0x7c,0x44,
++0x20,0x23,0x22,0x2a,0xff,0xaa,0xaa,0xaa,0xab,0xfa,0xa2,0x2a,0x3a,0xcd,0x6,0x8,0x20,0xfe,0x88,0x50,0xfe,0x50,0xfc,0x54,0xfe,0x54,0xfc,0x50,0xd8,0x54,0x52,0x50,
++0x10,0x10,0x13,0x10,0x7d,0x55,0x55,0x55,0x54,0x7d,0x51,0x15,0x1d,0xe5,0x42,0x4,0x88,0x88,0xfe,0x88,0xfc,0x54,0x54,0xfc,0x28,0xfe,0x20,0x24,0x98,0x52,0x2a,0x46,
++0xf,0x8,0x1f,0x0,0xff,0xc,0x73,0xd,0x72,0x1c,0x6b,0x3e,0x2a,0x3e,0x9,0x7f,0xe0,0x20,0xe0,0x44,0xfe,0x10,0x20,0xc0,0xa0,0x9e,0x24,0xf8,0xa8,0xf8,0x24,0xfc,
++0x1,0x7f,0x9,0x7f,0x40,0x9f,0x4,0xf,0x38,0xcf,0x8,0x3e,0x2a,0x3e,0x8,0x7f,0x0,0xfc,0x20,0xfe,0x2,0xf4,0x0,0xf0,0x10,0xf0,0x20,0xf8,0xa8,0xf8,0x24,0xfc,
++0x27,0x26,0x25,0x27,0xf9,0xab,0xae,0xab,0xaa,0xfa,0xa0,0x2b,0x39,0xc8,0x1,0x6,0xbc,0xb4,0xac,0xbc,0x40,0xfc,0x40,0xf8,0x40,0x7c,0x0,0xf8,0x10,0xe0,0x10,0xe,
++0x8,0x8,0x8,0x1f,0x21,0x41,0x1,0x1,0xff,0x1,0x21,0x21,0x21,0x21,0x3f,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x3e,0x22,0x2a,0x2a,0x2a,0x14,0x22,0x8,0xf,0x11,0x1,0xff,0x1,0x11,0x11,0x1f,0xf8,0x88,0xa8,0xa8,0xa8,0x50,0x88,0x20,0xf0,0x0,0x4,0xfe,0x0,0x10,0x10,0xf0,
++0x8,0x7f,0x8,0x3e,0x0,0x7f,0x49,0x7f,0x44,0x4f,0x91,0x1,0xff,0x1,0x11,0x1f,0x78,0x48,0x4e,0x80,0x78,0x48,0x30,0x48,0x86,0xf0,0x0,0x4,0xfe,0x0,0x10,0xf0,
++0x20,0x24,0x3e,0x51,0x91,0x15,0xff,0x11,0x11,0x55,0x55,0x55,0x55,0x7d,0x2,0x4,0x20,0x3c,0x20,0xfe,0x24,0xf8,0x24,0x38,0x0,0xfe,0x54,0x54,0xfe,0x10,0x10,0x30,
++0x0,0x6,0x79,0x11,0x15,0xff,0x11,0x11,0x15,0x7f,0x45,0x45,0x45,0x7d,0x45,0x1,0x8,0x1c,0xe0,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x10,0x10,0x4a,0x8a,0x4,
++0x10,0x12,0x1f,0x20,0x28,0x45,0x80,0x0,0x3f,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x40,0x44,0x7e,0x80,0x90,0x8,0x0,0x10,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,
++0x10,0x12,0x1f,0x28,0x45,0x80,0x3f,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x5,0x2,0x40,0x44,0x7e,0xa0,0x10,0x0,0xf8,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x0,0x3f,0x8,0x8,0x9,0x14,0x12,0x11,0x21,0x46,0x98,0x40,0x44,0x7e,0xa0,0x10,0x20,0xf0,0x40,0x90,0xf8,0x20,0x40,0x80,0x60,0x1e,0x4,
++0x10,0x12,0x1f,0x28,0x45,0x0,0x3f,0x8,0x8,0x8,0xf,0x0,0x7f,0x0,0x0,0x0,0x40,0x44,0x7e,0xa0,0x10,0x20,0xf0,0x20,0x20,0x24,0xfe,0x4,0xf4,0x4,0x14,0x8,
++0x10,0x12,0x1f,0x28,0x45,0x0,0x3f,0x4,0x4,0xff,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x44,0x7e,0xa0,0x10,0x0,0xf8,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,
++0x10,0x12,0x1f,0x28,0xc5,0x0,0x1f,0x10,0x11,0x11,0x11,0x12,0x12,0x4,0x18,0xe0,0x40,0x44,0x7e,0xa0,0x10,0x10,0xf8,0x10,0x10,0x10,0x90,0x90,0x90,0x82,0x82,0x7e,
++0x10,0x12,0x1f,0x28,0x45,0x0,0x1f,0x11,0x11,0x11,0x11,0x11,0x11,0x21,0x41,0x1,0x40,0x44,0x7e,0xa0,0x10,0x38,0xe0,0x20,0x20,0x20,0x10,0x10,0x8,0xe,0x4,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x1,0x3f,0x21,0x21,0x3f,0x3,0x5,0x9,0x31,0xc1,0x1,0x40,0x44,0x7e,0xa0,0x10,0x8,0xf0,0x0,0x4,0xfe,0x4,0x4,0x44,0x28,0x10,0x0,
++0x10,0x12,0x1f,0x28,0x45,0x8,0xf,0x12,0x12,0x22,0x44,0x4,0x8,0x11,0x22,0x0,0x40,0x44,0x7e,0xa0,0x10,0x8,0xfc,0x48,0x48,0x48,0x48,0x88,0x88,0x8,0x50,0x20,
++0x10,0x12,0x1f,0x28,0x45,0x0,0x7e,0x8,0x8,0x8,0x8,0xe,0x78,0x20,0x0,0x0,0x40,0x44,0x7e,0xa0,0x10,0x0,0xfc,0x88,0x90,0x90,0x88,0xc4,0xa4,0x98,0x80,0x80,
++0x10,0x12,0x1f,0x28,0xc5,0x3f,0x20,0x20,0x27,0x24,0x24,0x27,0x24,0x20,0x3f,0x0,0x40,0x44,0x7e,0xa0,0x10,0xfc,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x4,0xfe,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0xff,0x0,0x40,0x44,0x7e,0xa0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x4,0xfe,0x0,
++0x10,0x12,0x1f,0x28,0x45,0x11,0x11,0x1f,0x21,0x41,0x1f,0x1,0x1,0x1,0xff,0x0,0x40,0x44,0x7e,0xa0,0x10,0x0,0x10,0xf8,0x0,0x20,0xf0,0x0,0x0,0x4,0xfe,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x4,0xf,0xa,0x12,0x23,0x42,0x2,0x3,0x2,0x2,0x2,0x40,0x44,0x7e,0xa0,0x10,0x8,0xfc,0x0,0x10,0xf8,0x0,0x8,0xfc,0x0,0x0,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x8,0xf,0x10,0x10,0x2f,0x48,0x8,0xf,0x8,0x0,0x0,0x40,0x44,0x7e,0xa0,0x10,0x8,0xfc,0x8,0x48,0xe8,0x48,0x48,0xc8,0x8,0x28,0x10,
++0x10,0x12,0x1f,0x28,0xc5,0x2,0x1,0x7f,0x0,0x8,0x4,0x4,0x2,0x2,0x7f,0x0,0x40,0x44,0x7e,0xa0,0x10,0x0,0x8,0xfc,0x0,0x20,0x20,0x40,0x40,0x84,0xfe,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x3f,0x0,0x7f,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x40,0x44,0x7e,0xa0,0x14,0xfe,0x4,0xe4,0x4,0x84,0x84,0x84,0x84,0x84,0x94,0x8,
++0x10,0x12,0x1f,0x28,0xc5,0x3f,0x2,0x2,0x4,0x8,0x3f,0xd0,0x10,0x10,0x1f,0x10,0x40,0x44,0x7e,0xa0,0x10,0xf8,0x8,0x10,0x50,0x20,0xf0,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x12,0x1f,0x28,0xc5,0x8,0x8,0x7f,0x9,0x9,0x9,0x9,0x11,0x11,0x25,0xc2,0x40,0x44,0x7e,0xa0,0x10,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0x44,0x7c,0x44,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x20,0x10,0x7,0x70,0x10,0x11,0x11,0x12,0x2c,0x44,0x3,0x40,0x44,0x7e,0xa0,0x10,0x80,0x88,0xfc,0x88,0x88,0x8,0x8,0x28,0x10,0x6,0xfc,
++0x10,0x12,0x1f,0x28,0x45,0x84,0x8,0x10,0x3f,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x40,0x44,0x7e,0xa0,0x10,0x0,0x20,0x10,0xf8,0x8,0xf0,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x12,0x1f,0x28,0xc5,0x8,0x8,0xfe,0x8,0x8,0xe,0x78,0x8,0x8,0x28,0x10,0x40,0x44,0x7e,0xa0,0x10,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x10,0x1e,0x10,0x10,0x1e,0x1,0xff,0x1,0x1,0x1,0x1,0x40,0x44,0x7e,0xa0,0x10,0x80,0x98,0xe0,0x84,0xfc,0x0,0xfe,0x0,0x0,0x0,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x11,0x1f,0x21,0x1,0xff,0x4,0x4,0x4,0x8,0x10,0x60,0x40,0x44,0x7e,0xa0,0x10,0x0,0xf8,0x0,0x4,0xfe,0x80,0x80,0x80,0x84,0x84,0x7c,
++0x10,0x12,0x1f,0x28,0xc5,0x0,0x7d,0x10,0x21,0x7d,0x5,0x49,0x29,0x10,0x28,0xc7,0x40,0x44,0x7e,0xa0,0x10,0xc,0xf0,0x20,0x28,0x3c,0x20,0x28,0xfc,0x0,0x6,0xfc,
++0x10,0x12,0x1f,0x28,0xc5,0x2,0x4,0x8,0x3f,0xc1,0x1,0x1f,0x1,0x1,0x7f,0x0,0x40,0x44,0x7e,0xa0,0x10,0x80,0x40,0x20,0xfe,0x4,0x20,0xf0,0x0,0x8,0xfc,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x7,0x8,0x3f,0x1,0xff,0x1,0x3f,0x1,0x1,0x5,0x2,0x40,0x44,0x7e,0xa0,0x10,0xe0,0x48,0xfc,0x8,0xfe,0x8,0xf8,0x8,0x0,0x0,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x10,0x10,0x7c,0x11,0x12,0x10,0x1c,0xe1,0x40,0x0,0x0,0x40,0x44,0x7e,0xa0,0x10,0x84,0xfe,0x84,0x44,0x24,0x4,0x34,0xc4,0x84,0x14,0x8,
++0x10,0x12,0x1f,0x28,0xc5,0x0,0x7f,0x1,0x11,0x11,0x11,0x29,0x45,0x1,0xff,0x0,0x40,0x44,0x7e,0xa0,0x10,0x0,0xfc,0x0,0x10,0x10,0x10,0x28,0x44,0x0,0xfe,0x0,
++0x10,0x1f,0x28,0x45,0xff,0x1,0x3f,0x21,0x3f,0x21,0x3f,0x29,0x5,0x3,0xc,0x70,0x40,0x7e,0xa0,0x14,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x0,0x0,0xe0,0x1e,
++0x10,0x12,0x1f,0x28,0x45,0x8,0x9,0x7f,0x9,0xd,0x19,0x69,0x9,0x9,0x29,0x10,0x40,0x44,0x7e,0xa0,0x10,0x4,0xfe,0x24,0x24,0x24,0xfc,0x4,0x0,0x2,0x2,0xfe,
++0x10,0x12,0x1f,0x28,0xc5,0x9,0x5,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x10,0x40,0x44,0x7e,0xa0,0x10,0x20,0x50,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x10,0x12,0x1f,0x28,0xc5,0x8,0x8,0x14,0x35,0x56,0x94,0x14,0x14,0x14,0x11,0x12,0x40,0x44,0x7e,0xa0,0x10,0x84,0xfe,0x88,0x88,0x90,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x12,0x1f,0x68,0x85,0x7f,0x1,0x3f,0x1,0xff,0x10,0x1f,0x10,0x1f,0x10,0x10,0x40,0x44,0x7e,0xa0,0x10,0xfc,0x0,0xf8,0x0,0xfe,0x10,0xf0,0x10,0xf0,0x10,0x30,
++0x12,0x1f,0x28,0x45,0x7f,0x1,0x1f,0x1,0xff,0x0,0x1f,0x10,0x11,0x12,0x4,0x38,0x48,0x7c,0xa0,0x10,0xfc,0x0,0xf8,0x0,0xfe,0x10,0xf8,0x10,0x10,0xd0,0x30,0x8,
++0x12,0x1f,0x28,0xc5,0x3f,0x20,0x20,0x2f,0x24,0x22,0x3f,0x21,0x22,0x24,0x3f,0x0,0x44,0x7e,0xa0,0x10,0xfc,0x80,0x90,0xf8,0x90,0xa0,0xfc,0x40,0x30,0x14,0xfe,0x0,
++0x10,0x12,0x1f,0x28,0xc2,0x3f,0x2,0x2,0xff,0x4,0xf,0x18,0x6f,0x8,0xf,0x8,0x40,0x44,0x7e,0xa0,0x10,0xe0,0x40,0x84,0xfe,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x12,0x1f,0x28,0xc5,0x8,0x7f,0xa,0x2,0xff,0x4,0xf,0x38,0xc8,0x8,0xf,0x8,0x48,0x7c,0xa0,0x10,0x20,0xfc,0x20,0x4,0xfe,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x12,0x1f,0x28,0x45,0x8,0x8,0xff,0x8,0x8,0xe,0xf8,0x48,0x8,0x28,0x10,0x40,0x48,0x7c,0xa0,0x10,0x88,0x88,0xfe,0x88,0x88,0xf8,0x88,0x88,0x88,0xf8,0x88,
++0x10,0x12,0x1f,0x28,0x45,0x13,0x11,0xfc,0x11,0x12,0x1d,0xf0,0x13,0x10,0x50,0x20,0x40,0x44,0x7e,0xa0,0x10,0xf8,0x10,0xe0,0x10,0x4e,0xf4,0x40,0xf8,0x40,0x40,0x40,
++0x10,0x12,0x1f,0x28,0x45,0x1f,0x11,0x1f,0x11,0x1f,0x0,0xff,0x8,0x8,0x10,0x20,0x40,0x44,0x7e,0xa0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x20,0x20,0x20,0x20,
++0x12,0x1f,0x28,0x45,0x8,0x4,0x1f,0x11,0x1f,0x11,0x1f,0x1,0xff,0x1,0x1,0x1,0x48,0x7c,0x90,0x8,0x20,0x40,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,0x0,0x0,
++0x12,0x1f,0x28,0x45,0x1,0x7f,0x40,0x88,0x10,0x20,0x1f,0x1,0x1,0x1,0xff,0x0,0x48,0x7c,0xa0,0x10,0x0,0xfe,0x2,0x24,0x18,0x8,0xf0,0x0,0x0,0x4,0xfe,0x0,
++0x12,0x1f,0x28,0x45,0x1,0x7f,0x48,0x8e,0x12,0x12,0x32,0x4c,0x8,0x10,0x20,0x40,0x48,0x7c,0xa0,0x10,0x0,0xfe,0x2,0xf4,0x90,0x90,0x90,0xd0,0xa0,0x82,0x82,0x7e,
++0x12,0x1f,0x28,0x45,0x3f,0x1,0xff,0x1,0x3f,0x1,0x25,0x25,0x29,0x29,0x31,0x41,0x48,0x7c,0xa0,0x10,0xf8,0x8,0xfe,0x8,0xf8,0x0,0x48,0x28,0x28,0x18,0x18,0x8,
++0x12,0x1f,0x28,0x45,0x0,0x3f,0x20,0x3f,0x20,0x2f,0x29,0x29,0x4f,0x49,0x80,0x0,0x48,0x7c,0xa0,0x10,0x50,0xfc,0x40,0xc0,0x28,0x28,0x28,0x30,0x20,0x52,0x8a,0x4,
++0x12,0x1f,0x28,0x41,0x3f,0x21,0x3f,0x1,0xff,0x0,0x1f,0x10,0x11,0x11,0x6,0x38,0x48,0x7c,0xa0,0x8,0xfc,0x8,0xf8,0x0,0xfe,0x10,0xf8,0x10,0x10,0x10,0x60,0x18,
++0x12,0x1f,0x28,0x41,0x1f,0x10,0x1f,0x10,0x1f,0x0,0x7f,0x1,0x3f,0x1,0xff,0x0,0x48,0x7c,0xa0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0xfc,0x0,0xf8,0x0,0xfe,0x0,
++0x12,0x1f,0x28,0x45,0x5,0x8,0x17,0x31,0x51,0x96,0x10,0x17,0x10,0x10,0x11,0x16,0x48,0x7c,0xa0,0x0,0xf0,0x10,0xfc,0x0,0xfc,0x40,0x44,0xfe,0x40,0xa0,0x18,0x6,
++0x12,0x1f,0x28,0x41,0x7f,0x4,0x3f,0x4,0xff,0x11,0x1f,0x11,0xff,0x10,0x10,0x10,0x48,0x7c,0xa0,0x50,0xfc,0x40,0xf8,0x40,0xfe,0x10,0xf0,0x14,0xfe,0x10,0x10,0x30,
++0x10,0x1f,0x28,0x45,0x3f,0x22,0x22,0x3e,0x22,0x3e,0x22,0x3e,0x22,0x22,0x3f,0x0,0x40,0x7c,0xa0,0x10,0xfc,0x40,0x50,0x78,0x40,0x78,0x40,0x78,0x40,0x48,0xfc,0x0,
++0x10,0x1f,0x28,0x45,0x7f,0x4,0x3f,0x24,0x24,0x3f,0x1,0xff,0x3,0xd,0x71,0x1,0x40,0x7c,0xa0,0x10,0xfc,0x40,0xf8,0x48,0x48,0xf8,0x0,0xfe,0x80,0x60,0x1c,0x0,
++0x10,0x1f,0x28,0x45,0x1,0x3f,0x24,0x23,0x24,0x3f,0x20,0x3c,0x20,0x22,0x2c,0x30,0x40,0x7c,0xa0,0x10,0x8,0xfc,0x48,0x88,0x48,0xf8,0x80,0x8c,0xb0,0xc2,0x82,0x7e,
++0x10,0x1f,0x28,0x45,0x1e,0x10,0x10,0x17,0x14,0x15,0x24,0x24,0x29,0x49,0x91,0x26,0x44,0x7e,0xa0,0xfc,0x80,0xf0,0x80,0xfe,0x44,0xf0,0x48,0x38,0xe0,0x22,0x22,0x1e,
++0x10,0x1f,0x28,0x45,0x8,0xff,0x8,0x7f,0x49,0x7f,0x49,0x1c,0x2a,0x4a,0x88,0x9,0x40,0x7c,0xa0,0x50,0x40,0x7e,0x82,0x24,0x20,0x20,0x20,0x50,0x50,0x88,0x8e,0x4,
++0x10,0x1f,0x28,0x45,0x3f,0x24,0x24,0x3f,0x1,0x3f,0x21,0x28,0x24,0x40,0x43,0x8c,0x40,0x7c,0xa0,0x10,0xf8,0x48,0x48,0xf8,0x40,0xfc,0x10,0xa0,0x40,0xa2,0x1a,0x6,
++0x10,0x1f,0x28,0x45,0xa,0x37,0x24,0x27,0x24,0x2f,0x30,0x4,0x4,0x4,0x8,0x70,0x40,0x7c,0xa0,0x10,0x8,0xfc,0x48,0xc8,0x48,0xc8,0x38,0x40,0x40,0x42,0x42,0x3e,
++0x10,0x1f,0x28,0x45,0x1,0x3f,0x22,0x3f,0x22,0x22,0x3f,0x28,0x2f,0x48,0x49,0x8e,0x40,0x7c,0xa0,0x10,0x0,0xfc,0x40,0xf8,0x48,0x48,0xf8,0x44,0x48,0x72,0x42,0x3e,
++0x10,0x1f,0x28,0x45,0x8,0x6a,0x5c,0x48,0x7e,0x48,0x58,0x6a,0x48,0x7e,0x1,0x0,0x40,0x7c,0xa0,0x10,0xc,0xf0,0x80,0x84,0xfe,0x90,0x90,0x90,0x90,0x90,0x10,0x10,
++0x10,0x1f,0x28,0x5f,0x10,0x1f,0x10,0x1f,0x11,0x14,0x18,0x3f,0x24,0x24,0xff,0x0,0x40,0x7c,0xa0,0xf0,0x10,0xf0,0x10,0xf8,0x10,0xe0,0x1c,0xf8,0x48,0x48,0xfe,0x0,
++0x10,0x1f,0x28,0x7f,0x4,0x3f,0x24,0x3f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x1,0x1,0x40,0x7c,0xa0,0xfc,0x40,0xf8,0x48,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,0x0,
++0x10,0x1f,0x28,0x41,0x3e,0x28,0x7f,0x18,0x28,0xcd,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x40,0x7c,0xa0,0x10,0xf8,0xa0,0xfc,0x62,0xa2,0x1e,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x10,0x1f,0x28,0x45,0x3e,0x2,0x14,0xf,0x10,0x2f,0xc8,0xf,0x4,0x2,0x7f,0x0,0x40,0x7c,0xa0,0x10,0xa0,0xc8,0x50,0xe0,0x10,0xee,0x24,0xe0,0x40,0x88,0xfc,0x0,
++0x10,0x1f,0x28,0x45,0x24,0x7e,0x24,0x3c,0x24,0x3c,0x24,0xfe,0x0,0x29,0x46,0x80,0x40,0x7c,0xa0,0x10,0x10,0xfe,0x92,0x90,0xfc,0xa4,0xa4,0xa8,0x90,0x28,0x46,0x84,
++0x10,0x1f,0x28,0x45,0x8,0x7f,0x8,0x3f,0x2a,0x2a,0x3e,0x18,0x2c,0x4a,0x88,0x8,0x40,0x7c,0xa0,0x50,0x40,0x78,0x90,0xfc,0x84,0x94,0x94,0xa4,0xb4,0x48,0x46,0x82,
++0x10,0x1f,0x28,0x45,0x10,0x17,0xfc,0x15,0x1e,0x34,0xd3,0x12,0x13,0x12,0x53,0x22,0x40,0x7c,0xa0,0x10,0x84,0x7e,0x24,0x24,0xd4,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,
++0x1,0x5,0x39,0x21,0x21,0x3d,0x21,0x21,0x21,0x3f,0x21,0x2,0x2,0x4,0x18,0xe0,0x0,0x8,0x7c,0x8,0x8,0x78,0x8,0x8,0x8,0xf8,0x8,0x80,0x80,0x40,0x30,0xe,
++0x6,0x38,0x20,0x20,0x3e,0x20,0x20,0x3f,0x24,0x4,0xff,0x4,0x4,0x8,0x10,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x48,0x40,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x1,0x7f,0x1,0x3f,0x2,0xff,0x4,0x8,0x16,0x38,0xd0,0x1e,0x10,0x10,0x1f,0x10,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x40,0x20,0x10,0xfe,0x14,0xf0,0x10,0x10,0xf0,0x10,
++0x6,0x38,0x20,0x20,0x3e,0x20,0x20,0x3f,0x8,0x1f,0x20,0xe9,0x24,0x24,0x40,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x4,0x24,0x94,0x84,0x14,0x8,
++0x2,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x3,0x5,0x19,0x61,0x1,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x80,0x60,0x1c,0x8,0x0,
++0x8,0x8,0x10,0x7f,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5f,0xf0,0x1,0x0,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xa4,0x24,0xfe,0x0,
++0x10,0x20,0x7d,0x44,0x64,0x54,0x44,0xfc,0x44,0x64,0x54,0x54,0x44,0x44,0x57,0x88,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x24,0x7e,0x44,0x65,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x45,0x45,0x55,0x88,0x20,0x20,0x20,0x20,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x24,0x7e,0x45,0x65,0x54,0x44,0xfc,0x44,0x64,0x54,0x54,0x44,0x45,0x56,0x88,0x0,0x44,0x24,0x24,0x28,0x88,0x88,0x90,0x50,0x20,0x50,0x50,0x88,0xe,0x4,0x0,
++0x10,0x25,0x7f,0x45,0x65,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x45,0x45,0x55,0x88,0x20,0x20,0x20,0x20,0x20,0x24,0xec,0x30,0x20,0x20,0x20,0x20,0x62,0xa2,0x1e,0x0,
++0x10,0x24,0x7e,0x45,0x65,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x44,0x44,0x54,0x88,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,
++0x10,0x24,0x7f,0x45,0x65,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x45,0x46,0x54,0x89,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x44,0x44,0x44,0x28,0x28,0x10,0x28,0x48,0x84,0x2,
++0x10,0x24,0x7e,0x45,0x64,0x54,0x44,0xfc,0x44,0x64,0x54,0x54,0x44,0x45,0x55,0x8a,0x40,0x20,0x24,0xfe,0x40,0x40,0x44,0x7e,0x44,0x44,0x84,0x84,0x84,0x4,0x28,0x10,
++0x10,0x24,0x7f,0x44,0x64,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x44,0x44,0x54,0x88,0x0,0x4,0xfe,0x8,0x8,0xe8,0x28,0x28,0x28,0x28,0xe8,0x28,0x8,0x8,0x28,0x10,
++0x10,0x24,0x7e,0x44,0x64,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x45,0x45,0x55,0x8a,0x20,0x24,0x3e,0x20,0x24,0xfe,0x4,0x4,0x4,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x24,0x7e,0x44,0x65,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x45,0x45,0x55,0x89,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x24,0x7e,0x44,0x65,0x55,0x46,0xfc,0x44,0x64,0x54,0x54,0x44,0x44,0x54,0x88,0x80,0x80,0x84,0xfe,0x40,0x40,0x50,0x78,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0x40,
++0x10,0x21,0x7c,0x44,0x64,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x45,0x45,0x55,0x89,0x4,0xfe,0x50,0x50,0x54,0xfe,0x54,0x54,0x54,0x54,0x5c,0x84,0x4,0x4,0xfc,0x4,
++0x10,0x25,0x7e,0x44,0x64,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x45,0x45,0x55,0x89,0x20,0x24,0xa8,0xb0,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x14,0x8,
++0x10,0x25,0x7f,0x45,0x65,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x45,0x45,0x56,0x88,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x20,0xfc,0x20,0xfe,0x20,0x20,0x22,0x22,0x1e,
++0x10,0x24,0x7e,0x44,0x64,0x57,0x44,0xfc,0x44,0x65,0x55,0x55,0x45,0x45,0x57,0x88,0x8,0xfc,0x10,0x20,0x24,0xfe,0x20,0xa0,0x44,0xfe,0x54,0x54,0x54,0x54,0xfe,0x0,
++0x11,0x20,0x7c,0x47,0x64,0x54,0x45,0xfd,0x45,0x65,0x55,0x55,0x45,0x45,0x55,0x89,0x4,0x88,0x50,0xfe,0x20,0x44,0xfe,0x4,0x4,0xfc,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x10,0x24,0x7f,0x44,0x65,0x55,0x45,0xfd,0x45,0x64,0x55,0x55,0x45,0x45,0x55,0x89,0x50,0x54,0xfe,0x50,0xfc,0x54,0xfc,0x54,0xfc,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x4,
++0x10,0x25,0x7e,0x44,0x67,0x54,0x45,0xfd,0x45,0x65,0x55,0x54,0x45,0x44,0x57,0x88,0x20,0xfc,0x88,0x50,0xfe,0x0,0xfc,0x24,0xfc,0x24,0xfc,0x20,0xfc,0x20,0xfe,0x0,
++0x10,0x24,0x7f,0x44,0x65,0x55,0x46,0xfc,0x47,0x64,0x57,0x54,0x47,0x44,0x57,0x88,0x50,0x54,0xfe,0x50,0xfe,0x2,0xf4,0x0,0xfe,0x84,0x48,0xb0,0x70,0xae,0x24,0x60,
++0x1,0x2,0x6,0x9,0x37,0xc0,0x2,0x1,0xff,0x5,0xd,0x14,0x24,0xc5,0x6,0x4,0x0,0x80,0x40,0x30,0xee,0x24,0x40,0x4,0xfe,0x0,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x4,0x1f,0x10,0x14,0x12,0x10,0x1f,0x2,0x1,0xff,0x5,0xc,0x14,0x65,0x6,0x4,0x20,0xf0,0x20,0x20,0xa0,0x44,0xfe,0x4,0x24,0xf4,0x14,0xa8,0x40,0x3c,0x8,0x0,
++0x10,0x10,0x7e,0x12,0x12,0x22,0x2a,0x45,0x1,0xff,0x5,0xc,0x34,0xc5,0x6,0x4,0x0,0x8,0xfc,0x88,0x88,0x88,0xf8,0x0,0x4,0xfe,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x1,0x1,0x7f,0x11,0xd,0x5,0x9,0x33,0xff,0x5,0xd,0x14,0x24,0xc5,0x6,0x4,0x40,0x28,0xfc,0x10,0x60,0x80,0x60,0x14,0xfe,0x8,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x10,0x8,0x41,0x25,0xa,0x10,0x21,0x2e,0x1,0xff,0x5,0xc,0x34,0xc5,0x6,0x4,0x40,0x50,0x4c,0x44,0x50,0x60,0x80,0x0,0x4,0xfe,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x2,0x3f,0x22,0x3e,0x21,0x7e,0xa2,0x22,0x3f,0x1,0xff,0x4,0xc,0x15,0x66,0x4,0x20,0xfc,0x88,0x50,0xfe,0x20,0xf8,0x20,0x20,0x24,0xfe,0x90,0x60,0x1e,0x4,0x0,
++0x44,0x24,0x29,0xff,0x11,0x11,0x7d,0x11,0x11,0xff,0x11,0x11,0x21,0x21,0x41,0x81,0x8,0x1c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x10,0x10,0x10,0x2a,0x4a,0xa6,0x12,
++0x44,0x25,0x28,0xfe,0x10,0x10,0x7c,0x11,0x12,0xfe,0x10,0x10,0x20,0x20,0x43,0x80,0x8,0xfc,0x8,0x10,0x20,0x50,0x88,0x6,0x0,0xf8,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x44,0x24,0x28,0xfe,0x11,0x10,0x7d,0x12,0x10,0xfe,0x10,0x11,0x22,0x20,0x40,0x83,0x20,0x20,0x50,0x88,0xfc,0x88,0x6,0x82,0xf8,0x88,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x44,0x25,0x29,0xfd,0x11,0x11,0x7c,0x10,0x11,0xfe,0x15,0x11,0x21,0x21,0x40,0x80,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x84,0xfe,0x4,0x24,0x24,0x54,0x4,0xe4,0x14,0x8,
++0x44,0x25,0x29,0xfd,0x11,0x10,0x7c,0x13,0x10,0xfe,0x11,0x11,0x22,0x22,0x44,0x88,0x20,0x24,0x24,0x24,0xfc,0x80,0x84,0xfe,0x90,0x90,0x54,0x58,0xa8,0x28,0x44,0x82,
++0x4,0x7f,0x1,0x3f,0x1,0xff,0x0,0x3e,0x8,0xff,0x2a,0x3d,0x51,0x9e,0x2,0xc,0x40,0xfc,0x0,0xf8,0x0,0xfe,0x80,0xa0,0x94,0xfe,0x80,0x48,0x50,0x22,0x52,0x8e,
++0x10,0x10,0x94,0x54,0x59,0x11,0xff,0x31,0x39,0x55,0x55,0x91,0x11,0x11,0x10,0x10,0x20,0x20,0x20,0x20,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,
++0x10,0x10,0x94,0x54,0x58,0x11,0xfe,0x30,0x38,0x54,0x54,0x90,0x10,0x10,0x11,0x12,0x40,0x40,0x40,0x44,0xfe,0x8,0x88,0x88,0x88,0x90,0x50,0x20,0x50,0x8e,0x4,0x0,
++0x10,0x10,0x95,0x55,0x59,0x11,0xff,0x31,0x39,0x55,0x55,0x91,0x11,0x11,0x10,0x10,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x95,0x55,0x59,0x11,0xff,0x31,0x39,0x55,0x55,0x91,0x12,0x12,0x14,0x11,0x0,0x4,0xfe,0x0,0x4,0xfe,0x40,0x44,0x7e,0x44,0x44,0x44,0x44,0x44,0x94,0x8,
++0x1,0x11,0x11,0x1f,0x21,0x21,0x3f,0x11,0x9,0x5,0xff,0x3,0x5,0x19,0x61,0x1,0x0,0x10,0x10,0xf0,0x8,0x8,0xf8,0x10,0x30,0x44,0xfe,0x80,0x60,0x1c,0x8,0x0,
++0x10,0x10,0x97,0x54,0x58,0x10,0xff,0x32,0x3a,0x56,0x56,0x93,0x12,0x12,0x13,0x12,0x0,0x4,0xfe,0x90,0x90,0x94,0xfe,0x94,0x94,0x94,0x9c,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x41,0x31,0x12,0x4,0x11,0x26,0x50,0x9,0x5,0xff,0x3,0x5,0x19,0x61,0x1,0x0,0x0,0xfc,0x48,0xa0,0x10,0xe,0x10,0x30,0x44,0xfe,0x80,0x60,0x1c,0x8,0x0,
++0x8,0xf,0x28,0x3f,0x21,0x52,0x8c,0x19,0x69,0x5,0xff,0x3,0x5,0x19,0x61,0x1,0x0,0x7c,0x44,0x28,0x10,0x28,0xc6,0x10,0x30,0x44,0xfe,0x80,0x60,0x1c,0x8,0x0,
++0x8,0x49,0x2a,0xff,0x1c,0x2a,0x49,0x49,0x7f,0x95,0x55,0x37,0x21,0x41,0x81,0x1,0x0,0x12,0x12,0x92,0x24,0x24,0x24,0x48,0xa4,0x24,0x24,0x92,0x12,0x12,0x12,0x0,
++0x10,0x10,0x95,0x55,0x59,0x12,0xfe,0x30,0x38,0x57,0x54,0x90,0x11,0x12,0x10,0x10,0x40,0x20,0x20,0xfe,0x2,0x4,0xf8,0x0,0x4,0xfe,0x20,0xa8,0x26,0x22,0xa0,0x40,
++0x10,0x10,0x94,0x55,0x58,0x13,0xfe,0x30,0x39,0x56,0x54,0x90,0x11,0x10,0x10,0x17,0x20,0x40,0x88,0xfc,0x40,0xfe,0x50,0x98,0x24,0xca,0x10,0x64,0x88,0x30,0xc0,0x0,
++0x10,0x10,0x94,0x55,0x59,0x13,0xfd,0x31,0x39,0x55,0x55,0x91,0x11,0x11,0x11,0x11,0x80,0xf8,0x88,0x8,0xfe,0x40,0x40,0x7c,0x90,0x14,0xfe,0x10,0x10,0x28,0x24,0xc2,
++0x11,0x11,0x95,0x55,0x5a,0x11,0xfe,0x31,0x3a,0x54,0x55,0x91,0x11,0x11,0x11,0x11,0x10,0x10,0xd0,0x58,0x54,0x50,0x90,0x56,0x3c,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x10,0x10,0x94,0x54,0x5b,0x10,0xfe,0x30,0x39,0x57,0x54,0x90,0x11,0x11,0x13,0x10,0x0,0x88,0x50,0x4,0xfe,0x0,0x88,0x88,0x54,0xfc,0x88,0x88,0x10,0x54,0xfe,0x22,
++0x10,0x11,0x94,0x54,0x58,0x12,0xfd,0x32,0x39,0x55,0x55,0x91,0x11,0x11,0x11,0x11,0x0,0xfc,0x24,0xa0,0xbc,0xe0,0x3e,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x4,0x14,0x8,
++0x10,0x11,0x94,0x54,0x59,0x10,0xfe,0x31,0x3a,0x54,0x55,0x90,0x10,0x11,0x12,0x10,0x0,0xf8,0x50,0x20,0xfe,0x62,0xa4,0x20,0x60,0x24,0xfe,0x70,0xa8,0x26,0x20,0x20,
++0x10,0x10,0x95,0x55,0x59,0x11,0xff,0x31,0x39,0x54,0x50,0x97,0x10,0x10,0x10,0x13,0x40,0x84,0xfe,0x4,0xfc,0x4,0xfc,0x4,0xfc,0x28,0x24,0xfe,0x50,0x50,0x8e,0x4,
++0x20,0x2f,0x21,0xa9,0x71,0x27,0xfc,0x24,0x77,0x69,0xa9,0x21,0x21,0x21,0x2a,0x24,0x4,0x7e,0x44,0x44,0x7c,0x10,0x14,0x7e,0x54,0x54,0x7c,0x10,0x10,0x14,0xfe,0x2,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x24,0x24,0x22,0x21,0x20,0x28,0x30,0x20,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x20,0x40,0x80,0x60,0x1e,0x4,0x0,
++0x7d,0x44,0x7d,0x45,0x7c,0x48,0x5c,0x63,0x1f,0x10,0x1f,0x10,0x1f,0x0,0xff,0x0,0xf8,0x20,0x24,0xfe,0x20,0x52,0x92,0xe,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,
++0x2,0x7f,0x22,0x12,0x2,0x1a,0x63,0xa,0x4,0x8,0xff,0x8,0x8,0x8,0x10,0x20,0x8,0xfc,0x88,0x48,0x8,0x68,0x88,0x28,0x10,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x10,0x10,0x2b,0x24,0x50,0x8a,0x1,0x7c,0x4,0x8,0x49,0x32,0x10,0x8,0x9,0x0,0x0,0x44,0xfe,0x44,0x44,0x64,0x54,0xcc,0x44,0xcc,0x54,0x64,0x44,0x44,0x54,0x88,
++0x1,0x2,0xc,0x37,0xc0,0x1f,0x10,0x1f,0x2,0x7f,0x12,0xa,0x12,0x22,0xa,0x4,0x0,0x80,0x60,0xd8,0x6,0xf0,0x10,0xf0,0x8,0xfc,0x48,0x28,0x48,0x88,0x28,0x10,
++0x2,0x1f,0x2,0xff,0x2,0xf,0x38,0xcf,0x8,0xf,0x0,0x7e,0x22,0x1a,0x62,0x6,0x20,0xc0,0x84,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x44,0x34,0xc4,0xc,
++0x2,0x2,0x7e,0x2,0x3e,0x2,0xfe,0x2,0x7f,0x22,0x12,0xa,0x12,0x63,0xa,0x4,0x80,0x88,0xfc,0x80,0xf8,0x80,0xfe,0x88,0xfc,0x8,0x48,0x28,0x48,0x88,0x28,0x10,
++0x8,0x4,0xff,0x0,0x3e,0x22,0x3e,0x22,0x3e,0x22,0x7e,0x22,0x12,0x1a,0x62,0x6,0x20,0x44,0xfe,0x8,0x48,0x48,0x48,0x48,0x48,0x18,0xfc,0x44,0x24,0x34,0xc4,0xc,
++0x10,0x9,0x7f,0x41,0x41,0x7f,0x40,0x40,0x7f,0x55,0x55,0x7f,0xd5,0x55,0x41,0x43,0x0,0x24,0xfe,0x24,0x24,0xb4,0x6c,0x24,0x24,0x6c,0xb4,0x24,0x24,0x24,0xb4,0x48,
++0x2,0x7f,0x0,0x3e,0x22,0x3e,0x0,0x7f,0x41,0x55,0x55,0x7f,0x49,0x49,0x43,0x0,0x24,0xfe,0x24,0x24,0x24,0xb4,0x6c,0x24,0x24,0x6c,0xb4,0x24,0x24,0x24,0xb4,0x48,
++0x7f,0x50,0x5e,0x68,0x7f,0x48,0x54,0x7f,0x0,0x7e,0x22,0x12,0x1a,0x62,0xa,0x4,0x7c,0x44,0x46,0x80,0x7c,0x28,0x10,0x6e,0x4,0xfe,0x44,0x24,0x34,0xc4,0x14,0x8,
++0x1,0x3,0x4,0x8,0x10,0x3f,0x1,0x2,0x4,0x3f,0x1,0x9,0x19,0x21,0x45,0x2,0x0,0x0,0x0,0x10,0x30,0xc0,0x0,0x20,0x10,0xf8,0x0,0x20,0x18,0xc,0x4,0x0,
++0x8,0x8,0xfe,0x8,0x3e,0xc8,0x29,0x12,0x1f,0x1,0x2,0x3f,0x9,0x11,0x21,0x3,0x40,0x48,0xfc,0x48,0xc8,0x6a,0x8a,0x26,0xc0,0x0,0x10,0xf8,0x20,0x18,0x8,0x0,
++0x8,0x8,0x7f,0xa,0x9,0x8,0xff,0x9,0x12,0x2f,0xc1,0x2,0x3f,0x9,0x11,0x23,0x20,0x28,0xfc,0x20,0x20,0xa4,0xfe,0x20,0x30,0xee,0x4,0x10,0xf8,0x20,0x18,0x8,
++0x10,0x8,0x3e,0x23,0x22,0x3e,0x41,0x42,0x9f,0x1,0x2,0x3f,0x9,0x11,0x21,0x3,0x40,0x48,0xfc,0x48,0x30,0x48,0x86,0x20,0xc0,0x0,0x10,0xf8,0x20,0x18,0x8,0x0,
++0x2,0xd,0xf0,0x94,0x54,0x49,0x7e,0x90,0x10,0xfd,0x10,0x54,0x55,0x56,0x7c,0x0,0x1c,0xe0,0x20,0x40,0x84,0xf8,0x10,0x20,0x44,0xfe,0x20,0xa8,0x26,0x22,0xa0,0x40,
++0x1,0xff,0x1,0x1f,0x12,0xff,0x10,0x1f,0x0,0x3e,0x32,0x2a,0xff,0x28,0x4a,0x18,0x4,0xfe,0x0,0xf0,0x14,0xfe,0x90,0xf0,0x1c,0xe0,0x24,0xf8,0x24,0xfe,0x54,0xb2,
++0x10,0x14,0xfe,0x11,0x7c,0x10,0xfe,0x21,0x3c,0x44,0xa4,0x28,0x10,0x28,0x41,0x82,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x50,0x50,0x88,0x88,0x6,0x4,
++0x10,0x14,0xfe,0x10,0x55,0xba,0x11,0x28,0x67,0xbc,0x24,0x29,0x5a,0x10,0x20,0xc0,0x80,0x80,0x84,0xfe,0x4,0x4c,0x54,0xe4,0xfc,0x44,0xe4,0x54,0x4c,0x44,0x54,0x48,
++0x8,0xa,0x7f,0x8,0x9,0xff,0x8,0x28,0x2a,0x2f,0x28,0x28,0x58,0x48,0x87,0x0,0x8,0x8,0x48,0x48,0x48,0xc8,0x48,0x48,0x48,0x78,0x8,0x8,0x8,0x6,0xfc,0x0,
++0x8,0x8,0x7f,0x8,0xa,0xff,0x8,0x28,0x28,0x2e,0x28,0x2b,0x58,0x48,0x87,0x0,0x8,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,0x88,0x88,0xfe,0x0,0x6,0xfc,0x0,
++0x10,0x17,0x7d,0x11,0x11,0xfd,0x12,0x55,0x50,0x5c,0x51,0x72,0x50,0x48,0x87,0x0,0x44,0xe4,0x4,0x14,0xd4,0x54,0x54,0x54,0xd4,0x94,0x4,0x14,0x8,0x6,0xfc,0x0,
++0x10,0x12,0x7d,0x11,0x14,0xfe,0x10,0x50,0x51,0x5d,0x52,0x72,0x50,0x48,0x87,0x0,0x20,0x20,0x20,0x7e,0x82,0x14,0x90,0x90,0x10,0x28,0x26,0x42,0x80,0x6,0xfc,0x0,
++0x11,0x15,0x7f,0x19,0x17,0xfb,0x15,0x59,0x57,0x5a,0x52,0x72,0x52,0x49,0x86,0x3,0x8,0x28,0xbc,0x48,0xfe,0x18,0xaa,0x4e,0xf8,0x8,0x48,0x48,0xb8,0x8,0x6,0xfc,
++0x8,0x8,0xa,0x7f,0x8,0x8,0xff,0x14,0x54,0x56,0x55,0x94,0x14,0x14,0x24,0x4c,0x8,0xfc,0x88,0x88,0x88,0xa8,0x90,0xfc,0x84,0xc4,0xa8,0xa8,0x90,0xa8,0xc6,0x84,
++0x8,0x8,0x8,0x7e,0x8,0x8,0xff,0x14,0x56,0x55,0x56,0x94,0x14,0x14,0x24,0x4c,0x20,0x20,0x24,0xfc,0x28,0x30,0xfe,0x40,0xfc,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,
++0x0,0xff,0x1,0x0,0x7e,0x42,0x42,0x42,0x7e,0x0,0x44,0x24,0x28,0xe,0xf1,0x40,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x2,0xff,0x0,0x1,0x7e,0x42,0x42,0x42,0x7e,0x0,0x44,0x24,0x28,0xe,0xf0,0x43,0x20,0x20,0x24,0xfe,0x20,0x20,0xf8,0x8,0x88,0x50,0x50,0x20,0x50,0x48,0x8e,0x4,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x57,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x0,0x84,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
++0x1,0xff,0x14,0x15,0x7f,0x55,0x55,0x55,0x57,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x0,0x88,0x7c,0x10,0x90,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x57,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x8,0x88,0x8,0x8,0xfe,0x8,0x8,0x48,0x28,0x28,0x8,0x8,0x8,0x8,0x28,0x10,
++0x4,0xfe,0x28,0x28,0xfe,0xaa,0xaa,0xab,0xae,0xc2,0x82,0xfe,0x82,0x82,0xfe,0x82,0x20,0x20,0x20,0x24,0xa6,0xbc,0xe4,0xa4,0xa4,0xb4,0xa8,0xa0,0x82,0x82,0x7e,0x0,
++0x4,0xfe,0x28,0x28,0xff,0xaa,0xaa,0xaa,0xae,0xc2,0x82,0xfe,0x82,0x82,0xfe,0x82,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x88,0x88,0x88,0x88,0x88,0xf8,0x88,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x57,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x20,0xa0,0x20,0x24,0x7e,0x60,0xa4,0x3e,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0x20,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x57,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x20,0x90,0x10,0x7e,0x42,0x84,0x20,0x20,0x24,0x28,0x30,0x20,0x22,0x22,0x1e,0x0,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x57,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x10,0x90,0x50,0x7c,0x50,0x90,0x14,0xfe,0x28,0x28,0x28,0x28,0x2a,0x4a,0x86,0x0,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x57,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x10,0x90,0x10,0x3e,0x44,0xa8,0x18,0x10,0x24,0x7e,0xc4,0x44,0x44,0x44,0x7c,0x44,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x57,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x40,0xc4,0x4c,0x50,0x62,0x42,0x7e,0x4,0x7e,0x44,0x44,0x7c,0x44,0x44,0x7c,0x44,
++0x4,0xff,0x28,0x28,0xfe,0xaa,0xaa,0xaa,0xae,0xc2,0x82,0xfe,0x82,0x82,0xff,0x82,0x4,0xfe,0x28,0xaa,0x6c,0x28,0xfe,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x0,
++0x4,0xff,0x28,0x28,0x7d,0x55,0x55,0x55,0x6d,0x45,0x45,0x7d,0x45,0x45,0x7d,0x45,0x4,0xfe,0x0,0x4,0xde,0x54,0x54,0x54,0x54,0xdc,0x54,0x54,0x54,0x54,0x54,0x54,
++0x4,0xfe,0x28,0x28,0xfe,0xaa,0xaa,0xab,0xae,0xc2,0x82,0xfe,0x82,0x82,0xff,0x82,0x4,0xfe,0x84,0x84,0x84,0xfc,0x0,0xfe,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x4,0xfe,0x28,0x28,0xfe,0xab,0xaa,0xaa,0xae,0xc3,0x82,0xfe,0x82,0x83,0xfe,0x82,0x20,0x20,0x50,0x50,0x8e,0x4,0xf8,0x20,0x24,0xfe,0x20,0x70,0xac,0x24,0xa0,0x40,
++0x4,0xfe,0x29,0x28,0xff,0xaa,0xaa,0xab,0xae,0xc2,0x82,0xfe,0x82,0x82,0xfe,0x82,0x8,0x1c,0xe0,0x4,0x24,0xa8,0x8,0xfe,0x8,0x88,0x48,0x48,0x8,0x8,0x28,0x10,
++0x4,0xfe,0x28,0x28,0xfe,0xaa,0xaa,0xaa,0xae,0xc2,0x82,0xfe,0x82,0x82,0xfe,0x82,0x4,0xfe,0x84,0x84,0xfc,0x84,0x84,0xfc,0x10,0x90,0x92,0xf4,0x98,0xb2,0xd2,0x8e,
++0x4,0xfe,0x28,0x29,0xfe,0xaa,0xaa,0xab,0xae,0xc2,0x82,0xfe,0x82,0x82,0xfe,0x82,0x20,0x10,0x14,0xfe,0x0,0x84,0x48,0xfe,0x0,0x4,0xfe,0x84,0x84,0x84,0xfc,0x84,
++0x4,0xfe,0x28,0x28,0x7f,0x54,0x54,0x55,0x6d,0x45,0x45,0x7d,0x45,0x45,0x7c,0x44,0x84,0x9e,0x94,0x94,0xf4,0x9c,0x94,0xd4,0x54,0x5c,0x54,0x54,0xd4,0x24,0x24,0x4c,
++0x4,0xfe,0x28,0x28,0x7c,0x54,0x54,0x57,0x6c,0x44,0x44,0x7c,0x44,0x44,0x7d,0x46,0x8,0xfc,0x88,0xf8,0x88,0xf8,0x0,0xfe,0x20,0xa8,0xbc,0xa0,0xa0,0xe6,0x3c,0x0,
++0x4,0xfe,0x28,0x28,0xfe,0xaa,0xaa,0xab,0xae,0xc2,0x82,0xfe,0x82,0x82,0xfe,0x82,0x0,0xfe,0x12,0x50,0x5c,0x50,0xb0,0xe,0x7c,0x44,0x7c,0x44,0x7c,0x44,0x54,0x48,
++0x4,0xfe,0x2b,0x28,0x7c,0x55,0x56,0x54,0x6c,0x44,0x45,0x7d,0x45,0x45,0x7f,0x44,0x40,0x44,0xfe,0x40,0x88,0xfc,0x88,0x88,0xf8,0x4,0xfe,0x54,0x54,0x54,0xfe,0x0,
++0x4,0xfe,0x29,0x29,0x7d,0x55,0x55,0x55,0x6d,0x45,0x45,0x7d,0x45,0x45,0x7e,0x44,0x20,0x14,0xfe,0x10,0x7c,0x14,0xfe,0x14,0x7c,0x10,0x7c,0x44,0x44,0x44,0x7c,0x44,
++0x4,0xff,0x29,0x28,0x7d,0x54,0x54,0x54,0x6f,0x44,0x45,0x7c,0x45,0x44,0x7c,0x45,0x4,0xde,0x54,0xcc,0x54,0x64,0x50,0xa8,0x46,0x90,0x20,0x48,0x90,0x20,0x40,0x80,
++0x2,0xff,0x28,0x28,0xff,0xaa,0xaa,0xaa,0xae,0xc2,0x82,0xff,0x82,0x82,0xfe,0x83,0x50,0x54,0xd8,0x50,0xfe,0x88,0x50,0xfc,0x20,0xfc,0x20,0xfe,0x20,0x50,0x8e,0x4,
++0x4,0xfe,0x28,0x28,0xff,0xaa,0xaa,0xaa,0xae,0xc2,0x82,0xfe,0x82,0x83,0xff,0x82,0x40,0x60,0x94,0xfe,0x90,0xfc,0x90,0x90,0xfc,0x90,0x94,0xfe,0x80,0x54,0x52,0x2,
++0x4,0xfe,0x29,0x28,0x7c,0x55,0x54,0x54,0x6d,0x46,0x45,0x7d,0x45,0x45,0x7f,0x44,0x40,0x24,0xfe,0x40,0x88,0xfc,0xa8,0xaa,0x2e,0x0,0xfc,0x54,0x54,0x54,0xfe,0x0,
++0x4,0xfe,0x28,0x29,0x7d,0x55,0x55,0x55,0x6d,0x45,0x45,0x7d,0x45,0x45,0x7e,0x44,0x20,0x3c,0x20,0xfe,0x22,0xfc,0x20,0xfe,0x20,0x54,0xb8,0x58,0xb6,0x54,0x90,0x30,
++0x4,0xff,0x29,0x29,0x7d,0x55,0x54,0x55,0x6c,0x45,0x45,0x7d,0x44,0x44,0x7f,0x44,0x50,0xfc,0x54,0xfc,0x54,0xfc,0x0,0xfc,0x0,0xfc,0x4,0xfc,0x88,0x50,0xfe,0x0,
++0x4,0xff,0x28,0x2b,0x7c,0x55,0x55,0x55,0x6d,0x44,0x45,0x7c,0x47,0x45,0x7d,0x46,0x1c,0xe0,0x24,0xfe,0x20,0xfc,0xac,0x74,0xfc,0x20,0xfc,0x20,0xfe,0x54,0x52,0x2,
++0x0,0xff,0x2,0x6,0x9,0x11,0x62,0x4,0x8,0x31,0x2,0x4,0x18,0x60,0x2,0x1,0x4,0xfe,0x0,0x8,0x18,0xa0,0xc0,0xc0,0xa0,0xa0,0x90,0x8e,0x84,0x80,0x80,0x0,
++0x11,0x10,0x1f,0x10,0x7d,0x44,0x47,0x6c,0x54,0x54,0x55,0x6d,0x46,0x44,0x7f,0x44,0x8,0x90,0xfe,0x40,0xfc,0x40,0xfe,0x80,0x88,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x0,0xff,0x4,0x7,0x4,0x8,0x30,0xdf,0x10,0x10,0x1f,0x9,0x9,0x19,0x27,0xc0,0x4,0xfe,0x0,0xf0,0x10,0x90,0x60,0xf0,0x10,0x10,0xf0,0x0,0xf8,0x0,0x6,0xfc,
++0x0,0x7e,0x8,0x8,0xe,0x71,0x2,0x1f,0x10,0x10,0x1f,0x9,0x9,0xd,0x33,0xc0,0x8,0xfc,0x88,0xc8,0xaa,0x6,0x10,0xf8,0x10,0x10,0xf0,0x0,0xf8,0x0,0x6,0xfc,
++0x8,0x8,0xfe,0x8,0x1e,0xe8,0x9,0x1f,0x10,0x10,0x1f,0x9,0x9,0xd,0x33,0xc0,0xc,0xf0,0x84,0xfe,0x90,0x90,0x10,0xf0,0x10,0x10,0xf0,0x0,0xf8,0x0,0x6,0xfc,
++0x0,0x3f,0x24,0x27,0x24,0x3f,0x55,0x64,0x9f,0x10,0x1f,0x9,0x9,0xd,0x33,0xc0,0x48,0xfe,0x40,0x48,0x50,0xa0,0x52,0x8a,0xf6,0x10,0xf0,0x0,0xf8,0x0,0x6,0xfc,
++0x49,0x2a,0x7f,0x49,0x5d,0x6b,0x49,0x1f,0x10,0x10,0x1f,0x9,0x9,0xd,0x33,0xc0,0x20,0x24,0x3e,0x44,0xa8,0x10,0x6e,0xf0,0x10,0x10,0xf0,0x0,0xf8,0x0,0x6,0xfc,
++0x4,0x7e,0x44,0x44,0x45,0x7d,0x56,0x10,0x50,0x5c,0x50,0x50,0x5c,0xf0,0x40,0x0,0x80,0x80,0x84,0xfe,0x4,0x4,0x4,0x84,0x44,0x44,0x4,0x4,0x4,0x44,0x28,0x10,
++0x4,0x7f,0x44,0x44,0x44,0x7c,0x54,0x10,0x50,0x5c,0x51,0x51,0x5d,0xf2,0x44,0x9,0x0,0xfc,0x84,0x88,0x88,0x90,0xbc,0x84,0xc4,0xa8,0x28,0x10,0x28,0x28,0x46,0x84,
++0x4,0x7f,0x44,0x44,0x44,0x7c,0x10,0x13,0x50,0x5c,0x50,0x51,0x5d,0xf1,0x42,0x4,0x4,0xfe,0x88,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x8,0x8,0x8,0x8,0x8,
++0x4,0x7e,0x44,0x45,0x44,0x7c,0x54,0x13,0x50,0x5c,0x50,0x50,0x5c,0xf1,0x42,0x4,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x50,0x50,0x90,0x88,0x8,0x6,0x4,
++0x4,0x7e,0x44,0x44,0x44,0x7d,0x56,0x11,0x51,0x5d,0x51,0x51,0x5d,0xf1,0x41,0x0,0x40,0x40,0xa0,0xa0,0x90,0x8,0x16,0xf8,0x10,0x10,0x10,0x50,0x20,0x4,0x4,0xfc,
++0x4,0x7f,0x44,0x44,0x44,0x7c,0x54,0x10,0x51,0x5e,0x50,0x50,0x5c,0xf0,0x40,0x0,0x4,0xfe,0x40,0x40,0x40,0x80,0x84,0xfe,0x84,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x4,0x7e,0x44,0x45,0x45,0x7f,0x55,0x11,0x51,0x5d,0x51,0x51,0x5d,0xf1,0x41,0x1,0x88,0x88,0x88,0x8,0x8,0xfe,0x8,0x8,0x48,0x28,0x28,0x8,0x8,0x8,0x28,0x10,
++0x0,0x7d,0x45,0x45,0x45,0x7d,0x55,0x13,0x51,0x5d,0x51,0x51,0x5d,0xf2,0x42,0x4,0x4,0xde,0x54,0x54,0x54,0x54,0x54,0xfe,0x54,0x54,0x54,0x54,0x54,0x54,0xe4,0xc,
++0x4,0x7f,0x45,0x45,0x45,0x7d,0x55,0x11,0x50,0x5c,0x50,0x51,0x5e,0xf0,0x40,0x0,0x1c,0xe0,0x0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0xa8,0x26,0x22,0x20,0xa0,0x40,
++0x4,0x7e,0x44,0x45,0x45,0x7e,0x54,0x10,0x50,0x5c,0x50,0x52,0x5c,0xf0,0x40,0x0,0x40,0x20,0x20,0xfe,0x2,0x4,0x80,0x88,0x98,0xa0,0xc0,0x80,0x82,0x82,0x7e,0x0,
++0x9,0x7d,0x49,0x49,0x4f,0x79,0x51,0x11,0x51,0x5d,0x51,0x51,0x5e,0xf2,0x45,0x8,0x0,0x0,0x0,0x4,0xde,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x5c,0x54,0x80,
++0x4,0x7e,0x44,0x45,0x45,0x7d,0x55,0x11,0x51,0x5d,0x51,0x51,0x5d,0xf2,0x42,0x5,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xfc,0x88,0x48,0x50,0x20,0x50,0x48,0x8e,0x4,
++0x4,0x7e,0x44,0x44,0x45,0x7f,0x54,0x10,0x51,0x5d,0x51,0x51,0x5d,0xf1,0x41,0x1,0x40,0x40,0x80,0x90,0x8,0xfc,0x2,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x7e,0x44,0x45,0x44,0x7c,0x53,0x10,0x50,0x5c,0x51,0x50,0x5c,0xf0,0x43,0x0,0x20,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x4,0x7e,0x44,0x47,0x44,0x7c,0x54,0x13,0x50,0x5d,0x50,0x50,0x5c,0xf1,0x42,0x4,0x40,0x48,0x7c,0xc0,0x50,0x22,0xd2,0xe,0x8,0xfc,0xa0,0xa0,0xa0,0x22,0x22,0x1e,
++0x0,0x7d,0x45,0x45,0x45,0x7d,0x55,0x11,0x50,0x5c,0x53,0x50,0x5c,0xf0,0x40,0x0,0x10,0x10,0x12,0xd4,0x18,0x12,0x52,0x8e,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x4,0x7e,0x45,0x45,0x45,0x7e,0x54,0x13,0x50,0x5c,0x50,0x50,0x5c,0xf1,0x42,0x4,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x90,0x90,0x90,0x90,0x92,0x12,0xe,0x0,
++0x4,0x7e,0x45,0x45,0x44,0x7c,0x57,0x11,0x51,0x5d,0x51,0x51,0x5d,0xf2,0x44,0x0,0x0,0xc,0x70,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x86,0x7c,0x0,
++0x0,0x7c,0x47,0x44,0x44,0x7c,0x54,0x10,0x53,0x5c,0x50,0x50,0x5c,0xf0,0x41,0x2,0x40,0x24,0xfe,0x88,0x50,0x20,0x50,0x8e,0x4,0x88,0x88,0x88,0x88,0x88,0x8,0x8,
++0x4,0x7e,0x44,0x47,0x44,0x7c,0x55,0x12,0x50,0x5c,0x50,0x50,0x5c,0xf0,0x41,0x2,0x40,0x20,0x4,0xfe,0x0,0x88,0x6,0x8a,0x88,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x4,0x7e,0x45,0x45,0x45,0x7d,0x55,0x11,0x51,0x5d,0x51,0x51,0x5d,0xf1,0x41,0x1,0x40,0x28,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x40,0x24,0x28,0x10,0x4e,0x84,0x0,
++0x0,0x7d,0x44,0x44,0x45,0x7d,0x55,0x11,0x50,0x5c,0x50,0x52,0x5e,0xf4,0x40,0x0,0x8,0xfc,0x8,0x8,0xf8,0x0,0x4,0x4,0xfc,0x0,0x40,0xa4,0xa2,0x8a,0x78,0x0,
++0x4,0x7e,0x44,0x44,0x45,0x7d,0x55,0x11,0x51,0x5c,0x50,0x53,0x5c,0xf0,0x40,0x0,0x24,0x3e,0x20,0x20,0xfc,0x4,0xfc,0x4,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x7d,0x45,0x45,0x45,0x7d,0x55,0x11,0x5c,0x53,0x50,0x50,0x5d,0xf2,0x40,0x0,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x70,0xa8,0x26,0x24,0x20,0x20,
++0x9,0x7d,0x49,0x49,0x4a,0x7c,0x50,0x17,0x50,0x5c,0x50,0x51,0x5d,0xf2,0x44,0x0,0x0,0x0,0x0,0xfe,0x92,0x92,0x92,0xf2,0x92,0x92,0x92,0x52,0x32,0x1e,0x12,0x0,
++0x4,0x7f,0x45,0x45,0x45,0x7d,0x55,0x11,0x51,0x5d,0x51,0x51,0x5e,0xf2,0x44,0x0,0xc,0xf0,0x10,0x14,0xfe,0x10,0x7c,0x44,0x54,0x54,0x54,0x54,0x20,0x28,0x46,0x82,
++0x4,0x7e,0x45,0x45,0x45,0x7d,0x55,0x11,0x51,0x5d,0x52,0x52,0x5c,0xf4,0x48,0x0,0x20,0x10,0xfe,0x20,0x24,0x3e,0x20,0x20,0x24,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x4,0x7e,0x45,0x44,0x44,0x7c,0x54,0x13,0x50,0x5d,0x51,0x51,0x5d,0xf1,0x41,0x1,0x40,0x28,0xfc,0x0,0x88,0x50,0x4,0xfe,0x0,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x4,0x7a,0x4a,0x48,0x4f,0x79,0x51,0x11,0x5f,0x59,0x51,0x51,0x5a,0xf2,0x44,0x0,0x40,0x5e,0x92,0x14,0xd4,0x18,0x14,0x54,0xf2,0x12,0x1a,0x14,0x90,0x50,0x50,0x10,
++0x0,0x78,0x4f,0x49,0x49,0x7a,0x57,0x11,0x51,0x5d,0x55,0x53,0x5d,0xf2,0x44,0x8,0x10,0x10,0x7c,0x14,0xfe,0x14,0x7c,0x10,0x7c,0x10,0xfe,0x10,0x10,0x96,0x7c,0x0,
++0x0,0x7d,0x47,0x45,0x45,0x7d,0x55,0x11,0x50,0x5c,0x53,0x50,0x5c,0xf1,0x42,0x0,0x48,0x48,0xfe,0x48,0x48,0x78,0x0,0xfc,0x20,0x24,0xfe,0x70,0xa8,0x26,0x24,0x20,
++0x8,0x7c,0x4a,0x4a,0x4b,0x78,0x57,0x10,0x58,0x57,0x54,0x54,0x5c,0xf4,0x44,0x4,0x40,0x40,0x48,0x48,0xf8,0x0,0xfe,0x40,0x84,0xfe,0xa4,0xa4,0xa4,0xa4,0xa4,0xc,
++0x0,0x7d,0x44,0x44,0x47,0x7c,0x55,0x11,0x51,0x5d,0x51,0x50,0x5d,0xf0,0x43,0x0,0xc,0xf0,0x20,0x24,0xfe,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x20,0xfc,0x20,0xfe,0x0,
++0x0,0x7d,0x44,0x45,0x45,0x7d,0x55,0x11,0x50,0x5f,0x52,0x52,0x5e,0xf2,0x42,0x2,0xc,0xf0,0x24,0xfe,0x24,0x24,0xfc,0x24,0x20,0xfe,0x22,0x2a,0xfa,0x2,0xa,0x4,
++0x4,0x7e,0x45,0x45,0x45,0x7d,0x55,0x11,0x51,0x5d,0x51,0x51,0x5e,0xf2,0x44,0xb,0x20,0x14,0xfe,0x48,0x48,0xfe,0x48,0x78,0x0,0xfc,0x4,0x48,0x30,0x28,0xc6,0x4,
++0x1,0x7c,0x47,0x44,0x45,0x7c,0x57,0x10,0x50,0x5c,0x51,0x51,0x5e,0xf0,0x43,0x0,0x8,0x90,0xfe,0x40,0xfc,0x40,0xfe,0x80,0x88,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x4,0x7e,0x45,0x45,0x45,0x7d,0x55,0x11,0x51,0x5d,0x52,0x52,0x5c,0xf4,0x48,0x0,0x40,0x24,0xfe,0x4,0x4,0xfc,0x4,0x0,0xfe,0xaa,0xaa,0xfe,0xaa,0xaa,0xaa,0x84,
++0x4,0x7e,0x44,0x44,0x45,0x7c,0x54,0x11,0x50,0x5c,0x53,0x50,0x5c,0xf1,0x42,0x0,0x0,0xfc,0x48,0x30,0xfe,0x32,0x54,0x90,0x30,0x24,0xfe,0x70,0xa8,0x26,0x24,0x20,
++0x8,0x7f,0x49,0x49,0x49,0x79,0x51,0x17,0x50,0x5f,0x54,0x52,0x59,0xf2,0x44,0x8,0x4,0xfe,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x8,0xbe,0xa2,0x94,0x8,0x94,0x24,0x42,
++0x8,0x7c,0x4b,0x48,0x48,0x7f,0x50,0x13,0x52,0x5e,0x52,0x53,0x5f,0xf2,0x42,0x2,0x90,0x90,0xfc,0x90,0x94,0xfe,0x90,0xfc,0x94,0x94,0x94,0x6c,0x2c,0x44,0x14,0x8,
++0x4,0x7f,0x45,0x44,0x44,0x7c,0x55,0x10,0x50,0x5d,0x50,0x53,0x5c,0xf0,0x40,0x3,0x1c,0xe0,0x24,0xa8,0x40,0x88,0xf0,0x20,0x44,0xfc,0x20,0xfe,0x20,0x50,0x8e,0x4,
++0x8,0x7f,0x4a,0x4b,0x4a,0x7a,0x52,0x12,0x52,0x5a,0x52,0x52,0x5c,0xf5,0x48,0x0,0x4,0xfe,0x0,0xf4,0x4,0xe4,0xbe,0xa4,0xb4,0xec,0xc,0xa4,0xa4,0xf4,0x14,0x8,
++0x10,0xff,0x94,0x96,0x95,0xf7,0xa4,0x26,0xa6,0xb7,0xa4,0xa4,0xa9,0xe9,0x92,0x24,0x4,0xfe,0x0,0x28,0x48,0xee,0x92,0xa4,0xa8,0xe8,0xa8,0x88,0x14,0x14,0x24,0x42,
++0x0,0x7d,0x44,0x44,0x47,0x7c,0x50,0x11,0x50,0x5d,0x50,0x53,0x5c,0xf0,0x41,0x6,0x50,0x54,0xd8,0x50,0xfe,0x88,0x50,0xfc,0x20,0xfc,0x20,0xfe,0x20,0x50,0x8e,0x4,
++0x4,0x7f,0x45,0x44,0x47,0x7c,0x54,0x13,0x51,0x5d,0x51,0x51,0x5d,0xf1,0x41,0x1,0x1c,0xe0,0x24,0xa8,0xfe,0x70,0xae,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,
++0x14,0xfa,0x90,0x9f,0x90,0xff,0xa8,0x28,0xaf,0xb2,0xa7,0xaa,0xb2,0xe2,0x86,0x1,0x20,0x28,0x24,0xa0,0x7e,0xa8,0xa8,0xa8,0xa8,0x28,0x28,0xa8,0x4a,0x4a,0x86,0x0,
++0x4,0x7f,0x45,0x45,0x45,0x7c,0x55,0x12,0x55,0x5d,0x51,0x50,0x5c,0xf3,0x40,0x0,0x4,0xfe,0x54,0x54,0xfc,0x84,0xfe,0x44,0xf4,0x54,0xf4,0x44,0x54,0xfc,0x14,0x8,
++0x11,0xff,0x91,0x94,0x92,0xf5,0xa5,0x25,0xa5,0xbd,0xa5,0xa5,0xbd,0xe5,0x84,0x4,0x10,0xfe,0x10,0x4,0xfe,0x44,0xf4,0x44,0xf4,0x44,0xf4,0x44,0xfc,0x4,0x14,0x8,
++0x10,0xff,0x94,0x95,0x95,0xf5,0xa5,0x25,0xa4,0xbd,0xa4,0xa7,0xbd,0xea,0x90,0x3,0x40,0xfe,0x0,0xfc,0x24,0xfc,0x24,0xfc,0x20,0xfc,0x20,0xfe,0x24,0xfa,0x20,0xfe,
++0x9,0x7d,0x4a,0x49,0x4b,0x7a,0x52,0x12,0x53,0x5e,0x53,0x52,0x5f,0xf2,0x43,0x2,0x24,0x24,0x48,0x24,0xfe,0x94,0x64,0x94,0xfc,0x48,0x68,0x48,0x68,0x4a,0x6a,0x46,
++0x1,0xf5,0x97,0x99,0x97,0xf3,0xa5,0x29,0xa3,0xba,0xa2,0xa2,0xba,0xe0,0x81,0x6,0x8,0x28,0xbc,0x48,0xbe,0x18,0xaa,0x4e,0xf8,0xc,0x48,0x48,0x48,0xb0,0xc,0x4,
++0x10,0xff,0x90,0x95,0x94,0xf7,0xac,0x25,0xab,0xb1,0xa0,0xa3,0xb9,0xe0,0x83,0xc,0x40,0xfe,0x0,0xf4,0x4,0xf6,0xc,0xf4,0x1a,0xf2,0x0,0xf8,0x10,0xe0,0x10,0xe,
++0x0,0x3f,0x2,0x11,0x8,0x7,0x78,0x0,0x1,0x6,0x38,0x1,0x6,0x38,0x1,0x0,0xe0,0x8,0xc,0x30,0xc0,0x0,0x80,0xc0,0x20,0x50,0x90,0x10,0x10,0x10,0x20,0xc0,
++0x8,0x10,0x35,0xcc,0x28,0x10,0x30,0xc8,0x15,0x26,0xcc,0x14,0x24,0xc4,0x14,0x8,0x0,0x4,0xfe,0x44,0x44,0x44,0x94,0x88,0x4,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x8,0x13,0x34,0xcc,0x28,0x11,0x31,0xc9,0x15,0x25,0xcd,0x15,0x25,0xc5,0x15,0x9,0x4,0xfe,0x40,0x40,0x84,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x10,0x34,0xcc,0x29,0x11,0x33,0xcd,0x15,0x25,0xcd,0x15,0x25,0xc5,0x15,0x9,0x10,0x90,0x90,0x90,0x14,0xfe,0x10,0x38,0x34,0x54,0x54,0x92,0x10,0x10,0x10,0x10,
++0x8,0x10,0x37,0xcc,0x29,0x11,0x31,0xc9,0x15,0x24,0xcf,0x14,0x24,0xc4,0x15,0xa,0x88,0x88,0xfe,0x88,0xfc,0x4,0xfc,0x4,0xfc,0x20,0xfe,0x20,0x50,0x88,0x6,0x4,
++0x8,0x10,0x35,0xcd,0x29,0x11,0x31,0xc9,0x15,0x24,0xcd,0x15,0x25,0xc5,0x15,0x9,0x20,0x44,0xfe,0x4,0x54,0x24,0x54,0x4,0xfc,0x10,0x12,0xd4,0x18,0x12,0xd2,0xe,
++0x10,0x10,0x1e,0x24,0x28,0x7e,0xaa,0x2a,0x3e,0x2b,0x2a,0x3e,0x2a,0x4a,0x42,0x86,0x10,0x90,0x50,0x50,0x10,0x90,0x50,0x54,0x1e,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x10,0x1e,0x24,0x28,0x7e,0xaa,0x2a,0x3e,0x2b,0x2a,0x3e,0x2a,0x4a,0x42,0x87,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfe,0x20,0x20,0x50,0x48,0x86,0x4,
++0x10,0x10,0x1e,0x25,0x28,0x7e,0xaa,0x2a,0x3e,0x2a,0x2a,0x3e,0x2a,0x4b,0x42,0x86,0x80,0x84,0xfe,0x0,0xf8,0x20,0x44,0xfe,0x54,0x54,0x54,0x94,0xa4,0x24,0x54,0x8,
++0x10,0x10,0x1f,0x24,0x28,0x7e,0xaa,0x2a,0x3e,0x2a,0x2a,0x3e,0x2a,0x4a,0x43,0x86,0x4,0xe,0xf0,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa4,0xac,0x7a,0x8,
++0x8,0x8,0x2e,0x28,0x2e,0xf4,0x44,0xf,0x10,0x3f,0x51,0x1f,0x11,0x1f,0x21,0x41,0x80,0x84,0x98,0xe2,0x82,0x7e,0x0,0xe0,0x40,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x30,
++0x10,0x10,0x1d,0x24,0x28,0x7e,0xaa,0x2b,0x3e,0x2a,0x2a,0x3e,0x2a,0x4a,0x42,0x87,0x20,0x20,0x24,0xac,0xb0,0x20,0x24,0xfe,0x50,0x50,0x50,0x50,0x52,0x92,0x8e,0x0,
++0x20,0x20,0x3d,0x48,0x50,0xfd,0x55,0x55,0x7d,0x55,0x54,0x7c,0x55,0x56,0x44,0x8c,0x20,0x24,0xfe,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x70,0xa8,0x26,0x24,0x20,0x20,
++0x21,0x20,0x3c,0x49,0x51,0xfd,0x55,0x55,0x7d,0x55,0x54,0x7f,0x54,0x54,0x44,0x8c,0x4,0x88,0x50,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x20,0x20,0x20,0x20,
++0x8,0x2f,0x28,0x2f,0x7a,0x1,0xff,0x0,0x1f,0x0,0x1f,0x0,0x1f,0x10,0x1f,0x10,0x40,0x58,0x60,0x44,0x7c,0x0,0xfe,0x0,0xf0,0x0,0xf0,0x0,0xf0,0x10,0xf0,0x10,
++0x8,0xff,0x8,0x3e,0x2b,0x3e,0x22,0x41,0xff,0x0,0x1e,0x0,0x0,0x1f,0x10,0x1f,0x78,0x48,0x48,0x86,0x78,0x48,0x30,0x4c,0xfe,0x0,0x0,0xf0,0x0,0xf0,0x10,0xf0,
++0x10,0x14,0xfe,0x10,0x7c,0x10,0xfe,0x0,0x7c,0x44,0x7c,0x44,0x7c,0x44,0x55,0x4a,0x0,0x8,0xfc,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x50,0x52,0x92,0xe,0x0,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x1,0x3f,0x0,0xff,0x8,0xf,0x0,0x0,0x0,0x0,0xf0,0x0,0xfe,0x12,0x64,0x10,0x0,0xf8,0x0,0xfe,0x0,0xf0,0x10,0x10,0xa0,0x40,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x3f,0x21,0x21,0x2f,0x21,0x21,0x21,0x42,0x4c,0x90,0xf0,0x0,0xfe,0x12,0x64,0x10,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x50,0x20,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x2,0x1,0xff,0x8,0x4,0x2,0x1,0x6,0x18,0x60,0xf0,0x0,0xfe,0x12,0x64,0x10,0x0,0x4,0xfe,0x20,0x40,0x80,0x0,0xc0,0x3c,0x8,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x78,0xb,0x10,0x78,0xf,0x28,0x10,0x2b,0x44,0x83,0xf0,0x0,0xfe,0x12,0x64,0x10,0x38,0xc0,0x40,0x48,0xfc,0x40,0x50,0xf8,0x46,0xfc,
++0x1f,0x1,0x7f,0x51,0x8d,0x12,0x1,0x7f,0x8,0x4,0x3,0x1c,0xe8,0x8,0x10,0x20,0xf0,0x0,0xfe,0x12,0x64,0x10,0x0,0xfc,0x20,0x40,0x80,0x70,0x2e,0x20,0x20,0x20,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x41,0x20,0x8f,0x60,0x2b,0x12,0x62,0x22,0x22,0x20,0xf0,0x0,0xfe,0x12,0x64,0x10,0x40,0x44,0xfe,0x40,0xf8,0x48,0x48,0x48,0x58,0x40,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x2,0x7e,0x2,0x2,0x3e,0x2,0x2,0x7e,0x2,0x2,0xf0,0x0,0xfe,0x12,0x64,0x10,0x88,0xfc,0x80,0x90,0xf8,0x80,0x88,0xfc,0x80,0x80,
++0x1f,0x1,0x7f,0x51,0x8d,0x12,0x1,0x1f,0x4,0xff,0x1,0x7f,0x4,0xc,0x3,0x1c,0xf0,0x0,0xfe,0x12,0x64,0x10,0x0,0xf0,0x44,0xfe,0x0,0xfc,0x40,0x40,0x80,0x70,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x20,0x17,0x42,0x21,0xb,0x10,0x6f,0x20,0x20,0x27,0xf0,0x0,0xfe,0x12,0x64,0x10,0x38,0xc0,0x48,0x50,0xf8,0x40,0xfe,0x40,0x48,0xfc,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x23,0x12,0x2,0xf3,0x11,0x13,0x1c,0x12,0x1b,0x10,0xf0,0x0,0xfe,0x12,0x64,0x10,0xf8,0x88,0x48,0xf8,0x0,0xfc,0x44,0xa4,0xf4,0x8,
++0x1f,0x1,0x7f,0x51,0x8d,0x12,0x3f,0x12,0xff,0x21,0x3f,0x21,0x3f,0x21,0x25,0x22,0xf0,0x0,0xfe,0x12,0x64,0x10,0x20,0x24,0xfe,0x4,0x44,0x28,0x10,0x28,0x46,0x84,
++0x1f,0x1,0x7f,0x51,0x8d,0x10,0x2b,0xe5,0x19,0x69,0x95,0x64,0x5,0x64,0x17,0x8,0xf0,0x0,0xfe,0x12,0x64,0x10,0xfc,0x24,0xfc,0x24,0xfc,0x20,0xfc,0x20,0xfe,0x0,
++0x8,0x8,0x2a,0x2f,0x28,0x29,0xff,0x0,0x49,0x49,0x49,0x55,0x63,0x41,0x7f,0x1,0x40,0x40,0x40,0x40,0x40,0x44,0xcc,0x50,0x60,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x8,0x8,0x2a,0x2f,0x28,0x29,0xff,0x0,0x49,0x49,0x49,0x55,0x63,0x41,0x7f,0x1,0x0,0x4,0x7e,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0xfe,0x0,
++0x10,0x10,0x50,0x5d,0x52,0x50,0xff,0x1,0x55,0x55,0x55,0x6d,0x45,0x45,0x7c,0x4,0x80,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0xe4,0x14,0x8,0x2,0x2,0xfe,0x0,
++0x10,0x11,0x50,0x5c,0x50,0x54,0xfe,0x1,0x54,0x54,0x54,0x6c,0x44,0x44,0x7c,0x4,0x4,0xfe,0x44,0x44,0x44,0x44,0x94,0x8,0x0,0xfc,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x10,0x10,0x50,0x5d,0x51,0x55,0xff,0x1,0x55,0x55,0x55,0x6d,0x45,0x45,0x7f,0x4,0x50,0x50,0x50,0x50,0x52,0x74,0x58,0x50,0x50,0x50,0x50,0x50,0x50,0x72,0x92,0xe,
++0x10,0x11,0x51,0x5d,0x51,0x55,0xff,0x1,0x55,0x55,0x55,0x6d,0x45,0x45,0x7d,0x5,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x44,0x48,0x30,0x20,0x10,0x4e,0x84,0x0,
++0x10,0x11,0x50,0x5c,0x51,0x54,0xfe,0x0,0x57,0x54,0x54,0x6c,0x44,0x44,0x7c,0x4,0x8,0xfc,0x20,0x28,0xfc,0x48,0x48,0x48,0xfe,0x4,0xfe,0x84,0x84,0x84,0xfc,0x84,
++0x10,0x10,0x50,0x5c,0x50,0x54,0xfe,0x0,0x54,0x54,0x54,0x6c,0x44,0x45,0x7e,0x4,0x8,0xfc,0x88,0x88,0x88,0x88,0xf8,0xa0,0x28,0xbc,0xa0,0xa0,0xa0,0x66,0x3c,0x0,
++0x10,0x11,0x51,0x5d,0x51,0x55,0xff,0x1,0x55,0x55,0x55,0x6d,0x45,0x45,0x7e,0x4,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfe,0x20,0x48,0xfc,0x10,0x7c,0x10,0x14,0xfe,0x0,
++0x0,0x1f,0x10,0x1f,0x1,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x21,0x1,0x1,0x0,0x10,0xf8,0x10,0xf0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x2,0x2,0xfe,
++0x1f,0x0,0xff,0x4,0x78,0x1f,0x10,0x1f,0x1,0x3f,0x21,0x3f,0x21,0x3f,0x1,0x0,0xf0,0x4,0xfe,0x40,0x3c,0xf0,0x10,0xf0,0x8,0xfc,0x8,0xf8,0x8,0xfa,0x2,0xfe,
++0x3e,0x22,0x3e,0x1f,0x11,0x1f,0x11,0xff,0x1,0x1f,0x11,0x1f,0x11,0x1f,0x1,0x0,0xf8,0x88,0xf8,0xf0,0x10,0xf0,0x14,0xfe,0x0,0xf0,0x10,0xf0,0x10,0xf4,0x4,0xfc,
++0x9,0x8,0x8,0x1f,0x10,0x30,0x3f,0x50,0x90,0x1f,0x10,0x10,0x10,0x1f,0x10,0x10,0x0,0x80,0x88,0xfc,0x80,0x90,0xf8,0x80,0x90,0xf8,0x80,0x80,0x84,0xfe,0x0,0x0,
++0x9,0x8,0xf,0x10,0x3f,0x50,0x1f,0x10,0x1f,0x10,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x88,0xfc,0x80,0xf8,0x80,0xf8,0x80,0xfc,0x80,0x84,0xfe,0x80,0x80,0x80,0x80,
++0x9,0x8,0x1f,0x10,0x3f,0x50,0x9f,0x10,0x1f,0x10,0x7f,0x4,0x4,0x8,0x10,0x60,0x0,0x88,0xfc,0x80,0xf8,0x80,0xf8,0x80,0xfc,0x0,0xe0,0x28,0x7c,0x8,0x28,0x10,
++0x0,0x8,0x7d,0x49,0x4b,0x7d,0x49,0x49,0x79,0x49,0x49,0x4d,0xf1,0x41,0x1,0x1,0xc0,0xa0,0x24,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x10,0x10,0x1e,0x22,0x65,0x99,0xa,0x14,0x22,0x7f,0xa2,0x22,0x22,0x3e,0x22,0x0,0x60,0x50,0x84,0xfe,0x90,0x90,0xfc,0x90,0x90,0xfc,0x90,0x90,0x94,0xfe,0x80,0x80,
++0x3e,0x22,0x2a,0x2a,0x22,0x3e,0x9,0x10,0x3f,0x50,0x9f,0x10,0x1f,0x10,0x1f,0x10,0xf8,0x88,0xa8,0xa8,0x88,0xf8,0x0,0x88,0xfc,0x80,0xf8,0x80,0xf8,0x80,0xfc,0x0,
++0x20,0x32,0x21,0x3d,0x50,0xd7,0x79,0x51,0x51,0x7d,0x51,0x51,0x51,0x7d,0x40,0x40,0x10,0x18,0x10,0x3e,0x68,0x28,0x3e,0x28,0x28,0x3e,0x28,0x68,0xa8,0x3e,0x20,0x20,
++0x4,0x7e,0x10,0x10,0x1e,0x71,0x2,0xc,0x37,0xc1,0x1f,0x1,0x9,0x5,0x7f,0x0,0x8,0xfc,0x88,0xc8,0xaa,0xe,0x80,0x60,0xde,0x4,0xf0,0x0,0x20,0x48,0xfc,0x0,
++0x2,0x1,0x7f,0x4,0x14,0x25,0x42,0xc,0x37,0xc1,0x1f,0x1,0x9,0x5,0x7f,0x0,0x0,0x8,0xfc,0x40,0x50,0x4c,0x84,0x30,0xee,0x4,0xf0,0x0,0x20,0x48,0xfc,0x0,
++0x20,0x13,0x40,0x27,0x8,0x73,0x22,0x2c,0x37,0xc1,0x1f,0x1,0x9,0x5,0x7f,0x0,0x38,0xc0,0x48,0xfc,0xa0,0x18,0x88,0x60,0xde,0x4,0xf0,0x0,0x20,0x48,0xfc,0x0,
++0x8,0x7e,0x10,0x28,0x7e,0x8,0x7d,0xa,0xc,0x37,0xc1,0x1f,0x9,0x5,0x7f,0x0,0xc,0xf0,0x80,0x88,0xfc,0x90,0x10,0x90,0x60,0xde,0x4,0xf0,0x20,0x48,0xfc,0x0,
++0x0,0x7e,0x14,0x8,0xfe,0x1a,0x29,0x4a,0xc,0x37,0xc1,0x1f,0x9,0x5,0x7f,0x0,0x40,0x44,0x7e,0xc8,0x48,0x30,0x48,0x86,0x60,0xde,0x4,0xf0,0x20,0x48,0xfc,0x0,
++0x8,0x7f,0x8,0x3e,0x9,0xfe,0x11,0x1e,0x24,0xdf,0x31,0xdf,0x9,0x5,0x7f,0x0,0x40,0x44,0x7e,0xc8,0x48,0x30,0x48,0x86,0x40,0xf0,0xe,0xf4,0x20,0x48,0xfc,0x0,
++0x20,0x17,0x40,0x23,0x9,0x71,0x23,0x22,0xc,0x37,0xc1,0x1f,0x9,0x5,0x7f,0x0,0x40,0xfe,0x90,0xf8,0x50,0x50,0x52,0x8e,0x60,0xde,0x4,0xf0,0x20,0x48,0xfc,0x0,
++0x3f,0x21,0x3f,0x20,0x3f,0x51,0x9f,0x2,0xc,0x37,0xc1,0x1f,0x9,0x5,0x7f,0x0,0x10,0x7c,0x28,0xfe,0x10,0x7c,0x10,0x90,0x60,0xde,0x4,0xf0,0x20,0x48,0xfc,0x0,
++0x1,0x6,0x18,0xef,0x1,0x1f,0x5,0x3f,0x10,0x28,0x7c,0x93,0x7c,0x10,0x54,0xfe,0x0,0xc0,0x30,0xee,0x0,0xf0,0x40,0xf8,0x10,0x28,0x7c,0x92,0x7c,0x10,0x54,0xfe,
++0x20,0x20,0x3c,0x48,0x90,0x7f,0x54,0x54,0x7c,0x54,0x54,0x7c,0x0,0x1d,0xe2,0x44,0x40,0x60,0x50,0x50,0x44,0xfe,0x40,0x50,0x50,0x50,0x50,0x90,0x90,0x12,0x12,0xe,
++0x20,0x20,0x3c,0x48,0x93,0x7c,0x54,0x54,0x7c,0x54,0x54,0x7c,0x0,0x1d,0xe1,0x42,0x40,0x20,0x20,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0x88,0x8,0x28,0x10,
++0x20,0x20,0x3c,0x48,0x93,0x7c,0x54,0x54,0x7c,0x54,0x55,0x7d,0x1,0x1e,0xe2,0x45,0x40,0x60,0x50,0x44,0xfe,0x80,0x80,0xfc,0x84,0xc4,0x48,0x28,0x10,0x28,0x46,0x84,
++0x20,0x20,0x3d,0x48,0x91,0x7c,0x54,0x54,0x7c,0x57,0x54,0x7c,0x0,0x1c,0xe0,0x40,0x0,0x8,0xfc,0x20,0x24,0xa8,0xa8,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,
++0x20,0x20,0x3c,0x48,0x90,0x7c,0x54,0x54,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x20,0x3c,0x48,0x90,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe2,0x44,0x40,0x44,0x7e,0x40,0x44,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,
++0x20,0x20,0x3d,0x48,0x90,0x7c,0x57,0x54,0x7c,0x54,0x54,0x7d,0x2,0x1c,0xe0,0x40,0x8,0x1c,0xe0,0x20,0x20,0x24,0xfe,0x20,0x70,0x68,0xa8,0x26,0x24,0x20,0x20,0x20,
++0x20,0x20,0x3c,0x48,0x90,0x7d,0x56,0x54,0x7c,0x54,0x54,0x7c,0x0,0x1c,0xe0,0x40,0x48,0x48,0x48,0x88,0x88,0xfe,0x88,0x88,0xc8,0xa8,0xa8,0x88,0x88,0x88,0xa8,0x90,
++0x11,0x9,0x49,0x7f,0x44,0x84,0xf,0x10,0x3f,0x51,0x1f,0x11,0x1f,0x0,0xff,0x0,0x10,0x20,0x40,0xfe,0x2,0x4,0xc0,0x90,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,
++0x20,0x20,0x3c,0x48,0x91,0x7f,0x54,0x54,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x20,0x20,0x40,0x88,0x4,0xfe,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x20,0x20,0x3d,0x48,0x90,0x7c,0x57,0x54,0x7c,0x54,0x55,0x7c,0x0,0x1c,0xe3,0x40,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x20,0x20,0x3c,0x4b,0x90,0x7c,0x55,0x54,0x7c,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x20,0x20,0x24,0xfe,0x20,0x28,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x20,0x20,0x3c,0x4b,0x90,0x7c,0x55,0x56,0x7c,0x54,0x54,0x7c,0x0,0x1c,0xe0,0x40,0x40,0x40,0x44,0xfe,0x80,0x88,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,0xa8,0x90,
++0x20,0x23,0x3c,0x48,0x90,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x40,0x4,0xfe,0x20,0x20,0x44,0xfe,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x4,0x14,0x8,
++0x20,0x20,0x3c,0x4b,0x90,0x7c,0x54,0x54,0x7c,0x57,0x54,0x7c,0x0,0x1c,0xe1,0x42,0x40,0x20,0x4,0xfe,0x88,0x50,0x20,0x50,0x8e,0x4,0x88,0x88,0x88,0x88,0x8,0x8,
++0x20,0x20,0x3c,0x4b,0x90,0x7c,0x55,0x56,0x7c,0x54,0x54,0x7c,0x0,0x1c,0xe1,0x46,0x40,0x20,0x4,0xfe,0x0,0x88,0x6,0x8a,0x88,0x50,0x50,0x20,0x50,0x88,0x6,0x4,
++0x9,0x5,0x3f,0x2,0xff,0x4,0xa,0x37,0xc8,0x1f,0x31,0x1f,0x11,0x1f,0x0,0x7f,0x20,0x40,0xf8,0x0,0xfe,0x40,0x30,0xce,0x84,0xf0,0x10,0xf0,0x10,0xf0,0x0,0xfc,
++0x20,0x21,0x3c,0x48,0x91,0x7c,0x54,0x55,0x7c,0x54,0x57,0x7c,0x0,0x1c,0xe0,0x40,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x8,0x8,0xfe,0x88,0x48,0x8,0x28,0x10,
++0x20,0x23,0x3c,0x48,0x91,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7c,0x0,0x1c,0xe0,0x43,0x4,0xfe,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0xa0,0xa0,0x40,0xb0,0xe,
++0x20,0x23,0x3c,0x48,0x91,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x4,0xfe,0x0,0x4,0xde,0x54,0x54,0x54,0x54,0xdc,0x54,0x54,0x54,0x54,0x54,0x54,
++0x20,0x20,0x3c,0x4a,0x91,0x7d,0x54,0x57,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe2,0x44,0x20,0x20,0x24,0xfe,0x20,0x20,0x50,0x50,0xfc,0x10,0x14,0xfe,0x10,0x10,0x96,0x7c,
++0x20,0x20,0x3d,0x49,0x91,0x7d,0x55,0x55,0x7c,0x54,0x55,0x7c,0x0,0x1c,0xe3,0x40,0x40,0x40,0x7e,0x62,0x54,0x48,0x54,0x62,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x20,0x20,0x3d,0x49,0x91,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe0,0x40,0x4,0x44,0xe4,0x44,0x44,0x7e,0x44,0xc4,0x64,0x54,0x54,0x44,0xc4,0x44,0x14,0x8,
++0x20,0x20,0x3c,0x48,0x91,0x7c,0x54,0x54,0x7f,0x54,0x55,0x7c,0x0,0x1d,0xe2,0x40,0x40,0x40,0x7c,0x88,0x50,0x20,0x50,0x8e,0x24,0x20,0xfc,0x20,0xa8,0x26,0xa2,0x40,
++0x20,0x21,0x3c,0x48,0x90,0x7d,0x54,0x54,0x7c,0x55,0x54,0x7c,0x1,0x1e,0xe0,0x40,0x1c,0xe0,0x40,0x40,0x88,0xf0,0x20,0x40,0x88,0xfc,0x20,0xa8,0x26,0x22,0xa0,0x40,
++0x20,0x10,0x40,0x25,0x8,0x77,0x22,0x27,0x8,0x1f,0x31,0x5f,0x11,0x1f,0x0,0xff,0x20,0xa8,0xa6,0x3a,0x60,0x80,0x0,0xc0,0x90,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,
++0x20,0x20,0x3c,0x4b,0x92,0x7c,0x54,0x54,0x7c,0x57,0x54,0x7c,0x0,0x1c,0xe1,0x46,0x40,0x20,0x20,0xfe,0x2,0x14,0xf8,0x0,0x4,0xfe,0x90,0x90,0x90,0x92,0x12,0xe,
++0x20,0x20,0x3d,0x49,0x91,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe0,0x40,0x0,0x4,0xde,0x54,0x54,0xd4,0x54,0x54,0xd4,0x14,0x94,0x54,0x5c,0x90,0x10,0x10,
++0x20,0x20,0x3d,0x48,0x90,0x7c,0x57,0x54,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x20,0x28,0xfc,0x20,0xf8,0x20,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x4,0x14,0x8,
++0x20,0x20,0x3d,0x48,0x90,0x7f,0x54,0x55,0x7e,0x54,0x55,0x7e,0x0,0x1c,0xe0,0x43,0x20,0x28,0xfc,0x20,0x24,0xfe,0x88,0x46,0x7a,0x88,0x48,0x50,0x20,0x50,0x8e,0x4,
++0x20,0x23,0x3d,0x49,0x91,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7d,0x1,0x1f,0xe0,0x40,0x20,0xf0,0x44,0x7e,0x44,0xd4,0x54,0x54,0x54,0xd4,0x54,0x68,0xc8,0x54,0x52,0x60,
++0x20,0x20,0x3c,0x4b,0x90,0x7c,0x54,0x55,0x7c,0x54,0x54,0x7f,0x0,0x1c,0xe0,0x40,0x50,0x50,0x54,0xde,0x50,0x50,0x50,0xdc,0x50,0x50,0x54,0xde,0x50,0x50,0x50,0x50,
++0x20,0x21,0x3d,0x49,0x91,0x7d,0x55,0x55,0x7c,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x10,0x12,0xd6,0x18,0x10,0x52,0x92,0xe,
++0x20,0x20,0x3c,0x48,0x90,0x7c,0x54,0x54,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x8,0xfc,0x88,0xf8,0x88,0x88,0xf8,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x20,0x21,0x3d,0x49,0x91,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x4,0xfe,0x4,0x24,0x24,0xfc,0x24,0x24,0x74,0x54,0x54,0x74,0x4,0x4,0xfc,0x4,
++0x20,0x20,0x3d,0x49,0x91,0x7d,0x55,0x55,0x7d,0x55,0x54,0x7c,0x0,0x1c,0xe1,0x46,0x0,0x44,0x8e,0x4,0x4,0xdc,0x4,0x4,0xfc,0x54,0x50,0x50,0x90,0x92,0x12,0xe,
++0x20,0x20,0x3c,0x48,0x91,0x7e,0x54,0x55,0x7c,0x54,0x54,0x7c,0x1,0x1e,0xe2,0x40,0x20,0x20,0x50,0x88,0x46,0x24,0x20,0xf8,0x8,0x10,0x40,0xa0,0xa4,0x8a,0x8a,0x78,
++0x20,0x21,0x3d,0x49,0x91,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe2,0x44,0x4,0xfe,0x24,0x24,0x74,0x24,0x24,0xfc,0x4,0x74,0x54,0x54,0x74,0x4,0x14,0x8,
++0x20,0x23,0x3c,0x48,0x91,0x7c,0x55,0x55,0x7d,0x55,0x55,0x7c,0x0,0x1c,0xe1,0x40,0x4,0xfe,0x4,0x74,0xc4,0x44,0xf4,0x54,0x54,0x54,0xf4,0x44,0x54,0x76,0xca,0x0,
++0x20,0x20,0x3c,0x49,0x92,0x7d,0x54,0x54,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x0,0x92,0x92,0x24,0x48,0x24,0x92,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,
++0x20,0x21,0x3c,0x48,0x93,0x7c,0x54,0x55,0x7d,0x55,0x55,0x7d,0x1,0x1c,0xe0,0x43,0x20,0xfc,0x20,0x88,0xfe,0x88,0x4,0xfe,0x4,0x24,0x24,0x24,0x24,0x58,0x86,0x2,
++0x20,0x21,0x3d,0x4b,0x91,0x7d,0x55,0x55,0x7d,0x54,0x57,0x7c,0x0,0x1d,0xe2,0x40,0x48,0x48,0x48,0xfe,0x48,0x48,0x78,0x0,0xfc,0x20,0xfe,0x70,0xa8,0x26,0x24,0x20,
++0x20,0x21,0x3d,0x49,0x91,0x7d,0x54,0x55,0x7c,0x57,0x54,0x7c,0x0,0x1c,0xe0,0x40,0x4,0xde,0x54,0x54,0x54,0xdc,0x0,0xfc,0x0,0xfe,0x80,0xfc,0x4,0x4,0x28,0x10,
++0x20,0x20,0x3b,0x48,0x90,0x7f,0x54,0x55,0x7d,0x55,0x56,0x7c,0x0,0x1c,0xe0,0x40,0x8,0x68,0x88,0x88,0x8a,0xea,0x9c,0x88,0xc8,0xa8,0x88,0x88,0x94,0x94,0xa2,0xc0,
++0x20,0x20,0x3c,0x49,0x93,0x7d,0x55,0x55,0x7d,0x54,0x54,0x7d,0x2,0x1c,0xe0,0x43,0x80,0x84,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x80,0xf8,0x88,0x50,0x20,0xd0,0xe,
++0x20,0x20,0x3d,0x49,0x91,0x7d,0x55,0x54,0x7d,0x54,0x54,0x7d,0x0,0x1c,0xe3,0x40,0x20,0x44,0xfe,0x4,0xfc,0x4,0xfc,0x0,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,
++0x20,0x20,0x3d,0x49,0x91,0x7d,0x55,0x55,0x7d,0x55,0x57,0x7d,0x1,0x1d,0xe1,0x41,0x40,0x24,0xfe,0x4,0x4,0xfc,0x0,0x4,0xfe,0x54,0x54,0xfc,0x54,0x54,0x54,0xc,
++0x20,0x21,0x3d,0x48,0x90,0x7c,0x55,0x56,0x7d,0x55,0x55,0x7d,0x0,0x1c,0xe3,0x40,0x0,0xfc,0x24,0x88,0x70,0x88,0x26,0x24,0xfe,0x24,0x24,0xfc,0x20,0x24,0xfc,0x2,
++0x8,0x7f,0x8,0xfe,0x11,0x1e,0x22,0x4f,0x88,0x1f,0x31,0x5f,0x11,0x1f,0x0,0xff,0x40,0x44,0x7e,0xc8,0x48,0x30,0x48,0xc6,0x90,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfc,
++0x20,0x20,0x3d,0x48,0x93,0x7c,0x54,0x55,0x7e,0x54,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x40,0x48,0xf8,0x50,0xfe,0x40,0xf0,0x84,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,
++0x20,0x21,0x3d,0x49,0x91,0x7d,0x54,0x57,0x7c,0x56,0x55,0x7d,0x2,0x1c,0xe1,0x40,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x0,0xde,0x42,0x52,0xce,0x4a,0x52,0x42,0x4a,0x84,
++0x20,0x21,0x3d,0x49,0x91,0x7d,0x54,0x54,0x7c,0x55,0x54,0x7c,0x0,0x1d,0xe2,0x40,0x4,0xfe,0x54,0x54,0x54,0xfc,0x20,0xa8,0xa8,0x24,0x20,0xa8,0xa4,0x22,0x22,0x20,
++0x20,0x20,0x3d,0x48,0x91,0x7c,0x54,0x54,0x7d,0x54,0x57,0x7c,0x1,0x1d,0xe1,0x41,0x8,0x1c,0xe0,0x4,0x24,0xa8,0x80,0xfc,0x20,0x24,0xfe,0x20,0x24,0x24,0xfc,0x4,
++0x21,0x21,0x7f,0x91,0x21,0xf8,0xab,0xaa,0xfa,0xaa,0xab,0xf8,0x7,0x18,0xe0,0x40,0x48,0x48,0xf8,0x48,0xc8,0x9e,0xea,0xaa,0xaa,0xaa,0xea,0x8a,0xea,0x8a,0x92,0xa6,
++0x20,0x23,0x3c,0x48,0x91,0x7d,0x55,0x55,0x7c,0x55,0x54,0x7f,0x0,0x1d,0xe2,0x40,0x4,0xfe,0x50,0x54,0xfe,0x54,0x54,0xfc,0x0,0xfc,0x0,0xfe,0xa8,0x26,0x22,0x60,
++0x20,0x21,0x3c,0x4b,0x92,0x7d,0x54,0x55,0x7c,0x54,0x55,0x7c,0x0,0x1c,0xe1,0x40,0x8,0xfc,0x20,0xfe,0x22,0xac,0x20,0xac,0x20,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x4,
++0x20,0x20,0x3c,0x48,0x90,0x7c,0x55,0x55,0x7d,0x55,0x54,0x7c,0x0,0x1c,0xe0,0x43,0xfc,0x84,0xfc,0x84,0xfc,0x0,0xfe,0x4a,0x4a,0xfe,0x0,0xfc,0x48,0x30,0xc8,0x6,
++0x20,0x3f,0x40,0xbf,0x29,0xff,0x25,0x3f,0x8,0x1f,0x31,0x5f,0x11,0x1f,0x0,0xff,0x40,0x44,0xfe,0x4,0x44,0xa8,0x10,0xe8,0x86,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,
++0x20,0x23,0x7a,0x93,0x22,0xfb,0xaa,0xab,0xfa,0xab,0xab,0xfb,0x5,0x1d,0xe5,0x49,0x20,0xfe,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x24,0x2c,
++0x20,0x23,0x7a,0x92,0x22,0xfa,0xab,0xaa,0xfb,0xab,0xab,0xfb,0x2,0x1c,0xe4,0x49,0x4,0xfe,0x8,0xa8,0xae,0x12,0xf4,0x44,0x54,0x54,0x54,0xf4,0x54,0x4a,0x8a,0x10,
++0x21,0x20,0x3f,0x48,0x91,0x7c,0x57,0x55,0x7c,0x57,0x54,0x7d,0x1,0x1d,0xe1,0x41,0x4,0x88,0xfe,0x20,0xfc,0x20,0xfe,0x24,0xa8,0xfe,0x4,0xfe,0x4,0x4,0xfc,0x4,
++0x21,0x20,0x3f,0x48,0x91,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7c,0x3,0x1c,0xe0,0x40,0x4,0x88,0xfe,0x50,0xfc,0x54,0x54,0x8c,0x74,0x4,0xfc,0x8,0xfe,0x88,0x48,0x18,
++0x20,0x21,0x3d,0x49,0x91,0x7d,0x54,0x57,0x7c,0x55,0x55,0x7d,0x0,0x1c,0xe3,0x40,0x50,0xfc,0x54,0xfc,0x54,0xfc,0x0,0xfe,0x0,0xfc,0x4,0xfc,0x88,0x50,0xfe,0x0,
++0x28,0x28,0xfc,0x28,0x38,0x10,0x7c,0x54,0x54,0x7c,0x10,0xfe,0x10,0x10,0x13,0x10,0x4,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,0x84,0x84,0x84,0xfc,0x0,0x4,0xfe,0x0,
++0x28,0x28,0xfe,0x29,0x39,0x11,0x7d,0x55,0x55,0x7f,0x10,0xfe,0x10,0x10,0x11,0x12,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0xfe,0x20,0x50,0x50,0x88,0x6,0x4,
++0x28,0x28,0xfe,0x29,0x39,0x10,0x7f,0x55,0x55,0x7d,0x11,0xfd,0x11,0x12,0x14,0x10,0x10,0x10,0x10,0x10,0x7c,0x10,0x10,0x10,0x28,0x28,0x24,0x44,0x0,0x86,0x7c,0x0,
++0x28,0x29,0xfe,0x28,0x3b,0x10,0x7c,0x55,0x56,0x7c,0x10,0xfe,0x10,0x10,0x11,0x12,0x1c,0xe0,0x20,0x24,0xfe,0x50,0x88,0x6,0x88,0x88,0x88,0x88,0x88,0x88,0x8,0x8,
++0x28,0x28,0xfe,0x28,0x39,0x13,0x7d,0x55,0x55,0x7d,0x10,0xfe,0x10,0x10,0x11,0x12,0x40,0x40,0x78,0x90,0x24,0xfe,0x24,0x24,0x24,0xfc,0x50,0x50,0x90,0x92,0x12,0xe,
++0x28,0x28,0xff,0x28,0x38,0x13,0x7c,0x54,0x55,0x7f,0x11,0xff,0x11,0x11,0x11,0x11,0x90,0x90,0xfc,0x90,0x44,0xfe,0x80,0xfc,0x8,0x10,0xfe,0x10,0x10,0x10,0x50,0x20,
++0x28,0x28,0xfe,0x29,0x3a,0x13,0x7c,0x55,0x54,0x7d,0x10,0xff,0x11,0x11,0x11,0x10,0x80,0x84,0xfe,0x4,0x44,0xfc,0x4,0xf4,0x4,0xf4,0x4,0xf4,0x14,0x14,0xf4,0x8,
++0x28,0x29,0xfe,0x28,0x3b,0x10,0x7c,0x55,0x56,0x7c,0x13,0xfc,0x10,0x11,0x12,0x10,0x0,0xfc,0x48,0x20,0xfe,0xa2,0xa4,0x20,0x60,0x24,0xfe,0x70,0xa8,0x26,0x24,0x20,
++0x28,0x28,0xff,0x28,0x39,0x10,0x7f,0x54,0x55,0x7d,0x11,0xfd,0x13,0x11,0x11,0x11,0x88,0x88,0xfe,0x88,0xfc,0x88,0xfe,0x20,0xfc,0x24,0xfc,0x24,0xfe,0x4,0x14,0x8,
++0x28,0x28,0xfd,0x28,0x3b,0x10,0x7d,0x57,0x55,0x7d,0x11,0xff,0x11,0x11,0x11,0x11,0x88,0x88,0xfc,0x88,0xfe,0x88,0x4,0xfe,0x24,0xfc,0x24,0xfc,0x24,0x24,0x34,0x28,
++0x2,0x3f,0x22,0x3a,0x2a,0x7f,0x41,0xbe,0x22,0x3e,0x22,0x3e,0x22,0x22,0x2a,0x25,0x20,0x20,0x50,0x50,0x88,0x6,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x88,0x8,
++0x2,0x3f,0x22,0x3a,0x2a,0x7f,0x41,0xbe,0x22,0x3e,0x22,0x3e,0x22,0x22,0x2a,0x25,0x8,0x7c,0x48,0x48,0x48,0x86,0x0,0xfc,0x44,0x48,0x28,0x10,0x30,0x48,0x8e,0x4,
++0x2,0x3f,0x22,0x3a,0x2a,0x7f,0x41,0xbe,0x22,0x3e,0x22,0x3e,0x22,0x22,0x2a,0x24,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x24,0xfe,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x4,0x7e,0x44,0x74,0x54,0xfe,0x82,0x7c,0x44,0x7c,0x44,0x7c,0x45,0x44,0x54,0x48,0x20,0x48,0xfc,0x88,0xa8,0x88,0xa8,0x90,0x84,0xfe,0x4,0x24,0xf4,0x4,0x28,0x10,
++0x4,0x7e,0x45,0x75,0x55,0xff,0x83,0x7d,0x45,0x7d,0x45,0x7d,0x45,0x45,0x55,0x49,0x8,0x1c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x10,0x10,0x28,0x4a,0xa6,0x12,
++0x4,0x7e,0x45,0x75,0x55,0xff,0x83,0x7d,0x45,0x7d,0x45,0x7d,0x45,0x45,0x56,0x48,0x8,0x1c,0xe0,0x0,0x4,0xfe,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0x44,0x7c,0x44,
++0x4,0x7e,0x44,0x74,0x54,0xff,0x82,0x7c,0x44,0x7f,0x44,0x7c,0x44,0x44,0x54,0x48,0x40,0x40,0x7c,0x84,0x88,0x50,0x20,0x50,0x8e,0x4,0xf8,0x88,0x88,0x88,0xf8,0x88,
++0x0,0x7d,0x45,0x75,0x55,0xff,0x83,0x7d,0x44,0x7f,0x44,0x7c,0x44,0x45,0x56,0x48,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x60,0x70,0xa8,0x26,0x24,0x20,
++0x0,0x7c,0x45,0x75,0x55,0xff,0x83,0x7d,0x45,0x7c,0x45,0x7f,0x44,0x44,0x54,0x48,0x40,0x84,0xfe,0x24,0x24,0xfc,0x24,0x44,0xfc,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x7d,0x44,0x74,0x55,0xfe,0x82,0x7d,0x44,0x7f,0x44,0x7c,0x44,0x44,0x54,0x49,0x20,0x24,0xa8,0x20,0xfe,0x20,0xa8,0x24,0x40,0xfe,0x48,0x88,0x70,0x50,0x8c,0x4,
++0x4,0x7e,0x45,0x75,0x54,0xfe,0x83,0x7c,0x44,0x7d,0x44,0x7c,0x44,0x44,0x54,0x48,0x40,0x20,0xfe,0x42,0x7c,0x88,0x50,0x20,0x50,0x8e,0xf8,0x88,0x88,0x88,0xf8,0x88,
++0x4,0x7e,0x45,0x75,0x54,0xff,0x82,0x7c,0x44,0x7c,0x44,0x7c,0x44,0x44,0x54,0x49,0x20,0x10,0xfe,0x2,0x48,0xfe,0x48,0xfc,0x94,0x94,0xa4,0xa4,0x50,0x52,0x92,0xe,
++0x4,0x7e,0x45,0x75,0x54,0xfe,0x82,0x7c,0x44,0x7c,0x44,0x7f,0x44,0x44,0x55,0x4a,0x40,0x20,0xfe,0x2,0x1c,0xe0,0x84,0xfe,0x88,0x88,0x88,0xfe,0x0,0x88,0x6,0x2,
++0x0,0x7d,0x45,0x75,0x55,0xfe,0x82,0x7d,0x47,0x7d,0x45,0x7d,0x44,0x47,0x54,0x48,0x4,0xfe,0x54,0x54,0xfc,0x84,0xfe,0x44,0xf4,0x54,0x54,0xf4,0x4c,0xfc,0x14,0x8,
++0x10,0x24,0x7e,0x55,0x54,0x7c,0x55,0x54,0x7c,0x10,0x19,0x28,0x2a,0x48,0x87,0x0,0x20,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x70,0xac,0x24,0x20,0x22,0x2,0xfe,0x0,
++0x10,0x24,0x7e,0x55,0x54,0x7c,0x54,0x54,0x7d,0x12,0x18,0x28,0x2a,0x48,0x87,0x0,0x50,0x48,0x40,0xfe,0x40,0x40,0xfc,0x84,0x28,0x10,0x2c,0xc4,0x2,0x2,0xfe,0x0,
++0x3f,0x20,0x20,0x3f,0x21,0x26,0x39,0x27,0x24,0x27,0x24,0x27,0x41,0x42,0x84,0x18,0xfc,0xa0,0x94,0xfe,0x40,0x30,0xe,0xf8,0x88,0xf8,0x88,0xf8,0x40,0x52,0x42,0x3e,
++0x10,0x25,0x7e,0x54,0x55,0x7d,0x55,0x55,0x7d,0x11,0x19,0x2d,0x29,0x48,0x87,0x0,0x8,0xfc,0x50,0x54,0xfe,0x54,0x54,0x54,0x54,0xac,0x4,0x4,0xc,0x2,0xfe,0x0,
++0x10,0x25,0x7e,0x54,0x54,0x7c,0x54,0x54,0x7c,0x10,0x18,0x2a,0x28,0x48,0x87,0x0,0x20,0x24,0xa8,0x20,0xf8,0x88,0xf8,0x88,0xf8,0x88,0x88,0xa8,0x92,0x2,0xfe,0x0,
++0x10,0x25,0x7f,0x55,0x55,0x7d,0x55,0x55,0x7d,0x11,0x19,0x2d,0x29,0x48,0x87,0x0,0x4,0xfe,0x4,0x54,0xfc,0x24,0xfc,0x44,0x44,0x74,0x4,0x14,0xa,0x2,0xfe,0x0,
++0x10,0x24,0x7f,0x54,0x55,0x7d,0x55,0x54,0x7d,0x11,0x19,0x2d,0x29,0x48,0x87,0x0,0x40,0x24,0xfe,0x50,0x24,0x54,0xfc,0x20,0xfc,0x44,0x54,0x74,0xc,0x2,0xfe,0x0,
++0x20,0x20,0x20,0x48,0x49,0xf2,0x27,0x4a,0xfb,0xa,0x13,0x12,0x22,0x42,0x83,0x2,0x40,0x40,0xa0,0xa0,0x90,0x48,0xff,0x8,0xf8,0x8,0xf8,0x88,0x50,0x20,0x1e,0x4,
++0x3f,0x20,0x3f,0x21,0x26,0x38,0x21,0x26,0x2f,0x34,0x27,0x24,0x47,0x44,0x85,0x6,0xfc,0x90,0xfc,0x40,0x30,0x8e,0x44,0xb0,0xf8,0x16,0xf0,0x10,0xf4,0x48,0x30,0xc,
++0x7f,0x10,0x1e,0x23,0x54,0x9,0x32,0x4,0x1f,0x28,0xcf,0x8,0xf,0x8,0xa,0xc,0x20,0x50,0x98,0x26,0x48,0x10,0xa4,0x48,0xf0,0x2e,0xe4,0x20,0xf0,0xa0,0x60,0x18,
++0x7c,0x44,0x7d,0x1,0xff,0x21,0x7d,0x5,0x1a,0x5,0xf,0x39,0xcf,0xa,0x9,0xc,0x38,0x20,0xfc,0x24,0xf8,0x24,0x7c,0x50,0x9c,0x40,0xf0,0x2e,0xe4,0x20,0xc0,0x30,
++0x1,0x7f,0x8,0x12,0x7d,0xa,0x7c,0x9,0x32,0x45,0xf,0x39,0xcf,0xa,0x9,0xc,0x4,0xfe,0x90,0xfc,0x90,0xfc,0x90,0x9e,0x80,0x40,0xf0,0x2e,0xe4,0x20,0xc0,0x30,
++0x2,0x3f,0x20,0x24,0x3e,0x20,0x24,0x3e,0x20,0x22,0xff,0x10,0x10,0x20,0x7f,0x1,0x4,0x4,0x8,0x8,0x10,0x24,0x44,0x88,0x10,0x22,0x42,0x4,0x8,0x10,0x20,0x40,
++0x1,0x3f,0x20,0x3f,0x20,0x3f,0x20,0xff,0x12,0x3f,0x0,0xff,0x4,0x4,0x18,0x60,0x4,0x88,0x10,0x24,0x48,0x10,0x24,0x88,0x10,0x60,0x4,0xfe,0x40,0x42,0x42,0x3e,
++0x12,0x14,0x18,0x12,0xff,0x10,0x22,0x7f,0x0,0x1f,0x1,0xf,0x1,0x7f,0x1,0x0,0x8,0x10,0x64,0x8,0x72,0x4,0x18,0x60,0x18,0xe0,0x0,0xf0,0x0,0xfa,0x2,0xfe,
++0x12,0x14,0x18,0x12,0xff,0x10,0x22,0x7f,0x1,0x1f,0x11,0x1f,0x11,0xff,0x10,0x10,0x8,0x10,0x64,0x8,0x72,0x4,0x18,0x60,0x10,0xf8,0x10,0xf0,0x14,0xfe,0x10,0x30,
++0x12,0x14,0x18,0xfe,0x24,0x7e,0x0,0x3f,0x4,0x18,0x60,0x1f,0x10,0x10,0x1f,0x10,0x18,0xe0,0x18,0xe4,0x8,0xf0,0x0,0xf8,0x8,0x48,0x30,0xf0,0x10,0x10,0xf0,0x10,
++0x12,0x14,0x18,0xfe,0x24,0x7e,0x1,0xff,0x1,0x1,0x3f,0x0,0x1f,0x10,0x10,0x1f,0x18,0xe0,0x18,0xe4,0x8,0xf0,0x4,0xfe,0x0,0x10,0xf8,0x0,0xf0,0x10,0x10,0xf0,
++0x12,0x14,0x18,0x12,0xff,0x10,0x22,0x7f,0x4,0x24,0x27,0x24,0x24,0x2f,0xf0,0x40,0x8,0x10,0x64,0x8,0x72,0x4,0x18,0x60,0x40,0x44,0x48,0x70,0x40,0x42,0x3e,0x0,
++0x12,0x14,0x18,0x12,0xff,0x10,0x22,0x7f,0x4,0x8,0x17,0x30,0xd1,0x12,0x14,0x10,0x8,0x10,0x64,0x8,0x72,0x4,0x18,0x60,0x40,0x44,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x12,0x14,0x18,0xfe,0x24,0x7e,0x11,0x9,0x3f,0x2,0x7f,0x8,0x3f,0xc8,0x8,0x7,0x8,0xf0,0x8,0xf0,0x4,0xf8,0x10,0x20,0xf8,0x0,0xfc,0x20,0xd8,0x46,0xd0,0xf0,
++0x12,0x14,0x18,0xfe,0x24,0x7e,0x0,0x6,0x78,0x8,0xff,0x18,0x2c,0xca,0x8,0x9,0x18,0xe0,0x18,0xe4,0x8,0xf0,0x20,0x24,0xac,0xb0,0x20,0x50,0x50,0x88,0x86,0x4,
++0x12,0x14,0x18,0xfe,0x24,0x7e,0x1,0x7f,0x40,0x8f,0x8,0xf,0x8,0xff,0x8,0x30,0x18,0xe0,0x18,0xe4,0x8,0xf0,0x0,0xfe,0x62,0x84,0x20,0xf0,0x44,0xfe,0x20,0x18,
++0x12,0x14,0x18,0xfe,0x24,0x7e,0x0,0x1f,0x12,0xff,0x8,0xf,0x5,0x18,0x6c,0x8,0x18,0xe0,0x18,0xe4,0x8,0xf0,0x0,0xf0,0x94,0xfe,0x20,0xf0,0x20,0xc0,0x3c,0x8,
++0x12,0x14,0x18,0xfe,0x24,0x7e,0x9,0x1f,0x14,0x13,0x14,0x1f,0x22,0x3b,0x22,0x3b,0x18,0xe0,0x18,0xe4,0x8,0xf0,0x20,0xf0,0x50,0x90,0x50,0xf0,0x20,0xa2,0x22,0x9e,
++0x1,0x0,0x3f,0x22,0x3f,0x22,0x27,0x2a,0x32,0x21,0x22,0x24,0x49,0x42,0x87,0x0,0x0,0x84,0xfe,0x10,0xfc,0x10,0x38,0xd6,0x10,0x0,0x40,0x80,0x10,0x8,0xfc,0x4,
++0x1,0x0,0x3f,0x22,0x3f,0x26,0x2b,0x32,0x3f,0x20,0x2f,0x20,0x5f,0x40,0x80,0x0,0x0,0x84,0xfe,0x10,0xfc,0x38,0x56,0x90,0xf0,0x80,0xf8,0x80,0xf8,0x82,0x82,0xfe,
++0x1,0x0,0x3f,0x22,0x3f,0x22,0x27,0x2a,0x32,0x27,0x21,0x22,0x4f,0x42,0x84,0x9,0x0,0x84,0xfe,0x10,0xfc,0x10,0x38,0x56,0x90,0x20,0xc0,0x10,0xf8,0xa0,0x98,0x88,
++0x1,0x3f,0x24,0x3f,0x24,0x3f,0x28,0x2f,0x28,0x2f,0x20,0x27,0x44,0x44,0x84,0x18,0x0,0xfc,0x40,0xf8,0x48,0xf8,0x40,0x78,0x44,0x3c,0x20,0xf8,0x20,0x22,0x22,0x1e,
++0x1,0x3f,0x24,0x3f,0x24,0x3f,0x2a,0x2c,0x2f,0x20,0x27,0x20,0x5f,0x42,0x9c,0x0,0x0,0xfe,0x40,0xf8,0x48,0xf8,0x50,0x64,0x7c,0x30,0xc0,0x88,0xfc,0xa0,0x9c,0x80,
++0x1,0x3f,0x24,0x3f,0x24,0x3f,0x28,0x2f,0x28,0x2f,0x20,0x3f,0x40,0x4f,0x80,0x3f,0x0,0xfc,0x40,0xf8,0x48,0xf8,0x40,0x78,0x44,0x3c,0x88,0xfc,0x80,0xf8,0x80,0xfe,
++0x1,0x3f,0x24,0x3f,0x24,0x3f,0x28,0x2f,0x28,0x2f,0x24,0x22,0x5f,0x42,0x9c,0x0,0x0,0xfc,0x40,0xf8,0x48,0xf8,0x40,0x78,0x44,0x3c,0x90,0xa0,0xfc,0xa0,0x9c,0x80,
++0x10,0xa,0x7f,0x54,0x54,0x7f,0x55,0x55,0x7f,0x44,0x55,0x5e,0x54,0x5f,0x94,0x1,0x48,0x48,0xfc,0x48,0x48,0x78,0x48,0x48,0x78,0x48,0x48,0xfe,0x0,0x48,0x86,0x2,
++0x1,0x3f,0x24,0x3f,0x24,0x3f,0x2a,0x2c,0x2e,0x21,0x27,0x38,0x4f,0x44,0x82,0x1f,0x0,0xfc,0x40,0xf8,0x48,0xf8,0x50,0x64,0xbc,0x40,0xf0,0x8e,0xf8,0x90,0xa0,0xfc,
++0x1,0x3f,0x24,0x3f,0x24,0x3f,0x2a,0x2c,0x2f,0x24,0x2f,0x3c,0x4a,0x4f,0x84,0x39,0x0,0xfc,0x40,0xf8,0x48,0xf8,0x50,0x64,0x3c,0x8,0x88,0xfe,0x88,0xa8,0x88,0x98,
++0x10,0xa,0x7f,0x54,0x54,0x7f,0x55,0x55,0x7f,0x44,0x55,0x5e,0x54,0x5f,0x94,0x1,0x10,0x54,0x10,0xfe,0x10,0x54,0x10,0x48,0x48,0xfe,0x28,0xa8,0x5e,0x48,0x88,0x8,
++0x8,0x10,0x30,0x5f,0x90,0x10,0x1f,0x19,0x15,0x1f,0x1,0x3f,0x1,0xff,0x24,0x42,0xa0,0x90,0xfc,0x40,0x32,0xe,0xf0,0x30,0x50,0xf0,0x0,0xf8,0x0,0xfe,0x88,0x44,
++0x4,0x7e,0x55,0x55,0x7d,0x55,0x55,0x7c,0x10,0x7d,0x11,0xff,0x1,0xab,0xab,0x0,0x20,0x20,0x24,0x24,0x24,0x24,0xfc,0x20,0x20,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x4,0x7e,0x54,0x54,0x7d,0x55,0x57,0x7c,0x10,0x7c,0x11,0xff,0x1,0xaa,0xaa,0x0,0x10,0x90,0x90,0x94,0x3e,0x54,0xd4,0x94,0x94,0x94,0x14,0x54,0xd4,0x24,0x24,0x4c,
++0x4,0x7e,0x54,0x57,0x7c,0x54,0x55,0x7c,0x10,0x7c,0x10,0xfe,0x0,0xaa,0xaa,0x0,0x20,0x20,0x24,0xfe,0x20,0x28,0xfc,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0xf8,0x88,
++0x4,0x7e,0x54,0x54,0x7d,0x54,0x54,0x7d,0x10,0x7c,0x10,0xff,0x0,0xaa,0xaa,0x1,0x20,0x20,0x7c,0x84,0x48,0x30,0x60,0x90,0x3e,0x42,0xc4,0x28,0x10,0x20,0x40,0x80,
++0x4,0x7e,0x54,0x54,0x7d,0x54,0x55,0x7e,0x10,0x7c,0x11,0xfe,0x0,0xaa,0xaa,0x1,0x20,0x20,0x40,0x88,0xfc,0x88,0x6,0x82,0xf8,0x88,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x4,0x7e,0x55,0x54,0x7c,0x57,0x54,0x7c,0x11,0x7c,0x13,0xfc,0x0,0xaa,0xaa,0x1,0x20,0x28,0xfc,0x20,0x20,0xfe,0x92,0x54,0x10,0x94,0xfe,0x20,0x20,0x58,0x86,0x2,
++0x3e,0x8,0xfe,0x1c,0x2a,0x48,0x1f,0x19,0x15,0x1f,0x1,0x3f,0x1,0xff,0x24,0x44,0x44,0x7e,0xa4,0x24,0x54,0x88,0xf0,0x30,0x50,0xf0,0x0,0xf8,0x0,0xfe,0x48,0x44,
++0x4,0x7e,0x54,0x57,0x7c,0x54,0x54,0x7c,0x10,0x7c,0x10,0xfe,0x1,0xaa,0xaa,0x0,0x40,0x20,0x4,0xfe,0x0,0xf8,0x88,0x88,0x88,0xf8,0x20,0xa8,0x26,0x22,0xa0,0x40,
++0x4,0x7e,0x54,0x55,0x7c,0x54,0x57,0x7c,0x10,0x7d,0x10,0xfe,0x0,0xaa,0xaa,0x1,0x20,0x40,0x88,0xfc,0x20,0x24,0xfe,0x50,0x98,0x26,0xc8,0x30,0xc4,0x18,0x60,0x80,
++0x4,0x7e,0x55,0x54,0x7c,0x54,0x57,0x7c,0x10,0x7c,0x10,0xfe,0x0,0xaa,0xaa,0x0,0x40,0x28,0xfc,0x0,0x88,0x50,0xfe,0x8,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,
++0x12,0x6f,0x42,0x6e,0x42,0x7e,0x1,0x54,0x7c,0x54,0x7c,0x54,0x54,0x7d,0x52,0x1,0x10,0x50,0x50,0x50,0x88,0x88,0x6,0xf8,0x48,0x48,0x48,0x48,0x48,0x88,0xa8,0x10,
++0x12,0x6f,0x42,0x6e,0x42,0x7e,0x0,0x54,0x7c,0x54,0x7c,0x54,0x54,0x7d,0x52,0x0,0x10,0x10,0x10,0x10,0xfe,0x92,0x92,0x92,0x92,0xfe,0x92,0x92,0x92,0x92,0xfe,0x82,
++0x12,0x6f,0x42,0x6e,0x42,0x7e,0x0,0x55,0x7c,0x54,0x7c,0x54,0x54,0x7d,0x52,0x0,0x8,0xfc,0x40,0x48,0xfc,0x48,0x48,0xfe,0x0,0xfc,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x12,0x6f,0x42,0x6e,0x42,0x7e,0x0,0x55,0x7d,0x56,0x7f,0x54,0x54,0x7e,0x52,0x1,0x4,0xfe,0x84,0xfc,0x84,0xfc,0x20,0xfe,0x22,0x24,0xfe,0x48,0x88,0x70,0x58,0x84,
++0x12,0x6f,0x42,0x6e,0x42,0x7e,0x1,0x54,0x7c,0x55,0x7c,0x57,0x54,0x7d,0x52,0x1,0x1c,0xe0,0xa4,0xa8,0x50,0x84,0xf8,0x20,0x48,0xfc,0x20,0xfe,0x20,0x50,0x4e,0x84,
++0x10,0x3e,0x32,0x2a,0x3e,0x0,0x7f,0x49,0x7f,0x49,0x7f,0x0,0xff,0x22,0x22,0x43,0x40,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x4a,0x8a,0x86,0x0,
++0x10,0x3e,0x32,0x2a,0x3e,0x0,0x7f,0x49,0x7f,0x49,0x7f,0x0,0xff,0x22,0x22,0x42,0x0,0x8,0xfc,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x3e,0x32,0x2a,0x3e,0x0,0x7f,0x49,0x7f,0x49,0x7f,0x0,0xff,0x22,0x22,0x42,0x10,0x14,0xfe,0x10,0x38,0x56,0x90,0x7c,0x44,0x7c,0x44,0x7c,0x44,0x0,0xfe,0x0};
+diff -Nur linux_c860_org/drivers/video/font_jis16.h linux/drivers/video/font_jis16.h
+--- linux_c860_org/drivers/video/font_jis16.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/video/font_jis16.h 2004-06-10 21:09:11.000000000 +0900
+@@ -0,0 +1,30231 @@
++#define max_jis16 241824
++unsigned char font_jis16[max_jis16] = {
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x40, 0x30, 0x18, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x30, 0x48, 0x48, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x60, 0x60, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07,
++ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x04, 0x08, 0x0c, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x80, 0xc0, 0x60, 0x60, 0x60, 0xc0, 0x80,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
++ 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01,
++ 0x01, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00,
++ 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
++ 0x10, 0x48, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x30, 0x48, 0x48, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40,
++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x90, 0x40, 0x00, 0x80, 0x40,
++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x90, 0x40, 0x00, 0x80, 0xc0,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x08,
++ 0x08, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x80,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x08, 0x10, 0x60, 0x0f,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x0c, 0xe0,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x04,
++ 0x04, 0x08, 0x12, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x20,
++ 0x20, 0x40, 0x80, 0x80, 0x40, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09,
++ 0x12, 0x14, 0x18, 0x10, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x10, 0x20, 0x40, 0x80, 0x00,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x18, 0x20, 0x20, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x20, 0x20, 0x18, 0x07, 0x00, 0x00,
++ 0x00, 0xc0, 0x30, 0x08, 0x08, 0x04, 0x04, 0x04,
++ 0x04, 0x04, 0x08, 0x08, 0x30, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x3f,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02,
++ 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00,
++ 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x22, 0x41,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10,
++ 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
++ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x18, 0x20, 0x30, 0x38, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x20, 0x70, 0x30, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x98, 0x20, 0x30, 0xb8, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x22, 0x77, 0x33, 0x11, 0x66, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x10, 0x20, 0x60, 0x40, 0xc0, 0xc0, 0xc0,
++ 0xc0, 0x40, 0x60, 0x20, 0x10, 0x08, 0x00, 0x00,
++ 0x40, 0x20, 0x10, 0x18, 0x08, 0x0c, 0x0c, 0x0c,
++ 0x0c, 0x08, 0x18, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x20, 0x10, 0x08, 0x00, 0x00,
++ 0x40, 0x20, 0x10, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xf8, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
++ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0x00, 0x00,
++ 0x7c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x18, 0x20, 0x60, 0x60, 0x60, 0x40, 0x80, 0x40,
++ 0x60, 0x60, 0x60, 0x60, 0x20, 0x18, 0x00, 0x00,
++ 0x60, 0x10, 0x18, 0x18, 0x18, 0x08, 0x06, 0x08,
++ 0x18, 0x18, 0x18, 0x18, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02,
++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x00, 0x00,
++ 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01,
++ 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02,
++ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0x90, 0x20, 0x20, 0x40, 0x40,
++ 0x20, 0x20, 0x90, 0x90, 0x48, 0x48, 0x00, 0x00,
++ 0x48, 0x48, 0x24, 0x24, 0x12, 0x12, 0x09, 0x09,
++ 0x12, 0x12, 0x24, 0x24, 0x48, 0x48, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
++ 0x02, 0x02, 0x02, 0x02, 0x02, 0x7e, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
++ 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00,
++ 0xf8, 0x08, 0xf8, 0x80, 0x80, 0x80, 0x80, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x07, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
++ 0x05, 0x05, 0x05, 0x7d, 0x41, 0x7f, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xf8, 0xf0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0,
++ 0xc0, 0xc0, 0xe0, 0xe0, 0xf0, 0xf8, 0x00, 0x00,
++ 0x7c, 0x3c, 0x1c, 0x1c, 0x0c, 0x0c, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x1c, 0x1c, 0x3c, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x3f, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x01, 0x01, 0x3f, 0x01, 0x01,
++ 0x01, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x02,
++ 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x80,
++ 0x40, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x3f, 0x00,
++ 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xf8, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00,
++ 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x01, 0x01, 0x01,
++ 0x3f, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x80, 0x80, 0xf8, 0x00, 0x00, 0x00,
++ 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x03, 0x04, 0x18, 0x20, 0x18,
++ 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x60, 0x10, 0x00, 0x00, 0x00,
++ 0x20, 0x18, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x04, 0x18, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x10, 0x60,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x0c, 0x30, 0x0c, 0x03, 0x00,
++ 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
++ 0x30, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x03, 0x0c,
++ 0x30, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x30, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1c, 0x36, 0x23, 0x23,
++ 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0x88, 0x88,
++ 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x22,
++ 0x41, 0x41, 0x41, 0x22, 0x1c, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x18, 0x28, 0x48, 0x88, 0x08, 0x08,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x04, 0x08, 0x08, 0x08, 0x04, 0x03,
++ 0x01, 0x01, 0x1f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x20, 0x20, 0x20, 0x40, 0x80,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x18, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x18, 0x18, 0x30, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1b, 0x1b, 0x36, 0x24, 0x48, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x30, 0x48, 0x49, 0x33, 0x06, 0x06, 0x06,
++ 0x06, 0x06, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xe8, 0x18, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x10, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x30, 0x18, 0x0c, 0x3f, 0x06, 0x03,
++ 0x3f, 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x10, 0x20, 0x40, 0xf0, 0x80, 0x00,
++ 0xf0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x07, 0x09, 0x11, 0x19, 0x0f, 0x03,
++ 0x01, 0x19, 0x19, 0x09, 0x07, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x20, 0x30, 0x30, 0x00, 0xc0,
++ 0x60, 0x30, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x03, 0x05, 0x09, 0x19, 0x19,
++ 0x1a, 0x0a, 0x06, 0x07, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x80, 0x80, 0x80, 0x40, 0x60, 0x60, 0x00,
++ 0x00, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x02, 0x02, 0x06, 0x06, 0x3f,
++ 0x06, 0x36, 0x4c, 0x4f, 0x39, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x20, 0x30, 0x20, 0x00, 0x00, 0xe0,
++ 0x00, 0x00, 0x08, 0xf0, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x18, 0x24, 0x66, 0x66, 0x24, 0x19, 0x02,
++ 0x04, 0x09, 0x11, 0x20, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x60,
++ 0x90, 0x98, 0x98, 0x90, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x02, 0x02, 0x02, 0x1f, 0x04, 0x04, 0x04,
++ 0x04, 0x3f, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x20, 0x20, 0x20, 0xf8, 0x40, 0x40, 0x40,
++ 0x40, 0xf0, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x07, 0x08, 0x18, 0x19, 0x0e, 0x0c, 0x16,
++ 0x33, 0x31, 0x30, 0x19, 0x0e, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x78, 0x30,
++ 0x20, 0xc0, 0xc0, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x03, 0x19, 0x1d, 0x03, 0x03,
++ 0x1d, 0x19, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x30, 0x70, 0x80, 0x80,
++ 0x70, 0x30, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x10, 0x23, 0x24, 0x44, 0x48,
++ 0x49, 0x27, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x10, 0xc8, 0xc8, 0xc8, 0x88,
++ 0x90, 0x60, 0x08, 0x30, 0xc0, 0x00, 0x00, 0x00,
++ 0x03, 0x04, 0x04, 0x06, 0x03, 0x03, 0x04, 0x06,
++ 0x03, 0x01, 0x00, 0x04, 0x04, 0x03, 0x00, 0x00,
++ 0x80, 0x40, 0x40, 0x00, 0x00, 0x80, 0xc0, 0x40,
++ 0x80, 0x80, 0xc0, 0x40, 0x40, 0x80, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x02, 0x02, 0x7c, 0x30, 0x0c,
++ 0x04, 0x09, 0x0a, 0x1c, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0x7c, 0x18, 0x60,
++ 0x40, 0x20, 0xa0, 0x70, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x03, 0x03, 0x7f, 0x3f, 0x0f,
++ 0x07, 0x0f, 0x0e, 0x1c, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0xfc, 0xf8, 0xe0,
++ 0xc0, 0xe0, 0xe0, 0x70, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x0c, 0x10, 0x10, 0x20, 0x20,
++ 0x20, 0x10, 0x10, 0x0c, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x60, 0x10, 0x10, 0x08, 0x08,
++ 0x08, 0x10, 0x10, 0x60, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x0f, 0x1f, 0x1f, 0x3f, 0x3f,
++ 0x3f, 0x1f, 0x1f, 0x0f, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8,
++ 0xf8, 0xf0, 0xf0, 0xe0, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x0c, 0x13, 0x14, 0x28, 0x28,
++ 0x28, 0x14, 0x13, 0x0c, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x60, 0x90, 0x50, 0x28, 0x28,
++ 0x28, 0x50, 0x90, 0x60, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40,
++ 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04,
++ 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f,
++ 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc,
++ 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
++ 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8,
++ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x08,
++ 0x08, 0x10, 0x10, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x20,
++ 0x20, 0x10, 0x10, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x0f,
++ 0x0f, 0x1f, 0x1f, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xe0,
++ 0xe0, 0xf0, 0xf0, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x10, 0x10, 0x08, 0x08, 0x04, 0x04,
++ 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x1f, 0x1f, 0x0f, 0x0f, 0x07, 0x07,
++ 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0, 0xc0,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x21, 0x13, 0x09, 0x04, 0x12, 0x39,
++ 0x12, 0x04, 0x09, 0x13, 0x21, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x90, 0x20, 0x40, 0x90, 0x38,
++ 0x90, 0x40, 0x20, 0x90, 0x08, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x3f, 0x00, 0x00, 0x7f, 0x7f, 0x03,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xf8, 0xf8, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x7f, 0x00,
++ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0xf8, 0x60,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x02, 0x04, 0x18, 0x7f, 0x18,
++ 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x03, 0x03, 0x05, 0x09, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x20, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09,
++ 0x05, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
++ 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x00, 0x00,
++ 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00,
++ 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x0c, 0x10, 0x20, 0x3f, 0x20,
++ 0x10, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3f, 0x00,
++ 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x20, 0x10, 0xf0, 0x10,
++ 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x10, 0x20, 0x20, 0x20, 0x10,
++ 0x0f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xf0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x20, 0x10, 0x10, 0x10, 0x20,
++ 0xc0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x0c, 0x10, 0x20, 0x20, 0x20,
++ 0x20, 0x10, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x20, 0x10, 0x10, 0x10,
++ 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x10, 0x10, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x07, 0x08, 0x10, 0x10, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x20, 0x20, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04,
++ 0x08, 0x08, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40,
++ 0x20, 0x20, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x10, 0x08, 0x08, 0x04, 0x04,
++ 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x7f,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x40, 0x20, 0xf0, 0x08, 0xf0,
++ 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x08, 0x10, 0x3f, 0x40, 0x3f,
++ 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x40, 0x20, 0xf0, 0x08, 0xf0,
++ 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x20, 0x10, 0x1f, 0x08, 0x08, 0x04,
++ 0x04, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0x10, 0xf0, 0x20, 0x20, 0x40,
++ 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,
++ 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0x20, 0xe0, 0x20,
++ 0x20, 0x20, 0x20, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02,
++ 0x04, 0x08, 0x10, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x02, 0x00, 0x00, 0x03, 0x06, 0x04,
++ 0x0c, 0x0c, 0x0c, 0x05, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x60, 0x20, 0x20, 0xa0, 0x60, 0x60,
++ 0x60, 0x40, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x1f, 0x18, 0x08, 0x0c, 0x04,
++ 0x06, 0x02, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0xf0, 0x10, 0x20, 0x20, 0x40,
++ 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xf0, 0x00,
++ 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x1c, 0x08, 0x3f, 0x00, 0x00,
++ 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
++ 0xf0, 0x40, 0xe0, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x02, 0x04, 0x08, 0x11, 0x22, 0x11,
++ 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x80, 0x40, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x22, 0x11, 0x08, 0x04, 0x02, 0x01, 0x02,
++ 0x04, 0x08, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x20,
++ 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
++ 0x22, 0x74, 0x1c, 0x0c, 0x04, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x10, 0x21, 0x21,
++ 0x12, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x60, 0x90, 0x08, 0x08,
++ 0x10, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x10, 0x10,
++ 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x30, 0x40, 0x80, 0x80,
++ 0x40, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x38, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x38, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01,
++ 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00,
++ 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
++ 0xc0, 0xc0, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x06, 0x0e, 0x11, 0x11, 0x19, 0x19, 0x0c, 0x0c,
++ 0x06, 0x06, 0x02, 0x02, 0x1d, 0x19, 0x00, 0x00,
++ 0x60, 0xe0, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0,
++ 0x60, 0x60, 0x20, 0x20, 0xc0, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x04, 0x04, 0x03, 0x01, 0x03, 0x03, 0x04,
++ 0x04, 0x08, 0x0f, 0x10, 0x38, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0xc0,
++ 0xc0, 0x60, 0xe0, 0x30, 0x78, 0x00, 0x00, 0x00,
++ 0x00, 0x18, 0x24, 0x66, 0x66, 0x25, 0x1a, 0x03,
++ 0x06, 0x0e, 0x16, 0x12, 0x21, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x10,
++ 0xa8, 0xec, 0xec, 0xa8, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x04, 0x07, 0x1f, 0x1c, 0x04, 0x04,
++ 0x07, 0x1f, 0x1c, 0x04, 0x04, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0xe0, 0xe0, 0x80, 0x80, 0x80, 0xe0,
++ 0xe0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x06,
++ 0x04, 0x04, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60,
++ 0x60, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x07, 0x0f, 0x0f, 0x06, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0xc0, 0x60, 0x20, 0x30, 0x10, 0x10,
++ 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x03, 0x01, 0x09, 0x1f, 0x09, 0x03, 0x03,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x80, 0x00, 0x20, 0xf0, 0x20, 0x80, 0x80,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x03, 0x09, 0x1f, 0x09, 0x03, 0x01, 0x01,
++ 0x03, 0x09, 0x1f, 0x09, 0x03, 0x01, 0x00, 0x00,
++ 0x00, 0x80, 0x20, 0xf0, 0x20, 0x80, 0x00, 0x00,
++ 0x80, 0x20, 0xf0, 0x20, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x07, 0x07, 0x07, 0x03, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x18, 0x20, 0x20, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x20, 0x20, 0x18, 0x07, 0x00, 0x00,
++ 0x00, 0xc0, 0x30, 0x08, 0x08, 0x04, 0x04, 0x04,
++ 0x04, 0x04, 0x08, 0x08, 0x30, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x03, 0x0f, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x08, 0x18, 0x1c, 0x08, 0x00, 0x01,
++ 0x02, 0x04, 0x0f, 0x1f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0xc0, 0x60, 0x60, 0xc0, 0x80, 0x00,
++ 0x00, 0x20, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x08, 0x18, 0x18, 0x00, 0x03, 0x00,
++ 0x18, 0x18, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0xc0, 0x60, 0x60, 0xc0, 0x80, 0x40,
++ 0x60, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x02, 0x02, 0x04, 0x08, 0x18,
++ 0x1f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
++ 0xf0, 0xc0, 0xc0, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x0f, 0x08, 0x08, 0x0f, 0x00, 0x00,
++ 0x00, 0x18, 0x18, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0x00, 0x00, 0x80, 0xc0, 0x60,
++ 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x04, 0x0c, 0x08, 0x1b, 0x1c, 0x18,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x60, 0x60, 0x00, 0xc0, 0x60, 0x30,
++ 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x0f, 0x10, 0x00, 0x00, 0x01, 0x01,
++ 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0xe0, 0x40, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x08, 0x18, 0x1c, 0x0e, 0x07, 0x0d,
++ 0x18, 0x18, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x60, 0x60, 0xc0, 0x80, 0xc0,
++ 0xe0, 0x60, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x18, 0x18, 0x0c, 0x07,
++ 0x00, 0x18, 0x18, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x60, 0x60, 0x60, 0xe0, 0x60,
++ 0x60, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x03, 0x03, 0x04, 0x04, 0x08,
++ 0x0f, 0x10, 0x10, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0x60,
++ 0xe0, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x30, 0x60, 0xc0, 0x30,
++ 0x18, 0x18, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xd0, 0x30, 0x10, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x10, 0x00, 0x40, 0xc0, 0x40,
++ 0x00, 0x08, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x10, 0x00, 0x40, 0xc0, 0x40,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xd0, 0x30, 0x10, 0x00, 0x00, 0xf8, 0x30,
++ 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x30, 0x30, 0x30, 0x30, 0xf0, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
++ 0x38, 0x30, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
++ 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x19, 0x1a, 0x1c,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x20, 0x40, 0x80, 0x80, 0xc0, 0xc0,
++ 0x60, 0x60, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x18, 0x1c, 0x1c, 0x16, 0x16, 0x17,
++ 0x13, 0x12, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x30, 0x70, 0x70, 0xb0, 0xb0, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x18, 0x1c, 0x16, 0x16, 0x13, 0x11,
++ 0x11, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0xa0,
++ 0xa0, 0xe0, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x30, 0x60, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30,
++ 0x33, 0x1c, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0xb0, 0x60, 0xe0, 0x18, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x30, 0x60, 0x80, 0xc0,
++ 0x60, 0x60, 0x30, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x08, 0x18, 0x1c, 0x0f, 0x03, 0x00,
++ 0x10, 0x18, 0x1c, 0x13, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xa0, 0x60, 0x20, 0x00, 0x00, 0xc0, 0xe0,
++ 0x30, 0x30, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x23, 0x43, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06,
++ 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3b, 0x19, 0x19, 0x19, 0x0d, 0x0e, 0x0e,
++ 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xb8, 0x90, 0x90, 0x90, 0xd0, 0xe0, 0xe0,
++ 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x0c, 0x06, 0x03, 0x03, 0x03,
++ 0x04, 0x08, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x20, 0x40, 0x80, 0x00, 0x00, 0x80,
++ 0xc0, 0x60, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x0c, 0x06, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x20, 0x01, 0x01, 0x03, 0x06,
++ 0x06, 0x0c, 0x18, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x60, 0xc0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x08, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x0c, 0x03,
++ 0x0c, 0x18, 0x18, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x60, 0xe0,
++ 0x60, 0x60, 0xe0, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1c, 0x0c, 0x0c, 0x0d, 0x0e, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0e, 0x1d, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x30, 0x30,
++ 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x18, 0x18,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x20, 0x00,
++ 0x00, 0x20, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x18, 0x18,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x60, 0x60, 0x60, 0xe0, 0x60, 0x60,
++ 0x60, 0x60, 0xe0, 0x70, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x18, 0x1f,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x30, 0xf0,
++ 0x00, 0x10, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x02, 0x06, 0x06, 0x1f, 0x06, 0x06,
++ 0x06, 0x06, 0x06, 0x1f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x60, 0x60, 0x00, 0xe0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x08, 0x08,
++ 0x07, 0x0c, 0x0f, 0x18, 0x08, 0x07, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0xc0, 0xc0, 0x80,
++ 0x00, 0x00, 0xc0, 0xe0, 0x20, 0xc0, 0x00, 0x00,
++ 0x00, 0x1c, 0x0c, 0x0c, 0x0d, 0x0e, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x03, 0x01, 0x00, 0x0f, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x03, 0x01, 0x00, 0x0f, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x19, 0x19, 0x0e, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0d, 0x0e,
++ 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x70, 0x40, 0x80, 0xc0, 0xc0,
++ 0x60, 0x60, 0x30, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x76, 0x3b, 0x33, 0x33,
++ 0x33, 0x33, 0x33, 0x7b, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0xb8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1d, 0x0e, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x18, 0x18,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x30, 0x30,
++ 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1d, 0x0e, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0e, 0x0d, 0x0c, 0x1e, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x30, 0x30,
++ 0x30, 0x30, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x18, 0x18,
++ 0x18, 0x18, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x70, 0xe0, 0x60, 0x60,
++ 0x60, 0x60, 0xe0, 0x60, 0x60, 0xf0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1d, 0x0e, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x60, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x18, 0x1c, 0x0f,
++ 0x03, 0x10, 0x18, 0x17, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x00, 0x00,
++ 0xc0, 0xe0, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x02, 0x06, 0x06, 0x1f, 0x06, 0x06,
++ 0x06, 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x70, 0x98, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3e, 0x18, 0x0c, 0x0c,
++ 0x06, 0x06, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x70, 0x20, 0x40, 0x40,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3d, 0x19, 0x19, 0x0e,
++ 0x0e, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xb8, 0x90, 0x90, 0xd0,
++ 0xe0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c, 0x06, 0x03,
++ 0x03, 0x04, 0x08, 0x1c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x70, 0x20, 0x40, 0x80,
++ 0x80, 0xc0, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x0c, 0x06, 0x06,
++ 0x03, 0x03, 0x01, 0x19, 0x19, 0x0e, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x70, 0x20, 0x20, 0x40,
++ 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x10, 0x01, 0x03,
++ 0x06, 0x0c, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0xc0, 0x80, 0x00,
++ 0x00, 0x00, 0x20, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x04, 0x02, 0x13, 0x0e, 0x04,
++ 0x07, 0x0d, 0x16, 0x26, 0x2a, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80,
++ 0xe0, 0x10, 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00,
++ 0x04, 0x02, 0x02, 0x1f, 0x04, 0x04, 0x07, 0x0d,
++ 0x15, 0x22, 0x26, 0x2a, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x00, 0x80, 0x80, 0xe0, 0x10,
++ 0x08, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,
++ 0x10, 0x10, 0x0a, 0x0c, 0x04, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20,
++ 0x10, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x40, 0x20, 0x20, 0x20, 0x22,
++ 0x24, 0x14, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x08, 0x08,
++ 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x13,
++ 0x0c, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80,
++ 0x40, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x02, 0x01, 0x00, 0x00, 0x03, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
++ 0x00, 0xc0, 0x00, 0x00, 0xc0, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01,
++ 0x0e, 0x01, 0x02, 0x07, 0x09, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc0,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
++ 0x04, 0x03, 0x00, 0x00, 0x11, 0x0e, 0x01, 0x02,
++ 0x04, 0x0e, 0x11, 0x21, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x00, 0x00, 0xc0, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x0c, 0x38,
++ 0x0b, 0x0c, 0x18, 0x28, 0x18, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x40, 0x30, 0x20, 0x00,
++ 0xc0, 0x20, 0x20, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x05, 0x06, 0x1c, 0x04, 0x05,
++ 0x06, 0x0c, 0x34, 0x0c, 0x04, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x30, 0x08, 0x0c, 0x00, 0x60, 0x90,
++ 0x08, 0x08, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x04, 0x47, 0x3c, 0x08, 0x08,
++ 0x08, 0x10, 0x11, 0x25, 0x22, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x60, 0x10, 0x88, 0x98, 0x80,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x04, 0x47, 0x3c, 0x08, 0x08,
++ 0x08, 0x10, 0x11, 0x25, 0x22, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0x10, 0x40, 0x20, 0x90, 0x88, 0x98,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x02, 0x01, 0x01, 0x0f, 0x00, 0x00, 0x1f, 0x00,
++ 0x00, 0x07, 0x08, 0x08, 0x06, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x60, 0x80, 0x80, 0xf0, 0x40, 0x20,
++ 0x20, 0xf0, 0x10, 0x00, 0x00, 0xc0, 0x00, 0x00,
++ 0x04, 0x02, 0x02, 0x1f, 0x01, 0x01, 0x3e, 0x00,
++ 0x00, 0x0f, 0x10, 0x10, 0x0c, 0x03, 0x00, 0x00,
++ 0x08, 0x24, 0xd0, 0x00, 0x00, 0xe0, 0x80, 0x40,
++ 0x40, 0xe0, 0x20, 0x00, 0x00, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0x08,
++ 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x80, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0x08,
++ 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x80, 0x40, 0x40, 0x88, 0x24, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x10, 0x10, 0x23, 0x20, 0x20,
++ 0x20, 0x20, 0x18, 0x10, 0x10, 0x00, 0x00, 0x00,
++ 0x80, 0x40, 0x20, 0x20, 0x3c, 0xe0, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00,
++ 0x01, 0x40, 0x20, 0x20, 0x20, 0x47, 0x40, 0x40,
++ 0x40, 0x40, 0x30, 0x20, 0x20, 0x01, 0x00, 0x00,
++ 0x08, 0xa4, 0x50, 0x40, 0x78, 0xc0, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x07, 0x00, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x20, 0x10, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x10, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x07, 0x00, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x20, 0x10, 0x0f, 0x00, 0x00, 0x00,
++ 0x08, 0x04, 0xf0, 0x88, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x10, 0xe0, 0x00, 0x00, 0x00,
++ 0x04, 0x02, 0x01, 0x21, 0x1e, 0x00, 0x00, 0x07,
++ 0x08, 0x10, 0x10, 0x0c, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x30, 0xc0, 0x80, 0x40, 0x40, 0xe0,
++ 0x20, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
++ 0x04, 0x02, 0x01, 0x21, 0x1e, 0x00, 0x00, 0x07,
++ 0x08, 0x10, 0x10, 0x0c, 0x03, 0x00, 0x00, 0x00,
++ 0x08, 0x04, 0x30, 0xc8, 0x80, 0x40, 0x40, 0xe0,
++ 0x20, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x10, 0x60, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x90, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x10, 0x60, 0x80, 0x00, 0x00, 0x00,
++ 0x01, 0x00, 0x40, 0x3f, 0x00, 0x03, 0x04, 0x04,
++ 0x03, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x80, 0xf8, 0x80, 0x80, 0x80, 0xc0, 0x40,
++ 0xc0, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x00, 0x40, 0x3f, 0x00, 0x03, 0x04, 0x04,
++ 0x03, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x28, 0x94, 0xf8, 0x80, 0x80, 0x80, 0xc0, 0x40,
++ 0xc0, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x08, 0x08, 0x4b, 0x3c, 0x08,
++ 0x08, 0x08, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x40, 0x78, 0xc0, 0x40, 0x40,
++ 0x40, 0xc0, 0x40, 0x00, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x08, 0x08, 0x4b, 0x3c, 0x08,
++ 0x08, 0x08, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00,
++ 0x08, 0x84, 0x50, 0x48, 0x78, 0xc0, 0x40, 0x40,
++ 0x40, 0xc0, 0x40, 0x00, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x09, 0x06, 0x00, 0x01, 0x02, 0x07, 0x38,
++ 0x01, 0x02, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x80, 0x00, 0x38, 0xc0, 0x80,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00,
++ 0x00, 0x09, 0x06, 0x00, 0x01, 0x02, 0x07, 0x38,
++ 0x01, 0x02, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0xc8, 0x64, 0x90, 0x00, 0x38, 0xc0, 0x80,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x07, 0x3c, 0x08, 0x08, 0x08,
++ 0x10, 0x10, 0x11, 0x21, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x00, 0xf0, 0x18, 0x20,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x07, 0x3c, 0x08, 0x08, 0x08,
++ 0x10, 0x10, 0x11, 0x21, 0x20, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0x90, 0x00, 0x00, 0xf0, 0x18, 0x20,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x47, 0x3c, 0x08, 0x08, 0x0b,
++ 0x1c, 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x20,
++ 0x10, 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x47, 0x3c, 0x08, 0x08, 0x0b,
++ 0x1c, 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
++ 0x00, 0x08, 0xc4, 0x10, 0x08, 0x00, 0xc0, 0x20,
++ 0x10, 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06,
++ 0x38, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20,
++ 0x10, 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x03, 0x4c, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x08, 0x08,
++ 0x08, 0x10, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x03, 0x4c, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0x10, 0xe0, 0x10, 0x08, 0x08, 0x08,
++ 0x08, 0x10, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x43, 0x3c, 0x01, 0x01, 0x02, 0x02,
++ 0x02, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x43, 0x3c, 0x01, 0x01, 0x02, 0x02,
++ 0x02, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0xc0, 0x88, 0x24, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x02, 0x02, 0x02, 0x02, 0x03, 0x06,
++ 0x08, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x02, 0x02, 0x02, 0x02, 0x03, 0x06,
++ 0x08, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x24, 0x10, 0x00, 0x70, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
++ 0x04, 0x02, 0x02, 0x3f, 0x04, 0x08, 0x08, 0x10,
++ 0x10, 0x20, 0x03, 0x04, 0x04, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x70, 0x18, 0x20, 0x40,
++ 0x40, 0x40, 0xc0, 0x60, 0x50, 0x80, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x10, 0x13, 0x20, 0x20, 0x20,
++ 0x20, 0x22, 0x2a, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x18, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x00, 0x00, 0x13, 0x15, 0x19, 0x12,
++ 0x2a, 0x4c, 0x4c, 0x54, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x80, 0xe0, 0x10, 0x08, 0x08,
++ 0x08, 0x08, 0x68, 0x90, 0x68, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x08, 0x4c, 0x3f, 0x0c, 0x08,
++ 0x18, 0x18, 0x28, 0x59, 0x08, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0xf0, 0x18, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x0d, 0x11, 0x11, 0x22, 0x22,
++ 0x24, 0x24, 0x28, 0x10, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x20, 0x10, 0x08, 0x08, 0x08,
++ 0x08, 0x10, 0x10, 0x60, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x14, 0x13, 0x20, 0x20, 0x20,
++ 0x20, 0x29, 0x12, 0x12, 0x11, 0x00, 0x00, 0x00,
++ 0x40, 0x20, 0x20, 0x38, 0xe0, 0x20, 0x20, 0x20,
++ 0x20, 0xe0, 0x30, 0x28, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x40, 0x20, 0x28, 0x27, 0x40, 0x40, 0x40,
++ 0x40, 0x53, 0x24, 0x24, 0x23, 0x00, 0x00, 0x00,
++ 0x88, 0x44, 0x50, 0x78, 0xc0, 0x40, 0x40, 0x40,
++ 0x40, 0xc0, 0x60, 0x50, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x40, 0x20, 0x28, 0x27, 0x40, 0x40, 0x40,
++ 0x40, 0x53, 0x24, 0x24, 0x23, 0x00, 0x00, 0x00,
++ 0x98, 0x64, 0x64, 0x78, 0xc0, 0x40, 0x40, 0x40,
++ 0x40, 0xc0, 0x60, 0x50, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x04, 0x3c, 0x08, 0x08, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00, 0x00,
++ 0x00, 0x40, 0x40, 0x20, 0x20, 0x30, 0x28, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x04, 0x3c, 0x08, 0x08, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00, 0x00,
++ 0x08, 0x44, 0x50, 0x28, 0x20, 0x30, 0x28, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x04, 0x3c, 0x08, 0x08, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00, 0x00,
++ 0x30, 0x48, 0x48, 0x30, 0x20, 0x30, 0x28, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x03, 0x00, 0x01, 0x02, 0x02, 0x01,
++ 0x02, 0x4c, 0x38, 0x24, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0xb0, 0x88, 0x9c, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x03, 0x00, 0x01, 0x02, 0x02, 0x01,
++ 0x02, 0x4c, 0x38, 0x24, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x88, 0xa4, 0x10, 0x00, 0x00, 0x00,
++ 0xb0, 0x88, 0x9c, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x03, 0x00, 0x01, 0x02, 0x02, 0x01,
++ 0x02, 0x4c, 0x38, 0x24, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x98, 0xa4, 0x24, 0x18, 0x00, 0x00,
++ 0xb0, 0x88, 0x9c, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x50, 0x20,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40,
++ 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x50, 0x20,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x48, 0x20, 0x00, 0x80, 0x40,
++ 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x50, 0x20,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x30, 0x48, 0x48, 0x30, 0x00, 0x80, 0x40,
++ 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x22, 0x11, 0x10, 0x10, 0x23, 0x20, 0x20,
++ 0x20, 0x29, 0x12, 0x12, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0x30, 0xc0, 0x40, 0x38, 0xe0, 0x20, 0x20,
++ 0x20, 0xe0, 0x30, 0x28, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x44, 0x23, 0x20, 0x20, 0x47, 0x40, 0x40,
++ 0x40, 0x53, 0x24, 0x24, 0x23, 0x00, 0x00, 0x00,
++ 0x00, 0x68, 0x84, 0x90, 0x78, 0xc0, 0x40, 0x40,
++ 0x40, 0xc0, 0x60, 0x50, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x44, 0x23, 0x20, 0x20, 0x47, 0x40, 0x40,
++ 0x40, 0x53, 0x24, 0x24, 0x23, 0x00, 0x00, 0x00,
++ 0x18, 0x64, 0xa4, 0x98, 0x70, 0xc0, 0x40, 0x40,
++ 0x40, 0xc0, 0x60, 0x50, 0x80, 0x00, 0x00, 0x00,
++ 0x01, 0x00, 0x10, 0x0f, 0x00, 0x10, 0x0f, 0x00,
++ 0x00, 0x0f, 0x10, 0x10, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0xf0, 0x80, 0x80, 0xe0, 0x80, 0x80,
++ 0x80, 0x80, 0xe0, 0x90, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x07, 0x01, 0x01, 0x02, 0x02, 0x0f,
++ 0x34, 0x44, 0x48, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x80, 0x00, 0x00, 0x20, 0x10, 0xf0,
++ 0x18, 0x24, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x08, 0x04, 0x27, 0x1c, 0x04, 0x1c, 0x24, 0x24,
++ 0x2c, 0x18, 0x08, 0x08, 0x07, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x30, 0x08, 0x0c, 0x00, 0x00,
++ 0x20, 0x10, 0x10, 0x10, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x00, 0x10, 0x13, 0x1c, 0x11, 0x29,
++ 0x2a, 0x46, 0x44, 0x4a, 0x30, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x80, 0xc0, 0xa0, 0x10, 0x08,
++ 0x08, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x02, 0x01, 0x11, 0x0e, 0x03, 0x12, 0x24, 0x1c,
++ 0x07, 0x04, 0x04, 0x04, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x20, 0x20,
++ 0x10, 0x10, 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x09, 0x0e,
++ 0x3c, 0x04, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0x10,
++ 0x10, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x00, 0x01, 0x18, 0x10, 0x0b, 0x4c, 0x34,
++ 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0xc0, 0x00, 0xf0, 0x08, 0x08, 0x08,
++ 0x70, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x21, 0x27,
++ 0x29, 0x31, 0x23, 0x21, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10,
++ 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x40, 0x21, 0x22, 0x24, 0x28, 0x30,
++ 0x34, 0x22, 0x21, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0xe0, 0x90, 0x88, 0x88, 0x88,
++ 0x88, 0x90, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x0f, 0x11, 0x11, 0x0e, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xc0, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00, 0x00,
++ 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x1f, 0x21, 0x21, 0x1e, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x30, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x02, 0x01, 0x01, 0x06, 0x08, 0x08, 0x08, 0x09,
++ 0x0e, 0x08, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xe0,
++ 0x10, 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x10, 0x09, 0x0a, 0x0c, 0x0c, 0x08, 0x08, 0x08,
++ 0x08, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x07, 0x00, 0x01, 0x02, 0x07, 0x0c,
++ 0x10, 0x20, 0x03, 0x04, 0x04, 0x03, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x80, 0x00, 0x00, 0xc0, 0x20,
++ 0x10, 0x10, 0x90, 0x60, 0x40, 0x80, 0x00, 0x00,
++ 0x00, 0x10, 0x08, 0x09, 0x0a, 0x1c, 0x6c, 0x08,
++ 0x18, 0x18, 0x28, 0x48, 0x18, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x24, 0x18, 0x00, 0x00, 0x00,
++ 0x00, 0x11, 0x0e, 0x01, 0x02, 0x04, 0x0f, 0x08,
++ 0x10, 0x20, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
++ 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x20,
++ 0x10, 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0x06,
++ 0x1d, 0x06, 0x0c, 0x0c, 0x14, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
++ 0x10, 0x10, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x08, 0x4c, 0x3f, 0x0c, 0x08,
++ 0x18, 0x18, 0x28, 0x48, 0x18, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x08,
++ 0x08, 0x08, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x09, 0x06, 0x01, 0x01, 0x03, 0x0e, 0x12,
++ 0x24, 0x24, 0x28, 0x19, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x80, 0x00, 0x00, 0xe0, 0x10, 0x08,
++ 0x08, 0x08, 0xc8, 0x30, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x09, 0x07, 0x02, 0x07, 0x08, 0x10, 0x06,
++ 0x09, 0x07, 0x08, 0x1c, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0x80, 0x00, 0x00, 0xc0, 0x20, 0x20, 0x20,
++ 0xc0, 0x00, 0x00, 0xe0, 0x10, 0x38, 0x00, 0x00,
++ 0x04, 0x02, 0x12, 0x0f, 0x04, 0x04, 0x0f, 0x18,
++ 0x21, 0x02, 0x04, 0x08, 0x08, 0x07, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x00, 0x00, 0x20, 0x38, 0xc0,
++ 0x80, 0x80, 0x80, 0x00, 0x00, 0xe0, 0x00, 0x00,
++ 0x02, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x0f,
++ 0x08, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0x88, 0x90, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x1e,
++ 0x02, 0x01, 0x01, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x20,
++ 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x21, 0x1e, 0x00, 0x02, 0x01, 0x01,
++ 0x01, 0x01, 0x02, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x20, 0x40, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
++ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x20, 0x40, 0x80, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0d, 0x30,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x1e,
++ 0x08, 0x08, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x02, 0x01, 0x01, 0x01, 0x3e, 0x10, 0x10,
++ 0x08, 0x08, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f,
++ 0x01, 0x01, 0x01, 0x01, 0x1e, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x01,
++ 0x01, 0x01, 0x03, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x0f,
++ 0x01, 0x02, 0x04, 0x08, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x01,
++ 0x02, 0x04, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x40, 0x78, 0xc0, 0xc0, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xc0, 0x40, 0x00, 0x00,
++ 0x00, 0x02, 0x01, 0x01, 0x21, 0x1f, 0x02, 0x02,
++ 0x04, 0x04, 0x08, 0x11, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10,
++ 0x20, 0x20, 0x20, 0x40, 0xc0, 0x80, 0x00, 0x00,
++ 0x00, 0x02, 0x01, 0x01, 0x21, 0x1f, 0x02, 0x02,
++ 0x04, 0x04, 0x08, 0x11, 0x20, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0x14, 0x10, 0xf0, 0x10, 0x10, 0x10,
++ 0x20, 0x20, 0x20, 0x40, 0xc0, 0x80, 0x00, 0x00,
++ 0x00, 0x04, 0x02, 0x02, 0x03, 0x1d, 0x01, 0x01,
++ 0x03, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00, 0x78,
++ 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x04, 0x02, 0x02, 0x03, 0x1d, 0x01, 0x01,
++ 0x03, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0x14, 0x70, 0x80, 0x00, 0x00, 0x78,
++ 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x04, 0x02, 0x03, 0x02, 0x04, 0x04, 0x08,
++ 0x10, 0x00, 0x01, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x70, 0x90, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x07, 0x04, 0x08, 0x08, 0x10,
++ 0x21, 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x08, 0x24, 0xd4, 0x50, 0x40, 0x40, 0x80, 0x80,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x04, 0x04, 0x0f, 0x09, 0x10,
++ 0x20, 0x00, 0x01, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x38, 0xc0, 0x00, 0x80,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x04, 0x04, 0x0f, 0x09, 0x10,
++ 0x20, 0x00, 0x01, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x08, 0x24, 0x14, 0x10, 0x38, 0xc0, 0x00, 0x80,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x21, 0x1e, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x1c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10,
++ 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x43, 0x3c, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x07, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0x14, 0xd0, 0x40, 0x40, 0x40, 0x40,
++ 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x04, 0x04, 0x24, 0x1f, 0x04,
++ 0x04, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40,
++ 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x04, 0x04, 0x24, 0x1f, 0x04,
++ 0x04, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x08, 0xa4, 0x54, 0x50, 0x40, 0xf8, 0x40, 0x40,
++ 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0c, 0x02, 0x00, 0x18, 0x04, 0x00,
++ 0x00, 0x00, 0x00, 0x13, 0x0c, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10,
++ 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0c, 0x02, 0x00, 0x18, 0x04, 0x00,
++ 0x00, 0x00, 0x00, 0x13, 0x0c, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x24, 0x14, 0x10, 0x00, 0x08, 0x10,
++ 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0x40, 0x40, 0x80, 0x80,
++ 0x40, 0x20, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x21, 0x1e, 0x00, 0x00, 0x01, 0x01,
++ 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0xd4, 0x50, 0x80, 0x80, 0x00, 0x00,
++ 0x80, 0x40, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x04, 0x04, 0x05, 0x26, 0x1c,
++ 0x04, 0x04, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x78, 0x88, 0x10, 0x20,
++ 0x40, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x04, 0x04, 0x05, 0x26, 0x1c,
++ 0x04, 0x04, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0x14, 0x10, 0x78, 0x88, 0x10, 0x20,
++ 0x40, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x08, 0x04, 0x04, 0x04, 0x00,
++ 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x10, 0x10, 0x20, 0x20, 0x40,
++ 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x10, 0x08, 0x08, 0x08, 0x00,
++ 0x00, 0x01, 0x01, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x08, 0xa4, 0x54, 0x50, 0x40, 0x40, 0x40, 0x80,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x05, 0x08,
++ 0x10, 0x00, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x20, 0x20, 0xc0,
++ 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x02, 0x03, 0x04, 0x04, 0x0a, 0x11,
++ 0x20, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x08, 0x24, 0x14, 0xf0, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x1e, 0x01, 0x00, 0x23, 0x1c,
++ 0x00, 0x00, 0x01, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0x40, 0x80, 0x00, 0x00, 0xf8, 0x80, 0x80,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x1e, 0x01, 0x00, 0x23, 0x1c,
++ 0x00, 0x00, 0x01, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x08, 0x64, 0x94, 0x10, 0x00, 0xf8, 0x80, 0x80,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x12,
++ 0x0a, 0x08, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x04, 0x22, 0x11, 0x09, 0x08, 0x00,
++ 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x08, 0x08, 0x10, 0x10, 0x20,
++ 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x08, 0x44, 0x24, 0x10, 0x10,
++ 0x00, 0x01, 0x02, 0x04, 0x08, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0x94, 0x50, 0x40, 0x40, 0x40, 0x80,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x11, 0x0e, 0x00, 0x00, 0x23, 0x1c,
++ 0x00, 0x01, 0x01, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x00, 0x00, 0x78, 0x80, 0x80,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x11, 0x0e, 0x00, 0x20, 0x1f, 0x00,
++ 0x00, 0x01, 0x01, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x08, 0x24, 0xd4, 0x10, 0x00, 0xf0, 0x00, 0x80,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x04, 0x04, 0x04, 0x07, 0x04,
++ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x08, 0x08, 0x08, 0x08, 0x0e, 0x09,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x90, 0x50, 0x40, 0x00, 0x00, 0x00, 0x80,
++ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x80, 0xf8, 0x80, 0x80, 0x80,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x0f, 0x00, 0x00, 0x0e, 0x01,
++ 0x00, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x20, 0x20, 0x40, 0xc0,
++ 0xc0, 0x20, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x02, 0x01, 0x01, 0x1e, 0x00, 0x00, 0x01,
++ 0x03, 0x0d, 0x31, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x20, 0x40, 0x80, 0x00,
++ 0x40, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x40, 0x20, 0x20, 0x20, 0x40, 0x40, 0x80,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0x08,
++ 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10,
++ 0x10, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0x08,
++ 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x24, 0x14, 0x90, 0x40, 0x20, 0x10,
++ 0x10, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0x08,
++ 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x18, 0x24, 0x24, 0x18, 0x80, 0x40, 0x20, 0x10,
++ 0x10, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x08, 0x08, 0x08, 0x0f, 0x08,
++ 0x08, 0x08, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x08, 0x08, 0x08, 0x08, 0x0f,
++ 0x08, 0x08, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x48, 0x28, 0x20, 0x00, 0xe0, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x08, 0x08, 0x08, 0x08, 0x0f,
++ 0x08, 0x08, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x30, 0x48, 0x48, 0x30, 0x00, 0xe0, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x02, 0x04, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x10, 0x20, 0x20, 0x40,
++ 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x23, 0x1c, 0x00, 0x00, 0x00, 0x01,
++ 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0xd4, 0x50, 0x40, 0x80, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x23, 0x1c, 0x00, 0x00, 0x00, 0x01,
++ 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00, 0x00,
++ 0x18, 0x24, 0xe4, 0x58, 0x40, 0x80, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x48, 0x30,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40,
++ 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x48, 0x30,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x90, 0x50, 0x40, 0x00, 0x80, 0x40,
++ 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x48, 0x30,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x60, 0x90, 0x90, 0x60, 0x00, 0x80, 0x40,
++ 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x02, 0x01, 0x01, 0x21, 0x1f, 0x01, 0x01,
++ 0x09, 0x09, 0x11, 0x21, 0x03, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x40,
++ 0x20, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x02, 0x01, 0x01, 0x21, 0x1f, 0x01, 0x01,
++ 0x09, 0x09, 0x11, 0x21, 0x03, 0x01, 0x00, 0x00,
++ 0x08, 0x24, 0x14, 0x10, 0xf0, 0x00, 0x00, 0x40,
++ 0x20, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x02, 0x01, 0x01, 0x21, 0x1f, 0x01, 0x01,
++ 0x09, 0x09, 0x11, 0x21, 0x03, 0x01, 0x00, 0x00,
++ 0x18, 0x24, 0x24, 0x18, 0xf0, 0x00, 0x00, 0x40,
++ 0x20, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0x00,
++ 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x08, 0x10, 0x20, 0x40,
++ 0x80, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x03, 0x00, 0x00, 0x08, 0x06, 0x01,
++ 0x00, 0x10, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00, 0x80,
++ 0x40, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00,
++ 0x00, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
++ 0x04, 0x04, 0x29, 0x1e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
++ 0x20, 0x30, 0xc8, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00,
++ 0x00, 0x00, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0x40, 0x20, 0x20, 0x20, 0x20, 0xc0, 0x40,
++ 0xa0, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x0f, 0x02, 0x02, 0x23, 0x1e,
++ 0x02, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xf8, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x03,
++ 0x1e, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x90,
++ 0x20, 0x40, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x04, 0x03, 0x26, 0x1a, 0x01,
++ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x78, 0x88, 0x10, 0x20, 0x40,
++ 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e,
++ 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40,
++ 0x40, 0x80, 0xe0, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x11, 0x0e, 0x00, 0x00,
++ 0x00, 0x01, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x40, 0x80,
++ 0x80, 0xf0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x00,
++ 0x01, 0x0e, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x20, 0x20,
++ 0xe0, 0x40, 0x40, 0xc0, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x01, 0x0e,
++ 0x00, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0xe0, 0x20,
++ 0x20, 0x20, 0x20, 0xe0, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x11, 0x0e, 0x00, 0x23, 0x1c, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x00, 0x70, 0x90, 0x10, 0x10,
++ 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04,
++ 0x04, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x08, 0x04, 0x04, 0x04, 0x04,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x88, 0x88,
++ 0x90, 0x90, 0xa0, 0xc0, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x0b, 0x0c, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
++ 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x21, 0x1e, 0x10, 0x10, 0x08,
++ 0x08, 0x09, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0x20,
++ 0x20, 0xe0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0f,
++ 0x08, 0x04, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x10,
++ 0x20, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x21, 0x1e, 0x10, 0x08, 0x08, 0x08,
++ 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0x20, 0x20,
++ 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x00, 0x00, 0x01, 0x1e, 0x08, 0x04,
++ 0x05, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x80, 0xf0, 0x80, 0x80, 0x80,
++ 0xf0, 0x88, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x01, 0x1e, 0x02, 0x01, 0x01,
++ 0x01, 0x01, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x20, 0x40, 0x80, 0x00,
++ 0x00, 0xf0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x01, 0x0e,
++ 0x00, 0x00, 0x00, 0x01, 0x06, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x10, 0x20, 0xe0, 0x20,
++ 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x18, 0x04, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x13, 0x0c, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10, 0x10,
++ 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x02, 0x02, 0x43, 0x3c, 0x20, 0x10,
++ 0x10, 0x00, 0x00, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x08, 0x24, 0x14, 0x10, 0xe0, 0x20, 0x20, 0x40,
++ 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x11,
++ 0x0e, 0x02, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
++ 0x20, 0x20, 0x20, 0x20, 0xc0, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04,
++ 0x07, 0x08, 0x10, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
++ 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x03, 0x03, 0x04, 0x04, 0x08,
++ 0x0f, 0x10, 0x10, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0x60,
++ 0xe0, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x30, 0x60, 0xc0, 0x30,
++ 0x18, 0x18, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x03, 0x03, 0x04, 0x04, 0x08,
++ 0x08, 0x10, 0x10, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0x60,
++ 0x60, 0x30, 0x30, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x10, 0x00, 0x40, 0xc0, 0x40,
++ 0x00, 0x08, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x20, 0x01, 0x01, 0x03, 0x06,
++ 0x06, 0x0c, 0x18, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x60, 0xc0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x08, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x30, 0x30, 0x30, 0x30, 0xf0, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x30, 0x34, 0x37, 0x34,
++ 0x30, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x18, 0x58, 0xd8, 0x58,
++ 0x18, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x19, 0x1a, 0x1c,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x20, 0x40, 0x80, 0x80, 0xc0, 0xc0,
++ 0x60, 0x60, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x03, 0x03, 0x04, 0x04, 0x08,
++ 0x08, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0x60,
++ 0x60, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x18, 0x1c, 0x1c, 0x16, 0x16, 0x17,
++ 0x13, 0x12, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x30, 0x70, 0x70, 0xb0, 0xb0, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x18, 0x1c, 0x16, 0x16, 0x13, 0x11,
++ 0x11, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0xa0,
++ 0xa0, 0xe0, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x1f, 0x20, 0x00, 0x10, 0x1f, 0x1f,
++ 0x10, 0x00, 0x10, 0x1f, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0xe0, 0x20, 0x00, 0x20, 0xe0, 0xe0,
++ 0x20, 0x00, 0x10, 0xe0, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x30, 0x60, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x18, 0x0c, 0x06, 0x03, 0x01, 0x01,
++ 0x02, 0x04, 0x08, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x10, 0x00, 0x00, 0x80, 0x00,
++ 0x00, 0x10, 0x20, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x23, 0x43, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0c, 0x17, 0x23, 0x23, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0xa0, 0x10, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x03, 0x07, 0x1b, 0x33, 0x33, 0x33,
++ 0x1b, 0x07, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x00, 0x80, 0x60, 0x30, 0x30, 0x30,
++ 0x60, 0x80, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x0c, 0x06, 0x03, 0x03, 0x03,
++ 0x04, 0x08, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x20, 0x40, 0x80, 0x00, 0x00, 0x80,
++ 0xc0, 0x60, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x03, 0x63, 0x33, 0x33, 0x33, 0x13,
++ 0x0f, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x00, 0x18, 0x30, 0x30, 0x30, 0x20,
++ 0xc0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18,
++ 0x08, 0x04, 0x22, 0x3e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x18, 0x18, 0x18, 0x30,
++ 0x20, 0x40, 0x88, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x18, 0x10,
++ 0x10, 0x10, 0x19, 0x0e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x20, 0x20, 0xa0, 0x60, 0x60,
++ 0x40, 0xc0, 0x40, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x02, 0x02, 0x04, 0x05, 0x04,
++ 0x0c, 0x08, 0x0c, 0x1b, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xe0, 0x10, 0x10, 0x10, 0x20, 0xc0, 0x20,
++ 0x20, 0x20, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x01, 0x01,
++ 0x01, 0x03, 0x03, 0x03, 0x02, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x30, 0x40, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x04, 0x04, 0x02, 0x03, 0x04, 0x0c,
++ 0x08, 0x08, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0xe0, 0x10, 0x00, 0x80, 0xc0, 0x40,
++ 0x40, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x04, 0x03,
++ 0x06, 0x0c, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x80,
++ 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x0c, 0x07, 0x02, 0x04, 0x04, 0x08,
++ 0x08, 0x0e, 0x07, 0x00, 0x06, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0xc0, 0x40, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x17, 0x02, 0x04,
++ 0x04, 0x0c, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x20, 0x20,
++ 0x20, 0x40, 0x40, 0xc0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x02, 0x06, 0x04, 0x0f, 0x0c,
++ 0x08, 0x08, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x10, 0x10, 0x10, 0x30, 0xf0, 0x20,
++ 0x60, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x02, 0x06,
++ 0x04, 0x04, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x0d, 0x0e,
++ 0x09, 0x19, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x70, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0xa0, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02,
++ 0x06, 0x04, 0x0c, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0xc0, 0x40, 0xc0, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x0c,
++ 0x08, 0x08, 0x0c, 0x1b, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x60, 0x40,
++ 0x40, 0x40, 0xe8, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x08, 0x0c, 0x04, 0x04,
++ 0x04, 0x07, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x04, 0x03, 0x02, 0x04, 0x04, 0x03, 0x04,
++ 0x08, 0x08, 0x0e, 0x07, 0x00, 0x07, 0x00, 0x00,
++ 0x00, 0x60, 0xe0, 0x00, 0x00, 0x00, 0xc0, 0xc0,
++ 0x00, 0x00, 0x00, 0x80, 0xc0, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x0c,
++ 0x0c, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x10, 0x30,
++ 0x30, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x0c, 0x1f, 0x22, 0x04, 0x04,
++ 0x08, 0x08, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x08, 0xf0, 0x40, 0x40, 0x80,
++ 0x80, 0x80, 0xc0, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x04,
++ 0x0c, 0x0c, 0x0c, 0x1b, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x10, 0x10,
++ 0x30, 0x20, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0c, 0x18,
++ 0x10, 0x10, 0x11, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x80, 0x40, 0x40,
++ 0x40, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x06, 0x0f, 0x11, 0x03,
++ 0x02, 0x04, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x30, 0xe0, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x0c, 0x0c,
++ 0x08, 0x08, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20, 0x20,
++ 0x60, 0x40, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0d, 0x19, 0x31,
++ 0x32, 0x12, 0x0e, 0x07, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x80, 0x80, 0x80, 0x80, 0xc0, 0x20, 0x30,
++ 0x30, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x06, 0x0b, 0x01, 0x01, 0x01, 0x01, 0x03,
++ 0x07, 0x05, 0x09, 0x19, 0x31, 0x20, 0x00, 0x00,
++ 0x00, 0x10, 0x30, 0x60, 0x40, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xa0, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x31, 0x59, 0x09, 0x09,
++ 0x12, 0x12, 0x12, 0x0f, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x80, 0x80, 0x80, 0xa0, 0x30, 0x10, 0x10,
++ 0x30, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x31, 0x23,
++ 0x22, 0x22, 0x36, 0x19, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x10, 0x10,
++ 0x30, 0x20, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x03, 0x03, 0x04, 0x04, 0x08,
++ 0x0f, 0x10, 0x10, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0x60,
++ 0xe0, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x10, 0x00, 0x00, 0x80, 0x60,
++ 0x30, 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x30, 0x60, 0xc0, 0x30,
++ 0x18, 0x18, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
++ 0x04, 0x08, 0x08, 0x1f, 0x30, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
++ 0x60, 0x60, 0x60, 0xf8, 0x18, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x10, 0x00, 0x40, 0xc0, 0x40,
++ 0x00, 0x08, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x0c, 0x0c, 0x3f, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0xc0, 0xc0, 0xe0, 0x10, 0x00, 0x40, 0xc0, 0x40,
++ 0x00, 0x08, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x67, 0x73, 0x13, 0x13, 0x13, 0x0f, 0x0b,
++ 0x13, 0x33, 0x23, 0x77, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x98, 0x38, 0x20, 0x20, 0x20, 0xc0, 0x40,
++ 0x20, 0x30, 0x10, 0xb8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x1c, 0x10, 0x00, 0x00, 0x03, 0x00,
++ 0x00, 0x10, 0x1c, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x30, 0x60, 0xc0, 0x60,
++ 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x19, 0x1a,
++ 0x1c, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x30, 0x30, 0x70, 0xb0, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x06, 0x03, 0x3c, 0x18, 0x18, 0x18, 0x19, 0x1a,
++ 0x1c, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0xc0, 0x80, 0x78, 0x30, 0x70, 0xb0, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x19, 0x1f, 0x19,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x58, 0x80, 0x80, 0x00, 0x00, 0x80,
++ 0xc0, 0x60, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
++ 0x02, 0x34, 0x34, 0x18, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x18, 0x18, 0x1c, 0x1c, 0x17, 0x26,
++ 0x22, 0x22, 0x20, 0x70, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x70, 0x60, 0x60, 0xe0, 0xe0, 0x60, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x30, 0x30, 0x30, 0x30, 0xf0, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x30, 0x60, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xd0, 0x30, 0x10, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x23, 0x43, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06,
++ 0x03, 0x03, 0x01, 0x19, 0x1a, 0x0c, 0x00, 0x00,
++ 0x00, 0x78, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x03, 0x07, 0x1b, 0x33, 0x33, 0x33,
++ 0x1b, 0x07, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x00, 0x80, 0x60, 0x30, 0x30, 0x30,
++ 0x60, 0x80, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x0c, 0x06, 0x03, 0x03, 0x03,
++ 0x04, 0x08, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x20, 0x40, 0x80, 0x00, 0x00, 0x80,
++ 0xc0, 0x60, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x18, 0x18, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0xf8, 0x18, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0f,
++ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xe0,
++ 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x77, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
++ 0x33, 0x33, 0x33, 0x7f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xb8, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x77, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
++ 0x33, 0x33, 0x33, 0x7f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xb8, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0xf8, 0x18, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x26, 0x46, 0x06, 0x07, 0x06, 0x06,
++ 0x06, 0x06, 0x06, 0x1f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x30, 0x18,
++ 0x18, 0x18, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x1e, 0x19, 0x18,
++ 0x18, 0x18, 0x19, 0x3e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x30, 0x30, 0x30, 0x30, 0xb0, 0xf0,
++ 0xf0, 0xf0, 0xb0, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x30,
++ 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x1c, 0x10, 0x00, 0x06, 0x0b, 0x00,
++ 0x00, 0x10, 0x1c, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x10, 0x18, 0xb8, 0xd8,
++ 0x10, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x33, 0x32, 0x36, 0x36, 0x3e, 0x36,
++ 0x36, 0x32, 0x33, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x30, 0x10, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x10, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x18, 0x18, 0x0c, 0x07,
++ 0x03, 0x06, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x30, 0x30, 0x30, 0x30, 0x30, 0xf0,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x0c, 0x03,
++ 0x0c, 0x18, 0x18, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x60, 0xe0,
++ 0x60, 0x60, 0xe0, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x04, 0x05, 0x0e, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0xe0, 0xc0, 0x00, 0x80, 0x60, 0x30, 0x30,
++ 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x0c, 0x0c, 0x0f,
++ 0x0c, 0x0c, 0x0c, 0x1f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x60, 0xc0,
++ 0x20, 0x30, 0x30, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x0c, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x1f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x20, 0x10, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x04, 0x04, 0x04,
++ 0x04, 0x04, 0x08, 0x3f, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60,
++ 0x60, 0x60, 0x60, 0xe0, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x18, 0x1f,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x30, 0xf0,
++ 0x00, 0x10, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x06, 0x06, 0x00, 0x07, 0x08, 0x18, 0x1f,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x60, 0x60, 0x00, 0xc0, 0x20, 0x30, 0xf0,
++ 0x00, 0x10, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x67, 0x73, 0x0b, 0x0f,
++ 0x0b, 0x13, 0x33, 0x67, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x98, 0x38, 0x40, 0xc0,
++ 0x40, 0x20, 0x30, 0x98, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x10, 0x03,
++ 0x00, 0x10, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x60, 0xc0,
++ 0x60, 0x60, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x19,
++ 0x1a, 0x1c, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0xe0, 0x60,
++ 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x06, 0x03, 0x00, 0x3c, 0x18, 0x18, 0x19,
++ 0x1a, 0x1c, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x80, 0x00, 0xf0, 0x60, 0xe0, 0x60,
++ 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x19, 0x1f,
++ 0x19, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x60, 0xe0, 0x00, 0x00,
++ 0x80, 0xc0, 0x60, 0x70, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x02, 0x02,
++ 0x02, 0x34, 0x34, 0x18, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60,
++ 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x1c, 0x16,
++ 0x16, 0x13, 0x13, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x38, 0x70, 0x70, 0xb0,
++ 0xb0, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x1f,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0xe0,
++ 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x18, 0x18,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x30, 0x30,
++ 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x18, 0x18, 0x18,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60,
++ 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1d, 0x0e, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0e, 0x0d, 0x0c, 0x1e, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x30, 0x30,
++ 0x30, 0x30, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x18, 0x18,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x20, 0x00,
++ 0x00, 0x20, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x13, 0x23, 0x03,
++ 0x03, 0x03, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x20, 0x10, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x0c, 0x06, 0x06,
++ 0x03, 0x03, 0x01, 0x19, 0x19, 0x0e, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x70, 0x20, 0x20, 0x40,
++ 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x03, 0x03, 0x1b, 0x37, 0x63, 0x63,
++ 0x63, 0x63, 0x37, 0x1b, 0x03, 0x07, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x18, 0x18,
++ 0x18, 0x18, 0xb0, 0x60, 0x00, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c, 0x06, 0x03,
++ 0x03, 0x04, 0x08, 0x1c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x70, 0x20, 0x40, 0x80,
++ 0x80, 0xc0, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18,
++ 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60,
++ 0x60, 0x60, 0x60, 0xf0, 0x30, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18,
++ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60,
++ 0xe0, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x77, 0x33, 0x33, 0x33,
++ 0x33, 0x33, 0x33, 0x7f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x78, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x77, 0x33, 0x33, 0x33,
++ 0x33, 0x33, 0x33, 0x7f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x78, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0xf8, 0x18, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x26, 0x46, 0x07,
++ 0x06, 0x06, 0x06, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
++ 0x30, 0x30, 0x30, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x1f,
++ 0x19, 0x19, 0x19, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x78, 0x30, 0x30, 0x30,
++ 0xb0, 0xb0, 0xb0, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0f,
++ 0x0c, 0x0c, 0x0c, 0x1f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
++ 0x30, 0x30, 0x30, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x10, 0x03,
++ 0x05, 0x10, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x30, 0x70,
++ 0xb0, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x19, 0x1b, 0x1f,
++ 0x1b, 0x1b, 0x19, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x18, 0x18,
++ 0x18, 0x18, 0x10, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x18, 0x18,
++ 0x0f, 0x06, 0x0c, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60,
++ 0xe0, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xff, 0xff,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xff, 0xff,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xff, 0xff,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xff, 0xff,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xff,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xff,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xff,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x04, 0x3f, 0x24, 0x24, 0x24,
++ 0x3f, 0x24, 0x04, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x80, 0x80, 0xf0, 0x90, 0x90, 0x90,
++ 0xf0, 0x90, 0x80, 0x80, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x4b, 0x4a, 0x4a, 0x4a,
++ 0x4b, 0x7a, 0x48, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0xa8, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x13, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x11, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x28, 0x31, 0x29, 0x25, 0x25,
++ 0x25, 0x25, 0x38, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xe8, 0x28, 0x28, 0x28,
++ 0xe8, 0x28, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x08, 0x0f,
++ 0x03, 0x0c, 0x74, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xe0, 0x20, 0x20, 0xe8,
++ 0x08, 0x90, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x12, 0x09, 0x3f, 0x25, 0x54, 0x13,
++ 0x22, 0x07, 0x3a, 0x01, 0x06, 0x78, 0x00, 0x00,
++ 0x30, 0xd0, 0x10, 0x20, 0xfc, 0x88, 0x50, 0xc8,
++ 0x08, 0xe0, 0x40, 0x80, 0xe0, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x79, 0x17, 0x11, 0x11, 0x1a,
++ 0x74, 0x17, 0x10, 0x10, 0x13, 0x3c, 0x00, 0x00,
++ 0x80, 0xa0, 0x90, 0x38, 0xc8, 0x00, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x13, 0x12,
++ 0x32, 0x2c, 0x04, 0x0a, 0x10, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x50, 0x50, 0x88, 0xfc, 0x00,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x21, 0x16, 0x10, 0x01, 0x0e, 0x73, 0x10,
++ 0x13, 0x10, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0xf8, 0x90, 0x60, 0xf0, 0x4c, 0xf8, 0x40,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0xfc, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x07, 0x11, 0x0a, 0x04, 0x1f,
++ 0x61, 0x1f, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x20, 0x28, 0xc8, 0x50, 0xf0,
++ 0x0c, 0xf0, 0x00, 0x80, 0x60, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x7f, 0x04, 0x3f, 0x24,
++ 0x24, 0x28, 0x30, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xfc, 0x80, 0xf8, 0x88,
++ 0x98, 0x78, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x19, 0x76, 0x11, 0x11, 0x7d, 0x11, 0x1b,
++ 0x36, 0x37, 0x52, 0x13, 0x12, 0x10, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xf0, 0x50, 0xf0, 0xf0, 0xf8,
++ 0x48, 0xf8, 0x48, 0xfc, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x1f, 0x12, 0x1f, 0x02, 0x7f,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x80, 0xf0, 0x90, 0xf0, 0x80, 0xfc,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x12, 0x1a,
++ 0x73, 0x14, 0x17, 0x18, 0x17, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8, 0x60, 0x90,
++ 0xe8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x02, 0x02,
++ 0x13, 0x12, 0x25, 0x24, 0x4f, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xfc, 0x50, 0x98,
++ 0xe4, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x0a, 0x0a, 0x0a,
++ 0x0a, 0x0a, 0x12, 0x12, 0x22, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0x88, 0xf8, 0x88, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x0f, 0x02, 0x7f, 0x0f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xfc, 0xe0, 0x20,
++ 0xe0, 0xf0, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3f, 0x00, 0x1f, 0x10,
++ 0x10, 0x1f, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7e, 0x2b, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2e, 0x28, 0x41, 0x00, 0x00,
++ 0x20, 0x30, 0x48, 0xf4, 0x20, 0xfc, 0x50, 0x98,
++ 0x64, 0x10, 0x64, 0x08, 0x30, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x28, 0x29, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x48, 0x50, 0xfc, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x17, 0x10,
++ 0x10, 0x10, 0x20, 0x20, 0x4f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0x80, 0x80, 0xf8, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x22, 0x3e, 0x22,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x88, 0x54, 0x30, 0x90, 0x50,
++ 0x50, 0x1c, 0xf0, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x7d, 0x11, 0x11, 0x11, 0x1d,
++ 0x72, 0x12, 0x12, 0x14, 0x15, 0x3e, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x20, 0x20, 0xf8, 0x88, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x28, 0x48, 0x0e, 0x12, 0x12,
++ 0x2a, 0x44, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xf8, 0x88, 0x88,
++ 0x88, 0xb0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x08, 0x13, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2b, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0c, 0x0a, 0x0f, 0x71, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x80, 0x80, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x78, 0x00, 0x00,
++ 0x08, 0x0c, 0x12, 0x2a, 0x48, 0x3e, 0x23, 0x3e,
++ 0x22, 0x3e, 0x24, 0x26, 0x3a, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x50, 0x48, 0x9c, 0xe4, 0x00,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x11, 0x11, 0x15, 0x65, 0x1a, 0x13, 0x29, 0x7d,
++ 0x15, 0x19, 0x35, 0x34, 0x50, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0xe8, 0x28, 0xe8,
++ 0x28, 0xe8, 0x28, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x64, 0x1f, 0x10, 0x29, 0x7e,
++ 0x14, 0x39, 0x36, 0x34, 0x51, 0x16, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0xa0, 0x24, 0x9c,
++ 0xf0, 0x90, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x3c, 0x20, 0x20, 0x20, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7f, 0x00, 0x1e, 0x12, 0x12,
++ 0x1e, 0x10, 0x03, 0x0c, 0x71, 0x06, 0x00, 0x00,
++ 0x90, 0x88, 0x88, 0xfc, 0x80, 0x88, 0x88, 0x48,
++ 0x50, 0x30, 0x24, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x1f, 0x12, 0x12, 0x1f, 0x09,
++ 0x05, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0x90, 0x90, 0xf0, 0x20,
++ 0x40, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x09, 0x0b, 0x12, 0x3c,
++ 0x55, 0x13, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x42, 0x02, 0x7f, 0x04,
++ 0x04, 0x0f, 0x08, 0x01, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0x00, 0xfc, 0x40,
++ 0x40, 0x40, 0xc0, 0x20, 0x10, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x11, 0x1f, 0x12, 0x14, 0x1f,
++ 0x14, 0x17, 0x24, 0x27, 0x44, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xfc, 0xa0, 0x90, 0xfc,
++ 0x90, 0xf0, 0x90, 0xf0, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x14, 0x10, 0x17, 0x18,
++ 0x70, 0x11, 0x11, 0x10, 0x10, 0x37, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x40, 0x40, 0xfc, 0x90,
++ 0x90, 0x90, 0x60, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x49, 0x48, 0x4f, 0x78, 0x49,
++ 0x49, 0x49, 0x79, 0x49, 0x41, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x7f, 0x04, 0x0f, 0x03,
++ 0x1d, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xf8, 0x40, 0x80, 0x60,
++ 0x10, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x3e, 0x21, 0x2f, 0x22,
++ 0x3f, 0x27, 0x24, 0x27, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0x08, 0xe8, 0x88,
++ 0xf8, 0xc8, 0x48, 0xc8, 0xc8, 0x58, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1d, 0x08, 0x3f, 0x2a,
++ 0x3e, 0x08, 0x7e, 0x08, 0x08, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x20, 0x20, 0xfc, 0x48,
++ 0x48, 0xf0, 0x90, 0x28, 0x44, 0x84, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01,
++ 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x12, 0x11, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x16, 0x18, 0x61, 0x06, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0x90, 0x90, 0x10, 0x10,
++ 0x10, 0x30, 0x28, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x10, 0x17, 0x30, 0x50, 0x13,
++ 0x10, 0x10, 0x10, 0x10, 0x11, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xfc, 0x48, 0x48, 0xf8,
++ 0x48, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x10, 0x1f, 0x30, 0x52, 0x11,
++ 0x11, 0x11, 0x11, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0xfc, 0x10, 0x10, 0x10,
++ 0x10, 0x20, 0x20, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x10, 0x30, 0x51, 0x13,
++ 0x15, 0x11, 0x11, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x80, 0xc8, 0x48, 0x50,
++ 0x20, 0x20, 0x10, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x17, 0x10, 0x33, 0x52, 0x13,
++ 0x10, 0x13, 0x12, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0xf0, 0x90, 0xfc, 0x00, 0xf0, 0x10, 0xf0,
++ 0x20, 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x22, 0x22, 0x2f, 0x22, 0x22,
++ 0x3f, 0x22, 0x24, 0x28, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x48, 0x48, 0xe8, 0x48, 0x48,
++ 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x3f, 0x01, 0x3f, 0x21,
++ 0x3f, 0x23, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00,
++ 0xfc, 0x04, 0x84, 0x58, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x02,
++ 0x7f, 0x04, 0x0f, 0x10, 0x03, 0x3c, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00,
++ 0xfc, 0x40, 0x40, 0xc0, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x1f, 0x12, 0x1f, 0x14,
++ 0x14, 0x1f, 0x11, 0x22, 0x2c, 0x40, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xc8, 0x48, 0xc8, 0xd0,
++ 0xb0, 0x30, 0x24, 0xd4, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x3f, 0x20, 0x3e, 0x20, 0x3f,
++ 0x24, 0x2e, 0x2d, 0x35, 0x44, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0xfc, 0x08, 0x48, 0x28,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x19, 0x37, 0x35, 0x31, 0x51,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x90, 0x90, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x04, 0x7f, 0x00, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x25, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x00, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x08, 0x84, 0x24, 0xe0, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x3f, 0x2e, 0x20, 0x3f, 0x56,
++ 0x25, 0x4d, 0x04, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x90, 0x50, 0x50, 0x10,
++ 0x10, 0x30, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x02, 0x07,
++ 0x19, 0x62, 0x0c, 0x31, 0x06, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x00, 0xf8,
++ 0x28, 0x48, 0x88, 0x08, 0x10, 0xe0, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x29, 0x29, 0x49, 0x09, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x60, 0x50, 0x88, 0xfc, 0x08,
++ 0xe8, 0x28, 0xe8, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x3f, 0x02, 0x02, 0x07, 0x04,
++ 0x0f, 0x08, 0x15, 0x32, 0x4a, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x20, 0x40, 0xf0, 0x10,
++ 0xfc, 0x04, 0x44, 0xa4, 0xa4, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x00, 0x7f,
++ 0x09, 0x08, 0x08, 0x0b, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x10, 0x90, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x04, 0x3f,
++ 0x04, 0x04, 0x7f, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x40, 0xf8,
++ 0x40, 0x40, 0xfc, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x02, 0x0c, 0x38, 0x09, 0x08, 0x7e, 0x09, 0x1c,
++ 0x1a, 0x2a, 0x49, 0x08, 0x08, 0x0b, 0x00, 0x00,
++ 0x40, 0x78, 0x88, 0x50, 0x20, 0x40, 0xa0, 0x3c,
++ 0x44, 0xa8, 0x18, 0x10, 0x60, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x15, 0x08, 0x14, 0x7e,
++ 0x0a, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x08, 0x09, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2b, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0xf8, 0x48, 0xfc, 0x00, 0xf8, 0x88, 0xf8,
++ 0x10, 0xf8, 0x90, 0xfc, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x3f, 0x21, 0x3f, 0x00, 0x1f,
++ 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x01, 0x7f, 0x05, 0x19,
++ 0x62, 0x3f, 0x04, 0x0f, 0x03, 0x3c, 0x00, 0x00,
++ 0x40, 0xfc, 0x60, 0xc0, 0x00, 0xfc, 0x40, 0x30,
++ 0x0c, 0xf8, 0x40, 0x80, 0x60, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x01, 0x03, 0x04, 0x1c,
++ 0x64, 0x04, 0x04, 0x05, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x08, 0x88, 0x90,
++ 0x60, 0x40, 0x20, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3d, 0x01, 0x7f, 0x01, 0x3d, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0xfc, 0x24, 0xfc, 0x24, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x23, 0x10, 0x17, 0x01, 0x01, 0x71, 0x10,
++ 0x11, 0x11, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf0, 0x90, 0xfc, 0xf0, 0x10, 0xf0, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0xfc, 0x00, 0x00,
++ 0x00, 0x21, 0x11, 0x11, 0x07, 0x01, 0x71, 0x11,
++ 0x11, 0x11, 0x11, 0x1b, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf0, 0x50, 0xf0, 0xfc, 0xf0, 0x10, 0xf0,
++ 0xf0, 0x10, 0xf0, 0x10, 0x08, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x22, 0x27, 0x24, 0x28, 0x3f,
++ 0x21, 0x21, 0x22, 0x2c, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xf0, 0x80, 0x80, 0xf8,
++ 0x40, 0x20, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x3f, 0x04, 0x04, 0x04,
++ 0x7f, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x02, 0x1a, 0x04, 0x03,
++ 0x02, 0x0c, 0x11, 0x06, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x40, 0x40, 0x90, 0x20,
++ 0x40, 0xc0, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x17, 0x10, 0x7f, 0x12, 0x12,
++ 0x13, 0x16, 0x18, 0x63, 0x0c, 0x00, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0xfc, 0x40, 0xc8, 0xc8, 0xa8,
++ 0xa8, 0x30, 0x94, 0x34, 0x4c, 0x84, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x04, 0x3f, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0x70, 0x88, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x08, 0x08, 0x1f, 0x11, 0x3f,
++ 0x51, 0x1f, 0x11, 0x11, 0x11, 0x13, 0x00, 0x00,
++ 0x00, 0x78, 0xc8, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x7d, 0x12, 0x16, 0x11, 0x3a, 0x2f, 0x68,
++ 0x2b, 0x2b, 0x3a, 0x2a, 0x04, 0x08, 0x00, 0x00,
++ 0x50, 0x50, 0x68, 0xd8, 0x50, 0xe8, 0xfc, 0x50,
++ 0xfc, 0x28, 0xa8, 0x94, 0x2c, 0xc4, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x00, 0x3f, 0x24,
++ 0x44, 0x07, 0x04, 0x04, 0x04, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xfc, 0x08,
++ 0x60, 0x80, 0x00, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x24, 0x12, 0x12, 0x4f, 0x22, 0x22, 0x04, 0x1f,
++ 0x15, 0x15, 0x25, 0x25, 0x5f, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x20, 0x20, 0x10, 0xf8,
++ 0x54, 0x50, 0x50, 0x50, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x11, 0x12, 0x07, 0x02, 0x72, 0x13,
++ 0x12, 0x10, 0x11, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0xc8, 0xc0, 0x44, 0x3c, 0x00, 0xfc, 0x00, 0x00,
++ 0x02, 0x0f, 0x3a, 0x09, 0x09, 0x7e, 0x19, 0x1d,
++ 0x2b, 0x2b, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x18, 0xe4, 0x44, 0x28, 0x30, 0x00, 0x78, 0x48,
++ 0x48, 0x78, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x21, 0x11, 0x11,
++ 0x02, 0x04, 0x18, 0x61, 0x06, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xfc, 0x48,
++ 0x50, 0x40, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x1f, 0x01, 0x01,
++ 0x7f, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x00, 0x00,
++ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x1e, 0x24, 0x7f, 0x2b, 0x3f, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2f, 0x28, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x20, 0xf8, 0x48,
++ 0x68, 0xd8, 0xd8, 0x68, 0x48, 0xb0, 0x00, 0x00,
++ 0x02, 0x02, 0x04, 0x08, 0x7f, 0x04, 0x04, 0x04,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x40, 0x30, 0x68, 0x84, 0x80, 0x80, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x06, 0x38, 0x20, 0x20, 0x3e, 0x20, 0x20,
++ 0x20, 0x3e, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0xf0, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4a, 0x4a, 0x4b, 0x4a, 0x4a,
++ 0x4a, 0x7a, 0x4b, 0x42, 0x03, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x48, 0x48,
++ 0xa8, 0x98, 0x18, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x00, 0x1f, 0x10, 0x1f,
++ 0x10, 0x1f, 0x10, 0x1f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x21, 0x3f, 0x21, 0x23,
++ 0x22, 0x24, 0x28, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x08,
++ 0x88, 0x48, 0x28, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x25,
++ 0x79, 0x49, 0x0d, 0x15, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x48, 0x48,
++ 0x68, 0x98, 0x98, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x3f, 0x21, 0x20, 0x3f,
++ 0x21, 0x01, 0x01, 0x01, 0x02, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1a, 0x29, 0x7e, 0x23, 0x3e,
++ 0x22, 0x3e, 0x28, 0x24, 0x3b, 0x62, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa8, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x44, 0x22, 0x22, 0x03, 0x10,
++ 0x10, 0x13, 0x20, 0x20, 0x4f, 0x40, 0x00, 0x00,
++ 0x0c, 0x74, 0x84, 0x88, 0x50, 0x38, 0xc0, 0x40,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x1e, 0x12, 0x11, 0x1f, 0x10, 0x17,
++ 0x14, 0x17, 0x14, 0x27, 0x24, 0x44, 0x00, 0x00,
++ 0x10, 0x50, 0x50, 0x90, 0x50, 0xf0, 0x30, 0xd0,
++ 0x50, 0xd0, 0x50, 0xd4, 0x54, 0xcc, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3c, 0x27, 0x2c, 0x31, 0x28,
++ 0x25, 0x24, 0x27, 0x38, 0x21, 0x23, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xa0, 0xf0, 0x0c, 0xf0, 0x20,
++ 0xf8, 0x00, 0xfc, 0xa0, 0x30, 0xc8, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x2a, 0x30, 0x2b, 0x24, 0x27,
++ 0x24, 0x24, 0x39, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x00, 0xf8, 0x00, 0xfc,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x29, 0x32, 0x28, 0x25, 0x24,
++ 0x25, 0x24, 0x3f, 0x20, 0x21, 0x27, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xe8, 0x04, 0xf0, 0x20,
++ 0xf0, 0x00, 0xfc, 0xa0, 0x30, 0xc8, 0x00, 0x00,
++ 0x00, 0x3f, 0x26, 0x29, 0x31, 0x28, 0x25, 0x24,
++ 0x25, 0x24, 0x3a, 0x22, 0x24, 0x20, 0x00, 0x00,
++ 0x18, 0xe4, 0x44, 0x28, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xa8, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x22, 0x14, 0x7f, 0x00, 0x3c,
++ 0x24, 0x3c, 0x24, 0x24, 0x3c, 0x27, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x00, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x48, 0x4f, 0x48, 0x49, 0x48,
++ 0x48, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x90,
++ 0x90, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x7f, 0x04, 0x04, 0x08, 0x0f,
++ 0x18, 0x18, 0x28, 0x48, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x40, 0x1f, 0x01, 0x01,
++ 0x7f, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xf0, 0x00, 0x00,
++ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x29, 0x24, 0x24, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x00, 0xfc,
++ 0x00, 0xf8, 0x48, 0xa8, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x02, 0x22, 0x12, 0x12, 0x02,
++ 0x06, 0x1a, 0x63, 0x02, 0x02, 0x06, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x88, 0x48, 0x48, 0x08,
++ 0x18, 0x68, 0x88, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x23, 0x10, 0x10, 0x00, 0x07, 0x70, 0x10,
++ 0x10, 0x10, 0x10, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0xc0, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x3f, 0x29, 0x25, 0x25,
++ 0x21, 0x29, 0x25, 0x25, 0x21, 0x21, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x48, 0x28, 0x28,
++ 0x08, 0x48, 0x28, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x02, 0x0c, 0x30, 0x22, 0x22, 0x22, 0x22, 0x22,
++ 0x22, 0x3e, 0x64, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0xf0, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x24, 0x14, 0x18, 0x7e, 0x0a, 0x3e, 0x28, 0x3e,
++ 0x3a, 0x1a, 0x2e, 0x49, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x48, 0x19, 0x09, 0x3f, 0x09,
++ 0x7f, 0x09, 0x15, 0x14, 0x21, 0x46, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x78, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x1f, 0x02, 0x02, 0x02, 0x02, 0x3f, 0x04,
++ 0x04, 0x04, 0x04, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x11, 0x11, 0x3f, 0x25, 0x65,
++ 0x25, 0x25, 0x3d, 0x25, 0x21, 0x01, 0x00, 0x00,
++ 0x90, 0x90, 0xa0, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x06, 0x38, 0x20, 0x20, 0x20, 0x20, 0x3e,
++ 0x20, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x22, 0x22, 0x07, 0x14,
++ 0x15, 0x15, 0x25, 0x25, 0x44, 0x44, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x90, 0x90, 0xf8, 0x08,
++ 0xe8, 0x28, 0xe8, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x70, 0x57, 0x54, 0x57, 0x54, 0x54,
++ 0x56, 0x75, 0x49, 0x08, 0x17, 0x00, 0x00, 0x00,
++ 0x80, 0xf8, 0x80, 0xfc, 0xf8, 0x88, 0x78, 0xa0,
++ 0xa8, 0xa8, 0xb0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x3d, 0x25, 0x25, 0x25, 0x25, 0x25,
++ 0x25, 0x3d, 0x25, 0x20, 0x03, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x12, 0x7d, 0x3a, 0x55, 0x1f, 0x12, 0x1f, 0x3e,
++ 0x23, 0x3e, 0x3e, 0x24, 0x3e, 0x60, 0x00, 0x00,
++ 0x90, 0xfc, 0xb8, 0xd4, 0xf0, 0x90, 0xf0, 0x10,
++ 0xfc, 0x90, 0x50, 0x50, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x21, 0x3f, 0x20, 0x2e,
++ 0x20, 0x3f, 0x2e, 0x2d, 0x55, 0x0c, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x08, 0x08, 0xfc, 0x08, 0x48,
++ 0x28, 0x28, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3f, 0x2b,
++ 0x3f, 0x04, 0x3a, 0x2e, 0x28, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc, 0x54,
++ 0xfc, 0xf8, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x10, 0x7c, 0x27, 0x24, 0x24,
++ 0x78, 0x49, 0x0e, 0x14, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x48, 0xf8, 0x50, 0x50, 0xfc, 0x20, 0xc0,
++ 0x98, 0xe0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x2f, 0x29, 0x2f, 0x29, 0x2f,
++ 0x28, 0x2a, 0x29, 0x2b, 0x4c, 0x31, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x78, 0x50, 0x50, 0x50, 0xfc,
++ 0x30, 0x30, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x40, 0x23, 0x22, 0x02, 0x0b,
++ 0x0a, 0x0a, 0x13, 0x12, 0x22, 0x22, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x09, 0x09, 0x09, 0x09, 0x09,
++ 0x09, 0x09, 0x11, 0x11, 0x2e, 0x40, 0x00, 0x00,
++ 0x10, 0xe0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x10, 0x90, 0x50, 0xe8, 0x28, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x2f,
++ 0x21, 0x27, 0x21, 0x2f, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xe8,
++ 0x08, 0xc8, 0x08, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x00, 0x7f, 0x48, 0x4b, 0x4a, 0x4b, 0x4b,
++ 0x4b, 0x78, 0x4f, 0x41, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0x38, 0xf8,
++ 0xf8, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x00, 0x7f, 0x01, 0x01,
++ 0x01, 0x02, 0x02, 0x04, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x40, 0x20, 0x10, 0x70, 0x88, 0x08, 0x00, 0x00,
++ 0x00, 0x27, 0x14, 0x1f, 0x00, 0x03, 0x72, 0x13,
++ 0x12, 0x13, 0x10, 0x17, 0x2c, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x21, 0x3d, 0x4f, 0x00,
++ 0x1f, 0x00, 0x7f, 0x02, 0x04, 0x3f, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x04, 0x78, 0x38, 0x00,
++ 0xf0, 0x00, 0xfc, 0x20, 0xf0, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x0b, 0x10, 0x10,
++ 0x37, 0x50, 0x10, 0x10, 0x13, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x18, 0xe0, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x08, 0x0d, 0x12, 0x2a, 0x48, 0x3e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x24, 0x27, 0x3a, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x48, 0x78, 0x48, 0x48, 0x78,
++ 0x48, 0x4c, 0x78, 0x88, 0x08, 0x08, 0x00, 0x00,
++ 0x0e, 0x08, 0x7f, 0x5d, 0x5a, 0x2d, 0x52, 0x1f,
++ 0x32, 0x5e, 0x12, 0x1e, 0x12, 0x1f, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x48, 0x48, 0x50, 0x50, 0x30,
++ 0x20, 0x30, 0x50, 0x48, 0x88, 0x04, 0x00, 0x00,
++ 0x12, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x08, 0x0f,
++ 0x02, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0x20, 0xe0,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x3e,
++ 0x15, 0x7f, 0x04, 0x0f, 0x01, 0x3e, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x50, 0xfc, 0x20, 0x40, 0xe0, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x04, 0x7f,
++ 0x1f, 0x11, 0x1f, 0x15, 0x64, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x20, 0x48, 0x08, 0x10, 0x90,
++ 0x24, 0x04, 0x08, 0x08, 0x90, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4b, 0x4a, 0x4a, 0x7a, 0x4f,
++ 0x48, 0x48, 0x78, 0x49, 0x02, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xfc,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x1f,
++ 0x11, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf8,
++ 0x10, 0xa0, 0xc0, 0x44, 0x34, 0x0c, 0x00, 0x00,
++ 0x12, 0x09, 0x09, 0x3f, 0x20, 0x41, 0x01, 0x7f,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x08, 0x00, 0x00, 0xfc,
++ 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x00, 0x00, 0x0f, 0x01, 0x01, 0x7f, 0x05,
++ 0x05, 0x09, 0x11, 0x61, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x80, 0x00, 0x00, 0x08, 0x88, 0x90, 0x60,
++ 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x43, 0x20, 0x20, 0x07, 0x10,
++ 0x11, 0x11, 0x22, 0x24, 0x40, 0x40, 0x00, 0x00,
++ 0xc0, 0x20, 0x00, 0xc0, 0x48, 0x48, 0xf0, 0xe0,
++ 0x50, 0x50, 0x48, 0x44, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x22, 0x23, 0x02, 0x0b,
++ 0x0a, 0x08, 0x10, 0x10, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x30, 0x20, 0xd4, 0x0c, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x11, 0x10, 0x13, 0x7e, 0x12,
++ 0x17, 0x10, 0x1c, 0x60, 0x03, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0x40, 0xf8, 0x48, 0x48,
++ 0xfc, 0x40, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x04, 0x04, 0x0f, 0x0c, 0x13, 0x22,
++ 0x4c, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x40, 0xf8, 0x88, 0x08, 0x88,
++ 0x70, 0xf0, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x20, 0x25, 0x38, 0x22, 0x1c, 0x02, 0x3c, 0x08,
++ 0x7e, 0x18, 0x1c, 0x2a, 0x48, 0x0b, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x20, 0x25, 0x38, 0x22, 0x1e, 0x00, 0x3e, 0x00,
++ 0x7f, 0x0c, 0x2a, 0x2a, 0x48, 0x1b, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x01, 0x1f, 0x11, 0x11,
++ 0x11, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x10, 0x10,
++ 0x10, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x11, 0x17, 0x22, 0x4f, 0x08, 0x17, 0x14, 0x37,
++ 0x51, 0x17, 0x15, 0x1f, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xb8, 0x80, 0xc0, 0x7c, 0x90, 0x90, 0x90,
++ 0x10, 0x90, 0x10, 0xd0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3c, 0x01, 0x3c,
++ 0x00, 0x3c, 0x25, 0x26, 0x3c, 0x20, 0x00, 0x00,
++ 0x40, 0x20, 0x20, 0xe0, 0x28, 0x28, 0xf0, 0x70,
++ 0xb0, 0xa8, 0x28, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0xf8, 0x88, 0x88, 0x88, 0xf8,
++ 0x50, 0x50, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x41, 0x21, 0x22, 0x02, 0x16,
++ 0x1b, 0x12, 0x22, 0x22, 0x42, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x78, 0x48, 0xa8, 0x98,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x29, 0x29, 0x09, 0x1a,
++ 0x2f, 0x49, 0x10, 0x10, 0x21, 0x4e, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xe0, 0x24, 0x24, 0x1c,
++ 0xf0, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x7f, 0x08, 0x08, 0x10, 0x1f,
++ 0x2a, 0x4a, 0x0a, 0x0a, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xfc, 0x20, 0x20, 0x10, 0xf0,
++ 0xa8, 0xa4, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3a, 0x33, 0x45, 0x1a, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0xa8, 0xa0,
++ 0xa0, 0x90, 0x90, 0x08, 0x08, 0x04, 0x00, 0x00,
++ 0x11, 0x10, 0x10, 0x1b, 0x36, 0x36, 0x33, 0x52,
++ 0x10, 0x11, 0x11, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xf8, 0x08, 0x08, 0xf8, 0xa8,
++ 0xa0, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3d, 0x01, 0x7f, 0x01, 0x3d, 0x00, 0x3d,
++ 0x03, 0x3d, 0x25, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x80, 0xf8,
++ 0x28, 0xc8, 0x28, 0xe8, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x09, 0x09, 0x7f, 0x09, 0x29,
++ 0x2f, 0x29, 0x3b, 0x28, 0x46, 0x41, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0x28, 0x28, 0x30,
++ 0x50, 0x94, 0x2c, 0x44, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x24, 0x22,
++ 0x27, 0x24, 0x27, 0x22, 0x24, 0x28, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x48, 0x88,
++ 0xc8, 0x48, 0xc8, 0x88, 0xa8, 0x78, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x28, 0x4b, 0x08, 0x09, 0x0e, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x08, 0xf8, 0xf8, 0x08,
++ 0xf8, 0xf8, 0x90, 0x60, 0xb0, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x2f, 0x29, 0x2f, 0x2f, 0x20,
++ 0x2f, 0x29, 0x2f, 0x2f, 0x29, 0x4b, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x28, 0x24, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x70, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3f,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x2f, 0x21, 0x3f, 0x27, 0x24,
++ 0x27, 0x23, 0x2d, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xe8, 0x08, 0xf8, 0xc8, 0x48,
++ 0xe8, 0xa8, 0x48, 0x28, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x12, 0x7e, 0x12, 0x12, 0x12,
++ 0x16, 0x1b, 0x62, 0x02, 0x02, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x20, 0xfc, 0xd0, 0x30, 0xc8, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x0d, 0x71, 0x1f, 0x11,
++ 0x1f, 0x11, 0x1f, 0x11, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x60, 0x1c, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x14, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x01, 0x7f, 0x04, 0x0e, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0x00, 0xfc, 0x40, 0x80, 0xc0, 0x30, 0x00, 0x00,
++ 0x00, 0x78, 0x0b, 0x10, 0x10, 0x3d, 0x05, 0x25,
++ 0x25, 0x15, 0x1b, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0x1c, 0xe0, 0x20, 0x20, 0x20, 0x38, 0x20,
++ 0x20, 0x20, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x11, 0x2a, 0x46, 0x04, 0x18,
++ 0x61, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0xb0, 0x84, 0x7c,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x11, 0x12, 0x1f, 0x12,
++ 0x33, 0x52, 0x13, 0x12, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x50, 0x48, 0xfc, 0x48,
++ 0xf8, 0x48, 0xf8, 0x48, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x11, 0x13, 0x10, 0x1f,
++ 0x71, 0x11, 0x12, 0x14, 0x18, 0x33, 0x00, 0x00,
++ 0x08, 0x30, 0xc8, 0x48, 0x10, 0xf8, 0x80, 0xfc,
++ 0x00, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x09, 0x41, 0x21, 0x22, 0x02, 0x17,
++ 0x12, 0x12, 0x22, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0xe0, 0x20, 0x20, 0x20, 0x10, 0x10, 0x08, 0xf4,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x44, 0x2f, 0x20, 0x03, 0x12,
++ 0x13, 0x12, 0x23, 0x20, 0x43, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xfc, 0x40, 0xf8, 0x48,
++ 0xf8, 0x48, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x13, 0x02, 0x0c, 0x31, 0x01,
++ 0x11, 0x13, 0x22, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x00, 0xc0, 0x30, 0x08, 0x10,
++ 0x10, 0x20, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x0a, 0x2b, 0x2c, 0x29, 0x49,
++ 0x09, 0x0d, 0x13, 0x13, 0x21, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x10, 0x20, 0x78, 0x48,
++ 0x48, 0x78, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x17, 0x36, 0x3a, 0x33, 0x52,
++ 0x18, 0x17, 0x24, 0x20, 0x47, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0x48,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x0f, 0x78, 0x0b, 0x1a,
++ 0x6a, 0x0b, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xe4, 0x28, 0xb0, 0xa0,
++ 0xa4, 0x9c, 0x90, 0x48, 0x44, 0x04, 0x00, 0x00,
++ 0x08, 0x4b, 0x30, 0x17, 0x30, 0x49, 0x09, 0x19,
++ 0x28, 0x4f, 0x09, 0x09, 0x31, 0x16, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0,
++ 0xc8, 0x48, 0x30, 0x10, 0xc8, 0x04, 0x00, 0x00,
++ 0x10, 0x11, 0x14, 0x65, 0x18, 0x1b, 0x24, 0x7c,
++ 0x13, 0x38, 0x37, 0x34, 0x53, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xfc, 0x40, 0xe4,
++ 0x68, 0xb0, 0x70, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x14, 0x7f, 0x55, 0x7f, 0x55, 0x7f, 0x00, 0x7f,
++ 0x3e, 0x22, 0x3e, 0x24, 0x1e, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0x78, 0x90, 0x20, 0xf8, 0xa8, 0xa8,
++ 0xf8, 0x88, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x1e, 0x12,
++ 0x22, 0x54, 0x0c, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x88, 0x88,
++ 0x88, 0xb0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x21, 0x27, 0x3f, 0x24,
++ 0x27, 0x23, 0x2e, 0x22, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x08, 0xc8, 0xf8, 0x48,
++ 0xe8, 0xa8, 0x48, 0x28, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x23, 0x10, 0x17, 0x00, 0x03, 0x72, 0x13,
++ 0x10, 0x11, 0x1e, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x00, 0xf8, 0x08, 0xf8,
++ 0x88, 0xd0, 0xb0, 0x88, 0x80, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x70, 0x10, 0x90, 0x90, 0x88, 0x08, 0x04, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x1f, 0x72, 0x0c, 0x1a, 0x6f, 0x0b, 0x0f,
++ 0x0f, 0x08, 0x0f, 0x15, 0x25, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xb0, 0x84, 0xfc, 0xc0, 0xc0,
++ 0xf8, 0x00, 0xf8, 0x48, 0x28, 0x30, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x12, 0x7f, 0x15, 0x11, 0x10,
++ 0x17, 0x1a, 0x62, 0x02, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x0f, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x42, 0x0c, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x50, 0x50, 0x88, 0x44, 0x20,
++ 0x20, 0x00, 0x40, 0x20, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x40, 0x27, 0x20, 0x00, 0x09,
++ 0x09, 0x08, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0xfc, 0x80, 0x80, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x08, 0x2b, 0x2a, 0x3e, 0x2b, 0x4a, 0x0a, 0x3f,
++ 0x08, 0x0b, 0x0c, 0x18, 0x61, 0x06, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x48, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x24, 0x24, 0x24, 0x27,
++ 0x24, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x48, 0x48, 0x48, 0xc8,
++ 0x48, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x11, 0x11, 0x11, 0x11,
++ 0x7f, 0x03, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10,
++ 0xfc, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x02, 0x1f, 0x19, 0x15, 0x15, 0x1f, 0x13,
++ 0x15, 0x19, 0x7f, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x50, 0x50, 0x90, 0xf0, 0x90,
++ 0x50, 0x30, 0xfc, 0x80, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x10, 0x27, 0x44, 0x08, 0x08, 0x1b,
++ 0x28, 0x48, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x80, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x10, 0x11, 0x11, 0x15,
++ 0x15, 0x15, 0x29, 0x29, 0x41, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0x40, 0x20, 0x20, 0x08,
++ 0x04, 0x04, 0x04, 0x10, 0x10, 0xf0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x13, 0x12, 0x12, 0x1f,
++ 0x72, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x44, 0x44, 0x44, 0x7c, 0x47, 0x44,
++ 0x44, 0x7c, 0x44, 0x40, 0x07, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x17, 0x10, 0x3b, 0x36,
++ 0x37, 0x52, 0x53, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0xa0, 0xa0, 0xf8, 0xa0, 0xfc, 0x40, 0xf8, 0x48,
++ 0xf8, 0x48, 0xf8, 0xa0, 0x10, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x22, 0x32, 0x2b, 0x24, 0x26,
++ 0x2a, 0x29, 0x31, 0x20, 0x3f, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x22, 0x32, 0x2a, 0x25, 0x24,
++ 0x2a, 0x2a, 0x30, 0x20, 0x3e, 0x23, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x50, 0x54, 0x94, 0x0c, 0xf8,
++ 0x48, 0x50, 0x30, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x1f, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x05, 0x04, 0x19, 0x61, 0x02, 0x3f, 0x00, 0x7f,
++ 0x22, 0x12, 0x06, 0x1a, 0x63, 0x06, 0x00, 0x00,
++ 0xe0, 0x20, 0x10, 0xcc, 0x60, 0x90, 0x00, 0xf8,
++ 0x88, 0x48, 0x18, 0x68, 0x88, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7f, 0x0a, 0x0b, 0x16, 0x1b,
++ 0x36, 0x57, 0x10, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x58, 0xe8, 0xf8, 0xe8, 0x58,
++ 0x48, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x12, 0x09, 0x3f, 0x22, 0x4f, 0x08, 0x0f, 0x0f,
++ 0x0f, 0x08, 0x0f, 0x29, 0x24, 0x40, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0xe0,
++ 0xfc, 0x00, 0xf8, 0x48, 0xa8, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x22, 0x22, 0x32, 0x2c, 0x24,
++ 0x26, 0x2a, 0x30, 0x21, 0x3f, 0x22, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x7f, 0x01, 0x1f, 0x11,
++ 0x1f, 0x11, 0x1f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x24, 0x24, 0x3f, 0x21, 0x29,
++ 0x29, 0x29, 0x2f, 0x28, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x88, 0xf8, 0x08, 0x28,
++ 0x28, 0x28, 0xe8, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x43, 0x22, 0x22, 0x02, 0x0a,
++ 0x0b, 0x0a, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x04, 0x34, 0x08, 0x18,
++ 0x65, 0x0d, 0x14, 0x64, 0x05, 0x1a, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x20, 0x28, 0xa8, 0xb0,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x17, 0x10, 0x31, 0x51, 0x11,
++ 0x11, 0x11, 0x15, 0x15, 0x19, 0x10, 0x00, 0x00,
++ 0x40, 0xf8, 0xa0, 0xfc, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x48, 0x24, 0x14, 0xf0, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x11, 0x12,
++ 0x1f, 0x10, 0x27, 0x20, 0x5f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8, 0x40, 0x30,
++ 0xc8, 0x80, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x17, 0x38, 0x35, 0x35, 0x51,
++ 0x11, 0x11, 0x15, 0x15, 0x19, 0x10, 0x00, 0x00,
++ 0x40, 0xf8, 0x10, 0xfc, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x48, 0x24, 0x14, 0xf0, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x27, 0x3c, 0x25, 0x25, 0x3d,
++ 0x25, 0x25, 0x24, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x20, 0xfc, 0x90, 0xfc, 0x00, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0xa8, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x13, 0x12, 0x3a, 0x37,
++ 0x36, 0x52, 0x53, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x60, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x08, 0x08, 0x28, 0x28, 0x3e, 0x29, 0x28, 0x48,
++ 0x0e, 0x78, 0x08, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08,
++ 0x10, 0x20, 0x20, 0x20, 0x1f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0x08, 0xf8, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x11, 0x12, 0x34, 0x5f, 0x14,
++ 0x17, 0x14, 0x17, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x40, 0xa0, 0x98, 0xf4, 0x90,
++ 0xf0, 0x90, 0xf0, 0x94, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x24, 0x44, 0x7f, 0x04, 0x27,
++ 0x24, 0x24, 0x27, 0x3c, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x48, 0xc8, 0x48, 0x48,
++ 0x48, 0x48, 0x70, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x12, 0x1c, 0x1f,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xd0, 0x30, 0xf0,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x02, 0x10,
++ 0x17, 0x15, 0x25, 0x25, 0x4f, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00,
++ 0xf8, 0x28, 0x28, 0x28, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x1b, 0x72, 0x11, 0x11, 0x7c, 0x11, 0x18,
++ 0x35, 0x34, 0x52, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x18, 0xe8, 0x48, 0x10, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xa8, 0x84, 0x94, 0x70, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x08, 0x04, 0x7f, 0x00, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x20, 0x40, 0xfc, 0x00, 0xe0,
++ 0x20, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10,
++ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x08, 0x08, 0x18, 0x28, 0x48,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0x88, 0x88, 0x90, 0xa0, 0xc0, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x32, 0x52, 0x12,
++ 0x12, 0x12, 0x14, 0x14, 0x19, 0x16, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x10, 0x13, 0x32, 0x52, 0x12,
++ 0x13, 0x12, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xc8, 0x48, 0x48, 0x48,
++ 0xc8, 0x48, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x0a, 0x0a, 0x0a, 0x1f, 0x12, 0x32, 0x52, 0x12,
++ 0x12, 0x12, 0x14, 0x14, 0x19, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x38, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xb8, 0xa8, 0x00, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x10, 0x10, 0x33, 0x52, 0x12,
++ 0x12, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x13, 0x10, 0x30, 0x57, 0x10,
++ 0x10, 0x13, 0x10, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7f, 0x09, 0x09, 0x09,
++ 0x09, 0x09, 0x11, 0x11, 0x21, 0x46, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7c, 0x44, 0x44, 0x44, 0x44,
++ 0x44, 0x44, 0x44, 0x7c, 0x44, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x00, 0x1f, 0x11, 0x11, 0x11,
++ 0x1f, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x00, 0x0f, 0x08, 0x0f,
++ 0x04, 0x7f, 0x04, 0x3f, 0x09, 0x33, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xe0, 0x20, 0xe0,
++ 0x40, 0xfc, 0x00, 0x78, 0x48, 0x78, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x0f, 0x08, 0x0f, 0x0f, 0x08,
++ 0x0f, 0x07, 0x3c, 0x03, 0x06, 0x78, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x40, 0x80, 0xe0, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x12, 0x7f, 0x24, 0x24, 0x27,
++ 0x78, 0x4b, 0x0c, 0x17, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xfc, 0x40, 0xe4, 0x68,
++ 0xb0, 0x70, 0xa8, 0x24, 0x20, 0xc0, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x7f, 0x02, 0x0d, 0x33,
++ 0x0d, 0x32, 0x04, 0x18, 0x60, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xf8, 0x00, 0x48, 0xc8,
++ 0xb0, 0xa0, 0x90, 0x88, 0x84, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x2f, 0x42, 0x0f, 0x08, 0x0f, 0x0f,
++ 0x0f, 0x7f, 0x0f, 0x72, 0x04, 0x19, 0x00, 0x00,
++ 0x00, 0xfc, 0xe8, 0x00, 0xe0, 0x20, 0xe0, 0xe0,
++ 0xe0, 0xfc, 0xe0, 0x5c, 0x40, 0x80, 0x00, 0x00,
++ 0x02, 0x0c, 0x38, 0x08, 0x09, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2b, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x90, 0x50, 0x50, 0x10, 0x90, 0x90, 0x1c,
++ 0x70, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x07, 0x74, 0x54, 0x57, 0x54, 0x74, 0x57,
++ 0x54, 0x54, 0x77, 0x54, 0x44, 0x04, 0x00, 0x00,
++ 0x00, 0xb8, 0x88, 0x88, 0xb8, 0x88, 0x00, 0x78,
++ 0x48, 0x28, 0x30, 0x10, 0x28, 0xc4, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x1f, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x7e, 0x12, 0x12, 0x22, 0x4d, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x3a, 0x2a, 0x3a, 0x03, 0x7f,
++ 0x02, 0x3a, 0x2a, 0x3a, 0x2b, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa8, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x40, 0x23, 0x22, 0x02, 0x02,
++ 0x0b, 0x0a, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xc8, 0x48, 0x48, 0x48,
++ 0xc8, 0x48, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x11, 0x11, 0x11, 0x21, 0x22,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x08, 0x10, 0x20, 0x80, 0x80,
++ 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x7c, 0x10, 0x11, 0x11, 0x7d, 0x11,
++ 0x11, 0x11, 0x1c, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xe8, 0x28, 0x28, 0x28,
++ 0xe8, 0x28, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x09, 0x13, 0x1a,
++ 0x36, 0x56, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x70, 0x50, 0x50, 0xf8, 0x08,
++ 0xe8, 0xa8, 0xe8, 0xa8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x01, 0x03,
++ 0x05, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x80,
++ 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x18, 0x73, 0x12, 0x17, 0x7c, 0x10, 0x3b,
++ 0x34, 0x57, 0x50, 0x13, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xf8, 0x40, 0xe4, 0x68,
++ 0xb0, 0x70, 0xa8, 0x24, 0x20, 0xc0, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x21, 0x2f, 0x21,
++ 0x27, 0x24, 0x27, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x10, 0xf8, 0x08, 0xe8, 0x08,
++ 0xc8, 0x48, 0xc8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x04, 0x04, 0x08, 0x08,
++ 0x18, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x80, 0x88, 0x90,
++ 0xe0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x7f, 0x00, 0x1f,
++ 0x11, 0x11, 0x1f, 0x11, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x14, 0x10, 0x7e, 0x12,
++ 0x12, 0x12, 0x12, 0x22, 0x22, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xf8, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x0b, 0x10, 0x13,
++ 0x32, 0x52, 0x13, 0x12, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x10, 0xd0,
++ 0x50, 0x50, 0xd0, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x09, 0x7f, 0x09,
++ 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x20, 0xfc, 0x20,
++ 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x55, 0x55, 0x55, 0x7d,
++ 0x51, 0x19, 0x15, 0x1d, 0x65, 0x01, 0x00, 0x00,
++ 0x00, 0xd8, 0x48, 0x48, 0xd8, 0x08, 0x00, 0xf8,
++ 0x28, 0x28, 0xd0, 0x10, 0x28, 0x44, 0x00, 0x00,
++ 0x00, 0x3d, 0x01, 0x7f, 0x01, 0x3d, 0x01, 0x3c,
++ 0x03, 0x3c, 0x25, 0x26, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x49, 0x4b, 0x49, 0x4f, 0x49,
++ 0x4b, 0x78, 0x4f, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xf8, 0x50, 0xfc, 0x50,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x04, 0x18, 0x68, 0x08, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x80, 0x8c, 0xf0, 0x84, 0x7c, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x02, 0x22, 0x12, 0x1f, 0x02, 0x02, 0x72, 0x12,
++ 0x14, 0x14, 0x18, 0x1b, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0x00, 0x38, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xb8, 0x28, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x23, 0x12, 0x12, 0x02, 0x07, 0x74, 0x15,
++ 0x15, 0x15, 0x15, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x90, 0xf8, 0x08, 0xe8,
++ 0x28, 0xe8, 0x28, 0x18, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x01, 0x3e,
++ 0x22, 0x3e, 0x3d, 0x20, 0x3c, 0x21, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x00, 0xf8,
++ 0x08, 0xf8, 0xf8, 0x50, 0x70, 0x8c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x01, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x88, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x0f, 0x11, 0x11, 0x3f, 0x51, 0x11,
++ 0x11, 0x13, 0x1d, 0x11, 0x13, 0x11, 0x00, 0x00,
++ 0x60, 0xa8, 0x24, 0x24, 0x20, 0xfc, 0x20, 0xa8,
++ 0x28, 0x10, 0x10, 0x34, 0x4c, 0x04, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x10, 0x54, 0x57, 0x54, 0x54,
++ 0x54, 0x55, 0x7e, 0x44, 0x40, 0x01, 0x00, 0x00,
++ 0x60, 0xa8, 0xa4, 0xa4, 0xa0, 0xfc, 0xa4, 0xa8,
++ 0xd8, 0x90, 0xb0, 0xcc, 0x8c, 0x84, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x08, 0x08, 0x7f, 0x08, 0x08,
++ 0x0e, 0x78, 0x08, 0x08, 0x0b, 0x18, 0x00, 0x00,
++ 0x80, 0x90, 0x88, 0x88, 0x80, 0xfc, 0x88, 0x88,
++ 0x50, 0x50, 0x24, 0xd4, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x08, 0x7f, 0x00,
++ 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x40, 0x40, 0x40, 0x40, 0xfc, 0xc0,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x2f, 0x29, 0x29, 0x2f,
++ 0x29, 0x29, 0x2f, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xe8, 0x28, 0x28, 0xe8,
++ 0x28, 0x28, 0xe8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x3f, 0x21, 0x21, 0x21,
++ 0x3f, 0x24, 0x24, 0x3f, 0x21, 0x02, 0x00, 0x00,
++ 0x20, 0xa0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60,
++ 0x50, 0x50, 0x90, 0x88, 0x08, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x08, 0x08, 0x7f,
++ 0x00, 0x01, 0x06, 0x18, 0x60, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x40, 0x40, 0xfc,
++ 0xc0, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x54, 0x57, 0x54, 0x7c,
++ 0x50, 0x1b, 0x14, 0x1e, 0x60, 0x01, 0x00, 0x00,
++ 0x60, 0xb0, 0xa8, 0xa8, 0xa0, 0xfc, 0xa0, 0xa8,
++ 0xe8, 0xb0, 0x90, 0xb4, 0xcc, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x12, 0x16, 0x2f, 0x48, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x24, 0x24, 0x25, 0x7e, 0x0c, 0x0c,
++ 0x14, 0x14, 0x24, 0x44, 0x04, 0x0c, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0xfc, 0x90, 0x90, 0xfc, 0x90,
++ 0x90, 0xfc, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x17, 0x1a, 0x28, 0x7f, 0x24, 0x3c,
++ 0x24, 0x3f, 0x28, 0x24, 0x3e, 0x61, 0x00, 0x00,
++ 0x20, 0x68, 0xa4, 0xa4, 0xa0, 0xfc, 0xa0, 0xa8,
++ 0xe8, 0x90, 0x94, 0xac, 0xcc, 0x84, 0x00, 0x00,
++ 0x08, 0x7e, 0x12, 0x12, 0x26, 0x5f, 0x11, 0x1f,
++ 0x1f, 0x11, 0x1f, 0x2a, 0x25, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf0, 0x00, 0xe0,
++ 0xe0, 0x00, 0xf8, 0x48, 0x28, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x18, 0x64, 0x04, 0x04,
++ 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0x4c, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x18, 0x67, 0x00, 0x00,
++ 0x3f, 0x02, 0x02, 0x04, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0xcc, 0x00, 0x00,
++ 0xf8, 0x40, 0x20, 0xf0, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x48, 0x3f, 0x2a, 0x2a, 0x3f,
++ 0x2a, 0x3f, 0x22, 0x22, 0x22, 0x46, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x88, 0x30, 0xa0, 0xf8, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x27, 0x24, 0x24, 0x24,
++ 0x24, 0x27, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xc8, 0x48, 0x48, 0x48,
++ 0x48, 0xc8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x12,
++ 0x10, 0x1d, 0x61, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xc8,
++ 0xd0, 0x50, 0x68, 0x7c, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x17, 0x10, 0x13, 0x7e, 0x12, 0x13, 0x10,
++ 0x17, 0x18, 0x63, 0x0d, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xa8, 0xa8, 0xf8, 0x40,
++ 0xfc, 0xc8, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x0a, 0x12, 0x12, 0x3a, 0x0a,
++ 0x4a, 0x2a, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xe8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xe8, 0x08, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x13, 0x38, 0x34, 0x34, 0x53,
++ 0x10, 0x10, 0x10, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xfc,
++ 0x60, 0xa0, 0x90, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x10, 0x38, 0x37, 0x34, 0x50,
++ 0x13, 0x10, 0x10, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0xa0, 0xc0, 0x30, 0x4c, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x1a, 0x35, 0x35, 0x31, 0x57,
++ 0x12, 0x12, 0x17, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x50, 0x50, 0xfc,
++ 0x50, 0x50, 0xfc, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x12, 0x3a, 0x36, 0x36, 0x52,
++ 0x13, 0x12, 0x12, 0x14, 0x1b, 0x1c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x20, 0x28, 0xa8, 0xb0, 0xa0,
++ 0x20, 0x20, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x1b, 0x36, 0x36, 0x33, 0x50,
++ 0x17, 0x10, 0x13, 0x1d, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xa8, 0xa8, 0xf8, 0x40,
++ 0xfc, 0xc8, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7f, 0x00, 0x12, 0x12, 0x12,
++ 0x7f, 0x12, 0x12, 0x22, 0x22, 0x41, 0x00, 0x00,
++ 0x90, 0x88, 0x88, 0xfc, 0x80, 0x88, 0x88, 0x50,
++ 0xd0, 0x20, 0x24, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x13, 0x12, 0x10, 0x1f,
++ 0x70, 0x10, 0x10, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0xf8,
++ 0x88, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x7c, 0x04, 0x04, 0x05, 0x7d, 0x46, 0x40,
++ 0x40, 0x44, 0x44, 0x3c, 0x03, 0x0c, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x10, 0x3e, 0x2b, 0x3e, 0x2a, 0x3e, 0x2d,
++ 0x0d, 0x0d, 0x16, 0x17, 0x24, 0x43, 0x00, 0x00,
++ 0x90, 0x50, 0x50, 0x10, 0x90, 0x90, 0x1c, 0xf0,
++ 0x10, 0x10, 0x90, 0xd4, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x4a, 0x4d, 0x49, 0x79, 0x4f,
++ 0x4a, 0x4a, 0x7b, 0x4a, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x50, 0x50, 0xfc,
++ 0x50, 0x50, 0xfc, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x12, 0x3a, 0x36,
++ 0x37, 0x52, 0x52, 0x14, 0x18, 0x10, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0xa8, 0xa8, 0xa8,
++ 0xf0, 0x90, 0x94, 0xac, 0x4c, 0x84, 0x00, 0x00,
++ 0x11, 0x09, 0x0b, 0x42, 0x25, 0x21, 0x01, 0x1f,
++ 0x12, 0x12, 0x27, 0x24, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x50, 0x50, 0xfc,
++ 0x50, 0x50, 0xfc, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x10, 0x12, 0x12, 0x14,
++ 0x10, 0x11, 0x21, 0x22, 0x4c, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x80, 0x88, 0x88, 0x90, 0xa0,
++ 0x80, 0x40, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x11, 0x02,
++ 0x0c, 0x74, 0x04, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x80,
++ 0x60, 0x5c, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x10, 0x10, 0x1d, 0x62, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x80, 0x98, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0xe0,
++ 0x20, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0d, 0x12, 0x7e,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x74, 0x00, 0x00,
++ 0xfc, 0x40, 0x50, 0x98, 0xe4, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x02, 0x04, 0x1c,
++ 0x64, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x80, 0x40, 0x70,
++ 0x4c, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x1d, 0x28, 0x7e, 0x2b, 0x3e, 0x2b, 0x3f,
++ 0x23, 0x5f, 0x11, 0x1f, 0x01, 0x3f, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x98, 0xa0, 0xf8, 0x20, 0xfc,
++ 0x20, 0xf0, 0x10, 0xf0, 0xf0, 0x08, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x2f,
++ 0x22, 0x3f, 0x22, 0x24, 0x28, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xe8,
++ 0x88, 0xf8, 0x88, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x01, 0x3d, 0x25, 0x29, 0x31, 0x29, 0x26, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x20, 0x24, 0xf8, 0x20, 0x24, 0xbc, 0x40, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x10, 0x1f,
++ 0x10, 0x10, 0x1f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0xf0, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x08, 0x2a, 0x2a, 0x3e, 0x00, 0x7e, 0x00, 0x3e,
++ 0x22, 0x3e, 0x24, 0x14, 0x1f, 0x62, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
++ 0x90, 0x90, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x10, 0x15, 0x64, 0x18, 0x0a,
++ 0x12, 0x24, 0x0c, 0x12, 0x21, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0f, 0x09, 0x11, 0x19, 0x26,
++ 0x42, 0x04, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xc0, 0x40, 0x60, 0x58,
++ 0x44, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x48, 0x4a, 0x49, 0x48, 0x48,
++ 0x48, 0x7b, 0x48, 0x40, 0x03, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x48, 0x90, 0xa0, 0x48,
++ 0x90, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x3f, 0x21, 0x5f, 0x01, 0x1f, 0x01, 0x7f,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x00, 0xf0, 0x00, 0xfc,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x11, 0x1f, 0x00, 0x1f, 0x10, 0x17, 0x10,
++ 0x1f, 0x10, 0x27, 0x20, 0x5f, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0xf0, 0x00, 0xfc, 0x80, 0xf0, 0x80,
++ 0xf8, 0x80, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x15, 0x3f, 0x3d, 0x35, 0x57,
++ 0x15, 0x14, 0x15, 0x16, 0x1c, 0x11, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x50, 0x50, 0x50, 0xfc, 0x10,
++ 0x30, 0xb0, 0xd0, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x7d, 0x17, 0x15, 0x3d, 0x37,
++ 0x36, 0x55, 0x55, 0x16, 0x1c, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x50, 0x50, 0x50, 0xfc, 0x30,
++ 0x30, 0x30, 0xd0, 0xd4, 0x94, 0x0c, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x22, 0x22, 0x03, 0x02,
++ 0x12, 0x12, 0x24, 0x24, 0x4b, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0xf8, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7d, 0x11, 0x11, 0x11, 0x3d, 0x24, 0x65,
++ 0x24, 0x27, 0x3d, 0x20, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0x10, 0xfc, 0x10, 0x90, 0x90, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x1f, 0x01, 0x7f, 0x02, 0x3f,
++ 0x00, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x00, 0xfc, 0x40, 0xf0,
++ 0x08, 0xf0, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x27, 0x49, 0x09, 0x17, 0x11, 0x31,
++ 0x57, 0x11, 0x11, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x00, 0x3c, 0xc0, 0x00, 0x00, 0xfc, 0x08, 0x08,
++ 0xc8, 0x08, 0x08, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7c, 0x00, 0x3d, 0x00, 0x3c,
++ 0x00, 0x3c, 0x25, 0x24, 0x3d, 0x26, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x50, 0x90, 0xa0, 0x68,
++ 0x48, 0x90, 0x30, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x20, 0xa8, 0xa8, 0xf8, 0x00, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0x50, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x23, 0x2e, 0x2a, 0x7f, 0x42, 0x7e,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x27, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x40, 0x50, 0x90, 0xa0, 0x68,
++ 0x48, 0x90, 0x30, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x23, 0x22, 0x02, 0x0b,
++ 0x08, 0x0b, 0x10, 0x10, 0x27, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x3e, 0x2a, 0x3e, 0x27, 0x41,
++ 0x7f, 0x05, 0x1f, 0x67, 0x04, 0x07, 0x00, 0x00,
++ 0x70, 0x54, 0x9c, 0xf0, 0x50, 0x70, 0xcc, 0x00,
++ 0xfc, 0x40, 0xf0, 0xcc, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2b, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0e, 0x73, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x17, 0x10, 0x11, 0x7d, 0x11, 0x11, 0x11,
++ 0x15, 0x19, 0x61, 0x00, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x18, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xfc, 0x24,
++ 0x24, 0x24, 0x24, 0x2c, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0b, 0x0f, 0x72, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xfc, 0xa0, 0xa0, 0xbc,
++ 0xa4, 0xa4, 0x44, 0x44, 0x84, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5e, 0x08, 0x7e,
++ 0x08, 0x2b, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0x48, 0x48, 0xc8,
++ 0xa8, 0xd8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x3f, 0x09, 0x7f, 0x09, 0x3f, 0x3f, 0x7f,
++ 0x3f, 0x29, 0x3f, 0x3f, 0x07, 0x78, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0xc8, 0x48, 0x48, 0x48, 0xc8,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x02, 0x02, 0x7f, 0x52, 0x52, 0x5f, 0x55, 0x55,
++ 0x5d, 0x7d, 0x55, 0x49, 0x09, 0x13, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0x10, 0xfc, 0x28, 0x68,
++ 0xec, 0xac, 0x6c, 0x48, 0x48, 0x98, 0x00, 0x00,
++ 0x02, 0x02, 0x07, 0x0c, 0x12, 0x21, 0x03, 0x0c,
++ 0x7f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x20, 0x40, 0x80, 0x40, 0x30,
++ 0xec, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x10, 0x17, 0x14, 0x17,
++ 0x10, 0x17, 0x21, 0x2f, 0x41, 0x03, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xfc, 0x24, 0xa8, 0xb0, 0xa8,
++ 0x24, 0xa4, 0xa4, 0x38, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x11, 0x11, 0x1d,
++ 0x71, 0x11, 0x12, 0x12, 0x17, 0x38, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x00, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x50, 0x48, 0x7c, 0x84, 0x04, 0x00, 0x00,
++ 0x12, 0x11, 0x13, 0x7e, 0x15, 0x11, 0x11, 0x1d,
++ 0x71, 0x11, 0x11, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0x88, 0x50, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x09, 0x18, 0x1c, 0x1a,
++ 0x2b, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x50, 0x20, 0x50, 0x88,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x09, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x29, 0x48, 0x08, 0x09, 0x0e, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x48, 0x88, 0x50, 0x20,
++ 0x48, 0x90, 0x30, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x00, 0x3f, 0x22,
++ 0x5c, 0x14, 0x14, 0x16, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x54, 0x54, 0x8c, 0x00, 0xf8,
++ 0x88, 0x50, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x09, 0x4f, 0x31, 0x11, 0x33, 0x4d, 0x09, 0x19,
++ 0x29, 0x4b, 0x08, 0x08, 0x30, 0x17, 0x00, 0x00,
++ 0x10, 0xfc, 0x30, 0xfc, 0x20, 0xf8, 0xf8, 0x20,
++ 0xfc, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x11, 0x12, 0x3c, 0x25, 0x67,
++ 0x25, 0x25, 0x3d, 0x25, 0x21, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x90, 0xa0, 0xfc, 0x20,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x0b, 0x70, 0x11, 0x13, 0x7d, 0x11, 0x19,
++ 0x35, 0x37, 0x50, 0x10, 0x10, 0x17, 0x00, 0x00,
++ 0x90, 0xfc, 0xb0, 0xfc, 0x20, 0xf8, 0xf8, 0x20,
++ 0xfc, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x12, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x02, 0x07, 0x18, 0x61, 0x1f, 0x11, 0x1f, 0x11,
++ 0x11, 0x1f, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xe0, 0x80, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x08, 0x08, 0x7f, 0x14, 0x36,
++ 0x35, 0x55, 0x16, 0x24, 0x24, 0x4d, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x50, 0xd0,
++ 0xd8, 0x54, 0x54, 0x90, 0x90, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x09, 0x3e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x50, 0x88, 0x94, 0x90,
++ 0x50, 0x60, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x7f, 0x00, 0x1f, 0x11, 0x1f, 0x00, 0x3f,
++ 0x02, 0x07, 0x7c, 0x04, 0x04, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x23, 0x2e,
++ 0x21, 0x22, 0x3f, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xc8, 0x48,
++ 0x88, 0xc8, 0xf8, 0x48, 0xc8, 0x58, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x29, 0x29, 0x31, 0x28, 0x27,
++ 0x26, 0x27, 0x3a, 0x22, 0x22, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0xa8, 0x38, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x07, 0x01, 0x1f, 0x11,
++ 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xc0, 0x00, 0xf0, 0x10,
++ 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x12, 0x09, 0x09, 0x3f, 0x20, 0x4f, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x40, 0x80,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x7f,
++ 0x01, 0x11, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x20, 0xc0, 0x00, 0x00, 0xf8, 0x40, 0x40, 0xfc,
++ 0x00, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x22, 0x17, 0x14, 0x07, 0x1c, 0x67, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0x08, 0xc8, 0x50, 0xe0, 0x58, 0xc4, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x3f, 0x29, 0x4e, 0x12, 0x34, 0x0c,
++ 0x12, 0x3f, 0x52, 0x12, 0x1e, 0x13, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x77, 0x55, 0x55, 0x77, 0x00, 0x3e, 0x00,
++ 0x7f, 0x10, 0x1e, 0x22, 0x02, 0x0f, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x79, 0x11, 0x17, 0x19, 0x11,
++ 0x37, 0x51, 0x11, 0x11, 0x1e, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0xd0, 0x10, 0x10, 0xf8, 0x14, 0x14,
++ 0xf0, 0x10, 0x10, 0xd0, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x18, 0x25, 0x45, 0x01, 0x3f,
++ 0x00, 0x08, 0x04, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x10, 0x00, 0xf8,
++ 0x20, 0x20, 0x40, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x3a, 0x37,
++ 0x34, 0x53, 0x50, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xe8, 0x50, 0xd0, 0xa8, 0xc4,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x7d, 0x11, 0x19, 0x35, 0x37,
++ 0x31, 0x51, 0x51, 0x11, 0x11, 0x17, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0x50, 0xf0, 0x50, 0xf0, 0xf8,
++ 0xf0, 0x50, 0xf0, 0x50, 0xf0, 0xfc, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x0a, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf0, 0x40, 0xf8,
++ 0x40, 0xfc, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x09, 0x1e, 0x24, 0x7e, 0x2b, 0x3e, 0x2a,
++ 0x3f, 0x05, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x30, 0xd0, 0x90, 0x94, 0xb4, 0xf4, 0xb8, 0xd0,
++ 0xf0, 0xa8, 0xa8, 0xc8, 0xc4, 0x84, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x01, 0x13,
++ 0x16, 0x2a, 0x25, 0x45, 0x48, 0x40, 0x00, 0x00,
++ 0x80, 0x38, 0x08, 0xb8, 0x08, 0xf8, 0x00, 0xfc,
++ 0x24, 0x94, 0x54, 0x44, 0x04, 0x18, 0x00, 0x00,
++ 0x08, 0x7f, 0x49, 0x7f, 0x08, 0x3e, 0x08, 0x7f,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4b, 0x4a, 0x4b, 0x48, 0x49,
++ 0x4e, 0x7b, 0x4a, 0x42, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x80, 0xf8,
++ 0x68, 0x88, 0x08, 0x28, 0xe8, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x18, 0x35, 0x37, 0x34, 0x50,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x17, 0x10, 0x1c,
++ 0x73, 0x12, 0x12, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x40, 0x20, 0x27, 0x00, 0x10,
++ 0x13, 0x12, 0x22, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x01, 0x13,
++ 0x16, 0x1b, 0x22, 0x22, 0x41, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x48, 0x88, 0x08, 0x28, 0xe8, 0x30, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x22, 0x27, 0x04, 0x17,
++ 0x1a, 0x13, 0x22, 0x23, 0x42, 0x42, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x90, 0xfc, 0x04, 0xf8,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x07, 0x18, 0x6f, 0x08, 0x07, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0xf8, 0xc8, 0x08, 0x48, 0xc8, 0x70, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x0b, 0x14, 0x19,
++ 0x37, 0x55, 0x11, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x80, 0xf8,
++ 0x28, 0xc8, 0x08, 0x28, 0xe8, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x09, 0x3f, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x24, 0xf8, 0x20, 0xf8, 0x20,
++ 0xfc, 0x00, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x08,
++ 0x0f, 0x08, 0x08, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x20,
++ 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x1f, 0x25, 0x7f, 0x2b, 0x3f, 0x2b,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x44, 0xf4, 0x28, 0xe8, 0x54, 0xe4,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x48, 0x48, 0x4f, 0x48, 0x48,
++ 0x48, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x7e, 0x08, 0x1c, 0x1a, 0x1b,
++ 0x29, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0x40, 0x64, 0xa4, 0xa8,
++ 0xb0, 0xa0, 0xa0, 0xa4, 0xa4, 0x9c, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x7d, 0x13, 0x19, 0x37, 0x35,
++ 0x33, 0x50, 0x57, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xf8, 0x50, 0xfc, 0x50,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1d, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x88, 0xe8, 0x28, 0x28, 0xe8,
++ 0xb0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x1a, 0x1f, 0x1a,
++ 0x2a, 0x28, 0x49, 0x0a, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xf8, 0x20, 0x20, 0xfc, 0x60,
++ 0x70, 0xb0, 0x28, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x09, 0x37, 0x24, 0x27, 0x24, 0x37, 0x20,
++ 0x04, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x80, 0x00, 0xf8, 0x48, 0xc8, 0x48, 0xd8, 0x08,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x3f, 0x2d, 0x77, 0x3f, 0x0f, 0x0f, 0x09,
++ 0x0f, 0x1f, 0x1f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0xf8, 0xe0, 0xe0, 0x20,
++ 0xe0, 0xf0, 0xf0, 0x14, 0xf4, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x10, 0x0f, 0x48, 0x23,
++ 0x2a, 0x0b, 0x12, 0x13, 0x22, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x50, 0x48, 0xfc, 0x40, 0xf8,
++ 0x48, 0xf8, 0x48, 0xf8, 0x48, 0x58, 0x00, 0x00,
++ 0x02, 0x0c, 0x32, 0x01, 0x02, 0x0c, 0x7f, 0x01,
++ 0x1f, 0x09, 0x05, 0x05, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x30, 0x48, 0x80, 0xc0, 0x30, 0xec, 0x00,
++ 0xf0, 0x20, 0x20, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x10, 0x1b, 0x24, 0x27, 0x78, 0x13, 0x7c,
++ 0x13, 0x54, 0x39, 0x32, 0x1c, 0x60, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xfc, 0xa8,
++ 0xf8, 0xa8, 0xb0, 0xa8, 0xa4, 0xa0, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x4f, 0x4b, 0x4a, 0x4a,
++ 0x4b, 0x7a, 0x4b, 0x42, 0x03, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x40, 0xfc, 0x58, 0xd8, 0xe8,
++ 0xf8, 0xe8, 0x58, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7c, 0x55, 0x55, 0x7d, 0x55, 0x55, 0x7d,
++ 0x55, 0x11, 0x11, 0x12, 0x12, 0x14, 0x00, 0x00,
++ 0x20, 0x40, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xfc, 0x54, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7e, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x08, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x04, 0x03, 0x7f,
++ 0x01, 0x03, 0x05, 0x19, 0x61, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0xc0, 0x00, 0xfc,
++ 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x3f, 0x20, 0x7f, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0x08, 0xf8, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x71, 0x19, 0x15, 0x75, 0x41, 0x4f, 0x71,
++ 0x53, 0x13, 0x15, 0x19, 0x11, 0x61, 0x00, 0x00,
++ 0x00, 0x38, 0x48, 0x48, 0xb8, 0x20, 0xe0, 0x38,
++ 0xa8, 0x48, 0x48, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x22, 0x12, 0x0c, 0x04, 0x06,
++ 0x0a, 0x09, 0x11, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x04, 0x02, 0x22, 0x12,
++ 0x0c, 0x04, 0x0c, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x08, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x04, 0x07, 0x04, 0x04, 0x06,
++ 0x09, 0x09, 0x08, 0x09, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xc0, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0xc4, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x22, 0x3e, 0x22,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0x00, 0xf8, 0x10, 0x20,
++ 0x40, 0x40, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x12, 0x33, 0x50, 0x12,
++ 0x12, 0x12, 0x12, 0x14, 0x14, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x00, 0x90,
++ 0x90, 0x90, 0x90, 0x94, 0x94, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x7e, 0x00, 0x01, 0x7f, 0x14,
++ 0x14, 0x14, 0x14, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x10, 0x10, 0xfc, 0x10, 0x90,
++ 0x90, 0x10, 0x10, 0x34, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x7f, 0x04, 0x1f, 0x04, 0x7f,
++ 0x04, 0x1b, 0x60, 0x06, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0x40, 0xf0, 0x40, 0xfc,
++ 0x40, 0x30, 0x8c, 0x00, 0x80, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x08, 0x08, 0x08, 0x7f, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x12, 0x12, 0x7f, 0x12, 0x1e, 0x12, 0x1e, 0x12,
++ 0x7f, 0x2c, 0x2d, 0x33, 0x3f, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0xc8, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x3f, 0x28, 0x5f, 0x14, 0x3f, 0x64,
++ 0x3f, 0x24, 0x3f, 0x24, 0x3f, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x3f, 0x02, 0x7f, 0x04, 0x1f,
++ 0x60, 0x0f, 0x08, 0x08, 0x08, 0x07, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xf8, 0x80, 0xfc, 0x40, 0xf0,
++ 0x4c, 0xc0, 0x40, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x00, 0x00, 0x79, 0x4a, 0x4f, 0x4a, 0x4a, 0x4a,
++ 0x4b, 0x7a, 0x4f, 0x40, 0x03, 0x0c, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0x40, 0xf8, 0xa8, 0xa8, 0xb8,
++ 0x28, 0x48, 0xfc, 0xa0, 0x18, 0x04, 0x00, 0x00,
++ 0x01, 0x17, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x17,
++ 0x12, 0x1a, 0x63, 0x02, 0x03, 0x02, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0xfc,
++ 0xa0, 0xa8, 0x18, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x04, 0x0e, 0x03, 0x1c, 0x08,
++ 0x7f, 0x12, 0x34, 0x0c, 0x1a, 0x61, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x40, 0x80, 0xc0, 0x30, 0x20,
++ 0xfc, 0x48, 0xd0, 0x30, 0x68, 0x84, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x4f, 0x00, 0x00, 0x7f,
++ 0x04, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xe0, 0x00, 0x00, 0xfc,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x4f, 0x08, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xe0, 0x20, 0x20, 0xe0,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x7f, 0x04, 0x0f, 0x08, 0x0f,
++ 0x0f, 0x08, 0x0f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0x40, 0xe0, 0x20, 0xe0,
++ 0xe0, 0x20, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x7f, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x22, 0x3e, 0x22,
++ 0x3f, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x88, 0x04, 0xf8, 0x20, 0x20,
++ 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x0f, 0x09, 0x0f, 0x01, 0x1f, 0x11, 0x1f,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xf0, 0x10, 0xf0,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x2f, 0x29,
++ 0x4f, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x90, 0x88, 0xfc, 0x88, 0x48, 0x50, 0x20, 0x54,
++ 0x8c, 0x04, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x17, 0x3a, 0x37, 0x37, 0x52,
++ 0x13, 0x13, 0x12, 0x13, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xfc, 0x50, 0xf0, 0xf8, 0x08,
++ 0xf8, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1b, 0x36, 0x37, 0x33, 0x55,
++ 0x18, 0x11, 0x15, 0x15, 0x19, 0x10, 0x00, 0x00,
++ 0x28, 0xfc, 0x20, 0xe8, 0x28, 0xd0, 0x54, 0xec,
++ 0x84, 0x50, 0x48, 0x14, 0x14, 0xf0, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7f, 0x12, 0x12, 0x13, 0x1a,
++ 0x70, 0x17, 0x10, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0xf8, 0xa8, 0xa8, 0x38, 0x58,
++ 0x40, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x04, 0x7f, 0x12, 0x1f, 0x12,
++ 0x1e, 0x13, 0x1e, 0x62, 0x02, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x18, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x88, 0x88, 0x88, 0xfc, 0x88, 0x88, 0x88, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x18, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88,
++ 0x88, 0xf8, 0x88, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x7e, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xf0, 0x10, 0x10, 0xf0,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x00, 0x3f, 0x00,
++ 0x7f, 0x0c, 0x2a, 0x2a, 0x49, 0x1a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa8, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x7f, 0x14, 0x1f, 0x34,
++ 0x5f, 0x14, 0x1f, 0x14, 0x1f, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa8, 0x30, 0x20,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x40, 0x20, 0x20, 0x07, 0x08,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x11, 0x09, 0x0f, 0x41, 0x23, 0x22, 0x03, 0x10,
++ 0x13, 0x10, 0x27, 0x20, 0x41, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x48, 0xf8, 0x40,
++ 0xf8, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x20, 0x1f, 0x19, 0x4f, 0x29, 0x2f, 0x08, 0x0b,
++ 0x1a, 0x1b, 0x2a, 0x2b, 0x4a, 0x48, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x78, 0x48, 0x78, 0x08, 0xe8,
++ 0x28, 0xe8, 0x28, 0xe8, 0x28, 0x18, 0x00, 0x00,
++ 0x11, 0x09, 0x0b, 0x42, 0x27, 0x29, 0x03, 0x12,
++ 0x17, 0x2a, 0x23, 0x42, 0x43, 0x42, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x80, 0xfc, 0x20, 0xfc, 0x20,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x7e, 0x13, 0x10, 0x17, 0x7d, 0x11,
++ 0x11, 0x14, 0x19, 0x66, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x00, 0xfc, 0xf0, 0x10,
++ 0xf8, 0xc8, 0xb0, 0x90, 0x8c, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x08,
++ 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20,
++ 0xe0, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3e, 0x22, 0x3f, 0x24, 0x3f,
++ 0x20, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x80, 0x00, 0x78, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x02, 0x3f, 0x02, 0x7f, 0x04, 0x07,
++ 0x0c, 0x0f, 0x14, 0x27, 0x44, 0x07, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xf8, 0x00, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x25, 0x42, 0x3f, 0x01,
++ 0x01, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x10, 0xf8, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x45, 0x3f, 0x20, 0x4f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x10, 0xfc, 0x08, 0xe0, 0x20,
++ 0xe0, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3e, 0x22, 0x3e, 0x22,
++ 0x3f, 0x24, 0x27, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x10, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x48, 0xc8, 0x48, 0xc8, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x0a, 0x72, 0x17, 0x0c, 0x13, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x29, 0x4a, 0x0b, 0x00, 0x00,
++ 0x1c, 0xe4, 0xa8, 0x50, 0xfc, 0x40, 0xfc, 0x40,
++ 0x78, 0xc8, 0xb0, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x1f, 0x11, 0x21, 0x7f, 0x01,
++ 0x11, 0x11, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x23, 0x3e, 0x23,
++ 0x3e, 0x08, 0x7f, 0x09, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x90, 0x08, 0xfc, 0x48, 0x68,
++ 0xd8, 0xd8, 0x68, 0x68, 0x48, 0xd8, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x24, 0x3c, 0x27, 0x24,
++ 0x3c, 0x24, 0x24, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x11, 0x3d, 0x25, 0x35, 0x2d, 0x2d, 0x7f,
++ 0x24, 0x2d, 0x2d, 0x2d, 0x25, 0x4f, 0x00, 0x00,
++ 0x10, 0xf0, 0x50, 0xfc, 0x30, 0xe0, 0x5c, 0xe0,
++ 0x00, 0xf8, 0x68, 0x68, 0x68, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x01, 0x3f, 0x20, 0x4f,
++ 0x00, 0x3f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x08, 0xe0,
++ 0x00, 0xfc, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x3e, 0x48, 0x7f, 0x14, 0x3f, 0x68,
++ 0x3e, 0x28, 0x3e, 0x28, 0x3f, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x50, 0x50, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7c, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3c, 0x25, 0x26, 0x3c, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x00, 0x0f, 0x09, 0x7f, 0x12, 0x1f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xfc, 0x40, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x27, 0x15, 0x17, 0x00, 0x0f, 0x73, 0x12,
++ 0x13, 0x10, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xf8, 0x00, 0xfc, 0xf0, 0x10,
++ 0xf8, 0xc8, 0xb0, 0x88, 0x80, 0xfc, 0x00, 0x00,
++ 0x10, 0x13, 0x1a, 0x27, 0x26, 0x7b, 0x12, 0x7f,
++ 0x12, 0x55, 0x39, 0x31, 0x1f, 0x60, 0x00, 0x00,
++ 0x10, 0xd0, 0x90, 0xdc, 0x60, 0xc0, 0x9c, 0xc0,
++ 0x00, 0xf8, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x27,
++ 0x24, 0x27, 0x24, 0x27, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xc8,
++ 0x48, 0xc8, 0x48, 0xc8, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x21,
++ 0x2f, 0x23, 0x25, 0x29, 0x21, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x08,
++ 0xe8, 0x88, 0x48, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x24, 0x22,
++ 0x27, 0x21, 0x2f, 0x22, 0x24, 0x28, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x48, 0x88,
++ 0xc8, 0x08, 0xe8, 0x88, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x28, 0x31, 0x2a, 0x25, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x90, 0x10, 0x20, 0x78, 0x48,
++ 0x48, 0x78, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x09, 0x3e, 0x22, 0x3e, 0x22,
++ 0x3e, 0x08, 0x7e, 0x09, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0xf8, 0x28, 0xfc, 0x00, 0xf8, 0x88, 0xf8,
++ 0x10, 0xf8, 0x90, 0xfc, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x1b, 0x28, 0x7e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x24, 0x26, 0x39, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0xf0, 0x90, 0x90, 0xf0,
++ 0x80, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x22, 0x7e, 0x08, 0x7e,
++ 0x08, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0xf0, 0x90, 0x90, 0xf0,
++ 0x80, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x02, 0x7f, 0x02, 0x02, 0x1a,
++ 0x06, 0x05, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0xc4, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x1f, 0x60, 0x1f, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0xf0, 0x0c, 0xe0, 0x40,
++ 0x80, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x1f, 0x00, 0x1f, 0x10, 0x17,
++ 0x10, 0x10, 0x2f, 0x20, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0xf0,
++ 0x80, 0x80, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x01, 0x11, 0x1f, 0x09, 0x3f, 0x2f, 0x22, 0x3f,
++ 0x29, 0x2f, 0x2f, 0x2f, 0x39, 0x41, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x10, 0xfc, 0x20, 0x20, 0xbc,
++ 0x48, 0xa8, 0x10, 0xb0, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x01, 0x7c, 0x10, 0x10, 0x13, 0x7c, 0x10,
++ 0x10, 0x11, 0x1d, 0x62, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0xa0, 0xa0,
++ 0xa0, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x49, 0x29, 0x29, 0x0f, 0x1c,
++ 0x2f, 0x4c, 0x12, 0x12, 0x23, 0x42, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0xbc, 0xa4,
++ 0xbc, 0x44, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x79, 0x49, 0x49, 0x79, 0x49, 0x49, 0x79,
++ 0x49, 0x49, 0x79, 0x49, 0x41, 0x06, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf8,
++ 0x48, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x1f, 0x00, 0x7f, 0x04, 0x04,
++ 0x0f, 0x0c, 0x14, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x4c, 0x2a, 0x1b, 0x6c, 0x19, 0x08,
++ 0x3f, 0x21, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x80, 0x80, 0x80, 0xfc, 0xb0, 0x30,
++ 0x30, 0x30, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x14, 0x1d, 0x16, 0x14, 0x13,
++ 0x13, 0x13, 0x22, 0x23, 0x43, 0x1c, 0x00, 0x00,
++ 0x00, 0xfc, 0x90, 0xfc, 0xf8, 0xf8, 0xfc, 0xf0,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x12, 0x14, 0x14, 0x1d, 0x16,
++ 0x14, 0x14, 0x24, 0x24, 0x44, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x50, 0xfc, 0x90, 0x90, 0xf8,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x00, 0x01, 0x3e, 0x00, 0x00, 0x7f, 0x14, 0x14,
++ 0x14, 0x15, 0x23, 0x20, 0x41, 0x06, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x22, 0x14, 0x3f, 0x24, 0x28,
++ 0x32, 0x24, 0x39, 0x22, 0x4c, 0x33, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x24, 0x2f, 0x29, 0x2f, 0x29,
++ 0x2f, 0x26, 0x2d, 0x35, 0x44, 0x0d, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x20, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x19, 0x61, 0x01, 0x09,
++ 0x09, 0x09, 0x09, 0x09, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x10, 0x30, 0x53, 0x11,
++ 0x11, 0x10, 0x10, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x08,
++ 0x10, 0x90, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x02, 0x07, 0x18, 0x61, 0x1f, 0x10, 0x13, 0x12,
++ 0x12, 0x12, 0x12, 0x22, 0x22, 0x41, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0x00, 0xfc, 0x00, 0xf0, 0x10,
++ 0x10, 0x10, 0x60, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x00, 0x0f, 0x08, 0x0f,
++ 0x04, 0x7f, 0x00, 0x1f, 0x10, 0x1f, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xe0, 0x20, 0xe0,
++ 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0x00,
++ 0x00, 0x1e, 0x12, 0x12, 0x1e, 0x01, 0x7f, 0x04,
++ 0x18, 0x7e, 0x12, 0x12, 0x1e, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0xf0, 0x00, 0xfc, 0x40,
++ 0x30, 0xfc, 0x90, 0x90, 0xf0, 0x90, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x07, 0x04, 0x07, 0x04, 0x7f,
++ 0x09, 0x1f, 0x61, 0x01, 0x3f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xc0, 0x40, 0xc0, 0x40, 0xfc,
++ 0x20, 0xf0, 0x0c, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x02, 0x04, 0x18, 0x7f, 0x00,
++ 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x80, 0x40, 0x20, 0xfc, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x13, 0x7d, 0x25, 0x25, 0x24,
++ 0x7b, 0x48, 0x0d, 0x15, 0x21, 0x41, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xf8, 0x08, 0xf8, 0x90,
++ 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x21, 0x5f, 0x02, 0x0c, 0x7f,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xf8, 0x40, 0x20, 0xfc,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x17, 0x54, 0x54, 0x57, 0x55,
++ 0x54, 0x7c, 0x44, 0x40, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x08,
++ 0x90, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x06, 0x01, 0x07, 0x39, 0x02, 0x7f, 0x04, 0x0f,
++ 0x18, 0x28, 0x48, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x20, 0xc0, 0x60, 0x10, 0x00, 0xfc, 0x80, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xb0, 0x80, 0x00, 0x00,
++ 0x11, 0x15, 0x65, 0x19, 0x0d, 0x13, 0x7f, 0x01,
++ 0x3f, 0x08, 0x0c, 0x12, 0x21, 0x46, 0x00, 0x00,
++ 0x20, 0x28, 0xc8, 0x30, 0x30, 0x48, 0xfc, 0x10,
++ 0xfc, 0x90, 0xa0, 0x44, 0xb4, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x0f,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x08, 0xf8,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x10, 0x13, 0x12, 0x1f,
++ 0x72, 0x13, 0x10, 0x17, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x49, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
++ 0x90, 0x90, 0x10, 0x14, 0x14, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x13, 0x10, 0x1c, 0x14,
++ 0x14, 0x14, 0x27, 0x24, 0x44, 0x1b, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x90, 0xfc, 0x90, 0xf0, 0x90,
++ 0xf0, 0x90, 0xfc, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x23, 0x3e,
++ 0x28, 0x24, 0x26, 0x3a, 0x61, 0x02, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0x50, 0x50, 0x50, 0xfc, 0x30,
++ 0x30, 0x50, 0x50, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x7f, 0x12, 0x1e, 0x12, 0x1e,
++ 0x12, 0x7f, 0x14, 0x12, 0x22, 0x41, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0xc8, 0x78, 0x48, 0x48, 0x78,
++ 0x48, 0xc8, 0x48, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x2b, 0x48, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0xfc, 0x90, 0xf0, 0x90, 0xf0,
++ 0x90, 0xfc, 0x90, 0x88, 0x04, 0x04, 0x00, 0x00,
++ 0x01, 0x7f, 0x02, 0x1f, 0x09, 0x7f, 0x09, 0x0f,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xe0, 0x30, 0xfc, 0x20, 0xe0,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x16, 0x7e, 0x11, 0x1a, 0x37, 0x34,
++ 0x33, 0x52, 0x53, 0x14, 0x14, 0x18, 0x00, 0x00,
++ 0x48, 0x48, 0xf4, 0xd4, 0x48, 0xd4, 0xfc, 0x50,
++ 0xfc, 0x28, 0x28, 0x90, 0x3c, 0xc4, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x09, 0x28, 0x2b, 0x28, 0x4f,
++ 0x0c, 0x0b, 0x0a, 0x12, 0x12, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00, 0xfc,
++ 0x44, 0xf8, 0x48, 0x48, 0x58, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x12, 0x0c, 0x7f, 0x19, 0x6d,
++ 0x16, 0x6d, 0x15, 0x64, 0x04, 0x1b, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x50, 0x54, 0x94, 0x0c, 0xf8,
++ 0x48, 0x50, 0x30, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x10, 0x2f, 0x40, 0x3f, 0x01,
++ 0x01, 0x1a, 0x06, 0x05, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xe0, 0x00, 0xe0, 0x20,
++ 0x20, 0x20, 0x14, 0x14, 0x0c, 0x04, 0x00, 0x00,
++ 0x11, 0x09, 0x0b, 0x42, 0x25, 0x20, 0x07, 0x00,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xf0, 0x10,
++ 0x10, 0x10, 0x14, 0x0c, 0x0c, 0x04, 0x00, 0x00,
++ 0x11, 0x15, 0x65, 0x19, 0x15, 0x7f, 0x02, 0x7f,
++ 0x3e, 0x2a, 0x3e, 0x2a, 0x3e, 0x21, 0x00, 0x00,
++ 0x20, 0x28, 0xc8, 0x30, 0x28, 0xfc, 0xa4, 0xfc,
++ 0x88, 0x48, 0x50, 0x20, 0x54, 0x8c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x04, 0x08, 0x0c, 0x1a,
++ 0x2a, 0x48, 0x09, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x6f,
++ 0x00, 0x01, 0x7f, 0x01, 0x01, 0x07, 0x00, 0x00,
++ 0x60, 0x80, 0x00, 0xfc, 0x80, 0x40, 0x30, 0xec,
++ 0x40, 0x80, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x02, 0x0c, 0x38, 0x09, 0x08, 0x7f, 0x08, 0x1c,
++ 0x1b, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0xd0, 0x30, 0xc8, 0x40, 0xfc, 0xa0, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xb8, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7d,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x88, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x12, 0x1a, 0x2a, 0x4f, 0x14, 0x15, 0x3d, 0x62,
++ 0x25, 0x3f, 0x2a, 0x2b, 0x32, 0x22, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa0, 0x7c, 0x48, 0xc8, 0x28,
++ 0x28, 0xb0, 0x90, 0x30, 0xc8, 0x84, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x3f, 0x09, 0x09, 0x7f, 0x09,
++ 0x09, 0x08, 0x15, 0x15, 0x22, 0x44, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0xf8,
++ 0xa8, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x7f, 0x00, 0x3e, 0x00, 0x3e,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x88, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x0f, 0x09, 0x0f, 0x7f, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0xfc, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x08, 0x08, 0x7f, 0x08, 0x28,
++ 0x2f, 0x28, 0x38, 0x28, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x88, 0x80,
++ 0x80, 0x84, 0x84, 0x7c, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x70, 0xd0, 0x50, 0x50, 0x50,
++ 0x50, 0x50, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x08, 0x09, 0x4b, 0x2b, 0x2c, 0x08, 0x7f, 0x14,
++ 0x14, 0x15, 0x16, 0x25, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x28, 0xfc, 0x20, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1a, 0x28, 0x7e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x28, 0x25, 0x3b, 0x62, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
++ 0x90, 0x90, 0x90, 0x14, 0x14, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x3e, 0x28, 0x3e, 0x29, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x50, 0x88, 0xfc, 0x08,
++ 0xe8, 0xa8, 0xe8, 0xa8, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x02, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x15,
++ 0x05, 0x05, 0x09, 0x09, 0x11, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10,
++ 0x20, 0x20, 0x50, 0xfc, 0x04, 0xfc, 0x00, 0x00,
++ 0x02, 0x03, 0x0c, 0x7f, 0x09, 0x0f, 0x0f, 0x1f,
++ 0x11, 0x1f, 0x11, 0x1f, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x80, 0xe0, 0x20, 0xe0, 0xe0, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf4, 0x04, 0xfc, 0x00, 0x00,
++ 0x0a, 0x09, 0x09, 0x17, 0x10, 0x30, 0x51, 0x11,
++ 0x13, 0x15, 0x1c, 0x12, 0x12, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf0, 0x90, 0x90, 0xf8, 0x08,
++ 0xfc, 0x54, 0xac, 0x84, 0x04, 0x18, 0x00, 0x00,
++ 0x09, 0x08, 0x0f, 0x10, 0x13, 0x30, 0x57, 0x13,
++ 0x11, 0x1f, 0x11, 0x17, 0x11, 0x13, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0xa8,
++ 0x24, 0xfc, 0xa8, 0x10, 0x6c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x08, 0x7e, 0x13, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x11, 0x22, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x88, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x4f, 0x08, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xc0, 0x40, 0x40, 0xc0,
++ 0x40, 0xc0, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x07, 0x04, 0x3f, 0x27, 0x3d, 0x23, 0x2a,
++ 0x2a, 0x3b, 0x3a, 0x2b, 0x4c, 0x30, 0x00, 0x00,
++ 0x30, 0x28, 0x28, 0xa0, 0x3c, 0xe0, 0x28, 0x28,
++ 0xb0, 0x10, 0x34, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x13, 0x1d,
++ 0x70, 0x10, 0x10, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x08,
++ 0x90, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x14, 0x15, 0x16, 0x7c, 0x13, 0x12, 0x13, 0x1d,
++ 0x77, 0x11, 0x13, 0x12, 0x14, 0x39, 0x00, 0x00,
++ 0x00, 0xfc, 0x28, 0x90, 0x90, 0x7c, 0x98, 0x50,
++ 0xdc, 0x50, 0x50, 0xf0, 0x90, 0x0c, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x7f, 0x12, 0x1e, 0x13, 0x1e,
++ 0x12, 0x7f, 0x12, 0x11, 0x21, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x7c, 0xa8, 0x30, 0x20,
++ 0x20, 0x20, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x09, 0x08, 0x2b, 0x28, 0x3d, 0x28, 0x4b, 0x0d,
++ 0x18, 0x6f, 0x08, 0x0b, 0x08, 0x09, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0xe8,
++ 0xa4, 0xfc, 0xe8, 0x94, 0xac, 0xc4, 0x00, 0x00,
++ 0x20, 0x27, 0x38, 0x22, 0x1e, 0x11, 0x1e, 0x28,
++ 0x7e, 0x08, 0x14, 0x13, 0x22, 0x44, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x60, 0x20, 0xfc, 0x28, 0xb0,
++ 0xa0, 0xb8, 0xa0, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x05, 0x09, 0x09, 0x19,
++ 0x35, 0x55, 0x11, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x10, 0x14, 0x14, 0xcc, 0x0c, 0x04, 0x00, 0x00,
++ 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x06, 0x38,
++ 0x7f, 0x08, 0x0e, 0x78, 0x08, 0x1b, 0x00, 0x00,
++ 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x90, 0x88,
++ 0xfc, 0x48, 0x50, 0x24, 0xd4, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x54, 0x57, 0x54, 0x7f,
++ 0x53, 0x18, 0x14, 0x1f, 0x60, 0x01, 0x00, 0x00,
++ 0x90, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0xa8, 0xa4,
++ 0xfc, 0xa8, 0xd8, 0x94, 0xec, 0x84, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7e, 0x03, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x25, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x38, 0x07, 0x78, 0x03, 0x38, 0x07, 0x3b,
++ 0x01, 0x3f, 0x29, 0x2f, 0x39, 0x2b, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0xa8,
++ 0x24, 0xfc, 0xa8, 0x14, 0x6c, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7f, 0x12, 0x14, 0x12, 0x1a,
++ 0x77, 0x11, 0x11, 0x12, 0x14, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x88, 0xa8, 0xa8, 0xc8,
++ 0xf8, 0xc8, 0xa8, 0x98, 0x88, 0xb0, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x0c, 0x08, 0x1f, 0x12, 0x2a,
++ 0x4a, 0x3f, 0x07, 0x0a, 0x32, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x48, 0x48,
++ 0x88, 0xe8, 0x08, 0xc8, 0x28, 0x30, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1d, 0x0b, 0x3e, 0x2b,
++ 0x3e, 0x08, 0x7f, 0x0a, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0xc8, 0x58, 0x58, 0xe8, 0xf8,
++ 0xe8, 0xd8, 0x58, 0x48, 0x48, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x3f, 0x00,
++ 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x79, 0x4a, 0x4a, 0x4d, 0x48,
++ 0x48, 0x78, 0x49, 0x42, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x20,
++ 0x40, 0x80, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x02, 0x02, 0x7f, 0x52, 0x5f, 0x52, 0x53, 0x5e,
++ 0x50, 0x7f, 0x50, 0x41, 0x06, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0x28, 0xa8, 0x28, 0xc8, 0x58,
++ 0x80, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x29, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x10, 0x1b, 0x34, 0x37,
++ 0x32, 0x53, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0xa0, 0xfc, 0xc8, 0x50, 0xc0, 0xf8,
++ 0xa8, 0x38, 0xe8, 0xa8, 0xe8, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x00, 0x3c, 0x01, 0x3c,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x08, 0x08, 0x08, 0x10, 0x1e, 0x32,
++ 0x52, 0x12, 0x12, 0x1e, 0x10, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x3c, 0x20, 0x20, 0x20, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x1a, 0x1c, 0x1b,
++ 0x2a, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x20, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x03,
++ 0x0d, 0x79, 0x07, 0x0d, 0x31, 0x03, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x80,
++ 0x60, 0x3c, 0xc0, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x08, 0x08, 0x7f, 0x08,
++ 0x0c, 0x12, 0x13, 0x7d, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x48, 0x48, 0xc8, 0x48,
++ 0x48, 0x48, 0x70, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x47, 0x0c, 0x32, 0x03,
++ 0x0c, 0x7f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xe0, 0x40, 0x80, 0x80,
++ 0x70, 0xec, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x39, 0x29, 0x2f, 0x39, 0x29, 0x2f, 0x39,
++ 0x29, 0x2a, 0x2a, 0x2f, 0x28, 0x58, 0x00, 0x00,
++ 0x00, 0x38, 0x28, 0xe8, 0x28, 0x28, 0xe8, 0x28,
++ 0x28, 0xa8, 0xf8, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x12, 0x1f, 0x11, 0x10,
++ 0x17, 0x14, 0x27, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0xe8, 0x10, 0xf0, 0x00,
++ 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x02, 0x21, 0x11, 0x17, 0x00, 0x02, 0x02, 0x72,
++ 0x13, 0x12, 0x10, 0x18, 0x27, 0x41, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x40, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x40, 0x80, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0xc0, 0x00, 0x00, 0x00, 0xf8, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x03, 0x04, 0x04, 0x08, 0x10,
++ 0x20, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x20, 0x20, 0x40, 0x40,
++ 0xc0, 0x20, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x09, 0x09, 0x09, 0x11, 0x11, 0x3f, 0x51, 0x11,
++ 0x11, 0x11, 0x12, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x24, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x10, 0x17, 0x30, 0x50, 0x10,
++ 0x11, 0x11, 0x12, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0xe0, 0xe0,
++ 0x50, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x04, 0x04, 0x06, 0x0a, 0x09,
++ 0x09, 0x08, 0x10, 0x10, 0x23, 0x4c, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x40, 0x40, 0xf0, 0x10, 0x10,
++ 0x20, 0xa0, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x07, 0x79, 0x49, 0x49, 0x49, 0x49, 0x49,
++ 0x7a, 0x4a, 0x42, 0x04, 0x09, 0x16, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x20, 0x20, 0xf8, 0x88, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x4f, 0x08, 0x08, 0x0f,
++ 0x01, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xe0, 0x20, 0x20, 0xe0,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x1f,
++ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0x10, 0xe0, 0x00, 0x00,
++ 0x02, 0x07, 0x08, 0x3f, 0x00, 0x0f, 0x00, 0x1f,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xc0, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x08, 0x0a, 0x09, 0x7f, 0x08, 0x4a, 0x2b, 0x2c,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x1b, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x88, 0x88, 0x50, 0x50,
++ 0x30, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x29, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0xf8, 0x88, 0x88,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x31, 0x09,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x03, 0x00, 0x00,
++ 0x20, 0x10, 0x10, 0xfc, 0x00, 0x88, 0x88, 0x50,
++ 0x60, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00,
++ 0x20, 0x17, 0x12, 0x42, 0x22, 0x23, 0x03, 0x12,
++ 0x12, 0x12, 0x24, 0x24, 0x48, 0x53, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x20, 0x20, 0x78, 0x08, 0x90,
++ 0x90, 0x60, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x20, 0x22, 0x01, 0x09,
++ 0x08, 0x10, 0x10, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x10, 0x10, 0x10, 0x10,
++ 0x90, 0xa0, 0xa0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x03, 0x0c, 0x31, 0x02, 0x0d, 0x71, 0x01,
++ 0x11, 0x12, 0x22, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xc0, 0x80, 0x80, 0x40, 0x30, 0x0c, 0x10,
++ 0x10, 0xa0, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x13, 0x10, 0x12, 0x7d, 0x11,
++ 0x10, 0x14, 0x19, 0x66, 0x00, 0x00, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0x48, 0x68, 0x70,
++ 0x50, 0xd0, 0x48, 0x44, 0x40, 0xc0, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x44, 0x04, 0x09, 0x11,
++ 0x3f, 0x02, 0x02, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x80, 0x88, 0x78, 0x00,
++ 0xc0, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x48, 0x14, 0x1e, 0x12, 0x1e,
++ 0x1e, 0x12, 0x7e, 0x06, 0x1a, 0x66, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x90, 0x70, 0xf0, 0x10, 0xf0,
++ 0x80, 0xf8, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x14, 0x23, 0x5f, 0x04, 0x04,
++ 0x06, 0x0a, 0x09, 0x10, 0x23, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0xe0, 0x20, 0x40,
++ 0xf0, 0x10, 0x20, 0xc0, 0x60, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2b, 0x49, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x90, 0x90, 0xb8, 0xc8, 0xc8,
++ 0xa8, 0xb0, 0x90, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7d,
++ 0x08, 0x2c, 0x2b, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x10, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
++ 0x9c, 0xf0, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0d, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0xfc, 0x00, 0x00,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x20, 0x27, 0x24, 0x24, 0x24, 0x24, 0x27, 0x24,
++ 0x24, 0x24, 0x24, 0x27, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10,
++ 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x09, 0x1f, 0x11, 0x21, 0x01,
++ 0x7f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
++ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x01, 0x01, 0x01, 0x7f,
++ 0x02, 0x02, 0x04, 0x08, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x40, 0x20, 0xf0, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x1f, 0x10,
++ 0x10, 0x17, 0x24, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x88, 0x80, 0xfc, 0x80,
++ 0x80, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x3f, 0x20, 0x20, 0x20,
++ 0x3f, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xe0, 0x20, 0x20, 0x20,
++ 0xe0, 0x20, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x09, 0x09, 0x0f,
++ 0x79, 0x09, 0x09, 0x09, 0x09, 0x19, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08,
++ 0xf8, 0x08, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x12, 0x12, 0x7a, 0x17, 0x15, 0x15, 0x1b,
++ 0x72, 0x12, 0x15, 0x19, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0x90, 0x94, 0x14, 0x0c, 0xc0, 0x3c, 0x00, 0x00,
++ 0x12, 0x09, 0x09, 0x7f, 0x04, 0x08, 0x1f, 0x61,
++ 0x1f, 0x01, 0x3f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x40, 0x60, 0x98, 0x04,
++ 0xf0, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x4a, 0x23, 0x22, 0x0b, 0x0a, 0x13,
++ 0x21, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x11, 0x1f, 0x11, 0x11,
++ 0x19, 0x15, 0x25, 0x21, 0x5f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0xe8, 0x08, 0xf8, 0x40,
++ 0x48, 0x48, 0x50, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x01, 0x3e, 0x00, 0x3f,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x08, 0x28, 0x2e,
++ 0x28, 0x28, 0x28, 0x2e, 0x38, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0x88, 0x88, 0x88,
++ 0xf8, 0x88, 0x80, 0x80, 0xfc, 0x80, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x13, 0x23, 0x5d, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x08, 0x09, 0x41, 0x22, 0x27, 0x02, 0x13,
++ 0x12, 0x13, 0x20, 0x25, 0x44, 0x48, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x20, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x00, 0x48, 0xa4, 0xa4, 0x00, 0x00,
++ 0x12, 0x13, 0x2d, 0x4f, 0x11, 0x35, 0x55, 0x15,
++ 0x1e, 0x1f, 0x00, 0x7f, 0x19, 0x63, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xe8, 0x28, 0xe8, 0x28, 0xf8,
++ 0x20, 0xf0, 0x00, 0xfc, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x07, 0x08, 0x11, 0x3f, 0x51, 0x1f, 0x11,
++ 0x11, 0x1f, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xc0, 0x80, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0x10, 0xf0, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f, 0x00, 0x1f,
++ 0x00, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xe0,
++ 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f, 0x00, 0x1f,
++ 0x00, 0x01, 0x7f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xe0,
++ 0x40, 0x80, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x08, 0x0f,
++ 0x01, 0x09, 0x09, 0x11, 0x21, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xe0, 0x20, 0x20, 0xe0,
++ 0x00, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x09, 0x09, 0x09, 0x11, 0x17, 0x31, 0x51, 0x11,
++ 0x1f, 0x10, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0x20,
++ 0xfc, 0x00, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x12, 0x31, 0x51, 0x1f,
++ 0x10, 0x10, 0x10, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x48, 0x48, 0x50, 0xfc,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x1f, 0x11, 0x33, 0x55, 0x19,
++ 0x17, 0x14, 0x15, 0x15, 0x15, 0x14, 0x00, 0x00,
++ 0x30, 0xc0, 0x80, 0xfc, 0x20, 0xf0, 0x28, 0xe4,
++ 0xf8, 0x08, 0xe8, 0x28, 0xe8, 0x18, 0x00, 0x00,
++ 0x00, 0x20, 0x2d, 0x23, 0x22, 0x24, 0x28, 0x3f,
++ 0x24, 0x04, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x80, 0x90, 0x10, 0x10, 0x90, 0x90, 0x10, 0xf0,
++ 0x90, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x14, 0x14, 0x7f, 0x00, 0x3e,
++ 0x22, 0x3e, 0x14, 0x15, 0x26, 0x45, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x50, 0x50, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x50, 0x50, 0x94, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x3f, 0x04, 0x04, 0x04,
++ 0x7f, 0x00, 0x04, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40,
++ 0xfc, 0x00, 0x40, 0x20, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x40, 0x58, 0x46, 0x41, 0x41, 0x42,
++ 0x44, 0x48, 0x50, 0x7f, 0x40, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x48, 0x88, 0x88, 0x08, 0x88, 0x48,
++ 0x28, 0x28, 0x08, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x10, 0x7c, 0x11, 0x12, 0x12,
++ 0x1f, 0x12, 0x12, 0x14, 0x14, 0x19, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x88, 0x08, 0x30, 0x10,
++ 0xfc, 0x94, 0x94, 0xa4, 0xa4, 0xcc, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x2f, 0x20, 0x20, 0x27, 0x20,
++ 0x20, 0x20, 0x2f, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x80, 0x80, 0xf0, 0x80,
++ 0x80, 0x80, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x33, 0x22, 0x2a, 0x2b, 0x2a, 0x2a, 0x2b,
++ 0x2a, 0x3b, 0x6a, 0x13, 0x16, 0x20, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0x28, 0x28, 0xa8, 0xf0, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x79, 0x49, 0x49, 0x49, 0x49, 0x49,
++ 0x49, 0x79, 0x4f, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x1c, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x0f, 0x01, 0x7f, 0x04, 0x1f, 0x64, 0x07,
++ 0x3f, 0x20, 0x27, 0x24, 0x27, 0x20, 0x00, 0x00,
++ 0x60, 0x80, 0x00, 0xfc, 0x40, 0xf0, 0x4c, 0xc0,
++ 0xf8, 0x08, 0xc8, 0x48, 0xc8, 0x18, 0x00, 0x00,
++ 0x00, 0x13, 0x11, 0x10, 0x7f, 0x10, 0x11, 0x11,
++ 0x15, 0x19, 0x61, 0x00, 0x03, 0x0c, 0x00, 0x00,
++ 0x40, 0xf8, 0x20, 0xa0, 0xfc, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xa0, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x10, 0x56, 0x55, 0x55, 0x57,
++ 0x54, 0x7c, 0x44, 0x41, 0x02, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x48, 0x48, 0x50, 0xfc,
++ 0x40, 0xa0, 0x90, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x78, 0x08, 0x0f, 0x78, 0x4b, 0x42, 0x7a,
++ 0x4b, 0x4a, 0x08, 0x08, 0x17, 0x60, 0x00, 0x00,
++ 0x40, 0x50, 0x88, 0xfc, 0x44, 0xf8, 0x48, 0x48,
++ 0xf8, 0x50, 0x48, 0x7c, 0xc4, 0x04, 0x00, 0x00,
++ 0x00, 0x7b, 0x09, 0x09, 0x79, 0x49, 0x43, 0x79,
++ 0x49, 0x49, 0x09, 0x09, 0x17, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0xf0, 0x50, 0xf0, 0xf8, 0xf0,
++ 0x50, 0xf0, 0x50, 0xf0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x13, 0x38, 0x34, 0x34, 0x57,
++ 0x10, 0x10, 0x10, 0x11, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0x90, 0x88, 0x38, 0xc4, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x09, 0x09, 0x09, 0x0f, 0x72, 0x04,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x90, 0x54, 0x54, 0x0c,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x04, 0x7f, 0x04, 0x0a,
++ 0x12, 0x62, 0x12, 0x12, 0x22, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0x20,
++ 0x10, 0x0c, 0x90, 0x48, 0x48, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x78, 0x12, 0x11, 0x11, 0x1f,
++ 0x70, 0x10, 0x10, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x48, 0x48, 0x50, 0xfc,
++ 0x40, 0xa0, 0x90, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x3f, 0x0a, 0x0a, 0x7f, 0x09, 0x1f,
++ 0x22, 0x47, 0x3c, 0x04, 0x05, 0x0e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x88, 0x88, 0x48,
++ 0x50, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x10, 0x19, 0x36, 0x34,
++ 0x33, 0x52, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xfc, 0xa0, 0xf0, 0xa8, 0xe4,
++ 0xf8, 0x08, 0xe8, 0xa8, 0xe8, 0x18, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x22, 0x23, 0x02, 0x10,
++ 0x10, 0x11, 0x21, 0x22, 0x44, 0x48, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0xa8, 0xa0,
++ 0xa0, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x4f, 0x30, 0x10, 0x30, 0x48, 0x0b, 0x18,
++ 0x28, 0x48, 0x08, 0x08, 0x3f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x44, 0x28, 0x17, 0x32, 0x49, 0x09, 0x1f,
++ 0x28, 0x48, 0x08, 0x09, 0x32, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x48, 0x48, 0x50, 0xfc,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x3f, 0x28, 0x49, 0x0a, 0x7e,
++ 0x0b, 0x0e, 0x16, 0x12, 0x22, 0x42, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xfc, 0xa0, 0xf0, 0xa8, 0xe4,
++ 0xf8, 0x08, 0xe8, 0xa8, 0xe8, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x25, 0x3e, 0x25, 0x25,
++ 0x3d, 0x25, 0x25, 0x25, 0x24, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x24, 0x24, 0xd4, 0x74,
++ 0xb4, 0x14, 0xf4, 0x14, 0x04, 0x18, 0x00, 0x00,
++ 0x02, 0x0f, 0x02, 0x0c, 0x7f, 0x12, 0x26, 0x4f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0xc0, 0xf8, 0x48, 0x98, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x37, 0x24, 0x27, 0x3c, 0x27, 0x3e, 0x27,
++ 0x24, 0x7f, 0x00, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xc8, 0x78, 0xc8, 0xf8, 0xc8,
++ 0x48, 0xfc, 0x00, 0x60, 0x10, 0x08, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x01, 0x3f, 0x07, 0x1c,
++ 0x67, 0x1f, 0x17, 0x14, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x60, 0xc0, 0x00, 0xf8, 0xc0, 0x70,
++ 0xcc, 0xf0, 0xd0, 0x50, 0xd0, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x66, 0x2b, 0x1a, 0x12, 0x1b,
++ 0x2b, 0x7a, 0x12, 0x13, 0x2c, 0x40, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xb0, 0xb0, 0xa8, 0xa8,
++ 0x24, 0xa4, 0xe4, 0x78, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x13, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x73, 0x00, 0x00,
++ 0x20, 0xf8, 0x90, 0xfc, 0x00, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x13, 0x6a, 0x2b, 0x1f, 0x6a, 0x13, 0x3f, 0x04,
++ 0x7f, 0x0f, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0xb8, 0xa8, 0xb8, 0xa4, 0xf8, 0x60, 0xf8, 0x40,
++ 0xfc, 0xe0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x11, 0x5b, 0x2b, 0x16, 0x7f, 0x0b, 0x33, 0x07,
++ 0x1f, 0x67, 0x07, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x38, 0xa8, 0xb0, 0xa8, 0xe4, 0xf8, 0xa0, 0xc0,
++ 0xf0, 0xcc, 0xc0, 0xb0, 0x60, 0x18, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x3f, 0x7a, 0x2a, 0x3f, 0x08,
++ 0x0f, 0x0f, 0x0f, 0x2a, 0x25, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x30, 0xcc, 0xf0, 0x80,
++ 0xe0, 0xe0, 0xf8, 0x48, 0x28, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x12, 0x12, 0x32, 0x52, 0x12,
++ 0x12, 0x13, 0x1e, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x80, 0x78, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0xc8, 0x70, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x09, 0x4e, 0x28, 0x27, 0x04, 0x17, 0x1a,
++ 0x22, 0x3f, 0x46, 0x45, 0x48, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xb0, 0x90, 0x7c, 0x98, 0x50,
++ 0x5c, 0xd0, 0x50, 0x70, 0x90, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x09, 0x7f, 0x08, 0x08,
++ 0x7f, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0x20, 0xfc, 0x20, 0x20,
++ 0xfc, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x48, 0x49, 0x4f, 0x79, 0x49,
++ 0x4f, 0x48, 0x78, 0x49, 0x42, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x50, 0xfc, 0x10, 0x10,
++ 0xfc, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x02, 0x12, 0x0a, 0x7f, 0x04, 0x3f, 0x01, 0x1f,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x80, 0x90, 0xa0, 0xfc, 0x40, 0xf8, 0x00, 0xf0,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x1f, 0x10,
++ 0x13, 0x12, 0x12, 0x23, 0x22, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x00, 0xfc, 0x04,
++ 0xe4, 0x24, 0x24, 0xe4, 0x24, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x3f, 0x24, 0x24, 0x24, 0x3f,
++ 0x24, 0x24, 0x24, 0x3f, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0x48, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7c, 0x11, 0x11, 0x3b, 0x36,
++ 0x36, 0x53, 0x52, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xdc, 0x24, 0xb4, 0xa8,
++ 0xa8, 0xb4, 0x24, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x1f, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00,
++ 0x20, 0x10, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x13, 0x12, 0x3a, 0x36,
++ 0x36, 0x52, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xe8, 0xa8,
++ 0xa8, 0xe8, 0xa8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x08, 0x7e, 0x09, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x09, 0x09, 0x0f, 0x11, 0x13, 0x32, 0x53, 0x10,
++ 0x13, 0x10, 0x13, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xf8, 0x48, 0xf8, 0x40,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x3e, 0x2b, 0x2a, 0x3e, 0x08,
++ 0x3e, 0x08, 0x3e, 0x08, 0x0e, 0x79, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x11, 0x7e, 0x13, 0x14, 0x10,
++ 0x10, 0x14, 0x1b, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x88, 0x88,
++ 0x28, 0xc8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x3f, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x70, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x20,
++ 0xfc, 0x24, 0x24, 0x24, 0x38, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x08,
++ 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00,
++ 0x10, 0x60, 0x80, 0x00, 0x00, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x02, 0x1c, 0x10, 0x10, 0x1f, 0x15, 0x14,
++ 0x14, 0x14, 0x24, 0x24, 0x45, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa8, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa8, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x08, 0x3e, 0x08, 0x0f, 0x72, 0x04,
++ 0x1f, 0x60, 0x0f, 0x00, 0x00, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x80, 0x40,
++ 0xf0, 0x0c, 0xe0, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x1c, 0x1a, 0x2a, 0x49, 0x0f,
++ 0x00, 0x7f, 0x09, 0x11, 0x61, 0x03, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x60, 0x70, 0xa8, 0x24, 0xe0,
++ 0x00, 0xfc, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x05, 0x1f, 0x6a, 0x09, 0x0e, 0x0f,
++ 0x01, 0x1f, 0x12, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0xf0, 0xac, 0xa0, 0x60, 0xe0,
++ 0x00, 0xf0, 0x90, 0xd0, 0x50, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x14, 0x23, 0x40, 0x1e, 0x13,
++ 0x1e, 0x12, 0x1e, 0x22, 0x22, 0x47, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x40, 0x40, 0xf8,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3e, 0x22, 0x3e, 0x3f, 0x21,
++ 0x0e, 0x01, 0x7f, 0x0d, 0x31, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c, 0x20,
++ 0x60, 0x98, 0xe4, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x04, 0x0f, 0x08, 0x0f,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x70, 0xc0, 0x00, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x20, 0x2f, 0x21, 0x3f,
++ 0x23, 0x25, 0x39, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x68, 0x88, 0x08, 0xf8,
++ 0x88, 0x48, 0x28, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x08, 0x0b, 0x12, 0x3c,
++ 0x55, 0x12, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x60, 0xa0, 0x90, 0xf8, 0x04, 0x00,
++ 0xf8, 0x10, 0x10, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x09, 0x0a, 0x14, 0x19,
++ 0x34, 0x57, 0x11, 0x11, 0x12, 0x10, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0xd0, 0xb8, 0xd4, 0x90, 0xf8,
++ 0x00, 0xfc, 0x28, 0x24, 0x24, 0x60, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7c, 0x03, 0x3e, 0x03, 0x3c,
++ 0x03, 0x3c, 0x27, 0x24, 0x3f, 0x20, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf8, 0x48, 0xf8, 0x40,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x13, 0x12, 0x02, 0x03, 0x02, 0x72,
++ 0x12, 0x14, 0x14, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x10, 0x60, 0x80, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x18, 0x67, 0x01, 0x3f,
++ 0x01, 0x09, 0x05, 0x05, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0xcc, 0x00, 0xf8,
++ 0x00, 0x20, 0x20, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x48, 0x49, 0x4b, 0x4c, 0x48,
++ 0x4b, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0x00,
++ 0xf8, 0x08, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x73, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x88, 0xf8,
++ 0xa4, 0xa8, 0x90, 0xb0, 0xc8, 0x04, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x02, 0x7f, 0x02, 0x02, 0x02,
++ 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x44, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x32, 0x53, 0x12,
++ 0x13, 0x10, 0x1f, 0x11, 0x12, 0x1c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x00, 0xfc, 0x20, 0x10, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x1f, 0x10, 0x2f, 0x48, 0x08,
++ 0x08, 0x0f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x20, 0x2c, 0x23, 0x20,
++ 0x21, 0x22, 0x24, 0x28, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80,
++ 0x40, 0x20, 0x20, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x48, 0x30, 0x11, 0x31, 0x4a, 0x0d, 0x19,
++ 0x29, 0x49, 0x09, 0x08, 0x30, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0x08, 0xe8, 0x28,
++ 0x28, 0xe8, 0x28, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x10, 0x11, 0x11, 0x7e, 0x10,
++ 0x10, 0x14, 0x18, 0x61, 0x02, 0x0c, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf0, 0x10, 0x10, 0x20, 0x20,
++ 0x60, 0x60, 0x90, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x3f, 0x28, 0x48, 0x08, 0x7f,
++ 0x08, 0x0c, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0x88, 0x88, 0x88,
++ 0xf8, 0x88, 0x80, 0x80, 0xfc, 0x80, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x01, 0x7f, 0x01,
++ 0x01, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xfc, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x10, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x23,
++ 0x3e, 0x66, 0x0a, 0x12, 0x62, 0x06, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x88, 0x88, 0xc8, 0xb0, 0x90,
++ 0x90, 0xa8, 0xc8, 0x80, 0xfc, 0x80, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x88, 0xc8, 0xb0, 0x90, 0x90,
++ 0xa8, 0xa8, 0xc0, 0x80, 0xfc, 0x80, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x43, 0x0c, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3f, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x88, 0xe8, 0xa8, 0xa8,
++ 0xe8, 0xa8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x00, 0x7f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0xe0, 0x20,
++ 0xe0, 0x00, 0xfc, 0x60, 0x10, 0x08, 0x00, 0x00,
++ 0x00, 0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x3f, 0x21,
++ 0x2f, 0x21, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xf8, 0x48,
++ 0xe8, 0x38, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x11, 0x1f, 0x10, 0x15, 0x15,
++ 0x15, 0x17, 0x20, 0x3f, 0x46, 0x18, 0x00, 0x00,
++ 0x00, 0xf0, 0xfc, 0xe8, 0x08, 0xf8, 0xf0, 0x10,
++ 0xf0, 0xe0, 0x20, 0xfc, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x49, 0x4e, 0x49, 0x49, 0x49,
++ 0x49, 0x79, 0x49, 0x41, 0x01, 0x0f, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xf0, 0x0c, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf8, 0x48, 0x30, 0xd8, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x44, 0x08, 0x10, 0x00,
++ 0x1f, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x80, 0x88, 0x78, 0x00,
++ 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x13, 0x12, 0x33, 0x50, 0x17,
++ 0x14, 0x14, 0x17, 0x14, 0x14, 0x14, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0xf0, 0x90, 0xf0, 0x80, 0xf8,
++ 0xa8, 0xf8, 0x18, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x4f, 0x09, 0x0f, 0x09, 0x0f,
++ 0x01, 0x3f, 0x21, 0x2f, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0x00, 0xf8, 0x48, 0xe8, 0x28, 0x18, 0x00, 0x00,
++ 0x00, 0x23, 0x12, 0x13, 0x02, 0x03, 0x70, 0x17,
++ 0x14, 0x14, 0x17, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0xf0, 0x90, 0xf0, 0x80, 0xf8,
++ 0xa8, 0xf8, 0x08, 0x18, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x29, 0x31, 0x29, 0x25, 0x24,
++ 0x27, 0x26, 0x3a, 0x23, 0x22, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8, 0x40,
++ 0xfc, 0x54, 0x7c, 0x8c, 0x04, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x11, 0x11, 0x1f, 0x01, 0x3f,
++ 0x21, 0x21, 0x3f, 0x21, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x00, 0xf8,
++ 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x12, 0x13, 0x13, 0x7c, 0x10, 0x1b, 0x36, 0x37,
++ 0x32, 0x53, 0x53, 0x12, 0x13, 0x1c, 0x00, 0x00,
++ 0x20, 0xfc, 0x30, 0xc8, 0x00, 0xb8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0x28, 0xb0, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1d, 0x19, 0x0e, 0x74, 0x00, 0x00,
++ 0x08, 0x88, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0x28, 0x28, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x14, 0x12, 0x17, 0x14,
++ 0x17, 0x14, 0x27, 0x24, 0x44, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x90, 0xa0, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x14, 0x14, 0x17,
++ 0x14, 0x18, 0x28, 0x28, 0x4f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x88, 0x90, 0x90, 0xf0,
++ 0x90, 0x88, 0x88, 0x88, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x12, 0x12, 0x1e,
++ 0x72, 0x13, 0x15, 0x15, 0x19, 0x31, 0x00, 0x00,
++ 0x00, 0xfc, 0x04, 0xfc, 0x24, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0x24, 0x24, 0x24, 0xfc, 0x04, 0x00, 0x00,
++ 0x01, 0x3f, 0x26, 0x58, 0x1f, 0x10, 0x1f, 0x14,
++ 0x14, 0x17, 0x28, 0x28, 0x4f, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x78, 0xf8, 0x08, 0xf8, 0x90,
++ 0x90, 0xf0, 0x88, 0x88, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x05, 0x09, 0x11, 0x63, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x08, 0x90, 0x60, 0x20, 0x10, 0x0c, 0xe0,
++ 0x20, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1c, 0x09, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x60, 0x60, 0x60, 0xa4, 0xa4, 0xa8, 0xb0, 0xa0,
++ 0xa0, 0xa0, 0xa0, 0xa4, 0xa4, 0x9c, 0x00, 0x00,
++ 0x21, 0x2f, 0x4f, 0x35, 0x2f, 0x7d, 0x37, 0x5f,
++ 0x11, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x10, 0xd4, 0xe4, 0x58, 0xd4, 0x7c, 0xd8, 0xf4,
++ 0x10, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x44, 0x08, 0x10, 0x0b, 0x48,
++ 0x27, 0x20, 0x0b, 0x08, 0x17, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x88, 0x78, 0x40, 0xf8, 0x40,
++ 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x12, 0x7f, 0x01, 0x3e, 0x22, 0x3e, 0x22,
++ 0x3e, 0x22, 0x26, 0x14, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0x48, 0x70, 0x44, 0x3c, 0x40, 0x4c, 0x70,
++ 0x40, 0x44, 0x3c, 0x90, 0x48, 0x44, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x29, 0x31, 0x29, 0x24, 0x27,
++ 0x25, 0x25, 0x39, 0x21, 0x21, 0x26, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x00, 0xfc,
++ 0x48, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x07, 0x18, 0x01, 0x07, 0x79, 0x09, 0x05,
++ 0x3f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0xc0, 0x30, 0x2c, 0x20, 0x40,
++ 0xf8, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x1f, 0x12, 0x12, 0x1f, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0x90, 0x90, 0xf0, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0d, 0x13, 0x7f,
++ 0x08, 0x2d, 0x2a, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x00, 0xdc, 0x54, 0xdc,
++ 0x20, 0xfc, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x04, 0x03, 0x3e, 0x12, 0x0d, 0x1b,
++ 0x61, 0x3f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x80, 0xf8, 0x48, 0x30, 0xc8,
++ 0x04, 0xf8, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1b, 0x24, 0x24, 0x7b, 0x10, 0x7d,
++ 0x11, 0x55, 0x3a, 0x30, 0x1c, 0x60, 0x00, 0x00,
++ 0x50, 0x90, 0x90, 0x94, 0xb4, 0xf4, 0xb8, 0xd0,
++ 0xb0, 0x98, 0xa8, 0xa8, 0xc4, 0x84, 0x00, 0x00,
++ 0x02, 0x3c, 0x7f, 0x3f, 0x2a, 0x3e, 0x2a, 0x3e,
++ 0x3e, 0x0f, 0x79, 0x00, 0x24, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0x88, 0x88, 0x30, 0x00, 0x88, 0x44, 0x00, 0x00,
++ 0x00, 0x1f, 0x02, 0x02, 0x7f, 0x02, 0x02, 0x1f,
++ 0x04, 0x0f, 0x14, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xe0,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x7f, 0x0f, 0x09, 0x0f,
++ 0x09, 0x0f, 0x1f, 0x7f, 0x12, 0x61, 0x00, 0x00,
++ 0x40, 0xfc, 0x60, 0xc0, 0xfc, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0xf0, 0xfc, 0x48, 0x24, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x7f, 0x00, 0x3e, 0x00, 0x3e,
++ 0x00, 0x3e, 0x22, 0x23, 0x3f, 0x22, 0x00, 0x00,
++ 0x08, 0x88, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x3e, 0x12, 0x13, 0x7f, 0x12, 0x3e, 0x10,
++ 0x1e, 0x33, 0x32, 0x52, 0x1e, 0x10, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x7f, 0x01, 0x1f, 0x11, 0x1f,
++ 0x11, 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf8, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x09, 0x09, 0x7f, 0x09, 0x3f, 0x08,
++ 0x0f, 0x19, 0x19, 0x29, 0x4f, 0x09, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0xd0, 0x60, 0x50, 0x48,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x3f, 0x04, 0x04, 0x7f, 0x04,
++ 0x04, 0x3f, 0x04, 0x04, 0x07, 0x7c, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xa0, 0x20, 0x30, 0xe8, 0x24,
++ 0x24, 0xa0, 0x20, 0x20, 0xa0, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x7e, 0x12, 0x12, 0x22, 0x4d, 0x01,
++ 0x7f, 0x03, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00,
++ 0xfc, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x02, 0x04, 0x08, 0x1c,
++ 0x2a, 0x4a, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x90, 0x90, 0xa0, 0x90, 0x88,
++ 0x84, 0x84, 0xc4, 0xb8, 0x80, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x13, 0x30, 0x50, 0x11,
++ 0x17, 0x10, 0x12, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x18, 0xe0, 0x90, 0x90, 0x20, 0xd0, 0x98, 0xe4,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x14, 0x15, 0x35, 0x56, 0x14,
++ 0x14, 0x15, 0x15, 0x13, 0x10, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x20, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x12, 0x12, 0x12, 0x12, 0x7f, 0x12,
++ 0x12, 0x12, 0x12, 0x22, 0x22, 0x42, 0x00, 0x00,
++ 0x08, 0xc8, 0x48, 0x48, 0x48, 0x48, 0xc8, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x15, 0x05,
++ 0x05, 0x09, 0x09, 0x11, 0x21, 0x40, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00,
++ 0x00, 0x00, 0x08, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x3f, 0x22, 0x22, 0x3e, 0x23,
++ 0x20, 0x4f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x90, 0x90, 0x60, 0x60, 0x90,
++ 0x0c, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x01, 0x01,
++ 0x3f, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x10, 0x10, 0x17, 0x7c, 0x10,
++ 0x13, 0x14, 0x18, 0x60, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x22,
++ 0x41, 0x1f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x08, 0xc8, 0x48, 0x48, 0xc8, 0x48, 0x48, 0x18,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x08, 0x3e, 0x08, 0x0f, 0x71,
++ 0x01, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x88, 0x08, 0x30,
++ 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x12, 0x12, 0x12, 0x12, 0x7f, 0x12,
++ 0x12, 0x12, 0x12, 0x22, 0x22, 0x42, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x20, 0x48, 0x08, 0x90, 0x10,
++ 0x24, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x08, 0x0b, 0x11, 0x24, 0x04, 0x09, 0x1e, 0x28,
++ 0x4b, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0xa0, 0x40, 0xf0, 0x4c, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x12, 0x1f, 0x1f, 0x15,
++ 0x19, 0x13, 0x2d, 0x20, 0x43, 0x1c, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0xfc, 0x58,
++ 0xe4, 0xf4, 0x20, 0xc0, 0x60, 0x1c, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x0f, 0x78, 0x0f, 0x07,
++ 0x00, 0x0f, 0x25, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0xfc, 0x20, 0xe0, 0xe0,
++ 0x20, 0xe0, 0x08, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x02, 0x3c, 0x08, 0x7f, 0x08, 0x3e, 0x22, 0x3e,
++ 0x20, 0x05, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x20, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x88, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x10, 0x1d,
++ 0x73, 0x15, 0x11, 0x11, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x80, 0xfc,
++ 0x34, 0xc4, 0x04, 0x14, 0xf4, 0x18, 0x00, 0x00,
++ 0x11, 0x11, 0x13, 0x7f, 0x15, 0x11, 0x11, 0x15,
++ 0x1f, 0x71, 0x11, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xf8, 0x20, 0xfc,
++ 0xe0, 0x20, 0x3c, 0x04, 0x04, 0x18, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x10, 0x1e, 0x23, 0x7a,
++ 0x2a, 0x2a, 0x3a, 0x22, 0x02, 0x0d, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x88, 0x88, 0x48, 0x50,
++ 0x30, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x01, 0x7f,
++ 0x0f, 0x08, 0x0f, 0x05, 0x09, 0x33, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x00, 0xfc,
++ 0xe0, 0x20, 0xe0, 0x60, 0x10, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x08, 0x1b, 0x1c, 0x1a,
++ 0x2b, 0x28, 0x48, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x21, 0x21, 0x00, 0x13,
++ 0x10, 0x17, 0x20, 0x20, 0x41, 0x46, 0x00, 0x00,
++ 0x08, 0x70, 0x88, 0x48, 0x50, 0x20, 0x40, 0xf8,
++ 0x40, 0xfc, 0xc0, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x54, 0x54, 0x57, 0x7c, 0x54,
++ 0x57, 0x54, 0x7c, 0x44, 0x07, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x0d, 0x78, 0x08, 0x09, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x28, 0xfc, 0x60, 0xa4, 0x9c, 0xf0, 0x84, 0x7c,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x02, 0x1c, 0x03, 0x01, 0x7f,
++ 0x01, 0x09, 0x09, 0x11, 0x21, 0x01, 0x00, 0x00,
++ 0x38, 0xc0, 0x20, 0x20, 0x40, 0x90, 0x08, 0xfc,
++ 0x04, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x0a, 0x72, 0x14, 0x0c, 0x13, 0x7f,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x4b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x20, 0x70, 0xac, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x0b, 0x73, 0x15, 0x0d, 0x13, 0x7f,
++ 0x09, 0x2d, 0x2b, 0x2b, 0x49, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0xa8, 0x68, 0x70, 0x20, 0xfc, 0x20,
++ 0x70, 0xa8, 0x28, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x2a, 0x3f, 0x2a, 0x3e, 0x7f,
++ 0x0a, 0x0e, 0x01, 0x7f, 0x0d, 0x31, 0x00, 0x00,
++ 0x00, 0x70, 0x54, 0x8c, 0xf8, 0x90, 0x60, 0xb0,
++ 0x4c, 0xc0, 0x70, 0x88, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x04, 0x3f, 0x04, 0x7f,
++ 0x04, 0x3f, 0x04, 0x07, 0x78, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x20, 0x20, 0x30, 0xa8,
++ 0x24, 0x24, 0x20, 0xa0, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x04, 0x03, 0x0d,
++ 0x71, 0x0f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x60, 0x80, 0x60,
++ 0x1c, 0xe0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x3f, 0x12, 0x12,
++ 0x7f, 0x12, 0x12, 0x12, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0x48, 0x48, 0x48,
++ 0xc8, 0x48, 0x48, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x12, 0x09, 0x09, 0x3f, 0x21, 0x41, 0x0f, 0x09,
++ 0x09, 0x0f, 0x09, 0x01, 0x01, 0x3e, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x08, 0x00, 0xe0, 0x20,
++ 0x20, 0xe0, 0x20, 0x10, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x80, 0x98, 0xe0, 0x80, 0x84, 0x7c, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x12, 0x7f, 0x1f, 0x3d, 0x55, 0x1e, 0x07, 0x7f,
++ 0x07, 0x07, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0xc8, 0x50, 0x30, 0xcc, 0xc0, 0xfc,
++ 0xc0, 0xc0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x7e, 0x08, 0x3e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x20, 0xf0, 0x2c, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x34, 0x0c, 0x1a, 0x29, 0x48,
++ 0x3e, 0x08, 0x08, 0x0e, 0x70, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x02, 0x0c, 0x72, 0x4a, 0x2c, 0x08, 0x3e, 0x08,
++ 0x7e, 0x08, 0x14, 0x13, 0x21, 0x42, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x38, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x04, 0x1f, 0x00, 0x00,
++ 0x7f, 0x02, 0x02, 0x04, 0x3f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf0, 0x00, 0x00,
++ 0xfc, 0x40, 0x20, 0xf0, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x20, 0x13, 0x12, 0x02, 0x02, 0x72, 0x12,
++ 0x13, 0x1e, 0x10, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x80, 0x78, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0xc8, 0x70, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x00, 0xf8, 0x88, 0x88, 0xf8,
++ 0x20, 0xb0, 0xa8, 0xa4, 0x24, 0x60, 0x00, 0x00,
++ 0x04, 0x07, 0x3f, 0x26, 0x3b, 0x3f, 0x26, 0x3c,
++ 0x27, 0x3b, 0x26, 0x3a, 0x42, 0x0c, 0x00, 0x00,
++ 0x08, 0xa8, 0xe8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0x28, 0x28, 0xa8, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x22, 0x3e, 0x22,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x08, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x5c, 0xe0, 0x48, 0x48, 0x50,
++ 0x30, 0x20, 0x60, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x2a, 0x3f, 0x3e, 0x7f, 0x08,
++ 0x0f, 0x1f, 0x01, 0x7f, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x70, 0x54, 0x8c, 0xf8, 0x50, 0x30, 0xcc,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x21, 0x12, 0x17, 0x44, 0x27, 0x24, 0x07, 0x12,
++ 0x1f, 0x13, 0x24, 0x24, 0x4b, 0x50, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0xa0, 0xfc, 0xc8, 0xa8, 0x28,
++ 0xe8, 0x90, 0x90, 0xa8, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x2a, 0x31, 0x29, 0x25, 0x25,
++ 0x25, 0x25, 0x39, 0x22, 0x24, 0x20, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x48, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x50, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x08, 0x1c, 0x1b, 0x1b,
++ 0x29, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x80, 0xf8, 0x00, 0x00, 0x80, 0xfc, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x09, 0x09, 0x0b, 0x12, 0x15, 0x31, 0x52, 0x14,
++ 0x1f, 0x10, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0xfc, 0xa8, 0xa8, 0x7c, 0x48, 0x48,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x1f, 0x11, 0x21, 0x41,
++ 0x01, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x08, 0x10, 0x20,
++ 0x80, 0x80, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x20, 0x20, 0x00, 0x1f,
++ 0x10, 0x11, 0x21, 0x22, 0x44, 0x48, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf0, 0x90, 0x90, 0x90, 0xfc,
++ 0xc0, 0x20, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x22, 0x1f, 0x12, 0x4f, 0x22, 0x23, 0x0c, 0x11,
++ 0x17, 0x10, 0x2f, 0x22, 0x4c, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xa8, 0x28, 0xd8, 0xa0, 0x20,
++ 0x50, 0xb8, 0xc8, 0xb0, 0x88, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x40, 0x01, 0x04, 0x04,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xc0, 0x40, 0x40,
++ 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x00,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x02, 0x1f, 0x12, 0x12, 0x12,
++ 0x12, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x90, 0x90, 0x90,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x00, 0x3c, 0x00, 0x3f,
++ 0x00, 0x3c, 0x24, 0x25, 0x3e, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xfc,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x08,
++ 0x0f, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x13, 0x12, 0x34, 0x50, 0x17,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x12, 0x17, 0x38, 0x57, 0x14,
++ 0x17, 0x14, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x80, 0x80, 0x40, 0x20, 0xf0, 0x88, 0xf0, 0x90,
++ 0xf0, 0x90, 0x40, 0x20, 0x10, 0x08, 0x00, 0x00,
++ 0x08, 0x0a, 0x09, 0x13, 0x10, 0x37, 0x50, 0x11,
++ 0x12, 0x15, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00,
++ 0x40, 0x48, 0x50, 0xf8, 0x40, 0xfc, 0xa0, 0xf0,
++ 0x28, 0xe4, 0x20, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x08, 0x08, 0x0e, 0x13, 0x12, 0x34, 0x5f, 0x11,
++ 0x15, 0x15, 0x12, 0x13, 0x14, 0x18, 0x00, 0x00,
++ 0x20, 0xf8, 0x28, 0xfc, 0x28, 0xf8, 0x20, 0xf8,
++ 0x20, 0xfc, 0x20, 0x20, 0xc0, 0x3c, 0x00, 0x00,
++ 0x08, 0x04, 0x7f, 0x04, 0x3f, 0x04, 0x7f, 0x04,
++ 0x3f, 0x04, 0x1c, 0x64, 0x04, 0x04, 0x00, 0x00,
++ 0x20, 0x40, 0xfc, 0x80, 0xf0, 0x90, 0xfc, 0x90,
++ 0xf0, 0xc0, 0xb0, 0x8c, 0x80, 0x80, 0x00, 0x00,
++ 0x01, 0x11, 0x09, 0x3f, 0x02, 0x7f, 0x04, 0x18,
++ 0x6f, 0x02, 0x02, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x10, 0x20, 0xf8, 0x80, 0xfc, 0x40, 0x30,
++ 0xec, 0x20, 0x20, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x04, 0x04, 0x0a, 0x11, 0x7f, 0x04, 0x3f, 0x25,
++ 0x3f, 0x24, 0x0a, 0x09, 0x11, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x48, 0x48, 0xc8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4b, 0x48, 0x49, 0x49,
++ 0x49, 0x79, 0x49, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x08, 0xf8, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x25, 0x2f, 0x22, 0x3f, 0x24, 0x2f,
++ 0x30, 0x27, 0x24, 0x23, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xe8, 0x88, 0xf8, 0x48, 0xe8,
++ 0x58, 0xc8, 0x28, 0xe8, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3e, 0x22, 0x3e, 0x24, 0x3f,
++ 0x21, 0x1f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x50, 0x20, 0xd0, 0x0c,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x10, 0x13, 0x10, 0x7d, 0x24, 0x27, 0x24,
++ 0x79, 0x48, 0x0d, 0x16, 0x24, 0x40, 0x00, 0x00,
++ 0x08, 0x90, 0xfc, 0xa0, 0xf8, 0xa8, 0xfc, 0xa8,
++ 0xf8, 0xa0, 0xb0, 0xa8, 0xa4, 0xa0, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x08, 0x17, 0x10, 0x3b, 0x08,
++ 0x4b, 0x28, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0x40,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0xfc, 0x00, 0x00,
++ 0x01, 0x3f, 0x21, 0x7f, 0x1f, 0x01, 0x7f, 0x1f,
++ 0x12, 0x1f, 0x25, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf8, 0xf0, 0x00, 0xfc, 0xf0,
++ 0x90, 0xf0, 0x08, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x1e, 0x52, 0x5e, 0x5e, 0x52, 0x5f, 0x7e, 0x2a,
++ 0x29, 0x49, 0x04, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x18, 0xe0, 0x28, 0xd0, 0x28, 0xfc, 0x64, 0xa8,
++ 0x24, 0x20, 0x80, 0x88, 0x24, 0xe4, 0x00, 0x00,
++ 0x09, 0x11, 0x1f, 0x02, 0x7f, 0x08, 0x1f, 0x61,
++ 0x1f, 0x01, 0x3f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x20, 0x10, 0xf0, 0x80, 0xfc, 0x20, 0xd8, 0x04,
++ 0xf0, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x7f, 0x10, 0x17, 0x11, 0x13,
++ 0x1c, 0x71, 0x11, 0x11, 0x11, 0x30, 0x00, 0x00,
++ 0x40, 0x48, 0x50, 0xf8, 0xa0, 0xfc, 0x10, 0xe8,
++ 0x24, 0xe0, 0x20, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x0b, 0x18, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x48, 0x08, 0x0b, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x44, 0xf8, 0x48,
++ 0x48, 0xf8, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x13, 0x30, 0x39, 0x37,
++ 0x55, 0x51, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x40, 0xfc, 0x90, 0xfc, 0x20,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x06, 0x03, 0x7f, 0x44, 0x5f,
++ 0x09, 0x0f, 0x11, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0xc0, 0x00, 0xfc, 0x48, 0xe0,
++ 0x10, 0xe0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x01, 0x03, 0x02,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x80,
++ 0x80, 0x40, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3f, 0x33, 0x2d, 0x3f,
++ 0x25, 0x3f, 0x25, 0x25, 0x25, 0x23, 0x00, 0x00,
++ 0x20, 0x28, 0xa4, 0x24, 0xfc, 0x20, 0x20, 0x30,
++ 0x50, 0x50, 0x48, 0x88, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x08, 0x08, 0x08, 0x10, 0x1f, 0x32,
++ 0x52, 0x12, 0x12, 0x1f, 0x11, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x90, 0x90, 0x90, 0xfc, 0x90,
++ 0x90, 0x90, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x11, 0x11, 0x11, 0x3d, 0x25,
++ 0x65, 0x24, 0x24, 0x3d, 0x22, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x00, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x07, 0x24, 0x27, 0x24, 0x27, 0x24, 0x27,
++ 0x20, 0x3f, 0x25, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x00, 0xfc, 0x60, 0x18, 0x04, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x14, 0x17, 0x24, 0x47, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x0a, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0xe0, 0x20,
++ 0xe0, 0xa0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x38, 0x03, 0x7c, 0x03, 0x38, 0x07, 0x38,
++ 0x03, 0x38, 0x29, 0x2a, 0x3c, 0x20, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xfc, 0xa8,
++ 0xf8, 0xa0, 0xb0, 0xa8, 0xa4, 0xa0, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3e, 0x3e, 0x3f, 0x2f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x70, 0x8c, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x23, 0x12, 0x13, 0x00, 0x0f, 0x71, 0x11,
++ 0x11, 0x11, 0x11, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xf8, 0x40, 0xfc, 0xf0, 0x10,
++ 0xf0, 0xf8, 0x08, 0xf8, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x1b, 0x24, 0x25, 0x79, 0x13, 0x7c,
++ 0x12, 0x56, 0x39, 0x31, 0x1a, 0x64, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0xa8, 0xfc, 0x28, 0xf8, 0xa0,
++ 0xf8, 0xa0, 0xfc, 0x20, 0xa0, 0x7c, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x29, 0x2b, 0x30, 0x2b, 0x26,
++ 0x26, 0x27, 0x38, 0x20, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x44, 0xf8, 0x48,
++ 0x48, 0xf8, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x3e, 0x22, 0x3e, 0x14, 0x15,
++ 0x55, 0x36, 0x34, 0x16, 0x18, 0x63, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x29, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x88, 0xfc, 0x20, 0xf8, 0xa8,
++ 0xa8, 0xf8, 0x60, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x1e, 0x10, 0x7f, 0x52, 0x4e, 0x76,
++ 0x6e, 0x5a, 0x76, 0x4a, 0x7e, 0x43, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x88, 0xfc, 0x20, 0xf8, 0xa8,
++ 0xa8, 0xf8, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x00, 0x7f, 0x04, 0x04,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x80, 0x80,
++ 0x80, 0x80, 0x84, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x13, 0x12, 0x13, 0x12, 0x13,
++ 0x10, 0x12, 0x22, 0x24, 0x48, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x80, 0xa0, 0x90, 0x88, 0x88, 0x80, 0x00, 0x00,
++ 0x09, 0x04, 0x1f, 0x10, 0x1f, 0x12, 0x1f, 0x15,
++ 0x17, 0x17, 0x25, 0x3f, 0x41, 0x01, 0x00, 0x00,
++ 0x08, 0x90, 0xfc, 0x20, 0xa0, 0x20, 0xbc, 0x48,
++ 0xa8, 0x30, 0x10, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x0a, 0x72, 0x12, 0x0c, 0x04,
++ 0x0c, 0x0a, 0x12, 0x7d, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x7c, 0x07, 0x04, 0x3c, 0x27, 0x20, 0x3c,
++ 0x24, 0x24, 0x04, 0x04, 0x0b, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x48, 0x88, 0x90, 0x50,
++ 0x20, 0x20, 0x50, 0x88, 0xf4, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x24, 0x27, 0x04, 0x17,
++ 0x16, 0x16, 0x27, 0x2a, 0x48, 0x51, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0xe8, 0x28, 0xa8,
++ 0xb0, 0x90, 0xb4, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x22, 0x22, 0x02, 0x12,
++ 0x12, 0x12, 0x24, 0x24, 0x49, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x20, 0xa8, 0xa4, 0x24, 0x60, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x01, 0x02, 0x1a, 0x06,
++ 0x01, 0x00, 0x01, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0xa0, 0x10, 0x78, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x01, 0x7d, 0x11, 0x11, 0x11, 0x7d, 0x11,
++ 0x11, 0x10, 0x1c, 0x61, 0x06, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0d, 0x12, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x4b, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x28, 0xc8, 0x50,
++ 0x30, 0x20, 0x30, 0x48, 0xfc, 0x04, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x13, 0x1a, 0x16, 0x17, 0x7f,
++ 0x12, 0x1a, 0x1a, 0x2a, 0x23, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x28, 0xc8, 0x50,
++ 0x30, 0x10, 0x28, 0x48, 0xf4, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x00, 0x7f, 0x00, 0x0f, 0x00, 0x0f,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xe0, 0x00, 0xfc, 0x00, 0xe0, 0x00, 0xe0,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7c, 0x00, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x26, 0x3e, 0x25, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x50, 0xfc, 0x10, 0x20,
++ 0xc8, 0x10, 0x64, 0x08, 0x30, 0xc0, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x29, 0x31, 0x29, 0x25, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x21, 0x26, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x48,
++ 0x48, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x11, 0x09, 0x09, 0x01, 0x7f,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x30, 0xc0, 0x10, 0x10, 0x20, 0x40, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x0f, 0x0c, 0x14, 0x17, 0x34, 0x55, 0x15,
++ 0x15, 0x15, 0x15, 0x14, 0x17, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xe8, 0x28,
++ 0x28, 0xe8, 0x28, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x1f,
++ 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x4a, 0x49, 0x49, 0x48, 0x4f,
++ 0x48, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x18, 0xe0, 0x48, 0x48, 0x50, 0x60, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x3f, 0x21, 0x27, 0x24,
++ 0x24, 0x27, 0x24, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xc8, 0x48,
++ 0x48, 0xc8, 0x48, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x09, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3e, 0x03, 0x05, 0x05, 0x09, 0x0d, 0x19,
++ 0x69, 0x09, 0x0a, 0x0a, 0x0f, 0x18, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0x50, 0x68, 0x58, 0x78, 0x94, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x1f, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00,
++ 0x00, 0x00, 0x08, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x17, 0x14, 0x17,
++ 0x14, 0x17, 0x20, 0x3f, 0x40, 0x00, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0xf8, 0x80, 0xf0, 0x90, 0xf0,
++ 0x90, 0xf0, 0x80, 0xfc, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x7c, 0x05, 0x05, 0x3d, 0x25, 0x21, 0x3d,
++ 0x25, 0x25, 0x05, 0x06, 0x0b, 0x34, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0x50, 0x68, 0x58, 0x7c, 0x94, 0x14, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x1f,
++ 0x10, 0x10, 0x10, 0x20, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x3e,
++ 0x22, 0x22, 0x22, 0x3e, 0x23, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x90, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1b,
++ 0x29, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x20, 0x12, 0x12, 0x42, 0x2f, 0x22, 0x02, 0x0f,
++ 0x19, 0x19, 0x2f, 0x29, 0x40, 0x41, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0xc8, 0x78, 0x48, 0x48,
++ 0x48, 0x78, 0x48, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x04, 0x44, 0x29, 0x11, 0x31, 0x49, 0x09, 0x19,
++ 0x29, 0x49, 0x09, 0x0a, 0x33, 0x14, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0x50, 0x68, 0x58, 0x78, 0x94, 0x04, 0x00, 0x00,
++ 0x10, 0x55, 0x35, 0x39, 0x17, 0x7d, 0x11, 0x1b,
++ 0x36, 0x36, 0x53, 0x12, 0x10, 0x11, 0x00, 0x00,
++ 0x00, 0x38, 0x28, 0x28, 0xe8, 0x38, 0x28, 0xa8,
++ 0xb8, 0xa8, 0xc8, 0x48, 0x88, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7c, 0x08, 0x0b, 0x12, 0x3d,
++ 0x54, 0x12, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0x88, 0xfc, 0x00, 0xfc,
++ 0x40, 0x78, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x25, 0x26, 0x3d,
++ 0x24, 0x24, 0x24, 0x24, 0x25, 0x4e, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x94, 0x14, 0x0c, 0xf8,
++ 0x88, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x3e,
++ 0x22, 0x22, 0x22, 0x3f, 0x23, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x88, 0xf8,
++ 0x88, 0x88, 0x88, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x3f, 0x05, 0x09,
++ 0x0d, 0x19, 0x69, 0x0a, 0x0b, 0x1c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x18, 0xf0, 0x50, 0x50,
++ 0x50, 0x50, 0x68, 0x58, 0xf4, 0x14, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x11, 0x11, 0x1f, 0x10,
++ 0x12, 0x12, 0x22, 0x24, 0x48, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0xf0, 0x08, 0xf8,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7c, 0x01, 0x3e, 0x00, 0x3d,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0xf8, 0x04, 0xf8,
++ 0x40, 0x78, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3e, 0x23, 0x22, 0x3e, 0x09, 0x28, 0x2f,
++ 0x28, 0x28, 0x28, 0x2e, 0x38, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0x88, 0x74, 0x00, 0xfc,
++ 0x40, 0x78, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1f, 0x10, 0x1f, 0x12, 0x17,
++ 0x1c, 0x17, 0x27, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x20, 0xfc,
++ 0x40, 0xf0, 0xf0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x3f, 0x21, 0x3f, 0x2a, 0x2f,
++ 0x3a, 0x2f, 0x2f, 0x4a, 0x4f, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x20, 0x78, 0x48, 0x78, 0xc8,
++ 0x78, 0x48, 0x78, 0x30, 0xc8, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x01, 0x3e, 0x22,
++ 0x3e, 0x22, 0x14, 0x16, 0x18, 0x63, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x88, 0x88,
++ 0x50, 0x70, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x02, 0x02, 0x02, 0x3f, 0x04,
++ 0x04, 0x04, 0x08, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x02, 0x07, 0x04, 0x04, 0x04,
++ 0x0f, 0x08, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xe0, 0x20, 0x20, 0x20,
++ 0xe0, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x10, 0x10, 0x30, 0x57, 0x11,
++ 0x11, 0x11, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x80, 0x80, 0x80, 0x80, 0xf0, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x11, 0x11, 0x21, 0x01, 0x7f,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x12, 0x12, 0x13, 0x10, 0x1f, 0x10,
++ 0x00, 0x7f, 0x00, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x00, 0xf0, 0x10,
++ 0x10, 0xfc, 0x00, 0x60, 0x10, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x02, 0x1f, 0x04, 0x04, 0x7f,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xe0, 0x20, 0x20, 0xfc,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x25,
++ 0x79, 0x48, 0x0f, 0x14, 0x21, 0x46, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x48, 0x78, 0x48, 0x00,
++ 0xf0, 0x10, 0xfc, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x23, 0x48, 0x08, 0x10, 0x17, 0x30,
++ 0x51, 0x17, 0x10, 0x10, 0x11, 0x1e, 0x00, 0x00,
++ 0x40, 0x50, 0x90, 0xa0, 0x50, 0x88, 0xf4, 0x84,
++ 0xf8, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x12, 0x12, 0x23, 0x4d, 0x09, 0x17, 0x11, 0x35,
++ 0x55, 0x15, 0x15, 0x15, 0x1e, 0x10, 0x00, 0x00,
++ 0x00, 0x38, 0xe8, 0x28, 0x28, 0xe8, 0x28, 0x28,
++ 0xe8, 0x28, 0x78, 0xa0, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x18, 0x35, 0x34, 0x30, 0x57,
++ 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf0, 0x90, 0x90, 0xfc,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7e, 0x09, 0x1c, 0x1a, 0x1b,
++ 0x28, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf0, 0x90, 0x90, 0xfc,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x12, 0x7f, 0x12, 0x1a, 0x37, 0x37,
++ 0x30, 0x57, 0x55, 0x17, 0x14, 0x14, 0x00, 0x00,
++ 0x80, 0x40, 0xb0, 0xfc, 0xb0, 0x50, 0xb0, 0xf0,
++ 0x80, 0xf8, 0x28, 0xd8, 0x08, 0x18, 0x00, 0x00,
++ 0x02, 0x02, 0x7a, 0x17, 0x12, 0x12, 0x7f, 0x15,
++ 0x15, 0x15, 0x1f, 0x64, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0xc8, 0x48, 0x78, 0x48, 0x48,
++ 0x78, 0x48, 0x88, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x07, 0x07, 0x04, 0x7f, 0x08,
++ 0x1f, 0x62, 0x0f, 0x34, 0x07, 0x04, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xc0, 0xc0, 0x40, 0xfc, 0x20,
++ 0xf0, 0x0c, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x01, 0x3c, 0x00, 0x3f,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0xf0, 0x90, 0x90, 0xfc,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7f, 0x01, 0x3d, 0x01, 0x3d,
++ 0x00, 0x3f, 0x24, 0x24, 0x3c, 0x25, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x78, 0x00, 0xf8, 0x08,
++ 0x08, 0xfc, 0x50, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x3b, 0x00, 0x7d, 0x03, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3f, 0x24, 0x24, 0x3c, 0x27, 0x00, 0x00,
++ 0x90, 0xfc, 0xb0, 0xfc, 0x20, 0xf8, 0xf8, 0x20,
++ 0xfc, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2e, 0x2e, 0x3f,
++ 0x37, 0x27, 0x3f, 0x23, 0x3e, 0x22, 0x00, 0x00,
++ 0x80, 0xb8, 0xa8, 0xa8, 0xe8, 0xb8, 0xa8, 0xe8,
++ 0x78, 0x68, 0xe8, 0x48, 0x48, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x1f, 0x10, 0x20, 0x4f, 0x01,
++ 0x02, 0x04, 0x08, 0x10, 0x10, 0x0f, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xc0, 0x00,
++ 0x00, 0x00, 0x00, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x04, 0x04, 0x08, 0x14, 0x22,
++ 0x02, 0x01, 0x01, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x20, 0x50, 0x48, 0x48,
++ 0x80, 0x80, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x11, 0x11, 0x32, 0x55, 0x11,
++ 0x10, 0x10, 0x10, 0x11, 0x16, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x20, 0x10, 0x28, 0x28, 0x20,
++ 0xc0, 0xc0, 0xc0, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x09, 0x08, 0x08, 0x17, 0x11, 0x31, 0x51, 0x12,
++ 0x14, 0x17, 0x10, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0xf0, 0x10, 0x10, 0xfc, 0x00, 0x00, 0xf8, 0x40,
++ 0x40, 0xfc, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x09, 0x08, 0x0c, 0x17, 0x34, 0x54, 0x15, 0x16,
++ 0x17, 0x14, 0x14, 0x14, 0x11, 0x16, 0x00, 0x00,
++ 0xf0, 0x10, 0x10, 0xfc, 0x80, 0xf8, 0x20, 0x20,
++ 0xfc, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x10, 0x10, 0x37, 0x51, 0x11,
++ 0x17, 0x10, 0x10, 0x13, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x20,
++ 0xfc, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x11, 0x09, 0x09, 0x01, 0x7f, 0x04,
++ 0x04, 0x04, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x10, 0x20, 0x00, 0xfc, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x04, 0x04, 0x08, 0x08, 0x11, 0x21, 0x41,
++ 0x02, 0x02, 0x02, 0x04, 0x3f, 0x00, 0x00, 0x00,
++ 0xc0, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x00,
++ 0x40, 0x20, 0x10, 0x70, 0x88, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7c, 0x13, 0x10, 0x10, 0x10,
++ 0x10, 0x15, 0x19, 0x61, 0x02, 0x04, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0xf8, 0x88, 0x88, 0x88,
++ 0x88, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x14, 0x12, 0x23, 0x52,
++ 0x0c, 0x04, 0x0a, 0x12, 0x21, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x1f, 0x12, 0x22, 0x42, 0x03,
++ 0x04, 0x05, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08,
++ 0x88, 0xc8, 0x48, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x13, 0x12, 0x13, 0x12, 0x13, 0x10,
++ 0x13, 0x10, 0x2f, 0x20, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf0, 0x20, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x1f, 0x10, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0xf0, 0x10, 0x10, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x04, 0x3f, 0x20, 0x20, 0x27, 0x24,
++ 0x24, 0x24, 0x27, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0xc8, 0x48,
++ 0x48, 0x48, 0xc8, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x10, 0x13,
++ 0x12, 0x12, 0x22, 0x22, 0x43, 0x02, 0x00, 0x00,
++ 0x38, 0xc0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x4b, 0x4a, 0x4e, 0x4a, 0x4a,
++ 0x4b, 0x7b, 0x4a, 0x42, 0x02, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xfc, 0x40, 0x40, 0xfc, 0xa0,
++ 0x20, 0xfc, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x10, 0x17, 0x10, 0x7c, 0x11, 0x11, 0x11,
++ 0x11, 0x1d, 0x62, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0x00, 0xe0, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x12,
++ 0x12, 0x1e, 0x64, 0x04, 0x08, 0x00, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x13,
++ 0x3c, 0x24, 0x06, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x10, 0x10, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x3e, 0x02, 0x04, 0x04, 0x08, 0x08, 0x0e,
++ 0x78, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x01, 0x07,
++ 0x18, 0x60, 0x1f, 0x00, 0x00, 0x01, 0x00, 0x00,
++ 0x00, 0x10, 0xf0, 0x20, 0x40, 0xfc, 0x00, 0xe0,
++ 0x40, 0x80, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x42, 0x7f, 0x02, 0x04,
++ 0x04, 0x08, 0x11, 0x21, 0x4f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xfc, 0x00, 0x80,
++ 0x80, 0x80, 0x20, 0x30, 0xc8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x00, 0x7c, 0x10, 0x10, 0x11, 0x11,
++ 0x10, 0x1c, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0x80, 0xf8, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x04, 0x7f, 0x04, 0x0f,
++ 0x10, 0x6f, 0x08, 0x08, 0x08, 0x07, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0xe0,
++ 0x50, 0xcc, 0x40, 0x10, 0x10, 0xf0, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x08, 0x04, 0x7f,
++ 0x01, 0x01, 0x3f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x20, 0x40, 0xfc,
++ 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x11, 0x11, 0x22, 0x2f, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x80, 0x80, 0x80, 0x80,
++ 0x80, 0x20, 0x10, 0x38, 0xc4, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x17, 0x10, 0x1f, 0x10,
++ 0x17, 0x10, 0x11, 0x21, 0x22, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0xf0, 0x90, 0xfc, 0x90,
++ 0xf0, 0x90, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x17, 0x10, 0x1f, 0x10,
++ 0x17, 0x1c, 0x23, 0x26, 0x58, 0x01, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0xf0, 0x90, 0xfc, 0x90,
++ 0xf0, 0xc8, 0xb0, 0x90, 0x8c, 0x80, 0x00, 0x00,
++ 0x00, 0x7e, 0x02, 0x02, 0x3e, 0x22, 0x20, 0x3e,
++ 0x22, 0x02, 0x02, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40,
++ 0x40, 0x50, 0x88, 0x98, 0xe4, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x11, 0x39, 0x35, 0x35, 0x51,
++ 0x11, 0x11, 0x11, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x18, 0x37, 0x35, 0x31, 0x50,
++ 0x11, 0x11, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x90, 0xfc, 0x90, 0x40, 0xfc, 0x00, 0x00, 0xf8,
++ 0x50, 0x50, 0x50, 0x54, 0x54, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x11, 0x11, 0x15,
++ 0x19, 0x71, 0x11, 0x12, 0x12, 0x34, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0x00, 0xe0, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7f, 0x12, 0x14, 0x13, 0x12,
++ 0x1a, 0x73, 0x12, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0xc8, 0x48,
++ 0x48, 0xc8, 0x48, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x14, 0x10, 0x11, 0x16,
++ 0x1b, 0x70, 0x10, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0xa0, 0xa4, 0x1c, 0x00,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7e, 0x11, 0x11, 0x12, 0x10,
++ 0x14, 0x18, 0x60, 0x00, 0x03, 0x0c, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x06, 0x38,
++ 0x20, 0x20, 0x26, 0x38, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x11, 0x09,
++ 0x09, 0x7f, 0x02, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x10, 0x10,
++ 0x20, 0xfc, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x1f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x19, 0x05, 0x03, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x10, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x48, 0x09, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x00, 0xf0, 0x90, 0x90,
++ 0x90, 0x90, 0x90, 0x14, 0x14, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x18, 0x1d, 0x1a,
++ 0x2a, 0x28, 0x48, 0x08, 0x09, 0x0e, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x90, 0x88, 0x94, 0x94,
++ 0x50, 0x60, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x12, 0x13, 0x3a, 0x37,
++ 0x36, 0x51, 0x50, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x40, 0x80, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7f, 0x08, 0x1b, 0x1c, 0x1b,
++ 0x2b, 0x29, 0x49, 0x0b, 0x09, 0x09, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa0, 0xfc, 0x40, 0xf8,
++ 0x48, 0xf8, 0x48, 0xfc, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x40, 0x20, 0x20, 0x00, 0x08,
++ 0x08, 0x08, 0x10, 0x10, 0x27, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x41, 0x27, 0x21, 0x01, 0x01,
++ 0x1f, 0x11, 0x21, 0x22, 0x44, 0x48, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0x20,
++ 0xfc, 0x00, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x43, 0x22, 0x24, 0x0f, 0x00,
++ 0x13, 0x12, 0x22, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x09, 0x0f, 0x41, 0x2f, 0x21, 0x02, 0x17,
++ 0x18, 0x13, 0x22, 0x22, 0x42, 0x41, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0xfc, 0x20, 0x10, 0xec,
++ 0x20, 0xe0, 0x20, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x11, 0x0f, 0x09, 0x47, 0x21, 0x2f, 0x00, 0x13,
++ 0x12, 0x13, 0x22, 0x2f, 0x42, 0x42, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x80, 0xf0,
++ 0x90, 0xf0, 0x90, 0xfc, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x3f, 0x21, 0x21, 0x3f,
++ 0x21, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x08, 0xf8,
++ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x00,
++ 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x13, 0x12, 0x23, 0x3e, 0x67,
++ 0x26, 0x25, 0x3c, 0x20, 0x23, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x40, 0x80, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x1b, 0x70, 0x11, 0x11, 0x7d, 0x10, 0x1b,
++ 0x36, 0x36, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x08, 0xe8, 0xa8, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x57, 0x36, 0x3a, 0x12, 0x7f, 0x12, 0x1a,
++ 0x37, 0x36, 0x52, 0x14, 0x17, 0x18, 0x00, 0x00,
++ 0x40, 0xfc, 0x20, 0xf8, 0x28, 0xfc, 0x28, 0xf8,
++ 0x24, 0xa8, 0x70, 0xa8, 0x24, 0x60, 0x00, 0x00,
++ 0x08, 0x09, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7d,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x4b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7e,
++ 0x0c, 0x2a, 0x2b, 0x29, 0x4b, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x50, 0x90,
++ 0x90, 0xa0, 0x30, 0x48, 0xf4, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x72, 0x14, 0x0d, 0x12, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x90, 0x88, 0x94, 0x94, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x17, 0x66, 0x1a, 0x1b, 0x26, 0x7f,
++ 0x13, 0x3b, 0x37, 0x37, 0x52, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xa8, 0xc8, 0xf8, 0x48, 0x58,
++ 0x58, 0x58, 0xf8, 0x18, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x08, 0x7f, 0x08,
++ 0x1d, 0x1a, 0x2a, 0x48, 0x09, 0x0a, 0x00, 0x00,
++ 0x48, 0x48, 0x48, 0xfc, 0x48, 0x48, 0x48, 0x48,
++ 0xfc, 0x48, 0x88, 0x88, 0x08, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x03, 0x0f,
++ 0x72, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0xf0, 0x20, 0xfc, 0x80, 0x00, 0xf8,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xe0, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x09, 0x7f, 0x00, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x24, 0x3c, 0x24, 0x24,
++ 0x3c, 0x25, 0x25, 0x26, 0x25, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xa0, 0xa0,
++ 0xa0, 0x30, 0x48, 0x58, 0xe4, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x26, 0x24, 0x3c, 0x25, 0x26,
++ 0x3f, 0x24, 0x24, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0xa0, 0xa8, 0x18, 0x00,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x07, 0x04, 0x07, 0x3f, 0x27, 0x47,
++ 0x0f, 0x08, 0x0f, 0x0f, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0xc0, 0x40, 0xc0, 0xfc, 0xc8, 0xc0,
++ 0xe0, 0x20, 0xe0, 0xe0, 0x20, 0x60, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x13, 0x1a, 0x16, 0x16, 0x7f,
++ 0x12, 0x1a, 0x1a, 0x2a, 0x23, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x00, 0x70, 0x50, 0x50,
++ 0x50, 0x50, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x7f, 0x08, 0x08,
++ 0x07, 0x09, 0x09, 0x09, 0x11, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x00, 0x00,
++ 0xf0, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x09, 0x10, 0x24, 0x04, 0x0b, 0x08, 0x18,
++ 0x28, 0x48, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x12, 0x13, 0x24, 0x49, 0x0f, 0x15, 0x37, 0x55,
++ 0x17, 0x11, 0x1f, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xbc, 0x80, 0x00, 0xfc, 0x48, 0xc8, 0x48,
++ 0xc8, 0x08, 0xe8, 0x88, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x7f, 0x00, 0x3f, 0x00, 0x3d,
++ 0x01, 0x3d, 0x25, 0x27, 0x3d, 0x25, 0x00, 0x00,
++ 0xa0, 0xf8, 0xa0, 0xf8, 0xa0, 0xfc, 0x40, 0xf8,
++ 0x48, 0xf8, 0x48, 0xfc, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x27, 0x3c, 0x27, 0x3c, 0x25,
++ 0x25, 0x3d, 0x19, 0x17, 0x25, 0x41, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa0, 0xfc, 0x40, 0xf8,
++ 0x48, 0xf8, 0x48, 0xfc, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x7f, 0x12, 0x11, 0x22, 0x52,
++ 0x0c, 0x04, 0x0a, 0x12, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0xd0, 0x50, 0x60, 0xd0, 0xc8,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0x24, 0xfc, 0x28, 0x28, 0xfc, 0x20, 0xf8,
++ 0x88, 0x10, 0xfc, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1d, 0x19, 0x0f, 0x72, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x80, 0xa0, 0xa0, 0xa0,
++ 0xa0, 0xb0, 0x48, 0x58, 0xe4, 0x04, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x11, 0x11, 0x3d, 0x25, 0x65,
++ 0x25, 0x25, 0x3d, 0x26, 0x23, 0x04, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x00, 0x20, 0x20, 0x20,
++ 0x20, 0x30, 0x48, 0x48, 0xf4, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x1b, 0x26, 0x26, 0x7b, 0x12, 0x7f,
++ 0x13, 0x57, 0x3b, 0x33, 0x1e, 0x62, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xa8, 0xc8, 0xf8, 0x48, 0x58,
++ 0x58, 0x58, 0xf8, 0x18, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x22,
++ 0x2f, 0x30, 0x27, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x88,
++ 0xe8, 0x18, 0xc8, 0x48, 0xc8, 0x58, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x29, 0x32, 0x28, 0x27, 0x24,
++ 0x24, 0x24, 0x3b, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x78, 0x88, 0x50, 0x30, 0xdc, 0x10, 0xf8,
++ 0x90, 0x90, 0xfc, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x07, 0x00, 0x7c, 0x11, 0x11, 0x11, 0x11,
++ 0x15, 0x19, 0x61, 0x00, 0x03, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x6f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0x80, 0x40, 0x30, 0xec,
++ 0x20, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f, 0x00,
++ 0x3f, 0x20, 0x27, 0x24, 0x27, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0x00,
++ 0xf8, 0x08, 0xc8, 0x48, 0xc8, 0x18, 0x00, 0x00,
++ 0x20, 0x10, 0x11, 0x0f, 0x45, 0x25, 0x25, 0x05,
++ 0x15, 0x17, 0x39, 0x22, 0x42, 0x44, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xfc, 0x54, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x32, 0x2a, 0x2c, 0x3f, 0x24, 0x35,
++ 0x35, 0x35, 0x3f, 0x31, 0x20, 0x21, 0x00, 0x00,
++ 0x08, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x09, 0x08, 0x7f, 0x08,
++ 0x0c, 0x12, 0x16, 0x79, 0x01, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x00, 0x7f, 0x04,
++ 0x07, 0x08, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x00, 0xfc, 0x00,
++ 0xe0, 0x20, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x18, 0x6f, 0x00, 0x00,
++ 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0xec, 0x00, 0x00,
++ 0xe0, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x17, 0x11, 0x11, 0x7d, 0x17, 0x14, 0x17,
++ 0x14, 0x1f, 0x63, 0x00, 0x07, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0xf0, 0x10, 0xf0, 0xfc, 0x08, 0xf8,
++ 0xc8, 0x70, 0xb0, 0xe8, 0x24, 0xc0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x17, 0x10, 0x1c,
++ 0x71, 0x12, 0x14, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x50, 0xfc, 0x40, 0xf8,
++ 0x80, 0xf8, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x0f, 0x09, 0x41, 0x21, 0x27, 0x04, 0x0f,
++ 0x10, 0x17, 0x23, 0x21, 0x46, 0x40, 0x00, 0x00,
++ 0x40, 0xfc, 0xf0, 0x10, 0xf0, 0xfc, 0x08, 0xf8,
++ 0xc8, 0x70, 0xf0, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x01, 0x7f, 0x0f, 0x08, 0x0f, 0x3f, 0x20, 0x7f,
++ 0x07, 0x3a, 0x1d, 0x06, 0x38, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0xe0, 0x20, 0xe0, 0xfc, 0x08, 0xf8,
++ 0x88, 0xd0, 0xe0, 0xb0, 0x8c, 0x00, 0x00, 0x00,
++ 0x01, 0x1f, 0x07, 0x07, 0x07, 0x3f, 0x09, 0x7f,
++ 0x3e, 0x3e, 0x2a, 0x3e, 0x7f, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0xc0, 0xc0, 0xc0, 0xf8, 0x20, 0xfc,
++ 0xf8, 0xf8, 0xa8, 0xf8, 0xfc, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x08, 0x7f, 0x08,
++ 0x1e, 0x12, 0x2d, 0x44, 0x1b, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa4, 0x2c, 0xb4, 0x64, 0xfc,
++ 0x74, 0xac, 0x2c, 0x38, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x10, 0x10, 0x1f,
++ 0x12, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0x10, 0xf0,
++ 0x90, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x08, 0x0a, 0x32, 0x0c, 0x05,
++ 0x09, 0x12, 0x26, 0x09, 0x11, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0xc8, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x1f, 0x11, 0x21, 0x7f, 0x00,
++ 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00,
++ 0xe0, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x2f, 0x21, 0x21, 0x2f, 0x21,
++ 0x21, 0x21, 0x2f, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xe8, 0x08, 0x08, 0xe8, 0x08,
++ 0x48, 0x28, 0xe8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x00, 0x3f, 0x26, 0x79,
++ 0x08, 0x7f, 0x1c, 0x2a, 0x48, 0x0b, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x94, 0x94, 0x0c, 0x00, 0xf8,
++ 0x88, 0x50, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x10, 0xd0, 0x50, 0x7c, 0x90, 0x10, 0xfc, 0x00,
++ 0x78, 0x48, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x08, 0x28, 0x28, 0x3e, 0x28, 0x48, 0x7f, 0x00,
++ 0x3e, 0x22, 0x22, 0x3f, 0x21, 0x02, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x01, 0x3f,
++ 0x01, 0x7f, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x00, 0xfc, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x08, 0x4b, 0x30, 0x1f, 0x30, 0x4b, 0x08, 0x1b,
++ 0x28, 0x4b, 0x0a, 0x0b, 0x32, 0x10, 0x00, 0x00,
++ 0x10, 0x98, 0x14, 0xd4, 0x10, 0xfc, 0x10, 0x90,
++ 0x10, 0xa8, 0xa8, 0xa8, 0x44, 0x84, 0x00, 0x00,
++ 0x20, 0x10, 0x17, 0x44, 0x27, 0x24, 0x04, 0x17,
++ 0x15, 0x15, 0x25, 0x29, 0x49, 0x56, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0x20, 0xe8, 0x30, 0x64, 0xa4, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x2b, 0x2a, 0x3a, 0x2b, 0x28,
++ 0x3f, 0x28, 0x29, 0x28, 0x28, 0x5b, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0x40,
++ 0xfc, 0x90, 0xd0, 0x20, 0xd0, 0x08, 0x00, 0x00,
++ 0x22, 0x14, 0x7f, 0x49, 0x7f, 0x49, 0x7f, 0x00,
++ 0x3e, 0x22, 0x3e, 0x22, 0x3f, 0x22, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x78, 0x48, 0x68, 0x58,
++ 0x58, 0x88, 0x88, 0xec, 0x8c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x12, 0x22, 0x44, 0x08, 0x01,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x48, 0x48, 0x88, 0x88, 0x30,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x1a, 0x34, 0x35, 0x32, 0x50,
++ 0x10, 0x11, 0x15, 0x15, 0x19, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0xa8, 0xa8, 0x28, 0x48, 0xb0,
++ 0x80, 0x50, 0x48, 0x14, 0x14, 0xf0, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x09, 0x09, 0x3f, 0x20, 0x4f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xfc, 0x08, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x60, 0x00, 0x00,
++ 0x04, 0x44, 0x28, 0x11, 0x31, 0x49, 0x09, 0x19,
++ 0x29, 0x49, 0x09, 0x09, 0x31, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf8, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x21, 0x10, 0x10, 0x00, 0x00, 0x70, 0x11,
++ 0x11, 0x12, 0x14, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x40, 0x40, 0xc0, 0xa0, 0x20,
++ 0x10, 0x10, 0x08, 0x04, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x24, 0x27, 0x24, 0x24,
++ 0x24, 0x24, 0x25, 0x26, 0x38, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x48, 0x48, 0xd0, 0x60, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x27, 0x20, 0x20, 0x27, 0x39, 0x21, 0x21,
++ 0x25, 0x25, 0x1d, 0x00, 0x03, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x18, 0x67, 0x00, 0x00,
++ 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0xcc, 0x00, 0x00,
++ 0xe0, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x3f, 0x23, 0x23, 0x25,
++ 0x25, 0x29, 0x31, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x88, 0x88, 0x48,
++ 0x48, 0x28, 0x18, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x13, 0x7e, 0x12, 0x13, 0x12,
++ 0x16, 0x1b, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0xf8, 0x48,
++ 0x48, 0xf8, 0x48, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x0c, 0x79, 0x26, 0x18, 0x6c, 0x36, 0x1a, 0x62,
++ 0x0d, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0xc8, 0xb0, 0xd8,
++ 0x84, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x27,
++ 0x79, 0x49, 0x0d, 0x15, 0x21, 0x41, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0xfc, 0x20, 0x10, 0xd4, 0x0c,
++ 0xfc, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x35, 0x35, 0x31, 0x51,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf4,
++ 0x44, 0x28, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x0c, 0x78, 0x26, 0x18, 0x78, 0x1c, 0x6c, 0x14,
++ 0x65, 0x19, 0x04, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xa4, 0xb8,
++ 0xc8, 0x04, 0x90, 0x88, 0x24, 0xe4, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x70, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x70, 0x80, 0x80, 0xfc, 0x40, 0x24, 0x1c, 0xf4,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x1f, 0x10,
++ 0x10, 0x1f, 0x10, 0x10, 0x1e, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x80,
++ 0x98, 0xe0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x09, 0x7f, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x0e, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf4,
++ 0x44, 0x28, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x13, 0x3a, 0x36,
++ 0x36, 0x53, 0x52, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x48, 0xe8,
++ 0xd8, 0x58, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x23, 0x22, 0x03, 0x12,
++ 0x12, 0x13, 0x22, 0x22, 0x43, 0x4c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x40,
++ 0x48, 0xf0, 0x40, 0x44, 0xc4, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2b, 0x2a, 0x0b, 0x1a,
++ 0x2b, 0x4a, 0x12, 0x12, 0x23, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf8, 0x48, 0x50, 0x20, 0x90, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x17, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x88, 0x88, 0x88, 0x88, 0xfc, 0x88, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x10, 0x1f,
++ 0x11, 0x11, 0x10, 0x13, 0x1c, 0x70, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x20, 0xe8,
++ 0x08, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x02, 0x03, 0x7e, 0x13, 0x1a,
++ 0x14, 0x27, 0x7b, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xc8,
++ 0xd0, 0x50, 0x68, 0x7c, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x28, 0x2f, 0x28, 0x28, 0x2e, 0x70,
++ 0x00, 0x1f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0x98, 0xe0, 0x80, 0x84, 0x84, 0x7c,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x10, 0x30, 0x50, 0x11,
++ 0x11, 0x12, 0x14, 0x18, 0x13, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x80, 0x80, 0x80, 0xf8,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x09, 0x09, 0x04, 0x04, 0x02,
++ 0x01, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x79, 0x4f, 0x49, 0x49, 0x4a, 0x4c,
++ 0x49, 0x7b, 0x4c, 0x40, 0x01, 0x0e, 0x00, 0x00,
++ 0x80, 0x90, 0x18, 0xe4, 0x20, 0x24, 0x9c, 0xf0,
++ 0x10, 0x20, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x01, 0x10, 0x13, 0x10, 0x55, 0x54, 0x57, 0x54,
++ 0x55, 0x7d, 0x46, 0x44, 0x0b, 0x00, 0x00, 0x00,
++ 0x08, 0x90, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x80,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x7f, 0x02, 0x02, 0x04, 0x07,
++ 0x08, 0x08, 0x10, 0x20, 0x5f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xf0,
++ 0x80, 0x80, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f,
++ 0x08, 0x0f, 0x10, 0x20, 0x5f, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x6f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30, 0xec, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x42, 0x22, 0x22, 0x04, 0x14,
++ 0x18, 0x10, 0x20, 0x20, 0x41, 0x4e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x50, 0x48, 0x48, 0x4c, 0x54,
++ 0xd0, 0x60, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x01, 0x00, 0x7c, 0x13, 0x10, 0x11, 0x7c, 0x17,
++ 0x11, 0x13, 0x1a, 0x64, 0x0b, 0x00, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xf8, 0x40, 0xf0, 0x40, 0xfc,
++ 0x00, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x08, 0x08, 0x08, 0x10, 0x1f, 0x33,
++ 0x52, 0x12, 0x12, 0x1e, 0x10, 0x03, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xb0, 0xa8, 0xa8, 0x24, 0x2c,
++ 0x68, 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3d, 0x02, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x40, 0x40, 0x7c, 0x40,
++ 0x40, 0x7c, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x73, 0x00, 0x00,
++ 0x20, 0x24, 0xa4, 0xa8, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x09, 0x49, 0x22, 0x2c, 0x08, 0x17, 0x21,
++ 0x7f, 0x02, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x4c, 0xd4, 0x60, 0x80, 0x00,
++ 0xfc, 0x90, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x09, 0x19, 0x15, 0x23, 0x41,
++ 0x3f, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x20, 0x20, 0x60, 0x50, 0x88, 0x04,
++ 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x14, 0x14, 0x16, 0x19,
++ 0x10, 0x17, 0x20, 0x20, 0x5f, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x90, 0x90, 0x98, 0xa4,
++ 0xc4, 0xf0, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x11, 0x12, 0x1c,
++ 0x70, 0x13, 0x10, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0x50, 0x50, 0x50, 0x58, 0xe4, 0x44,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x13, 0x10, 0x3f, 0x53, 0x12,
++ 0x13, 0x13, 0x12, 0x13, 0x13, 0x1c, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x10, 0x08, 0x00, 0x00,
++ 0x08, 0x0a, 0x0a, 0x13, 0x12, 0x31, 0x53, 0x16,
++ 0x1b, 0x12, 0x13, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x98, 0x20, 0xfc, 0x20,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x1f, 0x11, 0x11, 0x1f, 0x11,
++ 0x11, 0x7f, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10,
++ 0x10, 0xfc, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x7f, 0x12,
++ 0x1e, 0x1e, 0x12, 0x1e, 0x73, 0x02, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xfc, 0x00,
++ 0xf8, 0x48, 0x30, 0x70, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x08, 0x08, 0x7f, 0x00, 0x3e,
++ 0x22, 0x22, 0x22, 0x3e, 0x22, 0x20, 0x00, 0x00,
++ 0x80, 0x90, 0x88, 0x88, 0x80, 0xfc, 0x48, 0x48,
++ 0x50, 0x30, 0x20, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x7f, 0x04, 0x1f, 0x04, 0x7f,
++ 0x05, 0x19, 0x6f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0x40, 0xf0, 0x40, 0xfc,
++ 0x40, 0x30, 0xec, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x01, 0x7f, 0x01, 0x1f,
++ 0x02, 0x7f, 0x04, 0x0f, 0x01, 0x3e, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xfc, 0x10, 0xf0,
++ 0x00, 0xfc, 0x20, 0x40, 0xe0, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x21, 0x7f, 0x08, 0x04, 0x7f,
++ 0x01, 0x01, 0x3f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xf8, 0x20, 0x40, 0xfc,
++ 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x06, 0x79, 0x49, 0x2a, 0x24, 0x08, 0x08, 0x7f,
++ 0x1c, 0x1a, 0x29, 0x48, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x28, 0x48, 0x90, 0x10, 0x24,
++ 0x44, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x01,
++ 0x02, 0x0c, 0x30, 0x00, 0x00, 0x01, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0xa0, 0xc0, 0x80, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7d, 0x11, 0x10, 0x10, 0x1f,
++ 0x70, 0x10, 0x11, 0x12, 0x14, 0x30, 0x00, 0x00,
++ 0x18, 0xe8, 0x48, 0x50, 0x20, 0x40, 0x40, 0xfc,
++ 0xe0, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x08, 0x08, 0x7f, 0x08, 0x7f,
++ 0x1c, 0x1a, 0x29, 0x48, 0x08, 0x09, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x48, 0x40, 0xfc, 0x48, 0x48,
++ 0x50, 0x30, 0x24, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x3f, 0x00, 0x1f, 0x10, 0x1f,
++ 0x12, 0x17, 0x16, 0x2a, 0x32, 0x46, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x50, 0xfc, 0x40, 0xc8,
++ 0x28, 0x30, 0x90, 0xb4, 0x4c, 0x84, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x41, 0x20, 0x20, 0x07, 0x09,
++ 0x09, 0x09, 0x11, 0x12, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0xe0, 0x1c, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x11, 0x22, 0x11, 0x08, 0x01, 0x01,
++ 0x11, 0x12, 0x22, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x88, 0x88, 0x10, 0x20, 0x10, 0x88, 0x00, 0x08,
++ 0x08, 0x90, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x11, 0x08, 0x08, 0x01, 0x7f,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x18, 0xe8, 0x08, 0x10, 0xa0, 0x40, 0x00, 0xfc,
++ 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x16, 0x10, 0x16,
++ 0x12, 0x17, 0x28, 0x2f, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x88, 0xb0, 0x80, 0xb0,
++ 0x80, 0xf0, 0x80, 0xf8, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x3f, 0x09, 0x08, 0x08, 0x10, 0x1f, 0x32,
++ 0x52, 0x13, 0x12, 0x1e, 0x10, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0x94, 0x94, 0x0c, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x2f, 0x28, 0x28, 0x2e, 0x70, 0x3f,
++ 0x02, 0x07, 0x1c, 0x64, 0x07, 0x04, 0x00, 0x00,
++ 0x80, 0x88, 0x90, 0xe4, 0x84, 0x7c, 0x00, 0xf8,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x0f, 0x11, 0x2a, 0x64, 0x18, 0x1f, 0x60,
++ 0x1f, 0x09, 0x09, 0x11, 0x21, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x20, 0x10, 0xec, 0x00,
++ 0xf8, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x04, 0x03, 0x06, 0x78, 0x17,
++ 0x10, 0x1f, 0x15, 0x15, 0x29, 0x43, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x80, 0xc0, 0x3c, 0xd0,
++ 0x10, 0xf0, 0x90, 0x50, 0x50, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0xf8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x12, 0x09, 0x08, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x70, 0x90, 0x10, 0x20, 0x40, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x08, 0x7f, 0x08, 0x7f, 0x08,
++ 0x19, 0x36, 0x52, 0x15, 0x19, 0x60, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x48, 0xfc, 0x40, 0x48, 0x48,
++ 0x50, 0x30, 0x24, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x04, 0x1f, 0x04, 0x7f, 0x04, 0x7f, 0x1f, 0x15,
++ 0x1f, 0x15, 0x1f, 0x7f, 0x04, 0x04, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0xfc, 0x40, 0xc8, 0x48, 0x48,
++ 0x50, 0x30, 0x24, 0xd4, 0x8c, 0x04, 0x00, 0x00,
++ 0x01, 0x3d, 0x25, 0x2a, 0x32, 0x2d, 0x25, 0x26,
++ 0x27, 0x24, 0x39, 0x21, 0x22, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xe8, 0xb0, 0x90, 0xf8, 0x04,
++ 0xf8, 0x40, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x11, 0x0e, 0x1b, 0x71, 0x1f,
++ 0x11, 0x1f, 0x11, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x08, 0x48, 0xc8, 0x48, 0x48, 0xc8, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x7f, 0x04, 0x0c, 0x08, 0x0b,
++ 0x18, 0x28, 0x48, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x49, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x10, 0x30, 0x30, 0x50,
++ 0x50, 0x90, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x3f, 0x02, 0x3e, 0x02,
++ 0x3e, 0x02, 0x1c, 0x64, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x40, 0x78, 0x40,
++ 0x78, 0x40, 0x7c, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3f, 0x22, 0x3e, 0x22,
++ 0x22, 0x3e, 0x15, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x30, 0x30, 0x50,
++ 0x50, 0x90, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x03, 0x21, 0x11, 0x11, 0x01, 0x0f, 0x10,
++ 0x10, 0x20, 0x20, 0x43, 0x4c, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0x10, 0x10, 0x10, 0xfc, 0x30,
++ 0x30, 0x50, 0x90, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x11,
++ 0x11, 0x1e, 0x62, 0x04, 0x0b, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x29, 0x29, 0x31, 0x29, 0x25,
++ 0x25, 0x25, 0x3a, 0x22, 0x25, 0x2e, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x13, 0x7e, 0x13, 0x12, 0x10,
++ 0x1d, 0x73, 0x0d, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x48, 0xa0,
++ 0x30, 0x28, 0x24, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7f, 0x10, 0x18, 0x35, 0x35,
++ 0x33, 0x55, 0x59, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0xd4, 0xd4, 0x7c, 0x54,
++ 0xd4, 0xfc, 0x54, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x02, 0x01, 0x1f, 0x01, 0x7f, 0x02, 0x07, 0x0c,
++ 0x17, 0x64, 0x07, 0x04, 0x04, 0x04, 0x00, 0x00,
++ 0x20, 0xc0, 0x60, 0x10, 0xfc, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x02, 0x01, 0x79, 0x4b, 0x48, 0x48, 0x48, 0x4f,
++ 0x48, 0x78, 0x48, 0x41, 0x06, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xf8, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x2a, 0x2a, 0x2a, 0x2b, 0x2a,
++ 0x2a, 0x2a, 0x3e, 0x22, 0x20, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x50, 0x88, 0xfc, 0x08,
++ 0xe8, 0xa8, 0xe8, 0xa8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x10, 0x7c, 0x13, 0x17, 0x10,
++ 0x17, 0x1a, 0x62, 0x03, 0x02, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x60, 0x90, 0x08, 0xfc, 0x08,
++ 0xc8, 0x48, 0x48, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x7c, 0x13, 0x10, 0x10, 0x3d, 0x27, 0x64,
++ 0x25, 0x25, 0x3d, 0x21, 0x21, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x60, 0x90, 0x10, 0xfc, 0x08,
++ 0xe8, 0x28, 0x28, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x23, 0x3e, 0x2f, 0x3e, 0x6f, 0x08,
++ 0x0f, 0x0f, 0x0f, 0x0f, 0x2a, 0x45, 0x00, 0x00,
++ 0x40, 0x78, 0x90, 0x70, 0xfc, 0x70, 0xe0, 0x20,
++ 0xe0, 0xe0, 0xfc, 0xf8, 0x88, 0x70, 0x00, 0x00,
++ 0x09, 0x09, 0x09, 0x13, 0x12, 0x34, 0x58, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x80, 0x80, 0xf8, 0x80,
++ 0x80, 0xf8, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x08, 0x49, 0x29, 0x2a, 0x08, 0x3e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x22, 0x22, 0x22, 0x26, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x4b, 0x4a, 0x4c, 0x48, 0x48,
++ 0x48, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x80, 0x80, 0xf8, 0x80,
++ 0x80, 0xf8, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x14, 0x11, 0x13, 0x19,
++ 0x72, 0x14, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0xa8, 0x18, 0x00, 0xfc,
++ 0x40, 0x78, 0x40, 0x78, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x49, 0x4a, 0x4a, 0x7c, 0x48,
++ 0x48, 0x48, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x40, 0x40, 0x7c, 0x40,
++ 0x40, 0x7c, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x22, 0x12, 0x14, 0x7f, 0x08, 0x2a, 0x2a, 0x2a,
++ 0x3e, 0x2a, 0x28, 0x08, 0x11, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x1a, 0x17, 0x36,
++ 0x32, 0x52, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0xfc, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x44, 0x0a, 0x12, 0x07,
++ 0x19, 0x61, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x88, 0x78, 0x00, 0xfc,
++ 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x7f, 0x01, 0x1f,
++ 0x11, 0x13, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0xfc, 0x00, 0xf0,
++ 0x10, 0xe0, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x3f, 0x22, 0x4c, 0x03,
++ 0x02, 0x7f, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x48, 0x80, 0x40,
++ 0x30, 0xc8, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x13, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x50, 0x50, 0x50, 0xfc, 0x50, 0x50, 0xfc, 0x00,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x0a, 0x09, 0x7f, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x28, 0x29, 0x49, 0x08, 0x08, 0x0b, 0x00, 0x00,
++ 0x88, 0x48, 0x48, 0x10, 0x60, 0x40, 0xfc, 0x90,
++ 0x90, 0xd0, 0x20, 0x30, 0xc8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x14, 0x23, 0x49, 0x09, 0x7f,
++ 0x09, 0x09, 0x09, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0xe0, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x00, 0x7f,
++ 0x04, 0x17, 0x14, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x48, 0x48, 0x50, 0x60, 0xc0,
++ 0x40, 0x44, 0x44, 0x3c, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x12, 0x12, 0x12, 0x12, 0x7f,
++ 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90, 0xfc,
++ 0x90, 0x90, 0x90, 0x90, 0x90, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x3f, 0x24, 0x24, 0x3f,
++ 0x35, 0x55, 0x55, 0x17, 0x14, 0x04, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x28, 0x4f, 0x19, 0x66, 0x14, 0x1f,
++ 0x60, 0x3f, 0x05, 0x19, 0x61, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf8, 0x90, 0x60, 0x30, 0xec,
++ 0x00, 0xf8, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x12, 0x7c, 0x12, 0x11, 0x10, 0x14,
++ 0x18, 0x71, 0x12, 0x10, 0x10, 0x33, 0x00, 0x00,
++ 0x24, 0x24, 0x48, 0x90, 0x48, 0xa4, 0x40, 0x78,
++ 0x88, 0x90, 0x50, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x1f, 0x1c,
++ 0x77, 0x17, 0x14, 0x17, 0x1c, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc, 0x80,
++ 0xf8, 0xc8, 0xa8, 0x90, 0xe8, 0x84, 0x00, 0x00,
++ 0x10, 0x13, 0x13, 0x7d, 0x13, 0x16, 0x11, 0x1b,
++ 0x74, 0x13, 0x11, 0x12, 0x14, 0x30, 0x00, 0x00,
++ 0x40, 0xfc, 0x08, 0xf8, 0x68, 0xf0, 0x90, 0xf8,
++ 0x04, 0xf8, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x18, 0x1c, 0x1a,
++ 0x29, 0x29, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x02, 0x02, 0x34, 0x0c, 0x1a, 0x69, 0x0a, 0x7f,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x0b, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x94, 0x94, 0x0c, 0x00, 0xf8,
++ 0x88, 0x50, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x24, 0x28, 0x31, 0x29,
++ 0x25, 0x25, 0x25, 0x3a, 0x25, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x60, 0xfc, 0x88, 0x50, 0xfc, 0x60,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7c, 0x14, 0x15, 0x23, 0x48, 0x08,
++ 0x7f, 0x1c, 0x1a, 0x29, 0x48, 0x08, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x02, 0x04, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x1d,
++ 0x01, 0x1d, 0x01, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x70,
++ 0x00, 0x70, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x1e, 0x24, 0x7e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x98, 0x00, 0x00,
++ 0x10, 0x17, 0x14, 0x7c, 0x14, 0x17, 0x12, 0x1a,
++ 0x73, 0x12, 0x14, 0x14, 0x18, 0x33, 0x00, 0x00,
++ 0x08, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x28, 0x28,
++ 0xa8, 0xa8, 0xa8, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7e, 0x2a, 0x3e, 0x2b,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x43, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x50, 0x48, 0x94, 0x54,
++ 0x50, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x12, 0x12, 0x12, 0x12,
++ 0x12, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x4b, 0x4a, 0x7a, 0x4a,
++ 0x4a, 0x4b, 0x7a, 0x4a, 0x43, 0x02, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xb8, 0x38, 0x18, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x05, 0x19, 0x69, 0x09, 0x15, 0x2b,
++ 0x09, 0x15, 0x23, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x30, 0x2c, 0x20, 0x50, 0xa8,
++ 0x20, 0x50, 0x88, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x04, 0x3f, 0x02, 0x7f, 0x04, 0x09,
++ 0x16, 0x61, 0x0e, 0x00, 0x01, 0x1e, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x90, 0x00, 0xfc, 0xc0, 0x20,
++ 0x50, 0x8c, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3f, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x1b, 0x34, 0x37, 0x30, 0x51,
++ 0x16, 0x11, 0x10, 0x11, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0x60, 0x90, 0xe8, 0x40, 0xfc, 0xa0, 0x10,
++ 0x4c, 0xa0, 0x48, 0x90, 0x60, 0x80, 0x00, 0x00,
++ 0x12, 0x12, 0x17, 0x7a, 0x12, 0x1f, 0x10, 0x1f,
++ 0x74, 0x17, 0x14, 0x17, 0x14, 0x35, 0x00, 0x00,
++ 0xa0, 0xa0, 0xe0, 0xbc, 0xa8, 0xc8, 0x28, 0xa8,
++ 0xb0, 0x90, 0x90, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x14, 0x14, 0x3f, 0x14, 0x14, 0x7f, 0x01, 0x3e,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x27, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x88, 0x88, 0x48, 0x50,
++ 0x30, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x19, 0x1c, 0x1b,
++ 0x2a, 0x28, 0x48, 0x08, 0x08, 0x0b, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0xf8, 0x40, 0xfc,
++ 0x28, 0x28, 0x10, 0x34, 0xcc, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x17, 0x36, 0x3d, 0x51, 0x16,
++ 0x11, 0x17, 0x18, 0x29, 0x26, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xe8, 0x90, 0xa8, 0x44, 0x48,
++ 0x50, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x00, 0x03, 0x7e, 0x12, 0x12, 0x12, 0x7f, 0x12,
++ 0x12, 0x12, 0x1e, 0x62, 0x02, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0xfc, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x01, 0x3f, 0x04, 0x02, 0x1f, 0x12, 0x12, 0x17,
++ 0x18, 0x17, 0x20, 0x20, 0x5f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xfc, 0x80, 0x80, 0xf8,
++ 0x80, 0xf0, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x4f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x04, 0x7f, 0x04, 0x18, 0x00, 0x00,
++ 0x40, 0xfc, 0x90, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x4f, 0x08, 0x0f, 0x0f, 0x0f,
++ 0x7f, 0x16, 0x63, 0x3f, 0x0d, 0x31, 0x00, 0x00,
++ 0x40, 0xfc, 0x90, 0xe0, 0x20, 0xe0, 0xe0, 0xe0,
++ 0xfc, 0x90, 0x6c, 0xf0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x1f, 0x02, 0x05, 0x19, 0x6f,
++ 0x09, 0x09, 0x0f, 0x09, 0x01, 0x3e, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x80, 0x40, 0x30, 0xec,
++ 0x20, 0x20, 0xe0, 0x20, 0xf0, 0x08, 0x00, 0x00,
++ 0x01, 0x3b, 0x01, 0x7f, 0x02, 0x3f, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x26, 0x00, 0x00,
++ 0x10, 0xf8, 0x10, 0xfc, 0xa8, 0xf4, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x90, 0x0c, 0x00, 0x00,
++ 0x04, 0x3f, 0x04, 0x7f, 0x0a, 0x1f, 0x68, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x20, 0xf8, 0x20, 0xfc, 0x50, 0xe8, 0x24, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0xb0, 0x28, 0xfc, 0x50, 0x54, 0xac, 0x38,
++ 0x48, 0x50, 0xb0, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x0f, 0x1f, 0x72, 0x0d, 0x33, 0x0d, 0x77,
++ 0x04, 0x07, 0x07, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x30, 0x48, 0x84, 0x60, 0xdc,
++ 0x40, 0xc0, 0xd0, 0xa0, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x09, 0x0a, 0x08, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x2a, 0x3e, 0x3e, 0x7f, 0x09,
++ 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0xfc, 0x90, 0x90, 0x90, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x13, 0x1c, 0x27, 0x24, 0x57,
++ 0x18, 0x08, 0x10, 0x10, 0x20, 0x43, 0x00, 0x00,
++ 0x50, 0x48, 0x40, 0xf8, 0x40, 0xf8, 0x40, 0xfc,
++ 0x28, 0x28, 0x10, 0x34, 0xcc, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x10, 0x10, 0x37, 0x50, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x13, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x10, 0x10, 0x30, 0x50, 0x17,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0x20, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x17, 0x10, 0x33, 0x52, 0x12,
++ 0x12, 0x13, 0x12, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xe8, 0x08, 0xc8, 0x48, 0x48,
++ 0x48, 0xc8, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x13, 0x32, 0x52, 0x13,
++ 0x12, 0x11, 0x10, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x40, 0x80, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3f, 0x25, 0x25, 0x27,
++ 0x0c, 0x0e, 0x15, 0x25, 0x44, 0x04, 0x00, 0x00,
++ 0x08, 0x48, 0xc8, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x3f, 0x00, 0x1f, 0x10, 0x10,
++ 0x10, 0x1f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xc8, 0x08, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x11, 0x11, 0x11, 0x1f,
++ 0x11, 0x0a, 0x06, 0x07, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0,
++ 0x10, 0x00, 0x00, 0x00, 0xc0, 0x3c, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x00, 0x7f, 0x55,
++ 0x55, 0x7f, 0x55, 0x55, 0x55, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x04, 0x74, 0x04, 0x74, 0x54, 0x54,
++ 0x54, 0x74, 0x54, 0x04, 0x04, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x44, 0x44, 0x44, 0x44, 0x48, 0x48,
++ 0x50, 0x60, 0x40, 0x7f, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x98, 0x98,
++ 0x78, 0x08, 0x08, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x7f, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0x7c, 0x24, 0x27, 0x24,
++ 0x75, 0x49, 0x0d, 0x15, 0x21, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x50, 0x88, 0x9c, 0xe4, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xb0, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x31, 0x0b, 0x02, 0x0c, 0x11, 0x66, 0x01,
++ 0x7f, 0x02, 0x07, 0x08, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0xc0, 0x30, 0x0c, 0x00,
++ 0xfc, 0x20, 0x40, 0xc0, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x01, 0x7f,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x20, 0x40, 0x80, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x12, 0x13,
++ 0x14, 0x1d, 0x23, 0x22, 0x4c, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xfc, 0x40, 0xc8,
++ 0xf0, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x01, 0x1f, 0x11, 0x11,
++ 0x11, 0x11, 0x11, 0x11, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x20,
++ 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xb0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x1f, 0x01,
++ 0x04, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x00,
++ 0x90, 0x88, 0x04, 0x24, 0x20, 0xe0, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x1f,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf0,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x11, 0x10, 0x10, 0x1d,
++ 0x71, 0x11, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x00, 0x18, 0xe0, 0x00, 0x04, 0xfc, 0x00, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x1f, 0x04,
++ 0x04, 0x02, 0x01, 0x03, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xe0, 0x20,
++ 0x40, 0x40, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x7e, 0x02, 0x04, 0x09, 0x09, 0x0e, 0x78,
++ 0x08, 0x08, 0x08, 0x08, 0x0b, 0x1c, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x7f, 0x12, 0x1e, 0x12, 0x1e,
++ 0x12, 0x7f, 0x14, 0x12, 0x23, 0x40, 0x00, 0x00,
++ 0x08, 0x10, 0x60, 0xc0, 0x40, 0x7c, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x11, 0x12, 0x1c, 0x17,
++ 0x14, 0x14, 0x24, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0xa0, 0xb8, 0xe8, 0xa8,
++ 0xa8, 0xa8, 0xb8, 0xa0, 0x84, 0x7c, 0x00, 0x00,
++ 0x20, 0x20, 0x3f, 0x20, 0x20, 0x1f, 0x00, 0x1f,
++ 0x10, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x70, 0x80, 0x08, 0x08, 0xf8, 0x00, 0xe0,
++ 0x20, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1b, 0x1b,
++ 0x28, 0x28, 0x48, 0x08, 0x09, 0x0e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x08,
++ 0x90, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11,
++ 0x11, 0x11, 0x11, 0x11, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x08, 0x0e, 0x12, 0x12, 0x2a,
++ 0x44, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0x88, 0x88, 0x90, 0xa0,
++ 0xc0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x01, 0x1f, 0x11, 0x11, 0x11, 0x1f, 0x10,
++ 0x10, 0x10, 0x10, 0x13, 0x1c, 0x60, 0x00, 0x00,
++ 0x60, 0x80, 0x00, 0x00, 0x00, 0x78, 0x80, 0x80,
++ 0x40, 0x40, 0x24, 0x14, 0x0c, 0x04, 0x00, 0x00,
++ 0x12, 0x52, 0x34, 0x27, 0x35, 0x55, 0x17, 0x34,
++ 0x37, 0x55, 0x15, 0x17, 0x14, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x10, 0x7c, 0x54, 0x54, 0x54,
++ 0x54, 0x54, 0x5c, 0x50, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x04, 0x08, 0x0c, 0x1a,
++ 0x2a, 0x48, 0x08, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xa0, 0xbc, 0xa0, 0xa0,
++ 0xa0, 0xa0, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x06, 0x3c, 0x04, 0x04, 0x7f, 0x0c, 0x0e,
++ 0x15, 0x15, 0x24, 0x44, 0x07, 0x04, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40,
++ 0x60, 0x50, 0x88, 0x98, 0xe4, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x1c, 0x03, 0x01, 0x02, 0x7f,
++ 0x01, 0x09, 0x09, 0x11, 0x21, 0x01, 0x00, 0x00,
++ 0x00, 0x20, 0x20, 0x40, 0x80, 0x20, 0x18, 0xe4,
++ 0x00, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x0b, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0xa0, 0xa0, 0xfc, 0xa0, 0xa0,
++ 0x90, 0x90, 0x94, 0xac, 0xcc, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x2f, 0x28, 0x28, 0x2f, 0x72, 0x0c,
++ 0x03, 0x7f, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x80, 0x98, 0xe0, 0x80, 0x84, 0x7c, 0x40, 0xc0,
++ 0x30, 0xc8, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x3c, 0x24, 0x27, 0x3d,
++ 0x24, 0x24, 0x24, 0x24, 0x25, 0x4e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x08,
++ 0x90, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x01, 0x3d, 0x25, 0x25, 0x25, 0x3c, 0x24, 0x24,
++ 0x3c, 0x24, 0x24, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x00, 0x18, 0xe0, 0x04, 0x04, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x02, 0x04, 0x3f, 0x01, 0x01,
++ 0x1f, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x40, 0x30, 0xc8, 0x00, 0x00,
++ 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x09, 0x11, 0x19,
++ 0x35, 0x54, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0xf8,
++ 0xa8, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x01, 0x3c, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xe8, 0x28,
++ 0x28, 0xe8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3f, 0x00, 0x3c,
++ 0x03, 0x3d, 0x24, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x00, 0x3c, 0x03, 0x3c,
++ 0x00, 0x3c, 0x24, 0x27, 0x3c, 0x20, 0x00, 0x00,
++ 0x30, 0x28, 0x28, 0xfc, 0x20, 0x20, 0xe0, 0xa0,
++ 0x90, 0xb0, 0xd4, 0x0c, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x00, 0x3c, 0x03, 0x3c,
++ 0x00, 0x3d, 0x25, 0x26, 0x3c, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x40,
++ 0xb0, 0xa8, 0x84, 0x94, 0x90, 0x70, 0x00, 0x00,
++ 0x00, 0x3e, 0x01, 0x7d, 0x00, 0x3c, 0x03, 0x3c,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa4, 0x28, 0xb0, 0x50, 0x48,
++ 0x84, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x09, 0x0a, 0x04, 0x19, 0x6f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0xe0, 0x30, 0xec, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x3c, 0x27,
++ 0x25, 0x3d, 0x1a, 0x14, 0x25, 0x42, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0xa8, 0x48, 0xb0, 0x00, 0x00,
++ 0x0a, 0x0a, 0x0a, 0x0a, 0x2a, 0x2f, 0x2a, 0x2a,
++ 0x2a, 0x2a, 0x2f, 0x3b, 0x61, 0x00, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x1a, 0x2a, 0x7e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x24, 0x26, 0x3a, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xe8, 0xa8, 0xa8,
++ 0xa8, 0xe8, 0xa8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x09, 0x7f, 0x29, 0x25, 0x3f,
++ 0x23, 0x25, 0x29, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xfc, 0x28, 0x48, 0xf8,
++ 0x88, 0x48, 0x28, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x0f, 0x09, 0x0f, 0x01, 0x1f,
++ 0x01, 0x7f, 0x01, 0x1f, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xf0,
++ 0x10, 0xfc, 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00,
++ 0x08, 0x0a, 0x0b, 0x12, 0x12, 0x32, 0x52, 0x12,
++ 0x12, 0x12, 0x12, 0x13, 0x1c, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x90, 0x50, 0x50, 0x10, 0x10,
++ 0x10, 0x10, 0xb0, 0x28, 0x44, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x10, 0x10, 0x37, 0x50, 0x10,
++ 0x17, 0x12, 0x11, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x10,
++ 0xfc, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x12, 0x13, 0x12, 0x12, 0x13,
++ 0x12, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf0,
++ 0x90, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x4f, 0x00, 0x01, 0x01,
++ 0x7f, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xe0, 0x40, 0x80, 0x00,
++ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x01, 0x7f, 0x00, 0x00,
++ 0x7f, 0x08, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x04, 0x7f, 0x08, 0x32, 0x0c, 0x12, 0x7f,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x20, 0x40, 0xfc, 0x20, 0xc8, 0x30, 0x48, 0xfc,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x17, 0x10, 0x10,
++ 0x1f, 0x71, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x48, 0x48, 0x4f, 0x78, 0x48,
++ 0x4f, 0x49, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x21, 0x11, 0x11, 0x02, 0x02, 0x14,
++ 0x10, 0x20, 0x20, 0x41, 0x46, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x48, 0x50, 0x40,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x11, 0x08, 0x08, 0x47, 0x21, 0x21, 0x01, 0x06,
++ 0x12, 0x11, 0x21, 0x22, 0x4f, 0x40, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xfc, 0x10, 0x10, 0x54, 0x64,
++ 0xa8, 0x98, 0x10, 0xa8, 0xfc, 0x44, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x21, 0x21, 0x0f, 0x00,
++ 0x13, 0x12, 0x22, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xa0, 0x10, 0x38, 0xc4, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x61, 0x3f, 0x23, 0x2d, 0x2b,
++ 0x33, 0x2d, 0x25, 0x2b, 0x31, 0x21, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x0c, 0xf8, 0x18, 0x68, 0x58,
++ 0x98, 0x68, 0x28, 0x58, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x3f, 0x5b, 0x15, 0x1b, 0x15,
++ 0x1b, 0x3f, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0xf8, 0xb4, 0x70, 0xb0, 0x50,
++ 0xb0, 0xf8, 0xf0, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x2b, 0x08, 0x1f,
++ 0x28, 0x4f, 0x12, 0x11, 0x21, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x40, 0x40, 0xf8, 0x40, 0xfc,
++ 0x10, 0xfc, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x7c, 0x10, 0x17, 0x11, 0x21, 0x39, 0x6e,
++ 0x29, 0x28, 0x39, 0x2a, 0x27, 0x00, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xfc, 0x10, 0x10, 0x54, 0x64,
++ 0x98, 0x88, 0x10, 0xa8, 0xfc, 0x44, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x00, 0x7f, 0x01, 0x09,
++ 0x09, 0x11, 0x11, 0x21, 0x41, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x20,
++ 0x10, 0x08, 0x08, 0x04, 0x04, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x02, 0x3f, 0x24, 0x24, 0x24,
++ 0x24, 0x24, 0x24, 0x24, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xf0, 0x90, 0x90, 0x90,
++ 0x90, 0x90, 0x90, 0x90, 0x90, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x08, 0x0f, 0x08, 0x08, 0x0f,
++ 0x08, 0x08, 0x0f, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0xe0, 0x20, 0x20, 0xe0,
++ 0x20, 0x38, 0xe0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x1f, 0x10, 0x10, 0x1f, 0x10,
++ 0x10, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x3d, 0x24, 0x27,
++ 0x3c, 0x27, 0x25, 0x3c, 0x20, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x40, 0xfc,
++ 0x10, 0xfc, 0x10, 0x90, 0x90, 0x30, 0x00, 0x00,
++ 0x02, 0x04, 0x39, 0x08, 0x08, 0x7e, 0x09, 0x08,
++ 0x3e, 0x23, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x48, 0x50, 0xfc, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x21, 0x21, 0x02, 0x0c,
++ 0x08, 0x08, 0x10, 0x10, 0x23, 0x2c, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0x08, 0x90, 0x50,
++ 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x1f, 0x12, 0x12, 0x1f,
++ 0x14, 0x17, 0x24, 0x24, 0x47, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xc8, 0x70, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x3f, 0x04,
++ 0x04, 0x04, 0x04, 0x07, 0x78, 0x00, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0x40, 0xc0, 0x20,
++ 0x20, 0x20, 0x14, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x01, 0x39, 0x07, 0x7a, 0x02, 0x3f, 0x00, 0x3b,
++ 0x02, 0x3b, 0x2a, 0x2b, 0x3a, 0x20, 0x00, 0x00,
++ 0x20, 0x30, 0xe8, 0xa8, 0xa0, 0xfc, 0x28, 0xa8,
++ 0xb0, 0x90, 0xb4, 0xac, 0x4c, 0x84, 0x00, 0x00,
++ 0x00, 0x00, 0x7d, 0x55, 0x55, 0x55, 0x7d, 0x55,
++ 0x55, 0x55, 0x7d, 0x42, 0x02, 0x04, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xfc, 0x54, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x1f, 0x28, 0x24, 0x45, 0x00,
++ 0x1f, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0xa0, 0x90, 0x10, 0x00,
++ 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x41, 0x01, 0x01, 0x7f,
++ 0x00, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x40, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x00,
++ 0x7f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x70, 0x70, 0x00,
++ 0xfc, 0x80, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x7c, 0x04,
++ 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3c, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x44, 0x44, 0x44, 0x44, 0x44,
++ 0x47, 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x88, 0x88, 0x90, 0xa0, 0xc0,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x09, 0x7f, 0x22, 0x12, 0x14,
++ 0x7f, 0x08, 0x3e, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf0, 0x50, 0x50, 0xd0, 0x50,
++ 0x70, 0xb0, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x09, 0x1f, 0x11, 0x21, 0x7f,
++ 0x01, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc,
++ 0x00, 0x80, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x15, 0x7b, 0x2b, 0x29, 0x29,
++ 0x7b, 0x55, 0x1a, 0x12, 0x24, 0x49, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x40, 0x40, 0x78, 0xa0, 0x20,
++ 0xfc, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x7f, 0x02, 0x04, 0x3f,
++ 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xf8, 0x80, 0x60, 0x90,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x09, 0x7f, 0x03, 0x0d, 0x71,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x30, 0xd0, 0x10, 0x20, 0xfc, 0x80, 0x60, 0x1c,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x02, 0x10,
++ 0x14, 0x12, 0x22, 0x20, 0x4f, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0xa8, 0xa0,
++ 0xa8, 0xa8, 0xb0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x40, 0x21, 0x26, 0x00, 0x13,
++ 0x1e, 0x11, 0x20, 0x21, 0x46, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0xa0, 0x58,
++ 0x4c, 0x50, 0xe0, 0x50, 0x4c, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x49, 0x29, 0x2b, 0x0a, 0x1c,
++ 0x2f, 0x48, 0x10, 0x11, 0x22, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x00, 0xf8, 0x40, 0x40,
++ 0xfc, 0xc0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x06, 0x38, 0x3f, 0x24, 0x25, 0x4f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x30, 0xc0, 0xfc, 0x90, 0x10, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x21, 0x41, 0x1f, 0x01, 0x0f,
++ 0x01, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xf0, 0x00, 0xe0,
++ 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x08, 0x08, 0x7f, 0x22, 0x14,
++ 0x7f, 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0x78, 0x48, 0x50, 0x50,
++ 0x48, 0x44, 0x44, 0x44, 0x58, 0x40, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x08, 0x0c, 0x17, 0x14,
++ 0x37, 0x55, 0x14, 0x15, 0x16, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x10, 0x40, 0xf8, 0x90, 0xe0,
++ 0x5c, 0xf8, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x32, 0x52, 0x13,
++ 0x10, 0x11, 0x15, 0x15, 0x19, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0x20, 0x28, 0x04, 0x14, 0xf0, 0x00, 0x00,
++ 0x08, 0x08, 0x2f, 0x28, 0x28, 0x2e, 0x71, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x80, 0x98, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x01, 0x3f, 0x00,
++ 0x00, 0x00, 0x13, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xf8, 0x10,
++ 0x20, 0xc0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x14, 0x12, 0x1f, 0x13,
++ 0x1c, 0x1f, 0x11, 0x23, 0x20, 0x4f, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x90, 0xa0, 0xfc, 0xe0,
++ 0x98, 0xfc, 0x20, 0xa0, 0xe0, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x01, 0x14, 0x14, 0x24, 0x03,
++ 0x08, 0x36, 0x35, 0x51, 0x55, 0x0c, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0x90, 0x88, 0x28, 0xe0,
++ 0x20, 0xd8, 0xd4, 0x44, 0x50, 0x30, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7f,
++ 0x09, 0x2d, 0x2b, 0x2b, 0x49, 0x09, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf0, 0x90, 0xf0, 0x00, 0xf8,
++ 0x08, 0xe8, 0xa8, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x19, 0x61, 0x0f, 0x01, 0x3f,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x30, 0x0c, 0xe0, 0x00, 0xf8,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x44, 0x07, 0x04, 0x07, 0x04,
++ 0x00, 0x7f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x00, 0xf0, 0x00, 0xc0, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x04, 0x08, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x11,
++ 0x1f, 0x73, 0x05, 0x19, 0x61, 0x03, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0xfc, 0x08, 0x48, 0xa8,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x16, 0x11, 0x10, 0x1f,
++ 0x70, 0x11, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x50, 0x4c, 0xf0, 0x40, 0xfc,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x08, 0x08, 0x7f, 0x14, 0x36,
++ 0x35, 0x55, 0x14, 0x24, 0x24, 0x4d, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x88, 0x48, 0x48, 0x50,
++ 0x30, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x7e, 0x08, 0x7e,
++ 0x08, 0x2d, 0x2a, 0x2a, 0x48, 0x18, 0x00, 0x00,
++ 0x10, 0x90, 0x50, 0x50, 0x10, 0x90, 0x90, 0x1c,
++ 0x70, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x7f, 0x01, 0x07, 0x1c, 0x67,
++ 0x04, 0x07, 0x04, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x10, 0xf0, 0x20, 0xfc, 0x00, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x04, 0x09, 0x0c, 0x1a,
++ 0x2a, 0x48, 0x08, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7f,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x48, 0x0b, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xb0, 0xa8, 0xa8, 0xa4, 0x24,
++ 0x28, 0x78, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x01, 0x07,
++ 0x1c, 0x67, 0x04, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0x10, 0xf0, 0x20, 0x40, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x39, 0x03, 0x7e, 0x03, 0x3a, 0x03, 0x3a,
++ 0x07, 0x38, 0x29, 0x2e, 0x38, 0x20, 0x00, 0x00,
++ 0x88, 0x08, 0xc8, 0x48, 0xfc, 0x48, 0xe8, 0x78,
++ 0xd8, 0xc8, 0x48, 0x48, 0x48, 0xd8, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x1f, 0x11, 0x1f, 0x11,
++ 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x13, 0x12, 0x03, 0x02, 0x72, 0x12,
++ 0x14, 0x15, 0x19, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x90, 0xfc, 0x90, 0xf0, 0x90,
++ 0x00, 0xa8, 0x54, 0x54, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x71, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x88, 0x40, 0x48, 0x48,
++ 0x50, 0x60, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x06, 0x06,
++ 0x0a, 0x0a, 0x12, 0x22, 0x42, 0x06, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x09, 0x09, 0x09, 0x17, 0x11, 0x31, 0x5f, 0x10,
++ 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0f, 0x10, 0x10, 0x24, 0x42,
++ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x09, 0x09,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00,
++ 0x80, 0x80, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x1a, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0x08, 0x88, 0x48,
++ 0x48, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0a, 0x2a, 0x2d, 0x29, 0x4a,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x88, 0x08, 0x88, 0x48,
++ 0x48, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x12, 0x3f, 0x24, 0x3f, 0x1e, 0x13,
++ 0x1e, 0x12, 0x1e, 0x14, 0x1e, 0x61, 0x00, 0x00,
++ 0x78, 0x90, 0x20, 0xf8, 0x48, 0xf8, 0x10, 0xfc,
++ 0x90, 0x50, 0x50, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x40, 0xc0, 0x40, 0x78, 0x88, 0x88, 0x48, 0x28,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x03, 0x0c, 0x79, 0x49, 0x2a, 0x2c, 0x7f, 0x08,
++ 0x1c, 0x1a, 0x2a, 0x49, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0xa8, 0xa0,
++ 0xa0, 0xa0, 0x90, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x13, 0x23, 0x5d, 0x08, 0x7e,
++ 0x09, 0x2a, 0x1c, 0x19, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x80, 0xfc,
++ 0x54, 0x54, 0x94, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x01, 0x01, 0x7f, 0x02,
++ 0x07, 0x1c, 0x64, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0x00, 0xfc, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x28, 0x48, 0x0e, 0x08, 0x7f,
++ 0x08, 0x2a, 0x29, 0x49, 0x08, 0x19, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xf8, 0x88, 0x48,
++ 0x50, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x7e, 0x02, 0x02, 0x3e, 0x20, 0x3e, 0x22,
++ 0x12, 0x0e, 0x1a, 0x62, 0x02, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x80, 0xf8, 0x88,
++ 0x48, 0x38, 0x68, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x7f, 0x04, 0x1f, 0x64,
++ 0x07, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xfc, 0x00, 0xf0, 0x10,
++ 0xf0, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x02, 0x01, 0x01, 0x3f, 0x01, 0x01, 0x01, 0x1f,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xf0,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x13, 0x12, 0x1e, 0x12, 0x12, 0x1e,
++ 0x12, 0x12, 0x1e, 0x62, 0x03, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0x48, 0x50,
++ 0x50, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x40, 0x00, 0x7f, 0x00,
++ 0x08, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x01, 0x01, 0x3f, 0x01, 0x01,
++ 0x7f, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x20, 0xc0, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
++ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x0f, 0x11, 0x21, 0x7f, 0x03,
++ 0x05, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x80,
++ 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x11, 0x1e, 0x24, 0x27, 0x54,
++ 0x08, 0x09, 0x0a, 0x14, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0xe0,
++ 0xe0, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x48, 0x33, 0x12, 0x34, 0x48, 0x0f, 0x18,
++ 0x29, 0x48, 0x08, 0x08, 0x30, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x10, 0x10, 0xfc, 0x10,
++ 0x10, 0x90, 0x90, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x01, 0x7d, 0x11, 0x12, 0x14, 0x7f, 0x10,
++ 0x10, 0x11, 0x1e, 0x64, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0xe0,
++ 0xe0, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x19, 0x70, 0x17, 0x10, 0x7f, 0x12, 0x1b,
++ 0x36, 0x37, 0x50, 0x13, 0x10, 0x17, 0x00, 0x00,
++ 0x08, 0xf0, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00,
++ 0x00, 0x3b, 0x28, 0x2f, 0x38, 0x2b, 0x2a, 0x3b,
++ 0x2a, 0x2b, 0x28, 0x2b, 0x28, 0x4f, 0x00, 0x00,
++ 0x08, 0xf0, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00,
++ 0x08, 0x0b, 0x3d, 0x09, 0x09, 0x7f, 0x09, 0x29,
++ 0x2f, 0x29, 0x3b, 0x28, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x78, 0xc8, 0x68, 0x58, 0xd0,
++ 0x58, 0x68, 0xe4, 0x44, 0x40, 0xfc, 0x00, 0x00,
++ 0x10, 0x0f, 0x09, 0x41, 0x27, 0x25, 0x05, 0x15,
++ 0x16, 0x14, 0x27, 0x24, 0x47, 0x44, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x58,
++ 0x38, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x04, 0x7f, 0x01, 0x02, 0x1f, 0x10, 0x1f,
++ 0x10, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x20, 0x40, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x17, 0x17, 0x3b, 0x50, 0x17,
++ 0x10, 0x13, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xfc, 0x58, 0x58, 0x00, 0xfc,
++ 0x40, 0xf8, 0xa8, 0xa8, 0xa8, 0xb8, 0x00, 0x00,
++ 0x00, 0x01, 0x3e, 0x12, 0x09, 0x3f, 0x20, 0x5f,
++ 0x04, 0x02, 0x01, 0x01, 0x06, 0x38, 0x00, 0x00,
++ 0x30, 0xd0, 0x10, 0x20, 0x40, 0xfc, 0x08, 0xe0,
++ 0x20, 0x40, 0x80, 0x80, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4a, 0x4a, 0x4b, 0x4a, 0x48,
++ 0x48, 0x79, 0x49, 0x42, 0x04, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0xa8, 0xa0,
++ 0xa0, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x1f, 0x02, 0x7f, 0x04,
++ 0x7f, 0x08, 0x14, 0x22, 0x42, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x20,
++ 0xfc, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7d, 0x11, 0x13, 0x12, 0x15,
++ 0x1c, 0x70, 0x10, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0x18, 0xe8, 0x48, 0x50, 0x20, 0xfc, 0x08, 0xf0,
++ 0x90, 0xa0, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x79, 0x17, 0x10, 0x3b, 0x36,
++ 0x37, 0x54, 0x52, 0x13, 0x1e, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0xc8, 0x3c, 0xc8, 0x28, 0xd8, 0x58,
++ 0xc8, 0x48, 0x88, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x0b, 0x72, 0x14, 0x0d, 0x13, 0x7f,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0e, 0x00, 0x00,
++ 0x08, 0xf4, 0x44, 0xa8, 0x90, 0xfc, 0x08, 0xf0,
++ 0x90, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x7f,
++ 0x02, 0x3f, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x70, 0x70, 0xfc,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22,
++ 0x22, 0x24, 0x28, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x88,
++ 0x88, 0x48, 0x28, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x05, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
++ 0x26, 0x3c, 0x64, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x50, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x17, 0x11, 0x1f, 0x10,
++ 0x17, 0x14, 0x14, 0x27, 0x24, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xc8, 0x08, 0xe8, 0x08,
++ 0xc8, 0x48, 0x48, 0xc8, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x4f, 0x00, 0x00, 0x7f,
++ 0x01, 0x09, 0x09, 0x11, 0x21, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xe0, 0x00, 0x00, 0xfc,
++ 0x00, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x00, 0x3f, 0x22, 0x22, 0x3e,
++ 0x08, 0x2c, 0x2a, 0x2b, 0x4a, 0x18, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x48, 0xfc, 0x40, 0x60, 0x60,
++ 0x60, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x2c, 0x2a, 0x2a, 0x48,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x08, 0x88, 0x88, 0x88, 0xc8, 0xa8, 0xa8, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x0c, 0x15, 0x16, 0x34, 0x57, 0x14,
++ 0x15, 0x14, 0x15, 0x14, 0x10, 0x13, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0xa0, 0xe0, 0x3c, 0x40,
++ 0x90, 0x60, 0x88, 0x10, 0x60, 0x80, 0x00, 0x00,
++ 0x02, 0x3c, 0x08, 0x7e, 0x1d, 0x2a, 0x4a, 0x09,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x20, 0x24, 0xa4, 0xa8, 0x50, 0x50, 0x88, 0x04,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x11, 0x13, 0x14, 0x1c,
++ 0x71, 0x11, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x12, 0x0a, 0x0a, 0x42, 0x27, 0x26, 0x0a, 0x02,
++ 0x12, 0x12, 0x24, 0x24, 0x48, 0x50, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x68, 0xd8, 0xd8, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x6f,
++ 0x02, 0x02, 0x04, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0x80, 0x40, 0x30, 0xcc,
++ 0x40, 0x78, 0x48, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x02, 0x0c, 0x38, 0x08, 0x08, 0x7e, 0x08, 0x1d,
++ 0x1a, 0x2a, 0x48, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x24, 0xa4, 0xa8, 0xb0, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x15, 0x0c, 0x12, 0x7f,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0xc8, 0x30, 0x20, 0xd0, 0x08,
++ 0x64, 0x10, 0x00, 0xc0, 0x30, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x14, 0x67, 0x28, 0x1b, 0x26, 0x7f,
++ 0x12, 0x3b, 0x36, 0x37, 0x52, 0x14, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0x48, 0x58,
++ 0xe8, 0xf8, 0xe8, 0x58, 0x58, 0x48, 0x00, 0x00,
++ 0x00, 0x7f, 0x22, 0x16, 0x1a, 0x63, 0x06, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x58, 0x68, 0x88, 0x18, 0xe0,
++ 0x20, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x01, 0x7f, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20,
++ 0xe0, 0x00, 0xfc, 0x80, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x0a, 0x09, 0x09, 0x08, 0x7f,
++ 0x09, 0x09, 0x11, 0x11, 0x21, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0x20, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x02, 0x1f, 0x11, 0x1f, 0x11,
++ 0x1f, 0x05, 0x05, 0x09, 0x11, 0x60, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x20, 0x50, 0xfc, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x02, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x09,
++ 0x17, 0x61, 0x09, 0x11, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x90, 0x90, 0xfc, 0x40, 0x88,
++ 0x90, 0x60, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x04, 0x3f, 0x12, 0x7f, 0x1e, 0x1e, 0x1e, 0x12,
++ 0x17, 0x7f, 0x06, 0x7c, 0x07, 0x38, 0x00, 0x00,
++ 0x40, 0x7c, 0x78, 0x88, 0x78, 0x70, 0x70, 0x74,
++ 0x3c, 0xfc, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x12, 0x1f, 0x34, 0x5f, 0x1e, 0x1f, 0x07, 0x7f,
++ 0x07, 0x07, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x48, 0x7c, 0xd0, 0x78, 0x78, 0xfc, 0xc0, 0xfc,
++ 0xc0, 0xc0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x3d, 0x27, 0x24, 0x3f, 0x0a, 0x2a, 0x2f,
++ 0x29, 0x2b, 0x2b, 0x3d, 0x61, 0x03, 0x00, 0x00,
++ 0x10, 0x18, 0xd4, 0x14, 0x90, 0xfc, 0x90, 0x90,
++ 0x30, 0xb0, 0x70, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x00, 0xfc, 0x88, 0xf8,
++ 0x88, 0xf8, 0x8c, 0xf8, 0x88, 0x08, 0x00, 0x00,
++ 0x00, 0x23, 0x12, 0x13, 0x02, 0x03, 0x72, 0x13,
++ 0x15, 0x15, 0x19, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0xe8,
++ 0x28, 0xe8, 0x28, 0x18, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x7f, 0x02, 0x1f, 0x12, 0x14,
++ 0x18, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xfc, 0x80, 0xf0, 0x90, 0xb0,
++ 0x70, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7e, 0x18, 0x18, 0x7e, 0x5b, 0x5b, 0x5e,
++ 0x6e, 0x46, 0x7e, 0x43, 0x7f, 0x42, 0x00, 0x00,
++ 0x08, 0x88, 0xa8, 0xa8, 0xa8, 0xf8, 0xf8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x28, 0x28, 0x08, 0x00, 0x00,
++ 0x08, 0x0f, 0x18, 0x1f, 0x28, 0x4f, 0x08, 0x0f,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x80, 0xf8, 0x80, 0xf0, 0x80, 0xf0, 0x80, 0xf8,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x60,
++ 0x68, 0x68, 0xb4, 0xbc, 0x24, 0x1c, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x08, 0x08, 0x1f, 0x28, 0x48,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x10, 0x30, 0x50, 0x13,
++ 0x10, 0x10, 0x10, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x80, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x02, 0x04, 0x3f, 0x02,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x20, 0x70, 0x88, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x7f, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x12, 0x11, 0x21, 0x4f, 0x08, 0x10, 0x12, 0x32,
++ 0x52, 0x12, 0x13, 0x14, 0x14, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x40, 0x40, 0x40, 0x78,
++ 0x40, 0x40, 0x40, 0xc0, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7f, 0x00, 0x08, 0x08, 0x0b,
++ 0x7c, 0x08, 0x08, 0x10, 0x11, 0x20, 0x00, 0x00,
++ 0x90, 0x88, 0x88, 0xfc, 0x80, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x60, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x04, 0x03, 0x7f, 0x03, 0x0d, 0x33,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xc0, 0x80, 0x00, 0xf8, 0x30, 0x40, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x20, 0x27, 0x00, 0x08,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x08, 0x0a, 0x42, 0x22, 0x22, 0x0f, 0x10,
++ 0x16, 0x11, 0x20, 0x20, 0x43, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x78, 0x40, 0x40, 0xfc, 0x00,
++ 0x08, 0x30, 0x00, 0xa0, 0x18, 0x04, 0x00, 0x00,
++ 0x11, 0x49, 0x22, 0x3e, 0x2a, 0x3f, 0x2a, 0x3e,
++ 0x7f, 0x00, 0x3e, 0x22, 0x3f, 0x22, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0x24, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x15, 0x65, 0x2a, 0x18, 0x24, 0x7d,
++ 0x13, 0x39, 0x35, 0x35, 0x51, 0x11, 0x00, 0x00,
++ 0x88, 0xc8, 0x28, 0x30, 0xfc, 0x90, 0x90, 0x50,
++ 0x5c, 0x50, 0x50, 0xb0, 0x90, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x1f,
++ 0x11, 0x1f, 0x01, 0x3f, 0x01, 0x7f, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x00, 0xf8, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0x48, 0x9c, 0xf4, 0x50,
++ 0x50, 0x50, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x0f, 0x08, 0x08, 0x7f, 0x08,
++ 0x0a, 0x29, 0x29, 0x28, 0x49, 0x1a, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x50, 0x50, 0x50,
++ 0x20, 0x20, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x11, 0x11, 0x12, 0x12,
++ 0x15, 0x18, 0x10, 0x21, 0x22, 0x44, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xd0, 0x50, 0x50,
++ 0x50, 0x90, 0x94, 0x0c, 0x0c, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x48, 0x0f, 0x10, 0x13,
++ 0x32, 0x53, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xf8, 0x80, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x12, 0x0a, 0x0b, 0x42, 0x22, 0x2f, 0x02, 0x13,
++ 0x16, 0x16, 0x2a, 0x2a, 0x42, 0x47, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x48, 0x48, 0xc8, 0x28, 0x30,
++ 0xb0, 0x90, 0x30, 0x48, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x09, 0x11, 0x18,
++ 0x34, 0x54, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0xa8, 0xa0,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x15, 0x65, 0x2a, 0x18, 0x24, 0x7d,
++ 0x13, 0x39, 0x35, 0x35, 0x51, 0x11, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x80, 0xf8, 0xa0, 0x78,
++ 0x48, 0x78, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x7f, 0x01, 0x1f, 0x29, 0x25,
++ 0x3f, 0x23, 0x25, 0x39, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xfc, 0x10, 0xf0, 0x28, 0x48,
++ 0xf8, 0x88, 0x48, 0x38, 0x08, 0x08, 0x00, 0x00,
++ 0x04, 0x7f, 0x1f, 0x12, 0x1f, 0x3e, 0x0c, 0x74,
++ 0x0d, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0xd0, 0x70, 0x54, 0x8c,
++ 0x04, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x01, 0x1e, 0x12, 0x1f, 0x3e, 0x06,
++ 0x7c, 0x05, 0x0e, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0x50, 0xd0, 0x50, 0x74,
++ 0x8c, 0x0c, 0x04, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x11, 0x11, 0x1f, 0x11, 0x21,
++ 0x21, 0x21, 0x21, 0x3f, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x08,
++ 0x08, 0x08, 0x08, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x11, 0x11, 0x21, 0x49, 0x0f, 0x11, 0x11, 0x35,
++ 0x55, 0x15, 0x15, 0x19, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xbc, 0x40, 0x40, 0xc0, 0x3c, 0x88, 0x88,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x1f, 0x00, 0x02, 0x72, 0x12,
++ 0x14, 0x14, 0x18, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0x90, 0x88, 0xfc, 0x80, 0xa0, 0x90, 0x90,
++ 0x88, 0x88, 0x88, 0x80, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x17, 0x11, 0x31, 0x52, 0x14,
++ 0x11, 0x13, 0x14, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x80, 0x90, 0x18, 0xe4, 0x20, 0x24, 0x9c, 0xf0,
++ 0x10, 0x20, 0xc0, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x57, 0x54, 0x54, 0x55, 0x56,
++ 0x54, 0x7d, 0x46, 0x40, 0x03, 0x0c, 0x00, 0x00,
++ 0x40, 0x50, 0x98, 0xe4, 0xa0, 0xa4, 0x9c, 0xf0,
++ 0x90, 0xa0, 0x40, 0xa0, 0x18, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x1f, 0x02, 0x7f, 0x04,
++ 0x1f, 0x68, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x80, 0xfc, 0x40,
++ 0xf0, 0x2c, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x7b, 0x4a, 0x49, 0x79, 0x4f, 0x4d, 0x79,
++ 0x4a, 0x4e, 0x79, 0x49, 0x42, 0x04, 0x00, 0x00,
++ 0x18, 0xe8, 0x48, 0x50, 0x20, 0xfc, 0x18, 0xf8,
++ 0xd0, 0xd0, 0xfc, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x13, 0x7e, 0x04, 0x45, 0x26,
++ 0x28, 0x29, 0x0e, 0x70, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0x50, 0x88, 0xfc, 0xa4, 0xa4, 0x9c, 0xf0,
++ 0x90, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x00, 0x01, 0x3e, 0x11, 0x09, 0x3f, 0x28, 0x4e,
++ 0x12, 0x32, 0x0d, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x30, 0xd0, 0x10, 0x20, 0x40, 0xfc, 0x18, 0xf8,
++ 0x90, 0x90, 0xfc, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3f, 0x28, 0x3e, 0x28, 0x3f,
++ 0x0a, 0x3e, 0x3f, 0x32, 0x44, 0x1b, 0x00, 0x00,
++ 0x20, 0x30, 0x48, 0xf4, 0x50, 0x54, 0xcc, 0x78,
++ 0x48, 0xd0, 0x30, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x22, 0x13, 0x16, 0x06, 0x0b, 0x12,
++ 0x12, 0x23, 0x22, 0x42, 0x43, 0x02, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x23, 0x4a, 0x0b, 0x12, 0x12, 0x32,
++ 0x52, 0x12, 0x12, 0x14, 0x14, 0x18, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0xfc, 0x20, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x1f, 0x28, 0x48, 0x0f,
++ 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x13, 0x1a, 0x36, 0x36,
++ 0x32, 0x52, 0x54, 0x14, 0x18, 0x10, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0xfc, 0x20, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x11, 0x1f, 0x25, 0x25, 0x55,
++ 0x09, 0x09, 0x09, 0x11, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x08, 0xe8, 0x28, 0x28, 0xe8,
++ 0x28, 0x28, 0xe8, 0x28, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x41, 0x21, 0x21, 0x00, 0x13,
++ 0x10, 0x10, 0x27, 0x20, 0x40, 0x40, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x10, 0x60, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x11, 0x09, 0x4b, 0x22, 0x27, 0x0a, 0x0b, 0x12,
++ 0x23, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0x20, 0xf8, 0x40, 0xf0, 0x40, 0xf0, 0x40,
++ 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x20, 0x1f, 0x19, 0x4f, 0x29, 0x2f, 0x08, 0x0b,
++ 0x18, 0x1b, 0x28, 0x2b, 0x48, 0x48, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x78, 0x48, 0x78, 0x08, 0xe8,
++ 0x88, 0xe8, 0x88, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x17, 0x14,
++ 0x17, 0x14, 0x27, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0x80, 0xfc, 0x80, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0d, 0x13, 0x7f,
++ 0x09, 0x2d, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x4c, 0x70, 0xc0, 0x48, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x02, 0x42, 0x22, 0x24, 0x04, 0x09, 0x04, 0x74,
++ 0x12, 0x12, 0x12, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x48, 0x48, 0x48, 0x90, 0x90, 0x20, 0x90, 0x90,
++ 0x48, 0x48, 0x48, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x20, 0x17, 0x10, 0x03, 0x02, 0x73, 0x13,
++ 0x13, 0x10, 0x1f, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0xc0, 0xf8, 0xd8, 0x38, 0xf8,
++ 0xf8, 0x10, 0xfc, 0x90, 0x30, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0xfc, 0x00, 0x78, 0x48, 0x78, 0x00, 0x78,
++ 0x08, 0x10, 0xfc, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x23, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x22, 0x22, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0e, 0x12, 0x12, 0x32, 0x4a,
++ 0x0c, 0x04, 0x0d, 0x12, 0x21, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
++ 0x90, 0x94, 0x14, 0x0c, 0x80, 0x7c, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x04, 0x05, 0x09, 0x1e,
++ 0x2a, 0x49, 0x08, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1e, 0x12, 0x12, 0x12, 0x1e,
++ 0x12, 0x10, 0x11, 0x11, 0x22, 0x40, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x1f, 0x01, 0x1f, 0x01,
++ 0x7f, 0x07, 0x1f, 0x64, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0xf0, 0x10, 0xe0, 0x40,
++ 0xfc, 0xe0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4b, 0x48, 0x4b, 0x78, 0x4f,
++ 0x48, 0x4b, 0x7c, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x44, 0xf8, 0x50, 0xfc,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x40, 0x20, 0x27, 0x00, 0x10,
++ 0x13, 0x1d, 0x21, 0x21, 0x41, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x50, 0xfc, 0x40, 0x80,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x11,
++ 0x11, 0x11, 0x20, 0x2a, 0x49, 0x11, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0xe0, 0x20, 0x00, 0x48, 0x24, 0x24, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x72, 0x0c, 0x0f, 0x12, 0x7e,
++ 0x09, 0x2e, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x48, 0xf8, 0x50, 0x50, 0xfc, 0x40, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x01, 0x1f, 0x01, 0x7f,
++ 0x07, 0x1c, 0x67, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x10, 0xe0, 0x40, 0xfc,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x7f, 0x1f, 0x01, 0x1f, 0x01,
++ 0x7f, 0x0f, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xfc, 0xf0, 0x00, 0xf0, 0x00,
++ 0xfc, 0xe0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x1f, 0x12, 0x1f, 0x0f, 0x01, 0x7f,
++ 0x07, 0x1c, 0x67, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x40, 0xfc, 0xf0, 0x90, 0xf0, 0xf0, 0x40, 0xfc,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3c, 0x01, 0x7e, 0x03, 0x3c,
++ 0x3c, 0x01, 0x3e, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x48, 0xf8, 0x50, 0xfc, 0x40,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7c, 0x00, 0x3f, 0x00, 0x3c,
++ 0x01, 0x3e, 0x24, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x50, 0xfc, 0x40, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x3c, 0x24, 0x24, 0x3c,
++ 0x24, 0x24, 0x26, 0x38, 0x61, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x7e, 0x08, 0x7f,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x49, 0x1a, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x50, 0x50, 0x50,
++ 0x20, 0x20, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x02, 0x7f, 0x04, 0x04, 0x04,
++ 0x0f, 0x08, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x40, 0x40, 0x40,
++ 0x80, 0x80, 0x40, 0x20, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x17, 0x11, 0x10, 0x1f,
++ 0x10, 0x10, 0x20, 0x20, 0x40, 0x01, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf0, 0x20, 0xc0, 0xfc,
++ 0x88, 0x90, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x49, 0x0a, 0x15, 0x10, 0x37,
++ 0x50, 0x11, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0x08, 0xf4, 0x40, 0xfc,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x12, 0x12, 0x3c, 0x06, 0x18,
++ 0x61, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x13, 0x1a, 0x26, 0x27, 0x7a, 0x12, 0x7f,
++ 0x12, 0x56, 0x3b, 0x36, 0x1c, 0x61, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xe8, 0xc8, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x28, 0x31, 0x2b, 0x24, 0x27,
++ 0x24, 0x25, 0x39, 0x22, 0x24, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x90, 0x08, 0xf4, 0x40, 0xfc,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x09, 0x09, 0x0b, 0x15, 0x19, 0x31, 0x51, 0x1f,
++ 0x12, 0x13, 0x14, 0x19, 0x12, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xf8, 0xa8, 0x28, 0x48, 0xb0, 0x00, 0x00,
++ 0x0a, 0x09, 0x0f, 0x15, 0x19, 0x31, 0x53, 0x12,
++ 0x13, 0x13, 0x12, 0x13, 0x13, 0x1c, 0x00, 0x00,
++ 0x88, 0x50, 0xfc, 0xe8, 0x20, 0xe0, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x10, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x25, 0x27, 0x24, 0x3f, 0x24, 0x25,
++ 0x3e, 0x27, 0x24, 0x24, 0x25, 0x4e, 0x00, 0x00,
++ 0x40, 0x48, 0x50, 0xf8, 0x40, 0xfc, 0xa0, 0x50,
++ 0x48, 0xf4, 0x90, 0x90, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x27, 0x24, 0x27, 0x24,
++ 0x24, 0x28, 0x28, 0x30, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0xc0, 0x00, 0x00, 0xf8, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x06, 0x3c, 0x04, 0x04, 0x04, 0x7f, 0x04,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00,
++ 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x70, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x4a, 0x4c, 0x4b, 0x4a, 0x4b,
++ 0x4a, 0x7b, 0x4a, 0x42, 0x02, 0x02, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x08, 0x04, 0x3f, 0x24, 0x24,
++ 0x2f, 0x34, 0x24, 0x27, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0x98,
++ 0xf8, 0x48, 0x48, 0xc8, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x49, 0x49, 0x49, 0x48,
++ 0x7b, 0x4a, 0x43, 0x02, 0x03, 0x02, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x12, 0x09, 0x3f, 0x27, 0x44, 0x17, 0x1f, 0x10,
++ 0x0f, 0x0f, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0xc8, 0x40, 0xf0, 0xc0, 0x08,
++ 0xf8, 0xe0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x4b, 0x2a, 0x29, 0x08, 0x1f, 0x69, 0x08,
++ 0x09, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x1c, 0xe4, 0x48, 0x30, 0x10, 0xfc, 0x10, 0x90,
++ 0x30, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x08, 0x04, 0x7f, 0x01, 0x02,
++ 0x7f, 0x04, 0x0f, 0x10, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x20, 0x40, 0xfc, 0x00, 0x00,
++ 0xfc, 0x40, 0x40, 0xc0, 0x30, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x24,
++ 0x7b, 0x4a, 0x0f, 0x16, 0x23, 0x42, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x29, 0x45, 0x05, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x28, 0x20, 0x40, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x4a, 0x29, 0x29, 0x08, 0x0f,
++ 0x19, 0x68, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x18, 0x60, 0x88, 0x48, 0x50, 0x20, 0x10, 0xfc,
++ 0x10, 0x90, 0x90, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x09, 0x09, 0x11, 0x11,
++ 0x21, 0x41, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x08,
++ 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x09, 0x09, 0x11, 0x11, 0x21, 0x41,
++ 0x03, 0x00, 0x00, 0x01, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x10, 0x08, 0x14, 0x14, 0x20,
++ 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x11, 0x09, 0x09, 0x3f, 0x20, 0x27, 0x24,
++ 0x24, 0x27, 0x24, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x20, 0xf8, 0x08, 0xc8, 0x48,
++ 0x48, 0xc8, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x1f,
++ 0x10, 0x10, 0x10, 0x20, 0x3f, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x80, 0x80, 0x80, 0xf8,
++ 0x80, 0x80, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x11,
++ 0x11, 0x12, 0x12, 0x24, 0x28, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x80, 0x80, 0xfc, 0xc0,
++ 0xa0, 0xa0, 0x90, 0x88, 0x84, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x1a, 0x17, 0x1f, 0x18,
++ 0x1f, 0x1d, 0x2f, 0x2c, 0x48, 0x09, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0xa0, 0x20, 0xbc, 0xc8,
++ 0xa8, 0xb0, 0x90, 0xb0, 0xc8, 0x84, 0x00, 0x00,
++ 0x04, 0x3f, 0x0a, 0x7f, 0x00, 0x1f, 0x11, 0x1f,
++ 0x11, 0x1f, 0x04, 0x7f, 0x04, 0x04, 0x00, 0x00,
++ 0x10, 0x90, 0x20, 0xa8, 0x48, 0x10, 0x10, 0x24,
++ 0x44, 0x08, 0x08, 0x90, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x0f, 0x00, 0x00, 0x79, 0x0f, 0x09, 0x0f,
++ 0x11, 0x1f, 0x21, 0x41, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x84, 0x24, 0xe8, 0x30, 0xe0,
++ 0x10, 0xf0, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x12, 0x12, 0x1c,
++ 0x70, 0x10, 0x10, 0x10, 0x13, 0x3c, 0x00, 0x00,
++ 0x40, 0x40, 0x60, 0x50, 0x48, 0x48, 0x54, 0x54,
++ 0xe0, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x11, 0x11, 0x16,
++ 0x19, 0x71, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x08, 0x30, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x12, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x1f,
++ 0x01, 0x1f, 0x01, 0x7f, 0x01, 0x03, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0xf0, 0xc0,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x10, 0x17, 0x10, 0x1b,
++ 0x70, 0x11, 0x11, 0x13, 0x14, 0x38, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0x40, 0x78, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x03, 0x3c,
++ 0x04, 0x7f, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x40, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00,
++ 0x3f, 0x20, 0x3f, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x48, 0x48, 0x49, 0x79, 0x4a,
++ 0x49, 0x49, 0x79, 0x49, 0x41, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x08, 0x30, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x00,
++ 0x7c, 0x44, 0x7c, 0x44, 0x7c, 0x44, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x08, 0x1d, 0x1b, 0x1a,
++ 0x28, 0x28, 0x48, 0x09, 0x0f, 0x08, 0x00, 0x00,
++ 0x70, 0x10, 0x90, 0x90, 0x90, 0x08, 0x48, 0x44,
++ 0x40, 0xa0, 0x90, 0x18, 0xe4, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x18, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x24, 0xa4, 0xa8, 0x20, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x48, 0x0b, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0xfc, 0x50, 0xfc, 0x00, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7f, 0x13, 0x15, 0x39, 0x35,
++ 0x35, 0x51, 0x50, 0x12, 0x12, 0x14, 0x00, 0x00,
++ 0x90, 0x90, 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xf8,
++ 0x20, 0xfc, 0x00, 0xa8, 0x54, 0x54, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x40, 0x21, 0x21, 0x02, 0x04,
++ 0x13, 0x12, 0x22, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0c, 0x0a, 0x41, 0x21, 0x23, 0x02, 0x13,
++ 0x12, 0x13, 0x22, 0x22, 0x42, 0x42, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0x50, 0x60, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x08, 0x0a, 0x42, 0x22, 0x2f, 0x00, 0x12,
++ 0x12, 0x14, 0x28, 0x20, 0x41, 0x4e, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x40, 0x40, 0xfc, 0x50, 0x48,
++ 0x54, 0xd4, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x22, 0x12, 0x12, 0x4f, 0x22, 0x22, 0x07, 0x16,
++ 0x16, 0x1a, 0x2a, 0x22, 0x42, 0x42, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0xc8, 0x48, 0x78, 0x48, 0xc8,
++ 0xf8, 0x48, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x0a, 0x2c, 0x2b, 0x28, 0x48,
++ 0x0f, 0x08, 0x14, 0x13, 0x22, 0x44, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xd0, 0xf8, 0x90, 0x90,
++ 0xfc, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x04, 0x04, 0x08, 0x0f, 0x18, 0x2f, 0x48, 0x0f,
++ 0x08, 0x0f, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf8, 0x80, 0xf0, 0x80, 0xf0,
++ 0x80, 0xfc, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x25, 0x3f, 0x25, 0x25,
++ 0x3d, 0x25, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x30, 0xf8, 0x08, 0x08,
++ 0xf8, 0x08, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x2f, 0x08, 0x18,
++ 0x2a, 0x4a, 0x12, 0x12, 0x2f, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x00, 0xf8, 0x40, 0x40,
++ 0x78, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x09, 0x11, 0x63, 0x00, 0x07, 0x7f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x20, 0x18, 0x24, 0xc0, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x11, 0x10, 0x11, 0x3d, 0x25,
++ 0x65, 0x25, 0x25, 0x3d, 0x25, 0x01, 0x00, 0x00,
++ 0x40, 0x44, 0x44, 0x48, 0x50, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x11, 0x11, 0x3f, 0x25, 0x65,
++ 0x25, 0x25, 0x3c, 0x22, 0x22, 0x04, 0x00, 0x00,
++ 0x90, 0x90, 0xa0, 0xfc, 0x20, 0xf8, 0x20, 0xf8,
++ 0x20, 0xfc, 0x00, 0xa8, 0x54, 0x04, 0x00, 0x00,
++ 0x11, 0x10, 0x10, 0x7f, 0x08, 0x08, 0x13, 0x18,
++ 0x34, 0x57, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xfc, 0x40, 0x40, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x02, 0x0c, 0x38, 0x09, 0x09, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2b, 0x49, 0x0a, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x20, 0x20, 0xb0, 0xa8,
++ 0xa8, 0x24, 0x24, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x01, 0x1f, 0x04, 0x7f, 0x00, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x01, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x40, 0xfc, 0x00, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x25, 0x42, 0x01, 0x1f,
++ 0x01, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x10, 0xe0, 0x00,
++ 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x4a, 0x2b, 0x2d, 0x09, 0x7f, 0x09, 0x1d,
++ 0x1b, 0x2b, 0x49, 0x0a, 0x0b, 0x0c, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x00, 0x20, 0x20, 0x20, 0xf8,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7f,
++ 0x09, 0x2d, 0x2b, 0x2b, 0x49, 0x09, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x88, 0xb0, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x21, 0x11, 0x11, 0x01, 0x1f, 0x10, 0x1f,
++ 0x10, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0x10, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x3f, 0x20, 0x3f, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x08, 0x0f, 0x4a, 0x29, 0x28,
++ 0x0b, 0x19, 0x68, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x3c, 0xc8, 0x48, 0x30, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x08, 0x0f, 0x18, 0x1f, 0x28,
++ 0x4f, 0x08, 0x0f, 0x14, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x80, 0xf8, 0x80, 0xf0, 0x80,
++ 0xf0, 0x80, 0xf8, 0x90, 0x48, 0x44, 0x00, 0x00,
++ 0x10, 0x17, 0x21, 0x4f, 0x0f, 0x15, 0x17, 0x35,
++ 0x57, 0x11, 0x17, 0x11, 0x1e, 0x10, 0x00, 0x00,
++ 0xc0, 0x3c, 0x00, 0xc0, 0xfc, 0x48, 0xc8, 0x48,
++ 0xc8, 0x08, 0xc8, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x11, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x01,
++ 0x7f, 0x02, 0x0c, 0x74, 0x07, 0x18, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x00,
++ 0xfc, 0x90, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3d, 0x01, 0x3e,
++ 0x00, 0x3c, 0x24, 0x24, 0x3f, 0x20, 0x00, 0x00,
++ 0x60, 0x20, 0xa0, 0x90, 0x90, 0x48, 0x48, 0x44,
++ 0x40, 0x60, 0x90, 0x90, 0xe8, 0x08, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0xa0, 0xa0, 0xb8, 0xa0,
++ 0xa0, 0xa0, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x00, 0x3c, 0x01, 0x3e,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x3c, 0x00, 0x7f, 0x00, 0x3c, 0x03, 0x3c,
++ 0x00, 0x3f, 0x24, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xfc, 0x40, 0x40, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x02, 0x07, 0x18, 0x7f, 0x11, 0x1f, 0x13, 0x0d,
++ 0x72, 0x0d, 0x32, 0x0c, 0x30, 0x03, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0xf0, 0x10, 0xf0, 0x18, 0x90,
++ 0xa0, 0xc0, 0xa0, 0x98, 0x84, 0x00, 0x00, 0x00,
++ 0x11, 0x09, 0x3f, 0x27, 0x44, 0x07, 0x0f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0xc8, 0x40, 0xc0, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x4f, 0x29, 0x1f, 0x69, 0x08, 0x7f, 0x02,
++ 0x1f, 0x14, 0x18, 0x1f, 0x1f, 0x10, 0x00, 0x00,
++ 0x3c, 0xc8, 0x50, 0xfc, 0x10, 0xb0, 0xfc, 0x80,
++ 0xf0, 0xb0, 0xf0, 0xf0, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0xa0, 0xa0, 0xb8, 0xa0,
++ 0xa0, 0xa0, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x18, 0xe0, 0xfc, 0x20, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x13, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1d, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x20, 0xf8, 0x90, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x2b, 0x28, 0x31, 0x29, 0x25,
++ 0x25, 0x25, 0x38, 0x27, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0xf8, 0x90, 0xfc, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x14, 0x15, 0x7f, 0x14, 0x1c, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x24, 0xa4, 0xa8, 0x20, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02,
++ 0x02, 0x02, 0x02, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x11, 0x09,
++ 0x05, 0x03, 0x03, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x0f, 0x00, 0x00, 0x3d, 0x05, 0x09, 0x09,
++ 0x11, 0x21, 0x43, 0x00, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x88, 0x48, 0x50, 0x20, 0x20,
++ 0x10, 0x08, 0x04, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x09, 0x7f, 0x09, 0x3f,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x60, 0x80, 0x00, 0xf8, 0x20, 0xfc, 0x20, 0xf8,
++ 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x40, 0x07, 0x04, 0x04, 0x04,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0x00, 0x80, 0x80, 0x80, 0x80,
++ 0x80, 0x80, 0x80, 0x88, 0x88, 0x78, 0x00, 0x00,
++ 0x01, 0x1e, 0x04, 0x3f, 0x15, 0x7f, 0x15, 0x15,
++ 0x3f, 0x0e, 0x15, 0x25, 0x44, 0x04, 0x00, 0x00,
++ 0x08, 0x28, 0x28, 0xa8, 0x28, 0xe8, 0x28, 0x28,
++ 0xa8, 0x28, 0x28, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x13, 0x7e, 0x12, 0x13, 0x12,
++ 0x16, 0x1a, 0x64, 0x06, 0x09, 0x10, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0x48, 0xa8, 0xa8,
++ 0xb0, 0x90, 0x90, 0xb4, 0xcc, 0x04, 0x00, 0x00,
++ 0x00, 0x11, 0x11, 0x11, 0x7d, 0x11, 0x10, 0x17,
++ 0x15, 0x1b, 0x64, 0x01, 0x02, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0x28, 0x48, 0xb0, 0x00, 0x00,
++ 0x00, 0x17, 0x11, 0x12, 0x7f, 0x10, 0x13, 0x10,
++ 0x17, 0x18, 0x63, 0x0d, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0xfc, 0x10, 0xa8, 0xfc, 0xa0, 0xf8, 0xa0,
++ 0xfc, 0xc8, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x12, 0x7f, 0x24, 0x25, 0x24,
++ 0x7b, 0x48, 0x0f, 0x14, 0x20, 0x43, 0x00, 0x00,
++ 0x40, 0xfc, 0xa8, 0xa4, 0xfc, 0xa0, 0xf8, 0xa0,
++ 0xfc, 0xc8, 0xb0, 0x90, 0xc8, 0x04, 0x00, 0x00,
++ 0x11, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x01,
++ 0x1f, 0x11, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x19, 0x34, 0x37, 0x30, 0x51,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7d, 0x11, 0x11, 0x17, 0x1e,
++ 0x72, 0x14, 0x11, 0x16, 0x10, 0x37, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf0, 0xf0, 0xf0, 0xfc, 0xd4,
++ 0xf8, 0xf4, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x02, 0x02, 0x07, 0x0c, 0x32, 0x03, 0x0d, 0x71,
++ 0x1f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x40, 0x80, 0x80, 0x60, 0x1c,
++ 0xf0, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1d, 0x1b, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x09, 0x0e, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20, 0xa0,
++ 0xa0, 0x60, 0x60, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x09, 0x42, 0x24, 0x23, 0x00, 0x0f,
++ 0x10, 0x13, 0x20, 0x20, 0x40, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x20, 0x40, 0xf8, 0x48, 0xfc,
++ 0x48, 0xf8, 0x48, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x48, 0x2f, 0x28, 0x08, 0x08,
++ 0x18, 0x28, 0x49, 0x0a, 0x0c, 0x08, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x48, 0xfc, 0x40, 0x40, 0x40,
++ 0xa0, 0xa0, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x3f, 0x2f,
++ 0x48, 0x0f, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xfc, 0xe8,
++ 0x20, 0xe0, 0xe0, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x1b, 0x71, 0x12, 0x17, 0x7c, 0x13, 0x18,
++ 0x37, 0x34, 0x57, 0x10, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0xfc, 0x10, 0xa8, 0xfc, 0xa0, 0xf8, 0xa0,
++ 0xfc, 0xe8, 0x90, 0xb0, 0xc8, 0x04, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x00, 0x3d, 0x05, 0x19,
++ 0x63, 0x0f, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x48, 0x88, 0x50, 0x30,
++ 0x0c, 0xe0, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x7e, 0x03, 0x3c, 0x01, 0x3c,
++ 0x03, 0x3c, 0x27, 0x24, 0x3c, 0x27, 0x00, 0x00,
++ 0x40, 0xfc, 0x10, 0xa8, 0xfc, 0xa0, 0xf8, 0xa0,
++ 0xfc, 0xe8, 0x90, 0xb0, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0d, 0x3f, 0x2e, 0x2e, 0x36,
++ 0x37, 0x22, 0x3f, 0x22, 0x3e, 0x23, 0x00, 0x00,
++ 0x20, 0xfc, 0x88, 0x54, 0xfc, 0x50, 0xf8, 0x50,
++ 0xfc, 0x68, 0xd0, 0x50, 0x68, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0f, 0x72, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x00, 0xfc, 0x20, 0xa0,
++ 0xb8, 0xa0, 0xa0, 0x60, 0x20, 0x1c, 0x00, 0x00,
++ 0x00, 0x07, 0x74, 0x57, 0x54, 0x57, 0x55, 0x55,
++ 0x55, 0x77, 0x4a, 0x4b, 0x12, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x38, 0xc0, 0xf0, 0x50,
++ 0xf0, 0xf8, 0xa8, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x10, 0x7e, 0x12, 0x12, 0x12,
++ 0x16, 0x1a, 0x62, 0x02, 0x02, 0x01, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x29, 0x7e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x24, 0x26, 0x3a, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x20, 0x20, 0xf8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xb8, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x17, 0x11,
++ 0x19, 0x71, 0x11, 0x11, 0x1e, 0x30, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0x20, 0xe0, 0x20,
++ 0x20, 0x10, 0x50, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x10, 0x1d, 0x25, 0x25, 0x55,
++ 0x19, 0x09, 0x11, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x12, 0x17, 0x35, 0x39, 0x52,
++ 0x17, 0x1a, 0x17, 0x24, 0x20, 0x47, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xf8, 0x00, 0xf8, 0x88,
++ 0xe8, 0xa8, 0xe8, 0xa8, 0xf8, 0x30, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x66, 0x2a, 0x1b, 0x24, 0x7f,
++ 0x12, 0x3b, 0x36, 0x37, 0x52, 0x10, 0x00, 0x00,
++ 0x20, 0x30, 0xe8, 0xa8, 0xa0, 0xfc, 0x20, 0xa8,
++ 0xa8, 0x90, 0x90, 0xb4, 0x4c, 0x84, 0x00, 0x00,
++ 0x01, 0x7d, 0x2f, 0x2a, 0x3a, 0x2f, 0x28, 0x3b,
++ 0x2a, 0x2f, 0x3a, 0x6b, 0x0a, 0x08, 0x00, 0x00,
++ 0x20, 0x30, 0xe8, 0xa8, 0xa0, 0xfc, 0x20, 0xa8,
++ 0xa8, 0xb0, 0x90, 0xb4, 0x4c, 0x84, 0x00, 0x00,
++ 0x04, 0x07, 0x08, 0x10, 0x7f, 0x11, 0x11, 0x11,
++ 0x1f, 0x10, 0x10, 0x10, 0x10, 0x0f, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x80, 0xf0, 0x10, 0x10, 0x10,
++ 0xf0, 0x10, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x1e, 0x24, 0x48, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x2a, 0x3e, 0x22, 0x22, 0x22, 0x47, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0x20, 0x30, 0x28, 0x3c, 0xc4, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x19, 0x6f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x09, 0x08, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0xec, 0x20, 0xe0,
++ 0x20, 0xf0, 0x10, 0xa0, 0x60, 0x1c, 0x00, 0x00,
++ 0x08, 0x0c, 0x12, 0x2a, 0x48, 0x3e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x24, 0x26, 0x3a, 0x61, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0x20, 0x30, 0x28, 0x3c, 0xc4, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x10, 0x1f, 0x12, 0x23,
++ 0x5c, 0x00, 0x7f, 0x04, 0x02, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xfc, 0x48, 0xb0,
++ 0x2c, 0x20, 0xfc, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x11, 0x11, 0x1f,
++ 0x11, 0x11, 0x12, 0x22, 0x24, 0x48, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0xe0,
++ 0x20, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x12, 0x12, 0x33, 0x52, 0x12,
++ 0x13, 0x12, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48,
++ 0xf8, 0x48, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x17, 0x10, 0x33, 0x50, 0x13,
++ 0x10, 0x13, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0xf8, 0x00, 0xf8,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x13, 0x10, 0x33, 0x50, 0x17,
++ 0x14, 0x1b, 0x11, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x08, 0xf0, 0x20, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x10, 0x1f, 0x14, 0x27,
++ 0x58, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x90, 0x60,
++ 0x1c, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x25,
++ 0x79, 0x4d, 0x0a, 0x12, 0x24, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x00, 0xfc, 0x68,
++ 0x68, 0x70, 0x50, 0x50, 0x68, 0x84, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x49, 0x08, 0x49, 0x29, 0x2b,
++ 0x0a, 0x1f, 0x68, 0x08, 0x08, 0x0b, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0xf0, 0xfc,
++ 0x08, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x5f, 0x05, 0x7f, 0x05, 0x19,
++ 0x6f, 0x09, 0x0f, 0x09, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x68, 0xa0, 0x40, 0xfc, 0x40, 0x30,
++ 0xec, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x00, 0x00, 0x02, 0x02, 0x02, 0x12, 0x12,
++ 0x12, 0x22, 0x42, 0x02, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x40, 0x00, 0x00, 0x10, 0x08,
++ 0x04, 0x04, 0x00, 0x10, 0x10, 0xf0, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x19, 0x35, 0x35, 0x31, 0x51,
++ 0x11, 0x11, 0x17, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0xfc, 0xa0, 0x10, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x12, 0x13, 0x1e,
++ 0x72, 0x12, 0x14, 0x14, 0x18, 0x33, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x00, 0xfc, 0xc8,
++ 0xc8, 0xb0, 0xa0, 0x90, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x22, 0x12, 0x14, 0x7f, 0x08,
++ 0x7e, 0x1c, 0x1b, 0x29, 0x4a, 0x08, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x14, 0x14, 0x7f, 0x00, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x50, 0xfc, 0x00, 0xe0,
++ 0x20, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x03, 0x0d, 0x31, 0x09, 0x08,
++ 0x7f, 0x18, 0x1c, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x80, 0x60, 0x18, 0x20, 0x20,
++ 0xfc, 0x60, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x10, 0x17, 0x39, 0x36,
++ 0x34, 0x53, 0x50, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xa0, 0xfc, 0x10, 0xe8,
++ 0x44, 0xf8, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x43, 0x20, 0x23, 0x00, 0x17,
++ 0x14, 0x1b, 0x21, 0x20, 0x41, 0x4e, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x08, 0xf0, 0x20, 0xc0, 0xe0, 0x1c, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x44, 0x20, 0x21, 0x02, 0x10,
++ 0x17, 0x10, 0x21, 0x22, 0x44, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0xa8, 0xa0, 0xa4, 0x1c, 0x40, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x21, 0x21, 0x3f, 0x21, 0x21,
++ 0x3f, 0x21, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x08,
++ 0xf8, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x29, 0x2a, 0x0c, 0x19,
++ 0x28, 0x48, 0x13, 0x10, 0x20, 0x47, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0x40, 0x30, 0x4c, 0x80,
++ 0x20, 0xc8, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x7f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0xfc, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x0a, 0x0a, 0x13, 0x1a,
++ 0x36, 0x57, 0x12, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0xf8, 0x48,
++ 0x48, 0xf8, 0x48, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x02, 0x7f, 0x04, 0x0f,
++ 0x11, 0x6f, 0x03, 0x0d, 0x31, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x80, 0xfc, 0x40, 0xa0,
++ 0x10, 0xec, 0x80, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x67, 0x1a, 0x1a, 0x27, 0x7e,
++ 0x12, 0x1b, 0x36, 0x34, 0x50, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0xf8, 0x48,
++ 0x48, 0xf8, 0x48, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x3f, 0x20, 0x20, 0x20,
++ 0x3f, 0x21, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10,
++ 0xf0, 0x10, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x04, 0x00, 0x01, 0x04,
++ 0x14, 0x14, 0x24, 0x44, 0x04, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00, 0x90,
++ 0x48, 0x44, 0x04, 0x20, 0x20, 0xe0, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x08, 0x3f, 0x12, 0x14, 0x7f,
++ 0x08, 0x7f, 0x1c, 0x2a, 0x4a, 0x09, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x0c, 0x70, 0x40, 0x40, 0x7c,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x22, 0x14, 0x7f, 0x08, 0x7f,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x68, 0x60, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3d, 0x02, 0x3d,
++ 0x00, 0x3c, 0x25, 0x24, 0x3c, 0x23, 0x00, 0x00,
++ 0x40, 0x40, 0x60, 0xa0, 0x90, 0x28, 0x44, 0x90,
++ 0x20, 0x44, 0x88, 0x10, 0x60, 0x80, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x78, 0x01, 0x06, 0x38, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0xe0, 0x24, 0xe8, 0x30,
++ 0xe0, 0x60, 0xa0, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x08, 0x04, 0x04, 0x7f, 0x01,
++ 0x01, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x20, 0x20, 0x40, 0xfc, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x21, 0x12, 0x13, 0x06, 0x0a, 0x73, 0x12,
++ 0x13, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0xf8, 0x20, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x00,
++ 0x1f, 0x13, 0x1f, 0x14, 0x27, 0x58, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x70, 0x70, 0x00,
++ 0xf8, 0xe0, 0xfc, 0x90, 0x60, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02,
++ 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
++ 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x10, 0x10, 0x30, 0x50, 0x10,
++ 0x10, 0x10, 0x10, 0x17, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x02, 0x02, 0x02, 0x1e, 0x07,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x88, 0x48, 0x08, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x12, 0x1f, 0x17, 0x14,
++ 0x27, 0x58, 0x0f, 0x00, 0x3f, 0x00, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0xcc, 0x70,
++ 0x44, 0xbc, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x3d, 0x01, 0x01, 0x01, 0x7f, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x3f, 0x00, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x3e, 0x08,
++ 0x0e, 0x30, 0x7f, 0x04, 0x02, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xf8, 0x88,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x04, 0x3f, 0x04, 0x07, 0x04, 0x07, 0x04, 0x7f,
++ 0x12, 0x12, 0x14, 0x18, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xc0, 0x40, 0xc0, 0x40, 0xfc,
++ 0x80, 0x88, 0x78, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x09, 0x10, 0x10,
++ 0x23, 0x40, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x80, 0x40,
++ 0x30, 0x8c, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3e, 0x22, 0x3f, 0x3f, 0x2f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x60, 0x90, 0x0c, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x01, 0x3c, 0x24, 0x25, 0x3d, 0x22, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0xb0, 0xd0,
++ 0x90, 0x90, 0x94, 0x0c, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x27, 0x11, 0x11, 0x01, 0x01, 0x0f, 0x71,
++ 0x11, 0x11, 0x11, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0x20, 0xe0, 0x20,
++ 0x10, 0x14, 0x0c, 0x04, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x28, 0x2b, 0x32, 0x2b, 0x26,
++ 0x27, 0x24, 0x27, 0x38, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x14, 0x15, 0x7f, 0x14, 0x1c, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xc8, 0x68, 0x58,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x00, 0x7f, 0x00, 0x3f,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xf8, 0x08, 0xe8,
++ 0x08, 0x88, 0x88, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x7a, 0x03, 0x3a, 0x02, 0x3b,
++ 0x02, 0x3a, 0x2b, 0x2e, 0x38, 0x20, 0x00, 0x00,
++ 0x00, 0xc0, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0x98,
++ 0x90, 0xd0, 0xb0, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x10, 0x17, 0x20, 0x48, 0x09, 0x11, 0x25, 0x45,
++ 0x09, 0x09, 0x11, 0x20, 0x43, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x40, 0xc0, 0x40, 0x7c, 0xa0, 0xa0, 0x3c, 0x20,
++ 0x20, 0x3c, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x22, 0x29, 0x25, 0x24, 0x20,
++ 0x27, 0x20, 0x23, 0x2c, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x28, 0x28, 0x28, 0x48, 0x48,
++ 0x88, 0xc8, 0x28, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x17, 0x14, 0x14,
++ 0x17, 0x14, 0x12, 0x23, 0x23, 0x4c, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xc8, 0x08, 0x88, 0xfc, 0xc8,
++ 0xa8, 0xa8, 0x88, 0x08, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x27, 0x10, 0x13, 0x02, 0x02, 0x73, 0x12,
++ 0x11, 0x11, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x10,
++ 0x10, 0x20, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x49, 0x49, 0x4a, 0x4a, 0x4c,
++ 0x48, 0x78, 0x48, 0x41, 0x06, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x48, 0x50, 0x40,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x09, 0x09, 0x7f, 0x09,
++ 0x09, 0x3f, 0x01, 0x01, 0x3f, 0x00, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x3c, 0x25, 0x25, 0x3d, 0x25, 0x21,
++ 0x3d, 0x25, 0x25, 0x3c, 0x24, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x24, 0x24, 0x24, 0x24,
++ 0x24, 0x24, 0x38, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x13, 0x15, 0x11, 0x15,
++ 0x19, 0x71, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x90, 0x90, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x05, 0x05, 0x09,
++ 0x09, 0x11, 0x21, 0x41, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x88, 0x90, 0x60, 0x40, 0x20,
++ 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0a, 0x2a, 0x2c, 0x29, 0x4a,
++ 0x08, 0x0c, 0x12, 0x12, 0x21, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa8, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x7b, 0x48, 0x4b, 0x79, 0x49, 0x4f, 0x79,
++ 0x49, 0x4b, 0x78, 0x48, 0x07, 0x00, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xf8, 0x50, 0x50, 0xfc, 0x50,
++ 0x50, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x4a, 0x2b, 0x2c, 0x08, 0x7e, 0x09, 0x1c,
++ 0x1a, 0x2b, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0x54, 0x94, 0x2c, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x12, 0x0e, 0x32, 0x07, 0x01, 0x3f,
++ 0x04, 0x0b, 0x11, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x38, 0xc8, 0x18, 0x00, 0xf8,
++ 0x20, 0x50, 0x88, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x7f, 0x08, 0x0f,
++ 0x03, 0x0d, 0x74, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xfc, 0x20, 0xe0,
++ 0x10, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x02, 0x21, 0x17, 0x10, 0x01, 0x0e, 0x71, 0x16,
++ 0x11, 0x16, 0x10, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x80, 0x88, 0xc8, 0x70, 0xe0,
++ 0x50, 0x48, 0x44, 0x80, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0x50, 0x54, 0x94, 0x2c,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5e, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x13, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2b, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0xfc, 0xa8, 0xa8, 0xfc, 0xa8,
++ 0xa8, 0xfc, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x25, 0x29, 0x30, 0x28, 0x27, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x40, 0x78, 0xc8, 0x78, 0x48,
++ 0x78, 0x48, 0x48, 0x58, 0x80, 0x7c, 0x00, 0x00,
++ 0x00, 0x02, 0x7e, 0x13, 0x10, 0x17, 0x7c, 0x13,
++ 0x12, 0x16, 0x1a, 0x62, 0x02, 0x02, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x40, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x25, 0x2d, 0x2c, 0x7e, 0x43, 0x7d,
++ 0x25, 0x3d, 0x25, 0x3d, 0x26, 0x2c, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x78, 0x48, 0xf8, 0x48,
++ 0x78, 0x48, 0x48, 0x58, 0x80, 0x7c, 0x00, 0x00,
++ 0x11, 0x11, 0x1f, 0x01, 0x3f, 0x20, 0x4f, 0x00,
++ 0x7f, 0x09, 0x09, 0x11, 0x21, 0x03, 0x00, 0x00,
++ 0x10, 0x10, 0xf0, 0x00, 0xfc, 0x08, 0xe0, 0x00,
++ 0xfc, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x01, 0x11, 0x1f, 0x01, 0x7f, 0x0f, 0x08, 0x0f,
++ 0x3f, 0x20, 0x27, 0x24, 0x27, 0x20, 0x00, 0x00,
++ 0x00, 0x10, 0xf0, 0x00, 0xfc, 0xe0, 0x20, 0xe0,
++ 0xf8, 0x08, 0xc8, 0x48, 0xc8, 0x18, 0x00, 0x00,
++ 0x49, 0x29, 0x2a, 0x7f, 0x1c, 0x1a, 0x2b, 0x48,
++ 0x7f, 0x12, 0x3a, 0x04, 0x1a, 0x61, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x88, 0x88, 0x48, 0x50,
++ 0x30, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x08, 0x08, 0x48, 0x30, 0x10,
++ 0x30, 0x48, 0x88, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x09, 0x09, 0x7e, 0x09, 0x28,
++ 0x2f, 0x29, 0x39, 0x28, 0x27, 0x41, 0x00, 0x00,
++ 0x80, 0xf8, 0x48, 0x58, 0xf8, 0x88, 0xb0, 0xf8,
++ 0x48, 0x58, 0xf8, 0x88, 0x30, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x3e, 0x52, 0x57, 0x7f, 0x52, 0x2c,
++ 0x3e, 0x52, 0x56, 0x7e, 0x52, 0x2c, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x12, 0x13, 0x1e,
++ 0x72, 0x15, 0x15, 0x19, 0x11, 0x31, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x48, 0x40, 0xfc, 0x40,
++ 0x40, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x08, 0x09, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x40, 0x88, 0x08, 0x10, 0x20,
++ 0xc4, 0x04, 0x08, 0x10, 0x60, 0x80, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7f, 0x11, 0x19, 0x35, 0x34,
++ 0x33, 0x52, 0x53, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x3f, 0x20, 0x4f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xfc, 0x08, 0xe0, 0x20,
++ 0xe0, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x09, 0x3f, 0x2a, 0x2c, 0x28, 0x3e, 0x22,
++ 0x32, 0x2c, 0x24, 0x2a, 0x32, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x05, 0x19, 0x63, 0x00, 0x03, 0x0f, 0x78,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x60, 0x18, 0x24, 0xc0, 0x40, 0xf8, 0x80,
++ 0xf0, 0x80, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x0b, 0x13, 0x1d,
++ 0x35, 0x53, 0x12, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x23, 0x10, 0x15, 0x43, 0x23, 0x24, 0x0b, 0x12,
++ 0x13, 0x12, 0x21, 0x21, 0x4f, 0x40, 0x00, 0x00,
++ 0x90, 0x90, 0x64, 0x28, 0xf0, 0x08, 0xf4, 0x10,
++ 0xf0, 0x20, 0x20, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x14, 0x7e, 0x13, 0x14, 0x11, 0x1c,
++ 0x73, 0x12, 0x13, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x00, 0xf8, 0xc8, 0xa8, 0xb8, 0xc8, 0x98, 0x80,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x08, 0x04,
++ 0x02, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x12,
++ 0x13, 0x12, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20,
++ 0xe0, 0x20, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x42, 0x2f, 0x2a, 0x0a, 0x0f,
++ 0x12, 0x17, 0x26, 0x2a, 0x52, 0x42, 0x00, 0x00,
++ 0x00, 0x7c, 0x90, 0x78, 0xc8, 0xf8, 0xc8, 0xf8,
++ 0x48, 0x78, 0xb0, 0xa8, 0x44, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x00, 0x3e, 0x2b, 0x2a,
++ 0x3e, 0x2a, 0x2a, 0x3e, 0x23, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x78, 0x88, 0x88, 0x10, 0x10,
++ 0x30, 0x30, 0x48, 0x88, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x00, 0x7f,
++ 0x09, 0x09, 0x09, 0x15, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x00, 0xfc,
++ 0x00, 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x0f, 0x40, 0x23, 0x20, 0x0f, 0x00, 0x13,
++ 0x10, 0x2f, 0x21, 0x43, 0x40, 0x0f, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0xf0, 0x90, 0xfc, 0x90, 0xf0,
++ 0x80, 0xfc, 0x20, 0xe0, 0xd0, 0x08, 0x00, 0x00,
++ 0x14, 0x14, 0x1f, 0x24, 0x44, 0x7f, 0x04, 0x3f,
++ 0x25, 0x25, 0x25, 0x26, 0x24, 0x04, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0xc8, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x3e, 0x09, 0x7f, 0x15, 0x2b, 0x7e, 0x08,
++ 0x7f, 0x01, 0x3f, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0xd0, 0x50, 0x70, 0x94,
++ 0x0c, 0x00, 0xf0, 0x10, 0x10, 0xe0, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x26, 0x26, 0x24,
++ 0x79, 0x48, 0x0c, 0x14, 0x23, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x10, 0x24, 0x45, 0x09, 0x09, 0x19,
++ 0x29, 0x49, 0x09, 0x09, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x78, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x13, 0x3a, 0x34, 0x34, 0x53,
++ 0x10, 0x10, 0x10, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40, 0xf8,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x1e, 0x12,
++ 0x12, 0x12, 0x12, 0x2c, 0x21, 0x40, 0x00, 0x00,
++ 0x90, 0x88, 0x88, 0xfc, 0x80, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x64, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x08, 0x29, 0x2f, 0x2a, 0x28,
++ 0x28, 0x28, 0x2e, 0x38, 0x63, 0x0c, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x2a, 0x3f, 0x1c, 0x2a, 0x49,
++ 0x3f, 0x01, 0x09, 0x09, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xc8, 0x28, 0x30, 0xc8, 0x04,
++ 0xf8, 0x00, 0xe0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x09, 0x09,
++ 0x1f, 0x21, 0x0f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0x00,
++ 0xf8, 0x00, 0xe0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x49, 0x48, 0x4f, 0x78, 0x49,
++ 0x49, 0x49, 0x79, 0x49, 0x41, 0x01, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x10, 0x1b, 0x34, 0x35,
++ 0x30, 0x57, 0x50, 0x11, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0x40, 0xfc, 0x90, 0xd0, 0x70, 0x88, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7c, 0x10, 0x13, 0x3a, 0x36,
++ 0x36, 0x53, 0x53, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8,
++ 0xb8, 0x38, 0x18, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x01, 0x11, 0x11, 0x11,
++ 0x11, 0x11, 0x11, 0x11, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x47, 0x20, 0x2f, 0x00, 0x03,
++ 0x12, 0x13, 0x22, 0x23, 0x42, 0x42, 0x00, 0x00,
++ 0x80, 0xf8, 0x80, 0xf0, 0x80, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x28, 0x28, 0x3f, 0x29, 0x2a, 0x48,
++ 0x0d, 0x78, 0x08, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa0, 0xfc, 0x20, 0x20, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x09, 0x1f, 0x11, 0x21, 0x41,
++ 0x1f, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x1e, 0x12, 0x22, 0x4c,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x90, 0x88, 0xfc, 0x90, 0x90, 0x60, 0x64, 0x9c,
++ 0xf4, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x4b, 0x2a, 0x2c, 0x08, 0x7f, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x1e, 0x1e, 0x13, 0x7e, 0x02,
++ 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x78, 0x48, 0x48, 0x78, 0x48, 0x00,
++ 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x3f, 0x00, 0x1f, 0x11,
++ 0x11, 0x1f, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf8, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x14, 0x1f, 0x24, 0x7f, 0x3f, 0x24, 0x27, 0x01,
++ 0x7f, 0x03, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0xc8, 0xc8, 0xc8, 0x18, 0x00,
++ 0xfc, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x04, 0x04, 0x3f, 0x24, 0x24,
++ 0x28, 0x28, 0x30, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0x80, 0xf8, 0x88, 0x88,
++ 0x98, 0x98, 0x78, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x26, 0x3e, 0x24, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0x28, 0xe8, 0x68,
++ 0x50, 0x50, 0x54, 0xec, 0x4c, 0x84, 0x00, 0x00,
++ 0x08, 0x7e, 0x08, 0x0e, 0x78, 0x19, 0x07, 0x7f,
++ 0x07, 0x07, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0xfc, 0x90, 0x10, 0xc0, 0xfc,
++ 0xc0, 0xc0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x00, 0x3f, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x98, 0x00, 0x00,
++ 0x02, 0x22, 0x12, 0x1f, 0x02, 0x02, 0x03, 0x7e,
++ 0x12, 0x12, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x08, 0x10, 0x60, 0xc0, 0x7c, 0x50, 0xd0, 0x50,
++ 0x90, 0x90, 0x10, 0x10, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x78, 0x48, 0x78, 0x50, 0x7c,
++ 0x90, 0x78, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x09, 0x7f, 0x00, 0x3f,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x26, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x90, 0x20, 0xf8, 0x28, 0xfc,
++ 0x28, 0xf8, 0x28, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x04, 0x02, 0x03, 0x0c, 0x78,
++ 0x0f, 0x08, 0x0f, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x80, 0x80, 0x60, 0x3c,
++ 0xe0, 0x20, 0xe0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x03, 0x04, 0x38, 0x09, 0x09, 0x7f, 0x09, 0x1d,
++ 0x1a, 0x2a, 0x48, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xf8, 0x08, 0x08, 0xf8, 0x68,
++ 0x60, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x27, 0x3d, 0x25, 0x25,
++ 0x3d, 0x25, 0x25, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x40, 0x78, 0x90, 0x20, 0xfc, 0x00, 0x78, 0x48,
++ 0x48, 0x70, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x0f, 0x18, 0x1f, 0x28, 0x4f, 0x08, 0x0f,
++ 0x08, 0x3f, 0x02, 0x01, 0x07, 0x38, 0x00, 0x00,
++ 0x40, 0xf8, 0x80, 0xf0, 0x80, 0xf0, 0x80, 0xfc,
++ 0x00, 0xf0, 0x60, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x1f, 0x12, 0x13, 0x10,
++ 0x17, 0x14, 0x24, 0x24, 0x44, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0xfc, 0x20, 0xe0, 0x80,
++ 0xf8, 0x88, 0x88, 0x88, 0xb0, 0x80, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x1b, 0x34, 0x34, 0x37, 0x50,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0xfc, 0x90, 0x90, 0xfc, 0x00,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x13, 0x12, 0x1f, 0x12,
++ 0x17, 0x16, 0x2a, 0x32, 0x42, 0x06, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xc8, 0x48, 0xc8, 0x28,
++ 0x30, 0xb0, 0xb4, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x08,
++ 0x09, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00,
++ 0x10, 0x60, 0x80, 0x00, 0x00, 0xfc, 0x40, 0x40,
++ 0xc0, 0x70, 0x48, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x04, 0x7f, 0x00, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0xe0,
++ 0x20, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x08, 0x18, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x49, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x02, 0x02, 0x04, 0x07, 0x0c,
++ 0x0c, 0x14, 0x24, 0x44, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x1b, 0x70, 0x13, 0x10, 0x7f, 0x11, 0x19,
++ 0x35, 0x35, 0x51, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0xf8, 0x08,
++ 0xf8, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x08, 0x7f, 0x08, 0x3f,
++ 0x08, 0x7f, 0x1c, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x50, 0x50, 0xfc, 0x50, 0xfc,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x00, 0x00,
++ 0x08, 0x09, 0x0a, 0x72, 0x14, 0x0f, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x0b, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0xf8, 0x88,
++ 0xf8, 0xf8, 0x88, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x01, 0x39, 0x01, 0x3a, 0x02, 0x04, 0x1f, 0x68,
++ 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x38, 0x00, 0xb8, 0x40, 0x20, 0xf0, 0x2c,
++ 0xe0, 0x20, 0xe0, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x0f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x02, 0x12,
++ 0x12, 0x22, 0x44, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x40, 0x50,
++ 0x48, 0x44, 0x44, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x23, 0x3e, 0x08, 0x28, 0x2e,
++ 0x29, 0x2a, 0x2e, 0x38, 0x61, 0x02, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x50, 0x50, 0xd8, 0xd8,
++ 0x54, 0x54, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3d, 0x24, 0x24, 0x3c, 0x2b, 0x08, 0x2e,
++ 0x28, 0x28, 0x28, 0x2e, 0x38, 0x63, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0xf8, 0x88,
++ 0xf8, 0xf8, 0x88, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x10, 0x11, 0x3d, 0x25, 0x65,
++ 0x25, 0x25, 0x3d, 0x20, 0x23, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x13, 0x1c, 0x70, 0x10, 0x10,
++ 0x12, 0x12, 0x0e, 0x01, 0x06, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x12, 0x7e, 0x12, 0x13, 0x12, 0x10,
++ 0x1a, 0x72, 0x12, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x40, 0x40, 0x48, 0x48, 0x48, 0xf8, 0x48, 0x40,
++ 0x48, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7d, 0x10, 0x17, 0x10, 0x17,
++ 0x18, 0x70, 0x11, 0x10, 0x10, 0x37, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0x40, 0xfc,
++ 0x90, 0x90, 0xe0, 0x30, 0xc8, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x1f,
++ 0x71, 0x10, 0x10, 0x10, 0x13, 0x3c, 0x00, 0x00,
++ 0x00, 0xfc, 0x90, 0xf0, 0x90, 0xf0, 0x9c, 0xf0,
++ 0x18, 0xb0, 0x00, 0xa0, 0x18, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x11, 0x11, 0x1d,
++ 0x71, 0x12, 0x12, 0x14, 0x18, 0x30, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3d, 0x02, 0x3d,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x23, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x94, 0x94, 0x0c, 0x00, 0xf8,
++ 0x88, 0x90, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x44, 0x08, 0x10, 0x13,
++ 0x1c, 0x70, 0x10, 0x12, 0x0f, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x88, 0x78, 0x00, 0xf8,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x1e, 0x12, 0x1e,
++ 0x12, 0x1e, 0x14, 0x12, 0x1d, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x78, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x3c, 0x00, 0x7f, 0x01, 0x3d, 0x01, 0x3d,
++ 0x00, 0x3c, 0x24, 0x24, 0x3d, 0x26, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xf8, 0x08, 0x08, 0xf8, 0x68,
++ 0x60, 0x60, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x01,
++ 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x70, 0x70, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x15, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x90, 0x20, 0xf8, 0xa8, 0xa8,
++ 0xf8, 0x88, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x01, 0x01, 0x7f, 0x01, 0x01,
++ 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0xe0, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0c, 0x0b, 0x0e, 0x70, 0x00, 0x00, 0x00,
++ 0x44, 0x24, 0xa8, 0x90, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x12, 0x12, 0x32, 0x52, 0x12,
++ 0x12, 0x12, 0x12, 0x13, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x0f, 0x11, 0x21, 0x7f, 0x02,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x01, 0x01, 0x01, 0x7f, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x02, 0x3f,
++ 0x20, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x5f, 0x00, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xf0, 0x00, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x00, 0x7f, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x01, 0x01, 0x09, 0x09, 0x11, 0x21, 0x03, 0x01,
++ 0x7f, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0xfc, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x11, 0x49, 0x2a, 0x24, 0x3e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0x7c, 0xc0, 0x48, 0x48,
++ 0x50, 0x30, 0x24, 0xd4, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f,
++ 0x19, 0x15, 0x27, 0x39, 0x41, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0x48, 0x28, 0x38, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x14, 0x14, 0x13, 0x19,
++ 0x77, 0x11, 0x1f, 0x11, 0x16, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x40, 0xc8, 0xb8, 0x20,
++ 0xf8, 0x20, 0xfc, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x09, 0x1e, 0x1b, 0x1a,
++ 0x28, 0x2b, 0x48, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0x08, 0xfc, 0x40,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x0a, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x2b, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x00, 0xf8, 0xa8, 0xa8,
++ 0xa8, 0xfc, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x01,
++ 0x3f, 0x03, 0x05, 0x19, 0x61, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x08,
++ 0x90, 0xe0, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x20, 0x23, 0x00, 0x17,
++ 0x10, 0x10, 0x20, 0x21, 0x46, 0x40, 0x00, 0x00,
++ 0x90, 0x88, 0xf8, 0x80, 0xf0, 0x80, 0xf8, 0x90,
++ 0x50, 0x60, 0x64, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x41, 0x22, 0x24, 0x07, 0x10,
++ 0x10, 0x11, 0x21, 0x22, 0x44, 0x48, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0xa0,
++ 0xa0, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x48, 0x2b, 0x20, 0x08, 0x11, 0x22, 0x41,
++ 0x3f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x80, 0x80, 0xe0, 0xa0, 0xa4, 0x24, 0x1c, 0x00,
++ 0xf8, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x11, 0x09, 0x0f, 0x41, 0x2f, 0x23, 0x02, 0x14,
++ 0x1b, 0x12, 0x23, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0xfc, 0x30, 0xd0, 0x88,
++ 0xf4, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x04, 0x7f, 0x00, 0x3e, 0x22, 0x3e, 0x3e,
++ 0x22, 0x26, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x20, 0x40, 0xfc, 0x00, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x18, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x13, 0x16, 0x37, 0x3a, 0x53,
++ 0x12, 0x1b, 0x16, 0x23, 0x24, 0x48, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0x48, 0x68, 0xd8, 0x68, 0x48, 0xd8, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x11, 0x11, 0x1e, 0x14,
++ 0x14, 0x14, 0x24, 0x24, 0x45, 0x1a, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x00, 0xfc, 0x28, 0xb0,
++ 0xa0, 0xbc, 0xa0, 0xa0, 0x60, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x48, 0x10, 0x0f, 0x08,
++ 0x08, 0x7f, 0x03, 0x0c, 0x70, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x88, 0x78, 0xf0, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x4d, 0x04, 0x7f, 0x00, 0x3e,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x26, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x30, 0x40, 0xfc, 0x00, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7f,
++ 0x0d, 0x2a, 0x2a, 0x29, 0x4a, 0x08, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x20,
++ 0xe4, 0x78, 0xb0, 0x28, 0x24, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x64, 0x18, 0x1b, 0x25, 0x7d,
++ 0x13, 0x3b, 0x35, 0x31, 0x56, 0x10, 0x00, 0x00,
++ 0x90, 0x98, 0xf4, 0x94, 0x90, 0xfc, 0x50, 0x74,
++ 0x74, 0x58, 0x78, 0x94, 0x2c, 0x44, 0x00, 0x00,
++ 0x04, 0x3f, 0x01, 0x0f, 0x01, 0x7f, 0x10, 0x08,
++ 0x41, 0x22, 0x0c, 0x10, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x80, 0x80,
++ 0xfc, 0x48, 0x50, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x24,
++ 0x3d, 0x24, 0x24, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x20,
++ 0xe4, 0x78, 0xb0, 0x28, 0x24, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0e, 0x12, 0x12, 0x32, 0x4a,
++ 0x05, 0x04, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x90, 0x90, 0x90, 0x90,
++ 0xfc, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x12, 0x1a, 0x16, 0x17, 0x1e,
++ 0x72, 0x1a, 0x1a, 0x2a, 0x22, 0x46, 0x00, 0x00,
++ 0x70, 0x10, 0x50, 0x50, 0x88, 0x88, 0x04, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x1f, 0x12, 0x1f, 0x12, 0x1f,
++ 0x13, 0x12, 0x23, 0x2a, 0x49, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8,
++ 0xfc, 0x00, 0xfc, 0xa4, 0x54, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3e, 0x03, 0x3c,
++ 0x00, 0x3d, 0x24, 0x24, 0x3f, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0x08, 0xfc, 0x40,
++ 0x40, 0xf0, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x3c, 0x27, 0x3c, 0x27,
++ 0x24, 0x3c, 0x18, 0x14, 0x27, 0x40, 0x00, 0x00,
++ 0x50, 0x48, 0x7c, 0xc0, 0x78, 0xc0, 0x7c, 0xc8,
++ 0x48, 0x30, 0x24, 0xd4, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x23, 0x3e, 0x09, 0x28, 0x2f,
++ 0x28, 0x28, 0x2e, 0x38, 0x61, 0x06, 0x00, 0x00,
++ 0x50, 0x48, 0x78, 0xc0, 0x78, 0xc0, 0x7c, 0xc8,
++ 0x48, 0x30, 0x24, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x27, 0x10, 0x17, 0x04, 0x03, 0x71, 0x17,
++ 0x11, 0x1f, 0x10, 0x1b, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x44, 0xfc, 0x20, 0xf8,
++ 0x20, 0xfc, 0xa0, 0x18, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x27, 0x10, 0x13, 0x02, 0x03, 0x70, 0x1f,
++ 0x13, 0x1c, 0x11, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0x80, 0xfc,
++ 0xf0, 0x28, 0xe4, 0x10, 0xf0, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x13, 0x22, 0x5d, 0x08, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x73, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x40, 0xfc,
++ 0x48, 0x28, 0x30, 0x34, 0xcc, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x09, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0xa0, 0xf8, 0xa0, 0x20, 0xfc,
++ 0x50, 0x50, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x21,
++ 0x22, 0x22, 0x24, 0x28, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x08,
++ 0x88, 0x88, 0x48, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x05, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x7f, 0x00, 0x3e, 0x22, 0x22,
++ 0x3e, 0x22, 0x3e, 0x22, 0x22, 0x26, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xfc, 0x00, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x3f, 0x09,
++ 0x7f, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xf8, 0x20,
++ 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x42, 0x2f, 0x2a, 0x0f, 0x0a,
++ 0x1f, 0x12, 0x3f, 0x22, 0x42, 0x42, 0x00, 0x00,
++ 0x08, 0x08, 0xd0, 0x20, 0xa0, 0xbc, 0xa8, 0xa8,
++ 0xa8, 0x28, 0xe8, 0x48, 0x48, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x19, 0x15, 0x32, 0x4a, 0x0c,
++ 0x19, 0x60, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0x60, 0x50, 0x90,
++ 0x08, 0x04, 0x90, 0x48, 0x44, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x18, 0x60, 0x1f, 0x01,
++ 0x01, 0x0f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0x0c, 0xf0, 0x00,
++ 0x00, 0xe0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x7d, 0x0b, 0x0a, 0x13, 0x1a,
++ 0x37, 0x54, 0x17, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0x20, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x09, 0x0a, 0x72, 0x14, 0x0f, 0x12, 0x7e,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x88, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0xa8, 0x70,
++ 0xfc, 0x00, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x01, 0x3c, 0x27, 0x24, 0x25, 0x3c, 0x27, 0x25,
++ 0x3f, 0x24, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x50,
++ 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x57, 0x36, 0x3a, 0x12, 0x7e, 0x12, 0x1a,
++ 0x36, 0x36, 0x52, 0x14, 0x17, 0x18, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x00, 0x7b, 0x4a, 0x4b, 0x4a, 0x4b, 0x48,
++ 0x49, 0x79, 0x49, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x22, 0x14, 0x7f, 0x2a, 0x2a, 0x3e, 0x2a, 0x09,
++ 0x11, 0x2f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x08,
++ 0x18, 0xe0, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x7d, 0x45, 0x41, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x7d, 0x11, 0x17, 0x10, 0x1f,
++ 0x72, 0x13, 0x12, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x04, 0x18, 0x7f, 0x15, 0x13, 0x1f, 0x10,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0xc0, 0x20, 0x10, 0xfc, 0x50, 0x90, 0xf0, 0x10,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x04, 0x3f, 0x21, 0x3f, 0x21, 0x3f, 0x20,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x0e, 0x15, 0x65, 0x04, 0x7f,
++ 0x01, 0x11, 0x11, 0x19, 0x27, 0x41, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x60, 0xb0, 0x2c, 0x20, 0xf8,
++ 0x10, 0x20, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x04, 0x45, 0x29, 0x11, 0x31, 0x49, 0x09, 0x19,
++ 0x19, 0x29, 0x49, 0x09, 0x0f, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7e, 0x03, 0x0c, 0x08, 0x2b, 0x28, 0x2d,
++ 0x29, 0x29, 0x29, 0x2f, 0x3a, 0x64, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0x98, 0xe4, 0x10, 0x50,
++ 0x50, 0x50, 0x50, 0x54, 0x54, 0x0c, 0x00, 0x00,
++ 0x00, 0x7e, 0x07, 0x08, 0x0b, 0x2a, 0x2e, 0x2b,
++ 0x28, 0x28, 0x29, 0x2e, 0x38, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0xe0, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x01, 0x7d, 0x17, 0x11, 0x13, 0x3b, 0x2d, 0x6b,
++ 0x28, 0x2a, 0x3a, 0x23, 0x24, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xb8, 0x54, 0x10, 0xfc,
++ 0x48, 0x40, 0x78, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x09, 0x11, 0x19,
++ 0x35, 0x57, 0x11, 0x11, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x0c, 0x38, 0x08, 0x08, 0x7f, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x08, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x02, 0x0c,
++ 0x03, 0x7f, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x40, 0xc0,
++ 0x30, 0xc8, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7f,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x4b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x10, 0x1e, 0x24, 0x7e, 0x2b,
++ 0x3e, 0x2a, 0x3e, 0x3b, 0x2d, 0x40, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x18, 0xe0, 0x20, 0x20, 0xfc,
++ 0x70, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x25, 0x25, 0x3e, 0x24, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0xb0, 0x98, 0x14, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x29, 0x29, 0x31, 0x29, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x2f, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x22, 0x13, 0x1f, 0x01, 0x05, 0x05, 0x77,
++ 0x15, 0x11, 0x12, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0xb8, 0x28, 0xe8, 0x38, 0x68, 0x68, 0xf8,
++ 0x28, 0x48, 0x48, 0x98, 0x00, 0xfc, 0x00, 0x00,
++ 0x03, 0x1c, 0x10, 0x1e, 0x10, 0x1f, 0x00, 0x15,
++ 0x13, 0x19, 0x15, 0x15, 0x19, 0x66, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0x50,
++ 0x30, 0x90, 0x54, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x09, 0x08, 0x0b, 0x12, 0x13, 0x32, 0x53, 0x10,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x06, 0x09, 0x14, 0x3f, 0x51, 0x1f, 0x11,
++ 0x1f, 0x10, 0x3f, 0x31, 0x5f, 0x11, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0xc8, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x02, 0x22, 0x12, 0x0c, 0x04,
++ 0x04, 0x0a, 0x0a, 0x10, 0x21, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x50, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x12, 0x0a, 0x7f, 0x04, 0x3f, 0x1f, 0x01, 0x7f,
++ 0x12, 0x1f, 0x1e, 0x12, 0x7e, 0x03, 0x00, 0x00,
++ 0x90, 0xa0, 0xfc, 0x40, 0xf8, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x1f, 0x60, 0x0f, 0x08, 0x0f,
++ 0x0f, 0x08, 0x1f, 0x18, 0x2f, 0x08, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0xf0, 0x0c, 0xe0, 0x20, 0xe0,
++ 0xe0, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x3d, 0x25, 0x3d, 0x25, 0x01,
++ 0x7f, 0x08, 0x08, 0x08, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x78, 0x48, 0x78, 0x48, 0x00,
++ 0xfc, 0x90, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x48, 0x28, 0x2f, 0x08, 0x08,
++ 0x18, 0x18, 0x28, 0x48, 0x0b, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x1f, 0x02, 0x7f, 0x04,
++ 0x1f, 0x61, 0x1f, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x80, 0xfc, 0xc0,
++ 0x30, 0x0c, 0xf0, 0x80, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x05, 0x35, 0x09, 0x1d, 0x65,
++ 0x19, 0x15, 0x66, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x68, 0x10, 0x68, 0xc8,
++ 0x30, 0xa8, 0xc8, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x41, 0x01, 0x7f, 0x03,
++ 0x05, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0x00, 0xfc, 0x80,
++ 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x12, 0x17, 0x17, 0x14,
++ 0x17, 0x13, 0x23, 0x22, 0x43, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x20, 0xf8, 0xf8, 0x88,
++ 0xf8, 0xf0, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x27, 0x24, 0x24, 0x24,
++ 0x24, 0x24, 0x24, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf0, 0x90, 0x90, 0x90,
++ 0x90, 0x90, 0xe0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x09, 0x29, 0x3f, 0x2a, 0x4c, 0x19, 0x6a, 0x08,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0xa8, 0xa8, 0x28, 0x48, 0xb0,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x08, 0x1c, 0x1a, 0x2a, 0x48,
++ 0x09, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x13, 0x12, 0x13, 0x10,
++ 0x1f, 0x71, 0x10, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x40,
++ 0xf8, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x7d, 0x10, 0x11, 0x10, 0x1f,
++ 0x74, 0x13, 0x12, 0x12, 0x12, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x48, 0xf8, 0x48, 0x48, 0x70, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x17, 0x10, 0x13, 0x1e,
++ 0x73, 0x12, 0x13, 0x12, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0xfc, 0x40, 0xf8, 0x48,
++ 0xf8, 0x48, 0xf8, 0x48, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x17, 0x10, 0x1f,
++ 0x72, 0x13, 0x12, 0x10, 0x10, 0x37, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x60, 0xf0, 0x4c, 0x40, 0xf8,
++ 0x48, 0xf8, 0x48, 0x50, 0x78, 0x84, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x10, 0x17, 0x14, 0x1f,
++ 0x70, 0x17, 0x10, 0x11, 0x16, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xbc, 0xa4, 0xbc,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x1f, 0x11,
++ 0x01, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x10,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x24, 0x3f, 0x24, 0x3f,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x12, 0x09, 0x09, 0x1f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x12, 0x15, 0x39, 0x35,
++ 0x35, 0x51, 0x53, 0x15, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xf0, 0x08, 0xf4, 0x10, 0xf0,
++ 0xf0, 0x00, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x12, 0x13, 0x3a, 0x37,
++ 0x35, 0x51, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x43, 0x22, 0x23, 0x02, 0x0b,
++ 0x09, 0x09, 0x11, 0x11, 0x21, 0x21, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x15, 0x34, 0x3b, 0x32, 0x53,
++ 0x10, 0x17, 0x18, 0x25, 0x26, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xb8, 0xa8, 0xb8,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x01, 0x03, 0x0c, 0x30, 0x1f, 0x01, 0x7f, 0x01,
++ 0x01, 0x1f, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x80, 0xf0, 0x10, 0xfc, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x4b, 0x2a, 0x2b, 0x0a, 0x1b,
++ 0x28, 0x4b, 0x10, 0x10, 0x21, 0x4e, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x40, 0xf8, 0x90, 0x60, 0xb0, 0x0c, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x45, 0x09, 0x12, 0x0f,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0x38, 0x40, 0x30, 0xc8,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x57, 0x34, 0x3b, 0x12, 0x7f, 0x12, 0x3b,
++ 0x35, 0x55, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x15, 0x0c, 0x12, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x29, 0x4a, 0x08, 0x00, 0x00,
++ 0x30, 0x90, 0x90, 0xa8, 0x24, 0x50, 0xf8, 0x48,
++ 0x20, 0xe8, 0xc4, 0x54, 0x50, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x15, 0x0c, 0x12, 0x7f,
++ 0x0c, 0x2a, 0x2a, 0x29, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x00, 0xf8, 0x00, 0xfc,
++ 0x20, 0xa8, 0xa4, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x7e, 0x24, 0x25, 0x3e, 0x24, 0x25, 0x3c,
++ 0x24, 0x25, 0x3d, 0x66, 0x04, 0x04, 0x00, 0x00,
++ 0x70, 0x90, 0x90, 0x48, 0x64, 0x90, 0xf8, 0x48,
++ 0xa0, 0xa8, 0x84, 0x94, 0x90, 0x70, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x10, 0x1f, 0x10,
++ 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x48, 0x28, 0x2f,
++ 0x08, 0x18, 0x28, 0x48, 0x0b, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x7f, 0x08, 0x1f, 0x72, 0x0c,
++ 0x74, 0x04, 0x7f, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0x80, 0x98, 0xe0, 0x84,
++ 0x7c, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x7f, 0x09, 0x02, 0x0f, 0x7f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x17, 0x14, 0x27, 0x44, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0x80, 0xe0, 0xfc, 0x20, 0xe0,
++ 0x20, 0xe0, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x11, 0x09, 0x49, 0x23, 0x22,
++ 0x0b, 0x08, 0x17, 0x11, 0x26, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0xb8, 0xa8,
++ 0xf8, 0x40, 0xfc, 0xf0, 0x4c, 0x40, 0x00, 0x00,
++ 0x04, 0x24, 0x17, 0x04, 0x1c, 0x65, 0x05, 0x01,
++ 0x7f, 0x04, 0x1c, 0x64, 0x07, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x00, 0x00,
++ 0xfc, 0x90, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x01, 0x7f, 0x01, 0x09,
++ 0x09, 0x09, 0x09, 0x15, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0xf8, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x02, 0x21, 0x11, 0x17, 0x00, 0x00, 0x7f, 0x10,
++ 0x11, 0x11, 0x12, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xf8, 0x80, 0x80, 0xfc, 0xc0,
++ 0x20, 0x10, 0x08, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x27, 0x13, 0x12, 0x03, 0x02, 0x73, 0x11,
++ 0x11, 0x11, 0x11, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0xa0, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1d, 0x19, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0xf8, 0x04, 0xf8, 0x88, 0xf8,
++ 0xf8, 0x80, 0xfc, 0x84, 0xfc, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x3d, 0x5d, 0x00, 0x08,
++ 0x7f, 0x1c, 0x1a, 0x29, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x78, 0x70, 0x00, 0xf8,
++ 0x88, 0xf8, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3f, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x70, 0xac, 0x20, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0x28, 0x3c, 0xc4, 0x00, 0x00,
++ 0x08, 0x09, 0x0e, 0x13, 0x12, 0x33, 0x50, 0x11,
++ 0x16, 0x11, 0x16, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0xf8, 0x48, 0xf8, 0x40, 0x88,
++ 0xd0, 0x60, 0xb0, 0x28, 0x24, 0xc0, 0x00, 0x00,
++ 0x01, 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x10,
++ 0x15, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x11, 0x10, 0x13, 0x1a, 0x37, 0x36, 0x33, 0x50,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x29, 0x28, 0x3b, 0x2a, 0x2b, 0x3b,
++ 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x58, 0x00, 0x00,
++ 0x20, 0xfc, 0x28, 0x24, 0xfc, 0x20, 0xe8, 0xa8,
++ 0xe8, 0x50, 0xd4, 0x9c, 0xec, 0x44, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x00, 0x1f, 0x10, 0x1f, 0x19,
++ 0x1f, 0x18, 0x1f, 0x29, 0x2f, 0x48, 0x00, 0x00,
++ 0x40, 0xfc, 0x50, 0x48, 0xfc, 0x40, 0xc8, 0x28,
++ 0xa8, 0xb0, 0x90, 0x34, 0xcc, 0x84, 0x00, 0x00,
++ 0x01, 0x3c, 0x25, 0x25, 0x3d, 0x25, 0x3d, 0x24,
++ 0x25, 0x3d, 0x19, 0x15, 0x25, 0x41, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x22, 0x12, 0x13, 0x04, 0x0f, 0x70, 0x13,
++ 0x12, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0xf0,
++ 0x10, 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x32, 0x50, 0x12,
++ 0x12, 0x12, 0x12, 0x13, 0x14, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x48, 0x40, 0x40,
++ 0x78, 0x40, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x08, 0x0f, 0x0c, 0x14, 0x17, 0x34, 0x54, 0x17,
++ 0x14, 0x14, 0x17, 0x13, 0x14, 0x18, 0x00, 0x00,
++ 0x08, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x08, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x3e, 0x22,
++ 0x22, 0x3e, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x22, 0x3e,
++ 0x28, 0x24, 0x26, 0x3a, 0x62, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20,
++ 0xe0, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x13, 0x10, 0x16,
++ 0x1a, 0x72, 0x12, 0x13, 0x14, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x40, 0x40,
++ 0x78, 0x40, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x11, 0x1f,
++ 0x13, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0x10, 0xf0,
++ 0x90, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00, 0x00,
++ 0x20, 0x17, 0x14, 0x44, 0x27, 0x24, 0x07, 0x14,
++ 0x14, 0x17, 0x23, 0x22, 0x44, 0x48, 0x00, 0x00,
++ 0x08, 0x88, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0x08, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x11, 0x01, 0x11,
++ 0x11, 0x11, 0x19, 0x15, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0xf0, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x20, 0x17, 0x10, 0x03, 0x02, 0x72, 0x13,
++ 0x10, 0x11, 0x16, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0xe0, 0x50, 0x4c, 0x40, 0x00, 0xfc, 0x00, 0x00,
++ 0x09, 0x09, 0x0a, 0x14, 0x10, 0x31, 0x51, 0x12,
++ 0x17, 0x1a, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x20, 0x10, 0x08, 0x88, 0x80, 0x40, 0x20, 0x10,
++ 0xf8, 0x14, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x17, 0x14,
++ 0x17, 0x1f, 0x18, 0x2f, 0x28, 0x48, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x78, 0x80, 0xf0, 0x90,
++ 0xf0, 0xf8, 0xa8, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x3c, 0x24, 0x3c, 0x27,
++ 0x24, 0x3c, 0x18, 0x14, 0x24, 0x40, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0xa8, 0xa8, 0xe8,
++ 0x90, 0x90, 0xb4, 0xac, 0xcc, 0x84, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x12, 0x10, 0x1d, 0x16,
++ 0x17, 0x14, 0x24, 0x24, 0x45, 0x1a, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x80, 0xf8, 0x20, 0x20,
++ 0xfc, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x72, 0x14, 0x0c, 0x13, 0x7f,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x48, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x00, 0xfc, 0x08,
++ 0x50, 0x50, 0x50, 0x94, 0x94, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x08, 0x08, 0x0c, 0x12, 0x23,
++ 0x01, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x40, 0x60, 0x90, 0x10,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x09, 0x0b, 0x13, 0x3d,
++ 0x55, 0x13, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x07, 0x04, 0x07, 0x04,
++ 0x04, 0x7f, 0x00, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xc0, 0x40, 0xc0, 0x40,
++ 0x40, 0xfc, 0x00, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x12, 0x11, 0x11, 0x7f, 0x10, 0x17, 0x14, 0x17,
++ 0x1c, 0x77, 0x14, 0x14, 0x14, 0x35, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x00, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x7f, 0x04, 0x05, 0x08, 0x18,
++ 0x28, 0x4f, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0xf8, 0x10, 0x20,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x7c, 0x07, 0x08, 0x0b, 0x10, 0x10, 0x1b,
++ 0x70, 0x11, 0x11, 0x12, 0x14, 0x30, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x50, 0x90, 0xa0, 0x48, 0xf4,
++ 0x44, 0x50, 0x48, 0x44, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x04, 0x7f, 0x02, 0x1f, 0x12, 0x14, 0x1f,
++ 0x1f, 0x00, 0x7f, 0x08, 0x04, 0x00, 0x00, 0x00,
++ 0x20, 0x40, 0xfc, 0x80, 0xf0, 0xd0, 0x50, 0xf0,
++ 0xf0, 0x40, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x10, 0x13, 0x12, 0x1f,
++ 0x72, 0x13, 0x12, 0x13, 0x11, 0x36, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x18, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x90, 0x50,
++ 0x50, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x2f, 0x11, 0x12, 0x02, 0x03, 0x0e, 0x72,
++ 0x12, 0x12, 0x13, 0x1e, 0x26, 0x41, 0x00, 0x00,
++ 0x0c, 0xf0, 0x28, 0x48, 0xd0, 0x30, 0x48, 0xfc,
++ 0xa8, 0xa4, 0x24, 0x20, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x12, 0x12, 0x33, 0x5e, 0x12,
++ 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x48, 0x78, 0xc8, 0x48, 0x48,
++ 0x48, 0x58, 0x40, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x02, 0x03, 0x04, 0x0a, 0x31, 0x01, 0x06, 0x38,
++ 0x03, 0x0c, 0x00, 0x00, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x40, 0x80, 0x40, 0x7c, 0x84,
++ 0x88, 0x50, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x01, 0x02, 0x02,
++ 0x04, 0x04, 0x0a, 0x11, 0x21, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x80, 0x80,
++ 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x27, 0x20, 0x00, 0x10,
++ 0x10, 0x11, 0x21, 0x22, 0x44, 0x48, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xc0,
++ 0xa0, 0x20, 0x90, 0x50, 0x48, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x01, 0x3e, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x08, 0x80, 0x80, 0x98,
++ 0xe0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x4b, 0x49, 0x49, 0x4f, 0x49,
++ 0x49, 0x7b, 0x48, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xf8, 0x50, 0x50, 0xfc, 0x50,
++ 0x50, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x48, 0x71, 0x53, 0x4d, 0x49, 0x71,
++ 0x41, 0x41, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8,
++ 0x08, 0x18, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x12, 0x09, 0x08, 0x01, 0x7f,
++ 0x02, 0x04, 0x07, 0x08, 0x03, 0x3c, 0x00, 0x00,
++ 0x18, 0xe8, 0x08, 0x10, 0x20, 0x40, 0x00, 0xfc,
++ 0x20, 0x20, 0x40, 0xc0, 0x30, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x19, 0x36, 0x37, 0x30, 0x51,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0xfc, 0x80, 0xf8, 0x20, 0xfc, 0x00, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x08, 0x08, 0x0e,
++ 0x78, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7f, 0x0a, 0x18, 0x18, 0x1c,
++ 0x2a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x80, 0x80, 0x88, 0x90,
++ 0xe0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x12, 0x1b, 0x16, 0x16, 0x7f,
++ 0x12, 0x1a, 0x1a, 0x2a, 0x22, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x40, 0x40, 0x48, 0x50,
++ 0x60, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7f, 0x09, 0x1b, 0x1c, 0x1b,
++ 0x2b, 0x2b, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x40, 0xfc, 0x80, 0xf8, 0x20, 0xfc, 0x00, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x29, 0x29, 0x32, 0x28, 0x24,
++ 0x24, 0x24, 0x24, 0x38, 0x20, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x08, 0x80, 0x80, 0x98,
++ 0xe0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x29, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x45, 0x1a, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x70,
++ 0x50, 0x50, 0xc8, 0xa8, 0x24, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3f, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x44, 0x24, 0xa8, 0x90, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x10, 0x17, 0x30, 0x50, 0x11,
++ 0x11, 0x12, 0x15, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xe0, 0xe0, 0x50,
++ 0x50, 0x48, 0xf4, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x13, 0x7f, 0x15, 0x11, 0x11,
++ 0x15, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x04, 0x04, 0x24, 0x14,
++ 0x0c, 0x0c, 0x0a, 0x12, 0x20, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x90, 0x50,
++ 0x50, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x10, 0x7f, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x55, 0x55, 0x55, 0x43, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0xfc, 0x08, 0x48, 0x28,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x10, 0x17, 0x30, 0x50, 0x10, 0x11,
++ 0x01, 0x11, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x90, 0x88, 0xfc, 0xc0, 0x40, 0x24, 0x14, 0x0c,
++ 0x00, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x09, 0x09, 0x7f, 0x09, 0x0f, 0x00, 0x3f, 0x21,
++ 0x5f, 0x11, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xe0, 0x00, 0xfc, 0x08,
++ 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x13, 0x24, 0x04, 0x0f, 0x18, 0x28,
++ 0x4f, 0x09, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x02, 0x02, 0x04, 0x7f, 0x00, 0x0f, 0x08, 0x08,
++ 0x0f, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x40, 0x30, 0xe8, 0x04, 0xe0, 0x20, 0x20,
++ 0xe0, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x08, 0x12, 0x7f, 0x3e, 0x22, 0x3e, 0x3e, 0x22,
++ 0x26, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x40, 0x48, 0x70, 0x44, 0x3c, 0x48, 0x70, 0x44,
++ 0x3c, 0x10, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x04, 0x1f, 0x04, 0x7f, 0x1f, 0x15, 0x1f, 0x15,
++ 0x1f, 0x3f, 0x0a, 0x7f, 0x19, 0x60, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0xfc, 0x40, 0x48, 0x48, 0x28,
++ 0x28, 0xb0, 0x14, 0xac, 0x4c, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x08, 0x7f, 0x14, 0x12, 0x22,
++ 0x4f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0xfc, 0x30, 0x50, 0x88,
++ 0xe4, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x0f, 0x02, 0x7f, 0x05,
++ 0x19, 0x6d, 0x03, 0x0d, 0x31, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xe0, 0x80, 0xfc, 0x40,
++ 0x30, 0x6c, 0x80, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x11, 0x09, 0x0f, 0x41, 0x21, 0x20, 0x07, 0x04,
++ 0x1b, 0x12, 0x22, 0x22, 0x42, 0x40, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0xf0, 0x00, 0xfc, 0x48,
++ 0xf8, 0x48, 0x48, 0x48, 0x70, 0x40, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x27, 0x3c,
++ 0x25, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x50, 0x88, 0x9c, 0xe4, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3e, 0x25, 0x25, 0x24, 0x3c, 0x24, 0x27,
++ 0x3d, 0x25, 0x25, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x78, 0x48, 0x78, 0x64,
++ 0x58, 0x50, 0x68, 0x84, 0x80, 0x7c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x02, 0x04, 0x7f,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0x40, 0x30, 0xc8,
++ 0x04, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x02, 0x04, 0x18, 0x6f, 0x08, 0x09, 0x09, 0x7f,
++ 0x03, 0x0c, 0x74, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x90, 0x88, 0x7c, 0xc0, 0x20, 0x14, 0x0c, 0xfc,
++ 0x10, 0x90, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x02, 0x04, 0x1b, 0x68, 0x08, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x90, 0x88, 0xfc, 0x40, 0x34, 0xec, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x23, 0x12, 0x13, 0x02, 0x03, 0x72, 0x12,
++ 0x12, 0x12, 0x1f, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x88, 0x48,
++ 0x30, 0xd0, 0x08, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x23, 0x10, 0x17, 0x00, 0x03, 0x74, 0x12,
++ 0x12, 0x11, 0x16, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0x48, 0x50,
++ 0xe0, 0x50, 0x48, 0xc8, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x3c, 0x24, 0x2b, 0x28, 0x30, 0x2b, 0x24,
++ 0x27, 0x24, 0x38, 0x23, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xfc, 0x40, 0xe8, 0x68, 0xb0,
++ 0x30, 0x70, 0xa8, 0x24, 0x20, 0xc0, 0x00, 0x00,
++ 0x02, 0x04, 0x1f, 0x68, 0x08, 0x1f, 0x11, 0x1f,
++ 0x1f, 0x3f, 0x01, 0x7f, 0x24, 0x42, 0x00, 0x00,
++ 0x90, 0xbc, 0xc0, 0x24, 0x1c, 0xf4, 0x10, 0xf0,
++ 0xf0, 0xf8, 0x00, 0xfc, 0x88, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2f, 0x29, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8, 0xf8, 0x88,
++ 0xf8, 0xd8, 0xf8, 0x58, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x08, 0x08, 0x1f, 0x28, 0x48,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x90, 0x88, 0x88, 0x80, 0xfc, 0x40, 0x40, 0x40,
++ 0x20, 0x20, 0x14, 0x14, 0x0c, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x08, 0x7f, 0x00, 0x00,
++ 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x40, 0x30, 0xc8, 0x04, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x7f, 0x01, 0x02,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x80,
++ 0x80, 0x40, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x29, 0x46, 0x3f, 0x01, 0x3f,
++ 0x21, 0x3f, 0x23, 0x05, 0x19, 0x61, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x20, 0x10, 0xf0, 0x10, 0xf0,
++ 0x00, 0xf8, 0x08, 0x08, 0x30, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x2f,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x78, 0x48, 0x78, 0x00, 0xfc,
++ 0x10, 0x50, 0x5c, 0x50, 0xb0, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x3e, 0x22, 0x3e, 0x00, 0x7f,
++ 0x08, 0x2e, 0x28, 0x38, 0x2d, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x50, 0x88, 0x08, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x15, 0x1f, 0x15, 0x15, 0x13,
++ 0x13, 0x13, 0x23, 0x23, 0x4d, 0x12, 0x00, 0x00,
++ 0x80, 0xfc, 0xa0, 0xfc, 0xf0, 0xf0, 0xfc, 0xe0,
++ 0xe0, 0xe0, 0xf8, 0xf8, 0x48, 0xb0, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x42, 0x21, 0x2f, 0x00, 0x17,
++ 0x14, 0x17, 0x24, 0x27, 0x44, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x20, 0x40, 0xfc, 0x00, 0xf0,
++ 0x90, 0xf0, 0x90, 0xf4, 0x84, 0x7c, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x45, 0x25, 0x3f, 0x00, 0x0f,
++ 0x19, 0x1f, 0x29, 0x2f, 0x49, 0x4b, 0x00, 0x00,
++ 0x40, 0x78, 0xc0, 0x78, 0x08, 0xf8, 0x40, 0x78,
++ 0x40, 0x78, 0x40, 0x78, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x1f, 0x10, 0x1f, 0x10,
++ 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x49, 0x4e, 0x48, 0x49,
++ 0x7e, 0x48, 0x43, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x88, 0xc8, 0x50, 0xe0, 0x20,
++ 0x70, 0xa8, 0x24, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x40, 0x01, 0x1e, 0x02,
++ 0x03, 0x7e, 0x02, 0x02, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x60, 0x80, 0x00, 0x00,
++ 0xfc, 0x00, 0x00, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x08, 0x08, 0x08, 0x0f,
++ 0x18, 0x68, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0x40, 0x7c, 0xc0,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x11, 0x1d,
++ 0x71, 0x11, 0x12, 0x12, 0x14, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x48, 0x40,
++ 0x20, 0x20, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x10, 0x11, 0x13,
++ 0x1d, 0x79, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x80, 0x80, 0xf8, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x22, 0x23, 0x02, 0x12,
++ 0x12, 0x12, 0x24, 0x24, 0x48, 0x50, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x48, 0x40,
++ 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x20, 0x17, 0x10, 0x47, 0x20, 0x27, 0x02, 0x13,
++ 0x16, 0x1b, 0x23, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x20, 0xf8,
++ 0x40, 0xf0, 0xf0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x7c, 0x10, 0x11, 0x16, 0x7c, 0x11,
++ 0x16, 0x10, 0x1b, 0x6c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0xc8, 0x48, 0xf0, 0x20,
++ 0x70, 0xa8, 0x24, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3c, 0x00, 0x3d,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0x40, 0x7c, 0xc0,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x13, 0x22, 0x5c, 0x08, 0x7f,
++ 0x08, 0x2b, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x54, 0xfc, 0x20, 0xf8, 0x20, 0xfc,
++ 0x50, 0xfc, 0x20, 0xf8, 0x20, 0x20, 0x00, 0x00,
++ 0x20, 0x17, 0x15, 0x47, 0x22, 0x23, 0x05, 0x1f,
++ 0x15, 0x17, 0x25, 0x21, 0x4e, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x50, 0xf0, 0x00, 0xf8, 0x08, 0xc8,
++ 0x48, 0xc8, 0x48, 0xe8, 0x28, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3f, 0x00, 0x3c,
++ 0x00, 0x3d, 0x26, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0xd0, 0x40, 0xfc, 0x40, 0x80,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x7f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xfc, 0x20, 0xe0, 0x20,
++ 0xe0, 0x38, 0xe0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x17, 0x15, 0x15, 0x15,
++ 0x15, 0x15, 0x15, 0x21, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xd0, 0x50, 0x50, 0x50,
++ 0x50, 0x50, 0xd4, 0x0c, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0x24, 0xa4, 0xa8, 0x20, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f,
++ 0x10, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0,
++ 0x10, 0x40, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x44, 0x44, 0x44, 0x44, 0x44,
++ 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0xf0, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x12, 0x33, 0x52, 0x12,
++ 0x12, 0x13, 0x12, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x23, 0x10, 0x17, 0x01, 0x00, 0x77, 0x10,
++ 0x13, 0x10, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xa0, 0xfc, 0x40,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x10, 0x10, 0x1f, 0x12,
++ 0x12, 0x12, 0x22, 0x22, 0x43, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x88,
++ 0x48, 0x50, 0x20, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x02, 0x7f, 0x06, 0x1a, 0x67, 0x0c, 0x17, 0x07,
++ 0x04, 0x07, 0x7f, 0x04, 0x02, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xb0, 0xfc, 0x80, 0xe0, 0xe0,
++ 0x80, 0xf0, 0xfc, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x01, 0x3c, 0x24, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3c, 0x24, 0x24, 0x24, 0x25, 0x4e, 0x00, 0x00,
++ 0x08, 0x88, 0x90, 0xf8, 0x08, 0x08, 0xf8, 0x68,
++ 0x60, 0x60, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3e, 0x02, 0x3e, 0x20, 0x22, 0x1e, 0x04,
++ 0x3f, 0x04, 0x7f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x80, 0x88, 0x78, 0x40,
++ 0xf8, 0x40, 0xfc, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3e, 0x22, 0x3e, 0x24, 0x3f,
++ 0x01, 0x3f, 0x08, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x30, 0x30, 0xc8, 0x04,
++ 0x00, 0xf8, 0x20, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x12, 0x12, 0x02, 0x02, 0x72, 0x12,
++ 0x12, 0x13, 0x12, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0xf8, 0x08, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x13, 0x3a, 0x36,
++ 0x37, 0x52, 0x52, 0x14, 0x14, 0x19, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xa8, 0xb8, 0xa8, 0xa8,
++ 0xb8, 0xa8, 0xa8, 0xc8, 0xc8, 0x98, 0x00, 0x00,
++ 0x04, 0x04, 0x08, 0x11, 0x01, 0x02, 0x04, 0x18,
++ 0x6f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x20, 0x10, 0x10, 0x00, 0x80, 0x40, 0x30,
++ 0xec, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x4b, 0x32, 0x12, 0x33, 0x4a, 0x0a, 0x1b,
++ 0x28, 0x4b, 0x08, 0x08, 0x3f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7f, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3b, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0xfc, 0x24, 0xf8, 0xf8, 0x20,
++ 0xf8, 0x08, 0xfc, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x10, 0x17, 0x78, 0x13, 0x1a, 0x37, 0x37,
++ 0x33, 0x50, 0x57, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0xa0, 0xf8, 0xb8, 0x18, 0xf8,
++ 0xf8, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x01, 0x3f, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x21, 0x00, 0x00,
++ 0x90, 0x90, 0xa0, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0a, 0x09, 0x09, 0x08, 0x7f,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x12, 0x09, 0x09, 0x1f, 0x11, 0x1f, 0x11, 0x11,
++ 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xf0, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x49, 0x4b, 0x4a, 0x4b, 0x48,
++ 0x4b, 0x78, 0x4f, 0x40, 0x03, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xf8, 0x48, 0xf8, 0x40,
++ 0xf8, 0x40, 0xfc, 0xa0, 0x18, 0x04, 0x00, 0x00,
++ 0x00, 0x11, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x11,
++ 0x15, 0x19, 0x61, 0x00, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x11, 0x15,
++ 0x19, 0x71, 0x11, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7c, 0x11, 0x12, 0x10, 0x1f,
++ 0x70, 0x11, 0x12, 0x14, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0xa8, 0xa0, 0x24, 0x5c, 0x40, 0xfc,
++ 0xe0, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x08,
++ 0x08, 0x0f, 0x08, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x20,
++ 0x20, 0xe0, 0x20, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x3e, 0x2b, 0x3e, 0x08,
++ 0x3e, 0x08, 0x7f, 0x14, 0x23, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x0a, 0x42, 0x24, 0x21, 0x06, 0x10,
++ 0x12, 0x12, 0x24, 0x21, 0x42, 0x4c, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xd0, 0xa0, 0x18, 0x44, 0x48,
++ 0x48, 0xd0, 0xa0, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x11, 0x0f, 0x09, 0x41, 0x21, 0x21, 0x01, 0x1f,
++ 0x14, 0x14, 0x25, 0x26, 0x47, 0x44, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0xfc,
++ 0xa0, 0xa4, 0x1c, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x1f, 0x00, 0x1f, 0x10, 0x10,
++ 0x14, 0x15, 0x29, 0x22, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0xf0, 0x00, 0xfc, 0x80, 0x88,
++ 0x88, 0x50, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x3f, 0x29, 0x49, 0x09, 0x7f,
++ 0x09, 0x08, 0x14, 0x12, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08,
++ 0x08, 0x90, 0x90, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x12, 0x12, 0x13, 0x7c, 0x0b, 0x48, 0x2b,
++ 0x2a, 0x32, 0x1e, 0x72, 0x02, 0x02, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x40, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x12, 0x09, 0x1f, 0x11,
++ 0x1f, 0x11, 0x1f, 0x01, 0x7f, 0x01, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0x10, 0x20, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x15, 0x0d, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2b, 0x49, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x00, 0xfc, 0x20, 0xa0,
++ 0xb8, 0xa0, 0xa0, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x7e, 0x24, 0x25, 0x3d, 0x26, 0x24, 0x3c,
++ 0x24, 0x26, 0x3c, 0x64, 0x05, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x48, 0x40, 0x40, 0x60,
++ 0x60, 0x60, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x25, 0x3d,
++ 0x25, 0x25, 0x25, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x09, 0x09, 0x1d, 0x23, 0x41, 0x0f,
++ 0x09, 0x09, 0x0f, 0x09, 0x01, 0x3e, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0xe0,
++ 0x20, 0x20, 0xe0, 0x20, 0xf0, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x7d, 0x02, 0x3a, 0x07, 0x39,
++ 0x05, 0x3b, 0x2a, 0x2b, 0x3c, 0x28, 0x00, 0x00,
++ 0x00, 0x0c, 0xf0, 0x10, 0x50, 0x50, 0x5c, 0x50,
++ 0x50, 0x50, 0xfc, 0x00, 0xc0, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x23, 0x5d, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x1b, 0x0d, 0x71, 0x00, 0x00,
++ 0x40, 0xb8, 0x28, 0x28, 0xe8, 0x4c, 0x04, 0xf8,
++ 0x48, 0x28, 0xf0, 0x10, 0x28, 0xc4, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x3f, 0x20, 0x24, 0x22,
++ 0x22, 0x20, 0x20, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x17, 0x13, 0x12, 0x7e, 0x12, 0x13, 0x11,
++ 0x15, 0x19, 0x61, 0x01, 0x00, 0x0f, 0x00, 0x00,
++ 0x40, 0xfc, 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x7a, 0x09, 0x0b, 0x7a, 0x4b, 0x42, 0x7b,
++ 0x48, 0x4f, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x88, 0x48, 0x10, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x04, 0x65, 0x55, 0x56, 0x44, 0x7f, 0x4c,
++ 0x4e, 0x55, 0x65, 0x44, 0x7f, 0x40, 0x00, 0x00,
++ 0x08, 0x10, 0x60, 0x40, 0x40, 0x7c, 0xc8, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x07, 0x7a, 0x49, 0x4b, 0x48, 0x7f, 0x48,
++ 0x49, 0x49, 0x7a, 0x4c, 0x09, 0x16, 0x00, 0x00,
++ 0x1c, 0xe4, 0x48, 0x30, 0xf8, 0x80, 0xfc, 0x80,
++ 0xf0, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x10, 0x17, 0x13, 0x7e, 0x12, 0x12, 0x3b, 0x35,
++ 0x35, 0x51, 0x51, 0x11, 0x10, 0x17, 0x00, 0x00,
++ 0x40, 0xfc, 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00,
++ 0x06, 0x38, 0x20, 0x20, 0x3c, 0x21, 0x22, 0x3d,
++ 0x20, 0x20, 0x3c, 0x60, 0x20, 0x23, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x94, 0x14, 0x0c, 0xf8,
++ 0x88, 0x90, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x1f,
++ 0x01, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf0,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x25, 0x24, 0x3c, 0x27, 0x00, 0x00,
++ 0x20, 0x28, 0xa8, 0xb0, 0x20, 0x50, 0x88, 0x24,
++ 0xa4, 0xa8, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x15, 0x35, 0x55, 0x15,
++ 0x15, 0x15, 0x15, 0x14, 0x17, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x3f, 0x28, 0x48, 0x08, 0x7f,
++ 0x08, 0x0c, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00, 0x00,
++ 0x00, 0x12, 0x12, 0x12, 0x7e, 0x13, 0x16, 0x12,
++ 0x12, 0x16, 0x1a, 0x62, 0x02, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x48, 0x78, 0xc8, 0x48, 0x48,
++ 0x48, 0x70, 0x40, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x7c, 0x04, 0x04, 0x3c, 0x24, 0x23, 0x3c,
++ 0x24, 0x24, 0x04, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa8, 0xb8, 0xe8, 0xa8, 0xa8,
++ 0xa8, 0xb8, 0xa0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x7e, 0x24, 0x24, 0x3c, 0x24, 0x25, 0x3d,
++ 0x25, 0x26, 0x3e, 0x64, 0x04, 0x04, 0x00, 0x00,
++ 0x20, 0x10, 0x10, 0x40, 0x40, 0x40, 0x48, 0x44,
++ 0x44, 0x44, 0x40, 0x48, 0x48, 0x38, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x24, 0x7f, 0x0c, 0x0a, 0x12,
++ 0x2f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x10, 0x0a, 0x0a, 0x42, 0x22, 0x23, 0x0e, 0x02,
++ 0x0a, 0x0a, 0x12, 0x12, 0x22, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x48, 0x78, 0xc8, 0x48, 0x48,
++ 0x48, 0x70, 0x40, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x4a, 0x2a, 0x2b, 0x0d, 0x19,
++ 0x2f, 0x49, 0x11, 0x12, 0x24, 0x48, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x00, 0xf8, 0x28, 0x28,
++ 0xe8, 0x28, 0x28, 0xb8, 0xa8, 0x00, 0x00, 0x00,
++ 0x02, 0x0c, 0x38, 0x09, 0x0b, 0x7f, 0x09, 0x1d,
++ 0x1b, 0x2b, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x90, 0x90, 0xa0, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x00, 0x7f, 0x07, 0x24,
++ 0x27, 0x27, 0x24, 0x27, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x80, 0xfc, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x14, 0x23, 0x7f, 0x0a, 0x08,
++ 0x3e, 0x08, 0x08, 0x0e, 0x71, 0x06, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x56, 0x56, 0x54, 0x7f,
++ 0x50, 0x18, 0x15, 0x1f, 0x62, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x38, 0xe8, 0xa8, 0xa8, 0xa8, 0xe8,
++ 0xa8, 0xa8, 0x68, 0x78, 0x28, 0x00, 0x00, 0x00,
++ 0x00, 0x27, 0x14, 0x17, 0x05, 0x04, 0x77, 0x14,
++ 0x15, 0x14, 0x1b, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x10, 0xa0, 0xf8, 0x40,
++ 0xf0, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3f, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x20, 0xa0, 0xa8, 0xb8, 0xe8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xb8, 0xa0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x7e, 0x08, 0x0e, 0x71,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x10, 0xf0, 0x90, 0xd4, 0x2c,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x1c, 0x05, 0x03, 0x7e,
++ 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0xc0, 0x20, 0xf0, 0x08,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x1f, 0x14, 0x25, 0x44,
++ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x90, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x14, 0x23, 0x42, 0x7f, 0x11,
++ 0x11, 0x11, 0x1e, 0x72, 0x04, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x10, 0xf0, 0x10,
++ 0x90, 0x50, 0x50, 0x14, 0x14, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x7f, 0x02, 0x0c, 0x03, 0x7f,
++ 0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x40, 0xc0, 0x30, 0xc8,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x27, 0x10, 0x11, 0x0e, 0x01, 0x76, 0x10,
++ 0x13, 0x1c, 0x10, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x88, 0xc8, 0x50, 0x60, 0xd0,
++ 0x48, 0x44, 0x44, 0x80, 0x00, 0xfc, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x08, 0x08, 0x7e, 0x09, 0x1d,
++ 0x1a, 0x2a, 0x48, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0xa0, 0xf8, 0xa0, 0x20, 0xfc,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x44, 0x08, 0x3f, 0x02, 0x04,
++ 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x90, 0x70, 0xf8, 0x40, 0x70,
++ 0x88, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x02, 0x04, 0x19, 0x61,
++ 0x1f, 0x01, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x80, 0x40, 0x30, 0x0c,
++ 0xf0, 0x00, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x11, 0x78, 0x2b, 0x2a, 0x2b,
++ 0x2a, 0x7a, 0x5a, 0x16, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0xf8, 0x48, 0xf8,
++ 0x48, 0xe8, 0xa8, 0xe8, 0xa8, 0x18, 0x00, 0x00,
++ 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x0f, 0x0c,
++ 0x17, 0x14, 0x27, 0x44, 0x07, 0x04, 0x00, 0x00,
++ 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x3f, 0x21, 0x21, 0x21, 0x21,
++ 0x3f, 0x21, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08,
++ 0xf8, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x14, 0x34, 0x54, 0x14,
++ 0x17, 0x14, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x44, 0x44, 0x44, 0x44,
++ 0xfc, 0x44, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x41, 0x01, 0x1f, 0x11,
++ 0x11, 0x1f, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x11, 0x11, 0x11, 0x1f, 0x11,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x13, 0x12, 0x12, 0x1e,
++ 0x73, 0x12, 0x12, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x17, 0x14,
++ 0x27, 0x44, 0x07, 0x00, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x90, 0x40, 0xe0, 0x50,
++ 0xc8, 0x44, 0xc0, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x18, 0x1c, 0x1b,
++ 0x2a, 0x28, 0x48, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x80, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x20, 0x20, 0x00, 0x13,
++ 0x10, 0x10, 0x20, 0x20, 0x4f, 0x40, 0x00, 0x00,
++ 0x80, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x11, 0x11, 0x11, 0x1f,
++ 0x11, 0x01, 0x01, 0x01, 0x7e, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0,
++ 0x10, 0x20, 0x10, 0xf8, 0x04, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x1f, 0x11,
++ 0x03, 0x0c, 0x74, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0x08, 0xb0, 0xc0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x00, 0x3c, 0x00, 0x3f,
++ 0x00, 0x3c, 0x24, 0x24, 0x3f, 0x20, 0x00, 0x00,
++ 0x80, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x08, 0x88, 0x08, 0x08, 0xfc, 0x08, 0x48, 0x28,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x09, 0x7e,
++ 0x09, 0x2a, 0x1c, 0x19, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x48,
++ 0xfc, 0x48, 0xa8, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3f, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x43, 0x0c, 0x00, 0x00,
++ 0x40, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20, 0xf8,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x17, 0x13, 0x39, 0x34,
++ 0x37, 0x50, 0x50, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x58, 0x58, 0xf0, 0x00,
++ 0xfc, 0x80, 0xf0, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x20, 0x1f, 0x12, 0x42, 0x26, 0x2a, 0x03, 0x17,
++ 0x1b, 0x22, 0x26, 0x5a, 0x42, 0x4c, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x28, 0xb0, 0xfc, 0x20, 0x78,
++ 0xc8, 0xf8, 0xc8, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x04, 0x44, 0x2b, 0x10, 0x30, 0x4f, 0x08, 0x19,
++ 0x2b, 0x4d, 0x09, 0x09, 0x31, 0x11, 0x00, 0x00,
++ 0x80, 0x88, 0xf8, 0x90, 0xa0, 0xfc, 0x80, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x3f, 0x20, 0x40,
++ 0x7f, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x08, 0x00,
++ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x7f, 0x09, 0x01, 0x1f, 0x01, 0x7f, 0x01,
++ 0x07, 0x1c, 0x67, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0x08, 0xf0, 0x20, 0xfc, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x3e, 0x24, 0x3d, 0x24,
++ 0x24, 0x3c, 0x18, 0x14, 0x24, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x00, 0x00, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x24, 0x14, 0x14, 0x04, 0x06,
++ 0x0c, 0x78, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0x90, 0x90, 0xa0, 0xc0, 0x80, 0xa0,
++ 0x90, 0x90, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x07, 0x44, 0x24, 0x27, 0x04, 0x17, 0x14,
++ 0x25, 0x25, 0x45, 0x49, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xe8, 0x88, 0xf8, 0x08,
++ 0xe8, 0x28, 0xe8, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x49, 0x49, 0x49, 0x49, 0x48,
++ 0x4f, 0x78, 0x49, 0x46, 0x18, 0x00, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x70, 0x00, 0xf8, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x01, 0x3f, 0x28, 0x7f, 0x14, 0x7f, 0x00, 0x3e,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x26, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x78, 0x40, 0x78, 0x08, 0x78,
++ 0x40, 0x78, 0x78, 0x7c, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x54, 0x54, 0x54, 0x55,
++ 0x55, 0x5d, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x40, 0x40, 0x40, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x55, 0x55, 0x55, 0x57,
++ 0x55, 0x5d, 0x51, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xfc,
++ 0x48, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x20, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x00, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x02, 0x3f, 0x22, 0x22, 0x3f,
++ 0x22, 0x22, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0xf8,
++ 0x08, 0x08, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x79, 0x09, 0x09, 0x79, 0x49, 0x41, 0x7f,
++ 0x49, 0x49, 0x09, 0x09, 0x11, 0x66, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xfc,
++ 0x48, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x2e, 0x24, 0x3f, 0x20,
++ 0x2e, 0x2a, 0x2a, 0x2e, 0x2a, 0x41, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xa0, 0xc8, 0x88, 0x90, 0x90,
++ 0xa4, 0x84, 0x88, 0x88, 0x90, 0xa0, 0x00, 0x00,
++ 0x12, 0x1a, 0x2a, 0x4a, 0x1f, 0x10, 0x2f, 0x62,
++ 0x22, 0x2f, 0x22, 0x23, 0x2c, 0x20, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa0, 0xfc, 0x48, 0xc8, 0x28,
++ 0x28, 0xb0, 0x10, 0xb0, 0x48, 0x84, 0x00, 0x00,
++ 0x22, 0x2a, 0x4f, 0x10, 0x3f, 0x52, 0x17, 0x13,
++ 0x1c, 0x01, 0x14, 0x14, 0x24, 0x43, 0x00, 0x00,
++ 0x20, 0xa0, 0xbc, 0x48, 0xa8, 0x28, 0x90, 0xb0,
++ 0x48, 0x04, 0x90, 0x88, 0x24, 0xe4, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7e, 0x11, 0x11, 0x10, 0x1d,
++ 0x72, 0x14, 0x11, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa8, 0xa8, 0xb0, 0xa0, 0xb0, 0xa8,
++ 0xa4, 0xa4, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x55, 0x7d, 0x54, 0x7f,
++ 0x55, 0x53, 0x14, 0x11, 0x12, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0x28, 0x48, 0xb0, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x22, 0x3e, 0x22,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x42, 0x2f, 0x29, 0x0f, 0x19,
++ 0x1f, 0x22, 0x3f, 0x42, 0x42, 0x43, 0x00, 0x00,
++ 0x00, 0x78, 0xc8, 0x48, 0x48, 0x78, 0x48, 0x48,
++ 0x78, 0x48, 0xc8, 0x48, 0x88, 0x18, 0x00, 0x00,
++ 0x29, 0x29, 0x2b, 0x29, 0x3d, 0x21, 0x21, 0x39,
++ 0x28, 0x2f, 0x28, 0x29, 0x2e, 0x48, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x50, 0x70, 0x00, 0xf8,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x24, 0x3f, 0x24, 0x24,
++ 0x24, 0x3f, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0xfc, 0x90, 0x90, 0x90, 0x90, 0x90,
++ 0x90, 0x90, 0x90, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x4a, 0x79, 0x49, 0x48, 0x79,
++ 0x4e, 0x48, 0x79, 0x49, 0x42, 0x04, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa8, 0xa8, 0xb0, 0xa0, 0xb0, 0xa8,
++ 0xa4, 0xa4, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x7c, 0x2b, 0x28, 0x3b, 0x2a, 0x2a, 0x3b,
++ 0x2a, 0x2c, 0x3a, 0x6a, 0x0c, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0x48, 0xa0, 0xa8, 0x84, 0x94, 0x70, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x24, 0x3f,
++ 0x24, 0x24, 0x24, 0x24, 0x24, 0x4f, 0x00, 0x00,
++ 0x00, 0xf8, 0x80, 0xf0, 0x80, 0xf0, 0x80, 0xfc,
++ 0xc8, 0xa8, 0x90, 0xb0, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x25, 0x3d, 0x24, 0x27,
++ 0x3d, 0x25, 0x26, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0x28, 0x48, 0xb0, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0d, 0x0a, 0x0e, 0x73, 0x00, 0x00, 0x00,
++ 0xa8, 0xa8, 0xfc, 0xa8, 0xa8, 0xb8, 0x80, 0xfc,
++ 0x20, 0xfc, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x3d, 0x01, 0x7f, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x26, 0x3e, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8, 0x08,
++ 0xe8, 0xa8, 0xa8, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x3d, 0x03, 0x7d, 0x01, 0x3d, 0x01, 0x3d,
++ 0x00, 0x3f, 0x24, 0x25, 0x3e, 0x24, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x50, 0x70, 0x00, 0xf8,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x08, 0x09, 0x3e, 0x08, 0x08, 0x7e, 0x09, 0x28,
++ 0x2e, 0x28, 0x38, 0x28, 0x46, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x88, 0xb0, 0x00, 0xf8,
++ 0x88, 0x88, 0xf8, 0x88, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x26, 0x3d, 0x09, 0x28, 0x2d,
++ 0x2a, 0x28, 0x2d, 0x39, 0x62, 0x04, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa8, 0xa8, 0xb0, 0xa0, 0xb0, 0xa8,
++ 0xa4, 0xa4, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x13, 0x22, 0x5c, 0x08, 0x7e,
++ 0x09, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x50, 0x50, 0x50, 0x54, 0xd4, 0xd8, 0x50, 0xd8,
++ 0x54, 0x54, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x7f,
++ 0x09, 0x08, 0x08, 0x08, 0x0f, 0x70, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xfc,
++ 0x10, 0x90, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11,
++ 0x11, 0x11, 0x11, 0x10, 0x33, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x0f,
++ 0x08, 0x0f, 0x29, 0x24, 0x24, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xfc,
++ 0x00, 0xfc, 0x24, 0x94, 0x04, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x2a, 0x2a, 0x3e,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x17, 0x11, 0x1d,
++ 0x72, 0x14, 0x10, 0x10, 0x11, 0x3e, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x40, 0x40, 0xfc, 0x50, 0x48,
++ 0x54, 0xd4, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x00, 0x27, 0x24, 0x27, 0x24,
++ 0x27, 0x24, 0x27, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x3d, 0x24, 0x24, 0x3f, 0x24, 0x24, 0x3f,
++ 0x24, 0x24, 0x24, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x08, 0x08, 0x90, 0xa0, 0xf8, 0x40, 0x40, 0xfc,
++ 0x40, 0xa0, 0x90, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x23, 0x22, 0x04, 0x10,
++ 0x10, 0x20, 0x20, 0x41, 0x42, 0x44, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x48, 0x40, 0x60,
++ 0x60, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x10, 0x11, 0x12, 0x7c, 0x13,
++ 0x10, 0x11, 0x1c, 0x60, 0x00, 0x07, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0x48, 0x84, 0x20,
++ 0x40, 0x88, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x04, 0x19, 0x77, 0x10, 0x13, 0x1f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x30, 0xc0, 0xfc, 0x40, 0xf8, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1d, 0x18, 0x0e, 0x71, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0xfc, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x28, 0x2b, 0x32, 0x2b, 0x26,
++ 0x27, 0x24, 0x39, 0x22, 0x24, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x40, 0x27, 0x20, 0x03, 0x10,
++ 0x13, 0x10, 0x27, 0x20, 0x40, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0x40,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x3c, 0x2b, 0x30, 0x2f, 0x24, 0x27, 0x38,
++ 0x23, 0x21, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0xc8, 0x68, 0xb0, 0x70, 0xa8,
++ 0x24, 0xc0, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x1b, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x90, 0x90, 0xa0, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x7d, 0x10, 0x10, 0x3b, 0x35,
++ 0x35, 0x51, 0x51, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x10, 0x20, 0x78, 0x48, 0x48, 0x78, 0x40, 0x78,
++ 0x48, 0x48, 0x78, 0x48, 0x80, 0x7c, 0x00, 0x00,
++ 0x00, 0x20, 0x13, 0x12, 0x02, 0x03, 0x72, 0x13,
++ 0x12, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0x10, 0xf0, 0x00, 0xf0,
++ 0x10, 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x12, 0x19, 0x25, 0x24, 0x78, 0x13, 0x7d,
++ 0x11, 0x55, 0x39, 0x31, 0x1e, 0x64, 0x00, 0x00,
++ 0x10, 0x20, 0x78, 0x48, 0x48, 0x78, 0x40, 0x78,
++ 0x48, 0x48, 0x78, 0x48, 0x80, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2b, 0x29, 0x08, 0x1b,
++ 0x2a, 0x4b, 0x12, 0x13, 0x22, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf0, 0x20, 0xc0, 0xf8,
++ 0x48, 0xf8, 0x48, 0xf8, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x27, 0x11, 0x10, 0x03, 0x02, 0x73, 0x12,
++ 0x13, 0x12, 0x12, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0xc0, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x48, 0x48, 0x58, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x17, 0x7c, 0x11, 0x16, 0x10,
++ 0x13, 0x1c, 0x61, 0x06, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf8, 0x40, 0xc8, 0x68, 0xb0,
++ 0x30, 0x68, 0xa4, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x08, 0x1c, 0x1b, 0x1b,
++ 0x29, 0x29, 0x49, 0x0b, 0x0a, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xc8, 0xa8, 0x88, 0xfc, 0x08,
++ 0x48, 0x28, 0x08, 0xfc, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x12, 0x13, 0x1e,
++ 0x72, 0x12, 0x13, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x48, 0x48, 0xf8, 0x48,
++ 0x68, 0x58, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x7f, 0x12, 0x1a, 0x37, 0x36,
++ 0x32, 0x53, 0x52, 0x14, 0x14, 0x19, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0xc8, 0x78, 0x48, 0xf8, 0x48,
++ 0x48, 0x78, 0xb0, 0xb4, 0x54, 0x8c, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x12, 0x32, 0x53, 0x12,
++ 0x12, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0xf8, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x41, 0x20, 0x27, 0x01, 0x11,
++ 0x11, 0x11, 0x21, 0x21, 0x41, 0x46, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7e, 0x08, 0x18, 0x1c, 0x1a,
++ 0x2b, 0x29, 0x4a, 0x0c, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x80, 0xf8, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x10, 0x00, 0x07, 0x70, 0x10,
++ 0x10, 0x10, 0x10, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x00, 0xfc, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x0f, 0x08, 0x0f, 0x29, 0x24, 0x40, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0xfc, 0x00, 0xfc, 0x24, 0x94, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x65, 0x18, 0x11, 0x2a, 0x7f,
++ 0x1a, 0x35, 0x34, 0x31, 0x52, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xb0, 0x90, 0x68, 0x48, 0xf8,
++ 0x48, 0x68, 0xb0, 0x90, 0x28, 0x44, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x13, 0x22, 0x5c, 0x08, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xdc, 0x54, 0xdc, 0x00, 0xf8, 0x00, 0xfc,
++ 0x40, 0x78, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x11, 0x18, 0x37, 0x35,
++ 0x33, 0x55, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xf0, 0xa0, 0xfc, 0x10,
++ 0xf8, 0x14, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x20, 0x2f, 0x03, 0x12,
++ 0x13, 0x13, 0x22, 0x23, 0x43, 0x4c, 0x00, 0x00,
++ 0x80, 0xf0, 0x90, 0xf0, 0x80, 0xfc, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x10, 0x08, 0x00, 0x00,
++ 0x00, 0x17, 0x10, 0x12, 0x7d, 0x11, 0x10, 0x17,
++ 0x10, 0x1c, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x48, 0x48, 0x50, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x00, 0x3f, 0x22, 0x5f,
++ 0x12, 0x1f, 0x12, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xfc, 0x88, 0xf0,
++ 0x90, 0xf0, 0x90, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x13, 0x7f, 0x2b, 0x28, 0x2f,
++ 0x28, 0x73, 0x5a, 0x16, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x58, 0x58, 0x40, 0xfc,
++ 0x40, 0xf8, 0xa8, 0xa8, 0xa8, 0xb8, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x64, 0x1b, 0x1a, 0x26, 0x7e,
++ 0x13, 0x1a, 0x36, 0x36, 0x53, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x09, 0x09, 0x09, 0x09, 0x09,
++ 0x09, 0x09, 0x11, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x10, 0xe0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x10, 0x10, 0x10, 0x08, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x11, 0x01, 0x3f,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x78, 0x88, 0x88, 0x48, 0x28,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x7f, 0x52, 0x14, 0x28, 0x3e, 0x68,
++ 0x3e, 0x28, 0x3e, 0x29, 0x3f, 0x22, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f, 0x00, 0x3f,
++ 0x20, 0x5f, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xfc,
++ 0x08, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x12, 0x33, 0x52, 0x12,
++ 0x12, 0x13, 0x1c, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0x40, 0x40, 0xfc, 0x20, 0x20,
++ 0x20, 0x90, 0x14, 0x0c, 0xfc, 0x04, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x11, 0x11, 0x31, 0x50, 0x17,
++ 0x14, 0x1b, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x08, 0xf8, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x10, 0x13, 0x32, 0x53, 0x12,
++ 0x13, 0x12, 0x13, 0x11, 0x16, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x80, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x20, 0x10, 0x08, 0x00, 0x00,
++ 0x22, 0x12, 0x14, 0x7f, 0x09, 0x7f, 0x48, 0x7f,
++ 0x59, 0x19, 0x2e, 0x48, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x1f, 0x10, 0x1f, 0x10,
++ 0x1f, 0x10, 0x1f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x00, 0x3f, 0x01,
++ 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x00, 0xf8, 0x00,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x11, 0x11, 0x11, 0x7d, 0x11, 0x10, 0x17,
++ 0x10, 0x1e, 0x62, 0x03, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x40, 0x78, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x40, 0x3f, 0x01, 0x09,
++ 0x09, 0x09, 0x09, 0x15, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xf8, 0x00, 0x00,
++ 0xf0, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x08, 0x04, 0x3f, 0x21, 0x5f,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x20, 0x40, 0xfc, 0x08, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x13, 0x12, 0x12, 0x13,
++ 0x12, 0x12, 0x13, 0x1c, 0x27, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x30, 0xc0, 0x40, 0x40, 0xfc,
++ 0x20, 0x20, 0x90, 0x14, 0xec, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x1e, 0x12, 0x14, 0x1f,
++ 0x12, 0x1a, 0x14, 0x26, 0x29, 0x50, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x18, 0xe0, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0xf8, 0x00, 0x80, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x08, 0x10, 0x10, 0x3f, 0x08,
++ 0x48, 0x28, 0x13, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x40, 0xf8, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x3f, 0x01, 0x3f, 0x21, 0x3f,
++ 0x23, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x08, 0x08, 0x08, 0x70, 0x00, 0x00, 0x00, 0x00,
++ 0x11, 0x10, 0x10, 0x1b, 0x34, 0x37, 0x32, 0x53,
++ 0x12, 0x10, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xf8, 0x48, 0xf8, 0x40, 0xfc,
++ 0xc4, 0xc4, 0x44, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x11, 0x1d,
++ 0x71, 0x11, 0x16, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0xd0, 0x14, 0x0c, 0xfc, 0x04, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x7a, 0x12, 0x17, 0x11, 0x1d,
++ 0x75, 0x12, 0x12, 0x15, 0x18, 0x30, 0x00, 0x00,
++ 0x00, 0x18, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0xf8, 0x00, 0xc0, 0x3c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x10, 0x1f,
++ 0x70, 0x12, 0x12, 0x13, 0x14, 0x38, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x40, 0x78, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x09, 0x08, 0x08, 0x7f, 0x08, 0x1b, 0x1e, 0x1b,
++ 0x2a, 0x28, 0x49, 0x0a, 0x0c, 0x08, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xf8, 0x48, 0xf8, 0x40, 0xfc,
++ 0xc4, 0xc4, 0x44, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x40, 0x20, 0x20, 0x00, 0x08,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x11, 0x12, 0x3f, 0x24, 0x64,
++ 0x24, 0x24, 0x3c, 0x25, 0x22, 0x04, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x00, 0xfc, 0x20, 0xa0,
++ 0xb8, 0xa0, 0xa0, 0xa0, 0x60, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x09, 0x09, 0x11, 0x19,
++ 0x35, 0x55, 0x11, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x40, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x02, 0x0d, 0x39, 0x09, 0x09, 0x7e, 0x09, 0x1c,
++ 0x1a, 0x2b, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x00, 0xf8, 0x40,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x65, 0x28, 0x1b, 0x22, 0x7c,
++ 0x13, 0x3a, 0x36, 0x36, 0x52, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0xfc, 0x48, 0x40,
++ 0xf8, 0x48, 0x48, 0x48, 0x58, 0x40, 0x00, 0x00,
++ 0x08, 0x13, 0x3c, 0x25, 0x35, 0x2f, 0x2c, 0x7e,
++ 0x26, 0x2d, 0x2d, 0x2e, 0x24, 0x4c, 0x00, 0x00,
++ 0x00, 0x8c, 0xf0, 0x10, 0x10, 0x90, 0xfc, 0x90,
++ 0x90, 0x10, 0x7c, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3d, 0x01, 0x3e,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x50, 0xfc, 0x24, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xb8, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x23, 0x22, 0x3e, 0x29, 0x09, 0x2f,
++ 0x28, 0x28, 0x28, 0x2e, 0x38, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x50, 0xfc, 0x28, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xb8, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x27, 0x14, 0x17, 0x04, 0x07, 0x04, 0x77,
++ 0x1a, 0x1a, 0x12, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xfc, 0x40, 0xfc, 0x40, 0xf8,
++ 0x48, 0x48, 0x70, 0x40, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x3c, 0x24, 0x24, 0x24, 0x3f, 0x24, 0x24,
++ 0x22, 0x3a, 0x61, 0x00, 0x7e, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0x50, 0xe0, 0x50, 0x48,
++ 0x44, 0xc4, 0xe4, 0xd8, 0x40, 0x40, 0x00, 0x00,
++ 0x11, 0x0a, 0x7f, 0x0c, 0x3f, 0x2f, 0x33, 0x3f,
++ 0x3f, 0x04, 0x7f, 0x0a, 0x11, 0x20, 0x00, 0x00,
++ 0x00, 0x78, 0xc8, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x44, 0x44, 0xe4, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x07, 0x24, 0x27, 0x27, 0x24, 0x27, 0x3e,
++ 0x02, 0x7e, 0x12, 0x12, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xc0, 0x48, 0xc8, 0xc8, 0x48, 0xc8, 0xf8,
++ 0x80, 0xfc, 0x90, 0x90, 0x90, 0x90, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x23, 0x22, 0x02, 0x02,
++ 0x12, 0x12, 0x24, 0x24, 0x48, 0x50, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x88, 0x80, 0x98,
++ 0xe0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7d, 0x10, 0x13, 0x12, 0x1f,
++ 0x72, 0x12, 0x12, 0x12, 0x12, 0x32, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0xf8, 0x48, 0xf8,
++ 0x48, 0xe8, 0xa8, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x10, 0x17, 0x11, 0x1f,
++ 0x76, 0x13, 0x13, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x20, 0xf8,
++ 0x40, 0xf0, 0xf0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x22, 0x14, 0x7f, 0x49, 0x7f,
++ 0x49, 0x5d, 0x55, 0x5d, 0x41, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x7c, 0x90, 0x90, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x42, 0x21, 0x27, 0x04, 0x17,
++ 0x14, 0x15, 0x25, 0x25, 0x45, 0x44, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x20, 0xf8, 0x88, 0xf8,
++ 0x88, 0xe8, 0x28, 0xe8, 0x28, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x7c, 0x45, 0x45, 0x46, 0x7c,
++ 0x44, 0x44, 0x44, 0x7c, 0x40, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0x08, 0x88, 0x48,
++ 0x48, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x14, 0x23, 0x41, 0x1f, 0x11,
++ 0x11, 0x1f, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x20, 0x17, 0x10, 0x03, 0x02, 0x73, 0x12,
++ 0x12, 0x12, 0x12, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0xf8, 0x48, 0xf8, 0x48,
++ 0xe8, 0xa8, 0xe8, 0x18, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x1b, 0x25, 0x24, 0x7b, 0x12, 0x7f,
++ 0x12, 0x56, 0x3a, 0x32, 0x1e, 0x62, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0xf8, 0x48, 0xf8,
++ 0x48, 0xe8, 0xa8, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x40, 0x27, 0x24, 0x07, 0x10,
++ 0x14, 0x13, 0x22, 0x24, 0x40, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x40, 0xf8, 0x88,
++ 0xc8, 0xb8, 0xa8, 0xc8, 0x88, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x0e, 0x78, 0x09, 0x1a,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0xfc, 0x90, 0x90, 0x10, 0x10,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x11, 0x11, 0x2f, 0x4b, 0x0a, 0x1f, 0x10, 0x37,
++ 0x54, 0x17, 0x14, 0x17, 0x14, 0x15, 0x00, 0x00,
++ 0x20, 0x20, 0xe0, 0x20, 0xfc, 0xc8, 0x48, 0xa8,
++ 0xa8, 0xb0, 0x90, 0xb0, 0xc8, 0x84, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x7b, 0x12, 0x1f, 0x10, 0x1f,
++ 0x74, 0x17, 0x14, 0x17, 0x14, 0x35, 0x00, 0x00,
++ 0x20, 0x20, 0xe0, 0x20, 0xfc, 0xc8, 0x48, 0xa8,
++ 0xa8, 0xb0, 0x90, 0xb0, 0xc8, 0x84, 0x00, 0x00,
++ 0x11, 0x11, 0x7f, 0x11, 0x7e, 0x57, 0x7c, 0x57,
++ 0x7e, 0x13, 0x7e, 0x13, 0x12, 0x12, 0x00, 0x00,
++ 0x20, 0x20, 0xe0, 0x20, 0xbc, 0xc8, 0x68, 0xa8,
++ 0xa8, 0x90, 0x90, 0xb0, 0xc8, 0x84, 0x00, 0x00,
++ 0x00, 0x22, 0x12, 0x13, 0x04, 0x08, 0x7f, 0x10,
++ 0x10, 0x11, 0x12, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0xc0,
++ 0xa0, 0x10, 0x08, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x09, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0xa0, 0xf8, 0xa0, 0x20, 0xfc,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x1f, 0x12, 0x12, 0x1f, 0x12,
++ 0x12, 0x7f, 0x00, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf0, 0x90, 0x90, 0xf0, 0x90,
++ 0x90, 0xfc, 0x00, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x10, 0x17, 0x10, 0x7d, 0x11, 0x11, 0x11,
++ 0x11, 0x1d, 0x61, 0x07, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xfc, 0x90, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x01, 0x3f, 0x01, 0x03,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x80,
++ 0x80, 0x40, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x12, 0x12, 0x1f, 0x12,
++ 0x1f, 0x12, 0x12, 0x22, 0x23, 0x5c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x48, 0x40, 0xf8, 0x40,
++ 0xfc, 0x48, 0x50, 0x20, 0x90, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x17, 0x14, 0x24, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0x80, 0xfc, 0x80, 0x80,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x47, 0x20, 0x21, 0x02, 0x14,
++ 0x12, 0x12, 0x24, 0x28, 0x40, 0x41, 0x00, 0x00,
++ 0x38, 0xc0, 0x40, 0xfc, 0xa0, 0x10, 0x88, 0x84,
++ 0xd0, 0xa8, 0xa4, 0xa4, 0x80, 0x80, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x66, 0x2a, 0x1a, 0x26, 0x7e,
++ 0x13, 0x3a, 0x37, 0x36, 0x52, 0x15, 0x00, 0x00,
++ 0x20, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0xf8,
++ 0xfc, 0xb4, 0x2c, 0xf8, 0x20, 0xfc, 0x00, 0x00,
++ 0x06, 0x38, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x08,
++ 0x3e, 0x22, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x88, 0x88, 0x88, 0x88, 0xfc, 0x88, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x3e, 0x22,
++ 0x22, 0x3e, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x3c, 0x20, 0x20, 0x20, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x20, 0x50, 0x48, 0x78, 0xc4, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x08, 0x3e, 0x22, 0x3e, 0x3e,
++ 0x22, 0x3e, 0x7f, 0x0c, 0x12, 0x63, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x0f, 0x08, 0x08, 0x08,
++ 0x0f, 0x08, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xe0, 0x20, 0x20, 0x20,
++ 0xe0, 0x20, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x10, 0x10, 0x37, 0x50, 0x10,
++ 0x10, 0x11, 0x11, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x80, 0x80,
++ 0xa0, 0x10, 0x08, 0x38, 0xc4, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x3f, 0x2a, 0x2a, 0x3f,
++ 0x2a, 0x3f, 0x2c, 0x4a, 0x52, 0x23, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x50, 0x54, 0x94, 0x8c, 0xf8,
++ 0x48, 0x50, 0x30, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x20, 0x1f, 0x18, 0x08, 0x4f, 0x2a, 0x2a, 0x0f,
++ 0x1a, 0x1a, 0x2f, 0x2b, 0x54, 0x48, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xa8, 0xac, 0xc4, 0xfc,
++ 0xa8, 0xa8, 0xd0, 0x30, 0xc8, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x21, 0x21, 0x3f, 0x21,
++ 0x21, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08,
++ 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x1f,
++ 0x11, 0x1f, 0x11, 0x1f, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x70, 0x70, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf4, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x01, 0x1f, 0x11, 0x11, 0x1f,
++ 0x13, 0x03, 0x05, 0x09, 0x11, 0x60, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0x40, 0x20, 0x24, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x48, 0x4b, 0x48, 0x48, 0x48,
++ 0x48, 0x78, 0x48, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x10, 0x7c, 0x17, 0x10, 0x11,
++ 0x17, 0x1d, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x48, 0xf8, 0x50, 0x60, 0xfc, 0x40, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x30, 0x08, 0x61, 0x17, 0x00, 0x0f, 0x11, 0x26,
++ 0x21, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0xa0, 0x10, 0xfc, 0x40, 0xfc, 0x50, 0x48,
++ 0xc0, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x25, 0x06, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x40, 0x40, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x17, 0x10, 0x1f,
++ 0x11, 0x17, 0x19, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x88, 0xf0, 0xa0, 0xfc,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x23, 0x48, 0x08, 0x17, 0x10, 0x32,
++ 0x52, 0x12, 0x12, 0x15, 0x18, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x78, 0x40, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x00, 0x0c, 0x02, 0x00, 0x18, 0x04, 0x00, 0x00,
++ 0x07, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7c,
++ 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x19, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x44, 0x27, 0x24, 0x04, 0x14,
++ 0x17, 0x15, 0x24, 0x28, 0x49, 0x56, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x90, 0xfc, 0x90, 0xf0, 0x00,
++ 0xf8, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x0e, 0x02, 0x24, 0x14, 0x08, 0x1f, 0x20, 0x4f,
++ 0x08, 0x0f, 0x04, 0x04, 0x3f, 0x00, 0x00, 0x00,
++ 0x90, 0x90, 0x64, 0x44, 0x28, 0xf0, 0x08, 0xe4,
++ 0x20, 0xe0, 0x40, 0x80, 0xf8, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x07, 0x18, 0x7f, 0x11,
++ 0x11, 0x1f, 0x13, 0x05, 0x19, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xe0, 0x80, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x44, 0x24, 0xfc, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x3c, 0x27, 0x3c, 0x24,
++ 0x25, 0x3e, 0x18, 0x14, 0x24, 0x40, 0x00, 0x00,
++ 0x40, 0x48, 0xf8, 0x50, 0x50, 0xfc, 0x40, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x20, 0x11, 0x11, 0x02, 0x0f, 0x70, 0x1f,
++ 0x12, 0x12, 0x14, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0x80, 0x40, 0x20, 0x10, 0xf8, 0x84, 0xf8,
++ 0xa0, 0x90, 0x88, 0x88, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x09, 0x0a, 0x7f, 0x08, 0x1f,
++ 0x31, 0x5f, 0x11, 0x11, 0x1f, 0x11, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0x50, 0xe0, 0x50, 0x48,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x23, 0x7d, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x1a, 0x0e, 0x75, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0xfc, 0x50, 0x70, 0x00,
++ 0xf8, 0x48, 0x50, 0x20, 0x50, 0x8c, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x11, 0x11, 0x21, 0x3d, 0x65,
++ 0x25, 0x25, 0x27, 0x3c, 0x25, 0x00, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x10, 0xd0, 0x14, 0x0c, 0xfc, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x11, 0x11, 0x3d, 0x25, 0x65,
++ 0x25, 0x25, 0x3e, 0x22, 0x24, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xfc, 0x20, 0x20, 0x38,
++ 0x28, 0x28, 0x48, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x7e, 0x12, 0x12, 0x3c, 0x06, 0x19,
++ 0x61, 0x3f, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x48, 0x50, 0x20, 0xd0, 0x0c,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xe0, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x1f, 0x12, 0x13, 0x10,
++ 0x17, 0x12, 0x11, 0x20, 0x23, 0x5c, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0xfc, 0x20, 0xe0, 0x00,
++ 0xf0, 0x20, 0x40, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x3f, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x11, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x48, 0x50, 0x50,
++ 0x20, 0x20, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x12, 0x12, 0x3c, 0x04, 0x1b,
++ 0x61, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x08, 0x0f, 0x09, 0x11, 0x12, 0x3f, 0x51, 0x11,
++ 0x17, 0x11, 0x11, 0x11, 0x1e, 0x10, 0x00, 0x00,
++ 0x08, 0xe8, 0x28, 0xa8, 0x68, 0xe8, 0x28, 0x28,
++ 0xe8, 0x28, 0x28, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x11, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x08,
++ 0x0f, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0x20,
++ 0xe0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x01, 0x03, 0x0c, 0x32, 0x01, 0x03, 0x0c,
++ 0x73, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x20, 0x40, 0x80, 0x40, 0x30,
++ 0x0c, 0x80, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x27, 0x10, 0x13, 0x02, 0x0b, 0x0a,
++ 0x13, 0x10, 0x21, 0x22, 0x2c, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x10, 0x1f, 0x10, 0x17,
++ 0x10, 0x17, 0x24, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0xf0, 0x90, 0xfc, 0x90, 0xf0,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x11, 0x17, 0x11, 0x7d, 0x10, 0x11, 0x17,
++ 0x14, 0x1b, 0x62, 0x02, 0x03, 0x02, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0x50, 0xa0, 0x10, 0xfc,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x13, 0x7e, 0x13, 0x12, 0x13,
++ 0x12, 0x1f, 0x65, 0x05, 0x09, 0x11, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x04, 0x1f, 0x64, 0x07, 0x04,
++ 0x07, 0x04, 0x7f, 0x02, 0x04, 0x3f, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0xf0, 0x0c, 0xc0, 0x00,
++ 0xc0, 0x00, 0xfc, 0x80, 0x60, 0x90, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x40, 0x7f, 0x04, 0x04,
++ 0x0f, 0x0c, 0x14, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x22, 0x22, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x00, 0xfc,
++ 0x00, 0xfc, 0x24, 0x24, 0xe4, 0x38, 0x00, 0x00,
++ 0x00, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x7d, 0x47, 0x42, 0x04, 0x08, 0x00, 0x00,
++ 0x40, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xfc, 0x54, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x18, 0x37, 0x36, 0x33, 0x52,
++ 0x13, 0x10, 0x1f, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x12, 0x14, 0x1f,
++ 0x71, 0x11, 0x10, 0x10, 0x13, 0x3c, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0xf0,
++ 0x10, 0x20, 0xc0, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x7d, 0x11, 0x10, 0x1b, 0x15,
++ 0x30, 0x53, 0x12, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0x50, 0xa0, 0x18, 0xf4,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x1f, 0x11,
++ 0x1f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7e, 0x11, 0x39, 0x34, 0x35,
++ 0x56, 0x50, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa8, 0xa8, 0xb0, 0xa0, 0xb0, 0xa8,
++ 0xa4, 0xa4, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x11, 0x10, 0x3f, 0x34,
++ 0x37, 0x51, 0x52, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x90,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x13, 0x12, 0x3b, 0x36,
++ 0x37, 0x50, 0x51, 0x16, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x01, 0x21, 0x11, 0x02, 0x0a, 0x14, 0x21, 0x22,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0x50, 0xa0, 0x10, 0x0c,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x43, 0x23, 0x25, 0x0a, 0x17,
++ 0x10, 0x12, 0x22, 0x23, 0x42, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0xe8, 0x88, 0xf8,
++ 0x88, 0xa8, 0xa8, 0xe8, 0x28, 0x30, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x00, 0x1f,
++ 0x12, 0x23, 0x24, 0x49, 0x42, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0x28, 0x48, 0xb0, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x40, 0x23, 0x20, 0x07, 0x08,
++ 0x0f, 0x11, 0x12, 0x24, 0x28, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x90,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x0a, 0x2a, 0x2c, 0x28, 0x48,
++ 0x08, 0x0c, 0x12, 0x12, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x11, 0x10, 0x16, 0x15, 0x39, 0x32, 0x35, 0x51,
++ 0x11, 0x19, 0x14, 0x24, 0x27, 0x40, 0x00, 0x00,
++ 0xc8, 0x48, 0xb0, 0xa4, 0xf8, 0x08, 0xf4, 0x10,
++ 0xf0, 0x10, 0x90, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x11, 0x09, 0x09, 0x01, 0x3f, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x10, 0x20, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2f, 0x28, 0x0b, 0x1a,
++ 0x2a, 0x4b, 0x12, 0x11, 0x21, 0x4f, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf8, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x20, 0x20, 0x40, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x05, 0x08, 0x0b, 0x14,
++ 0x37, 0x51, 0x12, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x90,
++ 0xfc, 0x90, 0x50, 0x50, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x1f, 0x01, 0x3f,
++ 0x00, 0x7f, 0x08, 0x04, 0x04, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x14, 0x23, 0x42, 0x04, 0x1f,
++ 0x60, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x90, 0x80, 0x40, 0xf0,
++ 0x0c, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x14, 0x23, 0x5f, 0x10, 0x17,
++ 0x10, 0x13, 0x12, 0x12, 0x13, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0xf8, 0x08, 0xe8,
++ 0x08, 0xc8, 0x48, 0x48, 0xc8, 0x18, 0x00, 0x00,
++ 0x10, 0x57, 0x36, 0x3b, 0x12, 0x7f, 0x12, 0x1b,
++ 0x36, 0x37, 0x53, 0x15, 0x15, 0x19, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x72, 0x14, 0x0c, 0x13, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x40, 0x50, 0x98, 0xe4, 0x50,
++ 0x50, 0x50, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x0c, 0x12, 0x7d, 0x09, 0x08,
++ 0x7f, 0x08, 0x08, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x08, 0xc8, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x7f, 0x0f, 0x09, 0x0f,
++ 0x09, 0x0f, 0x3f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x80, 0xfc, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x11, 0x09, 0x49, 0x21, 0x21,
++ 0x0f, 0x09, 0x13, 0x1c, 0x23, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0xfc, 0x00, 0xf8, 0xa8, 0x48, 0xb0, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x39, 0x28, 0x2b, 0x38, 0x2f,
++ 0x29, 0x3b, 0x2c, 0x2b, 0x28, 0x58, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x50, 0xe0, 0xf8, 0xa0, 0xfc,
++ 0x50, 0x58, 0xe4, 0x50, 0x48, 0xc0, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3c, 0x01, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x90,
++ 0x90, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x02, 0x3d, 0x27, 0x24, 0x3f, 0x25, 0x26, 0x27,
++ 0x3c, 0x24, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x48, 0x50, 0xf8, 0xa0, 0xfc, 0x10, 0xf8, 0xfc,
++ 0xf0, 0xf0, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10,
++ 0x08, 0x04, 0x04, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10,
++ 0x20, 0x20, 0x40, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x23, 0x22, 0x3e, 0x29, 0x08, 0x2e,
++ 0x28, 0x28, 0x28, 0x2e, 0x38, 0x60, 0x00, 0x00,
++ 0x20, 0x24, 0xf8, 0x70, 0xa8, 0x24, 0x60, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x20, 0x14, 0x12, 0x02, 0x00, 0x71, 0x12,
++ 0x1d, 0x11, 0x12, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa8, 0xa8, 0xb0, 0xa0, 0xb0, 0xa8,
++ 0x28, 0x24, 0x24, 0x1c, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x23, 0x10, 0x17, 0x00, 0x01, 0x77, 0x10,
++ 0x10, 0x11, 0x12, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0x10, 0xe0, 0x40, 0xfc, 0xe0, 0x50, 0xec, 0xa0,
++ 0xb8, 0x28, 0x08, 0x30, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5d, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0xe8, 0x68, 0x74, 0x94, 0xf8, 0x08, 0xfc, 0x88,
++ 0xf8, 0x90, 0x50, 0x60, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x79, 0x49, 0x53, 0x65, 0x59, 0x4a, 0x4f,
++ 0x48, 0x4a, 0x72, 0x43, 0x42, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0xe8, 0x88, 0xf8,
++ 0x88, 0xa8, 0xa8, 0xe8, 0x28, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22,
++ 0x12, 0x14, 0x08, 0x0e, 0x71, 0x06, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x02, 0x39, 0x2b, 0x28, 0x2f, 0x39, 0x2b, 0x2d,
++ 0x39, 0x29, 0x29, 0x2b, 0x2a, 0x5c, 0x00, 0x00,
++ 0x48, 0x50, 0xf8, 0xa0, 0xfc, 0xf0, 0x48, 0xf4,
++ 0xf0, 0x40, 0xfc, 0x54, 0xac, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x3f,
++ 0x2f, 0x2a, 0x2e, 0x2a, 0x27, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x28, 0x28,
++ 0xf8, 0xa8, 0xa8, 0x28, 0x28, 0x78, 0x00, 0x00,
++ 0x11, 0x1e, 0x12, 0x3f, 0x2f, 0x6a, 0x2f, 0x2a,
++ 0x2f, 0x22, 0x2f, 0x22, 0x23, 0x2c, 0x00, 0x00,
++ 0xa0, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0x28, 0xa8, 0x28, 0xc8, 0x98, 0x00, 0x00,
++ 0x06, 0x38, 0x08, 0x7f, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x3e, 0x08, 0x0f, 0x72, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x40, 0x40, 0x5f, 0x40, 0x4f, 0x48,
++ 0x48, 0x48, 0x4f, 0x48, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xe8, 0x08, 0xc8, 0x48,
++ 0x48, 0x48, 0xc8, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x11, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x08, 0x0f,
++ 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0x20, 0xe0,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x21, 0x1f, 0x10, 0x03, 0x72, 0x13, 0x13, 0x1a,
++ 0x67, 0x03, 0x7f, 0x04, 0x02, 0x00, 0x00, 0x00,
++ 0x20, 0xfc, 0x80, 0xf0, 0x10, 0xf0, 0xf0, 0x10,
++ 0xf0, 0xf8, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x17, 0x3b, 0x36, 0x37, 0x52,
++ 0x13, 0x10, 0x13, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0xf8, 0x10, 0xfc, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x7f, 0x13, 0x12, 0x13, 0x16,
++ 0x1b, 0x70, 0x13, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x40, 0xf8, 0x10, 0xfc, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0f, 0x0c, 0x44, 0x27, 0x24, 0x05, 0x15,
++ 0x15, 0x15, 0x25, 0x24, 0x44, 0x44, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xe8, 0x28,
++ 0x28, 0xe8, 0x28, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x7b, 0x49, 0x4f, 0x7b, 0x4a, 0x4b, 0x7a,
++ 0x4b, 0x48, 0x7b, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0xf8, 0x10, 0xfc, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x1f, 0x04, 0x7f, 0x0f, 0x09, 0x0f, 0x09,
++ 0x0f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x40, 0xfc, 0xe0, 0x20, 0xe0, 0x20,
++ 0xe0, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x25, 0x3d,
++ 0x25, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x00, 0xfc, 0x04, 0x04, 0xfc, 0x04, 0x74, 0x54,
++ 0x54, 0x54, 0x74, 0x44, 0x04, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x0c, 0x08, 0x1f, 0x24, 0x4f,
++ 0x12, 0x3f, 0x12, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x08, 0xc8,
++ 0x08, 0xe8, 0x48, 0x48, 0xc8, 0x30, 0x00, 0x00,
++ 0x02, 0x21, 0x1f, 0x10, 0x03, 0x02, 0x73, 0x12,
++ 0x13, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x80, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x13, 0x23, 0x5d, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x71, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xe8, 0xa8,
++ 0xa8, 0xa8, 0xe8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x10, 0x54, 0x57, 0x54, 0x57,
++ 0x54, 0x54, 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x40, 0x40, 0xfc, 0x00, 0xfc,
++ 0x60, 0x50, 0x48, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x20, 0x26, 0x39, 0x21, 0x23, 0x1f, 0x11, 0x11,
++ 0x7f, 0x11, 0x11, 0x12, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xfc, 0x54, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x2f, 0x22, 0x21, 0x3f, 0x22,
++ 0x27, 0x2a, 0x33, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xf0, 0x40, 0x00, 0xf8, 0x00,
++ 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x21, 0x49, 0x09, 0x11, 0x10, 0x37,
++ 0x50, 0x17, 0x11, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x10, 0xfc, 0x10, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x27, 0x48, 0x0b, 0x12, 0x12, 0x33,
++ 0x53, 0x10, 0x15, 0x15, 0x19, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0x08, 0xd0, 0x28, 0x04, 0x14, 0xf0, 0x00, 0x00,
++ 0x20, 0x10, 0x17, 0x40, 0x23, 0x20, 0x03, 0x12,
++ 0x14, 0x10, 0x20, 0x21, 0x42, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xfc, 0x08,
++ 0xa0, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x2b, 0x28, 0x3c, 0x2b, 0x28, 0x48,
++ 0x0f, 0x79, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x7f, 0x2a, 0x29, 0x5f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x50, 0x20, 0xd0, 0xec, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x61,
++ 0x04, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x29, 0x24, 0x40, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x10, 0xf8, 0x80, 0xf0, 0x80,
++ 0xf0, 0x80, 0xfc, 0x24, 0x94, 0x18, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x0f,
++ 0x09, 0x7f, 0x09, 0x1f, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0xe0,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xc0, 0x00, 0x00,
++ 0x04, 0x44, 0x28, 0x13, 0x32, 0x4a, 0x0a, 0x1b,
++ 0x2a, 0x48, 0x08, 0x08, 0x37, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xf8,
++ 0x48, 0x50, 0x48, 0x78, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7c, 0x01, 0x3c, 0x01, 0x3d,
++ 0x02, 0x3c, 0x24, 0x24, 0x3d, 0x26, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xfc, 0x08,
++ 0xa0, 0xa0, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x2a, 0x4a, 0x0c, 0x09, 0x0a, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0x00, 0xfc, 0x40, 0x40, 0x78,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x11, 0x16, 0x7f, 0x12, 0x13, 0x38, 0x35,
++ 0x36, 0x51, 0x56, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x80, 0xf0, 0x40, 0xf8, 0x48, 0xf8, 0x80, 0xe8,
++ 0x68, 0xb0, 0x68, 0xa4, 0x20, 0xc0, 0x00, 0x00,
++ 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x3c, 0x24,
++ 0x20, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x40, 0x40, 0x40, 0x78, 0x48,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x44, 0x08, 0x11, 0x01,
++ 0x7f, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x80, 0x88, 0x78, 0x00,
++ 0xfc, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x13, 0x12, 0x3a, 0x37,
++ 0x36, 0x52, 0x53, 0x16, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0xb8, 0x28, 0x28, 0xac, 0x4c, 0x04, 0xf8,
++ 0x28, 0xa8, 0x10, 0x30, 0x48, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x1f, 0x18,
++ 0x18, 0x1f, 0x28, 0x28, 0x4f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x80, 0xf8, 0x88,
++ 0x88, 0xf8, 0x88, 0x88, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x7f, 0x02, 0x04, 0x1f, 0x1f, 0x10, 0x1f,
++ 0x1f, 0x10, 0x1f, 0x15, 0x25, 0x40, 0x00, 0x00,
++ 0x10, 0xfc, 0x80, 0x40, 0xe4, 0xdc, 0x44, 0xc0,
++ 0xf0, 0x00, 0xf8, 0x48, 0x28, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x01, 0x01, 0x01,
++ 0x01, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xf8, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x5f, 0x01, 0x1f, 0x11,
++ 0x1f, 0x11, 0x1f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xf0, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x04, 0x3f, 0x24, 0x24, 0x24,
++ 0x28, 0x30, 0x3f, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0x88, 0x98, 0x98,
++ 0x78, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x24, 0x1f, 0x14, 0x4f, 0x24, 0x3f, 0x00, 0x1f,
++ 0x19, 0x2f, 0x29, 0x4f, 0x49, 0x4b, 0x00, 0x00,
++ 0x20, 0x20, 0x78, 0x90, 0x20, 0xf8, 0x28, 0xfc,
++ 0x28, 0xf8, 0x28, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x02, 0x02, 0x73, 0x5e, 0x52, 0x5a, 0x5a, 0x5a,
++ 0x7f, 0x5a, 0x4a, 0x02, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x7c, 0x90, 0x20, 0xf8, 0xc8, 0xf8, 0xc8,
++ 0xf8, 0xc8, 0x78, 0xb0, 0xa8, 0xc4, 0x00, 0x00,
++ 0x02, 0x02, 0x03, 0x7e, 0x22, 0x22, 0x22, 0x22,
++ 0x3f, 0x22, 0x22, 0x02, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x30, 0xc0, 0x00, 0x20, 0x20, 0x20, 0x20,
++ 0xe0, 0x20, 0x20, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x19, 0x35, 0x35, 0x30, 0x53,
++ 0x10, 0x10, 0x17, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf0,
++ 0x20, 0x40, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x00, 0x3e, 0x22, 0x3f, 0x00,
++ 0x3e, 0x04, 0x0e, 0x78, 0x09, 0x1e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x90, 0x90, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x20, 0x22, 0x02, 0x0a,
++ 0x0b, 0x0a, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xc0, 0x48, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x27, 0x3c, 0x24, 0x27,
++ 0x3c, 0x24, 0x27, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x88, 0x48, 0x70, 0xa0, 0x30,
++ 0x70, 0xa8, 0x24, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x00, 0x23, 0x12, 0x13, 0x02, 0x02, 0x72, 0x12,
++ 0x12, 0x14, 0x14, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0xfc, 0x20, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x09, 0x0f, 0x78, 0x08, 0x2a, 0x2a, 0x2a,
++ 0x2a, 0x3e, 0x28, 0x0a, 0x0a, 0x07, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x01, 0x7f, 0x02, 0x04, 0x18,
++ 0x6f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30,
++ 0xec, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x0f, 0x08, 0x0f, 0x0f, 0x3f, 0x01, 0x3f, 0x2d,
++ 0x4d, 0x1f, 0x00, 0x7f, 0x04, 0x3f, 0x00, 0x00,
++ 0xe0, 0x20, 0xe0, 0xe0, 0xf8, 0x00, 0xfc, 0x68,
++ 0x60, 0xf0, 0x00, 0xfc, 0x60, 0x90, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x13, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0x3c, 0xe0, 0x28, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0xa8, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x02, 0x04, 0x18, 0x67, 0x00,
++ 0x3f, 0x01, 0x05, 0x19, 0x61, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x80, 0x40, 0x30, 0xcc, 0x00,
++ 0xf8, 0x00, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x09, 0x09, 0x3f, 0x09, 0x09, 0x3f,
++ 0x09, 0x09, 0x11, 0x11, 0x21, 0x46, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x3f, 0x21, 0x21, 0x22, 0x22,
++ 0x24, 0x28, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x88, 0x48,
++ 0x28, 0x28, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x0f, 0x09, 0x11, 0x21, 0x41,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x11, 0x11, 0x15, 0x15, 0x15,
++ 0x15, 0x15, 0x15, 0x3f, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0xd0, 0x10,
++ 0x10, 0x10, 0x14, 0xec, 0x0c, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x14, 0x10, 0x3e, 0x28, 0x49,
++ 0x7e, 0x08, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x48, 0x90, 0xfc, 0x90,
++ 0xf8, 0x90, 0xf8, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x00, 0x3a, 0x01, 0x7d, 0x00, 0x38, 0x07, 0x39,
++ 0x01, 0x39, 0x29, 0x2b, 0x3c, 0x28, 0x00, 0x00,
++ 0x20, 0x28, 0xa8, 0x70, 0x20, 0xfc, 0x70, 0x70,
++ 0xa8, 0xa4, 0x20, 0x20, 0xc0, 0x3c, 0x00, 0x00,
++ 0x25, 0x15, 0x1f, 0x45, 0x2f, 0x2a, 0x0f, 0x12,
++ 0x1f, 0x22, 0x2f, 0x43, 0x44, 0x58, 0x00, 0x00,
++ 0x28, 0x28, 0xb0, 0x7c, 0xd0, 0xd0, 0xfc, 0x50,
++ 0xd0, 0x7c, 0xd0, 0x50, 0xfc, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x11, 0x13, 0x1c,
++ 0x77, 0x11, 0x11, 0x12, 0x14, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xa0, 0x10, 0xf8, 0x04,
++ 0xf8, 0x40, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x71, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xb8, 0xa8, 0xa8, 0xfc, 0x04,
++ 0x74, 0x54, 0x54, 0x74, 0x04, 0x0c, 0x00, 0x00,
++ 0x11, 0x10, 0x10, 0x7f, 0x14, 0x13, 0x3a, 0x36,
++ 0x36, 0x53, 0x53, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8,
++ 0xb8, 0x18, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x45, 0x1a, 0x00, 0x00,
++ 0x08, 0x88, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x67, 0x2a, 0x1b, 0x24, 0x7f,
++ 0x12, 0x3b, 0x36, 0x37, 0x52, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x40, 0xf8,
++ 0x48, 0xf8, 0x48, 0xfc, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x03, 0x7c, 0x56, 0x55, 0x55, 0x7e, 0x57,
++ 0x54, 0x56, 0x7d, 0x45, 0x42, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0xc8, 0xa8, 0x10, 0xb0, 0x48, 0xf8,
++ 0xa8, 0xa8, 0x10, 0x90, 0x68, 0x44, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x01, 0x3f, 0x24, 0x22,
++ 0x2f, 0x21, 0x2f, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x48, 0x88,
++ 0xe8, 0x08, 0xe8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x13, 0x13, 0x3a, 0x37,
++ 0x36, 0x53, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x28, 0xc8, 0xf8,
++ 0x48, 0xf8, 0x48, 0x48, 0x48, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa8, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x3e, 0x2b, 0x3e, 0x08,
++ 0x3e, 0x08, 0x7f, 0x14, 0x22, 0x40, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x27, 0x21, 0x01, 0x09,
++ 0x0b, 0x0a, 0x10, 0x10, 0x21, 0x26, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0xfc, 0x10, 0x10, 0x10,
++ 0x90, 0x60, 0x20, 0x50, 0x88, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x12, 0x12, 0x12,
++ 0x13, 0x12, 0x12, 0x22, 0x22, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x38,
++ 0xc0, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x1f,
++ 0x00, 0x00, 0x01, 0x0e, 0x70, 0x00, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0xfc, 0x40, 0x40, 0x20,
++ 0x20, 0x20, 0x90, 0x14, 0x0c, 0x04, 0x00, 0x00,
++ 0x01, 0x21, 0x11, 0x13, 0x02, 0x04, 0x79, 0x11,
++ 0x12, 0x14, 0x10, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x40, 0x40, 0x50, 0x48,
++ 0x44, 0x44, 0x40, 0xc0, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x1f, 0x10, 0x28, 0x49, 0x0e,
++ 0x08, 0x08, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x88, 0x08,
++ 0x08, 0x48, 0x48, 0xc8, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x3d, 0x25,
++ 0x25, 0x3d, 0x19, 0x15, 0x22, 0x45, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x78, 0x00, 0xfc, 0x60,
++ 0x64, 0x58, 0x50, 0x50, 0x68, 0x84, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x21, 0x21, 0x22, 0x25, 0x29,
++ 0x21, 0x22, 0x24, 0x28, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0x88, 0x48, 0x28, 0x28,
++ 0x88, 0x48, 0x28, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x3e, 0x2a, 0x2a, 0x2a, 0x2a,
++ 0x3e, 0x2c, 0x0a, 0x0f, 0x19, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x03, 0x7c, 0x11, 0x49, 0x2a, 0x24, 0x3f, 0x02,
++ 0x04, 0x07, 0x7c, 0x04, 0x04, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x0f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02,
++ 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
++ 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x10, 0x1f,
++ 0x11, 0x12, 0x24, 0x38, 0x40, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x80, 0x88, 0xc8,
++ 0xb0, 0xa0, 0x90, 0x88, 0x84, 0x80, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x04, 0x3c, 0x04,
++ 0x3c, 0x04, 0x3c, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0x40, 0x78, 0x40,
++ 0x78, 0x40, 0x78, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x10, 0x10, 0x30, 0x57, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x13, 0x10, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x08, 0x7e, 0x12, 0x12, 0x13,
++ 0x3c, 0x24, 0x06, 0x0a, 0x11, 0x20, 0x00, 0x00,
++ 0x00, 0x1c, 0xe0, 0x20, 0x20, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x0d, 0x03, 0x02, 0x0c, 0x30,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x90, 0x10, 0x60,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7f, 0x00, 0x3c, 0x01, 0x3c,
++ 0x00, 0x3d, 0x25, 0x26, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xc8, 0x68, 0x88, 0x30, 0x40,
++ 0xa0, 0xa8, 0x84, 0x94, 0x90, 0x70, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x47, 0x27, 0x23, 0x00, 0x0f,
++ 0x08, 0x13, 0x12, 0x22, 0x22, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x58, 0x58, 0x40, 0xfc,
++ 0x80, 0xf8, 0xa8, 0xa8, 0xa8, 0xb8, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x7e, 0x07, 0x0a, 0x0b, 0x1a,
++ 0x37, 0x56, 0x13, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0x4c, 0xf8, 0xd8, 0xf8, 0xd8,
++ 0x68, 0xd8, 0xf8, 0xd8, 0x68, 0x58, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x09, 0x0a, 0x10, 0x18,
++ 0x34, 0x55, 0x11, 0x12, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x20, 0x20, 0xb0, 0xa8,
++ 0xa8, 0x24, 0x24, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x01, 0x3f, 0x23, 0x54, 0x14, 0x23, 0x1f, 0x12,
++ 0x1f, 0x00, 0x7f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xa0, 0x50, 0xc8, 0xf0, 0x90,
++ 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x0f, 0x12, 0x2f, 0x44, 0x09,
++ 0x13, 0x00, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xc8, 0xe8, 0x08,
++ 0x30, 0x80, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x09, 0x49, 0x37, 0x11, 0x31, 0x48, 0x0b, 0x1a,
++ 0x2a, 0x4b, 0x0a, 0x0a, 0x33, 0x12, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0x10, 0x00, 0xf8, 0x48,
++ 0x48, 0xf8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x08, 0x7f, 0x15, 0x2b, 0x7e,
++ 0x08, 0x0f, 0x70, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0x50, 0xd0, 0x50, 0x74,
++ 0x94, 0x0c, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x10, 0x20, 0x4f, 0x08, 0x08,
++ 0x08, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x80, 0x80, 0xf0, 0x80, 0x80,
++ 0x80, 0xfc, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x1f, 0x60, 0x0f, 0x00,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0xf0, 0x0c, 0xe0, 0x40,
++ 0x80, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x13, 0x14, 0x13, 0x1c,
++ 0x70, 0x11, 0x15, 0x15, 0x19, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xf8, 0x10,
++ 0xa0, 0x50, 0x48, 0x14, 0x14, 0xf0, 0x00, 0x00,
++ 0x12, 0x12, 0x13, 0x7a, 0x16, 0x15, 0x1d, 0x13,
++ 0x1a, 0x74, 0x18, 0x15, 0x14, 0x38, 0x00, 0x00,
++ 0x30, 0x28, 0xa8, 0xa0, 0xfc, 0xa0, 0x30, 0x50,
++ 0x48, 0x84, 0x00, 0x48, 0xa4, 0xa4, 0x00, 0x00,
++ 0x11, 0x11, 0x15, 0x15, 0x3b, 0x32, 0x36, 0x59,
++ 0x12, 0x14, 0x18, 0x25, 0x24, 0x48, 0x00, 0x00,
++ 0x20, 0x28, 0xe4, 0x64, 0x7c, 0xa0, 0xa0, 0x50,
++ 0x50, 0x88, 0x04, 0x48, 0xa4, 0xa4, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x08, 0x7e, 0x08, 0x1d,
++ 0x1b, 0x2b, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x40, 0x40, 0x40, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x40, 0x40, 0x40, 0x78, 0x48,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x08, 0x13, 0x12, 0x3a, 0x0a,
++ 0x4b, 0x2a, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xb8,
++ 0x38, 0x08, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x11, 0x1a, 0x14, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x20, 0x20, 0x40,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x1c, 0x1a, 0x2a, 0x49, 0x09,
++ 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x70, 0x70, 0xa8, 0x24, 0x20,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x0f, 0x09, 0x0f, 0x3f, 0x2a, 0x7f,
++ 0x0f, 0x7f, 0x06, 0x7c, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0xe0, 0x20, 0xe0, 0xfc, 0xa8, 0xf8,
++ 0xe0, 0xfc, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x19, 0x34, 0x34, 0x33, 0x52,
++ 0x12, 0x12, 0x12, 0x13, 0x13, 0x12, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0x20, 0x40, 0x20, 0x28, 0xa8,
++ 0x48, 0x48, 0xa8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x07, 0x05,
++ 0x14, 0x17, 0x25, 0x25, 0x49, 0x56, 0x00, 0x00,
++ 0xa0, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0xfc, 0xf0,
++ 0x00, 0xfc, 0x48, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x67, 0x1a, 0x1a, 0x26, 0x7e,
++ 0x12, 0x1b, 0x36, 0x36, 0x52, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xa8,
++ 0x98, 0x18, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x0c, 0x12, 0x7d, 0x01, 0x3e, 0x22,
++ 0x3e, 0x22, 0x3e, 0x22, 0x22, 0x26, 0x00, 0x00,
++ 0x40, 0x40, 0x4c, 0x70, 0x44, 0x44, 0x3c, 0x40,
++ 0x4c, 0x70, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x3e, 0x25, 0x25, 0x3c, 0x25, 0x25, 0x3d,
++ 0x25, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x88, 0x48, 0x48, 0x10, 0x20, 0x18, 0x98, 0x68,
++ 0x28, 0x58, 0x98, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3b, 0x2a, 0x2b, 0x3a, 0x2b, 0x2b, 0x3a,
++ 0x2a, 0x2b, 0x2a, 0x2a, 0x2c, 0x5b, 0x00, 0x00,
++ 0xa0, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0xfc, 0xf8,
++ 0x00, 0xfc, 0xc8, 0xb0, 0xd0, 0x0c, 0x00, 0x00,
++ 0x02, 0x1f, 0x12, 0x1f, 0x12, 0x1f, 0x1f, 0x17,
++ 0x10, 0x1f, 0x12, 0x12, 0x23, 0x5c, 0x00, 0x00,
++ 0x80, 0xf0, 0x90, 0xf0, 0x90, 0xf0, 0xf8, 0xf0,
++ 0x00, 0xfc, 0x90, 0x60, 0xb0, 0x0c, 0x00, 0x00,
++ 0x00, 0x7e, 0x02, 0x7e, 0x02, 0x3a, 0x2a, 0x2a,
++ 0x2a, 0x3a, 0x2a, 0x02, 0x02, 0x0d, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x50, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x12, 0x09, 0x07, 0x19, 0x6f,
++ 0x09, 0x09, 0x0f, 0x01, 0x01, 0x7e, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x60, 0x80, 0xc0, 0x30, 0xec,
++ 0x20, 0x20, 0xe0, 0x10, 0xf8, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x21, 0x21, 0x3f, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x1f, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08,
++ 0x00, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x12, 0x13, 0x1e,
++ 0x72, 0x12, 0x12, 0x12, 0x12, 0x31, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0xf8, 0x08,
++ 0x00, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7d, 0x17, 0x10, 0x11, 0x1a,
++ 0x77, 0x12, 0x13, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x10, 0xe8, 0x48, 0x50, 0xfc, 0xe0, 0x50, 0x48,
++ 0xfc, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x1f, 0x12, 0x1f, 0x14, 0x7f, 0x1c,
++ 0x3e, 0x2a, 0x3e, 0x7f, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0x90, 0xf0, 0x00, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0xf8, 0x08,
++ 0x00, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x22, 0x22, 0x03, 0x13,
++ 0x12, 0x12, 0x24, 0x24, 0x49, 0x56, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x50, 0x40, 0xf8, 0x08,
++ 0x90, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x22, 0x22, 0x02, 0x12,
++ 0x12, 0x12, 0x24, 0x24, 0x48, 0x50, 0x00, 0x00,
++ 0x20, 0xc0, 0x08, 0x30, 0xc0, 0xc8, 0xc8, 0xb0,
++ 0xa0, 0x90, 0x90, 0x88, 0x84, 0x80, 0x00, 0x00,
++ 0x00, 0x3e, 0x08, 0x3e, 0x08, 0x0e, 0x70, 0x1f,
++ 0x11, 0x1f, 0x10, 0x10, 0x10, 0x0f, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x11, 0x11, 0x21, 0x3d, 0x65,
++ 0x25, 0x25, 0x26, 0x3e, 0x25, 0x0e, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x28, 0x30, 0x20, 0xf8, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x30, 0x0b, 0x62, 0x0b, 0x12, 0x24, 0x27, 0x09,
++ 0x7f, 0x02, 0x07, 0x08, 0x03, 0x3c, 0x00, 0x00,
++ 0x40, 0xfc, 0x48, 0xf8, 0x90, 0x60, 0x9c, 0x00,
++ 0xfc, 0x20, 0x40, 0xe0, 0x10, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x29, 0x24, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0xf8, 0x80, 0xf0, 0x80,
++ 0xf0, 0x80, 0xfc, 0x24, 0x94, 0x38, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x04, 0x1f, 0x11, 0x11,
++ 0x1f, 0x10, 0x10, 0x10, 0x10, 0x0f, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x00, 0x09, 0x24, 0x24, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xfc,
++ 0x04, 0x24, 0x94, 0x04, 0x04, 0x38, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x10, 0x30, 0x57, 0x10,
++ 0x10, 0x17, 0x10, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xbc, 0xa0,
++ 0xa0, 0xbc, 0xa0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x13, 0x18, 0x15, 0x12, 0x1f,
++ 0x11, 0x1f, 0x21, 0x22, 0x44, 0x18, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0x90, 0xd4, 0x24, 0x18, 0xf8,
++ 0x44, 0xf8, 0x40, 0x40, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x13, 0x10, 0x10, 0x13,
++ 0x18, 0x70, 0x17, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xf8,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x17, 0x18,
++ 0x70, 0x17, 0x10, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xbc, 0xa0,
++ 0xa0, 0xbc, 0xa0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x3f, 0x22,
++ 0x22, 0x3e, 0x14, 0x12, 0x22, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x90, 0x90, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x29, 0x4a, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x70, 0x68, 0xa8,
++ 0xa4, 0x24, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x03, 0x0d, 0x71, 0x01, 0x1f,
++ 0x12, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xc0, 0x30, 0x08, 0x04, 0xf0,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x28, 0x28, 0x2b, 0x2a, 0x3f, 0x22, 0x23, 0x3a,
++ 0x28, 0x29, 0x2f, 0x28, 0x28, 0x48, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xa8,
++ 0xa0, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x04, 0x7c, 0x04, 0x1c, 0x64, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x88, 0xf0, 0x80, 0x84, 0x7c, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x3c, 0x24, 0x25, 0x3d,
++ 0x25, 0x25, 0x25, 0x25, 0x24, 0x4c, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xfc, 0x24,
++ 0x24, 0x24, 0x24, 0x2c, 0x20, 0x20, 0x00, 0x00,
++ 0x02, 0x7e, 0x02, 0x3e, 0x7f, 0x05, 0x7f, 0x0f,
++ 0x09, 0x0f, 0x09, 0x0f, 0x7f, 0x01, 0x00, 0x00,
++ 0x40, 0x7c, 0x40, 0x78, 0x7c, 0x40, 0xfc, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x78, 0x48, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x12, 0x11, 0x31, 0x5f, 0x10,
++ 0x13, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x10, 0x20, 0xfc, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x11, 0x7c, 0x10, 0x17, 0x10,
++ 0x11, 0x1d, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x90, 0xa0, 0xfc, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x10, 0x7c, 0x24, 0x24, 0x24,
++ 0x7f, 0x48, 0x0d, 0x16, 0x24, 0x40, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf0, 0x90, 0xf0, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x0a, 0x18, 0x1c, 0x1b,
++ 0x2a, 0x28, 0x49, 0x09, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf8, 0xa8, 0xa8, 0xfc,
++ 0xa8, 0xa8, 0xfc, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x7e, 0x08, 0x18, 0x1c, 0x1a,
++ 0x2b, 0x28, 0x49, 0x0e, 0x08, 0x08, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf0, 0x90, 0xf0, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x0a, 0x2c, 0x28, 0x28, 0x48,
++ 0x0b, 0x08, 0x14, 0x13, 0x26, 0x40, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf0, 0x90, 0xf0, 0x40,
++ 0xfc, 0xe0, 0xd0, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x04, 0x45, 0x29, 0x11, 0x31, 0x49, 0x09, 0x19,
++ 0x19, 0x29, 0x48, 0x08, 0x09, 0x32, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xf8, 0x08,
++ 0x08, 0xf8, 0x90, 0x88, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x00, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x00, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x00, 0x3f, 0x20,
++ 0x44, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xfc, 0x08,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x3e, 0x23, 0x22, 0x3e, 0x22, 0x3f, 0x22,
++ 0x22, 0x3e, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x48, 0x50, 0xfc, 0x00,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x29, 0x28, 0x30, 0x2b, 0x24,
++ 0x25, 0x25, 0x39, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x90, 0xa0, 0xfc, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x21, 0x10, 0x17, 0x00, 0x01, 0x70, 0x11,
++ 0x10, 0x11, 0x11, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xf0,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x20, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xf8, 0xa4, 0x1c, 0x00, 0x00,
++ 0x02, 0x0d, 0x38, 0x09, 0x08, 0x7e, 0x08, 0x1d,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x28, 0xa8, 0xb0, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x3e, 0x29, 0x49, 0x09, 0x7f,
++ 0x09, 0x0c, 0x12, 0x12, 0x20, 0x41, 0x00, 0x00,
++ 0x08, 0xc8, 0x48, 0x48, 0xc8, 0x08, 0x08, 0xc8,
++ 0x48, 0x48, 0x48, 0x48, 0x48, 0x88, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x06, 0x38, 0x08, 0x7e,
++ 0x1c, 0x1b, 0x2a, 0x48, 0x08, 0x09, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x20, 0x24, 0xa4, 0xa8,
++ 0xb0, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x10, 0x13, 0x32, 0x52, 0x12,
++ 0x13, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x80, 0xf8, 0x08, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3e, 0x02, 0x3e, 0x02, 0x7f, 0x04, 0x25,
++ 0x15, 0x16, 0x1d, 0x64, 0x04, 0x0c, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0xc8, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x13, 0x7e, 0x13, 0x12, 0x13,
++ 0x10, 0x17, 0x11, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x10, 0xfc, 0x10, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x11, 0x11, 0x11, 0x1d,
++ 0x71, 0x11, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0x80, 0xf8, 0x08, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x43, 0x22, 0x22, 0x02, 0x13,
++ 0x12, 0x12, 0x22, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf8, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x1f, 0x10, 0x10, 0x10, 0x1f,
++ 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x43, 0x10, 0x09, 0x41,
++ 0x29, 0x09, 0x11, 0x11, 0x21, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x30, 0x40, 0xf8, 0x08,
++ 0x08, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x08, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x88, 0x88, 0x88, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x12, 0x1a, 0x16, 0x16, 0x7f,
++ 0x12, 0x1a, 0x1a, 0x2a, 0x22, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x88, 0x88, 0x88, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x10, 0x0f, 0x4b, 0x22, 0x23,
++ 0x12, 0x13, 0x2f, 0x21, 0x40, 0x40, 0x00, 0x00,
++ 0x40, 0xfc, 0x50, 0x48, 0xfc, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x00, 0x20, 0x11, 0x13, 0x02, 0x02, 0x73, 0x12,
++ 0x12, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0x80, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10,
++ 0x10, 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x79, 0x49, 0x49, 0x49, 0x78, 0x4b, 0x48,
++ 0x4f, 0x49, 0x7b, 0x4c, 0x43, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0xf0, 0xa0, 0xf8, 0xa0,
++ 0xfc, 0x50, 0x58, 0xe4, 0x58, 0xc0, 0x00, 0x00,
++ 0x11, 0x09, 0x0f, 0x41, 0x23, 0x22, 0x03, 0x12,
++ 0x13, 0x10, 0x2f, 0x20, 0x43, 0x4c, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x80, 0xfc, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x15, 0x35, 0x38, 0x33, 0x50,
++ 0x17, 0x19, 0x17, 0x24, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0xf0, 0xa0, 0xf8, 0xa0,
++ 0xfc, 0x50, 0x58, 0xe4, 0x58, 0xc0, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x64, 0x2b, 0x1a, 0x27, 0x7e,
++ 0x13, 0x38, 0x37, 0x35, 0x50, 0x10, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x10, 0x1f, 0x10,
++ 0x1f, 0x01, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3f,
++ 0x0a, 0x3e, 0x3a, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x08, 0x08, 0xd0, 0x30, 0x28, 0x44, 0x88, 0x48,
++ 0x50, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x01,
++ 0x03, 0x0e, 0x31, 0x01, 0x06, 0x78, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00,
++ 0xf0, 0x20, 0x40, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x42, 0x47, 0x51, 0x49, 0x4b,
++ 0x45, 0x59, 0x43, 0x40, 0x7f, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0x08, 0x28, 0x28, 0xc8, 0x48,
++ 0x28, 0x28, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x28, 0x45, 0x08, 0x08, 0x7f,
++ 0x08, 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x00, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x12, 0x10, 0x3c, 0x24, 0x65,
++ 0x27, 0x25, 0x3d, 0x21, 0x21, 0x01, 0x00, 0x00,
++ 0xa0, 0x90, 0x08, 0x48, 0x40, 0xa0, 0xa0, 0x10,
++ 0xf8, 0x14, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x1f, 0x01, 0x7f, 0x03,
++ 0x0f, 0x74, 0x07, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x10, 0xf8, 0x20, 0xfc, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x3e, 0x23, 0x3e, 0x21, 0x4f, 0x7f,
++ 0x01, 0x0f, 0x3f, 0x01, 0x7f, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x30, 0xcc, 0xe0, 0xfc,
++ 0x20, 0xe0, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x14, 0x23, 0x5f, 0x01, 0x7f,
++ 0x01, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x18, 0xe0, 0x00, 0xfc,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1a, 0x36, 0x36,
++ 0x32, 0x54, 0x55, 0x19, 0x11, 0x17, 0x00, 0x00,
++ 0x70, 0xfc, 0x58, 0xe8, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x00, 0xf8, 0x68, 0x68, 0xfc, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7d, 0x57, 0x54, 0x55, 0x57,
++ 0x55, 0x5d, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x18, 0xe8, 0x48, 0x50, 0xfc, 0xe0, 0x50, 0xf8,
++ 0x54, 0xf0, 0x50, 0x50, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x24, 0x3c,
++ 0x24, 0x24, 0x24, 0x25, 0x25, 0x4e, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
++ 0x90, 0x90, 0x94, 0x14, 0x14, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0a, 0x2a, 0x2c, 0x28, 0x48,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0xf8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x00,
++ 0x3f, 0x21, 0x3f, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x07, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x08,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20,
++ 0x20, 0x20, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2b, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x70, 0x70, 0xa8,
++ 0xa8, 0x24, 0xf8, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x23, 0x10, 0x15, 0x43, 0x22, 0x27, 0x09, 0x01,
++ 0x1f, 0x11, 0x21, 0x22, 0x44, 0x58, 0x00, 0x00,
++ 0x90, 0x90, 0x64, 0x28, 0x10, 0xf8, 0x24, 0x20,
++ 0xfc, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x1e, 0x02, 0x24, 0x14, 0x08, 0x1f, 0x22, 0x42,
++ 0x3f, 0x02, 0x04, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x90, 0x90, 0x64, 0x44, 0x28, 0xf0, 0x48, 0x44,
++ 0xf8, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x21, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x68, 0x28, 0xd4, 0x54, 0x88, 0xfc, 0x50, 0x50,
++ 0xfc, 0x50, 0x50, 0x94, 0x94, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x01,
++ 0x7f, 0x02, 0x07, 0x1a, 0x61, 0x1e, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0x00,
++ 0xfc, 0x00, 0xf0, 0x20, 0xc0, 0x7c, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x08, 0x08, 0x1f, 0x28, 0x48,
++ 0x08, 0x08, 0x08, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0x7c, 0xc8, 0x48, 0x50,
++ 0x30, 0x20, 0x64, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x00, 0x1e, 0x7f, 0x00,
++ 0x1e, 0x1e, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x00, 0x48, 0xc8, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x10, 0x1c,
++ 0x70, 0x11, 0x11, 0x12, 0x14, 0x3b, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x80, 0x80, 0xf8, 0x88,
++ 0xc8, 0x50, 0x30, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x14, 0x23, 0x44, 0x04, 0x0b,
++ 0x18, 0x28, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x50, 0x48, 0xfc,
++ 0x48, 0x30, 0x20, 0xd4, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x25, 0x25,
++ 0x29, 0x3f, 0x28, 0x2b, 0x28, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x48, 0x28,
++ 0xe8, 0x48, 0xa8, 0x68, 0x28, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x15, 0x15, 0x15, 0x17,
++ 0x17, 0x13, 0x21, 0x22, 0x42, 0x04, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xfc, 0x54, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x54, 0x52, 0x53, 0x5f, 0x52,
++ 0x5f, 0x77, 0x56, 0x4a, 0x12, 0x02, 0x00, 0x00,
++ 0x04, 0x08, 0xf0, 0xa0, 0xa0, 0x3c, 0xe8, 0x28,
++ 0xe8, 0x28, 0xa8, 0xc8, 0x48, 0x88, 0x00, 0x00,
++ 0x00, 0x10, 0x17, 0x10, 0x7d, 0x11, 0x11, 0x10,
++ 0x17, 0x1c, 0x65, 0x05, 0x05, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x08, 0xe8, 0x28, 0xe8, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0xfc, 0x00, 0x00,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x18, 0x2f, 0x48, 0x0f, 0x08,
++ 0x0f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x80, 0xf0, 0x80, 0xf0, 0x80,
++ 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x0a, 0x09, 0x11, 0x10, 0x33, 0x50, 0x10,
++ 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0x50, 0x40, 0xf8, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x49, 0x29, 0x2a, 0x08, 0x7f, 0x08, 0x08,
++ 0x7f, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x11, 0x09, 0x09, 0x3f, 0x01, 0x01,
++ 0x7f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x10, 0x20, 0xf8, 0x00, 0x00,
++ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x12, 0x12, 0x12,
++ 0x11, 0x11, 0x10, 0x21, 0x26, 0x58, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x20,
++ 0x20, 0x40, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x0a, 0x4a, 0x2c, 0x28, 0x7e, 0x08, 0x08,
++ 0x0f, 0x79, 0x11, 0x12, 0x22, 0x44, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0x88, 0x88, 0xc8,
++ 0x50, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x5d, 0x51, 0x12, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x90, 0x50, 0x50,
++ 0x50, 0x10, 0x10, 0x14, 0x14, 0x0c, 0x00, 0x00,
++ 0x12, 0x12, 0x17, 0x7c, 0x16, 0x15, 0x15, 0x1f,
++ 0x74, 0x16, 0x16, 0x1a, 0x18, 0x31, 0x00, 0x00,
++ 0x00, 0x38, 0xa8, 0xa8, 0xac, 0xac, 0xc4, 0xf8,
++ 0xa8, 0xa8, 0x90, 0xb0, 0xc8, 0x84, 0x00, 0x00,
++ 0x01, 0x7d, 0x11, 0x17, 0x10, 0x14, 0x7a, 0x13,
++ 0x11, 0x11, 0x1e, 0x62, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0x7c, 0x10, 0xd0, 0x90, 0x90, 0xfc, 0x10,
++ 0x10, 0x10, 0x90, 0x90, 0x7c, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x0a, 0x0a, 0x0d, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x41, 0x21, 0x21, 0x01, 0x09,
++ 0x09, 0x09, 0x11, 0x11, 0x21, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x30,
++ 0x00, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x41, 0x21, 0x21, 0x01, 0x09,
++ 0x09, 0x09, 0x11, 0x12, 0x22, 0x24, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x90, 0x50, 0x50,
++ 0x10, 0x10, 0x10, 0x14, 0x14, 0x0c, 0x00, 0x00,
++ 0x28, 0x29, 0x29, 0x29, 0x3f, 0x21, 0x21, 0x3d,
++ 0x25, 0x25, 0x26, 0x26, 0x45, 0x46, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x45, 0x29, 0x11, 0x31, 0x49, 0x09, 0x19,
++ 0x29, 0x49, 0x09, 0x09, 0x09, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x30,
++ 0x00, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x7c, 0x12, 0x12, 0x12, 0x12, 0x7e, 0x12,
++ 0x12, 0x10, 0x1d, 0x61, 0x02, 0x04, 0x00, 0x00,
++ 0x80, 0xfc, 0x90, 0x90, 0x90, 0x90, 0xfc, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x02, 0x7d, 0x55, 0x54, 0x57, 0x7c, 0x54,
++ 0x57, 0x54, 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0x50, 0x40, 0xf8, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x3f, 0x5f, 0x15, 0x7f, 0x15, 0x3f, 0x23,
++ 0x0c, 0x03, 0x3f, 0x0d, 0x31, 0x01, 0x00, 0x00,
++ 0x40, 0xc0, 0x7c, 0xc8, 0x48, 0x30, 0xd8, 0x44,
++ 0xc0, 0x30, 0xc8, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x12, 0x1a, 0x16, 0x17, 0x7f,
++ 0x12, 0x1a, 0x1a, 0x2a, 0x22, 0x47, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x50, 0x54, 0x94, 0x0c, 0xf8,
++ 0x88, 0x50, 0x50, 0x20, 0x50, 0x8c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x10, 0x0b, 0x49, 0x27, 0x20,
++ 0x0b, 0x0d, 0x11, 0x11, 0x21, 0x21, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x38, 0xc8, 0x50, 0xfc, 0xe0,
++ 0xf8, 0x54, 0xf0, 0x50, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x3e, 0x22,
++ 0x22, 0x3e, 0x19, 0x15, 0x22, 0x47, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0xc8, 0xc8, 0xc8,
++ 0xa8, 0xb0, 0x10, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x4d, 0x7f, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x2a, 0x3e, 0x08, 0x7f, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x10, 0xf8, 0x88, 0x88, 0x88,
++ 0x88, 0xb0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x01, 0x3f, 0x11, 0x09, 0x09, 0x7f, 0x01,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x30, 0xc0, 0x10, 0x10, 0x20, 0x40, 0xfc, 0x00,
++ 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x0a, 0x2b, 0x2d, 0x29, 0x49,
++ 0x09, 0x0d, 0x13, 0x12, 0x21, 0x46, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x1c, 0x05, 0x14, 0x14, 0x12, 0x22, 0x3f, 0x52,
++ 0x12, 0x12, 0x12, 0x22, 0x2d, 0x42, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x0c, 0x12, 0x2a, 0x48, 0x3e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x24, 0x27, 0x39, 0x63, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0xc8, 0xc8, 0xc8,
++ 0xa8, 0xb0, 0x90, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x17, 0x12, 0x12, 0x1f,
++ 0x72, 0x10, 0x10, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x68, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x79, 0x4a, 0x4f, 0x4a, 0x7a, 0x4b,
++ 0x4a, 0x48, 0x79, 0x49, 0x42, 0x04, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0xa8, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x11, 0x09, 0x7f, 0x03, 0x05, 0x19,
++ 0x7f, 0x11, 0x1f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x30, 0xd0, 0x10, 0x20, 0xfc, 0x80, 0x40, 0x30,
++ 0xfc, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x3e, 0x32, 0x2a, 0x7f, 0x2a, 0x2a, 0x47,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x70, 0x54, 0x8c, 0xf8, 0x50, 0x70, 0x8c,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x3e, 0x32, 0x2a, 0x7f, 0x2a, 0x2a, 0x47,
++ 0x3f, 0x02, 0x0f, 0x74, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0x70, 0x54, 0x8c, 0xf8, 0x50, 0x30, 0xcc,
++ 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x09, 0x7f, 0x05, 0x19,
++ 0x6f, 0x09, 0x0f, 0x09, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x60, 0xd0, 0x20, 0xfc, 0x40, 0x30,
++ 0xec, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x12, 0x12, 0x24, 0x49, 0x0f,
++ 0x09, 0x09, 0x0f, 0x09, 0x01, 0x3e, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x50, 0x48, 0x44, 0xc4, 0xe0,
++ 0x20, 0x20, 0xe0, 0x20, 0xf0, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x2f, 0x21, 0x2f, 0x21,
++ 0x2f, 0x22, 0x22, 0x24, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x78, 0x40, 0x78, 0x40,
++ 0x78, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x04, 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x1f,
++ 0x04, 0x08, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x03, 0x05, 0x19, 0x61, 0x01,
++ 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xc0, 0x30, 0x08, 0x04, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x88, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x14, 0x14, 0x14, 0x17,
++ 0x14, 0x14, 0x14, 0x25, 0x26, 0x58, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x40, 0x40, 0x44, 0xc8,
++ 0x70, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x10, 0x23, 0x4a, 0x0a, 0x12, 0x13, 0x32,
++ 0x52, 0x12, 0x12, 0x14, 0x15, 0x1e, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x50, 0x40, 0xf8, 0x88,
++ 0x90, 0x50, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x02, 0x02, 0x3e, 0x02, 0x3e, 0x02, 0x7e, 0x04,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x80, 0xf8, 0x80, 0xfc, 0x80,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1f, 0x10, 0x1f, 0x11, 0x1f,
++ 0x11, 0x1f, 0x21, 0x3e, 0x42, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x40, 0x78,
++ 0x40, 0x78, 0x40, 0x7c, 0x40, 0x40, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x7e, 0x12, 0x13, 0x12, 0x1e,
++ 0x72, 0x12, 0x12, 0x12, 0x13, 0x3c, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x24, 0x24, 0xe8, 0x30, 0x20,
++ 0x20, 0x20, 0x20, 0xe4, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x12, 0x12, 0x13, 0x1e,
++ 0x72, 0x12, 0x12, 0x14, 0x15, 0x3e, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x50, 0x40, 0xf8, 0x88,
++ 0x90, 0x50, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x02, 0x3e, 0x02, 0x3e, 0x02, 0x7c, 0x05, 0x09,
++ 0x7f, 0x04, 0x02, 0x03, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0x7c, 0x40, 0x7c, 0x40, 0x7c, 0x40, 0x00,
++ 0xfc, 0x40, 0x80, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x10,
++ 0x10, 0x10, 0x11, 0x16, 0x18, 0x60, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x88, 0x88, 0x90, 0xa0, 0xc0,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x20, 0x22, 0x02, 0x12,
++ 0x14, 0x14, 0x28, 0x21, 0x42, 0x44, 0x00, 0x00,
++ 0x40, 0x28, 0x28, 0x88, 0x90, 0x90, 0xb0, 0xa8,
++ 0xc4, 0xc4, 0x80, 0x88, 0x88, 0x78, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2b, 0x2a, 0x0a, 0x1b,
++ 0x2b, 0x4a, 0x12, 0x14, 0x25, 0x4e, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x40, 0xfc, 0x48, 0x50, 0xf0,
++ 0x10, 0xa0, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x12,
++ 0x11, 0x11, 0x10, 0x20, 0x23, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x88, 0x90, 0x80, 0xf0, 0x10,
++ 0x20, 0x20, 0xc0, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x7c, 0x10, 0x13, 0x12, 0x13, 0x3e, 0x27,
++ 0x64, 0x25, 0x27, 0x3c, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0xa0, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x18, 0x70, 0x10, 0x10, 0x7e, 0x12, 0x1a,
++ 0x36, 0x34, 0x50, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x20, 0x28, 0x88, 0x88, 0x90, 0x90, 0xb0,
++ 0xa8, 0xc4, 0x84, 0x88, 0x88, 0x78, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x67, 0x18, 0x10, 0x2b, 0x7c,
++ 0x18, 0x37, 0x35, 0x31, 0x52, 0x14, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xbc, 0xa0,
++ 0xa0, 0xbc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x08, 0x12, 0x7f, 0x3e,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x26, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x40, 0x58, 0x60, 0x44,
++ 0x3c, 0x40, 0x58, 0x60, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0xf8, 0x08,
++ 0x00, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x09, 0x0b, 0x13, 0x3d,
++ 0x55, 0x13, 0x12, 0x12, 0x15, 0x1e, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x28, 0x30, 0xf8, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x00, 0x3c, 0x03, 0x3c,
++ 0x00, 0x3c, 0x27, 0x24, 0x3d, 0x26, 0x00, 0x00,
++ 0x50, 0x50, 0x50, 0xdc, 0x50, 0x50, 0xdc, 0x50,
++ 0x50, 0xdc, 0x90, 0x90, 0x10, 0x10, 0x00, 0x00,
++ 0x02, 0x3f, 0x02, 0x3f, 0x3f, 0x44, 0x1f, 0x68,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x80, 0xf8, 0x88, 0xf8, 0xfc, 0x84, 0xf8, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x27, 0x14, 0x14, 0x07, 0x04, 0x77, 0x1c,
++ 0x14, 0x14, 0x17, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0x10, 0x90, 0xfc, 0xc8, 0xa8, 0x30, 0xfc, 0x90,
++ 0x90, 0xfc, 0x90, 0x10, 0x10, 0xfc, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x3e, 0x02, 0x02, 0x3e, 0x02,
++ 0x02, 0x7e, 0x04, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x40, 0x40, 0x7c, 0x40,
++ 0x40, 0x7c, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x1f, 0x02, 0x0e, 0x32, 0x12, 0x12, 0x7f,
++ 0x12, 0x12, 0x22, 0x22, 0x42, 0x02, 0x00, 0x00,
++ 0x00, 0xc8, 0x70, 0x50, 0x48, 0x28, 0x18, 0xc8,
++ 0x50, 0x70, 0x28, 0x24, 0x14, 0x0c, 0x00, 0x00,
++ 0x10, 0x15, 0x12, 0x7e, 0x10, 0x10, 0x3e, 0x36,
++ 0x36, 0x52, 0x52, 0x12, 0x15, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x20, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0xa8, 0xa8, 0x98, 0x80, 0x7c, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x12, 0x7f, 0x12, 0x1e,
++ 0x12, 0x1e, 0x12, 0x7f, 0x15, 0x63, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x10, 0x20, 0xfc, 0xa8, 0xb0,
++ 0xf8, 0xc8, 0xa8, 0x90, 0x68, 0x84, 0x00, 0x00,
++ 0x09, 0x09, 0x0f, 0x11, 0x17, 0x34, 0x57, 0x16,
++ 0x17, 0x16, 0x17, 0x1a, 0x12, 0x12, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0xf8, 0x48,
++ 0xf8, 0x48, 0xf8, 0x48, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x17, 0x10,
++ 0x17, 0x10, 0x1f, 0x20, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x68, 0x80, 0xf0,
++ 0x80, 0xfc, 0x80, 0x80, 0x84, 0x7c, 0x00, 0x00,
++ 0x12, 0x1a, 0x2a, 0x4a, 0x1f, 0x18, 0x20, 0x7f,
++ 0x26, 0x26, 0x2a, 0x2b, 0x32, 0x20, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa0, 0xfc, 0x48, 0xc8, 0xe8,
++ 0x28, 0x30, 0x90, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x09, 0x09, 0x09, 0x7f, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x0e, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x24, 0x24, 0xe8, 0x30, 0x20,
++ 0x20, 0x20, 0x20, 0x64, 0xa4, 0x1c, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x1f, 0x10,
++ 0x10, 0x1f, 0x10, 0x10, 0x1e, 0x70, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x80,
++ 0x98, 0xe0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x7e, 0x08, 0x3e, 0x08, 0x0e, 0x70, 0x10,
++ 0x10, 0x1f, 0x10, 0x10, 0x1e, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x80, 0x80,
++ 0x98, 0xe0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x1f, 0x10, 0x17, 0x14,
++ 0x17, 0x14, 0x27, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f,
++ 0x01, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc,
++ 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x0f, 0x08, 0x0f, 0x0f, 0x0f, 0x1f, 0x11,
++ 0x1f, 0x1f, 0x04, 0x7f, 0x04, 0x18, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0xe0, 0xe0, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x08, 0x1d, 0x1a, 0x1a,
++ 0x28, 0x29, 0x48, 0x09, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x90, 0x50, 0x20, 0x50,
++ 0xc8, 0x24, 0x00, 0xc0, 0x30, 0x08, 0x00, 0x00,
++ 0x04, 0x18, 0x73, 0x12, 0x13, 0x7e, 0x13, 0x18,
++ 0x35, 0x37, 0x50, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xa8,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x22, 0x22, 0x22, 0x22, 0x24,
++ 0x24, 0x28, 0x30, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0x40, 0x40, 0x48,
++ 0x48, 0x38, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x09, 0x09, 0x09, 0x09,
++ 0x09, 0x09, 0x15, 0x13, 0x21, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x10, 0x20, 0x00, 0x00, 0xf0,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x7c, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x04,
++ 0x14, 0x17, 0x14, 0x14, 0x17, 0x78, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0x80,
++ 0x98, 0xe0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x04, 0x02, 0x1f, 0x10, 0x10,
++ 0x17, 0x10, 0x13, 0x20, 0x20, 0x47, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0x40, 0xfc, 0x20, 0xc0,
++ 0x10, 0x60, 0x84, 0x18, 0x60, 0x80, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x3d, 0x26, 0x24, 0x3f,
++ 0x26, 0x25, 0x24, 0x27, 0x24, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0xa0, 0x58,
++ 0x4c, 0x50, 0xe0, 0x58, 0x44, 0xc0, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x3f, 0x01, 0x7f, 0x04, 0x1a,
++ 0x63, 0x06, 0x19, 0x03, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x00, 0xfc, 0x88, 0x78,
++ 0xe0, 0x40, 0x80, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x27, 0x3c, 0x25, 0x24,
++ 0x3c, 0x24, 0x24, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x90,
++ 0x90, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x78, 0x0f, 0x09, 0x39, 0x23, 0x22, 0x3a,
++ 0x2b, 0x0a, 0x0a, 0x0b, 0x0a, 0x30, 0x00, 0x00,
++ 0x00, 0x78, 0xc8, 0x08, 0x38, 0xa0, 0xa0, 0xb8,
++ 0xa8, 0x88, 0x88, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x02, 0x01, 0x00, 0x04, 0x04, 0x04, 0x24, 0x24,
++ 0x24, 0x45, 0x46, 0x04, 0x1c, 0x63, 0x00, 0x00,
++ 0x00, 0x10, 0x90, 0x90, 0x20, 0x20, 0x50, 0x48,
++ 0x84, 0x04, 0x00, 0x10, 0x10, 0xf0, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x09, 0x7f,
++ 0x09, 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x20, 0xfc,
++ 0x20, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x25, 0x5f, 0x01, 0x7f, 0x01, 0x1f,
++ 0x01, 0x1f, 0x01, 0x3f, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x20, 0xf0, 0x10, 0xfc, 0x10, 0xf0,
++ 0x00, 0xf0, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x27, 0x10, 0x11, 0x01, 0x01, 0x70, 0x13,
++ 0x12, 0x13, 0x12, 0x13, 0x2c, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x48, 0xf8, 0x48, 0xf8, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x11, 0x1b, 0x34, 0x34,
++ 0x37, 0x50, 0x50, 0x11, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0x00,
++ 0xfc, 0xa0, 0x90, 0x38, 0xc4, 0x04, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x25,
++ 0x79, 0x49, 0x0d, 0x15, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0xf8, 0x08, 0x08,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x11, 0x7f, 0x24, 0x27, 0x24,
++ 0x74, 0x48, 0x09, 0x16, 0x24, 0x43, 0x00, 0x00,
++ 0x1c, 0xe4, 0x48, 0x30, 0xfc, 0x40, 0xfc, 0x40,
++ 0xf8, 0xc8, 0x30, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x0a, 0x72, 0x14, 0x0c, 0x13, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0xfc, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x02, 0x1f, 0x10, 0x10, 0x10,
++ 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x7b, 0x02, 0x3c, 0x01, 0x38,
++ 0x03, 0x3d, 0x28, 0x29, 0x38, 0x2b, 0x00, 0x00,
++ 0x00, 0xf8, 0xc8, 0xb8, 0xa8, 0xc8, 0x98, 0xc0,
++ 0x30, 0xcc, 0x20, 0xc8, 0x30, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x13, 0x30, 0x57, 0x10,
++ 0x11, 0x13, 0x15, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0xc0,
++ 0x48, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x07, 0x04, 0x3f, 0x29, 0x2e, 0x38, 0x27,
++ 0x2a, 0x2a, 0x2a, 0x2a, 0x32, 0x41, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xa8, 0x48, 0x10, 0x94, 0x24,
++ 0x08, 0x08, 0x10, 0x20, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x12, 0x1b, 0x34, 0x35,
++ 0x30, 0x57, 0x51, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0x00, 0xf0,
++ 0x00, 0xfc, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x01, 0x11, 0x09, 0x09, 0x01, 0x7d, 0x05, 0x09,
++ 0x09, 0x11, 0x21, 0x41, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x88, 0x90, 0x60, 0x40, 0x20,
++ 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x43, 0x22, 0x23, 0x00, 0x13,
++ 0x10, 0x17, 0x21, 0x22, 0x44, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0x00, 0xf8,
++ 0x00, 0xfc, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x00, 0x7f, 0x19, 0x7f, 0x5b, 0x7f, 0x01, 0x3d,
++ 0x01, 0x7f, 0x19, 0x36, 0x53, 0x34, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0x50, 0x70, 0x50, 0x78, 0xd8, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x1f, 0x12, 0x1f, 0x00, 0x1f,
++ 0x00, 0x7f, 0x05, 0x19, 0x61, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0x90, 0xf0, 0x00, 0xf0,
++ 0x00, 0xfc, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x03,
++ 0x04, 0x1c, 0x64, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x10,
++ 0x90, 0xa0, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7f, 0x00, 0x3c, 0x00, 0x3f,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x28, 0xa8, 0xb0, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x18, 0x66, 0x14, 0x19, 0x6a, 0x0c, 0x14,
++ 0x64, 0x0c, 0x14, 0x64, 0x04, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0x08, 0x88, 0x48,
++ 0x48, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x24, 0x2f, 0x29, 0x2f,
++ 0x29, 0x2f, 0x24, 0x3f, 0x44, 0x45, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf8, 0x48, 0x48, 0x78, 0x48,
++ 0x48, 0x78, 0x48, 0xc8, 0x88, 0x18, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x7d, 0x11, 0x10, 0x1b, 0x12,
++ 0x32, 0x53, 0x12, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0x10, 0x00, 0xf8, 0x48,
++ 0x48, 0xf8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2b, 0x28, 0x0b, 0x1a,
++ 0x6a, 0x0a, 0x13, 0x12, 0x22, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf8, 0x40, 0xf8, 0x48,
++ 0x68, 0x98, 0x18, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x02, 0x0c, 0x38, 0x08, 0x08, 0x7e, 0x08, 0x1d,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x0b, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xb0, 0xa8, 0xa4, 0xa4, 0x28,
++ 0x68, 0x30, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x04, 0x1f, 0x11, 0x11,
++ 0x1f, 0x11, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x7c, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x71, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0x90, 0x00, 0xf8, 0x48,
++ 0x48, 0xf8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x09, 0x2a, 0x1c, 0x18, 0x0e, 0x71, 0x00, 0x00,
++ 0x08, 0xf0, 0x80, 0x80, 0xfc, 0x90, 0x90, 0x90,
++ 0xfc, 0x00, 0x50, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3e, 0x00, 0x7f, 0x08,
++ 0x2c, 0x2a, 0x2a, 0x49, 0x08, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xfc, 0x20,
++ 0xb0, 0xa8, 0xa4, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0e, 0x73, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x50, 0x88, 0xfc, 0x24, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7e, 0x2a, 0x3e, 0x2b,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x20, 0xf8, 0x28, 0xfc, 0x68, 0x70, 0xc4, 0x3c,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00,
++ 0x7c, 0x44, 0x44, 0x44, 0x7c, 0x44, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x40, 0x40, 0xc0, 0x40, 0x00,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7f, 0x11, 0x19, 0x37, 0x37,
++ 0x33, 0x55, 0x55, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xe0, 0x08, 0x08, 0x90, 0x50,
++ 0x64, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x08, 0x08, 0x4a, 0x2a,
++ 0x12, 0x12, 0x1a, 0x2a, 0x27, 0x40, 0x00, 0x00,
++ 0x20, 0xe8, 0x24, 0xfc, 0xa0, 0xa0, 0xa0, 0xe0,
++ 0x90, 0x90, 0xb4, 0xcc, 0x0c, 0x04, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x23, 0x22, 0x02, 0x12,
++ 0x1f, 0x20, 0x22, 0x42, 0x44, 0x48, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0xf8, 0x20, 0x20, 0x20,
++ 0xfc, 0x00, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x22, 0x12, 0x1a, 0x4b, 0x2a, 0x3f, 0x03, 0x16,
++ 0x16, 0x2f, 0x29, 0x42, 0x44, 0x49, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0xa0, 0x78, 0xc8, 0x78, 0xc8,
++ 0xf8, 0x48, 0x78, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x01, 0x04, 0x1f, 0x62, 0x0c, 0x3f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x80, 0x40, 0xf0, 0x4c, 0xc0, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x5f, 0x09, 0x33, 0x7f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x30, 0xc8, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x2e, 0x28, 0x28, 0x7f, 0x0c, 0x2a,
++ 0x29, 0x49, 0x1a, 0x04, 0x18, 0x63, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x3f, 0x40, 0x3e, 0x2a, 0x2b,
++ 0x7f, 0x2a, 0x2a, 0x7f, 0x43, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x7c, 0x88, 0x88, 0x48,
++ 0x50, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x22, 0x13, 0x14, 0x7f, 0x14, 0x14, 0x14, 0x7f,
++ 0x14, 0x14, 0x14, 0x24, 0x27, 0x44, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf0, 0x90, 0xd0, 0xb0,
++ 0xb0, 0x90, 0x94, 0xec, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x00, 0x01, 0x03, 0x05, 0x19,
++ 0x61, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0x00, 0x80, 0x60, 0x10,
++ 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x08, 0x0b, 0x18, 0x29, 0x48,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x90,
++ 0x90, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x12,
++ 0x13, 0x1c, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x00, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x3f, 0x01, 0x01, 0x01, 0x7f,
++ 0x01, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc,
++ 0x80, 0x80, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x11, 0x7c, 0x25, 0x24, 0x27,
++ 0x7a, 0x4b, 0x0e, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x44, 0xf8, 0x48, 0x48, 0x70, 0x40, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x5f, 0x07, 0x04, 0x07, 0x00,
++ 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0xc0, 0x40, 0xc0, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x5f, 0x0f, 0x08, 0x0f, 0x00,
++ 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0xe0, 0x20, 0xe0, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x7f, 0x04, 0x04, 0x0f, 0x08,
++ 0x18, 0x28, 0x48, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x80, 0x80, 0xf8, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0xb0, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x11, 0x11, 0x12, 0x13, 0x16,
++ 0x1a, 0x12, 0x12, 0x22, 0x22, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0x10, 0x10, 0xfc, 0x10,
++ 0x90, 0x50, 0x50, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x17, 0x38, 0x35, 0x35, 0x53,
++ 0x15, 0x19, 0x11, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0xa0, 0x20, 0xfc, 0x24,
++ 0x24, 0x24, 0x24, 0x38, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x10, 0x1f,
++ 0x70, 0x10, 0x10, 0x11, 0x16, 0x38, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x0a, 0x7f, 0x08, 0x3e, 0x2a, 0x3e, 0x2b, 0x3e,
++ 0x08, 0x7f, 0x1e, 0x12, 0x23, 0x4e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x90, 0x90, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x0c, 0x32, 0x03, 0x0c, 0x70, 0x0f, 0x08,
++ 0x0f, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x60, 0x30, 0x48, 0x80, 0x60, 0xdc, 0x00, 0x00,
++ 0xf8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x08, 0x04, 0x3f, 0x22, 0x12, 0x12, 0x7f, 0x00,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x90, 0x90, 0xa0, 0xfc, 0x00,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x44, 0x22, 0x22, 0x03, 0x10,
++ 0x10, 0x17, 0x20, 0x20, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x70, 0x88, 0x48, 0x50, 0x00, 0xf8, 0x30,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x04, 0x04, 0x08, 0x10, 0x24, 0x04, 0x04, 0x02,
++ 0x02, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x20, 0x10, 0x08, 0x48, 0x40, 0x40, 0x80,
++ 0x80, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x08, 0x08, 0x17,
++ 0x11, 0x30, 0x50, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x10, 0x10, 0xfc,
++ 0x10, 0x90, 0x90, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x13, 0x16, 0x1a, 0x12, 0x12,
++ 0x2f, 0x29, 0x4a, 0x09, 0x0a, 0x08, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xfc, 0x90, 0x50, 0x50, 0xb0,
++ 0xf8, 0xc8, 0xa8, 0x48, 0x28, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x17, 0x11, 0x17, 0x17, 0x14,
++ 0x17, 0x13, 0x22, 0x23, 0x43, 0x02, 0x00, 0x00,
++ 0x00, 0xf0, 0xfc, 0x28, 0xe0, 0xf8, 0xf8, 0x88,
++ 0xf8, 0xf0, 0x10, 0xf0, 0xf0, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x01, 0x1f, 0x01,
++ 0x7f, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xf0, 0x00,
++ 0xfc, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x3c, 0x03, 0x7e, 0x01, 0x3d, 0x03, 0x3c,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x21, 0x00, 0x00,
++ 0x08, 0x90, 0xfc, 0xa8, 0xa8, 0xb0, 0xfc, 0x00,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x02, 0x07, 0x18, 0x61, 0x1f, 0x10, 0x1f, 0x10,
++ 0x1f, 0x10, 0x1f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x3d, 0x24, 0x24, 0x3f, 0x24, 0x3d, 0x25,
++ 0x25, 0x3d, 0x19, 0x15, 0x27, 0x40, 0x00, 0x00,
++ 0x10, 0xf8, 0x14, 0x14, 0xfc, 0x50, 0x50, 0x70,
++ 0x50, 0x50, 0x74, 0xcc, 0x0c, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x04, 0x7f, 0x04, 0x14,
++ 0x17, 0x14, 0x14, 0x2c, 0x26, 0x41, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0x20, 0x20, 0xf0, 0x28, 0x24,
++ 0xa4, 0x20, 0x20, 0x20, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xf0, 0x10,
++ 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x29, 0x29, 0x33, 0x2b, 0x25,
++ 0x25, 0x25, 0x25, 0x39, 0x21, 0x21, 0x00, 0x00,
++ 0x88, 0x88, 0x88, 0x08, 0xfc, 0x08, 0x48, 0x28,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x09, 0x09, 0x09, 0x12, 0x13, 0x35, 0x51, 0x1f,
++ 0x12, 0x12, 0x17, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x50, 0x50, 0xfc,
++ 0x50, 0x50, 0xfc, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7f, 0x16, 0x12, 0x17, 0x1a,
++ 0x72, 0x17, 0x10, 0x15, 0x14, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0xa8, 0xa8, 0xfc, 0xa8,
++ 0xa8, 0xfc, 0x00, 0x48, 0xa4, 0xa4, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x7f, 0x04, 0x04, 0x17,
++ 0x14, 0x14, 0x14, 0x17, 0x78, 0x00, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0xfc, 0x40, 0x40, 0xc0,
++ 0x40, 0x20, 0x24, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x2a, 0x7f, 0x0a, 0x3f, 0x08,
++ 0x0f, 0x12, 0x6a, 0x0d, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0xa0, 0xfc, 0xa0, 0xf8, 0x20,
++ 0xf8, 0xa0, 0xa0, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x14, 0x1f, 0x12, 0x3f, 0x22, 0x5f,
++ 0x12, 0x1f, 0x12, 0x1f, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xe8, 0x28, 0xc8,
++ 0x48, 0xc8, 0x48, 0xc8, 0x48, 0xf0, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x10, 0x1f, 0x2a, 0x4a, 0x7f,
++ 0x0a, 0x0a, 0x7f, 0x14, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xf8, 0xa0, 0xa0, 0xfc,
++ 0xa0, 0xa0, 0xfc, 0x90, 0x48, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x22, 0x12, 0x14, 0x7f, 0x00,
++ 0x3e, 0x22, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x09, 0x08, 0x7f, 0x08, 0x08,
++ 0x3e, 0x08, 0x08, 0x0e, 0x70, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x90, 0x50,
++ 0x50, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x37, 0x37,
++ 0x33, 0x53, 0x52, 0x14, 0x17, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x38, 0xc8, 0x48, 0xf8, 0x58, 0x58,
++ 0xf8, 0x6c, 0x5c, 0x7c, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x11, 0x17, 0x15, 0x15,
++ 0x17, 0x15, 0x11, 0x21, 0x2e, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0xd0, 0x10, 0x10, 0xd0, 0x50, 0x50,
++ 0xd0, 0x10, 0x54, 0xec, 0x2c, 0x04, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x0f, 0x7f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0xfc, 0x20,
++ 0xe0, 0x20, 0xe0, 0x3c, 0xe0, 0x20, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3e, 0x22, 0x23, 0x3e,
++ 0x08, 0x2f, 0x28, 0x2e, 0x38, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x78, 0xc8, 0x50, 0x30,
++ 0xc8, 0xfc, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x10, 0x10, 0x37, 0x50, 0x10,
++ 0x10, 0x10, 0x10, 0x11, 0x16, 0x18, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x48, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x3e, 0x22, 0x3e, 0x00, 0x7f,
++ 0x49, 0x7f, 0x49, 0x49, 0x7f, 0x41, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x11, 0x11, 0x21, 0x4b, 0x0d, 0x11, 0x11, 0x31,
++ 0x50, 0x11, 0x16, 0x10, 0x11, 0x1e, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x80, 0xf0, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x55, 0x55, 0x54, 0x57,
++ 0x56, 0x5f, 0x52, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x48, 0xf8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x30, 0x00, 0xf8, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x09, 0x09, 0x10, 0x1b,
++ 0x36, 0x57, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x48, 0xf8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x3e, 0x24, 0x24, 0x3c,
++ 0x24, 0x24, 0x27, 0x24, 0x24, 0x4f, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x40, 0xf8, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x11, 0x11, 0x13, 0x7d, 0x09, 0x0b, 0x13, 0x1d,
++ 0x34, 0x51, 0x16, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x80, 0xf0, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x1f, 0x12, 0x1f, 0x11, 0x29, 0x4b,
++ 0x15, 0x31, 0x50, 0x13, 0x10, 0x17, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0x90, 0xf0, 0x00, 0xfc, 0xf0,
++ 0xf0, 0xf0, 0xf0, 0xa0, 0xe0, 0x1c, 0x00, 0x00,
++ 0x12, 0x0a, 0x0a, 0x42, 0x23, 0x22, 0x03, 0x12,
++ 0x13, 0x12, 0x22, 0x24, 0x44, 0x48, 0x00, 0x00,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xb8, 0x08, 0xf8, 0x08,
++ 0xb8, 0xa8, 0xa8, 0xa8, 0xa8, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x04, 0x3f, 0x24, 0x24,
++ 0x3f, 0x24, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x90, 0x90, 0xf0, 0x90, 0x80,
++ 0xf8, 0x88, 0x88, 0x88, 0xb0, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x08, 0x08, 0x08, 0x0c,
++ 0x78, 0x08, 0x09, 0x09, 0x0f, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80,
++ 0xa0, 0x90, 0x08, 0x38, 0xc4, 0x04, 0x00, 0x00,
++ 0x11, 0x09, 0x0f, 0x41, 0x21, 0x27, 0x05, 0x15,
++ 0x17, 0x15, 0x21, 0x22, 0x42, 0x44, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x28, 0x28, 0xf8, 0x28, 0x20,
++ 0xfc, 0x24, 0x24, 0x38, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x10, 0x10, 0x30, 0x51,
++ 0x11, 0x11, 0x12, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,
++ 0x20, 0x10, 0x08, 0x78, 0x84, 0x04, 0x00, 0x00,
++ 0x09, 0x29, 0x29, 0x29, 0x3e, 0x2a, 0x4c, 0x09,
++ 0x0d, 0x7a, 0x08, 0x08, 0x09, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0x28,
++ 0x28, 0x48, 0x48, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x48, 0x48, 0x48, 0x88, 0xfc, 0x88, 0xc8, 0xa8,
++ 0xa8, 0x88, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x07, 0x00, 0x08, 0x08, 0x10, 0x10, 0x3f, 0x42,
++ 0x02, 0x02, 0x04, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0x20, 0x20, 0x10, 0xe8, 0x24,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x4b, 0x4a, 0x4a, 0x4c, 0x49,
++ 0x49, 0x7a, 0x4c, 0x40, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0x28,
++ 0x48, 0x48, 0x48, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x03, 0x79, 0x4f, 0x49, 0x4b, 0x4a, 0x4b,
++ 0x4a, 0x7b, 0x4a, 0x43, 0x01, 0x0e, 0x00, 0x00,
++ 0x40, 0xf8, 0x50, 0xfc, 0x10, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x13, 0x11, 0x17, 0x7d, 0x13, 0x12, 0x13,
++ 0x16, 0x1b, 0x62, 0x03, 0x03, 0x1c, 0x00, 0x00,
++ 0x40, 0xf8, 0x50, 0xfc, 0x10, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x1f, 0x35, 0x37, 0x32, 0x53,
++ 0x12, 0x13, 0x12, 0x13, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0xf8, 0x50, 0xfc, 0x10, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x12, 0x13, 0x1c,
++ 0x70, 0x10, 0x11, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0xe0, 0x20, 0x20, 0x20, 0x10, 0x10, 0xf8, 0x94,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x1c, 0x1a, 0x29, 0x48, 0x01,
++ 0x09, 0x09, 0x12, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x60, 0xb0, 0x28, 0x24, 0x10,
++ 0x10, 0xa0, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x7f, 0x06, 0x1c, 0x6f, 0x1f, 0x2f, 0x08,
++ 0x0f, 0x1f, 0x11, 0x1f, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x60, 0x90, 0xfc, 0xe0, 0xe0, 0x80,
++ 0xf8, 0xf0, 0x10, 0xf0, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x08, 0x7f, 0x09, 0x1e,
++ 0x1a, 0x2a, 0x48, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0xe0, 0x20, 0xa0, 0xa0, 0x90, 0x10, 0xf8, 0x54,
++ 0x50, 0x50, 0x90, 0x90, 0x10, 0x60, 0x00, 0x00,
++ 0x09, 0x3f, 0x07, 0x19, 0x6f, 0x09, 0x0f, 0x09,
++ 0x0f, 0x3f, 0x04, 0x7f, 0x0c, 0x30, 0x00, 0x00,
++ 0x20, 0xf8, 0xc0, 0x30, 0xfc, 0x20, 0xe0, 0x20,
++ 0xe0, 0xf8, 0x40, 0xfc, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0d, 0x13, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0a, 0x00, 0x00,
++ 0xe0, 0x20, 0xa0, 0xa0, 0x90, 0x10, 0xf8, 0x54,
++ 0x50, 0x50, 0x90, 0x90, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x07,
++ 0x04, 0x18, 0x6f, 0x02, 0x04, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x70, 0x70, 0xc0,
++ 0x40, 0x30, 0xec, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x08, 0x08, 0x04, 0x04,
++ 0x02, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x2f, 0x24,
++ 0x27, 0x24, 0x27, 0x24, 0x2f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xe8, 0x48,
++ 0xc8, 0x48, 0xc8, 0x48, 0xc8, 0x58, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x3f, 0x21, 0x21, 0x22,
++ 0x22, 0x24, 0x28, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x88,
++ 0x48, 0x28, 0x28, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x0a, 0x09, 0x09, 0x17, 0x11, 0x31, 0x51, 0x1f,
++ 0x11, 0x11, 0x12, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xf8, 0x20, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x08, 0x08,
++ 0x08, 0x7f, 0x00, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0xe0, 0x00, 0x00, 0x00, 0xf8, 0x40, 0x40, 0x40,
++ 0x40, 0xfc, 0x00, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x13, 0x7e, 0x12, 0x13, 0x12,
++ 0x16, 0x1b, 0x64, 0x04, 0x09, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x04, 0xfc, 0x8c, 0x50, 0xfc, 0x50,
++ 0x50, 0xfc, 0x90, 0x90, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x49, 0x2a, 0x7f, 0x5d, 0x5b, 0x6b, 0x41,
++ 0x1f, 0x11, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xc8, 0x30, 0x30, 0xc8, 0x04,
++ 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x11, 0x09, 0x09, 0x01, 0x7f,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x10, 0x10, 0x20, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x2a, 0x1c, 0x7f, 0x5d, 0x5b, 0x69, 0x4b,
++ 0x04, 0x7f, 0x04, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xc8, 0x28, 0x30, 0xc8, 0x44,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7e, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x68,
++ 0x98, 0x98, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x7f, 0x04, 0x04, 0x24, 0x14,
++ 0x14, 0x14, 0x04, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xfc, 0x40, 0x40, 0x48, 0x48,
++ 0x50, 0x60, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x4d, 0x29, 0x2a, 0x7f,
++ 0x49, 0x5d, 0x5b, 0x6b, 0x49, 0x4b, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x7c, 0xc8, 0x48,
++ 0x28, 0x30, 0x10, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x20,
++ 0x2f, 0x21, 0x22, 0x24, 0x28, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x88,
++ 0xe8, 0x88, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x01, 0x3d, 0x25, 0x29, 0x29, 0x31, 0x29, 0x27,
++ 0x24, 0x27, 0x38, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x20, 0x24, 0x28, 0xf0, 0x20, 0x24, 0xe4, 0x5c,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x11, 0x09, 0x09, 0x01, 0x7f, 0x03, 0x03,
++ 0x05, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x20, 0x00, 0xfc, 0x80, 0x80,
++ 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x02, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xe0, 0x20, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x12, 0x33, 0x52, 0x12,
++ 0x17, 0x16, 0x1a, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x10, 0x90, 0xfc, 0xa8, 0xa8, 0xa8, 0x7c, 0x10,
++ 0x90, 0xfc, 0x90, 0x90, 0x90, 0x10, 0x00, 0x00,
++ 0x00, 0x1e, 0x13, 0x1e, 0x10, 0x3f, 0x32, 0x5f,
++ 0x12, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x50, 0xfc, 0x20, 0xfc,
++ 0x20, 0x20, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2b, 0x2a, 0x0a, 0x1b,
++ 0x2a, 0x4b, 0x16, 0x16, 0x2b, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0x90, 0xfc, 0xa8, 0xb0,
++ 0x7c, 0x90, 0xfc, 0x90, 0x90, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x3e, 0x08, 0x0f, 0x70, 0x00,
++ 0x7f, 0x02, 0x07, 0x1c, 0x67, 0x04, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x00,
++ 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x21, 0x3f, 0x29, 0x08,
++ 0x0f, 0x09, 0x11, 0x11, 0x21, 0x46, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x49, 0x2a, 0x7f, 0x49, 0x5d, 0x6b, 0x4f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x7c, 0xc8, 0x30, 0xd0, 0xec, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x12, 0x1f, 0x00, 0x1f,
++ 0x10, 0x14, 0x12, 0x22, 0x20, 0x43, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x90, 0xfc,
++ 0x48, 0x48, 0x30, 0x34, 0xcc, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x5f, 0x11, 0x12, 0x14,
++ 0x10, 0x1f, 0x10, 0x13, 0x1c, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x90, 0xf0, 0x10, 0x90, 0x50,
++ 0x88, 0x90, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x13, 0x12, 0x33, 0x52, 0x13,
++ 0x16, 0x16, 0x1b, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0xa8, 0xa8, 0xf8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x12, 0x12, 0x24, 0x4a,
++ 0x03, 0x04, 0x1a, 0x01, 0x06, 0x78, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x50, 0x48, 0xc4, 0x04,
++ 0xe0, 0x40, 0x80, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x08, 0x0f,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0xe0,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x7f, 0x00, 0x1f, 0x10, 0x1f,
++ 0x10, 0x1f, 0x29, 0x2f, 0x49, 0x09, 0x00, 0x00,
++ 0x40, 0xfc, 0x90, 0xfc, 0x00, 0xf8, 0x08, 0xf8,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0x58, 0x00, 0x00,
++ 0x10, 0x13, 0x14, 0x65, 0x19, 0x19, 0x25, 0x7f,
++ 0x11, 0x3b, 0x37, 0x35, 0x51, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xfc,
++ 0x54, 0xfc, 0x54, 0x54, 0x54, 0x0c, 0x00, 0x00,
++ 0x00, 0x20, 0x17, 0x10, 0x00, 0x00, 0x70, 0x11,
++ 0x11, 0x12, 0x14, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x08,
++ 0x08, 0x08, 0x30, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x23, 0x12, 0x12, 0x03, 0x03, 0x72, 0x12,
++ 0x12, 0x14, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0x90, 0x60,
++ 0x20, 0xd0, 0x08, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x27, 0x10, 0x13, 0x02, 0x03, 0x72, 0x13,
++ 0x16, 0x17, 0x1a, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0x18, 0xfc, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x13, 0x12, 0x33, 0x52, 0x13,
++ 0x12, 0x11, 0x10, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x40, 0x80, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2a, 0x2a, 0x3e,
++ 0x2c, 0x0c, 0x15, 0x16, 0x24, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x88, 0x88, 0x08, 0x34, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x13, 0x7d, 0x25, 0x25, 0x25,
++ 0x79, 0x48, 0x0c, 0x14, 0x21, 0x46, 0x00, 0x00,
++ 0x40, 0x78, 0x90, 0x20, 0xf8, 0x48, 0x48, 0xf8,
++ 0x68, 0x60, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x3f, 0x04, 0x04, 0x04,
++ 0x7f, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x40, 0x30, 0xc8, 0x40, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x28, 0x28, 0x7c, 0x29, 0x39, 0x13, 0x7d, 0x55,
++ 0x55, 0x7d, 0x11, 0x7d, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0xfc, 0x90, 0x7c, 0x54, 0x7c, 0x54, 0x7c,
++ 0x54, 0x50, 0x20, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x32, 0x50, 0x17,
++ 0x10, 0x11, 0x12, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x48, 0x40, 0xfc,
++ 0xe0, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x17, 0x1a, 0x29, 0x7f, 0x09, 0x7f,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x28, 0x24, 0xfc, 0x20, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0xa8, 0xf8, 0xa8, 0xa8, 0x98, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x3f, 0x21, 0x2f, 0x29, 0x2f,
++ 0x29, 0x2f, 0x29, 0x29, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xf8, 0x08, 0xe8, 0x28, 0xe8,
++ 0x28, 0xe8, 0x28, 0x68, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7c, 0x13, 0x12, 0x12, 0x1f,
++ 0x72, 0x12, 0x13, 0x12, 0x12, 0x32, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x09, 0x09, 0x7f, 0x01, 0x09,
++ 0x09, 0x11, 0x23, 0x01, 0x06, 0x78, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x20,
++ 0x10, 0x28, 0x48, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x11, 0x1f,
++ 0x11, 0x11, 0x1f, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x20, 0x10, 0xfc, 0x00, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0xf0, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x0b, 0x0a, 0x16, 0x3b,
++ 0x56, 0x16, 0x13, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x28, 0x24, 0xfc, 0x20, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0xa8, 0xf8, 0xa8, 0xa8, 0xb8, 0x00, 0x00,
++ 0x04, 0x18, 0x77, 0x10, 0x13, 0x7e, 0x13, 0x1a,
++ 0x37, 0x34, 0x52, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xa8, 0x84, 0x94, 0x70, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x7f, 0x05, 0x1f, 0x61, 0x06, 0x18, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0xfc, 0x40, 0xf0, 0x2c, 0x20, 0xc0, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x7f, 0x19, 0x6f, 0x01, 0x3f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0xfc, 0x30, 0xec, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x7f, 0x0a, 0x1b, 0x6a, 0x12, 0x06, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0xfc, 0x20, 0x50, 0xac, 0xa0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x21, 0x26, 0x40, 0x00, 0x00,
++ 0x80, 0x90, 0x88, 0xfc, 0x80, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x64, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x0f, 0x0f, 0x7f,
++ 0x07, 0x1c, 0x67, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0xe0, 0xfc,
++ 0xc0, 0x70, 0xcc, 0x40, 0xc0, 0x40, 0x00, 0x00,
++ 0x00, 0x0f, 0x09, 0x08, 0x08, 0x7f, 0x12, 0x11,
++ 0x11, 0x10, 0x3f, 0x20, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x90, 0x90, 0xfc, 0x10, 0x10,
++ 0x10, 0x10, 0xfc, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x17, 0x09, 0x49, 0x21,
++ 0x29, 0x09, 0x17, 0x11, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x58, 0xfc, 0xf0, 0x50, 0xf0,
++ 0x50, 0xf0, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x01, 0x3f, 0x08, 0x04, 0x7f,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x20, 0x40, 0xfc,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x0a, 0x0a, 0x0a, 0x1f, 0x12, 0x32, 0x53, 0x12,
++ 0x12, 0x12, 0x14, 0x14, 0x18, 0x13, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xa0, 0x7c, 0x48, 0xc8, 0xa8,
++ 0xa8, 0xb0, 0x90, 0xb0, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x10, 0x13, 0x30, 0x57, 0x11,
++ 0x13, 0x14, 0x13, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xf8, 0xa0, 0xfc, 0x50,
++ 0xf8, 0x44, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x1f, 0x10, 0x3f, 0x40, 0x00,
++ 0x1f, 0x10, 0x10, 0x10, 0x10, 0x0f, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x88, 0x88, 0x88,
++ 0x88, 0xb0, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x11, 0x01, 0x7f,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0xfc,
++ 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x08, 0x7f, 0x22, 0x12, 0x14,
++ 0x7f, 0x08, 0x3e, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xb0, 0x80, 0xf8, 0xc8,
++ 0xa8, 0xb0, 0x90, 0xb0, 0xc8, 0x84, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x1f, 0x02, 0x7f, 0x09,
++ 0x17, 0x61, 0x1f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x80, 0xfc, 0x20,
++ 0xd0, 0x0c, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x40, 0x1f, 0x01, 0x01,
++ 0x1f, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xf0, 0x00, 0x00,
++ 0xf0, 0x00, 0x20, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x10, 0x54, 0x57, 0x57, 0x54,
++ 0x55, 0x7c, 0x47, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0xf8, 0x90, 0x60, 0xb0, 0x4c, 0xf8, 0x40,
++ 0xf0, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x11, 0x1f, 0x02, 0x07, 0x3c, 0x03, 0x0d, 0x77,
++ 0x01, 0x0f, 0x01, 0x3f, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0xf0, 0x00, 0xe0, 0x40, 0x80, 0x60, 0xdc,
++ 0x00, 0xe0, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x1f, 0x00, 0x1e, 0x12, 0x1e,
++ 0x12, 0x1e, 0x12, 0x22, 0x22, 0x47, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0xf0, 0x00, 0x78, 0x48, 0x78,
++ 0x48, 0x78, 0x48, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x11, 0x11, 0x12, 0x17, 0x18,
++ 0x13, 0x12, 0x12, 0x22, 0x22, 0x41, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf8, 0x08, 0xc8, 0x48,
++ 0xc8, 0x70, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7e, 0x13, 0x14, 0x10, 0x1f,
++ 0x72, 0x12, 0x12, 0x12, 0x12, 0x31, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0xc8, 0x48, 0x48, 0xc8,
++ 0x48, 0x30, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x11, 0x10, 0x1f, 0x11,
++ 0x33, 0x54, 0x13, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xf0, 0xa0, 0xfc, 0x50,
++ 0xf8, 0x44, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x0f, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x43, 0x0e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x88, 0x88, 0x48,
++ 0x50, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x02, 0x02, 0x03, 0x02,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0xe0, 0x00, 0x00,
++ 0x00, 0x1e, 0x12, 0x12, 0x12, 0x1e, 0x12, 0x12,
++ 0x1e, 0x12, 0x12, 0x22, 0x23, 0x46, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x48, 0x78, 0x48, 0x48,
++ 0x78, 0x48, 0x88, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x43, 0x20, 0x20, 0x07, 0x00,
++ 0x08, 0x08, 0x10, 0x11, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x90, 0x88, 0x38, 0xc4, 0x04, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x43, 0x22, 0x27, 0x08, 0x03,
++ 0x0a, 0x0a, 0x12, 0x12, 0x22, 0x21, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0xc8, 0x48, 0xc8,
++ 0x70, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f, 0x3f, 0x00,
++ 0x01, 0x01, 0x03, 0x14, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0xf8, 0x60,
++ 0x80, 0x00, 0x00, 0x90, 0x48, 0x44, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x11, 0x13, 0x20, 0x3c, 0x65,
++ 0x25, 0x25, 0x25, 0x3d, 0x25, 0x20, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x08, 0xe8, 0x28, 0x28, 0xe8,
++ 0x30, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x12, 0x15, 0x65, 0x28, 0x18, 0x27, 0x7d,
++ 0x19, 0x35, 0x35, 0x31, 0x52, 0x14, 0x00, 0x00,
++ 0x20, 0x38, 0xc8, 0x30, 0xe8, 0x24, 0xf8, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0xe0, 0x3c, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x3d, 0x26, 0x24, 0x3d,
++ 0x25, 0x25, 0x25, 0x25, 0x25, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x04, 0xe4, 0x24, 0x24, 0xe4,
++ 0x38, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x01, 0x7f, 0x01,
++ 0x01, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xfc, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x7c, 0x44, 0x44, 0x7c,
++ 0x44, 0x44, 0x7c, 0x44, 0x41, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x88, 0x88, 0xf8,
++ 0x88, 0x88, 0xf8, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x21, 0x1f, 0x10, 0x03, 0x7f,
++ 0x10, 0x13, 0x10, 0x17, 0x2c, 0x43, 0x00, 0x00,
++ 0x40, 0xfc, 0xc0, 0xf0, 0x20, 0xe0, 0x5c, 0xf8,
++ 0x40, 0xf8, 0x40, 0xfc, 0x40, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x28, 0x0c, 0x0b, 0x0e, 0x70, 0x00, 0x00, 0x00,
++ 0x40, 0x78, 0xd0, 0x20, 0x70, 0xac, 0xf8, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x7f, 0x09, 0x09, 0x11, 0x77, 0x11, 0x16,
++ 0x11, 0x03, 0x0c, 0x74, 0x07, 0x18, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0x10, 0xf0, 0xfc, 0x50, 0x4c,
++ 0x40, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x25, 0x3e, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x78, 0x48,
++ 0x48, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x02, 0x1f, 0x12, 0x1f, 0x12, 0x1f, 0x00, 0x7f,
++ 0x0f, 0x08, 0x0f, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x80, 0xf0, 0x90, 0xf0, 0x90, 0xf0, 0x00, 0xfc,
++ 0xe0, 0x20, 0xe0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x04, 0x3f, 0x04, 0x04,
++ 0x7f, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0x78, 0xc8, 0x50, 0x50, 0xe0, 0x50, 0x48,
++ 0xc4, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x13, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1d, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x40, 0x78, 0xd0, 0x20, 0x70, 0xac, 0xf8, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x0c, 0x12, 0x2a, 0x49, 0x3e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x24, 0x26, 0x3a, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0xe8, 0x28, 0x28, 0xe8,
++ 0xb0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x12, 0x17, 0x14, 0x17,
++ 0x17, 0x17, 0x14, 0x27, 0x2d, 0x52, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xd0, 0x50, 0xd0,
++ 0xd0, 0xf4, 0x0c, 0xfc, 0x54, 0xe4, 0x00, 0x00,
++ 0x00, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x2d, 0x2d,
++ 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x5b, 0x00, 0x00,
++ 0x10, 0x20, 0x78, 0x48, 0x78, 0x48, 0x78, 0x7c,
++ 0x40, 0x7c, 0x34, 0xf4, 0xc4, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x01, 0x01, 0x1f, 0x00, 0x00,
++ 0x00, 0x09, 0x0e, 0x14, 0x23, 0x40, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0x00, 0x00, 0xf0, 0x10, 0x20,
++ 0x40, 0x80, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x11, 0x10, 0x37, 0x54, 0x1f,
++ 0x10, 0x10, 0x10, 0x11, 0x16, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0xfc, 0x44, 0xfc,
++ 0x40, 0xf8, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x11, 0x09, 0x0a, 0x7f, 0x00,
++ 0x1f, 0x11, 0x11, 0x11, 0x1f, 0x11, 0x00, 0x00,
++ 0x08, 0x48, 0xc8, 0x48, 0x48, 0x48, 0xc8, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x17, 0x7c, 0x10, 0x10, 0x10,
++ 0x10, 0x1c, 0x61, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x78,
++ 0x88, 0x88, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x09, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x11, 0x22, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x40, 0x40, 0x78, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x56, 0x57, 0x55, 0x55,
++ 0x55, 0x55, 0x59, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x08, 0x08, 0x08, 0x07, 0x01,
++ 0x04, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xf0, 0x00,
++ 0x80, 0x90, 0x08, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x17, 0x39, 0x35, 0x35, 0x51,
++ 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f,
++ 0x10, 0x10, 0x11, 0x22, 0x2c, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x80, 0xfc,
++ 0x80, 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x3f, 0x04,
++ 0x7f, 0x09, 0x15, 0x67, 0x19, 0x03, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xf8, 0x40,
++ 0xfc, 0x20, 0x50, 0xcc, 0x30, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x20, 0x20, 0x20, 0x1f, 0x02,
++ 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x30,
++ 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x0f, 0x08, 0x0f, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xe0, 0x20, 0xe0, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x7e, 0x09, 0x1c, 0x1b, 0x1b,
++ 0x2b, 0x2c, 0x4b, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0xa0, 0xfc, 0x50,
++ 0xf8, 0x44, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x3f, 0x20, 0x3f, 0x2f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0xe8, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7d,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x40, 0x40, 0x78, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x3c, 0x24, 0x24, 0x3c,
++ 0x24, 0x24, 0x24, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x78, 0x48,
++ 0x48, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x01, 0x39, 0x2f, 0x29, 0x2f, 0x38, 0x2b, 0x2a,
++ 0x3b, 0x2a, 0x29, 0x29, 0x2e, 0x58, 0x00, 0x00,
++ 0x08, 0x08, 0xd0, 0x10, 0xe0, 0x08, 0xc8, 0x50,
++ 0xe4, 0x44, 0x88, 0xc8, 0x10, 0x20, 0x00, 0x00,
++ 0x01, 0x39, 0x03, 0x7d, 0x01, 0x3d, 0x01, 0x3c,
++ 0x03, 0x3c, 0x25, 0x26, 0x3c, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xf0, 0x10, 0xf0, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x04, 0x18, 0x6a, 0x25, 0x19, 0x69, 0x0d, 0x15,
++ 0x65, 0x0c, 0x14, 0x64, 0x05, 0x1a, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8,
++ 0x68, 0x60, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x06, 0x38, 0x24, 0x26, 0x3a, 0x6f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x88, 0xf8, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7f,
++ 0x09, 0x2a, 0x1d, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0x50, 0x88, 0xf4, 0xa0, 0xa0, 0xf8,
++ 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x2b, 0x28, 0x30, 0x28, 0x24,
++ 0x24, 0x24, 0x24, 0x39, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x78, 0x48,
++ 0x48, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x48, 0x48, 0x4f, 0x48, 0x48,
++ 0x48, 0x78, 0x48, 0x41, 0x06, 0x18, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x48, 0x40, 0xfc, 0x40, 0x40,
++ 0x60, 0xa0, 0x90, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7f, 0x0a, 0x4a, 0x2c, 0x28,
++ 0x7f, 0x0c, 0x12, 0x12, 0x20, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x7c, 0x04, 0x04, 0x04,
++ 0x04, 0x1c, 0x64, 0x04, 0x04, 0x04, 0x00, 0x00,
++ 0x80, 0x80, 0x88, 0x88, 0x90, 0xa0, 0xc0, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x0a, 0x09, 0x17, 0x11, 0x30, 0x57, 0x10,
++ 0x13, 0x10, 0x17, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0xa0, 0xa8, 0xb0, 0xfc, 0x10, 0xa0, 0xfc, 0x40,
++ 0xf8, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x02,
++ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20,
++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x1f, 0x01,
++ 0x7f, 0x15, 0x2f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xf0, 0x00,
++ 0xfc, 0x50, 0xe8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x7f, 0x11, 0x10, 0x13, 0x1c,
++ 0x71, 0x10, 0x17, 0x10, 0x13, 0x3c, 0x00, 0x00,
++ 0xa0, 0xa8, 0xb0, 0xfc, 0x10, 0xa0, 0xf8, 0x40,
++ 0xf0, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x18, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x60, 0x50, 0x48, 0x44,
++ 0x44, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x28, 0x28, 0x3e, 0x29, 0x29, 0x4a,
++ 0x0e, 0x78, 0x08, 0x08, 0x09, 0x0e, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90,
++ 0x50, 0x60, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x78, 0x4b, 0x48, 0x7f, 0x49, 0x49, 0x7a,
++ 0x4c, 0x4b, 0x78, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0x20, 0x24, 0x5c,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x19, 0x71, 0x11, 0x11, 0x7d, 0x10, 0x19,
++ 0x36, 0x35, 0x50, 0x11, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x40, 0x58,
++ 0x64, 0x90, 0x60, 0x88, 0x30, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x08, 0x3f, 0x22, 0x7e, 0x04,
++ 0x08, 0x0e, 0x78, 0x08, 0x09, 0x1a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x41, 0x21, 0x22, 0x04, 0x0b,
++ 0x09, 0x10, 0x10, 0x20, 0x21, 0x2e, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0xf0,
++ 0x10, 0x90, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x08, 0x0e, 0x12, 0x13, 0x2a,
++ 0x45, 0x05, 0x09, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x50, 0x88, 0x8c, 0xf4, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x13, 0x7e, 0x12, 0x12, 0x12,
++ 0x16, 0x1b, 0x65, 0x05, 0x09, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x04, 0xfc, 0x20, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0x24, 0x24, 0x24, 0xfc, 0x04, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x55, 0x55, 0x56, 0x55,
++ 0x57, 0x54, 0x58, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x48, 0x50,
++ 0xfc, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x04, 0x09, 0x1f, 0x61, 0x05,
++ 0x04, 0x7f, 0x04, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x20, 0xf0, 0x0c, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x03, 0x05, 0x05,
++ 0x09, 0x11, 0x2f, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x80, 0x40, 0x40,
++ 0x20, 0x10, 0xe8, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x06, 0x7b, 0x2a, 0x1c, 0x7f, 0x1c, 0x1a, 0x2a,
++ 0x7e, 0x2b, 0x3e, 0x2a, 0x3e, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x68, 0xd8, 0xd8, 0x48,
++ 0xd8, 0x68, 0x48, 0x48, 0x48, 0xd8, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x0a, 0x09, 0x09,
++ 0x09, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x03, 0x08, 0x08, 0x1f, 0x21, 0x42, 0x0c, 0x30,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0xc0, 0x40, 0x20, 0xf0, 0x28, 0x24, 0x20, 0xc0,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x17, 0x1a, 0x12, 0x17,
++ 0x10, 0x17, 0x20, 0x3f, 0x40, 0x01, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xfc, 0x38, 0xd4, 0x30, 0xc0,
++ 0x80, 0xf8, 0x80, 0xfc, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x1f, 0x17, 0x1a, 0x12,
++ 0x17, 0x10, 0x23, 0x2e, 0x43, 0x02, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0xfc, 0x38, 0xd4, 0x90,
++ 0xfc, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x1f, 0x12, 0x1f, 0x17, 0x1a, 0x17, 0x14,
++ 0x17, 0x17, 0x25, 0x22, 0x4c, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xfc, 0x70, 0xa8, 0xf4, 0x90,
++ 0xf0, 0xf0, 0xa8, 0xfc, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x12, 0x1f, 0x12, 0x17,
++ 0x16, 0x1a, 0x13, 0x22, 0x42, 0x02, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0x20, 0xfc, 0x20, 0x70,
++ 0xf0, 0xa8, 0x24, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x13,
++ 0x10, 0x1f, 0x60, 0x00, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x09, 0x7e, 0x12, 0x13, 0x12,
++ 0x3c, 0x24, 0x07, 0x0a, 0x12, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x70,
++ 0x70, 0xa8, 0x24, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4b, 0x48, 0x48, 0x7f, 0x48,
++ 0x48, 0x49, 0x7a, 0x4c, 0x48, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0xe0,
++ 0xe0, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x1a, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x10, 0x2f, 0x49, 0x09, 0x7f,
++ 0x09, 0x09, 0x1f, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xe0, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0xf8, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4a, 0x4b, 0x4a, 0x4a, 0x4b,
++ 0x48, 0x7b, 0x48, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x7e, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x0f, 0x09, 0x0e, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xfc, 0x90, 0x08, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x0f, 0x08, 0x0f, 0x7f,
++ 0x05, 0x1f, 0x69, 0x09, 0x09, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0xe0, 0x20, 0xe0, 0xfc,
++ 0x40, 0xf0, 0x2c, 0x20, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x24, 0x27, 0x24, 0x25, 0x4e, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x1a, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x48, 0x40, 0x60, 0x60,
++ 0x60, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x40, 0x78, 0xc8, 0xf8,
++ 0x48, 0x78, 0x48, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3b, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x88, 0x50, 0xfc, 0x30, 0xf8, 0xb8, 0xd8, 0xf8,
++ 0xf8, 0x10, 0xfc, 0x90, 0x50, 0x30, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x12, 0x12, 0x3e, 0x35,
++ 0x34, 0x51, 0x51, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0xfc, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xfc, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x02, 0x02, 0x12, 0x12,
++ 0x22, 0x42, 0x04, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x40, 0x40, 0x50, 0x48,
++ 0x44, 0x44, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x30, 0x53, 0x10,
++ 0x10, 0x17, 0x10, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x00, 0xf8, 0x40,
++ 0x40, 0xfc, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02,
++ 0x02, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x13, 0x1c,
++ 0x70, 0x11, 0x12, 0x14, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0xe0,
++ 0xe0, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x1f, 0x01,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x00,
++ 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x20, 0x20, 0x03, 0x08,
++ 0x08, 0x09, 0x11, 0x12, 0x24, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0xe0,
++ 0xe0, 0x50, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x01, 0x21, 0x11, 0x12, 0x07, 0x00, 0x70, 0x11,
++ 0x12, 0x12, 0x11, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x40, 0x80, 0x00,
++ 0x04, 0x04, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x32, 0x52, 0x12,
++ 0x14, 0x14, 0x18, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x28, 0x20, 0x90,
++ 0x50, 0x48, 0x04, 0x80, 0x60, 0x10, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x29, 0x2b, 0x3b, 0x25,
++ 0x2b, 0x3f, 0x25, 0x2f, 0x35, 0x25, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0xd8, 0xd8,
++ 0xf8, 0x68, 0x58, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x13, 0x16, 0x1b, 0x12,
++ 0x13, 0x10, 0x27, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xfc, 0x30, 0xd8, 0xf4, 0x10,
++ 0xf0, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02,
++ 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x35, 0x35, 0x33, 0x52,
++ 0x13, 0x17, 0x10, 0x10, 0x11, 0x1e, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xf8, 0xa8,
++ 0xf8, 0xf8, 0x90, 0x60, 0xb0, 0x0c, 0x00, 0x00,
++ 0x21, 0x11, 0x1f, 0x41, 0x2f, 0x20, 0x0f, 0x18,
++ 0x1a, 0x2a, 0x2b, 0x4a, 0x48, 0x48, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0xfc, 0x80, 0xf8, 0x88,
++ 0xa8, 0xa8, 0xe8, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x07, 0x15,
++ 0x17, 0x23, 0x21, 0x40, 0x41, 0x4e, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xf8, 0x28,
++ 0xf8, 0xf0, 0x20, 0xc0, 0xe0, 0x1c, 0x00, 0x00,
++ 0x04, 0x7f, 0x0f, 0x08, 0x0f, 0x0f, 0x1f, 0x12,
++ 0x1f, 0x3f, 0x04, 0x02, 0x07, 0x78, 0x00, 0x00,
++ 0x40, 0xfc, 0xe0, 0x20, 0xe0, 0xe0, 0xf0, 0x90,
++ 0xf0, 0xe0, 0x40, 0x80, 0x80, 0x78, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x48, 0x48, 0x4f, 0x48, 0x48,
++ 0x49, 0x7a, 0x4c, 0x48, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0xe0, 0xe0,
++ 0x50, 0x48, 0x44, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x01, 0x03,
++ 0x05, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x80,
++ 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x10, 0x3e, 0x2a, 0x3e, 0x2b, 0x3e, 0x2c,
++ 0x0d, 0x0d, 0x16, 0x17, 0x24, 0x43, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x70, 0x70,
++ 0xa8, 0x24, 0xa0, 0xa0, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x1f, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10,
++ 0x00, 0x00, 0x00, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x4d, 0x3f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x08, 0x7f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x30, 0xf8, 0x20, 0xe0, 0x20,
++ 0xe0, 0x20, 0xfc, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x11, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x24, 0x24, 0xfc, 0x24, 0x24, 0xfc,
++ 0x24, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x45, 0x15, 0x14, 0x25,
++ 0x07, 0x19, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x50, 0x48, 0x84, 0x24,
++ 0xe0, 0x00, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x23, 0x54, 0x15, 0x27, 0x19,
++ 0x0f, 0x09, 0x0f, 0x01, 0x01, 0x3e, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0x90, 0x28, 0xe4, 0x00,
++ 0xe0, 0x20, 0xe0, 0x20, 0xf0, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x40, 0x23, 0x20, 0x07, 0x11,
++ 0x13, 0x14, 0x23, 0x20, 0x41, 0x46, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0xa0, 0xfc, 0x10,
++ 0xe8, 0x44, 0xf8, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x01, 0x7f, 0x0f, 0x08, 0x7f,
++ 0x08, 0x0f, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xfc, 0xe0, 0x20, 0xfc,
++ 0x20, 0xe0, 0x88, 0x50, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x18, 0x70, 0x11, 0x12, 0x7c, 0x13, 0x18,
++ 0x34, 0x34, 0x52, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xe8, 0x04, 0xf8, 0x10,
++ 0x60, 0x28, 0xa4, 0x84, 0x90, 0x70, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x25, 0x3d,
++ 0x25, 0x25, 0x25, 0x26, 0x26, 0x4c, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0x0c, 0x70, 0x64, 0x64, 0x68,
++ 0x50, 0x50, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x13,
++ 0x3d, 0x24, 0x06, 0x0a, 0x10, 0x23, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xb0, 0xa8, 0xa8, 0xa4, 0x2c,
++ 0x28, 0x70, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x08, 0x4a, 0x2b, 0x2c, 0x08, 0x7f, 0x08, 0x1c,
++ 0x1b, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0xf8, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x10, 0x1f,
++ 0x10, 0x10, 0x10, 0x16, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x88, 0x80, 0xfc,
++ 0x40, 0x40, 0x24, 0x14, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x79, 0x49, 0x49, 0x79, 0x49, 0x49, 0x79,
++ 0x49, 0x49, 0x79, 0x49, 0x41, 0x06, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x10, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x04, 0x19, 0x0a, 0x7e, 0x0a, 0x1b,
++ 0x1c, 0x2b, 0x48, 0x08, 0x09, 0x1a, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x90, 0x50, 0x20, 0xd0, 0x4c,
++ 0x40, 0xf8, 0x48, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x12, 0x1f, 0x00, 0x3f,
++ 0x21, 0x43, 0x1e, 0x01, 0x03, 0x3c, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x90, 0xf0, 0x00, 0xfc,
++ 0x08, 0xe0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x1a, 0x2a, 0x7f, 0x0a, 0x0a,
++ 0x0a, 0x7f, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0xa0, 0xa0, 0xf8, 0xa0, 0xa0,
++ 0xa0, 0xfc, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x04, 0x3f, 0x09, 0x0f, 0x11,
++ 0x21, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x40, 0x20, 0xf0, 0x08, 0x00, 0xf0, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x02, 0x01, 0x00, 0x7f, 0x00, 0x01,
++ 0x02, 0x04, 0x18, 0x60, 0x00, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x20, 0x40, 0x80, 0xfc, 0x88, 0x90,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x01, 0x3e,
++ 0x14, 0x7f, 0x1b, 0x2c, 0x48, 0x19, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x40, 0x7c,
++ 0xd0, 0x70, 0xac, 0xf8, 0x48, 0x98, 0x00, 0x00,
++ 0x04, 0x3e, 0x05, 0x04, 0x7f, 0x14, 0x14, 0x3c,
++ 0x34, 0x34, 0x36, 0x3f, 0x63, 0x02, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x08, 0x18, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x09, 0x0a, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x00, 0xf8, 0x88, 0x88, 0xf8,
++ 0x20, 0xb0, 0xa8, 0x24, 0x24, 0x60, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x11, 0x7d, 0x25, 0x26, 0x25,
++ 0x75, 0x49, 0x0d, 0x15, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x50, 0x78, 0xc0, 0x3c, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3a, 0x24, 0x06, 0x0a, 0x10, 0x23, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8,
++ 0xa4, 0xa8, 0x90, 0xb0, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x01, 0x7f, 0x00, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0x00, 0xfc, 0x00, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x02, 0x02, 0x07, 0x04, 0x0c, 0x12, 0x21, 0x02,
++ 0x07, 0x1c, 0x64, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0x40, 0x80, 0x00, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x18, 0x6f, 0x00, 0x3c, 0x24,
++ 0x24, 0x24, 0x3c, 0x24, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x30, 0xec, 0x00, 0xf8, 0x88,
++ 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x7c, 0x44, 0x44, 0x44, 0x7c, 0x44, 0x44,
++ 0x44, 0x7c, 0x45, 0x41, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0x88, 0xf8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x02,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x18,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x24, 0x12, 0x12, 0x00, 0x0f, 0x71, 0x11,
++ 0x12, 0x14, 0x10, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0x90, 0x90, 0xa0, 0x80, 0xf8, 0xc0, 0xa0,
++ 0x90, 0x88, 0x80, 0x80, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2b, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x90, 0x50, 0x20, 0x40,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4b, 0x4a, 0x4b, 0x4b,
++ 0x4a, 0x7b, 0x4a, 0x45, 0x05, 0x08, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xfc, 0xa4, 0x54, 0x04, 0x18, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x10, 0x7d, 0x27, 0x24, 0x24,
++ 0x77, 0x48, 0x0c, 0x14, 0x27, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xa0, 0x10, 0xf8, 0x48, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x28, 0x28, 0x28, 0x3e, 0x28, 0x48, 0x08,
++ 0x0e, 0x78, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x88, 0x88, 0x90, 0xa0, 0xc0,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x24, 0x27, 0x05, 0x17,
++ 0x17, 0x15, 0x25, 0x2a, 0x4c, 0x50, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0xe8, 0x28, 0x68,
++ 0xb0, 0x10, 0xb0, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x04, 0x07, 0x08, 0x11, 0x7f, 0x11, 0x11, 0x1f,
++ 0x12, 0x02, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0xc0, 0x80, 0x00, 0xf0, 0x10, 0x10, 0xf0,
++ 0x90, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x29, 0x29, 0x49, 0x09, 0x09, 0x08, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x20,
++ 0xfc, 0x24, 0x24, 0x24, 0x38, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x15, 0x65, 0x19, 0x19, 0x25, 0x7c,
++ 0x13, 0x3a, 0x36, 0x32, 0x52, 0x10, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x40,
++ 0xf8, 0x48, 0x48, 0x48, 0x70, 0x40, 0x00, 0x00,
++ 0x10, 0x17, 0x14, 0x64, 0x1b, 0x1a, 0x26, 0x7e,
++ 0x12, 0x3a, 0x36, 0x36, 0x53, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0xf8, 0xa8, 0xa8, 0xe8,
++ 0xa8, 0xe8, 0xa8, 0xa8, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x02, 0x3f, 0x24, 0x24, 0x27,
++ 0x24, 0x27, 0x24, 0x24, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x48, 0x48, 0xc8,
++ 0x48, 0xc8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x09, 0x7e, 0x08, 0x3f, 0x09, 0x7f, 0x11,
++ 0x1d, 0x25, 0x55, 0x09, 0x16, 0x61, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0xfc, 0x54, 0x74, 0x54,
++ 0x74, 0x54, 0xfc, 0x04, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7c, 0x11, 0x11, 0x19, 0x11,
++ 0x31, 0x50, 0x17, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0xa0, 0xa0, 0xfc, 0xa0, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x7e, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x28, 0x4f, 0x08, 0x09, 0x0e, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x01, 0x01, 0x1f, 0x11,
++ 0x10, 0x10, 0x10, 0x10, 0x21, 0x46, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x10, 0x08, 0xfc, 0x00,
++ 0x90, 0x90, 0x60, 0x64, 0x9c, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x08, 0x08, 0x07, 0x01, 0x02,
++ 0x7f, 0x04, 0x0f, 0x10, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x00, 0x00,
++ 0xfc, 0x20, 0x40, 0xc0, 0x30, 0x08, 0x00, 0x00,
++ 0x1f, 0x00, 0x01, 0x01, 0x7f, 0x01, 0x03, 0x1f,
++ 0x12, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0xf0, 0x60, 0x80, 0x00, 0xfc, 0x00, 0x00, 0xf0,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x1e, 0x02, 0x02, 0x3f, 0x02, 0x02,
++ 0x7f, 0x02, 0x02, 0x02, 0x02, 0x01, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
++ 0xfc, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x08, 0x4b, 0x30, 0x10, 0x37, 0x48, 0x08, 0x1b,
++ 0x2a, 0x4a, 0x0a, 0x0a, 0x0f, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0x60, 0xfc, 0x40, 0xc0, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x08, 0x07, 0x00, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x17, 0x66, 0x1a, 0x1b, 0x26, 0x7f,
++ 0x12, 0x3a, 0x36, 0x36, 0x52, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xa8, 0xc8, 0xf8, 0x48, 0xf8,
++ 0x88, 0x88, 0x88, 0x78, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x7e, 0x09, 0x7e, 0x08,
++ 0x1d, 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x58, 0xe0, 0x40, 0x5c,
++ 0xe0, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x2f, 0x40, 0x7f, 0x03,
++ 0x3d, 0x06, 0x39, 0x06, 0x78, 0x03, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0xe8, 0x00, 0xfc, 0x48,
++ 0xd0, 0xa0, 0x90, 0x88, 0x84, 0x00, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x1f, 0x10, 0x37, 0x50, 0x17,
++ 0x10, 0x17, 0x15, 0x15, 0x17, 0x15, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x28, 0x30, 0xfc, 0x20, 0x78,
++ 0xc8, 0x78, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x03, 0x03, 0x05,
++ 0x09, 0x11, 0x21, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x80, 0x80, 0x40,
++ 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x25, 0x3f, 0x25, 0x3f, 0x04, 0x3f,
++ 0x06, 0x78, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x30, 0x28, 0x28, 0xfc, 0x20, 0x20, 0x50, 0x50,
++ 0x88, 0x04, 0x90, 0x48, 0x44, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x10,
++ 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01,
++ 0x1f, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00,
++ 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0f, 0x12, 0x12, 0x22, 0x44,
++ 0x04, 0x08, 0x10, 0x01, 0x02, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x09, 0x0c, 0x12, 0x2b, 0x48, 0x3c, 0x24, 0x3f,
++ 0x24, 0x3c, 0x28, 0x25, 0x3b, 0x62, 0x00, 0x00,
++ 0x08, 0x88, 0x90, 0xfc, 0x90, 0x90, 0x90, 0xfc,
++ 0x90, 0x90, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x03, 0x03, 0x03,
++ 0x05, 0x05, 0x09, 0x11, 0x21, 0x40, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x10,
++ 0x1f, 0x10, 0x21, 0x22, 0x4c, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x88, 0x80,
++ 0xfc, 0x80, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x08, 0x09, 0x4a, 0x2a, 0x2c, 0x09, 0x7e, 0x0c,
++ 0x1a, 0x1a, 0x28, 0x48, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0xc8, 0x68,
++ 0x58, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x09, 0x7f, 0x09, 0x09, 0x0f, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xe0, 0xf8, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x27,
++ 0x24, 0x24, 0x27, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xc8,
++ 0x48, 0x48, 0xc8, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x20,
++ 0x22, 0x2a, 0x2a, 0x32, 0x21, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x88,
++ 0x88, 0x28, 0x58, 0x58, 0xc8, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0e, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x88, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0f, 0x09, 0x15, 0x13, 0x21,
++ 0x42, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10,
++ 0xd0, 0x30, 0x1c, 0x10, 0x20, 0xc0, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x11, 0x11, 0x17, 0x19, 0x71,
++ 0x11, 0x11, 0x11, 0x10, 0x10, 0x0f, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x30, 0xd0, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x60, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x10, 0x11, 0x01, 0x07, 0x10,
++ 0x13, 0x22, 0x22, 0x42, 0x43, 0x02, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xa0, 0x10, 0x38, 0xc4, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x08, 0x08, 0x10, 0x11, 0x31,
++ 0x53, 0x14, 0x10, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x80, 0xf0, 0x90, 0x50,
++ 0x20, 0xa0, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x02, 0x0c, 0x32, 0x01, 0x06, 0x78, 0x3f, 0x12,
++ 0x1e, 0x12, 0x1e, 0x13, 0x7e, 0x02, 0x00, 0x00,
++ 0xc0, 0x30, 0x48, 0x80, 0x60, 0x1c, 0xf8, 0x50,
++ 0x70, 0x48, 0x44, 0x44, 0x78, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x12, 0x1e, 0x12, 0x12, 0x1e,
++ 0x12, 0x13, 0x1e, 0x62, 0x02, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3f, 0x2a, 0x2a, 0x3e, 0x2b, 0x2a, 0x3e,
++ 0x08, 0x3e, 0x08, 0x0e, 0x70, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x60, 0x20, 0xfc, 0x28, 0x30,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x7c, 0x04, 0x05, 0x3d, 0x26, 0x20, 0x3c,
++ 0x24, 0x25, 0x05, 0x06, 0x08, 0x30, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x20, 0x20, 0xb0, 0xa8,
++ 0xa8, 0x24, 0x24, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x1f, 0x11, 0x21, 0x01, 0x7f,
++ 0x01, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x80, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x13, 0x12, 0x12, 0x12,
++ 0x12, 0x12, 0x12, 0x22, 0x22, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10,
++ 0x10, 0x60, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x11, 0x21, 0x49, 0x09, 0x12, 0x14, 0x37,
++ 0x51, 0x11, 0x10, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0xf0,
++ 0x10, 0x20, 0xc0, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0d, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x88, 0x08, 0x88, 0x48,
++ 0x48, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x27, 0x14, 0x0f, 0x14, 0x67,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xc8, 0x50, 0xe0, 0x58, 0xc4,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x25, 0x25, 0x3e, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0xa8, 0xa0,
++ 0xa0, 0xa0, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x27, 0x3c, 0x2b, 0x08, 0x2d,
++ 0x2b, 0x29, 0x29, 0x2f, 0x39, 0x61, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x90, 0xfc,
++ 0x20, 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00,
++ 0x00, 0x09, 0x08, 0x08, 0x7e, 0x05, 0x24, 0x14,
++ 0x14, 0x08, 0x0e, 0x70, 0x00, 0x00, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x98, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x12, 0x1a, 0x36, 0x36,
++ 0x32, 0x53, 0x14, 0x11, 0x11, 0x12, 0x00, 0x00,
++ 0x40, 0x80, 0x38, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xb8, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x2a, 0x1c, 0x7f, 0x1c, 0x2a,
++ 0x7f, 0x12, 0x3c, 0x04, 0x1a, 0x63, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x7c, 0x90, 0x90,
++ 0x50, 0x60, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x12, 0x19, 0x25, 0x24, 0x79, 0x10, 0x7f,
++ 0x11, 0x55, 0x39, 0x31, 0x1e, 0x64, 0x00, 0x00,
++ 0x20, 0xf8, 0xa8, 0xf8, 0x20, 0xfc, 0x70, 0x50,
++ 0x70, 0x78, 0x48, 0x78, 0xc0, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x19, 0x37, 0x34, 0x37, 0x54,
++ 0x17, 0x14, 0x17, 0x14, 0x14, 0x15, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0x88, 0x98, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x1f, 0x7e, 0x12, 0x1e, 0x1e,
++ 0x12, 0x17, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0xf0, 0x9c, 0x90, 0x90, 0x90,
++ 0x10, 0x30, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x23, 0x22, 0x02, 0x0a,
++ 0x0b, 0x0a, 0x12, 0x12, 0x23, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x4f, 0x29, 0x2b, 0x0a, 0x1b,
++ 0x2b, 0x4a, 0x10, 0x15, 0x25, 0x48, 0x00, 0x00,
++ 0x80, 0xfc, 0xc0, 0x30, 0xfc, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0x98, 0xc0, 0x28, 0x14, 0xf4, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x00, 0x7d, 0x03, 0x3c, 0x03, 0x3a,
++ 0x03, 0x3a, 0x2b, 0x2a, 0x3a, 0x2a, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0x88, 0x98, 0x00, 0x00,
++ 0x10, 0x10, 0x7e, 0x10, 0x7d, 0x57, 0x7c, 0x57,
++ 0x7e, 0x13, 0x7e, 0x13, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x00, 0x79, 0x49, 0x4b, 0x4b, 0x4d, 0x49,
++ 0x49, 0x79, 0x49, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x90, 0x90, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x11, 0x31, 0x52, 0x13,
++ 0x15, 0x19, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x11, 0x11, 0x31, 0x57, 0x17,
++ 0x1a, 0x14, 0x11, 0x16, 0x11, 0x1e, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf0, 0xf0, 0xf0, 0xfc, 0x58,
++ 0xe8, 0xf4, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x04, 0x03, 0x1f, 0x11, 0x1f, 0x11,
++ 0x1f, 0x01, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x00, 0xf8, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x7f, 0x02, 0x02, 0x07, 0x06,
++ 0x05, 0x09, 0x08, 0x11, 0x26, 0x58, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10,
++ 0x20, 0x40, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x02, 0x02, 0x3f, 0x22, 0x7f, 0x04, 0x07, 0x0c,
++ 0x0f, 0x14, 0x27, 0x44, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xfc, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x05, 0x25, 0x39, 0x2b, 0x2b, 0x25, 0x27,
++ 0x2b, 0x3f, 0x21, 0x3f, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x20, 0x28, 0xc8, 0x58, 0x58, 0x28, 0x38,
++ 0x58, 0xf8, 0x08, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x15, 0x36, 0x54, 0x15, 0x16,
++ 0x11, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0xa0, 0x40, 0xb0, 0x0c,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x0f, 0x0f, 0x0f, 0x3f, 0x25,
++ 0x57, 0x23, 0x0e, 0x31, 0x07, 0x78, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0xe0, 0xe0, 0xfc, 0x38,
++ 0xe8, 0xe4, 0x40, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x10, 0x17, 0x11, 0x1d,
++ 0x71, 0x11, 0x11, 0x11, 0x17, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x10, 0xf0,
++ 0x10, 0xf0, 0x1c, 0xf0, 0x10, 0x10, 0x00, 0x00,
++ 0x02, 0x02, 0x7f, 0x04, 0x04, 0x0f, 0x0c, 0x17,
++ 0x24, 0x47, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x13, 0x12, 0x3a, 0x36,
++ 0x37, 0x52, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x40, 0x23, 0x22, 0x03, 0x12,
++ 0x13, 0x20, 0x2f, 0x40, 0x43, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x60, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xfc, 0x84, 0x04, 0x18, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x40, 0x23, 0x22, 0x02, 0x0b,
++ 0x0a, 0x0a, 0x13, 0x12, 0x22, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0xb0, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x09, 0x48, 0x30, 0x17, 0x30, 0x4b, 0x0a, 0x1a,
++ 0x2b, 0x4a, 0x0b, 0x0a, 0x33, 0x12, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8,
++ 0x38, 0x18, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x21, 0x11, 0x12, 0x7f, 0x0c, 0x3f, 0x2d, 0x2d,
++ 0x37, 0x33, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xa4, 0x20, 0xfc, 0x20, 0x20,
++ 0x30, 0x50, 0x50, 0x88, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x3f, 0x21, 0x21, 0x21,
++ 0x3f, 0x21, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x08, 0x08, 0x18, 0x14,
++ 0x35, 0x51, 0x12, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x80, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x08, 0x0a, 0x14, 0x19,
++ 0x37, 0x55, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0xa0, 0x90, 0x08, 0x48, 0x40, 0xa0, 0xa0, 0x10,
++ 0xf8, 0x14, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7f, 0x00, 0x3d, 0x02, 0x3d,
++ 0x00, 0x3c, 0x24, 0x25, 0x3d, 0x22, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xfc, 0xe0, 0x50, 0x48, 0xe4,
++ 0xa0, 0xb8, 0xa8, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x02, 0x22, 0x12, 0x1f, 0x02, 0x02, 0x73, 0x12,
++ 0x12, 0x14, 0x14, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x40, 0x7c, 0x88, 0x90,
++ 0xfc, 0x90, 0x90, 0xb0, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x00, 0x3f, 0x21,
++ 0x21, 0x3f, 0x20, 0x20, 0x20, 0x1f, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x00, 0xf8, 0x08,
++ 0x08, 0xf8, 0x08, 0x00, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x3e, 0x04, 0x3f, 0x15, 0x15, 0x7f, 0x15,
++ 0x15, 0x3f, 0x04, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x80, 0x78, 0x48, 0xd0, 0x50, 0x60, 0xd0, 0x48,
++ 0x44, 0xc4, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x0a, 0x0c, 0x0c,
++ 0x14, 0x16, 0x29, 0x4f, 0x38, 0x00, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x3e, 0x22, 0x3e, 0x00, 0x7f,
++ 0x55, 0x67, 0x5f, 0x49, 0x49, 0x4b, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0x30, 0x28, 0x38, 0xe4, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x02, 0x02, 0x05, 0x08, 0x10,
++ 0x00, 0x00, 0x00, 0x01, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0x08, 0x10, 0x90, 0x60,
++ 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x02, 0x01, 0x01, 0x7f, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x20, 0x40, 0x80, 0xfc, 0x08, 0x10,
++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x18, 0x6f, 0x01, 0x01,
++ 0x3f, 0x09, 0x09, 0x11, 0x21, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0xec, 0x00, 0x00,
++ 0xf8, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x07, 0x04, 0x04, 0x07, 0x04, 0x00,
++ 0x7f, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0xc0, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00,
++ 0x12, 0x09, 0x7f, 0x10, 0x17, 0x3f, 0x40, 0x07,
++ 0x07, 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x20, 0xd0, 0xf8, 0x04, 0xc0,
++ 0xc0, 0x00, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x09, 0x31, 0x2f, 0x27, 0x35, 0x27, 0x25, 0x37,
++ 0x2f, 0x21, 0x7f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x38, 0xe8, 0xc8, 0x58, 0xc8, 0x48, 0xd8,
++ 0xe8, 0x08, 0xfc, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x12, 0x0c, 0x08, 0x7f, 0x09, 0x0a,
++ 0x0c, 0x08, 0x08, 0x08, 0x08, 0x1b, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x17, 0x14, 0x27, 0x24, 0x67, 0x27, 0x24,
++ 0x27, 0x26, 0x2b, 0x2b, 0x32, 0x22, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0xf8, 0x40,
++ 0xf8, 0x48, 0xf8, 0xf8, 0x48, 0x58, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x12, 0x53, 0x24, 0x14, 0x08,
++ 0x0c, 0x12, 0x16, 0x3a, 0x61, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x08, 0x7e, 0x12, 0x13, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x11, 0x22, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x44, 0x09, 0x12, 0x04,
++ 0x18, 0x6f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0x20, 0x10, 0x90, 0x40,
++ 0x30, 0xec, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x10, 0x1f, 0x17, 0x10,
++ 0x17, 0x14, 0x27, 0x27, 0x44, 0x04, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0xf0, 0x90, 0xfc, 0xf0, 0x80,
++ 0xf0, 0x90, 0xf0, 0xf0, 0x90, 0xb0, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x10, 0x1f,
++ 0x71, 0x13, 0x14, 0x11, 0x12, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0x28, 0x48, 0xb0, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7d, 0x11, 0x10, 0x13, 0x18,
++ 0x77, 0x10, 0x12, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x38, 0xc8, 0x48, 0x50, 0x20, 0x40, 0xf8, 0x40,
++ 0xfc, 0x40, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x79, 0x11, 0x16, 0x12, 0x19,
++ 0x72, 0x17, 0x11, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x28, 0x28, 0xfc, 0xd0, 0x7c,
++ 0xd0, 0xfc, 0x50, 0x50, 0x7c, 0x40, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x4b, 0x48, 0x4f, 0x79, 0x4b,
++ 0x4e, 0x4b, 0x7a, 0x4b, 0x42, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xb8, 0x88, 0xf8, 0x20, 0xf8,
++ 0x40, 0xf0, 0x40, 0xf0, 0x40, 0xf8, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x19, 0x34, 0x37,
++ 0x31, 0x53, 0x54, 0x11, 0x12, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0x28, 0x48, 0xb0, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x08, 0x18, 0x1d, 0x1b,
++ 0x2a, 0x28, 0x48, 0x0b, 0x08, 0x08, 0x00, 0x00,
++ 0x88, 0x50, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x24,
++ 0xb8, 0x70, 0xa8, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x11, 0x08, 0x08, 0x47, 0x20, 0x20, 0x03, 0x08,
++ 0x08, 0x0f, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xfc, 0x40, 0x40, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x25, 0x21, 0x02, 0x10,
++ 0x11, 0x23, 0x25, 0x41, 0x41, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x10, 0x48, 0x48, 0xa0,
++ 0x10, 0xf8, 0x14, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x16, 0x35, 0x35, 0x3a, 0x50,
++ 0x11, 0x1f, 0x15, 0x25, 0x21, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x10, 0x48, 0x48, 0xa0,
++ 0x10, 0xfc, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x11, 0x1f, 0x11, 0x11,
++ 0x1f, 0x11, 0x11, 0x11, 0x21, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x4c, 0x12, 0x3f, 0x01, 0x0f,
++ 0x01, 0x3f, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x48, 0xb8, 0xf0, 0x00, 0xe0,
++ 0x00, 0xf8, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x3f, 0x01, 0x01, 0x1f, 0x01,
++ 0x01, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x00, 0x00, 0xf0, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x4a, 0x2b, 0x2c, 0x09, 0x7e, 0x19,
++ 0x1b, 0x19, 0x1b, 0x2d, 0x29, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x90, 0xfc,
++ 0x20, 0xf8, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x09, 0x7f, 0x09, 0x09, 0x0f,
++ 0x01, 0x3f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x20, 0xfc, 0x20, 0xe0, 0xf0,
++ 0x00, 0xf8, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x01, 0x3f, 0x24, 0x49, 0x12,
++ 0x04, 0x1f, 0x68, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x48, 0x20, 0x90,
++ 0x40, 0xf0, 0x2c, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x1f, 0x12, 0x12, 0x1f, 0x02,
++ 0x7f, 0x04, 0x0f, 0x08, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0x90, 0x90, 0xf0, 0x00,
++ 0xfc, 0x40, 0x40, 0xc0, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7e, 0x01, 0x3d, 0x03, 0x3c,
++ 0x03, 0x38, 0x2a, 0x2a, 0x3b, 0x22, 0x00, 0x00,
++ 0x08, 0x30, 0xc8, 0x48, 0x50, 0x20, 0xf8, 0x40,
++ 0xfc, 0x40, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x3d, 0x29, 0x09, 0x2f,
++ 0x29, 0x29, 0x29, 0x2f, 0x39, 0x61, 0x00, 0x00,
++ 0x00, 0xf8, 0xa0, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x27, 0x12, 0x11, 0x01, 0x03, 0x70, 0x17,
++ 0x12, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x3c, 0xc8, 0x48, 0x50, 0x20, 0xf8, 0x40, 0xfc,
++ 0x48, 0x48, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x29, 0x29, 0x31, 0x28, 0x27,
++ 0x25, 0x25, 0x3a, 0x24, 0x21, 0x22, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0xa8, 0x48, 0xb0, 0x00, 0x00,
++ 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x05, 0x1f,
++ 0x67, 0x04, 0x07, 0x05, 0x06, 0x38, 0x00, 0x00,
++ 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x40, 0xf0,
++ 0xcc, 0x40, 0xe0, 0x20, 0xc0, 0x38, 0x00, 0x00,
++ 0x14, 0x12, 0x2a, 0x0c, 0x13, 0x3e, 0x52, 0x1f,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa8, 0x30, 0x20, 0x50, 0x88,
++ 0x04, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x12, 0x12, 0x12, 0x1e,
++ 0x72, 0x13, 0x1e, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x80, 0x80, 0x78, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0xc8, 0x70, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x14, 0x12, 0x22, 0x48, 0x08, 0x14, 0x13, 0x22,
++ 0x7e, 0x22, 0x22, 0x3e, 0x23, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa8, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x40, 0x20, 0x20, 0x07, 0x10,
++ 0x10, 0x20, 0x20, 0x41, 0x42, 0x4c, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x11, 0x09, 0x0a, 0x42, 0x24, 0x20, 0x01, 0x12,
++ 0x17, 0x1a, 0x22, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0x20, 0x10, 0x08, 0x48, 0x40, 0xa0, 0x20, 0x10,
++ 0xf8, 0x14, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x12, 0x0a, 0x0e, 0x32, 0x07, 0x01,
++ 0x3f, 0x04, 0x02, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x28, 0x38, 0xc8, 0x18, 0x00,
++ 0xf8, 0x40, 0x40, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x1a, 0x6f, 0x09, 0x0f, 0x09,
++ 0x0f, 0x1f, 0x04, 0x7f, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0x98, 0x68, 0xf8, 0x20, 0xe0, 0x20,
++ 0xe0, 0xf0, 0x40, 0xfc, 0x60, 0x18, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x24, 0x27, 0x00, 0x12,
++ 0x12, 0x22, 0x22, 0x43, 0x44, 0x48, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x00, 0xfc, 0x40, 0x40,
++ 0x78, 0x40, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x10, 0x14, 0x64, 0x19,
++ 0x16, 0x7e, 0x2c, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x88, 0x90, 0xfc, 0x90,
++ 0xf8, 0x90, 0xf8, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0d, 0x0a, 0x0e, 0x71, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x48, 0xd0,
++ 0x28, 0xfc, 0xa4, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x0b, 0x0a, 0x17, 0x18,
++ 0x37, 0x54, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x09, 0x05, 0x05, 0x7f, 0x01,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x20, 0x20, 0x40, 0xfc, 0x00,
++ 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x3f, 0x09, 0x05,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x20, 0x40,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x08, 0x3e, 0x2a, 0x2a, 0x3e,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x0b, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x00,
++ 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x70, 0x70, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x41, 0x23, 0x24, 0x00, 0x13,
++ 0x1f, 0x22, 0x22, 0x42, 0x43, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x10, 0x20, 0xc0, 0xc0, 0x30,
++ 0xfc, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0d, 0x12, 0x7e,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0xd0, 0x20, 0x50, 0x88,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x10, 0x09, 0x4a, 0x20,
++ 0x25, 0x0f, 0x11, 0x11, 0x21, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xc0, 0xf0, 0x90, 0x60, 0x60,
++ 0x90, 0xfc, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0xa0, 0x38, 0x48, 0xd0, 0x30, 0x30, 0x48,
++ 0xfc, 0x48, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x02, 0x0c, 0x38, 0x08, 0x08, 0x7f, 0x08, 0x08,
++ 0x3e, 0x22, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x02, 0x0c, 0x32, 0x22, 0x32, 0x2a, 0x2a, 0x22,
++ 0x22, 0x2e, 0x74, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0xc8, 0xa8, 0xa8, 0x88,
++ 0x88, 0x88, 0xf0, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x11, 0x11, 0x1f, 0x00, 0x1f, 0x10, 0x1f, 0x17,
++ 0x15, 0x17, 0x15, 0x21, 0x2e, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0xf0, 0x00, 0xf0, 0xd0, 0x10, 0xd0,
++ 0x50, 0xd0, 0x54, 0xec, 0x2c, 0x04, 0x00, 0x00,
++ 0x10, 0x17, 0x14, 0x7f, 0x17, 0x34, 0x3f, 0x3d,
++ 0x55, 0x55, 0x15, 0x14, 0x17, 0x14, 0x00, 0x00,
++ 0x00, 0xbc, 0xa4, 0xbc, 0xbc, 0x44, 0xfc, 0xf4,
++ 0xf4, 0x54, 0xf4, 0xe4, 0x5c, 0x4c, 0x00, 0x00,
++ 0x20, 0x17, 0x15, 0x47, 0x24, 0x27, 0x05, 0x17,
++ 0x10, 0x17, 0x25, 0x25, 0x5f, 0x40, 0x00, 0x00,
++ 0x20, 0xe0, 0x20, 0xbc, 0xc0, 0x80, 0x38, 0xc0,
++ 0x00, 0xf8, 0x28, 0x28, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x24, 0x3e, 0x3f, 0x24,
++ 0x3f, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x40, 0x7c, 0x80, 0x00, 0x78,
++ 0x00, 0xf0, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x3e, 0x22, 0x3e, 0x3e, 0x21, 0x2f,
++ 0x27, 0x27, 0x27, 0x23, 0x2d, 0x21, 0x00, 0x00,
++ 0x40, 0xfc, 0xf8, 0x88, 0xf8, 0xf8, 0x08, 0xe8,
++ 0xc8, 0xc8, 0xc8, 0x88, 0x68, 0x18, 0x00, 0x00,
++ 0x00, 0x7e, 0x48, 0x7d, 0x7c, 0x7e, 0x4f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0x78, 0x00, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x06, 0x3c, 0x04, 0x04, 0x7f, 0x0c, 0x0e,
++ 0x15, 0x15, 0x24, 0x44, 0x04, 0x04, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x11, 0x1f,
++ 0x19, 0x05, 0x02, 0x05, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0x00, 0x00, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x12, 0x14, 0x1b, 0x12,
++ 0x14, 0x1c, 0x14, 0x27, 0x24, 0x47, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x80, 0xfc, 0xf0, 0xf0,
++ 0x90, 0xf0, 0xf8, 0x90, 0x60, 0x9c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x61, 0x0f,
++ 0x00, 0x01, 0x7f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0xe0,
++ 0xc0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x3e, 0x04, 0x7f, 0x0e, 0x15, 0x64, 0x05,
++ 0x3f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0xc8, 0x48, 0x48, 0x98, 0x00,
++ 0xf8, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x7e, 0x12, 0x13, 0x12, 0x7e, 0x13,
++ 0x10, 0x13, 0x18, 0x60, 0x07, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x7e, 0x12, 0x12, 0x12, 0x7f, 0x10,
++ 0x17, 0x14, 0x1c, 0x67, 0x04, 0x04, 0x00, 0x00,
++ 0x40, 0xfc, 0x28, 0xa8, 0x68, 0x98, 0xf8, 0x40,
++ 0xfc, 0x64, 0x94, 0xf4, 0x14, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x29, 0x2f, 0x09, 0x1f,
++ 0x29, 0x4b, 0x13, 0x15, 0x29, 0x41, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x48, 0xa8, 0x28, 0x28, 0xe8,
++ 0x28, 0xa8, 0x68, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x7f, 0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x3f,
++ 0x01, 0x7f, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xf8,
++ 0x00, 0xfc, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x0b, 0x0a, 0x16, 0x1b,
++ 0x34, 0x57, 0x10, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x1f,
++ 0x01, 0x3f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf0,
++ 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x26, 0x3a, 0x37, 0x3e, 0x08,
++ 0x7f, 0x4d, 0x53, 0x7f, 0x41, 0x43, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0xfc, 0xd0, 0x50, 0x78, 0x50,
++ 0x50, 0x78, 0x50, 0x50, 0x7c, 0x40, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x28, 0x2b, 0x30, 0x29, 0x26,
++ 0x24, 0x27, 0x38, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0xa0, 0x24, 0x5c,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x23, 0x48, 0x0f, 0x10, 0x13, 0x30,
++ 0x53, 0x10, 0x17, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0x40,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x21, 0x16, 0x02, 0x19, 0x62,
++ 0x0f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x50, 0x80, 0xb0, 0x4c,
++ 0xa0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x3f, 0x00, 0x08, 0x04, 0x04,
++ 0x02, 0x02, 0x02, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x13, 0x10, 0x2f, 0x48, 0x13,
++ 0x30, 0x57, 0x10, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0xc0, 0xf0, 0x90, 0xfc, 0x90, 0xf0,
++ 0x80, 0xf8, 0x80, 0xfc, 0x80, 0x80, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7c, 0x13, 0x12, 0x12, 0x1f,
++ 0x70, 0x11, 0x11, 0x12, 0x14, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0xf8, 0x08, 0x08, 0xf8,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x54, 0x55, 0x56, 0x7c, 0x55,
++ 0x56, 0x54, 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x50, 0x20, 0x50, 0x88,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x37, 0x32, 0x2a, 0x3c, 0x65, 0x0a, 0x1f,
++ 0x64, 0x3f, 0x15, 0x0e, 0x07, 0x78, 0x00, 0x00,
++ 0x04, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0x24, 0x24,
++ 0xa4, 0xa4, 0x24, 0x04, 0x84, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x40, 0x21, 0x27, 0x00, 0x12,
++ 0x12, 0x22, 0x22, 0x42, 0x44, 0x48, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0xe8, 0x08, 0xa0,
++ 0xa0, 0xa0, 0xa0, 0xa4, 0xa4, 0x1c, 0x00, 0x00,
++ 0x21, 0x16, 0x14, 0x45, 0x24, 0x25, 0x0e, 0x10,
++ 0x17, 0x24, 0x27, 0x44, 0x47, 0x44, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0x28, 0xa8, 0xc8, 0x58, 0x80,
++ 0xf0, 0x90, 0xf0, 0x90, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x10, 0x10, 0x13, 0x7c, 0x11,
++ 0x11, 0x11, 0x1e, 0x62, 0x04, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x60, 0x90, 0xf8, 0x08, 0x50,
++ 0x50, 0x50, 0x50, 0x54, 0x54, 0x0c, 0x00, 0x00,
++ 0x06, 0x39, 0x20, 0x24, 0x26, 0x39, 0x62, 0x1f,
++ 0x11, 0x1f, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x88, 0x08, 0x30, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7c, 0x13, 0x10, 0x10, 0x3f, 0x24, 0x65,
++ 0x25, 0x25, 0x3d, 0x25, 0x22, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x60, 0x90, 0xe8, 0x08, 0x50,
++ 0x50, 0x50, 0x50, 0x54, 0x54, 0x0c, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x09, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x08, 0x88, 0x48,
++ 0x48, 0x50, 0x50, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x29, 0x2a, 0x30, 0x2b, 0x25,
++ 0x25, 0x26, 0x39, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x90, 0x60, 0xf0, 0x4c, 0x40,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x04, 0x7f, 0x00, 0x1f, 0x11,
++ 0x1f, 0x11, 0x1f, 0x11, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x40, 0xfc, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x14, 0x04, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x22, 0x14, 0x7f, 0x00, 0x3e,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x26, 0x00, 0x00,
++ 0x80, 0xf8, 0x80, 0xf8, 0x08, 0xf8, 0x80, 0xf8,
++ 0x80, 0xf8, 0x80, 0xf8, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x12, 0x33, 0x50, 0x11,
++ 0x17, 0x14, 0x14, 0x14, 0x17, 0x14, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x80, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x11, 0x1f, 0x10, 0x17, 0x14,
++ 0x17, 0x14, 0x27, 0x2a, 0x4a, 0x11, 0x00, 0x00,
++ 0x00, 0xf0, 0xfc, 0xe8, 0x10, 0xf0, 0xf0, 0x90,
++ 0xf0, 0x90, 0xf8, 0x44, 0x34, 0xf0, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x09, 0x0e, 0x0a,
++ 0x0a, 0x13, 0x12, 0x22, 0x42, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0xa0, 0x28, 0x48, 0x70,
++ 0xe0, 0x50, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x17, 0x11, 0x17, 0x14, 0x17,
++ 0x14, 0x17, 0x2f, 0x20, 0x43, 0x0c, 0x00, 0x00,
++ 0x00, 0xf0, 0xfc, 0x28, 0xe0, 0xf0, 0x90, 0xf0,
++ 0x90, 0xf0, 0xf8, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f, 0x00, 0x3f,
++ 0x20, 0x44, 0x04, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xfc,
++ 0x08, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x14, 0x13, 0x33, 0x55, 0x11,
++ 0x11, 0x11, 0x12, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa4, 0x18, 0xf8, 0x14, 0xf0,
++ 0x10, 0xf0, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x3f, 0x21, 0x29, 0x29,
++ 0x29, 0x29, 0x2f, 0x28, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x08, 0x28, 0x28,
++ 0x28, 0x28, 0xe8, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x23, 0x10, 0x17, 0x00, 0x11, 0x16,
++ 0x20, 0x21, 0x46, 0x40, 0x01, 0x0e, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0xa0, 0x24, 0x9c,
++ 0xf0, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x01, 0x3f, 0x21, 0x7f, 0x24, 0x1f, 0x68, 0x0f,
++ 0x08, 0x0f, 0x05, 0x09, 0x31, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xfc, 0x48, 0xf0, 0x2c, 0xe0,
++ 0x20, 0xe0, 0x60, 0x10, 0x08, 0x00, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x09, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2b, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x90, 0x50, 0x50, 0x10, 0x90, 0x90, 0x1c,
++ 0x70, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x0b, 0x40, 0x22, 0x0a, 0x0d, 0x12, 0x21,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x98, 0x14, 0x64, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x40, 0x23, 0x22, 0x02, 0x13,
++ 0x10, 0x12, 0x22, 0x24, 0x48, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0xf8, 0x08, 0x08, 0xf8,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x0c, 0x4a, 0x32, 0x11, 0x31, 0x49, 0x09, 0x19,
++ 0x29, 0x49, 0x0a, 0x0a, 0x0c, 0x38, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50,
++ 0x50, 0xf0, 0x54, 0x4c, 0x4c, 0x44, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x4f, 0x2a, 0x29, 0x0b, 0x1d,
++ 0x29, 0x49, 0x11, 0x12, 0x24, 0x40, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xfc, 0xa8, 0x10, 0xf8, 0x14,
++ 0xf0, 0x10, 0xf0, 0x48, 0x44, 0xc0, 0x00, 0x00,
++ 0x00, 0x78, 0x4f, 0x4a, 0x79, 0x4b, 0x4d, 0x79,
++ 0x49, 0x49, 0x7a, 0x4a, 0x44, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0x10, 0xf8, 0x14, 0xf0,
++ 0x10, 0xf0, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x04, 0x18, 0x73, 0x10, 0x17, 0x7c, 0x11, 0x1a,
++ 0x34, 0x35, 0x52, 0x10, 0x11, 0x1e, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0xa0, 0x24, 0x9c,
++ 0xf0, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x10, 0x55, 0x35, 0x39, 0x11, 0x7f, 0x11, 0x19,
++ 0x35, 0x35, 0x53, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0xf0, 0x10, 0xf0, 0xfc, 0xf0, 0x50,
++ 0xf0, 0xf0, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x0f,
++ 0x0a, 0x09, 0x08, 0x08, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0xf0,
++ 0x10, 0x20, 0xc0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x25, 0x3e, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x00, 0xf8, 0x88, 0x88, 0xf8,
++ 0x20, 0xb0, 0xa8, 0x24, 0x24, 0x60, 0x00, 0x00,
++ 0x00, 0x20, 0x17, 0x12, 0x01, 0x03, 0x75, 0x11,
++ 0x11, 0x11, 0x12, 0x14, 0x2c, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0x10, 0xf8, 0x14, 0xf0,
++ 0x10, 0xf0, 0x48, 0x44, 0xc0, 0xfc, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x0f, 0x7f, 0x0f, 0x09,
++ 0x0f, 0x0f, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0xe0, 0xfc, 0xe0, 0x20,
++ 0xe0, 0xe0, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x28, 0x33, 0x28, 0x25, 0x26,
++ 0x24, 0x25, 0x3a, 0x20, 0x21, 0x2e, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0xa0, 0x24, 0x9c,
++ 0xf0, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x00, 0x7e,
++ 0x12, 0x12, 0x12, 0x1c, 0x10, 0x13, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x02, 0x7f, 0x02, 0x02, 0x02,
++ 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x11, 0x14, 0x65, 0x18, 0x1b, 0x26, 0x7d,
++ 0x19, 0x34, 0x35, 0x36, 0x50, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xfc, 0x40, 0x64,
++ 0x68, 0xd0, 0x50, 0x48, 0x44, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x11, 0x13, 0x34, 0x5b, 0x12,
++ 0x12, 0x13, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xf8, 0xa8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x14, 0x17, 0x14, 0x17,
++ 0x10, 0x17, 0x10, 0x20, 0x3f, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x90, 0xf0, 0x90, 0xf0,
++ 0x80, 0xf0, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x0c, 0x1a, 0x1a,
++ 0x29, 0x4a, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x60, 0xe0, 0xd0,
++ 0x50, 0x48, 0x44, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x22, 0x12, 0x12, 0x4f, 0x22, 0x23, 0x06, 0x16,
++ 0x1a, 0x1b, 0x22, 0x22, 0x42, 0x42, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x30, 0xf0, 0xe8,
++ 0xa8, 0x24, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x17, 0x34, 0x39, 0x56, 0x11,
++ 0x11, 0x1a, 0x16, 0x21, 0x22, 0x44, 0x00, 0x00,
++ 0x40, 0x48, 0x50, 0xfc, 0xe0, 0x50, 0x4c, 0x48,
++ 0xfc, 0xa8, 0xa8, 0x7c, 0x08, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x7d, 0x17, 0x11, 0x11, 0x7f, 0x13,
++ 0x13, 0x15, 0x1d, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x10, 0x90, 0x78, 0x78,
++ 0x54, 0x94, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x01, 0x7d, 0x51, 0x52, 0x7b, 0x4d, 0x49, 0x49,
++ 0x78, 0x53, 0x52, 0x7e, 0x43, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x10, 0x10, 0xf0,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xb8, 0xa8, 0x00, 0x00,
++ 0x10, 0x10, 0x7e, 0x10, 0x7d, 0x57, 0x7c, 0x57,
++ 0x7e, 0x12, 0x7f, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0xf8,
++ 0xa8, 0xa8, 0xf8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x25, 0x2b, 0x30, 0x29, 0x26, 0x25,
++ 0x25, 0x26, 0x3b, 0x24, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0x48, 0x50, 0xfc, 0xe0, 0x50, 0x4c, 0x48,
++ 0xfc, 0x68, 0xa8, 0xfc, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x05, 0x3b, 0x2e, 0x28, 0x41, 0x00, 0x00,
++ 0x20, 0xa8, 0x70, 0xfc, 0x70, 0xa8, 0x24, 0xa8,
++ 0xfc, 0x68, 0xe8, 0x7c, 0x88, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x2a, 0x3f, 0x2b, 0x2b, 0x3f,
++ 0x2a, 0x2f, 0x2a, 0x2a, 0x2f, 0x59, 0x00, 0x00,
++ 0x20, 0xa8, 0x70, 0xfc, 0x70, 0xa8, 0x64, 0x48,
++ 0xfc, 0xa8, 0xa8, 0x7c, 0x88, 0x08, 0x00, 0x00,
++ 0x00, 0x03, 0x7e, 0x12, 0x12, 0x13, 0x7c, 0x13,
++ 0x12, 0x13, 0x1e, 0x62, 0x03, 0x02, 0x00, 0x00,
++ 0x80, 0x7c, 0x14, 0x94, 0xd4, 0x24, 0x4c, 0xf8,
++ 0x48, 0xf8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x30, 0x09,
++ 0x0d, 0x71, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x08, 0x30,
++ 0x60, 0x18, 0xf4, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x43, 0x22, 0x23, 0x02, 0x12,
++ 0x13, 0x24, 0x24, 0x48, 0x53, 0x4c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x48, 0x40,
++ 0xfc, 0x40, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x02, 0x1c,
++ 0x03, 0x7f, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x40, 0xc0,
++ 0x30, 0xc8, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x7f, 0x1c, 0x1a, 0x2a,
++ 0x48, 0x7f, 0x08, 0x14, 0x22, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x18, 0x6f, 0x00, 0x1f,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0xec, 0x00, 0xf0,
++ 0x10, 0x10, 0x10, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x08, 0x09, 0x1b, 0x2c, 0x4b,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0xf8,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x0f, 0x0a, 0x12, 0x13, 0x34, 0x54, 0x1a,
++ 0x11, 0x11, 0x11, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x08, 0xe8, 0x28, 0x28, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0x28, 0x28, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x21, 0x11, 0x12, 0x05, 0x08, 0x17,
++ 0x10, 0x20, 0x20, 0x40, 0x40, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0x40, 0x20, 0x10, 0xe8, 0x04, 0xf8,
++ 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x00, 0x00,
++ 0x01, 0x1e, 0x10, 0x10, 0x1f, 0x14, 0x14, 0x17,
++ 0x15, 0x15, 0x15, 0x29, 0x29, 0x57, 0x00, 0x00,
++ 0xa0, 0x20, 0x20, 0x20, 0xfc, 0x24, 0x24, 0x24,
++ 0x24, 0x24, 0x44, 0x44, 0x84, 0x18, 0x00, 0x00,
++ 0x11, 0x11, 0x1f, 0x18, 0x0d, 0x12, 0x1e, 0x20,
++ 0x7e, 0x0a, 0x0a, 0x0c, 0x08, 0x0b, 0x00, 0x00,
++ 0x10, 0x10, 0xf0, 0x10, 0xfc, 0x20, 0xf8, 0x88,
++ 0xf8, 0xf8, 0x88, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x18, 0x35, 0x37, 0x34, 0x53,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0xf8,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x10, 0x11, 0x12, 0x7c, 0x13,
++ 0x10, 0x14, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xe8, 0x04, 0xf8,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x04, 0x08, 0x08, 0x1c,
++ 0x2a, 0x4a, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x02, 0x04, 0x1f, 0x60,
++ 0x1f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x80, 0x40, 0xf0, 0x0c,
++ 0xf0, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5d, 0x08, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xe8, 0x04, 0xf8,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x08, 0x3f, 0x00, 0x3e, 0x01,
++ 0x7e, 0x08, 0x2c, 0x2b, 0x4a, 0x18, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x28, 0xfc, 0x28, 0xf8, 0x20,
++ 0xa4, 0xb8, 0x70, 0xa8, 0x24, 0x60, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x02,
++ 0x0f, 0x70, 0x1f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x70, 0x70, 0x80,
++ 0xe0, 0x1c, 0xf0, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x0f,
++ 0x00, 0x3f, 0x12, 0x0a, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x70, 0x70, 0xe0,
++ 0x00, 0xf8, 0x90, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x3e, 0x22, 0x2b, 0x1f, 0x12, 0x1f,
++ 0x12, 0x1f, 0x17, 0x24, 0x47, 0x18, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x88, 0xa8, 0xfc, 0x40, 0xf8,
++ 0x48, 0xf8, 0x58, 0x60, 0x44, 0x3c, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x24, 0x35, 0x2e,
++ 0x3f, 0x2e, 0x35, 0x24, 0x3f, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0xa8, 0x28, 0xc4, 0xfc, 0x80, 0xfc,
++ 0x94, 0x94, 0x98, 0x90, 0x90, 0x90, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x3f, 0x27, 0x2a, 0x32, 0x22,
++ 0x27, 0x24, 0x27, 0x44, 0x47, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xfc, 0x30, 0xe8, 0xa4, 0x20,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x22, 0x3f, 0x27, 0x2a, 0x32,
++ 0x20, 0x24, 0x24, 0x44, 0x5f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0xfc, 0x70, 0xa8, 0xa4,
++ 0x80, 0xf0, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x08, 0x0e, 0x12, 0x12, 0x2a,
++ 0x46, 0x04, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x11, 0x23, 0x01, 0x06, 0x78,
++ 0x0f, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x28, 0x44, 0x84, 0x80, 0x80,
++ 0xf8, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x0f, 0x11, 0x29, 0x06, 0x04,
++ 0x18, 0x60, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x08, 0x88, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x08, 0x18, 0x90, 0x48, 0x44, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x08, 0x0f, 0x19, 0x26, 0x0d, 0x31,
++ 0x7f, 0x03, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x08, 0xc8, 0x48, 0x48, 0x48, 0x48, 0x48, 0x18,
++ 0xfc, 0x10, 0xa0, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x11, 0x17, 0x11, 0x1f,
++ 0x11, 0x17, 0x23, 0x2d, 0x71, 0x01, 0x00, 0x00,
++ 0x80, 0xfc, 0x20, 0xfc, 0x40, 0xf0, 0x50, 0xfc,
++ 0x50, 0xf0, 0x60, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x12, 0x12, 0x22, 0x44,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x50, 0x48, 0x44, 0xc4,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x1b, 0x34, 0x35, 0x36, 0x52,
++ 0x13, 0x12, 0x15, 0x11, 0x12, 0x1c, 0x00, 0x00,
++ 0x40, 0x48, 0x50, 0xfc, 0xe0, 0x50, 0x4c, 0x48,
++ 0xfc, 0xa8, 0xa8, 0x7c, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x15, 0x12, 0x42, 0x20, 0x20, 0x0e, 0x12,
++ 0x12, 0x23, 0x22, 0x42, 0x45, 0x48, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0x20, 0xfc, 0x20, 0x20, 0xa0, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x10, 0x17, 0x36, 0x3b, 0x52,
++ 0x13, 0x10, 0x19, 0x26, 0x24, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x5f, 0x12, 0x1f, 0x17, 0x11,
++ 0x1f, 0x11, 0x2f, 0x27, 0x59, 0x01, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xfc, 0x20, 0xfc, 0xf0, 0x50,
++ 0xfc, 0x50, 0xf0, 0x70, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x64, 0x1b, 0x1a, 0x27, 0x7e,
++ 0x1b, 0x34, 0x35, 0x32, 0x54, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x01, 0x7d, 0x2e, 0x2a, 0x39, 0x2a, 0x2f, 0x38,
++ 0x2a, 0x2e, 0x3b, 0x6a, 0x09, 0x0a, 0x00, 0x00,
++ 0x10, 0x10, 0xe8, 0xa8, 0x10, 0xa8, 0xfc, 0xa4,
++ 0xa8, 0xa8, 0xb8, 0xa8, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x20, 0x17, 0x13, 0x02, 0x73,
++ 0x12, 0x13, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x40, 0xfc, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0xfc, 0x40, 0x40, 0xfc, 0x00, 0x00,
++ 0x00, 0x20, 0x17, 0x10, 0x03, 0x02, 0x73, 0x12,
++ 0x13, 0x10, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x09, 0x02,
++ 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x02, 0x07, 0x19, 0x7f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x12, 0x6f, 0x08, 0x0f, 0x08, 0x0f, 0x00, 0x00,
++ 0x00, 0xc0, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x48, 0xe4, 0x20, 0xe0, 0x20, 0xe0, 0x00, 0x00,
++ 0x10, 0x11, 0x16, 0x7f, 0x12, 0x1b, 0x36, 0x37,
++ 0x32, 0x53, 0x55, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0xf0, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0xa8, 0xf4, 0x14, 0xf0, 0x10, 0xf0, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x0a, 0x2a, 0x2c, 0x28, 0x48,
++ 0x08, 0x08, 0x15, 0x13, 0x22, 0x44, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8,
++ 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x23, 0x3e, 0x22,
++ 0x23, 0x3e, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0xd0, 0x50, 0x20, 0x50,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x09, 0x08, 0x2e,
++ 0x29, 0x28, 0x28, 0x2e, 0x38, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0xd0, 0x20, 0x50, 0x88,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x3d, 0x5d, 0x01, 0x3e,
++ 0x23, 0x3e, 0x0f, 0x28, 0x2e, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x78, 0x70, 0x00, 0x78,
++ 0xd0, 0x70, 0xfc, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x12, 0x09, 0x09, 0x3f, 0x20, 0x41, 0x01, 0x3f,
++ 0x01, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x08, 0x00, 0x00, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x01, 0x0f, 0x09, 0x7f, 0x09, 0x0f, 0x0f, 0x09,
++ 0x0f, 0x7f, 0x04, 0x0f, 0x01, 0x3e, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xfc, 0x20, 0xe0, 0xe0, 0x20,
++ 0xe0, 0xfc, 0x40, 0x40, 0xc0, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x12, 0x17, 0x14, 0x17,
++ 0x14, 0x17, 0x25, 0x25, 0x46, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x38, 0xa8, 0xa8, 0xb0,
++ 0xa8, 0xa4, 0x24, 0xb8, 0xa0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x0f, 0x01, 0x01, 0x3f, 0x04,
++ 0x04, 0x7f, 0x04, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xe0, 0x00, 0x00, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x3e,
++ 0x28, 0x24, 0x27, 0x39, 0x62, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x0a, 0x09, 0x7f, 0x08, 0x0d, 0x1a, 0x1a,
++ 0x2b, 0x48, 0x09, 0x08, 0x08, 0x0f, 0x00, 0x00,
++ 0x40, 0x48, 0x50, 0xfc, 0xe0, 0x50, 0x48, 0x40,
++ 0xfc, 0x90, 0xd0, 0x20, 0xd0, 0x08, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x7c, 0x14, 0x17, 0x3c, 0x3f,
++ 0x36, 0x55, 0x54, 0x15, 0x16, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0xa4, 0xa8, 0xa8, 0xb0, 0xa8, 0xa4,
++ 0x24, 0x24, 0xa4, 0x78, 0x60, 0x20, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x22, 0x23, 0x02, 0x13,
++ 0x12, 0x22, 0x22, 0x42, 0x43, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0,
++ 0x88, 0x48, 0x50, 0x20, 0x90, 0x0c, 0x00, 0x00,
++ 0x20, 0x17, 0x14, 0x47, 0x24, 0x27, 0x04, 0x17,
++ 0x17, 0x16, 0x2a, 0x2b, 0x52, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xfc, 0x40, 0xf8,
++ 0x68, 0xd8, 0x48, 0x68, 0xd8, 0x58, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x49, 0x09, 0x0f, 0x11,
++ 0x21, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0x00, 0xf0, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x44, 0x29, 0x11, 0x31, 0x49, 0x09, 0x19,
++ 0x29, 0x49, 0x09, 0x09, 0x09, 0x36, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0,
++ 0x48, 0x28, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x45, 0x3f, 0x04, 0x7f, 0x1f,
++ 0x11, 0x1f, 0x11, 0x1f, 0x11, 0x00, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xf8, 0x40, 0xfc, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf4, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x03, 0x02,
++ 0x06, 0x1b, 0x62, 0x02, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x10, 0xf0, 0x20, 0x40, 0xfc, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x04, 0x3f, 0x0a, 0x7f, 0x1e, 0x12, 0x1e, 0x1e,
++ 0x16, 0x7f, 0x07, 0x07, 0x7f, 0x00, 0x00, 0x00,
++ 0x80, 0xf8, 0xf0, 0x10, 0xf0, 0xf0, 0xf0, 0xf4,
++ 0x7c, 0xfc, 0xc0, 0xf8, 0xc0, 0x40, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x7d, 0x55, 0x55, 0x55, 0x7d,
++ 0x51, 0x19, 0x15, 0x1d, 0x62, 0x04, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50,
++ 0x50, 0xf0, 0x54, 0x4c, 0x4c, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x3e,
++ 0x24, 0x22, 0x27, 0x39, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x04, 0x04,
++ 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x40, 0x20,
++ 0x10, 0x10, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x0e, 0x15, 0x25, 0x5f, 0x12, 0x1f,
++ 0x12, 0x1f, 0x17, 0x24, 0x47, 0x18, 0x00, 0x00,
++ 0x20, 0xfc, 0x70, 0xa8, 0x24, 0xfc, 0x40, 0xf8,
++ 0x48, 0xf8, 0x58, 0x60, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x7d, 0x08, 0x0b, 0x18, 0x16,
++ 0x35, 0x50, 0x11, 0x16, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xfc, 0x40, 0x64,
++ 0x68, 0xd0, 0x50, 0x48, 0x44, 0xc0, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x27, 0x3c, 0x24, 0x24,
++ 0x3c, 0x24, 0x24, 0x24, 0x25, 0x4e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xfc, 0x20, 0x24,
++ 0xb8, 0x70, 0x68, 0xa4, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x38, 0x00, 0x7c, 0x01, 0x3b, 0x04, 0x3b,
++ 0x02, 0x3a, 0x2b, 0x2a, 0x3a, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0xf8,
++ 0xa8, 0xa8, 0xf8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x17, 0x10, 0x31, 0x52, 0x10,
++ 0x17, 0x10, 0x11, 0x10, 0x10, 0x17, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xfc, 0xe0, 0x50, 0x48, 0x40,
++ 0xfc, 0x90, 0xd0, 0x20, 0xd0, 0x08, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x08, 0x08, 0x7f, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3f, 0x00, 0x3c,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x03, 0x0d, 0x71, 0x01, 0x3f,
++ 0x01, 0x09, 0x09, 0x09, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xc0, 0x30, 0x08, 0x00, 0xf8,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x3c, 0x24, 0x3c, 0x25,
++ 0x26, 0x3c, 0x18, 0x14, 0x24, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x24, 0x3c, 0x24, 0x25, 0x3d,
++ 0x27, 0x25, 0x25, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x48, 0x88, 0x30, 0x10,
++ 0xfc, 0x54, 0x54, 0x54, 0x64, 0xcc, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x00, 0x1e, 0x12, 0x1e, 0x07,
++ 0x79, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x90, 0x88, 0xfc, 0x90, 0x90, 0x60, 0x64, 0x9c,
++ 0x04, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x08, 0x0c, 0x1b, 0x1a,
++ 0x28, 0x4b, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0x50, 0x94, 0x54, 0x4c,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x7f, 0x3f, 0x22, 0x3e, 0x2b, 0x5f, 0x08,
++ 0x0f, 0x0f, 0x0f, 0x0f, 0x29, 0x44, 0x00, 0x00,
++ 0x30, 0x28, 0xfc, 0x60, 0xa4, 0x1c, 0xe0, 0x20,
++ 0xe0, 0xe0, 0xfc, 0xfc, 0x24, 0x98, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x02, 0x07, 0x05, 0x04, 0x04,
++ 0x0a, 0x09, 0x09, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xe0, 0x20, 0xa0, 0xa0,
++ 0x20, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x0f, 0x08, 0x08, 0x0f,
++ 0x08, 0x08, 0x0f, 0x08, 0x00, 0x7f, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xe0, 0x20, 0x20, 0xe0,
++ 0x20, 0x20, 0xe0, 0x20, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x09, 0x1f, 0x25, 0x7e, 0x2a, 0x3e, 0x2b,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x00, 0xdc, 0x54, 0xdc, 0x00, 0xf8, 0x00, 0xfc,
++ 0x40, 0x78, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7f, 0x02, 0x3d, 0x00, 0x3c,
++ 0x03, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x18, 0xe0, 0x40, 0x7c,
++ 0xc0, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x7f, 0x07, 0x07, 0x3f, 0x27,
++ 0x24, 0x27, 0x7f, 0x05, 0x19, 0x61, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0xc0, 0xc0, 0xf8, 0xc8,
++ 0x48, 0xd8, 0xfc, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x14, 0x13, 0x1f, 0x1a,
++ 0x1a, 0x1f, 0x1a, 0x12, 0x24, 0x48, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0xa0, 0x20, 0xfc, 0xb4,
++ 0xd8, 0x90, 0xb0, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x15, 0x19, 0x35, 0x37,
++ 0x32, 0x54, 0x50, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x00, 0xf8, 0x68, 0x68,
++ 0xe8, 0xb8, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x42, 0x24, 0x29, 0x03, 0x10,
++ 0x13, 0x12, 0x27, 0x24, 0x40, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0xa4, 0x64, 0xf0, 0x10,
++ 0xf0, 0x00, 0xf8, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x00, 0x7c, 0x13, 0x12, 0x11, 0x21, 0x3d, 0x65,
++ 0x26, 0x26, 0x3c, 0x25, 0x22, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x00, 0xf8, 0x68, 0x68,
++ 0xe8, 0xb8, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x26, 0x25, 0x3d, 0x25, 0x27,
++ 0x3e, 0x24, 0x24, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x00, 0xf8, 0x68, 0x68,
++ 0xe8, 0xb8, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0xfc, 0x40, 0x40, 0x20,
++ 0x20, 0xa0, 0x10, 0x14, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x21, 0x21, 0x21, 0x3f,
++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xf8,
++ 0x08, 0x08, 0x08, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x01, 0x03, 0x05, 0x09, 0x31,
++ 0x41, 0x01, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x80, 0x00, 0x80, 0x60, 0x10, 0x08,
++ 0x04, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x02, 0x04, 0x08, 0x11, 0x21,
++ 0x41, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x80, 0x40, 0x20, 0x10, 0x08,
++ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
++ 0x7c, 0x44, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x80, 0x80, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0xf8, 0x88, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x3f, 0x04, 0x05, 0x04, 0x04,
++ 0x7f, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xa0, 0xa0,
++ 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x01, 0x06, 0x18, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04,
++ 0x02, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80,
++ 0x80, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x01, 0x7f, 0x01, 0x09, 0x79,
++ 0x09, 0x09, 0x19, 0x69, 0x01, 0x01, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x00, 0x20, 0x2c,
++ 0x30, 0x20, 0x24, 0x1c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x05, 0x3d, 0x05, 0x1d,
++ 0x65, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x60, 0x80, 0x00, 0xfc, 0x48, 0x70, 0x40, 0x48,
++ 0x38, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x07, 0x7a, 0x29, 0x3f, 0x56, 0x08, 0x7f, 0x55,
++ 0x7d, 0x5d, 0x55, 0x49, 0x55, 0x63, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7e, 0x24, 0x19, 0x08, 0x7e, 0x12, 0x14,
++ 0x1b, 0x10, 0x13, 0x10, 0x13, 0x30, 0x00, 0x00,
++ 0x40, 0x78, 0x90, 0xf8, 0xa8, 0xa8, 0xfc, 0x64,
++ 0xf8, 0xb0, 0x70, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x11, 0x09, 0x09, 0x1f, 0x01,
++ 0x7f, 0x01, 0x1f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x10, 0x10, 0x20, 0xf0, 0x10,
++ 0xfc, 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x7f, 0x08, 0x7e,
++ 0x08, 0x3e, 0x22, 0x22, 0x3e, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x60, 0x20, 0xfc, 0x24, 0x28,
++ 0x30, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x3f,
++ 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0x40, 0x40, 0x20,
++ 0x20, 0x20, 0x10, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x7f, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x04, 0x04, 0x3c, 0x20, 0x20,
++ 0x3c, 0x24, 0x04, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x78, 0x08, 0x08,
++ 0x78, 0x48, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x02, 0x07, 0x3c, 0x24, 0x24,
++ 0x24, 0x3c, 0x20, 0x03, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0xc8, 0xa8, 0xb0,
++ 0x90, 0xa8, 0xc4, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x7f,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x00, 0x00, 0x07, 0x04, 0x04,
++ 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x00, 0xc0, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x00, 0x1f, 0x10, 0x1f, 0x10,
++ 0x1f, 0x09, 0x09, 0x11, 0x21, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f, 0x00, 0x3f,
++ 0x20, 0x4f, 0x01, 0x3f, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xfc,
++ 0xc8, 0x00, 0xf8, 0x00, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x7f, 0x1f, 0x17, 0x14, 0x17, 0x1f, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0xd0, 0x50, 0xd0, 0xf0, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x0c, 0x12, 0x12, 0x11, 0x21, 0x42, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60,
++ 0x50, 0x50, 0x90, 0x88, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x0f, 0x09, 0x11, 0x11, 0x31, 0x51, 0x11,
++ 0x11, 0x11, 0x12, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0x20, 0x38, 0x28,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11,
++ 0x11, 0x12, 0x22, 0x24, 0x48, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40,
++ 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x08, 0x08, 0x18, 0x28, 0x48,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x60, 0x50, 0x48, 0x44,
++ 0x44, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x10, 0x1f, 0x30, 0x50, 0x10,
++ 0x10, 0x11, 0x11, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0xf8, 0x88, 0x88, 0x88,
++ 0x88, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x10, 0x32, 0x52, 0x11,
++ 0x11, 0x10, 0x10, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40,
++ 0xc0, 0x80, 0xc0, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x10, 0x10, 0x30, 0x52, 0x12,
++ 0x14, 0x10, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x10, 0x10, 0x34, 0x52, 0x11,
++ 0x10, 0x11, 0x11, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x68, 0x1c, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x10, 0x10, 0x30, 0x5f, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x11, 0x11, 0x32, 0x55, 0x19,
++ 0x11, 0x11, 0x12, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0xc0, 0x40, 0x20, 0x10, 0x28, 0x24,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x10, 0x31, 0x51, 0x11,
++ 0x11, 0x11, 0x12, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0x00, 0xe0, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x0a, 0x0a, 0x12, 0x13, 0x34, 0x58, 0x1f,
++ 0x10, 0x10, 0x11, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc,
++ 0xc0, 0xa0, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x10, 0x30, 0x50, 0x13,
++ 0x12, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x10, 0x37, 0x54, 0x14,
++ 0x17, 0x14, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0xa0, 0xa0,
++ 0xfc, 0xa4, 0x24, 0x24, 0x38, 0x20, 0x00, 0x00,
++ 0x09, 0x09, 0x09, 0x13, 0x12, 0x34, 0x53, 0x12,
++ 0x12, 0x12, 0x13, 0x12, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0xc8, 0x48,
++ 0x48, 0x48, 0xc8, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x12, 0x12, 0x34, 0x50, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x04, 0x88, 0x80, 0x88, 0x90,
++ 0xe0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x12, 0x12, 0x34, 0x57, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x04, 0x08, 0x00, 0xfc, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x1f, 0x10, 0x30, 0x53, 0x10,
++ 0x13, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x12, 0x14, 0x30, 0x51, 0x16,
++ 0x10, 0x13, 0x10, 0x10, 0x10, 0x17, 0x00, 0x00,
++ 0x80, 0xf8, 0x08, 0x90, 0x60, 0x40, 0xa0, 0x7c,
++ 0x84, 0x48, 0x30, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x13, 0x12, 0x34, 0x5f, 0x10,
++ 0x10, 0x11, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0xe0,
++ 0xe0, 0x50, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x12, 0x12, 0x34, 0x53, 0x10,
++ 0x10, 0x17, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x04, 0x18, 0x60, 0xc0, 0x40,
++ 0x7c, 0xc0, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x14, 0x12, 0x32, 0x50, 0x11,
++ 0x12, 0x1c, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa8, 0xa8, 0xb0, 0xa0, 0xb0, 0xa8,
++ 0xa4, 0xa4, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x0f, 0x0c, 0x14, 0x17, 0x34, 0x57, 0x16,
++ 0x16, 0x16, 0x16, 0x1a, 0x18, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x90, 0xf0, 0xb0,
++ 0xb0, 0xb0, 0xf4, 0x8c, 0x8c, 0x84, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x10, 0x13, 0x32, 0x52, 0x12,
++ 0x13, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0xf8, 0x08, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x11, 0x31, 0x53, 0x15,
++ 0x19, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0x00, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x0a, 0x09, 0x09, 0x17, 0x10, 0x30, 0x53, 0x10,
++ 0x10, 0x17, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x40, 0x40, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x09, 0x09, 0x0d, 0x13, 0x23,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0x20, 0x30, 0x48, 0x88,
++ 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x1f, 0x60, 0x1f, 0x12,
++ 0x12, 0x1f, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0xf0, 0x0c, 0xf0, 0x90,
++ 0x90, 0xf0, 0x90, 0x90, 0x90, 0xb0, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x2f, 0x27, 0x60, 0x3f, 0x2a,
++ 0x31, 0x27, 0x25, 0x25, 0x3f, 0x20, 0x00, 0x00,
++ 0x80, 0xf0, 0x90, 0xfc, 0xf0, 0x80, 0xfc, 0x48,
++ 0x24, 0xf0, 0x50, 0x50, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x13, 0x12, 0x33, 0x52, 0x13,
++ 0x12, 0x10, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0xf8,
++ 0xa8, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x11, 0x17, 0x31, 0x51, 0x12,
++ 0x14, 0x1f, 0x10, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x80, 0xa0, 0x90, 0x38, 0xc8, 0x00, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x25, 0x25, 0x51, 0x11,
++ 0x19, 0x15, 0x25, 0x21, 0x4f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x12, 0x12, 0x34, 0x53, 0x10,
++ 0x10, 0x17, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x48, 0x44, 0x04, 0xf8, 0x30,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x12, 0x17, 0x32, 0x52, 0x13,
++ 0x12, 0x10, 0x10, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x68, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x10, 0x13, 0x32, 0x52, 0x13,
++ 0x12, 0x12, 0x13, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x60, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x32, 0x52, 0x13,
++ 0x10, 0x13, 0x10, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x0f, 0x11, 0x11, 0x3f, 0x51, 0x13,
++ 0x13, 0x15, 0x15, 0x19, 0x11, 0x11, 0x00, 0x00,
++ 0x48, 0xa8, 0x28, 0x28, 0x28, 0xe8, 0x28, 0x28,
++ 0xa8, 0x68, 0x68, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x09, 0x08, 0x08, 0x13, 0x10, 0x33, 0x52, 0x13,
++ 0x12, 0x10, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xf8, 0x48, 0xf8, 0x40, 0xfc,
++ 0xc4, 0xc4, 0x44, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x13, 0x32, 0x53, 0x12,
++ 0x13, 0x10, 0x17, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x11, 0x32, 0x5f, 0x10,
++ 0x13, 0x12, 0x12, 0x13, 0x12, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x10, 0xfc, 0x08,
++ 0xc8, 0x48, 0x48, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x32, 0x52, 0x13,
++ 0x12, 0x15, 0x15, 0x19, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x48, 0x40, 0xfc,
++ 0x40, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x13, 0x12, 0x32, 0x52, 0x12,
++ 0x12, 0x13, 0x15, 0x15, 0x19, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x04, 0xfc, 0x20, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0x24, 0x24, 0x24, 0xfc, 0x04, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x32, 0x52, 0x13,
++ 0x12, 0x10, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x80, 0x38, 0x08, 0x08, 0xb8, 0x08, 0x08, 0xf8,
++ 0xa8, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x12, 0x12, 0x34, 0x51, 0x12,
++ 0x13, 0x10, 0x10, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa4, 0xa8, 0xa4, 0x1c, 0x00,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x11, 0x11, 0x31, 0x52, 0x14,
++ 0x10, 0x17, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x10, 0x30, 0xc8, 0x48,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x11, 0x31, 0x52, 0x14,
++ 0x10, 0x17, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0xe0, 0xa0, 0x24, 0x24, 0x1c, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x0a, 0x0a, 0x0a, 0x13, 0x12, 0x32, 0x5f, 0x12,
++ 0x13, 0x16, 0x16, 0x1a, 0x12, 0x16, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x88, 0x48, 0x48, 0xc8, 0x28,
++ 0x30, 0x90, 0xb0, 0x28, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x13, 0x12, 0x33, 0x52, 0x10,
++ 0x17, 0x14, 0x17, 0x14, 0x17, 0x14, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x13, 0x10, 0x37, 0x50, 0x13,
++ 0x12, 0x12, 0x13, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0xf8,
++ 0x48, 0x48, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x10, 0x13, 0x32, 0x53, 0x12,
++ 0x13, 0x10, 0x17, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x40, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x12, 0x13, 0x32, 0x53, 0x10,
++ 0x10, 0x11, 0x17, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x40,
++ 0xa0, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x14, 0x14, 0x34, 0x55, 0x15,
++ 0x17, 0x15, 0x15, 0x19, 0x19, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x88, 0x88, 0x88, 0xfc, 0x48,
++ 0x28, 0x28, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x0f, 0x0c, 0x17, 0x14, 0x37, 0x54, 0x14,
++ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00,
++ 0x00, 0xbc, 0xa4, 0xbc, 0xa4, 0xbc, 0x04, 0x04,
++ 0x04, 0x04, 0x04, 0x04, 0x04, 0x0c, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x10, 0x17, 0x34, 0x57, 0x15,
++ 0x15, 0x16, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xfc, 0x44, 0x74, 0x54,
++ 0x54, 0xec, 0xcc, 0x44, 0x44, 0x4c, 0x00, 0x00,
++ 0x08, 0x0f, 0x0d, 0x15, 0x15, 0x35, 0x55, 0x14,
++ 0x17, 0x15, 0x14, 0x15, 0x17, 0x14, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x40,
++ 0xfc, 0x90, 0x60, 0xd8, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0f, 0x0c, 0x14, 0x17, 0x34, 0x54, 0x17,
++ 0x14, 0x14, 0x17, 0x14, 0x14, 0x14, 0x00, 0x00,
++ 0x00, 0xb8, 0x88, 0x88, 0xb8, 0x88, 0x00, 0x78,
++ 0x48, 0x28, 0x30, 0x10, 0x28, 0xc4, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x1f, 0x60, 0x1f, 0x19, 0x15,
++ 0x1f, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0xf0, 0x0c, 0xf0, 0x30, 0x50,
++ 0xf0, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x00, 0x00,
++ 0x0a, 0x0a, 0x0b, 0x12, 0x12, 0x33, 0x5e, 0x10,
++ 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x20, 0x24, 0xe8, 0x30, 0x20, 0xa4, 0x5c, 0x80,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x10, 0x11, 0x33, 0x52, 0x12,
++ 0x13, 0x12, 0x12, 0x14, 0x14, 0x19, 0x00, 0x00,
++ 0x40, 0xfc, 0x90, 0x60, 0x90, 0xfc, 0x10, 0x60,
++ 0x88, 0x30, 0xc4, 0x08, 0x30, 0xc0, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x13, 0x12, 0x33, 0x52, 0x13,
++ 0x14, 0x1c, 0x15, 0x16, 0x17, 0x14, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x88, 0xc8, 0x28, 0x08, 0xe8, 0x30, 0x00, 0x00,
++ 0x08, 0x0a, 0x0a, 0x12, 0x1f, 0x32, 0x52, 0x17,
++ 0x14, 0x14, 0x14, 0x17, 0x14, 0x10, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x48, 0xc8, 0xa8,
++ 0xb0, 0x90, 0xb0, 0xa8, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x10, 0x10, 0x37, 0x50, 0x10,
++ 0x13, 0x1d, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x50, 0xfc, 0x60, 0x90,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x09, 0x09, 0x0b, 0x12, 0x15, 0x39, 0x52, 0x14,
++ 0x10, 0x11, 0x15, 0x15, 0x19, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0xa8, 0xa8, 0x68, 0x68, 0xb0,
++ 0x80, 0x50, 0x48, 0x04, 0x14, 0xf0, 0x00, 0x00,
++ 0x09, 0x08, 0x08, 0x11, 0x17, 0x38, 0x57, 0x14,
++ 0x16, 0x15, 0x16, 0x15, 0x14, 0x15, 0x00, 0x00,
++ 0xc0, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xa8, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x12, 0x13, 0x32, 0x53, 0x12,
++ 0x10, 0x10, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xc8,
++ 0xd0, 0xd0, 0x68, 0x7c, 0x44, 0x3c, 0x00, 0x00,
++ 0x09, 0x09, 0x09, 0x1f, 0x15, 0x34, 0x54, 0x1b,
++ 0x11, 0x11, 0x12, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x48, 0xc8, 0xa8, 0x28,
++ 0x30, 0x10, 0x90, 0xa8, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x13, 0x12, 0x33, 0x52, 0x13,
++ 0x12, 0x10, 0x1f, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x50, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x58, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x08, 0x0f, 0x0c, 0x14, 0x14, 0x34, 0x54, 0x15,
++ 0x15, 0x15, 0x15, 0x14, 0x17, 0x14, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x90, 0xf0, 0x00, 0xf8,
++ 0x68, 0x68, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x0a, 0x0a, 0x0f, 0x12, 0x1f, 0x32, 0x52, 0x1f,
++ 0x12, 0x13, 0x12, 0x14, 0x14, 0x19, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0x7c, 0xc8, 0x48, 0xa8, 0xa8,
++ 0x30, 0x90, 0x90, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x1f, 0x60, 0x1e, 0x12, 0x12,
++ 0x1e, 0x08, 0x0c, 0x12, 0x22, 0x41, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0xf0, 0x0c, 0xf0, 0x90, 0x90,
++ 0xf0, 0x20, 0x20, 0x50, 0x88, 0x08, 0x00, 0x00,
++ 0x08, 0x0f, 0x09, 0x17, 0x15, 0x37, 0x50, 0x1f,
++ 0x11, 0x17, 0x1a, 0x13, 0x12, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x28, 0xf8, 0x80, 0xfc,
++ 0x20, 0xf8, 0x24, 0xe0, 0x08, 0xf8, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x13, 0x12, 0x33, 0x53, 0x10,
++ 0x17, 0x10, 0x1f, 0x12, 0x11, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0xf8, 0x48,
++ 0xfc, 0x10, 0xfc, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x17, 0x12, 0x33, 0x53, 0x12,
++ 0x13, 0x10, 0x1f, 0x11, 0x10, 0x17, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0xf8, 0x48,
++ 0xf8, 0x80, 0xfc, 0x90, 0x70, 0x88, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x13, 0x10, 0x33, 0x52, 0x13,
++ 0x11, 0x1f, 0x10, 0x13, 0x12, 0x13, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xf8, 0x08, 0xf8,
++ 0x10, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0x00,
++ 0x08, 0x0f, 0x0a, 0x14, 0x13, 0x32, 0x53, 0x12,
++ 0x13, 0x12, 0x15, 0x14, 0x1a, 0x12, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x44, 0xf0, 0x10, 0xf8, 0x08,
++ 0xfc, 0x54, 0x2c, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x17, 0x11, 0x37, 0x51, 0x11,
++ 0x16, 0x17, 0x10, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xbc, 0x10, 0xbc,
++ 0x00, 0xfc, 0xa0, 0xa0, 0x24, 0x1c, 0x00, 0x00,
++ 0x09, 0x0f, 0x0d, 0x15, 0x17, 0x33, 0x55, 0x19,
++ 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x10, 0xfc, 0x50, 0x50, 0xfc, 0x30, 0xb4, 0x4c,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x09, 0x09, 0x0f, 0x11, 0x1f, 0x33, 0x52, 0x14,
++ 0x1b, 0x12, 0x13, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0xfc, 0x30, 0xb0, 0xc8,
++ 0xf4, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x0f, 0x09, 0x1f, 0x10, 0x33, 0x52, 0x13,
++ 0x12, 0x13, 0x10, 0x13, 0x10, 0x17, 0x00, 0x00,
++ 0x40, 0xf8, 0x20, 0xfc, 0x00, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00,
++ 0x08, 0x0f, 0x09, 0x17, 0x15, 0x37, 0x53, 0x12,
++ 0x13, 0x13, 0x12, 0x13, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x28, 0xf8, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x30, 0x08, 0x00, 0x00,
++ 0x08, 0x0f, 0x0b, 0x12, 0x13, 0x32, 0x53, 0x17,
++ 0x13, 0x12, 0x13, 0x12, 0x13, 0x17, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xfc,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x11, 0x17, 0x30, 0x53, 0x12,
++ 0x12, 0x13, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xfc, 0x00, 0xb8, 0xa8,
++ 0xa8, 0xb8, 0x10, 0x98, 0x64, 0x44, 0x00, 0x00,
++ 0x09, 0x09, 0x0b, 0x12, 0x17, 0x3a, 0x53, 0x12,
++ 0x13, 0x10, 0x17, 0x14, 0x14, 0x14, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x40, 0xf8, 0x40, 0xf8, 0x40,
++ 0xfc, 0x00, 0xbc, 0xa4, 0xe4, 0x0c, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x13, 0x12, 0x33, 0x50, 0x17,
++ 0x14, 0x17, 0x15, 0x19, 0x19, 0x17, 0x00, 0x00,
++ 0xa0, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x00, 0xf8,
++ 0xe0, 0xfc, 0x48, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x08, 0x0f, 0x0d, 0x17, 0x14, 0x37, 0x55, 0x17,
++ 0x10, 0x13, 0x12, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x20, 0xe0, 0x20, 0xbc, 0xc0, 0x80, 0x38, 0xc0,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x11, 0x3e, 0x2a, 0x6a, 0x2e, 0x32,
++ 0x23, 0x22, 0x23, 0x22, 0x24, 0x28, 0x00, 0x00,
++ 0x80, 0xfc, 0x48, 0xb8, 0xa8, 0xb8, 0xe8, 0x14,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x13, 0x1f, 0x33, 0x50, 0x13,
++ 0x1f, 0x10, 0x17, 0x15, 0x17, 0x14, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xfc, 0xe8, 0x40, 0xf8,
++ 0xfc, 0x08, 0xfc, 0x48, 0x28, 0x18, 0x00, 0x00,
++ 0x09, 0x0f, 0x09, 0x13, 0x12, 0x33, 0x50, 0x17,
++ 0x14, 0x18, 0x13, 0x10, 0x10, 0x17, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0xa8, 0xf8, 0x00, 0xfc,
++ 0x44, 0xf8, 0x90, 0x60, 0xc0, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x13, 0x12, 0x33, 0x52, 0x10,
++ 0x17, 0x15, 0x17, 0x15, 0x17, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00,
++ 0xfc, 0x54, 0xfc, 0x54, 0xfc, 0x44, 0x00, 0x00,
++ 0x15, 0x1f, 0x15, 0x17, 0x22, 0x2f, 0x6a, 0x2f,
++ 0x22, 0x2f, 0x22, 0x2f, 0x25, 0x28, 0x00, 0x00,
++ 0x28, 0xa8, 0x28, 0x7c, 0x50, 0xd0, 0xfc, 0xd0,
++ 0x50, 0xfc, 0x50, 0xd0, 0x7c, 0xc0, 0x00, 0x00,
++ 0x0f, 0x08, 0x0f, 0x15, 0x10, 0x37, 0x54, 0x17,
++ 0x14, 0x17, 0x15, 0x19, 0x19, 0x17, 0x00, 0x00,
++ 0xbc, 0x00, 0xbc, 0xb4, 0x40, 0xfc, 0xa0, 0xf8,
++ 0xa8, 0xf8, 0xe4, 0x38, 0xe4, 0x1c, 0x00, 0x00,
++ 0x13, 0x12, 0x13, 0x20, 0x2f, 0x6b, 0x29, 0x2f,
++ 0x2a, 0x2b, 0x2b, 0x32, 0x37, 0x20, 0x00, 0x00,
++ 0xb8, 0xa8, 0xb8, 0x00, 0xfc, 0xa0, 0x20, 0xfc,
++ 0xe8, 0xa8, 0x90, 0xd0, 0xa8, 0xc4, 0x00, 0x00,
++ 0x09, 0x0f, 0x0d, 0x11, 0x13, 0x33, 0x52, 0x13,
++ 0x10, 0x13, 0x10, 0x17, 0x12, 0x14, 0x00, 0x00,
++ 0x50, 0xfc, 0x18, 0xf0, 0xf8, 0x58, 0xe8, 0xf8,
++ 0x40, 0xf8, 0x40, 0xfc, 0xa8, 0xa4, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x02, 0x3c, 0x20, 0x20, 0x3e, 0x20, 0x20, 0x3f,
++ 0x24, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x08, 0xf8,
++ 0x88, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x04, 0x08, 0x10, 0x6f, 0x08, 0x08, 0x08,
++ 0x0f, 0x02, 0x02, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0xc0, 0x40, 0x20, 0x10, 0xec, 0x20, 0x20, 0x20,
++ 0xe0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x02, 0x03, 0x04, 0x18, 0x7f, 0x11, 0x11, 0x1f,
++ 0x13, 0x03, 0x05, 0x09, 0x11, 0x60, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x80, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0x40, 0x20, 0x24, 0x04, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x22, 0x22, 0x3e,
++ 0x14, 0x14, 0x15, 0x26, 0x2c, 0x41, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x88, 0x88, 0xf8,
++ 0x50, 0x50, 0x50, 0x94, 0x94, 0x0c, 0x00, 0x00,
++ 0x08, 0x3e, 0x14, 0x7f, 0x00, 0x3e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x14, 0x15, 0x26, 0x4d, 0x00, 0x00,
++ 0x20, 0xf8, 0x50, 0xfc, 0x00, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x3f, 0x21, 0x2d, 0x25,
++ 0x25, 0x2b, 0x33, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x08, 0x68, 0x28,
++ 0x28, 0x58, 0x98, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x07, 0x02, 0x04, 0x18, 0x6f, 0x00, 0x3e, 0x22,
++ 0x3a, 0x27, 0x3a, 0x26, 0x22, 0x26, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x30, 0xec, 0x00, 0x48, 0x48,
++ 0x90, 0x20, 0x90, 0x90, 0x48, 0x48, 0x00, 0x00,
++ 0x01, 0x04, 0x08, 0x10, 0x6f, 0x04, 0x04, 0x07,
++ 0x08, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
++ 0xc0, 0x40, 0x20, 0x10, 0xec, 0x00, 0x00, 0xe0,
++ 0x20, 0x20, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00,
++ 0x04, 0x3c, 0x04, 0x1f, 0x69, 0x0f, 0x09, 0x0f,
++ 0x04, 0x3f, 0x04, 0x7f, 0x08, 0x30, 0x00, 0x00,
++ 0x48, 0x70, 0x44, 0xfc, 0x20, 0xe0, 0x20, 0xe0,
++ 0x40, 0xf8, 0x40, 0xfc, 0x20, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x27, 0x24, 0x24, 0x27,
++ 0x24, 0x24, 0x24, 0x23, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xc8, 0x48, 0x48, 0xc8,
++ 0x08, 0x28, 0x28, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x1e, 0x12, 0x12, 0x12, 0x12, 0x7f, 0x12,
++ 0x12, 0x12, 0x12, 0x22, 0x22, 0x47, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x48, 0x48, 0xfc, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x11, 0x11, 0x1f, 0x11,
++ 0x11, 0x7f, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10,
++ 0x10, 0xfc, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x28, 0x28, 0x30, 0x27,
++ 0x24, 0x24, 0x24, 0x27, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x98, 0x78, 0x08, 0xc8,
++ 0x48, 0x48, 0x48, 0xc8, 0x48, 0x18, 0x00, 0x00,
++ 0x01, 0x3f, 0x21, 0x3f, 0x21, 0x3f, 0x00, 0x1f,
++ 0x10, 0x17, 0x10, 0x17, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00, 0xf0,
++ 0x10, 0xd0, 0x10, 0xd0, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x3f, 0x04, 0x1f, 0x04, 0x7f, 0x01, 0x1f,
++ 0x11, 0x1f, 0x11, 0x7f, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xfc, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x07, 0x18,
++ 0x7f, 0x11, 0x1f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xc0, 0x80,
++ 0xf0, 0x10, 0xf0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x10, 0x20, 0x40,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x04, 0x08, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x47, 0x18, 0x7f, 0x11, 0x11,
++ 0x1f, 0x13, 0x03, 0x05, 0x19, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xc0, 0x80, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x40, 0x24, 0x24, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x5e, 0x00, 0x00, 0x7f, 0x14,
++ 0x14, 0x14, 0x14, 0x25, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x40, 0x7c, 0x40, 0xf8, 0x88,
++ 0x50, 0x30, 0x68, 0x8c, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x5f, 0x02, 0x06, 0x19, 0x6b,
++ 0x0c, 0x35, 0x06, 0x0c, 0x30, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf8, 0x00, 0x48, 0x48, 0x50,
++ 0xa0, 0xa0, 0x90, 0x88, 0x84, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x5c, 0x10, 0x1e, 0x10, 0x1f,
++ 0x04, 0x1f, 0x6a, 0x25, 0x25, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x00, 0xf8, 0x48, 0x28, 0x28, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x7f, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x7f, 0x09, 0x1f, 0x69, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0xe0, 0x20, 0xe0, 0x20,
++ 0xe0, 0xfc, 0x20, 0xf0, 0x2c, 0x60, 0x00, 0x00,
++ 0x00, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x02, 0x02, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x17, 0x10, 0x00, 0x00, 0x1f,
++ 0x10, 0x21, 0x21, 0x42, 0x44, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf0, 0x90, 0x90, 0x90, 0xfc,
++ 0xc0, 0x20, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x22, 0x12, 0x13, 0x02, 0x02, 0x12,
++ 0x13, 0x22, 0x20, 0x40, 0x5f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x13, 0x12, 0x02, 0x02, 0x12,
++ 0x13, 0x22, 0x20, 0x40, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x10, 0x17, 0x00, 0x00, 0x11,
++ 0x11, 0x22, 0x24, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x44, 0xe4, 0xe8, 0xf0, 0x60,
++ 0x50, 0x50, 0x48, 0x44, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x03, 0x22, 0x12, 0x12, 0x03, 0x02, 0x10,
++ 0x10, 0x21, 0x21, 0x42, 0x44, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0xa8, 0xa0,
++ 0xa0, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x0f, 0x22, 0x12, 0x13, 0x04, 0x04, 0x1a,
++ 0x13, 0x21, 0x22, 0x42, 0x44, 0x08, 0x00, 0x00,
++ 0x08, 0xc8, 0x28, 0x28, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0x28, 0x28, 0x28, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x07, 0x24, 0x14, 0x17, 0x04, 0x04, 0x15,
++ 0x15, 0x25, 0x25, 0x44, 0x47, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x88, 0xe8,
++ 0x28, 0x28, 0xe8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x27, 0x10, 0x13, 0x02, 0x02, 0x13,
++ 0x10, 0x22, 0x22, 0x44, 0x48, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0xf8, 0x08, 0x08, 0xf8,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x00, 0x07, 0x20, 0x13, 0x12, 0x02, 0x02, 0x13,
++ 0x11, 0x20, 0x27, 0x41, 0x42, 0x04, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf8, 0xe8, 0xa8, 0xe8, 0xf8,
++ 0xf0, 0x00, 0xfc, 0x50, 0x48, 0x48, 0x00, 0x00,
++ 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x12, 0x1f, 0x11, 0x14,
++ 0x17, 0x15, 0x1d, 0x22, 0x25, 0x58, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0xe8, 0x10, 0xf0, 0x00,
++ 0x70, 0x54, 0x54, 0xcc, 0x80, 0x7c, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x11, 0x1f, 0x11, 0x13,
++ 0x13, 0x15, 0x15, 0x29, 0x31, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x90,
++ 0x50, 0x50, 0x34, 0x2c, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x0b, 0x10, 0x17, 0x30, 0x50, 0x13, 0x10,
++ 0x07, 0x04, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x00,
++ 0xc0, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x17, 0x14, 0x17, 0x14, 0x17,
++ 0x10, 0x1f, 0x11, 0x27, 0x21, 0x4f, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xd0, 0x50, 0xd0, 0x50, 0xd0,
++ 0x10, 0xf0, 0x14, 0xcc, 0x0c, 0xe4, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x0f, 0x00, 0x40, 0x41, 0x5d, 0x55, 0x55, 0x55,
++ 0x5d, 0x55, 0x41, 0x46, 0x7f, 0x40, 0x00, 0x00,
++ 0xe0, 0x40, 0x88, 0x08, 0xf8, 0x98, 0x68, 0x28,
++ 0x58, 0x98, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x02, 0x22, 0x12, 0x0a, 0x06,
++ 0x05, 0x04, 0x08, 0x10, 0x20, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x90, 0x70, 0x1c, 0x10, 0x20, 0xc0, 0x00, 0x00,
++ 0x01, 0x06, 0x3c, 0x04, 0x04, 0x04, 0x7f, 0x04,
++ 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0xc8, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x09, 0x09, 0x09, 0x7f,
++ 0x08, 0x0c, 0x12, 0x11, 0x21, 0x40, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0xc8,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x1f, 0x2a, 0x2a, 0x4a, 0x12,
++ 0x14, 0x24, 0x08, 0x11, 0x01, 0x06, 0x00, 0x00,
++ 0x08, 0x28, 0x28, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x3f, 0x04, 0x04, 0x7f, 0x08,
++ 0x0a, 0x09, 0x11, 0x1f, 0x70, 0x00, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0xc8, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x2a, 0x2a, 0x2a, 0x2a, 0x7f, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x21, 0x00, 0x00,
++ 0x08, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xe8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x01, 0x06, 0x3c, 0x04, 0x04, 0x7f, 0x04, 0x04,
++ 0x3f, 0x21, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0xc8, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x14, 0x22, 0x5d, 0x00, 0x7f,
++ 0x10, 0x1e, 0x22, 0x02, 0x02, 0x0c, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x02, 0x02, 0x3c, 0x06, 0x19, 0x64, 0x04, 0x7f,
++ 0x0c, 0x0e, 0x15, 0x25, 0x44, 0x04, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x22, 0x12, 0x15, 0x7e, 0x14, 0x15, 0x14, 0x7f,
++ 0x14, 0x14, 0x14, 0x24, 0x25, 0x46, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x48, 0x48, 0x48, 0xc8, 0x48,
++ 0x68, 0x58, 0x8c, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x2a, 0x2a, 0x54, 0x54, 0x2a, 0x2a,
++ 0x00, 0x7f, 0x08, 0x08, 0x0f, 0x78, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x22, 0x22,
++ 0x3e, 0x14, 0x14, 0x14, 0x24, 0x43, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x08, 0x1c, 0x04, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x7f, 0x49, 0x49, 0x7f,
++ 0x4c, 0x1a, 0x19, 0x29, 0x48, 0x08, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x0c, 0x12, 0x22, 0x7f, 0x01,
++ 0x3d, 0x25, 0x25, 0x3d, 0x21, 0x03, 0x00, 0x00,
++ 0x08, 0x48, 0xc8, 0x48, 0x48, 0x48, 0xc8, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x3f, 0x21, 0x3f, 0x10, 0x1f,
++ 0x2b, 0x4b, 0x15, 0x25, 0x09, 0x16, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x04, 0x7f, 0x3e, 0x2a, 0x36, 0x2a, 0x2a,
++ 0x26, 0x00, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x20, 0x40, 0xfc, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x18, 0x00, 0xf8, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x08, 0x2a, 0x2a, 0x3e, 0x00, 0x7f, 0x00, 0x3e,
++ 0x22, 0x3e, 0x22, 0x14, 0x1e, 0x70, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x7f, 0x15, 0x75, 0x15, 0x35,
++ 0x5c, 0x0e, 0x15, 0x24, 0x44, 0x04, 0x00, 0x00,
++ 0x88, 0x28, 0x28, 0xe8, 0x28, 0xe8, 0x28, 0x68,
++ 0xe8, 0x28, 0x28, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x12, 0x12, 0x7f, 0x12, 0x14, 0x0a, 0x11, 0x1f,
++ 0x20, 0x5f, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x08, 0x48, 0xc8, 0x48, 0x48, 0x48, 0x48, 0xc8,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x24, 0x49, 0x24, 0x3f, 0x24, 0x3f, 0x24, 0x3f,
++ 0x04, 0x7f, 0x0e, 0x15, 0x64, 0x04, 0x00, 0x00,
++ 0x88, 0x28, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0x28, 0xe8, 0x28, 0x08, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x14, 0x7f, 0x55, 0x7f, 0x00, 0x3e,
++ 0x00, 0x7f, 0x2a, 0x29, 0x49, 0x18, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x0a, 0x11, 0x3f, 0x40, 0x3f, 0x2d,
++ 0x3f, 0x12, 0x1a, 0x15, 0x24, 0x48, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x88, 0x98, 0x00, 0x00,
++ 0x04, 0x04, 0x0a, 0x11, 0x3f, 0x40, 0x3f, 0x2d,
++ 0x3f, 0x12, 0x12, 0x2d, 0x25, 0x49, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xa8, 0xa8, 0x68, 0x68, 0x28,
++ 0x38, 0x28, 0x4c, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x0a, 0x11, 0x3f, 0x40, 0x3f, 0x2d,
++ 0x3f, 0x12, 0x12, 0x2d, 0x25, 0x49, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0x28, 0x68, 0x68, 0xa8, 0xa8,
++ 0x28, 0x28, 0x48, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x3e, 0x49, 0x3e, 0x2a,
++ 0x2a, 0x3e, 0x14, 0x12, 0x23, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0xc8, 0x48,
++ 0x68, 0x58, 0x8c, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x21, 0x3e, 0x32, 0x5e,
++ 0x10, 0x3f, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x50, 0xfc, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x08, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x04, 0x7f, 0x0a, 0x7f, 0x2e, 0x2e, 0x3f, 0x51,
++ 0x1f, 0x11, 0x1f, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x08, 0xe8, 0xa8, 0x28, 0xa8, 0xe8, 0x68, 0x28,
++ 0x28, 0x28, 0x28, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x7c, 0x28, 0x2a, 0x2a, 0x7e, 0x12,
++ 0x1e, 0x70, 0x10, 0x11, 0x21, 0x42, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0xa8, 0xa8, 0xa8, 0xfc, 0x90,
++ 0x90, 0xfc, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x7f, 0x2a, 0x2a, 0x2a, 0x7e, 0x12,
++ 0x1e, 0x72, 0x12, 0x14, 0x24, 0x49, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0xa8, 0xa8, 0xa8, 0xfc, 0x90,
++ 0x90, 0xfc, 0x90, 0x90, 0x90, 0x90, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x1e, 0x23, 0x22, 0x7a, 0x2a,
++ 0x2a, 0x2a, 0x3a, 0x22, 0x03, 0x0e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x7e, 0x12, 0x12, 0x13, 0x22, 0x4c, 0x00,
++ 0x3e, 0x22, 0x22, 0x22, 0x3f, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x08, 0x3e, 0x00,
++ 0x3e, 0x22, 0x22, 0x22, 0x3f, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x1f, 0x21, 0x02, 0x7f, 0x06,
++ 0x0a, 0x1f, 0x62, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0xf8, 0x08, 0x80, 0xfc, 0x40,
++ 0x20, 0xf0, 0x2c, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x00, 0x7f, 0x2a, 0x2a, 0x55, 0x54, 0x2a, 0x2a,
++ 0x00, 0x7f, 0x08, 0x08, 0x0e, 0x79, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x00, 0x3f, 0x22, 0x22, 0x3e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x49, 0x1a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x3e, 0x22,
++ 0x3f, 0x22, 0x3e, 0x22, 0x3f, 0x61, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x40, 0x40,
++ 0xf8, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x08, 0x0c, 0x2a, 0x2a, 0x59, 0x14, 0x22, 0x3f,
++ 0x22, 0x5f, 0x02, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x20, 0x30, 0xa8, 0xa8, 0x60, 0x50, 0x88, 0xfc,
++ 0x08, 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x08, 0x7f, 0x3e, 0x22,
++ 0x3e, 0x3e, 0x22, 0x3e, 0x12, 0x61, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x2a, 0x54, 0x2a, 0x3e, 0x2b, 0x3e, 0x2a, 0x3e,
++ 0x08, 0x7e, 0x1c, 0x2a, 0x49, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1e, 0x23, 0x7e, 0x23, 0x3e,
++ 0x22, 0x3e, 0x3e, 0x20, 0x3e, 0x21, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x40, 0x40, 0xf8, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x2b, 0x5d, 0x2b, 0x4d, 0x1a, 0x61,
++ 0x09, 0x34, 0x0a, 0x34, 0x09, 0x32, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x06, 0x38, 0x7f, 0x08, 0x7f, 0x6b, 0x5d, 0x7f,
++ 0x08, 0x7f, 0x08, 0x7e, 0x3a, 0x55, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x25, 0x3f, 0x25, 0x2f, 0x2a, 0x2f,
++ 0x2a, 0x2f, 0x3f, 0x33, 0x3f, 0x50, 0x00, 0x00,
++ 0x20, 0xa0, 0x20, 0xa0, 0x78, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xe8, 0x68, 0xc8, 0xd8, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x77, 0x55, 0x77, 0x24, 0x3f,
++ 0x24, 0x7e, 0x24, 0x3e, 0x24, 0x3f, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0f, 0x10, 0x10, 0x20, 0x40,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0f, 0x12, 0x12, 0x2e, 0x45,
++ 0x04, 0x08, 0x10, 0x01, 0x02, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x48, 0x48, 0x48, 0xc8,
++ 0x48, 0xa8, 0x88, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0f, 0x10, 0x11, 0x39, 0x57,
++ 0x13, 0x14, 0x18, 0x1f, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x48, 0x48,
++ 0x48, 0xc8, 0x48, 0xc8, 0x48, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x10, 0x3f, 0x52, 0x12,
++ 0x1f, 0x12, 0x12, 0x1f, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0x08, 0xc8, 0x48, 0x48,
++ 0xc8, 0x48, 0x48, 0xc8, 0x48, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x12, 0x3f, 0x42, 0x1f, 0x12,
++ 0x1f, 0x12, 0x1f, 0x12, 0x12, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x48, 0xe8, 0x08, 0xc8, 0x48,
++ 0xc8, 0x48, 0xc8, 0x48, 0xc8, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x10, 0x3f, 0x4f, 0x08, 0x0f,
++ 0x1f, 0x12, 0x1f, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0xc8, 0x88, 0x88, 0x88,
++ 0xc8, 0x48, 0xc8, 0x48, 0xc8, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x14, 0x12, 0x3f, 0x40, 0x7e,
++ 0x10, 0x1e, 0x22, 0x02, 0x02, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x88, 0xe8, 0xa8, 0xa8,
++ 0xe8, 0xb0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x13, 0x1c,
++ 0x70, 0x10, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x10, 0x20, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x04, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x27, 0x24, 0x27, 0x24, 0x27,
++ 0x24, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x90, 0xf0, 0x90, 0xf0,
++ 0x90, 0x80, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x24, 0x35, 0x2b, 0x29, 0x21,
++ 0x25, 0x25, 0x29, 0x29, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0xa0, 0xf8, 0x20, 0xf8, 0x20,
++ 0xf8, 0x20, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x27, 0x24, 0x3f, 0x27, 0x24,
++ 0x27, 0x27, 0x27, 0x2c, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0x90, 0xfc, 0xf0, 0x10,
++ 0xf0, 0xf0, 0xf0, 0x18, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x21, 0x27, 0x38, 0x27, 0x25,
++ 0x27, 0x22, 0x25, 0x29, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x80, 0x40, 0xf0, 0x08, 0x70, 0x50,
++ 0x70, 0x20, 0x50, 0x88, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x20, 0x23, 0x22, 0x23, 0x20, 0x2f,
++ 0x29, 0x2f, 0x29, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xe0, 0x20, 0xe0, 0x00, 0x78,
++ 0x48, 0x78, 0x48, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x3f, 0x04, 0x04, 0x08, 0x11, 0x21,
++ 0x01, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x40, 0x44, 0x44, 0x3c, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x7f, 0x11,
++ 0x11, 0x11, 0x11, 0x21, 0x21, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x7f, 0x11, 0x11,
++ 0x11, 0x11, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x3f, 0x01, 0x09, 0x09, 0x08,
++ 0x7f, 0x08, 0x08, 0x10, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x20, 0x20, 0x20,
++ 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x3f, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0xf8, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x01, 0x21, 0x13, 0x12, 0x07, 0x1a, 0x13, 0x22,
++ 0x23, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0x20, 0xf8, 0x40, 0xf0, 0x40, 0xf0, 0x40,
++ 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x00, 0x80, 0x40, 0x20,
++ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x09, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x13, 0x12,
++ 0x12, 0x12, 0x12, 0x22, 0x22, 0x41, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10,
++ 0x10, 0x10, 0x60, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x1e, 0x12, 0x12, 0x32, 0x2a, 0x4c,
++ 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0xb0, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x08, 0x0c, 0x12, 0x21, 0x49, 0x0c, 0x12, 0x11,
++ 0x3f, 0x52, 0x12, 0x12, 0x1e, 0x10, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x70, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x1f, 0x02, 0x7f, 0x04, 0x08,
++ 0x17, 0x64, 0x04, 0x05, 0x04, 0x03, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0xf0, 0x80, 0xfc, 0x40, 0x20,
++ 0xd0, 0x4c, 0x40, 0x80, 0x10, 0xf0, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x20, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x13, 0x12, 0x12, 0x12, 0x1f, 0x12,
++ 0x13, 0x13, 0x25, 0x25, 0x49, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x90, 0xa8, 0x28, 0xd0, 0x14,
++ 0x24, 0x08, 0x10, 0x24, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x14, 0x17, 0x14, 0x17,
++ 0x14, 0x14, 0x17, 0x23, 0x24, 0x48, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x88, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x28, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x1f, 0x17, 0x10, 0x13, 0x12, 0x13, 0x13,
++ 0x12, 0x13, 0x11, 0x27, 0x20, 0x4f, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x80, 0xf0, 0x10, 0xf0, 0xf0,
++ 0x10, 0xf0, 0xf0, 0x20, 0xe0, 0x38, 0x00, 0x00,
++ 0x00, 0x1f, 0x18, 0x14, 0x15, 0x1f, 0x12, 0x1a,
++ 0x1a, 0x1f, 0x1a, 0x22, 0x24, 0x48, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xa0, 0x20, 0xfc, 0x54, 0x98,
++ 0x90, 0x90, 0xb0, 0x28, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x1f, 0x15, 0x15, 0x1f, 0x15, 0x17, 0x15,
++ 0x17, 0x15, 0x1f, 0x25, 0x24, 0x48, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x10, 0xe0, 0x40, 0x7c, 0x50,
++ 0x50, 0x50, 0xd0, 0x50, 0x90, 0x90, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x17, 0x16, 0x1a, 0x1f, 0x18,
++ 0x1f, 0x1d, 0x1d, 0x2f, 0x28, 0x49, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0xa0, 0xfc, 0xc8, 0xa8,
++ 0xa8, 0x90, 0x90, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
++ 0x04, 0x04, 0x08, 0x10, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x20, 0x10, 0x08, 0xf8, 0x04, 0x04, 0x00, 0x00,
++ 0x01, 0x02, 0x1f, 0x08, 0x15, 0x7e, 0x04, 0x18,
++ 0x63, 0x0c, 0x01, 0x0e, 0x00, 0x1f, 0x00, 0x00,
++ 0x00, 0x40, 0xf0, 0x10, 0x28, 0xfc, 0x40, 0xb0,
++ 0x0c, 0x40, 0x90, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x5f, 0x10, 0x1f, 0x17, 0x1f,
++ 0x02, 0x7f, 0x1a, 0x64, 0x19, 0x07, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0xf0, 0x10, 0xd0, 0xf0, 0xf0,
++ 0x00, 0xfc, 0xb0, 0xcc, 0x20, 0xd0, 0x00, 0x00,
++ 0x12, 0x1f, 0x24, 0x7f, 0x24, 0x3e, 0x24, 0x3f,
++ 0x20, 0x1f, 0x02, 0x01, 0x06, 0x38, 0x00, 0x00,
++ 0x48, 0xfc, 0x90, 0xf8, 0x90, 0xf8, 0x90, 0xfc,
++ 0x80, 0xf0, 0x60, 0x80, 0xe0, 0x1c, 0x00, 0x00,
++ 0x05, 0x39, 0x21, 0x3d, 0x21, 0x21, 0x3f, 0x01,
++ 0x3f, 0x04, 0x02, 0x01, 0x06, 0x78, 0x00, 0x00,
++ 0x00, 0x78, 0x08, 0x78, 0x08, 0x08, 0xf8, 0x00,
++ 0xf0, 0x20, 0x40, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x3f, 0x24,
++ 0x3f, 0x0f, 0x02, 0x01, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xf8, 0x48,
++ 0xf8, 0xe0, 0x40, 0x80, 0xc0, 0x38, 0x00, 0x00,
++ 0x13, 0x17, 0x54, 0x5b, 0x33, 0x1b, 0x2a, 0x23,
++ 0x40, 0x1f, 0x04, 0x03, 0x06, 0x38, 0x00, 0x00,
++ 0x90, 0xd4, 0x34, 0xb8, 0xd0, 0x98, 0xa4, 0xc4,
++ 0x00, 0xe0, 0x40, 0x80, 0xc0, 0x38, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x79, 0x49, 0x42, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x01, 0x00, 0x78, 0x48, 0x49, 0x49, 0x49, 0x49,
++ 0x49, 0x79, 0x4a, 0x42, 0x04, 0x08, 0x00, 0x00,
++ 0xe0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x10, 0x10, 0x10, 0x08, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x00, 0x78, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x79, 0x49, 0x42, 0x04, 0x08, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0xa0,
++ 0xa0, 0x20, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x48, 0x48, 0x48, 0x4f, 0x48,
++ 0x48, 0x48, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x49, 0x4a, 0x4a, 0x4c,
++ 0x4f, 0x48, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x4a, 0x4a, 0x4a, 0x4b, 0x48,
++ 0x48, 0x48, 0x79, 0x4a, 0x44, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x60,
++ 0xa0, 0xa0, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x79, 0x49, 0x49, 0x49, 0x49, 0x49,
++ 0x49, 0x49, 0x7a, 0x42, 0x44, 0x00, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4f, 0x48, 0x49, 0x49, 0x49,
++ 0x49, 0x79, 0x49, 0x42, 0x02, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x00, 0xe0, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x48, 0x49, 0x49, 0x49,
++ 0x4f, 0x79, 0x49, 0x41, 0x01, 0x03, 0x00, 0x00,
++ 0x20, 0xe0, 0x60, 0xa0, 0xa0, 0x20, 0x60, 0xa0,
++ 0x20, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x48, 0x49, 0x4f, 0x48, 0x48,
++ 0x48, 0x48, 0x79, 0x49, 0x42, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0x90, 0x88, 0x3c, 0xe4, 0xa0, 0xa0,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x01, 0x00, 0x78, 0x4b, 0x4a, 0x4a, 0x4a, 0x4a,
++ 0x4a, 0x4b, 0x7a, 0x4a, 0x42, 0x02, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xa8,
++ 0x98, 0x18, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x4a, 0x4a, 0x4f, 0x48,
++ 0x48, 0x48, 0x79, 0x49, 0x42, 0x04, 0x00, 0x00,
++ 0x60, 0x20, 0x20, 0x20, 0x10, 0x10, 0xf8, 0x94,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x04, 0x02, 0x01, 0x06, 0x78,
++ 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0x40, 0x80, 0x60, 0x1c,
++ 0xe0, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x49, 0x49, 0x49, 0x49,
++ 0x79, 0x4a, 0x42, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0xf8, 0x88,
++ 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x49, 0x48, 0x48, 0x4f, 0x48,
++ 0x48, 0x49, 0x79, 0x42, 0x44, 0x00, 0x00, 0x00,
++ 0x40, 0x20, 0x20, 0xc0, 0x44, 0x64, 0xe8, 0xf0,
++ 0xe0, 0x50, 0x50, 0x48, 0x44, 0xc0, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x4b, 0x4a, 0x4a, 0x4a,
++ 0x4a, 0x4b, 0x7a, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xc8, 0x48, 0x48, 0x48,
++ 0x48, 0xc8, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x12, 0x34, 0x4c, 0x0d, 0x13,
++ 0x60, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x60, 0x50, 0x88, 0x08, 0xfc,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4f, 0x48, 0x48, 0x4a, 0x49,
++ 0x48, 0x48, 0x78, 0x48, 0x41, 0x07, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x50, 0x90, 0x90,
++ 0xa0, 0x60, 0x50, 0x88, 0x3c, 0xc4, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
++ 0x4a, 0x4a, 0x7a, 0x4c, 0x47, 0x08, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
++ 0xa0, 0x90, 0xd0, 0xa8, 0xf8, 0x14, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4a, 0x4a, 0x4b, 0x4a, 0x4a,
++ 0x4a, 0x7b, 0x4a, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x48, 0x48,
++ 0x48, 0xf8, 0x48, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x28, 0x2f, 0x28, 0x28, 0x2e, 0x38,
++ 0x60, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x80, 0x88, 0x90, 0xe0, 0x80, 0x84, 0x84, 0x7c,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x07,
++ 0x04, 0x04, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0xc0,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4a, 0x4b, 0x4a, 0x4a,
++ 0x4b, 0x7a, 0x48, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48,
++ 0xf8, 0x48, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x49, 0x49, 0x49, 0x49,
++ 0x49, 0x49, 0x79, 0x49, 0x47, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x72, 0x52, 0x5f, 0x55, 0x55, 0x55,
++ 0x5d, 0x53, 0x72, 0x52, 0x44, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x48, 0xc8, 0x48, 0x48, 0x30,
++ 0x30, 0x10, 0xb0, 0xa8, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x02, 0x7a, 0x4a, 0x4a, 0x4b, 0x4a, 0x48,
++ 0x4a, 0x4a, 0x7a, 0x4a, 0x43, 0x02, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0x48, 0x48, 0xf8, 0x48, 0x40,
++ 0x48, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x49, 0x49, 0x4b, 0x4d, 0x49,
++ 0x49, 0x49, 0x79, 0x49, 0x41, 0x01, 0x00, 0x00,
++ 0x88, 0x88, 0x88, 0x08, 0xfc, 0x08, 0x48, 0x28,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x4a, 0x4a, 0x4d, 0x49, 0x49,
++ 0x49, 0x79, 0x49, 0x41, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0x08, 0xe8, 0x28, 0x28,
++ 0xe8, 0x30, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x48, 0x48, 0x4f, 0x48, 0x48,
++ 0x4b, 0x78, 0x48, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x00, 0x1f, 0x00, 0x7f,
++ 0x04, 0x07, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x00, 0xf0, 0x00, 0xfc,
++ 0x00, 0xe0, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x1f, 0x10, 0x17, 0x10, 0x17,
++ 0x14, 0x14, 0x14, 0x27, 0x24, 0x40, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0xc8, 0x28, 0xa8,
++ 0xb0, 0x90, 0xb4, 0xac, 0x4c, 0x84, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x49, 0x4f, 0x48, 0x48,
++ 0x4b, 0x78, 0x48, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x90, 0x88, 0x3c, 0xc4, 0x40, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x49, 0x49, 0x4b, 0x4c, 0x48,
++ 0x48, 0x78, 0x48, 0x40, 0x03, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x08, 0x14, 0x94, 0x90,
++ 0x60, 0x60, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x49, 0x4f, 0x49, 0x49, 0x49,
++ 0x49, 0x7f, 0x49, 0x41, 0x02, 0x04, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0x20,
++ 0x20, 0xfc, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x48, 0x49, 0x4b, 0x4c, 0x48,
++ 0x49, 0x79, 0x49, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x02, 0x04, 0x00, 0x19, 0x62,
++ 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x44, 0x48, 0xb0, 0x10, 0x08,
++ 0xe4, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1e, 0x12, 0x12, 0x12, 0x12, 0x1e, 0x1a,
++ 0x18, 0x14, 0x15, 0x22, 0x21, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0xf8, 0x60,
++ 0x50, 0x88, 0x08, 0x00, 0x80, 0x7c, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x4b, 0x4a, 0x4a, 0x4a,
++ 0x4b, 0x7b, 0x4a, 0x42, 0x03, 0x02, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0x38, 0x38, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4c, 0x4b, 0x48, 0x48,
++ 0x4f, 0x48, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x30, 0xc0, 0x40, 0x7c,
++ 0xc0, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x48, 0x48, 0x4f, 0x48, 0x48,
++ 0x49, 0x4e, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x50, 0xfc, 0x40, 0x88,
++ 0x90, 0xe0, 0x80, 0x88, 0x88, 0x78, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x09, 0x09, 0x09, 0x3f, 0x20,
++ 0x27, 0x24, 0x24, 0x27, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0x20, 0xf8, 0x08,
++ 0xc8, 0x48, 0x48, 0xc8, 0x48, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x7a, 0x4c, 0x48, 0x48, 0x49, 0x4b,
++ 0x4d, 0x79, 0x49, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x78, 0x00, 0x00, 0x80, 0xfc, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1f, 0x11, 0x1f, 0x00, 0x7f,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x01, 0x7f, 0x49, 0x49, 0x4f, 0x49, 0x49,
++ 0x49, 0x7f, 0x49, 0x41, 0x01, 0x03, 0x00, 0x00,
++ 0xa0, 0x28, 0x24, 0x24, 0x20, 0xfc, 0x28, 0x28,
++ 0x90, 0x10, 0x34, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x01, 0x78, 0x4b, 0x48, 0x4f, 0x49, 0x4a,
++ 0x4b, 0x7e, 0x4a, 0x42, 0x02, 0x00, 0x00, 0x00,
++ 0x10, 0xa0, 0xe0, 0x90, 0x80, 0xfc, 0x40, 0x40,
++ 0xf8, 0x48, 0x48, 0x48, 0x58, 0x40, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x4b, 0x49, 0x49, 0x4f,
++ 0x48, 0x7b, 0x4a, 0x42, 0x03, 0x02, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf0, 0x10, 0x10, 0xfc,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x4b, 0x4a, 0x4b, 0x4a, 0x4b,
++ 0x4a, 0x79, 0x48, 0x41, 0x02, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x40, 0x80, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x48, 0x48, 0x4f, 0x48, 0x49,
++ 0x4b, 0x7c, 0x4f, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x80, 0x88, 0xe8, 0x90, 0x90, 0xfc, 0x40, 0xf8,
++ 0x30, 0x40, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x01, 0x01,
++ 0x7f, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x20, 0x10,
++ 0xfc, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x48, 0x4b, 0x4a, 0x4a, 0x4b,
++ 0x4a, 0x7a, 0x4b, 0x42, 0x02, 0x02, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x49, 0x48, 0x48, 0x4f, 0x49,
++ 0x49, 0x7f, 0x49, 0x41, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xf0, 0x40, 0x40, 0xfc, 0x10,
++ 0x10, 0xfc, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x4f, 0x4a, 0x4a, 0x4a, 0x4b,
++ 0x4a, 0x7a, 0x4c, 0x44, 0x08, 0x13, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xe8, 0x28, 0x44, 0xa4, 0x90,
++ 0x90, 0x80, 0xa0, 0x90, 0x88, 0x08, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4a, 0x4a, 0x4a, 0x4b, 0x4a,
++ 0x4a, 0x7a, 0x4c, 0x44, 0x0b, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x72, 0x57, 0x55, 0x59, 0x5f, 0x51,
++ 0x55, 0x75, 0x55, 0x45, 0x07, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x38, 0xe8, 0x28, 0x28, 0xe8, 0x28,
++ 0xe8, 0x28, 0x28, 0xf0, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4c, 0x49, 0x4a, 0x48,
++ 0x4b, 0x78, 0x48, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0xa0, 0x24, 0x1c, 0x00,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0f, 0x18, 0x1f, 0x28, 0x4f, 0x08, 0x0f,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x20, 0xfc, 0x40, 0xf8, 0x40, 0xf8, 0x40, 0xfc,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x07, 0x7c, 0x4a, 0x49, 0x4a, 0x4c, 0x4f,
++ 0x4c, 0x7a, 0x49, 0x41, 0x02, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0xc8, 0xa8, 0x10, 0xa8, 0xc8, 0xf8,
++ 0xc8, 0xa8, 0x30, 0x90, 0xa8, 0x44, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x48, 0x4b, 0x4a, 0x4b, 0x4a,
++ 0x4b, 0x78, 0x4f, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x40, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x7a, 0x4a, 0x4c, 0x49, 0x4a, 0x48,
++ 0x4a, 0x7a, 0x4c, 0x41, 0x02, 0x0c, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xd0, 0xa0, 0x10, 0x50, 0x40,
++ 0x48, 0xc8, 0xb0, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x49, 0x4a, 0x4c, 0x4b, 0x4a,
++ 0x4a, 0x7b, 0x4a, 0x42, 0x03, 0x02, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x08, 0x10, 0xe0, 0x38, 0x08,
++ 0x08, 0xb8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x49, 0x4e, 0x48, 0x4b, 0x48,
++ 0x48, 0x78, 0x4d, 0x45, 0x09, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xec, 0x00, 0xf8, 0x10,
++ 0xa0, 0x50, 0x48, 0x04, 0x14, 0xf0, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x4b, 0x4a, 0x4a, 0x4b, 0x4a,
++ 0x4a, 0x7b, 0x4c, 0x44, 0x09, 0x06, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x50,
++ 0x48, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x01, 0x7f, 0x49, 0x49, 0x4f, 0x49, 0x4b,
++ 0x4b, 0x7d, 0x45, 0x09, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x80, 0x38, 0x28, 0x28, 0xe8, 0x28, 0xa8,
++ 0xa8, 0x78, 0x40, 0x20, 0x10, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x4b, 0x48, 0x4f, 0x48, 0x49,
++ 0x4e, 0x79, 0x4e, 0x41, 0x06, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xe0, 0x20, 0xfc, 0x88, 0xc8,
++ 0xf0, 0x60, 0xd0, 0x48, 0x44, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4c, 0x48, 0x49, 0x4a,
++ 0x48, 0x7b, 0x4d, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x88, 0xf0, 0x90, 0xa0, 0x60,
++ 0x90, 0xfc, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x79, 0x49, 0x4b, 0x4c, 0x48, 0x49,
++ 0x4f, 0x79, 0x49, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x10, 0x20, 0xa0, 0x60, 0x98,
++ 0xf4, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x70, 0x57, 0x54, 0x57, 0x54, 0x57,
++ 0x56, 0x76, 0x57, 0x4a, 0x08, 0x10, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0xc8, 0x28, 0xa8,
++ 0xb0, 0x90, 0xb4, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4b, 0x4a, 0x4b, 0x48, 0x49,
++ 0x49, 0x79, 0x49, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x3f, 0x04, 0x02, 0x3f, 0x21, 0x5f, 0x11,
++ 0x11, 0x01, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x80, 0xfc, 0x08, 0xf0, 0x10,
++ 0x30, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x01, 0x7f, 0x49, 0x49, 0x4f, 0x49, 0x49,
++ 0x4b, 0x7b, 0x4d, 0x49, 0x01, 0x01, 0x00, 0x00,
++ 0x50, 0x90, 0x10, 0x14, 0x34, 0xf8, 0x50, 0x90,
++ 0x50, 0x70, 0x28, 0x28, 0x44, 0x84, 0x00, 0x00,
++ 0x00, 0x02, 0x7a, 0x4b, 0x48, 0x4f, 0x48, 0x4b,
++ 0x4a, 0x7a, 0x4a, 0x42, 0x02, 0x02, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x40, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x02, 0x02, 0x77, 0x54, 0x57, 0x54, 0x57, 0x54,
++ 0x54, 0x77, 0x54, 0x47, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x38, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0x28, 0xa8, 0x30, 0xa0, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x00, 0x1f, 0x11, 0x1f,
++ 0x11, 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x49, 0x48, 0x4b, 0x4a, 0x4c,
++ 0x4b, 0x7a, 0x4a, 0x42, 0x02, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0x48, 0x40,
++ 0xf8, 0x48, 0x48, 0x48, 0x58, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x48, 0x4b, 0x4b, 0x4a, 0x4b,
++ 0x4a, 0x7b, 0x4a, 0x42, 0x02, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x28, 0xa8, 0xf8,
++ 0x48, 0xf8, 0x48, 0x48, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x71, 0x52, 0x57, 0x58, 0x57, 0x54,
++ 0x56, 0x75, 0x56, 0x45, 0x04, 0x05, 0x00, 0x00,
++ 0x80, 0x80, 0x40, 0x20, 0xf0, 0x08, 0xac, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x51, 0x57, 0x55, 0x55, 0x57,
++ 0x51, 0x73, 0x53, 0x45, 0x09, 0x01, 0x00, 0x00,
++ 0x08, 0x08, 0xe8, 0x28, 0xe8, 0x68, 0x68, 0xe8,
++ 0x28, 0xa8, 0x48, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x49, 0x49, 0x49, 0x48, 0x4b,
++ 0x4a, 0x7c, 0x48, 0x40, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x08, 0xa0, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4a, 0x4b, 0x4a, 0x4b,
++ 0x4a, 0x7b, 0x4a, 0x45, 0x05, 0x08, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0x10, 0xf0, 0x00, 0xf8,
++ 0x00, 0xfc, 0xa4, 0x54, 0x54, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4b, 0x4a, 0x4b, 0x4a,
++ 0x4b, 0x78, 0x4f, 0x40, 0x03, 0x0c, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x88, 0xfc, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x00, 0x7b, 0x48, 0x49, 0x48, 0x4f, 0x49,
++ 0x49, 0x7a, 0x4a, 0x44, 0x0b, 0x00, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x4b, 0x4a, 0x4b, 0x4b, 0x4a,
++ 0x4b, 0x79, 0x4b, 0x44, 0x01, 0x0e, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x20, 0xc0, 0xb0, 0x0c, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x4f, 0x48, 0x49, 0x4e, 0x48,
++ 0x4b, 0x7a, 0x4b, 0x42, 0x03, 0x02, 0x00, 0x00,
++ 0x80, 0xf8, 0x90, 0xfc, 0xd8, 0xe0, 0x88, 0xf8,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x02, 0x7a, 0x4b, 0x48, 0x4f, 0x48, 0x4b,
++ 0x4a, 0x7b, 0x4a, 0x40, 0x00, 0x0f, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x80, 0xfc, 0x40, 0xf8,
++ 0x48, 0xf8, 0x50, 0x48, 0x7c, 0x84, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x48, 0x4a, 0x4a, 0x4a, 0x4a,
++ 0x4a, 0x7a, 0x4a, 0x43, 0x01, 0x0e, 0x00, 0x00,
++ 0x18, 0xe0, 0x04, 0xfc, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0xfc, 0x98, 0x04, 0x00, 0x00,
++ 0x00, 0x07, 0x74, 0x54, 0x54, 0x54, 0x54, 0x55,
++ 0x55, 0x75, 0x55, 0x44, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x90, 0xf0, 0x00, 0xf8,
++ 0x68, 0xf8, 0x68, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x7f, 0x52, 0x52, 0x5f, 0x52, 0x5f,
++ 0x52, 0x73, 0x54, 0x44, 0x08, 0x13, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0x20, 0x7c, 0xc8, 0x48, 0xa8,
++ 0x28, 0x90, 0x90, 0xa8, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x49, 0x48, 0x4f, 0x49, 0x49,
++ 0x49, 0x79, 0x49, 0x41, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x02, 0x02, 0x7a, 0x4f, 0x4a, 0x4a, 0x4b, 0x4a,
++ 0x4a, 0x7a, 0x4c, 0x44, 0x08, 0x13, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xbc, 0x40, 0x60, 0xbc, 0xd0,
++ 0x90, 0xfc, 0xb0, 0xa8, 0xc8, 0x04, 0x00, 0x00,
++ 0x02, 0x02, 0x7f, 0x52, 0x5f, 0x5a, 0x5a, 0x5a,
++ 0x7f, 0x57, 0x46, 0x0a, 0x12, 0x02, 0x00, 0x00,
++ 0x20, 0x20, 0xe0, 0x20, 0xfc, 0xd4, 0x98, 0x90,
++ 0x90, 0x30, 0xa8, 0xa8, 0x44, 0x84, 0x00, 0x00,
++ 0x00, 0x00, 0x77, 0x54, 0x54, 0x57, 0x54, 0x55,
++ 0x55, 0x75, 0x55, 0x4a, 0x08, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x90, 0x90, 0xfc, 0x90, 0xd8,
++ 0xf8, 0xf8, 0xfc, 0xbc, 0xd4, 0x90, 0x00, 0x00,
++ 0x00, 0x04, 0x73, 0x52, 0x58, 0x54, 0x54, 0x50,
++ 0x5e, 0x72, 0x53, 0x42, 0x05, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0xfc, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x49, 0x4b, 0x4a, 0x4f, 0x49,
++ 0x49, 0x79, 0x49, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0xfc, 0x08, 0xfc, 0xf0,
++ 0x10, 0xf0, 0x10, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1e, 0x12, 0x12, 0x1e, 0x00, 0x3f, 0x01,
++ 0x7f, 0x00, 0x1e, 0x12, 0x1e, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0xf0, 0x00, 0xf8, 0x00,
++ 0xfc, 0x00, 0xf0, 0x90, 0xf0, 0x90, 0x00, 0x00,
++ 0x05, 0x16, 0x2c, 0x12, 0x3f, 0x20, 0x4f, 0x08,
++ 0x0f, 0x02, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x28, 0x70, 0xb0, 0x48, 0xfc, 0x08, 0xe0, 0x20,
++ 0xe0, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x05, 0x75, 0x55, 0x57, 0x5c, 0x51, 0x5f,
++ 0x52, 0x73, 0x52, 0x43, 0x04, 0x08, 0x00, 0x00,
++ 0x20, 0x24, 0xf8, 0x20, 0xa4, 0xfc, 0x20, 0xf8,
++ 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x05, 0x05, 0x75, 0x5f, 0x55, 0x57, 0x55, 0x57,
++ 0x55, 0x7f, 0x55, 0x45, 0x08, 0x11, 0x00, 0x00,
++ 0x08, 0x10, 0x60, 0xc0, 0x40, 0x7c, 0x50, 0x50,
++ 0x50, 0xd0, 0x50, 0x90, 0x90, 0x10, 0x00, 0x00,
++ 0x02, 0x02, 0x7f, 0x52, 0x57, 0x54, 0x57, 0x54,
++ 0x57, 0x72, 0x5f, 0x42, 0x02, 0x03, 0x00, 0x00,
++ 0x00, 0x38, 0xe8, 0x28, 0xa8, 0xb8, 0xa8, 0xa8,
++ 0xb8, 0x28, 0xc8, 0x48, 0x88, 0x18, 0x00, 0x00,
++ 0x02, 0x02, 0x73, 0x56, 0x5a, 0x5f, 0x52, 0x52,
++ 0x52, 0x77, 0x50, 0x45, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0xa8, 0xa8, 0xfc, 0xa8, 0xa8,
++ 0xa8, 0xfc, 0x00, 0x48, 0xa4, 0xa4, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x49, 0x4f, 0x49, 0x49, 0x49,
++ 0x49, 0x79, 0x48, 0x45, 0x05, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x20, 0xfc, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0xc0, 0x28, 0x14, 0xf4, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x4b, 0x4b, 0x4d, 0x49, 0x4b,
++ 0x48, 0x7f, 0x4a, 0x42, 0x04, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0xb0, 0x78, 0x54, 0x10, 0xf8,
++ 0x00, 0xfc, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x00, 0x07, 0x70, 0x5f, 0x50, 0x57, 0x55, 0x57,
++ 0x54, 0x77, 0x54, 0x47, 0x05, 0x09, 0x00, 0x00,
++ 0x80, 0xf8, 0x88, 0xfc, 0x88, 0xf8, 0xa8, 0xb8,
++ 0x88, 0xf8, 0x88, 0xb8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x02, 0x02, 0x7b, 0x4d, 0x48, 0x48, 0x4f, 0x49,
++ 0x49, 0x79, 0x4a, 0x44, 0x1f, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0x88, 0x00, 0xfc, 0x50,
++ 0x50, 0x58, 0xe4, 0x44, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x48, 0x4b, 0x4a, 0x4b,
++ 0x48, 0x7f, 0x48, 0x41, 0x06, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xb8, 0xa8, 0xb8,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x01, 0x07, 0x79, 0x48, 0x4f, 0x49, 0x49, 0x49,
++ 0x4b, 0x7a, 0x4a, 0x42, 0x02, 0x02, 0x00, 0x00,
++ 0x10, 0xfc, 0x50, 0x40, 0xfc, 0xf0, 0x10, 0xf0,
++ 0xf8, 0x08, 0xe8, 0xa8, 0xe8, 0x18, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4c, 0x4a, 0x4a, 0x4c, 0x4b,
++ 0x4a, 0x7f, 0x48, 0x47, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x48, 0xa8, 0xa4, 0x94, 0x70, 0xf8,
++ 0xa8, 0xfc, 0x00, 0xfc, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x49, 0x49, 0x49, 0x4b,
++ 0x4b, 0x7a, 0x4b, 0x47, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0xf0, 0x10, 0xf0, 0xf0, 0x10, 0xf0, 0xf8,
++ 0xf8, 0x48, 0xf8, 0xfc, 0x10, 0x10, 0x00, 0x00,
++ 0x01, 0x06, 0x76, 0x55, 0x5f, 0x51, 0x52, 0x57,
++ 0x59, 0x77, 0x55, 0x43, 0x03, 0x0c, 0x00, 0x00,
++ 0x04, 0xf4, 0xb4, 0xb4, 0x74, 0x94, 0x94, 0xf4,
++ 0x34, 0xd4, 0x54, 0x84, 0xc4, 0x0c, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x4b, 0x4b, 0x4d, 0x49, 0x49,
++ 0x49, 0x78, 0x4b, 0x42, 0x05, 0x08, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0xf8, 0x50, 0xf0, 0x50,
++ 0xf0, 0xa0, 0xf0, 0x78, 0xc0, 0x7c, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x4b, 0x4b, 0x4d, 0x49, 0x49,
++ 0x49, 0x7f, 0x4a, 0x42, 0x05, 0x08, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0xf8, 0x50, 0xf0, 0x50,
++ 0xf0, 0xfc, 0x48, 0x78, 0xc0, 0x7c, 0x00, 0x00,
++ 0x01, 0x0f, 0x71, 0x55, 0x54, 0x5d, 0x55, 0x55,
++ 0x5d, 0x75, 0x50, 0x45, 0x04, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xd0, 0x14, 0xd8, 0x50, 0x54,
++ 0xd4, 0x4c, 0x00, 0x48, 0xa4, 0xa4, 0x00, 0x00,
++ 0x17, 0x13, 0x6a, 0x2b, 0x13, 0x2a, 0x7b, 0x13,
++ 0x21, 0x3f, 0x27, 0x24, 0x27, 0x20, 0x00, 0x00,
++ 0xf8, 0xa8, 0xb0, 0xb0, 0xa8, 0x28, 0xb8, 0xa0,
++ 0x00, 0xf8, 0xc8, 0x48, 0xc8, 0x18, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4b, 0x4a, 0x4b, 0x4a, 0x4b,
++ 0x4a, 0x7c, 0x4f, 0x43, 0x00, 0x07, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8,
++ 0xa8, 0xc4, 0xfc, 0x20, 0xe0, 0x18, 0x00, 0x00,
++ 0x1e, 0x12, 0x1e, 0x3f, 0x20, 0x2f, 0x22, 0x3f,
++ 0x29, 0x2f, 0x2f, 0x29, 0x3f, 0x41, 0x00, 0x00,
++ 0x78, 0x48, 0x78, 0xfc, 0x20, 0xa0, 0x20, 0xfc,
++ 0x48, 0xa8, 0x30, 0xb0, 0x48, 0x84, 0x00, 0x00,
++ 0x1e, 0x12, 0x1e, 0x7f, 0x02, 0x1f, 0x1f, 0x13,
++ 0x1f, 0x0c, 0x7e, 0x12, 0x1e, 0x12, 0x00, 0x00,
++ 0xf0, 0x90, 0xf0, 0xfc, 0x00, 0xf0, 0x90, 0xf0,
++ 0xf0, 0x60, 0xfc, 0x90, 0xf0, 0x90, 0x00, 0x00,
++ 0x00, 0x07, 0x74, 0x5f, 0x55, 0x57, 0x57, 0x54,
++ 0x57, 0x77, 0x54, 0x47, 0x07, 0x04, 0x00, 0x00,
++ 0x18, 0xf0, 0x88, 0xfc, 0x28, 0xf8, 0x88, 0x88,
++ 0xfc, 0xc8, 0x28, 0xa8, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x03, 0x79, 0x49, 0x49, 0x4b, 0x48, 0x4f,
++ 0x4a, 0x7b, 0x4b, 0x42, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0xf0, 0xf0, 0xf8, 0x10, 0xfc,
++ 0xa8, 0xb8, 0xb8, 0xac, 0xf8, 0x88, 0x00, 0x00,
++ 0x02, 0x02, 0x7f, 0x55, 0x55, 0x57, 0x5a, 0x52,
++ 0x5f, 0x77, 0x56, 0x4a, 0x12, 0x02, 0x00, 0x00,
++ 0x28, 0x28, 0xa8, 0x7c, 0x68, 0xa8, 0xbc, 0x28,
++ 0xa8, 0x3c, 0xa8, 0xa8, 0x3c, 0x20, 0x00, 0x00,
++ 0x02, 0x02, 0x7f, 0x52, 0x5f, 0x5a, 0x5f, 0x5a,
++ 0x5f, 0x72, 0x5f, 0x42, 0x02, 0x02, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x7c, 0xd4, 0xfc, 0xd4, 0xfc,
++ 0xa8, 0x7c, 0x88, 0x7c, 0x28, 0x18, 0x00, 0x00,
++ 0x01, 0x0f, 0x73, 0x57, 0x52, 0x5f, 0x57, 0x5f,
++ 0x53, 0x7e, 0x53, 0x4f, 0x01, 0x07, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xa0, 0xf8, 0xa8, 0xe8, 0xbc,
++ 0xac, 0x44, 0xf0, 0xfc, 0x10, 0xf8, 0x00, 0x00,
++ 0x00, 0x07, 0x75, 0x55, 0x57, 0x55, 0x55, 0x57,
++ 0x55, 0x75, 0x57, 0x46, 0x05, 0x09, 0x00, 0x00,
++ 0x30, 0x50, 0x48, 0xfc, 0xac, 0xf4, 0xfc, 0x00,
++ 0x78, 0x48, 0x78, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x0f, 0x08, 0x7f, 0x5b, 0x5b, 0x5f, 0x5d, 0x5f,
++ 0x5b, 0x7b, 0x4e, 0x0b, 0x10, 0x27, 0x00, 0x00,
++ 0xf8, 0x08, 0xf8, 0x58, 0x58, 0xf8, 0x28, 0xf8,
++ 0xf8, 0xe8, 0xa8, 0xe8, 0xa8, 0xf0, 0x00, 0x00,
++ 0x03, 0x0e, 0x73, 0x5e, 0x53, 0x5c, 0x52, 0x5f,
++ 0x55, 0x76, 0x57, 0x45, 0x06, 0x07, 0x00, 0x00,
++ 0x80, 0x78, 0xa8, 0x28, 0xc8, 0x98, 0xf0, 0xfc,
++ 0x28, 0xd8, 0xf8, 0x28, 0xd8, 0xf8, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x22, 0x22, 0x24, 0x2c, 0x34,
++ 0x24, 0x24, 0x24, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x88, 0x98, 0xa8, 0xc8, 0x88,
++ 0x98, 0x98, 0x78, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x22, 0x2c, 0x37, 0x20, 0x2f,
++ 0x21, 0x21, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x88, 0x68, 0xd8, 0x08, 0xe8,
++ 0x28, 0x28, 0xc8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x29, 0x21, 0x2f, 0x21,
++ 0x21, 0x22, 0x24, 0x28, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x98, 0x78, 0x08, 0xe8, 0x08,
++ 0xe8, 0x28, 0x28, 0xc8, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x3f, 0x22, 0x27, 0x26, 0x2b,
++ 0x32, 0x23, 0x22, 0x22, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xe8, 0x28, 0xe8,
++ 0x28, 0xe8, 0x28, 0x68, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x2f, 0x21, 0x2f, 0x22, 0x3f,
++ 0x27, 0x24, 0x27, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xe8, 0x08, 0xc8, 0x48, 0xf8,
++ 0xc8, 0x48, 0xc8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x27, 0x21, 0x2f, 0x24, 0x22,
++ 0x2f, 0x21, 0x27, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xc8, 0x08, 0xe8, 0x48, 0x88,
++ 0xe8, 0x08, 0xc8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x37, 0x22, 0x3f, 0x24, 0x2f,
++ 0x34, 0x25, 0x24, 0x23, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xd8, 0x88, 0xf8, 0x48, 0xe8,
++ 0x58, 0x88, 0x28, 0xe8, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x3f, 0x20, 0x2e, 0x2a,
++ 0x2e, 0x23, 0x3c, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0xc8, 0xa8, 0xf8, 0x88, 0xa8, 0xa8,
++ 0x58, 0x78, 0xb8, 0x18, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x27, 0x22, 0x2f, 0x27, 0x27,
++ 0x27, 0x24, 0x2f, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xc8, 0x48, 0xe8, 0xc8, 0xc8,
++ 0xe8, 0x48, 0xe8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x27, 0x24, 0x2f, 0x28, 0x2f, 0x2f,
++ 0x28, 0x2f, 0x26, 0x38, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0xc8, 0x48, 0xe8, 0x28, 0xe8, 0xe8,
++ 0x28, 0xe8, 0x68, 0x18, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x2f, 0x27, 0x25, 0x27, 0x25,
++ 0x27, 0x2f, 0x20, 0x2f, 0x22, 0x3f, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xe8, 0xc8, 0x48, 0xc8, 0x48,
++ 0xe8, 0xe8, 0x48, 0xe8, 0x48, 0xf8, 0x00, 0x00,
++ 0x00, 0x3f, 0x27, 0x24, 0x27, 0x21, 0x3f, 0x2f,
++ 0x2b, 0x2a, 0x2b, 0x2f, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0xc8, 0x48, 0xc8, 0x08, 0xf8, 0xe8,
++ 0xa8, 0xa8, 0xa8, 0xe8, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x09, 0x15, 0x25, 0x7f, 0x00,
++ 0x1f, 0x17, 0x14, 0x17, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x20, 0x50, 0x90, 0xfc, 0x00,
++ 0xf0, 0xd0, 0x50, 0xd0, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x2f, 0x2a, 0x2f, 0x3f, 0x27, 0x24,
++ 0x27, 0x3e, 0x27, 0x2c, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0xc8, 0x48,
++ 0xd8, 0xa8, 0x48, 0x38, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x10, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10,
++ 0x14, 0x19, 0x61, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0xa0,
++ 0xa0, 0x20, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x13, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10,
++ 0x14, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x60, 0x50, 0x48,
++ 0x48, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x12, 0x7e, 0x12, 0x12, 0x12,
++ 0x16, 0x1a, 0x62, 0x03, 0x02, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x11, 0x7e, 0x12, 0x14, 0x10,
++ 0x14, 0x18, 0x61, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x44, 0x48, 0x50, 0xc0,
++ 0xa0, 0xa0, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x10, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x11,
++ 0x15, 0x1a, 0x62, 0x04, 0x08, 0x00, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x12, 0x7e, 0x12, 0x12, 0x12,
++ 0x16, 0x1a, 0x62, 0x02, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x78, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x13, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x11,
++ 0x16, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x40, 0x60, 0xd0, 0x48,
++ 0x44, 0x44, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x17, 0x7d, 0x11, 0x11, 0x11,
++ 0x15, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x05, 0x3d, 0x05, 0x0d,
++ 0x35, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0x48, 0x50, 0x60, 0x48,
++ 0x38, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x08, 0x0b, 0x18, 0x28, 0x49, 0x09,
++ 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x50, 0x48, 0x5c, 0xe0, 0x20, 0x10, 0x14, 0x0c,
++ 0x04, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x12, 0x7e, 0x12, 0x13, 0x13,
++ 0x16, 0x1a, 0x64, 0x04, 0x09, 0x16, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x50, 0x40, 0xf8, 0x08,
++ 0x90, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x11, 0x7d, 0x13, 0x15, 0x11,
++ 0x15, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0x10, 0xfc, 0x10, 0x90, 0x50,
++ 0x50, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x13, 0x7e, 0x17, 0x12, 0x12,
++ 0x17, 0x1a, 0x62, 0x02, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0xc8, 0x48, 0x48,
++ 0xc8, 0x70, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x10, 0x7c, 0x11, 0x10, 0x10,
++ 0x14, 0x18, 0x61, 0x00, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x50, 0x90, 0xa0, 0x68,
++ 0x48, 0x90, 0x30, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x13,
++ 0x16, 0x1a, 0x62, 0x02, 0x03, 0x0c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf4,
++ 0x44, 0x48, 0x30, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x10, 0x11, 0x12, 0x7c, 0x10, 0x11, 0x13,
++ 0x15, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x80, 0xf8, 0x00, 0x00, 0x80, 0xfc, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x13, 0x10, 0x10, 0x7c, 0x13, 0x10, 0x10,
++ 0x17, 0x18, 0x60, 0x00, 0x07, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x50, 0x88, 0xfc, 0x44, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x10, 0x10, 0x13, 0x7c, 0x10, 0x10, 0x10,
++ 0x17, 0x18, 0x61, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x08, 0x88, 0x90, 0xfc, 0x90, 0x90, 0x90, 0x90,
++ 0xfc, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x10, 0x7c, 0x13, 0x10, 0x13,
++ 0x14, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x40, 0x40, 0xfc, 0x00, 0xfc,
++ 0x40, 0x70, 0x48, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x13, 0x7c, 0x10, 0x11, 0x12,
++ 0x10, 0x1f, 0x60, 0x00, 0x03, 0x0c, 0x00, 0x00,
++ 0x40, 0x50, 0x88, 0xfc, 0x84, 0x80, 0xf8, 0x40,
++ 0x40, 0xfc, 0xc0, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x10, 0x11, 0x16, 0x7f, 0x12, 0x12, 0x13,
++ 0x16, 0x1a, 0x63, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x10, 0x17, 0x10, 0x7f, 0x12, 0x12, 0x13,
++ 0x16, 0x1a, 0x63, 0x02, 0x02, 0x02, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x11, 0x7d, 0x12, 0x10, 0x10,
++ 0x17, 0x19, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x48, 0x44, 0x44, 0x10, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x11, 0x7c, 0x10, 0x13, 0x10,
++ 0x17, 0x19, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x20, 0x44, 0xa4, 0x18, 0x90, 0xe0, 0x90, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x1e, 0x10, 0x1e, 0x12, 0x02,
++ 0x7f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0x10, 0xf0, 0x90, 0x80,
++ 0xfc, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x11, 0x17, 0x11, 0x7c, 0x10, 0x10, 0x11,
++ 0x15, 0x1b, 0x65, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xa0, 0xa0, 0xa4, 0x28,
++ 0x30, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x10, 0x17, 0x11, 0x7d, 0x11, 0x12, 0x14,
++ 0x10, 0x1f, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x10, 0x98, 0x64, 0x44,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x12, 0x7e, 0x13, 0x12, 0x12,
++ 0x13, 0x1e, 0x64, 0x04, 0x08, 0x11, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xa8, 0xb8, 0xa8, 0xa8,
++ 0xb8, 0xa8, 0xa8, 0xc8, 0xc8, 0x98, 0x00, 0x00,
++ 0x00, 0x17, 0x10, 0x13, 0x7e, 0x12, 0x13, 0x12,
++ 0x14, 0x1b, 0x60, 0x00, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0x48,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x11, 0x11, 0x11, 0x7d, 0x11, 0x13, 0x12,
++ 0x16, 0x1a, 0x62, 0x02, 0x02, 0x02, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x70, 0x50, 0x50, 0xf8, 0x08,
++ 0xe8, 0xa8, 0xa8, 0xe8, 0x88, 0x18, 0x00, 0x00,
++ 0x01, 0x11, 0x13, 0x15, 0x7d, 0x11, 0x11, 0x11,
++ 0x17, 0x1a, 0x63, 0x05, 0x09, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0xfc, 0x00, 0xf8, 0x48, 0x48, 0xb0, 0x00, 0x00,
++ 0x08, 0x09, 0x11, 0x11, 0x30, 0x57, 0x10, 0x13,
++ 0x14, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x40, 0xfc, 0xe0, 0x58,
++ 0x44, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x12, 0x7e, 0x13, 0x12, 0x13,
++ 0x16, 0x1b, 0x62, 0x05, 0x05, 0x08, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0x10, 0xf0, 0x00, 0xf8,
++ 0x00, 0xfc, 0xa4, 0x54, 0x54, 0x18, 0x00, 0x00,
++ 0x08, 0x0c, 0x2a, 0x2a, 0x59, 0x14, 0x22, 0x3f,
++ 0x21, 0x5f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0x30, 0xa8, 0xa8, 0x60, 0x50, 0x88, 0xfc,
++ 0x08, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x09, 0x4a, 0x25, 0x21, 0x0f, 0x12, 0x23,
++ 0x21, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x68, 0xfc, 0x68, 0xfc,
++ 0x30, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x36, 0x22, 0x36, 0x22, 0x23, 0x3e, 0x2b,
++ 0x08, 0x3e, 0x08, 0x08, 0x0e, 0x73, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x94, 0x14, 0x0c, 0xf8,
++ 0x88, 0x90, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x10, 0x17, 0x15, 0x7d, 0x15, 0x17, 0x15,
++ 0x15, 0x1d, 0x67, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x10, 0x10,
++ 0xfc, 0x90, 0x50, 0x50, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x12, 0x7f, 0x10, 0x17, 0x10,
++ 0x14, 0x1c, 0x64, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xf8, 0x00, 0xfc, 0x40,
++ 0x40, 0x78, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x2a, 0x3e, 0x2a, 0x3e, 0x7f,
++ 0x0a, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0xfc, 0x90, 0x90, 0x90, 0x10,
++ 0x10, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x2a, 0x3e, 0x2b, 0x3e, 0x08, 0x3e,
++ 0x0c, 0x71, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x20, 0xfc, 0x28, 0x30, 0x20,
++ 0x60, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x2f, 0x29, 0x2f, 0x79, 0x2f, 0x28, 0x2b,
++ 0x2a, 0x3b, 0x6a, 0x0b, 0x0a, 0x08, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x78, 0x48, 0x78, 0x08, 0xe8,
++ 0x28, 0xe8, 0x28, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x17, 0x7c, 0x14, 0x17, 0x14,
++ 0x16, 0x1e, 0x6b, 0x08, 0x1f, 0x00, 0x00, 0x00,
++ 0x80, 0xf8, 0x80, 0xfc, 0xb8, 0xc8, 0x78, 0xa0,
++ 0xa8, 0xa8, 0xb8, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x11, 0x17, 0x10, 0x7f, 0x12, 0x13, 0x13,
++ 0x16, 0x1b, 0x60, 0x0f, 0x01, 0x00, 0x00, 0x00,
++ 0x60, 0x10, 0xfc, 0xa0, 0xf8, 0xb8, 0x38, 0xf8,
++ 0x08, 0xf8, 0x10, 0xfc, 0x10, 0xb0, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x12,
++ 0x17, 0x18, 0x6f, 0x00, 0x03, 0x0c, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0xe8, 0x58, 0xe8, 0xf8, 0xe8,
++ 0x58, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x17, 0x10, 0x13, 0x7e, 0x13, 0x10, 0x13,
++ 0x17, 0x18, 0x63, 0x0d, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf8, 0xa8, 0xf8, 0x40, 0x58,
++ 0x58, 0xc8, 0x28, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x10, 0x17, 0x11, 0x7d, 0x12, 0x17, 0x10,
++ 0x17, 0x1a, 0x62, 0x02, 0x03, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x50, 0xd8, 0x64, 0xfc, 0x00,
++ 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x17, 0x11, 0x10, 0x7d, 0x10, 0x17, 0x10,
++ 0x15, 0x1f, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0xfc, 0x50, 0x48, 0xf8, 0x50, 0xfc, 0x50,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x29, 0x3a, 0x25, 0x25, 0x39,
++ 0x21, 0x21, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x80, 0xfc, 0xf8, 0x20, 0xf8, 0xf8, 0x08, 0xf8,
++ 0xf8, 0x18, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x10, 0x14, 0x65, 0x1a, 0x14, 0x7c,
++ 0x09, 0x11, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x90, 0xfc, 0x90, 0xf8, 0xf8, 0x90,
++ 0xfc, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x2f, 0x2e, 0x2f, 0x2f, 0x28, 0x2f,
++ 0x2f, 0x49, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x98, 0x94, 0xfc, 0x90, 0xb0, 0xa8,
++ 0xc8, 0x84, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0e, 0x3f, 0x2d, 0x52, 0x2c, 0x1e, 0x73,
++ 0x1e, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x50, 0x20, 0x50, 0x88,
++ 0x04, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x13, 0x10, 0x17, 0x7c, 0x13, 0x10, 0x17,
++ 0x16, 0x1a, 0x67, 0x02, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0x40, 0xfc,
++ 0xa8, 0x94, 0xf8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x13, 0x7e, 0x12, 0x13, 0x12,
++ 0x16, 0x1a, 0x62, 0x04, 0x04, 0x0b, 0x00, 0x00,
++ 0x40, 0xfc, 0x90, 0xfc, 0x90, 0xf0, 0xfc, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x3e, 0x2a,
++ 0x3e, 0x2b, 0x3f, 0x1f, 0x01, 0x7f, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xf8, 0xa8,
++ 0xf8, 0xa8, 0xf8, 0xf0, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x12, 0x7e, 0x12, 0x12, 0x12,
++ 0x17, 0x1a, 0x65, 0x05, 0x08, 0x13, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0xa8, 0xf8, 0xf8, 0x20, 0xf8,
++ 0xfc, 0xe8, 0x74, 0xf8, 0x20, 0xfc, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x11, 0x7f, 0x10, 0x17, 0x14,
++ 0x17, 0x1b, 0x61, 0x07, 0x00, 0x03, 0x00, 0x00,
++ 0xf0, 0x10, 0xf0, 0xf0, 0xf8, 0x40, 0xfc, 0x48,
++ 0x58, 0x58, 0xf0, 0xfc, 0x90, 0xf8, 0x00, 0x00,
++ 0x00, 0x17, 0x13, 0x12, 0x7f, 0x10, 0x17, 0x13,
++ 0x10, 0x1f, 0x61, 0x0f, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0xfc, 0xb8, 0xa8, 0xb8, 0xa0, 0xfc, 0xf8,
++ 0xa0, 0xfc, 0x48, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x08, 0x3e, 0x14, 0x7f, 0x3e, 0x22, 0x3e, 0x3e,
++ 0x26, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x80, 0xf8, 0xf8, 0x08, 0xf8, 0xf0, 0xb8, 0x9c,
++ 0x7c, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x24, 0x24, 0x24, 0x3c, 0x27, 0x04, 0x04,
++ 0x7c, 0x24, 0x24, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x00, 0x3f, 0x22, 0x5e,
++ 0x10, 0x1e, 0x12, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xfc, 0x88, 0xf0,
++ 0x10, 0xf0, 0x90, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x00, 0x3f, 0x20, 0x5f,
++ 0x0f, 0x08, 0x0f, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x08, 0xf0,
++ 0xe0, 0x20, 0xe0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x17, 0x10, 0x11, 0x7d, 0x12, 0x14, 0x13,
++ 0x16, 0x1b, 0x62, 0x03, 0x02, 0x02, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x50, 0x70, 0xc0, 0x3c, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x3f, 0x20, 0x5f, 0x02,
++ 0x1e, 0x10, 0x1e, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0xfc, 0x08, 0xf0, 0x80,
++ 0xf0, 0x10, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x00, 0x7f, 0x0f, 0x01,
++ 0x0f, 0x7f, 0x1e, 0x13, 0x1e, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0xe8, 0x00,
++ 0xe0, 0xfc, 0x10, 0xfc, 0x90, 0x30, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x07, 0x04, 0x0c, 0x14, 0x22,
++ 0x02, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x02, 0x22, 0x22, 0x17, 0x14, 0x08, 0x18, 0x24,
++ 0x02, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x03, 0x0c, 0x7f, 0x12, 0x14, 0x0f, 0x08, 0x0f,
++ 0x0f, 0x08, 0x0f, 0x3c, 0x03, 0x7c, 0x00, 0x00,
++ 0xc0, 0x80, 0xf0, 0x90, 0x50, 0xe0, 0x20, 0xe0,
++ 0xe0, 0x20, 0xe0, 0x40, 0x80, 0x78, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x7f, 0x01, 0x03,
++ 0x0c, 0x32, 0x01, 0x01, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xfc, 0x00, 0xf0,
++ 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x1c, 0x1a, 0x2a, 0x49, 0x01,
++ 0x06, 0x1a, 0x01, 0x01, 0x06, 0x38, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x70, 0x70, 0xa8, 0x24, 0xf0,
++ 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x2a, 0x3e, 0x2b, 0x3e, 0x08, 0x7e,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x50, 0x20, 0x50, 0x9c,
++ 0x24, 0x68, 0x98, 0x10, 0x20, 0xc0, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x01, 0x01, 0x01, 0x7f,
++ 0x01, 0x03, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0xfc,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x01, 0x1f, 0x01, 0x01, 0x01, 0x7f, 0x03,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
++ 0x80, 0x80, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x02, 0x04, 0x19, 0x61,
++ 0x01, 0x1f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c,
++ 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x04, 0x1f, 0x60, 0x1f,
++ 0x02, 0x03, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x40, 0xf0, 0x0c, 0xf0,
++ 0x00, 0xe0, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x09, 0x09, 0x09, 0x15, 0x15,
++ 0x23, 0x02, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0x20, 0x20, 0x50, 0x48,
++ 0x88, 0x80, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x08, 0x04, 0x04, 0x7f, 0x00,
++ 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x20, 0x20, 0x40, 0xfc, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x12, 0x12, 0x24, 0x09,
++ 0x01, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x50, 0x48, 0x48, 0xc0,
++ 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x03, 0x0c, 0x70, 0x1f, 0x12, 0x12, 0x14,
++ 0x11, 0x01, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x80, 0xf0, 0x90, 0xb0, 0x70,
++ 0x10, 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x05, 0x19, 0x6f, 0x01,
++ 0x1f, 0x01, 0x0f, 0x01, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30, 0xec, 0x00,
++ 0xf0, 0x00, 0xe0, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x22, 0x0e, 0x01, 0x03,
++ 0x1f, 0x01, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x30, 0xe0, 0x10, 0x08, 0x48, 0x40, 0xa0, 0x10,
++ 0xf0, 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x24, 0x24, 0x3c, 0x05, 0x7c, 0x24, 0x24, 0x45,
++ 0x01, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x00,
++ 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x02, 0x02, 0x7f, 0x09, 0x1f, 0x61, 0x1f, 0x02,
++ 0x0f, 0x74, 0x07, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0xf0, 0x4c, 0xf8, 0x40,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x07, 0x10, 0x2f, 0x42, 0x1f, 0x12, 0x14, 0x1f,
++ 0x10, 0x1f, 0x01, 0x7f, 0x0c, 0x70, 0x00, 0x00,
++ 0xe0, 0x20, 0xf0, 0x8c, 0xf0, 0xb0, 0x70, 0xf0,
++ 0x10, 0xf0, 0x00, 0xfc, 0x60, 0x1c, 0x00, 0x00,
++ 0x02, 0x04, 0x1f, 0x13, 0x15, 0x13, 0x1f, 0x13,
++ 0x15, 0x01, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x90, 0x50, 0x90, 0xf0, 0x90,
++ 0x50, 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x24, 0x24, 0x3f, 0x25, 0x04, 0x7f, 0x25, 0x24,
++ 0x44, 0x01, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0xf8, 0x50, 0x20, 0xd0, 0xfc, 0x10, 0x90,
++ 0x30, 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x0c, 0x7f, 0x13, 0x12,
++ 0x13, 0x17, 0x15, 0x17, 0x10, 0x0f, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x30, 0xfc, 0xe0, 0x20,
++ 0xe0, 0x70, 0x50, 0x70, 0x00, 0xf8, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x13, 0x12,
++ 0x3e, 0x24, 0x06, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x13, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x88, 0x08, 0x88, 0x48,
++ 0x48, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x24, 0x24, 0x24, 0x3f, 0x24, 0x04, 0x7c,
++ 0x15, 0x15, 0x14, 0x24, 0x25, 0x46, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x90, 0x90, 0x90,
++ 0x10, 0xa0, 0x60, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x10, 0x17, 0x30, 0x50, 0x17,
++ 0x11, 0x11, 0x13, 0x10, 0x10, 0x17, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x80, 0x80, 0xfc,
++ 0x10, 0x10, 0xe0, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x12, 0x12, 0x31, 0x50, 0x17,
++ 0x11, 0x11, 0x13, 0x10, 0x10, 0x17, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0x00, 0xf8, 0x80, 0xfc,
++ 0x10, 0x10, 0xe0, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x25,
++ 0x79, 0x49, 0x0d, 0x15, 0x21, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x24, 0x24, 0xe8, 0x30, 0x20,
++ 0x20, 0x20, 0x20, 0x64, 0xa4, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x13, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0x88, 0xf8, 0x88, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x13, 0x12,
++ 0x3e, 0x24, 0x06, 0x0b, 0x11, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xc8, 0xa8, 0xa8, 0xfc, 0x88,
++ 0xc8, 0xa8, 0xa8, 0xfc, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3d, 0x24, 0x06, 0x08, 0x11, 0x26, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x28, 0xf8, 0xa0,
++ 0xfc, 0x24, 0x78, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x02,
++ 0x7f, 0x04, 0x0f, 0x11, 0x06, 0x38, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00,
++ 0xfc, 0x40, 0x40, 0xc0, 0x20, 0x10, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x08, 0x7e, 0x12, 0x13, 0x12,
++ 0x3c, 0x24, 0x06, 0x0b, 0x11, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x90, 0x90, 0x90, 0xfc, 0x90,
++ 0x90, 0x90, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x11, 0x7d, 0x27, 0x25, 0x25,
++ 0x79, 0x49, 0x0d, 0x15, 0x21, 0x41, 0x00, 0x00,
++ 0x80, 0x8c, 0xf0, 0x10, 0x10, 0x10, 0x10, 0xfc,
++ 0x10, 0x10, 0x10, 0x10, 0x7c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x12, 0x11, 0x7d, 0x24, 0x24, 0x25,
++ 0x7a, 0x48, 0x0d, 0x15, 0x22, 0x44, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa8, 0xa8, 0xb0, 0xa0, 0xb0, 0xa8,
++ 0xa8, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x10, 0x7c, 0x27, 0x24, 0x24,
++ 0x78, 0x4b, 0x0c, 0x14, 0x20, 0x41, 0x00, 0x00,
++ 0x60, 0xa8, 0xa4, 0xa4, 0xa0, 0xfc, 0xa8, 0xa8,
++ 0xd8, 0x90, 0x94, 0xac, 0xcc, 0x84, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x24, 0x25, 0x25,
++ 0x75, 0x49, 0x0d, 0x15, 0x25, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x00, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x49, 0x29, 0x22, 0x0c, 0x10, 0x20, 0x27,
++ 0x02, 0x7f, 0x04, 0x0f, 0x03, 0x3c, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x54, 0xd4, 0x60, 0xc0, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0x60, 0x10, 0x00, 0x00,
++ 0x10, 0x17, 0x12, 0x12, 0x7f, 0x2a, 0x2a, 0x2f,
++ 0x2a, 0x72, 0x12, 0x1c, 0x27, 0x48, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xb0, 0xb0, 0xa8, 0xa8,
++ 0xa4, 0xa4, 0xa4, 0xb8, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x13,
++ 0x3c, 0x04, 0x06, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x20, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x00, 0xfc,
++ 0x40, 0x78, 0x88, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x05, 0x06, 0x0a, 0x10, 0x23, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0x20, 0xfc, 0x24, 0x44, 0x84, 0x18, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x15, 0x7e, 0x2e, 0x2d, 0x2d,
++ 0x75, 0x55, 0x1f, 0x2c, 0x24, 0x44, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xe8, 0xa8, 0xa8, 0xa8,
++ 0xe8, 0xa8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x11, 0x7e, 0x24, 0x25, 0x24,
++ 0x78, 0x08, 0x0c, 0x10, 0x27, 0x40, 0x00, 0x00,
++ 0x08, 0x30, 0xc8, 0x24, 0x24, 0x18, 0xe0, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x11, 0x7e, 0x24, 0x24, 0x25,
++ 0x6b, 0x18, 0x0c, 0x14, 0x21, 0x42, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x04, 0x88, 0xb8, 0xe8, 0x68,
++ 0x68, 0xf0, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x17, 0x12, 0x12, 0x7b, 0x2a, 0x2a, 0x2b,
++ 0x6a, 0x12, 0x13, 0x1c, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0xc8, 0xc8, 0xa8,
++ 0xb0, 0x90, 0xb0, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x1e, 0x12, 0x1e, 0x12, 0x7f,
++ 0x02, 0x7f, 0x04, 0x0f, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c,
++ 0x00, 0xfc, 0x40, 0x80, 0x60, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3a, 0x24, 0x07, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0xa8, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0x50, 0x90, 0xfc, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x1c, 0x1a, 0x2a, 0x49, 0x08,
++ 0x02, 0x7f, 0x04, 0x0f, 0x03, 0x3c, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x70, 0x70, 0xa8, 0x24, 0x20,
++ 0x00, 0xfc, 0x40, 0x80, 0x60, 0x10, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x12, 0x7f, 0x2a, 0x2a, 0x2a,
++ 0x6a, 0x12, 0x1a, 0x14, 0x24, 0x48, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x00, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x24,
++ 0x6b, 0x1a, 0x0e, 0x12, 0x2f, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x68, 0x98, 0x08, 0xf8, 0x00,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x08, 0x7e, 0x13, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0b, 0x10, 0x20, 0x00, 0x00,
++ 0x50, 0xfc, 0x50, 0xf8, 0x50, 0xfc, 0x20, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xfc, 0x88, 0x98, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x10, 0x7f, 0x2a, 0x2a, 0x2b,
++ 0x29, 0x72, 0x11, 0x1a, 0x20, 0x43, 0x00, 0x00,
++ 0x00, 0xb8, 0x88, 0x88, 0xb8, 0x20, 0x20, 0xb8,
++ 0x98, 0xa8, 0x98, 0xa8, 0x88, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x12, 0x7b, 0x2a, 0x2a, 0x2b,
++ 0x28, 0x73, 0x11, 0x18, 0x20, 0x47, 0x00, 0x00,
++ 0xc0, 0x58, 0x48, 0x48, 0x58, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x10, 0xa0, 0xe0, 0x1c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x25,
++ 0x75, 0x08, 0x0d, 0x16, 0x22, 0x44, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0xf8, 0x20, 0xf8, 0x20,
++ 0xfc, 0x54, 0x2c, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x10, 0x7c, 0x27, 0x24, 0x24,
++ 0x78, 0x08, 0x0d, 0x16, 0x22, 0x44, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xb8, 0xa0, 0xfc, 0x80, 0xf8,
++ 0x80, 0xfc, 0x54, 0xac, 0xac, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x12, 0x7a, 0x2a, 0x2a, 0x2b,
++ 0x2b, 0x73, 0x13, 0x1a, 0x23, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x90, 0xf0, 0x00, 0xf8,
++ 0x68, 0x68, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x13, 0x7a, 0x2d, 0x29, 0x29,
++ 0x28, 0x73, 0x1a, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x40, 0x48, 0x50, 0xfc, 0x08, 0xf0, 0x10, 0xf0,
++ 0x40, 0xf8, 0x48, 0x48, 0x70, 0x40, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x17, 0x79, 0x2f, 0x2d, 0x2d,
++ 0x2f, 0x73, 0x13, 0x1d, 0x29, 0x41, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xd0, 0x3c, 0xe8, 0x68, 0x68,
++ 0xd8, 0x98, 0x50, 0x58, 0x28, 0x44, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x13, 0x7a, 0x2a, 0x2b, 0x28,
++ 0x29, 0x70, 0x17, 0x19, 0x22, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0x00,
++ 0xf0, 0x00, 0xfc, 0x50, 0x48, 0xc0, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x13, 0x7a, 0x2b, 0x2a, 0x2a,
++ 0x2a, 0x72, 0x12, 0x1a, 0x22, 0x43, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0x08, 0xe8,
++ 0xa8, 0xe8, 0xa8, 0xe8, 0xa8, 0x78, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x13, 0x7a, 0x2b, 0x2a, 0x2a,
++ 0x2b, 0x72, 0x12, 0x1b, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0x48, 0x48,
++ 0xf8, 0xe8, 0xd8, 0x58, 0x48, 0x58, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x13, 0x7c, 0x25, 0x26, 0x24,
++ 0x7b, 0x0a, 0x0e, 0x12, 0x22, 0x42, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xf8, 0xa0, 0xf0, 0xa8, 0xe4,
++ 0xf8, 0x08, 0xe8, 0xa8, 0xe8, 0x98, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x13, 0x7c, 0x2b, 0x2a, 0x2b,
++ 0x2a, 0x73, 0x18, 0x17, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0x00, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x21, 0x3e, 0x32, 0x5e,
++ 0x02, 0x7f, 0x04, 0x0f, 0x03, 0x3c, 0x00, 0x00,
++ 0x20, 0xf8, 0x50, 0x50, 0xfc, 0x20, 0xf8, 0x20,
++ 0x20, 0xfc, 0x40, 0x80, 0x60, 0x10, 0x00, 0x00,
++ 0x01, 0x7d, 0x55, 0x55, 0x7f, 0x56, 0x7e, 0x12,
++ 0x7f, 0x15, 0x15, 0x26, 0x26, 0x4c, 0x00, 0x00,
++ 0x00, 0x7c, 0x54, 0x54, 0xfc, 0xd4, 0xfc, 0x90,
++ 0xfc, 0x14, 0x94, 0xa4, 0x24, 0x4c, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x15, 0x7f, 0x2d, 0x2f, 0x29,
++ 0x2f, 0x71, 0x12, 0x1a, 0x24, 0x48, 0x00, 0x00,
++ 0x08, 0xc8, 0x48, 0x48, 0xfc, 0x54, 0xd4, 0x14,
++ 0xd4, 0x78, 0x48, 0x48, 0x54, 0xe4, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x13, 0x7d, 0x26, 0x24, 0x27,
++ 0x24, 0x78, 0x08, 0x14, 0x20, 0x43, 0x00, 0x00,
++ 0x40, 0xfc, 0x08, 0xf8, 0x50, 0x60, 0xf8, 0x88,
++ 0xf8, 0xf8, 0x88, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x27,
++ 0x7a, 0x0b, 0x0f, 0x17, 0x21, 0x46, 0x00, 0x00,
++ 0x40, 0xf0, 0x10, 0xf0, 0xf0, 0x10, 0xf0, 0xf8,
++ 0x48, 0xf8, 0xf8, 0xfc, 0x10, 0x10, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x11, 0x7f, 0x2d, 0x2d, 0x2f,
++ 0x2b, 0x73, 0x15, 0x19, 0x29, 0x41, 0x00, 0x00,
++ 0x00, 0x3c, 0xd4, 0x14, 0xec, 0x7c, 0x64, 0xfc,
++ 0x24, 0xbc, 0x64, 0x3c, 0x18, 0x64, 0x00, 0x00,
++ 0x10, 0x17, 0x13, 0x12, 0x7b, 0x28, 0x2b, 0x29,
++ 0x28, 0x77, 0x11, 0x1f, 0x29, 0x43, 0x00, 0x00,
++ 0x40, 0xfc, 0xb8, 0xa8, 0xb8, 0xa0, 0xf8, 0xf0,
++ 0xa0, 0xfc, 0xc8, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x12, 0x12, 0x13, 0x15, 0x78, 0x2f, 0x2a, 0x2e,
++ 0x2a, 0x76, 0x12, 0x1e, 0x23, 0x4e, 0x00, 0x00,
++ 0xa0, 0xb0, 0xe8, 0x68, 0x20, 0xfc, 0xa0, 0xe8,
++ 0xa8, 0xd0, 0xd4, 0xac, 0xcc, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x13, 0x7b, 0x2d, 0x29, 0x29,
++ 0x2f, 0x73, 0x13, 0x1d, 0x29, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x58, 0x50, 0x78, 0x48,
++ 0xf8, 0x48, 0xf8, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
++ 0x0f, 0x71, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x20, 0x40, 0x80, 0x00, 0x30, 0xc0,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x04, 0x08, 0x08, 0x1f, 0x20,
++ 0x40, 0x01, 0x7f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x78, 0x08, 0x08, 0xe8, 0x70,
++ 0x80, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x1e, 0x11, 0x11, 0x2f, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x30, 0xe0, 0x10, 0x08, 0x08, 0xe0, 0x40, 0x80,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x3f, 0x20, 0x4f, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x08, 0xe0, 0x40,
++ 0x80, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x7f, 0x12, 0x12, 0x3c, 0x06, 0x19, 0x6f,
++ 0x00, 0x01, 0x7f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x50, 0x20, 0xd0, 0x0c, 0xe0,
++ 0xc0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7c, 0x07, 0x08, 0x0a, 0x11, 0x10, 0x14,
++ 0x18, 0x70, 0x11, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x50, 0x90, 0xa0, 0x68,
++ 0x48, 0x90, 0x30, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x00, 0x3f, 0x22, 0x3f, 0x00,
++ 0x3e, 0x04, 0x0e, 0x78, 0x09, 0x1a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf0, 0x50, 0x50, 0xd0,
++ 0x50, 0x70, 0xb4, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x08, 0x04, 0x7f, 0x0a, 0x34, 0x0a, 0x3f, 0x01,
++ 0x1f, 0x00, 0x01, 0x7f, 0x01, 0x03, 0x00, 0x00,
++ 0x20, 0x40, 0xfc, 0x28, 0xd0, 0x28, 0xfc, 0x04,
++ 0xf0, 0xc0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x37, 0x2d, 0x2d, 0x3f, 0x3f, 0x2d,
++ 0x2d, 0x2d, 0x7d, 0x16, 0x14, 0x24, 0x00, 0x00,
++ 0x04, 0x78, 0x58, 0x54, 0x94, 0x00, 0x7c, 0x08,
++ 0x10, 0xfc, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x1a, 0x11, 0x1e, 0x12, 0x1d, 0x12, 0x3f,
++ 0x20, 0x4f, 0x00, 0x3f, 0x01, 0x03, 0x00, 0x00,
++ 0x80, 0xf0, 0x10, 0xf0, 0x90, 0x70, 0x90, 0xfc,
++ 0x08, 0xe0, 0xc0, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x04, 0x02, 0x03, 0x0c, 0x77,
++ 0x00, 0x01, 0x7f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x80, 0x80, 0x60, 0xdc,
++ 0x80, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3d, 0x04, 0x0b, 0x0b, 0x15, 0x10, 0x1f,
++ 0x70, 0x13, 0x12, 0x12, 0x12, 0x32, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x58, 0x50, 0x40, 0xfc,
++ 0x80, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x01, 0x01, 0x3f, 0x20, 0x20,
++ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x04, 0x08,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x22, 0x42, 0x02, 0x02,
++ 0x03, 0x02, 0x02, 0x02, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x04, 0x08, 0x00, 0x10, 0x60,
++ 0x80, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x3f, 0x51, 0x1f, 0x10,
++ 0x10, 0x1f, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x04, 0xf8, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x5f, 0x10, 0x17, 0x10, 0x1f,
++ 0x12, 0x12, 0x12, 0x22, 0x23, 0x4c, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf8, 0x00, 0xf0, 0x00, 0xfc,
++ 0x80, 0x48, 0x50, 0x20, 0x90, 0x0c, 0x00, 0x00,
++ 0x01, 0x3f, 0x22, 0x47, 0x18, 0x7f, 0x11, 0x11,
++ 0x1f, 0x12, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xc0, 0x80, 0xf0, 0x10, 0x10,
++ 0xf0, 0x90, 0xa0, 0x94, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x3e, 0x40, 0x7f, 0x14,
++ 0x14, 0x14, 0x14, 0x25, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x44, 0x78, 0x40, 0xf8, 0x88,
++ 0x50, 0x30, 0x70, 0x88, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x44, 0x08, 0x0f, 0x18,
++ 0x2f, 0x48, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x40, 0x80, 0xf8, 0x80,
++ 0xf0, 0x80, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x00, 0x7f, 0x11, 0x19, 0x27, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x64, 0x25, 0x3c, 0x27,
++ 0x04, 0x7c, 0x15, 0x16, 0x24, 0x44, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0x40, 0xf8, 0x40, 0xfc,
++ 0xe0, 0xd0, 0x50, 0x48, 0x44, 0xc0, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x65, 0x24, 0x3d, 0x24,
++ 0x07, 0x7c, 0x15, 0x15, 0x25, 0x45, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xf8, 0x40, 0xf0, 0x90,
++ 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x3f, 0x27, 0x45, 0x7f, 0x09, 0x0f, 0x0f,
++ 0x08, 0x0f, 0x0f, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0xe8, 0x20, 0xfc, 0x40, 0xc0, 0xe0,
++ 0x20, 0xe0, 0xe0, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x3f, 0x25, 0x64, 0x27, 0x3c, 0x25, 0x07,
++ 0x7e, 0x15, 0x14, 0x14, 0x24, 0x47, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x10, 0xfc, 0x10, 0xf0, 0xfc,
++ 0x08, 0xf0, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x5f, 0x04, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x01, 0x7f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf0, 0x40, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x00, 0xfc, 0xc0, 0x38, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x5e, 0x0a, 0x16, 0x0b, 0x12,
++ 0x0c, 0x77, 0x01, 0x06, 0x01, 0x0e, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x50, 0xb0, 0x50, 0x80,
++ 0xe0, 0x5c, 0xa0, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x22, 0x5c, 0x10, 0x1e, 0x10, 0x1f,
++ 0x08, 0x1f, 0x65, 0x12, 0x12, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x00, 0xf8, 0x48, 0xa8, 0xa8, 0x30, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x5f, 0x12, 0x1f, 0x7f, 0x0f,
++ 0x08, 0x0f, 0x0c, 0x74, 0x07, 0x18, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x90, 0xf0, 0xfc, 0xe0,
++ 0x20, 0xe0, 0x88, 0x50, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x3f, 0x3e, 0x49, 0x3f, 0x0e, 0x38, 0x0f,
++ 0x08, 0x0f, 0x0f, 0x08, 0x0f, 0x3c, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x20, 0xfc, 0xa8, 0xf8, 0xe0,
++ 0x20, 0xe0, 0xe0, 0x20, 0xe0, 0x38, 0x00, 0x00,
++ 0x01, 0x3f, 0x3e, 0x48, 0x3f, 0x0e, 0x39, 0x0f,
++ 0x08, 0x0f, 0x0f, 0x08, 0x0f, 0x3c, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0xf8, 0xb0, 0xa8, 0x68, 0xe0,
++ 0x20, 0xe0, 0xe0, 0x20, 0xe0, 0x38, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x22, 0x22, 0x3e,
++ 0x14, 0x14, 0x14, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10, 0x90, 0x50,
++ 0x50, 0x10, 0x10, 0x34, 0x04, 0xfc, 0x00, 0x00,
++ 0x04, 0x24, 0x24, 0x24, 0x3d, 0x26, 0x04, 0x7c,
++ 0x17, 0x15, 0x14, 0x24, 0x44, 0x04, 0x00, 0x00,
++ 0x40, 0x78, 0x88, 0xd0, 0x30, 0xa0, 0xd0, 0x90,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x01, 0x3f, 0x00, 0x7f, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf8, 0x48, 0xfc, 0x40, 0xc0, 0x00, 0x00,
++ 0x0a, 0x4a, 0x2a, 0x2b, 0x7f, 0x11, 0x0a, 0x3f,
++ 0x04, 0x3f, 0x04, 0x04, 0x07, 0x78, 0x00, 0x00,
++ 0x08, 0x88, 0x88, 0x08, 0xfc, 0x08, 0x48, 0x28,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x1f, 0x11, 0x21, 0x49, 0x09,
++ 0x11, 0x11, 0x21, 0x41, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x20, 0x10,
++ 0x10, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x12, 0x12, 0x3f, 0x12, 0x1e, 0x12, 0x1e, 0x13,
++ 0x7f, 0x2c, 0x2d, 0x33, 0x20, 0x1f, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xb0, 0xa8, 0xa8, 0xa4, 0x2c,
++ 0x68, 0x30, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x01, 0x02, 0x02,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x80, 0x80, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x14, 0x12, 0x12, 0x7e, 0x15, 0x14, 0x14,
++ 0x14, 0x14, 0x14, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0x50, 0x90, 0x20, 0x28, 0x48,
++ 0x90, 0x10, 0x20, 0x44, 0x84, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x20, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x1f,
++ 0x01, 0x01, 0x02, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xfc, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x14, 0x14, 0x14,
++ 0x17, 0x14, 0x14, 0x24, 0x27, 0x5c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x48, 0x40, 0x44,
++ 0xc8, 0x70, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x14, 0x17,
++ 0x14, 0x14, 0x15, 0x24, 0x27, 0x44, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x88, 0x80, 0x88, 0xf8,
++ 0x88, 0x88, 0xe8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x14, 0x12, 0x12,
++ 0x1f, 0x11, 0x12, 0x24, 0x28, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x88, 0x90, 0x90, 0xa0,
++ 0xfc, 0xc0, 0xa0, 0x90, 0x8c, 0x80, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x17, 0x14, 0x17,
++ 0x14, 0x17, 0x14, 0x27, 0x23, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x12, 0x12, 0x15, 0x1a,
++ 0x13, 0x14, 0x1c, 0x24, 0x24, 0x47, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x12, 0x11, 0x17, 0x11,
++ 0x11, 0x1f, 0x11, 0x22, 0x24, 0x48, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x10, 0x20, 0xf8, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x13, 0x10, 0x1f, 0x10,
++ 0x17, 0x11, 0x13, 0x3e, 0x22, 0x46, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0xe0, 0x40, 0xf8, 0x80,
++ 0xfc, 0x08, 0x10, 0xfc, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x16, 0x16, 0x17, 0x15,
++ 0x17, 0x17, 0x1d, 0x27, 0x21, 0x4f, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0xb0, 0xb0, 0xf0, 0x50,
++ 0xf0, 0xf8, 0x48, 0xc8, 0x68, 0xf0, 0x00, 0x00,
++ 0x01, 0x01, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3f,
++ 0x21, 0x22, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x54, 0x54, 0x54, 0x54, 0x54,
++ 0x54, 0x54, 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
++ 0x80, 0x80, 0x84, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x21, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x7f,
++ 0x02, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x55, 0x55, 0x56, 0x55, 0x54,
++ 0x54, 0x54, 0x7c, 0x45, 0x41, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x00, 0x00, 0xf0, 0x20,
++ 0x40, 0x80, 0x80, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x00, 0x3f, 0x04, 0x04, 0x07,
++ 0x04, 0x0a, 0x09, 0x10, 0x23, 0x4c, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x00, 0xc0, 0x40, 0x40, 0xf0,
++ 0x10, 0x20, 0x40, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x21, 0x21, 0x3f, 0x21, 0x02, 0x04, 0x18,
++ 0x67, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0xf8, 0x08, 0x80, 0x40, 0x30,
++ 0xcc, 0x00, 0xc0, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x07, 0x04, 0x18, 0x6f, 0x02, 0x02, 0x0c, 0x30,
++ 0x01, 0x21, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0xc0, 0x40, 0x30, 0xec, 0x20, 0x20, 0x20, 0xc0,
++ 0x00, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x1f, 0x00, 0x7f, 0x02, 0x3f,
++ 0x04, 0x04, 0x0f, 0x08, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0xf8,
++ 0x40, 0x40, 0x80, 0xe0, 0x10, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x54, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x7d, 0x45, 0x41, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x7d, 0x46, 0x43, 0x00, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x10, 0x50, 0x94, 0x0c, 0xec, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x7d, 0x45, 0x41, 0x01, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x55, 0x55, 0x56, 0x54, 0x57,
++ 0x54, 0x54, 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x50, 0x48, 0x48, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x7d, 0x45, 0x41, 0x06, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x28, 0x20, 0xfc,
++ 0x20, 0x20, 0x10, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x54, 0x57, 0x54, 0x54, 0x54,
++ 0x57, 0x7c, 0x45, 0x41, 0x02, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0x90, 0x98, 0xe4, 0x90, 0x90, 0x90,
++ 0xfc, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x54, 0x54, 0x54, 0x54, 0x55,
++ 0x55, 0x55, 0x7d, 0x45, 0x41, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x40, 0x40, 0x40, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x21, 0x21, 0x3f, 0x21, 0x02, 0x04, 0x1f,
++ 0x60, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0xf8, 0x08, 0x80, 0x40, 0xf0,
++ 0x0c, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x54, 0x54, 0x57, 0x54, 0x54,
++ 0x57, 0x55, 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x20, 0x06, 0x38, 0x08, 0x7f,
++ 0x08, 0x0e, 0x78, 0x08, 0x09, 0x18, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x08, 0x50, 0x48, 0x40, 0xfc,
++ 0x48, 0x48, 0x30, 0x74, 0x8c, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x55, 0x55, 0x55, 0x56, 0x56,
++ 0x54, 0x54, 0x7c, 0x45, 0x42, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x50, 0x50, 0x50, 0xe8, 0x44,
++ 0x44, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x57, 0x55, 0x7c, 0x44, 0x43, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x40, 0x80, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x56, 0x54, 0x55, 0x55, 0x55,
++ 0x55, 0x7d, 0x45, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x01, 0x0f, 0x08, 0x0f, 0x0f,
++ 0x08, 0x0f, 0x0f, 0x2a, 0x25, 0x40, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x00, 0xe0, 0x20, 0xe0, 0xe0,
++ 0x00, 0xfc, 0xf8, 0x88, 0x48, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x56, 0x54, 0x54, 0x54, 0x55,
++ 0x57, 0x55, 0x7d, 0x45, 0x41, 0x01, 0x00, 0x00,
++ 0xa0, 0x90, 0x08, 0x48, 0x40, 0xa0, 0xa0, 0x10,
++ 0xf8, 0x14, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x00, 0x3f, 0x09, 0x7f, 0x09,
++ 0x09, 0x3f, 0x01, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x00, 0xf8, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x7d, 0x46, 0x43, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x00, 0x3f, 0x24, 0x22, 0x3f,
++ 0x21, 0x29, 0x29, 0x2f, 0x28, 0x20, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x00, 0xf8, 0x48, 0x88, 0xf8,
++ 0x08, 0x28, 0x28, 0xe8, 0x28, 0x18, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x01, 0x3f, 0x08, 0x04, 0x7f,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x00, 0xf8, 0x20, 0x40, 0xfc,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x21, 0x21, 0x3f, 0x22, 0x04, 0x1f, 0x61,
++ 0x1f, 0x09, 0x05, 0x05, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0xf8, 0x88, 0x40, 0xf0, 0x0c,
++ 0xf0, 0x20, 0x20, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x7e, 0x47, 0x45, 0x09, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x04, 0x04, 0xfc, 0x20, 0xa8, 0xa8,
++ 0xf8, 0x20, 0x24, 0x24, 0xfc, 0x04, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x20, 0x1f, 0x10, 0x1f, 0x10,
++ 0x1f, 0x10, 0x1e, 0x10, 0x1c, 0x70, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x08, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x98, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x21, 0x21, 0x3f, 0x24, 0x04, 0x0f, 0x08,
++ 0x1f, 0x28, 0x4f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0xf8, 0x48, 0x80, 0xf8, 0x80,
++ 0xf0, 0x80, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x55, 0x56, 0x55, 0x54, 0x57,
++ 0x54, 0x55, 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x24, 0x04, 0xf8, 0x48, 0xfc,
++ 0x48, 0xf8, 0x48, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x57, 0x54, 0x54, 0x55, 0x56,
++ 0x54, 0x55, 0x7e, 0x44, 0x41, 0x0e, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0xa0, 0xa4, 0x5c, 0x40,
++ 0xf0, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x01, 0x21, 0x21, 0x3f, 0x22, 0x04, 0x1f, 0x60,
++ 0x1f, 0x12, 0x1f, 0x12, 0x12, 0x10, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0xf8, 0x88, 0x40, 0xf0, 0x0c,
++ 0xf0, 0x90, 0xf0, 0x90, 0x90, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x55, 0x57, 0x54, 0x57, 0x56,
++ 0x56, 0x57, 0x7e, 0x46, 0x42, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xf8, 0xa8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x01, 0x21, 0x21, 0x3f, 0x24, 0x24, 0x7f, 0x24,
++ 0x25, 0x3c, 0x24, 0x24, 0x3d, 0x26, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0xf8, 0x48, 0x40, 0x7c, 0xa8,
++ 0x30, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x00, 0x3e, 0x22, 0x3e,
++ 0x22, 0x01, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xf8, 0x88, 0xf8,
++ 0x88, 0x00, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55, 0x54,
++ 0x57, 0x56, 0x7e, 0x47, 0x42, 0x02, 0x00, 0x00,
++ 0x00, 0xf0, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x40,
++ 0xf8, 0x68, 0x58, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x7d, 0x46, 0x42, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0x28, 0xf8, 0x00, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x02, 0x1f, 0x11, 0x1f, 0x11,
++ 0x1f, 0x12, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0xb0, 0xa8, 0xfc, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x04, 0x7f, 0x01, 0x1f, 0x01,
++ 0x7f, 0x08, 0x0f, 0x11, 0x3f, 0x40, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x40, 0xfc, 0x00, 0xf0, 0x00,
++ 0xfc, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x54, 0x57, 0x56, 0x56, 0x57,
++ 0x55, 0x56, 0x7d, 0x46, 0x40, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x40, 0x40, 0xf8,
++ 0x98, 0xe8, 0x98, 0xe8, 0x88, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x56, 0x56, 0x56, 0x56, 0x57,
++ 0x57, 0x57, 0x7f, 0x46, 0x43, 0x02, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x90, 0xf0, 0x00, 0xf8,
++ 0x68, 0x68, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x08, 0x7f, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x2a, 0x3e, 0x09, 0x7f, 0x0a, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x08, 0x30, 0xc0, 0x80, 0xfc,
++ 0x90, 0x90, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x57, 0x54, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x7c, 0x47, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0xf8, 0x20, 0xfc, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x57, 0x55, 0x57, 0x55, 0x55,
++ 0x56, 0x7f, 0x44, 0x40, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xb8, 0x10, 0xfc,
++ 0x00, 0xfc, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x54, 0x55, 0x56, 0x55, 0x55,
++ 0x55, 0x7d, 0x45, 0x40, 0x03, 0x00, 0x00, 0x00,
++ 0xe0, 0x68, 0x50, 0x94, 0xf8, 0x08, 0xf4, 0x10,
++ 0x10, 0xf0, 0x10, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x10, 0x13, 0x54, 0x55, 0x54, 0x57, 0x54,
++ 0x57, 0x57, 0x7d, 0x47, 0x41, 0x03, 0x00, 0x00,
++ 0x08, 0x90, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0xa8,
++ 0x24, 0xfc, 0xa8, 0x14, 0x2c, 0xc4, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x54, 0x55, 0x57, 0x54, 0x57,
++ 0x56, 0x7f, 0x45, 0x41, 0x02, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0xb8,
++ 0xa8, 0xb8, 0x10, 0x90, 0xa8, 0x44, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x08, 0x2b, 0x17, 0x18, 0x2b,
++ 0x4b, 0x18, 0x2b, 0x4a, 0x0b, 0x32, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x18, 0x94, 0xd4, 0x7c, 0x90,
++ 0x90, 0x10, 0xb0, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x00, 0x3c, 0x27, 0x28, 0x33,
++ 0x29, 0x25, 0x25, 0x3b, 0x20, 0x27, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x40, 0xf8, 0x90, 0x60, 0x9c,
++ 0xf0, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x24, 0x38, 0x22, 0x1e, 0x21,
++ 0x3e, 0x48, 0x7e, 0x08, 0x15, 0x62, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x00, 0xf8, 0x50, 0x20, 0xfc,
++ 0x28, 0xa0, 0xb8, 0xa0, 0x60, 0x3c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x7f, 0x44, 0x41, 0x02, 0x00, 0x00,
++ 0x40, 0xd8, 0x68, 0x48, 0xf8, 0x28, 0x68, 0xf8,
++ 0x68, 0x68, 0xfc, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x54, 0x55, 0x55, 0x55, 0x57,
++ 0x54, 0x57, 0x7d, 0x45, 0x40, 0x03, 0x00, 0x00,
++ 0x70, 0xa0, 0xf8, 0x88, 0xf8, 0xb0, 0xe4, 0x5c,
++ 0xe0, 0xf0, 0x50, 0xf4, 0xac, 0x1c, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x0c, 0x39, 0x7f, 0x1d, 0x2b,
++ 0x49, 0x7e, 0x14, 0x3c, 0x0d, 0x32, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x40, 0xf0, 0x50, 0xf0, 0x50,
++ 0xf0, 0xd0, 0xe8, 0xfc, 0x44, 0x3c, 0x00, 0x00,
++ 0x21, 0x3f, 0x24, 0x3b, 0x1e, 0x5e, 0x52, 0x5e,
++ 0x5e, 0x52, 0x5e, 0x3e, 0x14, 0x63, 0x00, 0x00,
++ 0x08, 0xf8, 0x00, 0xfc, 0x20, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x48, 0x84, 0x00, 0x00,
++ 0x13, 0x1f, 0x68, 0x13, 0x2b, 0x7c, 0x3b, 0x56,
++ 0x13, 0x01, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x90, 0xd8, 0x68, 0x90, 0xa8, 0x7c, 0xb8, 0xd4,
++ 0x90, 0x00, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x21, 0x3f, 0x1e, 0x12, 0x1e, 0x3f, 0x2f, 0x24,
++ 0x3f, 0x29, 0x2f, 0x2f, 0x3f, 0x41, 0x00, 0x00,
++ 0x08, 0xf8, 0xf0, 0x90, 0xf0, 0xfc, 0x20, 0x20,
++ 0xfc, 0x48, 0xb0, 0x90, 0x68, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x11, 0x11, 0x22, 0x44,
++ 0x22, 0x11, 0x11, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x88, 0x88, 0x88, 0x88, 0x10, 0x10, 0x20, 0x40,
++ 0x20, 0x10, 0x10, 0x88, 0x88, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x09, 0x09, 0x09, 0x09, 0x0d,
++ 0x13, 0x13, 0x21, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x20, 0x20, 0x20, 0x20, 0x60,
++ 0x50, 0x88, 0x08, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x20, 0x20, 0x3f, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x1f, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10,
++ 0x00, 0x00, 0x04, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x17, 0x14, 0x14,
++ 0x17, 0x14, 0x14, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0x00, 0xf0, 0x90, 0x90,
++ 0xf0, 0x10, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x10, 0x1e, 0x71, 0x01,
++ 0x1f, 0x11, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0x80, 0x64, 0x1c, 0x04,
++ 0xf0, 0x10, 0x10, 0x10, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x00, 0x7f, 0x00, 0x0f, 0x00, 0x3f,
++ 0x21, 0x5f, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xfc, 0x20, 0xe0, 0x00, 0xfc,
++ 0x08, 0xf0, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x55, 0x56, 0x54, 0x57,
++ 0x54, 0x58, 0x50, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x12, 0x12, 0x3c, 0x06, 0x19,
++ 0x7f, 0x11, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c,
++ 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x01,
++ 0x3f, 0x21, 0x21, 0x21, 0x21, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00, 0x00,
++ 0x0a, 0x0a, 0x7f, 0x0a, 0x0b, 0x10, 0x3f, 0x21,
++ 0x5f, 0x11, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0xa0, 0xa0, 0xfc, 0xa0, 0xa8, 0x18, 0xfc, 0x08,
++ 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x55, 0x57, 0x55, 0x55,
++ 0x55, 0x55, 0x59, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x90, 0x90, 0xa0, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x59, 0x12, 0x13, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xfc, 0x50, 0x58,
++ 0xe8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x54, 0x55, 0x55, 0x55,
++ 0x54, 0x55, 0x59, 0x17, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0xf0, 0x90, 0xfc, 0x00, 0xf0, 0x10, 0xf0,
++ 0x20, 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x59, 0x10, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x40, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7d, 0x55, 0x55, 0x55, 0x55,
++ 0x54, 0x57, 0x58, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x40, 0xfc, 0x00, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x57, 0x56, 0x57, 0x57,
++ 0x57, 0x56, 0x5b, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x68, 0x58, 0xf8, 0x48, 0xd8, 0x58,
++ 0xe8, 0x78, 0xb8, 0x58, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x55, 0x55, 0x57, 0x56,
++ 0x57, 0x55, 0x58, 0x10, 0x10, 0x17, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xf8, 0xa8,
++ 0xf8, 0xf0, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7d, 0x55, 0x57, 0x54, 0x57,
++ 0x56, 0x57, 0x5a, 0x13, 0x12, 0x10, 0x00, 0x00,
++ 0xa0, 0xb0, 0xe8, 0x68, 0xa0, 0xfc, 0x20, 0xe8,
++ 0x68, 0xd8, 0x50, 0xd4, 0x2c, 0x44, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x54, 0x5b, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0xf8, 0xa0, 0xfc, 0xf0, 0x50, 0xf0, 0x50,
++ 0xf0, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x2a, 0x49, 0x7f, 0x5d, 0x55, 0x5d, 0x41,
++ 0x3f, 0x21, 0x21, 0x21, 0x21, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x88, 0x50, 0x30, 0xcc, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00, 0x00,
++ 0x08, 0x3e, 0x09, 0x7e, 0x08, 0x3e, 0x0f, 0x71,
++ 0x1f, 0x11, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x90, 0x50, 0x10, 0x30, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x08, 0x08, 0x08, 0x08, 0x7f, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x3f, 0x04, 0x04, 0x04, 0x7f,
++ 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x01, 0x1a, 0x06, 0x01, 0x00,
++ 0x00, 0x01, 0x02, 0x04, 0x3f, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0x00, 0x10, 0x10, 0x20, 0x20, 0xc0,
++ 0x80, 0x20, 0x10, 0x78, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x16, 0x16, 0x1a, 0x12,
++ 0x11, 0x17, 0x10, 0x21, 0x2f, 0x40, 0x00, 0x00,
++ 0x80, 0xfc, 0x20, 0xfc, 0x68, 0xec, 0xec, 0xa0,
++ 0x10, 0x20, 0xd0, 0x08, 0xfc, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x20, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x11, 0x1f, 0x10, 0x17,
++ 0x10, 0x10, 0x1f, 0x20, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0x40, 0xf8, 0x80, 0xf0,
++ 0x80, 0x80, 0xfc, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x14, 0x17, 0x14, 0x17,
++ 0x14, 0x17, 0x13, 0x22, 0x24, 0x48, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0x88, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0x28, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x12, 0x1f, 0x12, 0x13,
++ 0x16, 0x16, 0x1a, 0x32, 0x22, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x78, 0xc8, 0x48, 0x78,
++ 0xc8, 0xf8, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x13, 0x13, 0x13,
++ 0x12, 0x13, 0x11, 0x27, 0x20, 0x4f, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xfc, 0x80, 0xf0, 0xf0, 0xf0,
++ 0x10, 0xf0, 0xf0, 0x20, 0xe0, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x17, 0x15, 0x17, 0x15,
++ 0x17, 0x14, 0x15, 0x26, 0x24, 0x43, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x78, 0x50, 0x50, 0x7c,
++ 0x50, 0x10, 0x30, 0x34, 0xd4, 0x8c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x17, 0x15, 0x17, 0x15,
++ 0x17, 0x14, 0x15, 0x26, 0x24, 0x43, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x70, 0x50, 0x54, 0x8c,
++ 0xf8, 0x48, 0x50, 0x20, 0xd0, 0x8c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x11, 0x16, 0x11, 0x16,
++ 0x13, 0x1c, 0x13, 0x21, 0x20, 0x47, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf8, 0x98, 0xe8, 0x98, 0xe8,
++ 0x70, 0xdc, 0x60, 0x90, 0x60, 0x80, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x13, 0x1f, 0x10, 0x17,
++ 0x14, 0x17, 0x24, 0x27, 0x43, 0x0c, 0x00, 0x00,
++ 0x80, 0xfc, 0x20, 0xf8, 0xe0, 0xfc, 0x80, 0xf0,
++ 0x90, 0xf0, 0x90, 0xf0, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x15, 0x15, 0x1f, 0x15, 0x17, 0x15,
++ 0x17, 0x15, 0x3f, 0x25, 0x44, 0x08, 0x00, 0x00,
++ 0x80, 0xfc, 0x08, 0x70, 0xc0, 0x40, 0x7c, 0x50,
++ 0x50, 0x50, 0xd0, 0x50, 0x90, 0x90, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x17, 0x10, 0x17,
++ 0x14, 0x17, 0x14, 0x23, 0x23, 0x4c, 0x00, 0x00,
++ 0x80, 0xfc, 0x08, 0xc8, 0x08, 0xfc, 0x08, 0xc8,
++ 0xa8, 0xa8, 0x88, 0x08, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x17, 0x14, 0x17, 0x14, 0x17, 0x17,
++ 0x1f, 0x12, 0x14, 0x3b, 0x20, 0x5f, 0x00, 0x00,
++ 0x80, 0xfc, 0xf0, 0x90, 0xf0, 0x90, 0xf0, 0xf0,
++ 0xfc, 0x28, 0xb8, 0xe0, 0x80, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x19, 0x16, 0x17, 0x19,
++ 0x17, 0x14, 0x1f, 0x21, 0x21, 0x46, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xd4, 0x24, 0x18, 0x7c, 0x50,
++ 0x54, 0x8c, 0xf8, 0x50, 0x30, 0xcc, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x12, 0x13, 0x16, 0x1a, 0x1f,
++ 0x12, 0x12, 0x17, 0x25, 0x24, 0x48, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0x00, 0xfc, 0xa8, 0xa8, 0xfc,
++ 0xa8, 0xa8, 0xfc, 0x48, 0xa4, 0xa4, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x27, 0x29, 0x32, 0x2f, 0x2a,
++ 0x2f, 0x2a, 0x2f, 0x28, 0x28, 0x51, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0x78, 0x28, 0x28, 0xd8, 0xb0,
++ 0xb0, 0xfc, 0xd0, 0xfc, 0x90, 0x90, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x17, 0x15, 0x15, 0x15,
++ 0x17, 0x10, 0x13, 0x3f, 0x26, 0x58, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0xf8, 0xf0, 0xd0, 0x50, 0xd0,
++ 0xf0, 0xe0, 0x80, 0xfc, 0xb0, 0x8c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x14, 0x17, 0x15, 0x15,
++ 0x15, 0x15, 0x25, 0x2b, 0x4a, 0x17, 0x00, 0x00,
++ 0x80, 0xfc, 0xf0, 0xfc, 0xe8, 0x78, 0xf0, 0x50,
++ 0xf0, 0x50, 0xf0, 0xf8, 0xa8, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x2a, 0x35, 0x2a, 0x2f, 0x29, 0x2f,
++ 0x20, 0x2f, 0x2a, 0x2f, 0x28, 0x47, 0x00, 0x00,
++ 0x80, 0xfc, 0xa8, 0x28, 0xbc, 0x68, 0x68, 0xbc,
++ 0x28, 0xbc, 0xa8, 0xa8, 0x7c, 0xe0, 0x00, 0x00,
++ 0x00, 0x3f, 0x3f, 0x29, 0x2f, 0x29, 0x2f, 0x29,
++ 0x3f, 0x3f, 0x25, 0x2f, 0x25, 0x4f, 0x00, 0x00,
++ 0x80, 0xfc, 0x20, 0xfc, 0x20, 0xfc, 0xb4, 0xfc,
++ 0x00, 0xfc, 0x28, 0xd4, 0xcc, 0x38, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x3f, 0x2a, 0x2b, 0x2f, 0x2b,
++ 0x2e, 0x2a, 0x2f, 0x3a, 0x23, 0x42, 0x00, 0x00,
++ 0x80, 0xfc, 0x20, 0xfc, 0x20, 0xfc, 0x54, 0xfc,
++ 0x20, 0x58, 0xd4, 0xc4, 0x48, 0x38, 0x00, 0x00,
++ 0x00, 0x3c, 0x04, 0x08, 0x08, 0x10, 0x3c, 0x04,
++ 0x24, 0x28, 0x18, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x78, 0x08, 0x10, 0x13, 0x22, 0x7a, 0x0b,
++ 0x4a, 0x32, 0x13, 0x2a, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x04, 0x7f, 0x04, 0x04,
++ 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x02, 0x04, 0x3f, 0x04,
++ 0x04, 0x7f, 0x04, 0x08, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x20, 0x10, 0xf8, 0x48,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x24, 0x24, 0x3c, 0x07, 0x7c, 0x24, 0x25, 0x44,
++ 0x04, 0x7f, 0x04, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x00,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x03, 0x07, 0x7f, 0x2a, 0x1c, 0x7e, 0x1d,
++ 0x2a, 0x49, 0x04, 0x7f, 0x04, 0x18, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0xfc, 0x28, 0xd0, 0x28, 0xfc,
++ 0xa8, 0x24, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x03, 0x07, 0x7f, 0x2a, 0x1c, 0x7f, 0x1c,
++ 0x2a, 0x48, 0x04, 0x7f, 0x04, 0x18, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0xfc, 0x50, 0x88, 0xfc, 0x48,
++ 0x48, 0x98, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x00, 0x07, 0x78, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x20, 0x10, 0x10, 0x0c, 0xf0, 0x80, 0x80, 0x40,
++ 0x40, 0x20, 0x24, 0x14, 0x0c, 0x04, 0x00, 0x00,
++ 0x02, 0x02, 0x34, 0x0d, 0x1a, 0x6a, 0x09, 0x7e,
++ 0x18, 0x1c, 0x2a, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x18, 0x14, 0x14, 0xfc, 0x10, 0x10, 0xf0, 0x50,
++ 0x50, 0x54, 0x4c, 0x6c, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x1f,
++ 0x10, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0xf8,
++ 0x08, 0x08, 0x10, 0xe0, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x12, 0x3a, 0x06, 0x19, 0x6f,
++ 0x00, 0x0f, 0x08, 0x1f, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c, 0xe0,
++ 0x20, 0xe0, 0x00, 0xf0, 0x10, 0xe0, 0x00, 0x00,
++ 0x00, 0x7f, 0x09, 0x09, 0x79, 0x49, 0x41, 0x41,
++ 0x79, 0x49, 0x09, 0x0f, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x7b, 0x0a, 0x0a, 0x7a, 0x4b, 0x42, 0x7a,
++ 0x4a, 0x0b, 0x0a, 0x0c, 0x14, 0x69, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xa8, 0xb8, 0xa8, 0xa8,
++ 0xa8, 0xb8, 0xa8, 0xc8, 0xc8, 0x98, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x0b, 0x7a, 0x4b, 0x40, 0x7f,
++ 0x48, 0x0b, 0x0a, 0x0b, 0x0a, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xc8, 0x48, 0xc8, 0x18, 0xfc,
++ 0x08, 0xc8, 0x48, 0xc8, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x7b, 0x0a, 0x0b, 0x78, 0x4b, 0x42, 0x7b,
++ 0x4a, 0x0b, 0x08, 0x0f, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0x00, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x09, 0x0e, 0x7b, 0x4a, 0x43, 0x7a,
++ 0x4b, 0x0a, 0x0b, 0x0a, 0x0b, 0x32, 0x00, 0x00,
++ 0x00, 0xfc, 0x58, 0x44, 0xf8, 0xd8, 0xf8, 0xd8,
++ 0x68, 0xd8, 0xf8, 0xd8, 0x68, 0x58, 0x00, 0x00,
++ 0x13, 0x6f, 0x2b, 0x17, 0x7f, 0x3a, 0x57, 0x1f,
++ 0x00, 0x0f, 0x08, 0x1f, 0x10, 0x00, 0x00, 0x00,
++ 0x90, 0xe8, 0xa8, 0x94, 0xfc, 0xb8, 0xd4, 0xe0,
++ 0x20, 0xe0, 0x00, 0xf0, 0x10, 0xe0, 0x00, 0x00,
++ 0x01, 0x7f, 0x02, 0x12, 0x12, 0x24, 0x4f, 0x00,
++ 0x0f, 0x08, 0x1f, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x50, 0x48, 0xc4, 0xe4, 0x20,
++ 0xe0, 0x00, 0xf0, 0x10, 0x10, 0xe0, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x07, 0x04, 0x04, 0x04, 0x04,
++ 0x0f, 0x08, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x20, 0x20, 0x20, 0x20,
++ 0xe0, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x03, 0x04, 0x0f, 0x00, 0x7f, 0x01, 0x07,
++ 0x79, 0x06, 0x39, 0x06, 0x38, 0x03, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x80, 0x80, 0xfc, 0x00, 0x48,
++ 0xd0, 0xe0, 0xa0, 0x90, 0x8c, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x08, 0x3e, 0x08, 0x0e, 0x78,
++ 0x1f, 0x00, 0x7f, 0x00, 0x1f, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x20,
++ 0xf0, 0x10, 0xfc, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x02, 0x07, 0x0f, 0x7f, 0x00, 0x3f, 0x2f, 0x49,
++ 0x0f, 0x09, 0x0f, 0x7f, 0x0d, 0x31, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0xfc, 0x00, 0xfc, 0xe8, 0x20,
++ 0xe0, 0x20, 0xe0, 0xfc, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x02, 0x04, 0x08, 0x10, 0x01,
++ 0x02, 0x04, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x40, 0x40, 0x80, 0x90, 0x10,
++ 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x00, 0x3e, 0x22,
++ 0x3e, 0x22, 0x12, 0x14, 0x1e, 0x70, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x28, 0x48, 0x90, 0x14, 0x24,
++ 0x48, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x02, 0x04, 0x08, 0x00, 0x01,
++ 0x03, 0x05, 0x09, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x40, 0x40, 0x80, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x10, 0x17, 0x24, 0x08, 0x08, 0x18,
++ 0x28, 0x48, 0x08, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x78, 0x48,
++ 0x48, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x12, 0x22, 0x2a, 0x4b, 0x14, 0x14, 0x38,
++ 0x53, 0x10, 0x10, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x11, 0x15, 0x25, 0x49, 0x09, 0x19,
++ 0x29, 0x49, 0x09, 0x09, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x13, 0x14, 0x24, 0x4b, 0x0a, 0x1a,
++ 0x2b, 0x4a, 0x08, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8, 0xa0,
++ 0xfc, 0xa4, 0xa4, 0xb8, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x22, 0x4a, 0x0a, 0x12, 0x12, 0x32,
++ 0x52, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xe8, 0xa8, 0xa8, 0xa8,
++ 0xe8, 0xa8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x09, 0x11, 0x15, 0x25, 0x49, 0x09, 0x19,
++ 0x29, 0x49, 0x09, 0x09, 0x09, 0x0e, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf4,
++ 0x44, 0x48, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x17, 0x22, 0x4a, 0x0c, 0x12, 0x12, 0x30,
++ 0x53, 0x10, 0x10, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x48, 0x90, 0x48, 0x48, 0x00,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x09, 0x09, 0x11, 0x15, 0x26, 0x4b, 0x0d, 0x19,
++ 0x29, 0x49, 0x09, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0xe8, 0x28, 0xe8,
++ 0x28, 0xe8, 0x28, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x11, 0x11, 0x21, 0x4a, 0x0a, 0x14, 0x10, 0x32,
++ 0x52, 0x12, 0x12, 0x15, 0x14, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xa8, 0xa4, 0x44, 0x40, 0x40,
++ 0x40, 0x78, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x10, 0x10, 0x22, 0x4a, 0x0a, 0x12, 0x17, 0x30,
++ 0x52, 0x12, 0x12, 0x13, 0x14, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x78, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x78, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x4f, 0x08, 0x10, 0x17, 0x30,
++ 0x50, 0x1f, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xb8, 0xa0,
++ 0xa0, 0xbc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x27, 0x49, 0x09, 0x13, 0x12, 0x34,
++ 0x50, 0x10, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x50, 0x50, 0x58, 0xe4, 0x44,
++ 0xe0, 0xd0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x11, 0x15, 0x25, 0x49, 0x09, 0x18,
++ 0x2f, 0x48, 0x0b, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00,
++ 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x21, 0x4e, 0x09, 0x11, 0x17, 0x31,
++ 0x52, 0x17, 0x10, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x80, 0xf0, 0x90, 0x60, 0x40, 0x80, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x12, 0x27, 0x4c, 0x0f, 0x14, 0x17, 0x32,
++ 0x5f, 0x12, 0x13, 0x12, 0x14, 0x19, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0xa0, 0xfc, 0xc8, 0xa8, 0x28,
++ 0xb0, 0x10, 0x90, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x18, 0x37, 0x34, 0x31, 0x50,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x90,
++ 0x90, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x19, 0x35, 0x35, 0x31, 0x51,
++ 0x11, 0x11, 0x12, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x19, 0x36, 0x34, 0x30, 0x57,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x19, 0x35, 0x35, 0x37, 0x51,
++ 0x11, 0x11, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x13, 0x3a, 0x36, 0x34, 0x50,
++ 0x10, 0x10, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x44, 0x48, 0x60, 0x60,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x01, 0x1f, 0x01, 0x7f, 0x02, 0x04, 0x1a,
++ 0x62, 0x0b, 0x0a, 0x12, 0x22, 0x06, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30,
++ 0x0c, 0x20, 0x90, 0x48, 0x48, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x27, 0x24, 0x27, 0x27, 0x24,
++ 0x27, 0x3f, 0x01, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0xf0, 0x10,
++ 0xf0, 0xfc, 0x00, 0x88, 0x24, 0xe4, 0x00, 0x00,
++ 0x01, 0x04, 0x08, 0x10, 0x6f, 0x02, 0x04, 0x18,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0xc0, 0x40, 0x20, 0x10, 0xec, 0x20, 0x20, 0xc0,
++ 0x00, 0x90, 0x88, 0x04, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x18, 0x34, 0x34, 0x31, 0x57, 0x10,
++ 0x13, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x90, 0x88, 0x1c, 0xe4, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x1b, 0x35, 0x35, 0x32, 0x56,
++ 0x1a, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x00, 0x20, 0x20, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x3b, 0x34, 0x34, 0x50, 0x13,
++ 0x12, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x3b, 0x36, 0x34, 0x53, 0x12,
++ 0x12, 0x12, 0x13, 0x12, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0xc8, 0x48,
++ 0x48, 0x48, 0xc8, 0x48, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x1a, 0x36, 0x37, 0x32, 0x52, 0x12,
++ 0x12, 0x12, 0x14, 0x14, 0x18, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x80, 0x88,
++ 0x90, 0xe0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x11, 0x11, 0x21, 0x41, 0x01,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xf0, 0x00,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x12, 0x2e, 0x45, 0x08, 0x01,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x48, 0x48, 0x88, 0xc8, 0x30,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x35, 0x35, 0x31, 0x51,
++ 0x11, 0x11, 0x11, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x19, 0x35, 0x35, 0x31, 0x51,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf8, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x18, 0x34, 0x37, 0x32, 0x52,
++ 0x13, 0x12, 0x10, 0x10, 0x11, 0x12, 0x00, 0x00,
++ 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0xa0, 0xa0,
++ 0xfc, 0xa4, 0xa4, 0xb8, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x19, 0x35, 0x36, 0x30, 0x57,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x50, 0x48, 0x48, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x1b, 0x36, 0x36, 0x32, 0x57,
++ 0x10, 0x10, 0x10, 0x11, 0x12, 0x1c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xfc,
++ 0x40, 0xc0, 0xa0, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x19, 0x34, 0x34, 0x33, 0x50,
++ 0x11, 0x11, 0x12, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x20, 0x20, 0xc0, 0x48, 0x68, 0xf0, 0xe0,
++ 0x50, 0x50, 0x48, 0x44, 0x40, 0xc0, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x7f, 0x01, 0x1f, 0x01, 0x7f,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xfc,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x08, 0x0b, 0x10, 0x10, 0x37, 0x50, 0x10, 0x13,
++ 0x11, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x19, 0x35, 0x36, 0x30, 0x50,
++ 0x11, 0x17, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x10, 0xa0, 0x60, 0x60, 0x90,
++ 0xf8, 0x14, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x17, 0x10, 0x30, 0x51, 0x12, 0x14,
++ 0x11, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xe0, 0xe0, 0x50, 0x48, 0x44,
++ 0x40, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x1b, 0x34, 0x36, 0x39, 0x54,
++ 0x15, 0x16, 0x17, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x48, 0x48, 0xa8, 0xa8,
++ 0x68, 0x28, 0xe8, 0x28, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x18, 0x34, 0x35, 0x32, 0x52,
++ 0x1f, 0x12, 0x12, 0x14, 0x14, 0x19, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x88, 0x88, 0x08, 0x30, 0x10,
++ 0xfc, 0x94, 0x94, 0xa4, 0xa4, 0xcc, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x19, 0x35, 0x35, 0x31, 0x51,
++ 0x13, 0x12, 0x12, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x90, 0x50, 0x50,
++ 0x10, 0xa0, 0xa0, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x12, 0x19, 0x35, 0x34, 0x37, 0x50,
++ 0x10, 0x10, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0x48, 0x48, 0x50, 0x40, 0xfc, 0xa0,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x02, 0x04, 0x18, 0x61, 0x06,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0x50, 0xa0, 0x10, 0x0c,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x18, 0x34, 0x37, 0x30, 0x50,
++ 0x17, 0x11, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x18, 0x37, 0x36, 0x32, 0x52,
++ 0x12, 0x12, 0x12, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x80, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x19, 0x36, 0x37, 0x32, 0x53,
++ 0x12, 0x13, 0x12, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0xc8, 0x48, 0xc8,
++ 0x48, 0xc8, 0x48, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x18, 0x34, 0x37, 0x30, 0x50,
++ 0x13, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1a, 0x37, 0x36, 0x32, 0x52,
++ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xe8, 0xa8,
++ 0xa8, 0xe8, 0xa8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x01, 0x7f,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x00, 0xf0, 0x00, 0x00, 0xfc,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1a, 0x37, 0x34, 0x33, 0x52,
++ 0x13, 0x12, 0x13, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x00, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1b, 0x36, 0x37, 0x30, 0x53,
++ 0x10, 0x10, 0x17, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x35, 0x35, 0x31, 0x51,
++ 0x11, 0x17, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x10, 0xfc, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1a, 0x36, 0x37, 0x32, 0x52,
++ 0x12, 0x13, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x48, 0xe8,
++ 0xd8, 0x58, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x10, 0x3b, 0x36, 0x36, 0x53,
++ 0x12, 0x10, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0xc8, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x1a, 0x34, 0x37, 0x32, 0x53,
++ 0x12, 0x13, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x1b, 0x34, 0x34, 0x31, 0x52,
++ 0x10, 0x11, 0x12, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0x50, 0x88, 0xfc, 0xa4, 0xa0, 0x24, 0x9c,
++ 0xf0, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x1b, 0x14, 0x37, 0x32, 0x35, 0x50,
++ 0x10, 0x17, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xfc, 0x08, 0xf0, 0x20,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x1a, 0x37, 0x36, 0x32, 0x53,
++ 0x12, 0x10, 0x10, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0xe0, 0xd0, 0x54, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x34, 0x37, 0x32, 0x52,
++ 0x13, 0x12, 0x12, 0x12, 0x12, 0x11, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8, 0x48, 0x48,
++ 0xf8, 0x08, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x19, 0x35, 0x37, 0x31, 0x53,
++ 0x13, 0x15, 0x19, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x48, 0xa8, 0x28, 0x28, 0x28, 0xe8, 0x28, 0xa8,
++ 0x68, 0x68, 0x28, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x19, 0x34, 0x34, 0x31, 0x56,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0x40, 0xb0, 0x0c,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x1e, 0x10, 0x1e, 0x02, 0x7f,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0x10, 0xf0, 0x80, 0xfc,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x13, 0x18, 0x17, 0x34, 0x31, 0x36, 0x51,
++ 0x10, 0x10, 0x17, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0xf0,
++ 0x20, 0x40, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x01, 0x3f, 0x01, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf8, 0x00, 0x88, 0x24, 0xe4, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x1b, 0x34, 0x37, 0x31, 0x53,
++ 0x15, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0xf8, 0xa0, 0xfc, 0x10, 0xf8,
++ 0x14, 0x10, 0x60, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x19, 0x35, 0x35, 0x32, 0x54,
++ 0x10, 0x17, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x10, 0x98, 0x64, 0x44,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x18, 0x34, 0x35, 0x31, 0x52,
++ 0x10, 0x17, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0xe0, 0xa0, 0xa4, 0x24, 0x1c, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x1b, 0x34, 0x37, 0x30, 0x53,
++ 0x10, 0x17, 0x11, 0x13, 0x10, 0x17, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0x80, 0xfc, 0x10, 0xe0, 0xd0, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1a, 0x36, 0x36, 0x32, 0x52,
++ 0x12, 0x12, 0x12, 0x14, 0x14, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xe8, 0x48, 0xe8, 0x48,
++ 0xe8, 0xa8, 0xa8, 0xe8, 0x88, 0x18, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x35, 0x35, 0x31, 0x57,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xfc,
++ 0x48, 0x28, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x13, 0x1a, 0x36, 0x37, 0x32, 0x53,
++ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xa8, 0xc8, 0xf8, 0x48, 0xf8,
++ 0x88, 0x88, 0xe8, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x35, 0x35, 0x31, 0x50,
++ 0x13, 0x12, 0x12, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x50, 0x50, 0xb0, 0x10, 0xf0, 0x00,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1b, 0x34, 0x35, 0x30, 0x57,
++ 0x10, 0x10, 0x11, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0x00, 0xf0, 0x00, 0xfc,
++ 0x80, 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x12, 0x11, 0x24, 0x4a, 0x08, 0x11, 0x32, 0x52,
++ 0x10, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x78, 0x00, 0x00, 0xfc, 0x10, 0x10, 0x10,
++ 0x30, 0x00, 0x88, 0x84, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x19, 0x35, 0x35, 0x31, 0x50,
++ 0x13, 0x10, 0x11, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x1f, 0x0f, 0x02, 0x7f, 0x0f, 0x14, 0x67,
++ 0x04, 0x07, 0x21, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0xe0, 0x80, 0xfc, 0xe0, 0x50, 0xcc,
++ 0x40, 0xc0, 0x08, 0x84, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x19, 0x35, 0x37, 0x31, 0x51,
++ 0x13, 0x13, 0x15, 0x19, 0x11, 0x11, 0x00, 0x00,
++ 0x50, 0x90, 0x10, 0x14, 0x34, 0xf8, 0x50, 0x90,
++ 0x50, 0x50, 0x28, 0x28, 0x44, 0x84, 0x00, 0x00,
++ 0x10, 0x12, 0x12, 0x12, 0x3b, 0x34, 0x37, 0x50,
++ 0x13, 0x12, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x80,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1b, 0x36, 0x37, 0x31, 0x51,
++ 0x13, 0x14, 0x13, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x40, 0x40,
++ 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x1a, 0x37, 0x34, 0x31, 0x51,
++ 0x11, 0x11, 0x11, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xf8, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x1a, 0x35, 0x35, 0x32, 0x50,
++ 0x10, 0x11, 0x15, 0x15, 0x19, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0xa8, 0xa8, 0x68, 0x58, 0xb0,
++ 0x80, 0x50, 0x48, 0x14, 0x14, 0xf0, 0x00, 0x00,
++ 0x10, 0x17, 0x14, 0x1c, 0x3f, 0x3c, 0x37, 0x54,
++ 0x14, 0x17, 0x13, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x08, 0x88, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0x28, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x11, 0x11, 0x12, 0x1a, 0x35, 0x35, 0x30, 0x53,
++ 0x12, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x28, 0x28, 0x50, 0x50, 0x28, 0x68, 0x80, 0xf8,
++ 0x28, 0xc8, 0x68, 0x98, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x29, 0x3f, 0x24, 0x3b,
++ 0x61, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xc8, 0x48, 0x30, 0x30, 0xc8,
++ 0x04, 0x10, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x11, 0x11, 0x12, 0x1d, 0x35, 0x35, 0x31, 0x51,
++ 0x10, 0x11, 0x16, 0x10, 0x10, 0x17, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x80, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x06, 0x38, 0x3e, 0x22, 0x3f, 0x3e, 0x3e, 0x23,
++ 0x4c, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x94, 0xfc, 0x90, 0x60, 0xb0,
++ 0x0c, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x1a, 0x35, 0x34, 0x37, 0x54,
++ 0x12, 0x12, 0x17, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xf0, 0xb0,
++ 0xb0, 0xd0, 0xf4, 0xcc, 0xac, 0x84, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x00, 0x3f, 0x22, 0x5e,
++ 0x00, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x70, 0x50, 0x54, 0x8c, 0xf8, 0x48, 0x30, 0xd8,
++ 0x04, 0x10, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x1a, 0x37, 0x36, 0x33, 0x52,
++ 0x10, 0x11, 0x11, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xc8,
++ 0xd0, 0x50, 0x68, 0x7c, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x1f, 0x34, 0x37, 0x30, 0x57,
++ 0x10, 0x13, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x48, 0xb0, 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xfc,
++ 0xa8, 0xf8, 0xb0, 0xa8, 0xa4, 0xa0, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x17, 0x14, 0x27, 0x24,
++ 0x59, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0xf0, 0x10, 0xf0, 0xb0,
++ 0x8c, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x18, 0x34, 0x36, 0x32, 0x52,
++ 0x12, 0x12, 0x12, 0x13, 0x11, 0x16, 0x00, 0x00,
++ 0x10, 0x64, 0x84, 0xf8, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0xfc, 0x98, 0x04, 0x00, 0x00,
++ 0x22, 0x14, 0x7f, 0x08, 0x2a, 0x2a, 0x3e, 0x09,
++ 0x13, 0x20, 0x04, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x08,
++ 0x18, 0x80, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x19, 0x36, 0x35, 0x31, 0x51,
++ 0x11, 0x11, 0x12, 0x13, 0x15, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xf0, 0x08, 0xf4, 0x10, 0xf0,
++ 0x10, 0xf0, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x1b, 0x36, 0x37, 0x32, 0x53,
++ 0x12, 0x10, 0x17, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x13, 0x08, 0x4b, 0x22, 0x23, 0x0a, 0x13, 0x22,
++ 0x22, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0xf0, 0xa0, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x48,
++ 0x58, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x1b, 0x36, 0x36, 0x33, 0x50,
++ 0x17, 0x10, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x1f, 0x34, 0x37, 0x35, 0x57,
++ 0x14, 0x13, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x24, 0xa8, 0x98, 0x90, 0x68, 0x84,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1b, 0x36, 0x37, 0x32, 0x53,
++ 0x12, 0x13, 0x14, 0x17, 0x18, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0x48, 0x68, 0xd0, 0x50, 0x4c, 0xc0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x19, 0x35, 0x36, 0x37, 0x50,
++ 0x11, 0x17, 0x10, 0x11, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0x90, 0xf8, 0x10, 0x18, 0xa4, 0xfc, 0xa0,
++ 0x50, 0xac, 0x48, 0x90, 0x60, 0x80, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x2a, 0x3e, 0x2a, 0x3e, 0x7f,
++ 0x08, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x08, 0xf0, 0x80, 0xfc, 0x90, 0x90, 0x90, 0x10,
++ 0x10, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x11, 0x3f, 0x3d, 0x37, 0x55,
++ 0x17, 0x11, 0x17, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x04, 0x38, 0xe0, 0x20, 0xe0, 0x7c, 0xe8, 0x68,
++ 0xe8, 0x28, 0xe8, 0x48, 0x48, 0x88, 0x00, 0x00,
++ 0x11, 0x11, 0x22, 0x4c, 0x0a, 0x12, 0x33, 0x54,
++ 0x18, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x10, 0x10, 0xa8, 0x44, 0x40, 0x78, 0x40, 0xc0,
++ 0x3c, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x1a, 0x35, 0x36, 0x34, 0x51,
++ 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x98, 0xa8, 0xd8, 0xa8, 0xc8, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x11, 0x11, 0x13, 0x15, 0x39, 0x35, 0x35, 0x51,
++ 0x17, 0x11, 0x13, 0x14, 0x11, 0x12, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0xfc, 0x00, 0xf8, 0xa8, 0x48, 0xb0, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x19, 0x34, 0x37, 0x33, 0x50,
++ 0x16, 0x12, 0x12, 0x12, 0x15, 0x18, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xf8, 0xa0, 0x20, 0xfc, 0x20,
++ 0xf8, 0x88, 0x88, 0xf8, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x1b, 0x36, 0x37, 0x32, 0x53,
++ 0x10, 0x17, 0x10, 0x17, 0x11, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0xfc, 0x10, 0xfc, 0x10, 0xb0, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x17, 0x39, 0x3f, 0x35, 0x57,
++ 0x15, 0x17, 0x11, 0x17, 0x11, 0x17, 0x00, 0x00,
++ 0x50, 0x90, 0x10, 0xd0, 0x3c, 0xd4, 0x54, 0xd4,
++ 0x54, 0xd4, 0x14, 0xe4, 0xe4, 0x4c, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x25, 0x3f, 0x27, 0x3a,
++ 0x23, 0x3f, 0x01, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xf0, 0x40, 0xf8, 0xe0, 0x20,
++ 0xe0, 0xf8, 0x00, 0xa8, 0x24, 0xe4, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x1b, 0x36, 0x37, 0x30, 0x53,
++ 0x10, 0x17, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0x00, 0xf8,
++ 0x00, 0xfc, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x10, 0x17, 0x14, 0x1d, 0x3c, 0x3f, 0x34, 0x55,
++ 0x17, 0x16, 0x17, 0x1a, 0x1b, 0x12, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x58, 0x00, 0x00,
++ 0x01, 0x7f, 0x1f, 0x0f, 0x08, 0x0f, 0x04, 0x7f,
++ 0x0f, 0x08, 0x0f, 0x25, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0xe0, 0x20, 0xe0, 0x40, 0xfc,
++ 0xe0, 0x20, 0xe0, 0x08, 0xa4, 0xe4, 0x00, 0x00,
++ 0x08, 0x7f, 0x2a, 0x2a, 0x5d, 0x1c, 0x2a, 0x4b,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x30, 0x28, 0x28, 0xfc, 0x20, 0x30, 0x48, 0x84,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x02, 0x3c, 0x09, 0x7e, 0x08, 0x3e, 0x22, 0x3e,
++ 0x20, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x88, 0x88, 0xfc, 0x88, 0xf8, 0x88, 0x88, 0xf8,
++ 0x88, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x35, 0x35, 0x30, 0x57,
++ 0x11, 0x11, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x40, 0xfc,
++ 0xf0, 0x10, 0xf0, 0x50, 0x48, 0xc8, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x1b, 0x37, 0x35, 0x31, 0x51,
++ 0x11, 0x11, 0x10, 0x12, 0x12, 0x14, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xf8,
++ 0x20, 0xfc, 0x00, 0xa8, 0x54, 0x54, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1b, 0x34, 0x37, 0x32, 0x53,
++ 0x12, 0x13, 0x10, 0x17, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0x00, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x0b, 0x10, 0x17, 0x31, 0x53, 0x1d, 0x11,
++ 0x11, 0x11, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0xa0, 0xf8, 0xa0, 0xfc, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x58, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x00, 0x23, 0x12, 0x13, 0x03, 0x0a, 0x13, 0x25,
++ 0x24, 0x09, 0x04, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xf0, 0xf0, 0x40, 0xfc, 0x54,
++ 0xac, 0x18, 0x80, 0x88, 0x24, 0xe4, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1b, 0x36, 0x37, 0x32, 0x53,
++ 0x12, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0x48, 0xf8,
++ 0xa8, 0x48, 0x68, 0xa8, 0x08, 0x18, 0x00, 0x00,
++ 0x12, 0x12, 0x13, 0x1e, 0x36, 0x37, 0x32, 0x52,
++ 0x12, 0x17, 0x10, 0x15, 0x14, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0xa8, 0xa8, 0xfc, 0xa8, 0xa8,
++ 0xa8, 0xfc, 0x00, 0x48, 0xa4, 0xa4, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1b, 0x34, 0x37, 0x30, 0x57,
++ 0x11, 0x17, 0x10, 0x13, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x40, 0xf8, 0x40, 0xfc,
++ 0x10, 0xfc, 0x40, 0xf8, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x1a, 0x37, 0x36, 0x33, 0x52,
++ 0x13, 0x10, 0x17, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0xe8, 0x58, 0xe8, 0xf8, 0xe8,
++ 0x58, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x12, 0x15, 0x1e, 0x14, 0x14,
++ 0x14, 0x14, 0x20, 0x2a, 0x4a, 0x11, 0x00, 0x00,
++ 0x80, 0xfc, 0x90, 0xfc, 0x90, 0xf8, 0x90, 0xf8,
++ 0x90, 0xfc, 0x80, 0x48, 0x14, 0xf4, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x1b, 0x36, 0x37, 0x30, 0x57,
++ 0x17, 0x11, 0x1f, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf8, 0xa8, 0xf8, 0x40, 0x5c,
++ 0x5c, 0xc8, 0x28, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x12, 0x13, 0x14, 0x19, 0x37, 0x3d, 0x3d, 0x57,
++ 0x15, 0x15, 0x17, 0x14, 0x18, 0x10, 0x00, 0x00,
++ 0x00, 0xbc, 0x94, 0x14, 0xe4, 0x4c, 0x68, 0xe8,
++ 0x7c, 0x48, 0xfc, 0x48, 0x48, 0xc8, 0x00, 0x00,
++ 0x14, 0x7f, 0x1c, 0x3f, 0x2a, 0x3e, 0x7f, 0x3e,
++ 0x0f, 0x71, 0x04, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x88, 0x88,
++ 0x30, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x34, 0x37, 0x32, 0x53,
++ 0x10, 0x17, 0x10, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xb8, 0xa8, 0xb8,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x1b, 0x36, 0x36, 0x33, 0x53,
++ 0x12, 0x12, 0x14, 0x14, 0x18, 0x10, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xfc, 0xa8, 0x98, 0x70, 0xfc,
++ 0x70, 0x70, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x17, 0x7a, 0x11, 0x3f, 0x3b, 0x35, 0x59,
++ 0x13, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x10, 0xd0, 0xbc, 0x10, 0xf8, 0xb8, 0x34, 0x54,
++ 0x10, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x11, 0x11, 0x1b, 0x36,
++ 0x37, 0x52, 0x13, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x10, 0x20, 0xf8, 0x40,
++ 0xf0, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x1b, 0x36, 0x36, 0x32, 0x53,
++ 0x13, 0x10, 0x17, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf8, 0xe8, 0xa8, 0xe8, 0xf8,
++ 0xf0, 0x40, 0xfc, 0xf0, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x1b, 0x36, 0x37, 0x33, 0x50,
++ 0x17, 0x10, 0x13, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x48, 0x58, 0x58, 0x40,
++ 0xfc, 0x80, 0xf8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x11, 0x0f, 0x49, 0x21, 0x27, 0x0f, 0x15, 0x15,
++ 0x26, 0x24, 0x01, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xf0, 0xfc, 0x74, 0x54, 0x54,
++ 0xec, 0x44, 0x00, 0x88, 0x24, 0xe4, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x11, 0x3f, 0x3d, 0x35, 0x57,
++ 0x13, 0x13, 0x15, 0x19, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0x3c, 0xd4, 0x14, 0xec, 0x7c, 0x64, 0xfc,
++ 0x24, 0xbc, 0x64, 0x7c, 0x28, 0x44, 0x00, 0x00,
++ 0x12, 0x12, 0x13, 0x1d, 0x38, 0x3f, 0x32, 0x56,
++ 0x12, 0x16, 0x12, 0x16, 0x13, 0x1e, 0x00, 0x00,
++ 0xa0, 0xb0, 0xe8, 0x68, 0x20, 0xfc, 0xa0, 0xe8,
++ 0xa8, 0xd0, 0xd4, 0xac, 0xcc, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x19, 0x3f, 0x32, 0x36, 0x52,
++ 0x16, 0x12, 0x16, 0x12, 0x13, 0x1e, 0x00, 0x00,
++ 0x20, 0x30, 0xe8, 0x28, 0xfc, 0xa0, 0xe8, 0xa8,
++ 0xd8, 0x90, 0xd4, 0xac, 0xcc, 0x04, 0x00, 0x00,
++ 0x10, 0x7c, 0x13, 0x38, 0x7c, 0x45, 0x7e, 0x00,
++ 0x3c, 0x24, 0x3d, 0x25, 0x1e, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa8, 0x30, 0x30, 0x48, 0xc4,
++ 0x20, 0x20, 0x48, 0x44, 0x54, 0x30, 0x00, 0x00,
++ 0x11, 0x17, 0x11, 0x1b, 0x36, 0x37, 0x31, 0x51,
++ 0x13, 0x15, 0x19, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xb8, 0xa8, 0xb8, 0x20, 0xfc,
++ 0x20, 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1b, 0x37, 0x36, 0x33, 0x51,
++ 0x11, 0x13, 0x15, 0x19, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xb8, 0xa8, 0xb8, 0x20,
++ 0xfc, 0x20, 0xf8, 0xf8, 0x20, 0xfc, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x19, 0x35, 0x37, 0x30, 0x57,
++ 0x12, 0x13, 0x13, 0x12, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0xf0, 0xf0, 0xf8, 0x10, 0xfc,
++ 0xa8, 0xb8, 0xb8, 0xac, 0xf8, 0x88, 0x00, 0x00,
++ 0x13, 0x1f, 0x68, 0x13, 0x2b, 0x7c, 0x3b, 0x56,
++ 0x13, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x90, 0xd8, 0x68, 0x90, 0xa8, 0x7c, 0xb8, 0xd4,
++ 0x90, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x03, 0x1c, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x08, 0x08, 0xfc, 0x80, 0x88, 0x88,
++ 0x50, 0x60, 0xe4, 0x14, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x12, 0x14, 0x18, 0x61, 0x06, 0x00, 0x00,
++ 0x90, 0x88, 0x88, 0xfc, 0x80, 0x88, 0x88, 0x48,
++ 0x50, 0x30, 0x24, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x18, 0x14,
++ 0x12, 0x12, 0x10, 0x20, 0x21, 0x46, 0x00, 0x00,
++ 0x90, 0x88, 0x88, 0xfc, 0x80, 0x88, 0x88, 0x48,
++ 0x50, 0x30, 0x24, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10,
++ 0x1f, 0x10, 0x10, 0x20, 0x21, 0x46, 0x00, 0x00,
++ 0x90, 0x88, 0x88, 0xfc, 0x80, 0x88, 0x88, 0x48,
++ 0x50, 0x30, 0x24, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x1e, 0x01,
++ 0x7f, 0x00, 0x00, 0x00, 0x07, 0x38, 0x00, 0x00,
++ 0x20, 0x10, 0xfc, 0x90, 0x64, 0xb4, 0x2c, 0x10,
++ 0xfc, 0x90, 0x60, 0xe4, 0x1c, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x1f, 0x10, 0x1f, 0x1f, 0x10,
++ 0x1f, 0x01, 0x7f, 0x00, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0xf0, 0x10,
++ 0xf0, 0x08, 0xfc, 0xb0, 0xe4, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x0f, 0x08, 0x0f, 0x0f, 0x08,
++ 0x3f, 0x21, 0x5f, 0x00, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0xe0, 0x20,
++ 0xfc, 0x28, 0xf8, 0xa0, 0xe4, 0x1c, 0x00, 0x00,
++ 0x12, 0x12, 0x7f, 0x12, 0x1e, 0x12, 0x1e, 0x12,
++ 0x7f, 0x2a, 0x2b, 0x31, 0x20, 0x1f, 0x00, 0x00,
++ 0x28, 0x24, 0xa4, 0x3c, 0xe0, 0x28, 0x28, 0x28,
++ 0xb0, 0x10, 0x34, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x7f, 0x12, 0x1f, 0x32,
++ 0x3f, 0x52, 0x1f, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x48, 0xfc, 0x40, 0xa8, 0x28,
++ 0xb8, 0x10, 0x94, 0x2c, 0xcc, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x19, 0x2a, 0x5d, 0x2a, 0x4c, 0x16,
++ 0x69, 0x34, 0x09, 0x32, 0x0c, 0x70, 0x00, 0x00,
++ 0x30, 0xa8, 0xa8, 0xa0, 0xbc, 0xe0, 0xa8, 0x28,
++ 0x10, 0x10, 0x34, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x77, 0x55, 0x77, 0x00, 0x3e, 0x2a, 0x3e,
++ 0x2a, 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x00, 0x00,
++ 0x30, 0x28, 0x28, 0x20, 0x3c, 0xe0, 0x28, 0x28,
++ 0x18, 0x10, 0x34, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x04, 0x07, 0x3f, 0x2b, 0x3d, 0x27, 0x3f, 0x20,
++ 0x2f, 0x29, 0x2f, 0x2a, 0x27, 0x5c, 0x00, 0x00,
++ 0x30, 0x28, 0xa8, 0x20, 0x3c, 0xe0, 0x28, 0x28,
++ 0x18, 0x10, 0x34, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x19, 0x2a, 0x5d, 0x2a, 0x5a, 0x1f,
++ 0x24, 0x7f, 0x24, 0x3f, 0x24, 0x3f, 0x00, 0x00,
++ 0x30, 0xa8, 0xa8, 0xa0, 0xbc, 0xe0, 0xa8, 0xa8,
++ 0x18, 0x10, 0x14, 0x2c, 0x4c, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f,
++ 0x19, 0x19, 0x2f, 0x29, 0x49, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x14,
++ 0x18, 0x70, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
++ 0x80, 0x80, 0x84, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x7c, 0x10, 0x10, 0x13, 0x14,
++ 0x18, 0x70, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x11, 0x11, 0x15,
++ 0x19, 0x71, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x14,
++ 0x18, 0x70, 0x10, 0x10, 0x1f, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x11, 0x11, 0x10, 0x14,
++ 0x18, 0x70, 0x10, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x48, 0x28, 0x30, 0x90, 0xa0,
++ 0x60, 0x40, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x12, 0x11, 0x14,
++ 0x18, 0x70, 0x11, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
++ 0xd0, 0xb0, 0x1c, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x12, 0x12, 0x16,
++ 0x1a, 0x72, 0x12, 0x14, 0x14, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88,
++ 0x88, 0xb0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7c, 0x10, 0x10, 0x13, 0x14,
++ 0x18, 0x70, 0x10, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x10, 0x17,
++ 0x18, 0x70, 0x11, 0x12, 0x14, 0x38, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf0, 0x90, 0x90, 0x90, 0xfc,
++ 0x80, 0xc0, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x10, 0x13, 0x10, 0x14,
++ 0x18, 0x70, 0x10, 0x10, 0x13, 0x30, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0x7c, 0xc8, 0x48, 0x50,
++ 0x30, 0x20, 0x54, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x17, 0x10, 0x14,
++ 0x18, 0x70, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x60, 0x40, 0xfc, 0x48, 0x50,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x11, 0x11, 0x15,
++ 0x19, 0x71, 0x12, 0x12, 0x14, 0x38, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0x50, 0x50, 0x50, 0x48, 0x48, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x10, 0x11, 0x10, 0x14,
++ 0x18, 0x70, 0x13, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x90, 0x50, 0x50, 0x10, 0x10, 0x90, 0x90,
++ 0x1c, 0x70, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x10, 0x15,
++ 0x19, 0x71, 0x12, 0x12, 0x14, 0x39, 0x00, 0x00,
++ 0x90, 0x88, 0x88, 0xfc, 0x80, 0x90, 0x90, 0xd0,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x10, 0x14,
++ 0x18, 0x70, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x60, 0x50,
++ 0x48, 0x48, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x15,
++ 0x1a, 0x70, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x60, 0x60, 0xd0, 0x48,
++ 0x44, 0x44, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x16, 0x12, 0x12, 0x15,
++ 0x19, 0x72, 0x12, 0x1f, 0x10, 0x30, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x78, 0xa8, 0xa8, 0x28,
++ 0x28, 0xa8, 0xa8, 0xc8, 0x48, 0x98, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7f, 0x11, 0x11, 0x11, 0x15,
++ 0x19, 0x71, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x12, 0x12, 0x13, 0x16,
++ 0x1a, 0x73, 0x12, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0xf8, 0x48,
++ 0x48, 0xf8, 0x48, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x7f, 0x12, 0x12, 0x3c, 0x06, 0x19, 0x60,
++ 0x0f, 0x1f, 0x01, 0x3f, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x50, 0x20, 0xd0, 0x0c, 0xe0,
++ 0x00, 0xf0, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x70, 0x0f, 0x08, 0x0f, 0x01,
++ 0x0f, 0x1f, 0x01, 0x7f, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x80, 0xe0, 0x1c, 0xe0, 0x20, 0xe0, 0xc0,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x12, 0x13, 0x12, 0x16,
++ 0x1a, 0x72, 0x12, 0x14, 0x14, 0x38, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x20, 0xa0,
++ 0x60, 0x30, 0x28, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7f, 0x12, 0x12, 0x13, 0x16,
++ 0x1a, 0x72, 0x12, 0x14, 0x14, 0x38, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xfc, 0xa4, 0x9c, 0x70, 0xf8,
++ 0x70, 0x70, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x14,
++ 0x1b, 0x72, 0x12, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x7c, 0x40, 0x40, 0x40,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x02, 0x05, 0x38, 0x08, 0x08, 0x3e, 0x08, 0x08,
++ 0x0e, 0x79, 0x08, 0x10, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x12, 0x11, 0x10, 0x14,
++ 0x1b, 0x70, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0x50, 0x48, 0x48, 0xf0, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x13, 0x12, 0x16, 0x16,
++ 0x1a, 0x72, 0x12, 0x12, 0x12, 0x32, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10, 0x90, 0x50,
++ 0x50, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x13, 0x12, 0x16,
++ 0x1b, 0x70, 0x10, 0x10, 0x11, 0x32, 0x00, 0x00,
++ 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0xa0, 0xa0,
++ 0xfc, 0xa4, 0xa4, 0xb8, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x17, 0x16,
++ 0x1a, 0x72, 0x12, 0x13, 0x12, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x48, 0x28, 0x28, 0xfc, 0x08,
++ 0x88, 0x48, 0x48, 0xfc, 0x08, 0x30, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x7e, 0x17, 0x12, 0x12, 0x16,
++ 0x1a, 0x72, 0x12, 0x14, 0x14, 0x38, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x78, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xc8, 0x98, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x12, 0x11, 0x15,
++ 0x18, 0x70, 0x10, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x10, 0x10, 0x10, 0x10,
++ 0xa0, 0xa0, 0xa0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x13, 0x14, 0x10, 0x14,
++ 0x19, 0x77, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x10, 0x20, 0xa0, 0x40, 0xa0,
++ 0xf8, 0x14, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x11, 0x14,
++ 0x19, 0x71, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x17, 0x11, 0x11, 0x15,
++ 0x19, 0x77, 0x11, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0x20,
++ 0x20, 0xfc, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7d, 0x11, 0x12, 0x14, 0x15,
++ 0x19, 0x72, 0x14, 0x10, 0x10, 0x31, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x98, 0x98, 0xa8, 0xc8, 0x98,
++ 0x98, 0xa8, 0xc8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x17, 0x10, 0x14,
++ 0x1b, 0x70, 0x10, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x0a, 0x0d, 0x3a, 0x0c, 0x3a, 0x0c, 0x39, 0x00,
++ 0x0f, 0x1f, 0x01, 0x7f, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x88, 0x30, 0xe0,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x7c, 0x13, 0x10, 0x10, 0x15,
++ 0x19, 0x72, 0x14, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x20, 0x40, 0xc8, 0xe8, 0xf0, 0x50,
++ 0x50, 0x48, 0x44, 0xc0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x11, 0x11, 0x12, 0x16,
++ 0x1a, 0x73, 0x12, 0x12, 0x12, 0x32, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x00, 0xf8, 0x08, 0x10,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x13, 0x10, 0x13, 0x16,
++ 0x1b, 0x72, 0x13, 0x12, 0x12, 0x32, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x00, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x11, 0x11, 0x11, 0x16,
++ 0x1a, 0x70, 0x10, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x50, 0x50, 0x58, 0xe4,
++ 0x44, 0x60, 0xa0, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x10, 0x17,
++ 0x18, 0x70, 0x17, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x11, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x13, 0x10,
++ 0x1f, 0x71, 0x10, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0x40, 0x58, 0x48, 0x58, 0x48, 0x48, 0xf8, 0x40,
++ 0xf8, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x12, 0x10,
++ 0x18, 0x73, 0x10, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x40,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7d, 0x11, 0x11, 0x12, 0x16,
++ 0x1a, 0x72, 0x12, 0x12, 0x12, 0x33, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x20, 0x20, 0x38, 0x48, 0x68,
++ 0x98, 0x50, 0x30, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x11, 0x13, 0x14,
++ 0x19, 0x71, 0x11, 0x11, 0x11, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x90, 0x10, 0xfc, 0x08,
++ 0xe8, 0x28, 0x28, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x11, 0x16, 0x7c, 0x14, 0x17, 0x15, 0x15,
++ 0x1d, 0x75, 0x15, 0x19, 0x19, 0x31, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0x40, 0x7c, 0xa4, 0xa8, 0x20,
++ 0x20, 0x30, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x17, 0x12, 0x7e, 0x13, 0x12, 0x12, 0x17,
++ 0x1a, 0x72, 0x13, 0x16, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0xc8, 0xc8, 0xa8,
++ 0xb0, 0x90, 0xb0, 0xc8, 0x88, 0x84, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x11, 0x11, 0x17, 0x11,
++ 0x19, 0x73, 0x10, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xf8, 0x50, 0x50, 0xfc, 0x50,
++ 0x50, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x28, 0x3e, 0x48, 0x7f, 0x08, 0x3e, 0x2a, 0x2e,
++ 0x07, 0x1f, 0x01, 0x7f, 0x01, 0x03, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x08, 0xd8,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7e, 0x15, 0x11, 0x12, 0x17,
++ 0x18, 0x72, 0x12, 0x13, 0x12, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0x08, 0xe8, 0x88, 0xe8,
++ 0x88, 0xa8, 0xa8, 0xe8, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x13, 0x12, 0x13, 0x16,
++ 0x1b, 0x70, 0x17, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x40, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x14, 0x17, 0x10, 0x16,
++ 0x1a, 0x72, 0x12, 0x13, 0x14, 0x38, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x00, 0xfc, 0x40, 0x40,
++ 0x78, 0x40, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x13, 0x14, 0x13, 0x16,
++ 0x1a, 0x72, 0x13, 0x12, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xb8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x30, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x12, 0x16,
++ 0x1a, 0x72, 0x12, 0x12, 0x12, 0x32, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x12, 0x13, 0x12, 0x1e,
++ 0x73, 0x12, 0x14, 0x14, 0x1b, 0x3c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x48, 0x40,
++ 0xfc, 0x40, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x10, 0x17, 0x10, 0x14,
++ 0x1b, 0x70, 0x13, 0x10, 0x13, 0x30, 0x00, 0x00,
++ 0x80, 0xf0, 0x90, 0xe0, 0x20, 0xfc, 0x40, 0xe8,
++ 0x68, 0xb0, 0x70, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x16, 0x10,
++ 0x19, 0x71, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x20, 0x24, 0xf8, 0x20, 0x20, 0xe4, 0x5c, 0x80,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7c, 0x13, 0x13, 0x12, 0x16,
++ 0x1b, 0x70, 0x11, 0x12, 0x14, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x58, 0xd8, 0xe8,
++ 0xf8, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x11, 0x10, 0x12, 0x7d, 0x11, 0x12, 0x11, 0x14,
++ 0x18, 0x73, 0x10, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0xd0, 0x54, 0xa4, 0xa8, 0x10, 0x08, 0xf4, 0x40,
++ 0x40, 0xf8, 0xa0, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x12, 0x12, 0x7e, 0x13, 0x10, 0x17, 0x10,
++ 0x1b, 0x72, 0x12, 0x12, 0x12, 0x32, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x40,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x17, 0x10, 0x13, 0x14,
++ 0x18, 0x77, 0x10, 0x11, 0x16, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0xa0, 0x40, 0xfc, 0xc8, 0x50, 0xc0,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x17, 0x11, 0x12,
++ 0x1a, 0x73, 0x12, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0xfc, 0x40, 0x58,
++ 0x48, 0x58, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x17, 0x12, 0x7e, 0x13, 0x12, 0x12, 0x17,
++ 0x1a, 0x72, 0x13, 0x16, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xb0, 0xb0, 0xa8, 0xa8,
++ 0xa4, 0xa4, 0xa4, 0xb8, 0xa0, 0xa0, 0x00, 0x00,
++ 0x11, 0x10, 0x10, 0x7d, 0x13, 0x14, 0x17, 0x14,
++ 0x1e, 0x75, 0x16, 0x15, 0x14, 0x35, 0x00, 0x00,
++ 0xc0, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xa8, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x11, 0x11, 0x17, 0x12,
++ 0x1f, 0x30, 0x52, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x80, 0xf0, 0x90, 0x60, 0x40, 0x80, 0xf8, 0x40,
++ 0xfc, 0x40, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x3f, 0x22, 0x5f, 0x0f, 0x02, 0x3f, 0x08,
++ 0x17, 0x6f, 0x01, 0x3f, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0xf0, 0xe0, 0x80, 0xf8, 0xe0,
++ 0x10, 0xec, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x10, 0x17, 0x10, 0x17,
++ 0x1a, 0x77, 0x12, 0x17, 0x12, 0x32, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa0, 0xfc, 0x40, 0xf8,
++ 0x48, 0xfc, 0x48, 0xfc, 0x08, 0x18, 0x00, 0x00,
++ 0x11, 0x10, 0x13, 0x7c, 0x11, 0x10, 0x17, 0x11,
++ 0x19, 0x72, 0x14, 0x18, 0x17, 0x30, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x13, 0x12, 0x12, 0x17,
++ 0x19, 0x72, 0x15, 0x12, 0x14, 0x33, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xb8, 0x20, 0x20, 0xb8,
++ 0x98, 0xa8, 0xd8, 0xa8, 0xc8, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x12, 0x15, 0x11, 0x15,
++ 0x19, 0x71, 0x11, 0x13, 0x15, 0x31, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xf0, 0x08, 0xf4, 0x10, 0xf0,
++ 0x10, 0xf0, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x7d, 0x11, 0x17, 0x10, 0x17,
++ 0x1a, 0x73, 0x13, 0x12, 0x17, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0xf0, 0xf0, 0xfc, 0x10, 0xfc,
++ 0xa8, 0xb8, 0xb8, 0xac, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x11, 0x11, 0x15,
++ 0x19, 0x71, 0x11, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00,
++ 0xfc, 0x00, 0xfc, 0xa4, 0xe4, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x10, 0x17,
++ 0x19, 0x72, 0x15, 0x12, 0x14, 0x31, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x98, 0xa8, 0xd8, 0xa8, 0xc8, 0x98, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x12, 0x13, 0x12, 0x17,
++ 0x1a, 0x70, 0x17, 0x11, 0x10, 0x30, 0x00, 0x00,
++ 0x50, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x10, 0x12, 0x12, 0x7f, 0x12, 0x10, 0x11, 0x15,
++ 0x1b, 0x75, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x98, 0xa0, 0xfc, 0x20,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x3e, 0x08, 0x7f, 0x14, 0x7f, 0x3f, 0x08,
++ 0x07, 0x1f, 0x01, 0x7f, 0x01, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0xd4, 0xb4, 0x0c, 0x60,
++ 0x80, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x12, 0x13, 0x12, 0x17,
++ 0x18, 0x73, 0x10, 0x17, 0x11, 0x30, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x50, 0xf8, 0x10, 0xfc, 0x10, 0xb0, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x7a, 0x15, 0x12, 0x14, 0x11,
++ 0x1e, 0x71, 0x10, 0x11, 0x10, 0x33, 0x00, 0x00,
++ 0x00, 0xf8, 0x98, 0xa8, 0xd8, 0xa8, 0xc8, 0x20,
++ 0x50, 0xac, 0x48, 0x90, 0x60, 0x80, 0x00, 0x00,
++ 0x11, 0x12, 0x13, 0x7f, 0x12, 0x17, 0x15, 0x1d,
++ 0x71, 0x11, 0x11, 0x11, 0x11, 0x36, 0x00, 0x00,
++ 0xb8, 0x68, 0xb8, 0x78, 0xa8, 0xfc, 0xf8, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0xa4, 0x3c, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x7f, 0x12, 0x13, 0x12, 0x17,
++ 0x1a, 0x77, 0x13, 0x12, 0x14, 0x38, 0x00, 0x00,
++ 0x84, 0x88, 0xb0, 0xe0, 0xa0, 0xbc, 0xa8, 0xa8,
++ 0xa8, 0xe8, 0x28, 0xc8, 0x48, 0x88, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x11, 0x17, 0x11, 0x11,
++ 0x1e, 0x73, 0x10, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xfc, 0x10, 0xfc,
++ 0x00, 0xf8, 0xa0, 0xa0, 0x24, 0x1c, 0x00, 0x00,
++ 0x11, 0x12, 0x11, 0x7d, 0x12, 0x17, 0x11, 0x17,
++ 0x1c, 0x77, 0x15, 0x11, 0x11, 0x36, 0x00, 0x00,
++ 0xd0, 0x54, 0xa4, 0x18, 0x08, 0x74, 0x50, 0x54,
++ 0x8c, 0xf8, 0x48, 0x30, 0x28, 0xc4, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x13, 0x17, 0x11, 0x15,
++ 0x19, 0x71, 0x11, 0x12, 0x14, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa4, 0x18, 0xf8, 0x14, 0xf0,
++ 0x10, 0xf0, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x11, 0x15, 0x13, 0x79, 0x12, 0x14, 0x13, 0x12,
++ 0x1c, 0x73, 0x10, 0x10, 0x11, 0x32, 0x00, 0x00,
++ 0x10, 0x54, 0xb4, 0x18, 0xa8, 0x44, 0xfc, 0x48,
++ 0x40, 0xf8, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x13, 0x12, 0x13, 0x17,
++ 0x1b, 0x74, 0x12, 0x12, 0x14, 0x30, 0x00, 0x00,
++ 0x28, 0x24, 0xfc, 0x20, 0xe8, 0x28, 0xd0, 0x54,
++ 0xec, 0x44, 0xa8, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x13, 0x12, 0x13, 0x16,
++ 0x1b, 0x72, 0x13, 0x14, 0x15, 0x38, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0x78, 0xc8, 0x38, 0xfc, 0x68,
++ 0xb8, 0x70, 0xb8, 0x58, 0x94, 0x60, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7f, 0x12, 0x12, 0x13, 0x17,
++ 0x18, 0x77, 0x14, 0x15, 0x14, 0x34, 0x00, 0x00,
++ 0x40, 0xa0, 0x58, 0xfc, 0xa8, 0x68, 0x98, 0xf8,
++ 0x40, 0xfc, 0xa4, 0xf4, 0x14, 0x0c, 0x00, 0x00,
++ 0x10, 0x17, 0x13, 0x7e, 0x12, 0x12, 0x13, 0x15,
++ 0x19, 0x71, 0x11, 0x11, 0x17, 0x30, 0x00, 0x00,
++ 0x40, 0xfc, 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x10, 0x13, 0x10, 0x17,
++ 0x19, 0x77, 0x10, 0x13, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x40, 0xf8, 0x40, 0xfc,
++ 0x10, 0xfc, 0x40, 0xf8, 0x40, 0x40, 0x00, 0x00,
++ 0x14, 0x12, 0x12, 0x79, 0x14, 0x12, 0x13, 0x10,
++ 0x1e, 0x72, 0x13, 0x12, 0x15, 0x38, 0x00, 0x00,
++ 0x20, 0xf8, 0x20, 0xfc, 0x88, 0x50, 0xfc, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0xfc, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3f, 0x20, 0x3e, 0x52, 0x1e,
++ 0x07, 0x1f, 0x01, 0x7f, 0x01, 0x03, 0x00, 0x00,
++ 0x20, 0xf8, 0x50, 0xfc, 0x20, 0xf8, 0x20, 0xe0,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x12, 0x17, 0x13, 0x10,
++ 0x1b, 0x72, 0x13, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x48, 0x58, 0x58, 0x40,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x12, 0x16,
++ 0x1b, 0x72, 0x13, 0x12, 0x12, 0x32, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0x88, 0xe8,
++ 0xa8, 0x48, 0xf8, 0xa8, 0xe8, 0x18, 0x00, 0x00,
++ 0x0a, 0x13, 0x1a, 0x13, 0x18, 0x12, 0x7f, 0x08,
++ 0x17, 0x6f, 0x01, 0x3f, 0x01, 0x03, 0x00, 0x00,
++ 0x30, 0x90, 0x30, 0x90, 0xb0, 0x90, 0xfc, 0xe0,
++ 0x10, 0xec, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x06, 0x1b, 0x12, 0x1b, 0x12, 0x1a, 0x12, 0x7f,
++ 0x09, 0x17, 0x61, 0x1f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xb0, 0x10, 0xb0, 0x90, 0xb0, 0x90, 0xfc,
++ 0x20, 0xd0, 0x0c, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x20, 0x2f, 0x21, 0x7e, 0x2a, 0x2a, 0x36, 0x22,
++ 0x33, 0x62, 0x23, 0x22, 0x24, 0x68, 0x00, 0x00,
++ 0x80, 0xfc, 0x48, 0xb8, 0xa8, 0xa8, 0xb4, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x11, 0x11, 0x11, 0x17,
++ 0x1d, 0x70, 0x11, 0x10, 0x11, 0x37, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xf0, 0x10, 0xf0, 0xfc,
++ 0xf8, 0x90, 0xf8, 0x40, 0xf0, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x10, 0x11, 0x17, 0x14,
++ 0x19, 0x71, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x90, 0x88, 0x1c, 0xe4, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7d, 0x10, 0x17, 0x11, 0x14,
++ 0x19, 0x77, 0x13, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x00, 0xfc, 0xe8, 0x40,
++ 0xf0, 0xfc, 0x88, 0xfc, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x14, 0x11, 0x17,
++ 0x19, 0x71, 0x11, 0x11, 0x11, 0x36, 0x00, 0x00,
++ 0x40, 0xfc, 0x08, 0xf8, 0x58, 0xe4, 0xf4, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x20, 0x2f, 0x2a, 0x7f, 0x2f, 0x2a, 0x2f, 0x2b,
++ 0x32, 0x63, 0x23, 0x23, 0x21, 0x6e, 0x00, 0x00,
++ 0x40, 0xfc, 0x80, 0x78, 0xfc, 0xb4, 0xfc, 0xf0,
++ 0x10, 0xf0, 0xf0, 0xf4, 0xa4, 0x1c, 0x00, 0x00,
++ 0x14, 0x17, 0x15, 0x79, 0x10, 0x17, 0x10, 0x17,
++ 0x1c, 0x77, 0x14, 0x17, 0x14, 0x35, 0x00, 0x00,
++ 0x20, 0xfc, 0x50, 0x18, 0xa0, 0xfc, 0x00, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0x88, 0x98, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x12, 0x16,
++ 0x1a, 0x72, 0x12, 0x14, 0x14, 0x3b, 0x00, 0x00,
++ 0x40, 0xfc, 0x90, 0xfc, 0xf0, 0xfc, 0x20, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x24, 0x27, 0x2b, 0x7f, 0x2b, 0x2d, 0x2f, 0x28,
++ 0x3f, 0x62, 0x2f, 0x23, 0x24, 0x68, 0x00, 0x00,
++ 0x80, 0xf8, 0x68, 0xe8, 0x70, 0xf0, 0xe8, 0x68,
++ 0xe4, 0x24, 0xe4, 0x38, 0xa0, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x14, 0x1f, 0x10,
++ 0x1f, 0x74, 0x17, 0x17, 0x14, 0x35, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x20, 0xa8, 0xf0, 0x64,
++ 0x9c, 0xa0, 0xa8, 0xb0, 0xa4, 0x9c, 0x00, 0x00,
++ 0x10, 0x13, 0x7d, 0x1a, 0x36, 0x51, 0x13, 0x7f,
++ 0x05, 0x1f, 0x6f, 0x3f, 0x01, 0x03, 0x00, 0x00,
++ 0x90, 0x90, 0x7c, 0xb0, 0xd8, 0x94, 0x50, 0xfc,
++ 0xc0, 0x30, 0xec, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x12, 0x12, 0x15, 0x7d, 0x12, 0x13, 0x15, 0x17,
++ 0x18, 0x77, 0x10, 0x11, 0x16, 0x30, 0x00, 0x00,
++ 0x48, 0x48, 0xf4, 0xb4, 0xe8, 0xac, 0xb4, 0xfc,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x17, 0x13, 0x7a, 0x13, 0x10, 0x13, 0x11,
++ 0x18, 0x77, 0x10, 0x17, 0x11, 0x33, 0x00, 0x00,
++ 0x40, 0xfc, 0xb8, 0xa8, 0xb8, 0xa0, 0xf8, 0xf0,
++ 0xa0, 0xfc, 0xc8, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x12, 0x13, 0x11, 0x7f, 0x12, 0x17, 0x13, 0x12,
++ 0x1b, 0x77, 0x15, 0x17, 0x15, 0x35, 0x00, 0x00,
++ 0x48, 0xf8, 0x20, 0xf8, 0x40, 0xf0, 0xf0, 0x40,
++ 0xf8, 0xf8, 0x58, 0xf8, 0x48, 0xd8, 0x00, 0x00,
++ 0x11, 0x17, 0x11, 0x7f, 0x11, 0x12, 0x15, 0x1d,
++ 0x71, 0x11, 0x11, 0x11, 0x11, 0x36, 0x00, 0x00,
++ 0x20, 0xf8, 0x20, 0xfc, 0xb0, 0x48, 0xf4, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x25, 0x2f, 0x25, 0x7f, 0x2f, 0x2a, 0x2f, 0x22,
++ 0x3f, 0x62, 0x2f, 0x23, 0x24, 0x68, 0x00, 0x00,
++ 0x28, 0xa8, 0x28, 0x7c, 0xd0, 0xd0, 0xfc, 0x50,
++ 0xd0, 0x7c, 0xd0, 0x50, 0xfc, 0x40, 0x00, 0x00,
++ 0x13, 0x6f, 0x2b, 0x17, 0x7c, 0x3b, 0x56, 0x13,
++ 0x0f, 0x1f, 0x01, 0x7f, 0x01, 0x03, 0x00, 0x00,
++ 0x90, 0xe8, 0xa8, 0x94, 0x7c, 0xb8, 0xd4, 0xe0,
++ 0x80, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x13, 0x12, 0x13, 0x7f, 0x13, 0x11, 0x13, 0x16,
++ 0x1a, 0x73, 0x13, 0x10, 0x10, 0x37, 0x00, 0x00,
++ 0xb8, 0xa8, 0xb8, 0xb8, 0xb8, 0x20, 0xfc, 0xf0,
++ 0xf0, 0xfc, 0xf0, 0xa0, 0xe0, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x3f, 0x04, 0x02,
++ 0x02, 0x01, 0x00, 0x03, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0x20,
++ 0x20, 0x40, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x0f, 0x0c, 0x14, 0x22,
++ 0x02, 0x01, 0x01, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x20, 0x20, 0x40,
++ 0x40, 0x80, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x10, 0x11, 0x1d, 0x26, 0x24,
++ 0x04, 0x04, 0x04, 0x08, 0x08, 0x33, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x24, 0x25, 0x25, 0x26, 0x24, 0x24,
++ 0x26, 0x3c, 0x64, 0x04, 0x05, 0x06, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0c, 0x14, 0x15, 0x35, 0x56, 0x14,
++ 0x14, 0x14, 0x14, 0x14, 0x10, 0x13, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x54, 0x55, 0x55, 0x7e, 0x54,
++ 0x54, 0x54, 0x7c, 0x44, 0x01, 0x06, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x14, 0x12, 0x26, 0x65, 0x14,
++ 0x0c, 0x0c, 0x0a, 0x12, 0x20, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x90, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x7f,
++ 0x08, 0x0e, 0x12, 0x12, 0x22, 0x4d, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x90, 0x90, 0x50, 0x50,
++ 0x60, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2b, 0x2a, 0x3e,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x0b, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x90, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x3e, 0x49, 0x08, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x1b, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x40, 0x40, 0xf8, 0x88, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x3e, 0x49, 0x0a, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x1b, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x90, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x2a, 0x29, 0x49, 0x08, 0x7f, 0x41, 0x5d,
++ 0x55, 0x55, 0x5d, 0x55, 0x41, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0xc8, 0xc8, 0x48, 0x48,
++ 0x30, 0x30, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x2a, 0x29, 0x49, 0x08, 0x7f, 0x49, 0x6b,
++ 0x6b, 0x6b, 0x6b, 0x49, 0x49, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0xc8, 0xc8, 0x48, 0x48,
++ 0x30, 0x30, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x00, 0x3e, 0x22, 0x3e, 0x00,
++ 0x7f, 0x41, 0x5d, 0x55, 0x5d, 0x43, 0x00, 0x00,
++ 0x20, 0x20, 0x3c, 0x20, 0x20, 0xf8, 0x48, 0x48,
++ 0x28, 0x30, 0x10, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x04, 0x3f, 0x25, 0x7f, 0x25, 0x3f, 0x3f, 0x25,
++ 0x3f, 0x08, 0x7f, 0x12, 0x1e, 0x71, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x48, 0xc8, 0x48, 0x50,
++ 0x30, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x3f, 0x40, 0x77, 0x55,
++ 0x77, 0x12, 0x12, 0x2d, 0x25, 0x49, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0xc8, 0xc8, 0x28, 0x28,
++ 0x30, 0x10, 0x30, 0x48, 0x88, 0x04, 0x00, 0x00,
++ 0x49, 0x2a, 0x7f, 0x49, 0x5d, 0x6b, 0x4b, 0x00,
++ 0x7f, 0x08, 0x1e, 0x72, 0x0c, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0x7c, 0xc8, 0x30, 0x30, 0xcc, 0x00,
++ 0xfc, 0x88, 0xb0, 0xc4, 0x84, 0x7c, 0x00, 0x00,
++ 0x13, 0x1f, 0x68, 0x13, 0x2b, 0x7f, 0x3a, 0x57,
++ 0x12, 0x07, 0x3c, 0x03, 0x0e, 0x70, 0x00, 0x00,
++ 0x90, 0xd8, 0x68, 0x90, 0xa8, 0xfc, 0xb8, 0xd4,
++ 0x10, 0xf8, 0x40, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x10, 0x1e, 0x24, 0x7e, 0x2a, 0x2a, 0x3e, 0x2a,
++ 0x2a, 0x3e, 0x23, 0x22, 0x22, 0x46, 0x00, 0x00,
++ 0x10, 0x90, 0x50, 0x50, 0x10, 0x90, 0x50, 0x50,
++ 0x1c, 0x70, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x12, 0x12, 0x7f, 0x12, 0x1e, 0x12, 0x1e, 0x12,
++ 0x7f, 0x2a, 0x2b, 0x33, 0x20, 0x1f, 0x00, 0x00,
++ 0x10, 0x90, 0x50, 0x50, 0x10, 0x90, 0x50, 0x50,
++ 0x1c, 0x70, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x08, 0x08, 0x10, 0x1e, 0x32,
++ 0x32, 0x52, 0x13, 0x1f, 0x12, 0x10, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x12, 0x5b, 0x6d, 0x52, 0x6d, 0x7f, 0x7f, 0x5b,
++ 0x6d, 0x52, 0x6d, 0x7f, 0x7f, 0x40, 0x00, 0x00,
++ 0x08, 0x70, 0x40, 0x40, 0x40, 0x7c, 0x50, 0x50,
++ 0x50, 0x50, 0x90, 0x90, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x11, 0x12, 0x1c, 0x14,
++ 0x14, 0x15, 0x24, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x00, 0xf8, 0xa8, 0xa8,
++ 0xa8, 0xfc, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x12, 0x13, 0x1c, 0x14,
++ 0x14, 0x14, 0x24, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0x20, 0xfc, 0x20, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xb8, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x04, 0x02, 0x3f, 0x21, 0x41,
++ 0x3f, 0x01, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x40, 0x80, 0xfc, 0x08, 0x00,
++ 0xf8, 0x00, 0xf0, 0x10, 0x10, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x13, 0x10, 0x1c, 0x15,
++ 0x14, 0x14, 0x27, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0xe0, 0x40, 0x78, 0xc0,
++ 0x40, 0x7c, 0xc0, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x11, 0x12, 0x1c, 0x14,
++ 0x15, 0x14, 0x24, 0x24, 0x45, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xa0, 0xa0, 0xf8, 0xa0,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x13, 0x10, 0x1c, 0x17,
++ 0x14, 0x15, 0x25, 0x25, 0x45, 0x1a, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0xfc, 0x50, 0x98, 0xe8,
++ 0x10, 0x50, 0x50, 0x54, 0x54, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x10, 0x11, 0x1c, 0x14,
++ 0x17, 0x14, 0x24, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x80, 0xfc, 0x18, 0xe8, 0xb0, 0xfc, 0x70, 0xa8,
++ 0xfc, 0xa8, 0xf8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7c, 0x13, 0x10, 0x1c, 0x17,
++ 0x14, 0x14, 0x24, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x18, 0xe8, 0x28, 0xb0, 0xfc, 0x70, 0xa8, 0x24,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x7f, 0x01,
++ 0x01, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x21, 0x21, 0x21, 0x3f, 0x21,
++ 0x01, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x00, 0x3f,
++ 0x01, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x00, 0x7f,
++ 0x01, 0x3f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x00, 0x1f,
++ 0x10, 0x10, 0x11, 0x21, 0x26, 0x58, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x80, 0x80, 0xc0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x01, 0x7f,
++ 0x04, 0x04, 0x02, 0x03, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x40, 0x40, 0x80, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x61, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0xe0,
++ 0x20, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4a, 0x4b, 0x4a, 0x7a, 0x4a,
++ 0x4a, 0x4a, 0x7a, 0x4c, 0x44, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x80, 0x88,
++ 0x90, 0xe0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x7e, 0x00, 0x3c, 0x05, 0x05, 0x7e, 0x0e,
++ 0x0d, 0x15, 0x14, 0x24, 0x44, 0x0c, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x78, 0x48, 0x48, 0x48,
++ 0x78, 0x48, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x02, 0x3c,
++ 0x22, 0x22, 0x2e, 0x72, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x00, 0x7f,
++ 0x08, 0x0f, 0x12, 0x22, 0x04, 0x09, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x00, 0xfc,
++ 0x00, 0xf8, 0x48, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x01, 0x3f,
++ 0x22, 0x7f, 0x04, 0x0f, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x08, 0xf8, 0x40, 0x80, 0x60, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x7a, 0x49, 0x49, 0x48, 0x7f, 0x48,
++ 0x48, 0x48, 0x79, 0x49, 0x02, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0x48, 0x48, 0x50, 0x40, 0xfc, 0xa0,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x08, 0x14, 0x3e, 0x02, 0x7f, 0x00,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x50, 0xf8, 0x08, 0xfc, 0x00,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x02, 0x12,
++ 0x0a, 0x0a, 0x1c, 0x64, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x90, 0x90,
++ 0xe0, 0xa0, 0x90, 0x94, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x01, 0x78, 0x4b, 0x48, 0x4f, 0x79, 0x4b,
++ 0x4e, 0x4a, 0x7a, 0x4a, 0x02, 0x00, 0x00, 0x00,
++ 0x08, 0xd0, 0x70, 0x88, 0x80, 0xfc, 0x40, 0xf8,
++ 0x48, 0x48, 0x48, 0x48, 0x70, 0x40, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x7f, 0x1f, 0x0f, 0x01, 0x3f,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x7f, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xfc, 0xf0, 0xe0, 0x00, 0xf8,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x4b, 0x48, 0x78, 0x4f,
++ 0x48, 0x49, 0x79, 0x49, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf0, 0x90, 0x90, 0xfc,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x4a, 0x4c, 0x7f, 0x48,
++ 0x4b, 0x4a, 0x7a, 0x4a, 0x03, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x3f, 0x20,
++ 0x2f, 0x20, 0x3f, 0x24, 0x26, 0x5c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xf8, 0x00,
++ 0xf0, 0x00, 0xfc, 0x90, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x00, 0x3f,
++ 0x20, 0x3e, 0x24, 0x24, 0x38, 0x43, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x88, 0xfc,
++ 0x80, 0x48, 0x50, 0x24, 0xd4, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x0e, 0x78, 0x09, 0x1a,
++ 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0xfc, 0x90, 0x90, 0x10, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x4f, 0x49, 0x49, 0x7b, 0x4b,
++ 0x4b, 0x4d, 0x7d, 0x49, 0x01, 0x01, 0x00, 0x00,
++ 0x04, 0x08, 0x30, 0xe0, 0x20, 0xbc, 0x68, 0x68,
++ 0x28, 0x28, 0x48, 0x48, 0x88, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x02, 0x7e,
++ 0x02, 0x3e, 0x02, 0x0e, 0x74, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x80, 0xfc,
++ 0x80, 0xf8, 0x80, 0xfc, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x0f, 0x3f, 0x21, 0x7f,
++ 0x0f, 0x0f, 0x09, 0x0f, 0x7f, 0x01, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0xe0, 0xfc, 0x08, 0xf8,
++ 0xe0, 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x49, 0x48, 0x4b, 0x7a, 0x4a,
++ 0x4a, 0x4f, 0x78, 0x48, 0x03, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x50, 0x40, 0xf8, 0x48, 0x48,
++ 0x48, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4f, 0x48, 0x4b, 0x7a, 0x4b,
++ 0x4a, 0x4b, 0x78, 0x4f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4f, 0x48, 0x79, 0x49,
++ 0x49, 0x49, 0x79, 0x48, 0x07, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xf8, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x49, 0x49, 0x78, 0x4f,
++ 0x49, 0x4b, 0x7c, 0x49, 0x02, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0x28, 0x48, 0xb0, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4d, 0x49, 0x49, 0x79, 0x49,
++ 0x48, 0x4f, 0x78, 0x48, 0x01, 0x06, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x40, 0xfc, 0x00, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x3e, 0x22, 0x3f, 0x3e, 0x26, 0x39, 0x1f,
++ 0x04, 0x07, 0x04, 0x07, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0xfc, 0x30, 0xd4, 0x0c, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x23, 0x13, 0x11, 0x01, 0x73,
++ 0x15, 0x11, 0x11, 0x19, 0x27, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0xf8, 0x10, 0xfc, 0x20,
++ 0xf8, 0xf8, 0x20, 0xfc, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x4f, 0x49, 0x4f, 0x79, 0x49,
++ 0x4e, 0x4b, 0x78, 0x40, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xbc, 0x10, 0xbc,
++ 0x00, 0xf8, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x48, 0x4b, 0x4a, 0x7b, 0x48,
++ 0x4f, 0x48, 0x79, 0x4f, 0x01, 0x03, 0x00, 0x00,
++ 0x20, 0x20, 0xe0, 0x3c, 0xc8, 0xe8, 0xa8, 0x28,
++ 0xf0, 0x90, 0x98, 0x28, 0x44, 0x84, 0x00, 0x00,
++ 0x08, 0x2a, 0x49, 0x7f, 0x49, 0x5d, 0x6b, 0x49,
++ 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xc8, 0x48, 0x30, 0x30, 0xc8,
++ 0xf4, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x07, 0x79, 0x4b, 0x49, 0x49, 0x7f, 0x49,
++ 0x49, 0x4b, 0x78, 0x4f, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xf8, 0x50, 0x50, 0xfc, 0x50,
++ 0x50, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x07, 0x7a, 0x49, 0x4b, 0x4d, 0x79, 0x49,
++ 0x49, 0x49, 0x79, 0x42, 0x04, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x48, 0xb0, 0x18, 0xf4, 0x10, 0xf0,
++ 0x10, 0xf0, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x49, 0x4b, 0x4a, 0x7d, 0x49,
++ 0x4a, 0x48, 0x7b, 0x48, 0x00, 0x07, 0x00, 0x00,
++ 0x18, 0xe8, 0x48, 0x10, 0xfc, 0x68, 0x98, 0xf4,
++ 0x40, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x01, 0x07, 0x79, 0x4b, 0x4a, 0x4c, 0x7f, 0x48,
++ 0x4f, 0x48, 0x7b, 0x48, 0x07, 0x00, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xfc, 0xe8, 0x00, 0xfc, 0xc8,
++ 0x68, 0xb0, 0x70, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4b, 0x4a, 0x4b, 0x7a, 0x4a,
++ 0x4a, 0x4a, 0x7c, 0x44, 0x08, 0x03, 0x00, 0x00,
++ 0x40, 0xfc, 0x90, 0xfc, 0xf0, 0xfc, 0x20, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4b, 0x4a, 0x4a, 0x7a, 0x4a,
++ 0x4a, 0x4a, 0x7a, 0x44, 0x07, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x00, 0x20, 0x20, 0x20,
++ 0x40, 0x50, 0x88, 0x98, 0xe4, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x49, 0x4f, 0x4b, 0x79, 0x4f,
++ 0x4b, 0x4d, 0x7f, 0x47, 0x04, 0x01, 0x00, 0x00,
++ 0x90, 0xf8, 0x40, 0xf0, 0xfc, 0xa8, 0x24, 0xfc,
++ 0xa8, 0x28, 0xd0, 0xb4, 0xcc, 0x84, 0x00, 0x00,
++ 0x1f, 0x17, 0x1f, 0x01, 0x7f, 0x1e, 0x12, 0x1e,
++ 0x3f, 0x0f, 0x7f, 0x0c, 0x77, 0x1c, 0x00, 0x00,
++ 0xf0, 0xd0, 0xf0, 0x00, 0xfc, 0xf0, 0x90, 0xf0,
++ 0xf8, 0xe0, 0xfc, 0x90, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x20,
++ 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x90, 0x10,
++ 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x11, 0x1f, 0x11, 0x11, 0x1f,
++ 0x11, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x00,
++ 0x20, 0x10, 0xf0, 0x10, 0xd0, 0x10, 0x10, 0xf8,
++ 0x10, 0xa0, 0xc0, 0x44, 0x34, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x12, 0x07,
++ 0x19, 0x71, 0x12, 0x14, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x08, 0x88, 0x48, 0x08, 0xe8, 0x30, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x24,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x20, 0x24, 0x24, 0x24, 0x24, 0xfc, 0x24, 0x20,
++ 0x24, 0x24, 0x24, 0x24, 0xfc, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4f, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0,
++ 0x48, 0x28, 0x30, 0x10, 0xc8, 0x04, 0x00, 0x00,
++ 0x04, 0x3f, 0x04, 0x07, 0x07, 0x04, 0x7f, 0x08,
++ 0x17, 0x64, 0x07, 0x07, 0x08, 0x10, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xc0, 0xc0, 0x40, 0xfc, 0x20,
++ 0xd0, 0x48, 0xc4, 0xc0, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x25, 0x25, 0x3e, 0x27, 0x24,
++ 0x3f, 0x24, 0x27, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x90, 0xfc, 0x90, 0xfc, 0x08, 0xf0, 0xfc, 0xc8,
++ 0x68, 0xb0, 0x70, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x01, 0x39, 0x2f, 0x2a, 0x2a, 0x3f, 0x28, 0x2b,
++ 0x3a, 0x2b, 0x2a, 0x2b, 0x2a, 0x5a, 0x00, 0x00,
++ 0x20, 0x3c, 0xe0, 0xb8, 0x88, 0xf8, 0x20, 0xb8,
++ 0xa0, 0xb8, 0xa0, 0xbc, 0xa4, 0x9c, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x4f, 0x15, 0x7f,
++ 0x14, 0x3e, 0x2a, 0x3e, 0x7f, 0x09, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0xe8, 0x70, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x01, 0x09, 0x09, 0x09,
++ 0x09, 0x09, 0x11, 0x11, 0x21, 0x01, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0xfc, 0x00, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x11, 0x11,
++ 0x11, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0x10, 0x10,
++ 0x60, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x04, 0x08, 0x10, 0x21, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x78, 0x08, 0x08, 0x70, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x09, 0x08, 0x08, 0x7e, 0x08, 0x0c, 0x1a, 0x1a,
++ 0x18, 0x28, 0x29, 0x49, 0x0a, 0x0c, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xe0,
++ 0xa0, 0xa0, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7e, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x49, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x1c, 0x1b, 0x1b,
++ 0x29, 0x29, 0x49, 0x09, 0x09, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08,
++ 0x00, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x08, 0x1d, 0x1a, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0x7c, 0xc0, 0x40, 0x20,
++ 0x20, 0x20, 0x14, 0x14, 0x0c, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7e, 0x12, 0x1a, 0x36, 0x36,
++ 0x32, 0x52, 0x52, 0x13, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7e, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x49, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x78, 0x48, 0x48,
++ 0x88, 0x88, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x03, 0x05, 0x09, 0x11,
++ 0x61, 0x01, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x80, 0x40, 0x20, 0x10,
++ 0x0c, 0x00, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x61, 0x04,
++ 0x08, 0x11, 0x61, 0x02, 0x04, 0x1f, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x40,
++ 0x30, 0x08, 0x04, 0x20, 0x70, 0x88, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x1f, 0x1a, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0x60, 0x20, 0xfc, 0x24, 0x28,
++ 0x30, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x09, 0x0e, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xb0, 0xa8, 0xa4, 0x2c, 0x28,
++ 0x70, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x11, 0x10, 0x10, 0x7d, 0x11, 0x1a, 0x37, 0x34,
++ 0x30, 0x50, 0x51, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0xe0, 0xa0, 0xa0, 0x10, 0x10, 0x08, 0xf4, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x78, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x29, 0x49, 0x0a, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x18, 0x37, 0x34,
++ 0x30, 0x50, 0x51, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x50, 0x90, 0x90, 0x90, 0x90, 0x90, 0xfc, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7e, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x28, 0x28, 0x49, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x90, 0x90, 0x90, 0xfc, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x7f, 0x12, 0x1a, 0x36, 0x36,
++ 0x32, 0x52, 0x52, 0x14, 0x14, 0x19, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xb8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xb8, 0xa8, 0x80, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7e, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x29, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xe8, 0x28, 0x28, 0x28,
++ 0xe8, 0x28, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x1d, 0x1a, 0x1b,
++ 0x2a, 0x28, 0x48, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0xf8,
++ 0x48, 0x48, 0x48, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x19, 0x15, 0x15,
++ 0x1f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x50, 0x50, 0x90,
++ 0xf0, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x28, 0x48, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x00, 0x90, 0x88, 0x04, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x1a, 0x37, 0x36,
++ 0x32, 0x52, 0x53, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x70, 0x90, 0x20, 0x20,
++ 0x50, 0x88, 0x04, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x11, 0x3a, 0x35, 0x35,
++ 0x51, 0x51, 0x11, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0x08, 0xe8, 0x28,
++ 0x28, 0xe8, 0x28, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x29, 0x49, 0x09, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x1e, 0x1a, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x40, 0x40, 0x78, 0x40,
++ 0x40, 0x78, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x29, 0x4a, 0x0a, 0x0c, 0x08, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x20, 0x60,
++ 0x30, 0x28, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x29, 0x49, 0x0f, 0x09, 0x08, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x10, 0x10, 0xd4, 0x0c, 0xec, 0x04, 0x00, 0x00,
++ 0x10, 0x12, 0x12, 0x7e, 0x12, 0x1b, 0x36, 0x34,
++ 0x32, 0x52, 0x52, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0x48, 0x48, 0xf8, 0x48, 0x40,
++ 0x48, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x12, 0x1b, 0x35, 0x35,
++ 0x31, 0x51, 0x51, 0x11, 0x11, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0xe8, 0x28, 0x28,
++ 0xe8, 0x30, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x11, 0x19, 0x37, 0x35,
++ 0x31, 0x51, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x88, 0x88, 0x88, 0x88, 0xfc, 0x08, 0x48, 0x28,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x12, 0x39, 0x35,
++ 0x34, 0x50, 0x50, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x10, 0x10, 0x10, 0x10,
++ 0x90, 0xa0, 0xa0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x29, 0x49, 0x0a, 0x0b, 0x0c, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0x50, 0x50, 0x70, 0x58, 0xf8, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x13, 0x13, 0x3a, 0x37,
++ 0x35, 0x51, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0xa0, 0x10, 0xe8, 0xfc, 0x58, 0xe8, 0xf8,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3e, 0x08, 0x08, 0x7f, 0x08, 0x09, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x1a, 0x36, 0x36,
++ 0x32, 0x52, 0x52, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0x20, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7d, 0x11, 0x1a, 0x34, 0x35,
++ 0x31, 0x52, 0x54, 0x10, 0x10, 0x11, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x98, 0x98, 0xa8, 0xc8, 0x98,
++ 0x98, 0xa8, 0xc8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x22, 0x54, 0x0f, 0x18, 0x61,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x90, 0x90, 0xfc, 0x10, 0x10,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x19, 0x36, 0x37,
++ 0x30, 0x50, 0x51, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x90, 0xf8, 0x04, 0xf8,
++ 0x80, 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x08, 0x1f, 0x1a, 0x1a,
++ 0x29, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x48, 0xf8, 0x50, 0x50, 0xfc, 0x40, 0xfc,
++ 0x80, 0xf8, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x1f, 0x34, 0x34,
++ 0x33, 0x50, 0x50, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x50, 0x88, 0xfc, 0x44, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7c, 0x11, 0x1f, 0x34, 0x35,
++ 0x31, 0x51, 0x51, 0x12, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x90, 0x18, 0xe4, 0x00, 0x50,
++ 0x50, 0x50, 0x50, 0x54, 0x54, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x18, 0x35, 0x35,
++ 0x33, 0x55, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x80, 0xf8, 0x08, 0x10,
++ 0x10, 0xfc, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1b,
++ 0x2a, 0x2b, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x50, 0x88, 0xfc, 0xa4, 0xa0, 0xf8, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x12, 0x7d, 0x11, 0x18, 0x37, 0x34,
++ 0x30, 0x53, 0x50, 0x10, 0x13, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x48, 0x48, 0x50, 0x40, 0xf8, 0x08,
++ 0x08, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x13, 0x1a, 0x36, 0x37,
++ 0x32, 0x52, 0x53, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x34, 0x37,
++ 0x30, 0x50, 0x57, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x0f, 0x0f, 0x08, 0x0f, 0x0f, 0x08, 0x0f,
++ 0x09, 0x01, 0x7f, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xe0, 0xe0, 0x20, 0xe0, 0xf8, 0x00, 0xf0,
++ 0x10, 0x60, 0xfc, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x12, 0x1c, 0x37, 0x34,
++ 0x31, 0x51, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x28, 0x29, 0x4a, 0x08, 0x09, 0x0e, 0x00, 0x00,
++ 0x40, 0x50, 0x98, 0xe4, 0xa0, 0xa4, 0x5c, 0x40,
++ 0xf0, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1a, 0x36, 0x36,
++ 0x32, 0x52, 0x54, 0x14, 0x18, 0x10, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0xfc, 0x00, 0xf8, 0xa8, 0xa8,
++ 0xf8, 0x88, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0d, 0x16, 0x14, 0x37, 0x54,
++ 0x17, 0x14, 0x15, 0x16, 0x14, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0xa0, 0x60, 0xdc, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x10, 0x17, 0x12, 0x7a, 0x17, 0x1a, 0x3a, 0x37,
++ 0x32, 0x52, 0x54, 0x14, 0x18, 0x13, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xb0, 0xb0, 0xa8, 0xa8,
++ 0xa4, 0xa4, 0xa4, 0xb8, 0xa0, 0x20, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x7d, 0x12, 0x1a, 0x37, 0x31,
++ 0x35, 0x55, 0x52, 0x12, 0x15, 0x18, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0xf8, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x17, 0x11, 0x38, 0x35,
++ 0x37, 0x50, 0x53, 0x12, 0x13, 0x10, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0xfc, 0xe8, 0x40, 0xf0,
++ 0xfc, 0x08, 0xfc, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x19, 0x35, 0x35,
++ 0x31, 0x57, 0x51, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x00, 0xfc, 0x10, 0x10, 0x10,
++ 0x10, 0xfc, 0x10, 0x08, 0x04, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7d, 0x11, 0x1a, 0x35, 0x34,
++ 0x30, 0x53, 0x50, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x30, 0xc8, 0x24, 0x24, 0x00, 0xf8, 0x10,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x1c, 0x1a, 0x2a, 0x49, 0x07,
++ 0x04, 0x06, 0x05, 0x09, 0x10, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x70, 0x70, 0xa8, 0x24, 0xc0,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x19, 0x34, 0x34,
++ 0x33, 0x52, 0x52, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x40, 0x80,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x1c, 0x2a, 0x4b, 0x08, 0x7f,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x70, 0xa8, 0x24, 0x20, 0xfc,
++ 0x00, 0xc0, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x1b, 0x36, 0x36,
++ 0x33, 0x52, 0x50, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0xa0, 0xa0, 0xa0, 0xb8, 0x08, 0x08,
++ 0xb8, 0xa8, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x19, 0x35, 0x34,
++ 0x30, 0x50, 0x53, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x80,
++ 0x9c, 0xe0, 0x80, 0x88, 0x88, 0x78, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x17, 0x10, 0x38, 0x37,
++ 0x35, 0x51, 0x53, 0x15, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0xfc, 0x90, 0x90, 0xf0,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7d, 0x11, 0x19, 0x34, 0x37,
++ 0x30, 0x50, 0x57, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x10, 0x60, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x04, 0x3f, 0x04, 0x07, 0x04, 0x07, 0x04, 0x7f,
++ 0x09, 0x1f, 0x63, 0x0d, 0x31, 0x01, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xc0, 0x40, 0xc0, 0x40, 0xfc,
++ 0x20, 0xf0, 0x8c, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7e, 0x14, 0x12, 0x39, 0x37,
++ 0x35, 0x51, 0x52, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0xa8, 0xa8, 0xc8, 0xf8,
++ 0xc8, 0xa8, 0xa8, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x2a, 0x2a,
++ 0x2e, 0x0c, 0x1c, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xb8, 0x30, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1a, 0x37, 0x36,
++ 0x32, 0x52, 0x53, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x48, 0x48, 0xf8, 0x48,
++ 0x68, 0x58, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7f, 0x10, 0x1b, 0x34, 0x35,
++ 0x36, 0x53, 0x50, 0x10, 0x11, 0x12, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0xf8, 0x40, 0xfc, 0xa0, 0x50,
++ 0x4c, 0xf8, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x7c, 0x14, 0x1f, 0x3c, 0x35,
++ 0x35, 0x55, 0x55, 0x15, 0x14, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xa8, 0xc8, 0xf8, 0x48, 0x58,
++ 0x58, 0x58, 0xf8, 0x18, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x14, 0x18, 0x35, 0x36,
++ 0x33, 0x50, 0x50, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0xa0, 0xa4, 0x1c, 0x00,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x29, 0x49, 0x09, 0x09, 0x0f, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xf8, 0x20,
++ 0x24, 0xf8, 0x20, 0x24, 0xe4, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0xfc, 0x20, 0x10, 0xd4, 0x0c,
++ 0xfc, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x28, 0x2b, 0x48, 0x08, 0x08, 0x09, 0x00, 0x00,
++ 0x50, 0x48, 0x7c, 0xc8, 0x30, 0x34, 0xcc, 0x54,
++ 0x7c, 0xc8, 0x30, 0x14, 0x6c, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7f, 0x0a, 0x1c, 0x1a, 0x1b,
++ 0x28, 0x28, 0x48, 0x09, 0x0a, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x00, 0xf8, 0x00, 0xfc,
++ 0x20, 0xb0, 0xa8, 0x24, 0x24, 0x60, 0x00, 0x00,
++ 0x10, 0x12, 0x13, 0x7e, 0x12, 0x1b, 0x34, 0x35,
++ 0x32, 0x50, 0x51, 0x16, 0x10, 0x17, 0x00, 0x00,
++ 0x20, 0x28, 0xc8, 0x68, 0x98, 0xf8, 0xa0, 0x24,
++ 0x9c, 0xf0, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x11, 0x17, 0x39, 0x35,
++ 0x37, 0x53, 0x55, 0x19, 0x11, 0x13, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x24, 0x24, 0xe8, 0x28, 0x18,
++ 0x90, 0x50, 0x68, 0x28, 0x44, 0x84, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7d, 0x10, 0x1f, 0x34, 0x37,
++ 0x30, 0x50, 0x51, 0x10, 0x10, 0x17, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0x40, 0xfc,
++ 0x90, 0x90, 0xe0, 0x30, 0xc8, 0x08, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x13, 0x1d, 0x31, 0x7f,
++ 0x01, 0x1f, 0x13, 0x1d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x90, 0x60, 0x10, 0xfc,
++ 0x00, 0xf0, 0x90, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x13, 0x18, 0x37, 0x36,
++ 0x31, 0x51, 0x50, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0x48,
++ 0x68, 0x70, 0xd0, 0x48, 0x44, 0xc0, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x7f, 0x15, 0x19, 0x3f, 0x35,
++ 0x35, 0x51, 0x52, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x38, 0xe8, 0x28, 0x28, 0xe8, 0x28,
++ 0x28, 0xa8, 0x68, 0x78, 0x28, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x13, 0x1a, 0x37, 0x36,
++ 0x33, 0x50, 0x57, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x40, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x11, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x13, 0x14, 0x39, 0x34,
++ 0x34, 0x50, 0x52, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xf0, 0x20,
++ 0x40, 0xa0, 0xa8, 0x84, 0x94, 0x70, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x12, 0x1a, 0x36, 0x36,
++ 0x33, 0x52, 0x54, 0x14, 0x18, 0x10, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x48, 0x48, 0x48, 0xfc, 0xc8,
++ 0xa8, 0xa8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x11, 0x10, 0x10, 0x7f, 0x10, 0x1a, 0x36, 0x35,
++ 0x31, 0x51, 0x51, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xfc, 0xa0, 0xa8, 0xa8, 0xa8,
++ 0xb0, 0xb0, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x36, 0x36,
++ 0x32, 0x52, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x12, 0x1a, 0x37, 0x36,
++ 0x32, 0x57, 0x50, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8,
++ 0xa8, 0xfc, 0xa0, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x7d, 0x12, 0x17, 0x39, 0x35,
++ 0x37, 0x51, 0x51, 0x11, 0x17, 0x10, 0x00, 0x00,
++ 0x08, 0xc8, 0x28, 0xa8, 0xa8, 0xe8, 0x68, 0x28,
++ 0xe8, 0x28, 0x28, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x13, 0x14, 0x3b, 0x36,
++ 0x36, 0x53, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xf8, 0xa8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x11, 0x19, 0x36, 0x36,
++ 0x33, 0x52, 0x52, 0x12, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x9c, 0xf4, 0x54, 0x64, 0x98,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x09, 0x09, 0x09, 0x7f, 0x09, 0x19, 0x1f, 0x1a,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x20, 0x24, 0xe8, 0x30, 0x20, 0xe4, 0x3c, 0x40,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7f, 0x11, 0x19, 0x37, 0x36,
++ 0x32, 0x52, 0x53, 0x12, 0x10, 0x11, 0x00, 0x00,
++ 0x00, 0x38, 0x28, 0xe8, 0x28, 0x38, 0xa8, 0xa8,
++ 0xb8, 0xa8, 0xc8, 0x48, 0x88, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7d, 0x11, 0x17, 0x39, 0x35,
++ 0x37, 0x53, 0x55, 0x19, 0x11, 0x11, 0x00, 0x00,
++ 0x50, 0x90, 0x10, 0x14, 0x34, 0xf8, 0x58, 0x90,
++ 0x50, 0x50, 0x28, 0x28, 0x44, 0x84, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x10, 0x1f, 0x35, 0x35,
++ 0x31, 0x51, 0x51, 0x11, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x10, 0xf0,
++ 0x10, 0xf0, 0x1c, 0xf0, 0x10, 0x10, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x79, 0x17, 0x11, 0x39, 0x37,
++ 0x35, 0x57, 0x50, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x24, 0xe4, 0x24, 0xc4, 0x18,
++ 0x40, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x13, 0x1a, 0x37, 0x34,
++ 0x37, 0x50, 0x51, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x48,
++ 0xe8, 0xf0, 0x50, 0x48, 0x44, 0xc0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x1f, 0x34, 0x34,
++ 0x31, 0x57, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x50, 0xfc, 0x60, 0x90,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x7d, 0x11, 0x19, 0x35, 0x35,
++ 0x37, 0x52, 0x52, 0x13, 0x13, 0x12, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xf0, 0x10, 0xf0, 0x10,
++ 0xfc, 0xa0, 0xa8, 0x18, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7d, 0x10, 0x1b, 0x36, 0x34,
++ 0x33, 0x52, 0x52, 0x12, 0x12, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0x48, 0x40,
++ 0xf8, 0x48, 0x48, 0x48, 0x70, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x10, 0x1f, 0x34, 0x37,
++ 0x30, 0x53, 0x50, 0x17, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0xf8, 0x10, 0xf0, 0x20, 0xfc, 0xc8, 0x68,
++ 0xb0, 0x70, 0xa8, 0x24, 0x20, 0xc0, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x11, 0x17, 0x39, 0x35,
++ 0x37, 0x53, 0x55, 0x19, 0x11, 0x13, 0x00, 0x00,
++ 0x10, 0xd0, 0x90, 0x7c, 0x10, 0xd0, 0x78, 0xb8,
++ 0x38, 0x54, 0x54, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x17, 0x12, 0x7e, 0x13, 0x1a, 0x36, 0x37,
++ 0x32, 0x52, 0x53, 0x16, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xb0, 0xb0, 0xa8, 0xa8,
++ 0xa4, 0xe4, 0xa4, 0xb8, 0xa0, 0xa0, 0x00, 0x00,
++ 0x11, 0x10, 0x10, 0x7d, 0x13, 0x14, 0x3f, 0x3c,
++ 0x36, 0x55, 0x56, 0x15, 0x14, 0x15, 0x00, 0x00,
++ 0xc0, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xa8, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x13, 0x12, 0x38, 0x37,
++ 0x34, 0x50, 0x50, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xf8, 0x48, 0x40, 0xfc,
++ 0x40, 0x78, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7c, 0x13, 0x1b, 0x36, 0x36,
++ 0x33, 0x50, 0x51, 0x16, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x58, 0xd8, 0xe8,
++ 0xf8, 0xe0, 0x50, 0x4c, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x17, 0x18, 0x35, 0x37,
++ 0x30, 0x53, 0x50, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xfc, 0xa0, 0x10, 0xe8,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x7d, 0x11, 0x19, 0x35, 0x34,
++ 0x37, 0x50, 0x51, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x70, 0x00, 0xf8, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x1b, 0x37, 0x34,
++ 0x33, 0x52, 0x52, 0x12, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x68, 0x98, 0x08, 0xf8, 0x00,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x2a, 0x2c, 0x49, 0x14, 0x22, 0x3f, 0x21,
++ 0x5f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x20, 0xa4, 0xa8, 0x30, 0x48, 0x88, 0xfc, 0x08,
++ 0xf0, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x12, 0x1b, 0x36, 0x37,
++ 0x31, 0x51, 0x51, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8,
++ 0x50, 0x50, 0x68, 0x7c, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x12, 0x12, 0x7f, 0x10, 0x1f, 0x34, 0x35,
++ 0x31, 0x51, 0x51, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7c, 0x11, 0x19, 0x35, 0x34,
++ 0x33, 0x52, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x08, 0xe8, 0xa8, 0xe8, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7f, 0x08, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x0e, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x00, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x1b, 0x36, 0x35,
++ 0x31, 0x51, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x78, 0x48, 0xfc, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x11, 0x10, 0x17, 0x7c, 0x13, 0x18, 0x37, 0x35,
++ 0x31, 0x52, 0x54, 0x18, 0x17, 0x10, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x00,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x7f, 0x04, 0x1f, 0x04, 0x7f,
++ 0x09, 0x1f, 0x63, 0x0d, 0x31, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0x40, 0xf0, 0x40, 0xfc,
++ 0x20, 0xf0, 0x8c, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x22, 0x14, 0x7f, 0x08, 0x2a, 0x2a, 0x3e, 0x09,
++ 0x11, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x18,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x36, 0x37,
++ 0x32, 0x53, 0x54, 0x14, 0x17, 0x14, 0x00, 0x00,
++ 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xfc, 0x94, 0x94, 0xf4, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x34, 0x37,
++ 0x31, 0x56, 0x51, 0x16, 0x10, 0x11, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x98, 0xe8, 0x98, 0xe8, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x3e, 0x32, 0x2b, 0x2f, 0x7a, 0x2a, 0x47,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0xf0, 0x90, 0x94, 0x0c, 0xf8, 0x90, 0x60, 0x9c,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x13, 0x1a, 0x37, 0x36,
++ 0x33, 0x52, 0x52, 0x13, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0x50, 0xdc, 0x50, 0xdc, 0x70,
++ 0xdc, 0x50, 0x90, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x12, 0x1a, 0x37, 0x34,
++ 0x32, 0x52, 0x54, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0x40,
++ 0x48, 0x48, 0xd0, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x12, 0x1b, 0x36, 0x37,
++ 0x32, 0x50, 0x57, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7d, 0x11, 0x19, 0x35, 0x35,
++ 0x30, 0x57, 0x50, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x40, 0xfc, 0x00, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7d, 0x10, 0x1b, 0x36, 0x37,
++ 0x30, 0x50, 0x50, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0x48, 0xf8,
++ 0x40, 0x78, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x15, 0x19, 0x36, 0x34,
++ 0x31, 0x53, 0x55, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x10, 0x48, 0x48, 0xa0,
++ 0x10, 0xf8, 0x14, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x1a, 0x37, 0x34,
++ 0x33, 0x52, 0x53, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0xbc, 0x14, 0x94, 0x54, 0xe4, 0x2c, 0x40,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7d, 0x10, 0x1f, 0x34, 0x37,
++ 0x32, 0x53, 0x52, 0x13, 0x12, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0x00, 0xf8,
++ 0x48, 0xf8, 0x48, 0xfc, 0x44, 0x3c, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x7c, 0x13, 0x12, 0x3b, 0x34,
++ 0x37, 0x50, 0x51, 0x17, 0x11, 0x13, 0x00, 0x00,
++ 0x00, 0x38, 0xe8, 0x28, 0xb0, 0xb0, 0xa8, 0x28,
++ 0xa4, 0xa4, 0xa4, 0x38, 0x20, 0x20, 0x00, 0x00,
++ 0x11, 0x11, 0x6b, 0x2a, 0x13, 0x1a, 0x2e, 0x77,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0xe8, 0xa8, 0x90, 0x98, 0xac, 0xf4,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x12, 0x19, 0x36, 0x35,
++ 0x36, 0x51, 0x50, 0x11, 0x10, 0x13, 0x00, 0x00,
++ 0x00, 0xfc, 0xcc, 0x54, 0xec, 0x54, 0x64, 0xb0,
++ 0x4c, 0xa0, 0x48, 0x90, 0x60, 0x80, 0x00, 0x00,
++ 0x11, 0x17, 0x11, 0x7d, 0x13, 0x1a, 0x37, 0x34,
++ 0x33, 0x50, 0x53, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xe0, 0xf8, 0x48, 0xf8, 0x40,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x17, 0x11, 0x7f, 0x12, 0x1b, 0x35, 0x35,
++ 0x33, 0x53, 0x55, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xb8, 0xa8, 0xb8, 0xfc, 0x20,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x13, 0x1a, 0x37, 0x34,
++ 0x33, 0x50, 0x53, 0x17, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x40,
++ 0x58, 0x40, 0x58, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x12, 0x13, 0x14, 0x7d, 0x17, 0x15, 0x3d, 0x3f,
++ 0x35, 0x55, 0x57, 0x14, 0x14, 0x18, 0x00, 0x00,
++ 0x08, 0xe8, 0x98, 0x18, 0xc8, 0x68, 0x58, 0xd8,
++ 0x4c, 0x78, 0xc8, 0x48, 0x48, 0xc8, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x2a, 0x3e, 0x2a, 0x3e, 0x7f,
++ 0x09, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0xfc, 0x90, 0x90, 0x90, 0x10,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x12, 0x7c, 0x11, 0x19, 0x36, 0x36,
++ 0x36, 0x52, 0x52, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x48, 0x48, 0x48, 0x48, 0xb4, 0xa4, 0x00, 0x20,
++ 0xa0, 0xb8, 0xa0, 0xa0, 0x60, 0x1c, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7d, 0x11, 0x17, 0x39, 0x35,
++ 0x34, 0x51, 0x57, 0x11, 0x11, 0x13, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xfc, 0x10, 0xf0,
++ 0xc8, 0x48, 0x30, 0x10, 0xc8, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x1a, 0x36, 0x37,
++ 0x33, 0x53, 0x53, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x90, 0xf0, 0x00, 0xf8,
++ 0x68, 0x68, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x12, 0x1a, 0x36, 0x36,
++ 0x33, 0x52, 0x55, 0x15, 0x1a, 0x11, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0xa8, 0xe8, 0xa8,
++ 0xe8, 0x90, 0xd0, 0xb4, 0xac, 0xc4, 0x00, 0x00,
++ 0x12, 0x14, 0x12, 0x7f, 0x12, 0x1b, 0x36, 0x37,
++ 0x30, 0x57, 0x50, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x48, 0x90, 0x48, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x17, 0x13, 0x7e, 0x13, 0x1a, 0x37, 0x34,
++ 0x37, 0x50, 0x57, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x50,
++ 0xf8, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x7f, 0x11, 0x3a, 0x34, 0x57, 0x51,
++ 0x13, 0x7f, 0x01, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x90, 0x90, 0x7c, 0x90, 0xb8, 0xb8, 0x54, 0x94,
++ 0x10, 0xfc, 0x00, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x14, 0x12, 0x3a, 0x34,
++ 0x35, 0x56, 0x52, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x98, 0x50, 0xa8, 0xa4, 0xd4,
++ 0xf0, 0x40, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7c, 0x12, 0x1a, 0x34, 0x35,
++ 0x36, 0x53, 0x52, 0x13, 0x10, 0x17, 0x00, 0x00,
++ 0x40, 0xfc, 0x98, 0x50, 0xa8, 0xa4, 0xd4, 0xf0,
++ 0x40, 0xf8, 0x48, 0xf8, 0x58, 0xe4, 0x00, 0x00,
++ 0x11, 0x10, 0x13, 0x7c, 0x11, 0x18, 0x37, 0x34,
++ 0x31, 0x50, 0x57, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0xc0,
++ 0xc8, 0x68, 0xf0, 0x50, 0x4c, 0xc0, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x37, 0x36,
++ 0x33, 0x50, 0x57, 0x11, 0x10, 0x17, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0xf8, 0x48,
++ 0xf8, 0x80, 0xfc, 0x90, 0x70, 0x88, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x7f, 0x12, 0x1a, 0x37, 0x36,
++ 0x33, 0x52, 0x53, 0x16, 0x10, 0x10, 0x00, 0x00,
++ 0x20, 0xe0, 0x20, 0xe0, 0xbc, 0xe8, 0xe8, 0xa8,
++ 0xb0, 0x90, 0xb0, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7f, 0x12, 0x1b, 0x35, 0x35,
++ 0x31, 0x51, 0x51, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xfc, 0x50, 0xf0, 0xf8, 0x08,
++ 0xf8, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x10, 0x19, 0x35, 0x35,
++ 0x30, 0x57, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x00, 0xf0, 0x10, 0xf0,
++ 0xa0, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x19, 0x37, 0x36,
++ 0x33, 0x52, 0x53, 0x12, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc, 0x80,
++ 0xf8, 0xa8, 0xa8, 0x90, 0xe8, 0x84, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x19, 0x35, 0x34,
++ 0x33, 0x52, 0x53, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00,
++ 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0xa8, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x10, 0x1b, 0x34, 0x35,
++ 0x36, 0x53, 0x56, 0x13, 0x16, 0x11, 0x00, 0x00,
++ 0x30, 0xc0, 0xf0, 0x80, 0xf8, 0x88, 0x78, 0x98,
++ 0x60, 0xb8, 0x60, 0xbc, 0x64, 0xdc, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x7d, 0x16, 0x17, 0x3d, 0x3d,
++ 0x35, 0x55, 0x56, 0x14, 0x14, 0x14, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0x78, 0x90, 0xfc, 0x00, 0x78,
++ 0x48, 0x78, 0x48, 0x78, 0x48, 0x58, 0x00, 0x00,
++ 0x11, 0x10, 0x12, 0x7d, 0x11, 0x1b, 0x34, 0x35,
++ 0x31, 0x51, 0x51, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0xd0, 0x50, 0xa8, 0xa8, 0x10, 0xf8, 0x04, 0xf0,
++ 0x10, 0xf0, 0x10, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x7f, 0x13, 0x1a, 0x37, 0x36,
++ 0x33, 0x50, 0x53, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0xf8, 0x10, 0xfc, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x11, 0x1b, 0x35, 0x35,
++ 0x36, 0x57, 0x50, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xb8, 0x10, 0xfc,
++ 0x00, 0xfc, 0xa0, 0xa0, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x7f, 0x11, 0x18, 0x37, 0x34,
++ 0x31, 0x50, 0x57, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0xa0, 0xa8, 0xb0, 0xfc, 0x10, 0xa0, 0xf8, 0x40,
++ 0xf0, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x36, 0x37,
++ 0x32, 0x53, 0x52, 0x15, 0x15, 0x18, 0x00, 0x00,
++ 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xfc, 0xa4, 0x54, 0x04, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7f, 0x12, 0x1b, 0x36, 0x37,
++ 0x32, 0x52, 0x55, 0x15, 0x19, 0x11, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xfc, 0xa8, 0x58, 0x40, 0xfc,
++ 0xf0, 0xf0, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x7f, 0x10, 0x19, 0x35, 0x35,
++ 0x31, 0x51, 0x50, 0x12, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0xf8, 0x10, 0xfc, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x48, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x1e, 0x23, 0x7a, 0x2a, 0x3b,
++ 0x0d, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x90, 0x50, 0x20, 0x50, 0x8c,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x11, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x35, 0x37,
++ 0x31, 0x51, 0x52, 0x12, 0x14, 0x11, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xbc, 0xe8, 0xe8, 0x28, 0xe8,
++ 0x10, 0x90, 0x90, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x13, 0x14, 0x3b, 0x36,
++ 0x37, 0x51, 0x51, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xb8, 0xa8,
++ 0xb8, 0x10, 0x10, 0xa8, 0x64, 0x44, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7d, 0x11, 0x1a, 0x37, 0x34,
++ 0x33, 0x52, 0x52, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x50, 0x50, 0xe8, 0xfc, 0x00,
++ 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3f, 0x20, 0x3f, 0x52, 0x1f,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x20, 0xf8, 0x50, 0xfc, 0x20, 0xfc, 0x20, 0x20,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3e, 0x22, 0x3f, 0x3e, 0x32,
++ 0x5f, 0x01, 0x7f, 0x07, 0x79, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x60, 0xf8, 0x50, 0xfc, 0x20, 0xf8,
++ 0x20, 0x00, 0xfc, 0xc0, 0x3c, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x7f, 0x14, 0x17, 0x3d, 0x3f,
++ 0x34, 0x53, 0x52, 0x12, 0x17, 0x10, 0x00, 0x00,
++ 0x20, 0xe0, 0x20, 0xbc, 0xc0, 0x80, 0x38, 0xc0,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x1b, 0x36, 0x36,
++ 0x32, 0x52, 0x52, 0x13, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0xa8, 0xfc, 0xf8, 0xe8,
++ 0xb8, 0xf8, 0x50, 0x88, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x10, 0x1b, 0x34, 0x35,
++ 0x33, 0x55, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0xcc, 0x74, 0xcc, 0x74, 0x90, 0xfc,
++ 0x20, 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7d, 0x11, 0x12, 0x3b, 0x36,
++ 0x37, 0x50, 0x57, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x48, 0xa8, 0x94, 0x70, 0xf8, 0xa8,
++ 0xfc, 0x00, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7d, 0x11, 0x12, 0x39, 0x37,
++ 0x35, 0x51, 0x51, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0xfc, 0x08, 0xf8, 0x50, 0x60, 0xf8, 0x08,
++ 0xf8, 0xf8, 0x08, 0xf8, 0x88, 0x04, 0x00, 0x00,
++ 0x11, 0x17, 0x11, 0x7f, 0x12, 0x15, 0x3f, 0x34,
++ 0x37, 0x50, 0x53, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xfc, 0x08, 0xf0, 0xfc, 0xc8,
++ 0x68, 0xb0, 0x70, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x11, 0x11, 0x16, 0x7e, 0x11, 0x19, 0x36, 0x37,
++ 0x31, 0x55, 0x55, 0x15, 0x19, 0x11, 0x00, 0x00,
++ 0x10, 0x3c, 0xa8, 0xf8, 0x08, 0xfc, 0xa0, 0xf4,
++ 0x34, 0xd8, 0xb8, 0xd4, 0x10, 0x60, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x36, 0x34,
++ 0x37, 0x55, 0x57, 0x15, 0x17, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00,
++ 0xfc, 0x54, 0xfc, 0x54, 0xfc, 0x44, 0x00, 0x00,
++ 0x12, 0x12, 0x15, 0x7f, 0x12, 0x15, 0x3f, 0x34,
++ 0x37, 0x50, 0x51, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x48, 0x48, 0xf4, 0xac, 0xe8, 0xb4, 0xfc, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x10, 0x14, 0x13, 0x7d, 0x13, 0x13, 0x3d, 0x34,
++ 0x37, 0x50, 0x51, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x84, 0xf4, 0x18, 0xf8, 0x14, 0xf4, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x36, 0x36,
++ 0x32, 0x52, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0xe8, 0xa8,
++ 0xe8, 0x48, 0xe8, 0xa8, 0xe8, 0x18, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x7c, 0x17, 0x15, 0x3e, 0x3c,
++ 0x34, 0x55, 0x55, 0x19, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x90, 0xfc, 0xf0, 0xd8, 0x94,
++ 0x40, 0x78, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x13, 0x12, 0x3b, 0x36,
++ 0x34, 0x57, 0x50, 0x11, 0x10, 0x13, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xb8, 0xa8, 0xb8, 0xa8,
++ 0x44, 0xfc, 0x90, 0xe0, 0x70, 0x88, 0x00, 0x00,
++ 0x11, 0x12, 0x13, 0x7e, 0x13, 0x1a, 0x37, 0x31,
++ 0x33, 0x55, 0x50, 0x13, 0x10, 0x10, 0x00, 0x00,
++ 0x98, 0xe8, 0x98, 0xe8, 0xb8, 0xa8, 0xfc, 0x70,
++ 0xc8, 0xf4, 0x40, 0xf8, 0x40, 0xc0, 0x00, 0x00,
++ 0x04, 0x7f, 0x14, 0x3e, 0x22, 0x3f, 0x3e, 0x22,
++ 0x3f, 0x01, 0x7f, 0x07, 0x79, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x60, 0xf8, 0x50, 0xfc, 0x20, 0xf8,
++ 0x20, 0x00, 0xfc, 0xc0, 0x3c, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x12, 0x17, 0x3b, 0x34,
++ 0x37, 0x55, 0x55, 0x15, 0x17, 0x15, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x48, 0x58, 0x58, 0x40,
++ 0xfc, 0xb4, 0xb4, 0xb4, 0xfc, 0xb4, 0x00, 0x00,
++ 0x13, 0x1f, 0x68, 0x13, 0x2b, 0x7f, 0x3a, 0x57,
++ 0x11, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x90, 0xd8, 0x68, 0x90, 0xa8, 0xfc, 0xb8, 0xd4,
++ 0x10, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x7f, 0x17, 0x15, 0x3f, 0x37,
++ 0x36, 0x53, 0x53, 0x13, 0x11, 0x1e, 0x00, 0x00,
++ 0x20, 0xfc, 0x40, 0xb8, 0xfc, 0x74, 0xfc, 0xf0,
++ 0x10, 0xf0, 0xf0, 0xf4, 0xa4, 0x1c, 0x00, 0x00,
++ 0x12, 0x7f, 0x17, 0x3d, 0x57, 0x3f, 0x2a, 0x7b,
++ 0x36, 0x2b, 0x3f, 0x26, 0x38, 0x1f, 0x00, 0x00,
++ 0x10, 0xfc, 0xd0, 0x78, 0xd4, 0xfc, 0x88, 0x90,
++ 0xe8, 0x90, 0xe4, 0x08, 0xb0, 0xc0, 0x00, 0x00,
++ 0x14, 0x1f, 0x14, 0x7f, 0x1b, 0x1f, 0x35, 0x3f,
++ 0x3d, 0x57, 0x57, 0x15, 0x17, 0x14, 0x00, 0x00,
++ 0x80, 0xf8, 0xa8, 0xe8, 0x78, 0xe8, 0x38, 0xe8,
++ 0x28, 0xb8, 0xb0, 0x54, 0xd4, 0x8c, 0x00, 0x00,
++ 0x08, 0x08, 0x0c, 0x12, 0x7d, 0x20, 0x3f, 0x28,
++ 0x48, 0x7f, 0x08, 0x14, 0x23, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x02, 0x34, 0x1c, 0x6a, 0x08, 0x7f, 0x11, 0x28,
++ 0x7e, 0x2a, 0x2a, 0x2e, 0x29, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x11, 0x09, 0x41, 0x21, 0x0a, 0x14, 0x20, 0x21,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0x50, 0x60, 0x90, 0x0c,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x0c, 0x12, 0x22, 0x7f, 0x02,
++ 0x3a, 0x2a, 0x2a, 0x3a, 0x02, 0x07, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x0c, 0x12, 0x1e, 0x20, 0x7e, 0x23, 0x3e,
++ 0x22, 0x3e, 0x3e, 0x20, 0x3e, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x11, 0x1f,
++ 0x29, 0x6d, 0x2b, 0x33, 0x3d, 0x27, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x03, 0x3c, 0x08, 0x7f, 0x08, 0x18, 0x6b, 0x49,
++ 0x49, 0x6b, 0x49, 0x49, 0x7f, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x12, 0x34, 0x7f, 0x14, 0x3f, 0x15, 0x7f, 0x15,
++ 0x3f, 0x16, 0x35, 0x35, 0x54, 0x15, 0x00, 0x00,
++ 0x40, 0x40, 0xc0, 0x40, 0x7c, 0xa4, 0xa8, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x40, 0x5e, 0x52, 0x5e, 0x40, 0x7f,
++ 0x6d, 0x6d, 0x7f, 0x40, 0x7f, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x7c, 0xa4, 0xa8, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x0c, 0x12, 0x3f, 0x5e, 0x12, 0x1f, 0x7f,
++ 0x1b, 0x2d, 0x5b, 0x2d, 0x49, 0x1b, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x07, 0x04, 0x3f, 0x2b, 0x3d, 0x27, 0x2a,
++ 0x3b, 0x3b, 0x3b, 0x2a, 0x4f, 0x39, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xc0, 0x7c, 0xa4, 0xa8, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x0a, 0x11, 0x3f, 0x40, 0x3f, 0x2d,
++ 0x3f, 0x12, 0x1a, 0x17, 0x24, 0x49, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x18, 0x29, 0x2e, 0x28, 0x3f, 0x22, 0x2a, 0x3b,
++ 0x2a, 0x2a, 0x7f, 0x0a, 0x11, 0x61, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa0, 0xfc, 0xe4, 0xa8, 0xb0,
++ 0xa0, 0xa0, 0xd0, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x77, 0x55, 0x77, 0x3f, 0x24,
++ 0x7f, 0x24, 0x3f, 0x24, 0x3f, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x3e, 0x22, 0x3f, 0x20, 0x3e, 0x22, 0x3f,
++ 0x09, 0x2e, 0x28, 0x28, 0x2e, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xfc, 0x08, 0xf8, 0x00, 0xfc,
++ 0x28, 0xf8, 0xa8, 0xa8, 0xb8, 0x20, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x02, 0x03, 0x04, 0x04, 0x0a,
++ 0x11, 0x21, 0x00, 0x01, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x20,
++ 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x10, 0x1e, 0x13, 0x32, 0x2b,
++ 0x4c, 0x04, 0x08, 0x10, 0x20, 0x47, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x88, 0x08, 0x30, 0xf8,
++ 0x88, 0x90, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x10, 0x1e, 0x22, 0x33, 0x4a,
++ 0x0c, 0x04, 0x08, 0x11, 0x22, 0x44, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x10, 0x1f, 0x22, 0x32, 0x4b,
++ 0x0c, 0x04, 0x09, 0x10, 0x20, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0x28, 0x44, 0x80,
++ 0x10, 0x60, 0x88, 0x10, 0x60, 0x80, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x11, 0x1d, 0x25, 0x25, 0x57,
++ 0x18, 0x08, 0x10, 0x11, 0x22, 0x44, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xfc,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x7e, 0x13, 0x11, 0x1d, 0x26, 0x27, 0x54,
++ 0x18, 0x0f, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x48, 0x24, 0x04, 0xf8, 0x10,
++ 0x60, 0xfc, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x13, 0x1c, 0x24, 0x25, 0x54,
++ 0x08, 0x0b, 0x10, 0x10, 0x20, 0x43, 0x00, 0x00,
++ 0x50, 0x48, 0x7c, 0xc8, 0x30, 0x74, 0x8c, 0x54,
++ 0x7c, 0xc8, 0x50, 0x34, 0xdc, 0x04, 0x00, 0x00,
++ 0x00, 0x7e, 0x13, 0x11, 0x1c, 0x24, 0x27, 0x54,
++ 0x19, 0x09, 0x11, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0x90, 0xa0, 0xfc, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7d, 0x11, 0x11, 0x1c, 0x25, 0x25, 0x55,
++ 0x19, 0x09, 0x11, 0x11, 0x21, 0x46, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x01, 0x7f, 0x11, 0x13, 0x1d, 0x25, 0x25, 0x57,
++ 0x19, 0x09, 0x12, 0x14, 0x21, 0x42, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xf8, 0xa8, 0xa8, 0x48, 0xb0, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x11, 0x1c, 0x27, 0x26, 0x57,
++ 0x19, 0x09, 0x11, 0x10, 0x27, 0x40, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x00, 0xfc, 0x08, 0xf8,
++ 0xf0, 0x10, 0xf0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x13, 0x1c, 0x27, 0x26, 0x57,
++ 0x1a, 0x0b, 0x10, 0x17, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0x00, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x15, 0x1d, 0x26, 0x25, 0x57,
++ 0x19, 0x09, 0x11, 0x11, 0x21, 0x46, 0x00, 0x00,
++ 0x40, 0xfc, 0x08, 0xf8, 0x50, 0x60, 0xf8, 0x08,
++ 0xf8, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x02, 0x7e, 0x13, 0x15, 0x38, 0x2f, 0x2a, 0x6e,
++ 0x5a, 0x1e, 0x12, 0x16, 0x23, 0x4e, 0x00, 0x00,
++ 0xa0, 0xb0, 0xe8, 0x68, 0x20, 0xfc, 0xa0, 0xe8,
++ 0xa8, 0xd0, 0xd4, 0x9c, 0xec, 0x44, 0x00, 0x00,
++ 0x01, 0x7d, 0x17, 0x11, 0x3f, 0x2a, 0x2e, 0x6a,
++ 0x5e, 0x1a, 0x16, 0x13, 0x2e, 0x40, 0x00, 0x00,
++ 0x20, 0x30, 0xe8, 0x28, 0xfc, 0xa0, 0xe8, 0xa8,
++ 0xe8, 0xd0, 0x94, 0xec, 0x4c, 0x84, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x10, 0x60, 0x3f,
++ 0x08, 0x04, 0x02, 0x03, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x44, 0x44, 0x3c, 0x00, 0xe0,
++ 0x20, 0x40, 0x80, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x06, 0x38, 0x20, 0x3e, 0x22, 0x3e, 0x23, 0x3f,
++ 0x20, 0x3e, 0x22, 0x22, 0x22, 0x4f, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x94, 0x94, 0x8c, 0x00, 0xf8,
++ 0x88, 0x50, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x00, 0x3f, 0x22, 0x5d,
++ 0x00, 0x1c, 0x14, 0x16, 0x24, 0x4b, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x50, 0x54, 0x54, 0x8c, 0xf8,
++ 0x88, 0x50, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x40, 0x5e, 0x52, 0x5e, 0x41, 0x7f,
++ 0x6d, 0x6d, 0x7f, 0x40, 0x7f, 0x41, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x50, 0x54, 0x94, 0x0c, 0xf8,
++ 0x48, 0x50, 0x30, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x11, 0x11, 0x7f, 0x11,
++ 0x11, 0x11, 0x11, 0x3f, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10,
++ 0x10, 0x10, 0x10, 0xfc, 0x20, 0xc0, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x20, 0x7e, 0x33, 0x2a, 0x7f,
++ 0x32, 0x2a, 0x3f, 0x22, 0x05, 0x0e, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x30, 0x48, 0xfc, 0x04, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xac, 0x2c, 0x04, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x23, 0x41, 0x0e, 0x70, 0x1f,
++ 0x03, 0x3e, 0x03, 0x7e, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x10, 0x18, 0x64, 0x84, 0x00, 0xe0, 0x00,
++ 0xf0, 0x00, 0xfc, 0x00, 0x04, 0xfc, 0x00, 0x00,
++ 0x04, 0x08, 0x73, 0x10, 0x1e, 0x71, 0x11, 0x1c,
++ 0x71, 0x16, 0x10, 0x10, 0x10, 0x0f, 0x00, 0x00,
++ 0x50, 0x48, 0xf8, 0x40, 0x48, 0x68, 0x70, 0xd0,
++ 0x48, 0x44, 0x40, 0xc4, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f, 0x3f, 0x20,
++ 0x4f, 0x03, 0x1e, 0x03, 0x3e, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0xfc, 0xc8,
++ 0x00, 0xf0, 0x00, 0xf8, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x0f, 0x03, 0x1e, 0x03, 0x3e, 0x01, 0x06,
++ 0x38, 0x0e, 0x38, 0x0f, 0x79, 0x0f, 0x00, 0x00,
++ 0xc0, 0x00, 0xe0, 0x00, 0xf0, 0x08, 0xf8, 0x18,
++ 0xe0, 0x38, 0xe0, 0x3c, 0xe4, 0x3c, 0x00, 0x00,
++ 0x04, 0x09, 0x71, 0x12, 0x1c, 0x71, 0x12, 0x1d,
++ 0x71, 0x12, 0x10, 0x11, 0x12, 0x0f, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0x60, 0x90, 0x50, 0x48, 0x48,
++ 0x50, 0x60, 0x90, 0x14, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x26, 0x36, 0x37, 0x24,
++ 0x27, 0x21, 0x2f, 0x21, 0x3f, 0x40, 0x00, 0x00,
++ 0x80, 0xfc, 0x20, 0xfc, 0xb0, 0xb4, 0x2c, 0x60,
++ 0x80, 0xf0, 0x00, 0xfc, 0x04, 0xfc, 0x00, 0x00,
++ 0x04, 0x7f, 0x3f, 0x2e, 0x2a, 0x2e, 0x3f, 0x1f,
++ 0x11, 0x1f, 0x1f, 0x11, 0x1f, 0x70, 0x00, 0x00,
++ 0x08, 0xd0, 0xe0, 0xa0, 0xb8, 0xe0, 0xa0, 0x20,
++ 0x3c, 0xe0, 0x20, 0x24, 0xa4, 0x1c, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x12, 0x7f, 0x42, 0x42, 0x43,
++ 0x42, 0x46, 0x3e, 0x02, 0x03, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x48, 0x40, 0xfc,
++ 0x40, 0x20, 0x24, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x10, 0x3f, 0x40, 0x3f, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xe0, 0x00, 0xf0, 0x10,
++ 0x10, 0x10, 0x14, 0x0c, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x10, 0x3f, 0x40, 0x3f, 0x0f,
++ 0x10, 0x7f, 0x04, 0x08, 0x10, 0x63, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xf0, 0x10,
++ 0x90, 0xf0, 0x94, 0x8c, 0x8c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x10, 0x3f, 0x40, 0x3f, 0x1f,
++ 0x12, 0x1f, 0x15, 0x18, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xe0, 0x00, 0xf0, 0xd0,
++ 0x50, 0xd0, 0x54, 0xcc, 0xcc, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x10, 0x3f, 0x40, 0x3f, 0x12,
++ 0x0a, 0x3f, 0x07, 0x0a, 0x32, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xe0, 0x00, 0xf0, 0x50,
++ 0x90, 0xd0, 0x14, 0x8c, 0x4c, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x7d,
++ 0x05, 0x09, 0x09, 0x11, 0x61, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x00, 0x88, 0x88,
++ 0x50, 0x60, 0x20, 0x10, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x42, 0x22, 0x22, 0x02, 0x0a,
++ 0x0a, 0x12, 0x12, 0x23, 0x22, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x20, 0x23, 0x00, 0x08,
++ 0x08, 0x10, 0x10, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x40, 0x20, 0x20, 0x03, 0x08,
++ 0x08, 0x10, 0x10, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x22, 0x23, 0x02, 0x0a,
++ 0x0a, 0x12, 0x12, 0x24, 0x24, 0x28, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x40, 0x21, 0x21, 0x01, 0x09,
++ 0x0b, 0x12, 0x10, 0x20, 0x2f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf0, 0x10, 0x10, 0x10,
++ 0xf0, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x42, 0x22, 0x22, 0x02, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x2f, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x78, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x20, 0x20, 0x02, 0x0a,
++ 0x0a, 0x14, 0x14, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x20, 0x20, 0x80, 0x80, 0x80, 0x88, 0x84,
++ 0x84, 0x80, 0x80, 0x88, 0x88, 0x78, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x20, 0x20, 0x03, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x48,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x08, 0x09, 0x41, 0x22, 0x22, 0x07, 0x08,
++ 0x08, 0x10, 0x11, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0xe0, 0x20, 0x20, 0x10, 0x10, 0x08, 0xf4, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x22, 0x22, 0x03, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x23, 0x22, 0x02, 0x0a,
++ 0x0a, 0x12, 0x12, 0x24, 0x27, 0x2c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x41, 0x22, 0x24, 0x00, 0x0b,
++ 0x09, 0x10, 0x10, 0x20, 0x21, 0x2e, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x70, 0x00, 0xf8,
++ 0x08, 0x90, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x27, 0x20, 0x00, 0x08,
++ 0x09, 0x11, 0x12, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0xe0, 0xe0,
++ 0x50, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x12, 0x0a, 0x0a, 0x42, 0x27, 0x22, 0x02, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x50, 0x50, 0x50, 0x50, 0xfc, 0x50, 0x50, 0x50,
++ 0x50, 0x70, 0x50, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x43, 0x22, 0x22, 0x02, 0x0a,
++ 0x0f, 0x10, 0x10, 0x20, 0x23, 0x2c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0xfc, 0x40, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x0f, 0x09, 0x41, 0x27, 0x24, 0x04, 0x0f,
++ 0x0d, 0x11, 0x11, 0x21, 0x21, 0x26, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x30, 0x48, 0x48, 0x5c, 0xe4, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x20, 0x20, 0x00, 0x0b,
++ 0x0a, 0x12, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0f, 0x0d, 0x45, 0x25, 0x25, 0x05, 0x0d,
++ 0x0e, 0x16, 0x14, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0x48, 0x58,
++ 0x58, 0x38, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0f, 0x0c, 0x44, 0x24, 0x24, 0x04, 0x0c,
++ 0x0d, 0x15, 0x16, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x88, 0x88, 0x88, 0x88, 0xc8,
++ 0x48, 0x28, 0x18, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x22, 0x23, 0x02, 0x0a,
++ 0x0a, 0x12, 0x12, 0x24, 0x24, 0x28, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x20, 0xe0,
++ 0x30, 0x28, 0x24, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x41, 0x21, 0x21, 0x01, 0x09,
++ 0x09, 0x11, 0x11, 0x21, 0x2f, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x25, 0x21, 0x01, 0x09,
++ 0x09, 0x11, 0x11, 0x21, 0x21, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x00, 0x00, 0x08, 0x30,
++ 0xc0, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x20, 0x20, 0x00, 0x0b,
++ 0x0a, 0x12, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x40, 0x40, 0x40, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x22, 0x22, 0x03, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0xf8, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x40, 0x20, 0x27, 0x00, 0x08,
++ 0x08, 0x10, 0x12, 0x23, 0x24, 0x28, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0xf8, 0x08, 0x10,
++ 0x10, 0x20, 0x40, 0x80, 0xc0, 0x3c, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x23, 0x22, 0x02, 0x0b,
++ 0x0a, 0x12, 0x12, 0x22, 0x23, 0x2e, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x48, 0x40, 0xfc,
++ 0x20, 0x20, 0x10, 0x14, 0xcc, 0x04, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x41, 0x21, 0x22, 0x00, 0x0f,
++ 0x08, 0x10, 0x10, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x50, 0x48, 0x48, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x22, 0x23, 0x02, 0x0a,
++ 0x0b, 0x12, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x40, 0x23, 0x20, 0x03, 0x0a,
++ 0x0b, 0x12, 0x10, 0x20, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x40,
++ 0xfc, 0x44, 0x58, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x12, 0x11, 0x21, 0x48, 0x0c, 0x12, 0x12, 0x30,
++ 0x51, 0x11, 0x12, 0x12, 0x14, 0x14, 0x00, 0x00,
++ 0x00, 0x78, 0x00, 0x00, 0x00, 0xfc, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x43, 0x22, 0x24, 0x0e, 0x15,
++ 0x14, 0x25, 0x26, 0x47, 0x44, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x48, 0x68, 0xa8,
++ 0xa8, 0x68, 0x28, 0xe8, 0x28, 0x30, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x43, 0x22, 0x22, 0x02, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x21, 0x23, 0x04, 0x08,
++ 0x0b, 0x12, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x0a, 0x41, 0x21, 0x20, 0x07, 0x08,
++ 0x08, 0x10, 0x11, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0x48, 0x48, 0x50, 0x40, 0xfc, 0xa0,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x41, 0x22, 0x24, 0x07, 0x08,
++ 0x08, 0x11, 0x11, 0x22, 0x24, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0xe0,
++ 0xe0, 0x50, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x41, 0x22, 0x23, 0x06, 0x0b,
++ 0x0a, 0x13, 0x12, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0xc8, 0x48, 0xc8,
++ 0x48, 0xc8, 0x48, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x41, 0x2f, 0x22, 0x02, 0x0a,
++ 0x0a, 0x17, 0x11, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x00, 0x00, 0x38, 0x28, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x78, 0x28, 0x00, 0x00, 0x00,
++ 0x10, 0x0f, 0x09, 0x41, 0x27, 0x25, 0x05, 0x0d,
++ 0x0d, 0x16, 0x16, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x58,
++ 0x58, 0x38, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0f, 0x0a, 0x42, 0x23, 0x24, 0x04, 0x0e,
++ 0x09, 0x11, 0x11, 0x22, 0x24, 0x28, 0x00, 0x00,
++ 0x08, 0xc8, 0x28, 0x28, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0x28, 0x28, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x27, 0x20, 0x00, 0x0f,
++ 0x08, 0x10, 0x11, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xf8, 0x00, 0x00, 0xfc,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x23, 0x20, 0x03, 0x0a,
++ 0x0b, 0x12, 0x13, 0x22, 0x22, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x00, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x24, 0x20, 0x07, 0x08,
++ 0x09, 0x11, 0x12, 0x24, 0x28, 0x23, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x80, 0x80, 0xfc, 0x80,
++ 0x20, 0x20, 0x50, 0x48, 0xfc, 0x84, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x21, 0x21, 0x02, 0x0c,
++ 0x09, 0x13, 0x14, 0x20, 0x21, 0x2e, 0x00, 0x00,
++ 0x40, 0x50, 0x98, 0xe4, 0x20, 0x24, 0x9c, 0xf0,
++ 0x10, 0x20, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x21, 0x21, 0x01, 0x0a,
++ 0x0c, 0x10, 0x10, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x50, 0x50, 0x58, 0xe4,
++ 0x44, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x12, 0x0a, 0x0a, 0x4f, 0x22, 0x22, 0x02, 0x0a,
++ 0x0b, 0x1e, 0x12, 0x22, 0x22, 0x27, 0x00, 0x00,
++ 0x08, 0x10, 0x60, 0xc0, 0x40, 0x7c, 0x50, 0xd0,
++ 0x50, 0x50, 0x50, 0x90, 0x90, 0x10, 0x00, 0x00,
++ 0x10, 0x0f, 0x09, 0x41, 0x22, 0x22, 0x07, 0x09,
++ 0x0d, 0x15, 0x12, 0x23, 0x24, 0x28, 0x00, 0x00,
++ 0x04, 0x08, 0x70, 0x10, 0x10, 0x50, 0x5c, 0x50,
++ 0x50, 0x50, 0x50, 0x3c, 0x80, 0x7c, 0x00, 0x00,
++ 0x12, 0x09, 0x09, 0x47, 0x20, 0x23, 0x02, 0x0b,
++ 0x0a, 0x10, 0x11, 0x22, 0x2c, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xf8, 0x48, 0xf8, 0x40, 0xfc,
++ 0xc4, 0xc4, 0x44, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x20, 0x17, 0x10, 0x43, 0x2f, 0x23, 0x00, 0x13,
++ 0x1f, 0x20, 0x27, 0x45, 0x47, 0x40, 0x00, 0x00,
++ 0x80, 0xf8, 0x80, 0xf0, 0xfc, 0xe8, 0x80, 0xf0,
++ 0xfc, 0x10, 0xfc, 0x50, 0x30, 0x30, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x02, 0x08,
++ 0x0b, 0x10, 0x10, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x48, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x41, 0x21, 0x22, 0x07, 0x0a,
++ 0x0b, 0x12, 0x13, 0x22, 0x20, 0x20, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0x50, 0x48, 0xfc, 0x48,
++ 0xf8, 0x48, 0xf8, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x0c, 0x0a, 0x43, 0x27, 0x21, 0x01, 0x0f,
++ 0x09, 0x11, 0x12, 0x24, 0x28, 0x20, 0x00, 0x00,
++ 0x08, 0x88, 0xa8, 0x28, 0xe8, 0x28, 0x28, 0xe8,
++ 0x28, 0xa8, 0x68, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x12, 0x0a, 0x0b, 0x42, 0x22, 0x22, 0x03, 0x0a,
++ 0x0a, 0x12, 0x13, 0x26, 0x24, 0x28, 0x00, 0x00,
++ 0x08, 0x48, 0x58, 0xd8, 0xe8, 0x48, 0xf8, 0x48,
++ 0xe8, 0xd8, 0x58, 0x48, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0x1f, 0x11, 0x41, 0x29, 0x2e, 0x0a, 0x1a,
++ 0x19, 0x2e, 0x28, 0x49, 0x4f, 0x48, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xa8, 0xa8, 0xc8, 0xc8,
++ 0xa8, 0xa8, 0x98, 0x88, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x47, 0x21, 0x21, 0x01, 0x09,
++ 0x09, 0x17, 0x10, 0x20, 0x21, 0x26, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x10, 0xf0, 0x10, 0xf0,
++ 0x10, 0xfc, 0x00, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x41, 0x23, 0x24, 0x00, 0x0b,
++ 0x08, 0x12, 0x11, 0x21, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x44, 0x40, 0xf8,
++ 0x40, 0x48, 0x48, 0x50, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x23, 0x22, 0x02, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xe8,
++ 0xa8, 0xa8, 0xe8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x09, 0x08, 0x43, 0x27, 0x20, 0x01, 0x09,
++ 0x0b, 0x15, 0x19, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x10, 0xe0, 0xd0, 0x48, 0xfc, 0x80, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x41, 0x21, 0x21, 0x02, 0x0c,
++ 0x08, 0x17, 0x10, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x10, 0x18, 0xa4, 0x44,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x22, 0x12, 0x12, 0x4f, 0x22, 0x23, 0x06, 0x16,
++ 0x16, 0x2a, 0x2a, 0x42, 0x43, 0x42, 0x00, 0x00,
++ 0x70, 0x10, 0x50, 0xd0, 0x48, 0x48, 0xa4, 0xa0,
++ 0x20, 0x30, 0x48, 0x58, 0xe4, 0x04, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x42, 0x24, 0x23, 0x02, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x22, 0x22, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xf8, 0x08, 0xe8,
++ 0xa8, 0xa8, 0xa8, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x24, 0x23, 0x00, 0x0f,
++ 0x08, 0x13, 0x10, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x44, 0x04, 0xf8, 0x48, 0xfc,
++ 0x48, 0xf8, 0x48, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x43, 0x20, 0x27, 0x00, 0x0b,
++ 0x08, 0x17, 0x10, 0x21, 0x20, 0x27, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0x40, 0xfc, 0x90, 0xe0, 0x70, 0x88, 0x00, 0x00,
++ 0x22, 0x12, 0x12, 0x4f, 0x22, 0x23, 0x06, 0x16,
++ 0x16, 0x2a, 0x2a, 0x52, 0x43, 0x42, 0x00, 0x00,
++ 0x08, 0x10, 0x60, 0xc0, 0x40, 0x7c, 0xd0, 0xd0,
++ 0x50, 0x50, 0x90, 0x90, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x20, 0x20, 0x03, 0x08,
++ 0x08, 0x17, 0x10, 0x20, 0x20, 0x27, 0x00, 0x00,
++ 0x90, 0x88, 0xfc, 0x90, 0x50, 0x64, 0x9c, 0xa4,
++ 0xfc, 0x90, 0x50, 0x24, 0xdc, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x25, 0x20, 0x00, 0x0f,
++ 0x08, 0x11, 0x11, 0x22, 0x24, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xf0, 0x00, 0x00, 0xfc,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x12, 0x0a, 0x0a, 0x42, 0x2f, 0x22, 0x02, 0x0b,
++ 0x0a, 0x12, 0x14, 0x24, 0x28, 0x33, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x50, 0xd0, 0x88, 0x24, 0x90,
++ 0x90, 0xc0, 0xa0, 0x90, 0x88, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x40, 0x27, 0x21, 0x01, 0x0a,
++ 0x0c, 0x13, 0x10, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0x20, 0x24, 0x5c,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x41, 0x23, 0x24, 0x03, 0x0a,
++ 0x0a, 0x13, 0x12, 0x22, 0x22, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xf8, 0xa8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x43, 0x22, 0x22, 0x07, 0x0a,
++ 0x0a, 0x13, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0f, 0x0c, 0x47, 0x24, 0x27, 0x04, 0x0b,
++ 0x0a, 0x13, 0x12, 0x23, 0x22, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x0f, 0x09, 0x47, 0x25, 0x25, 0x06, 0x0f,
++ 0x08, 0x17, 0x10, 0x20, 0x2f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0x58, 0x38, 0xf8,
++ 0x80, 0xf8, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x09, 0x0f, 0x41, 0x21, 0x27, 0x00, 0x0b,
++ 0x0a, 0x12, 0x13, 0x22, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0x10, 0xfc, 0x08, 0xc8,
++ 0x48, 0x48, 0xc8, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x20, 0x11, 0x12, 0x4f, 0x25, 0x25, 0x05, 0x16,
++ 0x14, 0x2f, 0x20, 0x41, 0x46, 0x58, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0xf8, 0x48, 0x58, 0x58, 0x38,
++ 0x88, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x25, 0x20, 0x07, 0x08,
++ 0x09, 0x11, 0x12, 0x24, 0x28, 0x23, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x44, 0xf4, 0x80, 0xfc, 0x80,
++ 0xf8, 0x48, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x23, 0x22, 0x03, 0x08,
++ 0x0f, 0x10, 0x13, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00,
++ 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x47, 0x20, 0x23, 0x02, 0x0b,
++ 0x0a, 0x13, 0x10, 0x27, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x40, 0x21, 0x26, 0x01, 0x09,
++ 0x09, 0x11, 0x11, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x20, 0x11, 0x1e, 0x42, 0x22, 0x2f, 0x02, 0x17,
++ 0x16, 0x2a, 0x2a, 0x52, 0x42, 0x43, 0x00, 0x00,
++ 0xa0, 0x20, 0x20, 0x24, 0x64, 0xe8, 0x70, 0xa0,
++ 0xb0, 0xb0, 0x50, 0x48, 0x88, 0x04, 0x00, 0x00,
++ 0x11, 0x09, 0x0f, 0x41, 0x21, 0x21, 0x01, 0x08,
++ 0x0f, 0x10, 0x11, 0x22, 0x24, 0x20, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x70, 0x00, 0xf8, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x23, 0x22, 0x03, 0x08,
++ 0x0f, 0x10, 0x11, 0x22, 0x2c, 0x20, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x44,
++ 0xe4, 0xe8, 0x50, 0x48, 0x44, 0xc0, 0x00, 0x00,
++ 0x10, 0x0a, 0x0a, 0x42, 0x23, 0x20, 0x07, 0x08,
++ 0x0b, 0x12, 0x12, 0x22, 0x22, 0x22, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x80,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x41, 0x21, 0x21, 0x00, 0x0b,
++ 0x0a, 0x17, 0x10, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x08, 0xf8, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x09, 0x0f, 0x41, 0x21, 0x27, 0x01, 0x09,
++ 0x09, 0x17, 0x11, 0x22, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0xfc, 0x10, 0x10, 0x7c, 0x90, 0x10, 0x7c,
++ 0x90, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x20, 0x1f, 0x19, 0x49, 0x2f, 0x29, 0x09, 0x1f,
++ 0x19, 0x29, 0x2f, 0x49, 0x40, 0x43, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x70, 0x68, 0x68, 0xa4, 0x2c,
++ 0x28, 0x70, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x41, 0x27, 0x25, 0x05, 0x0d,
++ 0x0d, 0x15, 0x15, 0x25, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x00, 0xf8, 0x28, 0x28, 0xe8,
++ 0x28, 0xe8, 0x28, 0x28, 0xf8, 0x08, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x42, 0x2f, 0x28, 0x17, 0x11,
++ 0x12, 0x23, 0x2e, 0x42, 0x42, 0x47, 0x00, 0x00,
++ 0x20, 0x20, 0xe0, 0x20, 0xf8, 0xa8, 0x28, 0x28,
++ 0x28, 0xa8, 0x48, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x22, 0x1f, 0x12, 0x43, 0x20, 0x2f, 0x08, 0x1e,
++ 0x1a, 0x2a, 0x2d, 0x48, 0x48, 0x48, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xe0, 0x80, 0xf8, 0x88, 0xe8,
++ 0xa8, 0xa8, 0xd8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x11, 0x08, 0x08, 0x41, 0x23, 0x2c, 0x07, 0x0c,
++ 0x0e, 0x15, 0x16, 0x25, 0x24, 0x25, 0x00, 0x00,
++ 0xc0, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xa8, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x12, 0x0a, 0x0a, 0x42, 0x2f, 0x22, 0x02, 0x0b,
++ 0x0a, 0x12, 0x12, 0x24, 0x24, 0x2b, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x3c, 0xc0, 0xf8, 0x08, 0x90,
++ 0x90, 0xfc, 0x90, 0x90, 0x90, 0x30, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x42, 0x2f, 0x2a, 0x0a, 0x1f,
++ 0x12, 0x27, 0x26, 0x4a, 0x52, 0x42, 0x00, 0x00,
++ 0x08, 0x28, 0xe8, 0x28, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0x28, 0x28, 0xa8, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x24, 0x21, 0x00, 0x08,
++ 0x0b, 0x10, 0x17, 0x20, 0x21, 0x26, 0x00, 0x00,
++ 0x18, 0xf0, 0x88, 0x44, 0x54, 0x90, 0xa0, 0x50,
++ 0xf8, 0x48, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x40, 0x27, 0x20, 0x01, 0x0f,
++ 0x08, 0x13, 0x12, 0x22, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0xa0, 0x10, 0xf8,
++ 0x08, 0xf8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x02, 0x09,
++ 0x09, 0x17, 0x10, 0x20, 0x21, 0x26, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x48, 0x48,
++ 0x50, 0xfc, 0xa0, 0xa0, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x0f, 0x0c, 0x47, 0x24, 0x25, 0x06, 0x0d,
++ 0x0e, 0x15, 0x16, 0x25, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x88, 0xd8, 0xd8, 0x68,
++ 0xe8, 0x58, 0x58, 0x88, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x24, 0x23, 0x01, 0x08,
++ 0x0f, 0x10, 0x13, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x40, 0xf8, 0x10, 0xa0,
++ 0xfc, 0x40, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x27, 0x05, 0x09,
++ 0x0f, 0x10, 0x17, 0x21, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x00, 0xfc, 0x28, 0xd0,
++ 0x1c, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x28, 0x14, 0x15, 0x4f, 0x22, 0x2a, 0x0a, 0x1a,
++ 0x1f, 0x2a, 0x22, 0x42, 0x44, 0x49, 0x00, 0x00,
++ 0x80, 0xb8, 0x28, 0xe8, 0x28, 0xb8, 0xa8, 0xa8,
++ 0xb8, 0xa8, 0x48, 0x48, 0x88, 0x18, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x41, 0x22, 0x25, 0x01, 0x09,
++ 0x09, 0x12, 0x13, 0x25, 0x29, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xf0, 0x08, 0xf4, 0x10, 0xf0,
++ 0xf0, 0x00, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x0a, 0x0a, 0x43, 0x22, 0x23, 0x02, 0x08,
++ 0x0b, 0x11, 0x10, 0x20, 0x21, 0x2e, 0x00, 0x00,
++ 0x40, 0x58, 0x48, 0x58, 0x48, 0x58, 0x48, 0x40,
++ 0xf8, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x24, 0x20, 0x03, 0x0a,
++ 0x0a, 0x13, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x24, 0x24, 0x80, 0x38, 0x08,
++ 0x08, 0xb8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x27, 0x24, 0x3f, 0x25, 0x26,
++ 0x3d, 0x24, 0x24, 0x27, 0x24, 0x4c, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0xf8, 0xa0, 0xfc, 0x50, 0x48,
++ 0x54, 0xd0, 0xe0, 0x50, 0x48, 0xc0, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x44, 0x25, 0x24, 0x07, 0x14,
++ 0x15, 0x24, 0x25, 0x49, 0x49, 0x51, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48,
++ 0xf8, 0x40, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x43, 0x22, 0x23, 0x02, 0x0b,
++ 0x0a, 0x10, 0x17, 0x21, 0x20, 0x20, 0x00, 0x00,
++ 0x50, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x41, 0x20, 0x27, 0x04, 0x08,
++ 0x0f, 0x10, 0x10, 0x20, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0x48, 0x40,
++ 0xfc, 0x40, 0x78, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x45, 0x21, 0x21, 0x01, 0x09,
++ 0x08, 0x17, 0x10, 0x20, 0x21, 0x26, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x40, 0xfc, 0x00, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x23, 0x3c, 0x20, 0x22, 0x1e, 0x08, 0x0a,
++ 0x7a, 0x1c, 0x2c, 0x2a, 0x49, 0x1b, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x49, 0x29, 0x2f, 0x09, 0x1f,
++ 0x18, 0x2f, 0x28, 0x4f, 0x48, 0x49, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0x50, 0x50, 0x50, 0xfc, 0x20,
++ 0x30, 0x30, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x43, 0x22, 0x23, 0x01, 0x13,
++ 0x16, 0x1b, 0x23, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xb8, 0xa8, 0xb8, 0x20, 0xfc,
++ 0x40, 0xf8, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x20, 0x1f, 0x10, 0x47, 0x24, 0x27, 0x05, 0x15,
++ 0x15, 0x27, 0x26, 0x4b, 0x4a, 0x51, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0xf0, 0x10,
++ 0xf0, 0xf8, 0x48, 0xf8, 0x04, 0xfc, 0x00, 0x00,
++ 0x20, 0x17, 0x10, 0x4f, 0x20, 0x27, 0x00, 0x17,
++ 0x10, 0x27, 0x25, 0x45, 0x47, 0x45, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x50, 0x90, 0x10, 0x10,
++ 0xfc, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x0f, 0x09, 0x42, 0x2f, 0x22, 0x02, 0x0b,
++ 0x08, 0x11, 0x1f, 0x21, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0xfc, 0x10, 0x08, 0xf4, 0x10, 0x10, 0xf0,
++ 0xc8, 0x28, 0x30, 0x10, 0xc8, 0x04, 0x00, 0x00,
++ 0x24, 0x24, 0x3f, 0x04, 0x7f, 0x15, 0x24, 0x45,
++ 0x01, 0x7f, 0x05, 0x19, 0x61, 0x03, 0x00, 0x00,
++ 0x40, 0xf8, 0x50, 0xf0, 0x90, 0xfc, 0x90, 0x30,
++ 0x08, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x41, 0x21, 0x22, 0x07, 0x08,
++ 0x0b, 0x1d, 0x10, 0x21, 0x20, 0x23, 0x00, 0x00,
++ 0x40, 0x90, 0xf8, 0x10, 0x98, 0x64, 0xfc, 0xa0,
++ 0x50, 0xac, 0x48, 0x90, 0x60, 0x80, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x42, 0x2f, 0x2a, 0x0a, 0x1f,
++ 0x13, 0x26, 0x26, 0x4a, 0x52, 0x43, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0x20, 0xfc, 0xe4, 0xa8, 0xb0,
++ 0x20, 0xa0, 0xd0, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x25, 0x15, 0x1f, 0x45, 0x25, 0x28, 0x0f, 0x18,
++ 0x17, 0x24, 0x24, 0x44, 0x44, 0x40, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0xd4, 0x0c, 0xfc, 0x88,
++ 0xf0, 0x90, 0x90, 0x90, 0xe0, 0x80, 0x00, 0x00,
++ 0x20, 0x1e, 0x12, 0x42, 0x2e, 0x28, 0x08, 0x1f,
++ 0x1a, 0x22, 0x22, 0x42, 0x42, 0x4d, 0x00, 0x00,
++ 0x00, 0xf8, 0x80, 0xf0, 0x80, 0xf0, 0x80, 0xfc,
++ 0xa8, 0xa8, 0x90, 0xb0, 0xc8, 0x84, 0x00, 0x00,
++ 0x22, 0x12, 0x12, 0x45, 0x25, 0x2d, 0x15, 0x15,
++ 0x15, 0x25, 0x25, 0x45, 0x45, 0x44, 0x00, 0x00,
++ 0x20, 0x20, 0x7c, 0x48, 0xb0, 0x30, 0xec, 0x20,
++ 0xfc, 0x70, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x11, 0x0f, 0x08, 0x43, 0x20, 0x27, 0x03, 0x09,
++ 0x08, 0x17, 0x10, 0x21, 0x26, 0x20, 0x00, 0x00,
++ 0x10, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0xf0, 0xc0,
++ 0x68, 0xe8, 0xd0, 0x48, 0x44, 0xc0, 0x00, 0x00,
++ 0x20, 0x1f, 0x14, 0x47, 0x24, 0x25, 0x07, 0x10,
++ 0x1f, 0x28, 0x29, 0x4f, 0x48, 0x48, 0x00, 0x00,
++ 0x80, 0xfc, 0x50, 0x50, 0xd0, 0x30, 0xf0, 0x80,
++ 0xf8, 0xc8, 0x28, 0xd8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x27, 0x24, 0x06, 0x0d,
++ 0x0e, 0x15, 0x15, 0x26, 0x27, 0x24, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0xf8, 0xa8, 0x68, 0x68,
++ 0xd8, 0xc8, 0xa8, 0x58, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x47, 0x21, 0x27, 0x01, 0x09,
++ 0x0e, 0x17, 0x10, 0x20, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xbc, 0x10, 0xbc,
++ 0x00, 0xfc, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x20, 0x17, 0x14, 0x47, 0x25, 0x24, 0x07, 0x14,
++ 0x17, 0x24, 0x29, 0x4f, 0x51, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0xf0, 0x60, 0xfc, 0x40,
++ 0xf8, 0x88, 0x90, 0x7c, 0x10, 0x30, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x42, 0x2a, 0x2a, 0x0a, 0x13,
++ 0x12, 0x23, 0x22, 0x43, 0x44, 0x48, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xd8, 0xdc, 0x94, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x20, 0x12, 0x12, 0x42, 0x22, 0x2f, 0x02, 0x1a,
++ 0x1b, 0x2a, 0x2a, 0x4b, 0x4e, 0x58, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x40, 0x40, 0xfc, 0x10, 0x50,
++ 0xdc, 0x50, 0x50, 0x50, 0xfc, 0x00, 0x00, 0x00,
++ 0x20, 0x1f, 0x12, 0x4a, 0x26, 0x24, 0x0b, 0x12,
++ 0x1b, 0x2a, 0x2a, 0x4b, 0x4e, 0x58, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xe8, 0xa8, 0xc8, 0xb0, 0x10,
++ 0xdc, 0x50, 0x50, 0x50, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x47, 0x20, 0x23, 0x07, 0x09,
++ 0x09, 0x16, 0x17, 0x21, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xfc, 0x10, 0xf0, 0xb8, 0x28,
++ 0xb8, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x22, 0x1f, 0x1a, 0x4a, 0x2f, 0x26, 0x07, 0x1a,
++ 0x13, 0x22, 0x23, 0x42, 0x43, 0x42, 0x00, 0x00,
++ 0x10, 0xfc, 0x50, 0x50, 0xfc, 0xb0, 0x34, 0x4c,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x26, 0x16, 0x1f, 0x4a, 0x3f, 0x25, 0x05, 0x15,
++ 0x1b, 0x22, 0x23, 0x42, 0x43, 0x42, 0x00, 0x00,
++ 0x30, 0x30, 0xfc, 0x50, 0xfc, 0x30, 0xb4, 0x4c,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x43, 0x22, 0x23, 0x01, 0x09,
++ 0x09, 0x11, 0x11, 0x27, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x22, 0x1a, 0x1a, 0x4a, 0x2f, 0x20, 0x0f, 0x10,
++ 0x1f, 0x22, 0x2f, 0x42, 0x43, 0x5c, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa0, 0xbc, 0x48, 0xe8, 0xa8,
++ 0xb0, 0x10, 0x90, 0x28, 0xc8, 0x84, 0x00, 0x00,
++ 0x10, 0x0b, 0x09, 0x47, 0x23, 0x22, 0x03, 0x0a,
++ 0x0b, 0x10, 0x13, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0xf8, 0x10, 0xfc, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x41, 0x2f, 0x20, 0x01, 0x0e,
++ 0x0b, 0x12, 0x13, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x18, 0xe8, 0x48, 0x50, 0xfc, 0xe0, 0x50, 0x4c,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x09, 0x0f, 0x41, 0x27, 0x20, 0x07, 0x0c,
++ 0x0f, 0x14, 0x12, 0x22, 0x23, 0x2c, 0x00, 0x00,
++ 0x10, 0x10, 0xe0, 0x28, 0xc8, 0x10, 0xd0, 0x64,
++ 0xc4, 0x88, 0x88, 0xd0, 0x20, 0x40, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x43, 0x22, 0x22, 0x03, 0x08,
++ 0x0b, 0x12, 0x13, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xb8, 0xa8, 0xa8, 0xb8, 0xa0,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x20, 0x17, 0x14, 0x47, 0x24, 0x27, 0x04, 0x17,
++ 0x14, 0x27, 0x25, 0x4a, 0x4c, 0x50, 0x00, 0x00,
++ 0x40, 0xfc, 0xd8, 0xfc, 0xa0, 0xf8, 0xa8, 0xfc,
++ 0xa8, 0xf8, 0xb0, 0xa8, 0xa4, 0xa0, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x44, 0x23, 0x23, 0x0d, 0x09,
++ 0x09, 0x11, 0x12, 0x22, 0x24, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0x10, 0xf8, 0x14, 0xf0,
++ 0x10, 0xf0, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x23, 0x22, 0x03, 0x0a,
++ 0x0b, 0x10, 0x17, 0x20, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0xe8, 0x58, 0xe8, 0xf8, 0xe8,
++ 0x58, 0x40, 0xfc, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x42, 0x2f, 0x29, 0x0f, 0x19,
++ 0x1f, 0x22, 0x3f, 0x42, 0x42, 0x42, 0x00, 0x00,
++ 0x20, 0x20, 0xb0, 0x50, 0x48, 0xfc, 0x20, 0x20,
++ 0xfc, 0x20, 0xa0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x41, 0x20, 0x27, 0x04, 0x0f,
++ 0x08, 0x17, 0x10, 0x21, 0x26, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xbc, 0xa4, 0xbc,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x20, 0x23, 0x00, 0x0f,
++ 0x09, 0x17, 0x10, 0x23, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x40, 0xf8, 0x40, 0xfc,
++ 0x10, 0xfc, 0x40, 0xf8, 0x40, 0x40, 0x00, 0x00,
++ 0x20, 0x13, 0x1c, 0x47, 0x24, 0x27, 0x04, 0x17,
++ 0x14, 0x24, 0x25, 0x49, 0x49, 0x51, 0x00, 0x00,
++ 0x80, 0xf0, 0x40, 0xfc, 0xa4, 0x1c, 0xf0, 0xfc,
++ 0xf0, 0xf0, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x09, 0x07, 0x41, 0x23, 0x22, 0x0b,
++ 0x0a, 0x13, 0x12, 0x23, 0x21, 0x2e, 0x00, 0x00,
++ 0x40, 0xf8, 0x50, 0xfc, 0x10, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x43, 0x22, 0x27, 0x03, 0x08,
++ 0x0b, 0x1c, 0x13, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x48, 0x58, 0x58, 0xa0,
++ 0xf8, 0x04, 0xf8, 0x48, 0x70, 0x40, 0x00, 0x00,
++ 0x20, 0x1f, 0x11, 0x4f, 0x25, 0x25, 0x07, 0x1a,
++ 0x13, 0x22, 0x23, 0x42, 0x44, 0x48, 0x00, 0x00,
++ 0x80, 0xfc, 0x48, 0xb0, 0xa8, 0xa8, 0xb8, 0x14,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x01, 0x0e,
++ 0x0b, 0x12, 0x17, 0x23, 0x24, 0x28, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x10, 0xe8,
++ 0x30, 0xa8, 0xfc, 0x48, 0xa4, 0xa4, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x25, 0x21, 0x02, 0x09,
++ 0x0f, 0x11, 0x11, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0xe8, 0x10, 0x48, 0xa8, 0xf0,
++ 0x1c, 0xf0, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x20, 0x1f, 0x12, 0x4c, 0x2f, 0x29, 0x0e, 0x1b,
++ 0x1c, 0x29, 0x2e, 0x4b, 0x4c, 0x48, 0x00, 0x00,
++ 0x00, 0xfc, 0xb0, 0x88, 0xf8, 0x98, 0xe8, 0xa8,
++ 0xd8, 0x98, 0xe8, 0xa8, 0xd8, 0x98, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x45, 0x22, 0x24, 0x03, 0x0a,
++ 0x0f, 0x10, 0x13, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x48, 0xa8, 0x94, 0x74, 0xf8, 0xa8,
++ 0xfc, 0x00, 0xf8, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x45, 0x22, 0x24, 0x01, 0x0f,
++ 0x09, 0x11, 0x11, 0x21, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0xfc, 0x08, 0xf0, 0x58, 0xe4, 0xf8, 0x08,
++ 0xf8, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x22, 0x13, 0x12, 0x47, 0x24, 0x2c, 0x05, 0x14,
++ 0x14, 0x24, 0x25, 0x44, 0x44, 0x45, 0x00, 0x00,
++ 0x50, 0x54, 0xd8, 0xfc, 0x88, 0x50, 0xfc, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0x50, 0x8c, 0x00, 0x00,
++ 0x11, 0x0f, 0x09, 0x43, 0x22, 0x24, 0x07, 0x08,
++ 0x0f, 0x10, 0x13, 0x20, 0x23, 0x20, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xfc, 0xe8, 0x00, 0xfc, 0xc8,
++ 0x68, 0xf0, 0x70, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x47, 0x22, 0x23, 0x02, 0x0b,
++ 0x08, 0x13, 0x1e, 0x29, 0x25, 0x24, 0x00, 0x00,
++ 0x40, 0xfc, 0x88, 0x38, 0x08, 0xb8, 0x08, 0xf8,
++ 0x80, 0xfc, 0xa4, 0x54, 0x04, 0x18, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x47, 0x21, 0x27, 0x00, 0x0b,
++ 0x0f, 0x12, 0x13, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x40, 0xfc, 0x28, 0xc8, 0x50, 0xfc, 0xe0, 0x58,
++ 0xfc, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x20, 0x1f, 0x19, 0x49, 0x2f, 0x29, 0x09, 0x1f,
++ 0x19, 0x29, 0x2f, 0x46, 0x49, 0x51, 0x00, 0x00,
++ 0x50, 0x48, 0x5c, 0xe8, 0x28, 0x34, 0xcc, 0x54,
++ 0x5c, 0xe8, 0x28, 0x14, 0x6c, 0x84, 0x00, 0x00,
++ 0x20, 0x17, 0x14, 0x47, 0x24, 0x27, 0x0f, 0x12,
++ 0x1f, 0x26, 0x39, 0x42, 0x4c, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xf8, 0x20,
++ 0xfc, 0xb0, 0xcc, 0xb0, 0x88, 0x80, 0x00, 0x00,
++ 0x11, 0x0f, 0x08, 0x41, 0x27, 0x21, 0x02, 0x0d,
++ 0x09, 0x11, 0x11, 0x21, 0x21, 0x26, 0x00, 0x00,
++ 0x10, 0xfc, 0x40, 0xf0, 0xfc, 0x10, 0xe8, 0xf4,
++ 0x10, 0xf0, 0xf8, 0x50, 0xb0, 0x0c, 0x00, 0x00,
++ 0x22, 0x1f, 0x1d, 0x4b, 0x3e, 0x22, 0x05, 0x1f,
++ 0x12, 0x2f, 0x2a, 0x47, 0x43, 0x4e, 0x00, 0x00,
++ 0x08, 0xc8, 0x68, 0x68, 0xe8, 0x28, 0x28, 0xe8,
++ 0x28, 0xe8, 0xa8, 0x08, 0x88, 0x18, 0x00, 0x00,
++ 0x20, 0x10, 0x17, 0x44, 0x27, 0x24, 0x05, 0x15,
++ 0x15, 0x25, 0x25, 0x4a, 0x4a, 0x54, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0xe8, 0x88, 0x78, 0xf0, 0x50,
++ 0xf0, 0x50, 0xf8, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x20, 0x1f, 0x12, 0x41, 0x27, 0x24, 0x07, 0x1e,
++ 0x1b, 0x2f, 0x2b, 0x4e, 0x4a, 0x57, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf8, 0xf0, 0x10, 0xf0, 0xb8,
++ 0xe8, 0x68, 0x78, 0xbc, 0xec, 0x44, 0x00, 0x00,
++ 0x24, 0x14, 0x1f, 0x44, 0x2e, 0x2b, 0x0f, 0x1a,
++ 0x1e, 0x25, 0x3e, 0x45, 0x44, 0x44, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0xf8, 0x48,
++ 0xd8, 0x68, 0xd8, 0x68, 0x48, 0xd8, 0x00, 0x00,
++ 0x22, 0x12, 0x1b, 0x44, 0x24, 0x2b, 0x02, 0x16,
++ 0x17, 0x2a, 0x2a, 0x42, 0x42, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x50, 0xfc, 0x50, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x20, 0x17, 0x15, 0x44, 0x27, 0x25, 0x06, 0x14,
++ 0x15, 0x25, 0x25, 0x49, 0x4f, 0x50, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x90, 0xfc, 0xf8, 0xd4, 0x40,
++ 0x40, 0x78, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x20, 0x10, 0x17, 0x44, 0x27, 0x25, 0x05, 0x15,
++ 0x15, 0x25, 0x27, 0x4a, 0x57, 0x40, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0xc8, 0x78, 0xf0, 0x50, 0xf0,
++ 0x50, 0xf0, 0xf8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x22, 0x1f, 0x12, 0x47, 0x20, 0x3f, 0x07, 0x1a,
++ 0x1e, 0x2f, 0x28, 0x4e, 0x4a, 0x52, 0x00, 0x00,
++ 0x20, 0xfc, 0xa0, 0xf0, 0x90, 0xfc, 0xf0, 0xa8,
++ 0xb8, 0xf8, 0x88, 0xb8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x20, 0x1f, 0x12, 0x43, 0x2f, 0x29, 0x09, 0x1f,
++ 0x1b, 0x23, 0x23, 0x43, 0x43, 0x4d, 0x00, 0x00,
++ 0x00, 0xfc, 0xa8, 0x24, 0xfc, 0x6c, 0xfc, 0x6c,
++ 0xb4, 0x6c, 0xfc, 0x6c, 0xb4, 0x2c, 0x00, 0x00,
++ 0x20, 0x1f, 0x19, 0x4f, 0x29, 0x2f, 0x0f, 0x1b,
++ 0x1b, 0x2a, 0x2b, 0x49, 0x4e, 0x48, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x78, 0x48, 0xf8, 0xf8, 0xe8,
++ 0xe8, 0xa8, 0xe8, 0xc8, 0xb8, 0x98, 0x00, 0x00,
++ 0x22, 0x12, 0x13, 0x44, 0x27, 0x28, 0x0f, 0x1b,
++ 0x1b, 0x2f, 0x24, 0x44, 0x4b, 0x52, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xa0, 0xfc, 0x48, 0xe8, 0x68,
++ 0x68, 0xd0, 0x90, 0xa8, 0x68, 0x44, 0x00, 0x00,
++ 0x20, 0x1f, 0x10, 0x4f, 0x2d, 0x2f, 0x09, 0x1f,
++ 0x19, 0x2f, 0x2b, 0x4a, 0x53, 0x6c, 0x00, 0x00,
++ 0x00, 0x7c, 0x00, 0x78, 0xe8, 0xfc, 0x40, 0xf8,
++ 0x48, 0xf8, 0xc8, 0x70, 0xc4, 0x3c, 0x00, 0x00,
++ 0x24, 0x17, 0x1a, 0x44, 0x2e, 0x25, 0x0f, 0x1d,
++ 0x17, 0x20, 0x27, 0x47, 0x48, 0x40, 0x00, 0x00,
++ 0xc8, 0xec, 0x14, 0xc8, 0xdc, 0xe8, 0x3c, 0xec,
++ 0xf0, 0x10, 0xf0, 0xf8, 0x08, 0xf0, 0x00, 0x00,
++ 0x01, 0x03, 0x0d, 0x34, 0x02, 0x07, 0x79, 0x09,
++ 0x09, 0x11, 0x22, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0xa0, 0xc0, 0x00, 0x08, 0x08,
++ 0x10, 0x20, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0a, 0x2a, 0x2c, 0x28, 0x49,
++ 0x08, 0x0c, 0x12, 0x12, 0x21, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xb0, 0xa8, 0xa8, 0xa4, 0x2c,
++ 0x68, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x16, 0x36, 0x3a, 0x32, 0x52,
++ 0x12, 0x1a, 0x16, 0x26, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xe8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xe8, 0xa8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x16, 0x36, 0x3b, 0x32, 0x52,
++ 0x12, 0x1a, 0x16, 0x26, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xb8, 0x38, 0x18, 0xe8,
++ 0xa8, 0xa8, 0xe8, 0xa8, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x0b, 0x2b, 0x2d, 0x29, 0x49,
++ 0x09, 0x0d, 0x13, 0x13, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08,
++ 0xf8, 0x08, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x0a, 0x2d, 0x29, 0x2a, 0x48,
++ 0x08, 0x0c, 0x12, 0x12, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x40, 0x40, 0x78, 0x40,
++ 0x40, 0x78, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x0a, 0x2b, 0x2d, 0x29, 0x49,
++ 0x09, 0x0d, 0x13, 0x13, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x68,
++ 0x98, 0x98, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x0a, 0x2d, 0x29, 0x2b, 0x49,
++ 0x09, 0x0d, 0x13, 0x13, 0x21, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0xe8, 0x28, 0x28,
++ 0xe8, 0x30, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x0b, 0x2b, 0x2d, 0x29, 0x49,
++ 0x09, 0x0d, 0x13, 0x13, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x48, 0x48,
++ 0x68, 0x98, 0x98, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x10, 0x17, 0x30, 0x50, 0x11, 0x12,
++ 0x14, 0x10, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0xe0, 0xe0, 0x50, 0x48,
++ 0x44, 0x40, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x00, 0x0f, 0x00, 0x01, 0x3f, 0x05, 0x09, 0x11,
++ 0x63, 0x1f, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x88, 0x48, 0x50, 0x20, 0x10,
++ 0x0c, 0xf0, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0a, 0x2a, 0x2d, 0x28, 0x48,
++ 0x0b, 0x0c, 0x12, 0x12, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0xd0, 0x50, 0x20, 0xd8,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x09, 0x09, 0x7f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x1a, 0x15, 0x24, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0xf0,
++ 0x00, 0xf8, 0x48, 0x28, 0x08, 0x70, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x0b, 0x2e, 0x28, 0x2f, 0x4b,
++ 0x08, 0x0d, 0x12, 0x13, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x90, 0x60, 0xf0, 0x4c, 0xf8,
++ 0x40, 0xf0, 0x40, 0xf8, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x0b, 0x2b, 0x2d, 0x29, 0x49,
++ 0x09, 0x0d, 0x13, 0x13, 0x21, 0x47, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xf8, 0x20,
++ 0x24, 0xf8, 0x20, 0x24, 0xe4, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x0b, 0x2a, 0x2c, 0x2b, 0x48,
++ 0x09, 0x0d, 0x13, 0x13, 0x21, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0x90, 0xa0, 0xfc, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x16, 0x37, 0x3a, 0x32, 0x53,
++ 0x12, 0x1f, 0x14, 0x24, 0x21, 0x46, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0x40, 0xf8, 0xa8, 0xb8, 0x18,
++ 0x48, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x2b, 0x29, 0x29, 0x2b, 0x22,
++ 0x3f, 0x20, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x78, 0x48, 0x40, 0x44,
++ 0x44, 0x3c, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x00, 0x2f, 0x2a, 0x2f, 0x29, 0x29, 0x2f, 0x2a,
++ 0x2f, 0x48, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x78, 0x48, 0x40, 0x44,
++ 0xc4, 0x3c, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x27, 0x3d, 0x25, 0x25,
++ 0x3d, 0x24, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x08, 0xe8, 0x28, 0x28, 0xe8,
++ 0x28, 0x08, 0x30, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x08, 0x2a, 0x2c, 0x55, 0x22, 0x3f, 0x20, 0x5f,
++ 0x02, 0x02, 0x1f, 0x02, 0x02, 0x02, 0x00, 0x00,
++ 0x20, 0xa8, 0xb0, 0x50, 0x88, 0xfc, 0x08, 0xf0,
++ 0x10, 0x10, 0xd4, 0x0c, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x0b, 0x2b, 0x2d, 0x29, 0x48,
++ 0x0b, 0x08, 0x15, 0x14, 0x23, 0x40, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00,
++ 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x0b, 0x2a, 0x2d, 0x28, 0x4b,
++ 0x08, 0x0c, 0x12, 0x11, 0x22, 0x45, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x24, 0x04, 0xf8, 0x40, 0xfc,
++ 0x40, 0xf8, 0xc8, 0x30, 0x70, 0x8c, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x0b, 0x2b, 0x2d, 0x28, 0x4b,
++ 0x09, 0x0d, 0x16, 0x14, 0x21, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0xa8, 0x48, 0xb0, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x1f, 0x15, 0x13, 0x1f,
++ 0x01, 0x3f, 0x01, 0x7f, 0x24, 0x42, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0xf0, 0x50, 0x90, 0xf0,
++ 0x00, 0xf8, 0x00, 0xfc, 0x88, 0x44, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x17, 0x37, 0x3b, 0x32, 0x53,
++ 0x10, 0x1b, 0x14, 0x27, 0x22, 0x44, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xfc, 0xf8, 0x58, 0xe8, 0xf8,
++ 0x40, 0xf8, 0x40, 0xfc, 0xa8, 0x54, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x0b, 0x2b, 0x2d, 0x29, 0x49,
++ 0x09, 0x0c, 0x12, 0x12, 0x24, 0x40, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xa8, 0x84, 0x94, 0x70, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x0b, 0x2a, 0x2d, 0x29, 0x49,
++ 0x09, 0x0d, 0x13, 0x13, 0x21, 0x46, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x00, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x3f, 0x2e, 0x3f, 0x36, 0x55,
++ 0x2d, 0x09, 0x09, 0x12, 0x0c, 0x70, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0xfc, 0x48, 0xa8, 0x28, 0x08,
++ 0x18, 0x10, 0x10, 0xa0, 0x60, 0x1c, 0x00, 0x00,
++ 0x08, 0x3e, 0x08, 0x7f, 0x08, 0x7f, 0x08, 0x0e,
++ 0x12, 0x23, 0x4c, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x90, 0x50, 0x50, 0x20,
++ 0x50, 0x88, 0x04, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x17, 0x36, 0x3b, 0x32, 0x52,
++ 0x12, 0x1a, 0x16, 0x26, 0x23, 0x42, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0xe8, 0xa8,
++ 0xe8, 0xa8, 0xe8, 0xa8, 0x68, 0x18, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x0f, 0x08, 0x0f, 0x04,
++ 0x7f, 0x0f, 0x08, 0x0f, 0x24, 0x42, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0xe0, 0x20, 0xe0, 0x40,
++ 0xfc, 0xe0, 0x20, 0xe0, 0x88, 0x44, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x14, 0x36, 0x3f, 0x30, 0x53,
++ 0x12, 0x1b, 0x16, 0x27, 0x22, 0x40, 0x00, 0x00,
++ 0x20, 0x30, 0xe8, 0xa8, 0xa0, 0xfc, 0x20, 0xe8,
++ 0x58, 0xd0, 0x54, 0xec, 0x4c, 0x84, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x17, 0x35, 0x3b, 0x31, 0x51,
++ 0x16, 0x1b, 0x14, 0x24, 0x21, 0x46, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xb8, 0x10, 0xfc,
++ 0x00, 0xfc, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x14, 0x37, 0x3a, 0x33, 0x50,
++ 0x13, 0x18, 0x15, 0x27, 0x21, 0x43, 0x00, 0x00,
++ 0x20, 0x20, 0xe0, 0x20, 0xfc, 0xc8, 0xa8, 0x28,
++ 0xb0, 0x90, 0xd0, 0x28, 0x48, 0x84, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x15, 0x37, 0x38, 0x31, 0x52,
++ 0x17, 0x1a, 0x17, 0x26, 0x23, 0x42, 0x00, 0x00,
++ 0x18, 0xe8, 0x48, 0x50, 0xfc, 0xe0, 0x50, 0x48,
++ 0xfc, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x16, 0x35, 0x3b, 0x35, 0x51,
++ 0x11, 0x19, 0x15, 0x25, 0x22, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0x10, 0xf8, 0x14, 0xf0,
++ 0x10, 0xf0, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x16, 0x37, 0x3a, 0x33, 0x52,
++ 0x12, 0x1b, 0x17, 0x24, 0x21, 0x46, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0xe8, 0x58, 0xe8, 0xf8, 0xe8,
++ 0xd8, 0x48, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x11, 0x16, 0x15, 0x14, 0x3f, 0x3c, 0x34, 0x57,
++ 0x11, 0x1b, 0x15, 0x25, 0x21, 0x46, 0x00, 0x00,
++ 0x00, 0x38, 0xa8, 0xa8, 0xac, 0xac, 0xc4, 0xf8,
++ 0x28, 0xa8, 0x10, 0x10, 0xa8, 0x44, 0x00, 0x00,
++ 0x12, 0x11, 0x11, 0x14, 0x36, 0x39, 0x31, 0x57,
++ 0x11, 0x19, 0x15, 0x25, 0x22, 0x44, 0x00, 0x00,
++ 0x30, 0x50, 0x48, 0x84, 0xfc, 0x24, 0xf4, 0x38,
++ 0xd8, 0x34, 0xd4, 0x10, 0xe0, 0x7c, 0x00, 0x00,
++ 0x12, 0x11, 0x11, 0x15, 0x36, 0x39, 0x31, 0x57,
++ 0x11, 0x19, 0x15, 0x25, 0x22, 0x44, 0x00, 0x00,
++ 0x20, 0xf8, 0x20, 0xfc, 0x48, 0x50, 0xfc, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0xa0, 0x7c, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x17, 0x34, 0x3b, 0x30, 0x57,
++ 0x12, 0x1c, 0x17, 0x22, 0x22, 0x47, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0x40, 0xfc,
++ 0xa8, 0x54, 0xf8, 0xa8, 0xa8, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x7a, 0x1e, 0x6c, 0x1a, 0x6a,
++ 0x31, 0x09, 0x09, 0x12, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf4, 0x34, 0xd8, 0x34, 0xd4,
++ 0x60, 0x10, 0x10, 0xa0, 0x60, 0x1c, 0x00, 0x00,
++ 0x10, 0x17, 0x12, 0x15, 0x36, 0x34, 0x3a, 0x53,
++ 0x16, 0x1f, 0x17, 0x26, 0x23, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xd8, 0xa8, 0xc8, 0x20, 0xf8,
++ 0x40, 0xf0, 0xf0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x12, 0x12, 0x15, 0x17, 0x36, 0x3d, 0x37, 0x50,
++ 0x17, 0x10, 0x19, 0x26, 0x24, 0x40, 0x00, 0x00,
++ 0x48, 0x48, 0xf4, 0xac, 0xe8, 0xb4, 0xfc, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x14, 0x3f, 0x3d, 0x35, 0x55,
++ 0x15, 0x15, 0x1f, 0x26, 0x2a, 0x57, 0x00, 0x00,
++ 0x80, 0xf8, 0xfc, 0xc8, 0x78, 0xf0, 0x50, 0xf0,
++ 0x50, 0xf0, 0xf8, 0xa8, 0xa8, 0xfc, 0x00, 0x00,
++ 0x10, 0x17, 0x14, 0x1f, 0x3c, 0x37, 0x37, 0x55,
++ 0x15, 0x15, 0x1d, 0x2c, 0x27, 0x44, 0x00, 0x00,
++ 0x00, 0xbc, 0xa4, 0xbc, 0xa4, 0xfc, 0xfc, 0xf4,
++ 0x54, 0xf4, 0xf4, 0xe4, 0x54, 0x4c, 0x00, 0x00,
++ 0x0f, 0x15, 0x1f, 0x1e, 0x17, 0x3f, 0x24, 0x7f,
++ 0x0e, 0x35, 0x7f, 0x15, 0x6a, 0x1c, 0x00, 0x00,
++ 0xf0, 0xd0, 0xf0, 0xf0, 0xd0, 0xfc, 0x28, 0xfc,
++ 0x70, 0xac, 0xfc, 0x30, 0xcc, 0x70, 0x00, 0x00,
++ 0x00, 0x3f, 0x12, 0x11, 0x21, 0x5f, 0x01, 0x7f,
++ 0x01, 0x01, 0x1f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x30, 0xe0, 0x10, 0x08, 0x08, 0xf0, 0x10, 0xfc,
++ 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x06, 0x3a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a,
++ 0x2a, 0x29, 0x29, 0x28, 0x28, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0xf8, 0x88, 0x80,
++ 0x84, 0x84, 0x7c, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x10, 0x2f, 0x42, 0x7f, 0x04,
++ 0x07, 0x0a, 0x09, 0x10, 0x23, 0x5c, 0x00, 0x00,
++ 0x30, 0xe0, 0x10, 0x88, 0xf8, 0x00, 0xfc, 0x00,
++ 0xf0, 0x20, 0x40, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x11, 0x2f, 0x48, 0x0f, 0x08,
++ 0x08, 0x0f, 0x15, 0x1a, 0x2a, 0x50, 0x00, 0x00,
++ 0x30, 0xe0, 0x10, 0x08, 0xe8, 0x20, 0xf0, 0x10,
++ 0x10, 0xfc, 0x24, 0x94, 0x04, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x01, 0x06, 0x38, 0x04, 0x04,
++ 0x02, 0x02, 0x01, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x20, 0x40, 0x80, 0x60, 0x10, 0x40, 0x40, 0x40,
++ 0x80, 0x80, 0x00, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x04, 0x05, 0x65, 0x19, 0x09, 0x15, 0x21, 0x45,
++ 0x25, 0x19, 0x09, 0x15, 0x27, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x07, 0x04, 0x00, 0x3f,
++ 0x02, 0x02, 0x02, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x20, 0xe0,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x24, 0x24, 0x24, 0x3f, 0x24, 0x04, 0x7c,
++ 0x15, 0x15, 0x16, 0x24, 0x24, 0x44, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0xe0, 0xe0,
++ 0x50, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x28, 0x2f, 0x29, 0x3b, 0x2c, 0x0f, 0x78,
++ 0x2b, 0x2a, 0x2a, 0x2a, 0x2b, 0x4a, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x50, 0x58, 0xe4, 0xfc, 0x00,
++ 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0x08, 0x00, 0x00,
++ 0x24, 0x24, 0x24, 0x25, 0x3e, 0x20, 0x21, 0x3c,
++ 0x24, 0x27, 0x24, 0x24, 0x25, 0x44, 0x00, 0x00,
++ 0x50, 0x48, 0x7c, 0xc8, 0x30, 0x74, 0x8c, 0x54,
++ 0x7c, 0xc8, 0x30, 0x74, 0x8c, 0x04, 0x00, 0x00,
++ 0x28, 0x2f, 0x29, 0x2b, 0x3e, 0x23, 0x23, 0x39,
++ 0x29, 0x29, 0x29, 0x29, 0x29, 0x4e, 0x00, 0x00,
++ 0x40, 0xfc, 0xf0, 0xf8, 0xa8, 0x38, 0xf8, 0xf0,
++ 0x10, 0xf0, 0xf0, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x29, 0x29, 0x3f, 0x29, 0x29, 0x49,
++ 0x0f, 0x79, 0x0b, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0xd0, 0x14, 0x0c, 0xfc, 0x04, 0x00, 0x00,
++ 0x08, 0x0b, 0x28, 0x28, 0x3f, 0x28, 0x28, 0x4b,
++ 0x0c, 0x79, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf0, 0x90, 0x90, 0xfc,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x06, 0x38, 0x08, 0x7f, 0x1d, 0x1a, 0x2a, 0x49,
++ 0x11, 0x1f, 0x21, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0xa8, 0x28, 0x48, 0x88, 0x30,
++ 0x00, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x02, 0x3c, 0x08, 0x7f, 0x1c, 0x1a, 0x2a, 0x49,
++ 0x11, 0x1f, 0x21, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x08, 0x18,
++ 0x00, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x09, 0x0f, 0x11, 0x3f, 0x01, 0x09, 0x28,
++ 0x3e, 0x28, 0x4f, 0x79, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0xf8, 0x00, 0x20, 0xa0,
++ 0xf8, 0xa0, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x2b, 0x28, 0x3d, 0x29, 0x29, 0x48,
++ 0x0f, 0x7a, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x08, 0xe8, 0xa8, 0xe8, 0x18, 0x00, 0x00,
++ 0x08, 0x2a, 0x2c, 0x49, 0x14, 0x22, 0x3f, 0x29,
++ 0x4f, 0x11, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x20, 0xa8, 0xb0, 0x20, 0x50, 0x88, 0xfc, 0x08,
++ 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x29, 0x2b, 0x3e, 0x2b, 0x2b, 0x49,
++ 0x0d, 0x79, 0x09, 0x09, 0x09, 0x0e, 0x00, 0x00,
++ 0x40, 0xfc, 0xf0, 0xf8, 0xb8, 0x18, 0xf8, 0xf0,
++ 0x10, 0xf0, 0xf0, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x08, 0x0b, 0x28, 0x29, 0x3f, 0x29, 0x28, 0x4b,
++ 0x0d, 0x7a, 0x0b, 0x09, 0x0a, 0x08, 0x00, 0x00,
++ 0x90, 0xfc, 0x40, 0xf8, 0xfc, 0xe8, 0xa4, 0xfc,
++ 0xe8, 0xa8, 0xd8, 0xd4, 0x6c, 0xc4, 0x00, 0x00,
++ 0x04, 0x44, 0x28, 0x10, 0x37, 0x48, 0x08, 0x18,
++ 0x28, 0x49, 0x09, 0x0a, 0x34, 0x18, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0xfc, 0xc0, 0xc0, 0xc0,
++ 0xc0, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x04, 0x44, 0x28, 0x10, 0x37, 0x48, 0x08, 0x18,
++ 0x28, 0x49, 0x0a, 0x0c, 0x30, 0x10, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x60, 0x60, 0xa0,
++ 0xa0, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x04, 0x47, 0x28, 0x10, 0x30, 0x48, 0x0b, 0x18,
++ 0x28, 0x48, 0x08, 0x08, 0x3f, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0xfc, 0x90,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x48, 0x30, 0x13, 0x32, 0x4a, 0x0a, 0x1b,
++ 0x2a, 0x48, 0x08, 0x08, 0x30, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xf8,
++ 0x48, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x48, 0x30, 0x11, 0x31, 0x49, 0x0a, 0x1a,
++ 0x28, 0x48, 0x08, 0x09, 0x32, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0x48, 0x48, 0x50, 0x60, 0x40, 0x60,
++ 0x60, 0xa0, 0x90, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x4b, 0x32, 0x12, 0x33, 0x4a, 0x0a, 0x1b,
++ 0x2a, 0x48, 0x08, 0x08, 0x30, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x44, 0x2b, 0x10, 0x30, 0x4b, 0x0a, 0x1a,
++ 0x2b, 0x4a, 0x08, 0x09, 0x32, 0x14, 0x00, 0x00,
++ 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8, 0xa0,
++ 0xfc, 0xa4, 0xa4, 0x38, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x48, 0x31, 0x11, 0x33, 0x4c, 0x08, 0x19,
++ 0x2f, 0x4a, 0x0a, 0x0a, 0x33, 0x12, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x10, 0x20, 0xc0, 0xc0, 0x30,
++ 0xfc, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x45, 0x29, 0x11, 0x31, 0x49, 0x09, 0x19,
++ 0x29, 0x49, 0x09, 0x09, 0x31, 0x17, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf4,
++ 0x44, 0x28, 0x30, 0x10, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x48, 0x37, 0x11, 0x31, 0x4b, 0x0d, 0x18,
++ 0x28, 0x48, 0x08, 0x09, 0x32, 0x1c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x08, 0x14, 0x14, 0xa0,
++ 0xa0, 0x40, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x48, 0x30, 0x17, 0x31, 0x49, 0x09, 0x1a,
++ 0x2c, 0x48, 0x08, 0x09, 0x32, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x50, 0x50, 0x50, 0xe8,
++ 0x44, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x4b, 0x32, 0x12, 0x33, 0x48, 0x0b, 0x1a,
++ 0x2b, 0x4a, 0x0b, 0x0a, 0x32, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x00, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x15, 0x16, 0x34, 0x57, 0x14,
++ 0x14, 0x17, 0x14, 0x14, 0x11, 0x16, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x90, 0x60, 0xe0, 0x1c, 0x50,
++ 0x48, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x04, 0x44, 0x2b, 0x10, 0x30, 0x49, 0x0f, 0x18,
++ 0x29, 0x49, 0x09, 0x09, 0x30, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xa0, 0x10, 0xfc, 0x08,
++ 0xe8, 0x28, 0xe8, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x4b, 0x32, 0x12, 0x33, 0x4a, 0x0a, 0x1b,
++ 0x28, 0x48, 0x08, 0x09, 0x32, 0x14, 0x00, 0x00,
++ 0x80, 0x38, 0x08, 0x08, 0xb8, 0x08, 0x08, 0xf8,
++ 0xa0, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x4f, 0x30, 0x13, 0x30, 0x4f, 0x08, 0x1b,
++ 0x2a, 0x4a, 0x0b, 0x0a, 0x32, 0x12, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0xf8,
++ 0x48, 0x48, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x49, 0x31, 0x11, 0x31, 0x49, 0x09, 0x18,
++ 0x2b, 0x4a, 0x0b, 0x0a, 0x33, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x48, 0x37, 0x11, 0x31, 0x4a, 0x0c, 0x18,
++ 0x2f, 0x48, 0x08, 0x08, 0x30, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x10, 0xa8, 0x44, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x09, 0x49, 0x31, 0x12, 0x33, 0x4e, 0x0a, 0x1a,
++ 0x2b, 0x4b, 0x0a, 0x0a, 0x32, 0x13, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xfc, 0x80, 0xf8, 0xa0,
++ 0x20, 0xfc, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x4a, 0x32, 0x13, 0x30, 0x4f, 0x08, 0x1b,
++ 0x2a, 0x4a, 0x0a, 0x0a, 0x32, 0x12, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x40, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x08, 0x4b, 0x32, 0x13, 0x32, 0x4b, 0x09, 0x19,
++ 0x2a, 0x4d, 0x08, 0x08, 0x3f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x40, 0xf8,
++ 0x40, 0xf0, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x4b, 0x32, 0x13, 0x32, 0x4b, 0x08, 0x1f,
++ 0x29, 0x49, 0x09, 0x09, 0x31, 0x16, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x00, 0xfc,
++ 0x48, 0x28, 0x30, 0x10, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x4b, 0x32, 0x12, 0x32, 0x4f, 0x0c, 0x1b,
++ 0x2a, 0x4b, 0x0a, 0x0b, 0x32, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x90, 0xfc, 0x08, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x24, 0x24, 0x3f, 0x25, 0x04, 0x7f, 0x25, 0x24,
++ 0x45, 0x01, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0xf8, 0x50, 0x20, 0xd0, 0xfc, 0x10, 0xb0,
++ 0x20, 0x10, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x09, 0x4f, 0x31, 0x13, 0x32, 0x4b, 0x0a, 0x1b,
++ 0x28, 0x4f, 0x08, 0x08, 0x31, 0x16, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xf8, 0x08, 0xf8, 0x08, 0xf8,
++ 0x40, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x35, 0x2e, 0x2c, 0x3f, 0x04, 0x3f,
++ 0x04, 0x07, 0x78, 0x15, 0x2a, 0x40, 0x00, 0x00,
++ 0x10, 0x98, 0x94, 0x94, 0x90, 0xfc, 0x10, 0x90,
++ 0x10, 0x90, 0x28, 0x28, 0xc4, 0x84, 0x00, 0x00,
++ 0x10, 0x57, 0x36, 0x25, 0x35, 0x57, 0x15, 0x17,
++ 0x37, 0x37, 0x57, 0x19, 0x1a, 0x34, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0x50, 0x90, 0xfc, 0x34, 0x58,
++ 0x58, 0xd0, 0x30, 0x28, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x48, 0x31, 0x16, 0x33, 0x4b, 0x0a, 0x1b,
++ 0x29, 0x49, 0x09, 0x09, 0x31, 0x11, 0x00, 0x00,
++ 0x40, 0xa0, 0xf0, 0x0c, 0xf8, 0x58, 0xe8, 0xf8,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x4b, 0x32, 0x13, 0x31, 0x49, 0x0a, 0x1f,
++ 0x2a, 0x4b, 0x08, 0x08, 0x37, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x00, 0xf8, 0x88, 0xe8,
++ 0xa8, 0xe8, 0xa8, 0xf8, 0x18, 0x30, 0x00, 0x00,
++ 0x08, 0x4b, 0x32, 0x16, 0x32, 0x4c, 0x0b, 0x1a,
++ 0x2b, 0x48, 0x0f, 0x08, 0x30, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x48, 0xa8, 0x94, 0x70, 0xf8, 0xa8,
++ 0xf8, 0x00, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x77, 0x55, 0x77, 0x3f, 0x25, 0x3f, 0x25, 0x3f,
++ 0x7f, 0x00, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0x24, 0x20, 0xfc, 0x20, 0x20,
++ 0xa0, 0x30, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x0a, 0x4c, 0x32, 0x13, 0x32, 0x4b, 0x0b, 0x1b,
++ 0x2a, 0x4b, 0x0a, 0x0a, 0x33, 0x16, 0x00, 0x00,
++ 0x48, 0x90, 0x48, 0xf8, 0xe8, 0xa8, 0xf8, 0x68,
++ 0xd8, 0x68, 0xd8, 0x4c, 0x6c, 0x44, 0x00, 0x00,
++ 0x04, 0x07, 0x3f, 0x2d, 0x37, 0x3f, 0x2f, 0x29,
++ 0x2f, 0x3f, 0x36, 0x3f, 0x32, 0x52, 0x00, 0x00,
++ 0x20, 0xa8, 0xa4, 0x24, 0x20, 0xfc, 0x20, 0x20,
++ 0x30, 0xb0, 0xd0, 0xc8, 0x88, 0x84, 0x00, 0x00,
++ 0x12, 0x52, 0x2f, 0x22, 0x3f, 0x5a, 0x1a, 0x3f,
++ 0x32, 0x57, 0x16, 0x1a, 0x12, 0x62, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0x48, 0xf8, 0xc8, 0xf8, 0xc8,
++ 0x78, 0x48, 0xf8, 0x30, 0x48, 0x88, 0x00, 0x00,
++ 0x02, 0x02, 0x7a, 0x12, 0x1f, 0x12, 0x7a, 0x12,
++ 0x12, 0x12, 0x1c, 0x64, 0x08, 0x13, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x38, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xb8, 0xa8, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7d, 0x12, 0x12, 0x17, 0x7a, 0x12,
++ 0x12, 0x12, 0x1a, 0x62, 0x02, 0x02, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0x24, 0x3c, 0xe0, 0x20, 0x20,
++ 0x20, 0x10, 0x14, 0x0c, 0x0c, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x7d, 0x11, 0x12, 0x14, 0x7c, 0x11,
++ 0x11, 0x11, 0x1a, 0x64, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x48, 0x50, 0x40, 0x60,
++ 0x50, 0x48, 0x44, 0x44, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x12, 0x12, 0x12, 0x7f, 0x12,
++ 0x12, 0x12, 0x1a, 0x64, 0x05, 0x0e, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x50, 0x40, 0xf8, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x11, 0x11, 0x11, 0x7d, 0x11,
++ 0x11, 0x11, 0x1d, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf8, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x07, 0x7d, 0x11, 0x11, 0x11, 0x7d, 0x11,
++ 0x11, 0x11, 0x19, 0x67, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x07, 0x7c, 0x17, 0x14, 0x14, 0x7f, 0x16,
++ 0x16, 0x16, 0x1e, 0x66, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x90, 0x90, 0xf0, 0xb0,
++ 0xb0, 0xb0, 0xb4, 0xec, 0x8c, 0x84, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x11, 0x13, 0x14, 0x7c, 0x11,
++ 0x17, 0x12, 0x1a, 0x62, 0x03, 0x02, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x10, 0x20, 0xc0, 0xc0, 0x30,
++ 0xfc, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x07, 0x7c, 0x13, 0x12, 0x12, 0x7f, 0x10,
++ 0x13, 0x12, 0x1f, 0x62, 0x03, 0x02, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xb8, 0xa8, 0xa8, 0xb8, 0xa0,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x7d, 0x11, 0x11, 0x11, 0x7d, 0x11,
++ 0x11, 0x11, 0x1d, 0x61, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x08, 0xf8, 0x08, 0x08, 0xf8,
++ 0x24, 0x24, 0x18, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x14, 0x17, 0x14, 0x7c, 0x17,
++ 0x14, 0x15, 0x1c, 0x65, 0x06, 0x18, 0x00, 0x00,
++ 0x00, 0x38, 0xa8, 0xa8, 0xb0, 0xb0, 0xa8, 0xe8,
++ 0x64, 0xa4, 0xa4, 0x78, 0x60, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x13, 0x12, 0x12, 0x7f, 0x12,
++ 0x12, 0x12, 0x1c, 0x64, 0x09, 0x12, 0x00, 0x00,
++ 0x40, 0x78, 0x40, 0xfc, 0x48, 0x78, 0xc8, 0x38,
++ 0xa0, 0xa0, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x03, 0x7c, 0x10, 0x11, 0x10, 0x7c, 0x17,
++ 0x10, 0x11, 0x1d, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0xf0, 0x90, 0x90, 0xfc,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x17, 0x10, 0x10, 0x7f, 0x10,
++ 0x10, 0x11, 0x1f, 0x61, 0x02, 0x04, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xbc, 0xa0,
++ 0xa0, 0xbc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x02, 0x01, 0x7d, 0x14, 0x12, 0x12, 0x7d, 0x11,
++ 0x11, 0x12, 0x1e, 0x64, 0x05, 0x04, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x30, 0x48, 0x78, 0xc4, 0x04, 0x00, 0x00,
++ 0x00, 0x07, 0x7c, 0x14, 0x17, 0x14, 0x7c, 0x17,
++ 0x14, 0x14, 0x1f, 0x64, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0xb8, 0x88, 0x88, 0xb8, 0x88, 0x00, 0xf8,
++ 0x48, 0x28, 0xb0, 0x10, 0x28, 0xc4, 0x00, 0x00,
++ 0x00, 0x03, 0x7e, 0x17, 0x10, 0x13, 0x7e, 0x13,
++ 0x12, 0x13, 0x18, 0x67, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7e, 0x08, 0x3e, 0x08, 0x7e, 0x02, 0x01,
++ 0x05, 0x14, 0x14, 0x25, 0x46, 0x1b, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x20, 0x20,
++ 0x50, 0x48, 0x84, 0x14, 0x10, 0xf0, 0x00, 0x00,
++ 0x02, 0x02, 0x7c, 0x12, 0x12, 0x10, 0x7f, 0x12,
++ 0x13, 0x12, 0x1a, 0x63, 0x03, 0x02, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0x48, 0x48, 0x80, 0xf8, 0x28,
++ 0xa8, 0x48, 0xa8, 0x18, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x03, 0x7e, 0x12, 0x12, 0x12, 0x7d, 0x11,
++ 0x11, 0x11, 0x1d, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xe8, 0x08, 0xe8, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x00, 0x7c, 0x11, 0x13, 0x14, 0x7f, 0x14,
++ 0x16, 0x15, 0x1e, 0x65, 0x04, 0x05, 0x00, 0x00,
++ 0xc0, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xa8, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x08, 0x0a, 0x2a, 0x2c, 0x55, 0x22, 0x3f, 0x20,
++ 0x7f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0x28, 0xa8, 0xb0, 0x50, 0x88, 0xfc, 0x08,
++ 0xf8, 0x00, 0xf0, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x12, 0x13, 0x12, 0x7e, 0x13,
++ 0x10, 0x10, 0x1d, 0x61, 0x02, 0x0c, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0xd0, 0xd0, 0x68, 0x7c, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x01, 0x7d, 0x12, 0x17, 0x12, 0x7f, 0x12,
++ 0x13, 0x12, 0x1b, 0x60, 0x03, 0x0c, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x44, 0xfc, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0xb0, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x7e, 0x13, 0x12, 0x13, 0x7e, 0x13,
++ 0x12, 0x10, 0x1e, 0x65, 0x09, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x40, 0xf8, 0x40, 0xfc,
++ 0x24, 0x94, 0x54, 0x44, 0x04, 0x18, 0x00, 0x00,
++ 0x00, 0x03, 0x7e, 0x11, 0x11, 0x10, 0x7f, 0x10,
++ 0x17, 0x12, 0x1e, 0x62, 0x03, 0x02, 0x00, 0x00,
++ 0x38, 0xc8, 0x48, 0x50, 0x20, 0x40, 0xf8, 0x40,
++ 0xfc, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x07, 0x7d, 0x11, 0x13, 0x12, 0x7f, 0x10,
++ 0x13, 0x10, 0x1d, 0x60, 0x07, 0x00, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xf0, 0xf8, 0x48, 0xf8, 0x40,
++ 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x7d, 0x10, 0x17, 0x11, 0x7d, 0x11,
++ 0x11, 0x15, 0x18, 0x67, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x02, 0x7d, 0x17, 0x11, 0x10, 0x7f, 0x10,
++ 0x11, 0x10, 0x1f, 0x60, 0x01, 0x06, 0x00, 0x00,
++ 0xa0, 0xa8, 0xb0, 0xfc, 0x10, 0xa0, 0xf8, 0x40,
++ 0xf0, 0x40, 0xfc, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x3e, 0x21, 0x3e, 0x53, 0x1e,
++ 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0xfc, 0x88, 0x50, 0xfc, 0x20, 0xfc, 0x20,
++ 0xf8, 0x00, 0xf0, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x7e, 0x13, 0x12, 0x13, 0x7d, 0x11,
++ 0x11, 0x15, 0x19, 0x67, 0x00, 0x07, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0xf8, 0xa8, 0xf8, 0x10, 0xf0,
++ 0xf0, 0x10, 0xf8, 0x10, 0xe0, 0x1c, 0x00, 0x00,
++ 0x01, 0x07, 0x7a, 0x12, 0x17, 0x10, 0x7f, 0x14,
++ 0x17, 0x14, 0x1f, 0x64, 0x04, 0x05, 0x00, 0x00,
++ 0x20, 0xfc, 0xa0, 0xb8, 0xc8, 0x38, 0xa0, 0xb8,
++ 0xa0, 0xb8, 0xa0, 0xb8, 0xa4, 0x9c, 0x00, 0x00,
++ 0x00, 0x07, 0x7c, 0x17, 0x17, 0x14, 0x7f, 0x13,
++ 0x14, 0x17, 0x18, 0x61, 0x00, 0x07, 0x00, 0x00,
++ 0x00, 0xbc, 0xa4, 0xbc, 0xbc, 0xa4, 0xbc, 0x28,
++ 0xc4, 0xfc, 0x90, 0xd0, 0x78, 0x84, 0x00, 0x00,
++ 0x00, 0x04, 0x7a, 0x12, 0x10, 0x10, 0x7f, 0x11,
++ 0x11, 0x13, 0x1c, 0x60, 0x01, 0x0e, 0x00, 0x00,
++ 0x84, 0x44, 0x48, 0x10, 0x80, 0x80, 0xfc, 0x10,
++ 0x10, 0xa0, 0x60, 0x50, 0x88, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x19, 0x25, 0x5f, 0x01, 0x7f,
++ 0x11, 0x1d, 0x25, 0x06, 0x06, 0x1d, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0x50, 0x50, 0x70, 0x58, 0x78, 0xc4, 0x00, 0x00,
++ 0x10, 0x10, 0x7f, 0x2b, 0x2b, 0x2b, 0x7f, 0x13,
++ 0x1f, 0x73, 0x15, 0x15, 0x2f, 0x48, 0x00, 0x00,
++ 0x50, 0x90, 0xfc, 0xa8, 0xa8, 0xa8, 0xfc, 0x90,
++ 0x90, 0x7c, 0xd0, 0xd0, 0x30, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x10, 0x1e, 0x13, 0x12, 0x1a,
++ 0x16, 0x16, 0x12, 0x16, 0x1a, 0x61, 0x00, 0x00,
++ 0x20, 0xa0, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x24, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x10, 0x1e, 0x12, 0x1b, 0x16,
++ 0x16, 0x12, 0x12, 0x16, 0x1a, 0x61, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x24, 0x04, 0xfc, 0x00, 0x00,
++ 0x07, 0x04, 0x19, 0x61, 0x02, 0x1f, 0x00, 0x7f,
++ 0x04, 0x07, 0x05, 0x08, 0x0f, 0x70, 0x00, 0x00,
++ 0xc0, 0x40, 0x30, 0x8c, 0x60, 0x90, 0x00, 0xfc,
++ 0x00, 0xe0, 0x20, 0xa4, 0xa4, 0x1c, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x10, 0x1e, 0x12, 0x1a, 0x16,
++ 0x16, 0x12, 0x12, 0x16, 0x1a, 0x61, 0x00, 0x00,
++ 0x20, 0x2c, 0xf0, 0x20, 0xa8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0x20, 0x28, 0x1c, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x10, 0x1e, 0x13, 0x1a, 0x16,
++ 0x16, 0x12, 0x13, 0x16, 0x1a, 0x61, 0x00, 0x00,
++ 0x70, 0x10, 0x50, 0x48, 0x88, 0xfc, 0x48, 0x48,
++ 0x48, 0x88, 0x30, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x10, 0x1e, 0x13, 0x1a, 0x16,
++ 0x17, 0x12, 0x12, 0x16, 0x1a, 0x61, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x78, 0xc0, 0x40, 0x7c,
++ 0xc0, 0x40, 0x44, 0x3c, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x10, 0x1e, 0x12, 0x1a, 0x16,
++ 0x16, 0x12, 0x12, 0x16, 0x1a, 0x61, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0x88, 0xf8, 0x88, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x02, 0x1c, 0x61, 0x06, 0x7f,
++ 0x08, 0x0f, 0x0a, 0x11, 0x1f, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0xd0, 0x20, 0x18, 0xfc,
++ 0x00, 0xe0, 0x20, 0x24, 0xa4, 0x1c, 0x00, 0x00,
++ 0x00, 0x7f, 0x14, 0x7f, 0x55, 0x55, 0x7f, 0x49,
++ 0x08, 0x7f, 0x08, 0x08, 0x0e, 0x71, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x78, 0x48, 0x68, 0x58,
++ 0x58, 0x48, 0x48, 0x5c, 0x6c, 0x84, 0x00, 0x00,
++ 0x02, 0x3c, 0x08, 0x7e, 0x1d, 0x2a, 0x48, 0x7f,
++ 0x04, 0x07, 0x05, 0x08, 0x0f, 0x70, 0x00, 0x00,
++ 0x20, 0x24, 0xa4, 0xa8, 0x50, 0x48, 0x84, 0xfc,
++ 0x00, 0xe0, 0x20, 0xa4, 0xa4, 0x1c, 0x00, 0x00,
++ 0x00, 0x7f, 0x21, 0x21, 0x3d, 0x25, 0x35, 0x2d,
++ 0x2d, 0x26, 0x26, 0x2d, 0x34, 0x63, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0x20, 0xf8, 0x20, 0xfc, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x40, 0x5e, 0x52, 0x5e, 0x40, 0x7f,
++ 0x6d, 0x6d, 0x7f, 0x40, 0x7f, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x78, 0x48, 0x68, 0x58,
++ 0x58, 0x48, 0x4c, 0x5c, 0x64, 0x84, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x2a, 0x3e, 0x2a, 0x3e, 0x0a,
++ 0x7f, 0x04, 0x7f, 0x24, 0x14, 0x0d, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x78, 0x48, 0x68, 0x58,
++ 0x58, 0x48, 0x4c, 0x5c, 0x64, 0x84, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x12, 0x1f, 0x3f, 0x20,
++ 0x5f, 0x04, 0x3f, 0x09, 0x0f, 0x70, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x90, 0xf0, 0xfc, 0x08,
++ 0xf0, 0x00, 0xe0, 0x24, 0xa4, 0x1c, 0x00, 0x00,
++ 0x01, 0x7f, 0x08, 0x32, 0x0d, 0x0a, 0x7e, 0x04,
++ 0x08, 0x3f, 0x04, 0x3f, 0x09, 0x7e, 0x00, 0x00,
++ 0x00, 0xfc, 0x90, 0xfc, 0x90, 0xf8, 0xf8, 0x90,
++ 0xfc, 0xf8, 0x00, 0xe4, 0x24, 0x9c, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3f, 0x20, 0x3e, 0x52, 0x1e,
++ 0x7f, 0x04, 0x07, 0x09, 0x0f, 0x78, 0x00, 0x00,
++ 0x20, 0xf8, 0x50, 0xfc, 0x20, 0xf8, 0x20, 0x20,
++ 0xfc, 0x00, 0xe0, 0x24, 0xa4, 0x1c, 0x00, 0x00,
++ 0x11, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x08,
++ 0x7f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x20,
++ 0xfc, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x3e, 0x2a, 0x3f, 0x2b, 0x3e,
++ 0x6a, 0x28, 0x11, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa0, 0xfc, 0x20, 0x20, 0xf8,
++ 0x20, 0x20, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x03, 0x01, 0x3f, 0x21, 0x3f,
++ 0x21, 0x21, 0x3f, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x60, 0x80, 0x00, 0xf8, 0x08, 0xf8,
++ 0x08, 0x08, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x11, 0x1f, 0x00,
++ 0x7f, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x00,
++ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x02, 0x21, 0x11, 0x10, 0x00, 0x3f, 0x21, 0x21,
++ 0x3f, 0x21, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x10, 0x20, 0x40, 0xf8, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x54, 0x54, 0x55, 0x7e, 0x54,
++ 0x54, 0x54, 0x7d, 0x45, 0x02, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xa8, 0xa4,
++ 0xa0, 0xa0, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x57, 0x54, 0x54, 0x7c, 0x54,
++ 0x57, 0x54, 0x7d, 0x45, 0x02, 0x04, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0xfc, 0x90, 0x90, 0x90, 0x90,
++ 0xfc, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x57, 0x54, 0x54, 0x7c, 0x57,
++ 0x54, 0x54, 0x7c, 0x45, 0x02, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x54, 0x55, 0x56, 0x7c, 0x57,
++ 0x54, 0x54, 0x7f, 0x44, 0x00, 0x07, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0x28, 0xc4, 0x10,
++ 0x20, 0xc8, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x00, 0x3e, 0x2a, 0x2a,
++ 0x3e, 0x2a, 0x2a, 0x2a, 0x3f, 0x22, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x30, 0x48, 0x48, 0x7c, 0x84, 0x04, 0x00, 0x00,
++ 0x02, 0x02, 0x04, 0x3f, 0x01, 0x7f, 0x04, 0x18,
++ 0x7f, 0x11, 0x1f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xc0, 0x70, 0x88, 0x00, 0xfc, 0x40, 0x30,
++ 0xfc, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x57, 0x54, 0x54, 0x7d, 0x55,
++ 0x57, 0x55, 0x7d, 0x45, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0xc0, 0xc8, 0x48, 0x50,
++ 0x20, 0x20, 0x10, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x54, 0x54, 0x57, 0x7c, 0x54,
++ 0x57, 0x55, 0x7c, 0x44, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x02, 0x07,
++ 0x3c, 0x03, 0x7f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf0,
++ 0x40, 0x80, 0xfc, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x1f, 0x7f, 0x01, 0x1f, 0x0f, 0x7f, 0x1f,
++ 0x11, 0x1f, 0x11, 0x1f, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0xfc, 0x10, 0xf0, 0xe0, 0xfc, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x55, 0x57, 0x54, 0x7c, 0x57,
++ 0x54, 0x55, 0x7d, 0x46, 0x04, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x44, 0x40, 0xfc,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x54, 0x54, 0x55, 0x7f, 0x54,
++ 0x55, 0x55, 0x7d, 0x45, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xa0, 0x10, 0xfc, 0x08,
++ 0xe8, 0x28, 0xe8, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x11, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x00,
++ 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x05, 0x05, 0x3d, 0x21, 0x3d, 0x27,
++ 0x15, 0x3d, 0x15, 0x1d, 0x65, 0x1b, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xfc,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xfc, 0x00, 0x00,
++ 0x00, 0x03, 0x7c, 0x55, 0x57, 0x55, 0x7c, 0x55,
++ 0x57, 0x54, 0x7f, 0x46, 0x03, 0x02, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0xfc, 0xe8, 0x40, 0xf0,
++ 0xfc, 0x08, 0xfc, 0xa8, 0x98, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x54, 0x55, 0x54, 0x7f, 0x54,
++ 0x57, 0x55, 0x7d, 0x46, 0x04, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x90,
++ 0xfc, 0x90, 0x50, 0x50, 0x10, 0x30, 0x00, 0x00,
++ 0x0f, 0x09, 0x0f, 0x0f, 0x3e, 0x2a, 0x3e, 0x3e,
++ 0x3f, 0x3f, 0x4f, 0x0f, 0x08, 0x7f, 0x00, 0x00,
++ 0xe0, 0x20, 0xe0, 0xe0, 0xf8, 0xa8, 0xf8, 0xf8,
++ 0xfc, 0xe8, 0xe0, 0xe0, 0x20, 0xfc, 0x00, 0x00,
++ 0x0f, 0x09, 0x0f, 0x0f, 0x3e, 0x2a, 0x3e, 0x3f,
++ 0x3f, 0x22, 0x47, 0x06, 0x09, 0x7f, 0x00, 0x00,
++ 0xe0, 0x20, 0xe0, 0xe0, 0xf8, 0xa8, 0xf8, 0xf8,
++ 0xfc, 0x08, 0xe0, 0x40, 0x40, 0xfc, 0x00, 0x00,
++ 0x0f, 0x09, 0x0f, 0x0f, 0x38, 0x0e, 0x30, 0x3f,
++ 0x2f, 0x4f, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0xe0, 0x20, 0xe0, 0xe0, 0x38, 0xe0, 0x18, 0xfc,
++ 0xe8, 0xe0, 0xe0, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x2f, 0x08, 0x18,
++ 0x28, 0x48, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0x00, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x29, 0x09, 0x1a,
++ 0x2c, 0x48, 0x10, 0x11, 0x26, 0x58, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0x80, 0xf0, 0x10, 0x20,
++ 0x20, 0x40, 0xc0, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x2a, 0x0a, 0x1a,
++ 0x2a, 0x4a, 0x12, 0x12, 0x23, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x40, 0x40, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x28, 0x09, 0x1b,
++ 0x2d, 0x49, 0x11, 0x11, 0x22, 0x44, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x40, 0x40, 0xa0, 0x10, 0x28,
++ 0x24, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x2f, 0x08, 0x18,
++ 0x28, 0x49, 0x11, 0x12, 0x24, 0x58, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x90, 0x88, 0xfc, 0x80, 0xc0,
++ 0xc0, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x4a, 0x2a, 0x2f, 0x0a, 0x1a,
++ 0x2a, 0x4a, 0x12, 0x12, 0x24, 0x49, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x00, 0xb8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xb8, 0xa8, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x49, 0x29, 0x2f, 0x09, 0x19,
++ 0x29, 0x49, 0x11, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0x10, 0xfc, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x2f, 0x08, 0x18,
++ 0x2b, 0x48, 0x10, 0x10, 0x2f, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x40, 0x40, 0xfc, 0x40, 0x90,
++ 0x90, 0x60, 0x50, 0x98, 0xe4, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x51, 0x31, 0x35, 0x15, 0x15,
++ 0x35, 0x55, 0x15, 0x25, 0x27, 0x5c, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0x20, 0x20, 0x24, 0xe8,
++ 0x30, 0x20, 0x20, 0xe4, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2b, 0x2a, 0x0a, 0x1b,
++ 0x2a, 0x4b, 0x12, 0x12, 0x2f, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2b, 0x2a, 0x0a, 0x1b,
++ 0x2a, 0x4a, 0x13, 0x10, 0x2f, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x29, 0x0e, 0x18,
++ 0x2b, 0x4c, 0x10, 0x13, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0xf0, 0x10, 0xa0, 0xc0,
++ 0x30, 0xcc, 0x20, 0x80, 0x60, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x49, 0x29, 0x2b, 0x0c, 0x1b,
++ 0x2a, 0x4b, 0x12, 0x12, 0x22, 0x41, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x00, 0xf8, 0x08, 0xc8,
++ 0x48, 0xc8, 0x70, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x0f, 0x48, 0x2f, 0x28, 0x0b, 0x18, 0x2b,
++ 0x4a, 0x0f, 0x14, 0x10, 0x23, 0x4c, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8,
++ 0x40, 0xfc, 0x44, 0xb8, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x49, 0x28, 0x29, 0x0f, 0x18,
++ 0x28, 0x4b, 0x10, 0x10, 0x2f, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0xc0, 0xa0, 0x10, 0xfc, 0x40,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x49, 0x28, 0x2f, 0x08, 0x1b,
++ 0x28, 0x48, 0x1f, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0xfc, 0x40, 0xf8,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2f, 0x2a, 0x0a, 0x1c,
++ 0x2a, 0x4b, 0x10, 0x10, 0x2f, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xfc, 0x48, 0x48, 0x90,
++ 0x48, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x2f, 0x08, 0x1b,
++ 0x28, 0x49, 0x15, 0x15, 0x29, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x40, 0x40, 0xfc, 0x40, 0xf8,
++ 0x40, 0x20, 0x28, 0x04, 0x14, 0xf0, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2f, 0x28, 0x09, 0x1e,
++ 0x28, 0x4b, 0x12, 0x12, 0x23, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xfc, 0x60, 0xd8, 0x44,
++ 0x40, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x50, 0x37, 0x35, 0x16, 0x16,
++ 0x35, 0x55, 0x15, 0x26, 0x24, 0x44, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xfc, 0x08, 0xe8, 0xa8,
++ 0xa8, 0xe8, 0xa8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x4b, 0x28, 0x2f, 0x09, 0x1e,
++ 0x28, 0x4f, 0x11, 0x13, 0x20, 0x47, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0xf0, 0x40, 0xfc, 0xf0, 0x4c,
++ 0xc0, 0xfc, 0x20, 0xe0, 0xd0, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x50, 0x37, 0x34, 0x17, 0x14,
++ 0x35, 0x55, 0x15, 0x24, 0x27, 0x44, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf8, 0x88, 0xf8, 0x88,
++ 0xe8, 0x28, 0xe8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2f, 0x29, 0x09, 0x1b,
++ 0x2c, 0x48, 0x1f, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x40, 0xfc, 0x10, 0x10, 0x28,
++ 0xc4, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2a, 0x2a, 0x0c, 0x19,
++ 0x2e, 0x4a, 0x12, 0x14, 0x23, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x48, 0x48, 0x50, 0xb0, 0x4c,
++ 0x48, 0x48, 0x50, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2b, 0x2a, 0x0b, 0x1a,
++ 0x2b, 0x48, 0x11, 0x17, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0xa0, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x49, 0x29, 0x2f, 0x09, 0x1b,
++ 0x2b, 0x4b, 0x13, 0x15, 0x29, 0x41, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0x10, 0xfc, 0x10, 0xb8,
++ 0xb8, 0xb8, 0xdc, 0x5c, 0x90, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x49, 0x29, 0x2f, 0x09, 0x1b,
++ 0x2b, 0x4b, 0x15, 0x15, 0x29, 0x41, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0x10, 0xfc, 0x10, 0xb8,
++ 0xb8, 0x78, 0x54, 0x94, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x50, 0x37, 0x34, 0x17, 0x17, 0x36,
++ 0x56, 0x17, 0x14, 0x28, 0x2f, 0x50, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf0, 0x70, 0x90, 0xf0, 0xb0,
++ 0xb0, 0xf0, 0xac, 0xfc, 0x14, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x4b, 0x2a, 0x2b, 0x0a, 0x1b, 0x2f,
++ 0x4a, 0x0b, 0x15, 0x19, 0x22, 0x45, 0x00, 0x00,
++ 0x80, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xf8, 0x48, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x4b, 0x29, 0x2b, 0x0c, 0x1f,
++ 0x2e, 0x4d, 0x16, 0x15, 0x24, 0x45, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0xc0, 0x20, 0xf0, 0x0c, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x00, 0x0f, 0x48, 0x2b, 0x2a, 0x0a, 0x1b, 0x2b,
++ 0x48, 0x0b, 0x12, 0x12, 0x3f, 0x40, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf0, 0x90, 0xd0, 0x30, 0xf0,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x48, 0x28, 0x2b, 0x0a, 0x1b, 0x2a,
++ 0x4a, 0x0a, 0x17, 0x14, 0x28, 0x50, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0x78, 0xfc, 0x78, 0xc8, 0x38,
++ 0xf8, 0x80, 0xfc, 0x80, 0xf8, 0x80, 0x00, 0x00,
++ 0x00, 0x0f, 0x48, 0x2f, 0x28, 0x0f, 0x19, 0x2f,
++ 0x49, 0x09, 0x11, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0x5c, 0x40, 0xbc, 0x10, 0xfc,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x0f, 0x48, 0x28, 0x29, 0x0f, 0x19, 0x29,
++ 0x49, 0x09, 0x13, 0x13, 0x25, 0x49, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xa0, 0xf0, 0xfc, 0x10, 0xf0,
++ 0xf0, 0x00, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x51, 0x32, 0x37, 0x14, 0x16, 0x35,
++ 0x5f, 0x16, 0x16, 0x26, 0x2a, 0x51, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0x38, 0xa8, 0xa8, 0xac, 0xc4,
++ 0xf8, 0xa8, 0xa8, 0x90, 0xa8, 0xc4, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x4b, 0x2b, 0x2a, 0x0f, 0x18,
++ 0x2b, 0x4a, 0x13, 0x12, 0x23, 0x42, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0x78, 0x28, 0xa8, 0xd8, 0x80,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x0f, 0x48, 0x2b, 0x28, 0x0f, 0x19, 0x29,
++ 0x49, 0x09, 0x11, 0x17, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xf8, 0xa0, 0xfc, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x0f, 0x4b, 0x2a, 0x2b, 0x0a, 0x1b, 0x28,
++ 0x4b, 0x08, 0x1f, 0x11, 0x26, 0x40, 0x00, 0x00,
++ 0x80, 0xfc, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x90,
++ 0x30, 0xc8, 0xfc, 0x58, 0x44, 0x40, 0x00, 0x00,
++ 0x00, 0x0f, 0x48, 0x2b, 0x2f, 0x0b, 0x18, 0x2b,
++ 0x4b, 0x08, 0x17, 0x11, 0x20, 0x47, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xf8, 0xfc, 0xf8, 0x40, 0xf8,
++ 0xf8, 0x40, 0xfc, 0x90, 0x70, 0x88, 0x00, 0x00,
++ 0x00, 0x1f, 0x50, 0x37, 0x34, 0x17, 0x14, 0x37,
++ 0x55, 0x15, 0x15, 0x25, 0x25, 0x45, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf8, 0xc8, 0xf8, 0xc8, 0xf8,
++ 0xe8, 0x28, 0xe8, 0x28, 0xe8, 0x38, 0x00, 0x00,
++ 0x00, 0x0f, 0x49, 0x2c, 0x2b, 0x0e, 0x1f, 0x29,
++ 0x4f, 0x0c, 0x17, 0x11, 0x21, 0x46, 0x00, 0x00,
++ 0x80, 0xfc, 0xd0, 0xd4, 0x24, 0x18, 0x74, 0x54,
++ 0x9c, 0xf8, 0x48, 0x30, 0x30, 0xcc, 0x00, 0x00,
++ 0x00, 0x0f, 0x49, 0x2d, 0x2d, 0x0a, 0x1c, 0x2f,
++ 0x4c, 0x0f, 0x10, 0x11, 0x22, 0x4c, 0x00, 0x00,
++ 0x80, 0xfc, 0x54, 0xb4, 0x58, 0xa8, 0xc4, 0xfc,
++ 0x88, 0xf8, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x50, 0x37, 0x34, 0x17, 0x16, 0x37,
++ 0x56, 0x16, 0x1f, 0x2a, 0x32, 0x44, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf8, 0x68, 0xec, 0xac, 0xc4,
++ 0xb8, 0xa8, 0xf0, 0x90, 0x68, 0x44, 0x00, 0x00,
++ 0x00, 0x0f, 0x49, 0x2f, 0x2b, 0x0a, 0x1b, 0x2a,
++ 0x4b, 0x0f, 0x14, 0x14, 0x27, 0x44, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xfc, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0xfc, 0x54, 0x7c, 0x8c, 0x0c, 0x00, 0x00,
++ 0x00, 0x0f, 0x4a, 0x2a, 0x2b, 0x0a, 0x19, 0x2a,
++ 0x4b, 0x0d, 0x1f, 0x13, 0x24, 0x48, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xfc, 0x28, 0x90, 0xfc, 0x14,
++ 0xd8, 0x5c, 0xd0, 0x70, 0xd0, 0x8c, 0x00, 0x00,
++ 0x00, 0x0f, 0x49, 0x2f, 0x28, 0x0b, 0x1f, 0x29,
++ 0x4b, 0x0d, 0x11, 0x11, 0x21, 0x47, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xfc, 0x40, 0xf8, 0xfc, 0x50,
++ 0xf8, 0x14, 0xf0, 0xf8, 0x70, 0x88, 0x00, 0x00,
++ 0x00, 0x0f, 0x4b, 0x28, 0x2f, 0x0f, 0x1b, 0x2b,
++ 0x4e, 0x0b, 0x13, 0x12, 0x23, 0x42, 0x00, 0x00,
++ 0x80, 0xfc, 0xf8, 0x40, 0xfc, 0x58, 0x58, 0xf8,
++ 0x20, 0xf8, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x52, 0x3f, 0x32, 0x1f, 0x1a, 0x3a,
++ 0x5f, 0x17, 0x16, 0x2a, 0x32, 0x42, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf8, 0x28, 0xd8, 0xf8, 0xc8,
++ 0xf8, 0x78, 0xc8, 0xf8, 0x28, 0xc4, 0x00, 0x00,
++ 0x00, 0x1f, 0x51, 0x3e, 0x32, 0x12, 0x1f, 0x32,
++ 0x57, 0x16, 0x1a, 0x32, 0x22, 0x42, 0x00, 0x00,
++ 0x80, 0xfc, 0x20, 0xf8, 0x70, 0xfc, 0xf8, 0x48,
++ 0x78, 0xf8, 0xc8, 0x78, 0x28, 0xc4, 0x00, 0x00,
++ 0x00, 0x1f, 0x50, 0x37, 0x37, 0x15, 0x17, 0x35,
++ 0x57, 0x14, 0x15, 0x29, 0x2f, 0x50, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xfc, 0xb8, 0x10, 0xfc, 0x98,
++ 0x74, 0x40, 0x78, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x52, 0x37, 0x39, 0x1f, 0x1a, 0x3f,
++ 0x5a, 0x1f, 0x15, 0x2a, 0x2a, 0x50, 0x00, 0x00,
++ 0x80, 0xfc, 0x48, 0xa8, 0x30, 0xfc, 0x90, 0xb8,
++ 0x90, 0xfc, 0x90, 0xd0, 0xd0, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x55, 0x3a, 0x35, 0x17, 0x14, 0x37,
++ 0x5f, 0x1a, 0x1f, 0x28, 0x28, 0x47, 0x00, 0x00,
++ 0x80, 0xfc, 0x68, 0xa8, 0x7c, 0xa8, 0xe8, 0xbc,
++ 0xa8, 0xbc, 0xa8, 0x28, 0xbc, 0xa0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x54, 0x37, 0x34, 0x13, 0x1b, 0x3b,
++ 0x5b, 0x1a, 0x1b, 0x2f, 0x22, 0x4c, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0x7c, 0x90, 0xb8, 0xa8, 0xb8,
++ 0xa8, 0xb8, 0xa8, 0xf8, 0x98, 0x64, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x01, 0x22, 0x12, 0x0c, 0x08,
++ 0x10, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x20, 0xc8, 0x88, 0x50, 0x20,
++ 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x1e, 0x02, 0x24, 0x14, 0x08, 0x1f, 0x21, 0x41,
++ 0x3f, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x90, 0x90, 0x64, 0x44, 0x28, 0xf0, 0x08, 0x04,
++ 0xf8, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x1e, 0x02, 0x24, 0x18, 0x1c, 0x64, 0x04, 0x3d,
++ 0x23, 0x3c, 0x24, 0x04, 0x08, 0x33, 0x00, 0x00,
++ 0x90, 0x94, 0x64, 0x28, 0xf8, 0xa4, 0xa8, 0x18,
++ 0xf0, 0x90, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x01, 0x02, 0x3f, 0x20, 0x3f, 0x20, 0x3f, 0x20,
++ 0x10, 0x11, 0x1e, 0x10, 0x10, 0x0f, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08,
++ 0x30, 0xc0, 0x00, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x01, 0x02, 0x3f, 0x20, 0x3f, 0x20, 0x3f, 0x24,
++ 0x04, 0x04, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x88,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x11, 0x21, 0x79, 0x49, 0x49, 0x79, 0x49,
++ 0x49, 0x4a, 0x7a, 0x44, 0x09, 0x16, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x01, 0x7f,
++ 0x02, 0x05, 0x19, 0x6f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x80, 0x40, 0x30, 0xec, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x27, 0x79, 0x49, 0x4a, 0x7d, 0x49,
++ 0x48, 0x48, 0x78, 0x48, 0x03, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x08, 0x14, 0x14, 0x10,
++ 0xa0, 0xa0, 0x40, 0xa0, 0x18, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x23, 0x7a, 0x4d, 0x48, 0x78, 0x4f,
++ 0x48, 0x78, 0x48, 0x01, 0x06, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xf0, 0x00, 0x00, 0xfc,
++ 0xa0, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x11, 0x21, 0x79, 0x4a, 0x4c, 0x7f, 0x48,
++ 0x49, 0x49, 0x79, 0x49, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x1c, 0x1a, 0x28, 0x4a, 0x0d,
++ 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0xfc, 0x90, 0x90, 0x90, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x12, 0x22, 0x7b, 0x48, 0x4f, 0x78, 0x4b,
++ 0x4a, 0x4b, 0x79, 0x48, 0x07, 0x00, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x00, 0xf8,
++ 0x08, 0xf8, 0x10, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x2a, 0x2c, 0x29, 0x3e, 0x32,
++ 0x2a, 0x24, 0x24, 0x2a, 0x32, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x84, 0xf4, 0x94, 0x94,
++ 0xf4, 0x98, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x0c, 0x12, 0x7d, 0x14, 0x15, 0x2b, 0x48,
++ 0x1e, 0x32, 0x4c, 0x0d, 0x13, 0x62, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0xa8, 0xb0, 0xa0, 0xf8, 0xc8,
++ 0xa8, 0xb0, 0x90, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x2a, 0x7f, 0x08, 0x3e, 0x2a, 0x3e,
++ 0x2a, 0x3e, 0x08, 0x7f, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0xa8, 0xb0, 0xa0, 0xf8, 0xc8,
++ 0xa8, 0xb0, 0x90, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x2b, 0x2c, 0x28, 0x3e, 0x32,
++ 0x2a, 0x24, 0x24, 0x2b, 0x32, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0xa8, 0xfc, 0x20, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x1e, 0x2a, 0x6e, 0x3e, 0x2a, 0x14, 0x1e,
++ 0x2a, 0x6e, 0x3e, 0x2a, 0x12, 0x25, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0xa8, 0xb0, 0xa0, 0xf8, 0xc8,
++ 0xa8, 0xb0, 0x90, 0xb0, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x03,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x7f, 0x02, 0x04, 0x3f, 0x00,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x40, 0x70, 0x88, 0x00,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x1f, 0x60, 0x0f, 0x08, 0x0f,
++ 0x00, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0xf0, 0x0c, 0xe0, 0x20, 0xe0,
++ 0x00, 0xf0, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x7f, 0x01, 0x01, 0x1e, 0x02, 0x7f, 0x01,
++ 0x1e, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0xfc, 0x60, 0xc4, 0xb4, 0xec, 0x20, 0xc4,
++ 0x34, 0xfc, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x7f, 0x1f, 0x01, 0x7f, 0x14,
++ 0x22, 0x5f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xfc, 0xf0, 0x00, 0xfc, 0x90,
++ 0x48, 0xf4, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x09, 0x31, 0x27, 0x3b, 0x23, 0x3d, 0x29, 0x23,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0xb8, 0x88, 0x78, 0x28, 0x08,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x11, 0x1f, 0x10, 0x17, 0x14,
++ 0x17, 0x14, 0x17, 0x2f, 0x29, 0x5f, 0x00, 0x00,
++ 0x00, 0xf0, 0xfc, 0xe8, 0x10, 0xf0, 0xf0, 0x90,
++ 0xf0, 0x90, 0xf0, 0xf8, 0x48, 0xfc, 0x00, 0x00,
++ 0x11, 0x09, 0x41, 0x21, 0x0f, 0x11, 0x13, 0x24,
++ 0x21, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0xf0, 0x10, 0xf0, 0xf0, 0xfc, 0x00, 0xfc, 0xa4,
++ 0x58, 0xf0, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x23, 0x13, 0x43, 0x2f, 0x13,
++ 0x2d, 0x42, 0x1f, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0xd0, 0xf0, 0xfc, 0xf8,
++ 0x48, 0xb0, 0xf0, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x4a, 0x4c, 0x7b, 0x48, 0x48,
++ 0x79, 0x49, 0x48, 0x78, 0x48, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x10, 0x08, 0xf4, 0x80, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4b, 0x4a, 0x7a, 0x48, 0x48,
++ 0x78, 0x48, 0x49, 0x7a, 0x4c, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x48, 0x40, 0x60, 0x60,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x49, 0x49, 0x79, 0x4a, 0x4a,
++ 0x7c, 0x48, 0x48, 0x78, 0x49, 0x0e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x50, 0x48, 0x44, 0x4c, 0x48,
++ 0x50, 0xd0, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x4a, 0x4a, 0x7a, 0x4a, 0x4a,
++ 0x7b, 0x4a, 0x4a, 0x78, 0x48, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x78, 0x48, 0x48, 0x48,
++ 0xf8, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4f, 0x48, 0x7a, 0x49, 0x48,
++ 0x78, 0x48, 0x48, 0x79, 0x4f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x50, 0x90, 0xa0,
++ 0x60, 0x60, 0x90, 0x38, 0xc4, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4a, 0x4b, 0x7a, 0x4a, 0x4a,
++ 0x7a, 0x4a, 0x4a, 0x7c, 0x4c, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x88, 0x80, 0x88,
++ 0xb0, 0xc0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x11, 0x1e, 0x0f, 0x27, 0x24, 0x27, 0x24,
++ 0x27, 0x24, 0x27, 0x3f, 0x0c, 0x70, 0x00, 0x00,
++ 0x30, 0xc0, 0x08, 0xf8, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xfc, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x17, 0x78, 0x1f, 0x10,
++ 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x48, 0x70, 0x44, 0x44, 0x3c, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4a, 0x4a, 0x7a, 0x4a, 0x4a,
++ 0x7a, 0x4a, 0x4a, 0x7a, 0x4b, 0x0c, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0x90, 0x94, 0xf8, 0x90, 0x90,
++ 0x90, 0x90, 0xb0, 0xd4, 0x14, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4b, 0x48, 0x78, 0x4f, 0x48,
++ 0x78, 0x49, 0x4a, 0x7c, 0x48, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0xe0,
++ 0xe0, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x09, 0x0f, 0x12, 0x7f, 0x08, 0x1f, 0x68,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x20, 0xf0, 0x90, 0xfc, 0x20, 0xf0, 0x2c,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4f, 0x49, 0x79, 0x4b, 0x4c,
++ 0x78, 0x4f, 0x48, 0x78, 0x48, 0x00, 0x00, 0x00,
++ 0x40, 0x60, 0x90, 0xe8, 0x48, 0x40, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x00, 0x78, 0x4b, 0x48, 0x7b, 0x4a, 0x4b,
++ 0x7a, 0x48, 0x49, 0x7a, 0x4c, 0x00, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xf8, 0x48, 0xf8, 0x40, 0xfc,
++ 0xc4, 0xc4, 0x44, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4a, 0x4a, 0x7a, 0x4b, 0x4a,
++ 0x7a, 0x4a, 0x4a, 0x7c, 0x4f, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4b, 0x4a, 0x7a, 0x4b, 0x4a,
++ 0x78, 0x48, 0x49, 0x79, 0x4a, 0x0c, 0x00, 0x00,
++ 0x80, 0x38, 0x08, 0xb8, 0x08, 0x08, 0xf8, 0xa8,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x4b, 0x48, 0x7f, 0x48, 0x4b,
++ 0x78, 0x4a, 0x4a, 0x7b, 0x4c, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0x48, 0x40, 0x7c, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x00, 0x7b, 0x48, 0x49, 0x78, 0x4f, 0x48, 0x7b,
++ 0x4a, 0x4a, 0x7b, 0x4a, 0x02, 0x02, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0xf8,
++ 0x48, 0x48, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4b, 0x7a, 0x4b, 0x4a,
++ 0x78, 0x49, 0x4f, 0x78, 0x48, 0x00, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x88,
++ 0xa0, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x2f, 0x49, 0x12, 0x04, 0x1f,
++ 0x68, 0x0f, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0xfc, 0xe8, 0x20, 0x90, 0x40, 0xf0,
++ 0x2c, 0xe0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x3f, 0x01, 0x1f, 0x01, 0x7f,
++ 0x04, 0x3f, 0x01, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x00, 0xf0, 0x00, 0xfc,
++ 0x40, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x48, 0x48, 0x7f, 0x48, 0x48,
++ 0x79, 0x4f, 0x49, 0x79, 0x49, 0x01, 0x00, 0x00,
++ 0x80, 0x88, 0xf8, 0x90, 0xa0, 0xfc, 0x50, 0x88,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4d, 0x48, 0x7b, 0x48, 0x4f,
++ 0x78, 0x4b, 0x4a, 0x7a, 0x4b, 0x02, 0x00, 0x00,
++ 0x40, 0xfc, 0x58, 0xe0, 0x40, 0xf8, 0x40, 0xfc,
++ 0x40, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x79, 0x49, 0x4a, 0x7a, 0x4a, 0x4a, 0x7a,
++ 0x4a, 0x4a, 0x7a, 0x4b, 0x01, 0x06, 0x00, 0x00,
++ 0x08, 0x34, 0xc4, 0xfc, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0xfc, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4d, 0x49, 0x79, 0x49, 0x49,
++ 0x78, 0x4f, 0x48, 0x78, 0x49, 0x06, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x40, 0xfc, 0x00, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x7a, 0x49, 0x4b, 0x7a, 0x4d, 0x49, 0x79,
++ 0x49, 0x48, 0x7b, 0x48, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0x48, 0x50, 0xfc, 0x08, 0xf0, 0x10, 0x10,
++ 0xf0, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x77, 0x51, 0x51, 0x70, 0x57, 0x54,
++ 0x77, 0x55, 0x55, 0x76, 0x54, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xf0, 0x40, 0xfc, 0x44,
++ 0x74, 0x54, 0x54, 0xec, 0x44, 0x4c, 0x00, 0x00,
++ 0x00, 0x07, 0x72, 0x5f, 0x54, 0x74, 0x57, 0x54,
++ 0x77, 0x54, 0x57, 0x7c, 0x50, 0x00, 0x00, 0x00,
++ 0x20, 0xa0, 0x20, 0xe0, 0xbc, 0xe8, 0xa8, 0xa8,
++ 0xa8, 0x90, 0x90, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4b, 0x4f, 0x7b, 0x4a, 0x4b,
++ 0x7a, 0x4b, 0x4a, 0x7b, 0x49, 0x06, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xf8, 0xfc, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x49, 0x4b, 0x7a, 0x4d, 0x4a,
++ 0x78, 0x49, 0x4e, 0x78, 0x49, 0x0e, 0x00, 0x00,
++ 0x18, 0xe4, 0x48, 0x30, 0xfc, 0x48, 0xa8, 0x94,
++ 0xf0, 0xf8, 0x90, 0x60, 0xb0, 0x0c, 0x00, 0x00,
++ 0x3e, 0x22, 0x3e, 0x3e, 0x22, 0x3e, 0x08, 0x0f,
++ 0x18, 0x2f, 0x4f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0xf8, 0x88, 0xf8, 0xf8, 0x88, 0xf8, 0x40, 0xf8,
++ 0x80, 0xf0, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x49, 0x4b, 0x7c, 0x4b, 0x4a,
++ 0x7a, 0x4b, 0x49, 0x79, 0x4a, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xb8, 0xa8,
++ 0xa8, 0xb8, 0x10, 0x98, 0x64, 0x44, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x3e, 0x22, 0x3e, 0x17, 0x7f,
++ 0x10, 0x1f, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x48, 0x30, 0xd8, 0xf4,
++ 0x10, 0xf0, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x4b, 0x4a, 0x7a, 0x4b, 0x4b,
++ 0x7a, 0x4a, 0x4a, 0x7c, 0x4c, 0x08, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xfc, 0xa8, 0x98, 0x70, 0xfc,
++ 0x70, 0x70, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x01, 0x07, 0x79, 0x4b, 0x4a, 0x7c, 0x4f, 0x48,
++ 0x7f, 0x49, 0x4e, 0x79, 0x4e, 0x00, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xfc, 0xe8, 0x00, 0xfc, 0xc8,
++ 0x68, 0xf0, 0x70, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x3e, 0x22, 0x3e, 0x3e, 0x22, 0x3e, 0x0f, 0x1b,
++ 0x6b, 0x0f, 0x3f, 0x04, 0x03, 0x7c, 0x00, 0x00,
++ 0xf8, 0x88, 0xf8, 0xf8, 0x88, 0xf8, 0xf8, 0xe0,
++ 0xe0, 0xf8, 0xe0, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x01, 0x3f, 0x07, 0x17, 0x17, 0x17, 0x1f, 0x7f,
++ 0x1c, 0x5d, 0x5d, 0x5d, 0x7f, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xfc,
++ 0x70, 0x70, 0x70, 0x70, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x74, 0x57, 0x57, 0x77, 0x57, 0x56,
++ 0x77, 0x55, 0x57, 0x79, 0x48, 0x17, 0x00, 0x00,
++ 0x00, 0xfc, 0x04, 0xfc, 0x58, 0x58, 0xf8, 0xa8,
++ 0xf8, 0xfc, 0xf4, 0xf4, 0x7c, 0x98, 0x00, 0x00,
++ 0x00, 0x3f, 0x12, 0x0c, 0x04, 0x7f, 0x0d, 0x0e,
++ 0x14, 0x14, 0x24, 0x44, 0x04, 0x0c, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0xf4, 0x00, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x3f, 0x08, 0x0f, 0x11,
++ 0x21, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x40, 0x30, 0xc8, 0x00, 0xf8, 0x00,
++ 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x1f, 0x28, 0x28, 0x49, 0x7e,
++ 0x09, 0x0c, 0x12, 0x12, 0x20, 0x43, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0xfc, 0x70, 0xa8, 0x24, 0x20,
++ 0xfc, 0x48, 0xc8, 0x30, 0x68, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x08, 0x08, 0x08, 0x10, 0x1e, 0x32,
++ 0x52, 0x12, 0x12, 0x1e, 0x13, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x7e, 0x12, 0x12, 0x13, 0x3e, 0x2a, 0x6a,
++ 0x2a, 0x2a, 0x39, 0x28, 0x20, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xa8, 0x28, 0x28, 0x28, 0x28,
++ 0xa8, 0xa8, 0xc8, 0x48, 0x88, 0x18, 0x00, 0x00,
++ 0x01, 0x7f, 0x11, 0x11, 0x11, 0x3d, 0x25, 0x65,
++ 0x25, 0x25, 0x3d, 0x25, 0x21, 0x06, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x24, 0xe8, 0x30, 0x20,
++ 0x20, 0x20, 0x20, 0x64, 0xa4, 0x1c, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x13, 0x12, 0x3a, 0x2b, 0x6a,
++ 0x2a, 0x2a, 0x3a, 0x2c, 0x24, 0x0b, 0x00, 0x00,
++ 0x20, 0xfc, 0x50, 0xfc, 0x50, 0x70, 0xfc, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x10, 0x10, 0x3c, 0x24, 0x64,
++ 0x24, 0x24, 0x3c, 0x24, 0x23, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x13, 0x12, 0x3a, 0x2a, 0x6a,
++ 0x2a, 0x2b, 0x3d, 0x25, 0x29, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0xfc, 0x34, 0xfc, 0x04, 0x0c, 0x00, 0x00,
++ 0x00, 0x7e, 0x13, 0x10, 0x10, 0x3f, 0x24, 0x64,
++ 0x27, 0x24, 0x3c, 0x24, 0x27, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7e, 0x13, 0x10, 0x10, 0x3c, 0x25, 0x66,
++ 0x24, 0x27, 0x3c, 0x24, 0x20, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x90, 0x90, 0x98, 0x64, 0x64,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x7c, 0x13, 0x10, 0x10, 0x3c, 0x24, 0x65,
++ 0x27, 0x25, 0x3d, 0x25, 0x21, 0x01, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0x90, 0xa0, 0xa4, 0x28,
++ 0x30, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x0b, 0x42, 0x23, 0x0a, 0x12, 0x24, 0x2b,
++ 0x7f, 0x04, 0x1f, 0x68, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x48, 0xf8, 0x90, 0x60, 0xf0, 0x0c,
++ 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x12, 0x12, 0x3b, 0x2a, 0x6a,
++ 0x2b, 0x2a, 0x3a, 0x2c, 0x24, 0x09, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xa8, 0xb8, 0xa8, 0xa8,
++ 0xb8, 0xa8, 0xa8, 0xc8, 0xc8, 0x98, 0x00, 0x00,
++ 0x00, 0x7e, 0x13, 0x11, 0x10, 0x3c, 0x27, 0x64,
++ 0x25, 0x25, 0x3d, 0x25, 0x21, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0x90, 0xa0, 0xfc, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x11, 0x10, 0x3f, 0x26, 0x65,
++ 0x25, 0x24, 0x3d, 0x26, 0x20, 0x00, 0x00, 0x00,
++ 0x80, 0xf0, 0x10, 0xe0, 0x20, 0xfc, 0x68, 0x68,
++ 0x50, 0xd0, 0x48, 0x44, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x11, 0x11, 0x3d, 0x24, 0x64,
++ 0x25, 0x27, 0x3d, 0x25, 0x21, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x80, 0xf8,
++ 0x48, 0x68, 0x98, 0xe8, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x10, 0x11, 0x3d, 0x25, 0x65,
++ 0x25, 0x25, 0x3d, 0x24, 0x21, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x40, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x7c, 0x13, 0x10, 0x10, 0x3c, 0x24, 0x64,
++ 0x27, 0x25, 0x3d, 0x25, 0x21, 0x01, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf0, 0x90, 0xf0, 0x90,
++ 0xfc, 0x50, 0x54, 0x8c, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x7a, 0x14, 0x12, 0x12, 0x38, 0x2b, 0x6a,
++ 0x2b, 0x2a, 0x3a, 0x2b, 0x23, 0x02, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0x48, 0x48, 0x80, 0xf8, 0x28,
++ 0xa8, 0x48, 0xa8, 0x18, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7e, 0x13, 0x10, 0x17, 0x3c, 0x25, 0x65,
++ 0x25, 0x25, 0x3d, 0x24, 0x27, 0x00, 0x00, 0x00,
++ 0x40, 0x48, 0xf8, 0x00, 0xfc, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x11, 0x11, 0x3f, 0x26, 0x65,
++ 0x25, 0x25, 0x3d, 0x25, 0x21, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x70, 0x50, 0xfc, 0x08, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x7c, 0x13, 0x10, 0x11, 0x3c, 0x27, 0x64,
++ 0x24, 0x25, 0x3d, 0x26, 0x27, 0x00, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x80,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x7d, 0x11, 0x12, 0x16, 0x39, 0x29, 0x6a,
++ 0x2f, 0x28, 0x39, 0x2a, 0x24, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0xbc, 0xa8, 0xa8, 0xfc, 0x48, 0x48,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x00, 0x7d, 0x11, 0x11, 0x11, 0x3d, 0x25, 0x65,
++ 0x25, 0x25, 0x3e, 0x22, 0x04, 0x09, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x50, 0x50, 0xf8, 0x50,
++ 0x50, 0xfc, 0xa8, 0x90, 0xe8, 0x84, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x11, 0x11, 0x3d, 0x25, 0x65,
++ 0x25, 0x24, 0x3f, 0x22, 0x22, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x20, 0xf8, 0x20, 0x20,
++ 0xfc, 0x54, 0x2c, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x00, 0x7e, 0x13, 0x11, 0x10, 0x3f, 0x26, 0x64,
++ 0x27, 0x24, 0x3c, 0x24, 0x21, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0x48, 0x40,
++ 0xfc, 0x40, 0x78, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x07, 0x1c, 0x67, 0x04, 0x7e,
++ 0x10, 0x1e, 0x32, 0x53, 0x1e, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xfc,
++ 0x40, 0x78, 0xc8, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x3f, 0x2a, 0x3e, 0x21,
++ 0x7f, 0x04, 0x1f, 0x68, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x70, 0x54, 0x8c, 0xf8, 0x50, 0x70, 0x8c,
++ 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x11, 0x10, 0x3f, 0x25, 0x65,
++ 0x25, 0x25, 0x3d, 0x25, 0x21, 0x06, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x11, 0x11, 0x3d, 0x25, 0x65,
++ 0x24, 0x27, 0x3c, 0x27, 0x20, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0xfc, 0x10, 0xfc, 0x90, 0x70, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x17, 0x11, 0x3f, 0x29, 0x69,
++ 0x2e, 0x2f, 0x38, 0x28, 0x21, 0x06, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xbc, 0x10, 0xbc,
++ 0x00, 0xfc, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x01, 0x7e, 0x12, 0x11, 0x11, 0x3f, 0x24, 0x65,
++ 0x25, 0x25, 0x3c, 0x24, 0x27, 0x00, 0x00, 0x00,
++ 0xd0, 0x54, 0xa4, 0xa8, 0x10, 0xf8, 0x04, 0xf8,
++ 0x08, 0xf8, 0x90, 0x60, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x13, 0x12, 0x3b, 0x2a, 0x6b,
++ 0x2a, 0x28, 0x3f, 0x28, 0x21, 0x06, 0x00, 0x00,
++ 0x40, 0xf8, 0xe8, 0x58, 0xe8, 0xf8, 0xe8, 0x58,
++ 0x48, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x01, 0x7f, 0x10, 0x13, 0x10, 0x3f, 0x28, 0x6f,
++ 0x2f, 0x29, 0x39, 0x2f, 0x21, 0x03, 0x00, 0x00,
++ 0x10, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0xa8, 0x24,
++ 0xfc, 0x28, 0x98, 0x34, 0xcc, 0x04, 0x00, 0x00,
++ 0x02, 0x7d, 0x13, 0x12, 0x15, 0x39, 0x29, 0x68,
++ 0x2b, 0x2a, 0x3b, 0x2a, 0x23, 0x02, 0x00, 0x00,
++ 0x48, 0x50, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x7c, 0x17, 0x14, 0x13, 0x3a, 0x2b, 0x6d,
++ 0x29, 0x2f, 0x3b, 0x2a, 0x24, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x28, 0x90, 0x90, 0x7c, 0x94, 0x58,
++ 0x50, 0xdc, 0x50, 0xf0, 0x50, 0x8c, 0x00, 0x00,
++ 0x10, 0x12, 0x7d, 0x1a, 0x36, 0x51, 0x12, 0x7f,
++ 0x04, 0x1f, 0x62, 0x0f, 0x34, 0x07, 0x00, 0x00,
++ 0x90, 0x90, 0x7c, 0x90, 0xb8, 0x54, 0x90, 0xfc,
++ 0x20, 0xf0, 0x0c, 0xf0, 0x10, 0xf0, 0x00, 0x00,
++ 0x02, 0x7e, 0x13, 0x15, 0x12, 0x3a, 0x2d, 0x6f,
++ 0x28, 0x2f, 0x38, 0x29, 0x26, 0x00, 0x00, 0x00,
++ 0x48, 0x48, 0xec, 0xb4, 0xe8, 0xa8, 0xf4, 0x5c,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x00, 0x7f, 0x08, 0x2a, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x01, 0x7e, 0x08, 0x2a, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xe8, 0xa8, 0xa8,
++ 0xa8, 0xe8, 0xa8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x00, 0x7f, 0x08, 0x2a, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x2b, 0x49, 0x08, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0xa0, 0xa0, 0xfc, 0xa0, 0x90,
++ 0x90, 0xb4, 0xcc, 0x0c, 0xf4, 0x04, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x1f, 0x21, 0x3f, 0x20, 0x0f,
++ 0x00, 0x7f, 0x05, 0x19, 0x61, 0x03, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0xf0, 0x08, 0xf8, 0x08, 0xe0,
++ 0x00, 0xfc, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x00, 0x7f, 0x08, 0x2b, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0xa0, 0xa0, 0x3c, 0x20,
++ 0x20, 0x3c, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x00, 0x7f, 0x08, 0x2a, 0x2a,
++ 0x2b, 0x2b, 0x2a, 0x28, 0x48, 0x09, 0x00, 0x00,
++ 0x20, 0x10, 0x50, 0x48, 0x48, 0xc8, 0xd8, 0xd4,
++ 0x54, 0x64, 0x60, 0x48, 0xc8, 0x38, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x00, 0x7f, 0x08, 0x2a, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x29, 0x4a, 0x0c, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0xfc, 0x40, 0x48, 0x68,
++ 0x68, 0xb0, 0x90, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x03, 0x7e, 0x08, 0x2a, 0x2a,
++ 0x2a, 0x2a, 0x2b, 0x28, 0x49, 0x0a, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0xfc, 0x90, 0xf0, 0x90, 0xf0,
++ 0x90, 0x90, 0xfc, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x00, 0x7e, 0x09, 0x2b, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x2b, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x78, 0x88, 0xf0, 0x10, 0xfc, 0x20, 0xb4,
++ 0xb8, 0x70, 0xa8, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x01, 0x3d, 0x03, 0x01, 0x7f, 0x11, 0x37, 0x35,
++ 0x34, 0x37, 0x34, 0x34, 0x51, 0x16, 0x00, 0x00,
++ 0x00, 0x78, 0xa8, 0x28, 0xa8, 0xa8, 0x48, 0x98,
++ 0x40, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x00, 0x7f, 0x08, 0x2a, 0x2a,
++ 0x2b, 0x2a, 0x2a, 0x2b, 0x48, 0x09, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x50, 0x94,
++ 0x4c, 0x70, 0xd0, 0x20, 0x50, 0x8c, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x7e, 0x08, 0x2a, 0x2a,
++ 0x2a, 0x2b, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x00, 0xf8, 0x88, 0xf8,
++ 0x50, 0xfc, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x01, 0x7f, 0x02, 0x7d, 0x15, 0x15, 0x2d, 0x50,
++ 0x1f, 0x10, 0x1f, 0x15, 0x25, 0x49, 0x00, 0x00,
++ 0x00, 0xfc, 0x98, 0x70, 0x50, 0x50, 0xe8, 0x14,
++ 0xf0, 0x10, 0xf0, 0x50, 0x30, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x7e, 0x08, 0x2a, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x2b, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xdc, 0x54, 0xdc, 0x00, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x03, 0x7e, 0x13, 0x34, 0x37,
++ 0x35, 0x35, 0x35, 0x30, 0x57, 0x10, 0x00, 0x00,
++ 0xa0, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x00, 0xfc,
++ 0xf0, 0x10, 0xf0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x03, 0x02, 0x7f, 0x10, 0x37, 0x35,
++ 0x34, 0x37, 0x34, 0x37, 0x51, 0x13, 0x00, 0x00,
++ 0x40, 0xfc, 0xb8, 0xa8, 0xb8, 0xa0, 0xf8, 0xf0,
++ 0xa0, 0xfc, 0xc8, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x1f, 0x11, 0x11, 0x1f, 0x01,
++ 0x3f, 0x21, 0x21, 0x3f, 0x20, 0x20, 0x00, 0x00,
++ 0x38, 0xc0, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x00,
++ 0xf8, 0x48, 0x68, 0x98, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x1f, 0x01,
++ 0x3f, 0x21, 0x21, 0x3f, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x48, 0x68, 0x98, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x7f, 0x01, 0x1f, 0x01, 0x7f, 0x01,
++ 0x1f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x70, 0x80, 0xfc, 0x00, 0xf0, 0x10, 0xfc, 0x10,
++ 0xf0, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x03, 0x05, 0x39, 0x09, 0x09, 0x7f, 0x09, 0x1d,
++ 0x1b, 0x2b, 0x49, 0x09, 0x09, 0x0b, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x24, 0xe8, 0x30, 0x20,
++ 0x20, 0x20, 0x20, 0x64, 0xa4, 0x1c, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x08, 0x08, 0x7e, 0x08, 0x1d,
++ 0x1a, 0x2a, 0x48, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xfc,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x08, 0x08, 0x7f, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0x88, 0x88, 0x88,
++ 0xf8, 0x88, 0x80, 0x80, 0xfc, 0x80, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x08, 0x09, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x48, 0xfc, 0x40, 0x48, 0x68,
++ 0x68, 0xb0, 0x90, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x09, 0x08, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x09, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x70, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x08, 0x08, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x49, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x00, 0xf8,
++ 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x09, 0x08, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0xb0, 0xa8, 0x24, 0x20, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x0b, 0x08, 0x7e, 0x0c, 0x1a,
++ 0x1a, 0x28, 0x4b, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0xfc, 0x90, 0xf0, 0x90, 0xf0,
++ 0x90, 0x90, 0xfc, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x02, 0x04, 0x39, 0x08, 0x09, 0x7f, 0x09, 0x1d,
++ 0x1b, 0x2b, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x05, 0x39, 0x09, 0x09, 0x7f, 0x09, 0x1d,
++ 0x1b, 0x2b, 0x49, 0x0a, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8, 0x08,
++ 0xe8, 0xa8, 0xa8, 0xe8, 0xa8, 0x18, 0x00, 0x00,
++ 0x01, 0x7f, 0x1f, 0x17, 0x14, 0x17, 0x1f, 0x00,
++ 0x1f, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0xd0, 0x50, 0xd0, 0xf0, 0x60,
++ 0x80, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x1f, 0x17, 0x14, 0x17, 0x1f, 0x00,
++ 0x1f, 0x00, 0x7f, 0x0d, 0x31, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0xd0, 0x50, 0xd0, 0xf0, 0x00,
++ 0xf0, 0x00, 0xfc, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x08, 0x09, 0x7e, 0x0c, 0x1a,
++ 0x1a, 0x28, 0x49, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x18, 0xf0, 0xa8, 0xa4, 0x04, 0x20, 0xf8, 0xa8,
++ 0xf8, 0xa8, 0xfc, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x02, 0x04, 0x39, 0x09, 0x0a, 0x7e, 0x09, 0x1d,
++ 0x1b, 0x2b, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x08, 0x30, 0xc8, 0x24, 0x24, 0x40, 0xb8, 0x08,
++ 0x08, 0xb8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x7f, 0x0f, 0x08, 0x0f, 0x3f, 0x27, 0x24,
++ 0x27, 0x1f, 0x7f, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0xe0, 0x20, 0xe0, 0xf8, 0xc8, 0x48,
++ 0xf8, 0xc0, 0xfc, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x02, 0x05, 0x39, 0x09, 0x09, 0x7f, 0x08, 0x1d,
++ 0x1a, 0x2a, 0x4b, 0x08, 0x08, 0x0b, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xa0, 0x24,
++ 0x5c, 0xf0, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x02, 0x04, 0x39, 0x09, 0x0a, 0x7e, 0x09, 0x1c,
++ 0x1a, 0x2b, 0x4a, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x90, 0xa8, 0x24, 0x50,
++ 0x88, 0xfc, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x02, 0x05, 0x38, 0x08, 0x08, 0x7e, 0x08, 0x1c,
++ 0x1b, 0x2a, 0x48, 0x09, 0x0a, 0x08, 0x00, 0x00,
++ 0x20, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x28,
++ 0xf4, 0x40, 0xa8, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x02, 0x05, 0x39, 0x09, 0x09, 0x7f, 0x09, 0x1d,
++ 0x1b, 0x2b, 0x49, 0x0b, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x20, 0xac, 0xac, 0x20,
++ 0x60, 0x78, 0xa0, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x08, 0x77, 0x11, 0x11, 0x7e, 0x17, 0x38,
++ 0x37, 0x56, 0x52, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x50, 0x50, 0xe8, 0xfc, 0x00,
++ 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x09, 0x71, 0x11, 0x17, 0x7c, 0x13, 0x3a,
++ 0x37, 0x56, 0x53, 0x16, 0x14, 0x1b, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x40, 0xfc, 0x28, 0xfc, 0x20,
++ 0xe8, 0xd8, 0xb4, 0xdc, 0xac, 0x44, 0x00, 0x00,
++ 0x04, 0x09, 0x71, 0x13, 0x10, 0x7d, 0x11, 0x3b,
++ 0x34, 0x55, 0x50, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x08, 0xf0, 0x48, 0xf4, 0x40, 0xf0, 0xf8, 0xfc,
++ 0x08, 0xf8, 0x40, 0xa8, 0x94, 0x70, 0x00, 0x00,
++ 0x04, 0x09, 0x76, 0x13, 0x12, 0x7f, 0x13, 0x3f,
++ 0x37, 0x54, 0x53, 0x17, 0x13, 0x10, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xf8, 0xa8, 0xb8, 0xa0, 0xbc,
++ 0xbc, 0xac, 0xb4, 0xbc, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x0f, 0x73, 0x12, 0x13, 0x7c, 0x13, 0x39,
++ 0x34, 0x57, 0x50, 0x17, 0x11, 0x13, 0x00, 0x00,
++ 0x40, 0xfc, 0xb8, 0xa8, 0xb8, 0xa0, 0xf8, 0xf0,
++ 0xa0, 0xfc, 0xc8, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x4c, 0x30, 0x1f, 0x00,
++ 0x1f, 0x10, 0x3f, 0x20, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x88, 0x78, 0xf0, 0x10,
++ 0xf0, 0x00, 0xf8, 0x08, 0x08, 0xf0, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x4c, 0x34, 0x04, 0x3f,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x88, 0x78, 0x40, 0xf8,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x4c, 0x30, 0x08, 0x0a,
++ 0x73, 0x14, 0x0c, 0x0a, 0x1f, 0x62, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x88, 0x78, 0x40, 0x40,
++ 0xf8, 0x48, 0x48, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x49, 0x32, 0x1f, 0x11,
++ 0x17, 0x1e, 0x11, 0x16, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0x48, 0x38, 0xf0, 0x10,
++ 0xd0, 0x50, 0x90, 0x50, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x48, 0x32, 0x02, 0x32,
++ 0x0a, 0x0e, 0x74, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x88, 0xf8, 0x88, 0xb0,
++ 0xc0, 0xb0, 0x88, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x3f, 0x22, 0x4c, 0x30, 0x1f, 0x02, 0x7f,
++ 0x02, 0x1f, 0x07, 0x1c, 0x67, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x88, 0x78, 0xf0, 0x10, 0xfc,
++ 0x10, 0xf0, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x4c, 0x35, 0x05, 0x0f,
++ 0x11, 0x7f, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x88, 0x78, 0x00, 0xf0,
++ 0x00, 0xfc, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x4c, 0x30, 0x0f, 0x09,
++ 0x09, 0x3f, 0x27, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x88, 0x78, 0xe0, 0xe0,
++ 0x20, 0xf8, 0xc8, 0x48, 0xc8, 0x58, 0x00, 0x00,
++ 0x01, 0x3f, 0x29, 0x77, 0x3f, 0x1f, 0x12, 0x1e,
++ 0x3e, 0x22, 0x3e, 0x3e, 0x22, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x28, 0xd8, 0xf8, 0xf0, 0x90, 0xf0,
++ 0xf8, 0x88, 0xf8, 0xf8, 0x84, 0xfc, 0x00, 0x00,
++ 0x01, 0x3f, 0x22, 0x4c, 0x32, 0x07, 0x3a, 0x0b,
++ 0x7f, 0x09, 0x7f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x88, 0x78, 0xf0, 0x60, 0x80,
++ 0xf0, 0x00, 0xfc, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x3f, 0x25, 0x7f, 0x09, 0x7f, 0x0f, 0x0f,
++ 0x09, 0x0f, 0x7f, 0x06, 0x01, 0x3e, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0x20, 0xfc, 0xe0, 0xe0,
++ 0x20, 0xe0, 0xfc, 0x40, 0xe0, 0x10, 0x00, 0x00,
++ 0x01, 0x3f, 0x22, 0x4c, 0x38, 0x3e, 0x22, 0x3e,
++ 0x3f, 0x08, 0x7f, 0x0e, 0x12, 0x67, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x88, 0x78, 0x40, 0x7c, 0x88,
++ 0x48, 0x50, 0x30, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x59, 0x1e, 0x10, 0x1e, 0x1f,
++ 0x11, 0x1d, 0x1d, 0x11, 0x1d, 0x73, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x78, 0xf0, 0x10, 0xf0, 0xf0,
++ 0x10, 0xd0, 0xd4, 0x0c, 0xcc, 0x04, 0x00, 0x00,
++ 0x01, 0x3f, 0x22, 0x4c, 0x30, 0x3c, 0x27, 0x38,
++ 0x2b, 0x25, 0x26, 0x39, 0x20, 0x27, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x78, 0x40, 0xf8, 0x90, 0xe0,
++ 0x5c, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0x00,
++ 0x20, 0x17, 0x14, 0x4b, 0x20, 0x27, 0x00, 0x77,
++ 0x10, 0x13, 0x10, 0x13, 0x2c, 0x43, 0x00, 0x00,
++ 0x40, 0xfc, 0xac, 0x3c, 0xa0, 0xfc, 0xc8, 0xe8,
++ 0xf0, 0x70, 0xa8, 0x28, 0xc0, 0xfc, 0x00, 0x00,
++ 0x01, 0x3f, 0x26, 0x59, 0x7f, 0x0f, 0x3f, 0x2c,
++ 0x3f, 0x1f, 0x1f, 0x17, 0x1f, 0x78, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x78, 0xfc, 0xe0, 0xf8, 0xe8,
++ 0xf8, 0xf0, 0xd0, 0xf0, 0xf0, 0x1c, 0x00, 0x00,
++ 0x01, 0x3f, 0x26, 0x58, 0x06, 0x7a, 0x2a, 0x1c,
++ 0x7e, 0x19, 0x1d, 0x2b, 0x49, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x78, 0x20, 0x3c, 0xf8, 0xa8,
++ 0xd8, 0xfc, 0x54, 0xfc, 0x04, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x02, 0x22, 0x13, 0x12,
++ 0x14, 0x14, 0x06, 0x18, 0x60, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x02, 0x22, 0x13, 0x12,
++ 0x14, 0x14, 0x06, 0x18, 0x60, 0x00, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x04, 0x24, 0x15, 0x16,
++ 0x14, 0x18, 0x0e, 0x18, 0x61, 0x02, 0x00, 0x00,
++ 0x70, 0x10, 0x50, 0x50, 0x88, 0x88, 0xfc, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x04, 0x24, 0x15, 0x14,
++ 0x14, 0x19, 0x0e, 0x18, 0x60, 0x00, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x40, 0x40, 0x78, 0xc0, 0x40,
++ 0x7c, 0xc0, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x04, 0x24, 0x14, 0x15,
++ 0x15, 0x09, 0x0f, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x40, 0x40, 0x40, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7f, 0x06, 0x24, 0x15, 0x14,
++ 0x14, 0x18, 0x0e, 0x18, 0x60, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x00, 0x00, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x02, 0x22, 0x12, 0x12,
++ 0x14, 0x14, 0x06, 0x18, 0x63, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x08, 0x88, 0x48, 0x48,
++ 0x50, 0x50, 0x10, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7e, 0x05, 0x25, 0x15, 0x15,
++ 0x15, 0x09, 0x0f, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x08, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x05, 0x24, 0x14, 0x14,
++ 0x15, 0x09, 0x0e, 0x18, 0x60, 0x03, 0x00, 0x00,
++ 0x20, 0x20, 0x30, 0x48, 0xf4, 0x84, 0xf8, 0xa0,
++ 0x20, 0xfc, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x04, 0x24, 0x14, 0x14,
++ 0x14, 0x08, 0x0e, 0x19, 0x62, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0x70, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x05, 0x25, 0x14, 0x14,
++ 0x15, 0x0b, 0x0f, 0x19, 0x61, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x80, 0xf8,
++ 0x48, 0x68, 0x98, 0xf8, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x0a, 0x4a, 0x2a, 0x2a,
++ 0x2a, 0x32, 0x16, 0x1c, 0x67, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1e, 0x29, 0x45, 0x01, 0x3f, 0x01,
++ 0x0d, 0x03, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x20, 0x10, 0x00, 0xe0, 0x20,
++ 0x20, 0x20, 0xa0, 0x64, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x08, 0x0f, 0x12,
++ 0x22, 0x44, 0x08, 0x11, 0x02, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xf8, 0x48,
++ 0x48, 0x88, 0x88, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x00, 0x0f, 0x09,
++ 0x09, 0x09, 0x11, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x18, 0xe0, 0x20,
++ 0x20, 0x20, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x00, 0x1f, 0x11,
++ 0x11, 0x1f, 0x10, 0x10, 0x10, 0x0f, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x08, 0x08, 0x7e,
++ 0x0a, 0x0a, 0x12, 0x12, 0x22, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xf8, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x01, 0x01, 0x01,
++ 0x01, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xfc, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x09, 0x09, 0x1f,
++ 0x11, 0x2f, 0x41, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0x00, 0xf8,
++ 0x00, 0xe0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x02, 0x02, 0x04,
++ 0x7f, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0x60, 0x38,
++ 0xc4, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x10, 0x09, 0x49,
++ 0x21, 0x25, 0x09, 0x11, 0x21, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xf8, 0x08,
++ 0x08, 0x08, 0x30, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x01, 0x01, 0x7f,
++ 0x03, 0x05, 0x19, 0x67, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0x00, 0xfc,
++ 0x80, 0x40, 0x30, 0xcc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x08, 0x0f, 0x11,
++ 0x21, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xf8, 0x00,
++ 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x20, 0x2f, 0x20,
++ 0x27, 0x20, 0x2f, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xfc, 0x00, 0xf8, 0x80,
++ 0xf0, 0x80, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x20, 0x2f, 0x20,
++ 0x27, 0x20, 0x2f, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xfc, 0x00, 0xf8, 0x80,
++ 0xf0, 0x90, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x00, 0x3f, 0x04,
++ 0x04, 0x7f, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x04, 0x0f, 0x10,
++ 0x6f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xf8, 0x08,
++ 0x88, 0x88, 0x88, 0x88, 0x88, 0xb0, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x1f, 0x01, 0x7f,
++ 0x01, 0x1f, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0xf0, 0x10, 0xfc,
++ 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x02, 0x04, 0x18,
++ 0x6f, 0x01, 0x0f, 0x01, 0x3f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x80, 0x40, 0x30,
++ 0xec, 0x00, 0xe0, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x09, 0x0f, 0x11,
++ 0x7f, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xf0, 0x00,
++ 0xfc, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x7b, 0x08, 0x11,
++ 0x3d, 0x49, 0x29, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x1c, 0xf0, 0x20, 0x3c,
++ 0x20, 0x20, 0x20, 0xfc, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x1f, 0x10, 0x10, 0x1f,
++ 0x02, 0x3f, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xf0, 0x10, 0x10, 0xf0,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x01, 0x7f, 0x09,
++ 0x09, 0x16, 0x22, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xfc, 0x20,
++ 0x30, 0xc8, 0x88, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x29, 0x4f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x20, 0xe0, 0x20, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x09, 0x09, 0x12,
++ 0x34, 0x50, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xfc, 0x40,
++ 0x7c, 0x40, 0x7c, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x08, 0x08, 0x14,
++ 0x35, 0x56, 0x14, 0x14, 0x14, 0x13, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x80, 0x80, 0xfc,
++ 0x90, 0x90, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x00, 0x1f, 0x10,
++ 0x1e, 0x12, 0x12, 0x12, 0x2c, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x90, 0xfc, 0x88,
++ 0x48, 0x50, 0x34, 0x34, 0xcc, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x09, 0x09,
++ 0x0d, 0x13, 0x23, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0xf8, 0x20, 0x20,
++ 0x30, 0x48, 0x88, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x09, 0x09, 0x7f,
++ 0x09, 0x0d, 0x19, 0x69, 0x09, 0x19, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x10, 0x10, 0xfc,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x20, 0x2f, 0x21,
++ 0x3f, 0x27, 0x39, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xf8, 0x28, 0xc8, 0x08,
++ 0xf8, 0xc8, 0x38, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x1f, 0x10, 0x1f, 0x10,
++ 0x1f, 0x10, 0x1f, 0x10, 0x1e, 0x60, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x88, 0x90, 0xe4, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x10, 0x13, 0x7e, 0x12,
++ 0x12, 0x1a, 0x72, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xfc, 0x20, 0xf8,
++ 0xa8, 0xa8, 0xb8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x01, 0x3f, 0x22, 0x4c,
++ 0x30, 0x0f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xfc, 0x88, 0x88,
++ 0x78, 0xe0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x04, 0x06, 0x09,
++ 0x1f, 0x60, 0x1f, 0x11, 0x1f, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x08, 0x48, 0x48,
++ 0xc8, 0x48, 0x48, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x01, 0x00, 0x1f,
++ 0x02, 0x7f, 0x01, 0x00, 0x03, 0x3c, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x18, 0xfc, 0x10, 0xe0, 0xb4,
++ 0x4c, 0xf8, 0x20, 0xc4, 0xb4, 0x0c, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x5f, 0x00, 0x7f, 0x1f, 0x3f,
++ 0x21, 0x5f, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xf0, 0x10, 0xfc, 0xf0, 0xfc,
++ 0x08, 0xf0, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x11, 0x3f, 0x41,
++ 0x7f, 0x01, 0x1f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x18, 0xf0, 0x08, 0xf4, 0x10,
++ 0xfc, 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x03, 0x0c, 0x3f, 0x01,
++ 0x7f, 0x01, 0x1f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xe0, 0x80, 0xf0, 0x10,
++ 0xfc, 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3d, 0x25, 0x25, 0x3d,
++ 0x25, 0x3d, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xf8, 0x08, 0x30, 0xf8,
++ 0x48, 0x48, 0x30, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x20, 0x2f, 0x24,
++ 0x26, 0x29, 0x22, 0x2c, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xfc, 0x80, 0xf8, 0x90,
++ 0xb0, 0x48, 0x20, 0x18, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x47, 0x0f, 0x08, 0x0f, 0x0f,
++ 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xe0, 0x20, 0xe0, 0xe0,
++ 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x09, 0x08, 0x17, 0x11,
++ 0x31, 0x52, 0x17, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xf0, 0x10, 0xfc, 0x00,
++ 0xf8, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x12, 0x12, 0x7f,
++ 0x12, 0x1f, 0x12, 0x12, 0x1e, 0x13, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x40, 0x40, 0xfc,
++ 0xa4, 0x28, 0x70, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x00, 0x1f, 0x10, 0x1f,
++ 0x10, 0x17, 0x14, 0x17, 0x24, 0x41, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0x50, 0xfc, 0x48, 0xc8,
++ 0x48, 0xb0, 0xb4, 0xb4, 0x4c, 0x84, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x47, 0x04, 0x0f, 0x7f, 0x03,
++ 0x7d, 0x07, 0x39, 0x06, 0x38, 0x03, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xe0, 0x40, 0xc0, 0xfc, 0x88,
++ 0xd0, 0xe0, 0xa0, 0x90, 0x8c, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x1f, 0x04, 0x7f,
++ 0x0f, 0x0f, 0x09, 0x7f, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x48, 0xf8, 0xf0, 0x40, 0xfc,
++ 0xe0, 0xe0, 0x20, 0xfc, 0x20, 0x60, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x09, 0x3e, 0x22,
++ 0x3e, 0x20, 0x3e, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0xfc, 0x20, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xb8, 0x20, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x45, 0x7f, 0x0f, 0x08, 0x7f,
++ 0x08, 0x0f, 0x06, 0x7c, 0x07, 0x38, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xfc, 0xe0, 0x20, 0xfc,
++ 0x20, 0xe8, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x45, 0x7f, 0x3f, 0x08, 0x7f,
++ 0x08, 0x3f, 0x06, 0x7c, 0x07, 0x38, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xfc, 0xf8, 0x20, 0xfc,
++ 0x20, 0xf8, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x47, 0x3f, 0x26, 0x21, 0x2e,
++ 0x3f, 0x10, 0x1f, 0x10, 0x1e, 0x70, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xf8, 0x48, 0xc8, 0x28,
++ 0xf8, 0x88, 0x90, 0xe4, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x7f, 0x04, 0x3f, 0x24,
++ 0x3f, 0x01, 0x7f, 0x07, 0x79, 0x01, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xfc, 0x40, 0xf8, 0x48,
++ 0xf8, 0x00, 0xfc, 0xc0, 0x3c, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x49, 0x7e, 0x14, 0x7f, 0x3e,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x26, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x40, 0x7c, 0x78, 0x08, 0x78,
++ 0x40, 0x78, 0x78, 0x78, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x45, 0x3f, 0x1f, 0x7f, 0x0f,
++ 0x08, 0x0f, 0x0f, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xf8, 0xf0, 0xfc, 0xe0,
++ 0x20, 0xe0, 0xe0, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x08, 0x08, 0x7f, 0x08,
++ 0x0f, 0x13, 0x12, 0x22, 0x44, 0x1f, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0x80, 0xfc, 0x80, 0xf8,
++ 0x20, 0xfc, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x24, 0x3f, 0x24,
++ 0x3f, 0x24, 0x2e, 0x2a, 0x2e, 0x41, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0x90, 0x90, 0xa8, 0xc8,
++ 0x90, 0xa4, 0x84, 0x88, 0x90, 0xa0, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x5f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x7f, 0x09, 0x3f, 0x01, 0x3f, 0x01, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0xfc, 0x20, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x10, 0x0b, 0x40, 0x27,
++ 0x03, 0x71, 0x13, 0x10, 0x2c, 0x43, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x90, 0xf0, 0xa0, 0xe0, 0x5c,
++ 0xf8, 0xf0, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x13, 0x48, 0x22, 0x15,
++ 0x23, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xf0, 0x98, 0x94, 0x14,
++ 0x60, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x25, 0x4f, 0x09, 0x7f, 0x0f, 0x0f,
++ 0x09, 0x0f, 0x7f, 0x0e, 0x01, 0x3e, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xe0, 0x20, 0xfc, 0xe0, 0xe0,
++ 0x20, 0xe0, 0xfc, 0x40, 0xe0, 0x10, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x7f, 0x01, 0x09, 0x09, 0x7f,
++ 0x07, 0x04, 0x0f, 0x2a, 0x25, 0x40, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xf8, 0x00, 0xf0, 0x00, 0xfc,
++ 0xf0, 0x00, 0xf8, 0x48, 0x28, 0x30, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x4f, 0x09, 0x0f, 0x7f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xe0, 0x20, 0xe0, 0xfc, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x7f, 0x04, 0x07, 0x7f, 0x1f,
++ 0x11, 0x1f, 0x11, 0x1f, 0x06, 0x38, 0x00, 0x00,
++ 0x40, 0x7c, 0xd0, 0xf8, 0x40, 0xc0, 0xfc, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x60, 0x18, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x7e, 0x14, 0x7f, 0x0e, 0x14,
++ 0x7f, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xf8, 0x50, 0xfc, 0x30, 0xd4,
++ 0xfc, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x7f, 0x1f, 0x12, 0x1f, 0x0f,
++ 0x08, 0x0f, 0x0f, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xfc, 0xf0, 0x90, 0xf0, 0xe0,
++ 0x20, 0xe0, 0xe0, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x25, 0x43, 0x0c, 0x7f, 0x12, 0x1d,
++ 0x17, 0x11, 0x11, 0x13, 0x22, 0x43, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xe0, 0x80, 0xfc, 0x24, 0xfc,
++ 0xf8, 0xe0, 0xe0, 0xf0, 0x10, 0xf0, 0x00, 0x00,
++ 0x10, 0x1f, 0x25, 0x5f, 0x01, 0x7f, 0x1f, 0x15,
++ 0x1d, 0x11, 0x1f, 0x1d, 0x25, 0x45, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xf0, 0x10, 0xfc, 0xf0, 0x50,
++ 0x70, 0x10, 0xf0, 0x70, 0x50, 0x50, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x02, 0x0c, 0x77, 0x00,
++ 0x1e, 0x12, 0x1e, 0x0c, 0x12, 0x61, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0x80, 0x60, 0xdc, 0x00,
++ 0xf0, 0x90, 0xf0, 0x60, 0x90, 0x08, 0x00, 0x00,
++ 0x10, 0x1f, 0x25, 0x7f, 0x1f, 0x7f, 0x1f, 0x01,
++ 0x1f, 0x7f, 0x1e, 0x13, 0x1e, 0x10, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xfc, 0xf0, 0xfc, 0xe8, 0x00,
++ 0xe0, 0xfc, 0x10, 0xfc, 0x90, 0x30, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x7f, 0x24, 0x3e, 0x3f, 0x24,
++ 0x3f, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x40, 0x7c, 0x80, 0x00, 0x78,
++ 0x00, 0xf0, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x5f, 0x15, 0x7f, 0x1f, 0x1f,
++ 0x15, 0x1f, 0x7f, 0x1a, 0x06, 0x39, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x20, 0x20, 0xfc, 0x48, 0xc8,
++ 0x28, 0x30, 0x90, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x4d, 0x09, 0x7e, 0x13, 0x1c,
++ 0x14, 0x14, 0x14, 0x27, 0x24, 0x5b, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x90, 0xfc, 0x90, 0xfc, 0x90,
++ 0xf0, 0xf0, 0x90, 0xfc, 0x90, 0x08, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x51, 0x13, 0x7e, 0x12, 0x17,
++ 0x13, 0x1e, 0x73, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x40, 0xbc, 0x94, 0xe4, 0x58,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3e, 0x27, 0x24, 0x3f,
++ 0x25, 0x3f, 0x24, 0x27, 0x24, 0x4c, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x50, 0x48, 0xfc, 0xa0, 0xfc,
++ 0x50, 0x58, 0xe4, 0x50, 0x4c, 0xc0, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x41, 0x3f, 0x24, 0x27, 0x3d,
++ 0x27, 0x3c, 0x27, 0x25, 0x25, 0x4e, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x50, 0xf8, 0xa4, 0xfc, 0x50,
++ 0xac, 0xd0, 0xf8, 0x54, 0x48, 0x48, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x49, 0x7f, 0x08, 0x3e, 0x2a,
++ 0x2a, 0x3e, 0x1c, 0x2a, 0x48, 0x09, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xf8, 0x48, 0x98, 0xf8, 0x88,
++ 0xf8, 0xf8, 0x88, 0xf8, 0x48, 0x84, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x52, 0x12, 0x2d, 0x7f, 0x0a,
++ 0x3b, 0x3b, 0x0a, 0x3b, 0x0f, 0x78, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x40, 0x50, 0x48, 0xfc, 0x28,
++ 0xa8, 0xb0, 0x10, 0xb4, 0xcc, 0x84, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x44, 0x3f, 0x04, 0x7f, 0x0a,
++ 0x3b, 0x3b, 0x0a, 0x3b, 0x0f, 0x70, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x40, 0xd0, 0x48, 0xfc, 0x28,
++ 0xa8, 0xb0, 0x14, 0xb4, 0xcc, 0x84, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x46, 0x0c, 0x77, 0x3b, 0x2a,
++ 0x3b, 0x3f, 0x24, 0x3f, 0x24, 0x24, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x90, 0x60, 0xdc, 0xb8, 0xa8,
++ 0xb8, 0xf8, 0x48, 0xf8, 0x48, 0x58, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x49, 0x7f, 0x26, 0x3a, 0x37,
++ 0x3e, 0x7f, 0x4d, 0x7f, 0x41, 0x43, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x48, 0x50, 0x7c, 0xd0, 0x78,
++ 0x50, 0x78, 0x50, 0x50, 0x7c, 0x40, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x08, 0x7f, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x11, 0x55, 0x35, 0x39, 0x11, 0x7d, 0x11, 0x39,
++ 0x35, 0x55, 0x51, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x24, 0xe8, 0x30, 0x20,
++ 0x20, 0x20, 0x20, 0x64, 0xa4, 0x1c, 0x00, 0x00,
++ 0x08, 0x4b, 0x2a, 0x2c, 0x08, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x49, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8,
++ 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x02, 0x1f, 0x15, 0x13, 0x1f, 0x13, 0x1d, 0x1f,
++ 0x00, 0x7f, 0x08, 0x0f, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x50, 0x90, 0xf0, 0x90, 0x50, 0xf0,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xe0, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x09, 0x7f, 0x08, 0x1c,
++ 0x1b, 0x2b, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7c, 0x01, 0x02, 0x0c, 0x71, 0x13, 0x09,
++ 0x09, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x48, 0xc0, 0x30, 0x2c, 0x20,
++ 0x40, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x57, 0x34, 0x38, 0x10, 0x7f, 0x12, 0x3a,
++ 0x36, 0x56, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x80, 0xf8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x57, 0x36, 0x3a, 0x13, 0x7e, 0x12, 0x3a,
++ 0x36, 0x56, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xe8, 0xa8,
++ 0xa8, 0xe8, 0xa8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x4b, 0x2a, 0x2c, 0x08, 0x7f, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x40, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x4b, 0x2a, 0x2d, 0x09, 0x7f, 0x09, 0x1d,
++ 0x1b, 0x2b, 0x48, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x80, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x0e, 0x08, 0x1f, 0x72, 0x0c, 0x73, 0x11,
++ 0x09, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x50, 0x20, 0xd0, 0x0c, 0x10,
++ 0x20, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x40, 0x2a, 0x12, 0x25, 0x22, 0x11,
++ 0x09, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x98, 0x94, 0x14, 0x60, 0x10,
++ 0x20, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x08, 0x7f, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x0b, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8,
++ 0xa4, 0xa8, 0x90, 0x90, 0xe8, 0x04, 0x00, 0x00,
++ 0x08, 0x4a, 0x2b, 0x2c, 0x08, 0x7e, 0x09, 0x1e,
++ 0x1a, 0x2b, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x90, 0x90, 0xd8, 0x24, 0x24,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x09, 0x7e, 0x08, 0x1d,
++ 0x1a, 0x2a, 0x48, 0x09, 0x0a, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0xf8, 0x00, 0x00, 0xfc,
++ 0x20, 0xb0, 0xa8, 0x24, 0x24, 0x60, 0x00, 0x00,
++ 0x10, 0x54, 0x37, 0x38, 0x10, 0x7c, 0x11, 0x39,
++ 0x37, 0x55, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xa0, 0xa0, 0x24, 0x28,
++ 0x30, 0x60, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x55, 0x34, 0x38, 0x13, 0x7c, 0x13, 0x38,
++ 0x34, 0x57, 0x50, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x20, 0xfc, 0xe8, 0x30, 0x60,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x08, 0x4a, 0x2b, 0x2c, 0x08, 0x7e, 0x08, 0x1c,
++ 0x1b, 0x2b, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf0, 0x90, 0xf0, 0x90,
++ 0xfc, 0x50, 0x54, 0x8c, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x4a, 0x2b, 0x2d, 0x0b, 0x7e, 0x09, 0x1c,
++ 0x1b, 0x2a, 0x48, 0x0b, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0xfc, 0x40, 0xe4, 0x68,
++ 0xb0, 0x70, 0xa8, 0x24, 0x20, 0xc0, 0x00, 0x00,
++ 0x10, 0x57, 0x34, 0x38, 0x13, 0x7e, 0x12, 0x3a,
++ 0x36, 0x56, 0x52, 0x14, 0x14, 0x18, 0x00, 0x00,
++ 0x90, 0xfc, 0x90, 0x00, 0xfc, 0x00, 0xf8, 0xa8,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0xa8, 0x98, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x16, 0x16, 0x1a, 0x14,
++ 0x12, 0x1f, 0x11, 0x26, 0x38, 0x40, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xfc, 0xb8, 0xbc, 0x54, 0x90,
++ 0xa0, 0xfc, 0xc0, 0xb0, 0x8c, 0x80, 0x00, 0x00,
++ 0x10, 0x54, 0x37, 0x38, 0x11, 0x7f, 0x11, 0x39,
++ 0x35, 0x54, 0x53, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x3d, 0x0b, 0x3f, 0x3b, 0x0d, 0x31, 0x7f, 0x0f,
++ 0x08, 0x0f, 0x3f, 0x24, 0x3f, 0x21, 0x00, 0x00,
++ 0x78, 0x48, 0xf8, 0xb8, 0x48, 0x30, 0xfc, 0xe0,
++ 0x20, 0xe0, 0xf8, 0x58, 0xf8, 0x18, 0x00, 0x00,
++ 0x10, 0x57, 0x34, 0x3b, 0x13, 0x7d, 0x10, 0x3b,
++ 0x34, 0x57, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xfc, 0x58, 0xf8, 0x40, 0xfc,
++ 0x80, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x57, 0x36, 0x3b, 0x12, 0x7e, 0x12, 0x3a,
++ 0x36, 0x57, 0x53, 0x15, 0x15, 0x19, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0xfc, 0x34, 0xfc, 0x04, 0x0c, 0x00, 0x00,
++ 0x00, 0x39, 0x08, 0x09, 0x14, 0x23, 0x48, 0x2a,
++ 0x1d, 0x7e, 0x1c, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0xd8, 0x68, 0xd8, 0x68, 0x50, 0xfc,
++ 0x90, 0xf8, 0xf8, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x08, 0x2b, 0x2a, 0x3f, 0x4a, 0x7f, 0x4a, 0x2a,
++ 0x1d, 0x7e, 0x1c, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0xd8, 0x68, 0xd8, 0x68, 0x50, 0xfc,
++ 0x90, 0xf8, 0xf8, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7d,
++ 0x08, 0x2a, 0x29, 0x29, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x13, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x15, 0x0c, 0x12, 0x7d,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10, 0x90, 0x50,
++ 0x50, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0d, 0x12, 0x7d,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x4b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x20, 0x50, 0x48, 0x98, 0xe4, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x15, 0x65, 0x19, 0x19, 0x25, 0x7d,
++ 0x11, 0x39, 0x35, 0x35, 0x51, 0x16, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x24, 0xe8, 0x30, 0x20,
++ 0x20, 0x20, 0x20, 0x64, 0xa4, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x04, 0x03, 0x0d, 0x71, 0x02,
++ 0x1e, 0x03, 0x7f, 0x05, 0x09, 0x31, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x80, 0x60, 0x1c, 0x40,
++ 0xa0, 0x18, 0xe4, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x66, 0x1a, 0x1a, 0x26, 0x7e,
++ 0x12, 0x1a, 0x36, 0x36, 0x52, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xe8, 0xa8, 0xa8, 0xa8,
++ 0xe8, 0xa8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x15, 0x0d, 0x13, 0x7f,
++ 0x0d, 0x2b, 0x2b, 0x29, 0x4b, 0x0c, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x00, 0x20, 0x20, 0x20,
++ 0x20, 0x30, 0x48, 0x58, 0xe4, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x1c, 0x1a, 0x29, 0x49, 0x02,
++ 0x1e, 0x03, 0x7f, 0x05, 0x09, 0x31, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x40,
++ 0xa0, 0x18, 0xe4, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x15, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xfc, 0xa8, 0xa8, 0xa8,
++ 0xb8, 0xa8, 0x80, 0x80, 0xfc, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x13, 0x7e,
++ 0x09, 0x2d, 0x2b, 0x2b, 0x49, 0x09, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x90, 0x88, 0xf4, 0x04,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x0d, 0x0c, 0x13, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x00, 0x00, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x15, 0x0c, 0x12, 0x7e,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xa8, 0xa4, 0x24, 0xf8, 0x20, 0x20,
++ 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x0d, 0x0c, 0x12, 0x7f,
++ 0x08, 0x2c, 0x2a, 0x2b, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x50, 0x30, 0xdc, 0x10,
++ 0xf8, 0x90, 0x90, 0xfc, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x72, 0x14, 0x0c, 0x13, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0x24, 0xa4, 0xa8, 0x20, 0xfc, 0x50,
++ 0x50, 0x50, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x15, 0x65, 0x1a, 0x18, 0x24, 0x7d,
++ 0x13, 0x19, 0x35, 0x35, 0x51, 0x11, 0x00, 0x00,
++ 0x80, 0xf8, 0x00, 0x00, 0x80, 0xfc, 0x90, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7f,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x28, 0xc8, 0x50, 0x30, 0x48, 0xfc,
++ 0x24, 0xb0, 0xa8, 0xa4, 0x24, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x64, 0x1b, 0x18, 0x24, 0x7c,
++ 0x13, 0x38, 0x35, 0x35, 0x52, 0x10, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0x24, 0xfc, 0xa0, 0xa8, 0xe8,
++ 0xa8, 0x90, 0x14, 0x2c, 0x4c, 0x84, 0x00, 0x00,
++ 0x08, 0x7e, 0x12, 0x12, 0x3c, 0x04, 0x1b, 0x62,
++ 0x1c, 0x03, 0x7f, 0x05, 0x09, 0x31, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x40,
++ 0xa0, 0x18, 0xe4, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x73, 0x15, 0x0d, 0x13, 0x7f,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x4b, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x48,
++ 0x48, 0x30, 0x24, 0xd4, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7f,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0a, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0xfc, 0x50, 0x50, 0x50, 0xfc,
++ 0x50, 0x50, 0x90, 0x90, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x09, 0x0a, 0x72, 0x15, 0x0c, 0x12, 0x7e,
++ 0x0d, 0x2a, 0x2a, 0x28, 0x4b, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0xa8, 0xa8, 0x50, 0xa8, 0xa8, 0x00,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x13, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0a, 0x00, 0x00,
++ 0x08, 0xf0, 0x20, 0xfc, 0x70, 0xa8, 0x24, 0xf0,
++ 0x50, 0x50, 0x9c, 0x84, 0x04, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x16, 0x14, 0x37, 0x54, 0x15,
++ 0x14, 0x17, 0x15, 0x15, 0x12, 0x10, 0x00, 0x00,
++ 0x80, 0xfc, 0x90, 0x60, 0xf0, 0x4c, 0x50, 0xb0,
++ 0x48, 0xfc, 0x50, 0x48, 0x48, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x72, 0x14, 0x0d, 0x12, 0x7f,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x09, 0x00, 0x00,
++ 0x08, 0x10, 0xe8, 0xa4, 0x94, 0x20, 0x20, 0xfc,
++ 0x48, 0x48, 0xf0, 0x10, 0x68, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7e,
++ 0x09, 0x2d, 0x2b, 0x2b, 0x49, 0x09, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x20, 0x40,
++ 0xfc, 0x04, 0x04, 0x04, 0xfc, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x14, 0x64, 0x29, 0x18, 0x25, 0x7e,
++ 0x18, 0x35, 0x35, 0x32, 0x54, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xc8, 0xa8, 0x30, 0x40,
++ 0xa0, 0xa8, 0x84, 0x84, 0x90, 0x70, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x72, 0x14, 0x0c, 0x13, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x60, 0x50, 0x88, 0xfc, 0x08,
++ 0xe8, 0xa8, 0xe8, 0xa8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x7e, 0x00, 0x3f, 0x22, 0x3e, 0x23, 0x22,
++ 0x4e, 0x01, 0x7f, 0x0d, 0x31, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x90, 0x50, 0x60, 0x90, 0x4c,
++ 0xc0, 0x30, 0xc8, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0d, 0x12, 0x7e,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0xa8, 0xa4, 0xfc, 0x20, 0xfc, 0x50, 0x88,
++ 0xf4, 0x90, 0x90, 0xb4, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x0c, 0x0d, 0x12, 0x7e,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x08, 0x10, 0xe8, 0xa4, 0x94, 0x10, 0x20, 0x20,
++ 0xfc, 0x70, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x12, 0x12, 0x14, 0x66, 0x1a, 0x18, 0x27, 0x7e,
++ 0x12, 0x3b, 0x36, 0x36, 0x53, 0x12, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0x48, 0x48, 0x00, 0xf8, 0x48,
++ 0x48, 0xf8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2b, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x3c, 0x20, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2d, 0x2a, 0x2a, 0x48, 0x09, 0x00, 0x00,
++ 0x50, 0x48, 0x7c, 0xe8, 0x28, 0x34, 0xcc, 0x50,
++ 0x5c, 0xe8, 0x28, 0x14, 0x6c, 0x84, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x66, 0x2b, 0x1a, 0x26, 0x7f,
++ 0x18, 0x34, 0x36, 0x32, 0x54, 0x10, 0x00, 0x00,
++ 0x80, 0xf8, 0x48, 0xf8, 0xa8, 0x68, 0x98, 0xf8,
++ 0x40, 0xa8, 0xa4, 0x84, 0x90, 0x70, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x66, 0x1b, 0x1a, 0x27, 0x7e,
++ 0x1a, 0x36, 0x36, 0x32, 0x54, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8, 0x48,
++ 0xe8, 0xa8, 0xe8, 0xa8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x65, 0x1b, 0x19, 0x26, 0x7f,
++ 0x10, 0x3a, 0x36, 0x37, 0x52, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0xe8, 0x88, 0xf8,
++ 0x88, 0xa8, 0xa8, 0xe8, 0x28, 0x30, 0x00, 0x00,
++ 0x08, 0x11, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x09,
++ 0x7e, 0x4a, 0x4a, 0x4a, 0x4f, 0x08, 0x00, 0x00,
++ 0x0c, 0xf0, 0x20, 0xc8, 0x50, 0x30, 0x48, 0xfc,
++ 0x24, 0xb0, 0xa8, 0xa4, 0x24, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x64, 0x19, 0x1b, 0x24, 0x7f,
++ 0x12, 0x3b, 0x36, 0x36, 0x52, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x14, 0x65, 0x19, 0x19, 0x25, 0x7d,
++ 0x19, 0x35, 0x35, 0x32, 0x53, 0x16, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x20, 0x20,
++ 0xfc, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x73, 0x16, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xf0, 0x90, 0x90, 0xf0,
++ 0x80, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x67, 0x2a, 0x1b, 0x26, 0x7f,
++ 0x13, 0x3b, 0x37, 0x33, 0x54, 0x18, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0xe8, 0x28, 0xe8,
++ 0x50, 0x54, 0xdc, 0x6c, 0x44, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0f, 0x12, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x4b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x00, 0xfc, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x72, 0x14, 0x0c, 0x12, 0x7e,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0xa8, 0xa8, 0xfc, 0xa8, 0xb8, 0x80, 0xfc, 0x20,
++ 0xfc, 0x70, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x66, 0x2b, 0x1a, 0x26, 0x7f,
++ 0x12, 0x3a, 0x37, 0x36, 0x52, 0x12, 0x00, 0x00,
++ 0x80, 0x70, 0x50, 0x54, 0xd4, 0x4c, 0x80, 0xf8,
++ 0x48, 0x28, 0xb0, 0x10, 0x28, 0xc4, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x69, 0x2a, 0x1a, 0x27, 0x7d,
++ 0x17, 0x39, 0x35, 0x31, 0x56, 0x10, 0x00, 0x00,
++ 0x20, 0xe0, 0x20, 0x20, 0xbc, 0xc8, 0x68, 0x28,
++ 0xe8, 0x10, 0x50, 0xa8, 0x48, 0x84, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x66, 0x2b, 0x1a, 0x26, 0x7f,
++ 0x12, 0x3a, 0x37, 0x36, 0x50, 0x10, 0x00, 0x00,
++ 0x10, 0x90, 0x90, 0xb8, 0xb8, 0xb4, 0xd4, 0xd4,
++ 0xb8, 0x88, 0x90, 0xa0, 0x40, 0x80, 0x00, 0x00,
++ 0x10, 0x11, 0x15, 0x65, 0x29, 0x19, 0x25, 0x7d,
++ 0x13, 0x39, 0x35, 0x35, 0x51, 0x11, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x20, 0xfc, 0x10, 0xcc,
++ 0xfc, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x67, 0x2a, 0x1b, 0x26, 0x7f,
++ 0x13, 0x3b, 0x37, 0x34, 0x55, 0x1a, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0xe8, 0xa8, 0xe8,
++ 0x58, 0x50, 0x94, 0xec, 0x2c, 0x44, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x65, 0x2a, 0x18, 0x24, 0x7d,
++ 0x13, 0x39, 0x35, 0x35, 0x53, 0x10, 0x00, 0x00,
++ 0xf0, 0x10, 0x90, 0xf8, 0x04, 0xb0, 0x90, 0x08,
++ 0xfc, 0x68, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1e, 0x52, 0x5e, 0x52, 0x5e, 0x52, 0x5f,
++ 0x40, 0x7e, 0x2c, 0x2a, 0x4b, 0x08, 0x00, 0x00,
++ 0x04, 0xf8, 0x20, 0xc8, 0x50, 0x30, 0x48, 0xfc,
++ 0x24, 0xb0, 0xa8, 0xa4, 0x24, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x66, 0x2c, 0x1b, 0x25, 0x7c,
++ 0x13, 0x38, 0x37, 0x34, 0x50, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x40, 0xf8, 0x10, 0xa0,
++ 0xfc, 0x40, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7f,
++ 0x0c, 0x2a, 0x2b, 0x2a, 0x4f, 0x08, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0xfc, 0x20, 0xf8, 0x20, 0xfc,
++ 0x80, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x12, 0x6a, 0x2d, 0x19, 0x25, 0x7e,
++ 0x16, 0x3a, 0x36, 0x36, 0x53, 0x12, 0x00, 0x00,
++ 0x50, 0x50, 0x50, 0x50, 0xb8, 0xa4, 0x24, 0xa0,
++ 0xa0, 0xb8, 0xa0, 0xe0, 0x20, 0x1c, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x67, 0x2a, 0x1b, 0x26, 0x7e,
++ 0x13, 0x3a, 0x37, 0x34, 0x58, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x00, 0xfc, 0xa8, 0xf0,
++ 0x9c, 0x10, 0xfc, 0x90, 0x50, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x14, 0x64, 0x29, 0x1b, 0x24, 0x7f,
++ 0x11, 0x39, 0x35, 0x35, 0x51, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x90, 0x90, 0x68, 0xfc, 0x00, 0xfc,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x12, 0x11, 0x15, 0x64, 0x2a, 0x19, 0x25, 0x7c,
++ 0x13, 0x39, 0x35, 0x35, 0x52, 0x14, 0x00, 0x00,
++ 0x10, 0x20, 0x78, 0x48, 0x48, 0x78, 0x40, 0x78,
++ 0x48, 0x48, 0x78, 0x48, 0xc0, 0x3c, 0x00, 0x00,
++ 0x00, 0x39, 0x29, 0x2a, 0x2f, 0x39, 0x2a, 0x2d,
++ 0x38, 0x2f, 0x29, 0x29, 0x2a, 0x58, 0x00, 0x00,
++ 0x40, 0x50, 0xf8, 0xa4, 0xfc, 0x50, 0x58, 0xb4,
++ 0x48, 0xfc, 0x50, 0x48, 0x48, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x14, 0x67, 0x28, 0x1b, 0x24, 0x7c,
++ 0x13, 0x39, 0x34, 0x35, 0x50, 0x13, 0x00, 0x00,
++ 0x00, 0xfc, 0xcc, 0x74, 0xcc, 0x74, 0x44, 0xa0,
++ 0x70, 0x9c, 0x68, 0x90, 0x60, 0x80, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x69, 0x2f, 0x14, 0x2c, 0x7f,
++ 0x15, 0x39, 0x35, 0x35, 0x51, 0x16, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x78, 0x20, 0xf8, 0xa8,
++ 0xa8, 0xf8, 0x30, 0x28, 0xfc, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x16, 0x16, 0x1a, 0x11,
++ 0x17, 0x10, 0x1f, 0x22, 0x2c, 0x40, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xfc, 0xb8, 0xbc, 0xd4, 0x20,
++ 0x60, 0x98, 0xe4, 0xb0, 0x88, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x13, 0x7f,
++ 0x09, 0x2d, 0x2a, 0x2a, 0x48, 0x0b, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc, 0x54,
++ 0xfc, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x6b, 0x2a, 0x1b, 0x24, 0x7d,
++ 0x10, 0x3b, 0x35, 0x35, 0x52, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0x00, 0xf0,
++ 0x00, 0xfc, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x10, 0x12, 0x16, 0x67, 0x28, 0x1b, 0x26, 0x7e,
++ 0x13, 0x3a, 0x37, 0x34, 0x54, 0x19, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x00, 0xb8, 0xa8, 0xa8,
++ 0xb8, 0xa8, 0xb8, 0xa8, 0xc8, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2d, 0x2a, 0x2a, 0x48, 0x09, 0x00, 0x00,
++ 0x20, 0xf8, 0xa8, 0xfc, 0xa8, 0xf8, 0xf8, 0xa8,
++ 0xf8, 0xfc, 0x48, 0xf0, 0x28, 0xc4, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x67, 0x2a, 0x1b, 0x24, 0x7d,
++ 0x10, 0x3b, 0x35, 0x35, 0x52, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x90, 0xb0,
++ 0x48, 0xf4, 0x50, 0x48, 0x48, 0x40, 0x00, 0x00,
++ 0x12, 0x11, 0x15, 0x64, 0x2a, 0x19, 0x25, 0x7c,
++ 0x13, 0x39, 0x35, 0x35, 0x52, 0x14, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xfc, 0x20, 0xe0, 0x3c, 0x00, 0x00,
++ 0x10, 0x13, 0x14, 0x67, 0x2b, 0x1b, 0x24, 0x7d,
++ 0x10, 0x3b, 0x34, 0x34, 0x53, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xfc, 0x58, 0xf8, 0x40, 0xf8,
++ 0x00, 0xfc, 0x50, 0x88, 0xf4, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x67, 0x2a, 0x1b, 0x26, 0x7e,
++ 0x12, 0x3a, 0x36, 0x36, 0x53, 0x12, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0xe8, 0xa8,
++ 0xe8, 0xa8, 0xe8, 0xa8, 0x68, 0x08, 0x00, 0x00,
++ 0x12, 0x12, 0x17, 0x6a, 0x2f, 0x18, 0x2b, 0x7e,
++ 0x13, 0x3a, 0x37, 0x36, 0x52, 0x12, 0x00, 0x00,
++ 0xa0, 0xa0, 0xe0, 0xa0, 0xfc, 0x48, 0xa8, 0xa8,
++ 0xa8, 0x90, 0x90, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x10, 0x11, 0x14, 0x67, 0x29, 0x1b, 0x25, 0x7d,
++ 0x13, 0x3b, 0x34, 0x34, 0x51, 0x12, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xb8, 0x10, 0xfc,
++ 0x00, 0xfc, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x09, 0x0a, 0x72, 0x17, 0x0c, 0x12, 0x7f,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x18, 0xe8, 0xa8, 0x70, 0xfc, 0x70, 0xa8, 0x24,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x73, 0x14, 0x0d, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x54, 0x88, 0xfc, 0x88, 0xf8,
++ 0x88, 0xf8, 0xa8, 0xa4, 0x24, 0x60, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x67, 0x28, 0x1b, 0x24, 0x7f,
++ 0x11, 0x3f, 0x34, 0x37, 0x50, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x40, 0xf8, 0x40, 0xfc,
++ 0x10, 0xfc, 0x40, 0xf8, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x65, 0x2a, 0x1b, 0x27, 0x7e,
++ 0x13, 0x39, 0x35, 0x35, 0x51, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xf0, 0x08, 0xfc, 0x58, 0xe8,
++ 0xf8, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x67, 0x29, 0x1a, 0x26, 0x7f,
++ 0x12, 0x3a, 0x37, 0x36, 0x50, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xb8, 0xa0, 0xb8, 0xa8, 0xb8,
++ 0xa8, 0xa8, 0xb8, 0xa4, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x12, 0x17, 0x66, 0x2a, 0x1b, 0x27, 0x7e,
++ 0x13, 0x3a, 0x37, 0x37, 0x53, 0x12, 0x00, 0x00,
++ 0x90, 0xd8, 0x68, 0xd0, 0xa8, 0xf8, 0xfc, 0xd8,
++ 0x68, 0x90, 0x68, 0xf8, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x14, 0x67, 0x2b, 0x1f, 0x24, 0x7f,
++ 0x10, 0x3b, 0x36, 0x36, 0x52, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x58, 0x58, 0x40, 0xfc,
++ 0x40, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x68, 0x2f, 0x12, 0x2a, 0x7d,
++ 0x11, 0x39, 0x35, 0x35, 0x52, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa4, 0xf8, 0xe8, 0xf8, 0xe4,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x72, 0x14, 0x0c, 0x13, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x50, 0x70, 0x8c, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x09, 0x0b, 0x73, 0x14, 0x0d, 0x12, 0x7f,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x0b, 0x00, 0x00,
++ 0x20, 0xfc, 0x08, 0xfc, 0xa8, 0x70, 0x78, 0x88,
++ 0xf8, 0xf8, 0x88, 0xf8, 0x88, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x7d, 0x2e, 0x2a, 0x29, 0x7e, 0x13,
++ 0x1d, 0x75, 0x15, 0x25, 0x29, 0x41, 0x00, 0x00,
++ 0x10, 0x10, 0x7c, 0xa8, 0xa8, 0x28, 0xfc, 0xd0,
++ 0x10, 0xfc, 0x50, 0x50, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x67, 0x2a, 0x1b, 0x26, 0x7f,
++ 0x18, 0x37, 0x36, 0x32, 0x57, 0x10, 0x00, 0x00,
++ 0x10, 0xd0, 0x90, 0xdc, 0x60, 0xc0, 0xb8, 0xc0,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x15, 0x67, 0x29, 0x19, 0x27, 0x7c,
++ 0x13, 0x3a, 0x36, 0x37, 0x52, 0x10, 0x00, 0x00,
++ 0x00, 0x7c, 0x10, 0xd0, 0x38, 0x28, 0xb8, 0x28,
++ 0xb8, 0xa8, 0xb8, 0xa8, 0xa4, 0x44, 0x00, 0x00,
++ 0x11, 0x13, 0x15, 0x67, 0x29, 0x1a, 0x25, 0x7d,
++ 0x11, 0x39, 0x35, 0x35, 0x50, 0x13, 0x00, 0x00,
++ 0x10, 0xb8, 0x10, 0xfc, 0x10, 0xa8, 0xf4, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x67, 0x2a, 0x1b, 0x27, 0x7f,
++ 0x11, 0x39, 0x35, 0x35, 0x51, 0x16, 0x00, 0x00,
++ 0x40, 0xfc, 0xf0, 0xf8, 0xb8, 0x38, 0xf8, 0xf0,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x66, 0x2a, 0x1a, 0x26, 0x7e,
++ 0x13, 0x3a, 0x37, 0x34, 0x54, 0x1b, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0xf8,
++ 0xfc, 0xa8, 0x74, 0xf8, 0x20, 0xfc, 0x00, 0x00,
++ 0x11, 0x11, 0x15, 0x67, 0x2a, 0x1a, 0x24, 0x7e,
++ 0x19, 0x35, 0x35, 0x32, 0x54, 0x10, 0x00, 0x00,
++ 0x00, 0x7c, 0x10, 0xd0, 0xb8, 0x68, 0xf8, 0xa8,
++ 0xb8, 0xa8, 0x78, 0x68, 0x24, 0x44, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x67, 0x2b, 0x1a, 0x27, 0x7d,
++ 0x12, 0x3b, 0x34, 0x35, 0x50, 0x13, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xb8, 0xa8, 0xb8, 0xa8,
++ 0x44, 0xfc, 0x90, 0xe0, 0x70, 0x88, 0x00, 0x00,
++ 0x10, 0x11, 0x17, 0x65, 0x29, 0x19, 0x25, 0x7f,
++ 0x10, 0x3b, 0x35, 0x35, 0x50, 0x17, 0x00, 0x00,
++ 0xf0, 0x20, 0xf8, 0xf8, 0xe4, 0x38, 0xe4, 0x5c,
++ 0xf0, 0xf0, 0x50, 0xf8, 0xa4, 0x1c, 0x00, 0x00,
++ 0x12, 0x12, 0x13, 0x6d, 0x2f, 0x1a, 0x2e, 0x7a,
++ 0x16, 0x3a, 0x3e, 0x33, 0x56, 0x10, 0x00, 0x00,
++ 0xa0, 0xb0, 0xa8, 0x68, 0xfc, 0xa0, 0xe8, 0xa8,
++ 0xe8, 0xd0, 0x90, 0xf4, 0x4c, 0x84, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x69, 0x2f, 0x1a, 0x2e, 0x7a,
++ 0x16, 0x3a, 0x3e, 0x33, 0x56, 0x10, 0x00, 0x00,
++ 0x20, 0x30, 0xe8, 0x28, 0xfc, 0xa0, 0xe8, 0xa8,
++ 0xe8, 0xd0, 0x90, 0xf4, 0x4c, 0x84, 0x00, 0x00,
++ 0x01, 0x3f, 0x0f, 0x7f, 0x0f, 0x7f, 0x1f, 0x2e,
++ 0x2f, 0x2e, 0x2e, 0x3f, 0x2a, 0x49, 0x00, 0x00,
++ 0x00, 0xf8, 0xe0, 0xfc, 0xe0, 0xfc, 0xe0, 0xdc,
++ 0xf8, 0xd0, 0x28, 0xfc, 0x58, 0x94, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x6f, 0x2f, 0x15, 0x2f, 0x7d,
++ 0x19, 0x35, 0x35, 0x31, 0x50, 0x17, 0x00, 0x00,
++ 0x20, 0xbc, 0x40, 0xf8, 0xfc, 0x74, 0xfc, 0xf0,
++ 0xf0, 0xf0, 0x10, 0xf4, 0xa4, 0x1c, 0x00, 0x00,
++ 0x10, 0x11, 0x1e, 0x28, 0x48, 0x7f, 0x08, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x3e, 0x23, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1e, 0x28, 0x48, 0x7f, 0x08, 0x2b,
++ 0x2a, 0x2a, 0x2a, 0x3e, 0x23, 0x22, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0x28, 0x28, 0x28, 0xfc,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x3f, 0x29, 0x49, 0x7f, 0x09,
++ 0x2d, 0x2d, 0x2d, 0x3e, 0x26, 0x24, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0x58, 0xe8, 0x38, 0x18, 0xe8,
++ 0xa8, 0x70, 0xfc, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x3e, 0x3e, 0x14, 0x66,
++ 0x0f, 0x11, 0x7f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0xf8, 0x50, 0x8c,
++ 0xf0, 0x00, 0xfc, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x0f, 0x09, 0x0f, 0x0f, 0x3e, 0x3e, 0x2a,
++ 0x3e, 0x0f, 0x7f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0xe0, 0xf8, 0xf8, 0xa8,
++ 0xf8, 0xe0, 0xfc, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x3f, 0x2b, 0x48, 0x7f, 0x0b,
++ 0x2d, 0x2c, 0x2f, 0x3c, 0x24, 0x23, 0x00, 0x00,
++ 0xf0, 0x10, 0xf0, 0xf0, 0xf8, 0x40, 0xfc, 0x78,
++ 0xd8, 0xf0, 0xfc, 0x90, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x3f, 0x29, 0x49, 0x7e, 0x09,
++ 0x2f, 0x2d, 0x2d, 0x3d, 0x25, 0x21, 0x00, 0x00,
++ 0x90, 0xfc, 0x90, 0xf8, 0x68, 0xf8, 0x90, 0xfc,
++ 0x20, 0xf8, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x44, 0x44, 0x44, 0x66, 0x55, 0x48,
++ 0x4c, 0x4c, 0x53, 0x51, 0x62, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0x48, 0x88,
++ 0xc8, 0xc8, 0x28, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x44, 0x08, 0x10, 0x1f, 0x01,
++ 0x01, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x88, 0x78, 0x00, 0xf0, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x22, 0x22, 0x3f, 0x21, 0x27,
++ 0x24, 0x24, 0x24, 0x23, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x88, 0xf8, 0x08, 0xe8,
++ 0x08, 0x08, 0x08, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x3f, 0x00, 0x7f, 0x00,
++ 0x01, 0x07, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x80,
++ 0x80, 0x60, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x3f, 0x21, 0x01, 0x7f,
++ 0x01, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0xfc,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x00, 0x1f, 0x10, 0x1f,
++ 0x11, 0x1f, 0x10, 0x10, 0x1f, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x00, 0xf0, 0x10, 0xf0,
++ 0x00, 0xf8, 0x80, 0x44, 0x34, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x02, 0x7f, 0x09, 0x1f,
++ 0x69, 0x0f, 0x09, 0x0f, 0x09, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x00, 0xfc, 0x20, 0xf0,
++ 0x2c, 0xe0, 0x20, 0xe8, 0x08, 0xf8, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x01, 0x01, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x00, 0xf8, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x3f, 0x08, 0x08, 0x7f,
++ 0x1c, 0x1a, 0x2a, 0x49, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x20, 0x20, 0xfc,
++ 0x70, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x00, 0x1c, 0x7f, 0x00,
++ 0x1c, 0x1c, 0x3e, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x10, 0x10, 0xfc, 0x10,
++ 0x90, 0x50, 0x50, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x10, 0x14, 0x64, 0x19,
++ 0x15, 0x7f, 0x2d, 0x2b, 0x49, 0x09, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0xf0, 0x90, 0xf0, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x14, 0x7e, 0x3e, 0x22,
++ 0x3e, 0x3e, 0x22, 0x26, 0x24, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x90, 0xe0, 0x88, 0x78,
++ 0x90, 0xe0, 0x88, 0x78, 0x88, 0x44, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x7f, 0x0f, 0x08, 0x0f,
++ 0x0f, 0x7f, 0x1f, 0x69, 0x09, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0xfc, 0xe0, 0x20, 0xe0,
++ 0xe0, 0xfc, 0xf0, 0x2c, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x14, 0x7f, 0x14, 0x1c,
++ 0x3e, 0x2a, 0x3e, 0x7f, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0xfc, 0xa0, 0xf8, 0xa0,
++ 0xf8, 0xa0, 0xfc, 0xd4, 0x6c, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x14, 0x7f, 0x14, 0x1c,
++ 0x3f, 0x2a, 0x3e, 0x7f, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x20, 0xf8, 0x60, 0x90,
++ 0xfc, 0xe8, 0xa8, 0xe8, 0x88, 0x18, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f,
++ 0x04, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x3f, 0x01, 0x01, 0x1f, 0x01,
++ 0x01, 0x7f, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x00, 0x00, 0xf0, 0x00,
++ 0x00, 0xfc, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x08, 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x08,
++ 0x0f, 0x11, 0x2f, 0x42, 0x3f, 0x00, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00,
++ 0xe0, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x22, 0x12, 0x14, 0x7f, 0x08, 0x08, 0x3e, 0x08,
++ 0x0e, 0x78, 0x10, 0x11, 0x27, 0x40, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0xa0, 0xa0, 0xa0, 0xfc, 0x90,
++ 0x90, 0x94, 0xcc, 0x8c, 0xf4, 0x04, 0x00, 0x00,
++ 0x22, 0x12, 0x14, 0x7f, 0x08, 0x09, 0x3e, 0x09,
++ 0x0e, 0x78, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0xfc, 0x00, 0xf8,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x1f, 0x07, 0x1c, 0x67,
++ 0x04, 0x3f, 0x1f, 0x01, 0x7f, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xfc, 0xf0, 0xf8, 0x08, 0xf8,
++ 0x40, 0xf8, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x22, 0x12, 0x14, 0x7f, 0x08, 0x08, 0x3e, 0x08,
++ 0x0f, 0x79, 0x11, 0x11, 0x21, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x40, 0xfc,
++ 0x24, 0x64, 0x94, 0xf4, 0x04, 0x18, 0x00, 0x00,
++ 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x06, 0x38,
++ 0x7f, 0x1a, 0x7f, 0x1e, 0x02, 0x0d, 0x00, 0x00,
++ 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x50, 0x48,
++ 0xfc, 0x28, 0x28, 0x14, 0x6c, 0x84, 0x00, 0x00,
++ 0x04, 0x3f, 0x01, 0x1f, 0x7f, 0x24, 0x4a, 0x3f,
++ 0x0f, 0x7f, 0x01, 0x7f, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0xf8, 0x00, 0xf0, 0xfc, 0x88, 0x64, 0xf8,
++ 0xe0, 0xfc, 0x00, 0xfc, 0x60, 0x1c, 0x00, 0x00,
++ 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x24, 0x42,
++ 0x3f, 0x0f, 0x01, 0x7f, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x88, 0x44,
++ 0xf8, 0xe0, 0x00, 0xfc, 0x60, 0x1c, 0x00, 0x00,
++ 0x44, 0x2b, 0x7f, 0x12, 0x12, 0x3a, 0x13, 0x1d,
++ 0x71, 0x11, 0x21, 0x21, 0x47, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x1f, 0x1f, 0x10, 0x1f, 0x3a,
++ 0x2f, 0x3b, 0x29, 0x3f, 0x29, 0x59, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0xf0, 0x10, 0xf0, 0xb8,
++ 0xe8, 0xa8, 0x38, 0xec, 0x2c, 0x44, 0x00, 0x00,
++ 0x08, 0x3f, 0x01, 0x1f, 0x7f, 0x01, 0x19, 0x7f,
++ 0x19, 0x19, 0x3d, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x20, 0xf8, 0x00, 0xf0, 0xfc, 0x00, 0x30, 0xfc,
++ 0x30, 0x30, 0x78, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x11, 0x12, 0x7c, 0x24,
++ 0x15, 0x1a, 0x08, 0x14, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0xd8, 0xd8, 0x68, 0x48, 0xd8, 0xd8,
++ 0x68, 0x48, 0x48, 0xd8, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x3e, 0x0a, 0x36, 0x0a, 0x32, 0x02, 0x3f,
++ 0x04, 0x09, 0x31, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xd8, 0x28, 0xc8, 0x00, 0xc0,
++ 0x44, 0x3c, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7d, 0x09, 0x4a, 0x2c, 0x28,
++ 0x29, 0x11, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x98, 0x98, 0xa8, 0xc8, 0x98,
++ 0x98, 0xa8, 0xc8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x70, 0x0f, 0x08, 0x0f, 0x00,
++ 0x7f, 0x0a, 0x36, 0x0a, 0x32, 0x06, 0x00, 0x00,
++ 0x00, 0x80, 0xe0, 0x1c, 0xe0, 0x20, 0xe0, 0x00,
++ 0xf8, 0x28, 0xd8, 0x28, 0xc8, 0x18, 0x00, 0x00,
++ 0x44, 0x27, 0x28, 0x7c, 0x12, 0x11, 0x3d, 0x10,
++ 0x19, 0x72, 0x14, 0x10, 0x20, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xc8, 0xa8, 0xa8, 0x88,
++ 0x98, 0xa8, 0xc8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x04, 0x7c, 0x04, 0x3c, 0x04, 0x7c, 0x08, 0x7f,
++ 0x06, 0x1a, 0x67, 0x1a, 0x63, 0x06, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0xf8, 0x80, 0xfc, 0x80, 0xf8,
++ 0x18, 0x68, 0x98, 0x68, 0x88, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x3e, 0x3a, 0x26, 0x3a, 0x26, 0x26,
++ 0x7f, 0x0a, 0x36, 0x0a, 0x32, 0x06, 0x00, 0x00,
++ 0x40, 0xfc, 0x08, 0x48, 0x48, 0x48, 0x48, 0x18,
++ 0xf8, 0x28, 0xd8, 0x28, 0xc8, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x3e, 0x22, 0x3f, 0x20, 0x3e,
++ 0x2e, 0x7f, 0x6e, 0x2e, 0x2e, 0x26, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xd8, 0xd8, 0x68, 0x48, 0xd8,
++ 0xd8, 0x68, 0x48, 0x48, 0x48, 0xd8, 0x00, 0x00,
++ 0x00, 0x3f, 0x2e, 0x34, 0x3f, 0x2c, 0x32, 0x3f,
++ 0x3e, 0x0a, 0x36, 0x0a, 0x32, 0x06, 0x00, 0x00,
++ 0x00, 0x70, 0x54, 0x8c, 0xf8, 0x50, 0x30, 0xcc,
++ 0xf8, 0x28, 0xd8, 0x28, 0xc8, 0x18, 0x00, 0x00,
++ 0x08, 0x3d, 0x08, 0x7e, 0x25, 0x7e, 0x24, 0x3e,
++ 0x41, 0x7e, 0x14, 0x14, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0xd8, 0xd8, 0x68, 0x48, 0xd8, 0xd8,
++ 0x68, 0x48, 0x48, 0xdc, 0x04, 0xfc, 0x00, 0x00,
++ 0x06, 0x7b, 0x2a, 0x1c, 0x7f, 0x1c, 0x1a, 0x29,
++ 0x7e, 0x2a, 0x3e, 0x2a, 0x3f, 0x22, 0x00, 0x00,
++ 0x00, 0xf4, 0x78, 0xb8, 0xb4, 0xac, 0xa4, 0xf4,
++ 0xb8, 0xb8, 0xb4, 0xac, 0x2c, 0x24, 0x00, 0x00,
++ 0x02, 0x1f, 0x02, 0x7f, 0x03, 0x0f, 0x72, 0x01,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x10, 0xe0, 0x40, 0xfc, 0x30, 0xc8, 0x08, 0xf8,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x02, 0x1f, 0x02, 0x7f, 0x03, 0x0f, 0x72, 0x01,
++ 0x1f, 0x03, 0x3e, 0x03, 0x7e, 0x01, 0x00, 0x00,
++ 0x10, 0xe0, 0x40, 0xfc, 0x30, 0xc8, 0x08, 0xf8,
++ 0x80, 0xf0, 0x00, 0xfc, 0x04, 0xfc, 0x00, 0x00,
++ 0x02, 0x1f, 0x02, 0x7f, 0x03, 0x0f, 0x71, 0x3f,
++ 0x02, 0x3f, 0x0f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x10, 0xe0, 0x40, 0xfc, 0x30, 0xc4, 0xfc, 0xf8,
++ 0x20, 0xf8, 0xe0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x1f, 0x01, 0x01, 0x7f,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc,
++ 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x0e, 0x78, 0x08, 0x3e, 0x09, 0x7e, 0x08,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x09, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x20, 0x30, 0x48, 0x58, 0xe4, 0x04, 0x00, 0x00,
++ 0x08, 0x0e, 0x78, 0x08, 0x3e, 0x08, 0x7f, 0x08,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0xf8, 0x88,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x0e, 0x78, 0x08, 0x3e, 0x08, 0x7e, 0x08,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0xf0, 0x90, 0x80,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x1f, 0x72, 0x12, 0x3b, 0x12, 0x7e, 0x1b,
++ 0x36, 0x36, 0x53, 0x16, 0x10, 0x11, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xe8, 0xc8, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x08, 0x0f, 0x79, 0x09, 0x3f, 0x09, 0x7f, 0x0d,
++ 0x1b, 0x1b, 0x29, 0x4a, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x00, 0xfc, 0x54, 0x78,
++ 0xcc, 0xfc, 0x48, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x12, 0x1e, 0x12, 0x12, 0x1f,
++ 0x12, 0x12, 0x1e, 0x72, 0x03, 0x02, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x24, 0xa4, 0xa8, 0xb0, 0x20,
++ 0x30, 0x50, 0x50, 0x88, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x7e, 0x24, 0x24, 0x3c, 0x24, 0x24, 0x3c,
++ 0x24, 0x24, 0x3c, 0x64, 0x07, 0x04, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xa0, 0xb8, 0xa0, 0xa0,
++ 0xa0, 0xa0, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x2a, 0x2a, 0x3a, 0x2a, 0x2a, 0x3a,
++ 0x2a, 0x2b, 0x3e, 0x68, 0x09, 0x0a, 0x00, 0x00,
++ 0x80, 0x38, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xb8, 0xa0, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x7e, 0x24, 0x24, 0x3d, 0x27, 0x24, 0x3f,
++ 0x24, 0x24, 0x3c, 0x64, 0x04, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0xf8,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7e, 0x24, 0x24, 0x3c, 0x25, 0x24, 0x3c,
++ 0x24, 0x24, 0x3c, 0x64, 0x04, 0x04, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x7f, 0x25, 0x25, 0x3d, 0x25, 0x24, 0x3f,
++ 0x24, 0x24, 0x3c, 0x64, 0x04, 0x04, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x00, 0xfc,
++ 0x40, 0x78, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x1e, 0x1e, 0x12, 0x1f, 0x72,
++ 0x03, 0x09, 0x35, 0x09, 0x31, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x48, 0x30, 0x70, 0x88, 0x44,
++ 0x90, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x1e, 0x28, 0x7f, 0x0c, 0x12, 0x20, 0x7f,
++ 0x08, 0x0f, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0xfc,
++ 0x20, 0xe0, 0xe0, 0x3c, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x7e, 0x25, 0x25, 0x3e, 0x25, 0x24, 0x3c,
++ 0x24, 0x24, 0x3c, 0x64, 0x05, 0x06, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x00, 0xfc, 0x20, 0xa0,
++ 0xb8, 0xa0, 0xa0, 0xe0, 0x20, 0x1c, 0x00, 0x00,
++ 0x01, 0x7d, 0x2e, 0x2a, 0x39, 0x2a, 0x2f, 0x38,
++ 0x28, 0x2f, 0x38, 0x68, 0x09, 0x0a, 0x00, 0x00,
++ 0x10, 0x10, 0xe8, 0xa8, 0x10, 0xa8, 0xfc, 0x44,
++ 0x90, 0xfc, 0x90, 0x90, 0x10, 0x10, 0x00, 0x00,
++ 0x09, 0x31, 0x0a, 0x15, 0x71, 0x12, 0x14, 0x7f,
++ 0x08, 0x0f, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x10, 0x90, 0x68, 0x44, 0x78, 0xc0, 0x7c, 0xfc,
++ 0x20, 0xe0, 0xe0, 0x3c, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x3e, 0x2a, 0x3e, 0x21,
++ 0x5f, 0x0f, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x70, 0x50, 0x54, 0x8c, 0xf8, 0x50, 0x30, 0xcc,
++ 0xf8, 0xe0, 0xe0, 0x38, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x7f, 0x25, 0x25, 0x3d, 0x25, 0x25, 0x3d,
++ 0x24, 0x25, 0x3d, 0x66, 0x04, 0x04, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0x78, 0xa8, 0x68, 0x98, 0xf8,
++ 0x40, 0xa8, 0xa4, 0x84, 0x90, 0x70, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x07, 0x07, 0x3f, 0x00, 0x7f,
++ 0x12, 0x1e, 0x1e, 0x12, 0x7f, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xc0, 0xc0, 0xc0, 0x40, 0xfc,
++ 0x90, 0xf0, 0xf0, 0x90, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x2a, 0x2d, 0x3a, 0x2c, 0x2b, 0x3a,
++ 0x2f, 0x28, 0x3f, 0x68, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x48, 0xa8, 0x94, 0x70, 0xf8, 0xa8,
++ 0xfc, 0x00, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x7c, 0x2f, 0x38, 0x3b, 0x2a, 0x3b, 0x68,
++ 0x7f, 0x28, 0x7a, 0x3a, 0x6c, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0xa8, 0xf8, 0x00,
++ 0xfc, 0x40, 0xa8, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x7f, 0x01, 0x1f, 0x01,
++ 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0xfc, 0x10, 0xf0, 0x00,
++ 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x20, 0x26, 0x38, 0x22, 0x1f, 0x10, 0x1e, 0x28,
++ 0x7e, 0x08, 0x15, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x28, 0xfc, 0x28, 0xf8, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x20, 0x3c, 0x21, 0x3c, 0x20, 0x7e,
++ 0x10, 0x18, 0x25, 0x2a, 0x72, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x28, 0xfc, 0x28, 0xf8, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x7f, 0x01, 0x1f, 0x15, 0x1d,
++ 0x11, 0x1f, 0x11, 0x1d, 0x25, 0x45, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xfc, 0x10, 0xf0, 0x50, 0x70,
++ 0x10, 0xf0, 0x10, 0x70, 0x50, 0x50, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x24, 0x3c, 0x24, 0x24,
++ 0x3c, 0x24, 0x24, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x20, 0x1f, 0x00, 0x1f, 0x10,
++ 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x24, 0x3f, 0x24, 0x24,
++ 0x3c, 0x24, 0x24, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3c, 0x24, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x68,
++ 0x98, 0x18, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x3f, 0x20, 0x3f, 0x20, 0x1f,
++ 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xe8, 0x08, 0xe8, 0x08, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x24, 0x3c, 0x24, 0x24,
++ 0x3c, 0x24, 0x24, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0x40, 0x60, 0x60,
++ 0x60, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x24, 0x24, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x09, 0x09, 0x17, 0x61, 0x00, 0x1f,
++ 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0xf8, 0x00, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x25, 0x3e, 0x24, 0x24,
++ 0x3c, 0x24, 0x24, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x40, 0x40, 0x7c, 0x40,
++ 0x40, 0x7c, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x25, 0x27, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0xd4, 0x14, 0x0c, 0xfc, 0x04, 0x00, 0x00,
++ 0x01, 0x3f, 0x21, 0x3f, 0x21, 0x3f, 0x00, 0x1f,
++ 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x24, 0x3c, 0x24, 0x25,
++ 0x3e, 0x24, 0x24, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x40, 0x60, 0xd0, 0x48,
++ 0x44, 0x44, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x26, 0x3f, 0x24, 0x24,
++ 0x3f, 0x24, 0x24, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0x50, 0x48, 0x44, 0xf8, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x24, 0x3f, 0x24, 0x24,
++ 0x3d, 0x25, 0x26, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x40, 0x20, 0x20, 0xc0, 0x48, 0xe8, 0xf0, 0xe0,
++ 0x50, 0x50, 0x48, 0x44, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x25, 0x3e, 0x24, 0x27,
++ 0x3c, 0x24, 0x24, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0xe8, 0x04, 0xf8,
++ 0x40, 0x78, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x26, 0x25, 0x25, 0x3c, 0x27, 0x24,
++ 0x3c, 0x24, 0x25, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0x50, 0x60, 0x40, 0xfc, 0xa0,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x25, 0x3d, 0x24, 0x24,
++ 0x3d, 0x24, 0x24, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x00, 0xfc, 0xa8, 0xa8, 0x50, 0x50, 0xa8, 0x00,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x15, 0x16, 0x34, 0x57, 0x14,
++ 0x14, 0x14, 0x14, 0x14, 0x14, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x90, 0x60, 0xf0, 0x0c, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x1f, 0x1f, 0x10, 0x1f, 0x14, 0x37, 0x2c,
++ 0x5f, 0x10, 0x1f, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0x00, 0xfc, 0x90, 0x60, 0x1c,
++ 0xf0, 0x10, 0xf0, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x24, 0x3d, 0x25, 0x27,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0xa0, 0x38, 0x48, 0x68,
++ 0xd0, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x28, 0x29, 0x32, 0x28, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0xf8, 0x20, 0xfc, 0x00, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x38, 0x28, 0x2b, 0x2a, 0x3a, 0x2b, 0x2a,
++ 0x3a, 0x2f, 0x28, 0x28, 0x29, 0x5a, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8,
++ 0xa8, 0xfc, 0xa0, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3c, 0x24, 0x27, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x50, 0x90, 0xfc, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x24, 0x3c, 0x27, 0x24,
++ 0x3c, 0x27, 0x24, 0x25, 0x25, 0x4e, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xbc, 0xa0,
++ 0xe0, 0xbc, 0xa0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x38, 0x2b, 0x2a, 0x2a, 0x3a, 0x2a, 0x2b,
++ 0x3a, 0x2a, 0x2a, 0x2c, 0x2c, 0x58, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x48, 0x48, 0x88, 0xfc, 0xc8,
++ 0xa8, 0xa8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x01, 0x3c, 0x24, 0x27, 0x24, 0x3c, 0x24, 0x27,
++ 0x3c, 0x24, 0x24, 0x25, 0x25, 0x4e, 0x00, 0x00,
++ 0x08, 0x88, 0x90, 0xfc, 0x90, 0x90, 0x90, 0xfc,
++ 0x90, 0x90, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x38, 0x2f, 0x29, 0x2a, 0x3a, 0x2f, 0x29,
++ 0x3d, 0x2d, 0x2b, 0x2b, 0x2c, 0x58, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x28, 0xfc, 0x28, 0xf8, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0xe0, 0x3c, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3c, 0x25, 0x25, 0x26, 0x24, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xa8, 0xa4, 0x84, 0x90, 0x70, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x25, 0x3d, 0x24, 0x24,
++ 0x3d, 0x26, 0x25, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0xa0, 0xa0,
++ 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x24, 0x3c, 0x25, 0x25,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0xa8, 0xa8, 0x50, 0x50, 0xa8, 0x40, 0xf8, 0x28,
++ 0xe8, 0x28, 0x58, 0x88, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3d, 0x26, 0x26, 0x27, 0x3e, 0x26, 0x27,
++ 0x3e, 0x24, 0x24, 0x24, 0x25, 0x4e, 0x00, 0x00,
++ 0x40, 0x58, 0x48, 0x48, 0x58, 0x48, 0x48, 0x58,
++ 0x48, 0x60, 0xa0, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x24,
++ 0x3d, 0x25, 0x25, 0x25, 0x27, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0x28, 0x58, 0x88, 0xf8, 0x00,
++ 0xf8, 0x68, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3b, 0x28, 0x29, 0x29, 0x39, 0x28, 0x2b,
++ 0x3a, 0x2b, 0x2a, 0x2a, 0x2a, 0x5a, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0xa8, 0x38, 0xe8, 0x48, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x24, 0x27, 0x25, 0x24, 0x4c, 0x00, 0x00,
++ 0x50, 0xfc, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x48,
++ 0x58, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x25, 0x24, 0x3f, 0x26, 0x27,
++ 0x3c, 0x24, 0x24, 0x24, 0x25, 0x4e, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0xfc, 0x48, 0xfc,
++ 0x40, 0x78, 0x48, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x7e, 0x11, 0x1e, 0x14, 0x24, 0x39, 0x4f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0xfc, 0x20, 0xe8, 0x90, 0xe8, 0x84, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x3f, 0x25, 0x26, 0x25, 0x3e, 0x24, 0x25,
++ 0x3e, 0x25, 0x24, 0x25, 0x24, 0x4f, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xd8, 0xa8, 0xc8, 0x40, 0xb0,
++ 0x4c, 0xa0, 0x48, 0x90, 0x60, 0x80, 0x00, 0x00,
++ 0x00, 0x3b, 0x2a, 0x2a, 0x2b, 0x3a, 0x2b, 0x2b,
++ 0x3b, 0x2a, 0x2b, 0x2a, 0x2b, 0x5a, 0x00, 0x00,
++ 0x00, 0xf8, 0x38, 0x28, 0xf8, 0x28, 0xe8, 0x78,
++ 0xf8, 0x68, 0xb8, 0x58, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x27, 0x26, 0x3f, 0x27, 0x24,
++ 0x3d, 0x24, 0x27, 0x24, 0x25, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x48, 0x58, 0x58, 0x00,
++ 0xf8, 0x08, 0xfc, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x26, 0x24, 0x3d, 0x27, 0x24,
++ 0x3d, 0x24, 0x25, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0xa4, 0x1c, 0xf8, 0x90,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x26, 0x27, 0x3c, 0x24, 0x27,
++ 0x3c, 0x25, 0x24, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xfc, 0x50, 0x88, 0xf4,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x27, 0x25, 0x3d, 0x25, 0x25,
++ 0x3f, 0x25, 0x25, 0x26, 0x25, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0xfc, 0x00, 0xf8, 0xa8, 0x48, 0xb0, 0x00, 0x00,
++ 0x00, 0x38, 0x2f, 0x2b, 0x28, 0x3f, 0x2b, 0x2a,
++ 0x3b, 0x2b, 0x2a, 0x2b, 0x29, 0x5a, 0x00, 0x00,
++ 0x28, 0x24, 0xfc, 0xe0, 0x20, 0xe0, 0xe0, 0x50,
++ 0xd0, 0xd4, 0x4c, 0xcc, 0x84, 0x44, 0x00, 0x00,
++ 0x00, 0x3f, 0x25, 0x24, 0x27, 0x3c, 0x25, 0x26,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x18, 0xe8, 0x48, 0xd0, 0xfc, 0xe0, 0x50, 0x4c,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x24, 0x3f, 0x25, 0x25,
++ 0x3e, 0x24, 0x27, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0xd0, 0x40, 0xfc, 0x50, 0x50,
++ 0xe8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x26, 0x27, 0x3f, 0x26, 0x27,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x40, 0xa0, 0xf0, 0x08, 0xfc, 0x58, 0xe8, 0xf8,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x02, 0x3d, 0x25, 0x24, 0x26, 0x3d, 0x25, 0x24,
++ 0x3f, 0x25, 0x25, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x78, 0x90, 0xfc, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x48, 0xd8, 0x7c, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x27, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x25, 0x25, 0x26, 0x26, 0x4c, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xfc, 0x54, 0x8c, 0x70, 0xfc,
++ 0x70, 0x70, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x3f, 0x3f, 0x2a, 0x3f, 0x52,
++ 0x3f, 0x10, 0x1f, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x70, 0x54, 0x9c, 0xf8, 0x50, 0x30, 0xcc,
++ 0xf0, 0x10, 0xf0, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3f, 0x3e, 0x32, 0x5e, 0x1f,
++ 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x20, 0xf8, 0x50, 0xfc, 0x20, 0xf8, 0x20, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x12, 0x15, 0x1e, 0x14, 0x14,
++ 0x13, 0x12, 0x13, 0x23, 0x22, 0x42, 0x00, 0x00,
++ 0x80, 0xfc, 0x90, 0xfc, 0xf8, 0xf8, 0x90, 0xfc,
++ 0xf0, 0x10, 0xf0, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x27, 0x3c, 0x27, 0x26,
++ 0x3e, 0x27, 0x25, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xb8, 0xa8,
++ 0xa8, 0xb8, 0x10, 0x98, 0x64, 0x44, 0x00, 0x00,
++ 0x00, 0x38, 0x2f, 0x28, 0x2f, 0x3a, 0x2b, 0x2c,
++ 0x39, 0x29, 0x29, 0x29, 0x2a, 0x5c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa4, 0xf8, 0xe8, 0xf8, 0x44,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3b, 0x28, 0x2b, 0x2a, 0x3f, 0x2b, 0x28,
++ 0x3b, 0x28, 0x2b, 0x2a, 0x2a, 0x5a, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x48, 0x58, 0x58, 0x40,
++ 0xf8, 0x80, 0xf8, 0xa8, 0xa8, 0xb8, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x28, 0x29, 0x3f, 0x29, 0x29,
++ 0x3b, 0x2d, 0x28, 0x2a, 0x2a, 0x5c, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xe0, 0x10, 0xf4, 0xb8, 0xb0,
++ 0xf4, 0xac, 0x00, 0xa8, 0x54, 0x54, 0x00, 0x00,
++ 0x02, 0x3a, 0x2c, 0x2a, 0x2b, 0x3a, 0x2a, 0x2b,
++ 0x3b, 0x2a, 0x2b, 0x2a, 0x2b, 0x5e, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0x48, 0xf8, 0x68, 0xe8, 0xf8,
++ 0x68, 0xd8, 0x68, 0xd8, 0x6c, 0xc4, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3c, 0x27, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0xa0, 0xa0, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0xf8, 0x48, 0x68, 0x98, 0xf8, 0x30, 0x00, 0x00,
++ 0x00, 0x38, 0x2b, 0x2a, 0x2b, 0x3a, 0x2a, 0x2a,
++ 0x3a, 0x2a, 0x2b, 0x2b, 0x2d, 0x5b, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0x68, 0xb8, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0xf8, 0x68, 0x68, 0xfc, 0x00, 0x00,
++ 0x01, 0x3f, 0x29, 0x28, 0x2d, 0x3d, 0x2f, 0x29,
++ 0x3f, 0x2b, 0x2b, 0x2d, 0x2a, 0x5c, 0x00, 0x00,
++ 0x10, 0xfc, 0x18, 0x14, 0xfc, 0x10, 0xf4, 0xd4,
++ 0xf8, 0xb8, 0xf4, 0xdc, 0xec, 0x44, 0x00, 0x00,
++ 0x13, 0x6f, 0x13, 0x2b, 0x7f, 0x3a, 0x57, 0x01,
++ 0x3f, 0x22, 0x2d, 0x22, 0x2c, 0x20, 0x00, 0x00,
++ 0x90, 0xe8, 0x90, 0xa8, 0xfc, 0xb8, 0xd4, 0x00,
++ 0xf8, 0xc8, 0x28, 0xc8, 0x28, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x2f, 0x28, 0x2f, 0x3d, 0x2f, 0x0c,
++ 0x7c, 0x2f, 0x2d, 0x57, 0x14, 0x20, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xc8, 0x48, 0xc8, 0xa8,
++ 0xb0, 0xb0, 0x14, 0xf4, 0x4c, 0x84, 0x00, 0x00,
++ 0x01, 0x1f, 0x0f, 0x0f, 0x08, 0x0f, 0x3f, 0x2f,
++ 0x42, 0x1f, 0x0f, 0x01, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0xe0, 0xe0, 0x20, 0xe0, 0xfc, 0xe8,
++ 0x40, 0xf0, 0xe0, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x7c, 0x13, 0x18, 0x25, 0x7c, 0x13, 0x11,
++ 0x7e, 0x13, 0x10, 0x1d, 0x62, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0xa0, 0xfc, 0x30,
++ 0xc8, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x01, 0x05, 0x39, 0x21, 0x21, 0x3d, 0x21, 0x21,
++ 0x3d, 0x21, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x08, 0x08, 0x78, 0x08, 0x08,
++ 0x78, 0x88, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x02, 0x1c, 0x10, 0x1e, 0x10, 0x10, 0x1f, 0x12,
++ 0x02, 0x7f, 0x02, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x50,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x02, 0x7f, 0x04, 0x1a,
++ 0x6c, 0x08, 0x0e, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x80, 0xfc, 0x40, 0x30,
++ 0xec, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x02, 0x3c, 0x3e, 0x20, 0x3f, 0x1f, 0x11, 0x1f,
++ 0x11, 0x1f, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0xf8, 0x08, 0xf8, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0xf8, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x0a, 0x32, 0x23, 0x22, 0x3b, 0x20, 0x3a, 0x22,
++ 0x22, 0x7f, 0x00, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x38, 0x88, 0x08, 0xb8, 0x88, 0xb8, 0x88,
++ 0x88, 0xfc, 0x00, 0x60, 0x18, 0x04, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x1f, 0x71, 0x1f, 0x1f, 0x1f,
++ 0x02, 0x1c, 0x1e, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0xc0, 0xf8, 0x00, 0xe0, 0xe0, 0xf8,
++ 0x00, 0xf0, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x18, 0x6f, 0x01, 0x01, 0x3f,
++ 0x01, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x30, 0xec, 0x00, 0x00, 0xf8,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x08, 0x08, 0x7f, 0x08, 0x08,
++ 0x3e, 0x22, 0x22, 0x22, 0x3e, 0x23, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0xa0, 0xa0, 0xa0, 0xfc, 0xa0,
++ 0xa0, 0x90, 0x94, 0xac, 0xcc, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x3f, 0x49, 0x09, 0x7f,
++ 0x09, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x12, 0x1a, 0x16, 0x17, 0x1f,
++ 0x72, 0x1a, 0x1a, 0x2a, 0x23, 0x46, 0x00, 0x00,
++ 0x70, 0x10, 0x50, 0x50, 0x88, 0x88, 0x24, 0x20,
++ 0x20, 0x50, 0x48, 0x98, 0xe4, 0x04, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x13, 0x1a, 0x16, 0x16, 0x1f,
++ 0x72, 0x1a, 0x1a, 0x2a, 0x23, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x40, 0x40, 0x78, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x09, 0x1e, 0x12, 0x1a, 0x16, 0x16, 0x1f,
++ 0x72, 0x1a, 0x1a, 0x2a, 0x22, 0x46, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xe8, 0xa8, 0xa8, 0xa8,
++ 0xe8, 0xa8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x12, 0x1a, 0x16, 0x16, 0x1f,
++ 0x72, 0x1a, 0x1a, 0x2a, 0x22, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x04, 0x09, 0x1e, 0x12, 0x1b, 0x16, 0x17, 0x1e,
++ 0x72, 0x1b, 0x1a, 0x2a, 0x22, 0x46, 0x00, 0x00,
++ 0x0c, 0xf0, 0xa8, 0xa4, 0x24, 0x10, 0xf8, 0x10,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x12, 0x1b, 0x16, 0x16, 0x1e,
++ 0x72, 0x1a, 0x1b, 0x2b, 0x22, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0xf8, 0x04, 0xf8, 0xf8, 0x88,
++ 0xf8, 0x80, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x10, 0x3d, 0x25, 0x35, 0x2d, 0x2d, 0x3f,
++ 0x64, 0x37, 0x34, 0x34, 0x25, 0x4e, 0x00, 0x00,
++ 0x40, 0xc0, 0x58, 0x48, 0xd8, 0x48, 0xd8, 0x48,
++ 0x40, 0xf8, 0x90, 0x60, 0xb0, 0x0c, 0x00, 0x00,
++ 0x08, 0x11, 0x3c, 0x27, 0x36, 0x2d, 0x2d, 0x3e,
++ 0x65, 0x34, 0x37, 0x34, 0x25, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x48, 0xd8, 0xd8, 0x40,
++ 0xf8, 0x08, 0xfc, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x13, 0x3c, 0x27, 0x36, 0x2f, 0x2e, 0x3f,
++ 0x65, 0x35, 0x35, 0x35, 0x25, 0x4d, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x13, 0x1a, 0x16, 0x16, 0x1e,
++ 0x72, 0x1a, 0x1a, 0x2a, 0x23, 0x46, 0x00, 0x00,
++ 0x20, 0xf8, 0x50, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x09, 0x10, 0x3f, 0x24, 0x35, 0x2c, 0x2f, 0x3c,
++ 0x65, 0x37, 0x34, 0x37, 0x24, 0x4d, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x68,
++ 0xa4, 0xfc, 0xe8, 0x94, 0xec, 0x84, 0x00, 0x00,
++ 0x08, 0x10, 0x3f, 0x25, 0x35, 0x2e, 0x2f, 0x3c,
++ 0x67, 0x36, 0x36, 0x36, 0x27, 0x4e, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x50, 0x50, 0xe8, 0xfc, 0x00,
++ 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x13, 0x3c, 0x27, 0x36, 0x2c, 0x2f, 0x3c,
++ 0x67, 0x34, 0x37, 0x34, 0x27, 0x4c, 0x00, 0x00,
++ 0x90, 0xfc, 0x90, 0xfc, 0xe8, 0x00, 0xfc, 0x48,
++ 0xe8, 0xb0, 0x70, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x08, 0x10, 0x3f, 0x25, 0x35, 0x2d, 0x2d, 0x3d,
++ 0x66, 0x35, 0x35, 0x35, 0x25, 0x4d, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xf8, 0x48, 0xf8, 0xf8, 0xa8,
++ 0x54, 0xf8, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x10, 0x3d, 0x25, 0x35, 0x2d, 0x2d, 0x3d,
++ 0x65, 0x35, 0x35, 0x36, 0x26, 0x4d, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0x68, 0xb8, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0xf8, 0xe8, 0xe8, 0xfc, 0x00, 0x00,
++ 0x04, 0x09, 0x1e, 0x12, 0x1a, 0x16, 0x16, 0x1f,
++ 0x72, 0x1a, 0x1a, 0x2a, 0x23, 0x47, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8,
++ 0x88, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x1c, 0x3e, 0x2a, 0x3e, 0x08,
++ 0x3e, 0x08, 0x7e, 0x14, 0x22, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0xa4,
++ 0xa4, 0xa8, 0x90, 0x90, 0xe8, 0x84, 0x00, 0x00,
++ 0x5b, 0x7f, 0x5b, 0x7f, 0x7f, 0x5b, 0x7f, 0x00,
++ 0x7f, 0x3e, 0x22, 0x3e, 0x16, 0x78, 0x00, 0x00,
++ 0x40, 0x78, 0x90, 0x20, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0x88, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a,
++ 0x3e, 0x2a, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0xa8, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x08, 0x08, 0x04,
++ 0x04, 0x02, 0x01, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x20, 0x20, 0x20, 0x40,
++ 0x40, 0x80, 0x00, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x1f, 0x10,
++ 0x22, 0x41, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0x00, 0xf8, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x01, 0x7f, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xfc, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x1f, 0x00, 0x7f,
++ 0x04, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x00, 0xfc,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x07, 0x04, 0x04, 0x08,
++ 0x3f, 0x04, 0x02, 0x03, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xc0, 0x48, 0x48, 0x38,
++ 0xe0, 0x40, 0x80, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x08, 0x0f, 0x12, 0x72, 0x1f, 0x12, 0x0c, 0x38,
++ 0x0f, 0x12, 0x72, 0x1f, 0x04, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xc8, 0x48, 0x30, 0x00,
++ 0xf8, 0x48, 0x48, 0xc8, 0x48, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x07, 0x04, 0x08, 0x10,
++ 0x7f, 0x02, 0x02, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xc0, 0x40, 0x20, 0x10,
++ 0xec, 0x20, 0x20, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x04, 0x10, 0x12, 0x11,
++ 0x11, 0x10, 0x10, 0x16, 0x18, 0x63, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x30, 0x28, 0xc4, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x10, 0x1f, 0x10,
++ 0x10, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x0f, 0x10, 0x2f,
++ 0x48, 0x08, 0x0f, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x08, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x01, 0x1f, 0x11, 0x1f,
++ 0x11, 0x11, 0x7f, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0x10, 0xfc, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xe0, 0x20, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x06, 0x03, 0x0c, 0x32, 0x03,
++ 0x0e, 0x71, 0x01, 0x00, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xe0, 0x40, 0x80, 0x80,
++ 0x60, 0x1c, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x0f, 0x0a, 0x09, 0x7f,
++ 0x12, 0x11, 0x11, 0x3f, 0x20, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xe0, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0xf8, 0x40, 0x80, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x10, 0x1f, 0x20, 0x4f, 0x09,
++ 0x08, 0x7f, 0x12, 0x11, 0x3f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x00, 0xe0, 0x20,
++ 0xa0, 0xfc, 0x20, 0x20, 0xf8, 0xc0, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x10, 0x09, 0x49, 0x21,
++ 0x21, 0x09, 0x11, 0x11, 0x21, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x08, 0x08,
++ 0x08, 0x30, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x17, 0x10,
++ 0x31, 0x50, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x10, 0x10, 0xfc, 0x10,
++ 0x10, 0x90, 0x90, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3f, 0x09, 0x09, 0x11,
++ 0x21, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x20, 0x10, 0x08,
++ 0x08, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x0f, 0x10, 0x2f,
++ 0x48, 0x0f, 0x08, 0x08, 0x08, 0x07, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x08, 0x88,
++ 0x88, 0x88, 0xb0, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x06, 0x38, 0x24, 0x24,
++ 0x24, 0x24, 0x3c, 0x64, 0x08, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x10, 0x10, 0x1f,
++ 0x10, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x01, 0x7f, 0x01,
++ 0x3f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xfc, 0x00,
++ 0xf8, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x01, 0x3f, 0x00,
++ 0x08, 0x04, 0x04, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xf8, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x3f, 0x21, 0x2f,
++ 0x21, 0x22, 0x24, 0x28, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x08, 0xe8,
++ 0x08, 0x88, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x3f, 0x20, 0x27,
++ 0x24, 0x24, 0x27, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x08, 0xc8,
++ 0x48, 0x48, 0xc8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x01, 0x03, 0x3c, 0x03,
++ 0x06, 0x7f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xe0, 0x40, 0x80,
++ 0x60, 0xfc, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x32, 0x12,
++ 0x0c, 0x04, 0x0c, 0x12, 0x7f, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x20, 0x20, 0xc8, 0x48,
++ 0x30, 0x10, 0x30, 0x48, 0xf4, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x09, 0x09, 0x1f, 0x21,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0x00, 0xf0, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x0f, 0x10, 0x2f,
++ 0x48, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x08, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x7e, 0x12,
++ 0x12, 0x3a, 0x24, 0x06, 0x1a, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x01, 0x7f, 0x02, 0x0f,
++ 0x08, 0x18, 0x6f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x00, 0xf0,
++ 0x20, 0x40, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x02, 0x04, 0x18, 0x6f,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x80, 0x40, 0x30, 0xec,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x10, 0x17,
++ 0x30, 0x50, 0x10, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x50, 0x48, 0x40, 0xfc,
++ 0x40, 0x60, 0xa0, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x10, 0x08, 0x4b, 0x22,
++ 0x22, 0x0a, 0x12, 0x12, 0x21, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xfc, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x01, 0x03, 0x0e, 0x31,
++ 0x01, 0x0f, 0x74, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x20, 0x40,
++ 0x80, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x01, 0x06, 0x18,
++ 0x00, 0x7f, 0x12, 0x12, 0x22, 0x4d, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0x10, 0x60,
++ 0x00, 0xf8, 0x48, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x17, 0x10,
++ 0x32, 0x51, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x80, 0x80, 0xf8, 0x10,
++ 0x10, 0x20, 0x20, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x78, 0x0b, 0x10, 0x3a,
++ 0x0a, 0x4a, 0x32, 0x11, 0x2c, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x18, 0xe0, 0x40, 0x40,
++ 0x78, 0x40, 0x40, 0xf8, 0x00, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x06, 0x38, 0x08, 0x7f,
++ 0x08, 0x0e, 0x78, 0x08, 0x0b, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x50, 0x48, 0x40, 0xfc,
++ 0x48, 0x30, 0x20, 0xd4, 0x0c, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x02, 0x04, 0x1f, 0x60,
++ 0x1f, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x80, 0x40, 0xf0, 0x0c,
++ 0xe0, 0x40, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x7f, 0x09, 0x09,
++ 0x15, 0x23, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x20, 0x30,
++ 0x48, 0x88, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x7f, 0x08, 0x11, 0x33,
++ 0x08, 0x3f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xfc, 0x88, 0x10, 0x30,
++ 0x88, 0xf8, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x13, 0x12, 0x13, 0x10,
++ 0x1f, 0x01, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf0, 0x10, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x10, 0x09, 0x49, 0x22,
++ 0x22, 0x0c, 0x10, 0x10, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x50, 0x48, 0x44,
++ 0x4c, 0xd0, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3c, 0x24, 0x25, 0x3c,
++ 0x24, 0x3c, 0x24, 0x26, 0x39, 0x62, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x24, 0x24, 0x3c, 0x27,
++ 0x04, 0x7c, 0x14, 0x14, 0x27, 0x44, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x02, 0x04, 0x1f, 0x61,
++ 0x1f, 0x01, 0x05, 0x19, 0x61, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x80, 0x40, 0xf0, 0x0c,
++ 0xf0, 0x00, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x02, 0x1f, 0x11, 0x11,
++ 0x1f, 0x11, 0x03, 0x05, 0x19, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x40, 0x24, 0x24, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3f, 0x00, 0x0f, 0x08,
++ 0x08, 0x0f, 0x04, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xe0, 0x20,
++ 0x20, 0xe0, 0x40, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3f, 0x02, 0x0e, 0x05,
++ 0x18, 0x61, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0x10, 0x90,
++ 0x60, 0x00, 0x88, 0x84, 0x24, 0xe0, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x01, 0x7f, 0x05,
++ 0x19, 0x6f, 0x02, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x70, 0xc0, 0x00, 0xfc, 0x40,
++ 0x30, 0xcc, 0x40, 0x70, 0x10, 0xe0, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x06, 0x38, 0x08, 0x7f,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x08, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x1f, 0x10, 0x1f,
++ 0x10, 0x1f, 0x11, 0x10, 0x1e, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf8, 0x10, 0xa0, 0x60, 0x1c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x7f, 0x05, 0x1f,
++ 0x69, 0x0f, 0x09, 0x0f, 0x09, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x40, 0xf0,
++ 0x2c, 0xe0, 0x20, 0xe8, 0x08, 0xf8, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x3f, 0x20, 0x4f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xfc, 0x08, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x7f, 0x1f, 0x11, 0x1f, 0x01,
++ 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x10, 0x1f, 0x10,
++ 0x1f, 0x10, 0x1e, 0x10, 0x1e, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x98, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x0e, 0x08, 0x7f,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x19, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x48, 0x48,
++ 0x50, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x3f, 0x04, 0x0a,
++ 0x31, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x20, 0x50,
++ 0x88, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x7e, 0x08,
++ 0x1d, 0x1a, 0x2a, 0x48, 0x0b, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x70, 0x10, 0x90, 0x88,
++ 0x44, 0x40, 0x50, 0x88, 0xfc, 0x04, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x3f, 0x1f, 0x01, 0x7f, 0x01,
++ 0x1f, 0x7f, 0x04, 0x0f, 0x03, 0x3c, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xe0, 0x20, 0xfc, 0x20,
++ 0xe0, 0xfc, 0x40, 0xc0, 0x60, 0x10, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x3f, 0x01, 0x1f, 0x01, 0x7f,
++ 0x1f, 0x11, 0x1f, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x00, 0x7f, 0x00, 0x0f,
++ 0x3f, 0x21, 0x5f, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xfc, 0x20, 0xe0,
++ 0xfc, 0x08, 0xf0, 0x10, 0x30, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x08, 0x7f, 0x09, 0x08, 0x0e, 0x30, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x00, 0xe0, 0x00, 0xe0,
++ 0x00, 0xfc, 0x10, 0xa0, 0x60, 0x1c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x10, 0x0b, 0x4a, 0x22,
++ 0x23, 0x0a, 0x12, 0x12, 0x24, 0x2b, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0xfc, 0x48, 0x50,
++ 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x02, 0x02, 0x3e, 0x02,
++ 0x3e, 0x03, 0x7e, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x80, 0x80, 0xf8, 0x80,
++ 0xf8, 0x80, 0xfc, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x13, 0x09, 0x49, 0x22,
++ 0x20, 0x0f, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x50, 0x48, 0x48,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x11, 0x09, 0x4a, 0x27,
++ 0x20, 0x0b, 0x12, 0x12, 0x22, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x08, 0xc8,
++ 0x48, 0xc8, 0x70, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1e, 0x12, 0x1a, 0x16,
++ 0x12, 0x1a, 0x16, 0x12, 0x22, 0x47, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x78, 0x48, 0x68, 0x58,
++ 0x48, 0x68, 0x58, 0x48, 0x88, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x01, 0x7f, 0x02, 0x04,
++ 0x1c, 0x64, 0x3f, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x80, 0x40,
++ 0x70, 0x4c, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x19, 0x11, 0x1d,
++ 0x11, 0x1d, 0x12, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0x70, 0x10, 0x70,
++ 0x10, 0x70, 0x90, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x10, 0x0b, 0x48, 0x27, 0x21,
++ 0x16, 0x11, 0x23, 0x24, 0x41, 0x4e, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x40, 0xfc, 0x24,
++ 0x9c, 0xf0, 0x20, 0xc0, 0xb0, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x7f, 0x08,
++ 0x1c, 0x1a, 0x2a, 0x49, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x20, 0x20, 0xfc, 0x20,
++ 0x70, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3e, 0x22, 0x3e, 0x20,
++ 0x3e, 0x20, 0x3e, 0x20, 0x20, 0x23, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x08, 0xf8, 0x00,
++ 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x06, 0x38, 0x08, 0x7e,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x48, 0x28, 0x28, 0x88,
++ 0x48, 0x4c, 0x38, 0xc8, 0x08, 0x08, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1e, 0x12, 0x1e, 0x00, 0x1f,
++ 0x00, 0x7f, 0x04, 0x07, 0x08, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x90, 0xf0, 0x00, 0xf0,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xe0, 0x00, 0x00,
++ 0x04, 0x7f, 0x0f, 0x08, 0x0f, 0x3e, 0x22, 0x3e,
++ 0x0f, 0x7f, 0x08, 0x0f, 0x10, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0xe0, 0x20, 0xe0, 0xf8, 0x88, 0xf8,
++ 0xe0, 0xfc, 0x00, 0xf0, 0x10, 0xe0, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3f, 0x20, 0x5e, 0x01,
++ 0x7e, 0x14, 0x14, 0x14, 0x24, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xfc, 0x18, 0x10, 0xfc,
++ 0x90, 0x50, 0x50, 0x14, 0x34, 0xfc, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x21, 0x7f, 0x0f, 0x09,
++ 0x0f, 0x09, 0x0f, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0x08, 0xf8, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x7f, 0x08,
++ 0x08, 0x3e, 0x22, 0x22, 0x3e, 0x23, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0x78, 0x48, 0x48,
++ 0x78, 0x48, 0x78, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x06, 0x1f, 0x72, 0x1f, 0x0c, 0x34,
++ 0x0f, 0x12, 0x72, 0x1f, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xc8, 0x48, 0x30,
++ 0xf8, 0x48, 0x48, 0xc8, 0x48, 0x38, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x06, 0x1c, 0x10, 0x1e, 0x11,
++ 0x1f, 0x10, 0x1e, 0x70, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x94, 0x94, 0x0c,
++ 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x3f, 0x04, 0x3f,
++ 0x21, 0x4f, 0x09, 0x09, 0x09, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x40, 0xfc,
++ 0x08, 0xe0, 0x20, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x11, 0x3d, 0x25,
++ 0x25, 0x3d, 0x25, 0x25, 0x3d, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x48, 0x48,
++ 0xf8, 0x08, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x09, 0x09, 0x11, 0x10,
++ 0x37, 0x50, 0x11, 0x16, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x40,
++ 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x09, 0x0f, 0x09, 0x0f,
++ 0x01, 0x3f, 0x21, 0x21, 0x2e, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0x00, 0xf8, 0x48, 0xe8, 0x28, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x10, 0x14, 0x64, 0x19,
++ 0x16, 0x7e, 0x2c, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x80, 0x80, 0xf8, 0x08,
++ 0x88, 0x48, 0x48, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x7f, 0x08,
++ 0x0e, 0x13, 0x12, 0x22, 0x42, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x80, 0xfc, 0x20, 0xb8,
++ 0xe8, 0xa8, 0xb8, 0xa4, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x09, 0x09, 0x3f,
++ 0x20, 0x27, 0x24, 0x27, 0x24, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0x20, 0xf8,
++ 0x08, 0xc8, 0x48, 0xc8, 0x48, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x05, 0x19, 0x62, 0x1f, 0x00,
++ 0x3e, 0x0a, 0x36, 0x0a, 0x32, 0x06, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xc0, 0x30, 0x4c, 0xe0, 0x00,
++ 0xf8, 0x28, 0xd8, 0x28, 0xc8, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x3f, 0x04, 0x19,
++ 0x60, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x40, 0x30,
++ 0x8c, 0xf0, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x06, 0x0c, 0x7f, 0x1f, 0x02, 0x7f,
++ 0x02, 0x1f, 0x06, 0x1a, 0x62, 0x02, 0x00, 0x00,
++ 0x40, 0xfc, 0x60, 0xc0, 0xfc, 0xf0, 0x90, 0xfc,
++ 0x90, 0xf0, 0xc0, 0xb0, 0x8c, 0x80, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x01, 0x7f, 0x0f, 0x08, 0x0f,
++ 0x3f, 0x20, 0x27, 0x24, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xfc, 0xe0, 0x20, 0xe0,
++ 0xf8, 0x08, 0xc8, 0x48, 0xc8, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x7f, 0x06,
++ 0x24, 0x14, 0x18, 0x1e, 0x70, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xc0, 0x80, 0xf8, 0x08, 0xe8,
++ 0xa8, 0xa8, 0xe8, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x3f, 0x25, 0x25,
++ 0x2b, 0x31, 0x2f, 0x21, 0x5f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x20, 0x20,
++ 0x50, 0x88, 0xf0, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x1f, 0x01, 0x7f, 0x07, 0x1e,
++ 0x63, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x00, 0x00,
++ 0x40, 0xfc, 0x50, 0xe0, 0x40, 0xfc, 0xe0, 0x08,
++ 0xf8, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3e, 0x02, 0x3e, 0x20,
++ 0x3e, 0x0a, 0x36, 0x0a, 0x32, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x08, 0xf8, 0x80,
++ 0xf8, 0x28, 0xd8, 0x28, 0xc8, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0c, 0x08, 0x15, 0x16, 0x34,
++ 0x57, 0x14, 0x14, 0x14, 0x14, 0x11, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xc0, 0xfc, 0x90, 0x60, 0xd0,
++ 0x2c, 0xc0, 0x30, 0xc8, 0x30, 0xc0, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x17, 0x10, 0x1f, 0x12,
++ 0x13, 0x1e, 0x3f, 0x22, 0x41, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0xf0, 0x00, 0xfc, 0x48,
++ 0xb0, 0x2c, 0xfc, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x3f, 0x01, 0x1f, 0x7f, 0x04,
++ 0x1f, 0x6f, 0x03, 0x0d, 0x31, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xf0, 0xfc, 0xc0,
++ 0x30, 0xec, 0xc0, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x22, 0x3f, 0x22, 0x23,
++ 0x20, 0x2f, 0x28, 0x28, 0x48, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0xc0, 0xfc, 0x20, 0xfc, 0x20, 0xe0,
++ 0x80, 0xf8, 0x88, 0x88, 0xb0, 0x80, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x01, 0x1f, 0x12, 0x11, 0x16,
++ 0x1f, 0x10, 0x1e, 0x10, 0x1e, 0x70, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x50, 0x90, 0x50,
++ 0xf0, 0x98, 0xe0, 0x80, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x01, 0x3f, 0x04, 0x3f, 0x21,
++ 0x7f, 0x01, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x40, 0xfc, 0x08,
++ 0xf8, 0x00, 0xf0, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x19, 0x66, 0x14, 0x1f,
++ 0x60, 0x1f, 0x01, 0x09, 0x31, 0x03, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x78, 0x90, 0x60, 0x30, 0xcc,
++ 0x00, 0xf0, 0x00, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x01, 0x3f, 0x28, 0x4f, 0x10,
++ 0x13, 0x32, 0x53, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x08, 0xf8, 0x80,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x7f, 0x1f, 0x11, 0x1f, 0x1f,
++ 0x01, 0x3f, 0x00, 0x7f, 0x04, 0x02, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0xf0, 0x10, 0xf0, 0xf0,
++ 0x10, 0xf8, 0x20, 0xfc, 0x20, 0x60, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x01, 0x1f, 0x12, 0x12, 0x1f,
++ 0x12, 0x12, 0x1f, 0x20, 0x2a, 0x51, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x40, 0x40, 0xf0,
++ 0x40, 0x40, 0xf8, 0x00, 0x48, 0x24, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x02, 0x17, 0x29, 0x7e, 0x04,
++ 0x19, 0x6e, 0x01, 0x0e, 0x01, 0x1e, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x80, 0xd0, 0x28, 0xfc, 0x40,
++ 0xb0, 0x4c, 0x90, 0x60, 0x80, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x00, 0x7f, 0x0a, 0x0c, 0x29,
++ 0x2e, 0x29, 0x29, 0x2d, 0x3a, 0x64, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x20, 0xfc, 0x20, 0x48, 0xfc,
++ 0x00, 0x50, 0x50, 0x54, 0x54, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x09, 0x7e, 0x08,
++ 0x0f, 0x13, 0x12, 0x22, 0x42, 0x0d, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xc0, 0x80, 0xfc, 0x80, 0xf8,
++ 0x20, 0xfc, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0a, 0x7f, 0x0a, 0x33, 0x3f,
++ 0x21, 0x5f, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xa0, 0xfc, 0xa4, 0x9c, 0xfc,
++ 0x08, 0xf0, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x14, 0x1f, 0x10, 0x3f, 0x4f, 0x08,
++ 0x0f, 0x1f, 0x1f, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x08, 0xe8, 0x88, 0x88,
++ 0x88, 0xc8, 0xc8, 0x48, 0xc8, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3e, 0x0a, 0x36, 0x0b, 0x32,
++ 0x0d, 0x76, 0x01, 0x0e, 0x01, 0x1e, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x28, 0xd8, 0x28, 0xc8,
++ 0x60, 0x5c, 0xa0, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x08, 0x7f, 0x08, 0x3e, 0x2a,
++ 0x2a, 0x2e, 0x1c, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x20, 0xfc, 0x20, 0xf8, 0xa8,
++ 0xa8, 0xb8, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x12, 0x09, 0x3f, 0x28,
++ 0x4e, 0x12, 0x2a, 0x05, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0xfc, 0x70, 0x90, 0x20, 0x40, 0xfc, 0x28,
++ 0xf8, 0xa0, 0xa0, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x1f, 0x01, 0x7f, 0x08, 0x3e,
++ 0x0e, 0x71, 0x3f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x00, 0xfc, 0x20, 0xf8,
++ 0x20, 0xfc, 0xf8, 0x80, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x7f, 0x1f, 0x12, 0x1f, 0x0f,
++ 0x0f, 0x08, 0x0f, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0xf0, 0x90, 0xf0, 0xe0,
++ 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x00, 0x7f, 0x1f, 0x3e,
++ 0x08, 0x3e, 0x7f, 0x08, 0x04, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xfc, 0xf0, 0xf8,
++ 0x88, 0xf8, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x14, 0x14, 0x23, 0x1a, 0x35,
++ 0x55, 0x0d, 0x7f, 0x05, 0x19, 0x61, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xb0, 0x48, 0xc0, 0x68, 0xd4,
++ 0x54, 0x30, 0xfc, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x09, 0x09, 0x09, 0x3f, 0x08,
++ 0x08, 0x2e, 0x28, 0x2e, 0x39, 0x60, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x00, 0xf8, 0x20,
++ 0xa0, 0xb8, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x08, 0x69, 0x13, 0x14, 0x2b,
++ 0x4a, 0x1b, 0x2b, 0x4a, 0x0b, 0x32, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf8, 0xa4, 0xf8,
++ 0xa8, 0x38, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x13, 0x0a, 0x4a, 0x23, 0x23,
++ 0x10, 0x17, 0x25, 0x25, 0x4f, 0x40, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x90, 0xd0, 0x30, 0xf0,
++ 0x00, 0xf8, 0x28, 0x28, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x7e, 0x10, 0x1f, 0x14,
++ 0x27, 0x58, 0x0b, 0x10, 0x27, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xa0, 0xa0, 0xb8, 0xa0,
++ 0xb8, 0xa0, 0xb8, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x7f, 0x09, 0x06, 0x1f, 0x7f, 0x19, 0x15,
++ 0x1f, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xc0, 0xf0, 0xfc, 0x30, 0x50,
++ 0xf0, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x7f, 0x1f, 0x1f, 0x11, 0x1f,
++ 0x7f, 0x1f, 0x1f, 0x11, 0x1f, 0x7f, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0xf0, 0xf0, 0x10, 0xf0,
++ 0xfc, 0xf0, 0xf0, 0x10, 0xf0, 0xfc, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x0f, 0x12, 0x3f, 0x55, 0x1f,
++ 0x15, 0x1f, 0x15, 0x2a, 0x2a, 0x40, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x08, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0xc8, 0x88, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x12, 0x1f, 0x3f, 0x20,
++ 0x7f, 0x1e, 0x72, 0x0c, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x90, 0xf0, 0xfc, 0x08,
++ 0xf8, 0x98, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x1f, 0x01, 0x7f, 0x1f, 0x15,
++ 0x1d, 0x1f, 0x11, 0x1d, 0x25, 0x45, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xfc, 0xf0, 0x50,
++ 0x70, 0xf0, 0x10, 0x70, 0x50, 0x50, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x3f, 0x09, 0x0d, 0x13, 0x7f,
++ 0x1f, 0x17, 0x14, 0x17, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x20, 0x30, 0x48, 0xfc,
++ 0xf0, 0xd0, 0x50, 0xd0, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x0c, 0x10, 0x3d, 0x24, 0x3c,
++ 0x21, 0x3c, 0x25, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x60, 0x20, 0xfc, 0x88, 0x50,
++ 0xfc, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x15, 0x7f, 0x1f, 0x1f,
++ 0x15, 0x1f, 0x7f, 0x1a, 0x06, 0x39, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x20, 0x20, 0xfc, 0x48, 0xc8,
++ 0x28, 0x30, 0x90, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x22, 0x2a, 0x4a, 0x1f, 0x10,
++ 0x2f, 0x60, 0x27, 0x25, 0x29, 0x30, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x20, 0xa0, 0xa0, 0xfc, 0x48,
++ 0xa8, 0x30, 0x10, 0xb0, 0x48, 0x84, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3c, 0x25, 0x24, 0x3c,
++ 0x21, 0x3c, 0x65, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x60, 0x20, 0xfc, 0x88, 0x50,
++ 0xfc, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x14, 0x08, 0x7f, 0x0a,
++ 0x0c, 0x08, 0x08, 0x08, 0x08, 0x19, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0x20, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x58, 0x84, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x01, 0x3f, 0x2d, 0x4d,
++ 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xfc, 0x68, 0x60,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x06, 0x39, 0x08, 0x7f, 0x08,
++ 0x1d, 0x1a, 0x29, 0x48, 0x08, 0x0b, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x40, 0xfc, 0xa4,
++ 0x5c, 0x70, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x0e, 0x78, 0x08, 0x3f, 0x08,
++ 0x7e, 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x50, 0x50, 0xf8, 0x50, 0xfc, 0x00,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x7f, 0x02, 0x7d, 0x15, 0x2d,
++ 0x49, 0x0f, 0x08, 0x0f, 0x10, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0x88, 0x70, 0x50, 0xf8,
++ 0x24, 0xe0, 0x20, 0xe0, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x00, 0x2f, 0x28, 0x3f, 0x0d,
++ 0x7f, 0x2c, 0x2f, 0x55, 0x17, 0x24, 0x00, 0x00,
++ 0x40, 0xfc, 0x50, 0x48, 0xfc, 0x40, 0xc8, 0x48,
++ 0xa8, 0xb0, 0x90, 0x34, 0xcc, 0x84, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x3f, 0x1f, 0x08, 0x0f, 0x3f,
++ 0x2f, 0x42, 0x0f, 0x1f, 0x01, 0x3f, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xf0, 0x20, 0xe0, 0xfc,
++ 0xe8, 0x40, 0xf0, 0xf0, 0x00, 0xf8, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0e, 0x73, 0x55, 0x29, 0x19,
++ 0x6d, 0x14, 0x6c, 0x14, 0x65, 0x1a, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0xa0, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x0b, 0x7c, 0x08, 0x3e, 0x08,
++ 0x7e, 0x1d, 0x1b, 0x2b, 0x49, 0x09, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0x20, 0xfc, 0x34, 0xfc, 0x04, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x3e, 0x7f, 0x2d, 0x5f, 0x0e,
++ 0x39, 0x1f, 0x7f, 0x02, 0x07, 0x38, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x50, 0xd0, 0x74, 0x94,
++ 0x0c, 0xf0, 0xfc, 0x20, 0xf0, 0x08, 0x00, 0x00,
++ 0x04, 0x7f, 0x15, 0x6b, 0x2a, 0x13, 0x2a, 0x7f,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x50, 0xe8, 0xa8, 0x90, 0xa8, 0xfc,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x06, 0x38, 0x09, 0x7e, 0x1d, 0x6a,
++ 0x0e, 0x19, 0x65, 0x07, 0x39, 0x03, 0x00, 0x00,
++ 0x40, 0xfc, 0xc0, 0xf8, 0x28, 0x48, 0x88, 0xb0,
++ 0x40, 0x30, 0x4c, 0xc0, 0x38, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3c, 0x00, 0x7e, 0x00, 0x3c,
++ 0x3c, 0x01, 0x3f, 0x25, 0x3d, 0x21, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0xfc, 0x44, 0x64, 0x94, 0xf4, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x11, 0x15, 0x65, 0x19, 0x15,
++ 0x7e, 0x09, 0x2d, 0x2b, 0x4b, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0x68, 0x98, 0xf8,
++ 0x00, 0xf8, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x06, 0x38, 0x09, 0x7e, 0x08,
++ 0x1c, 0x1a, 0x2a, 0x49, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x70, 0xa0, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0x00, 0xa8, 0x54, 0x54, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x09, 0x28, 0x2e, 0x28, 0x7f,
++ 0x28, 0x2a, 0x5a, 0x04, 0x18, 0x63, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0x20, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x09, 0x7e, 0x08, 0x3f, 0x2a,
++ 0x3e, 0x1c, 0x1a, 0x2a, 0x48, 0x09, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0x98, 0xf8, 0x88,
++ 0xf8, 0xf8, 0x88, 0xf8, 0x58, 0x84, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3e, 0x22, 0x3e, 0x3e, 0x24,
++ 0x27, 0x2f, 0x37, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x88, 0xf8, 0xf8, 0x88,
++ 0xe8, 0xc8, 0xc8, 0x88, 0xe8, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x01, 0x1f, 0x11, 0x1e, 0x17,
++ 0x14, 0x17, 0x17, 0x2f, 0x29, 0x5f, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xfc, 0xc8, 0xf8, 0xf0,
++ 0x90, 0xf0, 0xf0, 0xf8, 0x48, 0xfc, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x3e, 0x14, 0x7e, 0x00, 0x3c,
++ 0x24, 0x3c, 0x24, 0x3c, 0x24, 0x2c, 0x00, 0x00,
++ 0x40, 0xfc, 0xc0, 0xfc, 0xf8, 0x08, 0xf8, 0x80,
++ 0xf8, 0xf8, 0x80, 0xfc, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x0f, 0x12, 0x3f, 0x55, 0x1f,
++ 0x15, 0x1f, 0x16, 0x2b, 0x2b, 0x40, 0x00, 0x00,
++ 0x40, 0xfc, 0xc8, 0x48, 0x50, 0xfc, 0x20, 0xf8,
++ 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x0a, 0x72, 0x14, 0x0d, 0x13,
++ 0x7f, 0x0d, 0x2a, 0x2a, 0x48, 0x0b, 0x00, 0x00,
++ 0x40, 0xfc, 0xf8, 0x88, 0xf8, 0xf8, 0xfc, 0x54,
++ 0xfc, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x24, 0x3f, 0x14, 0x74,
++ 0x1b, 0x7e, 0x2c, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x90, 0xfc,
++ 0x90, 0xf8, 0xf8, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x11, 0x11, 0x11, 0x11,
++ 0x1f, 0x11, 0x11, 0x21, 0x21, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x10, 0x1c, 0xe0,
++ 0x00, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x17,
++ 0x14, 0x14, 0x24, 0x24, 0x40, 0x00, 0x00, 0x00,
++ 0x78, 0x80, 0x80, 0xfc, 0x80, 0xfc, 0x80, 0xf8,
++ 0x88, 0x88, 0x88, 0xb0, 0x80, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x11, 0x1f, 0x10, 0x10,
++ 0x1f, 0x12, 0x11, 0x20, 0x23, 0x5c, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0xe8, 0x08, 0xf8, 0x80,
++ 0xfc, 0x20, 0x40, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x3d, 0x01, 0x7f, 0x11,
++ 0x1d, 0x25, 0x05, 0x0a, 0x0a, 0x35, 0x00, 0x00,
++ 0x40, 0x78, 0x40, 0xfc, 0x48, 0x70, 0xc4, 0x3c,
++ 0x50, 0x50, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x08, 0x0f, 0x3f, 0x2f, 0x39, 0x27, 0x2a, 0x2f,
++ 0x3a, 0x2f, 0x2f, 0x2a, 0x4f, 0x08, 0x00, 0x00,
++ 0x00, 0x78, 0xa0, 0x20, 0x20, 0xfc, 0x40, 0xc0,
++ 0x78, 0x48, 0x08, 0x08, 0x88, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x03, 0x3c, 0x04, 0x3f, 0x24,
++ 0x24, 0x3f, 0x25, 0x04, 0x07, 0x78, 0x00, 0x00,
++ 0x00, 0xe0, 0xa0, 0x20, 0x20, 0x20, 0xa0, 0xa0,
++ 0xa0, 0xa0, 0x14, 0x94, 0x4c, 0x44, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x7c, 0x55, 0x55, 0x55, 0x7d,
++ 0x55, 0x18, 0x14, 0x1e, 0x62, 0x01, 0x00, 0x00,
++ 0x08, 0xe8, 0x28, 0x28, 0xe8, 0x08, 0x08, 0xe8,
++ 0x28, 0x28, 0x28, 0x28, 0x28, 0xc8, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2b, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x71, 0x00, 0x00, 0x00,
++ 0x70, 0x10, 0x50, 0x50, 0x88, 0x88, 0x24, 0x20,
++ 0x20, 0x30, 0x48, 0x58, 0xe4, 0x04, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x1f, 0x02, 0x7f, 0x01, 0x1f,
++ 0x11, 0x11, 0x1f, 0x11, 0x01, 0x7e, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0xf0,
++ 0x10, 0x10, 0xf0, 0x10, 0xf8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x71, 0x00, 0x00, 0x00,
++ 0x08, 0x48, 0x28, 0x28, 0x88, 0x48, 0x48, 0x0c,
++ 0x38, 0xc8, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x60, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xd8,
++ 0xd8, 0x88, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0d, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x88, 0x88, 0x88, 0xfc, 0x88, 0x88, 0x88, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0e, 0x71, 0x00, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x71, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x74, 0x00, 0xfc,
++ 0x24, 0x24, 0x24, 0x38, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x3f, 0x2b, 0x2b, 0x2b, 0x3f,
++ 0x29, 0x0d, 0x0b, 0x0f, 0x73, 0x05, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0xfc, 0x34, 0xfc, 0x04, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0e, 0x70, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x88, 0xe8, 0xa8, 0xa8,
++ 0xe8, 0xb0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x3f, 0x2b, 0x2b, 0x2b, 0x3f,
++ 0x29, 0x0d, 0x0b, 0x0f, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xe8, 0xa8, 0xa8, 0xa8,
++ 0xe8, 0xa8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x7d, 0x11, 0x11, 0x11, 0x1e, 0x64, 0x01,
++ 0x1f, 0x11, 0x1f, 0x11, 0x01, 0x7e, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x90, 0x54, 0x54, 0x0c, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf8, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x7f, 0x05, 0x19, 0x6f,
++ 0x09, 0x09, 0x0f, 0x09, 0x01, 0x3e, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0x40, 0x30, 0xec,
++ 0x20, 0x20, 0xe0, 0x20, 0xf0, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x3e, 0x2a, 0x2a, 0x2b, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x03, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0x48, 0x94, 0x54, 0x50,
++ 0x60, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2b, 0x2b, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x72, 0x00, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xf8, 0xa0, 0x20, 0xfc, 0x70,
++ 0x70, 0xa8, 0xa8, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0b, 0x0e, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x24, 0x28, 0xfc, 0x10, 0x60,
++ 0x4c, 0xf0, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x55, 0x55, 0x57, 0x7c,
++ 0x52, 0x1a, 0x15, 0x1d, 0x62, 0x04, 0x00, 0x00,
++ 0x04, 0x88, 0xf0, 0x90, 0x10, 0x5c, 0xd0, 0xd0,
++ 0xd0, 0xd0, 0x3c, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0e, 0x71, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0xe8, 0x60, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0b, 0x0e, 0x70, 0x03, 0x00, 0x00,
++ 0x00, 0x38, 0xa8, 0xa8, 0xa8, 0xb8, 0x80, 0xf8,
++ 0xa8, 0x28, 0xfc, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x08, 0x0f, 0x12, 0x3f,
++ 0x52, 0x1f, 0x12, 0x03, 0x7c, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x00, 0xf8, 0x08, 0xc8,
++ 0x48, 0xc8, 0x48, 0xe8, 0x28, 0x70, 0x00, 0x00,
++ 0x00, 0x1f, 0x17, 0x10, 0x1f, 0x14, 0x27, 0x79,
++ 0x0f, 0x09, 0x0f, 0x09, 0x01, 0x3e, 0x00, 0x00,
++ 0x00, 0xf8, 0xf0, 0x00, 0xfc, 0x90, 0x60, 0x1c,
++ 0xe0, 0x20, 0xe0, 0x20, 0xf0, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0e, 0x71, 0x02, 0x00, 0x00,
++ 0x70, 0x10, 0x50, 0x48, 0x88, 0xfc, 0x88, 0x88,
++ 0xf8, 0x50, 0x50, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x00, 0x7d, 0x08, 0x3d, 0x15, 0x08, 0x1e, 0x61,
++ 0x1f, 0x11, 0x1f, 0x11, 0x01, 0x7e, 0x00, 0x00,
++ 0x0c, 0xf0, 0x20, 0x3c, 0x20, 0xfc, 0x00, 0xfc,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x28, 0x0d, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0xa8, 0xa4, 0x04, 0xf8, 0x10,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3f,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x72, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0xfc, 0x20, 0xfc,
++ 0x20, 0xb0, 0xa8, 0x24, 0x24, 0x60, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x20, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0x98, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x54, 0x57, 0x54, 0x7d,
++ 0x51, 0x1a, 0x14, 0x1c, 0x60, 0x00, 0x00, 0x00,
++ 0x48, 0x88, 0xa8, 0xa8, 0xa8, 0xe8, 0xa8, 0xa8,
++ 0xe8, 0xe8, 0xa8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x29, 0x0e, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x40, 0xfc,
++ 0x54, 0x54, 0x94, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x56, 0x54, 0x54, 0x7d,
++ 0x57, 0x18, 0x14, 0x1e, 0x61, 0x02, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x80, 0xf8, 0xe8, 0x68,
++ 0x68, 0xf8, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x2a, 0x2b, 0x3e,
++ 0x29, 0x0e, 0x0a, 0x0e, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0xa8, 0xa4, 0x24, 0xf8, 0x50, 0xfc, 0x88,
++ 0xf4, 0x90, 0x90, 0xb4, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0xf8,
++ 0xa8, 0xa8, 0xf8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x54, 0x55, 0x55, 0x7d,
++ 0x52, 0x1a, 0x14, 0x1c, 0x64, 0x00, 0x00, 0x00,
++ 0x84, 0x88, 0xb0, 0xe0, 0xa0, 0xbc, 0xe8, 0xe8,
++ 0xa8, 0xa8, 0xc8, 0xc8, 0x88, 0x88, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x55, 0x55, 0x55, 0x7d,
++ 0x55, 0x19, 0x15, 0x1e, 0x62, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8, 0x48,
++ 0xe8, 0xa8, 0xe8, 0xa8, 0x08, 0x18, 0x00, 0x00,
++ 0x02, 0x3e, 0x02, 0x1e, 0x03, 0x7e, 0x04, 0x09,
++ 0x1f, 0x11, 0x1f, 0x11, 0x01, 0x7e, 0x00, 0x00,
++ 0x40, 0x7c, 0x40, 0x78, 0x40, 0x7c, 0x40, 0x40,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf8, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3f,
++ 0x29, 0x0d, 0x0b, 0x0f, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x90, 0xf0, 0x00, 0xf8,
++ 0x48, 0xf8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x3f, 0x2b, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x24, 0xfc, 0x24, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2b, 0x3f,
++ 0x29, 0x0d, 0x0b, 0x0f, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0xf0, 0xd0, 0xd0, 0xf8, 0x08,
++ 0xe8, 0xa8, 0xa8, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x54, 0x57, 0x54, 0x7d,
++ 0x51, 0x1a, 0x16, 0x1c, 0x60, 0x00, 0x00, 0x00,
++ 0x48, 0xa8, 0x98, 0x98, 0x88, 0xe8, 0x98, 0x98,
++ 0xcc, 0xb8, 0xa8, 0x88, 0x88, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x29, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x40, 0xfc,
++ 0xa4, 0xb4, 0xcc, 0xfc, 0x84, 0x18, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x57, 0x55, 0x55, 0x7f,
++ 0x52, 0x1a, 0x17, 0x1e, 0x60, 0x01, 0x00, 0x00,
++ 0x00, 0x38, 0x28, 0x28, 0xe8, 0x38, 0x28, 0xa8,
++ 0xb8, 0xa8, 0xc8, 0x48, 0x88, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x29, 0x0c, 0x0a, 0x0e, 0x73, 0x00, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x00,
++ 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x3f, 0x02, 0x04, 0x08, 0x3e,
++ 0x2a, 0x2a, 0x3e, 0x2a, 0x0f, 0x71, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe4, 0x14, 0x0c, 0x24, 0xf8,
++ 0xa8, 0xa8, 0xf8, 0xa8, 0x3c, 0xc4, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0b, 0x0e, 0x70, 0x07, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x40, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x55, 0x55, 0x55, 0x7d,
++ 0x51, 0x19, 0x17, 0x1f, 0x65, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0x68, 0x68, 0xf8, 0x68, 0x68, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x55, 0x56, 0x57, 0x7e,
++ 0x53, 0x1a, 0x17, 0x1e, 0x62, 0x02, 0x00, 0x00,
++ 0xe0, 0x20, 0x50, 0x90, 0xf8, 0x04, 0xa8, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x57, 0x55, 0x55, 0x7d,
++ 0x51, 0x19, 0x15, 0x1e, 0x62, 0x05, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x3c, 0xc0, 0x7c, 0x08, 0xd0,
++ 0x50, 0x7c, 0x50, 0x50, 0x50, 0xb0, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3f,
++ 0x28, 0x0d, 0x0a, 0x0e, 0x71, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x00, 0xfc,
++ 0x80, 0xfc, 0x54, 0x94, 0x24, 0x58, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x54, 0x55, 0x56, 0x7f,
++ 0x52, 0x1b, 0x16, 0x1c, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xb8, 0xa0, 0xb8, 0xa8, 0xb8,
++ 0xa8, 0xb8, 0xa8, 0xa0, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x2a, 0x2c, 0x49, 0x14, 0x22, 0x3f, 0x21,
++ 0x5f, 0x11, 0x1f, 0x11, 0x01, 0x7e, 0x00, 0x00,
++ 0x20, 0xa8, 0xb0, 0x30, 0x48, 0x88, 0xfc, 0x08,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf8, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0d, 0x0a, 0x0f, 0x70, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x20, 0xfc, 0x00, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x13, 0x7e, 0x56, 0x57, 0x56, 0x7f,
++ 0x52, 0x1b, 0x16, 0x1e, 0x63, 0x0c, 0x00, 0x00,
++ 0x00, 0x38, 0xa8, 0xa8, 0xb0, 0xb0, 0xa8, 0xa8,
++ 0x64, 0xa4, 0xb8, 0xe0, 0x60, 0x20, 0x00, 0x00,
++ 0x08, 0x3e, 0x7f, 0x08, 0x7f, 0x0e, 0x12, 0x67,
++ 0x1f, 0x11, 0x1f, 0x11, 0x01, 0x7e, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x90, 0x50, 0x20, 0x50, 0x8c,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf8, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2b, 0x2a, 0x2a, 0x3f,
++ 0x28, 0x0c, 0x0a, 0x0e, 0x71, 0x00, 0x00, 0x00,
++ 0x18, 0xe8, 0xa8, 0x70, 0xfc, 0x70, 0xa8, 0x24,
++ 0x40, 0x28, 0xc4, 0xd4, 0x50, 0x30, 0x00, 0x00,
++ 0x01, 0x03, 0x1e, 0x01, 0x07, 0x78, 0x03, 0x08,
++ 0x3e, 0x2a, 0x3e, 0x2a, 0x0f, 0x71, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x80, 0x60, 0x9c, 0x80, 0x60,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0x3c, 0xc4, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2b, 0x0c, 0x0b, 0x0e, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xa8, 0x54, 0x20, 0xd8,
++ 0x74, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x09, 0x08, 0x09, 0x3f, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x29, 0x0d, 0x0b, 0x0f, 0x71, 0x00, 0x00, 0x00,
++ 0x24, 0xa8, 0xfc, 0x08, 0xf8, 0x88, 0xf8, 0x20,
++ 0xfc, 0x24, 0x24, 0x24, 0x38, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x08, 0x3f, 0x2a, 0x2a,
++ 0x3e, 0x28, 0x0a, 0x0f, 0x71, 0x00, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x04, 0x3f, 0x04, 0x7f, 0x2b, 0x2a, 0x56, 0x21,
++ 0x1f, 0x11, 0x1f, 0x11, 0x01, 0x7e, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xc8, 0x28, 0x90, 0x68, 0x84,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf8, 0x04, 0x00, 0x00,
++ 0x08, 0x3e, 0x09, 0x7f, 0x14, 0x7f, 0x3e, 0x09,
++ 0x1f, 0x11, 0x1f, 0x11, 0x01, 0x3e, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0xd0, 0x74, 0x94, 0x0c,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3f, 0x2b, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0c, 0x0a, 0x0e, 0x73, 0x00, 0x00, 0x00,
++ 0x20, 0x24, 0xa8, 0xfc, 0x08, 0xf8, 0x88, 0xf8,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x0f, 0x08, 0x0f, 0x0f, 0x02, 0x7f,
++ 0x09, 0x1f, 0x69, 0x0f, 0x01, 0x3e, 0x00, 0x00,
++ 0x40, 0xfc, 0xe0, 0x20, 0xe0, 0xe0, 0x00, 0xfc,
++ 0x20, 0xf0, 0x2c, 0xe0, 0xf0, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0c, 0x0b, 0x0e, 0x70, 0x03, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x20, 0xfc, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0d, 0x0a, 0x0e, 0x70, 0x03, 0x00, 0x00,
++ 0x20, 0xf8, 0xa8, 0xfc, 0xa8, 0xf8, 0xf8, 0xa8,
++ 0xf8, 0xfc, 0x50, 0xf0, 0x78, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x29, 0x0d, 0x0a, 0x0e, 0x70, 0x03, 0x00, 0x00,
++ 0x20, 0xf8, 0x20, 0xfc, 0x88, 0xdc, 0x88, 0xfc,
++ 0x00, 0xfc, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x01, 0x1f, 0x11, 0x1f, 0x11, 0x01, 0x3e, 0x08,
++ 0x3e, 0x2a, 0x3e, 0x2a, 0x0f, 0x71, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf8, 0x08, 0x20,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0x3c, 0xc4, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2b, 0x2a, 0x2a, 0x3f,
++ 0x28, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x18, 0xe8, 0xa8, 0x70, 0xfc, 0x70, 0xa8, 0x24,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x11, 0x11, 0x12, 0x7c, 0x57, 0x56, 0x56, 0x7f,
++ 0x52, 0x1a, 0x17, 0x1c, 0x64, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x54, 0x94, 0xec, 0xc8, 0xd8, 0xdc,
++ 0xe8, 0xc8, 0xfc, 0x48, 0x48, 0xc8, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x56, 0x57, 0x55, 0x7f,
++ 0x53, 0x1f, 0x16, 0x1f, 0x62, 0x00, 0x00, 0x00,
++ 0x10, 0xd0, 0x50, 0xd0, 0x7c, 0xf4, 0x18, 0xd0,
++ 0x50, 0x50, 0xe8, 0xe8, 0x44, 0xc4, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7f, 0x55, 0x55, 0x55, 0x7d,
++ 0x51, 0x19, 0x16, 0x1e, 0x64, 0x00, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xfc, 0x54, 0x9c, 0x78, 0xfc,
++ 0x70, 0x70, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x7d, 0x55, 0x55, 0x57, 0x7c,
++ 0x51, 0x18, 0x14, 0x1c, 0x63, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x5c, 0xd4, 0xd4, 0x54, 0xdc, 0x58,
++ 0xe0, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x09, 0x08, 0x09, 0x3f, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x29, 0x0d, 0x0b, 0x0f, 0x71, 0x01, 0x00, 0x00,
++ 0x24, 0xa8, 0xfc, 0x08, 0xf0, 0x90, 0xf0, 0x00,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2b, 0x2a, 0x2a, 0x3f,
++ 0x28, 0x0c, 0x0b, 0x0e, 0x71, 0x02, 0x00, 0x00,
++ 0x50, 0xfc, 0x50, 0x20, 0xfc, 0x50, 0xa8, 0xfc,
++ 0x20, 0xa8, 0xfc, 0x88, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x29, 0x0c, 0x0b, 0x0e, 0x70, 0x01, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x20, 0xfc, 0x50, 0x88,
++ 0x54, 0x50, 0xfc, 0x50, 0x90, 0x10, 0x00, 0x00,
++ 0x10, 0x11, 0x12, 0x7c, 0x55, 0x56, 0x55, 0x7d,
++ 0x52, 0x1b, 0x14, 0x1c, 0x63, 0x00, 0x00, 0x00,
++ 0x90, 0xf4, 0xf8, 0x90, 0x68, 0x44, 0xfc, 0x28,
++ 0x20, 0xfc, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2b, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0d, 0x0a, 0x0e, 0x70, 0x03, 0x00, 0x00,
++ 0x50, 0xfc, 0x50, 0xfc, 0xa0, 0xf8, 0xf8, 0xa0,
++ 0xfc, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3f, 0x2b, 0x2b, 0x2b, 0x3f,
++ 0x28, 0x0d, 0x0b, 0x0f, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xfc, 0x28, 0xac, 0xac, 0xfc,
++ 0x20, 0xfc, 0x54, 0x54, 0x54, 0x0c, 0x00, 0x00,
++ 0x01, 0x3f, 0x0f, 0x7f, 0x07, 0x1c, 0x67, 0x07,
++ 0x08, 0x3e, 0x2a, 0x3e, 0x0e, 0x71, 0x00, 0x00,
++ 0x00, 0xf8, 0xe0, 0xfc, 0xc0, 0x70, 0xcc, 0xc0,
++ 0x20, 0xf8, 0xa8, 0xf8, 0x38, 0xc4, 0x00, 0x00,
++ 0x04, 0x07, 0x0f, 0x7f, 0x07, 0x3b, 0x1d, 0x3e,
++ 0x0b, 0x3e, 0x2a, 0x3e, 0x0e, 0x71, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0xfc, 0x90, 0xe0, 0xb0, 0x8c,
++ 0x20, 0xf8, 0xa8, 0xf8, 0x38, 0xc4, 0x00, 0x00,
++ 0x01, 0x0f, 0x09, 0x0f, 0x3f, 0x08, 0x3e, 0x3e,
++ 0x0e, 0x71, 0x1f, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xf0, 0xf8, 0x20, 0xf8, 0xf8,
++ 0x38, 0xc4, 0xf0, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x14, 0x7f, 0x1e, 0x6f, 0x0f, 0x08,
++ 0x0f, 0x3e, 0x2a, 0x3e, 0x0e, 0x71, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0xfc, 0x74, 0xec, 0xe0, 0x20,
++ 0xe0, 0xf8, 0xa8, 0xf8, 0x38, 0xc4, 0x00, 0x00,
++ 0x01, 0x7f, 0x0f, 0x0f, 0x3f, 0x2f, 0x47, 0x3a,
++ 0x0b, 0x3e, 0x2a, 0x3e, 0x0e, 0x71, 0x00, 0x00,
++ 0x00, 0xfc, 0xe0, 0xe0, 0xfc, 0xf8, 0xe0, 0x20,
++ 0xe0, 0xf8, 0xa8, 0xf8, 0x38, 0xc4, 0x00, 0x00,
++ 0x01, 0x7f, 0x0f, 0x3f, 0x2f, 0x47, 0x1c, 0x67,
++ 0x08, 0x3e, 0x2a, 0x3e, 0x0e, 0x71, 0x00, 0x00,
++ 0x00, 0xfc, 0xe0, 0xfc, 0xf8, 0xe0, 0x20, 0xe0,
++ 0x20, 0xf8, 0xa8, 0xf8, 0x38, 0xc4, 0x00, 0x00,
++ 0x13, 0x17, 0x6b, 0x17, 0x7c, 0x3b, 0x36, 0x53,
++ 0x1f, 0x11, 0x1f, 0x11, 0x01, 0x3e, 0x00, 0x00,
++ 0x90, 0xd4, 0xa8, 0x98, 0x7c, 0xb8, 0xd4, 0x94,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x10, 0x3f, 0x2d, 0x2d, 0x2d, 0x2d,
++ 0x2d, 0x2d, 0x2f, 0x3c, 0x61, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0xfc, 0x48,
++ 0x48, 0x48, 0xc8, 0x48, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x10, 0x3f, 0x2d, 0x2d, 0x2d, 0x2d,
++ 0x2d, 0x2d, 0x2f, 0x3c, 0x61, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xc8, 0x48, 0x68,
++ 0x58, 0x4c, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x12, 0x12, 0x22, 0x4f, 0x0a, 0x12, 0x1c, 0x35,
++ 0x53, 0x13, 0x14, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x38, 0x00, 0xc0, 0x00, 0xfc, 0x90, 0x10,
++ 0x10, 0x10, 0x90, 0x50, 0x50, 0x30, 0x00, 0x00,
++ 0x10, 0x1f, 0x22, 0x4f, 0x0a, 0x12, 0x1f, 0x30,
++ 0x57, 0x14, 0x14, 0x17, 0x14, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x80, 0x80, 0xbc, 0xd0, 0x10,
++ 0x90, 0x90, 0x90, 0x90, 0x90, 0x30, 0x00, 0x00,
++ 0x11, 0x17, 0x22, 0x4f, 0x0f, 0x14, 0x17, 0x3f,
++ 0x51, 0x17, 0x15, 0x15, 0x15, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xe0, 0xc0, 0x7c, 0xc8, 0xe8,
++ 0x08, 0xc8, 0x48, 0x48, 0xc8, 0x18, 0x00, 0x00,
++ 0x10, 0x1e, 0x2a, 0x4e, 0x1e, 0x1a, 0x2e, 0x27,
++ 0x6c, 0x37, 0x27, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xe0, 0xe0, 0xbc, 0xe8, 0xe8,
++ 0x88, 0xc8, 0xc8, 0x88, 0xe8, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x04, 0x05, 0x09, 0x1e,
++ 0x2a, 0x49, 0x08, 0x08, 0x08, 0x09, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x28, 0x48, 0x90, 0x10, 0x24,
++ 0x44, 0x88, 0x08, 0x10, 0x60, 0x80, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f,
++ 0x02, 0x0c, 0x74, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0,
++ 0x88, 0x88, 0x50, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x02, 0x0c, 0x77, 0x00, 0x1f, 0x00, 0x01,
++ 0x7f, 0x03, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0xdc, 0x00, 0xf0, 0x20, 0x40,
++ 0xfc, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x04, 0x18, 0x6f, 0x08, 0x08,
++ 0x0f, 0x06, 0x7c, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x60, 0x18, 0xe4, 0x20, 0x20,
++ 0xe0, 0x88, 0x50, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x0b, 0x13, 0x3d,
++ 0x55, 0x13, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7c, 0x08, 0x0a, 0x13, 0x3c,
++ 0x54, 0x12, 0x10, 0x10, 0x11, 0x10, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x09, 0x0b, 0x13, 0x3d,
++ 0x55, 0x13, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0x8c, 0xf0, 0x10, 0x10, 0x10, 0x10, 0xfc,
++ 0x10, 0x10, 0x10, 0x10, 0x7c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x09, 0x0b, 0x13, 0x3d,
++ 0x55, 0x13, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xa8,
++ 0xa8, 0x18, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x08, 0x0a, 0x12, 0x3d,
++ 0x54, 0x12, 0x10, 0x10, 0x11, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xfc,
++ 0x40, 0x60, 0xa0, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x08, 0x0b, 0x12, 0x3d,
++ 0x54, 0x12, 0x11, 0x10, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0x40, 0x60, 0xa0, 0x90, 0x28, 0x44, 0x90,
++ 0x20, 0x48, 0x90, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x0b, 0x13, 0x3d,
++ 0x55, 0x13, 0x11, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x08, 0x0b, 0x12, 0x3c,
++ 0x54, 0x12, 0x11, 0x12, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0xfc, 0x20, 0x20, 0xb0,
++ 0xa8, 0xa8, 0x24, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x09, 0x0b, 0x13, 0x3d,
++ 0x55, 0x13, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf8, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x08, 0x0a, 0x12, 0x3d,
++ 0x54, 0x12, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x20, 0xa8, 0xa4, 0x24, 0xf8, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x09, 0x0b, 0x13, 0x3d,
++ 0x55, 0x13, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0xe8, 0x28, 0x28,
++ 0xe8, 0x30, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x7f, 0x0f, 0x02, 0x7f, 0x03, 0x0d, 0x73,
++ 0x01, 0x7f, 0x03, 0x7c, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0xe0, 0x80, 0xfc, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x07, 0x04, 0x7f, 0x09, 0x08, 0x1f, 0x01,
++ 0x01, 0x7f, 0x03, 0x7c, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0xfc, 0x10, 0x90, 0xfc, 0x60,
++ 0x00, 0xfc, 0x88, 0x50, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7c, 0x08, 0x0b, 0x12, 0x3c,
++ 0x55, 0x12, 0x10, 0x10, 0x13, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x09, 0x0b, 0x15, 0x39,
++ 0x55, 0x15, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0xa0, 0xa8, 0xa4, 0x24, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0x50, 0x50, 0x88, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x08, 0x0b, 0x12, 0x3d,
++ 0x54, 0x12, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x40, 0x40, 0xfc, 0x00, 0xfc,
++ 0x40, 0x70, 0x48, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x08, 0x08, 0x15, 0x39,
++ 0x57, 0x15, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0xb8, 0x00, 0x00, 0x80, 0xfc, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x7f, 0x02, 0x0c, 0x74, 0x07, 0x38, 0x3f,
++ 0x24, 0x28, 0x37, 0x24, 0x27, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x50, 0x60, 0x30, 0x0c, 0xf8,
++ 0x98, 0x78, 0xc8, 0x48, 0xc8, 0x18, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x39, 0x07, 0x19, 0x63, 0x01,
++ 0x7f, 0x03, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x10, 0xfc, 0x08, 0xb0, 0x60, 0x18, 0x04, 0x00,
++ 0xfc, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x7c, 0x0b, 0x08, 0x13, 0x3c,
++ 0x54, 0x13, 0x12, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xfc, 0x48, 0xf8, 0x80,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x24, 0x24, 0x3f, 0x04, 0x7c, 0x25, 0x45, 0x01,
++ 0x7f, 0x03, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x00, 0x00,
++ 0xfc, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x7f, 0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x7f,
++ 0x11, 0x63, 0x0c, 0x74, 0x07, 0x18, 0x00, 0x00,
++ 0x00, 0xfc, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xfc,
++ 0x30, 0x28, 0xc4, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x08, 0x0b, 0x14, 0x18,
++ 0x37, 0x54, 0x10, 0x10, 0x13, 0x10, 0x00, 0x00,
++ 0x90, 0x90, 0xf0, 0x90, 0x90, 0xf8, 0x94, 0x94,
++ 0xf0, 0x90, 0x90, 0xf0, 0x90, 0x10, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x0b, 0x12, 0x3c,
++ 0x55, 0x12, 0x14, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x80, 0xfc,
++ 0x54, 0x54, 0x94, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x02, 0x7e, 0x02, 0x3e, 0x03, 0x7e, 0x04, 0x09,
++ 0x7f, 0x03, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x40, 0x7c, 0x40, 0x78, 0x40, 0x7c, 0x40, 0x40,
++ 0xfc, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x09, 0x0b, 0x13, 0x1d,
++ 0x34, 0x52, 0x13, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8,
++ 0x50, 0x90, 0xfc, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x0a, 0x0b, 0x16, 0x3a,
++ 0x56, 0x17, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0xd8, 0xd8,
++ 0xd8, 0x68, 0x48, 0x48, 0x48, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x08, 0x0b, 0x14, 0x19,
++ 0x34, 0x57, 0x10, 0x11, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0x40, 0xfc, 0x90, 0xe0, 0x70, 0x88, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x08, 0x0b, 0x15, 0x19,
++ 0x35, 0x55, 0x10, 0x13, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x0a, 0x0b, 0x16, 0x1b,
++ 0x36, 0x56, 0x17, 0x1a, 0x12, 0x12, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0xa8, 0xa8, 0xf8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x09, 0x0b, 0x15, 0x39,
++ 0x55, 0x15, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0xf8, 0xc8, 0x48, 0x48, 0x78, 0x20, 0xfc,
++ 0x70, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x7f, 0x04, 0x38, 0x20, 0x3d, 0x20, 0x3d,
++ 0x21, 0x03, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x88, 0xf8, 0xfc, 0x70, 0xac,
++ 0x20, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x0b, 0x15, 0x38,
++ 0x57, 0x12, 0x12, 0x12, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x50, 0x50, 0xb0, 0x10, 0xf0, 0x00,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x0b, 0x0a, 0x16, 0x3b,
++ 0x56, 0x17, 0x12, 0x14, 0x18, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x00, 0xfc, 0xa8, 0xf0, 0x8c,
++ 0x10, 0xfc, 0x90, 0x50, 0x10, 0x30, 0x00, 0x00,
++ 0x12, 0x11, 0x11, 0x7c, 0x0a, 0x09, 0x15, 0x38,
++ 0x57, 0x15, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x78, 0x48, 0x7c, 0x44,
++ 0x58, 0x48, 0x74, 0xc4, 0xc0, 0x3c, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x0a, 0x0a, 0x16, 0x1a,
++ 0x36, 0x52, 0x15, 0x15, 0x1a, 0x11, 0x00, 0x00,
++ 0x18, 0xe0, 0x38, 0x20, 0xfc, 0xb8, 0xe4, 0x9c,
++ 0xf0, 0xd0, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x20, 0x27, 0x21, 0x79, 0x17, 0x14, 0x2c, 0x37,
++ 0x6d, 0x29, 0x21, 0x21, 0x21, 0x26, 0x00, 0x00,
++ 0x20, 0x30, 0x48, 0xfc, 0x24, 0xf8, 0xa8, 0xa8,
++ 0xf8, 0xa8, 0x30, 0x28, 0xf4, 0x04, 0x00, 0x00,
++ 0x01, 0x7f, 0x1e, 0x12, 0x1e, 0x04, 0x3f, 0x1f,
++ 0x04, 0x7f, 0x06, 0x7c, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0x90, 0xf0, 0x40, 0xf8, 0xf0,
++ 0x40, 0xfc, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x7f, 0x08, 0x3e, 0x7f, 0x2d, 0x4b, 0x3e,
++ 0x0e, 0x31, 0x06, 0x7c, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf0, 0x50, 0xd0, 0x70, 0x54,
++ 0x94, 0x8c, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x0a, 0x09, 0x16, 0x18,
++ 0x35, 0x55, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0xcc, 0x54, 0xec, 0x54, 0x64, 0x80,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7f, 0x09, 0x09, 0x15, 0x39,
++ 0x55, 0x17, 0x10, 0x11, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0xf8, 0x48,
++ 0xf8, 0xfc, 0x90, 0xe0, 0x70, 0x88, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x08, 0x0b, 0x15, 0x19,
++ 0x35, 0x55, 0x10, 0x17, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0x00, 0xf0, 0x50, 0xf0,
++ 0x50, 0xf0, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x7d, 0x09, 0x0b, 0x15, 0x19,
++ 0x35, 0x54, 0x17, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0x20, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x12, 0x11, 0x13, 0x7e, 0x09, 0x0b, 0x15, 0x18,
++ 0x37, 0x56, 0x13, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x48, 0x50, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x3e, 0x21, 0x3e, 0x53, 0x1e,
++ 0x11, 0x7f, 0x06, 0x7c, 0x07, 0x38, 0x00, 0x00,
++ 0x20, 0xfc, 0x88, 0x50, 0xfc, 0x20, 0xfc, 0x20,
++ 0x20, 0xfc, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x0a, 0x0b, 0x17, 0x1b,
++ 0x34, 0x57, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x48, 0x58, 0x58, 0xf8,
++ 0x80, 0xf8, 0xa8, 0xa8, 0xa8, 0xb8, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x0a, 0x0b, 0x16, 0x3b,
++ 0x54, 0x17, 0x12, 0x12, 0x17, 0x10, 0x00, 0x00,
++ 0x10, 0xd0, 0x90, 0xdc, 0x60, 0xc0, 0xb8, 0xc0,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7f, 0x09, 0x09, 0x17, 0x18,
++ 0x37, 0x56, 0x12, 0x13, 0x12, 0x10, 0x00, 0x00,
++ 0x00, 0x7c, 0x10, 0xe0, 0x38, 0x28, 0xf8, 0x28,
++ 0xb8, 0xa8, 0xb8, 0x98, 0xa4, 0x44, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x0a, 0x0b, 0x14, 0x1b,
++ 0x36, 0x57, 0x12, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0x28, 0xfc,
++ 0x28, 0xa8, 0x10, 0x34, 0xcc, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x0a, 0x0e, 0x17, 0x19,
++ 0x37, 0x57, 0x13, 0x15, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xb8, 0x28, 0xe8, 0xb8, 0xa8, 0xf8, 0x28,
++ 0xf8, 0xb0, 0x70, 0x34, 0x54, 0x8c, 0x00, 0x00,
++ 0x20, 0x27, 0x24, 0x7f, 0x14, 0x17, 0x2c, 0x37,
++ 0x6d, 0x2d, 0x25, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xbc, 0xa4, 0xbc, 0xa4, 0xbc, 0x44, 0xfc,
++ 0xf4, 0xf4, 0xf4, 0xe4, 0x5c, 0x4c, 0x00, 0x00,
++ 0x10, 0x11, 0x12, 0x7f, 0x0b, 0x0a, 0x17, 0x19,
++ 0x36, 0x55, 0x10, 0x13, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0xf8, 0xe8, 0x38, 0xb8, 0xa8, 0xfc, 0x30,
++ 0xc8, 0xf4, 0x40, 0xf8, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x04, 0x3f, 0x24, 0x24, 0x24,
++ 0x27, 0x24, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0xc8, 0x48, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x3f, 0x24, 0x27, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xc8, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x3f, 0x27, 0x08, 0x3e, 0x22,
++ 0x3e, 0x3f, 0x7f, 0x1e, 0x22, 0x4d, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0xc8, 0x40, 0x40, 0xfc,
++ 0x90, 0x90, 0x60, 0x20, 0x50, 0x8c, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x3f, 0x27, 0x14, 0x7f, 0x1c,
++ 0x3e, 0x2a, 0x3e, 0x7f, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0xc8, 0xfc, 0xa0, 0xf8,
++ 0xf8, 0xa0, 0xfc, 0xd4, 0x6c, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x11, 0x21, 0x4f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x38, 0xd0, 0x08, 0x04, 0xe4, 0x20, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x7d, 0x45,
++ 0x45, 0x44, 0x7c, 0x45, 0x02, 0x0c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x08, 0x2a, 0x2a, 0x2a, 0x2a,
++ 0x3f, 0x5d, 0x48, 0x0e, 0x71, 0x06, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x50, 0x50, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x08, 0x09, 0x3f, 0x0a, 0x0a, 0x7f, 0x0c, 0x12,
++ 0x3e, 0x52, 0x1e, 0x12, 0x1f, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x50, 0x50, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x0e, 0x06, 0x09, 0x10, 0x3f, 0x40, 0x3a, 0x2a,
++ 0x3a, 0x2d, 0x3d, 0x2a, 0x2a, 0x2a, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0xc8, 0xf8, 0x48, 0xf8, 0xc8,
++ 0xf8, 0x30, 0x30, 0xb4, 0xd4, 0x8c, 0x00, 0x00,
++ 0x08, 0x2a, 0x2a, 0x3e, 0x00, 0x7f, 0x00, 0x3e,
++ 0x22, 0x3e, 0x22, 0x14, 0x1e, 0x61, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x50, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x3e, 0x14, 0x7f, 0x08, 0x3e,
++ 0x2a, 0x3e, 0x2a, 0x7f, 0x22, 0x27, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x50, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x1c, 0x08, 0x3e, 0x2a, 0x3e,
++ 0x08, 0x3e, 0x08, 0x3e, 0x0c, 0x71, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x50, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x04, 0x1b, 0x12, 0x1a, 0x19, 0x12, 0x3f, 0x2f,
++ 0x48, 0x0f, 0x0f, 0x0f, 0x06, 0x78, 0x00, 0x00,
++ 0x80, 0x70, 0x90, 0xb0, 0x30, 0x90, 0xfc, 0xe8,
++ 0x20, 0xe0, 0xe0, 0xe4, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x7e, 0x49, 0x7e, 0x7d, 0x49, 0x7f, 0x4f,
++ 0x08, 0x0f, 0x0f, 0x0f, 0x06, 0x78, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf8, 0xfc, 0x54, 0xfc, 0xe0,
++ 0x20, 0xe0, 0xe0, 0xe4, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x7f, 0x57, 0x7f, 0x3e, 0x22,
++ 0x3e, 0x3e, 0x22, 0x3e, 0x14, 0x63, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x30, 0x30, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x77, 0x55, 0x77, 0x14, 0x3f,
++ 0x64, 0x3f, 0x3f, 0x24, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x30, 0x30, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x10, 0x1e, 0x25, 0x49, 0x3f, 0x2b, 0x2b, 0x3f,
++ 0x2b, 0x3f, 0x23, 0x23, 0x23, 0x46, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0x50, 0x70, 0x58, 0x78, 0x94, 0x04, 0x00, 0x00,
++ 0x08, 0x2f, 0x28, 0x2f, 0x72, 0x07, 0x18, 0x6f,
++ 0x09, 0x0f, 0x09, 0x0f, 0x10, 0x20, 0x00, 0x00,
++ 0x80, 0x98, 0xe4, 0x84, 0x7c, 0xc0, 0x80, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x1e, 0x24, 0x48, 0x3e, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x3e, 0x23, 0x22, 0x23, 0x46, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0xa0, 0xa0, 0xfc, 0xa0, 0xa0,
++ 0x90, 0xf4, 0x8c, 0x0c, 0xf4, 0x04, 0x00, 0x00,
++ 0x10, 0x1e, 0x24, 0x49, 0x3e, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x3f, 0x22, 0x22, 0x22, 0x46, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x1e, 0x24, 0x49, 0x3e, 0x2a, 0x2a, 0x3e,
++ 0x2b, 0x3e, 0x23, 0x22, 0x23, 0x46, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xf0, 0x90, 0xf0, 0x90, 0xf0,
++ 0xfc, 0xf8, 0x68, 0xa8, 0x48, 0x30, 0x00, 0x00,
++ 0x10, 0x1f, 0x25, 0x49, 0x3e, 0x2a, 0x2b, 0x3f,
++ 0x2b, 0x3f, 0x22, 0x22, 0x23, 0x46, 0x00, 0x00,
++ 0x00, 0xf8, 0x68, 0xf8, 0x80, 0xf8, 0x48, 0xf8,
++ 0x58, 0xf8, 0x68, 0x78, 0x88, 0x30, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x7f, 0x00, 0x3e, 0x00, 0x3e,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x28, 0x24,
++ 0x24, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3f, 0x00, 0x3c,
++ 0x00, 0x3c, 0x25, 0x25, 0x3d, 0x24, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x00, 0xf8, 0x10, 0x20,
++ 0x40, 0x80, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3c, 0x01, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3f, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3d, 0x03, 0x3d,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xa4, 0x24, 0x28, 0x28, 0x30,
++ 0x60, 0x20, 0x24, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x00, 0x3c, 0x03, 0x3c,
++ 0x00, 0x3c, 0x24, 0x25, 0x3e, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0x90, 0x90, 0x90, 0xfc, 0x30,
++ 0x30, 0x50, 0x90, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x68,
++ 0xa8, 0x98, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xe8, 0x28, 0x28, 0x28,
++ 0xe8, 0x28, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3f, 0x24, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0xf0, 0x90, 0x90,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3c, 0x03, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x50, 0x48, 0x88, 0xf4, 0x04,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7f, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x27, 0x24, 0x3f, 0x24, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x10, 0xd0, 0x14, 0x0c, 0xec, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x0f, 0x00, 0x7f, 0x0f,
++ 0x0f, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0xe0, 0x00, 0xfc, 0xe0,
++ 0xe0, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3c, 0x01, 0x3e,
++ 0x00, 0x3d, 0x24, 0x24, 0x3c, 0x25, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xa0, 0xa4, 0x24, 0xa8,
++ 0xb0, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x26, 0x3e, 0x24, 0x00, 0x00,
++ 0x40, 0x78, 0x90, 0x20, 0xfc, 0x00, 0x78, 0x48,
++ 0x48, 0x70, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x3d, 0x01, 0x7f, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x26, 0x26, 0x3c, 0x24, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3f, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0xe8, 0x28, 0xe8,
++ 0x28, 0xe8, 0x28, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3e, 0x03, 0x3c,
++ 0x00, 0x3c, 0x25, 0x26, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xf8, 0x20, 0x20, 0xfc, 0x70,
++ 0x70, 0xa8, 0x28, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x38, 0x00, 0x7e, 0x01, 0x39, 0x00, 0x39,
++ 0x06, 0x38, 0x29, 0x29, 0x3a, 0x2c, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xa8, 0xa8, 0xb0, 0xb0, 0xa8,
++ 0xa4, 0xa4, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7c, 0x01, 0x3c, 0x03, 0x3c,
++ 0x00, 0x3d, 0x26, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x40, 0x58, 0xe0, 0x40, 0xf8, 0x40, 0xfc, 0xe0,
++ 0xe0, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x02, 0x3c, 0x00, 0x3f,
++ 0x01, 0x3d, 0x25, 0x27, 0x3c, 0x24, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf8, 0xc8, 0xa8, 0xfc,
++ 0x48, 0x28, 0x28, 0xfc, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x38, 0x00, 0x7f, 0x00, 0x3a, 0x02, 0x3f,
++ 0x02, 0x3a, 0x2a, 0x2a, 0x3c, 0x28, 0x00, 0x00,
++ 0x28, 0x24, 0x24, 0xfc, 0x20, 0xa8, 0xa8, 0xe8,
++ 0xb8, 0x90, 0x94, 0xac, 0x4c, 0x84, 0x00, 0x00,
++ 0x00, 0x38, 0x02, 0x7d, 0x01, 0x3f, 0x00, 0x39,
++ 0x01, 0x3a, 0x2c, 0x28, 0x38, 0x2b, 0x00, 0x00,
++ 0x80, 0xfc, 0x90, 0x10, 0x10, 0x10, 0xfc, 0x90,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3e, 0x03, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xfc, 0x20, 0x20, 0xfc, 0x20,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x20, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x02, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x20, 0xb0, 0xa8, 0x24, 0x24, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3b, 0x00, 0x7d, 0x01, 0x39, 0x01, 0x39,
++ 0x02, 0x3a, 0x2c, 0x28, 0x3f, 0x28, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0xe8, 0xe4, 0x44, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x25, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x00, 0xf8, 0x88, 0xf8, 0x00,
++ 0xf8, 0x10, 0xfc, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x3d, 0x01, 0x7f, 0x02, 0x3d, 0x00, 0x3f,
++ 0x00, 0x3d, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x24, 0x04, 0xf8, 0x48, 0xfc,
++ 0x48, 0xf8, 0x48, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3d, 0x00, 0x3d,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x88, 0x30, 0x40, 0xb8,
++ 0x08, 0xb8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7f, 0x02, 0x3d, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3d, 0x26, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x00, 0xfc, 0x20, 0xa0,
++ 0xb8, 0xa0, 0xa0, 0xe0, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7c, 0x03, 0x3f, 0x02, 0x3e,
++ 0x03, 0x3c, 0x25, 0x26, 0x3c, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x58, 0xd8, 0xe8,
++ 0xf8, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3c, 0x01, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x48, 0x50, 0xfc, 0x00,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x01, 0x3d, 0x01, 0x7f, 0x01, 0x3d, 0x03, 0x3c,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x20, 0x24, 0xf8, 0x20, 0x24, 0xe4, 0x3c, 0x40,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3d, 0x01, 0x7f, 0x00, 0x3c, 0x00, 0x3d,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0xdc, 0x54, 0xdc, 0x00, 0xf8, 0x00, 0xfc,
++ 0x40, 0x78, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7f, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x27, 0x3c, 0x24, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xfc, 0x00, 0xf8, 0x88, 0xf8,
++ 0x10, 0xf8, 0x90, 0xfc, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x26, 0x3e, 0x24, 0x00, 0x00,
++ 0x20, 0x3c, 0x20, 0xfc, 0x38, 0xe4, 0x1c, 0x00,
++ 0x7c, 0x40, 0xfc, 0x40, 0x7c, 0x40, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7f, 0x03, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3f, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0xfc, 0x00, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3d, 0x01, 0x7f, 0x00, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x24, 0x27, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3b, 0x02, 0x7f, 0x02, 0x3b, 0x03, 0x3b,
++ 0x03, 0x3a, 0x2a, 0x2c, 0x3f, 0x28, 0x00, 0x00,
++ 0x00, 0xf0, 0x30, 0xd0, 0x90, 0xf0, 0xb0, 0xb0,
++ 0xf0, 0x90, 0xb4, 0xfc, 0x1c, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x7f, 0x02, 0x3b, 0x02, 0x3b,
++ 0x02, 0x3f, 0x2a, 0x2a, 0x3a, 0x2a, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x00, 0x3b, 0x02, 0x7e, 0x03, 0x3a, 0x02, 0x3b,
++ 0x02, 0x38, 0x28, 0x29, 0x3a, 0x2c, 0x00, 0x00,
++ 0xc0, 0x58, 0x48, 0x48, 0x58, 0x48, 0x48, 0xf8,
++ 0x48, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x00, 0x3c, 0x00, 0x3d,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xe8, 0xa8, 0xe8, 0x18, 0xfc,
++ 0x08, 0xe8, 0xa8, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x3f, 0x22, 0x5f, 0x0f, 0x7f, 0x04, 0x1f,
++ 0x6f, 0x07, 0x07, 0x0f, 0x08, 0x0f, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0xf8, 0xe0, 0xfc, 0x40, 0xf0,
++ 0xec, 0xc0, 0xc0, 0xe0, 0x20, 0xe0, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7f, 0x00, 0x3c, 0x00, 0x3d,
++ 0x03, 0x3d, 0x25, 0x25, 0x3f, 0x24, 0x00, 0x00,
++ 0xf0, 0x90, 0x08, 0xf4, 0x00, 0xf0, 0x90, 0x08,
++ 0xfc, 0x68, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7d, 0x02, 0x3c, 0x00, 0x3c,
++ 0x01, 0x3d, 0x25, 0x25, 0x3f, 0x24, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0xf8, 0x44, 0xf0, 0x10, 0x60,
++ 0xf8, 0x68, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3d, 0x01, 0x7f, 0x01, 0x3d, 0x00, 0x3d,
++ 0x02, 0x3c, 0x27, 0x24, 0x3c, 0x27, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xa4, 0x5c,
++ 0x40, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x00, 0x38, 0x00, 0x7e, 0x02, 0x3a, 0x04, 0x38,
++ 0x03, 0x3a, 0x2a, 0x2a, 0x3f, 0x28, 0x00, 0x00,
++ 0x40, 0x28, 0xa8, 0x90, 0x98, 0xa4, 0xd4, 0xf0,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3d, 0x01, 0x3e,
++ 0x01, 0x3c, 0x24, 0x24, 0x3c, 0x25, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x50, 0xfc, 0x28, 0x20,
++ 0xfc, 0x20, 0x38, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7e, 0x00, 0x3f, 0x00, 0x3d,
++ 0x03, 0x3c, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xb0, 0xe0, 0x80, 0xf8, 0x20,
++ 0xfc, 0x20, 0x28, 0x28, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3b, 0x02, 0x7e, 0x02, 0x3a, 0x02, 0x3b,
++ 0x03, 0x3b, 0x2b, 0x2a, 0x3b, 0x2a, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x90, 0xf0, 0x00, 0xf8,
++ 0x68, 0x68, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x1d, 0x0b, 0x3f, 0x2a, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x08, 0xe8, 0xf8, 0x08, 0xe8,
++ 0xe8, 0x08, 0xe8, 0xa8, 0xe8, 0x30, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x3f, 0x2a, 0x3e, 0x23, 0x47,
++ 0x3f, 0x07, 0x07, 0x0f, 0x08, 0x0f, 0x00, 0x00,
++ 0x70, 0x50, 0x94, 0xfc, 0x90, 0x60, 0x9c, 0xc0,
++ 0xf8, 0xc0, 0xc0, 0xe0, 0x20, 0xe0, 0x00, 0x00,
++ 0x00, 0x38, 0x07, 0x7d, 0x00, 0x3b, 0x02, 0x3b,
++ 0x02, 0x3a, 0x2a, 0x2a, 0x3a, 0x2a, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0xf8, 0x48, 0xf8,
++ 0x48, 0xe8, 0xa8, 0xe8, 0xa8, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3c, 0x01, 0x3d,
++ 0x01, 0x3d, 0x24, 0x24, 0x3c, 0x27, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc, 0x54,
++ 0xfc, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7e, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3c, 0x27, 0x24, 0x3d, 0x26, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x38, 0x07, 0x7c, 0x03, 0x39, 0x07, 0x39,
++ 0x03, 0x38, 0x2f, 0x28, 0x38, 0x28, 0x00, 0x00,
++ 0xa0, 0xa0, 0xfc, 0xa0, 0xf8, 0x50, 0xfc, 0x50,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3b, 0x01, 0x7d, 0x03, 0x39, 0x01, 0x39,
++ 0x01, 0x3a, 0x2a, 0x2d, 0x39, 0x2a, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x24, 0xe4, 0x20, 0xf0, 0x10,
++ 0xfc, 0x04, 0xd4, 0x6c, 0x44, 0x18, 0x00, 0x00,
++ 0x01, 0x39, 0x06, 0x7e, 0x01, 0x3a, 0x07, 0x38,
++ 0x03, 0x39, 0x29, 0x2a, 0x3a, 0x2c, 0x00, 0x00,
++ 0x48, 0x48, 0xf4, 0xd4, 0x48, 0xd4, 0xfc, 0x50,
++ 0xfc, 0x28, 0xa8, 0x94, 0x2c, 0xc4, 0x00, 0x00,
++ 0x00, 0x3b, 0x00, 0x7c, 0x07, 0x38, 0x03, 0x38,
++ 0x03, 0x3a, 0x2b, 0x2a, 0x3a, 0x2a, 0x00, 0x00,
++ 0x00, 0xf0, 0xa0, 0x40, 0xfc, 0xc8, 0x50, 0xc0,
++ 0xf8, 0xb8, 0xf8, 0xa8, 0xe8, 0x18, 0x00, 0x00,
++ 0x01, 0x38, 0x02, 0x7d, 0x01, 0x3a, 0x05, 0x39,
++ 0x01, 0x39, 0x29, 0x28, 0x3f, 0x28, 0x00, 0x00,
++ 0xc8, 0x68, 0xb4, 0x94, 0xf8, 0x08, 0xf4, 0x10,
++ 0x10, 0xf0, 0x10, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3b, 0x02, 0x7e, 0x03, 0x39, 0x01, 0x3a,
++ 0x05, 0x39, 0x29, 0x29, 0x39, 0x29, 0x00, 0x00,
++ 0x88, 0xfc, 0xa8, 0xa8, 0xfc, 0xd8, 0xac, 0x4c,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x39, 0x07, 0x79, 0x07, 0x39, 0x02, 0x3c,
++ 0x01, 0x39, 0x29, 0x29, 0x39, 0x29, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xfc, 0x10, 0xa8, 0x44,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x7f, 0x02, 0x3b, 0x01, 0x39,
++ 0x01, 0x39, 0x29, 0x2f, 0x38, 0x28, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x38, 0x03, 0x7f, 0x02, 0x3b, 0x02, 0x3b,
++ 0x02, 0x3a, 0x2a, 0x2a, 0x3c, 0x28, 0x00, 0x00,
++ 0x40, 0xf8, 0x20, 0xfc, 0x54, 0x8c, 0x70, 0xfc,
++ 0x70, 0x70, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x39, 0x01, 0x7d, 0x00, 0x3b, 0x02, 0x3b,
++ 0x00, 0x3f, 0x28, 0x29, 0x3e, 0x28, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xb8, 0xa8, 0xb8,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3f, 0x3e, 0x33, 0x5e, 0x0f,
++ 0x7f, 0x07, 0x07, 0x0f, 0x08, 0x0f, 0x00, 0x00,
++ 0x20, 0xf8, 0x50, 0xfc, 0x20, 0xfc, 0x20, 0xe0,
++ 0xfc, 0xc0, 0xc0, 0xe0, 0x20, 0xe0, 0x00, 0x00,
++ 0x00, 0x3b, 0x02, 0x7f, 0x00, 0x3b, 0x00, 0x3f,
++ 0x01, 0x3f, 0x28, 0x2b, 0x38, 0x28, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x40, 0xf8, 0x40, 0xfc,
++ 0x10, 0xfc, 0x40, 0xf8, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3a, 0x01, 0x79, 0x04, 0x3b, 0x02, 0x38,
++ 0x06, 0x3a, 0x2a, 0x2a, 0x3d, 0x28, 0x00, 0x00,
++ 0x20, 0xf8, 0xa8, 0xf8, 0x20, 0xfc, 0xf0, 0x90,
++ 0xf0, 0xf8, 0x88, 0xf8, 0x80, 0xfc, 0x00, 0x00,
++ 0x06, 0x1b, 0x13, 0x1c, 0x1e, 0x12, 0x7f, 0x17,
++ 0x3f, 0x47, 0x07, 0x0f, 0x08, 0x0f, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0xf0, 0xf0, 0x90, 0xfc, 0xd0,
++ 0xf8, 0xc4, 0xc0, 0xe0, 0x20, 0xe0, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x7f, 0x02, 0x3b, 0x03, 0x39,
++ 0x01, 0x39, 0x29, 0x29, 0x39, 0x2e, 0x00, 0x00,
++ 0x40, 0xfc, 0xf0, 0xf8, 0xa8, 0x38, 0xf8, 0xf0,
++ 0x10, 0xf0, 0xf0, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x00, 0x38, 0x07, 0x7c, 0x01, 0x3f, 0x01, 0x3b,
++ 0x05, 0x39, 0x28, 0x2a, 0x3a, 0x2c, 0x00, 0x00,
++ 0xa0, 0xa0, 0xfc, 0xa0, 0xf0, 0x14, 0xf8, 0xb0,
++ 0xf4, 0xac, 0x00, 0xa8, 0x54, 0x54, 0x00, 0x00,
++ 0x14, 0x17, 0x28, 0x3f, 0x68, 0x2b, 0x3c, 0x2b,
++ 0x28, 0x3f, 0x2a, 0x2b, 0x3e, 0x20, 0x00, 0x00,
++ 0x14, 0x94, 0x28, 0xfc, 0x68, 0xa8, 0x3c, 0xa8,
++ 0x28, 0xbc, 0xa8, 0xa8, 0xbc, 0x20, 0x00, 0x00,
++ 0x00, 0x38, 0x07, 0x7d, 0x01, 0x39, 0x01, 0x3b,
++ 0x00, 0x3b, 0x29, 0x29, 0x38, 0x2f, 0x00, 0x00,
++ 0x40, 0xf8, 0xf0, 0x10, 0xf4, 0xb8, 0xe4, 0x7c,
++ 0xa0, 0xf0, 0x50, 0xf4, 0xac, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x03, 0x7e, 0x03, 0x38, 0x07, 0x3b,
++ 0x00, 0x3f, 0x29, 0x2f, 0x39, 0x2e, 0x00, 0x00,
++ 0x40, 0xfc, 0xb8, 0xa8, 0xb8, 0xa0, 0xfc, 0xf8,
++ 0xa0, 0xfc, 0xa8, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x02, 0x3a, 0x02, 0x7d, 0x07, 0x3a, 0x06, 0x3a,
++ 0x06, 0x3a, 0x2e, 0x2b, 0x3e, 0x28, 0x00, 0x00,
++ 0xa0, 0xb0, 0xa8, 0x68, 0xfc, 0xa0, 0xe8, 0xa8,
++ 0xe8, 0xd0, 0x94, 0xfc, 0x4c, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x7f, 0x02, 0x3b, 0x00, 0x39,
++ 0x03, 0x3d, 0x29, 0x29, 0x39, 0x29, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xb8, 0xa8, 0xb8, 0x90, 0xfc,
++ 0x20, 0xf8, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x03, 0x3b, 0x05, 0x7f, 0x03, 0x3b, 0x05, 0x39,
++ 0x01, 0x39, 0x29, 0x29, 0x39, 0x2e, 0x00, 0x00,
++ 0x30, 0xb8, 0x50, 0xfc, 0x30, 0xb4, 0x4c, 0xf0,
++ 0x10, 0xf0, 0xf0, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x14, 0x12, 0x22, 0x48, 0x08, 0x14, 0x13, 0x22,
++ 0x7e, 0x22, 0x22, 0x3f, 0x22, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x90, 0x90, 0x90, 0xfc, 0x30,
++ 0x30, 0x50, 0x90, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x3f, 0x2a, 0x7e, 0x09, 0x3e, 0x08, 0x7f,
++ 0x08, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x50, 0x48, 0x88, 0xa0, 0x20, 0x50, 0x50, 0x88,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x02, 0x3e, 0x29, 0x49, 0x0a, 0x32, 0x0c, 0x0a,
++ 0x3f, 0x08, 0x7f, 0x0c, 0x12, 0x60, 0x00, 0x00,
++ 0x50, 0x48, 0x88, 0x20, 0x20, 0x50, 0x50, 0x88,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x1f, 0x00, 0x7f, 0x00, 0x0f,
++ 0x08, 0x0f, 0x04, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0xe0,
++ 0x20, 0xe0, 0x40, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7e, 0x01, 0x3d, 0x26, 0x24, 0x24, 0x3d,
++ 0x27, 0x14, 0x18, 0x1c, 0x61, 0x02, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x80, 0xb8, 0xe8, 0x68,
++ 0x68, 0xf8, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3e, 0x3e, 0x24, 0x3f, 0x3f,
++ 0x0f, 0x08, 0x0f, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c, 0xf8,
++ 0xe0, 0x20, 0xe0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x25, 0x2f, 0x25, 0x2f, 0x2f, 0x25, 0x3f, 0x7f,
++ 0x0f, 0x08, 0x0f, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x48, 0xe8, 0x48, 0xe8, 0xe8, 0x48, 0xf8, 0xfc,
++ 0xe0, 0x20, 0xe0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x02, 0x0e, 0x73, 0x05, 0x19,
++ 0x62, 0x04, 0x18, 0x60, 0x01, 0x06, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x48, 0x48, 0x50, 0xa0,
++ 0xa0, 0x90, 0x88, 0x84, 0x00, 0x00, 0x00, 0x00,
++ 0x09, 0x09, 0x1f, 0x02, 0x7f, 0x04, 0x1f, 0x63,
++ 0x3d, 0x06, 0x39, 0x06, 0x38, 0x03, 0x00, 0x00,
++ 0x20, 0x10, 0xf8, 0x80, 0xfc, 0x40, 0xf0, 0x1c,
++ 0x90, 0xa0, 0xe0, 0x98, 0x84, 0x00, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x10, 0x32, 0x4b, 0x1c, 0x2c,
++ 0x4a, 0x1b, 0x2a, 0x48, 0x08, 0x30, 0x00, 0x00,
++ 0x40, 0x48, 0xf8, 0x50, 0x50, 0xfc, 0x30, 0x48,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x3c, 0x02, 0x03, 0x7c, 0x01,
++ 0x06, 0x38, 0x01, 0x06, 0x38, 0x01, 0x00, 0x00,
++ 0x40, 0x80, 0x88, 0x50, 0x60, 0x80, 0x80, 0x40,
++ 0x60, 0xa0, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00,
++ 0x04, 0x18, 0x6a, 0x24, 0x1b, 0x70, 0x08, 0x1c,
++ 0x64, 0x0c, 0x15, 0x66, 0x04, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x30, 0x30, 0x50,
++ 0x50, 0x90, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x19, 0x6a, 0x24, 0x18, 0x68, 0x0d, 0x14,
++ 0x65, 0x0d, 0x15, 0x65, 0x05, 0x19, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x88, 0x30, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x18, 0x6a, 0x24, 0x19, 0x6a, 0x0c, 0x15,
++ 0x66, 0x0d, 0x15, 0x65, 0x05, 0x19, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x88, 0x90, 0x60, 0x60, 0x90,
++ 0x0c, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x09, 0x11, 0x6d, 0x29, 0x13, 0x72, 0x1e, 0x2a,
++ 0x4a, 0x1a, 0x2b, 0x4a, 0x0a, 0x32, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x70, 0x70,
++ 0xa8, 0xa8, 0x24, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x19, 0x6a, 0x24, 0x18, 0x68, 0x0c, 0x14,
++ 0x64, 0x0c, 0x14, 0x64, 0x04, 0x18, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x40, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x04, 0x19, 0x6b, 0x25, 0x19, 0x69, 0x0d, 0x15,
++ 0x64, 0x0d, 0x14, 0x64, 0x07, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x19, 0x6b, 0x25, 0x19, 0x69, 0x0d, 0x15,
++ 0x64, 0x0c, 0x14, 0x64, 0x05, 0x1a, 0x00, 0x00,
++ 0x40, 0xb8, 0x08, 0x08, 0xb8, 0x08, 0x08, 0xf8,
++ 0xa0, 0xa0, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x04, 0x18, 0x6b, 0x25, 0x19, 0x69, 0x0d, 0x15,
++ 0x65, 0x0d, 0x15, 0x65, 0x05, 0x1e, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x28, 0xe8, 0x58, 0x88, 0xf8,
++ 0x24, 0xf8, 0x20, 0x24, 0xe4, 0x1c, 0x00, 0x00,
++ 0x05, 0x19, 0x6b, 0x25, 0x19, 0x69, 0x0d, 0x15,
++ 0x65, 0x0d, 0x15, 0x65, 0x05, 0x1e, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x24, 0xe8, 0x30, 0x20,
++ 0x20, 0x20, 0x24, 0x64, 0xa4, 0x1c, 0x00, 0x00,
++ 0x04, 0x1b, 0x68, 0x25, 0x19, 0x69, 0x0d, 0x15,
++ 0x64, 0x0f, 0x14, 0x64, 0x05, 0x1e, 0x00, 0x00,
++ 0x90, 0xfc, 0x90, 0xf8, 0x08, 0xf8, 0x08, 0xf8,
++ 0x40, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x23, 0x3e, 0x22,
++ 0x22, 0x3e, 0x14, 0x12, 0x23, 0x42, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0x7c, 0xc8, 0x48, 0x50,
++ 0x30, 0x20, 0x54, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x17, 0x14, 0x17,
++ 0x14, 0x17, 0x24, 0x27, 0x43, 0x1c, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0xfc, 0x80, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x70, 0x0f, 0x00, 0x0f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0x80, 0xe0, 0x1c, 0xe0, 0x40, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x3f, 0x22,
++ 0x22, 0x3e, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x50, 0x48, 0x88, 0xf4, 0x04,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x2f, 0x28, 0x2e, 0x78, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x80, 0x98, 0xe0, 0x84, 0x7c, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x1f, 0x00, 0x7f, 0x1f, 0x11,
++ 0x1f, 0x1f, 0x11, 0x1f, 0x19, 0x60, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0x40, 0xc0, 0x40, 0x40,
++ 0x20, 0x20, 0x14, 0x14, 0x0c, 0x84, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x7f, 0x00, 0x1f, 0x11, 0x1f,
++ 0x11, 0x1f, 0x11, 0x1f, 0x19, 0x60, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0x40, 0x40, 0x40,
++ 0x20, 0x20, 0x14, 0x14, 0x0c, 0x84, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x3c, 0x27, 0x3c, 0x24,
++ 0x24, 0x3c, 0x19, 0x15, 0x22, 0x44, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0xf8, 0x08, 0x10,
++ 0x10, 0x20, 0x40, 0x80, 0x40, 0x3c, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x3f, 0x24, 0x3f, 0x0f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x1f, 0x05, 0x7f, 0x04, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xf0, 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x3c, 0x24, 0x3d, 0x24,
++ 0x24, 0x3f, 0x18, 0x14, 0x24, 0x43, 0x00, 0x00,
++ 0x50, 0x48, 0x7c, 0xc8, 0x30, 0x74, 0x8c, 0x54,
++ 0x7c, 0xc8, 0x30, 0x34, 0xcc, 0x04, 0x00, 0x00,
++ 0x01, 0x7f, 0x1f, 0x3f, 0x24, 0x3f, 0x0f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0xf8, 0x48, 0xf8, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x7f, 0x09, 0x17, 0x25, 0x19, 0x6f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0xa8, 0x48, 0x30, 0xec, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x7f, 0x1f, 0x04, 0x7f, 0x0f,
++ 0x18, 0x6f, 0x0f, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xfc, 0xf0, 0x40, 0xfc, 0xe0,
++ 0x30, 0xec, 0xe0, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x3d, 0x27, 0x24, 0x3f, 0x24, 0x3f, 0x24,
++ 0x27, 0x3d, 0x19, 0x16, 0x24, 0x40, 0x00, 0x00,
++ 0x48, 0xb0, 0xfc, 0xa0, 0xf8, 0xa8, 0xfc, 0xa8,
++ 0xf8, 0xb0, 0xb0, 0xa8, 0xa4, 0xa0, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x25, 0x3d, 0x25, 0x3d, 0x25,
++ 0x25, 0x3c, 0x1b, 0x15, 0x24, 0x40, 0x00, 0x00,
++ 0x50, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x08, 0x3e, 0x7f, 0x14, 0x7f, 0x3e, 0x09, 0x0f,
++ 0x08, 0x0f, 0x0f, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0xd4, 0xb4, 0x0c, 0xe0,
++ 0x20, 0xe0, 0xe0, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x3e, 0x7e, 0x09, 0x7f, 0x1e, 0x27, 0x4f,
++ 0x08, 0x0f, 0x0f, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x90, 0x50, 0x70, 0x8c, 0xe0,
++ 0x20, 0xe0, 0xe0, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x14, 0x1f, 0x25, 0x7f, 0x16, 0x25, 0x4f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0xa0, 0xf8, 0x20, 0xfc, 0x50, 0x94, 0xec, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x7f, 0x12, 0x0d, 0x1d, 0x63, 0x0f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0xd4, 0xfc, 0x70, 0x50, 0x74, 0x8c, 0xe4, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x7f, 0x08, 0x07, 0x1f, 0x10, 0x1f, 0x3b,
++ 0x2a, 0x3b, 0x2b, 0x3b, 0x2b, 0x5c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0xf0, 0x10, 0xf0, 0xb8,
++ 0xa8, 0xb8, 0xb8, 0xac, 0x4c, 0x84, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x25, 0x3d, 0x25, 0x3d, 0x25,
++ 0x25, 0x3d, 0x1a, 0x16, 0x24, 0x40, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xfc, 0x54, 0x8c, 0x70, 0xfc,
++ 0x70, 0x70, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3d, 0x24, 0x27, 0x3d, 0x24, 0x3f, 0x25,
++ 0x26, 0x3d, 0x19, 0x15, 0x27, 0x40, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xfc, 0xf8, 0x40, 0xfc, 0xa8,
++ 0x54, 0xf8, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x3e, 0x15, 0x1d, 0x3f, 0x5f, 0x17,
++ 0x14, 0x17, 0x17, 0x17, 0x22, 0x4c, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x50, 0x78, 0xf4, 0xf0, 0xd0,
++ 0x50, 0xd0, 0xd0, 0xd0, 0x90, 0x50, 0x00, 0x00,
++ 0x00, 0x38, 0x2d, 0x2d, 0x3d, 0x2f, 0x39, 0x2f,
++ 0x2d, 0x3d, 0x15, 0x1a, 0x2a, 0x44, 0x00, 0x00,
++ 0x18, 0x14, 0xfc, 0x10, 0xf4, 0xd4, 0xf4, 0xb8,
++ 0xf8, 0xdc, 0xfc, 0x9c, 0x24, 0x44, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x3d, 0x25, 0x3d, 0x25,
++ 0x25, 0x3d, 0x1a, 0x16, 0x27, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x0f, 0x0f, 0x18, 0x3e,
++ 0x22, 0x3e, 0x3e, 0x3e, 0x14, 0x63, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0xe0, 0xe0, 0x30, 0xf8,
++ 0x88, 0xf8, 0xf8, 0xf8, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x3d, 0x24, 0x25, 0x3d, 0x25, 0x3d, 0x24,
++ 0x24, 0x3c, 0x18, 0x14, 0x24, 0x43, 0x00, 0x00,
++ 0x20, 0xfc, 0xf8, 0xfc, 0x54, 0x9c, 0xfc, 0xf8,
++ 0x88, 0xf8, 0xf8, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x08, 0x08, 0x7f, 0x14, 0x36,
++ 0x36, 0x35, 0x55, 0x14, 0x24, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x80, 0xf8, 0xc8,
++ 0xa8, 0xb0, 0x90, 0xb0, 0xc8, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x08, 0x08, 0x7f, 0x14, 0x36,
++ 0x37, 0x35, 0x55, 0x14, 0x24, 0x4c, 0x00, 0x00,
++ 0x40, 0x48, 0xf8, 0x50, 0x50, 0xfc, 0x50, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x08, 0x04,
++ 0x04, 0x10, 0x1b, 0x14, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x40, 0x80, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x08, 0x08, 0x7f, 0x08, 0x28,
++ 0x2e, 0x29, 0x38, 0x28, 0x46, 0x41, 0x00, 0x00,
++ 0x10, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x9c,
++ 0xf0, 0x90, 0x10, 0x10, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x08, 0x08, 0x7f, 0x08, 0x28,
++ 0x2e, 0x28, 0x38, 0x28, 0x47, 0x41, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x24, 0x40, 0x90,
++ 0x24, 0xc8, 0x10, 0x60, 0x80, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x09, 0x08, 0x7f, 0x08, 0x28,
++ 0x2e, 0x28, 0x38, 0x28, 0x46, 0x41, 0x00, 0x00,
++ 0x20, 0xa8, 0xa4, 0x24, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0x88, 0x98, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x23, 0x3e, 0x08, 0x29, 0x2e,
++ 0x28, 0x28, 0x2e, 0x38, 0x61, 0x06, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x08, 0x28, 0x2e,
++ 0x28, 0x28, 0x2e, 0x38, 0x63, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xa0, 0xbc, 0xa0, 0xa0,
++ 0xa0, 0xa0, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x08, 0x29, 0x2e,
++ 0x28, 0x28, 0x2e, 0x38, 0x61, 0x06, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x3d, 0x25, 0x27, 0x3d, 0x09, 0x29, 0x2d,
++ 0x29, 0x29, 0x2e, 0x3a, 0x64, 0x09, 0x00, 0x00,
++ 0x00, 0x00, 0x1c, 0xd4, 0x54, 0x54, 0x54, 0x54,
++ 0x54, 0x54, 0x54, 0x5c, 0x54, 0x80, 0x00, 0x00,
++ 0x00, 0x7b, 0x4a, 0x4a, 0x7a, 0x12, 0x57, 0x5e,
++ 0x52, 0x52, 0x5e, 0x72, 0x42, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0xfc, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x22, 0x3e, 0x08, 0x28, 0x2f,
++ 0x29, 0x2a, 0x28, 0x2e, 0x38, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x80, 0xf8, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x09, 0x2b, 0x2e,
++ 0x28, 0x28, 0x2e, 0x38, 0x61, 0x06, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xf8, 0xa0, 0x20, 0xfc, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x3d, 0x09, 0x29, 0x2f,
++ 0x29, 0x29, 0x2e, 0x3a, 0x65, 0x0e, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x28, 0x20, 0x20, 0xf8, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x23, 0x3e, 0x08, 0x28, 0x2e,
++ 0x28, 0x28, 0x2f, 0x3a, 0x64, 0x0b, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0x48, 0x48, 0xc8,
++ 0xb0, 0xb0, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x3d, 0x09, 0x29, 0x2f,
++ 0x29, 0x29, 0x2e, 0x3a, 0x64, 0x08, 0x00, 0x00,
++ 0x40, 0x78, 0x90, 0x20, 0xfc, 0x00, 0x78, 0x48,
++ 0x48, 0x70, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x3f, 0x09, 0x09, 0x0f, 0x71, 0x02, 0x1f,
++ 0x10, 0x1f, 0x09, 0x09, 0x15, 0x63, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x90, 0x54, 0x54, 0x0c, 0xf0,
++ 0x10, 0xf0, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x08, 0x28, 0x2e,
++ 0x28, 0x28, 0x28, 0x2e, 0x38, 0x63, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0xa4,
++ 0xa4, 0xa8, 0x90, 0xb0, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x09, 0x29, 0x2e,
++ 0x28, 0x28, 0x2e, 0x38, 0x61, 0x02, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xf8, 0xa0, 0x20, 0xfc, 0x50,
++ 0x50, 0x50, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x09, 0x29, 0x2f,
++ 0x29, 0x29, 0x2e, 0x3a, 0x64, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x00, 0xfc, 0x04,
++ 0xf4, 0x94, 0xf4, 0x94, 0x04, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x23, 0x22, 0x3e, 0x08, 0x28, 0x2e,
++ 0x28, 0x28, 0x2e, 0x39, 0x62, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0x70, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x28, 0x08, 0x2e,
++ 0x28, 0x28, 0x28, 0x2e, 0x38, 0x63, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8,
++ 0xa4, 0xa8, 0x90, 0xb0, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x09, 0x28, 0x2e,
++ 0x28, 0x28, 0x2f, 0x39, 0x62, 0x04, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20, 0xa0,
++ 0xb8, 0xa0, 0xa0, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x08, 0x28, 0x2e,
++ 0x29, 0x28, 0x2e, 0x39, 0x62, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8, 0xf8, 0x20,
++ 0xfc, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x09, 0x29, 0x2f,
++ 0x29, 0x29, 0x2e, 0x3a, 0x64, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x28, 0x20, 0xfc,
++ 0x20, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x23, 0x3e, 0x08, 0x29, 0x2e,
++ 0x28, 0x29, 0x2e, 0x38, 0x60, 0x03, 0x00, 0x00,
++ 0x50, 0x48, 0x7c, 0xc8, 0x30, 0x74, 0x8c, 0x54,
++ 0x7c, 0xc8, 0x30, 0x24, 0xdc, 0x04, 0x00, 0x00,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x0a, 0x28, 0x2f,
++ 0x28, 0x28, 0x2f, 0x39, 0x62, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x38, 0xe8, 0xa8, 0xa8, 0xa8, 0xe8,
++ 0xa8, 0xa8, 0x68, 0x78, 0x28, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3f, 0x28, 0x09, 0x2e,
++ 0x28, 0x29, 0x28, 0x2e, 0x39, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x20, 0xfc, 0x68, 0xa0, 0x60,
++ 0x20, 0xfc, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x23, 0x22, 0x3e, 0x08, 0x28, 0x2e,
++ 0x28, 0x28, 0x2e, 0x38, 0x63, 0x00, 0x00, 0x00,
++ 0x18, 0xe0, 0xfc, 0x20, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x3e, 0x28, 0x0b, 0x2e,
++ 0x2b, 0x2a, 0x2b, 0x2e, 0x3a, 0x62, 0x00, 0x00,
++ 0xe0, 0x60, 0x90, 0x08, 0xf4, 0x00, 0xa8, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x22, 0x3e, 0x28, 0x08, 0x2e,
++ 0x28, 0x28, 0x2b, 0x2c, 0x38, 0x63, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x20, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xfc, 0x44, 0x84, 0x18, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3e, 0x09, 0x28, 0x2e,
++ 0x29, 0x28, 0x2f, 0x38, 0x61, 0x06, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x24, 0x54, 0x90, 0x60, 0x50,
++ 0xf8, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x7f, 0x1f, 0x04, 0x7f, 0x0f,
++ 0x14, 0x67, 0x09, 0x09, 0x17, 0x61, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0xf0, 0x40, 0xfc, 0xe0,
++ 0x50, 0xcc, 0x00, 0xe0, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x3c, 0x27, 0x24, 0x3d, 0x08, 0x2b, 0x2c,
++ 0x28, 0x28, 0x2f, 0x3a, 0x67, 0x00, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x80,
++ 0xf8, 0xa0, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x3e, 0x09, 0x29, 0x2f,
++ 0x29, 0x29, 0x2f, 0x3b, 0x65, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xf0, 0x08, 0xf4, 0x10, 0xf0,
++ 0xf0, 0x00, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x27, 0x3c, 0x29, 0x0b, 0x2f,
++ 0x29, 0x29, 0x29, 0x2f, 0x39, 0x61, 0x00, 0x00,
++ 0x40, 0x58, 0x40, 0x58, 0xa0, 0x10, 0xf8, 0x14,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3e, 0x28, 0x09, 0x2f,
++ 0x29, 0x29, 0x29, 0x2f, 0x39, 0x61, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x24, 0x24, 0x40, 0xb8, 0x08,
++ 0x08, 0xb8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x13, 0x1f, 0x17, 0x1a, 0x22,
++ 0x4f, 0x08, 0x0f, 0x09, 0x17, 0x21, 0x00, 0x00,
++ 0x50, 0xfc, 0x48, 0xa8, 0xf0, 0x30, 0xd4, 0x0c,
++ 0xe4, 0x20, 0xe0, 0xf0, 0x00, 0xf8, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x26, 0x3c, 0x08, 0x29, 0x2f,
++ 0x2b, 0x29, 0x29, 0x2f, 0x39, 0x61, 0x00, 0x00,
++ 0xa8, 0xa8, 0x28, 0x54, 0xd4, 0x90, 0x10, 0x50,
++ 0x5c, 0x50, 0x50, 0xb0, 0x90, 0x0c, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x3d, 0x09, 0x29, 0x2d,
++ 0x29, 0x29, 0x2e, 0x3b, 0x65, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0x50, 0xfc, 0x50, 0x50,
++ 0x70, 0x50, 0x00, 0xa8, 0x54, 0x54, 0x00, 0x00,
++ 0x00, 0x3e, 0x23, 0x23, 0x3e, 0x28, 0x08, 0x2f,
++ 0x28, 0x28, 0x28, 0x2d, 0x3a, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x00, 0xf8, 0x00, 0xfc,
++ 0x20, 0xb0, 0xa8, 0x24, 0x24, 0x60, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x3c, 0x28, 0x0b, 0x2e,
++ 0x2b, 0x2a, 0x2a, 0x2f, 0x3a, 0x62, 0x00, 0x00,
++ 0xa0, 0xa0, 0xfc, 0xa0, 0xe0, 0x40, 0xf8, 0x48,
++ 0xf8, 0xd8, 0xd8, 0x68, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x3f, 0x26, 0x27, 0x3e, 0x2b, 0x09, 0x2f,
++ 0x29, 0x2b, 0x28, 0x2f, 0x38, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x50, 0xfc,
++ 0x50, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3f, 0x27, 0x26, 0x3e, 0x0b, 0x2a, 0x2f,
++ 0x2b, 0x2b, 0x2f, 0x3c, 0x65, 0x0a, 0x00, 0x00,
++ 0x00, 0xfc, 0x30, 0xb0, 0xd0, 0xfc, 0xb4, 0xf8,
++ 0xd0, 0xd0, 0x98, 0xa8, 0x24, 0x44, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x26, 0x3d, 0x29, 0x09, 0x2f,
++ 0x29, 0x28, 0x2b, 0x2c, 0x38, 0x60, 0x00, 0x00,
++ 0xf0, 0x90, 0xf8, 0x64, 0xf8, 0x78, 0x98, 0xf8,
++ 0xf8, 0x10, 0xfc, 0x90, 0x50, 0x30, 0x00, 0x00,
++ 0x00, 0x3e, 0x25, 0x27, 0x3d, 0x08, 0x2b, 0x2c,
++ 0x29, 0x28, 0x2f, 0x38, 0x61, 0x06, 0x00, 0x00,
++ 0xa0, 0xa8, 0xb0, 0xfc, 0x10, 0xa0, 0xf8, 0x40,
++ 0xf0, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x09, 0x29, 0x2f,
++ 0x28, 0x29, 0x2e, 0x38, 0x63, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x00, 0xdc, 0x54, 0xdc,
++ 0x20, 0xfc, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x3d, 0x28, 0x0b, 0x2e,
++ 0x28, 0x2b, 0x28, 0x2e, 0x38, 0x60, 0x00, 0x00,
++ 0x90, 0xfc, 0x90, 0x48, 0xf8, 0x50, 0xfc, 0x50,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3c, 0x09, 0x29, 0x2f,
++ 0x29, 0x29, 0x2e, 0x38, 0x63, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x68, 0xf8, 0x80, 0xfc, 0x44, 0xf4,
++ 0x54, 0xf4, 0x54, 0x7c, 0x8c, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3f, 0x3e, 0x32, 0x5e, 0x1f,
++ 0x08, 0x0f, 0x09, 0x09, 0x17, 0x21, 0x00, 0x00,
++ 0x20, 0xf8, 0x50, 0xfc, 0x20, 0xf8, 0x20, 0xe0,
++ 0x20, 0xe0, 0x00, 0xf0, 0x00, 0xf8, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x27, 0x3e, 0x0b, 0x2c, 0x2f,
++ 0x29, 0x29, 0x2f, 0x39, 0x62, 0x04, 0x00, 0x00,
++ 0x40, 0xfc, 0xa8, 0xf0, 0xe8, 0xf8, 0x64, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x25, 0x3f, 0x29, 0x08, 0x2f,
++ 0x2b, 0x28, 0x2b, 0x2e, 0x3b, 0x62, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0xfc, 0xe8, 0x40, 0xf0,
++ 0xfc, 0x08, 0xfc, 0xc8, 0xa8, 0x18, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x2a, 0x09, 0x2f,
++ 0x29, 0x29, 0x2f, 0x39, 0x61, 0x06, 0x00, 0x00,
++ 0x48, 0xb0, 0x20, 0xfc, 0x68, 0x48, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x02, 0x7a, 0x4f, 0x49, 0x7f, 0x15, 0x56, 0x5f,
++ 0x57, 0x51, 0x5f, 0x72, 0x44, 0x08, 0x00, 0x00,
++ 0x80, 0x78, 0xe8, 0xa8, 0xf0, 0xf0, 0xe8, 0xe8,
++ 0xe4, 0x24, 0xe4, 0xb8, 0x60, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x26, 0x26, 0x3e, 0x0a, 0x2a, 0x2e,
++ 0x2b, 0x2a, 0x2f, 0x3c, 0x6b, 0x00, 0x00, 0x00,
++ 0x20, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0xf8,
++ 0xfc, 0xac, 0xfc, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x26, 0x27, 0x3e, 0x2b, 0x0a, 0x2e,
++ 0x2b, 0x2a, 0x2a, 0x2e, 0x3a, 0x62, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0x68, 0xf8,
++ 0xa8, 0xf8, 0xf8, 0xa8, 0xf8, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x27, 0x3e, 0x2b, 0x0b, 0x2e,
++ 0x2a, 0x2b, 0x2a, 0x2e, 0x3a, 0x62, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xb8, 0xa8, 0xb8, 0xb8, 0x68,
++ 0xf8, 0xf8, 0xf8, 0xa8, 0xf8, 0x18, 0x00, 0x00,
++ 0x00, 0x3d, 0x24, 0x24, 0x3c, 0x09, 0x28, 0x2f,
++ 0x2a, 0x2b, 0x2f, 0x3b, 0x66, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0xf0, 0xf0, 0xf0, 0x10, 0xfc,
++ 0xa8, 0xb8, 0xb8, 0xb8, 0xe8, 0x88, 0x00, 0x00,
++ 0x08, 0x11, 0x3c, 0x24, 0x3d, 0x25, 0x3d, 0x27,
++ 0x7d, 0x0d, 0x14, 0x64, 0x04, 0x0c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x08, 0x10, 0x3c, 0x27, 0x3c, 0x24, 0x3d, 0x27,
++ 0x7e, 0x0d, 0x14, 0x64, 0x04, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0xe0, 0xe0, 0x50, 0x50,
++ 0x48, 0xf4, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x13, 0x3e, 0x27, 0x3e, 0x27, 0x3c, 0x27,
++ 0x7d, 0x0d, 0x15, 0x64, 0x07, 0x0c, 0x00, 0x00,
++ 0xa0, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x00, 0xfc,
++ 0xf0, 0x10, 0xf0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x11, 0x3c, 0x24, 0x3c, 0x25, 0x3e, 0x26,
++ 0x7f, 0x0c, 0x15, 0x66, 0x04, 0x0c, 0x00, 0x00,
++ 0x00, 0xe0, 0xa0, 0xb8, 0xa8, 0x08, 0x70, 0x40,
++ 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x40, 0x00, 0x00,
++ 0x09, 0x10, 0x3f, 0x24, 0x3d, 0x24, 0x3f, 0x26,
++ 0x7c, 0x0f, 0x14, 0x64, 0x05, 0x0e, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x40,
++ 0x40, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x08, 0x13, 0x3a, 0x2a, 0x3a, 0x2b, 0x3b, 0x2f,
++ 0x7b, 0x1b, 0x2d, 0x4d, 0x09, 0x19, 0x00, 0x00,
++ 0x00, 0xfc, 0xa8, 0xa8, 0xb0, 0x7c, 0xd0, 0x78,
++ 0x50, 0x78, 0x50, 0x50, 0x7c, 0x40, 0x00, 0x00,
++ 0x08, 0x13, 0x3a, 0x2a, 0x3b, 0x2b, 0x3b, 0x2f,
++ 0x7b, 0x1a, 0x2d, 0x4d, 0x0a, 0x18, 0x00, 0x00,
++ 0x40, 0xfc, 0xa8, 0xfc, 0xd0, 0x78, 0x78, 0x50,
++ 0x7c, 0x40, 0xa8, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0xc8, 0xc8, 0xc8,
++ 0xd8, 0xc0, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x3f, 0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x7f,
++ 0x01, 0x31, 0x0c, 0x06, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xfc,
++ 0x00, 0x18, 0x60, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3f, 0x2b,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa0, 0xf8, 0xa0, 0x20, 0xfc,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x08, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xe8, 0xa8, 0xa8, 0xa8,
++ 0xe8, 0xa8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7e, 0x08, 0x08, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x24, 0xc0, 0x10,
++ 0x20, 0xc4, 0x08, 0x10, 0x60, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x09, 0x3e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x08, 0x7e, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x28, 0x24, 0x24, 0xfc, 0x20, 0x20, 0xe0, 0xa0,
++ 0x90, 0x90, 0xb4, 0xcc, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x08, 0x3e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x30, 0x48, 0xf4, 0x24, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2b, 0x3e, 0x2a,
++ 0x3f, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0xd0, 0x20, 0x50, 0x88,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x08, 0x3f, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0xa8, 0xa8, 0x50, 0xa8, 0xa8, 0x00,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x7f, 0x09, 0x3d, 0x2d, 0x3d, 0x2d,
++ 0x3d, 0x09, 0x7f, 0x0b, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0x50, 0xd0, 0x50, 0x50, 0xd0,
++ 0x50, 0x50, 0xd4, 0x54, 0x54, 0x4c, 0x00, 0x00,
++ 0x08, 0x0b, 0x7f, 0x09, 0x3f, 0x2b, 0x3f, 0x2b,
++ 0x3f, 0x09, 0x7f, 0x0b, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf8, 0x68, 0x68, 0xe8,
++ 0x50, 0x50, 0xd8, 0x68, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x09, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0x78, 0x90, 0x20, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0x50, 0x50, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x09, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0xa8, 0xa8, 0x50, 0x50, 0xa8, 0xa8, 0x00, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x09, 0x7e, 0x09, 0x3e, 0x2a, 0x3f, 0x2b,
++ 0x3e, 0x09, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x68, 0x90, 0xd8, 0x24, 0xf8,
++ 0x68, 0x68, 0x90, 0x90, 0x68, 0x44, 0x00, 0x00,
++ 0x10, 0x13, 0x7c, 0x10, 0x7f, 0x56, 0x7f, 0x56,
++ 0x7e, 0x13, 0x7e, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf8, 0x48, 0xf8, 0xd8,
++ 0xd8, 0x68, 0x48, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x10, 0x13, 0x7c, 0x10, 0x7f, 0x56, 0x7f, 0x57,
++ 0x7f, 0x13, 0x7f, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf8, 0x48, 0x58, 0x58,
++ 0x58, 0xf8, 0x18, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x3e, 0x08, 0x7f, 0x14, 0x23, 0x5f, 0x0f,
++ 0x09, 0x0f, 0x09, 0x0f, 0x7f, 0x01, 0x00, 0x00,
++ 0x20, 0xf8, 0x20, 0xfc, 0x50, 0x88, 0xf4, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x09, 0x7e, 0x08, 0x08, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x50,
++ 0xf8, 0x24, 0xf8, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x09, 0x7e, 0x08, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x09, 0x7f, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x90, 0x90, 0xf0, 0x00,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x09, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x0b, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0xf0, 0x90, 0xf0, 0x90, 0xf0,
++ 0x40, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x09, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x09, 0x00, 0x00,
++ 0x20, 0xf8, 0x20, 0xfc, 0x00, 0xf8, 0x88, 0xf8,
++ 0x24, 0x64, 0xd8, 0x50, 0x68, 0x84, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x3f, 0x5e, 0x7f, 0x3e,
++ 0x2a, 0x3e, 0x2a, 0x3e, 0x7f, 0x09, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x50, 0x54, 0x94, 0x0c, 0xf8,
++ 0x48, 0x50, 0x30, 0x20, 0x50, 0x8c, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x09, 0x3f, 0x2b, 0x3f, 0x2b,
++ 0x3f, 0x09, 0x7f, 0x0a, 0x0c, 0x09, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x50, 0xf8, 0x50,
++ 0x50, 0xfc, 0xa8, 0x90, 0xe8, 0x84, 0x00, 0x00,
++ 0x08, 0x09, 0x7e, 0x09, 0x3f, 0x2b, 0x3f, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xfc, 0x28, 0xac, 0xac, 0x00,
++ 0xf8, 0x08, 0xfc, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x09, 0x7e, 0x08, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x09, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x28, 0xfc, 0x20, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0x38, 0xe8, 0xfc, 0x90, 0x50, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x7f, 0x12, 0x7f, 0x56, 0x7e, 0x57,
++ 0x7f, 0x13, 0x7f, 0x15, 0x15, 0x1a, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0x24, 0xe8, 0x30, 0x64, 0xa4, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x09, 0x3e, 0x2a, 0x3f, 0x2a,
++ 0x3f, 0x09, 0x7f, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0xfc, 0x50, 0xf8, 0x54, 0x70,
++ 0xfc, 0x04, 0x74, 0x54, 0x74, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x7f, 0x12, 0x7f, 0x56, 0x7f, 0x57,
++ 0x7d, 0x10, 0x7e, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x28, 0x24, 0xfc, 0x28, 0xe8, 0x10, 0xd4, 0x6c,
++ 0xc4, 0x40, 0xa8, 0x84, 0x94, 0x70, 0x00, 0x00,
++ 0x10, 0x13, 0x7c, 0x13, 0x7e, 0x57, 0x7f, 0x57,
++ 0x7c, 0x13, 0x7e, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xfc, 0x48, 0x58, 0x58, 0xfc,
++ 0x80, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x12, 0x12, 0x7d, 0x15, 0x7a, 0x5a, 0x7d, 0x5f,
++ 0x78, 0x17, 0x78, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x48, 0x48, 0xf4, 0xb4, 0xe8, 0xa8, 0xf4, 0x5c,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x7e, 0x13, 0x7f, 0x56, 0x7f, 0x56,
++ 0x7e, 0x12, 0x7e, 0x14, 0x17, 0x18, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xb0, 0xfc, 0xd0, 0xb8, 0x94,
++ 0x20, 0xb8, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x7f, 0x12, 0x7f, 0x57, 0x7f, 0x57,
++ 0x7f, 0x13, 0x7f, 0x15, 0x15, 0x1b, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0x68, 0xb8, 0xf0, 0x50, 0xf0,
++ 0x50, 0xf0, 0xf8, 0x68, 0x68, 0xfc, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x10, 0x1f, 0x01, 0x3f,
++ 0x08, 0x7f, 0x01, 0x3f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x20, 0xfc, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1e, 0x13, 0x12, 0x12, 0x1e, 0x13, 0x10,
++ 0x3e, 0x33, 0x52, 0x1e, 0x12, 0x10, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x48, 0x50, 0xfc, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x24, 0x15, 0x19, 0x7f, 0x09,
++ 0x0e, 0x78, 0x09, 0x12, 0x10, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0xe0, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x03, 0x3e, 0x29, 0x3f, 0x4a, 0x04, 0x3f, 0x2b,
++ 0x3f, 0x3f, 0x2b, 0x25, 0x3b, 0x23, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x48, 0x28, 0x30, 0xfc, 0x10,
++ 0x10, 0xfc, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x13, 0x7c, 0x2f, 0x28, 0x2b, 0x7c, 0x13,
++ 0x1c, 0x73, 0x12, 0x23, 0x22, 0x40, 0x00, 0x00,
++ 0x10, 0x90, 0x7c, 0xe8, 0x28, 0xa8, 0x7c, 0x90,
++ 0x10, 0xfc, 0x90, 0x90, 0x90, 0x10, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x20, 0x10, 0x17, 0x00, 0x70,
++ 0x10, 0x10, 0x10, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x23, 0x12, 0x12, 0x02, 0x73,
++ 0x12, 0x10, 0x10, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xf8,
++ 0x48, 0x40, 0x40, 0x40, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x22, 0x12, 0x12, 0x02, 0x72,
++ 0x12, 0x12, 0x12, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xe8, 0xa8, 0xa8, 0xe8,
++ 0xa8, 0x08, 0x08, 0x18, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x20, 0x10, 0x11, 0x02, 0x71,
++ 0x11, 0x11, 0x11, 0x11, 0x2c, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x30, 0x00, 0xf8,
++ 0x08, 0x08, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x13, 0x02, 0x02, 0x73, 0x12,
++ 0x12, 0x13, 0x12, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0xf8, 0x48,
++ 0x48, 0xf8, 0x08, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x22, 0x12, 0x12, 0x43, 0x24, 0x24, 0x0a, 0x71,
++ 0x11, 0x12, 0x14, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xa0, 0xb0, 0xa8, 0xa4, 0x24,
++ 0x20, 0x20, 0x20, 0x20, 0x00, 0xfc, 0x00, 0x00,
++ 0x20, 0x17, 0x11, 0x42, 0x27, 0x22, 0x03, 0x73,
++ 0x12, 0x13, 0x13, 0x12, 0x2a, 0x47, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x44, 0xfc, 0xd8, 0x68, 0xf8,
++ 0xd8, 0x68, 0xf8, 0x48, 0x58, 0xfc, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x22, 0x12, 0x12, 0x02, 0x72,
++ 0x12, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xe8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xe8, 0x08, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x22, 0x13, 0x12, 0x02, 0x73,
++ 0x15, 0x15, 0x19, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf8,
++ 0x08, 0x08, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x27, 0x10, 0x12, 0x02, 0x74,
++ 0x18, 0x11, 0x11, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0xa0, 0xb0, 0xa8, 0xa4,
++ 0xa4, 0x20, 0x20, 0x60, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x20, 0x13, 0x12, 0x02, 0x72,
++ 0x13, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xa0, 0xf8, 0xa8, 0xb8, 0xb8,
++ 0x18, 0x08, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x27, 0x10, 0x12, 0x01, 0x71,
++ 0x11, 0x16, 0x10, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0x48, 0x48, 0x70,
++ 0xd0, 0x48, 0x48, 0xc0, 0x00, 0xfc, 0x00, 0x00,
++ 0x20, 0x17, 0x12, 0x42, 0x24, 0x22, 0x00, 0x73,
++ 0x10, 0x10, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x48, 0x90, 0x48, 0x00, 0xf8,
++ 0x40, 0x40, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x09, 0x27, 0x11, 0x11, 0x02, 0x74,
++ 0x11, 0x12, 0x10, 0x1b, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0xa0, 0x18, 0xe4, 0x20, 0x24, 0x9c, 0xf0,
++ 0x90, 0x60, 0xd0, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x22, 0x15, 0x11, 0x01, 0x71,
++ 0x11, 0x11, 0x11, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x44, 0xf4, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0x10, 0x30, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x21, 0x11, 0x10, 0x03, 0x70,
++ 0x11, 0x10, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x00, 0xf8, 0x40,
++ 0xf0, 0x40, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x21, 0x11, 0x16, 0x42, 0x26, 0x2b, 0x03, 0x75,
++ 0x19, 0x11, 0x11, 0x1e, 0x26, 0x41, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x28, 0x68, 0x70, 0xa0, 0x20,
++ 0x50, 0x50, 0x88, 0x04, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x20, 0x13, 0x12, 0x03, 0x72,
++ 0x13, 0x12, 0x12, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x48, 0x48, 0x58, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x09, 0x22, 0x10, 0x10, 0x01, 0x73,
++ 0x15, 0x11, 0x11, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0xa0, 0x90, 0x08, 0x48, 0x40, 0xa0, 0x10, 0xf8,
++ 0x14, 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x27, 0x10, 0x11, 0x02, 0x77,
++ 0x10, 0x11, 0x10, 0x1b, 0x26, 0x41, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xfc, 0xe0, 0x50, 0x48, 0xfc,
++ 0x90, 0xd0, 0x70, 0x88, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x27, 0x11, 0x11, 0x02, 0x74,
++ 0x11, 0x10, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x20, 0x24, 0x5c, 0x40,
++ 0xf0, 0x40, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x20, 0x17, 0x11, 0x00, 0x77,
++ 0x10, 0x13, 0x10, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xa0, 0xfc,
++ 0x40, 0xf8, 0x40, 0x40, 0x00, 0xfc, 0x00, 0x00,
++ 0x22, 0x11, 0x11, 0x47, 0x21, 0x21, 0x0f, 0x71,
++ 0x11, 0x12, 0x14, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x23, 0x12, 0x13, 0x01, 0x73,
++ 0x16, 0x12, 0x13, 0x1b, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x48, 0xa8, 0x28, 0xf8, 0x10, 0xfc, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x22, 0x13, 0x12, 0x03, 0x72,
++ 0x12, 0x13, 0x12, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xb8, 0x88, 0x88, 0xb8, 0x00, 0xf8, 0x28,
++ 0x10, 0x90, 0x28, 0x48, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x21, 0x11, 0x11, 0x00, 0x73,
++ 0x10, 0x11, 0x10, 0x1f, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x40, 0xf0, 0x40, 0xfc, 0x00, 0xfc, 0x00, 0x00,
++ 0x11, 0x09, 0x0a, 0x27, 0x10, 0x13, 0x02, 0x73,
++ 0x12, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0xf0, 0x10, 0x08, 0xfc, 0xa0, 0xf8, 0xa8, 0x38,
++ 0xe8, 0x08, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x23, 0x12, 0x12, 0x02, 0x73,
++ 0x12, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8, 0xb8, 0x18,
++ 0xe8, 0x08, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x23, 0x12, 0x13, 0x02, 0x73,
++ 0x12, 0x13, 0x13, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0xf8, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x30, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x11, 0x08, 0x09, 0x23, 0x14, 0x13, 0x02, 0x73,
++ 0x12, 0x13, 0x12, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0xc0, 0xa0, 0x10, 0xf8, 0x04, 0xa8, 0xa8, 0xd0,
++ 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x20, 0x13, 0x13, 0x02, 0x73,
++ 0x12, 0x13, 0x12, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x18, 0xa8, 0xf8,
++ 0x48, 0xf8, 0x48, 0x58, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x23, 0x10, 0x17, 0x01, 0x71,
++ 0x11, 0x11, 0x17, 0x19, 0x27, 0x41, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa0, 0xfc, 0xf0, 0x50,
++ 0xf0, 0x50, 0xfc, 0x10, 0x30, 0xfc, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x22, 0x12, 0x12, 0x02, 0x72,
++ 0x15, 0x15, 0x1a, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x18, 0xe0, 0x38, 0xfc, 0xa8, 0xb8, 0xe4, 0x9c,
++ 0x50, 0x54, 0x54, 0x8c, 0x00, 0xfc, 0x00, 0x00,
++ 0x11, 0x0b, 0x09, 0x27, 0x11, 0x17, 0x01, 0x71,
++ 0x12, 0x12, 0x14, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x20, 0xa0, 0x20, 0xfc, 0x48, 0xe8, 0x18, 0x90,
++ 0x98, 0xa8, 0xc4, 0x84, 0x00, 0xfc, 0x00, 0x00,
++ 0x20, 0x17, 0x15, 0x45, 0x27, 0x25, 0x05, 0x77,
++ 0x15, 0x15, 0x19, 0x1b, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x64, 0xb4, 0x38, 0xd8, 0x38,
++ 0xd4, 0x14, 0x10, 0x60, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x09, 0x08, 0x27, 0x11, 0x17, 0x01, 0x76,
++ 0x13, 0x10, 0x11, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf0, 0x40, 0xfc, 0x10, 0xb8, 0x90, 0x3c,
++ 0xf8, 0xa0, 0x24, 0x1c, 0x00, 0xfc, 0x00, 0x00,
++ 0x02, 0x39, 0x29, 0x2c, 0x32, 0x33, 0x28, 0x2f,
++ 0x25, 0x25, 0x25, 0x39, 0x22, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x78, 0x90, 0xfc, 0x78, 0x48,
++ 0x78, 0x78, 0x48, 0x58, 0x80, 0x7c, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x23, 0x12, 0x13, 0x03, 0x72,
++ 0x12, 0x15, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x20, 0xac, 0xac, 0xa0,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0xfc, 0x00, 0x00,
++ 0x22, 0x13, 0x14, 0x49, 0x27, 0x25, 0x07, 0x75,
++ 0x17, 0x14, 0x14, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0x28, 0xd8, 0xb0, 0xb8, 0xd0,
++ 0xfc, 0x90, 0x90, 0x90, 0x00, 0xfc, 0x00, 0x00,
++ 0x20, 0x10, 0x17, 0x44, 0x27, 0x24, 0x07, 0x74,
++ 0x17, 0x14, 0x1b, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0xf0, 0xfc, 0xe8, 0x90, 0x70, 0xf8, 0xc8,
++ 0x68, 0xb0, 0x68, 0xa4, 0xc0, 0xfc, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x21, 0x11, 0x11, 0x01, 0x71,
++ 0x13, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf0, 0x50, 0xf0, 0x50, 0xf0,
++ 0xf8, 0x68, 0xf8, 0x08, 0x18, 0xfc, 0x00, 0x00,
++ 0x11, 0x0f, 0x0c, 0x27, 0x14, 0x17, 0x02, 0x7f,
++ 0x13, 0x12, 0x14, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xbc, 0xc8, 0xc8, 0x28, 0xd0,
++ 0x98, 0xa8, 0xc4, 0x84, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x21, 0x11, 0x11, 0x03, 0x72,
++ 0x15, 0x17, 0x10, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf0, 0x10, 0xf0, 0xf0, 0xf0, 0xfc, 0xa8,
++ 0x78, 0xfc, 0xf0, 0x10, 0x60, 0xfc, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x21, 0x11, 0x11, 0x03, 0x72,
++ 0x15, 0x17, 0x11, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf0, 0x10, 0xd0, 0xd0, 0xf0, 0xfc, 0xe8,
++ 0x10, 0xfc, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x23, 0x12, 0x1d, 0x03, 0x72,
++ 0x17, 0x13, 0x15, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x28, 0x7c, 0x50, 0xfc,
++ 0xd0, 0x7c, 0xd0, 0x7c, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x78, 0x0a, 0x2a, 0x2a, 0x2a,
++ 0x3e, 0x2a, 0x08, 0x0a, 0x0c, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x90, 0x90, 0xa0, 0x90, 0x88,
++ 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x12,
++ 0x1e, 0x12, 0x12, 0x12, 0x1e, 0x12, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0xd0, 0x60, 0x50, 0x50,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x06, 0x38, 0x20, 0x20, 0x3f, 0x24, 0x24,
++ 0x24, 0x24, 0x27, 0x38, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x90, 0x90, 0xa0, 0x90, 0x88,
++ 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x7e, 0x12, 0x12, 0x12, 0x22, 0x4c, 0x00,
++ 0x3e, 0x22, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x90, 0x90, 0xa0, 0x90, 0x88,
++ 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x00, 0x7e, 0x08,
++ 0x08, 0x3e, 0x08, 0x08, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x90, 0x90, 0xa0, 0x90, 0x88,
++ 0x88, 0x88, 0xc8, 0xb0, 0x80, 0x80, 0x00, 0x00,
++ 0x14, 0x12, 0x22, 0x48, 0x08, 0x14, 0x12, 0x22,
++ 0x7e, 0x22, 0x22, 0x3e, 0x22, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x90, 0x90, 0xa0, 0x90, 0x88,
++ 0x88, 0x88, 0xc8, 0xb0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1f, 0x10, 0x1f, 0x13, 0x12,
++ 0x13, 0x17, 0x14, 0x27, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0xe0, 0x20,
++ 0xe0, 0xf0, 0x90, 0xf4, 0x04, 0xfc, 0x00, 0x00,
++ 0x03, 0x3c, 0x32, 0x29, 0x29, 0x40, 0x3e, 0x04,
++ 0x08, 0x0e, 0x78, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x90, 0x90, 0xa0, 0x90, 0x88,
++ 0x88, 0x88, 0xc8, 0xb0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x77, 0x55, 0x55, 0x77, 0x00, 0x3e, 0x00,
++ 0x7f, 0x10, 0x1e, 0x22, 0x02, 0x0c, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x6b, 0x3f, 0x29, 0x0e, 0x10,
++ 0x1f, 0x29, 0x6b, 0x3f, 0x29, 0x16, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x3f, 0x7f, 0x08, 0x3f, 0x21,
++ 0x2f, 0x2b, 0x2f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0xd0, 0x60, 0x50, 0x48,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x77, 0x55, 0x77, 0x00, 0x3e, 0x2a, 0x3e,
++ 0x2a, 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x25, 0x16, 0x7f, 0x0e, 0x15, 0x75, 0x1f,
++ 0x2d, 0x6d, 0x1f, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0xd0, 0x50, 0x60, 0xd0, 0xc8,
++ 0x48, 0x48, 0xc8, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0x80, 0xfc, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x2f,
++ 0x33, 0x31, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0xa0, 0x20, 0x20, 0xfc, 0xa8, 0x20, 0x20,
++ 0x30, 0x30, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xf0, 0x50, 0x50, 0x54, 0x94, 0x0c, 0xf8,
++ 0x48, 0x50, 0x30, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x48, 0xc8, 0x48, 0x48, 0xfc, 0x48, 0x48, 0x48,
++ 0x78, 0x48, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x08, 0xb0, 0xe0, 0x20, 0x20, 0xfc, 0x70, 0x70,
++ 0x70, 0xa8, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0xa0, 0x38, 0x48, 0xd0, 0x30, 0x20, 0x40,
++ 0xf8, 0x48, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0x28, 0xc8, 0x30, 0x28, 0xfc, 0x04, 0x78,
++ 0x48, 0x78, 0x48, 0x78, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x2f,
++ 0x37, 0x33, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x78, 0x08, 0xf0,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x50, 0xd0, 0x50, 0xf8, 0x50, 0x50, 0xfc, 0x00,
++ 0x78, 0x48, 0x78, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x33, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x48, 0x48, 0x68, 0xb4, 0x24,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2e, 0x2e, 0x37,
++ 0x37, 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x90, 0xd8, 0xf8,
++ 0xb8, 0xd4, 0xd4, 0x90, 0x90, 0x90, 0x00, 0x00,
++ 0x00, 0x7e, 0x18, 0x19, 0x7e, 0x5a, 0x5a, 0x7e,
++ 0x67, 0x47, 0x7f, 0x43, 0x7f, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf0, 0x90, 0xf0, 0x00,
++ 0xf8, 0x68, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x2e, 0x35, 0x3f, 0x2a, 0x3f, 0x7f,
++ 0x02, 0x1f, 0x14, 0x1f, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x70, 0x54, 0x9c, 0xf8, 0x70, 0xd8, 0xfc,
++ 0x80, 0xf0, 0xd0, 0xf0, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0d, 0x3e, 0x2e, 0x2e, 0x36,
++ 0x37, 0x22, 0x3e, 0x22, 0x3f, 0x22, 0x00, 0x00,
++ 0x20, 0xfc, 0x50, 0xf8, 0x00, 0xa8, 0xa8, 0xac,
++ 0x04, 0xf8, 0xe8, 0xe8, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0d, 0x3e, 0x2f, 0x2e, 0x36,
++ 0x37, 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0xd8, 0x68, 0xd8, 0x68, 0x20, 0xd0,
++ 0x2c, 0xd0, 0x20, 0xc8, 0x30, 0xc0, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3e, 0x2e, 0x2e, 0x36,
++ 0x36, 0x22, 0x3e, 0x23, 0x3f, 0x22, 0x00, 0x00,
++ 0x20, 0x38, 0xfc, 0xb8, 0xe8, 0x98, 0xfc, 0xa0,
++ 0xf4, 0xb8, 0xd8, 0x34, 0x54, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x0d, 0x0d, 0x3f, 0x2f, 0x2e, 0x37,
++ 0x36, 0x22, 0x3e, 0x22, 0x3f, 0x22, 0x00, 0x00,
++ 0x60, 0xf8, 0x68, 0xf8, 0x68, 0xf8, 0x00, 0xfc,
++ 0xf8, 0x88, 0xf8, 0x50, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x0d, 0x0c, 0x3e, 0x2e, 0x2e, 0x36,
++ 0x36, 0x22, 0x3f, 0x22, 0x3e, 0x23, 0x00, 0x00,
++ 0x18, 0xe0, 0xfc, 0x20, 0xf8, 0xb8, 0xe8, 0xf8,
++ 0x20, 0xf8, 0xfc, 0x00, 0xe8, 0x54, 0x00, 0x00,
++ 0x00, 0x7f, 0x0d, 0x0d, 0x3f, 0x2e, 0x2f, 0x36,
++ 0x36, 0x23, 0x3e, 0x23, 0x3e, 0x23, 0x00, 0x00,
++ 0x20, 0xfc, 0xdc, 0x54, 0xdc, 0x50, 0xfc, 0xf8,
++ 0x50, 0xfc, 0x68, 0xd0, 0x68, 0x84, 0x00, 0x00,
++ 0x1b, 0x12, 0x1b, 0x1b, 0x3f, 0x2f, 0x5f, 0x14,
++ 0x1f, 0x1f, 0x07, 0x0f, 0x72, 0x0c, 0x00, 0x00,
++ 0xb0, 0x90, 0xb0, 0xb0, 0xfc, 0xe8, 0xf0, 0xd0,
++ 0xf0, 0xf0, 0xc0, 0xf0, 0x4c, 0xc0, 0x00, 0x00,
++ 0x03, 0x7d, 0x49, 0x2a, 0x2c, 0x7f, 0x18, 0x1c,
++ 0x1a, 0x29, 0x29, 0x48, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x02, 0x7d, 0x4b, 0x2b, 0x2c, 0x7f, 0x18, 0x1d,
++ 0x1a, 0x2b, 0x28, 0x49, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x68, 0xf8, 0x40, 0xf8, 0x40, 0xfc,
++ 0x90, 0xfc, 0x40, 0xf8, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x3e, 0x7f, 0x1c, 0x2a, 0x5f, 0x17, 0x14,
++ 0x17, 0x17, 0x1f, 0x20, 0x5f, 0x00, 0x00, 0x00,
++ 0x40, 0x7c, 0xd0, 0x30, 0xcc, 0xf8, 0xf0, 0x90,
++ 0xf0, 0xf0, 0xf8, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0f, 0x72, 0x00, 0x00,
++ 0x00, 0x70, 0x10, 0x10, 0x50, 0x50, 0x50, 0x50,
++ 0x90, 0x88, 0x88, 0x08, 0x04, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x09, 0x11, 0x02, 0x04, 0x1f, 0x61,
++ 0x1f, 0x09, 0x05, 0x05, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x20, 0x10, 0x10, 0x80, 0x40, 0xf0, 0x0c,
++ 0xf0, 0x20, 0x20, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xc8, 0x48, 0x68,
++ 0x58, 0x4c, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xc8, 0xa8, 0x90, 0x50, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa8, 0xb8, 0xe8, 0xa8, 0xa8,
++ 0xa8, 0xb8, 0xa0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x88, 0x08, 0xe8, 0x08,
++ 0x28, 0xc8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1d, 0x19, 0x0e, 0x70, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x09, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x73, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xb0, 0xa8, 0xa8, 0x24, 0x2c,
++ 0x68, 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0f, 0x72, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0xa8, 0xa0,
++ 0xa0, 0xa0, 0x90, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0xfc, 0x90,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0f, 0x72, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0xc8, 0xc8, 0xa8,
++ 0xb0, 0x90, 0xb0, 0x28, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0xa0, 0xa8, 0xa8, 0xa8,
++ 0x98, 0x90, 0x94, 0xec, 0xac, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x90, 0x90, 0x90,
++ 0xf0, 0x90, 0x90, 0x90, 0xf0, 0x90, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0x88, 0x88, 0x88,
++ 0xf8, 0x88, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x13, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x28, 0xc8, 0x50,
++ 0x30, 0x20, 0x30, 0x48, 0xf4, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x88, 0xe8, 0xa8, 0xa8,
++ 0xe8, 0xa8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x88, 0x40, 0x40, 0x48,
++ 0x70, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x23, 0x5c, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1c, 0x18, 0x0e, 0x71, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x28, 0xf8, 0x20,
++ 0xfc, 0x24, 0x58, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0xf8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x88, 0xe8, 0xa8, 0xa8,
++ 0xe8, 0xb0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x80, 0xf8, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x11, 0x11, 0x22, 0x4a, 0x0f, 0x11, 0x17, 0x31,
++ 0x55, 0x13, 0x13, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x00, 0x3c, 0x80, 0x40, 0xfc, 0x08, 0xc8, 0x08,
++ 0x48, 0x88, 0x08, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xf8, 0xa0, 0x20, 0xfc, 0x70,
++ 0x70, 0xa8, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0xe0, 0x20, 0x50, 0x50, 0x88, 0xfc, 0x20, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x10, 0x1b, 0x2a, 0x26, 0x7a, 0x12, 0x7e,
++ 0x12, 0x57, 0x38, 0x31, 0x1d, 0x62, 0x00, 0x00,
++ 0x40, 0x80, 0x38, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xb8, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x08, 0x7f,
++ 0x09, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xa8, 0xa8, 0xa8, 0x74,
++ 0x24, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x13, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0xfc, 0x70, 0xa8, 0x24, 0xf0,
++ 0x50, 0x5c, 0x94, 0x84, 0x04, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0xa8, 0xa4, 0x24, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0x20, 0x20, 0xfc, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x78, 0x00, 0x00,
++ 0x10, 0x13, 0x18, 0x24, 0x27, 0x7e, 0x12, 0x7f,
++ 0x12, 0x54, 0x38, 0x30, 0x1f, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xa0, 0xb8, 0x08, 0x08, 0xb8,
++ 0xa8, 0xa0, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x19, 0x25, 0x27, 0x7d, 0x11, 0x7d,
++ 0x12, 0x54, 0x38, 0x31, 0x1e, 0x64, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x00, 0xf8, 0x68, 0x68,
++ 0xe8, 0xb8, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x00, 0xf8, 0x88, 0x88, 0xf8,
++ 0x20, 0xb0, 0xa8, 0x24, 0x24, 0x60, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x13, 0x23, 0x5d, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x71, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xe8,
++ 0xa8, 0xa8, 0xe8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0xa8, 0xa8, 0x50, 0x50, 0xa8, 0xa8, 0x00, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x13, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2b, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x50, 0x48, 0x7c, 0xc8, 0x30, 0x74, 0x8c, 0x50,
++ 0x7c, 0xc8, 0x30, 0x64, 0x9c, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x0c, 0xf0, 0xa8, 0xa4, 0x04, 0xf8, 0x28, 0xfc,
++ 0x28, 0xf8, 0x28, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x13, 0x22, 0x5c, 0x09, 0x7f,
++ 0x08, 0x2b, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x68, 0x90, 0xd0, 0x28, 0xf8,
++ 0x48, 0x68, 0x90, 0x90, 0x68, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x71, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x20, 0x20, 0xfc, 0x20,
++ 0x38, 0x28, 0x48, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x09, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x60, 0x60, 0xa4, 0xa8,
++ 0xb0, 0xa0, 0xa0, 0xa4, 0xa4, 0x9c, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5c, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x70, 0x00, 0x00,
++ 0x10, 0xf8, 0x14, 0x14, 0xfc, 0x50, 0x50, 0x70,
++ 0x50, 0x50, 0x74, 0xcc, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x13, 0x23, 0x5d, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x71, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xd8, 0x48, 0x00, 0xf8,
++ 0x28, 0x28, 0xd0, 0x10, 0x28, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x09, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x00,
++ 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x18, 0x14, 0x27, 0x22, 0x7b, 0x12, 0x7f,
++ 0x13, 0x57, 0x3b, 0x32, 0x1c, 0x64, 0x00, 0x00,
++ 0x28, 0x24, 0x24, 0xfc, 0x20, 0xe8, 0x28, 0xe8,
++ 0x50, 0x50, 0xf4, 0x2c, 0x4c, 0x84, 0x00, 0x00,
++ 0x10, 0x10, 0x18, 0x25, 0x27, 0x78, 0x13, 0x7e,
++ 0x13, 0x56, 0x3b, 0x32, 0x1e, 0x62, 0x00, 0x00,
++ 0xc0, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xa8, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x10, 0x10, 0x1b, 0x24, 0x24, 0x78, 0x10, 0x7c,
++ 0x13, 0x55, 0x39, 0x31, 0x1d, 0x61, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf0, 0x90, 0xf0, 0x90,
++ 0xfc, 0x50, 0x54, 0x8c, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x22, 0x7c, 0x08, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x70, 0x00, 0x00,
++ 0xf0, 0x90, 0x08, 0xfc, 0x00, 0xf0, 0x90, 0x08,
++ 0xfc, 0x68, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x71, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x00, 0xf8, 0x88, 0xf8, 0x00,
++ 0xfc, 0x04, 0x74, 0x54, 0x74, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5d, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0e, 0x73, 0x00, 0x00,
++ 0x98, 0xe0, 0x84, 0x7c, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0xfc, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x22, 0x5c, 0x09, 0x7c,
++ 0x08, 0x2b, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x58, 0x48, 0xa8, 0x20, 0x50,
++ 0x88, 0xfc, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x12, 0x11, 0x19, 0x26, 0x25, 0x7d, 0x10, 0x7c,
++ 0x13, 0x55, 0x39, 0x31, 0x1e, 0x64, 0x00, 0x00,
++ 0x70, 0x10, 0x50, 0x48, 0x84, 0x78, 0x20, 0xfc,
++ 0x20, 0x30, 0x48, 0x88, 0x80, 0x7c, 0x00, 0x00,
++ 0x00, 0x1f, 0x1f, 0x12, 0x1f, 0x17, 0x27, 0x59,
++ 0x0e, 0x77, 0x1f, 0x09, 0x3f, 0x00, 0x00, 0x00,
++ 0x80, 0xfc, 0xf8, 0x48, 0xf8, 0x58, 0xe4, 0x3c,
++ 0xe0, 0xdc, 0xf0, 0x20, 0xf8, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x1a, 0x27, 0x26, 0x7b, 0x12, 0x7f,
++ 0x12, 0x55, 0x38, 0x30, 0x1f, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xe8, 0x50, 0xd0, 0xa8, 0xc4,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x3e, 0x2a, 0x3e, 0x7f, 0x09,
++ 0x06, 0x7b, 0x1f, 0x09, 0x3f, 0x00, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0xfc, 0x90, 0x90, 0x10, 0x10,
++ 0xc0, 0xbc, 0xf0, 0x20, 0xf8, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x22, 0x5c, 0x09, 0x7f,
++ 0x0b, 0x2b, 0x1d, 0x19, 0x0f, 0x71, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x80, 0xfc, 0x20, 0x78,
++ 0x48, 0x78, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x10, 0x12, 0x1a, 0x26, 0x27, 0x7a, 0x10, 0x7c,
++ 0x13, 0x56, 0x3a, 0x32, 0x1c, 0x60, 0x00, 0x00,
++ 0xa0, 0xb8, 0xa8, 0xe8, 0xd0, 0xb0, 0xa8, 0xc8,
++ 0xfc, 0xc8, 0xa8, 0xa8, 0x88, 0x98, 0x00, 0x00,
++ 0x11, 0x11, 0x19, 0x25, 0x27, 0x79, 0x11, 0x7d,
++ 0x11, 0x55, 0x3a, 0x32, 0x1c, 0x61, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x7c, 0xe0, 0x20, 0xbc, 0xd0,
++ 0xfc, 0x90, 0xa8, 0xa8, 0xc4, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1c, 0x18, 0x0e, 0x73, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc, 0x54,
++ 0xfc, 0xf8, 0x88, 0x50, 0x70, 0x8c, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x13, 0x22, 0x5d, 0x08, 0x7e,
++ 0x09, 0x2a, 0x1c, 0x18, 0x0e, 0x71, 0x00, 0x00,
++ 0x00, 0xf8, 0xd8, 0x68, 0xd8, 0x68, 0x40, 0xa0,
++ 0x30, 0xcc, 0x20, 0xc8, 0x30, 0xc0, 0x00, 0x00,
++ 0x12, 0x11, 0x19, 0x24, 0x26, 0x79, 0x11, 0x7c,
++ 0x13, 0x55, 0x39, 0x31, 0x1e, 0x64, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xfc, 0x20, 0xa0, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x13, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2b, 0x1c, 0x18, 0x0e, 0x71, 0x00, 0x00,
++ 0x20, 0xf8, 0xa8, 0xfc, 0xa8, 0xf8, 0xf8, 0xa8,
++ 0xf8, 0xfc, 0x50, 0xd0, 0x30, 0xc8, 0x00, 0x00,
++ 0x10, 0x13, 0x18, 0x27, 0x26, 0x7f, 0x12, 0x7c,
++ 0x13, 0x54, 0x3a, 0x32, 0x1c, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xb8, 0x08, 0xb8, 0xa8, 0xa0,
++ 0xfc, 0x40, 0xa8, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x10, 0x17, 0x18, 0x27, 0x26, 0x7b, 0x11, 0x7d,
++ 0x11, 0x55, 0x39, 0x33, 0x1c, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x11, 0x11, 0x1f, 0x27, 0x26, 0x7a, 0x13, 0x7f,
++ 0x10, 0x55, 0x3b, 0x31, 0x1d, 0x63, 0x00, 0x00,
++ 0x20, 0x20, 0xe0, 0xa0, 0xbc, 0xe8, 0xe8, 0xa8,
++ 0x90, 0xd0, 0x30, 0x28, 0x48, 0x84, 0x00, 0x00,
++ 0x10, 0x11, 0x18, 0x27, 0x25, 0x7b, 0x11, 0x7d,
++ 0x13, 0x57, 0x38, 0x30, 0x1d, 0x62, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xb8, 0x10, 0xbc,
++ 0x00, 0xfc, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x18, 0xe8, 0xa8, 0x70, 0xfc, 0x70, 0xa8, 0x24,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x54, 0x88, 0xfc, 0x88, 0xf8,
++ 0x88, 0xf8, 0xa8, 0xa4, 0x24, 0x60, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x13, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0e, 0x71, 0x00, 0x00,
++ 0x00, 0xfc, 0x54, 0xfc, 0x00, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x64, 0xd8, 0x68, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x23, 0x5d, 0x09, 0x7f,
++ 0x08, 0x2b, 0x1d, 0x19, 0x0f, 0x71, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x20, 0xf8, 0xf8, 0x20, 0xfc,
++ 0x00, 0xdc, 0x54, 0x74, 0x04, 0x0c, 0x00, 0x00,
++ 0x11, 0x13, 0x19, 0x27, 0x24, 0x7b, 0x12, 0x7f,
++ 0x13, 0x55, 0x3b, 0x31, 0x1f, 0x60, 0x00, 0x00,
++ 0x30, 0xe8, 0x28, 0xfc, 0x20, 0xa8, 0xa8, 0xa8,
++ 0xd8, 0x10, 0x94, 0xec, 0x4c, 0x84, 0x00, 0x00,
++ 0x10, 0x10, 0x1b, 0x24, 0x27, 0x78, 0x13, 0x7e,
++ 0x13, 0x56, 0x39, 0x31, 0x1e, 0x60, 0x00, 0x00,
++ 0xa0, 0xb0, 0xe8, 0xa8, 0xfc, 0x20, 0xe8, 0x68,
++ 0xd8, 0x50, 0x94, 0xec, 0x2c, 0x44, 0x00, 0x00,
++ 0x09, 0x08, 0x15, 0x13, 0x22, 0x5c, 0x08, 0x7e,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x71, 0x00, 0x00,
++ 0x24, 0xa8, 0xfc, 0x08, 0xf8, 0x88, 0xf8, 0x00,
++ 0xfc, 0x24, 0xfc, 0x24, 0xfc, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x13, 0x23, 0x5d, 0x09, 0x7e,
++ 0x09, 0x2a, 0x1c, 0x19, 0x0c, 0x71, 0x00, 0x00,
++ 0x50, 0x3c, 0xd4, 0xb4, 0x6c, 0x94, 0xfc, 0x54,
++ 0xcc, 0x70, 0xd0, 0x20, 0x50, 0x8c, 0x00, 0x00,
++ 0x00, 0x3e, 0x29, 0x3e, 0x25, 0x3d, 0x29, 0x3f,
++ 0x06, 0x7b, 0x1f, 0x09, 0x3f, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf8, 0x68, 0xf8, 0x00,
++ 0xc0, 0xbc, 0xf0, 0x20, 0xf8, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x18, 0x25, 0x27, 0x79, 0x10, 0x7d,
++ 0x13, 0x54, 0x3b, 0x32, 0x1f, 0x60, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0xfc, 0xe8, 0x40, 0xf0,
++ 0xfc, 0x08, 0xfc, 0xc8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x1a, 0x27, 0x26, 0x7a, 0x13, 0x7e,
++ 0x12, 0x56, 0x3a, 0x32, 0x1c, 0x67, 0x00, 0x00,
++ 0x20, 0xfc, 0x50, 0xfc, 0x50, 0x70, 0xfc, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x12, 0x12, 0x15, 0x2d, 0x26, 0x7a, 0x15, 0x7f,
++ 0x10, 0x57, 0x38, 0x31, 0x1e, 0x60, 0x00, 0x00,
++ 0x48, 0x88, 0xf4, 0xb4, 0xe8, 0xa8, 0xf4, 0x5c,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x1b, 0x26, 0x27, 0x7a, 0x12, 0x7e,
++ 0x12, 0x56, 0x3a, 0x32, 0x1c, 0x65, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0x68, 0xb8, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0x28, 0xd4, 0xcc, 0x38, 0x00, 0x00,
++ 0x11, 0x11, 0x1a, 0x25, 0x27, 0x7a, 0x13, 0x7f,
++ 0x13, 0x56, 0x3b, 0x32, 0x1f, 0x64, 0x00, 0x00,
++ 0x50, 0x50, 0xa0, 0x50, 0xf8, 0xe8, 0x98, 0xf8,
++ 0x68, 0xd8, 0x68, 0xdc, 0x64, 0x84, 0x00, 0x00,
++ 0x10, 0x10, 0x1b, 0x26, 0x27, 0x7a, 0x12, 0x7e,
++ 0x12, 0x56, 0x3b, 0x35, 0x1d, 0x67, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0x68, 0xb8, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0xf8, 0x68, 0x68, 0xfc, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0f, 0x72, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8,
++ 0x88, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x19, 0x27, 0x24, 0x7f, 0x15, 0x7f,
++ 0x13, 0x56, 0x3b, 0x32, 0x1e, 0x62, 0x00, 0x00,
++ 0x40, 0xa0, 0x10, 0xfc, 0x00, 0xfc, 0xb4, 0xfc,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0xa8, 0xb8, 0x00, 0x00,
++ 0x10, 0x17, 0x18, 0x27, 0x26, 0x7b, 0x10, 0x7d,
++ 0x13, 0x55, 0x39, 0x31, 0x1d, 0x61, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xb8, 0xa8, 0xb8, 0x90, 0xfc,
++ 0x20, 0xf8, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x18, 0x24, 0x24, 0x7b, 0x10, 0x7f,
++ 0x12, 0x57, 0x3b, 0x32, 0x1f, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x90, 0xf0, 0xf0, 0xf0, 0x10, 0xfc,
++ 0xa8, 0xb8, 0xb8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x11, 0x11, 0x1a, 0x27, 0x25, 0x7a, 0x11, 0x7d,
++ 0x11, 0x55, 0x39, 0x31, 0x1d, 0x66, 0x00, 0x00,
++ 0x98, 0xfc, 0xa8, 0xfc, 0xd8, 0xac, 0xfc, 0x08,
++ 0xf8, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x13, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x73, 0x00, 0x00,
++ 0x90, 0xf8, 0x90, 0xfc, 0xd0, 0x28, 0xfc, 0x88,
++ 0xf8, 0xf8, 0x88, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x1a, 0x27, 0x25, 0x79, 0x16, 0x7d,
++ 0x12, 0x57, 0x39, 0x33, 0x1d, 0x61, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x28, 0x50, 0xfc, 0x50,
++ 0xf8, 0xd0, 0x78, 0xd0, 0x7c, 0x40, 0x00, 0x00,
++ 0x13, 0x17, 0x6b, 0x17, 0x7f, 0x3a, 0x57, 0x11,
++ 0x06, 0x7b, 0x1f, 0x09, 0x3f, 0x00, 0x00, 0x00,
++ 0x90, 0xd4, 0xe8, 0x98, 0xfc, 0xb8, 0xd4, 0x10,
++ 0xc0, 0xbc, 0xf0, 0x20, 0xf8, 0x00, 0x00, 0x00,
++ 0x13, 0x12, 0x1b, 0x27, 0x27, 0x79, 0x13, 0x7d,
++ 0x11, 0x55, 0x3b, 0x30, 0x1c, 0x63, 0x00, 0x00,
++ 0xb8, 0xa8, 0xb8, 0xb8, 0xb8, 0xfc, 0xf8, 0xf8,
++ 0x20, 0xfc, 0xf8, 0x90, 0x60, 0x9c, 0x00, 0x00,
++ 0x2d, 0x7f, 0x12, 0x3f, 0x7f, 0x2b, 0x3b, 0x3f,
++ 0x06, 0x7b, 0x1f, 0x09, 0x3f, 0x00, 0x00, 0x00,
++ 0x70, 0xd0, 0x54, 0x8c, 0xf8, 0x50, 0xf0, 0x0c,
++ 0xc0, 0xbc, 0xf0, 0x20, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x20,
++ 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x08,
++ 0xe8, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x2f,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xe8,
++ 0x08, 0x88, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x29,
++ 0x29, 0x29, 0x29, 0x2f, 0x28, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x28,
++ 0x28, 0x28, 0x28, 0xe8, 0x28, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x21,
++ 0x2f, 0x22, 0x21, 0x22, 0x2c, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x08,
++ 0xe8, 0x88, 0x08, 0x88, 0x68, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x21,
++ 0x2f, 0x23, 0x25, 0x29, 0x23, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x28,
++ 0xc8, 0x88, 0x48, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x27,
++ 0x25, 0x27, 0x25, 0x27, 0x21, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xc8,
++ 0x48, 0xc8, 0x48, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x3f,
++ 0x21, 0x2f, 0x29, 0x29, 0x29, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xf8,
++ 0x08, 0xe8, 0x28, 0x28, 0xc8, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x2f,
++ 0x21, 0x27, 0x21, 0x21, 0x2f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xe8,
++ 0x08, 0xc8, 0x88, 0x48, 0xe8, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x27,
++ 0x21, 0x2f, 0x27, 0x21, 0x2f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xc8,
++ 0x08, 0xe8, 0xc8, 0x08, 0xe8, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x22,
++ 0x2f, 0x22, 0x2f, 0x22, 0x2c, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x88,
++ 0xe8, 0x88, 0xe8, 0x88, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x27, 0x24,
++ 0x27, 0x22, 0x27, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xc8, 0x48,
++ 0xc8, 0x08, 0xc8, 0x48, 0xc8, 0x58, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x24, 0x3f,
++ 0x24, 0x27, 0x25, 0x29, 0x36, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x48, 0x48,
++ 0xa8, 0xd8, 0x28, 0xc8, 0x28, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x23, 0x24,
++ 0x29, 0x26, 0x26, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xc8, 0x48,
++ 0x88, 0xc8, 0xc8, 0x48, 0xc8, 0x58, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x3f,
++ 0x27, 0x2d, 0x37, 0x27, 0x25, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xf8,
++ 0xc8, 0x68, 0xd8, 0xc8, 0x28, 0xf8, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x3f,
++ 0x2e, 0x2a, 0x2e, 0x26, 0x39, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xc8, 0x68, 0xe8, 0x28, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x28, 0x25,
++ 0x33, 0x28, 0x25, 0x25, 0x29, 0x29, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x68, 0x88,
++ 0xf8, 0x88, 0xe8, 0x28, 0xe8, 0x38, 0x00, 0x00,
++ 0x20, 0x1f, 0x19, 0x4f, 0x29, 0x2f, 0x08, 0x1b,
++ 0x1f, 0x28, 0x2b, 0x4a, 0x4b, 0x4a, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x78, 0x48, 0x78, 0x68, 0x88,
++ 0xf8, 0x88, 0xe8, 0x28, 0xe8, 0x38, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x3e, 0x27, 0x24, 0x27,
++ 0x27, 0x27, 0x21, 0x2f, 0x22, 0x2c, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0xc8, 0x48, 0xc8,
++ 0xc8, 0xc8, 0x48, 0xe8, 0x88, 0x78, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x3e, 0x21, 0x27, 0x2f,
++ 0x21, 0x27, 0x3b, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0x28, 0xc8, 0xe8,
++ 0x48, 0xe8, 0xc8, 0x48, 0xc8, 0x58, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x3e, 0x21, 0x2f, 0x27,
++ 0x25, 0x27, 0x27, 0x23, 0x2d, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0x08, 0xe8, 0xc8,
++ 0x48, 0xc8, 0xc8, 0x88, 0x68, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x29, 0x26,
++ 0x3f, 0x25, 0x2d, 0x2f, 0x24, 0x29, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x68, 0x48, 0x48, 0xa8, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x3e, 0x21, 0x27, 0x2f,
++ 0x22, 0x2f, 0x27, 0x27, 0x2f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0x08, 0xc8, 0xe8,
++ 0x48, 0xe8, 0xc8, 0x48, 0xe8, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x3e, 0x27, 0x25, 0x27,
++ 0x27, 0x25, 0x27, 0x2e, 0x2d, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0xe8, 0x08, 0xc8,
++ 0xc8, 0x08, 0xe8, 0xa8, 0x68, 0xd8, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x24, 0x3b,
++ 0x26, 0x3f, 0x2a, 0x2e, 0x24, 0x28, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x48, 0xa8,
++ 0x68, 0xf8, 0xa8, 0xe8, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x3e, 0x2e, 0x2a, 0x2e,
++ 0x27, 0x25, 0x27, 0x27, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0xe8, 0xa8, 0xe8,
++ 0xc8, 0x48, 0xc8, 0xc8, 0xf8, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x3e, 0x28, 0x25, 0x2b,
++ 0x25, 0x23, 0x2d, 0x27, 0x24, 0x2b, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0x88, 0xc8, 0xe8,
++ 0x48, 0xe8, 0xc8, 0xe8, 0x88, 0xf8, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x2e, 0x2b,
++ 0x2e, 0x29, 0x2e, 0x3b, 0x2e, 0x28, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x48, 0xf8,
++ 0xa8, 0xf8, 0x48, 0xf8, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x28, 0x30, 0x28, 0x27, 0x24,
++ 0x24, 0x24, 0x38, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x29, 0x31, 0x29, 0x25, 0x25,
++ 0x25, 0x25, 0x3a, 0x22, 0x24, 0x28, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x78, 0x48, 0x48, 0x48,
++ 0x48, 0x70, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x3d, 0x24, 0x28, 0x30, 0x2b, 0x24, 0x24,
++ 0x24, 0x24, 0x39, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0xa0, 0xa0,
++ 0xa0, 0xa0, 0x24, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x29, 0x31, 0x29, 0x25, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x78, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x29, 0x31, 0x29, 0x25, 0x25,
++ 0x25, 0x25, 0x3a, 0x22, 0x24, 0x2b, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x28, 0x20, 0xf8, 0x88,
++ 0x50, 0x50, 0x20, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x28, 0x30, 0x29, 0x25, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x80, 0xf8, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x2b, 0x30, 0x28, 0x25, 0x26,
++ 0x24, 0x24, 0x38, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x80, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x39, 0x28, 0x2a, 0x32, 0x32, 0x2a, 0x2a,
++ 0x2a, 0x2a, 0x3a, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xd8,
++ 0x98, 0x88, 0x98, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x29, 0x31, 0x2a, 0x24, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x80, 0xf8, 0x88, 0x08, 0x08, 0x30, 0x40, 0xb8,
++ 0x08, 0xb8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x2b, 0x31, 0x29, 0x25, 0x26,
++ 0x24, 0x24, 0x38, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x50, 0x50, 0x50, 0xe8,
++ 0x48, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3d, 0x24, 0x28, 0x33, 0x28, 0x25, 0x26,
++ 0x24, 0x27, 0x38, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x30, 0xd0, 0x90, 0x90, 0xfc, 0x90, 0x10, 0x50,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x2b, 0x30, 0x2b, 0x25, 0x25,
++ 0x26, 0x24, 0x38, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x58, 0x48, 0x48,
++ 0xd4, 0xa4, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x28, 0x30, 0x2b, 0x24, 0x24,
++ 0x24, 0x25, 0x3a, 0x20, 0x20, 0x23, 0x00, 0x00,
++ 0x20, 0x20, 0xb8, 0xa0, 0xa0, 0xfc, 0x20, 0xa4,
++ 0xa4, 0x28, 0x70, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x28, 0x31, 0x28, 0x27, 0x24,
++ 0x27, 0x39, 0x22, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x90,
++ 0xfc, 0x90, 0x50, 0x50, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3d, 0x24, 0x2b, 0x31, 0x29, 0x27, 0x25,
++ 0x25, 0x27, 0x38, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xf8, 0x50, 0x50, 0xfc, 0x50,
++ 0x50, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x2a, 0x2a, 0x33, 0x32, 0x2a, 0x2b,
++ 0x2a, 0x2a, 0x3b, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xb0, 0x90, 0xb0, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x29, 0x31, 0x29, 0x25, 0x24,
++ 0x27, 0x24, 0x39, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00,
++ 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x2a, 0x30, 0x28, 0x24, 0x25,
++ 0x27, 0x25, 0x39, 0x21, 0x23, 0x20, 0x00, 0x00,
++ 0xf0, 0x90, 0x08, 0xf4, 0x00, 0xf0, 0x90, 0x08,
++ 0xfc, 0x68, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x29, 0x30, 0x29, 0x25, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x21, 0x26, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x29, 0x31, 0x29, 0x25, 0x25,
++ 0x24, 0x24, 0x38, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8,
++ 0xd0, 0xd0, 0xe8, 0x7c, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x38, 0x28, 0x29, 0x33, 0x34, 0x2b, 0x2a,
++ 0x2a, 0x2b, 0x39, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xb8, 0xa8,
++ 0xa8, 0xb8, 0x10, 0x98, 0x64, 0x44, 0x00, 0x00,
++ 0x04, 0x3a, 0x2a, 0x29, 0x34, 0x32, 0x2b, 0x28,
++ 0x2f, 0x2a, 0x3b, 0x22, 0x25, 0x28, 0x00, 0x00,
++ 0x70, 0x50, 0x88, 0xfc, 0x20, 0x64, 0xb4, 0x58,
++ 0xb8, 0x54, 0x94, 0x10, 0x60, 0xfc, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x2b, 0x30, 0x29, 0x25, 0x24,
++ 0x27, 0x25, 0x38, 0x22, 0x22, 0x24, 0x00, 0x00,
++ 0x18, 0xe8, 0x24, 0xf4, 0x40, 0xf0, 0xf8, 0x08,
++ 0xfc, 0xf8, 0x48, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x2a, 0x31, 0x29, 0x25, 0x25,
++ 0x25, 0x25, 0x39, 0x23, 0x22, 0x24, 0x00, 0x00,
++ 0x20, 0xa8, 0x6c, 0x34, 0xc0, 0xfc, 0x20, 0xf8,
++ 0xf8, 0x20, 0xfc, 0x54, 0xac, 0x18, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x29, 0x31, 0x29, 0x24, 0x27,
++ 0x24, 0x25, 0x3b, 0x20, 0x22, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x88, 0x74,
++ 0x88, 0x54, 0xfc, 0x00, 0xa8, 0x54, 0x00, 0x00,
++ 0x01, 0x39, 0x2f, 0x2a, 0x37, 0x30, 0x2b, 0x2a,
++ 0x2b, 0x3a, 0x23, 0x22, 0x22, 0x22, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0xa0, 0xf8, 0x08, 0xb8, 0xa0,
++ 0xb8, 0xb8, 0xa0, 0xb8, 0xa4, 0x9c, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x7f, 0x01, 0x1f, 0x11,
++ 0x09, 0x0b, 0x0d, 0x71, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0xfc, 0x10, 0xf0, 0x10,
++ 0x90, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x1c, 0x1b, 0x2a, 0x48, 0x3e,
++ 0x00, 0x7e, 0x2c, 0x2b, 0x4a, 0x18, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x28, 0xfc, 0x28, 0xf8, 0x28,
++ 0xa4, 0x78, 0x70, 0xa8, 0x24, 0x60, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x0f, 0x08, 0x18, 0x2f, 0x48,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x40,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x25, 0x26, 0x3c,
++ 0x24, 0x24, 0x26, 0x38, 0x60, 0x00, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x04, 0x04, 0x0f, 0x08, 0x1f, 0x28, 0x4f, 0x08,
++ 0x0f, 0x1e, 0x12, 0x13, 0x12, 0x10, 0x00, 0x00,
++ 0x20, 0x40, 0xfc, 0x40, 0xf0, 0x40, 0xf0, 0x40,
++ 0xfc, 0x78, 0x48, 0xc8, 0x48, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x1e, 0x28, 0x49, 0x7f, 0x08,
++ 0x08, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x10, 0x14, 0x65, 0x29, 0x1b,
++ 0x15, 0x1d, 0x65, 0x09, 0x11, 0x21, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x90, 0x90, 0xfc, 0x20, 0xf8,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7f, 0x09, 0x0b, 0x15, 0x39,
++ 0x54, 0x17, 0x10, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x90, 0xa0, 0xfc, 0x20, 0xf8, 0xf8, 0x20, 0xfc,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x12, 0x12, 0x2d, 0x49, 0x08,
++ 0x7f, 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x3d, 0x5d, 0x05, 0x0f,
++ 0x18, 0x6f, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x78, 0x70, 0x40, 0xf8,
++ 0x80, 0xf0, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x25, 0x25, 0x3f, 0x25, 0x3f, 0x25,
++ 0x2f, 0x2b, 0x2f, 0x2b, 0x21, 0x43, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0x7c, 0xd0, 0xd0, 0x78, 0x50,
++ 0x50, 0x78, 0x50, 0x50, 0x7c, 0x40, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x02, 0x07,
++ 0x18, 0x6f, 0x08, 0x0f, 0x08, 0x07, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x00, 0xf0,
++ 0x10, 0x90, 0x90, 0xe4, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x05, 0x19,
++ 0x6f, 0x08, 0x0f, 0x0f, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x60, 0x18,
++ 0xe4, 0x20, 0xe0, 0xe0, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x00, 0x3d,
++ 0x08, 0x3f, 0x12, 0x0c, 0x1e, 0x61, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x18, 0xe0,
++ 0x20, 0xfc, 0x20, 0xf8, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x10,
++ 0x4f, 0x20, 0x0b, 0x12, 0x22, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x08, 0x70, 0x70, 0x40,
++ 0xfc, 0x40, 0xf8, 0x48, 0x70, 0x40, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x03, 0x1c,
++ 0x1e, 0x10, 0x1f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x00, 0xf0,
++ 0xf0, 0x10, 0xf0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x01, 0x3f,
++ 0x04, 0x7f, 0x3f, 0x0e, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x00, 0xf8,
++ 0x40, 0xfc, 0xf8, 0x40, 0xc0, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x10,
++ 0x48, 0x20, 0x0b, 0x12, 0x23, 0x22, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x08, 0x70, 0x70, 0x40,
++ 0x7c, 0x40, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x02,
++ 0x3e, 0x02, 0x3e, 0x02, 0x7c, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x08, 0x70, 0x70, 0x80,
++ 0xf8, 0x80, 0xf8, 0x80, 0xfc, 0x80, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x08,
++ 0x7f, 0x1c, 0x1a, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x08, 0x70, 0x70, 0x20,
++ 0xfc, 0x70, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x04, 0x7f,
++ 0x05, 0x0f, 0x09, 0x7f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x40, 0xfc,
++ 0x40, 0xe0, 0x20, 0xfc, 0xc0, 0x38, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x1e, 0x12,
++ 0x3d, 0x0f, 0x0f, 0x09, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0xf8, 0x48,
++ 0x98, 0xe0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x10, 0x0b,
++ 0x46, 0x21, 0x0f, 0x10, 0x23, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x18, 0xf0,
++ 0x4c, 0xf0, 0xfc, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x3f, 0x14,
++ 0x7f, 0x1f, 0x1e, 0x1e, 0x12, 0x17, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x40, 0x7c,
++ 0x90, 0x50, 0x20, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x1e, 0x12,
++ 0x1e, 0x11, 0x3e, 0x53, 0x1e, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x20, 0xf8,
++ 0x50, 0xfc, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x01, 0x7f,
++ 0x3e, 0x15, 0x6d, 0x07, 0x0f, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x00, 0xfc,
++ 0xf8, 0x50, 0x7c, 0xe0, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x0d, 0x79,
++ 0x2f, 0x79, 0x35, 0x1c, 0x67, 0x18, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0xf0, 0x50,
++ 0xf0, 0xf0, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x1c, 0x7f,
++ 0x1c, 0x1c, 0x3e, 0x23, 0x3e, 0x22, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0xf8, 0x88,
++ 0xf8, 0xf8, 0x7c, 0xd4, 0xfc, 0x98, 0x00, 0x00,
++ 0x00, 0x3f, 0x08, 0x3e, 0x2a, 0x7f, 0x3e, 0x08,
++ 0x3c, 0x01, 0x7e, 0x14, 0x3e, 0x43, 0x00, 0x00,
++ 0x10, 0x10, 0xf8, 0x98, 0x7c, 0x18, 0xf8, 0xd4,
++ 0x38, 0xb8, 0xd4, 0x94, 0xf0, 0x3c, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x3b, 0x2a,
++ 0x3b, 0x3f, 0x09, 0x35, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0xb8, 0xa8,
++ 0xb8, 0xf8, 0x30, 0x48, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x3f, 0x2e,
++ 0x3f, 0x2e, 0x35, 0x24, 0x24, 0x5f, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0xfc, 0x70,
++ 0xfc, 0x70, 0xa8, 0xf0, 0x80, 0xfc, 0x00, 0x00,
++ 0x00, 0x3e, 0x08, 0x3e, 0x2b, 0x7f, 0x3e, 0x08,
++ 0x3d, 0x00, 0x7e, 0x15, 0x1e, 0x63, 0x00, 0x00,
++ 0x0c, 0xf4, 0xa8, 0x50, 0xfc, 0x28, 0xd8, 0xf4,
++ 0x44, 0x78, 0xc8, 0x30, 0x70, 0x8c, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x08, 0x7f, 0x3f,
++ 0x2a, 0x2a, 0x3e, 0x22, 0x22, 0x26, 0x00, 0x00,
++ 0x18, 0xf0, 0xa8, 0xa4, 0x04, 0xf8, 0x28, 0xfc,
++ 0x28, 0xf8, 0x28, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x09, 0x0f, 0x11, 0x7f, 0x0f, 0x08, 0x0f, 0x7e,
++ 0x02, 0x3e, 0x03, 0x7c, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0xe0, 0x20, 0xe0, 0xfc,
++ 0x80, 0xf8, 0x80, 0xfc, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x10, 0x3f, 0x2b, 0x2b, 0x2f,
++ 0x2b, 0x2f, 0x2b, 0x2b, 0x3f, 0x21, 0x00, 0x00,
++ 0x40, 0xc0, 0x40, 0x78, 0x88, 0xf8, 0x58, 0x58,
++ 0x78, 0x50, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x08, 0x3f, 0x2a, 0x2a, 0x2e,
++ 0x2a, 0x2e, 0x2a, 0x2a, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0xc8, 0xf8, 0xc8,
++ 0xf8, 0xb0, 0xb0, 0xd4, 0xd4, 0x8c, 0x00, 0x00,
++ 0x00, 0x1f, 0x17, 0x17, 0x1f, 0x2f, 0x4f, 0x09,
++ 0x7f, 0x1f, 0x13, 0x13, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x18, 0x14, 0xfc, 0x90, 0xa8, 0xc4,
++ 0xfc, 0xf0, 0x90, 0x90, 0xf0, 0x10, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1d, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x14, 0x15, 0x7e, 0x14, 0x1c, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0xc8, 0xa8, 0xa8, 0x48, 0x50, 0x50,
++ 0x20, 0x20, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x14, 0x15, 0x7e, 0x14, 0x1d, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xc8, 0x48, 0x68,
++ 0x58, 0x4c, 0xc8, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x15, 0x1d, 0x09, 0x3f, 0x2b,
++ 0x3f, 0x09, 0x7f, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x68, 0x98,
++ 0x98, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1c, 0x08, 0x3e, 0x2b,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xfc,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1c, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0x88, 0xf8, 0x88, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1c, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x09, 0x0a, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0xa8, 0xb0, 0xa0, 0xf8, 0xc8,
++ 0xc8, 0xb0, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x15, 0x1c, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x70,
++ 0x70, 0xa8, 0x24, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x14, 0x15, 0x7e, 0x14, 0x1d, 0x09, 0x3f, 0x2b,
++ 0x3f, 0x09, 0x7f, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x68,
++ 0x98, 0x98, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1c, 0x09, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x09, 0x09, 0x0f, 0x72, 0x04, 0x7f,
++ 0x07, 0x0f, 0x09, 0x0f, 0x7f, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x54, 0x54, 0x0c, 0x40, 0xfc,
++ 0xc0, 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1c, 0x09, 0x3e, 0x2b,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x40, 0x40, 0xfc, 0x00, 0xfc,
++ 0x60, 0x50, 0x50, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1c, 0x09, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x24, 0xf8, 0x70, 0xa8, 0x24, 0x60, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x14, 0x14, 0x7e, 0x14, 0x1c, 0x08, 0x3e, 0x2a,
++ 0x3f, 0x08, 0x7e, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x40, 0xfc,
++ 0xa4, 0xb4, 0xcc, 0xfc, 0x84, 0x18, 0x00, 0x00,
++ 0x28, 0x28, 0x7f, 0x28, 0x38, 0x13, 0x7c, 0x55,
++ 0x7d, 0x12, 0x7e, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x50, 0x90, 0x90, 0x94, 0xb4, 0xf4, 0xb8, 0xd0,
++ 0xd0, 0xe8, 0xa8, 0xa8, 0xc4, 0x84, 0x00, 0x00,
++ 0x14, 0x15, 0x7e, 0x14, 0x1d, 0x08, 0x3e, 0x2b,
++ 0x3e, 0x09, 0x7f, 0x08, 0x09, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x20, 0xfc, 0x68, 0xb0, 0x60,
++ 0x20, 0xfc, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1c, 0x08, 0x3e, 0x2b,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x20, 0x50, 0x88, 0xfc,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x28, 0x28, 0x7f, 0x28, 0x39, 0x11, 0x7d, 0x55,
++ 0x7d, 0x11, 0x7e, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xfc, 0x00, 0xf8, 0xa8,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0xa8, 0x98, 0x00, 0x00,
++ 0x2a, 0x29, 0x7d, 0x28, 0x3a, 0x11, 0x7d, 0x54,
++ 0x7f, 0x11, 0x7d, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0xfc, 0x50, 0xfc, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0xa0, 0x7c, 0x00, 0x00,
++ 0x2a, 0x29, 0x7d, 0x28, 0x3a, 0x11, 0x7d, 0x54,
++ 0x7f, 0x11, 0x7d, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xfc, 0x30, 0xfc, 0xb4, 0xfc, 0x20, 0xfc,
++ 0x78, 0xd4, 0x70, 0x48, 0xb8, 0x7c, 0x00, 0x00,
++ 0x28, 0x2f, 0x7c, 0x2b, 0x3a, 0x13, 0x7c, 0x57,
++ 0x7e, 0x13, 0x7e, 0x12, 0x14, 0x14, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0x48, 0xfc,
++ 0x48, 0x28, 0xb0, 0x94, 0x2c, 0x44, 0x00, 0x00,
++ 0x01, 0x1f, 0x02, 0x7f, 0x00, 0x0f, 0x08, 0x0f,
++ 0x00, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xfc, 0x00, 0xe0, 0x20, 0xe0,
++ 0x40, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x3e, 0x12, 0x7f, 0x01, 0x3e, 0x22, 0x3e,
++ 0x04, 0x3e, 0x24, 0x7f, 0x04, 0x04, 0x00, 0x00,
++ 0x18, 0xf0, 0xa8, 0xa4, 0x04, 0x20, 0xd8, 0x88,
++ 0x88, 0xd8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x3e, 0x02, 0x02, 0x3e, 0x02,
++ 0x02, 0x3e, 0x02, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x78, 0x40, 0x40, 0x78, 0x40,
++ 0x40, 0x78, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x3e, 0x15, 0x2d, 0x51, 0x1f, 0x1f,
++ 0x12, 0x16, 0x16, 0x16, 0x2f, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x50, 0x68, 0x14, 0xf0, 0xf0,
++ 0x90, 0xd0, 0xd0, 0xd0, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x7f, 0x02, 0x3d, 0x15, 0x2d, 0x42, 0x3e,
++ 0x02, 0x1e, 0x1e, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x70, 0x50, 0xe8, 0x84, 0xf8,
++ 0x80, 0xf0, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x04, 0x7f, 0x00, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x40, 0xfc, 0x00, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x09, 0x7e, 0x24, 0x14, 0x18, 0x7f, 0x00,
++ 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x88, 0x30, 0x00,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x24, 0x15, 0x19, 0x7e, 0x00,
++ 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0x08, 0xe8, 0x08,
++ 0x28, 0xc8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7f, 0x00, 0x1c, 0x14, 0x14,
++ 0x14, 0x15, 0x15, 0x23, 0x20, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x1d, 0x04, 0x14, 0x12, 0x22, 0x49, 0x08,
++ 0x08, 0x14, 0x16, 0x7a, 0x00, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x2a, 0x2a, 0x54, 0x2a, 0x2a, 0x00,
++ 0x7e, 0x08, 0x08, 0x0e, 0x70, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x2e, 0x2a, 0x2a, 0x2a,
++ 0x2e, 0x24, 0x24, 0x24, 0x3e, 0x23, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7f, 0x08, 0x08, 0x3e, 0x00,
++ 0x3e, 0x22, 0x22, 0x22, 0x3e, 0x23, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x3e, 0x40, 0x3e, 0x04,
++ 0x08, 0x3e, 0x22, 0x22, 0x3e, 0x23, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x02, 0x3d, 0x08, 0x7f, 0x1c, 0x2a, 0x4a, 0x1c,
++ 0x14, 0x14, 0x15, 0x16, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x2a, 0x3e, 0x2a, 0x3e, 0x08, 0x7f,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x0b, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x14, 0x0c, 0x12, 0x3f, 0x24,
++ 0x3a, 0x24, 0x39, 0x22, 0x4c, 0x33, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x2a, 0x2a, 0x3e, 0x2a, 0x3e, 0x08,
++ 0x06, 0x35, 0x31, 0x54, 0x54, 0x0f, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x7f, 0x3f, 0x2f, 0x2b, 0x2f, 0x3f, 0x1e,
++ 0x12, 0x1e, 0x12, 0x1e, 0x0e, 0x71, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x20, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x3f, 0x21, 0x3f, 0x12, 0x6d,
++ 0x2d, 0x1b, 0x7f, 0x35, 0x2a, 0x4a, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x20, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0xf8, 0x30, 0xc8, 0x84, 0x00, 0x00,
++ 0x08, 0x2f, 0x28, 0x7f, 0x2a, 0x5c, 0x1a, 0x6f,
++ 0x09, 0x0f, 0x0f, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x88, 0xf8, 0xf8, 0xf8, 0xec,
++ 0x20, 0xe0, 0xe0, 0x40, 0xfc, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x07, 0x3f, 0x2d, 0x37, 0x3f, 0x35, 0x3f,
++ 0x3f, 0x20, 0x3f, 0x57, 0x17, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x90, 0x20, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x30, 0xc8, 0x84, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x77, 0x55, 0x77, 0x14, 0x3f,
++ 0x64, 0x3e, 0x3e, 0x24, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x20, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x09, 0x0f, 0x0f, 0x3f, 0x01, 0x7f,
++ 0x2a, 0x3b, 0x3b, 0x2a, 0x7f, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x20, 0x78, 0x48, 0x78, 0xc8,
++ 0xf8, 0xc8, 0xf8, 0xb0, 0xa8, 0xc4, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x01, 0x1f, 0x10, 0x1f,
++ 0x17, 0x15, 0x17, 0x11, 0x2f, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0xc0, 0x20, 0x00, 0xf0, 0xd0, 0x10,
++ 0xd0, 0x50, 0xd4, 0x6c, 0x9c, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x13, 0x7e, 0x0b, 0x4b, 0x2b,
++ 0x2b, 0x32, 0x1c, 0x64, 0x0b, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x30, 0xd0, 0x90, 0xf0, 0xb0, 0xb0,
++ 0xf0, 0xd0, 0xb4, 0xec, 0x1c, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1e, 0x14, 0x1f, 0x1d, 0x1d,
++ 0x1f, 0x16, 0x15, 0x27, 0x38, 0x40, 0x00, 0x00,
++ 0x20, 0xa0, 0xb0, 0xa8, 0xcc, 0xf4, 0x80, 0xf8,
++ 0xc8, 0xc8, 0x78, 0xc4, 0xb4, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x13, 0x1c, 0x14, 0x1f, 0x1d, 0x1d,
++ 0x1f, 0x16, 0x15, 0x27, 0x38, 0x40, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8,
++ 0xfc, 0x98, 0x64, 0xc4, 0xb4, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x19, 0x7f, 0x5b, 0x7f, 0x01, 0x3d,
++ 0x01, 0x7f, 0x2d, 0x2a, 0x4b, 0x1c, 0x00, 0x00,
++ 0x00, 0xf8, 0x18, 0xe8, 0x48, 0xf8, 0xd8, 0xd8,
++ 0xf8, 0x6c, 0x5c, 0x74, 0x94, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x23, 0x3d, 0x29, 0x3f, 0x3b, 0x3b,
++ 0x3f, 0x2d, 0x2a, 0x2f, 0x31, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x30, 0xfc, 0xb4, 0xfc, 0x78, 0x00,
++ 0xfc, 0x58, 0x94, 0xb4, 0x64, 0x1c, 0x00, 0x00,
++ 0x0c, 0x0b, 0x3f, 0x09, 0x15, 0x13, 0x35, 0x2f,
++ 0x7f, 0x25, 0x37, 0x2a, 0x4b, 0x54, 0x00, 0x00,
++ 0x00, 0xf8, 0x18, 0xe8, 0x48, 0xf8, 0xd8, 0xd8,
++ 0xf8, 0x6c, 0x5c, 0x74, 0x94, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1f, 0x22, 0x7c, 0x24, 0x3c,
++ 0x24, 0x3c, 0x3c, 0x20, 0x3e, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x3c, 0xe0, 0x20, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xf8, 0xa8, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1e, 0x22, 0x7c, 0x25, 0x3c,
++ 0x24, 0x3c, 0x3e, 0x20, 0x3f, 0x22, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x1e, 0x22, 0x7c, 0x25, 0x3c,
++ 0x24, 0x3c, 0x3e, 0x20, 0x3e, 0x23, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0x48, 0x94, 0x54, 0x50,
++ 0x60, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1f, 0x21, 0x7d, 0x25, 0x3d,
++ 0x25, 0x3d, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x08, 0xe8, 0xa8, 0xa8,
++ 0xa8, 0xe8, 0xa8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1e, 0x23, 0x7e, 0x22, 0x3f,
++ 0x22, 0x3e, 0x3e, 0x20, 0x3e, 0x23, 0x00, 0x00,
++ 0x18, 0xf0, 0xa8, 0xa4, 0x04, 0x20, 0x20, 0xfc,
++ 0x48, 0x48, 0xf0, 0x10, 0x68, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x17, 0x1e, 0x23, 0x7d, 0x25, 0x3d,
++ 0x25, 0x3d, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1e, 0x22, 0x7d, 0x24, 0x3d,
++ 0x24, 0x3c, 0x3e, 0x21, 0x3e, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0xfc, 0x20, 0xfc,
++ 0x20, 0xb0, 0xa8, 0x24, 0x24, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1e, 0x23, 0x7e, 0x24, 0x3d,
++ 0x25, 0x3d, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x80, 0xf8, 0x88, 0x88, 0x08, 0x30, 0x40, 0x98,
++ 0x08, 0xd8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x1e, 0x22, 0x7c, 0x25, 0x3c,
++ 0x24, 0x3c, 0x3e, 0x20, 0x3f, 0x22, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x20, 0x20, 0xfc, 0x20,
++ 0x38, 0x48, 0x48, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1f, 0x22, 0x7c, 0x25, 0x3c,
++ 0x24, 0x3d, 0x3e, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x50, 0x48, 0x7c, 0xc8, 0x30, 0x74, 0x8c, 0x54,
++ 0x7c, 0xc8, 0x30, 0x74, 0x8c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1e, 0x23, 0x7c, 0x24, 0x3d,
++ 0x24, 0x3c, 0x3f, 0x20, 0x3e, 0x21, 0x00, 0x00,
++ 0x20, 0x24, 0xa4, 0xa8, 0x70, 0x50, 0x88, 0x24,
++ 0xa4, 0xa8, 0x70, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x1f, 0x22, 0x7c, 0x24, 0x3c,
++ 0x27, 0x3c, 0x3e, 0x21, 0x3f, 0x22, 0x00, 0x00,
++ 0x90, 0x90, 0x20, 0xfc, 0x90, 0x90, 0x90, 0xd0,
++ 0xbc, 0x90, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x11, 0x11, 0x19, 0x27, 0x3d, 0x79, 0x2b, 0x3a,
++ 0x2a, 0x3a, 0x3f, 0x22, 0x3c, 0x21, 0x00, 0x00,
++ 0x00, 0x38, 0x28, 0xe8, 0x28, 0x38, 0xa8, 0xa8,
++ 0xb8, 0xa8, 0xc8, 0x48, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x09, 0x1e, 0x74, 0x19, 0x62, 0x0f,
++ 0x77, 0x04, 0x07, 0x07, 0x07, 0x3c, 0x00, 0x00,
++ 0x20, 0x50, 0xac, 0xd0, 0x68, 0x70, 0x80, 0xe0,
++ 0xfc, 0x40, 0xc0, 0xd0, 0xe0, 0x38, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x1f, 0x23, 0x7d, 0x25, 0x3d,
++ 0x24, 0x3c, 0x3f, 0x21, 0x3e, 0x24, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xc8,
++ 0xd0, 0xd0, 0x68, 0x7c, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x1f, 0x23, 0x7d, 0x27, 0x3c,
++ 0x25, 0x3d, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x40, 0xbc, 0x14, 0x94, 0x54, 0xd4, 0x2c, 0x40,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x1f, 0x23, 0x7d, 0x25, 0x3c,
++ 0x25, 0x3d, 0x3f, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x68, 0x98, 0x18, 0xf8, 0x00,
++ 0xf8, 0x68, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x1e, 0x22, 0x7c, 0x24, 0x3c,
++ 0x25, 0x3c, 0x3e, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x50, 0xfc, 0x50, 0x70, 0xf8, 0xa8, 0xf8, 0x20,
++ 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1e, 0x22, 0x7c, 0x25, 0x3d,
++ 0x25, 0x3c, 0x3e, 0x20, 0x3e, 0x23, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc, 0x54,
++ 0xfc, 0xf8, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x1e, 0x23, 0x7d, 0x27, 0x3c,
++ 0x24, 0x3c, 0x3e, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0xfc, 0x08, 0xfc, 0xf8,
++ 0x88, 0xf8, 0x88, 0x50, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1e, 0x23, 0x7c, 0x24, 0x3c,
++ 0x24, 0x3c, 0x3e, 0x20, 0x3e, 0x23, 0x00, 0x00,
++ 0x20, 0xf8, 0xa8, 0xf8, 0xfc, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x1a, 0x25, 0x3d, 0x7a, 0x2b, 0x38,
++ 0x2b, 0x3b, 0x3e, 0x22, 0x3e, 0x24, 0x00, 0x00,
++ 0x48, 0x48, 0xf4, 0xd4, 0x48, 0xd4, 0xfc, 0x48,
++ 0xfc, 0x48, 0xa8, 0x34, 0xcc, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1e, 0x23, 0x7c, 0x27, 0x3c,
++ 0x24, 0x3f, 0x3f, 0x20, 0x3c, 0x23, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0xfc, 0x90, 0xfc, 0x90,
++ 0xfc, 0x00, 0xfc, 0x50, 0x94, 0x0c, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x1f, 0x23, 0x7d, 0x24, 0x3c,
++ 0x25, 0x3c, 0x3f, 0x20, 0x3e, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x68, 0xf8, 0x20, 0x64, 0xdc, 0x50,
++ 0xf8, 0x50, 0xfc, 0x50, 0x88, 0x08, 0x00, 0x00,
++ 0x1e, 0x12, 0x1e, 0x7f, 0x1e, 0x23, 0x0e, 0x0f,
++ 0x77, 0x04, 0x07, 0x07, 0x06, 0x38, 0x00, 0x00,
++ 0x38, 0xfc, 0xa8, 0xd8, 0xb0, 0x34, 0xcc, 0xe0,
++ 0xdc, 0x40, 0xc0, 0xd0, 0xe0, 0x38, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x08, 0x7e, 0x0a, 0x0a, 0x0a,
++ 0x0a, 0x0a, 0x12, 0x12, 0x22, 0x41, 0x00, 0x00,
++ 0x88, 0x50, 0xfc, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x8c, 0x04, 0xfc, 0x00, 0x00,
++ 0x24, 0x14, 0x18, 0x7f, 0x08, 0x11, 0x3d, 0x25,
++ 0x3d, 0x25, 0x3c, 0x27, 0x3c, 0x24, 0x00, 0x00,
++ 0x30, 0x28, 0x28, 0xfc, 0x20, 0xe8, 0x68, 0x68,
++ 0xd0, 0x10, 0x74, 0xac, 0x4c, 0x84, 0x00, 0x00,
++ 0x06, 0x38, 0x08, 0x7f, 0x1c, 0x1a, 0x2a, 0x48,
++ 0x3e, 0x22, 0x3f, 0x22, 0x3e, 0x23, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x40, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3e, 0x24, 0x3e, 0x24, 0x3f,
++ 0x05, 0x3b, 0x2f, 0x2d, 0x42, 0x0d, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x50, 0x50, 0x70,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x22, 0x13, 0x12, 0x03, 0x0a, 0x0b,
++ 0x10, 0x16, 0x25, 0x25, 0x28, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xf0, 0x40, 0xf0, 0x40, 0xfc,
++ 0x24, 0x94, 0x54, 0x44, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3f, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x88, 0x88, 0x88, 0x50,
++ 0x50, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x3d, 0x29, 0x3d, 0x29, 0x3f,
++ 0x0b, 0x3f, 0x3f, 0x33, 0x45, 0x19, 0x00, 0x00,
++ 0x00, 0xf8, 0x68, 0x68, 0x68, 0x68, 0x68, 0x78,
++ 0xb8, 0x98, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0b, 0x3e, 0x3e, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0xa0, 0x40, 0x60, 0x98, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3f, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x88, 0x40, 0x40, 0x4c,
++ 0x70, 0x40, 0x40, 0x40, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x29, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x50, 0x48, 0xf4, 0x04,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x7e, 0x12, 0x3a, 0x0c, 0x77, 0x04, 0x07,
++ 0x07, 0x04, 0x07, 0x15, 0x12, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x30, 0xc8, 0xf4, 0x80, 0xe0,
++ 0xe0, 0x80, 0xf8, 0x48, 0xa8, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x3e, 0x28, 0x3f, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x44, 0x1b, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x40, 0x50, 0x90, 0x60, 0x28,
++ 0x48, 0x90, 0x10, 0x28, 0xc4, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x3e, 0x28, 0x3e, 0x29, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0x48, 0x94, 0x54, 0x50,
++ 0x60, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3f, 0x28, 0x3e,
++ 0x0b, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0xd0, 0x20, 0x50, 0x88,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3e, 0x28, 0x3c, 0x28, 0x3c, 0x29, 0x3f,
++ 0x0a, 0x3e, 0x3e, 0x33, 0x45, 0x1a, 0x00, 0x00,
++ 0x08, 0x88, 0xa8, 0xa8, 0xa8, 0xf8, 0xf8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x28, 0x28, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3f, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x00, 0xf8,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x28, 0x3f, 0x28, 0x3e, 0x28, 0x3f,
++ 0x0b, 0x3e, 0x3e, 0x32, 0x44, 0x1b, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xfc, 0x08, 0xf8, 0x00, 0xfc,
++ 0x08, 0xf8, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3f,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x20, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x00, 0xfc,
++ 0x40, 0x78, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3f, 0x3e, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x48, 0x48, 0x48, 0xfc, 0x48, 0x78, 0x48, 0x78,
++ 0x48, 0xfc, 0x50, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3f, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3f, 0x28, 0x3e, 0x28, 0x3f,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x45, 0x1a, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0xfc, 0x50, 0x50, 0x50, 0xfc,
++ 0x50, 0x50, 0x90, 0x90, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3f, 0x3f, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x88, 0xf8, 0x80, 0xfc,
++ 0xb4, 0xfc, 0xb4, 0xb4, 0xb4, 0x8c, 0x00, 0x00,
++ 0x01, 0x3f, 0x22, 0x7f, 0x1f, 0x02, 0x7f, 0x0f,
++ 0x17, 0x67, 0x05, 0x07, 0x1a, 0x25, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0xf8, 0xe0, 0x80, 0xfc, 0xf0,
++ 0xd0, 0xcc, 0x00, 0xf0, 0x90, 0x60, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3f, 0x28, 0x3e, 0x2b, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0x50, 0xa0, 0x70, 0xac, 0xf8,
++ 0xa8, 0xf8, 0xb0, 0x28, 0x3c, 0xc4, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x3d, 0x29, 0x3d, 0x29, 0x3f,
++ 0x0b, 0x3f, 0x3f, 0x33, 0x45, 0x19, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x78, 0x48, 0x78, 0x00, 0xfc,
++ 0xb4, 0xb4, 0xfc, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x29, 0x3c, 0x29, 0x3f, 0x28, 0x3e,
++ 0x0b, 0x3e, 0x3e, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x40, 0x90, 0xf8, 0x90, 0x68, 0xfc, 0x60, 0x90,
++ 0x2c, 0xc0, 0x20, 0xc8, 0x30, 0xc0, 0x00, 0x00,
++ 0x04, 0x7f, 0x0f, 0x08, 0x0f, 0x0f, 0x7f, 0x07,
++ 0x1d, 0x67, 0x07, 0x07, 0x1a, 0x25, 0x00, 0x00,
++ 0x40, 0xfc, 0xe0, 0x20, 0xe0, 0xe0, 0xfc, 0xc0,
++ 0x30, 0xcc, 0xc0, 0xf8, 0x88, 0x70, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3f, 0x29, 0x3f, 0x28, 0x3e,
++ 0x0a, 0x3f, 0x3e, 0x32, 0x43, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0xfc, 0x54, 0xfc, 0x00, 0xf8,
++ 0x00, 0xfc, 0xa8, 0xa4, 0x24, 0x60, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3f, 0x3e, 0x32, 0x43, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x50, 0xd0,
++ 0x28, 0xfc, 0xa8, 0xa4, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3f, 0x28, 0x3e, 0x29, 0x3e,
++ 0x0b, 0x3f, 0x3f, 0x33, 0x45, 0x19, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0xfc, 0x50, 0xf8, 0x54, 0x70,
++ 0xfc, 0x74, 0x54, 0x74, 0x04, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3f, 0x28, 0x3f, 0x28, 0x3e,
++ 0x0b, 0x3f, 0x3e, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x20, 0xf8, 0x20, 0xfc, 0x88, 0xdc, 0x88, 0xdc,
++ 0x00, 0xfc, 0x50, 0x50, 0x94, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x3f, 0x28, 0x3e, 0x28, 0x3f,
++ 0x0a, 0x3f, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x54, 0xfc, 0x20, 0xf8, 0x20, 0xfc,
++ 0x50, 0xfc, 0x20, 0xf8, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3f, 0x28, 0x3f,
++ 0x0b, 0x3f, 0x3e, 0x32, 0x45, 0x1a, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0xfc, 0x00, 0xf8,
++ 0x68, 0xf8, 0x90, 0xd8, 0x24, 0x44, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x3d, 0x29, 0x3d, 0x2b, 0x3e,
++ 0x0a, 0x3f, 0x3e, 0x32, 0x43, 0x0c, 0x00, 0x00,
++ 0x00, 0xe0, 0x7c, 0xd4, 0xc8, 0x54, 0xe4, 0x50,
++ 0x64, 0xb8, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x29, 0x3f, 0x29, 0x3f, 0x29, 0x3f,
++ 0x0b, 0x3f, 0x3f, 0x33, 0x46, 0x19, 0x00, 0x00,
++ 0x20, 0x38, 0xfc, 0x28, 0xd8, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0xf8, 0xe8, 0xe8, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x29, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x33, 0x42, 0x0d, 0x00, 0x00,
++ 0x50, 0xd4, 0x58, 0xd4, 0x4c, 0xf8, 0xa8, 0xf8,
++ 0xf8, 0x50, 0xf8, 0xfc, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x3f, 0x29, 0x3e, 0x29, 0x3e,
++ 0x0a, 0x3f, 0x3e, 0x33, 0x44, 0x19, 0x00, 0x00,
++ 0x20, 0xfc, 0xdc, 0x54, 0xdc, 0x50, 0xfc, 0xf8,
++ 0x50, 0xfc, 0x68, 0x90, 0xe8, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3d, 0x29, 0x3d, 0x28, 0x3e,
++ 0x0b, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x50, 0xfc, 0x50, 0xdc, 0x54, 0xdc, 0x50, 0xfc,
++ 0x90, 0xf8, 0xf8, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x00, 0x07, 0x07, 0x07, 0x07, 0x0e, 0x15, 0x3f,
++ 0x28, 0x3e, 0x3e, 0x3f, 0x3d, 0x57, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0xc0, 0xf0, 0x90, 0x60, 0xfc,
++ 0xa0, 0xf8, 0xf8, 0xfc, 0xf4, 0x58, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x3f, 0x29, 0x3e, 0x29, 0x3f,
++ 0x0b, 0x3f, 0x3f, 0x33, 0x46, 0x19, 0x00, 0x00,
++ 0x00, 0xdc, 0xdc, 0xdc, 0x54, 0x20, 0xfc, 0x50,
++ 0xf8, 0x58, 0xfc, 0xd8, 0xf4, 0x8c, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x2e, 0x2a, 0x7f, 0x42, 0x3e,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x26, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x2e, 0x2a, 0x7e, 0x43, 0x3f,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x27, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x54, 0x54, 0x8c, 0x00, 0xf8,
++ 0x48, 0x50, 0x30, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x2e, 0x2a, 0x7f, 0x42, 0x3e,
++ 0x23, 0x3e, 0x22, 0x3e, 0x22, 0x26, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0xd0, 0x20, 0x50, 0x88,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x2e, 0x2a, 0x7f, 0x42, 0x3e,
++ 0x22, 0x3f, 0x22, 0x3e, 0x22, 0x26, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x50,
++ 0x90, 0xfc, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x2f, 0x2a, 0x7f, 0x42, 0x3e,
++ 0x22, 0x3f, 0x22, 0x3e, 0x22, 0x27, 0x00, 0x00,
++ 0x20, 0xf8, 0xa8, 0xfc, 0xa8, 0xf8, 0xf8, 0xa8,
++ 0xf8, 0xfc, 0x50, 0xd0, 0x30, 0xc8, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x3d, 0x34, 0x7e, 0x45, 0x3f,
++ 0x25, 0x3d, 0x25, 0x3c, 0x27, 0x2c, 0x00, 0x00,
++ 0x00, 0xf8, 0x68, 0xf8, 0x80, 0xf8, 0x48, 0xf8,
++ 0x58, 0xf8, 0x68, 0x78, 0x88, 0x30, 0x00, 0x00,
++ 0x02, 0x3d, 0x25, 0x3c, 0x36, 0x7f, 0x45, 0x3c,
++ 0x27, 0x3d, 0x25, 0x3d, 0x26, 0x2c, 0x00, 0x00,
++ 0x20, 0xfc, 0x40, 0x78, 0x90, 0xfc, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x48, 0xd8, 0x7c, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x3d, 0x35, 0x7f, 0x42, 0x3f,
++ 0x25, 0x3d, 0x25, 0x3c, 0x27, 0x2c, 0x00, 0x00,
++ 0x60, 0xf8, 0x68, 0xf8, 0x68, 0xf8, 0x00, 0xfc,
++ 0xf8, 0x08, 0xf8, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x3c, 0x24, 0x3d, 0x01, 0x7f,
++ 0x42, 0x5f, 0x56, 0x5e, 0x43, 0x46, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x00, 0xdc, 0x54, 0xdc,
++ 0x20, 0xfc, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1e, 0x10, 0x1e, 0x10,
++ 0x7f, 0x14, 0x12, 0x27, 0x79, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x28, 0x48, 0x90, 0x10, 0x24,
++ 0x44, 0x08, 0x08, 0x10, 0x60, 0x80, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x09,
++ 0x09, 0x0f, 0x79, 0x09, 0x08, 0x07, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0x00,
++ 0xf0, 0x10, 0x10, 0x64, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x01,
++ 0x7f, 0x01, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0x00,
++ 0xfc, 0x00, 0xf0, 0x10, 0x10, 0xe0, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x00,
++ 0x0f, 0x1f, 0x02, 0x7f, 0x02, 0x01, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0xc0,
++ 0x00, 0xf0, 0x00, 0xfc, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x01,
++ 0x0f, 0x0f, 0x09, 0x7f, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0x00,
++ 0xe0, 0xe0, 0x20, 0xfc, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3d, 0x1f,
++ 0x03, 0x0c, 0x7f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0xf0,
++ 0x10, 0x60, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x01,
++ 0x7f, 0x02, 0x05, 0x19, 0x66, 0x18, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xf0, 0x08,
++ 0xfc, 0x20, 0x40, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x1f,
++ 0x04, 0x3f, 0x3f, 0x24, 0x18, 0x60, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0xf0,
++ 0x90, 0xf0, 0xfc, 0x84, 0x98, 0x80, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x02,
++ 0x0f, 0x7f, 0x08, 0x0f, 0x08, 0x07, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0x00,
++ 0xf0, 0x90, 0x90, 0xe4, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x02,
++ 0x1f, 0x12, 0x1f, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0x80,
++ 0xf0, 0x90, 0xf0, 0x90, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x01,
++ 0x7f, 0x1f, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0x00,
++ 0xfc, 0xf0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x08,
++ 0x7e, 0x18, 0x1d, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0x78,
++ 0x88, 0xa4, 0x30, 0x48, 0xf4, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x16, 0x3f, 0x07,
++ 0x07, 0x1f, 0x1f, 0x0f, 0x03, 0x3c, 0x00, 0x00,
++ 0x10, 0x60, 0x90, 0x64, 0x98, 0x60, 0xc0, 0xc0,
++ 0xc0, 0xf0, 0xf0, 0xe0, 0x80, 0x78, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x0f,
++ 0x71, 0x09, 0x31, 0x05, 0x19, 0x67, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0xfc,
++ 0xf0, 0x10, 0xf0, 0xf0, 0xf0, 0x1c, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x16, 0x3f, 0x0f,
++ 0x7f, 0x07, 0x07, 0x7c, 0x07, 0x18, 0x00, 0x00,
++ 0x10, 0x60, 0x90, 0x64, 0x98, 0xe0, 0xe0, 0xe0,
++ 0xfc, 0xc0, 0xd8, 0xe0, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x16, 0x3f, 0x2f,
++ 0x4b, 0x37, 0x3f, 0x07, 0x07, 0x3c, 0x00, 0x00,
++ 0x10, 0x60, 0x90, 0x64, 0x18, 0xe0, 0xfc, 0xe8,
++ 0x40, 0xe0, 0xe0, 0xe0, 0xe0, 0x38, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x16, 0x39, 0x04,
++ 0x1f, 0x13, 0x1f, 0x1d, 0x1d, 0x73, 0x00, 0x00,
++ 0x10, 0x60, 0x90, 0x64, 0x18, 0xe8, 0x30, 0x88,
++ 0xf0, 0x90, 0xf0, 0xd4, 0xcc, 0x04, 0x00, 0x00,
++ 0x00, 0x2e, 0x24, 0x2e, 0x24, 0x2e, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xe8, 0x48, 0xe8, 0x48, 0xe8, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x2e, 0x24, 0x2e, 0x24, 0x2e, 0x21, 0x3f,
++ 0x21, 0x2f, 0x29, 0x29, 0x29, 0x21, 0x00, 0x00,
++ 0x00, 0xe8, 0x48, 0xe8, 0x48, 0xe8, 0x08, 0xf8,
++ 0x08, 0xe8, 0x28, 0x28, 0xc8, 0x18, 0x00, 0x00,
++ 0x00, 0x2e, 0x24, 0x2e, 0x24, 0x2e, 0x20, 0x22,
++ 0x2f, 0x22, 0x3f, 0x22, 0x24, 0x28, 0x00, 0x00,
++ 0x00, 0xe8, 0x48, 0xe8, 0x48, 0xe8, 0x08, 0x88,
++ 0xe8, 0x88, 0xf8, 0x88, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x2e, 0x24, 0x2e, 0x24, 0x2e, 0x22, 0x24,
++ 0x26, 0x24, 0x27, 0x22, 0x24, 0x28, 0x00, 0x00,
++ 0x00, 0xe8, 0x48, 0xe8, 0x48, 0xe8, 0x08, 0xc8,
++ 0xc8, 0x48, 0xc8, 0x88, 0xa8, 0x78, 0x00, 0x00,
++ 0x00, 0x2e, 0x24, 0x2e, 0x24, 0x2e, 0x20, 0x3f,
++ 0x2f, 0x29, 0x2f, 0x2a, 0x27, 0x38, 0x00, 0x00,
++ 0x00, 0xe8, 0x48, 0xe8, 0x48, 0xe8, 0x28, 0x28,
++ 0xf8, 0xa8, 0x68, 0x28, 0x28, 0x78, 0x00, 0x00,
++ 0x00, 0x2e, 0x24, 0x2e, 0x2e, 0x23, 0x3f, 0x2e,
++ 0x3a, 0x3e, 0x3a, 0x3a, 0x3e, 0x39, 0x00, 0x00,
++ 0x00, 0xe8, 0x48, 0xe8, 0xe8, 0x88, 0xe8, 0xe8,
++ 0xf8, 0xb8, 0xf8, 0xf8, 0x98, 0xf8, 0x00, 0x00,
++ 0x02, 0x21, 0x2c, 0x33, 0x29, 0x23, 0x2c, 0x3f,
++ 0x28, 0x08, 0x0f, 0x08, 0x08, 0x07, 0x00, 0x00,
++ 0x40, 0x48, 0xa8, 0x98, 0x48, 0x28, 0x88, 0xf8,
++ 0x08, 0x70, 0x80, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x0f, 0x08, 0x0f, 0x00, 0x3f,
++ 0x22, 0x2c, 0x37, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xf8,
++ 0x88, 0x98, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x11, 0x3d, 0x25, 0x25, 0x3d, 0x25,
++ 0x24, 0x24, 0x3d, 0x25, 0x06, 0x18, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x48,
++ 0xd0, 0xd0, 0x68, 0x78, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x10, 0x3e, 0x2b, 0x3e, 0x2a, 0x3e, 0x18,
++ 0x1a, 0x1a, 0x1d, 0x2f, 0x29, 0x47, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0xfc, 0x40, 0x50, 0x50, 0x50,
++ 0xa0, 0xa0, 0x50, 0x88, 0x04, 0xfc, 0x00, 0x00,
++ 0x06, 0x38, 0x08, 0x7f, 0x1c, 0x1a, 0x2a, 0x48,
++ 0x7e, 0x12, 0x3a, 0x04, 0x1b, 0x62, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0xa0,
++ 0x68, 0x68, 0xb4, 0xbc, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x10, 0x3e, 0x2a, 0x3e, 0x2a, 0x3e, 0x18,
++ 0x1a, 0x1a, 0x1d, 0x2f, 0x28, 0x47, 0x00, 0x00,
++ 0x00, 0xf8, 0xd8, 0xb8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0xc8, 0xb8, 0x88, 0x9c, 0x04, 0xfc, 0x00, 0x00,
++ 0x08, 0x11, 0x3e, 0x2b, 0x3f, 0x2b, 0x3f, 0x19,
++ 0x1b, 0x1b, 0x1d, 0x2f, 0x28, 0x47, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0xd8, 0xd8,
++ 0xe8, 0x48, 0x48, 0x1c, 0x04, 0xfc, 0x00, 0x00,
++ 0x08, 0x11, 0x3e, 0x2a, 0x3e, 0x2a, 0x3e, 0x19,
++ 0x1d, 0x1d, 0x1b, 0x2f, 0x28, 0x47, 0x00, 0x00,
++ 0x20, 0xfc, 0x98, 0xe8, 0xd8, 0xf8, 0x20, 0xfc,
++ 0x54, 0xfc, 0x04, 0x0c, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x17, 0x17, 0x1f, 0x1f, 0x1f, 0x19,
++ 0x17, 0x17, 0x27, 0x21, 0x46, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x18, 0x14, 0xfc, 0x90, 0xa8, 0xc4,
++ 0xf0, 0xf0, 0xf0, 0xa8, 0xfc, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x42, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x38, 0x28,
++ 0x28, 0x48, 0x48, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0xa0, 0xa0, 0x3c, 0x20,
++ 0x20, 0x3c, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x1e, 0x24, 0x7e, 0x2b, 0x3e, 0x2b,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xa8, 0xa4, 0x24, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x78, 0x88, 0xe8, 0xa8, 0xa8,
++ 0xe8, 0xb0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x09, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x40, 0x40, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x50, 0x20, 0x50, 0xc8,
++ 0x24, 0x20, 0x00, 0xc0, 0x30, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x43, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x20, 0x20, 0xfc, 0x48,
++ 0x48, 0xf0, 0x90, 0x38, 0xc4, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2f, 0x29, 0x42, 0x00, 0x00,
++ 0x20, 0x20, 0x78, 0x90, 0xfc, 0x80, 0xf8, 0xc8,
++ 0xc8, 0xc8, 0xd8, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x80, 0x98, 0xe0, 0x80, 0x84, 0x7c, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x50, 0x50, 0x50, 0x90, 0xfc, 0x90, 0xb8, 0xb8,
++ 0xb8, 0xd4, 0xd4, 0x90, 0x90, 0x90, 0x00, 0x00,
++ 0x08, 0x09, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x0c, 0xf0, 0x20, 0x28, 0xc8, 0x30, 0x30, 0x48,
++ 0xf4, 0x20, 0xa8, 0xa4, 0x24, 0x20, 0x00, 0x00,
++ 0x10, 0x49, 0x21, 0x0a, 0x14, 0x23, 0x27, 0x08,
++ 0x3f, 0x09, 0x0f, 0x0f, 0x14, 0x22, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0xd4, 0x64, 0x80, 0xc0, 0x80,
++ 0xe0, 0x20, 0xe0, 0xe0, 0x90, 0x48, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xa8, 0xa4, 0x24, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x28, 0x24, 0xfc, 0x20, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x7e, 0x2b, 0x3e, 0x2a,
++ 0x3f, 0x05, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x48, 0x88, 0xa8, 0xa8, 0xa8, 0xe8, 0xa8, 0xe8,
++ 0xe8, 0xa8, 0xa8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7e, 0x2b, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x08, 0xd0, 0x70, 0xa8, 0x20, 0xfc, 0x60, 0xa0,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xb8, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x20, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0xb8, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2f, 0x28, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x40, 0xfc,
++ 0x54, 0x54, 0x94, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x42, 0x00, 0x00,
++ 0x20, 0x40, 0x98, 0x88, 0xd8, 0x88, 0x88, 0xf8,
++ 0x68, 0x60, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x90,
++ 0x94, 0xf8, 0x90, 0x94, 0xd4, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x25, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0xa8, 0xa8, 0x50, 0x50, 0xa8, 0xa8, 0x00, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x05, 0x3a, 0x2e, 0x29, 0x42, 0x00, 0x00,
++ 0x50, 0x50, 0x50, 0xdc, 0x50, 0x50, 0xdc, 0x50,
++ 0x70, 0xdc, 0x90, 0x90, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2b, 0x3e, 0x2b,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x41, 0x00, 0x00,
++ 0x20, 0x50, 0xf8, 0x90, 0x68, 0xfc, 0x60, 0xb0,
++ 0xcc, 0x20, 0xc8, 0x10, 0x60, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3b, 0x2f, 0x2a, 0x41, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0xa8, 0xe8, 0x84, 0x94, 0xc8,
++ 0xc8, 0xc0, 0x50, 0x48, 0x44, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3b, 0x2f, 0x2a, 0x41, 0x00, 0x00,
++ 0x20, 0x38, 0x20, 0xfc, 0xa8, 0xf8, 0xa4, 0x9c,
++ 0xf0, 0xd0, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x88, 0x74, 0x00, 0xf8, 0x10,
++ 0x20, 0x58, 0xd4, 0xc4, 0x50, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x1f, 0x25, 0x7f, 0x2b, 0x3f, 0x2b,
++ 0x3f, 0x05, 0x3b, 0x2f, 0x29, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xd8, 0x48, 0x00, 0xf8,
++ 0x28, 0x28, 0xd0, 0x10, 0x28, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7f, 0x2b, 0x3f, 0x2b,
++ 0x3f, 0x05, 0x3b, 0x2f, 0x2a, 0x42, 0x00, 0x00,
++ 0x28, 0x24, 0x24, 0xfc, 0x20, 0xe8, 0x28, 0xe8,
++ 0xb0, 0xf0, 0x94, 0x2c, 0x4c, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x00,
++ 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2f, 0x29, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8, 0xf8, 0x20,
++ 0x50, 0xd8, 0xc4, 0x54, 0x50, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x70, 0x50, 0x50, 0x88, 0xfc, 0x30, 0xf8, 0xb8,
++ 0xd8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x7e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x05, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x50,
++ 0xf8, 0x8c, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0xa8, 0xa8, 0xfc, 0xa8, 0xb8, 0x80, 0xfc, 0x20,
++ 0xfc, 0x70, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3b, 0x2e, 0x28, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x40, 0xf8, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2f, 0x28, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0xb8, 0xe8, 0xf8,
++ 0x70, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x1c, 0x2b, 0x7e, 0x2f, 0x3e, 0x2f,
++ 0x3f, 0x0b, 0x3e, 0x3e, 0x35, 0x48, 0x00, 0x00,
++ 0x30, 0x28, 0x28, 0xfc, 0x20, 0xe8, 0xa8, 0xe8,
++ 0x78, 0x50, 0x94, 0xdc, 0x2c, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xd8, 0x88, 0xf8, 0x00,
++ 0xf8, 0xe8, 0xe8, 0xe8, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x00,
++ 0xf8, 0xe8, 0xe8, 0xe8, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x1f, 0x25, 0x7f, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2f, 0x28, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x54, 0x54, 0xfc, 0x20, 0xa8, 0xa8,
++ 0x24, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x25, 0x7f, 0x2b, 0x3f, 0x2b,
++ 0x3f, 0x05, 0x3b, 0x2f, 0x29, 0x40, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xd0, 0x7c, 0x74, 0xf4, 0x34,
++ 0xf4, 0x74, 0x7c, 0xd0, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x25, 0x7f, 0x2b, 0x3f, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x94, 0x54, 0xf4, 0x2c, 0x40,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x11, 0x1c, 0x28, 0x7f, 0x2a, 0x3f, 0x2b,
++ 0x3f, 0x05, 0x3f, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x10, 0xd0, 0x10, 0x3c, 0xf4, 0xb4, 0xfc, 0xf4,
++ 0xf4, 0xfc, 0xb4, 0x90, 0x90, 0x90, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2f, 0x29, 0x42, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0xa0, 0xf8, 0xa8, 0xfc, 0xa8,
++ 0xf8, 0xa8, 0xf0, 0x68, 0xa4, 0x60, 0x00, 0x00,
++ 0x08, 0x3e, 0x7f, 0x08, 0x7f, 0x1e, 0x26, 0x47,
++ 0x3f, 0x09, 0x0f, 0x0f, 0x14, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xc8, 0x28, 0x30, 0xc8, 0x84,
++ 0xe0, 0x20, 0xe0, 0xe0, 0x90, 0x48, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2f, 0x28, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x50, 0xfc, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x1e, 0x25, 0x7f, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x05, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0xfc, 0x54, 0xfc, 0x00, 0xf8,
++ 0x00, 0xfc, 0xa8, 0xa4, 0x24, 0x60, 0x00, 0x00,
++ 0x08, 0x09, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x05, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x00, 0xf8, 0x88, 0xf8,
++ 0x50, 0xfc, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7f, 0x2b, 0x3f, 0x2b,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x40, 0x60, 0x90, 0xf8, 0xfc, 0xd8, 0x68, 0xf8,
++ 0xf0, 0x90, 0xf0, 0x90, 0xf0, 0x90, 0x00, 0x00,
++ 0x08, 0x09, 0x1f, 0x25, 0x7f, 0x2b, 0x3e, 0x2b,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x60, 0xf8, 0x68, 0xf8, 0x68, 0xf8, 0x00, 0xfc,
++ 0xf8, 0x88, 0xf8, 0x50, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x7e, 0x2b, 0x3e, 0x2b,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x43, 0x00, 0x00,
++ 0x88, 0x50, 0xfc, 0x20, 0xf8, 0xfc, 0xd0, 0xf8,
++ 0x94, 0xf0, 0xf0, 0xa8, 0xd0, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x25, 0x7f, 0x2b, 0x3f, 0x2b,
++ 0x3f, 0x05, 0x3b, 0x2f, 0x2a, 0x41, 0x00, 0x00,
++ 0x20, 0x38, 0xfc, 0x68, 0xd8, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0xf8, 0xe8, 0xe8, 0xfc, 0x00, 0x00,
++ 0x01, 0x0f, 0x08, 0x0f, 0x0f, 0x0f, 0x0f, 0x15,
++ 0x12, 0x20, 0x07, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0xe0, 0xfc, 0xf8, 0x48,
++ 0xa8, 0x30, 0xc0, 0x40, 0x44, 0x3c, 0x00, 0x00,
++ 0x02, 0x1f, 0x10, 0x1f, 0x1f, 0x1f, 0x10, 0x1f,
++ 0x10, 0x07, 0x04, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0xe0, 0xfc, 0x00, 0xf8,
++ 0x08, 0x88, 0xf0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x39, 0x09, 0x09, 0x09, 0x19, 0x15,
++ 0x15, 0x23, 0x20, 0x43, 0x02, 0x04, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xfc, 0xa4, 0x54, 0x84, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x24, 0x24, 0x24, 0x7e, 0x0c, 0x0c,
++ 0x14, 0x14, 0x24, 0x45, 0x05, 0x0e, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x12, 0x12, 0x14, 0x14, 0x1c,
++ 0x14, 0x14, 0x24, 0x25, 0x45, 0x06, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x88, 0xf8, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x13, 0x12, 0x13, 0x13, 0x13,
++ 0x12, 0x13, 0x26, 0x25, 0x49, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0x10, 0xf0, 0xf0, 0xfc,
++ 0x00, 0xfc, 0xa4, 0x54, 0x04, 0x18, 0x00, 0x00,
++ 0x08, 0x10, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x3f,
++ 0x20, 0x3f, 0x0d, 0x3d, 0x32, 0x4d, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0x28, 0x28, 0x28, 0xfc,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x48, 0x0c,
++ 0x0c, 0x15, 0x16, 0x25, 0x41, 0x02, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x22, 0x40, 0x1c, 0x04, 0x14,
++ 0x14, 0x14, 0x22, 0x23, 0x41, 0x02, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x01, 0x0f, 0x0a, 0x7f, 0x05, 0x1f, 0x64, 0x07,
++ 0x07, 0x07, 0x07, 0x15, 0x12, 0x20, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xfc, 0x40, 0xf0, 0x4c, 0xc0,
++ 0xc0, 0xfc, 0xf8, 0x48, 0xa8, 0x30, 0x00, 0x00,
++ 0x15, 0x0e, 0x19, 0x3f, 0x21, 0x4f, 0x08, 0x0f,
++ 0x0f, 0x0f, 0x0f, 0x2a, 0x25, 0x40, 0x00, 0x00,
++ 0xa8, 0x70, 0xc8, 0xfc, 0x08, 0xe0, 0x20, 0xe0,
++ 0xe0, 0xfc, 0xf8, 0x48, 0x28, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x09, 0x7f, 0x09, 0x09, 0x3d,
++ 0x25, 0x25, 0x25, 0x3e, 0x22, 0x04, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xfc, 0x54, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x00, 0x06, 0x38, 0x28, 0x28, 0x3f, 0x28, 0x2a,
++ 0x26, 0x26, 0x3a, 0x63, 0x3d, 0x02, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x19, 0x25, 0x7b, 0x09, 0x09,
++ 0x3f, 0x09, 0x09, 0x0e, 0x72, 0x04, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xfc, 0x54, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x08, 0x10, 0x3e, 0x22, 0x3e, 0x23, 0x3e, 0x3f,
++ 0x20, 0x3f, 0x0d, 0x3d, 0x31, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x88, 0x40, 0x40, 0x4c,
++ 0x70, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x7c, 0x00, 0x7e,
++ 0x12, 0x12, 0x12, 0x1d, 0x11, 0x12, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x14, 0x12, 0x22, 0x54,
++ 0x0c, 0x08, 0x0c, 0x15, 0x21, 0x42, 0x00, 0x00,
++ 0x20, 0x40, 0xf0, 0x90, 0xf0, 0x90, 0xf0, 0xfc,
++ 0x80, 0xfc, 0x54, 0xbc, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x7e, 0x00, 0x3e,
++ 0x22, 0x22, 0x3e, 0x23, 0x21, 0x02, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x0c, 0x12, 0x7d, 0x08, 0x28, 0x3e, 0x28,
++ 0x48, 0x7f, 0x08, 0x09, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x11, 0x12, 0x27, 0x4c, 0x0f, 0x14, 0x17, 0x37,
++ 0x54, 0x17, 0x13, 0x1f, 0x1c, 0x11, 0x00, 0x00,
++ 0x00, 0x3c, 0x80, 0x80, 0x80, 0xbc, 0x88, 0xe8,
++ 0x08, 0xc8, 0x48, 0x48, 0x48, 0x98, 0x00, 0x00,
++ 0x00, 0x7e, 0x24, 0x24, 0x3c, 0x24, 0x24, 0x3c,
++ 0x24, 0x24, 0x3c, 0x65, 0x05, 0x06, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x0c, 0x16, 0x75, 0x15, 0x14, 0x7f, 0x15, 0x15,
++ 0x1e, 0x72, 0x17, 0x1b, 0x11, 0x31, 0x00, 0x00,
++ 0x10, 0x20, 0x78, 0x48, 0x78, 0x48, 0x78, 0x7c,
++ 0x40, 0x7c, 0x34, 0xf4, 0xc4, 0x18, 0x00, 0x00,
++ 0x06, 0x38, 0x7f, 0x0c, 0x79, 0x1f, 0x04, 0x07,
++ 0x07, 0x07, 0x07, 0x15, 0x12, 0x20, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x70, 0xb4, 0xec, 0x20, 0xe0,
++ 0xe0, 0xfc, 0xf8, 0x48, 0xa8, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x3e, 0x22, 0x23, 0x23, 0x46, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x00, 0x3e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x22, 0x23, 0x23, 0x26, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x2a, 0x2a, 0x2a, 0x2a, 0x3d,
++ 0x4d, 0x48, 0x08, 0x0f, 0x71, 0x02, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x3e, 0x22,
++ 0x22, 0x3e, 0x18, 0x15, 0x25, 0x42, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x14, 0x14, 0x14, 0x7f, 0x14, 0x14, 0x7f, 0x00,
++ 0x3e, 0x22, 0x3e, 0x23, 0x3f, 0x22, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x7f, 0x00, 0x3c, 0x24, 0x3c, 0x00, 0x3e,
++ 0x04, 0x0e, 0x78, 0x09, 0x09, 0x1a, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x1c, 0x1a, 0x29, 0x49, 0x0a, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x7f, 0x6b, 0x5d, 0x7f,
++ 0x18, 0x1c, 0x2a, 0x49, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x10, 0x3e, 0x2a, 0x2a, 0x3e, 0x2a, 0x3e,
++ 0x14, 0x24, 0x7e, 0x05, 0x05, 0x06, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x14, 0x17, 0x29, 0x2e,
++ 0x72, 0x2c, 0x26, 0x2b, 0x31, 0x22, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x77, 0x55, 0x77, 0x00, 0x3c, 0x00, 0x7e,
++ 0x10, 0x1c, 0x24, 0x05, 0x05, 0x1a, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x2a, 0x7f, 0x08, 0x3e, 0x2a, 0x3e,
++ 0x2a, 0x3e, 0x08, 0x7f, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x14, 0x7f, 0x1a, 0x29, 0x5f, 0x04,
++ 0x07, 0x07, 0x07, 0x07, 0x15, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x90, 0x60, 0x9c, 0xe0, 0x20,
++ 0xe0, 0xe0, 0xfc, 0xf8, 0x48, 0xb0, 0x00, 0x00,
++ 0x0c, 0x24, 0x2a, 0x49, 0x14, 0x3e, 0x00, 0x7e,
++ 0x36, 0x5a, 0x36, 0x5b, 0x13, 0x36, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x06, 0x3c, 0x2a, 0x49, 0x14, 0x3c, 0x08, 0x14,
++ 0x3e, 0x08, 0x7e, 0x0d, 0x13, 0x62, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x1c, 0x14, 0x22, 0x3d, 0x40, 0x1c, 0x14, 0x22,
++ 0x7f, 0x2e, 0x2e, 0x2f, 0x71, 0x02, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x2e, 0x2a, 0x7f, 0x41, 0x3e,
++ 0x22, 0x3e, 0x22, 0x3f, 0x23, 0x26, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x7e, 0x12, 0x12, 0x7e, 0x48, 0x7e, 0x5a,
++ 0x36, 0x5a, 0x36, 0x5b, 0x13, 0x6e, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x6b, 0x08, 0x6f, 0x14, 0x12, 0x3f, 0x52,
++ 0x1e, 0x12, 0x1e, 0x13, 0x13, 0x16, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x13, 0x1c, 0x11, 0x0f, 0x2e, 0x2a, 0x2e, 0x2e,
++ 0x2a, 0x2e, 0x3f, 0x2d, 0x13, 0x62, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x22, 0x3e, 0x3e, 0x22,
++ 0x3e, 0x00, 0x7f, 0x0d, 0x13, 0x62, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x10, 0x1e, 0x1a, 0x24, 0x54, 0x18, 0x7e, 0x28,
++ 0x7f, 0x2a, 0x2a, 0x3f, 0x21, 0x22, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x3e, 0x7f, 0x14, 0x7f, 0x3e, 0x09, 0x0f,
++ 0x0f, 0x0f, 0x0f, 0x0f, 0x15, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0xd4, 0xb4, 0x0c, 0xe0,
++ 0xe0, 0xe0, 0xfc, 0xf8, 0x48, 0xb0, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x2a, 0x2a, 0x3f, 0x2a, 0x2e,
++ 0x2a, 0x20, 0x3e, 0x57, 0x57, 0x21, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xec, 0xc4, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x0a, 0x04, 0x7f, 0x1d, 0x64, 0x3f,
++ 0x2d, 0x37, 0x2f, 0x2b, 0x2f, 0x23, 0x00, 0x00,
++ 0x10, 0x20, 0x78, 0x48, 0xf8, 0x48, 0x78, 0x7c,
++ 0x40, 0x7c, 0x34, 0xf4, 0xc4, 0x18, 0x00, 0x00,
++ 0x12, 0x14, 0x3f, 0x68, 0x3e, 0x28, 0x3e, 0x28,
++ 0x3f, 0x04, 0x3e, 0x2f, 0x29, 0x42, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x06, 0x3a, 0x2a, 0x1c, 0x7f, 0x1c, 0x2a, 0x7e,
++ 0x2a, 0x3e, 0x2a, 0x3f, 0x21, 0x22, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x55, 0x32, 0x3f, 0x62, 0x3e,
++ 0x22, 0x3e, 0x2a, 0x29, 0x49, 0x1a, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x0a, 0x11, 0x1a, 0x19, 0x3f, 0x21, 0x4f, 0x0f,
++ 0x08, 0x0f, 0x0f, 0x0f, 0x15, 0x22, 0x00, 0x00,
++ 0xb0, 0x90, 0xb0, 0xb0, 0xfc, 0x08, 0xe0, 0xe0,
++ 0x20, 0xe0, 0xfc, 0xf8, 0x48, 0xb0, 0x00, 0x00,
++ 0x00, 0x3b, 0x2a, 0x3b, 0x3b, 0x2a, 0x3b, 0x1b,
++ 0x24, 0x7f, 0x0a, 0x1e, 0x0d, 0x31, 0x00, 0x00,
++ 0x10, 0xa0, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0x3c,
++ 0xa0, 0xbc, 0x34, 0xf4, 0xc4, 0x18, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x77, 0x55, 0x77, 0x14, 0x3f,
++ 0x68, 0x3e, 0x3e, 0x28, 0x3f, 0x21, 0x00, 0x00,
++ 0x10, 0x20, 0x78, 0x48, 0x78, 0x48, 0x78, 0x7c,
++ 0x40, 0x7c, 0x34, 0xfc, 0xc4, 0x18, 0x00, 0x00,
++ 0x13, 0x17, 0x6b, 0x1b, 0x7f, 0x3a, 0x57, 0x1f,
++ 0x0f, 0x0f, 0x0f, 0x0f, 0x15, 0x22, 0x00, 0x00,
++ 0x90, 0xd4, 0xe8, 0x98, 0xfc, 0xb8, 0xd4, 0xf0,
++ 0xe0, 0xe0, 0xfc, 0xf8, 0x48, 0xb0, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x3f, 0x22, 0x21, 0x2c, 0x23,
++ 0x38, 0x25, 0x23, 0x24, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x48, 0x48, 0x68, 0x98,
++ 0x98, 0x48, 0x28, 0x88, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x1e, 0x11, 0x7f, 0x57, 0x4f, 0x7b,
++ 0x6f, 0x57, 0x73, 0x4b, 0x7e, 0x42, 0x00, 0x00,
++ 0x30, 0x28, 0x28, 0xfc, 0x20, 0xe8, 0x28, 0xe8,
++ 0xb0, 0xf0, 0xb4, 0x2c, 0x4c, 0x04, 0x00, 0x00,
++ 0x01, 0x3d, 0x2a, 0x3f, 0x26, 0x3f, 0x2b, 0x3f,
++ 0x22, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x7c, 0xf8, 0xd8, 0x78, 0xa8, 0xf8,
++ 0x08, 0xf0, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x03, 0x0c, 0x71, 0x1f, 0x12, 0x1f, 0x12,
++ 0x1f, 0x14, 0x17, 0x24, 0x27, 0x58, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x80, 0xfc, 0x40, 0xf8, 0x48,
++ 0xf8, 0x4c, 0xf0, 0x40, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x12, 0x1f, 0x17, 0x17,
++ 0x1c, 0x2f, 0x27, 0x40, 0x1f, 0x00, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x70, 0x44,
++ 0xbc, 0xf8, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x12, 0x1f, 0x27, 0x47,
++ 0x19, 0x09, 0x7f, 0x07, 0x79, 0x01, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x70, 0x44,
++ 0x3c, 0x20, 0xfc, 0xc0, 0x3c, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x1f, 0x12, 0x1f, 0x27, 0x5e, 0x07,
++ 0x14, 0x17, 0x1f, 0x7f, 0x06, 0x78, 0x00, 0x00,
++ 0x80, 0xfc, 0xf8, 0x48, 0xf8, 0x74, 0x3c, 0xe0,
++ 0x20, 0xe0, 0xf0, 0xfc, 0x60, 0x1c, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x2a, 0x3f, 0x2b, 0x2b, 0x3f,
++ 0x34, 0x3d, 0x36, 0x54, 0x5d, 0x33, 0x00, 0x00,
++ 0x48, 0x48, 0x48, 0xfc, 0x48, 0x78, 0x48, 0x78,
++ 0x48, 0xfc, 0x50, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x1f, 0x12, 0x1f, 0x23, 0x4e, 0x1f,
++ 0x17, 0x1f, 0x13, 0x1d, 0x1f, 0x10, 0x00, 0x00,
++ 0x80, 0xfc, 0xf8, 0x48, 0xf8, 0xe4, 0x3c, 0xf0,
++ 0xd0, 0xf0, 0x90, 0x50, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x1f, 0x12, 0x1f, 0x2f, 0x4e, 0x32,
++ 0x1c, 0x1e, 0x10, 0x1f, 0x0c, 0x70, 0x00, 0x00,
++ 0x80, 0xfc, 0xf8, 0x48, 0xf8, 0x70, 0x44, 0x3c,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x1f, 0x1f, 0x12, 0x1f, 0x27, 0x4e, 0x1e,
++ 0x13, 0x1e, 0x1e, 0x7e, 0x1a, 0x66, 0x00, 0x00,
++ 0x80, 0xfc, 0xf8, 0x48, 0xf8, 0x74, 0x3c, 0x10,
++ 0xfc, 0x90, 0x50, 0x50, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x09, 0x19, 0x27, 0x05, 0x19,
++ 0x63, 0x0e, 0x31, 0x01, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0x30, 0xc8, 0x40, 0x30,
++ 0xec, 0x20, 0x40, 0xc0, 0x20, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x2a, 0x2a, 0x5d, 0x1a, 0x29,
++ 0x4e, 0x12, 0x2c, 0x45, 0x1b, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x50, 0x50, 0x88, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x08, 0x7f, 0x10,
++ 0x1e, 0x32, 0x4c, 0x05, 0x1b, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x50, 0x50, 0x88, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x2a, 0x2a, 0x5d, 0x1c, 0x2a,
++ 0x4e, 0x12, 0x2c, 0x44, 0x1a, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xa0, 0xb8, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0x88, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x2a, 0x2a, 0x5d, 0x1c, 0x2a,
++ 0x4e, 0x12, 0x2c, 0x44, 0x1b, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0xe8, 0xa8, 0xa8, 0xe8,
++ 0xb0, 0x80, 0x84, 0x7c, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x17, 0x17, 0x1a, 0x11,
++ 0x1f, 0x1f, 0x21, 0x3f, 0x42, 0x0c, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xfc, 0x38, 0xbc, 0xd4, 0x40,
++ 0x7c, 0x78, 0xc0, 0x7c, 0x40, 0x40, 0x00, 0x00,
++ 0x0a, 0x11, 0x1a, 0x19, 0x3f, 0x24, 0x5f, 0x07,
++ 0x7f, 0x0f, 0x0f, 0x09, 0x0f, 0x38, 0x00, 0x00,
++ 0xb0, 0x90, 0xb0, 0xb0, 0xfc, 0x48, 0xf0, 0xc0,
++ 0xfc, 0xe0, 0xe0, 0x20, 0xe0, 0x38, 0x00, 0x00,
++ 0x06, 0x38, 0x08, 0x7f, 0x1c, 0x2a, 0x49, 0x0a,
++ 0x0d, 0x79, 0x05, 0x07, 0x39, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x28, 0x48, 0x88, 0x30, 0x80,
++ 0x60, 0x3c, 0xc0, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x06, 0x38, 0x08, 0x7f, 0x1c, 0x2a, 0x4d, 0x1c,
++ 0x6b, 0x2e, 0x1c, 0x6b, 0x08, 0x18, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x3c, 0x20, 0x20, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x06, 0x38, 0x09, 0x7f, 0x1c, 0x2a, 0x49, 0x1c,
++ 0x2a, 0x6d, 0x1d, 0x6b, 0x09, 0x19, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x98, 0xe8, 0xb8, 0xc8, 0xf8,
++ 0x20, 0xfc, 0x54, 0xec, 0x04, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x35, 0x2f, 0x2d, 0x3f, 0x04, 0x3f,
++ 0x06, 0x78, 0x1a, 0x2d, 0x2d, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x50, 0x50, 0x88, 0x74, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x35, 0x2f, 0x2d, 0x3f, 0x04, 0x3f,
++ 0x06, 0x78, 0x1a, 0x2d, 0x2d, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xa8, 0xa8, 0xa8, 0xf8, 0xa8, 0x20,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x35, 0x2f, 0x2d, 0x3f, 0x04, 0x3f,
++ 0x06, 0x78, 0x1a, 0x2d, 0x2d, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x3c, 0x20, 0x20, 0x20, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3e, 0x2a, 0x2e, 0x3b, 0x3f, 0x08, 0x3e,
++ 0x0c, 0x71, 0x1f, 0x2e, 0x2e, 0x40, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0x90, 0x50, 0x7c, 0xd4, 0x94,
++ 0xd4, 0x54, 0xe4, 0x24, 0x44, 0x98, 0x00, 0x00,
++ 0x00, 0x3f, 0x35, 0x2f, 0x2d, 0x3f, 0x04, 0x3f,
++ 0x06, 0x78, 0x1a, 0x2d, 0x2d, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x00,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x35, 0x2f, 0x2d, 0x3f, 0x04, 0x3f,
++ 0x06, 0x78, 0x1a, 0x2d, 0x2d, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x00, 0x78, 0x48, 0x48, 0x78,
++ 0x10, 0x58, 0x54, 0x94, 0x10, 0x30, 0x00, 0x00,
++ 0x09, 0x05, 0x3f, 0x27, 0x47, 0x1f, 0x19, 0x15,
++ 0x1f, 0x3f, 0x01, 0x7f, 0x24, 0x42, 0x00, 0x00,
++ 0x20, 0x40, 0xfc, 0xc8, 0xc0, 0xf0, 0x30, 0x50,
++ 0xf0, 0xf8, 0x00, 0xfc, 0x88, 0x44, 0x00, 0x00,
++ 0x00, 0x3f, 0x35, 0x2f, 0x2d, 0x3f, 0x04, 0x3f,
++ 0x06, 0x78, 0x1a, 0x2d, 0x2d, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x48, 0x30, 0xfc, 0x00, 0x78,
++ 0x48, 0x78, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x12, 0x1a, 0x2f, 0x5f, 0x1f, 0x1b, 0x2e, 0x6f,
++ 0x2f, 0x22, 0x3f, 0x2f, 0x2b, 0x30, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xe0, 0xbc, 0xe8, 0xe8, 0xa8,
++ 0x98, 0x10, 0xd8, 0xa8, 0xc4, 0x84, 0x00, 0x00,
++ 0x00, 0x1f, 0x17, 0x17, 0x1f, 0x2f, 0x4f, 0x0f,
++ 0x0d, 0x0f, 0x1f, 0x7f, 0x24, 0x42, 0x00, 0x00,
++ 0x00, 0xfc, 0x14, 0x7c, 0x90, 0xb0, 0xc8, 0xe4,
++ 0x60, 0xe0, 0xf0, 0xfc, 0x88, 0x44, 0x00, 0x00,
++ 0x00, 0x3f, 0x2a, 0x2e, 0x3b, 0x3f, 0x09, 0x3e,
++ 0x0c, 0x70, 0x1e, 0x2e, 0x28, 0x43, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0xfc, 0x5c, 0xfc, 0xf8,
++ 0x88, 0xf8, 0xf8, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x02, 0x12, 0x0a, 0x7f, 0x11, 0x11, 0x3f, 0x51,
++ 0x15, 0x15, 0x15, 0x19, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0x90, 0xa0, 0xfc, 0x10, 0x08, 0xf4, 0x14,
++ 0x50, 0x50, 0x50, 0x50, 0x10, 0x30, 0x00, 0x00,
++ 0x14, 0x55, 0x36, 0x7f, 0x0a, 0x29, 0x7f, 0x2a,
++ 0x3e, 0x3e, 0x3e, 0x2b, 0x2a, 0x27, 0x00, 0x00,
++ 0x30, 0x28, 0x28, 0x20, 0xfc, 0x20, 0x28, 0x28,
++ 0x68, 0x70, 0x90, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x14, 0x55, 0x36, 0x7f, 0x0a, 0x29, 0x7f, 0x2a,
++ 0x3e, 0x3e, 0x3e, 0x2a, 0x2a, 0x26, 0x00, 0x00,
++ 0x28, 0x24, 0xfc, 0x20, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0x98, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x3e, 0x02, 0x3e, 0x22, 0x3e,
++ 0x22, 0x22, 0x3e, 0x22, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x80, 0xf8, 0x88, 0xf8,
++ 0x88, 0x88, 0xf8, 0x88, 0x04, 0xfc, 0x00, 0x00,
++ 0x08, 0x3e, 0x7f, 0x08, 0x7f, 0x1e, 0x26, 0x5f,
++ 0x1e, 0x3e, 0x3e, 0x22, 0x3e, 0x21, 0x00, 0x00,
++ 0x20, 0x20, 0x7c, 0xc8, 0x30, 0x30, 0xcc, 0xf0,
++ 0xf0, 0xf8, 0xf8, 0x88, 0xfc, 0xfc, 0x00, 0x00,
++ 0x2a, 0x49, 0x7f, 0x5d, 0x6b, 0x49, 0x1f, 0x1e,
++ 0x32, 0x22, 0x3a, 0x3a, 0x22, 0x01, 0x00, 0x00,
++ 0x40, 0x7c, 0xc8, 0x28, 0x30, 0xcc, 0xf0, 0xf0,
++ 0xf8, 0x88, 0xf8, 0xf8, 0x84, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x00, 0x3e, 0x22,
++ 0x3e, 0x24, 0x15, 0x1f, 0x1a, 0x65, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0xa8, 0xa0, 0xf8, 0xc8,
++ 0xd0, 0xb0, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x1e, 0x12, 0x1e, 0x0f, 0x73,
++ 0x06, 0x19, 0x07, 0x79, 0x00, 0x07, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x50, 0x70, 0x8c, 0xe0,
++ 0x40, 0x80, 0xe0, 0x9c, 0xc0, 0x00, 0x00, 0x00,
++ 0x02, 0x11, 0x09, 0x08, 0x1f, 0x11, 0x11, 0x1f,
++ 0x11, 0x11, 0x1f, 0x21, 0x21, 0x41, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x40, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0xf4, 0x0c, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x36, 0x22, 0x36, 0x22, 0x3e, 0x2a, 0x2a,
++ 0x3e, 0x2a, 0x3d, 0x29, 0x3e, 0x48, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8,
++ 0xa8, 0xf8, 0x88, 0x04, 0xc4, 0x3c, 0x00, 0x00,
++ 0x08, 0x1e, 0x12, 0x1e, 0x1e, 0x1e, 0x3f, 0x3f,
++ 0x25, 0x3f, 0x7f, 0x12, 0x12, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0xa0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x7f, 0x02, 0x7d, 0x15, 0x15, 0x2d, 0x48,
++ 0x0f, 0x08, 0x0f, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x70, 0x50, 0x50, 0xe8, 0x24,
++ 0xe0, 0x20, 0xe0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x09, 0x7f, 0x24, 0x2a, 0x33,
++ 0x3f, 0x24, 0x2a, 0x33, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0xfc, 0x48, 0xa8, 0x28,
++ 0xf8, 0x48, 0xa8, 0x28, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2a, 0x2a, 0x35,
++ 0x3f, 0x2a, 0x2a, 0x35, 0x3f, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0x20, 0xe4, 0xa4, 0xa8, 0xb0,
++ 0xa0, 0xa0, 0xa0, 0xa4, 0xa4, 0x9c, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x78, 0x88, 0xe8, 0xa8, 0xa8,
++ 0xe8, 0xa8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0xc8, 0x78, 0x48, 0x48,
++ 0x78, 0x48, 0x48, 0x48, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0x28, 0xa8, 0x48, 0xb0, 0x00,
++ 0x78, 0x48, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x74, 0x00, 0xf8,
++ 0x28, 0x28, 0x30, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0xf8, 0x48, 0x48, 0x78,
++ 0x64, 0x68, 0x50, 0x50, 0x68, 0x84, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x0e, 0x79, 0x09, 0x7f, 0x26,
++ 0x29, 0x3f, 0x26, 0x29, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x88, 0x30, 0xf0, 0xfc, 0x48,
++ 0xa8, 0xf8, 0x48, 0xa8, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0xf8, 0x48, 0x48, 0xfc,
++ 0x00, 0x78, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0xc8, 0x78, 0x10, 0x50,
++ 0x5c, 0x50, 0x50, 0x70, 0x90, 0x0c, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x78, 0xc0, 0x7c, 0x58, 0x54,
++ 0x7c, 0x50, 0x7c, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0xf8, 0xa8, 0xa8, 0xf8, 0x20,
++ 0xfc, 0xd4, 0xfc, 0x84, 0x84, 0x8c, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xfc, 0xb4, 0xfc, 0x00, 0x78, 0x00, 0xfc,
++ 0x20, 0x38, 0x48, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x7f, 0x08, 0x0f, 0x3f, 0x12,
++ 0x7f, 0x1e, 0x1e, 0x1e, 0x12, 0x16, 0x00, 0x00,
++ 0x00, 0x80, 0xe0, 0xfc, 0x20, 0xe0, 0xf8, 0xf0,
++ 0x10, 0xf0, 0xf0, 0xf0, 0xf4, 0x7c, 0x00, 0x00,
++ 0x02, 0x07, 0x19, 0x7f, 0x12, 0x1e, 0x3a, 0x7e,
++ 0x3a, 0x3a, 0x7e, 0x0a, 0x3a, 0x01, 0x00, 0x00,
++ 0x00, 0xc0, 0x00, 0xf0, 0x90, 0xf0, 0x80, 0xf8,
++ 0xd8, 0xa8, 0xd8, 0xfc, 0x84, 0xfc, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x1f, 0x60, 0x3b, 0x2a, 0x3b,
++ 0x00, 0x1f, 0x12, 0x1f, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0xf0, 0x0c, 0xb8, 0xa8, 0xb8,
++ 0x00, 0xf0, 0x90, 0xf0, 0x90, 0xb0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x3f, 0x08, 0x3e, 0x08, 0x0f,
++ 0x70, 0x3f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xf8, 0x20, 0xf8, 0x20, 0xfc,
++ 0x00, 0xf8, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x08, 0x0b, 0x00, 0x00,
++ 0x98, 0xe0, 0x84, 0x7c, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0xfc, 0xd8, 0x04, 0x00, 0x00,
++ 0x20, 0x10, 0x11, 0x46, 0x21, 0x2f, 0x02, 0x77,
++ 0x12, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf8, 0x90, 0x60, 0x80, 0xf8, 0x40, 0xfc,
++ 0x48, 0x48, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x11, 0x16, 0x10, 0x7f, 0x11,
++ 0x12, 0x17, 0x1e, 0x62, 0x03, 0x02, 0x00, 0x00,
++ 0x40, 0x78, 0xc8, 0x30, 0xa0, 0xc0, 0x00, 0xf8,
++ 0x40, 0xfc, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00
++};
+diff -Nur linux_c860_org/drivers/video/shepherdLogoMsg.c linux/drivers/video/shepherdLogoMsg.c
+--- linux_c860_org/drivers/video/shepherdLogoMsg.c 2003-07-12 18:18:36.000000000 +0900
++++ linux/drivers/video/shepherdLogoMsg.c 2004-06-10 21:09:11.000000000 +0900
+@@ -2,147 +2,257 @@
+ #ifndef __initdata
+ #define __initdata
+ #endif
+-static const int logo_msg_width __initdata = 20;
+-static const int logo_msg_height __initdata = 140;
+-static const unsigned short logo_msg_data[20*140] __initdata ={
+- 0xffff,0x3186,0x0000,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0861,0x0861,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x0841,0x18e3,
+- 0xffff,0x39e7,0x10a2,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x2104,0x18c3,0x0000,0x0000,0x18c3,0x2104,0x18e3,0x18e3,0x2104,0x18c3,0x0000,0x0861,
+- 0xad37,0x83f3,0x83f3,0x8bf3,0x8bf3,0x8bf3,0x8bf3,0x8bf3,0x8c33,0x7b91,0x0862,0x0862,0x7b90,0x8c33,0x8bf3,0x8bf3,0x8c33,0x7b91,0x1062,0x0841,
+- 0xb558,0xa4b6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4f7,0xa4d6,0x83f3,0x1082,0x1082,0x9454,0xa4d6,0xa4d6,0xa4f7,0xa4d6,0x83f3,0x1082,0x0841,
+- 0xf79e,0xf77e,0xf79e,0xf79e,0xf79e,0xf79e,0xf79e,0xf79e,0xe73d,0x8c33,0x1082,0x18c3,0xd6ba,0xf79e,0xf79e,0xf79e,0xe73d,0x8c33,0x1082,0x0841,
+- 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x8c33,0x1082,0x18c3,0xdefb,0xffff,0xffff,0xffff,0xf79e,0x8c34,0x1082,0x0841,
+- 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x8c33,0x1082,0x18c3,0xdefb,0xffff,0xffff,0xffff,0xf79e,0x8c33,0x1082,0x0841,
+- 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x8c33,0x1082,0x18c3,0xdefb,0xffff,0xffff,0xffff,0xf79e,0x8c33,0x1082,0x0841,
+- 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x8c33,0x1082,0x18c3,0xe71c,0xffff,0xffff,0xffff,0xf79e,0x9454,0x1082,0x0841,
+- 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x8c33,0x1082,0x10a2,0xce59,0xffff,0xffff,0xffff,0xf79e,0x83d2,0x0862,0x0841,
+- 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x9454,0x20e4,0x0000,0x3186,0xd69a,0xef7d,0xef7d,0xc639,0x18e4,0x0000,0x2104,
+- 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0xa4d6,0x7bb1,0x3166,0x18c3,0x2124,0x2124,0x2124,0x2104,0x1062,0x20e4,0xbdf7,
+- 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xad37,0x9475,0x9cb5,0xb5b7,0x2965,0x10a2,0x1082,0x20e4,0x7370,0x9475,0xffff,
+- 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73d,0xad37,0xa4d6,0xa4f7,0x9474,0x9454,0x9454,0x8c34,0xad17,0xe71d,0xffff,
+- 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0xef3d,0xad17,0xa4b6,0xa4b6,0xad17,0xef3d,0xf7bf,0xffff,0xffff,
+- 0xffff,0xe71c,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xd69a,0xd69a,0xd69a,0xd69a,0xdefb,0xdefb,0xdefb,0xdefb,
+- 0xffff,0x39e7,0x1082,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x10a2,0x2124,
+- 0xf79e,0x39c7,0x1082,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x10a2,0x2124,
+- 0xb558,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c13,0x9454,0xdefb,
+- 0xb558,0x9cb6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4b6,0xa4f7,0xffff,
+- 0xf79e,0xf77e,0xf79e,0xf79e,0xef7e,0xd6ba,0xce7a,0xd69a,0xd69a,0xce7a,0xd6ba,0xef7e,0xf79e,0xf79e,0xf79e,0xf79e,0xf79e,0xf77e,0xf79e,0xffff,
+- 0xffff,0xffff,0xffff,0xf79e,0xce79,0x3186,0x10a2,0x2104,0x2104,0x10a2,0x3186,0xce79,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xffff,0xce79,0x39e7,0x18e3,0x20e4,0x18c3,0x0000,0x0000,0x18c3,0x2104,0x18e3,0x39e7,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xe73c,0x31a6,0x0000,0x18e4,0x83f2,0x83f2,0x1062,0x0862,0x8c12,0xc618,0x2965,0x0000,0x39c7,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xb5b7,0x0841,0x18c3,0x83f2,0xa4d6,0x83f3,0x1082,0x1082,0x9454,0xa4d7,0x8c53,0x2124,0x1082,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xf7be,0x2945,0x0841,0x83d1,0xef5e,0xef5d,0x8c33,0x1082,0x18c3,0xce7a,0xad17,0x9c75,0x83f2,0x1082,0x31a6,0xe73c,0xffff,0xffff,0xffff,0xffff,
+- 0xe73d,0x1082,0x1082,0xce7a,0xffff,0xf79e,0x8c33,0x1082,0x18c3,0xdefb,0xef5d,0xad17,0x8c34,0x18e3,0x10a2,0xdedb,0xffff,0xffff,0xffff,0xffff,
+- 0xb558,0x1082,0x18c3,0xe71c,0xffff,0xf79e,0x8c33,0x1082,0x18c3,0xdefb,0xffff,0xe73d,0x7bb1,0x0861,0x3186,0xe73c,0xffff,0xffff,0xffff,0xffff,
+- 0xa4f7,0x2105,0x1082,0xc638,0xffff,0xf79e,0x8c33,0x1082,0x18c3,0xe71c,0xffff,0xc639,0x18c3,0x0841,0xbdb7,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xa4f7,0x7bb1,0x1082,0x2965,0xce79,0xf79e,0x8c33,0x1082,0x10a2,0xce59,0xd69a,0x2945,0x0000,0x2125,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xad38,0x9454,0x31a6,0x0000,0x3186,0xdefc,0x9454,0x1082,0x0000,0x18c3,0x18e3,0x0862,0x2104,0xbdb7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xe73d,0x9cb6,0x8412,0x2945,0x3186,0xdedb,0x9474,0x2105,0x18c3,0x1082,0x20e4,0x7370,0x9cd5,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xf7be,0xad38,0x9475,0x9cb5,0xdefb,0xf79e,0xa4d6,0x83f3,0x8c33,0x8c33,0x8c33,0xad37,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xef5d,0xad17,0x9cb5,0xdedb,0xd69a,0x9cb5,0xa4d6,0xa4b6,0xad17,0xef3d,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xffff,0xc638,0x3186,0x10a2,0x10a2,0x3186,0xc618,0xf77e,0xf79e,0xffdf,0xdefb,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xd69a,0x3186,0x0000,0x10a2,0x10a2,0x0000,0x31a6,0xd69a,0xffff,0xe71c,0x31a6,0x2965,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0x39c7,0x0000,0x20e4,0x83f2,0x8c33,0x2966,0x0000,0x39c7,0xef5d,0xdedb,0x31a6,0x0861,0x3186,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xef5e,0x18a3,0x0841,0x7bb1,0xa4b6,0x9c75,0x8412,0x1082,0x18e3,0xd6ba,0xad37,0x9c95,0xb576,0x1082,0x3186,0xe73c,0xffff,0xffff,0xffff,0xffff,
+- 0xb558,0x1082,0x10a2,0xd69a,0xef5e,0xad37,0x8c13,0x18e4,0x10a2,0xc618,0xad38,0x9cb6,0x9494,0x18e3,0x18c3,0xdefb,0xffff,0xffff,0xffff,0xffff,
+- 0xa4f7,0x2104,0x0861,0xc638,0xffff,0xef3d,0x9cb6,0x7b91,0x10a2,0x39c7,0xdefb,0xe71d,0x8c33,0x1082,0x18c3,0xdefb,0xffff,0xffff,0xffff,0xffff,
+- 0xa4f7,0x83f2,0x3186,0x2965,0xce79,0xf7be,0xad17,0x8c34,0x18e3,0x18c3,0xdefb,0xf79e,0x83d2,0x0861,0x18c3,0xdefb,0xffff,0xffff,0xffff,0xffff,
+- 0xad38,0x9cb6,0xad76,0x0861,0x2965,0xce59,0xd69b,0x7bb1,0x1082,0x10a2,0xce59,0xce59,0x20e4,0x0000,0x31a6,0xe73c,0xffff,0xffff,0xffff,0xffff,
+- 0xef5d,0x8c33,0x2125,0x0000,0x0000,0x18c3,0x2104,0x1082,0x0000,0x0000,0x18e3,0x18c3,0x0000,0x18e4,0xc618,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0x3186,0x0000,0x0862,0x18c3,0x10a2,0x1082,0x0861,0x1082,0x18c3,0x1082,0x0841,0x18c3,0x8c33,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xef5e,0x2125,0x18c3,0x7370,0x8c33,0x8c13,0x8c13,0x83d2,0x83d2,0x8c13,0x8c13,0x7bb2,0x9454,0xef3d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xad58,0x83f3,0x9454,0xa4d6,0xa4b6,0xa4b6,0xa4b6,0xa4d6,0xa4d6,0xa4b6,0x9cb6,0xad17,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xad37,0xad17,0xd67a,0xd67a,0xd69a,0xef5d,0xef7e,0xef7e,0xef5e,0xd69a,0xce7a,0xd67a,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xf79e,0xdedb,0x4208,0x1082,0x39c7,0xe71c,0xffff,0xffff,0xce79,0x39c7,0x18c3,0x18c3,0x39c7,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xbdf7,0x10a2,0x0841,0x39c7,0xe71c,0xffff,0xe71c,0x31a6,0x0000,0x18c3,0x18c3,0x0000,0x3186,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xf7be,0x2925,0x0861,0x83f2,0xdefc,0xffdf,0xffff,0xce5a,0x1082,0x0862,0x83d2,0x9453,0x2966,0x0000,0x39c7,0xe73c,0xffff,0xffff,0xffff,0xffff,
+- 0xe73d,0x1082,0x1082,0x9c95,0xf79e,0xffff,0xf79e,0x8c33,0x0862,0x1082,0x8c33,0x9c75,0x8412,0x1082,0x18c3,0xdefb,0xffff,0xffff,0xffff,0xffff,
+- 0xad38,0x10a3,0x18c3,0xd6bb,0xffff,0xffff,0xdedb,0x2925,0x0000,0x31a6,0xd69a,0xad37,0x83f3,0x1082,0x18c3,0xdefb,0xffff,0xffff,0xffff,0xffff,
+- 0xa4f7,0x10a3,0x18c3,0xe71c,0xffff,0xffff,0xce5a,0x1082,0x0861,0xbdf7,0xffff,0xef3d,0x8c33,0x1082,0x18c3,0xdefb,0xffff,0xffff,0xffff,0xffff,
+- 0xa4f7,0x10a3,0x1082,0xce59,0xffff,0xf7be,0x8c33,0x0861,0x1082,0xd69a,0xffff,0xf79e,0x7bd1,0x0861,0x3166,0xe73c,0xffff,0xffff,0xffff,0xffff,
+- 0xa4f7,0x2925,0x0000,0x3186,0xd69a,0xc639,0x20e4,0x0000,0x3186,0xe73c,0xffff,0xc618,0x18c3,0x0841,0xbdb7,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xa4f7,0x83d2,0x2945,0x0000,0x18c3,0x18c3,0x0000,0x18e4,0xc618,0xffff,0xe73c,0x2966,0x0000,0x2125,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xb558,0x9c75,0x8c33,0x3186,0x1082,0x0862,0x18e4,0x8c33,0xf79e,0xffff,0xce7a,0x18e4,0x18c3,0xbdb7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xef5d,0xad17,0x9475,0x8c54,0x8c33,0x83f3,0x9cb5,0xef5d,0xffff,0xf79e,0xad17,0x83f3,0x9c95,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xef5d,0xad37,0xa4b6,0xa4b6,0x9cb5,0xce7a,0xdefb,0xdefb,0xd69a,0x9c95,0xad17,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xffff,0xf77e,0xdedb,0xbdf7,0x2965,0x10a2,0x2104,0x2104,0x10a2,0x2965,0xbdd7,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xffff,0xce59,0x31a6,0x10a2,0x18e3,0x18c3,0x0000,0x0000,0x18c3,0x2104,0x10a2,0x31a6,0xce59,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xe73c,0x39a7,0x0000,0x18e4,0x83f2,0x83f2,0x1062,0x0862,0x8c12,0xbdf8,0x2965,0x0000,0x39c7,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xb596,0x0841,0x18c3,0x83f2,0xa4d6,0x83f3,0x1082,0x1082,0x9454,0xa4d6,0x8c33,0x2125,0x1082,0xc618,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xf7be,0x2125,0x0841,0x83f2,0xef5e,0xef5d,0x8c33,0x1082,0x18c3,0xce7a,0xad17,0x9c75,0x8c12,0x1082,0x3186,0xe73c,0xffff,0xffff,0xffff,0xffff,
+- 0xe73d,0x1082,0x1082,0xce7a,0xffff,0xf79e,0x8c33,0x1082,0x18c3,0xdefb,0xef5d,0xad17,0x8c34,0x18e3,0x10a2,0xdedb,0xffff,0xffff,0xffff,0xffff,
+- 0xad38,0x1082,0x18c3,0xe71c,0xffff,0xf79e,0x8c33,0x1082,0x18c3,0xdefb,0xffff,0xef3d,0x7bb1,0x0861,0x3186,0xe73c,0xffff,0xffff,0xffff,0xffff,
+- 0xa4f7,0x2105,0x1082,0xc638,0xffff,0xf79e,0x8c33,0x1082,0x18c3,0xe71c,0xffff,0xc639,0x18c3,0x0841,0xbdb7,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xa4f7,0x7bb1,0x1082,0x2965,0xce79,0xf79e,0x8c33,0x1082,0x10a2,0xce59,0xd69a,0x2945,0x0000,0x2125,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xad38,0x9454,0x31a6,0x0000,0x3186,0xdefc,0x9454,0x1082,0x0000,0x18c3,0x18e3,0x0862,0x2104,0xbdb7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xe73d,0x9cb6,0x8412,0x2945,0x3186,0xdedb,0x9474,0x2105,0x18c3,0x1082,0x20e4,0x7370,0x9cd5,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xf7be,0xad38,0x9475,0x9494,0xd6bb,0xf77e,0xa4d6,0x83f3,0x8c33,0x8c33,0x8c33,0xad37,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xef5d,0xad17,0xad17,0xf7be,0xf7bf,0xb558,0xa4d6,0xa4b6,0xad17,0xef3d,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xffff,0xf79e,0xf79e,0xffff,0xffff,0xf79e,0xf77e,0xf77e,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0xdefb,0xffdf,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0xef5d,0xce79,0x2945,0x2965,0xe71c,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0xe71c,0xce59,0x39c7,0x18e3,0x2124,0x10a2,0x39c7,0xe71c,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xffff,0xffff,0xffff,0xe71c,0xe71c,0xce59,0x3186,0x10a2,0x18e3,0x18e3,0x1082,0x18e4,0x83f2,0xdefb,0xffdf,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xe71c,0xe73c,0xce59,0x31a6,0x10a2,0x18e3,0x18e3,0x1082,0x20e4,0x83d2,0x9474,0x8c34,0xad37,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0x4208,0x18e3,0x2104,0x0020,0x10a2,0x2125,0x83d2,0x9454,0x8c33,0x9cb6,0xad17,0xef3d,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xf79e,0x39e7,0x0861,0x0000,0x0862,0x734f,0x8c33,0x8c33,0x9cb5,0xef3d,0xf79e,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xb558,0x9474,0x83d2,0x20e4,0x1082,0x2125,0x2945,0x10a2,0x2965,0xbdf7,0xe71c,0xdefb,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xb558,0x9cb6,0x9475,0x8c34,0xc619,0xb596,0x2945,0x10a2,0x2104,0x2965,0x2124,0x18c3,0x31a6,0xc638,0xe73c,0xffdf,0xffff,0xffff,0xffff,0xffff,
+- 0xf7bf,0xef3d,0xad37,0xa4f7,0xad37,0xad17,0x9454,0x9494,0xd69b,0xb5b7,0x18c3,0x0000,0x0000,0x1082,0x39c7,0xe71c,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xffff,0xf79e,0xf79e,0xe71d,0xad17,0x9454,0x9454,0x9cb5,0x7bb1,0x1082,0x0000,0x0000,0x1082,0x39c7,0xe71c,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xffff,0xffff,0xe73c,0xef5d,0xbdf7,0x2965,0x10a2,0x18e3,0x18a3,0x1082,0x0841,0x18e4,0x8412,0xdedb,0xffdf,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xef5d,0xce59,0x39e7,0x2945,0x39e7,0x2945,0x10a2,0x2945,0x7370,0x83d2,0x7bb2,0x8c13,0xad37,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0x4208,0x0861,0x0000,0x10a2,0x7390,0x8c13,0x8c34,0x9c95,0xa4d6,0xa4b6,0xad17,0xef3d,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xf7bf,0x31a7,0x0861,0x1082,0x0020,0x1082,0x2925,0x8c33,0xce7a,0xd6bb,0xef5d,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xb558,0x8413,0x83d2,0x7bb1,0x2945,0x1082,0x18c3,0x2104,0x18e3,0x31a6,0xce79,0xe73c,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xb558,0xa4b6,0xa4d6,0x9c95,0x9454,0x9cb5,0xbdb7,0x2965,0x10a2,0x18e3,0x18e3,0x10a2,0x3186,0xc638,0xe73c,0xffdf,0xffff,0xffff,0xffff,0xffff,
+- 0xf77e,0xf77e,0xe73d,0xad37,0x9cb6,0xa4d6,0xa4f7,0x9454,0x9c95,0xbdb7,0x2965,0x10a2,0x18e3,0x10a2,0x39c7,0xe71c,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xffff,0xffff,0xf79e,0xf79e,0xef3d,0xad17,0xa4b6,0xa4d7,0xa4d6,0x8c33,0x9c95,0xb5b7,0x2104,0x2945,0xe71c,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xffff,0xffff,0xe71c,0xdefb,0xdedb,0xd6bb,0xf79e,0xef3d,0xad17,0xa4b6,0xa4d7,0xa4b6,0x9474,0xce59,0xffdf,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xffff,0xce79,0x31a6,0x10a2,0x10a2,0x31a6,0xce79,0xffff,0xf79e,0xef7e,0xce39,0x9454,0xa4f7,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xce79,0x2965,0x0000,0x10a3,0x18c3,0x0000,0x3186,0xce79,0xffff,0xe71c,0x3186,0x2124,0xc5f8,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0x39e7,0x0000,0x18e4,0x83d2,0x8c33,0x2945,0x0000,0x39e7,0xef5d,0xdedb,0x3186,0x0841,0x31a6,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xef5e,0x10a3,0x0841,0x7bd1,0xa4d6,0x9c75,0x83f2,0x1082,0x18e3,0xd6bb,0xad17,0x9495,0xad76,0x1082,0x3186,0xe73c,0xffff,0xffff,0xffff,0xffff,
+- 0xb558,0x1082,0x10a2,0xd67a,0xef5d,0xad17,0x8c13,0x2105,0x10a2,0xbdf7,0xad37,0x9c96,0x9c95,0x18e3,0x18c3,0xdefb,0xffff,0xffff,0xffff,0xffff,
+- 0xa4f7,0x20e4,0x0862,0xce79,0xffff,0xef3d,0x9cb6,0x7bd1,0x10a2,0x3186,0xdedb,0xe71d,0x8c33,0x1082,0x18c3,0xdefb,0xffff,0xffff,0xffff,0xffff,
+- 0xa4f7,0x83d2,0x3186,0x31a6,0xce79,0xf7be,0xad37,0x8c34,0x18e3,0x18c3,0xdefb,0xf79e,0x83d2,0x0861,0x18c3,0xdefb,0xffff,0xffff,0xffff,0xffff,
+- 0xad37,0x9cb6,0xb576,0x0861,0x2965,0xce59,0xd6bb,0x7bb1,0x1082,0x10a2,0xce59,0xce59,0x20e4,0x0000,0x31a6,0xe73c,0xffff,0xffff,0xffff,0xffff,
+- 0xef3d,0x8c33,0x2925,0x0000,0x0000,0x18c3,0x2104,0x1062,0x0000,0x0000,0x18e3,0x18c3,0x0000,0x18e4,0xc618,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0x3186,0x0000,0x1082,0x2104,0x18c3,0x18c3,0x1082,0x10a3,0x18e3,0x18c3,0x0862,0x18e4,0x8c33,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xef5e,0x2125,0x18c3,0x7b91,0x9454,0x9454,0x8c33,0x83f2,0x83f2,0x8c33,0x8c33,0x83d2,0x9494,0xef3d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xad58,0x83f3,0x8c54,0xa4f7,0xa4d6,0xa4d6,0xa4d6,0xa4f7,0xa4f7,0xa4d6,0xa4b6,0xad37,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xad37,0xad17,0xef3d,0xf79e,0xf79e,0xf79e,0xf79e,0xf79e,0xf79e,0xf79e,0xf77e,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xf79e,0xd6bb,0xdedb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xe71c,0xffff,0xffff,0xe71c,0xdedb,0xdefb,
+- 0xffff,0x39e7,0x1082,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x10a2,0x31a6,0xe73c,0xe73c,0x31a6,0x0861,0x2124,
+- 0xf79e,0x39c7,0x1082,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x1082,0x31a6,0xe73c,0xdedb,0x31a6,0x0861,0x2124,
+- 0xb558,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x9474,0xd6bb,0xf79e,0xad37,0x8c13,0x8c53,0xdefb,
+- 0xb558,0x9cb6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4b6,0xad37,0xf7be,0xf7be,0xad37,0x9cb6,0xa4f7,0xffff,
+- 0xf79e,0xf77e,0xf79e,0xf79e,0xf79e,0xf79e,0xf79e,0xf79e,0xf79e,0xf79e,0xf79e,0xf79e,0xef7e,0xd69a,0xdefb,0xffdf,0xf79e,0xf77e,0xf79e,0xffff,
+- 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0x31a6,0x31a6,0xe73c,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xffff,0xe71c,0xdedb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xe73c,0xbdd7,0x10a2,0x10a2,0xc618,0xe73c,0xdedb,0xe71c,0xffdf,
+- 0xffff,0xce79,0x31a6,0x10a2,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x18e3,0x1082,0x0000,0x0020,0x18c3,0x18e3,0x10a2,0x31a6,0xe71c,
+- 0xffff,0x39c7,0x0000,0x18c3,0x18e3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x18c3,0x1082,0x0000,0x0020,0x18c3,0x18e3,0x1082,0x31a6,0xe71c,
+- 0xef5d,0x10a3,0x0861,0x7bb1,0x9454,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x8c33,0x9454,0x7370,0x0861,0x0861,0x7bb1,0x9454,0x9474,0xd6bb,0xffdf,
+- 0xb558,0x2105,0x20e4,0x9454,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0xa4d6,0x8c13,0x20e4,0x20e4,0x9454,0xa4b6,0xad37,0xf79e,0xffff,
+- 0xa4f7,0x8c33,0xce39,0xf77e,0xf79e,0xf79e,0xf79e,0xf79e,0xf79e,0xf79e,0xf79e,0xe73d,0x9cb6,0x8c13,0xce39,0xf77e,0xf77e,0xf79e,0xffff,0xffff,
+- 0xb558,0xad37,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xad37,0xad37,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xf79e,0xd6ba,0xdedb,0xe71c,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0x39e7,0x0841,0x31a6,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xf79e,0x39c7,0x0841,0x31a6,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xb558,0x8c13,0x9474,0xd6bb,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xb558,0x9c96,0xad37,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xf79e,0xef7e,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xe71c,0xdedb,0xe71c,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0x39e7,0x0841,0x31a6,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xf79e,0x39c7,0x0841,0x31a6,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xb558,0x8c13,0x9474,0xd6bb,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xb558,0x9c96,0xad37,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xf79e,0xef7e,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0xe71c,0xdedb,0xe71c,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xffff,0x39e7,0x0841,0x31a6,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xf79e,0x41e8,0x1082,0x39e7,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xb558,0x9c96,0xad37,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- 0xb578,0xa4b6,0xb558,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
+- };
++
++static int logo_msg_width __initdata = 30;
++static int logo_msg_height __initdata = 250;
++static unsigned short logo_msg_data[] __initdata ={
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0xad55,0x7bef,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0xc638,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x738e,0x0020,0x0000,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0x0020,0x528a,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x18c3,0x738e,0x9cf3,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x52aa,0x2104,0x0000,0x2104,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffbf,0x1082,0x18e3,0xef3d,0xffff,0xffff,0xffff,0xffff,0xe73c,0xbdf7,0xdebb,0xffdf,0xffff,0xffff,0xffdf,0x6b6d,0x0000,0x9cf3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xdebd,0xad17,0x0000,0x5a8c,0xef3e,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x7bb1,0xc5da,0xd67c,0xffbf,0xffff,0xef7d,0x0000,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xb558,0x0000,0x6b4e,0xf7bf,0xffff,0xffff,0xffff,0xffff,0x9492,0x0000,0x62ec,0xce1b,0xc5ba,0xce1b,0xffff,0xf7be,0x0000,0x630c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xc5fb,0xce1b,0xffff,0x18e3,0x2124,0xf79e,0xffff,0xffdf,0xf77e,0xef7d,0x2945,0x0000,0x10a2,0xe71c,0xdebd,0xc5ba,0xef1e,0x94b2,0x0000,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffbf,0xc5ba,0xdebd,0xffff,0x8c71,0x0000,0x2945,0x8430,0x9493,0x6b0e,0x2125,0x0000,0x94b2,0x0020,0x0841,0x526a,0x4209,0x3166,0x0000,0x2104,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffbf,0xc5ba,0xdedd,0xffff,0xffff,0x8430,0x0020,0x0000,0x0000,0x0000,0x0000,0x8410,0xffff,0xb596,0x18e3,0x0000,0x0000,0x0000,0x3186,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xcdfb,0xce1b,0xffff,0xffff,0xffff,0xe71c,0x9cd3,0x630d,0x6b4f,0xa4f6,0xffbf,0xffff,0xffff,0xffff,0xbdd8,0x9474,0xc5f9,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe6fd,0xc5ba,0xce1b,0xe6fd,0xef3e,0xe6fd,0xce1b,0xc5ba,0xe71d,0xc5da,0xc5db,0xd67c,0xde9c,0xd63c,0xc5ba,0xce1b,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe6fd,0xc5da,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xe6dd,0xffff,0xef5e,0xcdfb,0xc5ba,0xc5ba,0xc5ba,0xce3b,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffbf,0xef1e,0xe6dd,0xe71d,0xf79f,0xffff,0xffff,0xffff,0xffff,0xf79f,0xf77e,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x2124,0x2104,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c71,0x0000,0x4a69,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0x6b6d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xf79f,0xffff,0xffff,0x4a69,0x0000,0x738e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x52aa,0x0000,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xce1b,0xce1b,0xffff,0x4208,0x632c,0x2945,0x0000,0x630c,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0x1082,0x0841,0xc618,0xffff,0xffff,0xffff,0xe6fd,0xc5ba,0xd67c,0x2104,0x5aeb,0xe73c,0x2965,0x0000,0x39c7,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf7bf,0xdebd,0xffff,0xffff,0xc618,0x0861,0x0861,0x94b2,0xffdf,0xffff,0xffff,0xd67c,0xc5ba,0x18e3,0x5aeb,0xffff,0xf79e,0x5aeb,0x0000,0x0861,0x8c71,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xd67c,0xc5ba,0xe71d,0xffff,0xffff,0xc638,0x18e3,0x0000,0x18c3,0x6b6d,0x9494,0xc5fa,0xce1b,0x18c3,0x526a,0xffff,0xffff,0xffff,0xad55,0x10a2,0x0000,0x2124,0xef7d,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffbf,0xc5fb,0xc5db,0xf77e,0xffff,0xffff,0xf79e,0x8410,0x18e3,0x0000,0x0000,0x0000,0x0861,0x0000,0x4209,0xd63c,0xffbf,0xffff,0xffff,0xef7d,0x738e,0x39c7,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf77e,0xc5db,0xc5db,0xe71d,0xffff,0xffff,0xffff,0xffff,0xc618,0x6b0e,0x4209,0x2945,0x0000,0x4a6a,0xc5ba,0xc5db,0xe6fd,0xffff,0xffff,0xffff,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0x9cb5,0x8c13,0xcdfb,0xdebd,0xef5e,0xffdf,0xffff,0xce1b,0xde9c,0xffff,0x2104,0x5aeb,0xef3e,0xc5fb,0xc5ba,0xce1b,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x528a,0xcdfb,0xc5ba,0xc5ba,0xc5ba,0xc5db,0xc5da,0xde9c,0xffff,0x2104,0x5aeb,0xffff,0xffdf,0xdebd,0xd65c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x5aeb,0xffff,0xf77e,0xe6fd,0xd67c,0xce1b,0xc5ba,0xde9c,0xffff,0x2104,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xf7be,0x9492,0x630c,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf79e,0xef5e,0xffff,0x2104,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0x2104,0x5aeb,0xffff,0xffff,0xffff,0xbdf7,0x2124,0x0000,0x0841,0xef7d,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0x2104,0x528a,0xdefb,0xdefb,0xdefb,0xffdf,0xffff,0xce1b,0xde9c,0xffff,0x2104,0x5aeb,0xffff,0xffff,0x8410,0x0020,0x0020,0x6b4d,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0x4a49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5aeb,0xffdf,0x5acb,0x0000,0x18e3,0xce59,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0xdefb,0x5aeb,0x4228,0x4228,0x4228,0x4228,0x4228,0x31a7,0x20e4,0x2104,0x2104,0x73ae,0x4a6a,0x0000,0x2946,0xbd79,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xd67c,0xf7bf,0xf7bf,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0xffff,0x6b4e,0x0000,0x3187,0xd65b,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xd65c,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xde9c,0xffff,0x9473,0x0000,0x2105,0xe73d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf7bf,0xde9c,0xd65c,0xd65c,0xd65c,0xd65c,0xd65c,0xd65c,0xce1b,0xce1b,0xce1b,0xdebd,0xd67c,0x3166,0x0861,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xce1a,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0xd69a,0xffff,0xffff,0xffff,0xef5e,0xc5ba,0xce3b,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x0000,0x4228,0xad55,0xffdf,0xd65c,0xc5fb,0xffbf,0xffff,0xffff,0x2104,0x5aeb,0xffff,0xffff,0xce59,0x2945,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0x6b6d,0x2104,0x0000,0x10a2,0x630c,0xad55,0xf79e,0xffff,0xffff,0x2104,0x5aeb,0xffff,0xffff,0xce79,0x0000,0xb5b6,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xdebb,0xdefb,0xdefb,0xdefb,0xdefb,0xb5b6,0x6b6d,0x31a6,0x0000,0x0841,0x39c7,0x6b6d,0x1082,0x528a,0xdefb,0xdefb,0xce59,0x0000,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b6d,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0x9493,0x83d1,0x7bb1,0x7bb1,0x8c32,0x94b3,0xa514,0x8430,0x2945,0x0000,0x18e3,0x9492,0x10a2,0x39c7,0x7bb1,0x94b3,0xa514,0x2945,0x4208,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffbf,0xf7bf,0xf7bf,0xf7bf,0xf7bf,0xef5e,0xdebd,0xbdb9,0x7b90,0x3187,0x0000,0x10a2,0x734f,0xce3b,0xf7bf,0x2104,0x5acb,0xc5ba,0xe71d,0xffff,0x7bcf,0x0841,0xf79e,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0x62ee,0x0000,0x0000,0x20e4,0x7370,0xbd9a,0xc5ba,0xc5ba,0xc5ba,0x18c3,0x4209,0xc5ba,0xdebd,0xffff,0xbdd7,0x3186,0xe73c,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xef5e,0xef3e,0xef3e,0x8411,0x18e4,0xef3e,0xb577,0x526a,0x9c94,0xc5ba,0xce1b,0xe71d,0x8c33,0x9494,0xef3e,0xce3a,0xb5b7,0xb558,0xb578,0xdefb,0xdedb,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0xef1e,0xd65c,0xc5ba,0x0000,0x738e,0xffff,0xffff,0x31a7,0x39c7,0xffff,0xdefb,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x736e,0x0000,0xc5ba,0xce1b,0xe71d,0x0000,0x7bef,0xffff,0xffff,0x31a7,0x39c7,0xffff,0xdefb,0x0000,0x62ec,0x83f1,0x9cf3,0x39c7,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe71d,0xce1b,0xffff,0x7baf,0x0000,0xf77e,0xffff,0xffff,0x0000,0x73af,0xef5e,0xffff,0x4208,0x4208,0xf7bf,0xd6bb,0x0000,0x9cd3,0xf7bf,0xffff,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0x7bef,0x0000,0xc5ba,0xe6dd,0xffff,0x0000,0x6b2e,0xd65c,0xffff,0x4208,0x3187,0xc5ba,0xacf7,0x0000,0x7bb1,0xce1b,0xffff,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0x7bef,0x0000,0x62cd,0x736e,0x7bef,0x0000,0x3187,0x6b2e,0x7bef,0x2104,0x3187,0xdebc,0xce3a,0x0000,0x83f1,0xce1b,0xffff,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3187,0xef3e,0xdefb,0x0000,0x8c32,0xce1b,0xffff,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0x7bef,0x0000,0xc5ba,0xe6dd,0xffff,0x0000,0x6b2e,0xd65c,0xffff,0x4208,0x3187,0xef3e,0xdefb,0x0000,0x8c32,0xce1b,0xffff,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xe6dd,0x736e,0x0000,0xc5ba,0xd65c,0xe6dd,0x0000,0x630d,0xd65c,0xffff,0x4208,0x3187,0xef3e,0xdefb,0x0000,0x8c32,0xce1b,0xffff,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xc5ba,0x62cd,0x0000,0xc5ba,0xc5ba,0xc5ba,0x0000,0x62cd,0xd65c,0xffff,0x4208,0x3187,0xef3e,0xdefb,0x0000,0x738f,0xb537,0xdefb,0x528a,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0x7bef,0x0000,0xc5ba,0xe6dd,0xffff,0x0000,0x6b2e,0xd65c,0xffff,0x4208,0x3187,0xef3e,0xdefb,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0x7bef,0x0000,0xc5ba,0xe6dd,0xffff,0xc638,0xbd98,0xd65c,0xffff,0x736e,0x5a8c,0xef3e,0xf79e,0xa514,0x8c32,0x83d1,0xa514,0xa514,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0xe71c,0xc638,0xc5ba,0xe6dd,0xffff,0xffff,0xd65c,0xd65c,0xffff,0xf7bf,0xc5ba,0xe6fd,0xf7bf,0xf7bf,0xd67c,0xce1b,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0xffff,0xffff,0xc5ba,0xe6dd,0xffff,0xffff,0xd65c,0xd65c,0xffff,0xf7bf,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xce1b,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0xdefb,0xdedb,0xf77e,0xffbf,0xffff,0xffff,0xdebd,0xdebd,0xffff,0xffff,0xef3e,0xef3e,0xef3e,0xef3e,0xef3e,0xef5e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffbf,0xf77e,0xffff,0x5aeb,0x0000,0x39e7,0x8c71,0xbdf7,0xdefb,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cd3,0x2965,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf7bf,0xf7bf,0xffff,0xffff,0xffff,0xe73c,0xb5b6,0x9492,0x7bef,0x630c,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x528a,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xd65c,0xbdd8,0x9493,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc638,0xad75,0xffff,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe71d,0xce3b,0xc5ba,0x2945,0x1082,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0x4209,0x18c3,0xef3e,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x736e,0x0000,0xb577,0xde9c,0xde9c,0xd67c,0x9473,0x18e3,0xbdd9,0xde9c,0xde9c,0xde9c,0x4a4a,0x18c3,0xef3e,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf79f,0xef1e,0xffff,0xc618,0x0000,0x8430,0xffff,0xf7be,0x2965,0x528a,0x0000,0xdefb,0xa514,0x73af,0x7bef,0x2965,0x0861,0x738f,0xad75,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xd63c,0xcdfb,0xffff,0xffff,0x18e3,0x39e7,0xffff,0x7bcf,0x0000,0x5aeb,0x0000,0xdefb,0x4a6a,0x0000,0x0000,0x0000,0x0000,0x0000,0x8410,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xdedd,0xc5ba,0xf79e,0xffff,0x73ae,0x0000,0xbdb7,0x0020,0x4a69,0xa514,0x0000,0xdefb,0x4a6a,0x10a3,0xdefb,0x4a69,0x10a3,0xce3a,0xd69a,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf77e,0xc5ba,0xe6fd,0xffff,0xdefb,0x0000,0x10a2,0x0000,0xce59,0x9493,0x0000,0xc5f9,0x4a2a,0x18c3,0xe6dd,0x52ab,0x18c3,0xef3e,0xdefb,0x0000,0x39c7,0x5aeb,0xdedb,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xcdfb,0xd65c,0xffff,0xe6dd,0x39c8,0x0000,0x3187,0xf7bf,0x8c32,0x0000,0xacf7,0x4209,0x18c3,0xc5ba,0x528a,0x18c3,0xef3e,0xdefb,0x0000,0x0000,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdedd,0xc5ba,0xf79e,0xc5db,0x630d,0x0000,0x62ed,0xf7bf,0x8c32,0x0000,0xd6bb,0x4a4a,0x18c3,0xf7bf,0x5acb,0x18c3,0xef3e,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf7bf,0xc5ba,0xcdfb,0xbd9a,0x1082,0x0000,0x1082,0xef7e,0x8c32,0x0000,0xdefb,0x4a6a,0x18c3,0xffff,0x5acb,0x18c3,0xd65c,0xbdb8,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xd67c,0xc5ba,0x8411,0x0000,0x6b4d,0x0000,0x8410,0x8c32,0x0000,0xdefb,0x4a6a,0x18c3,0xffff,0x5acb,0x18c3,0xc5ba,0xacf7,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0x39a7,0x1082,0xe6fd,0x4a2a,0x0861,0x736e,0x0000,0xdefb,0x4a6a,0x0020,0x4228,0x18c3,0x0020,0x39e8,0x94b2,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xc5fb,0xb558,0x0000,0x5acb,0xef3e,0xb559,0x2104,0x0020,0x0000,0xdefb,0x62ed,0x18c3,0x2104,0x0861,0x0000,0x18e4,0x8c71,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0x9452,0x0000,0x9493,0xef3e,0xc5ba,0xce59,0x0841,0x0000,0xdefb,0xde9c,0xce1b,0xffff,0x5acb,0x18c3,0xef3e,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xc5fb,0x5aeb,0x0000,0xb558,0xe6fd,0xc5ba,0xf7bf,0xa515,0x62ed,0xc5fa,0xcdfb,0xc5db,0xd65c,0x528a,0x18c3,0xef3e,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffdf,0xc5da,0xde9c,0x5aeb,0x2124,0xce1b,0xc5db,0xc5ba,0xf7bf,0xdebd,0xce1b,0xce1b,0xc5db,0xc5da,0xce1b,0x7bcf,0x4209,0xef3e,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xef3e,0xc5ba,0xef3e,0xffff,0xef7d,0xf79f,0xc5db,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xde9c,0xce1b,0xffff,0xf7bf,0xc5ba,0xef3e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffdf,0xffff,0xffff,0xffff,0xf77e,0xe6dd,0xffdf,0xffff,0xffff,0xffff,0xde9c,0xce1b,0xffff,0xf7bf,0xc5ba,0xef3e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xde9c,0xce1b,0xffff,0xffff,0xffff,0xffff,0xef5d,0x9cd3,0x7bef,0xa534,0xef7d,0xffff,0xe6fd,0xde9c,0xffff,0xf7bf,0xc5ba,0xef3e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffdf,0xffff,0xffff,0xffff,0xad55,0x0861,0x0000,0x0000,0x0000,0x1082,0x9cf3,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x2104,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x0841,0x1082,0xa534,0xdefb,0xad75,0x2965,0x0000,0x94b2,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x6b4e,0x0000,0xa535,0xffdf,0xffff,0xffff,0xf79e,0x2965,0x0841,0xdefb,0xffff,0xffff,0xffff,0x7bef,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5db,0x4209,0x0000,0xbd9a,0xc5fb,0xef1e,0xffff,0xffff,0xd69a,0x0000,0x630c,0xe71d,0xce1b,0xffbf,0x7bef,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf7bf,0xc5db,0xc5fb,0x83f0,0x0000,0x4a6a,0x8c32,0x9474,0xb576,0xc638,0xc638,0x3186,0x0861,0xad56,0x9474,0xbdf8,0x630c,0x0000,0xad55,0xc638,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdedd,0xc5ba,0xef5e,0xf79e,0x4a49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffff,0xffff,0xffff,0xd6ba,0xad75,0x9cd3,0x7bb1,0x8c32,0xa514,0x8430,0x0000,0x528a,0x7bb1,0x9cf3,0x528a,0x0000,0x8c71,0xa514,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe6fd,0xc5ba,0xd67c,0xef5e,0xef3d,0xf77e,0xf77e,0xf77e,0xce3b,0xc5db,0xf77e,0xef5e,0x0000,0x5aac,0xc5ba,0xef3e,0x7baf,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xd65c,0xc5ba,0x4a2a,0x20e4,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0x18c3,0x3187,0xc5ba,0xc5ba,0x62cd,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0x41e8,0x0841,0xef3e,0xef3e,0xef3e,0xe6fd,0xc5ba,0xde9c,0xef3e,0x18e4,0x39a7,0xc5ba,0xe6fd,0x738f,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5acb,0x0000,0xef5d,0xffff,0xffff,0xffff,0xc5ba,0xdebc,0xffff,0x1082,0x4229,0xc5ba,0xf7bf,0x7bef,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xce1b,0xffff,0x8c71,0x0000,0xb596,0xffff,0xffff,0xffff,0xce1b,0xd65c,0xdefb,0x0000,0x630d,0xc5ba,0xf7bf,0xe71c,0xc638,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xc5db,0xffff,0xd69a,0x0000,0x5acb,0xffff,0xffff,0xffff,0xce1b,0xd65c,0x8410,0x0000,0xa515,0xc5ba,0xf7bf,0xffff,0x94b2,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffdf,0xffff,0x2965,0x0020,0xc618,0xffff,0xffff,0xc5fb,0xad57,0x0861,0x2124,0xdebc,0xc5ba,0xf7bf,0x8c71,0x0000,0x39e7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe6fd,0xc5ba,0xef5e,0xffff,0xce59,0x0020,0x0861,0x73ae,0x9cf3,0x526b,0x0020,0x0861,0xc638,0xffbf,0xf77e,0x7bef,0x0000,0x2124,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf79f,0xc5ba,0xde9c,0xffff,0xffff,0xb5b6,0x2104,0x0000,0x0000,0x0000,0x3186,0xd69a,0xffff,0xffff,0xce5a,0x18a3,0x39e7,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xce3b,0xc5da,0xf77e,0xffff,0xffff,0xffff,0xce39,0x9474,0xb578,0xffff,0xffff,0xffff,0xe6fd,0xc5ba,0xbd98,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xc5da,0xc5db,0xdedd,0xef3e,0xdebc,0xc5db,0xc5db,0xf77e,0xffff,0xffff,0xe6dd,0xc5ba,0xce1b,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5e,0xce1b,0xc5ba,0xc5ba,0xc5ba,0xd63b,0xf79f,0xd6ba,0xffff,0xffdf,0xcdfb,0xd65c,0xffdf,0xef5d,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79f,0xf77e,0xffbf,0xffff,0x9cd3,0x0020,0xad55,0xffff,0xffbf,0xffff,0xffdf,0x39e7,0x4a69,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc618,0x18c3,0x0000,0x8430,0xffff,0xffff,0xffdf,0x52aa,0x0000,0x3186,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x73ae,0x5aeb,0x5aeb,0x5aeb,0x5acb,0x5aeb,0x5aeb,0x4228,0x0000,0x0000,0x4228,0xe71c,0xffff,0xffdf,0x7bef,0x0000,0x1082,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x7bef,0xef7d,0xffff,0xbdf7,0x2104,0x0000,0x2965,0xd69a,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0xcdfb,0xc5ba,0xe6fd,0xffff,0xffff,0xffff,0xad57,0x2925,0x0000,0x1082,0xd69a,0xffff,0xf7be,0x8410,0x0841,0xdedb,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xdebd,0xde9c,0xde9c,0xde9c,0xde9c,0xde9c,0xde9c,0xd65c,0xc5ba,0xc5ba,0xd65c,0xffbf,0xffff,0xffff,0xe6dd,0x83d1,0x39a7,0xe6fd,0xffff,0xffff,0xffff,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0x3187,0x7bb1,0xe6dd,0xffdf,0x5aeb,0x2104,0xce1b,0xc5ba,0xa516,0x7bcf,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x0000,0x6b0d,0xc5ba,0xc5fb,0x5acb,0x2104,0xffff,0xe6dd,0x7bb1,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa534,0x4228,0xffdf,0x0000,0x7bef,0xef3e,0xd65c,0x5aeb,0x2104,0xffff,0xffff,0x9cf4,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0x5aeb,0x0000,0x10a3,0xd6ba,0x0000,0x6b4e,0xce1b,0xffff,0x5aeb,0x2104,0xe6dd,0xffdf,0xa514,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4208,0x0000,0x39a8,0xc61a,0xffff,0x0000,0x6b4e,0xce1b,0xffff,0x5aeb,0x18e4,0xc5ba,0xf7bf,0xa514,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef3e,0xb577,0xa514,0xc5ba,0xe6dd,0xffff,0x0000,0x6b4e,0xce1b,0xffff,0x5aeb,0x10a3,0x9474,0xbdf8,0x7bef,0x0000,0xad55,0xc638,0xef7d,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xd67c,0xacf7,0xcdfb,0xf79f,0xc5ba,0xe6dd,0xffff,0x0000,0x6b4e,0xce1b,0xffff,0x5aeb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xd65c,0x20e4,0x4a4a,0xffbf,0xffff,0xc5ba,0xe6dd,0xffff,0x0000,0x6b4e,0xce1b,0xffff,0x5aeb,0x1082,0x7bb1,0x9cf3,0x632c,0x0000,0x8c71,0xa514,0xe73c,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0x18e4,0x5aeb,0xffff,0xffff,0xc5ba,0xe6dd,0xffff,0x0000,0x6b4e,0xcdfb,0xf77e,0x5aab,0x18e3,0xc5ba,0xef3e,0x9cb3,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf7bf,0xffff,0x2104,0x4228,0xc638,0xc638,0x9474,0xad56,0xc638,0x0000,0x528b,0x9474,0x9474,0x31a7,0x18c3,0xc5ba,0xc5ba,0x7bb1,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0x4a69,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18e3,0xc5ba,0xe6fd,0x9493,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0xf79e,0xa534,0xa514,0xa514,0x7bb1,0x8c52,0xa514,0x0000,0x4209,0x83d1,0xa514,0x39c7,0x18e4,0xc5ba,0xf7bf,0xa514,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xd65c,0xf77e,0xf77e,0xf77e,0xf77e,0xf77e,0xc5ba,0xde9c,0xf77e,0x0000,0x6b2e,0xce1b,0xffff,0x5aeb,0x18e4,0xc5ba,0xf7bf,0xb5b6,0x4228,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xd67c,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xce1b,0xffff,0xdedb,0xb5b7,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef3e,0xef3e,0xef3e,0xef3e,0xef3e,0xef3e,0xc5ba,0xd67c,0xef3e,0xef3e,0xd65c,0xce1b,0xffff,0xffff,0xef3e,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc5ba,0xe6dd,0xffff,0xffff,0xde9c,0xce1b,0xffff,0xffff,0xef5e,0xa4d5,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc638,0xad75,0xef5d,0xf79e,0xffff,0xffff,0xffff,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x632c,0x0000,0x0841,0x4a69,0x9cf3,0xe73c,0xffff,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x632c,0x0000,0x18c3,0x1082,0x0000,0x0000,0x3186,0x5aeb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdf7,0x7bef,0xd6bb,0xef5e,0xffff,0xf79e,0x3186,0x0020,0xce79,0xa4f4,0x41e9,0x0841,0x0000,0x0000,0x0861,0x528a,0x9492,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x6b6d,0x0000,0xbdb8,0xc5ba,0xc5db,0xd67c,0xce5a,0x0861,0x4208,0xf77e,0xc5ba,0xe6fd,0x94b2,0x0000,0x18e3,0x0000,0x0000,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4a49,0x0861,0xdebc,0xc5ba,0xcdfb,0xc5fb,0xc5ba,0x62ed,0x0000,0xa4f5,0xc5ba,0xef3e,0xc638,0x0000,0xa514,0xef5d,0xa534,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf77e,0xe6dd,0xffbf,0x2965,0x31a6,0xffff,0xce3b,0xc5da,0xf79e,0xef3e,0xce1a,0x0020,0x4209,0xc5ba,0xc5db,0xa4f5,0x0000,0x9cf4,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdebd,0xc5ba,0xf7bf,0x2104,0x4228,0xffff,0xffbf,0xc5db,0xd65c,0xffff,0xffff,0x4229,0x10a2,0xc5ba,0xcdfb,0x9474,0x0000,0x9cf3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xc5db,0xffff,0x2104,0x4228,0xffff,0xffff,0xe6dd,0xc5ba,0xf77e,0xffff,0x738e,0x0000,0xb558,0xef3e,0xc5f8,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce3b,0xce3b,0xffff,0x4208,0x18e3,0xffff,0xffff,0xffdf,0xc5db,0xde9c,0xffff,0x7bef,0x0000,0xacf7,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xd65c,0xffff,0x632c,0x0000,0xef5d,0xffff,0xffff,0xd65c,0xcdfb,0xffff,0x6b4d,0x0000,0xb559,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xd65c,0xffff,0xad55,0x0000,0x9cd3,0xffff,0xffff,0xdebd,0xc5ba,0xffdf,0x2124,0x2104,0xc5ba,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xcdfb,0xffff,0xf7be,0x10a2,0x2104,0xf79e,0xffff,0xe6dd,0xc5ba,0xa4f4,0x0000,0x6b4d,0xc5ba,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdebc,0xc5ba,0xffdf,0xffff,0x9492,0x0000,0x4228,0xdedb,0xde9c,0x83d1,0x0861,0x10a2,0xdedc,0xc5ba,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0xe71d,0xffff,0xffff,0x5aeb,0x0000,0x0000,0x0000,0x0000,0x1082,0xc618,0xf77e,0xc5ba,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xc5fb,0xce1b,0xffff,0xffff,0xffff,0xbdd7,0x630d,0x4209,0x7bd0,0xef5d,0xffff,0xf77e,0xc5ba,0xef3e,0xe71c,0x7bef,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0xd65c,0xf7bf,0xffff,0xef3e,0xc5db,0xc5fb,0xffdf,0xffff,0xffff,0xf77e,0xc5ba,0xef3e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5fb,0xf77e,0xffff,0xe71c,0x8430,0xbdd8,0xc5ba,0xef3e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7e,0xdebd,0xde9c,0xe71d,0xffdf,0xffff,0xe73c,0x18c3,0x0000,0x0020,0xb557,0xf79f,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x6b4d,0x0000,0x73ae,0x0020,0x3186,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffbf,0xc619,0x0020,0x528a,0xffff,0x7bcf,0x0000,0x94b2,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xcdfb,0x41e9,0x0000,0xc639,0xffff,0xf7be,0x2104,0x1082,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdebc,0x9474,0x0000,0x39c8,0xce3b,0xffff,0xffff,0xb596,0x0000,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0xc5ba,0x2104,0x0020,0xc5f9,0xc5ba,0xe71d,0xffff,0xffff,0x52aa,0x0000,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd67c,0x62cd,0x0000,0x6b6d,0xffff,0xce1b,0xc5fb,0xffbf,0xffff,0xe71c,0x1082,0x10a2,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0x9cb5,0x0000,0x18c3,0xef7d,0xffff,0xef5e,0xc5ba,0xd67c,0xffff,0xffff,0x94b2,0x0000,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc5fa,0x2105,0x0000,0xad55,0xffff,0xffff,0xffff,0xd67c,0xc5ba,0xef3e,0xffff,0xffff,0x39c7,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe6dd,0x524b,0x0000,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffbf,0xc5fb,0xc5fb,0xffdf,0xffff,0xdedb,0x0841,0x0861,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79f,0x7bb1,0x0000,0x18c3,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0xd67c,0xffff,0xffff,0x9492,0x0000,0x4208,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce3b,0x5acd,0x0020,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd65c,0xc5ba,0xef3e,0xffff,0xffff,0x5aeb,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xdebc,0xc5ba,0xd67c,0xc618,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0xc5db,0xc5db,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0xcdfb,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0xd65c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe6dd,0xc5da,0xef7e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xde9c,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce79,0x528a,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x73ae,0x0000,0x0000,0x39e7,0xa534,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce59,0x5aeb,0x0861,0x0000,0x0861,0x52aa,0xa514,0xe73c,0xffff,0xffff,0xffff,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf79e,0xd67c,0xf79f,0xffff,0xffff,0xffff,0xf79e,0xa534,0x52aa,0x0861,0x0000,0x0000,0x2104,0x39c8,0x7bd0,0x8410,0x0000,0x8c71,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdebd,0xc5ba,0xc5ba,0xd65c,0xef3e,0xffff,0xffff,0xffff,0xffff,0xf7be,0xbdd7,0x7bcf,0x39c7,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x18e3,0xb596,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xde9c,0xc5db,0xc5ba,0xc5db,0xd67c,0xef3e,0xffdf,0xffff,0xffff,0xffff,0xf77e,0xc5ba,0xbdf8,0x8c51,0x0000,0x4208,0x4a69,0x2945,0xb596,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cd4,0x1082,0x0841,0x528c,0xbd79,0xce1b,0xd67c,0xe6fd,0xe6dd,0xc5ba,0xe6fd,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0x0841,0x0020,0x10a2,0x1082,0xd65b,0xd65c,0xc5db,0x9474,0x62cd,0xb559,0xc5ba,0x9474,0x0000,0x94b3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x0000,0x9cf3,0xffdf,0xbdf7,0xffff,0xffff,0xffff,0x7bf0,0x0000,0x9454,0xd65c,0xa4f5,0x0000,0x94b3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5fb,0x4a29,0x0000,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xad75,0x0000,0x7bb1,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffbf,0xc5db,0xc5da,0x3187,0x10a3,0xffdf,0xffff,0xffff,0xf77e,0xe6dd,0xffdf,0xce79,0x0000,0x62ed,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0xef1e,0x4228,0x2104,0xffff,0xffff,0xffff,0xe6fd,0xc5ba,0xf77e,0xdefb,0x0000,0x62cd,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffff,0x4228,0x18e3,0xffff,0xffff,0xffff,0xef5e,0xc5ba,0xef3e,0xdefb,0x0000,0x62cd,0xef3e,0xe71c,0x7bef,0xd69a,0xf7be,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xcdfb,0xffff,0x5acb,0x0000,0xffdf,0xffff,0xffff,0xf79e,0xc5ba,0xe6fd,0xc638,0x0000,0x7370,0xef3e,0xffff,0xe71c,0x630c,0x10a2,0x4a69,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xce1b,0xffff,0x738e,0x0000,0xd69a,0xffff,0xffff,0xf7bf,0xc5ba,0xe6dd,0xad55,0x0000,0x8c12,0xef3e,0xffff,0xf79e,0x1082,0x528a,0xb5b6,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xcdfb,0xffff,0xa534,0x0000,0x94b2,0xffff,0xffff,0xf7bf,0xc5ba,0xe6dd,0x9cf3,0x2104,0xbdd9,0xf79f,0xffff,0xffdf,0xf7be,0xffff,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffff,0xdedb,0x5aeb,0xbdf7,0xffff,0xffff,0xf77e,0xc5ba,0xe71d,0xffff,0xffff,0xffbf,0xde9c,0xc5fb,0xd67c,0xbdf7,0x4a69,0x0020,0xbdf7,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdebd,0xc5ba,0xf79f,0xffff,0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0xef5e,0xffff,0xffff,0xffff,0xc5fb,0xd67c,0xef5e,0xa534,0x18e3,0x73ae,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0xe71d,0xffff,0xffff,0xffff,0xffff,0xffff,0xef1e,0xce1b,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffbf,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf7bf,0xde9c,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0xd67c,0xc5da,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xa534,0x528a,0x4228,0x738e,0xe71c,0xffff,0xffff,0xffff,0xef3e,0xcdfb,0x0000,0x5acb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x52aa,0x0000,0x0861,0x18c3,0x0000,0x18c3,0xdedb,0xffff,0xffff,0xffff,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x0000,0x632c,0xf7be,0xffff,0xb5b6,0x0841,0x3186,0xffff,0xffff,0xffff,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0x10a2,0x20e4,0xdebc,0xffbf,0xffff,0xffff,0x73ae,0x0000,0xbdd7,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd67c,0x9474,0x0000,0x7370,0xc5ba,0xcdfb,0xf7bf,0xffff,0xd6ba,0x0000,0x6b6d,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0x7bd0,0x0000,0xd69a,0xef5e,0xc5db,0xce3b,0xffff,0xffff,0x1082,0x4a49,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xcdfb,0xce1b,0x6b6d,0x0000,0xf79e,0xffff,0xdedd,0xc5ba,0xef7e,0xffff,0x2104,0x4228,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf77e,0xc5ba,0xe71d,0x5aeb,0x0000,0xffff,0xffff,0xf7bf,0xc5ba,0xdebd,0xffff,0x10a2,0x4a69,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0xf79f,0x5aeb,0x0000,0xffff,0xffff,0xffff,0xc5fb,0xd65c,0xe71c,0x0000,0x6b6d,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdebd,0xc5ba,0xffff,0x6b6d,0x0000,0xe73c,0xffff,0xffff,0xce1b,0xd65c,0x9cd3,0x0000,0xb596,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xdedb,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffff,0x9492,0x0000,0xbdf7,0xffff,0xffff,0xc5fb,0xd67c,0x2965,0x1082,0xf7be,0xc5ba,0xde9c,0xd69a,0x0000,0x0841,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffff,0xbdf7,0x0000,0x8430,0xffff,0xffbf,0xc5ba,0x8c52,0x0000,0x8410,0xf7be,0x7370,0x2945,0x0000,0x0000,0x18c3,0x6b6d,0xb596,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdebd,0xc5ba,0xffdf,0xf7be,0x4228,0x6b4d,0xffff,0xe71d,0xbd79,0x18c3,0x1082,0x6b6d,0x10a2,0x0000,0x0861,0x632d,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0xf77e,0xffff,0xffff,0xffff,0xffff,0xce3b,0x5aac,0x0000,0x0000,0x0000,0x2124,0x7370,0xbd9a,0xc5ba,0x0000,0x5acb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf77e,0xc5ba,0xe6fd,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0x9cb4,0x0000,0x2945,0x8c33,0xc5ba,0xc5ba,0xcdfb,0xdebd,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xd65c,0xdebc,0xffff,0xffff,0xffff,0xcdfb,0xc5fb,0xdebd,0x9474,0xc5ba,0xc5fb,0xdebc,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedd,0xc5ba,0xc5ba,0xc5ba,0xce1b,0xe71d,0xffff,0xffff,0xc5ba,0xde9c,0xffff,0x7bef,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5e,0xc5ba,0xce3b,0xef5e,0xffff,0xffff,0xffff,0xffff,0xc5ba,0xde9c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc5ba,0xde9c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0xb596,0x9cf3,0x7bef,0x7bef,0x736e,0x73af,0xa514,0xad55,0xc638,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x632c,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x31a6,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cd3,0x0020,0x0000,0x18e3,0x632c,0xa514,0xc638,0xdefb,0xdefb,0xdefb,0xd69a,0xc638,0x9cf3,0x738e,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x0020,0x18c3,0x9cd4,0xe6fd,0xe6dd,0xe6dd,0xe6dd,0xe6dd,0xef3e,0xef3e,0xf77e,0xffbf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0x8c32,0x0000,0x4a2a,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xce3b,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5da,0xa4d6,0x0000,0x0000,0x4a49,0xb576,0xef7e,0xf7bf,0xf7bf,0xf79f,0xf77e,0xef1e,0xdebd,0xe6fd,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf7bf,0xc5da,0xcdfb,0xef3e,0x94b2,0x1082,0x0000,0x0000,0x2104,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0xde9c,0xffff,0xffff,0xef7d,0x94b2,0x4208,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf79f,0xc5ba,0xc5ba,0xd67c,0xef7e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5fb,0xc5ba,0xc5ba,0xce1b,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xe71d,0xd65c,0xe6dd,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0x8410,0x18e3,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xad55,0x52aa,0x0841,0x0000,0x0841,0xc618,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0xd69a,0xbdd7,0x94b2,0x6b4d,0x39c7,0x0020,0x0000,0x0000,0x2104,0x8c51,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4208,0x0000,0x0000,0x0000,0x0000,0x0000,0x2945,0x630d,0x9c94,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8410,0x4228,0x630c,0x8430,0xad35,0xc5fa,0xc5db,0xc5ba,0xc5db,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffbf,0xf79f,0xef7e,0xe71d,0xdebc,0xd63c,0xc5da,0xc5ba,0xc5ba,0xce1b,0xe6fd,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd65c,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xce1b,0xdebd,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe6dd,0xd65c,0xde9c,0xe6fd,0xef5e,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0x8c51,0x7bef,0x7bef,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe71d,0xe6dd,0xe6dd,0x8c71,0x7bef,0x7bef,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe71d,0xe6dd,0xe6dd,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff};
+diff -Nur linux_c860_org/drivers/video/shepherdLogoMsgJ.c linux/drivers/video/shepherdLogoMsgJ.c
+--- linux_c860_org/drivers/video/shepherdLogoMsgJ.c 2003-06-18 17:49:13.000000000 +0900
++++ linux/drivers/video/shepherdLogoMsgJ.c 2004-06-10 21:09:11.000000000 +0900
+@@ -3,6 +3,7 @@
+ * ChangeLog:
+ * 16-04-2003 SHARP
+ */
++/* Logo Screen 16bits RGB(565) data*/
+ #ifndef __initdata
+ #define __initdata
+ #endif
+diff -Nur linux_c860_org/drivers/video/tc6393fb.c linux/drivers/video/tc6393fb.c
+--- linux_c860_org/drivers/video/tc6393fb.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/video/tc6393fb.c 2004-06-10 21:10:10.000000000 +0900
+@@ -0,0 +1,1255 @@
++/*
++ * linux/drivers/video/tc6393fb.c
++ *
++ * Frame Buffer Device for TOSHIBA tc6393
++ *
++ * (C) Copyright 2004 Lineo Solutions, Inc.
++ *
++ * Based on:
++ * linux/drivers/video/w100fb.c
++ *
++ * Frame Buffer Device for ATI w100 (Wallaby)
++ *
++ * Copyright (C) 2002, ATI 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.
++ *
++ * Based on:
++ * drivers/video/skeletonfb.c
++ *
++ * ChangeLog:
++ * 28-02-2003 SHARP supported VRAM image cache for ver.1.3
++ * 19-03-2003 SHARP disabled VRAM image cache for ver.1.3
++ */
++
++// define this here because unistd.h needs it
++extern int errno;
++
++#include <asm/io.h>
++#include <asm/hardware.h>
++#include <asm/ucb1200.h>
++#include <asm/uaccess.h>
++// unistd.h is included for the configuration ioctl stuff
++#define __KERNEL_SYSCALLS__ 1
++#include <asm/unistd.h>
++#undef __KERNEL_SYSCALLS__
++#include <linux/ioport.h>
++#include <linux/delay.h>
++#include <linux/errno.h>
++#include <linux/fb.h>
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/slab.h>
++#include <linux/mm.h>
++#include <linux/module.h>
++#include <linux/sched.h>
++#include <linux/string.h>
++#include <linux/tty.h>
++#include <linux/fs.h>
++#include <linux/file.h>
++#include <video/fbcon-cfb8.h>
++#include <video/fbcon-cfb16.h>
++#include <video/fbcon-mfb.h>
++#include <video/fbcon.h>
++
++#include "tc6393fb.h"
++#include <linux/pm.h>
++#include <asm/arch/i2sc.h>
++#include <asm/arch/tosa.h>
++
++#include <video/tosa_backlight.h>
++
++#ifdef CONFIG_PM
++#include <asm/arch/sharpsl_param.h>
++static struct pm_dev *tc6393_pm_dev;
++static int tc6393_pm_callback(struct pm_dev* pm_dev,pm_request_t req, void* data);
++#endif //CONFIG_PM
++
++static void tc6393_pm_suspend(int suspend_mode);
++static void tc6393_pm_resume(void);
++static void tc6393_clear_screen(u32 mode);
++
++// Some hardware related constants
++// The name the kernel will know us by
++#define TC6393_NAME "TC6393FB"
++
++
++#define KH_CMDREG_NUM 6
++
++#define PIXEL_PER_LINE_QVGA 240
++#define HORIZONTAL_LINE_QVGA 320
++#define PIXEL_PER_LINE_VGA 480
++#define HORIZONTAL_LINE_VGA 640
++
++typedef struct FrameBuffer_QVGA {
++ unsigned short pixel[HORIZONTAL_LINE_QVGA][PIXEL_PER_LINE_QVGA];
++} FrameBuffer_QVGA;
++
++typedef struct FrameBuffer_VGA {
++ unsigned short pixel[HORIZONTAL_LINE_VGA][PIXEL_PER_LINE_VGA];
++} FrameBuffer_VGA;
++
++static TC6393_REGS kh_cmd[] =
++{
++ { KH_BASEADDR_H, 0x0000}, // base address high
++ { KH_BASEADDR_L, TC6393_GC_INTERNAL_REG_BASE}, // base address low
++ { KH_COMMAND_REG, 0x0002}, // base address enable
++ { KH_VRAMTC, 0x40a8}, // VRAMRC, VRAMTC
++ { KH_VRAMAC, 0x0018}, // VRAMSTS, VRAMAC
++ { KH_VRAMBC, 0x0002},
++};
++
++#define TC6393_lcdinner (TC6393_SYS_BASE+TC6393_GC_INTERNAL_REG_BASE)
++
++#define FB_OFFSET 0x00100000
++#define TC6393_LCD_INNER_ADDRESS TC6393_lcdinner
++#define TC6393_FB_BASE TC6393_RAM1_BASE
++#define REMAPPED_FB_LEN 0x100000
++
++#define REMAPPED_LCD_BASE_LEN 0x200
++#define REMAPPED_CFG_LEN 0x100
++#define REMAPPED_MMR_LEN 0x200
++#define TC6393_PHYS_ADR_LEN 0x2000000
++#define MAX_XRES_QVGA 240
++#define MAX_YRES_QVGA 320
++#define MAX_XRES_VGA 480
++#define MAX_YRES_VGA 640
++#define BITS_PER_PIXEL 16
++
++#define TC6393_SMEM_START (TOSA_LCDC_PHYS+FB_OFFSET)
++#define TC6393_MMIO_START (TOSA_LCDC_PHYS+0x500)
++
++#define COMADJ_DEFAULT 97
++
++// Pseudo palette size
++#define MAX_PALETTES 16
++
++#define USE_ACCELERATOR
++#ifdef USE_ACCELERATOR
++// for Accelerator
++#define FIFO_ADDR (((int)remapped_fbuf)+(1024*1024)-(4*512))
++static void tc6393_acc_init(void);
++static void tc6393_acc_write( u32* cmd, int cmdnum );
++static void tc6393_acc_sync(void);
++#endif
++
++// ioctls
++#define TC6393FB_POWERDOWN 0x54433601 /* TC6\01 */
++#ifdef USE_ACCELERATOR
++#define TC6393FB_ACC_CMD_WRITE 0x54433602 /* TC6\02 */
++#define TC6393FB_ACC_SYNC 0x54433603 /* TC6\03 */
++#define TC6393FB_ACC_CMD_MAX_LEN 10
++#endif
++
++// General frame buffer data structures
++struct tc6393fb_info {
++ struct fb_info_gen gen;
++ union {
++#ifdef FBCON_HAS_CFB16
++ u16 cfb16[ MAX_PALETTES];
++#endif
++#ifdef FBCON_HAS_CFB24
++ u32 cfb24[ MAX_PALETTES];
++#endif
++#ifdef FBCON_HAS_CFB32
++ u32 cfb32[ MAX_PALETTES];
++#endif
++ } fbcon_cmap;
++};
++
++struct tc6393fb_par {
++ u32 xres;
++ u32 yres;
++ u32 xres_virtual;
++ u32 yres_virtual;
++ u32 bits_per_pixel;
++ u32 visual;
++ u32 palette_size;
++};
++
++static struct tc6393fb_info fb_info;
++static struct tc6393fb_par current_par;
++static int current_par_valid = 0;
++static struct display disp;
++
++static void *remapped_lcdbase;
++static void *remapped_regs;
++static void *remapped_inner;
++static void *remapped_fbuf;
++
++static FrameBuffer_QVGA *fb_QVGA;
++static FrameBuffer_VGA *fb_VGA;
++
++static void *remapped_scoop2_1;
++static void *remapped_scoop2_2;
++
++#define LCD_MODE_QVGA 0
++#define LCD_MODE_VGA 1
++
++// referenced by tosa_fb
++int tc6393fb_lcdMode = LCD_MODE_VGA;
++int tc6393fb_isblank = 0;
++
++static int tg_ssp_reg0;
++
++#if defined(CONFIG_ARCH_SHARP_SL)
++// checking in mm/omm_kill.c
++int disable_signal_to_mm = 0;
++#endif
++
++int tc6393fb_init(void);
++static void tc6393fb_setlcdmode(int);
++static void tc6393fb_initssp(void);
++static void tc6393fb_lcdhwsetup(int);
++static void tc6393_soft_reset(void);
++
++static int tc6393_encode_var(struct fb_var_screeninfo *var,
++ const void *raw_par,
++ struct fb_info_gen *info);
++static int tc6393fb_ioctl(struct inode *inode,
++ struct file *file,
++ u_int cmd,
++ u_long arg,
++ int con,
++ struct fb_info *info);
++
++void pxa_nssp_init(void);
++
++int isspace(int x);
++int config_open(const char *config_filename);
++int config_close(int config_fd);
++int config_get_dword(int config_fd,
++ const char *section,
++ const char *id,
++ u32 *val,
++ u32 defval);
++long my_strtol(const char *string, char **endPtr, int base);
++
++extern void pxa_nssp_output(unsigned char, unsigned char);
++
++#define LINE_WAIT 20
++#define PLCLN_MASK 0x03FF
++static int wait_vsync(void)
++{
++ int ct=0;
++ volatile u16 val1,val2;
++
++ u16 line = (tc6393fb_lcdMode==LCD_MODE_VGA)?HORIZONTAL_LINE_VGA:HORIZONTAL_LINE_QVGA;
++ do {
++ val1 = readw(remapped_inner + PLCLN)&PLCLN_MASK;
++ while(val1!=(val2=(readw(remapped_inner + PLCLN)&PLCLN_MASK))) {
++ val1 = val2;
++ }
++ if (val1==line) break;
++ if (++ct>1000*1000/LINE_WAIT) break;
++ udelay(LINE_WAIT);
++ } while(1);
++ if (val1!=line) {
++ printk("unable to wait vsync\n");
++ return 1;
++ }
++ return 0;
++}
++
++// save & restore image
++//#define STATIC_IMAGE_BUF
++#ifdef STATIC_IMAGE_BUF
++static u32 ImageBuf[MAX_XRES_VGA*MAX_YRES_VGA/2];
++static void save_image(void)
++{
++ int i,size = current_par.xres*current_par.yres/2;
++ u32 *src = (u32*)remapped_fbuf;
++ u32 *dst = ImageBuf;
++
++ for (i=0; i<size; i++) {
++ *dst++ = *src++;
++ }
++}
++static void load_image(void)
++{
++ int i,size = current_par.xres*current_par.yres/2;
++ u32 *src = ImageBuf;
++ u32 *dst = (u32*)remapped_fbuf;
++
++ for (i=0; i<size; i++) {
++ *dst++ = *src++;
++ }
++}
++#else
++#define SAVE_LINES 20
++static u16 *gSaveImagePtr[HORIZONTAL_LINE_VGA/SAVE_LINES] = {NULL};
++void clear_imagebuf()
++{
++ if(gSaveImagePtr[0] != NULL){
++ int i;
++ for (i = 0; i < HORIZONTAL_LINE_VGA/SAVE_LINES; i++) {
++ if (gSaveImagePtr[i] != NULL) {
++ kfree(gSaveImagePtr[i]);
++ gSaveImagePtr[i]=NULL;
++ }
++ }
++ }
++}
++#endif
++
++
++
++/* ------------------- chipset specific functions -------------------------- */
++//
++// static void tc6393_hw_init(void)
++//
++static void tc6393_hw_init(void)
++{
++ remapped_regs = (void *)TC6393_SYS_BASE;
++ remapped_lcdbase = (void *)TC6393_GC_BASE;
++ remapped_inner = (void *)TC6393_LCD_INNER_ADDRESS;
++ remapped_scoop2_1 = (void *)CF_BUF_CTRL_BASE;
++ remapped_scoop2_2 = (void *)CF2_BUF_CTRL_BASE;
++ remapped_fbuf = (void *)TC6393_FB_BASE;
++ tc6393_soft_reset();
++#ifdef USE_ACCELERATOR
++ tc6393_acc_init();
++#endif
++
++}
++
++
++//
++// Fill the fix structure based on values in the par
++//
++static int tc6393_encode_fix(struct fb_fix_screeninfo *fix,
++ const void *raw_par,
++ struct fb_info_gen *info)
++{
++ const struct tc6393fb_par *par = raw_par;
++
++ if (!par)
++ BUG();
++
++ memset(fix, 0, sizeof *fix);
++
++ strcpy(fix->id, TC6393_NAME);
++
++ fix->type= FB_TYPE_PACKED_PIXELS;
++ fix->type_aux = 0;
++
++ if (par->bits_per_pixel == 1)
++ {
++ fix->visual = FB_VISUAL_MONO10;
++ }
++ else if (par->bits_per_pixel <= 8)
++ {
++ fix->visual = FB_VISUAL_PSEUDOCOLOR;
++ }
++ else
++ {
++ fix->visual = FB_VISUAL_TRUECOLOR;
++ }
++
++#if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++ fix->ypanstep = fix->xpanstep = fix->xwrapstep = 0;
++#else
++ fix->xpanstep = fix->ypanstep = fix->ywrapstep = 0;
++#endif
++ fix->smem_start = TC6393_SMEM_START;
++
++ if(tc6393fb_lcdMode == LCD_MODE_VGA ){
++ fix->line_length = (480 * BITS_PER_PIXEL) / 8;
++ fix->smem_len = (480 * 640 * BITS_PER_PIXEL) / 8;
++ } else { // QVGA
++ fix->line_length = (240 * BITS_PER_PIXEL) / 8;
++ fix->smem_len = (240 * 320 * BITS_PER_PIXEL) / 8;
++ }
++ fix->mmio_start = TC6393_MMIO_START;
++ fix->mmio_len = REMAPPED_CFG_LEN + REMAPPED_MMR_LEN; // LCD-COMMON+LCD-MMR
++
++ fix->accel = FB_ACCEL_NONE;
++
++ return 0;
++}
++
++//
++// Get video parameters out of the par
++//
++static int tc6393_decode_var(const struct fb_var_screeninfo *var,
++ void *raw_par,
++ struct fb_info_gen *info)
++{
++ struct tc6393fb_par *par = raw_par;
++
++ *par = current_par;
++
++ if (!par)
++ BUG();
++
++ if((par->xres == 480 && par->yres == 640)||
++ (par->xres == 240 && par->yres == 320)){
++ par->xres = var->xres;
++ par->yres = var->yres;
++ }else{
++
++ if(tc6393fb_lcdMode == LCD_MODE_VGA ){
++ par->xres = MAX_XRES_VGA;
++ par->yres = MAX_YRES_VGA;
++ }else{ // QVGA
++ par->xres = MAX_XRES_QVGA;
++ par->yres = MAX_YRES_QVGA;
++ }
++ }
++
++ par->xres_virtual =
++ var->xres_virtual < par->xres ? par->xres : var->xres_virtual;
++ par->yres_virtual =
++ var->yres_virtual < par->yres ? par->yres : var->yres_virtual;
++
++ par->bits_per_pixel = var->bits_per_pixel;
++
++ par->visual = FB_VISUAL_TRUECOLOR;
++ par->palette_size = 0;
++
++ return 0;
++}
++
++//
++// Fill the var structure with values in the par
++//
++static int tc6393_encode_var(struct fb_var_screeninfo *var,
++ const void *raw_par,
++ struct fb_info_gen *info)
++{
++ struct tc6393fb_par *par = (struct tc6393fb_par *)raw_par;
++
++ // set up var for 565
++ var->bits_per_pixel = BITS_PER_PIXEL;
++ var->red.offset = 11;
++ var->red.length = 5;
++ var->green.offset = 5;
++ var->green.length = 6;
++ var->blue.offset = 0;
++ var->blue.length = 5;
++ var->transp.offset = 0;
++ var->transp.length = 0;
++
++ var->red.msb_right = 0;
++ var->green.msb_right = 0;
++ var->blue.msb_right = 0;
++ var->transp.msb_right = 0;
++
++ var->nonstd = 0;
++
++ var->grayscale = 0;
++
++ // set up screen coordinates
++ if((par->xres == 480 && par->yres == 640)||
++ (par->xres == 240 && par->yres == 320)){
++ var->xres = par->xres;
++ var->yres = par->yres;
++ }else{
++ if(tc6393fb_lcdMode == LCD_MODE_VGA ){
++ var->xres = MAX_XRES_VGA;
++ var->yres = MAX_YRES_VGA;
++ }else{ // QVGA
++ var->xres = MAX_XRES_QVGA;
++ var->yres = MAX_YRES_QVGA;
++ }
++ }
++
++ var->xres_virtual = var->xres;
++ var->yres_virtual = var->yres;
++ var->xoffset = var->yoffset = 0;
++
++ var->activate = FB_ACTIVATE_NOW;
++
++ var->height = -1;
++ var->width = -1;
++ var->vmode = FB_VMODE_NONINTERLACED;
++
++ var->sync = 0;
++ var->pixclock = 0x04;
++
++ return 0;
++}
++
++//
++// Fill the par structure with relevant hardware values
++//
++static void tc6393_get_par(void *raw_par, struct fb_info_gen *info)
++{
++ struct tc6393fb_par *par = raw_par;
++
++ if (current_par_valid)
++ *par = current_par;
++}
++
++//
++// Set the hardware according to the values in the par
++//
++static void tc6393_set_par(const void *raw_par, struct fb_info_gen *info)
++{
++ const struct tc6393fb_par *par = raw_par;
++
++ current_par = *par;
++ current_par_valid = 1;
++}
++
++//
++// Split a color register into RGBT components. N/A on TC6393
++//
++static int tc6393_getcolreg(unsigned regno, unsigned *red, unsigned *green,
++ unsigned *blue, unsigned *transp,
++ struct fb_info *info)
++{
++ struct tc6393fb_info *linfo = (struct tc6393fb_info *)info;
++
++ if (regno >= 16) return 1;
++
++ *transp = 0;
++ *red = ((linfo->fbcon_cmap.cfb16[regno] >> 11) & 31) << 11;
++ *green = ((linfo->fbcon_cmap.cfb16[regno] >> 5 ) & 63) << 10;
++ *blue = ((linfo->fbcon_cmap.cfb16[regno]) & 31) << 11;
++
++ return 0;
++}
++
++//
++// Set a single color register. N/A on TC6393
++//
++static int tc6393_setcolreg(unsigned regno, unsigned red, unsigned green,
++ unsigned blue, unsigned transp,
++ struct fb_info *info)
++{
++ struct tc6393fb_info *linfo = (struct tc6393fb_info *)info;
++
++ if (regno < MAX_PALETTES)
++ {
++ linfo->fbcon_cmap.cfb16[regno] =
++ (red & 0xf800) | ((green & 0xfc00) >> 5) | ((blue & 0xf800) >> 11);
++ }
++
++ return 0;
++}
++
++//
++// Pan the display based on var->xoffset & var->yoffset values
++//
++static int tc6393_pan_display(const struct fb_var_screeninfo *var,
++ struct fb_info_gen *info)
++{
++
++ return 0;
++}
++
++//
++// Blank the display based on value in blank_mode
++//
++static int tc6393_blank(int blank_mode, struct fb_info_gen *info)
++{
++ if(!in_interrupt()){
++ if (blank_mode && !tc6393fb_isblank) {
++ tc6393_pm_suspend(1);
++ }else if(!blank_mode && tc6393fb_isblank){
++ tc6393_pm_resume();
++ }
++ }
++
++ return 0;
++}
++
++#ifdef CONFIG_SHARP_LOGO_SCREEN
++#include "vgaLogoScreen.c"
++#define SHOW_WAIT_MSG
++#ifdef SHOW_WAIT_MSG
++#include "tosaLogoMsgJ.c"
++#include "tosaLogoMsg.c"
++#if 0
++static int logo_lang = 0;
++#else
++extern int logo_lang; // Battery Driver refers.
++#endif
++static int logo_msg_width __initdata = 0;
++static int logo_msg_height __initdata = 0;
++static unsigned short *logo_msg_data __initdata = NULL;
++#ifndef MODULE
++static int __init logolang_setup(char *str)
++{
++ logo_lang = simple_strtoul(str,NULL,0);
++ return 0;
++}
++__setup("LOGOLANG=", logolang_setup);
++#endif // MODULE
++#if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++static int logo_msg_yoff __initdata = 100;
++#else
++static int logo_msg_yoff __initdata = 500;
++#endif
++#endif // end SHOW_WAIT_MSG
++
++//
++// static void __init draw_img()
++//
++static void __init draw_img( int sx, int sy, int w, int h, unsigned short* data )
++{
++ int x, y,ppl;
++ unsigned short *p;
++ // LCD_MODE_VGA
++ if (tc6393fb_lcdMode == LCD_MODE_VGA ){
++ ppl = PIXEL_PER_LINE_VGA;
++ p = &fb_VGA->pixel[sy][sx];
++ }else{ // QVGA
++ ppl = PIXEL_PER_LINE_QVGA;
++ p = &fb_QVGA->pixel[sy][sx];
++ }
++
++ for (y=0; y<h; y++) {
++ for (x=0; x<w; x++) {
++ unsigned short col = data[(h-1-y)+x*h];
++#if 0 //
++ if (col==0x7bef) col=0xFFFF;
++#endif
++ *p++ = col;
++ }
++ p += ppl - w;
++ }
++}
++
++static void __init draw_logo_screen(void)
++{
++ switch(logo_lang) {
++ case 1: // JP
++ logo_msg_width = logo_msg_width_jp;
++ logo_msg_height = logo_msg_height_jp;
++ logo_msg_data = logo_msg_data_jp;
++ break;
++ default: // EN
++ logo_msg_width = logo_msg_width_en;
++ logo_msg_height = logo_msg_height_en;
++ logo_msg_data = logo_msg_data_en;
++ break;
++ }
++
++ if (tc6393fb_lcdMode == LCD_MODE_VGA){
++ memset(remapped_fbuf,0xff,(HORIZONTAL_LINE_VGA-16)*(PIXEL_PER_LINE_VGA*2));
++ }else{ // QVGA
++ memset(remapped_fbuf,0xff,(HORIZONTAL_LINE_QVGA-16)*(PIXEL_PER_LINE_QVGA*2));
++ }
++
++ draw_img((current_par.xres - logo_screen_height) / 2,
++ (current_par.yres - logo_screen_width) / 2,
++ logo_screen_height, logo_screen_width, logo_screen_data);
++
++
++#ifdef SHOW_WAIT_MSG
++ draw_img((current_par.xres - logo_msg_height) / 2,logo_msg_yoff,
++ logo_msg_height,logo_msg_width,logo_msg_data);
++#endif
++
++}
++#endif //CONFIG_SHARP_LOGO_SCREEN
++
++
++//
++// Set up the display for the fb subsystem
++//
++static void tc6393_set_disp(const void *unused, struct display *disp,
++ struct fb_info_gen *info)
++{
++ struct tc6393fb_info *linfo = (struct tc6393fb_info *)info;
++ int newLcdMode = -1;
++
++ if (current_par.xres == PIXEL_PER_LINE_QVGA && current_par.yres == HORIZONTAL_LINE_QVGA){
++ newLcdMode = LCD_MODE_QVGA;
++ } else if (current_par.xres == PIXEL_PER_LINE_VGA && current_par.yres == HORIZONTAL_LINE_VGA){
++ newLcdMode = LCD_MODE_VGA;
++ } else { // unknown
++ return;
++ }
++
++ if (newLcdMode!=tc6393fb_lcdMode) {
++#if 0
++ printk("change resolution from %s to %s\n", tc6393fb_lcdMode?"VGA":"QVGA", newLcdMode?"VGA":"QVGA");
++#endif
++ if (tc6393fb_isblank) {
++ printk("force resume from blank!!!\n");
++ clear_imagebuf();
++ tc6393_pm_resume();
++ }
++
++ wait_vsync();
++ tc6393_clear_screen(LCD_MODE_VGA);
++ wait_vsync();
++ tc6393fb_setlcdmode(newLcdMode);
++ }
++
++ // Do the rest of the display initialization
++ disp->screen_base = remapped_fbuf;
++
++ // Set appropriate low level text console handler
++ switch(disp->var.bits_per_pixel)
++ {
++#ifdef FBCON_HAS_MFB
++ case 1:
++ disp->dispsw = &fbcon_mfb;
++ break;
++#endif
++#ifdef FBCON_HAS_CFB8
++ case 8:
++ disp->dispsw = &fbcon_cfb8;
++ break;
++#endif
++#ifdef FBCON_HAS_CFB16
++ case 16:
++ disp->dispsw = &fbcon_cfb16;
++ disp->dispsw_data = linfo->fbcon_cmap.cfb16;
++ break;
++#endif
++ default:
++ disp->dispsw = &fbcon_dummy;
++ break;
++ }
++
++#if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++ disp->xpanstep = 0;
++ disp->xwrapstep = 0;
++ disp->scrollmode = 0; // for logoscreen scroll
++#else
++ disp->ypanstep = 0;
++ disp->ywrapstep = 0;
++#endif
++
++
++}
++
++/* ------------ Interfaces to hardware functions ------------ */
++
++struct fbgen_hwswitch tc6393_switch =
++{
++ //X detect: tc6393_detect,
++ encode_fix: tc6393_encode_fix,
++ decode_var: tc6393_decode_var,
++ encode_var: tc6393_encode_var,
++ get_par: tc6393_get_par,
++ set_par: tc6393_set_par,
++ getcolreg: tc6393_getcolreg,
++ setcolreg: tc6393_setcolreg,
++ pan_display: tc6393_pan_display,
++ blank: tc6393_blank,
++ set_disp: tc6393_set_disp,
++};
++
++/* ------------ Hardware Independent Functions ------------ */
++
++
++static struct fb_ops tc6393fb_ops =
++{
++ owner: THIS_MODULE,
++ fb_get_fix: fbgen_get_fix,
++ fb_get_var: fbgen_get_var,
++ fb_set_var: fbgen_set_var,
++ fb_get_cmap: fbgen_get_cmap,
++ fb_set_cmap: fbgen_set_cmap,
++ fb_pan_display: fbgen_pan_display,
++ fb_ioctl: tc6393fb_ioctl,
++};
++
++//
++int __init tc6393fb_init(void)
++{
++#ifndef STATIC_IMAGE_BUF
++ memset(gSaveImagePtr,0,sizeof(gSaveImagePtr));
++#endif
++
++ fb_info.gen.fbhw = &tc6393_switch; // generic frame buffer device
++ tc6393_hw_init();
++ tc6393_clear_screen(LCD_MODE_VGA);
++ tc6393fb_setlcdmode(tc6393fb_lcdMode);
++
++ strcpy(fb_info.gen.info.modename, TC6393_NAME);
++ fb_info.gen.info.changevar = NULL;
++ fb_info.gen.info.node = -1;
++ fb_info.gen.info.fbops = &tc6393fb_ops;
++ fb_info.gen.info.disp = &disp;
++ fb_info.gen.parsize = sizeof(struct tc6393fb_par);
++ fb_info.gen.info.switch_con = &fbgen_switch;
++ fb_info.gen.info.updatevar = &fbgen_update_var;
++ fb_info.gen.info.blank = &fbgen_blank;
++ fb_info.gen.info.flags = FBINFO_FLAG_DEFAULT;
++ /* This should give a reasonable default video mode */
++ fbgen_get_var(&disp.var, -1, &fb_info.gen.info);
++ fbgen_do_set_var(&disp.var, 1, &fb_info.gen);
++ fbgen_set_disp(-1, &fb_info.gen);
++
++ if (disp.var.bits_per_pixel > 1)
++ fbgen_install_cmap(0, &fb_info.gen);
++
++ if (register_framebuffer(&fb_info.gen.info) < 0)
++ return -EINVAL;
++
++#ifdef CONFIG_PM
++ tc6393_pm_dev = pm_register(PM_COTULLA_DEV, 0, tc6393_pm_callback);
++#endif //CONFIG_PM
++
++ printk("fb%d: %s frame buffer device\n",
++ GET_FB_IDX(fb_info.gen.info.node),
++ fb_info.gen.info.modename);
++
++
++#if defined(CONFIG_SHARP_LOGO_SCREEN)
++ draw_logo_screen();
++ tosa_bl_temporary_contrast_set();
++ tosa_bl_temporary_contrast_reset();
++#endif
++
++ return 0;
++}
++
++void tc6393fb_cleanup(struct fb_info *info)
++{
++ unregister_framebuffer(info);
++#ifndef STATIC_IMAGE_BUF
++ if(gSaveImagePtr[0] != NULL){
++ int i;
++ for (i = 0; i < HORIZONTAL_LINE_VGA/SAVE_LINES; i++) {
++ if (gSaveImagePtr[i] != NULL) {
++ kfree(gSaveImagePtr[i]);
++ gSaveImagePtr[i]=NULL;
++ }
++ }
++ }
++#endif
++}
++
++#ifdef MODULE
++int __init init_module(void)
++{
++ return tc6393fb_init();
++}
++
++void cleanup_module(void)
++{
++ tc6393fb_cleanup(&fb_info.gen.info);
++}
++#endif
++
++static int tc6393fb_ioctl(struct inode *inode, struct file *file, u_int cmd,
++ u_long arg, int con, struct fb_info *info2)
++{
++ switch (cmd){
++ case TC6393FB_POWERDOWN:
++ {
++ int blank_mode = (int)arg;
++ tc6393_blank(blank_mode,NULL);
++ }
++ break;
++#ifdef USE_ACCELERATOR
++ case TC6393FB_ACC_CMD_WRITE:
++ {
++ u32 cmdbuf[TC6393FB_ACC_CMD_MAX_LEN + 1];
++
++ if (tc6393fb_isblank) {
++ printk("force resume from blank!\n");
++ clear_imagebuf();
++ tc6393_pm_resume();
++ }
++ if (copy_from_user(cmdbuf, (void *)arg,
++ (TC6393FB_ACC_CMD_MAX_LEN + 1) * sizeof(u32)))
++ return -EFAULT;
++
++ if (cmdbuf[0] == 0)
++ return 0;
++
++ if (cmdbuf[0] > TC6393FB_ACC_CMD_MAX_LEN)
++ return -EFAULT;
++
++ tc6393_acc_write( &cmdbuf[1], cmdbuf[0] );
++ }
++ break;
++ case TC6393FB_ACC_SYNC:
++ if (tc6393fb_isblank) {
++ printk("force resume from blank!!\n");
++ clear_imagebuf();
++ tc6393_pm_resume();
++ }
++ tc6393_acc_sync();
++ break;
++#endif // end USE_ACCELERATOR
++ default:
++ return -EINVAL;
++ }
++ return 0;
++}
++
++//
++// Constants
++//
++
++static void tc6393fb_initssp( void)
++{
++ pxa_nssp_init();
++ tg_ssp_reg0 = TG_REG0_COLOR | TG_REG0_UD | TG_REG0_LR;
++ pxa_nssp_output(1,0x00); //delaied 0clk TCTL signal for VGA
++ pxa_nssp_output(3,0x02); // GPOS0=powercontrol, GPOS1=GPIO, GPOS2=TCTL
++}
++
++static void tc6393fb_setpnlctl(int dat)
++{
++ pxa_nssp_output(6,dat);
++}
++
++static void tc6393fb_lcdhwsetup(int mode)
++{
++ int i;
++
++ // define the framebuffer base.
++ fb_VGA = (FrameBuffer_VGA *) (remapped_fbuf);
++ fb_QVGA = (FrameBuffer_QVGA *) (remapped_fbuf);
++
++ if ( mode == LCD_MODE_QVGA ) { // change to QVGA
++ writew((u16)(0x0000), remapped_inner + PLGMD);
++ writew((u16)(readw(remapped_regs + TC6393_SYS_FER) & ~FUNC_SLCDEN),
++ remapped_regs + TC6393_SYS_FER);
++ writew((u16)(PLCNT_DEFAULT), remapped_inner + PLCNT);
++ writew((u16)(PLL10_QVGA), remapped_regs + TC6393_SYS_PLL1CR1);
++ writew((u16)(PLL11_QVGA), remapped_regs + TC6393_SYS_PLL1CR2);
++ writew((u16)(readw(remapped_regs + TC6393_SYS_FER) | FUNC_SLCDEN),
++ remapped_regs + TC6393_SYS_FER);
++
++ for( i=0; i<kurohyo_LCDCREG_NUM-1; i++){
++ writew((u16)(kurohyoLcdcQVGA[i].Value), remapped_inner + kurohyoLcdcQVGA[i].Index);
++ }
++ } else { // change to VGA
++ writew((u16)(0x0000), remapped_inner + PLGMD);
++ writew((u16)(readw(remapped_regs + TC6393_SYS_FER) & ~FUNC_SLCDEN),
++ remapped_regs + TC6393_SYS_FER);
++ writew((u16)(PLCNT_DEFAULT), remapped_inner + PLCNT);
++ writew((u16)(PLL10_VGA), remapped_regs + TC6393_SYS_PLL1CR1);
++ writew((u16)(PLL11_VGA), remapped_regs + TC6393_SYS_PLL1CR2);
++ writew((u16)(readw(remapped_regs + TC6393_SYS_FER) | FUNC_SLCDEN),
++ remapped_regs + TC6393_SYS_FER);
++
++ for( i=0; i<kurohyo_LCDCREG_NUM-1; i++){
++ writew((u16)(kurohyoLcdcVGA[i].Value), remapped_inner + kurohyoLcdcVGA[i].Index);
++ }
++ }
++
++ writew((u16)(PLCNT_DEFAULT), remapped_inner + PLCNT);
++ mdelay(5);
++ writew((u16)(PLCNT_DEFAULT | PLCNT_STOP_CKP), remapped_inner+PLCNT);
++ mdelay(5);
++ writew((u16)(PLCNT_DEFAULT | PLCNT_STOP_CKP | PLCNT_SOFT_RESET), remapped_inner + PLCNT);
++ writew((u16)(0xfffa), remapped_inner + PIFEN);
++
++ // TG LCD pannel power up
++ tc6393fb_setpnlctl(0x4);
++ mdelay(50);
++
++ // TG LCD GVSS
++ tc6393fb_setpnlctl(0x0);
++
++ {
++ int comadj;
++ /* Set Common Voltage */
++ comadj = -1;
++ comadj = sharpsl_get_comadj();
++ if ( comadj < 0 ) {
++ comadj = COMADJ_DEFAULT;
++ }
++ mdelay(50);
++ i2c_init(1);
++ tosa_set_common_voltage( comadj );
++ }
++
++}
++
++static void tc6393fb_setlcdmode(int mode)
++{
++ if( mode == LCD_MODE_VGA ){
++ tg_ssp_reg0 |= TG_REG0_VQV;
++ pxa_nssp_output(0, tg_ssp_reg0); // data send to TG
++ tc6393fb_lcdhwsetup(LCD_MODE_VGA);
++ tc6393fb_lcdMode = LCD_MODE_VGA;
++ }else{
++ tg_ssp_reg0 &= ~TG_REG0_VQV;
++ pxa_nssp_output(0, tg_ssp_reg0); // data send to TG
++ tc6393fb_lcdhwsetup(LCD_MODE_QVGA);
++ tc6393fb_lcdMode = LCD_MODE_QVGA;
++ }
++}
++
++static void tc6393_soft_reset()
++{
++ int i;
++ PSPR=0;// Clear Core Clock Change status
++
++ // L3V On
++ writew((u16)(readw(remapped_scoop2_2 + SCP_GPWR) | SCOOP22_L3VON),remapped_scoop2_2 + SCP_GPWR);
++
++ // TG On
++ writew((u16)(readw(remapped_regs + TC6393_SYS_GPODSR1) & ~0x0001),remapped_regs + TC6393_SYS_GPODSR1);
++
++ // Clock Control Register
++ writew((u16)((readw(remapped_regs + TC6393_SYS_CCR) & CLKCTL_USB_MASK) | CLKCTL_CONFIG_DTA),
++ remapped_regs + TC6393_SYS_CCR);
++
++ writew((u16)(0x0cc1), remapped_regs + TC6393_SYS_PLL2CR);
++
++ if ( tc6393fb_lcdMode == LCD_MODE_VGA ) { // VGA
++ writew((u16)(PLL10_VGA), remapped_regs + TC6393_SYS_PLL1CR1);
++ writew((u16)(PLL11_VGA), remapped_regs + TC6393_SYS_PLL1CR2);
++ } else { // QVGA
++ writew((u16)(PLL10_QVGA), remapped_regs + TC6393_SYS_PLL1CR1);
++ writew((u16)(PLL11_QVGA), remapped_regs + TC6393_SYS_PLL1CR2);
++ }
++ writew((u16)(0x003a), remapped_lcdbase + KH_CLKEN);
++ writew((u16)(0x003a), remapped_lcdbase + KH_GCLKEN);
++ writew((u16)(0x3f00), remapped_lcdbase + KH_PSWCLR);
++ writew((u16)(readw(remapped_regs + TC6393_SYS_FER) | FUNC_SLCDEN), remapped_regs + TC6393_SYS_FER);
++ mdelay(2);
++
++ writew((u16)(0x0000), remapped_lcdbase + KH_PSWCLR);
++ writew((u16)(0x3300), remapped_regs + TC6393_SYS_GPER);
++
++ // initialize kurohyo configration register
++ for( i=0; i <= KH_CMDREG_NUM; i++){
++ writew((u16)(kh_cmd[i].Value), remapped_lcdbase + kh_cmd[i].Index);
++ }
++ mdelay(2);
++ writew((u16)(0x000b), remapped_lcdbase + KH_VRAMBC);
++
++ tc6393fb_initssp();
++ tc6393fb_isblank = 0;
++}
++
++#ifdef USE_ACCELERATOR
++static void tc6393_acc_init()
++{
++ writew((u16)((FIFO_ADDR>>16)&0x001f), remapped_inner + KH_CMDADR_H);
++ writew((u16)(FIFO_ADDR&0x0fff8), remapped_inner + KH_CMDADR_L);
++ writew(512-1, remapped_inner + KH_CMDFIF);
++
++ writew(1, remapped_inner + KH_FIFOR);
++
++ writew(0, remapped_inner + KH_BINTMSK);
++ writew(0, remapped_inner + KH_CMDFINT);
++}
++
++static void tc6393_acc_write( u32* cmd, int cmdnum )
++{
++ volatile int i;
++ int ct=0;
++
++ if (readw(remapped_inner + KH_FIPT)>400) {
++ while(readw(remapped_inner + KH_FIPT)>200) {
++ mdelay(1);
++ if (++ct>1000) {
++ printk(__FUNCTION__ ": timeout\n");
++ return; // timeout
++ }
++ }
++ }
++
++ for ( i = 0; i < cmdnum; i ++ ) {
++ writew((u16)((cmd[i]>>16) & 0x0ffff), remapped_inner + KH_COMD_H);
++ writew((u16)(cmd[i] & 0x0ffff), remapped_inner + KH_COMD_L);
++ }
++}
++
++static void tc6393_acc_sync()
++{
++ int ct=0;
++ while(readw(remapped_inner + KH_FIPT)>0) {
++ mdelay(1);
++ if (++ct>1000) {
++ printk(__FUNCTION__ ": timeout\n");
++ return; // timeout
++ }
++ }
++ ct=0;
++ while(readw(remapped_inner + KH_DMAST)&PXAIO_DMAST_BLT) {
++ mdelay(1);
++ if (++ct>1000) {
++ printk(__FUNCTION__ ": timeout\n");
++ return; // timeout
++ }
++ }
++}
++#endif // end USE_ACCELERATOR
++
++static void tc6393_clear_screen(u32 mode)
++{
++#ifndef USE_ACCELERATOR
++ if(mode == LCD_MODE_VGA){
++ memset(remapped_fbuf,0xff,MAX_XRES_VGA*MAX_YRES_VGA*2);
++ }else if(mode == LCD_MODE_QVGA){
++ memset(remapped_fbuf,0xff,MAX_XRES_QVGA*MAX_YRES_QVGA*2);
++ }
++#else // Accelerator always clear VGA area
++ static u32 cmd[6];
++ u16 xres = (tc6393fb_lcdMode == LCD_MODE_VGA)?MAX_XRES_VGA:MAX_XRES_QVGA;
++ u16 yres = (tc6393fb_lcdMode == LCD_MODE_VGA)?MAX_YRES_VGA:MAX_YRES_QVGA;
++
++ cmd[0] = PXAIO_COMDI_DSADR|PXAIO_COMDD_DSADR(((int)remapped_fbuf));
++ cmd[1] = PXAIO_COMDI_DHPIX|PXAIO_COMDD_DHPIX(xres - 1);
++ cmd[2] = PXAIO_COMDI_DVPIX|PXAIO_COMDD_DVPIX(yres - 1);
++ cmd[3] = PXAIO_COMDI_FILL|PXAIO_COMDD_FILL(0xffff);
++ cmd[4] = PXAIO_COMDI_FLGO;
++
++ tc6393_acc_write(cmd,5);
++ tc6393_acc_sync();
++
++#endif // end USE_ACCELERATOR
++}
++
++static DECLARE_WAIT_QUEUE_HEAD(blank_queue);
++
++static void tc6393_pm_suspend(int suspend_mode)
++{
++#ifndef STATIC_IMAGE_BUF
++ int i,j;
++ u32 *pVram = (u32*)remapped_fbuf;
++#endif
++
++#ifdef USE_ACCELERATOR
++ tc6393_acc_sync();
++#endif
++
++ if (!tc6393fb_isblank) {
++#ifdef STATIC_IMAGE_BUF
++ save_image();
++#else
++ for (i = 0; i < current_par.yres/SAVE_LINES; i++) {
++ if (gSaveImagePtr[i] != NULL){
++ kfree(gSaveImagePtr[i]);
++ gSaveImagePtr[i] = NULL;
++ }
++ gSaveImagePtr[i] = kmalloc(current_par.xres * BITS_PER_PIXEL*SAVE_LINES / 8, GFP_KERNEL);
++ if (gSaveImagePtr[i] != NULL){
++ memcpy(gSaveImagePtr[i],pVram,current_par.xres*SAVE_LINES*2);
++ pVram += current_par.xres*SAVE_LINES/2;
++ }
++ else {
++ printk("can't alloc pre-off image buffer %d\n", i);
++ for (j = 0; j < i; j++) {
++ if (gSaveImagePtr[i] != NULL) {
++ kfree(gSaveImagePtr[i]);
++ gSaveImagePtr[i] = NULL;
++ }
++ }
++ break;
++ }
++ }
++ for (; i < HORIZONTAL_LINE_VGA/SAVE_LINES; i++) {
++ gSaveImagePtr[i] = NULL;
++ }
++#endif
++
++#ifdef CONFIG_PM
++ tosa_bl_pm_callback(NULL, PM_SUSPEND, NULL);
++#endif
++
++ tc6393fb_isblank = 1;
++
++ wait_vsync();
++ tc6393_clear_screen(LCD_MODE_VGA);
++ wait_vsync();
++ wait_vsync();
++
++ // TG LCD VHSA off
++ tc6393fb_setpnlctl(0x4);
++ if (suspend_mode) interruptible_sleep_on_timeout((wait_queue_head_t*)&blank_queue, 50/2 );
++ else mdelay(50);
++
++ // TG LCD signal off
++ tc6393fb_setpnlctl(0x6);
++ wait_vsync();
++ if (suspend_mode) interruptible_sleep_on_timeout((wait_queue_head_t*)&blank_queue, 50/2 );
++ else mdelay(50);
++
++ // TG Off
++ writew((u16)(readw(remapped_regs + TC6393_SYS_GPODSR1) | 0x0001),remapped_regs + TC6393_SYS_GPODSR1);
++ if (suspend_mode) interruptible_sleep_on_timeout((wait_queue_head_t*)&blank_queue, 120/2 );
++ else mdelay(120);
++
++ // CLK: Stop
++ writew((u16)(0x0), remapped_lcdbase + KH_CLKEN);
++ if (suspend_mode) interruptible_sleep_on_timeout((wait_queue_head_t*)&blank_queue, 100/2 );
++ else mdelay(100);
++
++ // L3V Off
++ writew((u16)(readw(remapped_scoop2_2 + SCP_GPWR) & ~SCOOP22_L3VON),remapped_scoop2_2 + SCP_GPWR);
++
++//X tc6393fb_isblank = 1;
++ }
++}
++
++static void tc6393_pm_resume()
++{
++#ifndef STATIC_IMAGE_BUF
++ int i;
++ u32 *pVram = (u32*)remapped_fbuf;
++#endif
++
++ tc6393_hw_init();
++
++#ifdef USE_ACCELERATOR
++ // erase whole VRAM
++ if (tc6393fb_lcdMode == LCD_MODE_QVGA) {
++ memset(remapped_fbuf,0xff,MAX_XRES_VGA*MAX_YRES_VGA*2);
++ }
++#endif
++
++#ifdef STATIC_IMAGE_BUF
++ load_image();
++#else
++ if (gSaveImagePtr[0] != NULL){
++ for (i = 0; i < (current_par.yres)/SAVE_LINES; i++) {
++ if (gSaveImagePtr[i] == NULL) {
++ printk("can't find pre-off image buffer %d\n", i);
++ continue;
++ }
++ memcpy(pVram,gSaveImagePtr[i],current_par.xres*SAVE_LINES*2);
++ pVram += current_par.xres*SAVE_LINES/2;
++ kfree(gSaveImagePtr[i]);
++ gSaveImagePtr[i] = NULL;
++ }
++ }
++#endif
++
++ tc6393fb_setlcdmode(tc6393fb_lcdMode);
++
++#ifdef CONFIG_PM
++ tosa_bl_pm_callback(NULL, PM_RESUME, NULL);
++#endif
++
++}
++
++#ifdef CONFIG_PM
++static int tc6393_pm_callback(struct pm_dev* pm_dev,
++ pm_request_t req, void* data)
++{
++ switch (req) {
++ case PM_SUSPEND:
++ tc6393_pm_suspend(0);
++ break;
++
++ case PM_RESUME:
++ tc6393_pm_resume();
++ break;
++ }
++ return 0;
++}
++
++void tc6393_fatal_off(void)
++{
++ tc6393_pm_suspend(0);
++}
++#endif //CONFIG_PM
++
++// EOF
+diff -Nur linux_c860_org/drivers/video/tc6393fb.h linux/drivers/video/tc6393fb.h
+--- linux_c860_org/drivers/video/tc6393fb.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/video/tc6393fb.h 2004-06-10 21:09:11.000000000 +0900
+@@ -0,0 +1,249 @@
++/*
++ * linux/drivers/video/tc6393fb.h
++ *
++ * Frame Buffer Device for TOSHIBA tc6393
++ *
++ * (C) Copyright 2004 Lineo Solutions, Inc.
++ *
++ * May be copied or modified under the terms of the GNU General Public
++ * License. See linux/COPYING for more information.
++ *
++ */
++
++#if !defined (_TC6393FB)
++#define _TC6393FB
++
++#define KH_COMMAND_REG 0x004
++#define KH_BASEADDR_H 0x012
++#define KH_BASEADDR_L 0x010
++#define KH_CLKEN 0x040
++#define KH_GCLKEN 0x042
++#define KH_PSWCLR 0x050
++#define KH_VRAMTC 0x060
++#define KH_VRAMRC 0x061
++#define KH_VRAMAC 0x062
++#define KH_VRAMBC 0x064
++#define KH_VMREQMD 0x06F
++
++#define KH_CMDADR_L 0x00A
++#define KH_CMDADR_H 0x00C
++#define KH_CMDFIF 0x00E
++#define KH_CMDFINT 0x010
++#define KH_BINTMSK 0x012
++#define KH_BINTST 0x014
++#define KH_FIPT 0x016
++#define KH_DMAST 0x018
++#define KH_COMD_L 0x01C
++#define KH_COMD_H 0x01E
++#define KH_FIFOR 0x022
++
++#define PXAIO_DMAST_DMA 0x0001
++#define PXAIO_DMAST_BLT 0x0002
++
++#define kurohyo_LCDCREG_NUM 18
++
++#define PLMOD 0x164
++#define PLCST 0x102
++#define VHLIN 0x008
++#define PLDSA_H 0x124
++#define PLDSA_L 0x122
++#define PLPIT_H 0x12c
++#define PLPIT_L 0x12a
++#define PLHT 0x140
++#define PLHDS 0x142
++#define PLHSS 0x144
++#define PLHSE 0x146
++#define PLHBS 0x148
++#define PLHBE 0x14a
++#define PLHPX 0x14c
++#define PLVT 0x150
++#define PLVDS 0x152
++#define PLVSS 0x154
++#define PLVSE 0x156
++#define PLVBS 0x158
++#define PLVBE 0x15a
++#define PLGMD 0x12e
++#define PLCST 0x102
++#define PLMOD 0x164
++#define MISC 0x166
++#define PLCNT 0x100
++#define PIFEN 0x18e
++#define PLCLN 0x160
++
++
++#define CLKCTL_USB_MASK 0x0002
++#define CLKCTL_CONFIG_DTA 0x1310
++
++#define SCOOP_CF_MODE 0x0100
++#define SCOOP21_OUT_MASK 0x0004
++#define SCOOP22_OUT_MASK 0x036e
++
++#define SCOOP21_RESET_IN 0x0004
++#define SCOOP22_SUSPEND 0x0020
++#define SCOOP22_L3VON 0x0040
++
++
++#define PLCNT_SOFT_RESET 0x0001
++#define PLCNT_STOP_CKP 0x0004
++#define PLCNT_DEFAULT 0x0010
++
++
++
++#define FUNC_SLCDEN 0x0004
++#define PLL10_QVGA 0xf203
++#define PLL11_QVGA 0x00e7
++#define PLL10_VGA 0xdf00
++#define PLL11_VGA 0x002c
++
++typedef struct
++{
++ unsigned short Index;
++ unsigned short Value;
++} TC6393_REGS;
++
++static TC6393_REGS kurohyoLcdcQVGA[] =
++{
++ { VHLIN, 0x01E0 }, // VHLIN
++ { PLDSA_H, 0x0000 }, // PLDSA display start address high
++ { PLDSA_L, 0x0000 }, // PLDSA display start address low
++ { PLPIT_H, 0x0000 }, // PLPIT horizontal pixel high
++ { PLPIT_L, 0x01E0 }, // PLPIT horizontal pixel low
++ { PLHT, 0x0145 }, // PLHT horizontal total
++ { PLHDS, 0x0026 }, // PLHDS horizontal display start
++ { PLHSS, 0x0000 }, // PLHSS H-sync start
++ { PLHSE, 0x0002 }, // PLHSE H-sync end
++ { PLHPX, 0x00f0 }, // PLHPX Horizontal number of pixel
++ { PLVT, 0x014F }, // PLVT Vertical total
++ { PLVDS, 0x0002 }, // PLVDS Vertical display start
++ { PLVSS, 0x0000 }, // PLVSS V-sync start
++ { PLVSE, 0x0001 }, // PLVSE V-sync end
++ { MISC, 0x0003 }, // MISC RGB565 mode
++ { PLGMD, 0x0001 }, // PLGMD vram access enable
++ { PLCST, 0x4007 }, // PLCST
++ { PLMOD, 0x0003 }, // PLMOD Sync polarity
++};
++
++static TC6393_REGS kurohyoLcdcVGA[] =
++{
++ { VHLIN, 0x03c0 }, // VHLIN
++ { PLDSA_H, 0x0000 }, // PLDSA display start address high
++ { PLDSA_L, 0x0000 }, // PLDSA display start address low
++ { PLPIT_H, 0x0000 }, // PLPIT horizontal pixel high
++ { PLPIT_L, 0x03c0 }, // PLPIT horizontal pixel low
++ { PLHT, 0x0289 }, // PLHT horizontal total
++ { PLHDS, 0x004e }, // PLHDS horizontal display start
++ { PLHSS, 0x0000 }, // PLHSS H-sync start
++ { PLHSE, 0x0002 }, // PLHSE H-sync end
++ { PLHPX, 0x01e0 }, // PLHPX Horizontal number of pixel
++ { PLVT, 0x028f }, // PLVT Vertical total
++ { PLVDS, 0x0002 }, // PLVDS Vertical display start
++ { PLVSS, 0x0000 }, // PLVSS V-sync start
++ { PLVSE, 0x0001 }, // PLVSE V-sync end
++ { MISC, 0x0003 }, // MISC RGB565 mode
++ { PLGMD, 0x0001 }, // PLGMD vram access enable
++ { PLCST, 0x4007 }, // PLCST
++ { PLMOD, 0x0003 }, // PLMOD Sync polarity
++};
++
++#define TG_REG0_VQV 0x0001
++#define TG_REG0_COLOR 0x0002
++#define TG_REG0_UD 0x0004
++#define TG_REG0_LR 0x0008
++
++#define CK_SSP (0x1u << 3)
++
++/*
++ * Accelerator COMMAND
++ */
++
++// Set Command
++#define PXAIO_COMDI_CSADR 0x00000000
++#define PXAIO_COMDD_CSADR(x) (x&0x001ffffe)
++#define PXAIO_COMDI_CHPIX 0x01000000
++#define PXAIO_COMDD_CHPIX(x) (x&0x000003ff)
++#define PXAIO_COMDI_CVPIX 0x02000000
++#define PXAIO_COMDD_CVPIX(x) (x&0x000003ff)
++#define PXAIO_COMDI_PSADR 0x03000000
++#define PXAIO_COMDD_PSADR(x) (x&0x00fffffe)
++#define PXAIO_COMDI_PHPIX 0x04000000
++#define PXAIO_COMDD_PHPIX(x) (x&0x000003ff)
++#define PXAIO_COMDI_PVPIX 0x05000000
++#define PXAIO_COMDD_PVPIX(x) (x&0x000003ff)
++#define PXAIO_COMDI_PHOFS 0x06000000
++#define PXAIO_COMDD_PHOFS(x) (x&0x000003ff)
++#define PXAIO_COMDI_PVOFS 0x07000000
++#define PXAIO_COMDD_PVOFS(x) (x&0x000003ff)
++#define PXAIO_COMDI_POADR 0x08000000
++#define PXAIO_COMDD_POADR(x) (x&0x00fffffe)
++#define PXAIO_COMDI_RSTR 0x09000000
++#define PXAIO_COMDD_RSTR(x) (x&0x000000ff)
++#define PXAIO_COMDI_TCLOR 0x0A000000
++#define PXAIO_COMDD_TCLOR(x) (x&0x0000ffff)
++#define PXAIO_COMDI_FILL 0x0B000000
++#define PXAIO_COMDD_FILL(x) (x&0x0000ffff)
++#define PXAIO_COMDI_DSADR 0x0C000000
++#define PXAIO_COMDD_DSADR(x) (x&0x00fffffe)
++#define PXAIO_COMDI_SSADR 0x0D000000
++#define PXAIO_COMDD_SSADR(x) (x&0x00fffffe)
++#define PXAIO_COMDI_DHPIX 0x0E000000
++#define PXAIO_COMDD_DHPIX(x) (x&0x000003ff)
++#define PXAIO_COMDI_DVPIX 0x0F000000
++#define PXAIO_COMDD_DVPIX(x) (x&0x000003ff)
++#define PXAIO_COMDI_SHPIX 0x10000000
++#define PXAIO_COMDD_SHPIX(x) (x&0x000003ff)
++#define PXAIO_COMDI_SVPIX 0x11000000
++#define PXAIO_COMDD_SVPIX(x) (x&0x000003ff)
++#define PXAIO_COMDI_LBINI 0x12000000
++#define PXAIO_COMDD_LBINI(x) (x&0x0000ffff)
++#define PXAIO_COMDI_LBK2 0x13000000
++#define PXAIO_COMDD_LBK2(x) (x&0x0000ffff)
++#define PXAIO_COMDI_SHBINI 0x14000000
++#define PXAIO_COMDD_SHBINI(x) (x&0x0000ffff)
++#define PXAIO_COMDI_SHBK2 0x15000000
++#define PXAIO_COMDD_SHBK2(x) (x&0x0000ffff)
++#define PXAIO_COMDI_SVBINI 0x16000000
++#define PXAIO_COMDD_SVBINI(x) (x&0x0000ffff)
++#define PXAIO_COMDI_SVBK2 0x17000000
++#define PXAIO_COMDD_SVBK2(x) (x&0x0000ffff)
++
++// Action Command
++#define PXAIO_COMDI_CMGO 0x20000000
++#define PXAIO_COMDD_CMGO_CEND 0x00000001
++#define PXAIO_COMDD_CMGO_INT 0x00000002
++#define PXAIO_COMDD_CMGO_CMOD 0x00000010
++#define PXAIO_COMDD_CMGO_CDVRV 0x00000020
++#define PXAIO_COMDD_CMGO_CDHRV 0x00000040
++#define PXAIO_COMDD_CMGO_RUND 0x00008000
++#define PXAIO_COMDI_SCGO 0x21000000
++#define PXAIO_COMDD_SCGO_CEND 0x00000001
++#define PXAIO_COMDD_SCGO_INT 0x00000002
++#define PXAIO_COMDD_SCGO_ROP3 0x00000004
++#define PXAIO_COMDD_SCGO_TRNS 0x00000008
++#define PXAIO_COMDD_SCGO_DVRV 0x00000010
++#define PXAIO_COMDD_SCGO_DHRV 0x00000020
++#define PXAIO_COMDD_SCGO_SVRV 0x00000040
++#define PXAIO_COMDD_SCGO_SHRV 0x00000080
++// Specifications Document Rev.18 Add
++#define PXAIO_COMDD_SCGO_DSTXY 0x00008000
++#define PXAIO_COMDI_SBGO 0x22000000
++#define PXAIO_COMDD_SBGO_CEND 0x00000001
++#define PXAIO_COMDD_SBGO_INT 0x00000002
++#define PXAIO_COMDD_SBGO_DVRV 0x00000010
++#define PXAIO_COMDD_SBGO_DHRV 0x00000020
++#define PXAIO_COMDD_SBGO_SVRV 0x00000040
++#define PXAIO_COMDD_SBGO_SHRV 0x00000080
++#define PXAIO_COMDD_SBGO_SBMD 0x00000100
++#define PXAIO_COMDI_FLGO 0x23000000
++#define PXAIO_COMDD_FLGO_CEND 0x00000001
++#define PXAIO_COMDD_FLGO_INT 0x00000002
++#define PXAIO_COMDD_FLGO_ROP3 0x00000004
++#define PXAIO_COMDI_LDGO 0x24000000
++#define PXAIO_COMDD_LDGO_CEND 0x00000001
++#define PXAIO_COMDD_LDGO_INT 0x00000002
++#define PXAIO_COMDD_LDGO_ROP3 0x00000004
++#define PXAIO_COMDD_LDGO_ENDPX 0x00000008
++#define PXAIO_COMDD_LDGO_LVRV 0x00000010
++#define PXAIO_COMDD_LDGO_LHRV 0x00000020
++#define PXAIO_COMDD_LDGO_LDMOD 0x00000040
++
++#endif
+diff -Nur linux_c860_org/drivers/video/tosaLogoMsg.c linux/drivers/video/tosaLogoMsg.c
+--- linux_c860_org/drivers/video/tosaLogoMsg.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/video/tosaLogoMsg.c 2004-06-10 21:09:11.000000000 +0900
+@@ -0,0 +1,488 @@
++/* Logo Screen 16bits RGB(565) data*/
++#ifndef __initdata
++#define __initdata
++#endif
++static const int logo_msg_width_en __initdata = 32;
++static const int logo_msg_height_en __initdata = 480;
++static const unsigned short logo_msg_data_en[32*480] __initdata ={
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdf7,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd69a,0xa514,0xa514,0xa514,0xa514,0xa514,0xa514,0x528a,0x0000,0x528a,0xa514,0xa514,0xa514,0xa514,0xa514,0x632c,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x4a69,0xffff,0xffff,0xffff,0xffff,0xffff,0x8430,0x0000,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0x0020,0x0020,0xbdd7,0xffff,0xffff,0xffff,0xdedb,0x18e3,0x0000,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x738e,0x0000,0x0000,0x39e7,0x5aeb,0x4a49,0x0841,0x0000,0x4208,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x94b2,0x18e3,0x0000,0x0000,0x0000,0x0841,0x632c,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6ba,0xc638,0xce79,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdf7,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xb596,0x8c71,0x7bef,0x8430,0xad55,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7be,0x738e,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4208,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x4228,0x0000,0x18c3,0x7bcf,0xad75,0x31a6,0x10a2,0x9492,0x4a69,0x0000,0x0861,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa534,0x0000,0x39c7,0xef7d,0xffff,0xffff,0x4228,0x2104,0xffff,0xffff,0xad55,0x0020,0x2945,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x528a,0x0000,0xd69a,0xffff,0xffff,0xffff,0x4228,0x2104,0xffff,0xffff,0xffff,0x5acb,0x0000,0xd6ba,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0x0000,0xffff,0xffff,0xffff,0xffff,0x4228,0x2104,0xffff,0xffff,0xffff,0x7bef,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5acb,0x0000,0xc618,0xffff,0xffff,0xffff,0x4228,0x2104,0xffff,0xffff,0xffff,0x39e7,0x0000,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xb596,0x0000,0x2124,0xce79,0xffff,0xffff,0x4228,0x2104,0xffff,0xffdf,0x7bef,0x0000,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x738e,0x0000,0x0000,0x9cf3,0xffff,0x4228,0x0861,0x4a69,0x10a2,0x0000,0x2965,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x39e7,0xad75,0xffff,0x4228,0x0000,0x0000,0x31a6,0x9492,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0xdefb,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xb596,0x7bef,0x9492,0xdefb,0xffff,0xffff,0xffff,0xe71c,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x39e7,0x0000,0x0000,0x0000,0x0020,0x9cf3,0xffff,0xffff,0x4228,0x10a2,0x8c71,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x0000,0x39c7,0xb5b6,0xa514,0x10a2,0x0841,0xe71c,0xffff,0x73ae,0x1082,0x0000,0x8430,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4a49,0x0000,0xdedb,0xffff,0xffff,0x94b2,0x0000,0x94b2,0xffff,0xffff,0xe73c,0x18c3,0x1082,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4a49,0x0000,0xffff,0xffff,0xffff,0xd69a,0x0000,0x630c,0xffff,0xffff,0xffff,0x6b6d,0x0000,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x0000,0xd6ba,0xffff,0xffff,0xffdf,0x0841,0x39c7,0xffff,0xffff,0xffff,0x7bef,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x2104,0x4a69,0xffdf,0xffff,0xffff,0x4228,0x0020,0xf79e,0xffff,0xffff,0x4a49,0x0000,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xb5b6,0x0020,0x39c7,0x9cf3,0xc638,0x738e,0x0000,0x8430,0xbdf7,0x6b4d,0x0000,0x18c3,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c71,0x528a,0x738e,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0xa514,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x8410,0x2945,0xad75,0xffff,0xffff,0xef5d,0x73ae,0x4228,0x52aa,0xb596,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x2124,0x0000,0x0861,0xa534,0xffff,0xef7d,0x2104,0x0000,0x0000,0x0000,0x0000,0x94b2,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x0000,0x528a,0xef7d,0xffff,0xffff,0x8430,0x0000,0x2945,0xef5d,0xdefb,0x10a2,0x1082,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4a69,0x0000,0xe71c,0xffff,0xffff,0xffff,0x2124,0x0000,0xa534,0xffff,0xffff,0x6b6d,0x0000,0xce59,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0x0000,0xffff,0xffff,0xffff,0xd69a,0x0000,0x0841,0xf79e,0xffff,0xffff,0x7bcf,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x632c,0x0000,0xbdf7,0xffff,0xffff,0x73ae,0x0000,0x528a,0xffff,0xffff,0xf79e,0x2945,0x0020,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce79,0x0020,0x18c3,0x8c71,0x8c51,0x0861,0x0000,0xad75,0xffff,0xad75,0x18c3,0x0000,0x5acb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cd3,0x0841,0x0000,0x0000,0x0000,0x5acb,0xffff,0xffff,0xad55,0x0861,0x632c,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0xb596,0xa514,0xd6ba,0xffff,0xffff,0xffff,0xf7be,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0x7bef,0x31a6,0x0861,0x0000,0x0020,0x2945,0x5acb,0xbdf7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xad75,0x0861,0x0000,0x0020,0x2965,0x1082,0x0020,0x1082,0x0000,0x0000,0x5aeb,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x0861,0x0020,0x8c51,0xf79e,0xffff,0x4228,0x2104,0xffff,0xce79,0x39c7,0x0000,0x6b6d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x738e,0x0000,0x9492,0xffff,0xffff,0xffff,0x4228,0x2104,0xffff,0xffff,0xf79e,0x2124,0x0841,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0x0000,0xf79e,0xffff,0xffff,0xffff,0x4228,0x2104,0xffff,0xffff,0xffff,0x73ae,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4a49,0x0000,0xef7d,0xffff,0xffff,0xffff,0x4228,0x2104,0xffff,0xffff,0xffff,0x6b4d,0x0000,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x7bcf,0xffff,0xffff,0xffff,0x4228,0x2104,0xffff,0xffff,0xe71c,0x1082,0x18c3,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0x18c3,0x0000,0x4a69,0xd6ba,0xffff,0x4228,0x18e3,0xce79,0x9492,0x18c3,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0x2124,0x0000,0x9cd3,0xffff,0x4228,0x0000,0x0000,0x0000,0x18c3,0xa534,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xbdd7,0xdefb,0xffff,0x8c51,0x5aeb,0x73ae,0xb596,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0xa514,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0xa514,0x5aeb,0x2104,0x0000,0x0000,0x0000,0x10a2,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0xa514,0x5aeb,0x2104,0x0000,0x0000,0x0000,0x2965,0x632c,0xa514,0xd6ba,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x0000,0x0000,0x0861,0x4208,0x7bcf,0xb5b6,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x2124,0x528a,0x8c71,0xc618,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7be,0xc618,0x9492,0x52aa,0x2124,0x0000,0x0000,0x0020,0x31a6,0x632c,0xa514,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0xb5b6,0x7bef,0x4a69,0x1082,0x0000,0x0000,0x1082,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xce79,0x9492,0x5acb,0x31a6,0x0020,0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0xb596,0x7bcf,0x4208,0x0861,0x0000,0x0000,0x1082,0x4228,0x7bef,0xb596,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c71,0x0000,0x0000,0x0000,0x31a6,0x632c,0xa514,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x18c3,0x528a,0x9492,0xd69a,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xb596,0x6b6d,0x39c7,0x0020,0x0000,0x0000,0x0861,0x4228,0x8410,0xbdd7,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xb5b6,0x7bcf,0x39c7,0x0020,0x0000,0x0000,0x0020,0x39c7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xb5b6,0x8410,0x4208,0x0841,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xb596,0x31a6,0x0000,0x1082,0x630c,0xef7d,0xffff,0xffff,0x8430,0x9492,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc638,0x0020,0x0000,0x39c7,0x2124,0x0000,0x31a6,0xffdf,0xffff,0x31a6,0x0000,0x18e3,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0x9cd3,0xffff,0xffdf,0x52aa,0x0000,0xbdd7,0xffff,0xe73c,0x73ae,0x0000,0x39e7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0x0000,0xf7be,0xffff,0xffff,0xb5b6,0x0000,0x738e,0xffff,0xffff,0xffff,0x4a49,0x0000,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0xf79e,0xffff,0xffff,0xef5d,0x0000,0x528a,0xffff,0xffff,0xffff,0x7bef,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0x2104,0x18c3,0xffff,0xffff,0xffff,0x6b6d,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0861,0xb5b6,0xffff,0xffff,0x6b6d,0x0000,0xd69a,0xffff,0xe71c,0x18c3,0x0000,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd69a,0x5aeb,0x0020,0x0000,0x18e3,0x4228,0x2965,0x0000,0x2124,0x4208,0x0841,0x0000,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0x630c,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce59,0xd69a,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdf7,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0xffff,0xffff,0xa514,0x7bef,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xffff,0xffff,0x4228,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xffff,0xffff,0xd69a,0xc638,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xad75,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xd69a,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0x4a49,0x0000,0xc638,0xc638,0xc638,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc638,0x1082,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x738e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x52aa,0x0000,0x4208,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x2965,0x0000,0x7bef,0x7bef,0x7bef,0x7bef,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0x0000,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xad75,0xad55,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xad75,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x10a2,0x5aeb,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x18c3,0x0000,0x4228,0x4228,0x0861,0x0000,0x630c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0xffff,0xffff,0xdefb,0x0000,0x2124,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cd3,0x5aeb,0xffff,0xffff,0xffff,0x0000,0x31a6,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xb5b6,0x9492,0x7bef,0x7bef,0xa534,0xd6ba,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd69a,0xce59,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x73ae,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2965,0xc618,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4a69,0x0000,0x18c3,0x7bcf,0xad75,0xc638,0xbdf7,0x94b2,0x4a69,0x0000,0x0020,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa534,0x0000,0x39e7,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xad55,0x0020,0x2124,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x528a,0x0000,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5acb,0x0000,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0x0000,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bcf,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x6b4d,0x0000,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x2965,0x0000,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd69a,0x0020,0x0861,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0x528a,0x0000,0x5acb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x94b2,0x0020,0x0000,0x18c3,0x4a69,0x5aeb,0x5acb,0x39c7,0x0020,0x0000,0x39c7,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd69a,0x5acb,0x10a2,0x0000,0x0000,0x0000,0x0000,0x31a6,0x9492,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xdefb,0xdefb,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x2124,0x0000,0x0000,0x2965,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x73ae,0x0000,0x5acb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x10a2,0x0000,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0x0841,0x0000,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xbdd7,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xb596,0x7bef,0x9492,0xdefb,0xffff,0xffff,0xffff,0xe71c,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x39e7,0x0000,0x0000,0x0000,0x0020,0x9cf3,0xffff,0xffff,0x4228,0x10a2,0x8c71,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x0000,0x39c7,0xb5b6,0xa514,0x10a2,0x0841,0xe71c,0xffff,0x73ae,0x1082,0x0000,0x8430,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4a49,0x0000,0xdedb,0xffff,0xffff,0x94b2,0x0000,0x94b2,0xffff,0xffff,0xe73c,0x18c3,0x1082,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4a49,0x0000,0xffff,0xffff,0xffff,0xd69a,0x0000,0x630c,0xffff,0xffff,0xffff,0x6b6d,0x0000,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x0000,0xd6ba,0xffff,0xffff,0xffdf,0x0841,0x39c7,0xffff,0xffff,0xffff,0x7bef,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x2104,0x4a69,0xffdf,0xffff,0xffff,0x4228,0x0020,0xf79e,0xffff,0xffff,0x4a49,0x0000,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xb5b6,0x0020,0x39c7,0x9cf3,0xc638,0x738e,0x0000,0x8430,0xbdf7,0x6b4d,0x0000,0x18c3,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c71,0x528a,0x738e,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0xa514,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xad75,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x10a2,0x5aeb,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x18c3,0x0000,0x4228,0x4228,0x0861,0x0000,0x630c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0xffff,0xffff,0xdefb,0x0000,0x2124,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cd3,0x5aeb,0xffff,0xffff,0xffff,0x0000,0x31a6,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xb596,0x8c71,0x7bef,0x8430,0xad55,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd69a,0xce59,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7be,0x738e,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4208,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x4228,0x0000,0x18c3,0x7bcf,0xad75,0x31a6,0x10a2,0x9492,0x4a69,0x0000,0x0861,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa534,0x0000,0x39c7,0xef7d,0xffff,0xffff,0x4228,0x2104,0xffff,0xffff,0xad55,0x0020,0x2945,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x528a,0x0000,0xd69a,0xffff,0xffff,0xffff,0x4228,0x2104,0xffff,0xffff,0xffff,0x5acb,0x0000,0xd6ba,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0x0000,0xffff,0xffff,0xffff,0xffff,0x4228,0x2104,0xffff,0xffff,0xffff,0x7bef,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5acb,0x0000,0xc618,0xffff,0xffff,0xffff,0x4228,0x2104,0xffff,0xffff,0xffff,0x39e7,0x0000,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xb596,0x0000,0x2124,0xce79,0xffff,0xffff,0x4228,0x2104,0xffff,0xffdf,0x7bef,0x0000,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x738e,0x0000,0x0000,0x9cf3,0xffff,0x4228,0x0861,0x4a69,0x10a2,0x0000,0x2965,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x39e7,0xad75,0xffff,0x4228,0x0000,0x0000,0x31a6,0x9492,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0xdefb,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0xa514,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0xa514,0x5aeb,0x2104,0x0000,0x0000,0x0000,0x10a2,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0xa514,0x5aeb,0x2104,0x0000,0x0000,0x0000,0x2965,0x632c,0xa514,0xd6ba,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x0000,0x0000,0x0861,0x4208,0x7bcf,0xb5b6,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x2124,0x528a,0x8c71,0xc618,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7be,0xc618,0x9492,0x52aa,0x2124,0x0000,0x0000,0x0020,0x31a6,0x632c,0xa514,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0xb5b6,0x7bef,0x4a69,0x1082,0x0000,0x0000,0x1082,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xce79,0x9492,0x5acb,0x31a6,0x0020,0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0xb596,0x7bcf,0x4208,0x0861,0x0000,0x0000,0x1082,0x4228,0x7bef,0xb596,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c71,0x0000,0x0000,0x0000,0x31a6,0x632c,0xa514,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x18c3,0x528a,0x9492,0xd69a,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xb596,0x6b6d,0x39c7,0x0020,0x0000,0x0000,0x0861,0x4228,0x8410,0xbdd7,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xb5b6,0x7bcf,0x39c7,0x0020,0x0000,0x0000,0x0020,0x39c7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xb5b6,0x8410,0x4208,0x0841,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdf7,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xad55,0x7bcf,0x18c3,0x3186,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0x1082,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x52aa,0x0000,0xd6ba,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x2965,0x0000,0xce59,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdf7,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x738e,0x2945,0x0000,0x18e3,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3186,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xbdd7,0x8430,0x18e3,0x4a49,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0x1082,0x39e7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5acb,0x0000,0xd6ba,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x2945,0x0000,0xce59,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdf7,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x738e,0x2965,0x0000,0x18c3,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2945,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xffff,0xffff,0x4228,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0xffff,0xffff,0x73ae,0x4228,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdf7,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xb596,0x7bef,0x10a2,0x31a6,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0x1082,0x4a49,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x52aa,0x0000,0xd6ba,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4208,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xce59,0x632c,0x0000,0x0861,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x94b2,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xad75,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x632c,0x8c71,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6ba,0x9cf3,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x5aeb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cd3,0x0000,0x0861,0x8430,0xb5b6,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4a49,0x0000,0xa534,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4a69,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x9cf3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x630c,0x0861,0xa514,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x4228,0x0861,0x0000,0x0000,0x18e3,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x8430,0x528a,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x18c3,0x0000,0x4228,0x4228,0x4228,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8410,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0x0000,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x528a,0x2945,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0x7bef,0x31a6,0x0861,0x0000,0x0020,0x2945,0x5acb,0xbdf7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xad75,0x0861,0x0000,0x0020,0x2965,0x1082,0x0020,0x1082,0x0000,0x0000,0x5aeb,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x0861,0x0020,0x8c51,0xf79e,0xffff,0x4228,0x2104,0xffff,0xce79,0x39c7,0x0000,0x6b6d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x738e,0x0000,0x9492,0xffff,0xffff,0xffff,0x4228,0x2104,0xffff,0xffff,0xf79e,0x2124,0x0841,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0x0000,0xf79e,0xffff,0xffff,0xffff,0x4228,0x2104,0xffff,0xffff,0xffff,0x73ae,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4a49,0x0000,0xef7d,0xffff,0xffff,0xffff,0x4228,0x2104,0xffff,0xffff,0xffff,0x6b4d,0x0000,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x7bcf,0xffff,0xffff,0xffff,0x4228,0x2104,0xffff,0xffff,0xe71c,0x1082,0x18c3,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0x18c3,0x0000,0x4a69,0xd6ba,0xffff,0x4228,0x18e3,0xce79,0x9492,0x18c3,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0x2124,0x0000,0x9cd3,0xffff,0x4228,0x0000,0x0000,0x0000,0x18c3,0xa534,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xbdd7,0xdefb,0xffff,0x8c51,0x5aeb,0x73ae,0xb596,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xad55,0xdefb,0xffff,0xffff,0xffff,0xef7d,0xc638,0xd6ba,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cd3,0x1082,0x0000,0x9cd3,0xffff,0xffff,0x8c71,0x0841,0x0000,0x0000,0x3186,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc638,0x0000,0x0861,0x7bcf,0xdefb,0xffff,0xbdf7,0x0000,0x0020,0x6b4d,0x5aeb,0x0000,0x4208,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x630c,0x0000,0xad55,0xffff,0xffff,0xffff,0x528a,0x0000,0x6b6d,0xffff,0xffff,0x4228,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0x0000,0xffdf,0xffff,0xffff,0xf79e,0x0841,0x0000,0xd69a,0xffff,0xffff,0x7bef,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4a69,0x0000,0xef5d,0xffff,0xffff,0xa534,0x0000,0x2124,0xffff,0xffff,0xffff,0x630c,0x0000,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x0000,0x6b6d,0xffdf,0xf7be,0x39c7,0x0000,0x7bef,0xffff,0xef5d,0x8c71,0x0020,0x18e3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7be,0x2945,0x0000,0x1082,0x1082,0x0000,0x0861,0xe73c,0xffff,0x94b2,0x0000,0x0841,0xb596,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x738e,0x31a6,0x2104,0x52aa,0xce79,0xffff,0xffff,0xd69a,0x8c51,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x2104,0x4208,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdf7,0x7bef,0x9492,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd69a,0xa514,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x2104,0x4208,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ };
+diff -Nur linux_c860_org/drivers/video/tosaLogoMsgJ.c linux/drivers/video/tosaLogoMsgJ.c
+--- linux_c860_org/drivers/video/tosaLogoMsgJ.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/video/tosaLogoMsgJ.c 2004-06-10 21:09:11.000000000 +0900
+@@ -0,0 +1,488 @@
++/* Logo Screen 16bits RGB(565) data*/
++#ifndef __initdata
++#define __initdata
++#endif
++static const int logo_msg_width_jp __initdata = 32;
++static const int logo_msg_height_jp __initdata = 480;
++static const unsigned short logo_msg_data_jp[32*480] __initdata ={
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xd69a,0x7bef,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x0000,0x39c7,0xd6ba,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x0000,0x0020,0x39c7,0x9492,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x0861,0x0000,0x0020,0x7bef,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x0000,0x0000,0x0000,0x0000,0x39e7,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x7bef,0x94b2,0x0861,0x0000,0x3186,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7be,0xbdd7,0x3186,0x0000,0x6b6d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x7bef,0xffff,0xdefb,0x3186,0x0000,0x0861,0xb596,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0x0861,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xf7be,0x632c,0x0000,0x0000,0x8430,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0x94b2,0x0020,0x0000,0x52aa,0xe73c,0xffff,0xffff,0xffff,0xffff,0xd69a,0x0020,0x2965,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xb5b6,0x1082,0x0000,0x0841,0x5acb,0x94b2,0xa514,0x6b4d,0x0861,0x0000,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0x4a49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce59,0x738e,0x4228,0x4228,0x5acb,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xdefb,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe71c,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8410,0x0000,0x8430,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xc618,0x18c3,0x2124,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x630c,0x0000,0x0020,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xdedb,0x0861,0x0000,0x738e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x4a49,0x0000,0x0020,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x94b2,0x0000,0x0000,0xb5b6,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0xc638,0xd6ba,0x39e7,0x0000,0x0020,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0x632c,0x0000,0x0861,0xc618,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x7bef,0xf7be,0x52aa,0x0000,0x0000,0x632c,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x52aa,0x0000,0x0861,0xbdd7,0xffff,0xffff,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0x8410,0x0020,0x0000,0x18e3,0xa534,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x5acb,0x0000,0x0000,0x6b4d,0xdefb,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xbdf7,0x2104,0x0000,0x0000,0x2965,0xd6ba,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x0861,0x0000,0x0000,0x2124,0x2965,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xf7be,0x8410,0x1082,0x2124,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0x738e,0x18c3,0x0000,0x0000,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6ba,0x7bef,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf7be,0xa534,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xdefb,0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xdefb,0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xb5b6,0x630c,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xdefb,0x0000,0x0000,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xad55,0x2945,0x0000,0x0000,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf7be,0x10a2,0x0000,0x0000,0x18c3,0x2104,0x4208,0x4228,0x5acb,0x5aeb,0x4a69,0x0000,0x7bef,0xffff,0xffff,0xdefb,0x39c7,0x0000,0x0000,0x2124,0x94b2,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xc638,0x3186,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bef,0xffff,0xa514,0x0861,0x0000,0x0861,0x8c71,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0xc638,0xc638,0xa534,0xa514,0x94b2,0x7bef,0x7bef,0x630c,0xad75,0x8c71,0x0000,0x0000,0x3186,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cd3,0x0000,0x0000,0x528a,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce79,0x0020,0x0000,0x39e7,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x2945,0x0000,0x18e3,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc618,0x2104,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0x630c,0x52aa,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xc638,0xce59,0xffff,0xffff,0xffff,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0020,0x0000,0x4228,0xe73c,0xffff,0xffff,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0x39e7,0x0000,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xb5b6,0x10a2,0x0000,0x10a2,0x9cf3,0xffdf,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0x4a49,0x0000,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0x632c,0x0020,0x0000,0x2124,0x94b2,0xe73c,0x0000,0x2104,0xffff,0xffff,0x6b6d,0x0000,0x8c71,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0x73ae,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x2104,0x2104,0x1082,0x0000,0x528a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0x5aeb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xef5d,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0xdedb,0x39c7,0x0000,0x2104,0xd6ba,0xdefb,0x0000,0x18e3,0xdefb,0xdefb,0xdefb,0x0861,0x0000,0xc618,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0x39e7,0x0000,0x0861,0xd6ba,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0xffff,0x52aa,0x0000,0x6b6d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x5aeb,0x73ae,0xffff,0xffff,0xffff,0xffff,0xd6ba,0x18e3,0x0861,0xc618,0xffff,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0xffff,0x9492,0x2965,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0xc638,0xffff,0xffff,0xffff,0xffff,0x7bef,0x9492,0xffff,0xffff,0xffff,0xe71c,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0x9cd3,0x5aeb,0xdedb,0xffff,0x7bef,0x0000,0xa514,0xef7d,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0x5aeb,0x0000,0xc638,0xffff,0x7bef,0x0000,0xa514,0xc638,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0x5aeb,0x0000,0xc638,0xffff,0x7bef,0x0000,0xa514,0xd69a,0x2945,0x0000,0x2104,0x4228,0x4228,0x31a6,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0x5aeb,0x0000,0xc638,0xffff,0x7bef,0x0000,0xa514,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xc638,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x0000,0x1082,0x7bef,0x7bef,0x2965,0x0000,0x630c,0x7bef,0x4208,0x0000,0xa514,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xc638,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa514,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xc638,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x0000,0x1082,0x7bef,0x7bef,0x2965,0x0000,0x630c,0x7bef,0x4208,0x0000,0xa514,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xc638,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0x5aeb,0x0000,0xc638,0xffff,0x7bef,0x0000,0xa514,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xc638,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0x5aeb,0x0000,0xc638,0xffff,0x7bef,0x0000,0xa514,0xe71c,0x528a,0x0000,0x4208,0x7bef,0x7bef,0x630c,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0x5aeb,0x0000,0xc638,0xffff,0x7bef,0x0000,0xa514,0xc638,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0xc638,0xa514,0xe73c,0xffff,0x7bef,0x0000,0xa514,0xe71c,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x4228,0x5acb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xdefb,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe73c,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf79e,0x3186,0x0000,0x528a,0xb5b6,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe73c,0x52aa,0x0000,0x0000,0x0000,0x0841,0x39e7,0x5aeb,0x7bcf,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0xbdf7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xd6ba,0x6b6d,0x2104,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdefb,0xe73c,0xffff,0xffff,0xe71c,0xb5b6,0x9cd3,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x528a,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0x6b4d,0x0000,0xb596,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0xdefb,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0x632c,0x0000,0x8c71,0xffff,0xffff,0xffff,0xffff,0x5acb,0x73ae,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0xdefb,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0x9492,0x0000,0x5acb,0xffff,0xffff,0xffff,0xffff,0x2104,0x4228,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0xdefb,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xc638,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0x18e3,0x4228,0xf7be,0xc638,0xc638,0xc638,0x630c,0x0000,0xad55,0xc638,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffdf,0x10a2,0x0000,0xdedb,0xffff,0xf79e,0x5aeb,0x0000,0x4228,0xdefb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x632c,0x0000,0x8410,0xef7d,0x39e7,0x0000,0x0000,0x4228,0xe73c,0x2104,0x0000,0x39e7,0x2104,0x0000,0x39e7,0x31a6,0xa514,0x0000,0x2965,0x5aeb,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd69a,0x0000,0x18c3,0x2124,0x0000,0x8410,0x2104,0x4228,0xffff,0x7bef,0x0000,0xdefb,0x7bef,0x0000,0xdefb,0xffff,0xa514,0x0000,0x0000,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0x4a49,0x0000,0x0000,0x738e,0xffff,0x2104,0x4228,0xffff,0x7bef,0x0000,0xdefb,0x7bef,0x0000,0xdefb,0xffff,0xa514,0x0000,0x2965,0x5aeb,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x0000,0x0000,0xd6ba,0xffff,0x2104,0x4228,0xffff,0x7bef,0x0000,0xdefb,0x7bef,0x0000,0xdefb,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffdf,0x18e3,0x0841,0x0020,0x2945,0xf79e,0x2104,0x4228,0xffff,0x528a,0x0000,0x8c71,0x528a,0x0000,0x8c71,0xa514,0x94b2,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xad75,0x0000,0x5acb,0x7bef,0x0000,0x4a49,0x18e3,0x4228,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8410,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x5acb,0x0000,0xa514,0xffdf,0x52aa,0x0000,0x0000,0x4228,0xffff,0x5aeb,0x5aeb,0x5aeb,0x2965,0x0000,0x528a,0x4a69,0x8c51,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x1082,0x0000,0xdefb,0xffff,0xf79e,0x39e7,0x0000,0x31a6,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0xdefb,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xd69a,0x0000,0x10a2,0xffff,0xffff,0xffff,0xffdf,0x39e7,0xc638,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0xdefb,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0x9cf3,0x0000,0x4208,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0xdefb,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0x6b6d,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0xdefb,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xd6ba,0x9492,0xb596,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xdefb,0xffdf,0xffff,0xf79e,0xdefb,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffdf,0x73ae,0x18e3,0x0020,0x2945,0x6b6d,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x9492,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x6b6d,0x0000,0x1082,0x2104,0x0861,0x0000,0x0861,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xef5d,0x0020,0x2945,0xf79e,0xffff,0xf7be,0x94b2,0x0020,0x0020,0xbdf7,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x6b6d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xdefb,0x0000,0x5acb,0xffff,0xffff,0xffff,0xffff,0xb5b6,0x0020,0x18c3,0xef5d,0xffff,0xffff,0xffff,0xc638,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf7be,0x1082,0x0861,0x9cd3,0xd6ba,0xdefb,0xdefb,0xdefb,0x73ae,0x0000,0x5aeb,0xdefb,0xdefb,0xdefb,0xb596,0x0000,0x4208,0xdefb,0xdefb,0xdefb,0xdefb,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x94b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xad55,0x4228,0x2104,0x2104,0x2104,0x2104,0x2104,0x10a2,0x0000,0x1082,0x2104,0x2104,0x2104,0x0020,0x0000,0x2104,0x2104,0x2104,0x18c3,0x8430,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd69a,0x0000,0x52aa,0xffff,0xffff,0xffff,0x4228,0x0000,0xd69a,0xffff,0xffff,0xffdf,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x1082,0x18e3,0xffff,0xffff,0xffff,0x6b6d,0x0000,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0x4208,0x0000,0xf79e,0xffff,0xffff,0xad55,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xc618,0x1082,0x0000,0x9cd3,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0xdefb,0xffff,0xffff,0xe73c,0x0841,0x39e7,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf7be,0x18c3,0x0000,0x528a,0xef7d,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xb596,0x0000,0x39c7,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0x4a69,0x0000,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x9cf3,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x10a2,0x18e3,0xffff,0xffff,0xffff,0xffff,0xffff,0x6b6d,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x738e,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cf3,0x0000,0x630c,0xffff,0xffff,0xffff,0xffff,0x9492,0x0000,0x2945,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdedb,0x0000,0x1082,0xdedb,0xffff,0xffff,0xffff,0xad75,0x0861,0x0020,0xd6ba,0xffff,0xffff,0xffff,0xbdf7,0x0020,0x0000,0x8c71,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0x5acb,0x0000,0x1082,0x52aa,0x5aeb,0x39c7,0x0000,0x0000,0x8c51,0xffff,0xffff,0xffff,0xdedb,0x10a2,0x0000,0x4228,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x4a69,0x0000,0x0000,0x0000,0x0000,0x10a2,0x9cf3,0xffff,0xffff,0xffff,0xe71c,0x18c3,0x0000,0x2104,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0xa534,0xa514,0xb5b6,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffdf,0x52aa,0x18c3,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdf7,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffdf,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x4a69,0x0000,0x4228,0xffdf,0xffff,0xffff,0xe73c,0x3186,0x1082,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xad55,0x0020,0x0000,0x52aa,0xffdf,0xffff,0xffff,0x4228,0x0000,0x3186,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xdedb,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0xc638,0x738e,0x0000,0x0000,0x4228,0xef5d,0xffff,0xef5d,0x2124,0x0000,0x39e7,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0x5aeb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18c3,0xad75,0xffff,0xe73c,0x2124,0x0000,0x2104,0xce59,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0x8c51,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x4228,0x2945,0x0000,0x0000,0x4228,0xd69a,0xe73c,0x4228,0x0000,0x0020,0xb5b6,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x9492,0x1082,0x0000,0x39c7,0xffff,0xffdf,0x8c71,0x2124,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd69a,0xc638,0xf7be,0xffff,0xd69a,0x7bef,0xad55,0x4a69,0xd6ba,0xffff,0xffff,0xffff,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0x0000,0xdefb,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xa514,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0x94b2,0xffff,0x4228,0x0000,0xdefb,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0x2124,0x0000,0xad55,0x4228,0x0000,0xdefb,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6ba,0x2104,0x0000,0x2124,0xf79e,0x4228,0x0000,0xdefb,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xad55,0x0020,0x18c3,0xdefb,0xffff,0x4228,0x0000,0xdefb,0xffff,0xa514,0x0000,0x6b6d,0xdefb,0xdefb,0x0000,0x18e3,0xdefb,0xdefb,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdd7,0xe73c,0xffff,0xffff,0x4228,0x0000,0xdefb,0xffff,0xa514,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0x7bcf,0x0861,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0x0000,0xdefb,0xffff,0xa514,0x0000,0x1082,0x2104,0x2104,0x0000,0x0020,0x2104,0x2104,0x3186,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0x5aeb,0x0000,0xad55,0xdefb,0xdefb,0xdefb,0xdefb,0xdefb,0x39e7,0x0000,0xc618,0xdefb,0x8c71,0x0000,0x7bef,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0x5aeb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7bef,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xc618,0x2965,0x2104,0x2104,0x2104,0x2104,0x2104,0x2104,0x0841,0x0000,0x18e3,0x2104,0x10a2,0x0000,0x7bef,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0x0000,0xdefb,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0x0000,0xdefb,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0x4228,0x5acb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0x0000,0xdefb,0xffff,0xa514,0x0000,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd69a,0xc638,0xf7be,0xffff,0xad75,0x2104,0x9492,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd69a,0x39c7,0x6b6d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce59,0x0000,0x528a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0x7bcf,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0x0000,0x2945,0x8430,0xce79,0xffff,0xffff,0xffff,0xef5d,0x0000,0x39e7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x18c3,0x528a,0x9492,0xce79,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x4228,0x0000,0x1082,0x4208,0x0841,0x0000,0x0000,0x0000,0x0000,0x0841,0x630c,0x94b2,0xbdf7,0xdedb,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0xf7be,0xffff,0xffff,0xffff,0xe73c,0x10a2,0x0000,0xd6ba,0xf7be,0xc638,0x8c51,0x528a,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x528a,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x6b6d,0xffff,0xffff,0xffff,0xffff,0x528a,0x0000,0x8c71,0x6b6d,0x39c7,0x10a2,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffdf,0x10a2,0x18e3,0xffff,0xffff,0xffff,0xffff,0x632c,0x0000,0xc638,0xffff,0xffff,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0x52aa,0x0000,0xd6ba,0xffff,0xffff,0xffff,0x8430,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x2965,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x0000,0xad75,0xffff,0xffff,0xffff,0xa514,0x0000,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x4a49,0x0000,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0xa514,0xffff,0xffff,0xffff,0xc638,0x0000,0x528a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x6b6d,0x0000,0x738e,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cf3,0x0000,0xa514,0xffff,0xffff,0xffff,0xdefb,0x0000,0x2965,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xad55,0x0000,0x2945,0xffff,0xffff,0xffff,0xffff,0xffff,0x6b4d,0x0000,0xbdf7,0xffff,0xffff,0xffff,0xffff,0x9492,0xc618,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef5d,0x0841,0x0000,0x9cf3,0xffff,0xffff,0xffff,0xdedb,0x0861,0x0841,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0x738e,0x0000,0x0020,0x5acb,0x9cd3,0x738e,0x0861,0x0000,0x738e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x4a49,0x0000,0x0000,0x0000,0x0000,0x0000,0x5acb,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xb596,0x6b4d,0x5aeb,0x6b6d,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0x39e7,0x2124,0x9492,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0x18c3,0x0000,0x0000,0x0000,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0x2124,0x0000,0x39e7,0x8430,0x0020,0x0000,0x8c71,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x39c7,0x0000,0x2124,0xf79e,0xffff,0xad55,0x0000,0x0000,0x8c71,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x39e7,0x0000,0x1082,0xdedb,0xffff,0xffff,0xffff,0x8c71,0x0000,0x0000,0x8c71,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x52aa,0x0000,0x0020,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c71,0x0000,0x0000,0x8c71,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x52aa,0x0000,0x0000,0x9cf3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c71,0x0000,0x0000,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x4a69,0x0000,0x0000,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c71,0x0000,0x0000,0x52aa,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef7d,0x39e7,0x0000,0x0000,0x738e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cd3,0x0020,0x0000,0x2945,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x4208,0x0000,0x0000,0x738e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xb596,0x0861,0x0000,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdedb,0x18c3,0x8430,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x8410,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0xad75,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xc618,0x0000,0x0020,0x528a,0xad75,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xbdd7,0x2945,0x0000,0x0000,0x0000,0x0861,0x52aa,0xa514,0xe71c,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce59,0x6b6d,0x2124,0x0000,0x0000,0x0000,0x0000,0x2124,0x5acb,0x9492,0xc618,0x6b4d,0x0000,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0x9cd3,0x52aa,0x18e3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2945,0x5acb,0x7bcf,0xa514,0xc638,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0xb596,0x7bef,0x4a69,0x18e3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb596,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce59,0x0000,0x4a49,0xa534,0x738e,0x4208,0x0841,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0x0000,0x39e7,0xffff,0xffff,0xffff,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf7be,0x3186,0x9492,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x10a2,0x1082,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x4a69,0xffff,0xffff,0xffff,0xffff,0xffff,0xad75,0x6b4d,0xf7be,0xffff,0xffff,0x4208,0x0000,0xd6ba,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0x0000,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0x4208,0x0000,0xad75,0xffff,0xffff,0xb5b6,0xb5b6,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf79e,0x0020,0x0000,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0x94b2,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce59,0x0000,0x18e3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd69a,0x0000,0x2124,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xa534,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x0841,0x0000,0xef7d,0xffff,0xffff,0xffff,0xffff,0xb5b6,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x31a6,0x0000,0xce59,0xffff,0xffff,0xffff,0xe71c,0x0861,0x4a49,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4a69,0x0000,0xad55,0xffff,0xffff,0xffff,0x4208,0x0020,0xdedb,0x9492,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0x9cd3,0xffff,0xffff,0x94b2,0x0000,0x8430,0xbdf7,0x0000,0x6b4d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bcf,0x0000,0x7bef,0xffff,0xffff,0xbdd7,0x5acb,0xef7d,0x2104,0x18e3,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xad75,0x2104,0x5acb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6ba,0xd69a,0xffdf,0xffff,0xffff,0xffff,0xffff,0x630c,0x0000,0xb596,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce59,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd69a,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xad55,0x630c,0x5aeb,0x94b2,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdf7,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x4208,0x0000,0x0000,0x0000,0x0000,0x2124,0xe73c,0xffff,0xffff,0xffff,0xffff,0xc638,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0x4228,0x0000,0x2104,0x9492,0x9cf3,0x4208,0x0000,0x528a,0xffff,0xffff,0xffff,0xffff,0xc638,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xb596,0x0000,0x1082,0xe73c,0xffff,0xffff,0xf7be,0x2124,0x0000,0xdefb,0xffff,0xffff,0xffff,0xc638,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x52aa,0x0000,0x73ae,0xffff,0xffff,0xffff,0xffff,0x8c71,0x0000,0xa514,0xffff,0xffff,0xffff,0xc638,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0x18e3,0x0000,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xc638,0x0000,0x7bef,0xffff,0xffff,0xffff,0xdefb,0x0000,0x52aa,0xffff,0xffff,0xffff,0xd69a,0xce59,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf79e,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xdefb,0x0000,0x7bef,0xffff,0xffff,0xffff,0xdefb,0x0000,0x39e7,0xa534,0x52aa,0x1082,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xdefb,0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x0000,0x7bef,0xffff,0xffff,0xffff,0xdedb,0x0000,0x0000,0x0000,0x0000,0x0000,0x1082,0x630c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xdefb,0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xd69a,0x0000,0x7bef,0xffff,0xef7d,0x6b4d,0x0020,0x0000,0x0000,0x39e7,0x8c51,0xd6ba,0xffff,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xdefb,0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xb596,0x0000,0x8c51,0xbdd7,0x18e3,0x0000,0x0841,0x0841,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xdefb,0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x39e7,0x0020,0x0000,0x4228,0xe71c,0x4208,0x0000,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xdefb,0x0000,0x0000,0xffff,0xffff,0xffff,0xffff,0xffff,0x39e7,0x0000,0x0000,0x0000,0x8410,0xffff,0xffff,0x528a,0x0000,0xce59,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffdf,0xb596,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xe71c,0x0000,0x0000,0x0000,0x8c71,0xffff,0xffff,0xffff,0x632c,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8430,0x0000,0x0000,0x8c51,0xffff,0xffff,0xffff,0xffff,0x8430,0x0000,0x738e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc618,0x18c3,0x5acb,0xffff,0xffff,0xffff,0xffff,0xffff,0xa534,0x18e3,0x7bef,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xd69a,0xb5b6,0xa514,0x9cd3,0x7bef,0x7bef,0x7bef,0x7bef,0xa514,0xa514,0xad75,0xc638,0xd69a,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x6b6d,0x0861,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x2124,0x0000,0x0000,0x0020,0x2965,0x4a49,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x52aa,0x4228,0x31a6,0x18c3,0x0000,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x0000,0x0020,0x9492,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xb5b6,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0x39c7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0x8410,0x0000,0x0020,0xbdf7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0x2124,0x0000,0x0020,0x630c,0xce79,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0x4a69,0x0000,0x0000,0x0000,0xc618,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xad75,0x39c7,0x6b6d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd6ba,0x2124,0x73ae,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7be,0x8c51,0x0841,0x0000,0x10a2,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0x9492,0x18e3,0x0000,0x0000,0x18c3,0xc618,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0xa514,0x528a,0x0841,0x0000,0x0000,0x0000,0x4a69,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7d,0x10a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x2124,0xa534,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2945,0x0000,0x0000,0x0020,0x4228,0xad55,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c51,0x6b6d,0xad55,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0xc638,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0xc638,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x4228,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0xc638,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ };
+diff -Nur linux_c860_org/drivers/video/tosa_backlight.c linux/drivers/video/tosa_backlight.c
+--- linux_c860_org/drivers/video/tosa_backlight.c 1970-01-01 09:00:00.000000000 +0900
++++ linux/drivers/video/tosa_backlight.c 2004-06-10 21:09:11.000000000 +0900
+@@ -0,0 +1,489 @@
++/*
++ * drivers/video/tosa_backlight.c
++ *
++ * (C) Copyright 2004 Lineo Solutions, Inc.
++ *
++ * May be copied or modified under the terms of the GNU General Public
++ * License. See linux/COPYING for more information.
++ *
++ * Based on:
++ *
++ * linux/drivers/video/corgi_frontlight.c
++ *
++ * (C) Copyright 2002 SHARP
++ *
++ * May be copied or modified under the terms of the GNU General Public
++ * License. See linux/COPYING for more information.
++ *
++ * Based on:
++ *
++ * linux/drivers/video/poodle_frontlight.c
++ *
++ * (C) Copyright 2001 Lineo Japan, Inc.
++ *
++ * May be copied or modified under the terms of the GNU General Public
++ * License. See linux/COPYING for more information.
++ *
++ * Based on:
++ *
++ * linux/drivers/video/collie_frontlight.c
++ *
++ * (C) Copyright 2001 Lineo Japan, Inc.
++ *
++ * May be copied or modified under the terms of the GNU General Public
++ * License. See linux/COPYING for more information.
++ *
++ * Based on:
++ * drivers/video/sa1100_frontlight.c
++ * Initial Version by: Nicholas Mistry (nmistry@lhsl.com)
++ *
++ * ChangeLog:
++ * 02-Dec-2002 SHARP for SL-C700
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/errno.h>
++#include <linux/string.h>
++#include <linux/ctype.h>
++#include <linux/mm.h>
++#include <linux/tty.h>
++#include <linux/slab.h>
++#include <linux/proc_fs.h>
++#include <linux/init.h>
++#include <linux/fb.h>
++#include <linux/delay.h>
++
++#include <linux/pm.h>
++
++#include <asm/system.h>
++#include <asm/hardware.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/uaccess.h>
++#include <asm/proc/pgtable.h>
++
++#include <video/tosa_backlight.h>
++
++#include <linux/interrupt.h>
++
++#include <asm/arch/i2sc.h>
++
++extern void pxa_nssp_output(unsigned char, unsigned char);
++
++#if 0
++#define DPRINTK(fmt, args...) printk("%s: " fmt, __FUNCTION__ , ## args)
++#else
++#define DPRINTK(fmt, args...)
++#endif
++
++#ifdef CONFIG_PM
++static int is_bl_pm = 0;
++static int is_bl_blank = 0;
++static int counter_step_save = 0;
++#endif
++
++#define BL_SETTING 6
++#define BL_DEFAULT 3
++
++int counter_step_contrast = BL_DEFAULT;
++static int bl_limit = BL_SETTING - 1;
++static spinlock_t bl_lock = SPIN_LOCK_UNLOCKED;
++
++typedef struct _duty_vr_t {
++ int duty;
++ int vr;
++} duty_vr_t;
++
++static duty_vr_t bl_duty_table[BL_SETTING] = {
++ {0, 0}, //Light Off
++ {11, 1},
++ {33, 1},
++ {68, 1},
++ {100, 1},
++ {255, 1},
++};
++
++static int tosa_bl_ioctl(struct inode* inode, struct file*, unsigned int,
++ unsigned long);
++static int bl_step_contrast_setting(int);
++
++extern unsigned short set_scoop_gpio(unsigned short);
++extern unsigned short reset_scoop_gpio(unsigned short);
++
++#define SetBacklightDuty(a) set_bl_bright(a);
++#define SetBacklightVR(a) if (a) { TC6393_SYS_REG(TC6393_SYS_GPODSR1) |= TC6393_BL_C20MA; } \
++ else { TC6393_SYS_REG(TC6393_SYS_GPODSR1) &= ~TC6393_BL_C20MA; }
++
++/*
++ * I2C functions.
++ */
++#define I2C_TIMEOUT 100 //wait for 5ms
++#define I2C_ADR_DAC 0x4e //DAC Slave address
++#define DAC_CH1 0
++#define DAC_CH2 1
++#define I2C_ICR_DEF_VAL (ICR_IUE | ICR_SCLE | ICR_FM)
++#define i2c_reset() i2c_init(1)
++#define i2c_set() i2c_init(0)
++void i2c_init(int reset)
++{
++ if( reset ) {
++ ICR = ICR_UR;
++ CKEN &= ~CKEN14_I2C;
++ }
++ CKEN |= CKEN14_I2C; //Set I2C cleck
++ ICR = I2C_ICR_DEF_VAL;
++ ISR = 0x6f0; //Clear all status.
++}
++
++static int i2c_wait_for_fifo_empty(void)
++{
++ int timeo = 0;
++ while( 1 ) {
++ if( ISR & ISR_ITE) break;
++ if( timeo++ > I2C_TIMEOUT ) {
++ DPRINTK("timeout: %x\n", ISR);
++ i2c_reset();
++ return -EBUSY;
++ }
++ mdelay(1);
++ }
++ ISR = ISR_ITE;
++ return 0;
++}
++
++static int i2c_write(unsigned char reg, unsigned char val)
++{
++ int ret;
++
++ /* Start condition */
++ if( ISR & ISR_IBB ) {
++ DPRINTK("bus is busy\n");
++ i2c_reset();
++ return -EBUSY;
++ }
++ /* Slave address write */
++ IDBR = (I2C_ADR_DAC << 1);
++ ICR = (ICR_START | ICR_TB | I2C_ICR_DEF_VAL | ICR_ACKNAK);
++ if( (ret = i2c_wait_for_fifo_empty()) < 0 ) return ret;
++
++ /* DAC channel write */
++ IDBR = reg;
++ ICR = (ICR_TB | I2C_ICR_DEF_VAL);
++ if( (ret = i2c_wait_for_fifo_empty()) < 0 ) return ret;
++
++ /* data write */
++ IDBR = val;
++ ICR = (ICR_STOP | ICR_TB | I2C_ICR_DEF_VAL | ICR_ACKNAK);
++ if( (ret = i2c_wait_for_fifo_empty()) < 0 ) return ret;
++
++ ICR = I2C_ICR_DEF_VAL;
++ return 0;
++}
++
++/*
++ * Backlight control functions.
++ */
++static void bl_enable(int sw)
++{
++ if( sw ) pxa_nssp_output(TG_GPODR2, 0x01); //GP04=1
++ else pxa_nssp_output(TG_GPODR2, 0x00); //GP04=0
++}
++
++static int set_bl_bright(unsigned char dat)
++{
++ return i2c_write(DAC_CH2, dat);
++}
++
++#ifdef CONFIG_PROC_FS
++struct proc_dir_entry *proc_bl;
++
++static ssize_t bl_read_params(struct file *file, char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ char obuf[15];
++ int count = 0;
++
++ if( *ppos>0 ) /* Assume reading completed in previous read*/
++ return 0;
++ count = sprintf(obuf, "0x%02X%02X\n",
++ bl_duty_table[counter_step_contrast].vr,
++ bl_duty_table[counter_step_contrast].duty);
++ *ppos += count;
++ if( count>nbytes ) /* Assume output can be read at one time */
++ return -EINVAL;
++ if( copy_to_user(buf, obuf, count) )
++ return -EFAULT;
++ return count;
++}
++
++static ssize_t bl_write_params(struct file *file, const char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ unsigned long param;
++ char *endp;
++
++ param = simple_strtoul(buf,&endp,0);
++ SetBacklightDuty(param & 0xff);
++ SetBacklightVR((param & 0xff00) >> 8);
++ return nbytes+endp-buf;
++}
++
++static struct file_operations proc_params_operations = {
++ read: bl_read_params,
++ write: bl_write_params,
++};
++#endif /* CONFIG_PROC_FS */
++
++#ifdef CONFIG_PM
++void tosa_bl_blank(int blank)
++{
++ if( blank ) {
++ if( !is_bl_blank ) {
++ is_bl_blank = 1;
++ counter_step_save = counter_step_contrast;
++ bl_step_contrast_setting(0);
++ }
++ } else {
++ if( is_bl_blank && !is_bl_pm ) {
++ bl_step_contrast_setting(counter_step_save);
++ is_bl_blank = 0;
++ }
++ }
++}
++
++void tosa_l_blank_power_button(void)
++{
++ if (!is_bl_blank) {
++ is_bl_blank = 1;
++ counter_step_save = counter_step_contrast;
++ bl_step_contrast_setting(0);
++ }else{
++ counter_step_contrast = counter_step_save;
++ bl_step_contrast_setting(counter_step_contrast);
++ is_bl_blank = 0;
++ }
++}
++
++
++int tosa_bl_pm_callback(struct pm_dev* pm_dev,
++ pm_request_t req, void *data)
++{
++ switch (req) {
++ case PM_SUSPEND:
++ is_bl_pm = 1;
++ tosa_bl_blank(1);
++ break;
++ case PM_RESUME:
++ is_bl_pm = 0;
++ tosa_bl_blank(0);
++ break;
++ }
++ return 0;
++}
++#endif /* CONFIG_PM */
++
++static struct file_operations tosa_bl_fops = {
++ ioctl: tosa_bl_ioctl,
++};
++
++static int bl_major;
++
++#define CHECK_BATTERY_TIME 1
++static int bl_step_contrast_setting_nocheck(int need_value)
++{
++ unsigned long flags;
++
++ /* Check value */
++ if( need_value < 0 ) need_value = 0;
++ if( need_value > bl_limit ) need_value = bl_limit;
++
++ spin_lock_irqsave(&bl_lock, flags);
++ if(need_value > 0) bl_enable(1);
++ else bl_enable(0);
++ SetBacklightDuty(bl_duty_table[need_value].duty);
++ SetBacklightVR(bl_duty_table[need_value].vr);
++ spin_unlock_irqrestore(&bl_lock, flags);
++ counter_step_contrast = need_value;
++
++ return counter_step_contrast;
++}
++
++
++static int bl_step_contrast_setting(int need_value)
++{
++ int ret = 0;
++ extern void sharpsl_kick_battery_check(int,int,int);
++ sharpsl_kick_battery_check(0,1,0); // check battery and wait 10msec
++ ret = bl_step_contrast_setting_nocheck(need_value);
++ sharpsl_kick_battery_check(1,0,0); // wait 10msec and check battery
++ return ret;
++}
++
++static int temporary_contrast_set_flag = 0;
++
++void tosa_bl_temporary_contrast_set(void)
++{
++ int need_value = counter_step_contrast;
++
++ if( temporary_contrast_set_flag ) return;
++
++ temporary_contrast_set_flag = 1;
++ bl_step_contrast_setting(need_value);
++}
++
++void tosa_bl_temporary_contrast_reset(void)
++{
++ int need_value = counter_step_contrast;
++
++ if( !temporary_contrast_set_flag ) return;
++
++ temporary_contrast_set_flag = 0;
++ bl_step_contrast_setting(need_value);
++}
++
++void tosa_bl_set_limit_contrast(int val)
++{
++ unsigned long flags;
++ spin_lock_irqsave(&bl_lock, flags);
++ if( (val > BL_SETTING - 1) || (val < 0) ) {
++ if( bl_limit != BL_SETTING - 1 ) {
++ printk("bl : unlimit contrast\n");
++ }
++ bl_limit = BL_SETTING - 1;
++ } else {
++ if( bl_limit != val ) {
++ printk("bl : change limit contrast %d\n", val);
++ }
++ bl_limit = val;
++ }
++ spin_unlock_irqrestore(&bl_lock, flags);
++ if( counter_step_contrast > bl_limit )
++ bl_step_contrast_setting_nocheck(bl_limit);
++}
++
++int tosa_set_common_voltage(unsigned char dat)
++{
++ return i2c_write(DAC_CH1, dat);
++}
++
++static int tosa_bl_ioctl(struct inode* inode, struct file* filp,
++ unsigned int cmd, unsigned long arg)
++{
++ int ret = -EINVAL;
++
++ switch(cmd) {
++ case TOSA_BL_IOCTL_ON:
++ if (is_bl_blank) return 0;
++ ret = bl_step_contrast_setting_nocheck(counter_step_contrast);
++ break;
++ case TOSA_BL_IOCTL_OFF:
++ if (is_bl_blank) return 0;
++ ret = bl_step_contrast_setting_nocheck(0);
++ break;
++ case TOSA_BL_IOCTL_STEP_CONTRAST:
++ if (is_bl_blank) return 0;
++ ret = bl_step_contrast_setting_nocheck(arg);
++ break;
++ case TOSA_BL_IOCTL_GET_STEP_CONTRAST:
++ ret = counter_step_contrast;
++ break;
++ case TOSA_BL_IOCTL_GET_STEP:
++ ret = BL_SETTING;
++ break;
++ default:
++ ;
++ }
++
++ return ret;
++}
++
++static __init int tosa_bl_init(void)
++{
++ int ret;
++
++ bl_major = BL_MAJOR;
++
++ if( (ret = register_chrdev(bl_major, BL_NAME, &tosa_bl_fops)) < 0 ) {
++ DPRINTK("%s: cant get major %d\n", BL_NAME, bl_major);
++ return ret;
++ }
++
++ if( !bl_major ) bl_major = ret;
++
++ bl_step_contrast_setting_nocheck(counter_step_contrast);
++
++#ifdef CONFIG_PROC_FS
++ {
++ struct proc_dir_entry *entry;
++
++ proc_bl = proc_mkdir("driver/fl", NULL);
++ if (proc_bl == NULL) {
++ bl_step_contrast_setting(0);
++ unregister_chrdev(bl_major, BL_NAME);
++ printk(KERN_ERR "%s: can't create /proc/driver/fl\n", BL_NAME);
++ return -ENOMEM;
++ }
++ entry = create_proc_entry(BL_NAME, S_IWUSR |S_IRUSR | S_IRGRP | S_IROTH,
++ proc_bl);
++ if( entry ) {
++ entry->proc_fops = &proc_params_operations;
++ } else {
++ remove_proc_entry("driver/fl", &proc_root);
++ proc_bl = 0;
++ bl_step_contrast_setting(0);
++ unregister_chrdev(bl_major, BL_NAME);
++ printk(KERN_ERR "%s: can't create /proc/driver/fl/\n", BL_NAME);
++ return -ENOMEM;
++ }
++ }
++#endif /* CONFIG_PROC_FS */
++
++ printk(KERN_INFO "%s: Initialized.\n", BL_NAME);
++
++#if 0
++ { /* IOCTL TEST */
++ int i;
++ printk("\n%s: ioctl test.\n", BL_NAME);
++ printk("%s: Backlight off\n", BL_NAME);
++ ret = tosa_bl_ioctl(0, 0, TOSA_BL_IOCTL_OFF, 0);
++ if(ret < 0) printk("%s: error:%d\n", BL_NAME, ret);
++ mdelay(5000);
++ printk("%s: Backlight on\n", BL_NAME);
++ ret = tosa_bl_ioctl(0, 0, TOSA_BL_IOCTL_ON, 0);
++ if(ret < 0) printk("%s: error:%d\n", BL_NAME, ret);
++ mdelay(5000);
++ for(i = 1; i < BL_SETTING; i++) {
++ printk("%s: Backlight step: %d\n", BL_NAME, i);
++ ret = tosa_bl_ioctl(0, 0, TOSA_BL_IOCTL_STEP_CONTRAST, i);
++ if(ret < 0) printk("%s: error:%d\n", BL_NAME, ret);
++ mdelay(5000);
++ }
++ }
++#endif
++ return 0;
++}
++
++#ifdef MODULE
++void __exit tosa_bl_exit(void)
++{
++ bl_step_contrast_setting(0);
++
++ unregister_chrdev(bl_major, BL_NAME);
++
++#ifdef CONFIG_PROC_FS
++ {
++ remove_proc_entry(BL_NAME, proc_bl);
++ remove_proc_entry("driver/fl", NULL);
++ proc_bl = 0;
++ }
++#endif /* CONFIG_PROC_FS */
++ printk(KERN_INFO "%s: Unloaded\n", BL_NAME);
++}
++
++module_exit(tosa_bl_exit);
++#endif /* MODULE */
++
++module_init(tosa_bl_init);
+diff -Nur linux_c860_org/drivers/video/w100fb.c linux/drivers/video/w100fb.c
+--- linux_c860_org/drivers/video/w100fb.c 2003-06-18 17:43:52.000000000 +0900
++++ linux/drivers/video/w100fb.c 2004-06-10 21:09:11.000000000 +0900
+@@ -54,6 +54,9 @@
+ #include <video/fbcon-mfb.h>
+ #include <video/fbcon.h>
+
++#include <linux/proc_fs.h>
++#include <asm/proc/pgtable.h>
++
+ #include "w100fb.h"
+ #include <linux/pm.h>
+
+@@ -74,6 +77,7 @@
+ static void w100_resume(void);
+ static void w100_suspend(u32 mode);
+ static void w100_init_qvga_rotation(u16 deg);
++static void w100_init_vga_rotation(u16 deg);
+ static void w100_soft_reset(void);
+ static void w100_clear_screen(u32 mode,void *fbuf);
+ static void w100_vsync(void);
+@@ -106,7 +110,7 @@
+ #define REMAPPED_CFG_LEN 0x10
+ #define REMAPPED_MMR_LEN 0x2000
+ #define W100_PHYS_ADR_LEN 0x1000000
+-#define MAX_XRES 480
++#define MAX_XRES 640
+ #define MAX_YRES 640
+ #define BITS_PER_PIXEL 16
+
+@@ -177,9 +181,23 @@
+ #define LCD_MODE_480 0
+ #define LCD_MODE_320 1
+ #define LCD_MODE_240 2
++#define LCD_MODE_640 3
++
+ #define LCD_MODE_UNKOWN (-1)
+
+ int w100fb_lcdMode = LCD_MODE_UNKOWN; //default UNKOWN
++#if defined(CONFIG_FBCON_ROTATE_R)
++static int w100fb_rotation_flag = 270;
++#else
++static int w100fb_rotation_flag = 90;
++#endif
++#if defined(CONFIG_SL_SYSCLK100)
++int fastsysclk_mode=100;
++#else
++int fastsysclk_mode=75;
++#endif
++static int lcd_param=0;
++static int proc_resume_mode=0;
+
+ static u16 *gSaveImagePtr[640] = {NULL};
+ #define SAVE_IMAGE_MAX_SIZE ((640 * 480 * BITS_PER_PIXEL) / 8)
+@@ -245,6 +263,171 @@
+ static void w100_PwmSetup(void);
+ static void w100_InitExtMem(u32 mode);
+
++#ifdef CONFIG_PROC_FS
++struct proc_dir_entry *proc_w100;
++
++
++static ssize_t w100_read_rotation(struct file *file, char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ char outputbuf[50];
++ int count;
++ if (*ppos>0) /* Assume reading completed in previous read*/
++ return 0;
++ count = sprintf(outputbuf, "Rotation degree %d.\n",w100fb_rotation_flag);
++ *ppos += count;
++ if (count>nbytes) /* Assume output can be read at one time */
++ return -EINVAL;
++ if (copy_to_user(buf, outputbuf, count))
++ return -EFAULT;
++ return count;
++}
++
++static ssize_t w100_write_rotation(struct file *file, const char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ int len;
++ unsigned int degree;
++
++ sscanf(buf,"%d",&degree);
++ printk("Change rotation degree %d\n",degree);
++
++ if ( degree == 180)
++ w100fb_rotation_flag = 90;
++ else
++ w100fb_rotation_flag = 270;
++
++ if (w100fb_lcdMode == LCD_MODE_320)
++ w100_init_qvga_rotation(w100fb_rotation_flag);
++
++ len=strlen(buf);
++ return len;
++}
++
++static ssize_t w100_read_reg(struct file *file, const char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ int len;
++ unsigned long regs;
++ unsigned long param;
++
++
++ sscanf(buf,"%x",&regs);
++
++ param = readl(remapped_regs+regs);
++
++ printk("Read reg:: regs 0x%08X : 0x%08X\n", regs, param);
++
++ len=strlen(buf);
++ return len;
++}
++
++static ssize_t w100_write_reg(struct file *file, const char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ int len;
++ unsigned long regs;
++ unsigned long param;
++
++
++ sscanf(buf,"%x %x",&regs,&param);
++
++ if (regs <= 0x2000){
++ printk("Write regs 0x%08X : 0x%08X\n", regs, param);
++ writel(param, remapped_regs+regs);
++ }
++
++ len=strlen(buf);
++ return len;
++}
++
++static ssize_t lcd_read_param(struct file *file, char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ char outputbuf[50];
++ int count;
++ if (*ppos>0) /* Assume reading completed in previous read*/
++ return 0;
++ count = sprintf(outputbuf, "LCD parm %d.\n",lcd_param);
++ *ppos += count;
++ if (count>nbytes) /* Assume output can be read at one time */
++ return -EINVAL;
++ if (copy_to_user(buf, outputbuf, count))
++ return -EFAULT;
++ return count;
++}
++
++static ssize_t lcd_write_param(struct file *file, const char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ int len;
++ int param;
++
++ sscanf(buf,"%d",&param);
++ printk("LCD param %d\n",param);
++
++ lcd_param=param;
++
++ len=strlen(buf);
++ return len;
++}
++
++static ssize_t fastsysclk_read_param(struct file *file, char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ char outputbuf[50];
++ int count;
++ if (*ppos>0) /* Assume reading completed in previous read*/
++ return 0;
++ count = sprintf(outputbuf, "Fastsysclk : %d.\n",fastsysclk_mode);
++ *ppos += count;
++ if (count>nbytes) /* Assume output can be read at one time */
++ return -EINVAL;
++ if (copy_to_user(buf, outputbuf, count))
++ return -EFAULT;
++ return count;
++}
++
++static ssize_t fastsysclk_write_param(struct file *file, const char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ int len;
++ int param;
++
++ sscanf(buf,"%d",&param);
++ if (param == 75) {
++ printk("Set fastsysclk %d\n",param);
++ fastsysclk_mode=param;
++ w100_SetFastSysClk(fastsysclk_mode);
++ }else if (param == 100) {
++ printk("Set fastsysclk %d\n",param);
++ fastsysclk_mode=param;
++ w100_SetFastSysClk(fastsysclk_mode);
++ }
++ len=strlen(buf);
++ return len;
++}
++
++static struct file_operations proc_read_reg = {
++ write: w100_read_reg,
++};
++static struct file_operations proc_write_reg = {
++ write: w100_write_reg,
++};
++static struct file_operations proc_rotation = {
++ read: w100_read_rotation,
++ write: w100_write_rotation,
++};
++static struct file_operations proc_lcd = {
++ read: lcd_read_param,
++ write: lcd_write_param,
++};
++static struct file_operations proc_fastsysclk = {
++ read: fastsysclk_read_param,
++ write: fastsysclk_write_param,
++};
++#endif
++
+ /* ------------------- chipset specific functions -------------------------- */
+
+ //
+@@ -317,8 +500,12 @@
+ // remap the areas we're going to use
+ remapped_base = ioremap_nocache(W100_PHYS_ADDRESS, REMAPPED_CFG_LEN);
+ remapped_regs = ioremap_nocache(W100_REG_BASE, REMAPPED_MMR_LEN);
+- remapped_fbuf = ioremap_nocache(W100_FB_BASE, REMAPPED_FB_LEN);
+-
++#if defined(CONFIG_CORGI_LCD_BUFF)
++ remapped_fbuf = __ioremap(W100_FB_BASE, REMAPPED_FB_LEN, L_PTE_BUFFERABLE );
++#else
++ remapped_fbuf = ioremap_nocache(W100_FB_BASE, REMAPPED_FB_LEN);
++#endif
++
+ isRemapped = 1;
+ }
+
+@@ -385,7 +572,7 @@
+
+ if (w100fb_lcdMode == LCD_MODE_UNKOWN){
+ w100_InitExtMem(LCD_SHARP_VGA);
+- } else if(w100fb_lcdMode == LCD_MODE_480) {
++ } else if( (w100fb_lcdMode == LCD_MODE_480) || (w100fb_lcdMode == LCD_MODE_640) ) {
+ w100_InitExtMem(LCD_SHARP_VGA);
+ } else {
+ w100_InitExtMem(LCD_SHARP_QVGA);
+@@ -400,6 +587,76 @@
+ writel((u32)(wrap_top_dir.val), remapped_regs+mmWRAP_TOP_DIR);
+
+ writel((u32)0x2440, remapped_regs+mmRBBM_CNTL);
++
++#ifdef CONFIG_PROC_FS
++ {
++ struct proc_dir_entry *entry;
++ if (proc_resume_mode == 0) {
++
++ proc_w100 = proc_mkdir("driver/w100", NULL);
++ if (proc_w100 == NULL) {
++ unregister_chrdev(228, "w100");
++ printk(KERN_ERR "w100: can't create /proc/driver/w100\n");
++ return -ENOMEM;
++ }
++
++ entry = create_proc_entry("read_reg", S_IWUSR |S_IRUSR | S_IRGRP | S_IROTH, proc_w100);
++ if (entry) {
++ entry->proc_fops = &proc_read_reg;
++ } else {
++ remove_proc_entry("driver/w100", &proc_root);
++ proc_w100 = 0;
++ unregister_chrdev(228, "w100");
++ printk(KERN_ERR "w100: can't create /proc/driver/w100/\n");
++ return -ENOMEM;
++ }
++ entry = create_proc_entry("write_reg", S_IWUSR |S_IRUSR | S_IRGRP | S_IROTH, proc_w100);
++ if (entry) {
++ entry->proc_fops = &proc_write_reg;
++ } else {
++ remove_proc_entry("driver/w100", &proc_root);
++ proc_w100 = 0;
++ unregister_chrdev(228, "w100");
++ printk(KERN_ERR "w100: can't create /proc/driver/w100/\n");
++ return -ENOMEM;
++ }
++ entry = create_proc_entry("rotation", S_IWUSR |S_IRUSR | S_IRGRP | S_IROTH, proc_w100);
++ if (entry) {
++ entry->proc_fops = &proc_rotation;
++ } else {
++ remove_proc_entry("driver/w100", &proc_root);
++ proc_w100 = 0;
++ unregister_chrdev(228, "w100");
++ printk(KERN_ERR "w100: can't create /proc/driver/w100/\n");
++ return -ENOMEM;
++ }
++
++ entry = create_proc_entry("lcd", S_IWUSR |S_IRUSR | S_IRGRP | S_IROTH, proc_w100);
++ if (entry) {
++ entry->proc_fops = &proc_lcd;
++ } else {
++ remove_proc_entry("driver/w100", &proc_root);
++ proc_w100 = 0;
++ unregister_chrdev(228, "w100");
++ printk(KERN_ERR "w100: can't create /proc/driver/w100/\n");
++ return -ENOMEM;
++ }
++
++ entry = create_proc_entry("fastsysclk", S_IWUSR |S_IRUSR | S_IRGRP | S_IROTH, proc_w100);
++ if (entry) {
++ entry->proc_fops = &proc_fastsysclk;
++ } else {
++ remove_proc_entry("driver/w100", &proc_root);
++ proc_w100 = 0;
++ unregister_chrdev(228, "w100");
++ printk(KERN_ERR "w100: can't create /proc/driver/w100/\n");
++ return -ENOMEM;
++ }
++ }
++ }
++
++#endif
++
+ }
+
+ //
+@@ -453,9 +710,11 @@
+ #endif
+
+ fix->smem_start = W100_FB_BASE;
+-
+- if(w100fb_lcdMode == LCD_MODE_UNKOWN || w100fb_lcdMode == LCD_MODE_480){
+-
++#if defined(CONFIG_FBCON_ROTATE_R)
++ if(w100fb_lcdMode == LCD_MODE_UNKOWN || w100fb_lcdMode == LCD_MODE_480 ){
++#else
++ if(w100fb_lcdMode == LCD_MODE_480 ){
++#endif
+ fix->line_length = (480 * BITS_PER_PIXEL) / 8;
+ fix->smem_len = 0x200000;
+
+@@ -468,6 +727,13 @@
+
+ fix->line_length = (240 * BITS_PER_PIXEL) / 8;
+ fix->smem_len = 0x60000;
++#if defined(CONFIG_FBCON_ROTATE_R)
++ } else if(w100fb_lcdMode == LCD_MODE_640){
++#else
++ } else if(w100fb_lcdMode == LCD_MODE_UNKOWN || w100fb_lcdMode == LCD_MODE_640){
++#endif
++ fix->line_length = (640 * BITS_PER_PIXEL) / 8;
++ fix->smem_len = 0x200000;
+
+ }
+
+@@ -494,13 +760,19 @@
+ BUG();
+
+ if((par->xres == 480 && par->yres == 640)||
++ (par->xres == 640 && par->yres == 480)||
+ (par->xres == 320 && par->yres == 240)||
+ (par->xres == 240 && par->yres == 320)){
+ par->xres = var->xres;
+ par->yres = var->yres;
+ }else{
+- par->xres = MAX_XRES;
+- par->yres = MAX_YRES;
++#if defined(CONFIG_FBCON_ROTATE_R)
++ par->xres = 480;
++ par->yres = 640;
++#else
++ par->xres = 640;
++ par->yres = 480;
++#endif
+ }
+
+ par->xres_virtual =
+@@ -547,13 +819,19 @@
+
+ // set up screen coordinates
+ if((par->xres == 480 && par->yres == 640)||
++ (par->xres == 640 && par->yres == 480)||
+ (par->xres == 320 && par->yres == 240)||
+ (par->xres == 240 && par->yres == 320)){
+ var->xres = par->xres;
+ var->yres = par->yres;
+ }else{
+- var->xres = MAX_XRES;
+- var->yres = MAX_YRES;
++#if defined(CONFIG_FBCON_ROTATE_R)
++ var->xres = 480;
++ var->yres = 640;
++#else
++ var->xres = 640;
++ var->yres = 480;
++#endif
+ }
+
+ var->xres_virtual = var->xres;
+@@ -851,7 +1129,7 @@
+ w100_vsync();
+ w100_suspend(W100_SUSPEND_EXTMEM);
+ w100_init_sharp_lcd(LCD_SHARP_QVGA);
+- w100_init_qvga_rotation( (u16)270 );
++ w100_init_qvga_rotation( w100fb_rotation_flag );
+ w100_InitExtMem(LCD_SHARP_QVGA);
+ w100_clear_screen(LCD_SHARP_QVGA,NULL);
+ lcdtg_lcd_change(LCD_SHARP_QVGA);
+@@ -873,6 +1151,70 @@
+
+ w100fb_lcdMode = LCD_MODE_240;
+
++ }else if(current_par.xres == 640 && current_par.yres == 480){
++
++ printk("change resolution 480x640 => 640x480\n");
++
++ w100_PwmSetup();
++ w100_clear_screen(LCD_SHARP_QVGA,NULL);
++ writel(0xBFFFA000, remapped_regs+mmMC_EXT_MEM_LOCATION);
++ w100_InitExtMem(LCD_SHARP_VGA);
++ w100_clear_screen(LCD_SHARP_VGA,(void*)0xF1A00000);
++ w100_vsync();
++ w100_init_sharp_lcd(LCD_SHARP_VGA);
++ w100_init_vga_rotation( (u16)90 );
++ lcdtg_lcd_change(LCD_SHARP_VGA);
++
++ w100fb_lcdMode = LCD_MODE_640;
++
++ }
++ break;
++ case LCD_MODE_640:
++ if(current_par.xres == 320 && current_par.yres == 240){
++
++ printk("change resolution 640x480 => 320x240\n");
++
++ w100_PwmSetup();
++ w100_vsync();
++ w100_suspend(W100_SUSPEND_EXTMEM);
++ w100_init_sharp_lcd(LCD_SHARP_QVGA);
++ w100_init_qvga_rotation( w100fb_rotation_flag );
++ w100_InitExtMem(LCD_SHARP_QVGA);
++ w100_clear_screen(LCD_SHARP_QVGA,NULL);
++ lcdtg_lcd_change(LCD_SHARP_QVGA);
++
++ w100fb_lcdMode = LCD_MODE_320;
++
++ }else if(current_par.xres == 240 && current_par.yres == 320){
++
++ printk("change resolution 640x480 => 240x320\n");
++
++ w100_PwmSetup();
++ w100_vsync();
++ w100_suspend(W100_SUSPEND_EXTMEM);
++ w100_init_sharp_lcd(LCD_SHARP_QVGA);
++ w100_init_qvga_rotation( (u16)0 );
++ w100_InitExtMem(LCD_SHARP_QVGA);
++ w100_clear_screen(LCD_SHARP_QVGA,NULL);
++ lcdtg_lcd_change(LCD_SHARP_QVGA);
++
++ w100fb_lcdMode = LCD_MODE_240;
++
++ }else if(current_par.xres == 480 && current_par.yres == 640){
++
++ printk("change resolution 640x480 => 480x640\n");
++
++ w100_PwmSetup();
++ w100_clear_screen(LCD_SHARP_QVGA,NULL);
++ writel(0xBFFFA000, remapped_regs+mmMC_EXT_MEM_LOCATION);
++ w100_InitExtMem(LCD_SHARP_VGA);
++ w100_clear_screen(LCD_SHARP_VGA,(void*)0xF1A00000);
++ w100_vsync();
++ w100_init_sharp_lcd(LCD_SHARP_VGA);
++ lcdtg_lcd_change(LCD_SHARP_VGA);
++
++ w100fb_lcdMode = LCD_MODE_480;
++
+ }
+ break;
+ case LCD_MODE_240:
+@@ -891,12 +1233,28 @@
+
+ w100fb_lcdMode = LCD_MODE_480;
+
++ }else if(current_par.xres == 640 && current_par.yres == 480){
++
++ printk("change resolution 240x320 => 640x480\n");
++
++ w100_PwmSetup();
++ w100_clear_screen(LCD_SHARP_QVGA,NULL);
++ writel(0xBFFFA000, remapped_regs+mmMC_EXT_MEM_LOCATION);
++ w100_InitExtMem(LCD_SHARP_VGA);
++ w100_clear_screen(LCD_SHARP_VGA,(void*)0xF1A00000);
++ w100_vsync();
++ w100_init_sharp_lcd(LCD_SHARP_VGA);
++ w100_init_vga_rotation( (u16)90 );
++ lcdtg_lcd_change(LCD_SHARP_VGA);
++
++ w100fb_lcdMode = LCD_MODE_640;
++
+ }else if(current_par.xres == 320 && current_par.yres == 240){
+
+ printk("change resolution 240x320 => 320x240\n");
+
+ w100_clear_screen(LCD_SHARP_QVGA,NULL);
+- w100_init_qvga_rotation( (u16)270 );
++ w100_init_qvga_rotation( w100fb_rotation_flag );
+
+ w100fb_lcdMode = LCD_MODE_320;
+ }
+@@ -917,6 +1275,22 @@
+
+ w100fb_lcdMode = LCD_MODE_480;
+
++ }else if(current_par.xres == 640 && current_par.yres == 480){
++
++ printk("change resolution 320x240 => 640x480\n");
++
++ w100_PwmSetup();
++ w100_clear_screen(LCD_SHARP_QVGA,NULL);
++ writel(0xBFFFA000, remapped_regs+mmMC_EXT_MEM_LOCATION);
++ w100_InitExtMem(LCD_SHARP_VGA);
++ w100_clear_screen(LCD_SHARP_VGA,(void*)0xF1A00000);
++ w100_vsync();
++ w100_init_sharp_lcd(LCD_SHARP_VGA);
++ w100_init_vga_rotation( (u16)90 );
++ lcdtg_lcd_change(LCD_SHARP_VGA);
++
++ w100fb_lcdMode = LCD_MODE_640;
++
+ }else if(current_par.xres == 240 && current_par.yres == 320){
+
+ printk("change resolution 320x240 => 240x320\n");
+@@ -928,9 +1302,16 @@
+ }
+ break;
+ case LCD_MODE_UNKOWN:
+- printk("reset resolution unkown => 480x640\n");
+- w100_init_sharp_lcd(LCD_SHARP_VGA);
++#if defined(CONFIG_FBCON_ROTATE_R)
++ printk("reset resolution unkown => 480x640\n");
++ w100_init_sharp_lcd(LCD_SHARP_VGA);
+ w100fb_lcdMode = LCD_MODE_480;
++#else
++ printk("reset resolution unkown => 640x480\n");
++ w100_init_sharp_lcd(LCD_SHARP_VGA);
++ w100_init_vga_rotation( (u16)90 );
++ w100fb_lcdMode = LCD_MODE_640;
++#endif
+ isInitTG = 1;
+ break;
+ default:
+@@ -992,14 +1373,16 @@
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ disp->xpanstep = 0;
+ disp->xwrapstep = 0;
+- disp->scrollmode = 0; // for logoscreen scroll
++ disp->scrollmode = SCROLL_XREDRAW;
+ #else
+ disp->ypanstep = 0;
+ disp->ywrapstep = 0;
++ disp->scrollmode = SCROLL_YREDRAW;
+ #endif
+
+ switch(w100fb_lcdMode){
+ case LCD_MODE_480:
++ case LCD_MODE_640:
+ if(isInitTG != 0)
+ lcdtg_hw_init(LCD_SHARP_VGA);
+ break;
+@@ -1267,7 +1650,149 @@
+ end_skip_save_image_no = (-1);
+ return 0;
+ }
++ break;
+ #endif //_IMAGE_CACHE_SUPPORT
++ case 100: //change 480x640
++ printk("[w100fb] set 480x640 (VGA 0 degree)\n");
++
++ w100_PwmSetup();
++ w100_clear_screen(LCD_SHARP_QVGA,NULL);
++ writel(0xBFFFA000, remapped_regs+mmMC_EXT_MEM_LOCATION);
++ w100_InitExtMem(LCD_SHARP_VGA);
++ w100_clear_screen(LCD_SHARP_VGA,(void*)0xF1A00000);
++ w100_vsync();
++ w100_init_sharp_lcd(LCD_SHARP_VGA);
++ w100_init_vga_rotation( (u16)0 );
++ lcdtg_lcd_change(LCD_SHARP_VGA);
++
++ break;
++ case 101: //change 640x480
++ printk("[w100fb] set 640x480 (VGA 90 degree)\n");
++
++ w100_PwmSetup();
++ w100_clear_screen(LCD_SHARP_QVGA,NULL);
++ writel(0xBFFFA000, remapped_regs+mmMC_EXT_MEM_LOCATION);
++ w100_InitExtMem(LCD_SHARP_VGA);
++ w100_clear_screen(LCD_SHARP_VGA,(void*)0xF1A00000);
++ w100_vsync();
++ w100_init_sharp_lcd(LCD_SHARP_VGA);
++ w100_init_vga_rotation( (u16)90 );
++ lcdtg_lcd_change(LCD_SHARP_VGA);
++
++ break;
++ case 102: //change 480x640
++ printk("[w100fb] set 480x640 (VGA 180 degree)\n");
++
++ w100_PwmSetup();
++ w100_clear_screen(LCD_SHARP_QVGA,NULL);
++ writel(0xBFFFA000, remapped_regs+mmMC_EXT_MEM_LOCATION);
++ w100_InitExtMem(LCD_SHARP_VGA);
++ w100_clear_screen(LCD_SHARP_VGA,(void*)0xF1A00000);
++ w100_vsync();
++ w100_init_sharp_lcd(LCD_SHARP_VGA);
++ w100_init_vga_rotation( (u16)180 );
++ lcdtg_lcd_change(LCD_SHARP_VGA);
++
++ break;
++ case 103: //change 640x480
++ printk("[w100fb] set 640x480 (VGA 270 degree)\n");
++
++ w100_PwmSetup();
++ w100_clear_screen(LCD_SHARP_QVGA,NULL);
++ writel(0xBFFFA000, remapped_regs+mmMC_EXT_MEM_LOCATION);
++ w100_InitExtMem(LCD_SHARP_VGA);
++ w100_clear_screen(LCD_SHARP_VGA,(void*)0xF1A00000);
++ w100_vsync();
++ w100_init_sharp_lcd(LCD_SHARP_VGA);
++ w100_init_vga_rotation( (u16)270 );
++ lcdtg_lcd_change(LCD_SHARP_VGA);
++
++ break;
++ case 110: //change 240x320
++ printk("[w100fb] set 240x320 (QVGA 0 degree)\n");
++
++ w100_PwmSetup();
++ w100_vsync();
++ w100_suspend(W100_SUSPEND_EXTMEM);
++ w100_init_sharp_lcd(LCD_SHARP_QVGA);
++ w100_init_qvga_rotation( (u16)0 );
++ w100_InitExtMem(LCD_SHARP_QVGA);
++ w100_clear_screen(LCD_SHARP_QVGA,NULL);
++ lcdtg_lcd_change(LCD_SHARP_QVGA);
++
++ break;
++ case 111: //change 320x240
++ printk("[w100fb] set 320x240 (QVGA 90 degree)\n");
++
++ w100fb_rotation_flag=90;
++ w100_PwmSetup();
++ w100_vsync();
++ w100_suspend(W100_SUSPEND_EXTMEM);
++ w100_init_sharp_lcd(LCD_SHARP_QVGA);
++ w100_init_qvga_rotation(w100fb_rotation_flag);
++ w100_InitExtMem(LCD_SHARP_QVGA);
++ w100_clear_screen(LCD_SHARP_QVGA,NULL);
++ lcdtg_lcd_change(LCD_SHARP_QVGA);
++
++ break;
++
++ case 112: //change 240x320
++ printk("[w100fb] set 240x320 (QVGA 180 degree)\n");
++
++ w100_PwmSetup();
++ w100_vsync();
++ w100_suspend(W100_SUSPEND_EXTMEM);
++ w100_init_sharp_lcd(LCD_SHARP_QVGA);
++ w100_init_qvga_rotation( (u16)180 );
++ w100_InitExtMem(LCD_SHARP_QVGA);
++ w100_clear_screen(LCD_SHARP_QVGA,NULL);
++ lcdtg_lcd_change(LCD_SHARP_QVGA);
++
++ break;
++ case 113: //change 320x240
++ printk("[w100fb] set 320x240 (QVGA 270 degree)\n");
++
++ w100fb_rotation_flag=270;
++ w100_PwmSetup();
++ w100_vsync();
++ w100_suspend(W100_SUSPEND_EXTMEM);
++ w100_init_sharp_lcd(LCD_SHARP_QVGA);
++ w100_init_qvga_rotation(w100fb_rotation_flag);
++ w100_InitExtMem(LCD_SHARP_QVGA);
++ w100_clear_screen(LCD_SHARP_QVGA,NULL);
++ lcdtg_lcd_change(LCD_SHARP_QVGA);
++
++ break;
++ case 120: //non rotation in QVGA
++ printk("[w100fb] set rotation 0 in QVGA\n");
++
++ w100fb_rotation_flag = 270;
++ if (w100fb_lcdMode == LCD_MODE_320)
++ w100_init_qvga_rotation(w100fb_rotation_flag);
++
++ break;
++ case 121: //rotation 180 degree in QVGA
++ printk("[w100fb] set rotation 180 in QVGA\n");
++
++ w100fb_rotation_flag = 90;
++ if (w100fb_lcdMode == LCD_MODE_320)
++ w100_init_qvga_rotation(w100fb_rotation_flag);
++
++ break;
++ case 130: //Fastsysclock 75MHz
++ printk("[w100fb] set Fastsysclk 75MHz\n");
++
++ fastsysclk_mode=75;
++ w100_SetFastSysClk(fastsysclk_mode);
++
++ break;
++ case 131: //Fastsysclock 100MHz
++ printk("[w100fb] set Fastsysclk 100MHz\n");
++
++ fastsysclk_mode=100;
++ w100_SetFastSysClk(fastsysclk_mode);
++
++ break;
+ default:
+ break;
+ }
+@@ -2348,6 +2873,8 @@
+ { 50, 0, 1, 0, 0xE0, 56}, // 50.00 MHz
+ { 75, 0, 5, 0, 0xDE, 37}, // 75.00 MHz
+ {100, 0, 7, 0, 0xE0, 28}, // 100.00 MHz
++ {125, 0, 9, 0, 0xE0, 22}, // 125.00 MHz
++ {150, 0, 11, 0, 0xE0, 17}, // 150.00 MHz
+ { 0, 0, 0, 0, 0, 0} // Terminator
+ };
+ #else
+@@ -2779,7 +3306,8 @@
+ break;
+ case LCD_SHARP_VGA:
+ w100_SetSlowSysClk(12); // use crystal -- 12.5MHz
+- w100_SetFastSysClk(75); // use PLL -- 75.0MHz
++ w100_SetFastSysClk(fastsysclk_mode);
++
+ gPowerState.pclk_cntl.f.pclk_src_sel = 0x1;
+ gPowerState.pclk_cntl.f.pclk_post_div = 0x2;
+ writel((u32)(gPowerState.pclk_cntl.val), remapped_regs+mmPCLK_CNTL);
+@@ -2836,6 +3364,72 @@
+ writel((u32)(disp_db_buf_wr_cntl.val), remapped_regs+mmDISP_DB_BUF_CNTL);
+ } // w100_init_sharp_lcd
+
++static void w100_init_vga_rotation(u16 deg)
++{
++ // for resolution change and rotation
++ // GRAPHIC_CTRL
++ // GRAPHIC_OFFSET
++ // GRAPHIC_PITCH
++
++ switch(deg){
++ case 0:
++ gPowerState.pclk_cntl.f.pclk_src_sel = 0x1;
++ gPowerState.pclk_cntl.f.pclk_post_div = 0x2;
++ writel((u32)(gPowerState.pclk_cntl.val), remapped_regs+mmPCLK_CNTL);
++
++ writel(0x00DE1D66, remapped_regs+mmGRAPHIC_CTRL);
++ writel(0x00800000, remapped_regs+mmGRAPHIC_OFFSET);
++ writel(0x000003c0, remapped_regs+mmGRAPHIC_PITCH);
++
++ // Re-enable display updates
++ writel(0x0000007b, remapped_regs+mmDISP_DB_BUF_CNTL);
++
++ break;
++ case 90:
++ gPowerState.pclk_cntl.f.pclk_src_sel = 0x1;
++ gPowerState.pclk_cntl.f.pclk_post_div = 0x6;
++ writel((u32)(gPowerState.pclk_cntl.val), remapped_regs+mmPCLK_CNTL);
++
++ writel(0x00DE1D0e, remapped_regs+mmGRAPHIC_CTRL);
++ writel(0x00895b00, remapped_regs+mmGRAPHIC_OFFSET);
++ writel(0x00000500, remapped_regs+mmGRAPHIC_PITCH);
++
++ // Re-enable display updates
++ writel(0x0000007b, remapped_regs+mmDISP_DB_BUF_CNTL);
++
++ break;
++ case 180:
++ gPowerState.pclk_cntl.f.pclk_src_sel = 0x1;
++ gPowerState.pclk_cntl.f.pclk_post_div = 0x2;
++ writel((u32)(gPowerState.pclk_cntl.val), remapped_regs+mmPCLK_CNTL);
++
++ writel(0x00DE1D7e, remapped_regs+mmGRAPHIC_CTRL);
++ writel(0x00895ffc, remapped_regs+mmGRAPHIC_OFFSET);
++ writel(0x000003c0, remapped_regs+mmGRAPHIC_PITCH);
++
++ // Re-enable display updates
++ writel(0x0000007b, remapped_regs+mmDISP_DB_BUF_CNTL);
++
++ break;
++ case 270:
++ gPowerState.pclk_cntl.f.pclk_src_sel = 0x1;
++ gPowerState.pclk_cntl.f.pclk_post_div = 0x6;
++ writel((u32)(gPowerState.pclk_cntl.val), remapped_regs+mmPCLK_CNTL);
++
++ writel(0x00DE1D16, remapped_regs+mmGRAPHIC_CTRL);
++ writel(0x008004fc, remapped_regs+mmGRAPHIC_OFFSET);
++ writel(0x00000500, remapped_regs+mmGRAPHIC_PITCH);
++
++ // Re-enable display updates
++ writel(0x0000007b, remapped_regs+mmDISP_DB_BUF_CNTL);
++
++ break;
++ default:
++ // not-support
++ break;
++ }
++}
++
+ static void w100_init_qvga_rotation(u16 deg)
+ {
+ // for resolution change and rotation
+@@ -2848,12 +3442,38 @@
+ writel(0x00d41c06, remapped_regs+mmGRAPHIC_CTRL);
+ writel(0x00800000, remapped_regs+mmGRAPHIC_OFFSET);
+ writel(0x000001e0, remapped_regs+mmGRAPHIC_PITCH);
++
++ // Re-enable display updates
++ writel(0x0000007b, remapped_regs+mmDISP_DB_BUF_CNTL);
++
++ break;
++ case 90:
++ writel(0x00d41c0E, remapped_regs+mmGRAPHIC_CTRL);
++ //writel(0x0080027e, remapped_regs+mmGRAPHIC_OFFSET);
++ writel(0x00825580, remapped_regs+mmGRAPHIC_OFFSET);
++ writel(0x00000280, remapped_regs+mmGRAPHIC_PITCH);
++
++ // Re-enable display updates
++ writel(0x0000007b, remapped_regs+mmDISP_DB_BUF_CNTL);
++
++ break;
++ case 180:
++ writel(0x00d41c1e, remapped_regs+mmGRAPHIC_CTRL);
++ writel(0x008257fc, remapped_regs+mmGRAPHIC_OFFSET);
++ writel(0x000001e0, remapped_regs+mmGRAPHIC_PITCH);
++
++ // Re-enable display updates
++ writel(0x0000007b, remapped_regs+mmDISP_DB_BUF_CNTL);
++
+ break;
+ case 270:
+ writel(0x00d41c16, remapped_regs+mmGRAPHIC_CTRL);
+ //writel(0x0080027e, remapped_regs+mmGRAPHIC_OFFSET);
+ writel(0x0080027c, remapped_regs+mmGRAPHIC_OFFSET);
+ writel(0x00000280, remapped_regs+mmGRAPHIC_PITCH);
++
++ // Re-enable display updates
++ writel(0x0000007b, remapped_regs+mmDISP_DB_BUF_CNTL);
+ break;
+ default:
+ // not-support
+@@ -2920,6 +3540,7 @@
+ {
+ u32 temp32;
+
++ proc_resume_mode=1;
+ w100_hw_init();
+ w100_PwmSetup();
+
+@@ -2928,13 +3549,16 @@
+ temp32 |= 0x00800000;
+ writel(temp32, remapped_regs+mmDISP_DEBUG2);
+
+- if (w100fb_lcdMode == LCD_MODE_480) {
++ if (w100fb_lcdMode == LCD_MODE_480 || w100fb_lcdMode == LCD_MODE_640) {
+ w100_init_sharp_lcd(LCD_SHARP_VGA);
++ if (w100fb_lcdMode == LCD_MODE_640) {
++ w100_init_vga_rotation( (u16)90 );
++ }
+ }
+ else {
+ w100_init_sharp_lcd(LCD_SHARP_QVGA);
+ if (w100fb_lcdMode == LCD_MODE_320) {
+- w100_init_qvga_rotation( (u16)270 );
++ w100_init_qvga_rotation( w100fb_rotation_flag );
+ }
+ }
+
+@@ -3269,7 +3893,7 @@
+
+ static void lcdtg_resume()
+ {
+- if (w100fb_lcdMode == LCD_MODE_480) {
++ if (w100fb_lcdMode == LCD_MODE_480 || w100fb_lcdMode == LCD_MODE_640) {
+ lcdtg_hw_init(LCD_SHARP_VGA);
+ }
+ else {
+@@ -3379,7 +4003,7 @@
+ break;
+ case LCD_SHARP_VGA:
+ /* Set Lcd Resolution (VGA) */
+- lcdtg_ssp_send( RESCTL_ADRS, RESCTL_VGA );
++ lcdtg_ssp_send( RESCTL_ADRS, lcd_param );
+ break;
+ default:
+ break;
+@@ -3393,7 +4017,7 @@
+
+ if(mode == LCD_SHARP_VGA)
+ /* Set Lcd Resolution (VGA) */
+- lcdtg_ssp_send( RESCTL_ADRS, RESCTL_VGA );
++ lcdtg_ssp_send( RESCTL_ADRS, lcd_param );
+ else if(mode == LCD_SHARP_QVGA)
+ /* Set Lcd Resolution (QVGA) */
+ lcdtg_ssp_send( RESCTL_ADRS, RESCTL_QVGA );
+@@ -3659,6 +4283,8 @@
+ int i, j;
+ u16 *pVram = (u16*)remapped_fbuf;
+
++
++
+ if(suspend_mode == 1){
+ // called from blank()
+ isSuspended_tg_only = 1;
+diff -Nur linux_c860_org/fs/adfs/map.c linux/fs/adfs/map.c
+--- linux_c860_org/fs/adfs/map.c 2002-08-26 14:43:25.000000000 +0900
++++ linux/fs/adfs/map.c 2004-06-10 21:09:11.000000000 +0900
+@@ -12,6 +12,7 @@
+ #include <linux/fs.h>
+ #include <linux/adfs_fs.h>
+ #include <linux/spinlock.h>
++#include <linux/sched.h>
+
+ #include <asm/unaligned.h>
+
+diff -Nur linux_c860_org/fs/buffer.c linux/fs/buffer.c
+--- linux_c860_org/fs/buffer.c 2002-08-29 12:24:14.000000000 +0900
++++ linux/fs/buffer.c 2004-06-10 21:09:11.000000000 +0900
+@@ -267,6 +267,11 @@
+ }
+ if (dev && bh->b_dev != dev)
+ continue;
++ if (conditional_schedule_needed()) {
++ debug_lock_break(1);
++ spin_unlock(&lru_list_lock);
++ return -EAGAIN;
++ }
+
+ get_bh(bh);
+ spin_unlock(&lru_list_lock);
+@@ -696,6 +701,13 @@
+ /* Not hashed? */
+ if (!bh->b_pprev)
+ continue;
++ if (conditional_schedule_needed()) {
++ debug_lock_break(2); /* bkl is held too */
++ get_bh(bh);
++ break_spin_lock_and_resched(&lru_list_lock);
++ put_bh(bh);
++ slept = 1;
++ }
+ if (buffer_locked(bh)) {
+ get_bh(bh);
+ spin_unlock(&lru_list_lock);
+@@ -847,6 +859,8 @@
+ struct buffer_head *bh;
+ struct inode tmp;
+ int err = 0, err2;
++
++ DEFINE_LOCK_COUNT();
+
+ INIT_LIST_HEAD(&tmp.i_dirty_buffers);
+
+@@ -868,6 +882,12 @@
+ spin_lock(&lru_list_lock);
+ }
+ }
++ /* haven't hit this code path ... */
++ debug_lock_break(551);
++ if (TEST_LOCK_COUNT(32)) {
++ RESET_LOCK_COUNT();
++ break_spin_lock(&lru_list_lock);
++ }
+ }
+
+ while (!list_empty(&tmp.i_dirty_buffers)) {
+@@ -897,6 +917,7 @@
+ struct inode tmp;
+ int err = 0, err2;
+
++ DEFINE_LOCK_COUNT();
+ INIT_LIST_HEAD(&tmp.i_dirty_data_buffers);
+
+ spin_lock(&lru_list_lock);
+@@ -928,9 +949,14 @@
+ if (!buffer_uptodate(bh))
+ err = -EIO;
+ brelse(bh);
++ debug_lock_break(1);
++ if (TEST_LOCK_COUNT(32)) {
++ RESET_LOCK_COUNT();
++ conditional_schedule();
++ }
+ spin_lock(&lru_list_lock);
+ }
+-
++
+ spin_unlock(&lru_list_lock);
+ err2 = osync_inode_data_buffers(inode);
+
+@@ -957,6 +983,8 @@
+ struct list_head *list;
+ int err = 0;
+
++ DEFINE_LOCK_COUNT();
++
+ spin_lock(&lru_list_lock);
+
+ repeat:
+@@ -964,6 +992,17 @@
+ for (list = inode->i_dirty_buffers.prev;
+ bh = BH_ENTRY(list), list != &inode->i_dirty_buffers;
+ list = bh->b_inode_buffers.prev) {
++ /* untested code path ... */
++ debug_lock_break(551);
++
++ if (TEST_LOCK_COUNT(32)) {
++ RESET_LOCK_COUNT();
++ if (conditional_schedule_needed()) {
++ break_spin_lock(&lru_list_lock);
++ goto repeat;
++ }
++ }
++
+ if (buffer_locked(bh)) {
+ get_bh(bh);
+ spin_unlock(&lru_list_lock);
+diff -Nur linux_c860_org/fs/dcache.c linux/fs/dcache.c
+--- linux_c860_org/fs/dcache.c 2002-08-26 14:37:31.000000000 +0900
++++ linux/fs/dcache.c 2004-06-10 21:09:11.000000000 +0900
+@@ -320,11 +320,24 @@
+
+ void prune_dcache(int count)
+ {
++ DEFINE_LOCK_COUNT();
++
+ spin_lock(&dcache_lock);
++
++redo:
+ for (;;) {
+ struct dentry *dentry;
+ struct list_head *tmp;
+
++ if (TEST_LOCK_COUNT(100)) {
++ RESET_LOCK_COUNT();
++ debug_lock_break(1);
++ if (conditional_schedule_needed()) {
++ break_spin_lock(&dcache_lock);
++ goto redo;
++ }
++ }
++
+ tmp = dentry_unused.prev;
+
+ if (tmp == &dentry_unused)
+@@ -480,6 +493,8 @@
+ struct list_head *next;
+ int found = 0;
+
++ DEFINE_LOCK_COUNT();
++
+ spin_lock(&dcache_lock);
+ repeat:
+ next = this_parent->d_subdirs.next;
+@@ -493,6 +508,12 @@
+ list_add(&dentry->d_lru, dentry_unused.prev);
+ found++;
+ }
++ if (TEST_LOCK_COUNT(500) && found > 10) {
++ debug_lock_break(1);
++ if (conditional_schedule_needed())
++ goto out;
++ RESET_LOCK_COUNT();
++ }
+ /*
+ * Descend a level if the d_subdirs list is non-empty.
+ */
+@@ -517,6 +538,7 @@
+ #endif
+ goto resume;
+ }
++out:
+ spin_unlock(&dcache_lock);
+ return found;
+ }
+diff -Nur linux_c860_org/fs/exec.c linux/fs/exec.c
+--- linux_c860_org/fs/exec.c 2003-06-18 16:12:27.000000000 +0900
++++ linux/fs/exec.c 2004-06-10 21:09:11.000000000 +0900
+@@ -469,8 +469,8 @@
+ active_mm = current->active_mm;
+ current->mm = mm;
+ current->active_mm = mm;
+- task_unlock(current);
+ activate_mm(active_mm, mm);
++ task_unlock(current);
+ mm_release();
+ if (old_mm) {
+ if (active_mm != old_mm) BUG();
+@@ -631,8 +631,10 @@
+
+ current->sas_ss_sp = current->sas_ss_size = 0;
+
+- if (current->euid == current->uid && current->egid == current->gid)
++ if (current->euid == current->uid && current->egid == current->gid) {
+ current->mm->dumpable = 1;
++ current->task_dumpable = 1;
++ }
+ name = bprm->filename;
+ for (i=0; (ch = *(name++)) != '\0';) {
+ if (ch == '/')
+@@ -1024,7 +1026,7 @@
+ binfmt = current->binfmt;
+ if (!binfmt || !binfmt->core_dump)
+ goto fail;
+- if (!current->mm->dumpable)
++ if (!is_dumpable(current))
+ goto fail;
+ current->mm->dumpable = 0;
+ if (current->rlim[RLIMIT_CORE].rlim_cur < binfmt->min_coredump)
+diff -Nur linux_c860_org/fs/ext3/inode.c linux/fs/ext3/inode.c
+--- linux_c860_org/fs/ext3/inode.c 2002-08-26 14:37:42.000000000 +0900
++++ linux/fs/ext3/inode.c 2004-06-10 21:09:11.000000000 +0900
+@@ -1649,6 +1649,8 @@
+ }
+
+ for (p = first; p < last; p++) {
++ debug_lock_break(1); /* bkl is held */
++ conditional_schedule();
+ nr = le32_to_cpu(*p);
+ if (nr) {
+ /* accumulate blocks to free if they're contiguous */
+@@ -1714,6 +1716,9 @@
+ /* Go read the buffer for the next level down */
+ bh = sb_bread(inode->i_sb, nr);
+
++ debug_lock_break(1);
++ conditional_schedule();
++
+ /*
+ * A read failure? Report error and clear slot
+ * (should be rare).
+diff -Nur linux_c860_org/fs/ext3/namei.c linux/fs/ext3/namei.c
+--- linux_c860_org/fs/ext3/namei.c 2002-08-26 14:43:28.000000000 +0900
++++ linux/fs/ext3/namei.c 2004-06-10 21:09:11.000000000 +0900
+@@ -157,6 +157,8 @@
+ if ((bh = bh_use[ra_ptr++]) == NULL)
+ goto next;
+ wait_on_buffer(bh);
++ debug_lock_break(1);
++ conditional_schedule();
+ if (!buffer_uptodate(bh)) {
+ /* read error, skip block & hope for the best */
+ brelse(bh);
+diff -Nur linux_c860_org/fs/fat/cache.c linux/fs/fat/cache.c
+--- linux_c860_org/fs/fat/cache.c 2002-08-29 12:24:17.000000000 +0900
++++ linux/fs/fat/cache.c 2004-06-10 21:09:11.000000000 +0900
+@@ -17,6 +17,7 @@
+ #include <linux/string.h>
+ #include <linux/stat.h>
+ #include <linux/fat_cvf.h>
++#include <linux/sched.h>
+
+ #if 0
+ # define PRINTK(x) printk x
+diff -Nur linux_c860_org/fs/inode.c linux/fs/inode.c
+--- linux_c860_org/fs/inode.c 2002-11-22 21:03:26.000000000 +0900
++++ linux/fs/inode.c 2004-06-10 21:09:11.000000000 +0900
+@@ -589,6 +589,12 @@
+ if (tmp == head)
+ break;
+ inode = list_entry(tmp, struct inode, i_list);
++
++ debug_lock_break(2); /* bkl is also held */
++ atomic_inc(&inode->i_count);
++ break_spin_lock_and_resched(&inode_lock);
++ atomic_dec(&inode->i_count);
++
+ if (inode->i_sb != sb)
+ continue;
+ invalidate_inode_buffers(inode);
+@@ -699,8 +705,11 @@
+ #endif
+ #endif
+
++ DEFINE_LOCK_COUNT();
++
+ spin_lock(&inode_lock);
+
++free_unused:
+ count = 0;
+ entry = inode_unused.prev;
+ while (entry != &inode_unused)
+@@ -736,6 +745,14 @@
+ count++;
+ if (!--goal)
+ break;
++ if (TEST_LOCK_COUNT(32)) {
++ RESET_LOCK_COUNT();
++ debug_lock_break(1);
++ if (conditional_schedule_needed()) {
++ break_spin_lock(&inode_lock);
++ goto free_unused;
++ }
++ }
+ }
+ inodes_stat.nr_unused -= count;
+ spin_unlock(&inode_lock);
+diff -Nur linux_c860_org/fs/jbd/commit.c linux/fs/jbd/commit.c
+--- linux_c860_org/fs/jbd/commit.c 2002-08-26 14:37:42.000000000 +0900
++++ linux/fs/jbd/commit.c 2004-06-10 21:09:11.000000000 +0900
+@@ -212,6 +212,9 @@
+ __journal_remove_journal_head(bh);
+ refile_buffer(bh);
+ __brelse(bh);
++ debug_lock_break(2);
++ if (conditional_schedule_needed())
++ break;
+ }
+ }
+ if (bufs == ARRAY_SIZE(wbuf)) {
+@@ -235,8 +238,7 @@
+ journal_brelse_array(wbuf, bufs);
+ lock_journal(journal);
+ spin_lock(&journal_datalist_lock);
+- if (bufs)
+- goto write_out_data_locked;
++ goto write_out_data_locked;
+ }
+
+ /*
+@@ -272,6 +274,14 @@
+ */
+ while ((jh = commit_transaction->t_async_datalist)) {
+ struct buffer_head *bh = jh2bh(jh);
++ if (conditional_schedule_needed()) {
++ debug_lock_break(551);
++ spin_unlock(&journal_datalist_lock);
++ unlock_journal(journal);
++ lock_journal(journal);
++ spin_lock(&journal_datalist_lock);
++ continue;
++ }
+ if (buffer_locked(bh)) {
+ spin_unlock(&journal_datalist_lock);
+ unlock_journal(journal);
+diff -Nur linux_c860_org/fs/jffs2/build.c linux/fs/jffs2/build.c
+--- linux_c860_org/fs/jffs2/build.c 2003-05-14 15:01:21.000000000 +0900
++++ linux/fs/jffs2/build.c 2004-06-10 21:09:11.000000000 +0900
+@@ -13,6 +13,7 @@
+ * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility
+ * 20-Sep-2002 Lineo Japan, Inc. add jffs2_orphaned_inodes
+ * but it is useless right now
++ * 05-Aug-2003 SHARP for Tosa
+ *
+ */
+
+@@ -295,7 +296,7 @@
+
+ c->free_size = c->flash_size;
+ c->nr_blocks = c->flash_size / c->sector_size;
+-#ifdef CONFIG_ARCH_PXA_HUSKY
++#if defined(CONFIG_ARCH_PXA_HUSKY) || defined(CONFIG_ARCH_PXA_TOSA)
+ c->blocks = consistent_alloc(GFP_KERNEL,
+ sizeof(struct jffs2_eraseblock) * c->nr_blocks,
+ &c->blocks_phys);
+@@ -341,7 +342,7 @@
+ D1(printk(KERN_DEBUG "build_fs failed\n"));
+ jffs2_free_ino_caches(c);
+ jffs2_free_raw_node_refs(c);
+-#ifdef CONFIG_ARCH_PXA_HUSKY
++#if defined(CONFIG_ARCH_PXA_HUSKY) || defined(CONFIG_ARCH_PXA_TOSA)
+ consistent_free( c->blocks,
+ sizeof(struct jffs2_eraseblock) * c->nr_blocks,
+ c->blocks_phys );
+diff -Nur linux_c860_org/fs/jffs2/fs.c linux/fs/jffs2/fs.c
+--- linux_c860_org/fs/jffs2/fs.c 2003-05-14 15:01:21.000000000 +0900
++++ linux/fs/jffs2/fs.c 2004-06-10 21:09:11.000000000 +0900
+@@ -19,6 +19,7 @@
+ * 24-Nov-2002 SHARP modify storage-avail calculation, and add erasing_dirty_size
+ * 09-Nov-2002 Lineo Japan, Inc. add code to do avail = 0 when cannot reserve space
+ * 01-Nov-2002 Lineo Japan, Inc. involve nr_bad_blocks in USED calc.
++ * 05-Aug-2003 SHARP for Tosa
+ *
+ */
+
+@@ -402,7 +403,7 @@
+ out_nodes:
+ jffs2_free_ino_caches(c);
+ jffs2_free_raw_node_refs(c);
+-#ifdef CONFIG_ARCH_PXA_HUSKY
++#if defined(CONFIG_ARCH_PXA_HUSKY) || defined(CONFIG_ARCH_PXA_TOSA)
+ consistent_free( c->blocks,
+ sizeof(struct jffs2_eraseblock) * c->nr_blocks,
+ c->blocks_phys );
+diff -Nur linux_c860_org/fs/jffs2/nodelist.h linux/fs/jffs2/nodelist.h
+--- linux_c860_org/fs/jffs2/nodelist.h 2003-06-19 17:23:10.000000000 +0900
++++ linux/fs/jffs2/nodelist.h 2004-06-10 21:14:59.000000000 +0900
+@@ -17,8 +17,16 @@
+ * 18-Nov-2002 Lineo Japan, Inc. add dynamic construction of fragtree
+ * 11-Nov-2002 Lineo Japan, Inc. add JFFS2_RESERVED_BLOCKS_ROOT
+ * 29-Oct-2002 Lineo Japan, Inc. add JFFS2_RESERVED_BLOCKS_BAD and JFFS2_MAX_CONT_GC
++ *
++ * ChangeLog:
+ * 05-Dec-2002 SHARP adjust REVERVED_BLOCKS values for storage-full
+- * 21-May-2003 SHARP modified JFFS2_RESERVED_BLOCKS_BAD
++ * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode
++ * 23-Nov-2002 Lineo Japan, Inc. add JFFS2_RESERVED_BLOCKS_DIRTY
++ * add JFFS2_RESERVED_BLOCKS_CLEAN
++ * 19-Nov-2002 Lineo Japan, Inc. add counter of fragtree elements
++ * 18-Nov-2002 Lineo Japan, Inc. add dynamic construction of fragtree
++ * 11-Nov-2002 Lineo Japan, Inc. add JFFS2_RESERVED_BLOCKS_ROOT
++ * 29-Oct-2002 Lineo Japan, Inc. add JFFS2_RESERVED_BLOCKS_BAD and JFFS2_MAX_CONT_GC
+ *
+ */
+
+@@ -233,13 +241,7 @@
+ #define JFFS2_RESERVED_BLOCKS_GCTRIGGER 39 /* ... wake up the GC thread */
+ #define JFFS2_RESERVED_BLOCKS_GCBAD (JFFS2_RESERVED_BLOCKS_BASE + 1) /* ... pick a block from the bad_list to GC */
+ #define JFFS2_RESERVED_BLOCKS_GCMERGE (JFFS2_RESERVED_BLOCKS_BASE) /* ... merge pages when garbage collecting */
+-
+-#ifdef CONFIG_ARCH_PXA_HUSKY
+ #define JFFS2_RESERVED_BLOCKS_BAD 80
+-#else
+-#define JFFS2_RESERVED_BLOCKS_BAD 24
+-#endif
+-
+ #define JFFS2_RESERVED_BLOCKS_ROOT 5
+ #define JFFS2_RESERVED_BLOCKS_DIRTY 24
+ #define JFFS2_RESERVED_BLOCKS_CLEAN 12
+diff -Nur linux_c860_org/fs/jffs2/super-v24.c linux/fs/jffs2/super-v24.c
+--- linux_c860_org/fs/jffs2/super-v24.c 2003-05-14 15:01:21.000000000 +0900
++++ linux/fs/jffs2/super-v24.c 2004-06-10 21:09:11.000000000 +0900
+@@ -11,6 +11,7 @@
+ *
+ * ChangeLog:
+ * 08-Nov-2002 Lineo Japan, Inc. add /proc/fs/jffs2 files for JFFS2 information
++ * 05-Aug-2003 SHARP for Tosa
+ *
+ */
+
+@@ -106,7 +107,7 @@
+ up(&c->alloc_sem);
+ jffs2_free_ino_caches(c);
+ jffs2_free_raw_node_refs(c);
+-#ifdef CONFIG_ARCH_PXA_HUSKY
++#if defined(CONFIG_ARCH_PXA_HUSKY) || defined(CONFIG_ARCH_PXA_TOSA)
+ consistent_free( c->blocks,
+ sizeof(struct jffs2_eraseblock) * c->nr_blocks,
+ c->blocks_phys );
+diff -Nur linux_c860_org/fs/jffs2/super.c linux/fs/jffs2/super.c
+--- linux_c860_org/fs/jffs2/super.c 2003-05-14 15:01:21.000000000 +0900
++++ linux/fs/jffs2/super.c 2004-06-10 21:09:11.000000000 +0900
+@@ -9,6 +9,9 @@
+ *
+ * $Id: super.c,v 1.73 2002/07/23 17:00:45 dwmw2 Exp $
+ *
++ * ChangeLog:
++ * 05-Aug-2003 SHARP for Tosa
++ *
+ */
+
+ #include <linux/config.h>
+@@ -263,7 +266,7 @@
+ up(&c->alloc_sem);
+ jffs2_free_ino_caches(c);
+ jffs2_free_raw_node_refs(c);
+-#ifdef CONFIG_ARCH_PXA_HUSKY
++#if defined(CONFIG_ARCH_PXA_HUSKY) || defined(CONFIG_ARCH_PXA_TOSA)
+ consistent_free( c->blocks,
+ sizeof(struct jffs2_eraseblock) * c->nr_blocks,
+ c->blocks_phys );
+diff -Nur linux_c860_org/fs/nls/nls_base.c linux/fs/nls/nls_base.c
+--- linux_c860_org/fs/nls/nls_base.c 2002-08-26 14:37:33.000000000 +0900
++++ linux/fs/nls/nls_base.c 2004-06-10 21:09:11.000000000 +0900
+@@ -18,6 +18,7 @@
+ #ifdef CONFIG_KMOD
+ #include <linux/kmod.h>
+ #endif
++#include <linux/sched.h>
+ #include <linux/spinlock.h>
+
+ static struct nls_table *tables;
+diff -Nur linux_c860_org/fs/reiserfs/bitmap.c linux/fs/reiserfs/bitmap.c
+--- linux_c860_org/fs/reiserfs/bitmap.c 2002-08-26 14:37:39.000000000 +0900
++++ linux/fs/reiserfs/bitmap.c 2004-06-10 21:09:11.000000000 +0900
+@@ -410,19 +410,23 @@
+ amount_needed++ ;
+ continue ;
+ }
+-
+
+- reiserfs_prepare_for_journal(s, SB_AP_BITMAP(s)[i], 1) ;
++ RFALSE( is_reusable (s, search_start, 0) == 0,
++ "vs-4140: bad block number found");
+
+- RFALSE( buffer_locked (SB_AP_BITMAP (s)[i]) ||
+- is_reusable (s, search_start, 0) == 0,
+- "vs-4140: bitmap block is locked or bad block number found");
++ reiserfs_prepare_for_journal(s, SB_AP_BITMAP(s)[i], 1) ;
+
+ /* if this bit was already set, we've scheduled, and someone else
+ ** has allocated it. loop around and try again
+ */
+ if (reiserfs_test_and_set_le_bit (j, SB_AP_BITMAP (s)[i]->b_data)) {
+ reiserfs_restore_prepared_buffer(s, SB_AP_BITMAP(s)[i]) ;
++ /* if this block has been allocated while we slept, it is
++ ** impossible to find any more contiguous blocks for ourselves.
++ ** If we are doing preallocation, give up now and return.
++ */
++ if (for_prealloc)
++ goto free_and_return;
+ amount_needed++ ;
+ continue ;
+ }
+diff -Nur linux_c860_org/fs/reiserfs/buffer2.c linux/fs/reiserfs/buffer2.c
+--- linux_c860_org/fs/reiserfs/buffer2.c 2002-08-26 14:37:40.000000000 +0900
++++ linux/fs/reiserfs/buffer2.c 2004-06-10 21:09:11.000000000 +0900
+@@ -55,6 +55,8 @@
+ PROC_EXP( unsigned int ctx_switches = kstat.context_swtch );
+
+ result = bread (super -> s_dev, n_block, n_size);
++ debug_lock_break(1);
++ conditional_schedule();
+ PROC_INFO_INC( super, breads );
+ PROC_EXP( if( kstat.context_swtch != ctx_switches )
+ PROC_INFO_INC( super, bread_miss ) );
+diff -Nur linux_c860_org/fs/reiserfs/journal.c linux/fs/reiserfs/journal.c
+--- linux_c860_org/fs/reiserfs/journal.c 2002-08-26 14:37:40.000000000 +0900
++++ linux/fs/reiserfs/journal.c 2004-06-10 21:09:11.000000000 +0900
+@@ -574,6 +574,8 @@
+ /* lock the current transaction */
+ inline static void lock_journal(struct super_block *p_s_sb) {
+ PROC_INFO_INC( p_s_sb, journal.lock_journal );
++ debug_lock_break(1);
++ conditional_schedule();
+ while(atomic_read(&(SB_JOURNAL(p_s_sb)->j_wlock)) > 0) {
+ PROC_INFO_INC( p_s_sb, journal.lock_journal_wait );
+ sleep_on(&(SB_JOURNAL(p_s_sb)->j_wait)) ;
+@@ -704,6 +706,8 @@
+ mark_buffer_dirty(tbh) ;
+ }
+ ll_rw_block(WRITE, 1, &tbh) ;
++ debug_lock_break(1);
++ conditional_schedule();
+ count++ ;
+ put_bh(tbh) ; /* once for our get_hash */
+ }
+@@ -833,6 +837,8 @@
+ set_bit(BH_Dirty, &(SB_JOURNAL(p_s_sb)->j_header_bh->b_state)) ;
+ ll_rw_block(WRITE, 1, &(SB_JOURNAL(p_s_sb)->j_header_bh)) ;
+ wait_on_buffer((SB_JOURNAL(p_s_sb)->j_header_bh)) ;
++ debug_lock_break(1);
++ conditional_schedule();
+ if (!buffer_uptodate(SB_JOURNAL(p_s_sb)->j_header_bh)) {
+ printk( "reiserfs: journal-837: IO error during journal replay\n" );
+ return -EIO ;
+@@ -2089,6 +2095,8 @@
+ }
+
+ int journal_begin(struct reiserfs_transaction_handle *th, struct super_block * p_s_sb, unsigned long nblocks) {
++ debug_lock_break(1);
++ conditional_schedule();
+ return do_journal_begin_r(th, p_s_sb, nblocks, 0) ;
+ }
+
+@@ -2229,6 +2237,8 @@
+ }
+
+ int journal_end(struct reiserfs_transaction_handle *th, struct super_block *p_s_sb, unsigned long nblocks) {
++ debug_lock_break(1);
++ conditional_schedule();
+ return do_journal_end(th, p_s_sb, nblocks, 0) ;
+ }
+
+@@ -2680,6 +2690,8 @@
+ RFALSE( buffer_locked(bh) && cur_tb != NULL,
+ "waiting while do_balance was running\n") ;
+ wait_on_buffer(bh) ;
++ debug_lock_break(1);
++ conditional_schedule();
+ }
+ PROC_INFO_INC( p_s_sb, journal.prepare_retry );
+ retry_count++ ;
+@@ -2852,6 +2864,8 @@
+ /* copy all the real blocks into log area. dirty log blocks */
+ if (test_bit(BH_JDirty, &cn->bh->b_state)) {
+ struct buffer_head *tmp_bh ;
++ debug_lock_break(1);
++ conditional_schedule();
+ tmp_bh = sb_getblk(p_s_sb, reiserfs_get_journal_block(p_s_sb) +
+ ((cur_write_start + jindex) % JOURNAL_BLOCK_COUNT)) ;
+ mark_buffer_uptodate(tmp_bh, 1) ;
+diff -Nur linux_c860_org/fs/reiserfs/stree.c linux/fs/reiserfs/stree.c
+--- linux_c860_org/fs/reiserfs/stree.c 2002-08-26 14:37:40.000000000 +0900
++++ linux/fs/reiserfs/stree.c 2004-06-10 21:09:11.000000000 +0900
+@@ -648,9 +648,8 @@
+ stop at leaf level - set to
+ DISK_LEAF_NODE_LEVEL */
+ ) {
+- int n_block_number = SB_ROOT_BLOCK (p_s_sb),
+- expected_level = SB_TREE_HEIGHT (p_s_sb),
+- n_block_size = p_s_sb->s_blocksize;
++ int n_block_number, expected_level;
++ int n_block_size = p_s_sb->s_blocksize;
+ struct buffer_head * p_s_bh;
+ struct path_element * p_s_last_element;
+ int n_node_level, n_retval;
+@@ -662,7 +661,10 @@
+ #endif
+
+ PROC_INFO_INC( p_s_sb, search_by_key );
+-
++
++ debug_lock_break(1);
++ conditional_schedule();
++
+ /* As we add each node to a path we increase its count. This means that
+ we must be careful to release all nodes in a path before we either
+ discard the path struct or re-use the path struct, as we do here. */
+@@ -674,6 +676,8 @@
+ /* With each iteration of this loop we search through the items in the
+ current node, and calculate the next current node(next path element)
+ for the next iteration of this loop.. */
++ n_block_number = SB_ROOT_BLOCK (p_s_sb);
++ expected_level = SB_TREE_HEIGHT (p_s_sb);
+ while ( 1 ) {
+
+ #ifdef CONFIG_REISERFS_CHECK
+@@ -1100,6 +1104,9 @@
+ for (n_counter = *p_n_removed;
+ n_counter < n_unfm_number; n_counter++, p_n_unfm_pointer-- ) {
+
++ debug_lock_break(1);
++ conditional_schedule();
++
+ if (item_moved (&s_ih, p_s_path)) {
+ need_research = 1 ;
+ break;
+diff -Nur linux_c860_org/include/asm-alpha/processor.h linux/include/asm-alpha/processor.h
+--- linux_c860_org/include/asm-alpha/processor.h 2002-08-26 14:37:49.000000000 +0900
++++ linux/include/asm-alpha/processor.h 2004-06-10 21:09:11.000000000 +0900
+@@ -119,7 +119,7 @@
+ extern void release_thread(struct task_struct *);
+
+ /* Create a kernel thread without removing it from tasklists. */
+-extern long kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
++extern long arch_kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
+
+ #define copy_segments(tsk, mm) do { } while (0)
+ #define release_segments(mm) do { } while (0)
+diff -Nur linux_c860_org/include/asm-arm/arch-pxa/hardware.h linux/include/asm-arm/arch-pxa/hardware.h
+--- linux_c860_org/include/asm-arm/arch-pxa/hardware.h 2002-12-18 19:52:24.000000000 +0900
++++ linux/include/asm-arm/arch-pxa/hardware.h 2004-06-10 21:12:44.000000000 +0900
+@@ -11,6 +11,7 @@
+ *
+ * ChangLog:
+ * 12-Dec-2002 Lineo Japan, Inc.
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+ #ifndef __ASM_ARCH_HARDWARE_H
+@@ -160,6 +161,10 @@
+
+ #ifdef CONFIG_ARCH_PXA_CORGI
+ #include "corgi.h"
+-#endif
++#endif /* CONFIG_ARCH_PXA_CORGI */
++
++#ifdef CONFIG_ARCH_PXA_TOSA
++#include "tosa.h"
++#endif /* CONFIG_ARCH_PXA_TOSA */
+
+ #endif /* _ASM_ARCH_HARDWARE_H */
+diff -Nur linux_c860_org/include/asm-arm/arch-pxa/irqs.h linux/include/asm-arm/arch-pxa/irqs.h
+--- linux_c860_org/include/asm-arm/arch-pxa/irqs.h 2002-12-18 19:29:34.000000000 +0900
++++ linux/include/asm-arm/arch-pxa/irqs.h 2004-06-10 21:12:37.000000000 +0900
+@@ -11,6 +11,7 @@
+ *
+ * ChangLog:
+ * 12-Dec-2002 Lineo Japan, Inc.
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+ #define PXA_IRQ_SKIP 8 /* The first 8 IRQs are reserved */
+@@ -345,6 +346,20 @@
+
+ #endif
+
++#if defined(CONFIG_ARCH_PXA_TOSA)
++#define TC6393_IRQ(x) (IRQ_GPIO(80) + 1 + (x))
++#define TC6393_IRQ_NDINT TC6393_IRQ(0)
++#define TC6393_IRQ_SDINT TC6393_IRQ(1)
++#define TC6393_IRQ_USBINT TC6393_IRQ(2)
++#define TC6393_IRQ_SIOINT TC6393_IRQ(3)
++#define TC6393_IRQ_GCINT TC6393_IRQ(4)
++#define TC6393_IRQ_GPINT TC6393_IRQ(5)
++#define TC6393_IRQ_CLKINT TC6393_IRQ(7)
++
++#undef NR_IRQS
++#define NR_IRQS (TC6393_IRQ(7) + 1)
++#endif /* CONFIG_ARCH_PXA_TOSA */
++
+ #if defined(CONFIG_ARCH_PXA_POODLE)
+ #if CONFIG_SA1111
+ #error POODLE configuration error
+diff -Nur linux_c860_org/include/asm-arm/arch-pxa/keyboard.h linux/include/asm-arm/arch-pxa/keyboard.h
+--- linux_c860_org/include/asm-arm/arch-pxa/keyboard.h 2002-12-18 19:29:34.000000000 +0900
++++ linux/include/asm-arm/arch-pxa/keyboard.h 2004-06-10 21:13:12.000000000 +0900
+@@ -5,6 +5,7 @@
+ *
+ * ChangLog:
+ * 12-Dec-2002 Lineo Japan, Inc.
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+ #ifndef _PXA_KEYBOARD_H
+@@ -22,6 +23,8 @@
+ #include <asm/arch/keyboard_poodle.h>
+ #elif defined(CONFIG_ARCH_PXA_CORGI)
+ #include <asm/arch/keyboard_corgi.h>
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++#include <asm/arch/keyboard_tosa.h>
+ #else
+
+ #define kbd_disable_irq() do { } while(0);
+diff -Nur linux_c860_org/include/asm-arm/arch-pxa/keyboard_tosa.h linux/include/asm-arm/arch-pxa/keyboard_tosa.h
+--- linux_c860_org/include/asm-arm/arch-pxa/keyboard_tosa.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/include/asm-arm/arch-pxa/keyboard_tosa.h 2004-06-10 21:13:12.000000000 +0900
+@@ -0,0 +1,162 @@
++/*
++ * linux/include/asm-arm/arch-pxa/keyboard_tosa.h
++ *
++ * (C) Copyright 2004 Lineo Solutions, Inc.
++ *
++ * May be copied or modified under the terms of the GNU General Public
++ * License. See linux/COPYING for more information.
++ *
++ * Based on:
++ *
++ * linux/include/asm-arm/arch-pxa/keyboard_corgi.h
++ *
++ * (C) Copyright 2001 Lineo Japan, Inc.
++ *
++ * May be copied or modified under the terms of the GNU General Public
++ * License. See linux/COPYING for more information.
++ *
++ * Based on:
++ * linux/include/asm-arm/arch-sa1100/keyboard_collie.h
++ * include/asm-arm/arch-linkup/keyboard.h
++ * Created by Xuejun Tao 2000, ISDCorp www.isdcorp.com
++ *
++ * Changelog:
++ * 04-13-2001 Lineo Japan, Inc.
++ * 04-25-2001 Lineo Japan, Inc.
++ * 10-23-2002 Sharp Corporation
++ */
++#ifndef __ASM_ARCH_KEYBOARD_TOSA_H
++#define __ASM_ARCH_KEYBOARD_TOSA_H
++
++#include <linux/spinlock.h>
++#include <asm/arch/hardware.h>
++
++/* =========================================================
++ * !!! CAUTION !!!
++ * Iris board without Keyboard Enhancements makes PA5 INTR
++ * all times. So , you should disable PA5 INTR on such boards.
++ * Define this option to run on such board.
++ * ========================================================= */
++#define TOSA_WITHOUT_KEY_ENH_WORKAROUND
++/* =========================================================
++ * CAUTION ends.
++ * ========================================================= */
++
++/*
++ * My driver now supports both keyboard interrupt driven or timer driven
++ * Both modes work although keyboard interrupt mode is highly recommended.
++ */
++#define USE_KBD_IRQ /* Use keyboard interrupt instead of timer */
++
++#define KB_ROWS 7
++#define KB_COLS 11
++
++#define KBD_COL9_IS_USED_FOR_SIC
++ /* KBDCOL9 Hardware is used as SIC SYS_CLK , so , it cannot be used */
++
++#define ALL_AUX_COLS 0x00 /* no AUX Cols */
++
++#define set_bits(var, mask, bits) (var) = (((var) & ~(mask)) | (bits))
++
++/*
++ * Be sure to change the if you increase the
++ * number of kbd rows...
++ */
++#define KEYCODE(r,c) ( ((r)<<4) + (c) + 1 )
++#define KB_ROWMASK(r) (1 << (r))
++
++ /*
++ * KB_DELAY is used to allow the matrix
++ * to stabilize.., value is determined via
++ * experimentation.
++ */
++
++#define KB_DISCHARGE_DELAY 10
++#define KB_ACTIVATE_DELAY 10
++
++typedef struct {
++ int in; /* If the key down */
++} kbd_keyinfo;
++
++#define KBUP (0x80)
++#define KBDOWN (0)
++
++#define KBSCANCDE(x,y) ((x) | (y))
++
++#define CHARGE_VALUE 0x00FF
++#define DISCHARGE_VALUE 0x0000
++#define IRQ_STATE_CLEAR 0xFEFF
++#define INIT_KCMD 0x0001
++
++
++
++/*
++ * We have a spinlock we use to ensure that keysdown
++ * is consisent with kbd_state[]
++ *
++ * This is prolly overkill since the arm doesn't support SMP.
++ */
++// Yes, it is - WA static spinlock_t kbd_spinlock;
++extern spinlock_t kbd_spinlock;
++
++ /*
++ * #define for functions we can't make use of
++ */
++
++#define kbd_leds(x)
++#define kbd_setleds(x)
++#define kbd_getledstate (0)
++extern int tosa_kbd_translate(unsigned char sc,unsigned char *keycode_p);
++#define kbd_translate(sc,kc,rm) tosa_kbd_translate(sc,kc)
++/*
++ *#define kbd_sysrq_xlate() (1)
++ */
++#define kbd_pretranslate(x,y) (1)
++#define kbd_unexpected_up(kc) (0x80)
++#define kbd_setkeycode(sc,kc) (-EINVAL)
++#define kbd_getkeycode(sc) (-EINVAL)
++
++extern void tosa_kbd_hw_init(void);
++#define kbd_init_hw() tosa_kbd_hw_init()
++
++extern void tosa_kbd_cleartable(void);
++
++/*
++ * I need to do something better for these two...
++ * Sometime v. soon. I don't like these at all, as they
++ *
++ * don't look like fn calls.
++ */
++
++#define kbd_disable_irq() { \
++ int flags; \
++ spin_lock_irqsave(&kbd_spinlock,flags);
++
++
++#define kbd_enable_irq() spin_unlock_irqrestore(&kbd_spinlock,flags); \
++ }
++
++
++/* data structure for raw keyboard event */
++
++/*
++ * row , col values for feature keys
++ */
++#define TOSA_KEYPOS_2nd_ROW 0
++#define TOSA_KEYPOS_2nd_COL 1
++
++#define TOSA_KEYPOS_NUM_ROW 0
++#define TOSA_KEYPOS_NUM_COL 8
++
++#define TOSA_KEYPOS_LSHIFT_ROW 1
++#define TOSA_KEYPOS_LSHIFT_COL 0
++
++#define TOSA_KEYPOS_RSHIFT_ROW 1
++#define TOSA_KEYPOS_RSHIFT_COL 8
++
++/*
++ * number of modifier status keys resolved on corgikb driver
++ */
++#define TOSAKB_MODIFIERS 5 /* for CapsLock / NumLock / 2ND / LSHIFT / RSHIFT */
++
++#endif
+diff -Nur linux_c860_org/include/asm-arm/arch-pxa/pcmcia.h linux/include/asm-arm/arch-pxa/pcmcia.h
+--- linux_c860_org/include/asm-arm/arch-pxa/pcmcia.h 2002-12-18 19:29:34.000000000 +0900
++++ linux/include/asm-arm/arch-pxa/pcmcia.h 2004-06-10 21:13:56.000000000 +0900
+@@ -14,6 +14,7 @@
+ *
+ * ChangLog:
+ * 12-Dec-2002 Lineo Japan, Inc.
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+ #ifndef _ASM_ARCH_PCMCIA
+@@ -71,6 +72,10 @@
+ int (*socket_state)(struct pcmcia_state_array *);
+ int (*get_irq_info)(struct pcmcia_irq_info *);
+ int (*configure_socket)(const struct pcmcia_configure *);
++#ifdef CONFIG_ARCH_SHARP_SL
++ int (*socket_init)(int sock);
++ int (*socket_suspend)(int sock);
++#endif
+ };
+
+ extern struct pcmcia_low_level *pcmcia_low_level;
+diff -Nur linux_c860_org/include/asm-arm/arch-pxa/pxa-regs.h linux/include/asm-arm/arch-pxa/pxa-regs.h
+--- linux_c860_org/include/asm-arm/arch-pxa/pxa-regs.h 2002-08-29 14:59:56.000000000 +0900
++++ linux/include/asm-arm/arch-pxa/pxa-regs.h 2004-06-10 21:09:11.000000000 +0900
+@@ -11,6 +11,7 @@
+ *
+ * Change Log
+ * 08-19-2002 Sharp add I2S defines
++ * 26-Feb-2004 Lineo Solutions, Inc. supply a definition for FM bit of ICR
+ *
+ */
+ #ifndef _PXA_REGS_H_
+@@ -443,6 +444,7 @@
+ #define ICR_ALDIE 0x1000 /* enable arbitration interrupt */
+ #define ICR_SADIE 0x2000 /* slave address detected int enable */
+ #define ICR_UR 0x4000 /* unit reset */
++#define ICR_FM 0x8000 /* fast mode */
+
+ /* ----- Status register bits ----------------------------------------- */
+
+diff -Nur linux_c860_org/include/asm-arm/arch-pxa/serial_pxa200.h linux/include/asm-arm/arch-pxa/serial_pxa200.h
+--- linux_c860_org/include/asm-arm/arch-pxa/serial_pxa200.h 2003-01-15 15:51:16.000000000 +0900
++++ linux/include/asm-arm/arch-pxa/serial_pxa200.h 2004-06-10 21:13:15.000000000 +0900
+@@ -3,6 +3,7 @@
+ *
+ * Change Log
+ * 12-Dec-2002 Sharp Corporation for Poodle and Corgi
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+ #ifndef __ASM_ARCH_SERIAL_H
+@@ -30,7 +31,10 @@
+ #define CONFIG_UART2_DFLT_CONSOLE
+ #elif defined(CONFIG_ARCH_PXA_CORGI)
+ #define CONFIG_UART2_DFLT_CONSOLE
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++#define CONFIG_UART2_DFLT_CONSOLE
+ #endif
++
+ #if defined(CONFIG_UART0_DFLT_CONSOLE)
+
+ #define STD_SERIAL_PORT_DEFNS \
+diff -Nur linux_c860_org/include/asm-arm/arch-pxa/sharpsl_battery.h linux/include/asm-arm/arch-pxa/sharpsl_battery.h
+--- linux_c860_org/include/asm-arm/arch-pxa/sharpsl_battery.h 2002-08-26 16:00:32.000000000 +0900
++++ linux/include/asm-arm/arch-pxa/sharpsl_battery.h 2004-06-10 21:17:53.000000000 +0900
+@@ -10,6 +10,7 @@
+ *
+ * ChangeLog:
+ * 21-Aug-2002 Lineo Japan, Inc. for 2.4.18
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ *
+ */
+
+@@ -81,6 +82,11 @@
+ #define BATT_AD 4u /* channel of BATTery */
+ #define BATT_THM 2u /* channel of BATTery */
+ #define JK_VAD 6u /* channel of BATTery */
++#elif defined(CONFIG_ARCH_PXA_TOSA)
++#define BATT_VC 0x4 /* channel of BAT V CAUTION */
++#define BATT_TH 0x5 /* channel of BAT TH */
++#define BATT_V 0x6 /* channel of BAT V */
++#define BU_V 0x7 /* channel of BU V */
+ #endif
+
+ #define Temper_V47 0x449 /* 0.670v (47"C) */
+diff -Nur linux_c860_org/include/asm-arm/arch-pxa/sharpsl_wakeup.h linux/include/asm-arm/arch-pxa/sharpsl_wakeup.h
+--- linux_c860_org/include/asm-arm/arch-pxa/sharpsl_wakeup.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/include/asm-arm/arch-pxa/sharpsl_wakeup.h 2004-06-10 21:09:11.000000000 +0900
+@@ -0,0 +1,26 @@
++/*
++ * include/asm-arm/arch-pxa/sharpsl_wakeup.h
++ * Copyright (C) 2003 SHARP
++ */
++
++#ifndef __SHARPSL_WAKEUP_H__
++#define __SHARPSL_WAKEUP_H__
++
++
++#define IDPM_WAKEUP_AC (0x1<<1)
++#define IDPM_WAKEUP_SYNC (0x1<<3)
++#define IDPM_WAKEUP_REMOCON (0x1<<4)
++#define IDPM_WAKEUP_REC (0x1<<10)
++#define IDPM_WAKEUP_JACKET (0x1<<16)
++#define IDPM_WAKEUP_USBD (0x1<<17)
++#define IDPM_WAKEUP_CALENDAR (0x1<<25)
++#define IDPM_WAKEUP_ADDRESSBOOK (0x1<<26)
++#define IDPM_WAKEUP_MAIL (0x1<<27)
++#define IDPM_WAKEUP_MENU (0x1<<28)
++#define IDPM_WAKEUP_HOME (0x1<<29)
++#define IDPM_WAKEUP_RTC (0x1<<31)
++
++extern unsigned long logical_wakeup_src_mask;
++
++
++#endif // end __SHARPSL_WAKEUP_H__
+diff -Nur linux_c860_org/include/asm-arm/arch-pxa/system.h linux/include/asm-arm/arch-pxa/system.h
+--- linux_c860_org/include/asm-arm/arch-pxa/system.h 2003-06-18 16:12:28.000000000 +0900
++++ linux/include/asm-arm/arch-pxa/system.h 2004-06-10 21:17:56.000000000 +0900
+@@ -12,6 +12,7 @@
+ * Change Log
+ * 17-Sep-2002 Lineo Japan, Inc.
+ * 13-Mar-2003 Sharp for Shepherd
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+ #include <linux/config.h>
+@@ -32,11 +33,13 @@
+ static inline void arch_reset(char mode)
+ {
+ #ifdef CONFIG_ARCH_SHARP_SL
+-#ifdef CONFIG_ARCH_PXA_SHEPHERD
++#ifdef CONFIG_PM
++#if defined(CONFIG_ARCH_PXA_SHEPHERD) || defined(CONFIG_ARCH_PXA_TOSA)
+ sharpsl_restart_nonstop();
+ #else
+ sharpsl_restart();
+ #endif
++#endif
+ #else
+ if (mode == 's') {
+ /* Jump into ROM at address 0 */
+diff -Nur linux_c860_org/include/asm-arm/arch-pxa/time.h linux/include/asm-arm/arch-pxa/time.h
+--- linux_c860_org/include/asm-arm/arch-pxa/time.h 2003-01-14 12:07:55.000000000 +0900
++++ linux/include/asm-arm/arch-pxa/time.h 2004-06-10 21:18:00.000000000 +0900
+@@ -12,6 +12,7 @@
+ * ChangLog:
+ * 12-Dec-2002 Lineo Japan, Inc.
+ * 12-Dec-2002 Sharp Corporation for Poodle and Corgi
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+ #ifdef CONFIG_SABINAL_DISCOVERY
+@@ -19,14 +20,18 @@
+ //#define RTC_DEF_TRIM 0
+ #define RTC_DEF_TRIM 0x11b3
+ #endif
++
+ #ifdef CONFIG_ARCH_PXA_POODLE
+ #define RTC_DEF_DIVIDER 32768 - 1
+ #define RTC_DEF_TRIM 0
+-#endif
+-#ifdef CONFIG_ARCH_PXA_CORGI
++#elif CONFIG_ARCH_PXA_CORGI
++#define RTC_DEF_DIVIDER 32768 - 1
++#define RTC_DEF_TRIM 0
++#elif CONFIG_ARCH_PXA_TOSA
+ #define RTC_DEF_DIVIDER 32768 - 1
+ #define RTC_DEF_TRIM 0
+ #endif
++
+ #ifdef CONFIG_ARCH_SHARP_SL
+ #define SHARP_SL_DEF_YEAR 2003
+ #endif
+diff -Nur linux_c860_org/include/asm-arm/arch-pxa/tosa.h linux/include/asm-arm/arch-pxa/tosa.h
+--- linux_c860_org/include/asm-arm/arch-pxa/tosa.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/include/asm-arm/arch-pxa/tosa.h 2004-06-10 21:09:11.000000000 +0900
+@@ -0,0 +1,433 @@
++/*
++ * include/asm-arm/arch-pxa/tosa.h
++ * Copyright (C) 2003 Lineo uSolutions, Inc.
++ *
++ * ChangeLog:
++ * 23-Oct-2003 SHARP Corporation
++ */
++
++#ifndef _ASM_ARCH_TOSA_H_
++#define _ASM_ARCH_TOSA_H_ 1
++
++/* TOSA Chip selects */
++#define TOSA_LCDC_PHYS PXA_CS4_PHYS
++/* Internel Scoop */
++#define TOSA_CF_PHYS (PXA_CS2_PHYS + 0x00800000)
++/* Jacket Scoop */
++#define TOSA_SCOOP_PHYS (PXA_CS5_PHYS + 0x00800000)
++
++/*
++ * TC6393 internal I/O mappings
++ *
++ * We have the following mapping:
++ * phys virt
++ * 10000000 f1000000
++ */
++#define TC6393_SYS_BASE 0xf1000000
++#define TC6393_NAND_BASE (TC6393_SYS_BASE + 0x000100)
++#define TC6393_SD_BASE (TC6393_SYS_BASE + 0x000200)
++#define TC6393_USB_BASE (TC6393_SYS_BASE + 0x000300)
++#define TC6393_SERIAL_BASE (TC6393_SYS_BASE + 0x000400)
++#define TC6393_GC_BASE (TC6393_SYS_BASE + 0x000500)
++#define TC6393_RAM0_BASE (TC6393_SYS_BASE + 0x010000)
++#define TC6393_RAM0_SIZE (32*1024)
++#define TC6393_RAM1_BASE (TC6393_SYS_BASE + 0x100000)
++#define TC6393_RAM1_SIZE (64 * 1024 * 16)
++
++/*
++ * Internal Local Memory use purpose
++ * RAM0 is used for USB
++ * RAM1 is used for GC
++ */
++/* Internal register mapping */
++#define TC6393_GC_INTERNAL_REG_BASE 0x000600 /* Length 0x200 */
++#define TC6393_USB_OHCI_OP_REG_BASE 0x000A00 /* Length 0x100 */
++#define TC6393_NAND_FLASH_CTL_REG_BASE 0x001000 /* Length 0x8 */
++
++
++/* System Configuration register */
++#define TC6393_SYS_REG(ofst) (*(volatile unsigned short*)(TC6393_SYS_BASE+(ofst)))
++#define TC6393_SYS_RIDR 0x008
++#define TC6393_SYS_ISR 0x050
++#define TC6393_SYS_IMR 0x052
++#define TC6393_SYS_IRR 0x054
++#define TC6393_SYS_GPER 0x060
++#define TC6393_SYS_GPISR1 0x064
++#define TC6393_SYS_GPISR2 0x066
++#define TC6393_SYS_GPIIMR1 0x068
++#define TC6393_SYS_GPIIMR2 0x06A
++#define TC6393_SYS_GPIEDER1 0x06C
++#define TC6393_SYS_GPIEDER2 0x06E
++#define TC6393_SYS_GPILIR1 0x070
++#define TC6393_SYS_GPILIR2 0x072
++#define TC6393_SYS_GPODSR1 0x078
++#define TC6393_SYS_GPODSR2 0x07A
++#define TC6393_SYS_GPOOECR1 0x07C
++#define TC6393_SYS_GPOOECR2 0x07E
++#define TC6393_SYS_GPIARCR1 0x080
++#define TC6393_SYS_GPIARCR2 0x082
++#define TC6393_SYS_GPIARLCR1 0x084
++#define TC6393_SYS_GPIARLCR2 0x086
++#define TC6393_SYS_GPIBCR1 0x088
++#define TC6393_SYS_GPIBCR2 0x08A
++#define TC6393_SYS_GPaIARCR 0x08C
++#define TC6393_SYS_GPaIARLCR 0x090
++#define TC6393_SYS_GPaIBCR 0x094
++#define TC6393_SYS_CCR 0x098 /* Clock Control Register */
++#define TC6393_SYS_PLL2CR 0x09A
++#define TC6393_SYS_PLL1CR1 0x09C
++#define TC6393_SYS_PLL1CR2 0x09E
++#define TC6393_SYS_DCR 0x0A0
++#define TC6393_SYS_FER 0x0E0 /* Function Enable Register */
++#define TC6393_SYS_MCR 0x0E4
++#define TC6393_SYS_ConfigCR 0x0FC
++
++/* NAND FLASH controller configuration register */
++#define TC6393_NAND_REG(ofst) (*(volatile unsigned short*)(TC6393_NAND_BASE+(ofst)))
++
++/* SD Card Configuration register */
++#define TC6393_SD_REG(ofst) (*(volatile unsigned short*)(TC6393_SD_BASE+(ofst)))
++
++/* USB HOST Configuration register */
++#define TC6393_USB_REG(ofst) (*(volatile unsigned short*)(TC6393_USB_BASE+(ofst)))
++#define TC6393_USB_SPRID 0x08
++#define TC6393_USB_SPBA1 0x10
++#define TC6393_USB_SPBA2 0x12
++#define TC6393_USB_ILME 0x40
++#define TC6393_USB_SVPMCS 0x4C
++#define TC6393_USB_PM_PMES (1 << 15)
++#define TC6393_USB_PM_PMEE (1 << 8)
++#define TC6393_USB_PM_USPW2 (1 << 3)
++#define TC6393_USB_PM_USPW1 (1 << 2)
++#define TC6393_USB_PM_CKRNEN (1 << 1)
++#define TC6393_USB_PM_GCKEN (1 << 0)
++#define TC6393_USB_INTC 0x50
++#define TC6393_USB_SP1INTC1 0x54
++#define TC6393_USB_SP1INTC2 0x56
++#define TC6393_USB_SP1MBA1 0x58
++#define TC6393_USB_SP1MBA2 0x5A
++#define TC6393_USB_SP2INTC1 0x5C
++#define TC6393_USB_SP2INTC2 0x5E
++#define TC6393_USB_SP2MBA1 0x60
++#define TC6393_USB_SP2MBA2 0x62
++#define TC6393_USB_SPPCNF 0xFC
++
++#define IS_TC6393_RAM0(p) (TC6393_RAM0_BASE <= (unsigned int)p \
++ && (unsigned int)p <= TC6393_RAM0_BASE + TC6393_RAM0_SIZE)
++#define TC6393_RAM0_VAR_TO_OFFSET(x) ((unsigned int)x - TC6393_RAM0_BASE)
++#define TC6393_RAM0_OFFSET_TO_VAR(x) ((unsigned int)x + TC6393_RAM0_BASE)
++
++/* Serial I/O controller Configuration register */
++#define TC6393_SERIAL_REG(ofst) (*(volatile unsigned short*)(TC6393_SERIAL_BASE+(ofst)))
++
++/* Graphic controller Configuration register */
++#define TC6393_GC_REG(ofst) (*(volatile unsigned short*)(TC6393_GC_BASE+(ofst)))
++
++/* GPIO bit */
++#define TC6393_GPIO19 ( 1 << 19 )
++#define TC6393_GPIO18 ( 1 << 18 )
++#define TC6393_GPIO17 ( 1 << 17 )
++#define TC6393_GPIO16 ( 1 << 16 )
++#define TC6393_GPIO15 ( 1 << 15 )
++#define TC6393_GPIO14 ( 1 << 14 )
++#define TC6393_GPIO13 ( 1 << 13 )
++#define TC6393_GPIO12 ( 1 << 12 )
++#define TC6393_GPIO11 ( 1 << 11 )
++#define TC6393_GPIO10 ( 1 << 10 )
++#define TC6393_GPIO9 ( 1 << 9 )
++#define TC6393_GPIO8 ( 1 << 8 )
++#define TC6393_GPIO7 ( 1 << 7 )
++#define TC6393_GPIO6 ( 1 << 6 )
++#define TC6393_GPIO5 ( 1 << 5 )
++#define TC6393_GPIO4 ( 1 << 4 )
++#define TC6393_GPIO3 ( 1 << 3 )
++#define TC6393_GPIO2 ( 1 << 2 )
++#define TC6393_GPIO1 ( 1 << 1 )
++#define TC6393_GPIO0 ( 1 << 0 )
++
++/*
++ * TC6393 GPIOs
++ */
++#define TC6393_TG_ON TC6393_GPIO0
++#define TC6393_L_MUTE TC6393_GPIO1
++#define TC6393_BL_C20MA TC6393_GPIO3
++#define TC6393_CARD_VCC_ON TC6393_GPIO4
++#define TC6393_CHARGE_OFF TC6393_GPIO6
++#define TC6393_CHARGE_OFF_JC TC6393_GPIO7
++#define TC6393_BAT0_V_ON TC6393_GPIO9
++#define TC6393_BAT1_V_ON TC6393_GPIO10
++#define TC6393_BU_CHRG_ON TC6393_GPIO11
++#define TC6393_BAT_SW_ON TC6393_GPIO12
++#define TC6393_BAT0_TH_ON TC6393_GPIO14
++#define TC6393_BAT1_TH_ON TC6393_GPIO15
++
++#define TC6393_GPO_OE ( TC6393_TG_ON | TC6393_L_MUTE | TC6393_BL_C20MA | \
++ TC6393_CARD_VCC_ON | TC6393_CHARGE_OFF | \
++ TC6393_CHARGE_OFF_JC | TC6393_BAT0_V_ON | \
++ TC6393_BAT1_V_ON | TC6393_BU_CHRG_ON | \
++ TC6393_BAT_SW_ON | TC6393_BAT0_TH_ON | \
++ TC6393_BAT1_TH_ON )
++
++/*
++ * SCOOP2 internal I/O mappings
++ *
++ * We have the following mapping:
++ * phys virt
++ * 08800000 f2000000
++ */
++#define CF_BUF_CTRL_BASE 0xF2000000
++#define SCP_REG(adr) (*(volatile unsigned short*)(CF_BUF_CTRL_BASE+(adr)))
++
++#define SCP_MCR 0x00
++#define SCP_CDR 0x04
++#define SCP_CSR 0x08
++#define SCP_CPR 0x0C
++#define SCP_CCR 0x10
++#define SCP_IRR 0x14
++#define SCP_IRM 0x14
++#define SCP_IMR 0x18
++#define SCP_ISR 0x1C
++#define SCP_GPCR 0x20
++#define SCP_GPWR 0x24
++#define SCP_GPRR 0x28
++#define SCP_REG_MCR SCP_REG(SCP_MCR)
++#define SCP_REG_CDR SCP_REG(SCP_CDR)
++#define SCP_REG_CSR SCP_REG(SCP_CSR)
++#define SCP_REG_CPR SCP_REG(SCP_CPR)
++#define SCP_REG_CCR SCP_REG(SCP_CCR)
++#define SCP_REG_IRR SCP_REG(SCP_IRR)
++#define SCP_REG_IRM SCP_REG(SCP_IRM)
++#define SCP_REG_IMR SCP_REG(SCP_IMR)
++#define SCP_REG_ISR SCP_REG(SCP_ISR)
++#define SCP_REG_GPCR SCP_REG(SCP_GPCR)
++#define SCP_REG_GPWR SCP_REG(SCP_GPWR)
++#define SCP_REG_GPRR SCP_REG(SCP_GPRR)
++
++#define SCP_GPCR_PA22 ( 1 << 12 )
++#define SCP_GPCR_PA21 ( 1 << 11 )
++#define SCP_GPCR_PA20 ( 1 << 10 )
++#define SCP_GPCR_PA19 ( 1 << 9 )
++#define SCP_GPCR_PA18 ( 1 << 8 )
++#define SCP_GPCR_PA17 ( 1 << 7 )
++#define SCP_GPCR_PA16 ( 1 << 6 )
++#define SCP_GPCR_PA15 ( 1 << 5 )
++#define SCP_GPCR_PA14 ( 1 << 4 )
++#define SCP_GPCR_PA13 ( 1 << 3 )
++#define SCP_GPCR_PA12 ( 1 << 2 )
++#define SCP_GPCR_PA11 ( 1 << 1 )
++
++/*
++ * SCOOP2 internal GPIOs
++ */
++#define SCP_PXA_VCORE1 SCP_GPCR_PA11
++#define SCP_TC6393_REST_IN SCP_GPCR_PA12
++#define SCP_IR_POWERDWN SCP_GPCR_PA13
++#define SCP_SD_WP SCP_GPCR_PA14
++#define SCP_PWR_ON SCP_GPCR_PA15
++#define SCP_AUD_PWR_ON SCP_GPCR_PA16
++#define SCP_BT_RESET SCP_GPCR_PA17
++#define SCP_BT_PWR_EN SCP_GPCR_PA18
++#define SCP_AC_IN_OL SCP_GPCR_PA19
++
++/* GPIO Direction 1 : outpu mode / 0:input mode */
++#define SCP_IO_DIR ( SCP_PXA_VCORE1 | SCP_TC6393_REST_IN | \
++ SCP_IR_POWERDWN | SCP_PWR_ON | SCP_AUD_PWR_ON |\
++ SCP_BT_RESET | SCP_BT_PWR_EN )
++/* GPIO out put level when init 1: Hi */
++#define SCP_IO_OUT ( SCP_TC6393_REST_IN )
++//#define GPIO_CO 16
++
++/*
++ * SCOOP2 for jacket I/O mappings
++ *
++ * We have the following mapping:
++ * phys virt
++ * 14800000 f2200000
++ */
++
++#define CF2_BUF_CTRL_BASE 0xF2200040
++#define SCP_JC_REG(adr) (*(volatile unsigned short*)(CF2_BUF_CTRL_BASE+(adr)))
++
++#define SCP_JC_REG_MCR SCP_JC_REG(SCP_MCR)
++#define SCP_JC_REG_CDR SCP_JC_REG(SCP_CDR)
++#define SCP_JC_REG_CSR SCP_JC_REG(SCP_CSR)
++#define SCP_JC_REG_CPR SCP_JC_REG(SCP_CPR)
++#define SCP_JC_REG_CCR SCP_JC_REG(SCP_CCR)
++#define SCP_JC_REG_IRR SCP_JC_REG(SCP_IRR)
++#define SCP_JC_REG_IRM SCP_JC_REG(SCP_IRM)
++#define SCP_JC_REG_IMR SCP_JC_REG(SCP_IMR)
++#define SCP_JC_REG_ISR SCP_JC_REG(SCP_ISR)
++#define SCP_JC_REG_GPCR SCP_JC_REG(SCP_GPCR)
++#define SCP_JC_REG_GPWR SCP_JC_REG(SCP_GPWR)
++#define SCP_JC_REG_GPRR SCP_JC_REG(SCP_GPRR)
++
++/*
++ * SCOOP2 jacket GPIOs
++ */
++#define SCP_JC_BT_LED SCP_GPCR_PA11
++#define SCP_JC_NOTE_LED SCP_GPCR_PA12
++#define SCP_JC_CHRG_ERR_LED SCP_GPCR_PA13
++#define SCP_JC_USB_PULLUP SCP_GPCR_PA14
++#define SCP_JC_TC6393_SUSPEND SCP_GPCR_PA15
++#define SCP_JC_TC3693_L3V_ON SCP_GPCR_PA16
++#define SCP_JC_WLAN_DETECT SCP_GPCR_PA17
++#define SCP_JC_WLAN_LED SCP_GPCR_PA18
++#define SCP_JC_CARD_LIMIT_SEL SCP_GPCR_PA19
++
++/* GPIO Direction 1 : outpu mode / 0:input mode */
++#define SCP_JC_IO_DIR ( SCP_JC_BT_LED | SCP_JC_NOTE_LED | \
++ SCP_JC_CHRG_ERR_LED | SCP_JC_USB_PULLUP | \
++ SCP_JC_TC6393_SUSPEND | SCP_JC_TC3693_L3V_ON | \
++ SCP_JC_WLAN_LED | SCP_JC_CARD_LIMIT_SEL )
++/* GPIO out put level when init 1: Hi */
++//#define SCP_JC_IO_OUT ( SCP_JC_TC6393_SUSPEND | SCP_JC_TC3693_L3V_ON )
++#define SCP_JC_IO_OUT ( 0 )
++
++/*
++ * NSSP
++ */
++#define NSSCR0 __REG(0x41400000)
++#define NSSCR1 __REG(0x41400008)
++#define NSSSR __REG(0x4140000C)
++#define NSSITR __REG(0x41400010)
++#define NSSDRTO __REG(0x41400028)
++
++/*
++ * Timing Generator
++ */
++#define TG_PNLCTL 0x00
++#define TG_TPOSCTL 0x01
++#define TG_DUTYCTL 0x02
++#define TG_GPOSR 0x03
++#define TG_GPODR1 0x04
++#define TG_GPODR2 0x05
++#define TG_PINICTL 0x06
++#define TG_HPOSCTL 0x07
++
++#if 0
++/*
++ * Flash Memory mappings
++ *
++ * We have the following mapping:
++ * phys virt
++ * boot ROM 00000000 ef000000
++ * NAND Flash 0C000000 f2100000
++ */
++#define NAND_FLASH_REG_BASE 0xf2100000
++#define CPLD_REG(ofst) (*(volatile unsigned char*)(NAND_FLASH_REG_BASE+(ofst)))
++
++/* register offset */
++#define ECCLPLB 0x00 /* line parity 7 - 0 bit */
++#define ECCLPUB 0x04 /* line parity 15 - 8 bit */
++#define ECCCP 0x08 /* column parity 5 - 0 bit */
++#define ECCCNTR 0x0C /* ECC byte counter */
++#define ECCCLRR 0x10 /* cleare ECC */
++#define FLASHIO 0x14 /* Flash I/O */
++#define FLASHCTL 0x18 /* Flash Control */
++
++/* Flash control bit */
++#define FLRYBY (1 << 5)
++#define FLCE1 (1 << 4)
++#define FLWP (1 << 3)
++#define FLALE (1 << 2)
++#define FLCLE (1 << 1)
++#define FLCE0 (1 << 0)
++#endif
++
++
++/*
++ * LED
++ */
++#define SCP_LED_BLUE SCP_GPCR_PA11
++#define SCP_LED_GREEN SCP_GPCR_PA12
++#define SCP_LED_ORANGE SCP_GPCR_PA13
++#define SCP_LED_WLAN SCP_GPCR_PA18
++
++
++/*
++ * PXA GPIOs
++ */
++#define GPIO_POWERON (0)
++#define GPIO_RESET (1)
++#define GPIO_AC_IN (2)
++#define GPIO_RECORD_BTN (3)
++#define GPIO_SYNC (4) /* Cradle SYNC Button */
++#define GPIO_USB_IN (5)
++//#define GPIO_nSD_CLK (6)
++#define GPIO_JACKET_DETECT (7)
++#define GPIO_nSD_DETECT (9)
++#define GPIO_nSD_INT (10)
++#define GPIO_TC6393_CLK (11)
++#define GPIO_BAT1_CRG (12)
++#define GPIO_CF_CD (13)
++#define GPIO_BAT0_CRG (14)
++#define GPIO_TC6393_INT (15)
++#define GPIO_BAT0_LOW (17)
++#define GPIO_TC6393_RDY (18)
++#define GPIO_ON_RESET (19)
++#define GPIO_EAR_IN (20)
++#define GPIO_CF_IRQ (21) /* CF slot0 Ready */
++#define GPIO_ON_KEY (22)
++#define GPIO_VGA_LINE (27)
++#define GPIO_TP_INT (32) /* Touch Panel pen down interrupt */
++#define GPIO_JC_CF_IRQ (36) /* CF slot1 Ready */
++#define GPIO_BAT_LOCKED (38) /* Battery locked */
++#define GPIO_TG_SPI_SCLK (81)
++#define GPIO_TG_SPI_CS (82)
++#define GPIO_TG_SPI_MOSI (83)
++#define GPIO_BAT1_LOW (84)
++
++#define GPIO_HP_IN GPIO_EAR_IN
++
++#define GPIO_MAIN_BAT_LOW GPIO_BAT0_LOW
++
++#define KEY_STROBE_NUM (11)
++#define KEY_SENSE_NUM (7)
++#define GPIO_HIGH_STROBE_BIT (0xfc000000)
++#define GPIO_LOW_STROBE_BIT (0x0000001f)
++#define GPIO_ALL_SENSE_BIT (0x00000fe0)
++#define GPIO_ALL_SENSE_RSHIFT (5)
++#define GPIO_STROBE_BIT(a) GPIO_bit(58+(a))
++#define GPIO_SENSE_BIT(a) GPIO_bit(69+(a))
++#define GAFR_HIGH_STROBE_BIT (0xfff00000)
++#define GAFR_LOW_STROBE_BIT (0x000003ff)
++#define GAFR_ALL_SENSE_BIT (0x00fffc00)
++#define GPIO_KEY_SENSE(a) (69+(a))
++
++
++/*
++ * Interrupts
++ */
++#define IRQ_GPIO_WAKEUP IRQ_GPIO(GPIO_WAKEUP)
++#define IRQ_GPIO_AC_IN IRQ_GPIO(GPIO_AC_IN)
++#define IRQ_GPIO_RECORD_BTN IRQ_GPIO(GPIO_RECORD_BTN)
++#define IRQ_GPIO_SYNC IRQ_GPIO(GPIO_SYNC)
++#define IRQ_GPIO_USB_IN IRQ_GPIO(GPIO_USB_IN)
++#define IRQ_GPIO_JACKET_DETECT IRQ_GPIO(GPIO_JACKET_DETECT)
++#define IRQ_GPIO_nSD_INT IRQ_GPIO(GPIO_nSD_INT)
++#define IRQ_GPIO_nSD_DETECT IRQ_GPIO(GPIO_nSD_DETECT)
++#define IRQ_GPIO_BAT1_CRG IRQ_GPIO(GPIO_BAT1_CRG)
++#define IRQ_GPIO_CF_CD IRQ_GPIO(GPIO_CF_CD)
++#define IRQ_GPIO_BAT0_CRG IRQ_GPIO(GPIO_BAT0_CRG)
++#define IRQ_GPIO_TC6393_INT IRQ_GPIO(GPIO_TC6393_INT)
++#define IRQ_GPIO_BAT0_LOW IRQ_GPIO(GPIO_BAT0_LOW)
++#define IRQ_GPIO_EAR_IN IRQ_GPIO(GPIO_EAR_IN)
++#define IRQ_GPIO_CF_IRQ IRQ_GPIO(GPIO_CF_IRQ)
++#define IRQ_GPIO_ON_KEY IRQ_GPIO(GPIO_ON_KEY)
++#define IRQ_GPIO_VGA_LINE IRQ_GPIO(GPIO_VGA_LINE)
++#define IRQ_GPIO_TP_INT IRQ_GPIO(GPIO_TP_INT)
++#define IRQ_GPIO_JC_CF_IRQ IRQ_GPIO(GPIO_JC_CF_IRQ)
++#define IRQ_GPIO_BAT_LOCKED IRQ_GPIO(GPIO_BAT_LOCKED)
++#define IRQ_GPIO_BAT1_LOW IRQ_GPIO(GPIO_BAT1_LOW)
++#define IRQ_GPIO_KEY_SENSE(a) IRQ_GPIO(69+(a))
++
++#define IRQ_GPIO_MAIN_BAT_LOW IRQ_GPIO(GPIO_MAIN_BAT_LOW)
++
++// CS
++#define CS_MAX1111 1
++#define CS_ADS7846 2
++#define CS_LZ9JG18 3
++
++#define LOGICAL_WAKEUP_SRC
++
++#endif /* _ASM_ARCH_TOSA_H_ */
+diff -Nur linux_c860_org/include/asm-arm/arch-pxa/tosa_ac97_codec.h linux/include/asm-arm/arch-pxa/tosa_ac97_codec.h
+--- linux_c860_org/include/asm-arm/arch-pxa/tosa_ac97_codec.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/include/asm-arm/arch-pxa/tosa_ac97_codec.h 2004-06-10 21:09:11.000000000 +0900
+@@ -0,0 +1,32 @@
++/*
++ * linux/include/asm-arm/arch-pxa/tosa_ac97_codec.h
++ *
++ * (C) Copyright 2004 Lineo Solutions, Inc.
++ *
++ * May be copied or modified under the terms of the GNU General Public
++ * License. See linux/COPYING for more information.
++ */
++#ifndef _TOSA_AC97_CODEC_H_
++#define _TOSA_AC97_CODEC_H_
++
++//#define USE_AC97_INTERRUPT
++
++extern int pxa_ac97_get(struct ac97_codec **, unsigned char *);
++extern void pxa_ac97_put(unsigned char *);
++extern unsigned int ac97_set_dac_rate(struct ac97_codec *, unsigned int);
++extern unsigned int ac97_set_adc_rate(struct ac97_codec *, unsigned int);
++
++extern struct ac97_codec *codec;
++#define ac97_read(r) codec->codec_read(codec, r)
++#define ac97_write(r, v) codec->codec_write(codec, r, v);
++#define ac97_bit_clear(r, v) codec->codec_bit_clear(codec, r, v)
++#define ac97_bit_set(r, v) codec->codec_bit_set(codec, r, v)
++
++/* Function1 */
++#define AC97_JIEN (1 << 12)
++#define AC97_FRC (1 << 11)
++/* Function2 */
++#define AC97_AMUTE (1 << 15) //DAC Auto-Mute Enable(read-only)
++#define AC97_AMEN (1 << 7) //DAC Auto-Mute Enable
++
++#endif /* _TOSA_AC97_CODEC_H_ */
+diff -Nur linux_c860_org/include/asm-arm/arch-pxa/tosa_wm9712.h linux/include/asm-arm/arch-pxa/tosa_wm9712.h
+--- linux_c860_org/include/asm-arm/arch-pxa/tosa_wm9712.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/include/asm-arm/arch-pxa/tosa_wm9712.h 2004-06-10 21:13:20.000000000 +0900
+@@ -0,0 +1,204 @@
++/*
++ * linux/drivers/sound/tosa_wm9712.h
++ *
++ * (C) Copyright 2004 Lineo Solutions, Inc.
++ *
++ * Sound Driver for WM9712 codec device header file
++ *
++ * Base on:
++ * linux/drivers/sound/poodle_wm8731.h
++ *
++ * Copyright (C) 2002 SHARP
++ *
++ *
++ * 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.
++ *
++ * Change Log
++ *
++ */
++#ifndef _WM9712_H_
++#define _WM9712_H_
++
++#define TRUE 1
++#define FALSE 0
++
++// Line input volume ctrl registers
++#define LINEIN_MUTE_H (1 << 15) //Headphone
++#define LINEIN_MUTE_S (1 << 14) //Speaker
++#define LINEIN_MUTE_P (1 << 13) //Phone
++#define LINEIN_MUTE_ALL ( LINEIN_MUTE_H | \
++ LINEIN_MUTE_S | \
++ LINEIN_MUTE_P )
++
++// Headphone volume ctrl
++#define HP_MUTE (1 << 15)
++#define HP_ZC_ENABLE (1 << 7)
++
++// Speaker volume ctrl
++#define SP_MUTE (1 << 15)
++#define SP_SRC (1 << 8)
++#define SP_ZC_ENABLE (1 << 7)
++#define SP_INV (1 << 6)
++
++// Initial value
++#define INIT_HP_VOL (0) // Initial Volume 0dB
++#define INIT_SP_VOL (0) // Initial Volume 0dB
++#define INIT_LINE_VOL (8) // Initial Volume 0dB
++#define INIT_DAC_VOL (8) // Initial Volume 0dB
++#define MAX_HP_VOL (63)
++#define MIN_HP_VOL (0)
++#define MAX_SP_VOL (63)
++#define MIN_SP_VOL (0)
++#define MAX_LINE_VOL (31)
++#define MIN_LINE_VOL (0)
++#define MAX_DAC_VOL (31)
++#define MIN_DAC_VOL (0)
++
++//DAC Volume control
++#define DAC_MUTE_H (1 << 15) //Headphone
++#define DAC_MUTE_S (1 << 14) //Speaker
++#define DAC_MUTE_P (1 << 13) //Phone
++#define DAC_MUTE_ALL ( DAC_MUTE_H | \
++ DAC_MUTE_S | \
++ DAC_MUTE_P )
++
++// Analog Audio path ctrl register (0000100)
++#define SIDETONE_ENABLE (1<<5)
++#define SIDETONE_DISABLE ( 0 )
++#define ST_ATTN_6dB ( (0) << 6 )
++#define ST_ATTN_9dB ( (1) << 6 )
++#define ST_ATTN_12dB ( (2) << 6 )
++#define ST_ATTN_15dB ( (3) << 6 )
++#define DAC_OFF ( 0 )
++#define DAC_SELECT ( 1 << 4 )
++#define BYPASS_ENABLE ( 1 << 3 )
++#define BYPASS_DISABLE ( 0 )
++#define INPUT_MIC ( 1 << 2 )
++#define INPUT_LINE ( 0 << 2 )
++#define MIC_MUTE ( (1 << 13) | (1 << 14) )
++#define REC_SELECT_MASK ( (1 << 10) | (1 << 9) | (1 << 8) | \
++ (1 << 2) | (1 << 1) | (1 << 0) )
++#define REC_SELECT_LINEIN ( 4 )
++#define MIC_BOOST ( 1 << 7 )
++
++// Digital Audio path ctrl register (0000101)
++#define DPC_DAC_MUTE_ON ( 1U << 3 )
++#define DPC_DAC_MUTE_OFF ( 0U )
++#define DPC_DAC_MUTE_MASK (~ ( 1U << 3 ) )
++#define DEEMPHASIS_MODE(x) ( (( x ) & 3U ) << 1 )
++#define DPC_DEEMPHASIS_MASK (~ ( 3U << 1 ) )
++#define DPC_ADC_HPF_ENABLE ( 1U )
++#define DPC_ADC_HPF_DISABLE ( 0U )
++#define DPC_INIT ( 0U )
++
++// Power Consumption
++#define NUM_OF_WM9712_DEV ( 4 )
++#define WM9712_DEV_TS ( 0 )
++#define WM9712_DEV_AUDIO ( 1 )
++#define WM9712_DEV_AUDIOIN ( 2 )
++#define WM9712_DEV_TMP ( 3 )
++
++#define WM9712_PWR_OFF ( 0 )
++#define WM9712_PWR_REC ( 1 )
++#define WM9712_PWR_PLAY ( 2 )
++#define WM9712_PWR_REC_HP ( 3 )
++#define WM9712_PWR_PLAY_HP ( 4 )
++#define WM9712_PWR_REC_MIC ( 5 )
++#define WM9712_PWR_PLAY_MIC ( 6 )
++#define WM9712_PWR_TP_WAIT ( 7 )
++#define WM9712_PWR_TP_CONV ( 8 )
++#define WM9712_PWR_ENMICBIAS ( 9 )
++#define WM9712_PWR_FULL ( 10 )
++
++extern void wm9712_power_mode(int, int);
++#define wm9712_power_mode_ts(m) wm9712_power_mode(WM9712_DEV_TS, m)
++#define wm9712_power_mode_audio(m) wm9712_power_mode(WM9712_DEV_AUDIO, m)
++#define wm9712_power_mode_audioin(m) wm9712_power_mode(WM9712_DEV_AUDIOIN, m)
++#define wm9712_power_mode_tmp(m) wm9712_power_mode(WM9712_DEV_TMP, m)
++#ifdef CONFIG_PM
++extern void lock_FCS_AC97(int, int);
++#define lock_FCS_AC97_ts(m) lock_FCS_AC97(WM9712_DEV_TS, m)
++#define lock_FCS_AC97_audio(m) lock_FCS_AC97(WM9712_DEV_AUDIO, m)
++#endif /* CONFIG_PM */
++
++// Digital Audio Interface Format register (0000111)
++#define SLAVE ( 0 )
++#define MASTER ( 1U << 6 )
++#define I2S_MODE ( 2U )
++#define LEFT_JUSTIFIED ( 1U )
++#define RIGHT_JUSTIFIED ( 0U )
++#define IWL_16BIT ( 0 )
++#define IWL_20BIT ( 1U << 2 )
++#define IWL_24BIT ( 2U << 2 )
++#define IWL_32BIT ( 3U << 2 )
++#define LRSWAP_DISABLE ( 0U )
++#define LRSWAP_ENABLE ( 1U << 5 )
++#define LRP_RIGHT_HIGH ( 0U )
++#define LRP_RIGHT_LOW ( 1U )
++
++// Sampling ctrl register defines (0001000)
++#define SRC_CLKOUT_DIV ( 1 << 7 )
++#define SRC_CLKIN_DIV ( 1 << 6 )
++#define SRC_BOTH_44KHZ ( 8 << 2 )
++#define SRC_BOTH_48KHZ ( 0 << 2 )
++#define SRC_BOTH_8KHZ ( 3 << 2 )
++#define SRC_OSR_256FS ( 0 ) // 12.288MHz/48kHz,11.2896MHz/44.1kHz
++#define SRC_OSR_384FS ( 1 << 1 ) // 18.432MHz/48kHz,16.9344MHz/44.1kHz
++#define SRC_OSR_250FS ( 0 ) // 12MHz/48 kHz
++#define SRC_OSR_272FS ( 1 << 1 ) // 12MHz/44.1kHz
++#define SRC_USB_MODE ( 1 )
++#define SRC_NORMAL_MODE ( 0 )
++#define DIGITAL_IF_ACTIVE ( 1 ) // digital interface active
++#define DIGITAL_IF_INACTIVE ( 0 )
++
++typedef struct {
++ int left;
++ int right;
++} GAIN_SETTINGS;
++
++typedef struct {
++ unsigned short mode;
++ GAIN_SETTINGS output;
++ GAIN_SETTINGS input;
++ int frequency;
++} SOUND_SETTINGS;
++
++// mode
++#define SOUND_PLAY_MODE (0x0001)
++#define SOUND_REC_MODE (0x0002)
++#define SOUND_MODE_MASK (0x0003)
++
++// volume
++enum {
++ VOLUME_IGNORE = -2,
++ VOLUME_MUTE = -1
++};
++#define MAX_VOLUME MAX_HP_VOL
++#define MIN_VOLUME MIN_HP_VOL
++#define MAX_INPUT_VOLUME MAX_LINE_VOL
++#define MIN_INPUT_VOLUME MIN_LINE_VOL
++
++int wm9712_busy(void);
++int wm9712_init(void);
++void wm9712_exit(void);
++int wm9712_open(SOUND_SETTINGS *);
++int wm9712_close(void);
++int wm9712_set_freq(SOUND_SETTINGS *);
++int wm9712_set_output_volume(int, int);
++int wm9712_set_input_gain(int, int);
++int wm9712_set_agc(int);
++void wm9712_suspend(void);
++void wm9712_resume(void);
++void wm9712_update_jack_state(void);
++void wm9712_checkjack_sleep(void);
++void wm9712_checkjack_wakeup(void);
++
++#endif /* _WM9712_H_ */
+diff -Nur linux_c860_org/include/asm-arm/arch-pxa/uncompress.h linux/include/asm-arm/arch-pxa/uncompress.h
+--- linux_c860_org/include/asm-arm/arch-pxa/uncompress.h 2003-01-14 12:07:55.000000000 +0900
++++ linux/include/asm-arm/arch-pxa/uncompress.h 2004-06-10 21:09:11.000000000 +0900
+@@ -11,6 +11,7 @@
+ * Change Log
+ * 31-Jul-2002 Lineo Japan, Inc.
+ * 12-Dec-2002 Sharp Corporation for Poodle and Corgi
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+ #define FFUART ((volatile unsigned long *)0x40100000)
+@@ -35,7 +36,7 @@
+ */
+ static void puts(const char *s)
+ {
+-#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
++#if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI) || defined(CONFIG_ARCH_PXA_TOSA)
+ return;
+ #endif
+
+diff -Nur linux_c860_org/include/asm-arm/dma.h linux/include/asm-arm/dma.h
+--- linux_c860_org/include/asm-arm/dma.h 2002-08-26 14:37:53.000000000 +0900
++++ linux/include/asm-arm/dma.h 2004-06-10 21:13:07.000000000 +0900
+@@ -5,6 +5,7 @@
+
+ #include <linux/config.h>
+ #include <linux/spinlock.h>
++#include <linux/sched.h>
+ #include <asm/system.h>
+ #include <asm/memory.h>
+ #include <asm/scatterlist.h>
+diff -Nur linux_c860_org/include/asm-arm/hardirq.h linux/include/asm-arm/hardirq.h
+--- linux_c860_org/include/asm-arm/hardirq.h 2002-08-26 14:37:53.000000000 +0900
++++ linux/include/asm-arm/hardirq.h 2004-06-10 21:12:36.000000000 +0900
+@@ -34,6 +34,7 @@
+ #define irq_exit(cpu,irq) (local_irq_count(cpu)--)
+
+ #define synchronize_irq() do { } while (0)
++#define release_irqlock(cpu) do { } while (0)
+
+ #else
+ #error SMP not supported
+diff -Nur linux_c860_org/include/asm-arm/pgalloc.h linux/include/asm-arm/pgalloc.h
+--- linux_c860_org/include/asm-arm/pgalloc.h 2003-06-18 16:12:27.000000000 +0900
++++ linux/include/asm-arm/pgalloc.h 2004-06-10 21:12:37.000000000 +0900
+@@ -60,40 +60,48 @@
+ {
+ unsigned long *ret;
+
++ preempt_disable();
+ if ((ret = pgd_quicklist) != NULL) {
+ pgd_quicklist = (unsigned long *)__pgd_next(ret);
+ ret[1] = ret[2];
+ clean_dcache_entry(ret + 1);
+ pgtable_cache_size--;
+ }
++ preempt_enable();
+ return (pgd_t *)ret;
+ }
+
+ static inline void free_pgd_fast(pgd_t *pgd)
+ {
++ preempt_disable();
+ __pgd_next(pgd) = (unsigned long) pgd_quicklist;
+ pgd_quicklist = (unsigned long *) pgd;
+ pgtable_cache_size++;
++ preempt_enable();
+ }
+
+ static inline pte_t *pte_alloc_one_fast(struct mm_struct *mm, unsigned long address)
+ {
+ unsigned long *ret;
+
++ preempt_disable();
+ if((ret = pte_quicklist) != NULL) {
+ pte_quicklist = (unsigned long *)__pte_next(ret);
+ ret[0] = 0;
+ clean_dcache_entry(ret);
+ pgtable_cache_size--;
+ }
++ preempt_enable();
+ return (pte_t *)ret;
+ }
+
+ static inline void free_pte_fast(pte_t *pte)
+ {
++ preempt_disable();
+ __pte_next(pte) = (unsigned long) pte_quicklist;
+ pte_quicklist = (unsigned long *) pte;
+ pgtable_cache_size++;
++ preempt_enable();
+ }
+
+ #else /* CONFIG_NO_PGT_CACHE */
+diff -Nur linux_c860_org/include/asm-arm/processor.h linux/include/asm-arm/processor.h
+--- linux_c860_org/include/asm-arm/processor.h 2002-08-26 14:43:40.000000000 +0900
++++ linux/include/asm-arm/processor.h 2004-06-10 21:12:37.000000000 +0900
+@@ -117,7 +117,7 @@
+ /*
+ * Create a new kernel thread
+ */
+-extern int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
++extern int arch_kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
+
+ #endif
+
+diff -Nur linux_c860_org/include/asm-arm/sharp_apm.h linux/include/asm-arm/sharp_apm.h
+--- linux_c860_org/include/asm-arm/sharp_apm.h 2003-03-13 14:53:18.000000000 +0900
++++ linux/include/asm-arm/sharp_apm.h 2004-06-10 21:13:10.000000000 +0900
+@@ -9,6 +9,7 @@
+ * Change Log
+ * 26-Jun-2002 SHARP Add `APM_IOC_GET_BACKPACK_STATE`
+ * 12-Dec-2002 Sharp Corporation for Poodle and Corgi
++ * 26-Feb-2004 Lineo Solutions, Inc. for Tosa
+ */
+
+ #ifndef _SHARP_APM_H
+@@ -59,6 +60,10 @@
+
+ #define APM_IOC_KICK_BATTERY_CHECK _IO(APM_IOC_MAGIC, 80)
+
++#define APM_IOC_GET_JACKET_STATE _IO(APM_IOC_MAGIC, 90) /* for tosa */
++#define APM_IOC_BATTERY_JACKET_CHK _IO(APM_IOC_MAGIC, 91)
++#define APM_IOC_GET_CARDSLOT_ERROR _IO(APM_IOC_MAGIC, 92)
++
+
+ #define APM_IOCGWUPSRC _IOR (APM_IOC_MAGIC, 200, int) /* 0x800441c8 */
+ #define APM_IOCSWUPSRC _IOWR(APM_IOC_MAGIC, 201, int) /* 0xc00441c9 */
+@@ -90,6 +95,11 @@
+ #define LOCK_FCS_AC97 0x00000080
+ #define LOCK_FCS_PCMCIA 0x00000100
+ #define LOCK_FCS_SOUND 0x00000200
++#define LOCK_FCS_KEY 0x00000400
++#define LOCK_FCS_TOUCH 0x00000800
++#define LOCK_FCS_BATTERY 0x00001000
++#define LOCK_FCS_AC97_SUB 0x00002000
++#define LOCK_FCS_PCMCIA2 0x00004000
+ #define LOCK_FCS_USR0 0x01000000
+ #define LOCK_FCS_USR1 0x02000000
+ #define LOCK_FCS_USR2 0x04000000
+@@ -113,10 +123,17 @@
+ #define POWER_MODE_SOUND 0x00000200
+ #define POWER_MODE_KEY 0x00000400
+ #define POWER_MODE_TOUCH 0x00000800
++#define POWER_MODE_BATTERY 0x00001000
++#define POWER_MODE_AC97_SUB 0x00002000
++#define POWER_MODE_PCMCIA2 0x00004000
+
+ #define POWER_MODE_CAUTION_MASK (POWER_MODE_MMC|POWER_MODE_STUART|POWER_MODE_UDC|POWER_MODE_PCMCIA)
+
++#if defined(CONFIG_ARCH_PXA_TOSA)
++#define LOCK_FCS_POWER_MODE_CORRESPOND_MASK (POWER_MODE_FFUART|POWER_MODE_STUART|POWER_MODE_BTUART|POWER_MODE_IRDA|POWER_MODE_SSP|POWER_MODE_UDC|POWER_MODE_AC97|POWER_MODE_PCMCIA|POWER_MODE_SOUND|POWER_MODE_KEY|POWER_MODE_TOUCH|POWER_MODE_BATTERY|POWER_MODE_AC97_SUB|POWER_MODE_PCMCIA2)
++#else
+ #define LOCK_FCS_POWER_MODE_CORRESPOND_MASK (POWER_MODE_FFUART|POWER_MODE_STUART|POWER_MODE_BTUART|POWER_MODE_IRDA|POWER_MODE_SSP|POWER_MODE_UDC|POWER_MODE_AC97|POWER_MODE_PCMCIA|POWER_MODE_SOUND)
++#endif
+
+ int change_power_mode(unsigned long, int);
+ int lock_FCS(unsigned long, int);
+diff -Nur linux_c860_org/include/asm-arm/sharp_char.h linux/include/asm-arm/sharp_char.h
+--- linux_c860_org/include/asm-arm/sharp_char.h 2003-01-14 12:07:55.000000000 +0900
++++ linux/include/asm-arm/sharp_char.h 2004-06-10 21:09:11.000000000 +0900
+@@ -17,6 +17,7 @@
+ *
+ * Change Log
+ * 12-Dec-2002 Sharp Corporation for Poodle and Corgi
++ * 1-Nov-2003 Sharp Corporation for Tosa
+ */
+
+ #ifndef __ASM_SHARP_CHAR_H_INCLUDED
+@@ -65,7 +66,7 @@
+ int status; /* set new led status if you call SHARP_LED_SETSTATUS */
+ } sharp_led_status;
+
+-#define SHARP_LED_WHICH_MAX 15 /* last number of LED */
++#define SHARP_LED_WHICH_MAX 17 /* last number of LED */
+
+ /* parameters for 'which' member */
+ #define SHARP_LED_PDA 0 /* PDA status */
+@@ -84,6 +85,8 @@
+ #define SHARP_LED_COLLIE_1 13 /* 1st pri. mail LED control */
+ #define SHARP_LED_COMM 14 /* communication status */
+ #define SHARP_LED_BROWSER 15 /* WWW browser status */
++#define SHARP_LED_BLUETOOTH 16 /* Bluetooth */
++#define SHARP_LED_WLAN 17 /* Wireless LAN */
+
+ /* parameters for 'status' member */
+ #define LED_PDA_RUNNING 0 /* for SHARP_LED_RUN */
+@@ -158,6 +161,14 @@
+ #define LED_BROWSER_ONLINE 1 /* for SHARP_LED_BROWSER */
+ #define LED_BROWSER_ERROR 2 /* for SHARP_LED_BROWSER */
+
++#define LED_BLUETOOTH_OFFLINE 0 /* for SHARP_LED_BLUETOOTH */
++#define LED_BLUETOOTH_OUTOFRANGE 1 /* for SHARP_LED_BLUETOOTH */
++#define LED_BLUETOOTH_STANBY 2 /* for SHARP_LED_BLUETOOTH */
++
++#define LED_WLAN_OFFLINE 0 /* for SHARP_LED_WLAN */
++#define LED_WLAN_OUTOFRANGE 1 /* for SHARP_LED_WLAN */
++#define LED_WLAN_BLINK 2 /* for SHARP_LED_WLAN */
++
+
+ /* --- for SHARP_BUZZER device --- */
+ #define SHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
+@@ -257,6 +268,9 @@
+ #define IRIS_KBDCTL_ENABLEKEYBOARD (SHARP_KBDCTL_IOCTL_START+16)
+ #define IRIS_KBDCTL_DISABLEKEYBOARD (SHARP_KBDCTL_IOCTL_START+17)
+ #define SHARP_KBDCTL_SENDKEY (SHARP_KBDCTL_IOCTL_START+18)
++#define SHARP_KBDCTL_SETMODIFSTAT (SHARP_KBDCTL_IOCTL_START+20)
++#define SHARP_KBDCTL_SETSWKEY (SHARP_KBDCTL_IOCTL_START+21)
++#define SHARP_KBDCTL_GETSWKEY (SHARP_KBDCTL_IOCTL_START+22)
+
+ typedef struct sharp_kbdctl_modifstat {
+ int which;
+@@ -274,6 +288,11 @@
+ int hold_slcode;
+ } sharp_kbdctl_holdcustom;
+
++typedef struct _sharp_kbdctl_swkey {
++ int key;
++ int mode;
++} sharp_kbdctl_swkey;
++
+ #define SHARP_EXTMODIF_2ND 0x01
+ #define SHARP_EXTMODIF_CAPS 0x02
+ #define SHARP_EXTMODIF_NUMLOCK 0x03
+diff -Nur linux_c860_org/include/asm-arm/sharp_tc6393.h linux/include/asm-arm/sharp_tc6393.h
+--- linux_c860_org/include/asm-arm/sharp_tc6393.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/include/asm-arm/sharp_tc6393.h 2004-06-10 21:09:11.000000000 +0900
+@@ -0,0 +1,333 @@
++/*
++ * linux/include/asm-arm/sharp_tc6393.h
++ *
++ * Copyright (C) 2003 SHARP
++ *
++ * 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.
++ *
++ * May be copied or modified under the terms of the GNU General Public
++ * License. See linux/COPYING for more information.
++ *
++ * ChangeLog:
++ * 05-Aug-2003 SHARP Corporation
++ *
++ */
++
++#ifndef _TC6393XB_H_
++#define _TC6393XB_H_
++
++//TC6393XB Resource Area Map (Offset)
++// System Configration Register Area 0x00000000 - 0x000000FF (Size 0x00000100)
++// NAND Flash Host Controller Register Area 0x00000100 - 0x000001FF (Size 0x00000100)
++// USB Host Controller Register Area 0x00000300 - 0x000003FF (Size 0x00000100)
++// LCD Host Controller Register Area 0x00000500 - 0x000005FF (Size 0x00000100)
++// NAND Flash Control Register 0x00001000 - 0x00001007 (Size 0x00000008)
++// USB Control Register 0x00003000 - 0x000031FF (Size 0x00000200)
++// LCD Control Register 0x00005000 - 0x000051FF (Size 0x00000200)
++// Local Memory 0 (32KB) 0x00010000 - 0x00017FFF (Size 0x00008000)
++// Local Memory 0 (32KB) alias 0x00018000 - 0x0001FFFF (Size 0x00008000)
++// Local Memory 1 (1MB) 0x00100000 - 0x001FFFFF (Size 0x00100000)
++
++
++#define TC6393XB_BASE (0xf1000000)
++
++typedef struct {
++ volatile unsigned char reserved1[8];
++ // Revision ID
++ volatile unsigned char warid;
++ volatile unsigned char reserved2[71];
++ // Interrupt Status
++ volatile unsigned char r_itrsts;
++ volatile unsigned char reserved3;
++ // Interrupt Mask
++ volatile unsigned char r_itrmsk;
++ volatile unsigned char reserved4;
++ // Interrupt Routing
++ volatile unsigned char r_itrrot;
++ volatile unsigned char reserved5[11];
++ // GP Enable
++ volatile unsigned char gpioen;
++ // GP Alternative Enable
++ volatile unsigned char gpaioen;
++ volatile unsigned char reserved6[2];
++ // GPI Status 0
++ volatile unsigned char gpists0;
++ // GPI Status 1
++ volatile unsigned char gpists1;
++ // GPI Status 2
++ volatile unsigned char gpists2;
++ volatile unsigned char reserved7;
++ // GPI INT Mask 0
++ volatile unsigned char gpintmsk0;
++ // GPI INT Mask 1
++ volatile unsigned char gpintmsk1;
++ // GPI INT Mask 2
++ volatile unsigned char gpintmsk2;
++ volatile unsigned char reserved8;
++ // GPI Edge Detect Enable 0
++ volatile unsigned char gpedgen0;
++ // GPI Edge Detect Enable 1
++ volatile unsigned char gpedgen1;
++ // GPI Edge Detect Enable 2
++ volatile unsigned char gpedgen2;
++ volatile unsigned char reserved9;
++ // GPI Level Invert 0
++ volatile unsigned char gplvinv0;
++ // GPI Level Invert 1
++ volatile unsigned char gplvinv1;
++ // GPI Level Invert 2
++ volatile unsigned char gplvinv2;
++ volatile unsigned char reserved10[5];
++ // GPO Data set 0
++ volatile unsigned char gpodt0;
++ // GPO Data set 1
++ volatile unsigned char gpodt1;
++ // GPO Data set 2
++ volatile unsigned char gpodt2;
++ volatile unsigned char reserved11;
++ // GPO Data OE Contorol 0
++ volatile unsigned char gpooe0;
++ // GPO Data OE Contorol 1
++ volatile unsigned char gpooe1;
++ // GPO Data OE Contorol 2
++ volatile unsigned char gpooe2;
++ volatile unsigned char reserved12;
++ // GP Internal Active Register Contorol 0
++ volatile unsigned char gpapulc0;
++ // GP Internal Active Register Contorol 1
++ volatile unsigned char gpapulc1;
++ // GP Internal Active Register Contorol 2
++ volatile unsigned char gpIapulc2;
++ volatile unsigned char reserved13;
++ // GP Internal Active Register Level Contorol 0
++ volatile unsigned char gparlv0;
++ // GP Internal Active Register Level Contorol 1
++ volatile unsigned char gparlv1;
++ // GP Internal Active Register Level Contorol 2
++ volatile unsigned char gparlv2;
++ volatile unsigned char reserved14;
++ // GPI Buffer Contorol 0
++ volatile unsigned char gpibfc0;
++ // GPI Buffer Contorol 1
++ volatile unsigned char gpibfc1;
++ // GPI Buffer Contorol 2
++ volatile unsigned char gpibfc2;
++ volatile unsigned char reserved15;
++ // GPa Internal Activ Register Contorol 0
++ volatile unsigned char gpaapulc0;
++ // GPa Internal Activ Register Contorol 1
++ volatile unsigned char gpaapulc1;
++ volatile unsigned char reserved16[2];
++ // GPa Internal Activ Register Level Contorol 0
++ volatile unsigned char gpaarlv0;
++ // GPa Internal Activ Register Level Contorol 1
++ volatile unsigned char gpaarlv1;
++ volatile unsigned char reserved17[2];
++ // GPa Buffer Contorol 0
++ volatile unsigned char gpaibfc0;
++ // GPa Buffer Contorol 1
++ volatile unsigned char gpaibfc1;
++ volatile unsigned char reserved18[2];
++ // Clock Control
++ volatile unsigned short clkctl;
++ // PLL2 Control
++ volatile unsigned short pll2ctl;
++ // PLL1 Control
++ volatile unsigned short pll1ctl;
++ // Device Internal Avtive Register Contorol
++ volatile unsigned char diarctl;
++ // Device Buffer Contorol
++ volatile unsigned char dvbctl;
++ volatile unsigned char reserved19[62];
++ // Function Enable
++ volatile unsigned char funcebl;
++ volatile unsigned char reserved20[3];
++ // Mode Contorol 0
++ volatile unsigned char modectl0;
++ // Mode Contorol 1
++ volatile unsigned char modectl1;
++ volatile unsigned char reserved21[22];
++ // Configuraation Control
++ volatile unsigned char cfctl;
++ volatile unsigned char reserved22[2];
++ // Debug
++ volatile unsigned char debug;
++} TC6393XB_SysConfig;
++
++#define TC6393XB_SYSCONFIG_BASE ((TC6393XB_SysConfig *)TC6393XB_BASE)
++
++typedef struct {
++ // Vendor ID Register
++ volatile unsigned short spvid;
++ // Device ID Register
++ volatile unsigned short spdid;
++ // Command Register
++ volatile unsigned short spcmd;
++ // Status Register
++ volatile unsigned short spst;
++ // Revision ID Register / Class Code Register
++ volatile unsigned short sprid_spcc;
++ volatile unsigned char reserved1[4];
++ // Header Tyep Register
++ volatile unsigned char spht;
++ volatile unsigned char reserved2;
++ // SmartMedia Controller Register Base Address Register
++ union {
++ volatile unsigned short spba1;
++ volatile unsigned short spba2;
++ } spba;
++ volatile unsigned char reserved3[22];
++ // CIS Pointer Register
++ volatile unsigned short scisp;
++ // Subsystem Vender ID Register
++ volatile unsigned short spsvid;
++ // Subsystem Deviece ID Register
++ volatile unsigned short spsdid;
++ volatile unsigned char reserved4[4];
++ // Capability Pointer Register
++ volatile unsigned char sid;
++ volatile unsigned char reserved5[7];
++ // Interrupt Ling Register
++ volatile unsigned char spitrl;
++ // Interrupt Pin Register
++ volatile unsigned char spitrp;
++ volatile unsigned char reserved6[10];
++ // INT Enable Register
++ volatile unsigned char spintc;
++ // PME Enable Register
++ volatile unsigned char sppmec;
++ // Event Control Register
++ volatile unsigned char sevntcnt;
++ volatile unsigned char reserved7;
++ // CLKRUN Control Register
++ volatile unsigned char spcrunc;
++ volatile unsigned char reserved8[14];
++ // Debug Register
++ volatile unsigned char spdbg;
++ volatile unsigned char reserved9[4];
++ // SmartMedia Transaction Control Register
++ volatile unsigned char smtrcnt;
++ // SmartMedia Monitor Register
++ volatile unsigned char smsts;
++ // SmartMedia Power Supply Control Register
++ volatile unsigned char ssmpwc;
++ // SmartMedia Detect Control Register
++ volatile unsigned char ssmdtc;
++ volatile unsigned char reserved10[28];
++ // Capability ID Register
++ volatile unsigned char svcid;
++ // Next Item Ptr Register
++ volatile unsigned char svniptr;
++ // Power Management Capabilities (PMC) Register
++ volatile unsigned short svpmc;
++ // Power Management Control/Status (PMCSR) Register
++ volatile unsigned short svpmcs;
++ // PMCSR PCI to PCI Bridge Support Extensions Register
++ volatile unsigned char svppcbs;
++ // Data Register
++ volatile unsigned char svdata;
++ volatile unsigned char reserved11[24];
++ // CIS Register SCISRx
++ volatile unsigned char scisr[80];
++ // ROM Data Port Register
++ volatile unsigned short srmdp;
++ // ROM Index Port Register
++ volatile unsigned char srmip;
++ // ROM Control Register
++ volatile unsigned char srmcr;
++ volatile unsigned char reserved12[8];
++ // Configration Control Register
++ volatile unsigned char sppcnf;
++ volatile unsigned char reserved13[2];
++ // Monitor Select Register
++ volatile unsigned char pfadb;
++} TC6393XB_NandConfig;
++
++#define TC6393XB_NANDCONFIG_BASE ((TC6393XB_NandConfig *)(TC6393XB_BASE+0x100))
++
++
++typedef struct {
++ union {
++ volatile struct {
++ unsigned char sdata0; // Data Register0
++ unsigned char sdata1; // Data Register1
++ unsigned char sdata2; // Data Register2
++ unsigned char sdata3; // Data Register3
++ } data8;
++ volatile struct {
++ unsigned short sdata0_1; // Data Register0,1
++ unsigned short sdata2_3; // Data Register2,3
++ } data16;
++ volatile struct {
++ unsigned long sdata0_3; // Data Register 0,1,2,3
++ } data32;
++ } sdata;
++ // Mode Register
++ volatile unsigned char smode;
++ // Status Register
++ volatile unsigned char sustus;
++ // Interrupt Status Register
++ volatile unsigned char sintst;
++ // Interrupt Mask Register
++ volatile unsigned char sintmsk;
++} TC6393XB_NandCtrl;
++
++#define TC6393XB_NANDCTRL_OFFSET 0x1000
++#define TC6393XB_NANDCTRL_BASE ((TC6393XB_NandCtrl *)(TC6393XB_BASE+TC6393XB_NANDCTRL_OFFSET))
++
++
++/* SMODE Register Command List */
++#define SMODE_READ_COMMAND 0x15 // DataRead Command_Mode
++#define SMODE_READ_ADDRESS 0x16 // DataRead Address_Mode
++#define SMODE_READ_DATAREAD 0x14 // DataRead Data_Mode
++#define SMODE_WRITE_COMMAND 0x95 // DataWrite Command_Mode
++#define SMODE_WRITE_ADDRESS 0x96 // DataWrite Address_Mode
++#define SMODE_WRITE_DATAWRITE 0x94 // DataWrite Data_Mode
++
++#define SMODE_POWER_ON 0x0C // Power Supply ON to SSFDC card
++#define SMODE_POWER_OFF 0x08 // Power Supply OFF to SSFDC card
++
++#define SMODE_LED_OFF 0x00 // LED OFF
++#define SMODE_LED_ON 0x04 // LED ON
++
++#define SMODE_EJECT_ON 0x68 // Ejection Demand from Penguin is Advanced
++#define SMODE_EJECT_OFF 0x08 // Ejection Demand from Penguin is Not Advanced
++
++#define SMODE_LOCK 0x6C // Operates By Lock_Mode. Ejection Switch is Invalid
++#define SMODE_UNLOCK 0x0C // Operates By UnLock_Mode.Ejection Switch is Effective
++
++#define SMODE_HWECC_READ_ECCCALC 0x34 // HW-ECC DataRead
++#define SMODE_HWECC_READ_RESET_ECC 0x74 // HW-ECC ResetMode
++#define SMODE_HWECC_READ_CALC_RESULT 0x54 // HW-ECC Calculation Result Read_Mode
++
++#define SMODE_HWECC_WRITE_ECCCALC 0xB4 // HW-ECC DataWrite
++#define SMODE_HWECC_WRITE_RESET_ECC 0xF4 // HW-ECC ResetMode
++#define SMODE_HWECC_WRITE_CALC_RESULT 0xD4 // HW-ECC Calculation Result Read_Mode
++
++#define SMODE_CONTROLLER_ID_READ 0x40 // Controller ID Read
++#define SMODE_STANDBY 0x00 // SSFDC card Changes Standby State
++
++#define SMODE_WE 0x80
++#define SMODE_ECC1 0x40
++#define SMODE_ECC0 0x20
++#define SMODE_CE 0x10
++#define SMODE_PCNT1 0x08
++#define SMODE_PCNT0 0x04
++#define SMODE_ALE 0x02
++#define SMODE_CLE 0x01
++
++#define SMODE_SELECT (SMODE_WE|SMODE_CE|SMODE_PCNT0)
++#define SMODE_DESELECT 0x00 //Changes Standby State
++
++/* SUSTUS Register */
++#define SUSTUS_BUSY 0x80
++
++#endif
+diff -Nur linux_c860_org/include/asm-arm/sharp_tc6393_usb.h linux/include/asm-arm/sharp_tc6393_usb.h
+--- linux_c860_org/include/asm-arm/sharp_tc6393_usb.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/include/asm-arm/sharp_tc6393_usb.h 2004-06-10 21:09:11.000000000 +0900
+@@ -0,0 +1,22 @@
++/*
++ * linux/include/asm-arm/sharp_tc6393_usb.h
++ *
++ * Sharp PDA Driver Header File
++ *
++ * (C) Copyright 2004 Lineo Solutions, Inc.
++ *
++ * May be copied or modified under the terms of the GNU General Public
++ * License. See linux/COPYING for more information.
++ *
++ */
++
++#ifndef _SHARP_TC6393_USB_H
++#define _SHARP_TC6393_USB_H
++
++#define TC6393_OHCI_IOC_MAGIC 'U'
++
++#define TC6393_OHCI_IOC_PDOWN _IO(TC6393_OHCI_IOC_MAGIC, 10)
++#define TC6393_OHCI_IOC_PON _IO(TC6393_OHCI_IOC_MAGIC, 11)
++#define TC6393_OHCI_IOC_PCHECK _IO(TC6393_OHCI_IOC_MAGIC, 12)
++
++#endif /* _SHARP_TC6393_USB_H */
+diff -Nur linux_c860_org/include/asm-arm/smplock.h linux/include/asm-arm/smplock.h
+--- linux_c860_org/include/asm-arm/smplock.h 2002-08-26 14:37:53.000000000 +0900
++++ linux/include/asm-arm/smplock.h 2004-06-10 21:12:37.000000000 +0900
+@@ -3,12 +3,17 @@
+ *
+ * Default SMP lock implementation
+ */
++#include <linux/config.h>
+ #include <linux/interrupt.h>
+ #include <linux/spinlock.h>
+
+ extern spinlock_t kernel_flag;
+
++#ifdef CONFIG_PREEMPT
++#define kernel_locked() preempt_get_count()
++#else
+ #define kernel_locked() spin_is_locked(&kernel_flag)
++#endif
+
+ /*
+ * Release global kernel lock and global interrupt lock
+@@ -40,8 +45,14 @@
+ */
+ static inline void lock_kernel(void)
+ {
++#ifdef CONFIG_PREEMPT
++ if (current->lock_depth == -1)
++ spin_lock(&kernel_flag);
++ ++current->lock_depth;
++#else
+ if (!++current->lock_depth)
+ spin_lock(&kernel_flag);
++#endif
+ }
+
+ static inline void unlock_kernel(void)
+diff -Nur linux_c860_org/include/asm-arm/softirq.h linux/include/asm-arm/softirq.h
+--- linux_c860_org/include/asm-arm/softirq.h 2002-08-26 14:37:53.000000000 +0900
++++ linux/include/asm-arm/softirq.h 2004-06-10 21:12:37.000000000 +0900
+@@ -5,20 +5,22 @@
+ #include <asm/hardirq.h>
+
+ #define __cpu_bh_enable(cpu) \
+- do { barrier(); local_bh_count(cpu)--; } while (0)
++ do { barrier(); local_bh_count(cpu)--; preempt_enable(); } while (0)
+ #define cpu_bh_disable(cpu) \
+- do { local_bh_count(cpu)++; barrier(); } while (0)
++ do { preempt_disable(); local_bh_count(cpu)++; barrier(); } while (0)
+
+ #define local_bh_disable() cpu_bh_disable(smp_processor_id())
+ #define __local_bh_enable() __cpu_bh_enable(smp_processor_id())
+
+ #define in_softirq() (local_bh_count(smp_processor_id()) != 0)
+
+-#define local_bh_enable() \
++#define _local_bh_enable() \
+ do { \
+ unsigned int *ptr = &local_bh_count(smp_processor_id()); \
+ if (!--*ptr && ptr[-2]) \
+ __asm__("bl%? __do_softirq": : : "lr");/* out of line */\
+ } while (0)
+
++#define local_bh_enable() do { _local_bh_enable(); preempt_enable(); } while (0)
++
+ #endif /* __ASM_SOFTIRQ_H */
+diff -Nur linux_c860_org/include/asm-cris/processor.h linux/include/asm-cris/processor.h
+--- linux_c860_org/include/asm-cris/processor.h 2002-08-26 14:38:01.000000000 +0900
++++ linux/include/asm-cris/processor.h 2004-06-10 21:09:11.000000000 +0900
+@@ -81,7 +81,7 @@
+ #define INIT_THREAD { \
+ 0, 0, 0x20 } /* ccr = int enable, nothing else */
+
+-extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
++extern int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
+
+ /* give the thread a program location
+ * set user-mode (The 'U' flag (User mode flag) is CCR/DCCR bit 8)
+diff -Nur linux_c860_org/include/asm-i386/hardirq.h linux/include/asm-i386/hardirq.h
+--- linux_c860_org/include/asm-i386/hardirq.h 2002-08-26 14:37:47.000000000 +0900
++++ linux/include/asm-i386/hardirq.h 2004-06-10 21:09:11.000000000 +0900
+@@ -19,12 +19,16 @@
+
+ /*
+ * Are we in an interrupt context? Either doing bottom half
+- * or hardware interrupt processing?
++ * or hardware interrupt processing? Note the preempt check,
++ * this is both a bugfix and an optimization. If we are
++ * preemptible, we cannot be in an interrupt.
+ */
+-#define in_interrupt() ({ int __cpu = smp_processor_id(); \
+- (local_irq_count(__cpu) + local_bh_count(__cpu) != 0); })
++#define in_interrupt() (preempt_is_disabled() && \
++ ({unsigned long __cpu = smp_processor_id(); \
++ (local_irq_count(__cpu) + local_bh_count(__cpu) != 0); }))
+
+-#define in_irq() (local_irq_count(smp_processor_id()) != 0)
++#define in_irq() (preempt_is_disabled() && \
++ (local_irq_count(smp_processor_id()) != 0))
+
+ #ifndef CONFIG_SMP
+
+@@ -36,6 +40,8 @@
+
+ #define synchronize_irq() barrier()
+
++#define release_irqlock(cpu) do { } while (0)
++
+ #else
+
+ #include <asm/atomic.h>
+diff -Nur linux_c860_org/include/asm-i386/highmem.h linux/include/asm-i386/highmem.h
+--- linux_c860_org/include/asm-i386/highmem.h 2002-08-26 14:37:48.000000000 +0900
++++ linux/include/asm-i386/highmem.h 2004-06-10 21:09:11.000000000 +0900
+@@ -88,6 +88,7 @@
+ enum fixed_addresses idx;
+ unsigned long vaddr;
+
++ preempt_disable();
+ if (page < highmem_start_page)
+ return page_address(page);
+
+@@ -109,8 +110,10 @@
+ unsigned long vaddr = (unsigned long) kvaddr;
+ enum fixed_addresses idx = type + KM_TYPE_NR*smp_processor_id();
+
+- if (vaddr < FIXADDR_START) // FIXME
++ if (vaddr < FIXADDR_START) { // FIXME
++ preempt_enable();
+ return;
++ }
+
+ if (vaddr != __fix_to_virt(FIX_KMAP_BEGIN+idx))
+ BUG();
+@@ -122,6 +125,8 @@
+ pte_clear(kmap_pte-idx);
+ __flush_tlb_one(vaddr);
+ #endif
++
++ preempt_enable();
+ }
+
+ #endif /* __KERNEL__ */
+diff -Nur linux_c860_org/include/asm-i386/hw_irq.h linux/include/asm-i386/hw_irq.h
+--- linux_c860_org/include/asm-i386/hw_irq.h 2002-08-26 14:37:48.000000000 +0900
++++ linux/include/asm-i386/hw_irq.h 2004-06-10 21:09:11.000000000 +0900
+@@ -95,6 +95,18 @@
+ #define __STR(x) #x
+ #define STR(x) __STR(x)
+
++#define GET_CURRENT \
++ "movl %esp, %ebx\n\t" \
++ "andl $-8192, %ebx\n\t"
++
++#ifdef CONFIG_PREEMPT
++#define BUMP_LOCK_COUNT \
++ GET_CURRENT \
++ "incl 4(%ebx)\n\t"
++#else
++#define BUMP_LOCK_COUNT
++#endif
++
+ #define SAVE_ALL \
+ "cld\n\t" \
+ "pushl %es\n\t" \
+@@ -108,15 +120,12 @@
+ "pushl %ebx\n\t" \
+ "movl $" STR(__KERNEL_DS) ",%edx\n\t" \
+ "movl %edx,%ds\n\t" \
+- "movl %edx,%es\n\t"
++ "movl %edx,%es\n\t" \
++ BUMP_LOCK_COUNT
+
+ #define IRQ_NAME2(nr) nr##_interrupt(void)
+ #define IRQ_NAME(nr) IRQ_NAME2(IRQ##nr)
+
+-#define GET_CURRENT \
+- "movl %esp, %ebx\n\t" \
+- "andl $-8192, %ebx\n\t"
+-
+ /*
+ * SMP has a few special interrupts for IPI messages
+ */
+diff -Nur linux_c860_org/include/asm-i386/i387.h linux/include/asm-i386/i387.h
+--- linux_c860_org/include/asm-i386/i387.h 2002-08-26 14:37:48.000000000 +0900
++++ linux/include/asm-i386/i387.h 2004-06-10 21:09:11.000000000 +0900
+@@ -12,6 +12,7 @@
+ #define __ASM_I386_I387_H
+
+ #include <linux/sched.h>
++#include <linux/spinlock.h>
+ #include <asm/processor.h>
+ #include <asm/sigcontext.h>
+ #include <asm/user.h>
+@@ -24,7 +25,7 @@
+ extern void restore_fpu( struct task_struct *tsk );
+
+ extern void kernel_fpu_begin(void);
+-#define kernel_fpu_end() stts()
++#define kernel_fpu_end() do { stts(); preempt_enable(); } while(0)
+
+
+ #define unlazy_fpu( tsk ) do { \
+diff -Nur linux_c860_org/include/asm-i386/pgalloc.h linux/include/asm-i386/pgalloc.h
+--- linux_c860_org/include/asm-i386/pgalloc.h 2002-08-26 14:37:48.000000000 +0900
++++ linux/include/asm-i386/pgalloc.h 2004-06-10 21:09:11.000000000 +0900
+@@ -75,20 +75,26 @@
+ {
+ unsigned long *ret;
+
++ preempt_disable();
+ if ((ret = pgd_quicklist) != NULL) {
+ pgd_quicklist = (unsigned long *)(*ret);
+ ret[0] = 0;
+ pgtable_cache_size--;
+- } else
++ preempt_enable();
++ } else {
++ preempt_enable();
+ ret = (unsigned long *)get_pgd_slow();
++ }
+ return (pgd_t *)ret;
+ }
+
+ static inline void free_pgd_fast(pgd_t *pgd)
+ {
++ preempt_disable();
+ *(unsigned long *)pgd = (unsigned long) pgd_quicklist;
+ pgd_quicklist = (unsigned long *) pgd;
+ pgtable_cache_size++;
++ preempt_enable();
+ }
+
+ static inline void free_pgd_slow(pgd_t *pgd)
+@@ -119,19 +125,23 @@
+ {
+ unsigned long *ret;
+
++ preempt_disable();
+ if ((ret = (unsigned long *)pte_quicklist) != NULL) {
+ pte_quicklist = (unsigned long *)(*ret);
+ ret[0] = ret[1];
+ pgtable_cache_size--;
+ }
++ preempt_enable();
+ return (pte_t *)ret;
+ }
+
+ static inline void pte_free_fast(pte_t *pte)
+ {
++ preempt_disable();
+ *(unsigned long *)pte = (unsigned long) pte_quicklist;
+ pte_quicklist = (unsigned long *) pte;
+ pgtable_cache_size++;
++ preempt_enable();
+ }
+
+ static __inline__ void pte_free_slow(pte_t *pte)
+diff -Nur linux_c860_org/include/asm-i386/processor.h linux/include/asm-i386/processor.h
+--- linux_c860_org/include/asm-i386/processor.h 2002-08-26 14:37:47.000000000 +0900
++++ linux/include/asm-i386/processor.h 2004-06-10 21:09:11.000000000 +0900
+@@ -429,7 +429,7 @@
+ /*
+ * create a kernel thread without removing it from tasklists
+ */
+-extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
++extern int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
+
+ /* Copy and release all segment info associated with a VM */
+ extern void copy_segments(struct task_struct *p, struct mm_struct * mm);
+diff -Nur linux_c860_org/include/asm-i386/smplock.h linux/include/asm-i386/smplock.h
+--- linux_c860_org/include/asm-i386/smplock.h 2002-08-26 14:37:48.000000000 +0900
++++ linux/include/asm-i386/smplock.h 2004-06-10 21:09:11.000000000 +0900
+@@ -10,7 +10,15 @@
+
+ extern spinlock_t kernel_flag;
+
++#ifdef CONFIG_SMP
+ #define kernel_locked() spin_is_locked(&kernel_flag)
++#else
++#ifdef CONFIG_PREEMPT
++#define kernel_locked() preempt_get_count()
++#else
++#define kernel_locked() 1
++#endif
++#endif
+
+ /*
+ * Release global kernel lock and global interrupt lock
+@@ -42,6 +50,11 @@
+ */
+ static __inline__ void lock_kernel(void)
+ {
++#ifdef CONFIG_PREEMPT
++ if (current->lock_depth == -1)
++ spin_lock(&kernel_flag);
++ ++current->lock_depth;
++#else
+ #if 1
+ if (!++current->lock_depth)
+ spin_lock(&kernel_flag);
+@@ -54,6 +67,7 @@
+ :"=m" (__dummy_lock(&kernel_flag)),
+ "=m" (current->lock_depth));
+ #endif
++#endif
+ }
+
+ static __inline__ void unlock_kernel(void)
+diff -Nur linux_c860_org/include/asm-i386/softirq.h linux/include/asm-i386/softirq.h
+--- linux_c860_org/include/asm-i386/softirq.h 2002-08-26 14:37:47.000000000 +0900
++++ linux/include/asm-i386/softirq.h 2004-06-10 21:09:11.000000000 +0900
+@@ -6,9 +6,9 @@
+ #include <linux/stringify.h>
+
+ #define __cpu_bh_enable(cpu) \
+- do { barrier(); local_bh_count(cpu)--; } while (0)
++ do { barrier(); local_bh_count(cpu)--; preempt_enable(); } while (0)
+ #define cpu_bh_disable(cpu) \
+- do { local_bh_count(cpu)++; barrier(); } while (0)
++ do { preempt_disable(); local_bh_count(cpu)++; barrier(); } while (0)
+
+ #define local_bh_disable() cpu_bh_disable(smp_processor_id())
+ #define __local_bh_enable() __cpu_bh_enable(smp_processor_id())
+@@ -23,7 +23,7 @@
+ * If you change the offsets in irq_stat then you have to
+ * update this code as well.
+ */
+-#define local_bh_enable() \
++#define _local_bh_enable() \
+ do { \
+ unsigned int *ptr = &local_bh_count(smp_processor_id()); \
+ \
+@@ -49,4 +49,6 @@
+ /* no registers clobbered */ ); \
+ } while (0)
+
++#define local_bh_enable() do { _local_bh_enable(); preempt_enable(); } while (0)
++
+ #endif /* __ASM_SOFTIRQ_H */
+diff -Nur linux_c860_org/include/asm-i386/spinlock.h linux/include/asm-i386/spinlock.h
+--- linux_c860_org/include/asm-i386/spinlock.h 2002-08-26 14:37:47.000000000 +0900
++++ linux/include/asm-i386/spinlock.h 2004-06-10 21:09:11.000000000 +0900
+@@ -81,7 +81,7 @@
+ :"=m" (lock->lock) : : "memory"
+
+
+-static inline void spin_unlock(spinlock_t *lock)
++static inline void _raw_spin_unlock(spinlock_t *lock)
+ {
+ #if SPINLOCK_DEBUG
+ if (lock->magic != SPINLOCK_MAGIC)
+@@ -101,7 +101,7 @@
+ :"=q" (oldval), "=m" (lock->lock) \
+ :"0" (oldval) : "memory"
+
+-static inline void spin_unlock(spinlock_t *lock)
++static inline void _raw_spin_unlock(spinlock_t *lock)
+ {
+ char oldval = 1;
+ #if SPINLOCK_DEBUG
+@@ -117,7 +117,7 @@
+
+ #endif
+
+-static inline int spin_trylock(spinlock_t *lock)
++static inline int _raw_spin_trylock(spinlock_t *lock)
+ {
+ char oldval;
+ __asm__ __volatile__(
+@@ -127,7 +127,7 @@
+ return oldval > 0;
+ }
+
+-static inline void spin_lock(spinlock_t *lock)
++static inline void _raw_spin_lock(spinlock_t *lock)
+ {
+ #if SPINLOCK_DEBUG
+ __label__ here;
+@@ -183,7 +183,7 @@
+ */
+ /* the spinlock helpers are in arch/i386/kernel/semaphore.c */
+
+-static inline void read_lock(rwlock_t *rw)
++static inline void _raw_read_lock(rwlock_t *rw)
+ {
+ #if SPINLOCK_DEBUG
+ if (rw->magic != RWLOCK_MAGIC)
+@@ -192,7 +192,7 @@
+ __build_read_lock(rw, "__read_lock_failed");
+ }
+
+-static inline void write_lock(rwlock_t *rw)
++static inline void _raw_write_lock(rwlock_t *rw)
+ {
+ #if SPINLOCK_DEBUG
+ if (rw->magic != RWLOCK_MAGIC)
+@@ -201,10 +201,10 @@
+ __build_write_lock(rw, "__write_lock_failed");
+ }
+
+-#define read_unlock(rw) asm volatile("lock ; incl %0" :"=m" ((rw)->lock) : : "memory")
+-#define write_unlock(rw) asm volatile("lock ; addl $" RW_LOCK_BIAS_STR ",%0":"=m" ((rw)->lock) : : "memory")
++#define _raw_read_unlock(rw) asm volatile("lock ; incl %0" :"=m" ((rw)->lock) : : "memory")
++#define _raw_write_unlock(rw) asm volatile("lock ; addl $" RW_LOCK_BIAS_STR ",%0":"=m" ((rw)->lock) : : "memory")
+
+-static inline int write_trylock(rwlock_t *lock)
++static inline int _raw_write_trylock(rwlock_t *lock)
+ {
+ atomic_t *count = (atomic_t *)lock;
+ if (atomic_sub_and_test(RW_LOCK_BIAS, count))
+diff -Nur linux_c860_org/include/asm-ia64/processor.h linux/include/asm-ia64/processor.h
+--- linux_c860_org/include/asm-ia64/processor.h 2002-08-26 14:37:56.000000000 +0900
++++ linux/include/asm-ia64/processor.h 2004-06-10 21:09:11.000000000 +0900
+@@ -463,7 +463,7 @@
+ * do_basic_setup() and the timing is such that free_initmem() has
+ * been called already.
+ */
+-extern int kernel_thread (int (*fn)(void *), void *arg, unsigned long flags);
++extern int arch_kernel_thread (int (*fn)(void *), void *arg, unsigned long flags);
+
+ /* Copy and release all segment info associated with a VM */
+ #define copy_segments(tsk, mm) do { } while (0)
+diff -Nur linux_c860_org/include/asm-m68k/processor.h linux/include/asm-m68k/processor.h
+--- linux_c860_org/include/asm-m68k/processor.h 2002-08-26 14:37:50.000000000 +0900
++++ linux/include/asm-m68k/processor.h 2004-06-10 21:09:11.000000000 +0900
+@@ -105,7 +105,7 @@
+ {
+ }
+
+-extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
++extern int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
+
+ #define copy_segments(tsk, mm) do { } while (0)
+ #define release_segments(mm) do { } while (0)
+diff -Nur linux_c860_org/include/asm-mips/processor.h linux/include/asm-mips/processor.h
+--- linux_c860_org/include/asm-mips/processor.h 2002-08-26 14:37:48.000000000 +0900
++++ linux/include/asm-mips/processor.h 2004-06-10 21:09:11.000000000 +0900
+@@ -208,7 +208,7 @@
+ /* Free all resources held by a thread. */
+ #define release_thread(thread) do { } while(0)
+
+-extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
++extern int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
+
+ /* Copy and release all segment info associated with a VM */
+ #define copy_segments(p, mm) do { } while(0)
+diff -Nur linux_c860_org/include/asm-mips64/processor.h linux/include/asm-mips64/processor.h
+--- linux_c860_org/include/asm-mips64/processor.h 2002-08-26 14:37:58.000000000 +0900
++++ linux/include/asm-mips64/processor.h 2004-06-10 21:09:11.000000000 +0900
+@@ -231,7 +231,7 @@
+ /* Free all resources held by a thread. */
+ #define release_thread(thread) do { } while(0)
+
+-extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
++extern int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
+
+ /* Copy and release all segment info associated with a VM */
+ #define copy_segments(p, mm) do { } while(0)
+diff -Nur linux_c860_org/include/asm-parisc/processor.h linux/include/asm-parisc/processor.h
+--- linux_c860_org/include/asm-parisc/processor.h 2002-08-26 14:38:01.000000000 +0900
++++ linux/include/asm-parisc/processor.h 2004-06-10 21:09:11.000000000 +0900
+@@ -305,7 +305,7 @@
+
+ /* Free all resources held by a thread. */
+ extern void release_thread(struct task_struct *);
+-extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
++extern int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
+
+ #define copy_segments(tsk, mm) do { } while (0)
+ #define release_segments(mm) do { } while (0)
+diff -Nur linux_c860_org/include/asm-ppc/processor.h linux/include/asm-ppc/processor.h
+--- linux_c860_org/include/asm-ppc/processor.h 2002-08-26 14:37:52.000000000 +0900
++++ linux/include/asm-ppc/processor.h 2004-06-10 21:09:11.000000000 +0900
+@@ -571,7 +571,7 @@
+ /*
+ * Create a new kernel thread.
+ */
+-extern long kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
++extern long arch_kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
+
+ /*
+ * Bus types
+diff -Nur linux_c860_org/include/asm-s390/processor.h linux/include/asm-s390/processor.h
+--- linux_c860_org/include/asm-s390/processor.h 2002-08-26 14:37:59.000000000 +0900
++++ linux/include/asm-s390/processor.h 2004-06-10 21:09:11.000000000 +0900
+@@ -116,7 +116,7 @@
+
+ /* Free all resources held by a thread. */
+ extern void release_thread(struct task_struct *);
+-extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
++extern int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
+
+ /* Copy and release all segment info associated with a VM */
+ #define copy_segments(nr, mm) do { } while (0)
+diff -Nur linux_c860_org/include/asm-s390x/processor.h linux/include/asm-s390x/processor.h
+--- linux_c860_org/include/asm-s390x/processor.h 2002-08-26 14:38:02.000000000 +0900
++++ linux/include/asm-s390x/processor.h 2004-06-10 21:09:11.000000000 +0900
+@@ -127,7 +127,7 @@
+
+ /* Free all resources held by a thread. */
+ extern void release_thread(struct task_struct *);
+-extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
++extern int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
+
+ /* Copy and release all segment info associated with a VM */
+ #define copy_segments(nr, mm) do { } while (0)
+diff -Nur linux_c860_org/include/asm-sh/hardirq.h linux/include/asm-sh/hardirq.h
+--- linux_c860_org/include/asm-sh/hardirq.h 2002-08-26 14:37:55.000000000 +0900
++++ linux/include/asm-sh/hardirq.h 2004-06-10 21:09:11.000000000 +0900
+@@ -34,6 +34,8 @@
+
+ #define synchronize_irq() barrier()
+
++#define release_irqlock(cpu) do { } while (0)
++
+ #else
+
+ #error Super-H SMP is not available
+diff -Nur linux_c860_org/include/asm-sh/processor.h linux/include/asm-sh/processor.h
+--- linux_c860_org/include/asm-sh/processor.h 2002-08-26 14:37:55.000000000 +0900
++++ linux/include/asm-sh/processor.h 2004-06-10 21:09:11.000000000 +0900
+@@ -137,7 +137,7 @@
+ /*
+ * create a kernel thread without removing it from tasklists
+ */
+-extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
++extern int arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
+
+ /*
+ * Bus types
+diff -Nur linux_c860_org/include/asm-sh/smplock.h linux/include/asm-sh/smplock.h
+--- linux_c860_org/include/asm-sh/smplock.h 2002-08-26 14:37:55.000000000 +0900
++++ linux/include/asm-sh/smplock.h 2004-06-10 21:09:11.000000000 +0900
+@@ -9,15 +9,88 @@
+
+ #include <linux/config.h>
+
+-#ifndef CONFIG_SMP
+-
++#if !defined(CONFIG_SMP) && !defined(CONFIG_PREEMPT)
++/*
++ * Should never happen, since linux/smp_lock.h catches this case;
++ * but in case this file is included directly with neither SMP nor
++ * PREEMPT configuration, provide same dummys as linux/smp_lock.h
++ */
+ #define lock_kernel() do { } while(0)
+ #define unlock_kernel() do { } while(0)
+-#define release_kernel_lock(task, cpu, depth) ((depth) = 1)
+-#define reacquire_kernel_lock(task, cpu, depth) do { } while(0)
++#define release_kernel_lock(task, cpu) do { } while(0)
++#define reacquire_kernel_lock(task) do { } while(0)
++#define kernel_locked() 1
++
++#else /* CONFIG_SMP || CONFIG_PREEMPT */
++
++#if CONFIG_SMP
++#error "We do not support SMP on SH yet"
++#endif
++/*
++ * Default SMP lock implementation (i.e. the i386 version)
++ */
++
++#include <linux/interrupt.h>
++#include <linux/spinlock.h>
++
++extern spinlock_t kernel_flag;
++#define lock_bkl() spin_lock(&kernel_flag)
++#define unlock_bkl() spin_unlock(&kernel_flag)
+
++#ifdef CONFIG_SMP
++#define kernel_locked() spin_is_locked(&kernel_flag)
++#elif CONFIG_PREEMPT
++#define kernel_locked() preempt_get_count()
++#else /* neither */
++#define kernel_locked() 1
++#endif
++
++/*
++ * Release global kernel lock and global interrupt lock
++ */
++#define release_kernel_lock(task, cpu) \
++do { \
++ if (task->lock_depth >= 0) \
++ spin_unlock(&kernel_flag); \
++ release_irqlock(cpu); \
++ __sti(); \
++} while (0)
++
++/*
++ * Re-acquire the kernel lock
++ */
++#define reacquire_kernel_lock(task) \
++do { \
++ if (task->lock_depth >= 0) \
++ spin_lock(&kernel_flag); \
++} while (0)
++
++/*
++ * Getting the big kernel lock.
++ *
++ * This cannot happen asynchronously,
++ * so we only need to worry about other
++ * CPU's.
++ */
++static __inline__ void lock_kernel(void)
++{
++#ifdef CONFIG_PREEMPT
++ if (current->lock_depth == -1)
++ spin_lock(&kernel_flag);
++ ++current->lock_depth;
+ #else
+-#error "We do not support SMP on SH"
+-#endif /* CONFIG_SMP */
++ if (!++current->lock_depth)
++ spin_lock(&kernel_flag);
++#endif
++}
++
++static __inline__ void unlock_kernel(void)
++{
++ if (current->lock_depth < 0)
++ BUG();
++ if (--current->lock_depth < 0)
++ spin_unlock(&kernel_flag);
++}
++#endif /* CONFIG_SMP || CONFIG_PREEMPT */
+
+ #endif /* __ASM_SH_SMPLOCK_H */
+diff -Nur linux_c860_org/include/asm-sh/softirq.h linux/include/asm-sh/softirq.h
+--- linux_c860_org/include/asm-sh/softirq.h 2002-08-26 14:37:55.000000000 +0900
++++ linux/include/asm-sh/softirq.h 2004-06-10 21:09:11.000000000 +0900
+@@ -6,6 +6,7 @@
+
+ #define local_bh_disable() \
+ do { \
++ preempt_disable(); \
+ local_bh_count(smp_processor_id())++; \
+ barrier(); \
+ } while (0)
+@@ -14,6 +15,7 @@
+ do { \
+ barrier(); \
+ local_bh_count(smp_processor_id())--; \
++ preempt_enable(); \
+ } while (0)
+
+ #define local_bh_enable() \
+@@ -23,6 +25,7 @@
+ && softirq_pending(smp_processor_id())) { \
+ do_softirq(); \
+ } \
++ preempt_enable(); \
+ } while (0)
+
+ #define in_softirq() (local_bh_count(smp_processor_id()) != 0)
+diff -Nur linux_c860_org/include/asm-sparc/processor.h linux/include/asm-sparc/processor.h
+--- linux_c860_org/include/asm-sparc/processor.h 2002-08-26 14:37:51.000000000 +0900
++++ linux/include/asm-sparc/processor.h 2004-06-10 21:09:11.000000000 +0900
+@@ -146,7 +146,7 @@
+
+ /* Free all resources held by a thread. */
+ #define release_thread(tsk) do { } while(0)
+-extern pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
++extern pid_t arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
+
+
+ #define copy_segments(tsk, mm) do { } while (0)
+diff -Nur linux_c860_org/include/asm-sparc64/processor.h linux/include/asm-sparc64/processor.h
+--- linux_c860_org/include/asm-sparc64/processor.h 2002-08-26 14:37:53.000000000 +0900
++++ linux/include/asm-sparc64/processor.h 2004-06-10 21:09:11.000000000 +0900
+@@ -253,7 +253,7 @@
+ /* Free all resources held by a thread. */
+ #define release_thread(tsk) do { } while(0)
+
+-extern pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
++extern pid_t arch_kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
+
+ #define copy_segments(tsk, mm) do { } while (0)
+ #define release_segments(mm) do { } while (0)
+diff -Nur linux_c860_org/include/linux/ac97_codec.h linux/include/linux/ac97_codec.h
+--- linux_c860_org/include/linux/ac97_codec.h 2002-08-26 14:37:45.000000000 +0900
++++ linux/include/linux/ac97_codec.h 2004-06-10 21:13:20.000000000 +0900
+@@ -1,3 +1,8 @@
++/*
++ * ChangeLog:
++ * 1-Nov-2003 Sharp Corporation for Tosa
++ *
++ */
+ #ifndef _AC97_CODEC_H_
+ #define _AC97_CODEC_H_
+
+@@ -5,124 +10,145 @@
+ #include <linux/soundcard.h>
+
+ /* AC97 1.0 */
+-#define AC97_RESET 0x0000 //
+-#define AC97_MASTER_VOL_STEREO 0x0002 // Line Out
+-#define AC97_HEADPHONE_VOL 0x0004 //
+-#define AC97_MASTER_VOL_MONO 0x0006 // TAD Output
+-#define AC97_MASTER_TONE 0x0008 //
+-#define AC97_PCBEEP_VOL 0x000a // none
+-#define AC97_PHONE_VOL 0x000c // TAD Input (mono)
+-#define AC97_MIC_VOL 0x000e // MIC Input (mono)
+-#define AC97_LINEIN_VOL 0x0010 // Line Input (stereo)
+-#define AC97_CD_VOL 0x0012 // CD Input (stereo)
+-#define AC97_VIDEO_VOL 0x0014 // none
+-#define AC97_AUX_VOL 0x0016 // Aux Input (stereo)
+-#define AC97_PCMOUT_VOL 0x0018 // Wave Output (stereo)
+-#define AC97_RECORD_SELECT 0x001a //
+-#define AC97_RECORD_GAIN 0x001c
+-#define AC97_RECORD_GAIN_MIC 0x001e
+-#define AC97_GENERAL_PURPOSE 0x0020
+-#define AC97_3D_CONTROL 0x0022
+-#define AC97_MODEM_RATE 0x0024
+-#define AC97_POWER_CONTROL 0x0026
++#define AC97_RESET 0x0000 //
++#define AC97_MASTER_VOL_STEREO 0x0002 // Line Out
++#define AC97_HEADPHONE_VOL 0x0004 //
++#define AC97_MASTER_VOL_MONO 0x0006 // TAD Output
++#define AC97_MASTER_TONE 0x0008 //
++#define AC97_PCBEEP_VOL 0x000a // none
++#define AC97_PHONE_VOL 0x000c // TAD Input (mono)
++#define AC97_MIC_VOL 0x000e // MIC Input (mono)
++#define AC97_LINEIN_VOL 0x0010 // Line Input (stereo)
++#define AC97_CD_VOL 0x0012 // CD Input (stereo)
++#ifdef CONFIG_ARCH_PXA_TOSA
++#define AC97_SIDETONE 0x0014
++#endif /* CONFIG_ARCH_PXA_TOSA */
++#define AC97_VIDEO_VOL 0x0014 // none
++#ifdef CONFIG_ARCH_PXA_TOSA
++#define AC97_OUT3_VOL 0x0016
++#define AC97_DAC_VOL 0x0018
++#endif /* CONFIG_ARCH_PXA_TOSA */
++#define AC97_AUX_VOL 0x0016 // Aux Input (stereo)
++#define AC97_PCMOUT_VOL 0x0018 // Wave Output (stereo)
++#define AC97_RECORD_SELECT 0x001a //
++#define AC97_RECORD_GAIN 0x001c
++#define AC97_RECORD_GAIN_MIC 0x001e
++#define AC97_GENERAL_PURPOSE 0x0020
++#define AC97_3D_CONTROL 0x0022
++#define AC97_MODEM_RATE 0x0024
++#ifdef CONFIG_ARCH_PXA_TOSA
++#define AC97_POWERDOWN 0x0024
++#endif /* CONFIG_ARCH_PXA_TOSA */
++#define AC97_POWER_CONTROL 0x0026
+
+ /* AC'97 2.0 */
+-#define AC97_EXTENDED_ID 0x0028 /* Extended Audio ID */
+-#define AC97_EXTENDED_STATUS 0x002A /* Extended Audio Status */
+-#define AC97_PCM_FRONT_DAC_RATE 0x002C /* PCM Front DAC Rate */
+-#define AC97_PCM_SURR_DAC_RATE 0x002E /* PCM Surround DAC Rate */
+-#define AC97_PCM_LFE_DAC_RATE 0x0030 /* PCM LFE DAC Rate */
+-#define AC97_PCM_LR_ADC_RATE 0x0032 /* PCM LR DAC Rate */
+-#define AC97_PCM_MIC_ADC_RATE 0x0034 /* PCM MIC ADC Rate */
+-#define AC97_CENTER_LFE_MASTER 0x0036 /* Center + LFE Master Volume */
+-#define AC97_SURROUND_MASTER 0x0038 /* Surround (Rear) Master Volume */
+-#define AC97_RESERVED_3A 0x003A /* Reserved in AC '97 < 2.2 */
++#define AC97_EXTENDED_ID 0x0028 /* Extended Audio ID */
++#define AC97_EXTENDED_STATUS 0x002A /* Extended Audio Status */
++#define AC97_PCM_FRONT_DAC_RATE 0x002C /* PCM Front DAC Rate */
++#define AC97_PCM_SURR_DAC_RATE 0x002E /* PCM Surround DAC Rate */
++#define AC97_PCM_LFE_DAC_RATE 0x0030 /* PCM LFE DAC Rate */
++#define AC97_PCM_LR_ADC_RATE 0x0032 /* PCM LR ADC Rate */
++#define AC97_PCM_MIC_ADC_RATE 0x0034 /* PCM MIC ADC Rate */
++#define AC97_CENTER_LFE_MASTER 0x0036 /* Center + LFE Master Volume */
++#define AC97_SURROUND_MASTER 0x0038 /* Surround (Rear) Master Volume */
++#define AC97_RESERVED_3A 0x003A /* Reserved in AC '97 < 2.2 */
+
+ /* AC'97 2.2 */
+-#define AC97_SPDIF_CONTROL 0x003A /* S/PDIF Control */
++#define AC97_SPDIF_CONTROL 0x003A /* S/PDIF Control */
+
+ /* range 0x3c-0x58 - MODEM */
+-#define AC97_EXTENDED_MODEM_ID 0x003C
+-#define AC97_EXTEND_MODEM_STAT 0x003E
+-#define AC97_LINE1_RATE 0x0040
+-#define AC97_LINE2_RATE 0x0042
+-#define AC97_HANDSET_RATE 0x0044
+-#define AC97_LINE1_LEVEL 0x0046
+-#define AC97_LINE2_LEVEL 0x0048
+-#define AC97_HANDSET_LEVEL 0x004A
+-#define AC97_GPIO_CONFIG 0x004C
+-#define AC97_GPIO_POLARITY 0x004E
+-#define AC97_GPIO_STICKY 0x0050
+-#define AC97_GPIO_WAKE_UP 0x0052
+-#define AC97_GPIO_STATUS 0x0054
+-#define AC97_MISC_MODEM_STAT 0x0056
+-#define AC97_RESERVED_58 0x0058
++#define AC97_EXTENDED_MODEM_ID 0x003C
++#define AC97_EXTEND_MODEM_STAT 0x003E
++#define AC97_LINE1_RATE 0x0040
++#define AC97_LINE2_RATE 0x0042
++#define AC97_HANDSET_RATE 0x0044
++#define AC97_LINE1_LEVEL 0x0046
++#define AC97_LINE2_LEVEL 0x0048
++#define AC97_HANDSET_LEVEL 0x004A
++#define AC97_GPIO_CONFIG 0x004C
++#define AC97_GPIO_POLARITY 0x004E
++#define AC97_GPIO_STICKY 0x0050
++#define AC97_GPIO_WAKE_UP 0x0052
++#define AC97_GPIO_STATUS 0x0054
++#define AC97_MISC_MODEM_STAT 0x0056
++#define AC97_RESERVED_58 0x0058
++
++#ifdef CONFIG_ARCH_PXA_TOSA
++#define AC97_GPIO_FUNC 0x0056
++#define AC97_ADITFUNC1 0x0058
++#define AC97_ADITFUNC2 0x005c
++#define AC97_ALC_CTL 0x0060
++#define AC97_NOISE_CTL 0x0062
++#define AC97_AUXDAC_CTL 0x0064
++#define AC97_TS_REG1 0x0076
++#define AC97_TS_REG2 0x0078
++#define AC97_TS_READBACK 0x007a
++#endif /* CONFIG_ARCH_PXA_TOSA */
+
+ /* registers 0x005a - 0x007a are vendor reserved */
+-
+-#define AC97_VENDOR_ID1 0x007c
+-#define AC97_VENDOR_ID2 0x007e
++#define AC97_VENDOR_ID1 0x007c
++#define AC97_VENDOR_ID2 0x007e
+
+ /* volume control bit defines */
+-#define AC97_MUTE 0x8000
+-#define AC97_MICBOOST 0x0040
+-#define AC97_LEFTVOL 0x3f00
+-#define AC97_RIGHTVOL 0x003f
++#define AC97_MUTE 0x8000
++#define AC97_MICBOOST 0x0040
++#define AC97_LEFTVOL 0x3f00
++#define AC97_RIGHTVOL 0x003f
+
+ /* record mux defines */
+-#define AC97_RECMUX_MIC 0x0000
+-#define AC97_RECMUX_CD 0x0101
+-#define AC97_RECMUX_VIDEO 0x0202
+-#define AC97_RECMUX_AUX 0x0303
+-#define AC97_RECMUX_LINE 0x0404
+-#define AC97_RECMUX_STEREO_MIX 0x0505
+-#define AC97_RECMUX_MONO_MIX 0x0606
+-#define AC97_RECMUX_PHONE 0x0707
++#define AC97_RECMUX_MIC 0x0000
++#define AC97_RECMUX_CD 0x0101
++#define AC97_RECMUX_VIDEO 0x0202
++#define AC97_RECMUX_AUX 0x0303
++#define AC97_RECMUX_LINE 0x0404
++#define AC97_RECMUX_STEREO_MIX 0x0505
++#define AC97_RECMUX_MONO_MIX 0x0606
++#define AC97_RECMUX_PHONE 0x0707
+
+ /* general purpose register bit defines */
+-#define AC97_GP_LPBK 0x0080 /* Loopback mode */
+-#define AC97_GP_MS 0x0100 /* Mic Select 0=Mic1, 1=Mic2 */
+-#define AC97_GP_MIX 0x0200 /* Mono output select 0=Mix, 1=Mic */
+-#define AC97_GP_RLBK 0x0400 /* Remote Loopback - Modem line codec */
+-#define AC97_GP_LLBK 0x0800 /* Local Loopback - Modem Line codec */
+-#define AC97_GP_LD 0x1000 /* Loudness 1=on */
+-#define AC97_GP_3D 0x2000 /* 3D Enhancement 1=on */
+-#define AC97_GP_ST 0x4000 /* Stereo Enhancement 1=on */
+-#define AC97_GP_POP 0x8000 /* Pcm Out Path, 0=pre 3D, 1=post 3D */
++#define AC97_GP_LPBK 0x0080 /* Loopback mode */
++#define AC97_GP_MS 0x0100 /* Mic Select 0=Mic1, 1=Mic2 */
++#define AC97_GP_MIX 0x0200 /* Mono output select 0=Mix, 1=Mic */
++#define AC97_GP_RLBK 0x0400 /* Remote Loopback - Modem line codec */
++#define AC97_GP_LLBK 0x0800 /* Local Loopback - Modem Line codec */
++#define AC97_GP_LD 0x1000 /* Loudness 1=on */
++#define AC97_GP_3D 0x2000 /* 3D Enhancement 1=on */
++#define AC97_GP_ST 0x4000 /* Stereo Enhancement 1=on */
++#define AC97_GP_POP 0x8000 /* Pcm Out Path, 0=pre 3D, 1=post 3D */
+
+ /* extended audio status and control bit defines */
+-#define AC97_EA_VRA 0x0001 /* Variable bit rate enable bit */
+-#define AC97_EA_DRA 0x0002 /* Double-rate audio enable bit */
+-#define AC97_EA_SPDIF 0x0004 /* S/PDIF Enable bit */
+-#define AC97_EA_VRM 0x0008 /* Variable bit rate for MIC enable bit */
+-#define AC97_EA_CDAC 0x0040 /* PCM Center DAC is ready (Read only) */
+-#define AC97_EA_SDAC 0x0040 /* PCM Surround DACs are ready (Read only) */
+-#define AC97_EA_LDAC 0x0080 /* PCM LFE DAC is ready (Read only) */
+-#define AC97_EA_MDAC 0x0100 /* MIC ADC is ready (Read only) */
+-#define AC97_EA_SPCV 0x0400 /* S/PDIF configuration valid (Read only) */
+-#define AC97_EA_PRI 0x0800 /* Turns the PCM Center DAC off */
+-#define AC97_EA_PRJ 0x1000 /* Turns the PCM Surround DACs off */
+-#define AC97_EA_PRK 0x2000 /* Turns the PCM LFE DAC off */
+-#define AC97_EA_PRL 0x4000 /* Turns the MIC ADC off */
+-#define AC97_EA_SLOT_MASK 0xffcf /* Mask for slot assignment bits */
+-#define AC97_EA_SPSA_3_4 0x0000 /* Slot assigned to 3 & 4 */
+-#define AC97_EA_SPSA_7_8 0x0010 /* Slot assigned to 7 & 8 */
+-#define AC97_EA_SPSA_6_9 0x0020 /* Slot assigned to 6 & 9 */
+-#define AC97_EA_SPSA_10_11 0x0030 /* Slot assigned to 10 & 11 */
++#define AC97_EA_VRA 0x0001 /* Variable bit rate enable bit */
++#define AC97_EA_DRA 0x0002 /* Double-rate audio enable bit */
++#define AC97_EA_SPDIF 0x0004 /* S/PDIF Enable bit */
++#define AC97_EA_VRM 0x0008 /* Variable bit rate for MIC enable bit */
++#define AC97_EA_CDAC 0x0040 /* PCM Center DAC is ready (Read only) */
++#define AC97_EA_SDAC 0x0040 /* PCM Surround DACs are ready (Read only) */
++#define AC97_EA_LDAC 0x0080 /* PCM LFE DAC is ready (Read only) */
++#define AC97_EA_MDAC 0x0100 /* MIC ADC is ready (Read only) */
++#define AC97_EA_SPCV 0x0400 /* S/PDIF configuration valid (Read only) */
++#define AC97_EA_PRI 0x0800 /* Turns the PCM Center DAC off */
++#define AC97_EA_PRJ 0x1000 /* Turns the PCM Surround DACs off */
++#define AC97_EA_PRK 0x2000 /* Turns the PCM LFE DAC off */
++#define AC97_EA_PRL 0x4000 /* Turns the MIC ADC off */
++#define AC97_EA_SLOT_MASK 0xffcf /* Mask for slot assignment bits */
++#define AC97_EA_SPSA_3_4 0x0000 /* Slot assigned to 3 & 4 */
++#define AC97_EA_SPSA_7_8 0x0010 /* Slot assigned to 7 & 8 */
++#define AC97_EA_SPSA_6_9 0x0020 /* Slot assigned to 6 & 9 */
++#define AC97_EA_SPSA_10_11 0x0030 /* Slot assigned to 10 & 11 */
+
+ /* S/PDIF control bit defines */
+-#define AC97_SC_PRO 0x0001 /* Professional status */
+-#define AC97_SC_NAUDIO 0x0002 /* Non audio stream */
+-#define AC97_SC_COPY 0x0004 /* Copyright status */
+-#define AC97_SC_PRE 0x0008 /* Preemphasis status */
+-#define AC97_SC_CC_MASK 0x07f0 /* Category Code mask */
+-#define AC97_SC_L 0x0800 /* Generation Level status */
+-#define AC97_SC_SPSR_MASK 0xcfff /* S/PDIF Sample Rate bits */
+-#define AC97_SC_SPSR_44K 0x0000 /* Use 44.1kHz Sample rate */
+-#define AC97_SC_SPSR_48K 0x2000 /* Use 48kHz Sample rate */
+-#define AC97_SC_SPSR_32K 0x3000 /* Use 32kHz Sample rate */
+-#define AC97_SC_DRS 0x4000 /* Double Rate S/PDIF */
+-#define AC97_SC_V 0x8000 /* Validity status */
++#define AC97_SC_PRO 0x0001 /* Professional status */
++#define AC97_SC_NAUDIO 0x0002 /* Non audio stream */
++#define AC97_SC_COPY 0x0004 /* Copyright status */
++#define AC97_SC_PRE 0x0008 /* Preemphasis status */
++#define AC97_SC_CC_MASK 0x07f0 /* Category Code mask */
++#define AC97_SC_L 0x0800 /* Generation Level status */
++#define AC97_SC_SPSR_MASK 0xcfff /* S/PDIF Sample Rate bits */
++#define AC97_SC_SPSR_44K 0x0000 /* Use 44.1kHz Sample rate */
++#define AC97_SC_SPSR_48K 0x2000 /* Use 48kHz Sample rate */
++#define AC97_SC_SPSR_32K 0x3000 /* Use 32kHz Sample rate */
++#define AC97_SC_DRS 0x4000 /* Double Rate S/PDIF */
++#define AC97_SC_V 0x8000 /* Validity status */
+
+ /* powerdown control and status bit defines */
+
+@@ -143,6 +169,39 @@
+ #define AC97_PWR_PR6 0x4000 /* HP amp powerdown */
+ #define AC97_PWR_PR7 0x8000 /* Modem off - if supported */
+
++/* extended audio ID register bit defines */
++#define AC97_EXTID_VRA 0x0001
++#define AC97_EXTID_DRA 0x0002
++#define AC97_EXTID_SPDIF 0x0004
++#define AC97_EXTID_VRM 0x0008
++#define AC97_EXTID_DSA0 0x0010
++#define AC97_EXTID_DSA1 0x0020
++#define AC97_EXTID_CDAC 0x0040
++#define AC97_EXTID_SDAC 0x0080
++#define AC97_EXTID_LDAC 0x0100
++#define AC97_EXTID_AMAP 0x0200
++#define AC97_EXTID_REV0 0x0400
++#define AC97_EXTID_REV1 0x0800
++#define AC97_EXTID_ID0 0x4000
++#define AC97_EXTID_ID1 0x8000
++
++/* extended status register bit defines */
++#define AC97_EXTSTAT_VRA 0x0001
++#define AC97_EXTSTAT_DRA 0x0002
++#define AC97_EXTSTAT_SPDIF 0x0004
++#define AC97_EXTSTAT_VRM 0x0008
++#define AC97_EXTSTAT_SPSA0 0x0010
++#define AC97_EXTSTAT_SPSA1 0x0020
++#define AC97_EXTSTAT_CDAC 0x0040
++#define AC97_EXTSTAT_SDAC 0x0080
++#define AC97_EXTSTAT_LDAC 0x0100
++#define AC97_EXTSTAT_MADC 0x0200
++#define AC97_EXTSTAT_SPCV 0x0400
++#define AC97_EXTSTAT_PRI 0x0800
++#define AC97_EXTSTAT_PRJ 0x1000
++#define AC97_EXTSTAT_PRK 0x2000
++#define AC97_EXTSTAT_PRL 0x4000
++
+ /* useful power states */
+ #define AC97_PWR_D0 0x0000 /* everything on */
+ #define AC97_PWR_D1 AC97_PWR_PR0|AC97_PWR_PR1|AC97_PWR_PR4
+@@ -189,11 +248,18 @@
+ int dev_mixer;
+ int type;
+
++ int modem:1;
++
+ struct ac97_ops *codec_ops;
+
+ /* controller specific lower leverl ac97 accessing routines */
+ u16 (*codec_read) (struct ac97_codec *codec, u8 reg);
+ void (*codec_write) (struct ac97_codec *codec, u8 reg, u16 val);
++#ifdef CONFIG_ARCH_PXA_TOSA
++ void (*codec_bit_clear) (struct ac97_codec *codec, u8 reg, u16 val);
++ void (*codec_bit_set) (struct ac97_codec *codec, u8 reg, u16 val);
++ int mixer_busy;
++#endif /* CONFIG_ARCH_PXA_TOSA */
+
+ /* Wait for codec-ready. Ok to sleep here. */
+ void (*codec_wait) (struct ac97_codec *codec);
+@@ -204,6 +270,9 @@
+ int stereo_mixers;
+ int record_sources;
+
++ /* Property flags */
++ int flags;
++
+ int bit_resolution;
+
+ /* OSS mixer interface */
+@@ -232,6 +301,8 @@
+ int (*amplifier)(struct ac97_codec *codec, int on);
+ /* Digital mode control */
+ int (*digital)(struct ac97_codec *codec, int format);
++#define AC97_DELUDED_MODEM 1 /* Audio codec reports its a modem */
++#define AC97_NO_PCM_VOLUME 2 /* Volume control is missing */
+ };
+
+ extern int ac97_read_proc (char *page_out, char **start, off_t off,
+@@ -242,4 +313,8 @@
+ extern int ac97_save_state(struct ac97_codec *codec);
+ extern int ac97_restore_state(struct ac97_codec *codec);
+
++#ifdef CONFIG_ARCH_PXA_TOSA
++#include <asm/arch/tosa_ac97_codec.h>
++#endif /* CONFIG_ARCH_PXA_TOSA */
++
+ #endif /* _AC97_CODEC_H_ */
+diff -Nur linux_c860_org/include/linux/brlock.h linux/include/linux/brlock.h
+--- linux_c860_org/include/linux/brlock.h 2002-08-26 14:37:46.000000000 +0900
++++ linux/include/linux/brlock.h 2004-06-10 21:12:50.000000000 +0900
+@@ -171,11 +171,11 @@
+ }
+
+ #else
+-# define br_read_lock(idx) ((void)(idx))
+-# define br_read_unlock(idx) ((void)(idx))
+-# define br_write_lock(idx) ((void)(idx))
+-# define br_write_unlock(idx) ((void)(idx))
+-#endif
++# define br_read_lock(idx) ({ (void)(idx); preempt_disable(); })
++# define br_read_unlock(idx) ({ (void)(idx); preempt_enable(); })
++# define br_write_lock(idx) ({ (void)(idx); preempt_disable(); })
++# define br_write_unlock(idx) ({ (void)(idx); preempt_enable(); })
++#endif /* CONFIG_SMP */
+
+ /*
+ * Now enumerate all of the possible sw/hw IRQ protected
+diff -Nur linux_c860_org/include/linux/dcache.h linux/include/linux/dcache.h
+--- linux_c860_org/include/linux/dcache.h 2002-12-18 19:52:24.000000000 +0900
++++ linux/include/linux/dcache.h 2004-06-10 21:12:37.000000000 +0900
+@@ -129,31 +129,6 @@
+
+ extern spinlock_t dcache_lock;
+
+-/**
+- * d_drop - drop a dentry
+- * @dentry: dentry to drop
+- *
+- * d_drop() unhashes the entry from the parent
+- * dentry hashes, so that it won't be found through
+- * a VFS lookup any more. Note that this is different
+- * from deleting the dentry - d_delete will try to
+- * mark the dentry negative if possible, giving a
+- * successful _negative_ lookup, while d_drop will
+- * just make the cache lookup fail.
+- *
+- * d_drop() is used mainly for stuff that wants
+- * to invalidate a dentry for some reason (NFS
+- * timeouts or autofs deletes).
+- */
+-
+-static __inline__ void d_drop(struct dentry * dentry)
+-{
+- spin_lock(&dcache_lock);
+- list_del(&dentry->d_hash);
+- INIT_LIST_HEAD(&dentry->d_hash);
+- spin_unlock(&dcache_lock);
+-}
+-
+ static __inline__ int dname_external(struct dentry *d)
+ {
+ return d->d_name.name != d->d_iname;
+@@ -281,3 +256,34 @@
+ #endif /* __KERNEL__ */
+
+ #endif /* __LINUX_DCACHE_H */
++
++#if !defined(__LINUX_DCACHE_H_INLINES) && defined(_TASK_STRUCT_DEFINED)
++#define __LINUX_DCACHE_H_INLINES
++
++#ifdef __KERNEL__
++/**
++ * d_drop - drop a dentry
++ * @dentry: dentry to drop
++ *
++ * d_drop() unhashes the entry from the parent
++ * dentry hashes, so that it won't be found through
++ * a VFS lookup any more. Note that this is different
++ * from deleting the dentry - d_delete will try to
++ * mark the dentry negative if possible, giving a
++ * successful _negative_ lookup, while d_drop will
++ * just make the cache lookup fail.
++ *
++ * d_drop() is used mainly for stuff that wants
++ * to invalidate a dentry for some reason (NFS
++ * timeouts or autofs deletes).
++ */
++
++static __inline__ void d_drop(struct dentry * dentry)
++{
++ spin_lock(&dcache_lock);
++ list_del(&dentry->d_hash);
++ INIT_LIST_HEAD(&dentry->d_hash);
++ spin_unlock(&dcache_lock);
++}
++#endif
++#endif
+diff -Nur linux_c860_org/include/linux/fb_doublebyte.h linux/include/linux/fb_doublebyte.h
+--- linux_c860_org/include/linux/fb_doublebyte.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/include/linux/fb_doublebyte.h 2004-06-10 21:09:11.000000000 +0900
+@@ -0,0 +1,43 @@
++/*
++ * linux/include/linux/fb_widechar.h
++ *
++ * Copyright (C) 1999 Christopher Li, Jim Chen
++ * GNU/Linux Research Center
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive
++ * for more details.
++ *
++ *
++ */
++
++#ifndef _LINUX_FB_DOUBLEBYTE_H
++#define _LINUX_FB_DOUBLEbYTE_H
++
++#define DB_VALIDATE 0x8000
++#define DB_RIGHT_MASK 0x4000
++#define DB_HALF_MASK 0x2000
++#define DB_SYMBOL 0x1000
++#define DB_ASCII 0
++
++#define DB_RIGHT (DB_VALIDATE|DB_RIGHT_MASK)
++#define DB_LEFT (DB_VALIDATE)
++#define DB_NUM 8
++
++#define DB_INDEX_ERROR -512
++struct double_byte
++{
++ unsigned int num;
++ char name[16];
++ int (*is_left)(int );
++ int (*is_right)(int );
++ int (*font_index)(int left,int right);
++ unsigned int width,height; /* right now only support 16x16 */
++ int charcount;
++ unsigned char * font_data;
++};
++extern int register_doublebyte(struct double_byte *);
++extern int unregister_doublebyte(struct double_byte *);
++extern struct double_byte * doublebyte_encodeing[DB_NUM];
++extern struct double_byte * doublebyte_default;
++#endif
+diff -Nur linux_c860_org/include/linux/fs_struct.h linux/include/linux/fs_struct.h
+--- linux_c860_org/include/linux/fs_struct.h 2002-08-26 14:37:46.000000000 +0900
++++ linux/include/linux/fs_struct.h 2004-06-10 21:09:11.000000000 +0900
+@@ -20,6 +20,15 @@
+ extern void exit_fs(struct task_struct *);
+ extern void set_fs_altroot(void);
+
++struct fs_struct *copy_fs_struct(struct fs_struct *old);
++void put_fs_struct(struct fs_struct *fs);
++
++#endif
++#endif
++
++#if !defined(_LINUX_FS_STRUCT_H_INLINES) && defined(_TASK_STRUCT_DEFINED)
++#define _LINUX_FS_STRUCT_H_INLINES
++#ifdef __KERNEL__
+ /*
+ * Replace the fs->{rootmnt,root} with {mnt,dentry}. Put the old values.
+ * It can block. Requires the big lock held.
+@@ -65,9 +74,5 @@
+ mntput(old_pwdmnt);
+ }
+ }
+-
+-struct fs_struct *copy_fs_struct(struct fs_struct *old);
+-void put_fs_struct(struct fs_struct *fs);
+-
+ #endif
+ #endif
+diff -Nur linux_c860_org/include/linux/jffs2_fs_sb.h linux/include/linux/jffs2_fs_sb.h
+--- linux_c860_org/include/linux/jffs2_fs_sb.h 2003-05-14 15:01:52.000000000 +0900
++++ linux/include/linux/jffs2_fs_sb.h 2004-06-10 21:12:37.000000000 +0900
+@@ -16,6 +16,7 @@
+ * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility
+ * 05-Nov-2002 Lineo Japan, Inc. modify nr_bad_blocks type
+ * 29-Oct-2002 Lineo Japan, Inc. add member nr_bad_blocks and cont_gc_count
++ * 05-Aug-2003 SHARP for Tosa
+ *
+ */
+
+@@ -81,7 +82,7 @@
+ uint32_t nr_blocks;
+ struct jffs2_eraseblock *blocks; /* The whole array of blocks. Used for getting blocks
+ * from the offset (blocks[ofs / sector_size]) */
+-#ifdef CONFIG_ARCH_PXA_HUSKY
++#if defined(CONFIG_ARCH_PXA_HUSKY) || defined(CONFIG_ARCH_PXA_TOSA)
+ dma_addr_t blocks_phys;
+ #endif
+ struct jffs2_eraseblock *nextblock; /* The block we're currently filling */
+diff -Nur linux_c860_org/include/linux/lock_break.h linux/include/linux/lock_break.h
+--- linux_c860_org/include/linux/lock_break.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/include/linux/lock_break.h 2004-06-10 21:09:11.000000000 +0900
+@@ -0,0 +1,84 @@
++/*
++ * include/linux/lock_break.h - lock breaking routines
++ *
++ * since in-kernel preemption can not occur while a lock is
++ * held, we can drop and reacquire long-held locks when they are
++ * in a natural quiescent state to further lower system latency.
++ *
++ * (C) 2001 Robert Love
++ *
++ */
++
++#ifndef _LINUX_LOCK_BREAK_H
++#define _LINUX_LOCK_BREAK_H
++
++#include <linux/compiler.h>
++
++/*
++ * setting this to 1 will instruct debug_lock_break to
++ * note when the expected lock count does not equal the
++ * actual count. if the lock count is higher than expected,
++ * we aren't dropping enough locks. if it is 0, we are
++ * wasting our time since the system is already preemptible.
++ */
++#ifndef DEBUG_LOCK_BREAK
++#define DEBUG_LOCK_BREAK 0
++#endif
++
++#ifdef CONFIG_LOCK_BREAK
++
++#define conditional_schedule_needed() (unlikely(current->need_resched))
++
++/*
++ * setting the task's state to TASK_RUNNING is nothing but paranoia,
++ * in the case where a task is delinquent in properly putting itself
++ * to sleep. we should test without it.
++ */
++#define unconditional_schedule() do { \
++ __set_current_state(TASK_RUNNING); \
++ schedule(); \
++} while(0)
++
++#define conditional_schedule() do { \
++ if (conditional_schedule_needed()) \
++ unconditional_schedule(); \
++} while(0)
++
++#define break_spin_lock(n) do { \
++ spin_unlock(n); \
++ spin_lock(n); \
++} while(0)
++
++#define break_spin_lock_and_resched(n) do { \
++ spin_unlock(n); \
++ conditional_schedule(); \
++ spin_lock(n); \
++} while(0)
++
++#if DEBUG_LOCK_BREAK
++#define debug_lock_break(n) do { \
++ if (current->preempt_count != n) \
++ printk(KERN_ERR "lock_break: %s:%d: count was %d not %d\n", \
++ __FILE__, __LINE__, current->preempt_count, n); \
++} while(0)
++#else
++#define debug_lock_break(n)
++#endif
++
++#define DEFINE_LOCK_COUNT() int _lock_break_count = 0
++#define TEST_LOCK_COUNT(n) (++_lock_break_count > (n))
++#define RESET_LOCK_COUNT() _lock_break_count = 0
++
++#else
++#define unconditional_schedule()
++#define conditional_schedule()
++#define conditional_schedule_needed() 0
++#define break_spin_lock(n)
++#define break_spin_lock_and_resched(n)
++#define debug_lock_break(n)
++#define DEFINE_LOCK_COUNT()
++#define TEST_LOCK_COUNT(n) 0
++#define RESET_LOCK_COUNT()
++#endif
++
++#endif /* _LINUX_LOCK_BREAK_H */
+diff -Nur linux_c860_org/include/linux/mm.h linux/include/linux/mm.h
+--- linux_c860_org/include/linux/mm.h 2003-01-29 14:45:03.000000000 +0900
++++ linux/include/linux/mm.h 2004-06-10 21:12:37.000000000 +0900
+@@ -126,6 +126,9 @@
+ */
+ extern pgprot_t protection_map[16];
+
++#define ZPR_MAX_BYTES 256*PAGE_SIZE
++#define ZPR_NORMAL 0 /* perform zap_page_range request in one walk */
++#define ZPR_PARTITION 1 /* partition into a series of smaller operations */
+
+ /*
+ * These are the virtual MM functions - opening of an area, closing and
+@@ -409,7 +412,7 @@
+ extern void shmem_lock(struct file * file, int lock);
+ extern int shmem_zero_setup(struct vm_area_struct *);
+
+-extern void zap_page_range(struct mm_struct *mm, unsigned long address, unsigned long size);
++extern void zap_page_range(struct mm_struct *mm, unsigned long address, unsigned long size, int actions);
+ extern int copy_page_range(struct mm_struct *dst, struct mm_struct *src, struct vm_area_struct *vma);
+ extern int remap_page_range(unsigned long from, unsigned long to, unsigned long size, pgprot_t prot);
+ extern int zeromap_page_range(unsigned long from, unsigned long size, pgprot_t prot);
+diff -Nur linux_c860_org/include/linux/ppp-comp.h linux/include/linux/ppp-comp.h
+--- linux_c860_org/include/linux/ppp-comp.h 2002-08-26 14:37:45.000000000 +0900
++++ linux/include/linux/ppp-comp.h 2004-06-10 21:09:11.000000000 +0900
+@@ -24,11 +24,11 @@
+ * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
+ * OR MODIFICATIONS.
+ *
+- * $Id: ppp-comp.h,v 1.6 1997/11/27 06:04:44 paulus Exp $
++ * $Id: ppp-comp.h,v 1.8 1999/07/23 06:53:40 paulus Exp $
+ */
+
+ /*
+- * ==FILEVERSION 980319==
++ * ==FILEVERSION 990623==
+ *
+ * NOTE TO MAINTAINERS:
+ * If you modify this file at all, please set the above date.
+@@ -120,6 +120,7 @@
+ * Don't you just lurve software patents.
+ */
+
++#define DECOMP_OK 0 /* no error occured */
+ #define DECOMP_ERROR -1 /* error detected before decomp. */
+ #define DECOMP_FATALERROR -2 /* error detected after decomp. */
+
+@@ -138,7 +139,7 @@
+ * Max # bytes for a CCP option
+ */
+
+-#define CCP_MAX_OPTION_LENGTH 32
++#define CCP_MAX_OPTION_LENGTH 64
+
+ /*
+ * Parts of a CCP packet.
+@@ -187,6 +188,20 @@
+ #define DEFLATE_CHK_SEQUENCE 0
+
+ /*
++ * Definitions for MPPE.
++ */
++
++#define CI_MPPE 18 /* config. option for MPPE */
++#define CILEN_MPPE 6 /* length of config. option */
++
++/*
++ * Definitions for Stac LZS.
++ */
++
++#define CI_LZS 17 /* config option for Stac LZS */
++#define CILEN_LZS 5 /* length of config option */
++
++/*
+ * Definitions for other, as yet unsupported, compression methods.
+ */
+
+diff -Nur linux_c860_org/include/linux/sched.h linux/include/linux/sched.h
+--- linux_c860_org/include/linux/sched.h 2002-12-18 19:29:48.000000000 +0900
++++ linux/include/linux/sched.h 2004-06-10 21:12:37.000000000 +0900
+@@ -31,6 +31,7 @@
+ #include <linux/signal.h>
+ #include <linux/securebits.h>
+ #include <linux/fs_struct.h>
++#include <linux/lock_break.h>
+
+ struct exec_domain;
+
+@@ -93,6 +94,7 @@
+ #define TASK_UNINTERRUPTIBLE 2
+ #define TASK_ZOMBIE 4
+ #define TASK_STOPPED 8
++#define PREEMPT_ACTIVE 0x4000000
+
+ #define __set_task_state(tsk, state_value) \
+ do { (tsk)->state = (state_value); } while (0)
+@@ -159,6 +161,9 @@
+ #define MAX_SCHEDULE_TIMEOUT LONG_MAX
+ extern signed long FASTCALL(schedule_timeout(signed long timeout));
+ asmlinkage void schedule(void);
++#ifdef CONFIG_PREEMPT
++asmlinkage void preempt_schedule(void);
++#endif
+
+ extern int schedule_task(struct tq_struct *task);
+ extern void flush_scheduled_tasks(void);
+@@ -288,7 +293,7 @@
+ * offsets of these are hardcoded elsewhere - touch with care
+ */
+ volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
+- unsigned long flags; /* per process flags, defined below */
++ int preempt_count; /* 0 => preemptable, <0 => BUG */
+ int sigpending;
+ mm_segment_t addr_limit; /* thread address space:
+ 0-0xBFFFFFFF for user-thead
+@@ -330,6 +335,7 @@
+ struct mm_struct *active_mm;
+ struct list_head local_pages;
+ unsigned int allocation_order, nr_local_pages;
++ unsigned long flags;
+
+ /* task state */
+ struct linux_binfmt *binfmt;
+@@ -338,6 +344,7 @@
+ /* ??? */
+ unsigned long personality;
+ int did_exec:1;
++ unsigned task_dumpable:1;
+ pid_t pid;
+ pid_t pgrp;
+ pid_t tty_old_pgrp;
+@@ -505,6 +512,8 @@
+ #define PT_TRACESYSGOOD 0x00000008
+ #define PT_PTRACE_CAP 0x00000010 /* ptracer can follow suid-exec */
+
++#define is_dumpable(tsk) (((tsk)->task_dumpable) && (((tsk)->mm != NULL) && (tsk)->mm->dumpable))
++
+ /*
+ * Limit the stack by to some sane default: root can always
+ * increase this limit if needed.. 8MB seems reasonable.
+@@ -854,6 +863,8 @@
+ extern int do_execve(char *, char **, char **, struct pt_regs *);
+ extern int do_fork(unsigned long, unsigned long, struct pt_regs *, unsigned long);
+
++extern long kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
++
+ extern void FASTCALL(add_wait_queue(wait_queue_head_t *q, wait_queue_t * wait));
+ extern void FASTCALL(add_wait_queue_exclusive(wait_queue_head_t *q, wait_queue_t * wait));
+ extern void FASTCALL(remove_wait_queue(wait_queue_head_t *q, wait_queue_t * wait));
+@@ -992,6 +1003,11 @@
+ return res;
+ }
+
++#define _TASK_STRUCT_DEFINED
++#include <linux/dcache.h>
++#include <linux/tqueue.h>
++#include <linux/fs_struct.h>
++
+ #endif /* __KERNEL__ */
+
+ #endif
+diff -Nur linux_c860_org/include/linux/smp.h linux/include/linux/smp.h
+--- linux_c860_org/include/linux/smp.h 2002-08-26 14:37:45.000000000 +0900
++++ linux/include/linux/smp.h 2004-06-10 21:12:36.000000000 +0900
+@@ -81,11 +81,17 @@
+ #define smp_processor_id() 0
+ #define hard_smp_processor_id() 0
+ #define smp_threads_ready 1
++#ifndef CONFIG_PREEMPT
+ #define kernel_lock()
++#endif
+ #define cpu_logical_map(cpu) 0
+ #define cpu_number_map(cpu) 0
+ #define smp_call_function(func,info,retry,wait) ({ 0; })
+ #define cpu_online_map 1
+
+-#endif
+-#endif
++#endif /* !SMP */
++
++#define get_cpu() smp_processor_id()
++#define put_cpu() do { } while(0)
++
++#endif /* __LINUX_SMP_H */
+diff -Nur linux_c860_org/include/linux/smp_lock.h linux/include/linux/smp_lock.h
+--- linux_c860_org/include/linux/smp_lock.h 2002-08-26 14:37:45.000000000 +0900
++++ linux/include/linux/smp_lock.h 2004-06-10 21:12:37.000000000 +0900
+@@ -3,7 +3,7 @@
+
+ #include <linux/config.h>
+
+-#ifndef CONFIG_SMP
++#if !defined(CONFIG_SMP) && !defined(CONFIG_PREEMPT)
+
+ #define lock_kernel() do { } while(0)
+ #define unlock_kernel() do { } while(0)
+diff -Nur linux_c860_org/include/linux/spinlock.h linux/include/linux/spinlock.h
+--- linux_c860_org/include/linux/spinlock.h 2002-08-26 14:37:46.000000000 +0900
++++ linux/include/linux/spinlock.h 2004-06-10 21:12:37.000000000 +0900
+@@ -2,6 +2,7 @@
+ #define __LINUX_SPINLOCK_H
+
+ #include <linux/config.h>
++#include <linux/compiler.h>
+
+ /*
+ * These are the generic versions of the spinlocks and read-write
+@@ -45,8 +46,10 @@
+
+ #if (DEBUG_SPINLOCKS < 1)
+
++#ifndef CONFIG_PREEMPT
+ #define atomic_dec_and_lock(atomic,lock) atomic_dec_and_test(atomic)
+ #define ATOMIC_DEC_AND_LOCK
++#endif
+
+ /*
+ * Your basic spinlocks, allowing only a single CPU anywhere
+@@ -62,11 +65,11 @@
+ #endif
+
+ #define spin_lock_init(lock) do { } while(0)
+-#define spin_lock(lock) (void)(lock) /* Not "unused variable". */
++#define _raw_spin_lock(lock) (void)(lock) /* Not "unused variable". */
+ #define spin_is_locked(lock) (0)
+-#define spin_trylock(lock) ({1; })
++#define _raw_spin_trylock(lock) ({1; })
+ #define spin_unlock_wait(lock) do { } while(0)
+-#define spin_unlock(lock) do { } while(0)
++#define _raw_spin_unlock(lock) do { } while(0)
+
+ #elif (DEBUG_SPINLOCKS < 2)
+
+@@ -125,13 +128,78 @@
+ #endif
+
+ #define rwlock_init(lock) do { } while(0)
+-#define read_lock(lock) (void)(lock) /* Not "unused variable". */
+-#define read_unlock(lock) do { } while(0)
+-#define write_lock(lock) (void)(lock) /* Not "unused variable". */
+-#define write_unlock(lock) do { } while(0)
++#define _raw_read_lock(lock) (void)(lock) /* Not "unused variable". */
++#define _raw_read_unlock(lock) do { } while(0)
++#define _raw_write_lock(lock) (void)(lock) /* Not "unused variable". */
++#define _raw_write_unlock(lock) do { } while(0)
+
+ #endif /* !SMP */
+
++#ifdef CONFIG_PREEMPT
++
++#define preempt_get_count() (current->preempt_count)
++#define preempt_is_disabled() (preempt_get_count() != 0)
++
++#define preempt_disable() \
++do { \
++ ++current->preempt_count; \
++ barrier(); \
++} while (0)
++
++#define preempt_enable_no_resched() \
++do { \
++ --current->preempt_count; \
++ barrier(); \
++} while (0)
++
++#define preempt_enable() \
++do { \
++ --current->preempt_count; \
++ barrier(); \
++ if (unlikely(current->preempt_count < current->need_resched)) \
++ preempt_schedule(); \
++} while (0)
++
++#define spin_lock(lock) \
++do { \
++ preempt_disable(); \
++ _raw_spin_lock(lock); \
++} while(0)
++
++#define spin_trylock(lock) ({preempt_disable(); _raw_spin_trylock(lock) ? \
++ 1 : ({preempt_enable(); 0;});})
++#define spin_unlock(lock) \
++do { \
++ _raw_spin_unlock(lock); \
++ preempt_enable(); \
++} while (0)
++
++#define read_lock(lock) ({preempt_disable(); _raw_read_lock(lock);})
++#define read_unlock(lock) ({_raw_read_unlock(lock); preempt_enable();})
++#define write_lock(lock) ({preempt_disable(); _raw_write_lock(lock);})
++#define write_unlock(lock) ({_raw_write_unlock(lock); preempt_enable();})
++#define write_trylock(lock) ({preempt_disable();_raw_write_trylock(lock) ? \
++ 1 : ({preempt_enable(); 0;});})
++
++#else
++
++#define preempt_get_count() (0)
++#define preempt_is_disabled() (1)
++#define preempt_disable() do { } while (0)
++#define preempt_enable_no_resched() do {} while(0)
++#define preempt_enable() do { } while (0)
++
++#define spin_lock(lock) _raw_spin_lock(lock)
++#define spin_trylock(lock) _raw_spin_trylock(lock)
++#define spin_unlock(lock) _raw_spin_unlock(lock)
++
++#define read_lock(lock) _raw_read_lock(lock)
++#define read_unlock(lock) _raw_read_unlock(lock)
++#define write_lock(lock) _raw_write_lock(lock)
++#define write_unlock(lock) _raw_write_unlock(lock)
++#define write_trylock(lock) _raw_write_trylock(lock)
++#endif
++
+ /* "lock on reference count zero" */
+ #ifndef ATOMIC_DEC_AND_LOCK
+ #include <asm/atomic.h>
+diff -Nur linux_c860_org/include/linux/tqueue.h linux/include/linux/tqueue.h
+--- linux_c860_org/include/linux/tqueue.h 2002-08-26 14:37:44.000000000 +0900
++++ linux/include/linux/tqueue.h 2004-06-10 21:12:37.000000000 +0900
+@@ -94,6 +94,22 @@
+ extern spinlock_t tqueue_lock;
+
+ /*
++ * Call all "bottom halfs" on a given list.
++ */
++
++extern void __run_task_queue(task_queue *list);
++
++static inline void run_task_queue(task_queue *list)
++{
++ if (TQ_ACTIVE(*list))
++ __run_task_queue(list);
++}
++
++#endif /* _LINUX_TQUEUE_H */
++
++#if !defined(_LINUX_TQUEUE_H_INLINES) && defined(_TASK_STRUCT_DEFINED)
++#define _LINUX_TQUEUE_H_INLINES
++/*
+ * Queue a task on a tq. Return non-zero if it was successfully
+ * added.
+ */
+@@ -109,17 +125,4 @@
+ }
+ return ret;
+ }
+-
+-/*
+- * Call all "bottom halfs" on a given list.
+- */
+-
+-extern void __run_task_queue(task_queue *list);
+-
+-static inline void run_task_queue(task_queue *list)
+-{
+- if (TQ_ACTIVE(*list))
+- __run_task_queue(list);
+-}
+-
+-#endif /* _LINUX_TQUEUE_H */
++#endif
+diff -Nur linux_c860_org/include/linux/tty_flip.h linux/include/linux/tty_flip.h
+--- linux_c860_org/include/linux/tty_flip.h 2002-08-26 14:37:44.000000000 +0900
++++ linux/include/linux/tty_flip.h 2004-06-10 21:12:59.000000000 +0900
+@@ -7,9 +7,22 @@
+ #define _INLINE_ static __inline__
+ #endif
+
++#ifdef CONFIG_UNICON
++extern int (*Unicon_fnKeyHook) (struct tty_struct *tty,
++ unsigned char ch, char flag);
++#endif
+ _INLINE_ void tty_insert_flip_char(struct tty_struct *tty,
+- unsigned char ch, char flag)
++ unsigned char ch, char flag)
+ {
++ #ifdef CONFIG_UNICON
++ if (Unicon_fnKeyHook != NULL)
++ {
++ /* return 1 ==> processed by kernel
++ return 0 ==> processed by app */
++ if ((*Unicon_fnKeyHook) (tty, ch, flag) == 1)
++ return;
++ }
++ #endif
+ if (tty->flip.count < TTY_FLIPBUF_SIZE) {
+ tty->flip.count++;
+ *tty->flip.flag_buf_ptr++ = flag;
+diff -Nur linux_c860_org/include/net/irda/irlmp.h linux/include/net/irda/irlmp.h
+--- linux_c860_org/include/net/irda/irlmp.h 2002-08-29 12:24:49.000000000 +0900
++++ linux/include/net/irda/irlmp.h 2004-06-10 21:13:39.000000000 +0900
+@@ -21,6 +21,9 @@
+ * Neither Dag Brattli nor University of Tromsø admit liability nor
+ * provide warranty for any of this software. This material is
+ * provided "AS-IS" and at no charge.
++ *
++ * ChangeLog:
++ * 1-Nov-2003 Sharp Corporation for Tosa
+ *
+ ********************************************************************/
+
+@@ -181,6 +184,9 @@
+ int running;
+
+ __u16_host_order hints; /* Hint bits */
++#if defined(CONFIG_ARCH_SHARP_SL)
++ int discovery_retry; /* Discovery retry flag at media busy */
++#endif
+ };
+
+ /* Prototype declarations */
+diff -Nur linux_c860_org/include/openssl/opensslconf.h linux/include/openssl/opensslconf.h
+--- linux_c860_org/include/openssl/opensslconf.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/include/openssl/opensslconf.h 2004-06-10 21:09:11.000000000 +0900
+@@ -0,0 +1,176 @@
++/* opensslconf.h */
++/* WARNING: Generated automatically from opensslconf.h.in by Configure. */
++
++/* OpenSSL was configured with the following options: */
++#ifdef OPENSSL_ALGORITHM_DEFINES
++ /* no ciphers excluded */
++#endif
++#ifdef OPENSSL_THREAD_DEFINES
++# ifndef THREADS
++# define THREADS
++# endif
++#endif
++#ifdef OPENSSL_OTHER_DEFINES
++# ifndef DSO_DLFCN
++# define DSO_DLFCN
++# endif
++# ifndef HAVE_DLFCN_H
++# define HAVE_DLFCN_H
++# endif
++#endif
++
++/* crypto/opensslconf.h.in */
++
++/* Generate 80386 code? */
++#undef I386_ONLY
++
++#if !(defined(VMS) || defined(__VMS)) /* VMS uses logical names instead */
++#if defined(HEADER_CRYPTLIB_H) && !defined(OPENSSLDIR)
++#define OPENSSLDIR "/usr/local/ssl"
++#endif
++#endif
++
++#define OPENSSL_UNISTD <unistd.h>
++
++#if defined(HEADER_IDEA_H) && !defined(IDEA_INT)
++#define IDEA_INT unsigned int
++#endif
++
++#if defined(HEADER_MD2_H) && !defined(MD2_INT)
++#define MD2_INT unsigned int
++#endif
++
++#if defined(HEADER_RC2_H) && !defined(RC2_INT)
++/* I need to put in a mod for the alpha - eay */
++#define RC2_INT unsigned int
++#endif
++
++#if defined(HEADER_RC4_H)
++#if !defined(RC4_INT)
++/* using int types make the structure larger but make the code faster
++ * on most boxes I have tested - up to %20 faster. */
++/*
++ * I don't know what does "most" mean, but declaring "int" is a must on:
++ * - Intel P6 because partial register stalls are very expensive;
++ * - elder Alpha because it lacks byte load/store instructions;
++ */
++#define RC4_INT unsigned int
++#endif
++#if !defined(RC4_CHUNK)
++/*
++ * This enables code handling data aligned at natural CPU word
++ * boundary. See crypto/rc4/rc4_enc.c for further details.
++ */
++#undef RC4_CHUNK
++#endif
++#endif
++
++#if defined(HEADER_DES_H) && !defined(DES_LONG)
++/* If this is set to 'unsigned int' on a DEC Alpha, this gives about a
++ * %20 speed up (longs are 8 bytes, int's are 4). */
++#ifndef DES_LONG
++#define DES_LONG unsigned long
++#endif
++#endif
++
++#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H)
++#define CONFIG_HEADER_BN_H
++#define BN_LLONG
++
++/* Should we define BN_DIV2W here? */
++
++/* Only one for the following should be defined */
++/* The prime number generation stuff may not work when
++ * EIGHT_BIT but I don't care since I've only used this mode
++ * for debuging the bignum libraries */
++#undef SIXTY_FOUR_BIT_LONG
++#undef SIXTY_FOUR_BIT
++#define THIRTY_TWO_BIT
++#undef SIXTEEN_BIT
++#undef EIGHT_BIT
++#endif
++
++#if defined(HEADER_RC4_LOCL_H) && !defined(CONFIG_HEADER_RC4_LOCL_H)
++#define CONFIG_HEADER_RC4_LOCL_H
++/* if this is defined data[i] is used instead of *data, this is a %20
++ * speedup on x86 */
++#define RC4_INDEX
++#endif
++
++#if defined(HEADER_BF_LOCL_H) && !defined(CONFIG_HEADER_BF_LOCL_H)
++#define CONFIG_HEADER_BF_LOCL_H
++#undef BF_PTR
++#endif /* HEADER_BF_LOCL_H */
++
++#if defined(HEADER_DES_LOCL_H) && !defined(CONFIG_HEADER_DES_LOCL_H)
++#define CONFIG_HEADER_DES_LOCL_H
++#ifndef DES_DEFAULT_OPTIONS
++/* the following is tweaked from a config script, that is why it is a
++ * protected undef/define */
++#ifndef DES_PTR
++#define DES_PTR
++#endif
++
++/* This helps C compiler generate the correct code for multiple functional
++ * units. It reduces register dependancies at the expense of 2 more
++ * registers */
++#ifndef DES_RISC1
++#define DES_RISC1
++#endif
++
++#ifndef DES_RISC2
++#undef DES_RISC2
++#endif
++
++#if defined(DES_RISC1) && defined(DES_RISC2)
++YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
++#endif
++
++/* Unroll the inner loop, this sometimes helps, sometimes hinders.
++ * Very mucy CPU dependant */
++#ifndef DES_UNROLL
++#define DES_UNROLL
++#endif
++
++/* These default values were supplied by
++ * Peter Gutman <pgut001@cs.auckland.ac.nz>
++ * They are only used if nothing else has been defined */
++#if !defined(DES_PTR) && !defined(DES_RISC1) && !defined(DES_RISC2) && !defined(DES_UNROLL)
++/* Special defines which change the way the code is built depending on the
++ CPU and OS. For SGI machines you can use _MIPS_SZLONG (32 or 64) to find
++ even newer MIPS CPU's, but at the moment one size fits all for
++ optimization options. Older Sparc's work better with only UNROLL, but
++ there's no way to tell at compile time what it is you're running on */
++
++#if defined( sun ) /* Newer Sparc's */
++# define DES_PTR
++# define DES_RISC1
++# define DES_UNROLL
++#elif defined( __ultrix ) /* Older MIPS */
++# define DES_PTR
++# define DES_RISC2
++# define DES_UNROLL
++#elif defined( __osf1__ ) /* Alpha */
++# define DES_PTR
++# define DES_RISC2
++#elif defined ( _AIX ) /* RS6000 */
++ /* Unknown */
++#elif defined( __hpux ) /* HP-PA */
++ /* Unknown */
++#elif defined( __aux ) /* 68K */
++ /* Unknown */
++#elif defined( __dgux ) /* 88K (but P6 in latest boxes) */
++# define DES_UNROLL
++#elif defined( __sgi ) /* Newer MIPS */
++# define DES_PTR
++# define DES_RISC2
++# define DES_UNROLL
++#elif defined( i386 ) /* x86 boxes, should be gcc */
++# define DES_PTR
++# define DES_RISC1
++# define DES_UNROLL
++#endif /* Systems-specific speed defines */
++#endif
++
++#endif /* DES_DEFAULT_OPTIONS */
++#endif /* HEADER_DES_LOCL_H */
+diff -Nur linux_c860_org/include/openssl/opensslv.h linux/include/openssl/opensslv.h
+--- linux_c860_org/include/openssl/opensslv.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/include/openssl/opensslv.h 2004-06-10 21:09:11.000000000 +0900
+@@ -0,0 +1,85 @@
++#ifndef HEADER_OPENSSLV_H
++#define HEADER_OPENSSLV_H
++
++/* Numeric release version identifier:
++ * MMNNFFPPS: major minor fix patch status
++ * The status nibble has one of the values 0 for development, 1 to e for betas
++ * 1 to 14, and f for release. The patch level is exactly that.
++ * For example:
++ * 0.9.3-dev 0x00903000
++ * 0.9.3-beta1 0x00903001
++ * 0.9.3-beta2-dev 0x00903002
++ * 0.9.3-beta2 0x00903002 (same as ...beta2-dev)
++ * 0.9.3 0x0090300f
++ * 0.9.3a 0x0090301f
++ * 0.9.4 0x0090400f
++ * 1.2.3z 0x102031af
++ *
++ * For continuity reasons (because 0.9.5 is already out, and is coded
++ * 0x00905100), between 0.9.5 and 0.9.6 the coding of the patch level
++ * part is slightly different, by setting the highest bit. This means
++ * that 0.9.5a looks like this: 0x0090581f. At 0.9.6, we can start
++ * with 0x0090600S...
++ *
++ * (Prior to 0.9.3-dev a different scheme was used: 0.9.2b is 0x0922.)
++ * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for
++ * major minor fix final patch/beta)
++ */
++#define OPENSSL_VERSION_NUMBER 0x0090601fL
++#define OPENSSL_VERSION_TEXT "OpenSSL 0.9.6a 5 Apr 2001"
++#define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT
++
++
++/* The macros below are to be used for shared library (.so, .dll, ...)
++ * versioning. That kind of versioning works a bit differently between
++ * operating systems. The most usual scheme is to set a major and a minor
++ * number, and have the runtime loader check that the major number is equal
++ * to what it was at application link time, while the minor number has to
++ * be greater or equal to what it was at application link time. With this
++ * scheme, the version number is usually part of the file name, like this:
++ *
++ * libcrypto.so.0.9
++ *
++ * Some unixen also make a softlink with the major verson number only:
++ *
++ * libcrypto.so.0
++ *
++ * On True64 it works a little bit differently. There, the shared library
++ * version is stored in the file, and is actually a series of versions,
++ * separated by colons. The rightmost version present in the library when
++ * linking an application is stored in the application to be matched at
++ * run time. When the application is run, a check is done to see if the
++ * library version stored in the application matches any of the versions
++ * in the version string of the library itself.
++ * This version string can be constructed in any way, depending on what
++ * kind of matching is desired. However, to implement the same scheme as
++ * the one used in the other unixen, all compatible versions, from lowest
++ * to highest, should be part of the string. Consecutive builds would
++ * give the following versions strings:
++ *
++ * 3.0
++ * 3.0:3.1
++ * 3.0:3.1:3.2
++ * 4.0
++ * 4.0:4.1
++ *
++ * Notice how version 4 is completely incompatible with version, and
++ * therefore give the breach you can see.
++ *
++ * There may be other schemes as well that I haven't yet discovered.
++ *
++ * So, here's the way it works here: first of all, the library version
++ * number doesn't need at all to match the overall OpenSSL version.
++ * However, it's nice and more understandable if it actually does.
++ * The current library version is stored in the macro SHLIB_VERSION_NUMBER,
++ * which is just a piece of text in the format "M.m.e" (Major, minor, edit).
++ * For the sake of True64 and any other OS that behaves in similar ways,
++ * we need to keep a history of version numbers, which is done in the
++ * macro SHLIB_VERSION_HISTORY. The numbers are separated by colons and
++ * should only keep the versions that are binary compatible with the current.
++ */
++#define SHLIB_VERSION_HISTORY ""
++#define SHLIB_VERSION_NUMBER "0.9.6"
++
++
++#endif /* HEADER_OPENSSLV_H */
+diff -Nur linux_c860_org/include/openssl/rc4.h linux/include/openssl/rc4.h
+--- linux_c860_org/include/openssl/rc4.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/include/openssl/rc4.h 2004-06-10 21:09:11.000000000 +0900
+@@ -0,0 +1,88 @@
++/* crypto/rc4/rc4.h */
++/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
++ * All rights reserved.
++ *
++ * This package is an SSL implementation written
++ * by Eric Young (eay@cryptsoft.com).
++ * The implementation was written so as to conform with Netscapes SSL.
++ *
++ * This library is free for commercial and non-commercial use as long as
++ * the following conditions are aheared to. The following conditions
++ * apply to all code found in this distribution, be it the RC4, RSA,
++ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
++ * included with this distribution is covered by the same copyright terms
++ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
++ *
++ * Copyright remains Eric Young's, and as such any Copyright notices in
++ * the code are not to be removed.
++ * If this package is used in a product, Eric Young should be given attribution
++ * as the author of the parts of the library used.
++ * This can be in the form of a textual message at program startup or
++ * in documentation (online or textual) provided with the package.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. 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.
++ * 3. All advertising materials mentioning features or use of this software
++ * must display the following acknowledgement:
++ * "This product includes cryptographic software written by
++ * Eric Young (eay@cryptsoft.com)"
++ * The word 'cryptographic' can be left out if the rouines from the library
++ * being used are not cryptographic related :-).
++ * 4. If you include any Windows specific code (or a derivative thereof) from
++ * the apps directory (application code) you must include an acknowledgement:
++ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
++ *
++ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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.
++ *
++ * The licence and distribution terms for any publically available version or
++ * derivative of this code cannot be changed. i.e. this code cannot simply be
++ * copied and put under another distribution licence
++ * [including the GNU Public Licence.]
++ */
++
++#ifndef HEADER_RC4_H
++#define HEADER_RC4_H
++
++#ifdef NO_RC4
++#error RC4 is disabled.
++#endif
++
++#include <openssl/opensslconf.h> /* RC4_INT */
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++typedef struct rc4_key_st
++ {
++ RC4_INT x,y;
++ RC4_INT data[256];
++ } RC4_KEY;
++
++
++const char *RC4_options(void);
++void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data);
++void RC4(RC4_KEY *key, unsigned long len, const unsigned char *indata,
++ unsigned char *outdata);
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif
+diff -Nur linux_c860_org/include/openssl/sha.h linux/include/openssl/sha.h
+--- linux_c860_org/include/openssl/sha.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/include/openssl/sha.h 2004-06-10 21:09:11.000000000 +0900
+@@ -0,0 +1,119 @@
++/* crypto/sha/sha.h */
++/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
++ * All rights reserved.
++ *
++ * This package is an SSL implementation written
++ * by Eric Young (eay@cryptsoft.com).
++ * The implementation was written so as to conform with Netscapes SSL.
++ *
++ * This library is free for commercial and non-commercial use as long as
++ * the following conditions are aheared to. The following conditions
++ * apply to all code found in this distribution, be it the RC4, RSA,
++ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
++ * included with this distribution is covered by the same copyright terms
++ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
++ *
++ * Copyright remains Eric Young's, and as such any Copyright notices in
++ * the code are not to be removed.
++ * If this package is used in a product, Eric Young should be given attribution
++ * as the author of the parts of the library used.
++ * This can be in the form of a textual message at program startup or
++ * in documentation (online or textual) provided with the package.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the copyright
++ * notice, this list of conditions and the following disclaimer.
++ * 2. 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.
++ * 3. All advertising materials mentioning features or use of this software
++ * must display the following acknowledgement:
++ * "This product includes cryptographic software written by
++ * Eric Young (eay@cryptsoft.com)"
++ * The word 'cryptographic' can be left out if the rouines from the library
++ * being used are not cryptographic related :-).
++ * 4. If you include any Windows specific code (or a derivative thereof) from
++ * the apps directory (application code) you must include an acknowledgement:
++ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
++ *
++ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 AUTHOR 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.
++ *
++ * The licence and distribution terms for any publically available version or
++ * derivative of this code cannot be changed. i.e. this code cannot simply be
++ * copied and put under another distribution licence
++ * [including the GNU Public Licence.]
++ */
++
++#ifndef HEADER_SHA_H
++#define HEADER_SHA_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++#if defined(NO_SHA) || (defined(NO_SHA0) && defined(NO_SHA1))
++#error SHA is disabled.
++#endif
++
++/*
++ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
++ * ! SHA_LONG has to be at least 32 bits wide. If it's wider, then !
++ * ! SHA_LONG_LOG2 has to be defined along. !
++ * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
++ */
++
++#if defined(WIN16) || defined(__LP32__)
++#define SHA_LONG unsigned long
++#elif defined(_CRAY) || defined(__ILP64__)
++#define SHA_LONG unsigned long
++#define SHA_LONG_LOG2 3
++#else
++#define SHA_LONG unsigned int
++#endif
++
++#define SHA_LBLOCK 16
++#define SHA_CBLOCK (SHA_LBLOCK*4) /* SHA treats input data as a
++ * contiguous array of 32 bit
++ * wide big-endian values. */
++#define SHA_LAST_BLOCK (SHA_CBLOCK-8)
++#define SHA_DIGEST_LENGTH 20
++
++typedef struct SHAstate_st
++ {
++ SHA_LONG h0,h1,h2,h3,h4;
++ SHA_LONG Nl,Nh;
++ SHA_LONG data[SHA_LBLOCK];
++ int num;
++ } SHA_CTX;
++
++#ifndef NO_SHA0
++void SHA_Init(SHA_CTX *c);
++void SHA_Update(SHA_CTX *c, const void *data, unsigned long len);
++void SHA_Final(unsigned char *md, SHA_CTX *c);
++unsigned char *SHA(const unsigned char *d, unsigned long n,unsigned char *md);
++void SHA_Transform(SHA_CTX *c, const unsigned char *data);
++#endif
++#ifndef NO_SHA1
++void SHA1_Init(SHA_CTX *c);
++void SHA1_Update(SHA_CTX *c, const void *data, unsigned long len);
++void SHA1_Final(unsigned char *md, SHA_CTX *c);
++unsigned char *SHA1(const unsigned char *d, unsigned long n,unsigned char *md);
++void SHA1_Transform(SHA_CTX *c, const unsigned char *data);
++#endif
++#ifdef __cplusplus
++}
++#endif
++
++#endif
+diff -Nur linux_c860_org/include/video/tosa_backlight.h linux/include/video/tosa_backlight.h
+--- linux_c860_org/include/video/tosa_backlight.h 1970-01-01 09:00:00.000000000 +0900
++++ linux/include/video/tosa_backlight.h 2004-06-10 21:09:11.000000000 +0900
+@@ -0,0 +1,47 @@
++/*
++ * linux/include/video/tosa_backlight.h
++ *
++ * (C) Copyright 2004 Lineo Solutions, Inc.
++ *
++ * May be copied or modified under the terms of the GNU General Public
++ * License. See linux/COPYING for more information.
++ *
++ * Based on:
++ * linux/include/video/corgi_backlight.h
++ *
++ * (C) Copyright 2002 Lineo Japan, Inc.
++ *
++ * May be copied or modified under the terms of the GNU General Public
++ * License. See linux/COPYING for more information.
++ *
++ * Based on include/video/sa1100_frontlight.h
++ *
++ * ChangeLog:
++ * 06-Nov-2002 SHARP for SL-B500/5600
++ */
++
++
++#ifndef __TOSA_FRONTLIGHT_H
++#define __TOSA_FRONTLIGHT_H
++
++#define TOSA_BL_IOCTL_ON 1
++#define TOSA_BL_IOCTL_OFF 2
++#define TOSA_BL_IOCTL_STEP_CONTRAST 100
++#define TOSA_BL_IOCTL_GET_STEP_CONTRAST 101
++#define TOSA_BL_IOCTL_GET_STEP 102
++
++#define TOSA_BL_RESET_CONTRAST (-1)
++#define TOSA_BL_CAUTION_CONTRAST (1)
++
++#define BL_MAJOR 254
++#define BL_NAME "tosa-bl"
++
++#ifdef CONFIG_PM
++void tosa_bl_blank(int);
++int tosa_bl_pm_callback(struct pm_dev*, pm_request_t, void*);
++#endif
++void tosa_bl_temporary_contrast_set(void);
++void tosa_bl_temporary_contrast_reset(void);
++void tosa_bl_set_limit_contrast(int);
++
++#endif /* __TOSA_FRONTLIGHT_H */
+diff -Nur linux_c860_org/kernel/exit.c linux/kernel/exit.c
+--- linux_c860_org/kernel/exit.c 2002-08-26 14:43:29.000000000 +0900
++++ linux/kernel/exit.c 2004-06-10 21:09:11.000000000 +0900
+@@ -203,6 +203,8 @@
+ }
+ i++;
+ set >>= 1;
++ debug_lock_break(1);
++ conditional_schedule();
+ }
+ }
+ }
+@@ -320,8 +322,8 @@
+ /* more a memory barrier than a real lock */
+ task_lock(tsk);
+ tsk->mm = NULL;
+- task_unlock(tsk);
+ enter_lazy_tlb(mm, current, smp_processor_id());
++ task_unlock(tsk);
+ mmput(mm);
+ }
+ }
+@@ -442,6 +444,11 @@
+ tsk->flags |= PF_EXITING;
+ del_timer_sync(&tsk->real_timer);
+
++ if (unlikely(preempt_get_count()))
++ printk(KERN_INFO "note: %s[%d] exited with preempt_count %d\n",
++ current->comm, current->pid,
++ preempt_get_count());
++
+ fake_volatile:
+ #ifdef CONFIG_BSD_PROCESS_ACCT
+ acct_process(code);
+diff -Nur linux_c860_org/kernel/fork.c linux/kernel/fork.c
+--- linux_c860_org/kernel/fork.c 2002-12-18 19:29:50.000000000 +0900
++++ linux/kernel/fork.c 2004-06-10 21:09:11.000000000 +0900
+@@ -28,6 +28,7 @@
+ #include <asm/pgalloc.h>
+ #include <asm/uaccess.h>
+ #include <asm/mmu_context.h>
++#include <asm/processor.h>
+
+ /* The idle threads do not count.. */
+ int nr_threads;
+@@ -561,6 +562,31 @@
+ p->flags = new_flags;
+ }
+
++long kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
++{
++ struct task_struct *task = current;
++ unsigned old_task_dumpable;
++ long ret;
++
++ /* lock out any potential ptracer */
++ task_lock(task);
++ if (task->ptrace) {
++ task_unlock(task);
++ return -EPERM;
++ }
++
++ old_task_dumpable = task->task_dumpable;
++ task->task_dumpable = 0;
++ task_unlock(task);
++
++ ret = arch_kernel_thread(fn, arg, flags);
++
++ /* never reached in child process, only in parent */
++ current->task_dumpable = old_task_dumpable;
++
++ return ret;
++}
++
+ /*
+ * Ok, this is the main fork-routine. It copies the system process
+ * information (task[nr]) and sets up the necessary registers. It also
+@@ -622,6 +648,13 @@
+ if (p->binfmt && p->binfmt->module)
+ __MOD_INC_USE_COUNT(p->binfmt->module);
+
++#ifdef CONFIG_PREEMPT
++ /*
++ * Continue with preemption disabled as part of the context
++ * switch, so start with preempt_count set to 1.
++ */
++ p->preempt_count = 1;
++#endif
+ p->did_exec = 0;
+ p->swappable = 0;
+ p->state = TASK_UNINTERRUPTIBLE;
+diff -Nur linux_c860_org/kernel/ksyms.c linux/kernel/ksyms.c
+--- linux_c860_org/kernel/ksyms.c 2002-08-26 14:43:29.000000000 +0900
++++ linux/kernel/ksyms.c 2004-06-10 21:09:11.000000000 +0900
+@@ -439,6 +439,9 @@
+ EXPORT_SYMBOL(interruptible_sleep_on);
+ EXPORT_SYMBOL(interruptible_sleep_on_timeout);
+ EXPORT_SYMBOL(schedule);
++#ifdef CONFIG_PREEMPT
++EXPORT_SYMBOL(preempt_schedule);
++#endif
+ EXPORT_SYMBOL(schedule_timeout);
+ EXPORT_SYMBOL(jiffies);
+ EXPORT_SYMBOL(xtime);
+diff -Nur linux_c860_org/kernel/ptrace.c linux/kernel/ptrace.c
+--- linux_c860_org/kernel/ptrace.c 2002-08-26 14:37:42.000000000 +0900
++++ linux/kernel/ptrace.c 2004-06-10 21:09:11.000000000 +0900
+@@ -21,6 +21,9 @@
+ */
+ int ptrace_check_attach(struct task_struct *child, int kill)
+ {
++ mb();
++ if (!child->task_dumpable)
++ return -EPERM;
+ if (!(child->ptrace & PT_PTRACED))
+ return -ESRCH;
+
+@@ -70,7 +73,7 @@
+ (current->gid != task->gid)) && !capable(CAP_SYS_PTRACE))
+ goto bad;
+ rmb();
+- if (!task->mm->dumpable && !capable(CAP_SYS_PTRACE))
++ if (!is_dumpable(task) && !capable(CAP_SYS_PTRACE))
+ goto bad;
+ /* the same process cannot be attached many times */
+ if (task->ptrace & PT_PTRACED)
+@@ -136,6 +139,8 @@
+ /* Worry about races with exit() */
+ task_lock(tsk);
+ mm = tsk->mm;
++ if (!tsk->task_dumpable || (&init_mm == mm))
++ mm = NULL;
+ if (mm)
+ atomic_inc(&mm->mm_users);
+ task_unlock(tsk);
+diff -Nur linux_c860_org/kernel/sched.c linux/kernel/sched.c
+--- linux_c860_org/kernel/sched.c 2002-08-26 14:37:42.000000000 +0900
++++ linux/kernel/sched.c 2004-06-10 21:09:11.000000000 +0900
+@@ -491,7 +491,7 @@
+ task_lock(prev);
+ task_release_cpu(prev);
+ mb();
+- if (prev->state == TASK_RUNNING)
++ if (task_on_runqueue(prev))
+ goto needs_resched;
+
+ out_unlock:
+@@ -521,7 +521,7 @@
+ goto out_unlock;
+
+ spin_lock_irqsave(&runqueue_lock, flags);
+- if ((prev->state == TASK_RUNNING) && !task_has_cpu(prev))
++ if (task_on_runqueue(prev) && !task_has_cpu(prev))
+ reschedule_idle(prev);
+ spin_unlock_irqrestore(&runqueue_lock, flags);
+ goto out_unlock;
+@@ -534,6 +534,7 @@
+ asmlinkage void schedule_tail(struct task_struct *prev)
+ {
+ __schedule_tail(prev);
++ preempt_enable();
+ }
+
+ /*
+@@ -553,10 +554,12 @@
+ struct list_head *tmp;
+ int this_cpu, c;
+
+-
+ spin_lock_prefetch(&runqueue_lock);
+
++ preempt_disable();
++
+ if (!current->active_mm) BUG();
++
+ need_resched_back:
+ prev = current;
+ this_cpu = prev->processor;
+@@ -583,6 +586,14 @@
+ move_last_runqueue(prev);
+ }
+
++#ifdef CONFIG_PREEMPT
++ /*
++ * entering from preempt_schedule, off a kernel preemption,
++ * go straight to picking the next task.
++ */
++ if (unlikely(preempt_get_count() & PREEMPT_ACTIVE))
++ goto treat_like_run;
++#endif
+ switch (prev->state) {
+ case TASK_INTERRUPTIBLE:
+ if (signal_pending(prev)) {
+@@ -593,6 +604,9 @@
+ del_from_runqueue(prev);
+ case TASK_RUNNING:;
+ }
++#ifdef CONFIG_PREEMPT
++ treat_like_run:
++#endif
+ prev->need_resched = 0;
+
+ /*
+@@ -701,9 +715,25 @@
+ reacquire_kernel_lock(current);
+ if (current->need_resched)
+ goto need_resched_back;
++ preempt_enable_no_resched();
+ return;
+ }
+
++#ifdef CONFIG_PREEMPT
++/*
++ * this is is the entry point to schedule() from in-kernel preemption.
++ */
++asmlinkage void preempt_schedule(void)
++{
++ do {
++ current->preempt_count += PREEMPT_ACTIVE;
++ schedule();
++ current->preempt_count -= PREEMPT_ACTIVE;
++ barrier();
++ } while (current->need_resched);
++}
++#endif /* CONFIG_PREEMPT */
++
+ /*
+ * The core wakeup function. Non-exclusive wakeups (nr_exclusive == 0) just wake everything
+ * up. If it's an exclusive wakeup (nr_exclusive == small +ve number) then we wake all the
+@@ -1312,6 +1342,13 @@
+ sched_data->curr = current;
+ sched_data->last_schedule = get_cycles();
+ clear_bit(current->processor, &wait_init_idle);
++#ifdef CONFIG_PREEMPT
++ /*
++ * fix up the preempt_count for non-CPU0 idle threads
++ */
++ if (current->processor)
++ current->preempt_count = 0;
++#endif
+ }
+
+ extern void init_timervecs (void);
+diff -Nur linux_c860_org/kernel/sys.c linux/kernel/sys.c
+--- linux_c860_org/kernel/sys.c 2002-08-29 12:24:32.000000000 +0900
++++ linux/kernel/sys.c 2004-06-10 21:09:11.000000000 +0900
+@@ -1231,7 +1231,7 @@
+ error = put_user(current->pdeath_signal, (int *)arg2);
+ break;
+ case PR_GET_DUMPABLE:
+- if (current->mm->dumpable)
++ if (is_dumpable(current))
+ error = 1;
+ break;
+ case PR_SET_DUMPABLE:
+@@ -1239,7 +1239,8 @@
+ error = -EINVAL;
+ break;
+ }
+- current->mm->dumpable = arg2;
++ if (is_dumpable(current))
++ current->mm->dumpable = arg2;
+ break;
+ case PR_SET_UNALIGN:
+ #ifdef SET_UNALIGN_CTL
+diff -Nur linux_c860_org/lib/dec_and_lock.c linux/lib/dec_and_lock.c
+--- linux_c860_org/lib/dec_and_lock.c 2002-08-26 14:37:42.000000000 +0900
++++ linux/lib/dec_and_lock.c 2004-06-10 21:09:11.000000000 +0900
+@@ -1,5 +1,6 @@
+ #include <linux/module.h>
+ #include <linux/spinlock.h>
++#include <linux/sched.h>
+ #include <asm/atomic.h>
+
+ /*
+diff -Nur linux_c860_org/mm/filemap.c linux/mm/filemap.c
+--- linux_c860_org/mm/filemap.c 2002-08-26 14:37:43.000000000 +0900
++++ linux/mm/filemap.c 2004-06-10 21:09:11.000000000 +0900
+@@ -296,6 +296,7 @@
+
+ page_cache_release(page);
+
++ /* we hit this with lock depth of 1 or 2 */
+ if (current->need_resched) {
+ __set_current_state(TASK_RUNNING);
+ schedule();
+@@ -406,6 +407,8 @@
+ }
+
+ page_cache_release(page);
++
++ debug_lock_break(551);
+ if (current->need_resched) {
+ __set_current_state(TASK_RUNNING);
+ schedule();
+@@ -560,12 +563,16 @@
+ list_del(&page->list);
+ list_add(&page->list, &mapping->locked_pages);
+
+- if (!PageDirty(page))
+- continue;
+-
+ page_cache_get(page);
+ spin_unlock(&pagecache_lock);
+
++ /* BKL is held ... */
++ debug_lock_break(1);
++ conditional_schedule();
++
++ if (!PageDirty(page))
++ goto clean;
++
+ lock_page(page);
+
+ if (PageDirty(page)) {
+@@ -576,7 +583,7 @@
+ ret = err;
+ } else
+ UnlockPage(page);
+-
++clean:
+ page_cache_release(page);
+ spin_lock(&pagecache_lock);
+ }
+@@ -595,14 +602,28 @@
+ {
+ int ret = 0;
+
++ DEFINE_LOCK_COUNT();
++
+ spin_lock(&pagecache_lock);
+
++restart:
+ while (!list_empty(&mapping->locked_pages)) {
+ struct page *page = list_entry(mapping->locked_pages.next, struct page, list);
+
+ list_del(&page->list);
+ list_add(&page->list, &mapping->clean_pages);
+
++ debug_lock_break(2);
++ if (TEST_LOCK_COUNT(32)) {
++ RESET_LOCK_COUNT();
++ if (conditional_schedule_needed()) {
++ page_cache_get(page);
++ break_spin_lock_and_resched(&pagecache_lock);
++ page_cache_release(page);
++ goto restart;
++ }
++ }
++
+ if (!PageLocked(page))
+ continue;
+
+@@ -869,6 +890,7 @@
+ * the hash-list needs a held write-lock.
+ */
+ repeat:
++ break_spin_lock(&pagecache_lock);
+ page = __find_page_nolock(mapping, offset, hash);
+ if (page) {
+ page_cache_get(page);
+@@ -2031,6 +2053,8 @@
+ address += PAGE_SIZE;
+ pte++;
+ } while (address && (address < end));
++ debug_lock_break(1);
++ break_spin_lock(&vma->vm_mm->page_table_lock);
+ return error;
+ }
+
+@@ -2061,6 +2085,9 @@
+ address = (address + PMD_SIZE) & PMD_MASK;
+ pmd++;
+ } while (address && (address < end));
++
++ debug_lock_break(1);
++ break_spin_lock(&vma->vm_mm->page_table_lock);
+ return error;
+ }
+
+@@ -2438,7 +2465,7 @@
+ if (vma->vm_flags & VM_LOCKED)
+ return -EINVAL;
+
+- zap_page_range(vma->vm_mm, start, end - start);
++ zap_page_range(vma->vm_mm, start, end - start, ZPR_PARTITION);
+ return 0;
+ }
+
+diff -Nur linux_c860_org/mm/memory.c linux/mm/memory.c
+--- linux_c860_org/mm/memory.c 2003-06-18 16:12:29.000000000 +0900
++++ linux/mm/memory.c 2004-06-10 21:09:11.000000000 +0900
+@@ -384,7 +384,8 @@
+ /*
+ * remove user pages in a given range.
+ */
+-void zap_page_range(struct mm_struct *mm, unsigned long address, unsigned long size)
++void do_zap_page_range(struct mm_struct *mm, unsigned long address,
++ unsigned long size)
+ {
+ unsigned long start = address, end = address + size;
+ mmu_gather_t *tlb;
+@@ -643,6 +644,20 @@
+ iobuf->locked = 0;
+ }
+
++void zap_page_range(struct mm_struct *mm, unsigned long address,
++ unsigned long size, int actions)
++{
++ while (size) {
++ unsigned long chunk = size;
++
++ if (actions & ZPR_PARTITION && chunk > ZPR_MAX_BYTES)
++ chunk = ZPR_MAX_BYTES;
++ do_zap_page_range(mm, address, chunk);
++
++ address += chunk;
++ size -= chunk;
++ }
++}
+
+ /*
+ * Lock down all of the pages of a kiovec for IO.
+@@ -752,11 +767,15 @@
+ return 0;
+ }
+
+-static inline void zeromap_pte_range(pte_t * pte, unsigned long address,
+- unsigned long size, pgprot_t prot)
++static inline void zeromap_pte_range(struct mm_struct *mm, pte_t * pte,
++ unsigned long address, unsigned long size,
++ pgprot_t prot)
+ {
+ unsigned long end;
+
++ debug_lock_break(1);
++ break_spin_lock(&mm->page_table_lock);
++
+ address &= ~PMD_MASK;
+ end = address + size;
+ if (end > PMD_SIZE)
+@@ -784,7 +803,7 @@
+ pte_t * pte = pte_alloc(mm, pmd, address);
+ if (!pte)
+ return -ENOMEM;
+- zeromap_pte_range(pte, address, end - address, prot);
++ zeromap_pte_range(mm, pte, address, end - address, prot);
+ address = (address + PMD_SIZE) & PMD_MASK;
+ pmd++;
+ } while (address && (address < end));
+@@ -1022,7 +1041,7 @@
+
+ /* mapping wholly truncated? */
+ if (mpnt->vm_pgoff >= pgoff) {
+- zap_page_range(mm, start, len);
++ zap_page_range(mm, start, len, ZPR_NORMAL);
+ continue;
+ }
+
+@@ -1035,7 +1054,7 @@
+ /* Ok, partially affected.. */
+ start += diff << PAGE_SHIFT;
+ len = (len - diff) << PAGE_SHIFT;
+- zap_page_range(mm, start, len);
++ zap_page_range(mm, start, len, ZPR_NORMAL);
+ } while ((mpnt = mpnt->vm_next_share) != NULL);
+ }
+
+diff -Nur linux_c860_org/mm/mmap.c linux/mm/mmap.c
+--- linux_c860_org/mm/mmap.c 2003-06-18 16:12:29.000000000 +0900
++++ linux/mm/mmap.c 2004-06-10 21:09:11.000000000 +0900
+@@ -578,7 +578,7 @@
+ fput(file);
+
+ /* Undo any partial mapping done by a device driver. */
+- zap_page_range(mm, vma->vm_start, vma->vm_end - vma->vm_start);
++ zap_page_range(mm, vma->vm_start, vma->vm_end - vma->vm_start, ZPR_NORMAL);
+ free_vma:
+ kmem_cache_free(vm_area_cachep, vma);
+ return error;
+@@ -978,7 +978,7 @@
+ remove_shared_vm_struct(mpnt);
+ mm->map_count--;
+
+- zap_page_range(mm, st, size);
++ zap_page_range(mm, st, size, ZPR_PARTITION);
+
+ /*
+ * Fix the mapping, and free the old area if it wasn't reused.
+@@ -1025,6 +1025,9 @@
+ if (!len)
+ return addr;
+
++ if ((addr + len) > TASK_SIZE || (addr + len) < addr)
++ return -EINVAL;
++
+ /*
+ * mlock MCL_FUTURE?
+ */
+diff -Nur linux_c860_org/mm/mremap.c linux/mm/mremap.c
+--- linux_c860_org/mm/mremap.c 2002-08-26 14:37:43.000000000 +0900
++++ linux/mm/mremap.c 2004-06-10 21:09:11.000000000 +0900
+@@ -118,7 +118,7 @@
+ flush_cache_range(mm, new_addr, new_addr + len);
+ while ((offset += PAGE_SIZE) < len)
+ move_one_page(mm, new_addr + offset, old_addr + offset);
+- zap_page_range(mm, new_addr, len);
++ zap_page_range(mm, new_addr, len, ZPR_NORMAL);
+ return -1;
+ }
+
+@@ -236,6 +236,13 @@
+
+ if (new_len > TASK_SIZE || new_addr > TASK_SIZE - new_len)
+ goto out;
++ /*
++ * Allow new_len == 0 only if new_addr == addr
++ * to preserve truncation in place (that was working
++ * safe and some app may depend on it).
++ */
++ if (unlikely(!new_len && new_addr != addr))
++ goto out;
+
+ /* Check if the location we're moving into overlaps the
+ * old location at all, and fail if it does.
+@@ -246,16 +253,20 @@
+ if ((addr <= new_addr) && (addr+old_len) > new_addr)
+ goto out;
+
+- do_munmap(current->mm, new_addr, new_len);
++ ret = do_munmap(current->mm, new_addr, new_len);
++ if (ret && new_len)
++ goto out;
+ }
+
+ /*
+ * Always allow a shrinking remap: that just unmaps
+ * the unnecessary pages..
+ */
+- ret = addr;
+ if (old_len >= new_len) {
+- do_munmap(current->mm, addr+new_len, old_len - new_len);
++ ret = do_munmap(current->mm, addr+new_len, old_len - new_len);
++ if (ret && old_len != new_len)
++ goto out;
++ ret = addr;
+ if (!(flags & MREMAP_FIXED) || (new_addr == addr))
+ goto out;
+ }
+diff -Nur linux_c860_org/mm/oom_kill.c linux/mm/oom_kill.c
+--- linux_c860_org/mm/oom_kill.c 2003-06-18 16:12:29.000000000 +0900
++++ linux/mm/oom_kill.c 2004-06-10 21:09:11.000000000 +0900
+@@ -20,6 +20,7 @@
+ * 16-Jan-2003 SHARP add VM switch
+ * 24-Feb-2003 SHARP modify check out of memory function
+ * 18-Apr-2003 Sharp modify threshold
++ * 05-Aug-2003 SHARP for Tosa
+ */
+
+ #include <linux/mm.h>
+@@ -237,7 +238,7 @@
+
+ #if defined(CONFIG_ARCH_SHARP_SL)
+ #define MIN_KILL_INTERVAL (60*HZ)
+-#if defined(CONFIG_ARCH_PXA_SHEPHERD)
++#if defined(CONFIG_ARCH_PXA_SHEPHERD) || defined (CONFIG_ARCH_PXA_TOSA)
+ #define OOM_KILL_PG_CACHE_SIZE (1280) /* 5MB */
+ #define MIN_SIGNAL_PG_CACHE_SIZE (1536) /* 6MB */
+ #define LOW_SIGNAL_PG_CACHE_SIZE (2048) /* 8MB */
+diff -Nur linux_c860_org/mm/slab.c linux/mm/slab.c
+--- linux_c860_org/mm/slab.c 2002-11-22 21:03:26.000000000 +0900
++++ linux/mm/slab.c 2004-06-10 21:09:11.000000000 +0900
+@@ -49,7 +49,8 @@
+ * constructors and destructors are called without any locking.
+ * Several members in kmem_cache_t and slab_t never change, they
+ * are accessed without any locking.
+- * The per-cpu arrays are never accessed from the wrong cpu, no locking.
++ * The per-cpu arrays are never accessed from the wrong cpu, no locking,
++ * and local interrupts are disabled so slab code is preempt-safe.
+ * The non-constant members are protected with a per-cache irq spinlock.
+ *
+ * Further notes from the original documentation:
+diff -Nur linux_c860_org/mm/swapfile.c linux/mm/swapfile.c
+--- linux_c860_org/mm/swapfile.c 2002-08-26 14:37:43.000000000 +0900
++++ linux/mm/swapfile.c 2004-06-10 21:09:11.000000000 +0900
+@@ -696,6 +696,7 @@
+ * interactive performance. Interruptible check on
+ * signal_pending() would be nice, but changes the spec?
+ */
++ debug_lock_break(551);
+ if (current->need_resched)
+ schedule();
+ }
+@@ -1124,6 +1125,13 @@
+ if (swap_info[i].flags != SWP_USED)
+ continue;
+ for (j = 0; j < swap_info[i].max; ++j) {
++ if (conditional_schedule_needed()) {
++ debug_lock_break(551);
++ swap_list_unlock();
++ debug_lock_break(551);
++ unconditional_schedule();
++ swap_list_lock();
++ }
+ switch (swap_info[i].swap_map[j]) {
+ case 0:
+ case SWAP_MAP_BAD:
+diff -Nur linux_c860_org/mm/vmscan.c linux/mm/vmscan.c
+--- linux_c860_org/mm/vmscan.c 2003-01-30 18:59:16.000000000 +0900
++++ linux/mm/vmscan.c 2004-06-10 21:09:11.000000000 +0900
+@@ -170,6 +170,8 @@
+ pte_t * pte;
+ unsigned long pmd_end;
+
++ DEFINE_LOCK_COUNT();
++
+ if (pmd_none(*dir))
+ return count;
+ if (pmd_bad(*dir)) {
+@@ -194,6 +196,14 @@
+ address += PAGE_SIZE;
+ break;
+ }
++ /* we reach this with a lock depth of 1 or 2 */
++#if 0
++ if (TEST_LOCK_COUNT(4)) {
++ if (conditional_schedule_needed())
++ return count;
++ RESET_LOCK_COUNT();
++ }
++#endif
+ }
+ }
+ address += PAGE_SIZE;
+@@ -227,6 +237,9 @@
+ count = swap_out_pmd(mm, vma, pmd, address, end, count, classzone);
+ if (!count)
+ break;
++ /* lock depth can be 1 or 2 */
++ if (conditional_schedule_needed())
++ return count;
+ address = (address + PMD_SIZE) & PMD_MASK;
+ pmd++;
+ } while (address && (address < end));
+@@ -252,6 +265,9 @@
+ count = swap_out_pgd(mm, vma, pgdir, address, end, count, classzone);
+ if (!count)
+ break;
++ /* lock depth can be 1 or 2 */
++ if (conditional_schedule_needed())
++ return count;
+ address = (address + PGDIR_SIZE) & PGDIR_MASK;
+ pgdir++;
+ } while (address && (address < end));
+@@ -274,6 +290,8 @@
+ * and ptes.
+ */
+ spin_lock(&mm->page_table_lock);
++
++continue_scan:
+ address = mm->swap_address;
+ if (address == TASK_SIZE || swap_mm != mm) {
+ /* We raced: don't count this mm but try again */
+@@ -290,6 +308,13 @@
+ vma = vma->vm_next;
+ if (!vma)
+ break;
++ /* we reach this with a lock depth of 1 and 2 */
++#if 0
++ if (conditional_schedule_needed()) {
++ break_spin_lock(&mm->page_table_lock);
++ goto continue_scan;
++ }
++#endif
+ if (!count)
+ goto out_unlock;
+ address = vma->vm_start;
+@@ -311,6 +336,7 @@
+
+ counter = mmlist_nr;
+ do {
++ /* lock depth can be 0 or 1 */
+ if (unlikely(current->need_resched)) {
+ __set_current_state(TASK_RUNNING);
+ schedule();
+@@ -356,6 +382,7 @@
+ while (--max_scan >= 0 && (entry = inactive_list.prev) != &inactive_list) {
+ struct page * page;
+
++ /* lock depth is 1 or 2 */
+ if (unlikely(current->need_resched)) {
+ spin_unlock(&pagemap_lru_lock);
+ __set_current_state(TASK_RUNNING);
+@@ -673,8 +700,11 @@
+
+ for (i = pgdat->nr_zones-1; i >= 0; i--) {
+ zone = pgdat->node_zones + i;
++ debug_lock_break(0);
++#ifndef CONFIG_PREEMPT
+ if (unlikely(current->need_resched))
+ schedule();
++#endif
+ if (!zone->need_balance)
+ continue;
+ if (!try_to_free_pages(zone, GFP_KSWAPD, 0)) {
+diff -Nur linux_c860_org/net/core/dev.c linux/net/core/dev.c
+--- linux_c860_org/net/core/dev.c 2002-08-26 14:42:28.000000000 +0900
++++ linux/net/core/dev.c 2004-06-10 21:09:11.000000000 +0900
+@@ -1033,9 +1033,15 @@
+ int cpu = smp_processor_id();
+
+ if (dev->xmit_lock_owner != cpu) {
++ /*
++ * The spin_lock effectivly does a preempt lock, but
++ * we are about to drop that...
++ */
++ preempt_disable();
+ spin_unlock(&dev->queue_lock);
+ spin_lock(&dev->xmit_lock);
+ dev->xmit_lock_owner = cpu;
++ preempt_enable();
+
+ if (!netif_queue_stopped(dev)) {
+ if (netdev_nit)
+diff -Nur linux_c860_org/net/core/skbuff.c linux/net/core/skbuff.c
+--- linux_c860_org/net/core/skbuff.c 2002-08-26 14:42:28.000000000 +0900
++++ linux/net/core/skbuff.c 2004-06-10 21:09:11.000000000 +0900
+@@ -111,33 +111,37 @@
+
+ static __inline__ struct sk_buff *skb_head_from_pool(void)
+ {
+- struct sk_buff_head *list = &skb_head_pool[smp_processor_id()].list;
++ struct sk_buff_head *list;
++ struct sk_buff *skb = NULL;
++ unsigned long flags;
+
+- if (skb_queue_len(list)) {
+- struct sk_buff *skb;
+- unsigned long flags;
++ local_irq_save(flags);
+
+- local_irq_save(flags);
++ list = &skb_head_pool[smp_processor_id()].list;
++
++ if (skb_queue_len(list))
+ skb = __skb_dequeue(list);
+- local_irq_restore(flags);
+- return skb;
+- }
+- return NULL;
++
++ local_irq_restore(flags);
++ return skb;
+ }
+
+ static __inline__ void skb_head_to_pool(struct sk_buff *skb)
+ {
+- struct sk_buff_head *list = &skb_head_pool[smp_processor_id()].list;
++ struct sk_buff_head *list;
++ unsigned long flags;
+
+- if (skb_queue_len(list) < sysctl_hot_list_len) {
+- unsigned long flags;
++ local_irq_save(flags);
++ list = &skb_head_pool[smp_processor_id()].list;
+
+- local_irq_save(flags);
++ if (skb_queue_len(list) < sysctl_hot_list_len) {
+ __skb_queue_head(list, skb);
+ local_irq_restore(flags);
+
+ return;
+ }
++
++ local_irq_restore(flags);
+ kmem_cache_free(skbuff_head_cache, skb);
+ }
+
+diff -Nur linux_c860_org/net/irda/irlmp.c linux/net/irda/irlmp.c
+--- linux_c860_org/net/irda/irlmp.c 2003-01-10 15:02:41.000000000 +0900
++++ linux/net/irda/irlmp.c 2004-06-10 21:09:11.000000000 +0900
+@@ -24,6 +24,8 @@
+ *
+ * ChangeLog:
+ * 11-20-2002 SHARP apply patch (fix small bugs in /proc)
++ * 1-Nov-2003 Sharp Corporation for Tosa
++ *
+ ********************************************************************/
+
+ #include <linux/config.h>
+@@ -769,6 +771,14 @@
+ nslots = sysctl_discovery_slots = 8;
+ }
+
++#if defined(CONFIG_ARCH_SHARP_SL)
++ /*
++ * Clear the passive discovery retry flag.
++ * modified by SHARP
++ */
++ irlmp->discovery_retry = FALSE;
++#endif
++
+ /* Construct new discovery info to be used by IrLAP, */
+ irlmp->discovery_cmd.hints.word = irlmp->hints.word;
+
+diff -Nur linux_c860_org/net/irda/irlmp_event.c linux/net/irda/irlmp_event.c
+--- linux_c860_org/net/irda/irlmp_event.c 2002-08-29 12:25:13.000000000 +0900
++++ linux/net/irda/irlmp_event.c 2004-06-10 21:09:11.000000000 +0900
+@@ -22,6 +22,9 @@
+ * provide warranty for any of this software. This material is
+ * provided "AS-IS" and at no charge.
+ *
++ * ChangeLog:
++ * 1-Nov-2003 Sharp Corporation for Tosa
++ *
+ ********************************************************************/
+
+ #include <linux/config.h>
+@@ -178,6 +181,16 @@
+ /* Active discovery is conditional */
+ if (sysctl_discovery)
+ irlmp_do_discovery(sysctl_discovery_slots);
++#if defined(CONFIG_ARCH_SHARP_SL)
++ else if (( irlmp != NULL )&&( irlmp->discovery_retry )){
++ /*
++ * Retry discovery at passive mode, if it hasn't been done
++ * because of the media busy.
++ * modified by SHARP
++ */
++ irlmp_do_discovery(sysctl_discovery_slots);
++ }
++#endif
+
+ /* Restart timer */
+ irlmp_start_discovery_timer(irlmp, sysctl_discovery_timeout * HZ);
+diff -Nur linux_c860_org/net/irda/irlmp_frame.c linux/net/irda/irlmp_frame.c
+--- linux_c860_org/net/irda/irlmp_frame.c 2002-08-29 12:25:13.000000000 +0900
++++ linux/net/irda/irlmp_frame.c 2004-06-10 21:09:11.000000000 +0900
+@@ -22,6 +22,9 @@
+ * provide warranty for any of this software. This material is
+ * provided "AS-IS" and at no charge.
+ *
++ * ChangeLog:
++ * 1-Nov-2003 Sharp Corporation for Tosa
++ *
+ ********************************************************************/
+
+ #include <linux/config.h>
+@@ -397,6 +400,16 @@
+ ASSERT(self->magic == LMP_LAP_MAGIC, return;);
+
+ irlmp_add_discovery_log(irlmp->cachelog, log);
++#if defined(CONFIG_ARCH_SHARP_SL)
++ /*
++ * Retry discovery at passive mode, if it hasn't been done
++ * because of the media busy.
++ * modified by SHARP
++ */
++ if(( log == NULL )&&( irlmp != NULL )){
++ irlmp->discovery_retry = TRUE;
++ }
++#endif
+
+ /* Propagate event to various LSAPs registered for it.
+ * We bypass the LM_LAP state machine because
+diff -Nur linux_c860_org/net/socket.c linux/net/socket.c
+--- linux_c860_org/net/socket.c 2002-08-29 12:25:05.000000000 +0900
++++ linux/net/socket.c 2004-06-10 21:09:11.000000000 +0900
+@@ -140,7 +140,7 @@
+
+ static struct net_proto_family *net_families[NPROTO];
+
+-#ifdef CONFIG_SMP
++#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT)
+ static atomic_t net_family_lockct = ATOMIC_INIT(0);
+ static spinlock_t net_family_lock = SPIN_LOCK_UNLOCKED;
+
+diff -Nur linux_c860_org/net/sunrpc/pmap_clnt.c linux/net/sunrpc/pmap_clnt.c
+--- linux_c860_org/net/sunrpc/pmap_clnt.c 2002-08-26 14:38:06.000000000 +0900
++++ linux/net/sunrpc/pmap_clnt.c 2004-06-10 21:09:11.000000000 +0900
+@@ -12,6 +12,7 @@
+ #include <linux/config.h>
+ #include <linux/types.h>
+ #include <linux/socket.h>
++#include <linux/sched.h>
+ #include <linux/kernel.h>
+ #include <linux/errno.h>
+ #include <linux/uio.h>
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/sharpsl_battery.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/sharpsl_battery.patch
new file mode 100644
index 0000000000..fafdf32e55
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/sharpsl_battery.patch
@@ -0,0 +1,346 @@
+--- linux-orig/arch/arm/mach-pxa/sharpsl_battery.c 2004-02-18 23:41:57.000000000 +0300
++++ linux/arch/arm/mach-pxa/sharpsl_battery.c 2004-02-24 06:21:56.000000000 +0300
+@@ -197,7 +197,7 @@
+ #define SHARPSL_CHECK_BATTERY_WAIT_TIME_VOLT 1 // 10msec
+ #define SHARPSL_CHECK_BATTERY_WAIT_TIME_JKVAD 1 // 10msec
+ #define SHARPSL_CORGI_FATAL_ACIN_VOLT 182 // 3.45V
+-#define SHARPSL_CORGI_FATAL_NOACIN_VOLT 179 // 3.40V
++#define SHARPSL_CORGI_FATAL_NOACIN_VOLT 170 // 3.40V
+ #define SHARPSL_CORGI_WAIT_CO_TIME 15 // 15 Sec
+ //NOTICE !! you want to change this value , so you must change
+ // alarm check mirgin time ( +30 ) in the sharpsl_power.c.
+@@ -245,10 +245,17 @@
+ BATTERY_THRESH *GetMainLevel( int Volt );
+ int sharpsl_get_main_battery(void);
+ int suspend_sharpsl_read_Voltage(void);
++int GetMainPercent(int);
+ int GetMainChargePercent(int);
+ int Get_DAC_Value(int);
+ int sharpsl_check_battery(int mode);
+
++// remove warnings
++static int sharpsl_battery_thread_main(void);
++int handle_scancode(int, int);
++int sharpsl_ac_check(void);
++void sharpsl_charge_err_off(void);
++
+ /*** extern ***********************************************************************/
+ extern u32 apm_wakeup_src_mask;
+ #if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
+@@ -269,7 +276,6 @@
+
+ /*** variables ********************************************************************/
+
+-
+ #if defined(CONFIG_ARCH_PXA_POODLE)
+
+ BATTERY_THRESH sharpsl_main_battery_thresh_fl[] = {
+@@ -293,20 +299,26 @@
+ #elif defined(CONFIG_ARCH_PXA_CORGI)
+
+ BATTERY_THRESH sharpsl_main_battery_thresh_fl[] = {
+- { 194, 100, SHARPSL_BATTERY_STATUS_HIGH},
+- { 188, 75, SHARPSL_BATTERY_STATUS_HIGH},
++ { 999, 100, SHARPSL_BATTERY_STATUS_HIGH},
++ { 210, 100, SHARPSL_BATTERY_STATUS_HIGH},
++ { 194, 90, SHARPSL_BATTERY_STATUS_HIGH},
++ { 188, 70, SHARPSL_BATTERY_STATUS_HIGH},
+ { 184, 50, SHARPSL_BATTERY_STATUS_HIGH},
+ { 180, 25, SHARPSL_BATTERY_STATUS_LOW},
+- { 171, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
++ { 174, 10, SHARPSL_BATTERY_STATUS_LOW},
++ { 170, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
+ { 0, 0, SHARPSL_BATTERY_STATUS_CRITICAL},
+ };
+
+ BATTERY_THRESH sharpsl_main_battery_thresh_nofl[] = {
+- { 194, 100, SHARPSL_BATTERY_STATUS_HIGH},
+- { 188, 75, SHARPSL_BATTERY_STATUS_HIGH},
++ { 999, 100, SHARPSL_BATTERY_STATUS_HIGH},
++ { 210, 100, SHARPSL_BATTERY_STATUS_HIGH},
++ { 194, 90, SHARPSL_BATTERY_STATUS_HIGH},
++ { 188, 70, SHARPSL_BATTERY_STATUS_HIGH},
+ { 184, 50, SHARPSL_BATTERY_STATUS_HIGH},
+ { 180, 25, SHARPSL_BATTERY_STATUS_LOW},
+- { 171, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
++ { 174, 10, SHARPSL_BATTERY_STATUS_LOW},
++ { 170, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
+ { 0, 0, SHARPSL_BATTERY_STATUS_CRITICAL},
+ };
+ #endif
+@@ -332,25 +344,36 @@
+ #elif defined(CONFIG_ARCH_PXA_CORGI)
+
+ BATTERY_THRESH sharpsl_main_battery_thresh_charge_fl[] = {
+- { 200, 100, SHARPSL_BATTERY_STATUS_HIGH},
++ { 999, 100, SHARPSL_BATTERY_STATUS_HIGH},
++ { 210, 100, SHARPSL_BATTERY_STATUS_HIGH},
++ { 200, 95, SHARPSL_BATTERY_STATUS_HIGH},
+ { 196, 75, SHARPSL_BATTERY_STATUS_HIGH},
+ { 192, 50, SHARPSL_BATTERY_STATUS_HIGH},
+ { 187, 25, SHARPSL_BATTERY_STATUS_LOW},
+- { 171, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
++ { 182, 10, SHARPSL_BATTERY_STATUS_LOW},
++ { 170, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
+ { 0, 0, SHARPSL_BATTERY_STATUS_CRITICAL},
+ };
+
+ BATTERY_THRESH sharpsl_main_battery_thresh_charge_nofl[] = {
+- { 200, 100, SHARPSL_BATTERY_STATUS_HIGH},
++ { 999, 100, SHARPSL_BATTERY_STATUS_HIGH},
++ { 210, 100, SHARPSL_BATTERY_STATUS_HIGH},
++ { 200, 95, SHARPSL_BATTERY_STATUS_HIGH},
+ { 196, 75, SHARPSL_BATTERY_STATUS_HIGH},
+ { 192, 50, SHARPSL_BATTERY_STATUS_HIGH},
+ { 187, 25, SHARPSL_BATTERY_STATUS_LOW},
+- { 171, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
++ { 182, 10, SHARPSL_BATTERY_STATUS_LOW},
++ { 170, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
+ { 0, 0, SHARPSL_BATTERY_STATUS_CRITICAL},
+ };
+
+ #endif
+
++//#if defined(CONFIG_ARCH_PXA_CORGI)
++#define MAIN_BATTERY_THRES (sizeof(sharpsl_main_battery_thresh_charge_nofl) / sizeof(BATTERY_THRESH) - 1)
++//#endif
++
++
+ #if 1
+ static struct file_operations sharpsl_battery_fops = {
+ };
+@@ -389,6 +412,8 @@
+ int sharpsl_main_battery = SHARPSL_BATTERY_STATUS_HIGH;
+ int sharpsl_main_battery_percentage = 100;
+ int sharpsl_main_charge_battery = 100;
++int sharpsl_main_battery_voltage = 200;
++
+ int sharpsl_ac_status = APM_AC_OFFLINE;
+
+ static int MainCntWk = SHARPSL_MAIN_GOOD_COUNT;
+@@ -498,7 +523,7 @@
+ // 2 : check battery w/ refresh battery status.
+ void sharpsl_kick_battery_check(int before_waitms,int after_waitms,int flag)
+ {
+- int start;
++ //int start;
+
+
+ MainCntWk = MainCnt + 1;
+@@ -604,6 +629,7 @@
+ }
+ #endif
+
++ return 0;
+ }
+
+
+@@ -920,13 +946,17 @@
+ #endif
+
+ voltage = sharpsl_cnv_value(voltage);
+-
++ sharpsl_main_battery_voltage = voltage;
++
+ thresh = GetMainLevel(voltage);
+
++ sharpsl_main_battery = thresh->status;
++ sharpsl_main_battery_percentage = GetMainPercent(voltage);
++ sharpsl_main_charge_battery = GetMainChargePercent(voltage);
++
+ // if battery is low , backlight driver become to save power.
+ if ( ( ( thresh->status == SHARPSL_BATTERY_STATUS_VERYLOW ) ||
+- ( thresh->status == SHARPSL_BATTERY_STATUS_CRITICAL ) ||
+- ( thresh->status == SHARPSL_BATTERY_STATUS_LOW ) ) &&
++ ( thresh->status == SHARPSL_BATTERY_STATUS_CRITICAL )) &&
+ ( !sharpsl_main_bk_flag ) ) {
+ SHARPSL_LIMIT_CONTRAST(SHARPSL_CAUTION_CONTRAST);
+ }
+@@ -934,11 +964,7 @@
+ if ( sharpsl_main_bk_flag == 0 ) {
+ return sharpsl_main_battery;
+ }
+- sharpsl_main_battery = thresh->status;
+- sharpsl_main_battery_percentage = thresh->percentage;
+- sharpsl_main_charge_battery = GetMainChargePercent(voltage);
+-
+- //printk("bat : main battery = %d\n",sharpsl_main_battery);
++
+
+ if ( sharpsl_debug_flag != 0 ) {
+ int i;
+@@ -946,7 +972,8 @@
+ sharpsl_main_battery = sharpsl_debug_flag;
+ for (i = 0; sharpsl_main_battery_thresh_nofl[i].voltage > 0; i++) {
+ if ( sharpsl_debug_flag == sharpsl_main_battery_thresh_nofl[i].status ) {
+- sharpsl_main_battery_percentage = sharpsl_main_battery_thresh_nofl[i].percentage;
++ //sharpsl_main_battery_percentage = sharpsl_main_battery_thresh_nofl[i].percentage;
++ sharpsl_main_battery_percentage = GetMainPercent(voltage);
+ break;
+ }
+ }
+@@ -965,7 +992,7 @@
+ sharpsl_main_battery_percentage = sharpsl_main_percent_bk;
+ }
+
+- DPRINTK2("charge percent = %d ( at %d ) \n",sharpsl_main_charge_battery,(int)jiffies);
++ //DPRINTK2("charge percent = %d ( at %d ) \n",sharpsl_main_charge_battery,(int)jiffies);
+ DPRINTK(" get Main battery status %d\n",sharpsl_main_battery);
+
+ } else {
+@@ -975,40 +1002,79 @@
+ return sharpsl_main_battery;
+ }
+
+-int GetMainChargePercent( int Volt )
++int GetLevelIndex(BATTERY_THRESH *thresh, int Volt)
++{
++ int i = MAIN_BATTERY_THRES;
++
++ DPRINTK("volt = %d \n", Volt);
++ while (i > 0 && (Volt > thresh[i].voltage))
++ i--;
++
++ return i;
++}
++
++int GetPercent(BATTERY_THRESH *thresh, int Volt)
++{
++ int i = GetLevelIndex(thresh, Volt);
++
++ /* i is now between 0 and MAIN_BATTERY_THRES. That means
++ * we can safely access main_batt_thres[i] and
++ * main_batt_thres[i+1] */
++
++ {
++// long percentage = thresh[i].percentage;
++
++ long deltav = thresh[i].voltage - thresh[i + 1].voltage;
++ long deltap = thresh[i].percentage - thresh[i + 1].percentage;
++
++ long percentage =
++ thresh[i + 1].percentage +
++ deltap * (Volt - thresh[i + 1].voltage) /
++ deltav;
++
++ DPRINTK("percentage = %d \n", percentage);
++ return percentage;
++ }
++
++ return thresh[i].percentage;
++}
++
++int GetMainPercent( int Volt )
+ {
+- int i;
+ BATTERY_THRESH *thresh;
+
+- DPRINTK(" volt = %d \n",Volt);
++ if (counter_step_contrast)
++ thresh = sharpsl_main_battery_thresh_fl;
++ else
++ thresh = sharpsl_main_battery_thresh_nofl;
++
++ return GetPercent(thresh, Volt);
++}
++
++int GetMainChargePercent( int Volt )
++{
++ BATTERY_THRESH *thresh;
+
+ if (counter_step_contrast)
+- thresh = sharpsl_main_battery_thresh_charge_fl;
++ thresh = sharpsl_main_battery_thresh_charge_fl;
+ else
+- thresh = sharpsl_main_battery_thresh_charge_nofl;
+- for (i = 0; thresh[i].voltage > 0; i++) {
+- if (Volt >= thresh[i].voltage)
+- return thresh[i].percentage;
+- }
+- return thresh[i].percentage;
++ thresh = sharpsl_main_battery_thresh_charge_nofl;
++
++ return GetPercent(thresh, Volt);
+ }
+
+ BATTERY_THRESH *GetMainLevel( int Volt )
+ {
+- int i;
+ BATTERY_THRESH *thresh;
+
+ DPRINTK(" volt = %d \n",Volt);
+
+ if (counter_step_contrast)
+- thresh = sharpsl_main_battery_thresh_fl;
++ thresh = sharpsl_main_battery_thresh_fl;
+ else
+- thresh = sharpsl_main_battery_thresh_nofl;
+- for (i = 0; thresh[i].voltage > 0; i++) {
+- if (Volt >= thresh[i].voltage)
+- return &thresh[i];
+- }
+- return &thresh[i];
++ thresh = sharpsl_main_battery_thresh_nofl;
++
++ return &thresh[GetLevelIndex(thresh, Volt)];
+ }
+
+
+@@ -1018,7 +1084,7 @@
+ int Get_DAC_Value(int channel)
+ {
+ unsigned long cmd;
+- unsigned int dummy;
++ unsigned int dummy;
+ int voltage;
+
+ #if defined(CONFIG_ARCH_PXA_POODLE)
+@@ -1263,7 +1329,7 @@
+ // 0: OK
+ int sharpsl_ac_check(void)
+ {
+- int temp, i, volt;
++ int temp, i; //, volt;
+ int buff[5];
+
+ if ( in_interrupt() ) {
+@@ -1835,14 +1901,18 @@
+ int def_value;
+ char* name;
+ char* description;
++ char readonly;
+ unsigned short low_ino;
+ } sharpsl_battery_entry_t;
+
+ static sharpsl_battery_entry_t sharpsl_battery_params[] = {
+ /* { addr, def_value, name, description }*/
+- { &msglevel, 0, "msglevel", "debug message output level" },
+- { &sharpsl_debug_flag , 0 , "dflag", "debug flag" },
+- { &sharpsl_change_battery_status , 0 , "chg_status", "Change status" }
++ { &msglevel, 0, "msglevel", "debug message output level", 0 },
++ { &sharpsl_debug_flag , 0 , "dflag", "debug flag", 0 },
++ { &sharpsl_change_battery_status , 0 , "chg_status", "Change status", 1 },
++ { &sharpsl_main_battery_percentage , 0 , "charge_percentage", "Charge percentage", 1 },
++ { &sharpsl_main_battery_voltage , 0 , "main_voltage", "Main voltage", 1 }, // alias
++ { &sharpsl_main_battery_voltage , 0 , "charge_voltage", "Charge voltage", 1 }
+ };
+ #define NUM_OF_BATTERY_ENTRY (sizeof(sharpsl_battery_params)/sizeof(sharpsl_battery_entry_t))
+
+@@ -1866,7 +1936,7 @@
+ if (current_param==NULL) {
+ return -EINVAL;
+ }
+- count = sprintf(outputbuf, "0x%08X\n",
++ count = sprintf(outputbuf, "%04i\n",
+ *((volatile Word *) current_param->addr));
+ *ppos += count;
+ if (count>nbytes) /* Assume output can be read at one time */
+@@ -1891,7 +1961,7 @@
+ break;
+ }
+ }
+- if (current_param==NULL) {
++ if (current_param==NULL || current_param->readonly) {
+ return -EINVAL;
+ }
+
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/smallfonts.diff b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/smallfonts.diff
new file mode 100644
index 0000000000..bcf3734f63
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/smallfonts.diff
@@ -0,0 +1,2453 @@
+diff -Nur linux-2.4.1-pre12/drivers/video/font_4x6.c linux-2.4.1-pre12.smallfonts/drivers/video/font_4x6.c
+--- linux-2.4.1-pre12/drivers/video/font_4x6.c Wed Dec 31 17:00:00 1969
++++ linux-2.4.1-pre12.smallfonts/drivers/video/font_4x6.c Tue Jan 30 14:17:15 2001
+@@ -0,0 +1,1059 @@
++/* Font file generated by Jay Carlson from clR4x6.bdf */
++
++/*
++COMMENT Copyright 1989 Dale Schumacher, dal@syntel.mn.org
++COMMENT 399 Beacon Ave.
++COMMENT St. Paul, MN 55104-3527
++COMMENT
++COMMENT Permission to use, copy, modify, and distribute this software and
++COMMENT its documentation for any purpose and without fee is hereby
++COMMENT granted, provided that the above copyright notice appear in all
++COMMENT copies and that both that copyright notice and this permission
++COMMENT notice appear in supporting documentation, and that the name of
++COMMENT Dale Schumacher not be used in advertising or publicity pertaining to
++COMMENT distribution of the software without specific, written prior
++COMMENT permission. Dale Schumacher makes no representations about the
++COMMENT suitability of this software for any purpose. It is provided "as
++COMMENT is" without express or implied warranty.
++*/
++
++#include <video/font.h>
++
++#define FONTDATAMAX (6 * 256)
++
++static unsigned char fontdata_4x6[FONTDATAMAX] = {
++
++ /* 0 0x00 C000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0xf0, /* 11110000 */
++
++ /* 1 0x01 C001 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 2 0x02 C002 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 3 0x03 C003 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 4 0x04 C004 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 5 0x05 C005 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 6 0x06 C006 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 7 0x07 C007 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 8 0x08 C010 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 9 0x09 C011 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 10 0x0a C012 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 11 0x0b C013 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 12 0x0c C014 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 13 0x0d C015 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 14 0x0e C016 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 15 0x0f C017 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 16 0x10 C020 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 17 0x11 C021 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 18 0x12 C022 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 19 0x13 C023 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 20 0x14 C024 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 21 0x15 C025 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 22 0x16 C026 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 23 0x17 C027 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 24 0x18 C030 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 25 0x19 C031 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 26 0x1a C032 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 27 0x1b C033 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 28 0x1c C034 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 29 0x1d C035 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 30 0x1e C036 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 31 0x1f C037 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 32 0x20 C040 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 33 0x21 ! */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 34 0x22 " */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 35 0x23 # */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 36 0x24 $ */
++ 0xe0, /* 11100000 */
++ 0xc0, /* 11000000 */
++ 0xe0, /* 11100000 */
++ 0x60, /* 01100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 37 0x25 % */
++ 0xa0, /* 10100000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x80, /* 10000000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 38 0x26 & */
++ 0xe0, /* 11100000 */
++ 0x40, /* 01000000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 39 0x27 ' */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 40 0x28 ( */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 41 0x29 ) */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 42 0x2a * */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0xe0, /* 11100000 */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 43 0x2b + */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0xe0, /* 11100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 44 0x2c , */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 45 0x2d - */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 46 0x2e . */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 47 0x2f / */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x00, /* 00000000 */
++
++ /* 48 0x30 0 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 49 0x31 1 */
++ 0x40, /* 01000000 */
++ 0xc0, /* 11000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 50 0x32 2 */
++ 0xe0, /* 11100000 */
++ 0x20, /* 00100000 */
++ 0xe0, /* 11100000 */
++ 0x80, /* 10000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 51 0x33 3 */
++ 0xe0, /* 11100000 */
++ 0x20, /* 00100000 */
++ 0xe0, /* 11100000 */
++ 0x20, /* 00100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 52 0x34 4 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 53 0x35 5 */
++ 0xe0, /* 11100000 */
++ 0x80, /* 10000000 */
++ 0xe0, /* 11100000 */
++ 0x20, /* 00100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 54 0x36 6 */
++ 0xe0, /* 11100000 */
++ 0x80, /* 10000000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 55 0x37 7 */
++ 0xe0, /* 11100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 56 0x38 8 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 57 0x39 9 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x20, /* 00100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 58 0x3a : */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 59 0x3b ; */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 60 0x3c < */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x80, /* 10000000 */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 61 0x3d = */
++ 0x00, /* 00000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 62 0x3e > */
++ 0x80, /* 10000000 */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x80, /* 10000000 */
++ 0x00, /* 00000000 */
++
++ /* 63 0x3f ? */
++ 0xc0, /* 11000000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 64 0x40 @ */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x80, /* 10000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 65 0x41 A */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 66 0x42 B */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0x00, /* 00000000 */
++
++ /* 67 0x43 C */
++ 0x60, /* 01100000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 68 0x44 D */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0x00, /* 00000000 */
++
++ /* 69 0x45 E */
++ 0xe0, /* 11100000 */
++ 0x80, /* 10000000 */
++ 0xc0, /* 11000000 */
++ 0x80, /* 10000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 70 0x46 F */
++ 0xe0, /* 11100000 */
++ 0x80, /* 10000000 */
++ 0xc0, /* 11000000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x00, /* 00000000 */
++
++ /* 71 0x47 G */
++ 0x60, /* 01100000 */
++ 0x80, /* 10000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 72 0x48 H */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 73 0x49 I */
++ 0xe0, /* 11100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 74 0x4a J */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0xa0, /* 10100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 75 0x4b K */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 76 0x4c L */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 77 0x4d M */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 78 0x4e N */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0xe0, /* 11100000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 79 0x4f O */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 80 0x50 P */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x00, /* 00000000 */
++
++ /* 81 0x51 Q */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 82 0x52 R */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 83 0x53 S */
++ 0x60, /* 01100000 */
++ 0x80, /* 10000000 */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0xc0, /* 11000000 */
++ 0x00, /* 00000000 */
++
++ /* 84 0x54 T */
++ 0xe0, /* 11100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 85 0x55 U */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 86 0x56 V */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 87 0x57 W */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 88 0x58 X */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 89 0x59 Y */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 90 0x5a Z */
++ 0xe0, /* 11100000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x80, /* 10000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 91 0x5b [ */
++ 0x60, /* 01100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 92 0x5c \ */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 93 0x5d ] */
++ 0x60, /* 01100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 94 0x5e ^ */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 95 0x5f _ */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 96 0x60 ` */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 97 0x61 a */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 98 0x62 b */
++ 0x80, /* 10000000 */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0x00, /* 00000000 */
++
++ /* 99 0x63 c */
++ 0x00, /* 00000000 */
++ 0x60, /* 01100000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 100 0x64 d */
++ 0x20, /* 00100000 */
++ 0x60, /* 01100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 101 0x65 e */
++ 0x00, /* 00000000 */
++ 0x60, /* 01100000 */
++ 0xe0, /* 11100000 */
++ 0x80, /* 10000000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 102 0x66 f */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0xe0, /* 11100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 103 0x67 g */
++ 0x00, /* 00000000 */
++ 0x60, /* 01100000 */
++ 0xa0, /* 10100000 */
++ 0x60, /* 01100000 */
++ 0x20, /* 00100000 */
++ 0xc0, /* 11000000 */
++
++ /* 104 0x68 h */
++ 0x80, /* 10000000 */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 105 0x69 i */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 106 0x6a j */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0xa0, /* 10100000 */
++ 0x40, /* 01000000 */
++
++ /* 107 0x6b k */
++ 0x80, /* 10000000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 108 0x6c l */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 109 0x6d m */
++ 0x00, /* 00000000 */
++ 0xe0, /* 11100000 */
++ 0xe0, /* 11100000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 110 0x6e n */
++ 0x00, /* 00000000 */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 111 0x6f o */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 112 0x70 p */
++ 0x00, /* 00000000 */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++
++ /* 113 0x71 q */
++ 0x00, /* 00000000 */
++ 0x60, /* 01100000 */
++ 0xa0, /* 10100000 */
++ 0x60, /* 01100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++
++ /* 114 0x72 r */
++ 0x00, /* 00000000 */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x00, /* 00000000 */
++
++ /* 115 0x73 s */
++ 0x00, /* 00000000 */
++ 0x60, /* 01100000 */
++ 0xc0, /* 11000000 */
++ 0x60, /* 01100000 */
++ 0xc0, /* 11000000 */
++ 0x00, /* 00000000 */
++
++ /* 116 0x74 t */
++ 0x40, /* 01000000 */
++ 0xe0, /* 11100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 117 0x75 u */
++ 0x00, /* 00000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 118 0x76 v */
++ 0x00, /* 00000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 119 0x77 w */
++ 0x00, /* 00000000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0xe0, /* 11100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 120 0x78 x */
++ 0x00, /* 00000000 */
++ 0xa0, /* 10100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 121 0x79 y */
++ 0x00, /* 00000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x60, /* 01100000 */
++ 0x20, /* 00100000 */
++ 0xc0, /* 11000000 */
++
++ /* 122 0x7a z */
++ 0x00, /* 00000000 */
++ 0xe0, /* 11100000 */
++ 0x60, /* 01100000 */
++ 0xc0, /* 11000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 123 0x7b { */
++ 0x60, /* 01100000 */
++ 0x40, /* 01000000 */
++ 0xc0, /* 11000000 */
++ 0x40, /* 01000000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 124 0x7c | */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 125 0x7d } */
++ 0xc0, /* 11000000 */
++ 0x40, /* 01000000 */
++ 0x60, /* 01100000 */
++ 0x40, /* 01000000 */
++ 0xc0, /* 11000000 */
++ 0x00, /* 00000000 */
++
++ /* 126 0x7e ~ */
++ 0x20, /* 00100000 */
++ 0xe0, /* 11100000 */
++ 0x80, /* 10000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 127 0x7f C177 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++};
++
++struct fbcon_font_desc font_clean_4x6 = {
++ CLEAN4x6_IDX,
++ "Clean4x6",
++ 4,
++ 6,
++ fontdata_4x6,
++ -1000 /* Try avoiding this font if possible unless screen really small */
++};
+diff -Nur linux-2.4.1-pre12/drivers/video/font_5x8.c linux-2.4.1-pre12.smallfonts/drivers/video/font_5x8.c
+--- linux-2.4.1-pre12/drivers/video/font_5x8.c Wed Dec 31 17:00:00 1969
++++ linux-2.4.1-pre12.smallfonts/drivers/video/font_5x8.c Tue Jan 30 14:17:16 2001
+@@ -0,0 +1,1314 @@
++/* Font file generated by Jay Carlson from clR5x8.bdf */
++
++/*
++COMMENT Copyright 1989 Dale Schumacher, dal@syntel.mn.org
++COMMENT 399 Beacon Ave.
++COMMENT St. Paul, MN 55104-3527
++COMMENT
++COMMENT Permission to use, copy, modify, and distribute this software and
++COMMENT its documentation for any purpose and without fee is hereby
++COMMENT granted, provided that the above copyright notice appear in all
++COMMENT copies and that both that copyright notice and this permission
++COMMENT notice appear in supporting documentation, and that the name of
++COMMENT Dale Schumacher not be used in advertising or publicity pertaining to
++COMMENT distribution of the software without specific, written prior
++COMMENT permission. Dale Schumacher makes no representations about the
++COMMENT suitability of this software for any purpose. It is provided "as
++COMMENT is" without express or implied warranty.
++*/
++
++#include <video/font.h>
++
++#define FONTDATAMAX (8 * 256)
++
++static unsigned char fontdata_5x8[FONTDATAMAX] = {
++
++ /* 0 0x00 C000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 1 0x01 C001 */
++ 0x00, /* 00000000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x78, /* 01111000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 2 0x02 C002 */
++ 0x00, /* 00000000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 3 0x03 C003 */
++ 0x00, /* 00000000 */
++ 0x38, /* 00111000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x38, /* 00111000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 4 0x04 C004 */
++ 0x00, /* 00000000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 5 0x05 C005 */
++ 0x00, /* 00000000 */
++ 0x78, /* 01111000 */
++ 0x40, /* 01000000 */
++ 0x70, /* 01110000 */
++ 0x40, /* 01000000 */
++ 0x78, /* 01111000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 6 0x06 C006 */
++ 0x00, /* 00000000 */
++ 0x78, /* 01111000 */
++ 0x40, /* 01000000 */
++ 0x70, /* 01110000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 7 0x07 C007 */
++ 0x00, /* 00000000 */
++ 0x38, /* 00111000 */
++ 0x40, /* 01000000 */
++ 0x58, /* 01011000 */
++ 0x48, /* 01001000 */
++ 0x38, /* 00111000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 8 0x08 C010 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x78, /* 01111000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 9 0x09 C011 */
++ 0x00, /* 00000000 */
++ 0x70, /* 01110000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 10 0x0a C012 */
++ 0x00, /* 00000000 */
++ 0x18, /* 00011000 */
++ 0x08, /* 00001000 */
++ 0x08, /* 00001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 11 0x0b C013 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x50, /* 01010000 */
++ 0x60, /* 01100000 */
++ 0x50, /* 01010000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 12 0x0c C014 */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x78, /* 01111000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 13 0x0d C015 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x78, /* 01111000 */
++ 0x78, /* 01111000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 14 0x0e C016 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x68, /* 01101000 */
++ 0x58, /* 01011000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 15 0x0f C017 */
++ 0x00, /* 00000000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 16 0x10 C020 */
++ 0x00, /* 00000000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 17 0x11 C021 */
++ 0x00, /* 00000000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x18, /* 00011000 */
++ 0x00, /* 00000000 */
++
++ /* 18 0x12 C022 */
++ 0x00, /* 00000000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x50, /* 01010000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 19 0x13 C023 */
++ 0x00, /* 00000000 */
++ 0x38, /* 00111000 */
++ 0x40, /* 01000000 */
++ 0x30, /* 00110000 */
++ 0x08, /* 00001000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 20 0x14 C024 */
++ 0x00, /* 00000000 */
++ 0xf8, /* 11111000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 21 0x15 C025 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 22 0x16 C026 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 23 0x17 C027 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x78, /* 01111000 */
++ 0x78, /* 01111000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 24 0x18 C030 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 25 0x19 C031 */
++ 0x00, /* 00000000 */
++ 0x88, /* 10001000 */
++ 0x50, /* 01010000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 26 0x1a C032 */
++ 0x00, /* 00000000 */
++ 0x78, /* 01111000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x78, /* 01111000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 27 0x1b C033 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 28 0x1c C034 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 29 0x1d C035 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 30 0x1e C036 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 31 0x1f C037 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 32 0x20 C040 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 33 0x21 ! */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 34 0x22 " */
++ 0x28, /* 00101000 */
++ 0x28, /* 00101000 */
++ 0x28, /* 00101000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 35 0x23 # */
++ 0x50, /* 01010000 */
++ 0x50, /* 01010000 */
++ 0xf8, /* 11111000 */
++ 0x50, /* 01010000 */
++ 0xf8, /* 11111000 */
++ 0x50, /* 01010000 */
++ 0x50, /* 01010000 */
++ 0x00, /* 00000000 */
++
++ /* 36 0x24 $ */
++ 0x20, /* 00100000 */
++ 0x78, /* 01111000 */
++ 0xa0, /* 10100000 */
++ 0x70, /* 01110000 */
++ 0x28, /* 00101000 */
++ 0xf0, /* 11110000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 37 0x25 % */
++ 0x60, /* 01100000 */
++ 0x68, /* 01101000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x58, /* 01011000 */
++ 0x18, /* 00011000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 38 0x26 & */
++ 0x30, /* 00110000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x28, /* 00101000 */
++ 0x50, /* 01010000 */
++ 0x50, /* 01010000 */
++ 0x28, /* 00101000 */
++ 0x00, /* 00000000 */
++
++ /* 39 0x27 ' */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 40 0x28 ( */
++ 0x08, /* 00001000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x10, /* 00010000 */
++ 0x08, /* 00001000 */
++ 0x00, /* 00000000 */
++
++ /* 41 0x29 ) */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 42 0x2a * */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x78, /* 01111000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 43 0x2b + */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0xf8, /* 11111000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 44 0x2c , */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++
++ /* 45 0x2d - */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0xf8, /* 11111000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 46 0x2e . */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 47 0x2f / */
++ 0x08, /* 00001000 */
++ 0x08, /* 00001000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++
++ /* 48 0x30 0 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x58, /* 01011000 */
++ 0x68, /* 01101000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 49 0x31 1 */
++ 0x20, /* 00100000 */
++ 0x60, /* 01100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 50 0x32 2 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x08, /* 00001000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x78, /* 01111000 */
++ 0x00, /* 00000000 */
++
++ /* 51 0x33 3 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x08, /* 00001000 */
++ 0x30, /* 00110000 */
++ 0x08, /* 00001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 52 0x34 4 */
++ 0x08, /* 00001000 */
++ 0x18, /* 00011000 */
++ 0x18, /* 00011000 */
++ 0x28, /* 00101000 */
++ 0x28, /* 00101000 */
++ 0x78, /* 01111000 */
++ 0x08, /* 00001000 */
++ 0x00, /* 00000000 */
++
++ /* 53 0x35 5 */
++ 0x78, /* 01111000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x70, /* 01110000 */
++ 0x08, /* 00001000 */
++ 0x08, /* 00001000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++
++ /* 54 0x36 6 */
++ 0x30, /* 00110000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 55 0x37 7 */
++ 0x78, /* 01111000 */
++ 0x08, /* 00001000 */
++ 0x08, /* 00001000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 56 0x38 8 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 57 0x39 9 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x38, /* 00111000 */
++ 0x08, /* 00001000 */
++ 0x08, /* 00001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 58 0x3a : */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 59 0x3b ; */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++
++ /* 60 0x3c < */
++ 0x08, /* 00001000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x10, /* 00010000 */
++ 0x08, /* 00001000 */
++ 0x00, /* 00000000 */
++
++ /* 61 0x3d = */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0xf8, /* 11111000 */
++ 0x00, /* 00000000 */
++ 0xf8, /* 11111000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 62 0x3e > */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x10, /* 00010000 */
++ 0x08, /* 00001000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 63 0x3f ? */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x08, /* 00001000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 64 0x40 @ */
++ 0x00, /* 00000000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x58, /* 01011000 */
++ 0x58, /* 01011000 */
++ 0x40, /* 01000000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 65 0x41 A */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x78, /* 01111000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 66 0x42 B */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++
++ /* 67 0x43 C */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 68 0x44 D */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++
++ /* 69 0x45 E */
++ 0x78, /* 01111000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x70, /* 01110000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x78, /* 01111000 */
++ 0x00, /* 00000000 */
++
++ /* 70 0x46 F */
++ 0x78, /* 01111000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x70, /* 01110000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 71 0x47 G */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x40, /* 01000000 */
++ 0x58, /* 01011000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x38, /* 00111000 */
++ 0x00, /* 00000000 */
++
++ /* 72 0x48 H */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x78, /* 01111000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 73 0x49 I */
++ 0x70, /* 01110000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++
++ /* 74 0x4a J */
++ 0x18, /* 00011000 */
++ 0x08, /* 00001000 */
++ 0x08, /* 00001000 */
++ 0x08, /* 00001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 75 0x4b K */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x50, /* 01010000 */
++ 0x60, /* 01100000 */
++ 0x50, /* 01010000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 76 0x4c L */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x78, /* 01111000 */
++ 0x00, /* 00000000 */
++
++ /* 77 0x4d M */
++ 0x48, /* 01001000 */
++ 0x78, /* 01111000 */
++ 0x78, /* 01111000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 78 0x4e N */
++ 0x48, /* 01001000 */
++ 0x68, /* 01101000 */
++ 0x68, /* 01101000 */
++ 0x58, /* 01011000 */
++ 0x58, /* 01011000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 79 0x4f O */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 80 0x50 P */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 81 0x51 Q */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x18, /* 00011000 */
++
++ /* 82 0x52 R */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x50, /* 01010000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 83 0x53 S */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x40, /* 01000000 */
++ 0x30, /* 00110000 */
++ 0x08, /* 00001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 84 0x54 T */
++ 0xf8, /* 11111000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 85 0x55 U */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 86 0x56 V */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x30, /* 00110000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 87 0x57 W */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x78, /* 01111000 */
++ 0x78, /* 01111000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 88 0x58 X */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 89 0x59 Y */
++ 0x88, /* 10001000 */
++ 0x88, /* 10001000 */
++ 0x50, /* 01010000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 90 0x5a Z */
++ 0x78, /* 01111000 */
++ 0x08, /* 00001000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x78, /* 01111000 */
++ 0x00, /* 00000000 */
++
++ /* 91 0x5b [ */
++ 0x38, /* 00111000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x38, /* 00111000 */
++ 0x00, /* 00000000 */
++
++ /* 92 0x5c \ */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x08, /* 00001000 */
++ 0x08, /* 00001000 */
++
++ /* 93 0x5d ] */
++ 0x70, /* 01110000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++
++ /* 94 0x5e ^ */
++ 0x20, /* 00100000 */
++ 0x50, /* 01010000 */
++ 0x88, /* 10001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 95 0x5f _ */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0xf8, /* 11111000 */
++
++ /* 96 0x60 ` */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x10, /* 00010000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 97 0x61 a */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x38, /* 00111000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x58, /* 01011000 */
++ 0x28, /* 00101000 */
++ 0x00, /* 00000000 */
++
++ /* 98 0x62 b */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++
++ /* 99 0x63 c */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x38, /* 00111000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x38, /* 00111000 */
++ 0x00, /* 00000000 */
++
++ /* 100 0x64 d */
++ 0x08, /* 00001000 */
++ 0x08, /* 00001000 */
++ 0x38, /* 00111000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x38, /* 00111000 */
++ 0x00, /* 00000000 */
++
++ /* 101 0x65 e */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x78, /* 01111000 */
++ 0x40, /* 01000000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 102 0x66 f */
++ 0x18, /* 00011000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x70, /* 01110000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 103 0x67 g */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x38, /* 00111000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x38, /* 00111000 */
++ 0x08, /* 00001000 */
++ 0x30, /* 00110000 */
++
++ /* 104 0x68 h */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 105 0x69 i */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x60, /* 01100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++
++ /* 106 0x6a j */
++ 0x10, /* 00010000 */
++ 0x00, /* 00000000 */
++ 0x30, /* 00110000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x60, /* 01100000 */
++
++ /* 107 0x6b k */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x48, /* 01001000 */
++ 0x50, /* 01010000 */
++ 0x60, /* 01100000 */
++ 0x50, /* 01010000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 108 0x6c l */
++ 0x60, /* 01100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++
++ /* 109 0x6d m */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0xd0, /* 11010000 */
++ 0xa8, /* 10101000 */
++ 0xa8, /* 10101000 */
++ 0xa8, /* 10101000 */
++ 0x88, /* 10001000 */
++ 0x00, /* 00000000 */
++
++ /* 110 0x6e n */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 111 0x6f o */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 112 0x70 p */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x40, /* 01000000 */
++
++ /* 113 0x71 q */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x38, /* 00111000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x38, /* 00111000 */
++ 0x08, /* 00001000 */
++
++ /* 114 0x72 r */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x58, /* 01011000 */
++ 0x60, /* 01100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 115 0x73 s */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x38, /* 00111000 */
++ 0x40, /* 01000000 */
++ 0x30, /* 00110000 */
++ 0x08, /* 00001000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++
++ /* 116 0x74 t */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x78, /* 01111000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x18, /* 00011000 */
++ 0x00, /* 00000000 */
++
++ /* 117 0x75 u */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x38, /* 00111000 */
++ 0x00, /* 00000000 */
++
++ /* 118 0x76 v */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 119 0x77 w */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x88, /* 10001000 */
++ 0xa8, /* 10101000 */
++ 0xa8, /* 10101000 */
++ 0xa8, /* 10101000 */
++ 0x50, /* 01010000 */
++ 0x00, /* 00000000 */
++
++ /* 120 0x78 x */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 121 0x79 y */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x38, /* 00111000 */
++ 0x08, /* 00001000 */
++ 0x30, /* 00110000 */
++
++ /* 122 0x7a z */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x78, /* 01111000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x78, /* 01111000 */
++ 0x00, /* 00000000 */
++
++ /* 123 0x7b { */
++ 0x08, /* 00001000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x08, /* 00001000 */
++ 0x00, /* 00000000 */
++
++ /* 124 0x7c | */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 125 0x7d } */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 126 0x7e ~ */
++ 0x28, /* 00101000 */
++ 0x50, /* 01010000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 127 0x7f C177 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x50, /* 01010000 */
++ 0x50, /* 01010000 */
++ 0x88, /* 10001000 */
++ 0xf8, /* 11111000 */
++ 0x00, /* 00000000 */
++};
++
++struct fbcon_font_desc font_clean_5x8 = {
++ CLEAN5x8_IDX,
++ "Clean5x8",
++ 5,
++ 8,
++ fontdata_5x8,
++ -1000 /* Try avoiding this font if possible unless screen really small */
++};
+--- Makefile.~1~ 2002-02-26 05:38:07 +10:00
++++ linux/drivers/video/Makefile 2004-08-31 18:04:15 +10:00
+@@ -33,6 +33,8 @@
+ obj-$(CONFIG_FONT_6x11) += font_6x11.o
+ obj-$(CONFIG_FONT_PEARL_8x8) += font_pearl_8x8.o
+ obj-$(CONFIG_FONT_ACORN_8x8) += font_acorn_8x8.o
++obj-$(CONFIG_FONT_5x8) += font_5x8.o
++obj-$(CONFIG_FONT_4x6) += font_4x6.o
+
+ # Add fbmon.o back into obj-$(CONFIG_FB) in 2.5.x
+ obj-$(CONFIG_FB) += fbmem.o fbcmap.o modedb.o fbcon.o fonts.o
+--- Config.in.~1~ 2002-02-26 05:38:07 +10:00
++++ linux/drivers/video/Config.in 2004-08-31 18:03:46 +10:00
+@@ -424,6 +424,8 @@
+ bool ' VGA 8x16 font' CONFIG_FONT_8x16
+ if [ "$CONFIG_FBCON_FONTWIDTH8_ONLY" = "n" ]; then
+ bool ' Mac console 6x11 font (not supported by all drivers)' CONFIG_FONT_6x11
++ bool ' X11 Clean 5x8 font (not supported by all drivers)' CONFIG_FONT_5x8
++ bool ' X11 Clean 4x6 font (not supported by all drivers)' CONFIG_FONT_4x6
+ fi
+ bool ' Pearl (old m68k) console 8x8 font' CONFIG_FONT_PEARL_8x8
+ bool ' Acorn console 8x8 font' CONFIG_FONT_ACORN_8x8
+@@ -437,6 +439,8 @@
+ if [ "$CONFIG_FBCON_FONTWIDTH8_ONLY" = "n" ]; then
+ bool ' Sparc console 12x22 font (not supported by all drivers)' CONFIG_FONT_SUN12x22
+ bool ' Mac console 6x11 font (not supported by all drivers)' CONFIG_FONT_6x11
++ bool ' X11 Clean 5x8 font (not supported by all drivers)' CONFIG_FONT_5x8
++ bool ' X11 Clean 4x6 font (not supported by all drivers)' CONFIG_FONT_4x6
+ fi
+ bool ' Pearl (old m68k) console 8x8 font' CONFIG_FONT_PEARL_8x8
+ bool ' Acorn console 8x8 font' CONFIG_FONT_ACORN_8x8
+--- fonts.c.~1~ 2001-03-03 12:38:39 +10:00
++++ linux/drivers/video/fonts.c 2004-08-31 18:08:22 +10:00
+@@ -56,6 +56,16 @@
+ #undef NO_FONTS
+ &font_pearl_8x8,
+ #endif
++#ifdef CONFIG_FONT_5x8
++#if defined(CONFIG_FBCON_MAC) /* XXX fixme, need better test */
++#undef NO_FONTS
++#endif
++ &font_clean_5x8,
++#endif
++#ifdef CONFIG_FONT_4x6
++#undef NO_FONTS
++ &font_clean_4x6,
++#endif
+ };
+
+ #define num_fonts (sizeof(fbcon_fonts)/sizeof(*fbcon_fonts))
+--- font.h.~1~ 1999-01-20 04:47:48 +10:00
++++ linux/include/video/font.h 2004-08-31 18:10:39 +10:00
+@@ -28,6 +28,8 @@
+ #define SUN8x16_IDX 4
+ #define SUN12x22_IDX 5
+ #define ACORN8x8_IDX 6
++#define CLEAN5x8_IDX 7
++#define CLEAN4x6_IDX 8
+
+ extern struct fbcon_font_desc font_vga_8x8,
+ font_vga_8x16,
+@@ -35,7 +37,9 @@
+ font_vga_6x11,
+ font_sun_8x16,
+ font_sun_12x22,
+- font_acorn_8x8;
++ font_acorn_8x8,
++ font_clean_5x8,
++ font_clean_4x6;
+
+ /* Find a font with a specific name */
+
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/swap-performance.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/swap-performance.patch
new file mode 100644
index 0000000000..1cde717bb4
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/swap-performance.patch
@@ -0,0 +1,19 @@
+*** ../linux/mm/swap.c Tue Jan 14 14:54:41 2003
+--- linux/mm/swap.c Sun Sep 28 21:34:25 2003
+***************
+*** 32,38 ****
+ int page_cluster;
+
+ pager_daemon_t pager_daemon = {
+! 512, /* base number for calculating the number of tries */
+ SWAP_CLUSTER_MAX, /* minimum number of tries */
+ 8, /* do swap I/O in clusters of this size */
+ };
+--- 32,38 ----
+ int page_cluster;
+
+ pager_daemon_t pager_daemon = {
+! 128, /* base number for calculating the number of tries */
+ SWAP_CLUSTER_MAX, /* minimum number of tries */
+ 8, /* do swap I/O in clusters of this size */
+ };
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/tosa-power-key-off.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/tosa-power-key-off.patch
new file mode 100644
index 0000000000..e9ced6c8cc
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/tosa-power-key-off.patch
@@ -0,0 +1,144 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+Index: linux/drivers/char/tosa_ts.c
+===================================================================
+--- linux.orig/drivers/char/tosa_ts.c 2005-02-15 14:32:53.000000000 +0000
++++ linux/drivers/char/tosa_ts.c 2005-02-15 14:32:58.000000000 +0000
+@@ -205,10 +205,53 @@
+ write: tosa_ts_write_params,
+ };
+
++#if defined(CONFIG_TOSA_POWER_KEY_OFF)
++extern unsigned int power_key_off_mode;
++
++static ssize_t power_key_off_read_params(struct file *file, char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ char outputbuf[32];
++ int count;
++
++ if (*ppos>0) /* Assume reading completed in previous read*/
++ return 0;
++ count = sprintf(outputbuf, "%d\n", (unsigned int)power_key_off_mode);
++ count++;
++ *ppos += count;
++ if (count>nbytes) /* Assume output can be read at one time */
++ return -EINVAL;
++ if (copy_to_user(buf, outputbuf, count+1))
++ return -EFAULT;
++ return count;
++}
++
++static ssize_t power_key_off_write_params(struct file *file, const char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ unsigned int param=0;
++
++ sscanf(buf,"%d",&param);
++ if (power_key_off_mode != param) {
++ power_key_off_mode = param;
++ printk("power_key_off = %d\n", power_key_off_mode);
++ }
++ return nbytes;
++}
++
++static struct file_operations proc_power_key_off_operations = {
++ read: power_key_off_read_params,
++ write: power_key_off_write_params,
++};
++#endif
++
+ static int init_procinfo(void)
+ {
+ int i;
+ struct proc_dir_entry *entry;
++#if defined(CONFIG_TOSA_POWER_KEY_OFF)
++ struct proc_dir_entry *power_key_off_proc;
++#endif
+
+ proc_ts = proc_mkdir("driver/ts", NULL);
+ if (proc_ts == NULL) {
+@@ -234,6 +277,12 @@
+ }
+ }
+
++#if defined(CONFIG_TOSA_POWER_KEY_OFF)
++ power_key_off_proc = create_proc_entry("power_key_off", 0, NULL);
++ if (power_key_off_proc)
++ power_key_off_proc->proc_fops = &proc_power_key_off_operations;
++#endif
++
+ return 0;
+ }
+
+Index: linux/drivers/char/Config.in
+===================================================================
+--- linux.orig/drivers/char/Config.in 2005-02-15 14:32:41.000000000 +0000
++++ linux/drivers/char/Config.in 2005-02-15 14:32:58.000000000 +0000
+@@ -35,6 +35,8 @@
+ if [ "$CONFIG_SERIAL_SL_SERIES" = "y" ]; then
+ bool ' SL-series Bluetooth support' CONFIG_BLUETOOTH_SL
+ fi
++ dep_bool ' Tosa power key suspend (EXPERIMENTAL)' CONFIG_TOSA_POWER_KEY_OFF $CONFIG_ARCH_PXA_TOSA
++ dep_bool ' Tosa Boot On power key suspend' CONFIG_BOOT_TOSA_POWER_KEY_OFF $CONFIG_TOSA_POWER_KEY_OFF
+ fi
+ bool 'Use Keyboard device file (EXPERIMENTAL)' CONFIG_KBD_DEV_FILE
+ if [ "$CONFIG_SA1100_COLLIE" = "y" ]; then
+Index: linux/drivers/char/keyboard.c
+===================================================================
+--- linux.orig/drivers/char/keyboard.c 2005-02-15 14:32:48.000000000 +0000
++++ linux/drivers/char/keyboard.c 2005-02-15 14:32:58.000000000 +0000
+@@ -119,8 +119,8 @@
+ static struct kbd_struct * kbd = kbd_table;
+ static struct tty_struct * tty;
+
+-#if defined(CONFIG_SL7X0_POWER_KEY_OFF)
+-#if defined(CONFIG_BOOT_POWER_KEY_OFF)
++#if defined(CONFIG_SL7X0_POWER_KEY_OFF) || defined(CONFIG_TOSA_POWER_KEY_OFF)
++#if defined(CONFIG_BOOT_POWER_KEY_OFF) || defined(CONFIG_BOOT_TOSA_POWER_KEY_OFF)
+ unsigned int power_key_off_mode = 1;
+ #else
+ unsigned int power_key_off_mode = 0;
+@@ -245,7 +245,7 @@
+ void handle_scancode(unsigned char scancode, int down)
+ {
+
+-#if defined(CONFIG_SL7X0_POWER_KEY_OFF)
++#if defined(CONFIG_SL7X0_POWER_KEY_OFF) || defined(CONFIG_TOSA_POWER_KEY_OFF)
+ /* printk("scancode = %x down = %x \n",scancode,down); */
+ /* SL-C700 side power 0x6d */
+ if ( power_key_off_mode && ( scancode == 0x6d ) && ( down == 0x01 ) ){
+@@ -282,7 +282,7 @@
+ handle_scancode_main ( scancode, down );
+ } else
+ #endif
+-#if defined(CONFIG_SL7X0_POWER_KEY_OFF) || defined(CONFIG_SL_3BUTTON_PATCH)
++#if defined(CONFIG_SL7X0_POWER_KEY_OFF) || defined(CONFIG_SL_3BUTTON_PATCH) || defined(CONFIG_TOSA_POWER_KEY_OFF)
+ {
+
+ handle_scancode_main ( scancode, down );
+Index: linux/arch/arm/mach-pxa/sharpsl_power.c
+===================================================================
+--- linux.orig/arch/arm/mach-pxa/sharpsl_power.c 2005-02-15 14:32:41.000000000 +0000
++++ linux/arch/arm/mach-pxa/sharpsl_power.c 2005-02-16 09:45:13.000000000 +0000
+@@ -1725,7 +1725,7 @@
+ return 0;
+ }
+
+-#if defined(CONFIG_SL7X0_POWER_KEY_OFF)
++#if defined(CONFIG_SL7X0_POWER_KEY_OFF) || defined(CONFIG_TOSA_POWER_KEY_OFF)
+ static int key_suspend_thread(void* unused)
+ {
+ int time_cnt = 0;
+@@ -1854,7 +1854,7 @@
+ }
+
+ kernel_thread(sharpsl_off_thread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
+-#if defined(CONFIG_SL7X0_POWER_KEY_OFF)
++#if defined(CONFIG_SL7X0_POWER_KEY_OFF) || defined(CONFIG_TOSA_POWER_KEY_OFF)
+ kernel_thread(key_suspend_thread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
+ #endif
+ #if defined(CONFIG_ARCH_PXA_SHEPHERD) || defined(CONFIG_ARCH_PXA_TOSA)
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/tosa_map.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/tosa_map.patch
new file mode 100644
index 0000000000..feca970614
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/tosa_map.patch
@@ -0,0 +1,889 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- linux/drivers/char/tosa_keymap.c~tosa_map.patch
++++ linux/drivers/char/tosa_keymap.c
+@@ -6,348 +6,88 @@
+ #include <linux/keyboard.h>
+ #include <linux/kd.h>
+
+-u_short plain_map[] = {
++u_short plain_map[NR_KEYS] = {
+ 0xf200, 0xfb61, 0xfb62, 0xfb63, 0xfb64, 0xfb65, 0xfb66, 0xfb67,
+ 0xfb68, 0xfb69, 0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d, 0xfb6e, 0xfb6f,
+ 0xfb70, 0xfb71, 0xfb72, 0xfb73, 0xfb74, 0xfb75, 0xfb76, 0xfb77,
+- 0xfb78, 0xfb79, 0xfb7a, 0xf700, 0xf201, 0xf101, 0xf703, 0xf008,
+- 0xf208, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf201,
++ 0xfb78, 0xfb79, 0xfb7a, 0xf700, 0xf201, 0xf101, 0xf200, 0xf008,
++ 0xf07c, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf201,
+ 0xf200, 0xf031, 0xf032, 0xf033, 0xf034, 0xf035, 0xf036, 0xf037,
+- 0xf038, 0xf039, 0xf030, 0xf02d, 0xf05e, 0xf05c, 0xf05b, 0xf040,
+- 0xf702, 0xf703, 0xf702, 0xf02b, 0xfa00, 0xf040, 0xf03f, 0xf02c,
+- 0xf02e, 0xf009, 0xf104, 0xf105, 0xf106, 0xf02f, 0xf027, 0xf301,
+- 0xf302, 0xf303, 0xf304, 0xf305, 0xf306, 0xf307, 0xf308, 0xf309,
+- 0xf300, 0xf07f, 0xf30d, 0xf30c, 0xf200, 0xf30b, 0xf30a, 0xf30e,
+- 0xf702, 0xf703, 0xf01b, 0xf020, 0xf020, 0xf310, 0xf200, 0xf03b,
+- 0xf03a, 0xf05d, 0xf02c, 0xf02e, 0xf02f, 0xf05f, 0xf200, 0xf700,
+- 0xf114, 0xf117, 0xf118, 0xf119, 0xf701, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf702, 0xf200, 0xf200,
+- 0xf702, 0xf703, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf038, 0xf039, 0xf030, 0xfbe4, 0xfbfc, 0xfbf6, 0xfbc4, 0xfbdc,
++ 0xfbd6, 0xfbdf, 0xf02d, 0xf02b, 0xfa00, 0xf040, 0xf03f, 0xf02c,
++ 0xf02e, 0xf009, 0xf104, 0xf105, 0xf106, 0xf02f, 0xf027, 0xf03b,
++ 0xf022, 0xf03a, 0xf023, 0xf024, 0xf025, 0xf05f, 0xf026, 0xf02a,
++ 0xf028, 0xf07f, 0xf109, 0xf03d, 0xf029, 0xf07e, 0xf03c, 0xf03e,
++ 0xf702, 0xf703, 0xf200, 0xf020, 0xf020, 0xf200, 0xf021, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf700,
++ 0xf702, 0xf702, 0xf703, 0xf703, 0xf701, 0xf200, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+ };
+
+-u_short shift_map[] = {
++u_short shift_map[NR_KEYS] = {
+ 0xf200, 0xfb41, 0xfb42, 0xfb43, 0xfb44, 0xfb45, 0xfb46, 0xfb47,
+ 0xfb48, 0xfb49, 0xfb4a, 0xfb4b, 0xfb4c, 0xfb4d, 0xfb4e, 0xfb4f,
+ 0xfb50, 0xfb51, 0xfb52, 0xfb53, 0xfb54, 0xfb55, 0xfb56, 0xfb57,
+- 0xfb58, 0xfb59, 0xfb5a, 0xf700, 0xf201, 0xf101, 0xf702, 0xf008,
+- 0xf208, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf201,
+- 0xf200, 0xf021, 0xf022, 0xf023, 0xf024, 0xf025, 0xf026, 0xf027,
+- 0xf028, 0xf029, 0xf07e, 0xf03d, 0xf07e, 0xf07c, 0xf07b, 0xf060,
+- 0xf702, 0xf703, 0xf702, 0xf02b, 0xfa00, 0xf040, 0xf03f, 0xf03b,
+- 0xf03a, 0xf009, 0xf104, 0xf105, 0xf106, 0xf03f, 0xf022, 0xf301,
+- 0xf302, 0xf303, 0xf304, 0xf305, 0xf306, 0xf307, 0xf308, 0xf309,
+- 0xf300, 0xf07f, 0xf30d, 0xf30c, 0xf200, 0xf30b, 0xf30a, 0xf30e,
+- 0xf702, 0xf703, 0xf01b, 0xf020, 0xf020, 0xf310, 0xf200, 0xf02b,
+- 0xf02a, 0xf07d, 0xf03c, 0xf03e, 0xf03f, 0xf05f, 0xf200, 0xf700,
+- 0xf114, 0xf117, 0xf20b, 0xf20a, 0xf701, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf702, 0xf200, 0xf200,
+- 0xf702, 0xf703, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xfb58, 0xfb59, 0xfb5a, 0xf700, 0xf201, 0xf101, 0xf200, 0xf008,
++ 0xf07c, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf201,
++ 0xf200, 0xf031, 0xf032, 0xf033, 0xf034, 0xf035, 0xf036, 0xf037,
++ 0xf038, 0xf039, 0xf030, 0xfbe4, 0xfbfc, 0xfbf6, 0xfbc4, 0xfbdc,
++ 0xfbd6, 0xfbdf, 0xf02d, 0xf02b, 0xfa00, 0xf040, 0xf03f, 0xf02c,
++ 0xf02e, 0xf009, 0xf104, 0xf105, 0xf106, 0xf02f, 0xf027, 0xf03b,
++ 0xf022, 0xf03a, 0xf023, 0xf024, 0xf025, 0xf05f, 0xf026, 0xf02a,
++ 0xf028, 0xf07f, 0xf109, 0xf03d, 0xf029, 0xf07e, 0xf03c, 0xf03e,
++ 0xf702, 0xf703, 0xf200, 0xf020, 0xf020, 0xf200, 0xf021, 0xf200,
++ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf700,
++ 0xf702, 0xf702, 0xf703, 0xf703, 0xf701, 0xf200, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+ };
+
+-u_short ctrl_map[] = {
++u_short ctrl_map[NR_KEYS] = {
+ 0xf200, 0xf001, 0xf002, 0xf003, 0xf004, 0xf005, 0xf006, 0xf007,
+ 0xf008, 0xf009, 0xf00a, 0xf00b, 0xf00c, 0xf00d, 0xf00e, 0xf00f,
+ 0xf010, 0xf011, 0xf012, 0xf013, 0xf014, 0xf015, 0xf016, 0xf017,
+ 0xf018, 0xf019, 0xf01a, 0xf700, 0xf201, 0xf101, 0xf200, 0xf008,
+- 0xf208, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf201,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf702, 0xf703, 0xf702, 0xf02b, 0xfa00, 0xf040, 0xf03f, 0xf200,
+- 0xf200, 0xf009, 0xf104, 0xf105, 0xf106, 0xf200, 0xf200, 0xf301,
+- 0xf302, 0xf303, 0xf304, 0xf305, 0xf306, 0xf307, 0xf308, 0xf309,
+- 0xf300, 0xf07f, 0xf30d, 0xf30c, 0xf200, 0xf30b, 0xf30a, 0xf30e,
+- 0xf702, 0xf703, 0xf01b, 0xf020, 0xf000, 0xf310, 0xf200, 0xf200,
++ 0xf07c, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf201,
++ 0xf200, 0xf031, 0xf032, 0xf033, 0xf034, 0xf035, 0xf036, 0xf037,
++ 0xf038, 0xf039, 0xf030, 0xfbe4, 0xfbfc, 0xfbf6, 0xfbc4, 0xfbdc,
++ 0xfbd6, 0xfbdf, 0xf02d, 0xf02b, 0xfa00, 0xf040, 0xf03f, 0xf02c,
++ 0xf02e, 0xf009, 0xf104, 0xf105, 0xf106, 0xf02f, 0xf027, 0xf03b,
++ 0xf022, 0xf03a, 0xf023, 0xf024, 0xf025, 0xf05f, 0xf026, 0xf02a,
++ 0xf028, 0xf07f, 0xf109, 0xf03d, 0xf029, 0xf07e, 0xf03c, 0xf03e,
++ 0xf702, 0xf703, 0xf200, 0xf000, 0xf000, 0xf200, 0xf021, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf700,
+- 0xf114, 0xf117, 0xf118, 0xf119, 0xf701, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf702, 0xf200, 0xf200,
+- 0xf702, 0xf703, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf702, 0xf702, 0xf703, 0xf703, 0xf701, 0xf200, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+ };
+
+-u_short shift_ctrl_map[] = {
++u_short shift_ctrl_map[NR_KEYS] = {
+ 0xf200, 0xf001, 0xf002, 0xf003, 0xf004, 0xf005, 0xf006, 0xf007,
+ 0xf008, 0xf009, 0xf00a, 0xf00b, 0xf00c, 0xf00d, 0xf00e, 0xf00f,
+ 0xf010, 0xf011, 0xf012, 0xf013, 0xf014, 0xf015, 0xf016, 0xf017,
+ 0xf018, 0xf019, 0xf01a, 0xf700, 0xf201, 0xf101, 0xf200, 0xf008,
+- 0xf208, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf201,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf702, 0xf703, 0xf702, 0xf02b, 0xfa00, 0xf040, 0xf03f, 0xf200,
+- 0xf200, 0xf009, 0xf104, 0xf105, 0xf106, 0xf200, 0xf200, 0xf301,
+- 0xf302, 0xf303, 0xf304, 0xf305, 0xf306, 0xf307, 0xf308, 0xf309,
+- 0xf300, 0xf07f, 0xf30d, 0xf30c, 0xf200, 0xf30b, 0xf30a, 0xf30e,
+- 0xf702, 0xf703, 0xf01b, 0xf020, 0xf020, 0xf310, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf700,
+- 0xf114, 0xf117, 0xf118, 0xf119, 0xf701, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf702, 0xf200, 0xf200,
+- 0xf702, 0xf703, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+-};
+-
+-u_short alt_map[] = {
+- 0xf200, 0xf021, 0xf02d, 0xf863, 0xf023, 0xf033, 0xf024, 0xf025,
+- 0xf05f, 0xf038, 0xf026, 0xf02a, 0xf028, 0xf03d, 0xf02b, 0xf039,
+- 0xf030, 0xf031, 0xf034, 0xf040, 0xf035, 0xf037, 0xf876, 0xf032,
+- 0xf878, 0xf036, 0xf87a, 0xf700, 0xf201, 0xf101, 0xf200, 0xf07f,
+- 0xf208, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf07d,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf702, 0xf703, 0xf702, 0xf02b, 0xfa00, 0xf040, 0xf03f, 0xf029,
+- 0xf03c, 0xf207, 0xf104, 0xf105, 0xf106, 0xf200, 0xf07e, 0xf301,
+- 0xf302, 0xf303, 0xf304, 0xf305, 0xf306, 0xf307, 0xf308, 0xf309,
+- 0xf300, 0xf07f, 0xf30d, 0xf30c, 0xf200, 0xf30b, 0xf30a, 0xf30e,
+- 0xf702, 0xf703, 0xf01b, 0xf000, 0xf020, 0xf310, 0xf200, 0xf200,
++ 0xf07c, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf201,
++ 0xf200, 0xf031, 0xf032, 0xf033, 0xf034, 0xf035, 0xf036, 0xf037,
++ 0xf038, 0xf039, 0xf030, 0xfbe4, 0xfbfc, 0xfbf6, 0xfbc4, 0xfbdc,
++ 0xfbd6, 0xfbdf, 0xf02d, 0xf02b, 0xfa00, 0xf040, 0xf03f, 0xf02c,
++ 0xf02e, 0xf009, 0xf104, 0xf105, 0xf106, 0xf02f, 0xf027, 0xf03b,
++ 0xf022, 0xf03a, 0xf023, 0xf024, 0xf025, 0xf05f, 0xf026, 0xf02a,
++ 0xf028, 0xf07f, 0xf109, 0xf03d, 0xf029, 0xf07e, 0xf03c, 0xf03e,
++ 0xf702, 0xf703, 0xf200, 0xf020, 0xf020, 0xf200, 0xf021, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf700,
+- 0xf114, 0xf117, 0xf118, 0xf119, 0xf701, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf702, 0xf200, 0xf200,
+- 0xf702, 0xf703, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+- 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
++ 0xf702, 0xf702, 0xf703, 0xf703, 0xf701, 0xf200, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+ };
+
+ ushort *key_maps[MAX_NR_KEYMAPS] = {
+ plain_map, shift_map, 0, 0,
+- ctrl_map, shift_ctrl_map, 0, 0,
+- alt_map, 0
++ ctrl_map, shift_ctrl_map, 0
+ };
+
+-unsigned int keymap_count = 5;
++unsigned int keymap_count = 4;
+
+
+ /*
+--- linux/drivers/char/tosa_keymap.map~tosa_map.patch
++++ linux/drivers/char/tosa_keymap.map
+@@ -8,9 +8,8 @@
+ # 1 for [SHIFT]
+ # 4 for [CTRL] , to symbol input for debug
+ # 5 for [CTRL] [SHIFT] , to symbol input for debug
+-# 8 for [ALT]
+ #
+-keymaps 0,1,4,5,8
++keymaps 0,1,4,5
+ #
+ # loadkeys --mktable iris_keymap.map
+ #
+@@ -20,60 +19,38 @@
+ #
+ #
+ keycode 1 = a
+- alt keycode 1 = exclam
+ keycode 2 = b
+- alt keycode 2 = minus
+ keycode 3 = c
+ keycode 4 = d
+- alt keycode 4 = numbersign
+ keycode 5 = e
+- alt keycode 5 = three
+ keycode 6 = f
+- alt keycode 6 = dollar
+ keycode 7 = g
+- alt keycode 7 = percent
+ keycode 8 = h
+- alt keycode 8 = underscore
+ keycode 9 = i
+- alt keycode 9 = eight
+ keycode 10 = j
+- alt keycode 10 = ampersand
+ keycode 11 = k
+- alt keycode 11 = asterisk
+ keycode 12 = l
+- alt keycode 12 = parenleft
+ keycode 13 = m
+- alt keycode 13 = equal
+ keycode 14 = n
+- alt keycode 14 = plus
+ keycode 15 = o
+- alt keycode 15 = nine
+ keycode 16 = p
+- alt keycode 16 = zero
+ keycode 17 = q
+- alt keycode 17 = one
+ keycode 18 = r
+- alt keycode 18 = four
+ keycode 19 = s
+- alt keycode 19 = at
+ keycode 20 = t
+- alt keycode 20 = five
+ keycode 21 = u
+- alt keycode 21 = seven
+ keycode 22 = v
+ keycode 23 = w
+- alt keycode 23 = two
+ keycode 24 = x
+ keycode 25 = y
+- alt keycode 25 = six
+ keycode 26 = z
+ keycode 27 = Shift
+ keycode 28 = Return
+ keycode 29 = F2
+-keycode 30 = Alt Control
++keycode 30 =
+ keycode 31 = BackSpace
+- alt keycode 31 = Delete
+-keycode 32 = Num_Lock
++# for Debug , keycode 32(F3, Sym) --> Control
++keycode 32 = bar
+ keycode 33 =
+ # (Cancel:34) F9 -> Escape
+ keycode 34 = Escape
+@@ -83,100 +60,84 @@
+ keycode 38 = Right
+ # (OK:39) F4 -> Return
+ keycode 39 = Return
+- alt keycode 39 = braceright
+ keycode 40 =
+-keycode 41 = one exclam
+-keycode 42 = two quotedbl
+-keycode 43 = three numbersign
+-keycode 44 = four dollar
+-keycode 45 = five percent
+-keycode 46 = six ampersand
+-keycode 47 = seven apostrophe
+-keycode 48 = eight parenleft
+-keycode 49 = nine parenright
+-keycode 50 = zero asciitilde
+-keycode 51 = minus equal
+-keycode 52 = asciicircum asciitilde
+-keycode 53 = backslash bar
+-keycode 54 = bracketleft braceleft
+-keycode 55 = at grave
+-keycode 56 = Control
+-keycode 57 = Alt
+-keycode 58 = Control
++keycode 41 = one
++keycode 42 = two
++keycode 43 = three
++keycode 44 = four
++keycode 45 = five
++keycode 46 = six
++keycode 47 = seven
++keycode 48 = eight
++keycode 49 = nine
++keycode 50 = zero
++keycode 51 = +adiaeresis
++keycode 52 = +udiaeresis
++keycode 53 = +odiaeresis
++keycode 54 = +Adiaeresis
++keycode 55 = +Udiaeresis
++keycode 56 = +Odiaeresis
++keycode 57 = +ssharp
++keycode 58 = minus
+ keycode 59 = plus
+ keycode 60 = Shift_Lock
+ keycode 61 = at
+ keycode 62 = question
+-keycode 63 = comma semicolon
+- alt keycode 63 = parenright
+-keycode 64 = period colon
+- alt keycode 64 = less
++keycode 63 = comma
++keycode 64 = period
+ keycode 65 = Tab
+- alt keycode 65 = Caps_Lock
+ keycode 66 = F5
+ keycode 67 = F6
+ keycode 68 = F7
+-keycode 69 = slash question
+-keycode 70 = apostrophe quotedbl
+- alt keycode 70 = asciitilde
+-keycode 71 = KP_1
+-keycode 72 = KP_2
+-keycode 73 = KP_3
+-keycode 74 = KP_4
+-keycode 75 = KP_5
+-keycode 76 = KP_6
+-keycode 77 = KP_7
+-keycode 78 = KP_8
+-keycode 79 = KP_9
+-keycode 80 = KP_0
++keycode 69 = slash
++keycode 70 = apostrophe
++keycode 71 = semicolon
++keycode 72 = quotedbl
++keycode 73 = colon
++keycode 74 = numbersign
++keycode 75 = dollar
++keycode 76 = percent
++# 2001/7/5 old keycode 77 = asciicircum
++keycode 77 = underscore
++keycode 78 = ampersand
++keycode 79 = asterisk
++keycode 80 = parenleft
+ keycode 81 = Delete
+-keycode 82 = KP_Divide
+-keycode 83 = KP_Multiply
+-keycode 84 =
+-keycode 85 = KP_Subtract
+-keycode 86 = KP_Add
+-keycode 87 = KP_Enter
++keycode 82 = F10
++keycode 83 = equal
++keycode 84 = parenright
++keycode 85 = asciitilde
++keycode 86 = less
++keycode 87 = greater
+ # (Activity:88) -> Ctrl
+ keycode 88 = Control
+ # (Contacts:89) -> Alt
+ keycode 89 = Alt
+-keycode 90 = Escape
++keycode 90 =
+ # (select:91) F11 -> space
+ keycode 91 = space
+- alt keycode 91 = nul
++ control keycode 91 = nul
+ keycode 92 = space
+ control keycode 92 = nul
+-keycode 93 = KP_Period
+-keycode 94 =
+-keycode 95 = semicolon plus
+-keycode 96 = colon asterisk
+-keycode 97 = bracketright braceright
+-keycode 98 = comma less
+-keycode 99 = period greater
+-keycode 100 = slash question
+-keycode 101 = underscore underscore
++keycode 93 =
++keycode 94 = exclam
++keycode 95 =
++keycode 96 =
++keycode 97 =
++keycode 98 =
++keycode 99 =
++keycode 100 =
++keycode 101 =
+ keycode 102 =
+ keycode 103 = Shift
+-keycode 104 = Find
+-keycode 105 = Select
+-keycode 106 = Prior
+- shift keycode 106 = Scroll_Backward
+-keycode 107 = Next
+- shift keycode 107 = Scroll_Forward
++keycode 104 = Control
++keycode 105 = Control
++keycode 106 = Alt
++keycode 107 = Alt
+ keycode 108 = AltGr
+ keycode 109 =
+ keycode 110 =
+ keycode 111 =
+-keycode 112 =
+-keycode 113 =
+-keycode 114 =
+-keycode 115 =
+-keycode 116 =
+-keycode 117 = Control
+-keycode 118 =
+-keycode 119 =
+-keycode 120 = Control
+-keycode 121 = Alt
+
+
+ string F1 = "\033[[A"
+--- linux/drivers/char/tosa_rawmap.h~tosa_map.patch
++++ linux/drivers/char/tosa_rawmap.h
+@@ -22,28 +22,156 @@
+
+
+ static unsigned char rawkeytable_table_NormalLower[(NR_KEYCODES+1)] = {
+-KEY_IGN,KEY_IGN,SLKEY_W,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_K,SLKEY_BACK_SPACE,SLKEY_P,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_OFF,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Q,SLKEY_E,SLKEY_T,SLKEY_Y,KEY_IGN,SLKEY_O,SLKEY_I,SLKEY_COMMA,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_RECORDER,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_A,SLKEY_D,SLKEY_G,SLKEY_U,KEY_IGN,SLKEY_L,SLKEY_ENTER,SLKEY_PERIOD,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_SYNCSTART,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Z,SLKEY_C,SLKEY_V,SLKEY_J,SLKEY_CONTACTS,SLKEY_F9,SLKEY_F11,SLKEY_F4,SLKEY_LSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_S,SLKEY_R,SLKEY_B,SLKEY_N,SLKEY_ACTIVITY,SLKEY_HOME,SLKEY_MINUS,SLKEY_FRONTLIGHT,KEY_IGN,SLKEY_RSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_TAB,SLKEY_SLASH,SLKEY_H,SLKEY_M,SLKEY_F2,KEY_IGN,SLKEY_UP,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_2ND,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_X,SLKEY_F,SLKEY_SPACE,SLKEY_APOSTROPHE,SLKEY_MAIL,SLKEY_LEFT,SLKEY_DOWN,SLKEY_RIGHT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN};
++KEY_IGN, KEY_IGN, SLKEY_W, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_K, SLKEY_BACK_SPACE,
++SLKEY_P, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_OFF, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_Q, SLKEY_E, SLKEY_T, SLKEY_Y, KEY_IGN, SLKEY_O, SLKEY_I,
++SLKEY_COMMA, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_RECORDER, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_A, SLKEY_D, SLKEY_G, SLKEY_U, KEY_IGN, SLKEY_L, SLKEY_ENTER,
++SLKEY_PERIOD, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_SYNCSTART,KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_Z, SLKEY_C, SLKEY_V, SLKEY_J, SLKEY_CONTACTS, SLKEY_F9, SLKEY_F11,
++SLKEY_F4, SLKEY_LSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_S, SLKEY_R, SLKEY_B, SLKEY_N, SLKEY_ACTIVITY, SLKEY_HOME,SLKEY_MINUS,
++SLKEY_FRONTLIGHT,KEY_IGN, SLKEY_RSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_TAB, SLKEY_SLASH, SLKEY_H, SLKEY_M, SLKEY_F2, KEY_IGN, SLKEY_UP,
++KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_2ND, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_X, SLKEY_F, SLKEY_SPACE, SLKEY_APOSTROPHE,SLKEY_MAIL, SLKEY_LEFT,SLKEY_DOWN,
++SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN
++};
+
+ static unsigned char rawkeytable_table_NormalUpper[(NR_KEYCODES+1)] = {
+-KEY_IGN,KEY_IGN,SLKEY_W,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_K,SLKEY_BACK_SPACE,SLKEY_P,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_OFF,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Q,SLKEY_E,SLKEY_T,SLKEY_Y,KEY_IGN,SLKEY_O,SLKEY_I,SLKEY_COMMA,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_RECORDER,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_A,SLKEY_D,SLKEY_G,SLKEY_U,KEY_IGN,SLKEY_L,SLKEY_ENTER,SLKEY_PERIOD,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_SYNCSTART,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Z,SLKEY_C,SLKEY_V,SLKEY_J,SLKEY_CONTACTS,SLKEY_F9,SLKEY_F11,SLKEY_F4,SLKEY_LSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_S,SLKEY_R,SLKEY_B,SLKEY_N,SLKEY_ACTIVITY,SLKEY_HOME,SLKEY_MINUS,SLKEY_FRONTLIGHT,KEY_IGN,SLKEY_RSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_TAB,SLKEY_SLASH,SLKEY_H,SLKEY_M,SLKEY_F2,KEY_IGN,SLKEY_UP,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_2ND,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_X,SLKEY_F,SLKEY_SPACE,SLKEY_APOSTROPHE,SLKEY_MAIL,SLKEY_LEFT,SLKEY_DOWN,SLKEY_RIGHT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN};
++KEY_IGN, KEY_IGN, SLKEY_W, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_K, SLKEY_BACK_SPACE,
++SLKEY_P, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_OFF, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_Q, SLKEY_E, SLKEY_T, SLKEY_Y, KEY_IGN, SLKEY_O, SLKEY_I,
++SLKEY_SEMICOLON,KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_RECORDER, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_A, SLKEY_D, SLKEY_G, SLKEY_U, KEY_IGN, SLKEY_L, SLKEY_ENTER,
++SLKEY_COLON, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_SYNCSTART,KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_Z, SLKEY_C, SLKEY_V, SLKEY_J, SLKEY_CONTACTS, SLKEY_F9, SLKEY_F11,
++SLKEY_F4, SLKEY_LSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_S, SLKEY_R, SLKEY_B, SLKEY_N, SLKEY_ACTIVITY, SLKEY_HOME, SLKEY_MINUS,
++SLKEY_FRONTLIGHT, KEY_IGN, SLKEY_RSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_TAB, SLKEY_QUESTION, SLKEY_H, SLKEY_M, SLKEY_F2, KEY_IGN, SLKEY_UP,
++KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_2ND, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_X, SLKEY_F, SLKEY_SPACE, SLKEY_QUOTEDBL, SLKEY_MAIL, SLKEY_LEFT, SLKEY_DOWN,
++SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN
++};
+
+ static unsigned char rawkeytable_table_2ndLower[(NR_KEYCODES+1)] = {
+-KEY_IGN,KEY_IGN,SLKEY_W,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_K,SLKEY_BACK_SPACE,SLKEY_P,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_OFF,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Q,SLKEY_E,SLKEY_T,SLKEY_Y,KEY_IGN,SLKEY_O,SLKEY_I,SLKEY_COMMA,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_RECORDER,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_A,SLKEY_D,SLKEY_G,SLKEY_U,KEY_IGN,SLKEY_L,SLKEY_ENTER,SLKEY_PERIOD,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_SYNCSTART,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Z,SLKEY_C,SLKEY_V,SLKEY_J,SLKEY_CONTACTS,SLKEY_F9,SLKEY_F11,SLKEY_F4,SLKEY_LSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_S,SLKEY_R,SLKEY_B,SLKEY_N,SLKEY_ACTIVITY,SLKEY_HOME,SLKEY_MINUS,SLKEY_FRONTLIGHT,KEY_IGN,SLKEY_RSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_TAB,SLKEY_SLASH,SLKEY_H,SLKEY_M,SLKEY_F2,KEY_IGN,SLKEY_UP,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_2ND,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_X,SLKEY_F,SLKEY_SPACE,SLKEY_APOSTROPHE,SLKEY_MAIL,SLKEY_LEFT,SLKEY_DOWN,SLKEY_RIGHT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN};
++KEY_IGN, KEY_IGN, SLKEY_2, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_ASTERISK, SLKEY_DELETE,
++SLKEY_0, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_OFF, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_1, SLKEY_3, SLKEY_5, SLKEY_6, KEY_IGN, SLKEY_9, SLKEY_8,
++SLKEY_PARENRIGHT, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_RECORDER, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_EXCLAM, SLKEY_NUMBERSIGN, SLKEY_PERCENT,SLKEY_7, KEY_IGN, SLKEY_PARENLEFT,SLKEY_GREATER,
++SLKEY_LESS, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_SYNCSTART,KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_F10, SLKEY_F6, SLKEY_F7, SLKEY_AMPERSAND,SLKEY_CONTACTS, SLKEY_F9, SLKEY_F11,
++SLKEY_F4, SLKEY_LSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_AT, SLKEY_4, SLKEY_MINUS, SLKEY_PLUS, SLKEY_ACTIVITY, SLKEY_HOME, SLKEY_MINUS,
++SLKEY_FRONTLIGHT, KEY_IGN, SLKEY_RSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_CAPS_LOCK,SLKEY_NUMLOCK, SLKEY_ASCIICIRCUM, SLKEY_EQUAL, SLKEY_F2, KEY_IGN, SLKEY_UP,
++KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_2ND, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_F5, SLKEY_DOLLAR, SLKEY_SYM, SLKEY_ASCIITILDE, SLKEY_MAIL, SLKEY_LEFT, SLKEY_DOWN,
++SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN
++};
+
+ static unsigned char rawkeytable_table_2ndUpper[(NR_KEYCODES+1)] = {
+-KEY_IGN,KEY_IGN,SLKEY_W,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_K,SLKEY_BACK_SPACE,SLKEY_P,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_OFF,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Q,SLKEY_E,SLKEY_T,SLKEY_Y,KEY_IGN,SLKEY_O,SLKEY_I,SLKEY_COMMA,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_RECORDER,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_A,SLKEY_D,SLKEY_G,SLKEY_U,KEY_IGN,SLKEY_L,SLKEY_ENTER,SLKEY_PERIOD,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_SYNCSTART,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Z,SLKEY_PRINTSCREEN,SLKEY_V,SLKEY_J,SLKEY_CONTACTS,SLKEY_F9,SLKEY_F11,SLKEY_F4,SLKEY_LSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_S,SLKEY_R,SLKEY_B,SLKEY_N,SLKEY_ACTIVITY,SLKEY_HOME,SLKEY_MINUS,SLKEY_FRONTLIGHT,KEY_IGN,SLKEY_RSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_TAB,SLKEY_SLASH,SLKEY_H,SLKEY_M,SLKEY_F2,KEY_IGN,SLKEY_UP,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_2ND,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_X,SLKEY_F,SLKEY_SPACE,SLKEY_APOSTROPHE,SLKEY_MAIL,SLKEY_LEFT,SLKEY_DOWN,SLKEY_RIGHT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN};
++KEY_IGN, KEY_IGN, SLKEY_2, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_ASTERISK, SLKEY_DELETE,
++SLKEY_0, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_OFF, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_1, SLKEY_3, SLKEY_5, SLKEY_6, KEY_IGN, SLKEY_9, SLKEY_8,
++SLKEY_PARENRIGHT, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_RECORDER, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_EXCLAM, SLKEY_NUMBERSIGN, SLKEY_PERCENT,SLKEY_7, KEY_IGN, SLKEY_PARENLEFT,SLKEY_GREATER,
++SLKEY_LESS, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_SYNCSTART,KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_F10, SLKEY_F6, SLKEY_F7, SLKEY_AMPERSAND,SLKEY_CONTACTS, SLKEY_F9, SLKEY_F11,
++SLKEY_F4, SLKEY_LSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_AT, SLKEY_4, SLKEY_MINUS, SLKEY_PLUS, SLKEY_ACTIVITY, SLKEY_HOME, SLKEY_MINUS,
++SLKEY_FRONTLIGHT, KEY_IGN, SLKEY_RSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_CAPS_LOCK,SLKEY_NUMLOCK, SLKEY_ASCIICIRCUM, SLKEY_EQUAL, SLKEY_F2, KEY_IGN, SLKEY_UP,
++KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_2ND, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_F5, SLKEY_DOLLAR, SLKEY_SYM, SLKEY_ASCIITILDE, SLKEY_MAIL, SLKEY_LEFT, SLKEY_DOWN,
++SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN
++};
+
+ static unsigned char rawkeytable_table_NumlockLower[(NR_KEYCODES+1)] = {
+-KEY_IGN,KEY_IGN,SLKEY_W,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_K,SLKEY_BACK_SPACE,SLKEY_P,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_OFF,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Q,SLKEY_E,SLKEY_T,SLKEY_Y,KEY_IGN,SLKEY_O,SLKEY_I,SLKEY_COMMA,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_RECORDER,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_A,SLKEY_D,SLKEY_G,SLKEY_U,KEY_IGN,SLKEY_L,SLKEY_ENTER,SLKEY_PERIOD,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_SYNCSTART,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Z,SLKEY_C,SLKEY_V,SLKEY_J,SLKEY_CONTACTS,SLKEY_F9,SLKEY_F11,SLKEY_F4,SLKEY_LSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_S,SLKEY_R,SLKEY_B,SLKEY_N,SLKEY_ACTIVITY,SLKEY_HOME,SLKEY_MINUS,SLKEY_FRONTLIGHT,KEY_IGN,SLKEY_RSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_TAB,SLKEY_SLASH,SLKEY_H,SLKEY_M,SLKEY_F2,KEY_IGN,SLKEY_UP,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_2ND,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_X,SLKEY_F,SLKEY_SPACE,SLKEY_APOSTROPHE,SLKEY_MAIL,SLKEY_LEFT,SLKEY_DOWN,SLKEY_RIGHT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN};
++KEY_IGN, KEY_IGN, SLKEY_2, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_ASTERISK, SLKEY_BACK_SPACE,
++SLKEY_0, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_OFF, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_1, SLKEY_3, SLKEY_5, SLKEY_6, KEY_IGN, SLKEY_9, SLKEY_8,
++SLKEY_PARENRIGHT, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_RECORDER, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_EXCLAM, SLKEY_NUMBERSIGN, SLKEY_PERCENT, SLKEY_7, KEY_IGN, SLKEY_PARENLEFT,SLKEY_GREATER,
++SLKEY_LESS, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_SYNCSTART, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_F10, SLKEY_F6, SLKEY_F7, SLKEY_AMPERSAND, SLKEY_CONTACTS, SLKEY_F9, SLKEY_F11,
++SLKEY_F4, SLKEY_LSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_AT, SLKEY_4, SLKEY_MINUS, SLKEY_PLUS, SLKEY_ACTIVITY, SLKEY_HOME, SLKEY_MINUS,
++SLKEY_FRONTLIGHT, KEY_IGN, SLKEY_RSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_TAB, SLKEY_SLASH, SLKEY_ASCIICIRCUM, SLKEY_EQUAL, SLKEY_F2, KEY_IGN, SLKEY_UP,
++KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_2ND, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_F5, SLKEY_DOLLAR, SLKEY_SPACE, SLKEY_ASCIITILDE, SLKEY_MAIL, SLKEY_LEFT, SLKEY_DOWN,
++SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN
++};
+
+ static unsigned char rawkeytable_table_NumlockUpper[(NR_KEYCODES+1)] = {
+-KEY_IGN,KEY_IGN,SLKEY_W,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_K,SLKEY_BACK_SPACE,SLKEY_P,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_OFF,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Q,SLKEY_E,SLKEY_T,SLKEY_Y,KEY_IGN,SLKEY_O,SLKEY_I,SLKEY_COMMA,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_RECORDER,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_A,SLKEY_D,SLKEY_G,SLKEY_U,KEY_IGN,SLKEY_L,SLKEY_ENTER,SLKEY_PERIOD,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_SYNCSTART,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Z,SLKEY_C,SLKEY_V,SLKEY_J,SLKEY_CONTACTS,SLKEY_F9,SLKEY_F11,SLKEY_F4,SLKEY_LSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_S,SLKEY_R,SLKEY_B,SLKEY_N,SLKEY_ACTIVITY,SLKEY_HOME,SLKEY_MINUS,SLKEY_FRONTLIGHT,KEY_IGN,SLKEY_RSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_TAB,SLKEY_SLASH,SLKEY_H,SLKEY_M,SLKEY_F2,KEY_IGN,SLKEY_UP,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_2ND,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_X,SLKEY_F,SLKEY_SPACE,SLKEY_APOSTROPHE,SLKEY_MAIL,SLKEY_LEFT,SLKEY_DOWN,SLKEY_RIGHT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN};
++KEY_IGN, KEY_IGN, SLKEY_2, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_ASTERISK, SLKEY_BACK_SPACE,
++SLKEY_0, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_OFF, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_1, SLKEY_3, SLKEY_5, SLKEY_6, KEY_IGN, SLKEY_9, SLKEY_8,
++SLKEY_PARENRIGHT, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_RECORDER, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_EXCLAM, SLKEY_NUMBERSIGN, SLKEY_PERCENT, SLKEY_7, KEY_IGN, SLKEY_PARENLEFT,SLKEY_GREATER,
++SLKEY_LESS, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_SYNCSTART, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_F10, SLKEY_F6, SLKEY_F7, SLKEY_AMPERSAND, SLKEY_CONTACTS, SLKEY_F9, SLKEY_F11,
++SLKEY_F4, SLKEY_LSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_AT, SLKEY_4, SLKEY_MINUS, SLKEY_PLUS, SLKEY_ACTIVITY, SLKEY_HOME, SLKEY_MINUS,
++SLKEY_FRONTLIGHT, KEY_IGN, SLKEY_RSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_TAB, SLKEY_QUESTION, SLKEY_ASCIICIRCUM, SLKEY_EQUAL, SLKEY_F2, KEY_IGN, SLKEY_UP,
++KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_2ND, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_F5, SLKEY_DOLLAR, SLKEY_SPACE, SLKEY_ASCIITILDE, SLKEY_MAIL, SLKEY_LEFT, SLKEY_DOWN,
++SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN
++};
+
+ static unsigned char rawkeytable_table_Num2ndLower[(NR_KEYCODES+1)] = {
+-KEY_IGN,KEY_IGN,SLKEY_W,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_K,SLKEY_BACK_SPACE,SLKEY_P,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_OFF,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Q,SLKEY_E,SLKEY_T,SLKEY_Y,KEY_IGN,SLKEY_O,SLKEY_I,SLKEY_COMMA,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_RECORDER,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_A,SLKEY_D,SLKEY_G,SLKEY_U,KEY_IGN,SLKEY_L,SLKEY_ENTER,SLKEY_PERIOD,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_SYNCSTART,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Z,SLKEY_C,SLKEY_V,SLKEY_J,SLKEY_CONTACTS,SLKEY_F9,SLKEY_F11,SLKEY_F4,SLKEY_LSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_S,SLKEY_R,SLKEY_B,SLKEY_N,SLKEY_ACTIVITY,SLKEY_HOME,SLKEY_MINUS,SLKEY_FRONTLIGHT,KEY_IGN,SLKEY_RSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_TAB,SLKEY_SLASH,SLKEY_H,SLKEY_M,SLKEY_F2,KEY_IGN,SLKEY_UP,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_2ND,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_X,SLKEY_F,SLKEY_SPACE,SLKEY_APOSTROPHE,SLKEY_MAIL,SLKEY_LEFT,SLKEY_DOWN,SLKEY_RIGHT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN};
++KEY_IGN, KEY_IGN, SLKEY_W, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_K, SLKEY_DELETE,
++SLKEY_P, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_OFF, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_Q, SLKEY_E, SLKEY_T, SLKEY_Y, KEY_IGN, SLKEY_O, SLKEY_I,
++SLKEY_COMMA, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_RECORDER, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_A, SLKEY_D, SLKEY_G, SLKEY_U, KEY_IGN, SLKEY_L, SLKEY_ENTER,
++SLKEY_PERIOD, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_SYNCSTART,KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_Z, SLKEY_F6, SLKEY_F7, SLKEY_J, SLKEY_CONTACTS, SLKEY_F9, SLKEY_F11,
++SLKEY_F4, SLKEY_LSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_S, SLKEY_R, SLKEY_B, SLKEY_N, SLKEY_ACTIVITY, SLKEY_HOME,SLKEY_MINUS,
++SLKEY_FRONTLIGHT,KEY_IGN, SLKEY_RSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_CAPS_LOCK, SLKEY_NUMLOCK, SLKEY_H, SLKEY_M, SLKEY_F2, KEY_IGN, SLKEY_UP,
++KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_2ND, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_F5, SLKEY_F, SLKEY_SYM, SLKEY_APOSTROPHE,SLKEY_MAIL, SLKEY_LEFT,SLKEY_DOWN,
++SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN
++};
+
+ static unsigned char rawkeytable_table_Num2ndUpper[(NR_KEYCODES+1)] = {
+-KEY_IGN,KEY_IGN,SLKEY_W,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_K,SLKEY_BACK_SPACE,SLKEY_P,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_OFF,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Q,SLKEY_E,SLKEY_T,SLKEY_Y,KEY_IGN,SLKEY_O,SLKEY_I,SLKEY_COMMA,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_RECORDER,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_A,SLKEY_D,SLKEY_G,SLKEY_U,KEY_IGN,SLKEY_L,SLKEY_ENTER,SLKEY_PERIOD,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_SYNCSTART,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_Z,SLKEY_PRINTSCREEN,SLKEY_V,SLKEY_J,SLKEY_CONTACTS,SLKEY_F9,SLKEY_F11,SLKEY_F4,SLKEY_LSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_S,SLKEY_R,SLKEY_B,SLKEY_N,SLKEY_ACTIVITY,SLKEY_HOME,SLKEY_MINUS,SLKEY_FRONTLIGHT,KEY_IGN,SLKEY_RSHIFT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_TAB,SLKEY_SLASH,SLKEY_H,SLKEY_M,SLKEY_F2,KEY_IGN,SLKEY_UP,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_2ND,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,SLKEY_X,SLKEY_F,SLKEY_SPACE,SLKEY_APOSTROPHE,SLKEY_MAIL,SLKEY_LEFT,SLKEY_DOWN,SLKEY_RIGHT,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN,KEY_IGN};
++KEY_IGN, KEY_IGN, SLKEY_W, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_K, SLKEY_DELETE,
++SLKEY_P, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_OFF, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_Q, SLKEY_E, SLKEY_T, SLKEY_Y, KEY_IGN, SLKEY_O, SLKEY_I,
++SLKEY_SEMICOLON,KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_RECORDER, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_A, SLKEY_D, SLKEY_G, SLKEY_U, KEY_IGN, SLKEY_L, SLKEY_ENTER,
++SLKEY_COLON, KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_SYNCSTART,KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_Z, SLKEY_F6, SLKEY_F7, SLKEY_J, SLKEY_CONTACTS, SLKEY_F9, SLKEY_F11,
++SLKEY_F4, SLKEY_LSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_S, SLKEY_R, SLKEY_B, SLKEY_N, SLKEY_ACTIVITY, SLKEY_HOME,SLKEY_MINUS,
++SLKEY_FRONTLIGHT,KEY_IGN, SLKEY_RSHIFT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_CAPS_LOCK, SLKEY_NUMLOCK, SLKEY_H, SLKEY_M, SLKEY_F2, KEY_IGN, SLKEY_UP,
++KEY_IGN, KEY_IGN, KEY_IGN, SLKEY_2ND, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, SLKEY_F5, SLKEY_F, SLKEY_SYM, SLKEY_QUOTEDBL, SLKEY_MAIL, SLKEY_LEFT,SLKEY_DOWN,
++SLKEY_RIGHT, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN,
++KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN, KEY_IGN
++};
+
+
+
+@@ -334,7 +462,87 @@
+
+
+ static unsigned char *state_to_keymap[STATE_NUMS_TOTAL] = {
+-rawkeytable_table_NormalLower,rawkeytable_table_NormalUpper,rawkeytable_table_2ndLower,rawkeytable_table_2ndUpper,rawkeytable_table_2ndLower,rawkeytable_table_2ndUpper,rawkeytable_table_2ndLower,rawkeytable_table_2ndUpper,rawkeytable_table_2ndLower,rawkeytable_table_2ndUpper,rawkeytable_table_NormalLower,rawkeytable_table_NormalUpper,rawkeytable_table_2ndLower,rawkeytable_table_2ndUpper,rawkeytable_table_2ndLower,rawkeytable_table_2ndUpper,rawkeytable_table_2ndLower,rawkeytable_table_2ndUpper,rawkeytable_table_2ndLower,rawkeytable_table_2ndUpper,rawkeytable_table_NumlockLower,rawkeytable_table_NumlockUpper,rawkeytable_table_Num2ndLower,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndLower,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndLower,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndLower,rawkeytable_table_Num2ndUpper,rawkeytable_table_NumlockLower,rawkeytable_table_NumlockUpper,rawkeytable_table_Num2ndLower,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndLower,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndLower,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndLower,rawkeytable_table_Num2ndUpper,rawkeytable_table_NormalUpper,rawkeytable_table_NormalUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_NormalUpper,rawkeytable_table_NormalUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_2ndUpper,rawkeytable_table_NumlockUpper,rawkeytable_table_NumlockUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_NumlockUpper,rawkeytable_table_NumlockUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper,rawkeytable_table_Num2ndUpper};
++rawkeytable_table_NormalLower, /*S0*/
++rawkeytable_table_NormalUpper, /*S1*/
++rawkeytable_table_2ndLower, /*S2*/
++rawkeytable_table_2ndUpper, /*S3*/
++rawkeytable_table_2ndLower, /*S4*/
++rawkeytable_table_2ndUpper, /*S5*/
++rawkeytable_table_2ndLower, /*S6*/
++rawkeytable_table_2ndUpper, /*S7*/
++rawkeytable_table_2ndLower, /*S8*/
++rawkeytable_table_2ndUpper, /*S9*/
++rawkeytable_table_NormalLower, /*S10*/
++rawkeytable_table_NormalUpper, /*S11*/
++rawkeytable_table_2ndLower, /*S12*/
++rawkeytable_table_2ndUpper, /*S13*/
++rawkeytable_table_2ndLower, /*S14*/
++rawkeytable_table_2ndUpper, /*S15*/
++rawkeytable_table_2ndLower, /*S16*/
++rawkeytable_table_2ndUpper, /*S17*/
++rawkeytable_table_2ndLower, /*S18*/
++rawkeytable_table_2ndUpper, /*S19*/
++rawkeytable_table_NumlockLower, /*S20*/
++rawkeytable_table_NumlockUpper, /*S21*/
++rawkeytable_table_Num2ndLower, /*S22*/
++rawkeytable_table_Num2ndUpper, /*S23*/
++rawkeytable_table_Num2ndLower, /*S24*/
++rawkeytable_table_Num2ndUpper, /*S25*/
++rawkeytable_table_Num2ndLower, /*S26*/
++rawkeytable_table_Num2ndUpper, /*S27*/
++rawkeytable_table_Num2ndLower, /*S28*/
++rawkeytable_table_Num2ndUpper, /*S29*/
++rawkeytable_table_NumlockLower, /*S30*/
++rawkeytable_table_NumlockUpper, /*S31*/
++rawkeytable_table_Num2ndLower, /*S32*/
++rawkeytable_table_Num2ndUpper, /*S33*/
++rawkeytable_table_Num2ndLower, /*S34*/
++rawkeytable_table_Num2ndUpper, /*S35*/
++rawkeytable_table_Num2ndLower, /*S36*/
++rawkeytable_table_Num2ndUpper, /*S37*/
++rawkeytable_table_Num2ndLower, /*S38*/
++rawkeytable_table_Num2ndUpper, /*S39*/
++rawkeytable_table_NormalUpper, /*S40*/
++rawkeytable_table_NormalUpper, /*S41*/
++rawkeytable_table_2ndUpper, /*S42*/
++rawkeytable_table_2ndUpper, /*S43*/
++rawkeytable_table_2ndUpper, /*S44*/
++rawkeytable_table_2ndUpper, /*S45*/
++rawkeytable_table_2ndUpper, /*S46*/
++rawkeytable_table_2ndUpper, /*S47*/
++rawkeytable_table_2ndUpper, /*S48*/
++rawkeytable_table_2ndUpper, /*S49*/
++rawkeytable_table_NormalUpper, /*S50*/
++rawkeytable_table_NormalUpper, /*S51*/
++rawkeytable_table_2ndUpper, /*S52*/
++rawkeytable_table_2ndUpper, /*S53*/
++rawkeytable_table_2ndUpper, /*S54*/
++rawkeytable_table_2ndUpper, /*S55*/
++rawkeytable_table_2ndUpper, /*S56*/
++rawkeytable_table_2ndUpper, /*S57*/
++rawkeytable_table_2ndUpper, /*S58*/
++rawkeytable_table_2ndUpper, /*S59*/
++rawkeytable_table_NumlockUpper, /*S60*/
++rawkeytable_table_NumlockUpper, /*S61*/
++rawkeytable_table_Num2ndUpper, /*S62*/
++rawkeytable_table_Num2ndUpper, /*S63*/
++rawkeytable_table_Num2ndUpper, /*S64*/
++rawkeytable_table_Num2ndUpper, /*S65*/
++rawkeytable_table_Num2ndUpper, /*S66*/
++rawkeytable_table_Num2ndUpper, /*S67*/
++rawkeytable_table_Num2ndUpper, /*S68*/
++rawkeytable_table_Num2ndUpper, /*S69*/
++rawkeytable_table_NumlockUpper, /*S70*/
++rawkeytable_table_NumlockUpper, /*S71*/
++rawkeytable_table_Num2ndUpper, /*S72*/
++rawkeytable_table_Num2ndUpper, /*S73*/
++rawkeytable_table_Num2ndUpper, /*S74*/
++rawkeytable_table_Num2ndUpper, /*S75*/
++rawkeytable_table_Num2ndUpper, /*S76*/
++rawkeytable_table_Num2ndUpper, /*S77*/
++rawkeytable_table_Num2ndUpper, /*S78*/
++rawkeytable_table_Num2ndUpper /*S79*/
++};
+
+
+ #endif /* ! __KEYTABLE_H_INCLUDED__ */
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/tosa_ts.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/tosa_ts.patch
new file mode 100644
index 0000000000..678cb2e25b
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/tosa_ts.patch
@@ -0,0 +1,207 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- linux/drivers/char/tosa_ts.c~tosa_ts.patch
++++ linux/drivers/char/tosa_ts.c
+@@ -102,6 +102,8 @@
+ static int head = 0, tail = 0;
+
+ #ifdef CONFIG_PM
++#include <linux/pm.h>
++static struct pm_dev* tosa_ts_pm_dev;
+ static int tp_suspend = 0;
+ #endif /* CONFIG_PM */
+
+@@ -495,25 +497,6 @@
+ ioctl: ts_ioctl,
+ };
+
+-static void ts_exit(void)
+-{
+- ts_timer_clear();
+- ts_clear();
+- free_irq(IRQ_GPIO_TP_INT, NULL);
+- wm9712_power_mode_ts(WM9712_PWR_OFF);
+-
+- pxa_ac97_put(&ac97_on);
+-}
+-
+-#ifdef MODULE
+-static void __exit ac97_ts_cleanup(void)
+-{
+- ts_exit();
+- unregister_chrdev(TS_MAJOR, "ts");
+-}
+-module_exit(ac97_ts_cleanup);
+-#endif /* MODULE */
+-
+ extern int tc6393fb_lcdMode;
+
+ int ac97_ad_input(int ch, unsigned short *dat)
+@@ -608,7 +591,7 @@
+ #endif
+ }
+
+-static int ts_init(void)
++static int tosa_ts_hardware_start(void)
+ {
+ pxa_ac97_get(&codec, &ac97_on);
+
+@@ -625,7 +608,6 @@
+ /* GPIO3/PENDOWN wakeup */
+ ac97_bit_set(AC97_GPIO_WAKE_UP, CODEC_PENDOWN);
+
+- ts_clear();
+
+ /* Init queue */
+ //X kernel_thread(ts_pendown, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
+@@ -639,12 +621,39 @@
+ return -EBUSY;
+ }
+
+- // printk(KERN_INFO "Tosa Touch Screen driver initialized\n");
+-
+ return 0;
+ }
+
+-static int __init ac97_ts_init(void)
++static void tosa_ts_hardware_stop(void)
++{
++ ts_timer_clear();
++ ts_clear();
++ free_irq(IRQ_GPIO_TP_INT, NULL);
++ wm9712_power_mode_ts(WM9712_PWR_OFF);
++
++ pxa_ac97_put(&ac97_on);
++}
++
++#ifdef CONFIG_PM
++static int tosa_ts_pm_callback(struct pm_dev *pm_dev,
++ pm_request_t req, void *data)
++{
++ switch (req) {
++ case PM_SUSPEND:
++ tp_suspend = 1;
++ tosa_ts_hardware_stop();
++ break;
++ case PM_RESUME:
++ tp_suspend = 0;
++ tosa_ts_hardware_start();
++ break;
++ }
++ return 0;
++}
++#endif
++
++
++static int __init tosa_ts_init(void)
+ {
+ ac97_on = 0;
+
+@@ -663,28 +672,37 @@
+
+ if( register_chrdev(TS_MAJOR,DEV_NAME, &ts_fops) ) {
+ printk("unable to get major %d for touch screen\n", TS_MAJOR);
+- ts_exit();
+ }
+
+ init_procinfo();
+
++ tosa_ts_hardware_start();
++
++#ifdef CONFIG_PM
++ tosa_ts_pm_dev = pm_register(PM_SYS_DEV, 0, tosa_ts_pm_callback);
++#endif
++
+ kernel_thread(ts_pendown, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
+
+ return 0;
+ }
+
+-module_init(ac97_ts_init);
++static int __exit tosa_ts_cleanup()
++{
++ tosa_hardware_stop();
++ pm_unregister(tosa_ts_pm_dev);
++ unregister_chrdev(TS_MAJOR, "ts");
++}
++
++module_init(tosa_ts_init);
++module_exit(tosa_ts_cleanup);
+
+ /*
+ * Driver functions
+ */
+ static int ts_open(struct inode *inode, struct file *file)
+ {
+- if( ts_init() < 0 ) {
+- ts_exit();
+- return -EINVAL;
+- }
+-
++ ts_clear();
+ MOD_INC_USE_COUNT;
+ return 0;
+ }
+@@ -692,7 +710,6 @@
+
+ static int ts_release(struct inode *inode, struct file *file)
+ {
+- ts_exit();
+
+ MOD_DEC_USE_COUNT;
+ return 0;
+@@ -788,20 +805,3 @@
+ return 0;
+ }
+
+-#ifdef CONFIG_PM
+-void tosa_ts_suspend(void)
+-{
+- DEBUG(DBG_L1, "in\n");
+- tp_suspend = 1;
+- ts_exit();
+- DEBUG(DBG_L1, "out\n");
+-}
+-
+-void tosa_ts_resume(void)
+-{
+- DEBUG(DBG_L1, "in\n");
+- tp_suspend = 0;
+- ts_init();
+- DEBUG(DBG_L1, "out\n");
+-}
+-#endif /* CONFIG_PM */
+--- linux/drivers/sound/pxa-ac97_tosa.c~tosa_ts.patch
++++ linux/drivers/sound/pxa-ac97_tosa.c
+@@ -90,8 +90,6 @@
+ #include <linux/pm.h>
+ static struct pm_dev* pxa_sound_pm_dev;
+ static int tosa_pm_callback(struct pm_dev *,pm_request_t, void *);
+-extern void tosa_ts_suspend(void);
+-extern void tosa_ts_resume(void);
+ #endif /* CONFIG_PM */
+
+ /************************************************************
+@@ -2195,9 +2193,6 @@
+ case PM_SUSPEND:
+ DEBUG(DBG_L1, "PM_SUSPEND: start\n");
+ wm9712_suspend();
+-#ifdef CONFIG_TOSA_TS
+- tosa_ts_suspend();
+-#endif /* CONFIG_TOSA_TS */
+ if ( ac97_audio_state.rd_ref != 0 ) {
+ audio_clear_buf(ac97_audio_state.input_stream);
+ *ac97_audio_state.input_stream->drcmr = 0;
+@@ -2239,9 +2234,6 @@
+ ac97_audio_state.input_stream->dma_ch = err;
+ }
+ wm9712_resume();
+-#ifdef CONFIG_TOSA_TS
+- tosa_ts_resume();
+-#endif /* CONFIG_TOSA_TS */
+ DEBUG(DBG_L1, "PM_RESUME: done\n");
+ break;
+ }
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/unb0rk-apm.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/unb0rk-apm.patch
new file mode 100644
index 0000000000..6095ccb604
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/unb0rk-apm.patch
@@ -0,0 +1,102 @@
+--- linux/arch/arm/mach-pxa/sharpsl_apm.c 2005-09-07 10:49:06.000000000 +0200
++++ /home/hrw//devel/diffs/sharpsl_apm.c 2005-09-07 10:46:57.000000000 +0200
+@@ -1876,10 +1876,11 @@
+ switch (event) {
+ case APM_SYS_STANDBY:
+ case APM_USER_STANDBY:
+- if (send_event(event)) {
+- queue_event(event, NULL);
+- if (standbys_pending <= 0)
++ queue_event(event, NULL);
++ if (standbys_pending <= 0) {
++ if (send_event(event)) {
+ standby();
++ }
+ }
+ break;
+
+@@ -1907,13 +1908,12 @@
+ */
+ if (waiting_for_resume)
+ return;
+- if (send_event(event)) {
+- queue_event(event, NULL);
+- waiting_for_resume = 1;
+- if (suspends_pending <= 0){
++ queue_event(event, NULL);
++ waiting_for_resume = 1;
++ if (suspends_pending <= 0)
++ if (send_event(event)) {
+ (void) suspend();
+ }
+- }
+ break;
+
+ case APM_NORMAL_RESUME:
+@@ -2225,26 +2225,32 @@
+ as->standbys_read--;
+ as->standbys_pending--;
+ standbys_pending--;
+- } else if (!send_event(APM_USER_STANDBY))
+- return -EAGAIN;
+- else
++ } else {
+ queue_event(APM_USER_STANDBY, as);
+- if (standbys_pending <= 0)
+- standby();
++ }
++ if (standbys_pending <= 0) {
++ if (send_event(APM_USER_STANDBY)) {
++ standby();
++ } else {
++ return -EAGAIN;
++ }
++ }
+ break;
+ case APM_IOC_SUSPEND:
+ if (as->suspends_read > 0) {
+ as->suspends_read--;
+ as->suspends_pending--;
+ suspends_pending--;
+- } else if (!send_event(APM_USER_SUSPEND))
+- return -EAGAIN;
+- else
++ } else {
+ queue_event(APM_USER_SUSPEND, as);
++ }
+ if (suspends_pending <= 0) {
+-
+- if (suspend() != APM_SUCCESS)
+- return -EIO;
++ if (send_event(APM_USER_SUSPEND)) {
++ if (suspend() != APM_SUCCESS)
++ return -EIO;
++ } else {
++ return -EAGAIN;
++ }
+ } else {
+ as->suspend_wait = 1;
+ add_wait_queue(&apm_suspend_waitqueue, &wait);
+@@ -2483,13 +2489,18 @@
+ lock_kernel();
+ if (as->standbys_pending > 0) {
+ standbys_pending -= as->standbys_pending;
+- if (standbys_pending <= 0)
+- standby();
++ if (standbys_pending <= 0) {
++ if (send_event(APM_USER_STANDBY)) {
++ standby();
++ }
++ }
+ }
+ if (as->suspends_pending > 0) {
+ suspends_pending -= as->suspends_pending;
+- if (suspends_pending <= 0){
+- (void) suspend();
++ if (suspends_pending <= 0) {
++ if (send_event(APM_USER_SUSPEND)) {
++ (void) suspend();
++ }
+ }
+ }
+ if (user_list == as)
diff --git a/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/usb-storage.patch b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/usb-storage.patch
new file mode 100644
index 0000000000..c9296cf224
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa-2.4.18-rmk7-pxa3-embedix20031107/usb-storage.patch
@@ -0,0 +1,3433 @@
+diff -Nur linux-2.4.18/drivers/usb/device/bi/sa1100.c linux-2.4.18-usb-storage/drivers/usb/device/bi/sa1100.c
+--- linux-2.4.18/drivers/usb/device/bi/sa1100.c 2003-05-13 13:18:44.000000000 +0400
++++ linux-2.4.18-usb-storage/drivers/usb/device/bi/sa1100.c 2004-03-01 07:20:38.000000000 +0300
+@@ -440,6 +440,7 @@
+ udc_interrupts, *(UDCSR), *(UDCCS0), *(UDCAR));
+
+ usbd_device_event (udc_device, DEVICE_RESET, 0);
++ usbd_device_event (udc_device, DEVICE_ADDRESS_ASSIGNED,0);
+ }
+
+ if (status & UDCSR_SUSIR) {
+diff -Nur linux-2.4.18/drivers/usb/device/Config.in linux-2.4.18-usb-storage/drivers/usb/device/Config.in
+--- linux-2.4.18/drivers/usb/device/Config.in 2003-05-13 13:18:45.000000000 +0400
++++ linux-2.4.18-usb-storage/drivers/usb/device/Config.in 2003-11-07 05:35:14.000000000 +0300
+@@ -34,6 +34,7 @@
+ comment 'USB Device functions'
+ source drivers/usb/device/net_fd/Config.in
+ source drivers/usb/device/serial_fd/Config.in
++ source drivers/usb/device/storage_fd/Config.in
+
+ comment 'USB Device bus interfaces'
+ source drivers/usb/device/bi/Config.in
+diff -Nur linux-2.4.18/drivers/usb/device/Makefile linux-2.4.18-usb-storage/drivers/usb/device/Makefile
+--- linux-2.4.18/drivers/usb/device/Makefile 2003-05-13 13:18:45.000000000 +0400
++++ linux-2.4.18-usb-storage/drivers/usb/device/Makefile 2003-11-07 05:35:01.000000000 +0300
+@@ -20,6 +20,7 @@
+
+ subdir-$(CONFIG_USBD_NET) += net_fd
+ subdir-$(CONFIG_USBD_SERIAL) += serial_fd
++subdir-$(CONFIG_USBD_STORAGE) += storage_fd
+
+ #subdir-$(CONFIG_USBD_GENERIC_BUS) += gen_bi
+ #subdir-$(CONFIG_USBD_L7205_BUS) += l7205_bi
+diff -Nur linux-2.4.18/drivers/usb/device/storage_fd/Config.help linux-2.4.18-usb-storage/drivers/usb/device/storage_fd/Config.help
+--- linux-2.4.18/drivers/usb/device/storage_fd/Config.help 1970-01-01 03:00:00.000000000 +0300
++++ linux-2.4.18-usb-storage/drivers/usb/device/storage_fd/Config.help 2003-11-07 05:34:43.000000000 +0300
+@@ -0,0 +1,55 @@
++CONFIG_USBD_STORAGE
++ Enable the generic mass storage function driver. This function is
++ used emulating a Linux block driver.
++
++CONFIG_USBD_STORAGE_VENDORID
++ Optionally specify the mass storage USB Device Vendor ID. The top
++ level Vendor ID will be used if this is not specified.
++
++CONFIG_USBD_STORAGE_PRODUCTID
++ Optionally specify the mass storage USB Device Product ID. The top
++ level Vendor ID will be used if this is not specified.
++
++CONFIG_USBD_STORAGE_OUT_ENDPOINT
++ Specify the preferred OUT (received data) endpoint number. This is a
++ number from 0-15 and must be allowed by the bus interface device.
++
++ Some devices such as the SA-1110 or L7205/L7210 may override this
++ value with a fixed value.
++
++CONFIG_USBD_STORAGE_IN_ENDPOINT
++ Specify the preferred IN (transmit data) endpoint number. This is a
++ number from 0-15 and must be allowed by the bus interface device.
++
++ Some devices such as the SA-1110 or L7205/L7210 may override this
++ value with a fixed value.
++
++CONFIG_USBD_STORAGE_INT_ENDPOINT
++ Specify the preferred INT (interrupt) endpoint number. This is a
++ number from 0-15 and must be allowed by the bus interface device.
++
++ Some devices such as the L7205/L7210 may override this value with a
++ fixed value. Others such as the SA-1110 do not allow an interrupt
++ value.
++
++CONFIG_USBD_STORAGE_OUT_PKTSIZE
++ Specify the maximum packet size for the OUT endpoint. This allowable
++ values are normally 16, 32 and 64.
++
++ Some devices such as the Linkup L7205/L7210 may override this value
++ with a lower maximum value (such as 32).
++
++CONFIG_USBD_STORAGE_IN_PKTSIZE
++ Specify the maximum packet size for the IN endpoint. This allowable
++ values are normally 16, 32 and 64.
++
++ Some devices such as the Linkup L7205/L7210 may override this value
++ with a lower maximum value (such as 32).
++
++CONFIG_USBD_STORAGE_INT_PKTSIZE
++ Specify the maximum packet size for the INT endpoint. This allowable
++ values are normally 8 and 16. Some bus interface devices may not
++ support all values.
++
++CONFIG_USBD_STORAGE_DEF_DEVICE_NAME
++ Specify the default block device name to used on mass storage.
+diff -Nur linux-2.4.18/drivers/usb/device/storage_fd/Config.in linux-2.4.18-usb-storage/drivers/usb/device/storage_fd/Config.in
+--- linux-2.4.18/drivers/usb/device/storage_fd/Config.in 1970-01-01 03:00:00.000000000 +0300
++++ linux-2.4.18-usb-storage/drivers/usb/device/storage_fd/Config.in 2003-11-07 05:34:43.000000000 +0300
+@@ -0,0 +1,29 @@
++#
++# Generic Mass Storage Function Driver
++#
++# Copyright (c) 2003 Communication Technology Inc.
++# Copyright (C) 2001 Lineo, Inc.
++# Copyright (C) 2001 Hewlett-Packard Co.
++mainmenu_option next_comment
++comment "Mass Storage Function"
++
++dep_tristate ' Mass Storage Function Driver' CONFIG_USBD_STORAGE $CONFIG_USBD
++if [ "$CONFIG_USBD_STORAGE" = "y" -o "$CONFIG_USBD_STORAGE" = "m" ]; then
++ hex ' Overide VendorID (hex value)' CONFIG_USBD_STORAGE_VENDORID "0000"
++ hex ' Overide ProductID (hex value)' CONFIG_USBD_STORAGE_PRODUCTID "0000"
++
++ # allow setting of endpoint configurations for some architectures
++ int ' OUT Endpoint (0-15)' CONFIG_USBD_STORAGE_OUT_ENDPOINT "1"
++ int ' OUT PacketSize (16, 32, 64)' CONFIG_USBD_STORAGE_OUT_PKTSIZE "64"
++ int ' IN Endpoint (0-15)' CONFIG_USBD_STORAGE_IN_ENDPOINT "2"
++ int ' IN PacketSize (16, 32, 64)' CONFIG_USBD_STORAGE_IN_PKTSIZE "64"
++
++ if [ ! "$CONFIG_ARCH_SA1100" = "y" -a ! "$CONFIG_ARCH_L7200" = "y" ]; then
++ int ' INT Endpoint (0-15)' CONFIG_USBD_STORAGE_INT_ENDPOINT "3"
++ int ' INT PacketSize (8, 16)' CONFIG_USBD_STORAGE_INT_PKTSIZE "16"
++ fi
++
++ string ' Default Mass Storage device name' CONFIG_USBD_STORAGE_DEF_DEVICE_NAME ""
++fi
++
++endmenu
+diff -Nur linux-2.4.18/drivers/usb/device/storage_fd/Makefile linux-2.4.18-usb-storage/drivers/usb/device/storage_fd/Makefile
+--- linux-2.4.18/drivers/usb/device/storage_fd/Makefile 1970-01-01 03:00:00.000000000 +0300
++++ linux-2.4.18-usb-storage/drivers/usb/device/storage_fd/Makefile 2003-11-07 05:34:43.000000000 +0300
+@@ -0,0 +1,58 @@
++#
++# SA1100 Function driver for a network USB Device
++#
++# Copyright (C) 2001 Lineo, Inc.
++# Copyright (C) 2001 Hewlett-Packard Co.
++
++
++O_TARGET := storage_fd_drv.o
++list-multi := storage_fd.o
++
++storage_fd-objs := storage-fd.o storageproto.o schedule_task.o # netproto.o crc32.o
++
++# Object file lists.
++
++obj-y :=
++obj-m :=
++obj-n :=
++obj- :=
++
++# Each configuration option enables a list of files.
++
++obj-$(CONFIG_USBD_STORAGE) += storage_fd.o
++
++# Extract lists of the multi-part drivers.
++# The 'int-*' lists are the intermediate files used to build the multi's.
++
++multi-y := $(filter $(list-multi), $(obj-y))
++multi-m := $(filter $(list-multi), $(obj-m))
++int-y := $(sort $(foreach m, $(multi-y), $($(basename $(m))-objs)))
++int-m := $(sort $(foreach m, $(multi-m), $($(basename $(m))-objs)))
++
++# Files that are both resident and modular: remove from modular.
++
++obj-m := $(filter-out $(obj-y), $(obj-m))
++int-m := $(filter-out $(int-y), $(int-m))
++
++# Translate to Rules.make lists.
++
++O_OBJS := $(filter-out $(export-objs), $(obj-y))
++OX_OBJS := $(filter $(export-objs), $(obj-y))
++M_OBJS := $(sort $(filter-out $(export-objs), $(obj-m)))
++MX_OBJS := $(sort $(filter $(export-objs), $(obj-m)))
++MI_OBJS := $(sort $(filter-out $(export-objs), $(int-m)))
++MIX_OBJS := $(sort $(filter $(export-objs), $(int-m)))
++
++# The global Rules.make.
++
++include $(TOPDIR)/Rules.make
++
++# Link rules for multi-part drivers.
++
++storage_fd.o: $(storage_fd-objs)
++ $(LD) -r -o $@ $(storage_fd-objs)
++
++# dependencies:
++
++storage-fd.o: ../usbd.h ../usbd-bus.h ../usbd-func.h
++
+diff -Nur linux-2.4.18/drivers/usb/device/storage_fd/schedule_task.c linux-2.4.18-usb-storage/drivers/usb/device/storage_fd/schedule_task.c
+--- linux-2.4.18/drivers/usb/device/storage_fd/schedule_task.c 1970-01-01 03:00:00.000000000 +0300
++++ linux-2.4.18-usb-storage/drivers/usb/device/storage_fd/schedule_task.c 2003-11-07 05:34:43.000000000 +0300
+@@ -0,0 +1,230 @@
++/*
++ * linux/drivers/usb/device/storage_fd/schedule_task.c - schedule task library
++ *
++ * Copyright (c) 2003 Lineo Solutions, Inc.
++ *
++ * Written by Shunnosuke kabata
++ *
++ * 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 File
++******************************************************************************/
++#include <linux/config.h>
++#include <linux/fs.h>
++#include <linux/string.h>
++#include <linux/mm.h>
++#include <linux/dcache.h>
++#include <linux/init.h>
++#include <linux/quotaops.h>
++#include <linux/slab.h>
++#include <linux/cache.h>
++#include <linux/swap.h>
++#include <linux/swapctl.h>
++#include <linux/prefetch.h>
++#include <linux/locks.h>
++#include <asm/uaccess.h>
++
++#include "schedule_task.h"
++
++/******************************************************************************
++** Macro Define
++******************************************************************************/
++#define TASK_DESC_NUM (512)
++
++/******************************************************************************
++** Structure Define
++******************************************************************************/
++
++/**************************************
++** TASK_DESC
++**************************************/
++typedef struct _TASK_DESC{
++ struct _TASK_DESC* next;
++ SCHEDULE_TASK_FUNC task_entry;
++ int task_param1;
++ int task_param2;
++ int task_param3;
++ int task_param4;
++ int task_param5;
++ char* file;
++ int line;
++} TASK_DESC;
++
++/**************************************
++** OS_WRP_TASK_DATA
++**************************************/
++typedef struct{
++ volatile TASK_DESC* read_desc;
++ volatile TASK_DESC* write_desc;
++ TASK_DESC desc_pool[TASK_DESC_NUM];
++ spinlock_t spin_lock;
++ struct tq_struct task_que;
++ unsigned long use_num;
++ unsigned long max_num;
++} TASK_DATA;
++
++/******************************************************************************
++** Variable Declaration
++******************************************************************************/
++static TASK_DATA TaskData;
++
++/******************************************************************************
++** Local Function Prototype
++******************************************************************************/
++static void task_entry(void*);
++
++/******************************************************************************
++** Global Function
++******************************************************************************/
++void schedule_task_init(void)
++{
++ int i;
++
++ /* 0 clear */
++ memset(&TaskData, 0x00, sizeof(TaskData));
++
++ /* Read/write pointer initialize */
++ TaskData.read_desc = TaskData.write_desc = &TaskData.desc_pool[0];
++
++ /* Ling buffer initialize */
++ for(i=0; i<(TASK_DESC_NUM-1); i++){
++ TaskData.desc_pool[i].next = &TaskData.desc_pool[i+1];
++ }
++ TaskData.desc_pool[i].next = &TaskData.desc_pool[0];
++
++ /* Spin lock initialize */
++ spin_lock_init(&TaskData.spin_lock);
++
++ /* Task queue initialize */
++ PREPARE_TQUEUE(&TaskData.task_que, task_entry, &TaskData);
++
++ return;
++}
++
++int schedule_task_register(SCHEDULE_TASK_FUNC entry, int param1, int param2,
++ int param3, int param4, int param5)
++{
++ unsigned long flags = 0;
++
++ spin_lock_irqsave(&TaskData.spin_lock, flags);
++
++ /* Free descriptor check */
++ if(TaskData.write_desc->next == TaskData.read_desc){
++ printk(KERN_INFO "storage_fd: schedule task no descriptor.\n");
++ spin_unlock_irqrestore(&TaskData.spin_lock, flags);
++ return -1;
++ }
++
++ /* Descriptor set */
++ TaskData.write_desc->task_entry = entry;
++ TaskData.write_desc->task_param1 = param1;
++ TaskData.write_desc->task_param2 = param2;
++ TaskData.write_desc->task_param3 = param3;
++ TaskData.write_desc->task_param4 = param4;
++ TaskData.write_desc->task_param5 = param5;
++
++ /* Pointer update */
++ TaskData.write_desc = TaskData.write_desc->next;
++
++ /* Statistics set */
++ TaskData.use_num++;
++ if(TaskData.use_num > TaskData.max_num){
++ TaskData.max_num = TaskData.use_num;
++ }
++
++ spin_unlock_irqrestore(&TaskData.spin_lock, flags);
++
++ /* Task queue register */
++ schedule_task(&TaskData.task_que);
++
++ return 0;
++}
++
++void schedule_task_all_unregister(void)
++{
++ unsigned long flags = 0;
++
++ spin_lock_irqsave(&TaskData.spin_lock, flags);
++ TaskData.read_desc = TaskData.write_desc;
++ TaskData.use_num = 0;
++ spin_unlock_irqrestore(&TaskData.spin_lock, flags);
++}
++
++ssize_t schedule_task_proc_read(struct file* file, char* buf, size_t count,
++ loff_t* pos)
++{
++ char string[1024];
++ int len = 0;
++
++ len += sprintf(string + len, "Schedule task max num:0x%d\n",
++ TASK_DESC_NUM);
++
++ len += sprintf(string + len, "Schedule task use num:0x%ld\n",
++ TaskData.use_num);
++
++ len += sprintf(string + len, "Schedule task max use num:0x%ld\n",
++ TaskData.max_num);
++
++ *pos += len;
++ if(len > count){
++ len = -EINVAL;
++ }
++ else
++ if(len > 0 && copy_to_user(buf, string, len)) {
++ len = -EFAULT;
++ }
++
++ return len;
++}
++
++/******************************************************************************
++** Local Function
++******************************************************************************/
++static void task_entry(void* data)
++{
++ int cond;
++ unsigned long flags = 0;
++ volatile TASK_DESC* desc;
++
++ for(;;){
++
++ spin_lock_irqsave(&TaskData.spin_lock, flags);
++ desc = TaskData.read_desc;
++ cond = (TaskData.read_desc == TaskData.write_desc);
++ spin_unlock_irqrestore(&TaskData.spin_lock, flags);
++
++ if(cond) break;
++
++ /* Task call */
++ desc->task_entry(desc->task_param1, desc->task_param2,
++ desc->task_param3, desc->task_param4, desc->task_param5);
++
++ spin_lock_irqsave(&TaskData.spin_lock, flags);
++
++ /* Pointer update */
++ TaskData.read_desc = TaskData.read_desc->next;
++
++ /* Statistics set */
++ TaskData.use_num--;
++
++ spin_unlock_irqrestore(&TaskData.spin_lock, flags);
++ }
++
++ return;
++}
++
+diff -Nur linux-2.4.18/drivers/usb/device/storage_fd/schedule_task.h linux-2.4.18-usb-storage/drivers/usb/device/storage_fd/schedule_task.h
+--- linux-2.4.18/drivers/usb/device/storage_fd/schedule_task.h 1970-01-01 03:00:00.000000000 +0300
++++ linux-2.4.18-usb-storage/drivers/usb/device/storage_fd/schedule_task.h 2003-11-07 05:34:43.000000000 +0300
+@@ -0,0 +1,41 @@
++/*
++ * linux/drivers/usb/device/storage_fd/schedule_task.h - schedule task library header
++ *
++ * Copyright (c) 2003 Lineo Solutions, Inc.
++ *
++ * Written by Shunnosuke kabata
++ *
++ * 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 _SCHEDULE_TASK_H_
++#define _SCHEDULE_TASK_H_
++
++/******************************************************************************
++** Macro Define
++******************************************************************************/
++typedef int (*SCHEDULE_TASK_FUNC)(int, int, int, int, int);
++
++/******************************************************************************
++** Global Function Prototype
++******************************************************************************/
++void schedule_task_init(void);
++int schedule_task_register(SCHEDULE_TASK_FUNC, int, int, int, int, int);
++void schedule_task_all_unregister(void);
++ssize_t schedule_task_proc_read(struct file*, char*, size_t, loff_t*);
++
++#endif /* _SCHEDULE_TASK_H_ */
++
+diff -Nur linux-2.4.18/drivers/usb/device/storage_fd/storage-fd.c linux-2.4.18-usb-storage/drivers/usb/device/storage_fd/storage-fd.c
+--- linux-2.4.18/drivers/usb/device/storage_fd/storage-fd.c 1970-01-01 03:00:00.000000000 +0300
++++ linux-2.4.18-usb-storage/drivers/usb/device/storage_fd/storage-fd.c 2003-11-07 05:34:43.000000000 +0300
+@@ -0,0 +1,865 @@
++/*
++ * linux/drivers/usb/device/storage_fd/storage-fd.c - mass storage function driver
++ *
++ * Copyright (c) 2003 Lineo Solutions, Inc.
++ *
++ * Written by Shunnosuke kabata
++ *
++ * 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.
++ *
++ * Based on
++ *
++ * linux/drivers/usbd/net_fd/net-fd.c - network function driver
++ *
++ * Copyright (c) 2000, 2001, 2002 Lineo
++ * Copyright (c) 2001 Hewlett Packard
++ *
++ * By:
++ * Stuart Lynne <sl@lineo.com>,
++ * Tom Rushworth <tbr@lineo.com>,
++ * Bruce Balden <balden@lineo.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.
++ *
++ */
++
++/******************************************************************************
++** Include File
++******************************************************************************/
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include "../usbd-export.h"
++#include "../usbd-build.h"
++#include "../usbd-module.h"
++
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/list.h>
++#include <linux/netdevice.h>
++#include <linux/skbuff.h>
++#include <linux/etherdevice.h>
++#include <linux/rtnetlink.h>
++#include <linux/smp_lock.h>
++#include <linux/ctype.h>
++#include <linux/timer.h>
++#include <linux/string.h>
++#include <linux/atmdev.h>
++#include <linux/pkt_sched.h>
++#include <linux/delay.h>
++#include <asm/uaccess.h>
++#include <asm/system.h>
++#include <net/arp.h>
++
++#include <linux/autoconf.h>
++
++#include "../usbd.h"
++#include "../usbd-func.h"
++#include "../usbd-bus.h"
++#include "../usbd-inline.h"
++#include "../usbd-arch.h"
++#include "../hotplug.h"
++
++#include "schedule_task.h"
++#include "storageproto.h"
++
++/******************************************************************************
++** Macro Define
++******************************************************************************/
++
++/**************************************
++** Module Information
++**************************************/
++
++MODULE_AUTHOR("Shunnosuke kabata");
++MODULE_DESCRIPTION("USB Device Mass Storage Function");
++USBD_MODULE_INFO("storage_fd 0.1");
++
++/**************************************
++** Configration Check
++**************************************/
++
++#if !defined (CONFIG_USBD_VENDORID) && !defined(CONFIG_USBD_STORAGE_VENDORID)
++#error No Vendor ID
++#endif
++#if !defined (CONFIG_USBD_PRODUCTID) && !defined(CONFIG_USBD_STORAGE_PRODUCTID)
++#error No Product ID
++#endif
++
++#if defined(CONFIG_USBD_STORAGE_VENDORID) && (CONFIG_USBD_STORAGE_VENDORID > 0)
++#undef CONFIG_USBD_VENDORID
++#define CONFIG_USBD_VENDORID CONFIG_USBD_STORAGE_VENDORID
++#endif
++
++#if defined(CONFIG_USBD_STORAGE_PRODUCTID) && (CONFIG_USBD_STORAGE_PRODUCTID > 0)
++#undef CONFIG_USBD_PRODUCTID
++#define CONFIG_USBD_PRODUCTID CONFIG_USBD_STORAGE_PRODUCTID
++#endif
++
++#ifndef CONFIG_USBD_MAXPOWER
++#define CONFIG_USBD_MAXPOWER 0
++#endif
++
++#ifndef CONFIG_USBD_MANUFACTURER
++#define CONFIG_USBD_MANUFACTURER "Sharp"
++#endif
++
++#define MAXTRANSFER (512)
++
++#ifndef CONFIG_USBD_VENDORID
++#error "CONFIG_USBD_VENDORID not defined"
++#endif
++
++#ifndef CONFIG_USBD_PRODUCTID
++#error "CONFIG_USBD_PRODUCTID not defined"
++#endif
++
++#ifndef CONFIG_USBD_PRODUCT_NAME
++#define CONFIG_USBD_PRODUCT_NAME "Linux Mass Storage Driver"
++#endif
++
++#ifndef CONFIG_USBD_SERIAL_NUMBER_STR
++#define CONFIG_USBD_SERIAL_NUMBER_STR ""
++#endif
++
++/*
++ * USB 2.0 spec does not mention it, but MaxPower is expected to be at least one
++ * and is tested for in USB configuration tests.
++ */
++
++#ifdef CONFIG_USBD_SELFPOWERED
++#define BMATTRIBUTE BMATTRIBUTE_RESERVED | BMATTRIBUTE_SELF_POWERED
++#define BMAXPOWER 1
++#else
++#define BMATTRIBUTE BMATTRIBUTE_RESERVED
++#define BMAXPOWER CONFIG_USBD_MAXPOWER
++#endif
++
++/*
++ * setup some default values for pktsizes and endpoint addresses.
++ */
++
++#ifndef CONFIG_USBD_STORAGE_OUT_PKTSIZE
++#define CONFIG_USBD_STORAGE_OUT_PKTSIZE 64
++#endif
++
++#ifndef CONFIG_USBD_STORAGE_IN_PKTSIZE
++#define CONFIG_USBD_STORAGE_IN_PKTSIZE 64
++#endif
++
++#ifndef CONFIG_USBD_STORAGE_INT_PKTSIZE
++#define CONFIG_USBD_STORAGE_INT_PKTSIZE 16
++#endif
++
++#ifndef CONFIG_USBD_STORAGE_OUT_ENDPOINT
++#define CONFIG_USBD_STORAGE_OUT_ENDPOINT 1
++#endif
++
++#ifndef CONFIG_USBD_STORAGE_IN_ENDPOINT
++#define CONFIG_USBD_STORAGE_IN_ENDPOINT 2
++#endif
++
++#ifndef CONFIG_USBD_STORAGE_INT_ENDPOINT
++#define CONFIG_USBD_STORAGE_INT_ENDPOINT 3
++#endif
++
++/*
++ * check for architecture specific endpoint configurations
++ */
++
++#if defined(ABS_OUT_ADDR)
++ //#warning
++ //#warning USING ABS ENDPOINT OUT ADDRESS
++ #undef CONFIG_USBD_STORAGE_OUT_ENDPOINT
++
++ #if ABS_OUT_ADDR > 0
++ #define CONFIG_USBD_STORAGE_OUT_ENDPOINT ABS_OUT_ADDR
++ #endif
++
++#elif defined(MAX_OUT_ADDR) && defined(CONFIG_USBD_STORAGE_OUT_ENDPOINT) && (CONFIG_USBD_STORAGE_OUT_ENDPOINT > MAX_OUT_ADDR)
++ //#warning
++ //#warning USING DEFAULT ENDPOINT OUT ADDRESS
++ #undef CONFIG_USBD_STORAGE_OUT_ENDPOINT
++ #define CONFIG_USBD_STORAGE_OUT_ENDPOINT DFL_OUT_ADDR
++
++#endif /* elif */
++
++#if defined(ABS_IN_ADDR)
++ //#warning
++ //#warning USING ABS ENDPOINT IN ADDRESS
++ #undef CONFIG_USBD_STORAGE_IN_ENDPOINT
++
++ #if ABS_IN_ADDR > 0
++ #define CONFIG_USBD_STORAGE_IN_ENDPOINT ABS_IN_ADDR
++ #endif
++
++#elif defined(MAX_IN_ADDR) && defined(CONFIG_USBD_STORAGE_IN_ENDPOINT) && (CONFIG_USBD_STORAGE_IN_ENDPOINT > MAX_IN_ADDR)
++ //#warning
++ //#warning USING DEFAULT ENDPOINT IN ADDRESS
++ #undef CONFIG_USBD_STORAGE_IN_ENDPOINT
++ #define CONFIG_USBD_STORAGE_IN_ENDPOINT DFL_IN_ADDR
++
++#endif /* elif */
++
++#if defined(ABS_INT_ADDR)
++ //#warning
++ //#warning USING ABS ENDPOINT INT ADDRESS
++ #undef CONFIG_USBD_STORAGE_INT_ENDPOINT
++
++ #if ABS_INT_ADDR
++ #define CONFIG_USBD_STORAGE_INT_ENDPOINT ABS_INT_ADDR
++ #endif
++
++#elif defined(MAX_INT_ADDR) && defined(CONFIG_USBD_STORAGE_INT_ENDPOINT) && (CONFIG_USBD_STORAGE_INT_ENDPOINT > MAX_INT_ADDR)
++ //#warning
++ //#warning USING DEFAULT ENDPOINT INT ADDRESS
++ #undef CONFIG_USBD_STORAGE_INT_ENDPOINT
++ #define CONFIG_USBD_STORAGE_INT_ENDPOINT DFL_INT_ADDR
++
++#endif /* elif */
++
++#if defined(MAX_OUT_PKTSIZE) && defined(CONFIG_USBD_STORAGE_OUT_PKTSIZE) && CONFIG_USBD_STORAGE_OUT_PKTSIZE > MAX_OUT_PKTSIZE
++ //#warning
++ //#warning OVERIDING ENDPOINT OUT PKTSIZE
++ #undef CONFIG_USBD_STORAGE_OUT_PKTSIZE
++ #define CONFIG_USBD_STORAGE_OUT_PKTSIZE MAX_OUT_PKTSIZE
++#endif
++
++#if defined(MAX_IN_PKTSIZE) && defined(CONFIG_USBD_STORAGE_IN_PKTSIZE) && CONFIG_USBD_STORAGE_IN_PKTSIZE > MAX_IN_PKTSIZE
++ //#warning
++ //#warning OVERIDING ENDPOINT IN PKTSIZE
++ #undef CONFIG_USBD_STORAGE_IN_PKTSIZE
++ #define CONFIG_USBD_STORAGE_IN_PKTSIZE MAX_IN_PKTSIZE
++#endif
++
++#if defined(MAX_INT_PKTSIZE) && defined(CONFIG_USBD_STORAGE_INT_PKTSIZE) && CONFIG_USBD_STORAGE_INT_PKTSIZE > MAX_INT_PKTSIZE
++ //#warning
++ //#warning OVERIDING ENDPOINT INT PKTSIZE
++ #undef CONFIG_USBD_STORAGE_INT_PKTSIZE
++ #define CONFIG_USBD_STORAGE_INT_PKTSIZE MAX_INT_PKTSIZE
++#endif
++
++/******************************************************************************
++** Variable Declaration
++******************************************************************************/
++
++/**************************************
++** Module Parameters
++**************************************/
++
++static u32 vendor_id;
++static u32 product_id;
++static int out_pkt_sz = CONFIG_USBD_STORAGE_OUT_PKTSIZE;
++static int in_pkt_sz = CONFIG_USBD_STORAGE_IN_PKTSIZE;
++
++MODULE_PARM(vendor_id, "i");
++MODULE_PARM(product_id, "i");
++MODULE_PARM(out_pkt_sz, "i");
++MODULE_PARM(in_pkt_sz, "i");
++
++MODULE_PARM_DESC(vendor_id, "vendor id");
++MODULE_PARM_DESC(product_id, "product id");
++
++/**************************************
++** Mass Storage Configuration
++**************************************/
++
++/*
++ * Data Interface Alternate 1 endpoints
++ */
++static __initdata struct usb_endpoint_description StorageAlt1Endpoints[] = {
++ {
++ bEndpointAddress:CONFIG_USBD_STORAGE_OUT_ENDPOINT,
++ bmAttributes:BULK,
++ wMaxPacketSize:CONFIG_USBD_STORAGE_OUT_PKTSIZE,
++ bInterval:0,
++ direction:OUT,
++ transferSize:MAXTRANSFER,
++ },
++
++ {
++ bEndpointAddress:CONFIG_USBD_STORAGE_IN_ENDPOINT,
++ bmAttributes:BULK,
++ wMaxPacketSize:CONFIG_USBD_STORAGE_IN_PKTSIZE,
++ bInterval:0,
++ direction:IN,
++ transferSize:MAXTRANSFER,
++ },
++
++#if defined(CONFIG_USBD_STORAGE_INT_ENDPOINT) && (CONFIG_USBD_STORAGE_INT_ENDPOINT > 0)
++ {
++ bEndpointAddress:CONFIG_USBD_STORAGE_INT_ENDPOINT,
++ bmAttributes:INTERRUPT,
++ wMaxPacketSize:CONFIG_USBD_STORAGE_INT_PKTSIZE,
++ bInterval:10,
++ direction:IN,
++ transferSize:CONFIG_USBD_STORAGE_INT_PKTSIZE,
++ },
++#endif
++};
++
++
++/*
++ * Data Interface Alternate description(s)
++ */
++static __initdata struct usb_alternate_description StorageAlternateDescriptions[] = {
++ {
++ #if defined(CONFIG_USBD_STORAGE_NO_STRINGS)
++ iInterface:"",
++ #else
++ iInterface:"Mass Storage Interface",
++ #endif
++ bAlternateSetting:0,
++ classes:0,
++ class_list:NULL,
++ endpoints:sizeof (StorageAlt1Endpoints) / sizeof (struct usb_endpoint_description),
++ endpoint_list:StorageAlt1Endpoints,
++ },
++};
++
++/*
++ * Interface description(s)
++ */
++static __initdata struct usb_interface_description StorageInterfaces[] = {
++ {
++ #if defined(CONFIG_USBD_STORAGE_NO_STRINGS)
++ iInterface:"",
++ #else
++ iInterface:"Mass Storage Interface",
++ #endif
++ bInterfaceClass:MASS_STORAGE_CLASS,
++ bInterfaceSubClass:MASS_STORAGE_SUBCLASS_SCSI,
++ bInterfaceProtocol:MASS_STORAGE_PROTO_BULK_ONLY,
++ alternates:sizeof (StorageAlternateDescriptions) / sizeof (struct usb_alternate_description),
++ alternate_list:StorageAlternateDescriptions,
++ },
++};
++
++/******************************************************************************
++** USB Configuration
++******************************************************************************/
++
++/*
++ * Configuration description(s)
++ */
++struct __initdata usb_configuration_description StorageDescription[] = {
++ {
++ #if defined(CONFIG_USBD_STORAGE_NO_STRINGS)
++ iConfiguration:"",
++ #else
++ iConfiguration:"Mass Storage Configuration",
++ #endif
++ bmAttributes:BMATTRIBUTE,
++ bMaxPower:BMAXPOWER,
++ interfaces:sizeof (StorageInterfaces) / sizeof (struct usb_interface_description),
++ interface_list:StorageInterfaces,
++ },
++};
++
++/*
++ * Device Description
++ */
++struct __initdata usb_device_description StorageDeviceDescription = {
++ bDeviceClass:0,
++ bDeviceSubClass:0, // XXX
++ bDeviceProtocol:0, // XXX
++ idVendor:CONFIG_USBD_VENDORID,
++ idProduct:CONFIG_USBD_PRODUCTID,
++ iManufacturer:CONFIG_USBD_MANUFACTURER,
++ iProduct:CONFIG_USBD_PRODUCT_NAME,
++ iSerialNumber:CONFIG_USBD_SERIAL_NUMBER_STR,
++};
++
++/**************************************
++** Other Variable
++**************************************/
++static int storage_exit_flag = 0;
++static pid_t storage_pid = 0;
++static struct semaphore storage_sem;
++struct timer_list storage_usb_event_tim;
++
++
++/******************************************************************************
++** Global Function
++******************************************************************************/
++
++void storage_urb_send(struct usb_device_instance* device, void* buffer,
++ int length)
++{
++ int port = 0;
++ struct urb* urb;
++
++ if(!(urb = usbd_alloc_urb(device,
++ device->function_instance_array + port,
++ CONFIG_USBD_STORAGE_IN_ENDPOINT,
++ length + 5 + in_pkt_sz))){
++ printk(KERN_INFO "storage_fd: usbd_alloc_urb failed. length '%d'.\n", length);
++ return;
++ }
++
++ if(buffer){
++ memcpy(urb->buffer, buffer, length);
++ }
++ else{
++ memset(urb->buffer, 0x00, length);
++ }
++ urb->actual_length = length;
++
++ if(usbd_send_urb(urb)){
++ printk(KERN_INFO "storage_fd: usbd_send_urb failed.\n");
++ usbd_dealloc_urb(urb);
++ return;
++ }
++
++ return;
++}
++
++/******************************************************************************
++** Local Function
++******************************************************************************/
++
++/**************************************
++** Called when a USB Device is created or destroyed
++**************************************/
++
++static int storage_thread(void *_c)
++{
++ siginfo_t info;
++ unsigned long signr;
++ char buff[32];
++
++ /* current status set */
++ daemonize();
++
++ /* PID set */
++ storage_pid = current->pid;
++
++ /* thread name set */
++ sprintf(current->comm, STORAGE_THREAD_NAME);
++ (current)->nice = 10;
++
++ /* signal register */
++ spin_lock_irq(&current->sigmask_lock);
++ siginitsetinv(&current->blocked,
++ sigmask(SIGUSR1) | sigmask(SIGHUP) | sigmask(SIGKILL) |
++ sigmask(SIGSTOP) | sigmask(SIGCONT) | sigmask(SIGTERM) |
++ sigmask(SIGALRM));
++ recalc_sigpending(current);
++ spin_unlock_irq(&current->sigmask_lock);
++
++ /* media open */
++ schedule_task_register(
++ (SCHEDULE_TASK_FUNC)storageproto_media_status_check, CONTEXT_STORAGE,
++ 0, 0, 0, 0);
++
++ /* thread active indicate */
++ sprintf(buff, "%d\n", storage_pid);
++ hotplug("usbdstorage", buff, "active");
++
++ for(;;){
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (!signal_pending(current)) {
++ schedule();
++ continue;
++ }
++
++ spin_lock_irq(&current->sigmask_lock);
++ signr = dequeue_signal(&current->blocked, &info);
++ spin_unlock_irq(&current->sigmask_lock);
++
++ switch(signr) {
++ case SIGHUP:
++ /* media signal indicate */
++ schedule_task_register(
++ (SCHEDULE_TASK_FUNC)storageproto_media_status_check, CONTEXT_STORAGE,
++ 0, 0, 0, 0);
++
++ DBG_STORAGE_FD(KERN_INFO "storage_fd: signal receive 'SIGHUP'.\n");
++ break;
++
++ default:
++ DBG_STORAGE_FD(KERN_INFO "storage_fd: signal receive '%ld'\n", signr);
++ break;
++ }
++
++ if(storage_exit_flag) break;
++ }
++ /* current status set */
++ current->state = TASK_RUNNING;
++
++ /* PID clear */
++ storage_pid = 0;
++
++ /* thread inactive indicate */
++ hotplug("usbdstorage", buff, "inactive");
++
++ up(&storage_sem);
++
++ return 0;
++}
++
++static void storage_function_init(struct usb_bus_instance* bus,
++ struct usb_device_instance* device,
++ struct usb_function_driver* function_driver)
++{
++ /* schedule task init */
++ schedule_task_init();
++
++ /* storage protocol initialize */
++ storageproto_init();
++
++ /* semaphore init */
++ sema_init(&storage_sem, 0);
++
++ /* timer initialize */
++ init_timer(&storage_usb_event_tim);
++
++ /* thread create */
++ storage_pid = kernel_thread(storage_thread, NULL, 0);
++
++ return;
++}
++
++static void storage_function_exit(struct usb_device_instance* device)
++{
++ /* thread kill */
++ storage_exit_flag = 1;
++ kill_proc(storage_pid, SIGKILL, 1);
++ down(&storage_sem);
++
++ /* delete timer */
++ del_timer(&storage_usb_event_tim);
++
++ /* storage protocol exit */
++ storageproto_exit();
++
++ /* schedule task delete */
++ schedule_task_all_unregister();
++
++ return;
++}
++
++
++/**************************************
++** Called to handle USB Events
++**************************************/
++
++static void storage_usb_event_delay_timeout(unsigned long param)
++{
++ /* media signal indicate */
++ schedule_task_register(
++ (SCHEDULE_TASK_FUNC)storageproto_usb_status_check, (int)param,
++ 0, 0, 0, 0);
++
++ return;
++}
++
++/*
++ * storage_event - process a device event
++ * @device: usb device
++ * @event: the event that happened
++ *
++ * Called by the usb device core layer to respond to various USB events.
++ *
++ * This routine IS called at interrupt time. Please use the usual precautions.
++ *
++ */
++void storage_event(struct usb_device_instance* device,
++ usb_device_event_t event, int data)
++{
++#if 0
++ static struct {
++ usb_device_event_t event;
++ char* string;
++ } eventAnal[] = {
++ {DEVICE_UNKNOWN, "DEVICE_UNKNOWN"},
++ {DEVICE_INIT, "DEVICE_INIT"},
++ {DEVICE_CREATE, "DEVICE_CREATE"},
++ {DEVICE_HUB_CONFIGURED, "DEVICE_HUB_CONFIGURED"},
++ {DEVICE_RESET, "DEVICE_RESET"},
++ {DEVICE_ADDRESS_ASSIGNED, "DEVICE_ADDRESS_ASSIGNED"},
++ {DEVICE_CONFIGURED, "DEVICE_CONFIGURED"},
++ {DEVICE_SET_INTERFACE, "DEVICE_SET_INTERFACE"},
++ {DEVICE_SET_FEATURE, "DEVICE_SET_FEATURE"},
++ {DEVICE_CLEAR_FEATURE, "DEVICE_CLEAR_FEATURE"},
++ {DEVICE_DE_CONFIGURED, "DEVICE_DE_CONFIGURED"},
++ {DEVICE_BUS_INACTIVE, "DEVICE_BUS_INACTIVE"},
++ {DEVICE_BUS_ACTIVITY, "DEVICE_BUS_ACTIVITY"},
++ {DEVICE_POWER_INTERRUPTION, "DEVICE_POWER_INTERRUPTION"},
++ {DEVICE_HUB_RESET, "DEVICE_HUB_RESET"},
++ {DEVICE_DESTROY, "DEVICE_DESTROY"},
++ {DEVICE_FUNCTION_PRIVATE, "DEVICE_FUNCTION_PRIVATE"}
++ };
++ int i;
++
++ for(i=0; i<(sizeof(eventAnal)/sizeof(eventAnal[0])); i++){
++ if(event == eventAnal[i].event){
++ DBG_STORAGE_FD(KERN_INFO "storage_fd: event receive '%s'.\n",
++ eventAnal[i].string);
++ break;
++ }
++ }
++ if(i == (sizeof(eventAnal)/sizeof(eventAnal[0]))){
++ DBG_STORAGE_FD(KERN_INFO "storage_fd: unknown event receive.\n");
++ }
++#endif
++
++ switch(event){
++ case DEVICE_ADDRESS_ASSIGNED:
++ {
++ static int Is1stCheck = 1;
++ if(Is1stCheck){
++ Is1stCheck = 0;
++
++ /* delay timer set */
++ del_timer(&storage_usb_event_tim);
++ storage_usb_event_tim.expires = jiffies + ((USB_EVENT_DELAY_TIM * HZ) / 1000);
++ storage_usb_event_tim.data = USB_DISCONNECT;
++ storage_usb_event_tim.function = storage_usb_event_delay_timeout;
++ add_timer(&storage_usb_event_tim);
++ break;
++ }
++ }
++ case DEVICE_BUS_ACTIVITY:
++ /* delay timer set */
++ del_timer(&storage_usb_event_tim);
++ storage_usb_event_tim.expires = jiffies + ((USB_EVENT_DELAY_TIM * HZ) / 1000);
++ storage_usb_event_tim.data = USB_CONNECT;
++ storage_usb_event_tim.function = storage_usb_event_delay_timeout;
++ add_timer(&storage_usb_event_tim);
++ break;
++
++ case DEVICE_BUS_INACTIVE:
++ /* delay timer set */
++ del_timer(&storage_usb_event_tim);
++ storage_usb_event_tim.expires = jiffies + ((USB_EVENT_DELAY_TIM * HZ) / 1000);
++ storage_usb_event_tim.data = USB_DISCONNECT;
++ storage_usb_event_tim.function = storage_usb_event_delay_timeout;
++ add_timer(&storage_usb_event_tim);
++ break;
++
++ case DEVICE_RESET:
++ schedule_task_register(
++ (SCHEDULE_TASK_FUNC)storageproto_usb_reset_ind,
++ 0, 0, 0, 0, 0);
++ break;
++
++ default:
++ break;
++ }
++
++ return;
++}
++
++/*
++ * storage_recv_setup - called with a control URB
++ * @urb - pointer to struct urb
++ *
++ * Check if this is a setup packet, process the device request, put results
++ * back into the urb and return zero or non-zero to indicate success (DATA)
++ * or failure (STALL).
++ *
++ * This routine IS called at interrupt time. Please use the usual precautions.
++ *
++ */
++int storage_recv_setup(struct urb* urb)
++{
++ return 0;
++}
++
++/*
++ * storage_recv_urb - called with a received URB
++ * @urb - pointer to struct urb
++ *
++ * Return non-zero if we failed and urb is still valid (not disposed)
++ *
++ * This routine IS called at interrupt time. Please use the usual precautions.
++ *
++ */
++int storage_recv_urb(struct urb* urb)
++{
++ int port = 0; // XXX compound device
++ struct usb_device_instance* device;
++ struct usb_function_instance* function;
++
++ if(!urb || !(device = urb->device) ||
++ !(function = device->function_instance_array + port)){
++ return -EINVAL;
++ }
++
++ if(urb->status != RECV_OK){
++ return -EINVAL;
++ }
++
++ /* URB urb_analysis */
++ schedule_task_register(
++ (SCHEDULE_TASK_FUNC)storageproto_urb_analysis, (int)urb,
++ 0, 0, 0, 0);
++
++ return 0;
++}
++
++/*
++ * storage_urb_sent - called to indicate URB transmit finished
++ * @urb: pointer to struct urb
++ * @rc: result
++ *
++ * The usb device core layer will use this to let us know when an URB has
++ * been finished with.
++ *
++ * This routine IS called at interrupt time. Please use the usual precautions.
++ *
++ */
++int storage_urb_sent(struct urb* urb, int rc)
++{
++ int port = 0; // XXX compound device
++ struct usb_device_instance* device;
++ struct usb_function_instance* function;
++
++ if(!urb || !(device = urb->device) ||
++ !(function = device->function_instance_array + port)){
++ return -EINVAL;
++ }
++
++ usbd_dealloc_urb (urb);
++
++ return 0;
++}
++
++/**************************************
++** Proc file system
++**************************************/
++
++static ssize_t storage_proc_read(struct file* file, char* buf, size_t count,
++ loff_t* pos)
++{
++ int len = 0, ret;
++
++ if(*pos > 0) return 0;
++
++ if((ret = storageproto_proc_read(file, buf + len, count - len, pos)) < 0){
++ return ret;
++ }
++ len += ret;
++
++ if((ret = schedule_task_proc_read(file, buf + len, count - len, pos)) < 0){
++ return ret;
++ }
++ len += ret;
++
++ return len;
++}
++
++static struct file_operations StorageProcOps = {
++ read:storage_proc_read,
++};
++
++/**************************************
++** Module init and exit
++**************************************/
++
++struct usb_function_operations StorageFunctionOps = {
++ event:storage_event,
++ recv_urb:storage_recv_urb,
++ recv_setup:storage_recv_setup,
++ urb_sent:storage_urb_sent,
++ function_init:storage_function_init,
++ function_exit:storage_function_exit,
++};
++
++struct usb_function_driver StorageFunctionDriver = {
++ name:"Mass Storage",
++ ops:&StorageFunctionOps,
++ device_description:&StorageDeviceDescription,
++ configurations:sizeof (StorageDescription) / sizeof (struct usb_configuration_description),
++ configuration_description:StorageDescription,
++ this_module:THIS_MODULE,
++};
++
++/*
++ * net_modinit - module init
++ *
++ */
++static int __init net_modinit(void)
++{
++ struct proc_dir_entry* proc_entry;
++
++ printk(KERN_INFO "storage_fd: %s (OUT=%d,IN=%d)\n",
++ __usbd_module_info, out_pkt_sz, in_pkt_sz);
++
++ printk(KERN_INFO "storage_fd: vendorID: %x productID: %x\n",
++ CONFIG_USBD_VENDORID, CONFIG_USBD_PRODUCTID);
++
++ // verify pkt sizes not too small
++ if (out_pkt_sz < 3 || in_pkt_sz < 3){
++ printk(KERN_INFO "storage_fd: Rx pkt size %d or Tx pkt size %d too small\n",
++ out_pkt_sz, in_pkt_sz);
++ return (-EINVAL);
++ }
++
++ if(vendor_id){
++ StorageDeviceDescription.idVendor = vendor_id;
++ }
++ if(product_id){
++ StorageDeviceDescription.idProduct = product_id;
++ }
++
++ // register us with the usb device support layer
++ if(usbd_register_function(&StorageFunctionDriver)){
++ printk(KERN_INFO "storage_fd: usbd_register_function failed.\n");
++ return -EINVAL;
++ }
++
++ // create proc entry
++ if ((proc_entry = create_proc_entry("usb-storage", 0, 0)) == NULL) {
++ usbd_deregister_function (&StorageFunctionDriver);
++ printk(KERN_INFO "storage_fd: create_proc_entry failed.\n");
++ return -ENOMEM;
++ }
++ proc_entry->proc_fops = &StorageProcOps;
++
++ return 0;
++}
++
++/*
++ * function_exit - module cleanup
++ *
++ */
++static void __exit net_modexit (void)
++{
++ // de-register us with the usb device support layer
++ usbd_deregister_function (&StorageFunctionDriver);
++
++ // remove proc entry
++ remove_proc_entry("usb-storage", NULL);
++
++ return;
++}
++
++module_init (net_modinit);
++module_exit (net_modexit);
+diff -Nur linux-2.4.18/drivers/usb/device/storage_fd/storageproto.c linux-2.4.18-usb-storage/drivers/usb/device/storage_fd/storageproto.c
+--- linux-2.4.18/drivers/usb/device/storage_fd/storageproto.c 1970-01-01 03:00:00.000000000 +0300
++++ linux-2.4.18-usb-storage/drivers/usb/device/storage_fd/storageproto.c 2003-11-07 05:34:43.000000000 +0300
+@@ -0,0 +1,1505 @@
++/*
++ * linux/drivers/usb/device/storage_fd/storageproto.c - mass storage protocol library
++ *
++ * Copyright (c) 2003 Lineo Solutions, Inc.
++ *
++ * Written by Shunnosuke kabata
++ *
++ * 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 File
++******************************************************************************/
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include "../usbd-export.h"
++#include "../usbd-build.h"
++#include "../usbd-module.h"
++
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/list.h>
++#include <linux/netdevice.h>
++#include <linux/skbuff.h>
++#include <linux/etherdevice.h>
++#include <linux/rtnetlink.h>
++#include <linux/smp_lock.h>
++#include <linux/ctype.h>
++#include <linux/timer.h>
++#include <linux/string.h>
++#include <linux/atmdev.h>
++#include <linux/pkt_sched.h>
++#include <linux/delay.h>
++#include <linux/blkdev.h>
++#include <linux/file.h>
++#include <asm/uaccess.h>
++#include <asm/system.h>
++#include <net/arp.h>
++
++#include <linux/autoconf.h>
++
++#include "../usbd.h"
++#include "../usbd-func.h"
++#include "../usbd-bus.h"
++#include "../usbd-inline.h"
++#include "../usbd-arch.h"
++#include "../hotplug.h"
++
++#include "schedule_task.h"
++#include "storageproto.h"
++
++/******************************************************************************
++** macro define
++******************************************************************************/
++
++#define DEVICE_BLOCK_SIZE 512
++
++#define BLOCK_BUFFER_SIZE (1024 * 64)
++
++#define DEF_NUMBER_OF_HEADS 0x10
++#define DEF_SECTORS_PER_TRACK 0x20
++
++/******************************************************************************
++** Structure Define
++******************************************************************************/
++
++typedef struct{
++ unsigned char scsi_command;
++ unsigned char* command_name;
++ void (*scsi_func)(struct usb_device_instance*,
++ COMMAND_BLOCK_WRAPPER*);
++} SCSI_ANALYSIS_TBL;
++
++typedef struct{
++ unsigned char scsi_command;
++ unsigned char* command_name;
++ void (*bulkout_func)(struct usb_device_instance*,
++ void*, int);
++} SCSI_BULKOUT_ANALYSIS_TBL;
++
++/******************************************************************************
++** Variable Declaration
++******************************************************************************/
++
++/**************************************
++** Module Parameters
++**************************************/
++
++static char* storage_device = CONFIG_USBD_STORAGE_DEF_DEVICE_NAME;
++MODULE_PARM(storage_device, "s");
++
++/**************************************
++** Device Information
++**************************************/
++
++static struct file* DeviceFile = NULL;
++static int DeviceSize = 0;
++static int DeviceBlockSize = DEVICE_BLOCK_SIZE;
++static int DeviceWrProtect = WR_PROTECT_OFF;
++
++/**************************************
++** Status
++**************************************/
++
++static int StorageStatus = STORAGE_IDLE;
++static int UsbStatus = USB_DISCONNECT;
++static int MediaStatus = MEDIA_EJECT;
++static int MediaChange = MEDIA_CHANGE_OFF;
++
++/**************************************
++** Keep Information
++**************************************/
++
++static SCSI_REQUEST_SENSE_DATA RequestSenseData;
++static COMMAND_BLOCK_WRAPPER KeepCBW;
++static unsigned long BulkOutLength = 0;
++static unsigned char BlockBuffer[BLOCK_BUFFER_SIZE];
++
++/**************************************
++** Statistics
++**************************************/
++static unsigned long StatMaxBulkInSize = 0;
++static unsigned long StatMaxBulkOutSize = 0;
++static unsigned long StatDevWriteError = 0;
++static unsigned long StatDevReadError = 0;
++static unsigned long StatDevFlushError = 0;
++static unsigned long StatWriteTimout = 0;
++static unsigned long StatMaxWriteTime = 0;
++
++/**************************************
++** Timer
++**************************************/
++static struct timer_list BulkOutTim;
++static struct timer_list MediaCheckTim;
++
++/******************************************************************************
++** Local Function
++******************************************************************************/
++
++static void storage_bulkout_timeout(unsigned long param)
++{
++ /* statistics update */
++ StatWriteTimout++;
++ printk(KERN_INFO "storage_fd: write bulk out timeout. length '%ld/%ld'.\n",
++ BulkOutLength, KeepCBW.dCBWDataTransferLength);
++
++ return;
++}
++
++static void media_check_timeout(unsigned long param)
++{
++ /* media check */
++ schedule_task_register(
++ (SCHEDULE_TASK_FUNC)storageproto_media_status_check, CONTEXT_TIMER,
++ 0, 0, 0, 0);
++
++ return;
++}
++
++static void request_sense_data_set(unsigned char sense_key, unsigned char asc,
++ unsigned char ascq, unsigned long info)
++{
++ /*
++ * set REQUEST SENSE DATA
++ */
++
++ memset(&RequestSenseData, 0x00, sizeof(RequestSenseData));
++
++ RequestSenseData.ErrorCode = 0x70;
++ RequestSenseData.Valid = (info) ? 1 : 0;
++ RequestSenseData.SenseKey = sense_key;
++ memcpy(RequestSenseData.Information, &info, sizeof(info));
++ RequestSenseData.AdditionalSenseLength = 0x0a;
++ RequestSenseData.AdditionalSenseCode = asc;
++ RequestSenseData.AdditionalSenseCodeQualifier = ascq;
++
++ return;
++}
++
++static void scsi_inquiry_analysis(struct usb_device_instance* device,
++ COMMAND_BLOCK_WRAPPER* cbw)
++{
++ SCSI_INQUIRY_DATA data;
++ COMMAND_STATUS_WRAPPER csw;
++ unsigned long data_len;
++
++ /*
++ * data transport
++ */
++
++ memset(&data, 0x00, sizeof(data));
++
++ data.PeripheralDeviceType = 0x00;
++ data.RMB = 1;
++ data.ResponseDataFormat = 0x01;
++ data.AdditionalLength = 0x1f;
++ strncpy(data.VendorInformation, CONFIG_USBD_MANUFACTURER,
++ sizeof(data.VendorInformation));
++ strncpy(data.ProductIdentification, CONFIG_USBD_PRODUCT_NAME,
++ sizeof(data.ProductIdentification));
++ strncpy(data.ProductRevisionLevel, PRODUCT_REVISION_LEVEL,
++ sizeof(data.ProductRevisionLevel));
++
++ data_len = sizeof(data);
++ if(cbw->dCBWDataTransferLength < data_len){
++ data_len = cbw->dCBWDataTransferLength;
++ }
++
++ storage_urb_send(device, &data, data_len);
++
++ /*
++ * status transport
++ */
++
++ memset(&csw, 0x00, sizeof(csw));
++
++ csw.dCSWSignature = CSW_SIGNATURE;
++ csw.dCSWTag = cbw->dCBWTag;
++ csw.dCSWDataResidue = cbw->dCBWDataTransferLength - data_len;
++ csw.bCSWStatus = 0;
++
++ storage_urb_send(device, &csw, sizeof(csw));
++
++ return;
++}
++
++static void scsi_read_format_capacity_analysis(struct usb_device_instance* device,
++ COMMAND_BLOCK_WRAPPER* cbw)
++{
++ SCSI_READ_FORMAT_CAPACITY_DATA data;
++ COMMAND_STATUS_WRAPPER csw;
++ unsigned long block_num, data_len;
++ unsigned short block_len;
++
++ /*
++ * data transport
++ */
++
++ block_num = 0xffffffff;
++ block_len = (unsigned short)DeviceBlockSize;
++ block_num = htonl(block_num);
++ block_len = htons(block_len);
++
++ memset(&data, 0x00, sizeof(data));
++
++ data.CapacityListHeader.CapacityListLength =
++ sizeof(data.CurrentMaximumCapacityDescriptor);
++ memcpy(data.CurrentMaximumCapacityDescriptor.NumberofBlocks, &block_num,
++ sizeof(block_num));
++ data.CurrentMaximumCapacityDescriptor.DescriptorCode = 0x03;
++ memcpy(data.CurrentMaximumCapacityDescriptor.BlockLength + 1, &block_len,
++ sizeof(block_len));
++
++ data_len = sizeof(data);
++ if(cbw->dCBWDataTransferLength < data_len){
++ data_len = cbw->dCBWDataTransferLength;
++ }
++
++ storage_urb_send(device, &data, data_len);
++
++ /*
++ * status transport
++ */
++
++ memset(&csw, 0x00, sizeof(csw));
++
++ csw.dCSWSignature = CSW_SIGNATURE;
++ csw.dCSWTag = cbw->dCBWTag;
++ csw.dCSWDataResidue = cbw->dCBWDataTransferLength - data_len;
++ csw.bCSWStatus = 0;
++
++ storage_urb_send(device, &csw, sizeof(csw));
++
++ return;
++}
++
++static void scsi_read_capacity_analysis(struct usb_device_instance* device,
++ COMMAND_BLOCK_WRAPPER* cbw)
++{
++ SCSI_READ_CAPACITY_DATA data;
++ COMMAND_STATUS_WRAPPER csw;
++ unsigned char data_len, status = 0;
++
++ if(DeviceFile == NULL){
++ /* 0 clear */
++ memset(&data, 0x00, sizeof(data));
++
++ /* data length set */
++ data_len = cbw->dCBWDataTransferLength;
++
++ /* status set */
++ status = 1;
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x02, 0x3a, 0x00, 0x00);
++ }
++ else
++ if(MediaChange == MEDIA_CHANGE_ON){
++ /* 0 clear */
++ memset(&data, 0x00, sizeof(data));
++
++ /* data length set */
++ data_len = cbw->dCBWDataTransferLength;
++
++ /* status set */
++ status = 1;
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x06, 0x28, 0x00, 0x00);
++
++ /* media change flag off */
++ MediaChange = MEDIA_CHANGE_OFF;
++ }
++ else{
++ unsigned long last_lba, block_len;
++
++ /* 0 clear */
++ memset(&data, 0x00, sizeof(data));
++
++ /* data set */
++ last_lba = (DeviceSize / DeviceBlockSize) - 1;
++ block_len = DeviceBlockSize;
++ last_lba = htonl(last_lba);
++ block_len = htonl(block_len);
++
++ memcpy(data.LastLogicalBlockAddress, &last_lba, sizeof(last_lba));
++ memcpy(data.BlockLengthInBytes, &block_len, sizeof(block_len));
++
++ /* data length set */
++ data_len = sizeof(data);
++
++ /* status set */
++ status = 0;
++ }
++
++ /*
++ * data transport
++ */
++
++ if(cbw->dCBWDataTransferLength < data_len){
++ data_len = cbw->dCBWDataTransferLength;
++ }
++
++ storage_urb_send(device, &data, data_len);
++
++ /*
++ * status transport
++ */
++
++ memset(&csw, 0x00, sizeof(csw));
++
++ csw.dCSWSignature = CSW_SIGNATURE;
++ csw.dCSWTag = cbw->dCBWTag;
++ csw.dCSWDataResidue = cbw->dCBWDataTransferLength - data_len;
++ csw.bCSWStatus = status;
++
++ storage_urb_send(device, &csw, sizeof(csw));
++
++ return;
++}
++
++static void scsi_request_sense_analysis(struct usb_device_instance* device,
++ COMMAND_BLOCK_WRAPPER* cbw)
++{
++ COMMAND_STATUS_WRAPPER csw;
++ unsigned long data_len;
++
++ /*
++ * data transport
++ */
++
++ data_len = sizeof(RequestSenseData);
++ if(cbw->dCBWDataTransferLength < data_len){
++ data_len = cbw->dCBWDataTransferLength;
++ }
++
++ storage_urb_send(device, &RequestSenseData, data_len);
++
++ /*
++ * status transport
++ */
++
++ memset(&csw, 0x00, sizeof(csw));
++
++ csw.dCSWSignature = CSW_SIGNATURE;
++ csw.dCSWTag = cbw->dCBWTag;
++ csw.dCSWDataResidue = cbw->dCBWDataTransferLength - data_len;
++ csw.bCSWStatus = 0;
++
++ storage_urb_send(device, &csw, sizeof(csw));
++
++ return;
++}
++
++static void scsi_read_10_analysis(struct usb_device_instance* device,
++ COMMAND_BLOCK_WRAPPER* cbw)
++{
++ SCSI_READ_10_COMMAND* command = (SCSI_READ_10_COMMAND*)cbw->CBWCB;
++ COMMAND_STATUS_WRAPPER csw;
++ unsigned char status = 0;
++ unsigned short len;
++ unsigned long lba, size, offset;
++
++ memcpy(&lba, command->LogicalBlockAddress, sizeof(lba));
++ memcpy(&len, command->TransferLength, sizeof(len));
++ lba = ntohl(lba);
++ len = ntohs(len);
++ offset = lba * DeviceBlockSize;
++ size = cbw->dCBWDataTransferLength;
++
++ if(DeviceFile == NULL){
++ /* command fail */
++ status = 1;
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x02, 0x3a, 0x00, 0x00);
++
++ /*
++ * data transport
++ */
++
++ storage_urb_send(device, NULL, size);
++ }
++ else
++ if(MediaChange == MEDIA_CHANGE_ON){
++ /* command fail */
++ status = 1;
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x06, 0x28, 0x00, 0x00);
++
++ /* media change flag off */
++ MediaChange = MEDIA_CHANGE_OFF;
++
++ /*
++ * data transport
++ */
++
++ storage_urb_send(device, NULL, size);
++ }
++ else{
++ unsigned long count, read_size;
++
++ /*
++ * data transport
++ */
++
++ /* device seek */
++ DeviceFile->f_op->llseek(DeviceFile, offset, 0);
++
++ /* device read */
++ for(count = size; count; count -= read_size){
++ read_size = (count > sizeof(BlockBuffer)) ?
++ sizeof(BlockBuffer) : count;
++ if(DeviceFile &&
++ DeviceFile->f_op->read(DeviceFile, BlockBuffer, read_size,
++ &DeviceFile->f_pos) != read_size){
++
++ /* command fail */
++ status = 1;
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x02, 0x3a, 0x00, 0x00);
++
++ /* statistics update */
++ StatDevReadError++;
++ printk(KERN_INFO "storage_fd: device read error. length '%ld'.\n", read_size);
++ }
++
++ storage_urb_send(device, BlockBuffer, read_size);
++ }
++ }
++
++ /*
++ * status transport
++ */
++
++ memset(&csw, 0x00, sizeof(csw));
++
++ csw.dCSWSignature = CSW_SIGNATURE;
++ csw.dCSWTag = cbw->dCBWTag;
++ csw.dCSWDataResidue = cbw->dCBWDataTransferLength - size;
++ csw.bCSWStatus = status;
++
++ storage_urb_send(device, &csw, sizeof(csw));
++
++ return;
++}
++
++static void scsi_mode_sense_analysis(struct usb_device_instance* device,
++ COMMAND_BLOCK_WRAPPER* cbw)
++{
++ static READ_WRITE_ERROR_RECOVERY_PAGE page_01 = {
++ PageCode:0x01,
++ PageLength:0x0A,
++ ReadRetryCount:0x03,
++ WriteRetryCount:0x80,
++ };
++ static FLEXIBLE_DISK_PAGE page_05 = {
++ PageCode:0x05,
++ PageLength:0x1E,
++ TransferRate:{0x00, 0xFA},
++ NumberofHeads:0xA0,
++ SectorsperTrack:0x00,
++ DataBytesperSector:{0x02, 0x00},
++ NumberofCylinders:{0x00, 0x00},
++ MotorOnDelay:0x05,
++ MotorOffDelay:0x1E,
++ MediumRotationRate:{0x01, 0x68},
++ };
++ static REMOVABLE_BLOCK_ACCESS_CAPABILITIES_PAGE page_1b = {
++ PageCode:0x1B,
++ PageLength:0x0A,
++ TLUN:0x01,
++ };
++ static TIMER_AND_PROTECT_PAGE page_1c = {
++ PageCode:0x1c,
++ PageLength:0x06,
++ InactivityTimeMultiplier:0x0A,
++ };
++
++
++ SCSI_MODE_SENSE_COMMAND* command = (SCSI_MODE_SENSE_COMMAND*)cbw->CBWCB;
++ SCSI_MODE_SENSE_DATA data;
++ COMMAND_STATUS_WRAPPER csw;
++ unsigned char data_len, status = 0;
++ unsigned short cylinder, sector;
++ unsigned long size;
++
++ /*
++ * data transport
++ */
++
++ memset(&data, 0x00, sizeof(data));
++
++ /* set write protect */
++ data.ModeParameterHeader.WP = DeviceWrProtect;
++
++ /* set Flexible Disk Page */
++ if(DeviceFile == NULL){
++ sector = (unsigned short)DeviceBlockSize;
++ cylinder = 0;
++ sector = htons(sector);
++ cylinder = htons(cylinder);
++
++ page_05.NumberofHeads = 0;
++ page_05.SectorsperTrack = 0;
++ memcpy(page_05.DataBytesperSector, &sector, sizeof(sector));
++ memcpy(page_05.NumberofCylinders, &cylinder, sizeof(cylinder));
++ }
++ else{
++ sector = (unsigned short)DeviceBlockSize;
++ size = DEF_NUMBER_OF_HEADS * DEF_SECTORS_PER_TRACK * sector;
++ cylinder = DeviceSize / size;
++ sector = htons(sector);
++ cylinder = htons(cylinder);
++
++ page_05.NumberofHeads = DEF_NUMBER_OF_HEADS;
++ page_05.SectorsperTrack = DEF_SECTORS_PER_TRACK;
++ memcpy(page_05.DataBytesperSector, &sector, sizeof(sector));
++ memcpy(page_05.NumberofCylinders, &cylinder, sizeof(cylinder));
++ }
++
++ if(command->PC == 0 && command->PageCode == 0x01){
++ data_len = sizeof(MODE_PARAMETER_HEADER) + sizeof(page_01);
++ data.ModeParameterHeader.ModeDataLength = data_len - 1;
++ memcpy(&data.ModePages, &page_01, sizeof(page_01));
++ }
++ else
++ if(command->PC == 0 && command->PageCode == 0x05){
++ data_len = sizeof(MODE_PARAMETER_HEADER) + sizeof(page_05);
++ data.ModeParameterHeader.ModeDataLength = data_len - 1;
++ memcpy(&data.ModePages, &page_05, sizeof(page_05));
++ }
++ else
++ if(command->PC == 0 && command->PageCode == 0x1b){
++ data_len = sizeof(MODE_PARAMETER_HEADER) + sizeof(page_1b);
++ data.ModeParameterHeader.ModeDataLength = data_len - 1;
++ memcpy(&data.ModePages, &page_1b, sizeof(page_1b));
++ }
++ else
++ if(command->PC == 0 && command->PageCode == 0x1c){
++ data_len = sizeof(MODE_PARAMETER_HEADER) + sizeof(page_1c);
++ data.ModeParameterHeader.ModeDataLength = data_len - 1;
++ memcpy(&data.ModePages, &page_1c, sizeof(page_1c));
++ }
++ else
++ if(command->PC == 0 && command->PageCode == 0x3f){
++ data_len = sizeof(MODE_PARAMETER_HEADER) + sizeof(MODE_ALL_PAGES);
++ data.ModeParameterHeader.ModeDataLength = data_len - 1;
++ memcpy(&data.ModePages.ModeAllPages.ReadWriteErrorRecoveryPage,
++ &page_01, sizeof(page_01));
++ memcpy(&data.ModePages.ModeAllPages.FlexibleDiskPage,
++ &page_05, sizeof(page_05));
++ memcpy(&data.ModePages.ModeAllPages.RemovableBlockAccessCapabilitiesPage,
++ &page_1b, sizeof(page_1b));
++ memcpy(&data.ModePages.ModeAllPages.TimerAndProtectPage,
++ &page_1c, sizeof(page_1c));
++ }
++ else{
++ /* command fail */
++ status = 1;
++ data_len = cbw->dCBWDataTransferLength;
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x05, 0x24, 0x00, 0x00);
++ }
++
++ if(cbw->dCBWDataTransferLength < data_len){
++ data_len = cbw->dCBWDataTransferLength;
++ }
++
++ storage_urb_send(device, &data, data_len);
++
++ /*
++ * status transport
++ */
++
++ memset(&csw, 0x00, sizeof(csw));
++
++ csw.dCSWSignature = CSW_SIGNATURE;
++ csw.dCSWTag = cbw->dCBWTag;
++ csw.dCSWDataResidue = cbw->dCBWDataTransferLength - data_len;
++ csw.bCSWStatus = status;
++
++ storage_urb_send(device, &csw, sizeof(csw));
++
++ return;
++}
++
++static void scsi_test_unit_ready_analysis(struct usb_device_instance* device,
++ COMMAND_BLOCK_WRAPPER* cbw)
++{
++ COMMAND_STATUS_WRAPPER csw;
++ unsigned char status = 0;
++
++ if(DeviceFile == NULL){
++ /* command fail */
++ status = 1;
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x02, 0x3a, 0x00, 0x00);
++ }
++ else
++ if(MediaChange == MEDIA_CHANGE_ON){
++ /* command fail */
++ status = 1;
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x06, 0x28, 0x00, 0x00);
++
++ /* media change flag off */
++ MediaChange = MEDIA_CHANGE_OFF;
++ }
++
++ /*
++ * status transport
++ */
++
++ memset(&csw, 0x00, sizeof(csw));
++
++ csw.dCSWSignature = CSW_SIGNATURE;
++ csw.dCSWTag = cbw->dCBWTag;
++ csw.dCSWDataResidue = cbw->dCBWDataTransferLength;
++ csw.bCSWStatus = status;
++
++ storage_urb_send(device, &csw, sizeof(csw));
++
++ return;
++}
++
++static void scsi_prevent_allow_medium_removal_analysis(struct usb_device_instance* device,
++ COMMAND_BLOCK_WRAPPER* cbw)
++{
++ SCSI_PREVENT_ALLOW_MEDIUM_REMOVAL_COMMAND* command = (SCSI_PREVENT_ALLOW_MEDIUM_REMOVAL_COMMAND*)cbw->CBWCB;
++ COMMAND_STATUS_WRAPPER csw;
++ unsigned char status = 0;
++
++ if(command->Prevent){
++ /* command fail */
++ status = 1;
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x05, 0x24, 0x00, 0x00);
++ }
++
++ /*
++ * status transport
++ */
++
++ memset(&csw, 0x00, sizeof(csw));
++
++ csw.dCSWSignature = CSW_SIGNATURE;
++ csw.dCSWTag = cbw->dCBWTag;
++ csw.dCSWDataResidue = cbw->dCBWDataTransferLength;
++ csw.bCSWStatus = status;
++
++ storage_urb_send(device, &csw, sizeof(csw));
++
++ return;
++}
++
++static void scsi_start_stop_analysis(struct usb_device_instance* device,
++ COMMAND_BLOCK_WRAPPER* cbw)
++{
++ SCSI_START_STOP_COMMAND* command = (SCSI_START_STOP_COMMAND*)cbw->CBWCB;
++ COMMAND_STATUS_WRAPPER csw;
++ unsigned char status = 0;
++
++ if(DeviceFile == NULL){
++ /* command fail */
++ status = 1;
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x02, 0x3a, 0x00, 0x00);
++ }
++ else
++ if(MediaChange == MEDIA_CHANGE_ON){
++ /* command fail */
++ status = 1;
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x06, 0x28, 0x00, 0x00);
++
++ /* media change flag off */
++ MediaChange = MEDIA_CHANGE_OFF;
++ }
++ else
++ if(command->Start && command->LoEj){
++ /* command fail */
++ status = 1;
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x05, 0x24, 0x00, 0x00);
++ }
++
++ /* device buffer flush */
++ if(DeviceFile && DeviceFile->f_op->ioctl(DeviceFile->f_dentry->d_inode,
++ DeviceFile, BLKFLSBUF, 0) != 0){
++ /* statistics update */
++ StatDevFlushError++;
++ printk(KERN_INFO "storage_fd: device flush error.\n");
++ }
++
++ /*
++ * status transport
++ */
++
++ memset(&csw, 0x00, sizeof(csw));
++
++ csw.dCSWSignature = CSW_SIGNATURE;
++ csw.dCSWTag = cbw->dCBWTag;
++ csw.dCSWDataResidue = cbw->dCBWDataTransferLength;
++ csw.bCSWStatus = status;
++
++ storage_urb_send(device, &csw, sizeof(csw));
++
++ return;
++}
++
++static void scsi_write_10_analysis(struct usb_device_instance* device,
++ COMMAND_BLOCK_WRAPPER* cbw)
++{
++ /* status set */
++ BulkOutLength = 0;
++ StorageStatus = STORAGE_BULKOUT;
++
++ /* timer set */
++ del_timer(&BulkOutTim);
++ BulkOutTim.expires = jiffies + ((WR_BULKOUT_CHK_TIM * HZ) / 1000);
++ BulkOutTim.data = 0;
++ BulkOutTim.function = storage_bulkout_timeout;
++ add_timer(&BulkOutTim);
++
++ return;
++}
++
++static void scsi_verify_analysis(struct usb_device_instance* device,
++ COMMAND_BLOCK_WRAPPER* cbw)
++{
++ COMMAND_STATUS_WRAPPER csw;
++ unsigned char status = 0;
++
++ if(DeviceFile == NULL){
++ /* command fail */
++ status = 1;
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x02, 0x3a, 0x00, 0x00);
++ }
++ else
++ if(MediaChange == MEDIA_CHANGE_ON){
++ /* command fail */
++ status = 1;
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x06, 0x28, 0x00, 0x00);
++
++ /* media change flag off */
++ MediaChange = MEDIA_CHANGE_OFF;
++ }
++
++ /*
++ * status transport
++ */
++
++ memset(&csw, 0x00, sizeof(csw));
++
++ csw.dCSWSignature = CSW_SIGNATURE;
++ csw.dCSWTag = cbw->dCBWTag;
++ csw.dCSWDataResidue = cbw->dCBWDataTransferLength;
++ csw.bCSWStatus = status;
++
++ storage_urb_send(device, &csw, sizeof(csw));
++
++ return;
++}
++
++static void scsi_unsupport_analysis(struct usb_device_instance* device,
++ COMMAND_BLOCK_WRAPPER* cbw)
++{
++ COMMAND_STATUS_WRAPPER csw;
++ unsigned char data_len = 0;
++
++ if(((cbw->bmCBWFlags & 0x80) == 0x00) && (cbw->dCBWDataTransferLength)){
++ /* BLKOUT */
++
++ /* status set */
++ BulkOutLength = 0;
++ StorageStatus = STORAGE_BULKOUT;
++ }
++ else{
++ /* BLKIN */
++
++ if(cbw->dCBWDataTransferLength){
++ data_len = cbw->dCBWDataTransferLength;
++ storage_urb_send(device, NULL, data_len);
++ }
++
++ /*
++ * status transport
++ */
++
++ memset(&csw, 0x00, sizeof(csw));
++
++ csw.dCSWSignature = CSW_SIGNATURE;
++ csw.dCSWTag = cbw->dCBWTag;
++ csw.dCSWDataResidue = cbw->dCBWDataTransferLength - data_len;
++ csw.bCSWStatus = 0x01;
++ storage_urb_send(device, &csw, sizeof(csw));
++
++ }
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x05, 0x20, 0x00, 0x00);
++
++ return;
++}
++
++static void scsi_bulkout_write_10_analysis(struct usb_device_instance* device,
++ void* buffer, int length)
++{
++ COMMAND_STATUS_WRAPPER csw;
++ unsigned char status = 0;
++ unsigned long buff_used_len, buff_offset;
++ unsigned long s_tick, e_tick, wr_tick;
++
++ buff_offset = BulkOutLength % sizeof(BlockBuffer);
++
++ memcpy(BlockBuffer + buff_offset, buffer, length);
++ BulkOutLength += length;
++
++ buff_used_len = BulkOutLength % sizeof(BlockBuffer);
++ if(buff_used_len == 0) buff_used_len = sizeof(BlockBuffer);
++
++ /* delete timer */
++ if(BulkOutLength >= KeepCBW.dCBWDataTransferLength){
++ del_timer(&BulkOutTim);
++ }
++
++ if(buff_used_len >= sizeof(BlockBuffer) ||
++ BulkOutLength >= KeepCBW.dCBWDataTransferLength){
++
++ /* buffer full */
++ SCSI_WRITE_10_COMMAND* command = (SCSI_WRITE_10_COMMAND*)&KeepCBW.CBWCB;
++ unsigned short len;
++ unsigned long lba, offset;
++
++ memcpy(&lba, command->LogicalBlockAddress, sizeof(lba));
++ memcpy(&len, command->TransferLength, sizeof(len));
++ lba = ntohl(lba);
++ len = ntohs(len);
++
++ offset = (lba * DeviceBlockSize) +
++ (sizeof(BlockBuffer) * ((BulkOutLength - 1) / sizeof(BlockBuffer)));
++
++ /* device check */
++ if(DeviceFile &&
++ MediaChange != MEDIA_CHANGE_ON &&
++ DeviceWrProtect != WR_PROTECT_ON){
++
++ /* write before jiffies get */
++ s_tick = jiffies;
++
++ /* device seek */
++ DeviceFile->f_op->llseek(DeviceFile, offset, 0);
++
++ /* device write */
++ if(DeviceFile->f_op->write(DeviceFile, BlockBuffer, buff_used_len,
++ &DeviceFile->f_pos) != buff_used_len){
++ /* statistics update */
++ StatDevWriteError++;
++ printk(KERN_INFO "storage_fd: device write error. length '%ld'.\n", buff_used_len);
++ }
++
++ /* write after jiffies get */
++ e_tick = jiffies;
++
++ /* statistics update */
++ wr_tick = e_tick - s_tick;
++ if(wr_tick > StatMaxWriteTime){
++ StatMaxWriteTime = wr_tick;
++ }
++ }
++ }
++
++ if(BulkOutLength >= KeepCBW.dCBWDataTransferLength){
++ if(DeviceFile == NULL){
++ /* command fail */
++ status = 1;
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x02, 0x3a, 0x00, 0x00);
++ }
++ else
++ if(MediaChange == MEDIA_CHANGE_ON){
++ /* command fail */
++ status = 1;
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x06, 0x28, 0x00, 0x00);
++
++ /* media change flag off */
++ MediaChange = MEDIA_CHANGE_OFF;
++ }
++ else
++ if(DeviceWrProtect == WR_PROTECT_ON){
++ /* command fail */
++ status = 1;
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x07, 0x27, 0x00, 0x00);
++
++ /* media change flag off */
++ MediaChange = MEDIA_CHANGE_OFF;
++ }
++
++ /*
++ * status transport
++ */
++
++ memset(&csw, 0x00, sizeof(csw));
++
++ csw.dCSWSignature = CSW_SIGNATURE;
++ csw.dCSWTag = KeepCBW.dCBWTag;
++ csw.dCSWDataResidue = KeepCBW.dCBWDataTransferLength - BulkOutLength;
++ csw.bCSWStatus = status;
++
++ storage_urb_send(device, &csw, sizeof(csw));
++
++ /* status reset */
++ BulkOutLength = 0;
++ StorageStatus = STORAGE_IDLE;
++
++ /* flush before jiffies get */
++ s_tick = jiffies;
++
++ /* device buffer flush */
++ if(DeviceFile && DeviceFile->f_op->ioctl(DeviceFile->f_dentry->d_inode,
++ DeviceFile, BLKFLSBUF, 0) != 0){
++ /* statistics update */
++ StatDevFlushError++;
++ printk(KERN_INFO "storage_fd: device flush error.\n");
++ }
++
++ /* flush after jiffies get */
++ e_tick = jiffies;
++
++ /* statistics update */
++ wr_tick = e_tick - s_tick;
++ if(wr_tick > StatMaxWriteTime){
++ StatMaxWriteTime = wr_tick;
++ }
++
++ }
++
++ return;
++}
++
++static void scsi_bulkout_unsupport_analysis(struct usb_device_instance* device,
++ void* buffer, int length)
++{
++ COMMAND_STATUS_WRAPPER csw;
++
++ BulkOutLength += length;
++
++ if(BulkOutLength >= KeepCBW.dCBWDataTransferLength){
++ /*
++ * status transport
++ */
++
++ memset(&csw, 0x00, sizeof(csw));
++
++ csw.dCSWSignature = CSW_SIGNATURE;
++ csw.dCSWTag = KeepCBW.dCBWTag;
++ csw.dCSWDataResidue = KeepCBW.dCBWDataTransferLength - BulkOutLength;
++ csw.bCSWStatus = 1;
++
++ storage_urb_send(device, &csw, sizeof(csw));
++
++ /* error code save REQUEST SENSE */
++ request_sense_data_set(0x05, 0x20, 0x00, 0x00);
++
++ /* status reset */
++ BulkOutLength = 0;
++ StorageStatus = STORAGE_IDLE;
++ }
++
++ return;
++}
++
++/******************************************************************************
++** Global Function
++******************************************************************************/
++
++static SCSI_ANALYSIS_TBL ScsiAnalysisTbl[] = {
++ {SCSI_FORMAT_UNT, "SCSI_FORMAT_UNT", NULL},
++ {SCSI_INQUIRY, "SCSI_INQUIRY", scsi_inquiry_analysis},
++ {SCSI_START_STOP, "SCSI_START_STOP", scsi_start_stop_analysis},
++ {SCSI_MODE_SELECT, "SCSI_MODE_SELECT", NULL},
++ {SCSI_MODE_SENSE, "SCSI_MODE_SENSE", scsi_mode_sense_analysis},
++ {SCSI_PREVENT_ALLOW_MEDIUM_REMOVAL, "SCSI_PREVENT_ALLOW_MEDIUM_REMOVAL", scsi_prevent_allow_medium_removal_analysis},
++ {SCSI_READ_10, "SCSI_READ_10", scsi_read_10_analysis},
++ {SCSI_READ_12, "SCSI_READ_12", NULL},
++ {SCSI_READ_CAPACITY, "SCSI_READ_CAPACITY", scsi_read_capacity_analysis},
++ {SCSI_READ_FORMAT_CAPACITY, "SCSI_READ_FORMAT_CAPACITY", scsi_read_format_capacity_analysis},
++ {SCSI_REQUEST_SENSE, "SCSI_REQUEST_SENSE", scsi_request_sense_analysis},
++ {SCSI_REZERO_UNIT, "SCSI_REZERO_UNIT", NULL},
++ {SCSI_SEEK_10, "SCSI_SEEK_10", NULL},
++ {SCSI_SEND_DIAGNOSTIC, "SCSI_SEND_DIAGNOSTIC", NULL},
++ {SCSI_TEST_UNIT_READY, "SCSI_TEST_UNIT_READY", scsi_test_unit_ready_analysis},
++ {SCSI_VERIFY, "SCSI_VERIFY", scsi_verify_analysis},
++ {SCSI_WRITE_10, "SCSI_WRITE_10", scsi_write_10_analysis},
++ {SCSI_WRITE_12, "SCSI_WRITE_12", NULL},
++ {SCSI_WRITE_AND_VERIFY, "SCSI_WRITE_AND_VERIFY", NULL}
++};
++
++static SCSI_BULKOUT_ANALYSIS_TBL ScsiBlkOutAnalysisTbl[] = {
++ {SCSI_WRITE_10, "SCSI_WRITE_10", scsi_bulkout_write_10_analysis},
++};
++
++void storageproto_urb_analysis(struct urb* urb)
++{
++ COMMAND_BLOCK_WRAPPER* cbw = (COMMAND_BLOCK_WRAPPER*)urb->buffer;
++ int i;
++
++ /* status BLKOUT check */
++ if(StorageStatus == STORAGE_BULKOUT){
++ for(i = 0;
++ i < sizeof(ScsiBlkOutAnalysisTbl) / sizeof(SCSI_ANALYSIS_TBL);
++ i++){
++ if(ScsiBlkOutAnalysisTbl[i].scsi_command == KeepCBW.CBWCB[0]){
++ if(ScsiBlkOutAnalysisTbl[i].bulkout_func){
++ ScsiBlkOutAnalysisTbl[i].bulkout_func(urb->device,
++ urb->buffer,
++ urb->actual_length);
++ goto RETURN_LABEL;
++ }
++ break;
++ }
++ }
++ scsi_bulkout_unsupport_analysis(urb->device, urb->buffer, urb->actual_length);
++ goto RETURN_LABEL;
++ }
++
++ /* signature check */
++ if(cbw->dCBWSignature != CBW_SIGNATURE){
++ printk(KERN_INFO "storage_fd: signature error. '0x%08lx'.\n",
++ cbw->dCBWSignature);
++ goto RETURN_LABEL;
++ }
++
++ /* statistics set */
++ if(cbw->dCBWDataTransferLength){
++ if(((cbw->bmCBWFlags & 0x80) == 0x00) && (cbw->dCBWDataTransferLength)){
++ /* BULK OUT */
++ if(StatMaxBulkOutSize < cbw->dCBWDataTransferLength){
++ StatMaxBulkOutSize = cbw->dCBWDataTransferLength;
++ }
++ }
++ else{
++ /* BULK IN */
++ if(StatMaxBulkInSize < cbw->dCBWDataTransferLength){
++ StatMaxBulkInSize = cbw->dCBWDataTransferLength;
++ }
++ }
++ }
++
++ /* save CBW and set storage status */
++ memcpy(&KeepCBW, cbw, sizeof(KeepCBW));
++
++ /* UFI command analysis */
++ for(i = 0; i < sizeof(ScsiAnalysisTbl) / sizeof(SCSI_ANALYSIS_TBL); i++){
++ if(ScsiAnalysisTbl[i].scsi_command == cbw->CBWCB[0]){
++ if(ScsiAnalysisTbl[i].scsi_func){
++ ScsiAnalysisTbl[i].scsi_func(urb->device, cbw);
++ goto RETURN_LABEL;
++ }
++ break;
++ }
++ }
++
++ scsi_unsupport_analysis(urb->device, cbw);
++ printk(KERN_INFO "storage_fd: SCSI command error. '0x%02x'.\n",
++ cbw->CBWCB[0]);
++ goto RETURN_LABEL;
++
++RETURN_LABEL:
++
++ /* URB free */
++ usbd_recycle_urb(urb);
++
++ return;
++}
++
++int storageproto_device_open_check(void)
++{
++ struct file* file;
++ struct inode* inode;
++ kdev_t dev;
++ int read_org;
++
++ /* device already open check */
++ if(DeviceFile){
++ storageproto_device_close();
++ }
++
++ /* device open */
++ file = filp_open(storage_device, O_RDWR, 0000);
++ if(IS_ERR(file)){
++ file = filp_open(storage_device, O_RDONLY, 0000);
++ if(IS_ERR(file)){
++ storageproto_device_close();
++ return MEDIA_EJECT;
++ }
++ DeviceWrProtect = WR_PROTECT_ON;
++ }
++
++ file->f_op->llseek(file, 0, 0);
++ if(file->f_op->read(file, (void*)&read_org, sizeof(read_org), &file->f_pos)
++ != sizeof(read_org)){
++ filp_close(file, NULL);
++ storageproto_device_close();
++ return MEDIA_EJECT;
++ }
++
++ /* struct file pointer save */
++ DeviceFile = file;
++
++ /* device information */
++ inode = file->f_dentry->d_inode;
++ dev = inode->i_rdev;
++
++ if (blk_size[MAJOR(dev)]){
++ DeviceSize = blk_size[MAJOR(dev)][MINOR(dev)] << BLOCK_SIZE_BITS;
++ }
++ else{
++ DeviceSize = INT_MAX << BLOCK_SIZE_BITS;
++ }
++
++ if(blksize_size[MAJOR(dev)] && blksize_size[MAJOR(dev)][MINOR(dev)]){
++ DeviceBlockSize = DEVICE_BLOCK_SIZE;
++ }
++ else{
++ DeviceBlockSize = DEVICE_BLOCK_SIZE;
++ }
++
++ return MEDIA_INSERT;
++}
++
++void storageproto_device_close(void)
++{
++ if(DeviceFile){
++ filp_close(DeviceFile, NULL);
++ DeviceFile = NULL;
++ DeviceSize = 0;
++ DeviceBlockSize = DEVICE_BLOCK_SIZE;
++ DeviceWrProtect = WR_PROTECT_OFF;
++ }
++
++ return;
++}
++
++void storageproto_usb_status_check(int status)
++{
++ static int Is1stCheck = 1;
++
++ /* USB status check */
++ if(Is1stCheck){
++ Is1stCheck = 0;
++ }
++ else{
++ if(UsbStatus == status) goto RETURN_LABEL;
++ }
++
++ /* set status */
++ UsbStatus = status;
++
++ switch(UsbStatus){
++ case USB_CONNECT:
++ /* media status check */
++ storageproto_media_status_check(CONTEXT_SCHEDULE);
++
++ switch(MediaStatus){
++ case MEDIA_EJECT:
++ break;
++
++ case MEDIA_INSERT:
++ hotplug("usbdstorage", storage_device, "umount");
++ break;
++
++ default:
++ break;
++ }
++ hotplug("usbdstorage", storage_device, "connect");
++ break;
++
++ case USB_DISCONNECT:
++ /* device close */
++ storageproto_device_close();
++
++ switch(MediaStatus){
++ case MEDIA_EJECT:
++ break;
++
++ case MEDIA_INSERT:
++ hotplug("usbdstorage", storage_device, "mount");
++ break;
++
++ default:
++ break;
++ }
++ hotplug("usbdstorage", storage_device, "disconnect");
++ break;
++
++ default:
++ break;
++ }
++
++RETURN_LABEL:
++ DBG_STORAGE_FD(KERN_INFO "storage_fd: USB check '%s' '%s' 'file:%p'.\n",
++ (UsbStatus) ? "USB_CONNECT" : "USB_DISCONNECT",
++ (MediaStatus) ? "MEDIA_INSERT" : "MEDIA_EJECT", DeviceFile);
++
++ return;
++}
++
++void storageproto_media_status_check(int call_context)
++{
++ static unsigned long RetryCount = 0;
++ int status;
++
++ /* media open check */
++ status = storageproto_device_open_check();
++
++ /* media status check retry */
++ if(status == MEDIA_EJECT){
++ switch(call_context){
++ case CONTEXT_STORAGE:
++
++ /* retry counter init */
++ RetryCount = 0;
++
++ /* timer set */
++ del_timer(&MediaCheckTim);
++ MediaCheckTim.expires = jiffies + ((MEDIA_CHECK_TIM * HZ) / 1000);
++ MediaCheckTim.data = 0;
++ MediaCheckTim.function = media_check_timeout;
++ add_timer(&MediaCheckTim);
++
++ break;
++
++ case CONTEXT_TIMER:
++
++ /* retry counter update */
++ RetryCount++;
++
++ /* retry counter check */
++ if(RetryCount >= MEDIA_CHECK_RETRY) break;
++
++ /* timer set */
++ del_timer(&MediaCheckTim);
++ MediaCheckTim.expires = jiffies + ((MEDIA_CHECK_TIM * HZ) / 1000);
++ MediaCheckTim.data = 0;
++ MediaCheckTim.function = media_check_timeout;
++ add_timer(&MediaCheckTim);
++
++ break;
++
++ default:
++ break;
++ }
++ }
++ else
++ if(status == MEDIA_INSERT){
++ /* delete timer */
++ del_timer(&MediaCheckTim);
++ }
++
++ /* media status check */
++ if(status == MediaStatus){
++ if(UsbStatus == USB_DISCONNECT){
++ storageproto_device_close();
++ }
++ if(MediaStatus == MEDIA_INSERT){
++ if(call_context == CONTEXT_STORAGE || call_context == CONTEXT_TIMER){
++ MediaChange = MEDIA_CHANGE_ON;
++ }
++ }
++ goto RETURN_LABEL;
++ }
++
++ /* set status */
++ MediaStatus = status;
++
++ switch(MediaStatus){
++ case MEDIA_INSERT:
++ /* set status */
++ MediaChange = MEDIA_CHANGE_ON;
++
++ switch(UsbStatus){
++ case USB_DISCONNECT:
++ storageproto_device_close();
++ break;
++
++ case USB_CONNECT:
++ break;
++
++ default:
++ break;
++ }
++ hotplug("usbdstorage", storage_device, "insert");
++ break;
++
++ case MEDIA_EJECT:
++ switch(UsbStatus){
++ case USB_DISCONNECT:
++ storageproto_device_close();
++ break;
++
++ case USB_CONNECT:
++ break;
++
++ default:
++ break;
++ }
++ hotplug("usbdstorage", storage_device, "eject");
++ break;
++
++ default:
++ break;
++ }
++
++RETURN_LABEL:
++ DBG_STORAGE_FD(KERN_INFO "storage_fd: media check. '%s' '%s' 'file:%p' '%s'.\n",
++ (UsbStatus) ? "USB_CONNECT" : "USB_DISCONNECT",
++ (MediaStatus) ? "MEDIA_INSERT" : "MEDIA_EJECT", DeviceFile,
++ (call_context == CONTEXT_SCHEDULE) ? "CONTEXT_SCHEDULE" :
++ (call_context == CONTEXT_STORAGE) ? "CONTEXT_STORAGE" : "CONTEXT_TIMER");
++
++ return;
++}
++
++void storageproto_usb_reset_ind(void)
++{
++ /* status reset */
++ BulkOutLength = 0;
++ StorageStatus = STORAGE_IDLE;
++
++ DBG_STORAGE_FD(KERN_INFO "storage_fd: storage protocol reset.\n");
++
++ return;
++}
++
++void storageproto_init(void)
++{
++ /* timer init */
++ init_timer(&BulkOutTim);
++
++ /* timer init */
++ init_timer(&MediaCheckTim);
++
++ return;
++}
++
++void storageproto_exit(void)
++{
++ /* device close */
++ storageproto_device_close();
++
++ /* delete timer */
++ del_timer(&BulkOutTim);
++
++ /* delete timer */
++ del_timer(&MediaCheckTim);
++
++ return;
++}
++
++ssize_t storageproto_proc_read(struct file* file, char* buf, size_t count,
++ loff_t* pos)
++{
++ char string[1024];
++ int len = 0;
++
++ len += sprintf(string + len, "Protocol status:%s\n",
++ (StorageStatus == STORAGE_IDLE) ? "STORAGE_IDLE" :
++ (StorageStatus == STORAGE_BULKIN) ? "STORAGE_BULKIN" :
++ "STORAGE_BULKOUT");
++
++ len += sprintf(string + len, "USB status:%s\n",
++ (UsbStatus == USB_DISCONNECT) ? "USB_DISCONNECT" :
++ "USB_CONNECT");
++
++ len += sprintf(string + len, "Media status:%s\n",
++ (MediaStatus == MEDIA_EJECT) ? "MEDIA_EJECT" :
++ "MEDIA_INSERT");
++
++ len += sprintf(string + len, "Media chage:%s\n",
++ (MediaChange == MEDIA_CHANGE_OFF) ? "MEDIA_CHANGE_OFF" :
++ "MEDIA_CHANGE_ON");
++
++ len += sprintf(string + len, "Device name:%s\n",
++ storage_device);
++
++ len += sprintf(string + len, "Device file descriptor:0x%p\n",
++ DeviceFile);
++
++ len += sprintf(string + len, "Device size:0x%d\n",
++ DeviceSize);
++
++ len += sprintf(string + len, "Device block size:0x%d\n",
++ DeviceBlockSize);
++
++ len += sprintf(string + len, "Device write protect:%s\n",
++ (DeviceWrProtect == WR_PROTECT_OFF) ? "WR_PROTECT_OFF":
++ "WR_PROTECT_ON");
++
++ len += sprintf(string + len, "Bulk in max size:%ld\n",
++ StatMaxBulkInSize);
++
++ len += sprintf(string + len, "Bulk out max size:%ld\n",
++ StatMaxBulkOutSize);
++
++ len += sprintf(string + len, "device write error:%ld\n",
++ StatDevWriteError);
++
++ len += sprintf(string + len, "device read error:%ld\n",
++ StatDevReadError);
++
++ len += sprintf(string + len, "device flush error:%ld\n",
++ StatDevFlushError);
++
++ len += sprintf(string + len, "write data bulk out timout:%ld\n",
++ StatWriteTimout);
++
++ len += sprintf(string + len, "device write max time:%ld msec\n",
++ (StatMaxWriteTime * 1000) / HZ);
++
++ *pos += len;
++ if(len > count){
++ len = -EINVAL;
++ }
++ else
++ if(len > 0 && copy_to_user(buf, string, len)) {
++ len = -EFAULT;
++ }
++
++ return len;
++}
++
+diff -Nur linux-2.4.18/drivers/usb/device/storage_fd/storageproto.h linux-2.4.18-usb-storage/drivers/usb/device/storage_fd/storageproto.h
+--- linux-2.4.18/drivers/usb/device/storage_fd/storageproto.h 1970-01-01 03:00:00.000000000 +0300
++++ linux-2.4.18-usb-storage/drivers/usb/device/storage_fd/storageproto.h 2003-11-07 05:34:43.000000000 +0300
+@@ -0,0 +1,585 @@
++/*
++ * linux/drivers/usb/device/storage_fd/storageproto.h - mass storage protocol library header
++ *
++ * Copyright (c) 2003 Lineo Solutions, Inc.
++ *
++ * Written by Shunnosuke kabata
++ *
++ * 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 _STORAGEPROTO_H_
++#define _STORAGEPROTO_H_
++
++/******************************************************************************
++** Macro Define
++******************************************************************************/
++
++/**************************************
++** Class Code
++**************************************/
++
++/*
++ * Class
++ */
++
++#define MASS_STORAGE_CLASS 0x08
++
++/*
++ * SubClass
++ */
++
++#define MASS_STORAGE_SUBCLASS_RBC 0x01
++#define MASS_STORAGE_SUBCLASS_SFF8020I 0x02
++#define MASS_STORAGE_SUBCLASS_QIC157 0x03
++#define MASS_STORAGE_SUBCLASS_UFI 0x04
++#define MASS_STORAGE_SUBCLASS_SFF8070I 0x05
++#define MASS_STORAGE_SUBCLASS_SCSI 0x06
++
++/*
++ * Protocol
++ */
++
++#define MASS_STORAGE_PROTO_CBI_WITH_COMP 0x00
++#define MASS_STORAGE_PROTO_CBI_NO_COMP 0x01
++#define MASS_STORAGE_PROTO_BULK_ONLY 0x50
++
++/**************************************
++** SCSI Command
++**************************************/
++
++#define SCSI_FORMAT_UNT 0x04
++#define SCSI_INQUIRY 0x12
++#define SCSI_START_STOP 0x1b
++#define SCSI_MODE_SELECT 0x55
++#define SCSI_MODE_SENSE 0x1a
++#define SCSI_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e
++#define SCSI_READ_10 0x28
++#define SCSI_READ_12 0xa8
++#define SCSI_READ_CAPACITY 0x25
++#define SCSI_READ_FORMAT_CAPACITY 0x23
++#define SCSI_REQUEST_SENSE 0x03
++#define SCSI_REZERO_UNIT 0x01
++#define SCSI_SEEK_10 0x2b
++#define SCSI_SEND_DIAGNOSTIC 0x1d
++#define SCSI_TEST_UNIT_READY 0x00
++#define SCSI_VERIFY 0x2f
++#define SCSI_WRITE_10 0x2a
++#define SCSI_WRITE_12 0xaa
++#define SCSI_WRITE_AND_VERIFY 0x2e
++
++/**************************************
++** SCSI Command Parameter
++**************************************/
++
++#define CBW_SIGNATURE 0x43425355 /* USBC */
++#define CSW_SIGNATURE 0x53425355 /* USBS */
++
++#define PRODUCT_REVISION_LEVEL "1.00"
++
++/**************************************
++** Status
++**************************************/
++
++#define WR_PROTECT_OFF 0
++#define WR_PROTECT_ON 1
++
++#define STORAGE_IDLE 0
++#define STORAGE_BULKIN 1
++#define STORAGE_BULKOUT 2
++
++#define USB_DISCONNECT 0
++#define USB_CONNECT 1
++
++#define MEDIA_EJECT 0
++#define MEDIA_INSERT 1
++
++#define MEDIA_CHANGE_OFF 0
++#define MEDIA_CHANGE_ON 1
++
++/**************************************
++** Mass Storage Thread Name
++**************************************/
++
++#define STORAGE_THREAD_NAME "usbdstorage"
++
++/**************************************
++** Media Signal Delay Time(ms)
++**************************************/
++
++#define USB_EVENT_DELAY_TIM 1000
++
++/**************************************
++** Write Bulk Out Check Time(ms)
++**************************************/
++
++#define WR_BULKOUT_CHK_TIM 1000
++
++/**************************************
++** Media Check Time(ms)
++**************************************/
++
++#define MEDIA_CHECK_TIM 3000
++#define MEDIA_CHECK_RETRY 3
++
++/**************************************
++** Context
++**************************************/
++
++#define CONTEXT_SCHEDULE 0
++#define CONTEXT_STORAGE 1
++#define CONTEXT_TIMER 2
++
++/**************************************
++** Debug Message
++**************************************/
++#if 0
++#define DBG_STORAGE_FD(fmt, args...) printk(fmt, ##args)
++#else
++#define DBG_STORAGE_FD(fmt, args...)
++#endif
++
++/******************************************************************************
++** Structure Define
++******************************************************************************/
++
++/**************************************
++** Command Block Wrapper / Command Status Wrapper
++**************************************/
++
++/*
++ * Command Block Wrapper
++ */
++typedef struct{
++ unsigned long dCBWSignature;
++ unsigned long dCBWTag;
++ unsigned long dCBWDataTransferLength;
++ unsigned char bmCBWFlags;
++ unsigned char bCBWLUN:4,
++ Reserved:4;
++ unsigned char bCBWCBLength:5,
++ Reserved2:3;
++ unsigned char CBWCB[16];
++} __attribute__((packed)) COMMAND_BLOCK_WRAPPER;
++
++/*
++ * Command Status Wrapper
++ */
++typedef struct{
++ unsigned long dCSWSignature;
++ unsigned long dCSWTag;
++ unsigned long dCSWDataResidue;
++ unsigned char bCSWStatus;
++} __attribute__((packed)) COMMAND_STATUS_WRAPPER;
++
++/**************************************
++** SCSI Command
++**************************************/
++
++/*
++ * INQUIRY
++ */
++
++typedef struct{
++ unsigned char OperationCode;
++ unsigned char EVPD:1,
++ Reserved1:4,
++ LogicalUnitNumber:3;
++ unsigned char PageCode;
++ unsigned char Reserved2;
++ unsigned char AllocationLength;
++ unsigned char Reserved3;
++ unsigned char Reserved4;
++ unsigned char Reserved5;
++ unsigned char Reserved6;
++ unsigned char Reserved7;
++ unsigned char Reserved8;
++ unsigned char Reserved9;
++} __attribute__((packed)) SCSI_INQUIRY_COMMAND;
++
++typedef struct{
++ unsigned char PeripheralDeviceType:5,
++ Reserved1:3;
++ unsigned char Reserved2:7,
++ RMB:1;
++ unsigned char ANSIVersion:3,
++ ECMAVersion:3,
++ ISOVersion:2;
++ unsigned char ResponseDataFormat:4,
++ Reserved3:4;
++ unsigned char AdditionalLength;
++ unsigned char Reserved4;
++ unsigned char Reserved5;
++ unsigned char Reserved6;
++ unsigned char VendorInformation[8];
++ unsigned char ProductIdentification[16];
++ unsigned char ProductRevisionLevel[4];
++} __attribute__((packed)) SCSI_INQUIRY_DATA;
++
++/*
++ * READ FORMAT CAPACITY
++ */
++
++typedef struct{
++ unsigned char OperationCode;
++ unsigned char Reserved1:5,
++ LogicalUnitNumber:3;
++ unsigned char Reserved2;
++ unsigned char Reserved3;
++ unsigned char Reserved4;
++ unsigned char Reserved5;
++ unsigned char Reserved6;
++ unsigned char AllocationLength[2];
++ unsigned char Reserved7;
++ unsigned char Reserved8;
++ unsigned char Reserved9;
++} __attribute__((packed)) SCSI_READ_FORMAT_CAPACITY_COMMAND;
++
++typedef struct{
++ struct{
++ unsigned char Reserved1;
++ unsigned char Reserved2;
++ unsigned char Reserved3;
++ unsigned char CapacityListLength;
++ } __attribute__((packed)) CapacityListHeader;
++ struct{
++ unsigned char NumberofBlocks[4];
++ unsigned char DescriptorCode:2,
++ Reserved1:6;
++ unsigned char BlockLength[3];
++ } __attribute__((packed)) CurrentMaximumCapacityDescriptor;
++} __attribute__((packed)) SCSI_READ_FORMAT_CAPACITY_DATA;
++
++/*
++ * READ FORMAT CAPACITY
++ */
++
++typedef struct{
++ unsigned char OperationCode;
++ unsigned char RelAdr:1,
++ Reserved1:4,
++ LogicalUnitNumber:3;
++ unsigned char LogicalBlockAddress[4];
++ unsigned char Reserved2;
++ unsigned char Reserved3;
++ unsigned char PMI:1,
++ Reserved4:7;
++ unsigned char Reserved5;
++ unsigned char Reserved6;
++ unsigned char Reserved7;
++} __attribute__((packed)) SCSI_READ_CAPACITY_COMMAND;
++
++typedef struct{
++ unsigned char LastLogicalBlockAddress[4];
++ unsigned char BlockLengthInBytes[4];
++} __attribute__((packed)) SCSI_READ_CAPACITY_DATA;
++
++/*
++ * REQUEST SENSE
++ */
++
++typedef struct{
++ unsigned char OperationCode;
++ unsigned char Reserved1:5,
++ LogicalUnitNumber:3;
++ unsigned char Reserved2;
++ unsigned char Reserved3;
++ unsigned char AllocationLength;
++ unsigned char Reserved4;
++ unsigned char Reserved5;
++ unsigned char Reserved6;
++ unsigned char Reserved7;
++ unsigned char Reserved8;
++ unsigned char Reserved9;
++ unsigned char Reserved10;
++} __attribute__((packed)) SCSI_REQUEST_SENSE_COMMAND;
++
++typedef struct{
++ unsigned char ErrorCode:7,
++ Valid:1;
++ unsigned char Reserved1;
++ unsigned char SenseKey:4,
++ Reserved2:4;
++ unsigned char Information[4];
++ unsigned char AdditionalSenseLength;
++ unsigned char Reserved3[4];
++ unsigned char AdditionalSenseCode;
++ unsigned char AdditionalSenseCodeQualifier;
++ unsigned char Reserved4;
++ unsigned char Reserved5[3];
++} __attribute__((packed)) SCSI_REQUEST_SENSE_DATA;
++
++/*
++ * READ(10)
++ */
++
++typedef struct{
++ unsigned char OperationCode;
++ unsigned char RelAdr:1,
++ Reserved1:2,
++ FUA:1,
++ DPO:1,
++ LogicalUnitNumber:3;
++ unsigned char LogicalBlockAddress[4];
++ unsigned char Reserved2;
++ unsigned char TransferLength[2];
++ unsigned char Reserved3;
++ unsigned char Reserved4;
++ unsigned char Reserved5;
++} __attribute__((packed)) SCSI_READ_10_COMMAND;
++
++/*
++ * MODE SENSE
++ */
++
++typedef struct{
++ unsigned char OperationCode;
++ unsigned char Reserved1:3,
++ DBD:1,
++ Reserved2:1,
++ LogicalUnitNumber:3;
++ unsigned char PageCode:6,
++ PC:2;
++ unsigned char Reserved3;
++ unsigned char Reserved4;
++ unsigned char Reserved5;
++ unsigned char Reserved6;
++ unsigned char ParameterListLength[2];
++ unsigned char Reserved7;
++ unsigned char Reserved8;
++ unsigned char Reserved9;
++} __attribute__((packed)) SCSI_MODE_SENSE_COMMAND;
++
++typedef struct{
++ unsigned char ModeDataLength;
++ unsigned char MediumTypeCode;
++ unsigned char Reserved1:4,
++ DPOFUA:1,
++ Reserved2:2,
++ WP:1;
++ unsigned char Reserved3;
++} __attribute__((packed)) MODE_PARAMETER_HEADER;
++
++typedef struct{
++ unsigned char PageCode:6,
++ Reserved1:1,
++ PS:1;
++ unsigned char PageLength;
++ unsigned char DCR:1,
++ Reserved2:1,
++ PER:1,
++ Reserved3:1,
++ RC:1,
++ Reserved4:1,
++ Reserved5:1,
++ AWRE:1;
++ unsigned char ReadRetryCount;
++ unsigned char Reserved6[4];
++ unsigned char WriteRetryCount;
++ unsigned char Reserved7[3];
++} __attribute__((packed)) READ_WRITE_ERROR_RECOVERY_PAGE;
++
++typedef struct{
++ unsigned char PageCode:6,
++ Reserved1:1,
++ PS:1;
++ unsigned char PageLength;
++ unsigned char TransferRate[2];
++ unsigned char NumberofHeads;
++ unsigned char SectorsperTrack;
++ unsigned char DataBytesperSector[2];
++ unsigned char NumberofCylinders[2];
++ unsigned char Reserved2[9];
++ unsigned char MotorOnDelay;
++ unsigned char MotorOffDelay;
++ unsigned char Reserved3[7];
++ unsigned char MediumRotationRate[2];
++ unsigned char Reserved4;
++ unsigned char Reserved5;
++} __attribute__((packed)) FLEXIBLE_DISK_PAGE;
++
++typedef struct{
++ unsigned char PageCode:6,
++ Reserved1:1,
++ PS:1;
++ unsigned char PageLength;
++ unsigned char Reserved2:6,
++ SRFP:1,
++ SFLP:1;
++ unsigned char TLUN:3,
++ Reserved3:3,
++ SML:1,
++ NCD:1;
++ unsigned char Reserved4[8];
++} __attribute__((packed)) REMOVABLE_BLOCK_ACCESS_CAPABILITIES_PAGE;
++
++typedef struct{
++ unsigned char PageCode:6,
++ Reserved1:1,
++ PS:1;
++ unsigned char PageLength;
++ unsigned char Reserved2;
++ unsigned char InactivityTimeMultiplier:4,
++ Reserved3:4;
++ unsigned char SWPP:1,
++ DISP:1,
++ Reserved4:6;
++ unsigned char Reserved5;
++ unsigned char Reserved6;
++ unsigned char Reserved7;
++} __attribute__((packed)) TIMER_AND_PROTECT_PAGE;
++
++typedef struct{
++ READ_WRITE_ERROR_RECOVERY_PAGE ReadWriteErrorRecoveryPage;
++ FLEXIBLE_DISK_PAGE FlexibleDiskPage;
++ REMOVABLE_BLOCK_ACCESS_CAPABILITIES_PAGE RemovableBlockAccessCapabilitiesPage;
++ TIMER_AND_PROTECT_PAGE TimerAndProtectPage;
++} __attribute__((packed)) MODE_ALL_PAGES;
++
++typedef struct{
++ MODE_PARAMETER_HEADER ModeParameterHeader;
++ union{
++ READ_WRITE_ERROR_RECOVERY_PAGE ReadWriteErrorRecoveryPage;
++ FLEXIBLE_DISK_PAGE FlexibleDiskPage;
++ REMOVABLE_BLOCK_ACCESS_CAPABILITIES_PAGE RemovableBlockAccessCapabilitiesPage;
++ TIMER_AND_PROTECT_PAGE TimerAndProtectPage;
++ MODE_ALL_PAGES ModeAllPages;
++ } __attribute__((packed)) ModePages;
++} __attribute__((packed)) SCSI_MODE_SENSE_DATA;
++
++/*
++ * TEST UNIT READY
++ */
++
++typedef struct{
++ unsigned char OperationCode;
++ unsigned char Reserved1:5,
++ LogicalUnitNumber:3;
++ unsigned char Reserved2;
++ unsigned char Reserved3;
++ unsigned char Reserved4;
++ unsigned char Reserved5;
++ unsigned char Reserved6;
++ unsigned char Reserved7;
++ unsigned char Reserved8;
++ unsigned char Reserved9;
++ unsigned char Reserved10;
++ unsigned char Reserved11;
++} __attribute__((packed)) SCSI_TEST_UNIT_READY_COMMAND;
++
++/*
++ * PREVENT-ALLOW MEDIUM REMOVAL
++ */
++
++typedef struct{
++ unsigned char OperationCode;
++ unsigned char Reserved1:5,
++ LogicalUnitNumber:3;
++ unsigned char Reserved2;
++ unsigned char Reserved3;
++ unsigned char Prevent:1,
++ Reserved4:7;
++ unsigned char Reserved5;
++ unsigned char Reserved6;
++ unsigned char Reserved7;
++ unsigned char Reserved8;
++ unsigned char Reserved9;
++ unsigned char Reserved10;
++ unsigned char Reserved11;
++} __attribute__((packed)) SCSI_PREVENT_ALLOW_MEDIUM_REMOVAL_COMMAND;
++
++/*
++ * START-STOP UNIT
++ */
++
++typedef struct{
++ unsigned char OperationCode;
++ unsigned char IMMED:1,
++ Reserved1:4,
++ LogicalUnitNumber:3;
++ unsigned char Reserved2;
++ unsigned char Reserved3;
++ unsigned char Start:1,
++ LoEj:1,
++ Reserved4:6;
++ unsigned char Reserved5;
++ unsigned char Reserved6;
++ unsigned char Reserved7;
++ unsigned char Reserved8;
++ unsigned char Reserved9;
++ unsigned char Reserved10;
++ unsigned char Reserved11;
++} __attribute__((packed)) SCSI_START_STOP_COMMAND;
++
++/*
++ * WRITE(10)
++ */
++
++typedef struct{
++ unsigned char OperationCode;
++ unsigned char RelAdr:1,
++ Reserved1:2,
++ FUA:1,
++ DPO:1,
++ LogicalUnitNumber:3;
++ unsigned char LogicalBlockAddress[4];
++ unsigned char Reserved2;
++ unsigned char TransferLength[2];
++ unsigned char Reserved3;
++ unsigned char Reserved4;
++ unsigned char Reserved5;
++} __attribute__((packed)) SCSI_WRITE_10_COMMAND;
++
++/*
++ * VERIFY
++ */
++
++typedef struct{
++ unsigned char OperationCode;
++ unsigned char RelAdr:1,
++ ByteChk:1,
++ Reserved1:1,
++ Reserved2:1,
++ DPO:1,
++ LogicalUnitNumber:3;
++ unsigned char LogicalBlockAddress[4];
++ unsigned char Reserved3;
++ unsigned char VerificationLength[2];
++ unsigned char Reserved4;
++ unsigned char Reserved5;
++ unsigned char Reserved6;
++} __attribute__((packed)) SCSI_VERIFY_COMMAND;
++
++/******************************************************************************
++** Global Function Prototype
++******************************************************************************/
++
++/* storage-fd.c */
++void storage_urb_send(struct usb_device_instance*, void*, int);
++
++/* storageproto.c */
++void storageproto_urb_analysis(struct urb*);
++int storageproto_device_open_check(void);
++void storageproto_device_close(void);
++void storageproto_usb_status_check(int);
++void storageproto_media_status_check(int);
++void storageproto_usb_reset_ind(void);
++ssize_t storageproto_proc_read(struct file*, char*, size_t, loff_t* pos);
++void storageproto_init(void);
++void storageproto_exit(void);
++
++#endif /* _STORAGEPROTO_H_ */
++
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/1764-1.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/1764-1.patch
new file mode 100644
index 0000000000..0b660f3521
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/1764-1.patch
@@ -0,0 +1,16 @@
+__arch_strncpy_from_user needs to be exported if you build the framebuffer console driver as a module.
+
+Cheers,
+
+Ian.
+
+--- linux-2.6-bkpxa.orig/arch/arm/kernel/armksyms.c 2004-02-27 10:35:29.000000000 +0000
++++ linux-2.6-bkpxa/arch/arm/kernel/armksyms.c 2004-02-27 14:55:02.000000000 +0000
+@@ -187,6 +187,7 @@
+ EXPORT_SYMBOL(__arch_copy_to_user);
+ EXPORT_SYMBOL(__arch_clear_user);
+ EXPORT_SYMBOL(__arch_strnlen_user);
++EXPORT_SYMBOL(__arch_strncpy_from_user);
+
+ /* consistent area handling */
+ EXPORT_SYMBOL(consistent_alloc);
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/CPAR050218.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/CPAR050218.patch
new file mode 100644
index 0000000000..a0b866219b
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/CPAR050218.patch
@@ -0,0 +1,422 @@
+--- 050125/include/asm-arm/proc-armv/ptrace.h Tue Jan 25 00:22:44 2005
++++ 050218/include/asm-arm/proc-armv/ptrace.h Thu Feb 17 16:13:54 2005
+@@ -40,6 +40,10 @@
+
+ struct pt_regs {
+ long uregs[18];
++#if defined(CONFIG_CPU_PXA27X)
++ long cpar;
++ long mmx[ 16*2 + 6 + 1 ];
++#endif
+ };
+
+ #define ARM_cpsr uregs[16]
+--- 050125/include/asm-arm/sigcontext.h Tue Jan 25 00:22:42 2005
++++ 050218/include/asm-arm/sigcontext.h Thu Feb 17 18:16:28 2005
+@@ -28,6 +28,10 @@
+ unsigned long arm_pc;
+ unsigned long arm_cpsr;
+ unsigned long fault_address;
++#if defined(CONFIG_CPU_PXA27X)
++ unsigned long arm_cpar;
++ unsigned long arm_mmx[ 16*2 + 6 + 1 ];
++#endif
+ };
+
+
+--- 050125/include/asm-arm/elf.h Tue Jan 25 00:54:49 2005
++++ 050218/include/asm-arm/elf.h Thu Feb 17 16:19:02 2005
+@@ -1,6 +1,8 @@
+ #ifndef __ASMARM_ELF_H
+ #define __ASMARM_ELF_H
+
++#include <linux/config.h>
++
+ /*
+ * ELF register definitions..
+ */
+@@ -14,6 +16,7 @@
+
+ #define EM_ARM 40
+ #define EF_ARM_APCS26 0x08
++#define EF_ARM_SOFT_FLOAT 0x200
+
+ #define ELF_NGREG (sizeof (struct pt_regs) / sizeof(elf_greg_t))
+ typedef elf_greg_t elf_gregset_t[ELF_NGREG];
+--- 050125/arch/arm/kernel/entry-armv.S Tue Jan 25 00:21:45 2005
++++ 050218/arch/arm/kernel/entry-armv.S Fri Feb 18 07:29:34 2005
+@@ -271,7 +271,7 @@
+ tst \irqstat, #IRQ_MASK_DOORBELLHOST
+ movne \irqnr, #IRQ_DOORBELLHOST
+ bne 1001f
+-
++
+ tst \irqstat, #IRQ_MASK_I2OINPOST
+ movne \irqnr, #IRQ_I2OINPOST
+ bne 1001f
+@@ -494,12 +494,12 @@
+
+ #elif defined(CONFIG_ARCH_L7200)
+ #include <asm/hardware.h>
+-
++
+ .equ irq_base_addr, IO_BASE_2
+
+ .macro disable_fiq
+ .endm
+-
++
+ .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
+ mov \irqstat, #irq_base_addr @ Virt addr IRQ regs
+ add \irqstat, \irqstat, #0x00001000 @ Status reg
+@@ -589,7 +589,7 @@
+ .endm
+
+ .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
+-
++
+ /* Read all interrupts pending... */
+ ldr \irqnr, =IO_ADDRESS(PLAT_PERIPHERAL_BASE) + OMAHA_INTPND
+ ldr \irqstat, [\irqnr] /* INTPND */
+@@ -607,7 +607,7 @@
+ .endm
+
+ .macro irq_prio_table
+- .endm
++ .endm
+
+ #elif defined(CONFIG_ARCH_CLPS711X)
+
+@@ -654,23 +654,23 @@
+
+ .macro irq_prio_table
+ .endm
+-
++
+ #elif defined (CONFIG_ARCH_CAMELOT)
+ #include <asm/arch/platform.h>
+ #undef IRQ_MODE /* same name defined in asm/proc/ptrace.h */
+ #include <asm/arch/int_ctrl00.h>
+-
++
+ .macro disable_fiq
+ .endm
+
+ .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
+-
++
+ ldr \irqstat, =INT_ID(IO_ADDRESS(EXC_INT_CTRL00_BASE))
+- ldr \irqnr,[\irqstat]
++ ldr \irqnr,[\irqstat]
+ cmp \irqnr,#0
+ subne \irqnr,\irqnr,#1
+
+-
++
+ .endm
+
+ .macro irq_prio_table
+@@ -910,7 +910,7 @@
+ mov pc, r7 @ check, if this is a relevant code
+ cmp r0, #0 @ check return value
+ beq 1f @ else let linux do what it has to do
+-2:
++2:
+ #endif
+ #ifndef CONFIG_KGDB
+ adrsvc al, r9, 1f @ r9 = normal FP return
+@@ -977,6 +977,9 @@
+ stmia r5, {r2 - r4} @ Save USR pc, cpsr, old_r0
+ stmdb r5, {sp, lr}^
+ alignment_trap r7, r7, __temp_abt
++#ifdef CONFIG_CPU_PXA27X
++ save_user_mmx
++#endif
+ zero_fp
+ mov r0, r2 @ remove once everyones in sync
+ #ifdef MULTI_CPU
+@@ -1001,6 +1004,9 @@
+ stmia r8, {r5 - r7} @ save pc, psr, old_r0
+ stmdb r8, {sp, lr}^
+ alignment_trap r4, r7, __temp_irq
++#ifdef CONFIG_CPU_PXA27X
++ save_user_mmx
++#endif
+ zero_fp
+ get_current_task tsk
+ #ifdef CONFIG_PREEMPT
+@@ -1039,6 +1045,9 @@
+ stmia r8, {r5 - r7} @ Save USR pc, cpsr, old_r0
+ stmdb r8, {sp, lr}^ @ Save user sp, lr
+ alignment_trap r4, r7, __temp_und
++#ifdef CONFIG_CPU_PXA27X
++ save_user_mmx
++#endif
+ zero_fp
+ tst r6, #T_BIT @ Thumb mode
+ bne fpundefinstr
+@@ -1068,6 +1077,9 @@
+ stmia r8, {r5 - r7} @ Save USR pc, cpsr, old_r0
+ stmdb r8, {sp, lr}^ @ Save sp_usr lr_usr
+ alignment_trap r4, r7, __temp_abt
++#ifdef CONFIG_CPU_PXA27X
++ save_user_mmx
++#endif
+ zero_fp
+ mov r0, #MODE_SVC
+ msr cpsr_c, r0 @ Enable interrupts
+@@ -1394,7 +1406,7 @@
+ stmfd sp!, {r4, r5}
+ #endif
+ mrc p15, 0, r2, c3, c0
+- str r2, [sp, #-4]!
++ str r2, [sp, #-4]!
+
+ ldr r2, [r0]
+ str sp, [r2]
+--- 050125/arch/arm/kernel/entry-header.S Tue Jan 25 00:21:45 2005
++++ 050218/arch/arm/kernel/entry-header.S Thu Feb 17 20:15:24 2005
+@@ -42,9 +42,44 @@
+ @ Stack format (ensured by USER_* and SVC_*)
+ @
+ #ifdef CONFIG_CPU_32
+-#define S_FRAME_SIZE 72
+-#define S_OLD_R0 68
+-#define S_PSR 64
++#ifdef CONFIG_CPU_PXA27X
++ #define S_MMX 80
++
++ #define MMX_WR0 (0x00)
++ #define MMX_WR1 (0x08)
++ #define MMX_WR2 (0x10)
++ #define MMX_WR3 (0x18)
++ #define MMX_WR4 (0x20)
++ #define MMX_WR5 (0x28)
++ #define MMX_WR6 (0x30)
++ #define MMX_WR7 (0x38)
++ #define MMX_WR8 (0x40)
++ #define MMX_WR9 (0x48)
++ #define MMX_WR10 (0x50)
++ #define MMX_WR11 (0x58)
++ #define MMX_WR12 (0x60)
++ #define MMX_WR13 (0x68)
++ #define MMX_WR14 (0x70)
++ #define MMX_WR15 (0x78)
++ #define MMX_WCSSF (0x80)
++ #define MMX_WCASF (0x84)
++ #define MMX_WCGR0 (0x88)
++ #define MMX_WCGR1 (0x8C)
++ #define MMX_WCGR2 (0x90)
++ #define MMX_WCGR3 (0x94)
++
++ #define MMX_SIZE (0x98)
++
++ #define S_FRAME_SIZE (76+4+MMX_SIZE)
++
++ #define S_CPAR 72
++ #define S_OLD_R0 68
++ #define S_PSR 64
++#else
++ #define S_FRAME_SIZE 72
++ #define S_OLD_R0 68
++ #define S_PSR 64
++#endif
+ #else
+ #define S_FRAME_SIZE 68
+ #define S_OLD_R0 64
+@@ -88,6 +123,43 @@
+ set_cpsr_c \temp, #MODE_SVC
+ .endm
+
++#ifdef CONFIG_CPU_PXA27X
++ .macro save_user_mmx
++ mrc p15, 0, r0, c15, c1, 0
++ str r0, [sp, #S_CPAR] @ Save CPAR
++ cmp r0, #3
++ bne 1f
++ add r0,sp,#S_MMX @ StoreMMX
++ bic r0, r0, #7
++ wstrw wCSSF, [r0, #MMX_WCSSF]
++ wstrw wCASF, [r0, #MMX_WCASF]
++ wstrw wCGR0, [r0, #MMX_WCGR0]
++ wstrw wCGR1, [r0, #MMX_WCGR1]
++ wstrw wCGR2, [r0, #MMX_WCGR2]
++ wstrw wCGR3, [r0, #MMX_WCGR3]
++ wstrd wR0, [r0, #MMX_WR0]
++ wstrd wR1, [r0, #MMX_WR1]
++ wstrd wR2, [r0, #MMX_WR2]
++ wstrd wR3, [r0, #MMX_WR3]
++ wstrd wR4, [r0, #MMX_WR4]
++ wstrd wR5, [r0, #MMX_WR5]
++ wstrd wR6, [r0, #MMX_WR6]
++ wstrd wR7, [r0, #MMX_WR7]
++ wstrd wR8, [r0, #MMX_WR8]
++ wstrd wR9, [r0, #MMX_WR9]
++ wstrd wR10, [r0, #MMX_WR10]
++ wstrd wR11, [r0, #MMX_WR11]
++ wstrd wR12, [r0, #MMX_WR12]
++ wstrd wR13, [r0, #MMX_WR13]
++ wstrd wR14, [r0, #MMX_WR14]
++ wstrd wR15, [r0, #MMX_WR15]
++1:
++ mov r0, #1
++ mcr p15, 0, r0, c15, c1, 0 @ CP0 Only.
++ ldr r0, [sp] @ Restore R0
++ .endm
++#endif
++
+ .macro save_user_regs
+ sub sp, sp, #S_FRAME_SIZE
+ stmia sp, {r0 - r12} @ Calling r0 - r12
+@@ -97,12 +169,44 @@
+ str lr, [sp, #S_PC] @ Save calling PC
+ str r8, [sp, #S_PSR] @ Save CPSR
+ str r0, [sp, #S_OLD_R0] @ Save OLD_R0
++ save_user_mmx
+ .endm
+
+ /*
+ * Must be called with IRQs already disabled.
+ */
+ .macro restore_user_regs
++#ifdef CONFIG_CPU_PXA27X
++ ldr r1, [sp, #S_CPAR]
++ mcr p15, 0, r1, c15, c1, 0
++ cmp r1, #3
++ bne 2f
++ add r1,sp,#S_MMX @ LoadMMX
++ bic r1, r1, #7
++ wldrd wR0, [r1, #MMX_WR0]
++ wldrd wR1, [r1, #MMX_WR1]
++ wldrd wR2, [r1, #MMX_WR2]
++ wldrd wR3, [r1, #MMX_WR3]
++ wldrd wR4, [r1, #MMX_WR4]
++ wldrd wR5, [r1, #MMX_WR5]
++ wldrd wR6, [r1, #MMX_WR6]
++ wldrd wR7, [r1, #MMX_WR7]
++ wldrd wR8, [r1, #MMX_WR8]
++ wldrd wR9, [r1, #MMX_WR9]
++ wldrd wR10, [r1, #MMX_WR10]
++ wldrd wR11, [r1, #MMX_WR11]
++ wldrd wR12, [r1, #MMX_WR12]
++ wldrd wR13, [r1, #MMX_WR13]
++ wldrd wR14, [r1, #MMX_WR14]
++ wldrd wR15, [r1, #MMX_WR15]
++ wldrw wCSSF, [r1, #MMX_WCSSF]
++ wldrw wCASF, [r1, #MMX_WCASF]
++ wldrw wCGR0, [r1, #MMX_WCGR0]
++ wldrw wCGR1, [r1, #MMX_WCGR1]
++ wldrw wCGR2, [r1, #MMX_WCGR2]
++ wldrw wCGR3, [r1, #MMX_WCGR3]
++2:
++#endif
+ ldr r1, [sp, #S_PSR] @ Get calling cpsr
+ ldr lr, [sp, #S_PC]! @ Get PC
+ msr spsr, r1 @ save in spsr_svc
+@@ -116,6 +220,37 @@
+ * Must be called with IRQs already disabled.
+ */
+ .macro fast_restore_user_regs
++#ifdef CONFIG_CPU_PXA27X
++ ldr r1, [sp, #S_OFF + S_CPAR]
++ mcr p15, 0, r1, c15, c1, 0
++ cmp r1, #3
++ bne 3f
++ add r1,sp,#S_OFF + S_MMX @ LoadMMX
++ bic r1, r1, #7
++ wldrd wR0, [r1, #MMX_WR0]
++ wldrd wR1, [r1, #MMX_WR1]
++ wldrd wR2, [r1, #MMX_WR2]
++ wldrd wR3, [r1, #MMX_WR3]
++ wldrd wR4, [r1, #MMX_WR4]
++ wldrd wR5, [r1, #MMX_WR5]
++ wldrd wR6, [r1, #MMX_WR6]
++ wldrd wR7, [r1, #MMX_WR7]
++ wldrd wR8, [r1, #MMX_WR8]
++ wldrd wR9, [r1, #MMX_WR9]
++ wldrd wR10, [r1, #MMX_WR10]
++ wldrd wR11, [r1, #MMX_WR11]
++ wldrd wR12, [r1, #MMX_WR12]
++ wldrd wR13, [r1, #MMX_WR13]
++ wldrd wR14, [r1, #MMX_WR14]
++ wldrd wR15, [r1, #MMX_WR15]
++ wldrw wCSSF, [r1, #MMX_WCSSF]
++ wldrw wCASF, [r1, #MMX_WCASF]
++ wldrw wCGR0, [r1, #MMX_WCGR0]
++ wldrw wCGR1, [r1, #MMX_WCGR1]
++ wldrw wCGR2, [r1, #MMX_WCGR2]
++ wldrw wCGR3, [r1, #MMX_WCGR3]
++3:
++#endif
+ ldr r1, [sp, #S_OFF + S_PSR] @ get calling cpsr
+ ldr lr, [sp, #S_OFF + S_PC]! @ get pc
+ msr spsr, r1 @ save in spsr_svc
+--- 050125/arch/arm/kernel/signal.c Tue Jan 25 00:21:45 2005
++++ 050218/arch/arm/kernel/signal.c Thu Feb 17 18:22:10 2005
+@@ -198,6 +198,13 @@
+ {
+ int err = 0;
+
++#if defined(CONFIG_CPU_PXA27X)
++ int _m;
++ __get_user_error(regs->cpar, &sc->arm_cpar, err);
++ for( _m=0; _m<16*2 + 6 + 1; ++_m ) {
++ __get_user_error(regs->mmx[ _m ], &sc->arm_mmx[ _m ], err);
++ }
++#endif
+ __get_user_error(regs->ARM_r0, &sc->arm_r0, err);
+ __get_user_error(regs->ARM_r1, &sc->arm_r1, err);
+ __get_user_error(regs->ARM_r2, &sc->arm_r2, err);
+@@ -312,6 +319,13 @@
+ {
+ int err = 0;
+
++#if defined(CONFIG_CPU_PXA27X)
++ int _m;
++ __put_user_error(regs->cpar, &sc->arm_cpar, err);
++ for( _m=0; _m<16*2 + 6 + 1; ++_m ) {
++ __put_user_error(regs->mmx[ _m ], &sc->arm_mmx[ _m ], err);
++ }
++#endif
+ __put_user_error(regs->ARM_r0, &sc->arm_r0, err);
+ __put_user_error(regs->ARM_r1, &sc->arm_r1, err);
+ __put_user_error(regs->ARM_r2, &sc->arm_r2, err);
+--- 050125/arch/arm/Makefile Tue Jan 25 00:21:44 2005
++++ 050218/arch/arm/Makefile Thu Feb 17 09:38:40 2005
+@@ -69,7 +69,8 @@
+
+ ifeq ($(CONFIG_ARCH_SHARP_SL),y)
+ CROSS_COMPILE = arm-linux-
+-arch-y :=-D__LINUX_ARM_ARCH__=4 -march=armv4 -Wa,-mxscale
++#arch-y :=-D__LINUX_ARM_ARCH__=4 -march=armv4 -Wa,-mxscale
++arch-y :=-D__LINUX_ARM_ARCH__=4 -Wa,-mcpu=iwmmxt
+ tune-y :=-mtune=strongarm
+ endif
+
+@@ -212,7 +213,7 @@
+ MACHINE = omaha
+ endif
+
+-ifeq ($(CONFIG_XIP_KERNEL),y)
++ifeq ($(CONFIG_XIP_KERNEL),y)
+ DATAADDR := $(TEXTADDR)
+ # Replace phys addr with virt addr while keeping offset from base.
+ # Virt base addr also defined in include/asm-arm/arch-*/hardware.h
+--- 050125/fs/binfmt_elf.c Tue Jan 25 00:22:37 2005
++++ 050218/fs/binfmt_elf.c Thu Feb 17 08:52:54 2005
+@@ -815,6 +815,15 @@
+ ELF_PLAT_INIT(regs);
+ #endif
+
++#if defined(CONFIG_CPU_PXA27X)
++ if( elf_ex.e_flags & EF_ARM_SOFT_FLOAT ) {
++ regs->cpar = 0x03; //CP0 CP1 Used.
++ }
++ else {
++ regs->cpar = 0x01; //CP0 Only.
++ }
++#endif
++
+ start_thread(regs, elf_entry, bprm->p);
+ if (current->ptrace & PT_PTRACED)
+ send_sig(SIGTRAP, current, 0);
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P01-C3000-clockup_050221.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P01-C3000-clockup_050221.patch
new file mode 100644
index 0000000000..d193f23733
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P01-C3000-clockup_050221.patch
@@ -0,0 +1,202 @@
+diff -Nur c3000_org/linux/arch/arm/config.in c3000_work/linux/arch/arm/config.in
+--- c3000_org/linux/arch/arm/config.in 2004-08-21 09:48:07.000000000 +0900
++++ c3000_work/linux/arch/arm/config.in 2005-02-21 21:41:40.000000000 +0900
+@@ -195,7 +195,7 @@
+ dep_bool ' SHARP Spitz' CONFIG_ARCH_PXA_SPITZ $CONFIG_ARCH_PXA_BOXER
+ dep_bool ' Using Trial 0' CONFIG_SPITZ_TR0 $CONFIG_ARCH_PXA_SPITZ
+ dep_bool ' Using Trial 0.5' CONFIG_SPITZ_TR0_5 $CONFIG_ARCH_PXA_SPITZ
+-dep_bool ' SHARP Tosa' CONFIG_ARCH_PXA_TOSA
++dep_bool ' SHARP Tosa' CONFIG_ARCH_PXA_TOSA $CONFIG_ARCH_PXA
+ dep_bool ' SHARP Tosa skipping' CONFIG_ARCH_PXA_TOSA_SKIP $CONFIG_ARCH_PXA_TOSA
+
+ if [ "$CONFIG_SABINAL_DISCOVERY" = "y" -o "$CONFIG_ARCH_PXA_POODLE" = "y" -o \
+@@ -475,6 +475,9 @@
+ if [ "$CONFIG_ARCH_PXA_SPITZ" = "y" ]; then
+ define_bool CONFIG_CPU_PXA27X y
+ fi
++ if [ "$CONFIG_ARCH_PXA_SPITZ" = "y" ]; then
++ bool 'Use clock change(cccr_change) enable (EXPERIMENTAL)' CONFIG_SL_CCCR_CHANGE
++ fi
+ if [ "$CONFIG_ARCH_SHARP_SL" = "y" ]; then
+ define_bool CONFIG_BATT y
+ fi
+@@ -557,7 +560,7 @@
+ # bool ' Real-Time Scheduling support' CONFIG_RTSCHED
+ define_bool CONFIG_RTSCHED y
+ if [ "$CONFIG_RTSCHED" = "y" ]; then
+- int ' MAX PTHREAD (int)' CONFIG_RTH_PTHREAD_MAX 128
++ int ' MAX PTHREAD (int)' CONFIG_RTH_PTHREAD_MAX 128
+ hex ' RT MEMORY SIZE (hex)' CONFIG_RT_MEM_SIZE 80000
+ bool ' Real-Time Calibrate support' CONFIG_RTHAL_CALIBRATION
+ if [ "$CONFIG_RTHAL_CALIBRATION" != "y" ]; then
+@@ -615,7 +618,7 @@
+ hex 'Compressed ROM boot loader BSS address' CONFIG_ZBOOT_ROM_BSS 0
+ else
+ define_hex CONFIG_ZBOOT_ROM_TEXT 0
+- define_hex CONFIG_ZBOOT_ROM_BSS 0
++ define_hex CONFIG_ZBOOT_ROM_BSS 0
+ fi
+
+ if [ "$CONFIG_ARCH_SA1100" = "y" -o \
+diff -Nur c3000_org/linux/arch/arm/mach-pxa/sharpsl_apm.c c3000_work/linux/arch/arm/mach-pxa/sharpsl_apm.c
+--- c3000_org/linux/arch/arm/mach-pxa/sharpsl_apm.c 2004-11-16 15:31:06.000000000 +0900
++++ c3000_work/linux/arch/arm/mach-pxa/sharpsl_apm.c 2005-02-21 21:44:13.000000000 +0900
+@@ -130,6 +130,11 @@
+ extern int HWR_flag;
+ #endif
+
++#if defined(CONFIG_SL_CCCR_CHANGE)
++extern unsigned int CCCR_ValAdr_high;
++struct proc_dir_entry *proc_zaurus;
++#endif
++
+ #if defined(CONFIG_SABINAL_DISCOVERY)
+ #define SHARPSL_AC_LINE_STATUS (( ASIC3_GPIO_PSTS_D & AC_IN )? APM_AC_OFFLINE : APM_AC_ONLINE)
+ #define BACKPACK_IN_DETECT() ( ASIC3_GPIO_PSTS_D & BACKPACK_DETECT ) /* 0: exist , 1: not in */
+@@ -974,6 +979,63 @@
+
+ EXPORT_SYMBOL(lock_FCS);
+
++#if defined(CONFIG_SL_CCCR_CHANGE)
++
++void write_cccr(int cccr)
++{
++ printk("Change CCCR = %x.\n",cccr);
++ CCCR_ValAdr_high = cccr;
++ sharpsl_chg_freq = cccr;
++ cpu_xscale_sl_change_speed_high();
++ cccr_reg = CCCR;
++ printk("Changed CCCR = %x.\n",cccr_reg);
++ return;
++}
++
++int read_cccr(void)
++{
++ return CCCR_ValAdr_high;
++}
++
++static ssize_t cccr_change_read_params(struct file *file, char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ char outputbuf[32];
++ int count;
++
++ if (*ppos>0) /* Assume reading completed in previous read*/
++ return 0;
++ count = sprintf(outputbuf, "0x%08X\n", read_cccr());
++ count++;
++ *ppos += count;
++ if (count>nbytes)/* Assume output can be read at one time */
++ return -EINVAL;
++ if (copy_to_user(buf, outputbuf, count+1))
++ return -EFAULT;
++ return count;
++}
++
++static ssize_t cccr_change_write_params(struct file *file, const char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ unsigned int param=0;
++
++ sscanf(buf,"%x",&param);
++ if (param) {
++ write_cccr(param);
++ }
++ return nbytes;
++}
++
++static struct file_operations proc_cccr_change_params_operations = {
++ read:cccr_change_read_params,
++ write:cccr_change_write_params,
++};
++
++EXPORT_SYMBOL(read_cccr);
++EXPORT_SYMBOL(write_cccr);
++#endif
++
+ #ifdef CONFIG_APM_CPU_IDLE
+ #ifdef SHARPSL_NEW_IDLE
+ static int save_icmr;
+@@ -2786,6 +2848,7 @@
+ struct proc_dir_entry *apm_proc;
+ struct proc_dir_entry *lock_fcs_proc;
+ struct proc_dir_entry *power_mode_proc;
++ struct proc_dir_entry *cccr_change_proc;
+
+ apm_info.bios = apm_bios_info;
+ if (apm_info.bios.version == 0) {
+@@ -2822,6 +2885,9 @@
+ printk("FCS : CCCR = %x\n",cccr_reg);
+ #if defined(CONFIG_CPU_PXA27X)
+ sharpsl_chg_freq = cccr_reg;
++#if defined(CONFIG_SL_CCCR_CHANGE)
++ CCCR_ValAdr_high = sharpsl_chg_freq;
++#endif
+ #endif
+ #endif
+
+@@ -2902,6 +2968,19 @@
+ power_mode_proc->proc_fops = &proc_power_mode_params_operations;
+ }
+
++#if defined(CONFIG_SL_CCCR_CHANGE)
++ proc_zaurus = proc_mkdir("zaurus", NULL);
++ if (proc_zaurus == NULL) {
++ unregister_chrdev(228, "zaurus");
++ printk(KERN_ERR "proc: can't create /proc/zaurus\n");
++ return -ENOMEM;
++ }
++
++ cccr_change_proc = create_proc_entry("zaurus/CCCR", 0, NULL);
++ if (cccr_change_proc) {
++ cccr_change_proc->proc_fops = &proc_cccr_change_params_operations;
++ }
++#endif
+ kernel_thread(apm_thread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
+
+ #if defined(CONFIG_SABINAL_DISCOVERY) || defined(CONFIG_ARCH_PXA_TOSA)
+diff -Nur c3000_org/linux/arch/arm/mach-pxa/sharpsl_suspend.S c3000_work/linux/arch/arm/mach-pxa/sharpsl_suspend.S
+--- c3000_org/linux/arch/arm/mach-pxa/sharpsl_suspend.S 2004-11-09 14:30:36.000000000 +0900
++++ c3000_work/linux/arch/arm/mach-pxa/sharpsl_suspend.S 2005-02-21 21:41:40.000000000 +0900
+@@ -64,7 +64,7 @@
+
+ sleep_param: .word 0 @ virtual address of parameter array
+ sleep_param_p: .word 0 @ physical address of parameter array
+-
++
+ IC_BASE: .word io_p2v(0x40D00000)
+
+
+@@ -1109,6 +1109,9 @@
+
+ #else /* CONFIG_CPU_PXA27X */
+
++#if defined(CONFIG_SL_CCCR_CHANGE)
++ .global CCCR_ValAdr_high
++#endif
+ CCCR_ValAdr_high: .word 0x02000210
+ MSC0_ValAdr_high: .word 0x7ff02DD8
+ MSC1_ValAdr_high: .word 0x7ff434D4
+@@ -1305,8 +1308,12 @@
+ stmfd sp!, {r0, r1, r2, r3, r4, lr}
+
+ ldr r0, CMR_BASE
++#if defined(CONFIG_SL_CCCR_CHANGE)
++ ldr r1, CCCR_ValAdr_high
++#else
+ ldr r1, CCCR_ValAdr_208
+- str r1, [r0, #CMR_CCCR]
++#endif
++ str r1, [r0, #CMR_CCCR]
+
+ ldr r0, MD_BASE
+ ldr r4, MDREFR_ValAdr_208
+@@ -1333,7 +1340,7 @@
+
+ .align 5
+ .text
+-
++
+ ENTRY(pxa27x_get_ccnt)
+ mrc p14, 0, r0, c1, c1, 0
+ mov pc, lr @ return
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P02++050226.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P02++050226.patch
new file mode 100644
index 0000000000..d9c94e5ac1
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P02++050226.patch
@@ -0,0 +1,221 @@
+--- BASE/arch/arm/mach-pxa/pxa27x_power.c Sat Feb 26 01:35:47 2005
++++ 050226/arch/arm/mach-pxa/pxa27x_power.c Sat Feb 26 02:01:45 2005
+@@ -152,6 +152,10 @@
+
+ #if defined(CONFIG_CHANGE_CORE_VOLT)
+ static unsigned char current_core_voltage = 0x1a;
++static unsigned char core_voltage_value = 0;
++extern unsigned int CCCR_ValAdr_high;
++#include <linux/sem.h>
++static DECLARE_MUTEX(core_voltage_sem);
+ #endif
+
+ void PrintParamTable(void);
+@@ -397,9 +401,9 @@
+ }
+ #endif //DEBUG
+
++#if !defined(CONFIG_CHANGE_CORE_VOLT)
+ static void cpu_xscale_voltage_low(void)
+ {
+-
+ pwr_i2c_open();
+ pwr_i2c_write( 0x0c, 0x13 ); // 1.00V - SlewRate 1
+ //pwr_i2c_write( 0x0c, 0x12 ); // 0.95V - SlewRate 1
+@@ -409,38 +413,90 @@
+ static void cpu_xscale_voltage_high(void)
+ {
+ pwr_i2c_open();
+-#if defined(CONFIG_CHANGE_CORE_VOLT)
+- pwr_i2c_write( 0x0c, current_core_voltage );
+- pwr_i2c_close();
+- printk("current voltage %x\n", current_core_voltage );
+-#else
+ pwr_i2c_write( 0x0c, 0x1a ); // 1.35V - SlewRate 1
+ pwr_i2c_close();
+-#endif
+ }
++#endif
+
+ #if defined(CONFIG_CHANGE_CORE_VOLT)
++static void cpu_xscale_voltage_change(unsigned char value)
++{
++ if(core_voltage_value!=value) {
++ core_voltage_value = value;
++ pwr_i2c_open();
++ pwr_i2c_write( 0x0c, current_core_voltage );
++ pwr_i2c_close();
++ }
++}
++
++void cpu_xscale_voltage_high(void)
++{
++ down(&core_voltage_sem);
++ cpu_xscale_voltage_change(current_core_voltage);
++ up(&core_voltage_sem);
++}
+ void cpu_xscale_voltage_write(unsigned char value)
+ {
+ if (value > 0x10 )
+ return;
+ value += 0x10;
++ down(&core_voltage_sem);
++ core_voltage_value = value;
+ pwr_i2c_open();
+ pwr_i2c_write( 0x0c, value );
+ pwr_i2c_close();
+ current_core_voltage = value;
++ up(&core_voltage_sem);
+ printk("current voltage %x\n", current_core_voltage );
+
+ }
++
++void cpu_xscale_sl_change_speed_high(void)
++{
++ down(&core_voltage_sem);
++ cpu_xscale_voltage_change(current_core_voltage);
++ _cpu_xscale_sl_change_speed_high();
++ up(&core_voltage_sem);
++}
++void cpu_xscale_sl_change_speed_low(void)
++{
++ down(&core_voltage_sem);
++ _cpu_xscale_sl_change_speed_low();
++ cpu_xscale_voltage_change(0x13);
++ up(&core_voltage_sem);
++}
++void cpu_xscale_sl_change_speed_91(void)
++{
++ down(&core_voltage_sem);
++ _cpu_xscale_sl_change_speed_91();
++ core_voltage_value = 0x13;
++ pwr_i2c_open();
++ pwr_i2c_write( 0x0c, core_voltage_value );
++ pwr_i2c_close();
++ up(&core_voltage_sem);
++}
++void cpu_xscale_sl_change_speed_208(void)
++{
++ down(&core_voltage_sem);
++ core_voltage_value = current_core_voltage;
++ pwr_i2c_open();
++ pwr_i2c_write( 0x0c, core_voltage_value );
++ pwr_i2c_close();
++ _cpu_xscale_sl_change_speed_208();
++ up(&core_voltage_sem);
++}
++
+ #endif
+
+ #if defined(DEBUG) || defined(CONFIG_CHANGE_CORE_VOLT)
+ unsigned char cpu_xscale_voltage_read(void)
+ {
+ unsigned char value=0xff;
++ down(&core_voltage_sem);
+ pwr_i2c_open();
+ pwr_i2c_read( 0x0c, &value );
+ pwr_i2c_close();
++ up(&core_voltage_sem);
+ return value;
+ }
+ #endif
+@@ -520,7 +576,7 @@
+ sys_ctx.oier = OIER;
+
+ #if defined(CONFIG_CPU_PXA27X)
+- if ( CCCR != 0x02000210 ) {
++ if ( CCCR != CCCR_ValAdr_high ) { //0x02000210 ) {
+ cpu_xscale_sl_change_speed_high();
+ }
+ #endif
+@@ -571,8 +627,10 @@
+ cpu_xscale_sl_disable_fastbus_mode();
+ udelay(1);
+ cpu_xscale_sl_change_speed_91();
++#if !defined(CONFIG_CHANGE_CORE_VOLT)
+ cpu_xscale_voltage_low();
+ #endif
++#endif
+
+ /* Scoop suspend */
+ sharpsl_check_scoop_reg();
+@@ -790,7 +848,9 @@
+ SCP2_REG_GPWR = sys_ctx.scp2_gpwr;
+
+ #if defined(PXA27X_SUSPEND)
++#if !defined(CONFIG_CHANGE_CORE_VOLT)
+ cpu_xscale_voltage_high();
++#endif
+ cpu_xscale_sl_change_speed_208();
+ udelay(1);
+ cpu_xscale_sl_enable_fastbus_mode();
+--- BASE/arch/arm/mach-pxa/sharpsl_apm.c Sat Feb 26 01:35:52 2005
++++ 050226/arch/arm/mach-pxa/sharpsl_apm.c Sat Feb 26 01:54:16 2005
+@@ -143,6 +143,7 @@
+ #if defined(CONFIG_CHANGE_CORE_VOLT)
+ extern unsigned char cpu_xscale_voltage_read(void);
+ extern void cpu_xscale_voltage_write(unsigned char);
++extern void cpu_xscale_voltage_high(void);
+ #endif
+
+ #if defined(CONFIG_SABINAL_DISCOVERY)
+@@ -1389,6 +1390,9 @@
+
+ #if defined(CONFIG_CPU_PXA27X)
+ #if defined(CONFIG_FB_SHARPSL_PXA)
++#if defined(CONFIG_CHANGE_CORE_VOLT)
++ cpu_xscale_voltage_high();
++#endif
+ while (1) {
+ if (!(LCCR0 & 0x1) || (GPLR(GPIO74_LCD_FCLK) &
+ GPIO_bit(GPIO74_LCD_FCLK)))
+--- BASE/arch/arm/mach-pxa/sharpsl_suspend.S Sat Feb 26 01:35:42 2005
++++ 050226/arch/arm/mach-pxa/sharpsl_suspend.S Sat Feb 26 01:54:16 2005
+@@ -1119,7 +1119,11 @@
+ MDREFR_ValAdr_high_pre: .word 0x001BC00B
+ MDREFR_ValAdr_high: .word 0x001BC030
+
++#if defined(CONFIG_CHANGE_CORE_VOLT)
++ENTRY(_cpu_xscale_sl_change_speed_high)
++#else
+ ENTRY(cpu_xscale_sl_change_speed_high)
++#endif
+ stmfd sp!, {r0, r1, r2, r3, r4, lr}
+
+ ldr r0, CMR_BASE
+@@ -1168,7 +1172,11 @@
+ @MDREFR_ValAdr_low: .word 0x0019C017
+ MDREFR_ValAdr_low: .word 0x001BC017
+
++#if defined(CONFIG_CHANGE_CORE_VOLT)
++ENTRY(_cpu_xscale_sl_change_speed_low)
++#else
+ ENTRY(cpu_xscale_sl_change_speed_low)
++#endif
+ stmfd sp!, {r0, r1, r2, r3, r4, lr}
+
+ ldr r0, CMR_BASE
+@@ -1261,7 +1269,11 @@
+ MDREFR_ValAdr_91_pre: .word 0x001BC00B
+ MDREFR_ValAdr_91: .word 0x001BC013
+
++#if defined(CONFIG_CHANGE_CORE_VOLT)
++ENTRY(_cpu_xscale_sl_change_speed_91)
++#else
+ ENTRY(cpu_xscale_sl_change_speed_91)
++#endif
+ stmfd sp!, {r0, r1, r2, r3, r4, lr}
+
+ ldr r0, CMR_BASE
+@@ -1304,7 +1316,11 @@
+ MSC2_ValAdr_208: .word 0x7FF034D4
+ MDREFR_ValAdr_208: .word 0x001BC00B
+
++#if defined(CONFIG_CHANGE_CORE_VOLT)
++ENTRY(_cpu_xscale_sl_change_speed_208)
++#else
+ ENTRY(cpu_xscale_sl_change_speed_208)
++#endif
+ stmfd sp!, {r0, r1, r2, r3, r4, lr}
+
+ ldr r0, CMR_BASE
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P02-C3000-voltage_050221.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P02-C3000-voltage_050221.patch
new file mode 100644
index 0000000000..1663304aae
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P02-C3000-voltage_050221.patch
@@ -0,0 +1,179 @@
+diff -Nur c3000_pre/linux/arch/arm/config.in c3000_work/linux/arch/arm/config.in
+--- c3000_pre/linux/arch/arm/config.in 2005-02-21 21:41:40.000000000 +0900
++++ c3000_work/linux/arch/arm/config.in 2005-02-21 22:25:37.000000000 +0900
+@@ -478,6 +478,9 @@
+ if [ "$CONFIG_ARCH_PXA_SPITZ" = "y" ]; then
+ bool 'Use clock change(cccr_change) enable (EXPERIMENTAL)' CONFIG_SL_CCCR_CHANGE
+ fi
++ if [ "$CONFIG_SL_CCCR_CHANGE" = "y" ]; then
++ bool 'Core voltage change enable (EXPERIMENTAL)' CONFIG_CHANGE_CORE_VOLT
++ fi
+ if [ "$CONFIG_ARCH_SHARP_SL" = "y" ]; then
+ define_bool CONFIG_BATT y
+ fi
+diff -Nur c3000_pre/linux/arch/arm/mach-pxa/pxa27x_power.c c3000_work/linux/arch/arm/mach-pxa/pxa27x_power.c
+--- c3000_pre/linux/arch/arm/mach-pxa/pxa27x_power.c 2004-11-04 14:13:54.000000000 +0900
++++ c3000_work/linux/arch/arm/mach-pxa/pxa27x_power.c 2005-02-21 22:25:37.000000000 +0900
+@@ -150,6 +150,10 @@
+ extern int sharpsl_main_bk_flag;
+ int sharpsl_request_off = 0;
+
++#if defined(CONFIG_CHANGE_CORE_VOLT)
++static unsigned char current_core_voltage = 0x1a;
++#endif
++
+ void PrintParamTable(void);
+
+ int sharpsl_restart(void)
+@@ -324,7 +328,7 @@
+ return -1;
+ }
+
+-#ifdef DEBUG
++#if defined(DEBUG) || defined(CONFIG_CHANGE_CORE_VOLT)
+ int pwr_i2c_read( unsigned char device, unsigned char *value )
+ {
+ unsigned long r;
+@@ -405,12 +409,33 @@
+ static void cpu_xscale_voltage_high(void)
+ {
+ pwr_i2c_open();
++#if defined(CONFIG_CHANGE_CORE_VOLT)
++ pwr_i2c_write( 0x0c, current_core_voltage );
++ pwr_i2c_close();
++ printk("current voltage %x\n", current_core_voltage );
++#else
+ pwr_i2c_write( 0x0c, 0x1a ); // 1.35V - SlewRate 1
+ pwr_i2c_close();
++#endif
++}
++
++#if defined(CONFIG_CHANGE_CORE_VOLT)
++void cpu_xscale_voltage_write(unsigned char value)
++{
++ if (value > 0x10 )
++ return;
++ value += 0x10;
++ pwr_i2c_open();
++ pwr_i2c_write( 0x0c, value );
++ pwr_i2c_close();
++ current_core_voltage = value;
++ printk("current voltage %x\n", current_core_voltage );
++
+ }
++#endif
+
+-#ifdef DEBUG
+-static unsigned char cpu_xscale_voltage_read(void)
++#if defined(DEBUG) || defined(CONFIG_CHANGE_CORE_VOLT)
++unsigned char cpu_xscale_voltage_read(void)
+ {
+ unsigned char value=0xff;
+ pwr_i2c_open();
+@@ -418,7 +443,9 @@
+ pwr_i2c_close();
+ return value;
+ }
++#endif
+
++#if defined(DEBUG)
+ #define CLKCFG(a) asm("mrc p14, 0, %0, C6, C0, 0" : "=r"(a))
+ static void __debug_printk(void)
+ {
+diff -Nur c3000_pre/linux/arch/arm/mach-pxa/sharpsl_apm.c c3000_work/linux/arch/arm/mach-pxa/sharpsl_apm.c
+--- c3000_pre/linux/arch/arm/mach-pxa/sharpsl_apm.c 2005-02-21 21:44:13.000000000 +0900
++++ c3000_work/linux/arch/arm/mach-pxa/sharpsl_apm.c 2005-02-21 22:29:17.000000000 +0900
+@@ -135,6 +135,11 @@
+ struct proc_dir_entry *proc_zaurus;
+ #endif
+
++#if defined(CONFIG_CHANGE_CORE_VOLT)
++extern unsigned char cpu_xscale_voltage_read(void);
++extern void cpu_xscale_voltage_write(unsigned char);
++#endif
++
+ #if defined(CONFIG_SABINAL_DISCOVERY)
+ #define SHARPSL_AC_LINE_STATUS (( ASIC3_GPIO_PSTS_D & AC_IN )? APM_AC_OFFLINE : APM_AC_ONLINE)
+ #define BACKPACK_IN_DETECT() ( ASIC3_GPIO_PSTS_D & BACKPACK_DETECT ) /* 0: exist , 1: not in */
+@@ -1036,6 +1041,58 @@
+ EXPORT_SYMBOL(write_cccr);
+ #endif
+
++#if defined(CONFIG_CHANGE_CORE_VOLT)
++
++void write_vcore(int vcore)
++{
++ printk("Change Core voltage = %x.\n", vcore);
++ cpu_xscale_voltage_write(vcore);
++ return;
++}
++
++int read_vcore(void)
++{
++ return cpu_xscale_voltage_read();
++}
++
++static ssize_t core_volt_read_params(struct file *file, char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ char outputbuf[32];
++ int count;
++
++ if (*ppos>0) /* Assume reading completed in previous read*/
++ return 0;
++ count = sprintf(outputbuf, "0x%02X\n", (unsigned int) cpu_xscale_voltage_read() );
++ count++;
++ *ppos += count;
++ if (count>nbytes)/* Assume output can be read at one time */
++ return -EINVAL;
++ if (copy_to_user(buf, outputbuf, count+1))
++ return -EFAULT;
++ return count;
++}
++
++static ssize_t core_volt_write_params(struct file *file, const char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ unsigned int param=0;
++
++ sscanf(buf,"%x",&param);
++ if (param) {
++ write_vcore(param);
++ }
++ return nbytes;
++}
++
++static struct file_operations proc_core_volt_params_operations = {
++ read:core_volt_read_params,
++ write:core_volt_write_params,
++};
++EXPORT_SYMBOL(read_vcore);
++EXPORT_SYMBOL(write_vcore);
++#endif
++
+ #ifdef CONFIG_APM_CPU_IDLE
+ #ifdef SHARPSL_NEW_IDLE
+ static int save_icmr;
+@@ -2849,6 +2906,7 @@
+ struct proc_dir_entry *lock_fcs_proc;
+ struct proc_dir_entry *power_mode_proc;
+ struct proc_dir_entry *cccr_change_proc;
++ struct proc_dir_entry *core_volt_proc;
+
+ apm_info.bios = apm_bios_info;
+ if (apm_info.bios.version == 0) {
+@@ -2981,6 +3039,14 @@
+ cccr_change_proc->proc_fops = &proc_cccr_change_params_operations;
+ }
+ #endif
++
++#if defined(CONFIG_CHANGE_CORE_VOLT)
++ core_volt_proc = create_proc_entry("zaurus/VCORE", 0, NULL);
++ if (core_volt_proc) {
++ core_volt_proc->proc_fops = &proc_core_volt_params_operations;
++ }
++#endif
++
+ kernel_thread(apm_thread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
+
+ #if defined(CONFIG_SABINAL_DISCOVERY) || defined(CONFIG_ARCH_PXA_TOSA)
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P03-C3000-SIGSTOP_FIX_041207.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P03-C3000-SIGSTOP_FIX_041207.patch
new file mode 100644
index 0000000000..332f52f939
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P03-C3000-SIGSTOP_FIX_041207.patch
@@ -0,0 +1,195 @@
+diff -Nur c3000_pre/linux/arch/arm/config.in c3000_work/linux/arch/arm/config.in
+--- c3000_pre/linux/arch/arm/config.in 2004-12-05 22:17:18.000000000 +0900
++++ c3000_work/linux/arch/arm/config.in 2004-12-06 01:13:03.000000000 +0900
+@@ -481,6 +481,7 @@
+ if [ "$CONFIG_SL_CCCR_CHANGE" = "y" ]; then
+ bool 'Core voltage change enable (EXPERIMENTAL)' CONFIG_CHANGE_CORE_VOLT
+ fi
++ bool 'Fix send SIGSTOP to all tasks at suspend (EXPERIMENTAL)' CONFIG_SL_SIGSTOP_FIX
+ if [ "$CONFIG_ARCH_SHARP_SL" = "y" ]; then
+ define_bool CONFIG_BATT y
+ fi
+diff -Nur c3000_pre/linux/arch/arm/mach-pxa/sharpsl_apm.c c3000_work/linux/arch/arm/mach-pxa/sharpsl_apm.c
+--- c3000_pre/linux/arch/arm/mach-pxa/sharpsl_apm.c 2004-12-05 22:17:18.000000000 +0900
++++ c3000_work/linux/arch/arm/mach-pxa/sharpsl_apm.c 2004-12-06 23:48:35.000000000 +0900
+@@ -75,6 +75,11 @@
+ #include <asm/system.h>
+ #include <asm/hardware.h>
+
++extern int errno;
++// unistd.h is included for the configuration ioctl stuff
++#define __KERNEL_SYSCALLS__ 1
++#include <asm/unistd.h>
++
+ #ifdef CONFIG_ARCH_SHARP_SL
+ #include <asm/irq.h>
+ #include <asm/arch/irqs.h>
+@@ -363,6 +368,8 @@
+ };
+ #define ERROR_COUNT (sizeof(error_table)/sizeof(lookup_t))
+
++#define APP_NAME_LIST "/etc/suspend.lst"
++
+ /*
+ * Function
+ */
+@@ -650,14 +657,81 @@
+ struct task_struct* p = NULL;
+ struct task_struct* tsk = current;
+
++#if defined(CONFIG_SL_SIGSTOP_FIX)
++ int fd,x;
++ mm_segment_t old_fs = get_fs ();
++ char line_buffer[256];
++
+ if (! spin_trylock(&lock))
+ return;
++
++ // Try opening the send sig application name list
++
++ set_fs(KERNEL_DS);
++ fd = open(APP_NAME_LIST, O_RDONLY, 0);
++ set_fs(old_fs);
+
+ /* send signal to all procs except for kernel-threads */
+ read_lock(&tasklist_lock);
++
++ if(fd < 0){
++ for_each_task(p) {
++ struct siginfo si;
++
++ if (p->pid == 1 || p->pid == tsk->pid || is_kernel_thread(p))
++ continue;
++ if (!strcmp(p->comm,"cardmgr")) { //Send sig to cardmgr
++ si.si_signo = signo;
++ si.si_errno = 0;
++ si.si_code = SI_KERNEL;
++ si.si_pid = tsk->pid;
++ si.si_uid = tsk->uid;
++ send_sig_info(signo, &si, p);
++ }
++ }
++
++ }else {
++ for(;;){
++ memset(line_buffer, '\0', 256);
++ set_fs(KERNEL_DS);
++ for (x = 0; x < 256; x++) {
++ if (!read(fd, &line_buffer[x], 1))
++ goto sig_send_done;
++ if (line_buffer[x] == '\n' || line_buffer[x] == '\r')
++ break;
++ }
++ set_fs(old_fs);
++
++ for_each_task(p) {
++ struct siginfo si;
++
++ if (p->pid == 1 || p->pid == tsk->pid || is_kernel_thread(p))
++ continue;
++ if (!strncmp(p->comm,line_buffer,strlen(p->comm))) { //Send sig to cardmgr
++// printk ("Send SIG to application\n");
++ si.si_signo = signo;
++ si.si_errno = 0;
++ si.si_code = SI_KERNEL;
++ si.si_pid = tsk->pid;
++ si.si_uid = tsk->uid;
++ send_sig_info(signo, &si, p);
++ }
++ }
++ }
++ sig_send_done:
++
++ close(fd);
++
++ }
++#else
++ if (! spin_trylock(&lock))
++ return;
++
++ /* send signal to all procs except for kernel-threads */
++ read_lock(&tasklist_lock);
+ for_each_task(p) {
+ struct siginfo si;
+-
++
+ if (p->pid == 1 || p->pid == tsk->pid || is_kernel_thread(p))
+ continue;
+
+@@ -667,7 +741,8 @@
+ si.si_pid = tsk->pid;
+ si.si_uid = tsk->uid;
+ send_sig_info(signo, &si, p);
+- }
++ }
++#endif
+ read_unlock(&tasklist_lock);
+
+ if (signo == SIGSTOP) {
+@@ -679,6 +754,58 @@
+ schedule();
+ set_current_state(state);
+
++#if defined(CONFIG_SL_SIGSTOP_FIX)
++ set_fs(KERNEL_DS);
++ fd = open(APP_NAME_LIST, O_RDONLY, 0);
++ set_fs(old_fs);
++
++ read_lock(&tasklist_lock);
++ if(fd < 0){
++ for_each_task(p) {
++ if (p->pid == 1 || p->pid == tsk->pid || is_kernel_thread(p))
++ continue;
++ if (!strcmp(p->comm,"cardmgr")) {
++// printk ("Check application stopped\n");
++
++ if (p->state != TASK_STOPPED) {
++ read_unlock(&tasklist_lock);
++ goto retry;
++ }
++ }
++ }
++ }else {
++
++ for(;;){
++ memset(line_buffer, '\0', 256);
++ old_fs = get_fs();
++ set_fs(KERNEL_DS);
++ for (x = 0; x < 256; x++) {
++ if (!read(fd, &line_buffer[x], 1))
++ goto sig_stop_done;
++ if (line_buffer[x] == '\n' || line_buffer[x] == '\r')
++ break;
++ }
++ set_fs(old_fs);
++
++ for_each_task(p) {
++ if (p->pid == 1 || p->pid == tsk->pid || is_kernel_thread(p))
++ continue;
++ if (!strncmp(p->comm,line_buffer,strlen(p->comm))) {
++
++ if (p->state != TASK_STOPPED) {
++ read_unlock(&tasklist_lock);
++ goto retry;
++ }
++ }
++ }
++ }
++ sig_stop_done:
++ close(fd);
++ }
++
++ read_unlock(&tasklist_lock);
++ }
++#else
+ read_lock(&tasklist_lock);
+ for_each_task(p) {
+ if (p->pid == 1 || p->pid == tsk->pid || is_kernel_thread(p))
+@@ -691,6 +818,7 @@
+ }
+ read_unlock(&tasklist_lock);
+ }
++#endif
+
+ spin_unlock(&lock);
+ }
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P04-C3000-UNICON_041206.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P04-C3000-UNICON_041206.patch
new file mode 100644
index 0000000000..b6b59abcbd
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P04-C3000-UNICON_041206.patch
@@ -0,0 +1,40089 @@
+diff -Nur c3000_pre/linux/drivers/char/Makefile c3000_work/linux/drivers/char/Makefile
+--- c3000_pre/linux/drivers/char/Makefile 2004-08-21 09:48:25.000000000 +0900
++++ c3000_work/linux/drivers/char/Makefile 2004-12-06 09:25:00.000000000 +0900
+@@ -12,7 +12,8 @@
+ #
+ # This file contains the font map for the default (hardware) font
+ #
+-FONTMAPFILE = cp437.uni
++#FONTMAPFILE = cp437.uni
++FONTMAPFILE = direct.uni
+
+ O_TARGET := char.o
+
+diff -Nur c3000_pre/linux/drivers/char/console.c c3000_work/linux/drivers/char/console.c
+--- c3000_pre/linux/drivers/char/console.c 2004-08-21 09:48:25.000000000 +0900
++++ c3000_work/linux/drivers/char/console.c 2004-12-06 09:44:28.000000000 +0900
+@@ -88,6 +88,11 @@
+ #include <linux/slab.h>
+ #include <linux/major.h>
+ #include <linux/mm.h>
++
++#ifdef CONFIG_UNICON
++#include <linux/fb_doublebyte.h>
++#endif
++
+ #include <linux/console.h>
+ #include <linux/init.h>
+ #include <linux/devfs_fs_kernel.h>
+@@ -112,7 +117,10 @@
+
+ #include "console_macros.h"
+
+-
++#ifdef CONFIG_UNICON
++#define video_erase_char_ext ((video_erase_char)&0xff)
++extern unsigned short translations[][256];
++#endif
+ const struct consw *conswitchp;
+
+ /* A bitmap for codes <32. A bit of 1 indicates that the code
+@@ -242,6 +250,20 @@
+ p = sw->con_screen_pos(vc_cons[currcons].d, offset);
+ return p;
+ }
++#ifdef CONFIG_UNICON
++static inline unsigned short *screenpos_ext(int currcons, int offset, int viewed)
++{
++ unsigned short *p;
++
++ if (!viewed)
++ p = (unsigned short *)(origin + offset + screenbuf_size);
++ else if (!sw->con_screen_pos)
++ p = (unsigned short *)(visible_origin + offset + screenbuf_size);
++ else
++ p = sw->con_screen_pos(vc_cons[currcons].d, -offset-1);
++ return p;
++}
++#endif
+
+ static inline void scrolldelta(int lines)
+ {
+@@ -268,6 +290,14 @@
+ s = (unsigned short *) (origin+video_size_row*(t+nr));
+ scr_memcpyw(d, s, (b-t-nr) * video_size_row);
+ scr_memsetw(d + (b-t-nr) * video_num_columns, video_erase_char, video_size_row*nr);
++
++#ifdef CONFIG_UNICON
++ d += (screenbuf_size>>1);
++ s += (screenbuf_size>>1);
++ scr_memcpyw(d, s, (b-t-nr) * video_size_row);
++ scr_memsetw(d + (b-t-nr) * video_num_columns, video_erase_char_ext, video_size_row*nr);
++#endif
++
+ }
+
+ static void
+@@ -286,6 +316,11 @@
+ step = video_num_columns * nr;
+ scr_memmovew(s + step, s, (b-t-nr)*video_size_row);
+ scr_memsetw(s, video_erase_char, 2*step);
++#ifdef CONFIG_UNICON
++ s += (screenbuf_size>>1);
++ scr_memmovew(s + step, s, (b-t-nr)*video_size_row);
++ scr_memsetw(s, video_erase_char_ext, 2*step);
++#endif
+ }
+
+ static void do_update_region(int currcons, unsigned long start, int count)
+@@ -309,6 +344,10 @@
+ int startx = xx;
+ u16 *q = p;
+ while (xx < video_num_columns && count) {
++#ifdef CONFIG_UNICON
++ //line by line, so the following putcs will be assured to
++ //handle only in-line string.
++#endif
+ if (attrib != (scr_readw(p) & 0xff00)) {
+ if (p > q)
+ sw->con_putcs(vc_cons[currcons].d, q, p-q, yy, startx);
+@@ -438,6 +477,39 @@
+ }
+
+ /* used by selection: complement pointer position */
++#ifdef CONFIG_UNICON
++void complement_pos(int currcons, int offset)
++{
++ static unsigned short *p = NULL;
++ static unsigned short old = 0;
++ static unsigned short oldx = 0, oldy = 0;
++ static unsigned short *p_ext = NULL;
++ static unsigned short old_ext = 0;
++
++ if (p) {
++ scr_writew(old, p);
++ //scr_writew(old_ext, p_ext);
++ if (DO_UPDATE)
++ sw->con_putc(vc_cons[currcons].d, (old_ext<<16)| old, oldy, oldx);
++ }
++ if (offset == -1)
++ p = NULL;
++ else {
++ unsigned short new;
++ p = screenpos(currcons, offset, 1);
++ p_ext = screenpos_ext(currcons, offset, 1);
++ old = scr_readw(p);
++ old_ext = scr_readw(p_ext);
++ new = old ^ complement_mask;
++ scr_writew(new, p);
++ if (DO_UPDATE) {
++ oldx = (offset >> 1) % video_num_columns;
++ oldy = (offset >> 1) / video_num_columns;
++ sw->con_putc(vc_cons[currcons].d, (old_ext<<16) | new, oldy, oldx);
++ }
++ }
++}
++#else
+ void complement_pos(int currcons, int offset)
+ {
+ static unsigned short *p;
+@@ -464,15 +536,23 @@
+ }
+ }
+ }
+-
++#endif
+ static void insert_char(int currcons, unsigned int nr)
+ {
+ unsigned short *p, *q = (unsigned short *) pos;
+
+ p = q + video_num_columns - nr - x;
+- while (--p >= q)
++ while (--p >= q) {
+ scr_writew(scr_readw(p), p + nr);
++#ifdef CONFIG_UNICON
++ scr_writew(scr_readw(p+(screenbuf_size>>1)),p+(screenbuf_size>>1)+nr);
++#endif
++ }
+ scr_memsetw(q, video_erase_char, nr*2);
++#ifdef CONFIG_UNICON
++ scr_memsetw(q+(screenbuf_size>>1),video_erase_char_ext,nr*2);
++#endif
++
+ need_wrap = 0;
+ if (DO_UPDATE) {
+ unsigned short oldattr = attr;
+@@ -480,8 +560,9 @@
+ video_num_columns-x-nr);
+ attr = video_erase_char >> 8;
+ while (nr--)
+- sw->con_putc(vc_cons[currcons].d,
++ sw->con_putc(vc_cons[currcons].d,
+ video_erase_char,y,x+nr);
++
+ attr = oldattr;
+ }
+ }
+@@ -490,12 +571,17 @@
+ {
+ unsigned int i = x;
+ unsigned short *p = (unsigned short *) pos;
+-
+ while (++i <= video_num_columns - nr) {
+ scr_writew(scr_readw(p+nr), p);
++#ifdef CONFIG_UNICON
++ scr_writew(scr_readw(p+nr+(screenbuf_size>>1)),p+(screenbuf_size>>1));
++#endif
+ p++;
+ }
+ scr_memsetw(p, video_erase_char, nr*2);
++#ifdef CONFIG_UNICON
++ scr_memsetw(p+(screenbuf_size>>1), video_erase_char_ext, nr*2);
++#endif
+ need_wrap = 0;
+ if (DO_UPDATE) {
+ unsigned short oldattr = attr;
+@@ -504,8 +590,8 @@
+ attr = video_erase_char >> 8;
+ while (nr--)
+ sw->con_putc(vc_cons[currcons].d,
+- video_erase_char, y,
+- video_num_columns-1-nr);
++ video_erase_char, y,
++ video_num_columns-1-nr);
+ attr = oldattr;
+ }
+ }
+@@ -526,7 +612,11 @@
+ if ((type & 0x40) && ((i & 0x700) == ((i & 0x7000) >> 4))) i ^= 0x0700;
+ scr_writew(i, (u16 *) pos);
+ if (DO_UPDATE)
++#ifndef CONFIG_UNICON
+ sw->con_putc(vc_cons[currcons].d, i, y, x);
++#else
++ sw->con_putc(vc_cons[currcons].d, scr_readw((u16 *) pos+ (screenbuf_size>>1))<<16 | (i & 0xffff), y, x);
++#endif
+ }
+
+ static void hide_cursor(int currcons)
+@@ -536,7 +626,11 @@
+ if (softcursor_original != -1) {
+ scr_writew(softcursor_original,(u16 *) pos);
+ if (DO_UPDATE)
++#ifndef CONFIG_UNICON
+ sw->con_putc(vc_cons[currcons].d, softcursor_original, y, x);
++#else
++ sw->con_putc(vc_cons[currcons].d, scr_readw((u16 *) pos+ (screenbuf_size>>1))<<16 | softcursor_original, y, x);
++#endif
+ softcursor_original = -1;
+ }
+ sw->con_cursor(vc_cons[currcons].d,CM_ERASE);
+@@ -683,7 +777,11 @@
+ visual_init(currcons, 1);
+ if (!*vc_cons[currcons].d->vc_uni_pagedir_loc)
+ con_set_default_unimap(currcons);
++#ifndef CONFIG_UNICON
+ q = (long)kmalloc(screenbuf_size, GFP_KERNEL);
++#else
++ q = (long)kmalloc(screenbuf_size*2,GFP_KERNEL);
++#endif
+ if (!q) {
+ kfree((char *) p);
+ vc_cons[currcons].d = NULL;
+@@ -725,7 +823,11 @@
+ (cc == video_num_columns && ll == video_num_lines))
+ newscreens[currcons] = NULL;
+ else {
++#ifndef CONFIG_UNICON
+ unsigned short *p = (unsigned short *) kmalloc(ss, GFP_USER);
++#else
++ unsigned short *p = (unsigned short *) kmalloc(ss*2, GFP_USER);
++#endif
+ if (!p) {
+ for (i = first; i < currcons; i++)
+ if (newscreens[i])
+@@ -767,13 +869,23 @@
+
+ while (ol < scr_end) {
+ scr_memcpyw((unsigned short *) nl, (unsigned short *) ol, rlth);
++#ifdef CONFIG_UNICON
++ scr_memcpyw((unsigned short *) (nl + ss), (unsigned short*) (ol + oss), rlth);
++#endif
+ if (rrem)
+ scr_memsetw((void *)(nl + rlth), video_erase_char, rrem);
++#ifdef CONFIG_UNICON
++ if (rrem)
++ scr_memsetw((void *)(nl + rlth + ss), video_erase_char_ext, rrem);
++#endif
+ ol += osr;
+ nl += sr;
+ }
+ if (nlend > nl)
+ scr_memsetw((void *) nl, video_erase_char, nlend - nl);
++#ifdef CONFIG_UNICON
++ scr_memsetw((void *) (nl + ss), video_erase_char_ext, nlend - nl);
++#endif
+ if (kmalloced)
+ kfree(screenbuf);
+ screenbuf = newscreens[currcons];
+@@ -996,6 +1108,9 @@
+ return;
+ }
+ scr_memsetw(start, video_erase_char, 2*count);
++#ifdef CONFIG_UNICON
++ scr_memsetw(start + (screenbuf_size>>1), video_erase_char_ext, 2*count);
++#endif
+ need_wrap = 0;
+ }
+
+@@ -1030,6 +1145,9 @@
+ return;
+ }
+ scr_memsetw(start, video_erase_char, 2 * count);
++#ifdef CONFIG_UNICON
++ scr_memsetw(start + (screenbuf_size>>1), video_erase_char_ext, 2*count);
++#endif
+ need_wrap = 0;
+ }
+
+@@ -1042,6 +1160,9 @@
+ count = (vpar > video_num_columns-x) ? (video_num_columns-x) : vpar;
+
+ scr_memsetw((unsigned short *) pos, video_erase_char, 2 * count);
++#ifdef CONFIG_UNICON
++ scr_memsetw((unsigned short *) pos + (screenbuf_size>>1), video_erase_char_ext, 2*count);
++#endif
+ if (DO_UPDATE)
+ sw->con_clear(vc_cons[currcons].d, y, x, 1, count);
+ need_wrap = 0;
+@@ -1638,7 +1759,13 @@
+ if (ques) {
+ clear_selection();
+ if (par[0])
+- complement_mask = par[0]<<8 | par[1];
++#ifndef CONFIG_UNICON
++ complement_mask = par[0]<<8 | par[1];
++#else
++ // force the low byte to be zero
++ complement_mask = par[0]<<8;
++#endif
++
+ else
+ complement_mask = s_complement_mask;
+ return;
+@@ -1856,6 +1983,11 @@
+ const unsigned char *orig_buf = NULL;
+ int orig_count;
+
++#ifdef CONFIG_UNICON
++#define GB_LEFT 0x8000
++#define GB_RIGHT 0xc000
++#endif
++
+ if (in_interrupt())
+ return count;
+
+@@ -1996,6 +2128,56 @@
+ ((attr << 8) & ~himask) + ((tc & 0x100) ? himask : 0) + (tc & 0xff) :
+ (attr << 8) + tc,
+ (u16 *) pos);
++#ifdef CONFIG_UNICON
++#define HIGH_WORD ((u16 *) ((long)pos + screenbuf_size))
++#define HIGH_WORD_PREV ((u16 *) ((long)pos - 2 + screenbuf_size))
++#define HIGH_WORD_NEXT ((u16 *) ((long)pos + 2 + screenbuf_size))
++ /*
++ * following condiction we do not tread the char as
++ * double byte.
++ * 1. default encoding is NULL. The encode module not
++ * install yet.
++ * 2. Current char set is not the default one. We are
++ * possible drawing a table lines right now.
++ * -Chris
++ */
++
++ if (doublebyte_default && translate == translations[0]
++ && (pos==origin||!(scr_readw(HIGH_WORD_PREV)&DB_HALF_MASK))
++ && doublebyte_default->is_left(tc)){
++ /*possible the left char of the Double Byte
++ , but we don't know yet, because the right
++ char is unknow right now. So mark it as
++ Half char, the possible candidate
++ -Chris
++ */
++ scr_writew(DB_HALF_MASK,HIGH_WORD);
++
++ } else if(doublebyte_default&& translate == translations
++ && scr_readw(HIGH_WORD_PREV)==DB_HALF_MASK
++ && doublebyte_default->is_right(tc)) {
++ scr_writew(DB_LEFT|(tc & 0xff),HIGH_WORD_PREV);
++ scr_writew(DB_RIGHT|(scr_readw((u16*)(pos-2))&0xff),HIGH_WORD);
++ if (DO_UPDATE && draw_x < 0) {
++ draw_from = pos-2 ;
++ if (x>0) {
++ draw_x = x-1;
++ } else {
++ draw_to = pos;
++ draw_x = video_num_columns -1;
++ y--;
++ FLUSH
++ y++;
++ draw_x = 0;
++ draw_from = pos;
++ }
++ }
++ } else {
++ /*normal ASCII or table lines, clean hight byte*/
++ scr_writew(0,HIGH_WORD);
++ }
++
++#endif
+ if (DO_UPDATE && draw_x < 0) {
+ draw_x = x;
+ draw_from = pos;
+@@ -2154,6 +2336,9 @@
+ continue;
+ }
+ scr_writew((attr << 8) + c, (unsigned short *) pos);
++#ifdef CONFIG_UNICON
++ scr_writew(0,(unsigned short *) pos + (screenbuf_size>>1));
++#endif
+ cnt++;
+ if (myx == video_num_columns - 1) {
+ need_wrap = 1;
+@@ -2510,7 +2695,11 @@
+ vt_cons[currcons] = (struct vt_struct *)
+ alloc_bootmem(sizeof(struct vt_struct));
+ visual_init(currcons, 1);
++#ifdef CONFIG_UNICON
++ screenbuf = (unsigned short *) alloc_bootmem(screenbuf_size * 2);
++#else
+ screenbuf = (unsigned short *) alloc_bootmem(screenbuf_size);
++#endif
+ kmalloced = 0;
+ vc_init(currcons, video_num_lines, video_num_columns,
+ currcons || !sw->con_save_screen);
+@@ -2983,7 +3172,12 @@
+ gotoxy(currcons, p[0], p[1]);
+ set_cursor(currcons);
+ }
+-
++#ifdef CONFIG_UNICON
++/*
++Now, the unicon doesn't support vcs!
++To support it, first change the vc_screen.c!
++*/
++#endif
+ u16 vcs_scr_readw(int currcons, const u16 *org)
+ {
+ if ((unsigned long)org == pos && softcursor_original != -1)
+@@ -3025,6 +3219,15 @@
+ /*
+ * Visible symbols for modules
+ */
++#ifdef CONFIG_UNICON
++int (*Unicon_fnKeyHook)
++ (struct tty_struct *tty, unsigned char ch, char flag) = NULL;
++int (*Unicon_fnLowerKeyHook) (unsigned char ch) = NULL;
++
++EXPORT_SYMBOL(Unicon_fnLowerKeyHook);
++EXPORT_SYMBOL(Unicon_fnKeyHook);
++EXPORT_SYMBOL(vc_cons);
++#endif
+
+ EXPORT_SYMBOL(color_table);
+ EXPORT_SYMBOL(default_red);
+diff -Nur c3000_pre/linux/drivers/char/consolemap.c c3000_work/linux/drivers/char/consolemap.c
+--- c3000_pre/linux/drivers/char/consolemap.c 2004-08-21 09:48:25.000000000 +0900
++++ c3000_work/linux/drivers/char/consolemap.c 2004-12-06 09:25:00.000000000 +0900
+@@ -22,7 +22,11 @@
+ #include <linux/console_struct.h>
+ #include <linux/vt_kern.h>
+
++#ifndef CONFIG_UNICON
+ static unsigned short translations[][256] = {
++#else
++unsigned short translations[][256] = {
++#endif
+ /* 8-bit Latin-1 mapped to Unicode -- trivial mapping */
+ {
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+diff -Nur c3000_pre/linux/drivers/char/direct.uni c3000_work/linux/drivers/char/direct.uni
+--- c3000_pre/linux/drivers/char/direct.uni 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/drivers/char/direct.uni 2004-12-06 09:25:00.000000000 +0900
+@@ -0,0 +1,259 @@
++0x00 U+0000
++0x20 U+0020
++0x21 U+0021
++0x22 U+0022
++0x23 U+0023
++0x24 U+0024
++0x25 U+0025
++0x26 U+0026
++0x27 U+0027
++0x28 U+0028
++0x29 U+0029
++0x2a U+002a
++0x2b U+002b
++0x2c U+002c
++0x2d U+002d
++0x2e U+002e
++0x2f U+002f
++0x30 U+0030
++0x31 U+0031
++0x32 U+0032
++0x33 U+0033
++0x34 U+0034
++0x35 U+0035
++0x36 U+0036
++0x37 U+0037
++0x38 U+0038
++0x39 U+0039
++0x3a U+003a
++0x3b U+003b
++0x3c U+003c
++0x3d U+003d
++0x3e U+003e
++0x3f U+003f
++0x40 U+0040
++0x41 U+0041
++0x42 U+0042
++0x43 U+0043
++0x44 U+0044
++0x45 U+0045
++0x46 U+0046
++0x47 U+0047
++0x48 U+0048
++0x49 U+0049
++0x4a U+004a
++0x4b U+004b
++0x4c U+004c
++0x4d U+004d
++0x4e U+004e
++0x4f U+004f
++0x50 U+0050
++0x51 U+0051
++0x52 U+0052
++0x53 U+0053
++0x54 U+0054
++0x55 U+0055
++0x56 U+0056
++0x57 U+0057
++0x58 U+0058
++0x59 U+0059
++0x5a U+005a
++0x5b U+005b
++0x5c U+005c
++0x5d U+005d
++0x5e U+005e
++0x5f U+005f
++0x60 U+0060
++0x61 U+0061
++0x62 U+0062
++0x63 U+0063
++0x64 U+0064
++0x65 U+0065
++0x66 U+0066
++0x67 U+0067
++0x68 U+0068
++0x69 U+0069
++0x6a U+006a
++0x6b U+006b
++0x6c U+006c
++0x6d U+006d
++0x6e U+006e
++0x6f U+006f
++0x70 U+0070
++0x71 U+0071
++0x72 U+0072
++0x73 U+0073
++0x74 U+0074
++0x75 U+0075
++0x76 U+0076
++0x77 U+0077
++0x78 U+0078
++0x79 U+0079
++0x7a U+007a
++0x7b U+007b
++0x7c U+007c
++0x7d U+007d
++0x7e U+007e
++0x7f U+007f
++0x80 U+0080
++0x81 U+0081
++0x82 U+0082
++0x83 U+0083
++0x84 U+0084
++0x85 U+0085
++0x86 U+0086
++0x87 U+0087
++0x88 U+0088
++0x89 U+0089
++0x8a U+008a
++0x8b U+008b
++0x8c U+008c
++0x8d U+008d
++0x8e U+008e
++0x8f U+008f
++0x90 U+0090
++0x91 U+0091
++0x92 U+0092
++0x93 U+0093
++0x94 U+0094
++0x95 U+0095
++0x96 U+0096
++0x97 U+0097
++0x98 U+0098
++0x99 U+0099
++0x9a U+009a
++0x9b U+009b
++0x9c U+009c
++0x9d U+009d
++0x9e U+009e
++0x9f U+009f
++0xa0 U+00a0
++0xa1 U+00a1
++0xa2 U+00a2
++0xa3 U+00a3
++0xa4 U+00a4
++0xa5 U+00a5
++0xa6 U+00a6
++0xa7 U+00a7
++0xa8 U+00a8
++0xa9 U+00a9
++0xaa U+00aa
++0xab U+00ab
++0xac U+00ac
++0xad U+00ad
++0xae U+00ae
++0xaf U+00af
++0xb0 U+00b0
++0xb1 U+00b1
++0xb2 U+00b2
++0xb3 U+00b3
++0xb4 U+00b4
++0xb5 U+00b5
++0xb6 U+00b6
++0xb7 U+00b7
++0xb8 U+00b8
++0xb9 U+00b9
++0xba U+00ba
++0xbb U+00bb
++0xbc U+00bc
++0xbd U+00bd
++0xbe U+00be
++0xbf U+00bf
++0xc0 U+00c0
++0xc1 U+00c1
++0xc2 U+00c2
++0xc3 U+00c3
++0xc4 U+00c4
++0xc5 U+00c5
++0xc6 U+00c6
++0xc7 U+00c7
++0xc8 U+00c8
++0xc9 U+00c9
++0xca U+00ca
++0xcb U+00cb
++0xcc U+00cc
++0xcd U+00cd
++0xce U+00ce
++0xcf U+00cf
++0xd0 U+00d0
++0xd1 U+00d1
++0xd2 U+00d2
++0xd3 U+00d3
++0xd4 U+00d4
++0xd5 U+00d5
++0xd6 U+00d6
++0xd7 U+00d7
++0xd8 U+00d8
++0xd9 U+00d9
++0xda U+00da
++0xdb U+00db
++0xdc U+00dc
++0xdd U+00dd
++0xde U+00de
++0xdf U+00df
++0xe0 U+00e0
++0xe1 U+00e1
++0xe2 U+00e2
++0xe3 U+00e3
++0xe4 U+00e4
++0xe5 U+00e5
++0xe6 U+00e6
++0xe7 U+00e7
++0xe8 U+00e8
++0xe9 U+00e9
++0xea U+00ea
++0xeb U+00eb
++0xec U+00ec
++0xed U+00ed
++0xee U+00ee
++0xef U+00ef
++0xf0 U+00f0
++0xf1 U+00f1
++0xf2 U+00f2
++0xf3 U+00f3
++0xf4 U+00f4
++0xf5 U+00f5
++0xf6 U+00f6
++0xf7 U+00f7
++0xf8 U+00f8
++0xf9 U+00f9
++0xfa U+00fa
++0xfb U+00fb
++0xfc U+00fc
++0xfd U+00fd
++0xfe U+00fe
++0xff U+00ff
++0x07 U+2022
++0x13 U+203c
++0x4b U+212a
++0x1b U+2190
++0x18 U+2191
++0x1a U+2192
++0x19 U+2193
++0x1d U+2194
++0x12 U+2195
++0x17 U+21a8
++0x1c U+221f
++0x16 U+25ac
++0x1e U+25b2
++0x10 U+25b6
++0x10 U+25ba
++0x1f U+25bc
++0x11 U+25c0
++0x11 U+25c4
++0x04 U+25c6
++0x09 U+25cb
++0x08 U+25d8
++0x0a U+25d9
++0x01 U+263a
++0x02 U+263b
++0x0f U+263c
++0x0c U+2640
++0x0b U+2642
++0x06 U+2660
++0x05 U+2663
++0x03 U+2665
++0x04 U+2666
++0x0d U+266a
++0x0e U+266b
++0x5f U+f804
+diff -Nur c3000_pre/linux/drivers/char/pc_keyb.c c3000_work/linux/drivers/char/pc_keyb.c
+--- c3000_pre/linux/drivers/char/pc_keyb.c 2004-08-21 09:48:25.000000000 +0900
++++ c3000_work/linux/drivers/char/pc_keyb.c 2004-12-06 09:25:01.000000000 +0900
+@@ -467,14 +467,36 @@
+
+ static unsigned char kbd_exists = 1;
+
+-static inline void handle_keyboard_event(unsigned char scancode)
++#ifdef CONFIG_UNICON
++extern int (*Unicon_fnLowerKeyHook) (unsigned char ch);
++extern int (*Unicon_fnKeyHook) (struct tty_struct *tty, \
++ unsigned char ch, char flag);
++#endif
++static inline int handle_keyboard_event(unsigned char scancode)
+ {
+ #ifdef CONFIG_VT
+ kbd_exists = 1;
+- if (do_acknowledge(scancode))
+- handle_scancode(scancode, !(scancode & 0x80));
++ if (do_acknowledge(scancode)){
++#ifdef CONFIG_UNICON
++ if (Unicon_fnLowerKeyHook != NULL){
++ /* return 1 ==> processed by kernel
++ return 0 ==> processed by app */
++ if (scancode == 0x58){ /* F12 kill unicode */
++ Unicon_fnKeyHook = NULL;
++ Unicon_fnLowerKeyHook = NULL;
++ return 1;
++ }
++ if ((*Unicon_fnLowerKeyHook) (scancode) == 1)
++ return 1;
++ else
++ handle_scancode(scancode,!(scancode & 0x80));
++ } else
++#endif
++ handle_scancode(scancode, !(scancode & 0x80));
++ }
+ #endif
+ tasklet_schedule(&keyboard_tasklet);
++ return 0;
+ }
+
+ /*
+@@ -504,7 +526,8 @@
+ if (status & KBD_STAT_MOUSE_OBF)
+ handle_mouse_event(scancode);
+ else
+- handle_keyboard_event(scancode);
++ if(handle_keyboard_event(scancode))
++ return status;
+ }
+
+ status = kbd_read_status();
+diff -Nur c3000_pre/linux/drivers/video/Config.in c3000_work/linux/drivers/video/Config.in
+--- c3000_pre/linux/drivers/video/Config.in 2004-08-21 09:48:58.000000000 +0900
++++ c3000_work/linux/drivers/video/Config.in 2004-12-06 10:01:36.000000000 +0900
+@@ -13,6 +13,21 @@
+ bool ' Hitachi HD64413 support' CONFIG_FB_HD64413
+ fi
+ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
++ bool "UNICON Support(EXPERIMENTAL)" CONFIG_UNICON
++ if [ "$CONFIG_UNICON" = "y" ]; then
++ tristate "Double Byte GB encode (module only)" CONFIG_UNICON_GB
++ if [ "$CONFIG_UNICON_GB" = "y" -o "$CONFIG_UNICON_GB" = "m" ]; then
++ define_tristate CONFIG_UNICON_GB m
++ fi
++ tristate "Double Byte SJIS encode (module only)" CONFIG_UNICON_SJIS
++ if [ "$CONFIG_UNICON_SJIS" = "y" -o "$CONFIG_UNICON_SJIS" = "m" ]; then
++ define_tristate CONFIG_UNICON_SJIS m
++ fi
++ tristate "Double Byte EUCJP encode (module only)" CONFIG_UNICON_EUCJP
++ if [ "$CONFIG_UNICON_EUCJP" = "y" -o "$CONFIG_UNICON_EUCJP" = "m" ]; then
++ define_tristate CONFIG_UNICON_EUCJP m
++ fi
++ fi
+ if [ "$CONFIG_PCI" = "y" ]; then
+ tristate ' nVidia Riva support (EXPERIMENTAL)' CONFIG_FB_RIVA
+ fi
+diff -Nur c3000_pre/linux/drivers/video/Makefile c3000_work/linux/drivers/video/Makefile
+--- c3000_pre/linux/drivers/video/Makefile 2004-08-21 09:48:58.000000000 +0900
++++ c3000_work/linux/drivers/video/Makefile 2004-12-06 09:25:01.000000000 +0900
+@@ -42,6 +42,10 @@
+ obj-$(CONFIG_PPC) += macmodes.o
+ endif
+
++obj-$(CONFIG_UNICON_GB) += encode-gb.o
++obj-$(CONFIG_UNICON_BIG5) += encode-big5.o
++obj-$(CONFIG_UNICON_SJIS) += encode-sjis.o
++obj-$(CONFIG_UNICON_EUCJP) += encode-eucjp.o
+ obj-$(CONFIG_FB_ACORN) += acornfb.o
+ obj-$(CONFIG_FB_AMIGA) += amifb.o
+ obj-$(CONFIG_FB_PM2) += pm2fb.o fbgen.o
+diff -Nur c3000_pre/linux/drivers/video/encode-eucjp.c c3000_work/linux/drivers/video/encode-eucjp.c
+--- c3000_pre/linux/drivers/video/encode-eucjp.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/drivers/video/encode-eucjp.c 2004-12-06 09:25:01.000000000 +0900
+@@ -0,0 +1,67 @@
++/*
++ * linux/video/encode_eucjp.c
++ *
++ * Copyright (C) 2000 Kazuhide Takahashi
++ * HOLON Inc.
++ * Copyright (C) 1999 Christopher Li, Jim Chen
++ * GNU/Linux Research Center
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive
++ * for more details.
++ *
++ *
++ */
++
++
++#include <linux/module.h>
++#include <linux/fb_doublebyte.h>
++#include "font_jis16.h"
++#define min1 0xa1
++#define max1 0xfe
++
++
++int is_left(int c)
++{
++ return ( c >= min1 && c<=max1);
++}
++int is_right(int c)
++{
++ return ( c >= min1 && c<=max1);
++}
++int index_euc (int left, int right)
++{
++ if ( left == 0x8E )
++ left = 0;
++ else
++ left &= 0x7F;
++ right &= 0x7F;
++
++ if (left > 0x29)
++ return ((right - 0x40 + (left - 0x25) * 96) << 5);
++ else
++ return ((right - 0x20 + (left - 0x20) * 96) << 5);
++}
++struct double_byte db_gb =
++{
++ 0,
++ "EUCJP",
++ is_left,
++ is_right,
++ index_euc,
++ 16,16,
++ max_jis16,
++ font_jis16
++};
++
++int init_module(void)
++{
++ if (doublebyte_default) return 1;
++ doublebyte_default = &db_gb;
++ return 0;
++}
++
++void cleanup_module(void)
++{
++ doublebyte_default = (void*) 0;
++}
+diff -Nur c3000_pre/linux/drivers/video/encode-gb.c c3000_work/linux/drivers/video/encode-gb.c
+--- c3000_pre/linux/drivers/video/encode-gb.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/drivers/video/encode-gb.c 2004-12-06 09:25:01.000000000 +0900
+@@ -0,0 +1,50 @@
++/*
++ * linux/video/encode_gb.c
++ *
++ * Copyright (C) 1999 Christopher Li, Jim Chen
++ * GNU/Linux Research Center
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive
++ * for more details.
++ *
++ *
++ */
++
++
++#include <linux/module.h>
++#include <linux/fb_doublebyte.h>
++#include "font_gb16.h"
++#define min1 0xa1
++#define max1 0xfe
++int index_gb(int left, int right)
++{
++ return ((left-min1)*94+right-min1) << 5;
++}
++int is_hz(int c)
++{
++ return ( c >= min1 && c<=max1);
++}
++struct double_byte db_gb =
++{
++ 0,
++ "GB",
++ is_hz,
++ is_hz,
++ index_gb,
++ 16,16,
++ max_gb16,
++ font_gb16
++};
++
++int init_module(void)
++{
++ if (doublebyte_default) return 1;
++ doublebyte_default = &db_gb;
++ return 0;
++}
++
++void cleanup_module(void)
++{
++ doublebyte_default = (void*) 0;
++}
+diff -Nur c3000_pre/linux/drivers/video/encode-sjis.c c3000_work/linux/drivers/video/encode-sjis.c
+--- c3000_pre/linux/drivers/video/encode-sjis.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/drivers/video/encode-sjis.c 2004-12-06 09:25:01.000000000 +0900
+@@ -0,0 +1,84 @@
++/*
++ * linux/video/encode_sjis.c
++ *
++ * Copyright (C) 2000 Kazuhide Takahashi
++ * HOLON Inc.
++ * Copyright (C) 1999 Christopher Li, Jim Chen
++ * GNU/Linux Research Center
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive
++ * for more details.
++ *
++ *
++ */
++
++
++#include <linux/module.h>
++#include <linux/fb_doublebyte.h>
++#include "font_jis16.h"
++#define min1 0x81
++#define max1 0xfc
++
++
++int is_left(int c)
++{
++ return ( (c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xfc) );
++}
++int is_right(int c)
++{
++ return ( (c >= 0x40 && c <= 0x7e) || (c >= 0x80 && c <= 0xfc) );
++}
++int index_sjis (int left, int right)
++{
++ int ch1, ch2;
++
++ if ( !is_left(left) || !is_right(right) ) return -512;
++
++ ch1 = left;
++ ch2 = right;
++
++ if ( ch1 <= 0x9f )
++ ch1 -= 0x71;
++ else
++ ch1 -= 0xb1;
++ ch1 *= 2;
++ ++ch1;
++
++ if ( ch2 >= 0x7f )
++ --ch2;
++ if ( ch2 >= 0x9e ) {
++ ch2 -= 0x7d;
++ ++ch1;
++ } else {
++ ch2 -= 0x1f;
++ }
++
++ if (ch1 > 0x29)
++ return ((ch2 - 0x40 + (ch1 - 0x25) * 96) << 5);
++ else
++ return ((ch2 - 0x20 + (ch1 - 0x20) * 96) << 5);
++}
++struct double_byte db_gb =
++{
++ 0,
++ "SJIS",
++ is_left,
++ is_right,
++ index_sjis,
++ 16,16,
++ max_jis16,
++ font_jis16
++};
++
++int init_module(void)
++{
++ if (doublebyte_default) return 1;
++ doublebyte_default = &db_gb;
++ return 0;
++}
++
++void cleanup_module(void)
++{
++ doublebyte_default = (void*) 0;
++}
+diff -Nur c3000_pre/linux/drivers/video/fbcon-cfb16.c c3000_work/linux/drivers/video/fbcon-cfb16.c
+--- c3000_pre/linux/drivers/video/fbcon-cfb16.c 2004-11-16 15:31:08.000000000 +0900
++++ c3000_work/linux/drivers/video/fbcon-cfb16.c 2004-12-06 09:25:01.000000000 +0900
+@@ -242,10 +242,17 @@
+ u8 *dest, *cdat, bits;
+ int bytes = p->next_line, rows;
+ u32 eorx, fgx, bgx;
++#ifdef CONFIG_UNICON
++ u8 *temp;
++#endif
+
+ #if defined(CONFIG_FBCON_ROTATE_R)
+ dest = p->screen_base +
++#ifdef CONFIG_UNICON
++ yy * fontwidth(p) * bytes + (p->var.xres - (xx+1) * fontheight(p) - 1) * 2;
++#else
+ yy * fontwidth(p) * bytes + (p->var.xres - xx * fontheight(p) - 1) * 2;
++#endif
+ #elif defined(CONFIG_FBCON_ROTATE_L)
+ dest = p->screen_base +
+ (p->var.yres - yy * fontwidth(p) - 1) * bytes + xx * fontheight(p) * 2;
+@@ -264,6 +271,32 @@
+ case 8:
+ cdat = p->fontdata + (c & p->charmask) * fontheight(p);
+ #if defined(CONFIG_FBCON_ROTATE_R)
++#ifdef CONFIG_UNICON
++ rows = fontheight(p);
++ temp = dest+rows*2;
++ for (; rows--; dest += 2,temp -= 2) {
++ bits = *cdat++;
++ fb_writew((tab_cfb16[bits >> 7 & 1] & eorx) ^ bgx,
++ temp);
++ fb_writew((tab_cfb16[bits >> 6 & 1] & eorx) ^ bgx,
++ temp+1*bytes);
++ fb_writew((tab_cfb16[bits >> 5 & 1] & eorx) ^ bgx,
++ temp+2*bytes);
++ fb_writew((tab_cfb16[bits >> 4 & 1] & eorx) ^ bgx,
++ temp+3*bytes);
++ if (fontwidth(p) == 8) {
++ fb_writew((tab_cfb16[bits >> 3 & 1] & eorx) ^ bgx,
++ temp+4*bytes);
++ fb_writew((tab_cfb16[bits >> 2 & 1] & eorx) ^ bgx,
++ temp+5*bytes);
++ fb_writew((tab_cfb16[bits >> 1 & 1] & eorx) ^ bgx,
++ temp+6*bytes);
++ fb_writew((tab_cfb16[bits & 1] & eorx) ^ bgx,
++ temp+7*bytes);
++ }
++ }
++ dest = temp;
++#else
+ for (rows = fontheight(p); rows--; dest += 2) {
+ bits = *cdat++;
+ fb_writew((tab_cfb16[bits >> 7 & 1] & eorx) ^ bgx,
+@@ -285,6 +318,7 @@
+ dest+7*bytes);
+ }
+ }
++#endif
+ #elif defined(CONFIG_FBCON_ROTATE_L)
+ for (rows = fontheight(p); rows--; dest += 2) {
+ bits = *cdat++;
+diff -Nur c3000_pre/linux/drivers/video/fbcon.c c3000_work/linux/drivers/video/fbcon.c
+--- c3000_pre/linux/drivers/video/fbcon.c 2004-11-16 15:31:08.000000000 +0900
++++ c3000_work/linux/drivers/video/fbcon.c 2004-12-06 09:25:01.000000000 +0900
+@@ -80,6 +80,11 @@
+ #include <linux/kernel.h>
+ #include <linux/delay.h> /* MSch: for IRQ probe */
+ #include <linux/tty.h>
++
++#ifdef CONFIG_UNICON
++#include <linux/fb_doublebyte.h>
++#endif
++
+ #include <linux/console.h>
+ #include <linux/string.h>
+ #include <linux/kd.h>
+@@ -675,7 +680,12 @@
+ if (con == fg_console && p->type != FB_TYPE_TEXT) {
+ if (fbcon_softback_size) {
+ if (!softback_buf) {
++#ifndef CONFIG_UNICON
+ softback_buf = (unsigned long)kmalloc(fbcon_softback_size, GFP_KERNEL);
++#else
++ softback_buf = (unsigned long)kmalloc(fbcon_softback_size*2, GFP_KERNEL);
++#endif
++
+ if (!softback_buf) {
+ fbcon_softback_size = 0;
+ softback_top = 0;
+@@ -936,6 +946,27 @@
+ * restriction is simplicity & efficiency at the moment.
+ */
+
++#ifdef CONFIG_UNICON
++static inline unsigned short * hibyte_pos(struct vc_data * conp,unsigned short* p)
++{
++ unsigned long pos=(long)p;
++
++ if (pos >= conp->vc_origin && pos < conp->vc_scr_end) {
++ /* pos in the vc buffer - Chrisl 99.11.12*/
++ return (unsigned short*)(pos+conp->vc_screenbuf_size);
++ } else if (conp->vc_num == fg_console){
++ /*&& softback_lines,because the scroll will first change
++ softback_lines, then call this function, so it is ignored here
++ -JimChen 99.11.12*/
++ return (unsigned short*)(pos+fbcon_softback_size);
++ } else {
++ /* Should not happen */
++ printk("Warnning, changing not active console\n");
++ return p;
++ }
++}
++#endif
++
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ static __inline__ int real_x(struct display *p, int xpos)
+ {
+@@ -1013,6 +1044,60 @@
+ vbl_cursor_cnt = CURSOR_DRAW_DELAY;
+ }
+
++#ifdef CONFIG_UNICON
++struct double_byte * doublebyte_default = NULL;
++EXPORT_SYMBOL(doublebyte_default);
++/* ypos is absolute y(relative to video buffer), not y in screen coordinate,
++ and the validation is assured by the caller */
++#if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++void fbcon_putc_tl(struct vc_data *conp, int c, int xpos, int ypos)
++#else
++void fbcon_putc_tl(struct vc_data *conp, int c, int ypos, int xpos)
++#endif
++{
++ int unit = conp->vc_num;
++ struct display *p = &fb_display[unit];
++ int extendedchar;
++ u_char * fontdata_save;
++
++ if (!doublebyte_default){
++#if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++ p->dispsw->putc(conp, p, c&0xffff, xpos, ypos);
++#else
++ p->dispsw->putc(conp, p, c&0xffff, ypos, xpos);
++#endif
++ return;
++ }
++ extendedchar = c & (DB_VALIDATE<<16);
++ fontdata_save = p -> fontdata;
++ if (extendedchar) {
++ int index;
++ if ( c & (DB_RIGHT_MASK << 16)) {// right half
++ index = doublebyte_default->font_index((c>>16)&0xff, (c&0xff)) + 16;
++ } else {
++ index = doublebyte_default->font_index((c&0xff),(c>>16)&0xff);
++ }
++ //printk("<6>%d %x",(unsigned long)p->fontdata-(unsigned long) font_gb16,c);
++ if (index >=0 && index < doublebyte_default->charcount) {
++ p->fontdata = doublebyte_default->font_data +index;
++ c = (c & 0xff00);
++ }else c = c & 0xffff;
++ } else {
++ c = c & 0xffff;
++ }
++
++#if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++ p->dispsw->putc(conp, p, c, xpos, ypos);
++#else
++ p->dispsw->putc(conp, p, c, ypos, xpos);
++#endif
++
++ if (extendedchar) {
++ p->fontdata = fontdata_save;
++ }
++}
++EXPORT_SYMBOL(fbcon_putc_tl);
++#endif
+
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ static void fbcon_putc(struct vc_data *conp, int c, int xpos, int ypos)
+@@ -1039,16 +1124,39 @@
+ redraw_cursor = 1;
+ }
+
++#ifdef CONFIG_UNICON
++#if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++ fbcon_putc_tl(conp, c, real_x(p, xpos), ypos);
++#else
++ fbcon_putc_tl(conp, c, real_y(p, ypos), xpos);
++#endif
++#else
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ p->dispsw->putc(conp, p, c, real_x(p, xpos), ypos);
+ #else
+ p->dispsw->putc(conp, p, c, real_y(p, ypos), xpos);
+ #endif
++#endif
+
+ if (redraw_cursor)
+ vbl_cursor_cnt = CURSOR_DRAW_DELAY;
+ }
+
++#ifdef CONFIG_UNICON
++//ypos is absolute pos.
++static void fbcon_putcs_tl(struct vc_data *conp, const unsigned short *s, int count,
++ int ypos, int xpos)
++{
++ const unsigned short *str=s;
++
++ while (count--) {
++ fbcon_putc_tl(conp, (scr_readw(hibyte_pos(conp,(unsigned short *)str))<<16)|scr_readw(str),
++ ypos, xpos);
++ str++;
++ xpos++;
++ }
++}
++#endif
+
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ static void fbcon_putcs(struct vc_data *conp, const unsigned short *s, int count, int xpos, int ypos)
+@@ -1077,11 +1185,19 @@
+ cursor_undrawn();
+ redraw_cursor = 1;
+ }
++#ifndef CONFIG_UNICON
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ p->dispsw->putcs(conp, p, s, count, real_x(p, xpos), ypos);
+ #else
+ p->dispsw->putcs(conp, p, s, count, real_y(p, ypos), xpos);
+ #endif
++#else
++#if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++ fbcon_putcs_tl(conp,s,count,real_x(p,xpos),ypos);
++#else
++ fbcon_putcs_tl(conp,s,count,real_y(p,ypos),xpos);
++#endif
++#endif
+ if (redraw_cursor)
+ vbl_cursor_cnt = CURSOR_DRAW_DELAY;
+ }
+@@ -1406,6 +1522,9 @@
+ unsigned short *start;
+ unsigned short *le;
+ unsigned short c;
++#ifdef CONFIG_UNICON
++ unsigned short c_ext;
++#endif
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ int y = 0;
+ #else
+@@ -1417,30 +1536,53 @@
+ le = advance_row(s, 1);
+ do {
+ c = scr_readw(s);
++#ifdef CONFIG_UNICON
++ c_ext = scr_readw(hibyte_pos(conp,s));
++#endif
+ if (attr != (c & 0xff00)) {
+ attr = c & 0xff00;
+ if (s > start) {
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, s - start,
+ real_x(p, line), y);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_x(p,line),y);
++#endif
+ y += s - start;
+ #else
+- p->dispsw->putcs(conp, p, start, s - start,
+- real_y(p, line), x);
++#ifndef CONFIG_UNICON
++ p->dispsw->putcs(conp, p, start, s - start,
++ real_y(p, line), x);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_y(p,line),x);
++#endif
+ x += s - start;
+ #endif
+ start = s;
+ }
+ }
++#ifndef CONFIG_UNICON
+ if (c == scr_readw(d)) {
++#else
++ if (c == scr_readw(d) && c_ext == scr_readw(hibyte_pos(conp,d))) {
++#endif
+ if (s > start) {
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, s - start,
+ real_x(p, line), y);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_x(p,line),y);
++#endif
+ y += s - start + 1;
+ #else
+- p->dispsw->putcs(conp, p, start, s - start,
+- real_y(p, line), x);
++#ifndef CONFIG_UNICON
++ p->dispsw->putcs(conp, p, start, s - start,
++ real_y(p, line), x);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_y(p,line),x);
++#endif
+ x += s - start + 1;
+ #endif
+ start = s + 1;
+@@ -1458,9 +1600,17 @@
+ } while (s < le);
+ if (s > start)
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, s - start, real_x(p, line), y);
+ #else
++ fbcon_putcs_tl(conp,start,s-start,real_x(p,line),y);
++#endif
++#else
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, s - start, real_y(p, line), x);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_y(p,line),x);
++#endif
+ #endif
+ line++;
+ if (d == (u16 *)softback_end)
+@@ -1485,6 +1635,9 @@
+ unsigned short *start = s;
+ unsigned short *le = advance_row(s, 1);
+ unsigned short c;
++#ifdef CONFIG_UNICON
++ unsigned short c_ext;
++#endif
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ int y = 0;
+ #else
+@@ -1494,30 +1647,53 @@
+
+ do {
+ c = scr_readw(s);
++#ifdef CONFIG_UNICON
++ c_ext = scr_readw(hibyte_pos(conp,s));
++#endif
+ if (attr != (c & 0xff00)) {
+ attr = c & 0xff00;
+ if (s > start) {
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, s - start,
+ real_x(p, line), y);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_x(p,line),y);
++#endif
+ y += s - start;
+ #else
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, s - start,
+ real_y(p, line), x);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_y(p,line),x);
++#endif
+ x += s - start;
+ #endif
+ start = s;
+ }
+ }
++#ifndef CONFIG_UNICON
+ if (c == scr_readw(d)) {
++#else
++ if (c == scr_readw(d) && c_ext == scr_readw(hibyte_pos(conp,d))) {
++#endif
+ if (s > start) {
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, s - start,
+ real_x(p, line), y);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_x(p,line),y);
++#endif
+ y += s - start + 1;
+ #else
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, s - start,
+ real_y(p, line), x);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_y(p,line),x);
++#endif
+ x += s - start + 1;
+ #endif
+ start = s + 1;
+@@ -1531,17 +1707,28 @@
+ }
+ }
+ scr_writew(c, d);
++#ifdef CONFIG_UNICON
++ scr_writew(scr_readw(s+(conp->vc_screenbuf_size>>1)),d+(conp->vc_screenbuf_size>>1));
++#endif
+ console_conditional_schedule();
+ s++;
+ d++;
+ } while (s < le);
+ if (s > start)
++#ifndef CONFIG_UNICON
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ p->dispsw->putcs(conp, p, start, s - start, real_x(p, line), y);
+ #else
+ p->dispsw->putcs(conp, p, start, s - start, real_y(p, line), x);
+ #endif
+ console_conditional_schedule();
++#else
++#if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++ fbcon_putcs_tl(conp,start,s-start,real_x(p,line),y);
++#else
++ fbcon_putcs_tl(conp,start,s-start,real_y(p,line),x);
++#endif
++#endif
+ if (offset > 0)
+ line++;
+ else {
+@@ -1647,10 +1834,18 @@
+ attr = c & 0xff00;
+ if (d > start) {
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, d - start, dx, y);
++#else
++ fbcon_putcs_tl(conp,start,d-start,dx,y);
++#endif
+ y += d - start;
+ #else
+- p->dispsw->putcs(conp, p, start, d - start, dy, x);
++#ifndef CONFIG_UNICON
++ p->dispsw->putcs(conp, p, start, d - start, dy, x);
++#else
++ fbcon_putcs_tl(conp,start,d-start,dy,x);
++#endif
+ x += d - start;
+ #endif
+ start = d;
+@@ -1659,10 +1854,18 @@
+ if (s >= ls && s < le && c == scr_readw(s)) {
+ if (d > start) {
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, d - start, dx, y);
++#else
++ fbcon_putcs_tl(conp,start,d-start,dx,y);
++#endif
+ y += d - start + 1;
+ #else
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, d - start, dy, x);
++#else
++ fbcon_putcs_tl(conp,start,d-start,dy,x);
++#endif
+ x += d - start + 1;
+ #endif
+ start = d + 1;
+@@ -1680,9 +1883,17 @@
+ } while (d < le);
+ if (d > start)
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, d - start, dx, y);
+ #else
++ fbcon_putcs_tl(conp,start,d-start,dx,y);
++#endif
++#else
++#ifndef CONFIG_UNICON
+ p->dispsw->putcs(conp, p, start, d - start, dy, x);
++#else
++ fbcon_putcs_tl(conp,start,d-start,dy,x);
++#endif
+ #endif
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ sx++;
+@@ -1704,6 +1915,9 @@
+
+ while (count) {
+ scr_memcpyw((u16 *)softback_in, p, conp->vc_size_row);
++#ifdef CONFIG_UNICON
++ scr_memcpyw((u16 *)softback_in+(fbcon_softback_size>>1),p+(conp->vc_screenbuf_size>>1),conp->vc_size_row);
++#endif
+ count--;
+ p = advance_row(p, 1);
+ softback_in += conp->vc_size_row;
+@@ -1808,6 +2022,13 @@
+ conp->vc_size_row * (b-count)),
+ conp->vc_video_erase_char,
+ conp->vc_size_row * count);
++#ifdef CONFIG_UNICON
++ scr_memsetw((unsigned short *)(conp->vc_origin +
++ conp->vc_size_row * (b-count) +
++ conp->vc_screenbuf_size),
++ conp->vc_video_erase_char & 0xff,
++ conp->vc_size_row * count);
++#endif
+ return 1;
+ }
+ #else
+@@ -1923,6 +2144,13 @@
+ conp->vc_size_row * t),
+ conp->vc_video_erase_char,
+ conp->vc_size_row * count);
++#ifdef CONFIG_UNICON
++ scr_memsetw((unsigned short *)(conp->vc_origin +
++ conp->vc_size_row * t +
++ conp->vc_screenbuf_size),
++ conp->vc_video_erase_char & 0xff,
++ conp->vc_size_row * count);
++#endif
+ return 1;
+ }
+ #else
+@@ -2606,11 +2834,31 @@
+ return p->fb_info->fbops->fb_set_cmap(&palette_cmap, 1, unit, p->fb_info);
+ }
+
++#ifdef CONFIG_UNICON
++/*offset:relative to softback_curr if softback valid in this vc
++The return pos may exists in buffer pointed by conp->vc_origin or softback_top.
++I assume the offset is always >=0 in normal case and I use the -offset-1 to mean to get the pos of the second word
++*/
++#endif
++
+ static u16 *fbcon_screen_pos(struct vc_data *conp, int offset)
+ {
+ int line;
+ unsigned long p;
+-
++#ifdef CONFIG_UNICON
++ if (offset < 0) {
++ offset = -offset - 1;
++ if (conp->vc_num != fg_console || !softback_lines)
++ return (u16 *)(conp->vc_origin + offset + conp->vc_screenbuf_size);
++ line = offset / conp->vc_size_row;
++ if (line >= softback_lines)
++ return (u16 *)(conp->vc_origin + offset - softback_lines * conp->vc_size_row + conp->vc_screenbuf_size);
++ p = softback_curr + offset;
++ if (p >= softback_end)
++ p += softback_buf - softback_end;
++ return (u16 *)(p+fbcon_softback_size);
++ }
++#endif
+ if (conp->vc_num != fg_console || !softback_lines)
+ return (u16 *)(conp->vc_origin + offset);
+ line = offset / conp->vc_size_row;
+@@ -2622,6 +2870,10 @@
+ return (u16 *)p;
+ }
+
++#ifdef CONFIG_UNICON
++// pos is a pointer either pointing into softback or (vc_origin--vc_scr_end),
++// return the pointer to the start of next row ( no matter in vi_origin or softback!)
++#endif
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ static unsigned long fbcon_getxy(struct vc_data *conp, unsigned long pos, int *py, int *px)
+ #else
+@@ -2724,6 +2976,11 @@
+ p -= conp->vc_size_row;
+ q -= conp->vc_size_row;
+ scr_memcpyw((u16 *)q, (u16 *)p, conp->vc_size_row);
++#ifdef CONFIG_UNICON
++ scr_memcpyw((u16* )(q+conp->vc_screenbuf_size),
++ (u16* )(p+fbcon_softback_size),
++ conp->vc_size_row);
++#endif
+ }
+ softback_in = p;
+ update_region(unit, conp->vc_origin, logo_lines * conp->vc_cols);
+diff -Nur c3000_pre/linux/drivers/video/font_gb16.h c3000_work/linux/drivers/video/font_gb16.h
+--- c3000_pre/linux/drivers/video/font_gb16.h 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/drivers/video/font_gb16.h 2004-12-06 09:25:01.000000000 +0900
+@@ -0,0 +1,8180 @@
++#define max_gb16 261696
++unsigned char font_gb16[max_gb16] = {
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60,0x30,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x50,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x8,0x8,0x4,0x4,0x2,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0xc,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x2,0x2,0x4,0x4,0x9,0x9,0x12,0x24,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x4,0x4,0x4,0x8,0x8,0x1f,0x20,0x40,0x0,0x8,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x10,0x10,0x20,0x40,0x80,0x0,0xc0,0x40,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3f,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x0,0x0,0x0,0x0,0x0,0x0,0x63,0x63,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x4,0x8,0xc,0xc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x60,0x60,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44,0x88,0x10,0x98,0x98,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x0,0x1,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x98,0x98,0x88,0x10,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x8,0x4,0x0,
++0x0,0x40,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x0,0x0,
++0x0,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x12,0x24,0x48,0x90,0x20,0x40,0x80,0x40,0x20,0x90,0x48,0x24,0x12,0x8,0x4,
++0x20,0x90,0x48,0x24,0x12,0x9,0x4,0x2,0x4,0x9,0x12,0x24,0x48,0x90,0x20,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7,0x4,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x7,0x0,0x0,0x0,0xc0,0x40,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x7,0x4,0x7,0x0,0x0,0x0,0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x84,0x88,0x88,0x90,0x90,0x90,0x90,0x90,0x90,0x88,0x88,0x84,0xfe,0x0,
++0x0,0xfe,0x42,0x22,0x22,0x12,0x12,0x12,0x12,0x12,0x12,0x22,0x22,0x42,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0xfc,0xf8,0xf0,0xf0,0xe0,0xe0,0xe0,0xe0,0xf0,0xf0,0xf8,0xfc,0xfe,0x0,
++0x0,0xfe,0x7e,0x3e,0x1e,0x1e,0xe,0xe,0xe,0xe,0x1e,0x1e,0x3e,0x7e,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1,0x1,0x1,0xf,0x1,0x1,0x1,0x0,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x10,0x8,0x4,0x2,0x1,0x2,0x4,0x8,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x20,0x40,0x80,0x0,0x80,0x40,0x20,0x10,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1f,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x3,0x3,0x0,0x0,0x0,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x10,0x20,0x20,0x20,0x40,0x40,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x8,0x8,0x8,0x4,0x4,0x0,
++0x0,0x40,0x40,0x20,0x20,0x20,0x10,0x10,0x8,0x8,0x4,0x4,0x2,0x2,0x1,0x0,0x0,0x4,0x4,0x8,0x8,0x8,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x0,
++0x0,0x7f,0x20,0x10,0x8,0x4,0x2,0x1,0x2,0x4,0x8,0x10,0x20,0x7f,0x0,0x0,0x0,0xfc,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0xfc,0x0,0x0,
++0x0,0x3f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x78,0x0,0x0,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3c,0x0,
++0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0x8,0x7,0x0,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0x20,0xc0,0x0,
++0x0,0x7,0x8,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0,0x0,0xc0,0x20,0x10,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x0,
++0x0,0x7,0x18,0x20,0x20,0x40,0x40,0x7f,0x40,0x40,0x40,0x20,0x20,0x18,0x7,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,
++0x0,0x0,0x0,0x18,0x18,0x0,0x0,0x0,0x0,0x0,0x18,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x41,0xa2,0x14,0x8,0x0,0x0,0x0,0x0,0x0,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,
++0x2,0x2,0x2,0x2,0x2,0x2,0x4,0x4,0x4,0x4,0x4,0x9,0x9,0x9,0x9,0x9,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x4,0x8,0x10,0x20,0x7f,0x0,0x0,0x0,0x4,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0x0,0x0,
++0x0,0x0,0x0,0x7,0x18,0x20,0x20,0x40,0x40,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x60,0x10,0x10,0x8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x7,0x18,0x20,0x20,0x40,0x43,0x43,0x40,0x20,0x20,0x18,0x7,0x0,0x0,0x0,0x0,0x80,0x60,0x10,0x10,0x8,0x8,0x8,0x8,0x10,0x10,0x60,0x80,0x0,0x0,
++0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x6,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1,0x1,0x7,0x9,0x9,0xa,0xa,0x7,0x2,0x2,0x4,0x24,0x18,0x60,0x90,0x80,0x0,0x0,0x80,0x40,0x40,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x7f,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0x0,0xfc,0x0,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x18,0x20,0x41,0x41,0x42,0x22,0x1c,0x0,0x7f,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x70,0x88,0x4,0x4,0x4,0x8,0x30,0x0,0xfc,0x0,0xfc,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x38,0x47,0x0,0x38,0x47,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x8,0xf0,0x4,0x8,0xf0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x38,0x40,0x41,0x81,0x81,0x41,0x42,0x3c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x78,0x84,0x2,0x2,0x2,0x2,0x4,0x38,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x3c,0x42,0x41,0x81,0x81,0x41,0x42,0x3c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x80,0x0,0x0,0x0,0x0,0x80,0x7e,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x1,0x2,0x7f,0x4,0x4,0x8,0x10,0x10,0x20,0x10,0x20,0x20,0x40,0x40,0xfc,0x80,0x0,0x0,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x4,0x4,0x5,0x6,0x1c,0x64,0x84,0x64,0x1c,0x6,0x5,0x4,0x4,0x0,0x0,0x0,0x18,0x60,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x60,0x18,0x0,0x0,
++0x0,0x30,0xc,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0xc,0x30,0x0,0x0,0x0,0x40,0x40,0x40,0xc0,0x70,0x4c,0x42,0x4c,0x70,0xc0,0x40,0x40,0x40,0x0,0x0,
++0x0,0x0,0x1,0x6,0x18,0x60,0x80,0x60,0x98,0x66,0x19,0x6,0x1,0x0,0x0,0x0,0x18,0x60,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x60,0x98,0x60,0x18,0x0,
++0x30,0xc,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0xc,0x33,0xc,0x30,0x0,0x0,0x0,0x0,0xc0,0x30,0xc,0x2,0xc,0x32,0xcc,0x30,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x3c,0x42,0x81,0x81,0x81,0x42,0x3c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x78,0x84,0x2,0x2,0x2,0x84,0x78,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x30,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x0,0x0,0x0,
++0x0,0x1,0x3,0x5,0x9,0x11,0x1,0x1,0x1,0x1,0x3,0x4,0x4,0x4,0x3,0x0,0x0,0x0,0x80,0x40,0x20,0x10,0x0,0x0,0x0,0x0,0x80,0x40,0x40,0x40,0x80,0x0,
++0x0,0x3,0x4,0x4,0x4,0x3,0x1,0x1,0x3f,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x80,0x40,0x40,0x40,0x80,0x0,0x0,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x30,0x48,0x48,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x2,0x2,0x2,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x2,0x2,0x2,0x4,0x4,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x20,0x40,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x20,0x53,0x24,0x8,0x8,0x10,0x10,0x10,0x10,0x10,0x10,0x8,0x8,0x4,0x3,0x0,0x0,0xf4,0xc,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x8,0xf0,0x0,
++0x1,0xf,0x11,0x21,0x21,0x21,0x11,0xf,0x1,0x1,0x1,0x21,0x21,0x31,0x2f,0x1,0x0,0xe8,0x18,0x8,0x8,0x0,0x0,0x0,0xe0,0x10,0x8,0x8,0x8,0x10,0xe0,0x0,
++0x0,0x40,0x27,0x18,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0x18,0x27,0x40,0x0,0x0,0x2,0xe4,0x18,0x8,0x4,0x4,0x4,0x4,0x4,0x4,0x8,0x18,0xe4,0x2,0x0,
++0x0,0x0,0xf,0x10,0x20,0x40,0x40,0x41,0x41,0x42,0x42,0x24,0x14,0xf,0x10,0x20,0x10,0x20,0xe8,0x58,0x48,0x80,0x80,0x0,0x0,0x0,0x0,0x8,0x10,0xe0,0x0,0x0,
++0x1,0x2,0x2,0x2,0x2,0x2,0x3f,0x2,0x2,0x2,0x3a,0x46,0x42,0x45,0x38,0x0,0xc0,0x20,0x20,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0xf8,0x0,
++0x0,0x30,0x48,0x48,0x48,0x49,0x32,0x4,0x8,0x11,0x22,0x42,0x82,0x2,0x1,0x0,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x8c,0x52,0x52,0x52,0x52,0x8c,0x0,
++0x7,0x8,0x8,0x4,0x2,0x3,0x4,0x8,0x8,0x5,0x2,0x1,0x4,0x8,0x8,0x7,0x80,0x40,0xc0,0x0,0x0,0x0,0x80,0x40,0x40,0x80,0x0,0x0,0x80,0x40,0x40,0x80,
++0x60,0x21,0x31,0x31,0x29,0x29,0x29,0x29,0x25,0x25,0x25,0x25,0x23,0x23,0xa1,0x41,0x80,0x40,0x0,0x0,0x18,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x18,0x0,0x7e,0x0,
++0x1,0x1,0x2,0x2,0x2,0x4,0xfc,0x40,0x30,0x8,0x8,0x11,0x16,0x18,0x20,0x0,0x0,0x0,0x80,0x80,0x80,0x40,0x7e,0x4,0x18,0x20,0x20,0x90,0x50,0x30,0x8,0x0,
++0x1,0x1,0x3,0x3,0x3,0x7,0xff,0x3f,0x1f,0xf,0xf,0x1f,0x1e,0x18,0x20,0x0,0x0,0x0,0x80,0x80,0x80,0xc0,0xfe,0xf8,0xf0,0xe0,0xe0,0xf0,0xf0,0x30,0x8,0x0,
++0x0,0x7,0x18,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x18,0x7,0x0,0x0,0x0,0xc0,0x30,0x8,0x8,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x30,0xc0,0x0,0x0,
++0x0,0x7,0x1f,0x3f,0x3f,0x7f,0x7f,0x7f,0x7f,0x7f,0x3f,0x3f,0x1f,0x7,0x0,0x0,0x0,0xc0,0xf0,0xf8,0xf8,0xfc,0xfc,0xfc,0xfc,0xfc,0xf8,0xf8,0xf0,0xc0,0x0,0x0,
++0x0,0x7,0x18,0x27,0x28,0x50,0x50,0x50,0x50,0x50,0x28,0x27,0x18,0x7,0x0,0x0,0x0,0xc0,0x30,0xc8,0x28,0x14,0x14,0x14,0x14,0x14,0x28,0xc8,0x30,0xc0,0x0,0x0,
++0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x1,0x0,0x0,0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x4,0x8,0x10,0x20,0x40,0x80,0x0,0x0,
++0x1,0x3,0x7,0xf,0x1f,0x3f,0x7f,0xff,0x7f,0x3f,0x1f,0xf,0x7,0x3,0x1,0x0,0x0,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x0,0x0,
++0x0,0x7f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7f,0x0,0x0,0x0,0xfc,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x0,0x0,
++0x0,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x0,0x0,0x0,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0x0,0x0,
++0x0,0x1,0x2,0x4,0x4,0x8,0x8,0x10,0x10,0x20,0x20,0x40,0x40,0xff,0x0,0x0,0x0,0x0,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x8,0x8,0x4,0x4,0xfe,0x0,0x0,
++0x0,0x1,0x3,0x7,0x7,0xf,0xf,0x1f,0x1f,0x3f,0x3f,0x7f,0x7f,0xff,0x0,0x0,0x0,0x0,0x80,0xc0,0xc0,0xe0,0xe0,0xf0,0xf0,0xf8,0xf8,0xfc,0xfc,0xfe,0x0,0x0,
++0x0,0x43,0x23,0x10,0x8,0x4,0x2,0x61,0x62,0x4,0x8,0x10,0x23,0x43,0x80,0x0,0x0,0x4,0x8,0x10,0x20,0x40,0x80,0xc,0x8c,0x40,0x20,0x10,0x8,0x4,0x2,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x38,0xfe,0x38,0x20,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x8,0x38,0xff,0x38,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x3,0x3,0x7,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x80,0x80,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x7,0x3,0x3,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x80,0x80,0x0,0x0,
++0x0,0x0,0x0,0xff,0xff,0xff,0x0,0x0,0x0,0xff,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0xfe,0xfe,0x0,0x0,0x0,0xfe,0xfe,0xfe,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x2,0x6,0xa,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x0,
++0x0,0xf,0x10,0x10,0x0,0x0,0x0,0x1,0x6,0x8,0x10,0x10,0x10,0x10,0x1f,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x90,0x0,
++0x0,0xf,0x10,0x10,0x0,0x0,0x1,0x6,0x1,0x0,0x0,0x10,0x10,0x10,0xf,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x10,0x0,
++0x0,0x3,0x5,0x5,0x5,0x9,0x9,0x9,0x11,0x11,0x1f,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x8,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x10,0x10,0x17,0x18,0x10,0x0,0x0,0x10,0x10,0xf,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x10,0x0,
++0x0,0xf,0x10,0x10,0x10,0x10,0x10,0x17,0x18,0x10,0x10,0x10,0x10,0x10,0xf,0x0,0x0,0x0,0x80,0x80,0x80,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x10,0x0,
++0x0,0x1f,0x10,0x10,0x0,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0xc0,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x0,
++0x0,0xf,0x10,0x10,0x10,0x10,0x9,0x6,0x9,0x10,0x10,0x10,0x10,0x10,0xf,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x10,0x0,
++0x0,0xf,0x10,0x10,0x10,0x10,0x10,0x11,0xe,0x0,0x0,0x10,0x10,0x10,0xf,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x10,0x0,
++0x0,0x23,0x64,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x23,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xc8,0x0,
++0x0,0x20,0x61,0xa2,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x90,0x0,
++0x0,0x23,0x64,0xa4,0x20,0x20,0x20,0x20,0x21,0x22,0x24,0x24,0x24,0x24,0x27,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x20,0x20,0xe4,0x0,
++0x0,0x23,0x64,0xa4,0x20,0x20,0x20,0x21,0x20,0x20,0x20,0x24,0x24,0x24,0x23,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x40,0x80,0x40,0x20,0x20,0x20,0x20,0x20,0xc4,0x0,
++0x0,0x20,0x61,0xa1,0x21,0x22,0x22,0x22,0x24,0x24,0x27,0x20,0x20,0x20,0x20,0x0,0x0,0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xf0,0x40,0x40,0x40,0x48,0x0,
++0x0,0x27,0x64,0xa4,0x24,0x24,0x24,0x25,0x26,0x24,0x20,0x20,0x24,0x24,0x23,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x20,0x20,0xc4,0x0,
++0x0,0x23,0x64,0xa4,0x24,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x24,0x24,0x23,0x0,0x0,0xc0,0x20,0x20,0x20,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x20,0x20,0xc4,0x0,
++0x0,0x27,0x64,0xa4,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0,0x0,0xf0,0x10,0x10,0x20,0x40,0x40,0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x84,0x0,
++0x0,0x23,0x64,0xa4,0x24,0x24,0x22,0x21,0x22,0x24,0x24,0x24,0x24,0x24,0x23,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x40,0x80,0x40,0x20,0x20,0x20,0x20,0x20,0xc4,0x0,
++0x0,0x23,0x64,0xa4,0x24,0x24,0x24,0x24,0x23,0x20,0x20,0x24,0x24,0x24,0x23,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x20,0x60,0xa0,0x20,0x20,0x20,0x20,0x20,0xc4,0x0,
++0x0,0x38,0x45,0x45,0x5,0x5,0x5,0x19,0x21,0x41,0x41,0x41,0x45,0x45,0x7c,0x0,0x0,0xe0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xe4,0x0,
++0x0,0x40,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x40,0x0,0x0,0x4,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x4,0x0,
++0x0,0x40,0x87,0x88,0x88,0x80,0x80,0x80,0x80,0x83,0x84,0x88,0x88,0x8f,0x40,0x0,0x0,0x4,0x82,0x42,0x42,0x42,0x42,0x42,0x82,0x2,0x2,0x42,0x42,0xc2,0x4,0x0,
++0x0,0x40,0x87,0x88,0x88,0x80,0x80,0x83,0x80,0x80,0x80,0x88,0x88,0x87,0x40,0x0,0x0,0x4,0x82,0x42,0x42,0x42,0x82,0x2,0x82,0x42,0x42,0x42,0x42,0x82,0x4,0x0,
++0x0,0x41,0x82,0x82,0x82,0x84,0x84,0x88,0x88,0x8f,0x80,0x80,0x80,0x80,0x40,0x0,0x0,0x84,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xe2,0x82,0x82,0x82,0x82,0x4,0x0,
++0x0,0x40,0x8f,0x88,0x88,0x88,0x8b,0x8c,0x88,0x80,0x80,0x88,0x88,0x87,0x40,0x0,0x0,0x4,0xc2,0x2,0x2,0x2,0x82,0x42,0x42,0x42,0x42,0x42,0x42,0x82,0x4,0x0,
++0x0,0x40,0x87,0x88,0x88,0x88,0x88,0x8b,0x8c,0x88,0x88,0x88,0x88,0x87,0x40,0x0,0x0,0x4,0x82,0x42,0x42,0x2,0x2,0x82,0x42,0x42,0x42,0x42,0x42,0x82,0x4,0x0,
++0x0,0x40,0x8f,0x88,0x88,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x40,0x0,0x0,0x4,0xe2,0x22,0x22,0x42,0x82,0x82,0x82,0x2,0x2,0x2,0x2,0x2,0x4,0x0,
++0x0,0x40,0x87,0x88,0x88,0x88,0x88,0x87,0x88,0x88,0x88,0x88,0x88,0x87,0x40,0x0,0x0,0x4,0x82,0x42,0x42,0x42,0x42,0x82,0x42,0x42,0x42,0x42,0x42,0x82,0x4,0x0,
++0x0,0x40,0x87,0x88,0x88,0x88,0x88,0x88,0x87,0x80,0x80,0x88,0x88,0x87,0x40,0x0,0x0,0x4,0x82,0x42,0x42,0x42,0x42,0xc2,0x42,0x42,0x42,0x42,0x42,0x82,0x4,0x0,
++0x0,0x40,0x88,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x88,0x40,0x0,0x0,0x4,0xe2,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xe2,0x4,0x0,
++0x0,0x40,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x40,0x0,0x0,0x4,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x4,0x0,
++0x0,0x40,0x91,0x92,0x92,0x90,0x90,0x90,0x90,0x91,0x92,0x92,0x92,0x93,0x40,0x0,0x0,0x4,0xe2,0x12,0x12,0x12,0x12,0x22,0xc2,0x2,0x2,0x12,0x12,0xf2,0x4,0x0,
++0x0,0x40,0x91,0x92,0x92,0x90,0x90,0x90,0x90,0x90,0x90,0x92,0x92,0x91,0x40,0x0,0x0,0x4,0xe2,0x12,0x12,0x12,0x22,0xc2,0x22,0x12,0x12,0x12,0x12,0xe2,0x4,0x0,
++0x0,0x40,0x90,0x90,0x90,0x90,0x91,0x91,0x92,0x92,0x93,0x90,0x90,0x90,0x40,0x0,0x0,0x4,0x62,0xa2,0xa2,0xa2,0x22,0x22,0x22,0x22,0xfa,0x22,0x22,0x22,0x4,0x0,
++0x0,0x40,0x93,0x92,0x92,0x92,0x92,0x93,0x92,0x90,0x90,0x92,0x92,0x91,0x40,0x0,0x0,0x4,0xf2,0x2,0x2,0x2,0xe2,0x12,0x12,0x12,0x12,0x12,0x12,0xe2,0x4,0x0,
++0x0,0x40,0x91,0x92,0x92,0x92,0x92,0x92,0x93,0x92,0x92,0x92,0x92,0x91,0x40,0x0,0x0,0x4,0xe2,0x12,0x12,0x2,0x2,0xe2,0x12,0x12,0x12,0x12,0x12,0xe2,0x4,0x0,
++0x0,0x40,0x93,0x92,0x92,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x40,0x0,0x0,0x4,0xf2,0x12,0x12,0x22,0x42,0x42,0x42,0x82,0x82,0x82,0x82,0x82,0x4,0x0,
++0x0,0x40,0x91,0x92,0x92,0x92,0x92,0x91,0x92,0x92,0x92,0x92,0x92,0x91,0x40,0x0,0x0,0x4,0xe2,0x12,0x12,0x12,0x12,0xe2,0x12,0x12,0x12,0x12,0x12,0xe2,0x4,0x0,
++0x0,0x40,0x91,0x92,0x92,0x92,0x92,0x92,0x91,0x90,0x90,0x92,0x92,0x91,0x40,0x0,0x0,0x4,0xe2,0x12,0x12,0x12,0x12,0x32,0xd2,0x12,0x12,0x12,0x12,0xe2,0x4,0x0,
++0x0,0x40,0x9c,0xa2,0xa2,0x82,0x82,0x84,0x88,0x90,0xa0,0xa2,0xa2,0xbe,0x40,0x0,0x0,0x4,0x72,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x72,0x4,0x0,
++0x7,0x18,0x20,0x41,0x41,0x81,0x81,0x81,0x81,0x81,0x41,0x41,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0x4,0x4,0x2,0x2,0x2,0x2,0x2,0x4,0x4,0x8,0x30,0xc0,0x0,
++0x7,0x18,0x20,0x47,0x44,0x80,0x80,0x81,0x82,0x84,0x44,0x47,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0xc4,0x44,0x42,0x42,0x82,0x2,0x2,0x44,0xc4,0x8,0x30,0xc0,0x0,
++0x7,0x18,0x20,0x47,0x44,0x80,0x80,0x83,0x80,0x80,0x44,0x47,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0xc4,0x44,0x42,0xc2,0x2,0xc2,0x42,0x44,0xc4,0x8,0x30,0xc0,0x0,
++0x7,0x18,0x20,0x43,0x45,0x85,0x85,0x89,0x89,0x8f,0x41,0x41,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0x4,0x4,0x2,0x2,0x2,0x2,0xc2,0x4,0x4,0x8,0x30,0xc0,0x0,
++0x7,0x18,0x20,0x47,0x44,0x84,0x84,0x87,0x80,0x80,0x44,0x47,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0xc4,0x4,0x2,0x2,0xc2,0x42,0x42,0x44,0xc4,0x8,0x30,0xc0,0x0,
++0x7,0x18,0x20,0x47,0x44,0x84,0x84,0x87,0x84,0x84,0x44,0x47,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0xc4,0x44,0x2,0x2,0xc2,0x42,0x42,0x44,0xc4,0x8,0x30,0xc0,0x0,
++0x7,0x18,0x20,0x47,0x44,0x80,0x80,0x80,0x81,0x81,0x41,0x41,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0xc4,0x44,0x42,0x82,0x82,0x2,0x2,0x4,0x4,0x8,0x30,0xc0,0x0,
++0x7,0x18,0x20,0x47,0x44,0x84,0x84,0x83,0x84,0x84,0x44,0x47,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0xc4,0x44,0x42,0x42,0x82,0x42,0x42,0x44,0xc4,0x8,0x30,0xc0,0x0,
++0x7,0x18,0x20,0x47,0x44,0x84,0x84,0x87,0x80,0x80,0x44,0x47,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0xc4,0x44,0x42,0x42,0xc2,0x42,0x42,0x44,0xc4,0x8,0x30,0xc0,0x0,
++0x7,0x18,0x20,0x4b,0x4a,0x8a,0x8a,0x8a,0x8a,0x8a,0x4a,0x4b,0x20,0x18,0x7,0x0,0xc0,0x30,0x8,0xe4,0x24,0x22,0x22,0x22,0x22,0x22,0x24,0xe4,0x8,0x30,0xc0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x20,0x40,0x80,0x80,0x80,0x80,0xbf,0x80,0x80,0x80,0x80,0x80,0x40,0x20,0x0,0x0,0x8,0x4,0x2,0x2,0x2,0x12,0xfa,0x2,0x2,0x2,0x2,0x2,0x4,0x8,0x0,
++0x0,0x20,0x40,0x80,0x9f,0x80,0x80,0x80,0x80,0x80,0xbf,0x80,0x80,0x40,0x20,0x0,0x0,0x8,0x4,0x22,0xf2,0x2,0x2,0x2,0x2,0x12,0xfa,0x2,0x2,0x4,0x8,0x0,
++0x0,0x20,0x40,0x9f,0x80,0x80,0x80,0x8f,0x80,0x80,0x80,0xbf,0x80,0x40,0x20,0x0,0x0,0x8,0x24,0xf2,0x2,0x2,0x42,0xe2,0x2,0x2,0x12,0xfa,0x2,0x4,0x8,0x0,
++0x0,0x20,0x40,0x80,0xbf,0xa4,0xa4,0xa4,0xa4,0xa4,0xbf,0x80,0x80,0x40,0x20,0x0,0x0,0x8,0x4,0x2,0xfa,0x4a,0x4a,0x4a,0x4a,0x4a,0xfa,0x2,0x2,0x4,0x8,0x0,
++0x0,0x20,0x40,0x9f,0x82,0x82,0x82,0x9f,0x84,0x84,0x84,0x84,0xbf,0x40,0x20,0x0,0x0,0x8,0x24,0xf2,0x2,0x2,0x22,0xf2,0x22,0x22,0x22,0x22,0xfa,0x4,0x8,0x0,
++0x0,0x20,0x40,0x82,0x81,0x80,0xbf,0x80,0x80,0x84,0x84,0x88,0x90,0x40,0x20,0x0,0x0,0x8,0x4,0x2,0x2,0x12,0xfa,0x2,0x2,0x42,0x22,0x12,0x12,0x4,0x8,0x0,
++0x0,0x20,0x42,0x82,0x82,0x82,0x82,0x83,0xbe,0x82,0x82,0x82,0x82,0x41,0x20,0x0,0x0,0x8,0x4,0x2,0x2,0x12,0x7a,0x82,0x2,0x2,0x2,0x22,0x22,0xe4,0x8,0x0,
++0x0,0x20,0x40,0x84,0x84,0x84,0x84,0x84,0x88,0x88,0x90,0xa0,0x80,0x40,0x20,0x0,0x0,0x8,0x84,0x82,0x82,0x82,0x82,0x82,0x42,0x22,0x1a,0x12,0x2,0x4,0x8,0x0,
++0x0,0x20,0x42,0x82,0x82,0x9f,0x82,0x82,0x82,0x84,0x84,0x88,0x90,0x40,0x20,0x0,0x0,0x8,0x4,0x2,0x42,0xe2,0x42,0x42,0x42,0x42,0x4a,0x4a,0x3a,0x4,0x8,0x0,
++0x0,0x20,0x41,0x81,0x81,0x81,0xbf,0x81,0x81,0x81,0x81,0x81,0x81,0x40,0x20,0x0,0x0,0x8,0x4,0x2,0x2,0x12,0xfa,0x2,0x2,0x2,0x2,0x2,0x2,0x4,0x8,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x3,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,
++0x0,0xe,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0xe,0x0,0x0,0xe0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xe0,0x0,
++0x0,0x3b,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x3b,0x0,0x0,0xb8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xb8,0x0,
++0x0,0x77,0x22,0x22,0x22,0x21,0x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x1c,0x8,0x8,0x8,0x10,0x10,0x10,0x10,0xa0,0xa0,0xa0,0xa0,0x40,0x40,0x0,
++0x0,0x70,0x20,0x10,0x10,0x8,0x8,0x8,0x4,0x4,0x4,0x2,0x2,0x1,0x1,0x0,0x0,0x1c,0x8,0x10,0x10,0x20,0x20,0x20,0x40,0x40,0x40,0x80,0x80,0x0,0x0,0x0,
++0x0,0x71,0x20,0x20,0x20,0x11,0x11,0x11,0x11,0xa,0xa,0xa,0xa,0x4,0x4,0x0,0x0,0xdc,0x88,0x88,0x88,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x1c,0x0,
++0x0,0xe3,0x41,0x41,0x41,0x22,0x22,0x22,0x22,0x14,0x14,0x14,0x14,0x8,0x8,0x0,0x0,0xfe,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x7e,0x0,
++0x0,0xe3,0x41,0x41,0x41,0x22,0x22,0x22,0x22,0x14,0x14,0x14,0x14,0x8,0x8,0x0,0x0,0xfe,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0xfe,0x0,
++0x0,0xee,0x44,0x42,0x42,0x41,0x40,0x40,0x40,0x40,0x41,0x41,0x42,0x44,0xee,0x0,0x0,0xe,0x4,0x8,0x8,0x10,0xa0,0x40,0xa0,0xa0,0x10,0x10,0x8,0x4,0xe,0x0,
++0x0,0x70,0x20,0x10,0x8,0x4,0x2,0x1,0x2,0x2,0x4,0x8,0x10,0x20,0x70,0x0,0x0,0x1c,0x8,0x10,0x20,0x40,0x80,0x0,0x80,0x80,0x40,0x20,0x10,0x8,0x1c,0x0,
++0x0,0xe0,0x40,0x20,0x11,0xa,0xa,0x4,0xa,0xa,0x11,0x11,0x20,0x40,0xe0,0x0,0x0,0xee,0x44,0x84,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x84,0x44,0xee,0x0,
++0x0,0xe0,0x40,0x20,0x11,0xa,0xa,0x4,0xa,0xa,0x11,0x11,0x20,0x40,0xe0,0x0,0x0,0xfe,0x54,0x94,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x94,0x54,0xfe,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x2,0x2,0x2,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x40,0x40,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x4,0x4,0x4,0x3f,0x4,0x4,0x4,0x4,0x3f,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x40,0x40,0x78,0xc0,0x40,0x40,0x40,0x78,0xc0,0x40,0x40,0x40,0x0,0x0,
++0x0,0x38,0x10,0x8,0x4,0x2,0x2,0x1,0x1,0xf,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x38,0x10,0x20,0x40,0x80,0x80,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0x80,0x0,
++0x0,0x18,0x24,0x24,0x24,0x24,0x24,0x19,0x2,0x4,0x8,0x10,0x20,0x40,0x0,0x0,0x0,0x4,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x60,0x90,0x90,0x90,0x90,0x90,0x60,
++0x0,0xf,0x10,0x10,0x10,0x10,0xb,0x4,0x1c,0x22,0x41,0x40,0x40,0x21,0x1e,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x70,0x20,0xa0,0x44,0xa4,0x18,0x0,
++0x10,0x10,0x10,0x20,0x20,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc,0x10,0x20,0x40,0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x40,0x40,0x20,0x10,0xc,
++0x60,0x10,0x8,0x4,0x4,0x2,0x2,0x2,0x2,0x2,0x2,0x4,0x4,0x8,0x10,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x1,0x1,0x21,0x11,0x9,0x5,0x1,0x2,0x4,0x8,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x10,0x20,0x40,0x0,0x80,0x40,0x20,0x10,0x0,0x0,0x0,
++0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1f,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x10,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x4,0x8,0x10,0x20,0x0,0x0,0x0,0x0,0x4,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,
++0x0,0x1,0x3,0x5,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,
++0x0,0x7,0x8,0x10,0x10,0x0,0x0,0x0,0x3,0x4,0x8,0x10,0x10,0x10,0x1f,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0xe0,0x0,0x0,0x0,0x0,0x10,0x10,0xf0,0x0,
++0x0,0xf,0x10,0x10,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x10,0x10,0xf,0x0,0x0,0xe0,0x10,0x10,0x10,0x20,0x40,0x80,0x40,0x20,0x10,0x10,0x10,0x20,0xc0,0x0,
++0x0,0x1,0x2,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x20,0x3f,0x0,0x0,0x3,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xf0,0x80,0x80,0xe0,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x10,0x17,0x18,0x10,0x0,0x0,0x0,0x10,0x10,0xf,0x0,0x0,0xf0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,
++0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x17,0x18,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0xc0,0x20,0x10,0x10,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,
++0x0,0x1f,0x10,0x10,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x2,0x2,0x2,0x0,0x0,0xf0,0x10,0x10,0x20,0x20,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x10,0x10,0x10,0x8,0x7,0x8,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x20,0xc0,0x20,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,
++0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x10,0x10,0x8,0x7,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0x30,0xd0,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x0,0x30,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x30,0x0,0x30,0x30,0x10,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x3,0xc,0x30,0x40,0x30,0xc,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0xc,0x30,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x30,0xc,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x1f,0x0,0x0,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,0x0,0xf0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x60,0x18,0x6,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x6,0x18,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x60,0x18,0x4,0x18,0x60,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x18,0x24,0x42,0x42,0x4,0x8,0x8,0x8,0x8,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7,0x18,0x20,0x46,0x49,0x48,0x48,0x48,0x49,0x46,0x20,0x18,0x7,0x0,0x0,0x0,0xc0,0x20,0x10,0x90,0x88,0x88,0x88,0x88,0x90,0x90,0x64,0x8,0xf0,0x0,0x0,
++0x0,0x1,0x2,0x2,0x4,0x4,0x8,0xf,0x10,0x10,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x20,0xe0,0x10,0x10,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x10,0x10,0x20,0xc0,0x20,0x10,0x10,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0xf,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x0,0x0,0x0,0x0,0x0,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0xfc,0x4,0x4,0x0,0x20,0xe0,0x20,0x0,0x4,0x4,0xfc,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xfc,0x4,0x4,0x0,0x20,0xe0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1f,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x1f,0x0,0x0,0x0,0x0,0x0,0xd0,0x30,0x10,0x0,0x0,0x0,0x38,0x10,0x10,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x3,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x3,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x5,0x2,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x71,0x21,0x22,0x24,0x38,0x24,0x22,0x21,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x70,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x8,0xf8,0x0,0x0,0x0,0x0,
++0x0,0xc0,0x60,0x50,0x48,0x44,0x42,0x41,0x40,0x40,0x40,0xe0,0x0,0x0,0x0,0x0,0x0,0x6,0xc,0x14,0x24,0x44,0x84,0x4,0x4,0x4,0x4,0xe,0x0,0x0,0x0,0x0,
++0x0,0x60,0x30,0x28,0x24,0x22,0x21,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0x8,0x8,0x88,0x48,0x28,0x18,0x8,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x10,0x20,0x20,0x20,0x20,0x20,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x8,0x8,0x8,0x8,0x8,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x10,0x20,0x20,0x20,0x20,0x20,0x11,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x8,0x8,0x8,0x8,0x8,0x90,0x60,0xc0,0x30,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x24,0x22,0x21,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x10,0x20,0xc0,0x0,0x0,0x0,0x80,0x70,0x0,0x0,0x0,0x0,
++0x0,0xf,0x10,0x20,0x20,0x10,0xf,0x0,0x0,0x20,0x30,0x2f,0x0,0x0,0x0,0x0,0x0,0xe8,0x18,0x8,0x0,0x0,0xe0,0x10,0x8,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x41,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x10,0x10,0x8,0x8,0x4,0x4,0x2,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0xe3,0x41,0x41,0x41,0x22,0x22,0x22,0x14,0x14,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x8e,0x4,0x4,0x4,0x88,0x88,0x88,0x50,0x50,0x20,0x20,0x0,0x0,0x0,0x0,
++0x0,0x70,0x10,0x8,0x4,0x2,0x1,0x2,0x4,0x8,0x10,0x70,0x0,0x0,0x0,0x0,0x0,0x1c,0x10,0x20,0x40,0x80,0x0,0x80,0x40,0x20,0x10,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x10,0x8,0x4,0x2,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x20,0x20,0x0,0x0,0x1,0x2,0x4,0x8,0x10,0x3f,0x0,0x0,0x0,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x8,0x8,0xf8,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0xe,0x0,0x0,
++0x0,0x40,0x20,0x10,0x8,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x10,0x8,0x4,0x0,0x0,
++0x0,0xe0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x2,0x2,0x4,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x10,0x10,0x8,0x8,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0xf,0x10,0x0,0xf,0x10,0x10,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x40,0x40,0xc0,0x40,0x50,0xa0,0x0,0x0,0x0,0x0,
++0x0,0x8,0x8,0x8,0x8,0xb,0xc,0x8,0x8,0x8,0xc,0xb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x0,0x0,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x20,0x20,0xa0,0x60,0x20,0x20,0x20,0x60,0xa0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0xf,0x10,0x10,0x1f,0x10,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x40,0xc0,0x0,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x2,0x2,0x2,0x2,0xf,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x80,0x80,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0xa0,0x60,0x20,0x20,0x20,0x60,0xa0,0x20,0x20,0x40,0x80,0x0,
++0x0,0x8,0x8,0x8,0x8,0xb,0xc,0x8,0x8,0x8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x20,0x20,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x5,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x8,0x8,0x8,0x8,0x8,0x9,0xa,0xd,0x8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x80,0x40,0x20,0x0,0x0,0x0,0x0,
++0x0,0x3,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x1a,0xd,0x9,0x9,0x9,0x9,0x9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x20,0x30,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x1b,0xc,0x8,0x8,0x8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x1b,0xc,0x8,0x8,0x8,0xc,0xb,0x8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x3,0x4,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xa0,0x60,0x20,0x20,0x20,0x60,0xa0,0x20,0x20,0x20,0x30,0x0,
++0x0,0x0,0x0,0x0,0x0,0x5,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7,0x8,0x8,0x7,0x0,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x0,0x80,0x40,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x2,0x2,0x2,0xf,0x2,0x2,0x2,0x2,0x2,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0xc,0x4,0x4,0x4,0x4,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0xc0,0x60,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x8,0x8,0x4,0x4,0x2,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x11,0x9,0x9,0xa,0xa,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x20,0x20,0xa0,0xa0,0x40,0x40,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x8,0x4,0x2,0x1,0x2,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x40,0x80,0x0,0x80,0x40,0x20,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x8,0x4,0x4,0x2,0x1,0x1,0x2,0x2,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0xf,0x8,0x0,0x1,0x2,0x4,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x40,0x80,0x0,0x0,0x40,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x8,0x8,0x8,0x8,0x8,0x10,0x20,0x10,0x8,0x8,0x8,0x8,0x8,0x4,0x0,
++0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x40,0x20,0x20,0x20,0x20,0x20,0x10,0x8,0x10,0x20,0x20,0x20,0x20,0x20,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x4,0x4,0x25,0x1e,0x4,0x7,0xc,0x14,0x23,0x22,0x25,0x18,0x0,0x0,0x0,0x0,0x0,0x20,0xc0,0x0,0x80,0xe0,0x90,0x88,0x8,0x8,0x10,0x20,0xc0,
++0x4,0x4,0x4,0x47,0x3c,0x4,0x4,0x1f,0x24,0x42,0x42,0x41,0x22,0x1c,0x0,0x0,0x0,0x0,0x60,0x80,0x0,0x40,0x40,0xf0,0x48,0x84,0x84,0x4,0x84,0x8,0x30,0x0,
++0x0,0x0,0x0,0x0,0x0,0x10,0x18,0x10,0x10,0x10,0x10,0x11,0xa,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x10,0x8,0x18,0x10,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x20,0x30,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x14,0xc,0x0,0x0,0x0,0x0,0x0,0x20,0x10,0x8,0x4,0x4,0xc,0x8,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0xf,0x1,0x2,0x0,0x11,0xe,0x0,0x0,0x0,0x0,0x1,0x2,0xc,0x0,0x0,0x0,0x80,0x80,0x0,0x0,0xc0,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0xf,0x0,0x1,0x0,0x21,0x1e,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0xc,0x0,0x0,0x80,0x40,0x80,0x0,0xe0,0x10,0x10,0x10,0x10,0x20,0x20,0xc0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x0,0x1,0x0,0x3,0x1c,0x1,0x3,0x4,0x8,0x10,0x20,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0xc0,0x80,0x0,0x0,0x80,0x80,0x40,0x38,0x0,
++0x0,0xf,0x0,0x1,0x0,0x3,0x3c,0x1,0x2,0x3,0x4,0x4,0x8,0x10,0x20,0x0,0x0,0x0,0x80,0x0,0x0,0xc0,0x80,0x0,0x0,0x80,0x80,0x80,0x80,0x40,0x3c,0x0,
++0x0,0x0,0x0,0x4,0x4,0x4,0x3f,0x4,0x7,0x4,0xc,0x14,0x34,0x15,0x8,0x0,0x0,0x0,0x0,0x0,0x10,0x8,0x4,0x8,0xe0,0x10,0x8,0x8,0x8,0x30,0xc0,0x0,
++0x0,0x4,0x4,0x7,0x3c,0x4,0x5,0x6,0xc,0x14,0x24,0x64,0x35,0xc,0x4,0x0,0x0,0x0,0x10,0x88,0x4,0x18,0xc0,0x20,0x10,0x8,0x8,0x8,0x10,0xe0,0x0,0x0,
++0x0,0x2,0x2,0x2,0x2,0x43,0x3c,0x4,0x4,0x4,0x8,0x8,0x10,0x22,0x41,0x0,0x0,0x0,0x0,0x20,0x10,0xc8,0x44,0x54,0x4c,0x40,0x40,0x80,0x80,0x80,0x0,0x0,
++0x0,0x4,0x4,0x4,0x4,0x87,0x78,0x8,0x8,0x8,0x10,0x11,0x21,0x45,0x82,0x0,0x8,0x4,0x12,0x48,0x24,0x90,0x88,0xa8,0x98,0x80,0x80,0x0,0x0,0x0,0x0,0x0,
++0x2,0x2,0x2,0x3,0x1d,0x0,0x3,0x1c,0x0,0x3,0x0,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x60,0x80,0x0,0xe0,0x80,0x40,0x40,0xe0,0x20,0x0,0x0,0x0,0xc0,0x0,
++0x4,0x4,0x4,0x7,0x3a,0x1,0x7,0x38,0x0,0x7,0x0,0x20,0x20,0x10,0xf,0x0,0x0,0x8,0xc4,0x12,0x8,0xc4,0x0,0x80,0x80,0xc0,0x40,0x0,0x0,0x0,0x80,0x0,
++0x0,0x1,0x0,0x0,0x1,0x2,0x4,0x8,0x10,0x8,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x0,
++0x0,0x2,0x1,0x1,0x2,0x4,0x8,0x10,0x20,0x10,0x8,0x4,0x2,0x1,0x1,0x0,0x0,0x8,0x4,0x22,0x10,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x10,0x10,0x20,0x20,0x27,0x40,0x40,0x40,0x50,0x50,0x20,0x20,0x1,0x0,0x0,0x80,0x40,0x40,0x40,0x78,0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x0,0x0,
++0x0,0x0,0x10,0x10,0x20,0x20,0x27,0x40,0x40,0x40,0x50,0x50,0x20,0x20,0x1,0x0,0x8,0x84,0x52,0x48,0x44,0x70,0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x0,0x0,
++0x0,0x0,0x10,0xf,0x0,0x3,0x4,0x0,0x20,0x20,0x20,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,
++0x0,0x0,0x10,0xf,0x0,0x3,0x4,0x0,0x20,0x20,0x20,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0x8,0xe4,0x82,0x10,0x8,0x4,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,
++0x0,0x4,0x2,0x2,0x3f,0x1,0x0,0x0,0x1,0x8,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x30,0xc0,0x0,0x0,0x80,0x40,0xe0,0x20,0x0,0x0,0x0,0x0,0xe0,0x0,
++0x0,0x4,0x2,0x2,0x3f,0x1,0x0,0x0,0x1,0x8,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x8,0x4,0xd2,0x8,0x4,0x80,0x40,0xe0,0x20,0x0,0x0,0x0,0x0,0xe0,0x0,
++0x0,0x18,0xc,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x9,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x20,0x40,0x80,0x0,0x0,
++0x0,0x18,0xc,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x9,0x6,0x0,0x0,0x10,0x8,0x24,0x10,0x8,0x0,0x0,0x0,0x0,0x10,0x20,0x40,0x80,0x0,0x0,
++0x0,0x3,0x1,0x1,0x7f,0x1,0x7,0x9,0x9,0x9,0x6,0x0,0x1,0x1,0x2,0xc,0x0,0x0,0x0,0x0,0xf8,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,
++0x3,0x1,0x1,0x1,0x7f,0x1,0x7,0x9,0x9,0x9,0x6,0x0,0x1,0x1,0x2,0xc,0x8,0x4,0x12,0x8,0xf4,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x10,0x8,0x8,0xb,0x7c,0x8,0x8,0x8,0x9,0x8,0x8,0x8,0x7,0x0,0x0,0x80,0x40,0x40,0x40,0xfc,0x40,0x40,0x40,0x40,0x40,0x80,0x0,0x0,0xf0,0x0,
++0x0,0x0,0x10,0x8,0x8,0xb,0x7c,0x8,0x8,0x8,0x9,0x8,0x8,0x8,0x7,0x0,0x8,0x84,0x52,0x48,0x44,0xf0,0x40,0x40,0x40,0x40,0x40,0x80,0x0,0x0,0xf0,0x0,
++0x0,0x10,0xf,0x1,0x2,0x4,0x8,0x1f,0x22,0x44,0x4,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,0x0,
++0x0,0x10,0xf,0x1,0x2,0x4,0x8,0x1f,0x22,0x44,0x4,0x4,0x2,0x1,0x0,0x0,0x8,0x24,0x92,0x8,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,0x0,
++0x0,0x4,0x4,0x47,0x3c,0x9,0x8,0x8,0x10,0x10,0x12,0x22,0x21,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x30,0x40,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,
++0x0,0x4,0x4,0x47,0x3c,0x9,0x8,0x8,0x10,0x10,0x12,0x22,0x21,0x40,0x0,0x0,0x8,0x4,0x12,0x8,0x4,0xe0,0x30,0x40,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,
++0x0,0x2,0x2,0x2,0x3,0x7e,0x4,0x7,0x4,0xc,0x8,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x80,0xc0,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x20,0x20,0xc0,0x0,
++0x0,0x4,0x4,0x5,0x7,0x7c,0x8,0xb,0xc,0x18,0x10,0x0,0x0,0x0,0x0,0x3,0x0,0x8,0x4,0x12,0x88,0x4,0x0,0xc0,0x20,0x10,0x10,0x10,0x20,0x20,0xc0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1f,0x8,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x20,0x40,0x80,0x0,
++0x0,0x0,0x0,0x1,0x6,0x78,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x7,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x8,0x8,0x8,0x8,0x10,0x20,0xc0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3,0xc,0xf0,0x40,0x0,0x0,0x0,0x0,0x0,0x1,0xe,0x0,0x0,0x8,0x4,0x12,0xc8,0x24,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x80,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7f,0x21,0x2,0x4,0x4,0x4,0x4,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x8,0xfc,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7f,0x21,0x2,0x4,0x4,0x4,0x4,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x8,0xfc,0xc0,0x8,0x4,0x12,0x8,0x4,0x0,0x0,0x0,0xf0,0x0,
++0x0,0x0,0x2,0x1,0x1,0x1,0x1,0x1,0x6,0x8,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x60,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x0,
++0x0,0x0,0x2,0x1,0x1,0x1,0x1,0x1,0x6,0x8,0x10,0x10,0x10,0x8,0x7,0x0,0x8,0x4,0x12,0x8,0x4,0x30,0x60,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x0,
++0x0,0x0,0xc,0x4,0x7,0x7c,0x24,0x8,0x8,0x10,0x10,0x23,0x44,0x4,0x3,0x0,0x0,0x0,0x20,0x10,0x8,0x18,0x40,0x40,0x40,0x40,0x40,0xe0,0x50,0x48,0x84,0x0,
++0x0,0x20,0x10,0x10,0x13,0x20,0x20,0x20,0x40,0x4a,0x4a,0x52,0x51,0x60,0x40,0x0,0x0,0x0,0x0,0x1c,0xe8,0x10,0x20,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,
++0x0,0x2,0x1,0x21,0x11,0x17,0x19,0x11,0x31,0x4a,0x4a,0x44,0x44,0x4a,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x8,0x4,0x4,0x4,0x74,0x8c,0x94,0x62,0x0,0x0,
++0x0,0x10,0x8,0x8,0x8,0x1e,0x69,0xa,0xc,0x18,0x28,0x48,0xa9,0x29,0x18,0x0,0x0,0x0,0x0,0x0,0x60,0x90,0x10,0x10,0x10,0x10,0x10,0xf0,0x18,0x24,0xc2,0x0,
++0x0,0x0,0x0,0x7,0x19,0x21,0x42,0x42,0x42,0x44,0x44,0x28,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x30,0x8,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0xc0,0x0,
++0x0,0x20,0x10,0x10,0x10,0x27,0x20,0x20,0x40,0x48,0x48,0x53,0x54,0x64,0x43,0x0,0x0,0x80,0x40,0x50,0x78,0xc0,0x40,0x40,0x40,0x40,0x40,0xc0,0x70,0x48,0x84,0x0,
++0x0,0x20,0x10,0x10,0x10,0x27,0x20,0x20,0x40,0x48,0x48,0x53,0x54,0x64,0x43,0x0,0x8,0x84,0x52,0x48,0x74,0xc0,0x40,0x40,0x40,0x40,0x40,0xc0,0x70,0x48,0x84,0x0,
++0x0,0x20,0x10,0x10,0x10,0x27,0x20,0x20,0x40,0x48,0x48,0x53,0x54,0x64,0x43,0x0,0xc,0x92,0x52,0x4c,0x70,0xc0,0x40,0x40,0x40,0x40,0x40,0xc0,0x70,0x48,0x84,0x0,
++0x0,0x0,0x2,0x3e,0x4,0x8,0x8,0x10,0x10,0x20,0x20,0x20,0x20,0x10,0xf,0x0,0x0,0x0,0x0,0x20,0x20,0x30,0x28,0x24,0x20,0x20,0x40,0x40,0x40,0x80,0x0,0x0,
++0x0,0x0,0x2,0x3e,0x4,0x8,0x8,0x10,0x10,0x20,0x20,0x20,0x20,0x10,0xf,0x0,0x8,0x4,0x12,0x28,0x24,0x30,0x28,0x24,0x20,0x20,0x40,0x40,0x40,0x80,0x0,0x0,
++0x0,0x0,0x2,0x3e,0x4,0x8,0x8,0x10,0x10,0x20,0x20,0x20,0x20,0x10,0xf,0x0,0xc,0x12,0x12,0x2c,0x20,0x30,0x28,0x24,0x20,0x20,0x40,0x40,0x40,0x80,0x0,0x0,
++0x0,0x2,0x1,0x0,0x1,0x2,0x2,0x1,0x0,0x3,0x4,0x8,0x78,0x26,0x1,0x0,0x0,0x0,0x80,0xc0,0x0,0x0,0x0,0x0,0xe0,0x98,0x84,0x8c,0x90,0x80,0x0,0x0,
++0x0,0x2,0x1,0x0,0x1,0x2,0x2,0x1,0x0,0x3,0x4,0x8,0x78,0x26,0x1,0x0,0x8,0x4,0x92,0xc8,0x4,0x0,0x0,0x0,0xe0,0x98,0x84,0x8c,0x90,0x80,0x0,0x0,
++0x0,0x2,0x1,0x0,0x1,0x2,0x2,0x1,0x0,0x3,0x4,0x8,0x78,0x26,0x1,0x0,0xc,0x12,0x92,0xcc,0x0,0x0,0x0,0x0,0xe0,0x98,0x84,0x8c,0x90,0x80,0x0,0x0,
++0x0,0x0,0x0,0x0,0x7,0x8,0x10,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x18,0x6,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x7,0x8,0x10,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x4,0x12,0x8,0x84,0x40,0x20,0x18,0x6,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x7,0x8,0x10,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x18,0x24,0x24,0x18,0x80,0x40,0x20,0x18,0x6,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x20,0x17,0x10,0x10,0x20,0x27,0x20,0x40,0x48,0x48,0x51,0x52,0x62,0x41,0x0,0x0,0x70,0xc0,0x40,0x40,0x40,0xf8,0x40,0x40,0x40,0x40,0xc0,0x70,0x48,0x84,0x0,
++0x0,0x20,0x17,0x10,0x10,0x20,0x27,0x20,0x40,0x48,0x48,0x51,0x52,0x62,0x41,0x0,0x8,0xe4,0x52,0x48,0x44,0x40,0xf8,0x40,0x40,0x40,0x40,0xc0,0x70,0x48,0x84,0x0,
++0x0,0x20,0x17,0x10,0x10,0x20,0x27,0x20,0x40,0x48,0x48,0x51,0x52,0x62,0x41,0x0,0x0,0xec,0x52,0x52,0x4c,0x40,0xf0,0x40,0x40,0x40,0x40,0xc0,0x70,0x48,0x84,0x0,
++0x0,0x1,0x1,0x1,0x3f,0x1,0x1,0x1f,0x1,0x1,0x1,0x1d,0x23,0x21,0x1e,0x0,0x0,0x0,0x0,0xf0,0x0,0x0,0xe0,0x0,0x0,0x0,0x0,0x0,0xc0,0x30,0x8,0x0,
++0x0,0x0,0x13,0xc,0x0,0x1,0x1,0x1,0x2,0x1a,0x27,0x44,0x48,0x30,0x0,0x1,0x0,0x0,0x80,0x80,0x80,0x0,0x10,0x10,0x10,0x10,0xa0,0x70,0x28,0x44,0x80,0x0,
++0x0,0x8,0x4,0x4,0x7,0x7c,0x4,0x1c,0x24,0x24,0x24,0x1c,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x90,0xc8,0x4,0xc,0x10,0x0,0x0,0x10,0x10,0x10,0x18,0xf0,0x0,
++0x0,0x1,0x10,0x10,0x10,0x1f,0x11,0x29,0x45,0x42,0x45,0x48,0x30,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0xc0,0x20,0x10,0x8,0x8,0x8,0x10,0x10,0x20,0xc0,0x0,
++0x2,0x2,0x2,0x2,0x23,0x1e,0x4,0x4,0x44,0x3f,0x4,0x4,0x4,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x10,0x8,0xc8,0x8,0x8,0x8,0x8,0x8,0xf0,0x0,
++0x0,0x0,0x2,0x1,0x0,0x0,0x3,0x24,0x1f,0x2,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x30,0x48,0x88,0x8,0x8,0x70,0x0,0x80,0x80,0x40,
++0x0,0x2,0x1,0x0,0x6,0x9,0x10,0x11,0x7e,0x8,0x8,0x4,0x2,0x2,0x1,0x0,0x0,0x0,0x80,0x40,0x40,0x80,0x30,0xc8,0x4,0x4,0x88,0x70,0x0,0x0,0x0,0x80,
++0x0,0x0,0x0,0x1,0x0,0x0,0x11,0x12,0x14,0x14,0x18,0x1a,0x11,0x10,0x1,0x2,0x0,0x0,0x0,0x0,0x80,0x80,0xe0,0x90,0x88,0x88,0x88,0x88,0x90,0xe0,0x0,0x0,
++0x0,0x0,0x10,0x10,0x10,0x11,0x22,0x24,0x24,0x24,0x28,0x2a,0x31,0x10,0x0,0x3,0x0,0x80,0x40,0x40,0xf8,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x58,0xe0,0x80,0x0,
++0x0,0x0,0x0,0x2,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xf,0x11,0x11,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0xc0,0x0,0x0,0x0,0x0,0xc0,0x30,0x8,0x0,0x0,
++0x0,0x2,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1f,0x21,0x41,0x42,0x3c,0x0,0x0,0x0,0x0,0x0,0x10,0x38,0xc0,0x0,0x0,0x0,0x0,0xc0,0x30,0x8,0x4,0x0,
++0x0,0x1c,0x2,0x2,0x4,0x8,0x10,0x10,0x10,0x13,0x14,0x18,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x8,0x8,0x30,0xc0,0x0,
++0x0,0x10,0x8,0x9,0xa,0xa,0x12,0x14,0x14,0x18,0x8,0x0,0x0,0x0,0x1,0x2,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x0,
++0x0,0x0,0xf,0x0,0x0,0x0,0x1,0x2,0x7,0x8,0x10,0x3,0x4,0x4,0x3,0x0,0x0,0x40,0xa0,0x20,0x40,0x80,0x0,0xf0,0x8,0x4,0x4,0x84,0x44,0x28,0xf0,0x0,
++0x0,0x8,0x8,0x8,0xe,0x79,0xa,0xc,0x8,0x18,0x28,0x28,0x68,0x18,0x8,0x0,0x0,0x0,0x20,0x50,0x88,0x8,0x10,0x10,0x10,0x10,0x10,0x12,0x14,0x8,0x0,0x0,
++0x0,0x3,0x1c,0x0,0x1,0x2,0x4,0xf,0x18,0x20,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xc0,0x40,0x80,0x0,0x0,0xe0,0x10,0x8,0x8,0x8,0x10,0x10,0x60,0x80,0x0,
++0x0,0x0,0x8,0x4,0x4,0x7,0x3c,0x7,0xc,0x14,0x24,0x34,0xc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x8,0x8,0x8,0x8,0x10,0x20,0xc0,0x0,0x0,
++0x0,0x10,0x8,0x8,0x4f,0x38,0xb,0xc,0x8,0x18,0x28,0x48,0x68,0x18,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x18,0x4,0x4,0x4,0x4,0x8,0x10,0x60,0x0,
++0x0,0x0,0x3,0x1c,0x0,0x1,0x1,0x3,0xf,0x12,0x22,0x44,0x38,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x0,0x0,0xf0,0x8,0x4,0x4,0x64,0x94,0x88,0x70,0x0,
++0x0,0xf,0x0,0x1,0x3,0x6,0x8,0x13,0x24,0x3,0x2,0x4,0x18,0x26,0x41,0x0,0x0,0xc0,0x80,0x0,0xe0,0x10,0x10,0x90,0xa0,0xc0,0x0,0x0,0x38,0x44,0x88,0x0,
++0x0,0x2,0x1,0x1,0x1f,0x1,0x2,0x3,0x4,0x8,0x11,0x2,0x2,0x2,0x1,0x0,0x0,0x0,0x0,0xe0,0x0,0x8,0xc,0xd0,0x60,0xc0,0x40,0x40,0x40,0x0,0xf8,0x0,
++0x0,0x2,0x1,0x1,0x1,0x2,0x2,0x2,0x3,0x2,0x4,0x4,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x40,0x22,0x22,0x24,0x24,0x18,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x1f,0x0,0x2,0x1,0x1,0x1,0x1,0x1,0x2,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0xf0,0x10,0x60,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x3f,0x0,0x0,0x0,0x2,0x1,0x1,0x1,0x1,0x2,0x2,0x4,0x8,0x0,0x0,0x0,0xf8,0x8,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x5,0x9,0x11,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x1,0x3,0x5,0x9,0x11,0x21,0x1,0x1,0x1,0x1,0x1,0x0,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1,0x11,0x1f,0x10,0x10,0x10,0x0,0x0,0x0,0x0,0x3,0xc,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x0,
++0x0,0x0,0x1,0x21,0x3f,0x20,0x20,0x20,0x0,0x0,0x0,0x0,0x0,0x3,0xc,0x0,0x0,0x0,0x0,0x8,0xfc,0x8,0x8,0x10,0x10,0x20,0x20,0x40,0x80,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x1f,0x1,0x1,0x1,0x1,0x1,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x3f,0x1,0x1,0x1,0x1,0x1,0x1,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,
++0x0,0x0,0x1,0x1,0x1,0x3f,0x3,0x5,0x9,0x11,0x21,0x1,0x5,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x1,0x2,0x4,0x8,0x10,0x20,0x42,0x1,0x0,0x0,0x80,0x80,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x0,
++0x0,0x2,0x2,0x2,0x3f,0x2,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x21,0x40,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,0x0,
++0x0,0x2,0x2,0x2,0x3f,0x2,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x21,0x40,0x0,0x8,0x4,0x12,0x8,0xe4,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,0x0,
++0x0,0x8,0x8,0x4,0x4,0x3f,0x2,0x1,0x1,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x0,0x0,0x0,0x70,0x80,0x80,0x40,0x40,0x20,0x20,0x0,
++0x0,0x8,0x8,0x4,0x4,0x3f,0x2,0x1,0x1,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x4,0x12,0x8,0xe4,0x0,0x0,0x0,0x70,0x80,0x80,0x40,0x40,0x20,0x20,0x0,
++0x0,0x2,0x2,0x2,0x3,0x4,0x4,0x8,0x10,0x20,0x0,0x1,0x2,0xc,0x30,0x0,0x0,0x0,0x0,0x10,0xf8,0x10,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x2,0x2,0x2,0x3,0x4,0x4,0x8,0x10,0x20,0x0,0x1,0x2,0xc,0x30,0x0,0x8,0x4,0x12,0x8,0xe4,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x8,0x8,0x8,0xf,0x10,0x20,0x41,0x1,0x2,0x2,0x4,0x8,0x10,0x20,0x0,0x0,0x0,0x0,0x10,0xf8,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x8,0x8,0x8,0xf,0x10,0x20,0x41,0x1,0x2,0x2,0x4,0x8,0x10,0x20,0x0,0x8,0x4,0x12,0x8,0xf4,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x20,0x20,0xf0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0x8,0x4,0x12,0x8,0x24,0xf0,0x20,0x20,0x20,0x40,0xe0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x4,0x4,0x4,0x4,0x7f,0x4,0x4,0x4,0x4,0x4,0x0,0x0,0x1,0x0,0x0,0x40,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x40,0x80,0x80,0x0,0x0,
++0x0,0x0,0x0,0x8,0x8,0x8,0x8,0x7f,0x8,0x8,0x8,0x8,0x9,0x1,0x2,0x0,0x8,0x4,0x92,0x88,0x84,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x18,0x4,0x2,0x30,0x8,0x4,0x0,0x0,0x1,0x2,0x24,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x18,0x4,0x2,0x30,0x8,0x4,0x0,0x0,0x1,0x2,0x24,0x18,0x0,0x8,0x4,0x12,0x8,0x4,0x0,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x1,0x3,0x4,0x8,0x10,0x20,0x0,0x0,0x0,0x0,0x0,0xe0,0x20,0x40,0x40,0x80,0x0,0x0,0x80,0x40,0x30,0x10,0x0,0x0,
++0x0,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x1,0x3,0x4,0x8,0x10,0x20,0x0,0x8,0x4,0x12,0x8,0xe4,0x20,0x40,0x40,0x80,0x0,0x80,0x40,0x20,0x18,0x8,0x0,
++0x0,0x4,0x4,0x4,0x4,0x7,0x7c,0x4,0x4,0x4,0x4,0x4,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x20,0x40,0x80,0x0,0x0,0x0,0x20,0xf0,0x0,0x0,
++0x0,0x0,0x4,0x4,0x4,0x4,0x7,0x7c,0x4,0x4,0x4,0x4,0x4,0x3,0x0,0x0,0x8,0x4,0x12,0x8,0x4,0x0,0xe0,0x20,0x40,0x80,0x0,0x0,0x20,0xf0,0x0,0x0,
++0x0,0x0,0x0,0x20,0x10,0x8,0xc,0x4,0x0,0x0,0x0,0x1,0x2,0xc,0x30,0x0,0x0,0x0,0x20,0x10,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x40,0x20,0x10,0x18,0x8,0x0,0x0,0x1,0x2,0x4,0x18,0x60,0x8,0x4,0x12,0x48,0x24,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x4,0x4,0x7,0x4,0x8,0x8,0x10,0x24,0x2,0x1,0x2,0x4,0x18,0x60,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x8,0x8,0xf,0x8,0x10,0x10,0x20,0x49,0x5,0x2,0x5,0x8,0x30,0xc0,0x0,0x8,0x4,0x52,0xe8,0x44,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x1,0x1f,0x1,0x1,0x7f,0x1,0x1,0x2,0x2,0x4,0x4,0x8,0x10,0x0,0x0,0x20,0xf0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3,0x3e,0x2,0x2,0xff,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x20,0x8,0x4,0x52,0xe8,0x4,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x4,0x3,0x21,0x18,0x8,0x0,0x0,0x0,0x1,0x6,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x4,0x2,0x21,0x11,0x8,0x8,0x0,0x0,0x1,0x2,0x4,0x8,0x30,0x0,0x0,0x0,0x0,0x10,0x10,0x10,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x8,0x4,0x42,0x22,0x10,0x10,0x0,0x1,0x2,0x4,0x8,0x10,0x60,0x0,0x8,0x4,0x12,0x28,0x24,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x1f,0x0,0x0,0x0,0x7f,0x1,0x1,0x2,0x2,0x4,0x4,0x8,0x10,0x20,0x0,0x20,0xf0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0xff,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x20,0x8,0x4,0x92,0xc8,0x4,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x4,0x4,0x4,0x4,0x6,0x5,0x4,0x4,0x4,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x40,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x4,0x4,0x4,0x4,0x6,0x5,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x0,0x8,0x4,0x12,0x8,0x4,0x0,0x0,0x80,0x60,0x20,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0x2,0x2,0x4,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x1f,0x0,0x0,0xc,0x2,0x1,0x0,0x0,0x1,0x2,0x4,0x8,0x30,0x0,0x0,0x10,0xf8,0x10,0x20,0x20,0x40,0x40,0x80,0xc0,0x30,0x10,0x0,0x0,0x0,0x0,
++0x2,0x1,0x0,0x0,0x1f,0x0,0x1,0x3,0x5,0x9,0x11,0x21,0x1,0x1,0x1,0x0,0x0,0x80,0x80,0x0,0xc0,0x80,0x0,0x0,0x40,0x30,0x10,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x4,0x8,0x10,0x0,0x0,0x0,0x20,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x4,0x4,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x20,0x10,0x10,0x8,0x8,0xc,0x4,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x4,0x4,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x0,0x0,0x0,0x8,0x4,0x12,0x8,0x44,0x20,0x10,0x10,0x8,0x8,0xc,0x4,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x4,0x4,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x0,0x0,0x0,0x0,0xc,0x12,0x12,0x4c,0x20,0x10,0x10,0x8,0x8,0xc,0x4,0x0,0x0,0x0,0x0,
++0x0,0x0,0x8,0x8,0x8,0x8,0x9,0xe,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x60,0x80,0x0,0x0,0x0,0x0,0x20,0xf0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x20,0x20,0x21,0x21,0x26,0x38,0x20,0x20,0x20,0x20,0x1f,0x0,0x0,0x8,0x4,0x12,0x8,0x4,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x80,0xc0,0x0,0x0,
++0x0,0x0,0x0,0x20,0x20,0x21,0x21,0x26,0x38,0x20,0x20,0x20,0x20,0x1f,0x0,0x0,0x0,0xc,0x12,0x12,0xc,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x80,0xc0,0x0,0x0,
++0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x4,0x8,0x10,0x20,0x0,0x0,0x0,0x20,0xf0,0x20,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x1,0x1,0x2,0x4,0x8,0x10,0x20,0x0,0x8,0x4,0x12,0x48,0xe4,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x1,0x1,0x2,0x4,0x8,0x10,0x20,0x0,0x0,0xc,0x12,0x52,0xec,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x18,0x24,0x43,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x30,0xe,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x18,0x24,0x43,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x4,0x12,0x8,0x4,0x0,0x0,0x0,0xc0,0x30,0xe,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x18,0x24,0x43,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc,0x12,0x12,0xc,0x0,0x0,0x0,0xc0,0x30,0xe,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x1,0x7f,0x1,0x1,0x9,0x9,0x11,0x21,0x1,0x5,0x2,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x20,0x10,0x8,0x8,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x1,0x1,0x7f,0x1,0x1,0x9,0x9,0x11,0x21,0x5,0x2,0x0,0x8,0x4,0x12,0x8,0x4,0x8,0xfc,0x0,0x0,0x20,0x10,0x8,0x8,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x1,0x1,0x7f,0x1,0x1,0x9,0x9,0x11,0x21,0x5,0x2,0x0,0xc,0x12,0x12,0xc,0x0,0x8,0xfc,0x0,0x0,0x20,0x10,0x8,0x8,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x6,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x10,0x20,0x20,0x40,0x80,0x80,0x40,0x40,0x0,0x0,0x0,
++0x0,0x0,0xe,0x1,0x0,0x0,0x1c,0x3,0x0,0x0,0x1c,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x60,0x20,0x0,0x0,0xc0,0x40,0x0,0x80,0x60,0x20,0x0,0x0,
++0x0,0x2,0x2,0x2,0x2,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x10,0x3f,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x20,0x10,0xf8,0x8,0x8,0x0,
++0x0,0x0,0x0,0x0,0x0,0x4,0x2,0x1,0x0,0x1,0x2,0x4,0x8,0x10,0x60,0x0,0x0,0x0,0x20,0x10,0x20,0x20,0x40,0x80,0x80,0x60,0x20,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x3,0x3e,0x2,0x2,0x3,0x7e,0x2,0x2,0x2,0x2,0x2,0x1,0x0,0x0,0x0,0x40,0xe0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x8,0x4,0x5,0x3e,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x10,0x20,0x0,0x80,0x80,0x40,0x20,
++0x0,0x10,0x8,0x8,0x4,0x5,0x7e,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x10,0x20,0x0,0x80,0x80,0x40,0x40,0x20,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0xf,0x0,0x0,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x40,0x48,0xfc,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x20,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x0,0x0,0x1f,0x0,0x0,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0xe0,0x20,0x20,0xe0,0x20,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x3f,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0xf0,0x10,0x0,0x0,0x0,0x0,
++0x0,0x0,0xf,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x6,0x18,0x0,0x0,0x40,0xe0,0x0,0x10,0xf8,0x10,0x10,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x0,0x1,0x1,0x2,0x4,0x8,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x84,0x88,0x90,0xa0,0xc0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x20,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x40,0x40,0xe0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x10,0x1f,0x10,0x10,0x0,0x0,0x0,0x0,0x1,0x2,0x4,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x20,0x3f,0x20,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x4,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x1f,0x9,0x9,0x9,0x9,0x7f,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x40,0xe0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x0,0x2,0x1,0x1,0x1,0x1,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x40,0x80,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x4,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0xf8,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x10,0x8,0x6,0x2,0x0,0x0,0x0,0x1,0x2,0x24,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x2,0x2,0x22,0x3f,0x20,0x20,0x0,0x0,0x0,0x0,0x1,0x2,0x4,0x8,0x0,0x8,0x4,0x12,0x28,0xf4,0x20,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x1,0x1,0x1,0xf,0x1,0x1,0x2,0x2,0x2,0x5,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,
++0x0,0x0,0x4,0x4,0x4,0x7,0x8,0x10,0x21,0x1,0x2,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0xe0,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x2,0x2,0x4,0x4,0x8,0xf,0x10,0x10,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x20,0xe0,0x10,0x10,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x10,0x10,0x20,0xc0,0x20,0x10,0x10,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x2,0x2,0x4,0x4,0x8,0x10,0x10,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x20,0x10,0x10,0x8,0x8,0xfc,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x0,0x40,0xc0,0x40,0x0,0x8,0x8,0xf8,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x20,0x20,0x0,0x0,0x1,0x2,0x4,0x8,0x10,0x3f,0x0,0x0,0x0,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x8,0x8,0xf8,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x10,0x20,0x28,0x2f,0x28,0x20,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x8,0x28,0xe8,0x28,0x8,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x3,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x71,0x21,0x22,0x24,0x28,0x38,0x24,0x22,0x21,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x10,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x60,0x30,0x30,0x28,0x28,0x24,0x24,0x22,0x22,0x21,0x70,0x0,0x0,0x0,0x0,0x0,0xc,0x18,0x18,0x28,0x28,0x48,0x48,0x88,0x88,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x60,0x30,0x28,0x24,0x22,0x21,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0x8,0x8,0x88,0x48,0x28,0x18,0xc,0x0,0x0,0x0,0x0,
++0x0,0x1f,0x10,0x10,0x0,0x4,0x7,0x4,0x0,0x10,0x10,0x1f,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x0,0x20,0xe0,0x20,0x0,0x8,0x8,0xf8,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x10,0x20,0x20,0x20,0x20,0x20,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x8,0x8,0x8,0x8,0x8,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x10,0x8,0x4,0x2,0x4,0x8,0x10,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x8,0x8,0xf8,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x41,0x41,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0xfc,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x6,0x9,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x40,0xa0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x3,0x1,0xf,0x11,0x21,0x21,0x21,0x11,0xf,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0xe0,0x10,0x8,0x8,0x8,0x10,0xe0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x70,0x10,0x8,0x4,0x2,0x1,0x2,0x4,0x8,0x10,0x70,0x0,0x0,0x0,0x0,0x0,0x1c,0x10,0x20,0x40,0x80,0x0,0x80,0x40,0x20,0x10,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x43,0x21,0x11,0x11,0x11,0x11,0xf,0x1,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x84,0x8,0x10,0x10,0x10,0x10,0xe0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x10,0x20,0x20,0x20,0x20,0x10,0x48,0x44,0x7c,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x8,0x8,0x8,0x8,0x10,0x24,0x44,0x7c,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0xc0,0x40,0x40,0x40,0x40,0x40,0xd0,0x20,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x8,0xc,0xb,0x8,0x8,0x8,0x0,0x0,0x80,0x40,0x40,0x80,0x0,0xc0,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0xc,0x12,0x22,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x3,0x4,0x2,0x1,0x2,0x4,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3,0x4,0x4,0x2,0x1,0x2,0x4,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x0,0x0,0x80,0x0,0x0,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x2,0x4,0x4,0x3,0x2,0x4,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x3,0x0,0x0,0x0,0x40,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x20,0xc0,0x0,
++0x0,0x0,0x0,0x1,0xa,0x14,0x4,0x4,0x4,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0,
++0x0,0x3,0x4,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0xe0,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x80,0x0,0x0,0x0,
++0x0,0x0,0x0,0x18,0x8,0x8,0xd,0xa,0x9,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x30,0x40,0x80,0x0,0x0,0x0,0x80,0x40,0x70,0x0,0x0,0x0,0x0,
++0x4,0xa,0x2,0x1,0x1,0x1,0x3,0x2,0x2,0x4,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x50,0x50,0x20,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0xc,0xb,0x8,0x8,0x8,0x0,0x0,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xd0,0x20,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x18,0x8,0x4,0x4,0x4,0x2,0x2,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x10,0x20,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x4,0x8,0x7,0x8,0x8,0x7,0x4,0x8,0x8,0x8,0x7,0x0,0x2,0x1,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0xc0,0x20,0x20,0xc0,0x0,
++0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x24,0x4,0x4,0x4,0x4,0x4,0x8,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x40,0x40,0x40,0x40,0x40,0x40,0x50,0x20,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x18,0x14,0x13,0x10,0x10,0x10,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x40,0x20,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x9,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x8,0x14,0x4,0x4,0x4,0x4,0x4,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x7,0x9,0x11,0x11,0x11,0x11,0x11,0x9,0x7,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x8,0x14,0x4,0x2,0x2,0x1,0x1,0x2,0x4,0x8,0x8,0x10,0x0,0x0,0x0,0x0,0x10,0x20,0x20,0x40,0x80,0x0,0x0,0x80,0x80,0x40,0x50,0x20,0x0,0x0,0x0,
++0x0,0x1,0x1,0x11,0x29,0x9,0x9,0x9,0x9,0x9,0x9,0x7,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x4,0x8,0x11,0x11,0x11,0x11,0x11,0xa,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x20,0x10,0x10,0x10,0x10,0x10,0xa0,0x40,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x2,0x2,0x4,0x4,0x8,0xf,0x10,0x10,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x20,0xe0,0x10,0x10,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x0,0x0,0xe0,0x10,0x8,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x8,0x10,0xe0,0x10,0x8,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1f,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x3f,0x20,0x0,0x0,0x0,0x0,0x0,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xf8,0x8,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x0,0x20,0xe0,0x20,0x0,0x8,0x8,0xf8,0x0,0x0,0x0,0x0,
++0x8,0x0,0x7f,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x20,0x0,0xf8,0x8,0x8,0x20,0xe0,0x20,0x0,0x8,0x8,0xf8,0x0,0x0,0x0,0x0,
++0x0,0x33,0x49,0x9,0x5,0x3,0x5,0x9,0x9,0x11,0x11,0x63,0x0,0x0,0x0,0x0,0x0,0x98,0x24,0x20,0x40,0x80,0x40,0x20,0x20,0x10,0x10,0x8c,0x0,0x0,0x0,0x0,
++0x0,0x17,0x18,0x10,0x0,0x0,0x1,0x0,0x20,0x20,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x8,0x10,0xe0,0x10,0x8,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x20,0x20,0x20,0x23,0x24,0x28,0x30,0x20,0x60,0x0,0x0,0x0,0x0,0x0,0xc,0x8,0x18,0x28,0xc8,0x8,0x8,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x4,0x74,0x23,0x20,0x20,0x20,0x23,0x24,0x28,0x30,0x20,0x60,0x0,0x0,0x0,0x0,0x40,0x4c,0x88,0x18,0x28,0xc8,0x8,0x8,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x21,0x22,0x3c,0x22,0x21,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x60,0x80,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x38,0x0,0x0,0x0,0x0,
++0x0,0x1f,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x28,0x10,0x0,0x0,0x0,0x0,0x0,0xf0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x30,0x28,0x28,0x24,0x24,0x22,0x21,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x18,0x28,0x28,0x48,0x48,0x88,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x10,0x20,0x20,0x20,0x20,0x20,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x8,0x8,0x8,0x8,0x8,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xf0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0xf,0x10,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0xd0,0x30,0x10,0x0,0x0,0x0,0x0,0x0,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x41,0x41,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0xfc,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x1c,0x8,0x8,0x4,0x4,0x2,0x1,0x0,0x1,0x12,0xc,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x8,0x10,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x70,0x10,0x8,0x4,0x2,0x1,0x2,0x4,0x8,0x10,0x70,0x0,0x0,0x0,0x0,0x0,0x1c,0x10,0x20,0x40,0x80,0x0,0x80,0x40,0x20,0x10,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x3,0x1,0x1f,0x21,0x41,0x41,0x41,0x21,0x1f,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0xf0,0x8,0x4,0x4,0x4,0x8,0xf0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3f,0x0,0x0,0x0,0x0,0x0,0x38,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xf8,0x4,0x4,0x0,0x0,
++0x0,0x38,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x10,0x10,0x10,0x10,0x30,0xd0,0x10,0x10,0x10,0x38,0x0,0x0,0x0,0x0,
++0x0,0x73,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x7f,0x0,0x0,0x0,0x0,0x0,0x9c,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0xfc,0x0,0x0,0x0,0x0,
++0x0,0x73,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x7f,0x0,0x0,0x0,0x0,0x0,0x9c,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0xfc,0x4,0x4,0x0,0x0,
++0x0,0x3e,0x24,0x4,0x4,0x7,0x4,0x4,0x4,0x4,0x4,0xf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x8,0x4,0x4,0x4,0x8,0xf0,0x0,0x0,0x0,0x0,
++0x0,0x70,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0x8,0x88,0x48,0x48,0x48,0x88,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x1c,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x8,0x8,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x8,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x2f,0x30,0x20,0x0,0x0,0x1,0x0,0x0,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0xe0,0x10,0x8,0x4,0x4,0xfc,0x4,0x4,0x8,0x10,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x71,0x22,0x24,0x24,0x24,0x3c,0x24,0x24,0x24,0x22,0x71,0x0,0x0,0x0,0x0,0x0,0xf0,0x8,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x8,0xf0,0x0,0x0,0x0,0x0,
++0x0,0x3,0x4,0x8,0x8,0x4,0x3,0x0,0x3,0x4,0x8,0x38,0x0,0x0,0x0,0x0,0x0,0xfc,0x8,0x8,0x8,0x8,0xf8,0x88,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x8,0x0,0xf,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x40,0x40,0xc0,0x40,0x40,0xd0,0x20,0x0,0x0,0x0,0x0,
++0x0,0x7,0x8,0x10,0x17,0x18,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x20,0xc0,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x40,0x40,0x80,0x40,0x40,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x2,0x2,0x2,0x2,0x4,0x4,0x8,0x1f,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xf0,0x10,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x1f,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x20,0xe0,0x0,0x0,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x4,0x0,0x7,0x8,0x10,0x10,0x1f,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x80,0x40,0x20,0x20,0xe0,0x0,0x0,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x33,0x9,0x9,0x5,0x7,0x9,0x9,0x11,0x23,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x98,0x20,0x20,0x40,0xc0,0x20,0x20,0x10,0x88,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0xb,0xc,0x8,0x0,0x1,0x0,0x0,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x20,0x20,0xc0,0x20,0x20,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x38,0x10,0x10,0x10,0x11,0x12,0x14,0x18,0x30,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x70,0x20,0x60,0xa0,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,
++0x0,0x4,0x3,0x38,0x10,0x10,0x10,0x11,0x12,0x14,0x18,0x30,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x70,0x20,0x60,0xa0,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1c,0x8,0x8,0x9,0xe,0x9,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x60,0x80,0x80,0x0,0x0,0x0,0x80,0x90,0x60,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0xf,0x4,0x4,0x4,0x4,0x4,0x14,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x38,0x10,0x18,0x14,0x12,0x12,0x11,0x10,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x10,0x30,0x50,0x90,0x90,0x10,0x10,0x38,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x70,0x20,0x20,0x20,0xe0,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3,0x4,0x8,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0xb,0x1c,0x8,0x8,0x8,0x8,0xc,0xb,0x8,0x8,0x8,0x1c,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x40,0x0,0x0,0x0,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x11,0x1,0x1,0x1,0x1,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1c,0x8,0x8,0x4,0x4,0x4,0x2,0x1,0x1,0x2,0x14,0x8,0x0,0x0,0x0,0x0,0x70,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0xd,0x13,0x11,0x11,0x11,0x11,0x13,0xd,0x1,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x60,0x90,0x10,0x10,0x10,0x10,0x90,0x60,0x0,0x0,0x80,0x0,
++0x0,0x0,0x0,0x1c,0x8,0x4,0x2,0x1,0x2,0x4,0x8,0x1c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x70,0x20,0x40,0x80,0x0,0x80,0x40,0x20,0x70,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xf0,0x10,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x40,0x40,0x40,0xc0,0x40,0x40,0x40,0xe0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3b,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xf8,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3b,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xf8,0x8,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3c,0x28,0x8,0x8,0xf,0x8,0x8,0x8,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x20,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x38,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x38,0x10,0x10,0x10,0x10,0x90,0x90,0x90,0x38,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x1c,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x20,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x7,0x8,0x0,0x0,0x1,0x0,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x20,0xe0,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x38,0x11,0x12,0x12,0x1e,0x12,0x12,0x11,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x3,0x4,0x4,0x4,0x3,0x1,0x2,0xa,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0,0x20,0x20,0x20,0xe0,0x20,0x20,0x20,0x70,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x7,0x0,0x0,0x7,0x8,0x8,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x40,0xc0,0x40,0x40,0x40,0x40,0xc0,0x60,0x0,0x0,0x0,
++0x0,0x0,0x1,0x2,0x0,0x7,0x8,0x8,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x40,0xc0,0x40,0x40,0x40,0x40,0xc0,0x60,0x0,0x0,0x0,
++0x0,0x4,0x2,0x1,0x0,0x7,0x8,0x8,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x40,0x80,0x0,0x0,0x40,0xc0,0x40,0x40,0x40,0x40,0xc0,0x60,0x0,0x0,0x0,
++0x0,0x2,0x1,0x0,0x0,0x7,0x8,0x8,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x40,0xc0,0x40,0x40,0x40,0x40,0xc0,0x60,0x0,0x0,0x0,
++0x0,0x0,0x7,0x0,0x0,0x3,0x4,0x8,0xf,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x80,0x40,0x20,0xe0,0x0,0x0,0x20,0xc0,0x0,0x0,0x0,
++0x0,0x0,0x1,0x2,0x0,0x3,0x4,0x8,0xf,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x80,0x40,0x20,0xe0,0x0,0x0,0x40,0x80,0x0,0x0,0x0,
++0x0,0x4,0x2,0x1,0x0,0x3,0x4,0x8,0xf,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x40,0x80,0x0,0x0,0x80,0x40,0x20,0xe0,0x0,0x0,0x20,0xc0,0x0,0x0,0x0,
++0x0,0x2,0x1,0x0,0x0,0x3,0x4,0x8,0xf,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x80,0x40,0x20,0xe0,0x0,0x0,0x20,0xc0,0x0,0x0,0x0,
++0x0,0x0,0x3,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x2,0x4,0x0,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x4,0x2,0x1,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x2,0x1,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x7,0x0,0x3,0x4,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0xc0,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x0,0x1,0x2,0x0,0x3,0x4,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,
++0x0,0x4,0x2,0x1,0x0,0x3,0x4,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x40,0x80,0x0,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,
++0x0,0x2,0x1,0x0,0x0,0x3,0x4,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x80,0x40,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x0,0x0,
++0x0,0x0,0xf,0x0,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0xe0,0x0,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xb0,0x0,0x0,0x0,
++0x0,0x0,0x1,0x2,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xb0,0x0,0x0,0x0,
++0x0,0x8,0x5,0x2,0x0,0x10,0x10,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,0x60,0x0,0x0,0x0,
++0x0,0x2,0x1,0x0,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xb0,0x0,0x0,0x0,
++0x0,0xf,0x0,0x2,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0xe0,0x0,0x80,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xb0,0x0,0x0,0x0,
++0x0,0x1,0x2,0x0,0x2,0x8,0x8,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x80,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xb0,0x0,0x0,0x0,
++0x4,0x2,0x1,0x0,0x2,0x8,0x8,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x40,0x80,0x0,0x0,0x80,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xb0,0x0,0x0,0x0,
++0x2,0x1,0x0,0x0,0x2,0x8,0x8,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x80,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xb0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x2,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xb0,0x0,0x0,0x0,
++0x0,0x1,0x2,0x4,0x0,0x3,0x4,0x8,0xf,0x8,0x8,0x4,0x3,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x0,0x80,0x40,0x20,0xe0,0x0,0x0,0x20,0xc0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x7,0x8,0x8,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0xc0,0x40,0x40,0x40,0x40,0xc0,0x60,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x7,0x8,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x8,0x7,0x0,0x0,0x0,0x0,0x0,0xa0,0x60,0x20,0x20,0x20,0x60,0xa0,0x20,0x20,0x40,0x80,0x0,
++0x0,0x0,0x1,0x2,0x0,0x1a,0xd,0x9,0x9,0x9,0x9,0x9,0x9,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0xc0,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x0,0x0,0x0,
++0x0,0x0,0x1,0x2,0x0,0xd,0x6,0x4,0x4,0x4,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x60,0x0,0x0,0x0,
++0x0,0x4,0x2,0x1,0x0,0xd,0x6,0x4,0x4,0x4,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x40,0x80,0x0,0x0,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x60,0x0,0x0,0x0,
++0x0,0x2,0x1,0x0,0x0,0xd,0x6,0x4,0x4,0x4,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x60,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x8,0x8,0x10,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0x10,0xa0,0x40,
++0x0,0x4,0x4,0x8,0x1f,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x3,0xc,0x30,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x10,0x10,0xa0,0x40,0xa0,0x10,0x10,0x0,0x0,
++0x0,0x0,0x0,0x0,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x0,0x0,0x0,0x0,
++0x0,0x0,0x3f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xf,0x0,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0x0,0x0,
++0x0,0x4,0x4,0x8,0x1f,0x1,0x1,0x1,0x1,0x2,0x2,0x4,0x8,0x11,0x20,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0x10,0xa0,0x40,
++0x0,0x1,0x1,0x1,0x1,0x7f,0x1,0x1,0x2,0x2,0x4,0x8,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x8,0x0,0x0,
++0x0,0x0,0x3f,0x0,0x0,0x1,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0xc0,0x40,0x80,0x0,0xf8,0x8,0x8,0x8,0x8,0x8,0x10,0x10,0xa0,0x40,
++0x0,0x1,0x9,0x9,0x11,0x1f,0x1,0x1,0x1,0x2,0x2,0x4,0x4,0x8,0x10,0x20,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0x50,0x20,
++0x0,0x0,0x2,0x2,0x4,0x4,0x8,0x8,0x11,0x8,0x8,0x4,0x4,0x2,0x2,0x0,0x0,0x0,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x80,0x80,0x40,0x40,0x20,0x20,0x0,
++0x0,0x0,0x7f,0x2,0x2,0x4,0x8,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x20,0xa0,0x40,
++0x0,0x0,0x3f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x40,0x80,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x4,0x4,0x4,0x4,0x4,0x4,0x8,0x9,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xa0,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x4,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x0,
++0x0,0x0,0x7f,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x11,0x11,0x11,0x11,0x11,0x11,0x1f,0x1,0x1,0x1,0x7f,0x0,0x0,0x0,0x0,0x0,0x10,0x10,0x10,0x10,0x10,0x10,0xf0,0x0,0x0,0x0,0xfc,0x0,0x0,
++0x0,0x0,0x0,0x1,0x2,0x4,0x8,0x11,0x3,0x5,0x9,0x11,0x1,0x1,0x1,0x1,0x0,0x40,0x80,0x0,0x0,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x1f,0x0,0x0,0x0,0x1f,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x40,0x80,0x0,0x0,0xf8,0x8,0x8,0x8,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0xf,0x8,0x8,0x8,0xa,0x9,0x8,0x8,0x8,0x8,0x8,0xf,0x0,0x0,0x0,0x0,0xe0,0x20,0x20,0x20,0x20,0x20,0xa0,0x20,0x20,0x20,0x20,0xe0,0x0,0x0,
++0x0,0x0,0x3f,0x4,0x4,0x4,0x4,0x4,0x4,0x5,0x4,0x4,0x4,0x4,0x4,0x4,0x0,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0xc0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x2,0x2,0x2,0x7f,0x4,0x4,0x4,0xf,0x0,0x0,0x0,0x0,0x0,0x2,0x1,0x0,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0xf0,0x10,0x10,0x20,0x20,0x40,0x80,0x0,
++0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x4,0x4,0x8,0x10,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x20,0xf0,0x8,0x0,0x0,
++0x0,0x10,0x8,0x4,0x2,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x7f,0x1,0x1,0x1,0xf,0x10,0x20,0x20,0x20,0x20,0x10,0xf,0x0,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x10,0xe0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x7f,0x1,0x1,0xf,0x10,0x20,0x20,0x20,0x20,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x10,0xe0,0x0,
++0x0,0x0,0x8,0x8,0x8,0x7f,0x8,0x8,0x8,0x8,0x8,0x9,0x8,0x7,0x0,0x0,0x0,0x0,0x40,0x40,0x40,0xfc,0x40,0x40,0x40,0x80,0x80,0x0,0x0,0xf0,0x0,0x0,
++0x0,0x0,0x7f,0x9,0x9,0x11,0x1f,0x1,0x1,0x1,0x2,0x2,0x4,0x8,0x10,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0xf8,0x8,0x8,0x8,0x8,0x8,0x10,0x10,0x20,0x0,
++0x0,0x0,0x1c,0x4,0x4,0x4,0x2,0x2,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x18,0x0,
++0x0,0x2,0x2,0x4,0x4,0x8,0x8,0x1f,0x1,0x2,0x4,0x8,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x40,0x20,0xf0,0x10,0x0,0x0,
++0x0,0x0,0x0,0x1f,0x0,0x0,0x4,0x2,0x1,0x0,0x0,0x1,0x2,0x4,0x8,0x0,0x0,0x0,0x0,0xf0,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x40,0x20,0x0,0x0,0x0,
++0x0,0x3f,0x8,0x8,0x8,0x10,0x10,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x20,0x20,0x20,0x40,0x40,0xf8,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x0,
++0x0,0x8,0x8,0x8,0x8,0x10,0x10,0x10,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x8,0x8,0x8,0x10,0x10,0x20,0x0,
++0x0,0x2,0x2,0x2,0x2,0x7f,0x2,0x2,0x2,0x4,0x4,0x4,0x8,0x10,0x60,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7c,0x0,
++0x0,0x0,0x1,0x1,0x1,0x2,0x2,0x4,0x4,0x8,0x10,0x20,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8,0x0,0x0,0x0,
++0x0,0x0,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x60,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x84,0x84,0x7c,0x0,
++0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x8,0x4,0x2,0x1,0x0,0x0,0x1,0x2,0x4,0x18,0x60,0x0,0x0,0x10,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x40,0x20,0x10,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x78,0x88,0x8,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x73,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x73,0x73,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x9c,0x9c,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1,0x1,0x1,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x80,0x80,0x80,0x0,0x0,0x80,0x80,0x80,0x0,0x0,0x80,0x80,0x80,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xee,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xee,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xee,0xee,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xee,0xee,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x0,0x1,0x1,0x1,0x0,0x1,0x1,0x1,0x0,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x0,0x1,0x1,0x1,0x0,0x1,0x1,0x1,0x0,0x1,0x1,0x1,0x0,0x80,0x80,0x80,0x0,0x80,0x80,0x80,0x0,0x80,0x80,0x80,0x0,0x80,0x80,0x80,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x0,0x3,0x3,0x3,0x3,0x3,0x3,0x7f,0x7f,0x3,0x3,0x3,0x3,0x3,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xff,0xff,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x8,0x8,0x8,0x8,0x8,0x9,0x8,0xff,0x9,0x9,0x8,0x8,0x8,0x9,0xe,0x8,0x0,0x10,0x30,0x40,0x80,0x0,0x4,0xfe,0x0,0x0,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x20,0x20,0x20,0x27,0xfc,0x24,0x24,0x27,0x24,0x24,0x3c,0xe6,0x45,0x4,0x8,0x10,0x20,0x28,0x24,0xfe,0x20,0x20,0x24,0xa4,0xa8,0xa8,0x90,0x90,0x30,0x4a,0x8a,0x6,
++0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x10,0x17,0x18,0x10,0x0,0x0,0x0,0x10,0x10,0xf,0x0,0x0,0xf0,0x0,0x0,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,
++0x0,0x7,0x8,0x10,0x10,0x0,0x0,0x0,0x3,0x4,0x8,0x10,0x10,0x10,0x1f,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0xe0,0x0,0x0,0x0,0x0,0x10,0x10,0xf0,0x0,
++0x0,0x7,0x8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x8,0x7,0x0,0x0,0xc0,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0xc0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x2f,0xf9,0xa9,0xaa,0xaa,0xac,0xaa,0xaa,0xa9,0xe9,0xad,0xa,0x8,0x8,0x8,0x4,0x7e,0x4,0x4,0x14,0x7c,0x54,0x54,0x54,0x54,0x74,0x54,0x4,0x4,0x14,0xc,
++0x0,0x7f,0x44,0x48,0x48,0x51,0x49,0x49,0x45,0x45,0x45,0x69,0x51,0x40,0x40,0x40,0x4,0xfe,0x8,0x8,0x28,0xf8,0x28,0x28,0x28,0x28,0x28,0xe8,0x28,0x8,0x28,0x10,
++0x10,0x10,0x10,0x11,0x13,0xfc,0x11,0x11,0x12,0x10,0x17,0x1c,0xf0,0x40,0x1,0x6,0x40,0x40,0x90,0x8,0xfc,0x4,0x10,0xf8,0x40,0x44,0xfe,0x40,0xa0,0x90,0xe,0x4,
++0x10,0x10,0x10,0x11,0xff,0x10,0x11,0x15,0x1a,0x30,0xd7,0x10,0x10,0x10,0x51,0x26,0x40,0x40,0x90,0x8,0xfc,0x4,0x10,0xf8,0x40,0x44,0xfe,0x40,0xa0,0x90,0xe,0x4,
++0x0,0x0,0x8,0x7f,0x48,0x48,0x49,0x49,0x48,0x48,0x48,0x78,0x48,0x1,0x2,0x4,0x90,0x90,0x94,0xfe,0x90,0x90,0x8,0x8,0x90,0x90,0x60,0x40,0xa0,0x10,0xe,0x4,
++0x0,0x0,0x8,0x7d,0x4b,0x48,0x49,0x49,0x4a,0x48,0x4f,0x78,0x48,0x0,0x1,0x6,0x40,0x40,0x90,0x8,0xfc,0x4,0x10,0xf8,0x40,0x44,0xfe,0x40,0xa0,0x90,0xe,0x4,
++0x2,0x1,0xff,0x0,0x1f,0x10,0x10,0x10,0x1f,0x5,0xc,0x14,0x24,0xc5,0x6,0x4,0x0,0x4,0xfe,0x10,0xf8,0x10,0x10,0x10,0xf0,0x8,0x90,0x60,0x30,0xe,0x4,0x0,
++0x10,0x10,0x25,0x7f,0x45,0x44,0x45,0x7c,0x44,0x45,0x45,0x45,0x7d,0x45,0x0,0x0,0x20,0x20,0x24,0x24,0xfc,0x0,0xfc,0x4,0x4,0xfc,0x4,0x0,0x2,0x2,0xfe,0x0,
++0x0,0x0,0x1f,0x10,0x93,0x52,0x53,0x10,0x37,0x54,0xd7,0x10,0x24,0x24,0x47,0x4,0x80,0x44,0xfe,0x0,0xf8,0x8,0xf8,0x0,0xbc,0xa4,0xbc,0x40,0x44,0x44,0xfc,0x4,
++0x8,0xff,0x8,0x43,0x32,0x13,0x2,0xf3,0x11,0x13,0x14,0x12,0x16,0x1a,0x13,0x0,0x24,0xfe,0x20,0xf8,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x44,0x44,0xa4,0x4,0xd4,0x8,
++0x20,0x21,0x28,0x3c,0x53,0x90,0x15,0xfe,0x10,0x17,0x10,0x29,0x24,0x44,0x81,0x6,0x18,0xe0,0x40,0x48,0xfc,0xe0,0x5c,0x48,0x40,0xfe,0x90,0x10,0xa0,0x60,0x98,0x8,
++0x4,0x4,0xff,0x4,0x4,0x0,0x8,0x4,0x4,0x2,0x1,0x2,0x4,0x8,0x30,0xc0,0x40,0x44,0xfe,0x40,0x40,0x20,0x20,0x40,0x40,0x80,0x0,0x80,0x40,0x30,0xe,0x4,
++0x0,0x5,0xff,0x11,0x11,0x21,0x24,0x7f,0xa4,0x27,0x25,0x24,0x3c,0x24,0x0,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xfc,0x10,0xfe,0x10,0x90,0x90,0x10,0x50,0x20,
++0x0,0x3f,0x11,0x9,0x7f,0x42,0x82,0x7f,0x4,0x7,0xa,0x9,0x10,0x11,0x22,0xc,0x78,0x80,0x10,0x20,0xfe,0x2,0x4,0xf8,0x0,0xf0,0x20,0x40,0x80,0x60,0x1c,0x8,
++0x4,0x7a,0x49,0x48,0x57,0x60,0x51,0x4a,0x4c,0x4b,0x6a,0x52,0x42,0x42,0x4f,0x40,0x4,0x8,0x10,0x4,0xfe,0xa0,0x10,0x8,0x8,0xfc,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x28,0x28,0xfe,0x29,0x39,0x12,0x7c,0x57,0x54,0x7c,0x11,0xfe,0x10,0x10,0x10,0x13,0x40,0x20,0x0,0xfe,0x2,0x44,0x40,0xfe,0x88,0x88,0x8,0x90,0x60,0x50,0x8c,0x4,
++0x10,0x1f,0x20,0x5f,0x80,0x3f,0x2,0x3f,0x22,0x4,0xff,0x8,0x19,0x6,0x9,0x30,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0xe8,0x28,0x8,0xf8,0x88,0x8,0xa,0x8a,0x44,
++0x2,0x1,0x7f,0x40,0x82,0x2,0x2,0xff,0x4,0x8,0x18,0x6,0x1,0x2,0xc,0x30,0x0,0x0,0xfe,0x2,0x4,0x0,0x4,0xfe,0x20,0x20,0x20,0x40,0x80,0x40,0x30,0x10,
++0x8,0x8,0x8,0x17,0x10,0x31,0x52,0x94,0x1b,0x12,0x13,0x12,0x13,0x12,0x10,0x10,0x40,0x40,0x48,0xfc,0xa0,0x10,0x4e,0x44,0xf8,0x48,0xf8,0x48,0xf8,0x4a,0x42,0x3e,
++0x10,0x10,0x10,0x13,0xfa,0x14,0x10,0x3f,0xd0,0x10,0x11,0x10,0x10,0x10,0x50,0x23,0x40,0x20,0x0,0xfe,0x2,0x44,0x40,0xfe,0x88,0x88,0x8,0x90,0x60,0x50,0x8c,0x4,
++0x0,0x8,0x7f,0x48,0x49,0x48,0x4f,0x78,0x4b,0x4a,0x4a,0x4b,0x7a,0x4a,0x3,0x2,0x80,0x48,0xfc,0x0,0x10,0xa4,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x1,0x21,0x21,0x3f,0x0,0x3f,0x20,0x2f,0x20,0x20,0x3f,0x20,0x20,0x40,0x80,0x0,0x0,0x8,0x8,0xf8,0x0,0xfc,0x10,0xf8,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,0x80,
++0x4,0x3e,0x24,0x25,0x25,0x3e,0x24,0x27,0x24,0x3c,0x25,0x24,0x24,0x44,0x94,0x9,0x40,0x20,0x0,0xfe,0x2,0x44,0x40,0xfe,0x88,0x88,0x8,0x90,0x60,0x50,0x8c,0x4,
++0x1,0x7f,0x41,0x82,0x7f,0x4,0xc,0x3,0x1c,0x1,0xff,0x5,0x9,0x11,0x61,0x1,0x0,0xfe,0x2,0x4,0xfc,0x20,0x40,0x80,0x70,0x4,0xfe,0x40,0x20,0x1c,0x8,0x0,
++0x4,0x3e,0x24,0x27,0x24,0x3c,0x24,0x24,0x24,0x3c,0x24,0x24,0x24,0x45,0x96,0x8,0x40,0x20,0x4,0xfe,0x10,0xf8,0x90,0x90,0x90,0x90,0x90,0x90,0x92,0x12,0xe,0x0,
++0x3f,0x20,0x3f,0x20,0x3f,0x0,0x6,0x78,0x40,0x40,0x40,0x46,0x58,0x60,0x0,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0x4,0xfe,0x84,0x84,0x84,0xa4,0x94,0x88,0x80,0x80,
++0x1,0x1,0x3f,0x21,0x21,0xff,0x2,0xc,0x30,0xc0,0x3f,0x24,0x24,0x24,0xff,0x0,0x0,0x8,0xfc,0x8,0x8,0xfe,0x80,0x60,0x1e,0x4,0xf8,0x48,0x48,0x48,0xfe,0x0,
++0x0,0x0,0x7c,0x44,0x44,0x44,0x44,0x44,0x44,0x47,0x40,0x40,0x40,0x7f,0x40,0x0,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0x44,0x44,0xc4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x8,0x8,0xa,0x7f,0x8,0x3f,0x8,0xff,0x10,0x1e,0x12,0x22,0x22,0x54,0x89,0x2,0x40,0x40,0x44,0x7e,0x88,0x8,0x48,0x48,0x48,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x8,0xa,0x7f,0x8,0x3e,0x9,0xfe,0x10,0x1e,0x22,0x4a,0x85,0x0,0x24,0x22,0x40,0x40,0x40,0x40,0x44,0xfe,0x8,0x48,0x50,0x20,0x50,0x8e,0x4,0x0,0x88,0x44,0x4,
++0x10,0x20,0x7d,0x44,0x7c,0x45,0x7c,0x10,0xfe,0x28,0x55,0x92,0x7c,0x10,0x11,0x10,0x0,0x4,0xde,0x44,0x44,0x54,0xcc,0x44,0x44,0xcc,0x54,0x44,0x44,0x44,0x54,0x88,
++0x20,0x10,0x13,0xfc,0x8,0x10,0x10,0x37,0x58,0x94,0x10,0x10,0x10,0x11,0x12,0x14,0x10,0x38,0xc0,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x12,0x12,0x12,0x2f,0x22,0x6f,0xa2,0x3f,0x24,0x27,0x24,0x24,0x28,0x33,0x20,0x20,0x10,0x10,0x10,0x94,0x3e,0xc4,0x24,0xa8,0x28,0xa8,0x90,0x90,0xa8,0x28,0x46,0x84,
++0x2,0x4,0x1f,0x11,0x15,0x11,0x1f,0x11,0x15,0x11,0x1,0xff,0x2,0x4,0x18,0x60,0x0,0x10,0xf8,0x10,0x50,0x10,0xf0,0x10,0x50,0x10,0x4,0xfe,0x80,0x60,0x1c,0x8,
++0x10,0x11,0x17,0x14,0x5d,0x54,0x57,0x94,0x15,0x14,0x10,0x1f,0x10,0x11,0x12,0x1c,0x80,0x4,0xfe,0x44,0x54,0x44,0xfc,0x44,0x54,0x4,0x40,0xfe,0xa0,0x10,0xe,0x4,
++0x0,0x41,0x37,0x14,0x85,0x64,0x27,0xc,0x15,0x24,0xe0,0x2f,0x20,0x21,0x22,0x2c,0x80,0x4,0xfe,0x44,0x54,0x44,0xfc,0x44,0x54,0x4,0x40,0xfe,0xa0,0x10,0xe,0x4,
++0x4,0x4,0xff,0x4,0x4,0x1f,0x11,0x11,0x11,0x1f,0x10,0x10,0x10,0x10,0xf,0x0,0x40,0x44,0xfe,0x40,0x50,0xf8,0x10,0x10,0x10,0xf0,0x10,0x0,0x4,0x4,0xfc,0x0,
++0x10,0x13,0x12,0x12,0xfe,0x13,0x11,0x19,0x37,0xd1,0x11,0x12,0x12,0x15,0x58,0x20,0x44,0xe4,0x44,0x54,0x54,0xd4,0x14,0x54,0xf4,0x54,0x54,0x44,0x44,0x44,0x94,0x8,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x15,0x19,0x31,0xd1,0x12,0x12,0x12,0x14,0x58,0x20,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0x10,0x18,0xe,0x4,0x0,
++0x0,0x0,0x9,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x7a,0x4a,0x4,0x8,0x10,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0x10,0x18,0xe,0x4,0x0,
++0x0,0x8,0x7f,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4a,0x4a,0x7a,0x4a,0x2,0x1,0x0,0x0,0x8,0xfc,0x48,0x48,0x48,0x48,0x48,0xf8,0x8,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x12,0x1f,0x28,0x45,0x80,0x3f,0x21,0x21,0x21,0x3f,0x20,0x20,0x20,0x20,0x1f,0x0,0x48,0x7c,0xa0,0x10,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x2,0x2,0xfe,0x0,
++0x0,0x0,0x4,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x20,0x20,0x20,0x10,0x8,0xe,0x4,0x0,
++0x0,0x0,0x1f,0x10,0x90,0x57,0x54,0x14,0x34,0x57,0xd4,0x14,0x24,0x24,0x43,0x0,0x80,0x44,0xfe,0x0,0x4,0xfe,0x44,0x44,0x44,0xfc,0x4,0x0,0x2,0x2,0xfe,0x0,
++0x0,0x0,0x3f,0x21,0x21,0x21,0x21,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x10,0xfc,0x13,0x10,0x14,0x19,0x31,0xd1,0x12,0x12,0x14,0x14,0x58,0x23,0xa0,0x90,0x90,0x84,0xfe,0x80,0x80,0xf8,0x8,0x8,0x90,0x60,0x20,0x50,0x8e,0x4,
++0x4,0x7e,0x44,0x44,0x47,0x7c,0x10,0x11,0x5d,0x51,0x52,0x52,0x5c,0x74,0xc8,0x3,0xa0,0x90,0x90,0x84,0xfe,0x80,0x80,0xf8,0x8,0x8,0x90,0x60,0x20,0x50,0x8e,0x4,
++0x28,0x28,0xff,0x29,0x39,0x11,0x7d,0x55,0x55,0x7d,0x11,0xff,0x11,0x11,0x10,0x10,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x11,0x50,0x20,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x15,0xff,0x11,0x7d,0x11,0xff,0x11,0x31,0x39,0x55,0x55,0x91,0x10,0x10,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x11,0x11,0x11,0x11,0xfd,0x11,0x11,0x11,0x11,0x1d,0xf1,0x40,0x0,0x0,0x3,0x4,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x48,0x86,0x2,
++0x3f,0x1,0x7f,0x89,0x22,0x7f,0x22,0x3e,0x8,0x7f,0x49,0x7f,0x8,0x7f,0x8,0x9,0xf8,0x0,0xfe,0x24,0x8,0x7c,0x48,0x48,0x78,0x48,0x48,0x78,0x48,0x48,0x88,0x18,
++0x0,0x3f,0x24,0x24,0x3f,0x1,0x1,0x3f,0x1,0x1,0xff,0x2,0x4,0x8,0x1f,0x0,0x8,0xfc,0x48,0x48,0xf8,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,0x20,0x10,0xf8,0x8,
++0x4,0x4,0xc,0x32,0x1,0x2,0xc,0x30,0xdf,0x11,0x11,0x1f,0x10,0x10,0x10,0xf,0x40,0x20,0x58,0x88,0x0,0x80,0x60,0x18,0xf6,0x10,0x10,0xf0,0x10,0x4,0x4,0xfc,
++0x2,0x4,0x8,0x3f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x3f,0x20,0x0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x0,0x20,0x40,0x84,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0xff,0x1,0x2,0x4,0x1f,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x4,0xfe,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x17,0x14,0x14,0xff,0x14,0x10,0x1b,0x30,0xd0,0x1f,0x10,0x11,0x12,0x57,0x20,0x4,0xfe,0xa4,0xa4,0xfc,0x44,0x50,0xf8,0x40,0x44,0xfe,0x80,0x10,0x8,0xfc,0x4,
++0x8,0x8,0xf,0x10,0x10,0x33,0x52,0x92,0x12,0x13,0x12,0x12,0x12,0x12,0x13,0x12,0x0,0x4,0xfe,0x40,0x88,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x7e,0x44,0x54,0x54,0x55,0x54,0x54,0x54,0x54,0x54,0x10,0x28,0x24,0x45,0x82,0x40,0x40,0x44,0x7e,0x88,0x8,0x48,0x48,0x48,0x50,0x50,0x20,0x50,0x8e,0x4,0x0,
++0x4,0xe,0x78,0x8,0x8,0x7e,0x8,0x8,0xff,0x8,0x9,0x8,0x10,0x10,0x20,0x40,0x8,0xfc,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x8,0x1c,0xf1,0x11,0x11,0xfd,0x11,0x39,0x35,0x50,0x51,0x97,0x10,0x10,0x10,0x10,0x20,0x44,0xfe,0x24,0x24,0xfc,0x24,0x44,0xfc,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x12,0xf9,0x20,0x2f,0x20,0x24,0xfa,0x21,0x21,0x22,0x22,0x3c,0xe4,0x48,0x0,0x0,0x4,0x7e,0x10,0xd0,0x10,0x90,0xfc,0x10,0x10,0x90,0x50,0x50,0x14,0xfe,0x0,
++0x1,0x9,0xfd,0x21,0x25,0x25,0x25,0xf5,0x25,0x29,0x21,0x22,0x3a,0xe2,0x44,0x8,0x0,0x4,0x7e,0x10,0x10,0x10,0x10,0x7c,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x0,
++0x21,0x22,0x27,0x24,0xfe,0x25,0x24,0x2f,0x34,0xe6,0x25,0x24,0x24,0x28,0xb2,0x41,0x4,0x3e,0xa4,0xa4,0xa4,0xa4,0xc2,0xbc,0xa4,0xa4,0xa4,0x98,0x88,0x94,0xa4,0x42,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x11,0x15,0x19,0x31,0xd1,0x12,0x12,0x14,0x59,0x20,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x4,0x48,0x48,0x50,0x30,0x20,0x50,0x8e,0x4,0x0,
++0x8,0x12,0x3f,0x22,0x32,0x2a,0x22,0xfe,0x22,0x32,0x2a,0x22,0x22,0x22,0x4a,0x85,0x8,0x7c,0x48,0x48,0x48,0x86,0x0,0xfc,0x44,0x48,0x28,0x10,0x30,0x48,0x8e,0x4,
++0x0,0x2b,0x28,0x24,0x45,0x43,0x85,0x7f,0x25,0x25,0x25,0x25,0x24,0x24,0x4c,0x83,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x48,0x86,0x2,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x31,0x39,0x55,0x51,0x91,0x12,0x12,0x14,0x19,0x10,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x4,0x48,0x48,0x50,0x30,0x20,0x50,0x8e,0x4,0x0,
++0x8,0x48,0x49,0x49,0x49,0x7d,0x41,0x41,0x79,0x49,0x49,0x4a,0x4a,0x4c,0x89,0x8,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x4,0x48,0x48,0x50,0x30,0x20,0x50,0x8e,0x4,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x11,0x12,0x1c,0x33,0xd0,0x10,0x10,0x11,0x11,0x52,0x24,0x20,0xa0,0xa0,0x90,0x10,0xe,0x4,0x8,0xfc,0x88,0x88,0x88,0x8,0x8,0x28,0x10,
++0x10,0x10,0x12,0x11,0xfc,0x13,0x14,0x18,0x30,0xd7,0x10,0x10,0x10,0x10,0x50,0x20,0x40,0x40,0x48,0x50,0x40,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x8,0x8,0xa,0x11,0x10,0x37,0x30,0x50,0x90,0x1f,0x10,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0x48,0x50,0x40,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x40,0x20,0xf8,0x7,0x54,0x55,0xfd,0x25,0x25,0x25,0x3d,0xe5,0x26,0x4b,0x90,0x0,0x10,0x48,0xbe,0x40,0x54,0x54,0x7e,0x48,0x48,0x48,0x7e,0x48,0xa8,0x98,0x8,0x8,
++0x1,0x21,0x19,0x9,0x1,0x3f,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x8,0x18,0x20,0x0,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,
++0x2,0x2,0x2,0x2,0x3f,0x2,0x2,0x12,0x32,0x22,0x44,0x84,0x8,0x10,0x20,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x30,0x2c,0x26,0x22,0x20,0x20,0xa0,0x40,0x0,
++0x10,0x10,0x21,0x20,0x44,0xf8,0x11,0x20,0x40,0xfc,0x3,0x0,0x1c,0xe0,0x40,0x0,0x20,0x20,0x24,0xac,0xb0,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x8,0x8,0xa,0xff,0x8,0x8,0x7e,0x8,0xa,0xff,0x8,0x10,0x10,0x20,0x40,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0xa,0xff,0x8,0x7e,0x8,0xff,0x8,0x11,0x3f,0xd1,0x11,0x11,0x11,0x11,0x1,0x0,0x7c,0x48,0x50,0x58,0x44,0x64,0x58,0x50,0xf0,0x10,0x10,0x10,0x50,0x20,0x0,
++0x11,0x11,0x11,0x17,0xf9,0x11,0x37,0x39,0x55,0x57,0x91,0x11,0x12,0x12,0x14,0x10,0x0,0x3e,0x22,0xe4,0x24,0x28,0xe4,0x24,0x22,0xe2,0x22,0x34,0x28,0x20,0x20,0x20,
++0x10,0x10,0x11,0x10,0xfc,0x13,0x32,0x38,0x57,0x50,0x90,0x10,0x10,0x11,0x12,0x14,0x40,0x28,0xfc,0x88,0x50,0xfe,0x44,0x20,0xfe,0x80,0xf8,0x88,0x88,0x8,0x28,0x10,
++0x8,0x7c,0x49,0x48,0x48,0x7b,0x4a,0x48,0x4f,0x78,0x48,0x48,0x48,0x48,0x89,0x1a,0x40,0x28,0xfc,0x88,0x50,0xfe,0x44,0x20,0xfe,0x80,0xf8,0x88,0x88,0x88,0x28,0x10,
++0x11,0x11,0x21,0x27,0x49,0xf1,0x27,0x41,0xf9,0x47,0x1,0x19,0xe2,0x42,0x4,0x0,0x0,0x3e,0x22,0xe4,0x24,0x28,0xe4,0x24,0x22,0xe2,0x22,0x34,0x28,0x20,0x20,0x20,
++0x10,0x10,0x17,0x10,0xfd,0x10,0x37,0x39,0x55,0x52,0x95,0x10,0x13,0x10,0x10,0x10,0x40,0x48,0xfc,0x40,0xf8,0x80,0xfe,0x20,0x50,0x4e,0xf4,0x40,0xf8,0x40,0x40,0x40,
++0x0,0x8,0xfd,0x10,0x10,0x23,0x22,0x3c,0x67,0xa4,0x24,0x24,0x24,0x3c,0x25,0x2,0x40,0x28,0xfc,0x88,0x50,0xfe,0x44,0x20,0xfe,0x80,0xf8,0x88,0x88,0x88,0x28,0x10,
++0x10,0x10,0x10,0x14,0x7f,0x54,0x54,0x55,0x54,0x7c,0x13,0x14,0x1c,0xe4,0x40,0x0,0x20,0x20,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x10,0x10,0x11,0x1c,0x20,0x23,0x7e,0x90,0x13,0x7c,0x10,0x10,0x14,0x18,0x11,0x2,0x40,0x28,0xfc,0x88,0x50,0xfe,0x44,0x20,0xfe,0x80,0xf8,0x88,0x88,0x88,0x28,0x10,
++0x8,0x8,0xb,0x11,0x10,0x37,0x54,0x90,0x1f,0x11,0x11,0x11,0x11,0x11,0x12,0x14,0x80,0x50,0xf8,0x10,0xa0,0xfc,0x88,0x40,0xfe,0x0,0xf0,0x10,0x10,0x10,0x50,0x20,
++0x0,0x40,0x37,0x11,0x0,0xf,0xe8,0x20,0x2f,0x21,0x21,0x21,0x29,0x31,0x22,0x4,0x80,0x48,0xfc,0x10,0xa0,0xfe,0x84,0x40,0xfe,0x0,0xf0,0x10,0x10,0x10,0x50,0x20,
++0x4,0x4,0xff,0x4,0x4,0xf,0x10,0x2f,0x48,0x8,0xf,0x8,0x8,0x8,0x7,0x0,0x40,0x44,0xfe,0x40,0x10,0xf8,0x10,0x90,0x90,0x90,0x90,0x30,0x4,0x4,0xfc,0x0,
++0x4,0x3e,0x24,0x25,0x26,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x45,0x94,0x8,0x80,0x88,0xfc,0x8,0x28,0xf8,0x28,0x28,0x28,0xe8,0x28,0x10,0x2,0x2,0xfe,0x0,
++0x4,0x4,0x4,0xf,0x10,0x20,0x5f,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0xf,0x0,0x0,0x0,0x10,0xf8,0x10,0x90,0xd0,0x90,0x90,0x90,0x90,0x30,0x4,0x4,0xfc,0x0,
++0x2,0x1,0x7f,0x8,0x17,0x14,0x37,0x50,0x9f,0x12,0x14,0x5,0xc,0x14,0x66,0x4,0x0,0x8,0xfc,0x0,0xf0,0x10,0xf0,0x80,0xfc,0xa0,0x90,0x8,0xd0,0x20,0x5c,0x8,
++0x1,0x7f,0x1,0x3f,0x1,0xff,0x8,0x49,0x29,0x2a,0x1c,0x2a,0xc9,0x8,0x28,0x10,0x4,0x84,0x4,0x24,0x24,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x84,0x84,0x14,0x8,
++0x8,0xff,0x8,0x47,0x20,0x27,0x84,0x4f,0x14,0x27,0xe4,0x20,0x2f,0x22,0x21,0x20,0x20,0xfe,0x50,0xfc,0x40,0xfc,0x44,0xfc,0x44,0xfc,0x44,0x10,0xfe,0x10,0x10,0x30,
++0x1f,0x1,0x7f,0x41,0x9d,0x1,0x1d,0x8,0xf,0x10,0x2f,0x48,0xf,0x8,0x8,0x7,0xf0,0x0,0xfe,0x2,0x74,0x0,0x70,0x0,0xf0,0x90,0xd0,0x90,0x90,0xb4,0x4,0xfc,
++0x8,0xb,0xa,0x12,0x12,0x33,0x32,0x50,0x9f,0x10,0x10,0x11,0x12,0x14,0x18,0x10,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x44,0xfe,0x40,0xe0,0x50,0x48,0x4e,0x44,0x40,
++0x10,0x17,0x14,0x24,0x27,0x60,0xbf,0x21,0x22,0x2c,0x1,0x3f,0x1,0x1,0xff,0x0,0x10,0xf8,0x10,0x10,0xf0,0x80,0xfc,0xc0,0xa0,0x9c,0x80,0xf8,0x0,0x4,0xfe,0x0,
++0x20,0x20,0x20,0x3c,0x25,0x4a,0x45,0xa1,0x21,0x21,0x21,0x25,0x29,0x31,0x20,0x0,0x80,0x80,0x84,0xfe,0x4,0x14,0xfc,0x14,0x14,0xf4,0x14,0x8,0x2,0x2,0xfe,0x0,
++0x2,0x1,0x7f,0x40,0x80,0x0,0x3f,0x1,0x1,0x1f,0x1,0x1,0x1,0x1,0x7f,0x0,0x0,0x0,0xfe,0x2,0x4,0x10,0xf8,0x0,0x20,0xf0,0x0,0x60,0x20,0x8,0xfc,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x11,0x1d,0x31,0xd1,0x11,0x11,0x11,0x11,0x50,0x20,0x80,0x80,0x84,0xfe,0x4,0x14,0xfc,0x14,0x14,0xf4,0x14,0x8,0x2,0x2,0xfe,0x0,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x11,0x51,0x21,0x8,0xfc,0x8,0x8,0x28,0x10,0x0,0xf8,0x8,0x90,0x50,0x20,0x50,0x8e,0x4,0x0,
++0x1f,0x10,0x1f,0x10,0x1f,0x4,0x7f,0x4,0xff,0x4,0x9,0x35,0xc3,0x9,0x11,0x3,0xf0,0x10,0xf0,0x10,0xf0,0x40,0xfc,0x40,0xfe,0x40,0x20,0x5e,0x84,0x20,0x10,0x0,
++0x8,0x10,0x22,0xd4,0x48,0x31,0x2a,0xcc,0x14,0x24,0xcc,0x14,0x64,0x4,0x28,0x10,0x40,0x40,0x40,0x44,0xfe,0x4,0x4,0x84,0x44,0x44,0x4,0x4,0x4,0x4,0x28,0x10,
++0x8,0x8,0x1e,0x14,0x28,0x7f,0xaa,0x2a,0x3e,0x2a,0x2a,0x3e,0x0,0xe,0x70,0x20,0x40,0x40,0x44,0x7e,0x84,0x14,0xf4,0x94,0x94,0xf4,0x94,0x88,0x82,0x82,0x7e,0x0,
++0x13,0x12,0x13,0x16,0x5b,0x51,0x57,0x91,0x1f,0x11,0x12,0x2d,0x28,0x41,0x82,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x10,0xfc,0x10,0xfe,0x10,0x48,0x56,0xe4,0x50,0x48,0xc0,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x30,0x38,0x55,0x52,0x94,0x18,0x10,0x10,0x10,0x10,0x0,0x4,0xfe,0x20,0x20,0x40,0x40,0xd0,0x48,0x46,0x42,0x40,0x40,0x40,0x40,0x40,
++0x0,0x8,0xfd,0x11,0x11,0x21,0x25,0x3f,0x65,0xa4,0x25,0x27,0x24,0x3c,0x24,0x0,0x20,0x44,0xfe,0x24,0x24,0xfc,0x24,0x44,0xfc,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x4,0xfc,0x4,0x4,0x7c,0x4,0x4,0xfc,0x4,0x0,0x12,0x51,0x50,0x90,0xf,0x0,0x44,0x7e,0x40,0x48,0x7c,0x40,0x44,0x7e,0x40,0x0,0x0,0x84,0x92,0x12,0xf0,0x0,
++0x1,0x2,0x1f,0x11,0x11,0x1f,0x11,0x12,0x1f,0x5,0x9,0xff,0x1,0x1,0x1,0x1,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x4,0x4,0x4,0x4,0x4,0x7c,0x4,0x4,0x4,0x4,0x4,0x4,0x1c,0xe4,0x44,0x0,0x80,0x80,0x88,0x98,0xa0,0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x4,0x7c,0x4,0x7c,0x4,0x7c,0x6,0x4,0x3f,0x9,0x1f,0x1,0xff,0x1,0x1,0x1,0x88,0xfc,0x80,0xfc,0x80,0xfc,0x80,0x10,0xf8,0x0,0xf0,0x4,0xfe,0x0,0x0,0x0,
++0x4,0x4,0x7c,0x4,0x1c,0xe4,0x40,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x10,0x40,0x44,0x78,0x42,0x42,0x3e,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x0,0x1f,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x2,0x4,0x8,0x30,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x40,0x20,0x18,0x8,
++0x10,0x10,0x11,0x1d,0x21,0x41,0xbd,0x11,0x11,0xfd,0x11,0x11,0x14,0x18,0x11,0x2,0x0,0x4,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x44,0x50,0x88,0x6,0x2,
++0x8,0x8,0xf,0x10,0x12,0x31,0x51,0x9f,0x10,0x13,0x12,0x12,0x12,0x12,0x13,0x12,0x80,0x48,0xfc,0x0,0x18,0x10,0x24,0xfe,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x44,0x29,0x11,0x29,0x49,0x89,0x9,0x19,0x29,0x49,0x89,0x8,0x8,0x51,0x22,0x0,0x4,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x44,0x50,0x88,0x6,0x2,
++0x4,0x7,0x8,0x14,0x23,0x2,0xc,0x30,0xdf,0x11,0x11,0x1f,0x11,0x11,0x1f,0x10,0x0,0xf0,0x20,0x40,0x80,0x80,0x60,0x1e,0xf4,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x8,0xf,0x14,0x12,0x23,0xc,0x30,0xdf,0x11,0x1f,0x11,0x1f,0x2,0x29,0x28,0x47,0x0,0xe0,0x40,0x80,0x80,0x60,0x1e,0xf4,0x10,0xf0,0x10,0xf0,0x0,0x88,0x94,0xf4,
++0x10,0x10,0x17,0x14,0x5a,0x51,0x51,0x9f,0x10,0x13,0x12,0x2a,0x26,0x46,0x83,0x2,0x80,0x48,0xfc,0x0,0x18,0x10,0x24,0xfe,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x10,0x10,0x5,0xfd,0x9,0x11,0x35,0x59,0x95,0x11,0x12,0x12,0x14,0x18,0x13,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0x20,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x1,0x1,0x7f,0x2,0x5,0x9,0x37,0xc1,0x9,0x8,0x7f,0x8,0x8,0x8,0x10,0x20,0x0,0x8,0xfc,0x80,0x40,0x30,0xce,0x4,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,
++0x4,0x4,0xff,0x4,0x1,0x1,0xff,0x3,0x5,0x9,0x11,0x2f,0xc1,0x1,0x1,0x1,0x40,0x44,0xfe,0x40,0x0,0x4,0xfe,0x80,0x40,0x20,0x10,0xee,0x4,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x7f,0x5,0x5,0x5,0x9,0x9,0x11,0x2f,0xc1,0x1,0x1,0x1,0x0,0x0,0x0,0x8,0xfc,0x40,0x40,0x40,0x20,0x20,0x10,0xee,0x4,0x0,0x0,0x0,
++0x8,0xa,0x1f,0x28,0x45,0x1,0x7f,0x3,0x5,0x9,0x11,0x2f,0xc1,0x1,0x1,0x1,0x40,0x48,0x7c,0xa0,0x10,0x0,0xfc,0x80,0x40,0x20,0x10,0xee,0x4,0x0,0x0,0x0,
++0x1,0x21,0x21,0x3f,0x0,0x3e,0x22,0x22,0x3e,0x22,0x22,0x3e,0x22,0x22,0x4a,0x85,0x0,0x8,0x8,0xf8,0x8,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,0x88,0xa8,0x10,
++0x10,0x17,0x24,0x24,0x44,0xff,0x14,0x24,0x44,0xff,0x44,0x4,0x1c,0xe4,0x4a,0x11,0x4,0xbe,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0xc4,0x94,0x8,
++0x0,0xff,0x1,0x7,0x19,0xe1,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x21,0x41,0x81,0x4,0xfe,0x0,0x60,0x18,0x4,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x28,0x10,
++0x0,0xff,0x4,0x8,0x1f,0x28,0xc8,0xf,0x9,0x1,0x7d,0x5,0x9,0x11,0x61,0x3,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0xf0,0x8,0x18,0xa0,0x40,0x20,0x1e,0x4,0x0,
++0x0,0x7a,0x4a,0x4b,0x48,0x7b,0x12,0x12,0x13,0x5a,0x52,0x53,0x5a,0xe2,0x44,0x9,0x40,0x44,0x44,0xfc,0x4,0xbe,0xa4,0xa4,0xbc,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0xcc,
++0x4,0x42,0x21,0x2f,0x2,0x2,0xe2,0x2f,0x22,0x22,0x22,0x22,0x24,0x58,0x8f,0x0,0x10,0x20,0x40,0xf8,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,0x26,0xfc,0x0,
++0x0,0x4f,0x20,0x27,0x4,0x4,0xe7,0x20,0x2f,0x28,0x2f,0x28,0x2f,0x50,0x8f,0x0,0x10,0xf8,0x0,0xf0,0x10,0x10,0xf0,0x0,0xf8,0x88,0xf8,0x88,0xf8,0x6,0xfc,0x0,
++0x1,0x1f,0x12,0x11,0x10,0x1f,0x0,0x3f,0x21,0x3f,0x21,0x3f,0x0,0xff,0x4,0x18,0x10,0xf8,0x10,0x10,0x90,0xf0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x40,0x40,
++0x0,0x20,0x20,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0x20,0x20,0x26,0x38,0x60,0x0,0x80,0x80,0x80,0x80,0x88,0x98,0xa0,0xc0,0x80,0x80,0x80,0x82,0x82,0x82,0x7e,0x0,
++0x2,0x3f,0x22,0x22,0x3e,0x9,0xff,0x8,0x7f,0x41,0x5d,0x55,0x5d,0x41,0x7f,0x41,0x0,0x7c,0x44,0x44,0x48,0x48,0xd0,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0xa,0x1f,0x28,0x45,0x0,0x7f,0x1,0x1,0x3f,0x1,0x1,0xff,0x1,0x1,0x0,0x20,0x28,0x7c,0xa0,0x10,0x7c,0x80,0x10,0x78,0x80,0x8,0x7c,0x80,0x2,0x2,0xfe,
++0x8,0x8,0x10,0x13,0x22,0x4a,0x8a,0x12,0x33,0x52,0x93,0x12,0x14,0x14,0x19,0x16,0x40,0x40,0x40,0xfc,0x44,0x48,0x40,0x40,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x4,0xfe,0x11,0x7d,0x11,0x1f,0xf1,0x0,0x7f,0x4,0x8,0x1f,0x28,0xc8,0xf,0x8,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xfc,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x8,0xff,0x9,0x2,0x3f,0x24,0x23,0x24,0x3f,0x0,0x20,0x3e,0x20,0x26,0x78,0x20,0x24,0xfe,0x20,0x10,0xf8,0x90,0x10,0x90,0xf0,0x0,0x88,0x98,0xa0,0xc4,0x84,0x7c,
++0x4,0x4,0xff,0x4,0x49,0x2a,0xc,0x7f,0x49,0x49,0x5d,0x6b,0x49,0x49,0x41,0x43,0x40,0x44,0xfe,0x40,0x20,0x24,0x3e,0x44,0xa4,0x24,0x24,0x28,0x10,0x28,0x46,0x84,
++0x20,0x20,0x20,0x3e,0x20,0x22,0x2c,0x70,0x21,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x80,0x80,0x98,0xe0,0x80,0x84,0x84,0x7c,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x20,0x20,0x3e,0x20,0x2e,0x30,0x0,0xff,0x10,0x1e,0x22,0x52,0xc,0x8,0x10,0x60,0x80,0x98,0xe0,0x80,0x88,0x78,0x4,0xfe,0x80,0x88,0x98,0xa0,0xc0,0x84,0x84,0x7c,
++0x0,0x20,0x24,0x3e,0x20,0x20,0x2e,0x30,0x4,0x12,0x50,0x51,0x96,0x18,0x67,0x0,0x80,0x88,0x98,0xa0,0xc0,0x84,0x84,0x7c,0x0,0x40,0x88,0x6,0x12,0x10,0xf0,0x0,
++0x0,0x3,0x7d,0x1,0x1,0x3f,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x1,0x1,0x1,0x38,0xc0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x28,0x10,0x0,0x0,0x0,
++0x1,0x0,0x3f,0x20,0x24,0x24,0x24,0x24,0x27,0x24,0x24,0x24,0x25,0x4e,0x84,0x0,0x0,0x88,0xfc,0x0,0x40,0x40,0x44,0x4c,0x50,0x60,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x1,0x0,0x3f,0x20,0xaf,0x68,0x2f,0x28,0x2f,0x60,0xbf,0x24,0x24,0x44,0x88,0x10,0x0,0x88,0xfc,0x0,0xf8,0x88,0xf8,0x88,0xf8,0x0,0xfe,0x10,0x10,0x10,0x10,0x10,
++0x20,0x1b,0x8,0x40,0x40,0x5f,0x40,0x41,0x42,0x44,0x48,0x50,0x40,0x42,0x41,0x40,0x4,0xfe,0x4,0x84,0xa4,0xf4,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x14,0x8,
++0x8,0x49,0x2b,0x2c,0x9,0x7f,0x49,0x49,0x5d,0x5b,0x69,0x49,0x49,0x4b,0x40,0x41,0x20,0x20,0x20,0x24,0x7e,0x84,0x44,0x44,0x44,0x48,0x28,0x10,0x28,0x48,0x86,0x4,
++0x8,0x49,0x2a,0x8,0x7f,0x49,0x5d,0x6b,0x49,0x43,0x8,0xff,0x8,0x8,0x10,0x20,0x20,0x20,0x24,0x3e,0x44,0xc4,0x28,0x10,0x28,0x46,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x2,0x1,0x1,0x1,0x8,0x8,0x48,0x48,0x48,0x89,0xa,0xc,0x18,0x28,0x47,0x0,0x0,0x0,0x20,0x30,0x20,0x40,0x48,0x46,0x82,0x0,0x0,0x10,0x10,0x10,0xf0,0x0,
++0x0,0x0,0x3e,0x23,0x22,0x22,0x3e,0x23,0x20,0x3e,0x23,0x62,0xa2,0x3e,0x20,0x0,0x40,0x20,0x8,0xfc,0x0,0x88,0x50,0xfe,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,
++0x2,0x3f,0x22,0x22,0x3e,0x21,0x3e,0x62,0xa2,0x3e,0x20,0x1f,0x0,0x0,0x7f,0x0,0x20,0x14,0xfe,0x44,0x28,0xfe,0x10,0xfe,0x10,0x90,0x80,0xf8,0x80,0x84,0xfe,0x0,
++0x2,0x3f,0x22,0x3e,0x21,0x3e,0x62,0xbe,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x20,0xfc,0x88,0x50,0xfe,0x20,0xf8,0x20,0x20,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x30,
++0x1,0x4f,0x29,0x9,0x9,0xf,0xe8,0x28,0x2f,0x39,0x29,0x29,0x2f,0x50,0x8f,0x0,0x20,0x90,0x14,0xfe,0x0,0x44,0x28,0xfe,0x10,0x10,0x7c,0x10,0x10,0x16,0xfc,0x0,
++0x2,0x7a,0x4a,0x53,0x52,0x62,0x52,0x4b,0x48,0x48,0x68,0x53,0x40,0x40,0x4f,0x40,0x20,0x20,0x24,0xac,0x30,0x20,0xa4,0x1c,0x40,0x40,0x50,0xf8,0x40,0x44,0xfe,0x0,
++0x28,0x28,0xfe,0x29,0x3b,0x15,0x7d,0x55,0x55,0x7d,0x11,0xff,0x11,0x11,0x11,0x11,0x84,0xfe,0x90,0x7c,0x54,0x54,0x7c,0x54,0x54,0x7c,0x10,0x50,0x20,0x30,0x4e,0x84,
++0x0,0x20,0x10,0x10,0x7,0x0,0xf0,0x10,0x11,0x11,0x11,0x12,0x14,0x28,0x47,0x0,0x80,0x80,0x80,0x88,0xfc,0x88,0x88,0x88,0x8,0x8,0x8,0x50,0x20,0x6,0xfc,0x0,
++0x10,0x10,0x23,0x22,0x4a,0xfb,0x12,0x22,0x43,0xf6,0x4a,0x3,0x1a,0xe2,0x42,0x2,0x80,0x48,0xfc,0x8,0x8,0xf8,0x0,0x4,0xfe,0x94,0x94,0xfc,0x94,0x94,0x94,0xc,
++0x4,0x7e,0x45,0x54,0x54,0x54,0x55,0x54,0x54,0x54,0x54,0x10,0x28,0x47,0x82,0x0,0x8,0x1c,0xe0,0x0,0x40,0x20,0xfc,0x4,0x8,0x10,0x20,0x40,0x80,0x46,0x3c,0x0,
++0x1,0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x19,0x29,0x2f,0x49,0x89,0x9,0x8,0x0,0x88,0xfc,0x8,0x8,0xf8,0x0,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0x24,0xc,
++0x10,0x17,0x10,0x10,0x27,0x24,0x67,0xa4,0x27,0x24,0x22,0x21,0x20,0x21,0x22,0x2c,0x4,0xfe,0x40,0x44,0xfe,0x44,0xfc,0x44,0xfc,0x44,0x40,0x40,0x80,0x60,0x1e,0x4,
++0x2,0x1,0x7f,0x4,0x14,0x14,0x24,0x44,0x1f,0x8,0x4,0x2,0x1,0x2,0xc,0x30,0x0,0x8,0xfc,0x40,0x50,0x48,0x4c,0x44,0xf0,0x20,0x40,0x80,0x0,0xc0,0x3c,0x8,
++0x2,0x1,0x1,0x0,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x40,0x20,0x10,0x10,0x0,0x0,0x0,0x0,0x0,
++0x20,0x10,0x10,0x7c,0x8,0x2a,0x2a,0xfe,0x12,0x10,0xfc,0x11,0x11,0x12,0x24,0x40,0x10,0x88,0x88,0xbe,0x84,0x94,0x94,0xbe,0x88,0x88,0xbe,0x8,0x8,0x8,0x8,0x8,
++0x20,0x12,0x11,0x7d,0x8,0x2f,0x29,0xfd,0x11,0x11,0xfd,0x11,0x11,0x11,0x21,0x40,0x20,0x10,0x10,0x7c,0x8,0x28,0x28,0x7e,0x10,0x10,0x7c,0x10,0x50,0x90,0x10,0x10,
++0x20,0x10,0x10,0x7d,0x9,0x2b,0x28,0xfc,0x11,0x13,0xfc,0x10,0x10,0x13,0x20,0x40,0x10,0x88,0x88,0x3e,0x4,0xd4,0x54,0xbe,0x8,0xc8,0x3e,0x8,0xc8,0x8,0x8,0x8,
++0x0,0x40,0x27,0x24,0x4,0x7,0xe4,0x27,0x26,0x26,0x2b,0x2a,0x32,0x50,0x8f,0x0,0x80,0x48,0xfc,0x8,0x8,0xf8,0x0,0xf8,0xa8,0xa8,0xf8,0xa8,0xa8,0x6,0xfc,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x10,0x37,0x38,0x54,0x51,0x91,0x12,0x14,0x10,0x11,0x10,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x40,0x40,0x50,0x48,0x4c,0x44,0x40,0x40,0x80,
++0x5,0x7,0x4,0x3f,0x24,0x27,0x3c,0x27,0x20,0x2f,0x29,0x29,0x29,0x49,0x90,0x20,0x0,0x84,0xc,0xd0,0xa0,0x4,0x8c,0x90,0x20,0x44,0xc,0x10,0x22,0x42,0xfe,0x0,
++0x0,0x7b,0x48,0x48,0x49,0x79,0x49,0x49,0x48,0x79,0x48,0x4b,0x48,0x49,0x4a,0x98,0x4,0xfe,0x50,0x54,0xfe,0x54,0x54,0xfc,0x0,0xfc,0x0,0xfe,0xa8,0x24,0x22,0x60,
++0x1,0x1,0x7f,0x1,0x3f,0x1,0x1,0xff,0x2,0x5,0xc,0x34,0xc4,0x5,0x6,0x4,0x0,0x8,0xfc,0x0,0xf8,0x0,0x4,0xfe,0x0,0x10,0xa0,0x40,0x30,0xe,0x4,0x0,
++0x8,0x2a,0x1c,0x7f,0x49,0x5d,0x6b,0x47,0x8,0x3f,0x51,0x1f,0x11,0x1f,0x0,0xff,0x20,0x24,0x3e,0x44,0xa8,0x10,0x2e,0xc4,0x90,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,
++0x49,0x2a,0x8,0x7f,0x49,0x5d,0x6b,0x49,0x43,0x0,0x2a,0x29,0x28,0x48,0x7,0x0,0x20,0x20,0x24,0x3e,0x48,0xa8,0x10,0x2e,0x44,0x0,0x10,0x88,0xa4,0x24,0xe0,0x0,
++0x1,0x3f,0x21,0x21,0x21,0x3f,0x28,0x9,0xff,0x9,0x9,0x11,0x11,0x25,0x42,0x0,0x4,0x84,0x4,0x24,0x24,0x24,0x24,0x24,0xa4,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x0,0x3f,0x21,0xa7,0x64,0x27,0x24,0x27,0x64,0xa7,0x21,0x22,0x26,0x3b,0x42,0x81,0x84,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x20,0x10,0x6e,0x84,0x8,0xf8,
++0x10,0x10,0x10,0x10,0xff,0x10,0x31,0x39,0x52,0x52,0x94,0x10,0x10,0x10,0x10,0x10,0x80,0x82,0x82,0x84,0xe8,0x90,0x82,0xc2,0xa4,0x88,0x92,0x82,0x84,0x88,0x90,0xa0,
++0x0,0x20,0x11,0x0,0xfc,0xb,0x48,0x28,0x29,0x11,0x29,0x25,0x45,0x81,0x3,0x0,0x10,0x10,0xf4,0x12,0x10,0xfe,0x10,0x50,0x50,0x70,0x50,0x48,0x48,0x6a,0x86,0x2,
++0x2,0x42,0x2a,0x2b,0xa,0x8a,0x5f,0x2,0x2a,0x2a,0xd3,0x42,0x44,0x48,0x50,0x1,0x4,0xfe,0x10,0xa4,0x7e,0x44,0xd4,0x54,0x54,0xd4,0x54,0x54,0x10,0x28,0x46,0x82,
++0x0,0x40,0x2f,0x28,0x10,0x83,0x52,0x13,0x12,0x22,0xe2,0x3f,0x20,0x23,0x22,0x24,0x80,0x40,0xfe,0x2,0x64,0x80,0x10,0xf8,0x20,0x20,0x24,0xfe,0x0,0x20,0x18,0x8,
++0x2,0x1,0x3f,0x20,0x40,0xf,0x8,0xf,0x8,0x8,0x8,0xff,0x0,0xc,0x8,0x10,0x0,0x0,0xfc,0x4,0xe8,0x0,0x20,0xf0,0x40,0x40,0x44,0xfe,0x0,0x40,0x30,0x10,
++0x10,0x10,0x17,0x14,0xfc,0x11,0x15,0x19,0x31,0xd1,0x11,0x1f,0x10,0x11,0x51,0x22,0x40,0x20,0xfe,0x2,0x34,0xc0,0x10,0xf8,0x10,0x10,0x14,0xfe,0x0,0x90,0xc,0x4,
++0x0,0x0,0xf,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0xff,0x0,0x4,0xc,0x10,0x20,0x20,0xf0,0x0,0x0,0x0,0x10,0xf8,0x40,0x40,0x44,0xfe,0x0,0x40,0x30,0x18,0x8,
++0x0,0x40,0x30,0x10,0x0,0xf,0x11,0x12,0x22,0xe4,0x24,0x28,0x30,0x20,0x22,0x21,0x80,0x80,0x84,0x8c,0x90,0xa0,0xc0,0xc0,0xa0,0x90,0x88,0x8e,0x84,0x80,0x80,0x0,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x33,0x3a,0x56,0x52,0x92,0x13,0x12,0x12,0x12,0x12,0x0,0x4,0xfe,0x40,0x40,0x44,0xfe,0x44,0x44,0x64,0x9c,0xc,0x4,0x4,0x14,0x8,
++0x0,0x0,0xff,0x1,0x1,0x1,0x3f,0x21,0x21,0x21,0x22,0x24,0x28,0x20,0x20,0x20,0x0,0x4,0xfe,0x0,0x0,0x8,0xfc,0x8,0x8,0x88,0x48,0x28,0x28,0x8,0x28,0x10,
++0x0,0x3f,0x1,0x7f,0x1,0x3f,0x1,0xff,0x1,0x3f,0x3,0x5,0x9,0x11,0x61,0x1,0x78,0x80,0x8,0xfc,0x0,0xf0,0x14,0xfe,0x10,0xf0,0x80,0x40,0x30,0xe,0x4,0x0,
++0x20,0x21,0x20,0x3c,0x47,0x48,0xa0,0x20,0x27,0x20,0x20,0x24,0x28,0x31,0x22,0x4,0x0,0x8,0x90,0x0,0xfc,0x90,0x90,0x94,0xfe,0x90,0x90,0x90,0x90,0x10,0x10,0x10,
++0x0,0x20,0x2f,0x20,0x28,0xb0,0xa7,0xa4,0x24,0x24,0x24,0x25,0x54,0x4c,0x84,0x4,0x0,0x4,0xfe,0x40,0x40,0x44,0xfe,0x44,0x44,0x64,0x94,0x14,0x4,0x4,0x14,0x8,
++0x0,0x0,0x1f,0x10,0x90,0x57,0x50,0x10,0x37,0x54,0x94,0x14,0x25,0x24,0x44,0x4,0x80,0x44,0xfe,0x0,0x8,0xfc,0x40,0x44,0xfe,0x44,0x44,0xa4,0x14,0x4,0x14,0x8,
++0x10,0xc,0x4,0x3f,0x4,0x4,0x4,0x4,0xff,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x10,0x30,0x40,0xfc,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x8,0xfc,0x11,0x11,0x11,0x7d,0x11,0x11,0x11,0x1e,0xf2,0x42,0x4,0x8,0x3,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xfc,0x4,0x88,0x48,0x50,0x20,0x50,0x8e,0x4,
++0x8,0x8,0xff,0x8,0x20,0x13,0x92,0x42,0xa,0x12,0xe2,0x24,0x24,0x24,0x29,0x32,0x20,0x24,0xfe,0x20,0x20,0xfe,0x22,0x24,0xf8,0x88,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x13,0x10,0x12,0xfd,0x17,0x11,0x1a,0x34,0xd3,0x12,0x12,0x13,0x12,0x52,0x23,0x38,0xc0,0x44,0x4c,0x50,0xfe,0x50,0x4e,0x44,0xf8,0x48,0x48,0xf8,0x48,0x48,0xf8,
++0x10,0x10,0x12,0x12,0xff,0x10,0x14,0x18,0x11,0x31,0xd2,0x12,0x14,0x18,0x51,0x22,0x40,0x50,0x48,0x40,0xfe,0x80,0x80,0xf8,0x8,0x90,0x50,0x20,0x50,0x88,0xe,0x4,
++0x20,0x20,0x20,0x38,0x47,0x80,0x78,0x20,0x21,0xfa,0x24,0x21,0x28,0x30,0x20,0x0,0x40,0x40,0x40,0x48,0xfc,0x40,0xe0,0xd0,0x48,0x4e,0x44,0xf0,0x40,0x40,0x40,0x40,
++0x0,0x40,0x30,0x17,0x4,0x84,0x44,0xf,0x14,0x25,0xe4,0x24,0x28,0x29,0x32,0x24,0x40,0x40,0x40,0xfc,0x44,0x48,0x40,0xf8,0x8,0x10,0xa0,0x40,0xa0,0x10,0xe,0x4,
++0x20,0x20,0x2f,0x20,0x27,0xfc,0x27,0x24,0x27,0x24,0x20,0x2f,0x22,0x21,0x20,0x20,0x50,0x48,0xfe,0x40,0xfc,0x44,0xfc,0x44,0xfc,0x44,0x10,0xfe,0x10,0x10,0x50,0x20,
++0x8,0xa,0x7f,0x8,0x8,0x7f,0x41,0x82,0x3e,0x4,0x8,0x7e,0x8,0x8,0x29,0x12,0x20,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x10,0x10,0x17,0x10,0xfb,0x12,0x13,0x1a,0x33,0xd2,0x10,0x1f,0x12,0x11,0x50,0x20,0x50,0x48,0xfc,0x40,0xf8,0x48,0xf8,0x48,0xf8,0x48,0x10,0xfe,0x10,0x10,0x50,0x20,
++0x10,0x10,0x10,0x1d,0x21,0x21,0x7d,0x91,0x11,0x7d,0x11,0x11,0x15,0x19,0x11,0x0,0x40,0x40,0x84,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x10,0x12,0x1f,0x28,0x45,0x20,0x10,0x83,0x42,0xa,0x13,0xe2,0x22,0x22,0x23,0x22,0x40,0x44,0x7e,0xa0,0x10,0x40,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0x8,0x11,0x11,0x31,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x40,0x40,0x84,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x2,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x11,0x1,0x3f,0x21,0x21,0x21,0x21,0x21,0x1,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0x8,0xfc,0x8,0x8,0x8,0x28,0x10,0x0,
++0x8,0x8,0x12,0x3f,0x22,0x32,0x2a,0x22,0xfe,0x22,0x32,0x2a,0x22,0x22,0x4a,0x84,0x20,0x20,0x44,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,0x84,0x84,0x84,0xfc,0x84,0x0,
++0x8,0x7c,0x4b,0x48,0x4b,0x7a,0x4c,0x49,0x48,0x78,0x4f,0x48,0x48,0x48,0x49,0x98,0x40,0x48,0xfc,0x40,0xfc,0x4,0x8,0xf0,0x20,0x44,0xfe,0x40,0x40,0x40,0x40,0x80,
++0x8,0x7c,0x4f,0x48,0x4b,0x7a,0x4b,0x4a,0x4b,0x7a,0x48,0x4f,0x4a,0x49,0x48,0x98,0x50,0x48,0xfe,0x40,0xf8,0x48,0xf8,0x48,0xf8,0x48,0x10,0xfe,0x10,0x10,0x50,0x20,
++0x2,0x42,0x32,0x1f,0x82,0x5f,0x50,0xf,0x11,0x22,0xe3,0x2e,0x22,0x22,0x2a,0x25,0x10,0x10,0x90,0xd4,0x3e,0xd4,0x54,0x94,0x14,0x24,0xa4,0x24,0x44,0x44,0x94,0x8,
++0x0,0x40,0x30,0x13,0x82,0x62,0x22,0xa,0x13,0x22,0xe2,0x22,0x22,0x23,0x22,0x20,0x40,0x40,0x88,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,
++0x4,0x7f,0x4,0x24,0x24,0x24,0x24,0x25,0x3e,0x2,0x2,0x1e,0xe2,0x42,0xb,0x4,0x0,0x8,0x88,0x50,0x20,0x50,0x88,0x8,0x4,0x8c,0x50,0x20,0x50,0x8e,0x4,0x0,
++0x20,0x20,0x20,0x2f,0xf8,0x27,0x24,0x2c,0x37,0xe4,0x24,0x27,0x24,0x24,0xa4,0x44,0x40,0x50,0x48,0xfe,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x54,0x8,
++0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x80,0x60,0x30,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x10,0x78,0x57,0x50,0x57,0x54,0x54,0x57,0x54,0x54,0x77,0x54,0x4,0x4,0x4,0x40,0x50,0x48,0xfe,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x54,0x8,
++0x10,0x8,0x8,0x2,0xfe,0x4,0x8,0xa,0x1c,0x2a,0x48,0x88,0x8,0x8,0x8,0x8,0x40,0x40,0x40,0x40,0x40,0x40,0x60,0x50,0x4c,0x44,0x40,0x40,0x40,0x40,0x40,0x40,
++0x20,0x21,0x23,0x22,0xfb,0x22,0x23,0x22,0x23,0x22,0x38,0xe7,0x40,0x0,0x0,0x0,0x80,0x8,0xfc,0x8,0xf8,0x0,0xf8,0x8,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x0,0xff,0x0,0x0,0x1,0x1,0x3,0x5,0x9,0x11,0x21,0x41,0x1,0x1,0x1,0x1,0x4,0xfe,0x80,0x80,0x0,0x0,0x40,0x20,0x18,0xc,0x4,0x0,0x0,0x0,0x0,0x0,
++0x2,0x2,0x2,0xff,0x4,0x9,0x11,0x3f,0x51,0x91,0x11,0x11,0x11,0x11,0x1,0x1,0x0,0x0,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x28,0x10,0x0,0x0,
++0x1,0x9,0x9,0x9,0x9,0x9,0xff,0x1,0x9,0xd,0x11,0x21,0x0,0x3,0xc,0x70,0x0,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,0x10,0x18,0x20,0x20,0xc0,0x0,0x0,0x0,
++0x10,0x3e,0x49,0x0,0x27,0x10,0x13,0x82,0x43,0xa,0x13,0xe2,0x2f,0x21,0x20,0x20,0x40,0xfc,0x20,0x48,0xfc,0x40,0xf8,0x48,0xf8,0x48,0xf8,0x48,0xfe,0x10,0x90,0x30,
++0x10,0x8,0x2,0x7f,0x0,0x22,0x14,0xff,0x2,0x3f,0x22,0x22,0x22,0x3e,0x22,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0xc8,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x10,0x10,0x10,0x13,0x58,0x55,0x51,0x93,0x15,0x19,0x11,0x11,0x11,0x10,0x10,0x10,0x40,0x40,0x44,0xfe,0x80,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x2c,0x20,0x20,0x20,
++0x20,0x20,0x2f,0x2a,0xfb,0x26,0x25,0x2b,0x32,0xe5,0x28,0x27,0x22,0x22,0xa5,0x40,0x80,0x40,0xfe,0x2,0xbc,0xa4,0x28,0x18,0x8,0xf6,0x0,0xfc,0x48,0x44,0x44,0x80,
++0x0,0x48,0x2f,0x10,0x2b,0x48,0xf,0x18,0x2b,0x4a,0x8b,0xa,0xb,0xa,0x52,0x22,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x18,
++0x4,0x4,0x3f,0x4,0xff,0x10,0x8,0x7f,0x8,0x11,0x3a,0x54,0x93,0x19,0x11,0x2,0x40,0x50,0x48,0x40,0xfe,0x40,0x44,0x44,0x48,0x48,0x50,0x20,0x60,0x92,0xa,0x6,
++0x8,0x8,0x8,0x8,0xfe,0x8,0x18,0x1c,0x2a,0x28,0x48,0x89,0x8,0x8,0x8,0x8,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x30,0x30,0x50,0x90,0x10,0x10,0x10,0x50,0x20,
++0x0,0x0,0x0,0x0,0xff,0x0,0x1,0x1,0x2,0x4,0x8,0x10,0x60,0x0,0x2,0x1,0x80,0x80,0x80,0x84,0xfe,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,
++0x4,0x7e,0x44,0x54,0x57,0x54,0x54,0x54,0x54,0x54,0x55,0x2a,0x24,0x44,0x80,0x0,0x10,0x10,0x10,0x14,0xfe,0x10,0x30,0x30,0x50,0x90,0x10,0x10,0x10,0x10,0x50,0x20,
++0x8,0x7f,0x48,0x4a,0x49,0x78,0x48,0x4f,0x48,0x78,0x48,0x49,0x4a,0x7c,0x48,0x0,0x1c,0xe0,0x88,0x48,0x50,0x0,0x44,0xfe,0x40,0xc0,0xe0,0x50,0x4e,0x44,0x40,0x40,
++0x4,0x7f,0x44,0x45,0x44,0x7c,0x10,0x13,0x5c,0x50,0x50,0x50,0x5d,0xe2,0x40,0x0,0x1c,0xe0,0x44,0x26,0xa8,0x0,0x24,0xfe,0x20,0x60,0x70,0xa8,0x26,0x24,0x20,0x20,
++0x0,0x0,0x7f,0x0,0x11,0x8,0x1,0x1,0xff,0x3,0x5,0x9,0x11,0x61,0x1,0x1,0x8,0x7c,0x80,0x8,0x18,0xa0,0x0,0x4,0xfe,0x80,0x40,0x30,0xe,0x4,0x0,0x0,
++0x1,0xe,0xf1,0x49,0x2a,0x20,0x8,0xff,0x8,0x1c,0x1b,0x29,0x48,0x88,0x8,0x8,0x0,0x8,0x18,0x20,0x40,0x84,0xc,0x10,0x20,0x40,0x4,0xc,0x10,0x20,0x40,0x80,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x12,0x9,0x1,0xff,0x3,0x5,0x9,0x11,0x61,0x1,0x40,0x44,0xfe,0x40,0x38,0xc0,0x10,0x20,0x4,0xfe,0x80,0x40,0x30,0xe,0x4,0x0,
++0x4,0x4,0xff,0x14,0x16,0x12,0x2c,0x68,0x17,0x20,0x5f,0x81,0x9,0x19,0x21,0x3,0x40,0x44,0xfe,0x40,0xf8,0x90,0x60,0x20,0xd0,0xe,0xf4,0x0,0x20,0x18,0x8,0x0,
++0x10,0x1e,0x10,0x3e,0x44,0x29,0x12,0x65,0xf,0x38,0xcf,0x8,0xf,0xa,0x9,0xc,0x0,0xf8,0x88,0x50,0x20,0x50,0x8c,0x44,0xe0,0x3e,0xe4,0x20,0xe0,0x10,0xa0,0x78,
++0x2,0x2,0x4,0x1f,0x2,0xff,0x4,0x8,0x13,0x2c,0xc1,0xe,0x0,0x1,0xe,0x70,0x0,0x40,0x20,0xf0,0x4,0xfe,0x40,0xa0,0x10,0x4e,0x84,0x10,0x60,0x80,0x0,0x0,
++0x0,0x3f,0x1,0x1,0xff,0x2,0x5,0x9,0x3f,0xd1,0x11,0x1f,0x1,0x1,0x3f,0x0,0x10,0xf8,0x0,0x4,0xfe,0x80,0x40,0x20,0xfe,0x14,0x10,0xf0,0x0,0x10,0xf8,0x8,
++0x0,0x4,0x7e,0x10,0x10,0x1f,0x22,0x22,0x65,0x94,0x8,0x8,0x10,0x20,0x43,0x80,0x40,0x50,0x48,0x40,0x7c,0xc0,0x48,0x7c,0xc0,0x48,0x50,0x20,0x60,0x92,0xa,0x6,
++0x21,0x21,0x21,0x2f,0xb2,0xad,0xa5,0x2f,0x21,0x21,0x21,0x2f,0x25,0x21,0x21,0x21,0x0,0x6,0x38,0xe0,0x20,0x20,0x3e,0xe8,0x28,0x28,0xe8,0x28,0x48,0x48,0x88,0x8,
++0x20,0x20,0x21,0x27,0xb0,0xaf,0xa1,0x22,0x24,0x39,0x22,0x20,0x23,0x20,0x20,0x27,0x80,0xa0,0x10,0xf8,0x80,0xfe,0x20,0x50,0x8e,0x24,0x40,0x88,0x10,0x20,0xc0,0x0,
++0x10,0x10,0x10,0x14,0x54,0x59,0x51,0x91,0x11,0x11,0x11,0x29,0x25,0x45,0x81,0x1,0x20,0x20,0x20,0x20,0x20,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x4,0x4,0xff,0x4,0x1,0x2,0x4,0x18,0x6f,0x88,0x8,0x8,0x8,0x8,0x7,0x0,0x40,0x44,0xfe,0x40,0x0,0x80,0x40,0x30,0xee,0x24,0xa0,0x40,0x10,0x10,0xf0,0x0,
++0x8,0x10,0x3c,0x24,0x34,0x2d,0x26,0xfc,0x24,0x34,0x2c,0x24,0x24,0x24,0x54,0x88,0x20,0x20,0x50,0x50,0x88,0x6,0x4,0xf8,0x88,0x88,0xa8,0x90,0x80,0x84,0x84,0x7c,
++0x1,0x1,0x2,0x2,0x4,0x8,0x30,0xcf,0x8,0x8,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x80,0x80,0x40,0x20,0x1e,0xe4,0x20,0x20,0xa0,0x40,0x8,0x8,0xf8,0x0,
++0x0,0x40,0x31,0x11,0x82,0x44,0x48,0x13,0x12,0x22,0xe2,0x22,0x22,0x22,0x21,0x20,0x80,0x80,0x40,0x40,0x20,0x10,0xe,0xf4,0x10,0x10,0x50,0x20,0x4,0x4,0xfc,0x0,
++0x4,0xff,0x4,0x4,0x5f,0x50,0x57,0x75,0x17,0x74,0x57,0x55,0x95,0x27,0x44,0x80,0x84,0xfe,0xa8,0xa4,0xfe,0x20,0xa0,0x24,0xa4,0xa4,0xa8,0x28,0x10,0xb2,0x4a,0x86,
++0x10,0x11,0x11,0x11,0xfc,0x17,0x14,0x1f,0x30,0xd0,0x1f,0x10,0x11,0x12,0x54,0x20,0x10,0xf8,0x10,0xf0,0x4,0xbe,0xa4,0xbc,0x40,0x44,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x10,0x10,0x55,0x39,0x10,0xfc,0x10,0x33,0x39,0x55,0x91,0x11,0x11,0x12,0x14,0x10,0x10,0x50,0x50,0x7c,0x90,0x10,0xfe,0x4,0x7e,0x44,0x44,0x44,0x7c,0x80,0x7e,0x0,
++0x10,0x10,0x17,0x10,0xff,0x12,0x33,0x3a,0x57,0x54,0x91,0x11,0x11,0x11,0x11,0x11,0x90,0x94,0xfe,0x90,0xfc,0x94,0xfc,0x94,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x4,0x4,0xff,0x4,0x3f,0x24,0x3f,0x24,0x3f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x40,0x44,0xfe,0x48,0xfc,0x48,0xf8,0x48,0xf8,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,
++0x8,0x8,0x7f,0x8,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x1,0x1,0x1,0x1,0x20,0x28,0xfc,0x20,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x20,0x2f,0x28,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x22,0x45,0x44,0x88,0x10,0x4,0xfe,0x0,0x84,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0x24,0x4,0x84,0x94,0x8,
++0x10,0x3e,0x50,0x9,0x1,0xff,0x1,0x3f,0x21,0x23,0x25,0x5,0x9,0x11,0x61,0x1,0x20,0x7c,0xa0,0x10,0x4,0xfe,0x8,0xfc,0x8,0x88,0x58,0x20,0x10,0xe,0x4,0x0,
++0x10,0x10,0x17,0x24,0x25,0x65,0xa5,0x25,0x25,0x25,0x25,0x21,0x22,0x24,0x28,0x20,0x0,0x44,0xe4,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x44,0x4,0x84,0x44,0x14,0x8,
++0x2,0x1f,0x12,0x12,0x12,0x12,0x12,0xff,0x12,0x12,0x12,0x12,0x12,0x12,0x26,0x41,0x8,0x7c,0x48,0x48,0x48,0x48,0x48,0xfe,0x48,0x48,0x48,0x48,0x48,0x48,0xa8,0x10,
++0x0,0x40,0x27,0x24,0x85,0x65,0x25,0xd,0x15,0x25,0xe5,0x21,0x22,0x24,0x28,0x20,0x0,0x44,0xe4,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x4,0x84,0x44,0x54,0x8,
++0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x17,0x10,0x10,0x1f,0x11,0x22,0x24,0x4f,0x80,0x4,0xfe,0x4,0x4,0xfc,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,0x10,0x8,0xfc,0x4,
++0x0,0x8,0x7c,0x4b,0x4a,0x4a,0x7a,0x12,0x53,0x5c,0x51,0x51,0x5d,0xf1,0x41,0x1,0x88,0x50,0x0,0xfe,0x22,0xaa,0x72,0x22,0xfe,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x4,
++0x10,0x10,0x17,0x10,0xf8,0x17,0x10,0x19,0x36,0xd4,0x14,0x17,0x14,0x14,0x57,0x24,0x10,0x38,0xc0,0x40,0x44,0xfe,0x40,0x44,0x5e,0x44,0x44,0x5c,0x44,0x44,0xfc,0x4,
++0x0,0x0,0x3f,0x0,0x12,0x11,0x9,0x4,0x4,0x2,0x1,0x2,0x4,0x8,0x30,0xc0,0x0,0x0,0xf8,0x8,0x8,0x10,0x10,0x20,0x40,0x80,0x0,0x80,0x40,0x30,0xe,0x4,
++0x8,0x8,0xff,0xa,0x2,0xff,0x4,0x8,0x10,0x17,0x30,0x50,0x90,0x10,0x1f,0x10,0x20,0x24,0xfe,0x20,0x4,0xfe,0x0,0x40,0x48,0xfc,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x4,0x4,0xff,0x4,0x1,0x2,0x4,0x19,0x21,0xdf,0x1,0x9,0x19,0x21,0x5,0x2,0x40,0x44,0xfe,0x40,0x0,0x80,0x40,0x30,0xe,0xf4,0x0,0x20,0x18,0x8,0x0,0x0,
++0x1,0x1,0xff,0x5,0x9,0x11,0x3f,0xd0,0x10,0x1f,0x10,0x10,0x1f,0x0,0xff,0x0,0x0,0x4,0xfe,0x40,0x20,0x10,0xfe,0x14,0x10,0xf0,0x10,0x10,0xf0,0x4,0xfe,0x0,
++0x0,0x8,0xfc,0x17,0x10,0x21,0x22,0x7c,0xab,0x2a,0x2b,0x2a,0x2b,0x38,0x27,0x0,0x40,0x40,0x44,0xfe,0xe0,0x50,0x4e,0x44,0xf8,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x0,
++0x11,0x11,0x17,0x11,0xfc,0x10,0x15,0x1a,0x34,0xd3,0x10,0x12,0x12,0x14,0x51,0x20,0x10,0x10,0xfc,0x10,0x40,0xa0,0x10,0x4e,0x44,0xf8,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x2,0x1,0x7f,0x48,0x8e,0x12,0x2c,0x68,0x17,0x20,0x5f,0x81,0x9,0x11,0x25,0x2,0x0,0x0,0xfe,0x2,0xf4,0x90,0x60,0x20,0xd0,0xe,0xf4,0x0,0x20,0x18,0x8,0x0,
++0x0,0x4,0x8,0x10,0x2f,0xc4,0x4,0x8,0x30,0x1,0x21,0x21,0x21,0x21,0x3f,0x20,0x80,0x40,0x20,0x10,0xee,0x24,0x20,0xa0,0x40,0x0,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x4,0x7f,0x1,0x1,0x3f,0x1,0x2,0xff,0x4,0x8,0x17,0x20,0x40,0x80,0x1f,0x20,0x48,0xfc,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,0x20,0xf0,0x80,0x80,0x88,0xfc,
++0x0,0x40,0x37,0x14,0x0,0x0,0xf7,0x10,0x10,0x10,0x17,0x10,0x14,0x18,0x10,0x0,0x80,0x40,0xfe,0x2,0x24,0x70,0x80,0x80,0x88,0xfc,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x11,0x1d,0x31,0xd1,0x11,0x11,0x11,0x12,0x54,0x20,0x8,0x1c,0xe0,0x0,0x0,0x4,0xfe,0x20,0x20,0x30,0x2c,0x24,0x20,0x20,0x20,0x20,
++0x8,0x8,0x28,0x2e,0x28,0x28,0x2e,0x71,0x1,0xff,0x3,0x5,0x9,0x11,0x21,0x1,0x80,0x88,0x98,0xa0,0xc0,0x84,0x84,0x7c,0x0,0xff,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x4,0x8,0x12,0xea,0x2c,0x29,0x14,0xe6,0xa,0x12,0x66,0xa,0x13,0xe2,0x14,0x8,0x8,0x8,0x8,0x8,0x8,0xfe,0x8,0x18,0x18,0x28,0x48,0x88,0x8,0x8,0x28,0x10,
++0x10,0x10,0x11,0x12,0xff,0x12,0x16,0x1b,0x30,0xd1,0x12,0x1c,0x10,0x11,0x50,0x20,0x40,0x80,0xf0,0x20,0xf8,0x48,0x48,0xf8,0xa0,0x22,0x1e,0xc0,0x30,0x80,0x60,0x10,
++0x10,0x10,0x11,0x13,0xf8,0x17,0x10,0x19,0x32,0xd4,0x19,0x12,0x10,0x11,0x50,0x23,0x80,0xa0,0x10,0xf8,0x80,0xfe,0xa0,0x10,0x48,0x8e,0x24,0x40,0x90,0x20,0x40,0x80,
++0x11,0x10,0x10,0x7d,0x55,0x55,0x55,0x55,0x7d,0x11,0x14,0x1f,0xe4,0x40,0x0,0x0,0x4,0x8c,0x50,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x20,0x20,0x20,0x20,
++0x20,0x20,0x20,0x39,0x4b,0x56,0x82,0x23,0x20,0x21,0x26,0x20,0x28,0x31,0x20,0x0,0x80,0x80,0xf0,0x20,0xf8,0x48,0x48,0xf8,0xa2,0x22,0x1e,0xc0,0x30,0x80,0x60,0x10,
++0x1,0x21,0x11,0x12,0x7,0x2,0xf2,0x13,0x10,0x11,0x16,0x10,0x10,0x15,0x18,0x0,0x0,0x0,0xf0,0x20,0xf8,0x48,0x48,0xf8,0xa2,0x22,0x1e,0xc0,0x30,0x80,0x60,0x10,
++0x10,0x10,0x27,0x24,0x4d,0xf5,0x25,0x45,0xfd,0x5,0x5,0x1c,0xe5,0x48,0x13,0x20,0x40,0x24,0xfe,0x0,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfc,0x20,0xfe,0x0,
++0x10,0x10,0x10,0x1d,0x20,0x20,0x7c,0x91,0x11,0xfd,0x11,0x11,0x15,0x19,0x12,0x4,0x20,0x10,0x4,0xfe,0x0,0x84,0x48,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x2,0x1,0x1,0x7f,0x8,0x4,0x4,0x1f,0x10,0x10,0x10,0x10,0x20,0x20,0x40,0x80,0x0,0x0,0x8,0xfc,0x10,0x20,0x48,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x20,0x17,0x50,0x44,0x42,0x4f,0x49,0x4f,0x49,0x4f,0x41,0x5f,0x41,0x41,0x41,0x40,0x4,0xfe,0x4,0x44,0x84,0xe4,0x24,0xe4,0x24,0xe4,0x4,0xf4,0x4,0x4,0x4,0xc,
++0x8,0xff,0x0,0x7f,0x55,0x5d,0x55,0x7f,0x0,0x3e,0x32,0x2a,0x3e,0x0,0xff,0x0,0x4,0xfe,0x10,0x24,0x7e,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x10,0x28,0x46,0x82,
++0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x20,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x1,0x45,0x29,0x11,0x29,0x49,0x9,0x18,0x2b,0x4a,0x8a,0xb,0xa,0xa,0x53,0x22,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x20,0x27,0x20,0x20,0xf8,0x21,0x27,0x21,0x21,0x21,0x3a,0xe2,0x44,0x8,0x11,0x0,0x0,0xf8,0x20,0x40,0x80,0x4,0xfe,0x24,0x24,0x24,0x24,0x44,0x44,0x84,0x28,0x10,
++0x1,0x11,0x9,0x1,0x7f,0x40,0x80,0x1f,0x0,0x0,0x7f,0x2,0x4,0x8,0x1f,0x0,0x0,0x10,0x20,0x0,0xfe,0x2,0x24,0xf0,0x0,0x8,0xfc,0x0,0x40,0x20,0xf0,0x10,
++0x1,0x11,0x9,0x7f,0x40,0x8f,0x8,0xf,0x1,0x1f,0x11,0x11,0x11,0x11,0x1,0x1,0x0,0x10,0x20,0xfe,0x2,0xe4,0x20,0xe0,0x10,0xf8,0x10,0x10,0x10,0x50,0x20,0x0,
++0x8,0x8,0x8,0x8,0x8,0x9,0x8,0xff,0x9,0x9,0x8,0x8,0x8,0x9,0xe,0x8,0x0,0x10,0x30,0x40,0x80,0x0,0x4,0xfe,0x0,0x0,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x8,0xa,0x9,0x10,0x17,0x34,0x58,0x93,0x10,0x10,0x1f,0x10,0x10,0x11,0x13,0x10,0x40,0x48,0x50,0x40,0xfe,0x2,0x14,0xf8,0x0,0x4,0xfe,0x40,0x90,0x8,0xfc,0x4,
++0x8,0x7f,0x48,0x48,0x48,0x79,0x4b,0x48,0x48,0x79,0x49,0x4a,0x4c,0x48,0x49,0x98,0x0,0xf8,0x20,0x40,0x80,0x4,0xfe,0x94,0x94,0x24,0x24,0x44,0x44,0x84,0x28,0x10,
++0x0,0x0,0x1f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x40,0x80,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x49,0x29,0x2a,0x8,0x7f,0x41,0x41,0x5d,0x55,0x55,0x55,0x5d,0x41,0x45,0x42,0x20,0x20,0x20,0x24,0x7e,0x84,0x44,0x44,0x48,0x28,0x28,0x10,0x28,0x28,0x46,0x84,
++0x10,0x13,0x10,0x7c,0x54,0x55,0x57,0x7c,0x54,0x55,0x55,0x7e,0x54,0x10,0x11,0x10,0x0,0xf8,0x20,0x40,0x80,0x4,0xfe,0x94,0x94,0x24,0x24,0x44,0x44,0x84,0x28,0x10,
++0x1,0x9,0x7d,0x49,0x49,0x49,0x49,0x48,0x4b,0x4a,0x7a,0x4b,0x2,0x2,0x3,0x2,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x13,0x12,0x12,0x23,0x22,0x62,0xa3,0x20,0x27,0x24,0x24,0x27,0x24,0x24,0x27,0x24,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x10,0x13,0x10,0x7c,0x10,0x10,0xfd,0x12,0x51,0x5d,0x51,0x51,0x71,0x48,0x87,0x0,0x8,0xfc,0x88,0x88,0x88,0xa8,0x10,0x0,0xf8,0x8,0x8,0x8,0xf8,0x6,0xfc,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x11,0x15,0x1a,0x32,0xd4,0x10,0x10,0x10,0x10,0x50,0x27,0x40,0x40,0x40,0x40,0x50,0x48,0x46,0x42,0x48,0x48,0x48,0x50,0x10,0x20,0xc0,0x0,
++0x10,0x10,0x10,0x1c,0x21,0x21,0x7d,0x92,0x12,0x7c,0x10,0x10,0x14,0x18,0x10,0x7,0x40,0x40,0x40,0x40,0x50,0x48,0x46,0x42,0x48,0x48,0x48,0x50,0x10,0x20,0xc0,0x0,
++0x8,0xa,0x7f,0x8,0x9,0x7f,0x41,0x7f,0x41,0x7f,0x48,0xa,0xff,0x8,0x8,0x9,0x4,0x7e,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x44,0x94,0x8,
++0x2,0x22,0xff,0xa2,0xa2,0xaf,0xa8,0xaf,0xa8,0xaf,0xaa,0xe2,0xbf,0x2,0x2,0x2,0x4,0x3e,0xa4,0x24,0xa4,0xfc,0xa4,0xa4,0xa4,0xbc,0x24,0xa4,0xe4,0x24,0x44,0x8c,
++0x2,0x42,0x2f,0x22,0x2,0x8f,0x48,0x4f,0x8,0x1f,0x2a,0xe2,0x3f,0x22,0x22,0x22,0x4,0x3e,0xa4,0x24,0xa4,0xfc,0xa4,0xa4,0xa4,0xbc,0x24,0xa4,0xe4,0x24,0x44,0x8c,
++0x11,0x11,0x22,0x11,0x3f,0x21,0x3f,0x21,0x3f,0x1,0xff,0x5,0x9,0x11,0x61,0x1,0x10,0x10,0x20,0x10,0xf8,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x40,0x20,0x1c,0x8,0x0,
++0x0,0x8,0x7c,0x48,0x49,0x49,0x49,0x4a,0x4a,0x4c,0x48,0x78,0x48,0x0,0x0,0x7,0x40,0x40,0x40,0x40,0x50,0x48,0x46,0x42,0x48,0x48,0x48,0x10,0x10,0x20,0xc0,0x0,
++0x10,0x10,0x10,0x10,0x55,0x59,0x51,0x92,0x12,0x14,0x10,0x28,0x24,0x44,0x80,0x7,0x40,0x40,0x40,0x40,0x50,0x48,0x46,0x42,0x48,0x48,0x48,0x10,0x10,0x20,0xc0,0x0,
++0x2,0x2,0x7f,0x4,0x9,0x11,0x21,0x3f,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x0,0x8,0xfc,0x0,0x0,0x0,0x20,0xf0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x10,0x10,0xfc,0x11,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x17,0x50,0x20,0x20,0x20,0x20,0x20,0x20,0x28,0x3c,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x22,0x21,0x2f,0x22,0xf4,0x2f,0x20,0x37,0x24,0xe7,0x24,0x27,0x24,0x24,0xa4,0x45,0x10,0x10,0xd0,0x14,0xbe,0xc4,0x24,0xa8,0xa8,0xa8,0x90,0x90,0xa8,0xa8,0xc6,0x84,
++0x25,0x3f,0x44,0xbf,0x4,0x3f,0x24,0x25,0x0,0x3f,0x1,0x1f,0x1,0x7f,0x1,0x3,0x4,0x84,0x24,0xa4,0x24,0xa4,0xa4,0x8c,0x30,0xc0,0x0,0xf0,0x0,0xfc,0x0,0x0,
++0x10,0x12,0x12,0x22,0x42,0x92,0x13,0x2e,0x62,0xa2,0x22,0x23,0x20,0x20,0x21,0x22,0x0,0x4,0xfe,0x24,0x24,0xa4,0xe4,0x24,0x24,0x64,0xa4,0x24,0x44,0x84,0x28,0x10,
++0x2,0x41,0x2f,0x22,0x4,0x8f,0x40,0x47,0x14,0x27,0xe4,0x27,0x24,0x24,0x24,0x25,0x10,0x10,0xd0,0x14,0xbe,0xc4,0x24,0xa8,0xa8,0xa8,0x90,0x90,0xa8,0xa8,0xc6,0x84,
++0x11,0x11,0x11,0x11,0xff,0x11,0x33,0x3b,0x55,0x55,0x99,0x11,0x11,0x11,0x11,0x11,0x0,0x3e,0x22,0x24,0xe4,0x28,0x28,0xa4,0x62,0x22,0x22,0x32,0x2a,0x24,0x20,0x20,
++0x0,0x3f,0x21,0x21,0x21,0x3f,0x20,0x20,0x20,0x3f,0x21,0x21,0x21,0x21,0x3f,0x0,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x8,0xfc,0x0,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x25,0x25,0x24,0x24,0x44,0x45,0x86,0x4,0x10,0xf8,0x0,0x20,0xf0,0x0,0x8,0xfc,0x0,0x10,0xa0,0x40,0x30,0xe,0x4,0x0,
++0x1,0x1,0x5,0xd,0x11,0x21,0x41,0x0,0x1,0x1,0x7f,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x40,0x20,0x18,0xc,0x4,0x0,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x0,
++0x1f,0x10,0x1f,0x10,0x1f,0x0,0x3f,0x20,0x2f,0x20,0x3f,0x25,0x44,0x44,0x87,0x4,0xf0,0x10,0xf0,0x10,0xf0,0x0,0xf8,0x0,0xf0,0x4,0xfe,0x8,0x90,0x60,0x1e,0x4,
++0x10,0x10,0x10,0x10,0x53,0x5a,0x54,0x90,0x10,0x10,0x10,0x11,0x11,0x12,0x14,0x18,0x40,0x40,0x40,0x40,0xfc,0x44,0x48,0x40,0x40,0xa0,0xa0,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x40,0x37,0x14,0x84,0x68,0x21,0x9,0x11,0x21,0xe1,0x21,0x22,0x22,0x24,0x28,0x0,0x0,0xfc,0x4,0x8,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x78,0x48,0x57,0x50,0x60,0x51,0x4a,0x4b,0x48,0x69,0x51,0x42,0x44,0x40,0x40,0x40,0x40,0x44,0xfe,0x80,0xa0,0x20,0x28,0xfc,0x20,0x28,0x24,0x26,0x22,0xa0,0x40,
++0x10,0x10,0x10,0x7d,0x11,0x12,0xfc,0x11,0x10,0x5c,0x51,0x50,0x70,0x48,0x87,0x0,0x40,0x40,0xa0,0x10,0x28,0x6e,0x84,0x20,0x60,0x88,0x18,0x20,0x40,0x86,0xfc,0x0,
++0x20,0x10,0x10,0x0,0xfc,0xb,0x10,0x34,0x59,0x94,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x90,0x90,0x10,0x10,0x10,0x50,0x20,
++0x12,0x11,0x17,0x14,0xf9,0x11,0x11,0x18,0x37,0xd0,0x13,0x10,0x17,0x10,0x51,0x20,0x48,0x50,0xfe,0x2,0xf4,0x10,0xf0,0x18,0xe0,0x40,0xf8,0x40,0xfc,0x40,0x40,0x80,
++0x4,0xe,0x78,0x8,0x9,0xfe,0x8,0x1c,0x1a,0x28,0x29,0x49,0x8a,0x8,0x8,0x8,0x40,0x40,0x80,0x80,0xfe,0x4,0x28,0x20,0xa8,0xa4,0x26,0x22,0x20,0x20,0xa0,0x40,
++0x20,0x20,0x20,0x27,0xfc,0x24,0x24,0x27,0x24,0x24,0x3c,0xe6,0x45,0x4,0x8,0x10,0x20,0x28,0x24,0xfe,0x20,0x20,0x24,0xa4,0xa8,0xa8,0x90,0x90,0x30,0x4a,0x8a,0x6,
++0x10,0x13,0x10,0x12,0xfd,0x12,0x37,0x38,0x57,0x52,0x92,0x13,0x11,0x10,0x1f,0x10,0x0,0xa8,0xb4,0xa8,0x10,0x8,0xfe,0x4,0xf8,0x8,0x8,0xf8,0x10,0xa0,0xfe,0x0,
++0x0,0x0,0x0,0x3f,0x20,0x20,0x20,0x3e,0x22,0x22,0x22,0x2a,0x24,0x40,0x81,0x0,0x80,0xa0,0x90,0xfc,0x80,0x80,0x84,0x44,0x48,0x48,0x30,0x20,0x62,0x92,0xa,0x6,
++0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x7f,0x1,0x1,0x3f,0x1,0x1,0xff,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x8,0xfc,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,
++0x0,0x0,0x1f,0x1,0xff,0x5,0x3d,0x5,0xd,0x75,0x3,0x5,0x9,0x11,0x61,0x1,0x20,0xf0,0x0,0x4,0xfe,0x40,0x58,0x60,0x44,0x3c,0x80,0x40,0x30,0x1c,0x8,0x0,
++0x8,0x1d,0xf1,0x11,0x11,0xff,0x11,0x38,0x37,0x54,0x50,0x91,0x10,0x10,0x17,0x10,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x0,0xfe,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,
++0x10,0x1b,0x20,0x40,0x12,0x1a,0x32,0x52,0x97,0x10,0x2a,0x29,0x28,0x48,0x7,0x0,0x8,0xfc,0x40,0x50,0x78,0x40,0x40,0x48,0xfc,0x0,0x10,0x88,0xa4,0x24,0xe0,0x0,
++0x0,0x47,0x31,0x15,0x82,0x44,0x4f,0x10,0x17,0x24,0xe4,0x27,0x22,0x21,0x3f,0x20,0x0,0x50,0x68,0x50,0x20,0x10,0xfe,0x4,0xf0,0x10,0x10,0xf0,0x20,0x44,0xfe,0x0,
++0x0,0x40,0x20,0x27,0x4,0x4,0xe4,0x27,0x24,0x24,0x24,0x2e,0x35,0x24,0x8,0x10,0x20,0x28,0x24,0xfe,0x20,0x20,0x24,0xa4,0xa8,0xa8,0x90,0x90,0x30,0x4a,0x8a,0x6,
++0x1f,0x0,0x1,0x1,0x79,0xf,0x9,0x11,0x17,0x21,0x21,0x4f,0x81,0x1,0x5,0x2,0xf0,0x20,0x40,0x84,0x2c,0xf0,0x20,0x10,0xd0,0x8,0x4e,0xe4,0x0,0x0,0x0,0x0,
++0x0,0x47,0x24,0x24,0x7,0x0,0xef,0x20,0x20,0x27,0x20,0x20,0x2f,0x50,0x8f,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0xf8,0x80,0xa0,0xf0,0x80,0x90,0xf8,0x6,0xfc,0x0,
++0x8,0xfc,0x9,0x49,0x49,0x49,0x49,0x48,0x7f,0x4,0x5,0x1c,0xe4,0x44,0x14,0x8,0x20,0x24,0xfe,0x24,0xfc,0x24,0xfc,0x4,0xfe,0x80,0xfc,0x4,0x4,0x4,0x28,0x10,
++0x8,0x1c,0xf1,0x10,0x11,0xfc,0x10,0x38,0x37,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x0,0x8,0xfc,0x20,0x24,0xa4,0xa8,0x20,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x8,0x7c,0x48,0x49,0x4a,0x4d,0x48,0x48,0x48,0x48,0x79,0x4a,0x2,0x1,0x0,0x80,0x80,0x88,0xfc,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x2,0x2,0xfe,0x0,
++0x1,0x0,0x1f,0x12,0x92,0x53,0x55,0x19,0x31,0x5f,0xd1,0x11,0x12,0x22,0x44,0x8,0x0,0x84,0xfe,0x0,0x4,0xfe,0x24,0x24,0x24,0xe4,0x24,0x24,0xa4,0x7c,0x24,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x17,0x18,0x30,0xd7,0x12,0x11,0x11,0x10,0x50,0x20,0x40,0x40,0x50,0xf8,0x40,0x48,0xfc,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x50,0x20,
++0x2,0x3f,0x22,0x22,0x3e,0x22,0x3e,0x2,0xff,0x8,0x2a,0x2f,0x28,0x58,0x87,0x0,0x40,0x40,0x40,0x40,0x48,0x58,0x60,0x40,0x40,0x44,0x44,0x3c,0x0,0x6,0xfc,0x0,
++0x0,0x40,0x32,0x12,0x82,0x63,0x2e,0x2,0x12,0x22,0xe2,0x22,0x22,0x22,0x21,0x20,0x40,0x40,0x40,0x48,0x7c,0xc8,0x48,0x48,0x48,0x48,0x68,0x50,0x42,0x2,0xfe,0x0,
++0x0,0x43,0x22,0x22,0x2,0x3,0xe2,0x22,0x22,0x22,0x22,0x24,0x28,0x50,0x8f,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x80,0x80,0x40,0x20,0x1c,0x0,0x6,0xfc,0x0,
++0x8,0x7c,0x9,0x9,0x9,0x79,0x41,0x47,0x41,0x79,0x9,0x9,0x9,0x9,0x50,0x20,0x20,0x20,0x20,0x20,0x24,0x3e,0xe4,0x24,0x24,0x24,0x34,0x28,0x22,0x2,0xfe,0x0,
++0x8,0xfc,0x9,0x49,0x49,0x49,0x49,0x4b,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x28,0x10,0x20,0x20,0x20,0x20,0x24,0x3e,0xe4,0x24,0x24,0x24,0x34,0x28,0x22,0x2,0xfe,0x0,
++0x2,0xff,0x24,0x24,0x3c,0x24,0x24,0x3c,0x24,0x24,0x3f,0xe4,0x44,0x7,0x4,0x4,0x10,0x10,0x10,0x90,0x94,0x9e,0x90,0x90,0x90,0x90,0x90,0x90,0x94,0xfe,0x0,0x0,
++0x1,0x11,0x11,0x11,0x11,0x11,0xff,0x0,0x21,0x21,0x22,0x24,0x28,0x20,0x3f,0x20,0x0,0x20,0xf0,0x0,0x0,0x4,0xfe,0x0,0x8,0x8,0x88,0x68,0x28,0x8,0xf8,0x8,
++0x8,0x8,0x9,0x13,0x10,0x30,0x50,0x91,0x16,0x10,0x10,0x13,0x10,0x10,0x10,0x17,0x80,0xfc,0x8,0x10,0xa0,0x40,0x90,0x10,0x20,0x7e,0x84,0x48,0x30,0x20,0xc0,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x10,0x1f,0x14,0x14,0x12,0x11,0x10,0x20,0x20,0x40,0x80,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,0x0,0x0,0x0,0x80,0x40,0x30,0xe,0x4,
++0x1,0x1,0x1,0x3f,0x1,0x1,0xff,0x4,0x4,0x14,0x14,0x24,0x48,0x88,0x11,0x20,0x0,0x0,0x10,0xf8,0x0,0x4,0xfe,0x40,0x40,0x50,0x48,0x46,0x42,0x40,0x40,0x80,
++0x20,0x20,0x27,0xf8,0x24,0x22,0x70,0x50,0x52,0x54,0x50,0x52,0x21,0x50,0x4f,0x80,0x0,0x4,0xbe,0x84,0xa4,0x94,0x84,0x84,0x94,0xa4,0x84,0x94,0x8,0x6,0xfc,0x0,
++0x0,0x0,0x3f,0x20,0x20,0x20,0x3f,0x20,0x20,0x23,0x20,0x20,0x40,0x40,0x80,0x0,0x10,0x78,0x80,0x0,0x0,0x8,0xfc,0x80,0x80,0x80,0xe0,0xb0,0x90,0x80,0x80,0x80,
++0x10,0x10,0x11,0x15,0x59,0x51,0x51,0x91,0x11,0x11,0x10,0x28,0x25,0x42,0x84,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x90,0x88,0xc,0x4,0x0,
++0x2,0x1,0x1,0xff,0x2,0x4,0x8,0x1f,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x60,0x0,0x0,0x4,0xfe,0x0,0x40,0x20,0xf0,0x50,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x40,0x20,0x20,0x7,0x14,0x14,0x14,0x24,0xe7,0x24,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xfc,0x44,0x40,0x40,0x40,0x40,0x40,
++0x1,0x1,0x1,0x1,0x3f,0x21,0x21,0x21,0x21,0x3f,0x21,0x1,0x1,0x1,0x7e,0x20,0x0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x10,0x8,0xfc,0x4,0x0,
++0x1,0x21,0x21,0x3f,0x22,0x1,0x7f,0x40,0x9f,0x0,0x7f,0x1,0x11,0x11,0x25,0x2,0x0,0x8,0x8,0xf8,0x8,0x0,0xfe,0x2,0xf4,0x0,0xfc,0x0,0x20,0x18,0x8,0x0,
++0x2,0x1,0x7f,0x42,0x82,0x2,0x3f,0x2,0x2,0x4,0x4,0x8,0x9,0x12,0x20,0x40,0x0,0x0,0xfe,0x2,0x84,0x50,0xf8,0x80,0x90,0xb0,0xc0,0x80,0x82,0x82,0x7e,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x11,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x11,0x51,0x21,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x2,0xff,0x28,0x2a,0xff,0xaa,0xaa,0xaa,0xc6,0x82,0xfe,0x82,0x82,0xfe,0x83,0x2,0x44,0x44,0x54,0x54,0x54,0x54,0xfc,0x54,0x54,0x54,0x54,0x54,0x94,0x94,0x4,0x4,
++0x0,0x4,0x7f,0x54,0x57,0x54,0x57,0x7c,0x54,0x57,0x55,0x55,0x7e,0x44,0x8,0x0,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x80,0x88,0xfe,0x8,0x48,0x28,0x8,0x28,0x10,
++0x0,0x7c,0x47,0x44,0x47,0x44,0x7f,0x10,0x10,0x5f,0x51,0x51,0x5a,0xe4,0x48,0x0,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x80,0x88,0xfe,0x8,0x48,0x28,0x8,0x28,0x10,
++0x8,0x1f,0xf2,0x12,0x12,0xfe,0x12,0x3a,0x36,0x52,0x52,0x92,0x12,0x12,0x14,0x18,0x0,0xfe,0x22,0x22,0xfa,0x22,0x22,0xfa,0x2,0xfa,0x8a,0x8a,0x8a,0xfa,0x8a,0x4,
++0x4,0xe,0x78,0x8,0xfe,0x8,0x1d,0x2a,0x48,0x9,0x2,0x29,0x28,0x48,0x7,0x0,0x20,0x20,0x20,0xa4,0xac,0xb0,0x50,0x48,0x8e,0x4,0x0,0x90,0xac,0x24,0xe0,0x0,
++0x10,0x1f,0x28,0x45,0x1,0x7f,0x2,0x3f,0x4,0xff,0x8,0x1f,0x24,0x42,0x2,0x0,0x40,0x7c,0xa0,0x10,0x0,0xfc,0x0,0xf8,0x0,0xfe,0x10,0xfc,0x10,0x10,0x50,0x20,
++0x9,0x9,0x9,0x11,0x17,0x31,0x51,0x91,0x11,0x11,0x11,0x12,0x12,0x14,0x18,0x10,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x10,0x17,0x24,0x24,0x4d,0xfc,0x14,0x25,0x44,0xfd,0x5,0x5,0x1d,0xe5,0x48,0x10,0x4,0xfe,0x44,0x44,0xf4,0x44,0x44,0xf4,0x4,0xf4,0x14,0x14,0x14,0xf4,0x14,0x8,
++0x0,0x9,0x7f,0x49,0x49,0x7f,0x49,0x4b,0x4b,0x7d,0x49,0x49,0x49,0x79,0x49,0x1,0x80,0xd0,0x10,0x12,0x56,0xb8,0x10,0x90,0x50,0x10,0x28,0x28,0x28,0x46,0x84,0x0,
++0x0,0x3f,0x2,0x2,0x2,0x2,0x2,0x1f,0x4,0x4,0x4,0x4,0x4,0x4,0xff,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x0,
++0x2,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x1,0x1,0xff,0x2,0x4,0x18,0x60,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x20,0x14,0xfe,0x80,0x60,0x1c,0x8,
++0x20,0x10,0x10,0x5,0xfc,0x8,0x10,0x34,0x58,0x94,0x10,0x10,0x10,0x11,0x12,0x14,0x0,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x4,0x28,0x10,
++0x1,0x1,0x21,0x21,0x21,0x21,0x3f,0x21,0x1,0x41,0x41,0x41,0x41,0x41,0x7f,0x40,0x0,0x0,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x20,0x27,0x24,0x24,0xff,0x24,0x75,0x6d,0xa5,0x25,0x24,0x25,0x25,0x2b,0x30,0x20,0x4,0xfe,0x0,0x44,0xe4,0x4,0xde,0x44,0x44,0xd4,0xc,0x44,0x44,0xe4,0x14,0x8,
++0x0,0x3f,0x20,0x3f,0x20,0x2f,0x29,0x29,0x29,0x2f,0x20,0x29,0x2a,0x23,0x5c,0x80,0x4,0xfe,0x0,0x88,0x8,0x8,0xfe,0x8,0x8,0x48,0x28,0x8,0x8,0x88,0x28,0x10,
++0x4,0x7f,0x44,0x44,0x47,0x7c,0x10,0x17,0x50,0x59,0x53,0x55,0x5d,0xf1,0x41,0x1,0x90,0xfe,0x90,0x48,0xf8,0x50,0x64,0xfe,0x80,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x20,0x20,0x23,0x7a,0x82,0x2,0xfb,0x22,0x22,0xfb,0x22,0x22,0x2f,0x30,0x20,0x0,0x10,0x10,0xd0,0x54,0x7e,0x54,0xd4,0x54,0x54,0xd4,0x54,0x54,0xf4,0x24,0x54,0x88,
++0x10,0x10,0x20,0x3c,0x45,0x8a,0x14,0xfe,0x4,0x4,0x7c,0x4,0x4,0xfc,0x4,0x0,0x40,0x50,0x94,0xfe,0x90,0x90,0xfc,0x90,0x90,0xfc,0x90,0x90,0x94,0xfe,0x80,0x80,
++0x0,0x5e,0x32,0x34,0x14,0x95,0x5a,0x14,0x32,0x33,0xda,0x54,0x51,0x52,0x50,0x10,0x20,0x20,0x50,0x50,0x88,0x6,0xfc,0x20,0x24,0xfe,0x20,0xa8,0x26,0x22,0xa0,0x40,
++0x0,0x78,0x48,0x50,0x51,0x62,0x55,0x48,0x48,0x4f,0x68,0x51,0x42,0x44,0x41,0x40,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x40,0x50,0xfc,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x8,0x8,0x7e,0x8,0x1c,0x2a,0x48,0x3f,0x1,0x9,0x9,0x11,0x11,0x29,0x47,0x80,0x20,0x28,0xfc,0x20,0x78,0xa4,0x20,0xf8,0x10,0x40,0xe0,0x0,0x0,0x6,0xfc,0x0,
++0x0,0x4,0xfe,0x11,0x11,0x21,0x25,0x7f,0xa4,0x25,0x25,0x25,0x25,0x3d,0x25,0x1,0x20,0x20,0x20,0x24,0x24,0x24,0x24,0xfc,0x20,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x10,0x18,0x25,0x24,0x60,0xbd,0x24,0x25,0x26,0x24,0x25,0x26,0x24,0x20,0x20,0x40,0x40,0x48,0xfc,0x50,0x64,0xfe,0x88,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,
++0x1,0x3f,0x1,0xf,0x8,0x9,0x9,0x7f,0x8,0x7e,0x8,0x3e,0x22,0x2a,0x2a,0xff,0x10,0xf8,0x0,0xe0,0x20,0x20,0x28,0xfc,0x20,0xfc,0x20,0xf8,0x88,0xa8,0xa8,0xfe,
++0x10,0x10,0x1f,0x10,0xfd,0x13,0x10,0x18,0x33,0xd0,0x17,0x14,0x17,0x14,0x57,0x24,0x80,0x44,0xfe,0x80,0x10,0xf0,0x40,0x88,0xf8,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x4,
++0x20,0x20,0x3c,0x48,0x51,0xfd,0x55,0x55,0x7d,0x55,0x55,0x7d,0x54,0x54,0x55,0x8c,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0xfc,0x20,0x28,0x3c,0xe2,0x82,
++0x0,0x10,0x10,0x10,0x1e,0x22,0x22,0x22,0x54,0x94,0x8,0x14,0x14,0x22,0x41,0x80,0x40,0x40,0x40,0x40,0x40,0x60,0x50,0x4c,0x44,0x40,0x40,0x40,0x40,0x6,0xfc,0x0,
++0x10,0x10,0x12,0x12,0xfb,0x10,0x17,0x18,0x30,0xd7,0x14,0x14,0x14,0x14,0x54,0x24,0x40,0x40,0x48,0x48,0xf8,0x4,0xfe,0x40,0x84,0xfe,0xa4,0xa4,0xa4,0xa4,0xb4,0x8,
++0x0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x0,0x4,0x4,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x4,0x4,0x4,
++0x2,0x1,0x7f,0x44,0x88,0x0,0x3f,0x8,0x10,0x3f,0x1,0x2,0x4,0x18,0x61,0x0,0x0,0x0,0xfe,0x42,0x24,0x0,0xf8,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x40,0x80,
++0x10,0x10,0x10,0x11,0xfc,0x13,0x30,0x39,0x56,0x50,0x91,0x16,0x10,0x17,0x10,0x10,0x80,0xf8,0x88,0xf8,0x14,0xfe,0x80,0x44,0x6c,0xb0,0x30,0x68,0xa6,0x24,0xa0,0x40,
++0x8,0x8,0x8,0x17,0x10,0x30,0x5f,0x90,0x11,0x13,0x10,0x11,0x10,0x10,0x10,0x10,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x80,0x0,0xfc,0x8,0x10,0xa0,0x40,0x60,0x20,
++0x8,0x12,0x3f,0x22,0x32,0x2a,0x22,0x23,0xfe,0x22,0x32,0x2a,0x22,0x42,0x8a,0x4,0x8,0x7c,0x48,0x48,0x48,0x48,0x86,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x0,0x8,0x7e,0x4a,0x4b,0x48,0x4f,0x48,0x48,0x4b,0x4a,0x4a,0x7a,0x4a,0x2,0x2,0x40,0x40,0x48,0x48,0xf8,0x4,0xfe,0x40,0x84,0xfe,0xa4,0xa4,0xa4,0xa4,0xb4,0x8,
++0x1,0x1,0x3f,0x21,0x21,0x3f,0x1,0x1,0x7f,0x41,0x41,0x7f,0x41,0x1,0x1,0x1,0x0,0x8,0xfc,0x8,0x8,0xf8,0x0,0x4,0xfe,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,
++0x1,0x0,0x1f,0x10,0x91,0x52,0x54,0x1b,0x32,0x52,0xd2,0x12,0x22,0x22,0x41,0x0,0x0,0x84,0xfe,0x80,0x40,0x20,0x10,0xee,0x24,0x20,0xa0,0x40,0x8,0x8,0xf8,0x0,
++0x2,0x1,0x7f,0x48,0x92,0x4,0x3f,0x22,0x23,0x24,0x2a,0x21,0x22,0x24,0x3f,0x20,0x0,0x0,0xfe,0x22,0x14,0x0,0xf8,0x8,0xc8,0x48,0x88,0x8,0x88,0x8,0xf8,0x8,
++0x20,0x20,0x27,0xf9,0xa8,0xaf,0xa8,0xab,0xaa,0xab,0xaa,0xbb,0x20,0x23,0x20,0x2f,0x80,0x48,0xfc,0x10,0xa4,0xfe,0x8,0xfc,0x48,0xf8,0x48,0xf8,0x40,0xf8,0x40,0xfe,
++0x1,0x0,0x3f,0x20,0x20,0x20,0x3f,0x20,0x21,0x21,0x22,0x24,0x48,0x50,0x80,0x0,0x0,0x84,0xfe,0x80,0x80,0x88,0xfc,0x80,0xc0,0xa0,0x90,0x88,0x8e,0x84,0x80,0x80,
++0x20,0x17,0x50,0x40,0x4f,0x40,0x44,0x44,0x44,0x47,0x40,0x5f,0x40,0x40,0x40,0x40,0x4,0xfe,0x4,0x44,0xe4,0x44,0x44,0x44,0x44,0xf4,0x14,0xd4,0x14,0x54,0x24,0xc,
++0x8,0x8,0x14,0x12,0x21,0x20,0x7e,0xa2,0x22,0x2a,0x24,0x20,0x21,0x21,0x1f,0x0,0x4,0x4,0x4,0x24,0xa4,0xa4,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x4,0x14,0x8,
++0x0,0x8,0x7c,0x48,0x49,0x4a,0x48,0x48,0x48,0x48,0x48,0x78,0x49,0x2,0x4,0x8,0x80,0x80,0x80,0xfc,0x4,0x48,0x40,0x40,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x10,0x10,0x10,0x10,0x55,0x5a,0x50,0x90,0x10,0x10,0x10,0x10,0x19,0x26,0x44,0x88,0x80,0x80,0x80,0xfc,0x4,0x48,0x40,0x40,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x10,0x10,0x13,0x10,0xfc,0x17,0x11,0x19,0x37,0xd1,0x11,0x17,0x10,0x10,0x53,0x20,0x8,0x3c,0xc0,0x40,0x48,0xfc,0x50,0x54,0xfe,0x50,0x50,0xfc,0x40,0x50,0xf8,0x0,
++0x10,0x10,0x13,0x1c,0x20,0x23,0x7d,0x91,0x17,0x79,0x11,0x13,0x14,0x18,0x13,0x0,0x8,0x3c,0xc0,0x40,0x48,0xfc,0x50,0x54,0xfe,0x50,0x50,0xfc,0x40,0x50,0xf8,0x0,
++0x0,0x0,0x3f,0x1,0x1,0x7f,0x9,0x9,0xff,0x9,0x9,0x7f,0x1,0x1,0x3f,0x0,0x10,0x78,0x80,0x0,0x8,0xfc,0x20,0x24,0xfe,0x20,0x28,0xfc,0x0,0x10,0xf8,0x0,
++0x1,0x7f,0x1,0x3f,0x2,0xff,0x4,0x8,0x1f,0x28,0xc8,0xf,0x8,0x8,0xf,0x8,0x0,0xfc,0x0,0xf8,0x0,0xfe,0x40,0x20,0xf0,0x2e,0x24,0xe0,0x20,0x20,0xe0,0x20,
++0x10,0x17,0x10,0x13,0xfc,0x17,0x39,0x32,0x57,0x5a,0x92,0x13,0x12,0x12,0x13,0x12,0x40,0xfc,0x40,0xf8,0x80,0xfe,0x10,0x8,0xfe,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x4,0xfe,0x29,0x28,0xfe,0xaa,0xaa,0xae,0xc2,0x82,0x82,0xfe,0x83,0x82,0xfe,0x82,0x20,0x10,0xfe,0x4,0xfe,0x84,0xfc,0x0,0xfc,0x8,0x30,0x24,0xfe,0x20,0xa0,0x40,
++0x0,0x3f,0x20,0x2f,0x20,0x3f,0x2a,0x29,0x28,0x2e,0x40,0x9f,0x10,0x10,0x1f,0x10,0x10,0xf8,0x0,0xf0,0x0,0xfc,0x10,0xa0,0x60,0x1e,0x4,0xf0,0x10,0x10,0xf0,0x10,
++0x0,0x40,0x37,0x10,0x83,0x62,0x23,0x8,0x13,0x20,0xe0,0x2f,0x20,0x20,0x21,0x20,0x80,0x44,0xfe,0x0,0xf8,0x8,0xf8,0x0,0xf8,0x10,0x64,0xfe,0x40,0x40,0x40,0x80,
++0x10,0x10,0x20,0x27,0x48,0xfa,0x12,0x22,0x42,0xfb,0x42,0x0,0x18,0xe0,0x40,0x0,0x40,0x40,0x44,0xfe,0x40,0x48,0x48,0x48,0x48,0xf8,0x48,0x40,0x42,0x42,0x3e,0x0,
++0x1,0x7f,0x1,0x3f,0x2,0x7f,0x8,0x1f,0xe8,0xf,0x10,0x7c,0x54,0x7c,0x12,0xfe,0x8,0xfc,0x0,0xf8,0x0,0xfc,0x20,0xf0,0x2e,0xe4,0x20,0xf8,0xa8,0xf8,0x24,0xfc,
++0x0,0xf7,0x52,0x31,0x52,0x94,0x10,0x14,0x3f,0x64,0xbf,0x24,0x3f,0x24,0x3f,0x20,0x20,0xa0,0xa8,0xa4,0xa0,0xae,0xf0,0x20,0xa4,0x24,0x18,0x10,0x30,0x4a,0x8a,0x4,
++0x10,0x10,0x20,0x20,0x4b,0xfa,0x13,0x22,0x43,0xf8,0x40,0x7,0x18,0xe0,0x40,0x0,0x48,0x7c,0x40,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x1,0x0,0x1f,0x11,0x91,0x51,0x55,0x15,0x35,0x55,0xd5,0x15,0x25,0x25,0x4e,0x4,0x0,0x84,0xfe,0x20,0x20,0x20,0x24,0x2c,0xf0,0x20,0x20,0x20,0x22,0xe2,0x1e,0x0,
++0x8,0x8,0xff,0x8,0x1,0x41,0x33,0x12,0x4,0x10,0xe0,0x20,0x21,0x21,0x22,0xc,0x20,0x24,0xfe,0x20,0x0,0x8,0xfc,0x8,0x90,0x80,0x80,0x80,0x40,0x30,0xe,0x4,
++0x2,0x11,0xf8,0x27,0x21,0x41,0x42,0x77,0xd0,0x51,0x51,0x52,0x54,0x77,0x50,0x0,0x8,0x98,0xa0,0xfe,0x8,0x8,0x52,0xbc,0x84,0x8,0x8,0x10,0xa4,0xfe,0x42,0x0,
++0x14,0x14,0x14,0x54,0x55,0x5e,0x54,0x54,0x54,0x54,0x54,0x54,0x5d,0xe6,0x44,0x0,0x50,0x50,0x84,0xfe,0x90,0x90,0xfc,0x90,0x90,0xfc,0x90,0x90,0x94,0xfe,0x80,0x80,
++0x8,0x1c,0xf0,0x11,0x10,0x14,0xfe,0x10,0x15,0x7e,0x44,0x45,0x44,0x44,0x7c,0x44,0x40,0x20,0x28,0xfc,0x0,0x88,0x50,0x4,0xfe,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,
++0x8,0x4,0xff,0x8,0x8,0x12,0x7c,0x8,0x12,0x7e,0x0,0xa,0x29,0x28,0x48,0x7,0x20,0x44,0xfe,0x20,0x20,0x44,0xf8,0x10,0x24,0xfc,0x0,0x0,0x88,0xa4,0x24,0xe0,
++0x21,0x11,0x1,0xa,0x70,0x20,0x27,0x0,0xff,0x10,0x1f,0x10,0x13,0x10,0x16,0x38,0x0,0x8,0xfc,0x48,0x40,0xa0,0x1c,0x4,0xfe,0x0,0xe0,0x20,0x20,0xa4,0x24,0x1c,
++0x20,0x13,0x10,0x0,0x7,0xf0,0x10,0x13,0x12,0x12,0x12,0x13,0x16,0x18,0x10,0x0,0x4,0xfe,0x4,0x24,0xf4,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x24,0x4,0x14,0x8,
++0x4,0x4,0x4,0x24,0x24,0x24,0x27,0x24,0x24,0x24,0x24,0x24,0x27,0xf8,0x40,0x0,0x40,0x40,0x40,0x44,0x4c,0x50,0x60,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x8,0x8,0x9,0xff,0x8,0x7f,0x49,0x49,0x4b,0x18,0x1c,0x2b,0x49,0x88,0x8,0x8,0x4,0x4,0x4,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x0,0x7d,0x45,0x55,0x55,0x55,0x55,0x54,0x55,0x56,0x54,0x11,0x2a,0x44,0x81,0x0,0x8,0xfc,0x8,0xf8,0x8,0x8,0xf8,0x84,0xfe,0x54,0x94,0x24,0x44,0x84,0x28,0x10,
++0x0,0x40,0x30,0x11,0x1,0x2,0x8,0x10,0x20,0xe0,0x20,0x20,0x21,0x22,0x24,0x28,0x80,0x80,0x80,0x8,0xfc,0x8,0x50,0x40,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x5,0xfe,0x24,0x24,0x3d,0x25,0x25,0x25,0x3d,0x25,0x24,0x24,0xfd,0x6,0x4,0x4,0x4,0xcc,0x50,0x4,0xfe,0x4,0x4,0x4,0xfc,0x44,0x20,0xa4,0x8a,0x8a,0x78,0x0,
++0x4,0x4,0xff,0x14,0x1f,0x12,0x2e,0x25,0x48,0x11,0x2,0x4,0x52,0x51,0x90,0xf,0x40,0x44,0xfe,0x40,0xf8,0x48,0x48,0x88,0xc8,0x28,0x10,0x0,0x4,0x92,0x92,0xf0,
++0x4,0x8,0x7f,0x44,0x44,0x47,0x44,0x48,0x54,0x42,0x41,0x42,0x44,0x48,0x7f,0x40,0x0,0x4,0xfe,0x4,0x4,0xe4,0x24,0x44,0x44,0x84,0x4,0x84,0x4,0x4,0xfc,0x4,
++0x8,0x8,0x8,0x1f,0x12,0x22,0x4a,0x86,0x5,0x4,0x8,0x11,0x22,0x44,0x8,0x0,0x0,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x44,0x84,0xc4,0x34,0x14,0x4,0x28,0x10,
++0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x14,0x12,0x21,0x21,0x42,0x84,0x0,0x20,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x50,0x50,0x88,0x88,0xc,0x6,0x4,
++0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x14,0x12,0x21,0x41,0x82,0x0,0xff,0x0,0x0,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x50,0x90,0x88,0xe,0x4,0x0,0xfe,0x0,
++0x0,0x40,0x2f,0x20,0x7,0x1,0xf,0x12,0x24,0xeb,0x30,0x27,0x20,0x21,0x22,0x24,0x80,0x88,0xfc,0x80,0xf8,0x0,0xfc,0x20,0x10,0xee,0x84,0xf0,0x80,0x40,0x30,0x10,
++0x8,0x8,0x4a,0x2a,0x1c,0x8,0xfe,0x8,0x1c,0x1a,0x28,0x48,0x88,0x8,0xb,0x8,0x0,0x8,0xfc,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0xfe,0x0,
++0x2,0x7f,0x14,0x15,0x7f,0x55,0x55,0x55,0x55,0x63,0x41,0x7f,0x41,0x41,0x7f,0x41,0x28,0x28,0xfe,0x28,0xa8,0x28,0xfe,0x4,0x7e,0x44,0x44,0x7c,0x44,0x44,0x7c,0x44,
++0x10,0x12,0x1f,0x24,0x42,0x10,0x8,0xff,0x10,0x1c,0x14,0x27,0x24,0x44,0x94,0xb,0x20,0x24,0x3e,0x48,0x84,0x80,0xfe,0x40,0x7c,0xa0,0x24,0xfe,0x20,0x50,0x8e,0x4,
++0x8,0xb,0xa,0x12,0x12,0x33,0x50,0x90,0x12,0x12,0x12,0x12,0x15,0x18,0x10,0x10,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0xc6,0x7c,0x0,
++0x0,0x78,0x4b,0x4a,0x4d,0x78,0x11,0x11,0x5d,0x50,0x53,0x52,0x5f,0xe2,0x40,0x0,0x40,0x20,0xfe,0x8a,0x24,0x20,0xfc,0x24,0xfc,0x20,0xfe,0x22,0xfe,0x22,0x20,0x20,
++0x10,0x1f,0x28,0x5f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x4,0xff,0xa,0x32,0xc4,0xf,0x40,0x7c,0xa0,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x20,0x9e,0x44,0xe0,
++0x2,0x1,0x7f,0x44,0x99,0x1,0x3f,0x21,0x3f,0x1,0x7f,0x41,0x7f,0x41,0x1,0x1,0x0,0x0,0xfe,0x42,0x34,0x0,0xf8,0x8,0xf8,0x0,0xfc,0x4,0xfc,0x4,0x0,0x0,
++0x10,0x11,0x11,0x11,0xfd,0x10,0x15,0x19,0x33,0xd5,0x11,0x11,0x11,0x11,0x51,0x21,0x20,0x24,0x24,0x24,0xfc,0xa0,0x14,0xfe,0x10,0xfc,0x10,0xfc,0x10,0x14,0xfe,0x0,
++0x1,0x21,0x21,0x3f,0x28,0x11,0x10,0x3f,0x50,0x9f,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0x8,0x8,0xf8,0x8,0x0,0x88,0xfc,0x80,0xf8,0x80,0xf8,0x80,0x84,0xfe,0x0,
++0x8,0x9,0x9,0x11,0x11,0x30,0x51,0x93,0x15,0x19,0x11,0x11,0x11,0x11,0x11,0x11,0x20,0x24,0x24,0x24,0xfc,0xa0,0x14,0xfe,0x20,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x8,0x7c,0x48,0x49,0x4a,0x79,0x49,0x49,0x49,0x79,0x49,0x49,0x49,0x49,0x5a,0x84,0x80,0x80,0xf8,0x10,0x24,0xfe,0x0,0x78,0x48,0x48,0x68,0x50,0x42,0x42,0x3e,0x0,
++0x1,0x0,0x1f,0x10,0x90,0x57,0x51,0x11,0x32,0x54,0xd0,0x1f,0x20,0x20,0x40,0x0,0x0,0x84,0xfe,0x80,0x48,0xfc,0x10,0x10,0xac,0x44,0x40,0xfe,0x40,0x40,0x40,0x40,
++0x10,0x10,0x10,0x55,0x38,0x10,0xfe,0x11,0x38,0x34,0x53,0x90,0x10,0x10,0x10,0x10,0x40,0x20,0x28,0xfc,0x88,0x88,0x88,0x54,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x40,0x30,0x17,0x1,0x81,0x61,0x22,0x4,0x10,0x2f,0xe0,0x20,0x20,0x20,0x20,0x20,0x80,0x48,0xfc,0x10,0x10,0x10,0xac,0x44,0x40,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x3e,0x2,0x12,0xa,0x12,0x1,0x7f,0x8,0x14,0x22,0x1,0xff,0x1,0x1,0x1,0x1,0xf8,0x8,0x48,0x28,0x48,0x0,0xfc,0x20,0x50,0x88,0x0,0xfe,0x0,0x0,0x0,0x0,
++0x10,0x10,0x10,0x14,0xff,0x10,0x30,0x38,0x54,0x54,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x90,0x50,0x50,0x10,0x10,0x10,0x10,0x50,0x20,
++0x2,0x2,0xff,0x4,0x8,0xb,0x10,0x10,0x30,0x5f,0x90,0x10,0x10,0x10,0x11,0x10,0x0,0x4,0xfe,0x0,0x0,0xf8,0x10,0x20,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x80,
++0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x8,0x4,0x4,0x0,0x0,0x0,0x0,0x1,0x0,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x0,0x4,0xfe,0x13,0x10,0x21,0x24,0x7f,0xa4,0x24,0x24,0x25,0x3d,0x22,0x4,0x0,0x88,0x4c,0x50,0xfe,0x20,0xfc,0x20,0xfe,0x40,0x88,0xfc,0x10,0x10,0x14,0xfe,0x0,
++0x20,0x23,0x22,0x23,0xfa,0x23,0x20,0x2f,0x34,0xe7,0x24,0x27,0x24,0x2f,0xa0,0x40,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x80,0xfc,0x84,0xa8,0x90,0x90,0xae,0xc4,
++0x11,0x10,0x10,0x17,0xfc,0x13,0x10,0x1f,0x30,0xd1,0x11,0x12,0x14,0x18,0x53,0x20,0x8,0x98,0xa0,0xfc,0x40,0xf8,0x40,0xfe,0x80,0x8,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x11,0x11,0x11,0x17,0xfd,0x11,0x17,0x18,0x33,0xd2,0x12,0x13,0x12,0x12,0x53,0x22,0x10,0x10,0x10,0xfc,0x10,0x14,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x12,0x12,0xfa,0x12,0x15,0x18,0x30,0xd0,0x17,0x10,0x10,0x10,0x5f,0x20,0x40,0x40,0x48,0x48,0x48,0x48,0x54,0xe2,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x10,0x1f,0x20,0x20,0x7f,0x90,0x11,0x7d,0x11,0x11,0x15,0x19,0x11,0x1,0x90,0x90,0x90,0xfc,0x90,0x94,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x11,0x11,0x17,0x11,0xfc,0x10,0x11,0x1a,0x35,0xd0,0x13,0x12,0x12,0x12,0x53,0x22,0x10,0x10,0xfc,0x10,0x40,0xa0,0x10,0xe,0xf4,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x20,0x20,0x0,0xf,0xe0,0x21,0x21,0x22,0x22,0x24,0x28,0x50,0x8f,0x0,0x80,0x80,0x80,0x80,0x88,0xfc,0x80,0x0,0x40,0x20,0x10,0x18,0x8,0x6,0xfc,0x0,
++0x10,0x12,0x1f,0x28,0x45,0x2,0x4,0x8,0x1f,0x20,0xcf,0x8,0x8,0x8,0xf,0x8,0x40,0x48,0x7c,0xa0,0x10,0x80,0x40,0x20,0xf8,0xe,0xe4,0x20,0x20,0x20,0xe0,0x20,
++0x1,0x0,0x1f,0x92,0x52,0x5f,0x12,0x31,0x52,0xd7,0x18,0x17,0x24,0x24,0x47,0x4,0x0,0x84,0xfe,0x20,0x28,0xfc,0xa0,0x40,0x20,0xf0,0xe,0xf4,0x10,0x10,0xf0,0x10,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x14,0x18,0x30,0xd0,0x10,0x10,0x10,0x10,0x50,0x20,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x2,0x2,0x2,0x4,0x4,0x8,0x10,0x60,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x80,0x80,0x40,0x40,0x20,0x10,0xe,0x4,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x1f,0x11,0x1,0xff,0x1,0x3,0x5,0x9,0x11,0x61,0x1,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x4,0xfe,0x0,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x0,0xff,0x2,0x2,0x2,0x3,0x4,0xc,0xa,0x11,0x20,0x40,0x0,0x3,0xc,0x30,0x4,0xfe,0x0,0x0,0x0,0xf8,0x8,0x8,0x10,0x90,0xa0,0x40,0x80,0x0,0x0,0x0,
++0x10,0x10,0x1f,0x20,0x2f,0x61,0xbf,0x22,0x24,0x2c,0x32,0x21,0x22,0x24,0x28,0x21,0x80,0x88,0xfc,0x80,0xf8,0x0,0xfe,0x20,0x90,0x9e,0xa4,0xc0,0xa0,0x98,0x88,0x80,
++0x8,0x7f,0x8,0xff,0x0,0x7f,0x49,0x7f,0x49,0x7f,0x22,0x7f,0x22,0xff,0x22,0x41,0x50,0x48,0x44,0xfe,0x40,0x48,0x48,0x50,0x50,0x20,0x20,0x60,0x90,0x92,0xa,0x6,
++0x9,0x9,0x7f,0x9,0x9,0x7f,0x41,0x81,0x1f,0x11,0x11,0x11,0x11,0x11,0x11,0x1,0x20,0x28,0xfc,0x20,0x20,0xfe,0x2,0x4,0xf0,0x10,0x10,0x10,0x10,0x50,0x20,0x0,
++0x4,0xfe,0x20,0x20,0x3c,0x25,0x27,0x44,0xa5,0x15,0x9,0x9,0x11,0x21,0x41,0x0,0x20,0x20,0x40,0x40,0x88,0x4,0xfe,0x2,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x8,0x8,0x8,0x10,0x10,0x30,0x5f,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x80,0xa0,0x90,0x90,0x84,0xfe,0x80,0x40,0x40,0x40,0x20,0x20,0x12,0x12,0xa,0x6,
++0x8,0x8,0x10,0x37,0x50,0x90,0x10,0x1f,0x10,0x11,0x11,0x11,0x11,0x2,0xc,0x30,0xa0,0x90,0xbc,0xc0,0x42,0x32,0xe,0xf0,0x10,0x10,0x10,0x10,0x10,0xc0,0x30,0x10,
++0x8,0x8,0x10,0x37,0xd0,0x10,0x12,0x11,0xff,0xa,0x9,0x18,0x28,0xc9,0xa,0xc,0xa0,0x90,0xfc,0x80,0x40,0x24,0x1c,0x0,0xfe,0x8,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x8,0x8,0x13,0x20,0x48,0x8,0x17,0x30,0x50,0x97,0x10,0x12,0x11,0x11,0x10,0x10,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x50,0x20,
++0x0,0x40,0x27,0x20,0xf,0x0,0xe7,0x20,0x24,0x22,0x24,0x28,0x22,0x51,0x8f,0x0,0x80,0x90,0xf8,0x90,0xfc,0x90,0xf0,0x80,0x90,0xa0,0x98,0x88,0x80,0x6,0xfc,0x0,
++0x4,0x4,0x8,0x10,0x7f,0x0,0x3f,0x20,0x20,0x3f,0x2,0x11,0x50,0x50,0x8f,0x0,0x0,0x40,0x20,0x10,0xfc,0x0,0xf8,0x8,0x8,0xf8,0x0,0x80,0x94,0x12,0xf2,0x0,
++0x4,0xfe,0x48,0x4b,0x7a,0x4c,0x48,0x48,0x78,0x48,0x48,0x4d,0xf9,0xa,0xc,0x8,0x40,0x40,0x44,0xfe,0x44,0x48,0x60,0x60,0xa0,0xa0,0xa0,0x20,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x13,0x1e,0x32,0xd2,0x13,0x10,0x10,0x1f,0x50,0x20,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x0,0x0,
++0x0,0x1f,0x10,0x12,0x11,0x11,0x10,0xff,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x10,0xf8,0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
++0x10,0x8,0x4,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x21,0x1,0xff,0x1,0x1,0x1,0x10,0x20,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x0,0x0,0x0,
++0x41,0x22,0x14,0x7f,0x49,0x49,0x7f,0x49,0x49,0x7f,0x8,0x8,0xff,0x8,0x8,0x8,0x0,0x7c,0x44,0x48,0x48,0x50,0x50,0x48,0x44,0x44,0x44,0x64,0xd4,0x48,0x40,0x40,
++0x11,0x10,0x10,0x11,0xfd,0x11,0x15,0x19,0x31,0xd1,0x10,0x17,0x10,0x10,0x50,0x20,0x4,0x88,0x50,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x20,0x20,0x20,0x20,
++0x4,0x3e,0x24,0x24,0x24,0x3c,0x24,0x24,0x24,0x3c,0x24,0x24,0x24,0x25,0x54,0x88,0x0,0x4,0xfe,0x84,0x84,0x84,0xfc,0x84,0x84,0x84,0xfc,0x0,0x4,0xfe,0x0,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0xff,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0xf0,0x10,0x4,0xfe,0x0,
++0x10,0x1f,0x10,0x3f,0x40,0xbf,0x12,0xa,0x5,0x38,0x2,0x12,0xa,0x5,0x8,0x70,0x8,0xfc,0x0,0xf8,0x0,0xf0,0x50,0x90,0x10,0xf0,0x10,0x50,0x90,0x12,0xca,0x24,
++0x10,0x10,0x17,0x24,0x24,0x64,0xa7,0x24,0x24,0x24,0x27,0x20,0x20,0x3f,0x20,0x20,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x0,0x0,
++0x12,0x11,0x10,0x13,0x5a,0x56,0x53,0x92,0x12,0x13,0x10,0x1f,0x10,0x10,0x10,0x10,0x8,0x10,0xa0,0xf8,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0xfe,0x40,0x40,0x40,0x40,
++0x0,0x44,0x33,0x11,0x80,0x40,0x41,0xa,0x10,0x22,0xe1,0x20,0x20,0x21,0x22,0x2c,0x40,0x44,0x4c,0x50,0x40,0xa0,0x1c,0x48,0x40,0x48,0x58,0xa0,0x90,0x10,0xe,0x4,
++0x0,0x40,0x2f,0x21,0x2,0x4,0xef,0x21,0x29,0x25,0x22,0x2a,0x33,0x24,0x8,0x10,0x8,0x1c,0x70,0x10,0x10,0x10,0x5c,0x50,0x50,0x50,0x50,0x7c,0x0,0x80,0x46,0x3c,
++0xa,0x7d,0x8,0xb,0xa,0x7a,0x4b,0x42,0x42,0x7b,0x8,0xf,0x8,0x8,0x50,0x20,0x8,0x10,0xa0,0xf8,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0xfe,0x40,0x40,0x40,0x40,
++0x7f,0x1,0x9,0x9,0x9,0x15,0x23,0x41,0x1f,0x11,0x11,0x1f,0x11,0x1,0x7f,0x0,0xfc,0x8,0x20,0xf0,0x0,0x6,0xfc,0x10,0xf8,0x10,0x10,0xf0,0x0,0x10,0xf8,0x4,
++0x1,0x21,0x19,0x9,0x1,0x1,0x7f,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x7f,0x0,0x0,0x8,0x18,0x20,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x12,0x11,0xfd,0x10,0x17,0x18,0x30,0xd0,0x13,0x10,0x10,0x10,0x57,0x20,0x40,0x40,0x44,0x4c,0x50,0x44,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x11,0xd,0x5,0x7f,0x40,0x8f,0x8,0x8,0x8,0xf,0x4,0x4,0x4,0x8,0x30,0x0,0x10,0x30,0x40,0xfe,0x22,0xf4,0x20,0x20,0x20,0xe0,0x80,0x80,0x84,0x84,0x7c,
++0x8,0x8,0xff,0x8,0x47,0x30,0x10,0x81,0x47,0x11,0x21,0xe2,0x22,0x24,0x29,0x20,0x20,0x24,0xfe,0x20,0xf0,0x40,0x80,0x4,0xfe,0x24,0x24,0x44,0x44,0x84,0x28,0x10,
++0x10,0x10,0x12,0x11,0xfd,0x10,0x37,0x38,0x54,0x50,0x93,0x10,0x10,0x10,0x17,0x10,0x40,0x40,0x44,0x4c,0x50,0x44,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x0,0x7f,0x2,0x2,0x2,0x2,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x50,0x20,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x15,0x19,0x31,0xd1,0x10,0x14,0x14,0x17,0x50,0x20,0x40,0x88,0xfc,0x8,0x48,0x8,0x28,0x10,0x0,0xfe,0x82,0x92,0x92,0xf2,0xa,0x4,
++0x4,0x7f,0x44,0x46,0x45,0x45,0x7c,0x13,0x12,0x5e,0x53,0x52,0x5e,0xf2,0x43,0x2,0x1c,0xe0,0x48,0x2c,0x28,0x10,0x44,0x9e,0x4,0x4,0x9c,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x1f,0x22,0x22,0x64,0xaf,0x21,0x21,0x2f,0x21,0x21,0x21,0x2f,0x24,0x20,0x4,0x44,0xe4,0x4,0x94,0x54,0xd4,0x14,0x14,0xd4,0x14,0x14,0xc4,0x4,0x14,0x8,
++0x1,0x2,0xf,0x8,0xa,0x9,0x8,0x8,0xf,0x8,0x2,0x22,0x22,0x3f,0x20,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x60,0x4,0xfe,0x4,0x4,0x24,0x24,0xe4,0x34,0x8,
++0x20,0x10,0x13,0x0,0xfd,0x8,0x13,0x38,0x54,0x93,0x11,0x11,0x12,0x14,0x18,0x10,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x80,0x88,0xfe,0x8,0x48,0x28,0x8,0x28,0x10,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x1f,0x0,0x0,0xff,0x0,0x8,0x4,0x0,0x0,0x10,0xf8,0x10,0x10,0xf0,0x14,0x4,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0xa0,0x40,
++0x1,0x7f,0x8,0x10,0x22,0x41,0x7f,0x8,0xa,0x7f,0x8,0x8,0x8,0xf,0xf8,0x0,0x4,0x84,0x4,0x24,0x24,0x24,0xa4,0xa4,0x24,0x24,0x24,0x24,0x4,0x84,0x14,0x8,
++0x8,0x1f,0xf0,0x12,0x11,0xfd,0x10,0x3b,0x36,0x52,0x53,0x92,0x12,0x12,0x13,0x12,0x1c,0xe0,0x48,0x4c,0x48,0x10,0x44,0x9e,0x4,0x4,0x9c,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x10,0x5b,0x56,0x53,0x92,0x13,0x12,0x10,0x1f,0x10,0x10,0x10,0x10,0x48,0x7c,0x40,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x2,0x41,0x37,0x10,0x1,0x3,0xf2,0x13,0x12,0x12,0x13,0x12,0x12,0x2b,0x44,0x3,0x8,0x10,0xfc,0x80,0x8,0xfc,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x6,0xfc,
++0x1,0x41,0x33,0x12,0x4,0x10,0x21,0xc6,0x40,0x1f,0x12,0x12,0x12,0x12,0xff,0x0,0x0,0x8,0xfc,0x48,0x40,0xa0,0x10,0xe,0x4,0xf0,0x90,0x90,0x90,0x94,0xfe,0x0,
++0x10,0x10,0x2f,0x20,0x47,0x94,0x14,0x27,0x60,0xaf,0x20,0x21,0x25,0x25,0x28,0x20,0x40,0x44,0xfe,0x40,0xfc,0xa4,0xa4,0xfc,0x0,0xfe,0x40,0x20,0x24,0xa,0xfa,0x0,
++0x8,0xb,0x12,0x13,0x22,0x4b,0x88,0x17,0x30,0x50,0x9f,0x12,0x11,0x11,0x10,0x10,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x10,0x14,0xfe,0x10,0x10,0x10,0x50,0x20,
++0x10,0x10,0x22,0x7f,0x42,0x43,0x42,0x42,0x7e,0x42,0x42,0x42,0x42,0x7e,0x42,0x0,0x40,0x40,0x44,0x7e,0x84,0x4,0x4,0x84,0x64,0x24,0x4,0x4,0x4,0x4,0x28,0x10,
++0x8,0x7f,0x48,0x4a,0x49,0x49,0x7b,0x14,0x13,0x5a,0x52,0x53,0x5d,0xe0,0x4f,0x0,0x20,0xa8,0xb0,0xa4,0x18,0x10,0xf8,0x6,0xf8,0x8,0x8,0xf8,0x10,0xa4,0xfe,0x0,
++0x10,0x10,0x17,0x10,0x54,0x58,0x50,0x90,0x10,0x10,0x10,0x28,0x24,0x44,0x80,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x3e,0x2,0x12,0xc,0x8,0x1f,0x20,0xcf,0x8,0x8,0xf,0x4,0x2,0x7f,0x0,0x80,0x90,0xa0,0x48,0x50,0x20,0xf0,0x2e,0xf4,0x20,0x20,0xe0,0x40,0x88,0xfc,0x0,
++0x10,0x14,0x3e,0x49,0x5,0x1,0x3f,0x1,0xff,0x0,0x0,0x3f,0x8,0x4,0x1,0x0,0x40,0x48,0xfc,0x20,0x10,0x0,0xf8,0x0,0xfe,0x40,0x50,0xf8,0x40,0x40,0x40,0x80,
++0x8,0x7f,0x48,0x4a,0x49,0x79,0x4b,0x4c,0x4b,0x7a,0x4a,0x4b,0x49,0x78,0x4f,0x0,0x20,0xa8,0xb0,0xa4,0x18,0x8,0xfe,0x4,0xf8,0x8,0x8,0xf8,0x10,0xa4,0xfe,0x0,
++0x3e,0x12,0xc,0xf,0x10,0x2f,0xc8,0xf,0x4,0x7f,0x0,0x7,0x4,0x4,0x8,0x30,0x90,0xa0,0x48,0xf0,0x10,0xee,0x24,0xe0,0x48,0xfc,0x40,0xe0,0x40,0x44,0x44,0x3c,
++0x0,0xfe,0x2,0x42,0x24,0x24,0x18,0x8,0x18,0x14,0x24,0x22,0x42,0x80,0x0,0x0,0x0,0xfc,0x84,0x88,0x88,0x90,0xa0,0x98,0x84,0x84,0x84,0xc4,0xa8,0x90,0x80,0x80,
++0x23,0x22,0x22,0x23,0xfa,0x22,0x23,0x20,0x2f,0x20,0x3a,0xe2,0x42,0x5,0x8,0x10,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x40,0x50,0x78,0x40,0x40,0xc6,0x7c,
++0x10,0x10,0x17,0x24,0x24,0x64,0xa4,0x27,0x24,0x24,0x24,0x24,0x25,0x26,0x24,0x20,0x8,0x3c,0xc0,0x40,0x40,0x40,0x44,0xfe,0x20,0x20,0x20,0x90,0x12,0x4a,0x2a,0x4,
++0x0,0x40,0x2f,0x22,0x1,0x87,0x44,0x4d,0x14,0x25,0xe5,0x25,0x25,0x25,0x24,0x24,0x80,0x44,0xfe,0x8,0x14,0xfe,0x44,0xf4,0x44,0xf4,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x0,0x40,0x20,0x2f,0x8,0x8,0xe8,0x2f,0x28,0x28,0x28,0x2f,0x28,0x50,0x8f,0x0,0x80,0x80,0x88,0xfc,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0xf8,0x8,0x6,0xfc,0x0,
++0x2,0x7,0x78,0x8,0x8,0xa,0xff,0x8,0xa,0x3f,0x22,0x22,0x22,0x3e,0x22,0x1,0x20,0x20,0x20,0x44,0x7e,0x88,0x48,0x48,0x48,0x48,0x50,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x12,0x1f,0x28,0x45,0x81,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x20,0x40,0x44,0x7e,0xa0,0x10,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x44,0x28,0x10,0x29,0x49,0x89,0xa,0x18,0x28,0x48,0x88,0x9,0x9,0x52,0x24,0x40,0x40,0x40,0x44,0x4c,0x50,0x60,0x40,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x1,0x41,0x31,0x13,0x84,0x60,0x20,0x9,0x12,0x24,0xeb,0x21,0x22,0x24,0x21,0x20,0x0,0x0,0xf8,0x10,0xa0,0x40,0xa0,0x10,0x4e,0x40,0xfc,0x50,0x4c,0x44,0x40,0x80,
++0x0,0x7e,0x2,0x22,0x1a,0x12,0x23,0x8,0x1f,0x30,0x5f,0x90,0x1f,0x10,0x1f,0x10,0x8,0xfc,0x8,0x48,0x38,0x28,0x48,0x80,0xfc,0x80,0xf8,0x80,0xf8,0x80,0xfe,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x0,0x40,0x24,0xfe,0x88,0x54,0xfe,0x24,0xfc,0x24,0x74,0x54,0x54,0x74,0x4,0x14,0x8,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x16,0x1b,0x32,0xd2,0x12,0x12,0x12,0x13,0x52,0x20,0x8,0x3c,0xe0,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x50,0xd0,0x2a,0xa,0x4,
++0x2,0x1,0x3f,0x20,0x20,0x2f,0x28,0x28,0x2f,0x28,0x28,0x28,0x4a,0x4d,0x88,0x0,0x0,0x4,0xfe,0x0,0x70,0x80,0x80,0x88,0xfc,0x80,0x80,0x40,0x40,0xa4,0x94,0xc,
++0x0,0x20,0x22,0x22,0x22,0x22,0xfb,0x26,0x22,0x22,0x22,0x22,0x3a,0xe2,0x41,0x0,0x40,0x40,0x40,0x40,0x48,0x7c,0xc8,0x48,0x48,0x48,0x68,0x50,0x42,0x2,0xfe,0x0,
++0x4,0x7f,0x4,0x1,0x3f,0x8,0x4,0x7f,0x41,0x81,0x1f,0x11,0x11,0x11,0x1,0x1,0x48,0xfc,0x40,0x10,0xf8,0x20,0x40,0xfe,0x2,0x14,0xf8,0x10,0x10,0x50,0x20,0x0,
++0x10,0x14,0x3e,0x49,0xbf,0x1,0x1,0x3f,0x21,0x21,0x3f,0x3,0x5,0x19,0x61,0x1,0x80,0x88,0xfc,0x20,0xf8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x4,0x4,0x24,0x18,0x0,
++0x2,0x1,0x3f,0x8,0x4,0x7f,0x41,0x81,0x1f,0x11,0x11,0x11,0x11,0x11,0x1,0x1,0x0,0x10,0xf8,0x20,0x40,0xfe,0x2,0x14,0xf8,0x10,0x10,0x10,0x50,0x20,0x0,0x0,
++0x8,0x6,0x2,0x7f,0x1,0x1,0x3f,0x21,0x21,0x3f,0x3,0x5,0x19,0x61,0x1,0x1,0x20,0x60,0x88,0xfc,0x8,0x8,0xf8,0x8,0x0,0xfc,0x4,0x4,0x14,0x8,0x0,0x0,
++0x4,0x42,0x2f,0x20,0x0,0xf,0xe8,0x28,0x2f,0x21,0x22,0x24,0x28,0x50,0x88,0x7,0x10,0x28,0xfc,0x88,0x88,0xf8,0x80,0x88,0xfc,0x88,0x88,0xa8,0x90,0x80,0x86,0xfc,
++0x10,0x10,0x27,0x21,0x48,0xff,0x14,0x28,0x43,0xfa,0x42,0x2,0x1a,0xe2,0x40,0x0,0x80,0x48,0xfc,0x10,0xa0,0xfe,0x42,0x44,0xf8,0x48,0x48,0x48,0x48,0x58,0x40,0x40,
++0x10,0x15,0xfe,0x10,0x7c,0x44,0x7c,0x44,0x7c,0x44,0x7c,0x44,0xfe,0x0,0x28,0x45,0x4,0xfe,0x20,0x44,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0xa4,0x40,0x48,0x86,0x2,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x16,0x1a,0x32,0xd2,0x12,0x12,0x14,0x14,0x58,0x20,0x40,0x20,0x4,0xfe,0x20,0x24,0x3e,0x20,0x24,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x0,0x40,0x37,0x10,0x83,0x62,0x23,0xa,0x13,0x22,0xe3,0x22,0x2f,0x21,0x23,0x24,0x40,0x48,0xfc,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x10,0xc,0x4,
++0x0,0x4,0xfe,0x11,0x11,0x21,0x25,0x3f,0x65,0xa5,0x25,0x27,0x24,0x3c,0x25,0x2,0x50,0x50,0x54,0xfe,0x54,0x54,0x54,0xfc,0x54,0x54,0x54,0xfe,0x0,0x88,0x86,0x2,
++0x2,0x2,0x2,0x3,0x2,0x2,0x3f,0x20,0x20,0x20,0x3f,0x0,0x29,0x24,0x44,0x80,0x0,0x0,0x8,0xfc,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x0,0x10,0xc8,0x44,0x4,
++0x4,0x4,0x4,0x3f,0x24,0x24,0x24,0x3f,0x24,0x24,0x24,0xff,0x0,0x10,0x30,0x40,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0xf8,0x48,0x48,0x48,0xfe,0x0,0x10,0xc,0x4,
++0x10,0x7c,0x11,0x7d,0x12,0xff,0x4,0x7e,0x44,0x7c,0x44,0x7c,0x44,0x45,0x56,0x48,0x40,0x20,0xfe,0x2,0x4,0xfe,0x20,0x20,0xa8,0xbc,0xa0,0xa0,0xa0,0x60,0x26,0x1c,
++0x8,0x8,0x7e,0x8,0xa,0x1c,0x68,0x8,0x2b,0x11,0x1,0x7f,0x1,0x1,0xff,0x0,0x40,0x48,0xfc,0x48,0xc8,0x68,0x58,0x8a,0x6,0x0,0x8,0xfc,0x0,0x4,0xfe,0x0,
++0x2,0x2,0x2,0x7f,0x42,0x42,0x7f,0x42,0x42,0x7f,0x42,0x2,0x2,0x2,0x1,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x0,0x4,0x4,0xfc,0x0,
++0x10,0x10,0x10,0x27,0x24,0x64,0xa4,0x24,0x27,0x24,0x24,0x24,0x24,0x27,0x24,0x20,0x0,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0x44,0xfc,0x4,0x0,
++0x8,0x8,0x1f,0x20,0x40,0x80,0x3f,0x22,0x22,0x3f,0x22,0x22,0x3f,0x20,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x24,0xf4,0x24,0x24,0xe4,0x24,0x24,0xe4,0x24,0x14,0x8,
++0x1,0x0,0x3f,0x20,0x20,0x20,0x20,0x20,0x2f,0x28,0x28,0x28,0x48,0x48,0x8f,0x8,0x0,0x84,0xfe,0x80,0x88,0xfc,0x80,0x88,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x10,0x13,0x5a,0x56,0x52,0x92,0x12,0x12,0x12,0x12,0x14,0x14,0x18,0x10,0x40,0x20,0x4,0xfe,0x20,0x24,0x3e,0x20,0x24,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x10,0x8,0x7f,0x4,0x1f,0x14,0x14,0x18,0x1f,0x10,0x1f,0x1,0xff,0x2,0x4,0x38,0x10,0x20,0xfc,0x50,0xf8,0x50,0x50,0x30,0xf0,0x10,0xf0,0x4,0xfe,0x80,0x78,0x10,
++0x0,0x40,0x30,0x17,0x84,0x68,0x27,0x0,0x12,0x22,0xe2,0x22,0x22,0x25,0x28,0x20,0x80,0x40,0x40,0xfe,0x4,0x8,0xfc,0x40,0x48,0x7c,0x40,0x40,0x40,0x40,0xc6,0x7c,
++0x0,0x7f,0x41,0x41,0x7f,0x40,0x52,0x7f,0x52,0x52,0x7f,0x40,0x52,0x51,0xa0,0x1,0x8,0x7c,0x48,0x48,0x48,0x48,0x86,0x0,0xfc,0x88,0x50,0x20,0x50,0x88,0x86,0x4,
++0x8,0xfd,0x11,0x11,0x21,0x25,0x3f,0x65,0xa5,0x25,0x25,0x25,0x25,0x3d,0x22,0x4,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,0x74,0x54,0x54,0x74,0x4,0x14,0x8,
++0x0,0x8,0x7d,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x7b,0x49,0x0,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x14,0x24,0x44,0x84,0x84,0x4,0x4,0x4,0x28,0x10,
++0x1,0x7f,0x49,0x49,0x7f,0x49,0x49,0x7f,0x41,0x5d,0x55,0x55,0x5d,0x51,0x85,0x2,0x20,0xa8,0x40,0x7e,0xc8,0x48,0x7c,0x48,0x48,0x7c,0x48,0x48,0x48,0x7e,0x40,0x40,
++0x0,0x7,0x44,0x24,0x25,0x4,0xc,0x17,0x24,0xe5,0x25,0x25,0x25,0x25,0x8,0x10,0x4,0xfe,0x44,0x44,0xf4,0x44,0x54,0xfc,0x4,0xf4,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0x1,0x2,0x4,0x8,0x10,0x30,0x0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x48,0x88,0x8,0x8,0x8,0x8,0x8,0x8,0x50,0x20,0x0,
++0x10,0x10,0x10,0x10,0xff,0x12,0x17,0x1a,0x33,0xd2,0x10,0x1f,0x10,0x10,0x50,0x20,0x48,0x7c,0x40,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x0,0x1f,0x10,0x10,0x10,0x1f,0x11,0x1,0x3f,0x21,0x21,0x21,0x21,0x21,0x1,0x1,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x8,0xfc,0x8,0x8,0x8,0x28,0x10,0x0,0x0,
++0x10,0x10,0x10,0x1c,0x20,0x21,0x7c,0x90,0x10,0xfc,0x10,0x12,0x14,0x18,0x10,0x0,0x40,0x40,0x44,0x7e,0x84,0x4,0x4,0x84,0x64,0x24,0x4,0x4,0x4,0x44,0x28,0x10,
++0x40,0x27,0x24,0x4,0x5,0xe4,0x24,0x27,0x24,0x25,0x25,0x2d,0x35,0x25,0x8,0x10,0x4,0xfe,0x44,0x44,0xf4,0x44,0x54,0xfc,0x4,0xf4,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x4,0x7e,0x45,0x45,0x45,0x7d,0x52,0x10,0x13,0x5c,0x50,0x50,0x5e,0xf0,0x41,0x2,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x50,0x50,0x88,0x8c,0x6,0x4,
++0x4,0x8,0x34,0x3,0x6,0x1a,0x67,0x8c,0x13,0x6,0x19,0x2,0xd,0x1,0x6,0x38,0x40,0x20,0x58,0x80,0xc0,0x30,0xce,0x44,0x80,0x80,0xf0,0x20,0x40,0x80,0x0,0x0,
++0x0,0x9,0xfd,0x13,0x11,0x21,0x25,0x3f,0x65,0xa4,0x27,0x24,0x24,0x3d,0x22,0x0,0x50,0x50,0x54,0xfe,0x50,0x50,0x70,0x0,0xfc,0x20,0xfe,0x70,0xa8,0x26,0x24,0x20,
++0x10,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x50,0x17,0x1c,0xf4,0x41,0x2,0x0,0x50,0x50,0x54,0xfe,0x50,0x50,0x70,0x0,0xfc,0x20,0xfe,0x70,0xa8,0x26,0x24,0x20,
++0x0,0x42,0x32,0x13,0x2,0x4,0xf0,0x17,0x10,0x10,0x10,0x11,0x12,0x28,0x44,0x3,0x40,0x40,0x50,0xf8,0x40,0x40,0x48,0xfc,0x40,0x80,0xa0,0x18,0x8,0x0,0x6,0xfc,
++0x0,0x41,0x31,0x17,0x1,0x1,0xf1,0x11,0x11,0x10,0x17,0x10,0x14,0x19,0x12,0x0,0x50,0x50,0x54,0xfe,0x50,0x50,0x70,0x0,0xfc,0x20,0xfe,0x70,0xa8,0x26,0x24,0x20,
++0x1f,0x4,0x3,0x3e,0x14,0x8,0x76,0x0,0x7f,0x40,0x9f,0x10,0x1e,0x11,0x10,0xff,0xf0,0x40,0x80,0xf8,0x50,0x20,0xdc,0x0,0xfe,0x2,0xf4,0x10,0x10,0xf0,0x14,0xfe,
++0x0,0x0,0x7f,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x78,0x4f,0x48,0x48,0x78,0x48,0x48,0x48,0x78,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x8,0x7f,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x10,0x13,0x1c,0x20,0x20,0x7c,0x90,0x10,0xfc,0x10,0x12,0x14,0x18,0x10,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0xb,0xfc,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x50,0x20,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x40,0x58,0x84,0x2,
++0xf,0x8,0xf,0x28,0x2f,0x28,0x2f,0x20,0x3e,0x2,0xfe,0x12,0x12,0x22,0xc2,0x2,0xe0,0x20,0xe0,0x28,0xe8,0x28,0xe8,0x8,0xf8,0x80,0xfc,0x84,0x84,0x84,0x84,0x80,
++0x10,0x10,0x10,0x1d,0x21,0x22,0x7d,0x90,0x10,0x7d,0x11,0x11,0x15,0x1a,0x14,0x8,0x40,0x20,0x20,0xfe,0x2,0x4,0xfc,0x20,0x28,0x3c,0x20,0x20,0x20,0xa0,0x66,0x3c,
++0x2,0x1,0x7f,0x40,0x80,0x1f,0x1,0x1,0x11,0x11,0x11,0x11,0x11,0x29,0x47,0x80,0x0,0x0,0xfe,0x2,0x24,0xf0,0x0,0x0,0x20,0xf0,0x0,0x0,0x0,0x6,0xfc,0x0,
++0x0,0x40,0x27,0x20,0x0,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x14,0x18,0x10,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x3f,0x1,0x1,0x1,0x3f,0x1,0x1,0x1,0xff,0x2,0x4,0x8,0x10,0x3f,0x0,0xf0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x20,0x10,0xf8,0x8,
++0x2,0x2,0x2,0xff,0x4,0x9,0x9,0x11,0x3f,0x1,0x9,0x9,0x11,0x21,0x45,0x2,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x10,0xf8,0x0,0x40,0x20,0x10,0x18,0x8,0x0,
++0x4,0x4,0x7,0x8,0x14,0x22,0x1,0x2,0xc,0x30,0xc6,0x1,0x0,0x6,0x1,0x0,0x0,0x0,0xf0,0x20,0x40,0x80,0x0,0xc0,0x30,0xe,0x4,0x80,0x0,0x0,0x80,0x40,
++0x4,0xff,0x4,0x3f,0x1,0xff,0x1,0x1f,0x11,0x1f,0x11,0x1f,0x1,0x3f,0x1,0x7f,0x44,0xfe,0x40,0xf8,0x0,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0xf8,0x0,0xfc,
++0x21,0x2f,0x21,0x27,0xb0,0xaf,0xa0,0x27,0x24,0x27,0x24,0x27,0x20,0x27,0x20,0x2f,0x14,0xfe,0x10,0xfc,0x40,0xfe,0x44,0xfe,0x44,0xfc,0x44,0xfc,0x40,0xfc,0x40,0xfe,
++0x0,0x8,0x7c,0x0,0x5,0xfe,0x10,0x10,0x20,0x24,0x42,0xfe,0x41,0x1,0x2,0x4,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x4,0x4,0x28,0x10,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x38,0x35,0x53,0x50,0x91,0x11,0x12,0x14,0x10,0x10,0x40,0x40,0x48,0xfc,0x80,0x80,0xa0,0x24,0xfe,0x20,0x28,0x24,0x22,0x22,0xa0,0x40,
++0x8,0xb,0xa,0x12,0x13,0x32,0x52,0x92,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x4,0xfe,0x4,0x14,0xfc,0x4,0x14,0xfc,0x94,0x94,0x94,0xf4,0x94,0x4,0x14,0x8,
++0x10,0x13,0x12,0x12,0x5b,0x56,0x52,0x92,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x4,0xfe,0x4,0x14,0xfc,0x4,0x14,0xfc,0x94,0x94,0x94,0xf4,0x94,0x4,0x14,0x8,
++0x0,0x40,0x23,0x10,0x10,0x1,0x1,0xb,0x10,0x60,0x20,0x21,0x22,0x24,0x20,0x0,0x40,0x48,0xfc,0x80,0x80,0x20,0x24,0xfe,0x20,0xa0,0xa8,0x24,0x22,0x22,0xa0,0x40,
++0x0,0x43,0x32,0x12,0x83,0x42,0x4a,0x12,0x12,0x22,0xe2,0x22,0x22,0x22,0x22,0x22,0x4,0xfe,0x4,0x14,0xfc,0x4,0x14,0xfc,0x94,0x94,0x94,0xf4,0x94,0x4,0x14,0x8,
++0x1,0xa,0x37,0x24,0x24,0x27,0x24,0x2c,0x37,0x20,0x4,0x4,0x4,0x8,0x10,0x60,0x0,0x8,0xdc,0x48,0x48,0xc8,0x48,0x48,0xd8,0x8,0x40,0x42,0x42,0x42,0x3e,0x0,
++0x10,0x11,0x10,0x10,0xfc,0x11,0x14,0x18,0x30,0xd0,0x17,0x10,0x10,0x10,0x50,0x20,0x10,0x10,0xd0,0x50,0x10,0x10,0xd0,0x50,0x14,0x1e,0xf0,0x10,0x10,0x10,0x10,0x10,
++0x0,0x8,0x6,0x2,0x10,0xc,0x4,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0x7e,0xc0,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x78,0x48,0x53,0x50,0x60,0x57,0x48,0x4a,0x4a,0x6a,0x52,0x45,0x44,0x48,0x40,0x40,0x40,0x50,0xf8,0x40,0x48,0xfc,0x40,0x50,0x78,0x40,0x40,0x40,0xc6,0x3c,0x0,
++0x0,0x7f,0x0,0x0,0x1f,0x10,0x10,0x10,0x10,0x1f,0x0,0x8,0x4,0x2,0xff,0x0,0x8,0xfc,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x0,0x20,0x40,0x84,0xfe,0x0,
++0x0,0x47,0x20,0x20,0x3,0x2,0xf2,0x13,0x10,0x11,0x10,0x17,0x10,0x28,0x47,0x0,0x8,0xfc,0x0,0x8,0xfc,0x8,0x8,0xf8,0x0,0x10,0xa0,0xfc,0x0,0x6,0xfc,0x0,
++0x1,0x0,0x1f,0x10,0x97,0x50,0x53,0x12,0x32,0x52,0xd3,0x10,0x21,0x20,0x4f,0x0,0x0,0x84,0xfe,0x0,0xfc,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x10,0xa4,0xfe,0x0,
++0x10,0x12,0x7f,0x12,0x14,0xff,0x8,0x12,0x3f,0x62,0xa2,0x3e,0x22,0x22,0x3e,0x22,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0xe,0x8,0xff,0x28,0x2a,0x49,0x58,0x9f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x0,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0xf4,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x1,0x3f,0x1,0x1f,0x1,0x7f,0x0,0x1f,0x12,0x11,0xff,0x22,0x21,0x3f,0x0,0x0,0x10,0xf8,0x0,0xf0,0x0,0xfc,0x0,0xf0,0x10,0x14,0xfe,0x10,0x10,0xf8,0x10,0x60,
++0x10,0x10,0x51,0x50,0x7c,0x53,0x90,0x14,0x19,0x30,0xd7,0x10,0x10,0x10,0x10,0x13,0x20,0x28,0xfc,0x20,0x20,0xfe,0x92,0x54,0x10,0x94,0xfe,0x20,0x20,0x50,0x8c,0x4,
++0x0,0x44,0x28,0x10,0x2b,0x4a,0x8a,0x1a,0x2a,0x4b,0xa,0x8,0x8,0x8,0x57,0x20,0x40,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0x48,0xf8,0x48,0x40,0x48,0x78,0x84,0x4,
++0x0,0x20,0x13,0x10,0x0,0x7,0xf0,0x10,0x11,0x10,0x17,0x10,0x14,0x18,0x10,0x3,0x20,0x28,0xfc,0x20,0x20,0xfe,0x92,0x54,0x10,0x94,0xfe,0x20,0x20,0x50,0x8c,0x4,
++0x10,0x10,0x10,0x11,0xfc,0x10,0x17,0x10,0x10,0x11,0x1e,0xe4,0x48,0x10,0x0,0x0,0x40,0x40,0x44,0xf8,0x48,0x50,0xfe,0x48,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,
++0x8,0x7c,0x48,0x49,0x48,0x78,0x4f,0x48,0x48,0x79,0x4a,0x4c,0x48,0x78,0x48,0x0,0x40,0x40,0x44,0xf8,0x48,0x50,0xfe,0x48,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,
++0x4,0x7e,0x44,0x55,0x54,0x54,0x57,0x54,0x54,0x55,0x56,0x54,0x10,0x28,0x44,0x84,0x40,0x40,0x44,0xf8,0x48,0x50,0xfe,0x48,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,
++0x10,0x10,0x10,0x14,0xfe,0x10,0x31,0x38,0x54,0x54,0x90,0x10,0x10,0x10,0x13,0x10,0x20,0x20,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x20,0x20,0x3b,0x42,0x82,0x7b,0x22,0x22,0xfa,0x23,0x22,0x2a,0x34,0x24,0x8,0x3,0x40,0x24,0xfe,0x50,0x50,0xfc,0x50,0x70,0x0,0xf8,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x4,0x3e,0x24,0x24,0x24,0x3c,0x25,0x24,0x24,0x3c,0x24,0x24,0x24,0x27,0x54,0x88,0x20,0x20,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x1,0x0,0x3f,0x22,0x22,0x3f,0x22,0x23,0x20,0x2f,0x22,0x21,0x20,0x43,0x8c,0x30,0x0,0x84,0xfe,0x20,0x28,0xfc,0x20,0xe0,0x0,0xf0,0x20,0x40,0x80,0x60,0x1e,0x4,
++0x0,0x40,0x37,0x14,0x84,0x67,0x24,0x4,0x14,0x25,0xe4,0x24,0x28,0x28,0x31,0x26,0x80,0x44,0xfe,0x90,0x94,0xfe,0x90,0xf0,0x0,0xf8,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x10,0x10,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x2a,0x46,0x84,0x8,0x40,0x20,0x20,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x20,0x11,0x11,0xfd,0x1,0x48,0x4b,0x48,0x49,0x49,0x11,0x1d,0xe1,0x41,0x1,0x20,0x20,0x24,0x24,0x24,0xfc,0x0,0xfe,0x44,0xfe,0x54,0x54,0x54,0x54,0x4,0xc,
++0x20,0x20,0x2b,0x3c,0x50,0x91,0x11,0x15,0xff,0x11,0x10,0x11,0x28,0x24,0x47,0x80,0x0,0x8,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x8,0x90,0x94,0xfe,0x0,
++0x21,0x26,0x3c,0x44,0x87,0x7c,0x24,0x27,0xfd,0x24,0x24,0x27,0x2c,0x34,0x25,0x6,0x88,0x7c,0x48,0x48,0x48,0x48,0x86,0x0,0xfc,0x88,0x50,0x20,0x50,0x88,0xe,0x4,
++0x0,0x6,0x38,0x20,0x24,0x3e,0x21,0x24,0x3e,0x20,0x20,0x3e,0xe0,0x20,0x20,0x23,0x8,0xfc,0x88,0x88,0x88,0x88,0x6,0x0,0xf8,0x88,0x90,0x50,0x20,0x50,0x8e,0x4,
++0x4,0x44,0x64,0x55,0x4e,0x44,0x7f,0x44,0x4e,0x55,0x64,0x44,0x44,0x7f,0x40,0x1,0x0,0xc,0xf0,0x40,0x40,0x44,0x7e,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x88,0x8,
++0x21,0x26,0x24,0x44,0x4f,0xf4,0x24,0x47,0x45,0xfc,0x4,0xf,0x34,0xc4,0x5,0x6,0x88,0x7c,0x48,0x48,0x48,0x48,0x86,0x0,0xfc,0x88,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x10,0x10,0x10,0x11,0xfd,0x13,0x15,0x11,0x11,0x1d,0xe1,0x41,0x1,0x1,0x1,0x80,0xa0,0x90,0x84,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x10,0x14,0xfe,0x0,
++0x10,0x8,0x4,0x1f,0x10,0x10,0x10,0x10,0x1f,0x14,0x4,0x4,0x8,0x8,0x10,0x60,0x10,0x20,0x50,0xf8,0x10,0x10,0x10,0x10,0xf0,0x50,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x7c,0x44,0x48,0x48,0x50,0x48,0x48,0x44,0x44,0x44,0x69,0x51,0x42,0x44,0x48,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xa0,0xa0,0xa0,0x10,0x10,0x8,0x6,0x4,
++0x0,0x0,0x0,0xfc,0x7,0x4,0x48,0x29,0x10,0x10,0x28,0x24,0x44,0x80,0x0,0x0,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x90,0x90,0x10,0x10,0x10,0x10,0x50,0x20,
++0x24,0x22,0x3f,0x20,0x2f,0xf8,0x2f,0x20,0x2f,0x21,0x22,0x3f,0xe2,0x42,0xa,0x4,0x20,0xa0,0xe0,0x24,0xbe,0xc4,0xa4,0x24,0xa4,0x28,0x28,0x90,0x10,0x28,0x46,0x84,
++0x0,0x8,0x7c,0x4f,0x48,0x48,0x4a,0x4a,0x4a,0x4a,0x4b,0x7a,0x48,0x0,0x0,0x0,0x40,0x40,0x48,0xfc,0x40,0x40,0x48,0x48,0x48,0x48,0xf8,0x48,0x40,0x42,0x42,0x3e,
++0x8,0x7f,0x48,0x49,0x49,0x49,0x79,0x51,0x11,0x59,0x50,0x57,0x59,0xe0,0x40,0x0,0x88,0xfe,0x54,0xfe,0x54,0xdc,0x4,0xfc,0x4,0xfc,0x8,0xfe,0x8,0x88,0x28,0x10,
++0x10,0xa,0xff,0x0,0x7e,0x43,0x42,0x7e,0x0,0x7e,0x4,0x8,0xfe,0x8,0x29,0x12,0x40,0x40,0x44,0x7e,0x88,0x8,0x88,0x88,0x88,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x11,0x14,0xfe,0x11,0x55,0x55,0x55,0x55,0x7d,0x55,0x11,0x14,0x18,0x10,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x20,0x50,0x8c,0x4,
++0x0,0x7f,0x41,0x41,0x5f,0x41,0x49,0x49,0x49,0x4f,0x49,0x41,0x40,0x40,0x7f,0x40,0x4,0xfe,0x4,0x24,0xf4,0x4,0x24,0x24,0x24,0xe4,0x4,0x14,0xf4,0x4,0xfc,0x4,
++0x10,0x10,0x1c,0x23,0x20,0x7d,0x91,0x11,0xfd,0x11,0x11,0x10,0x14,0x18,0x10,0x0,0x20,0x20,0x24,0xfe,0x20,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x2f,0x28,0x2f,0x28,0x2f,0x48,0x48,0x8f,0x8,0x78,0x80,0x80,0x84,0xfe,0x80,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x47,0x24,0x24,0x7,0x4,0xe5,0x25,0x25,0x25,0x25,0x29,0x21,0x50,0x8f,0x0,0x38,0xc0,0x40,0x48,0xfc,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x6,0xfc,0x0,
++0x20,0x2f,0x24,0x25,0xfa,0x25,0x28,0x20,0x3f,0xe0,0x28,0x25,0x22,0x25,0xa8,0x50,0x0,0xfc,0xa4,0x28,0x10,0x28,0xc4,0x0,0xbc,0x84,0xc4,0x28,0x10,0x28,0xce,0x84,
++0x0,0x8,0x7c,0x49,0x4a,0x48,0x48,0x49,0x4e,0x48,0x49,0x7a,0x48,0x0,0x1,0x6,0x40,0x40,0xfc,0x8,0x90,0x60,0x40,0xa0,0x7e,0x84,0x88,0x50,0x20,0x40,0x80,0x0,
++0x2,0x2,0x7,0x8,0x18,0x25,0x2,0xc,0x71,0x2,0xc,0x12,0x21,0x1,0xe,0x70,0x0,0x0,0xf0,0x20,0x40,0x80,0x80,0x80,0xfc,0x8,0x10,0x20,0xc0,0x0,0x0,0x0,
++0x1,0x1,0x7f,0x2,0x4,0x8,0x30,0xc0,0x0,0x7f,0x4,0x2,0x2,0x0,0x0,0x0,0x0,0x8,0xfc,0x80,0x40,0x30,0xe,0x24,0x20,0xfc,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x16,0x10,0x1f,0x10,0x1c,0xf1,0x42,0x4,0x8,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x4c,0x40,0xfe,0xc0,0xe0,0x50,0x48,0x46,0x44,0x40,
++0x8,0x10,0x3c,0x24,0x3c,0x24,0x3d,0x24,0xff,0x14,0x14,0x24,0x24,0x45,0x96,0x8,0x8,0xfc,0x88,0x88,0x88,0x88,0x26,0x24,0xfe,0x60,0x70,0xb0,0xa8,0x26,0x24,0x20,
++0x0,0xf,0x8,0x8,0x8,0x8,0x31,0x1,0xff,0x3,0x3,0x5,0x9,0x11,0x61,0x1,0x20,0xf0,0x20,0x20,0x20,0x20,0x1c,0x0,0xfe,0x0,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x8,0x7d,0x49,0x49,0x49,0x49,0x7a,0x10,0x17,0x58,0x50,0x51,0x5d,0xe2,0x44,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xc,0x40,0xfe,0xc0,0xe0,0x50,0x4e,0x44,0x40,0x40,
++0x8,0x10,0x3c,0x25,0x35,0x2e,0x24,0xfc,0x24,0x34,0x2c,0x24,0x24,0x44,0x94,0x8,0x40,0x20,0x0,0xfe,0x2,0x4,0x80,0x88,0x90,0xa0,0xc0,0x80,0x84,0x84,0x7c,0x0,
++0x2,0x3f,0x22,0x22,0x22,0x22,0x49,0x9,0xff,0x8,0x1c,0x2b,0x49,0x88,0x8,0x8,0x4,0x4,0x4,0x24,0x24,0x24,0xa4,0x24,0xa4,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x10,0x10,0x17,0x11,0x59,0x56,0x53,0x94,0x19,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x80,0x84,0xfe,0x0,0xfc,0x20,0xfe,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x4,0x14,0x8,
++0x0,0x7b,0x48,0x49,0x52,0x4c,0x48,0x68,0x50,0x41,0x41,0x3f,0x1,0x1,0xff,0x0,0x44,0xfe,0x88,0xfc,0x88,0xf8,0x88,0xf8,0x88,0x98,0x0,0xf8,0x0,0x4,0xfe,0x0,
++0x10,0x10,0x13,0x10,0x7c,0x57,0x54,0x54,0x54,0x57,0x7c,0x50,0x14,0x1c,0xf2,0x41,0x10,0xd4,0x92,0x90,0x90,0xfe,0x90,0x90,0xd4,0x98,0x90,0xa8,0xc8,0x8a,0x86,0x2,
++0x10,0x10,0x13,0x54,0x54,0x57,0x54,0x54,0x54,0x57,0x54,0x54,0x5c,0x74,0x42,0x1,0x10,0xd0,0x94,0x92,0x90,0xfe,0x90,0x90,0xd4,0x98,0x90,0xa8,0xc8,0x8a,0x86,0x2,
++0x8,0x38,0xec,0x2a,0x28,0xfe,0x28,0x28,0x38,0xea,0x2c,0x28,0x35,0x24,0xa5,0x42,0x20,0x48,0xfc,0x88,0xa8,0x88,0xa8,0x90,0x80,0xfe,0x2,0x12,0xfa,0x2,0x14,0x8,
++0x8,0x9,0xf,0x11,0x11,0x3f,0x51,0x91,0x11,0x13,0x1d,0x11,0x11,0x11,0x15,0x12,0x20,0xa8,0x24,0x20,0x24,0xfe,0x20,0x20,0xa4,0x18,0x10,0x30,0x48,0x8a,0x6,0x2,
++0x10,0x8,0x7f,0x41,0x92,0x1e,0x22,0x54,0x8,0x14,0x22,0x7f,0xa2,0x22,0x3e,0x20,0x4,0xfe,0x10,0x24,0x7e,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x10,0x28,0x46,0x82,
++0x1,0x41,0x31,0x11,0x1,0x3,0xf5,0x19,0x11,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x20,0x20,0x20,0x24,0x2c,0x30,0x20,0x60,0xa0,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x27,0x24,0x24,0x24,0x45,0x2a,0x10,0x28,0x44,0x86,0x1,0x10,0xd0,0x94,0x92,0x90,0xfe,0x90,0x90,0xd4,0x98,0x90,0xa8,0xc8,0x8a,0x86,0x2,
++0x0,0x7f,0x4,0x24,0x14,0x14,0x4,0x4,0xff,0x0,0x2a,0x29,0x28,0x48,0x7,0x0,0x8,0xfc,0x40,0x48,0x58,0x60,0x40,0x44,0xfe,0x0,0x10,0x88,0xa4,0x24,0xe0,0x0,
++0x0,0x3f,0x20,0x20,0x20,0x27,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x43,0x80,0x8,0xfc,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0xa0,0x40,0x0,0x4,0x4,0xfc,0x0,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x16,0x1a,0x32,0xd2,0x12,0x12,0x12,0x14,0x58,0x20,0x0,0x4,0xfe,0x0,0x8,0xfc,0x88,0x88,0x88,0xa8,0x90,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x47,0x24,0x27,0x4,0x7,0xe2,0x25,0x2c,0x34,0x25,0x24,0x27,0x50,0x8f,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x8,0xfc,0x88,0x88,0x48,0x28,0xd0,0x6,0xfc,0x0,
++0x0,0x77,0x55,0x55,0x77,0x0,0x7f,0x0,0xff,0x10,0x22,0x3f,0x2,0x2,0x12,0xc,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0xc4,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x20,0x20,0x23,0x3c,0x24,0x4b,0x40,0xa0,0x20,0x21,0x22,0x20,0x28,0x30,0x22,0x1,0x10,0xd0,0x94,0x92,0x90,0xfe,0x90,0x90,0xd4,0x98,0x90,0xa8,0xc8,0x8a,0x86,0x2,
++0x0,0x3f,0x21,0x21,0x2f,0x21,0x22,0x24,0x28,0x3f,0x20,0x2,0x51,0x50,0x90,0xf,0x8,0xfc,0x8,0x48,0xe8,0x8,0x88,0x68,0x28,0xf8,0x8,0x0,0x84,0x92,0x12,0xf0,
++0x0,0xff,0x2,0x2,0x4,0x7f,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x40,0x4,0xfe,0x0,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x54,0x8,
++0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x42,0x3e,0x0,
++0x0,0x7f,0x8,0x8,0xf,0x8,0x8,0xf,0x8,0x8,0x8,0xff,0x0,0x0,0x0,0x0,0x8,0xfc,0x20,0x20,0xe0,0x20,0x20,0xe0,0x20,0x24,0x3e,0xe0,0x20,0x20,0x20,0x20,
++0x8,0xc,0x8,0x1f,0x20,0x41,0x81,0x1,0x9,0x9,0x11,0x11,0x21,0x1,0x5,0x2,0x0,0x0,0x8,0xfc,0x8,0x10,0x0,0x0,0x40,0x20,0x10,0x18,0x8,0x0,0x0,0x0,
++0x20,0x23,0x21,0x3d,0x25,0x49,0x41,0xa1,0x21,0x21,0x27,0x20,0x28,0x30,0x20,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0xfe,0x8,0x8,0x8,0x8,0x8,
++0x0,0x47,0x32,0x12,0x83,0x62,0x22,0xb,0x12,0x22,0xe2,0x2f,0x20,0x20,0x20,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x8,0xfe,0x8,0x8,0x8,0x8,
++0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,
++0x0,0x0,0xff,0x0,0x3f,0x0,0x7f,0x0,0x3f,0x20,0x24,0x24,0x24,0xa,0x11,0x60,0x28,0x24,0xfe,0x20,0xa0,0x20,0xe0,0x20,0xa0,0x90,0x90,0x90,0x92,0xa,0x8a,0x84,
++0x1,0x11,0x11,0x21,0x7f,0x2,0x2,0x7,0x6,0xa,0x9,0x10,0x21,0x42,0x8c,0x30,0x0,0x20,0x10,0x4,0xfe,0x0,0x0,0xf0,0x10,0x20,0x40,0x80,0x40,0x30,0xe,0x4,
++0x0,0x7f,0x44,0x44,0x7f,0x20,0x18,0x8,0x0,0xf0,0x10,0x12,0x14,0x18,0x10,0x0,0x4,0xfe,0x44,0x44,0xfc,0x0,0x8,0x88,0x88,0x88,0x88,0x88,0x88,0x8,0x28,0x10,
++0x10,0x1f,0x28,0x45,0x0,0x8,0x8,0x10,0x37,0x50,0x90,0x10,0x10,0x10,0x13,0x10,0x40,0x7c,0xa0,0x10,0x80,0x90,0x88,0xfe,0x80,0x50,0x50,0x20,0x60,0x92,0xa,0x6,
++0x8,0x8,0x8,0x10,0x10,0x30,0x57,0x90,0x10,0x10,0x10,0x10,0x10,0x11,0x16,0x10,0x80,0xa0,0x98,0x88,0x80,0xfc,0x80,0x88,0x88,0x50,0x60,0x40,0xa0,0x12,0xa,0x6,
++0x0,0x0,0x7f,0x4,0x3,0x1,0x3f,0x0,0x0,0x1,0x6,0x8,0x30,0x48,0x7,0x0,0x10,0x78,0x80,0x0,0x0,0x0,0xf8,0x10,0x60,0x80,0x0,0x0,0x0,0x6,0xfc,0x0,
++0x20,0x17,0x10,0x45,0x45,0x49,0x49,0x5f,0x69,0x48,0x48,0x49,0x4a,0x48,0x48,0x40,0x4,0xfe,0x4,0x44,0x24,0x4,0xf4,0x4,0x24,0xc4,0x84,0x44,0x54,0x34,0x4,0xc,
++0x0,0x40,0x30,0x10,0x87,0x60,0x20,0x8,0x17,0x20,0xe0,0x20,0x21,0x22,0x27,0x20,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0x80,0x10,0x8,0xfc,0x4,
++0x0,0x10,0xf8,0x20,0x27,0x20,0x20,0xf8,0x2f,0x20,0x20,0x20,0x39,0xe2,0x47,0x0,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0x80,0x8,0x4,0xfe,0x2,
++0x8,0xff,0x8,0x4f,0x24,0x22,0x8f,0x62,0x2a,0x14,0x2f,0xe4,0x27,0x24,0x27,0x24,0x24,0xfe,0x20,0xf8,0x90,0xa0,0xfc,0xa0,0x90,0x8e,0xf4,0x90,0xf0,0x90,0xf0,0x10,
++0x10,0x10,0x14,0x7e,0x54,0x54,0x54,0x54,0x54,0x54,0x5c,0x54,0x11,0x11,0x12,0x14,0x8,0xfc,0x88,0x88,0x88,0xc8,0xa8,0xa8,0x88,0x88,0x88,0x88,0xa,0xa,0x6,0x0,
++0x0,0x3f,0x11,0xd,0x5,0xff,0x9,0x11,0x3f,0xd1,0x11,0x1f,0x11,0x11,0x1f,0x10,0x78,0x80,0x10,0x30,0x44,0xfe,0x20,0x10,0xfe,0x14,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0xe,0xf1,0x54,0x38,0xfe,0x11,0x54,0x92,0x7c,0x54,0x55,0x7c,0x54,0x54,0x7d,0x44,0x4,0xde,0x44,0x44,0x44,0x54,0xcc,0x44,0x44,0xcc,0x54,0x44,0x44,0x44,0x54,0x88,
++0x10,0x14,0x12,0xfd,0x12,0x38,0x56,0x91,0x12,0x14,0x1,0xff,0x2,0x4,0x18,0x60,0x10,0x50,0x94,0x7e,0x90,0x38,0xd4,0x12,0x90,0x50,0x4,0xfe,0x80,0x40,0x3c,0x8,
++0x8,0xfd,0x11,0x11,0x21,0x29,0x7d,0xa9,0x29,0x29,0x29,0x29,0x3a,0x2a,0x4,0x8,0x10,0xf8,0x10,0x10,0x10,0x90,0x50,0x50,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x10,0x11,0x3d,0x21,0x41,0xfd,0x11,0x11,0xfd,0x11,0x11,0x15,0x1a,0x12,0x4,0x8,0x10,0xf8,0x10,0x10,0x10,0x90,0x50,0x50,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x22,0x3f,0x40,0xbe,0x2a,0xff,0x2a,0x3e,0x2,0x1f,0x1,0x6,0x3f,0x9,0x19,0x22,0x20,0x24,0x7e,0xc4,0x28,0x90,0x2e,0xc4,0x20,0xc0,0x80,0x10,0xf8,0x20,0x18,0x8,
++0x0,0xf,0x8,0x8,0x8,0xa,0x9,0x9,0x8,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0xa0,0xa0,0x20,0x20,0x22,0x22,0x22,0x1e,0x0,
++0x10,0x13,0x10,0x14,0x59,0x51,0x51,0x91,0x11,0x11,0x11,0x29,0x24,0x44,0x81,0x2,0x4,0xfe,0x40,0x88,0xfc,0x8,0x28,0x28,0x28,0x48,0x48,0x48,0x80,0x90,0xc,0x4,
++0x0,0x0,0x3f,0x20,0x20,0x3f,0x24,0x24,0x22,0x22,0x21,0x20,0x41,0x42,0x84,0x18,0x10,0x78,0x80,0x0,0x0,0xf8,0x8,0x10,0x10,0x20,0x40,0x80,0x40,0x30,0xe,0x4,
++0x0,0x40,0x33,0x12,0x2,0x2,0xf2,0x12,0x12,0x12,0x12,0x14,0x15,0x28,0x44,0x3,0x8,0x1c,0xe0,0x0,0x0,0xf8,0x8,0x90,0x50,0x20,0x50,0x8c,0x4,0x0,0x6,0xfc,
++0x8,0x8,0xff,0x8,0x20,0x1b,0x4a,0x22,0x22,0xa,0xf2,0x22,0x22,0x22,0x21,0x20,0x20,0x24,0xfe,0x20,0x10,0xf8,0x10,0x10,0x10,0x50,0x20,0x0,0x2,0x2,0xfe,0x0,
++0x4,0x7e,0x45,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x11,0x2a,0x44,0x81,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x4,0x48,0x48,0x50,0x30,0x20,0x50,0x48,0x8e,0x4,
++0x2,0x44,0x29,0x11,0x29,0x49,0x89,0x9,0x19,0x29,0x49,0x89,0x9,0x9,0x50,0x20,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x28,0x10,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x20,0x20,0x21,0x3d,0x25,0x49,0x41,0xa1,0x21,0x21,0x21,0x25,0x29,0x32,0x24,0x9,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x4,0x48,0x48,0x50,0x30,0x20,0x50,0x48,0x8e,0x4,
++0x0,0x40,0x37,0x10,0x80,0x40,0x47,0x10,0x10,0x20,0xe0,0x21,0x26,0x29,0x20,0x20,0x10,0x38,0xc0,0x80,0x40,0x40,0xfc,0x8,0x30,0x40,0x80,0x0,0x0,0x6,0xfc,0x0,
++0x10,0x10,0x10,0x10,0x13,0xfc,0x10,0x10,0x10,0x10,0x1c,0xf0,0x41,0x1,0x2,0x4,0x80,0x40,0x40,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0x8,0x8,0x50,0x20,
++0x8,0x8,0xff,0x8,0xa,0x1,0xff,0x4,0x4,0x7,0x4,0x4,0x8,0x8,0x10,0x20,0x20,0x24,0xfe,0x20,0x20,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xa0,0x40,
++0x4,0x3,0x1,0x0,0xff,0x4,0x4,0x7,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x0,0x0,0x0,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0xa0,0x40,
++0x4,0x3e,0x24,0x24,0x27,0x3c,0x24,0x24,0x24,0x3c,0x24,0x24,0x25,0x25,0x4e,0x84,0x80,0x40,0x40,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0x8,0x8,0x50,0x20,
++0x2,0x1,0x3f,0x20,0x3f,0x21,0x20,0x3f,0x22,0x22,0x23,0x22,0x44,0x44,0x88,0x10,0x0,0x8,0xfc,0x8,0xf8,0x0,0x84,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0xa0,0x40,
++0x0,0x7c,0x44,0x48,0x4f,0x50,0x48,0x48,0x44,0x44,0x44,0x68,0x51,0x41,0x42,0x44,0x80,0x40,0x40,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0x8,0x8,0x50,0x20,
++0x10,0x10,0x10,0x10,0xff,0x24,0x24,0x24,0x24,0x44,0x28,0x10,0x29,0x45,0x82,0x4,0x80,0x40,0x40,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0x8,0x8,0x50,0x20,
++0x8,0x8,0x8,0x10,0x17,0x30,0x50,0x90,0x10,0x10,0x10,0x10,0x11,0x11,0x12,0x14,0x80,0x40,0x40,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0x8,0x8,0x50,0x20,
++0x0,0x20,0x10,0x10,0x7,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x15,0x19,0x12,0x4,0x80,0x40,0x40,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0x8,0x8,0x50,0x20,
++0x10,0x10,0x20,0x20,0x47,0xfc,0x10,0x20,0x40,0xfc,0x40,0x0,0x1d,0xe1,0x42,0x4,0x80,0x40,0x40,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0x8,0x8,0x50,0x20,
++0x20,0x10,0x10,0x0,0xff,0x20,0x24,0x3e,0x24,0x24,0x24,0x24,0x44,0x54,0x89,0x2,0x40,0x40,0x40,0x84,0xfe,0x8,0x88,0x88,0x50,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x8,0x8,0xff,0x8,0x4,0x4,0x7c,0x4,0x4,0x7c,0x4,0x4,0xfc,0x4,0x4,0x4,0x20,0x24,0xfe,0x20,0x40,0x48,0x7c,0x40,0x48,0x7c,0x40,0x44,0x7e,0x40,0x40,0x40,
++0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x7c,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x40,0x40,0x44,0x7e,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0x44,0x7e,0x40,0x40,0x40,
++0x0,0x8,0x7c,0x4f,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x78,0x4f,0x0,0x0,0x0,0x90,0x90,0x94,0x9e,0x90,0x90,0x94,0x9e,0x90,0x90,0x90,0x94,0x9e,0x90,0x90,0x90,
++0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x24,0x2c,0x30,0x20,0x30,0x2c,0x24,0x20,0x20,0x10,0x12,0xa,0x4,
++0x4,0x7f,0x45,0x45,0x45,0x7d,0x45,0x45,0x45,0x7d,0x45,0x45,0x45,0x45,0x54,0x88,0x4,0xfe,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,0x0,0x2,0x2,0x2,0xfe,0x0,
++0x0,0x7f,0x42,0x42,0x5e,0x42,0x42,0x5e,0x42,0x42,0x7e,0x42,0x42,0x42,0x7f,0x0,0x4,0xfe,0x40,0x50,0x78,0x40,0x50,0x78,0x40,0x48,0x7c,0x40,0x40,0x44,0xfe,0x0,
++0x20,0x10,0x10,0x7,0x0,0xf0,0x10,0x13,0x10,0x10,0x10,0x17,0x14,0x18,0x10,0x0,0x90,0x90,0x94,0x9e,0x90,0x90,0x90,0x9c,0x90,0x90,0x94,0x9e,0x90,0x90,0x90,0x90,
++0x0,0x8,0x7c,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x49,0x79,0x4a,0x2,0x4,0x8,0x40,0x50,0x48,0x48,0x40,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x10,0x8,0xe,0x4,0x0,
++0x4,0x3e,0x24,0x27,0x24,0x3c,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x24,0x54,0x88,0x20,0x20,0x24,0xfe,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x2c,0x20,0x20,0x20,
++0x1,0x0,0x3f,0x20,0x24,0x24,0x2f,0x21,0x23,0x22,0x25,0x24,0x28,0x30,0x43,0x8c,0x0,0x88,0xfc,0x80,0x90,0x88,0xfe,0x0,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x1,0x41,0x2f,0x21,0x1,0x8f,0x49,0x9,0x1f,0x29,0xe1,0x21,0x22,0x22,0x24,0x28,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x20,0xfe,0x22,0x22,0x2a,0x24,0x20,0x20,0x20,
++0x4,0x7f,0x4,0x7f,0x44,0x7f,0x4,0x8,0x3f,0xd0,0x11,0x11,0x11,0x2,0xc,0x30,0x48,0xfc,0x48,0xf8,0x40,0xfe,0x42,0x4a,0xf4,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x8,0x8,0xff,0x8,0x4,0x4,0x8,0x10,0x20,0xcf,0x4,0x4,0x4,0x8,0x10,0x20,0x20,0x24,0xfe,0x20,0x80,0x80,0x40,0x30,0xe,0xe4,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x4,0xfe,0x28,0x28,0xfe,0xaa,0xab,0xae,0xc2,0x82,0xfe,0x82,0x82,0xfe,0x82,0x1,0x8,0x48,0x48,0x48,0x84,0x84,0x2,0xfc,0x44,0x44,0x44,0x44,0x44,0x44,0x94,0x8,
++0x0,0x8,0x7c,0x48,0x48,0x49,0x49,0x4a,0x4d,0x48,0x48,0x78,0x49,0x1,0x2,0x4,0x20,0xa0,0xa0,0x90,0x90,0x8,0xe,0x4,0xf8,0x88,0x88,0x88,0x8,0x8,0x28,0x10,
++0x10,0x1f,0x10,0x2f,0x40,0xbf,0x1,0x9,0x8,0x10,0x3f,0x48,0x8,0x8,0x12,0x21,0x8,0xfc,0x0,0xf8,0x0,0xf8,0x8,0x8,0x88,0x48,0xb8,0xa8,0x88,0x8a,0x8a,0x4,
++0x0,0x4,0x4,0x8,0x8,0x10,0x20,0x4f,0x84,0x4,0x4,0x4,0x4,0x8,0x11,0x20,0x80,0x80,0x40,0x40,0x20,0x10,0x8,0xee,0x24,0x20,0x20,0x20,0x20,0x20,0x40,0x80,
++0x10,0x10,0x20,0x20,0x48,0xf9,0x11,0x22,0x45,0xf8,0x40,0x0,0x19,0xe1,0x42,0x4,0x20,0xa0,0xa0,0x90,0x90,0x8,0xe,0x4,0xf8,0x88,0x88,0x88,0x8,0x8,0x28,0x10,
++0x10,0x10,0x10,0x10,0x13,0xfc,0x10,0x10,0x10,0x10,0x10,0x1c,0xf0,0x40,0x1,0x6,0x40,0x20,0x20,0x4,0xfe,0x88,0x88,0x88,0x88,0x48,0x50,0x20,0x50,0x88,0xe,0x4,
++0x8,0x8,0x8,0xfe,0x18,0x2c,0x4b,0x8,0x1,0x11,0x9,0xa,0x4,0x8,0x30,0xc0,0x20,0x20,0x24,0xfe,0x60,0xb8,0x24,0x20,0x10,0x30,0x40,0x80,0x40,0x30,0xe,0x4,
++0x0,0x41,0x31,0x11,0x82,0x64,0x28,0x7,0x11,0x21,0xe1,0x21,0x22,0x22,0x24,0x28,0x20,0x20,0x20,0x10,0x10,0xe,0x4,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0xa0,0x40,
++0x10,0x10,0x10,0x54,0x38,0x11,0xfd,0x12,0x39,0x34,0x50,0x90,0x11,0x11,0x12,0x14,0x20,0xa0,0xa0,0x90,0x90,0x8,0xe,0x4,0xf8,0x88,0x88,0x88,0x8,0x8,0x28,0x10,
++0x1,0x1,0x1,0xff,0x2,0x4,0x8,0x30,0xdf,0x11,0x11,0x1f,0x11,0x11,0x1f,0x10,0x0,0x0,0x4,0xfe,0x80,0x40,0x20,0x1e,0xf4,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x8,0x9,0x9,0x11,0x12,0x32,0x54,0x9b,0x11,0x11,0x11,0x11,0x12,0x12,0x14,0x10,0x20,0x20,0x20,0x10,0x10,0xe,0x4,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0xa0,0x40,
++0x0,0x4,0x4,0x8,0x1f,0x24,0xc4,0x9,0x30,0x0,0x2a,0x29,0x28,0x48,0x7,0x0,0x80,0x80,0x40,0x20,0xf0,0x2e,0x24,0x20,0xc0,0x0,0x10,0x88,0xa4,0x24,0xe0,0x0,
++0x10,0x10,0x13,0x10,0x59,0x57,0x51,0x93,0x12,0x12,0x12,0x12,0x12,0x10,0x11,0x16,0x40,0x50,0xf8,0x40,0x54,0xfe,0x10,0xf8,0x8,0x48,0x48,0x48,0x48,0xa0,0x18,0x8,
++0x11,0xd,0x5,0x7f,0x3,0x5,0x19,0x4,0x4,0x3f,0x4,0x4,0xff,0x8,0x18,0x20,0x10,0x30,0x40,0xfc,0x80,0x40,0x3c,0x48,0x40,0xf8,0x40,0x44,0xfe,0x20,0x18,0x8,
++0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0x3f,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x0,0x0,0x8,0xfc,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x8,0x8,0xa,0x7f,0x8,0xa,0xff,0x8,0xa,0x7f,0x8,0x8,0xf,0x78,0x20,0x0,0x8,0x8,0x8,0x8,0x8,0xfe,0x8,0x8,0x48,0x28,0x28,0x8,0x8,0x8,0x28,0x10,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x3b,0x36,0x52,0x52,0x92,0x13,0x12,0x14,0x14,0x18,0x0,0x8,0xfc,0x8,0x8,0x8,0x18,0xa8,0x48,0x48,0xa8,0x18,0x8,0xa,0xa,0x6,
++0x10,0x10,0x10,0x15,0x7e,0x54,0x54,0x57,0x54,0x7c,0x51,0x14,0x1d,0xe4,0x40,0x0,0x80,0x80,0xfc,0x88,0x50,0x20,0xde,0x24,0xf8,0x20,0xfc,0x20,0xfc,0x20,0x20,0x20,
++0x10,0x10,0x10,0x11,0x56,0x54,0x54,0x57,0x54,0x54,0x55,0x5c,0x65,0x0,0x0,0x0,0x80,0x80,0xfc,0x88,0x50,0x20,0xde,0x24,0xf8,0x20,0xfc,0x20,0xfc,0x20,0x20,0x20,
++0x10,0x10,0x10,0x1d,0x22,0x20,0x7c,0x93,0x10,0xfc,0x11,0x10,0x15,0x18,0x10,0x0,0x80,0x80,0xfc,0x88,0x50,0x20,0xde,0x24,0xf8,0x20,0xfc,0x20,0xfc,0x20,0x20,0x20,
++0x0,0x3f,0x20,0x28,0x24,0x22,0x22,0x21,0x21,0x22,0x22,0x24,0x28,0x30,0x40,0x80,0x10,0xf8,0x10,0x50,0x50,0x90,0x90,0x10,0x10,0x90,0x90,0x50,0x50,0x12,0xa,0x6,
++0x1,0x0,0x1f,0x10,0x97,0x54,0x56,0x15,0x34,0x54,0xd4,0x14,0x25,0x2a,0x48,0x10,0x0,0x84,0xfe,0x8,0xfc,0x8,0x18,0x18,0xa8,0x48,0x48,0xa8,0x18,0x1a,0xa,0x6,
++0x10,0x10,0x10,0x15,0x5a,0x50,0x50,0x93,0x10,0x10,0x29,0x24,0x45,0x40,0x80,0x0,0x80,0x80,0xfc,0x88,0x50,0x20,0xde,0x24,0xf8,0x20,0xfc,0x20,0xfc,0x20,0x20,0x20,
++0x0,0x41,0x23,0x24,0x0,0x1,0xee,0x20,0x27,0x20,0x23,0x20,0x27,0x20,0x50,0x8f,0x80,0xfc,0x8,0xb0,0x40,0xb0,0x4e,0x40,0xfc,0x40,0xf8,0x40,0xfc,0x40,0x46,0xfc,
++0x0,0x47,0x30,0x12,0x2,0xa,0x12,0x12,0x23,0xe0,0x20,0x2f,0x20,0x20,0x20,0x20,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x4,0x24,0xf4,0x4,0x4,0x28,0x10,
++0x10,0x10,0x24,0x23,0x4a,0xf8,0x17,0x22,0x42,0xfa,0x42,0x3,0x1a,0xe2,0x45,0x8,0x40,0x7c,0x88,0x50,0x20,0xd8,0x26,0xf8,0x20,0xf8,0x20,0xfc,0x20,0x20,0x26,0xfc,
++0x0,0x47,0x24,0x24,0x6,0x5,0xe4,0x24,0x24,0x24,0x25,0x2e,0x34,0x24,0x8,0x10,0x8,0xfc,0x8,0x8,0x18,0x18,0xa8,0x48,0x48,0xa8,0x18,0x18,0x8,0xa,0xa,0x6,
++0x1,0x1,0x7f,0x1,0x3f,0x2,0xff,0x4,0x9,0x31,0xcf,0x1,0x1f,0x1,0x1,0x1,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x40,0x20,0x1e,0xe4,0x0,0xf0,0x0,0x0,0x0,
++0x0,0x3f,0x20,0x20,0x2f,0x20,0x28,0x24,0x22,0x21,0x22,0x24,0x28,0x20,0x40,0x80,0x10,0xf8,0x10,0x10,0xf0,0x50,0x50,0x90,0x90,0x10,0x90,0xd0,0x50,0x12,0xa,0x6,
++0x10,0x12,0x12,0x2f,0x22,0x62,0xaf,0x2a,0x2a,0x2f,0x22,0x22,0x22,0x24,0x28,0x20,0x40,0x40,0x48,0xfc,0x48,0x48,0xf8,0x40,0x44,0xfe,0x44,0x44,0x54,0x48,0x40,0x40,
++0x0,0xff,0x0,0x1,0x3,0x5,0x9,0x31,0xc1,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x4,0xfe,0x80,0x0,0x0,0x60,0x18,0x6,0x12,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0xff,0x1,0x2,0x2,0x4,0x4,0x8,0x10,0x60,0x0,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x0,0x80,0x80,0x40,0x40,0x30,0xe,0x4,
++0x8,0xff,0x8,0x7f,0x49,0x7f,0x49,0x7f,0x49,0x8,0xff,0x10,0x1e,0x12,0x22,0x47,0x20,0xa0,0x20,0x24,0x7e,0x84,0x44,0x44,0x28,0x28,0x90,0x10,0x28,0x48,0x86,0x4,
++0x4,0x3e,0x24,0x25,0x24,0x3c,0x24,0x27,0x24,0x3c,0x24,0x24,0x24,0x24,0x4d,0x86,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x50,0x50,0x88,0x88,0x6,0x4,
++0x10,0x20,0x57,0x55,0x55,0x55,0x77,0x55,0x55,0x55,0x77,0x14,0x24,0x24,0x44,0x84,0xc,0xf0,0x2,0x54,0x54,0x0,0x7c,0x8,0x10,0x14,0xfe,0x10,0x10,0x10,0x50,0x20,
++0x10,0x10,0x10,0x11,0xfc,0x10,0x14,0x1b,0x30,0xd0,0x10,0x10,0x10,0x10,0x51,0x26,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x50,0x50,0x88,0x88,0x6,0x4,
++0x10,0x11,0x11,0x17,0xf9,0x11,0x17,0x1d,0x35,0xd7,0x11,0x11,0x11,0x12,0x54,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x20,0xfe,0x22,0x22,0x2a,0x24,0x20,0x20,
++0x10,0x17,0x20,0xfb,0x22,0x52,0x53,0xf8,0x17,0x14,0xfc,0x17,0x14,0x14,0x17,0x14,0x8,0xfc,0x0,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x10,0x11,0x14,0x7e,0x54,0x54,0x54,0x54,0x55,0x55,0x55,0x5d,0x11,0x11,0x11,0x11,0x8,0xfc,0x0,0xf8,0x88,0x88,0xf8,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,
++0x10,0x1f,0x10,0x2f,0x40,0xbf,0xa,0x7f,0xa,0x7f,0x4a,0x7f,0xa,0xa,0x12,0x62,0x8,0xfc,0x0,0xf8,0x0,0xf8,0x8,0xc8,0x48,0xc8,0x8,0xe8,0x28,0xaa,0x4a,0x4,
++0x10,0x12,0x1f,0x28,0x45,0x88,0x8,0x17,0x30,0x52,0x91,0x11,0x10,0x10,0x10,0x10,0x40,0x44,0x7e,0xa0,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
++0x8,0x8,0x8,0x10,0x10,0x3f,0x50,0x90,0x10,0x10,0x10,0x11,0x11,0x12,0x14,0x18,0x40,0x40,0x50,0x4c,0x44,0xfe,0x40,0x40,0x40,0xa0,0xa0,0x10,0x10,0x8,0xe,0x4,
++0x10,0x10,0x17,0x20,0x22,0x62,0xa0,0x27,0x20,0x20,0x2f,0x20,0x20,0x20,0x21,0x20,0x8,0x3c,0xc0,0x8,0x48,0x50,0x0,0xf8,0x20,0x44,0xfe,0x40,0x40,0x40,0x40,0x80,
++0x2,0x3f,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x22,0x4a,0x84,0x8,0xfc,0x88,0x88,0x88,0x98,0x80,0xfc,0xa4,0xa4,0xa8,0x90,0xa8,0xa8,0xc6,0x84,
++0x40,0x30,0x17,0x0,0x82,0x62,0x20,0xb,0x10,0x20,0xef,0x20,0x20,0x20,0x21,0x20,0x8,0x3c,0xc0,0x8,0x48,0x50,0x0,0xf8,0x20,0x44,0xfe,0x40,0x40,0x40,0x40,0x80,
++0x40,0x30,0x17,0x0,0x81,0x60,0x20,0xf,0x10,0x23,0xe2,0x22,0x22,0x22,0x23,0x22,0x80,0x48,0xfc,0x0,0x10,0xa0,0x4,0xfe,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x17,0x10,0x3,0xfa,0xa,0x13,0x38,0x57,0x94,0x14,0x17,0x14,0x14,0x17,0x14,0x8,0xfc,0x0,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x20,0x10,0x10,0x1,0xfd,0xb,0x15,0x31,0x55,0x99,0x15,0x11,0x11,0x11,0x11,0x11,0x90,0x90,0x94,0x12,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x28,0x28,0x46,0x84,0x0,
++0x4,0x4,0x4,0x7f,0x4,0x4,0x7f,0x44,0x44,0x7f,0x44,0x4,0x8,0x30,0xc0,0x0,0x40,0x40,0x48,0xfc,0x48,0x48,0xf8,0x40,0x44,0xfe,0x44,0x44,0x54,0x48,0x40,0x40,
++0x1,0x1,0xff,0x1,0x1,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x21,0x21,0x21,0x20,0x20,0x14,0xfe,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x17,0x18,0x30,0xd0,0x10,0x11,0x11,0x12,0x54,0x28,0x0,0x8,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0xa0,0xa0,0x20,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x15,0xfe,0x20,0x29,0x49,0x7f,0x9,0x9,0xf,0xf9,0x49,0x9,0x9,0x9,0x28,0x24,0xfe,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x24,0x24,0xc,
++0x10,0x10,0x17,0x24,0x24,0x64,0xa5,0x25,0x27,0x25,0x25,0x25,0x29,0x29,0x31,0x21,0x80,0x44,0xfe,0x80,0x88,0x88,0x8,0xfe,0x8,0x48,0x28,0x28,0x8,0x8,0x28,0x10,
++0x4,0x8,0x14,0x62,0x1,0xe,0x30,0xdf,0x1,0x1,0x3f,0x1,0x9,0x5,0x7f,0x0,0x40,0x20,0x50,0x8c,0x0,0xe0,0x1e,0xf4,0x0,0x10,0xf8,0x0,0x20,0x48,0xfc,0x0,
++0x4,0x8,0x34,0x3,0xc,0x30,0xc0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x20,0x40,0x0,0x40,0x20,0x58,0x80,0x60,0x1e,0xe4,0x0,0x0,0x10,0xf8,0x80,0x80,0x80,0x80,0x80,
++0x0,0x3c,0x27,0x24,0x24,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x25,0x45,0x8d,0x28,0x24,0xfe,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x24,0x24,0xc,
++0x8,0x7c,0x4b,0x4a,0x4a,0x7a,0x4a,0x4a,0x4b,0x7a,0x4a,0x4a,0x4a,0x5a,0x84,0x8,0x40,0x24,0xfe,0x40,0x44,0x44,0x84,0xfe,0x84,0xa4,0x94,0x94,0x84,0x84,0x94,0x88,
++0x2,0x1,0x3f,0x22,0x22,0x22,0x24,0x27,0x2c,0x35,0x24,0x24,0x24,0x44,0x84,0x4,0x0,0x8,0xfc,0x0,0x10,0x10,0x14,0xfe,0x10,0x10,0x90,0x90,0x10,0x10,0x50,0x20,
++0x1,0x0,0x3f,0x22,0x22,0x25,0x2c,0x34,0x24,0x2f,0x29,0x2a,0x48,0x49,0x8a,0x8,0x0,0x84,0xfe,0x10,0x14,0xfe,0x90,0x10,0xb4,0xfe,0x44,0xa4,0x84,0x44,0x34,0x8,
++0x8,0x8,0xa,0x7f,0x8,0xa,0xff,0x8,0x28,0x2a,0x2f,0x28,0x28,0x58,0x88,0x7,0x40,0x40,0x40,0x40,0x40,0x60,0x50,0x4c,0x44,0x40,0x40,0x40,0x40,0x40,0x6,0xfc,
++0x0,0xff,0x0,0x3f,0x20,0x20,0x3f,0x0,0x7f,0x44,0x44,0x7f,0x44,0x44,0x7f,0x40,0x44,0xe4,0x84,0xd4,0x94,0x94,0x94,0x54,0xf4,0x54,0x54,0xd4,0x44,0x44,0xd4,0x48,
++0xff,0x4,0x3f,0x24,0x3f,0x12,0x23,0x4a,0x17,0x32,0x53,0x91,0x13,0x1d,0x10,0x17,0xfe,0x40,0xf8,0x48,0xf8,0x0,0xfc,0x0,0xf8,0x48,0xf8,0x0,0xf8,0x10,0xe2,0x1c,
++0x4,0x7e,0x44,0x55,0x54,0x54,0x57,0x54,0x55,0x55,0x55,0x11,0x29,0x27,0x45,0x80,0x8,0x8,0x2c,0xfa,0x8,0x8,0xfe,0x48,0x48,0x78,0x48,0x48,0x78,0xca,0xa,0x4,
++0x10,0x1f,0x20,0x2f,0x48,0x8f,0x8,0xf,0x4,0xf,0xc,0x12,0x21,0x42,0x4,0x38,0x8,0xfc,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x0,0xf0,0x20,0x40,0x80,0x40,0x30,0xe,
++0x8,0x8,0xf,0x10,0x17,0x34,0x57,0x94,0x17,0x14,0x10,0x1f,0x12,0x11,0x10,0x10,0x50,0x48,0xfe,0x40,0xfc,0x44,0xfc,0x44,0xfc,0x44,0x10,0xfe,0x10,0x10,0x50,0x20,
++0x8,0x8,0x8,0x10,0x10,0x37,0x50,0x90,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x90,0x90,0x10,0x10,0x10,0x50,0x20,
++0x1,0x2,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x1f,0x11,0x1,0xff,0x1,0x1,0x1,0x0,0x10,0xf8,0x10,0xf0,0x0,0xf0,0x10,0x10,0xf0,0x0,0x4,0xfe,0x0,0x0,0x0,
++0x4,0x8,0x10,0x20,0x40,0x8,0x4,0x4,0x2,0x2,0x1,0x2,0x4,0x8,0x30,0xc0,0x40,0x20,0x10,0xc,0x24,0x20,0x40,0x40,0x80,0x80,0x0,0x80,0x40,0x30,0xe,0x4,
++0x9,0x7d,0x49,0x4b,0x4d,0x79,0x49,0x49,0x49,0x79,0x4a,0x4c,0x48,0x48,0x49,0x9e,0x4,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x4,0x4,0xf,0x10,0x20,0x5f,0x10,0x11,0x11,0x11,0x11,0x11,0x2,0x4,0x18,0x60,0x0,0x0,0xe0,0x40,0x90,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0xc0,0x30,0x18,0x8,
++0x2,0x1,0x7f,0x40,0x9f,0x0,0x1f,0x10,0x1f,0x0,0x3f,0x21,0x3f,0x21,0x3f,0x20,0x0,0x0,0xfe,0x22,0xf4,0x0,0xf0,0x10,0xf0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x0,0x20,0x18,0x8,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x12,0x14,0x18,0x10,0x0,0x40,0x40,0x40,0x40,0x40,0x50,0x48,0x46,0x42,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x7c,0x44,0x49,0x49,0x53,0x4d,0x49,0x45,0x45,0x45,0x69,0x51,0x41,0x41,0x41,0x88,0x88,0x88,0x8,0x8,0xfe,0x8,0x8,0x48,0x28,0x28,0x8,0x8,0x8,0x28,0x10,
++0x10,0x10,0x10,0x13,0xfc,0x24,0x24,0x24,0x25,0x48,0x28,0x10,0x28,0x47,0x84,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x10,0x10,0x27,0x20,0x43,0xfa,0x13,0x22,0x43,0xfa,0x40,0x7,0x1a,0xe1,0x40,0x0,0x50,0x48,0xfc,0x40,0xf8,0x48,0xf8,0x48,0xf8,0x48,0x10,0xfe,0x10,0x10,0x10,0x20,
++0x0,0x8,0x7c,0x49,0x49,0x4b,0x4d,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0x1,0x1,0x88,0x88,0x88,0x8,0x8,0xfe,0x8,0x8,0x48,0x28,0x28,0x8,0x8,0x8,0x28,0x10,
++0x1,0xf,0x79,0x4b,0x4a,0x4b,0x4a,0x4b,0x49,0x49,0x4a,0x7c,0x4a,0x2,0x3,0x0,0x10,0xfe,0x10,0xf8,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x44,0x64,0x94,0x4,0xe4,0xc,
++0x7,0x8,0x7f,0x4a,0x4b,0x4a,0x4b,0x4a,0x4b,0x49,0x49,0x7f,0x48,0x0,0x1,0xe,0xfc,0x80,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x40,0x3e,0xc0,0xa0,0x42,0xb2,0xe,
++0x1,0x40,0x2f,0x0,0x1,0x1,0xe2,0x27,0x20,0x20,0x20,0x25,0x2a,0x30,0x23,0xc,0x0,0x84,0xfe,0x80,0x0,0x10,0x10,0xe0,0x48,0x48,0x90,0x20,0x50,0x88,0x4,0x4,
++0x0,0x4,0xfe,0x4,0x4,0x5,0x7e,0x44,0x40,0x40,0x40,0x40,0x4c,0x70,0x41,0x6,0x80,0x80,0x80,0x84,0xfe,0x8,0x88,0x88,0x88,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x10,0x17,0x14,0xfc,0x17,0x34,0x3c,0x57,0x54,0x95,0x15,0x16,0x14,0x10,0x10,0x0,0x84,0xfe,0x88,0x88,0xa8,0xa8,0xbe,0x88,0x10,0x18,0xa8,0xaa,0x4a,0x86,0x0,
++0x10,0x13,0x10,0x1c,0x21,0x21,0x7d,0x91,0x11,0x7c,0x10,0x10,0x14,0x18,0x10,0x0,0x4,0xfe,0x20,0x28,0x3c,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x8,0x4,0x7f,0x1,0x1,0x3f,0x1,0x1,0x7f,0x0,0x3f,0x24,0x24,0x24,0xff,0x0,0x20,0x48,0xfc,0x0,0x10,0xf8,0x0,0x8,0xfc,0x0,0xf8,0x48,0x48,0x48,0xfe,0x0,
++0x41,0x2f,0x29,0x9,0x8f,0x49,0x49,0x1f,0x28,0x28,0xca,0x4b,0x4d,0x48,0x40,0x41,0x4,0xfe,0x10,0x10,0x50,0x50,0x54,0x7e,0x10,0x10,0x20,0x30,0x52,0x52,0x8e,0x0,
++0x0,0x3f,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x10,0xf8,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x8,0x8,0x8,0xff,0x8,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x8,0xf,0x8,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0xe0,0x20,0x20,0x20,0x20,0xe0,0x20,
++0x10,0x10,0x11,0x10,0xfc,0x10,0x30,0x3b,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x0,0x8,0xfc,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x11,0x11,0x11,0x11,0xff,0x11,0x39,0x35,0x51,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x8,0x8,0x8,0x8,0xfe,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x12,0x1f,0x28,0x45,0x80,0x3f,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x40,0x44,0x7e,0xa0,0x10,0x0,0xf8,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x3d,0x24,0x24,0x24,0x3c,0x24,0x27,0x24,0x3c,0x24,0x24,0x24,0x44,0x94,0x8,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x8,0x8,0x9,0x7e,0x8,0x8,0xfe,0x9,0x28,0x28,0x2e,0x28,0x28,0x38,0x48,0x87,0x0,0x8,0xfc,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x6,0xfc,
++0x0,0x0,0x7f,0x40,0x7f,0x40,0x5f,0x51,0x51,0x5f,0x90,0x2,0x29,0x28,0x48,0x7,0x50,0x48,0xfc,0x40,0xc0,0x48,0x48,0x50,0x22,0x52,0x8e,0x0,0x90,0xac,0x24,0xe0,
++0x8,0x1d,0xf0,0x10,0x10,0xfc,0x10,0x3b,0x34,0x50,0x50,0x90,0x10,0x10,0x10,0x10,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x7c,0x4,0x8,0xff,0x24,0x24,0x3c,0x24,0x3c,0x24,0x24,0xfe,0x4,0x5,0x6,0x40,0x40,0x40,0x84,0xfe,0x8,0x88,0x88,0x50,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x10,0xfe,0x44,0x29,0xfe,0x1,0x7c,0x44,0x7d,0x44,0x7c,0x10,0xfe,0x10,0x10,0x11,0x40,0x78,0xd0,0x20,0x58,0x86,0xf8,0x20,0xfc,0x0,0xf8,0x88,0xa8,0xa8,0x58,0x84,
++0x0,0x7f,0x40,0x40,0x48,0x44,0x42,0x41,0x42,0x44,0x48,0x50,0x40,0x40,0x40,0x40,0x4,0xfe,0x4,0x4,0x24,0x64,0x84,0x4,0x84,0x64,0x34,0x14,0x4,0x4,0x14,0x8,
++0x1,0x7f,0x41,0x41,0x63,0x63,0x55,0x55,0x49,0x55,0x53,0x63,0x41,0x41,0x45,0x42,0x4,0x84,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x10,0x13,0x12,0x1e,0x23,0x22,0x7e,0x92,0x12,0x7e,0x12,0x13,0x16,0x1a,0x12,0x2,0x4,0xfe,0x4,0x4,0xc,0x8c,0x54,0x24,0x24,0x54,0x8c,0xc,0x4,0x4,0x14,0x8,
++0x20,0x22,0x3f,0x48,0x48,0x88,0x9,0xff,0x8,0x2a,0x2a,0x2a,0x2a,0x3e,0x23,0x2,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0xa0,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x4,0x3e,0x25,0x24,0x24,0x3c,0x24,0x24,0x24,0x3c,0x24,0x24,0x24,0x27,0x44,0x8c,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x20,0x23,0x22,0x4a,0x4b,0xf2,0x12,0x22,0x42,0xfa,0x42,0x3,0x1a,0xe2,0x42,0x2,0x4,0xfe,0x4,0x4,0xc,0x8c,0x54,0x24,0x24,0x54,0x8c,0xc,0x4,0x4,0x14,0x8,
++0x1,0x41,0x41,0x7f,0x0,0x7f,0x40,0x48,0x44,0x42,0x41,0x42,0x44,0x48,0x50,0x40,0x0,0x4,0x4,0xfc,0x4,0xfe,0x4,0x24,0x44,0x84,0x4,0x84,0x44,0x34,0x14,0x8,
++0x41,0x31,0x17,0x81,0x61,0x2f,0x1,0x12,0x27,0xea,0x22,0x23,0x22,0x22,0x21,0x20,0x10,0x10,0xfc,0x10,0x14,0xfe,0x20,0x10,0xfe,0x14,0x10,0xf0,0x4,0x4,0xfc,0x0,
++0x10,0x10,0x10,0x11,0xfc,0x10,0x30,0x38,0x54,0x50,0x90,0x10,0x10,0x13,0x10,0x10,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x20,0x3e,0x50,0x81,0x7f,0x0,0x1f,0x10,0x1f,0x0,0x7f,0x40,0x4f,0x48,0x4f,0x40,0x40,0x7c,0x90,0x0,0xfc,0x0,0xf0,0x10,0xf0,0x4,0xfe,0x4,0xe4,0x24,0xe4,0xc,
++0x2,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x2,0xff,0x4,0x9,0x11,0x2f,0xc1,0x1,0x1,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x40,0x20,0x50,0xee,0x4,0x0,0x0,
++0x2,0x1,0xff,0x0,0x1f,0x10,0x10,0x1f,0x0,0x7f,0x40,0x4f,0x48,0x48,0x4f,0x40,0x0,0x4,0xfe,0x0,0xf0,0x10,0x10,0xf0,0x4,0xfe,0x4,0xe4,0x24,0x24,0xe4,0xc,
++0x1,0x7f,0x8,0xf,0x0,0x7f,0x48,0x8f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x8,0xfc,0x20,0xe0,0x0,0xfe,0x22,0xe4,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x30,
++0x10,0xc,0x4,0x7f,0x1,0x1,0x1,0x3f,0x1,0x1,0x1,0xff,0x20,0x24,0x22,0x40,0x10,0x30,0x40,0xfc,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x10,0x88,0x44,0x4,
++0x11,0x10,0x92,0x55,0x38,0x10,0xfe,0x11,0x38,0x34,0x54,0x53,0x90,0x12,0x12,0x14,0x4,0x88,0x50,0xfc,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0xa4,0x92,0x2,
++0x10,0x10,0x1f,0x10,0xfb,0x12,0x12,0x1b,0x30,0xd7,0x14,0x15,0x15,0x15,0x54,0x24,0x80,0x44,0xfe,0x0,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x4,0xf4,0x14,0xf4,0x4,0xc,
++0x10,0x10,0x1f,0x20,0x21,0x7d,0x91,0x11,0x7c,0x13,0x12,0x12,0x16,0x1a,0x12,0x2,0x40,0x24,0xfe,0x0,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x4,0xf4,0x94,0xf4,0x4,0xc,
++0x8,0x1c,0xf3,0x10,0x11,0xfd,0x11,0x39,0x34,0x53,0x52,0x92,0x12,0x12,0x12,0x12,0x40,0x24,0xfe,0x0,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x4,0xf4,0x94,0xf4,0x4,0xc,
++0x1,0x11,0x11,0x1f,0x11,0x21,0x1,0xff,0x0,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x7f,0x0,0x1f,0x10,0x10,0x1f,0x0,0xff,0x0,0x1f,0x10,0x10,0x1f,0x10,0x0,0x0,0xfc,0x10,0x90,0x90,0x90,0x90,0x14,0xfe,0x10,0x90,0x90,0x90,0x90,0x10,0x50,0x20,
++0x2,0xff,0x2,0x7a,0x4a,0x4a,0x7b,0x2,0xff,0x2,0x7a,0x4a,0x4a,0x7a,0x4a,0x5,0x20,0x20,0x20,0x40,0x7c,0x84,0x28,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x8e,0x4,
++0x10,0x14,0x12,0x10,0xfc,0x15,0x16,0x1c,0x34,0xd7,0x15,0x15,0x15,0x15,0x55,0x24,0x0,0x4,0xfe,0x44,0xf4,0x14,0xa4,0x44,0xa4,0x1c,0xf4,0x14,0x14,0xf4,0x14,0x8,
++0x4,0x4,0x4,0x4,0x4,0xff,0x4,0x4,0x4,0x2,0x2,0x1,0x2,0xc,0x70,0x0,0x0,0x80,0x40,0x4,0xfe,0x0,0x0,0x20,0x30,0x40,0x80,0x0,0x80,0x44,0x34,0xc,
++0x10,0x10,0x29,0x29,0x25,0x43,0x89,0x7d,0x1,0x7d,0x44,0x44,0x47,0x44,0x7c,0x40,0x20,0x48,0xfc,0x8,0x48,0x28,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x4,0x3e,0x24,0x24,0x24,0x3d,0x26,0x24,0x24,0x3d,0x26,0x24,0x24,0x44,0x94,0x8,0x40,0x40,0x7c,0x84,0x88,0x50,0x20,0x50,0x8e,0x4,0xf8,0x88,0x88,0x88,0xf8,0x88,
++0x1,0x0,0x1f,0x12,0x92,0x53,0x54,0x18,0x37,0x50,0xd0,0x13,0x24,0x24,0x44,0x3,0x0,0x84,0xfe,0x0,0x10,0xf8,0x0,0x0,0xf0,0x20,0xc0,0x0,0x0,0x2,0x2,0xfe,
++0x8,0x4,0x7f,0x44,0xbf,0x4,0x3f,0x4,0x7f,0x0,0x3f,0x20,0x20,0x20,0x3f,0x20,0x4,0x4,0xe4,0x54,0x94,0x14,0x94,0x14,0xd4,0x94,0xd4,0x94,0x84,0x84,0x94,0x88,
++0x8,0x8,0x7f,0x8,0xf,0x1,0x3f,0x21,0x21,0x3f,0x1,0xff,0x1,0x1,0x1,0x1,0x20,0x28,0xfc,0x20,0xe0,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x4,0xff,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x4,0xf,0x11,0x22,0x54,0x10,0x1f,0x0,0x44,0xfe,0x40,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x4,0x84,0x44,0x4,0xd4,0x8,
++0x11,0x11,0x11,0x12,0xff,0x14,0x38,0x34,0x51,0x52,0x97,0x1a,0x12,0x12,0x13,0x12,0x0,0x0,0xf8,0x8,0x10,0xa0,0x40,0xa0,0x10,0xe,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x14,0x7e,0x55,0x56,0x55,0x54,0x7c,0x51,0x11,0x15,0x1d,0xe5,0x41,0x1,0x20,0x20,0x50,0x88,0x6,0x4,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x20,0x1b,0x4a,0x42,0x47,0x4c,0x52,0x41,0x46,0x58,0x60,0x4f,0x48,0x48,0x4f,0x40,0x4,0xfe,0x4,0x4,0xe4,0x44,0x84,0x4,0xc4,0x3c,0x14,0xe4,0x24,0x24,0xf4,0x8,
++0x0,0x7f,0x48,0x53,0x52,0x62,0x53,0x48,0x4f,0x4d,0x6c,0x57,0x44,0x44,0x44,0x44,0x8,0xfc,0x0,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x14,0xa4,0xfc,0x44,0x44,0x54,0x8,
++0x10,0x10,0x1c,0x11,0x21,0x3e,0x50,0x90,0x7c,0x13,0x11,0x11,0x15,0x19,0x11,0x1,0x80,0x80,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x1,0x2,0x4,0x8,0x11,0x21,0xc1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x80,0x40,0x20,0x10,0xe,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x4,0x4,0x7,0x8,0x14,0x22,0x1,0x6,0x18,0xe0,0xf,0x8,0x8,0x8,0xf,0x8,0x0,0x0,0xf0,0x10,0x20,0x40,0x80,0x60,0x1e,0x4,0xf0,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x10,0x20,0x20,0x49,0xfa,0x14,0x23,0x40,0xf8,0x43,0x2,0x1a,0xe2,0x43,0x2,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,0xf8,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x39,0x35,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x44,0x48,0x30,0x20,0x10,0x4e,0x84,0x0,
++0x0,0x7d,0x45,0x45,0x45,0x45,0x7d,0x11,0x51,0x5d,0x51,0x51,0x51,0x5d,0xe1,0x41,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x44,0x48,0x30,0x20,0x10,0x4e,0x84,0x0,
++0x10,0x10,0x14,0xfe,0x11,0x7c,0x10,0xfe,0x13,0x38,0x34,0x54,0x51,0x91,0x12,0x10,0x88,0x88,0x88,0x88,0xfc,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x8,0x8,0x8,0x8,
++0x0,0xff,0x1,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x29,0x5,0x2,0x5,0x18,0xe0,0x4,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x0,0x0,0x80,0x70,0xe,
++0x1,0x0,0x3f,0x20,0x20,0x2f,0x20,0x3f,0x20,0x2f,0x20,0x21,0x41,0x42,0x84,0x18,0x0,0x84,0xfe,0x80,0x88,0xfc,0x88,0xfe,0x88,0xf8,0x88,0x40,0x40,0x30,0xe,0x4,
++0x4,0x7f,0x1,0x3f,0x1,0xff,0x28,0x42,0x3f,0x1,0x1f,0x1,0xff,0x2,0xc,0x30,0x48,0xfc,0x0,0xf8,0x0,0xfe,0x28,0x84,0xf8,0x0,0xf0,0x4,0xfe,0x80,0x78,0x10,
++0x20,0x2f,0x20,0x27,0xfc,0x24,0x27,0x24,0x24,0x27,0x3c,0xe3,0x40,0x1,0x6,0x18,0x4,0xfe,0x40,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x40,0x80,0x60,0x1e,0x4,
++0x2,0xff,0x24,0x24,0x3c,0x24,0x24,0x3d,0x24,0x24,0x24,0x3e,0xe4,0x44,0x7,0x4,0x20,0x20,0x20,0x20,0xa4,0xac,0xb0,0x20,0x20,0x20,0x20,0x50,0x50,0x8e,0x4,0x0,
++0x10,0x1f,0x10,0x13,0xfe,0x12,0x33,0x3a,0x52,0x53,0x92,0x11,0x10,0x11,0x12,0x1c,0x4,0xfe,0x48,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x48,0x40,0x80,0x60,0x1e,0x4,
++0x0,0x0,0x7f,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,
++0x0,0x0,0x8,0xfd,0x11,0x12,0x14,0x11,0x11,0x11,0x10,0x1c,0xf0,0x41,0x2,0xc,0x80,0x80,0x80,0x8,0xfc,0x10,0x10,0x10,0x20,0x20,0xc0,0x40,0xa0,0x10,0xe,0x4,
++0x0,0x0,0x8,0xfc,0x10,0x17,0x10,0x10,0x10,0x10,0x1d,0xf1,0x41,0x2,0x4,0x8,0x80,0x80,0x80,0x80,0x84,0xfe,0x84,0x84,0x84,0x84,0x4,0x4,0x4,0x44,0x28,0x10,
++0x8,0x8,0x7f,0x8,0x8,0xff,0x4,0x9,0x11,0x21,0xc9,0x9,0x11,0x21,0x5,0x2,0x20,0x28,0xfc,0x20,0x24,0xfe,0x40,0x20,0x10,0xe,0x24,0x90,0x48,0x8,0x0,0x0,
++0x2,0x2,0xff,0x5,0x5,0x9,0x32,0xc8,0x8,0x3f,0x8,0x8,0xff,0x8,0x18,0x20,0x20,0x14,0xfe,0x0,0x64,0x84,0xfc,0x20,0x20,0xf8,0x20,0x24,0xfe,0x20,0x18,0x8,
++0x12,0x12,0x12,0x22,0x2f,0x62,0xa2,0x22,0x22,0x3f,0x20,0x22,0x22,0x24,0x28,0x20,0x10,0x10,0x10,0x10,0xfc,0x10,0x10,0x10,0x14,0xfe,0x0,0x10,0x8,0xc,0x4,0x0,
++0x8,0x12,0x3f,0x22,0x3e,0x22,0x3e,0x22,0x22,0xfe,0x6,0xa,0x12,0x22,0x4a,0x4,0x0,0x4,0xfe,0x4,0x4,0xfc,0x80,0x84,0xfe,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x0,0x0,0x4,0x4,0x8,0x8,0x11,0x21,0xc2,0x2,0x4,0x8,0x10,0x1f,0x0,0x0,0x0,0x80,0x80,0x40,0x40,0x20,0x10,0xe,0x4,0x0,0x0,0x40,0x20,0xf0,0x10,0x0,
++0x2,0x1,0x7f,0x40,0x80,0xf,0x8,0x8,0xf,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0xfe,0x2,0x24,0xf0,0x20,0x20,0xe0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x0,0x7f,0x0,0x0,0x0,0x3f,0x20,0x20,0x40,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0xe0,0x20,0x0,0x8,0xfc,0x8,0x8,0x8,0x90,0x50,0x20,
++0x0,0x9,0xfd,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x1d,0xf1,0x42,0x2,0x4,0x8,0x8,0xfc,0x8,0x8,0x8,0x8,0x48,0x28,0x28,0x8,0x8,0x8,0xa,0xa,0x6,0x0,
++0x0,0x3f,0x1,0x1,0xff,0x0,0x1,0x1,0x7d,0x5,0x9,0x11,0x21,0xc1,0x5,0x2,0x10,0xf8,0x0,0x4,0xfe,0x0,0x8,0x18,0xa0,0x40,0x20,0x10,0xe,0x4,0x0,0x0,
++0x11,0x11,0x11,0x11,0xfb,0x11,0x11,0x19,0x31,0xdf,0x10,0x11,0x11,0x12,0x54,0x20,0x10,0x10,0x10,0x10,0xfc,0x10,0x10,0x10,0x14,0xfe,0x0,0x10,0x8,0xc,0x4,0x0,
++0x0,0x3f,0x1,0x1,0xff,0x0,0x1f,0x10,0x11,0x11,0x11,0x11,0x11,0x2,0xc,0x30,0x10,0xf8,0x0,0x4,0xfe,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x8,0x8,0x8,0x8,0x7f,0x8,0x8,0x8,0x8,0x8,0xff,0x0,0x4,0xc,0x10,0x20,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,0x40,0x30,0x18,0x8,
++0x10,0x10,0x10,0x1c,0x21,0x22,0x7c,0x90,0x10,0x7c,0x11,0x10,0x14,0x18,0x10,0x0,0x80,0x80,0x84,0xfe,0x4,0x4,0x44,0x44,0x84,0xa4,0xf4,0x14,0x4,0x4,0x28,0x10,
++0x8,0x8,0x8,0xf,0x10,0x22,0x42,0x84,0x4,0x8,0x10,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x84,0x44,0xc4,0x44,0x4,0x28,0x10,
++0x2,0x42,0x32,0x13,0x84,0x68,0x20,0x1,0x9,0x12,0xe4,0x27,0x20,0x20,0x20,0x20,0x0,0x0,0x4,0xfe,0x4,0x84,0x84,0x4,0x4,0x44,0x24,0xe4,0x24,0x4,0x28,0x10,
++0x8,0x8,0xff,0x8,0x10,0x1f,0x20,0x20,0x5f,0x90,0x10,0x10,0x1f,0x10,0x0,0x0,0x20,0x24,0xfe,0x20,0x8,0xfc,0x8,0x88,0xc8,0x88,0x88,0x88,0x88,0x8,0x50,0x20,
++0x4,0x44,0x28,0x11,0x29,0x4a,0x8,0x9,0x19,0x29,0x49,0x89,0x9,0x8,0x50,0x20,0x80,0x80,0x84,0xfe,0x4,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x4,0x4,0x28,0x10,
++0x10,0x13,0x12,0x12,0xfe,0x13,0x12,0x12,0x12,0x12,0x16,0x1a,0xe4,0x44,0x8,0x0,0xc,0xf0,0x0,0x0,0x4,0xfe,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x30,0x38,0x54,0x50,0x11,0x11,0x10,0x10,0x10,0x10,0x80,0x80,0x84,0xfe,0x4,0x4,0x44,0x44,0x84,0xa4,0x14,0xf4,0x14,0x4,0x28,0x10,
++0x4,0x7e,0x44,0x54,0x55,0x56,0x54,0x54,0x54,0x54,0x55,0x55,0x10,0x28,0x44,0x84,0x80,0x80,0x84,0xfe,0x4,0x4,0x44,0x44,0x84,0xa4,0x14,0xf4,0x14,0x4,0x28,0x10,
++0x20,0x20,0x22,0x3f,0x42,0x83,0x7a,0x4a,0x4a,0x4b,0x4a,0x7a,0x42,0xa,0x4,0x0,0x20,0x20,0x7c,0x44,0x88,0x50,0x20,0x50,0x9e,0x22,0x44,0xa8,0x10,0x20,0x40,0x80,
++0x1,0xff,0x1,0x3f,0x20,0x3f,0x1,0x3f,0x8,0x4,0xff,0x1,0x3f,0x1,0x1,0x1,0x4,0xfe,0x0,0xf8,0x8,0xf8,0x0,0xf8,0x20,0x44,0xfe,0x0,0xf8,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x10,0x10,0xff,0x12,0x12,0x22,0x22,0x14,0x8,0x14,0x22,0x40,0x40,0x44,0xfe,0x40,0x20,0x24,0xfe,0x20,0x24,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x0,0x8,0x7c,0x48,0x4f,0x48,0x48,0x48,0x4b,0x4a,0x4a,0x7a,0x4a,0x2,0x3,0x2,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x1f,0x28,0x45,0x90,0x13,0x12,0xfe,0x12,0x1a,0x32,0xd2,0x12,0x12,0x53,0x20,0x40,0x7e,0xa0,0x10,0x0,0xfc,0x20,0x28,0xfc,0xa8,0xa8,0xa8,0xb8,0x20,0xfe,0x0,
++0x8,0x8,0x8,0x10,0x1f,0x30,0x50,0x90,0x13,0x12,0x12,0x12,0x12,0x12,0x13,0x12,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x30,0x10,0x87,0x60,0x20,0x8,0x13,0x22,0xe2,0x22,0x22,0x22,0x23,0x22,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x7c,0x7,0xa,0x12,0x12,0x16,0x1a,0x32,0xd2,0x12,0x12,0x14,0x15,0x58,0x20,0x8,0x3c,0xc0,0x10,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0xa8,0xee,0x24,0x0,
++0x10,0x10,0x10,0x10,0x13,0xfc,0x24,0x24,0x45,0x25,0x19,0x11,0x29,0x45,0x81,0x1,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x14,0xfe,0x11,0x7c,0x0,0x7d,0x44,0x44,0x7c,0x0,0x44,0x28,0xfe,0x40,0x3,0x20,0x20,0x24,0xfe,0x20,0x28,0xfc,0x88,0x88,0x88,0x50,0x20,0x50,0x48,0x8e,0x4,
++0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1f,0x10,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x1,0x1,0x1f,0x11,0x11,0x1f,0x11,0x1,0x3f,0x0,0x3f,0x24,0x24,0x24,0xff,0x0,0x0,0x10,0xf8,0x10,0x10,0xf0,0x0,0x8,0xfc,0x4,0xf8,0x48,0x48,0x48,0xfe,0x0,
++0x1f,0x10,0x1f,0x11,0x11,0x7f,0x40,0x9f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0xfe,0x2,0xf4,0x10,0xf0,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x8,0x8,0x10,0x21,0x41,0x2,0x4,0x8,0x30,0xc0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x40,0x30,0x18,0x8,0x0,0x80,0x40,0x30,0xe,0x4,0xf0,0x10,0x10,0x10,0xf0,0x10,
++0x4,0x3e,0x24,0x24,0x24,0x3d,0x26,0x25,0x24,0x3c,0x24,0x24,0x24,0x24,0x4d,0x86,0x8,0xfc,0x88,0x88,0x88,0xe,0x0,0xfc,0x84,0x88,0x48,0x70,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x10,0x14,0xfe,0x11,0x12,0x10,0x7c,0x44,0x44,0x44,0x44,0x7c,0x44,0x3,0x40,0x40,0x40,0x44,0xfe,0x8,0x88,0x88,0x88,0x88,0x50,0x20,0x20,0x50,0x8e,0x4,
++0x4,0x7f,0x40,0x40,0x5e,0x52,0x52,0x52,0x5a,0x54,0x50,0x52,0x54,0x58,0x80,0x1,0x4,0xfe,0x20,0x44,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0xa4,0x30,0x4c,0x86,0x2,
++0x0,0x7f,0x41,0x41,0x5f,0x41,0x41,0x4f,0x48,0x48,0x48,0x4f,0x48,0x40,0x7f,0x40,0x4,0xfe,0x4,0x24,0xf4,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x24,0x4,0xfc,0x4,
++0x2,0x1,0x3f,0x20,0x3f,0x22,0x22,0x27,0x24,0x2f,0x34,0x27,0x24,0x24,0x47,0x84,0x0,0x4,0xfe,0x4,0xfc,0x80,0x48,0xfc,0x40,0xf8,0x40,0xf8,0x40,0x48,0xfc,0x0,
++0x1,0x7e,0x8,0x8,0x9,0xff,0x8,0x8,0x9,0x7f,0x41,0x41,0x41,0x41,0x7f,0x41,0x84,0x4,0x4,0x24,0x24,0xa4,0x24,0x24,0x24,0xa4,0x24,0x24,0x4,0x4,0x14,0x8,
++0x0,0x1,0x3e,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x42,0x83,0x0,0x38,0xc0,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0x10,0x10,0x88,0x68,0xa6,0x4,0x0,
++0x0,0x3f,0x20,0x20,0x20,0x3f,0x24,0x4,0x7f,0x44,0x44,0x4a,0x51,0x40,0x41,0x40,0x84,0xc4,0x84,0x94,0x94,0x94,0x94,0x14,0xd4,0x54,0x54,0x54,0x44,0x44,0x54,0x88,
++0x1,0x7f,0x40,0x9f,0x2,0xf,0xa,0x9,0x8,0x7f,0x4,0xf,0x32,0xc2,0x4,0x18,0x0,0xfe,0x22,0xf4,0x0,0xe0,0x20,0x20,0xa8,0xfc,0x40,0xe0,0x5e,0x44,0x40,0xc0,
++0x10,0x10,0x10,0x17,0xfc,0x10,0x14,0x1f,0x30,0xd0,0x17,0x10,0x10,0x10,0x5f,0x20,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x41,0x21,0x21,0x7,0xf1,0x11,0x2f,0x71,0xa1,0x37,0x21,0x21,0x21,0x2f,0x24,0x20,0x10,0x10,0x10,0xd0,0x10,0x10,0xf8,0x16,0x12,0xd0,0x10,0x10,0xf0,0x10,0x10,0x10,
++0x0,0x1f,0x1,0x1,0xff,0x1,0x9,0x9,0x79,0x9,0x9,0x39,0xc9,0x1,0x1,0x1,0x70,0x80,0x0,0x4,0xfe,0x0,0x24,0x2c,0x30,0x20,0x22,0x22,0x1e,0x0,0x0,0x0,
++0x10,0x11,0x11,0xfd,0x11,0x15,0x18,0x30,0xd3,0x10,0x10,0x10,0x11,0x11,0x52,0x24,0x8,0xfc,0x8,0x8,0x8,0xf8,0x80,0x84,0xfe,0x84,0x84,0x84,0x4,0x4,0x14,0x8,
++0x10,0x17,0x12,0x11,0x58,0x54,0x50,0x93,0x1c,0x10,0x17,0x10,0x10,0x10,0x1f,0x10,0x8,0xfc,0x8,0x10,0xa0,0x40,0xb0,0xe,0x44,0x40,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x13,0x12,0xfc,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x11,0x40,0x20,0xfe,0x2,0x4,0xfc,0x4,0x4,0xfc,0x0,0xfc,0x4,0x4,0x4,0xfc,0x0,
++0x10,0x8,0x4,0x4,0x7f,0x1,0x1,0x1,0xff,0x1,0x2,0x2,0x4,0x8,0x30,0xc0,0x10,0x18,0x20,0x48,0xfc,0x0,0x0,0x4,0xfe,0x0,0x80,0x80,0x40,0x30,0xe,0x4,
++0x2,0x1,0x7f,0x40,0x80,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0x0,0xfe,0x2,0x14,0xf8,0x10,0x10,0xf0,0x0,0x10,0xf8,0x10,0x10,0xf0,0x0,
++0x0,0x7f,0x40,0x84,0x3e,0x0,0x2,0x7f,0x14,0x14,0x14,0x14,0x24,0x24,0x43,0x80,0x0,0xfe,0x2,0xc,0x8,0x8,0xfe,0x8,0x48,0x28,0x8,0x28,0x12,0x2,0xfe,0x0,
++0x0,0x1,0x7d,0x5,0x45,0x29,0x29,0x11,0x11,0x29,0x25,0x44,0x80,0x1,0x6,0x18,0x8,0xfc,0x8,0x28,0x28,0x28,0x28,0x48,0x48,0x48,0x68,0xa0,0xa0,0x22,0x22,0x1e,
++0x10,0x1f,0x28,0x45,0x1,0x7f,0x40,0x9f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x1f,0x10,0x40,0x7c,0x90,0x8,0x0,0xfe,0x2,0xf4,0x10,0xf0,0x0,0xf0,0x10,0x10,0xf0,0x0,
++0x20,0x20,0x23,0x3a,0x4c,0x51,0x81,0x21,0x21,0x21,0x21,0x25,0x29,0x31,0x21,0x1,0x80,0x40,0xfe,0x2,0x4,0xf8,0x8,0x8,0xf8,0x0,0xf8,0x8,0x8,0x8,0xf8,0x0,
++0x20,0x23,0x3c,0x51,0x91,0x11,0xfe,0x10,0x55,0x56,0x54,0x54,0x54,0x7c,0x44,0x0,0x88,0xfe,0x88,0xdc,0x54,0xdc,0x90,0xfc,0x90,0xfc,0x90,0xfc,0x90,0x94,0xfe,0x80,
++0x10,0x13,0x12,0x1f,0x5a,0x57,0x50,0x93,0x12,0x12,0x12,0x12,0x12,0x10,0x11,0x16,0x8,0xfc,0x48,0xfe,0x48,0xf8,0x0,0xf8,0x8,0x48,0x48,0x48,0x48,0xb0,0xc,0x4,
++0x1,0x4f,0x31,0x17,0x84,0x67,0x22,0x3,0x16,0x2b,0xc2,0x43,0x42,0x42,0x43,0x42,0x10,0xfe,0x10,0xbc,0xa4,0xbc,0x20,0xfc,0x20,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x0,0x1f,0x11,0x11,0xff,0x11,0x1f,0x0,0x1f,0x10,0x11,0x11,0x11,0x2,0xc,0x30,0x10,0xf8,0x10,0x14,0xfe,0x10,0xf0,0x0,0xf0,0x10,0x10,0x10,0x10,0x60,0x18,0x8,
++0x1,0x21,0x11,0x9,0x9,0x1,0xff,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x0,0x8,0xc,0x10,0x20,0x4,0xfe,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x1,0x0,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x84,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x40,0x29,0x27,0x2,0x6,0xea,0x22,0x26,0x2a,0x32,0x22,0x2b,0x24,0x50,0x8f,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0xf8,0x20,0x20,0x20,0x28,0xfc,0x0,0x6,0xfc,0x0,
++0x0,0x11,0xfb,0x22,0x22,0x23,0xfa,0x22,0x23,0x22,0x20,0x39,0xe1,0x42,0x4,0x8,0x80,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x80,0xd0,0x68,0x78,0x42,0x42,0x3e,
++0x10,0x10,0x11,0x11,0x7d,0x11,0x15,0xff,0x11,0x11,0x10,0x28,0x24,0x41,0x82,0x4,0x0,0x8,0xfc,0x28,0x28,0x28,0x28,0x48,0x48,0x48,0x40,0x90,0x90,0x12,0x12,0xe,
++0x1,0x1,0x1,0x7f,0x1,0x1,0xff,0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x8,0xfc,0x0,0x4,0xfe,0x0,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x4,0xfe,0x11,0x10,0x20,0x23,0x7c,0xa4,0x24,0x25,0x24,0x24,0x3c,0x27,0x0,0x20,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x4,0x4,0x25,0x24,0x24,0x24,0x24,0x25,0x24,0x24,0x24,0x4,0x8,0x13,0x60,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x8,0x8,0x1f,0x10,0x20,0x7f,0xa1,0x21,0x3f,0x21,0x21,0x3f,0x21,0x1,0x1,0x0,0x0,0x0,0xe0,0x40,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0xa,0x2,0x2,0xfe,
++0x20,0x1b,0x49,0x41,0x4f,0x41,0x41,0x5f,0x41,0x41,0x4f,0x41,0x41,0x5f,0x40,0x40,0x4,0xfe,0x4,0x44,0xe4,0x4,0x24,0xf4,0x4,0x44,0xe4,0x4,0x24,0xf4,0x4,0xc,
++0x10,0x10,0x14,0xfe,0x21,0x28,0x48,0x7e,0x8,0x8,0x8,0xfe,0x8,0x8,0x9,0xa,0x40,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0x48,0x48,0x48,0x88,0x8a,0x8a,0x6,0x0,
++0x2,0x4,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x22,0x2,0x4,0x4,0x8,0x10,0x60,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x88,0x80,0x90,0xa8,0xba,0x82,0x7e,
++0x1,0x41,0x21,0x22,0x4,0xb,0xe2,0x22,0x22,0x22,0x22,0x26,0x2a,0x32,0x24,0x8,0x0,0x0,0xf0,0x20,0x44,0xfe,0x0,0xf8,0x88,0x88,0xa8,0x90,0x82,0x82,0x7e,0x0,
++0x0,0x3e,0x2,0x24,0x18,0x10,0x20,0x4f,0x81,0x1,0x3f,0x1,0x2,0x4,0x18,0x60,0x80,0x90,0xa0,0x48,0x50,0x20,0x10,0xee,0x4,0x10,0xf8,0x0,0xc0,0x30,0x18,0x8,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x37,0x38,0x54,0x50,0x93,0x10,0x10,0x10,0x1f,0x10,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x13,0x12,0x12,0xfe,0x13,0x32,0x3a,0x56,0x53,0x92,0x12,0x12,0x12,0x13,0x10,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x4,0xfe,0x0,
++0x4,0x7e,0x44,0x45,0x46,0x7d,0x51,0x11,0x51,0x5d,0x51,0x51,0x5d,0xf2,0x44,0x8,0x80,0x80,0xf8,0x10,0x24,0xfe,0x8,0x7c,0x48,0x48,0x68,0x50,0x42,0x42,0x3e,0x0,
++0x1,0x1,0x3f,0x21,0x3f,0x1,0xff,0x0,0x1f,0x10,0x11,0x11,0x11,0x2,0xc,0x30,0x0,0x8,0xfc,0x8,0xf8,0x0,0xfe,0x10,0xf8,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x8,0x8,0x14,0x22,0x41,0xbe,0x0,0x2,0x7f,0x8,0x8,0x10,0x22,0x7f,0x1,0x0,0x4,0x4,0x4,0x24,0xa4,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x20,0x23,0x22,0xfe,0x43,0x42,0x92,0xff,0x12,0x12,0x1f,0xf2,0x52,0x12,0x13,0x10,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x24,0x2c,0xb0,0x20,0x22,0xa2,0x1e,0x0,
++0x0,0x40,0x37,0x11,0x83,0x64,0x20,0x9,0x13,0x20,0xe1,0x23,0x25,0x29,0x21,0x21,0x80,0x48,0xfc,0x10,0x4c,0x44,0x80,0x10,0xf8,0x80,0x44,0x28,0x10,0x4e,0x84,0x0,
++0x10,0x13,0x12,0x12,0xff,0x12,0x32,0x3b,0x56,0x52,0x93,0x12,0x12,0x12,0x13,0x10,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x24,0x2c,0xb0,0x20,0x22,0xa2,0x1e,0x0,
++0x10,0x11,0x11,0x1d,0x21,0x21,0x7d,0x90,0x13,0xfe,0x12,0x12,0x17,0x1a,0x12,0x2,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x44,0xfe,0x44,0x64,0x9c,0xc,0x4,0x14,0x8,
++0x8,0x4,0xff,0x0,0x3f,0x21,0x21,0x3f,0x0,0x7f,0x2,0x4,0xff,0x4,0x14,0x8,0x0,0x7c,0xc4,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x0,0x7f,0x40,0x5f,0x41,0x41,0x41,0x4f,0x41,0x41,0x41,0x41,0x5f,0x40,0x7f,0x40,0x4,0xfe,0x24,0xf4,0x4,0x4,0x44,0xe4,0x4,0x44,0x24,0x4,0xf4,0x4,0xfc,0x4,
++0x0,0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x1,0xff,0x3,0x5,0x9,0x11,0x61,0x1,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x4,0xfe,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x1,0x7f,0x0,0x1f,0x11,0x1f,0x11,0x1f,0x1,0xff,0x9,0x35,0xc,0x14,0x65,0x6,0x0,0xfc,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x20,0x18,0xa0,0x40,0x3c,0x8,
++0x0,0x40,0x20,0x17,0x0,0x0,0xf1,0x10,0x10,0x10,0x10,0x10,0x10,0x28,0x47,0x0,0x10,0x10,0x10,0xfc,0x10,0x10,0x10,0x90,0x90,0x10,0x10,0x50,0x20,0x6,0xfc,0x0,
++0x0,0x0,0x8,0x7c,0x49,0x49,0x4a,0x4d,0x48,0x48,0x4b,0x7a,0x4a,0x2,0x3,0x2,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0xf4,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x7e,0x44,0x77,0x54,0x54,0xfe,0x82,0x7c,0x44,0x7c,0x45,0x7c,0x44,0x54,0x4b,0x40,0x20,0x4,0xfe,0x20,0x20,0x44,0xfc,0x10,0x24,0x44,0x88,0x10,0x28,0xc6,0x2,
++0x0,0xfc,0x4,0xb,0x10,0x10,0x15,0x1b,0x31,0xd0,0x10,0x11,0x16,0x10,0x51,0x26,0x80,0x40,0x4,0xfe,0x40,0x80,0x8,0xf8,0x10,0x24,0x4c,0x90,0x20,0x50,0x8c,0x4,
++0x2,0x42,0x33,0x14,0x8b,0x62,0x22,0xa,0x1f,0x24,0xe4,0x24,0x27,0x20,0x20,0x20,0x0,0x8,0xfc,0x0,0xf8,0x88,0x48,0x8,0xfe,0x88,0x48,0x8,0xfc,0x8,0x28,0x10,
++0x10,0x1f,0x10,0x2f,0x40,0xbf,0x2,0x3f,0x4,0x8,0x3f,0x2,0xc,0x31,0x46,0x18,0x8,0xfc,0x0,0xf8,0x0,0xf8,0x8,0xe8,0x8,0x88,0x8,0x8,0x88,0x8a,0x6a,0x24,
++0x2,0x1,0x1,0xff,0x1,0x2,0x4,0x8,0x1f,0x2,0x4,0x8,0x31,0x6,0x18,0x60,0x0,0x0,0x4,0xfe,0x0,0x20,0x60,0x80,0x10,0x30,0x40,0xc0,0x20,0x10,0xc,0x4,
++0x2,0x1,0x7f,0x41,0x9f,0x1,0x1f,0x1,0x7f,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0xfe,0x2,0xf4,0x0,0xf0,0x0,0xfc,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x8,0xfc,0x8,0x4f,0x48,0x48,0x49,0x4b,0x7d,0x4,0x4,0x1d,0xe6,0x44,0x15,0xa,0x80,0x40,0x44,0xfe,0x40,0x80,0x8,0xf8,0x10,0x24,0x4c,0x90,0x20,0x58,0x8c,0x4,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x63,0x41,0x41,0x7f,0x41,0x41,0x7f,0x41,0x44,0xc4,0x44,0x44,0xfe,0x44,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x44,0x7c,0x44,
++0x3e,0x4,0xff,0x22,0x3f,0x22,0x3e,0x22,0xff,0x2,0xa,0x29,0x28,0x48,0x7,0x0,0x40,0x44,0x7e,0x84,0x44,0x48,0x28,0x10,0x2e,0xc4,0x0,0x88,0xa4,0x24,0xe0,0x0,
++0x22,0x22,0x22,0x22,0xff,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x22,0x3e,0x22,0x0,0x0,0x7c,0x44,0x44,0xc8,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0xa,0xff,0x8,0x8,0x7f,0x41,0x7f,0x41,0x7f,0x8,0x9,0xff,0x8,0x8,0x8,0x20,0x20,0x24,0xfe,0x20,0x28,0xfc,0x20,0x20,0xfe,0x22,0x22,0xaa,0x24,0x20,0x20,
++0x1,0x1,0x2,0x4,0xa,0x11,0x20,0xdf,0x0,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x80,0x40,0x20,0x90,0x8e,0xe4,0x40,0x90,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x40,0x37,0x10,0x0,0x84,0x44,0x46,0xd,0x14,0x25,0xe6,0x24,0x25,0x24,0x27,0x24,0x0,0xfc,0x8,0x10,0x64,0x44,0x4c,0x54,0xe4,0x54,0x4c,0x44,0x44,0x84,0xfc,0x4,
++0x2,0x1,0x7f,0x44,0x9f,0x4,0x1f,0x4,0x7f,0x4,0xb,0x10,0x20,0xc6,0x1,0x0,0x0,0x0,0xfe,0x42,0xf4,0x40,0xf0,0x40,0xfc,0x40,0x20,0x90,0x4e,0x4,0x80,0x40,
++0x0,0x1f,0x0,0x0,0x41,0x51,0x49,0x45,0x41,0x45,0x49,0x51,0x45,0x42,0x7f,0x40,0x0,0xf0,0x20,0x40,0x84,0x14,0x34,0x44,0x4,0x44,0x34,0x14,0x4,0x4,0xfc,0x4,
++0x0,0x10,0x78,0x57,0x54,0x57,0x54,0x55,0x55,0x55,0x55,0x75,0x45,0x8,0x11,0x20,0x10,0x18,0x14,0xfe,0x10,0xf0,0x14,0xd4,0x54,0x54,0x58,0xd0,0x28,0x4a,0x8a,0x4,
++0x0,0x7f,0x40,0x84,0x8,0x0,0x3f,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x0,0xfe,0x2,0x44,0x20,0x0,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x14,0xfe,0x11,0x7e,0x45,0x7c,0x45,0x7c,0x10,0xfe,0x11,0x10,0x11,0x10,0x20,0x20,0x50,0x88,0x6,0x4,0xdc,0x44,0x54,0xcc,0x44,0xcc,0x54,0x44,0x54,0x88,
++0x10,0x10,0x10,0x17,0xfc,0x17,0x14,0x1d,0x35,0xd5,0x15,0x14,0x19,0x13,0x55,0x20,0x10,0x14,0x10,0xfe,0x10,0xf0,0x14,0xd4,0x58,0x52,0xea,0x6,0x40,0x24,0xa,0xf8,
++0x13,0x12,0x12,0x13,0xfa,0x12,0x13,0x18,0x37,0xd0,0x10,0x1f,0x10,0x10,0x50,0x20,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x40,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x0,0x3f,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,0x0,0xf8,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x10,0x10,0x10,0x17,0x5c,0x57,0x54,0x95,0x15,0x15,0x15,0x14,0x19,0x13,0x15,0x10,0x10,0x14,0x10,0xfe,0x10,0xf0,0x14,0xd4,0x58,0x52,0xea,0x6,0x40,0x24,0xa,0xf8,
++0x13,0x12,0x12,0x13,0x5a,0x56,0x53,0x90,0x17,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x11,0x11,0x11,0x15,0x59,0x51,0x51,0x90,0x13,0x10,0x10,0x2b,0x24,0x44,0x80,0x0,0xfc,0x4,0x4,0xfc,0x4,0x4,0xfc,0x0,0xfe,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x47,0x30,0x10,0x80,0x60,0x20,0xf,0x10,0x20,0xe0,0x20,0x20,0x20,0x20,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x40,0x37,0x10,0x82,0x62,0x22,0x9,0x11,0x20,0xe0,0x20,0x21,0x22,0x24,0x8,0x0,0x8,0xfc,0x8,0x8,0x8,0x10,0x10,0x20,0xa0,0x40,0xa0,0x10,0x8,0xe,0x4,
++0x1,0x1,0x1,0x7f,0x2,0x4,0xa,0x32,0xc2,0x1f,0x2,0x2,0x2,0x4,0x8,0x30,0x0,0x0,0x8,0xfc,0x80,0x40,0x30,0xe,0x4,0xf0,0x10,0x10,0x10,0x10,0xa0,0x40,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x12,0x14,0x18,0x80,0x40,0x48,0xfc,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x8,0x10,0x3e,0x23,0x32,0x2a,0x22,0xfe,0x22,0x32,0x2a,0x22,0x22,0x22,0x4a,0x85,0x40,0x30,0x14,0xfe,0x0,0x8,0x7c,0x48,0x48,0x48,0x48,0x48,0x4a,0x4a,0x86,0x0,
++0x20,0x23,0x20,0x21,0xf9,0x27,0x24,0x2b,0x20,0x23,0x20,0x3b,0xe0,0x47,0x0,0x0,0x40,0xfc,0x0,0xf8,0x8,0xfe,0x2,0xfc,0xc0,0x68,0xb0,0x28,0xe6,0x24,0xa0,0x40,
++0x0,0x17,0xf8,0x91,0x91,0x97,0x94,0x9b,0x90,0x91,0x96,0xf1,0x96,0x1,0x6,0x0,0x48,0xfc,0x0,0xf0,0x10,0xfe,0x2,0xfc,0x80,0x48,0xf0,0x50,0xce,0x44,0x40,0xc0,
++0x1,0x7f,0x0,0xf,0x8,0x7f,0x40,0x9f,0x6,0xb,0x35,0x9,0x33,0x5,0x39,0x3,0x8,0xfc,0x0,0xe0,0x20,0xfe,0x2,0xf4,0x10,0x20,0x40,0x80,0x60,0x1c,0x8,0x0,
++0x1,0x7f,0x0,0xf,0x8,0xf,0x0,0x7f,0x40,0x9f,0x1,0xf,0x1,0x3f,0x1,0x0,0x8,0xfc,0x20,0xf0,0x20,0xe0,0x0,0xfe,0x2,0xf4,0x0,0xe0,0x0,0xf4,0x4,0xfc,
++0x8,0x8,0xa,0x7f,0x8,0x9,0xff,0x14,0x14,0x56,0x55,0x95,0x24,0x24,0x4c,0x80,0x0,0x7c,0x44,0x44,0x48,0x48,0xd0,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x10,0x11,0x10,0x10,0xfc,0x24,0x24,0x27,0x24,0x44,0x28,0x10,0x28,0x44,0x84,0x0,0x0,0xfc,0x4,0x8,0x10,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x10,0x15,0xfe,0x10,0x7c,0x11,0xfe,0x10,0x38,0x35,0x54,0x50,0x90,0x10,0x10,0x8,0x3c,0xc0,0x40,0x50,0x78,0xc0,0x40,0x48,0x7c,0xc0,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x1f,0x0,0xff,0x4,0x8,0x1f,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0xa0,0x40,
++0x40,0x32,0x12,0x3,0x84,0x68,0x20,0xf,0x10,0x23,0xe2,0x22,0x22,0x22,0x23,0x22,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0xb,0x7c,0x48,0x48,0x4b,0x4a,0x4a,0x4a,0x4a,0x4b,0x7a,0x48,0x0,0x0,0x0,0x4,0xfe,0x8,0x8,0x48,0xe8,0x48,0x48,0x48,0x48,0xc8,0x48,0x8,0x8,0x28,0x10,
++0x0,0xb,0x7e,0x4b,0x4a,0x4b,0x48,0x49,0x4a,0x4c,0x4a,0x7a,0x4a,0x3,0x0,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x84,0xfe,0x4,0x44,0x44,0xa4,0x4,0xe4,0x14,0x8,
++0x8,0x8,0xff,0x8,0x10,0x1f,0x10,0x30,0x53,0x92,0x12,0x12,0x13,0x12,0x10,0x10,0x20,0x24,0xfe,0x20,0x4,0xfe,0x8,0x48,0xe8,0x48,0x48,0x48,0xc8,0x8,0x28,0x10,
++0x8,0x8,0xff,0x8,0x40,0x3f,0x10,0x80,0x63,0x22,0xa,0x12,0xe3,0x22,0x20,0x20,0x20,0x24,0xfe,0x20,0x4,0xfe,0x8,0x48,0xe8,0x48,0x48,0x48,0xc8,0x8,0x28,0x10,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x39,0x37,0x55,0x50,0x90,0x11,0x16,0x10,0x11,0x16,0x80,0x40,0x44,0xfe,0x40,0x80,0x8,0xf8,0x10,0x24,0x4c,0x90,0x20,0x50,0x8c,0x4,
++0x0,0x0,0x3f,0x1,0x1,0x1,0xff,0x1,0x3,0x5,0x9,0x11,0x21,0x41,0x1,0x1,0x10,0x38,0xc0,0x0,0x0,0x4,0xfe,0x0,0x80,0x40,0x20,0x18,0xe,0x4,0x0,0x0,
++0x2,0x7,0x78,0x8,0xa,0xff,0x8,0x18,0x1c,0x2a,0x2a,0x48,0x88,0x8,0x8,0x8,0x0,0x0,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,0x0,0x0,
++0x8,0x8,0xf,0x10,0x10,0x33,0x52,0x92,0x12,0x12,0x13,0x12,0x10,0x10,0x10,0x10,0x0,0x4,0xfe,0x8,0x48,0xe8,0x48,0x48,0x48,0x48,0xc8,0x48,0x8,0x8,0x28,0x10,
++0x1,0x1,0x2,0x4,0x8,0x10,0x2f,0xc0,0x0,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x80,0x40,0x20,0x10,0xee,0x4,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x1,0x2,0x4,0xf,0x10,0x2f,0xc8,0x8,0xf,0x0,0x1f,0x12,0x12,0x12,0xff,0x0,0x0,0x80,0x40,0xe0,0x10,0xee,0x24,0x20,0xe0,0x10,0xf8,0x90,0x90,0x94,0xfe,0x0,
++0x8,0x10,0x24,0x54,0x89,0x52,0x28,0x4c,0x94,0x27,0x4c,0x94,0x24,0x44,0x14,0x8,0x40,0x40,0x7c,0x84,0x88,0x50,0x20,0x50,0x88,0xe,0xfc,0x88,0x88,0x88,0xf8,0x88,
++0x20,0x1b,0x48,0x42,0x41,0x5f,0x41,0x42,0x44,0x4f,0x42,0x44,0x49,0x52,0x44,0x40,0x4,0xfe,0x4,0x4,0x24,0xf4,0x4,0x44,0x84,0x24,0x44,0x84,0x84,0x64,0x24,0xc,
++0x40,0x3f,0x10,0x0,0x80,0x67,0x24,0xc,0x14,0x24,0xe7,0x24,0x20,0x20,0x20,0x20,0x4,0xfe,0x8,0x8,0x48,0xe8,0x48,0x48,0x48,0x48,0xc8,0x48,0x8,0x8,0x28,0x10,
++0x40,0x37,0x14,0x4,0x87,0x64,0x24,0xd,0x15,0x25,0xe5,0x25,0x25,0x24,0x27,0x24,0x4,0xfe,0x44,0x54,0xfc,0x44,0x54,0xfc,0x14,0x14,0x14,0xf4,0x14,0x4,0xfc,0x4,
++0x8,0x8,0x7e,0x8,0x8,0xff,0x14,0x14,0x36,0x75,0x94,0x14,0x14,0x14,0x24,0x4d,0x20,0x28,0xfc,0x20,0x24,0xfe,0x50,0x50,0xd8,0x56,0x52,0x50,0x50,0x50,0x90,0x30,
++0x40,0x23,0x22,0x3,0xfa,0x13,0x21,0x6b,0xb4,0x28,0x22,0x22,0x22,0x23,0x20,0x20,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x4,0x44,0x44,0xa4,0x4,0xe4,0x14,0x8,
++0x8,0x8,0x7f,0x52,0x90,0x28,0x7e,0xa8,0x3e,0x28,0x3e,0x28,0x29,0x3e,0x20,0x20,0x20,0x48,0xfc,0x88,0xa8,0x88,0xa8,0x90,0x84,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x10,0x7f,0x11,0x11,0x25,0x42,0x9f,0x10,0x11,0x11,0x11,0x11,0x2,0xc,0x30,0x0,0x4,0x7e,0x44,0x44,0x7c,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x0,0xb,0x7e,0x4b,0x4a,0x4a,0x4a,0x4b,0x48,0x4b,0x48,0x4f,0x78,0x4a,0x2,0x4,0x8,0xfc,0x48,0x58,0xe8,0x48,0x48,0xf8,0x40,0xf8,0x40,0xfe,0x0,0xa8,0xa4,0x4,
++0x0,0x3f,0x21,0x31,0x2d,0x25,0x21,0x3f,0x1,0x7f,0x1,0xff,0x0,0x28,0x24,0x44,0x8,0xfc,0x8,0x28,0x38,0x48,0x8,0xf8,0x0,0xfc,0x0,0xfe,0x0,0x90,0x4c,0x44,
++0x1,0x0,0x1f,0x10,0x97,0x54,0x57,0x14,0x37,0x54,0xd4,0x14,0x24,0x25,0x46,0x4,0x0,0x84,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x84,0x8c,0x50,0x20,0x10,0xe,0x4,
++0x8,0xb,0x12,0x12,0x23,0x4a,0x8a,0x13,0x32,0x52,0x92,0x12,0x12,0x12,0x13,0x12,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x8c,0x50,0x20,0x10,0x88,0xe,0x4,
++0x0,0x8b,0x5a,0x22,0x53,0x8a,0xa,0x1b,0x2a,0x4a,0x8a,0xa,0xa,0xa,0x53,0x22,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x8c,0x50,0x20,0x10,0x88,0xe,0x4,
++0x10,0x13,0x12,0x12,0x5b,0x56,0x52,0x93,0x12,0x12,0x12,0x12,0x12,0x12,0x13,0x12,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x8c,0x50,0x20,0x10,0x88,0xe,0x4,
++0x0,0x8,0x7f,0x48,0x49,0x49,0x49,0x49,0x48,0x4b,0x48,0x78,0x48,0x0,0x0,0x0,0x40,0x24,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x0,0xfc,0x8,0x30,0x20,0x20,0xa0,0x40,
++0x2,0x1,0xff,0x0,0x1f,0x10,0x10,0x1f,0x0,0x3f,0x0,0x1,0x1,0x1,0x5,0x3,0x0,0x4,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x0,0xf8,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x11,0x11,0x17,0x11,0xfd,0x17,0x30,0x3b,0x56,0x53,0x92,0x13,0x10,0x11,0x13,0x14,0x10,0x10,0xfc,0x10,0x14,0xfe,0x48,0xfc,0x48,0xf8,0x48,0xf8,0x0,0x10,0xc,0x4,
++0x12,0x13,0x24,0x49,0x9f,0x19,0x2f,0x69,0xaf,0x21,0x21,0x3f,0x22,0x24,0x28,0x20,0x0,0xc4,0x9e,0x0,0xe0,0x20,0xfe,0x24,0xe4,0x4,0x24,0xf4,0x84,0x44,0x54,0x8,
++0x10,0x17,0x10,0x10,0x5b,0x56,0x52,0x93,0x12,0x12,0x13,0x10,0x10,0x1f,0x10,0x10,0x8,0xfc,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x0,0x0,
++0x2,0x7f,0x8,0x11,0x3f,0x1,0xff,0x1,0x1,0x7e,0x22,0x14,0x8,0x14,0x22,0xc1,0x8,0xfc,0x0,0x0,0xf8,0x0,0xfe,0x0,0x0,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x0,0x8,0x7c,0x48,0x4b,0x48,0x48,0x48,0x48,0x48,0x4f,0x78,0x48,0x0,0x1,0x2,0x90,0x90,0x90,0x90,0xfc,0x90,0x90,0x90,0x90,0x94,0xfe,0x0,0x90,0x88,0xc,0x4,
++0x10,0x10,0x10,0x10,0x57,0x58,0x50,0x90,0x10,0x10,0x17,0x28,0x24,0x44,0x81,0x2,0x90,0x90,0x90,0x90,0xfc,0x90,0x90,0x90,0x90,0x94,0xfe,0x0,0x90,0x88,0xc,0x4,
++0x10,0x10,0x15,0x7e,0x54,0x54,0x54,0x54,0x7c,0x50,0x10,0x14,0x1e,0xe2,0x47,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x40,0x30,0x10,0x2,0x9f,0x64,0x24,0x4,0x14,0x14,0xe7,0x3c,0x29,0x20,0x20,0x20,0x20,0x48,0xfc,0x88,0xa8,0x88,0xa8,0x90,0x84,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x42,0x32,0x12,0x2,0x8f,0x62,0x22,0xa,0x12,0x3f,0xe0,0x22,0x22,0x24,0x24,0x28,0x10,0x10,0x10,0x10,0xfc,0x10,0x10,0x10,0x14,0xfe,0x0,0x20,0x10,0x8,0xc,0x4,
++0x2,0x1,0x7f,0x40,0x82,0x2,0xff,0x4,0x4,0x8,0x9,0x11,0x12,0x24,0x4f,0x0,0x0,0x0,0xfc,0x4,0x8,0x0,0xfe,0x0,0x80,0x80,0x0,0x0,0x20,0x10,0xf8,0x8,
++0x4,0xfe,0x4,0x4,0x4,0x7c,0x40,0x40,0x44,0x7e,0x4,0x4,0x5,0x45,0x2b,0x10,0x20,0x20,0x20,0x20,0x40,0x40,0x40,0x40,0x80,0x80,0x80,0x90,0x8,0x4,0xfc,0x4,
++0x10,0x10,0x23,0x20,0x44,0xf8,0x10,0x20,0x40,0xfc,0x40,0x0,0x1c,0xe0,0x47,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x1,0x9,0x7d,0x4a,0x4a,0x4e,0x4a,0x4a,0x4a,0x4a,0x4b,0x7a,0x4a,0x2,0x2,0x2,0x8,0x7c,0x8,0x8,0xfe,0x0,0x40,0x7e,0x90,0x14,0xfe,0x10,0x20,0x28,0x46,0x82,
++0x8,0xb,0x8,0x10,0x17,0x32,0x52,0x93,0x14,0x10,0x1f,0x10,0x10,0x10,0x11,0x16,0x10,0xf8,0x10,0x10,0xfc,0x0,0x8,0xfc,0x40,0x44,0xfe,0x40,0xa0,0x90,0xe,0x4,
++0x5,0x89,0x51,0x22,0x53,0x96,0x1a,0x12,0x33,0x52,0x93,0x12,0x12,0x12,0x52,0x23,0x8,0xfc,0x8,0x8,0xfe,0x0,0x88,0xfc,0x20,0x24,0xfe,0x20,0x20,0x50,0x8e,0x4,
++0x0,0x7,0x78,0x48,0x49,0x49,0x49,0x49,0x49,0x4f,0x49,0x79,0x49,0x1,0x5,0x2,0x10,0xd0,0x50,0x90,0x10,0x10,0x10,0x50,0x90,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x0,0x3f,0x20,0x2f,0x28,0x2f,0x28,0x2f,0x20,0x2f,0x20,0x20,0x5f,0x40,0x82,0x1,0x8,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xf8,0x40,0x84,0xfe,0x80,0x80,0x0,
++0x10,0x13,0x20,0x28,0x6f,0xa9,0x29,0x2b,0x2c,0x28,0x2f,0x28,0x28,0x21,0x22,0x24,0x10,0xf8,0x10,0x14,0xfe,0x0,0x8,0xfc,0x40,0x44,0xfe,0x40,0xa0,0x10,0xe,0x4,
++0x0,0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x27,0x24,0x24,0x24,0x44,0x44,0x87,0x4,0x10,0x78,0x80,0x0,0x4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x8,0x7f,0x48,0x4a,0x49,0x49,0x48,0x4f,0x48,0x48,0x78,0x48,0x0,0x1,0x0,0x8,0x1c,0xe0,0x40,0x48,0x58,0x60,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x0,0x3f,0x1,0x1,0x11,0xd,0x5,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x78,0x80,0x0,0x0,0x10,0x30,0x40,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x8,0xf,0x12,0x12,0x22,0x44,0x4,0x9,0x12,0x2,0x29,0x28,0x48,0x7,0x0,0x0,0x8,0xfc,0x48,0x48,0x48,0x88,0x88,0x28,0x10,0x0,0x88,0xa4,0x24,0xe0,0x0,
++0x1,0x11,0xf9,0x27,0x21,0x21,0xf9,0x27,0x24,0x24,0x24,0x3c,0xe7,0x44,0x0,0x1,0x4,0x3e,0x24,0xe4,0x24,0x3c,0x24,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0x44,0x94,0x8,
++0x1,0x1,0x7f,0x1,0x3f,0x1,0x7f,0x44,0x84,0x24,0x14,0xc,0x4,0x4,0x7f,0x0,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x44,0x40,0x48,0x58,0x60,0x40,0x48,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x8,0x9,0x7f,0x8,0xa,0x3f,0x22,0x22,0x22,0x3e,0x22,0x1,0x40,0x44,0xfe,0x40,0x7c,0x44,0xc4,0x7c,0x44,0x44,0x7c,0x44,0x44,0x44,0x94,0x8,
++0x8,0x8,0x8,0x9,0xff,0x8,0x8,0xa,0x3f,0x22,0x22,0x22,0x22,0x3e,0x22,0x1,0x4,0x7e,0x44,0x44,0xc4,0x7c,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x44,0x94,0x8,
++0x21,0x21,0x21,0x21,0xf9,0xaf,0xa9,0xa9,0xab,0xfa,0xa2,0x2a,0x3b,0xea,0x0,0x1,0x4,0x3e,0x24,0x24,0x24,0xfc,0x24,0x24,0xa4,0xbc,0xa4,0xa4,0xa4,0x44,0x94,0x8,
++0x0,0x88,0x53,0x22,0x52,0x92,0x12,0x12,0x32,0x52,0x92,0x12,0x14,0x15,0x58,0x20,0x8,0x1c,0xe0,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xa8,0x94,0xf6,0x4,0x0,
++0x11,0x11,0x55,0x39,0x17,0x11,0xfd,0x33,0x3a,0x56,0x52,0x93,0x12,0x10,0x10,0x11,0x4,0x3e,0x24,0x24,0xe4,0x3c,0x24,0xa4,0xa4,0xbc,0xa4,0xa4,0x24,0x44,0x94,0x8,
++0x42,0x32,0x12,0x2,0x9f,0x62,0x22,0xf,0x18,0x28,0xc8,0x48,0x48,0x4f,0x48,0x40,0x4,0x3e,0x24,0x24,0xe4,0x3c,0xa4,0xe4,0xa4,0xbc,0xa4,0xa4,0xa4,0xa4,0x54,0x88,
++0x0,0xf8,0xb,0xa,0xa,0x7a,0x42,0x42,0x42,0x7a,0xa,0xa,0xa,0xa,0x54,0x28,0x8,0x1c,0xe8,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xa8,0x94,0xf6,0x4,
++0x1,0x1,0x1,0x3f,0x22,0x22,0x3f,0x22,0x21,0x20,0x27,0x24,0x24,0x24,0x48,0x90,0x20,0xf0,0x0,0xfc,0x4,0x68,0x80,0x8,0xf8,0x40,0xe0,0x40,0x40,0x44,0x44,0x3c,
++0x0,0x8,0x7c,0x4b,0x4a,0x4a,0x4b,0x4a,0x4a,0x4a,0x4a,0x7a,0x4c,0x8,0x11,0x6,0x48,0x7c,0x40,0xfe,0x42,0x5c,0xe0,0x44,0x3c,0x10,0xf8,0x90,0x90,0x92,0x12,0xe,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x16,0x1b,0x32,0xd2,0x12,0x12,0x12,0x14,0x54,0x28,0x80,0x60,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x8,0x8,0xf,0x8,0x8,0x8,0x8,0x10,0x1f,0x0,0x0,0x0,0xff,0x0,0x8,0xfc,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0xe0,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x40,0x30,0x13,0x82,0x62,0x22,0xb,0x12,0x12,0xe2,0x22,0x22,0x24,0x24,0x28,0x80,0x60,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x0,0x0,0x3f,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,0x0,0x80,0x84,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x8,0xff,0x8,0x8,0x8,0x10,0x10,0x30,0x50,0x90,0x11,0x12,0x14,0x10,0x10,0x20,0x24,0xfe,0x20,0x20,0x80,0x88,0x98,0xa0,0xc0,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x8,0x7d,0x49,0x4b,0x4d,0x49,0x49,0x49,0x48,0x4f,0x78,0x48,0x0,0x0,0x0,0xa0,0xa4,0x2c,0x30,0x60,0x22,0x22,0x1e,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x4,0x4,0x8,0x8,0x18,0x29,0x4a,0x8,0x9,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x40,0x48,0x58,0x60,0xc0,0x40,0x44,0x44,0x3c,0x0,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x83,0x4a,0x2b,0x12,0x32,0x57,0x94,0x1b,0x32,0x53,0x92,0x13,0x12,0x12,0xa2,0x42,0xf8,0x8,0xc8,0x48,0x48,0xfe,0x2,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x43,0x32,0x13,0x2,0x82,0x4f,0x48,0x13,0x12,0x23,0xe2,0x23,0x22,0x22,0x22,0x22,0xf8,0x8,0xc8,0x48,0x48,0xfe,0x2,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x7f,0x0,0x1f,0x11,0x51,0x51,0x5f,0x51,0x51,0x51,0x5f,0x50,0x40,0x7f,0x40,0x8,0xfc,0x10,0xf8,0x10,0x14,0x14,0xf4,0x14,0x14,0x14,0xf4,0x14,0x4,0xfc,0x4,
++0x10,0x14,0x12,0x10,0x13,0xfc,0x10,0x10,0x11,0xb,0xc,0x8,0x14,0x24,0x42,0x1,0x4,0x4,0x4,0x24,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x84,0x94,0x88,
++0x8,0x8,0x8,0x10,0x10,0x30,0x50,0x90,0x11,0x12,0x14,0x10,0x10,0x10,0x10,0x10,0x80,0x80,0x80,0x88,0x98,0xa0,0xc0,0x80,0x80,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x40,0x33,0x10,0x0,0x0,0xf7,0x10,0x10,0x13,0x12,0x12,0x16,0x1a,0x13,0x2,0x10,0x38,0xc0,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x13,0x12,0xfe,0x13,0x3a,0x36,0x53,0x52,0x90,0x11,0x11,0x12,0x14,0x18,0x40,0x88,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x80,0xc8,0x54,0x5c,0x42,0x42,0x3e,
++0x8,0x8,0x13,0x12,0x22,0x4a,0x8a,0x12,0x32,0x52,0x92,0x12,0x12,0x13,0x12,0x10,0x0,0x4,0xfe,0x4,0x4,0xf4,0x94,0x94,0x94,0x94,0xf4,0x4,0x4,0xfc,0x4,0x0,
++0x10,0x10,0x17,0x10,0x58,0x54,0x50,0x90,0x11,0x12,0x14,0x18,0x10,0x10,0x10,0x10,0x0,0x4,0xfe,0x20,0x20,0x40,0x40,0xd0,0x4c,0x46,0x42,0x40,0x40,0x40,0x40,0x40,
++0x41,0x31,0x11,0x3,0x86,0x6a,0x23,0xa,0x12,0x23,0xe2,0x22,0x22,0x23,0x22,0x22,0x40,0x20,0x4,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x20,0x20,0x2f,0x20,0xf8,0x20,0x20,0x20,0x21,0x2a,0x34,0xe8,0x40,0x0,0x0,0x0,0x0,0x4,0xfe,0x20,0x20,0x40,0x40,0xd0,0x4c,0x46,0x42,0x40,0x40,0x40,0x40,0x40,
++0x0,0x0,0xfc,0x4,0x45,0x46,0x28,0x28,0x10,0x28,0x24,0x44,0x81,0x1,0x2,0xc,0x80,0x80,0x80,0xfc,0x4,0x48,0x40,0x40,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x10,0xf8,0x27,0x20,0x20,0x20,0xf8,0x20,0x21,0x22,0x24,0x20,0x38,0xe0,0x40,0x0,0x0,0x4,0xfe,0x20,0x20,0x40,0x40,0xd0,0x4c,0x46,0x42,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x17,0x10,0xff,0x12,0x3a,0x36,0x53,0x52,0x92,0x12,0x13,0x10,0x1f,0x10,0x0,0x8,0xfc,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x4,0xfe,0x0,
++0x0,0x40,0x2f,0x20,0x0,0xe0,0x20,0x21,0x22,0x24,0x28,0x20,0x20,0x50,0x8f,0x0,0x0,0x4,0xfe,0x40,0x40,0x80,0x80,0xa0,0x98,0x8c,0x84,0x80,0x80,0x6,0xfc,0x0,
++0x10,0x13,0x22,0x21,0x44,0xfb,0x10,0x27,0x40,0xfc,0x1,0x1,0x1a,0xe4,0x49,0x2,0xc,0xf0,0x48,0x50,0x20,0xfc,0x40,0xfe,0x80,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x11,0x12,0xfc,0x13,0x12,0x1e,0x32,0xd2,0x1f,0x10,0x10,0x11,0x52,0x2c,0x80,0x80,0xf0,0x20,0x48,0xfc,0x48,0x48,0x48,0x48,0xfe,0x40,0xa0,0x10,0xe,0x4,
++0x1,0x3f,0x21,0x21,0x3f,0x1,0x7f,0x41,0x41,0x7f,0x41,0x2,0x29,0x28,0x48,0x7,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x4,0x4,0xfc,0x4,0x0,0x90,0xac,0x24,0xe0,
++0x0,0x8,0x7c,0x49,0x4a,0x49,0x49,0x49,0x49,0x49,0x4f,0x78,0x48,0x0,0x1,0x6,0x40,0x40,0xf8,0x10,0x24,0xfe,0x24,0x24,0x24,0x24,0xfe,0x20,0x50,0x88,0x6,0x4,
++0x1,0x0,0x1f,0x11,0x51,0x32,0x14,0x33,0x52,0xd2,0x12,0x1f,0x20,0x21,0x42,0xc,0x0,0x84,0xfe,0x0,0xf0,0x20,0x48,0xfc,0x48,0x48,0x48,0xfe,0xa0,0x10,0xe,0x4,
++0x9,0x5,0x7f,0x2,0xff,0x4,0xf,0x12,0x25,0xda,0x4,0x19,0x62,0xc,0x72,0x1,0x20,0x48,0xfc,0x0,0xfe,0x40,0xe0,0x10,0x1e,0xa4,0xc0,0xa0,0x98,0x88,0x80,0x0,
++0x10,0x10,0x10,0x15,0x5a,0x51,0x51,0x91,0x11,0x11,0x17,0x28,0x24,0x40,0x81,0x6,0x40,0x40,0xf8,0x10,0x24,0xfe,0x24,0x24,0x24,0x24,0xfe,0x20,0x50,0x88,0x6,0x4,
++0x40,0x30,0x11,0x2,0x84,0x63,0x22,0xa,0x12,0x12,0xef,0x20,0x20,0x21,0x22,0x2c,0x80,0x80,0xf0,0x20,0x48,0xfc,0x48,0x48,0x48,0x48,0xfe,0x40,0xa0,0x10,0xe,0x4,
++0x2,0x1,0x7f,0x40,0x9f,0x11,0x11,0x1f,0x10,0x10,0x1f,0x11,0x11,0x11,0x1f,0x10,0x0,0x0,0xfe,0x2,0xf4,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x0,0x10,0xf8,0x0,
++0x8,0x8,0xb,0x10,0x10,0x20,0x42,0xfe,0x4,0x8,0x10,0x20,0x42,0xff,0x1,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x4,0x4,0x7f,0x4,0x1,0xff,0x10,0x10,0x1f,0x0,0x11,0x11,0x11,0x11,0x21,0x41,0x40,0x48,0xfc,0x40,0x4,0xfe,0x0,0x20,0xf0,0x0,0x10,0x10,0x10,0x12,0x12,0xe,
++0x11,0x11,0x1f,0x11,0x58,0x57,0x52,0x92,0x13,0x10,0x12,0x12,0x12,0x12,0x14,0x18,0x10,0x14,0xfe,0x10,0x44,0xfe,0x0,0x8,0xfc,0x0,0x48,0x48,0x48,0x4a,0x4a,0x46,
++0x4,0x4,0x3f,0x4,0x4,0xff,0x1,0x1f,0x11,0x1f,0x11,0x1f,0x10,0x4,0x18,0x60,0x40,0x50,0xf8,0x40,0x44,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0x60,0x18,0x4,
++0x0,0x8,0xfd,0x10,0x10,0x23,0x3c,0x65,0xa5,0x25,0x25,0x25,0x3c,0x24,0x1,0x6,0x88,0x88,0xfc,0x88,0x88,0xfe,0x24,0xfe,0x24,0xfc,0x24,0xfc,0x0,0x88,0x6,0x2,
++0x10,0x10,0x11,0x15,0x7f,0x55,0x55,0x54,0x57,0x7c,0x50,0x15,0x1c,0xf4,0x43,0x0,0x20,0x44,0xfe,0x4,0xfc,0x4,0xfc,0x4,0xfe,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,
++0x10,0x1f,0x28,0x45,0x4,0x7f,0x4,0xff,0x1,0x1f,0x11,0x1f,0x11,0x1f,0xc,0x30,0x40,0x7c,0xa0,0x50,0x40,0xfc,0x40,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x60,0x18,
++0x2,0x4,0x3f,0x20,0x3f,0x20,0x3f,0x0,0x7f,0x1,0x1,0x3f,0x1,0x1,0xff,0x0,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,
++0x0,0x3f,0x22,0x2f,0x28,0x2f,0x28,0x2f,0x20,0x2f,0x21,0x27,0x21,0x5f,0x40,0x80,0x8,0xfc,0x8,0xe8,0x28,0xe8,0x28,0xe8,0x8,0xe8,0x8,0xc8,0xa,0xfa,0xa,0x4,
++0x10,0x10,0x13,0x12,0x5b,0x56,0x53,0x90,0x17,0x10,0x10,0x13,0x10,0x10,0x1f,0x10,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x40,0x50,0xf8,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x13,0x16,0x5b,0x52,0x53,0x90,0x17,0x10,0x10,0x13,0x28,0x44,0x8f,0x0,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x40,0x50,0xf8,0x40,0x44,0xfe,0x0,
++0x0,0x3f,0x20,0x3f,0x20,0x3f,0x1,0x11,0x9,0xff,0x4,0x4,0x4,0x8,0x10,0x60,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0x10,0x24,0xfe,0x40,0x40,0x40,0x42,0x42,0x3e,
++0x10,0x11,0x15,0x7f,0x55,0x55,0x54,0x55,0x54,0x54,0x57,0x5c,0x10,0x11,0x11,0x16,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x20,0x24,0xac,0x30,0xfe,0x90,0x90,0x12,0x12,0xe,
++0x10,0x10,0x12,0x11,0x59,0x54,0x57,0x90,0x10,0x10,0x11,0x11,0x11,0x12,0x12,0x1c,0x40,0x40,0x44,0x4c,0x50,0x44,0xfe,0xa0,0xa0,0xa0,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x1,0x41,0x2f,0x21,0x0,0xf,0xe2,0x22,0x23,0x20,0x22,0x22,0x2a,0x32,0x24,0x8,0x10,0x14,0xfe,0x10,0x44,0xfe,0x0,0x8,0xfc,0x0,0x48,0x48,0x48,0x4a,0x4a,0x46,
++0x4,0x4,0x4,0xff,0x4,0x8,0x8,0xc,0x12,0x10,0x21,0x41,0x82,0x2,0x4,0x18,0x0,0x0,0x4,0xfe,0x80,0x80,0x88,0x98,0xa0,0x80,0x40,0x40,0x20,0x10,0xe,0x4,
++0x10,0x13,0x12,0x14,0xfb,0x10,0x11,0x1a,0x33,0xd0,0x10,0x17,0x10,0x10,0x50,0x20,0x0,0xfe,0x44,0x48,0xfc,0x80,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x10,0x11,0x95,0x56,0x38,0x11,0xfe,0x29,0x29,0x28,0x28,0x2b,0x4c,0x48,0x80,0x0,0x0,0xfe,0x4,0x40,0x48,0xfc,0x80,0x20,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x12,0x12,0x2a,0x2a,0x4f,0x90,0x1f,0x24,0x6f,0xa2,0x25,0x2f,0x22,0x2a,0x32,0x26,0x10,0x10,0x90,0x90,0xbe,0x44,0x84,0xa4,0x24,0x24,0x28,0x98,0x10,0xa8,0x46,0x84,
++0x10,0x10,0x10,0x17,0x58,0x55,0x51,0x91,0x12,0x12,0x12,0x14,0x14,0x18,0x10,0x13,0x80,0x80,0x84,0xfe,0x80,0x20,0x20,0x24,0xac,0x70,0x20,0x20,0x50,0x50,0x8e,0x4,
++0x10,0x10,0x11,0x11,0x7d,0x55,0x55,0x55,0x55,0x7d,0x11,0x11,0x15,0xfd,0x5,0x1,0x0,0x4,0xfe,0x4,0x4,0x74,0x54,0x54,0x54,0x54,0x54,0x74,0x4,0x4,0xfc,0x4,
++0x0,0x0,0x7f,0x40,0x40,0x47,0x44,0x44,0x44,0x44,0x47,0x44,0x40,0x7f,0x40,0x0,0x0,0x4,0xfe,0x4,0x44,0xe4,0x44,0x44,0x44,0x44,0xc4,0x44,0x4,0xfc,0x4,0x0,
++0x10,0x66,0x42,0x42,0x66,0x42,0x43,0x7e,0x1,0x7e,0x8,0x8,0xe,0xf8,0x40,0x3,0x8,0xfc,0x88,0x88,0x88,0x88,0x6,0x0,0xfc,0x88,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x11,0x11,0x11,0x1a,0x55,0x51,0x51,0x91,0x1f,0x12,0x12,0x12,0x13,0x10,0x10,0x10,0x0,0x8,0xfc,0x0,0xf8,0x8,0x48,0x28,0xfe,0x8,0x88,0x48,0xfc,0x8,0x28,0x10,
++0x8,0x7e,0x8,0x3e,0x8,0x7e,0x8,0x3f,0x0,0xff,0x0,0x3f,0x9,0x28,0x48,0x7,0x20,0xfc,0x20,0xf8,0x20,0xfc,0x20,0xf8,0x8,0xfe,0x8,0xf8,0x0,0xa8,0x24,0xe0,
++0x1,0x1,0x1,0x7f,0x1,0x9,0x9,0x8,0xff,0x8,0x8,0x8,0x8,0x10,0x20,0x0,0x0,0x0,0x8,0xfc,0x0,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x1,0x1,0xff,0x1,0x3f,0x21,0x3f,0x21,0x3f,0x1,0x7f,0x2,0x29,0x28,0x48,0x7,0x0,0x4,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x10,0xf8,0x4,0x90,0x8c,0x24,0xe0,
++0x1,0x1,0x79,0x4a,0x4d,0x49,0x49,0x79,0x4f,0x4a,0x4a,0x4a,0x7b,0x48,0x0,0x0,0x0,0x8,0xfc,0x0,0xf8,0x8,0x48,0x28,0xfe,0x8,0x88,0x48,0xfc,0x8,0x50,0x20,
++0x4,0x7e,0x44,0x57,0x54,0x54,0x55,0x56,0x54,0x54,0x54,0x54,0x28,0x24,0x44,0x80,0x20,0x20,0x24,0xfe,0x40,0x84,0xfe,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,0x94,0x88,
++0x8,0x1c,0xf1,0x11,0x11,0xfd,0x11,0x38,0x34,0x51,0x52,0x90,0x10,0x10,0x10,0x17,0x20,0x20,0x24,0x24,0x24,0xfc,0x44,0x40,0xfe,0x4,0x84,0x48,0x30,0x20,0xc0,0x0,
++0x1,0x1,0x2,0x4,0x8,0x10,0x2f,0xc0,0x0,0x3f,0x2,0x2,0x4,0x8,0x1f,0x0,0x0,0x0,0x80,0x40,0x20,0x10,0xee,0x4,0x10,0xf8,0x0,0x0,0x40,0x20,0xf0,0x10,
++0x10,0x10,0x10,0x14,0x59,0x52,0x55,0x90,0x10,0x17,0x10,0x28,0x24,0x41,0x83,0x0,0x40,0x40,0xa0,0x90,0x8,0x26,0xf4,0x0,0x4,0xfe,0x40,0x40,0x90,0x8,0xfc,0x4,
++0x0,0x40,0x37,0x14,0x4,0x84,0x64,0x24,0xc,0x14,0xe4,0x24,0x24,0x24,0x27,0x20,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x40,0x2f,0x20,0x0,0x7,0xe0,0x20,0x2f,0x20,0x20,0x24,0x28,0x30,0x20,0x0,0x40,0x44,0xfe,0x40,0x48,0xfc,0x40,0x44,0xfe,0x44,0x44,0x44,0x54,0x48,0x40,0x40,
++0x1,0x41,0x31,0x12,0x5,0x1,0xf1,0x11,0x17,0x12,0x12,0x12,0x17,0x18,0x10,0x0,0x0,0x8,0xfc,0x0,0xf8,0x8,0x48,0x28,0xfe,0x8,0x88,0x48,0xfc,0x8,0x28,0x10,
++0x10,0x10,0x20,0x20,0x49,0xfa,0x15,0x20,0x40,0xfb,0x0,0x0,0x18,0xe1,0x43,0x0,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x0,0x8,0xfc,0x40,0x40,0x90,0x8,0xfc,0x4,
++0x4,0x4,0x7f,0x4,0x7f,0x42,0x82,0x3f,0x5,0x9,0x1f,0x1,0xff,0x1,0x1,0x1,0x40,0x48,0xfc,0x40,0xfe,0x4,0x8,0xf8,0x0,0x20,0xf0,0x4,0xfe,0x0,0x0,0x0,
++0x0,0x3f,0x21,0x21,0x3f,0x20,0x28,0x30,0x20,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x78,0x80,0x0,0x10,0xf8,0x80,0x42,0x32,0xe,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x24,0x45,0x29,0x11,0x29,0x45,0x85,0x1,0xc,0xf0,0x20,0x24,0xfe,0x10,0x50,0x8a,0x6,0xfc,0x4,0x4,0xfc,0x4,0x4,0xfc,
++0x0,0x11,0x7b,0x2,0xa,0xff,0x22,0x22,0x23,0x42,0x48,0xfd,0x5,0x2,0x4,0x8,0x80,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x80,0xc8,0x48,0x54,0x5c,0x42,0x3e,
++0x40,0x27,0x24,0x8,0x81,0x67,0x21,0xa,0x14,0x27,0xe0,0x20,0x2f,0x20,0x20,0x20,0x0,0xfe,0x84,0x88,0x0,0xfc,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,
++0x40,0x37,0x14,0x4,0x87,0x64,0x24,0xf,0x10,0x24,0xe7,0x24,0x24,0x24,0x25,0x26,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x40,0x48,0x58,0x60,0x40,0xc2,0x42,0x3e,
++0x20,0x10,0xfe,0x92,0x7d,0x10,0x7c,0x10,0xfe,0x11,0x7c,0x44,0x44,0x44,0x7c,0x44,0x0,0x50,0x48,0x84,0x20,0x20,0x50,0x48,0x86,0xfc,0x88,0x88,0x88,0x88,0xf8,0x88,
++0x40,0x30,0x17,0x0,0x80,0x60,0x2f,0x8,0x10,0x23,0xe2,0x22,0x22,0x22,0x23,0x22,0x10,0x38,0xc0,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0x8,0x10,0x12,0x32,0x52,0x94,0x10,0x10,0x10,0x11,0x11,0x12,0x14,0x18,0x40,0x40,0x40,0x40,0x44,0x4c,0x50,0x60,0x40,0xa0,0xa0,0x10,0x10,0x8,0xe,0x4,
++0x1,0x1,0x1,0x1,0x11,0x11,0x11,0x21,0x42,0x2,0x4,0x4,0x8,0x10,0x20,0x40,0x0,0x0,0x0,0x0,0x8,0x18,0x20,0x40,0x80,0x80,0x40,0x40,0x20,0x10,0xe,0x4,
++0x4,0x4,0xff,0x4,0x24,0x18,0x10,0x2b,0x48,0x8,0x18,0x28,0xc8,0x8,0x29,0x12,0x40,0x44,0xfe,0x40,0x28,0x24,0x20,0xfe,0x20,0x20,0x20,0x50,0x50,0x88,0x6,0x4,
++0x0,0x0,0x0,0xff,0x0,0x2,0x3f,0x22,0x22,0x22,0x3e,0x20,0x7,0x78,0x0,0x3,0x50,0x48,0x40,0xfe,0x40,0x40,0x48,0x48,0x48,0x50,0x50,0x20,0x22,0x52,0x8a,0x4,
++0x0,0x0,0xff,0x0,0x3e,0x22,0x3e,0x20,0xe,0x70,0x0,0x2,0x29,0x28,0x48,0x7,0xa0,0x94,0xfe,0x80,0x88,0x88,0x50,0x50,0x22,0x52,0x8e,0x0,0x90,0xac,0x24,0xe0,
++0x3f,0x1,0x7f,0x41,0x9d,0x1,0x1d,0x8,0x1f,0x30,0x57,0x90,0x17,0x10,0x1f,0x10,0xf8,0x0,0xfe,0x2,0x74,0x0,0x70,0x80,0xfc,0x80,0xf8,0x80,0xf8,0x80,0xfe,0x0,
++0x8,0x8,0x10,0x30,0x57,0x90,0x10,0x10,0x1f,0x10,0x11,0x11,0x11,0x2,0xc,0x30,0x80,0x88,0x98,0xe0,0x82,0x82,0x7e,0x10,0xf8,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x40,0x23,0x22,0x2,0xfa,0x13,0x20,0x70,0xaf,0x24,0x24,0x24,0x25,0x24,0x24,0x24,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x44,0xfe,0x44,0x44,0xb4,0x14,0x4,0x14,0x8,
++0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x21,0x21,0x21,0x3f,0x20,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x17,0x11,0x11,0x11,0xfd,0x11,0x11,0x11,0x11,0x1e,0xf2,0x44,0x4,0x9,0x12,0x8,0xfc,0x8,0x8,0x10,0x10,0x3c,0x84,0x88,0x48,0x50,0x20,0x50,0x90,0xe,0x4,
++0x8,0x8,0x7f,0x8,0xf,0x8,0xf,0x8,0xff,0x4,0x9,0x31,0xcf,0x1,0x1,0x3f,0x20,0x28,0xfc,0x20,0xe0,0x20,0xe0,0x24,0xfe,0x40,0x30,0x4e,0xe4,0x0,0x10,0xf8,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x12,0x14,0x18,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x0,0x4,0x7f,0x54,0x54,0x54,0x7f,0x54,0x55,0x55,0x7d,0x45,0x1,0x1,0x0,0x0,0x20,0x28,0xfc,0x20,0x50,0x88,0xfe,0x8,0xe8,0x28,0x28,0x28,0xe8,0x8,0x28,0x10,
++0x8,0x1c,0xf3,0x10,0x10,0xfd,0x13,0x31,0x39,0x55,0x50,0x91,0x11,0x11,0x11,0x11,0x50,0x48,0xfc,0xa0,0xa2,0x3e,0x0,0xf0,0x4,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,
++0x4,0xe,0x78,0x8,0x8,0xfe,0x8,0x18,0x1c,0x2a,0x28,0x48,0x88,0x9,0xa,0x8,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,0x0,0x88,0xc4,0x6,0x2,0x0,
++0x12,0x1f,0x28,0x45,0x88,0x3f,0x8,0xf,0x8,0xf,0x8,0xff,0x0,0x8,0x18,0x20,0x44,0x7e,0xa0,0x10,0x20,0xf8,0x20,0xe0,0x20,0xe0,0x24,0xfe,0x0,0x20,0x18,0x8,
++0x4,0x3e,0x24,0x24,0x24,0x3c,0x24,0x24,0x24,0x3c,0x24,0x24,0x24,0x24,0x4d,0x86,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x8a,0x8a,0x6,0x0,
++0x20,0x20,0x21,0x3d,0x25,0x49,0x41,0xa1,0x21,0x21,0x21,0x25,0x29,0x32,0x24,0x8,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x1,0x40,0x20,0x2f,0x1,0x1,0xe5,0x25,0x25,0x29,0x21,0x21,0x22,0x50,0x8f,0x0,0x0,0xc0,0x48,0xfc,0x20,0x20,0x28,0x24,0x24,0x24,0x20,0x20,0x60,0x6,0xfc,0x0,
++0x2,0x44,0x2f,0x28,0xf,0x88,0x4f,0x42,0x1f,0x24,0xc7,0x44,0x44,0x48,0x4a,0x51,0x10,0x90,0xd0,0x94,0xbe,0xc4,0xa4,0x28,0xa8,0x28,0x90,0x90,0xa8,0xa8,0xc6,0x84,
++0x0,0x20,0x11,0x11,0x1,0xf1,0x11,0x11,0x11,0x11,0x11,0x15,0x19,0x12,0x4,0x8,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x0,0x0,0x1,0xfd,0x5,0x49,0x29,0x11,0x11,0x29,0x24,0x40,0x87,0x0,0x0,0x0,0x40,0x88,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x0,0x4,0xfe,0x10,0x10,0x14,0x7e,0x44,0x44,0x44,0x44,0x7c,0x10,0x10,0x14,0xfe,0x0,
++0x10,0x10,0x27,0x20,0x49,0xf8,0x17,0x20,0x43,0xfa,0x2,0x2,0x1a,0xe0,0x41,0x6,0x40,0x48,0xfc,0x40,0xf0,0x40,0xfe,0x8,0xfc,0x8,0x48,0x48,0x48,0x90,0xc,0x4,
++0x10,0x11,0x21,0x21,0x49,0xf8,0x17,0x21,0x41,0xf9,0x1,0x1,0x19,0xe7,0x40,0x0,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x8,0xf8,0x8,0xf8,0x8,0x8,0xfe,0x8,0x8,
++0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x3f,0x0,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x4,0xfe,0x0,0x0,0x10,0xf8,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x17,0x11,0x11,0xfd,0x11,0x31,0x39,0x55,0x51,0x92,0x12,0x12,0x14,0x19,0x12,0x8,0xfc,0x8,0x8,0x10,0x10,0x3c,0x84,0x88,0x48,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x14,0xfe,0x10,0x14,0x7e,0x54,0x54,0x54,0x54,0x38,0x54,0x93,0x12,0x10,0x10,0x20,0x24,0xfe,0x20,0x28,0xfc,0xa8,0xa8,0xa8,0xa8,0x70,0xa8,0x26,0x24,0x20,0x20,
++0x10,0x11,0x11,0xfd,0x21,0x28,0x4b,0x7d,0x9,0x9,0xf,0xf9,0x49,0xf,0x8,0x8,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x8,0xf8,0x8,0xf8,0x8,0x8,0xfe,0x8,0x8,
++0x10,0x14,0x3e,0x49,0x90,0x7d,0x10,0x7c,0x13,0xfe,0x11,0x39,0x55,0x91,0x11,0x11,0x40,0x48,0xfc,0x20,0x90,0xfc,0x90,0x94,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x9,0x8,0x1f,0x31,0x5f,0x91,0x1f,0x11,0x1f,0x11,0xff,0x5,0x9,0x11,0x61,0x1,0x0,0x90,0xf8,0x0,0xf0,0x0,0xf0,0x0,0xf8,0x0,0xfe,0x40,0x20,0x1c,0x8,0x0,
++0x0,0x7f,0x8,0x8,0x8,0x8,0x8,0x8,0x14,0x12,0x11,0x20,0x21,0x42,0x84,0x8,0x0,0xf0,0x20,0x20,0x40,0x40,0xf8,0x8,0x10,0x20,0x40,0x80,0x40,0x30,0xe,0x4,
++0x4,0x4,0xf,0x8,0x10,0x3f,0x40,0x1f,0x0,0x3f,0x2,0x51,0x50,0x90,0xf,0x0,0x0,0x0,0xe0,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x0,0x84,0x92,0x12,0xf0,0x0,
++0x1,0x0,0x1f,0x12,0x92,0x53,0x54,0x18,0x30,0x5f,0xd0,0x10,0x20,0x21,0x42,0xc,0x0,0x84,0xfe,0x0,0x8,0xfc,0x40,0x40,0x44,0xfe,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x40,0x37,0x11,0x1,0x81,0x61,0x25,0x9,0x11,0x21,0xe2,0x22,0x22,0x24,0x29,0x22,0x8,0xfc,0x8,0x8,0x10,0x10,0x3c,0x84,0x88,0x48,0x50,0x20,0x50,0x88,0xe,0x4,
++0x0,0x7e,0x42,0x42,0x7e,0x42,0x42,0x7e,0x40,0x44,0x44,0x4a,0x72,0x40,0x0,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0xa4,0x94,0x88,0x80,0x80,0x80,0x80,
++0x20,0x20,0x21,0x21,0xf9,0x4d,0x4b,0x49,0x49,0x8b,0x55,0x51,0x22,0x52,0x8c,0x8,0x20,0x14,0xfe,0x40,0x48,0x7c,0x50,0x90,0x14,0xfe,0x10,0x10,0x20,0x28,0x46,0x82,
++0x10,0x17,0x21,0x21,0x49,0xf9,0x11,0x21,0x41,0xf9,0x2,0x2,0x1a,0xe4,0x49,0x2,0x8,0xfc,0x8,0x8,0x10,0x10,0x3c,0x84,0x88,0x48,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x10,0x17,0x10,0xfd,0x10,0x14,0x19,0x36,0xd1,0x11,0x11,0x11,0x11,0x52,0x24,0x80,0x48,0xfc,0x8,0x10,0xa0,0x40,0xb0,0xe,0x14,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0xf,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0x20,0x40,0x40,0xe0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x1,0x21,0x11,0xa,0x12,0x24,0x8,0x1f,0x28,0xcf,0x8,0xf,0x8,0x8,0x8,0x8,0x0,0x8,0x10,0xa0,0x98,0x48,0x20,0xf0,0x2e,0xe4,0x20,0xe0,0x20,0x20,0xa0,0x40,
++0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,0x0,0x0,0x0,0x4,0x4,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x8,0x1f,0x22,0x7f,0x24,0x3f,0x24,0x3f,0x20,0x3,0x7c,0x0,0x40,0x44,0xfe,0x40,0x4,0x24,0x24,0xa4,0xa4,0xa4,0xa4,0xa4,0x4,0x84,0x14,0x8,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x10,0x13,0x1a,0x31,0xd1,0x10,0x10,0x10,0x51,0x26,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0xf8,0x8,0x10,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x2,0x7e,0x2,0xfe,0x0,0x3f,0x21,0x3f,0x21,0x3f,0x4,0x3f,0x4,0xff,0x10,0x60,0x80,0xf8,0x82,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xf8,0x40,0xfe,0x10,0xc,
++0x0,0x1f,0x1,0x1,0x7f,0x5,0x9,0x11,0x6f,0x0,0x0,0xff,0x1,0x1,0x5,0x2,0xe0,0x0,0x0,0x8,0xfc,0x40,0x20,0x1c,0xe8,0x40,0x84,0xfe,0x0,0x0,0x0,0x0,
++0x8,0x8,0x8,0x17,0x10,0x30,0x50,0x93,0x12,0x11,0x11,0x10,0x10,0x10,0x11,0x16,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0xf8,0x8,0x10,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x10,0x10,0x1e,0x22,0x52,0xcc,0x28,0x17,0x20,0xc0,0x1f,0x1,0x9,0x11,0x25,0x2,0x0,0x0,0xfc,0x88,0x50,0x20,0x20,0xd0,0xe,0x24,0xf0,0x0,0x40,0x30,0x10,0x0,
++0x8,0x4,0x7f,0x11,0xa,0x4,0xa,0x31,0xd1,0x11,0x11,0x11,0x11,0x21,0x41,0x0,0x4,0x84,0xc4,0x24,0x24,0x24,0x24,0xa4,0x64,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x10,0x13,0x10,0x18,0x57,0x50,0x51,0x92,0x15,0x10,0x10,0x1f,0x10,0x10,0x11,0x10,0x38,0xc0,0x40,0x48,0xfc,0xe0,0x50,0x4e,0xf4,0x20,0x44,0xfe,0x40,0x40,0x40,0x80,
++0x0,0x40,0x37,0x11,0x80,0x60,0x21,0xe,0x11,0x21,0xe1,0x21,0x21,0x22,0x24,0x20,0x80,0x44,0xfe,0x10,0xa0,0x40,0xb0,0xe,0x14,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x2,0x1,0x7f,0x41,0x81,0x1f,0x2,0x4,0xff,0x0,0x1f,0x10,0x10,0x1f,0x10,0x0,0x0,0x0,0xfe,0x2,0x24,0xf0,0x80,0x44,0xfe,0x10,0x90,0x90,0x90,0x90,0x50,0x20,
++0x2,0x1,0x7f,0x40,0x88,0xe,0x8,0x8,0xff,0x8,0x2c,0x2b,0x49,0x88,0x28,0x13,0x0,0x0,0xfe,0x2,0x4,0xf8,0x8,0x88,0x88,0x50,0x50,0x20,0x20,0x50,0x8e,0x4,
++0x0,0x20,0x10,0x10,0x0,0x0,0xf7,0x10,0x10,0x10,0x10,0x12,0x14,0x18,0x10,0x0,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x20,0x17,0x10,0x0,0x0,0xf0,0x13,0x12,0x12,0x12,0x12,0x16,0x1a,0x11,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x2,0x2,0x2,0xfe,0x0,
++0x0,0x7d,0x44,0x44,0x7d,0x45,0x45,0x45,0x7c,0x40,0x48,0x44,0x5c,0x60,0x41,0x6,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x50,0x50,0x92,0x92,0xe,0x0,
++0x0,0x7f,0x0,0x0,0x3f,0x20,0x20,0x20,0x1f,0x0,0x52,0x51,0x50,0x90,0xf,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x4,0x4,0xfc,0x0,0x4,0x82,0x92,0x12,0xf0,0x0,
++0x0,0x7d,0x44,0x48,0x48,0x50,0x4b,0x48,0x44,0x44,0x44,0x69,0x52,0x40,0x40,0x40,0x8,0xfc,0x0,0x0,0x0,0x4,0xfe,0x20,0x20,0xa8,0xa4,0x22,0x22,0x20,0xa0,0x40,
++0x10,0x10,0x10,0x13,0xfc,0x24,0x24,0x25,0x25,0x44,0x28,0x10,0x28,0x44,0x84,0x3,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0xfc,0x4,0x88,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x12,0x22,0x23,0x4a,0xfa,0x12,0x23,0x42,0xfa,0x42,0x3,0x1a,0xe2,0x43,0x0,0x20,0x20,0x20,0x24,0xac,0x70,0x20,0xfc,0x20,0x70,0xac,0x24,0x20,0x24,0xfe,0x0,
++0x8,0x8,0x13,0x10,0x24,0xfc,0x8,0x11,0x21,0xfd,0x41,0x1,0x1d,0xe1,0x40,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x1,0x7f,0x1,0x3f,0x0,0x1f,0x10,0x1f,0x4,0xff,0x10,0x7e,0x12,0x12,0x2a,0x44,0x8,0xfc,0x0,0xf8,0x0,0xf0,0x10,0xf0,0x44,0xfe,0x8,0xfc,0x88,0x88,0xf8,0x88,
++0x12,0x12,0x12,0x12,0xfe,0x17,0x32,0x3a,0x56,0x52,0x92,0x12,0x14,0x15,0x18,0x10,0x0,0x0,0x0,0x4,0x1e,0xd4,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x5c,0x94,0x0,
++0x1,0x1,0x1,0x7f,0x1,0x11,0x9,0x1,0xff,0x1,0x2,0x2,0x4,0x8,0x30,0xc0,0x0,0x0,0x8,0xfc,0x0,0x10,0x20,0x4,0xfe,0x0,0x80,0x80,0x40,0x30,0xe,0x4,
++0x8,0x8,0x8,0x17,0x10,0x30,0x5f,0x90,0x10,0x10,0x17,0x10,0x10,0x10,0x1f,0x10,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x2,0x1,0x7f,0x40,0x80,0x3f,0x4,0x1a,0x63,0x5,0x19,0x63,0x5,0x19,0x65,0x2,0x0,0x0,0xfe,0x2,0x4,0xf8,0x0,0x10,0x30,0x40,0x80,0x40,0x30,0xe,0x4,0x0,
++0x10,0x10,0x10,0x12,0xff,0x12,0x12,0x12,0x12,0x22,0x22,0x22,0x22,0x4a,0x84,0x0,0x0,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x7c,0x44,0x0,
++0x4,0x4,0xff,0x4,0x1,0x7f,0x1,0x9,0x5,0xff,0x1,0x2,0x4,0x8,0x30,0xc0,0x40,0x44,0xfe,0x40,0x8,0xfc,0x0,0x20,0x44,0xfe,0x0,0x80,0x40,0x30,0xe,0x4,
++0x10,0x13,0x10,0xfe,0x11,0x55,0x39,0x11,0xff,0x11,0x11,0x29,0x25,0x44,0x81,0x2,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x44,0x54,0x8c,0x4,0x2,
++0x0,0xff,0x4,0x7f,0x44,0x44,0x7f,0x0,0x1f,0x10,0x11,0x11,0x11,0x2,0xc,0x30,0x4,0xfe,0x40,0xfc,0x44,0x44,0xfc,0x10,0xf8,0x10,0x10,0x10,0x10,0x60,0x18,0x8,
++0x0,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x21,0x1,0x1,0x1,0x1,0x1,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x11,0x1d,0x21,0x21,0x7d,0x91,0x11,0xfd,0x11,0x11,0x14,0x18,0x10,0x0,0x0,0x4,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,
++0x10,0x17,0x14,0x24,0x24,0x67,0xa4,0x24,0x27,0x24,0x24,0x27,0x24,0x24,0x25,0x26,0x4,0xbe,0x84,0x84,0x84,0xbc,0x0,0x7c,0x84,0x88,0x50,0x20,0x50,0x88,0xe,0x4,
++0x8,0x1c,0xf3,0x12,0x10,0xfd,0x10,0x39,0x36,0x54,0x51,0x92,0x14,0x11,0x12,0x10,0x40,0x20,0xfe,0x2,0x4,0xfc,0x80,0x44,0x6c,0xb0,0x30,0x68,0xa8,0x26,0xa4,0x40,
++0x8,0x8,0x8,0x10,0x11,0x32,0x54,0x99,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x14,0x40,0x40,0x40,0xa0,0x10,0x8,0x6,0x14,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x10,0x7e,0x12,0x12,0x12,0x2a,0x44,0x1,0xff,0x3,0x5,0x9,0x11,0x61,0x1,0x0,0x8,0xfc,0x88,0x88,0x88,0xf8,0x80,0x4,0xfe,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x10,0x10,0x7f,0x11,0x11,0x25,0x42,0x9f,0x0,0x8,0x8,0xf,0x0,0x7f,0x0,0x0,0x0,0x4,0x7e,0x44,0x44,0x7c,0x44,0xe0,0x20,0x20,0x24,0xfe,0x4,0xc4,0x14,0x8,
++0x10,0x10,0x13,0x12,0xfc,0x25,0x24,0x25,0x26,0x44,0x29,0x12,0x28,0x45,0x84,0x0,0x40,0x20,0xfe,0x2,0x4,0xfc,0x80,0x44,0x6c,0xb0,0x30,0x68,0xa8,0x26,0xa4,0x40,
++0x4,0x7e,0x11,0x10,0x10,0x3e,0x22,0x63,0x92,0xc,0x4,0x8,0x10,0x20,0x40,0x0,0x8,0x1c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x4,0x4,0x24,0x24,0x24,0x25,0x24,0x24,0x4,0x3f,0x24,0x24,0x24,0x24,0xff,0x0,0x40,0x40,0x48,0x7c,0xa0,0x18,0x8,0x0,0x8,0xfc,0x48,0x48,0x48,0x48,0xfe,0x0,
++0x4,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x27,0x5,0x1,0x3f,0x1,0x1,0xff,0x0,0x0,0xf8,0x8,0x90,0x90,0x60,0x20,0xd0,0xe,0x4,0x10,0xf8,0x0,0x4,0xfe,0x0,
++0x1,0x1,0x9,0xd,0x11,0x21,0x0,0x1,0xff,0x1,0x2,0x2,0x4,0x8,0x30,0xc0,0x0,0x0,0x20,0x10,0x18,0x8,0x0,0x4,0xfe,0x0,0x80,0x80,0x40,0x30,0xe,0x4,
++0x10,0x14,0x3e,0x48,0x2,0x2,0x7f,0x2,0x1,0x7f,0x1,0x1,0x0,0x7,0x38,0x0,0x40,0x48,0xfc,0x20,0x80,0x50,0xf8,0x0,0x4,0xfe,0x10,0x20,0xc0,0x44,0x24,0x1c,
++0x20,0x1b,0x8,0x40,0x4f,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x4f,0x48,0x40,0x40,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x24,0x24,0x24,0xe4,0x24,0x14,0x8,
++0x8,0x4,0xff,0x2,0x3f,0x22,0x3e,0x22,0x3e,0x22,0x22,0x26,0x0,0x24,0x22,0x40,0x20,0x44,0xfe,0x0,0x8,0x48,0x48,0x48,0x48,0x48,0x8,0x18,0x0,0x90,0x4c,0x4,
++0x10,0x8,0x7f,0x4,0x3f,0x4,0x4,0xff,0x4,0x4,0x3f,0xc,0x14,0x24,0xc4,0x4,0x20,0x48,0xfc,0x90,0xf8,0x90,0x94,0xfe,0x90,0x90,0xf0,0xc0,0xb0,0x8e,0x84,0x80,
++0x2,0x1,0x1f,0x10,0x10,0x1f,0x10,0x17,0x14,0x17,0x14,0x27,0x24,0x44,0x84,0x4,0x0,0x8,0xfc,0x8,0x8,0xf8,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x1,0x7d,0x5,0x45,0x29,0x29,0x11,0x11,0x29,0x29,0x45,0x85,0x1,0x1,0x1,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x44,0x4c,0x30,0x20,0x10,0x4e,0x84,0x0,
++0x10,0x11,0x10,0x14,0xfe,0x24,0x24,0x27,0x24,0x44,0x28,0x10,0x28,0x44,0x84,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x10,0x10,0x20,0x27,0x44,0xfc,0x15,0x24,0x45,0xfd,0x45,0x5,0x1d,0xe5,0x48,0x10,0x10,0x18,0x14,0xfe,0x10,0x10,0xd0,0x14,0xd4,0x54,0x54,0x58,0xd0,0x2a,0x46,0x82,
++0x8,0x8,0xff,0x8,0x9,0x1,0x3f,0x21,0x21,0x21,0x3f,0x21,0x1,0x1,0x7f,0x0,0x20,0x24,0xfe,0x20,0x20,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x10,0xf8,0x4,0x4,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x35,0x30,0x58,0x56,0x91,0x11,0x11,0x10,0x1f,0x10,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x0,0x40,0x48,0x4c,0x48,0x50,0x4,0xfe,0x0,
++0x1,0x1,0xff,0x1,0x3f,0x21,0x29,0x25,0x21,0x3f,0x23,0x5,0x9,0x31,0xc1,0x1,0x0,0x4,0xfe,0x8,0xfc,0x8,0x28,0x48,0x8,0xf8,0x88,0x40,0x30,0xe,0x4,0x0,
++0x0,0x10,0xf8,0x27,0x24,0x44,0x55,0x7c,0xd5,0x55,0x55,0x55,0x55,0x75,0x48,0x10,0x10,0x18,0x14,0xfe,0x10,0x10,0xd0,0x14,0xd4,0x54,0x54,0x58,0xd0,0x2a,0x46,0x82,
++0x0,0x8,0xfc,0x10,0x11,0x22,0x2d,0x78,0xa8,0x2a,0x29,0x29,0x29,0x38,0x27,0x0,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x0,0x40,0x48,0x4c,0x48,0x50,0x4,0xfe,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x13,0x11,0x1e,0x33,0xd0,0x10,0x10,0x11,0x12,0x54,0x20,0x40,0x44,0xfe,0x80,0x80,0xe0,0x20,0x24,0xfe,0x20,0x20,0xa8,0x24,0x22,0xa2,0x40,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x15,0x18,0x30,0xd2,0x11,0x11,0x11,0x10,0x57,0x20,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x0,0x40,0x48,0x4c,0x48,0x50,0x4,0xfe,0x0,
++0x12,0x1f,0x28,0x45,0x90,0x2b,0x20,0x27,0x24,0x24,0x27,0x24,0x24,0x27,0x20,0x20,0x44,0x7e,0xa0,0x10,0x8,0xfc,0x8,0xc8,0x48,0x48,0xc8,0x48,0x48,0xc8,0x28,0x10,
++0x8,0x8,0x8,0x10,0x11,0x32,0x55,0x98,0x10,0x12,0x11,0x11,0x11,0x10,0x1f,0x10,0x40,0x40,0xa0,0xa0,0x10,0x8,0xf6,0x4,0x40,0x48,0x4c,0x48,0x50,0x4,0xfe,0x0,
++0x8,0x4,0xff,0x2,0x3f,0x22,0x3e,0x22,0x3e,0x22,0x26,0x7f,0x4,0x4,0x18,0x60,0x20,0x44,0xfe,0x0,0x48,0x48,0x48,0x48,0x48,0x18,0x8,0xfc,0x8,0x8,0x28,0x10,
++0x0,0x40,0x30,0x17,0x4,0x4,0xd,0x14,0x25,0xe5,0x25,0x25,0x25,0x25,0x8,0x10,0x10,0x18,0x14,0xfe,0x10,0x10,0xd0,0x14,0xd4,0x54,0x54,0x58,0xd0,0x2a,0x46,0x82,
++0x8,0x8,0xff,0xa,0x2,0x7f,0x4,0xb,0x10,0x10,0x3f,0x50,0x90,0x10,0x11,0x10,0x20,0x24,0xfe,0x20,0x8,0xfc,0x0,0xf0,0x20,0x44,0xfe,0x40,0x40,0x40,0x40,0x80,
++0x10,0x10,0x12,0x12,0xfe,0x12,0x32,0x38,0x54,0x53,0x92,0x12,0x12,0x12,0x1f,0x10,0x80,0x90,0x94,0xbe,0xd0,0x8c,0x84,0x80,0x8,0xfc,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x4,0x24,0x24,0x25,0x26,0x25,0x1,0x6,0x18,0x6f,0x81,0x1f,0x9,0x5,0x7f,0x0,0x40,0x48,0xfc,0x40,0x30,0x10,0x0,0xc0,0x30,0xee,0x4,0xf0,0x20,0x48,0xfc,0x0,
++0x4,0x7e,0x44,0x44,0x44,0x7d,0x10,0x10,0x53,0x5c,0x50,0x50,0x5c,0x70,0xc3,0x0,0x40,0x50,0x48,0x40,0x7c,0xc0,0x48,0x7c,0xc0,0x48,0x50,0x20,0x60,0x92,0xa,0x6,
++0x4,0x7e,0x44,0x54,0x54,0x55,0x54,0x54,0x57,0x54,0x54,0x54,0x10,0x28,0x47,0x84,0x40,0x50,0x48,0x40,0x7c,0xc0,0x48,0x7c,0xc0,0x48,0x50,0x20,0x60,0x92,0xa,0x6,
++0x0,0x1f,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x12,0x4,0x4,0x8,0x30,0xc0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x90,0x80,0x82,0x82,0x7e,0x0,
++0x20,0x27,0x39,0x41,0x82,0x7a,0x24,0x27,0xf9,0x21,0x25,0x22,0x2a,0x35,0x28,0x0,0x10,0x10,0x7c,0x14,0xfe,0x14,0x7c,0x10,0x7c,0x10,0x14,0xfe,0x10,0x10,0x96,0x7c,
++0x10,0x1e,0x28,0x45,0x8,0x4,0xff,0x2,0x3f,0x22,0x3e,0x22,0x3e,0x22,0x2a,0x24,0x40,0x7c,0x90,0x8,0x20,0x44,0xfe,0x8,0x8,0x48,0x48,0x48,0x48,0x48,0x8,0x18,
++0x10,0x10,0x12,0x22,0x23,0x64,0xa4,0x28,0x20,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x10,0x2e,0x23,0x62,0xa4,0x28,0x2f,0x22,0x32,0x2d,0x24,0x2a,0x31,0x20,0x20,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfe,0x20,0x24,0xfe,0x20,0x20,0x26,0xfc,
++0x8,0x10,0x3e,0x22,0x22,0x32,0x2a,0x22,0xfe,0x22,0x32,0x2a,0x22,0x22,0x4a,0x85,0x0,0x4,0xfe,0x84,0x94,0x94,0x94,0x94,0xa4,0xa4,0x20,0x50,0x50,0x52,0x92,0xe,
++0x4,0x4,0xa,0x11,0x20,0x42,0xbf,0x0,0x24,0x14,0x15,0x15,0x3,0x7c,0x20,0x0,0x4,0x4,0x4,0x24,0xa4,0x64,0x24,0x24,0xa4,0xa4,0x24,0x24,0x84,0x4,0x14,0x8,
++0x20,0x20,0x20,0x3c,0x24,0x4b,0x40,0xa0,0x23,0x20,0x20,0x24,0x28,0x30,0x23,0x0,0x40,0x50,0x48,0x40,0x7c,0xc0,0x48,0x7c,0xc0,0x48,0x50,0x20,0x60,0x92,0xa,0x6,
++0x2,0x42,0x22,0x2f,0x4,0x85,0x69,0x2f,0x11,0x21,0xe1,0x3f,0x29,0x21,0x21,0x21,0x0,0xc,0x30,0xe0,0x20,0x24,0x3e,0xe8,0x28,0x28,0xe8,0x28,0x28,0x48,0x88,0x8,
++0x0,0x40,0x2f,0x28,0xa,0x8a,0x4a,0x4a,0x1a,0x2a,0xca,0x4a,0x42,0x45,0x48,0x50,0x20,0x20,0xa4,0xae,0xf0,0xa0,0xae,0xf0,0xa4,0xa4,0xa8,0x90,0x30,0x4a,0x8a,0x6,
++0x2,0x41,0x34,0x14,0x84,0x65,0x25,0xd,0x15,0x25,0xe5,0x25,0x25,0x24,0x24,0x24,0x4,0xbe,0x84,0x4,0x4,0xf4,0x14,0x14,0xf4,0x14,0x14,0xf4,0x14,0x4,0x14,0x8,
++0x0,0x0,0xfb,0x8,0x17,0x10,0x3b,0x8,0x8b,0x50,0x50,0x37,0x20,0x50,0x88,0x7,0x40,0x48,0xfc,0x48,0xfe,0x48,0xf8,0x40,0xf8,0x40,0x48,0xfc,0x40,0x40,0x46,0xfc,
++0x10,0x1f,0x10,0x27,0x24,0x67,0xa4,0x2f,0x20,0x27,0x24,0x27,0x24,0x27,0x20,0x2f,0x4,0xfe,0x0,0xfc,0x44,0xfc,0x44,0xfe,0x0,0xfc,0x44,0xfc,0x44,0xfc,0x0,0xfe,
++0x8,0x4,0x7f,0x1,0x3f,0x1,0x7f,0x2,0x2,0xff,0x4,0x8,0x6,0x1,0x6,0x38,0x20,0x48,0xfc,0x0,0xf8,0x0,0xfc,0x0,0x4,0xfe,0x20,0x20,0xc0,0x80,0x60,0x10,
++0x10,0x10,0x11,0x91,0x73,0x34,0x10,0x10,0x1f,0x30,0x52,0xd1,0x10,0x10,0x10,0x10,0x80,0x80,0xf8,0x8,0x10,0xa0,0x40,0x94,0xfe,0x10,0x10,0x90,0x90,0x10,0x50,0x20,
++0x4,0x44,0x24,0x4,0x15,0x24,0x64,0x5,0x1,0x7d,0x5,0x9,0x9,0x11,0x65,0x2,0x40,0x40,0x7c,0x84,0x48,0x30,0x20,0x40,0x8,0x98,0x60,0x20,0x10,0xe,0x4,0x0,
++0x40,0x30,0x17,0x0,0x80,0x60,0x20,0x8,0x10,0x20,0xe0,0x20,0x20,0x2f,0x20,0x20,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,0x0,
++0x0,0xff,0x4,0x5,0x7d,0x45,0x41,0x43,0x7c,0x25,0x75,0x25,0x35,0xc5,0x14,0xb,0x4,0xfe,0x0,0xfc,0x24,0xfc,0x24,0xfe,0x0,0xfc,0x24,0xfc,0x24,0xfc,0x0,0xfe,
++0x4,0x4,0xff,0x4,0x4,0x8,0x49,0x2a,0x28,0x8,0x1f,0x28,0x49,0x88,0x8,0x8,0x40,0x44,0xfe,0x40,0x40,0xf8,0x8,0xb0,0x50,0x94,0xfe,0x10,0x10,0x90,0x10,0x30,
++0x4,0x44,0x24,0x4,0x15,0x24,0x64,0x5,0x1,0xff,0x5,0x9,0x11,0x21,0xc1,0x1,0x40,0x40,0x7c,0x84,0x48,0x30,0x20,0x40,0x4,0xfe,0x40,0x20,0x10,0xe,0x4,0x0,
++0x4,0x44,0x24,0x4,0x15,0x24,0x64,0x4,0x1,0xff,0x1,0x2,0x4,0x8,0x30,0xc0,0x40,0x40,0x7c,0x84,0x48,0x30,0x20,0x40,0x4,0xfe,0x0,0x80,0x40,0x30,0xe,0x4,
++0x1,0x21,0x11,0x17,0x1,0x1,0xf1,0x11,0x1f,0x11,0x11,0x15,0x19,0x11,0x2,0x0,0x10,0x10,0x10,0xfc,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0x7f,0x40,0x40,0x4f,0x48,0x48,0x4f,0x48,0x48,0x48,0x50,0x60,0x40,0x7f,0x0,0x8,0xfc,0x20,0x70,0x80,0x0,0x10,0xf8,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x4,0x44,0x24,0xd,0x16,0x64,0x4,0xff,0x4,0x3f,0x24,0x38,0x27,0x20,0x3f,0x20,0x80,0xf8,0x88,0x90,0x60,0x40,0x84,0xfe,0x40,0xf8,0x48,0x38,0xc8,0x8,0xf8,0x8,
++0x0,0x7c,0x45,0x4a,0x48,0x50,0x49,0x4a,0x44,0x45,0x45,0x69,0x53,0x40,0x40,0x40,0x80,0x80,0xf8,0x10,0xa0,0x40,0xb0,0x4e,0x44,0xf0,0x40,0x48,0xfc,0x40,0x40,0x40,
++0x8,0x8,0xff,0x9,0x8,0x1f,0x10,0x3f,0x50,0x1f,0x10,0x1f,0x10,0x24,0x22,0x40,0x20,0x24,0xfe,0x20,0x88,0xfc,0x80,0xf8,0x80,0xf8,0x80,0xfc,0x0,0x48,0x26,0x2,
++0x22,0x22,0x22,0x23,0xfa,0x22,0x7f,0x6a,0xa2,0x27,0x2a,0x32,0x22,0x2a,0x24,0x21,0x0,0x0,0x7c,0xc4,0x44,0x24,0x28,0x28,0x28,0x10,0x90,0x28,0x28,0x46,0x84,0x0,
++0x1,0x9,0xfd,0x11,0x13,0x25,0x21,0x79,0xa9,0x29,0x29,0x29,0x29,0x3a,0x22,0x4,0x20,0x14,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x14,0xfe,0x0,0xa4,0x92,0x2,
++0x9,0x8,0xf,0x10,0x10,0x3f,0x50,0x90,0x1f,0x10,0x10,0x1f,0x10,0x24,0x22,0x40,0x0,0x88,0xfc,0x80,0x90,0xf8,0x80,0x90,0xf8,0x80,0x84,0xfe,0x0,0x90,0x4c,0x4,
++0x4,0x3e,0x24,0x27,0x24,0x3c,0x25,0x26,0x24,0x3c,0x24,0x24,0x24,0x44,0x95,0xa,0x40,0x20,0x24,0xfe,0x0,0x88,0x6,0x2,0x88,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x2,0x1,0x1,0xff,0x8,0x8,0x10,0x28,0x44,0x2,0x1,0x2,0x4,0x8,0x30,0xc0,0x0,0x0,0x4,0xfe,0x20,0x10,0xc,0x24,0x40,0x80,0x0,0x80,0x40,0x30,0xe,0x4,
++0x10,0x8,0x9,0xff,0x0,0x14,0x22,0x41,0xa2,0x14,0x8,0x14,0x12,0x22,0x40,0x0,0x0,0x7c,0x44,0xc4,0x48,0x48,0x50,0x48,0xc4,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x41,0x31,0x10,0x7,0x80,0x60,0x20,0xb,0x10,0x27,0xe1,0x21,0x21,0x21,0x22,0x2c,0x0,0x8,0xfc,0x80,0xa0,0x44,0xa4,0x1c,0x0,0xfc,0x20,0x20,0x20,0x22,0x22,0x1e,
++0x8,0xfd,0x8,0x48,0x4b,0x48,0x48,0x49,0x7e,0x4,0x1c,0xe4,0x44,0x14,0x9,0x2,0xc,0xf0,0x20,0x24,0xfe,0x50,0x88,0x6,0x8c,0x88,0x88,0x88,0x88,0x88,0x8,0x8,
++0x10,0x13,0x10,0x10,0xfc,0x27,0x24,0x25,0x27,0x45,0x29,0x11,0x29,0x45,0x82,0x4,0x18,0xe0,0x40,0x40,0x44,0xfe,0xa0,0x10,0x1e,0x14,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0xf,0x2,0xef,0xa9,0xaf,0xa0,0xaf,0xa8,0xaf,0xa8,0xaf,0xe8,0x89,0xf,0x0,0x1c,0xe0,0x48,0xfc,0x24,0xfc,0x0,0x88,0x88,0xfe,0x88,0xa8,0x28,0x8,0xa8,0x10,
++0x12,0x11,0x11,0x17,0xfc,0x14,0x13,0x1a,0x32,0xd2,0x12,0x12,0x12,0x10,0x51,0x26,0x44,0x24,0x28,0xfe,0x2,0x4,0xf8,0x8,0x48,0x48,0x48,0x48,0x48,0xa2,0x22,0x1e,
++0x10,0x10,0x10,0x1f,0x20,0x20,0x7d,0x92,0x10,0x7c,0x10,0x10,0x14,0x18,0x11,0x2,0x40,0x20,0x24,0xfe,0x0,0x88,0x6,0x2,0x88,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x20,0x23,0x28,0x3c,0x50,0x97,0x10,0xfd,0x13,0x15,0x11,0x29,0x25,0x41,0x82,0x4,0x18,0xe0,0x40,0x40,0x44,0xfe,0xa0,0x10,0x1e,0x14,0x10,0x10,0x10,0x10,0x10,0x10,
++0x9,0x9,0x8,0x17,0x10,0x30,0x50,0x93,0x10,0x17,0x11,0x11,0x11,0x11,0x12,0x1c,0x0,0x8,0xfc,0x80,0xa0,0x44,0xa4,0x1c,0x0,0xfc,0x20,0x20,0x20,0x22,0x22,0x1e,
++0x9,0x7d,0x49,0x4f,0x49,0x79,0x49,0x4f,0x49,0x79,0x4a,0x4a,0x4f,0x48,0x88,0x18,0x0,0x4,0x3e,0xe4,0x24,0x24,0x24,0xe4,0x24,0x24,0x24,0xb4,0xe8,0x60,0x20,0x20,
++0x8,0x88,0x50,0x27,0x50,0x89,0xa,0x1c,0x29,0x48,0x88,0x8,0x8,0x9,0x52,0x24,0x80,0x40,0x44,0xfe,0x0,0x10,0xc,0x4,0x10,0xa0,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x8,0xf,0x10,0x20,0x5f,0x91,0x11,0x1f,0x11,0x11,0x1f,0x11,0x11,0x21,0x41,0x80,0x0,0xe0,0x40,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x8,0x28,0x10,
++0x20,0x20,0x20,0x3f,0x24,0x48,0x41,0xa2,0x20,0x20,0x20,0x24,0x28,0x30,0x21,0x2,0x40,0x20,0x24,0xfe,0x0,0x88,0x6,0x2,0x88,0x50,0x20,0x50,0x50,0x88,0x6,0x4,
++0x22,0x24,0x2f,0x48,0x4f,0xf8,0x1f,0x22,0x5f,0x84,0xf7,0x4,0x34,0xc8,0x49,0x10,0x10,0x90,0xd0,0x94,0xbe,0xc4,0xa4,0x28,0xe8,0x28,0x90,0x90,0xa8,0xa8,0xc6,0x84,
++0x10,0x10,0x20,0x23,0x44,0xf8,0x11,0x22,0x40,0xfc,0x0,0x0,0x1c,0xe0,0x41,0x2,0x40,0x20,0x24,0xfe,0x0,0x88,0x6,0x2,0x88,0x50,0x20,0x50,0x50,0x88,0x6,0x4,
++0x24,0x24,0x49,0x24,0x3f,0x24,0x3f,0x24,0x3f,0x4,0xff,0x15,0x14,0x24,0x44,0x4,0x84,0x84,0x24,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0x24,0xe4,0x24,0x84,0x84,0x14,0x8,
++0x8,0x8,0x7f,0x9,0xa,0xff,0x8,0x1f,0x22,0xcc,0x8,0xe,0x78,0x8,0x29,0x12,0x40,0x40,0x40,0x44,0x7e,0x88,0x8,0x48,0x50,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x2,0xff,0x28,0x28,0xfe,0xab,0xaa,0xaa,0xc7,0x82,0x83,0xfe,0x82,0x82,0xfe,0x82,0x20,0x24,0xfc,0x28,0x28,0xfe,0x10,0x20,0xfc,0x88,0x10,0xfe,0x10,0x10,0x50,0x20,
++0x10,0x13,0x20,0xfc,0x20,0x57,0x50,0xfd,0x13,0x15,0x1d,0xf1,0x51,0x11,0x12,0x14,0xc,0xf0,0x40,0x40,0x44,0xfe,0x90,0x18,0x1e,0x14,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x10,0x20,0xff,0x20,0x50,0x51,0xfe,0x10,0x10,0x1e,0xf0,0x50,0x10,0x11,0x12,0x40,0x20,0x24,0xfe,0x0,0x88,0x6,0x2,0x88,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x7c,0x44,0x0,0x0,0x0,0x4,0x4,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x9c,0xe4,0x84,0x4,0x4,0x4,
++0x2,0x1,0x7f,0x48,0x91,0x9,0xf,0x11,0x1,0xff,0x0,0x1f,0x10,0x10,0x1f,0x10,0x0,0x0,0xfe,0x22,0x14,0x0,0xf0,0x0,0x4,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x10,0x13,0x12,0x13,0xfe,0x13,0x14,0x19,0x33,0xd4,0x1c,0x14,0x15,0x17,0x50,0x20,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x80,0x4,0xfe,0x44,0x44,0xa4,0x14,0xe4,0x28,0x10,
++0x10,0x10,0x17,0x10,0xfd,0x10,0x17,0x18,0x30,0xdf,0x10,0x11,0x10,0x10,0x50,0x23,0x80,0x48,0xfc,0x0,0x10,0xa0,0xfc,0x80,0x84,0xfe,0x90,0x10,0xa0,0x60,0x98,0x8,
++0x20,0x24,0x3e,0x20,0x20,0x26,0x78,0x2,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x80,0x88,0x98,0xe0,0x82,0x82,0x7e,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x4,0xe,0x78,0xb,0x8,0xfe,0x8,0x19,0x1c,0x2a,0x29,0x49,0x89,0x9,0x9,0x9,0x20,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x12,0x12,0x22,0x4f,0x82,0x12,0x1f,0x22,0x62,0xaf,0x22,0x22,0x23,0x3e,0x28,0x20,0x0,0x8,0x7c,0x80,0x0,0x4,0xfe,0x8,0x8,0x88,0x8,0x8,0xc8,0x8,0x28,0x10,
++0x0,0x78,0x48,0x50,0x51,0x62,0x55,0x49,0x49,0x49,0x69,0x51,0x41,0x41,0x42,0x44,0x40,0x40,0xa0,0xa0,0x10,0xe,0x14,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x4,0x4,0x7f,0x4,0xff,0x10,0x15,0x3f,0x64,0xbf,0x24,0x3f,0x24,0x24,0x3f,0x20,0x40,0x50,0x48,0x40,0xfe,0x40,0x40,0xa0,0x24,0x28,0x30,0x20,0x52,0x92,0x8a,0x4,
++0x8,0x8,0xa,0x7f,0x8,0x8,0x9,0xff,0x10,0x10,0x20,0x24,0x42,0x7e,0x1,0x2,0x20,0x20,0x20,0x20,0x24,0xfe,0x24,0xa4,0x24,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x4,0x4,0xff,0x4,0x4,0x7f,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x40,0x44,0xfe,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0x48,0x28,0x10,0x0,0x0,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x31,0x38,0x54,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x20,0x20,0x24,0xfe,0x20,0x28,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x1,0x1,0xff,0x3,0x5,0x9,0x11,0x21,0xc1,0x1,0x0,0x24,0x22,0x22,0x40,0x0,0x0,0x4,0xfe,0x80,0x40,0x20,0x10,0xe,0x4,0x0,0x0,0x90,0x48,0x44,0x4,
++0x10,0x10,0x17,0x10,0xfb,0x10,0x17,0x18,0x33,0xd0,0x12,0x12,0x12,0x13,0x54,0x28,0x40,0x48,0xfc,0x40,0xf8,0x48,0xfe,0x48,0xf8,0x40,0x48,0x7c,0x40,0x40,0xc6,0x3c,
++0x0,0x0,0x7f,0x48,0x4b,0x48,0x7f,0x48,0x4b,0x78,0x4a,0x4a,0x4a,0x7b,0x44,0x8,0x40,0x48,0xfc,0x40,0xf8,0x48,0xfe,0x48,0xf8,0x40,0x48,0x7c,0x40,0x40,0xc6,0x3c,
++0x20,0x13,0x12,0xff,0x2,0x4b,0x48,0x49,0x4a,0x54,0x12,0x1e,0xe2,0x43,0x0,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x80,0x4,0xfe,0x44,0x44,0xa4,0x4,0xe4,0x28,0x10,
++0x0,0x40,0x30,0x17,0x0,0x80,0x67,0x20,0x8,0x13,0xe2,0x22,0x22,0x22,0x23,0x22,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0x10,0x23,0x44,0x78,0x9,0x10,0x20,0x7d,0x1,0x1,0xd,0x71,0x21,0x1,0x20,0x20,0x24,0xfe,0x20,0x20,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x11,0x3e,0x24,0x48,0xbe,0x2b,0x2a,0x3e,0x2a,0x2a,0x3f,0x2a,0x2a,0x42,0x86,0x4,0xfe,0x44,0x44,0x54,0x88,0x10,0x50,0x7c,0x90,0x14,0xfe,0x10,0x10,0x10,0x10,
++0x10,0x11,0x11,0x15,0xff,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x87,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xfe,0x0,
++0x0,0x0,0x0,0xff,0x0,0x12,0x12,0x12,0x7f,0x12,0x12,0x12,0x12,0x22,0x41,0x2,0x40,0x50,0x48,0xfe,0x40,0x40,0x44,0x44,0x48,0x48,0x50,0x20,0x62,0x92,0xa,0x4,
++0x4,0xff,0x4,0x10,0x7f,0x10,0x7c,0x13,0x7c,0x11,0x39,0x35,0x51,0x91,0x11,0x11,0x44,0xfe,0x40,0x90,0xfc,0x90,0x94,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,
++0x8,0x8,0xff,0x8,0x9,0x2,0x4,0x8,0x14,0x24,0xc4,0x4,0x4,0x8,0x10,0x20,0x20,0x24,0xfe,0x20,0x20,0x80,0x40,0x20,0x50,0x4e,0x44,0x40,0x40,0x40,0x40,0x40,
++0x0,0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x2,0x4,0xc,0x34,0xc4,0x4,0x8,0x10,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x80,0x60,0x50,0x4e,0x44,0x40,0x40,0x40,
++0x9,0x9,0x9,0x17,0x11,0x31,0x5f,0x90,0x13,0x12,0x12,0x13,0x12,0x12,0x13,0x12,0x10,0x10,0x10,0xfc,0x10,0x14,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x1,0x1,0x2,0x4,0x8,0x10,0x24,0xc4,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x0,0x0,0x0,0x80,0x40,0x20,0x10,0x4e,0x44,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x0,0x1f,0x10,0x90,0x50,0x51,0x12,0x3d,0x51,0xd1,0x11,0x22,0x22,0x44,0x0,0x80,0x44,0xfe,0x40,0x40,0xa0,0x10,0xe,0x14,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0x40,0x20,0x2f,0x0,0xe5,0x25,0x25,0x2f,0x25,0x25,0x2d,0x35,0x24,0x9,0x0,0x20,0x28,0x24,0xfe,0x20,0x20,0x24,0x24,0xe8,0x28,0x30,0x20,0x60,0x92,0xa,0x4,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x20,0x2f,0x28,0x28,0x2f,0x28,0x48,0x8f,0x8,0x8,0xfc,0x8,0x8,0xf8,0x80,0x80,0x88,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x8,
++0x1,0x1,0x1,0x3f,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x1,0x1,0x1,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x28,0x10,0x0,0x0,0x0,
++0x10,0x14,0x3e,0x49,0x80,0x3e,0x22,0x23,0x3e,0x22,0x22,0x3e,0x22,0x22,0x4a,0x85,0x40,0x48,0xfc,0x10,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x94,0x8,
++0x0,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x40,0x0,0x10,0x38,0xc0,0x0,0x0,0x4,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x1,0x1,0x2,0x4,0x8,0x10,0x2f,0xc1,0x1,0x1f,0x1,0x11,0x9,0x5,0x7f,0x0,0x0,0x0,0x80,0x40,0x20,0x50,0xee,0x4,0x0,0xf0,0x0,0x10,0x20,0x48,0xfc,0x0,
++0x1,0x1,0x2,0x4,0x8,0x12,0x21,0xc0,0x0,0x1f,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x80,0x40,0x20,0x10,0x8e,0x84,0x0,0xf0,0x10,0x20,0x20,0x40,0x80,0x0,
++0x0,0x40,0x37,0x10,0xf,0x80,0x67,0x20,0x8,0x17,0xe0,0x20,0x2f,0x20,0x20,0x20,0x80,0x88,0xfc,0x88,0xfe,0x88,0xf8,0x80,0x90,0xf8,0x80,0x88,0xfc,0x80,0x80,0x80,
++0x41,0x31,0x17,0x1,0xfb,0xd,0x11,0x29,0x73,0xa8,0x2f,0x20,0x21,0x22,0x24,0x20,0x10,0x10,0xfc,0x10,0xb8,0x56,0x10,0x10,0xf8,0x0,0xfe,0x40,0x50,0x4c,0x44,0xc0,
++0x4,0x25,0x25,0x24,0x24,0x24,0x7,0x4,0x1f,0x1,0x2,0x7f,0x1,0x9,0x11,0x63,0x0,0xf8,0x10,0xa0,0x40,0xb0,0xe,0x24,0xc0,0x0,0x10,0xf8,0x8,0x20,0x18,0x8,
++0x20,0x20,0x3b,0x42,0x83,0x7a,0x23,0x20,0xff,0x24,0x24,0x24,0x2c,0x30,0x20,0x0,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfc,0x44,0x44,0x44,0x54,0x48,0x40,0x40,
++0x8,0x8,0xb,0x10,0x11,0x31,0x51,0x91,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x16,0x0,0x4,0xfe,0x4,0x4,0x4,0x8,0x8,0x88,0x90,0x50,0x20,0x50,0x88,0x6,0x4,
++0x41,0x21,0x2f,0x1,0x1,0xe0,0x27,0x24,0x27,0x20,0x27,0x20,0x2b,0x30,0x2f,0x0,0x10,0x14,0xfe,0x10,0xf0,0x44,0xfe,0x44,0xfc,0x40,0xfc,0x40,0xf8,0x40,0xfe,0x0,
++0x2,0x42,0x22,0x2f,0x2,0x2,0xe2,0x22,0x2f,0x22,0x22,0x22,0x24,0x50,0x8f,0x0,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x26,0xfc,0x0,
++0x22,0x22,0xff,0x22,0x3e,0x8,0x7f,0x49,0x49,0x7f,0x8,0xff,0x8,0x8,0x9,0x8,0x2,0x6,0xf8,0x40,0x40,0x44,0x7e,0x48,0x48,0x48,0x48,0xc8,0x48,0x88,0x8,0x8,
++0x0,0x7f,0x4,0x24,0x14,0x4,0xff,0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x8,0xfc,0x40,0x48,0x50,0x44,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x8,0x8,0x7e,0x18,0x2c,0x4b,0x88,0x0,0x3f,0x0,0xff,0x1,0x9,0x11,0x25,0x2,0x20,0x28,0xfc,0x70,0xa8,0x24,0x22,0x0,0xf8,0x0,0xfe,0x0,0x20,0x18,0x8,0x0,
++0x0,0x40,0x33,0x12,0x2,0x2,0xf3,0x12,0x12,0x12,0x12,0x14,0x10,0x28,0x44,0x3,0x8,0x1c,0xe0,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x6,0xfc,
++0x10,0x11,0x11,0x15,0x59,0x51,0x51,0x92,0x12,0x14,0x10,0x10,0x28,0x44,0x84,0x0,0x8,0xfc,0x8,0x8,0xf8,0x28,0x20,0x10,0xe,0xc4,0x20,0x10,0xc0,0x30,0x8,0x0,
++0x40,0x33,0x10,0x1,0x80,0x63,0x20,0x7,0x14,0x29,0xe1,0x20,0x20,0x20,0x23,0x2c,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x2,0xf4,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x0,0x1f,0x10,0x10,0x1f,0x11,0x10,0x10,0x10,0x16,0x21,0x40,0x86,0x1,0x0,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x80,0x80,0x40,0x20,0x90,0xe,0x4,0x80,0xc0,0x40,
++0x0,0xff,0x2,0x4,0xc,0x12,0x21,0x40,0xfe,0x8,0x8,0x8,0xf,0x71,0x22,0x0,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x84,0x4,0x28,0x10,
++0x12,0x12,0xff,0x12,0x0,0x7f,0x12,0x12,0xff,0x12,0x12,0x12,0x12,0x22,0x42,0x2,0x4,0x84,0xc4,0x24,0x24,0xa4,0x24,0xa4,0xe4,0x24,0x24,0x24,0x24,0x4,0x14,0x8,
++0x8,0x8,0x8,0xfe,0x8,0x7e,0x42,0x42,0x42,0x7e,0x14,0x15,0x16,0x24,0x41,0x82,0x20,0x20,0x24,0xfe,0x20,0xfc,0x84,0x84,0x84,0xfc,0x50,0x50,0x50,0x92,0x12,0xe,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x0,0x1,0xe,0x70,0x1f,0x1,0x1,0x1,0xff,0x0,0x40,0x44,0xfe,0x40,0x0,0xf8,0x20,0xc0,0x38,0x6,0xf0,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x8,0x7f,0x48,0x4b,0x48,0x7f,0x48,0x4b,0x7a,0x4b,0x4a,0x4b,0x7a,0x4a,0x2,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x28,0x10,
++0xf,0x8,0x8,0xf,0x8,0x8,0xf,0x8,0x7e,0x42,0x42,0x7e,0x42,0x42,0x7e,0x42,0xe0,0x20,0x20,0xe0,0x20,0x20,0xe0,0x24,0xfe,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,
++0x10,0x10,0x1e,0x25,0x48,0xbe,0x2a,0x2a,0x3e,0x2a,0x2a,0x3e,0x0,0xf,0x70,0x20,0x40,0x20,0x24,0xfe,0x8,0xfc,0x88,0x88,0x88,0xf8,0x20,0x70,0xac,0x24,0xa0,0x40,
++0x2,0x1,0x1,0xff,0x0,0x1f,0x10,0x10,0x10,0x1f,0x1,0x9,0x9,0x11,0x25,0x2,0x0,0x0,0x4,0xfe,0x10,0xf8,0x10,0x10,0x10,0xf0,0x0,0x40,0x30,0x18,0x8,0x0,
++0x10,0x10,0x17,0x10,0x58,0x57,0x52,0x92,0x12,0x13,0x10,0x11,0x12,0x14,0x11,0x10,0x80,0x44,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x10,0x10,0x93,0x54,0x19,0xfc,0x13,0x10,0x39,0x35,0x51,0x91,0x11,0x11,0x11,0x11,0x20,0x24,0xfe,0x20,0xfc,0x20,0xfe,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x4,0x4,0xc,
++0x10,0x13,0x92,0x54,0x19,0xfd,0x11,0x31,0x39,0x55,0x90,0x10,0x10,0x10,0x11,0x16,0x4,0xfe,0x20,0x24,0xfe,0x24,0xfc,0x24,0xfc,0x24,0xa0,0x40,0x60,0x90,0xe,0x4,
++0x10,0x13,0x20,0x20,0x44,0xfc,0x8,0x13,0x20,0x41,0xfc,0x0,0x1c,0xe0,0x47,0x0,0x0,0xfc,0x8,0x10,0x30,0x48,0x86,0x2,0x0,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x8,0x8,0x8,0x8,0x7f,0x8,0x8,0x8,0x8,0xff,0x8,0x8,0x8,0x8,0x10,0x20,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,
++0x14,0x7f,0x10,0x3f,0x55,0x1d,0x3,0xff,0x0,0x1f,0x0,0x1f,0x0,0x1f,0x10,0x1f,0x40,0x7c,0xc8,0x28,0x10,0x6e,0x4,0xfe,0x0,0xf0,0x0,0xf0,0x0,0xf0,0x10,0xf0,
++0x1f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x0,0x1f,0x10,0x10,0x1f,0x9,0x11,0x65,0x2,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x20,0x18,0x8,0x0,
++0x0,0xfd,0x4,0x8,0x18,0x26,0xc2,0x0,0x7c,0x10,0x10,0x10,0x1e,0xe0,0x40,0x3,0x4,0xfe,0x10,0x24,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0xa4,0x20,0x58,0x84,0x2,
++0x8,0x8,0x7e,0x9,0x3e,0x8,0xff,0x0,0x3f,0x22,0x3e,0x22,0x3e,0x22,0x22,0x26,0x40,0x40,0xf8,0x10,0x24,0xfe,0x24,0x24,0xfe,0x24,0x24,0xfc,0x24,0x20,0xa0,0x40,
++0x20,0x20,0x27,0x21,0x20,0xff,0x20,0x23,0x22,0x23,0x22,0x3b,0xe1,0x41,0x2,0xc,0x80,0x48,0xfc,0x10,0xa4,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x20,0x22,0x22,0x1e,
++0x12,0x12,0xff,0x12,0x20,0x3f,0x41,0xbd,0x25,0x25,0x25,0x25,0x3d,0x21,0x5,0x2,0x20,0x20,0xa0,0x24,0x7e,0x84,0x44,0x44,0x48,0x28,0x28,0x10,0x28,0x28,0x46,0x84,
++0x20,0x20,0x27,0x79,0x40,0x87,0x78,0x23,0x22,0xfb,0x22,0x23,0x29,0x31,0x22,0xc,0x80,0x48,0xfc,0x10,0xa4,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x20,0x22,0x22,0x1e,
++0x8,0xb,0x10,0x20,0x40,0x8,0x11,0x36,0x50,0x93,0x10,0x10,0x10,0x10,0x17,0x10,0x0,0xf8,0x10,0x20,0x60,0x98,0xe,0x2,0x0,0xf8,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x0,0x1f,0x10,0x57,0x30,0x10,0x13,0x3c,0x50,0x97,0x10,0x20,0x20,0x4f,0x80,0x80,0x44,0xfe,0x0,0xf8,0x30,0xc0,0x38,0x6,0x0,0xf8,0x40,0x40,0x44,0xfe,0x0,
++0x20,0x10,0x13,0xfc,0x3,0x48,0x4f,0x48,0x4b,0x12,0x13,0x1e,0xe3,0x42,0x2,0x2,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x28,0x10,
++0x2,0x1,0x3f,0x8,0x4,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x14,0x4,0x8,0x70,0x0,0x10,0xf8,0x20,0x44,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x50,0x42,0x42,0x3e,
++0x2,0x1,0x3f,0x8,0x4,0xff,0x0,0x1f,0x10,0x10,0x1f,0x14,0x4,0x4,0x8,0x70,0x0,0x10,0xf8,0x20,0x44,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x50,0x40,0x42,0x42,0x3e,
++0x1,0x1,0x83,0x64,0x28,0x7,0x10,0x20,0x3f,0xe0,0x20,0x2f,0x20,0x20,0x22,0x21,0x0,0x0,0xf0,0x20,0x48,0xfc,0x88,0x88,0xfe,0x88,0x88,0xf8,0x88,0x80,0x80,0x0,
++0x10,0x10,0x13,0x12,0x56,0x5a,0x52,0x92,0x12,0x12,0x12,0x12,0x2a,0x46,0x82,0x2,0x0,0x4,0xfe,0x4,0x4,0xf4,0x94,0x94,0x94,0x94,0x94,0xf4,0x94,0x4,0x14,0x8,
++0x2,0x1,0x7f,0x44,0x88,0x3f,0x4,0xff,0x4,0x3f,0x8,0xf,0x18,0x28,0xcf,0x8,0x0,0x0,0xfe,0x42,0x24,0xf0,0x14,0xfe,0x10,0xf0,0x0,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x17,0x11,0xf9,0x17,0x11,0x1b,0x33,0xd5,0x19,0x11,0x11,0x11,0x51,0x21,0x10,0xd0,0x10,0x12,0x54,0xb8,0x10,0x10,0x90,0x50,0x10,0x10,0x28,0x46,0x84,0x0,
++0x2,0x1,0x7f,0x44,0x88,0x12,0x2,0x3f,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x60,0x0,0x0,0xfe,0x42,0x34,0x10,0x20,0xf0,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x20,0x21,0x45,0xfd,0x9,0x11,0x21,0xfd,0x41,0x0,0x1c,0xe0,0x40,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x78,0x88,0x8,0x8,0x8,0x8,0x8,
++0x0,0x4,0xfe,0x10,0x11,0x11,0xfe,0x10,0x10,0x10,0x1e,0xf0,0x40,0x1,0x2,0xc,0x40,0x40,0x88,0xfc,0x8,0x8,0x10,0x10,0x20,0x20,0x50,0x50,0x88,0xe,0x4,0x0,
++0x4,0x4,0x7c,0x4,0x4,0x4,0x7c,0x4,0x4,0x4,0x7c,0x4,0x4,0x4,0xff,0x0,0x40,0x48,0x7c,0x40,0x40,0x48,0x7c,0x40,0x40,0x48,0x7c,0x40,0x40,0x44,0xfe,0x0,
++0x4,0x4,0x7,0x8,0x8,0x10,0x20,0x0,0x1,0x1,0x2,0x4,0x8,0x30,0xc0,0x0,0x0,0x40,0xe0,0x40,0x40,0x80,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0xe,0x4,0x0,
++0x4,0x7,0x8,0x10,0x21,0x2,0xc,0x11,0x69,0x9,0x9,0x11,0x2,0x4,0x18,0xe0,0x20,0xf0,0x20,0x40,0x80,0x60,0x10,0xc,0x24,0x30,0x20,0x40,0x0,0x40,0x30,0xe,
++0x4,0x4,0x4,0x4,0xff,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x10,0x20,0xc0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x40,0x2f,0x20,0x0,0x87,0x64,0x24,0xc,0x15,0x26,0xe4,0x25,0x24,0x24,0x27,0x24,0x4,0xfe,0xa0,0xa4,0xfe,0xa4,0xa4,0xa4,0x1c,0x4,0x4,0xf4,0x4,0x4,0xfc,0x4,
++0x0,0x3f,0x20,0x2f,0x29,0x29,0x2f,0x29,0x29,0x2f,0x2a,0x29,0x2e,0x48,0x41,0x82,0x4,0xfe,0x0,0x7c,0x10,0x50,0x50,0x54,0x7e,0x20,0x30,0x50,0xd2,0x92,0xe,0x0,
++0x10,0x14,0x12,0x10,0xfe,0x11,0x92,0x54,0x18,0x30,0x54,0xd2,0x10,0x10,0x50,0x23,0x40,0x40,0x40,0x44,0xfe,0x8,0x88,0x88,0x90,0x50,0x50,0x20,0x50,0x50,0x8e,0x4,
++0x0,0x20,0x23,0x22,0x22,0x22,0x22,0x23,0x22,0x22,0x22,0x22,0x22,0x23,0x22,0x20,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x0,0x1,0x6,0x78,0x40,0x40,0x40,0x44,0x7e,0x40,0x40,0x40,0x40,0x40,0x7f,0x40,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x3e,0x20,0x3c,0x20,0x3f,0x0,0x1f,0x11,0x1f,0x11,0x1f,0x1,0x7f,0x2,0xc,0x70,0x78,0x8,0x78,0x8,0xf8,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0xf8,0x8,0x48,0x30,
++0x10,0x10,0x1f,0x21,0x62,0x14,0x8,0x14,0x23,0xc0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x40,0x40,0x40,0x50,0x4c,0x44,0x40,0x46,0xfc,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x8,0x2,0xff,0x0,0x3f,0x22,0x22,0x22,0x3e,0x8,0x2a,0x49,0x88,0x29,0x12,0x40,0x50,0x48,0x40,0x44,0xfe,0x40,0x50,0x50,0x50,0x50,0x50,0x52,0x92,0xe,0x0,
++0x1,0x0,0x1f,0x11,0x91,0x51,0x52,0x14,0x30,0x50,0xd0,0x11,0x22,0x24,0x48,0x10,0x0,0x84,0xfe,0x0,0x0,0xf8,0x10,0x20,0x20,0x40,0xc0,0x20,0x10,0x8,0xe,0x4,
++0x28,0x28,0xfe,0x29,0x3a,0x11,0x7c,0x54,0x57,0x7c,0x10,0xfe,0x11,0x12,0x10,0x10,0x80,0x84,0xfe,0x4,0x44,0x54,0xe4,0x44,0xfc,0x44,0xe4,0xd4,0x54,0x44,0x54,0x48,
++0x10,0x10,0x11,0x11,0xfe,0x14,0x11,0x1d,0x31,0xd1,0x11,0x11,0x11,0x11,0x50,0x20,0x80,0x80,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0x24,0xe4,0x4,0x14,0x8,
++0x0,0x45,0x2d,0x11,0x29,0x49,0x89,0x19,0x29,0x49,0x89,0x9,0x9,0x9,0x57,0x20,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xfe,0x0,
++0x1,0x0,0x1f,0x10,0x93,0x52,0x12,0x13,0x32,0x52,0xd3,0x12,0x12,0x22,0x2f,0x40,0x0,0x84,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x8,0xfe,0x0,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x20,0x20,0x2f,0x28,0x48,0x48,0x8f,0x8,0x8,0xfc,0x8,0x8,0xf8,0x80,0x84,0xfe,0x80,0x88,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x8,0xfc,0x9,0x49,0x4a,0x4c,0x49,0x49,0x49,0x7d,0x5,0x1d,0xe5,0x4,0x28,0x10,0x80,0x80,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0xe4,0x24,0x4,0x14,0x8,
++0x8,0x8,0xff,0x8,0x10,0x1f,0x22,0x52,0x8a,0x7f,0x6,0xb,0xa,0x12,0x22,0x2,0x20,0x24,0xfe,0x20,0x4,0xfe,0x4,0x44,0x84,0xf4,0x4,0x84,0xc4,0x44,0x14,0x8,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x20,0x27,0x24,0x24,0x27,0x24,0x40,0x80,0x8,0xfc,0x8,0x8,0xf8,0x0,0x4,0xfe,0x4,0xe4,0x24,0x24,0xe4,0x4,0x14,0x8,
++0x0,0x9,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0xf,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xfe,0x0,
++0x20,0x23,0x2a,0x3e,0x52,0x93,0x12,0xfe,0x12,0x12,0x13,0x2a,0x26,0x42,0x83,0x0,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x4,0xfe,0x0,
++0x22,0x19,0x9,0x0,0xff,0x4,0x9,0x11,0x2f,0xc1,0x1,0x3f,0x1,0x1,0x1,0x1,0x8,0x18,0x20,0x44,0xfe,0x40,0x20,0x10,0xee,0x4,0x10,0xf8,0x0,0x0,0x0,0x0,
++0x40,0x33,0x12,0x2,0x82,0x63,0x22,0xa,0x12,0x23,0xe2,0x22,0x22,0x22,0x3f,0x20,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x14,0xfe,0x0,
++0xff,0x22,0x3e,0x22,0x3e,0x22,0xff,0x2,0x3f,0x5,0x9,0x33,0x5,0x9,0x71,0x1,0x80,0xfe,0x44,0x28,0x10,0x28,0xc6,0x70,0x88,0x18,0xa0,0x40,0x30,0xe,0x4,0x0,
++0x10,0x13,0x12,0x12,0xfe,0x13,0x16,0x1a,0x32,0xd2,0x13,0x12,0x12,0x12,0x53,0x20,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x4,0xfe,0x0,
++0x10,0x13,0x12,0x12,0xff,0x12,0x16,0x1b,0x32,0xd2,0x13,0x15,0x15,0x15,0x59,0x21,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0xfe,0x20,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x3f,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x3f,0x0,0x10,0xf8,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x0,0x0,0x8,0xfc,0x0,
++0x0,0xf,0x8,0x8,0xf,0x8,0xf,0x8,0xf,0x8,0x8,0xff,0x4,0xc,0x10,0x20,0x20,0xf0,0x20,0x20,0xe0,0x20,0xe0,0x20,0xe0,0x20,0x24,0xfe,0x40,0x20,0x18,0x8,
++0x0,0x7d,0x45,0x45,0x45,0x7d,0x11,0x11,0x51,0x5d,0x51,0x51,0x5d,0xf1,0x41,0x0,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x7d,0x45,0x45,0x45,0x7d,0x11,0x11,0x51,0x5d,0x51,0x52,0x5e,0xe4,0x48,0x0,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0xfe,0x20,0x24,0xfe,0x84,0x84,0x84,0xfc,0x84,
++0x20,0x21,0x3d,0x41,0x81,0x7d,0x21,0x21,0xfd,0x21,0x25,0x2a,0x32,0x24,0x8,0x0,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0xfe,0x20,0x24,0xfe,0x84,0x84,0x84,0xfc,0x84,
++0x8,0xb,0xa,0x12,0x13,0x32,0x53,0x92,0x13,0x12,0x12,0x1f,0x10,0x11,0x13,0x14,0x8,0xfc,0x8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0xfe,0x0,0x10,0xc,0x4,
++0x4,0x4,0x8,0xf,0x10,0x20,0x4f,0x8,0x8,0x8,0x8,0xf,0x8,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x4,0x44,0xe4,0x44,0x44,0x44,0x44,0xc4,0x44,0x4,0x28,0x10,
++0x10,0x13,0x12,0x12,0x5b,0x56,0x53,0x92,0x13,0x12,0x12,0x1f,0x10,0x11,0x13,0x14,0x8,0xfc,0x8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0xfe,0x0,0x10,0xc,0x4,
++0x10,0x11,0x11,0x15,0x59,0x51,0x51,0x91,0x11,0x11,0x11,0x29,0x25,0x45,0x81,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x3f,0x20,0x20,0x3f,0x24,0x25,0x3f,0x24,0x24,0x3f,0x50,0x50,0x50,0x9f,0x10,0x84,0xc4,0xa4,0xa4,0xa4,0x24,0x24,0xa4,0x24,0xa4,0xe4,0xa4,0x84,0x84,0x94,0x88,
++0x10,0x11,0x11,0x11,0xfd,0x10,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x11,0x51,0x21,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0xc,
++0x2,0x7f,0x42,0x42,0x7e,0x0,0x7e,0x42,0x42,0x7e,0x42,0x42,0x7f,0x42,0x4a,0x44,0x20,0x44,0xfe,0x84,0xa4,0x84,0x94,0x88,0x80,0xfe,0x2,0x12,0xfa,0x2,0x14,0x8,
++0x10,0x11,0x11,0x11,0xfd,0x24,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x81,0x1,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x14,0x8,
++0x8,0xa,0x9,0x10,0x17,0x30,0x5f,0x91,0x12,0x15,0x19,0x11,0x11,0x11,0x11,0x10,0x40,0x48,0x50,0x40,0xfc,0xa0,0xfe,0x10,0x8,0xf6,0x14,0x10,0x50,0x24,0x4,0xfc,
++0x1,0x11,0x9,0x7f,0x2,0xff,0x4,0x8,0x1f,0x28,0xcf,0x8,0xf,0x8,0xf,0x8,0x0,0x10,0x20,0xfc,0x0,0xfe,0x40,0x20,0xf0,0x2e,0xe4,0x20,0xe0,0x20,0xe0,0x20,
++0x1,0x11,0x9,0x1,0x7f,0x2,0xff,0x4,0x8,0x1f,0x28,0xc8,0x9,0x8,0x8,0x7,0x0,0x10,0x20,0x8,0xfc,0x80,0xfe,0x40,0x20,0xf0,0x2e,0x24,0x20,0xc8,0x8,0xf8,
++0x8,0x9,0x11,0x21,0x45,0xfc,0x9,0x11,0x21,0xfd,0x41,0x1,0x1d,0xe1,0x41,0x1,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x14,0x8,
++0x20,0x2f,0x28,0x2a,0xf9,0x2f,0x38,0x6a,0xaa,0x2a,0x2b,0x2a,0x28,0x31,0xa1,0x42,0x4,0xfe,0x8,0x28,0x4e,0xf2,0xa0,0xa8,0xa8,0xa8,0xe8,0x94,0x94,0x24,0x22,0x40,
++0x27,0x26,0x25,0x24,0xff,0x20,0x23,0x26,0x3b,0xe2,0x22,0x20,0x23,0x20,0xa0,0x47,0xbc,0xb4,0xac,0xa4,0xbc,0x40,0xfc,0x40,0xf8,0x40,0x7c,0x0,0xf8,0x90,0x60,0x9e,
++0x10,0x10,0x10,0x10,0xff,0x10,0x14,0x18,0x30,0xd7,0x10,0x11,0x11,0x12,0x54,0x28,0x80,0x80,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0xfe,0x80,0x40,0x20,0x10,0xe,0x4,
++0x20,0x27,0x24,0x24,0xff,0x24,0x25,0x2d,0x35,0xe5,0x24,0x25,0x25,0x29,0xb1,0x41,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0x24,0x24,0xfc,0x20,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x17,0x14,0x24,0x27,0x64,0xa5,0x25,0x25,0x25,0x24,0x25,0x25,0x29,0x31,0x21,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0x24,0x24,0xfc,0x20,0x24,0x24,0x24,0xfc,0x4,
++0x0,0x7f,0x11,0x9,0x7f,0x44,0x7f,0x0,0x7e,0x43,0x7e,0x42,0x7e,0x44,0x7e,0x2,0x38,0xd0,0x10,0x24,0xfe,0x44,0xfc,0x8,0x8,0xfe,0x8,0x88,0x48,0x8,0x28,0x10,
++0x12,0x9,0x9,0x7f,0x40,0x80,0x1f,0x10,0x11,0x11,0x11,0x12,0x12,0x4,0x8,0x70,0x10,0x10,0x20,0xfe,0x2,0x14,0xf8,0x10,0x10,0x10,0x90,0x90,0x90,0x84,0x84,0x7c,
++0x0,0x40,0x30,0x10,0x7,0x8,0x10,0x10,0x20,0xef,0x20,0x21,0x21,0x22,0x24,0x28,0x80,0x80,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0xfe,0x80,0x40,0x20,0x10,0xe,0x4,
++0x0,0x40,0x30,0x10,0x7,0x0,0xf0,0x10,0x10,0x1f,0x10,0x15,0x19,0x12,0x4,0x8,0x80,0x80,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0xfe,0x80,0x40,0x20,0x10,0xe,0x4,
++0x10,0x10,0x10,0x20,0x45,0xff,0x9,0x11,0x21,0xfd,0x41,0x1,0x1d,0xe1,0x41,0x0,0x40,0x40,0x78,0x90,0x24,0xfe,0x24,0x24,0x24,0xfc,0x4,0x0,0x0,0x2,0x2,0xfe,
++0x10,0x10,0x10,0x10,0x11,0xfd,0x12,0x10,0x10,0x10,0x10,0x1d,0xf0,0x40,0x0,0x0,0x80,0x80,0x84,0xfe,0x4,0x4,0x84,0x44,0x14,0x24,0x44,0x84,0x84,0x4,0x28,0x10,
++0x8,0x8,0xff,0x8,0x7f,0x40,0x41,0x4f,0x41,0x7f,0x45,0x49,0x51,0x41,0x7f,0x40,0x20,0x24,0xfe,0x20,0xfc,0x44,0xe4,0x4,0x24,0xf4,0x44,0x34,0x14,0x4,0xfc,0x4,
++0x10,0x10,0x14,0x1e,0x21,0x41,0xbe,0x10,0x10,0x7c,0x10,0x11,0x14,0x18,0x10,0x0,0x80,0x80,0x84,0xfe,0x4,0x4,0x84,0x44,0x14,0x24,0x44,0x84,0x84,0x4,0x28,0x10,
++0x0,0x7f,0x42,0x82,0x3f,0x4,0x9,0x11,0x3f,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x0,0xfe,0x2,0x14,0xf8,0x0,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x4,0x4,0xff,0x4,0x4,0x3f,0x8,0x8,0x1f,0x18,0x28,0x48,0x8f,0x8,0x10,0xf8,0x10,0x14,0xfe,0x10,0x10,0xf0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x10,0x11,0x57,0x54,0x55,0x56,0x54,0x55,0x56,0x7c,0x44,0x0,0x1,0x6,0x40,0x40,0x90,0x8,0xfc,0x90,0xc,0x84,0xf8,0x88,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x8,0x8,0x8,0x11,0x17,0x31,0x52,0x95,0x11,0x12,0x13,0x14,0x18,0x10,0x11,0x16,0x40,0x40,0x90,0x8,0xfc,0x10,0xc,0x4,0xf0,0x10,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x0,0x40,0x30,0x10,0xff,0x0,0x49,0x4a,0x48,0x49,0x51,0x12,0x1c,0xe0,0x40,0x3,0x20,0x20,0x48,0x84,0xfe,0x88,0x6,0x82,0xf8,0x8,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x40,0x30,0x10,0x1,0x87,0x61,0x22,0x5,0x11,0x22,0xe3,0x24,0x28,0x20,0x21,0x26,0x40,0x40,0x90,0x8,0xfc,0x10,0xc,0x4,0xf0,0x10,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x0,0x7f,0x11,0x11,0xff,0x11,0x11,0x7f,0x20,0x41,0xbf,0x21,0x21,0x21,0x3f,0x21,0x0,0x7c,0x44,0x44,0xc8,0x48,0x50,0x48,0x44,0x42,0xc2,0x62,0x54,0x48,0x40,0x40,
++0x8,0xfc,0x8,0x48,0x4b,0x48,0x49,0x4a,0x48,0x7d,0x6,0x4,0x34,0xc4,0x14,0xb,0x20,0x20,0x48,0x84,0xfe,0x88,0x6,0x82,0xf8,0x8,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x0,0x0,0xf7,0x94,0x98,0x91,0x92,0x90,0x91,0x9e,0x93,0xf2,0x92,0x2,0x3,0x2,0x80,0x40,0xfe,0x82,0xf4,0x10,0xa0,0x40,0xb0,0xe,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x4,0x74,0x54,0x5f,0x54,0x54,0x54,0x54,0x54,0x54,0x74,0x48,0xa,0x11,0x20,0x0,0x0,0x4,0xbe,0xe4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xbc,0x24,0x0,
++0x2,0x2,0x3,0x2,0x2,0x2,0xff,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x20,0xf0,0x0,0x0,0x4,0xfe,0x0,0x0,0x80,0x60,0x30,0x10,0x0,0x0,0x0,
++0x0,0x8,0x7c,0x49,0x4b,0x4c,0x48,0x48,0x49,0x4e,0x49,0x79,0x49,0x1,0x1,0x1,0x80,0x80,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,0x4,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x7f,0x8,0x8,0x8,0x8,0x8,0xff,0x8,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x10,0x12,0x12,0x13,0xfe,0x12,0x17,0x1a,0x30,0xd3,0x12,0x12,0x13,0x12,0x52,0x23,0x20,0x20,0x24,0xac,0x30,0xa2,0x22,0x1e,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,
++0x10,0x12,0x12,0x13,0xfe,0x12,0x3b,0x36,0x50,0x53,0x92,0x12,0x13,0x12,0x12,0x13,0x20,0x20,0x24,0xac,0x30,0xa2,0x22,0x5e,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,
++0x8,0x49,0x49,0x49,0x7f,0x2,0xff,0x2,0x2,0x7e,0x42,0x40,0x46,0x58,0x61,0x2,0x8,0x7c,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x8a,0x8a,0x6,0x0,
++0x20,0x27,0x24,0x24,0xb7,0xac,0xa4,0x27,0x24,0x24,0x25,0x24,0x27,0x24,0x20,0x21,0x4,0xbe,0x88,0xa8,0xa8,0xa8,0xa8,0xbe,0x8,0x10,0x18,0xa8,0xaa,0x4a,0x86,0x0,
++0x1,0x3f,0x4,0x4,0x4,0x4,0x4,0xff,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x84,0x4,0x24,0x24,0x24,0xa4,0xe4,0x24,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x11,0x11,0x17,0x11,0xfd,0x11,0x11,0x11,0x11,0x1f,0x12,0x1e,0xf3,0x42,0x3,0x0,0x10,0x10,0xfc,0x10,0xf0,0x10,0xf0,0x10,0x14,0xfe,0x0,0x90,0x8,0x0,0xfc,0x0,
++0x22,0x22,0x7f,0x22,0x3e,0x22,0x3e,0x22,0x22,0xff,0x54,0x62,0x40,0x7e,0x1,0x2,0x20,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0xa4,0x24,0x44,0x44,0x84,0x14,0x8,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x14,0x10,0x10,0x10,0x10,0x1c,0xe1,0x42,0x4,0x8,0x80,0x80,0x80,0xfc,0x4,0x8,0x40,0x40,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x0,0x4,0xfe,0x10,0x11,0x22,0x24,0x7e,0xa4,0x24,0x24,0x24,0x25,0x3e,0x24,0x8,0x80,0x80,0x80,0xfc,0x4,0x8,0x40,0x40,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x0,0x7f,0x2,0x7f,0x4,0xff,0x8,0x1f,0x30,0x5f,0x90,0x1f,0x10,0x10,0x1f,0x10,0x70,0x80,0x10,0xf8,0x0,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x1,0x0,0x3f,0x20,0x2f,0x20,0x3f,0x20,0x2f,0x28,0x24,0x22,0x44,0x48,0x92,0x1,0x0,0x84,0xfe,0x80,0xf8,0x88,0xfe,0x88,0xf8,0x80,0xc4,0xa8,0x90,0x8e,0x84,0x0,
++0x20,0x20,0x27,0x24,0xb7,0xac,0xa7,0xa4,0x27,0x24,0x25,0x24,0x25,0x2a,0x30,0x20,0x80,0x44,0xfe,0x40,0xfc,0x44,0xfe,0x44,0xfc,0x48,0x50,0xe0,0x50,0x4e,0x44,0xc0,
++0x20,0x20,0x27,0xac,0x77,0x24,0xff,0x24,0x77,0x6c,0xa5,0x24,0x25,0x2a,0x30,0x20,0x80,0x44,0xfe,0x40,0xfc,0x44,0xfe,0x44,0xfc,0x48,0x50,0xe0,0x50,0x4e,0x44,0xc0,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x14,0x18,0x30,0xd0,0x10,0x10,0x10,0x1f,0x50,0x20,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,0x0,
++0x10,0x10,0x10,0x17,0xfc,0x10,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x12,0x52,0x24,0x80,0x40,0x44,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x2,0x1,0x1,0xff,0x0,0x0,0xf,0x8,0x8,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x0,0x0,0x4,0xfe,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x10,0x17,0x54,0x58,0x51,0x91,0x11,0x11,0x11,0x29,0x25,0x42,0x82,0x4,0x80,0x40,0x44,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x2,0x2,0x3f,0x2,0x2,0xff,0x2,0x4,0xf,0x12,0x27,0x40,0x80,0x2,0x1,0x0,0x0,0x10,0xe0,0x40,0x84,0xfe,0x0,0x10,0xf8,0x0,0xf0,0x10,0x10,0x20,0x20,0xc0,
++0x10,0x10,0x13,0x10,0xfc,0x17,0x10,0x19,0x33,0xd4,0x19,0x10,0x10,0x11,0x50,0x20,0x80,0x88,0xf8,0x90,0xa4,0xfe,0x80,0x8,0xfc,0x80,0xf8,0x8,0x8,0x10,0x90,0x60,
++0x10,0x10,0x13,0x54,0x58,0x53,0x90,0x11,0x13,0x14,0x19,0x28,0x24,0x45,0x80,0x0,0x80,0x88,0xf8,0x90,0xa4,0xfe,0x80,0x8,0xfc,0x80,0xf8,0x8,0x8,0x10,0x90,0x60,
++0x11,0x1f,0x21,0xff,0x0,0x1f,0x10,0x1f,0x2,0x7e,0x2,0x3e,0x2,0x7e,0x2,0x2,0x20,0xf0,0x4,0xfe,0x0,0xf0,0x10,0xf0,0x80,0xfc,0x80,0xf8,0x80,0xfc,0x80,0x80,
++0x10,0x10,0x17,0x10,0x10,0xfd,0x11,0x11,0x11,0x11,0x11,0x1d,0xf1,0x40,0x0,0x0,0x0,0x4,0xfe,0x8,0x8,0xe8,0x28,0x28,0x28,0x28,0x28,0xe8,0x28,0x8,0x28,0x10,
++0x8,0x8,0x7f,0x8,0x0,0xff,0x0,0x1,0x1f,0x11,0x11,0x11,0x1f,0x11,0x0,0x0,0x20,0x28,0xfc,0x20,0x4,0xfe,0x20,0x20,0xa0,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x10,0x17,0x10,0xfc,0x11,0x39,0x35,0x51,0x51,0x91,0x11,0x11,0x10,0x10,0x10,0x0,0x4,0xfe,0x8,0x8,0xe8,0x28,0x28,0x28,0x28,0x28,0xe8,0x28,0x8,0x28,0x10,
++0x10,0x13,0x12,0x12,0xff,0x12,0x3a,0x37,0x50,0x5f,0x90,0x10,0x11,0x12,0x1c,0x10,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0xfe,0x40,0xe0,0x50,0x4e,0x44,0x40,
++0x0,0x4,0xff,0x10,0x10,0x21,0x20,0x7c,0xa5,0x24,0x25,0x25,0x25,0x3d,0x23,0x0,0x20,0x28,0xfc,0x20,0x24,0xfe,0x40,0x88,0xfc,0x0,0xfc,0x54,0x54,0x54,0xfe,0x0,
++0x0,0x7f,0x54,0x54,0x7d,0x55,0x55,0x7d,0x11,0xff,0x31,0x39,0x55,0x54,0x90,0x13,0x4,0xfe,0x40,0x84,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x8c,0x4,
++0x4,0xe,0xf8,0x8,0x8,0xfe,0x8,0x1c,0x1a,0x29,0x28,0x48,0x88,0x8,0x8,0x8,0x10,0x10,0x90,0x50,0x10,0x90,0x50,0x14,0x1e,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,
++0x1,0x1,0x7f,0x1,0x3f,0x0,0x7f,0x40,0x8f,0x8,0x8,0x8,0x8,0x8,0x10,0x60,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x22,0xf4,0x20,0x20,0x20,0x24,0x24,0x1c,0x0,
++0x0,0x0,0x8,0x7f,0x48,0x48,0x49,0x4b,0x48,0x48,0x48,0x79,0x4e,0x0,0x1,0x6,0x80,0x40,0x44,0xfe,0x40,0x80,0x8,0xf8,0x10,0x24,0x4c,0x90,0x20,0x50,0x8c,0x4,
++0x0,0xff,0x0,0x0,0x1f,0x10,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x0,0x0,0x4,0xfe,0x10,0x90,0xd0,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x10,0x10,0x50,0x20,
++0x0,0x47,0x34,0x17,0x84,0x67,0x22,0x3,0x14,0x24,0xe8,0x35,0x24,0x27,0x20,0x20,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x44,0x44,0xa4,0x14,0x4,0xe4,0x14,0x8,
++0x1,0x1,0xff,0x1,0x1,0x1f,0x10,0x10,0x10,0x1f,0x14,0x4,0x4,0x8,0x10,0x60,0x0,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x50,0x40,0x40,0x42,0x42,0x3e,
++0x8,0x4,0x4,0xff,0x4,0x8,0x10,0x7f,0x2,0x4,0x9,0x72,0x6,0x19,0xe0,0x0,0x4,0x4,0x84,0xc4,0x4,0xa4,0xa4,0x24,0x24,0xa4,0x24,0x24,0x4,0x84,0x94,0x8,
++0x2,0x1,0x7f,0x48,0x8f,0x8,0x14,0x23,0xc,0x30,0xcf,0x8,0x8,0x8,0xf,0x8,0x0,0x0,0xfe,0x2,0xf4,0x20,0x40,0x80,0x60,0x1e,0xe4,0x20,0x20,0x20,0xe0,0x20,
++0x0,0x43,0x22,0x22,0x3,0x2,0xe2,0x23,0x20,0x2f,0x20,0x29,0x32,0x24,0x8,0x0,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0xfe,0xe0,0x50,0x48,0x4e,0x44,0x40,
++0x1,0x9,0x9,0x9,0x9,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x10,0x0,0x10,0xf8,0x0,0x4,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x0,0x9,0x7d,0x49,0x49,0x4f,0x48,0x4b,0x4a,0x4b,0x4a,0x7b,0x4a,0x2,0x2,0x2,0x40,0x48,0x7c,0x40,0x44,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x3f,0x20,0x3f,0x20,0x3f,0x22,0x21,0x24,0x38,0x1,0x7f,0x1,0x1,0xff,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x8,0x90,0x60,0x1c,0x8,0xfc,0x0,0x4,0xfe,0x0,
++0x0,0x3f,0x20,0x3f,0x20,0x3f,0x22,0x21,0x24,0x38,0x2,0x51,0x50,0x90,0xf,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x8,0x90,0x60,0x1c,0x8,0x84,0x92,0x12,0xf0,0x0,
++0x10,0x10,0x10,0x17,0xfc,0x10,0x11,0x11,0x11,0x11,0x1d,0xf1,0x41,0x2,0x2,0x4,0x80,0x40,0x44,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x0,0x8,0x7c,0x4f,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x79,0x49,0x2,0x2,0x4,0x80,0x40,0x44,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x2,0x1,0x7f,0x40,0x84,0xc,0x10,0x20,0x0,0x3f,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0xfe,0x2,0x44,0x30,0x18,0x8,0x0,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x4,0xfe,0x10,0x10,0x10,0x10,0x1e,0xf1,0x42,0x0,0x52,0x51,0x50,0x90,0xf,0x0,0x10,0xf8,0x90,0x90,0xd0,0xb0,0x92,0x12,0xe,0x0,0x4,0x82,0x92,0x12,0xf0,0x0,
++0x0,0x7f,0x21,0x2,0xc,0x8,0x8,0xb,0x1c,0xe8,0x8,0x8,0x8,0x8,0x28,0x10,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x10,0x13,0x12,0xfc,0x10,0x15,0x18,0x30,0xd3,0x10,0x10,0x10,0x10,0x57,0x20,0x40,0x20,0xfe,0x2,0x54,0x88,0x4,0x0,0x8,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x13,0x12,0x13,0xfe,0x12,0x16,0x1a,0x32,0xd2,0x12,0x13,0x12,0x12,0x53,0x20,0x8,0xfc,0x0,0x8,0x88,0x50,0x50,0x20,0x20,0x50,0x98,0x8,0x0,0x4,0xfe,0x0,
++0x0,0x0,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3f,0x20,0x0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,
++0x8,0x8,0x8,0x8,0xfe,0x8,0x8,0xa,0xc,0x18,0xe8,0x8,0x8,0x8,0x28,0x10,0x0,0x0,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,0x0,0x0,
++0x2,0x1,0x7f,0x40,0x84,0x3e,0x0,0x1,0x7f,0x14,0x14,0x14,0x25,0x26,0x44,0x83,0x0,0x0,0xfe,0x42,0x74,0x40,0x40,0xf0,0x10,0xa0,0x40,0xa0,0x18,0xa,0x2,0xfe,
++0x10,0x10,0x10,0x10,0xff,0x10,0x38,0x34,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x2,0x3f,0x22,0x22,0x22,0x3e,0x22,0x1,0x1,0xff,0x1,0x2,0x4,0x8,0x30,0xc0,0x8,0xfc,0x88,0x88,0x88,0xf8,0x88,0x40,0x24,0xfe,0x0,0x80,0x40,0x30,0xe,0x4,
++0x2,0x1,0x7f,0x44,0x88,0x1f,0x10,0x1f,0x10,0x14,0x17,0x10,0x28,0x28,0x4f,0x88,0x0,0x0,0xfe,0x42,0x24,0xf8,0x8,0xf8,0x80,0x90,0xf0,0x80,0x88,0x88,0xf8,0x8,
++0x8,0x8,0x7f,0x8,0x9,0x1,0xff,0x1,0x1,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x20,0x28,0xfc,0x20,0x20,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x57,0x61,0x41,0x41,0x7f,0x41,0x41,0x7f,0x41,0x10,0x90,0x50,0x7c,0x50,0x90,0x10,0xfe,0x4,0x7e,0x44,0x44,0x44,0x44,0x7c,0x44,
++0x1,0x0,0x3f,0x21,0x21,0x3f,0x22,0x24,0x28,0x2f,0x20,0x20,0x3f,0x40,0x40,0x80,0x0,0x88,0xfc,0x0,0x8,0xfc,0x0,0x80,0x90,0xf8,0x80,0x84,0xfe,0x80,0x80,0x80,
++0x40,0x30,0x13,0x2,0xfe,0xb,0x12,0x37,0x5b,0x96,0x12,0x13,0x12,0x14,0x18,0x10,0x40,0x24,0xfe,0x40,0x48,0xfc,0x80,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x1,0x1,0x7f,0x2,0x4,0x18,0xe7,0x0,0x3f,0x4,0xf,0x0,0x0,0x4,0x2,0x1,0x0,0x8,0xfc,0x80,0x40,0x30,0xce,0x4,0xf8,0x0,0xe0,0x20,0x20,0x20,0x40,0x80,
++0x20,0x20,0x20,0x27,0xf8,0x21,0x22,0x25,0x28,0x23,0x38,0xe1,0x40,0x0,0x0,0x0,0x40,0x40,0x48,0xfc,0xa0,0x10,0xe,0xf4,0x0,0xfc,0x80,0xf8,0x8,0x8,0x90,0x60,
++0x10,0x10,0x10,0x17,0xf8,0x11,0x1a,0x35,0xd0,0x17,0x10,0x11,0x10,0x10,0x50,0x20,0x40,0x40,0x48,0xfc,0xa0,0x10,0xe,0xf4,0x0,0xfc,0x80,0xf8,0x8,0x8,0x90,0x60,
++0x4,0x7e,0x44,0x47,0x44,0x7d,0x12,0x15,0x5c,0x53,0x50,0x51,0x5c,0xf0,0x40,0x0,0x40,0x40,0x48,0xfc,0xa0,0x10,0xe,0xf4,0x0,0xfc,0x80,0xf8,0x8,0x8,0x90,0x60,
++0x0,0x78,0x48,0x4f,0x48,0x79,0x4a,0x4d,0x48,0x7b,0x48,0x49,0x48,0x48,0x48,0x98,0x40,0x40,0x48,0xfc,0xa0,0x10,0xe,0xf4,0x0,0xfc,0x80,0xf8,0x8,0x8,0x90,0x60,
++0x10,0x10,0x10,0x10,0x13,0xfc,0x10,0x10,0x10,0x17,0x1c,0xf1,0x41,0x2,0x4,0x8,0x80,0x80,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0xfe,0x80,0x40,0x20,0x10,0xe,0x4,
++0x12,0x1f,0x28,0x45,0x90,0x10,0x13,0x58,0x54,0x50,0x97,0x10,0x10,0x11,0x12,0x1c,0x44,0x7e,0xa0,0x10,0x40,0x48,0xfc,0x48,0x48,0x48,0xfe,0x40,0xa0,0x10,0xe,0x4,
++0x10,0x10,0x11,0x21,0x22,0x64,0xa8,0x33,0x20,0x20,0x2f,0x21,0x21,0x22,0x27,0x20,0x80,0x80,0x40,0x40,0x20,0x10,0x4e,0xe4,0x0,0x8,0xfc,0x0,0x20,0x10,0xf8,0x8,
++0x10,0x10,0x10,0x10,0x5b,0x54,0x50,0x90,0x10,0x1f,0x10,0x11,0x11,0x12,0x14,0x18,0x80,0x80,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0xfe,0x80,0x40,0x20,0x10,0xe,0x4,
++0x2,0x1,0x7f,0x44,0x84,0x7f,0x4,0x1f,0x10,0x11,0x11,0x11,0x12,0x4,0x8,0x70,0x0,0x0,0xfe,0x42,0x44,0xfc,0x50,0xf8,0x10,0x10,0x10,0x90,0x90,0x82,0x82,0x7e,
++0x8,0x9,0xff,0x8,0xa,0x7f,0x0,0x7f,0x0,0xff,0x8,0x2a,0x49,0x88,0x29,0x12,0x20,0x20,0xa0,0x7e,0x82,0x4,0x28,0x20,0x20,0xa0,0x20,0x50,0x50,0x88,0xe,0x4,
++0x0,0x7f,0x40,0x5f,0x41,0x41,0x41,0x4f,0x41,0x41,0x41,0x5f,0x40,0x40,0x7f,0x0,0x8,0xfc,0x0,0xf0,0x0,0x0,0x40,0xe0,0x0,0x0,0x20,0xf0,0x0,0x4,0xfe,0x0,
++0x12,0x1f,0x28,0x45,0xbf,0x20,0x2f,0x20,0x20,0x27,0x20,0x20,0x2f,0x20,0x3f,0x0,0x48,0x7c,0xa0,0x10,0xfc,0x0,0xf8,0x80,0xa0,0xf0,0x80,0x90,0xf8,0x0,0xfc,0x0,
++0x82,0x47,0x28,0x10,0x28,0x48,0x88,0x9,0x18,0x28,0x48,0x88,0x8,0x8,0x57,0x20,0x4,0xfe,0x20,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x13,0x12,0x12,0xfe,0x12,0x3a,0x36,0x52,0x52,0x92,0x12,0x13,0x12,0x13,0x10,0x8,0xfc,0x0,0xf8,0x20,0x20,0x20,0xf8,0x20,0x20,0x20,0x28,0xfc,0x0,0xfe,0x0,
++0x0,0x4,0xfe,0x11,0x11,0x21,0x25,0x3f,0x65,0xa5,0x25,0x25,0x3d,0x22,0x4,0x8,0x40,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0xb,0x7e,0x4a,0x4a,0x4a,0x7a,0x4a,0x4a,0x7a,0x4a,0x4a,0x4b,0x7a,0x4b,0x0,0x8,0xfc,0x0,0xf8,0x20,0x20,0x20,0xf8,0x20,0x20,0x20,0x28,0xfc,0x0,0xfe,0x0,
++0x0,0x8,0x7c,0x4b,0x4a,0x4a,0x7a,0x4a,0x4a,0x4a,0x4a,0x7a,0x44,0x4,0x8,0x10,0x40,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x47,0x34,0x14,0x4,0x4,0xf,0x12,0x22,0xe2,0x22,0x22,0x24,0x24,0x28,0x30,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x3f,0x0,0x0,0x0,0xff,0x4,0x4,0x8,0xf,0x0,0x0,0x0,0x2,0x1,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x20,0xc0,
++0x2,0x2,0xff,0x4,0x4,0xa,0x9,0x11,0x22,0x44,0x3f,0x24,0x24,0x24,0xff,0x0,0x0,0x4,0xfe,0x80,0x90,0xa0,0x40,0x20,0x1c,0x8,0xf8,0x48,0x48,0x48,0xfe,0x0,
++0x1,0x21,0x21,0x3f,0x20,0x8,0x4f,0x48,0x48,0x4b,0x48,0x50,0x10,0x27,0x40,0x80,0x0,0x8,0x8,0xf8,0x8,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x2,0x1,0x7f,0x44,0x88,0x8,0x3e,0x8,0x8,0x7e,0x8,0x8,0x14,0x12,0x20,0x43,0x0,0x0,0xfe,0x42,0x24,0xf8,0x88,0xa8,0xa8,0xa8,0xa8,0x30,0x52,0x52,0x8e,0x0,
++0x8,0x8,0xff,0x8,0x3e,0x22,0x14,0x8,0x3f,0xc1,0x1,0x3f,0x1,0x2,0xc,0x30,0x20,0x24,0xfe,0x20,0xa0,0x48,0x30,0x10,0xee,0x4,0x10,0xf8,0x0,0xc0,0x30,0x8,
++0x1,0x1,0xff,0x4,0x9,0x11,0x2f,0xc1,0x3f,0x1,0x1,0x1f,0x1,0x1,0x7f,0x0,0x0,0x4,0xfe,0x40,0x20,0x10,0xee,0x4,0xf8,0x0,0x20,0xf0,0x0,0x8,0xfc,0x0,
++0x10,0x20,0x7f,0x49,0x49,0x7f,0x49,0x49,0x7f,0x49,0xc,0x15,0x15,0x27,0x44,0x83,0x0,0x8,0x48,0x28,0x8,0x48,0x28,0x8,0xe,0xf8,0x8,0x8,0x48,0xc8,0x2,0xfe,
++0x10,0x11,0x17,0x24,0x24,0x67,0xa4,0x24,0x27,0x24,0x20,0x21,0x21,0x22,0x24,0x28,0x80,0x8,0xfc,0x48,0x48,0xf8,0x48,0x88,0xf8,0x88,0x90,0x50,0x68,0x7a,0x42,0x3e,
++0x20,0x20,0x23,0x3a,0x4b,0x50,0x8f,0x20,0x23,0x22,0x22,0x22,0x2a,0x30,0x21,0x6,0x40,0x48,0xfc,0x48,0xf8,0x40,0xfe,0x8,0xfc,0x8,0x48,0x48,0x48,0xb0,0xc,0x4,
++0x10,0x11,0x13,0x12,0x5a,0x57,0x52,0x92,0x13,0x12,0x10,0x11,0x11,0x12,0x14,0x18,0x80,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x80,0xc8,0x48,0x54,0x5e,0x42,0x3e,
++0x0,0x40,0x33,0x12,0x83,0x60,0x2f,0x8,0x13,0x22,0xe2,0x22,0x22,0x20,0x21,0x26,0x40,0x48,0xfc,0x48,0xf8,0x40,0xfe,0x8,0xfc,0x8,0x48,0x48,0x48,0xb0,0xc,0x4,
++0x20,0x20,0x20,0x27,0xfc,0x24,0x24,0x27,0x24,0x24,0x3c,0xe7,0x44,0x0,0x0,0x0,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x44,0x40,0x40,0x40,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x0,0x20,0x24,0x3e,0x20,0x20,0x2e,0x70,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x80,0x84,0x98,0xe0,0x80,0x82,0x82,0x7e,
++0x10,0x17,0x14,0x14,0xfc,0x17,0x14,0x1c,0x34,0xd5,0x16,0x14,0x14,0x14,0x57,0x24,0x4,0xfe,0x44,0x44,0x44,0xfc,0x44,0xc4,0xe4,0x5c,0x4c,0x44,0x44,0x4,0xfc,0x4,
++0x0,0x7f,0x41,0x41,0x41,0x5f,0x41,0x43,0x43,0x45,0x49,0x51,0x41,0x41,0x7f,0x40,0x4,0xfe,0x4,0x4,0x24,0xf4,0x4,0x4,0x84,0x64,0x34,0x14,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x13,0x10,0xfc,0x10,0x17,0x18,0x30,0xd3,0x12,0x12,0x12,0x12,0x53,0x22,0x8,0x3c,0xc0,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x16,0x1a,0x32,0xd2,0x12,0x12,0x12,0x14,0x54,0x28,0x40,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x22,0x3f,0x20,0x2f,0x28,0x2f,0x20,0x3f,0x21,0x22,0x5f,0x42,0x8a,0x4,0x84,0xfe,0x0,0xc0,0x3e,0xa2,0xa4,0xa8,0x24,0xa2,0x22,0x32,0xac,0x20,0x20,0x20,
++0x10,0xd,0x44,0x50,0x4b,0x40,0x60,0x57,0x40,0x48,0x53,0x72,0x52,0x53,0x52,0x40,0x4,0xfe,0x4,0x64,0x84,0x84,0xa4,0xf4,0x84,0xa4,0xf4,0x24,0x24,0xe4,0x14,0x8,
++0x10,0x10,0x10,0x13,0x10,0xfd,0x11,0x11,0x10,0x10,0x10,0x1c,0xe0,0x40,0x7,0x0,0x80,0x40,0x48,0xfc,0x0,0x8,0x8,0x8,0x90,0x90,0x90,0xa0,0x20,0x44,0xfe,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x11,0x15,0x19,0x30,0xd0,0x10,0x10,0x10,0x10,0x57,0x20,0x80,0x40,0x48,0xfc,0x0,0x8,0x8,0x8,0x90,0x90,0x90,0xa0,0x20,0x44,0xfe,0x0,
++0x1,0x11,0x7f,0x51,0x51,0x57,0x55,0x55,0x55,0x57,0x51,0x73,0x45,0x9,0x1,0x1,0x4,0x44,0xe4,0x4,0x54,0xf4,0x54,0x54,0x54,0xd4,0x14,0x84,0x44,0x4,0x14,0x8,
++0x10,0x10,0x10,0x13,0x7c,0x54,0x57,0x54,0x55,0x7d,0x51,0x15,0x1d,0xf5,0x41,0x1,0x90,0x90,0x90,0xfc,0x90,0x94,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x8,0x7c,0x48,0x4b,0x48,0x78,0x4f,0x48,0x49,0x79,0x49,0x49,0x49,0x49,0x89,0x19,0x90,0x90,0x90,0xfc,0x90,0x94,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x20,0x10,0x13,0xfe,0x44,0x29,0x29,0xff,0x11,0x15,0xfe,0x10,0x11,0x12,0x20,0x40,0x20,0x24,0xfe,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x70,0xa8,0x2e,0x24,0x20,0x20,
++0x2,0x2,0x72,0x5f,0x52,0x52,0x52,0x53,0x52,0x5e,0x52,0x72,0x52,0x2,0xb,0x4,0x20,0x10,0x14,0xfe,0x0,0x44,0xc4,0x44,0x44,0x48,0x28,0x28,0x28,0x0,0xfe,0x0,
++0x8,0x8,0xff,0x9,0x1,0x7f,0x1,0x9,0x5,0xff,0x3,0x5,0x9,0x31,0xc1,0x1,0x20,0x24,0xfe,0x20,0x8,0xfc,0x0,0x20,0x44,0xfe,0x80,0x40,0x30,0xe,0x4,0x0,
++0x1,0x1,0x1,0x7f,0x1,0x21,0x19,0x9,0xff,0x3,0x5,0x9,0x31,0xc1,0x1,0x1,0x0,0x0,0x8,0xfc,0x0,0x10,0x30,0x44,0xfe,0x80,0x40,0x30,0x1e,0x4,0x0,0x0,
++0x10,0x14,0xfe,0x10,0x7d,0x56,0x54,0x54,0x7c,0x10,0x38,0x34,0x54,0x90,0x10,0x13,0x20,0x20,0x7c,0x88,0x14,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0x20,0x58,0x84,0x2,
++0x8,0x8,0xff,0x8,0x4,0x24,0x25,0x26,0x24,0x4,0x3f,0x24,0x24,0x24,0xff,0x0,0x20,0x24,0xfe,0x20,0x90,0xf8,0x0,0x40,0x20,0x8,0xfc,0x48,0x48,0x48,0xfe,0x0,
++0x8,0x8,0x7e,0x8,0x1c,0x2a,0x49,0xa,0x2,0xff,0x4,0x8,0x4,0x3,0x4,0x18,0x20,0x28,0xfc,0x20,0x70,0xac,0x24,0x20,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x10,0x12,0x11,0x10,0xff,0x10,0x30,0x38,0x57,0x50,0x90,0x10,0x10,0x10,0x1f,0x10,0x0,0x8,0x10,0xa4,0xfe,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x10,0x12,0x11,0x10,0xff,0x10,0x14,0x18,0x33,0xd0,0x10,0x10,0x10,0x10,0x5f,0x20,0x0,0x8,0x10,0xa4,0xfe,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x12,0x1f,0x28,0x45,0x84,0x24,0x25,0x26,0x24,0x4,0x3f,0x24,0x24,0x24,0xff,0x0,0x48,0x7c,0xa0,0x10,0x80,0xfc,0x40,0x20,0x20,0x8,0xfc,0x48,0x48,0x48,0xfe,0x0,
++0x20,0x1b,0x49,0x41,0x7f,0x41,0x5f,0x59,0x55,0x51,0x5f,0x43,0x45,0x49,0x51,0x41,0x4,0xfe,0x4,0x14,0xfc,0x4,0xf4,0x34,0x54,0x14,0xf4,0x84,0x44,0x34,0x14,0xc,
++0x10,0x8,0x4,0x7f,0x0,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x10,0x20,0x48,0xfc,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x42,0x31,0x15,0x4,0x87,0x64,0x25,0xd,0x15,0x25,0xe5,0x24,0x25,0x26,0x24,0x24,0x4,0x7e,0x4,0x54,0xfc,0x44,0xf4,0x54,0xf4,0x54,0xf4,0xe4,0x54,0x4c,0x44,0xc,
++0x2,0x41,0x25,0x24,0x7,0x4,0xe5,0x25,0x25,0x25,0x25,0x24,0x2d,0x36,0x24,0x4,0x4,0x7e,0x4,0x54,0xfc,0x44,0xf4,0x54,0xf4,0x54,0xf4,0xe4,0x54,0x4c,0x44,0xc,
++0x10,0x12,0x12,0x12,0xfe,0x12,0x14,0x1b,0x32,0xd2,0x12,0x12,0x12,0x10,0x51,0x26,0x90,0x94,0x9e,0xa8,0xc4,0x84,0x88,0xfc,0x8,0x48,0x48,0x68,0xa8,0xa2,0x22,0x1e,
++0x8,0x48,0x48,0x49,0x4a,0x48,0x1f,0x10,0x11,0x11,0x11,0x11,0x12,0x4,0x18,0xe0,0x80,0x84,0xfe,0x20,0x10,0x10,0xf8,0x10,0x10,0x10,0x10,0x90,0x90,0x82,0x82,0x7e,
++0x22,0x22,0x3f,0x22,0xaf,0xaa,0xaa,0xaa,0x2f,0x22,0x27,0x2a,0x32,0x22,0x22,0x22,0x10,0x10,0xdc,0x24,0xc8,0xbe,0xa2,0xaa,0xaa,0x2a,0x2a,0xaa,0x2a,0x8,0x14,0x62,
++0x10,0x12,0x22,0x22,0x42,0xfe,0x8,0x13,0x22,0xfe,0x2,0x2,0x1c,0xe0,0x41,0xe,0x90,0x90,0x9e,0xa8,0xc4,0x84,0x88,0xfc,0x8,0x48,0x48,0x68,0xa0,0xa2,0x22,0x1e,
++0x10,0x11,0x10,0x54,0x58,0x57,0x50,0x90,0x10,0x13,0x10,0x28,0x24,0x40,0x8f,0x0,0x0,0x8,0x90,0xa0,0x4,0xfe,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x1,0x41,0x35,0x15,0x85,0x65,0x25,0x1,0x10,0x27,0xe5,0x25,0x25,0x25,0x3f,0x20,0x20,0x20,0x24,0x3e,0x50,0x88,0x8,0x0,0x8,0xfc,0x28,0x28,0x28,0x28,0xfe,0x0,
++0x0,0x8,0xff,0x12,0x12,0x13,0x12,0xfe,0x13,0x12,0x12,0x12,0x1e,0xf2,0x43,0x2,0x80,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x48,0x30,0x10,0x8e,0x4,0x0,
++0x22,0x21,0x20,0x27,0xfc,0x24,0x77,0x6c,0xa4,0x27,0x24,0x25,0x25,0x26,0x24,0x20,0x0,0x0,0x3e,0xa2,0xa4,0xa4,0xa8,0xa4,0xa4,0xa2,0x22,0x22,0xb4,0xa8,0x20,0x20,
++0x0,0x44,0x2b,0x12,0x2a,0x4b,0x8a,0xa,0x1b,0x2a,0x4a,0x8a,0xa,0xa,0x53,0x22,0x80,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x48,0x30,0x10,0x8e,0x4,0x0,
++0x0,0x3f,0x24,0x22,0x2f,0x28,0x2f,0x28,0x2f,0x28,0x29,0x2b,0x4c,0x48,0x80,0x0,0x84,0xfe,0x0,0x0,0xbe,0xa2,0xa4,0xa8,0xa4,0x22,0x22,0xa2,0xb4,0x28,0x20,0x20,
++0x8,0x5,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x21,0x20,0x24,0x26,0x79,0x20,0x0,0x0,0x0,0xfc,0x44,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,0x40,
++0x8,0x5,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x21,0x20,0x24,0x26,0x79,0x21,0x2,0x4,0x7e,0xc4,0x44,0x44,0x7c,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x84,0x14,0x8,
++0x0,0x40,0x33,0x12,0x82,0x63,0x26,0xa,0x13,0x22,0xe2,0x22,0x22,0x22,0x23,0x22,0x80,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x48,0x30,0x10,0x8e,0x4,0x0,
++0x11,0x11,0x17,0x11,0xf8,0x17,0x14,0x18,0x33,0xd0,0x10,0x10,0x10,0x11,0x51,0x2e,0x10,0x10,0xfc,0x10,0x0,0xfe,0x82,0x84,0xf8,0x88,0x88,0x88,0x88,0x8,0x28,0x10,
++0x4,0x4,0x7f,0x4,0x4,0x7f,0x42,0x82,0x1f,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x48,0xfc,0x40,0x40,0xfe,0x2,0x14,0xf8,0x10,0x10,0x10,0x10,0x10,0xa0,0x40,
++0x2,0x1,0x7f,0x41,0x91,0x11,0x1f,0x11,0x21,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0xfe,0x2,0x4,0x20,0xf0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x2,0x2,0x2,0x3f,0x2,0x2,0xff,0x1,0x2,0x4,0xc,0x14,0x27,0x44,0x84,0x3,0x0,0x0,0x88,0xd8,0x20,0x44,0xfe,0x0,0x0,0x10,0x30,0xc0,0x0,0x4,0x4,0xfc,
++0x8,0x8,0x8,0x17,0x10,0x30,0x50,0x9f,0x11,0x13,0x15,0x19,0x11,0x11,0x10,0x10,0x80,0x80,0x84,0xec,0x90,0xa0,0xc4,0xfe,0x0,0x8,0x30,0xc0,0x4,0x4,0xfc,0x0,
++0x20,0x20,0x20,0x27,0xf8,0x48,0x48,0x4f,0x49,0x8b,0x55,0x21,0x51,0x49,0x80,0x0,0x80,0x80,0x84,0xec,0x90,0xa0,0xc4,0xfe,0x0,0x8,0x30,0xc0,0x4,0x4,0xfc,0x0,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x55,0x55,0x63,0x41,0x7f,0x41,0x7f,0x41,0x20,0xa0,0x3c,0x44,0xc4,0x28,0x10,0x28,0xc6,0x4,0x7e,0x44,0x44,0x44,0x7c,0x44,
++0x10,0x10,0x10,0x15,0x59,0x52,0x50,0x90,0x11,0x16,0x11,0x11,0x29,0x25,0x41,0x81,0x80,0x80,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x41,0x31,0x17,0x81,0x60,0x2f,0x8,0x10,0x10,0x27,0xe0,0x21,0x21,0x22,0x24,0x28,0x10,0x10,0xfc,0x10,0x0,0xfe,0x2,0x84,0x88,0xfc,0x88,0x8,0x8,0x8,0x50,0x20,
++0x22,0x22,0xff,0x22,0x22,0x3e,0x8,0x7f,0x49,0x49,0x7f,0x8,0xff,0x8,0x9,0xa,0x20,0x20,0xa0,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x44,0x44,0xc4,0x84,0x14,0x8,
++0x0,0x0,0x1f,0x10,0x11,0x11,0x21,0x7f,0x1,0x1,0x9,0x9,0x11,0x21,0x45,0x2,0x20,0xf0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x20,0x10,0x8,0xc,0x4,0x0,
++0x0,0x3f,0x1,0x7f,0x41,0x9d,0x1,0x1d,0x1,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x10,0xf8,0x0,0xfe,0x2,0x74,0x0,0x70,0x0,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,
++0x20,0x23,0x38,0x47,0x84,0x7b,0x20,0x23,0xf8,0x27,0x24,0x24,0x2f,0x34,0x24,0x7,0x8,0xfc,0x40,0xfe,0x42,0x58,0x40,0x58,0x40,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,
++0x4,0x7f,0x4,0x3f,0x1,0x7f,0x41,0x9d,0x1,0x1d,0x1,0x3f,0x21,0x3f,0x21,0x3f,0x48,0xfc,0x40,0xf8,0x0,0xfe,0x2,0x74,0x0,0x70,0x0,0xf8,0x8,0xf8,0x8,0xf8,
++0x3f,0x4,0x8,0x1f,0x28,0x48,0x8f,0x4,0xfe,0x10,0x20,0x7e,0xa3,0x22,0x3e,0x20,0xf8,0x0,0x10,0xf8,0x10,0x10,0xf0,0x4,0xfe,0x20,0x44,0xfe,0x44,0x44,0x7c,0x40,
++0x0,0x3f,0x21,0x3f,0x21,0x3f,0x22,0x4,0x3f,0x2,0x4,0x3f,0x9,0x11,0x65,0x2,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x20,0xc0,0x10,0x8,0xf8,0x20,0x18,0x8,0x0,
++0x13,0x12,0x12,0x23,0x22,0x62,0xa3,0x20,0x2f,0x2a,0x2a,0x2f,0x2a,0x2a,0x2f,0x28,0xf8,0x48,0x48,0xf8,0x48,0x48,0xf8,0x0,0xbe,0xaa,0xaa,0xbe,0xaa,0xaa,0xbe,0xa2,
++0x1,0x2,0x4,0x8,0x3f,0x8,0x10,0x24,0x7e,0x1,0x1,0x3f,0x1,0x1,0xff,0x0,0x0,0x0,0x20,0x10,0xf8,0x10,0x20,0x48,0xfc,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,
++0x20,0x23,0x20,0x27,0xfc,0x2b,0x20,0x2b,0x30,0xe7,0x24,0x24,0x27,0x24,0xa4,0x47,0x8,0xfc,0x40,0xfe,0x42,0x5c,0x40,0x58,0x0,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,
++0x2,0x3f,0x22,0x22,0x22,0x3f,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x22,0x4b,0x84,0x40,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x28,0x10,
++0x1,0x11,0x9,0x1,0x7f,0x1,0x5,0x9,0x11,0x1,0xff,0x2,0x4,0x8,0x10,0x60,0x0,0x10,0x20,0x8,0xfc,0x0,0x40,0x30,0x10,0x4,0xfe,0x80,0x40,0x20,0x1c,0x8,
++0x0,0x47,0x34,0x14,0x4,0x87,0x64,0x24,0xc,0x17,0xe4,0x24,0x24,0x24,0x27,0x24,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x13,0x10,0xfc,0x17,0x39,0x36,0x54,0x51,0x91,0x12,0x14,0x10,0x11,0x16,0x40,0x50,0xf8,0x40,0x44,0xfe,0x10,0x8c,0xf4,0x10,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x10,0x13,0x12,0x12,0xfe,0x13,0x30,0x38,0x57,0x54,0x90,0x10,0x11,0x11,0x12,0x14,0x4,0xfe,0x94,0x94,0x94,0xfc,0x40,0x24,0xfe,0x80,0xf8,0x88,0x8,0x8,0x28,0x10,
++0x0,0x40,0x31,0x12,0x4,0x9,0x10,0x10,0x27,0xe0,0x20,0x20,0x22,0x21,0x20,0x0,0x80,0x80,0x40,0x20,0x10,0x8,0x8e,0x84,0xf0,0x10,0x20,0x40,0x80,0x0,0xc0,0x40,
++0x0,0x3f,0x20,0x2f,0x28,0x28,0x2f,0x28,0x28,0x2f,0x20,0x2f,0x20,0x20,0x5f,0x80,0x4,0xfe,0x8,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x80,0xf8,0x80,0x84,0xfe,0x0,
++0x3,0x3c,0x4,0x7f,0x4,0xe,0x15,0x64,0x5,0x1,0xff,0x3,0x5,0x19,0x61,0x1,0x8,0x8,0x48,0xc8,0x48,0x48,0x48,0x8,0x18,0x4,0xfe,0x80,0x40,0x3c,0x8,0x0,
++0x3,0x3c,0x4,0x7f,0x4,0xe,0x15,0x65,0x11,0x1f,0x21,0x1,0xff,0x1,0x1,0x1,0x8,0x8,0x48,0xc8,0x48,0x48,0x48,0x18,0x0,0xf8,0x0,0x4,0xfe,0x0,0x0,0x0,
++0x6,0x78,0x8,0xfe,0x9,0x1c,0x2a,0x49,0x2,0xc,0x31,0xc9,0x5,0x9,0x11,0x3,0x40,0x44,0x7e,0xa4,0x24,0x44,0x94,0x8,0x80,0x60,0x1e,0x24,0x40,0x30,0x10,0x0,
++0x12,0x1f,0x28,0x45,0x1,0xff,0x14,0x13,0x14,0x1f,0x1,0x3f,0x22,0x27,0x20,0x20,0x48,0x7c,0xa0,0x10,0x4,0xfe,0x50,0x90,0x50,0xf0,0x8,0xfc,0x48,0xe8,0x28,0x10,
++0x4,0x44,0x2b,0x12,0x2a,0x4b,0x8a,0xa,0x1b,0x28,0x48,0x8b,0x8,0x8,0x57,0x20,0x0,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0x50,0xf8,0x40,0x44,0xfe,0x0,
++0x2,0x1,0xff,0x4,0x12,0x11,0x12,0x14,0x1f,0x1,0x7f,0x42,0x44,0x4f,0x40,0x40,0x0,0x4,0xfe,0x40,0x90,0x10,0x90,0x50,0xf0,0x4,0xfe,0x4,0x44,0xe4,0x14,0x8,
++0x0,0x40,0x2f,0x10,0x85,0x64,0x25,0x7,0x10,0x2f,0xe8,0x29,0x2b,0x28,0x28,0x28,0x80,0x48,0xfc,0x0,0x28,0xc8,0x28,0xf8,0x84,0xfe,0x84,0x24,0xf4,0x4,0x14,0x8,
++0x0,0x13,0xfa,0x22,0x23,0x22,0xfa,0x23,0x20,0x20,0x23,0x3c,0xe0,0x40,0xf,0x0,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x0,
++0x1,0x1,0x7f,0x1,0x5,0x9,0x31,0xc1,0xf,0x0,0x1,0x7f,0x1,0x1,0x5,0x2,0x0,0x8,0xfc,0x0,0x40,0x30,0xe,0x4,0xe0,0x40,0x88,0xfc,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x1,0x1,0x7f,0x1,0x1,0xff,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x0,0x8,0xfc,0x0,0x4,0xfe,0x0,
++0x20,0x20,0x3d,0x49,0x95,0x7f,0x55,0x55,0x7d,0x54,0x54,0x7d,0x0,0x1c,0xe3,0x40,0x0,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,
++0x20,0x18,0x8,0x0,0xfe,0x4,0x8,0x1c,0x2a,0x4a,0x88,0x8,0x8,0x8,0x8,0x8,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x8,0x8,0xff,0x8,0x6,0x78,0x8,0x8,0xff,0x8,0x1c,0x1a,0x2a,0x48,0x88,0x8,0x20,0x24,0xfe,0x20,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x8,0x28,0x10,
++0x8,0xff,0xa,0x2,0x1f,0x4,0x4,0x8,0x10,0x10,0x7e,0x12,0x12,0x22,0x4a,0x85,0x20,0xfe,0x20,0x0,0xf0,0x10,0x90,0x60,0x20,0x24,0xfe,0x24,0x24,0x44,0x94,0x8,
++0x1,0x1,0x1,0xff,0x1,0x3f,0x21,0x21,0x21,0x3f,0x29,0x5,0x2,0x5,0x18,0x60,0x0,0x0,0x4,0xfe,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x80,0x70,0xe,
++0x0,0xff,0x4,0x3f,0x24,0x24,0x3f,0x1,0x1,0xff,0x3,0x3,0x5,0x19,0x61,0x1,0x4,0xfe,0x48,0xfc,0x48,0x48,0xf8,0x0,0x4,0xfe,0x80,0x40,0x30,0xe,0x4,0x0,
++0x0,0xff,0x0,0x0,0x3e,0x22,0x22,0x22,0x32,0x2a,0x22,0x22,0x22,0x22,0x2a,0x24,0x4,0xfe,0x0,0x8,0xfc,0x88,0x88,0x88,0xc8,0xa8,0x88,0x88,0x88,0x88,0xa8,0x90,
++0x0,0x3f,0x20,0x20,0x3f,0x22,0x22,0x23,0x22,0x22,0x22,0x22,0x44,0x44,0x88,0x10,0x8,0xfc,0x0,0x4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x88,0x50,0x20,
++0x1,0x7f,0x40,0x41,0x7f,0x48,0x49,0x4f,0x49,0x49,0x49,0x49,0x55,0x52,0xa0,0x1,0x20,0xa0,0x20,0x20,0xa4,0x7e,0x24,0xa4,0x24,0x24,0x24,0x44,0x44,0x84,0xa8,0x10,
++0x0,0x8,0xfd,0x11,0x11,0x21,0x25,0x7f,0xa4,0x24,0x24,0x25,0x3d,0x22,0x4,0x0,0x8,0x1c,0xe0,0x0,0x20,0x20,0x24,0xfe,0x20,0x20,0xa8,0x24,0x22,0x22,0xa0,0x40,
++0x0,0x3f,0x21,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x21,0x22,0x42,0x44,0x88,0x10,0x8,0xfc,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x1,0x7,0x7c,0x4,0x4,0x5,0xff,0xc,0xe,0x15,0x14,0x24,0x44,0x4,0x4,0x4,0x4,0x84,0x4,0x24,0x24,0x24,0xa4,0x24,0x24,0xa4,0xa4,0x24,0x4,0x4,0x14,0x8,
++0x10,0x1f,0x10,0x27,0x24,0x64,0xa4,0x27,0x20,0x20,0x2f,0x20,0x21,0x22,0x2c,0x20,0x4,0xfe,0xa4,0xfe,0xa4,0xa4,0xa4,0xfc,0x40,0x44,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x10,0x10,0x1f,0x22,0x22,0x67,0xa4,0x28,0x34,0x22,0x21,0x22,0x24,0x28,0x20,0x20,0x4,0x44,0xe4,0x4,0x14,0xd4,0x54,0x54,0x94,0x94,0x14,0x4,0x4,0x4,0x14,0x8,
++0x10,0x11,0x1f,0x21,0x21,0x7f,0xa1,0x23,0x23,0x25,0x25,0x29,0x31,0x21,0x21,0x21,0x84,0xc4,0x4,0x4,0x14,0xf4,0x14,0x14,0x94,0x54,0x54,0x4,0x4,0x4,0x14,0x8,
++0x1,0x0,0x1f,0x10,0x97,0x51,0x51,0x1f,0x31,0x53,0xd3,0x15,0x29,0x21,0x41,0x1,0x0,0x84,0xfe,0x44,0x84,0x14,0x54,0xf4,0x14,0x94,0x54,0x54,0x4,0x4,0x14,0x8,
++0x2,0x1,0x1,0x0,0x7f,0x0,0x0,0x10,0x8,0x8,0x4,0x4,0x4,0x0,0xff,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x4,0xfe,0x0,
++0x10,0x10,0x10,0x54,0x3b,0x10,0xfd,0x11,0x38,0x34,0x54,0x90,0x10,0x10,0x17,0x10,0x80,0x40,0x40,0x8,0xfc,0x0,0x8,0x8,0x90,0x90,0x90,0xa0,0xa0,0x24,0xfe,0x0,
++0x0,0x47,0x34,0x14,0x4,0x84,0x67,0x24,0xc,0x14,0xe4,0x24,0x24,0x28,0x29,0x32,0x4,0xfe,0x40,0x40,0x44,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x14,0x8,
++0x1,0x3f,0x1,0x1,0xff,0x1,0x1,0x3f,0x21,0x11,0xd,0x9,0x31,0xc1,0x5,0x2,0x10,0xf8,0x10,0x14,0xfe,0x10,0x10,0xf0,0x8,0x98,0x60,0x20,0x18,0xe,0x4,0x0,
++0x2,0x2,0x2,0x2,0x7f,0x2,0x2,0x2,0x2,0x2,0x2,0x4,0x4,0x8,0x8,0x70,0x0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x88,0x50,0x20,
++0x0,0x10,0xff,0x20,0x22,0x22,0xfb,0x23,0x20,0x27,0x24,0x3c,0xe5,0x44,0x4,0x4,0x40,0x24,0xfe,0x90,0x64,0x94,0xc,0xfc,0x40,0xfe,0x42,0x92,0xfa,0x2,0xa,0x4,
++0x0,0xb,0x7e,0x4a,0x4b,0x4a,0x4a,0x4b,0x48,0x48,0x4b,0x78,0x48,0x0,0xf,0x0,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x1f,0x21,0x21,0x6f,0xa9,0x29,0x29,0x29,0x2a,0x2c,0x28,0x28,0x28,0x28,0x0,0x4,0xfe,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xd4,0x8c,0x4,0x4,0x14,0x8,
++0x1,0xfe,0x24,0x24,0x3d,0x24,0x24,0x24,0x3f,0x24,0x24,0x24,0x3e,0xe4,0x5,0x6,0x4,0xcc,0x50,0x0,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x50,0x50,0x88,0xe,0x4,
++0x4,0x4,0xff,0x24,0x10,0x17,0x1,0x71,0x13,0x10,0x10,0x17,0x10,0x28,0x47,0x0,0x40,0x44,0xfe,0x40,0x90,0xf8,0x0,0x50,0xf8,0x40,0x48,0xfc,0x40,0x46,0xfc,0x0,
++0x0,0x40,0x2f,0x21,0x1,0x2,0xe7,0x20,0x20,0x20,0x2f,0x20,0x20,0x50,0x8f,0x0,0x80,0x88,0xfc,0x0,0x40,0x50,0xf8,0x40,0x40,0x48,0xfc,0x40,0x40,0x46,0xfc,0x0,
++0x20,0x27,0x25,0x3f,0x44,0x85,0x7c,0x27,0x24,0xfd,0x24,0x25,0x2d,0x36,0x28,0x0,0x44,0xfe,0x8,0xfe,0x90,0xfc,0x94,0xfe,0x94,0xfc,0x94,0x98,0x98,0x96,0x90,0x90,
++0x1,0x3f,0x24,0x22,0x3f,0x22,0x2f,0x22,0x3f,0x22,0x2f,0x26,0x4a,0x52,0xa2,0x2,0x8,0xfc,0x20,0x48,0xfc,0x40,0xf8,0x48,0xfe,0x48,0xf8,0x68,0x50,0x4e,0x44,0x40,
++0x10,0x10,0x10,0x18,0x55,0x52,0x54,0x98,0x10,0x13,0x10,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0xa0,0xa0,0x10,0x88,0x4e,0x44,0x0,0xf8,0x8,0x10,0xa0,0x40,0x20,0x20,
++0x0,0x88,0x65,0x24,0x0,0x81,0x6d,0x24,0xc,0x14,0xe7,0x24,0x24,0x2a,0x31,0x20,0x20,0x28,0xfc,0x40,0xa0,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x26,0xfc,0x0,
++0x2,0x1,0x7f,0x40,0x89,0x11,0x21,0x1f,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x1,0x0,0x0,0xfe,0x2,0x24,0x10,0x8,0xf0,0x10,0x10,0x10,0x10,0x10,0x50,0x20,0x0,
++0x8,0x8,0x14,0x13,0x21,0x40,0xbe,0x0,0x11,0x49,0x2a,0x2a,0x2a,0x7,0x78,0x21,0x20,0x20,0x20,0x24,0x7e,0x84,0x44,0x44,0x48,0x28,0x28,0x10,0x28,0x28,0x46,0x84,
++0x8,0x7c,0x48,0x48,0x49,0x7a,0x4d,0x48,0x4a,0x7a,0x49,0x49,0x49,0x48,0x4f,0x98,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x0,0x88,0x48,0x48,0x50,0x50,0x24,0xfe,0x0,
++0x20,0x24,0x3a,0x42,0x40,0xf8,0x26,0x22,0xfa,0x22,0x23,0x2a,0x32,0x25,0x8,0x0,0x10,0x14,0xfe,0x20,0x50,0x94,0xfe,0x10,0x10,0x14,0xfe,0x10,0x10,0x16,0xfc,0x0,
++0x2,0x1,0xff,0x4,0xc,0xc,0x14,0x24,0x44,0x2,0x29,0x29,0x28,0x48,0x7,0x0,0x0,0x4,0xfe,0x40,0x60,0x58,0x4c,0x44,0x40,0x0,0x10,0x28,0x24,0x24,0xe0,0x0,
++0x10,0x10,0x17,0x14,0x58,0x57,0x51,0x91,0x12,0x13,0x10,0x28,0x25,0x42,0x84,0x0,0x40,0x48,0xfc,0x80,0xa0,0xf0,0x20,0x20,0x24,0xfe,0x20,0xa8,0x26,0x22,0xa0,0x40,
++0x10,0x10,0x27,0x40,0x48,0xfb,0x11,0x21,0x42,0xfb,0x0,0x0,0x39,0xc2,0x44,0x0,0x40,0x48,0xfc,0x80,0xa0,0xf0,0x20,0x20,0x24,0xfe,0x20,0xa8,0x26,0x22,0xa0,0x40,
++0x10,0x10,0x57,0x3a,0x12,0xff,0x12,0x32,0x3b,0x56,0x52,0x92,0x12,0x12,0x13,0x12,0x40,0x28,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x48,0x30,0x10,0x8e,0x4,0x0,
++0x0,0x40,0x2f,0x10,0x3,0x2,0xa,0x12,0x23,0xe2,0x20,0x21,0x22,0x24,0x29,0x0,0x80,0x44,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x48,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x10,0xb,0x40,0x22,0xa,0x54,0x21,0x22,0x25,0x1,0xff,0x5,0x9,0x11,0x61,0x1,0x8,0xfc,0x88,0x8c,0x8a,0x88,0x8,0x28,0x10,0x4,0xfe,0x40,0x20,0x1c,0x8,0x0,
++0x10,0xb,0x40,0x22,0xa,0x55,0x22,0x21,0x9,0x5,0xff,0x5,0x9,0x11,0x61,0x1,0x8,0xfc,0x88,0x8c,0x8a,0x28,0x10,0x0,0x20,0x44,0xfe,0x40,0x20,0x1c,0x8,0x0,
++0x2,0x1,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x24,0x24,0x22,0x21,0x28,0x30,0x20,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf8,0x10,0x20,0x40,0x80,0x60,0x1c,0x8,
++0x0,0xff,0x4,0x4,0x7f,0x44,0x44,0x44,0x44,0x44,0x4a,0x51,0x62,0x40,0x40,0x40,0x4,0xfe,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0xa4,0x1c,0xc,0x4,0x14,0x8,
++0x10,0x13,0xfc,0x20,0x33,0x52,0x52,0xfe,0x12,0x12,0x1f,0xf2,0x52,0x12,0x12,0x12,0x4,0xfe,0x90,0x94,0xfe,0x94,0x94,0x94,0x94,0x94,0x54,0x2c,0x4,0x4,0x14,0x8,
++0x0,0x1f,0x10,0x1f,0x10,0xff,0x0,0x1f,0x11,0x1f,0x11,0x1f,0x1,0x1f,0x1,0x7f,0x10,0xf8,0x10,0xf0,0x14,0xfe,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x0,0xf0,0x0,0xfc,
++0x0,0x0,0x78,0x4f,0x48,0x4b,0x4a,0x7a,0x4a,0x4b,0x48,0x49,0x7a,0x44,0x9,0x0,0x80,0x40,0x44,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x1,0x7f,0x0,0x1f,0x10,0x10,0x1f,0x0,0x7f,0x40,0x8f,0x8,0x8,0x8,0x10,0x60,0x8,0xfc,0x10,0xf8,0x10,0x10,0xf0,0x0,0xfe,0x22,0xf4,0x20,0x20,0x22,0x22,0x1e,
++0x0,0x40,0x2f,0x20,0x3,0x2,0xe2,0x22,0x23,0x20,0x24,0x29,0x32,0x24,0x9,0x0,0x80,0x44,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x40,0x50,0x4c,0x46,0x42,0x80,
++0x10,0x10,0x1f,0x10,0xfd,0x12,0x17,0x1a,0x33,0xd2,0x13,0x10,0x11,0x12,0x55,0x20,0x40,0x44,0xfe,0xa0,0x14,0x8,0xfe,0x8,0xf8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x80,
++0x8,0xfd,0x4a,0x4a,0x4a,0x7a,0x4a,0x4a,0x4a,0x7a,0x4b,0x4a,0xfc,0x8,0x9,0xa,0x80,0x4,0x3e,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xb4,0xa8,0xa0,0x20,0x20,
++0x10,0x10,0x1f,0x21,0x2a,0x64,0xaf,0x34,0x27,0x24,0x27,0x20,0x22,0x24,0x2a,0x21,0x80,0x88,0xfc,0x40,0x28,0x10,0xfe,0x14,0xf0,0x10,0xf0,0x80,0xa0,0x98,0x88,0x0,
++0x1,0x0,0x1f,0x10,0x90,0x57,0x50,0x10,0x30,0x50,0xd0,0x10,0x20,0x22,0x41,0x0,0x0,0x84,0xfe,0x0,0x0,0xf8,0x10,0x20,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x10,0x10,0x17,0x10,0x56,0x59,0x53,0x96,0x1b,0x12,0x13,0x28,0x25,0x42,0x84,0x0,0x40,0x44,0xfe,0x40,0xa8,0x10,0xf8,0xe,0xf8,0x8,0xf8,0x40,0x50,0x4c,0x44,0xc0,
++0x1,0x7f,0x40,0xbc,0x24,0x14,0x25,0x6,0x8,0x33,0xcc,0x1,0xe,0x0,0x3,0x1c,0x0,0xfe,0x2,0xfc,0x48,0x28,0x48,0x88,0x40,0x30,0x4e,0x84,0x20,0xc0,0x0,0x0,
++0x40,0x37,0x10,0x0,0x0,0x70,0x10,0x10,0x10,0x10,0x10,0x11,0x10,0x28,0x47,0x0,0x0,0xfc,0x8,0x10,0x60,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x6,0xfc,0x0,
++0x0,0x40,0x2f,0x10,0x82,0x61,0x23,0xe,0x13,0x22,0xe3,0x20,0x21,0x22,0x25,0x20,0x40,0x44,0xfe,0x40,0xa8,0x10,0xf8,0xe,0xf8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x80,
++0x0,0x7f,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x13,0x12,0x13,0xfe,0x13,0x14,0x19,0x33,0xd0,0x13,0x1f,0x12,0x12,0x53,0x22,0x8,0xfc,0x48,0xf8,0x48,0xf8,0x80,0xf8,0x10,0xe0,0x18,0xfe,0x8,0x8,0xf8,0x8,
++0x20,0x20,0x3f,0x40,0x82,0x79,0x23,0x26,0xfb,0x22,0x23,0x20,0x29,0x32,0x25,0x0,0x40,0x44,0xfe,0x40,0xa8,0x10,0xf8,0xe,0xf8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x80,
++0x0,0x3f,0x20,0x3f,0x29,0x25,0x29,0x23,0x2c,0x31,0x26,0x21,0x46,0x40,0x83,0xc,0x88,0xfc,0x0,0x78,0x48,0x28,0xc8,0x60,0x5e,0x84,0x40,0x90,0x20,0xc0,0x0,0x0,
++0x8,0x49,0x2a,0x2c,0x8,0xff,0x8,0x18,0x1c,0x2b,0x2a,0x48,0x88,0x8,0x8,0x8,0x8,0x8,0x48,0x28,0x8,0x48,0x28,0x28,0xe,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,
++0x1,0x7f,0x10,0x10,0x1f,0x21,0x21,0x52,0x8a,0x4,0x4,0x8,0x10,0x20,0x40,0x0,0x4,0x84,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x1,0xff,0x10,0x1f,0x31,0x4a,0x4,0x39,0x1,0xff,0x2,0x4,0xc,0x15,0x66,0x4,0x4,0x84,0x24,0x24,0x24,0x24,0x24,0xc,0x4,0xfe,0x8,0x90,0x60,0x30,0xe,0x4,
++0x1,0x7f,0x10,0x10,0x1f,0x21,0x21,0x52,0xc,0x8,0x30,0x40,0x28,0x24,0x44,0x80,0x4,0x84,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0xc,0x0,0x90,0x4c,0x46,0x2,
++0x1,0x9,0x9,0x11,0x21,0x41,0x6,0x19,0xe1,0x1f,0x1,0x2,0x2,0x4,0x8,0x30,0x0,0x20,0x18,0xc,0x34,0xc0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x50,0x20,
++0x0,0x44,0x2c,0x13,0x28,0x48,0x8f,0x8,0x19,0x29,0x49,0x89,0x9,0x9,0x51,0x21,0x90,0x90,0x90,0xfc,0x90,0x94,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x2,0x12,0xfa,0x22,0x2f,0x22,0xfa,0x27,0x26,0x2a,0x3a,0xe2,0x42,0x2,0x2,0x2,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x38,0xb8,0x54,0x54,0x92,0x10,0x10,0x10,0x10,
++0x8,0x8,0x8,0x8,0xfe,0x8,0x18,0x1c,0x2a,0x28,0x49,0x8a,0x8,0x8,0x8,0x8,0x20,0x20,0x20,0x24,0xfe,0x20,0x60,0x70,0xa8,0xae,0x24,0x20,0x20,0x20,0x20,0x20,
++0x8,0xfd,0x10,0x13,0x20,0x20,0x7d,0xa6,0x24,0x25,0x26,0x25,0x24,0x3d,0x22,0x0,0x20,0x24,0xa8,0xfe,0x70,0xa8,0x26,0xa4,0xa4,0xde,0x54,0x54,0xbe,0x4,0x4,0x4,
++0x1f,0x1,0x7f,0x41,0x9d,0x1,0x1d,0x8,0x8,0x7e,0x8,0x1c,0x2a,0x49,0x8,0x8,0xf0,0x0,0xfe,0x2,0x74,0x0,0x70,0x20,0x28,0xfc,0x20,0x70,0xae,0x24,0x20,0x20,
++0x10,0x10,0x51,0x51,0x52,0x54,0x58,0x50,0x57,0x54,0x54,0x54,0x54,0x14,0x17,0x14,0x80,0x80,0x4,0xfe,0x0,0x80,0x60,0x24,0xfe,0x44,0x44,0x44,0x44,0x44,0xfc,0x4,
++0x8,0x8,0x14,0x12,0x21,0x50,0x88,0x0,0x7f,0x1,0x2,0x14,0x8,0x4,0x4,0x0,0x0,0x7c,0x44,0x44,0xc8,0xc8,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x20,0x21,0x3c,0x4b,0x90,0x7c,0x55,0x56,0x7c,0x55,0x56,0x7d,0x0,0x1d,0xe2,0x40,0x20,0x24,0xa8,0xfe,0x70,0xa8,0x26,0xa4,0x84,0xde,0x54,0x54,0xbe,0x4,0x4,0x4,
++0x2,0x42,0x22,0x22,0x1f,0x82,0x42,0x47,0x16,0x2a,0xea,0x32,0x22,0x22,0x22,0x22,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x38,0xb8,0x54,0x54,0x92,0x10,0x10,0x10,0x10,
++0x0,0x9f,0x60,0x2f,0xa,0xb,0x1a,0x1f,0x20,0xe7,0x20,0x3f,0x24,0x28,0x32,0x1,0x80,0xfc,0x8,0xfc,0x28,0xe8,0x28,0xf8,0x0,0xf0,0x0,0xfc,0x90,0x8c,0x84,0x0,
++0x8,0x17,0x30,0x5f,0x90,0x17,0x0,0x1f,0x10,0x11,0x11,0x11,0x11,0x2,0xc,0x30,0x18,0xe0,0x44,0xfe,0x40,0xfc,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x2,0x1,0x7f,0x4,0x2,0x1,0x6,0x18,0xe0,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x8,0xfc,0x40,0x80,0x0,0xc0,0x30,0xe,0xf4,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x14,0x18,0x30,0xd3,0x10,0x10,0x10,0x10,0x50,0x20,0x40,0x40,0xa0,0xa0,0x10,0x88,0x4e,0x44,0x0,0xf8,0x8,0x10,0xa0,0x40,0x20,0x20,
++0x0,0x10,0xf8,0x20,0x21,0x22,0xfc,0x28,0x20,0x23,0x20,0x38,0xc0,0x0,0x0,0x0,0x40,0x40,0xa0,0xa0,0x10,0x88,0x4e,0x44,0x0,0xf8,0x8,0x10,0xa0,0x40,0x20,0x20,
++0x8,0xff,0x9,0x1,0x3f,0x1,0xff,0x8,0xa,0x13,0x24,0xc,0x12,0x1,0xe,0x70,0x24,0xfe,0x20,0x0,0xf8,0x0,0xfe,0x20,0x18,0xe8,0x20,0x20,0x40,0x80,0x70,0xe,
++0x1f,0x1,0x7f,0x41,0x9d,0x1,0x1d,0x2,0xc,0x32,0xc1,0xf,0x0,0x2,0x1,0x0,0xf0,0x0,0xfe,0x2,0x74,0x0,0x70,0x80,0x60,0x18,0x6,0xe0,0x40,0x80,0x0,0x80,
++0x8,0x28,0x28,0x2f,0x28,0x29,0xff,0x0,0x49,0x49,0x49,0x55,0x63,0x41,0x7f,0x41,0x20,0x20,0x50,0x50,0x88,0x4e,0x24,0x20,0x0,0xfc,0x4,0x8,0x50,0x20,0x10,0x10,
++0x10,0x10,0x10,0x1c,0x21,0x22,0x7c,0x90,0x10,0x7d,0x10,0x10,0x14,0x18,0x10,0x0,0x40,0x40,0xa0,0xa0,0x10,0x88,0x4e,0x44,0x0,0xf8,0x8,0x10,0xa0,0x40,0x20,0x20,
++0x8,0x8,0x8,0x10,0x11,0x32,0x54,0x98,0x10,0x13,0x10,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0xa0,0xa0,0x10,0x88,0x4e,0x44,0x0,0xf8,0x8,0x10,0xa0,0x40,0x20,0x20,
++0x0,0x44,0x28,0xfe,0x11,0x12,0x7c,0x10,0x10,0x13,0xfc,0x10,0x10,0x20,0x20,0x40,0x40,0x40,0xa0,0xa0,0x10,0x8e,0x44,0x40,0x0,0xf8,0x8,0x10,0xa0,0x40,0x20,0x20,
++0x0,0x40,0x37,0x10,0x0,0xf,0x9,0x12,0x24,0xe1,0x23,0x24,0x28,0x20,0x23,0xc,0x40,0x48,0xfc,0x40,0x44,0xfe,0x10,0x8c,0xf4,0x10,0x10,0xa0,0x40,0xa0,0x1e,0x4,
++0x0,0x7f,0x0,0x3f,0x0,0x7f,0x1,0x1,0x21,0x19,0xa,0x2,0x4,0x8,0x30,0xc0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x0,0x8,0x18,0xa0,0x80,0x40,0x30,0xe,0x4,
++0x0,0x7c,0x45,0x48,0x48,0x53,0x48,0x49,0x46,0x44,0x45,0x6a,0x50,0x40,0x41,0x46,0x20,0x28,0xfc,0x20,0x24,0xfe,0x88,0x44,0x7a,0x88,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x10,0x10,0x54,0x55,0x56,0x54,0x54,0x55,0x54,0x5c,0x74,0x44,0x0,0x0,0x20,0x20,0x50,0x50,0x88,0x4e,0x24,0x20,0x0,0xfc,0x4,0x8,0x50,0x20,0x10,0x10,
++0x10,0x13,0x28,0x24,0x43,0xa1,0x11,0x1,0xff,0x3,0x5,0x29,0x10,0x8,0x8,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x48,0x86,0x2,
++0x0,0x1f,0x10,0x10,0x10,0x1f,0x12,0x2,0x7f,0x2,0x2,0x4,0x4,0x8,0x10,0x60,0x10,0xf8,0x10,0x10,0x10,0xf0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x88,0x50,0x20,
++0x1,0x1,0x2,0x4,0xa,0x11,0x21,0xc0,0x1f,0x0,0x0,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x80,0x40,0x20,0x10,0xe,0x4,0xf0,0x10,0x20,0x40,0x80,0x0,0x80,0x80,
++0x0,0x47,0x34,0x15,0x84,0x65,0x26,0x8,0x17,0x24,0xe4,0x27,0x24,0x24,0x27,0x24,0x84,0x7e,0x24,0x24,0xa4,0x24,0x54,0x88,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x0,0x8,0xff,0x10,0x10,0x11,0x7f,0x10,0x11,0x11,0x1d,0xf1,0x41,0x1,0x2,0x4,0x80,0x48,0xfc,0x40,0x90,0x8,0xfc,0x4,0x50,0x50,0x50,0x50,0x52,0x52,0x4e,0x40,
++0x20,0x27,0x24,0x25,0xfc,0x25,0x66,0x70,0xaf,0x24,0x24,0x27,0x24,0x24,0x27,0x24,0x84,0x7e,0x24,0x24,0xa4,0x24,0x54,0x88,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x0,0x8,0xff,0x10,0x10,0x21,0x23,0x3c,0x65,0xa5,0x25,0x25,0x25,0x3d,0x22,0x4,0x80,0x48,0xfc,0x40,0x90,0x8,0xfc,0x4,0x50,0x50,0x50,0x50,0x52,0x52,0x4e,0x40,
++0x20,0x27,0x24,0x3d,0x4c,0x55,0x86,0x20,0x27,0x24,0x24,0x27,0x2c,0x34,0x27,0x4,0x84,0x7e,0x24,0x24,0xa4,0x24,0x54,0x88,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x2,0x7c,0x40,0x48,0x46,0x4a,0xf0,0x1,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x20,0x4,0xfe,0x44,0x44,0x44,0x44,0x94,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x20,0x18,0x9,0xff,0x2,0x42,0x22,0x14,0x14,0x8,0x8,0x14,0x22,0x43,0x81,0x0,0x4,0x4,0x24,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x0,0x1f,0x10,0x97,0x54,0x55,0x15,0x16,0x30,0x57,0xd4,0x14,0x27,0x24,0x44,0x7,0x84,0xfe,0x80,0x7c,0x24,0x24,0xa4,0x4c,0x80,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,
++0x0,0x40,0x37,0x10,0x80,0x61,0x27,0x8,0x11,0x21,0xe1,0x21,0x21,0x21,0x22,0x24,0x80,0x48,0xfc,0x40,0x90,0x8,0xfc,0x4,0x50,0x50,0x50,0x50,0x52,0x52,0x4e,0x40,
++0x20,0x27,0x24,0x24,0xfc,0x24,0x64,0x74,0xac,0x25,0x26,0x24,0x20,0x21,0x22,0x24,0x84,0x3e,0x24,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xb4,0xa8,0x20,0x20,0x20,
++0x0,0x4,0x2,0x3,0x1,0xff,0x0,0x0,0x4,0xc,0x8,0x10,0x10,0x20,0x40,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x40,0x20,0x10,0x18,0xc,0xc,0x4,0x0,
++0x2,0x2,0x2,0x2,0xff,0x2,0x2,0x4,0x4,0x4,0x8,0x8,0x11,0x16,0x20,0x40,0x0,0x40,0x20,0x4,0xfe,0x80,0x88,0x88,0x90,0xa0,0xc0,0x82,0x82,0x82,0x7e,0x0,
++0x2,0x2,0xff,0x2,0x4,0x18,0x23,0x7f,0x8,0xf,0x8,0xf,0x8,0xff,0x0,0x0,0x40,0x24,0xfe,0xa0,0xc4,0xfc,0x0,0xfc,0x20,0xe0,0x20,0xe0,0x24,0xfe,0x20,0x20,
++0x0,0x8,0x7c,0x48,0x4f,0x48,0x48,0x48,0x49,0x49,0x49,0x7a,0x42,0x4,0xb,0x10,0x80,0xa0,0x90,0x84,0xfe,0xa0,0xa4,0xa4,0x28,0x28,0x30,0x20,0x62,0xa2,0x1e,0x0,
++0x10,0x1f,0x28,0x45,0x2,0x2,0xff,0x2,0x2,0x4,0x4,0x8,0x8,0x11,0x26,0x40,0x40,0x7c,0xa0,0x10,0x40,0x24,0xfe,0x80,0x90,0x90,0xa0,0xc2,0x82,0x82,0x7e,0x0,
++0x1,0x7f,0x48,0x91,0x79,0x4a,0x54,0x61,0x56,0x49,0x4a,0x6b,0x54,0x43,0x40,0x4f,0x0,0xfe,0x22,0x14,0xf0,0xa0,0x40,0xb0,0xe,0xf4,0x40,0xf8,0x40,0xf8,0x40,0xfc,
++0x0,0x7c,0x45,0x4a,0x48,0x50,0x4b,0x48,0x44,0x45,0x45,0x6a,0x51,0x40,0x47,0x40,0x80,0xfc,0x88,0x50,0x20,0xd8,0x6,0xf8,0x20,0x28,0xfc,0x20,0xfc,0x20,0xfe,0x0,
++0x2,0x2,0xff,0x5,0x5,0x9,0x11,0x27,0xc0,0x1,0x1,0x7f,0x1,0x1,0xff,0x0,0x80,0x44,0xfe,0x0,0x10,0x20,0xc4,0x4,0xfc,0x0,0x8,0xfc,0x0,0x4,0xfe,0x0,
++0x10,0x10,0x10,0x10,0xfc,0x13,0x14,0x18,0x31,0xd1,0x11,0x12,0x12,0x14,0x54,0x28,0x80,0xa0,0x90,0x90,0x84,0xfe,0xa0,0xa0,0x24,0x24,0x28,0x32,0x22,0x62,0x9e,0x0,
++0x0,0x7c,0x44,0x48,0x48,0x57,0x48,0x48,0x45,0x45,0x65,0x5a,0x42,0x44,0x44,0x48,0x80,0xa0,0x90,0x90,0x84,0xfe,0xa0,0xa0,0x24,0x24,0x28,0x32,0x22,0x62,0x9e,0x0,
++0x10,0x12,0x11,0x10,0xff,0x11,0x3a,0x34,0x50,0x5f,0x91,0x12,0x11,0x10,0x11,0x16,0x40,0x48,0x50,0x44,0xfe,0x50,0x4c,0x44,0x80,0xfe,0x8,0x8,0xb0,0x40,0xb0,0x8,
++0x11,0xd,0x5,0x7f,0x5,0xd,0x11,0x21,0x2,0xff,0x4,0x8,0x6,0x1,0x6,0x38,0x10,0x30,0x40,0xfc,0x40,0x20,0x1c,0x8,0x0,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x10,0x12,0x11,0x10,0xff,0x11,0x12,0x1c,0x30,0xd7,0x11,0x12,0x11,0x10,0x51,0x26,0x40,0x48,0x50,0x44,0xfe,0x50,0x4c,0x44,0x80,0xfe,0x8,0x8,0xb0,0x40,0xb0,0x8,
++0x10,0x1f,0x28,0x45,0x9,0x5,0x7f,0x5,0x9,0x11,0xff,0x4,0xc,0x3,0x4,0x38,0x40,0x7c,0xa0,0x10,0x20,0x48,0xfc,0x40,0x20,0x14,0xfe,0x20,0x40,0x80,0x60,0x10,
++0x40,0x2f,0x28,0x8,0x8f,0x68,0x2f,0x8,0x2f,0x4c,0xd5,0x54,0x55,0x64,0x44,0x44,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfe,0x4,0xfe,0x44,0x54,0x44,0x54,0x44,0x54,0x48,
++0x0,0x7b,0x48,0x50,0x52,0x62,0x52,0x4a,0x4a,0x4a,0x6a,0x52,0x42,0x42,0x43,0x40,0x4,0xfe,0x20,0x24,0xfe,0xa4,0xa4,0xa4,0xd4,0xcc,0x84,0x94,0x88,0x0,0xfe,0x0,
++0x8,0x8,0xff,0x8,0x1,0x3f,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x40,0x40,0x80,0x20,0x24,0xfe,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x3f,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x40,0x80,0x0,0x4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x0,0x0,
++0x10,0x15,0x1e,0x10,0x12,0x7f,0x42,0x42,0x42,0x7e,0x42,0x40,0x40,0x40,0x80,0x3,0x4,0xfe,0x20,0x44,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0xa4,0x50,0x48,0x86,0x2,
++0x1,0x0,0x3f,0x21,0x20,0x27,0x24,0x24,0x24,0x27,0x24,0x24,0x44,0x44,0x88,0x10,0x0,0x84,0xfe,0x0,0x88,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x12,0x15,0x59,0x51,0x51,0x91,0x11,0x11,0x11,0x11,0x29,0x45,0x82,0x4,0x40,0x20,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x17,0x1a,0x32,0xd2,0x13,0x12,0x12,0x14,0x54,0x29,0x48,0x7c,0x40,0xfe,0x44,0x70,0xc4,0x7c,0x0,0x44,0xfe,0x44,0x44,0x84,0x94,0x8,
++0x1,0x1,0x1,0x1,0x3f,0x20,0x28,0x24,0x22,0x21,0x21,0x22,0x24,0x28,0x3f,0x20,0x4,0xfe,0x0,0x8,0xfc,0x8,0x28,0x68,0x88,0x8,0x88,0x48,0x28,0x18,0xf8,0x8,
++0x1,0x1,0x1,0x3f,0x21,0x21,0x2f,0x21,0x20,0x21,0x2f,0x21,0x41,0x41,0x82,0x1c,0x10,0xf8,0x0,0xfe,0x2,0xf4,0x0,0x8,0xf8,0x0,0xf8,0x8,0x8,0x8,0x28,0x10,
++0x4,0xf,0x10,0x3f,0xe1,0x3f,0x21,0x3f,0x0,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x0,0xe0,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,
++0x8,0x8,0xff,0x1c,0x2a,0x49,0x3f,0x22,0x3f,0x22,0x3f,0x28,0x2f,0x28,0x4f,0x88,0x20,0x24,0xfe,0x70,0xae,0x24,0xfc,0x40,0xf8,0x48,0xf8,0x48,0x50,0x62,0x42,0x3e,
++0x8,0xff,0x10,0x11,0x20,0x23,0x3c,0x64,0xa5,0x24,0x24,0x24,0x25,0x3e,0x20,0x0,0x8,0xfc,0x8,0xf8,0x8,0xfe,0x20,0x24,0x2c,0xb0,0x20,0xb0,0x2e,0x24,0xa0,0x40,
++0x3f,0x1,0x7f,0x49,0x85,0x9,0x3e,0x22,0x22,0x3f,0x8,0x2e,0x29,0x2e,0x70,0x20,0xf8,0x0,0xfe,0x22,0x44,0x20,0x40,0x78,0x88,0x50,0x20,0x50,0xfe,0x88,0x88,0xf8,
++0x4,0x7e,0x44,0x45,0x46,0x44,0x7c,0x50,0x13,0x5d,0x51,0x51,0x51,0x5d,0xe1,0x1,0x40,0x40,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x4,0x7e,0x44,0x55,0x56,0x54,0x54,0x54,0x57,0x55,0x55,0x55,0x29,0x25,0x45,0x81,0x40,0x40,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x0,0x3f,0x22,0x22,0x3f,0x22,0x22,0x3f,0x28,0x28,0x2f,0x48,0x49,0x8a,0xc,0x0,0x84,0xfe,0x40,0x48,0xfc,0x48,0x48,0xf8,0x40,0x48,0x58,0x60,0x42,0x42,0x3e,
++0x40,0x2f,0x28,0x8,0x88,0x4f,0x4a,0x2,0x1a,0x2b,0xca,0x4a,0x4a,0x4b,0x5c,0x8,0x20,0xa0,0xbc,0xc4,0xc4,0xa8,0x90,0x28,0x46,0x84,0x7c,0x44,0x44,0xc4,0x7c,0x44,
++0x20,0x13,0x10,0x1,0xf8,0xb,0x10,0x38,0x56,0x91,0x10,0x11,0x12,0x14,0x11,0x10,0x8,0xfc,0x8,0xf8,0x8,0xfe,0x40,0x44,0x68,0x70,0xd0,0x48,0x4e,0x44,0x40,0x80,
++0x0,0x3f,0x0,0x0,0x1f,0x0,0x0,0xff,0x1,0x11,0x9,0x5,0x9,0x11,0x65,0x2,0x10,0xf8,0x10,0x10,0xf0,0x10,0x14,0xfe,0x8,0x10,0xa0,0x40,0x20,0x1e,0x4,0x0,
++0x0,0x7c,0x44,0x49,0x48,0x50,0x48,0x4b,0x44,0x45,0x45,0x69,0x51,0x41,0x41,0x41,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x1,0xf7,0x11,0x55,0x33,0x55,0x9,0x14,0x2b,0xd1,0x24,0x48,0x12,0x24,0x9,0x10,0x20,0xa8,0x24,0x20,0x3e,0xe0,0x20,0x24,0x24,0x28,0x10,0x30,0x52,0x8a,0xa,0x4,
++0x8,0xfc,0x9,0x49,0x49,0x49,0x49,0x49,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x2a,0x14,0x40,0x24,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x3f,0x20,0x20,0x20,0x20,0x3f,0x20,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x11,0x1d,0x21,0x21,0x7d,0x91,0x10,0x7c,0x13,0x12,0x12,0x16,0x1a,0x13,0x2,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0xb,0xa,0x12,0x12,0x33,0x50,0x90,0x17,0x14,0x14,0x14,0x14,0x14,0x17,0x14,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x20,0x10,0x10,0xfd,0x22,0x20,0x3d,0x25,0x25,0x25,0x25,0x25,0x25,0x45,0x95,0x9,0x80,0x80,0x88,0xfc,0x10,0x60,0x84,0x4c,0x50,0x20,0x20,0x10,0x10,0x4e,0x84,0x0,
++0x3f,0x20,0x3f,0x25,0x29,0x32,0x25,0x29,0x39,0x29,0x29,0x29,0x4b,0x4c,0x88,0xb,0xfc,0x4,0xfc,0x0,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xf8,0x90,0x60,0x9c,
++0x3f,0x20,0x3f,0x24,0x22,0x3f,0x22,0x24,0x28,0x21,0x3f,0x22,0x46,0x41,0x82,0xc,0xfc,0x4,0xfc,0x90,0xa4,0xfe,0xa0,0x98,0x88,0x0,0xfe,0x10,0x20,0xc0,0x30,0x8,
++0x10,0x12,0x21,0x20,0x47,0xf9,0x12,0x24,0x40,0xff,0x1,0x2,0x19,0xe0,0x41,0x6,0x40,0x48,0x50,0x40,0xfe,0x50,0x4c,0x44,0x80,0xfe,0x8,0x8,0xb0,0x40,0xb0,0x8,
++0x1,0x1,0x1,0x3f,0x21,0x21,0x2f,0x21,0x20,0x20,0x20,0x2a,0x4a,0x52,0x81,0x0,0x10,0xf8,0x0,0xfe,0x2,0xf4,0x0,0x8,0xf8,0x0,0x80,0x48,0x46,0x12,0xf0,0x0,
++0x10,0x1f,0x10,0x2f,0x40,0xbf,0x0,0x3f,0x0,0x1f,0x0,0xff,0x12,0xa,0x32,0x6,0x8,0xfc,0x0,0xf8,0x0,0xf8,0x48,0xe8,0x48,0xc8,0x48,0xf8,0x48,0x8a,0x6a,0x4,
++0x8,0x8,0x13,0x10,0x27,0x48,0x8b,0x10,0x30,0x57,0x90,0x10,0x1f,0x10,0x10,0x10,0x40,0x48,0xfc,0x48,0xfe,0x48,0xf8,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,
++0x2,0x1,0x7f,0x1,0x42,0x27,0x11,0x22,0x4f,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x0,0x8,0xfc,0x0,0x44,0x88,0x10,0x48,0xe4,0x20,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x0,0x40,0x20,0x2f,0x8,0x88,0x5f,0x48,0x18,0x28,0xc9,0x4b,0x4d,0x51,0x50,0x60,0x90,0xf8,0x80,0xfe,0x82,0xf4,0x80,0x88,0x78,0x0,0x40,0x24,0x2a,0xa,0xf8,0x0,
++0x10,0x13,0x20,0x21,0x44,0xff,0x10,0x22,0x41,0xf9,0x0,0x1,0x1a,0xe4,0x41,0x0,0x8,0xfc,0x8,0xf8,0x8,0xfe,0x40,0x44,0x4c,0x50,0xe0,0x50,0x48,0x4e,0x44,0x80,
++0x2,0x1,0xff,0x4,0x14,0x14,0x24,0x24,0x44,0x1,0x21,0x21,0x21,0x21,0x3f,0x20,0x0,0x4,0xfe,0x40,0x50,0x48,0x44,0x44,0x40,0x0,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x2,0x1,0xff,0x4,0x14,0x34,0x44,0x3f,0x1,0x1f,0x1,0xff,0x1,0x1,0x5,0x2,0x0,0x4,0xfe,0x40,0x50,0x4c,0x74,0x80,0x0,0xf0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x2,0x1,0xff,0x4,0x14,0x24,0x44,0x1f,0x0,0x1,0xff,0x1,0x1,0x1,0x5,0x2,0x0,0x4,0xfe,0x40,0x50,0x4c,0x44,0xe0,0x80,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x1,0x40,0x3f,0x22,0x6,0x8a,0x52,0x42,0x10,0x2f,0xc1,0x42,0x44,0x48,0x50,0x40,0x0,0x84,0xfe,0x20,0x30,0x2c,0x24,0xa0,0x84,0xfe,0xc0,0xa0,0x90,0x8e,0x84,0x80,
++0xc,0x70,0x44,0x44,0x64,0x54,0x54,0x44,0x44,0x5c,0xe4,0x4,0x8,0x10,0x60,0x0,0x4,0xfe,0x84,0x84,0xa4,0x94,0x94,0x84,0x84,0xc4,0xa8,0x90,0x80,0x80,0x80,0x80,
++0x2,0x7,0x78,0x8,0x8,0x9,0xff,0x8,0xa,0x3f,0x22,0x22,0x22,0x22,0x3e,0x22,0x40,0x40,0x40,0x40,0x40,0x40,0xc0,0x40,0x40,0x40,0x40,0x42,0x42,0x42,0x3e,0x0,
++0x10,0x10,0x17,0x10,0xfc,0x13,0x16,0x1a,0x32,0xd3,0x10,0x11,0x12,0x14,0x51,0x20,0x80,0x44,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x0,0x4,0x7e,0x55,0x56,0x54,0x7c,0x54,0x55,0x57,0x55,0x7d,0x41,0x1,0x1,0x1,0x80,0x80,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x10,0xfd,0x11,0x12,0x1d,0x31,0xd1,0x11,0x11,0x11,0x11,0x50,0x20,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,0x10,0x30,0xc0,0x0,0x4,0x4,0xfc,0x0,
++0x10,0x10,0x20,0xfc,0x21,0x51,0x52,0xfd,0x11,0x11,0x1d,0xf1,0x51,0x11,0x10,0x10,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,0x10,0x30,0xc0,0x0,0x4,0x4,0xfc,0x0,
++0x8,0x8,0x8,0x10,0x11,0x32,0x54,0x99,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,0x10,0x30,0xc0,0x0,0x4,0x4,0xfc,0x0,
++0x1,0x1,0x2,0x2,0x4,0x8,0x30,0xc8,0x8,0x9,0xe,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x80,0x80,0x40,0x30,0x1e,0x24,0x60,0x80,0x0,0x0,0x8,0x8,0xf8,0x0,
++0x0,0x40,0x30,0x10,0x1,0x82,0x64,0x29,0x11,0x11,0xe1,0x21,0x21,0x21,0x20,0x20,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,0x10,0x30,0xc0,0x0,0x4,0x4,0xfc,0x0,
++0x10,0x10,0x10,0x20,0x25,0x7e,0x4,0x9,0x11,0x7d,0x1,0x1,0xd,0x71,0x20,0x0,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,0x0,0x10,0x30,0xc0,0x0,0x4,0x4,0xfc,0x0,
++0x0,0x40,0x30,0x10,0x1,0x2,0xf4,0x11,0x11,0x11,0x11,0x11,0x15,0x19,0x10,0x0,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,0x0,0x10,0x30,0xc0,0x0,0x4,0x4,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x3f,0x24,0x24,0x3f,0x2,0x7,0x18,0x64,0x2,0x1,0x6,0x78,0x40,0x44,0xfe,0x48,0xfc,0x48,0x48,0xf8,0x0,0xf8,0x8,0x10,0x60,0x80,0x0,0x0,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x54,0x54,0x55,0x7c,0x51,0x14,0x1c,0xe5,0x42,0x0,0x4,0xfe,0x24,0xfc,0x24,0xfc,0x20,0x48,0xf0,0x24,0xfc,0x20,0xa8,0x26,0xa2,0x40,
++0x0,0x7f,0x44,0x44,0x44,0x7f,0x42,0x2,0x7,0x8,0x14,0x62,0x1,0x6,0x18,0xe0,0x4,0xfe,0x44,0x44,0x44,0xfc,0x4,0x0,0xf0,0x10,0x20,0xc0,0x0,0x0,0x0,0x0,
++0x0,0x4f,0x29,0x29,0xf,0x8,0xe1,0x23,0x26,0x29,0x20,0x20,0x27,0x50,0x8f,0x0,0x4,0xfe,0x24,0x24,0xfc,0x84,0x0,0xf8,0x8,0x10,0xa0,0xc0,0x0,0x6,0xfc,0x0,
++0x10,0x13,0x22,0x3e,0x42,0x83,0x7e,0x10,0x10,0x7d,0x13,0x10,0x14,0x18,0x11,0x6,0x4,0xfe,0x94,0x94,0x94,0xfc,0x44,0x80,0xfc,0x4,0x8,0x90,0x60,0x40,0x80,0x0,
++0x22,0x3f,0x50,0x89,0x7f,0x44,0x44,0x7f,0x44,0xf,0x10,0x28,0x4,0x3,0xe,0x70,0x44,0x7e,0xa0,0x14,0xfe,0x44,0x44,0xfc,0x4,0xf0,0x10,0x20,0x40,0x80,0x0,0x0,
++0x8,0xfd,0x9,0x49,0x49,0x49,0x48,0x48,0x7d,0x4,0x5,0x1c,0xe4,0x45,0x16,0x8,0x4,0xfe,0x24,0xfc,0x24,0xfc,0x20,0x48,0xf0,0x24,0xfc,0x20,0xa8,0x26,0xa2,0x40,
++0x40,0x33,0x12,0x2,0xfb,0xa,0x12,0x33,0x58,0x97,0x18,0x11,0x12,0x1c,0x10,0x10,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0xfe,0xe0,0x50,0x4e,0x44,0x40,0x40,
++0x8,0x8,0xff,0x9,0x41,0x23,0x24,0x80,0x49,0x12,0x2f,0xe2,0x22,0x22,0x23,0x22,0x20,0x24,0xfe,0x20,0xf8,0x10,0xa0,0x40,0xb0,0xe,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x1,0x41,0x31,0x13,0x84,0x60,0x20,0x9,0x12,0x27,0xea,0x22,0x22,0x22,0x23,0x22,0x0,0x0,0xf8,0x10,0xa0,0x40,0xa0,0x10,0xe,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0xfc,0x8,0x49,0x4a,0x48,0x48,0x48,0x7d,0x7,0x5,0x1d,0xe5,0x45,0x15,0x9,0x80,0x80,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x20,0x21,0x4a,0xf8,0x10,0x20,0x41,0xfb,0x5,0x1,0x19,0xe1,0x41,0x1,0x80,0x80,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x13,0x10,0x11,0xfd,0x25,0x25,0x25,0x25,0x44,0x28,0x13,0x28,0x44,0x84,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x4,0x24,0xf4,0x4,0x4,0x28,0x10,
++0x2,0x1,0x7f,0x44,0x44,0x44,0x7f,0x44,0x4e,0x4d,0x54,0x54,0x65,0x44,0x84,0x4,0x0,0x8,0xfc,0x20,0x20,0x24,0xfe,0x20,0x70,0x68,0xae,0xa4,0x20,0x20,0x20,0x20,
++0x0,0xb,0xfc,0x11,0x11,0x11,0x7d,0x11,0x11,0x10,0x1c,0xf3,0x40,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x4,0x24,0xf4,0x4,0x4,0x14,0x8,
++0x8,0xff,0x10,0x11,0x21,0x25,0x3f,0x65,0xa5,0x24,0x24,0x27,0x24,0x3c,0x24,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x4,0x24,0xf4,0x4,0x4,0x14,0x8,
++0x10,0x13,0x10,0x7d,0x55,0x55,0x55,0x55,0x55,0x7c,0x10,0x17,0x1c,0xe4,0x40,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0xfc,0x4,0x24,0xf4,0x4,0x4,0x14,0x8,
++0x0,0x3f,0x0,0x8,0x8,0x8,0x8,0x8,0xf,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x4,0x24,0xf4,0x4,0x4,0x28,0x10,
++0x7e,0x42,0x42,0x7e,0x0,0x3f,0x0,0x8,0x8,0x8,0xf,0x0,0x0,0xff,0x0,0x0,0xfc,0x84,0x84,0xfc,0x20,0xf0,0x20,0x20,0x20,0x24,0xfe,0x4,0x24,0xf4,0x14,0x8,
++0x0,0x20,0xff,0xa9,0xa9,0xa9,0xaf,0xa9,0xab,0xab,0xad,0xe9,0x89,0x11,0x21,0x1,0x80,0x44,0xfe,0x10,0x10,0x14,0xfe,0x10,0x30,0xb8,0x56,0x54,0x90,0x10,0x10,0x10,
++0x0,0xb,0x7c,0x49,0x49,0x49,0x49,0x49,0x49,0x48,0x48,0x7f,0x48,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x4,0x24,0xf4,0x4,0x4,0x14,0x8,
++0x20,0x27,0x24,0x24,0xff,0x24,0x24,0x24,0x27,0x20,0x38,0xe7,0x40,0x0,0x1f,0x0,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x40,0x48,0xfc,0x40,0x44,0xfe,0x0,
++0x0,0x7f,0x0,0x8,0x6,0x2,0x20,0x19,0x9,0xff,0x2,0x2,0x4,0x8,0x30,0xc0,0x0,0xfc,0x84,0x88,0x80,0x80,0x80,0x0,0x4,0xfe,0x0,0xc0,0x30,0x18,0xc,0x4,
++0x1,0x1,0x7f,0x1,0x3f,0x1,0x1,0xff,0x4,0xf,0xa,0x11,0x20,0x43,0xc,0x30,0x0,0x8,0xfc,0x0,0xf8,0x0,0x4,0xfe,0x0,0xf0,0x20,0x40,0x80,0x40,0x30,0xe,
++0x1,0x1,0x3f,0x1,0x1,0x7f,0x8,0x6,0x22,0x18,0x8,0xff,0x1,0x2,0xc,0x30,0x0,0x10,0xf8,0x0,0x0,0xfc,0x4,0x88,0x80,0x80,0x84,0xfe,0x40,0x30,0x18,0x8,
++0x0,0x47,0x31,0x11,0x1,0x1,0xf1,0x11,0x11,0x11,0x12,0x14,0x10,0x28,0x47,0x0,0x4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0x50,0x20,0x6,0xfc,0x0,
++0x8,0x7c,0x48,0x4b,0x48,0x78,0x4f,0x48,0x49,0x79,0x4a,0x4a,0x4c,0x48,0x49,0x98,0x80,0x40,0x0,0xc4,0x4c,0x50,0xe0,0xe0,0x50,0x50,0x48,0x4e,0x44,0x40,0x40,0x80,
++0x1,0x79,0x4f,0x49,0x48,0x7f,0x48,0x48,0x4b,0x7a,0x4a,0x4b,0x4a,0x7a,0x4a,0x2,0x10,0x14,0xfe,0x10,0x4,0xfe,0x90,0x94,0xfe,0x94,0x94,0x6c,0x4,0x4,0x14,0x8,
++0x23,0x22,0x23,0x3a,0x2b,0x48,0x57,0x84,0x27,0x20,0x23,0x21,0x28,0x30,0x21,0x6,0xfc,0x4,0xfc,0x4,0xfc,0x0,0xfe,0x92,0xfe,0x0,0xfc,0x8,0x90,0x60,0x9e,0x4,
++0x2,0x1,0xff,0x4,0x14,0x24,0x45,0x1,0x1f,0x11,0x11,0x1f,0x1,0x1,0x7f,0x0,0x0,0x4,0xfe,0x40,0x50,0x4c,0x44,0x10,0xf8,0x10,0x10,0xf0,0x0,0x8,0xfc,0x8,
++0x41,0x31,0x1f,0x1,0x80,0x6f,0x21,0x1,0x1f,0x29,0xe9,0x2a,0x2c,0x28,0x28,0x28,0x20,0x24,0xfe,0x20,0x8,0xfc,0x20,0x24,0xfe,0x24,0x24,0xd4,0xc,0x4,0x14,0x8,
++0x8,0xff,0x8,0x1f,0x11,0x1f,0x0,0x7f,0x44,0x7f,0x40,0x1f,0x4,0x3,0xc,0x70,0x24,0xfe,0x20,0xf0,0x10,0xf0,0x4,0xfe,0x44,0xfc,0x4,0xf0,0x40,0x80,0x60,0x1c,
++0x1f,0x10,0x1f,0x10,0x1f,0x0,0x7f,0x44,0x44,0x7f,0x40,0x1f,0x4,0x3,0xc,0x70,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x44,0x44,0xfc,0x4,0xf0,0x40,0x80,0x60,0x1c,
++0x13,0x12,0x13,0x5a,0x57,0x50,0x97,0x14,0x14,0x17,0x10,0x13,0x11,0x10,0x11,0x16,0xf8,0x8,0xf8,0x8,0xf8,0x4,0xfe,0xa4,0xa4,0xfc,0x0,0xf8,0x10,0xe0,0x18,0x6,
++0x47,0x34,0x17,0x4,0x87,0x60,0x2f,0x9,0x19,0x2f,0xe0,0x27,0x22,0x21,0x26,0x38,0xf8,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x24,0x24,0xfc,0x0,0xf0,0x20,0xc0,0x30,0xe,
++0x47,0x24,0x27,0x4,0x7,0xe0,0x2f,0x29,0x2f,0x28,0x23,0x22,0x29,0x30,0x23,0xc,0xf8,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x24,0xfc,0x4,0xf0,0x10,0x20,0xc0,0x30,0xe,
++0x8,0x8,0xff,0x8,0x8,0x2,0x1,0xff,0x10,0x10,0x10,0x10,0x10,0x10,0x1f,0x0,0x20,0x24,0xfe,0x20,0x20,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,
++0x8,0x8,0xff,0x8,0x20,0x10,0x90,0x47,0x41,0x9,0x11,0xe1,0x21,0x21,0x21,0x20,0x20,0x24,0xfe,0x20,0x0,0x80,0x44,0xfe,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,
++0x2,0x1,0xff,0x10,0x10,0x10,0x1f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x0,0x4,0xfe,0x0,0x0,0x10,0xf8,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x20,0x13,0x12,0x2,0xfe,0x43,0x42,0x42,0x43,0x42,0x42,0x4a,0x7e,0x2,0x3,0x2,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x44,0xfe,0x40,0x20,0x20,0x10,0x92,0xa,0x6,
++0x10,0x10,0x10,0x10,0x5f,0x5a,0x52,0x92,0x12,0x12,0x12,0x12,0x12,0x13,0x10,0x10,0x80,0x60,0x20,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,
++0x4,0x4,0xff,0x4,0x5,0x2,0xff,0x4,0x8,0x34,0xc4,0x3f,0x4,0x4,0x8,0x30,0x40,0x44,0xfe,0x40,0x50,0x8,0xfe,0x40,0x30,0x4e,0x44,0xf8,0x40,0x40,0x40,0x40,
++0x1,0x89,0x51,0x2f,0x51,0x91,0x17,0x14,0x34,0x54,0x97,0x14,0x14,0x14,0x57,0x24,0x10,0x10,0x14,0xfe,0x10,0x14,0xfe,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x4,
++0x4,0x4,0xff,0x4,0x1f,0x0,0x1,0x0,0xff,0x1,0x2,0x4,0x8,0x10,0x22,0x1,0x40,0x44,0xfe,0x40,0xf0,0x20,0x40,0x80,0xfe,0x82,0x84,0x80,0x80,0x80,0x80,0x0,
++0x21,0x21,0x39,0x27,0x41,0x79,0xa7,0x24,0xfc,0x24,0x27,0x24,0x2c,0x34,0x27,0x4,0x10,0x10,0x14,0xfe,0x10,0x14,0xfe,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x4,
++0x0,0x0,0x3f,0x2,0x2,0x3,0x3e,0x2,0x3,0xfe,0x2,0x2,0x2,0x2,0x1,0x0,0x10,0x78,0x80,0x0,0x20,0xf0,0x0,0x8,0xfc,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x0,0x1f,0x0,0x2,0x1,0x0,0xff,0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x2,0x1,0x0,0xf0,0x20,0x40,0x80,0x80,0xfe,0x84,0x88,0x80,0x80,0x80,0x80,0x80,0x80,0x0,
++0x21,0x26,0x3c,0x44,0x84,0x7c,0x24,0x24,0xfd,0x26,0x24,0x20,0x29,0x31,0x22,0x4,0x4,0x3e,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xb4,0xa8,0xa0,0x20,0x20,0x20,0x20,
++0x4,0xe,0x30,0x22,0x22,0x22,0x22,0x22,0x22,0x2e,0x32,0x2,0x4,0x18,0x60,0x0,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x54,0x48,0x40,0x40,0x40,0x40,
++0x8,0x8,0xff,0x8,0x9,0x1,0x3f,0x21,0x20,0x20,0x20,0x20,0x20,0x23,0x4c,0x80,0x40,0x44,0xfe,0x40,0x20,0x10,0xfc,0x0,0x88,0x88,0x50,0x60,0xa0,0x12,0xa,0x6,
++0x0,0x7f,0x40,0x5f,0x40,0x5f,0x40,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x1f,0x10,0x4,0xfe,0x4,0xf4,0x4,0xf4,0x4,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x20,0x23,0x22,0xfa,0xaa,0xaa,0xa8,0xa9,0xa9,0xa9,0xa9,0xb9,0x21,0x21,0x21,0x21,0x4,0xfe,0x4,0xf4,0x4,0xf4,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x4,0x8,0x35,0xd5,0x49,0x39,0x25,0xcd,0x15,0x65,0xc,0x14,0x64,0x4,0x29,0x12,0x40,0x84,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x54,0x50,0x50,0x92,0x92,0xe,0x0,
++0x6,0x78,0x40,0x48,0x4e,0x72,0xc1,0x1f,0x10,0x11,0x11,0x11,0x11,0x2,0xc,0x70,0x4,0xfe,0x44,0x44,0x54,0x88,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0xc0,0x38,0x8,
++0x1,0x1,0x2,0x2,0x4,0x8,0x10,0x21,0x41,0x2,0x4,0x8,0x10,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x40,0x80,0x0,0x0,0x0,0x20,0x10,0x8,0xfc,0x4,0x0,
++0x0,0x8,0xfc,0x10,0x10,0x11,0x12,0x7c,0x10,0x10,0x10,0x10,0x1c,0xe0,0x41,0x6,0x40,0x40,0x40,0x84,0xfe,0x8,0x88,0x88,0x88,0x90,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x10,0x10,0x10,0xfc,0x11,0x32,0x38,0x54,0x50,0x90,0x10,0x10,0x10,0x11,0x16,0x40,0x40,0x40,0x84,0xfe,0x8,0x88,0x88,0x88,0x90,0x50,0x20,0x50,0x88,0xe,0x4,
++0x12,0x12,0x13,0x14,0xff,0x12,0x32,0x3a,0x57,0x52,0x94,0x14,0x17,0x10,0x10,0x10,0x0,0x8,0xfc,0x0,0xf8,0x8,0x88,0x48,0xfe,0x8,0x88,0x48,0xfc,0x8,0x28,0x10,
++0x2,0xff,0x28,0x2a,0xff,0xaa,0xaa,0xae,0xc2,0x83,0x82,0xfe,0x82,0x82,0xfe,0x82,0x40,0x44,0x7e,0x80,0x4,0x7e,0x44,0x64,0x54,0xfe,0x84,0xa4,0x94,0xfc,0x4,0x18,
++0x1f,0x1,0x7f,0x49,0x85,0x9,0x10,0x1f,0x20,0x5f,0x12,0xff,0x20,0x3f,0x0,0x0,0xf0,0x0,0xfe,0x22,0x44,0x20,0x0,0xf8,0x0,0xf0,0x14,0xfe,0x90,0xf8,0x10,0x30,
++0x11,0x11,0x11,0x17,0x55,0x59,0x51,0x91,0x10,0x1f,0x10,0x10,0x29,0x46,0x84,0x0,0x10,0x10,0x14,0xfe,0x10,0xf0,0x10,0xf0,0x44,0xfe,0x40,0xe0,0x50,0x4e,0x44,0x40,
++0x40,0x31,0x11,0x1,0x81,0x62,0x24,0x3,0x12,0x21,0xe1,0x20,0x20,0x20,0x23,0x2c,0x10,0xf8,0x10,0x10,0x10,0xe,0x0,0xf8,0x8,0x10,0x10,0xa0,0x40,0xa0,0x1e,0x8,
++0x0,0x3f,0x21,0x21,0x3f,0x20,0x2f,0x28,0x28,0x2f,0x28,0x2f,0x28,0x48,0x8f,0x8,0x8,0xfc,0x8,0x8,0xf8,0x8,0xfc,0x8,0x8,0xf8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x21,0x21,0x21,0x27,0xf9,0x49,0x49,0x49,0x48,0x8f,0x50,0x20,0x51,0x4a,0x84,0x0,0x10,0x10,0x10,0xfc,0x10,0xf0,0x10,0xf0,0x44,0xfe,0x40,0xe0,0x50,0x4e,0x44,0x40,
++0x21,0x20,0x3f,0x20,0x43,0x78,0xa0,0x27,0xf8,0x20,0x2f,0x20,0x28,0x31,0x22,0xc,0x10,0xa0,0xfc,0x40,0xf8,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0xa0,0x10,0xe,0x4,
++0x10,0x10,0x1f,0x20,0x5f,0x12,0x11,0x10,0xff,0x12,0x21,0x20,0x3f,0x0,0x0,0x0,0x0,0x8,0xfc,0x10,0xf8,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0xf8,0x20,0xa0,0x40,
++0x8,0x6,0x2,0x7f,0x1,0x3f,0x1,0xff,0x1,0x1,0x7f,0x1,0x2,0x4,0x18,0xe0,0x20,0x60,0x88,0xfc,0x0,0xf8,0x0,0xfe,0x0,0x8,0xfc,0x0,0x80,0x60,0x1e,0x4,
++0x0,0x8,0x7c,0x4b,0x48,0x48,0x48,0x7f,0x48,0x48,0x48,0x49,0x7a,0x44,0x8,0x0,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0xe0,0xd0,0x48,0x4e,0x44,0x40,0x40,
++0x2,0x1,0x7f,0x40,0xa4,0x24,0x25,0x3c,0x4,0xff,0x24,0x24,0x24,0x25,0x46,0x4,0x0,0x0,0xfe,0x2,0x24,0x20,0xfc,0x20,0x24,0xfe,0x20,0x70,0xa8,0x2e,0x24,0x20,
++0x20,0x20,0x20,0x23,0xf8,0x48,0x48,0x4f,0x48,0x88,0x50,0x21,0x52,0x4c,0x88,0x0,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0xe0,0xd0,0x48,0x4e,0x44,0x40,0x40,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x46,0x84,0x0,0x4,0xfe,0x24,0x24,0xfc,0x0,0x7c,0x44,0x44,0x7c,0x44,0x7c,0x44,0x44,0x7c,0x44,
++0x20,0x1b,0x48,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x14,0x8,
++0x20,0x1b,0x48,0x42,0x41,0x44,0x54,0x54,0x64,0x44,0x44,0x43,0x40,0x40,0x40,0x40,0x4,0xfe,0x4,0x4,0x4,0x84,0x94,0xc,0xc,0x24,0x24,0xe4,0x4,0x4,0x14,0x8,
++0x10,0x12,0x11,0x24,0x24,0x64,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x0,0x4,0x7e,0x84,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x14,0x8,
++0x8,0x8,0xff,0x8,0x7c,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x7d,0x41,0x2,0xc,0x20,0x24,0xfe,0x28,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,0x8,0x8,0x28,0x10,
++0x4,0x7f,0x4,0x7f,0x40,0x8f,0x0,0x7f,0x6,0x3b,0x5,0x1a,0x64,0x18,0x62,0x1,0x48,0xfc,0x40,0xfe,0x2,0xe4,0x0,0xfc,0x10,0x30,0xc0,0xa0,0x90,0x8e,0x84,0x0,
++0x10,0x10,0x17,0x10,0xff,0x14,0x39,0x34,0x53,0x50,0x97,0x10,0x13,0x10,0x17,0x10,0x90,0x94,0xfe,0x90,0xfe,0x2,0xf4,0x0,0xfc,0xc0,0x68,0xb0,0x68,0xae,0x24,0x60,
++0x3e,0x22,0x22,0x3e,0x22,0x22,0x3e,0x21,0x2,0x4,0x3f,0x24,0x24,0x24,0xff,0x0,0xf8,0x88,0x88,0xf8,0x88,0x88,0xf8,0x8,0x28,0x10,0xf8,0x48,0x48,0x48,0xfe,0x0,
++0x20,0x23,0x38,0x40,0x80,0x7b,0x20,0x21,0xf8,0x23,0x22,0x22,0x2a,0x32,0x2f,0x0,0x0,0xf8,0x10,0x60,0x48,0xfc,0x40,0x40,0x88,0xfc,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x0,0x8b,0x50,0x20,0x50,0x97,0x10,0x11,0x30,0x53,0x92,0x12,0x12,0x12,0xaf,0x40,0x0,0xf8,0x10,0x60,0x48,0xfc,0x40,0x40,0x88,0xfc,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x8,0x8,0xff,0x8,0x1c,0x2a,0x49,0x8c,0x7,0xc,0x14,0x22,0x1,0x1,0xe,0x70,0x20,0x24,0xfe,0x20,0x70,0xae,0x24,0x20,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,
++0x0,0x1f,0x0,0x0,0x1,0xff,0x1,0x5,0x2,0x3f,0x24,0x24,0x24,0x24,0xff,0x0,0x0,0xf0,0x20,0xc0,0x4,0xfe,0x0,0x0,0x8,0xfc,0x48,0x48,0x48,0x48,0xfe,0x0,
++0x8,0x7c,0x4a,0x49,0x49,0x78,0x4f,0x48,0x78,0x48,0x49,0x49,0x7a,0x44,0x0,0x0,0x40,0x40,0x44,0x4c,0x50,0x44,0xfe,0x40,0xe0,0xe0,0x50,0x48,0x4e,0x44,0x40,0x40,
++0x2,0xff,0x28,0x29,0xfe,0xaa,0xaa,0xaf,0xc2,0x82,0x82,0xfe,0x82,0x82,0xff,0x82,0x10,0x10,0x52,0x34,0xb8,0x10,0x7e,0x90,0xb0,0xb8,0xd6,0x92,0x90,0x90,0x46,0x3c,
++0x1,0x0,0x7f,0x44,0x5f,0x4e,0x55,0x64,0x41,0x5f,0x41,0x4f,0x41,0x5f,0x81,0x1,0x0,0x84,0xfe,0x10,0x7c,0x38,0x54,0x92,0x40,0x7c,0x40,0x78,0x40,0x7c,0x40,0x40,
++0x1,0x0,0x7f,0x44,0x5f,0x4e,0x55,0x64,0x44,0x42,0x7f,0x41,0x42,0x4c,0xb0,0x0,0x0,0x84,0xfe,0x10,0x7c,0x38,0x54,0x92,0x90,0xa4,0xfe,0xc0,0xb0,0x8e,0x84,0x80,
++0x0,0x40,0x32,0x11,0x0,0x0,0xf7,0x10,0x11,0x11,0x12,0x14,0x10,0x28,0x44,0x83,0x40,0x40,0x48,0x50,0x40,0x44,0xfe,0x40,0x60,0x50,0x48,0x48,0x40,0x40,0x6,0xfc,
++0x0,0x40,0x29,0x24,0x4,0x0,0xe3,0x2c,0x24,0x24,0x24,0x2d,0x34,0x24,0xa,0x11,0x20,0x20,0x24,0xa8,0x20,0x24,0xfe,0x20,0x70,0x68,0xa4,0x24,0x20,0x20,0x6,0xfc,
++0x8,0xfc,0x8,0x8,0x9,0x79,0x4a,0x40,0x48,0x7c,0x9,0xa,0x8,0x8,0x50,0x20,0x80,0x80,0x80,0xfe,0x2,0x4,0x20,0x20,0xa8,0xa4,0x26,0x22,0x20,0x20,0xa0,0x40,
++0x1,0x21,0x19,0xd,0x5,0x1,0xff,0x3,0x3,0x5,0x9,0x11,0x21,0xc1,0x1,0x1,0x0,0x8,0x18,0x20,0x40,0x4,0xfe,0x0,0x80,0x40,0x20,0x10,0xe,0x4,0x0,0x0,
++0x8,0x1c,0xf0,0x10,0x11,0xfd,0x11,0x39,0x35,0x55,0x55,0x99,0x13,0x15,0x18,0x10,0x0,0x80,0x60,0x2c,0x8,0x10,0x10,0x20,0x28,0x44,0x86,0x2,0x8,0x8,0xf8,0x0,
++0x0,0x7f,0x11,0x9,0x0,0x1f,0x10,0x11,0x11,0x11,0x11,0x12,0x2,0x4,0x18,0x60,0xfc,0x0,0x10,0x20,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x90,0x80,0x82,0x82,0x7e,
++0x40,0x30,0x10,0x0,0x81,0x61,0x21,0x9,0x15,0x25,0xe5,0x29,0x23,0x25,0x28,0x20,0x0,0x80,0x60,0x2c,0x8,0x10,0x10,0x20,0x28,0x44,0x86,0x2,0x8,0x8,0xf8,0x0,
++0x2,0x1,0x7f,0x42,0x89,0x28,0x4b,0xc,0x77,0x1,0x3f,0x21,0x3f,0x1,0x7f,0x20,0x0,0x0,0xfe,0x2,0x24,0xc8,0x4,0x10,0xf0,0x0,0xf8,0x8,0xf8,0x4,0xfc,0x4,
++0x2,0x1,0x7f,0x42,0x89,0x28,0x4b,0xc,0x77,0x1,0x21,0x21,0x21,0x21,0x3f,0x20,0x0,0x0,0xfe,0x2,0x24,0xc8,0x4,0x10,0xf0,0x0,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x7f,0x40,0x9f,0x10,0x1f,0x10,0x1f,0x0,0xff,0x9,0x1f,0x29,0xc9,0x9,0x1,0x0,0xfe,0x2,0xf4,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x20,0xf0,0x2e,0x24,0x60,0x0,
++0x10,0x10,0x13,0x12,0xff,0x12,0x33,0x38,0x57,0x54,0x94,0x14,0x14,0x14,0x10,0x10,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x44,0xfe,0x44,0x44,0x44,0x54,0x48,0x40,0x40,
++0x0,0x7b,0x4a,0x4a,0x4a,0x7b,0x4a,0x4a,0x4b,0x7a,0x4a,0x4a,0x4a,0x7a,0x4b,0x2,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x44,0xfe,0x40,0x20,0x20,0x10,0x92,0xa,0x6,
++0x10,0x10,0x23,0x22,0x4b,0xfa,0x13,0x20,0x47,0xfc,0x4,0x4,0x1c,0xe4,0x40,0x0,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x44,0xfe,0x44,0x44,0x44,0x54,0x48,0x40,0x40,
++0x7f,0x40,0x5f,0x40,0x5f,0x8,0xf,0x10,0x1f,0x31,0x51,0x9f,0x12,0x4,0x18,0x60,0xfc,0x4,0xf4,0x4,0xf4,0x0,0xe0,0x48,0xfc,0x8,0x8,0xf8,0x88,0x82,0x82,0x7e,
++0x8,0x8,0x1f,0x10,0x20,0x7f,0xa1,0x21,0x21,0x3f,0x22,0x2,0x4,0x8,0x30,0xc0,0x0,0x0,0xe0,0x40,0x88,0xfc,0x8,0x8,0x8,0xf8,0x88,0x80,0x80,0x82,0x82,0x7e,
++0x10,0x10,0x3e,0x24,0x48,0xff,0x49,0x49,0x7f,0x55,0x14,0x24,0x25,0x44,0x83,0x0,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x44,0x44,0x94,0xa,0x2,0xfe,0x0,
++0x10,0x10,0x10,0x11,0xfe,0x25,0x25,0x25,0x25,0x45,0x28,0x10,0x28,0x45,0x82,0x4,0x80,0x80,0xf8,0x10,0x24,0xfe,0x24,0x24,0xfc,0x54,0x50,0x90,0x92,0x12,0xe,0x0,
++0x10,0x17,0x20,0x20,0x4b,0xfa,0x12,0x22,0x42,0xfa,0x2,0x2,0x1a,0xe2,0x43,0x2,0x4,0xfe,0x40,0x84,0xfe,0x94,0x94,0xf4,0x94,0x94,0xf4,0x94,0x94,0x94,0xfc,0x4,
++0x0,0xff,0x2,0x4,0x7f,0x44,0x44,0x47,0x44,0x44,0x44,0x47,0x44,0x44,0x7f,0x40,0x4,0xfe,0x0,0x4,0xfe,0x44,0x44,0xc4,0x44,0x44,0x44,0xc4,0x44,0x44,0xfc,0x4,
++0x4,0x4,0xff,0x4,0x4,0x0,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x20,0x40,0x44,0xfe,0x40,0x40,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x21,0x21,0x21,0x2f,0xf9,0x21,0x27,0x2c,0x34,0xe4,0x27,0x24,0x24,0x24,0xa7,0x44,0x10,0x10,0x14,0xfe,0x10,0x14,0xfe,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x4,
++0x9,0x7d,0x49,0x4f,0x49,0x79,0x4b,0x4a,0x4a,0x7a,0x4b,0x4a,0x4a,0x7a,0x4b,0x2,0x10,0x10,0x14,0xfe,0x10,0x14,0xfe,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x4,
++0x8,0xff,0xa,0xc,0x12,0x6b,0x2d,0x31,0xc9,0x15,0x24,0xcc,0x14,0xe4,0x29,0x12,0x24,0xfe,0x20,0x20,0x44,0xfe,0x4,0xfc,0x4,0xfc,0x90,0x90,0x92,0x92,0xe,0x0,
++0x4,0xe,0x78,0x8,0x8,0xfe,0x8,0x1d,0x1a,0x28,0x28,0x48,0x88,0x8,0x8,0xb,0x20,0x20,0x20,0x20,0xa8,0xa6,0xa2,0x20,0x24,0x24,0x28,0x10,0x20,0x40,0x80,0x0,
++0x80,0x61,0x2f,0x9,0x9,0x8f,0x69,0x29,0x9,0x1f,0x29,0xc9,0x4f,0x48,0x41,0x46,0x10,0x10,0x90,0x10,0x10,0x54,0x52,0x52,0x90,0x14,0x14,0x8,0x10,0x60,0x80,0x0,
++0x1,0x0,0x3f,0x20,0x20,0x20,0x2f,0x28,0x28,0x28,0x2f,0x28,0x48,0x48,0x8f,0x8,0x0,0x84,0xfe,0x0,0x80,0x88,0xfc,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0xf8,0x8,
++0x10,0x10,0x10,0x10,0xfc,0x24,0x24,0x25,0x24,0x44,0x28,0x10,0x28,0x44,0x80,0x3,0x20,0x20,0x20,0x20,0xa8,0xa6,0xa2,0x20,0x24,0x24,0x28,0x10,0x20,0x40,0x80,0x0,
++0x4,0xff,0x4,0x3f,0x24,0x24,0x3f,0x1,0x3f,0x21,0x21,0x28,0x24,0x40,0x41,0x8e,0x44,0xfe,0x40,0xf8,0x48,0x48,0xf8,0x20,0xfc,0x0,0x8,0x90,0xa0,0x42,0xa2,0x1e,
++0x0,0xff,0x1,0x1,0x11,0x11,0x11,0x21,0x2,0x2,0x4,0x4,0x8,0x10,0x60,0x0,0x4,0xfe,0x0,0x0,0x8,0x18,0x20,0x40,0x80,0x80,0x40,0x20,0x10,0xe,0x4,0x0,
++0x0,0x7f,0x40,0x40,0x40,0x7f,0x42,0x42,0x7f,0x42,0x41,0x41,0x48,0x50,0x60,0x40,0x10,0xf8,0x10,0x10,0x10,0xf0,0x0,0x8,0xfc,0x0,0x0,0x0,0x80,0x42,0x32,0xe,
++0x10,0x13,0x12,0x12,0xfe,0x13,0x16,0x1a,0x33,0xd2,0x12,0x12,0x12,0x12,0x53,0x22,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x44,0xfe,0x40,0x20,0x20,0x10,0x92,0xa,0x6,
++0x0,0x0,0x3f,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0xff,0x0,0x0,0x0,0x8,0xfc,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xfe,0x0,0x0,
++0x10,0x11,0x3f,0x20,0x7f,0xa9,0x25,0x21,0xff,0x29,0x45,0x41,0x7f,0x1,0xa,0x4,0x20,0x20,0xa0,0x24,0x7e,0x84,0x44,0x44,0xc8,0x28,0x28,0x10,0xa8,0x28,0x46,0x84,
++0x12,0x11,0x10,0x12,0x5a,0x57,0x52,0x92,0x12,0x12,0x12,0x13,0x12,0x12,0x12,0x12,0x4,0x7e,0x4,0x44,0x24,0xfc,0x94,0x54,0x54,0x24,0x54,0x8c,0x4,0x4,0x14,0x8,
++0x20,0x1b,0x48,0x41,0x41,0x4f,0x49,0x49,0x49,0x4f,0x49,0x41,0x41,0x5f,0x40,0x40,0x4,0xfe,0x4,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x4,0x24,0xf4,0x14,0x14,0x8,
++0x0,0x4,0x7e,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x7c,0x44,0x1,0x1,0x2,0x4,0x4,0xfe,0x84,0x84,0x84,0xfc,0x84,0x84,0x84,0xfc,0x84,0x84,0x4,0x4,0x14,0x8,
++0x10,0x13,0x12,0x14,0x7d,0x55,0x55,0x55,0x7d,0x54,0x10,0x17,0x1c,0xe4,0x41,0x2,0x0,0xfe,0x2,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x40,0x24,0xfe,0x0,0x88,0x6,0x2,
++0x0,0x8,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x78,0x48,0x7,0x0,0x0,0x0,0x40,0x88,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x10,0x1e,0x20,0x21,0x7e,0x90,0x10,0x7c,0x11,0x12,0x10,0x14,0x18,0x10,0x0,0x40,0x40,0xfc,0x84,0x88,0x50,0x20,0x40,0x84,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x2,0x2,0x7,0x4,0xc,0x12,0x1,0x6,0x18,0xef,0x8,0x8,0x8,0x8,0xf,0x8,0x0,0x0,0xf0,0x10,0x20,0x40,0x80,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x1,0x1,0x2,0x4,0x8,0x3f,0xc0,0x3e,0x22,0x22,0x22,0x22,0x3e,0x22,0x0,0x0,0x0,0x0,0x80,0x40,0x30,0xfe,0x8,0xfc,0x88,0x88,0x88,0xc8,0xa8,0x90,0x80,0x80,
++0x0,0x4f,0x24,0x22,0x4,0xe0,0x21,0x22,0x2c,0x21,0x22,0x20,0x2b,0x30,0x20,0x3,0x84,0xfe,0xa4,0x94,0xa4,0xc4,0x20,0x50,0x8e,0x24,0x40,0x90,0x20,0x40,0x80,0x0,
++0x11,0x11,0x1f,0x11,0xfd,0x13,0x16,0x1b,0x32,0xd3,0x10,0x1f,0x10,0x10,0x51,0x26,0x10,0x14,0xfe,0x10,0x18,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0xa0,0x1c,0x8,
++0x8,0xff,0x8,0x3f,0x21,0x3f,0x2,0xff,0x4,0x1f,0x21,0xdf,0x1,0x3f,0x1,0x3,0x24,0xfe,0x20,0xf8,0x8,0xf8,0x0,0xfe,0x40,0xf0,0x8,0xf6,0x0,0xf8,0x0,0x0,
++0x8,0xff,0x9,0x7f,0x44,0x7f,0x4c,0x56,0x65,0x7f,0x42,0x44,0x4f,0x74,0x84,0x7,0x24,0xfe,0x20,0xfc,0x20,0xfc,0x70,0xae,0x24,0xfc,0x0,0x8,0xfc,0x8,0x8,0xf8,
++0x11,0x11,0x1f,0x11,0xfd,0x13,0x32,0x3b,0x56,0x53,0x90,0x1f,0x10,0x10,0x11,0x16,0x10,0x14,0xfe,0x10,0x18,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0xb0,0xe,0x4,
++0x1,0x79,0x4f,0x49,0x49,0x7b,0x4a,0x4b,0x4a,0x7b,0x48,0x4f,0x48,0x48,0x49,0x9e,0x10,0x14,0xfe,0x10,0x18,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0xb0,0xe,0x4,
++0x1,0x7f,0x44,0x44,0x7f,0x4e,0x55,0x64,0x7f,0x42,0x44,0x4f,0x54,0x64,0x87,0x4,0x4,0xfe,0x20,0x24,0xfe,0x70,0xa8,0x24,0xfe,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,
++0x1,0x7f,0x44,0x44,0x7f,0x4e,0x55,0x64,0x5f,0x41,0x4f,0x41,0x7f,0x41,0x85,0x2,0x8,0xfc,0x20,0x20,0xfc,0x70,0xae,0x24,0xf0,0x0,0xf0,0x0,0xfc,0x0,0x0,0x0,
++0x0,0x3f,0x22,0x3f,0x26,0x2b,0x32,0x2f,0x28,0x2f,0x28,0x2f,0x49,0x42,0x8c,0x30,0x84,0xfe,0x20,0xfc,0x30,0x6e,0xa4,0xf8,0x88,0xf8,0x88,0xf8,0x40,0x52,0x42,0x3e,
++0x10,0x10,0x10,0x17,0xfc,0x10,0x13,0x1c,0x30,0xd0,0x11,0x12,0x14,0x10,0x50,0x20,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x40,0xe0,0xd0,0x48,0x4e,0x44,0x40,0x40,0x40,
++0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x7f,0x3,0x3,0x5,0x9,0x11,0x61,0x1,0x1,0x0,0x0,0x4,0xfe,0x0,0x0,0x8,0xfc,0x80,0x40,0x20,0x18,0xe,0x4,0x0,0x0,
++0x4,0x4,0x7f,0x4,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x1,0x2,0xc,0x70,0x40,0x48,0xfc,0x40,0x50,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,0x80,0x60,0x1c,
++0x0,0x3f,0x29,0x25,0x3f,0x1,0x3f,0x1,0x7f,0x24,0x42,0x81,0x3f,0x1,0x1,0x7f,0x8,0xfc,0x28,0x48,0xf8,0x0,0xf8,0x0,0xfc,0x48,0x26,0x12,0xf8,0x0,0x8,0xfc,
++0x1,0x7f,0x49,0x6b,0x5d,0x7f,0x8,0x7f,0x8,0xf,0x78,0x5,0x55,0x54,0x91,0x2,0x20,0xb0,0x28,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0xe,0x4,
++0x0,0x40,0x30,0x1f,0x80,0x60,0x27,0x8,0x10,0x20,0xe1,0x22,0x24,0x20,0x20,0x20,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x40,0xe0,0xd0,0x48,0x4e,0x44,0x40,0x40,0x40,
++0x1,0x41,0x2f,0x11,0x81,0x63,0x22,0xb,0x12,0x23,0xe0,0x3f,0x20,0x20,0x23,0x2c,0x10,0x14,0xfe,0x10,0x18,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0xb0,0xe,0x4,
++0x1,0x7f,0x44,0x84,0x3f,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x2,0xc,0x30,0x0,0xfe,0x42,0x54,0xf8,0x40,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x80,0x60,0x1c,
++0x0,0x7f,0x44,0x48,0x48,0x51,0x49,0x49,0x45,0x45,0x45,0x69,0x51,0x41,0x41,0x41,0x4,0xfe,0x20,0x20,0x44,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x2,0x42,0x3f,0x12,0x3,0x2,0xf2,0x13,0x10,0x1f,0x10,0x10,0x15,0x1a,0x14,0x0,0x8,0x8,0xfe,0x8,0xf8,0x8,0x8,0xf8,0x44,0xfe,0x40,0xe0,0x50,0x4e,0x44,0x40,
++0x1,0x2,0x4,0x8,0x3f,0x1,0x11,0x1f,0x21,0x41,0x1,0xff,0x1,0x1,0x1,0x1,0x0,0x0,0x20,0x10,0xf8,0x8,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x8,0x8,0x7f,0x8,0xf,0x8,0x8,0xf,0x1,0xff,0x1,0x3,0x5,0x19,0x61,0x1,0x20,0x28,0xfc,0x20,0xe0,0x20,0x20,0xe0,0x4,0xfe,0x0,0x80,0x60,0x1c,0x8,0x0,
++0x10,0x13,0x12,0x12,0xfe,0x12,0x12,0x1f,0x34,0xd4,0x14,0x14,0x17,0x10,0x50,0x20,0x8,0xfc,0x8,0x88,0x48,0x8,0x8,0xfe,0x8,0x88,0x48,0x8,0xfc,0x8,0x50,0x20,
++0x8,0x8,0x48,0x4a,0x7f,0x48,0x89,0x8,0x8,0xe,0x18,0xe8,0x8,0x8,0xb,0x8,0x20,0x20,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x2,0x1,0xff,0x0,0x0,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x21,0x3f,0x20,0x0,0x4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x10,0x10,0xfc,0x24,0x24,0x27,0x25,0x45,0x29,0x11,0x29,0x44,0x84,0x0,0x4,0xfe,0x84,0xa4,0x94,0x84,0x84,0xfe,0x4,0x24,0x14,0x4,0xfe,0x4,0x28,0x10,
++0x0,0x1f,0x10,0x12,0x11,0x10,0x10,0xff,0x20,0x22,0x21,0x20,0x3f,0x0,0x0,0x0,0x10,0xf8,0x10,0x10,0x90,0x90,0x14,0xfe,0x10,0x10,0x90,0x90,0xf8,0x10,0xa0,0x40,
++0x4,0x7f,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x2,0xff,0x4,0x9,0x37,0xc1,0x1,0x1f,0x48,0xfc,0x50,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x40,0x30,0xce,0x4,0x20,0xf0,
++0x4,0x7f,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x4,0xff,0x8,0x1f,0x28,0xcf,0x8,0xf,0x48,0xfc,0x50,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x20,0xf0,0x28,0xe6,0x20,0xe0,
++0x4,0x7f,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x4,0xff,0x11,0x3f,0xd1,0x11,0x11,0x1,0x48,0xfc,0x50,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x10,0xfe,0x14,0x50,0x20,0x0,
++0x4,0x7f,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x4,0xff,0x12,0x22,0xdf,0x4,0x8,0x30,0x48,0xfc,0x50,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x10,0xe,0xe4,0x20,0xa0,0x40,
++0x4,0x7f,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x4,0xff,0x12,0x22,0xcb,0x12,0x22,0x6,0x48,0xfc,0x50,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x10,0xe,0x24,0x90,0x90,0x0,
++0x1,0x1,0x1,0x1,0xff,0x1,0x3,0x3,0x5,0x9,0x11,0x21,0xc1,0x1,0x1,0x1,0x0,0x0,0x0,0x4,0xfe,0x0,0x80,0x40,0x20,0x10,0x8,0xe,0x4,0x0,0x0,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0xf0,0x10,0x0,
++0x8,0x7c,0x4b,0x48,0x48,0x78,0x4f,0x49,0x4a,0x7c,0x4b,0x48,0x48,0x78,0x4f,0x0,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x10,0x4c,0x44,0xf8,0x40,0x40,0x44,0xfe,0x0,
++0x8,0x8,0x48,0x48,0x7e,0x49,0x8a,0x8,0xe,0x18,0xe8,0x8,0x8,0x8,0x9,0xe,0x40,0x40,0x40,0x84,0xfe,0x8,0x88,0x88,0x88,0x90,0x50,0x20,0x50,0x88,0xe,0x4,
++0x8,0x1c,0xf3,0x12,0x13,0xfe,0x33,0x39,0x52,0x54,0x53,0x90,0x13,0x10,0x10,0x17,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x50,0x64,0x42,0x90,0x20,0xc8,0x10,0x60,0x80,
++0x1,0x2,0xc,0x37,0xc0,0x1f,0x10,0x1f,0x0,0x3f,0x1,0x1f,0x1,0x7f,0x1,0x3,0x0,0x80,0x60,0xde,0x4,0xf0,0x10,0xf0,0x30,0xc0,0x0,0xf0,0x0,0xfc,0x0,0x0,
++0x0,0xf,0x72,0x52,0x5f,0x52,0x52,0x52,0x5f,0x52,0x52,0x74,0x54,0x9,0x10,0x0,0x0,0xde,0x52,0x54,0xd4,0x54,0x58,0x54,0xd2,0x52,0x52,0x52,0x5a,0x54,0x90,0x10,
++0x0,0x8,0x7c,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4b,0x4a,0x7a,0x4a,0x2,0x2,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xa4,0x94,0x14,0x4,0x4,0x4,0x14,0x8,
++0x20,0x20,0x38,0x23,0x42,0x7a,0xa2,0x22,0xfa,0x22,0x23,0x22,0x2a,0x32,0x22,0x2,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xa4,0x94,0x14,0x4,0x4,0x4,0x14,0x8,
++0x0,0x7f,0x9,0x9,0x7f,0x9,0x9,0x9,0x7f,0x9,0x9,0x11,0x11,0x25,0x42,0x0,0x4,0x7e,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x20,0x27,0x22,0x22,0xfa,0x4f,0x4a,0x4a,0x8a,0x57,0x22,0x52,0x4d,0x84,0x8,0x0,0x0,0xde,0x52,0x52,0x54,0xd4,0x58,0x54,0x54,0xd2,0x52,0x5a,0x54,0x90,0x10,0x10,
++0x10,0x10,0x20,0x23,0x4a,0xfa,0x12,0x22,0x42,0xfa,0x3,0x2,0x1a,0xe2,0x42,0x2,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xa4,0x94,0x14,0x4,0x4,0x4,0x14,0x8,
++0x10,0x1f,0x10,0x2f,0x40,0x9f,0x0,0x7f,0x8,0x8,0x9,0x8,0x10,0x10,0x21,0x40,0x8,0xfc,0x0,0xf8,0x0,0xf8,0x88,0xc8,0x88,0x88,0xe8,0x28,0x2a,0x2a,0x4a,0x84,
++0x0,0x7f,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0x10,0x10,0x20,0x40,0x80,0x0,0x10,0xf8,0x10,0x10,0x20,0x44,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x10,0x17,0x10,0x10,0xfc,0x24,0x24,0x24,0x24,0x49,0x29,0x11,0x2a,0x4a,0x84,0x8,0x8,0xfc,0x88,0x88,0x88,0x90,0x94,0xbe,0x84,0x4,0x4,0x4,0x4,0x4,0x28,0x10,
++0x1,0xff,0x8,0x8,0x10,0x7f,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x43,0x0,0x8,0x88,0x8,0x8,0xfe,0x8,0x8,0x88,0x68,0x28,0x8,0x8,0x8,0x8,0x28,0x10,
++0x1,0x1,0x7f,0x2,0x4,0x8,0x10,0xef,0x0,0x0,0x3f,0x1,0x9,0x11,0x65,0x2,0x0,0x8,0xfc,0x80,0x40,0x30,0x4e,0xe4,0x0,0x10,0xf8,0x0,0x20,0x18,0x8,0x0,
++0x1,0x1,0xff,0x1,0x1,0x7f,0x48,0x44,0x5f,0x41,0x41,0x5f,0x41,0x41,0x41,0x40,0x0,0x4,0xfe,0x0,0x4,0xfe,0x24,0x44,0xf4,0x4,0x4,0xf4,0x4,0x4,0x14,0x8,
++0x0,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x21,0x1,0xff,0x2,0x2,0x4,0x18,0x60,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x4,0x4,0x4,0x28,0x10,
++0x0,0x4,0xfe,0x4,0x44,0x45,0x2a,0x28,0x10,0x10,0x28,0x24,0x44,0x80,0x0,0x0,0x60,0x50,0x44,0xfe,0x90,0x90,0xfc,0x90,0x90,0xfc,0x90,0x90,0x94,0xfe,0x80,0x80,
++0x1,0x3f,0x9,0x7f,0x52,0x9e,0x4,0x7f,0x4,0x3f,0x4,0x7f,0xc,0x14,0x65,0x6,0x10,0xf8,0x20,0xfe,0x92,0xf4,0x40,0xfc,0x40,0xf8,0x40,0xfc,0x90,0x60,0x1c,0x8,
++0x10,0x10,0x10,0x17,0xfc,0x10,0x10,0x1f,0x30,0xd7,0x11,0x11,0x11,0x11,0x52,0x2c,0x80,0x88,0xfc,0x80,0x48,0x32,0xd2,0xe,0x8,0xfc,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x8,0x7c,0x48,0x4f,0x48,0x7a,0x4b,0x4a,0x4a,0x7a,0x4a,0x4b,0x4a,0x4a,0x4b,0x9a,0x80,0x40,0x4,0xfe,0x0,0x14,0x14,0xa4,0xa4,0x44,0xa4,0x1c,0xc,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x17,0x58,0x52,0x53,0x92,0x12,0x12,0x12,0x13,0x12,0x12,0x13,0x12,0x80,0x40,0x4,0xfe,0x0,0x14,0x14,0xa4,0xa4,0x44,0xa4,0x1c,0xc,0x4,0xfc,0x4,
++0x40,0x37,0x10,0x42,0x41,0x5f,0x41,0x41,0x4f,0x49,0x49,0x49,0x49,0x41,0x41,0x40,0x4,0xfe,0x4,0x4,0x24,0xf4,0x4,0x24,0xf4,0x24,0x24,0x24,0x64,0x4,0x14,0x8,
++0x40,0x30,0x10,0x0,0x87,0x64,0x27,0xc,0x17,0x20,0xe0,0x3f,0x20,0x20,0x20,0x20,0x88,0xfc,0x80,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x80,0x84,0xfe,0x80,0x80,0x80,0x80,
++0x0,0xb,0x7e,0x4a,0x4a,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x7c,0x44,0x8,0x10,0x20,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x88,0x98,0xa0,0xc0,0x80,0x82,0x82,0x7e,0x0,
++0x20,0x27,0x20,0x3a,0x49,0x51,0x80,0x20,0x2f,0x21,0x22,0x21,0x28,0x30,0x21,0x6,0x1c,0xe0,0x0,0x44,0x24,0x28,0x80,0x84,0xfe,0x8,0x8,0x10,0xa0,0xe0,0x18,0x8,
++0x1,0x1,0x1,0x1,0x7f,0x41,0x41,0x42,0x42,0x44,0x48,0x50,0x40,0x40,0x40,0x40,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x84,0x64,0x34,0x14,0x4,0x4,0x14,0x8,
++0x21,0x21,0x2f,0x21,0xf1,0x57,0x55,0x55,0x55,0x97,0x53,0x23,0x55,0x49,0x81,0x1,0x10,0x50,0xf4,0x1e,0x24,0xd4,0x54,0x54,0x54,0xd4,0x14,0x88,0x54,0x14,0x24,0x42,
++0x10,0x10,0x24,0x44,0xfe,0x2,0x7c,0x44,0x7c,0x44,0x44,0x7c,0x44,0x44,0x54,0x48,0x80,0x88,0x98,0xa0,0xc0,0x84,0x84,0x7c,0x0,0x88,0x98,0xa0,0xc0,0x82,0x82,0x7e,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x49,0x29,0x12,0x2a,0x46,0x84,0x8,0x4,0xfe,0x4,0x4,0x4,0xfc,0x0,0x40,0x44,0x4c,0x50,0x60,0x42,0x42,0x3e,0x0,
++0x1f,0x1,0x7f,0x49,0x85,0x9,0x2,0x3c,0x20,0x3e,0x20,0x3f,0x24,0x4,0x18,0x60,0xf0,0x0,0xfe,0x22,0x44,0x20,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x48,0x42,0x42,0x3e,
++0x8,0x8,0xb,0x12,0x12,0x33,0x52,0x92,0x13,0x12,0x10,0x10,0x11,0x11,0x12,0x14,0x40,0x84,0x3e,0x4,0x4,0xbc,0x4,0x4,0xfc,0x94,0x90,0x90,0x12,0x12,0xe,0x0,
++0x40,0x37,0x14,0x4,0x84,0x67,0x25,0xd,0x15,0x25,0xe5,0x25,0x25,0x29,0x28,0x10,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x8,0x18,0x20,0x40,0x80,0x2,0x2,0xfe,0x0,
++0x0,0x3f,0x20,0x20,0x20,0x3f,0x24,0x24,0x24,0x24,0x27,0x24,0x24,0x44,0x43,0x80,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x10,0x30,0xc0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x10,0x12,0xfe,0x12,0x16,0x1a,0x32,0xd2,0x12,0x12,0x13,0x12,0x50,0x20,0x0,0x8,0x88,0x48,0x68,0x28,0x8,0x8,0x8,0x8,0x48,0x88,0x14,0x22,0x42,0x80,
++0x11,0x11,0x11,0x23,0x22,0x64,0xa8,0x20,0x21,0x21,0x22,0x24,0x20,0x20,0x21,0x20,0x0,0x0,0x0,0xfc,0x4,0x8,0x40,0x40,0x50,0x48,0x4c,0x44,0x40,0x40,0x40,0x80,
++0x0,0x7f,0x44,0x44,0x7f,0x44,0x41,0x7f,0x42,0x47,0x4c,0x54,0x47,0x40,0x7f,0x0,0x8,0xfc,0x40,0x50,0xf8,0x40,0x8,0xfc,0x0,0xf0,0x10,0x10,0xf0,0x8,0xfc,0x0,
++0x0,0x78,0x4f,0x48,0x4b,0x78,0x4f,0x48,0x4b,0x7a,0x4a,0x4a,0x4a,0x4a,0x49,0x9a,0x14,0x10,0xfe,0x10,0xd0,0x10,0xf0,0x10,0xe8,0x28,0xa8,0xa8,0xaa,0xaa,0x4a,0x24,
++0x2,0x41,0x30,0x17,0x0,0x2,0xf2,0x12,0x12,0x13,0x12,0x10,0x10,0x29,0x47,0x0,0x8,0x10,0xa0,0xfc,0x40,0x48,0x48,0x48,0x48,0xf8,0x48,0x40,0x80,0x6,0xfc,0x0,
++0x0,0x47,0x30,0x10,0x87,0x64,0x24,0xf,0x10,0x24,0xe2,0x22,0x24,0x20,0x22,0x21,0x0,0xbc,0x84,0x84,0xbc,0x20,0x24,0xbe,0x84,0xa4,0x94,0x94,0xa4,0x84,0x94,0x8,
++0x8,0xff,0x8,0x3f,0x1,0x9,0x9,0xff,0x10,0x1f,0x10,0x1f,0x29,0x24,0x44,0x0,0x24,0xfe,0x20,0xf8,0x0,0xf0,0x4,0xfe,0x0,0xf8,0x0,0xfc,0x24,0x94,0x94,0xc,
++0x10,0x10,0x10,0x10,0xfc,0x10,0x14,0x18,0x33,0xd2,0x12,0x12,0x12,0x12,0x53,0x22,0x40,0x40,0x44,0x7e,0x40,0x40,0x40,0x44,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x8,0x1f,0x11,0x21,0x41,0x1f,0x11,0x11,0x11,0xff,0x1,0x1,0x1,0x1,0x1,0x0,0x8,0xfc,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x0,0xb,0xfe,0x12,0x13,0x22,0x2b,0x7e,0xaa,0x2b,0x2a,0x2a,0x3c,0x24,0x8,0x0,0x4,0xfe,0x4,0x4,0xfc,0x50,0xfc,0x50,0x54,0xfe,0xc4,0xa8,0x90,0x8e,0xc4,0x80,
++0x21,0x21,0x27,0x21,0xff,0x21,0x22,0x3c,0x67,0xa1,0x22,0x27,0x20,0x3f,0xa0,0x40,0x10,0x10,0xfc,0x10,0xfe,0x10,0xae,0x84,0xf8,0x0,0x40,0xf8,0x40,0xfe,0x40,0x40,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x14,0x18,0x33,0xd0,0x10,0x12,0x16,0x1a,0x52,0x21,0x40,0x40,0xa0,0xa0,0x10,0x8e,0x44,0x0,0xf8,0x10,0x20,0x80,0x64,0x22,0x8,0xf8,
++0x1,0x2,0x4,0x8,0x12,0x21,0xc1,0x1f,0x0,0x0,0x4,0x13,0x51,0x50,0x8f,0x0,0x0,0x80,0x40,0x20,0x10,0xe,0x4,0xf8,0x20,0x40,0x0,0x0,0x14,0x12,0xf2,0x0,
++0x10,0x10,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x1,0x40,0x28,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x44,0x48,0x30,0x10,0x4e,0x84,0x0,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x57,0x61,0x41,0x41,0x7f,0x41,0x41,0x7f,0x41,0x20,0x94,0x7e,0x44,0x44,0x7c,0x44,0x44,0x7c,0x60,0x52,0x54,0x48,0x48,0x64,0x42,
++0x2,0x4,0x1f,0x10,0x14,0x12,0x12,0x10,0x10,0x1f,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0xa0,0x44,0xfe,0x4,0x24,0xf4,0x4,0x28,0x10,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x2e,0x22,0x22,0x24,0x24,0x48,0x50,0x82,0x1,0x4,0xfe,0x4,0x4,0xfc,0x84,0x80,0xa4,0xa8,0xb0,0xa0,0x90,0x8e,0x84,0x80,0x0,
++0x10,0x13,0x12,0x12,0xff,0x12,0x16,0x1b,0x30,0xd0,0x17,0x10,0x10,0x10,0x5f,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x7f,0x8,0xf,0x8,0xf,0x8,0x7f,0x0,0x7e,0x2,0x24,0x14,0x8,0x16,0x62,0x8,0xfc,0x20,0xe0,0x20,0xe0,0x28,0xfc,0x20,0xfc,0x4,0x48,0x28,0x10,0x2e,0xc4,
++0x4,0xff,0x10,0x7e,0x42,0x7e,0x41,0x7e,0x42,0x7e,0x40,0xf,0x0,0x7f,0x1,0x3,0x44,0xfe,0x20,0xf8,0x50,0x50,0xfc,0x20,0xf8,0x20,0x20,0xe0,0x88,0xfc,0x0,0x0,
++0x0,0x8,0x7d,0x49,0x49,0x49,0x4f,0x48,0x4a,0x4a,0x4a,0x4a,0x7b,0x4a,0x3,0x2,0x40,0x48,0x7c,0x40,0x40,0x44,0xfe,0x0,0x44,0x44,0x44,0xb4,0x14,0x4,0xfc,0x4,
++0x23,0x21,0x39,0x41,0x81,0x79,0x27,0x20,0xff,0x24,0x22,0x22,0x29,0x32,0x22,0xc,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x8,0xfe,0x62,0x94,0x94,0x8,0x98,0xa4,0x42,
++0x20,0x21,0x3b,0x42,0x83,0x7a,0x23,0x22,0xfb,0x20,0x2f,0x20,0x29,0x32,0x24,0x0,0x80,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x44,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x40,0x37,0x14,0x4,0x87,0x64,0x24,0xf,0x10,0x20,0xe7,0x20,0x20,0x20,0x2f,0x20,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x9,0x9,0x13,0x12,0x34,0x59,0x91,0x12,0x14,0x11,0x10,0x2,0x51,0x50,0x90,0xf,0x0,0x0,0xfc,0x4,0x48,0x40,0x50,0x4c,0x44,0x40,0x80,0x0,0x84,0x92,0x12,0xf0,
++0x10,0x10,0x10,0x13,0xfe,0x14,0x30,0x3b,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x40,0x20,0x20,0xfe,0x2,0x4,0x0,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x44,0x2c,0x13,0x2a,0x4c,0x88,0xb,0x18,0x28,0x48,0x88,0x8,0x8,0x50,0x20,0x40,0x20,0x20,0xfe,0x2,0x4,0x0,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x8,0x89,0x6e,0x28,0x8,0x7,0x28,0x2f,0x32,0xc2,0x5f,0x42,0x45,0x44,0x48,0x11,0x0,0x7c,0x4,0x28,0x90,0x88,0x7e,0x82,0x14,0x50,0xdc,0x50,0x70,0xd0,0x8e,0x4,
++0x2,0x1,0x7f,0x40,0x80,0x0,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x0,0x0,0xfe,0x2,0x4,0x0,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x10,0x13,0xfa,0x14,0x10,0x1b,0x30,0xd0,0x10,0x10,0x10,0x10,0x50,0x20,0x40,0x20,0x20,0xfe,0x2,0x4,0x0,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x40,0x30,0x10,0x7,0x84,0x68,0x20,0xf,0x10,0x20,0xe0,0x20,0x20,0x20,0x21,0x20,0x80,0x40,0x40,0xfe,0x2,0x4,0x0,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x1,0x11,0x11,0x1f,0x21,0x21,0x41,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x13,0x10,0x10,0xfc,0x10,0x14,0x1b,0x30,0xd0,0x10,0x10,0x10,0x10,0x57,0x20,0x8,0xfc,0x88,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0x88,0x88,0xfe,0x0,
++0x20,0x27,0x39,0x41,0x81,0x79,0x21,0x27,0xf9,0x21,0x21,0x29,0x31,0x21,0xf,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0xfe,0x0,
++0x10,0x17,0x21,0x21,0x49,0xf9,0x11,0x27,0x41,0xf9,0x1,0x1,0x19,0xe1,0x47,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0xfe,0x0,
++0x8,0x7c,0x4b,0x4a,0x4c,0x78,0x48,0x49,0x4b,0x7d,0x49,0x49,0x49,0x49,0x49,0x99,0x40,0x40,0xfc,0x44,0x48,0x80,0x84,0x4c,0x50,0x20,0x20,0x10,0xe,0x44,0x80,0x0,
++0x40,0x30,0x17,0x4,0x88,0x60,0x20,0x9,0x13,0x25,0xe9,0x21,0x21,0x21,0x21,0x21,0x40,0x40,0xfc,0x44,0x48,0x80,0x84,0x4c,0x50,0x20,0x20,0x10,0xe,0x44,0x80,0x0,
++0x1,0x1,0x7f,0x41,0x81,0x2,0x2,0x5,0x9,0x18,0x28,0x48,0x88,0xa,0xc,0x8,0x0,0x0,0xfe,0x2,0x4,0x0,0x8,0x18,0x20,0xc0,0x80,0x40,0x30,0xe,0x4,0x0,
++0x0,0x7f,0x1,0x1,0x3f,0x1,0x1,0x7f,0x4,0x4,0xff,0x4,0x8,0x8,0x10,0x60,0x8,0xfc,0x0,0x10,0xf8,0x0,0x8,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x11,0x10,0xfe,0x22,0x22,0x22,0x42,0x24,0x14,0x8,0x14,0x22,0x41,0x6,0x0,0x0,0xfc,0x4,0x84,0x84,0x88,0x88,0x48,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x10,0xfe,0x22,0x24,0x64,0x18,0x14,0x62,0x2,0x3f,0x2,0x4,0x4,0x18,0x60,0x0,0x0,0xfc,0x84,0x48,0x30,0x20,0x50,0x8e,0x4,0xf0,0x10,0x10,0x10,0x50,0x20,
++0x10,0x10,0xfe,0x22,0x24,0x64,0x18,0x14,0x62,0x0,0x12,0x51,0x50,0x90,0xf,0x0,0x0,0x0,0xfc,0x84,0x48,0x30,0x20,0x50,0x8e,0x4,0x0,0x84,0x92,0x12,0xf0,0x0,
++0x2,0x2,0x2,0x2,0x2,0xff,0x4,0x4,0x8,0x10,0xc,0x2,0x1,0x6,0x18,0x60,0x0,0x0,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x40,0x80,0x80,0x60,0x18,0x8,
++0x0,0xb,0x7c,0x4a,0x49,0x4b,0x48,0x7f,0x48,0x48,0x49,0x49,0x7a,0x44,0x8,0x3,0xc,0xf0,0x84,0x4c,0x50,0xfc,0x80,0xfe,0x80,0xf8,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x1,0x1,0x1,0x3f,0x21,0x21,0x3f,0x21,0x20,0x20,0x27,0x24,0x3f,0x24,0x47,0x80,0x10,0xf8,0x0,0xfc,0x4,0xe8,0x0,0x8,0xf8,0x0,0xf0,0x4,0xfe,0x0,0xf8,0x0,
++0x1,0x0,0x1f,0x10,0x90,0x53,0x52,0x12,0x32,0x5f,0xd2,0x12,0x22,0x22,0x43,0x0,0x0,0x84,0xfe,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x8,0xfc,0x0,
++0x10,0x17,0x12,0x12,0xfa,0x17,0x12,0x1a,0x32,0xd7,0x12,0x12,0x14,0x19,0x50,0x20,0x0,0xde,0x52,0x54,0x54,0xd4,0x58,0x58,0x54,0xd2,0x52,0x52,0x5a,0x54,0x90,0x10,
++0x20,0x27,0x20,0x2f,0xba,0xa9,0xa2,0x20,0x2f,0x20,0x27,0x24,0x24,0x24,0x24,0x24,0x8,0xfc,0x40,0xfe,0x4a,0x50,0x48,0x40,0xfc,0x80,0xfc,0xa4,0xa4,0xa4,0xa4,0xc,
++0x10,0x11,0x54,0x3b,0x12,0xfc,0x10,0x30,0x3b,0x54,0x53,0x92,0x12,0x12,0x12,0x12,0x8,0xfc,0x20,0xfe,0xaa,0x70,0xa8,0x20,0xfe,0x40,0xfe,0x52,0x52,0x52,0x52,0x6,
++0x1,0x41,0x37,0x11,0x1,0x0,0xef,0x20,0x21,0x23,0x2d,0x21,0x29,0x31,0x21,0x1,0x10,0x10,0xfc,0x10,0x50,0x44,0xfe,0x80,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x8,0x7f,0x49,0x49,0x4f,0x49,0x49,0x49,0x49,0x4f,0x49,0x79,0x41,0x5,0x2,0x20,0xb0,0x28,0x20,0x24,0xfe,0x20,0x20,0x20,0xd4,0x18,0x10,0x30,0x4a,0x8a,0x6,
++0x4,0x7e,0x40,0x42,0x62,0x55,0x54,0x48,0x54,0x52,0x62,0x40,0x44,0x7e,0x1,0x2,0x40,0x40,0x40,0x7e,0x82,0x24,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x8e,0x4,0x0,
++0x4,0x7e,0x40,0x42,0x62,0x54,0x54,0x48,0x54,0x52,0x62,0x40,0x45,0x7e,0x0,0x0,0x10,0x24,0xfe,0x84,0xa4,0x84,0x94,0x88,0x80,0xfe,0x2,0x12,0xfa,0x2,0x14,0x8,
++0x4,0x7e,0x40,0x42,0x62,0x54,0x55,0x48,0x55,0x52,0x62,0x40,0x44,0x7e,0x0,0x3,0x8,0xfc,0x88,0x88,0x88,0x88,0x6,0x0,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x4,0x4,0xff,0x14,0x11,0x7d,0x11,0x7d,0x11,0xfc,0x13,0x3a,0x56,0x92,0x12,0x12,0x40,0x44,0xfe,0x40,0xfc,0x24,0xfc,0x24,0xfc,0x20,0xfe,0x22,0x2a,0xfa,0xa,0x4,
++0x0,0xb,0x7e,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x7b,0x4a,0x3,0x0,0x8,0xfc,0x0,0x8,0x88,0x50,0x50,0x20,0x20,0x50,0x50,0x88,0x8,0x4,0xfe,0x0,
++0x10,0x17,0x14,0x24,0x27,0x64,0xa4,0x27,0x20,0x2f,0x28,0x28,0x2b,0x28,0x28,0x28,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x40,0xfe,0x42,0x4a,0xfa,0x2,0xa,0x4,
++0x0,0x43,0x32,0x13,0x82,0x62,0x22,0xa,0x12,0x22,0xe2,0x22,0x23,0x22,0x23,0x20,0x8,0xfc,0x0,0x8,0x88,0x50,0x50,0x20,0x20,0x50,0x50,0x88,0x8,0x4,0xfe,0x0,
++0x2,0x12,0x7a,0x5f,0x52,0x52,0x52,0x52,0x53,0x5e,0x52,0x72,0x52,0x2,0xa,0x4,0x10,0x10,0x24,0xfe,0x44,0x44,0x44,0xc4,0x7c,0x44,0x44,0x44,0x44,0x44,0x7c,0x44,
++0x4,0x7e,0x44,0x44,0x44,0x7c,0x10,0x10,0x5c,0x51,0x51,0x51,0x5e,0xe2,0x44,0x8,0x10,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x10,0x10,0x10,0x8,0xe,0x4,0x0,
++0x7,0x78,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x52,0x52,0x51,0x90,0x10,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0xfc,0x0,0x2,0x2,0xfe,0x0,0x6,0xfc,0x0,
++0x10,0x10,0x10,0x7d,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5d,0x11,0x11,0x11,0x20,0x20,0x44,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x11,0x59,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x20,0x20,0x44,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x4,0x7e,0x8,0x3e,0x8,0x7e,0x0,0x3f,0x21,0x21,0x3f,0x20,0x20,0x20,0x1f,0x0,0x8,0xfc,0x20,0xf8,0x20,0xfc,0x8,0xfc,0x8,0x8,0xf8,0x8,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x10,0x11,0xfd,0x11,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x11,0x51,0x21,0x20,0x20,0x44,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x17,0xfc,0x10,0x14,0x1b,0x30,0xd0,0x10,0x1f,0x10,0x10,0x50,0x20,0xa0,0xa0,0xa4,0xbe,0xa0,0xa0,0xa8,0xbc,0xa0,0xa0,0xa4,0xbe,0xa0,0xa0,0xa0,0xa0,
++0x8,0x48,0x49,0x49,0x49,0x7d,0x41,0x41,0x79,0x48,0x49,0x4f,0x48,0x48,0x88,0x8,0x40,0x84,0xfe,0x24,0x24,0xfc,0x24,0x44,0xfc,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x8,0x8,0x10,0x2f,0x40,0x88,0x8,0x17,0x30,0x50,0x90,0x1f,0x10,0x10,0x10,0x10,0xa0,0xa0,0xa4,0xbe,0xa0,0xa0,0xa8,0xbc,0xa0,0xa0,0xa4,0xbe,0xa0,0xa0,0xa0,0xa0,
++0x40,0x3f,0x12,0x2,0x82,0x6f,0x22,0xa,0x12,0x22,0xef,0x22,0x22,0x24,0x24,0x28,0x88,0x7c,0x10,0x10,0x7c,0x90,0x10,0x7c,0x10,0x10,0x94,0xfe,0x10,0x10,0x10,0x10,
++0x40,0x37,0x14,0x4,0x85,0x65,0x25,0xd,0x15,0x25,0xe5,0x25,0x25,0x29,0x29,0x11,0x1c,0xe0,0x8,0x3c,0xc0,0x40,0x40,0x24,0x2c,0x30,0x20,0x10,0x10,0x4e,0x84,0x0,
++0x22,0x21,0xfa,0x22,0x71,0xaa,0x22,0xff,0x4,0xf,0x31,0xcf,0x1,0x3f,0x1,0x3,0x88,0x8,0xbe,0x88,0x1c,0xaa,0x8,0xfe,0x40,0xe0,0x18,0xe6,0x0,0xf8,0x0,0x0,
++0x0,0x47,0x32,0x11,0x8f,0x61,0x22,0xc,0x17,0x24,0xe4,0x27,0x24,0x24,0x27,0x24,0x3c,0xc0,0x48,0x50,0xfe,0x50,0x48,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x2,0x1f,0x10,0x12,0x11,0xff,0x10,0x12,0x21,0x40,0x3f,0x24,0x24,0x24,0xff,0x0,0x10,0xf8,0x10,0x10,0x14,0xfe,0x10,0x10,0x50,0x20,0xf8,0x48,0x48,0x48,0xfe,0x0,
++0x10,0x3e,0x22,0x2a,0xff,0x22,0x2a,0x22,0x46,0xff,0x4,0xf,0x18,0x68,0xf,0x8,0x78,0x48,0x48,0x86,0x78,0x48,0x30,0x4e,0x84,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x0,0x8,0x7c,0x49,0x49,0x7a,0x4a,0x4d,0x48,0x78,0x48,0x48,0x49,0x79,0x42,0x4,0x20,0xa0,0xa0,0x10,0x10,0x8,0xe,0xf4,0x90,0x90,0x90,0x90,0x10,0x10,0x50,0x20,
++0x0,0x4,0x7f,0x54,0x54,0x54,0x55,0x7c,0x54,0x54,0x57,0x54,0x7c,0x44,0x0,0x0,0x20,0x20,0x24,0xa8,0xa8,0x20,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x4,0x44,0x34,0x15,0x4,0x7f,0x4,0x4,0x5,0xff,0x4,0x8,0x8,0x10,0x20,0x0,0x4,0x44,0xc4,0x24,0x24,0xa4,0x24,0x24,0x24,0xa4,0x24,0x24,0x4,0x4,0x14,0x8,
++0x10,0x10,0x93,0x55,0x39,0x11,0x7d,0x11,0x11,0xfd,0x11,0x11,0x22,0x22,0x44,0x89,0x8,0x1c,0xe0,0x0,0x0,0x0,0xf8,0x8,0x88,0x48,0x50,0x20,0x50,0x48,0x8e,0x4,
++0x0,0xf,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x8,0xff,0x0,0x0,0x0,0x0,0x0,0x30,0xc0,0x0,0x0,0x10,0xf8,0x20,0x20,0x20,0x24,0xfe,0x0,0x40,0x30,0x18,0x8,
++0x2,0x1,0x7f,0x42,0x42,0x42,0x7f,0x42,0x42,0x44,0x44,0x44,0x48,0x4b,0x90,0x20,0x0,0x4,0xfe,0x0,0x40,0x28,0xfc,0x80,0x80,0x88,0x90,0xa0,0xc2,0x82,0x82,0x7e,
++0x2,0x1,0x7f,0x8,0x4,0x7f,0x42,0x81,0x7f,0x4,0x7,0x4,0x8,0x8,0x10,0x60,0x0,0x8,0xfc,0x20,0x40,0xfe,0x2,0x4,0xfc,0x0,0xf0,0x10,0x10,0x10,0xa0,0x40,
++0x10,0x10,0x13,0xfc,0x10,0x7f,0x12,0xfc,0x13,0x38,0x34,0x50,0x90,0x11,0x12,0x14,0x40,0x24,0xfe,0x88,0x50,0xfe,0x42,0x24,0xfe,0x80,0xf8,0x88,0x88,0x8,0x28,0x10,
++0x0,0x78,0x4c,0x4a,0x49,0x78,0x4f,0x48,0x48,0x78,0x4f,0x48,0x48,0x48,0x48,0x98,0x40,0x40,0x44,0x48,0x50,0x40,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x12,0x12,0x12,0x12,0xfe,0x17,0x12,0x1a,0x32,0xd2,0x12,0x12,0x12,0x12,0x54,0x28,0x20,0x20,0x20,0x24,0x7e,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xd4,0x8a,0x82,0x7e,0x0,
++0x0,0x8,0x7c,0x49,0x49,0x4b,0x4d,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0x0,0x0,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x14,0x8,0x2,0x2,0xfe,0x0,
++0x10,0x11,0x1f,0x21,0x21,0x7d,0xa5,0x25,0x25,0x3d,0x25,0x22,0x20,0x20,0x1f,0x0,0x4,0x4,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x84,0x84,0x94,0x8,
++0x10,0x10,0x10,0x15,0x59,0x53,0x55,0x91,0x11,0x11,0x11,0x29,0x25,0x45,0x80,0x0,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x14,0x8,0x2,0x2,0xfe,0x0,
++0x20,0x10,0x10,0x1,0xf9,0xb,0x11,0x35,0x59,0x95,0x11,0x11,0x11,0x11,0x10,0x10,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x14,0x8,0x2,0x2,0xfe,0x0,
++0x4,0x7e,0x44,0x45,0x45,0x7f,0x15,0x11,0x5d,0x51,0x51,0x51,0x5d,0xe1,0x40,0x0,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x14,0x8,0x2,0x2,0xfe,0x0,
++0x1,0x41,0x31,0x12,0x82,0x67,0x2a,0x2,0xa,0x13,0xe2,0x22,0x22,0x22,0x21,0x20,0x0,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x14,0x8,0x2,0x2,0xfe,0x0,
++0x0,0x7,0x78,0x48,0x48,0x48,0x48,0x49,0x49,0x4a,0x4c,0x78,0x48,0x0,0xf,0x0,0x8,0xfc,0x20,0x20,0x40,0xc0,0xc0,0x50,0x4c,0x46,0x42,0x40,0x40,0x44,0xfe,0x0,
++0x8,0x7f,0x48,0x48,0x48,0x78,0x48,0x49,0x49,0x7a,0x4c,0x48,0x48,0x48,0x4f,0x98,0x8,0xfc,0x20,0x20,0x40,0xc0,0xc0,0x50,0x4c,0x46,0x42,0x40,0x40,0x44,0xfe,0x0,
++0x20,0x20,0x27,0x20,0x21,0xf8,0x20,0x2f,0x20,0x23,0x22,0x22,0x3a,0xe2,0x43,0x2,0x80,0x48,0xfc,0x0,0x10,0xa0,0x4,0xfe,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x2,0x2,0x7e,0x2,0x3e,0x2,0x7e,0x2,0x1,0xff,0x2,0x4,0xc,0x35,0xc6,0x4,0x80,0x88,0xfc,0x80,0xf8,0x80,0xfc,0x80,0x4,0xfe,0x80,0x88,0x50,0x30,0xe,0x4,
++0x0,0x7c,0x45,0x54,0x54,0x54,0x54,0x57,0x54,0x55,0x55,0x55,0x11,0x29,0x45,0x81,0x40,0x20,0xfc,0x0,0x88,0x50,0x4,0xfe,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x78,0x4f,0x50,0x51,0x50,0x60,0x57,0x48,0x4b,0x6a,0x52,0x42,0x42,0x43,0x42,0x80,0x48,0xfc,0x0,0x10,0xa0,0x4,0xfe,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x55,0x63,0x41,0x7f,0x41,0x41,0x7f,0x41,0x4,0xfe,0x4,0x4,0x4,0x4,0x7c,0x44,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x1f,0x28,0x2f,0x68,0xa8,0x2b,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x28,0x30,0x20,0x8,0xfc,0x8,0xf8,0x88,0xa8,0xf8,0xa8,0xa8,0xa8,0xa8,0xa8,0xea,0x8a,0x86,0x80,
++0x0,0x40,0x20,0x2f,0x80,0x60,0x27,0xc,0x14,0x24,0xe4,0x24,0x24,0x20,0x20,0x20,0x40,0x40,0x44,0xfe,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x54,0x48,0x40,0x40,0x40,
++0x0,0xb,0x7c,0x49,0x4f,0x49,0x48,0x4b,0x4a,0x4a,0x4a,0x7a,0x4a,0x0,0x1,0x6,0x48,0xfc,0x40,0x14,0xfe,0x10,0x8,0xfc,0x8,0x48,0x48,0x48,0x48,0x90,0xc,0x4,
++0x0,0x4,0x8,0x10,0x2f,0xc4,0x4,0x9,0x30,0x0,0x3f,0x24,0x24,0x24,0xff,0x0,0x80,0x80,0x40,0x20,0xd0,0x4e,0x44,0x40,0x80,0x8,0xfc,0x48,0x48,0x48,0xfe,0x0,
++0x4,0xff,0x10,0x10,0x21,0x24,0x3e,0x64,0xa7,0x24,0x24,0x24,0x24,0x3c,0x24,0x0,0x8,0xfc,0x20,0x20,0x24,0xa8,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x10,0x11,0x10,0x10,0xfd,0x10,0x14,0x18,0x33,0xd0,0x10,0x10,0x10,0x10,0x50,0x20,0x8,0xfc,0x20,0x20,0x24,0xa8,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x1,0xff,0x0,0x1f,0x10,0x10,0x1f,0x0,0x3f,0x0,0x1,0x5,0x3,0x48,0x44,0x84,0x4,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x0,0xf0,0x40,0x80,0x0,0x0,0x48,0x24,0x24,
++0x41,0x21,0x2f,0x1,0x87,0x60,0x27,0xc,0x14,0x27,0xe0,0x24,0x22,0x20,0x2f,0x0,0x0,0x42,0xe6,0x8,0xd0,0x2,0xc6,0x48,0x50,0xc0,0x2,0x46,0x88,0xf0,0x20,0x40,
++0x8,0x9,0xff,0x8,0x7f,0x0,0x7f,0x41,0x41,0x7f,0x0,0x22,0x14,0xf,0xf0,0x40,0x4,0xc,0x90,0x20,0x40,0x4,0xc,0x10,0x20,0x42,0x6,0x8,0x10,0x20,0x40,0x80,
++0x4,0xff,0x5,0x41,0x33,0x14,0x1,0xf6,0x1b,0x10,0x13,0x10,0x17,0x10,0x28,0x47,0x44,0xfe,0x40,0xf8,0x10,0xe0,0x18,0x46,0xf8,0x40,0xf8,0x40,0xfc,0x40,0x46,0xfc,
++0x20,0x27,0x24,0x24,0xfc,0x27,0x64,0x74,0xac,0x27,0x24,0x24,0x24,0x24,0x25,0x28,0x4,0xbe,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0xa4,0xa4,0x4c,
++0x10,0xff,0x24,0x24,0x44,0x47,0x74,0xd4,0x54,0x57,0x54,0x54,0x54,0x74,0x45,0x8,0x4,0xbe,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0xa4,0xa4,0x4c,
++0x10,0x3e,0x49,0x81,0x43,0x24,0x1,0xf6,0x1b,0x10,0x13,0x10,0x17,0x10,0x28,0x47,0x40,0xfc,0x20,0xf8,0x10,0xe0,0x18,0x46,0xf8,0x40,0xf8,0x40,0xfc,0x40,0x46,0xfc,
++0x0,0x78,0x4f,0x48,0x4b,0x78,0x4b,0x4a,0x4a,0x7b,0x48,0x4a,0x49,0x4f,0x48,0x98,0x80,0xa2,0xf2,0x84,0xe8,0x12,0xe2,0x24,0x28,0xf0,0x2,0x22,0x44,0xe8,0x10,0x60,
++0x2,0x3f,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x4a,0x44,0x81,0x4,0x7e,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x84,0x94,0x8,
++0x0,0x77,0x55,0x55,0x55,0x77,0x55,0x55,0x55,0x77,0x55,0x55,0x55,0x55,0x8b,0x0,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0xa,0xfe,0x2,0xa,0x4,
++0x10,0x10,0x17,0xfc,0x13,0x10,0x17,0x18,0x31,0xd2,0x1d,0x10,0x17,0x10,0x50,0x20,0x40,0x48,0xfc,0x40,0xf8,0x80,0xfe,0xa0,0x50,0x4e,0xf4,0x40,0xfc,0x40,0x40,0x40,
++0x1,0x8,0xfc,0x20,0x23,0x40,0x48,0x7c,0xca,0x4a,0x4a,0x48,0x48,0x78,0x47,0x0,0x8,0x88,0x90,0x8,0xfc,0x90,0x90,0x92,0x96,0x94,0x98,0x90,0x90,0x94,0xfe,0x0,
++0x10,0x10,0x13,0x10,0x10,0xfc,0x10,0x10,0x10,0x11,0x12,0x1c,0xf0,0x40,0x7,0x0,0x0,0x4,0xfe,0x10,0x10,0x20,0x20,0x68,0xa4,0x22,0x22,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x5,0xff,0x11,0x11,0x21,0x25,0x3f,0x65,0xa5,0x25,0x25,0x25,0x3d,0x25,0x0,0x10,0x10,0x10,0x10,0x12,0x16,0xd8,0x10,0x10,0x10,0x10,0x10,0x12,0x52,0x8e,0x0,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x3e,0x23,0x22,0x3e,0x21,0x3e,0x62,0xa2,0x3e,0x20,0xf0,0x0,0xfe,0x12,0x64,0x10,0x20,0xfc,0x88,0x50,0xfe,0x20,0xfc,0x20,0x20,0x20,
++0x12,0x12,0x12,0x12,0xfe,0x12,0x13,0x1a,0x32,0xd2,0x12,0x12,0x12,0x13,0x52,0x20,0x20,0x20,0x20,0x20,0x24,0x2c,0xb0,0x20,0x20,0x20,0x20,0x20,0xa4,0x24,0x1c,0x0,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x16,0x1b,0x32,0xd2,0x12,0x12,0x12,0x14,0x54,0x29,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xf8,0x88,0x88,0x50,0x20,0x50,0x48,0x8e,0x4,
++0x0,0x3e,0x23,0x22,0x3e,0x21,0x3e,0x62,0xa2,0x3e,0x0,0x7f,0x4,0x4,0x8,0x30,0x40,0x20,0xfc,0x88,0x50,0xfe,0x20,0xf8,0x20,0x20,0x8,0xfc,0x8,0x8,0x50,0x20,
++0x4,0x7e,0x8,0x8,0x3e,0x8,0x8,0x7e,0x0,0x20,0x24,0x3e,0x20,0x20,0x2e,0x30,0x8,0xfc,0x20,0x20,0xf8,0x20,0x28,0xfc,0x0,0x80,0x98,0xe0,0x80,0x82,0x82,0x7e,
++0x0,0x5,0x7f,0x55,0x55,0x55,0x55,0x7d,0x55,0x55,0x55,0x55,0x7d,0x45,0x1,0x0,0x10,0x10,0x10,0x10,0x10,0x12,0xdc,0x10,0x10,0x10,0x10,0x10,0x52,0x92,0xe,0x0,
++0x0,0x8,0x7f,0x4a,0x4a,0x4b,0x4a,0x4a,0x4b,0x48,0x49,0x4f,0x78,0x48,0x0,0x0,0x40,0x88,0xfc,0x48,0x48,0xf8,0x48,0x88,0xf8,0x80,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x4,0x3e,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x3c,0x24,0x27,0x24,0x24,0x54,0x88,0x20,0x44,0xfe,0x24,0x24,0xfc,0x24,0x44,0xfc,0x40,0xa4,0xfe,0x20,0x20,0x20,0x20,
++0x1,0x0,0x1f,0x90,0x50,0x57,0x14,0x14,0x37,0x54,0xd5,0x14,0x24,0x24,0x49,0x12,0x0,0x84,0xfe,0x40,0x40,0xfc,0x44,0x40,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x0,0x0,0x0,0x3f,0x20,0x20,0x20,0x2f,0x20,0x24,0x22,0x21,0x20,0x41,0x46,0x98,0x80,0x80,0x80,0xfc,0x84,0x88,0x80,0xf8,0x8,0x10,0x20,0x40,0x80,0x60,0x1e,0x4,
++0x0,0x0,0x7f,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x48,0x50,0x40,0x7f,0x0,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0x44,0x3c,0x0,0x4,0xfe,0x0,
++0x1,0x0,0x1f,0x90,0x57,0x50,0x10,0x10,0x31,0x56,0xdb,0x12,0x22,0x22,0x43,0x2,0x0,0x84,0xfe,0x8,0xfc,0x20,0x40,0xd8,0x46,0x42,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x1f,0x29,0x29,0x69,0xaf,0x28,0x28,0x2f,0x29,0x39,0x29,0x2f,0x28,0x20,0x20,0x10,0x14,0xfe,0x44,0x28,0x10,0xfe,0x10,0x10,0xfe,0x10,0x10,0x10,0x10,0x10,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x28,0x28,0x2a,0x2f,0x28,0x28,0x29,0x4e,0x48,0x80,0x8,0xfc,0x8,0x8,0xf8,0x48,0x40,0x40,0x4c,0x70,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x3f,0x21,0x3f,0x20,0x7f,0xa1,0x3f,0x21,0x7f,0x0,0x3f,0x0,0x0,0x1f,0x10,0x1f,0x10,0x7c,0x28,0xfe,0x10,0x7c,0x10,0x14,0xfe,0x0,0x0,0xf8,0x0,0xf0,0x10,0xf0,
++0x12,0x1f,0x28,0x45,0x80,0x3f,0x20,0x3f,0x20,0x3f,0x32,0x52,0x5f,0x52,0x92,0x10,0x44,0x7e,0xa0,0x10,0x80,0xf8,0x8,0xf8,0x4,0xfe,0x24,0x24,0xfc,0x24,0x34,0x8,
++0x10,0x10,0x17,0x24,0x24,0x67,0xa4,0x24,0x27,0x26,0x2a,0x2b,0x2a,0x32,0x22,0x22,0x80,0x44,0xfe,0x4,0x4,0xfc,0x0,0x4,0xfe,0x94,0x94,0xfc,0x94,0x94,0x94,0xc,
++0x0,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x20,0x40,0x80,0x80,0x80,0x80,0x80,0x84,0xfe,0x0,0x0,0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0xf8,0x13,0x52,0x52,0x53,0x52,0x52,0x7b,0xa,0xa,0x3b,0xce,0xa,0x2a,0x12,0x40,0x28,0xfc,0x8,0x8,0xf8,0x0,0x4,0xfe,0x94,0x94,0xfc,0x94,0x94,0x94,0xc,
++0x4,0xfe,0x28,0xfe,0xaa,0xaa,0xfe,0x0,0x7c,0x0,0xfe,0x10,0x58,0x55,0x92,0x34,0x8,0xfc,0x88,0x88,0x88,0xd8,0xd8,0xa8,0xa8,0xd8,0xd8,0x88,0x8a,0xa,0x6,0x0,
++0x40,0x3f,0x10,0x7,0x84,0x64,0x27,0x8,0x13,0x20,0xef,0x20,0x22,0x24,0x29,0x20,0x4,0xfe,0xa0,0xfc,0xa4,0xa4,0xfc,0x0,0xf8,0x0,0xfe,0x40,0x50,0x4c,0x44,0x80,
++0x4,0xfe,0x28,0xfe,0xaa,0xaa,0xfe,0x0,0x7c,0x0,0xfe,0x10,0x59,0x55,0x92,0x30,0x4,0xf8,0x80,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa4,0x24,0x52,0x78,0x0,
++0x0,0x7f,0x4,0x3f,0x24,0x24,0x3f,0x0,0x1f,0x0,0xff,0x1,0x11,0x21,0x45,0x2,0x8,0xfc,0x40,0xf8,0x48,0x48,0xf8,0x0,0xf0,0x4,0xfe,0x0,0x20,0x18,0x8,0x0,
++0x22,0x22,0x2a,0x27,0xf2,0x2f,0x2a,0x2a,0x3a,0xef,0x2e,0x2a,0x2a,0x29,0xa8,0x40,0x10,0x10,0x90,0x24,0x3e,0xc4,0xa4,0xa4,0xa8,0xa8,0x90,0x90,0xa8,0xa8,0x46,0x84,
++0x8,0x49,0x2a,0x7f,0x49,0x5d,0x6b,0x49,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x20,0x20,0x7e,0xc4,0x28,0x10,0x2e,0x44,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x12,0x11,0x10,0x13,0xfd,0x11,0x15,0x19,0x37,0xd1,0x11,0x11,0x11,0x11,0x52,0x24,0x8,0x18,0xa0,0xfc,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x13,0x54,0x5e,0x51,0x55,0xff,0x11,0x55,0x55,0x55,0x95,0x8,0x10,0x20,0x43,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x20,0x50,0x8c,0x4,
++0x0,0x4,0x8,0x1f,0x24,0xc4,0x9,0x30,0x1f,0x10,0x11,0x11,0x11,0x2,0xc,0x30,0x40,0x40,0x20,0xd0,0x4e,0x44,0x40,0x90,0xf8,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x2,0x7f,0x42,0x42,0x42,0x42,0x42,0x7e,0x42,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x8,0xfc,0x4b,0x4a,0x7b,0x4a,0x4b,0x78,0x4f,0x48,0x5c,0xe9,0x48,0x8,0x8,0x8,0x40,0x48,0xfc,0x48,0xf8,0x48,0xf8,0x0,0xfe,0x80,0x80,0xf8,0x8,0x8,0x50,0x20,
++0x0,0xf,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x8,0xff,0x0,0x2,0x6,0x8,0x10,0x30,0xc0,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x10,0x17,0x10,0x10,0x12,0xfd,0x11,0x11,0x10,0x1f,0x10,0x1c,0xe0,0x40,0x0,0x0,0x8,0xfc,0x40,0x40,0x48,0x48,0x50,0x50,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x4,0x4,0xff,0x4,0x0,0x7f,0x1,0x11,0x9,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x40,0x44,0xfe,0x40,0x8,0xfc,0x0,0x10,0x20,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x20,0x17,0x80,0x4a,0x11,0x20,0xef,0x20,0x20,0x20,0x20,0x20,0x40,0x44,0xfe,0x40,0x8,0xfc,0x40,0x48,0x50,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x0,0x7f,0x1,0x11,0x11,0x9,0x9,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x8,0xfc,0x0,0x10,0x10,0x20,0x20,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0xb,0x10,0x10,0x37,0x50,0x90,0x13,0x10,0x7,0x4,0x4,0x4,0x4,0x8,0x30,0x30,0xc0,0x40,0x48,0xfc,0x40,0x50,0xf8,0x20,0xf0,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x42,0x25,0x28,0xfe,0x24,0x24,0x24,0x24,0xff,0x24,0x24,0x25,0x25,0x45,0x85,0x4,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0xc8,0xa8,0xa8,0x88,0x8,0x28,0xca,0xa,0x6,
++0x0,0x47,0x30,0x10,0x4,0x3,0xf1,0x10,0x1f,0x10,0x10,0x10,0x14,0x18,0x10,0x0,0x8,0xfc,0x40,0x40,0x44,0x4c,0x50,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x3f,0x20,0x20,0x3f,0x22,0x21,0x2f,0x22,0x22,0x3f,0x22,0x22,0x42,0x84,0x8,0x8,0xfc,0x8,0x8,0xf8,0x20,0x48,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x12,0x13,0x12,0x12,0x1e,0xe2,0x42,0x4,0x8,0x13,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xfc,0x84,0x88,0x48,0x50,0x20,0x50,0x8e,0x4,
++0x0,0x42,0x32,0x14,0x87,0x60,0x20,0x9,0x11,0x23,0xe2,0x24,0x28,0x20,0x21,0x26,0x40,0x50,0x48,0x40,0xfe,0x80,0x80,0xf8,0x8,0x10,0x90,0xa0,0x40,0xb0,0xe,0x4,
++0x8,0x9,0x8,0x7f,0x49,0x4a,0x48,0x7e,0x42,0x54,0x54,0x48,0x54,0x52,0xa2,0x1,0x4,0xfe,0x20,0x44,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0xa4,0x20,0x50,0x8c,0x4,
++0x20,0x1b,0x4a,0x22,0x3,0x12,0x22,0x64,0x28,0x22,0xff,0x8,0x4,0x3,0xc,0x30,0x20,0xfe,0x22,0x24,0xf8,0x88,0x50,0x20,0x50,0x8c,0xfe,0x20,0x40,0x80,0x60,0x10,
++0x0,0x8,0xfc,0x13,0x12,0x22,0x22,0x7b,0xaa,0x2a,0x2a,0x2a,0x3c,0x24,0x8,0x13,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xfc,0x84,0x88,0x48,0x50,0x20,0x50,0x8e,0x4,
++0x0,0x10,0x23,0x7a,0x4a,0x4b,0x4a,0x7a,0x4b,0x48,0x48,0x49,0x79,0x42,0x4,0x8,0x40,0x88,0xfc,0x48,0x48,0xf8,0x48,0x88,0xf8,0x80,0xd0,0x54,0x7c,0x42,0x42,0x3e,
++0x0,0x40,0x33,0x12,0x2,0x2,0xf3,0x12,0x12,0x12,0x12,0x13,0x12,0x28,0x47,0x0,0x40,0x88,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x0,0x6,0xfc,0x0,
++0x10,0x10,0x54,0x39,0x11,0xff,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x20,0x20,0x44,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x4,0x7f,0x21,0x11,0x12,0xff,0x1,0x3f,0x21,0x21,0x21,0x21,0x3f,0x21,0x0,0x4,0x4,0x84,0x24,0x24,0x24,0xe4,0x24,0xa4,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x8,0x8,0x8,0xa,0x7f,0x8,0xa,0xc,0x18,0x68,0x8,0x8,0x8,0x8,0x28,0x10,0x40,0x40,0x40,0x40,0x40,0x50,0x4c,0x46,0x42,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x1c,0x23,0x20,0x7d,0x91,0x11,0x7d,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x20,0x28,0x24,0xfe,0x20,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x24,0x34,0x28,
++0x4,0x4,0x4,0x8,0x8,0x10,0x30,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x80,0x80,0x80,0x80,0x80,0xa0,0x98,0x8c,0x84,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x4,0x4,0x7f,0x4,0x5,0x1,0xff,0x1,0x1f,0x11,0x1f,0x11,0x1f,0x11,0x11,0x11,0x40,0x48,0xfc,0x40,0x50,0x8,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x8,0x8,0xff,0x8,0x1f,0x21,0x7f,0x81,0x1f,0x11,0x1f,0x11,0x1f,0x11,0x11,0x11,0x20,0x24,0xfe,0x20,0xfc,0x44,0xfc,0x4,0xf4,0x14,0xf4,0x14,0xf4,0x14,0x34,0xc,
++0x4,0x4,0xff,0x4,0x1,0x3f,0x8,0x4,0xff,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x40,0x44,0xfe,0x40,0x10,0xf8,0x20,0x44,0xfe,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x4,0x4,0xff,0x4,0x40,0x2f,0x0,0x87,0x54,0x17,0x24,0xe7,0x24,0x24,0x24,0x24,0x40,0x44,0xfe,0x50,0x48,0xfe,0x44,0xfe,0x44,0xfc,0x44,0xfc,0x44,0x44,0x54,0x48,
++0x20,0x20,0x20,0x2f,0xf8,0x27,0x24,0x24,0x27,0x24,0x3c,0xe7,0x44,0x4,0x4,0x4,0x40,0x50,0x48,0xfe,0x40,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x54,0x48,
++0x10,0x10,0x10,0x14,0xfe,0x10,0x30,0x38,0x54,0x54,0x90,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0x40,0x40,0x40,0x60,0x58,0x4c,0x44,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x7f,0x41,0x41,0x5f,0x41,0x4f,0x49,0x4f,0x49,0x4f,0x49,0x49,0x40,0x7f,0x40,0x4,0xfe,0x4,0x44,0xf4,0x4,0xe4,0x24,0xe4,0x24,0xe4,0x24,0x64,0x4,0xfc,0x4,
++0x8,0x4,0x7f,0x4,0x24,0x14,0x4,0xff,0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x20,0x48,0xfc,0x40,0x48,0x50,0x44,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,
++0x0,0x40,0x30,0x1f,0x80,0x67,0x24,0x4,0x17,0x24,0xe4,0x27,0x24,0x24,0x24,0x24,0x40,0x50,0x48,0xfe,0x40,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x54,0x48,
++0x1,0x40,0x27,0x20,0x2,0x1,0xef,0x20,0x23,0x22,0x22,0x23,0x2a,0x32,0x23,0x2,0x10,0xa0,0xfc,0xa0,0xa8,0xb0,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x3,0xa,0x7f,0x4a,0x4b,0x49,0x7b,0x49,0x4f,0x49,0x4a,0x7d,0x48,0x1,0x2,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x10,0xf8,0x10,0xfe,0x10,0x48,0x56,0xe0,0x58,0x48,0xc0,
++0x3,0x42,0x33,0x12,0x83,0x61,0x27,0x1,0x1f,0x21,0xe2,0x25,0x28,0x21,0x22,0x20,0xf8,0x8,0xf8,0x8,0xf8,0x10,0xfc,0x10,0xfe,0x10,0x48,0x56,0xe0,0x58,0x48,0xc0,
++0x22,0x22,0x22,0x7f,0x22,0x3e,0x22,0x3e,0x22,0x22,0xff,0x0,0x24,0x22,0x41,0x82,0x4,0x7e,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0x7c,0xc4,0x44,0x44,0x84,0x14,0x8,
++0x22,0x22,0x22,0x7f,0x22,0x3e,0x23,0x3e,0x22,0x22,0xff,0x0,0x24,0x22,0x41,0x82,0x40,0x40,0x40,0x7c,0x44,0x88,0x20,0x20,0x20,0x20,0xd0,0x50,0x50,0x88,0xe,0x4,
++0x20,0x20,0x2f,0x20,0xf8,0x27,0x64,0x74,0xac,0x24,0x24,0x25,0x26,0x24,0x27,0x24,0x0,0x4,0xfe,0xa0,0xa4,0xfe,0xa4,0xa4,0xa4,0xa4,0xa4,0x1c,0x4,0x4,0xfc,0x4,
++0x0,0x0,0x0,0x3f,0x22,0x23,0x22,0x22,0x3f,0x22,0x2b,0x2a,0x32,0x42,0x8a,0x4,0x20,0x28,0x24,0xfe,0x20,0xa0,0x24,0xa4,0xe8,0x28,0x10,0x90,0x30,0x4a,0x8a,0x6,
++0x1,0x7f,0x1,0x3f,0x1,0xff,0x1,0x3f,0x1,0xff,0x4,0x8,0x6,0x1,0x6,0x18,0x8,0xfc,0x0,0xf0,0x14,0xfe,0x10,0xf0,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x2,0x2,0x2,0x2,0x2,0x2,0x3,0xfe,0x2,0x2,0x2,0x2,0x2,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0xfc,0x0,
++0x0,0x8f,0x60,0x27,0x0,0x1f,0x0,0x17,0x20,0xe1,0x3f,0x22,0x26,0x21,0x22,0xc,0x88,0xfc,0x80,0xf8,0x88,0xfe,0x88,0xf8,0x80,0x4,0xfe,0x20,0x20,0xc0,0x30,0x8,
++0x0,0x40,0x37,0x11,0x81,0x62,0x24,0x1,0x12,0x2c,0xe2,0x21,0x22,0x24,0x21,0x20,0x40,0x48,0xfc,0x50,0x4c,0x44,0xa0,0x10,0x4e,0x44,0x48,0x50,0x4c,0x44,0x40,0x80,
++0x20,0x10,0x40,0x20,0xf,0x10,0x60,0x20,0x21,0xff,0x5,0x5,0x9,0x11,0x61,0x1,0x80,0x80,0x88,0xfc,0x80,0x88,0x88,0x78,0x4,0xfe,0x40,0x20,0x10,0x1c,0x8,0x0,
++0x44,0x34,0x14,0x4,0x85,0x5f,0x44,0x4,0x14,0x24,0xe5,0x26,0x24,0x20,0x21,0x22,0x0,0x4,0xfe,0x24,0x24,0xa4,0x24,0x24,0x24,0x24,0x44,0x44,0x44,0x84,0x14,0x8,
++0x8,0x8,0x3f,0x8,0x8,0xf,0x8,0x8,0xf,0x8,0x8,0xff,0x0,0x8,0x18,0x20,0x20,0x20,0xf8,0x20,0x20,0xe0,0x20,0x20,0xe0,0x20,0x24,0xfe,0x0,0x20,0x18,0x8,
++0x11,0x11,0x13,0x11,0xfd,0x11,0x31,0x39,0x55,0x51,0x91,0x17,0x10,0x11,0x13,0x14,0x8,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0xfe,0x0,0x8,0x6,0x2,
++0x1,0x1,0x3f,0x2,0x4,0x8,0xff,0x0,0x0,0x1f,0x10,0x10,0x1f,0x10,0x0,0x0,0x0,0x10,0xf8,0x80,0x60,0x24,0xfe,0x10,0x90,0xd0,0x90,0x90,0x90,0x90,0x50,0x20,
++0x10,0x10,0x10,0x17,0x50,0x5c,0x53,0x52,0x51,0x51,0x50,0x5c,0xe0,0x41,0x6,0x18,0x40,0x40,0x48,0xfc,0x40,0x40,0xf8,0x8,0x10,0x10,0xa0,0x40,0xa0,0x10,0xe,0x4,
++0x0,0x4,0x7e,0x55,0x54,0x54,0x54,0x7f,0x54,0x54,0x54,0x55,0x7c,0x44,0x0,0x3,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,
++0x10,0x10,0x13,0x54,0x54,0x55,0x57,0x54,0x55,0x55,0x55,0x55,0x7d,0x45,0x0,0x0,0x40,0x48,0xfc,0x40,0xa0,0x14,0xfe,0x8,0xe8,0x28,0x28,0x28,0xe8,0x8,0x28,0x10,
++0x0,0x78,0x4f,0x49,0x48,0x78,0x48,0x49,0x4e,0x79,0x49,0x49,0x49,0x4a,0x8c,0x18,0x80,0x48,0xfc,0x10,0xa0,0x40,0xb0,0xe,0x14,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x2,0x1,0x7f,0x8,0x4,0x2,0x1,0x6,0x18,0x20,0xc8,0x8,0x8,0x8,0x10,0x20,0x0,0x8,0xfc,0x20,0x40,0x80,0x0,0xc0,0x30,0x2e,0x24,0x20,0x20,0x20,0x20,0x20,
++0x20,0x10,0x10,0xff,0x22,0x21,0x3c,0x24,0x24,0x24,0x24,0x27,0x24,0x34,0x49,0x82,0x80,0x84,0xfe,0x0,0x88,0xfc,0x88,0xf8,0x88,0xf8,0x88,0xfe,0x0,0x88,0x86,0x2,
++0x20,0x10,0x11,0xfd,0x5,0x9,0x11,0x39,0x55,0x91,0x11,0x11,0x11,0x12,0x14,0x10,0x0,0xc,0xf0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x8,0x8,0xfe,0x2,0x4,0x8,0x1c,0x2a,0x48,0x88,0x8,0x8,0x8,0x8,0x8,0x0,0xf8,0x88,0x88,0x90,0x90,0xa0,0x90,0x88,0x84,0x84,0xc4,0xa8,0x90,0x80,0x80,
++0x8,0xfc,0xb,0x48,0x48,0x49,0x4f,0x48,0x7d,0x5,0x5,0x1d,0xe5,0x45,0x14,0x8,0x40,0x48,0xfc,0x40,0xb0,0x14,0xfe,0x8,0xe8,0x28,0x28,0x28,0xe8,0x8,0x28,0x10,
++0x8,0x8,0x8,0x7e,0x8,0x8,0xfe,0x8,0x28,0x2e,0x28,0x28,0x28,0x58,0x8f,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x88,0x80,0x84,0x84,0x7c,0x0,0x6,0xfc,0x0,
++0x1,0x21,0x21,0x21,0x3f,0x0,0x7f,0x0,0x0,0x0,0x3f,0x20,0x20,0x20,0x20,0x1f,0x0,0x8,0x8,0x8,0xf8,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x0,0x2,0x2,0xfe,
++0x8,0x8,0x10,0x1f,0x20,0x40,0x9f,0x0,0x1,0x6,0x8,0x10,0x10,0x10,0x10,0xf,0x0,0x0,0x8,0xfc,0x0,0x0,0xe0,0x40,0x80,0x0,0x0,0x0,0x0,0x2,0x2,0xfe,
++0x1,0x1,0x2,0x4,0x9,0x11,0x21,0xc9,0x9,0x9,0x9,0x9,0x9,0x9,0xff,0x0,0x0,0x0,0x80,0x40,0x20,0x10,0xe,0x24,0xf0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x1,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x10,0x1f,0x18,0x28,0x28,0x48,0x8f,0x8,0x0,0x84,0xfe,0x4,0x4,0x4,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0xa,0x7f,0x8,0x3e,0x8,0x7f,0x8,0x9,0x1,0xff,0x1,0x2,0x4,0x18,0x60,0x0,0x4,0x7e,0x24,0x24,0x24,0x44,0x54,0x88,0x0,0xfe,0x0,0x80,0x60,0x1c,0x8,
++0x1,0x9,0xfd,0x11,0x11,0x21,0x27,0x79,0xa9,0x29,0x29,0x29,0x29,0x38,0x20,0x1,0x0,0x4,0x7e,0x24,0x24,0xe4,0x24,0x24,0x24,0x24,0x64,0xa4,0x24,0x44,0x94,0x8,
++0x3e,0x22,0x22,0x22,0x3e,0x1,0x1,0xff,0x2,0xc,0x30,0xfe,0x22,0x22,0x22,0x3e,0xf8,0x88,0x88,0x88,0xf8,0x20,0x14,0xfe,0x80,0x60,0x18,0xfe,0x88,0x88,0x88,0xf8,
++0x10,0x10,0x1f,0x20,0x2f,0x40,0xbf,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0xf0,0x0,0xe0,0x20,0x20,0x20,0x20,0x20,0x22,0x12,0xa,0x4,
++0x1,0x41,0x31,0x12,0x4,0x1,0xf0,0x10,0x11,0x12,0x12,0x12,0x11,0x10,0x28,0x47,0x0,0x8,0xfc,0x0,0x0,0xf8,0x10,0x60,0x80,0x0,0x4,0x4,0xfc,0x0,0x6,0xfc,
++0x2,0x1,0x7f,0x2,0x4,0x8,0x1f,0x4,0x4,0xff,0x4,0x4,0x4,0x8,0x30,0x0,0x0,0x8,0xfc,0x0,0x40,0x20,0xf0,0x50,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x2,0x42,0x33,0x14,0x87,0x68,0x27,0x0,0x10,0x20,0xe0,0x20,0x20,0x20,0x20,0x20,0x0,0x8,0xfc,0x0,0xf8,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0xa,0xa,0x6,
++0x0,0x40,0x30,0x17,0x0,0x82,0x42,0x4a,0x12,0x21,0xe1,0x21,0x21,0x20,0x2f,0x20,0x80,0x40,0x48,0xfc,0x0,0x8,0x8,0x8,0x10,0x10,0x10,0x20,0x20,0x44,0xfe,0x0,
++0x1,0x41,0x21,0x22,0x2,0x4,0xeb,0x20,0x20,0x20,0x20,0x21,0x2a,0x32,0x21,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0xf0,0x10,0x20,0x40,0x80,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x11,0x12,0xfc,0x10,0x17,0x1a,0x32,0xd2,0x13,0x12,0x12,0x12,0x53,0x22,0x80,0x80,0xfc,0x8,0x10,0xa4,0x1e,0x4,0x4,0x4,0xbc,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x10,0x59,0x56,0x54,0x9b,0x10,0x10,0x13,0x12,0x12,0x12,0x13,0x12,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,0xf8,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x30,0x10,0x81,0x62,0x2c,0x3,0x10,0x20,0xe3,0x22,0x22,0x22,0x23,0x22,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,0xf8,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x1,0x1,0x3f,0x2,0x4,0x8,0x7f,0x49,0x89,0x1f,0x21,0x1,0x7f,0x1,0x1,0x1,0x0,0x10,0xf8,0x80,0x60,0x20,0xfe,0x2,0x24,0xf0,0x0,0x8,0xfc,0x0,0x0,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x10,0x14,0x1f,0x30,0xd0,0x10,0x10,0x10,0x10,0x50,0x20,0x10,0x38,0xc0,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x11,0x1c,0x20,0x40,0xbc,0x13,0x10,0xfc,0x10,0x10,0x14,0x18,0x10,0x0,0x8,0x1c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x10,0x10,0x10,0x1c,0x20,0x40,0xbd,0x12,0x10,0xfd,0x11,0x11,0x15,0x19,0x11,0x1,0x8,0xfc,0x88,0x88,0x88,0x88,0x6,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x0,0x3f,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x20,0xf0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x40,0x33,0x10,0x0,0x0,0xf7,0x10,0x10,0x10,0x10,0x10,0x10,0x28,0x47,0x0,0x10,0x38,0xc0,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x6,0xfc,0x0,
++0x10,0x12,0x1f,0x28,0x45,0x2,0x4,0x8,0x30,0xcf,0x0,0x12,0x9,0x9,0x0,0x3f,0x40,0x48,0x7c,0xa0,0x10,0x80,0x40,0x30,0x4e,0xe4,0x0,0x10,0x10,0x20,0x40,0xf8,
++0x8,0x8,0xb,0x10,0x10,0x30,0x50,0x9f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x38,0xc0,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x42,0x21,0x2f,0x1,0x7,0xe1,0x21,0x3f,0x21,0x21,0x27,0x29,0x33,0x25,0x9,0x1,0x10,0x20,0xfc,0x20,0xf8,0x28,0x28,0xfe,0x28,0x28,0xf8,0x20,0x30,0x2e,0x24,0x20,
++0x10,0x14,0xfe,0x10,0x10,0x7d,0x46,0x7c,0x44,0x7c,0x10,0x14,0xfe,0x10,0x10,0x10,0x40,0x40,0x44,0x7e,0x80,0x0,0xf8,0x10,0x20,0x40,0x40,0x80,0x82,0x82,0x7e,0x0,
++0x1,0x7f,0x49,0x6b,0x5d,0x49,0x7f,0x8,0x7f,0x8,0x7f,0x0,0x55,0x55,0x94,0x0,0x10,0x90,0x28,0x28,0x44,0x86,0x20,0x10,0x0,0x7c,0x4,0x4,0x8,0x8,0x90,0x0,
++0x10,0x10,0x10,0x3c,0x43,0x80,0x3c,0x10,0x13,0xfc,0x10,0x10,0x14,0x18,0x11,0x0,0x40,0x50,0x48,0x7c,0xc0,0x40,0x44,0x7e,0xc0,0x44,0x4c,0x30,0x20,0x52,0x8a,0x6,
++0x10,0x10,0x10,0x1c,0x23,0x40,0xbc,0x10,0x10,0xfc,0x10,0x10,0x14,0x18,0x10,0x0,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0xf8,0x88,
++0x10,0xc,0x4,0xff,0x0,0x3e,0x22,0x22,0x3e,0x22,0x22,0x3e,0x22,0x22,0x2a,0x24,0x10,0x30,0x44,0xfe,0x0,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0x8,0x8,0x28,0x10,
++0x42,0x22,0x2f,0x82,0x62,0x2f,0x2,0x15,0x28,0xe7,0x24,0x24,0x27,0x24,0x24,0x27,0x10,0x10,0xbc,0x10,0x10,0xfe,0x10,0x28,0xc6,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,
++0x0,0x43,0x32,0x13,0x0,0xf,0xf0,0x13,0x12,0x13,0x12,0x13,0x12,0x13,0x2a,0x47,0x48,0xfc,0x48,0xf8,0x40,0xfe,0x0,0xf8,0x8,0xf8,0x0,0xf8,0x8,0xf8,0x6,0xfc,
++0x40,0x30,0x10,0x0,0x87,0x60,0x20,0x8,0x17,0x20,0xe0,0x20,0x20,0x23,0x2c,0x20,0x80,0xa0,0x90,0xfc,0x80,0x80,0x88,0xfc,0x80,0x90,0xa0,0x40,0xc0,0x24,0x14,0xc,
++0x40,0x21,0x29,0x5,0x0,0xef,0x24,0x25,0x25,0x25,0x25,0x2d,0x35,0x25,0xa,0x11,0x20,0xfc,0x24,0xfc,0x20,0xfe,0x0,0xfc,0x4,0xfc,0x0,0xfc,0x4,0xfc,0x0,0xfe,
++0x10,0xfe,0x20,0x28,0x7e,0x8,0xf,0xf9,0x4a,0x9,0x1,0x3f,0x1,0x1,0xff,0x0,0xc,0xf0,0x80,0x84,0xfe,0x90,0x90,0x10,0x10,0x10,0x0,0xf8,0x0,0x4,0xfe,0x0,
++0x1,0x21,0x21,0x3f,0x22,0x22,0xff,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x3e,0x21,0x0,0x8,0x8,0xf8,0x28,0x20,0x7c,0x44,0xa8,0x20,0x20,0x20,0x50,0x48,0x8e,0x4,
++0x8,0x8,0x8,0x1f,0x10,0x21,0x41,0x81,0x2,0x2,0x4,0x4,0x8,0x10,0x20,0xc0,0x0,0x0,0x0,0xfc,0x4,0x8,0x10,0x0,0x80,0x80,0x40,0x40,0x20,0x10,0xe,0x4,
++0x22,0x14,0xff,0x14,0x7f,0x15,0x15,0xff,0x15,0x15,0x7f,0x14,0x36,0x55,0x94,0x15,0x20,0x20,0xa0,0x3e,0x42,0x94,0x10,0xd0,0x10,0x10,0x28,0x28,0x48,0x4c,0x86,0x4,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x35,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x10,0x10,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x10,0x10,0x10,0x50,0x20,0x4,0x4,0xfc,0x0,
++0x0,0x8,0x7c,0x48,0x49,0x4a,0x4d,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0x0,0x0,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x10,0x10,0x10,0x50,0x20,0x4,0x4,0xfc,0x0,
++0x8,0x7c,0x4b,0x4a,0x4c,0x79,0x4a,0x4c,0x48,0x7b,0x48,0x48,0x48,0x48,0x4f,0x98,0x80,0x40,0xfe,0x2,0x4,0x10,0x8,0x4,0x0,0xf8,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x8,0x4,0x7f,0x1,0x1,0x3f,0x1,0x1,0xff,0x2,0x2,0x2,0x4,0x8,0x10,0x60,0x20,0x48,0xfc,0x0,0x10,0xf8,0x0,0x4,0xfe,0x80,0x80,0x80,0x80,0x82,0x82,0x7e,
++0x20,0x20,0x27,0x20,0xfa,0x21,0x2f,0x20,0x23,0x22,0x3a,0xe2,0x42,0x2,0x3,0x2,0x40,0x48,0xfc,0x40,0x48,0x50,0xfe,0x8,0xfc,0x8,0xe8,0xa8,0xe8,0x8,0xf8,0x8,
++0x8,0x7f,0x9,0x1,0x7f,0x9,0x5,0xff,0x0,0x1f,0x10,0x17,0x14,0x17,0x10,0x1f,0x28,0xfc,0x20,0x8,0xfc,0x20,0x44,0xfe,0x10,0xf8,0x10,0xd0,0x50,0xd0,0x10,0xf0,
++0x8,0xfd,0x9,0x9,0x9,0x79,0x48,0x43,0x42,0x7a,0xb,0xa,0x8,0x88,0x53,0x20,0x4,0xfe,0x4,0x4,0xfc,0x24,0x20,0xfe,0x22,0x22,0xfe,0x22,0x20,0x24,0xfe,0x2,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x11,0x50,0x20,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x10,0x10,0x10,0x50,0x20,0x4,0x4,0xfc,0x0,
++0x13,0x10,0x11,0x10,0xff,0x10,0x30,0x38,0x57,0x51,0x97,0x11,0x1f,0x11,0x11,0x11,0xf8,0x40,0xf0,0x40,0xf8,0x42,0x7e,0x0,0xbc,0x10,0xbc,0x10,0xbe,0x10,0x52,0x8e,
++0x20,0x27,0x39,0x41,0x41,0xff,0x21,0x23,0xfb,0x25,0x29,0x21,0x29,0x31,0x21,0x1,0xd0,0x10,0x10,0x52,0x34,0xd8,0x10,0x10,0x90,0x50,0x28,0x28,0x44,0x44,0x82,0x0,
++0x10,0x9,0xff,0x0,0x3e,0x22,0x3e,0x0,0x7f,0x41,0x5d,0x55,0x5d,0x41,0x45,0x42,0x10,0x10,0x94,0x1e,0x10,0x10,0xfc,0x4,0x44,0x44,0x28,0x28,0x10,0x28,0x4e,0x84,
++0x10,0x12,0x11,0x11,0x58,0x57,0x52,0x92,0x13,0x12,0x12,0x13,0x12,0x12,0x12,0x12,0x40,0x44,0x48,0x50,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x10,0x13,0x10,0x10,0xfc,0x17,0x31,0x39,0x56,0x55,0x99,0x11,0x11,0x12,0x14,0x10,0x38,0xc0,0x40,0x40,0x84,0xfe,0x20,0x10,0xe,0x14,0x10,0x10,0x10,0x10,0x10,0x10,
++0x9,0x7d,0x49,0x4b,0x4d,0x79,0x49,0x49,0x49,0x79,0x49,0x49,0x49,0x7a,0x42,0x4,0x40,0x28,0xfc,0x20,0x20,0xf8,0x20,0x20,0xf8,0x20,0x28,0xfc,0x0,0xa8,0xa6,0x2,
++0x0,0x1f,0x2,0x2,0xff,0x4,0x4,0x8,0x34,0xc4,0x4,0x4,0x8,0x8,0x10,0x0,0xf0,0x0,0x0,0x4,0xfe,0x40,0x20,0x50,0x4e,0x44,0x40,0x40,0x40,0x40,0x40,0x40,
++0x8,0xb,0x8,0x10,0x10,0x3f,0x51,0x91,0x12,0x15,0x19,0x11,0x11,0x12,0x14,0x10,0x38,0xc0,0x40,0x40,0x84,0xfe,0x20,0x10,0xe,0x14,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0xb,0xfc,0x10,0x10,0x10,0x10,0x11,0x10,0x10,0x1e,0xf0,0x40,0x0,0x0,0x0,0x4,0xfe,0x40,0x40,0x40,0x80,0x84,0xfe,0x4,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x44,0x45,0xfe,0x44,0x7c,0x11,0x7d,0x55,0x55,0x55,0x7d,0x11,0xff,0x11,0x11,0x11,0x20,0x24,0xa4,0xa8,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x14,0x8,
++0x13,0x10,0x11,0x10,0xff,0x10,0x14,0x18,0x37,0xd1,0x17,0x11,0x1f,0x11,0x51,0x21,0xf8,0x40,0xf0,0x40,0xf8,0x42,0x7e,0x0,0xbc,0x10,0xbc,0x10,0xbe,0x10,0x52,0x8e,
++0x20,0x21,0xfe,0x28,0x11,0x2a,0xc6,0x0,0xfd,0x2a,0x28,0x29,0x28,0x28,0x47,0x80,0x4,0xde,0x44,0x44,0x54,0xcc,0x44,0xcc,0x54,0x64,0x44,0x54,0x88,0x2,0xfe,0x0,
++0x10,0x11,0x10,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x45,0x1,0x1,0x20,0x24,0xa8,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x4,0x14,0x8,
++0x8,0x9,0x8,0x10,0x11,0x31,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x20,0x24,0xa8,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x4,0x14,0x8,
++0x2,0x1,0x7f,0x44,0x88,0x10,0x3,0x7e,0x8,0x9,0x8,0x8,0xe,0x78,0x20,0x0,0x0,0x0,0xfe,0x42,0x34,0x10,0xfc,0x80,0x88,0xfc,0x8,0x8,0x8,0x88,0x50,0x20,
++0x10,0x10,0x11,0x10,0x14,0x1e,0xf0,0x10,0x10,0x12,0x14,0x18,0x10,0x1,0x2,0xc,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x4,0x28,0x10,
++0x4,0x4,0xff,0x4,0x14,0x12,0xff,0x12,0x12,0x12,0x12,0x12,0x22,0x22,0x4a,0x84,0x40,0x44,0xfe,0x40,0x40,0x4,0x7e,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x7c,0x44,
++0x0,0xf,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x8,0xff,0x0,0x20,0xf0,0x20,0x20,0x20,0xe0,0x20,0x20,0x20,0xe0,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x10,0x10,0x5b,0x54,0x50,0x90,0x17,0x10,0x10,0x10,0x11,0x12,0x17,0x10,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0x80,0x80,0x10,0x8,0xfc,0x4,
++0x2,0x1,0x7f,0x44,0x88,0x10,0x0,0x11,0x14,0xfe,0x10,0x10,0x14,0x18,0x11,0x2,0x0,0x0,0xfe,0x42,0x34,0x10,0x4,0xfe,0x44,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x10,0x10,0x10,0x1c,0x20,0x21,0x7e,0x90,0x10,0xfc,0x10,0x12,0x14,0x18,0x11,0x2,0x40,0x40,0x40,0x7c,0x84,0x8,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x8e,0x4,0x0,
++0x8,0xb,0x8,0x13,0x10,0x33,0x50,0x97,0x14,0x19,0x11,0x10,0x10,0x10,0x11,0x16,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x2,0xf4,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x2,0x1,0x7f,0x8,0x4,0x2,0xff,0x1,0x1,0x7f,0x1,0x9,0x19,0x21,0x45,0x2,0x0,0x8,0xfc,0x20,0x40,0x84,0xfe,0x0,0x8,0xfc,0x0,0x20,0x18,0xc,0x4,0x0,
++0x1,0x7f,0x1,0x3f,0x2,0xff,0x4,0x8,0x37,0xc1,0x1f,0x1,0x5,0x9,0x31,0x1,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x40,0xe0,0x1e,0x24,0xf0,0x0,0x60,0x18,0x8,0x0,
++0x4,0x7e,0x8,0x3e,0x8,0x7e,0x1,0x2,0xc,0x32,0xc1,0xf,0x0,0x0,0x0,0x1,0x8,0xfc,0x20,0xf8,0x20,0xfc,0x0,0x80,0x60,0x1e,0x4,0xe0,0x20,0x40,0x80,0x0,
++0x22,0xff,0x22,0x3e,0x8,0x7f,0x49,0x49,0x7f,0x8,0x7f,0x8,0x3e,0x8,0xff,0x1,0x20,0xa0,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x94,0x8,
++0x8,0x8,0xff,0x8,0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x20,0x20,0xfe,0x20,0x18,0xe0,0x0,0x4,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x11,0x12,0xfd,0x10,0x12,0x1a,0x33,0xd0,0x17,0x14,0x14,0x15,0x54,0x24,0x40,0xa0,0x10,0x48,0xf6,0xa4,0x48,0xa8,0xf8,0x44,0xfe,0x84,0xa4,0xf4,0x4,0xc,
++0x1,0x2,0x6,0x8,0x3f,0xc4,0x13,0x14,0x1f,0x1,0x3f,0x22,0x24,0x2f,0x20,0x20,0x0,0x80,0x40,0x30,0xfe,0x44,0x90,0x50,0xf0,0x8,0xfc,0x8,0x48,0xe8,0x8,0x18,
++0x1,0x7f,0x40,0x97,0x10,0x97,0x50,0x57,0x10,0x37,0x58,0x93,0x11,0x10,0x11,0x16,0x0,0xfe,0x2,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x4,0xf0,0x20,0xc0,0x20,0x1c,
++0x20,0x18,0x8,0x80,0x61,0x21,0x1,0x15,0x25,0x25,0xe9,0x29,0x21,0x21,0x20,0x20,0x0,0x80,0x40,0x60,0x20,0x20,0x0,0x8,0x4,0x6,0x2,0x8,0x8,0x8,0xf8,0x0,
++0x1,0x1,0x7f,0x1,0x3f,0x1,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x10,0x11,0x14,0xfe,0x20,0x28,0x4b,0x7c,0x8,0x9,0xe,0xf8,0x48,0x8,0xb,0x8,0x0,0xfc,0x8,0x10,0x38,0xcc,0x2,0x0,0x8,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x1f,0x10,0x2f,0x40,0xbf,0x0,0x3f,0x2,0xd,0x70,0x1f,0x2,0x2,0x7f,0x0,0x8,0xfc,0x0,0xf8,0x10,0xf8,0x10,0x90,0x10,0x90,0x70,0xd0,0x10,0x52,0xea,0x6,
++0x10,0x13,0x10,0x28,0x29,0x69,0xaf,0x29,0x29,0x29,0x2b,0x2d,0x28,0x20,0x20,0x23,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x4c,0x86,0x2,
++0x8,0x77,0x44,0x54,0x54,0x57,0x54,0x54,0x54,0x57,0x74,0x55,0x14,0x25,0x46,0x80,0x4,0xbe,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0x24,0x34,0xa8,0xa0,0x20,0x20,
++0x0,0x40,0x37,0x10,0x83,0x60,0x2f,0x8,0x13,0x22,0xe3,0x22,0x23,0x22,0x22,0x22,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x28,0x10,
++0x24,0xff,0x24,0x3f,0x41,0xbd,0x25,0x3d,0x2,0x3f,0x1,0x1f,0x1,0xff,0x1,0x3,0x20,0x24,0x3e,0x44,0xa8,0x10,0x2e,0x44,0x70,0x80,0x0,0xf0,0x4,0xfe,0x0,0x0,
++0x0,0x8,0x7f,0x48,0x4b,0x48,0x4f,0x78,0x4b,0x4a,0x4b,0x4a,0x7b,0x4a,0x2,0x2,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x28,0x10,
++0x10,0x1f,0x10,0x2f,0x40,0xbf,0x4,0x3f,0x4,0x3f,0x4,0x7f,0x0,0x9,0x6,0x2,0x8,0xfc,0x0,0xf8,0x10,0xf8,0x10,0x90,0x10,0x90,0x10,0xd0,0x90,0x12,0xa,0x6,
++0x10,0x17,0x10,0x13,0x58,0x57,0x50,0x93,0x12,0x13,0x12,0x13,0x12,0x12,0x12,0x12,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x4f,0x40,0x40,0x53,0x7a,0x42,0x42,0x42,0x4a,0x52,0x62,0x40,0x1,0x2,0xc,0x4,0xfe,0x40,0x88,0xfc,0x8,0x48,0x48,0x48,0x48,0x48,0x88,0xa0,0x18,0xc,0x4,
++0x0,0x47,0x20,0x23,0x0,0xef,0x20,0x23,0x22,0x23,0x22,0x23,0x2a,0x32,0x22,0x2,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x1,0x0,0x3f,0x20,0x20,0x20,0x3f,0x20,0x20,0x21,0x21,0x22,0x22,0x44,0x88,0x30,0x0,0x88,0xfc,0x80,0x80,0x88,0xfc,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0xe,0x4,
++0x0,0x10,0xf8,0x27,0x20,0x23,0xfa,0x22,0x22,0x23,0x20,0x39,0xe3,0x44,0x1,0x0,0x80,0x40,0x4,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x2,0x1,0x7f,0x40,0x84,0xc,0x12,0x2,0x3f,0x2,0x2,0x4,0x4,0x8,0x10,0x20,0x0,0x0,0xfe,0x2,0x44,0x30,0x10,0x8,0xfc,0x8,0x8,0x8,0x8,0x88,0x50,0x20,
++0x8,0x1c,0xf0,0x10,0x11,0xfd,0x11,0x32,0x38,0x54,0x50,0x91,0x11,0x12,0x14,0x18,0x40,0x40,0x40,0x40,0x44,0x4c,0x50,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,0x0,
++0x0,0x0,0x1,0xe,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0x8,0x8,0x8,0xff,0x0,0x20,0x70,0x80,0x0,0x0,0x0,0x10,0xf8,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x2,0x6,0x38,0x20,0x20,0x21,0x3f,0x22,0x22,0x22,0x22,0x22,0x3f,0xe0,0x40,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0xd0,0x48,0x44,0x42,0x42,0x62,0xd4,0x48,0x40,0x40,
++0x0,0x8,0xfc,0x13,0x10,0x12,0x7d,0x11,0x10,0x10,0x11,0x1e,0xe4,0x0,0x1,0x0,0x40,0x50,0x48,0xfe,0x40,0x44,0x4c,0x50,0x60,0xd0,0x50,0x4e,0x44,0x40,0x40,0x80,
++0x1,0x1,0x1,0x7f,0x1,0x21,0x19,0x9,0x3,0x5,0x9,0x11,0x61,0x1,0x5,0x2,0x0,0x40,0x28,0xfc,0x0,0x8,0x18,0xa0,0x40,0x40,0x30,0xe,0x4,0x0,0x0,0x0,
++0x0,0x7f,0x40,0x41,0x41,0x41,0x41,0x42,0x42,0x44,0x44,0x48,0x50,0x40,0x7f,0x40,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x84,0x84,0x44,0x24,0x3c,0x14,0x4,0xfc,0x4,
++0x10,0xc,0x4,0xff,0x4,0x4,0x3f,0x24,0x24,0x38,0x20,0x2f,0x20,0x20,0x3f,0x20,0x10,0x30,0x44,0xfe,0x40,0x48,0xfc,0x48,0x48,0x38,0x8,0xe8,0x8,0x8,0xf8,0x8,
++0x40,0x37,0x14,0x4,0x84,0x44,0x54,0x14,0x14,0x24,0xe4,0x25,0x26,0x24,0x27,0x24,0x4,0xfe,0x4,0x44,0x44,0x44,0x44,0xa4,0xa4,0xa4,0x94,0x1c,0x4,0x4,0xfc,0x4,
++0x8,0x8,0x8,0x7e,0x9,0x8,0xff,0x8,0x28,0x2e,0x28,0x28,0x29,0x58,0x88,0x7,0x40,0x40,0x78,0x88,0x10,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x0,0x6,0xfc,
++0x0,0x3f,0x20,0x28,0x24,0x22,0x21,0x20,0x21,0x22,0x24,0x28,0x20,0x20,0x3f,0x0,0x8,0xfc,0x0,0x8,0x18,0x20,0x40,0x80,0x40,0x30,0x18,0x8,0x0,0x4,0xfe,0x0,
++0x10,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xf5,0x47,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xfe,0x0,
++0x4,0x4,0x4,0x4,0x7f,0x44,0x44,0x44,0x44,0x7f,0x44,0x44,0x44,0x44,0x7f,0x40,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0x44,0xfc,0x4,
++0x8,0x11,0x7d,0x45,0x7d,0x45,0x7d,0x45,0x45,0xfd,0x15,0x25,0x45,0x85,0x15,0x8,0x4,0xfe,0x0,0x44,0x44,0x28,0x28,0x10,0x10,0x28,0x28,0x44,0x84,0x0,0xfe,0x0,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x28,0x28,0x28,0x2f,0x20,0x30,0x50,0x50,0x9f,0x10,0x4,0xfe,0x4,0x4,0xfc,0x80,0x88,0x88,0x88,0xf8,0x80,0x84,0x84,0x84,0xfc,0x4,
++0x8,0xfd,0x9,0x49,0x49,0x49,0x49,0x49,0x7d,0x5,0x5,0x1d,0xe5,0x45,0x15,0x8,0x4,0xfe,0x0,0x44,0x44,0x28,0x28,0x10,0x10,0x28,0x28,0x44,0x84,0x0,0xfe,0x0,
++0x23,0x12,0x43,0x22,0xa,0x13,0x62,0x23,0x20,0x0,0xff,0x5,0x9,0x11,0x61,0x1,0xfc,0x0,0xf8,0x8,0x8,0xf8,0x0,0xfc,0x0,0x4,0xfe,0x40,0x20,0x1c,0x8,0x0,
++0x1,0xff,0x22,0x23,0x3e,0x22,0x22,0x3e,0x22,0x22,0x22,0x3e,0xe2,0x42,0x3,0x2,0x0,0x80,0x0,0xfc,0x4,0x84,0x88,0x88,0x48,0x50,0x20,0x50,0x48,0x8e,0x4,0x0,
++0x0,0x7f,0x22,0x3e,0x22,0x3e,0x22,0xff,0x2,0x1,0xff,0x4,0xc,0x2,0x1,0xe,0x0,0x0,0xfc,0x44,0x48,0x28,0x10,0x2e,0x44,0x0,0xfe,0x20,0x20,0x40,0x80,0x70,
++0x10,0x13,0x10,0x5d,0x51,0x51,0xfd,0x0,0x55,0x55,0x55,0x6d,0x45,0x7d,0x45,0x1,0xc,0xf0,0x24,0xfe,0x24,0x24,0xfc,0x20,0xfc,0x24,0x24,0x54,0x74,0x4,0x14,0x8,
++0x10,0x17,0x12,0x7e,0x13,0x12,0xfe,0x13,0x52,0x5e,0x52,0x57,0x70,0x50,0x8f,0x0,0x40,0xe0,0x40,0x7c,0xc4,0x54,0x54,0xd4,0x48,0x54,0x52,0xe2,0x40,0x46,0xfc,0x0,
++0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0xff,0x2,0x2,0x4,0x8,0x10,0x3f,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x40,0x20,0x10,0xf8,0x8,
++0x0,0x7f,0x49,0x45,0x5f,0x42,0x7f,0x44,0x4f,0x74,0x45,0x44,0x43,0x40,0x7f,0x40,0x4,0xfe,0x24,0x44,0xf4,0x4,0xfc,0x44,0xe4,0x5c,0x84,0x24,0xe4,0x4,0xfc,0x4,
++0x22,0x22,0xff,0x22,0x77,0x55,0x77,0x24,0x3f,0x64,0xbf,0x24,0x3f,0x24,0x3f,0x20,0x4,0xfe,0x90,0x24,0x7e,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x10,0x28,0x46,0x82,
++0x10,0x10,0x13,0x10,0xfe,0x12,0x31,0x39,0x55,0x50,0x90,0x10,0x11,0x12,0x14,0x10,0x0,0x0,0xf8,0x8,0x8,0x8,0x8,0x10,0x10,0xa0,0x40,0xa0,0x10,0xe,0x4,0x0,
++0x4,0xfe,0x2b,0x28,0xfe,0xaa,0xaa,0xab,0xc6,0x82,0xfe,0x82,0x82,0xfe,0x83,0x0,0x88,0x88,0xfe,0x88,0x20,0x50,0x8e,0x4,0xf8,0x20,0x20,0xf8,0x20,0x24,0xfe,0x0,
++0x2,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x1,0x7d,0x5,0x9,0x11,0x21,0xc5,0x2,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x4,0x8c,0x50,0x20,0x10,0xe,0x4,0x0,
++0x1,0x1,0x2,0x4,0x8,0x10,0x2f,0xc1,0x1,0x1,0xf,0x1,0x1,0x1,0x7f,0x0,0x0,0x0,0x80,0x40,0x20,0x50,0xee,0x4,0x0,0x40,0xe0,0x0,0x0,0x8,0xfc,0x0,
++0x0,0x0,0x1f,0x10,0x90,0x51,0x52,0x1d,0x30,0x50,0xd3,0x10,0x20,0x20,0x4f,0x0,0x80,0x44,0xfe,0x40,0xa0,0x10,0xe,0xf4,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x0,
++0x1,0x9,0x5,0x7f,0x2,0xff,0x4,0x9,0x1f,0x21,0xcf,0x1,0x3f,0x1,0x5,0x2,0x0,0x20,0x48,0xfc,0x0,0xfe,0x40,0xe0,0x10,0xe,0xe4,0x0,0xf8,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x2,0x2,0x4,0x4,0x8,0x10,0x60,0x0,0x0,0x40,0x30,0x10,0x4,0xfe,0x0,0x0,0x80,0x80,0x40,0x20,0x10,0xe,0x4,0x0,
++0x1,0x9,0x5,0x7f,0x2,0xff,0x4,0x8,0x1f,0x22,0xc2,0x4,0x4,0x8,0x10,0x20,0x0,0x20,0x48,0xfc,0x0,0xfe,0x40,0x20,0xf0,0x2e,0x24,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x0,0x7e,0x2,0x23,0x22,0x14,0x14,0x8,0x14,0x14,0x22,0x42,0x81,0x2,0x4,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x4,0x28,0x10,
++0x20,0x20,0x24,0x3e,0x51,0x90,0x14,0xfe,0x13,0x54,0x54,0x54,0x54,0x7d,0x46,0x4,0x40,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0xfe,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x10,0x10,0x12,0x56,0x59,0x50,0x90,0x10,0x17,0x28,0x28,0x24,0x44,0x41,0x82,0x4,0x40,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0xfe,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x0,0x1f,0x12,0x9f,0x52,0x52,0x12,0x15,0x38,0x57,0xd4,0x15,0x24,0x24,0x45,0x4,0x84,0xfe,0x0,0xbc,0xa4,0xa4,0xa4,0xbc,0x44,0xfe,0x44,0xb4,0x44,0xa4,0x14,0x8,
++0x8,0x8,0xa,0x7f,0x8,0x8,0x9,0xff,0x8,0x10,0x10,0x24,0x22,0x7f,0x1,0x0,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0xc4,0x44,0x44,0x64,0x54,0x48,0x40,0x40,0x40,
++0x24,0x24,0x24,0x7e,0x24,0x24,0xff,0x0,0x7e,0x42,0x42,0x7e,0x43,0x42,0x7e,0x42,0x20,0x48,0xfc,0x88,0xa8,0x88,0xa8,0x90,0x84,0xfe,0x4,0x14,0xfc,0x4,0x14,0x8,
++0x10,0x10,0x13,0x12,0xfc,0x11,0x31,0x3b,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x40,0x40,0xfe,0xa2,0xa4,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,
++0x0,0x4,0xfe,0x10,0x11,0x23,0x25,0x7d,0xa5,0x25,0x25,0x25,0x25,0x3d,0x22,0x4,0x40,0x40,0x78,0x90,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x24,0x24,0xc,
++0x1,0x9,0xd,0x11,0x21,0x3,0xc,0x30,0xdf,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x0,0x20,0x18,0x4c,0x84,0x0,0x0,0x88,0xfc,0x80,0xf8,0x80,0xf8,0x80,0xfe,0x0,
++0x20,0x11,0x10,0x0,0xfb,0x8,0x10,0x35,0x58,0x95,0x11,0x12,0x14,0x10,0x10,0x10,0x4,0xfe,0x84,0x84,0xfe,0x84,0x84,0xfc,0x80,0x4,0xfe,0x84,0x84,0x84,0xfc,0x84,
++0x2,0x7f,0x22,0x22,0xff,0x22,0x22,0x7e,0x20,0x42,0xbf,0x22,0x22,0x22,0x3e,0x22,0x82,0x44,0x28,0xfe,0x10,0x10,0x14,0xfe,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,
++0x10,0x10,0x10,0x1e,0x22,0x33,0x4a,0xa4,0x14,0x8,0x11,0x22,0x40,0x24,0x24,0x40,0x20,0x20,0x28,0x24,0x20,0xfe,0x20,0x50,0x50,0x88,0xe,0x4,0x0,0x48,0x46,0x2,
++0x11,0x11,0x11,0x15,0x5a,0x53,0x54,0x9a,0x11,0x12,0x20,0x28,0x44,0x42,0x82,0x4,0x10,0x18,0xd4,0x50,0x7e,0x50,0x90,0x90,0x28,0x28,0x46,0x84,0x0,0xa8,0xa4,0x4,
++0x1,0x1,0x1,0x3f,0x21,0x21,0x3f,0x21,0x21,0xff,0x20,0x20,0x20,0x20,0x20,0x20,0x0,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xfe,0x8,0x8,0x8,0x8,0x28,0x10,
++0x20,0x10,0x43,0x20,0x8,0x51,0x22,0x25,0x1,0xff,0x3,0x5,0x9,0x11,0x61,0x1,0x80,0x90,0xf8,0x90,0x90,0x12,0x12,0xe,0x0,0xfe,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x10,0xfe,0x0,0xee,0xaa,0xee,0x28,0xfe,0x28,0x7c,0x28,0xfe,0x24,0x68,0xa5,0x32,0x8,0x1c,0xe0,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa4,0xaa,0x38,0x0,
++0x20,0x27,0x20,0x23,0xfa,0x23,0x21,0x27,0x21,0x23,0x39,0xef,0x41,0x3,0xd,0x1,0x44,0xfe,0x0,0xb8,0xa8,0xb8,0x10,0xfc,0x10,0xf8,0x10,0xfe,0x48,0x30,0xe,0x84,
++0x10,0x17,0x10,0x13,0xfe,0x13,0x11,0x1f,0x31,0xd3,0x11,0x1f,0x11,0x13,0x55,0x21,0x44,0xfe,0x0,0xb8,0xa8,0xb8,0x10,0xfc,0x10,0xf8,0x10,0xfe,0x48,0x30,0xe,0x84,
++0x0,0xf,0x70,0x53,0x52,0x53,0x51,0x57,0x51,0x53,0x51,0x5f,0x71,0x43,0xd,0x1,0x44,0xfe,0x0,0xb8,0xa8,0xb8,0x10,0xfc,0x10,0xf8,0x10,0xfe,0x48,0x30,0xe,0x84,
++0x0,0x40,0x30,0x10,0x0,0x0,0xf0,0x10,0x10,0x10,0x10,0x12,0x14,0x18,0x17,0x0,0x40,0x40,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x20,0x20,0x20,0x38,0x4f,0x50,0x80,0x20,0x27,0x20,0x27,0x21,0x29,0x31,0x22,0xc,0x80,0x80,0x88,0xfc,0x80,0x50,0x22,0xd2,0xe,0x8,0xfc,0x20,0x20,0x22,0x22,0x1e,
++0x10,0x10,0x10,0x10,0xfc,0x13,0x14,0x18,0x30,0xd0,0x10,0x10,0x11,0x11,0x52,0x24,0x40,0x50,0x48,0x40,0x44,0xfe,0x40,0x60,0xa0,0xa0,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x20,0x20,0x47,0xf8,0x10,0x20,0x47,0xf8,0x7,0x1,0x19,0xe1,0x42,0xc,0x80,0x80,0x88,0xfc,0x80,0x50,0x22,0xd2,0xe,0x8,0xfc,0x20,0x20,0x22,0x22,0x1e,
++0x8,0x8,0x7f,0xa,0x2,0xff,0x4,0xf,0x18,0x28,0xcf,0x2,0x29,0x28,0x48,0x7,0x20,0x28,0xfc,0x20,0x4,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x0,0x88,0x84,0x14,0xf0,
++0x8,0x8,0x8,0x7f,0x8,0xa,0x1c,0x68,0x8,0x8,0x29,0x12,0x0,0x48,0x44,0x84,0x40,0x40,0x48,0xfc,0x48,0x48,0xc8,0x48,0xa8,0x8a,0xa,0x4,0x0,0x88,0x46,0x42,
++0x0,0x0,0x3f,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x3f,0x0,0x10,0x78,0x80,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,
++0x8,0x8,0x8,0x17,0x10,0x30,0x50,0x90,0x10,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x4,0x4,0x8,0x10,0x20,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x40,0x40,0x20,0x10,0xe,0x4,
++0x0,0x7f,0x2,0x12,0x12,0x22,0x4,0x18,0x60,0x0,0x4,0x13,0x51,0x50,0x8f,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x50,0x20,0x0,0x0,0x0,0x14,0x12,0xf2,0x0,
++0x10,0x10,0x15,0xfe,0x10,0x10,0x7c,0x10,0x11,0xfe,0x12,0x12,0x1a,0x14,0x10,0x13,0x0,0x4,0xfe,0x24,0x24,0xa4,0xa4,0xa4,0x24,0x24,0x24,0x44,0x44,0x84,0x94,0x8,
++0x8,0x8,0xb,0x10,0x10,0x30,0x50,0x9f,0x10,0x10,0x10,0x10,0x10,0x17,0x10,0x10,0x0,0x18,0xe0,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x48,0xfc,0x0,0x0,
++0x0,0x40,0x30,0x10,0x0,0x0,0xf0,0x10,0x10,0x11,0x11,0x15,0x1a,0x12,0x4,0x8,0x40,0x40,0x40,0x40,0x40,0x40,0xa0,0xa0,0xa0,0x10,0x10,0x10,0x8,0x8,0x6,0x4,
++0x0,0x7f,0x1,0x1,0x1,0x9,0x9,0x11,0x21,0x1,0x2,0x2,0x4,0x8,0x10,0x60,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x10,0x10,0x11,0x10,0xfc,0x24,0x24,0x27,0x24,0x44,0x28,0x10,0x28,0x44,0x85,0x0,0x8,0x3c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x28,0xfc,0x0,
++0x10,0x10,0x23,0x20,0x44,0xf9,0x11,0x22,0x40,0xfc,0x0,0x0,0x1c,0xe1,0x42,0x4,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x84,0x4,0x28,0x10,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x14,0x18,0x30,0xd0,0x11,0x11,0x11,0x12,0x54,0x28,0x0,0x8,0xfc,0x88,0x88,0x90,0x94,0xbe,0x84,0x84,0x4,0x4,0x4,0x44,0x28,0x10,
++0x10,0x10,0x1f,0x21,0x21,0x61,0xa1,0x21,0x21,0x21,0x22,0x22,0x22,0x24,0x28,0x30,0x0,0x8,0xfc,0x8,0x8,0x8,0x10,0x14,0x3e,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x0,0x1f,0x10,0x10,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0x10,0xf0,0x10,0x0,
++0x0,0x0,0x0,0xff,0x0,0x8,0x8,0x8,0x7e,0x8,0x8,0x10,0x11,0x22,0x4c,0x0,0x80,0xa0,0x94,0xfe,0x80,0x80,0x88,0x88,0x90,0x60,0x40,0xc0,0x20,0x12,0xa,0x6,
++0x4,0x4,0xff,0x4,0x0,0x7f,0x8,0xf,0x8,0xf,0x8,0x8,0x7f,0x0,0x0,0x0,0x40,0x44,0xfe,0x40,0x8,0xfc,0x20,0xe0,0x20,0xe0,0x28,0x3c,0xe0,0x20,0x20,0x20,
++0x8,0x8,0xff,0x8,0x1,0x7f,0x40,0x89,0x12,0x4,0x1f,0x28,0xc8,0x8,0xf,0x8,0x20,0x24,0xfe,0x20,0x0,0xfe,0x2,0x24,0x90,0x40,0xf0,0x2e,0x24,0x20,0xe0,0x20,
++0x4,0x4,0xff,0x4,0x0,0x7f,0x41,0x81,0x1,0x7f,0x3,0x5,0x9,0x11,0x61,0x1,0x40,0x44,0xfe,0x40,0x0,0xfe,0x2,0x4,0x0,0xfc,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x2,0x7f,0x0,0x3e,0x22,0x22,0x3e,0x0,0x7f,0x63,0x55,0x7f,0x49,0x49,0x49,0x43,0x10,0x10,0x10,0x14,0x7e,0x54,0x54,0x54,0x54,0x7c,0x54,0x10,0x10,0x14,0xfe,0x2,
++0x10,0x10,0x17,0x14,0x59,0x52,0x54,0x91,0x12,0x14,0x1b,0x12,0x2a,0x26,0x43,0x82,0x80,0x40,0xfe,0x2,0x14,0x48,0xa4,0x10,0xe,0x4,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x40,0x30,0x17,0x4,0x89,0x62,0x24,0x1,0x12,0x24,0xeb,0x22,0x22,0x22,0x23,0x22,0x80,0x40,0xfe,0x2,0x14,0x48,0xa4,0x10,0xe,0x4,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x2,0x1,0x7f,0x40,0x84,0x9,0x12,0x4,0x8,0x10,0x2f,0xc8,0x8,0x8,0xf,0x8,0x0,0x0,0xfe,0x2,0x44,0x30,0x90,0x40,0x20,0x10,0xee,0x24,0x20,0x20,0xe0,0x20,
++0x10,0x10,0x20,0x27,0x44,0xf9,0x11,0x21,0x47,0xf9,0x1,0x1,0x1a,0xe2,0x45,0x0,0x20,0x30,0x28,0xfe,0x20,0x24,0x24,0x28,0xe8,0x28,0x30,0x20,0x50,0x92,0xa,0x6,
++0x0,0x0,0x7f,0x40,0x80,0xf,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x0,0x0,0xfe,0x2,0x44,0xe0,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0x44,0x3c,0x0,
++0x10,0x13,0x10,0x10,0xfb,0x10,0x11,0x1a,0x30,0xd7,0x10,0x11,0x11,0x12,0x54,0x20,0x0,0xf8,0x90,0x60,0xfc,0xa8,0x20,0x60,0x44,0xfe,0xe0,0x50,0x48,0x4e,0x44,0x40,
++0x0,0x1f,0x2,0x1,0x7f,0x2,0x4,0x19,0x1,0xff,0x3,0x5,0x9,0x11,0x61,0x1,0x0,0xe0,0x40,0x80,0xfc,0x88,0x90,0x80,0x4,0xfe,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x1,0x1,0x1,0x7f,0x41,0x41,0x42,0x44,0x49,0x41,0x42,0x44,0x48,0x40,0x40,0x40,0x0,0x0,0x4,0xfe,0x4,0x4,0x84,0x64,0x24,0x4,0x84,0x64,0x24,0x4,0x14,0x8,
++0x4,0x4,0xff,0x4,0x14,0x10,0xfe,0x22,0x22,0x22,0x42,0x24,0x14,0x8,0x14,0x62,0x40,0x44,0xfe,0x40,0x40,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,0x0,
++0x20,0x23,0x20,0x27,0xfd,0xac,0xa9,0xa8,0xaf,0xf8,0xa3,0x22,0x2a,0xfa,0x4a,0x2,0x10,0xf8,0x40,0xfe,0x52,0xe4,0x50,0x40,0xfc,0x88,0xfc,0xa8,0xa8,0xa8,0xa8,0x18,
++0x10,0x13,0x10,0x27,0x25,0x68,0xa1,0x20,0x2f,0x20,0x27,0x24,0x24,0x24,0x24,0x24,0x10,0xf8,0x40,0xfe,0x52,0xe4,0x50,0x44,0xfe,0x84,0xfe,0xa4,0xa4,0xa4,0xa4,0xc,
++0x0,0xfb,0x8,0x17,0x25,0x28,0x21,0x28,0x37,0xe0,0x27,0x24,0x24,0x24,0xa4,0x44,0x10,0xf8,0x40,0xfe,0x52,0xe4,0x50,0x44,0xfe,0x84,0xfe,0xa4,0xa4,0xa4,0xa4,0xc,
++0x10,0x10,0x10,0x10,0xfe,0x22,0x22,0x22,0x22,0x42,0x24,0x14,0x8,0x14,0x22,0x40,0x0,0x0,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,0x0,
++0x0,0x3f,0x20,0x2f,0x20,0x3f,0x29,0x28,0x4a,0x8c,0x0,0xff,0x4,0x2,0x0,0x0,0x10,0xf8,0x0,0xf0,0x0,0xfc,0x10,0xa0,0x60,0x1c,0x20,0xfe,0x20,0x20,0xa0,0x40,
++0x2,0xf,0x70,0x29,0x2a,0x7f,0x2,0xc,0x8,0xb,0xc,0x38,0xc8,0x8,0x28,0x10,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x42,0x3e,0x0,
++0x20,0x18,0x8,0x80,0x60,0x2f,0x1,0x9,0x12,0x24,0xe2,0x21,0x20,0x21,0x22,0x2c,0x80,0x80,0x80,0x80,0x84,0xfe,0x8,0x8,0x8,0x10,0x10,0x20,0xc0,0x20,0x18,0x8,
++0x4,0x2,0x1,0x1,0x1,0x2,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0xe,0x4,
++0x20,0x13,0x12,0x3,0xfe,0xb,0x12,0x36,0x5a,0x94,0x10,0x17,0x11,0x10,0x10,0x10,0x8,0xfc,0x0,0xfc,0x0,0xfe,0xc4,0xa8,0x90,0xce,0x8,0xfe,0x8,0x88,0x28,0x10,
++0x10,0x10,0x14,0xfe,0x20,0x29,0x48,0x7e,0x8,0x8,0xe,0xf8,0x48,0x8,0x9,0xa,0x40,0x40,0x40,0x7c,0x84,0x8,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x88,0x6,0x4,
++0x0,0x7d,0x44,0x48,0x48,0x53,0x48,0x48,0x44,0x44,0x44,0x68,0x51,0x41,0x42,0x44,0x8,0xfc,0x0,0x0,0x4,0xfe,0x90,0x90,0x90,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x8,0x8,0xff,0x8,0x2,0x29,0x29,0x48,0x7,0x10,0x8,0x20,0x66,0xa5,0x3c,0x0,0x20,0x24,0xfe,0x20,0x0,0x8,0x24,0x24,0xe0,0x20,0x10,0x40,0xcc,0x4a,0x78,0x0,
++0x0,0x14,0xfc,0x24,0x24,0x27,0x20,0xff,0x20,0x27,0x24,0x24,0x3c,0xe4,0x44,0x4,0x40,0x44,0x44,0x44,0x44,0xfc,0x0,0xfe,0x84,0xfe,0xa4,0xa4,0xa4,0xa4,0xa4,0xc,
++0x11,0x10,0x10,0x1c,0x21,0x21,0x7d,0x91,0x11,0x7c,0x10,0x10,0x15,0x19,0x12,0x4,0x4,0x88,0x50,0x4,0xfe,0x4,0x4,0x4,0xfc,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x20,0x1b,0x8,0x40,0x5f,0x41,0x41,0x41,0x4f,0x41,0x41,0x41,0x5f,0x40,0x40,0x40,0x4,0xfe,0x4,0x24,0xf4,0x4,0x4,0x44,0xe4,0x4,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x4,0x43,0x31,0x14,0x85,0x44,0x44,0x14,0x15,0x24,0xe4,0x24,0x25,0x24,0x24,0x24,0x4,0x7e,0x4,0x24,0xf4,0x44,0x44,0x44,0xf4,0x44,0x44,0x44,0xf4,0x4,0x14,0x8,
++0x8,0x8,0x7f,0x8,0xa,0x2,0xff,0x4,0x8,0x1f,0x28,0x48,0x88,0x8,0xf,0x8,0x20,0x28,0xfc,0x20,0x20,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x0,0x7e,0x2,0x2,0x7e,0x40,0x40,0x7e,0x22,0x12,0x6,0x1a,0x62,0x22,0x2,0x4,0x4,0xfe,0x4,0x4,0xfc,0x80,0x84,0xfe,0x44,0x24,0xc,0x34,0xc4,0x44,0x14,0x8,
++0x22,0x22,0x27,0x22,0xfa,0x2f,0x20,0x2f,0x34,0xe7,0x24,0x27,0x24,0x24,0xa5,0x44,0x90,0x90,0xd4,0x9e,0xa4,0xf4,0x14,0xd4,0x54,0xd4,0x48,0xc8,0x54,0x54,0x62,0x80,
++0x0,0x40,0x3f,0x10,0x0,0x87,0x44,0x4c,0x14,0x24,0xe5,0x26,0x24,0x24,0x27,0x24,0x0,0x4,0xfe,0xa0,0xa4,0xfe,0xa4,0xa4,0xa4,0xa4,0x1c,0x4,0x4,0x4,0xfc,0x4,
++0x4,0x4,0xff,0x4,0x7c,0x45,0x48,0x50,0x49,0x45,0x45,0x65,0x59,0x41,0x42,0x44,0x40,0x44,0xfe,0x40,0x20,0xfc,0x88,0x50,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x7d,0x49,0x49,0x49,0x79,0x49,0x49,0x49,0x78,0x48,0x4a,0x4a,0x4c,0x48,0x98,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,0x0,0x40,0xa4,0xa2,0x8a,0x88,0x78,
++0x20,0x21,0x7d,0x89,0x11,0x7d,0x55,0x55,0x7d,0x54,0x54,0x7e,0x2,0x1c,0xe0,0x40,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,0x0,0x40,0xa4,0xa2,0x8a,0x88,0x78,
++0x2,0x1,0x7f,0x44,0x9f,0x4,0x1f,0x4,0x7f,0x5,0x19,0x67,0x81,0x1,0x7f,0x0,0x0,0x0,0xfe,0x42,0xf4,0x40,0xf0,0x40,0xfc,0x40,0x30,0xce,0x4,0x10,0xf8,0x0,
++0x1,0x7f,0x44,0x9f,0x4,0x1f,0x4,0x7f,0x8,0x1f,0x28,0xc9,0x9,0x1,0x6,0x18,0x0,0xfe,0x42,0xf4,0x40,0xf0,0x40,0xfc,0x20,0xf0,0x2e,0x24,0x20,0x0,0xc0,0x30,
++0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,
++0x2,0x4,0x8,0x3f,0x2,0x2,0xff,0x4,0xf,0x10,0x20,0xcf,0x0,0x0,0x3f,0x0,0x0,0x40,0x20,0xf0,0x10,0x4,0xfe,0x40,0xe0,0x10,0x4e,0xe4,0x0,0x10,0xf8,0x0,
++0x1,0x1,0x2,0x4,0x9,0x11,0x21,0xd1,0xd,0x5,0xff,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x80,0x40,0x20,0x10,0xe,0x14,0x30,0x44,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x24,0x24,0x7e,0x24,0x24,0xff,0x2,0x7f,0x42,0x7e,0x42,0x7e,0x42,0x42,0x4a,0x45,0x40,0x40,0x40,0x84,0xfe,0x8,0x88,0x88,0x88,0x50,0x50,0x20,0x50,0x48,0x8e,0x4,
++0x1f,0x8,0x4,0x3,0x4,0x8,0x7f,0x24,0x18,0x66,0x1,0xff,0x5,0x19,0x61,0x1,0xf0,0x20,0x40,0x80,0x40,0x20,0xfc,0x48,0x30,0xcc,0x0,0xfe,0x40,0x30,0xc,0x0,
++0x3,0x11,0xf8,0x91,0x92,0x97,0x94,0x93,0x94,0x90,0x9f,0x90,0xf1,0x92,0xc,0x0,0xf8,0x10,0xe0,0x10,0x8,0xbc,0xa4,0x18,0xa4,0x40,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x1,0x1,0x3f,0x1,0x11,0xd,0x5,0xff,0x10,0x12,0x11,0x10,0x10,0x14,0x18,0x10,0x0,0x10,0xf8,0x0,0x10,0x30,0x44,0xfe,0x10,0x20,0x40,0x80,0x40,0x30,0xe,0x4,
++0x10,0x17,0x10,0x11,0xfc,0x11,0x16,0x18,0x33,0xd2,0x12,0x13,0x12,0x10,0x57,0x20,0x0,0xfc,0x48,0x10,0xe0,0x10,0x4e,0x48,0xfc,0x48,0x48,0xf8,0x40,0x48,0xfc,0x4,
++0x8,0xff,0x9,0x48,0x48,0x48,0x4b,0x48,0x7d,0x5,0x1d,0xe5,0x45,0x4,0x15,0x8,0x0,0xfc,0x24,0x88,0x70,0x88,0x26,0x24,0xfe,0x24,0x24,0xfc,0x20,0x28,0xfc,0x4,
++0x10,0x10,0x13,0x10,0xfc,0x10,0x14,0x19,0x30,0xd0,0x10,0x10,0x10,0x13,0x50,0x20,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x24,0x45,0x28,0x10,0x28,0x44,0x84,0x3,0xa0,0x2c,0x24,0x24,0xac,0x24,0x24,0xfc,0x20,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x4,0x7e,0x8,0x8,0x3e,0x8,0x8,0x7e,0x2,0x1,0x11,0x50,0x51,0x96,0x18,0x6f,0x8,0xfc,0x20,0x20,0xf8,0x20,0x28,0xfc,0x0,0x20,0x40,0x84,0x2,0xa,0x8,0xf8,
++0x4,0x4,0x7,0x8,0x8,0x1f,0x28,0x48,0x8,0xf,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0xf0,0x20,0x48,0xfc,0x88,0x88,0x88,0xf8,0x8,0x0,0x2,0x2,0xfe,0x0,
++0x20,0x1b,0x8,0x81,0x62,0x20,0x9,0x12,0x24,0xe2,0x22,0x22,0x22,0x22,0x2f,0x20,0x4,0xfe,0x44,0x44,0x44,0x84,0x14,0x8,0x40,0x48,0x7c,0x40,0x40,0x44,0xfe,0x0,
++0x1,0x1,0x3f,0x3,0x5,0x19,0x61,0x9,0x8,0x7e,0x8,0x1c,0x2a,0xc9,0x8,0x8,0x0,0x8,0xfc,0x80,0x60,0x1c,0x8,0x20,0x28,0xfc,0x20,0x70,0xae,0x24,0x20,0x20,
++0x12,0x11,0x17,0x24,0x25,0x64,0xa7,0x20,0x23,0x22,0x22,0x23,0x22,0x22,0x23,0x22,0x8,0x14,0xfe,0x44,0x54,0x44,0xfc,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0xff,0x8,0x20,0x10,0x81,0x49,0x12,0x24,0xe0,0x20,0x20,0x20,0x23,0x2c,0x20,0x24,0xfe,0x20,0x40,0x40,0x48,0x46,0x42,0x48,0x50,0x20,0x40,0x80,0x0,0x0,
++0x0,0x4,0xfe,0x10,0x10,0x20,0x20,0x3d,0x64,0xa4,0x24,0x24,0x24,0x3c,0x23,0xc,0x20,0x20,0x20,0x20,0xa8,0xa6,0xa2,0x20,0x24,0x28,0x10,0x20,0x40,0x80,0x0,0x0,
++0x10,0x8,0x6,0x1,0x2,0xc,0x31,0x1,0xff,0x3,0x5,0x9,0x11,0x61,0x5,0x2,0x10,0x30,0xc0,0x0,0xc0,0x30,0x8,0x0,0xfe,0x80,0x40,0x20,0x1c,0x8,0x0,0x0,
++0x20,0x11,0xa,0x4,0xa,0x11,0x64,0x4,0xff,0x4,0x15,0x14,0x24,0x44,0x14,0x8,0x84,0x84,0x24,0x24,0x24,0xa4,0xa4,0x24,0xe4,0x24,0x24,0x84,0x84,0x4,0x14,0x8,
++0x0,0x20,0x18,0x8,0x81,0x61,0x22,0xa,0x14,0x20,0xe0,0x20,0x20,0x20,0x23,0x2c,0x40,0x40,0x40,0x40,0x50,0x48,0x46,0x42,0x48,0x48,0x50,0x20,0x40,0x80,0x0,0x0,
++0x10,0x10,0x20,0x20,0x49,0xf9,0x12,0x22,0x44,0xf8,0x0,0x0,0x18,0xe0,0x43,0xc,0x40,0x40,0x40,0x40,0x50,0x48,0x46,0x42,0x48,0x48,0x50,0x20,0x40,0x80,0x0,0x0,
++0x10,0x11,0x17,0x25,0x24,0x65,0xa7,0x22,0x25,0x29,0x23,0x24,0x28,0x20,0x23,0x2c,0x80,0x4,0xfe,0x14,0xe4,0x14,0xfc,0x8,0x6,0xfa,0x8,0x90,0x60,0x90,0xe,0x4,
++0x0,0x8,0x7c,0x49,0x4b,0x4c,0x48,0x4f,0x48,0x48,0x4b,0x7a,0x4a,0x2,0x3,0x2,0x40,0x40,0xa0,0x10,0xfe,0x44,0x40,0xfc,0x40,0x48,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x1e,0x24,0x48,0xff,0x1,0x1,0x7f,0x1,0x1,0x7f,0x0,0x44,0x42,0x80,0x20,0x24,0x3e,0x44,0xa4,0x24,0x24,0x28,0x10,0x28,0x46,0x84,0x0,0x88,0x46,0x2,
++0x12,0x1f,0x28,0x45,0x8,0x4b,0x48,0x49,0x49,0x49,0x49,0x49,0x11,0x11,0x20,0x40,0x48,0x7c,0xa0,0x10,0x4,0xfe,0x20,0xfc,0x24,0x24,0x24,0x24,0x34,0x28,0x20,0x20,
++0x0,0x7,0x78,0x48,0x4b,0x4a,0x4a,0x7a,0x4a,0x4a,0x4a,0x4b,0x7a,0x4a,0x3,0x2,0x4,0xfe,0x90,0x94,0xfe,0x94,0x94,0x94,0x94,0x94,0x9c,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x17,0xfc,0x24,0x24,0x24,0xfc,0x2f,0x24,0x24,0x3c,0xe4,0x44,0x5,0x8,0x10,0x4,0xbe,0xa4,0xa4,0xa4,0xa4,0xa4,0xfe,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0x44,0x8c,
++0x8,0x8,0xff,0x8,0x9,0x1,0x1,0x1,0x1,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x20,0x24,0xfe,0x20,0x20,0x8,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0x8,0x8,0xfe,0x8,0x18,0x1c,0x2a,0x2a,0x48,0x88,0x8,0x8,0x8,0x9,0x4,0x8,0x10,0x20,0xc0,0x4,0x8,0x10,0x20,0xc0,0x2,0x4,0x8,0x10,0x60,0x80,
++0x1,0x1,0x1,0x1,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x7f,0x40,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x0,0x7b,0x4a,0x4a,0x4a,0x4a,0x4a,0xff,0x4a,0x4a,0x4a,0x4a,0x4a,0x5a,0x42,0x84,0x44,0xe4,0x44,0x54,0x54,0x54,0x54,0xf4,0x54,0x54,0x54,0x54,0x44,0x44,0x54,0xc8,
++0x10,0x10,0x13,0x16,0x5a,0x53,0x52,0x92,0x13,0x12,0x13,0x2a,0x25,0x44,0x89,0x0,0x40,0x24,0xfe,0x4,0x4,0xfc,0x0,0x44,0xfe,0x44,0x54,0xcc,0x54,0x44,0x54,0x88,
++0x10,0x8,0x8,0xfe,0x2,0x4,0x8,0xa,0x1c,0x2a,0x48,0x8,0x8,0x8,0x8,0x9,0x4,0x8,0x10,0x20,0xc0,0x4,0x8,0x10,0x20,0xc0,0x2,0x4,0x8,0x10,0x60,0x80,
++0x20,0x1b,0x8,0x40,0x41,0x41,0x41,0x41,0x42,0x42,0x44,0x48,0x40,0x40,0x40,0x40,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x84,0x44,0x24,0x24,0x4,0x4,0x14,0x8,
++0x0,0x78,0x48,0x57,0x50,0x62,0x51,0x48,0x4f,0x48,0x68,0x50,0x41,0x42,0x44,0x48,0x40,0x40,0x48,0xfc,0x40,0x48,0x50,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x10,0x17,0x10,0x13,0xfe,0x12,0x16,0x1b,0x30,0xd1,0x11,0x11,0x11,0x11,0x50,0x27,0x40,0xfe,0x0,0xfc,0x94,0xf4,0x94,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,
++0x0,0x7c,0x45,0x57,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x2a,0x44,0x88,0x80,0xfc,0x8,0xfe,0x44,0x92,0xfe,0x0,0x7c,0x0,0x7c,0x0,0x7c,0x44,0x44,0x7c,
++0x2,0x79,0x4f,0x48,0x4b,0x78,0x4f,0x4a,0x49,0x7f,0x48,0x4b,0x4a,0x4a,0x4b,0x9a,0x8,0x10,0xfc,0x40,0xf8,0x40,0xfc,0x48,0x50,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,
++0x8,0x4,0x7f,0x1,0x3f,0x1,0x7f,0x9,0x5,0xff,0x0,0x1f,0x10,0x10,0x1f,0x10,0x20,0x48,0xfc,0x0,0xf8,0x0,0xfc,0x20,0x44,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x0,0x40,0x30,0x10,0x84,0x64,0x24,0xc,0x14,0x24,0xe4,0x24,0x24,0x24,0x27,0x24,0x40,0x40,0x40,0x40,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xfc,0x4,
++0x2,0x1,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x21,0x29,0x25,0x29,0x51,0x85,0x2,0x0,0x8,0xfc,0x8,0x8,0xf8,0x0,0x4,0x7e,0x4,0x24,0x14,0x24,0x44,0x14,0x8,
++0x12,0x11,0x27,0x20,0x4b,0xf8,0x17,0x22,0x41,0xff,0x40,0x3,0x1a,0xe2,0x43,0x2,0x8,0x10,0xfc,0x40,0xf8,0x40,0xfc,0x48,0x50,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x17,0x11,0xfc,0x13,0x12,0x12,0x13,0x12,0x1e,0xf2,0x42,0x2,0x2,0x2,0x40,0x24,0xfe,0x8,0x94,0xfe,0x4,0x94,0xc,0xf4,0x94,0x94,0xf4,0x4,0x14,0x8,
++0x9,0x9,0xa,0x13,0x14,0x38,0x50,0x97,0x10,0x10,0x10,0x11,0x11,0x12,0x14,0x18,0x0,0x0,0x4,0xfe,0x80,0x80,0x88,0xfc,0x88,0x88,0x88,0x8,0x8,0x8,0x50,0x20,
++0x2,0x1,0xff,0x8,0x4,0x3f,0x20,0x24,0x28,0x37,0x24,0x24,0x24,0x27,0x20,0x20,0x0,0x4,0xfe,0x20,0x48,0xfc,0x8,0x48,0x28,0xd8,0x48,0x48,0x48,0xc8,0x28,0x10,
++0x1,0x11,0x9,0x7f,0x40,0x8f,0x8,0xf,0x0,0x1f,0x10,0x11,0x11,0x2,0xc,0x30,0x0,0x10,0x20,0xfe,0x2,0xe4,0x20,0xe0,0x10,0xf8,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x0,0x8,0x7c,0x4b,0x4a,0x4a,0x4a,0x7a,0x4a,0x4a,0x4a,0x4a,0x7a,0x4a,0x2,0x2,0x20,0x40,0x84,0xfe,0x4,0x14,0xfc,0x94,0x94,0x94,0x94,0xf4,0x94,0x4,0x14,0x8,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x1,0x21,0x19,0x9,0x1,0x7f,0x40,0x40,0x4f,0x48,0x48,0x48,0x4f,0x48,0x40,0x40,0x0,0x8,0x18,0x20,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x24,0x14,0x8,
++0x1,0x9,0x5,0x7f,0x40,0x8f,0x8,0xf,0x1,0x7f,0x5,0xc,0x14,0x25,0x46,0x4,0x0,0x20,0x40,0xfe,0x2,0xe4,0x20,0xe0,0x8,0xfc,0x10,0xa0,0x40,0x20,0x1c,0x8,
++0x10,0x11,0x10,0x10,0xfc,0x11,0x31,0x39,0x55,0x55,0x91,0x11,0x11,0x11,0x11,0x11,0x20,0x24,0xa4,0xa8,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x14,0x8,
++0x10,0x11,0x10,0x10,0xfc,0x11,0x15,0x19,0x11,0x31,0xd1,0x11,0x11,0x11,0x51,0x21,0x20,0x24,0xa4,0xa8,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x14,0x8,
++0x8,0x1d,0xf0,0x10,0x10,0xfd,0x11,0x39,0x35,0x51,0x51,0x91,0x11,0x11,0x11,0x11,0x20,0x24,0xa4,0xa8,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x14,0x8,
++0x10,0x10,0x10,0x14,0x5f,0x50,0x50,0x90,0x17,0x10,0x17,0x29,0x25,0x45,0x82,0xc,0x80,0x80,0x88,0xfc,0x80,0x50,0x22,0xd2,0xe,0x8,0xfc,0x20,0x20,0x22,0x22,0x1e,
++0x4,0x4,0xff,0x4,0x10,0x1f,0x10,0x20,0x24,0x43,0x81,0x0,0x0,0x0,0x0,0x0,0x40,0x44,0xfe,0x40,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x50,0x20,
++0x10,0x10,0x10,0x3f,0x20,0x40,0x80,0x4,0x2,0x3,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x10,0x8,0x7f,0x0,0x22,0x14,0xff,0x2,0x3f,0x22,0x22,0x3e,0x22,0x22,0x3e,0x22,0x4,0xfe,0x24,0x24,0x24,0x44,0x54,0x88,0x4,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x1,0x1,0x1,0x9,0x9,0x11,0x11,0x21,0x41,0x1,0x1,0x0,0x1,0x2,0xc,0x70,0x0,0x0,0x0,0x20,0x10,0xc,0x4,0x10,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x0,0x9,0x7c,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0x1,0x1,0x20,0x24,0xa4,0xa8,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x14,0x8,
++0x2,0xff,0x22,0x22,0x22,0x42,0x4a,0x84,0x2,0x7f,0x42,0x42,0x42,0x7e,0x42,0x0,0x0,0xfc,0x84,0x84,0x88,0x88,0x90,0x88,0x84,0x82,0xc2,0xa2,0x94,0x88,0x80,0x80,
++0x10,0x13,0x20,0x20,0x44,0xf9,0x11,0x22,0x44,0xfc,0x1,0x1,0x1d,0xe1,0x41,0x1,0x4,0xfe,0x84,0x84,0x84,0x4,0x4,0x14,0x8,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x2,0x2,0xff,0x4,0xa,0x32,0xcf,0x2,0x7f,0x4,0xf,0x38,0xcf,0x8,0xf,0x8,0x0,0x8,0xfc,0x40,0x20,0x5e,0xe4,0x80,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,
++0x4,0x7e,0x44,0x54,0x55,0x56,0x54,0x54,0x57,0x54,0x54,0x10,0x29,0x26,0x44,0x80,0x20,0x20,0x50,0x88,0x6,0xf8,0x0,0x4,0xfe,0x20,0x20,0xa8,0xa6,0x22,0xa0,0x40,
++0x10,0x10,0x10,0x11,0x7d,0x56,0x54,0x54,0x54,0x7c,0x50,0x14,0x1c,0xe4,0x40,0x0,0x40,0x20,0x20,0xfe,0x2,0x4,0x80,0x88,0x98,0xa0,0xc0,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x0,0x1f,0x1,0x1,0xff,0x1,0x1,0x1,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x20,0xf0,0x0,0x0,0x4,0xfe,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x1,0x1,0x2,0x4,0x8,0x37,0xc1,0x1,0x3f,0x1,0x1,0x1f,0x10,0x10,0x1f,0x10,0x0,0x0,0x80,0x40,0x30,0xce,0x4,0x10,0xf8,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x8,0x8,0xa,0x7f,0x8,0xa,0xff,0x14,0x14,0x56,0x55,0x94,0x14,0x24,0x44,0x8c,0x20,0x20,0x20,0x24,0x7e,0x84,0x44,0x44,0x48,0x28,0x28,0x10,0x28,0x28,0x46,0x84,
++0x10,0x13,0x11,0x11,0xfd,0x11,0x15,0x1b,0x30,0xd7,0x14,0x12,0x11,0x12,0x54,0x28,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x8,0xbc,0xa4,0xa8,0x10,0xa8,0x46,0x4,
++0x8,0x12,0x3f,0x22,0x22,0x3f,0x22,0x3e,0x22,0x22,0xfe,0xa,0x12,0x22,0xca,0x4,0x8,0x8,0x8,0x8,0x8,0xfe,0x8,0x8,0x88,0x48,0x48,0x8,0x8,0x8,0x28,0x10,
++0x10,0x13,0x11,0x59,0x55,0x51,0x91,0x17,0x10,0x17,0x14,0x12,0x11,0x12,0x14,0x18,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x8,0xbc,0xa4,0xa8,0x10,0xa8,0x46,0x4,
++0x0,0x40,0x32,0x12,0x82,0x62,0x2f,0x8,0x10,0x22,0xe2,0x24,0x20,0x20,0x23,0x2c,0x40,0x48,0x7c,0x40,0x40,0x44,0xfe,0x40,0x44,0x44,0x48,0x50,0x20,0xc0,0x0,0x0,
++0x20,0x10,0x10,0x0,0xfc,0xb,0x10,0x38,0x54,0x90,0x10,0x10,0x10,0x17,0x10,0x10,0x40,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,0x0,
++0x1,0x21,0x11,0x11,0x1,0x2,0xf4,0x13,0x11,0x11,0x10,0x10,0x14,0x18,0x13,0xc,0xf0,0x10,0x10,0x10,0x10,0xe,0x0,0xf8,0x8,0x10,0x90,0xa0,0x40,0xb0,0xe,0x4,
++0x0,0x4,0xfe,0x11,0x11,0x21,0x25,0x7f,0xa5,0x25,0x25,0x25,0x3d,0x24,0x0,0x0,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,
++0x1,0x1,0x1,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x21,0x1,0x1,0x1,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,
++0x0,0x0,0x8,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x79,0x49,0x0,0x0,0x0,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,
++0x8,0x8,0x8,0x17,0x14,0x34,0x54,0x97,0x14,0x14,0x14,0x17,0x14,0x10,0x10,0x10,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x44,0x40,0x40,0x40,
++0x1,0x2,0xf,0x8,0xf,0x8,0xf,0x8,0x8,0x7f,0x0,0x0,0x3,0x1c,0xe0,0x0,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf2,0x14,0x18,0xf0,0x50,0x90,0x10,0x10,0x50,0x20,
++0x0,0x47,0x34,0x18,0x81,0x62,0x20,0x8,0x17,0x20,0xe1,0x22,0x2c,0x20,0x20,0x20,0x0,0xfe,0x2,0xa4,0x10,0x48,0x40,0x44,0xfe,0xe0,0x50,0x4e,0x44,0x40,0x40,0x40,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x12,0x2a,0x44,0x88,0x0,0x4,0xfe,0x0,0x8,0x7c,0x0,0x4,0xfe,0x54,0x58,0x50,0x48,0x48,0x56,0x64,0x40,
++0x10,0x10,0x20,0x21,0x45,0xf9,0x11,0x21,0x41,0xfd,0x1,0x1,0x1d,0xe0,0x40,0x0,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,
++0x20,0x10,0x10,0xfd,0x9,0x11,0x39,0x55,0x91,0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,
++0x0,0x40,0x30,0x17,0x84,0x68,0x20,0x9,0x11,0x21,0xe1,0x22,0x22,0x24,0x28,0x30,0x80,0x80,0x80,0xfc,0x84,0x88,0xc0,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x2,0x1,0x7f,0x41,0x81,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x21,0x1,0x1,0x1,0x0,0x0,0xfe,0x2,0x4,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,
++0x10,0x10,0x13,0x12,0xfc,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x44,0x80,0x0,0x40,0x20,0xfe,0x22,0x20,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,
++0x8,0x8,0xff,0x8,0xf,0x8,0xf,0x8,0x8,0xff,0x10,0x12,0x14,0x10,0x1f,0x0,0x20,0x28,0xfc,0x20,0xe0,0x20,0xe0,0x20,0x24,0xfe,0x0,0x20,0x10,0x0,0xf8,0x0,
++0x8,0x4b,0x49,0x48,0x48,0x48,0x49,0x4a,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x0,0xf8,0x10,0xa0,0x40,0xa0,0x10,0xe,0xf4,0x10,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x10,0x10,0x17,0x10,0x5b,0x56,0x53,0x92,0x13,0x12,0x13,0x12,0x1f,0x11,0x12,0x14,0x40,0x48,0xfc,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x10,0xc,0x4,
++0x40,0x31,0x12,0x7,0x80,0x6f,0x21,0xa,0x14,0x29,0xe2,0x20,0x23,0x20,0x21,0x26,0x80,0x20,0x10,0xf8,0x80,0xfc,0x20,0x50,0x8e,0x24,0x40,0x90,0x20,0x40,0x80,0x0,
++0x1,0x1,0xff,0x1,0x7f,0x0,0x3f,0x21,0x21,0x3f,0x20,0x20,0x20,0x40,0x40,0x80,0x0,0x4,0xfe,0x0,0xfc,0x8,0xfc,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x0,0x0,
++0x1,0x11,0x11,0x11,0x3f,0x21,0x41,0x41,0x81,0x3f,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x10,0x11,0x51,0x51,0x7d,0x91,0x11,0x11,0x7c,0x13,0x10,0x10,0x1c,0xf0,0x41,0x2,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x40,0xfc,0x44,0x44,0x84,0x84,0x28,0x10,
++0x8,0x28,0x29,0x29,0x3f,0x4a,0x8c,0xa,0xd,0x38,0xc8,0x8,0x8,0xb,0x8,0x8,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x1,0x7,0x7c,0x4,0x4,0x4,0x4,0xff,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x0,0x20,0xa0,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x10,0x13,0x22,0x22,0x4b,0xf8,0x17,0x24,0x44,0xff,0x44,0x4,0x1f,0xe4,0x40,0x0,0x8,0xfc,0x8,0x8,0xf8,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x40,0x42,0x3e,
++0x1,0x9,0x9,0x11,0x11,0x20,0x3,0xc,0x3f,0xc8,0xf,0x8,0xf,0x8,0xf,0x8,0x0,0x20,0x10,0xc,0x24,0xc0,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,
++0x0,0x0,0x3f,0x20,0x20,0x3e,0x22,0x22,0x4a,0x44,0x80,0x1f,0x12,0x12,0xff,0x0,0xa0,0x90,0xfc,0x80,0x88,0x88,0x50,0x50,0x22,0xd2,0xe,0xf0,0x90,0x94,0xfe,0x0,
++0x3,0x3c,0x4,0xff,0x4,0x15,0x75,0x15,0x75,0xc,0x16,0x25,0x44,0x4,0x4,0x4,0x84,0x4,0x84,0xd4,0x14,0x14,0xd4,0x14,0xd4,0x14,0x14,0x94,0x84,0x4,0x14,0x8,
++0x8,0x7c,0x49,0x49,0x49,0x79,0x4a,0x4c,0x48,0x79,0x48,0x48,0x48,0x48,0x4b,0x98,0x20,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x3f,0x10,0xc,0x2,0x1,0x2,0xc,0x31,0xc1,0x1f,0x1,0x1,0x1,0xff,0x0,0x0,0xf8,0x10,0x60,0x80,0x0,0xc0,0x30,0xe,0x24,0xf0,0x0,0x0,0x4,0xfe,0x0,
++0x8,0xb,0x48,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x11,0x11,0x20,0x40,0x4,0xfe,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x34,0x28,0x20,0x20,
++0x1,0x11,0x11,0x11,0x1f,0x21,0x41,0x1,0xff,0x1,0x2,0x2,0x4,0x8,0x10,0x60,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x80,0x80,0x40,0x30,0xe,0x4,
++0x1,0x89,0x51,0x25,0x55,0x95,0x15,0x15,0x35,0x55,0x95,0x15,0x11,0x12,0x54,0x20,0x4,0xfe,0x10,0x10,0x7c,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x5c,0x10,0x10,
++0x20,0x10,0x14,0xfe,0x21,0x22,0x3d,0x25,0x25,0x27,0x25,0x25,0x25,0x45,0x94,0x8,0x80,0x80,0x84,0xfe,0x20,0x20,0x24,0x3e,0xe4,0x24,0x34,0x28,0x22,0x2,0xfe,0x0,
++0x0,0x47,0x34,0x14,0x87,0x64,0x24,0xf,0x11,0x21,0xe9,0x25,0x23,0x21,0x3f,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x20,0x20,0x24,0x28,0x30,0x24,0xfe,0x0,
++0x0,0x20,0x13,0x10,0x0,0x7,0xf0,0x10,0x17,0x10,0x11,0x10,0x14,0x18,0x10,0x0,0x40,0x48,0xfc,0x40,0x44,0xfe,0x10,0x14,0xfe,0x10,0x10,0x90,0x10,0x10,0x50,0x20,
++0x0,0x3f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x0,0x3,0x7c,0x4,0x3f,0x24,0x24,0x24,0x3f,0x4,0x4,0x7,0x7c,0x20,0x10,0xf8,0x90,0xd0,0x10,0x90,0xd0,0x90,0x90,0x90,0x90,0x10,0x92,0xca,0x46,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0xff,0x2,0x2,0x4,0x4,0x8,0x1f,0x28,0x48,0x88,0x8,0x8,0xf,0x8,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x15,0x1c,0x30,0xd3,0x12,0x12,0x12,0x12,0x53,0x22,0x40,0x40,0xa0,0xa0,0x10,0x8,0xf6,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x4,0x7e,0x44,0x47,0x44,0x44,0x7c,0x44,0x44,0x44,0x44,0x7c,0x44,0x0,0x0,0x8,0x8,0x8,0x8,0xfe,0x8,0x8,0x88,0x48,0x48,0x8,0x8,0x8,0x48,0x28,0x10,
++0x8,0x8,0x8,0x10,0x10,0x30,0x5f,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x1,0x2,0x4,0xa,0x31,0xdf,0x10,0x1f,0x10,0x1f,0x10,0x13,0x10,0x14,0x18,0x10,0x0,0x80,0x40,0x30,0xe,0xf4,0x10,0xf0,0x10,0xf8,0x10,0x20,0xc0,0x30,0x18,0x8,
++0x20,0x20,0x20,0x3d,0x25,0x49,0x41,0xa1,0x21,0x21,0x21,0x24,0x28,0x30,0x23,0x1,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x24,0x3e,0xc2,0x0,
++0x2,0x1,0x7f,0x48,0x86,0x2,0x10,0xc,0x4,0xff,0x1,0x1,0x2,0x4,0x18,0x60,0x0,0x0,0xfe,0x2,0x84,0x80,0x80,0x80,0x84,0xfe,0x0,0x40,0x20,0x10,0xc,0x4,
++0x20,0x13,0x12,0x2,0x2,0xf2,0x12,0x12,0x13,0x12,0x10,0x15,0x19,0x12,0x4,0x8,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x20,0x10,0x8,0x4,0x4,
++0x1,0x1,0x1,0x3f,0x21,0x21,0x21,0x3f,0x21,0x9,0x5,0x2,0x5,0x8,0x30,0xc0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x80,0x60,0x1e,0x4,
++0x10,0x10,0x10,0x1f,0x11,0x21,0x41,0x1,0xff,0x1,0x2,0x2,0x4,0x8,0x10,0x60,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,0x80,0x80,0x40,0x20,0x1c,0x8,
++0x10,0x10,0x1f,0x20,0x27,0x64,0xa4,0x24,0x27,0x24,0x22,0x21,0x20,0x21,0x26,0x28,0x40,0x44,0xfe,0x40,0xfc,0x44,0x44,0x44,0xfc,0x44,0x40,0x80,0xc0,0x30,0xe,0x4,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x24,0x22,0x3f,0x20,0x21,0x22,0x44,0x48,0x90,0x0,0x4,0xfe,0x4,0x4,0xfc,0x84,0x90,0xa4,0xfe,0x80,0xc0,0xa0,0x90,0x8e,0x84,0x80,
++0x8,0xfc,0x8,0x49,0x49,0x49,0x49,0x49,0x7d,0x4,0x4,0x1c,0xe4,0x44,0x15,0xa,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x20,0xa0,0x40,0x60,0x90,0xe,0x4,
++0x10,0x10,0x10,0x10,0xfc,0x25,0x27,0x24,0x24,0x49,0x29,0x11,0x29,0x45,0x85,0x1,0x40,0x40,0x40,0x80,0x88,0x4,0xfe,0x2,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x3e,0x8,0x8,0x8,0x9,0xe,0x70,0x20,0x0,0x80,0xa0,0x90,0x84,0xfe,0x80,0x80,0x80,0x80,0x40,0x40,0x20,0x22,0x12,0xa,0x4,
++0x0,0x3f,0x0,0x0,0x0,0x0,0xff,0x1,0x1,0x9,0x19,0x21,0x41,0x1,0x5,0x2,0x10,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x20,0x18,0xc,0x4,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,
++0x1,0x11,0x11,0x11,0x11,0xff,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x1f,0x0,0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0xf0,0x10,0x0,0x8,0xfc,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x10,0x10,0x40,0x20,0x4,0xfe,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x34,0x28,0x20,0x20,
++0x1,0x1,0xff,0x1,0x3f,0x21,0x3f,0x1,0x3f,0x1,0xff,0x1,0x3f,0x1,0x5,0x2,0x0,0x4,0xfe,0x0,0xf8,0x8,0xf8,0x0,0xf8,0x8,0xfe,0x8,0xf8,0x8,0x0,0x0,
++0x10,0x10,0x10,0x10,0xff,0x10,0x14,0x1b,0x31,0xd1,0x11,0x11,0x11,0x17,0x52,0x20,0x20,0x28,0x24,0x20,0xfe,0x20,0x20,0xe0,0x20,0x10,0x10,0x10,0xd2,0x12,0xa,0x4,
++0x8,0x7e,0x8,0x1c,0x68,0xa,0x19,0xff,0x0,0x3f,0x0,0x3f,0x0,0x1f,0x10,0x1f,0x8,0xf0,0x80,0xfc,0x90,0x90,0x14,0xfe,0x0,0xf8,0x0,0xf8,0x0,0xf0,0x10,0xf0,
++0x2,0x42,0x22,0x2f,0x2,0x2,0xe3,0x26,0x2a,0x22,0x22,0x2b,0x24,0x50,0x8f,0x0,0x4,0x78,0x40,0xc0,0x40,0x7e,0x48,0x48,0x48,0x48,0x88,0x8,0x8,0x6,0xfc,0x0,
++0x8,0x8,0x7d,0x8,0x1c,0xe9,0x8,0x29,0x12,0x2,0x7f,0x2,0x4,0x8,0x10,0x60,0x40,0x48,0xfc,0x48,0x48,0x88,0xca,0x2a,0x6,0x0,0xf8,0x8,0x8,0x88,0x50,0x20,
++0xf,0x8,0x8,0xf,0x8,0x8,0xf,0x0,0xff,0x1,0x9,0x9,0x9,0x15,0x23,0x40,0xe0,0x20,0x20,0xe0,0x20,0x20,0xe0,0x4,0xfe,0x0,0x20,0xf0,0x0,0x0,0x6,0xfc,
++0x0,0x0,0x7b,0x48,0x4f,0x48,0x49,0x4a,0x4c,0x48,0x4b,0x7a,0x4b,0x2,0x3,0x2,0x80,0x88,0xf0,0xa4,0xfe,0x80,0xf0,0x82,0x7e,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x2,0x2,0x7b,0x4d,0x48,0x48,0x4f,0x48,0x4a,0x4a,0x4a,0x7d,0x48,0x0,0xf,0x0,0x10,0x10,0xde,0x28,0x84,0x0,0xfc,0x40,0x48,0x48,0x48,0x54,0xe2,0x40,0xfe,0x0,
++0x0,0x47,0x30,0x10,0xf,0x0,0xf0,0x13,0x12,0x12,0x12,0x13,0x12,0x28,0x47,0x0,0x38,0xc0,0x40,0x44,0xfe,0x40,0x48,0xfc,0x8,0x8,0x8,0xf8,0x8,0x6,0xfc,0x0,
++0x8,0x8,0x8,0x10,0x10,0x3f,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x17,0x10,0x10,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x48,0xfc,0x0,0x0,
++0x8,0x8,0x8,0x17,0x10,0x30,0x5f,0x90,0x10,0x17,0x10,0x12,0x11,0x11,0x10,0x10,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x10,0x10,0xfc,0x10,0x10,0x10,0x10,0x50,0x20,
++0x4,0xf9,0x10,0x54,0x38,0x10,0xfe,0x13,0x30,0x39,0x54,0x50,0x93,0x10,0x10,0x10,0x0,0xfc,0x88,0x50,0x20,0x50,0x8e,0x24,0x20,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,
++0x20,0x20,0x20,0x3c,0x25,0x4a,0x41,0xa1,0x21,0x21,0x21,0x25,0x29,0x31,0x20,0x0,0x80,0x80,0x84,0xfe,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x34,0x28,0x20,0x20,
++0x0,0x20,0x3f,0x21,0x21,0x21,0x21,0x3f,0x20,0x20,0x20,0x24,0x28,0x30,0x60,0x0,0x20,0xf0,0x0,0x0,0x0,0x0,0x8,0xfc,0x80,0x80,0x40,0x40,0x22,0x12,0xa,0x6,
++0x2,0x1,0x0,0xff,0x1,0x1,0x3f,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x1,0x1,0x0,0x0,0x4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x28,0x10,0x0,0x0,
++0x10,0x10,0x10,0x13,0x58,0x54,0x57,0x90,0x10,0x17,0x10,0x12,0x11,0x11,0x10,0x10,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x10,0x10,0xfc,0x10,0x10,0x10,0x10,0x50,0x20,
++0x2,0x1,0x7f,0x40,0x80,0x3f,0x4,0x8,0x1f,0x1,0x1,0x1f,0x1,0x1,0x7f,0x0,0x0,0x0,0xfe,0x2,0x14,0xf8,0x0,0x20,0xf0,0x10,0x0,0xf0,0x0,0x8,0xfc,0x0,
++0x20,0x13,0x12,0x2,0xfe,0xa,0x12,0x32,0x5a,0x96,0x12,0x10,0x11,0x11,0x12,0x14,0x8,0xfc,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0x68,0xa8,0xa0,0x22,0x22,0x1e,0x0,
++0x0,0x40,0x20,0x20,0xf,0x0,0xe0,0x27,0x21,0x21,0x21,0x21,0x29,0x37,0x22,0x0,0x20,0x28,0x24,0x20,0xfe,0x20,0x20,0xe0,0x20,0x10,0x10,0x10,0xd2,0x12,0xa,0x4,
++0x8,0x8,0x8,0x48,0x48,0x49,0x49,0x4a,0x48,0x58,0x68,0x48,0x8,0x8,0x9,0xe,0x80,0x80,0x80,0x84,0xfe,0x8,0x88,0x88,0x88,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x0,0x0,0x7f,0x1,0x1,0x3f,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x5,0x2,0x10,0xf8,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x4,0xff,0x1,0x2,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x20,0x44,0xfe,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x2,0x1,0x7f,0x40,0x80,0x0,0x0,0x7f,0x0,0x8,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x2,0x24,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x2,0x2,0x7f,0x2,0x3f,0x4,0xff,0x8,0x8,0x17,0x10,0x22,0x41,0x81,0x0,0x0,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x50,0x20,
++0x10,0x13,0x10,0x11,0xfc,0x13,0x12,0x1c,0x31,0xd1,0x10,0x10,0x10,0x10,0x51,0x26,0xc,0xf0,0x0,0x24,0xa8,0xfe,0x2,0x4,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x9,0x8,0xf,0x10,0x3f,0x50,0x9f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x88,0xfc,0x80,0xf8,0x80,0xf8,0x80,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x3f,0x11,0x9,0x9,0x7f,0x40,0x80,0x1f,0x8,0x4,0x2,0x1,0x6,0x18,0x60,0x78,0x80,0x10,0x10,0x20,0xfe,0x2,0x4,0xf0,0x20,0x40,0x80,0x0,0xc0,0x3c,0x8,
++0x1,0x0,0x3f,0x22,0xac,0x68,0x2e,0x28,0x2f,0x60,0xaf,0x22,0x21,0x40,0x83,0x1c,0x0,0x88,0xfc,0x80,0xb8,0x88,0xb8,0x88,0xf8,0x80,0xf0,0x20,0x40,0x80,0x60,0x1c,
++0x8,0x4,0x3f,0x21,0x3f,0x21,0x3f,0x0,0xff,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x20,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x4,0x4,0xff,0x4,0x0,0xfd,0x8,0x10,0x51,0x5c,0x50,0x50,0x5e,0xf0,0x41,0x2,0x40,0x44,0xfe,0x40,0x24,0xfe,0x40,0x88,0xfc,0x0,0xa8,0xa8,0xaa,0xaa,0x26,0x0,
++0x10,0x13,0x12,0x12,0xfe,0x12,0x32,0x3a,0x56,0x52,0x92,0x12,0x12,0x12,0x13,0x10,0x8,0xfc,0x0,0x8,0x88,0x50,0x50,0x20,0x20,0x50,0x48,0x88,0x0,0x4,0xfe,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x30,0x39,0x54,0x50,0x90,0x10,0x10,0x11,0x12,0x14,0x40,0x20,0x24,0xfe,0x20,0x40,0x88,0xfc,0x0,0xa8,0xa8,0xa8,0xaa,0x2a,0x26,0x20,
++0x0,0xa,0xfe,0x23,0x22,0x3c,0x48,0x4f,0x48,0xb0,0x11,0x22,0x44,0x88,0x0,0x0,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0xc0,0xe0,0x50,0x4e,0x44,0x40,0x40,0x40,
++0x10,0x13,0x10,0x10,0xfc,0x10,0x17,0x18,0x30,0xd0,0x10,0x10,0x10,0x10,0x51,0x20,0x0,0xf8,0x10,0xa0,0x40,0x40,0xfe,0x42,0x44,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x20,0x20,0x28,0xfd,0x22,0x45,0x50,0x93,0xfa,0x13,0x3a,0xd3,0x12,0x12,0x12,0x12,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x0,0xc4,0x54,0xd4,0x54,0xd4,0x54,0x44,0x44,0xcc,
++0x8,0xa,0xf,0x8,0x8,0xa,0xff,0x8,0x8,0x2c,0x2b,0x49,0x48,0x88,0x29,0x12,0x0,0x0,0x0,0xfc,0x84,0x84,0x48,0x48,0x48,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x8,0x8,0x14,0x22,0x41,0xbe,0x9,0x8,0x7f,0xa,0x3f,0x22,0x22,0x22,0x3e,0x22,0x0,0xfc,0x4,0x48,0x28,0x10,0xfe,0x12,0x14,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
++0x2,0x42,0x33,0x12,0x82,0x62,0x2f,0xa,0x12,0x27,0xea,0x32,0x22,0x2a,0x24,0x21,0x0,0x0,0x80,0x7c,0x44,0x44,0xc4,0x44,0x28,0x28,0x90,0x10,0x28,0x46,0x84,0x0,
++0x0,0x0,0x3c,0xb,0x10,0x10,0x10,0x5d,0x50,0x50,0x50,0x50,0x5c,0xf1,0x42,0x4,0x40,0x20,0x24,0xfe,0x20,0x40,0x88,0xfc,0x0,0xa8,0xa8,0xa8,0xaa,0x2a,0x26,0x20,
++0x2,0x2,0x2,0x7f,0x2,0x2,0x2,0x2,0xff,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x10,0xc,0xe4,0x20,0x20,0x20,0x20,0xfc,0x4,0x4,0x4,0x4,0x28,0x10,0x0,
++0x4,0x7e,0x45,0x54,0x54,0x57,0x54,0x54,0x55,0x54,0x54,0x55,0x28,0x24,0x44,0x83,0x20,0x28,0xfc,0x20,0x20,0xfe,0x82,0x54,0x10,0x90,0x14,0xfe,0x20,0x50,0x8c,0x4,
++0x10,0xa,0xff,0x0,0x7f,0x42,0x7e,0x0,0x7e,0x4,0x8,0x1e,0xe8,0x9,0x2a,0x14,0x40,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0xc8,0x68,0x58,0x88,0x89,0x9,0x3,0x0,
++0x8,0xff,0x0,0x7e,0x42,0x7e,0x0,0x7e,0x4,0x8,0x7c,0x9,0x1a,0x44,0x42,0x82,0x40,0x40,0x48,0xfc,0x48,0x48,0xc8,0x48,0xa8,0x8a,0x8a,0x6,0x0,0x88,0x46,0x42,
++0x4,0xff,0x4,0x3f,0x24,0x3f,0x2,0x3f,0x2,0xff,0xc,0x1f,0x30,0xdf,0x10,0x1f,0x44,0xfe,0x40,0xf8,0x48,0xf8,0x20,0xf0,0x84,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,
++0x1f,0x10,0x1f,0x10,0x1f,0x2,0x3f,0x2,0xff,0x4,0xf,0x38,0xcf,0x8,0xf,0x8,0xf0,0x10,0xf0,0x14,0xf8,0x20,0xf0,0x84,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x0,0xb,0x7e,0x4a,0x4b,0x48,0x4b,0x78,0x4f,0x48,0x49,0x49,0x7b,0x4d,0x1,0x1,0x4,0xfe,0x94,0x94,0xfc,0x48,0xfc,0x50,0xfe,0x40,0xfc,0x4,0xfc,0x4,0xfc,0x4,
++0x3f,0x24,0x24,0x3f,0x2,0x3f,0x2,0xff,0x3,0xc,0x3f,0xc8,0xf,0x8,0xf,0x8,0xf8,0x48,0x48,0xf8,0x20,0xf0,0x44,0xfe,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x0,0x3f,0x24,0x24,0x3f,0x10,0x3f,0x42,0xbf,0x22,0x22,0x3f,0x2,0x3,0x7e,0x20,0x8,0xfc,0x48,0x48,0xf8,0x4,0xfe,0x4,0xe4,0x24,0x24,0xe4,0x24,0xf4,0x14,0x8,
++0x0,0x3f,0x1,0xff,0x5,0x9,0x32,0x4,0x9,0x39,0xc5,0x3,0xd,0x31,0x5,0x2,0xf0,0x0,0x4,0xfe,0x40,0x30,0x90,0x40,0x30,0x2e,0x44,0x80,0x60,0x18,0x8,0x0,
++0xc,0x71,0x40,0x7c,0x40,0x7f,0x2,0x52,0x4a,0x42,0x52,0x4a,0x42,0x73,0xc6,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0x90,0x50,0x10,0x90,0x50,0x10,0x8a,0xa,0x6,
++0x3f,0x20,0x3f,0x20,0x2f,0x20,0x2f,0x28,0x2f,0x20,0x3f,0x50,0x50,0x57,0x90,0x10,0xf8,0x8,0xf8,0x0,0xf8,0x80,0xf8,0x88,0xf8,0x84,0xfe,0x84,0x94,0xf4,0x14,0x8,
++0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x3,0x5,0x9,0x11,0x21,0xc1,0x1,0x1,0x1,0x0,0x40,0x30,0x10,0x4,0xfe,0x0,0x80,0x40,0x20,0x10,0xe,0x4,0x0,0x0,0x0,
++0x0,0x40,0x20,0x20,0xf,0x0,0xe1,0x22,0x24,0x28,0x20,0x20,0x20,0x50,0x8f,0x0,0x80,0xa0,0x90,0x80,0xfc,0x80,0xc0,0xa0,0x98,0x88,0x80,0x80,0x80,0x6,0xfc,0x0,
++0x10,0x10,0x10,0x17,0xfc,0x14,0x32,0x3a,0x51,0x51,0x92,0x12,0x14,0x18,0x10,0x10,0x8,0x8,0x8,0xc8,0x7e,0x48,0x88,0xa8,0x18,0x8,0x88,0x48,0x48,0x8,0x28,0x10,
++0x1,0x1,0xff,0x1,0x1,0x3f,0x21,0x21,0x21,0x3f,0x23,0x5,0x9,0x31,0xc1,0x1,0x0,0x4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x88,0x40,0x30,0xe,0x4,0x0,
++0x0,0x0,0x0,0x3f,0x20,0x20,0x20,0x28,0x26,0x22,0x20,0x20,0x20,0x21,0x42,0x84,0x80,0xa0,0x90,0xfc,0x80,0x80,0x88,0x48,0x50,0x50,0x20,0x60,0x90,0x12,0xa,0x6,
++0x4,0x25,0x25,0x24,0x24,0x24,0x24,0x24,0x7,0x1,0x3f,0x8,0x8,0x4,0xff,0x0,0x0,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0x4,0x10,0xf8,0x20,0x20,0x44,0xfe,0x0,
++0x7f,0x49,0x7f,0x49,0x7f,0x8,0x7f,0x8,0xf,0x79,0x1,0x3f,0x1,0x1,0xff,0x0,0x7c,0x4,0x28,0x10,0xfe,0x12,0x14,0x10,0x50,0x20,0x0,0xf8,0x0,0x4,0xfe,0x0,
++0x1,0x0,0x3f,0x20,0x22,0x22,0x3f,0x22,0x22,0x22,0x23,0x22,0x40,0x4a,0x89,0x11,0x0,0x84,0xfe,0x0,0x20,0x24,0xfe,0x20,0x20,0x20,0xe0,0x20,0x0,0x48,0x26,0x22,
++0x8,0x49,0x2a,0x8,0xff,0x19,0x2c,0x4a,0x10,0xfe,0x22,0x22,0x14,0x18,0x25,0x42,0x40,0x40,0x40,0x84,0xfe,0x8,0x88,0x88,0x88,0x90,0x50,0x20,0x50,0x88,0xe,0x4,
++0x2,0x42,0x3f,0x22,0x82,0x4f,0x4a,0xa,0x1f,0x22,0xe7,0x2a,0x32,0x22,0x22,0x23,0x10,0x90,0xd0,0x10,0xbe,0xc2,0x94,0x90,0x90,0x10,0x10,0xa8,0x28,0x48,0x86,0x4,
++0x10,0x10,0x10,0xfe,0x22,0x22,0x14,0x8,0x14,0x62,0x0,0x2a,0x29,0x28,0x48,0x7,0x0,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0xf8,0x88,0x0,0x10,0x88,0xa4,0x24,0xe0,
++0x0,0x3f,0x20,0x20,0x3f,0x22,0x22,0x3f,0x32,0x32,0x52,0x52,0x53,0x92,0x2,0x2,0x44,0xe4,0x44,0x54,0xd4,0x14,0x54,0xf4,0x54,0x54,0x54,0x54,0x44,0x84,0x14,0x8,
++0x0,0x7f,0x2,0x3f,0x24,0x24,0x24,0x22,0x2,0xff,0x4,0x8,0x4,0x3,0xc,0x30,0x8,0xfc,0x0,0xf8,0x48,0x48,0x48,0x18,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x10,0x10,0x13,0x10,0xfc,0x12,0x15,0x1a,0x30,0xd0,0x17,0x10,0x10,0x10,0x50,0x20,0x40,0x24,0xfe,0x20,0x48,0xf2,0x24,0x52,0xf8,0x20,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x2,0x1,0x7f,0x0,0x1f,0x10,0xff,0x10,0x1f,0x4,0x9,0x18,0x28,0x4a,0x8c,0x8,0x0,0x8,0xfc,0x0,0xf0,0x14,0xfe,0x10,0xf0,0x8,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x0,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x21,0x41,0x80,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x28,0x12,0x2,0xfe,
++0x8,0x8,0x48,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x9,0x11,0x11,0x20,0x40,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x34,0x28,0x20,0x20,
++0x10,0x10,0x10,0x11,0xfe,0x14,0x33,0x38,0x54,0x50,0x97,0x10,0x10,0x10,0x1f,0x10,0x40,0x40,0xa0,0x10,0xe,0x4,0xf8,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x10,0x11,0xfe,0x14,0x13,0x1c,0x30,0xd0,0x17,0x10,0x10,0x10,0x5f,0x20,0x40,0x40,0xa0,0x10,0xe,0x4,0xf8,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x1f,0x1,0x7f,0x41,0x9d,0x1,0x1d,0x8,0x8,0x7e,0x8,0x1c,0x2a,0x48,0x8,0x8,0xf0,0x0,0xfe,0x2,0x74,0x0,0x70,0x4,0xfe,0x84,0xfc,0x84,0xfc,0x84,0xfc,0x84,
++0x0,0x0,0xfd,0x4,0x44,0x44,0x28,0x28,0x10,0x10,0x28,0x28,0x44,0x44,0x81,0x6,0x0,0x4,0xfe,0x84,0x84,0x84,0x88,0x48,0x48,0x50,0x20,0x30,0x50,0x88,0xe,0x4,
++0x1,0x1,0xff,0x1,0x29,0x11,0x29,0x1,0x29,0x11,0x29,0x2,0x4,0x8,0x30,0xc0,0x0,0x4,0xfe,0x0,0x28,0x10,0x28,0x0,0x28,0x10,0x28,0x80,0x40,0x30,0xe,0x4,
++0x0,0x20,0x11,0x11,0x3,0x5,0xf1,0x11,0x11,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x80,0xa0,0x14,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x10,0x14,0xfe,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x7d,0x5,0x5,0x9,0x9,0x11,0x21,0x41,0x81,0x5,0x2,0x0,0x0,0x0,0x8,0x18,0x20,0xc0,0x80,0x40,0x20,0x10,0xe,0x4,0x0,0x0,0x0,
++0x0,0x8,0x7b,0x48,0x48,0x4f,0x79,0x49,0x4f,0x79,0x49,0x49,0x4f,0x78,0x48,0x3,0x0,0x18,0xe0,0x40,0x48,0xfc,0x50,0x54,0xfe,0x50,0x50,0x50,0xfc,0x40,0x50,0xf8,
++0x8,0x1d,0xf0,0x10,0x11,0xfd,0x11,0x39,0x35,0x51,0x90,0x10,0x10,0x10,0x11,0x12,0x0,0x4,0x88,0x50,0xfc,0x4,0x4,0x4,0xfc,0x54,0x50,0x50,0x92,0x92,0xe,0x0,
++0x0,0x8,0x7c,0x48,0x49,0x4b,0x48,0x48,0x48,0x48,0x49,0x79,0x4a,0x2,0x4,0x8,0x40,0x40,0x80,0x80,0x8,0xfc,0x94,0x90,0x90,0x90,0x10,0x10,0x12,0x12,0xe,0x0,
++0x0,0x8,0x7f,0x49,0x48,0x4b,0x7a,0x4d,0x49,0x7a,0x4d,0x48,0x48,0x79,0x4a,0x0,0x8,0x3c,0xc0,0x24,0xa8,0xfe,0x2,0x4,0xde,0x44,0x54,0x94,0xbe,0x4,0x4,0x4,
++0x0,0x47,0x54,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x44,0x84,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x20,0x58,0x84,0x2,
++0x0,0x3f,0x11,0x9,0x7f,0x48,0x88,0x1e,0x12,0x22,0x54,0xd,0x8,0x10,0x20,0x40,0x78,0x80,0x10,0x20,0xfe,0x22,0x24,0xf8,0x20,0xa0,0xa8,0xfc,0x20,0x20,0x20,0x20,
++0x0,0x22,0x11,0x10,0x3,0x2,0xf2,0x12,0x13,0x12,0x10,0x10,0x15,0x19,0x12,0x4,0x0,0x8,0x10,0xa0,0xf8,0x8,0x8,0x8,0xf8,0xa8,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x8,0xfd,0x10,0x10,0x21,0x25,0x3f,0x65,0xa5,0x25,0x25,0x25,0x3c,0x24,0x0,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x20,0x58,0x84,0x2,
++0x41,0x22,0x14,0xff,0x8,0x49,0x49,0x49,0x49,0x49,0x7f,0x9,0x8,0x10,0x21,0x42,0x4,0x7e,0x44,0xc4,0x44,0x7c,0x44,0x44,0x44,0x7c,0x44,0x44,0x84,0x84,0x14,0x8,
++0x10,0x10,0x13,0x16,0x5a,0x52,0x52,0x93,0x10,0x10,0x10,0x29,0x26,0x44,0x80,0x0,0x8,0x1c,0xe0,0x0,0x20,0x20,0x24,0xfe,0x20,0x20,0xa8,0x24,0x22,0x22,0xa0,0x40,
++0x22,0x22,0x7f,0x22,0x22,0x3e,0x22,0x22,0x3e,0x22,0x22,0xff,0x0,0x15,0x22,0x40,0x8,0x1c,0x60,0x40,0x40,0x40,0x7e,0x48,0x48,0x48,0x48,0x48,0x88,0x8,0x8,0x8,
++0x24,0x24,0x2f,0x24,0xfc,0x27,0x2c,0x34,0x27,0xe4,0x24,0x3f,0x20,0x24,0xa8,0x40,0x80,0x8c,0xf0,0xa0,0xa0,0xa4,0xbe,0xa8,0xa8,0xa8,0xa8,0xe8,0x28,0xa8,0x48,0x8,
++0x4,0x14,0x7f,0x54,0x54,0x57,0x54,0x54,0x57,0x54,0x54,0x7f,0x50,0x4,0x8,0x0,0x80,0x8c,0xf0,0xa0,0xa0,0xa4,0xbe,0xa8,0xa8,0xa8,0xa8,0xe8,0x28,0xa8,0x48,0x8,
++0x0,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x20,0x2,0x51,0x50,0x90,0xf,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x0,0x88,0x96,0x12,0xf0,
++0x4,0xe,0xf8,0x8,0xa,0xff,0x8,0x1c,0x1a,0x28,0x48,0x89,0x9,0xb,0x8,0x8,0x20,0x20,0x20,0x20,0x40,0x40,0x40,0x40,0x80,0x80,0x80,0x8,0x4,0xfe,0x2,0x0,
++0x0,0x3f,0x0,0x0,0xff,0x0,0x0,0x3f,0x20,0x20,0x20,0x20,0x3f,0x20,0x0,0x0,0x8,0xfc,0x8,0x48,0xe8,0x8,0x88,0xc8,0x88,0x88,0x88,0x88,0x88,0x88,0x28,0x10,
++0x8,0x8,0x8,0x10,0x10,0x22,0x7e,0x4,0x8,0x10,0x20,0x7e,0x0,0x0,0xff,0x0,0x10,0x10,0x10,0x20,0x20,0x44,0xfc,0x8,0x10,0x20,0x40,0xfc,0x0,0x4,0xfe,0x0,
++0x0,0xff,0x8,0x8,0x10,0x1f,0x21,0x21,0x62,0x92,0xc,0x4,0x8,0x10,0x20,0x40,0x4,0xfe,0x40,0x40,0x40,0x44,0x4c,0x50,0x60,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x4,0x3e,0x21,0x24,0x3f,0x20,0x25,0x3e,0x20,0x21,0xff,0x10,0x25,0x7e,0x2,0x0,0x20,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,
++0x1,0x1,0x7f,0x1,0x1,0x1,0xff,0x0,0x0,0x7f,0x8,0x4,0x4,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x2,0x3f,0x22,0x22,0x3e,0x0,0x7f,0x55,0x55,0x55,0x7f,0x55,0x55,0x55,0x55,0x43,0x4,0x7e,0x4,0x4,0xfc,0x4,0x74,0x54,0x54,0x54,0x54,0x54,0x74,0x4,0x14,0x8,
++0x0,0x0,0x7f,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x48,0x50,0x40,0x7f,0x40,0x0,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x3c,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x8,0xb,0x8,0x10,0x17,0x30,0x50,0x93,0x12,0x12,0x12,0x12,0x13,0x12,0x10,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0xe4,0x4,0x14,0x8,
++0x10,0x11,0x10,0x20,0x24,0x64,0xa4,0x24,0x24,0x24,0x24,0x25,0x26,0x24,0x20,0x21,0x0,0x8,0x88,0x48,0x48,0x8,0x8,0x8,0x8,0x10,0x90,0x20,0x28,0x46,0x82,0x0,
++0x20,0x23,0x20,0x3c,0x27,0x48,0x40,0xa3,0x22,0x22,0x22,0x26,0x2b,0x32,0x20,0x0,0x4,0xfe,0x4,0x24,0xf4,0x4,0x4,0xf4,0x24,0x24,0x24,0x24,0xe4,0x4,0x14,0x8,
++0x0,0x7f,0x40,0x40,0x40,0x40,0x7f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x3f,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x11,0x39,0x36,0x54,0x50,0x90,0x10,0x11,0x13,0x10,0x10,0x10,0x90,0x90,0x90,0x8,0x8,0x4,0x42,0x40,0x40,0x80,0x88,0x4,0xfc,0x4,0x0,
++0x8,0x8,0x18,0x24,0x43,0x82,0x7f,0x10,0x1f,0x10,0x1f,0x10,0x10,0xff,0x0,0x0,0x20,0x20,0x50,0x88,0x6,0x0,0xfc,0x10,0xf0,0x10,0xf0,0x14,0xfe,0x10,0x10,0x10,
++0x8,0x8,0x8,0x8,0x14,0x14,0x22,0x22,0x41,0x80,0x2a,0x29,0x28,0x48,0x7,0x0,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x8e,0x4,0x0,0x10,0x88,0xa4,0x24,0xe0,0x0,
++0x0,0x2b,0x28,0x28,0x45,0x53,0x91,0x11,0x21,0x21,0x29,0x45,0x7c,0x4,0x0,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x20,0x58,0x84,0x2,
++0x2,0x41,0x30,0x17,0x0,0x0,0xf0,0x1f,0x10,0x10,0x10,0x10,0x11,0x2a,0x44,0x3,0x8,0x10,0xa0,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0x80,0xa0,0x18,0x8,0x6,0xfc,
++0x2,0x1,0x7f,0x40,0x81,0x1,0x1,0xff,0x3,0x5,0x9,0x11,0x21,0x41,0x1,0x1,0x0,0x0,0xfe,0x2,0x4,0x0,0x4,0xfe,0x80,0x40,0x30,0xe,0x4,0x0,0x0,0x0,
++0x0,0x40,0x31,0x11,0x1,0x2,0xf2,0x14,0x18,0x10,0x10,0x10,0x15,0x1b,0x10,0x0,0x40,0x20,0x20,0x20,0x10,0x8,0xe,0x44,0x40,0x40,0x80,0x90,0x8,0xf8,0x8,0x0,
++0x0,0x47,0x20,0x20,0x0,0x7,0xe4,0x24,0x27,0x24,0x24,0x27,0x2c,0x34,0x24,0x4,0x0,0xf8,0x10,0xa0,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x54,0x48,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x15,0x19,0x30,0xd3,0x10,0x10,0x10,0x10,0x50,0x23,0x24,0xae,0x24,0x24,0xac,0x24,0x24,0xfc,0x20,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x8,0x10,0x3d,0x25,0x35,0x2d,0x25,0x25,0xfc,0x27,0x34,0x2c,0x44,0x44,0x94,0xb,0x24,0xae,0x24,0x24,0xac,0x24,0x24,0xfc,0x20,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x22,0x2a,0x27,0x22,0xff,0x22,0x37,0x2a,0x62,0xbf,0x24,0x28,0x25,0x22,0xa5,0x48,0x10,0x90,0x10,0x14,0xbe,0x44,0x24,0xa4,0x28,0xe8,0x90,0x90,0x28,0x28,0x46,0x84,
++0x2,0x22,0xff,0xa2,0xa2,0xaf,0xaa,0xaa,0xaf,0xa2,0xa7,0xea,0x92,0x2,0x2,0x3,0x10,0x90,0xd0,0x10,0xbe,0xc2,0x94,0x90,0x90,0x10,0x10,0xa8,0x28,0x48,0x86,0x4,
++0x8,0x8,0xff,0x8,0xa,0x2,0x3f,0x2,0x2,0x22,0x24,0x44,0x8,0x10,0x20,0x40,0x20,0x24,0xfe,0x20,0x20,0x10,0xf8,0x10,0x10,0x18,0x16,0x12,0x10,0x10,0x50,0x20,
++0x4,0xfe,0x29,0x28,0xfe,0xaa,0xab,0xaa,0xae,0xc2,0x82,0xff,0x82,0xfe,0x82,0x0,0x8,0x1c,0xe0,0x20,0x20,0x24,0xfe,0x20,0x70,0x68,0xae,0x24,0x20,0x20,0x20,0x20,
++0x10,0x11,0x11,0x22,0x24,0x60,0xa1,0x22,0x24,0x2b,0x22,0x22,0x22,0x22,0x23,0x22,0x0,0x10,0xc,0x44,0x40,0xa0,0x10,0xe,0x4,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x1,0x1,0x7f,0x1,0x3f,0x1,0xff,0x4,0x1f,0x1,0x2,0x1f,0x1,0x9,0x15,0x22,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x20,0xc0,0x0,0x20,0xf0,0x0,0x20,0x18,0x8,
++0x0,0x40,0x37,0x10,0x7,0x4,0xf4,0x17,0x14,0x10,0x11,0x12,0x14,0x28,0x47,0x0,0x40,0x44,0xfe,0x40,0xfc,0x44,0x44,0xfc,0x44,0xe0,0x58,0x48,0x40,0x46,0xfc,0x0,
++0x0,0x7f,0x4,0x3f,0x24,0x24,0x3f,0x1,0x11,0x9,0xff,0x5,0x9,0x31,0xc1,0x1,0x8,0xfc,0x40,0xf8,0x48,0x48,0xf8,0x0,0x10,0x24,0xfe,0x40,0x30,0xe,0x4,0x0,
++0x10,0x1f,0x10,0x27,0x24,0x64,0xa7,0x20,0x22,0x21,0x2f,0x21,0x22,0x24,0x28,0x20,0x4,0xfe,0xa0,0xfc,0xa4,0xa4,0xfc,0x40,0x48,0x50,0xfe,0x50,0x48,0x46,0x44,0x40,
++0x22,0x14,0xff,0x8,0x2a,0x2a,0x2a,0x3e,0x8,0x11,0x21,0x7f,0x1,0x1,0xff,0x0,0x4,0x7e,0xc4,0x7c,0x44,0x7c,0x44,0x44,0x94,0x8,0x0,0xfc,0x0,0x4,0xfe,0x0,
++0x48,0x25,0x20,0x1f,0x82,0x4a,0x4a,0xa,0x1a,0x2a,0xef,0x22,0x22,0x24,0x28,0x21,0x84,0x3e,0x24,0xe4,0x24,0xbc,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0x44,0x44,0x94,0x8,
++0x2,0x1,0x7f,0x40,0x88,0xf,0x8,0x10,0x13,0x32,0x52,0x93,0x12,0x12,0x13,0x12,0x0,0x0,0xfe,0x2,0x4,0xfe,0x40,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x43,0x32,0x12,0x2,0x2,0xf3,0x12,0x12,0x12,0x12,0x16,0x1a,0x14,0x8,0x0,0x1c,0xe0,0x0,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x60,0x30,0x2c,0x24,0x20,0x20,
++0x1,0x1,0x3f,0x1,0xff,0x1,0x3f,0x1,0x21,0x25,0x25,0x25,0x29,0x21,0x41,0x81,0x0,0x8,0xfc,0x8,0xfe,0x8,0xf8,0x0,0x8,0x48,0x48,0x28,0x28,0x8,0x8,0x8,
++0x4,0xfe,0x28,0x28,0xff,0xaa,0xaa,0xab,0xae,0xc2,0x83,0xfe,0x82,0xfe,0x82,0x1,0x20,0x20,0x40,0x84,0xfe,0x48,0x86,0x42,0x78,0x88,0x48,0x50,0x20,0x50,0x8e,0x4,
++0x8,0x8,0xff,0x8,0x4,0x7e,0x0,0x4,0xfe,0x8,0x2c,0x2a,0x48,0x89,0x28,0x10,0x20,0x24,0xfe,0x20,0x8,0xfc,0x0,0x4,0xfe,0x10,0x58,0x56,0x92,0x10,0x50,0x20,
++0x20,0x3e,0x49,0x9f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x8,0xff,0x8,0x8,0x10,0x20,0x80,0xfc,0x20,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x1f,0x10,0x10,0x1f,0x1,0x1,0x3f,0x21,0x21,0x3f,0x1,0x1,0x1,0x7f,0x0,0x10,0xf8,0x10,0x10,0xf0,0x0,0x8,0xfc,0x8,0x8,0xf8,0x0,0x10,0xfc,0x4,0x0,
++0x0,0x78,0x4f,0x51,0x51,0x62,0x55,0x48,0x4b,0x4a,0x6b,0x52,0x43,0x42,0x42,0x42,0x80,0x84,0xfe,0x0,0xf8,0x40,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x28,0x10,
++0x0,0x78,0x4a,0x51,0x51,0x60,0x57,0x49,0x49,0x49,0x69,0x51,0x41,0x41,0x42,0x44,0x20,0x24,0xfe,0x20,0x44,0xfe,0x44,0x7c,0x44,0x7c,0x44,0x44,0x54,0x48,0x80,0x7e,
++0x10,0x17,0x20,0x22,0x41,0xf8,0x10,0x2f,0x41,0xf9,0x42,0x1,0x18,0xe0,0x41,0x6,0x1c,0xe0,0x0,0x48,0x50,0x20,0x84,0xfe,0x8,0x8,0x10,0x10,0xa0,0x40,0xb0,0x8,
++0x0,0x7d,0x44,0x76,0x55,0x55,0xfe,0x83,0x7d,0x45,0x7d,0x45,0x7d,0x45,0x56,0x48,0x20,0xfe,0x40,0x7c,0x90,0x7c,0x0,0x7c,0x44,0x7c,0x44,0x7c,0x44,0x4c,0x80,0x7e,
++0x0,0x8,0xfd,0x10,0x10,0x21,0x22,0x7c,0xa4,0x27,0x24,0x24,0x24,0x3c,0x20,0x0,0x40,0x20,0xfc,0x88,0x88,0x54,0x22,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,
++0x1,0x21,0x21,0x21,0x3f,0x24,0x4,0xf,0x10,0x24,0x42,0x1,0x1,0x3,0x1c,0xe0,0x0,0x8,0x8,0x8,0xf8,0x8,0x0,0xfc,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,
++0x8,0x1c,0xf3,0x10,0x11,0xff,0x11,0x31,0x39,0x54,0x51,0x90,0x12,0x12,0x14,0x10,0x20,0x24,0xfe,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x28,0xfc,0x40,0xa4,0xa2,0x8a,0x78,
++0x2,0x81,0x60,0x2f,0x1,0x2,0xe4,0x29,0x22,0x24,0x29,0x22,0x25,0x50,0x8f,0x0,0x10,0x20,0x48,0xfc,0x0,0x88,0xd0,0x60,0x40,0xe0,0x58,0x48,0x40,0x86,0xfc,0x0,
++0x0,0x78,0x49,0x54,0x52,0x60,0x50,0x4e,0x4a,0x4a,0x6a,0x52,0x42,0x45,0x48,0x40,0x44,0x28,0xfe,0x20,0x40,0xa4,0x38,0x50,0x98,0x34,0x54,0x90,0x30,0x6,0xfc,0x0,
++0x1,0x21,0x21,0x3f,0x1,0x41,0x7f,0x0,0x3f,0x0,0x0,0xff,0x9,0x11,0x25,0x2,0x0,0x8,0x8,0xf8,0x0,0x4,0xfc,0x0,0xf8,0x0,0x4,0xfe,0x20,0x18,0x8,0x0,
++0x0,0x7e,0x2,0x4,0x8,0xa,0xc,0x39,0xc9,0xa,0xc,0x8,0x8,0x8,0x28,0x10,0x20,0x20,0x20,0x20,0x20,0xb0,0xa8,0x24,0x26,0x22,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x11,0x11,0x11,0xfd,0x10,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x10,0x50,0x23,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x4,0x24,0x24,0x24,0x24,0x24,0x50,0x8c,0x4,
++0x10,0x12,0x1f,0x28,0x45,0xbf,0x4,0x4,0xff,0x4,0x4,0x3f,0x4,0x8,0x10,0x60,0x40,0x44,0x7e,0xa0,0x10,0xf0,0x10,0x14,0xfe,0x10,0x10,0xf0,0x10,0x0,0x0,0x0,
++0x8,0x8,0xff,0x9,0x7f,0x0,0x1f,0x10,0xff,0x10,0x1f,0x9,0x18,0x2a,0xcc,0x8,0x20,0x24,0xfe,0x20,0xfc,0x0,0xf0,0x14,0xfe,0x10,0xf0,0x8,0x90,0x60,0x1c,0x8,
++0x10,0x10,0x11,0x13,0xfc,0x10,0x31,0x3a,0x54,0x51,0x92,0x14,0x10,0x10,0x11,0x16,0x40,0x90,0x8,0xfc,0x4,0x88,0x6,0x82,0xf8,0x8,0x90,0x50,0x20,0x50,0x8e,0x4,
++0x0,0x8,0x7d,0x4b,0x48,0x48,0x49,0x4a,0x48,0x49,0x4a,0x7c,0x48,0x0,0x1,0x6,0x40,0x90,0x8,0xfc,0x4,0x88,0x6,0x82,0xf8,0x8,0x90,0x50,0x20,0x50,0x8e,0x4,
++0x20,0x20,0x27,0x44,0x49,0xf1,0x12,0x26,0x4a,0xfa,0x42,0x2,0x1a,0xe2,0x42,0x2,0x40,0x20,0xfe,0x2,0x4,0xfe,0x20,0x44,0xfe,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,
++0x0,0x9,0xfc,0x10,0x10,0x11,0x11,0x7d,0x11,0x11,0x11,0x1d,0xf0,0x40,0x1,0x6,0x20,0x24,0xa4,0xa8,0x24,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x20,0x58,0x84,0x2,
++0x1,0x1,0x3f,0x1,0x7f,0x42,0x84,0xf,0x1,0x2,0x3f,0x1,0x9,0x11,0x25,0x2,0x0,0x10,0xf8,0x0,0xfe,0x2,0x24,0xc0,0x0,0x10,0xf8,0x8,0x20,0x18,0x8,0x0,
++0x10,0x11,0x10,0x1c,0x20,0x21,0x7d,0x91,0x11,0x7d,0x11,0x11,0x14,0x18,0x11,0x6,0x20,0x24,0xa4,0xa8,0x24,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x20,0x58,0x84,0x2,
++0x2,0x7,0x38,0x20,0x20,0x3e,0x22,0x22,0x22,0x3e,0x22,0x20,0x21,0x42,0x84,0x0,0x8,0x1c,0xe0,0x80,0x80,0x84,0xfe,0x88,0x88,0x88,0x88,0x88,0x8,0x8,0x8,0x8,
++0x20,0x23,0x22,0x23,0x22,0xfb,0x20,0x27,0x20,0x24,0x22,0x39,0xe2,0x44,0x2,0x1,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x4,0xbe,0x84,0xa4,0x94,0x8c,0x94,0xa4,0x94,0x8,
++0x8,0x8,0x8,0x10,0x12,0x32,0x53,0x9e,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x10,0x40,0x40,0x40,0x40,0x48,0x7c,0xc8,0x48,0x48,0x68,0x50,0x40,0x42,0x2,0xfe,0x0,
++0x2,0x1,0x7f,0x40,0x80,0x8,0x8,0x8,0x9,0xe,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0xfe,0x2,0x4,0x0,0x20,0x60,0x80,0x0,0x0,0x0,0x8,0x8,0xf8,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x25,0x25,0x27,0x25,0x45,0x29,0x11,0x29,0x45,0x84,0x0,0x20,0x20,0x20,0x20,0x24,0x3e,0xe4,0x24,0x24,0x34,0x28,0x20,0x22,0x2,0xfe,0x0,
++0x21,0x21,0x27,0x21,0x20,0xf8,0x21,0x22,0x2d,0x20,0x23,0x3a,0xe2,0x42,0x3,0x2,0x10,0x10,0xfc,0x10,0x40,0xa0,0x10,0xe,0xf4,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x8a,0x52,0x2f,0x62,0xaf,0x2a,0x2a,0x6a,0xaf,0x22,0x27,0x2a,0x32,0x22,0xa2,0x42,0x10,0x10,0x9c,0x24,0xc8,0xbe,0xa2,0xaa,0xaa,0x2a,0x2a,0xaa,0x8,0x14,0x22,0x42,
++0x10,0x12,0x11,0x11,0xfc,0x10,0x17,0x19,0x31,0xd1,0x11,0x11,0x11,0x12,0x54,0x20,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x28,0x28,0x46,0x84,0x0,0x86,0x7c,0x0,
++0x0,0x7d,0x45,0x45,0x45,0x7d,0x10,0x13,0x5c,0x51,0x50,0x51,0x5e,0xf0,0x41,0x0,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x0,0xdc,0x44,0x54,0xcc,0x54,0x64,0x44,0x54,0x88,
++0x0,0x7d,0x44,0x44,0x44,0x7d,0x12,0x10,0x5d,0x51,0x51,0x51,0x5d,0xf1,0x41,0x1,0x20,0x24,0xa8,0x70,0xa8,0x26,0x24,0x60,0xfc,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x4,0x3e,0x24,0x24,0x24,0x3d,0x27,0x24,0x24,0x3d,0x25,0x25,0x25,0x45,0x95,0x9,0x20,0x20,0x40,0x40,0x88,0x4,0xfe,0x2,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x8,0xff,0x8,0x2,0x4,0x8,0x3f,0x0,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x20,0x24,0xfe,0x20,0x0,0x20,0x10,0xf8,0x8,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x10,0x10,0x10,0xfc,0x11,0x17,0x18,0x30,0xd1,0x11,0x11,0x11,0x11,0x51,0x21,0x20,0x20,0x40,0x40,0x88,0x4,0xfe,0x2,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x2,0x2,0x4,0x8,0x10,0x20,0x7f,0x0,0x0,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x0,0x20,0x10,0x8,0xfc,0x4,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x1,0x1,0x7f,0x1,0x3f,0x2,0xff,0x4,0x9,0x39,0xc5,0x3,0xd,0x11,0x5,0x2,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x40,0x20,0x30,0x4e,0x84,0x60,0x10,0x0,0x0,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x57,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x10,0x90,0x10,0x10,0x14,0xfe,0x10,0x10,0x28,0x28,0x28,0x28,0x44,0x54,0x82,0x0,
++0x1,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x2,0x2,0x4,0x6,0x9,0x31,0xc0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x80,0x80,0x40,0x40,0x30,0xe,0x4,0x0,
++0x1,0x1,0xff,0x1,0x2,0x4,0xa,0x31,0xc0,0x2,0x29,0x29,0x28,0x48,0x7,0x0,0x0,0x4,0xfe,0x0,0x80,0x40,0x30,0xe,0x4,0x0,0x10,0x8,0x24,0x24,0xe0,0x0,
++0x0,0x40,0x30,0x10,0x87,0x60,0x20,0x8,0x10,0x20,0xe1,0x21,0x22,0x24,0x28,0x20,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0xa0,0xa0,0x10,0x90,0x48,0x4e,0x4,0x0,
++0x20,0x23,0x22,0x22,0x22,0xfa,0x22,0x22,0x2f,0x22,0x22,0x3a,0xe2,0x44,0x4,0x8,0x8,0xfc,0x8,0x8,0x88,0x48,0x48,0x8,0xfe,0x8,0x8,0x8,0x8,0x8,0x28,0x10,
++0x20,0x20,0x20,0x2e,0xf3,0x2a,0x2a,0x3a,0x6a,0xa4,0x2a,0x29,0x31,0x20,0xa0,0x40,0x40,0x50,0x44,0xfe,0x90,0x90,0xfc,0x90,0x90,0xfc,0x90,0x90,0x94,0xfe,0x80,0x80,
++0x1,0x2,0x6,0x9,0x37,0xc0,0x0,0x1f,0x10,0x11,0x11,0x11,0x12,0x4,0x8,0x30,0x0,0x80,0x40,0x30,0xce,0x44,0x90,0xf8,0x10,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x0,0x0,0x1f,0x10,0x90,0x5f,0x51,0x19,0x35,0x52,0x92,0x15,0x25,0x28,0x40,0x0,0x80,0x44,0xfe,0x20,0x28,0x7e,0x48,0xc8,0x7e,0x48,0x48,0x7e,0x48,0x48,0x7e,0x40,
++0x0,0x40,0x30,0x1f,0x81,0x69,0x29,0x6,0x12,0x25,0xe9,0x30,0x20,0x20,0x20,0x20,0x20,0x28,0x20,0x7e,0x48,0xc8,0x7c,0x48,0x48,0x7c,0x48,0x48,0x48,0x7e,0x40,0x40,
++0x10,0x10,0x13,0x10,0x10,0xfc,0x17,0x10,0x10,0x10,0x10,0x1d,0xf1,0x43,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x40,0x40,0x80,0x90,0x8,0x4,0xfc,0x4,0x0,
++0x10,0x17,0x10,0x17,0xfd,0x15,0x3d,0x37,0x50,0x53,0x92,0x13,0x12,0x13,0x10,0x1f,0x40,0xfe,0x0,0xfc,0x14,0xf4,0x14,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,
++0x1,0x0,0x1f,0x10,0x92,0x51,0x50,0x11,0x36,0x50,0x92,0x11,0x20,0x21,0x42,0xc,0x0,0x84,0xfe,0x40,0x48,0x50,0xa0,0x10,0x4c,0x40,0x48,0x50,0xa0,0x10,0xe,0x4,
++0x40,0x3f,0x10,0x7,0x84,0x67,0x20,0xb,0x12,0x23,0xe2,0x23,0x20,0x2f,0x20,0x20,0x4,0xfe,0xa0,0xfc,0xa4,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0x40,
++0x40,0x2f,0x20,0x7,0x4,0xe7,0x20,0x23,0x22,0x23,0x22,0x23,0x28,0x37,0x20,0x0,0x4,0xfe,0xa0,0xfc,0xa4,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0x40,
++0x0,0x40,0x32,0x11,0x0,0x0,0xf1,0x16,0x10,0x12,0x11,0x10,0x14,0x19,0x12,0x4,0x40,0x40,0x48,0x50,0xa0,0x90,0xe,0x44,0x40,0x48,0x50,0xa0,0xa0,0x10,0xe,0x4,
++0x10,0x10,0x11,0x11,0x11,0xfd,0x11,0x11,0x11,0x11,0x11,0x1d,0xf1,0x40,0xf,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,0x0,0xfe,0x0,
++0x4,0xe,0xf0,0x11,0x10,0x7c,0x11,0x10,0xfe,0x10,0x11,0x10,0x10,0x13,0x10,0xf,0x20,0xa4,0xa8,0x30,0x50,0x8c,0x24,0x20,0xa8,0xb0,0x20,0x50,0x8c,0x6,0x2,0xfe,
++0x20,0x10,0x11,0x1,0xfd,0x9,0x11,0x35,0x59,0x95,0x11,0x11,0x11,0x10,0x17,0x10,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,0x0,0xfe,0x0,
++0x0,0x8,0xfd,0x11,0x11,0x20,0x23,0x7c,0xa4,0x25,0x25,0x26,0x24,0x3c,0x25,0x2,0x20,0x20,0x24,0x24,0xfc,0x80,0xfe,0x80,0xa0,0x24,0xa8,0x50,0x50,0x88,0xe,0x4,
++0x10,0x13,0x12,0x14,0xfc,0x11,0x14,0x18,0x33,0xd0,0x10,0x10,0x11,0x12,0x50,0x20,0x0,0xfe,0x2,0x54,0x88,0x4,0x20,0x24,0xfe,0x20,0x70,0xa8,0x26,0x24,0x20,0x20,
++0x0,0x8,0x7f,0x4a,0x4a,0x49,0x49,0x48,0x48,0x48,0x48,0x78,0x49,0x2,0x4,0x18,0x0,0x0,0xf8,0x8,0x8,0x10,0x10,0xa0,0xa0,0x40,0xa0,0xa0,0x10,0x10,0xe,0x4,
++0x1,0x21,0x21,0x3f,0x8,0xff,0x9,0x9,0x15,0x15,0x2a,0x22,0x44,0x84,0x8,0x30,0x0,0x8,0x8,0xf8,0x4,0xfe,0x0,0x10,0x30,0x40,0x80,0x80,0x40,0x20,0x1c,0x8,
++0x0,0x23,0x18,0x8,0x80,0x60,0x23,0x8,0x10,0x21,0xe1,0x22,0x24,0x29,0x22,0x20,0x0,0xf8,0x10,0x20,0x40,0x84,0xfe,0xa4,0xa4,0x24,0x44,0x44,0x84,0x4,0x28,0x10,
++0x10,0x10,0x13,0x12,0x13,0xfe,0x13,0x12,0x13,0x12,0x13,0x1d,0xf5,0x45,0x9,0x1,0x40,0x24,0xfe,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x13,0x12,0xff,0x12,0x17,0x1a,0x33,0xd2,0x13,0x15,0x15,0x15,0x59,0x21,0x40,0x24,0xfe,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x11,0x9,0x7f,0x40,0x9f,0x10,0x10,0x1f,0x1,0x1,0x7f,0x1,0x1,0xff,0x0,0x0,0x10,0x20,0xfe,0x2,0xf4,0x10,0x10,0xf0,0x0,0x8,0xfc,0x0,0x4,0xfe,0x0,
++0x1,0x9,0x5,0x7f,0x40,0x8f,0x8,0x8,0xf,0x1,0xff,0x3,0x5,0x19,0x61,0x1,0x0,0x20,0x40,0xfe,0x2,0xe4,0x20,0x20,0xe0,0x4,0xfe,0x80,0x60,0x1c,0x8,0x0,
++0x8,0x7d,0x48,0x4b,0x4a,0x7d,0x49,0x49,0x49,0x78,0x48,0x49,0x48,0x48,0x8b,0x18,0x20,0x24,0xa8,0xfe,0x2,0xfc,0x4,0x4,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,
++0x1,0x0,0x3f,0x20,0x2f,0x20,0x3f,0x20,0x2f,0x20,0x2f,0x28,0x48,0x48,0x8f,0x8,0x0,0x88,0xfc,0x80,0xf8,0x88,0xfe,0x88,0xf8,0x80,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x57,0x3a,0x13,0xfe,0x13,0x32,0x3b,0x56,0x53,0x93,0x15,0x15,0x19,0x11,0x40,0x24,0xfe,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x8,0xa,0x9,0x11,0x10,0x37,0x54,0x94,0x15,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x40,0x48,0x48,0x50,0x44,0xfe,0x4,0x4,0xf4,0x14,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x10,0x22,0x79,0x49,0x48,0x7b,0x4a,0x7a,0x4a,0x4a,0xfa,0x2a,0x4a,0x8a,0x2a,0x12,0x40,0x48,0x48,0x50,0x44,0xfe,0x4,0x4,0xf4,0x94,0x94,0x94,0xf4,0x84,0x14,0x8,
++0x0,0x42,0x31,0x11,0x80,0x67,0x24,0xc,0x15,0x25,0xe5,0x25,0x25,0x25,0x24,0x24,0x40,0x48,0x48,0x50,0x44,0xfe,0x4,0x4,0xf4,0x14,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x10,0x12,0x11,0x7d,0x10,0x13,0xfe,0x12,0x52,0x5e,0x52,0x72,0x52,0x48,0x87,0x0,0x40,0x48,0x48,0x50,0x44,0xfe,0x4,0xf4,0x94,0x94,0x94,0xf4,0xc,0x6,0xfc,0x0,
++0x23,0x10,0x40,0x23,0x9,0x71,0x11,0x12,0x14,0x1,0x9,0xa,0x12,0x4,0x18,0x60,0xf0,0x40,0x84,0xfe,0x24,0x24,0x24,0x54,0x88,0x0,0x10,0xa0,0x80,0x60,0x1c,0x8,
++0x11,0x11,0x11,0x13,0xfc,0x12,0x13,0x1c,0x30,0xd3,0x10,0x12,0x12,0x13,0x50,0x20,0x0,0x0,0x4,0xfe,0x4,0x44,0xe4,0x84,0xa4,0xf4,0x84,0xa4,0xa4,0xe4,0x14,0x8,
++0x0,0x40,0x37,0x10,0x83,0x60,0x2f,0x9,0x11,0x23,0xe2,0x25,0x28,0x30,0x20,0x20,0x80,0x88,0xfc,0x80,0xf8,0x80,0xfe,0x8,0x8,0xfe,0x8,0x8,0x88,0x88,0x28,0x10,
++0x40,0x30,0x17,0x0,0x82,0x61,0x20,0xf,0x14,0x24,0xe7,0x24,0x24,0x24,0x27,0x24,0x8,0x3c,0xc0,0x4,0x4c,0x50,0x84,0x3e,0x4,0x4,0xbc,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x21,0x23,0x4c,0xf8,0x10,0x21,0x46,0xf8,0x47,0x0,0x19,0xe2,0x45,0x0,0x80,0x80,0xf8,0x10,0xa0,0x40,0xa0,0x10,0x4e,0x44,0xfc,0x40,0x50,0x4c,0x44,0x80,
++0x4,0x4,0xff,0x14,0x1f,0x28,0x4f,0x11,0x21,0xff,0x1,0x11,0x11,0x1f,0x0,0x0,0x40,0x44,0xfe,0x40,0xfc,0x4,0xf4,0x4,0x14,0xfc,0x4,0x14,0x14,0xf4,0x14,0x8,
++0x10,0x10,0x10,0x10,0xfc,0x12,0x39,0x34,0x51,0x52,0x94,0x11,0x11,0x12,0x14,0x18,0xa0,0xa0,0xa0,0xa0,0xa4,0xac,0xb0,0xa0,0xb0,0xa8,0xa8,0x20,0x22,0x22,0x1e,0x0,
++0x1,0x41,0x29,0x25,0x5,0x1,0xe3,0x25,0x29,0x21,0x22,0x24,0x28,0x50,0x88,0x7,0x40,0x40,0x48,0x58,0x60,0x40,0x60,0x50,0x50,0x40,0x44,0x44,0x3c,0x0,0x6,0xfc,
++0x42,0x32,0x13,0x5,0x89,0x63,0x24,0x0,0x1f,0x20,0xe4,0x24,0x27,0x20,0x20,0x20,0x0,0x4,0xfe,0x4,0x24,0xf4,0x84,0x94,0xfc,0x84,0x94,0x94,0xf4,0x4,0x14,0x8,
++0x1,0x79,0x49,0x52,0x55,0x61,0x52,0x48,0x4f,0x48,0x69,0x51,0x41,0x40,0x40,0x40,0x0,0x4,0xfe,0x4,0x24,0xf4,0x44,0x54,0xfc,0x44,0x54,0x54,0xf4,0x4,0x14,0x8,
++0x0,0x40,0x30,0x10,0x7,0x0,0xf0,0x11,0x10,0x10,0x10,0x10,0x14,0x18,0x10,0x0,0x8,0x8,0x8,0x8,0xfe,0x8,0x8,0x8,0x88,0x88,0x8,0x8,0x8,0x8,0x28,0x10,
++0x1,0x1,0xff,0x2,0x4,0xf,0x18,0x2f,0xc8,0xf,0x8,0xff,0x4,0x8,0x1f,0x0,0x0,0x4,0xfe,0x80,0x40,0xe0,0x10,0xee,0x4,0xe0,0x4,0xfe,0x0,0x20,0xf0,0x10,
++0x10,0x10,0x50,0x53,0x7c,0x90,0x17,0x18,0x30,0xd7,0x11,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x10,0x14,0xfe,0x10,0x90,0x90,0x10,0x50,0x20,
++0x4,0x4,0xff,0x4,0x7a,0x49,0x4b,0x78,0x4f,0x49,0x7a,0x4d,0x48,0x49,0x8a,0x18,0x20,0x24,0xfe,0x20,0x48,0x50,0xfc,0x80,0xfe,0x10,0x4e,0x54,0xe0,0x58,0x48,0xc0,
++0x0,0x7a,0x49,0x4b,0x48,0x7f,0x49,0x4a,0x4d,0x78,0x49,0x49,0x48,0x4f,0x88,0x18,0x40,0x48,0x50,0xfc,0x80,0xfe,0x10,0xe,0xf4,0x10,0x14,0xfe,0x4,0xe4,0x14,0x8,
++0x1,0x0,0x1f,0x11,0x91,0x53,0x55,0x10,0x30,0x50,0x93,0x2c,0x20,0x40,0x80,0x0,0x0,0x84,0xfe,0x0,0x0,0xf8,0x10,0xa0,0x40,0xb0,0x8e,0x64,0x20,0x80,0x60,0x20,
++0x11,0x9,0x7f,0x2,0xff,0x4,0x9,0x3f,0xc0,0x1f,0x0,0x1f,0x0,0x1f,0x10,0x1f,0x10,0x20,0xfc,0x0,0xfe,0x40,0x20,0xfe,0x4,0xf0,0x0,0xf0,0x0,0xf0,0x10,0xf0,
++0x12,0x11,0x10,0x13,0xfc,0x10,0x33,0x3a,0x56,0x53,0x90,0x11,0x12,0x14,0x18,0x10,0x8,0x10,0xa0,0xf8,0x48,0x48,0xf8,0x40,0x44,0xfe,0xc4,0x44,0x54,0x48,0x40,0x40,
++0x1,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x10,0x3f,0x54,0x94,0x14,0x24,0x4a,0x11,0x4,0x84,0x24,0x24,0x24,0x24,0x24,0x24,0xa4,0xe4,0xa4,0x84,0x84,0x84,0x94,0x8,
++0x0,0x7d,0x45,0x45,0x45,0x7d,0x11,0x11,0x5c,0x51,0x52,0x54,0x5c,0xf1,0x42,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0xfe,0xa4,0xa4,0xa4,0x24,0x54,0x88,
++0x22,0x21,0x38,0x43,0x80,0x78,0x23,0x22,0xfa,0x23,0x20,0x29,0x32,0x24,0x8,0x0,0x8,0x10,0xa0,0xf8,0x48,0x48,0xf8,0x40,0x44,0xfe,0xc4,0x44,0x54,0x48,0x40,0x40,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x15,0x19,0x30,0xd7,0x10,0x11,0x11,0x11,0x52,0x24,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xfe,0x20,0x28,0x3c,0x20,0xa6,0x7c,
++0x3e,0x23,0x22,0x3e,0x22,0x22,0x3e,0x0,0xff,0x8,0x2a,0x2f,0x28,0x58,0x49,0x87,0x4,0xfe,0x20,0x44,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0x20,0x58,0x84,0x6,0xfc,
++0x0,0x7c,0x45,0x44,0x44,0x7f,0x12,0x14,0x5d,0x51,0x51,0x51,0x5d,0xf1,0x40,0x0,0x40,0x20,0xfc,0x88,0x50,0xfe,0x22,0x24,0xfe,0x24,0x24,0x24,0x24,0x2c,0x20,0x20,
++0x0,0x8,0x7d,0x48,0x48,0x4b,0x4a,0x4c,0x49,0x49,0x49,0x79,0x49,0x1,0x0,0x0,0x40,0x20,0xfc,0x88,0x50,0xfe,0x22,0x24,0xfe,0x24,0x24,0x24,0x24,0x2c,0x20,0x20,
++0x10,0x10,0x10,0x20,0x2f,0x62,0xa2,0x24,0x24,0x28,0x2b,0x30,0x20,0x20,0x20,0x20,0x80,0x80,0x80,0x88,0xfc,0xa0,0xa0,0x90,0x90,0x88,0xee,0x84,0x80,0x80,0x80,0x80,
++0x8,0x8,0x7e,0x8,0xfe,0x8,0x14,0x22,0xdf,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x20,0x28,0xfc,0x20,0xfe,0x20,0x50,0x8e,0xf4,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x0,0x13,0x78,0x57,0x54,0x5b,0x52,0x53,0x52,0x53,0x50,0x77,0x52,0x3,0x4,0x8,0x50,0xf8,0x40,0xfe,0x2,0xfc,0x48,0xf8,0x48,0xf8,0x0,0xfc,0x44,0x70,0xc0,0x7e,
++0x10,0x11,0x11,0x11,0x59,0x55,0x51,0x91,0x10,0x11,0x12,0x14,0x10,0x11,0x12,0x10,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0xfe,0xa4,0xa4,0xa4,0x24,0x54,0x88,
++0x2,0x41,0x30,0x17,0x80,0x60,0x27,0xc,0x14,0x27,0xe0,0x21,0x22,0x24,0x28,0x20,0x8,0x10,0xa0,0xf8,0x48,0x48,0xf8,0x40,0x44,0xfe,0xc4,0x44,0x54,0x48,0x40,0x40,
++0x41,0x22,0x14,0x7f,0x9,0x9,0x7f,0x48,0x49,0x7f,0x19,0x29,0x4d,0x8a,0x8,0x8,0x4,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0xa4,0x24,0x24,0x24,0x4,0x14,0x8,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x24,0x24,0x3f,0x24,0x24,0x24,0x24,0x44,0x87,0x0,0x8,0xfc,0x8,0x8,0xf8,0x90,0x90,0x94,0xfe,0x90,0x90,0xf0,0x0,0x8,0xfc,0x0,
++0x0,0x7f,0x1,0x1,0x1,0x1,0xff,0x1,0x2,0x2,0x4,0x4,0x8,0x10,0x20,0xc0,0x8,0xfc,0x0,0x0,0x0,0x4,0xfe,0x0,0x80,0x80,0x40,0x40,0x20,0x10,0xe,0x4,
++0x40,0x37,0x10,0x0,0x8f,0x61,0x21,0xa,0x14,0x28,0xe2,0x22,0x24,0x20,0x22,0x21,0x8,0xfc,0x80,0x84,0xfe,0x20,0x10,0x90,0x8e,0x84,0xd0,0xa8,0xa8,0x88,0x80,0x0,
++0x10,0x10,0x17,0x10,0x13,0xfe,0x13,0x12,0x13,0x12,0x1f,0xf2,0x4f,0x1,0x3,0x4,0x40,0x44,0xfe,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x10,0xc,0x4,
++0x0,0x3f,0x21,0x21,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x21,0x21,0x3f,0x20,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,
++0x4,0xe,0xf8,0x8,0xb,0x8,0xff,0x8,0xa,0x3f,0x22,0x22,0x22,0x3e,0x22,0x0,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0xf8,0x88,
++0x10,0x10,0x17,0x10,0x58,0x54,0x57,0x90,0x10,0x13,0x12,0x12,0x12,0x12,0x13,0x12,0x10,0x78,0xc0,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0xc,0xf3,0x10,0x10,0x13,0xfe,0x10,0x11,0x7d,0x46,0x45,0x45,0x46,0x7c,0x45,0x0,0x8,0xfc,0x40,0x44,0xfe,0x90,0x88,0x48,0x46,0x44,0x48,0x64,0x54,0x54,0x40,0x80,
++0x8,0x7c,0x48,0x4b,0x4a,0x7a,0x4a,0x4b,0x4a,0x7a,0x4a,0x4f,0x48,0x49,0x8b,0x1c,0x90,0x90,0x94,0xfe,0x94,0x94,0x94,0xfc,0x94,0x94,0x94,0xfe,0x0,0x10,0xc,0x4,
++0x10,0x10,0x10,0x10,0xfc,0x12,0x15,0x18,0x31,0xd2,0x14,0x11,0x11,0x12,0x54,0x28,0xa0,0xa0,0xa0,0xa0,0xa4,0xac,0xb0,0xa0,0xb0,0xa8,0xa8,0x20,0x22,0x22,0x1e,0x0,
++0x8,0xf,0x18,0x24,0x43,0xc,0x30,0xc1,0x1,0x3f,0x1,0x9,0x11,0x21,0x5,0x2,0x0,0xf0,0x20,0x40,0x80,0x60,0x1e,0x4,0x10,0xf8,0x0,0x20,0x18,0x8,0x0,0x0,
++0x0,0x47,0x31,0x11,0x1,0x2,0xf4,0x1b,0x12,0x12,0x12,0x13,0x12,0x28,0x47,0x0,0x8,0xfc,0x8,0x8,0x8,0x28,0x10,0xf8,0x8,0x8,0x8,0xf8,0x8,0x6,0xfc,0x0,
++0x8,0x7c,0x48,0x48,0x48,0x7a,0x49,0x48,0x49,0x7a,0x4c,0x49,0x49,0x7a,0x44,0x8,0xa0,0xa0,0xa0,0xa0,0xa4,0xac,0xb0,0xa0,0xb0,0xa8,0xa8,0x20,0x22,0x22,0x1e,0x0,
++0x4,0x7e,0x44,0x44,0x44,0x7e,0x11,0x10,0x5d,0x52,0x54,0x51,0x5d,0xf2,0x44,0x8,0xa0,0xa0,0xa0,0xa0,0xa4,0xac,0xb0,0xa0,0xb0,0xa8,0xa8,0x20,0x22,0x22,0x1e,0x0,
++0x4,0x7e,0x44,0x54,0x54,0x54,0x54,0x55,0x55,0x55,0x55,0x55,0x11,0x29,0x45,0x81,0x40,0x40,0x44,0x7e,0x40,0x40,0x44,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x11,0x11,0x1d,0x21,0x22,0x7c,0x93,0x10,0x7c,0x10,0x10,0x15,0x19,0x12,0x4,0x40,0x40,0x50,0xf8,0x40,0x40,0x48,0xfc,0x40,0x40,0xa0,0xa0,0x10,0x10,0xe,0x4,
++0x10,0x10,0x14,0x7e,0x54,0x54,0x54,0x55,0x55,0x55,0x55,0x55,0x5d,0x11,0x11,0x11,0x40,0x40,0x44,0x7e,0x40,0x40,0x44,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x3f,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x82,0x1,0x8,0xfc,0x0,0x0,0x4,0xfe,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,
++0x0,0x8,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x4a,0x7a,0x44,0x8,0x0,0x10,0x38,0xc0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x13,0x10,0x14,0x58,0x50,0x51,0x96,0x10,0x11,0x10,0x28,0x24,0x40,0x87,0x0,0x0,0xfc,0x8,0x10,0x20,0x58,0x86,0x2,0x8,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x40,0x30,0x17,0x0,0x80,0x60,0x20,0x8,0x10,0x20,0xe0,0x20,0x20,0x20,0x21,0x20,0x0,0x4,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x0,0x0,0xfb,0x8,0x10,0x20,0x47,0x78,0x8,0x8,0x48,0x2b,0x10,0x28,0x47,0x80,0x10,0x38,0xc0,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x50,0xf8,0x0,0x6,0xfc,0x0,
++0x10,0x10,0x17,0x20,0x23,0x62,0xa3,0x20,0x2f,0x28,0x33,0x20,0x20,0x20,0x21,0x20,0x80,0x48,0xfc,0x0,0xf8,0x8,0xf8,0x0,0xfe,0x2,0xf4,0x40,0x40,0x40,0x40,0x80,
++0x2,0x1,0x7f,0x0,0x1f,0x10,0x1f,0x0,0x7f,0x40,0x9f,0x1,0x1,0x1,0x5,0x2,0x0,0x8,0xfc,0x10,0xf8,0x10,0xf0,0x0,0xfe,0x2,0xf4,0x0,0x0,0x0,0x0,0x0,
++0x1,0x0,0x3f,0x20,0x3f,0x22,0x24,0x28,0x2f,0x21,0x21,0x2a,0x44,0x4a,0x91,0x20,0x0,0x88,0xfc,0x0,0x1c,0x70,0x10,0x14,0xfe,0x10,0x10,0x10,0x7c,0x0,0x6,0xfc,
++0x20,0x20,0x2f,0x21,0xf2,0x24,0x28,0x2f,0x31,0xe1,0x29,0x25,0x22,0x25,0xa8,0x50,0x0,0xc,0x70,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x7c,0x0,0x0,0x86,0x7c,
++0x10,0x20,0x7f,0x48,0x49,0x6a,0x5c,0x4f,0xf8,0x48,0x48,0x6c,0x5a,0x49,0x8a,0x1c,0x0,0xc,0xf0,0x90,0x10,0x14,0x7e,0x90,0x90,0x90,0x90,0xfc,0x80,0x0,0x86,0x7c,
++0x3,0x40,0x30,0x10,0x3,0x2,0xf2,0x13,0x12,0x12,0x13,0x12,0x12,0x2a,0x44,0x3,0xf8,0x10,0xa0,0x48,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x48,0x68,0x50,0x6,0xfc,
++0x10,0x13,0x12,0x12,0xfe,0x12,0x32,0x3a,0x56,0x52,0x92,0x12,0x12,0x12,0x12,0x12,0x4,0xfe,0x4,0x4,0xf4,0x4,0x4,0xf4,0x94,0x94,0x94,0xf4,0x4,0x4,0x14,0x8,
++0x4,0xfe,0x28,0x28,0xfe,0xaa,0xaa,0xae,0xc2,0x82,0x82,0xfe,0x82,0x82,0xfe,0x82,0x0,0xfe,0x82,0x82,0xfe,0x82,0x82,0xba,0xaa,0xaa,0xaa,0xba,0x82,0x82,0x8a,0x84,
++0x0,0x0,0x7b,0x49,0x48,0x4f,0x78,0x4b,0x4a,0x7b,0x4a,0x4b,0x48,0x7b,0x40,0xf,0x80,0x48,0xfc,0x10,0xa4,0xfe,0x0,0xf8,0x48,0xf8,0x48,0xf8,0x40,0xf8,0x40,0xfe,
++0x0,0x7f,0x40,0x40,0x5f,0x40,0x40,0x4f,0x48,0x48,0x48,0x48,0x4f,0x48,0x40,0x40,0x4,0xfe,0x4,0x24,0xf4,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0xe4,0x24,0x14,0x8,
++0x20,0x23,0x3e,0x42,0x82,0x7a,0x22,0x22,0xfa,0x22,0x22,0x26,0x2a,0x32,0x22,0x2,0x4,0xfe,0x4,0x4,0xf4,0x4,0x4,0xf4,0x94,0x94,0x94,0xf4,0x4,0x4,0x14,0x8,
++0x2,0x3f,0x22,0x22,0x32,0x2a,0x2a,0x22,0xff,0x22,0x22,0x22,0x22,0x42,0x4a,0x85,0x4,0xc,0x10,0x20,0x40,0x84,0xc,0x10,0xa0,0x42,0x6,0x8,0x10,0x20,0x40,0x80,
++0x2,0x1,0x3f,0x8,0x4,0xff,0x0,0x1f,0x11,0x1f,0x11,0x1f,0x1,0x3f,0x1,0x7f,0x0,0x10,0xf8,0x20,0x44,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0xf8,0x0,0xfc,
++0x20,0x27,0x20,0x20,0xf8,0x27,0x74,0x6c,0xa7,0x24,0x24,0x27,0x24,0x24,0x24,0x24,0x0,0xf8,0x10,0xa0,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x54,0x48,
++0x20,0x27,0x20,0x20,0xf8,0x27,0x24,0x2c,0x37,0xe4,0x24,0x27,0x24,0x24,0xa4,0x44,0x0,0xf8,0x10,0xa0,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x54,0x48,
++0x10,0x14,0x3e,0x49,0x84,0x3f,0x20,0x2f,0x20,0x27,0x24,0x24,0x24,0x27,0x20,0x20,0x40,0x44,0xfe,0x20,0x10,0xf8,0x8,0xe8,0x8,0xc8,0x48,0x48,0x48,0xc8,0x28,0x10,
++0x10,0x10,0x20,0x27,0x48,0xf9,0x12,0x27,0x41,0xf9,0x41,0x1,0x1a,0xe2,0x44,0x8,0x80,0x40,0x48,0xfc,0x80,0x10,0x8,0xfc,0x24,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x1,0x0,0x1f,0x10,0x97,0x50,0x50,0x17,0x34,0x57,0xd4,0x17,0x24,0x24,0x44,0x4,0x0,0x84,0xfe,0x0,0xf8,0xa0,0x44,0xfe,0x44,0xfc,0x44,0xfc,0x44,0x44,0x54,0x48,
++0x10,0x10,0x11,0x22,0x24,0x6b,0xb0,0x27,0x24,0x27,0x24,0x27,0x24,0x24,0x24,0x25,0x80,0x80,0x40,0x20,0x10,0xee,0x4,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0x88,0xa8,0x90,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x15,0x1a,0x33,0xd0,0x11,0x10,0x10,0x10,0x51,0x26,0x10,0xf8,0x10,0x10,0x10,0x14,0xe,0x0,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x0,0x0,0x8,0x6,0x22,0x18,0x8,0x0,0xff,0x0,0x1,0x1,0x2,0x4,0x18,0x60,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x84,0xfe,0x80,0x0,0x60,0x10,0x8,0xc,0x4,
++0x0,0x43,0x30,0x17,0x0,0x1,0xf2,0x17,0x11,0x11,0x12,0x12,0x14,0x28,0x44,0x3,0x18,0xe0,0x40,0xfc,0xe0,0x50,0x4e,0xf4,0x10,0x38,0x8,0x8,0x50,0x20,0x6,0xfc,
++0x0,0xf,0x8,0x8,0x8,0x8,0x8,0x78,0x40,0x40,0x40,0x40,0x40,0x40,0x7f,0x40,0x20,0xf0,0x20,0x20,0x20,0x20,0x24,0x3e,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x3f,0x1,0x1,0xff,0x5,0x9,0x11,0x27,0x44,0x4,0x4,0x8,0x8,0x10,0x60,0xf0,0x0,0x0,0x4,0xfe,0x40,0x20,0x10,0xce,0x44,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x2,0x1,0x7f,0x44,0x88,0x11,0x1,0x1,0xff,0x1,0x2,0x2,0x4,0x8,0x30,0xc0,0x0,0x0,0xfe,0x42,0x34,0x10,0x40,0x24,0xfe,0x0,0x80,0x80,0x40,0x30,0xe,0x4,
++0x0,0x7f,0x44,0x47,0x4c,0x52,0x41,0x42,0x46,0x49,0x70,0x46,0x41,0x40,0x7f,0x40,0x4,0xfe,0x4,0xe4,0x44,0x84,0x4,0x84,0x44,0x3c,0x94,0x4,0x4,0x84,0xfc,0x4,
++0x8,0x8,0x10,0x27,0x48,0x8,0x17,0x30,0x52,0x92,0x12,0x12,0x15,0x14,0x18,0x10,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x48,0x7c,0x40,0x40,0x40,0xc6,0x7c,0x0,
++0x0,0x40,0x30,0x11,0x2,0x5,0xf0,0x10,0x17,0x10,0x11,0x12,0x14,0x29,0x44,0x3,0x40,0x40,0xa0,0x10,0xe,0xf4,0x40,0x48,0xfc,0x40,0x50,0x4c,0x44,0x40,0x86,0xfc,
++0x0,0x40,0x31,0x12,0x84,0x48,0x57,0x0,0x10,0x2f,0xe0,0x22,0x24,0x28,0x22,0x21,0x80,0x80,0x40,0x20,0x10,0x2e,0xf4,0x80,0x88,0xfc,0x80,0xa0,0x98,0x88,0x80,0x0,
++0x0,0x3f,0x20,0x3f,0x21,0x2f,0x21,0x3f,0x21,0x22,0x27,0x2c,0x57,0x64,0x87,0x4,0x8,0xfc,0x8,0xf8,0x10,0xe0,0x44,0xfe,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x1,0x1,0x1,0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x8,0x7c,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0xf,0x0,0x40,0x40,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x8,0xf,0x10,0x20,0x7f,0xa1,0x21,0x21,0x3f,0x22,0x2,0x4,0x4,0x8,0x10,0x60,0x0,0xe0,0x40,0x88,0xfc,0x8,0x8,0x8,0xf8,0x88,0xa0,0x90,0x92,0x82,0x7e,0x0,
++0x0,0x44,0x34,0x14,0x87,0x40,0x4f,0x8,0x17,0x24,0xe4,0x24,0x24,0x24,0x24,0x24,0x40,0x44,0x44,0x44,0xfc,0x0,0xfe,0x84,0xfe,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xc,
++0x0,0x7f,0x40,0x40,0x40,0x7f,0x41,0x42,0x44,0x48,0x50,0x60,0x42,0x41,0x7f,0x40,0x4,0xfe,0x84,0x84,0x94,0xfc,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x11,0xfd,0x13,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x11,0x51,0x21,0xa0,0x90,0x84,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x10,0x14,0xff,0x0,0x0,
++0xc,0xf1,0x10,0x14,0xfe,0x10,0x38,0x56,0x92,0x38,0x28,0x28,0x2a,0x4c,0x48,0x81,0x4,0xfe,0x20,0x44,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0x20,0x58,0x44,0x82,0x2,
++0x0,0x78,0x4c,0x4a,0x48,0x78,0x4e,0x4a,0x4a,0x7a,0x4a,0x4a,0x4a,0x4d,0x88,0x18,0x8,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x84,0xa8,0x90,0x8c,0xc4,0x80,0x86,0x7c,
++0x10,0x11,0x10,0x14,0x7f,0x55,0x55,0x55,0x55,0x7c,0x50,0x14,0x1d,0xf5,0x42,0x4,0x0,0x8,0x90,0x8,0xfc,0x8,0x8,0x8,0xf8,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x40,0x34,0x13,0x1,0xfc,0x8,0x17,0x39,0x55,0x91,0x11,0x11,0x11,0x12,0x14,0x10,0x4,0x7e,0x44,0x44,0x7c,0x44,0x44,0x7c,0x42,0x54,0x48,0x66,0x42,0x80,0x46,0x3c,
++0x3,0x42,0x32,0x13,0x2,0x2,0xf3,0x12,0x12,0x12,0x12,0x13,0x12,0x28,0x44,0x3,0xf8,0x8,0x8,0xf8,0x8,0x8,0xfc,0x8,0xd0,0x20,0x90,0xc,0x4,0x0,0x6,0xfc,
++0x0,0x3f,0x2,0x2,0xff,0x4,0x4,0x8,0x10,0x2f,0x48,0x88,0x8,0x8,0xf,0x8,0x10,0xf8,0x0,0x4,0xfe,0x40,0x40,0x20,0x10,0xee,0x24,0x20,0x20,0x20,0xe0,0x20,
++0x1,0x1,0x1,0xff,0x1,0x21,0x21,0x21,0x21,0x21,0x3f,0x21,0x1,0x1,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x2,0x2,0xfe,0x0,
++0x7f,0x41,0x7f,0x52,0x7f,0x52,0x7f,0x52,0xa1,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x78,0x48,0x4c,0x80,0xfc,0x48,0x30,0x4e,0x84,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x30,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x11,0x1d,0x31,0xd7,0x11,0x11,0x11,0x11,0x50,0x20,0x80,0x80,0x84,0xfe,0x20,0x20,0x24,0x3e,0xe4,0x24,0x34,0x28,0x22,0x2,0xfe,0x0,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x14,0x18,0x37,0xd0,0x10,0x10,0x10,0x10,0x50,0x20,0x10,0x38,0xc0,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x8,0x7d,0x48,0x48,0x4b,0x7a,0x4a,0x4a,0x4b,0x7a,0x48,0x48,0x49,0x49,0x8a,0x1c,0x0,0x10,0xa0,0x8,0xfc,0x8,0x8,0x8,0xf8,0xa8,0xa0,0xa0,0x20,0x22,0x22,0x1e,
++0x10,0x20,0x7c,0x45,0x55,0x46,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0x14,0x8,0x40,0x20,0x0,0xfe,0x2,0x4,0x80,0x88,0x90,0xe0,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x7c,0x44,0x49,0x49,0x52,0x48,0x48,0x44,0x44,0x44,0x68,0x50,0x40,0x40,0x40,0x40,0x20,0x0,0xfe,0x2,0x4,0x80,0x88,0x90,0xe0,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x4,0x7e,0x4,0x24,0x24,0x27,0x24,0x24,0x3e,0x2,0x2,0x1a,0xe2,0x42,0x15,0xa,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x50,0x50,0x50,0x90,0x88,0xe,0x4,
++0x4,0x7e,0x4,0x25,0x25,0x26,0x24,0x24,0x3e,0x2,0x2,0x1a,0xe2,0x42,0x14,0x8,0x40,0x20,0x0,0xfe,0x2,0x4,0x80,0x88,0x90,0xe0,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x20,0x27,0x24,0x25,0xfd,0x26,0x75,0x6d,0xa4,0x24,0x26,0x25,0x24,0x24,0x24,0x24,0x10,0x90,0x94,0x7e,0x10,0x24,0x7e,0xa4,0xa4,0xbc,0xa4,0x24,0x3c,0x24,0x24,0x2c,
++0x0,0x3f,0x2,0x11,0xd,0x4,0x2,0x2,0xff,0x4,0x8,0x18,0x6,0x1,0x6,0x18,0x78,0x80,0x8,0x18,0x20,0x40,0x0,0x4,0xfe,0x10,0x10,0x20,0x40,0x80,0x60,0x10,
++0x10,0x10,0x13,0x10,0xfc,0x11,0x15,0x19,0x33,0xd5,0x19,0x11,0x11,0x11,0x51,0x21,0x0,0x4,0xfe,0x80,0x80,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0xb,0x7c,0x48,0x4f,0x49,0x49,0x49,0x4f,0x49,0x49,0x79,0x4f,0x0,0x0,0x7,0x38,0xc0,0x40,0x44,0xfe,0x50,0x50,0x54,0xfe,0x50,0x50,0x54,0xfe,0x40,0x48,0xfc,
++0x10,0x10,0x10,0x13,0xfa,0x14,0x11,0x1a,0x31,0xd0,0x10,0x11,0x12,0x12,0x52,0x21,0x40,0x20,0x0,0xfe,0x2,0x94,0x8,0x4,0xf8,0x10,0x60,0x80,0x0,0x2,0x2,0xfe,
++0x0,0x8,0x7c,0x4b,0x48,0x48,0x4f,0x48,0x48,0x48,0x4f,0x78,0x48,0x0,0xf,0x0,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x10,0x11,0x7c,0x54,0x57,0x54,0x54,0x7c,0x51,0x14,0x1c,0xf4,0x43,0x0,0x20,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x40,0x30,0x17,0x80,0x60,0x2f,0x8,0x10,0x20,0xe7,0x20,0x20,0x20,0x2f,0x20,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x10,0x11,0xfc,0x24,0x27,0x24,0x24,0x44,0x29,0x10,0x28,0x44,0x87,0x0,0x20,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x7f,0x8,0x8,0xf,0x8,0x8,0xa,0x11,0x11,0x10,0x24,0x28,0x30,0x60,0x0,0x8,0xfc,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x22,0x22,0x1e,0x0,
++0x40,0x30,0x10,0x7,0xfc,0x8,0x10,0x37,0x58,0x94,0x11,0x11,0x12,0x14,0x10,0x10,0x40,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0xe0,0xd0,0x48,0x4e,0x44,0x40,0x40,0x40,
++0x0,0x7f,0x3,0x5,0x19,0x61,0x1,0x7f,0x1,0x9,0x9,0x9,0x9,0x9,0xff,0x0,0x8,0xfc,0x0,0x60,0x18,0x8,0x0,0xfc,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,
++0x8,0x8,0x8,0x10,0x1f,0x21,0x21,0x62,0x92,0xa,0x4,0x8,0x10,0x20,0x40,0x0,0x40,0x40,0x40,0x40,0x40,0x60,0x50,0x48,0x46,0x42,0x40,0x40,0x40,0x40,0x40,0x40,
++0x8,0xfc,0x3,0x2,0x7d,0x49,0x49,0x49,0x7a,0x2,0x4d,0x48,0x10,0xf9,0x2,0x4,0x40,0x20,0xfe,0x2,0x4,0xde,0x54,0x54,0x54,0x54,0x5c,0x94,0x90,0x12,0xe,0x0,
++0x1,0xff,0x4,0x14,0x34,0x44,0x3f,0x0,0x1f,0x10,0x1f,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x40,0x50,0x4c,0x44,0xf0,0x10,0xf0,0x0,0xf8,0x8,0x8,0x88,0x50,0x20,
++0x40,0x3f,0x10,0x2,0x86,0x68,0x27,0x8,0x17,0x24,0xe7,0x20,0x20,0x20,0x20,0x20,0x44,0xfe,0xa0,0xa8,0xa6,0xa2,0xf8,0x8,0xf8,0x0,0xfc,0x4,0x4,0x44,0x28,0x10,
++0x8,0xfd,0x10,0x10,0x10,0x13,0x7c,0x10,0x10,0x10,0x10,0x1c,0xf1,0x41,0x2,0x4,0x8,0xfc,0x0,0x0,0x4,0xfe,0x90,0x90,0x90,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x8,0x7d,0x0,0x0,0x4,0xfe,0x28,0x28,0x28,0x28,0x28,0x2a,0x2c,0x48,0x80,0x1,0x4,0xfe,0x10,0x24,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0xa4,0x58,0x44,0x82,0x2,
++0x2,0x2,0x2,0x2,0x7f,0x2,0x2,0xe,0x2,0x5,0x4,0x4,0x8,0x8,0x30,0xc0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0xa0,0xa2,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x13,0x16,0x5a,0x51,0x50,0x90,0x13,0x10,0x10,0x28,0x25,0x45,0x82,0x4,0x40,0x20,0xfe,0x2,0x14,0xf8,0x0,0x8,0xfc,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x2,0x1,0x7f,0x40,0x80,0x1f,0x0,0x0,0x7f,0x4,0x4,0x4,0x8,0x8,0x10,0x60,0x0,0x0,0xfe,0x2,0x24,0xf0,0x0,0x8,0xfc,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x8,0xff,0x12,0x15,0x21,0x21,0x79,0xaa,0x2a,0x2d,0x28,0x28,0x39,0x22,0x4,0x40,0x20,0xfe,0x2,0x4,0xde,0x54,0x54,0x54,0x54,0x5c,0x94,0x90,0x12,0xe,0x0,
++0x10,0x10,0x11,0x12,0xfc,0x13,0x12,0x1a,0x32,0xd3,0x12,0x10,0x10,0x11,0x52,0x24,0x80,0x80,0xf8,0x10,0x24,0xfe,0x44,0x44,0x44,0xfc,0x64,0xa0,0xa2,0x22,0x1e,0x0,
++0x0,0x8,0x7d,0x4a,0x4c,0x4b,0x4a,0x7a,0x4a,0x4b,0x4a,0x48,0x78,0x49,0x2,0x4,0x80,0x80,0xf8,0x10,0x24,0xfe,0x44,0x44,0x44,0xfc,0x64,0xa0,0xa2,0x22,0x1e,0x0,
++0x10,0x10,0x21,0x7d,0x46,0x44,0x44,0x7c,0x47,0x44,0x44,0x44,0x7d,0x45,0x2,0x4,0x40,0x20,0xfe,0x2,0x14,0xf8,0x0,0x4,0xfe,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x20,0x20,0x27,0x34,0xaa,0xa2,0xa3,0xa4,0x24,0x24,0x2a,0x21,0x21,0x22,0x24,0x28,0x80,0x40,0xfe,0x2,0x4,0x0,0xbc,0xa4,0xa4,0xb4,0xa8,0x20,0x22,0x22,0x1e,0x0,
++0x2,0x1,0x7f,0x40,0x90,0x1e,0x12,0x12,0x22,0x32,0x4a,0x4,0x8,0x10,0x20,0x40,0x0,0x0,0xfe,0x2,0x4,0xf8,0x88,0x88,0x88,0xa8,0x90,0x80,0x82,0x82,0x7e,0x0,
++0x20,0x20,0x23,0x22,0xfd,0x49,0x49,0x49,0x4a,0x92,0x55,0x20,0x50,0x49,0x82,0x4,0x40,0x20,0xfe,0x2,0x4,0xde,0x54,0x54,0x54,0x5c,0x54,0x90,0x92,0x12,0xe,0x0,
++0x0,0x0,0xff,0x2,0x2,0x2,0x3,0x2,0x2,0x4,0x4,0x4,0x8,0x10,0x20,0x40,0x0,0x4,0xfe,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xa0,0x40,
++0x8,0x7c,0x4b,0x4a,0x4d,0x79,0x49,0x49,0x4a,0x7a,0x4d,0x48,0x48,0x49,0x4a,0x9c,0x40,0x20,0xfe,0x2,0x4,0xdc,0x54,0x54,0x54,0x54,0x5c,0x94,0x90,0x12,0xe,0x0,
++0x0,0x40,0x37,0x10,0x80,0x60,0x20,0xb,0x10,0x20,0xe0,0x20,0x20,0x20,0x2f,0x20,0x0,0x8,0xfc,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x7f,0x1,0x1,0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x2,0x1,0x1,0x0,0xff,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xf,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x30,0x38,0x57,0x50,0x90,0x10,0x10,0x10,0x1f,0x10,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x7f,0x40,0x42,0x62,0x54,0x54,0x48,0x48,0x54,0x52,0x62,0x61,0x42,0x40,0x40,0x4,0xfe,0x4,0xc,0x8c,0x54,0x54,0x24,0x24,0x54,0x4c,0x8c,0x4,0x4,0x14,0x8,
++0x8,0x8,0x10,0x27,0x40,0x8,0x8,0x10,0x37,0x50,0x90,0x10,0x10,0x10,0x1f,0x10,0x80,0x40,0x8,0xfc,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x0,0x7,0x78,0x48,0x48,0x48,0x78,0x4f,0x48,0x48,0x48,0x78,0x40,0xf,0x0,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x10,0xa,0xff,0x20,0x20,0x26,0x38,0x20,0x0,0x3f,0x1,0x1f,0x1,0x1,0xff,0x0,0x4,0x7e,0x44,0x7c,0x44,0x7c,0x44,0x8c,0x0,0xf8,0x0,0xf0,0x0,0x4,0xfe,0x0,
++0x2,0x1,0xff,0x10,0x10,0x10,0x10,0x1f,0x0,0x2,0x11,0x50,0x50,0x90,0xf,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x84,0x92,0x12,0xf0,0x0,
++0x2,0x1,0x7f,0x10,0x10,0x10,0x1f,0x2,0x2,0xff,0x4,0x8,0x4,0x3,0x4,0x38,0x0,0x8,0xfc,0x0,0x0,0x20,0xf0,0x0,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x0,0x0,0x0,0x3f,0x20,0x3f,0x24,0x24,0x3f,0x29,0x31,0x2a,0x24,0x4a,0x91,0x2,0x80,0xa0,0x90,0xfc,0x80,0x80,0x84,0x44,0xc8,0x48,0x30,0x20,0x60,0x92,0xa,0x6,
++0x1,0x21,0x3f,0x0,0x7c,0x11,0xff,0x39,0x55,0x11,0xfd,0x24,0x48,0x30,0x29,0x46,0x0,0x8,0xf8,0x20,0x44,0xfe,0x24,0xfc,0x24,0xfc,0x44,0x60,0xa8,0xa2,0x22,0x1e,
++0x12,0x12,0x2a,0x4a,0x8a,0x1f,0x20,0x7f,0xa0,0x2f,0x29,0x29,0x29,0x29,0x30,0x20,0x10,0x10,0x90,0xa4,0xbe,0xc4,0x24,0xa8,0x28,0x28,0x10,0x50,0xa8,0x28,0x46,0x84,
++0x8,0xf,0x10,0x20,0x5f,0x10,0x10,0x13,0x12,0x12,0x12,0x12,0x22,0x22,0x41,0x80,0x0,0xe0,0x40,0x88,0xfc,0x0,0x10,0xf8,0x10,0x10,0x50,0x20,0x2,0x2,0xfe,0x0,
++0x1,0x1,0x1,0xff,0x1,0x1,0x3f,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x4,0xfe,0x0,0x10,0xf8,0x0,0x4,0xfe,0x4,0x4,0x4,0x28,0x10,0x0,
++0x0,0x40,0x2f,0x20,0x0,0x7,0xe0,0x20,0x2f,0x20,0x20,0x20,0x20,0x50,0x8f,0x0,0x80,0x88,0xfc,0x80,0x90,0xf8,0x80,0x88,0xfc,0x88,0x88,0xa8,0x90,0x86,0xfc,0x0,
++0x10,0x10,0x11,0x12,0xff,0x12,0x32,0x3a,0x56,0x52,0x92,0x12,0x12,0x14,0x14,0x18,0x80,0xf8,0x10,0x24,0xfe,0x0,0x8,0xfc,0x88,0x88,0xa8,0x90,0x82,0x82,0x7e,0x0,
++0x0,0x7f,0x41,0x41,0x5f,0x41,0x4f,0x41,0x5f,0x41,0x41,0x41,0x41,0x41,0x7f,0x40,0x4,0xfe,0x4,0x24,0xf4,0x4,0xe4,0x4,0xf4,0x14,0x14,0x54,0x24,0x4,0xfc,0x4,
++0x0,0x8,0x7c,0x49,0x49,0x4b,0x4d,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0x1,0x1,0x80,0xa0,0x94,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x10,0x14,0xfe,0x0,0x0,
++0x10,0x10,0x10,0x11,0x59,0x57,0x55,0x91,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x80,0xa0,0x94,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x10,0x14,0xfe,0x0,0x0,
++0x0,0x10,0xc,0x4,0x0,0xff,0x1,0x1,0x2,0x2,0x4,0x8,0x10,0x20,0x40,0x0,0x80,0x80,0x80,0x80,0x84,0xfe,0x4,0x4,0x4,0x84,0x64,0x24,0x4,0x4,0x28,0x10,
++0x0,0x44,0x24,0x24,0x88,0x5f,0x42,0x4,0x28,0x5f,0xc0,0x40,0x43,0x5c,0x48,0x40,0x40,0x50,0x44,0xfe,0x90,0x90,0xfc,0x90,0x90,0xfc,0x90,0x90,0x94,0xfe,0x80,0x80,
++0x10,0x10,0x20,0x21,0x49,0xfb,0x15,0x21,0x41,0xfd,0x1,0x1,0x1d,0xe1,0x41,0x1,0x80,0xa0,0x94,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x10,0x14,0xfe,0x0,0x0,
++0x8,0x8,0xff,0x9,0x1,0x7f,0x1,0x3f,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x20,0x24,0xfe,0x20,0x8,0xfc,0x0,0xf8,0x0,0xfc,0x4,0x4,0x4,0x28,0x10,0x0,
++0x4,0x4,0xff,0x4,0x1f,0x1,0x7f,0x5,0x19,0x2,0xff,0x4,0x8,0x7,0x4,0x18,0x40,0x44,0xfe,0x40,0xf0,0x0,0xfc,0x40,0x30,0x4,0xfe,0x20,0x40,0x80,0x60,0x10,
++0x0,0x3f,0x1,0x1,0xff,0x5,0x9,0x31,0x5,0xff,0x4,0x8,0x4,0x3,0xc,0x30,0x30,0xc0,0x0,0x4,0xfe,0x40,0x38,0x10,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x8,0x8,0x8,0x17,0x10,0x30,0x57,0x90,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x40,0x44,0xfe,0x44,0x44,0x54,0x48,0x40,0x40,
++0x8,0xa,0x9,0x10,0x17,0x30,0x50,0x90,0x10,0x10,0x11,0x11,0x12,0x14,0x18,0x10,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0xc4,0xa4,0x14,0x4,0x4,0x4,0x28,0x10,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x2f,0x21,0x21,0x2f,0x21,0x21,0x5f,0x41,0x81,0x0,0x8,0xfc,0x8,0x8,0xf8,0x20,0xf0,0x8,0xfc,0x0,0x8,0xfc,0x0,0x2,0x2,0xfe,
++0x10,0x10,0x20,0x27,0x48,0xf8,0x17,0x20,0x40,0xff,0x0,0x0,0x1c,0xe0,0x40,0x0,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x40,0x44,0xfe,0x44,0x44,0x54,0x48,0x40,0x40,
++0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0xff,0x3,0x5,0x9,0x11,0x21,0x41,0x1,0x1,0x0,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x80,0x40,0x20,0x10,0xe,0x4,0x0,0x0,
++0x8,0x8,0xff,0x8,0x3f,0x21,0x3f,0x20,0x3f,0x20,0x3f,0x44,0x56,0x95,0x24,0xc,0x20,0x24,0xfe,0x20,0x8,0x8,0x8,0xfe,0x8,0x48,0x28,0x28,0x8,0x8,0x28,0x10,
++0x0,0x8,0x7c,0x4b,0x48,0x48,0x48,0x4f,0x48,0x48,0x49,0x7a,0x44,0x8,0x0,0x0,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0xe0,0x50,0x50,0x4e,0x44,0x40,0x40,
++0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x0,0xff,0x10,0x12,0x11,0x10,0x14,0x18,0x10,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,0x4,0xfe,0x0,0x20,0x40,0x80,0x60,0x1c,0x8,
++0x0,0x3f,0x21,0x3f,0x21,0x3f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x10,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x0,0xb,0x7e,0x4a,0x4b,0x4a,0x4a,0x4b,0x48,0x4f,0x4a,0x7a,0x4a,0x2,0x3,0x2,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x0,0xfe,0x88,0x50,0x20,0x90,0xe,0x4,
++0x6,0xf8,0x11,0x11,0xff,0x39,0x55,0x91,0x11,0xfe,0x24,0x44,0x28,0x11,0x2a,0x44,0x40,0x84,0xfe,0x24,0x24,0xfc,0x24,0x44,0xfc,0x40,0x60,0xa0,0xa8,0x22,0x22,0x1e,
++0x8,0x8,0x8,0x10,0x17,0x30,0x52,0x92,0x11,0x11,0x10,0x10,0x10,0x1f,0x10,0x10,0x80,0x40,0x40,0x8,0xfc,0x0,0x8,0x8,0x10,0x10,0x90,0xa0,0x24,0xfe,0x0,0x0,
++0x0,0x47,0x34,0x17,0x84,0x67,0x20,0xb,0x12,0x23,0xe2,0x23,0x22,0x22,0x22,0x22,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x47,0x24,0x27,0x4,0x7,0xe0,0x23,0x22,0x23,0x22,0x23,0x2a,0x32,0x22,0x2,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x1,0x3f,0x21,0x21,0x3f,0x20,0x3f,0x20,0x3f,0x24,0x24,0x55,0x54,0xa4,0x14,0x8,0x8,0x88,0x8,0x8,0x8,0xfe,0x8,0x48,0x28,0x28,0x8,0x8,0x88,0x8,0x28,0x10,
++0x3f,0x21,0x3f,0x20,0x3f,0x20,0x3f,0x24,0x56,0x95,0x2c,0x2,0x51,0x50,0x90,0xf,0x8,0x8,0x8,0xfe,0x8,0x48,0x28,0x28,0x8,0x28,0x10,0x0,0x84,0x92,0x12,0xf0,
++0x0,0x0,0x7f,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0xff,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0x28,0x10,0x0,0x0,0x4,0xfe,0x0,
++0x1,0x0,0x1f,0x10,0x93,0x52,0x53,0x12,0x33,0x50,0xd7,0x14,0x24,0x24,0x4f,0x0,0x0,0x84,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0xa4,0xa4,0xa4,0xfe,0x0,
++0x0,0x43,0x32,0x12,0x83,0x62,0x22,0xb,0x10,0x27,0xe4,0x24,0x24,0x24,0x2f,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xfc,0xa4,0xa4,0xa4,0xa4,0xfe,0x0,
++0x10,0x10,0x10,0x14,0x7f,0x54,0x54,0x54,0x54,0x7c,0x50,0x14,0x1e,0xe2,0x41,0x2,0x40,0x20,0x20,0x4,0xfe,0x88,0x88,0x88,0x50,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x2,0x1,0x1,0xff,0x10,0x8,0x8,0x4,0x4,0x2,0x1,0x2,0x4,0x8,0x30,0xc0,0x0,0x0,0x4,0xfe,0x10,0x10,0x20,0x20,0x40,0x80,0x0,0x80,0x60,0x10,0xe,0x4,
++0x20,0x1b,0x48,0x40,0x5f,0x44,0x47,0x44,0x47,0x44,0x44,0x5f,0x40,0x40,0x40,0x40,0x4,0xfe,0x4,0x24,0xf4,0x44,0xc4,0x44,0xc4,0x44,0x44,0xf4,0x44,0x44,0x54,0x8,
++0x10,0x10,0x20,0x20,0x4f,0xfa,0x11,0x21,0x40,0xfc,0x0,0x0,0x1c,0xe1,0x42,0x4,0x80,0x40,0x40,0x4,0xfe,0x8,0x10,0x10,0xa0,0xa0,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x1,0x9,0x7d,0x49,0x4a,0x4c,0x48,0x48,0x49,0x49,0x49,0x7a,0x4c,0x1,0x2,0x0,0x0,0x0,0x4,0xfe,0xa4,0xa4,0xa4,0xa4,0x24,0x24,0x44,0x44,0x84,0x4,0x28,0x10,
++0x8,0x1c,0xf0,0x11,0x12,0xff,0x10,0x33,0x38,0x57,0x50,0x95,0x15,0x19,0x10,0x10,0x40,0x40,0xf8,0x10,0x24,0xfe,0x4,0xfc,0x4,0xfc,0x40,0x24,0x22,0xa,0xf8,0x0,
++0x2,0x1,0x7f,0x8,0x4,0x3,0x1c,0xe2,0x1f,0x1,0x2,0x3f,0x9,0x11,0x25,0x2,0x0,0x8,0xfc,0x20,0x40,0x80,0x70,0x4e,0x80,0x20,0x10,0xf0,0x20,0x18,0x8,0x0,
++0x20,0x1b,0x8,0x40,0x40,0x4f,0x48,0x48,0x48,0x48,0x48,0x4f,0x48,0x40,0x40,0x40,0x4,0xfe,0x4,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0x24,0xe4,0x24,0x4,0x14,0x8,
++0x0,0x10,0x79,0x52,0x54,0x59,0x53,0x50,0x57,0x50,0x54,0x72,0x54,0x0,0x2,0x1,0x20,0xa0,0x10,0x48,0x86,0x14,0xf8,0x0,0xbc,0x84,0xa4,0x94,0xa4,0x84,0x94,0x8,
++0x4,0x4,0x9,0x12,0xe4,0xf,0x0,0x3e,0x2,0x22,0x12,0xa,0x12,0x22,0xa,0x4,0x40,0x40,0x20,0x10,0x4e,0xe0,0x8,0xfc,0x8,0x88,0x48,0x28,0x48,0x88,0x28,0x10,
++0x4,0x4,0x9,0x12,0xe4,0xf,0x0,0x7f,0x8,0x8,0xf,0x9,0x8,0xb,0x1c,0x0,0x40,0x40,0x20,0x10,0x4e,0xe0,0x8,0xfc,0x0,0x20,0xf0,0x20,0xa0,0x22,0x22,0x1e,
++0x10,0x10,0x14,0x12,0xf8,0x10,0x16,0x1a,0x32,0xd2,0x12,0x12,0x12,0x15,0x58,0x20,0x8,0x8,0x8,0x8,0xfe,0x8,0x8,0x48,0x28,0x28,0x8,0x8,0x28,0x16,0xfc,0x0,
++0x10,0x10,0x10,0x14,0x7e,0x54,0x54,0x55,0x7d,0x55,0x11,0x15,0x1d,0xe5,0x41,0x1,0x8,0xfc,0x88,0x88,0x88,0xf8,0x24,0xfe,0x24,0x24,0x54,0x8c,0x4,0x4,0x14,0x8,
++0x0,0x43,0x32,0x12,0x82,0x63,0x20,0xf,0x14,0x24,0xe4,0x24,0x25,0x24,0x24,0x24,0x8,0xfc,0x8,0x8,0x8,0xf8,0x44,0xfe,0x44,0x44,0x44,0xa4,0x14,0x4,0x14,0x8,
++0x2,0x1,0x7f,0x44,0x88,0x1f,0x28,0x8,0xf,0x1,0x3f,0x21,0x22,0x2c,0x20,0x20,0x0,0x0,0xfe,0x42,0x24,0xf0,0x28,0x20,0xe0,0x8,0xfc,0x8,0x88,0x68,0x28,0x10,
++0x4,0xe,0x78,0x8,0x8,0xff,0x8,0x8,0xa,0xc,0x18,0x68,0x9,0xa,0x28,0x10,0x80,0xa0,0x90,0x90,0x84,0xfe,0x80,0x90,0x90,0x60,0x40,0xa0,0x20,0x14,0x14,0xc,
++0x10,0x14,0xfe,0x10,0x7c,0x45,0x7e,0x44,0x7d,0x10,0xfe,0x11,0x10,0x10,0x10,0x10,0x20,0x20,0x50,0x50,0x88,0x16,0x94,0x50,0x10,0x94,0x1e,0xf0,0x10,0x10,0x10,0x10,
++0x2,0x7f,0x48,0x48,0x48,0x7e,0x42,0x42,0x42,0x7e,0x48,0x48,0x4a,0x7f,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0x60,0x50,0x48,0x44,0x44,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x13,0x12,0x12,0xff,0x12,0x17,0x1a,0x32,0xd3,0x12,0x12,0x14,0x14,0x5b,0x20,0x8,0xfc,0x8,0x8,0xf8,0x0,0xfc,0x40,0x88,0xfc,0x20,0xf8,0x20,0x24,0xfe,0x0,
++0x0,0x40,0x37,0x10,0x80,0x60,0x2f,0x8,0x10,0x20,0xe0,0x20,0x21,0x22,0x24,0x28,0x8,0x3c,0xc0,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x0,0x0,0x7f,0x1,0x11,0x11,0x11,0x11,0x29,0x29,0x45,0x85,0x1,0x1,0xff,0x0,0x0,0x8,0xfc,0x0,0x10,0x10,0x10,0x10,0x28,0x28,0x44,0x84,0x0,0x4,0xfe,0x0,
++0x0,0x8,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x48,0x78,0x47,0x0,0x0,0x0,0x40,0x88,0xfc,0x8,0x8,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x10,0x11,0x1d,0x21,0x21,0x7d,0x91,0x11,0x7d,0x10,0x10,0x17,0x18,0x10,0x0,0x40,0x88,0xfc,0x8,0x8,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x2,0x4,0x1f,0x10,0x10,0x10,0x10,0x10,0x10,0x1f,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x20,0xf0,0x20,0x20,0x20,0xa0,0x40,0x4,0xfe,0x4,0x24,0xf4,0x4,0x28,0x10,
++0x0,0x23,0x18,0x8,0x80,0x6f,0x21,0x9,0x11,0x23,0xe0,0x20,0x20,0x20,0x20,0x20,0x8,0xfc,0x0,0x0,0x4,0xfe,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x88,0x50,0x20,
++0x40,0x37,0x10,0x0,0x2,0xe2,0x22,0x22,0x25,0x29,0x20,0x28,0x30,0x20,0x1f,0x0,0x8,0xfc,0x40,0x40,0x48,0x48,0x48,0x48,0x54,0x64,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x3f,0x20,0x3f,0x20,0x2f,0x21,0x22,0x27,0x20,0x20,0x3f,0x40,0x40,0xbf,0x0,0x8,0xfc,0x8,0xf8,0x0,0xfc,0x0,0x20,0xf0,0x80,0x88,0xfc,0x80,0x84,0xfe,0x0,
++0x0,0x3f,0x2,0x2,0x2,0x2,0x7f,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x20,0xf0,0x0,0x0,0x0,0x8,0xfc,0x80,0x80,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x2,0x2,0x7f,0x2,0x2,0x4,0x4,0x8,0x10,0x60,0x40,0x44,0xfe,0x40,0x0,0xf0,0x0,0x8,0xfc,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x10,0x13,0x10,0x10,0xfd,0x10,0x39,0x35,0x57,0x50,0x91,0x11,0x11,0x11,0x11,0x11,0x8,0xfc,0x80,0x88,0xfc,0x88,0x8,0x8,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x7f,0x4,0x4,0x3f,0x8,0x8,0xff,0x0,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x8,0xfc,0x0,0x20,0xf0,0x20,0x24,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x0,0x1f,0x10,0x10,0x1f,0x0,0x0,0x3f,0x1,0x1,0xff,0x2,0x2,0x4,0x18,0x60,0x10,0xf8,0x10,0x10,0xf0,0x0,0x10,0xf8,0x0,0x4,0xfe,0x80,0x40,0x20,0x1c,0x8,
++0x0,0x1f,0x11,0x11,0x11,0x11,0x11,0xff,0x11,0x11,0x22,0x22,0x3f,0x8,0x10,0x20,0x10,0xf8,0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0xfc,0x10,0x50,0x20,
++0x0,0x2,0x3f,0x0,0x0,0xff,0x4,0x4,0x27,0x24,0x24,0x24,0x27,0xf8,0x40,0x0,0x40,0x50,0x48,0x48,0x40,0xfe,0x40,0x40,0x40,0x40,0x20,0x20,0xa0,0x12,0xa,0x6,
++0x0,0x0,0x7f,0x2,0x2,0x2,0x2,0x3f,0x4,0x4,0x4,0x8,0x8,0x8,0xff,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x10,0xfc,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x0,
++0x10,0x13,0x10,0x10,0xfd,0x10,0x15,0x19,0x37,0xd0,0x11,0x11,0x11,0x11,0x51,0x21,0x8,0xfc,0x80,0x88,0xfc,0x88,0x8,0x8,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0xf,0x11,0x11,0x21,0x41,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x20,0x3f,0x52,0x92,0x7f,0x12,0x12,0xff,0x10,0x1e,0x22,0x52,0xd,0x18,0xe0,0x0,0x8,0xfc,0x90,0x90,0xfc,0x90,0x94,0xfe,0x10,0xfc,0x90,0x94,0xfe,0x10,0x10,0x10,
++0x10,0x10,0x17,0x20,0x20,0x60,0xa0,0x27,0x21,0x21,0x21,0x22,0x22,0x22,0x3f,0x20,0x0,0x8,0xfc,0x80,0x80,0x80,0x88,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0xfe,0x0,
++0x9,0x9,0x9,0x12,0x15,0x31,0x51,0x91,0x1f,0x12,0x12,0x12,0x13,0x10,0x10,0x10,0x0,0x8,0xfc,0x0,0xf8,0x48,0x28,0x8,0xfe,0x48,0x28,0x8,0xfc,0x8,0x28,0x10,
++0x10,0x10,0x11,0x11,0x11,0xfd,0x11,0x11,0x11,0x11,0x10,0x1c,0xf3,0x40,0x0,0x0,0x40,0x88,0xfc,0x8,0x8,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x0,0x0,0x0,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x83,0x0,0x80,0xa0,0x90,0xfc,0x80,0x80,0x84,0x44,0x48,0x48,0x30,0x20,0x60,0x92,0xa,0x6,
++0x3f,0x1,0x7f,0x51,0x89,0x14,0x7,0xc,0x13,0xc,0xf2,0xf,0x2,0x4,0x8,0x30,0xf8,0x0,0xfe,0x12,0x24,0x10,0xe0,0x40,0x80,0x60,0x1e,0xe4,0x20,0x20,0xa0,0x40,
++0x0,0xb,0x7c,0x48,0x49,0x48,0x49,0x79,0x4f,0x48,0x49,0x49,0x79,0x49,0x1,0x1,0x8,0xfc,0x80,0x88,0xfc,0x88,0x8,0x8,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x11,0x11,0x51,0x51,0x7b,0x54,0x90,0x1c,0x31,0xd1,0x12,0x12,0x14,0x10,0x11,0x10,0x0,0x0,0x0,0x4,0xfe,0xa4,0xa4,0xa4,0x24,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x10,0x10,0x10,0x1f,0x24,0x44,0x84,0x8,0x8,0x8,0x10,0x11,0x21,0x42,0x4,0x8,0x0,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x84,0x84,0x84,0x4,0x4,0x4,0x28,0x10,
++0x8,0x8,0xf,0x18,0x26,0x41,0x6,0x1a,0xe2,0x1f,0x2,0x2,0x4,0x4,0x8,0x30,0x0,0x0,0xf0,0x20,0xc0,0x0,0xc0,0x30,0xe,0xf4,0x10,0x10,0x10,0x10,0xa0,0x40,
++0x10,0x13,0x10,0x10,0x59,0x54,0x51,0x91,0x17,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x8,0xfc,0x80,0x88,0xfc,0x88,0x8,0x8,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x43,0x32,0x12,0x3,0x0,0xe7,0x20,0x20,0x2f,0x20,0x20,0x28,0x31,0x22,0x4,0x8,0xfc,0x8,0x8,0xf8,0x0,0xfc,0x40,0x44,0xfe,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x4,0x4,0x3f,0x4,0x4,0x4,0xff,0x0,0xf,0x8,0x8,0xf,0x8,0x8,0xf,0x8,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x20,0xf0,0x20,0x20,0xe0,0x20,0x20,0xe0,0x20,
++0x2,0x7f,0x44,0x44,0x5f,0x51,0x51,0x5f,0x44,0x44,0x7f,0x0,0x24,0x22,0x42,0x80,0x4,0x7e,0x44,0x44,0x44,0x7c,0x40,0x40,0x44,0x44,0x3c,0x0,0x88,0x44,0x42,0x2,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x12,0x12,0x14,0x10,0x8,0x1c,0xe0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0x0,0xff,0x4,0x4,0x4,0x7f,0x44,0x44,0x44,0x44,0x48,0x50,0x40,0x7f,0x40,0x0,0x4,0xfe,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x34,0x4,0x4,0xfc,0x4,
++0x0,0xb,0xfc,0x10,0x10,0x21,0x25,0x7f,0xa5,0x25,0x25,0x25,0x25,0x3d,0x25,0x1,0x4,0xfe,0x50,0x50,0x54,0xfe,0x54,0x54,0x54,0x54,0x5c,0x84,0x4,0x4,0xfc,0x4,
++0x0,0x4,0xfe,0x10,0x10,0x20,0x20,0x7d,0xa6,0x24,0x24,0x24,0x24,0x3c,0x24,0x1,0x40,0x40,0x40,0x7e,0x42,0x82,0x84,0x44,0x24,0x18,0x8,0x10,0x20,0x40,0x80,0x0,
++0x1,0x9,0x7d,0x49,0x4f,0x49,0x4b,0x7b,0x4d,0x49,0x49,0x49,0x79,0x49,0x1,0x1,0x0,0x6,0x38,0x20,0xe0,0x20,0xbe,0x68,0x28,0x28,0x28,0x28,0x48,0x48,0x88,0x8,
++0x0,0x8,0x7f,0x48,0x4b,0x48,0x4b,0x4a,0x4b,0x49,0x4f,0x78,0x4b,0x2,0x2,0x3,0x40,0x48,0xfc,0x40,0xf8,0x0,0xf8,0x8,0xf8,0x10,0xfe,0x8,0xfc,0x8,0x8,0xf8,
++0x0,0x7,0x7a,0x4a,0x4a,0x4a,0x4b,0x4a,0x4a,0x4a,0x4a,0x7a,0x4c,0x8,0x11,0x2,0x8,0xfc,0x8,0x8,0x10,0x20,0x3c,0x84,0x88,0x48,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x11,0x11,0x1d,0x21,0x21,0x7d,0x91,0x11,0x7d,0x12,0x10,0x15,0x1a,0x10,0x0,0x8,0xfc,0x8,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x54,0x54,0xa4,0x24,0x44,0xa8,0x10,
++0x10,0x10,0x57,0x50,0x7c,0x50,0x97,0x1a,0x32,0xd2,0x12,0x12,0x13,0x12,0x13,0x12,0x0,0x4,0xfe,0x90,0x90,0x94,0xfe,0x94,0x94,0x94,0x94,0x8c,0x4,0x4,0xfc,0x4,
++0x9,0x1c,0xf0,0x10,0x11,0xfc,0x13,0x38,0x35,0x51,0x53,0x95,0x11,0x10,0x10,0x10,0x4,0xd8,0x20,0xd8,0x4,0x80,0xfe,0xa0,0x24,0xfe,0x24,0x24,0x34,0x28,0x20,0x20,
++0x2,0x4,0x1f,0x10,0x10,0x1f,0x10,0x1f,0x10,0x10,0x1f,0x2,0x51,0x50,0x90,0xf,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0xf0,0x10,0x10,0xf0,0x0,0x84,0x92,0x12,0xf0,
++0x8,0x6,0x1,0x6,0x3a,0x2,0xff,0x4,0x8,0x1f,0x28,0xc8,0x8,0x8,0x0,0x0,0x30,0xc0,0x0,0xc0,0x38,0x0,0xfe,0x80,0x88,0xfc,0x88,0x88,0xa8,0x90,0x80,0x80,
++0x0,0x3f,0x11,0x9,0x5,0xff,0x3,0x5,0x9,0x31,0x0,0x12,0x51,0x50,0x90,0xf,0xf8,0x0,0x10,0x20,0x44,0xfe,0x80,0x60,0x1c,0x8,0x0,0x0,0x84,0x92,0x12,0xf0,
++0x0,0x78,0x4f,0x48,0x49,0x7a,0x48,0x49,0x4e,0x7a,0x49,0x48,0x49,0x4a,0x48,0x98,0x40,0x44,0xfe,0xe0,0x58,0x48,0xa0,0x10,0x4e,0x48,0x50,0xe0,0x58,0x48,0x40,0xc0,
++0x2,0x2,0x2,0x7,0x4,0x8,0x10,0x24,0x43,0x1,0x0,0x1,0x2,0x4,0x18,0x60,0x0,0x0,0x8,0xfc,0x8,0x8,0x10,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,
++0x11,0x11,0x17,0x11,0x59,0x55,0x5f,0x90,0x13,0x12,0x12,0x13,0x12,0x12,0x13,0x12,0x10,0x10,0xfc,0x10,0x10,0x14,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x13,0x12,0x56,0x5b,0x52,0x93,0x12,0x12,0x13,0x28,0x2a,0x46,0x8a,0x1,0x40,0x88,0xfc,0x8,0x8,0xf8,0x8,0xf8,0x8,0x8,0xf8,0x80,0x60,0x2c,0xa,0xf8,
++0x11,0x10,0x10,0x14,0x59,0x50,0x57,0x90,0x11,0x11,0x13,0x2d,0x29,0x45,0x80,0x0,0x4,0xd8,0x20,0xd8,0x4,0x80,0xfe,0xa0,0x24,0xfe,0x24,0x24,0x34,0x28,0x20,0x20,
++0x40,0x37,0x12,0x1,0x80,0x61,0x23,0x8,0x10,0x27,0xe0,0x3f,0x20,0x21,0x22,0x2c,0x1c,0xe0,0x48,0x50,0x80,0x10,0xf8,0x40,0x84,0xfc,0x40,0xfe,0xa0,0x10,0xe,0x4,
++0x20,0x18,0x8,0x0,0x81,0x61,0x22,0xb,0x14,0x20,0xe0,0x20,0x20,0x21,0x22,0x2c,0x80,0x80,0x84,0xfe,0x4,0x4,0x4,0x8,0xc8,0x50,0x20,0x40,0x80,0x0,0x0,0x0,
++0x0,0x3f,0x20,0x3f,0x24,0x22,0x24,0x28,0x24,0x27,0x28,0x3f,0x40,0x40,0x80,0x0,0x8,0xfc,0x8,0xf8,0x90,0xa0,0x98,0x88,0x80,0xf0,0x84,0xfe,0x80,0x80,0x80,0x80,
++0x21,0x22,0x27,0x24,0xff,0x24,0x77,0x62,0xbf,0x24,0x27,0x24,0x24,0x2a,0x31,0x20,0x10,0x10,0x90,0x94,0xbe,0xc4,0xa4,0x28,0xe8,0x28,0x90,0x90,0xa8,0xa8,0x46,0x84,
++0x2,0x2,0x7f,0x4,0x4,0xb,0x10,0x22,0x1,0xff,0x5,0x9,0x38,0xca,0xc,0x8,0x40,0x28,0xfc,0x80,0xf0,0x84,0x7c,0x0,0x4,0xfe,0x8,0x10,0xa0,0x60,0x1c,0x8,
++0x1,0x0,0x3f,0x22,0x22,0x3f,0x22,0x22,0x23,0x20,0x2f,0x28,0x48,0x48,0x88,0x0,0x0,0x88,0xfc,0x20,0x24,0xfe,0x20,0x20,0xe0,0x88,0xfc,0x88,0x88,0xa8,0x90,0x80,
++0x0,0x0,0xff,0x0,0x8,0x4,0x2,0x2,0x0,0x3,0xc,0x30,0x10,0x0,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x24,0xc4,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x10,0x10,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x10,0x29,0x47,0x85,0x0,0x40,0x84,0xfe,0x4,0x4,0xfc,0x4,0xfc,0x4,0x4,0xfc,0x40,0x20,0x2c,0xa,0xf8,
++0x1,0x7f,0x1,0x3f,0x0,0x1f,0x10,0x1f,0x4,0xff,0x0,0x1f,0x10,0x10,0x1f,0x10,0x8,0xfc,0x0,0xf8,0x0,0xf0,0x10,0xf0,0x44,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x10,0x11,0x11,0x1d,0x21,0x22,0x7c,0x93,0x10,0x7c,0x10,0x10,0x14,0x19,0x12,0x4,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x50,0x50,0x50,0x90,0x92,0x12,0xe,0x0,
++0x0,0x42,0x32,0x13,0x82,0x64,0x20,0xf,0x10,0x20,0xe0,0x21,0x21,0x22,0x24,0x28,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0xa0,0xa0,0xa0,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x7f,0x4,0x4,0x8,0x3f,0x1,0x2,0x4,0x3f,0x1,0x9,0x9,0x11,0x25,0x2,0x38,0xc0,0x0,0x10,0x20,0xc0,0x0,0x20,0x10,0xf8,0x8,0x20,0x10,0x8,0x8,0x0,
++0x0,0x79,0x4b,0x54,0x50,0x63,0x52,0x4b,0x4a,0x4b,0x68,0x51,0x42,0x44,0x41,0x40,0x40,0x50,0x4c,0x44,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x0,0x0,0x7e,0x2,0x43,0x24,0x14,0x14,0x8,0x14,0x12,0x22,0x40,0x80,0x1,0x2,0x40,0x50,0x48,0x40,0xfe,0x40,0x44,0x44,0x48,0x48,0x50,0x20,0x60,0x92,0xa,0x6,
++0x10,0x10,0x21,0x21,0x45,0xf9,0x11,0x21,0x41,0xfd,0x1,0x1,0x1d,0xe1,0x41,0x1,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x0,0x0,0x7b,0x4a,0x4d,0x78,0x48,0x48,0x7f,0x48,0x49,0x49,0x79,0x49,0x1,0x1,0x40,0x20,0xfe,0x22,0xfc,0x20,0xf8,0x20,0xfe,0x20,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x13,0x14,0x7e,0x54,0x54,0x54,0x54,0x7c,0x50,0x14,0x1e,0xf2,0x40,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x30,0x28,0x24,0x24,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x7f,0x40,0x5f,0x51,0x51,0x5f,0x51,0x51,0x5f,0x51,0x41,0x41,0x41,0x7f,0x0,0x8,0xfc,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x0,0x0,0x4,0xfe,0x0,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x3e,0x22,0x3e,0x20,0x3e,0x20,0x3e,0x20,0x20,0x23,0xf0,0x0,0xfe,0x12,0x64,0x10,0xf8,0x8,0xf8,0x0,0xf8,0x88,0x50,0x20,0xde,0x4,
++0x10,0x10,0x23,0xfe,0x25,0x50,0x51,0xfc,0x13,0x10,0x1d,0xf1,0x51,0x11,0x11,0x11,0x40,0x20,0xfe,0x22,0xfc,0x20,0xf8,0x20,0xfe,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x17,0x7c,0x54,0x54,0x57,0x54,0x74,0x57,0x54,0x54,0x57,0x74,0x54,0x4,0x4,0x4,0xbe,0x84,0x84,0x84,0xbc,0x0,0x7c,0xc4,0x44,0x28,0x90,0x28,0x28,0x46,0x84,
++0x10,0x10,0x10,0x55,0x54,0x55,0x54,0x54,0x57,0x54,0x54,0x7c,0x4,0x0,0x1,0x6,0x20,0x20,0x28,0xfc,0x20,0x24,0xa8,0x20,0xfe,0x20,0x20,0x50,0x50,0x88,0xe,0x4,
++0x8,0x8,0x8,0x17,0x10,0x32,0x51,0x90,0x1f,0x10,0x10,0x10,0x11,0x12,0x14,0x18,0x40,0x40,0x48,0xfc,0x40,0x48,0x50,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x0,0x44,0x2c,0x11,0x28,0x49,0x88,0x8,0x1b,0x28,0x48,0x88,0x8,0x8,0x51,0x26,0x20,0x20,0x28,0xfc,0x20,0x24,0xa8,0x20,0xfe,0x20,0x20,0x50,0x50,0x88,0xe,0x4,
++0x0,0xff,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x4,0xfe,0x0,0x0,0x0,0x80,0x40,0x30,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x3f,0x20,0x3f,0x22,0x27,0x24,0x27,0x24,0x27,0x24,0x27,0x22,0x47,0x4a,0x81,0x1e,0xfe,0x0,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xf0,0x20,0xc0,0x3e,
++0x7f,0x2,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x8,0xf,0x14,0x22,0x41,0x6,0x38,0xfc,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x0,0xf0,0x20,0x40,0x80,0x60,0x1c,
++0x0,0xf,0x7c,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x4,0xfe,0x40,0x40,0x40,0x40,0x50,0x48,0x44,0x44,0x40,0x40,0x40,0x40,0x40,0x40,
++0x20,0x20,0x27,0x24,0xfc,0x24,0x27,0x2d,0x35,0xe5,0x25,0x25,0x25,0x29,0xa1,0x40,0x10,0x90,0x10,0x20,0x3e,0x42,0x94,0x10,0x10,0x10,0x28,0x28,0x28,0x44,0x44,0x82,
++0x20,0x20,0x27,0x3c,0x44,0x84,0x7f,0x25,0x25,0xfd,0x25,0x25,0x2d,0x35,0x29,0x0,0x10,0x90,0x10,0x20,0x3e,0x42,0x94,0x10,0x10,0x10,0x28,0x28,0x28,0x44,0x44,0x82,
++0x1,0x11,0x11,0x1f,0x11,0x21,0x1,0xff,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x80,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x10,0x10,0x10,0x20,0x24,0x64,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x27,0x24,0x40,0x40,0x40,0x40,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xfc,0x4,
++0x11,0x10,0x1e,0x25,0x28,0x7e,0xaa,0x2b,0x3e,0x2a,0x2a,0x3f,0x0,0xe,0xf0,0x40,0x4,0x88,0x54,0xfe,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x8,0x8,0x11,0x10,0x22,0x7e,0x8,0x13,0x20,0x7e,0x0,0x0,0x1e,0xe0,0x40,0x0,0x8,0x1c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x0,0x0,0x3f,0x20,0x20,0x3f,0x20,0x2f,0x29,0x29,0x29,0x4f,0x48,0x83,0x0,0x80,0xa0,0x90,0xfc,0x80,0x80,0x84,0x44,0x48,0x48,0x30,0x20,0x60,0x92,0xa,0x6,
++0x8,0x4b,0x49,0x48,0x48,0x48,0x4b,0x1f,0x10,0x11,0x11,0x11,0x12,0x2,0xc,0x30,0x0,0xf8,0x10,0xa0,0x40,0xa0,0x1e,0xf4,0x10,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x9,0x9,0x11,0x23,0x42,0xc,0x13,0x31,0x51,0x97,0x11,0x11,0x11,0x11,0x10,0x10,0x4,0x3e,0x0,0xc0,0x4,0x7e,0x88,0x8,0x8,0xc8,0x8,0x48,0x88,0x8,0x28,0x10,
++0x8,0x12,0x3f,0x23,0x32,0x2a,0x22,0xfe,0x22,0x32,0x2a,0x22,0x22,0x43,0x8a,0x4,0x40,0x20,0x4,0xfe,0x20,0x20,0x40,0x84,0xf8,0x10,0x20,0x40,0x88,0xfc,0x4,0x0,
++0x20,0x1b,0x48,0x41,0x41,0x41,0x5f,0x41,0x43,0x45,0x49,0x51,0x41,0x41,0x40,0x40,0x4,0xfe,0x4,0x4,0x4,0x24,0xf4,0x4,0x84,0x44,0x34,0x14,0x4,0x4,0x14,0x8,
++0x40,0x20,0x2f,0x1,0x82,0x42,0x44,0x7,0x11,0x29,0xe6,0x22,0x25,0x24,0x28,0x30,0x0,0xc,0x70,0x10,0x10,0x50,0x5c,0x50,0x50,0x50,0x54,0xfe,0x0,0x80,0x7e,0x0,
++0x0,0xf8,0x8,0xf,0x8,0x78,0x40,0x41,0x41,0x78,0x8,0x8,0x9,0xb,0x50,0x20,0x80,0x40,0x4,0xfe,0x40,0x40,0x80,0x8,0xf0,0x20,0x40,0x80,0x8,0xfc,0x4,0x0,
++0x21,0x20,0x2f,0x20,0xfb,0x48,0x4f,0x48,0x4b,0x88,0x51,0x22,0x52,0x4c,0x88,0x0,0x10,0xa4,0xfe,0xa0,0xf8,0xa8,0xfe,0xa8,0xf8,0xa0,0xb0,0xa8,0xa8,0xa6,0xa0,0xa0,
++0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x14,0x44,0x34,0x14,0x4,0x4,0xff,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x50,0x44,0x4c,0x50,0x40,0x44,0xfe,0x0,
++0x0,0x78,0x48,0x51,0x52,0x65,0x50,0x4a,0x4a,0x49,0x69,0x51,0x41,0x40,0x4f,0x40,0x40,0x40,0xa0,0x10,0x2e,0xf4,0x0,0x48,0x48,0x48,0x48,0x50,0x50,0x24,0xfe,0x0,
++0x0,0x9,0xfd,0x11,0x11,0x11,0x11,0x7d,0x11,0x11,0x10,0x1c,0xf0,0x41,0x2,0xc,0x8,0xfc,0x8,0x28,0x28,0x28,0x28,0x48,0x48,0x48,0x40,0xa0,0xa0,0x22,0x22,0x1e,
++0x8,0x8,0x9,0xff,0x8,0x9,0x7f,0x55,0x55,0x7f,0x49,0x7f,0x49,0x49,0x43,0x41,0x10,0x10,0x18,0x94,0x10,0x14,0xfe,0x10,0x10,0x10,0x28,0x28,0x28,0x44,0x44,0x82,
++0x0,0xf,0x8,0x8,0xf,0x8,0x8,0xf,0x8,0x8,0xff,0x4,0x8,0x10,0x3f,0x0,0x20,0xf0,0x20,0x20,0xe0,0x20,0x20,0xe0,0x20,0x24,0xfe,0x0,0x20,0x10,0xf8,0x8,
++0x8,0x7c,0x4b,0x4a,0x4b,0x7a,0x4b,0x48,0x48,0x7f,0x49,0x49,0x4a,0x4c,0x49,0x98,0x40,0x88,0xfc,0x8,0xf8,0x8,0xfc,0x48,0x50,0xe0,0x60,0x50,0x4e,0x44,0x40,0x80,
++0x20,0x20,0x20,0x3d,0x26,0x48,0x41,0xa2,0x22,0x22,0x23,0x26,0x2a,0x32,0x23,0x2,0x80,0x80,0xf8,0x8,0x10,0x24,0x9e,0x4,0x4,0x4,0x9c,0x4,0x4,0x4,0xfc,0x4,
++0x4,0x2,0x7f,0x1,0x3f,0x1,0xff,0x0,0x44,0x29,0x12,0x20,0x60,0x20,0x23,0x2c,0x40,0x88,0xfc,0x0,0xf8,0x0,0xfe,0x80,0xfc,0x4,0x48,0x40,0xa0,0x90,0xe,0x4,
++0x2,0x1,0x7f,0x49,0x89,0xf,0x11,0x21,0xff,0x2,0x2,0x2,0x4,0x4,0x18,0x60,0x0,0x0,0xfe,0x2,0x24,0xf0,0x0,0x4,0xfe,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x78,0x48,0x51,0x52,0x64,0x51,0x4a,0x4a,0x4a,0x6b,0x52,0x42,0x42,0x43,0x42,0x80,0x80,0xf8,0x8,0x10,0x24,0x9e,0x4,0x4,0x4,0x9c,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x7d,0x45,0x49,0x49,0x51,0x49,0x49,0x45,0x45,0x45,0x69,0x51,0x41,0x41,0x41,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x4,0x88,0x50,0x20,0x10,0x4e,0x84,0x0,
++0x8,0x8,0x10,0x10,0x22,0x7f,0x8,0x10,0x23,0x7c,0x0,0x0,0x1c,0xe0,0x43,0x0,0x40,0x50,0x48,0x40,0x7c,0xc0,0x44,0x7e,0xc0,0x48,0x50,0x20,0x60,0x92,0xa,0x6,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x3f,0x22,0x22,0x22,0x3f,0x22,0x26,0x27,0x2a,0x2a,0x32,0x42,0x42,0x82,0x2,0x4,0xfe,0x0,0x4,0x7e,0xc4,0x44,0x7c,0x44,0xc4,0x7c,0x44,0x44,0x44,0x7c,0x44,
++0x20,0x27,0x38,0x43,0x82,0x7b,0x21,0x27,0xf9,0x23,0x21,0x2f,0x29,0x33,0x2d,0x1,0x40,0xfc,0x0,0xb8,0xa8,0xb8,0x10,0xfc,0x10,0xf8,0x10,0xfe,0x48,0x30,0x8e,0x4,
++0x0,0x3f,0x1,0x1,0xff,0x5,0x9,0x31,0xcf,0x8,0x8,0xf,0x8,0x8,0xf,0x8,0x30,0xc0,0x0,0x4,0xfe,0x40,0x30,0xe,0xe4,0x20,0x20,0xe0,0x20,0x20,0xe0,0x20,
++0x12,0x1f,0x28,0x45,0x8,0x8,0xfe,0x8,0x18,0x1c,0x2a,0x28,0x48,0x88,0x8,0x8,0x44,0x7e,0xa0,0x10,0x4,0xfe,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,
++0x1,0xff,0x0,0x3e,0x22,0x3e,0x4,0x7f,0x4,0x3f,0x4,0xff,0x9,0x18,0x6c,0x8,0x4,0xfe,0x0,0xf8,0x88,0xf8,0x40,0xfc,0x40,0xf8,0x40,0xfe,0x10,0xa0,0x70,0xe,
++0x2,0x42,0x32,0x12,0x8f,0x62,0x26,0x7,0x1a,0x2a,0xf2,0x22,0x22,0x22,0x22,0x22,0x0,0x4,0x7e,0x44,0xc4,0x44,0x7c,0x44,0xc4,0x44,0x7c,0x44,0x44,0x44,0x7c,0x44,
++0x2,0x2,0x4,0x8,0x10,0x3f,0x1,0x2,0x4,0x3f,0x0,0x0,0x0,0x3,0xc,0x70,0x0,0x0,0x20,0x20,0x40,0x80,0x0,0x8,0x8,0xf0,0x20,0x40,0x80,0x0,0x0,0x0,
++0x82,0x44,0x29,0xfe,0x10,0x11,0x7c,0x10,0x10,0xfe,0x11,0x12,0x10,0x20,0x21,0x40,0x0,0x4,0xde,0x44,0x44,0x54,0xcc,0x44,0x44,0xcc,0x54,0x64,0x44,0x44,0x54,0x88,
++0x22,0x11,0x10,0xff,0x8,0x10,0x3b,0x54,0x90,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x8,0x10,0xa0,0xfc,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x2,0x41,0x30,0x17,0x0,0x0,0xf3,0x10,0x10,0x10,0x1f,0x10,0x14,0x18,0x10,0x0,0x8,0x10,0xa0,0xfc,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x10,0x11,0x11,0xff,0x11,0x31,0x39,0x55,0x91,0x11,0x0,0x12,0x51,0x50,0x90,0xf,0x8,0xfc,0x8,0x8,0xf8,0x8,0xf8,0x8,0x8,0xf8,0x0,0x0,0x84,0x92,0x12,0xf0,
++0x0,0x8,0x7c,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x4a,0x2,0x2,0x2,0x20,0x40,0x84,0xfe,0x4,0x4,0xf4,0x94,0x94,0x94,0x94,0xf4,0x4,0x4,0x14,0x8,
++0x2,0x1,0x7f,0x0,0x1f,0x10,0x1f,0x0,0x3f,0x0,0x1,0xff,0x1,0x1,0x5,0x2,0x0,0x8,0xfc,0x0,0xf0,0x10,0xf0,0x0,0xf8,0x40,0x84,0xfe,0x0,0x0,0x0,0x0,
++0x0,0xb,0xfc,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x1d,0xf1,0x41,0x0,0x0,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x58,0x84,0x2,
++0x8,0x8,0x7f,0x8,0x8,0xff,0x4,0x8,0x1f,0x28,0xc8,0xf,0x8,0x8,0x8,0x7,0x20,0x28,0xfc,0x20,0x24,0xfe,0x40,0x20,0xf0,0x2e,0x24,0xe0,0x20,0x8,0x8,0xf8,
++0x11,0x11,0x12,0x17,0xfc,0x17,0x30,0x39,0x56,0x51,0x96,0x10,0x11,0x16,0x10,0x10,0x0,0xf0,0x24,0xfe,0x44,0xfc,0x80,0x44,0x68,0xb0,0x30,0x68,0xa6,0x20,0xa0,0x40,
++0x9,0x9,0xa,0x17,0x1c,0x37,0x50,0x91,0x16,0x10,0x17,0x10,0x11,0x16,0x10,0x10,0x0,0xf0,0x24,0xfe,0x44,0xfc,0x80,0x44,0x68,0xb0,0x30,0x68,0xa6,0x20,0xa0,0x40,
++0x2,0x4,0x8,0x7f,0x40,0x40,0x4f,0x48,0x48,0x48,0x48,0x4f,0x48,0x40,0x40,0x40,0x0,0x0,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0xe4,0x24,0x4,0x14,0x8,
++0x8,0xf,0x10,0x3f,0x61,0xa1,0x3f,0x6,0x19,0x62,0xc,0x31,0x6,0x18,0x62,0x1,0x0,0xe0,0x48,0xfc,0x8,0x8,0xf8,0x10,0x20,0xc0,0xc0,0xa0,0x90,0x8e,0x84,0x0,
++0x8,0xff,0x9,0x3f,0x1,0xff,0x1,0x3f,0x1,0x21,0x25,0x25,0x25,0x29,0x41,0x1,0x24,0xfe,0x20,0xf8,0x8,0xfe,0x8,0xf8,0x0,0x8,0x48,0x28,0x28,0x28,0x8,0x8,
++0x0,0x5,0xfe,0x10,0x11,0x21,0x25,0x7f,0xa5,0x25,0x25,0x25,0x25,0x3d,0x25,0x1,0x20,0x24,0xa8,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x4,0x14,0x8,
++0x1f,0x1,0x7f,0x51,0x89,0x11,0x5,0x3,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0xf0,0x0,0xfe,0x12,0x24,0x10,0x40,0x90,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x8,0x49,0x2a,0x9,0x7f,0x41,0x41,0x7f,0x41,0x41,0x7f,0x41,0x41,0x41,0x45,0x42,0x4,0x4,0x4,0x24,0xa4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x0,0x8,0x7f,0x48,0x48,0x4f,0x48,0x49,0x4a,0x4c,0x4b,0x48,0x78,0x48,0x0,0x0,0x40,0x44,0xf8,0x50,0x64,0xfe,0x80,0xf8,0x10,0x24,0xfe,0x20,0x20,0x20,0xa0,0x40,
++0x3e,0x22,0x3e,0x0,0xff,0x2,0x1f,0x10,0x11,0x12,0x4,0x78,0x0,0x3e,0x22,0x3e,0xf8,0x88,0xf8,0x4,0xfe,0x0,0xf0,0x10,0x10,0x90,0x40,0x3c,0x0,0xf8,0x88,0xf8,
++0x10,0x11,0x10,0x3c,0x21,0x41,0xbd,0x11,0x11,0xfd,0x11,0x11,0x15,0x19,0x11,0x1,0x20,0x24,0xa8,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x4,0x14,0x8,
++0x0,0x42,0x31,0x10,0x83,0x62,0x22,0xb,0x12,0x22,0xe3,0x22,0x22,0x22,0x22,0x22,0x40,0x48,0x50,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x8,0x28,0x10,
++0x2,0x1,0x7f,0x41,0x89,0x5,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x10,0x10,0x0,0x0,0xfe,0x2,0x24,0x50,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x50,0x20,
++0x2,0x41,0x30,0x11,0x82,0x6f,0x20,0x9,0x13,0x25,0xe9,0x21,0x21,0x21,0x21,0x21,0x8,0xb0,0x40,0xb0,0x48,0xfe,0x80,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x8,0x7c,0x4f,0x48,0x48,0x78,0x4b,0x48,0x4b,0x48,0x78,0x49,0x1,0x2,0xc,0x80,0x88,0xfc,0x80,0x50,0x22,0xd2,0xe,0x0,0xfc,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x1,0x1,0x1,0x1,0x1,0x5,0x5,0x9,0x9,0x11,0x21,0x41,0x1,0x1,0x5,0x2,0x0,0x0,0x0,0x0,0x0,0x40,0x20,0x10,0x8,0x4,0x4,0x0,0x0,0x0,0x0,0x0,
++0x2,0x2,0x3f,0x2,0x2,0xff,0x2,0x4,0x3f,0x10,0x21,0x5f,0x81,0x1,0x5,0x2,0x0,0x10,0xe0,0x40,0x84,0xfe,0x0,0x0,0xe0,0x80,0x8,0xfc,0x0,0x0,0x0,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x31,0x3a,0x54,0x50,0x90,0x10,0x10,0x10,0x13,0x1c,0x40,0x20,0x4,0xfe,0x0,0x88,0x6,0x8a,0x88,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x1,0x11,0x9,0x5,0x1,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0x0,0x10,0x20,0x40,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x0,0x0,0x7b,0x48,0x4f,0x48,0x4b,0x48,0x4a,0x4a,0x4a,0x7b,0x42,0x4,0x8,0x0,0x40,0x48,0xfc,0x48,0xfe,0x48,0xf8,0x40,0x48,0xe8,0xd8,0x58,0x48,0x48,0x48,0x40,
++0x10,0x12,0x1f,0x28,0x45,0x0,0x3f,0x1,0x1,0xff,0x2,0x2,0x4,0x8,0x10,0x60,0x40,0x48,0x7c,0xa0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x80,0x40,0x30,0xe,0x4,
++0x10,0x8,0x2,0xff,0x24,0x22,0x41,0xa4,0x14,0x8,0x14,0x24,0x22,0x42,0x80,0x1,0x20,0x20,0x20,0x24,0x7e,0x84,0x44,0x44,0x48,0x28,0x28,0x10,0x28,0x28,0x46,0x84,
++0x21,0x21,0x27,0x21,0xff,0x21,0x77,0x69,0xa1,0x20,0x2f,0x20,0x20,0x20,0x23,0x2c,0x0,0x4,0xfe,0x14,0xd4,0x14,0xd4,0x24,0x4c,0x44,0xfe,0x40,0xa0,0x90,0xe,0x4,
++0x4,0x4,0x24,0x27,0x24,0x24,0x24,0x27,0xfc,0x0,0x0,0x1f,0x0,0x0,0x7f,0x0,0x40,0x40,0x40,0x4c,0x70,0x40,0x42,0x42,0x3e,0x0,0x20,0xf0,0x0,0x8,0xfc,0x0,
++0x1,0x3f,0x21,0x3f,0x21,0x3f,0x10,0x10,0x3f,0x48,0xc8,0x54,0x40,0x7c,0x5,0x2,0x20,0xa0,0x20,0x3e,0x42,0x94,0x10,0x90,0xd0,0x90,0x90,0xa8,0xa8,0xa4,0x44,0x82,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x54,0x54,0x55,0x7e,0x51,0x15,0x1d,0xf5,0x40,0x0,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x80,0x80,0xfe,0x22,0x22,0x52,0x2,0xfa,0xa,0x4,
++0x28,0x28,0xfe,0x29,0x38,0x10,0x7f,0x54,0x54,0x7c,0x11,0xfe,0x10,0x10,0x13,0x10,0x20,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x20,0x20,0x20,0x20,0xfb,0x20,0x20,0x24,0x24,0x24,0x29,0x21,0x21,0x22,0x24,0x20,0x80,0x80,0x80,0x88,0xfc,0x88,0x88,0x8c,0x8a,0x8a,0x8,0x8,0x8,0x8,0x28,0x10,
++0x10,0x10,0x10,0x17,0xf8,0x12,0x11,0x18,0x37,0xd0,0x10,0x10,0x11,0x11,0x52,0x24,0x40,0x40,0x48,0xfc,0x40,0x48,0x50,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x10,0xe,0x4,
++0x12,0x12,0x13,0x16,0xfb,0x12,0x13,0x1a,0x33,0xd2,0x17,0x11,0x11,0x11,0x52,0x24,0x80,0x48,0xfc,0x40,0xf8,0x40,0xf8,0x40,0xfc,0x0,0xf8,0x10,0x3c,0x4,0x14,0x8,
++0x2,0x7f,0x4,0x24,0x24,0x45,0x7f,0xc,0xc,0x14,0x24,0x44,0x84,0x4,0x14,0x8,0x0,0x7c,0x44,0x44,0x48,0x48,0xd0,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0x8,0x14,0x22,0x41,0xbe,0x8,0x8,0x7f,0x8,0x2a,0x29,0x49,0x8,0x28,0x10,0x8,0x8,0x8,0x48,0x28,0x8,0x48,0x28,0xe,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,
++0x8,0x7c,0x48,0x48,0x4b,0x78,0x48,0x4a,0x4a,0x7a,0x4d,0x49,0x49,0x4a,0x4c,0x98,0x80,0x80,0x80,0x88,0xfc,0x88,0x88,0x8c,0x8a,0x8a,0x8,0x8,0x8,0x8,0x28,0x10,
++0x4,0x24,0x17,0x14,0x4,0x5,0xf6,0x10,0x13,0x12,0x12,0x13,0x16,0x1a,0x13,0x2,0x20,0x24,0xa8,0x30,0x22,0xa2,0x5e,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x7f,0x40,0x88,0x8,0xf,0x8,0x8,0xf,0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0xfe,0x2,0x4,0x20,0xf0,0x0,0x8,0xfc,0x8,0x48,0xe8,0x8,0x8,0x50,0x20,
++0x10,0x10,0x10,0x17,0xfc,0x12,0x32,0x3a,0x57,0x52,0x92,0x12,0x14,0x18,0x10,0x13,0x20,0x28,0x24,0xfe,0x20,0xa0,0xa0,0xa4,0xe4,0xa8,0xa8,0x90,0xb0,0x52,0x8a,0x6,
++0x20,0x22,0x3f,0x48,0x88,0xa,0xff,0x8,0x28,0x2e,0x28,0x28,0x2f,0xf8,0x40,0x0,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x54,0x48,0x40,0x40,
++0x20,0x3e,0x44,0xbe,0x2a,0x3e,0x2a,0x3f,0x2a,0x41,0x9f,0x11,0x1f,0x1,0x7f,0x20,0x0,0xfc,0x24,0x4c,0xd0,0x7c,0x90,0xfe,0x10,0x10,0xf8,0x10,0xf0,0x8,0xfc,0x4,
++0x22,0x22,0x27,0x29,0xbf,0xaa,0xaa,0x2f,0x2a,0x2a,0x2f,0x2a,0x2a,0x2a,0x31,0x20,0x4,0x7e,0xa4,0x24,0xa4,0xc8,0xa8,0xbe,0xc8,0x88,0xfe,0x88,0x88,0x88,0x88,0x8,
++0x2,0x42,0x32,0x12,0x82,0x62,0x2f,0xa,0x12,0x22,0xe2,0x22,0x22,0x22,0x23,0x20,0x48,0x48,0x48,0x48,0x48,0x48,0xfe,0x48,0x48,0x48,0x48,0x78,0x40,0x8,0xfc,0x0,
++0x40,0x27,0x24,0x9,0x81,0x61,0x21,0x9,0x11,0x20,0xe0,0x2f,0x20,0x20,0x20,0x20,0x0,0xfe,0x2,0x4,0x0,0xfc,0x0,0x4,0xfe,0x4,0x24,0xf4,0x4,0x4,0x14,0x8,
++0x2,0x44,0x2f,0x28,0xf,0x8,0xef,0x28,0x28,0x3f,0x21,0x2a,0x34,0x28,0x12,0x1,0x8,0x88,0xc8,0x88,0x88,0xfe,0x88,0x88,0xc8,0xa8,0xa8,0x88,0x88,0x88,0xa8,0x10,
++0x3f,0x20,0x3f,0x20,0x24,0x22,0x2f,0x28,0x28,0x2f,0x28,0x28,0x4f,0x48,0x88,0x8,0xf8,0x8,0xf8,0x80,0x90,0xa8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x28,0x10,
++0x4,0xff,0x14,0x8,0x7f,0x22,0x14,0xff,0x8,0xa,0x7f,0x2a,0x49,0x88,0x29,0x10,0x40,0xfe,0x40,0x6,0x78,0x40,0x44,0xfe,0x48,0x48,0x48,0x48,0x88,0x88,0x8,0x8,
++0x8,0x8,0xff,0x8,0x8,0x0,0x2,0x1,0x50,0x50,0x50,0x90,0x10,0x10,0xf,0x0,0x20,0x24,0xfe,0x20,0x20,0x0,0x0,0x0,0x84,0x82,0x2,0x2,0x8,0x8,0xf8,0x0,
++0x10,0x10,0x1d,0x20,0x20,0x7c,0x93,0x10,0x7c,0x10,0x11,0x10,0x14,0x18,0x10,0x0,0x40,0x20,0xfc,0x0,0x88,0x50,0xfe,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,
++0x2,0x7,0x38,0x20,0x20,0x20,0x3f,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x85,0x2,0x40,0x40,0x40,0x40,0x7e,0x82,0x24,0x20,0x20,0x20,0x50,0x50,0x88,0x88,0x6,0x4,
++0x2,0x1,0x3f,0x8,0x4,0x4,0xff,0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0x1,0x0,0x10,0xf8,0x20,0x20,0x44,0xfe,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,
++0x10,0xa,0x7f,0x0,0x22,0x14,0xff,0xa,0x7f,0x8,0xa,0x29,0x48,0x89,0x28,0x10,0x8,0x1c,0x60,0x40,0x40,0x44,0xfe,0x48,0x48,0x48,0x48,0x88,0x88,0x8,0x8,0x8,
++0x10,0x10,0x11,0x11,0x59,0x55,0x51,0x91,0x11,0x11,0x11,0x12,0x12,0x14,0x18,0x10,0x8,0x1c,0xe0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x2,0x1,0x0,0x0,0x8,0x8,0x28,0x28,0x28,0x48,0x88,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x80,0xc0,0x80,0x0,0x8,0x4,0x2,0x2,0x2,0x0,0x10,0x10,0xf0,0x0,
++0x8,0x8,0xf,0x10,0x10,0x37,0x50,0x90,0x17,0x10,0x13,0x12,0x12,0x12,0x13,0x12,0x80,0x44,0xfe,0x0,0x8,0xfc,0x0,0x8,0xfc,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x8,0x10,0x7f,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x57,0xf8,0x40,0x0,0x0,0x10,0x92,0x54,0x54,0x10,0xfe,0x10,0x10,0x14,0xfe,0x10,0x90,0x10,0x10,0x10,0x10,
++0x0,0x3f,0x20,0x3f,0x20,0x3f,0x1,0x21,0x3f,0x21,0x41,0xbf,0x1,0x1,0xff,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0x8,0xfc,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,
++0x0,0x7b,0x4a,0x4b,0x4a,0x7b,0x48,0x4a,0x4b,0x7c,0x48,0x4b,0x48,0x48,0x8f,0x18,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0x48,0xfc,0x40,0x50,0xf8,0x40,0x44,0xfe,0x0,
++0x2,0x45,0x29,0x11,0x29,0x49,0x88,0x9,0x19,0x2a,0x4c,0x89,0x8,0x8,0x57,0x20,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x20,0x24,0xfe,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,
++0x10,0x13,0x12,0x13,0x5a,0x57,0x50,0x92,0x13,0x14,0x18,0x13,0x10,0x10,0x1f,0x10,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0x48,0xfc,0x40,0x50,0xf8,0x40,0x44,0xfe,0x0,
++0x2,0x2,0x21,0x11,0x19,0x9,0x0,0x0,0xff,0x0,0x0,0x4,0xc,0x10,0x20,0x40,0x0,0x8,0x8,0x10,0x10,0x20,0x20,0x44,0xfe,0x0,0x0,0x40,0x20,0x18,0xc,0x4,
++0x0,0x7f,0x11,0x11,0x11,0x11,0x11,0xff,0x11,0x11,0x11,0x11,0x21,0x21,0x41,0x1,0x84,0xc4,0x4,0x24,0x24,0x24,0x24,0xe4,0x24,0x24,0x24,0x24,0x4,0x4,0x14,0x8,
++0x1,0x7f,0x12,0x12,0x12,0xff,0x12,0x12,0x12,0x23,0x41,0x7f,0x1,0x1,0xff,0x0,0x4,0x84,0x24,0x24,0x24,0xa4,0x24,0x24,0x4,0x14,0x8,0xfc,0x0,0x4,0xfe,0x0,
++0x0,0x7f,0x11,0x11,0x11,0x11,0x11,0xff,0x11,0x11,0x11,0x11,0x21,0x21,0x41,0x1,0x80,0xc4,0xc,0x10,0x20,0x44,0xc,0xd0,0x20,0x42,0x6,0x8,0x10,0x20,0x40,0x80,
++0x0,0x7f,0x12,0x12,0x12,0x12,0x12,0xff,0x12,0x12,0x12,0x12,0x22,0x22,0x42,0x2,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0xc8,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0xb,0x10,0x20,0x40,0x8,0x17,0x30,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x8,0xfc,0x0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
++0x4,0xfe,0x28,0x28,0xfe,0xaa,0xaa,0xae,0xc2,0x83,0x82,0xfe,0x82,0x82,0xff,0x82,0x4,0xfe,0x84,0xfc,0x84,0xfc,0x20,0xa0,0xfc,0x20,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x1,0x1,0x3f,0x1,0x1,0xff,0x8,0x4,0x3f,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0x0,0x10,0xf8,0x0,0x4,0xfe,0x20,0x50,0xf8,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0xff,0x3,0x5,0x9,0x31,0xc1,0x1f,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x4,0xfe,0x80,0x40,0x30,0xe,0x4,0xf0,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x10,0x12,0x12,0x5b,0x54,0x54,0x98,0x10,0x13,0x10,0x10,0x10,0x10,0x1f,0x10,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x50,0xf8,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x11,0x11,0xfd,0x25,0x26,0x24,0x24,0x45,0x28,0x10,0x28,0x44,0x87,0x0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x10,0x1f,0x14,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x50,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x0,0x20,0x50,0x48,0x44,0x42,0x41,0x42,0x44,0x48,0x50,0x40,0x7f,0x40,0x0,0x0,0x10,0x10,0x24,0x24,0x44,0x84,0x4,0x84,0x44,0x34,0x14,0x4,0xfc,0x4,0x0,
++0x8,0x7c,0x49,0x49,0x4a,0x7c,0x49,0x4a,0x4a,0x7a,0x4b,0x4a,0x4b,0x4a,0x88,0x18,0x80,0x80,0x0,0xfe,0x2,0x2,0x12,0xaa,0x4a,0xaa,0x1a,0xa,0xfa,0x2,0x14,0x8,
++0x8,0x8,0x10,0x1f,0x20,0x40,0x90,0x28,0x25,0x22,0x25,0x28,0x20,0x3f,0x20,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x44,0xa4,0x24,0x24,0x24,0xa4,0x24,0xe4,0x14,0x8,
++0x0,0x42,0x31,0x14,0x84,0x64,0x24,0xc,0x14,0x25,0xe5,0x26,0x24,0x27,0x24,0x20,0x0,0x8,0x10,0x94,0xa4,0x44,0x44,0xa4,0xa4,0x14,0xc,0xc,0x4,0xfc,0x4,0x0,
++0x10,0x10,0x10,0xfd,0x11,0x13,0x25,0x21,0x51,0x51,0x91,0x25,0x45,0x7d,0x1,0x1,0x40,0xa0,0x88,0xfc,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x10,0x10,0x22,0x7f,0x0,0x3e,0x22,0x3e,0x22,0x3e,0x22,0x26,0x0,0x48,0x44,0x80,0x80,0x98,0xe0,0x84,0x84,0x7c,0x80,0x98,0xe0,0x84,0x84,0x7c,0x0,0x88,0x46,0x2,
++0x8,0x8,0x8,0x10,0x17,0x30,0x50,0x90,0x11,0x11,0x12,0x14,0x18,0x10,0x10,0x10,0x40,0x40,0x40,0x44,0xfe,0x40,0xe0,0xe0,0x50,0x50,0x48,0x46,0x44,0x40,0x40,0x40,
++0x11,0x11,0x11,0x21,0x2a,0x6c,0xa9,0x2e,0x28,0x2b,0x28,0x28,0x23,0x20,0x21,0x26,0x0,0x0,0xf8,0x10,0xa0,0x40,0xb0,0x2e,0xc0,0x10,0x60,0x88,0x10,0x60,0x80,0x0,
++0x8,0x4,0x2,0x7f,0x1,0x3f,0x2,0xff,0x4,0xf,0x11,0x2f,0x42,0x84,0x3f,0x0,0x20,0x40,0x88,0xfc,0x0,0xf8,0x0,0xfe,0x10,0xf8,0x10,0xf0,0x10,0x14,0xfe,0x0,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x31,0x39,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x0,0x4,0xfe,0x80,0x80,0x80,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x88,0x50,0x20,
++0x0,0x8,0x7f,0x4a,0x4b,0x4a,0x4b,0x4a,0x4b,0x48,0x48,0x7f,0x48,0x1,0x2,0xc,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x50,0x48,0xfe,0xa0,0x10,0xe,0x4,
++0x10,0x13,0x1c,0x20,0x27,0x7c,0x91,0x12,0x7d,0x10,0x10,0x10,0x15,0x19,0x12,0x4,0x18,0xe0,0x40,0x48,0xfc,0xe0,0x50,0x4e,0xf8,0x88,0x90,0x9c,0x4,0x4,0x28,0x10,
++0x0,0x3f,0x1,0x1,0x7f,0x5,0x9,0x31,0xcf,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x78,0x80,0x0,0x8,0xfc,0x40,0x30,0xe,0xe4,0x20,0x40,0x70,0x10,0x10,0xa0,0x40,
++0x20,0x10,0x10,0x0,0xfd,0x9,0x11,0x35,0x59,0x95,0x11,0x11,0x11,0x11,0x11,0x11,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x13,0x20,0x20,0x4f,0xf8,0x11,0x22,0x45,0xf8,0x0,0x0,0x19,0xe1,0x42,0x4,0x18,0xe0,0x40,0x48,0xfc,0xe0,0x50,0x4e,0xf8,0x88,0x90,0x9c,0x4,0x4,0x28,0x10,
++0x20,0x20,0x20,0x27,0xfc,0x24,0x27,0x24,0x24,0x24,0x3e,0xe5,0x48,0x8,0x17,0x20,0x88,0xfc,0x80,0xfe,0x82,0xf0,0x84,0xfc,0x0,0xa0,0xa8,0xb0,0xa0,0xa4,0xfe,0x0,
++0x0,0x0,0x0,0x3f,0x20,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0x40,0x40,0x83,0x0,0x80,0xa0,0x90,0xfc,0x80,0x80,0x84,0x44,0x48,0x48,0x30,0x20,0x60,0x92,0xa,0x6,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x1,0xff,0x2,0x4,0x3f,0x24,0x24,0x24,0x24,0x20,0xf0,0x0,0xfe,0x12,0x64,0x10,0x4,0xfe,0x0,0x8,0xfc,0x88,0x88,0x88,0xa8,0x10,
++0x2,0x3,0x2,0x3f,0x22,0x23,0x3e,0x23,0x20,0x22,0x32,0x2a,0x4a,0x42,0xbf,0x0,0x10,0xf8,0x0,0xfe,0x2,0xe4,0x8,0xf8,0x0,0x40,0x48,0x58,0x60,0x40,0xfe,0x0,
++0x0,0x8,0x7c,0x4b,0x4a,0x4a,0x4b,0x4a,0x4a,0x4a,0x4b,0x7a,0x4c,0x4,0xb,0x0,0x48,0x7c,0x40,0xfe,0x42,0x70,0xc4,0x7c,0x0,0x50,0x54,0xd8,0x50,0x54,0xfe,0x0,
++0x4,0xb,0x10,0x20,0x41,0x5,0x9,0x11,0x21,0x41,0x5,0x9,0x11,0x20,0x40,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x44,0x58,0x86,0x2,
++0x8,0x8,0x10,0x21,0x42,0xc,0x13,0x30,0x50,0x97,0x10,0x11,0x12,0x14,0x11,0x10,0x40,0x40,0xa0,0x10,0xe,0x4,0xf8,0x40,0x48,0xfc,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x2,0x42,0x33,0x12,0x4,0x0,0xf0,0x1f,0x10,0x10,0x10,0x12,0x14,0x18,0x10,0x0,0x0,0x8,0xfc,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x8,0x7f,0x9,0x7f,0x2,0x4,0x1f,0x1,0x2,0x3f,0x0,0x1f,0x11,0x1f,0x11,0x1f,0x20,0xfc,0x20,0xfc,0x0,0x10,0xe0,0x0,0x8,0xf8,0x0,0xf0,0x10,0xf0,0x10,0xf0,
++0x4,0xfe,0x28,0x28,0xfe,0xaa,0xaa,0xae,0xa2,0xc2,0x82,0xfe,0x82,0x82,0xfe,0x82,0x0,0x0,0x44,0x44,0xaa,0xaa,0xaa,0x92,0x92,0xaa,0xaa,0xa6,0xc6,0x82,0xfe,0x82,
++0x8,0x8,0x14,0x12,0x21,0x5e,0x88,0x8,0x7e,0x8,0x2c,0x2a,0x4a,0x8,0x29,0x12,0x0,0x0,0x8,0xfc,0x8,0x88,0x88,0x88,0x50,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x10,0x10,0x10,0x10,0xfe,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x22,0x22,0x41,0x80,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0xfa,0x2,0xfe,0x0,
++0x1,0x0,0x3f,0x20,0x2f,0x20,0x21,0x20,0x2f,0x20,0x20,0x20,0x40,0x40,0x82,0x1,0x0,0x88,0xfc,0x0,0xf8,0x20,0x40,0x80,0xfc,0x88,0x90,0x80,0x80,0x80,0x80,0x0,
++0x2,0x1,0xff,0x2,0x4,0x1f,0x1,0x2,0x3f,0x0,0x1f,0x11,0x1f,0x11,0x1f,0x10,0x0,0x4,0xfe,0x0,0x10,0xe0,0x0,0x8,0xf8,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x10,0x10,0x11,0x13,0x5a,0x56,0x52,0x92,0x12,0x12,0x12,0x12,0x12,0x1f,0x10,0x10,0x80,0x80,0x8,0xfc,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,0x0,
++0x10,0xfe,0x22,0x64,0x18,0x14,0x62,0x4,0x1f,0x3,0xc,0x3f,0x1,0x11,0x65,0x2,0x4,0xfe,0x84,0x84,0x84,0xfc,0x84,0x20,0xc0,0x0,0x10,0xf8,0x0,0x30,0x8,0x0,
++0x10,0x13,0x10,0x11,0xfd,0x25,0x26,0x24,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x1,0x0,0xfe,0x42,0x70,0x40,0x40,0xfe,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x4,0x4,0xc,
++0x10,0x10,0x23,0x20,0x48,0xf8,0x17,0x21,0x43,0xfd,0x9,0x1,0x1d,0xe1,0x41,0x1,0x40,0x44,0xf8,0x50,0x60,0x44,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x23,0x20,0x48,0xff,0x11,0x20,0x42,0xf9,0x7,0x0,0x1c,0xe0,0x41,0x2,0x40,0x50,0xf8,0x40,0x40,0xfc,0x24,0xa8,0x20,0x24,0xfe,0x40,0x60,0x90,0xc,0x4,
++0x10,0x11,0x14,0xfe,0x20,0x28,0x48,0x7f,0x8,0x8,0xe,0xf8,0x48,0x8,0x8,0x8,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x0,0x7b,0x4a,0x4c,0x4b,0x48,0x4b,0x4a,0x4b,0x4a,0x7b,0x48,0x0,0x7,0x0,0x40,0x20,0xfe,0x2,0x4,0xfc,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x0,0x4,0xfe,0x0,
++0x2,0x1,0x7f,0x40,0x80,0x3f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x0,0xff,0x0,0x0,0x0,0xfe,0x2,0x14,0xf8,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x4,0xfe,0x0,
++0x1f,0x10,0x1f,0x10,0x1f,0x10,0xff,0x4,0x8,0x1f,0x2,0x51,0x50,0x90,0xf,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x14,0xfe,0x0,0x20,0xf0,0x10,0x84,0x82,0x12,0xf0,0x0,
++0x20,0x10,0x14,0xfe,0x21,0x22,0x3c,0x24,0x24,0x24,0x24,0x24,0x44,0x55,0x8a,0x4,0x80,0x84,0xfe,0x80,0x0,0xfe,0x22,0x24,0xa0,0xa8,0xbc,0xa0,0xa0,0x60,0x26,0x1c,
++0x2,0x1,0x1,0xff,0x2,0x2,0x4,0x8,0x3f,0x1,0x2,0x4,0x8,0x10,0x3f,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x10,0x20,0xc0,0x0,0x0,0x0,0x10,0x10,0xf8,0x8,
++0x0,0x42,0x32,0x13,0x2,0x4,0xf7,0x10,0x10,0x10,0x11,0x11,0x12,0x2c,0x44,0x3,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0xa0,0xa0,0xa0,0x22,0x22,0x1e,0x0,0x6,0xfc,
++0x1,0x0,0x3f,0x24,0xa4,0x6f,0x32,0x2f,0x6a,0xaf,0x2a,0x2f,0x40,0x43,0x9c,0x8,0x0,0x84,0xfe,0x44,0x28,0x7c,0x10,0x90,0xfc,0x90,0x94,0xfe,0x10,0x90,0x10,0x10,
++0x0,0x8,0x7c,0x4f,0x48,0x48,0x79,0x4a,0x4b,0x78,0x48,0x49,0x4a,0x7b,0x48,0x0,0x80,0x40,0x44,0xfe,0x40,0x80,0x8,0x10,0xe0,0x40,0x80,0x0,0x8,0xfc,0x4,0x0,
++0x10,0x10,0x20,0x20,0x45,0xfa,0x11,0x21,0x41,0xfd,0x1,0x1,0x1d,0xe0,0x40,0x0,0x80,0x80,0x84,0xfe,0x4,0x4,0xf4,0x14,0x14,0xf4,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x28,0x28,0xfe,0x29,0x29,0x3b,0x15,0x7d,0x55,0x55,0x7d,0x11,0xff,0x11,0x11,0x11,0xa0,0xa0,0xa0,0x20,0x24,0x28,0x30,0x20,0x60,0xa0,0x20,0x22,0x22,0x22,0x1e,0x0,
++0x8,0x8,0xff,0x8,0x20,0x7c,0x45,0x44,0x7c,0x43,0x7c,0x44,0x45,0x7c,0x40,0x0,0x20,0x24,0xfe,0x20,0x40,0x28,0xfc,0x88,0x50,0xfe,0x20,0x28,0xfc,0x20,0x20,0x20,
++0x22,0x11,0x11,0x0,0x7f,0x40,0x80,0x1f,0x0,0x1,0xff,0x1,0x1,0x1,0x5,0x2,0x8,0x8,0x10,0x20,0xfe,0x2,0x4,0xe0,0x40,0x84,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x2,0x1,0x1,0x7f,0x40,0x80,0x4,0x4,0x4,0x8,0x8,0x10,0x10,0x20,0x40,0x0,0x0,0x0,0x0,0xfe,0x2,0x84,0x80,0x80,0x40,0x40,0x40,0x20,0x10,0xe,0x4,0x0,
++0x1f,0x1,0x7f,0x41,0x9d,0x1,0x1d,0x1,0x3f,0x0,0x0,0x1f,0x0,0x0,0x3f,0x0,0xf0,0x0,0xfe,0x2,0x74,0x0,0x70,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x1,0x1,0x2,0x3f,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0xff,0x0,0x0,0x0,0x0,0x8,0xfc,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xfe,0x0,
++0x2,0x3f,0x22,0x22,0x3e,0x0,0x7f,0x41,0x49,0x49,0x49,0x49,0x49,0x14,0x23,0xc1,0x20,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x94,0x8,
++0x0,0x3f,0x1,0xff,0x1,0x3f,0x29,0x25,0x3f,0x1,0x3f,0x1,0x7f,0x24,0x22,0x40,0x38,0xc0,0x4,0xfe,0x0,0xf8,0x28,0x48,0xf8,0x0,0xf8,0x0,0xfc,0x48,0x24,0x4,
++0x10,0x17,0x24,0x24,0x47,0x94,0x25,0x65,0xa5,0x25,0x25,0x25,0x29,0x29,0x31,0x21,0x1c,0xe0,0x20,0x24,0xfe,0x20,0xfc,0x4,0x4,0xfc,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x8,0x8,0xf,0x10,0x10,0x2f,0x48,0x88,0xf,0x8,0x8,0xf,0x8,0x0,0x0,0x0,0x0,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0xe4,0x24,0x24,0xe4,0x24,0x4,0x28,0x10,
++0x2,0x42,0x33,0x14,0x4,0x9,0xf1,0x11,0x11,0x11,0x11,0x13,0x15,0x18,0x10,0x0,0x0,0x4,0xfe,0x4,0x4,0xf4,0x14,0x14,0xf4,0x14,0x14,0xf4,0x14,0x4,0x14,0x8,
++0x0,0x3f,0x0,0x0,0x1f,0x0,0x0,0x3f,0x0,0x0,0xff,0x8,0x4,0x4,0x0,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x20,0x24,0xfe,0x20,0x20,0x20,0xa0,0x40,
++0x9,0xfd,0x9,0x49,0x49,0x49,0x49,0x49,0x7d,0x5,0x1d,0xe5,0x45,0x15,0xa,0x4,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,
++0x0,0x41,0x31,0x12,0x2,0x4,0xf9,0x14,0x12,0x12,0x11,0x11,0x11,0x28,0x44,0x3,0x0,0x24,0x24,0x48,0x48,0x90,0x20,0x90,0x48,0x48,0x24,0x24,0x24,0x0,0x6,0xfc,
++0x0,0x4,0xfe,0x21,0x21,0x3f,0x45,0x45,0xa5,0x19,0x9,0x11,0x21,0x40,0x80,0x0,0x80,0x84,0xfe,0x4,0x4,0xf4,0x14,0x14,0xf4,0x14,0x14,0xf4,0x14,0x4,0x14,0x8,
++0x0,0x47,0x30,0x11,0x81,0x61,0x21,0x9,0x17,0x21,0xe1,0x21,0x21,0x21,0x21,0x21,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x50,0xf0,0x10,0x10,0x10,0xa,0xa,0x6,0x0,
++0x1,0x41,0x31,0x11,0x1,0x1,0xf1,0x11,0x11,0x11,0x11,0x11,0x16,0x1a,0x14,0x8,0x4,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x4,
++0x0,0x47,0x30,0x11,0x1,0x1,0xf1,0x11,0x17,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x50,0xf0,0x10,0x10,0x10,0xa,0xa,0x6,0x0,
++0x0,0x40,0x3f,0x21,0x2,0x4,0xe4,0x27,0x3c,0x24,0x25,0x24,0x2c,0x54,0x88,0x7,0x10,0x10,0x10,0x10,0x10,0x10,0x58,0x54,0x94,0x92,0x12,0x50,0x20,0x0,0x6,0xfc,
++0x0,0x47,0x30,0x11,0x1,0x1,0xf7,0x11,0x11,0x11,0x11,0x11,0x11,0x29,0x44,0x3,0x10,0xf8,0x10,0x10,0x10,0x50,0xf0,0x10,0x10,0x10,0x12,0xa,0x6,0x0,0x6,0xfc,
++0x0,0x3f,0x20,0x20,0x20,0x20,0x20,0x2f,0x20,0x20,0x20,0x20,0x40,0x40,0x9f,0x0,0x8,0xfc,0x80,0x80,0x80,0x80,0x88,0xfc,0x80,0xa0,0x98,0x88,0x80,0x84,0xfe,0x0,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x15,0x19,0x31,0xd1,0x11,0x10,0x10,0x10,0x50,0x20,0x4,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,0x20,
++0x4,0xfe,0x9,0x29,0x29,0x49,0xff,0x9,0x19,0x29,0x48,0x88,0xb,0x8,0x28,0x10,0x40,0x88,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x2,0xff,0x92,0x92,0x92,0xfe,0x92,0x92,0x92,0xfe,0x92,0x10,0x11,0x10,0x10,0x10,0x20,0x44,0xfe,0x84,0xa4,0x84,0x94,0x88,0x80,0xfe,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x0,0xb,0x7c,0x48,0x48,0x49,0x49,0x4b,0x48,0x48,0x48,0x79,0x46,0x0,0x0,0x0,0x8,0xfc,0x10,0x90,0x90,0x10,0x14,0xfe,0x10,0x30,0x50,0x90,0x10,0x10,0x50,0x20,
++0x0,0x20,0x10,0xc,0x4,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x10,0x30,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x8,0xff,0x8,0x0,0x3f,0x8,0x8,0x10,0x3f,0x0,0x3,0xc,0x30,0xc0,0x0,0x40,0x44,0xfe,0x40,0x10,0xf8,0x20,0x20,0x24,0xfe,0xa0,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x7f,0x0,0x10,0x10,0x20,0x20,0x7f,0x1,0x2,0x4,0x8,0x30,0xc0,0x1,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x10,0x11,0x14,0x7e,0x54,0x55,0x55,0x57,0x7c,0x10,0x14,0x1c,0xf4,0x41,0x2,0x0,0x8,0xfc,0x8,0x88,0x88,0x8,0x8,0xfe,0x28,0x28,0x48,0x48,0x88,0x8,0x28,0x10,
++0x1,0x21,0x21,0x3f,0x0,0x3f,0x20,0x2f,0x20,0x3f,0x20,0x20,0x2f,0x40,0x5f,0x80,0x0,0x8,0x8,0xf8,0x0,0xfc,0x80,0xf8,0x80,0xfe,0x80,0x80,0xf8,0x80,0xfe,0x0,
++0x10,0x1f,0x22,0x42,0x8f,0x14,0x24,0x7f,0xa0,0x2f,0x28,0x28,0x28,0x2f,0x28,0x20,0x80,0xc4,0x3e,0x0,0x84,0xfe,0x88,0xe8,0x48,0xe8,0x48,0x48,0x48,0xc8,0x28,0x10,
++0x0,0x43,0x32,0x12,0x83,0x62,0x22,0xb,0x12,0x22,0xe3,0x22,0x24,0x24,0x2b,0x30,0x8,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x2,0x7f,0x4,0x24,0x24,0x45,0xfe,0x4,0xc,0x14,0x24,0x44,0x84,0x4,0x14,0x8,0x40,0x50,0x54,0xfe,0x90,0x90,0xfc,0x90,0x90,0xfc,0x90,0x90,0x94,0xfe,0x80,0x80,
++0x0,0xb,0x7c,0x48,0x48,0x48,0x4c,0x4a,0x4a,0x49,0x48,0x78,0x48,0x0,0x7,0x0,0x8,0xfc,0x90,0x90,0x90,0x90,0x92,0x94,0x94,0x98,0x90,0x90,0x90,0x94,0xfe,0x0,
++0x0,0x7f,0x4,0x4,0x4,0x4,0x44,0x24,0x24,0x14,0x14,0x4,0x4,0x4,0xff,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x48,0x4c,0x50,0x50,0x60,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x47,0x20,0x22,0x2,0x4,0xef,0x20,0x20,0x20,0x24,0x29,0x32,0x24,0x8,0x0,0x8,0xfc,0x10,0x10,0x10,0x14,0xfe,0x10,0x30,0x50,0x90,0x10,0x10,0x10,0x50,0x20,
++0x0,0x7f,0x1,0x11,0x11,0x11,0xff,0x10,0x1f,0x10,0x1f,0x0,0x29,0x24,0x40,0x0,0x8,0xfc,0x0,0xf0,0x0,0x4,0xfe,0x0,0xf0,0x4,0xfe,0x4,0x24,0x94,0x14,0x8,
++0x0,0x17,0x7c,0x54,0x54,0x54,0x57,0x54,0x54,0x54,0x54,0x75,0x56,0x4,0x7,0x4,0x4,0xfe,0x4,0x44,0x44,0x44,0xfc,0x44,0x44,0xa4,0x94,0xc,0xc,0x4,0xfc,0x4,
++0x20,0x1b,0x49,0x41,0x5f,0x42,0x44,0x49,0x5f,0x69,0x4f,0x49,0x4f,0x41,0x40,0x40,0x4,0xfe,0x4,0x24,0xf4,0x84,0x44,0x24,0xfc,0x24,0xe4,0x24,0xe4,0x14,0xf4,0x8,
++0x20,0x27,0x24,0x24,0x2c,0xb4,0xa7,0xa4,0x24,0x24,0x24,0x25,0x56,0x4c,0x87,0x4,0x4,0xfe,0x4,0x44,0x44,0x44,0xfc,0x44,0x44,0xa4,0x94,0xc,0xc,0x4,0xfc,0x4,
++0x0,0x40,0x37,0x10,0x81,0x62,0x27,0xa,0x12,0x23,0xe2,0x22,0x23,0x20,0x20,0x20,0x40,0x48,0xfc,0xa0,0x10,0x8,0xfe,0x48,0x48,0xf8,0x48,0x48,0xf8,0x42,0x42,0x3e,
++0x8,0x8,0x8,0x7f,0x8,0x8,0xf,0x78,0x0,0x3f,0x24,0x24,0x24,0x24,0xff,0x0,0x40,0x40,0x40,0x50,0x48,0x44,0x44,0x40,0x8,0xfc,0x48,0x48,0x48,0x48,0xfe,0x0,
++0x0,0x7f,0x2,0x12,0xa,0x2,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x80,0x8,0xfc,0x40,0x48,0x50,0x44,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0xfd,0x10,0x10,0x20,0x20,0x7c,0xa7,0x24,0x24,0x24,0x25,0x3d,0x22,0x4,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x8,0x8,0x8,0x8,0x8,
++0x20,0x20,0x27,0x20,0xf9,0xa9,0xaa,0xaf,0xa8,0xf8,0x22,0x29,0x39,0xea,0x44,0x8,0x0,0x6,0xb8,0x88,0x8,0x8,0x2e,0xa8,0xa8,0xa8,0xa8,0x3e,0x0,0x86,0x7c,0x0,
++0x1,0x21,0x21,0x21,0x3f,0x0,0xff,0x2,0x4,0xf,0x18,0x28,0x48,0x8,0xf,0x8,0x0,0x8,0x8,0x8,0xf8,0x0,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x0,0x7d,0x4,0x8,0x11,0x21,0x7d,0x5,0x5,0x49,0x29,0x10,0x28,0x47,0x80,0x8,0x1c,0xe0,0x20,0x20,0x28,0x3c,0x20,0x20,0x20,0x28,0xfc,0x0,0x6,0xfc,0x0,
++0x2,0x1,0xff,0x0,0x0,0x1f,0x0,0x1f,0x0,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x4,0xfe,0x0,0x20,0xf0,0x0,0xf0,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x9,0x7f,0x22,0x14,0x7f,0x44,0x48,0x52,0x44,0x48,0x52,0x44,0x48,0x90,0x21,0x4,0xfe,0x20,0x44,0xfe,0x84,0x94,0x94,0x94,0xa4,0xa4,0xa4,0xa4,0x48,0x86,0x2,
++0x20,0x1b,0x4a,0x42,0x47,0x48,0x51,0x4e,0x48,0x48,0x4e,0x48,0x48,0x4f,0x40,0x40,0x4,0xfe,0x4,0x4,0xc4,0x84,0x24,0xf4,0x24,0x24,0xe4,0x24,0x24,0xe4,0x14,0x8,
++0x1,0x1,0x11,0x11,0x22,0x4,0x19,0x61,0x1,0x11,0x11,0x22,0x2,0x4,0x18,0x60,0x0,0x8,0x18,0x20,0xc0,0x30,0xc,0x4,0x10,0x30,0x40,0x80,0x40,0x30,0xe,0x4,
++0x0,0x41,0x31,0x11,0x81,0x61,0x22,0xc,0x10,0x23,0xe2,0x22,0x22,0x22,0x23,0x22,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0xe,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x1,0x1,0x7f,0x2,0xc,0x31,0xdf,0x11,0x11,0x1f,0x11,0x11,0x1f,0x11,0x1,0x0,0x0,0x8,0xfc,0x80,0x60,0x1e,0xf4,0x10,0x10,0xf0,0x10,0x10,0xf0,0x14,0x4,0xfc,
++0x10,0x10,0x10,0x13,0xfc,0x11,0x13,0x1e,0x32,0xd3,0x12,0x12,0x13,0x10,0x50,0x20,0x40,0x40,0x48,0xfc,0xa0,0x50,0xf8,0x4e,0x48,0xf8,0x48,0x48,0xf8,0x42,0x42,0x3e,
++0x0,0xb,0x7e,0x4a,0x4b,0x4a,0x7a,0x4b,0x4a,0x7a,0x4a,0x4a,0x4a,0x7a,0x4b,0x2,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x88,0x50,0x20,0x10,0x8e,0x4,0x0,
++0x10,0x14,0x23,0x41,0x80,0x14,0x23,0x61,0xa0,0x21,0x22,0x2e,0x22,0x22,0x22,0x22,0x8,0x7c,0x0,0x0,0x0,0x4,0x7e,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x28,0x10,
++0x40,0x20,0x2f,0x8,0x90,0x67,0x20,0xf,0x14,0x27,0xe4,0x27,0x20,0x21,0x23,0x24,0x80,0x40,0xfe,0x2,0x4,0xfc,0x40,0xfc,0x44,0xfc,0x44,0xfc,0x0,0x10,0xc,0x4,
++0x10,0x10,0x10,0xff,0x11,0x13,0x7d,0x11,0x11,0xff,0x11,0x11,0x11,0x11,0x10,0x10,0x40,0x40,0xf8,0x10,0x24,0xfe,0x24,0x24,0x24,0xfc,0x4,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x13,0x12,0x12,0x12,0xfe,0x12,0x12,0x12,0x13,0x1e,0xf2,0x42,0x2,0x3,0x0,0x8,0xfc,0x0,0xfc,0x84,0xfc,0x84,0xfc,0x20,0xfe,0x48,0xc8,0x30,0x48,0xfe,0x0,
++0x4,0x4,0xff,0x4,0x14,0x17,0xf0,0x17,0x14,0x14,0x34,0xc7,0x0,0x48,0x44,0x80,0x40,0x44,0xfe,0x40,0x50,0xd0,0x12,0xdc,0x50,0x52,0x52,0xce,0x0,0x88,0x46,0x2,
++0x0,0x3f,0x20,0x20,0x20,0x20,0x3f,0x20,0x20,0x21,0x21,0x22,0x42,0x44,0x88,0x10,0x8,0xfc,0x80,0xa0,0x90,0x94,0xfe,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0xe,0x4,
++0x4,0x7f,0x11,0x11,0x21,0x25,0x7f,0xa5,0x25,0x25,0x24,0x24,0x3c,0x25,0x2,0x4,0x8,0xfc,0x8,0x28,0x28,0x28,0x48,0x48,0x48,0x48,0x60,0xa0,0xa2,0x22,0x1e,0x0,
++0x0,0x3f,0x24,0x24,0x29,0x29,0x3b,0x2d,0x29,0x29,0x29,0x29,0x49,0x49,0x89,0x9,0x8,0xfc,0x80,0xa0,0x14,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x14,0xfe,0x0,
++0x0,0x8,0x7f,0x48,0x48,0x4b,0x48,0x4b,0x48,0x48,0x4b,0x7a,0x4a,0x2,0x3,0x2,0x40,0x24,0xfe,0x0,0x8,0xfc,0x0,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x2,0x1,0x3f,0x8,0x4,0x3f,0x20,0x20,0x23,0x2c,0x20,0x23,0x4c,0x40,0x83,0x1c,0x0,0x10,0xf8,0x20,0x44,0xfe,0x20,0xc0,0x10,0x20,0xc0,0x8,0x10,0x60,0x80,0x0,
++0x10,0x10,0x10,0x15,0x5a,0x50,0x53,0x92,0x12,0x12,0x13,0x2a,0x26,0x46,0x83,0x2,0x80,0x80,0xfc,0x8,0x10,0x84,0x3e,0x4,0x4,0x4,0xbc,0x4,0x4,0x4,0xfc,0x4,
++0x2,0x1,0x7f,0x40,0x9f,0x10,0x1f,0x10,0x1f,0x2,0xff,0x4,0xc,0x3,0xc,0x30,0x0,0x0,0xfe,0x2,0xf4,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x20,0x40,0x80,0x60,0x18,
++0x0,0x40,0x33,0x10,0x0,0x3,0xf2,0x12,0x12,0x12,0x12,0x12,0x16,0x1a,0x14,0x9,0x40,0x24,0xfe,0x88,0x50,0xfe,0x10,0x20,0x48,0x90,0x24,0x44,0x88,0x10,0x60,0x80,
++0x8,0xfc,0x8,0x48,0x49,0x4a,0x4d,0x48,0x7c,0x6,0x5,0x1d,0xe5,0x44,0x17,0x8,0x40,0x40,0xa0,0xa0,0x10,0xe,0xf4,0x0,0x48,0x48,0x48,0x50,0x10,0x24,0xfe,0x0,
++0x4,0xfe,0x20,0x21,0x3d,0x25,0x25,0x45,0x65,0x9b,0x8,0x10,0x20,0x40,0x81,0x2,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0xfe,0x20,0x50,0x50,0x88,0x6,0x4,
++0x1,0x1,0x1,0x1f,0x11,0x11,0x11,0x11,0x11,0xff,0x1,0x2,0x2,0x4,0x8,0x30,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x14,0xfe,0x0,0x80,0x80,0x60,0x1c,0x8,
++0x1,0x1f,0x11,0x11,0xff,0x4,0xa,0x3f,0xca,0x8,0x8,0xf,0x0,0x7f,0x0,0x0,0x10,0xf8,0x10,0x14,0xfe,0x40,0x30,0xee,0x24,0xa0,0x44,0xfe,0x4,0xc4,0x14,0x8,
++0x8,0x1c,0xf0,0x11,0x15,0xff,0x11,0x39,0x35,0x53,0x50,0x90,0x10,0x10,0x11,0x12,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0xfe,0x20,0x50,0x50,0x88,0x6,0x4,
++0x10,0x13,0x10,0x10,0xfc,0x10,0x33,0x38,0x54,0x50,0x91,0x11,0x12,0x14,0x11,0x10,0x0,0xf8,0x10,0x20,0x40,0x84,0xfe,0xa4,0xa4,0xa4,0x24,0x44,0x44,0x84,0x28,0x10,
++0x10,0x13,0x10,0x10,0xfc,0x10,0x17,0x18,0x30,0xd0,0x11,0x11,0x12,0x14,0x51,0x20,0x0,0xf8,0x10,0x20,0x40,0x84,0xfe,0xa4,0xa4,0xa4,0x24,0x44,0x44,0x84,0x28,0x10,
++0xa,0x9,0x8,0x17,0x10,0x30,0x53,0x90,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x8,0x10,0xa0,0xfc,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x1,0x0,0x1f,0x10,0x97,0x50,0x50,0x11,0x37,0x51,0xd1,0x12,0x22,0x24,0x49,0x0,0x0,0x84,0xfe,0x0,0xf0,0x40,0x80,0x4,0xfe,0x24,0x24,0x44,0x44,0x84,0x28,0x10,
++0x8,0x4,0x2,0x7f,0x1,0x1,0x1,0x3f,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x20,0x40,0x88,0xfc,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x2,0x41,0x30,0x17,0x80,0x60,0x23,0x8,0x10,0x20,0xef,0x20,0x20,0x20,0x20,0x20,0x8,0x10,0xa0,0xfc,0x40,0x40,0xf8,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x0,0x7d,0x45,0x49,0x49,0x51,0x49,0x49,0x45,0x45,0x45,0x69,0x51,0x41,0x41,0x41,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x8,0x5,0x3f,0x2,0x1f,0x2,0x7f,0x2,0x2,0x2,0x0,0xfc,0x0,0xf8,0x0,0xf8,0x88,0x8,0xe8,0x8,0xc8,0x8,0xfa,0xa,0x4,0x0,
++0x10,0x11,0x12,0x24,0x24,0x64,0xa4,0x24,0x24,0x24,0x25,0x26,0x24,0x20,0x20,0x20,0x80,0x4,0x7e,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x54,0x48,0x40,0x40,0x40,
++0x1,0x0,0x1f,0x11,0x90,0x5f,0x50,0x10,0x37,0x50,0xd0,0x1f,0x20,0x20,0x40,0x0,0x0,0x84,0xfe,0x10,0xa4,0xfe,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x8,0x4,0x2,0x7f,0x1,0x3f,0x1,0xff,0x4,0x8,0x34,0xc4,0x4,0x4,0x8,0x10,0x20,0x40,0x88,0xfc,0x0,0xf8,0x0,0xfe,0x40,0x30,0x4e,0x44,0x40,0x40,0x40,0x40,
++0x12,0x11,0x10,0x17,0xfc,0x10,0x3b,0x34,0x50,0x50,0x9f,0x10,0x10,0x10,0x10,0x10,0x8,0x10,0xa0,0xfc,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x1,0x40,0x3f,0x10,0x87,0x60,0x2f,0x8,0x10,0x23,0xe0,0x27,0x21,0x22,0x2d,0x20,0x10,0xa4,0xfe,0x40,0xfc,0x40,0xfe,0x80,0x40,0xc8,0x50,0x60,0x50,0x4e,0x44,0x80,
++0x2,0x44,0x2f,0x28,0xf,0x8,0xef,0x22,0x3f,0x24,0x27,0x24,0x28,0x52,0x89,0x7,0x10,0x10,0x94,0xbe,0xc4,0xa4,0xa4,0x28,0xa8,0x10,0x90,0xa8,0xa4,0xc4,0x6,0xfc,
++0x8,0x7f,0x48,0x4b,0x4a,0x7a,0x4b,0x48,0x48,0x7f,0x48,0x49,0x48,0x48,0x88,0x1b,0x4,0xfe,0x90,0xfc,0x94,0x94,0xfc,0x40,0x40,0xfe,0x88,0x8,0x90,0x60,0x98,0x4,
++0x10,0x10,0x11,0x10,0xfc,0x24,0x24,0x27,0x24,0x44,0x28,0x10,0x28,0x45,0x82,0x4,0x8,0x1c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x50,0x50,0x88,0x8,0x6,0x4,
++0x8,0xfd,0x10,0x11,0x10,0x10,0x7d,0x11,0x12,0x14,0x13,0x1c,0xf1,0x41,0x1,0x1,0x1c,0xe0,0x0,0x24,0xa4,0xa8,0x0,0xfc,0x20,0x24,0xfe,0x20,0x24,0x24,0xfc,0x4,
++0x10,0x10,0x17,0x12,0xfd,0x11,0x16,0x1b,0x34,0xd0,0x1f,0x10,0x12,0x12,0x53,0x22,0x8,0x3c,0xc0,0x48,0x48,0x50,0x0,0xfc,0x40,0x44,0xfe,0x40,0x48,0x48,0xf8,0x8,
++0x4,0x4,0x3,0x7e,0x1,0x0,0x7,0x38,0x0,0x7f,0x2,0x2,0x4,0x4,0x8,0x70,0x0,0x8,0xfc,0x20,0x40,0x84,0x64,0x1c,0x8,0xfc,0x40,0x40,0x40,0x42,0x42,0x3e,
++0x0,0x47,0x32,0x11,0x2,0x3,0xf4,0x10,0x1f,0x10,0x12,0x13,0x12,0x28,0x47,0x0,0x38,0xc0,0x48,0x50,0x40,0xf8,0x40,0x44,0xfe,0x40,0x48,0xf8,0x8,0x6,0xfc,0x0,
++0x2,0x1,0x7f,0x48,0x90,0x28,0xf,0x11,0x21,0xff,0x1,0x21,0x21,0x21,0x3f,0x20,0x0,0x0,0xfe,0x22,0x14,0x8,0xf0,0x0,0x4,0xfe,0x0,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x27,0x22,0x1,0x1,0xe2,0x23,0x24,0x20,0x2f,0x20,0x2a,0x32,0x23,0x2,0x8,0x3c,0xc0,0x48,0x48,0x50,0x0,0xfc,0x40,0x44,0xfe,0x40,0x48,0x48,0xf8,0x8,
++0x10,0x10,0x10,0x12,0xfd,0x25,0x24,0x24,0x24,0x45,0x2a,0x10,0x28,0x45,0x82,0x4,0x50,0x50,0x50,0x52,0x54,0x58,0x50,0x50,0xd8,0x54,0x54,0x90,0x92,0x12,0xe,0x0,
++0x0,0x8,0x7c,0x4f,0x48,0x49,0x4a,0x4d,0x49,0x48,0x48,0x48,0x78,0x49,0x2,0xc,0x80,0x40,0x44,0xfe,0x0,0x10,0x8,0x14,0x10,0xa0,0xa0,0x40,0xa0,0x10,0xe,0x4,
++0x0,0x0,0x7f,0x2,0x21,0x11,0x11,0x4,0x38,0x20,0x20,0x3e,0x20,0x20,0x3f,0x20,0x10,0x78,0x80,0x8,0x8,0x10,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x4,0x4,0xff,0x4,0x8,0x10,0x22,0x7c,0x9,0x10,0x7e,0x0,0xe,0x70,0x20,0x0,0x40,0x44,0xfe,0x40,0x40,0x44,0x7e,0x84,0x4,0x44,0x24,0x24,0x4,0x4,0x28,0x10,
++0x0,0x7f,0x4,0x3f,0x24,0x24,0x3f,0x2,0x2,0xff,0x4,0x8,0x6,0x1,0x6,0x38,0x8,0xfc,0x40,0xf8,0x48,0x48,0xf8,0x0,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x10,0x13,0x11,0x54,0x39,0x10,0xfd,0x29,0x2b,0x2d,0x29,0x2b,0x2d,0x49,0x81,0x1,0x0,0xfc,0x54,0xcc,0x54,0x44,0x20,0xfe,0x20,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x10,0x17,0x12,0x12,0xfe,0x13,0x3a,0x36,0x53,0x52,0x92,0x13,0x1e,0x10,0x10,0x10,0x0,0xfe,0x52,0x54,0x54,0xd8,0x54,0x52,0xd2,0x52,0x5a,0xd4,0x50,0x50,0x50,0x50,
++0x0,0x17,0x78,0x53,0x50,0x57,0x54,0x5b,0x50,0x53,0x52,0x73,0x41,0x0,0xf,0x0,0x48,0xfc,0x40,0xf8,0x0,0xfe,0x2,0xfc,0x0,0xf8,0x8,0xf8,0x10,0xa4,0xfe,0x0,
++0x2,0x7f,0x22,0x22,0x3e,0x22,0x22,0x3e,0x22,0x22,0x27,0xfa,0x42,0x2,0x2,0x2,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x64,0x58,0x40,0x40,0x40,
++0x4,0x8,0x14,0x2,0x1,0x6,0x18,0xe0,0x1f,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x40,0x20,0x50,0x80,0x0,0xc0,0x30,0xe,0xf0,0x10,0x10,0x10,0x50,0x20,0x0,0x0,
++0x0,0x7f,0x49,0x49,0x7f,0x49,0x49,0x7f,0x8,0xa,0x7f,0x8,0x8,0xf,0xf8,0x40,0x0,0x7c,0x4,0x28,0x10,0x10,0xfe,0x12,0x14,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
++0x0,0x40,0x30,0x10,0x1,0x2,0xf,0x10,0x20,0xe3,0x22,0x22,0x22,0x22,0x23,0x2,0x40,0x40,0x80,0x80,0x10,0x8,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x1,0x1,0x1,0x11,0x11,0x11,0x1f,0xf1,0x11,0x11,0x11,0x11,0x10,0x10,0xf,0x0,0x0,0x0,0x0,0x0,0x30,0xd0,0x10,0x10,0x10,0x50,0x20,0x2,0x2,0x2,0xfe,0x0,
++0x0,0xff,0x2,0x4,0x1f,0x10,0x11,0x11,0x11,0x11,0x11,0x11,0x12,0x4,0x8,0x30,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x90,0x60,0x18,0x8,
++0x10,0x10,0x17,0x10,0xf9,0x11,0x12,0x1a,0x36,0xdb,0x12,0x12,0x12,0x12,0x53,0x22,0x80,0x44,0xfe,0x20,0x20,0x3c,0x44,0x64,0x98,0x48,0x50,0x20,0x50,0x8e,0x4,0x0,
++0x4,0x4,0x4,0x4,0x44,0x24,0x24,0x14,0x14,0x14,0x14,0x4,0x4,0x4,0xff,0x0,0x40,0x40,0x40,0x40,0x44,0x44,0x48,0x48,0x50,0x50,0x60,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x8,0x7c,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x2,0x2,0x3f,0x22,0x22,0x3f,0x22,0x22,0x3f,0x22,0x1,0x1,0x6,0x18,0xe0,0x0,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x20,0xc0,0x80,0x44,0x34,0xc,
++0x0,0x78,0x4f,0x48,0x49,0x79,0x4a,0x4a,0x4e,0x7b,0x4a,0x4a,0x4a,0x4a,0x8b,0x1a,0x80,0x44,0xfe,0x20,0x20,0x3c,0x44,0x64,0x98,0x48,0x50,0x20,0x50,0x8e,0x4,0x0,
++0x2,0x1,0xff,0x8,0x8,0x10,0x11,0x32,0x56,0x99,0x10,0x10,0x10,0x11,0x12,0x1c,0x0,0x4,0xfe,0x80,0x80,0xf8,0x8,0x88,0x50,0x10,0xa0,0x40,0xa0,0x10,0xe,0x4,
++0x0,0x40,0x37,0x10,0x81,0x61,0x22,0xa,0x16,0x2b,0xe2,0x22,0x22,0x22,0x23,0x22,0x80,0x44,0xfe,0x20,0x20,0x3c,0x44,0x64,0x98,0x48,0x50,0x20,0x50,0x8e,0x4,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x7f,0x1,0x3f,0x0,0x7f,0x40,0x9f,0x0,0x1f,0x10,0x10,0x1f,0x4,0xff,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x2,0xf4,0x0,0xf0,0x10,0x10,0xf0,0x44,0xfe,0x0,
++0x0,0x7f,0x44,0x44,0x4f,0x50,0x40,0x5f,0x40,0x41,0x41,0x42,0x4c,0x40,0x7f,0x0,0x8,0xfc,0x0,0x10,0xf8,0x80,0x88,0xfc,0x80,0x40,0x30,0x18,0x8,0x0,0xfc,0x0,
++0x10,0x11,0x11,0x11,0xfd,0x10,0x17,0x19,0x31,0xd1,0x11,0x11,0x11,0x17,0x50,0x20,0x8,0xfc,0x8,0x8,0xf8,0x0,0xfe,0x8,0xf8,0x8,0xf8,0x8,0xe,0xf8,0x8,0x8,
++0x10,0x10,0x10,0x1f,0x20,0x20,0x7c,0x90,0x11,0x7e,0x14,0x10,0x14,0x18,0x10,0x0,0x40,0x20,0x24,0xfe,0x40,0x40,0xa0,0xa4,0xa8,0x90,0x90,0x88,0x8e,0xa4,0xc0,0x80,
++0x8,0x8,0x8,0x17,0x10,0x30,0x50,0x90,0x11,0x12,0x14,0x10,0x10,0x10,0x10,0x10,0x40,0x20,0x24,0xfe,0x40,0x40,0xa0,0xa4,0xa8,0x90,0x90,0x88,0x8e,0xa4,0xc0,0x80,
++0x8,0xb,0x8,0x10,0x10,0x3f,0x50,0x90,0x10,0x13,0x10,0x10,0x11,0x11,0x12,0x14,0x8,0xfc,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0xf8,0x88,0x80,0x0,0x0,0x0,0x0,
++0x2,0x1,0x1,0xff,0x2,0x2,0x5,0x5,0xc,0x14,0x24,0xc4,0x4,0x5,0x6,0x4,0x0,0x0,0x4,0xfe,0x0,0x8,0x18,0x20,0xc0,0x80,0x40,0x20,0x18,0xe,0x4,0x0,
++0x4,0x7f,0x48,0x48,0x48,0x5e,0x52,0x52,0x52,0x5e,0x48,0x48,0x48,0x48,0x7e,0x1,0x4,0xfe,0x20,0x44,0xfe,0x84,0x94,0x94,0x94,0x94,0xa4,0xa4,0xa4,0x58,0x86,0x2,
++0x1,0x1,0xff,0x1,0x3f,0x1,0x1,0x3f,0x21,0x21,0x3f,0x1,0x2,0xc,0x30,0xc0,0x0,0x4,0xfe,0x0,0xf8,0x8,0x8,0xf8,0x8,0x0,0xfc,0x4,0x94,0x48,0x30,0xe,
++0x0,0x43,0x32,0x13,0x0,0xf,0xf0,0x13,0x12,0x12,0x12,0x10,0x11,0x2a,0x44,0x3,0x48,0xfc,0x48,0xf8,0x40,0xfe,0x8,0xfc,0x8,0x48,0x48,0xa0,0x18,0x8,0x6,0xfc,
++0x8,0x1c,0xf0,0x11,0x12,0xfc,0x10,0x39,0x34,0x54,0x90,0x11,0x10,0x10,0x10,0x17,0x40,0x40,0xfc,0x84,0x48,0x30,0x60,0xa0,0x3e,0x42,0xc4,0x24,0x18,0x30,0xc0,0x0,
++0x8,0x8,0x8,0x12,0x12,0x32,0x51,0x91,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x18,0x0,0x80,0x64,0x24,0x4,0x8,0x8,0x10,0x90,0xa0,0x40,0xa0,0x10,0x8,0xe,0x4,
++0x0,0x78,0x4f,0x48,0x4b,0x78,0x4b,0x4a,0x4a,0x7b,0x48,0x48,0x48,0x48,0x89,0x1e,0x40,0x44,0xfe,0x40,0xf8,0x48,0xf8,0x48,0x40,0xfe,0x42,0x4a,0xa4,0x90,0xe,0x4,
++0x20,0x26,0x38,0x22,0x1e,0x21,0x3e,0x48,0x8,0xfe,0x8,0x8,0x14,0x22,0x41,0x2,0x0,0xfc,0x8,0x50,0x20,0xfe,0x22,0x24,0xa0,0xb8,0xa0,0xa0,0xe0,0xa0,0x1e,0x4,
++0x0,0x40,0x33,0x12,0x82,0x62,0x23,0xa,0x12,0x22,0xe2,0x22,0x24,0x24,0x28,0x20,0x8,0x3c,0xc0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x2,0x1,0x7f,0x40,0x80,0xf,0x8,0x8,0xf,0x8,0x8,0xf,0x8,0x8,0xff,0x0,0x0,0x0,0xfe,0x2,0x24,0xf0,0x20,0x20,0xe0,0x20,0x20,0xe0,0x20,0x24,0xfe,0x0,
++0x20,0x20,0x2f,0x20,0xfb,0x48,0x4b,0x4a,0x4a,0x93,0x50,0x20,0x50,0x48,0x81,0x6,0x40,0x44,0xfe,0x40,0xf8,0x48,0xf8,0x48,0x40,0xfe,0x42,0x4a,0xa4,0x90,0xe,0x4,
++0x8,0xf,0x10,0x1f,0x0,0xff,0x49,0x2a,0x7f,0x1c,0x2a,0x48,0xff,0x8,0x10,0x60,0x20,0xf0,0x20,0xe0,0x24,0xfe,0x20,0x78,0x24,0xfe,0x54,0x92,0xfe,0x10,0x10,0x10,
++0x10,0x10,0x17,0x10,0xfc,0x11,0x37,0x38,0x57,0x52,0x92,0x12,0x13,0x12,0x10,0x10,0x40,0x48,0xfc,0x40,0xa0,0x14,0xfe,0x8,0xe8,0x28,0x28,0x28,0xe8,0x8,0x28,0x10,
++0x10,0x10,0x10,0x12,0x7e,0x55,0x55,0x55,0x54,0x7c,0x10,0x14,0x1c,0xf5,0x42,0xc,0x0,0x80,0x64,0x24,0x4,0x8,0x8,0x10,0x90,0xa0,0x40,0xa0,0x90,0x8,0xe,0x4,
++0x8,0x8,0xf,0x10,0x10,0x31,0x5f,0x90,0x13,0x12,0x12,0x12,0x13,0x12,0x10,0x10,0x40,0x48,0xfc,0x40,0xa0,0x14,0xfe,0x8,0xe8,0x28,0x28,0x28,0xe8,0x8,0x28,0x10,
++0x0,0x7f,0x0,0x0,0x20,0x20,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x1f,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,0x0,0x0,0x0,0x4,0x4,0x4,0xfc,0x0,
++0x0,0x0,0x7f,0x0,0x0,0x1,0x2,0x4,0x8,0x10,0x10,0x20,0x20,0x20,0x1f,0x0,0x0,0x0,0xe0,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0xfc,0x0,
++0x2,0x4,0x8,0x10,0x3f,0x8,0x8,0x1f,0x21,0x1,0xff,0x2,0x4,0x8,0x10,0x60,0x0,0x0,0x20,0x10,0xf8,0x8,0x10,0xf8,0x0,0x4,0xfe,0x80,0x40,0x30,0x1c,0x8,
++0x0,0x4,0x42,0x43,0x41,0x40,0x40,0x40,0x41,0x42,0x44,0x48,0x50,0x60,0x1,0x6,0x0,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x10,0x10,0x10,0x20,0x30,0x48,0x84,0x4,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x0,0x1,0x2,0x4,0x8,0x10,0x20,0x20,0x20,0x1f,0x40,0x44,0xfe,0x40,0x0,0xc0,0x80,0x0,0x0,0x0,0x0,0x0,0x2,0x2,0x2,0xfe,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x16,0x1a,0x32,0xd2,0x12,0x13,0x12,0x10,0x50,0x20,0x40,0x84,0x3e,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0xa4,0x34,0x28,0x20,0x20,0x20,
++0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x8,0x1f,0x24,0x44,0x88,0x10,0x21,0x2,0x4,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,0x4,0xfe,0x44,0x44,0x84,0x84,0x4,0x28,0x10,
++0x1f,0x10,0x10,0x1f,0x0,0x3f,0x21,0x21,0x21,0x3f,0x20,0x20,0x20,0x20,0x1f,0x0,0xf0,0x10,0x10,0xf0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x4,0x4,0xfc,0x0,
++0x10,0x10,0x10,0x10,0x55,0x56,0x55,0x54,0x54,0x54,0x54,0x55,0x7d,0x45,0x0,0x0,0x80,0x80,0x88,0xfc,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x2,0x2,0xfe,0x0,
++0x8,0x8,0xb,0x10,0x10,0x30,0x50,0x91,0x12,0x12,0x14,0x14,0x14,0x14,0x13,0x10,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x8,0x9,0x11,0x21,0x41,0xa,0x14,0x33,0x51,0x91,0x10,0x10,0x10,0x10,0x13,0x1c,0x10,0xf8,0x10,0x10,0x10,0xe,0x0,0xf8,0x8,0x10,0x90,0xe0,0x40,0xb0,0xe,0x4,
++0x0,0x7b,0x49,0x48,0x4f,0x78,0x4b,0x4a,0x4b,0x7a,0x4b,0x48,0x4b,0x4b,0x8d,0x18,0x40,0xf8,0x10,0xa4,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x80,0x68,0x26,0xa,0xf8,
++0x2,0x43,0x24,0x28,0x1f,0x8,0xe8,0x2f,0x20,0x21,0x21,0x22,0x24,0x58,0x88,0x7,0x0,0xe0,0x20,0x48,0xfc,0x88,0x88,0xf8,0x80,0x40,0x54,0x44,0x3c,0x0,0x6,0xfc,
++0x40,0x4c,0x71,0x40,0x47,0x3c,0x41,0x7c,0x91,0x10,0xfe,0x13,0x28,0x24,0x44,0x80,0x20,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x0,0x1f,0x10,0x91,0x51,0x51,0x12,0x34,0x53,0xd1,0x10,0x20,0x21,0x46,0x18,0x80,0x44,0xfe,0x0,0xf0,0x10,0x10,0xc,0x0,0xf8,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x2,0x1,0x1,0xff,0x4,0x4,0x4,0x14,0x14,0x24,0x44,0x4,0x8,0x8,0x11,0x0,0x0,0x0,0x4,0xfe,0x40,0x40,0x40,0x50,0x48,0x44,0x44,0x40,0x40,0x40,0x40,0x80,
++0x2,0x1,0xff,0x5,0xc,0x34,0xc5,0x6,0x3f,0x24,0x28,0x37,0x24,0x24,0x27,0x20,0x0,0x4,0xfe,0x10,0xa0,0x60,0x1c,0x8,0xfc,0x48,0x28,0xd8,0x48,0x48,0xc8,0x18,
++0x1,0x3f,0x8,0x4,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x2,0x51,0x50,0x90,0xf,0x10,0xf8,0x20,0x44,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0x84,0x92,0x12,0xf0,
++0x10,0x8,0x7f,0x22,0x14,0xff,0x20,0x52,0x9c,0x28,0x4c,0x1b,0x29,0xc8,0x28,0x11,0x8,0x7c,0x48,0x48,0x48,0x86,0x0,0xf8,0x48,0x48,0x48,0x30,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x13,0x10,0x58,0x54,0x50,0x91,0x12,0x12,0x14,0x14,0x14,0x14,0x13,0x10,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x0,0x2,0x21,0x21,0x10,0x10,0x8,0x8,0x4,0x2,0x1,0x2,0x4,0x8,0x10,0x60,0x0,0x8,0x8,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x0,0x80,0x60,0x18,0xe,0x4,
++0x8,0x4,0x0,0x7f,0x0,0x4,0x8,0x10,0x0,0x3f,0x24,0x24,0x24,0x24,0xff,0x0,0x20,0x40,0x8,0xfc,0x0,0x40,0x30,0x10,0x0,0xf8,0x48,0x48,0x48,0x48,0xfe,0x0,
++0x2,0x41,0x30,0x17,0x80,0x61,0x22,0xc,0x10,0x27,0xe5,0x25,0x25,0x25,0x3f,0x20,0x10,0x20,0x8,0xfc,0x0,0x20,0x18,0x8,0x0,0xf8,0x28,0x28,0x28,0x28,0xfe,0x0,
++0x2,0x42,0x33,0x12,0x2,0x1,0xf0,0x10,0x13,0x12,0x12,0x13,0x16,0x1a,0x13,0x2,0x0,0x38,0xc0,0x2,0x2,0xfe,0x0,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x0,0x40,0x30,0x12,0x2,0x2,0xf1,0x11,0x10,0x10,0x10,0x14,0x19,0x12,0x4,0x8,0x0,0x80,0x44,0x44,0x4,0x8,0x8,0x10,0x90,0xa0,0x40,0xa0,0x10,0x8,0xe,0x4,
++0x0,0x40,0x2f,0x28,0x10,0x3,0xe2,0x22,0x23,0x22,0x22,0x23,0x2a,0x32,0x2f,0x0,0x80,0x40,0xfe,0x2,0x4,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0xfe,0x0,
++0x0,0x47,0x22,0x21,0x0,0x0,0xe3,0x2c,0x20,0x23,0x20,0x24,0x2f,0x30,0x20,0x0,0x0,0xfc,0x8,0xb0,0x40,0xa0,0x1e,0x44,0x50,0xf8,0x40,0x48,0xfc,0x40,0x40,0x40,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x1f,0x8,0x8,0xff,0x8,0x8,0x8,0x10,0x20,0x10,0xf8,0x10,0x10,0xf0,0x4,0x4,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x7e,0x22,0x1a,0x22,0x2,0x1f,0x11,0x1f,0x11,0x1f,0x4,0x3f,0x4,0xff,0x8,0x30,0xf8,0x88,0x68,0x88,0x8,0xf0,0x10,0xf0,0x10,0xf0,0x40,0xf8,0x40,0xfe,0x20,0x10,
++0x0,0x7e,0x22,0x12,0x6,0x1a,0x62,0x1,0x1,0x7f,0x0,0x8,0x4,0x4,0xff,0x0,0x4,0xfe,0x44,0x24,0xc,0x34,0xc4,0x0,0x8,0xfc,0x20,0x20,0x40,0x44,0xfe,0x0,
++0x10,0x11,0x20,0x20,0x44,0xf8,0x10,0x23,0x40,0xfd,0x0,0x0,0x1d,0xe0,0x40,0x0,0x0,0xfc,0x88,0x50,0x20,0x50,0x8e,0x24,0x20,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,
++0x4,0x4,0xff,0x4,0x3f,0x21,0x21,0x2f,0x21,0x22,0x22,0x24,0x28,0x20,0x3f,0x20,0x40,0x44,0xfe,0x40,0xf8,0x8,0x8,0xe8,0x8,0x88,0x88,0x48,0x28,0x8,0xf8,0x8,
++0x8,0x8,0xff,0x8,0x7c,0x44,0x48,0x50,0x48,0x44,0x44,0x64,0x59,0x41,0x42,0x44,0x20,0x24,0xfe,0x20,0xfc,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,0x4,0x4,0x14,0x8,
++0x0,0x7f,0x41,0x41,0x41,0x5f,0x41,0x41,0x42,0x42,0x44,0x48,0x50,0x40,0x7f,0x40,0x4,0xfe,0x4,0x4,0x24,0xf4,0x4,0x4,0x84,0x84,0x44,0x34,0x14,0x4,0xfc,0x4,
++0xc,0x70,0x44,0x7e,0x44,0x7d,0x46,0x7d,0x40,0x7c,0x44,0x44,0x44,0x54,0x48,0x83,0x8,0xfc,0x88,0x88,0x88,0x6,0x0,0xfc,0x88,0x88,0x50,0x20,0x50,0x50,0x8e,0x4,
++0x2,0x1,0x3f,0x8,0x4,0x4,0xff,0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0x10,0xf8,0x20,0x20,0x44,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x0,0x7c,0x44,0x48,0x48,0x50,0x48,0x48,0x44,0x44,0x44,0x68,0x51,0x41,0x42,0x44,0x4,0xfe,0x84,0x84,0x84,0xfc,0x84,0x84,0x84,0xfc,0x84,0x84,0x4,0x4,0x14,0x8,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x1,0x4,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x54,0x54,0x54,0x8c,0x4,0x4,0xfc,0x4,
++0x0,0x8,0x7c,0x48,0x49,0x49,0x4a,0x4c,0x48,0x4b,0x48,0x78,0x48,0x0,0x0,0x0,0x40,0x40,0xa0,0xa0,0x10,0x10,0x8e,0x44,0x40,0xf8,0x8,0x10,0x10,0x20,0x40,0x80,
++0x10,0x11,0x11,0x3d,0x21,0x21,0x7d,0x91,0x11,0xfd,0x11,0x13,0x15,0x19,0x11,0x1,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x4,0x8c,0x50,0x20,0x10,0x4e,0x84,0x0,
++0x40,0x30,0x17,0x0,0x84,0x62,0x22,0x7,0x10,0x20,0xef,0x20,0x20,0x20,0x27,0x20,0x8,0x3c,0xc0,0x4,0x84,0x48,0x10,0xfc,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x0,
++0x2,0x1,0x7f,0x40,0x80,0x3f,0x1,0x3f,0x21,0x3f,0x21,0x3f,0x0,0xc,0x30,0x40,0x0,0x0,0xfe,0x2,0x14,0xf8,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0x60,0x18,0x4,
++0x10,0x10,0x10,0x10,0x1e,0x22,0x25,0x50,0x90,0x10,0x10,0x12,0x14,0x18,0x11,0x2,0x20,0x20,0x20,0x40,0x7e,0x82,0x24,0x20,0x20,0x20,0x50,0x50,0x90,0x88,0xe,0x4,
++0x0,0x0,0x3f,0x4,0x4,0xff,0x4,0x4,0x3f,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x0,0x10,0xf8,0x10,0x14,0xfe,0x10,0x10,0xf0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x7f,0x1,0x1,0x1,0x3f,0x20,0x20,0x41,0x7f,0x1,0x1,0x1,0x11,0xa,0x4,0x8,0x88,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x88,0x8,0x8,0x8,0x8,0x8,0x8,
++0x0,0x78,0x48,0x51,0x52,0x67,0x50,0x4b,0x48,0x4b,0x68,0x52,0x42,0x46,0x4a,0x41,0x80,0x80,0xf0,0x10,0x24,0xfe,0x4,0xfc,0x4,0xfc,0x4,0x80,0x60,0x2c,0xa,0xf8,
++0x6,0x78,0x40,0x40,0x40,0x44,0x7e,0x40,0x40,0x40,0x40,0x4e,0x70,0x0,0x0,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0xa8,0x90,0x80,0x80,0x80,
++0x8,0x8,0x7f,0x8,0x1,0x1f,0x11,0x11,0x11,0xff,0x1,0x2,0x2,0x4,0x18,0x60,0x20,0x28,0xfc,0x20,0x10,0xf8,0x10,0x10,0x14,0xfe,0x0,0x80,0x80,0x60,0x1c,0x8,
++0x10,0x17,0x14,0x15,0xfd,0x16,0x3b,0x34,0x50,0x5f,0x90,0x11,0x10,0x10,0x11,0x16,0x0,0xbc,0xa4,0xac,0xac,0xb4,0x18,0xa4,0x80,0xfe,0x90,0x10,0xa0,0x40,0xb0,0x8,
++0x0,0x3e,0x22,0x2a,0x2a,0x2a,0x14,0x62,0x2,0xff,0x4,0x8,0x4,0x3,0x4,0x38,0x8,0xfc,0x88,0xa8,0xa8,0xa8,0x50,0x88,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x0,0x3f,0x22,0x24,0x2c,0x35,0x24,0x24,0x21,0x27,0x24,0x24,0x47,0x40,0x9f,0x0,0x80,0xfe,0x50,0x7c,0xd0,0x7c,0x50,0x5c,0x0,0xf0,0x90,0x20,0xfc,0x4,0xe4,0xc,
++0x1,0x0,0x3f,0x20,0x21,0x28,0x24,0x24,0x22,0x22,0x22,0x22,0x40,0x40,0x9f,0x0,0x0,0x84,0xfe,0x0,0x4,0x84,0x84,0x48,0x48,0x48,0x10,0x10,0x20,0x44,0xfe,0x0,
++0x10,0x17,0x24,0x25,0x45,0xfe,0x13,0x24,0x40,0xff,0x0,0x1,0x1c,0xe0,0x41,0x6,0x0,0xbc,0xa4,0xac,0xac,0xb4,0x18,0xa4,0x80,0xfe,0x90,0x10,0xa0,0x40,0xb0,0x8,
++0x4,0x4,0x7f,0x4,0x4,0x7f,0x40,0xbf,0x1,0x1,0x3f,0x1,0x1,0x1,0xff,0x0,0x40,0x48,0xfc,0x40,0x40,0xfe,0x2,0xf4,0x0,0x10,0xf8,0x0,0x40,0x24,0xfe,0x0,
++0x4,0x4,0x7f,0x4,0x4,0x7f,0x41,0x81,0x1f,0x11,0x11,0x1f,0x1,0x1,0x3f,0x0,0x40,0x48,0xfc,0x40,0x40,0xfe,0x2,0x14,0xf8,0x10,0x10,0xf0,0x0,0x10,0xf8,0x8,
++0x4,0x4,0x7f,0x4,0x7f,0x40,0x8f,0x8,0x8,0xf,0x0,0x1f,0x10,0x10,0x1f,0x10,0x40,0x48,0xfc,0x40,0xfe,0x2,0xe4,0x20,0x20,0xe0,0x0,0xf0,0x10,0x10,0xf0,0x10,
++0x4,0x4,0x7f,0x4,0x4,0x7f,0x41,0x81,0x9,0x9,0x11,0x2,0x2,0x4,0x18,0x60,0x40,0x48,0xfc,0x40,0x40,0xfe,0x2,0x14,0x30,0x40,0x0,0x80,0x40,0x30,0xe,0x4,
++0x10,0x10,0x14,0x7e,0x54,0x54,0x55,0x55,0x55,0x7d,0x11,0x15,0x1d,0xf4,0x40,0x0,0x8,0xfc,0x88,0x88,0xf8,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0x22,0x1e,
++0x0,0x41,0x26,0x14,0x4,0x4,0xf4,0x14,0x15,0x16,0x14,0x10,0x10,0x28,0x47,0x0,0x0,0x84,0x7e,0x44,0x44,0x44,0x44,0xc4,0x44,0x54,0x48,0x40,0x40,0x46,0xfc,0x0,
++0x1,0xff,0x10,0x1f,0x0,0x1f,0x10,0x1f,0x0,0x77,0x54,0x75,0x55,0x71,0x52,0xb4,0x0,0xfe,0x0,0xf0,0x0,0xf0,0x10,0xf0,0x0,0xdc,0x54,0x54,0x5c,0x14,0x96,0x62,
++0x0,0x7f,0x10,0x17,0x14,0x12,0x21,0x22,0x44,0x0,0x3f,0x24,0x24,0x24,0xff,0x0,0x10,0xf8,0x10,0xd0,0x7c,0x84,0x4,0xd4,0x48,0x0,0xf8,0x48,0x48,0x48,0xfe,0x0,
++0x0,0x3f,0x20,0x3f,0x20,0x3f,0x4,0xff,0x0,0x3f,0x20,0x3f,0x15,0x24,0x54,0x8,0x84,0xc4,0x88,0x90,0xa0,0x84,0x4,0xe8,0x10,0xa2,0x82,0x84,0x8,0x90,0xa0,0x40,
++0x40,0x4b,0x70,0x40,0x45,0x3d,0x1,0x1d,0xf1,0x15,0xff,0x11,0x38,0x54,0x91,0x16,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x20,0x58,0x84,0x2,
++0x4,0xff,0x10,0x10,0x21,0x25,0x7f,0xa5,0x25,0x25,0x25,0x24,0x3d,0x24,0x0,0x3,0x4,0xfe,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xa0,0x60,0x9e,0x4,
++0x0,0x8,0x7c,0x4b,0x4a,0x4a,0x4a,0x7a,0x4a,0x4f,0x48,0x48,0x78,0x49,0x2,0xc,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0x48,0x48,0xfe,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x0,0x11,0x79,0x52,0x52,0x54,0x5f,0x52,0x54,0x5f,0x50,0x71,0x4e,0x4,0x0,0x0,0x20,0x20,0x24,0x3e,0x44,0x84,0x4,0x44,0x24,0xa4,0x4,0x84,0x4,0x44,0x28,0x10,
++0x20,0x27,0x24,0x24,0xfc,0x27,0x2c,0x34,0x64,0xa7,0x24,0x24,0x28,0x28,0xb0,0x40,0x4,0xfe,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0x44,0x54,0x8,
++0x10,0x17,0x14,0x24,0x24,0x67,0xa4,0x24,0x24,0x27,0x24,0x24,0x28,0x28,0x30,0x20,0x4,0xfe,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0x44,0x54,0x8,
++0x0,0x78,0x4f,0x49,0x4a,0x7a,0x4f,0x49,0x4a,0x7c,0x4f,0x48,0x48,0x49,0x4a,0x9c,0x40,0x24,0xfe,0x10,0x28,0xbe,0x68,0x28,0xbe,0xa8,0xa8,0xbe,0xa8,0x28,0x3e,0x20,
++0x0,0x0,0x1f,0x10,0x97,0x54,0x54,0x17,0x34,0x54,0xd7,0x14,0x24,0x24,0x48,0x10,0x80,0x44,0xfe,0x0,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x44,0x54,0x8,
++0x0,0x3f,0x20,0x2f,0x20,0x3f,0x20,0x2f,0x20,0x2f,0x28,0x2f,0x48,0x4f,0x88,0x8,0x84,0xfe,0x80,0xf8,0x88,0xfe,0x88,0xf8,0x80,0xf8,0x88,0xf8,0x88,0xf8,0x88,0x98,
++0x1,0x0,0xff,0x8,0x10,0x21,0x49,0xfb,0x11,0x25,0x45,0xf9,0x9,0x11,0x21,0x41,0x0,0x84,0xfe,0xa0,0x94,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x14,0xfe,0x0,
++0x0,0x7d,0x44,0x44,0x44,0x7d,0x11,0x11,0x5d,0x51,0x51,0x51,0x5d,0xf1,0x41,0x1,0x0,0xfc,0x8,0x50,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x24,0x24,0xc,
++0x10,0x11,0x10,0x14,0x7e,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xf5,0x41,0x1,0x0,0xfc,0x8,0x50,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x24,0x24,0xc,
++0x0,0x8,0x7c,0x4b,0x48,0x48,0x4f,0x48,0x49,0x49,0x4a,0x7a,0x44,0x8,0x1,0x0,0x80,0x40,0x0,0xc0,0x44,0x4c,0xf0,0xe0,0x50,0x50,0x48,0x4e,0x44,0x40,0x40,0x80,
++0x0,0x40,0x30,0x13,0x80,0x60,0x27,0x8,0x11,0x21,0xe2,0x22,0x24,0x28,0x21,0x20,0x80,0x40,0x0,0xc0,0x44,0x4c,0xf0,0xe0,0x50,0x50,0x48,0x4e,0x44,0x40,0x40,0x80,
++0x0,0x47,0x30,0x10,0x80,0x67,0x24,0xc,0x17,0x24,0xe4,0x27,0x24,0x24,0x24,0x24,0x0,0xf8,0x10,0xa0,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x54,0x8,
++0x2,0x1,0x0,0x1f,0x1,0x1,0x7d,0x5,0x5,0x9,0x9,0x11,0x21,0x41,0x5,0x2,0x0,0x0,0x0,0x0,0x8,0x18,0xa0,0x40,0x40,0x20,0x20,0x10,0xe,0x4,0x0,0x0,
++0x3f,0x2,0x1,0x3f,0x21,0x3f,0x21,0x3f,0x21,0x21,0x2,0x51,0x50,0x90,0xf,0x0,0xf0,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x18,0x0,0x84,0x92,0x12,0xf0,0x0,
++0x3f,0x2,0x1,0x3f,0x21,0x3f,0x21,0x3f,0x21,0x21,0x7f,0x2,0x2,0x4,0x18,0x60,0xf0,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x10,0xf8,0x8,0x8,0x8,0x50,0x20,
++0x0,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x41,0x41,0x80,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x28,0x10,
++0x1,0x1,0x9,0x49,0x49,0x51,0x53,0x7d,0x45,0x49,0x55,0x7f,0x43,0x41,0x7f,0x40,0x0,0x0,0x20,0x24,0x24,0x44,0x4c,0xf4,0x14,0x24,0x54,0xfc,0xc,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x20,0x20,0x7f,0xa1,0x21,0x21,0x22,0x22,0x22,0x24,0x24,0x28,0x30,0x80,0xa0,0x90,0x90,0x84,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x8,0x8,0x10,0x15,0x36,0x54,0x94,0x14,0x14,0x11,0x2,0x51,0x50,0x90,0xf,0x0,0x80,0x84,0xfe,0x8,0x88,0x50,0x20,0x50,0x8e,0x4,0x0,0x84,0x92,0x12,0xf0,0x0,
++0x10,0x10,0x10,0x10,0x58,0x57,0x51,0x91,0x11,0x11,0x12,0x12,0x12,0x14,0x14,0x18,0x80,0xa0,0x90,0x90,0x84,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x1,0x1,0x1,0x1,0x1,0xff,0x2,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x0,0x40,0x20,0x20,0x4,0xfe,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x1,0x1,0x1,0x1,0x7f,0x41,0x41,0x41,0x41,0x7f,0x41,0x41,0x41,0x41,0x7f,0x40,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x8,0x9,0x7f,0x49,0x49,0x49,0x49,0x7f,0x49,0x49,0x49,0x49,0x7f,0x41,0x0,0x0,0x0,0x7c,0xc4,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x10,0x10,0x10,0x1d,0x21,0x21,0x7d,0x91,0x11,0x7d,0x11,0x11,0x15,0x19,0x11,0x0,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,
++0x0,0x44,0x2c,0x10,0x28,0x4f,0x89,0x9,0x19,0x29,0x49,0x8a,0xa,0xa,0x54,0x28,0x80,0xa0,0x90,0x90,0x84,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x40,0x30,0x10,0x87,0x64,0x24,0xc,0x14,0x27,0xe4,0x24,0x24,0x24,0x27,0x24,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0x44,0xfc,0x4,
++0x2,0x41,0x20,0x2f,0x82,0x62,0x23,0x2,0x12,0x22,0xe2,0x24,0x24,0x28,0x31,0x20,0x10,0x14,0x1e,0xe0,0x40,0x3e,0x84,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0xa8,0x10,
++0x0,0xff,0x4,0x4,0x3f,0x24,0x24,0x24,0x24,0x28,0x30,0x2f,0x20,0x20,0x3f,0x20,0x4,0xfe,0x40,0x48,0xfc,0x48,0x48,0x48,0x78,0x8,0x48,0xe8,0x8,0x8,0xf8,0x8,
++0x2,0x2,0xff,0x4,0x4,0xf,0x8,0x18,0x2f,0x48,0x88,0xf,0x8,0x8,0x8,0x8,0x0,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x4,0x4,0x4,0xff,0x4,0x4,0xf,0x8,0x14,0x12,0x21,0x40,0x81,0x6,0x18,0x60,0x0,0x0,0x4,0xfe,0x0,0x0,0xf0,0x10,0x20,0x20,0x40,0x80,0x40,0x30,0xe,0x4,
++0x2,0x2,0x2,0xff,0x4,0x4,0x8,0x8,0x1f,0x28,0x48,0x88,0x8,0x8,0xf,0x8,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0x8,0x10,0x1f,0x31,0x51,0x92,0x13,0x15,0x19,0x11,0x11,0x11,0x11,0x11,0x80,0x80,0x80,0x84,0xfe,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x4,0xe,0xf0,0x12,0x57,0x39,0x11,0xff,0x11,0x39,0x35,0x55,0x91,0x11,0x11,0x11,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x0,0x47,0x20,0x20,0xf,0x1,0xe2,0x24,0x2b,0x21,0x21,0x21,0x2a,0x32,0x24,0x8,0x38,0xc0,0x40,0x44,0xfe,0x60,0x50,0x4e,0xf4,0x10,0x20,0x3c,0x4,0x4,0x28,0x10,
++0x0,0x7f,0x10,0x10,0x10,0x8,0x8,0x4,0x4,0x2,0x1,0x2,0x4,0x8,0x30,0xc0,0x0,0xf0,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x80,0x40,0x30,0xe,0x4,
++0x0,0x10,0x10,0x10,0x20,0x25,0x44,0xf8,0x10,0x10,0x20,0x48,0xfc,0x45,0x2,0x4,0x40,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x4,0x28,0x10,
++0x0,0x43,0x30,0x10,0x0,0x7,0xf0,0x10,0x10,0x10,0x10,0x11,0x10,0x28,0x47,0x0,0x10,0xf8,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x80,0x6,0xfc,0x0,
++0x4,0x42,0x22,0x3f,0x84,0x44,0x47,0xd,0x15,0x25,0xe5,0x25,0x25,0x29,0x35,0x22,0x10,0x10,0x90,0xd0,0x28,0x28,0x44,0x82,0x20,0x18,0x8,0x0,0x20,0x18,0xc,0x4,
++0x0,0x3f,0x1,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x10,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x1,0x1,0xff,0x1,0x1,0x5,0x2,0x3f,0x24,0x24,0x24,0x24,0xff,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,0x0,0x0,0x8,0xfc,0x48,0x48,0x48,0x48,0xfe,0x0,
++0x10,0x10,0x10,0x11,0xfe,0x14,0x33,0x3a,0x56,0x53,0x92,0x12,0x13,0x12,0x12,0x12,0x40,0x60,0x90,0x8,0xf6,0x0,0xc4,0x54,0x54,0xd4,0x54,0x54,0xc4,0x44,0x54,0xc8,
++0x1,0x1,0x3f,0x20,0x2f,0x20,0x27,0x24,0x27,0x20,0x2f,0x20,0x5f,0x41,0x86,0x18,0xf8,0x0,0xfe,0x84,0xf0,0x84,0xfc,0x10,0xf0,0x80,0xf8,0x80,0xfe,0x40,0x30,0xc,
++0x0,0x1f,0x11,0x1f,0x11,0x1f,0x1,0x3f,0x21,0x22,0x27,0x22,0x51,0x50,0x90,0xf,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x8,0xfc,0x8,0x48,0xe8,0x10,0x84,0x92,0x12,0xf0,
++0x1,0x9,0x31,0x27,0x22,0x3d,0x27,0x21,0x39,0x27,0x21,0xff,0x0,0x10,0x30,0x40,0x0,0x8,0x3c,0xc8,0x8,0x38,0xc8,0x8,0x38,0xc8,0x8,0xfe,0x0,0x10,0xc,0x4,
++0x1,0x1,0x2,0x4,0x8,0x10,0x2f,0xc1,0x1,0x3f,0x1,0x9,0x19,0x21,0x45,0x2,0x0,0x0,0x80,0x40,0x20,0x10,0xee,0x4,0x10,0xf8,0x0,0x20,0x18,0xc,0x4,0x0,
++0x1,0x2,0x4,0x8,0x37,0xc0,0x3e,0x22,0x22,0x3e,0x22,0x22,0x3e,0x22,0x22,0x26,0x0,0x80,0x40,0x30,0xce,0x4,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x8,0x18,
++0x0,0x41,0x22,0x24,0xb,0x10,0xe7,0x24,0x27,0x24,0x27,0x24,0x25,0x50,0x8f,0x0,0x80,0x40,0x20,0x10,0xee,0x4,0x88,0xa8,0xa8,0xa8,0xa8,0x88,0x98,0x6,0xfc,0x0,
++0x4,0x4,0xf,0x10,0x20,0x7f,0xa1,0x21,0x3f,0x21,0x21,0x3f,0x20,0x0,0xff,0x0,0x0,0x0,0xe0,0x40,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x4,0xfe,0x0,
++0x20,0x20,0x21,0x22,0xb5,0xa8,0xa7,0x24,0x24,0x27,0x24,0x24,0x27,0x24,0x24,0x25,0x40,0xc0,0x20,0x10,0xee,0x4,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x88,0xa8,0x90,
++0x0,0x40,0x31,0x12,0x85,0x68,0x27,0xc,0x14,0x27,0xe4,0x24,0x27,0x24,0x24,0x25,0x40,0xc0,0x20,0x10,0xee,0x4,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x88,0xa8,0x90,
++0x1,0x41,0x31,0x12,0x84,0x6f,0x24,0xc,0x17,0x24,0xe4,0x27,0x24,0x20,0x2f,0x20,0x0,0x0,0xf8,0x10,0x24,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,0x0,0xfe,0x0,
++0x0,0x7b,0x4a,0x52,0x53,0x62,0x52,0x4b,0x48,0x4f,0x6c,0x54,0x45,0x44,0x44,0x44,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x44,0xfe,0x44,0x54,0xf4,0x84,0x14,0x8,
++0x0,0x3f,0x0,0x2,0x1,0x0,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x0,0xf0,0x40,0x80,0x0,0x80,0xfc,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x24,0x25,0x24,0x44,0x2f,0x10,0x28,0x45,0x82,0x4,0x8,0xfc,0x8,0x8,0xf8,0x8,0x0,0xf8,0x40,0x44,0xfe,0x40,0xa0,0x10,0xe,0x4,
++0x0,0xff,0x1,0x1,0x3f,0x21,0x21,0x29,0x25,0x21,0x21,0x29,0x25,0x21,0x21,0x20,0x4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x48,0x28,0x8,0x8,0x48,0x28,0x8,0x28,0x10,
++0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x1f,0x0,0x0,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0x8,0x48,0xe8,0x8,0x8,0x50,0x20,
++0x10,0x10,0x10,0x10,0x54,0x54,0x54,0x54,0x54,0x54,0x57,0x7c,0x44,0x0,0x0,0x0,0x80,0x80,0x88,0xfc,0x80,0x80,0x84,0xfe,0x4,0x24,0xf4,0x4,0x4,0x4,0x28,0x10,
++0x0,0x0,0x7f,0x1,0x3f,0x21,0x21,0x3f,0x1,0x7f,0x41,0x41,0x5f,0x48,0x40,0x40,0x10,0x78,0x80,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x4,0x44,0xe4,0x24,0x4,0xc,
++0x2,0x1,0x7f,0x40,0x80,0x1f,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x0,0x0,0xfe,0x2,0x24,0xf0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x4f,0x21,0x21,0x7,0x2,0xe2,0x3f,0x20,0x20,0x27,0x24,0x2c,0x34,0x27,0x4,0x8,0xfc,0x0,0x10,0xf8,0x10,0x14,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x7e,0x2,0x2,0x22,0x12,0x12,0x2,0xa,0x12,0x62,0x22,0x2,0x2,0x14,0x8,0x4,0xfe,0x4,0x4,0x44,0x24,0x24,0x4,0x14,0x24,0xc4,0x44,0x4,0x4,0x28,0x10,
++0x0,0x7f,0x1,0x1,0x1,0x1,0x1,0x3f,0x1,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x40,0x30,0x10,0x4,0xfe,0x0,
++0x20,0x20,0x20,0x27,0xf8,0x20,0x27,0x24,0x24,0x24,0x3f,0xe0,0x43,0xc,0x0,0x1,0x20,0x28,0x24,0xfe,0x20,0xa0,0xe0,0xa4,0xa4,0xa8,0x90,0x10,0xaa,0x4a,0x86,0x0,
++0x8,0x8,0xff,0x8,0x0,0x3f,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x20,0x24,0xfe,0x20,0x10,0xf8,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x11,0xff,0x20,0x22,0x7f,0x62,0xa2,0x3e,0x22,0x22,0x3e,0x22,0x22,0x2a,0x24,0x0,0x7c,0xc4,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x0,0xb,0x7c,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x1,0x0,0x8,0xfc,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x0,0x47,0x24,0x27,0x4,0x7,0xe0,0x2f,0x28,0x28,0x2b,0x28,0x28,0x50,0x88,0x7,0x8,0xfc,0x88,0xf8,0x88,0xf8,0x84,0xfe,0x84,0xa4,0xf4,0x4,0x14,0x8,0x6,0xfc,
++0x0,0x10,0x79,0x52,0x55,0x58,0x57,0x54,0x54,0x57,0x54,0x74,0x57,0x4,0x4,0x5,0x40,0xc0,0x20,0x10,0xee,0x4,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x88,0xa8,0x90,
++0x10,0x10,0x10,0x55,0x54,0x54,0x54,0x55,0x56,0x55,0x55,0x7d,0x45,0x1,0x1,0x1,0x50,0x50,0x88,0x24,0x50,0x50,0x88,0x6,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x14,0x14,0x27,0x4a,0x82,0x12,0x2f,0x62,0xaa,0x2b,0x2a,0x2a,0x2b,0x3c,0x28,0x20,0x0,0x4,0xbe,0x24,0x24,0xa4,0xe4,0x24,0x24,0xa4,0x24,0x34,0xa8,0x20,0x20,0x20,
++0x1,0x2,0x4,0xf,0x30,0xde,0x12,0x1e,0x12,0x1e,0x12,0x16,0x29,0x28,0x48,0x7,0x0,0x80,0x40,0xf0,0xe,0x14,0x90,0x90,0x90,0x90,0x10,0x30,0x4,0x92,0x12,0xf0,
++0x28,0x28,0x44,0x92,0x10,0x29,0x46,0x82,0x7c,0x44,0x44,0x44,0x44,0x7c,0x45,0x2,0x40,0x40,0x40,0x7c,0x84,0x28,0x20,0x20,0x20,0x20,0x50,0x50,0x90,0x88,0xe,0x4,
++0x4,0x88,0x54,0x22,0x52,0x91,0x1e,0x12,0x32,0x52,0x92,0x13,0x12,0x10,0xa1,0x42,0x20,0x20,0x30,0x28,0x20,0xfe,0x20,0x20,0x20,0x20,0xd0,0x50,0x88,0x88,0x6,0x4,
++0x2,0x1,0xff,0x4,0x8,0x3f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x10,0x0,0x4,0xfe,0x0,0x10,0xf8,0x8,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x22,0x11,0x9,0xff,0x4,0x9,0x1f,0x20,0xdf,0x0,0x1f,0x0,0x1f,0x10,0x1f,0x10,0x8,0x10,0x24,0xfe,0x40,0x20,0xf0,0xe,0xf4,0x0,0xf0,0x0,0xf0,0x10,0xf0,0x10,
++0x1,0x41,0x32,0x14,0x80,0x60,0x20,0x9,0x12,0x27,0xea,0x22,0x22,0x22,0x23,0x22,0x10,0x10,0x8,0x44,0x40,0xa0,0xa0,0x10,0x8,0xfe,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x2,0x1,0x7f,0x40,0x9f,0x11,0x1f,0x11,0x1f,0x1,0x3f,0x21,0x21,0x2f,0x20,0x20,0x0,0x0,0xfe,0x2,0xf4,0x10,0xf0,0x10,0xf0,0x8,0xfc,0x8,0x28,0xe8,0x28,0x10,
++0x21,0x11,0x12,0xfc,0x8,0x10,0x10,0x35,0x5a,0x97,0x12,0x12,0x12,0x12,0x13,0x12,0x10,0x10,0x8,0x44,0x40,0xa0,0xa0,0x10,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x7d,0x4,0x8,0x29,0x11,0xff,0x15,0x11,0x11,0x11,0x11,0x11,0x10,0x50,0x23,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x58,0x84,0x2,
++0x0,0x7c,0x4,0x9,0x2b,0x11,0xff,0x15,0x10,0x11,0x12,0x11,0x16,0x10,0x53,0x20,0x40,0x78,0x90,0x24,0xfe,0x24,0x44,0xfc,0x84,0x48,0xb0,0x30,0x68,0xa6,0x24,0x60,
++0x4,0x7e,0x5,0x24,0x24,0x24,0x24,0x24,0x3e,0x2,0x2,0x1e,0xe2,0x42,0x14,0xb,0x0,0x0,0xfc,0x4,0x4,0x84,0x84,0x88,0x88,0x50,0x20,0x50,0x50,0x88,0x8e,0x4,
++0x10,0x1e,0x22,0x52,0x14,0x8,0x12,0xef,0xa,0x8,0x8,0xf,0x0,0x7f,0x0,0x0,0x8,0xfc,0x88,0xa8,0x98,0x82,0x7e,0xe0,0x20,0xa0,0x48,0xfc,0x8,0xe8,0x8,0x18,
++0x0,0x44,0x36,0x15,0x85,0x64,0x27,0x4,0xc,0x14,0x25,0xe5,0x26,0x24,0x28,0x30,0x4,0x44,0x4c,0x54,0x64,0x44,0xfc,0x44,0xc4,0xe4,0x5c,0x4c,0x44,0x44,0x44,0x4,
++0x0,0x7f,0x44,0x87,0x8,0x10,0x3f,0x51,0x11,0x1f,0x12,0x2,0x4,0x8,0x10,0x60,0x0,0xfe,0x2,0xe4,0x40,0x90,0xf8,0x10,0x10,0xf0,0x90,0x80,0xa2,0x92,0x7e,0x0,
++0x0,0x3f,0x0,0x0,0x0,0xff,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0xc0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x13,0x10,0x10,0xfd,0x11,0x11,0x11,0x11,0x11,0x11,0x1d,0xf1,0x40,0x7,0x0,0x4,0xfe,0x0,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,0x0,0xfe,0x0,
++0x1,0x1,0x3f,0x1,0xff,0x0,0x1f,0x10,0x10,0x1f,0x5,0x8,0x18,0xea,0xc,0x8,0x0,0x10,0xf8,0x0,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x8,0x90,0x60,0x30,0xe,0x4,
++0x0,0x3f,0x21,0x21,0x22,0x2f,0x28,0x2f,0x28,0x2f,0x20,0x24,0x44,0x48,0x92,0x1,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x80,0x90,0x88,0x84,0x84,0x0,
++0x10,0x17,0x12,0x11,0xff,0x10,0x10,0x1f,0x30,0xd1,0x11,0x12,0x12,0x14,0x59,0x22,0x1c,0xe8,0x48,0x50,0xfc,0x80,0x84,0xfe,0x80,0xf8,0x8,0x90,0x60,0x90,0xe,0x4,
++0x10,0x10,0x23,0xfc,0x27,0x40,0x93,0xfe,0x12,0x13,0x1d,0xf1,0x53,0x15,0x11,0x11,0x40,0x48,0xfc,0x40,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x44,0x28,0x10,0x4e,0x84,0x0,
++0x0,0x7f,0x40,0x4f,0x40,0x40,0x5f,0x44,0x44,0x44,0x44,0x48,0x50,0x40,0x7f,0x40,0x4,0xfe,0x44,0xe4,0x4,0x24,0xf4,0x84,0x84,0x84,0x94,0x94,0x74,0x4,0xfc,0x4,
++0x0,0x1f,0x10,0x10,0x1f,0x0,0x3f,0x20,0x21,0x21,0x21,0x21,0x22,0x4,0x18,0x60,0x10,0xf8,0x10,0x10,0xf0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0x60,0x18,0x4,
++0x0,0x7f,0x40,0x4f,0x48,0x4f,0x40,0x5f,0x50,0x51,0x51,0x52,0x44,0x48,0x7f,0x40,0x4,0xfe,0x4,0xe4,0x24,0xe4,0x4,0xf4,0x14,0x14,0x14,0x94,0x44,0x24,0xfc,0x4,
++0x2,0x44,0x2b,0x10,0x2f,0x48,0x8b,0xa,0x1a,0x2b,0x49,0x89,0xb,0xd,0x51,0x21,0x40,0x48,0xfc,0x40,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x44,0x28,0x10,0x4e,0x84,0x0,
++0x0,0x47,0x34,0x14,0x84,0x65,0x25,0xd,0x15,0x25,0xe4,0x24,0x29,0x2a,0x30,0x20,0x4,0xfe,0x20,0x20,0x44,0xfe,0x4,0xfc,0x4,0xfc,0x20,0xa8,0xa6,0x22,0xa0,0x40,
++0x10,0x10,0x21,0x23,0x48,0xff,0x10,0x21,0x42,0xfc,0x1,0x2,0x1c,0xe1,0x46,0x0,0x80,0xf8,0x8,0xf0,0x14,0xfe,0x80,0x88,0x50,0xe0,0x60,0x50,0xc8,0x4e,0x44,0xc0,
++0x0,0x43,0x30,0x10,0x0,0x7,0xf1,0x11,0x11,0x11,0x12,0x12,0x14,0x28,0x47,0x0,0x10,0xf8,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x24,0x24,0x1c,0x0,0x6,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x10,0x1e,0x12,0x22,0x22,0x64,0x94,0x8,0x8,0x10,0x20,0x40,0x40,0x44,0xfe,0x40,0x8,0xfc,0x88,0x88,0x88,0x88,0xa8,0x90,0x82,0x82,0x7e,0x0,
++0x0,0x3f,0x21,0x22,0x2f,0x28,0x2f,0x28,0x2f,0x20,0x44,0x89,0x9,0x28,0x28,0x47,0x8,0xfc,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x80,0x90,0x88,0x0,0x94,0x12,0xf2,
++0x10,0x1e,0x12,0x22,0x22,0x54,0x8c,0x8,0x10,0x20,0x42,0x11,0x51,0x50,0x8f,0x0,0x8,0xfc,0x88,0x88,0x88,0xa8,0x90,0x84,0x84,0x7c,0x0,0x0,0x14,0x12,0xf2,0x0,
++0x0,0x78,0x4f,0x54,0x58,0x63,0x50,0x48,0x4f,0x48,0x68,0x50,0x41,0x41,0x42,0x4c,0x80,0x40,0xfe,0x2,0x14,0xf8,0x0,0x8,0xfc,0xa0,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x0,0x0,0x7f,0x40,0x40,0x40,0x40,0x7f,0x40,0x40,0x40,0x40,0x7f,0x40,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,
++0x10,0x10,0x20,0x21,0x45,0xfa,0x14,0x20,0x40,0xfc,0x0,0x0,0x1c,0xe0,0x40,0x0,0x80,0x80,0x80,0x4,0xfe,0x4,0x4,0x84,0x64,0x24,0x4,0x4,0x4,0x44,0x28,0x10,
++0x10,0x10,0x10,0x7d,0x11,0x11,0xff,0x11,0x51,0x5d,0x51,0x50,0x70,0x49,0x44,0x83,0x20,0x28,0x28,0xfc,0x20,0x20,0x28,0x28,0x70,0xa0,0x24,0x54,0x8c,0x0,0x6,0xfc,
++0x0,0x7c,0x47,0x44,0x44,0x7c,0x10,0x13,0x5c,0x50,0x50,0x51,0x5d,0xf2,0x44,0x8,0x8,0x1c,0xe0,0x40,0x40,0x40,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x10,0x8,0xe,0x4,
++0x10,0x11,0x11,0x1d,0x21,0x21,0x7d,0x91,0x11,0xfd,0x11,0x11,0x15,0x19,0x12,0x4,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x28,0x10,
++0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x10,0xff,0x1,0x11,0x11,0x11,0x11,0x1f,0x10,0xf0,0x0,0x0,0x10,0xf8,0x80,0x80,0x84,0xfe,0x0,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x2,0x1f,0x15,0x11,0x1f,0x11,0x15,0x1f,0x0,0xff,0x4,0xf,0x0,0x0,0x0,0x0,0x10,0xf8,0x50,0x10,0xf0,0x10,0x50,0xf0,0x4,0xfe,0x0,0xf0,0x10,0x10,0xa0,0x40,
++0x0,0xf,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0xf,0x8,0x8,0x10,0x10,0x20,0x40,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0x50,0x20,
++0x12,0x11,0x10,0x13,0x5a,0x56,0x52,0x92,0x13,0x11,0x11,0x11,0x12,0x12,0x14,0x18,0x8,0x18,0xa0,0xf8,0x8,0x8,0x8,0x8,0xf8,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x20,0x17,0x50,0x44,0x42,0x4f,0x48,0x48,0x4f,0x4a,0x42,0x42,0x44,0x48,0x50,0x40,0x4,0xfe,0x4,0x44,0x84,0xe4,0x24,0x24,0xe4,0xa4,0x84,0x94,0x94,0x74,0x4,0xc,
++0x8,0x8,0x7e,0x8,0x8,0x7e,0x9,0x8,0xfe,0x18,0x1c,0x2a,0x28,0x49,0x8,0x8,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x20,0x20,0x40,0x40,0x88,0x84,0xfc,0x4,0x0,
++0x0,0x0,0x1f,0x0,0x0,0x0,0xff,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x3f,0x0,0x0,0x20,0xf0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x20,0x10,0xf8,0x8,
++0x2,0x3f,0x22,0x22,0x3e,0x1,0x7f,0x41,0x49,0x49,0x49,0x49,0x14,0x12,0x21,0x41,0x0,0x7c,0x44,0x48,0x48,0x50,0xc8,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,0x40,
++0x8,0x8,0xf,0x10,0x10,0x26,0x43,0x81,0x0,0x0,0x3,0x1c,0x8,0x0,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x24,0xc4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x0,0x7c,0x44,0x48,0x48,0x50,0x49,0x49,0x45,0x45,0x45,0x69,0x50,0x40,0x40,0x43,0x8,0xfc,0x88,0x88,0xf8,0x4,0xfe,0x4,0x24,0x24,0x24,0x24,0x50,0x48,0x84,0x4,
++0x2,0x2,0x4,0x8,0x10,0x7f,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x10,0x20,0xc0,0x0,0x0,0x40,0x20,0x10,0xf8,0x88,0x80,0x80,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x43,0x30,0x10,0x0,0x7,0xf0,0x10,0x11,0x11,0x12,0x17,0x10,0x28,0x47,0x0,0x10,0xf8,0x0,0x0,0x8,0xfc,0x80,0x80,0x0,0x20,0x10,0xf8,0x8,0x6,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x11,0x21,0x45,0x79,0x11,0x20,0x7f,0x2,0x1e,0xe2,0x47,0x0,0x40,0x44,0xfe,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x94,0x94,0x94,0xfe,0x0,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x53,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x0,0x88,0x7c,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x20,0x20,0x44,0xfe,0x2,0x0,
++0x1f,0x10,0x1f,0x10,0x1f,0x0,0x7f,0x42,0x9f,0x4,0x9,0x1f,0x1,0x7f,0x1,0x1,0xf0,0x10,0xf0,0x10,0xf0,0x0,0xfe,0x2,0xf4,0x0,0x0,0xf0,0x0,0xfc,0x0,0x0,
++0x10,0x8,0x7f,0x0,0x22,0x14,0xff,0x2,0x3f,0x22,0x22,0x3e,0x22,0x22,0x3e,0x22,0x20,0x20,0x24,0x7e,0x84,0x4,0x44,0x24,0x24,0xc,0x34,0xc4,0x4,0x4,0x28,0x10,
++0x0,0x3f,0x8,0x8,0x8,0x10,0x1f,0x20,0x40,0x1,0xff,0x1,0x1,0x1,0x5,0x2,0x20,0xf0,0x20,0x24,0x7e,0x4,0xc4,0x54,0x88,0x0,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x20,0x20,0x20,0x2f,0x28,0x28,0x28,0x28,0x28,0x28,0x20,0x20,0x3f,0x0,0x8,0xfc,0x80,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0xa8,0x90,0x80,0x84,0xfe,0x0,
++0x8,0xfd,0x11,0x11,0x21,0x25,0x7f,0xa5,0x25,0x25,0x25,0x25,0x3d,0x25,0x1,0x0,0x4,0xfe,0x10,0x10,0x7c,0x54,0x54,0x54,0x54,0x54,0x54,0x5c,0x10,0x14,0xfe,0x0,
++0x4,0x4,0x3f,0x4,0x4,0x8,0x8,0x11,0x21,0x1,0xff,0x1,0x9,0x11,0x25,0x2,0x0,0x20,0xf0,0x20,0x20,0x24,0x24,0x1c,0x0,0x4,0xfe,0x0,0x20,0x18,0x8,0x0,
++0x8,0xa,0x7f,0x8,0x8,0xff,0x8,0xa,0x7f,0x8,0x1c,0x1a,0x2a,0x48,0x89,0xa,0x40,0x50,0x48,0x48,0x40,0xfe,0x40,0x40,0x48,0x48,0x30,0x20,0x60,0x92,0xa,0x6,
++0x8,0x8,0xa,0x7f,0x8,0x8,0xff,0x2,0x3f,0x22,0x22,0x22,0x22,0x3e,0x21,0x2,0x40,0x60,0x58,0x48,0x40,0x44,0xfe,0x40,0x48,0x48,0x30,0x20,0x60,0x92,0xa,0x6,
++0x2,0x1,0x7f,0x40,0x81,0x1,0x11,0x11,0x11,0x21,0x2,0x2,0x4,0x8,0x10,0x60,0x0,0x0,0xfe,0x2,0x4,0x0,0x10,0x18,0x20,0x40,0x80,0x80,0x40,0x30,0xe,0x4,
++0x2,0x1,0x7f,0x42,0x81,0x3f,0x8,0x4,0x2,0xff,0x1,0x1,0x3f,0x1,0x1,0x1,0x0,0x0,0xfe,0x2,0x14,0xf8,0x20,0x40,0x84,0xfe,0x0,0x10,0xf8,0x0,0x0,0x0,
++0x8,0xa,0x7f,0x8,0x8,0xff,0x10,0xff,0x20,0x28,0x7e,0x8,0xf,0xf8,0x9,0xa,0x40,0x50,0x48,0x48,0x40,0xfe,0x40,0x40,0x48,0x48,0x30,0x20,0x60,0x92,0xa,0x6,
++0x0,0x7f,0x1,0x1,0x1f,0x11,0x11,0x1f,0x11,0x11,0xff,0x10,0x10,0x10,0x10,0x10,0x8,0xfc,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x14,0xfe,0x10,0x10,0x10,0x50,0x20,
++0x2,0x2,0x2,0xff,0x4,0x4,0x8,0x8,0x13,0x30,0x50,0x90,0x10,0x10,0x17,0x10,0x0,0x0,0x4,0xfe,0x0,0x40,0x40,0x50,0xf8,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x8,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0x1,0x1,0x20,0x44,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x22,0x2a,0x2f,0x32,0xff,0x25,0x25,0x29,0x33,0xe2,0x22,0x22,0x22,0x20,0xa3,0x4c,0x8,0x28,0xbe,0x48,0xfe,0x14,0x14,0xa6,0xf8,0x8,0x48,0x48,0x48,0xa0,0x18,0x4,
++0x10,0x7e,0x10,0x28,0x7e,0x8,0xfe,0x9,0xa,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0xc,0xf0,0x80,0x84,0xfe,0x90,0x90,0x10,0x10,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,
++0x8,0x28,0x3e,0x48,0xff,0x14,0x16,0x24,0x40,0x1f,0x10,0x11,0x11,0x12,0xc,0x30,0x10,0x50,0x7c,0x90,0xfe,0x28,0x28,0x4a,0x86,0xf0,0x10,0x10,0x10,0x90,0x60,0x18,
++0x4,0x7e,0x45,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x29,0x45,0x82,0x20,0x14,0xfe,0x0,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x0,
++0x4,0x3e,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x45,0x95,0xa,0x20,0x14,0xfe,0x0,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x0,
++0x4,0xff,0x4,0x7f,0x10,0x1e,0x22,0x54,0x8,0x70,0x4,0xff,0x4,0x4,0x8,0x10,0x44,0xfe,0x40,0xfc,0x80,0x98,0xe0,0x84,0x84,0x7c,0x40,0xfe,0x40,0x40,0x40,0x40,
++0x0,0x4f,0x30,0x17,0x4,0x7,0xf4,0x17,0x10,0x13,0x12,0x13,0x12,0x13,0x28,0x47,0xa4,0xfe,0xa0,0xfc,0xa4,0xfc,0xa4,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x6,0xfc,
++0x20,0x20,0xaf,0x70,0x27,0x24,0xff,0x24,0x77,0x68,0xa3,0x22,0x23,0x22,0x23,0x22,0xa0,0xa4,0xfe,0xa0,0xfc,0xa4,0xfc,0xa4,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x4,0x24,0x14,0x4,0xff,0x0,0x4,0x22,0x2f,0x21,0x21,0x2f,0x21,0x21,0x3f,0x20,0x40,0x48,0x50,0x44,0xfe,0x0,0x40,0x88,0xe8,0x8,0x48,0xe8,0x8,0x8,0xf8,0x8,
++0x4,0xff,0x4,0x23,0x1a,0x8b,0x40,0x4f,0x14,0x27,0xe0,0x2f,0x20,0x21,0x22,0x24,0x44,0xfe,0x40,0xf8,0x8,0xf8,0x0,0xbc,0xa4,0xbc,0x40,0xfe,0xe0,0x50,0x4e,0x44,
++0x1,0x1,0xff,0x1,0x3f,0x21,0x23,0x25,0x9,0x30,0xc7,0x0,0x0,0xe,0x1,0x0,0x0,0x4,0xfe,0x0,0xf8,0x8,0x88,0x50,0x30,0xe,0x4,0xc0,0x40,0x0,0xc0,0x40,
++0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x11,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x3,0x42,0x32,0x13,0x80,0x67,0x24,0xc,0x17,0x20,0xef,0x20,0x21,0x22,0x24,0x28,0xf8,0x8,0x8,0xf8,0x0,0xbc,0xa4,0xa4,0xbc,0x40,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x3f,0x0,0x11,0x9,0x4,0x3,0xd,0x11,0x7f,0x91,0x11,0x1f,0x1,0x1,0x3f,0x10,0xf8,0x8,0x10,0x20,0x40,0x80,0x60,0x10,0xfe,0x14,0x10,0xf0,0x20,0xf0,0x8,0x8,
++0x4,0x7e,0x44,0x44,0x44,0x7d,0x11,0x51,0x5d,0x50,0x53,0x50,0x5c,0xf1,0x42,0x0,0xf8,0x88,0x88,0xf8,0x0,0xdc,0x54,0x54,0xdc,0x20,0xfe,0x70,0xa8,0x2e,0x24,0x20,
++0x3,0x12,0x7a,0x53,0x50,0x57,0x54,0x54,0x57,0x50,0x5f,0x70,0x51,0x2,0x4,0x0,0xf8,0x8,0x8,0xf8,0x0,0xbc,0xa4,0xa4,0xbc,0x40,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x0,0x42,0x32,0x13,0x4,0x0,0xf7,0x10,0x13,0x12,0x12,0x12,0x13,0x28,0x47,0x0,0x40,0x40,0x50,0xf8,0x40,0x44,0xfe,0x8,0xfc,0x8,0x8,0x8,0xf8,0x6,0xfc,0x0,
++0x2,0x4,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x1,0x1,0xff,0x1,0x1,0x1,0x0,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x4,0xfe,0x0,0x0,0x4,0x4,0xfc,
++0x10,0x10,0x10,0x12,0x54,0x58,0x53,0x90,0x10,0x10,0x10,0x28,0x24,0x44,0x87,0x0,0x40,0x40,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x10,0x12,0x54,0x59,0x51,0x91,0x11,0x10,0x13,0x28,0x24,0x45,0x82,0x0,0xf8,0x88,0x88,0xf8,0x0,0xdc,0x54,0x54,0xdc,0x20,0xfe,0x70,0xa8,0x2e,0x24,0x20,
++0x1,0x1,0x3f,0x1,0x1f,0x1,0xff,0x0,0x1f,0x10,0x11,0x11,0x12,0x2,0xc,0x30,0x0,0x10,0xf8,0x0,0xf0,0x4,0xfe,0x10,0xf8,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x10,0x13,0x11,0x10,0xfc,0x10,0x15,0x1a,0x35,0xd0,0x10,0x17,0x10,0x10,0x50,0x20,0x0,0xf8,0x10,0xa0,0x40,0xa0,0x10,0x4e,0xf4,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,
++0x1,0x7f,0x41,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x14,0x12,0x21,0xc1,0x4,0x84,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x4,0x14,0x8,
++0x40,0x33,0x11,0x0,0x80,0x60,0x21,0xa,0x15,0x20,0xe0,0x27,0x20,0x20,0x20,0x20,0x0,0xf8,0x10,0xa0,0x40,0xa0,0x10,0x4e,0xf4,0x40,0x40,0xfc,0x40,0x40,0x40,0x40,
++0x4,0x7e,0x44,0x54,0x57,0x54,0x54,0x54,0x57,0x54,0x54,0x54,0x29,0x25,0x42,0x84,0x20,0x28,0x24,0x20,0xfe,0xa0,0xa0,0x94,0xf4,0x98,0x98,0x90,0x28,0x2a,0x4a,0x86,
++0x8,0x8,0xf,0x14,0x24,0x47,0x4,0x4,0x7,0x4,0x4,0x52,0x51,0x90,0xf,0x0,0x0,0x8,0xfc,0x0,0x20,0xf0,0x0,0x20,0xf0,0x0,0x0,0x4,0x92,0x92,0xf0,0x0,
++0x22,0x21,0x20,0x20,0x27,0xfc,0x25,0x24,0x27,0x20,0x3b,0xe2,0x43,0x2,0x3,0x2,0x8,0x10,0xa0,0x4,0xfe,0x44,0x54,0x44,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x12,0x11,0x10,0x10,0x5f,0x54,0x55,0x94,0x17,0x10,0x13,0x12,0x13,0x12,0x13,0x12,0x8,0x10,0xa0,0x4,0xfe,0x44,0x54,0x44,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x10,0x8,0x4,0x0,0x3f,0x21,0x29,0x21,0x3f,0x0,0xf,0x8,0xf,0x8,0xf,0x8,0x10,0x20,0x40,0x8,0xfc,0x8,0x28,0x8,0xf8,0x20,0xf0,0x20,0xe0,0x20,0xe0,0x20,
++0x1,0x7c,0x44,0x54,0x55,0x55,0x55,0x55,0x55,0x54,0x54,0x54,0x20,0x28,0x44,0x80,0x4,0x88,0x50,0x4,0xfe,0x24,0xac,0x24,0xfc,0x8,0xfc,0x88,0xf8,0x88,0xf8,0x88,
++0x8,0x8,0x8,0xa,0xff,0x8,0xa,0xc,0x38,0xc8,0x8,0x8,0x8,0x8,0x28,0x10,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x8,0x7c,0x4f,0x48,0x49,0x4a,0x4c,0x4b,0x4a,0x4b,0x7a,0x4b,0x0,0xf,0x0,0x40,0x40,0x48,0xfc,0xe0,0x50,0x4e,0x44,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x0,
++0x0,0x40,0x30,0x17,0x80,0x61,0x22,0xc,0x13,0x22,0xe3,0x22,0x23,0x20,0x2f,0x20,0x40,0x40,0x48,0xfc,0xe0,0x50,0x4e,0x44,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x0,
++0x8,0x8,0x8,0x8,0xff,0x8,0x18,0x1c,0x2a,0x28,0x48,0x8,0x8,0x8,0x8,0x8,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x10,0x12,0xff,0x20,0x28,0x4a,0x7f,0x8,0x8,0xf,0xf8,0x48,0x8,0x8,0x8,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x20,0x27,0x3c,0x45,0x85,0x7d,0x25,0x25,0xfd,0x25,0x25,0x21,0x2a,0x32,0x24,0x8,0x44,0xe4,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x14,0x84,0x44,0x54,0x8,
++0x20,0x1b,0x48,0x40,0x4f,0x49,0x49,0x4f,0x49,0x49,0x4f,0x49,0x41,0x41,0x41,0x40,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0xe4,0x24,0x24,0xe4,0x24,0x4,0x4,0x14,0x8,
++0x8,0x7c,0x4b,0x48,0x48,0x78,0x4b,0x48,0x48,0x78,0x48,0x49,0x4e,0x7d,0x48,0x0,0xc,0x30,0xc0,0x80,0x40,0x40,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x6,0xfc,0x0,
++0x20,0x27,0x24,0x24,0xfc,0x24,0x74,0x6f,0xa4,0x24,0x24,0x24,0x24,0x29,0x30,0x20,0x4,0xbe,0xa4,0xa4,0xa4,0xa4,0xa4,0xfe,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0x54,0x88,
++0x10,0x10,0x13,0x12,0xfd,0x10,0x38,0x35,0x52,0x54,0x90,0x10,0x10,0x10,0x10,0x10,0x40,0x20,0xfe,0x8a,0x4,0x40,0xfe,0x80,0x88,0xfc,0x80,0x84,0xfe,0x80,0x80,0x80,
++0x1,0x9,0x7d,0x49,0x4a,0x4a,0x4c,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x80,0x80,0x88,0xfc,0x80,0x80,0x84,0xfe,0x80,0x80,0x80,0x80,
++0x8,0x8,0xf,0x12,0x12,0x22,0x43,0x82,0x2,0x2,0x3,0x2,0x2,0x2,0x2,0x2,0x0,0x4,0xfe,0x0,0x0,0x10,0xf8,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,
++0x11,0x11,0x11,0x15,0x5a,0x52,0x54,0x90,0x10,0x10,0x10,0x28,0x24,0x44,0x80,0x0,0x0,0x0,0x4,0xfe,0x80,0x80,0x88,0xfc,0x80,0x80,0x84,0xfe,0x80,0x80,0x80,0x80,
++0x1,0x41,0x31,0x11,0x2,0x2,0xf4,0x10,0x10,0x10,0x10,0x10,0x14,0x18,0x10,0x0,0x0,0x0,0x4,0xfe,0x80,0x80,0x88,0xfc,0x80,0x80,0x84,0xfe,0x80,0x80,0x80,0x80,
++0x10,0x10,0x17,0x11,0xf8,0x17,0x14,0x1c,0x37,0xd4,0x15,0x15,0x15,0x15,0x55,0x24,0x80,0x44,0xfe,0x10,0xa4,0xfe,0x44,0x44,0xfc,0x44,0xf4,0x14,0x14,0xf4,0x14,0x8,
++0x2,0x1,0xff,0x8,0x4,0x3,0x1c,0xe0,0x1f,0x2,0x4,0x3f,0x24,0x24,0x24,0x20,0x0,0x4,0xfe,0x20,0x40,0x80,0x70,0xe,0xf0,0x0,0x8,0xfc,0x48,0x48,0x48,0x18,
++0x2,0x1,0x7f,0x40,0x80,0x3,0x3e,0x2,0x3,0x7e,0x2,0x2,0x2,0x2,0x1,0x0,0x0,0x0,0xfe,0x2,0x34,0xc0,0x0,0x8,0xfc,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x2,0x1,0x7f,0x48,0x94,0x4,0xb,0x12,0x22,0x43,0x2,0x2,0x3,0x2,0x2,0x2,0x0,0x0,0xfe,0x22,0x14,0x0,0xfc,0x0,0x20,0xf0,0x0,0x10,0xf8,0x0,0x0,0x0,
++0x8,0xf,0x8,0x13,0x10,0x3f,0x50,0x93,0x12,0x12,0x12,0x12,0x12,0x10,0x11,0x16,0x40,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0x48,0x48,0x48,0x48,0xb0,0x8,0x4,
++0x2,0x1,0x7f,0x44,0xbf,0x4,0x1f,0x4,0xff,0x4,0x9,0x3f,0xc5,0x9,0x15,0x2,0x0,0x0,0xfe,0x42,0xfc,0x40,0xf0,0x44,0xfe,0x40,0x20,0xf8,0x46,0x30,0x10,0x0,
++0x8,0x7c,0x49,0x4b,0x4a,0x7b,0x4b,0x4a,0x4a,0x7a,0x4a,0x4a,0x4a,0x7a,0x44,0x8,0x80,0xf8,0x10,0xfe,0x88,0x24,0xfe,0x0,0xfc,0x0,0xfc,0x0,0xfc,0x84,0xfc,0x84,
++0x4,0xe,0xf0,0x10,0x14,0x1e,0x70,0x14,0x1f,0xf1,0x11,0x11,0x11,0x11,0xf,0x0,0x40,0x40,0x40,0x48,0x7c,0x40,0x40,0x48,0xfc,0x8,0x8,0x8,0xfa,0xa,0xfe,0x0,
++0x10,0x1f,0x20,0x7f,0xa5,0x28,0x3f,0x20,0x27,0x20,0x27,0x20,0x47,0x44,0x87,0x4,0x0,0xf0,0x44,0xfe,0x10,0x88,0xfe,0x0,0xf8,0x0,0xf8,0x8,0xfc,0x8,0xf8,0x8,
++0x8,0x8,0x49,0x2a,0x8,0xff,0x8,0x18,0x1d,0x2b,0x29,0x49,0x89,0x9,0x9,0x8,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x0,0x40,0x30,0x10,0x80,0x60,0x20,0xf,0x14,0x24,0xe4,0x24,0x24,0x24,0x27,0x24,0x80,0x80,0x84,0xfe,0x80,0x80,0x88,0xfc,0x8,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x2,0x2,0x3,0x7e,0x3,0x7e,0x1,0x1,0xe,0x70,0x3f,0x24,0x24,0x24,0xff,0x0,0x40,0x20,0xf8,0x0,0xfc,0x20,0x40,0x82,0x62,0x1e,0xf8,0x48,0x48,0x48,0xfe,0x0,
++0x10,0x10,0x14,0xfe,0x20,0x28,0x48,0x7e,0x8,0x8,0xe,0xf8,0x49,0x9,0xa,0x8,0x8,0x1c,0xe0,0x80,0x80,0x84,0xfe,0x90,0x90,0x90,0x90,0x90,0x10,0x10,0x10,0x10,
++0x20,0x23,0x2a,0xff,0x42,0x52,0x93,0xfe,0x12,0x13,0x1e,0xf2,0x54,0x14,0x18,0x10,0x4,0xfe,0x4,0xfc,0x50,0x50,0xfc,0x50,0x54,0xfe,0xa4,0xa8,0x90,0x88,0xce,0x84,
++0x1,0x21,0x3f,0x10,0x14,0xfe,0x20,0x48,0x7e,0x8,0xe,0xf8,0x49,0x9,0xa,0x8,0x0,0x8,0xf8,0x0,0x1c,0xe0,0x80,0x84,0xfe,0x90,0x90,0x90,0x10,0x10,0x10,0x10,
++0x0,0x3f,0x20,0x3f,0x22,0x22,0x2f,0x22,0x22,0x3f,0x24,0x24,0x24,0x45,0x86,0x4,0x8,0xfc,0x8,0xf8,0x20,0x20,0xf8,0x20,0x24,0xfe,0x88,0x50,0x30,0xe,0x4,0x0,
++0x8,0xff,0x8,0xfe,0x28,0x29,0x7e,0x54,0x54,0x54,0x6c,0x44,0x7c,0x45,0x7d,0x46,0x20,0xfe,0x20,0x90,0x90,0xfe,0x90,0xfc,0x90,0xfc,0x90,0xfe,0x0,0x54,0x52,0x2,
++0x10,0x10,0x10,0x10,0xfc,0x13,0x30,0x38,0x57,0x50,0x10,0x10,0x10,0x11,0x16,0x10,0x80,0x90,0x88,0x80,0xf8,0x80,0x88,0xfc,0x80,0x48,0x50,0x20,0x60,0x92,0xa,0x6,
++0x2,0x2,0x2,0x3,0x2,0x2,0x2,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x3f,0x20,0x0,0x0,0x8,0xfc,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x10,0x12,0x1f,0x10,0x13,0x10,0x7e,0x42,0x42,0x42,0x42,0x42,0x7e,0x41,0x2,0x40,0x50,0x48,0x48,0x7e,0xc0,0x40,0x40,0x48,0x28,0x30,0x20,0x50,0x92,0xa,0x6,
++0x0,0x20,0x10,0x10,0xfe,0x0,0x44,0x44,0x25,0x25,0x29,0x9,0x1f,0xe1,0x41,0x1,0x40,0x40,0x44,0x7e,0x40,0x40,0x40,0x44,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x41,0x37,0x11,0x81,0x61,0x21,0x9,0x11,0x2f,0xe4,0x25,0x26,0x24,0x27,0x20,0x10,0x10,0xfc,0x10,0xf0,0x10,0xf0,0x10,0x14,0xfe,0xa0,0x18,0x8,0x0,0xfc,0x0,
++0x10,0x10,0x23,0x22,0x44,0xf8,0x13,0x20,0x40,0xfc,0x40,0x1,0x1d,0xe2,0x44,0x0,0x40,0x20,0xfe,0x2,0x4,0x0,0xfe,0x20,0xa8,0xbc,0xa0,0x20,0xa0,0x66,0x1c,0x0,
++0x10,0x17,0x11,0x10,0xff,0x10,0x33,0x3a,0x57,0x52,0x93,0x10,0x1f,0x10,0x10,0x10,0x48,0xfc,0x10,0xa4,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0x40,0x40,
++0x1,0x3f,0x8,0x4,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x1,0x1,0x1,0x0,0xf8,0x20,0x44,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,0x0,0x0,
++0x4,0x7f,0x11,0xa,0xff,0x0,0x3f,0x20,0x3f,0x20,0x3f,0x4,0xff,0x4,0x4,0x4,0x4,0xc4,0x8,0x10,0xe0,0x84,0xc4,0x88,0x90,0xa2,0x82,0x4,0xe8,0x10,0x20,0xc0,
++0x0,0x47,0x31,0x10,0x8f,0x60,0x23,0xa,0x13,0x22,0xe3,0x20,0x2f,0x20,0x20,0x20,0x40,0xfc,0x10,0xa4,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0x40,0x40,
++0x9,0xfd,0x9,0x9,0x9,0x79,0x41,0x47,0x41,0x79,0x9,0x9,0x9,0x9,0x51,0x21,0x0,0x8,0x8,0x10,0x20,0x40,0x4,0xfe,0x40,0x40,0x20,0x20,0x10,0x4e,0x84,0x0,
++0x11,0x9,0x7f,0x40,0x9f,0x10,0x1f,0x0,0x7f,0x1,0x3f,0x1,0xff,0x1,0x5,0x2,0x10,0x20,0xfe,0x2,0xf4,0x10,0xf0,0x38,0xc0,0x0,0xf8,0x0,0xfe,0x0,0x0,0x0,
++0x40,0x2f,0x21,0x1,0x81,0x4f,0x48,0x8,0x18,0x2f,0xe1,0x21,0x21,0x21,0x2a,0x24,0x40,0x40,0x44,0x44,0x48,0x50,0x44,0xfe,0x50,0x50,0x50,0x48,0x48,0x44,0x62,0x40,
++0x10,0x10,0x10,0x10,0xff,0x10,0x31,0x39,0x54,0x50,0x90,0x10,0x10,0x10,0x11,0x16,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0xa0,0xa0,0xa0,0x40,0x60,0x90,0xe,0x4,
++0x0,0x0,0x0,0x0,0xff,0x0,0x8,0x8,0x4,0x4,0x2,0x1,0x2,0x4,0x18,0xe0,0x80,0x80,0x80,0x84,0xfe,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x80,0x60,0x1e,0x4,
++0x10,0x10,0x14,0x7e,0x54,0x54,0x54,0x57,0x54,0x54,0x54,0x5c,0x10,0x10,0x10,0x10,0x80,0x84,0x84,0x88,0x90,0xa0,0x84,0xfe,0xa0,0xa0,0x90,0x90,0x88,0x8e,0xc4,0x80,
++0x4,0x7e,0x44,0x54,0x54,0x54,0x54,0x57,0x54,0x54,0x54,0x54,0x10,0x28,0x44,0x80,0x80,0x84,0x84,0x88,0x90,0xa0,0x84,0xfe,0xa0,0xa0,0x90,0x90,0x88,0x8e,0xc4,0x80,
++0x8,0x8,0x8,0x10,0x17,0x30,0x51,0x91,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x16,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0xa0,0xa0,0xa0,0x40,0x60,0x90,0xe,0x4,
++0x4,0x3e,0x24,0x24,0x24,0x3c,0x24,0x27,0x24,0x3c,0x24,0x24,0x24,0x44,0x94,0x8,0x80,0x84,0x84,0x88,0x90,0xa0,0x84,0xfe,0xa0,0xa0,0x90,0x90,0x88,0x8e,0xc4,0x80,
++0x0,0x1f,0x10,0x97,0x51,0x5f,0x10,0x17,0x34,0x57,0x94,0x17,0x20,0x2f,0x40,0x0,0x80,0xfe,0x40,0xfc,0x10,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x40,0xfe,0x40,0x40,
++0x0,0x7b,0x49,0x50,0x57,0x60,0x53,0x4a,0x4b,0x4a,0x6b,0x50,0x4f,0x40,0x40,0x40,0x40,0xf8,0x10,0xa4,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0x40,0x40,
++0x10,0x13,0x10,0x10,0xfc,0x10,0x15,0x19,0x32,0xd5,0x11,0x11,0x11,0x11,0x51,0x21,0x4,0xfe,0x84,0x84,0x84,0x84,0x14,0x8,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0xb,0x7c,0x48,0x48,0x48,0x49,0x79,0x4a,0x4d,0x49,0x49,0x79,0x49,0x1,0x1,0x4,0xfe,0x84,0x84,0x84,0x84,0x14,0x8,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x10,0xfc,0x13,0x10,0x1c,0x30,0xd0,0x10,0x10,0x11,0x12,0x54,0x20,0x80,0xa0,0x90,0x84,0x9e,0xe0,0x80,0x88,0x50,0x60,0x40,0xc0,0x20,0x12,0xa,0x6,
++0x40,0x33,0x10,0x0,0x80,0x60,0x21,0x9,0x12,0x25,0xe1,0x21,0x21,0x21,0x21,0x21,0x4,0xfe,0x84,0x84,0x84,0x84,0x14,0x8,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x8,0x8,0x7e,0x8,0xa,0xff,0x8,0x28,0x2e,0x28,0x39,0x48,0x44,0x83,0x0,0x0,0x8,0x88,0x88,0x50,0x50,0x20,0x20,0x50,0x48,0x8c,0x4,0x0,0x6,0xfc,0x0,
++0x0,0x7d,0x44,0x44,0x44,0x44,0x7d,0x44,0x44,0x44,0x44,0x7c,0x0,0x24,0x62,0x82,0x4,0xfe,0x44,0x44,0x84,0x94,0x8,0xfc,0x84,0x84,0x84,0xfc,0x0,0x88,0x46,0x42,
++0x7f,0x44,0x7f,0x1,0x1,0x1,0x3f,0x20,0x3f,0x20,0x3f,0x1,0xff,0x1,0x1,0x1,0xfc,0x44,0xfc,0x0,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x0,0x0,0x0,
++0x4,0x4,0x4,0x24,0x14,0x14,0x4,0x4,0x1c,0x64,0x4,0x8,0x8,0x10,0x20,0x40,0x80,0x80,0x80,0x90,0xa0,0xc0,0x80,0xc0,0xb0,0x90,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x8,0x3e,0x22,0x3e,0x21,0x5f,0x81,0xff,0x1,0x1f,0x1,0x3f,0x1,0xff,0x1,0x1,0x44,0x7e,0xa8,0x10,0x6e,0xf0,0x14,0xfe,0x10,0xf0,0x0,0xf8,0x0,0xfe,0x0,0x0,
++0x0,0x3f,0x4,0x4,0x4,0x8,0x8,0x10,0x3f,0x50,0x10,0x10,0x10,0x10,0x1f,0x10,0x8,0xfc,0x8,0x8,0x8,0x28,0x10,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x27,0x24,0x4,0x7,0xe4,0x24,0x24,0x24,0x25,0x29,0x32,0x50,0x88,0x7,0x40,0x20,0xfc,0x90,0x94,0xfe,0x90,0x90,0xf0,0x0,0x54,0x52,0x52,0x0,0x6,0xfc,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x15,0x19,0x31,0xd1,0x11,0x11,0x12,0x12,0x54,0x20,0x8,0x3c,0xc0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x8,0x8,0xfe,0x8,0xe,0x78,0x9,0x9,0x2a,0x10,0x1f,0x10,0x10,0x10,0x1f,0x10,0xc,0xf0,0x80,0x84,0xfe,0x90,0x10,0x10,0x10,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x8,0x8,0xff,0x8,0xe,0x78,0x8,0x29,0x11,0x1f,0x11,0x11,0x1f,0x1,0x7f,0x0,0x40,0x48,0xfc,0x48,0xc8,0x48,0x6a,0x8a,0x6,0xf0,0x10,0x10,0xf0,0x4,0xfc,0x4,
++0x22,0x21,0x27,0xfa,0x24,0x57,0x50,0xff,0x14,0x17,0x1c,0xf7,0x54,0x14,0x14,0x15,0x20,0x20,0xe4,0x3e,0xc4,0xa4,0xa4,0xa4,0xa4,0xa8,0x90,0x90,0xa8,0xa8,0xc6,0x84,
++0x2,0x2,0x3f,0x2,0x2,0xff,0x2,0x4,0xf,0x18,0x28,0x4f,0x88,0x8,0xf,0x8,0x0,0x10,0xe0,0x40,0x84,0xfe,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x10,0x10,0x13,0x1c,0x20,0x23,0x7c,0x91,0x13,0xfd,0x11,0x11,0x15,0x19,0x11,0x1,0x40,0x44,0xf8,0x50,0x64,0xfe,0x80,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0xff,0x9,0x0,0x3f,0x22,0x22,0x3f,0x22,0x22,0x23,0x40,0x49,0x89,0x10,0x20,0x24,0xfe,0x20,0x88,0xfc,0x20,0x28,0xfc,0x20,0x20,0xe0,0x0,0x24,0x22,0x2,
++0x0,0x40,0x30,0x17,0x0,0x2,0xf1,0x10,0x10,0x10,0x10,0x11,0x12,0x28,0x47,0x0,0x80,0x40,0x48,0xfc,0x10,0x10,0x20,0xa0,0x40,0x40,0xa0,0x10,0x10,0x6,0xfc,0x0,
++0x2,0x42,0x32,0x12,0x8f,0x62,0x22,0xa,0x13,0x2e,0xe2,0x22,0x22,0x22,0x2b,0x24,0x0,0xc,0x70,0x40,0xc0,0x44,0x7e,0xc8,0x48,0x48,0x48,0x48,0x48,0x88,0x8,0x8,
++0x0,0x8,0xfc,0x10,0x11,0x12,0x14,0x7d,0x10,0x10,0x11,0x1c,0xf0,0x40,0x0,0x3,0x40,0x40,0xa0,0xa0,0x10,0x2e,0x44,0x80,0x10,0x60,0x84,0x8,0x10,0x20,0xc0,0x0,
++0x22,0x22,0x7f,0x22,0x3e,0x22,0x3e,0x22,0x22,0xff,0x40,0x54,0x62,0x40,0x7f,0x0,0x8,0x8,0x48,0x28,0x8,0x88,0x48,0x8,0x8,0x8e,0xf8,0x8,0x8,0x8,0x8,0x8,
++0x1,0x1,0x7f,0x1,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0xff,0x8,0x10,0x20,0x0,0x8,0xfc,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x14,0xfe,0x20,0x18,0x8,
++0x2,0xff,0x14,0x15,0x7f,0x55,0x55,0x7f,0x49,0x8,0x7f,0x8,0x8,0xf,0x78,0x20,0x4,0xfe,0x40,0x40,0xc8,0x7c,0x48,0x48,0x68,0x58,0x58,0x88,0x88,0xaa,0xca,0x6,
++0x4,0xfe,0x10,0x10,0x20,0x24,0x7e,0xa5,0x25,0x25,0x25,0x25,0x3d,0x25,0x1,0x1,0x40,0x40,0x44,0x7e,0x40,0x40,0x44,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0xfc,0x23,0x20,0x4b,0xfc,0x27,0x21,0xfa,0x25,0x20,0x3b,0xe1,0x42,0x4,0x0,0x40,0x48,0xfc,0x40,0xf8,0x80,0xfe,0x10,0xe,0xf4,0x40,0xf8,0x50,0x4c,0x44,0x40,
++0x1,0x1,0x1,0x1,0x1,0x1f,0x10,0x11,0x11,0x11,0x11,0x11,0x2,0x4,0x18,0x60,0x0,0x8,0xfc,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x40,0x30,0x8,0x4,
++0x10,0x10,0x10,0x1e,0x20,0x20,0x7d,0x90,0x10,0xfe,0x10,0x12,0x14,0x18,0x10,0x0,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x8,0x8,0x8,0x10,0x10,0x37,0x54,0x94,0x14,0x14,0x14,0x14,0x10,0x11,0x16,0x18,0x40,0x44,0x7e,0x40,0x44,0xfe,0x4,0x44,0x44,0x44,0x44,0x44,0x90,0xc,0x6,0x2,
++0x10,0x10,0x10,0x13,0xfe,0x14,0x30,0x38,0x54,0x50,0x90,0x10,0x11,0x11,0x12,0x14,0x40,0x40,0x40,0xfc,0x44,0x48,0x40,0x60,0x60,0xa0,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x1,0x0,0x1f,0x10,0x90,0x51,0x52,0x14,0x39,0x52,0xd4,0x11,0x22,0x20,0x43,0xc,0x0,0x88,0xfc,0x80,0x80,0x40,0x30,0x8e,0x24,0x40,0x80,0x10,0x20,0xc0,0x0,0x0,
++0x0,0x40,0x20,0x21,0x2,0x4,0xe8,0x20,0x23,0x20,0x20,0x23,0x28,0x30,0x23,0xc,0x40,0x40,0xa0,0x20,0x10,0x2e,0x44,0x90,0x20,0x40,0x88,0x10,0x20,0xc0,0x0,0x0,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x3f,0x20,0x2f,0x20,0x3f,0x2a,0x29,0x48,0x8c,0x8,0xf0,0x0,0xfe,0x12,0x64,0x10,0xf8,0x0,0xf0,0x0,0xf8,0x10,0x20,0xc0,0x30,0xc,
++0x10,0x13,0x12,0x12,0xff,0x12,0x16,0x1b,0x32,0xd2,0x12,0x12,0x14,0x14,0x58,0x20,0x4,0xfe,0x0,0x8,0xfc,0x0,0x4,0xfe,0xa0,0xa2,0xa4,0x98,0x90,0x8e,0xc4,0x80,
++0x10,0x10,0x13,0x1c,0x21,0x21,0x7d,0x91,0x11,0xfd,0x11,0x11,0x17,0x18,0x11,0x2,0x20,0x24,0xfe,0x20,0xfc,0x4,0xfc,0x4,0xfc,0x4,0xfc,0x4,0xfe,0x88,0x6,0x2,
++0x0,0x78,0x4f,0x50,0x50,0x61,0x51,0x4b,0x48,0x48,0x68,0x57,0x40,0x40,0x40,0x40,0x80,0x84,0xfe,0x80,0xa0,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x8,0x8,0xff,0x8,0x1f,0x0,0x3d,0x5,0x5,0x9,0x35,0xc2,0xf,0x20,0x24,0x42,0x20,0x24,0xfe,0x20,0xe0,0x48,0x98,0x20,0x40,0x30,0xe,0x4,0xe0,0x10,0x8c,0x44,
++0x10,0x10,0x11,0x12,0xfc,0x13,0x14,0x18,0x37,0xd0,0x10,0x13,0x10,0x10,0x51,0x20,0x80,0x80,0xf8,0x10,0x20,0xf8,0x48,0x48,0xfe,0x48,0x48,0xf8,0x48,0x40,0x40,0x80,
++0x8,0x7c,0x49,0x4a,0x48,0x7b,0x48,0x48,0x4f,0x78,0x48,0x4b,0x48,0x78,0x49,0x0,0x80,0x80,0xf8,0x10,0x20,0xf8,0x48,0x48,0xfe,0x48,0x48,0xf8,0x48,0x40,0x40,0x80,
++0x8,0xb,0x10,0x10,0x20,0x48,0x88,0x12,0x32,0x52,0x92,0x12,0x12,0x12,0x1f,0x10,0x8,0xfc,0x40,0x40,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x2,0x44,0x29,0x12,0x28,0x4b,0x88,0x8,0x1f,0x28,0x48,0x8b,0x8,0x8,0x29,0x10,0x80,0x80,0xf8,0x10,0x20,0xf8,0x48,0x48,0xfe,0x48,0x48,0xf8,0x48,0x40,0x40,0x80,
++0x8,0xf,0x8,0x10,0x3f,0x41,0x1,0xff,0x1,0x1,0x3f,0x1,0x1,0x1,0x5,0x2,0x0,0xe0,0x40,0x90,0xf8,0x10,0x14,0xfe,0x10,0x10,0xf0,0x10,0x0,0x0,0x0,0x0,
++0x10,0x17,0x10,0x10,0x58,0x54,0x50,0x92,0x12,0x12,0x12,0x12,0x12,0x12,0x1f,0x10,0x8,0xfc,0x40,0x40,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x8,0x7f,0x8,0x7f,0x49,0x7f,0x1c,0x2a,0xc8,0x3f,0x1,0x9,0x9,0x9,0xff,0x0,0x40,0x44,0x7e,0x88,0x48,0x50,0x20,0x50,0x8e,0xf8,0x0,0xf0,0x0,0x4,0xfe,0x0,
++0x10,0x13,0x10,0x10,0xfc,0x13,0x15,0x19,0x31,0xd2,0x14,0x10,0x11,0x10,0x5f,0x20,0x0,0xf8,0x10,0x20,0x44,0x48,0x70,0x50,0x50,0x4e,0x44,0x40,0x40,0x84,0xfe,0x0,
++0x0,0x7f,0x1,0x1,0x1,0x1,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xff,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x4,0xfe,0x10,0x10,0x11,0x5e,0x50,0x50,0x50,0x50,0x5e,0xf0,0x40,0x1,0x2,0x40,0x40,0x44,0xfe,0x88,0x8,0x88,0x88,0x50,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x10,0x10,0x10,0x7c,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5d,0x11,0x10,0x10,0x13,0x20,0x24,0x3e,0x20,0xfc,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x44,0x58,0x84,0x2,
++0x0,0x0,0x1f,0x10,0x90,0x57,0x50,0x10,0x32,0x52,0xd2,0x12,0x22,0x22,0x5f,0x0,0x80,0x48,0xfc,0x0,0x8,0xfc,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x41,0x22,0x14,0x7f,0x8,0x8,0x9,0xff,0x8,0x8,0x8,0x14,0x12,0x22,0x40,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0xc8,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x20,0x17,0x10,0x0,0x0,0xf0,0x11,0x11,0x11,0x11,0x11,0x11,0x15,0x19,0x17,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x8,0x8,0xff,0x8,0x2,0x1,0x3f,0x0,0x0,0x3,0xc,0x10,0x60,0x90,0xf,0x0,0x20,0x24,0xfe,0x20,0x0,0x0,0xf0,0x20,0xc0,0x0,0x0,0x0,0x0,0x6,0xfc,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x31,0x39,0x54,0x50,0x90,0x10,0x10,0x10,0x11,0x16,0x20,0x20,0x24,0xfe,0x20,0x20,0xfc,0x4,0x88,0x88,0x50,0x20,0x50,0x88,0xe,0x4,
++0x1,0x1,0x1,0xff,0x1,0x1,0x3f,0x8,0x8,0x4,0x2,0x1,0x2,0xc,0x30,0xc0,0x0,0x0,0x4,0xfe,0x0,0x0,0xf0,0x20,0x20,0x40,0x80,0x0,0x80,0x60,0x1e,0x4,
++0x0,0x8,0x7c,0x4b,0x48,0x48,0x49,0x49,0x48,0x48,0x48,0x78,0x48,0x0,0x1,0x6,0x20,0x20,0x24,0xfe,0x20,0x20,0xfc,0x4,0x88,0x88,0x50,0x20,0x50,0x88,0xe,0x4,
++0x22,0x22,0x22,0xfb,0xad,0xa9,0xa9,0xaf,0xf9,0xa1,0x29,0x39,0xea,0x42,0x4,0x8,0x0,0x0,0x4,0xfe,0x24,0x24,0x24,0xe4,0x24,0x24,0x24,0x24,0xbc,0x64,0x40,0x0,
++0x20,0x20,0x22,0x3f,0x28,0x48,0x88,0x9,0xff,0x8,0x8,0x14,0x12,0x22,0x40,0x80,0x0,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0xc4,0x44,0x44,0x44,0x44,0x7c,0x44,0x0,
++0x4,0x3e,0x24,0x27,0x24,0x3c,0x25,0x25,0x24,0x3c,0x24,0x24,0x24,0x44,0x95,0xa,0x20,0x20,0x24,0xfe,0x20,0x20,0xfc,0x4,0x88,0x88,0x50,0x20,0x50,0x88,0xe,0x4,
++0x5,0x3f,0x25,0x25,0x25,0x3d,0x24,0x24,0x25,0x3d,0x25,0x25,0x25,0x45,0x95,0x9,0x0,0x8,0x1c,0xe0,0x2,0x2,0xfe,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x0,0x40,0x30,0x10,0x80,0x60,0x27,0x8,0x10,0x20,0xe0,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x2,0x1,0x1,0x0,0x7f,0x0,0x0,0x0,0x0,0x1,0x2,0xc,0x30,0x48,0x7,0x0,0x0,0x0,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x6,0xfc,0x0,
++0x10,0x10,0x21,0x21,0x45,0xf9,0x11,0x21,0x41,0xfd,0x40,0x0,0x1c,0xe0,0x41,0x2,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,0x50,0x48,0x84,0x2,0x2,
++0x4,0xfe,0x24,0x24,0x3c,0x24,0x24,0x3c,0x24,0x24,0x27,0xfc,0x44,0x4,0x5,0x4,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,0x48,0x48,0x84,0x86,0x2,0x0,
++0x1,0x1,0x7f,0x1,0x1,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0xff,0x0,0x0,0x8,0xfc,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x14,0xfe,0x0,
++0x10,0x10,0x17,0x10,0xfc,0x13,0x32,0x3b,0x56,0x53,0x92,0x13,0x12,0x12,0x1f,0x10,0x40,0x48,0xfc,0x40,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0xfe,0x0,
++0x4,0xfe,0x13,0x10,0x10,0x3d,0x25,0x45,0xa5,0x19,0x9,0x11,0x21,0x41,0x87,0x0,0x20,0x24,0xfe,0x20,0x24,0xfe,0x4,0xfc,0x4,0xfc,0x4,0xfc,0x4,0x4,0xfe,0x0,
++0x10,0x10,0x10,0x10,0xff,0x10,0x14,0x18,0x31,0xd0,0x11,0x11,0x11,0x12,0x54,0x28,0x80,0x80,0x80,0x90,0xf8,0x90,0x90,0x90,0x90,0x90,0x50,0x52,0x12,0x12,0xe,0x0,
++0x8,0x8,0xf,0x10,0x10,0x33,0x52,0x93,0x12,0x13,0x12,0x13,0x12,0x12,0x1f,0x10,0x40,0x48,0xfc,0x40,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0xfe,0x0,
++0x8,0x8,0xf,0x10,0x11,0x32,0x57,0x90,0x10,0x10,0x17,0x10,0x10,0x10,0x1f,0x10,0x0,0x8,0xfc,0x80,0x0,0x8,0xfc,0x44,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x10,0x15,0xff,0x11,0x11,0x11,0x11,0x11,0x11,0x13,0x1d,0xf1,0x47,0x0,0x20,0x20,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x11,0x11,0x11,0x11,0xfd,0x11,0x14,0x18,0x31,0xd1,0x11,0x11,0x11,0x11,0x51,0x21,0x0,0x8,0x1c,0xe0,0x2,0x2,0xfe,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x1,0x1,0x1,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x4,0x7e,0x44,0x44,0x45,0x7d,0x11,0x51,0x5d,0x51,0x51,0x51,0x5d,0xf1,0x47,0x0,0x20,0x20,0x20,0x20,0x28,0x3c,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x0,0x1f,0x10,0x10,0x10,0x10,0x10,0x1f,0x10,0x0,0x4,0xc,0x10,0x20,0x40,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0xf0,0x10,0x0,0x40,0x20,0x18,0xc,0x4,
++0x20,0x20,0x21,0x3e,0x20,0x20,0x1f,0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0x18,0xe0,0x0,0x4,0x4,0xfc,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x10,0x10,0x23,0x22,0x46,0xfa,0x12,0x23,0x42,0xfe,0x2,0x2,0x1e,0xe2,0x43,0x2,0x0,0x3c,0xe0,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x10,0x92,0xa,0x6,
++0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x3f,0x0,0x2,0x11,0x50,0x50,0x90,0xf,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x10,0xf8,0x0,0x0,0x80,0x84,0x12,0x12,0xf0,0x0,
++0x8,0x8,0x7e,0x8,0xe,0xf8,0x48,0x19,0x3f,0x1,0x1f,0x1,0xff,0x1,0x1,0x3,0x40,0x48,0xfc,0x48,0xc8,0x68,0x8a,0x36,0xc0,0x0,0xf0,0x4,0xfe,0x0,0x0,0x0,
++0x28,0x25,0x20,0x2f,0xf2,0x22,0x22,0x2a,0x3f,0xe2,0x22,0x25,0x24,0x28,0xb0,0x40,0x80,0x7c,0x44,0xc4,0x48,0x48,0x50,0x48,0xc4,0x42,0x42,0x62,0xd4,0x48,0x40,0x40,
++0x0,0x7f,0x2,0x4,0x8,0x10,0x3f,0x1,0x1,0x1,0x3f,0x1,0x1,0x1,0xff,0x0,0x8,0xfc,0x0,0x0,0x20,0x10,0xf8,0x8,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,
++0x4,0xfe,0x10,0x10,0x20,0x45,0xfe,0x10,0x10,0x7c,0x10,0x10,0x1e,0xf0,0x41,0x6,0x40,0x40,0x40,0x44,0xfe,0x8,0x88,0x88,0x88,0x90,0x50,0x20,0x50,0x88,0xe,0x4,
++0x3f,0x24,0x3f,0x1,0x7f,0x1,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0xff,0x0,0xf8,0x48,0xf8,0x0,0xfc,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x14,0xfe,0x0,
++0x10,0x10,0x15,0x7f,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x5c,0x10,0x10,0x11,0x12,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,0x50,0x48,0x84,0x6,0x2,
++0x10,0x10,0x11,0x54,0x54,0x57,0x54,0x54,0x57,0x54,0x54,0x54,0x7c,0x44,0x0,0x0,0x20,0x28,0xfc,0x20,0x24,0xfe,0x8,0x8,0xfe,0x8,0x88,0x48,0x48,0x8,0x28,0x10,
++0x4,0x24,0x25,0x3f,0x24,0x44,0xff,0x4,0x3f,0x24,0x24,0x24,0x26,0x25,0x4,0x4,0x4,0x4,0x4,0xa4,0x24,0xa4,0xe4,0x24,0xa4,0xa4,0xa4,0x84,0x84,0x4,0x14,0x8,
++0x20,0x22,0x3f,0x48,0x8,0xff,0x10,0x14,0x22,0x42,0x9f,0x10,0x1f,0x10,0x1f,0x10,0x0,0x4,0x7e,0x44,0x44,0xc4,0x44,0x7c,0x44,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,
++0x8,0x1c,0xf2,0x12,0x13,0xfe,0x14,0x30,0x3b,0x54,0x50,0x90,0x11,0x11,0x12,0x1c,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x10,0xe,0x4,
++0x8,0x1c,0xf0,0x11,0x13,0xfd,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0xa0,0x90,0x84,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x2f,0x28,0x28,0x28,0x28,0x49,0x42,0x8c,0x30,0x78,0x80,0x80,0x84,0xfe,0x80,0x88,0xfc,0x8,0x88,0x88,0x88,0x8,0x70,0xc,0x4,
++0x4,0x4,0xf,0x11,0x28,0x44,0x3,0xc,0x71,0x9,0x9,0x12,0x4,0x8,0x30,0xc0,0x0,0x0,0xf8,0x10,0xa0,0xc0,0x0,0x0,0x10,0x30,0x40,0x80,0x40,0x30,0xe,0x4,
++0x1,0x0,0x1f,0x10,0x90,0x57,0x50,0x10,0x3f,0x50,0xd7,0x12,0x21,0x21,0x40,0x0,0x0,0x88,0xfc,0x80,0x90,0xf8,0x80,0x84,0xfe,0x10,0xfc,0x10,0x10,0x10,0x50,0x20,
++0x2,0x42,0x2f,0x22,0x80,0x67,0x24,0x8,0x13,0x22,0xe2,0x22,0x22,0x22,0x20,0x20,0x48,0x48,0xfe,0x48,0x0,0xfe,0x42,0x44,0xf8,0x48,0x48,0x48,0x48,0x58,0x40,0x40,
++0x0,0x40,0x31,0x11,0x82,0x67,0x20,0x8,0x13,0x22,0xe2,0x22,0x22,0x22,0x23,0x22,0x80,0x80,0x0,0x10,0x8,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x2,0x1,0x7f,0x44,0x88,0x3f,0x2,0x4,0x1f,0x1,0x1,0x7f,0x1,0x1,0xff,0x0,0x0,0x0,0xfe,0x42,0x24,0xf8,0x0,0x20,0xf0,0x0,0x8,0xfc,0x0,0x4,0xfe,0x0,
++0x1,0x1,0x1,0x7f,0x41,0x41,0x41,0x41,0x7f,0x41,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x3f,0x21,0x21,0x21,0x3f,0x21,0x1,0x1,0x3f,0x24,0x24,0x24,0xff,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x8,0xfc,0x48,0x48,0x48,0xfe,0x0,
++0x1,0x1,0x3f,0x21,0x21,0x21,0x3f,0x21,0x1,0x1,0x12,0x51,0x51,0x90,0xf,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x4,0x12,0x12,0xf0,0x0,
++0x10,0x10,0x10,0x1c,0x21,0x21,0x7d,0x91,0x11,0xfd,0x11,0x10,0x14,0x18,0x10,0x0,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,0x20,
++0x2,0x1,0xff,0x1,0x1f,0x11,0x11,0x1f,0x11,0x5,0x8,0x18,0x28,0xca,0xc,0x8,0x0,0x4,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x8,0x18,0xa0,0x40,0x30,0xe,0x4,0x0,
++0x10,0x10,0x20,0x21,0x45,0xfa,0x10,0x20,0x40,0xfd,0x2,0x0,0x1c,0xe0,0x40,0x0,0x80,0x80,0xfc,0x8,0x90,0x50,0x20,0x50,0x88,0xe,0x64,0x10,0x8,0xc0,0x30,0x8,
++0x8,0x1c,0xf0,0x10,0x11,0xff,0x11,0x39,0x35,0x55,0x51,0x90,0x10,0x10,0x10,0x10,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,0x20,
++0x4,0x3e,0x24,0x24,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x24,0x24,0x44,0x94,0x8,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,0x20,
++0x0,0x3f,0x1,0xff,0x1,0x1f,0x11,0x1f,0x11,0x1f,0x1,0x3f,0x1,0x1,0xff,0x0,0x38,0xc0,0x4,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0xf8,0x0,0x4,0xfe,0x0,
++0x8,0x8,0x8,0x10,0x17,0x34,0x54,0x94,0x14,0x17,0x14,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xfc,0x44,0x40,0x40,0x40,0x40,0x40,
++0x1,0x1,0x1,0x2,0x4,0x8,0x30,0x0,0x8,0x8,0x14,0x12,0x22,0x41,0x82,0x0,0x0,0x0,0x0,0x80,0x40,0x38,0x10,0x0,0x20,0x20,0x50,0x50,0x88,0xe,0x4,0x0,
++0x2,0x4,0x1f,0x10,0x12,0x11,0x11,0xff,0x10,0x12,0x11,0x11,0x10,0x20,0x40,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
++0x0,0x3f,0x21,0x21,0x2f,0x21,0x21,0x3f,0x20,0x27,0x24,0x24,0x24,0x47,0x84,0x0,0x8,0xfc,0x8,0x48,0xe8,0x8,0x28,0xf8,0x48,0xe8,0x48,0x48,0x48,0xc8,0x28,0x10,
++0x10,0x10,0x10,0x10,0x54,0x52,0x52,0x90,0x10,0x10,0x10,0x10,0x20,0x20,0x40,0x0,0x4,0x84,0x84,0x84,0xa4,0x94,0x94,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x4,0x4,
++0x1,0x41,0x31,0x11,0x81,0x65,0x23,0xb,0x11,0x21,0xe1,0x21,0x22,0x22,0x24,0x20,0x4,0x4,0x24,0x24,0x24,0xb4,0x6c,0x6c,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,
++0x1,0x41,0x21,0x22,0x4,0x8,0xe7,0x20,0x20,0x20,0x23,0x20,0x28,0x30,0x27,0x0,0x0,0x0,0xf8,0x10,0x20,0x44,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x9,0xfd,0x9,0x9,0xd,0x7b,0x41,0x47,0x41,0x79,0xb,0xd,0x9,0x89,0x51,0x21,0x4,0x3e,0x4,0x4,0x44,0xbc,0x20,0xe0,0x24,0x3e,0x84,0x44,0x4,0x4,0x28,0x10,
++0x10,0x10,0x14,0xfe,0x21,0x21,0x49,0x7f,0x9,0x9,0xf,0xf9,0x49,0x9,0x9,0x8,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,
++0x4,0x3e,0x24,0x24,0x24,0x3d,0x24,0x24,0x24,0x3c,0x24,0x24,0x24,0x44,0x94,0x8,0x8,0x8,0x8,0x8,0x8,0xfe,0x8,0x8,0x88,0x48,0x48,0x8,0x8,0x8,0x28,0x10,
++0x0,0x3f,0x0,0x1f,0x0,0x3f,0x1,0x7f,0x41,0x9f,0x11,0x11,0x11,0x11,0x1,0x1,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0xfe,0x2,0xf4,0x10,0x10,0x50,0x20,0x0,0x0,
++0x4,0x7e,0x44,0x44,0x44,0x7c,0x0,0xf,0x8,0x8,0x8,0x8,0x8,0x10,0x20,0x40,0x8,0xfc,0x88,0x88,0x88,0xf8,0x40,0xe0,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x10,0x1e,0x22,0xc4,0x8,0x7e,0x2,0x2,0x7e,0x2,0x2,0x7f,0x1,0x2,0x0,0x10,0x10,0x10,0xfe,0x92,0x94,0x90,0xfc,0x84,0xc4,0xa8,0xa8,0x10,0x28,0x4e,0x84,
++0x2,0x1,0x7f,0x40,0x81,0x1,0x3f,0x21,0x21,0x21,0x3f,0x21,0x21,0x21,0x3f,0x20,0x0,0x0,0xfe,0x2,0x4,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x20,0x3f,0x50,0x9f,0x10,0x1f,0x0,0x7f,0x0,0x10,0xf8,0x10,0x10,0xf0,0x90,0x40,0x20,0xfe,0x14,0xf0,0x10,0xf0,0x0,0xfc,0x0,
++0x10,0xff,0x12,0x53,0x52,0x53,0x52,0x57,0x78,0xb,0x8,0x3b,0xc8,0x9,0x2e,0x10,0x0,0xfc,0x44,0xd4,0x48,0xd4,0x62,0xd8,0x60,0xa4,0x68,0xb0,0x68,0xa6,0x20,0x20,
++0x0,0x9,0xfd,0x11,0x11,0x12,0x7c,0x13,0x10,0x10,0x1c,0xf0,0x41,0x2,0x4,0x0,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x60,0x70,0xb0,0xa8,0x2e,0x24,0x20,0x20,
++0x10,0x11,0x11,0x11,0xfd,0x12,0x30,0x3b,0x54,0x50,0x90,0x10,0x11,0x12,0x14,0x10,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x60,0x70,0xb0,0xa8,0x2e,0x24,0x20,0x20,
++0x10,0x11,0x11,0x11,0x7d,0x56,0x54,0x57,0x54,0x7c,0x10,0x14,0x1d,0xf6,0x44,0x0,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x60,0x70,0xb0,0xa8,0x2e,0x24,0x20,0x20,
++0x1,0x11,0x11,0x1f,0x11,0x21,0x1,0xff,0x3,0x5,0x9,0x11,0x21,0xc1,0x1,0x1,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x80,0x40,0x30,0xe,0x4,0x0,0x0,
++0x2,0x44,0x2b,0x10,0x28,0x4b,0x88,0x9,0x1b,0x2d,0x49,0x89,0x9,0x9,0x29,0x11,0x40,0x44,0xf8,0x50,0x64,0xfe,0x80,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x20,0x1b,0x8,0x0,0x7,0xf0,0x11,0x13,0x15,0x19,0x11,0x15,0x19,0x11,0x1,0x40,0x44,0xf8,0x50,0x64,0xfe,0x80,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x42,0x22,0x23,0x2,0x4,0xe0,0x2f,0x20,0x20,0x21,0x29,0x32,0x24,0x8,0x0,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0xc0,0xe0,0x60,0x50,0x4e,0x44,0x40,0x40,
++0x0,0x4f,0x20,0x21,0x3,0xc,0xe1,0x22,0x2c,0x21,0x22,0x2c,0x21,0x50,0x8f,0x0,0x8,0xfc,0x80,0x0,0x88,0xd8,0x60,0x40,0xe0,0x50,0x48,0x48,0x40,0x86,0xfc,0x0,
++0x10,0x10,0x10,0x12,0x1f,0x28,0x49,0x8a,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x40,0x40,0x40,0x44,0x7e,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
++0x10,0x10,0x10,0x12,0x55,0x59,0x51,0x91,0x11,0x11,0x11,0x28,0x24,0x44,0x83,0x1,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x24,0x3c,0xe2,0x2,
++0x2,0x2,0x3f,0x2,0xff,0x2,0xf,0x38,0xc8,0xf,0x8,0x8,0xf,0x20,0x24,0x42,0x0,0x20,0xf0,0x84,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x8,0x84,0x44,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x14,0x18,0x31,0xd0,0x10,0x10,0x10,0x10,0x57,0x20,0x40,0x20,0x4,0xfe,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x7,0x74,0x57,0x54,0x75,0x54,0x55,0x75,0x55,0x54,0x77,0x4a,0x12,0x22,0x2,0x4,0xfe,0x4,0xfc,0x0,0xfc,0x20,0xfc,0x24,0xfc,0x20,0xfe,0x22,0x2a,0xfa,0x6,
++0x0,0x7,0x74,0x57,0x54,0x55,0x54,0x55,0x55,0x55,0x54,0x77,0x4a,0x12,0x22,0x2,0x4,0xfe,0x4,0xfc,0x0,0xfc,0x20,0xfc,0x24,0xfc,0x20,0xfe,0x22,0x2a,0xfa,0x6,
++0x2,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0x3f,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x8,0x8,0xff,0x9,0x1,0x1f,0x1,0xff,0x1,0x2,0xf,0x18,0x2f,0xc8,0xf,0x8,0x20,0x24,0xfe,0x20,0x10,0xe0,0x44,0xfe,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x30,0x38,0x55,0x50,0x90,0x10,0x10,0x10,0x17,0x10,0x40,0x20,0x24,0xfe,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x2,0x3f,0x22,0x22,0x23,0x3e,0x22,0x22,0x3e,0x22,0x22,0x22,0x2f,0xf0,0x41,0x2,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x44,0x84,0x28,0x10,
++0x10,0x10,0x10,0x15,0x7e,0x54,0x54,0x54,0x55,0x7c,0x54,0x10,0x14,0xfc,0x47,0x0,0x40,0x20,0x24,0xfe,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x4,0x7e,0x44,0x54,0x55,0x55,0x56,0x54,0x54,0x54,0x54,0x54,0x10,0x2b,0x44,0x84,0x40,0x20,0x20,0x0,0xfe,0x2,0x4,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,
++0x10,0x10,0x13,0x1c,0x20,0x23,0x7c,0x90,0x13,0xfd,0x12,0x15,0x10,0x14,0x18,0x0,0x40,0x48,0xfc,0x40,0x48,0xfc,0x80,0x84,0xfe,0x8,0x8,0xfe,0x8,0x88,0x48,0x18,
++0x10,0x12,0x1f,0x28,0x45,0x80,0x8,0x7d,0x11,0x11,0x11,0x11,0x1d,0xf2,0x44,0x8,0x40,0x44,0x7e,0xa0,0x10,0x0,0x10,0xf8,0x10,0x10,0x90,0x50,0x52,0x12,0xe,0x0,
++0x8,0x8,0x8,0x17,0x10,0x30,0x50,0x90,0x17,0x10,0x10,0x10,0x10,0x10,0x1f,0x10,0x80,0x40,0x44,0xfe,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x40,0x30,0x17,0x80,0x60,0x20,0x8,0x17,0x20,0xe0,0x20,0x20,0x20,0x2f,0x20,0x80,0x40,0x44,0xfe,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x20,0x13,0x12,0x2,0xfe,0xa,0x12,0x3b,0x56,0x90,0x10,0x11,0x11,0x12,0x14,0x18,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0xa8,0xa0,0xa0,0x20,0x22,0x22,0x1e,0x0,
++0x8,0xfc,0x8,0x4b,0x48,0x48,0x48,0x48,0x7d,0x4,0x4,0x1c,0xe4,0x44,0x17,0x8,0x40,0x20,0x24,0xfe,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x16,0x1a,0x32,0xd2,0x12,0x12,0x14,0x14,0x58,0x20,0x8,0x1c,0xe0,0x50,0x50,0x50,0x50,0x50,0x50,0x48,0x48,0x48,0x44,0x44,0x42,0x40,
++0x0,0x0,0x1f,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x21,0x21,0x41,0x81,0x1,0x10,0x78,0x80,0x20,0x20,0x20,0x20,0x20,0x20,0x10,0x10,0x10,0x8,0xe,0x4,0x0,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x17,0x1a,0x32,0xd3,0x12,0x10,0x10,0x10,0x57,0x20,0x40,0x40,0x48,0xfc,0x48,0x48,0xf8,0x48,0x48,0xfc,0x48,0x50,0x20,0xd2,0xa,0x6,
++0x1,0x1,0x1,0x3f,0x2,0x2,0xff,0x4,0x4,0xf,0x0,0x0,0x0,0x6,0x1,0x0,0x0,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x80,0x40,
++0x0,0x4,0xfe,0x11,0x10,0x20,0x23,0x7c,0xa4,0x25,0x24,0x24,0x24,0x3c,0x24,0x0,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x80,0x80,0xfc,0x8,0x10,0x90,0x60,0x20,0x10,
++0x10,0x10,0x10,0xfd,0x20,0x28,0x4b,0x7c,0x8,0x9,0x1c,0xe8,0x48,0x8,0x8,0x8,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x80,0x80,0xfc,0x8,0x10,0x90,0x60,0x20,0x10,
++0x10,0x17,0x14,0x14,0xff,0x14,0x13,0x19,0x31,0xd7,0x11,0x11,0x1f,0x11,0x52,0x24,0x4,0xbe,0xa4,0xa4,0xbc,0x62,0xde,0x10,0x10,0xfc,0x10,0x14,0xfe,0x10,0xc,0x4,
++0x0,0x7c,0x47,0x54,0x55,0x54,0x54,0x57,0x54,0x54,0x55,0x54,0x10,0x29,0x46,0x80,0x88,0x50,0xfe,0x50,0xfc,0x54,0x54,0xfe,0x54,0x54,0xfc,0x50,0xd8,0x56,0x54,0x50,
++0x10,0x1e,0x28,0x4f,0x8,0x1f,0x0,0xff,0x2,0xd,0x71,0x6,0x39,0x6,0x78,0x3,0x40,0x7c,0xa0,0xc0,0x40,0x80,0x84,0xfe,0x10,0x20,0xc0,0xa0,0x90,0x8e,0x84,0x0,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x32,0x3a,0x57,0x52,0x92,0x12,0x14,0x14,0x1b,0x10,0x40,0x20,0x24,0xfe,0x0,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x1,0x0,0x0,0x3f,0x20,0x20,0x20,0x20,0x2f,0x20,0x20,0x20,0x40,0x40,0xbf,0x0,0x0,0x80,0x88,0xfc,0x0,0x80,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,0x84,0xfe,0x0,
++0x8,0x48,0x2b,0x8,0x18,0x29,0x4a,0x9,0xff,0x2,0x4,0xc,0x14,0x65,0x6,0x4,0x40,0x48,0xfc,0x40,0x50,0xf8,0x0,0x4,0xfe,0x8,0x90,0xa0,0x40,0x30,0xe,0x4,
++0x8,0x8,0x8,0x48,0x28,0x2f,0x9,0x9,0x19,0x2a,0x49,0xc8,0x8,0x8,0x9,0xa,0x40,0x40,0x40,0x80,0x84,0xfe,0x8,0x8,0x8,0x8,0x10,0xa0,0x40,0xb0,0xc,0x4,
++0x10,0x17,0x11,0x10,0xff,0x10,0x17,0x1a,0x33,0xd2,0x13,0x10,0x17,0x10,0x5f,0x20,0x40,0xfc,0x10,0xa4,0xfe,0x8,0xfc,0x48,0xf8,0x48,0xf8,0x40,0xfc,0x40,0xfe,0x0,
++0x10,0x10,0x10,0x90,0x50,0x50,0x1f,0x10,0x30,0x50,0xd0,0x10,0x10,0x17,0x10,0x10,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x48,0xfc,0x0,0x0,
++0x8,0x8,0x8,0x48,0x28,0x2f,0x8,0x8,0x18,0x28,0x49,0xc9,0x9,0xa,0xc,0x8,0x40,0x50,0x48,0x40,0x44,0xfe,0x40,0x40,0xa0,0xa0,0x10,0x10,0x8,0xe,0x4,0x0,
++0x10,0x10,0x10,0x11,0xfd,0x13,0x35,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0xa0,0xa0,0x84,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x10,0x10,0x10,0x1d,0x21,0x23,0x7d,0x91,0x11,0xfd,0x11,0x11,0x15,0x19,0x11,0x1,0xa0,0xa0,0x84,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x0,0x40,0x33,0x12,0x2,0x3,0xf2,0x12,0x13,0x12,0x12,0x12,0x13,0x2a,0x47,0x0,0x40,0x90,0xf8,0x10,0x10,0xf0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x6,0xfc,0x0,
++0x8,0x7f,0x8,0x3e,0x8,0xff,0x10,0x1e,0x22,0xcc,0x1f,0x10,0x11,0x11,0x6,0x38,0x40,0x44,0x7e,0x84,0xc4,0x28,0x10,0x28,0x46,0x90,0xf8,0x10,0x10,0x10,0xc0,0x38,
++0x0,0x7c,0x44,0x48,0x50,0x48,0x45,0x65,0x5a,0x44,0x41,0x5f,0x1,0x1,0xff,0x0,0x40,0x40,0x40,0xa0,0xa0,0xa0,0x10,0x8,0xe,0x4,0x0,0xf0,0x0,0x0,0xfe,0x0,
++0x10,0x17,0x24,0x22,0x41,0xfa,0x12,0x24,0x47,0xfc,0x4,0x2,0x19,0xe2,0x44,0x8,0x0,0xbc,0xa4,0xa8,0x10,0xa8,0xa6,0x40,0xbc,0xa4,0xa4,0xa8,0x10,0xa8,0x46,0x4,
++0x0,0x4f,0x30,0x13,0x2,0x2,0xf3,0x10,0x13,0x10,0x10,0x17,0x14,0x18,0x11,0x0,0x44,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x0,0xf8,0x20,0x44,0xfe,0x40,0x40,0x40,0x80,
++0x1,0x41,0x31,0x13,0x2,0x16,0x1b,0x12,0x22,0xe3,0x22,0x22,0x22,0x23,0x22,0x2,0x40,0x20,0x24,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x10,0x13,0x12,0x12,0xfe,0x12,0x17,0x1a,0x30,0xd2,0x12,0x12,0x13,0x14,0x58,0x20,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x48,0x40,0x48,0x7c,0x40,0x40,0xc6,0x7c,0x0,
++0x10,0x10,0x12,0x12,0xfe,0x12,0x17,0x18,0x30,0xd4,0x14,0x14,0x14,0x14,0x57,0x20,0x40,0x40,0x48,0x48,0x48,0x48,0xf8,0x48,0x40,0x44,0x44,0x44,0x44,0x44,0xfc,0x4,
++0x1,0x1,0x1,0x1,0x1f,0x10,0x1f,0x10,0x1f,0x11,0x1,0xff,0x1,0x1,0x1,0x1,0x8,0xfc,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x1,0x1,0x1,0x1,0x1f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x3,0x5,0x9,0x31,0x1,0x8,0xfc,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x80,0x60,0x1c,0x8,0x0,
++0x0,0x17,0xf8,0x20,0x21,0x22,0x26,0xf9,0x22,0x24,0x20,0x21,0x3a,0xe4,0x41,0x0,0x4,0xfe,0x40,0x80,0x84,0x4c,0xb0,0x20,0xb0,0x68,0xa8,0x24,0x22,0x20,0x40,0x80,
++0x8,0x8,0xff,0x8,0x1,0x21,0x21,0x21,0x3f,0x1,0x41,0x41,0x41,0x41,0x7f,0x40,0x20,0x24,0xfe,0x20,0x0,0x8,0x8,0x8,0xf8,0x0,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x55,0x63,0x41,0x7f,0x41,0x41,0x7f,0x41,0x20,0xa0,0x20,0x24,0x7e,0x84,0x4,0x44,0x24,0x24,0x4,0x4,0x4,0x4,0x28,0x10,
++0x0,0xb,0x7c,0x48,0x49,0x4a,0x4e,0x49,0x4a,0x4c,0x48,0x79,0x4a,0x4,0x1,0x0,0x4,0xfe,0x40,0x80,0x84,0x4c,0xb0,0x20,0xb0,0x68,0xa8,0x24,0x22,0x20,0x40,0x80,
++0x8,0x4,0x7f,0x1,0x3f,0x2,0xff,0x4,0xf,0x18,0x2f,0xc8,0xf,0x8,0xf,0x8,0x20,0x48,0xfc,0x0,0xf8,0x0,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x10,0x10,0x10,0x12,0x54,0x59,0x52,0x90,0x10,0x10,0x10,0x28,0x24,0x44,0x80,0x0,0x40,0x40,0x40,0x44,0xfe,0x4,0x4,0x84,0x44,0x44,0x4,0x4,0x4,0x44,0x28,0x10,
++0x0,0x40,0x30,0x10,0x87,0x64,0x24,0xc,0x14,0x27,0xe4,0x20,0x20,0x20,0x2f,0x24,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xfc,0x44,0x50,0x48,0x7c,0xc4,0x4,
++0x10,0xc,0x4,0x0,0xff,0x10,0x10,0x22,0x24,0x78,0x8,0x10,0x14,0x22,0x7e,0x2,0x10,0x30,0x40,0x4,0xfe,0x20,0x20,0x44,0x48,0xf0,0x10,0x20,0x28,0x44,0xfc,0x4,
++0x41,0x31,0x11,0x2,0xa,0xf4,0x20,0x20,0x21,0x26,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0xfc,0x4,0x48,0x40,0xa0,0x90,0xe,0x4,0xf0,0x10,0x10,0x10,0xf0,0x10,
++0x41,0x21,0x21,0xa,0x34,0xe0,0x21,0x26,0x1f,0x10,0x11,0x11,0x11,0x2,0xc,0x30,0x0,0x0,0xfc,0x44,0x48,0xa0,0x10,0xe,0xf4,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x20,0x10,0x10,0x5,0xa,0x70,0x10,0x13,0x12,0xff,0x4,0x8,0x4,0x3,0x4,0x38,0x80,0xfc,0x84,0x28,0x20,0x50,0x8e,0x4,0x0,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x44,0x22,0x21,0xf,0x82,0x42,0x44,0x14,0x1f,0x21,0xe2,0x24,0x29,0x2f,0x21,0x20,0x8,0x10,0x24,0xfe,0x10,0x10,0x20,0xa4,0x78,0x8,0x10,0x20,0x44,0x7c,0x4,0x0,
++0x2,0x42,0x24,0x29,0x84,0x62,0x22,0x8,0x17,0x24,0xe4,0x27,0x24,0x24,0x27,0x24,0x48,0x48,0x90,0x20,0x90,0x48,0x48,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x0,0x0,0xfe,0x4,0x8,0x11,0x15,0x1a,0xf0,0x50,0x10,0x10,0x10,0x10,0x51,0x26,0x80,0x80,0x80,0x84,0xfe,0x8,0x88,0x88,0x88,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x8,0x28,0x2e,0x28,0x2e,0xf8,0x42,0x4,0x3f,0x1,0x2,0x3f,0x1,0x9,0x11,0x23,0x80,0x80,0x98,0xe2,0x82,0x7e,0x0,0x10,0xe0,0x0,0x10,0xf8,0x8,0x20,0x18,0x8,
++0x8,0xb,0x8,0x10,0x10,0x30,0x50,0x9f,0x10,0x10,0x10,0x10,0x10,0x10,0x11,0x10,0x0,0xf8,0x8,0x10,0x20,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x10,0x11,0x52,0x34,0x18,0xfe,0x10,0x33,0x38,0x54,0x54,0x90,0x10,0x10,0x10,0x10,0x0,0xfc,0x4,0x8,0x10,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x40,0x37,0x14,0x88,0x67,0x20,0x9,0x10,0x2f,0xe0,0x20,0x27,0x20,0x20,0x20,0x80,0x40,0xfe,0x2,0x44,0xfc,0x0,0x10,0xa4,0xfe,0x40,0x48,0xfc,0x40,0x40,0x40,
++0x0,0x3f,0x0,0x0,0x0,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x0,0xf0,0x10,0x20,0x40,0x80,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x2,0x4,0x1f,0x10,0x10,0x1f,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0xf0,0x10,
++0x0,0x47,0x30,0x13,0x80,0x6f,0x20,0xb,0x12,0x22,0xe2,0x22,0x22,0x20,0x23,0x2c,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0x48,0x48,0x48,0x48,0xb0,0xc,0x4,
++0x2,0x1,0x3f,0x20,0x40,0x1f,0x0,0x0,0x1,0xff,0x1,0x1,0x1,0x1,0x5,0x2,0x0,0x0,0xfc,0x4,0x8,0xe0,0x40,0x80,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x13,0x1c,0x10,0x7f,0x14,0x3e,0x1,0x7f,0x40,0x9f,0x0,0x7f,0x9,0x11,0x23,0x4,0x18,0x64,0x18,0x64,0x18,0x60,0x0,0xfe,0x2,0xf4,0x0,0xfc,0x20,0x18,0x8,
++0x10,0x10,0x13,0x12,0xfc,0x11,0x30,0x38,0x57,0x50,0x90,0x11,0x11,0x12,0x10,0x10,0x40,0x20,0xfe,0x2,0x4,0xfc,0x0,0x4,0xfe,0x20,0xa8,0x24,0x22,0x22,0xa0,0x40,
++0x0,0x78,0x4b,0x4a,0x4c,0x79,0x50,0x10,0x13,0x5c,0x50,0x51,0x5d,0xf2,0x40,0x0,0x40,0x20,0xfe,0x2,0x4,0xfc,0x0,0x4,0xfe,0x20,0xa8,0x24,0x22,0x22,0xa0,0x40,
++0x2,0x1,0x7f,0x40,0x80,0x1f,0x0,0x0,0xff,0x1,0x9,0x9,0x11,0x21,0x5,0x2,0x0,0x0,0xfe,0x2,0x24,0xf0,0x0,0x4,0xfe,0x0,0x20,0x10,0x8,0x8,0x0,0x0,
++0x10,0x10,0x23,0x22,0x44,0xf9,0x10,0x20,0x43,0xf8,0x0,0x1,0x19,0xe2,0x40,0x0,0x40,0x20,0xfe,0x2,0x4,0xfc,0x0,0x4,0xfe,0x20,0xa8,0x24,0x22,0x22,0xa0,0x40,
++0x10,0x8,0x4,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x2,0x51,0x50,0x90,0xf,0x0,0x10,0x20,0x40,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x0,0x84,0x92,0x12,0xf0,0x0,
++0x11,0x11,0x21,0x21,0x45,0xf9,0x11,0x21,0x41,0xfd,0x42,0x2,0x1c,0xe4,0x48,0x11,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xa8,0xa8,0x48,0x44,0x82,0x0,
++0x10,0x10,0x10,0x3f,0x42,0x84,0x7f,0x1,0x1,0x3f,0x1,0x1,0x7f,0x1,0x0,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x1,0x1,0x1,0x3f,0x1,0x1,0xff,0x1,0x9,0x9,0x9,0x9,0x9,0x15,0x23,0x40,0x0,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,0x0,0x10,0xf8,0x0,0x0,0x6,0xfc,0x0,
++0x1,0x1,0x7f,0x1,0x3f,0x2,0xff,0x4,0x8,0x37,0xc1,0x1f,0x1,0x2,0x4,0x38,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x40,0x30,0xce,0x4,0xf0,0x0,0xc0,0x30,0x8,
++0x10,0x10,0x17,0x10,0xfb,0x10,0x17,0x19,0x32,0xdd,0x10,0x17,0x10,0x10,0x51,0x26,0x40,0x48,0xfc,0x40,0xf8,0x80,0xfe,0x10,0xe,0xf4,0x40,0xfc,0x40,0xb0,0xc,0x4,
++0x8,0x1c,0xf1,0x11,0x15,0xff,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x1f,0x10,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xfe,0x0,
++0x0,0x1f,0x10,0x10,0x10,0x10,0x1f,0x11,0x1,0x11,0x11,0x11,0x11,0x29,0x47,0x80,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,0x0,0x10,0xf8,0x0,0x0,0x6,0xfc,0x0,
++0x2,0x1,0x7f,0x8,0x8,0x8,0x14,0x22,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x0,0x8,0xfc,0x20,0x20,0x20,0x50,0x88,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x20,0x18,0x8,0x0,0xfe,0x21,0x20,0x3c,0x24,0x25,0x27,0x24,0x44,0x44,0x94,0x9,0x40,0x40,0x48,0x7c,0x80,0x48,0x7c,0xa0,0xa0,0x24,0xfe,0x20,0x50,0x50,0x8e,0x4,
++0x20,0x10,0x11,0x1,0xfd,0x9,0x11,0x39,0x55,0x91,0x11,0x11,0x11,0x11,0x17,0x10,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xfe,0x0,
++0x40,0x30,0x11,0x1,0x1,0xf1,0x11,0x11,0x11,0x11,0x11,0x13,0x15,0x19,0x17,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xfe,0x0,
++0x0,0x7c,0x45,0x49,0x49,0x51,0x49,0x49,0x45,0x45,0x45,0x69,0x51,0x41,0x47,0x40,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xfe,0x0,
++0x10,0x10,0x21,0x21,0x45,0xf9,0x11,0x21,0x41,0xfd,0x41,0x1,0x1d,0xe1,0x47,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xfe,0x0,
++0x10,0x10,0x10,0x1e,0x20,0x20,0x7c,0x91,0x11,0xff,0x11,0x13,0x15,0x19,0x11,0x1,0x20,0x20,0x24,0x3e,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x20,0x3e,0x48,0x9f,0x12,0x10,0x1f,0x8,0xff,0x14,0x2f,0x41,0x9f,0x5,0x9,0x13,0x40,0x7e,0x90,0xf0,0x10,0x90,0xf0,0x4,0xfe,0x50,0x88,0x2e,0xe4,0x40,0x30,0x10,
++0x1,0x5,0x75,0x55,0x55,0x5f,0x51,0x52,0x57,0x5a,0x53,0x72,0x43,0x2,0x4,0x8,0x20,0x20,0xe6,0x38,0xe2,0x1e,0xf0,0x28,0xfc,0x48,0xf8,0x48,0xf8,0x48,0x48,0x58,
++0x4,0xfe,0x29,0x28,0xfe,0xaa,0xaa,0xab,0xa6,0xc2,0x83,0xfe,0x82,0x82,0xfe,0x82,0x20,0x24,0xfe,0x0,0x88,0x88,0x88,0x54,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x1f,0x10,0x1f,0x10,0x1f,0x0,0xff,0x22,0x3f,0x22,0x3e,0x22,0x3e,0xe2,0x2,0x3,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,0xfc,0x84,0x88,0x50,0x20,0x58,0x8e,0x4,
++0x0,0x7f,0x44,0x44,0x7f,0x0,0x4,0xfc,0x4,0x4,0x7c,0x4,0x4,0xfc,0x4,0x4,0x4,0xfe,0x44,0x44,0xfc,0x0,0x44,0x7e,0x40,0x48,0x7c,0x40,0x44,0x7e,0x40,0x40,
++0x8,0x7f,0x4,0x3f,0x24,0x24,0x28,0x3f,0x20,0x3f,0x0,0xff,0x8,0x4,0x4,0x0,0x40,0xfc,0x80,0xf8,0x88,0xe8,0x8,0xf8,0x8,0xf8,0x20,0xfe,0x20,0x20,0xa0,0x40,
++0x2,0x5f,0x21,0x2f,0x9,0xa,0xe8,0x2b,0x28,0x2f,0x20,0x3f,0x24,0x22,0x50,0x8f,0x20,0xfc,0x40,0xf8,0x48,0x38,0x8,0xe8,0x8,0xf8,0x20,0xfe,0x20,0xa0,0x46,0xfc,
++0x1,0x9,0x7d,0x49,0x4a,0x4c,0x48,0x78,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x0,0x4,0xfe,0x80,0x80,0x90,0xf8,0x80,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,
++0x2,0x2,0x2,0xff,0x4,0x4,0x4,0x8,0xf,0x10,0x10,0x20,0x40,0x80,0x7f,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x10,0xf8,0x80,0x80,0x80,0x80,0x84,0xfe,0x0,
++0x8,0x8,0x8,0x17,0x10,0x30,0x51,0x91,0x11,0x12,0x14,0x18,0x10,0x10,0x17,0x10,0x80,0x80,0x84,0xfe,0x80,0x80,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x11,0x11,0x11,0x11,0xfe,0x14,0x30,0x38,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x4,0xfe,0x80,0x80,0x90,0xf8,0x80,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,
++0x10,0x12,0x12,0x22,0x3f,0x62,0xa2,0x22,0x2f,0x28,0x28,0x28,0x28,0x2f,0x28,0x20,0x20,0x20,0x20,0x24,0xfe,0x84,0x44,0x44,0xc8,0xa8,0xa8,0x90,0xa8,0xa8,0x46,0x84,
++0x9,0x9,0x9,0x11,0x12,0x32,0x54,0x98,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x4,0xfe,0x80,0x80,0x90,0xf8,0x80,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,
++0x1,0x1,0x11,0x11,0x11,0x29,0x25,0x45,0x81,0x1,0x3f,0x1,0x1,0x1,0xff,0x0,0x0,0x0,0x10,0x10,0x10,0x28,0x24,0x44,0x80,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,
++0x1,0x0,0x3f,0x20,0x24,0x24,0x24,0x2a,0x29,0x31,0x20,0x2f,0x40,0x40,0xbf,0x0,0x0,0x84,0xfe,0x80,0x90,0x90,0x90,0xa8,0xa4,0xc4,0x90,0xf8,0x80,0x84,0xfe,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x0,0x0,0x0,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x8,0xfc,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0xff,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x4,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0xff,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x4,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0xff,0x1,0x1,0x21,0x21,0x21,0x21,0x3f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x0,0x8,0x8,0x8,0x8,0xff,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0xf,0x8,0x0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xe0,0x20,
++0x10,0x11,0x11,0x11,0x11,0x11,0x11,0xff,0x11,0x11,0x11,0x11,0x11,0x21,0x20,0x40,0x10,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0x7f,0x0,0x0,0x1,0x3,0x5,0x9,0x11,0x21,0x41,0x1,0x1,0x1,0xff,0x0,0x8,0xfc,0x80,0x80,0x0,0x0,0x60,0x10,0x8,0x4,0x4,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x7f,0x0,0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0x0,0xff,0x0,0x8,0xfc,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x0,0x4,0xfe,0x0,
++0x0,0x3f,0x0,0x0,0x1,0x7d,0x5,0x9,0x9,0x11,0x11,0x21,0x45,0x2,0xff,0x0,0x20,0xf0,0x40,0x80,0x8,0x18,0xa0,0x40,0x20,0x10,0xe,0x4,0x0,0x4,0xfe,0x0,
++0x0,0xff,0x0,0x1f,0x10,0x10,0x1f,0x0,0x7f,0x44,0x42,0x5f,0x41,0x41,0x41,0x40,0x4,0xfe,0x0,0xf0,0x10,0x10,0xf0,0x4,0xfe,0x44,0x84,0xf4,0x4,0x4,0x14,0x8,
++0x0,0x7f,0x3,0x5,0x19,0x61,0x10,0x10,0xfe,0x22,0x22,0x23,0x14,0x8,0x14,0x62,0x8,0xfc,0x0,0x60,0x18,0x4,0x0,0xf8,0x8,0x10,0x24,0xfe,0x20,0x20,0xa0,0x40,
++0x0,0xff,0x1,0x3d,0x25,0x3d,0x1,0x7f,0x1,0x3d,0x25,0x25,0x3d,0x1,0xff,0x0,0x4,0xfe,0x0,0x78,0x48,0x78,0x0,0xfc,0x0,0x78,0x48,0x48,0x78,0x4,0xfe,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x1,0x7f,0x41,0x41,0x4f,0x40,0x40,0x40,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x4,0xfe,0x4,0x24,0xe4,0x24,0x14,0x8,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x2,0x2,0x4,0x8,0x10,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x18,0x10,0x10,0x10,0x10,0x10,0xf,0x0,0x0,0x0,0x20,0x60,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0xfc,0x0,
++0x0,0x3,0x7e,0x2,0x2,0x2,0x2,0x3,0xfe,0x2,0x2,0x2,0x2,0x2,0x2,0x1,0x10,0xf8,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x2,0x2,0xfe,
++0x0,0x1,0x3f,0x1,0x1,0x1,0x1,0xff,0x1,0x2,0x2,0x4,0x4,0x8,0x30,0xc0,0x10,0xf8,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x80,0x80,0x40,0x20,0x10,0xe,0x4,
++0x0,0x10,0xc,0x2,0x1,0x2,0xc,0x70,0x8,0x4,0x2,0x1,0x2,0xc,0x30,0xc0,0x10,0x30,0x40,0x80,0x0,0xc0,0x30,0x28,0x40,0x40,0x80,0x0,0x80,0x60,0x1e,0x4,
++0x0,0x1,0x3e,0x20,0x3f,0x20,0x20,0x27,0x24,0x24,0x24,0x24,0x44,0x44,0x84,0x3,0x10,0xf8,0x0,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x90,0x50,0x20,0x2,0x2,0xfe,
++0x0,0x0,0x3f,0x20,0x20,0x20,0x3f,0x20,0x20,0x20,0x22,0x24,0x28,0x33,0x20,0x0,0x10,0xf8,0x80,0x80,0x80,0x84,0xfe,0x80,0x80,0x40,0x40,0x20,0x20,0x12,0x8a,0x6,
++0x2,0x2,0x4,0x3f,0x20,0x28,0x24,0x22,0x21,0x22,0x24,0x28,0x30,0x20,0x3f,0x20,0x0,0x0,0x8,0xfc,0x8,0x28,0x48,0x88,0x8,0x88,0x48,0x28,0x18,0x8,0xf8,0x8,
++0x1,0x12,0x14,0x1f,0x11,0x12,0x1f,0x10,0x17,0x14,0x17,0x24,0x27,0x44,0x85,0x4,0x0,0x10,0x50,0x90,0x10,0x50,0xf0,0x10,0xd0,0x50,0xd0,0x50,0xd2,0x52,0x4e,0x80,
++0x10,0x10,0x10,0x13,0xfc,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x24,0x24,0x43,0x80,0x0,0x88,0x50,0xfe,0x20,0xf8,0x88,0xf8,0x88,0xf8,0x88,0xf8,0x8a,0x2,0xfe,0x0,
++0x20,0x20,0x24,0x7f,0x80,0x7c,0x44,0x55,0x44,0xfe,0x44,0x54,0x44,0x7e,0x5,0x1a,0x40,0x20,0x24,0xfe,0x40,0x50,0x88,0xfc,0x0,0xa8,0xa8,0xa8,0xaa,0xaa,0x2e,0x0,
++0x4,0x8,0x3f,0x24,0x3f,0x1,0x1f,0x1,0xff,0x4,0x1f,0x1,0x7f,0x1,0x1,0x1,0x0,0x8,0xfc,0x48,0xf8,0x0,0xf0,0x4,0xfe,0x40,0xf0,0x0,0xfc,0x0,0x0,0x0,
++0x12,0xa,0x12,0x2,0x3c,0x8,0x7e,0x9,0xff,0x0,0x3e,0x22,0x3e,0x14,0x7e,0x1,0x48,0x50,0x48,0x44,0x3c,0x20,0x28,0xfc,0x20,0xf8,0x88,0x88,0x50,0x20,0x50,0x8e,
++0x0,0x0,0x0,0x0,0x0,0x4,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x40,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x0,0x0,0x1,0x3d,0x25,0x25,0x25,0x25,0x25,0x3d,0x1,0x2,0xff,0x0,0x20,0xf0,0x40,0x80,0x8,0x7c,0x8,0x48,0x30,0x10,0x28,0x48,0x0,0x4,0xfe,0x0,
++0x7f,0x10,0x17,0x14,0x27,0x24,0x57,0x94,0x17,0x10,0x1e,0x2,0x7e,0x12,0x12,0x62,0xf0,0x10,0xd4,0x5e,0xc4,0x44,0xd4,0x5c,0xd0,0x10,0xf0,0x80,0xf8,0x88,0x88,0x88,
++0x0,0x8,0x8,0x8,0x8,0x9,0xe,0x18,0x68,0x8,0x8,0x8,0x8,0x8,0x7,0x0,0x0,0x0,0x0,0x20,0x70,0xa0,0x20,0x20,0x20,0x20,0xa0,0x44,0x4,0x4,0xfc,0x0,
++0x10,0x10,0x12,0x1f,0x10,0x10,0x10,0x12,0x7f,0x42,0x42,0x42,0x42,0x42,0x7e,0x42,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x42,0x3e,0x0,
++0x0,0x3f,0x0,0x0,0x0,0xff,0x4,0x4,0x4,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x10,0xf8,0x0,0x0,0x4,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x1,0x9,0x9,0x79,0x9,0x9,0x9,0x7f,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x0,0x20,0x28,0x3c,0x20,0x20,0x28,0xfc,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x1,0x1,0x7f,0x1,0x41,0x7f,0x40,0x9f,0x0,0x1,0x1,0xff,0x1,0x1,0x5,0x2,0x0,0x8,0xfc,0x0,0x0,0xfe,0x2,0xe4,0x40,0x80,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x1,0x1,0x7f,0x1,0x9,0x5,0xff,0x0,0x3f,0x20,0x27,0x24,0x27,0x20,0x3f,0x20,0x0,0x8,0xfc,0x0,0x20,0x44,0xfe,0x0,0xf8,0x8,0xc8,0x48,0xc8,0x8,0xf8,0x8,
++0x20,0x27,0x24,0xfc,0x24,0x27,0x24,0x74,0x57,0x54,0x54,0x57,0x74,0x54,0x4,0x4,0x4,0xbe,0x84,0x84,0x84,0xbc,0x84,0x0,0xbc,0x4,0x24,0xa8,0x10,0x28,0x2e,0xc4,
++0x0,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x21,0x22,0x22,0x44,0x48,0x90,0x20,0x8,0xfc,0x0,0x80,0x80,0x80,0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0xe,0x4,
++0x0,0x3f,0x21,0x21,0x2f,0x22,0x22,0x24,0x2f,0x20,0x20,0x3f,0x40,0x40,0x80,0x0,0x8,0xfc,0x0,0x8,0xfc,0x40,0x40,0x50,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x0,0x3f,0x22,0x22,0x2f,0x22,0x3f,0x20,0x27,0x24,0x24,0x27,0x44,0x44,0x87,0x4,0x8,0xfc,0x20,0x28,0xfc,0x20,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x3f,0x20,0x20,0x2f,0x21,0x3e,0x20,0x2f,0x28,0x2f,0x28,0x4f,0x48,0x80,0x0,0x8,0xfc,0xa0,0x90,0xfc,0x40,0x3c,0x8,0xfc,0x88,0xf8,0x88,0xf8,0x88,0x80,0x80,
++0x0,0x3f,0x20,0x28,0x25,0x3f,0x22,0x2a,0x2a,0x2a,0x2f,0x22,0x42,0x44,0x88,0x10,0x8,0xfc,0x20,0xa0,0x20,0xbe,0x22,0xd4,0x90,0x90,0x90,0x90,0x28,0x28,0x44,0x82,
++0x0,0x3f,0x29,0x29,0x3f,0x29,0x2f,0x29,0x2f,0x29,0x29,0x3f,0x42,0x49,0x90,0x1,0x8,0xfc,0x0,0xc,0xf0,0x40,0x44,0x7e,0x48,0x48,0x48,0xc8,0x48,0x48,0x88,0x8,
++0x0,0x3f,0x20,0x2f,0x21,0x26,0x38,0x2f,0x20,0x2f,0x29,0x29,0x49,0x49,0x89,0xf,0x8,0xfc,0xa0,0xfc,0x40,0x30,0xe,0xfc,0x80,0xfc,0x24,0xe4,0x24,0xe4,0x24,0xfc,
++0x0,0x3f,0x22,0x24,0x2d,0x36,0x24,0x24,0x24,0x2f,0x28,0x28,0x48,0x41,0x86,0x18,0x8,0xfc,0x50,0xfc,0x90,0xfc,0x90,0x9e,0x80,0xf8,0x8,0x88,0x88,0x60,0x18,0x4,
++0x0,0x7f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7f,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x7f,0x40,0x40,0x47,0x44,0x44,0x44,0x44,0x44,0x47,0x44,0x40,0x40,0x7f,0x0,0x8,0xfc,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0xe0,0x20,0x0,0x4,0xfe,0x0,
++0x0,0x7f,0x48,0x4a,0x7f,0x50,0x54,0x7f,0x44,0x44,0x7f,0x44,0x44,0x45,0x7f,0x0,0x8,0xfc,0x40,0x40,0x50,0xf8,0x50,0x50,0x50,0x50,0x54,0x54,0x8c,0x0,0xfe,0x0,
++0x0,0x7f,0x40,0x4f,0x48,0x4f,0x40,0x7f,0x40,0x4f,0x48,0x48,0x43,0x4c,0x7f,0x0,0x8,0xfc,0x80,0xf8,0x88,0xf8,0x80,0xfc,0x8,0xfc,0x88,0x88,0x60,0x18,0xfe,0x0,
++0x0,0x7f,0x40,0x4f,0x48,0x4f,0x48,0x4f,0x59,0x69,0x4f,0x49,0x49,0x48,0x7f,0x0,0x8,0xfc,0x80,0xf8,0x8,0xf8,0x0,0xfc,0x24,0x24,0xfc,0x24,0x2c,0x4,0xfe,0x0,
++0x0,0x4,0x7f,0x48,0x49,0x48,0x5f,0x54,0x55,0x55,0x5d,0x49,0x49,0x48,0x7e,0x1,0x20,0x24,0xfe,0x20,0xfc,0x20,0xfe,0x4,0xfe,0x4,0x24,0x24,0x24,0x50,0x4c,0x84,
++0x8,0x8,0xa,0x7f,0x8,0x9,0xff,0x8,0xa,0x7f,0x8,0x8,0xf,0x78,0x20,0x0,0x40,0x40,0x40,0x40,0x40,0x60,0xd0,0x48,0x44,0x44,0x40,0x40,0x40,0x40,0x40,0x40,
++0x1,0x1,0x1,0x1,0x1,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x20,0x0,0x8,0xfc,0x0,0x8,0xfc,0x8,0x88,0xc8,0x88,0x88,0x88,0x88,0x8,0xf8,0x8,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x4,0x14,0x8,
++0x0,0x41,0x21,0x11,0x12,0xa,0xa,0x4,0x4,0xa,0x9,0x11,0x10,0x20,0x40,0x0,0x4,0x4,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x84,0x84,0x14,0x8,
++0x20,0x20,0x20,0x3f,0x2a,0x4a,0x4a,0x8a,0x12,0x14,0x14,0x24,0x48,0x12,0x1,0x0,0x4,0x4,0xa4,0xe4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0x84,0x84,0x14,0x8,
++0x0,0x7f,0x1,0x2,0x4,0xb,0x30,0xc0,0x3f,0x4,0x4,0x4,0x7,0x7c,0x20,0x0,0x4,0x84,0x4,0x24,0x24,0x24,0xa4,0x24,0xa4,0x24,0x24,0x4,0x84,0x4,0x14,0x8,
++0x8,0x9,0xff,0x14,0x12,0x21,0xde,0x0,0xff,0x10,0x3f,0x1,0x1,0x11,0xa,0x4,0x4,0x4,0x84,0x24,0x24,0xa4,0xa4,0x24,0xa4,0x24,0x24,0x4,0x4,0x4,0x14,0x8,
++0x4,0x4,0x24,0x24,0x3f,0x8,0x8,0xf,0x10,0x11,0x31,0x4a,0x4,0x8,0x10,0x60,0x4,0x4,0x84,0xa4,0xa4,0xa4,0x24,0xa4,0xa4,0x24,0x24,0x4,0x4,0x4,0x14,0x8,
++0x8,0x8,0x49,0x49,0x7f,0x0,0x7f,0x1,0x1,0x3f,0x21,0x20,0x21,0x26,0x38,0x0,0x4,0x4,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x84,0x4,0x14,0x8,
++0x8,0x9,0xff,0x8,0x9,0x7f,0x49,0x49,0x7f,0x59,0x1c,0x2a,0x29,0x49,0x88,0x8,0x4,0x4,0x84,0x24,0x24,0xa4,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x4,0x14,0x8,
++0x8,0x9,0xff,0x8,0x14,0x22,0xff,0x1,0x3d,0x25,0x25,0x25,0x3d,0x21,0x5,0x2,0x4,0x4,0x84,0x24,0x24,0xa4,0xe4,0x24,0x24,0x24,0x24,0x4,0x4,0x4,0x14,0x8,
++0x8,0x49,0x29,0x2a,0x8,0x16,0x21,0xc8,0x8,0x29,0x2a,0x48,0x16,0x21,0xc0,0x0,0x4,0x4,0x4,0x24,0x24,0x24,0xa4,0xa4,0x24,0x24,0x24,0x4,0x4,0x84,0x94,0x8,
++0x8,0x44,0x7f,0x40,0xa0,0x3b,0x2a,0x4a,0x6a,0x93,0x12,0x22,0x22,0x42,0x83,0x0,0x4,0x4,0xc4,0x54,0x94,0xd4,0x94,0x94,0x94,0x94,0x14,0x4,0x44,0x84,0x14,0x8,
++0x11,0x11,0xff,0x11,0x7b,0x4a,0x4a,0x7b,0x4a,0x4a,0x7b,0x4a,0x4a,0x4a,0x9c,0x8,0x4,0x44,0xe4,0x14,0xd4,0x54,0x54,0xd4,0x54,0x54,0xd4,0x44,0x44,0x44,0xd4,0x48,
++0x0,0xff,0xa,0xa,0x7f,0x4a,0x4a,0x7f,0x0,0x7f,0x0,0xff,0x15,0x24,0x44,0xc,0x84,0xc4,0x4,0x54,0xf4,0x54,0x54,0xd4,0x14,0xd4,0x14,0xe4,0x4,0xc4,0x54,0x8,
++0x0,0x7f,0x40,0x51,0x4a,0x7f,0x44,0x55,0x55,0x55,0x5f,0x44,0x44,0x48,0x91,0x22,0x22,0xf2,0x2,0x4a,0x4a,0x7a,0x9a,0xa,0x4a,0x4a,0x4a,0x4a,0xa2,0x92,0x16,0x2,
++0x4,0x25,0x3f,0x24,0x25,0x7f,0xa4,0x25,0x3f,0x24,0x25,0x3f,0x20,0x54,0x4a,0x8a,0x4,0x4,0x84,0x24,0x24,0xa4,0x24,0x24,0xa4,0x24,0x24,0x84,0x4,0x84,0x54,0x48,
++0x11,0x7f,0x11,0x12,0x3f,0x52,0x1f,0x12,0x13,0x10,0x3f,0x11,0xa,0x4,0x1b,0x60,0x4,0xc4,0x4,0x24,0xa4,0x24,0xa4,0x24,0xa4,0x24,0xa4,0x4,0x4,0x4,0x14,0x88,
++0x4,0x3f,0x28,0x24,0x3f,0x0,0x7f,0x44,0x7f,0x44,0x7f,0x0,0xff,0x11,0x11,0x21,0x4,0x84,0x84,0x94,0x94,0x14,0xd4,0x54,0xd4,0x54,0xd4,0x4,0xc4,0x4,0x14,0x8,
++0x0,0x7f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x14,0x8,
++0x0,0x7f,0x48,0x44,0x42,0x5f,0x42,0x41,0x5f,0x48,0x48,0x48,0x4f,0x40,0x40,0x40,0x4,0xfe,0x24,0x44,0x84,0xf4,0x4,0x24,0xf4,0x4,0x4,0x44,0xe4,0x4,0x14,0x8,
++0x8,0x8,0x8,0x10,0x10,0x30,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x8,0xb,0x10,0x10,0x30,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x11,0x10,0x10,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x8,0x8,0x9,0x11,0x11,0x31,0x51,0x91,0x11,0x11,0x11,0x11,0x12,0x12,0x14,0x18,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x8,0x8,0x8,0x10,0x17,0x30,0x50,0x90,0x10,0x10,0x11,0x11,0x11,0x12,0x14,0x18,0x80,0x80,0x80,0x84,0xfe,0x84,0x84,0x84,0x84,0x84,0x4,0x4,0x4,0x48,0x28,0x10,
++0x8,0x8,0xb,0x10,0x10,0x30,0x50,0x93,0x10,0x10,0x10,0x10,0x10,0x17,0x10,0x10,0x0,0x8,0xfc,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,
++0x9,0x9,0x9,0x12,0x12,0x37,0x58,0x90,0x10,0x10,0x11,0x12,0x12,0x12,0x11,0x10,0x0,0x8,0xfc,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x8,0x8,0x8,0x10,0x10,0x30,0x51,0x92,0x14,0x18,0x11,0x12,0x14,0x17,0x10,0x10,0x20,0x20,0x40,0x40,0x80,0xa0,0x20,0x40,0x40,0x80,0x0,0x10,0x8,0xfc,0x4,0x0,
++0x8,0x8,0xf,0x10,0x10,0x32,0x52,0x92,0x12,0x14,0x10,0x11,0x11,0x12,0x14,0x18,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x4,0x4,0x4,0x28,0x10,
++0x8,0x8,0xb,0x12,0x12,0x32,0x52,0x92,0x12,0x12,0x12,0x12,0x13,0x12,0x13,0x10,0x0,0x8,0xfc,0x0,0x8,0x88,0x50,0x50,0x20,0x20,0x50,0x88,0x8,0x4,0xfe,0x0,
++0x8,0xa,0xa,0x12,0x12,0x32,0x53,0x92,0x12,0x12,0x12,0x12,0x12,0x13,0x12,0x10,0x20,0x20,0x20,0x20,0x22,0x24,0xb8,0x20,0x20,0x20,0x20,0x20,0x20,0xa2,0x22,0x1e,
++0x8,0x8,0xb,0x10,0x11,0x31,0x53,0x90,0x10,0x10,0x10,0x11,0x12,0x14,0x10,0x10,0x0,0x8,0xfc,0x10,0x10,0x14,0xfe,0x30,0x30,0x50,0x90,0x10,0x10,0x10,0x50,0x20,
++0x8,0x8,0xf,0x11,0x11,0x31,0x51,0x91,0x11,0x12,0x12,0x12,0x13,0x16,0x10,0x10,0x0,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x90,0x50,0x30,0x10,0xd2,0x12,0xe,0x0,
++0x9,0x9,0xa,0x13,0x14,0x38,0x50,0x90,0x1f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x8,0xfc,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x9,0x9,0x9,0x11,0x11,0x31,0x51,0x9f,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x0,0x8,0x10,0x20,0x40,0x80,0x4,0xfe,0x40,0x40,0x20,0x10,0x8,0x46,0x84,0x0,
++0x8,0x8,0x8,0x10,0x11,0x32,0x54,0x99,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,0xf0,0x10,0x10,0x50,0x20,0x4,0x4,0xfc,0x0,
++0x8,0x8,0x8,0x17,0x10,0x30,0x51,0x91,0x11,0x11,0x11,0x11,0x12,0x12,0x14,0x18,0x80,0x40,0x44,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x8,0x8,0x8,0x13,0x12,0x34,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x1f,0x10,0x10,0x80,0x40,0x40,0xfc,0x4,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,
++0x8,0xb,0x8,0x10,0x17,0x30,0x50,0x9f,0x11,0x11,0x12,0x11,0x10,0x10,0x11,0x16,0x10,0xf8,0x0,0x8,0xfc,0x80,0x84,0xfe,0x10,0x10,0x10,0xa0,0x40,0xa0,0x18,0x4,
++0x8,0x8,0x8,0x10,0x10,0x30,0x50,0x9f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x80,0x80,0x90,0xf8,0x80,0x80,0x84,0xfe,0x80,0xc0,0xa0,0x98,0x88,0x80,0x80,0x80,
++0x8,0x8,0x8,0x10,0x15,0x35,0x56,0x94,0x14,0x14,0x14,0x14,0x14,0x10,0x11,0x16,0x80,0x80,0x80,0x84,0xfe,0x8,0x88,0x88,0x88,0x50,0x50,0x20,0x50,0x90,0xe,0x4,
++0x8,0x8,0xa,0x12,0x13,0x34,0x58,0x90,0x1f,0x10,0x10,0x10,0x11,0x11,0x12,0x14,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x10,0xe,0x4,
++0x9,0x9,0x9,0x13,0x12,0x34,0x5b,0x92,0x12,0x12,0x12,0x13,0x12,0x10,0x10,0x10,0x0,0x0,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0xe4,0x24,0x44,0x28,0x10,
++0x9,0x9,0x9,0x12,0x15,0x38,0x50,0x90,0x11,0x12,0x1c,0x10,0x11,0x10,0x10,0x10,0x0,0x0,0xf8,0x8,0x10,0xa0,0x40,0xa0,0x10,0x8e,0x64,0x20,0x80,0x60,0x30,0x10,
++0x8,0x8,0x8,0x13,0x12,0x35,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x80,0x40,0x40,0xfc,0x4,0x8,0x0,0x10,0x30,0x40,0x80,0x0,0x4,0x4,0xfc,0x0,
++0x8,0xb,0xa,0x12,0x12,0x33,0x52,0x92,0x12,0x12,0x12,0x12,0x14,0x14,0x18,0x10,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x80,0x88,0x98,0xa0,0xc0,0x82,0x82,0x7e,0x0,
++0x14,0x14,0x14,0x24,0x3f,0x64,0xa4,0x24,0x24,0x24,0x24,0x24,0x28,0x28,0x32,0x21,0x0,0x0,0x4,0xbe,0xe4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xbc,0xa4,0x0,
++0x8,0x8,0x8,0x1f,0x10,0x30,0x57,0x90,0x10,0x13,0x12,0x12,0x12,0x12,0x13,0x12,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0xf,0x9,0x11,0x11,0x31,0x51,0x91,0x11,0x11,0x11,0x17,0x10,0x10,0x10,0x10,0x4,0xfe,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x7e,0x88,0x8,0x8,0x8,0x8,
++0x8,0x8,0x8,0x17,0x11,0x31,0x53,0x95,0x19,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x80,0x80,0x84,0xfe,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x28,0x10,
++0x8,0x8,0x8,0x1f,0x10,0x31,0x52,0x9c,0x13,0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0x44,0xfe,0xa0,0x10,0xee,0x4,0xf8,0x0,0xf8,0x8,0x8,0x90,0x50,0x20,
++0x8,0xb,0xa,0x12,0x12,0x33,0x50,0x92,0x12,0x12,0x12,0x12,0x12,0x14,0x18,0x10,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x48,0x48,0x48,0x48,0x48,0x4a,0x4a,0x4e,0x0,
++0x8,0xa,0xa,0x13,0x14,0x38,0x50,0x9f,0x10,0x10,0x11,0x12,0x14,0x18,0x10,0x10,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0xc0,0xe0,0x50,0x48,0x4e,0x44,0x40,0x40,
++0x8,0x9,0x9,0x12,0x14,0x3b,0x52,0x92,0x13,0x12,0x12,0x13,0x12,0x12,0x12,0x12,0x40,0x40,0x20,0x10,0xe,0xf4,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x8,0x8,0x8,0x14,0x12,0x32,0x50,0x91,0x12,0x14,0x10,0x11,0x11,0x12,0x14,0x18,0xa0,0xa0,0xa0,0xa4,0xac,0xb0,0xa0,0xb0,0xac,0xa4,0xa0,0x20,0x22,0x22,0x1e,0x0,
++0x8,0x8,0xf,0x11,0x10,0x30,0x50,0x93,0x1d,0x11,0x11,0x11,0x11,0x11,0x12,0x14,0x40,0x28,0xfc,0x10,0xa0,0x40,0xb0,0xe,0x14,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x8,0x8,0x8,0x17,0x11,0x31,0x52,0x95,0x11,0x10,0x10,0x10,0x10,0x11,0x12,0x1c,0x80,0x40,0x48,0xfc,0x20,0x10,0xc,0x14,0x10,0xa0,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x8,0x8,0x8,0x17,0x14,0x38,0x51,0x91,0x13,0x15,0x19,0x11,0x11,0x11,0x11,0x11,0x40,0x40,0x40,0xfe,0x82,0x84,0x40,0x48,0x30,0x20,0x10,0x10,0x8,0x4e,0x84,0x0,
++0x8,0x8,0x9,0x12,0x17,0x32,0x52,0x93,0x14,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x80,0x80,0x10,0x8,0xfc,0x44,0x50,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x8,0x8,0xf,0x10,0x17,0x31,0x5f,0x91,0x12,0x13,0x15,0x18,0x10,0x10,0x10,0x10,0x80,0x88,0xfc,0x80,0xf8,0x0,0xfe,0x10,0x14,0xfe,0x10,0x90,0x90,0x10,0x50,0x20,
++0x8,0xf,0x8,0x14,0x12,0x30,0x57,0x94,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x18,0x8,0xfc,0xa0,0xa4,0xa8,0xa0,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x8,0xf,0x10,0x10,0x37,0x54,0x94,0x16,0x15,0x14,0x14,0x14,0x14,0x14,0x15,0x0,0x4,0xfe,0x0,0x4,0xbe,0xa4,0xa4,0xb4,0xac,0xa4,0xa4,0xa4,0xa4,0xa4,0xac,
++0x8,0x8,0x8,0x10,0x17,0x30,0x54,0x92,0x12,0x10,0x11,0x12,0x14,0x10,0x11,0x10,0x40,0x50,0x48,0x48,0xfe,0x40,0x48,0x50,0x60,0xd0,0x50,0x48,0x4e,0x44,0x40,0x80,
++0x8,0x8,0xf,0x14,0x14,0x37,0x54,0x94,0x17,0x14,0x10,0x17,0x10,0x10,0x1f,0x10,0x0,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x40,0xfc,0x40,0x44,0xfe,0x0,
++0x8,0xb,0xa,0x12,0x12,0x33,0x50,0x97,0x10,0x10,0x1f,0x10,0x10,0x11,0x12,0x1c,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0xfc,0x40,0x44,0xfe,0xa0,0xa0,0x10,0xe,0x4,
++0x8,0x8,0xb,0x12,0x13,0x32,0x53,0x90,0x1f,0x11,0x11,0x10,0x10,0x10,0x10,0x10,0x40,0x48,0xfc,0x48,0xf8,0x48,0xf8,0x0,0xfe,0x0,0xf8,0x8,0x8,0x88,0x50,0x20,
++0x8,0xb,0x8,0x10,0x10,0x37,0x54,0x94,0x17,0x14,0x14,0x17,0x14,0x14,0x14,0x14,0x0,0xf8,0x10,0xa0,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x44,0x54,0x8,
++0x8,0x8,0x9,0x12,0x17,0x31,0x51,0x91,0x12,0x14,0x1f,0x10,0x10,0x10,0x11,0x16,0x80,0x80,0x10,0x8,0xfc,0x4,0x0,0xf8,0x40,0x44,0xfe,0x40,0xa0,0x90,0xe,0x4,
++0x8,0x8,0xf,0x10,0x13,0x30,0x5f,0x91,0x12,0x15,0x18,0x10,0x17,0x10,0x10,0x10,0x40,0x48,0xfc,0x40,0xf8,0x80,0xfe,0x10,0x48,0xfe,0x44,0x40,0xfc,0x40,0x40,0x40,
++0x8,0x8,0xf,0x10,0x13,0x30,0x5f,0x90,0x13,0x12,0x13,0x12,0x13,0x12,0x12,0x12,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x28,0x10,
++0x9,0x9,0xf,0x11,0x11,0x30,0x5f,0x91,0x11,0x12,0x13,0x16,0x1a,0x12,0x13,0x12,0x10,0x10,0xfc,0x10,0x90,0x84,0xfe,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0x8,0x17,0x10,0x30,0x50,0x97,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0xa0,0xa0,0xa4,0xbe,0xa0,0xa0,0xa8,0xbc,0xa0,0xa0,0xa4,0xbe,0xa0,0xa0,0xa0,0xa0,
++0x8,0x8,0x8,0x10,0x13,0x32,0x53,0x92,0x13,0x12,0x10,0x1f,0x10,0x10,0x10,0x10,0x40,0x48,0x7c,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x11,0x11,0x11,0x29,0x2a,0x6c,0xa8,0x29,0x2e,0x28,0x2f,0x28,0x20,0x20,0x21,0x26,0x0,0x8,0xfc,0x10,0xa0,0x40,0xb0,0x4e,0x50,0x48,0xfc,0x40,0xa0,0x90,0xe,0x4,
++0x8,0xf,0xc,0x14,0x17,0x34,0x54,0x97,0x14,0x10,0x1f,0x10,0x11,0x12,0x1c,0x10,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x40,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x8,0xb,0x8,0x10,0x17,0x31,0x52,0x94,0x10,0x1f,0x11,0x12,0x11,0x10,0x11,0x16,0x18,0xe0,0x40,0x48,0xfc,0x50,0x48,0x46,0x80,0xfe,0x10,0x10,0xa0,0x40,0xb0,0x8,
++0x8,0x9,0xb,0x12,0x12,0x33,0x52,0x92,0x13,0x10,0x11,0x1f,0x10,0x10,0x10,0x10,0x80,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x8,0xf,0xc,0x14,0x17,0x34,0x54,0x95,0x14,0x15,0x15,0x15,0x15,0x14,0x14,0x18,0x4,0xfe,0x44,0x54,0xfc,0x44,0x44,0xf4,0x4,0xf4,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x8,0x8,0xb,0x12,0x14,0x33,0x52,0x92,0x13,0x12,0x13,0x12,0x12,0x12,0x13,0x12,0x80,0x40,0xfe,0x2,0x4,0xf8,0x8,0x8,0xf8,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0x8,0x17,0x14,0x39,0x52,0x94,0x10,0x13,0x10,0x10,0x10,0x10,0x1f,0x10,0x80,0x40,0x40,0xfe,0x2,0x14,0x8,0x4,0x10,0xf8,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x8,0xb,0xa,0x12,0x13,0x32,0x52,0x93,0x12,0x12,0x13,0x13,0x15,0x15,0x19,0x11,0x4,0xfe,0x4,0x4,0xfc,0x24,0x20,0xfe,0x20,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x8,0xf,0x10,0x11,0x3f,0x51,0x90,0x13,0x12,0x12,0x12,0x12,0x10,0x11,0x16,0x40,0x48,0xfc,0x40,0x54,0xfe,0x10,0x8,0xfc,0x8,0x48,0x48,0x48,0xb0,0xc,0x4,
++0x8,0xf,0xc,0x15,0x15,0x35,0x55,0x95,0x14,0x17,0x14,0x14,0x14,0x14,0x17,0x10,0x4,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x40,0xfe,0x48,0x90,0x70,0x88,0xfe,0x0,
++0xa,0xa,0xb,0x12,0x12,0x33,0x56,0x90,0x13,0x12,0x12,0x13,0x12,0x12,0x13,0x12,0x20,0x24,0xac,0x30,0xa2,0x22,0x5e,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x8,0xb,0xa,0x13,0x12,0x33,0x51,0x91,0x13,0x14,0x1a,0x12,0x12,0x13,0x10,0x10,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0x4,0xfe,0x44,0x44,0xa4,0x4,0xe4,0x14,0x8,
++0x8,0xb,0xa,0x12,0x13,0x32,0x52,0x93,0x10,0x1f,0x12,0x12,0x12,0x12,0x13,0x12,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x4,0xfe,0x88,0x50,0x20,0x90,0xe,0x4,
++0x9,0x9,0x9,0x12,0x13,0x34,0x59,0x92,0x14,0x11,0x10,0x15,0x15,0x19,0x10,0x10,0x0,0x4,0xfe,0xa4,0xa4,0xf4,0x2c,0x44,0x94,0x8,0x40,0x24,0x22,0xa,0xf8,0x0,
++0x8,0xa,0x9,0x10,0x17,0x30,0x51,0x92,0x10,0x1f,0x11,0x12,0x11,0x10,0x11,0x16,0x40,0x48,0x50,0x40,0xfc,0xe0,0x50,0x4c,0x80,0xfe,0x10,0x10,0x20,0xc0,0x30,0x8,
++0x10,0x14,0x12,0x20,0x2f,0x68,0xb7,0x24,0x24,0x24,0x27,0x25,0x21,0x21,0x22,0x2c,0x80,0x90,0xa0,0x80,0xfc,0x4,0xf8,0x10,0x10,0x10,0xf0,0x50,0x40,0x44,0x44,0x3c,
++0x8,0x8,0xb,0x12,0x14,0x31,0x51,0x91,0x11,0x11,0x11,0x1f,0x10,0x10,0x11,0x16,0x80,0x40,0xfe,0x2,0x34,0xc0,0x8,0xfc,0x10,0x10,0x14,0xfe,0x0,0x90,0xc,0x4,
++0x10,0x10,0x10,0x2f,0x21,0x71,0xaa,0x2a,0x24,0x24,0x2a,0x29,0x31,0x20,0x20,0x20,0x20,0x30,0x28,0x7e,0x48,0xc8,0x7e,0x48,0x48,0x7e,0x48,0x48,0x48,0x7e,0x40,0x40,
++0xa,0xa,0xb,0x14,0x1a,0x35,0x53,0x92,0x14,0x18,0x17,0x11,0x12,0x14,0x11,0x10,0x0,0x20,0xbc,0xa4,0xa8,0x10,0x10,0xe8,0x6,0x0,0xfc,0x50,0x4c,0x44,0x40,0x80,
++0x8,0xf,0x8,0x13,0x10,0x33,0x52,0x93,0x11,0x1f,0x10,0x13,0x12,0x12,0x13,0x12,0x48,0xfc,0x40,0xf8,0x0,0xf8,0x8,0xf8,0x10,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,
++0x15,0x15,0x1f,0x25,0x25,0x68,0xaf,0x28,0x30,0x2e,0x2a,0x2a,0x2e,0x20,0x22,0x21,0x20,0x20,0xa0,0x24,0x7e,0x84,0xc4,0xc4,0xa8,0xa8,0xa8,0x90,0xa8,0xa8,0xc6,0x4,
++0x11,0x1f,0x1a,0x2a,0x2f,0x62,0xa6,0x2a,0x33,0x20,0x27,0x24,0x27,0x24,0x27,0x24,0x4,0xbe,0x28,0x28,0xbe,0x8,0x18,0xaa,0x4e,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x9,0x9,0x9,0x12,0x16,0x3b,0x52,0x92,0x13,0x12,0x12,0x13,0x12,0x15,0x14,0x18,0x40,0x24,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,0x24,0x92,0x2,
++0x14,0x12,0x12,0x3f,0x20,0x6f,0xa8,0x28,0x28,0x2f,0x22,0x2b,0x2a,0x32,0x26,0x20,0x10,0x10,0x98,0xd4,0x10,0xfe,0x90,0x90,0x98,0x98,0x28,0x28,0xa8,0xca,0x4a,0x86,
++0x8,0xf,0x9,0x10,0x1f,0x30,0x57,0x94,0x17,0x14,0x17,0x10,0x17,0x10,0x1f,0x10,0x40,0xfc,0x10,0xa4,0xfe,0x0,0xfc,0x44,0xfc,0x44,0xfc,0x40,0xfc,0x40,0xfe,0x0,
++0x8,0xf,0xc,0x14,0x17,0x30,0x5f,0x90,0x13,0x12,0x13,0x10,0x11,0x13,0x1d,0x11,0x4,0xfe,0xa4,0xa4,0xfc,0x0,0xfe,0x8,0xfc,0x8,0xf8,0xc4,0x28,0x10,0x8e,0x4,
++0x9,0x9,0xa,0x17,0x14,0x35,0x57,0x94,0x15,0x14,0x15,0x14,0x15,0x15,0x19,0x11,0x0,0xf8,0x10,0xfe,0x88,0x24,0xfe,0x0,0xfc,0x0,0xfc,0x0,0xfc,0x4,0xfc,0x4,
++0x1,0x1,0x2,0x4,0x8,0x10,0x20,0xc0,0x1f,0x1,0x1,0x1,0x1,0x1,0x7f,0x0,0x0,0x0,0x80,0x40,0x20,0x10,0xe,0x24,0xf0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,
++0x1,0x1,0x2,0x4,0x9,0x31,0xc1,0x3d,0x5,0x9,0x9,0x11,0x21,0x41,0x5,0x2,0x0,0x0,0x80,0x40,0x30,0xe,0x4,0x90,0x60,0x40,0x20,0x10,0xe,0x4,0x0,0x0,
++0x1,0x1,0x2,0x4,0x8,0x30,0xcf,0x0,0x0,0x7f,0x1,0x9,0x19,0x21,0x45,0x2,0x0,0x0,0x80,0x40,0x30,0x4e,0xe4,0x0,0x8,0xfc,0x0,0x20,0x18,0xc,0x4,0x0,
++0x1,0x1,0x2,0x4,0x8,0x10,0x2f,0xc0,0x12,0x9,0x9,0x9,0x8,0x0,0xff,0x0,0x0,0x0,0x80,0x40,0x20,0x50,0xee,0x4,0x10,0x10,0x20,0x20,0x40,0x84,0xfe,0x0,
++0x10,0x11,0x11,0x29,0x29,0x45,0x95,0x11,0x11,0x29,0x29,0x45,0x45,0x81,0xf,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xfe,0x0,
++0x1,0x1,0x2,0xc,0x37,0xc0,0x3b,0x2a,0x3b,0x0,0x3f,0x24,0x3f,0x24,0x24,0x20,0x0,0x0,0x80,0x60,0xd8,0x6,0xb8,0xa8,0xb8,0x0,0xf8,0x48,0xf8,0x48,0x48,0x18,
++0x6,0x1,0x2,0xc,0x31,0xc1,0x1,0x3d,0x5,0x9,0x9,0x11,0x21,0x41,0x5,0x2,0x0,0x0,0x80,0x60,0x18,0x6,0x0,0x90,0x60,0x40,0x20,0x10,0xe,0x4,0x0,0x0,
++0x6,0x1,0x2,0xc,0x31,0xc1,0x11,0x9,0x1,0x7f,0x3,0x5,0x9,0x11,0x61,0x1,0x0,0x0,0x80,0x60,0x18,0x6,0x10,0x20,0x8,0xfc,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x4,0x4,0x8,0x8,0x10,0x20,0x5f,0x88,0x8,0x1f,0x0,0x0,0x0,0x2,0x1,0x0,0x40,0x40,0x20,0x20,0x10,0x58,0xee,0x4,0x20,0xf0,0x20,0x20,0x20,0x20,0x40,0x80,
++0x0,0x3e,0x22,0x22,0x3e,0x20,0x22,0x1e,0x4,0x3f,0x4,0x4,0xff,0x4,0x18,0x20,0x8,0xfc,0x88,0x88,0xf8,0x80,0x84,0x7c,0x40,0xf8,0x40,0x44,0xfe,0x40,0x30,0x8,
++0x22,0x11,0x7f,0x44,0x9f,0x4,0xff,0x1,0x1f,0x11,0x1f,0x11,0x1f,0x4,0x18,0x20,0x8,0x10,0xfe,0x42,0xf4,0x40,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x40,0x30,0x8,
++0x0,0x44,0x28,0xff,0x10,0x20,0x7d,0x45,0x45,0x7d,0x45,0x7c,0x44,0x47,0x7c,0x44,0x10,0x18,0x14,0xfe,0x10,0x10,0xd4,0x54,0x54,0x54,0xd4,0x18,0xd2,0x2a,0x46,0x82,
++0x44,0x25,0x29,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7d,0x12,0xfe,0x12,0x14,0x18,0x10,0x4,0xfe,0x4,0x4,0xfc,0x48,0xfc,0x48,0x48,0xfe,0xa4,0xa8,0x90,0x88,0xc6,0x80,
++0x4,0xff,0x1,0x17,0x54,0x5f,0x54,0x57,0x5c,0xe7,0x14,0x27,0x4c,0x13,0xc,0x70,0x40,0xfe,0x0,0xdc,0x54,0xd4,0x5c,0xd0,0x52,0xce,0x10,0xc8,0x44,0x80,0x60,0x1c,
++0x10,0x10,0x1f,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x10,0x10,0x1f,0x22,0x42,0xbf,0x2,0x3f,0x22,0x3f,0x22,0x3f,0x22,0x22,0x22,0x0,0x0,0x4,0xfe,0x84,0x44,0xf4,0x4,0xe4,0x24,0xe4,0x24,0xe4,0x24,0x64,0x34,0x8,
++0x10,0x10,0x1f,0x24,0x42,0xbf,0x0,0x1f,0x0,0x1f,0x0,0x1f,0x10,0x10,0x1f,0x0,0x0,0x4,0xfe,0x4,0x44,0xe4,0x4,0xc4,0x4,0xc4,0x4,0xc4,0x44,0x44,0xd4,0x8,
++0x10,0x10,0x1f,0x20,0x7f,0x80,0x1f,0x10,0x1f,0x0,0x3f,0x22,0x3f,0x22,0x3f,0x0,0x0,0x4,0xfe,0x44,0xe4,0x4,0xc4,0x44,0xc4,0x4,0xe4,0x24,0xe4,0x24,0xf4,0x8,
++0x2,0x4,0x3f,0x20,0x24,0x22,0x20,0x3f,0x0,0xf,0x8,0x8,0x8,0x10,0x20,0xc0,0x0,0x20,0xf0,0x20,0x20,0xa0,0x48,0xfc,0x8,0xa8,0x90,0x80,0x80,0x82,0x82,0x7e,
++0x0,0x3f,0x20,0x20,0x2f,0x22,0x22,0x27,0x24,0x2c,0x32,0x21,0x22,0x44,0x48,0x80,0x10,0xf8,0x10,0x90,0xd0,0x10,0x10,0xd0,0x50,0x50,0x90,0x10,0x12,0x12,0xa,0x4,
++0x0,0x3c,0x24,0x24,0x27,0x20,0x20,0x3f,0x24,0x4,0x4,0x4,0x8,0x10,0x20,0x40,0x8,0x7c,0x48,0x48,0xc8,0x8,0x8,0xf8,0x48,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x0,0x0,0x0,0x2,0x1,0x1,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x2,0x1,0xff,0x8,0x12,0x22,0x44,0x8,0x1f,0x4,0x4,0x4,0x4,0x8,0x10,0x60,0x0,0x4,0xfe,0x20,0x18,0xc,0x44,0x20,0xf0,0x90,0x80,0x80,0x84,0x84,0x7c,0x0,
++0x1,0xff,0x0,0x1f,0x10,0x1f,0x40,0x7f,0x40,0x9f,0x1,0x1,0x3f,0x1,0x1,0x0,0x0,0xfe,0x0,0xf0,0x10,0xf0,0x0,0xfe,0x12,0xe4,0x0,0xf8,0x0,0x4,0x4,0xfc,
++0x2,0x1,0xff,0x8,0x12,0x22,0x44,0x1f,0x2,0x6,0xd,0x14,0x24,0xc5,0x6,0x4,0x0,0x4,0xfe,0x20,0x18,0x4c,0x24,0xf0,0x0,0x18,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x1,0xff,0x0,0x1f,0x2,0x1,0x7f,0x4,0x8,0x32,0x1,0x2,0xc,0x15,0x66,0x4,0x0,0xfe,0x0,0xf0,0x40,0x80,0xfc,0x84,0x88,0x80,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x1,0xff,0x8,0x8,0x7e,0x8,0xe,0x78,0x9,0x1a,0x1,0x2,0xc,0x15,0x66,0x4,0x0,0xfe,0x40,0x48,0xfc,0x48,0xc8,0xa8,0xa,0x6,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x1,0xff,0x4,0x14,0x24,0x45,0x1,0x3f,0x22,0x24,0x29,0x22,0x24,0x28,0x20,0x20,0x0,0xfe,0x40,0x50,0x4c,0x44,0x0,0xf8,0x88,0x68,0x28,0x88,0x68,0x28,0x28,0x10,
++0x1,0xff,0x2,0x1c,0x10,0x10,0x1c,0x10,0x10,0x1f,0x5,0x8,0x18,0x2a,0xcc,0x8,0x0,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x8,0x90,0x60,0x30,0xe,0x4,
++0x1,0xff,0x0,0x3f,0x24,0x27,0x24,0x3f,0x0,0x3f,0x0,0xff,0x9,0x11,0x21,0x3,0x0,0xfe,0x8,0xfc,0x48,0xc8,0x48,0xf8,0x0,0xf8,0x0,0xfe,0x20,0x18,0x8,0x0,
++0x1,0xff,0x20,0x3f,0x0,0x1f,0x10,0x1f,0x79,0x49,0x7f,0x4a,0x7a,0x49,0x4e,0x98,0x0,0xfe,0x0,0xf8,0x0,0xf0,0x10,0xf0,0x38,0x28,0xe8,0xb8,0xa8,0x2a,0xea,0x46,
++0x1,0xff,0x20,0x3f,0x0,0x1f,0x10,0x1f,0x71,0x57,0x75,0x57,0x71,0x51,0x57,0xb0,0x0,0xfe,0x0,0xf8,0x0,0xf0,0x10,0xf0,0x1c,0xd4,0x54,0xdc,0x14,0x54,0xd4,0x22,
++0x1,0xff,0x20,0x3f,0x0,0x1f,0x10,0x1f,0x7a,0x4f,0x79,0x4f,0x79,0x4f,0x49,0x99,0x0,0xfe,0x0,0xf8,0x0,0xf0,0x10,0xf0,0xb8,0xe8,0x28,0xe8,0x38,0xea,0x2a,0x46,
++0x0,0x40,0x20,0x10,0x10,0x0,0x0,0x10,0x20,0x20,0xe0,0x20,0x20,0x20,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x4f,0x22,0x12,0x12,0x3,0x2,0x12,0x22,0x22,0xe7,0x20,0x20,0x20,0x2f,0x0,0x8,0xfc,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x20,0x20,0x44,0xfe,0x0,
++0x0,0x4f,0x22,0x12,0x13,0x2,0x14,0x14,0x26,0x29,0xe0,0x21,0x22,0x24,0x28,0x0,0x44,0xe4,0x4,0x14,0xd4,0x54,0x54,0x54,0x54,0x94,0x94,0x14,0x4,0x4,0x14,0x8,
++0x0,0x42,0x22,0x13,0x12,0x4,0x0,0x17,0x21,0x21,0xe1,0x21,0x22,0x22,0x24,0x8,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x2,0x42,0x22,0x22,0x1f,0x2,0x26,0x27,0x2a,0x4a,0xd2,0x42,0x42,0x42,0x42,0x2,0x0,0x28,0x28,0x28,0xc4,0x44,0x92,0x10,0x90,0xa0,0x20,0x48,0x44,0xfe,0x2,0x0,
++0x0,0x0,0x0,0x0,0x40,0x7f,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x2,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x7f,0x40,0x80,0x3f,0x6,0x9,0x1a,0x74,0xb,0x16,0x64,0x8,0x10,0x62,0x1,0x0,0xfe,0x2,0x24,0xf0,0x0,0x8,0x90,0xe0,0xa0,0xa0,0x90,0x8e,0x84,0x80,0x0,
++0x40,0x7f,0x40,0x80,0x1f,0x10,0x1f,0x10,0x1f,0x12,0x1,0xff,0x0,0x8,0x10,0x20,0x0,0xfe,0x2,0x14,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x4,0xfe,0x0,0x20,0x18,0x8,
++0x0,0x40,0x30,0x10,0x0,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x14,0x18,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x47,0x30,0x10,0x0,0x0,0xf0,0x17,0x10,0x10,0x10,0x10,0x14,0x18,0x10,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x40,0x37,0x10,0x0,0x0,0xf0,0x10,0x10,0x10,0x10,0x12,0x14,0x1f,0x10,0x0,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,0x0,
++0x0,0x40,0x20,0x20,0x4,0x4,0xe4,0x24,0x24,0x24,0x24,0x24,0x2c,0x37,0x20,0x0,0x40,0x40,0x40,0x40,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xfc,0x4,0x0,
++0x0,0x47,0x24,0x24,0x5,0x4,0xe4,0x24,0x24,0x24,0x25,0x26,0x2c,0x34,0x27,0x0,0x8,0xfc,0x0,0x4,0x4,0x88,0x50,0x20,0x50,0x88,0xc,0x4,0x0,0x4,0xfe,0x0,
++0x0,0x43,0x32,0x12,0x2,0x3,0xf2,0x12,0x12,0x13,0x12,0x12,0x16,0x1a,0x13,0x0,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x40,0x20,0x20,0x7,0x4,0xe4,0x24,0x24,0x24,0x25,0x25,0x2e,0x34,0x24,0x4,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0xa4,0xa4,0x14,0x14,0xc,0x4,0x14,0x8,
++0x0,0x40,0x30,0x10,0x7,0x0,0xf0,0x10,0x13,0x12,0x12,0x12,0x16,0x1a,0x13,0x2,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x37,0x10,0x0,0x3,0xf2,0x12,0x12,0x12,0x13,0x10,0x14,0x18,0x10,0x0,0x0,0x4,0xfe,0x8,0x48,0xe8,0x48,0x48,0x48,0x48,0xc8,0x8,0x8,0x8,0x28,0x10,
++0x0,0x40,0x27,0x24,0x4,0x4,0xe7,0x24,0x24,0x24,0x24,0x24,0x2d,0x36,0x24,0x0,0x10,0x78,0xc0,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x20,0xa0,0x12,0x92,0x4a,0x6,
++0x0,0x47,0x30,0x10,0x0,0x1,0xf1,0x12,0x14,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x4,0xfe,0x84,0x84,0x84,0x4,0x14,0x8,0x0,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x40,0x22,0x22,0x2,0x2,0xe2,0x23,0x20,0x24,0x24,0x24,0x2c,0x34,0x27,0x0,0x40,0x40,0x48,0x48,0x48,0x48,0x48,0xf8,0x40,0x44,0x44,0x44,0x44,0x44,0xfc,0x4,
++0x0,0x40,0x30,0x11,0x2,0x7,0xf0,0x10,0x13,0x12,0x12,0x12,0x16,0x1a,0x13,0x2,0x40,0x40,0x80,0x8,0x4,0xfe,0x2,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x43,0x32,0x12,0x3,0x2,0xf2,0x12,0x12,0x12,0x12,0x13,0x16,0x1a,0x13,0x0,0x8,0xfc,0x0,0x8,0xfc,0x20,0x20,0xf8,0x20,0x20,0x28,0xfc,0x0,0x4,0xfe,0x0,
++0x0,0x40,0x37,0x10,0x0,0x3,0xf0,0x10,0x1f,0x10,0x10,0x15,0x19,0x12,0x4,0x0,0x40,0x48,0xfc,0x40,0x50,0xf8,0x40,0x44,0xfe,0xc0,0xe0,0x50,0x48,0x4e,0x44,0x40,
++0x0,0x40,0x33,0x10,0x0,0x0,0xf7,0x10,0x10,0x10,0x13,0x10,0x14,0x18,0x17,0x0,0x40,0x50,0xf8,0x40,0x40,0x48,0xfc,0x0,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x40,0x30,0x1f,0x0,0x0,0xf7,0x10,0x10,0x13,0x12,0x12,0x16,0x1a,0x13,0x2,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x30,0x17,0x1,0x1,0xf1,0x12,0x12,0x14,0x19,0x10,0x14,0x18,0x11,0x2,0x80,0x80,0x84,0xfe,0x0,0x20,0x20,0xa4,0xac,0xb0,0x20,0x50,0x50,0x88,0xe,0x4,
++0x0,0x42,0x32,0x13,0x4,0x0,0xf0,0x1f,0x11,0x11,0x11,0x15,0x1a,0x12,0x4,0x8,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x0,0x40,0x33,0x12,0x2,0x3,0xf2,0x12,0x12,0x12,0x12,0x16,0x1a,0x12,0x4,0x8,0x8,0x1c,0xe0,0x0,0x4,0xfe,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x0,0x40,0x30,0x11,0x2,0xc,0xf3,0x10,0x10,0x10,0x13,0x10,0x14,0x18,0x17,0x0,0x40,0x40,0xa0,0x10,0xe,0x4,0xf8,0x40,0x40,0x50,0xf8,0x40,0x40,0x48,0xfc,0x0,
++0x1,0x41,0x31,0x12,0x4,0xb,0xf0,0x10,0x1f,0x10,0x10,0x13,0x14,0x18,0x11,0x0,0x0,0x0,0xf0,0x20,0x48,0xfc,0x48,0x48,0xfe,0x48,0x48,0xf8,0x48,0x40,0x40,0x80,
++0x0,0x47,0x34,0x18,0x7,0x1,0xf1,0x12,0x17,0x10,0x10,0x1f,0x10,0x14,0x18,0x0,0x0,0xfc,0x84,0x88,0xfc,0x0,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x0,0x40,0x37,0x10,0x0,0x4,0xf2,0x12,0x10,0x11,0x16,0x10,0x14,0x18,0x12,0x1,0x0,0x4,0xbe,0x84,0x84,0xa4,0x94,0x94,0x84,0x8c,0xb4,0x84,0x84,0x84,0x94,0x8,
++0x0,0x42,0x31,0x11,0x0,0x3,0xf2,0x12,0x13,0x12,0x12,0x13,0x16,0x1a,0x12,0x2,0x40,0x48,0x58,0x60,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x42,0x32,0x13,0x4,0x8,0xf7,0x10,0x10,0x13,0x12,0x12,0x16,0x1a,0x13,0x2,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x45,0x32,0x15,0x9,0x1,0xf1,0x13,0x15,0x19,0x11,0x11,0x15,0x19,0x15,0x2,0x80,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x7c,0x10,0x10,0x10,0x10,0x14,0xfe,0x0,
++0x0,0x40,0x31,0x12,0x7,0x1,0xf1,0x11,0x12,0x10,0x1f,0x10,0x14,0x18,0x11,0x6,0x80,0x80,0x10,0x8,0xfc,0x4,0x10,0xf8,0x40,0x44,0xfe,0x40,0xa0,0x90,0xe,0x4,
++0x0,0x5f,0x24,0x24,0x7,0x4,0xe4,0x27,0x24,0x24,0x24,0x2f,0x28,0x30,0x20,0x0,0x4,0xfe,0x80,0x80,0xbe,0x82,0xa2,0x94,0x94,0x94,0x88,0xc8,0x94,0x94,0xa2,0xc0,
++0x0,0x4f,0x20,0x21,0x3,0x4,0xe8,0x25,0x22,0x26,0x29,0x21,0x2a,0x34,0x21,0x0,0x4,0xfe,0x80,0x0,0x4,0x8c,0xd0,0x60,0x60,0x50,0xd0,0x48,0x4e,0x44,0x40,0x80,
++0x0,0x43,0x30,0x10,0x7,0x1,0xf2,0x14,0x10,0x1f,0x11,0x11,0x14,0x18,0x11,0x6,0x3c,0xc0,0x40,0x48,0xfc,0x50,0x4e,0x44,0x80,0xfe,0x10,0x10,0xa0,0x60,0x98,0x4,
++0x0,0x41,0x36,0x14,0x4,0x7,0xf4,0x14,0x17,0x14,0x10,0x10,0x15,0x19,0x12,0xc,0x40,0x44,0x5e,0x44,0x44,0x5c,0x44,0x44,0xfc,0x44,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x0,0x40,0x20,0x21,0x2,0x4,0xe8,0x23,0x20,0x20,0x21,0x2d,0x35,0x25,0x9,0x0,0x40,0x40,0xa0,0x10,0x88,0x46,0x4,0xf0,0x10,0x20,0x0,0x48,0x24,0x4,0x10,0xf0,
++0x0,0x40,0x30,0x11,0x2,0x4,0xf0,0x13,0x12,0x12,0x13,0x12,0x16,0x1a,0x13,0x2,0x80,0x80,0xfc,0x8,0x10,0x20,0x84,0x3e,0x4,0x4,0xbc,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x40,0x37,0x11,0x1,0x1,0xf2,0x14,0x10,0x1f,0x10,0x10,0x14,0x18,0x10,0x0,0x80,0x48,0xfc,0x10,0x10,0x10,0xa8,0x44,0x40,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x1,0x41,0x37,0x11,0x1,0x1,0xf1,0x11,0x11,0x1f,0x12,0x12,0x17,0x1a,0x13,0x0,0x10,0x10,0xfc,0x10,0xf0,0x10,0xf0,0x10,0x14,0xfe,0x0,0x90,0x8,0x0,0xfc,0x0,
++0x0,0x40,0x2f,0x20,0x7,0x4,0xe5,0x24,0x24,0x27,0x21,0x29,0x32,0x24,0x8,0x0,0x40,0x44,0xfe,0x40,0xfc,0x44,0x54,0xe4,0x44,0xfc,0x60,0x50,0x48,0x4e,0x44,0x40,
++0x0,0x40,0x20,0x27,0x4,0x4,0xe7,0x24,0x24,0x24,0x25,0x2d,0x37,0x29,0x9,0x10,0x48,0x7c,0x40,0xfe,0x42,0x7c,0xc0,0x44,0x7c,0x0,0xfc,0x0,0xfe,0x0,0xfc,0x0,
++0x0,0x43,0x22,0x23,0x2,0x3,0xe1,0x23,0x24,0x28,0x22,0x23,0x2a,0x33,0x20,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x44,0x44,0xb4,0x14,0x4,0xf4,0x14,0x8,
++0x0,0x47,0x24,0x24,0x7,0x0,0xe3,0x20,0x2f,0x21,0x21,0x24,0x28,0x30,0x20,0x0,0x4,0xbe,0xa4,0xa4,0xbc,0x0,0xf8,0x0,0xfe,0x0,0xf8,0x8,0x8,0x88,0x50,0x20,
++0x0,0x40,0x21,0x22,0x4,0xb,0xf0,0x27,0x24,0x27,0x24,0x27,0x2c,0x34,0x24,0x5,0x80,0x80,0x40,0x20,0x10,0xee,0x4,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0x88,0xa8,0x90,
++0x0,0x47,0x20,0x22,0x1,0xf,0xe0,0x20,0x2f,0x21,0x21,0x2b,0x32,0x24,0x8,0x3,0x3c,0xc0,0x88,0x48,0x50,0xfc,0x80,0x84,0xfe,0x0,0xf0,0x10,0xa0,0x40,0xb0,0xc,
++0x0,0x40,0x37,0x12,0x1,0x0,0xf7,0x10,0x13,0x12,0x12,0x13,0x16,0x1a,0x13,0x2,0x80,0x48,0xfc,0x10,0x10,0xa4,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x37,0x11,0x0,0x7,0xf4,0x18,0x13,0x12,0x12,0x12,0x16,0x1a,0x10,0x0,0x80,0x48,0xfc,0x10,0xa0,0xfe,0x42,0x44,0xf8,0x48,0x48,0x48,0x48,0x58,0x40,0x40,
++0x0,0x48,0x24,0x24,0x1,0x6,0xe8,0x30,0x21,0x22,0x27,0x22,0x2a,0x32,0x23,0x2,0x80,0x80,0x80,0xfc,0x4,0x48,0x40,0xa0,0x10,0xe,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x27,0x24,0x4,0x7,0xe4,0x24,0x27,0x24,0x2c,0x37,0x24,0x2c,0x34,0x4,0x80,0x48,0xfc,0x8,0x8,0xf8,0x0,0x4,0xfe,0xa4,0xa4,0xfc,0xa4,0xa4,0xb4,0x8,
++0x1,0x41,0x37,0x11,0x0,0x3,0xf2,0x13,0x12,0x13,0x10,0x1f,0x10,0x19,0x12,0xc,0x10,0x14,0xfe,0x10,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x44,0xfe,0xa0,0x10,0xe,0x4,
++0x0,0x42,0x21,0x2f,0x8,0x13,0xe2,0x22,0x22,0x23,0x20,0x21,0x29,0x32,0x24,0x8,0x40,0x48,0x50,0xfe,0x2,0xfc,0x8,0x8,0x8,0xf8,0xa0,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x47,0x24,0x27,0x4,0x7,0xe2,0x25,0x29,0x22,0x25,0x20,0x28,0x30,0x23,0xc,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x8,0x4,0xfa,0x8,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x4,0x42,0x21,0x2f,0x0,0x1,0xe2,0x24,0x23,0x22,0x22,0x22,0x2a,0x32,0x2f,0x0,0x4,0x8,0x10,0xfe,0x0,0x10,0xc,0x4,0xf8,0xa8,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x1,0x40,0x30,0x15,0x5,0x9,0xf1,0x12,0x14,0x13,0x12,0x12,0x16,0x1a,0x17,0x0,0x0,0xc8,0x48,0x14,0x22,0x42,0x88,0xf8,0x0,0xf8,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x0,0x40,0x2f,0x21,0x0,0x7,0xe4,0x24,0x27,0x24,0x25,0x25,0x2d,0x35,0x25,0x4,0x80,0x44,0xfe,0x10,0xa4,0xfe,0x44,0x54,0xfc,0x44,0xf4,0x14,0x14,0xf4,0x14,0x8,
++0x1,0x40,0x37,0x10,0x3,0x2,0xf3,0x12,0x13,0x12,0x10,0x13,0x14,0x18,0x11,0x6,0x8,0x90,0xfe,0x0,0xd4,0x54,0xd4,0x54,0xc4,0x4c,0x0,0xfc,0x84,0x84,0x14,0x8,
++0x2,0x4f,0x22,0x2a,0xf,0x2,0xe6,0x2b,0x32,0x20,0x23,0x22,0x2b,0x32,0x23,0x2,0x4,0xbe,0x8,0x28,0xbe,0x8,0x98,0x2a,0x4e,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x1,0x41,0x23,0x22,0x6,0xb,0xe2,0x22,0x23,0x22,0x22,0x23,0x2a,0x35,0x24,0x8,0x40,0x24,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,0x24,0x92,0x2,
++0x0,0x47,0x20,0x20,0xf,0x1,0xe2,0x2c,0x27,0x24,0x27,0x25,0x2d,0x35,0x24,0x4,0x0,0xf8,0x90,0x60,0xfe,0x44,0x40,0xc4,0xfe,0xa4,0x1c,0xf4,0x14,0xf4,0x14,0x8,
++0x1,0x41,0x21,0x2f,0x1,0x1,0xef,0x2a,0x2a,0x2f,0x29,0x2f,0x29,0x39,0x28,0x0,0x8,0x8,0x4c,0xe8,0x3e,0x8,0xe8,0xa8,0xa8,0xe8,0x28,0xe8,0x28,0x74,0x24,0x42,
++0x1,0x41,0x22,0x27,0xc,0x5,0xe7,0x24,0x25,0x24,0x25,0x2c,0x35,0x25,0x9,0x1,0x0,0xf8,0x10,0xfe,0x88,0x24,0xfe,0x0,0xfc,0x0,0xfc,0x0,0xfc,0x4,0xfc,0x4,
++0x0,0x44,0x24,0x2b,0x0,0x1f,0xe2,0x2e,0x22,0x2e,0x22,0x2e,0x2a,0x32,0x2f,0x0,0x10,0x90,0x98,0x54,0x10,0xfe,0x90,0xf0,0x94,0xf4,0x94,0xe8,0x9a,0xaa,0xe6,0x2,
++0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x34,0x28,0x20,0x20,0x20,0x20,
++0x1f,0x0,0x1,0x3d,0x5,0x9,0x33,0xc1,0x3f,0x0,0x1f,0x10,0x10,0x10,0x10,0xf,0xf0,0x40,0x88,0xb0,0x40,0x30,0xe,0x4,0xf8,0x10,0xf8,0x10,0x90,0x64,0x4,0xfc,
++0x0,0x78,0x48,0x48,0x50,0x50,0x60,0x50,0x50,0x48,0x48,0x68,0x50,0x40,0x40,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x78,0x4f,0x49,0x51,0x51,0x61,0x51,0x51,0x49,0x49,0x69,0x52,0x42,0x44,0x48,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x7c,0x45,0x48,0x48,0x50,0x48,0x4b,0x44,0x44,0x44,0x68,0x50,0x40,0x40,0x40,0x8,0x1c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x1,0x79,0x49,0x49,0x57,0x51,0x61,0x51,0x51,0x4f,0x49,0x69,0x51,0x42,0x42,0x44,0x10,0x10,0x10,0x10,0xfc,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0x78,0x4b,0x4a,0x52,0x53,0x62,0x52,0x52,0x4a,0x4a,0x6a,0x54,0x44,0x49,0x42,0x8,0x3c,0xc0,0x0,0x8,0xfc,0x8,0x88,0x88,0x90,0x50,0x20,0x50,0x88,0xe,0x4,
++0x0,0x7c,0x44,0x48,0x48,0x50,0x48,0x49,0x45,0x45,0x45,0x69,0x51,0x41,0x41,0x41,0x40,0x40,0x44,0x7e,0x40,0x40,0x44,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x7d,0x45,0x49,0x4a,0x52,0x4c,0x48,0x44,0x44,0x44,0x68,0x50,0x40,0x40,0x40,0x0,0x0,0x4,0xfe,0x80,0x80,0x88,0xfc,0x80,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,
++0x0,0x78,0x48,0x4b,0x52,0x52,0x62,0x53,0x52,0x4a,0x4a,0x6a,0x54,0x44,0x49,0x42,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xf8,0x88,0x88,0x50,0x20,0x50,0x88,0xe,0x4,
++0x0,0x7b,0x48,0x48,0x50,0x50,0x61,0x56,0x50,0x4b,0x48,0x68,0x50,0x40,0x4f,0x40,0x0,0xf8,0x10,0x20,0x40,0xb0,0xc,0x4,0x10,0xf8,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x78,0x48,0x4f,0x50,0x50,0x61,0x53,0x51,0x48,0x48,0x6b,0x50,0x40,0x43,0x4c,0x80,0x40,0x44,0xfe,0x80,0x90,0x10,0xe0,0x28,0x48,0x90,0x10,0x20,0xd8,0x6,0x2,
++0x0,0x78,0x49,0x49,0x51,0x51,0x67,0x50,0x51,0x49,0x4a,0x68,0x50,0x40,0x43,0x4c,0x40,0x48,0x7c,0x40,0x40,0x44,0xfe,0x40,0x48,0x48,0x50,0x60,0x40,0x80,0x0,0x0,
++0x0,0x7b,0x4a,0x4a,0x53,0x52,0x62,0x53,0x52,0x48,0x4b,0x68,0x50,0x40,0x4f,0x40,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x48,0x40,0xf8,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x70,0x5f,0x54,0x54,0x57,0x64,0x54,0x57,0x54,0x54,0x5f,0x70,0x40,0x40,0x40,0x0,0x40,0xe0,0x80,0xbc,0x84,0xa4,0xa8,0xa8,0x90,0x90,0xe8,0xa8,0xc6,0x80,0x80,
++0x0,0x78,0x4f,0x48,0x50,0x5f,0x61,0x51,0x57,0x49,0x49,0x6f,0x50,0x40,0x47,0x40,0x8,0x3c,0xc0,0x40,0x44,0xfe,0x50,0x50,0xfc,0x50,0x54,0xfe,0x40,0x48,0xfc,0x0,
++0x0,0x79,0x4b,0x4a,0x52,0x53,0x62,0x52,0x53,0x48,0x49,0x6f,0x50,0x40,0x40,0x40,0x80,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x7b,0x4a,0x4a,0x53,0x52,0x62,0x53,0x50,0x4f,0x4a,0x6a,0x52,0x42,0x43,0x42,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x4,0xfe,0x88,0x50,0x20,0x90,0xe,0x4,
++0x0,0x78,0x4b,0x4a,0x53,0x52,0x63,0x50,0x57,0x48,0x48,0x6b,0x50,0x40,0x4f,0x40,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x40,0x50,0xf8,0x40,0x44,0xfe,0x0,
++0x0,0x78,0x4b,0x4a,0x52,0x53,0x62,0x52,0x4b,0x48,0x68,0x51,0x41,0x42,0x44,0x48,0x40,0x88,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x80,0xc8,0x54,0x5c,0x42,0x42,0x3e,
++0x0,0x7b,0x4a,0x4b,0x52,0x53,0x61,0x52,0x57,0x49,0x4a,0x6f,0x50,0x45,0x44,0x48,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x8,0x10,0xbe,0x8,0x94,0xbe,0x0,0x24,0x92,0x2,
++0x2,0x7f,0x8,0x8,0x8,0x9,0xff,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x0,0x7c,0x44,0x44,0x48,0x48,0xd0,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x0,0x2,0x7f,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0xf,0xf8,0x40,0x0,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x4,0x2,0x3f,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x80,0x0,0x0,0x7c,0xc4,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x10,0x8,0x9,0xff,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x3f,0x0,0x0,0x0,0x0,0x0,0x7c,0x44,0xc4,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0x12,0x3f,0x22,0x22,0x22,0x2a,0x24,0x20,0x3f,0x0,0x4,0xfe,0x0,0x2,0x1,0x0,0x3c,0x24,0x24,0x28,0x28,0x30,0x28,0xa4,0xe2,0xa2,0xa2,0xb4,0xa8,0xa0,0x20,
++0x10,0x8,0x9,0xff,0x10,0x12,0x1f,0x12,0x12,0x12,0x12,0x22,0x22,0x4a,0x84,0x0,0x0,0x7c,0x44,0xc4,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x1,0xff,0x8,0x8,0x9,0x7f,0x49,0x49,0x49,0x55,0x63,0x41,0x41,0x45,0x42,0x0,0x0,0xfc,0x44,0x44,0x48,0xc8,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x1,0xff,0x4,0x8,0x18,0x1c,0x2a,0x29,0x49,0x88,0x8,0x8,0xf,0xf8,0x40,0x0,0x0,0xfc,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x14,0x14,0x14,0x14,0x15,0xf7,0x14,0x14,0x14,0x14,0x14,0x35,0xd6,0x14,0x0,0x0,0x0,0x7c,0x44,0x44,0x48,0xc8,0x50,0x48,0x44,0x42,0xc2,0x62,0x54,0x48,0x40,0x40,
++0x14,0x14,0x14,0x14,0x94,0x54,0x55,0x35,0x36,0x14,0x14,0x17,0xf8,0x40,0x0,0x0,0x0,0x7c,0x44,0x44,0xc8,0xc8,0x50,0x48,0x44,0x42,0x42,0xe2,0x54,0x48,0x40,0x40,
++0x2,0x7,0x78,0x48,0x48,0x4a,0x7f,0x48,0x48,0x48,0x44,0x44,0x52,0x69,0x44,0x0,0x0,0x3c,0x24,0x24,0x28,0x28,0x30,0x28,0x24,0x22,0x22,0xa2,0xb4,0xa8,0x20,0x20,
++0x10,0x10,0x20,0x24,0x42,0xff,0x0,0x2,0x7f,0x42,0x42,0x42,0x42,0x7e,0x42,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0x8,0x9,0xff,0x8,0x49,0x29,0x2a,0xff,0x8,0x8,0x14,0x12,0x23,0xc1,0x0,0x0,0x7c,0x44,0xc4,0x48,0x48,0x50,0x48,0xc4,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x2,0xff,0x10,0x10,0x22,0x41,0x7f,0x8,0x8,0x7f,0x8,0x8,0xf,0xf8,0x40,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0xd4,0x48,0x40,0x40,
++0x8,0x8,0x4a,0x7f,0x48,0x88,0x9,0xff,0x8,0x1c,0x1c,0x2a,0x29,0x48,0x88,0x8,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0xc8,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0x8,0x14,0x12,0x21,0x20,0x7f,0x80,0x1,0xff,0x10,0x14,0x22,0x7f,0x21,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0xd0,0x48,0x44,0xc2,0x42,0x62,0x54,0x48,0x40,0x40,
++0x41,0x22,0x14,0x8,0x14,0x63,0x10,0xff,0x10,0x24,0x28,0x48,0x92,0x3f,0x1,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0xc8,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x20,0x21,0x3f,0x41,0x41,0xbd,0x25,0x25,0x3d,0x25,0x25,0x3d,0x25,0x1,0xa,0x4,0x0,0x7c,0xc4,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x0,0x7f,0x50,0x91,0x3f,0x10,0x14,0x25,0x7f,0x4,0x4,0x7,0xfc,0x44,0x4,0x4,0x0,0xfc,0xc4,0x44,0x48,0x48,0x50,0x48,0xc4,0x42,0x42,0xe2,0x54,0x48,0x40,0x40,
++0x0,0xff,0x0,0x0,0x7b,0x4a,0x4a,0x4a,0x6b,0x5a,0x4a,0x4a,0x4a,0x4a,0x5a,0x0,0x40,0xfe,0x12,0x52,0xf4,0x54,0x58,0x54,0x54,0xd2,0x52,0x5a,0x54,0x50,0xd0,0x10,
++0x2,0x3f,0x22,0x22,0x22,0x3e,0x0,0xff,0x8,0xa,0x7f,0x8,0xf,0xf8,0x40,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0xd4,0x48,0x40,0x40,
++0x8,0x28,0x2a,0x3f,0x48,0x88,0x9,0xff,0x0,0x7f,0x41,0x41,0x41,0x7f,0x41,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0xc8,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x20,0x11,0xe,0x11,0x28,0x8,0xff,0x14,0x24,0x7f,0xa4,0x24,0x24,0x25,0x24,0x4,0x80,0x3c,0x24,0x24,0xa8,0x28,0xf0,0x28,0xa4,0xe2,0xa2,0xa2,0xb4,0xa8,0xa0,0x20,
++0x1,0x3,0xfc,0x49,0x29,0x2,0x7f,0x2,0xc,0x8,0xff,0x48,0x8,0x8,0x28,0x10,0x0,0xfc,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0x11,0x7f,0x49,0x49,0x7f,0x49,0x51,0x7f,0x10,0x29,0xff,0x8,0x8,0x8,0x8,0x0,0x7c,0xc4,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0xe2,0x54,0x48,0x40,0x40,
++0x8,0x29,0x2a,0x4c,0x94,0x12,0x21,0xc8,0x8,0x29,0x2a,0x54,0x12,0x21,0xc1,0x0,0x0,0x7c,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x1,0x7f,0x40,0x5f,0x51,0x5f,0x51,0x5f,0x48,0x7f,0x49,0x52,0x4e,0x51,0x7f,0x0,0x0,0xbc,0x24,0x24,0x28,0x28,0x30,0x28,0x24,0xe2,0x22,0x22,0x34,0x28,0xa0,0x20,
++0x1,0xff,0x14,0x15,0x7f,0x55,0x55,0x55,0x7f,0x49,0x8,0x7f,0x8,0xf,0xf8,0x40,0x0,0xfc,0x44,0x44,0xc8,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x1,0x7f,0x4,0x17,0x14,0xff,0x20,0x3f,0x20,0x3f,0x0,0xaa,0xaa,0x0,0x2,0x1,0x0,0xbc,0x24,0xa4,0x28,0xe8,0x30,0x28,0x24,0xa2,0xa2,0xa2,0xb4,0xa8,0xa0,0x20,
++0x22,0xff,0x22,0x3e,0x8,0x7f,0x49,0x7f,0x8,0x7f,0x8,0x3e,0x8,0xf,0x78,0x20,0x0,0xfc,0x44,0x44,0x48,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x8,0x7f,0x22,0x14,0xff,0x0,0x7f,0x41,0x7f,0x41,0x7f,0x8,0xff,0x8,0x8,0x8,0x0,0x7c,0x44,0x44,0xc8,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0xd4,0x48,0x40,0x40,
++0x3,0x7c,0x24,0x15,0x7f,0xc,0x15,0x24,0xff,0x24,0x24,0x3f,0x24,0x24,0x3f,0x20,0x80,0x3c,0xa4,0x24,0xe8,0x28,0x30,0xa8,0xe4,0xa2,0xa2,0xa2,0xb4,0xa8,0xa0,0xa0,
++0x11,0xa,0x7f,0x4,0x3f,0x4,0x7f,0x24,0x15,0xff,0x0,0x3f,0x20,0x20,0x3f,0x20,0x0,0x3c,0xe4,0x24,0xa8,0x28,0xf0,0xa8,0x24,0xe2,0x22,0xa2,0xb4,0xa8,0xa0,0xa0,
++0xff,0x48,0x7b,0x4a,0x7a,0x49,0xfa,0x8,0x7f,0x14,0x25,0x4e,0x15,0x24,0xc4,0x4,0x80,0x3c,0xa4,0xa4,0xa8,0x28,0xb0,0x28,0x24,0xa2,0x22,0x22,0xb4,0xa8,0x20,0x20,
++0x2,0x7f,0x8,0x7f,0x48,0xaa,0x8,0x2a,0x0,0x7f,0x55,0x55,0x55,0x55,0x7f,0x0,0x0,0x7c,0x44,0xc4,0xc8,0x48,0x50,0x48,0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
++0x2a,0x7f,0xaa,0xff,0xaa,0xff,0xaa,0xff,0x0,0xff,0x1,0x7f,0x41,0x7f,0x22,0xff,0x0,0x3c,0xa4,0xa4,0xa8,0xa8,0xb0,0xa8,0x24,0xa2,0x22,0xa2,0x34,0x28,0x20,0xa0,
++0x8,0x8,0xf,0x10,0x10,0x20,0x5f,0x80,0x0,0x0,0x1f,0x0,0x0,0x0,0x3f,0x0,0x0,0x20,0xf0,0x20,0x40,0x88,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0xf,0x10,0x10,0x20,0x5f,0x11,0x11,0x11,0xff,0x1,0x2,0x4,0x18,0x60,0x0,0x0,0xe0,0x20,0x40,0x90,0xf8,0x10,0x10,0x14,0xfe,0x0,0x80,0x60,0x1c,0x8,
++0x0,0x1,0xff,0x10,0x10,0x12,0x1f,0x12,0x12,0x12,0x12,0x22,0x22,0x4a,0x84,0x1,0x20,0x20,0xa0,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x44,0x84,0xa8,0x10,
++0x20,0x22,0x3f,0x42,0x42,0x8a,0x7e,0x4a,0x4a,0x4a,0x4a,0x7a,0x42,0xa,0x4,0x1,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x44,0x84,0xa8,0x10,
++0x2,0xff,0x22,0x22,0x22,0x2a,0x44,0x80,0x7e,0x42,0x42,0x42,0x42,0x7e,0x42,0x1,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x44,0x84,0xa8,0x10,
++0x10,0x9,0xff,0x10,0x12,0x22,0x24,0x7c,0x8,0xa,0x12,0x24,0x4c,0x92,0x20,0x1,0x20,0x20,0xa0,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x44,0x84,0xa8,0x10,
++0x8,0x8,0x7f,0x9,0x11,0x15,0x62,0x0,0xff,0x0,0x1f,0x10,0x10,0x1f,0x10,0x0,0x0,0x4,0x7e,0x44,0x44,0x44,0x7c,0x0,0xfe,0x10,0x90,0x90,0x90,0x90,0x50,0x20,
++0x0,0x7f,0x2,0x4,0x7e,0x4,0x14,0x8,0x7f,0x55,0x55,0x55,0x55,0xff,0x0,0x1,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x44,0x84,0xa8,0x10,
++0x1,0xff,0x81,0xbd,0x81,0xbd,0x0,0x7e,0x42,0x7e,0x42,0x7e,0x42,0x7e,0x42,0x1,0x20,0xa0,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x44,0x84,0xa8,0x10,
++0x10,0x12,0x7f,0x12,0x12,0x2a,0x44,0x0,0x44,0xff,0x55,0x55,0x55,0x55,0x99,0x33,0x0,0xfe,0x92,0x92,0xfe,0x92,0x92,0xfe,0x82,0x20,0x10,0x50,0xc2,0xc6,0x44,0x3c,
++0x5,0x39,0x21,0x21,0x3d,0x21,0x21,0x3f,0x1,0x7f,0x8,0x6,0x1,0x6,0x18,0xe0,0x8,0x7c,0x8,0x8,0x78,0x8,0x8,0xf8,0x0,0xf0,0x20,0xc0,0x0,0xc0,0x30,0xe,
++0x21,0x2f,0x20,0xaf,0x70,0x2f,0x20,0x27,0x54,0x87,0x0,0x1f,0x4,0x3,0xc,0x70,0x8,0xe8,0x8,0xea,0x1c,0xe8,0x8,0xc8,0x54,0xc2,0x0,0xe0,0x40,0x80,0x60,0x1c,
++0x3e,0x32,0x2a,0x26,0x3e,0x8,0x1f,0x28,0x4f,0x8,0x8,0x1f,0x4,0x3,0x1c,0xe0,0xf8,0xc8,0xa8,0x98,0xf8,0x80,0xf8,0x80,0xf0,0x84,0x7c,0xe0,0x40,0x80,0x70,0xe,
++0x0,0x0,0xf8,0x8,0x10,0x20,0x40,0x78,0x8,0x88,0x50,0x30,0x20,0x50,0x88,0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0xfc,
++0x0,0x0,0x0,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x1,0x1,0x1,0x41,0x41,0x5f,0x43,0x45,0x45,0x49,0x51,0x61,0x45,0x42,0x7f,0x0,0x0,0x0,0x0,0x14,0x34,0x44,0x84,0x44,0x44,0x24,0x24,0x1c,0x4,0x4,0xfc,0x4,
++0x9,0x4,0x22,0x29,0x22,0x24,0x29,0x20,0x3f,0x28,0x8,0x9,0xe,0x8,0x7,0x0,0x20,0x40,0x88,0x28,0x88,0x48,0x28,0x8,0xf8,0x8,0x60,0x80,0x0,0x4,0xfc,0x0,
++0x0,0x0,0x1,0x1,0x1,0x2,0x2,0x4,0x4,0x8,0x8,0x10,0x20,0x7f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x10,0x8,0xfc,0x4,0x0,
++0x1,0x1,0x2,0x4,0x1f,0x0,0x4,0x4,0xff,0x4,0x4,0x4,0x8,0x8,0x10,0x20,0x0,0x0,0x0,0x20,0xf0,0x10,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x2,0x4,0x8,0x1f,0x2,0xff,0x4,0x8,0x3f,0xd1,0x11,0x1f,0x11,0x11,0x1f,0x10,0x0,0x40,0x20,0xf0,0x4,0xfe,0x40,0x20,0xf8,0x16,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x0,0x0,0xfb,0x8,0x10,0x2d,0xc3,0x8,0x7d,0x11,0x11,0x11,0x1d,0xf2,0x44,0x8,0x80,0x44,0xfe,0x80,0x80,0x8,0xfc,0x4,0x50,0x50,0x50,0x50,0x52,0x52,0x4e,0x0,
++0x1,0x4,0x4,0x8,0x10,0x2f,0xc4,0x4,0x8,0x31,0x1,0x3f,0x1,0x1,0xff,0x0,0x80,0x80,0x40,0x20,0x10,0xee,0x24,0x20,0xa0,0x40,0x10,0xf8,0x0,0x4,0xfe,0x0,
++0x0,0x7f,0x2,0x22,0x1a,0xa,0x2,0xff,0x1,0x1,0x3f,0x1,0x1,0x1,0xff,0x0,0x8,0xfc,0x80,0x88,0x98,0xa0,0x84,0xfe,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,
++0x9,0x9,0x9,0x11,0x1f,0x30,0x50,0x90,0x11,0x17,0x1,0x3f,0x1,0x1,0xff,0x0,0x20,0x10,0x0,0xfc,0x0,0x90,0xa0,0x44,0xa4,0x1c,0x0,0xf8,0x0,0x4,0xfe,0x0,
++0x8,0xff,0x0,0x3e,0x22,0x3e,0x0,0x7e,0x4,0x7e,0x9,0x19,0x7f,0x1,0x1,0xff,0x20,0xa0,0x28,0xfc,0x28,0x68,0x28,0x58,0x48,0x8a,0x6,0x10,0xfc,0x0,0x4,0xfe,
++0x8,0xff,0x8,0x7f,0x49,0x7f,0x49,0x7f,0x8,0xff,0x49,0x7f,0x1,0x3f,0x1,0xff,0x8,0x7c,0x48,0x48,0x86,0x7c,0x44,0x44,0x28,0x90,0x28,0xc6,0x0,0xf8,0x0,0xfe,
++0x1,0xff,0x10,0x14,0x25,0x7a,0x10,0x24,0x7c,0x8,0x11,0x61,0x3f,0x1,0x1,0xff,0x0,0xfe,0x90,0xfe,0x90,0xfc,0x90,0xfc,0x90,0xfe,0x80,0x10,0xf8,0x0,0x4,0xfe,
++0x8,0xf,0x48,0x7f,0x40,0xbf,0x8,0x55,0x3e,0xe3,0x22,0x3e,0x1,0x3f,0x1,0xff,0x0,0x0,0x7c,0x84,0xc4,0x28,0x28,0x10,0x28,0xa8,0x46,0x0,0x10,0xf8,0x0,0xfe,
++0x10,0x10,0x11,0x10,0x14,0xfe,0x10,0x13,0x10,0x10,0x1e,0xf0,0x40,0x0,0x0,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x10,0x11,0x10,0x14,0xfe,0x13,0x10,0x10,0x11,0x1e,0xf0,0x40,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x80,0x88,0xfc,0x8,0x8,0x8,0x88,0x50,0x20,
++0x10,0x10,0x10,0x10,0x15,0xfe,0x11,0x10,0x10,0x10,0x1e,0xf1,0x41,0x1,0x0,0x0,0x80,0x80,0x84,0xfe,0x0,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x11,0x11,0x11,0x15,0xff,0x11,0x11,0x11,0x11,0x1d,0xf1,0x42,0x2,0x4,0x0,0x4,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,0x4,
++0x10,0x10,0x10,0x13,0x12,0xfe,0x12,0x12,0x12,0x12,0x1e,0xf2,0x44,0x4,0x8,0x10,0x40,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x13,0x10,0x14,0xfe,0x10,0x13,0x12,0x12,0x1e,0xf2,0x42,0x2,0x1,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x13,0x12,0x12,0xfe,0x12,0x13,0x12,0x12,0x1e,0xf2,0x42,0x2,0x1,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x13,0x12,0x12,0xfe,0x13,0x12,0x12,0x12,0x1e,0xf2,0x44,0x4,0x9,0x12,0x0,0x4,0xfe,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x10,0x10,0x11,0x11,0x15,0xff,0x11,0x11,0x11,0x11,0x1d,0xf1,0x42,0x2,0x4,0x8,0x8,0x1c,0xe0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x10,0x11,0x11,0x11,0xfd,0x11,0x11,0x11,0x11,0x1d,0xf2,0x42,0x4,0x9,0x12,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x4,0x88,0x48,0x50,0x30,0x20,0x50,0x88,0xe,0x4,
++0x11,0x11,0x11,0x11,0x17,0xfd,0x11,0x11,0x11,0x11,0x1d,0xf1,0x41,0x1,0x1,0x1,0x8,0x8,0x8,0xa,0xfe,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x10,0x10,0x17,0xfc,0x10,0x10,0x10,0x11,0x1d,0xf1,0x42,0x2,0x4,0x8,0x80,0xa0,0x90,0x94,0xfe,0xa0,0xa0,0xa4,0xa4,0x28,0x28,0x30,0x62,0xa2,0x1e,0x0,
++0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x13,0x12,0x12,0x1e,0xf2,0x42,0x3,0x2,0x40,0x40,0x44,0x7e,0x40,0x40,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x10,0x10,0x10,0xff,0x12,0x12,0x12,0x13,0x1e,0xf2,0x44,0x4,0x8,0x10,0x40,0x44,0x7e,0x40,0x48,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x11,0x11,0x11,0xfd,0x11,0x11,0x11,0x11,0x1d,0xf1,0x42,0x2,0x4,0x0,0x8,0x1c,0xe0,0x0,0x0,0x4,0xfe,0x10,0x10,0x50,0x30,0x18,0x14,0x10,0x10,0x10,
++0x10,0x10,0x13,0x12,0x12,0xfe,0x13,0x12,0x12,0x12,0x1e,0xf2,0x42,0x3,0x6,0x0,0x8,0x3c,0xe0,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x10,0x90,0x52,0x2a,0x6,
++0x10,0x10,0x10,0x13,0x12,0xfc,0x11,0x11,0x11,0x11,0x1d,0xf1,0x41,0x1,0x0,0x0,0x40,0x20,0x20,0xfe,0x2,0x4,0x0,0x10,0x30,0x40,0x80,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x13,0x12,0x12,0x12,0xff,0x12,0x12,0x12,0x12,0x1e,0xf2,0x44,0x4,0x8,0x10,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x80,0x88,0x98,0xa0,0xc0,0x82,0x82,0x7e,0x0,
++0x10,0x11,0x11,0x11,0x11,0xfd,0x11,0x17,0x12,0x12,0x1e,0xf2,0x43,0x0,0x0,0x0,0x8,0xfc,0x8,0x48,0x28,0x28,0xa,0xfe,0x8,0x88,0x48,0x48,0xfc,0x8,0x50,0x20,
++0x10,0x11,0x11,0x12,0x12,0xfc,0x17,0x11,0x12,0x14,0x17,0x1c,0xf0,0x40,0x0,0x1,0x20,0x20,0x20,0x24,0x7e,0xa4,0xa4,0x24,0x24,0xa4,0xa4,0x24,0x44,0x44,0x94,0x8,
++0x10,0x17,0x10,0x10,0x10,0xfc,0x14,0x12,0x12,0x12,0x1c,0xf0,0x40,0x0,0xf,0x0,0x8,0xfc,0xa0,0xa0,0xa0,0xa4,0xa4,0xa4,0xa8,0xa8,0xa0,0xa0,0xa0,0xa4,0xfe,0x0,
++0x10,0x17,0x10,0x10,0x11,0xfd,0x13,0x10,0x10,0x10,0x13,0x1c,0xf0,0x40,0xf,0x0,0x8,0xfc,0x80,0x80,0x10,0x8,0xfc,0x0,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x13,0x12,0x12,0x12,0xfe,0x12,0x12,0x12,0x12,0x1e,0xf2,0x42,0x2,0x2,0x2,0x4,0xfe,0x4,0x4,0xf4,0x4,0x4,0xf4,0x94,0x94,0x94,0xf4,0x4,0x4,0x14,0x8,
++0x10,0x10,0x14,0x14,0x17,0xfc,0x10,0x13,0x10,0x10,0x13,0x1e,0xf2,0x42,0x2,0x1,0x40,0x40,0x44,0x44,0xfc,0x4,0x8,0xfc,0x8,0x8,0xf8,0x8,0x0,0x2,0x2,0xfe,
++0x20,0x20,0x2f,0x21,0x22,0xfa,0x24,0x2f,0x21,0x29,0x25,0x3a,0xe2,0x5,0x8,0x10,0x4,0xc,0x70,0x10,0x10,0x50,0x5c,0x50,0x50,0x50,0x50,0x50,0x7c,0x0,0x86,0x7c,
++0x10,0x10,0x10,0x13,0x12,0xfe,0x12,0x12,0x12,0x12,0x1e,0xf2,0x42,0x2,0x2,0x2,0x40,0x40,0x84,0xfe,0x4,0x4,0xf4,0x94,0x94,0x94,0x94,0xf4,0x4,0x4,0x14,0x8,
++0x20,0x20,0x20,0x2f,0x20,0xf8,0x25,0x24,0x24,0x24,0x24,0x3c,0xe5,0x44,0x7,0x4,0x80,0x40,0x44,0xfe,0x0,0x10,0x14,0xa4,0xa4,0x44,0xa4,0x94,0x14,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x17,0x10,0xfc,0x11,0x13,0x11,0x10,0x1c,0xf1,0x46,0x0,0x3,0xc,0x80,0x40,0x44,0xfe,0x80,0x90,0x10,0xe0,0x28,0x48,0x90,0x10,0x20,0xd8,0x6,0x2,
++0x10,0x13,0x12,0x12,0x13,0xfe,0x12,0x13,0x12,0x12,0x1e,0xf2,0x42,0x2,0x3,0x2,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x88,0x50,0x20,0x10,0x8e,0x4,0x0,
++0x10,0x11,0x11,0x11,0x11,0xfd,0x11,0x10,0x13,0x10,0x10,0x1d,0xf0,0x40,0x7,0x0,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0xfe,0x20,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x20,0x20,0x27,0x24,0x24,0xfc,0x24,0x27,0x24,0x24,0x24,0x3c,0xe7,0x44,0x0,0x0,0x8,0x88,0xc8,0x88,0x8a,0xfe,0x88,0x88,0xc8,0xa8,0xa8,0x88,0x88,0x88,0x28,0x10,
++0x10,0x11,0x11,0x11,0x11,0xfd,0x10,0x13,0x12,0x12,0x1e,0xf2,0x43,0x2,0x2,0x2,0x8,0xfc,0x8,0x8,0xf8,0x48,0x44,0xfe,0x44,0x44,0x44,0xb4,0x14,0x4,0x14,0x8,
++0x10,0x11,0x11,0x11,0x11,0xfc,0x13,0x12,0x12,0x12,0x1e,0xf2,0x42,0x0,0x3,0xc,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x4,0x24,0x24,0x24,0x44,0x44,0x98,0x4,0x2,
++0x10,0x10,0x17,0x10,0x12,0xfd,0x10,0x10,0x17,0x11,0x10,0x1c,0xf0,0x40,0x0,0x0,0x8,0x3c,0xc0,0x44,0x24,0x28,0x10,0x14,0xfe,0x10,0x90,0x90,0x10,0x10,0x50,0x20,
++0x10,0x10,0x13,0x12,0x14,0xfd,0x10,0x10,0x17,0x10,0x1c,0xf0,0x41,0x1,0x2,0xc,0x80,0x40,0xfe,0x2,0x24,0xf0,0x0,0x4,0xfe,0xa0,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x17,0x10,0x10,0xff,0x12,0x13,0x12,0x13,0x1e,0xf3,0x42,0x2,0xf,0x0,0x40,0x48,0xfc,0x40,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xa,0xfe,0x0,
++0x10,0x10,0x10,0x17,0x11,0xfd,0x13,0x16,0x1a,0x13,0x1e,0xf2,0x43,0x2,0x0,0x0,0x80,0x80,0x84,0xfe,0x10,0x50,0xf8,0x4e,0x48,0xf8,0x48,0x48,0xf8,0x4a,0x42,0x3e,
++0x10,0x13,0x12,0x13,0x12,0xff,0x11,0x11,0x13,0x14,0x10,0x1d,0xf1,0x42,0x4,0x1,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0x4,0xfe,0xa4,0xa4,0x24,0x44,0x44,0x94,0x8,
++0x10,0x10,0x13,0x12,0x12,0xff,0x12,0x12,0x13,0x10,0x1d,0xf7,0x40,0x0,0x0,0x0,0x40,0x84,0xfe,0x24,0x24,0xfc,0x44,0x44,0xfc,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x10,0x10,0x10,0x10,0x11,0xfe,0x14,0x13,0x10,0x10,0x1c,0xf0,0x45,0x5,0x9,0x0,0x40,0x40,0xa0,0xa0,0x10,0x8e,0x44,0xf8,0x10,0x20,0x80,0x40,0x44,0x12,0x12,0xf0,
++0x20,0x27,0x24,0x24,0x24,0xff,0x24,0x24,0x24,0x27,0x3c,0xe4,0x44,0x8,0x9,0x10,0x4,0xbe,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0xa4,0xd4,0x88,
++0x10,0x10,0x10,0x11,0x12,0xff,0x12,0x12,0x12,0x13,0x1e,0xf0,0x40,0x1,0x6,0x18,0x80,0x80,0xf8,0x10,0x24,0xfe,0x24,0x24,0x44,0xfc,0x44,0xa0,0xb0,0x2a,0x22,0x1e,
++0x20,0x23,0x20,0x21,0x28,0xfb,0x20,0x27,0x24,0x2b,0x3a,0xe2,0x42,0x2,0x0,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x42,0xfc,0x48,0x48,0x48,0x58,0x40,0x40,
++0x10,0x10,0x13,0x10,0x10,0xff,0x10,0x10,0x13,0x10,0x1e,0xf1,0x42,0xc,0x1,0x0,0x40,0x48,0xfc,0x48,0x4a,0xfe,0x48,0x48,0xf8,0x40,0x48,0x50,0x50,0x4e,0x44,0x80,
++0x10,0x13,0x12,0x12,0x13,0xfe,0x12,0x12,0x12,0x12,0x1e,0xf3,0x45,0x5,0x9,0x10,0x4,0xfe,0x4,0x4,0xfc,0x20,0xa8,0xa8,0xa8,0xf8,0x20,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x12,0x12,0x17,0x12,0xfe,0x12,0x12,0x13,0x10,0x1f,0xf0,0x41,0x2,0xc,0x0,0x90,0x90,0x94,0xfe,0x90,0x90,0xf0,0x0,0xfc,0x40,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x10,0x17,0x10,0x10,0x17,0xfc,0x14,0x14,0x17,0x10,0x1c,0xf7,0x40,0x0,0xf,0x0,0x4,0xfe,0xa0,0xa4,0xfe,0xa4,0xa4,0xa4,0xfc,0x40,0x48,0xfc,0x40,0x44,0xfe,0x0,
++0x10,0x13,0x12,0x12,0x12,0xff,0x12,0x10,0x17,0x10,0x1c,0xf0,0x41,0x1,0x2,0xc,0x4,0xfe,0x94,0x94,0x94,0xfc,0x44,0x20,0xfe,0x80,0xf8,0x88,0x8,0x8,0x28,0x10,
++0x11,0x11,0x11,0x12,0x13,0xfe,0x16,0x1a,0x13,0x12,0x1f,0xf2,0x42,0x2,0x2,0x3,0x0,0x78,0x8,0x12,0xfe,0x0,0x88,0xfc,0x20,0x24,0xfe,0x20,0x20,0x50,0x8e,0x4,
++0x10,0x17,0x10,0x13,0x12,0xfe,0x13,0x10,0x17,0x15,0x1c,0xf5,0x44,0x4,0x4,0x4,0x8,0xfc,0x0,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x14,0xa4,0xf4,0x44,0x44,0x54,0x8,
++0x10,0x13,0x12,0x12,0x12,0xfe,0x12,0x12,0x12,0x12,0x1e,0xf2,0x44,0x5,0xa,0x0,0x4,0xfe,0x20,0x44,0xfe,0x84,0x84,0xfc,0x84,0x84,0xfc,0x20,0xa8,0x26,0x22,0x60,
++0x13,0x12,0x13,0x12,0x13,0xfc,0x17,0x14,0x14,0x17,0x1c,0xf3,0x41,0x0,0x3,0xc,0xf8,0x8,0xf8,0x8,0xf8,0x4,0xfe,0xa4,0xa4,0xfc,0x0,0xf8,0x10,0xe0,0x18,0x6,
++0x20,0x27,0x24,0x25,0x24,0xff,0x24,0x25,0x24,0x25,0x3d,0xe5,0x49,0x9,0x11,0x1,0x20,0xfe,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x24,0x2c,
++0x24,0x22,0x28,0x24,0x21,0xfc,0x24,0x29,0x20,0x2f,0x38,0xe0,0x41,0x2,0xc,0x0,0x8,0xfc,0x48,0xc8,0x48,0x88,0xa8,0x10,0x44,0xfe,0x40,0xe0,0x50,0x4e,0x44,0x40,
++0x20,0x27,0x24,0x27,0x24,0xfd,0x24,0x25,0x24,0x25,0x3e,0xe4,0x47,0x8,0x10,0x0,0x4,0xfe,0x4,0xfc,0x20,0x24,0xa8,0x24,0xa0,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,
++0x8,0x7f,0x8,0x7f,0x49,0x7f,0x40,0x4f,0x81,0x3f,0x5,0xf,0x18,0x2f,0x8,0xf,0x78,0x48,0x4c,0x80,0x7c,0x28,0x10,0xee,0x0,0xf8,0x0,0xf0,0x1c,0xf0,0x10,0xf0,
++0x8,0x7f,0x8,0xff,0x22,0x3e,0x14,0x7f,0x2,0x1f,0x11,0x1f,0x12,0xff,0x1,0x1,0x10,0x10,0xfe,0x10,0x7c,0x28,0x10,0x6e,0x0,0xf0,0x10,0xf0,0x14,0xfe,0x0,0x0,
++0x10,0xfe,0x11,0x7c,0x0,0xfe,0x82,0x7c,0x1,0x7c,0x44,0x44,0x7d,0x29,0xfe,0x0,0x20,0x20,0x20,0xbe,0x42,0x14,0x50,0x98,0x26,0x42,0x20,0x10,0x54,0x42,0x4a,0x38,
++0x4,0x4,0xff,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x44,0xfe,0x40,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x6,0x2,0x2,0x7f,0x2,0x4,0x4,0x4,0x8,0x8,0x10,0x60,0x40,0x44,0xfe,0x40,0x40,0x0,0x20,0xf0,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x4,0x4,0xff,0x4,0x4,0x3f,0x4,0x4,0x4,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x40,0x44,0xfe,0x40,0x40,0xf0,0x10,0x20,0x48,0xfc,0x8,0x8,0x8,0x88,0x50,0x20,
++0x4,0x4,0xff,0x4,0x4,0x1,0x1,0x1,0x7f,0x1,0x1,0x1,0x1,0x1,0xff,0x0,0x40,0x44,0xfe,0x40,0x40,0x0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x4,0x4,0xff,0x4,0x4,0x0,0x3f,0x1,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x40,0x44,0xfe,0x40,0x50,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x4,0x3f,0x8,0x8,0xc,0x12,0x12,0x11,0x20,0x20,0x43,0xc,0x40,0x44,0xfe,0x40,0x40,0xf0,0x20,0x40,0xf0,0x10,0x20,0x20,0xc0,0xb0,0xe,0x4,
++0x4,0x4,0xff,0x4,0x6,0x2,0x3f,0x2,0x1a,0x4,0x6,0x5,0x8,0x8,0x10,0x60,0x40,0x44,0xfe,0x40,0x40,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0xa2,0x22,0x1e,0x0,
++0x4,0x4,0xff,0x4,0x4,0x3f,0x0,0x0,0x1f,0x10,0x20,0x3f,0x0,0x0,0x0,0x0,0x40,0x44,0xfe,0x40,0x50,0xf8,0x10,0x10,0xf0,0x0,0x8,0xfc,0x8,0x8,0x50,0x20,
++0x4,0x4,0xff,0x4,0x4,0x3f,0x0,0x0,0x1f,0x10,0x10,0x10,0x10,0x10,0xf,0x0,0x40,0x44,0xfe,0x40,0x50,0xf8,0x10,0x10,0xf0,0x10,0x0,0x0,0x4,0x4,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x2,0x4,0x1f,0x0,0x3,0xc,0x3f,0x0,0x0,0x1,0xe,0x70,0x40,0x44,0xfe,0x40,0x0,0x20,0xc0,0x80,0x20,0x20,0xc0,0x40,0x80,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x5,0x1,0x3f,0x1,0x1,0xff,0x2,0x2,0x4,0x8,0x30,0xc0,0x40,0x44,0xfe,0x40,0x40,0x10,0xf8,0x0,0x4,0xfe,0x80,0x80,0x40,0x30,0xe,0x4,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x0,0x0,0xff,0x4,0x4,0x4,0x8,0x8,0x10,0x60,0x40,0x44,0xfe,0x40,0x10,0xf8,0x0,0x4,0xfe,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x4,0x4,0xff,0x4,0x4,0x0,0x3f,0x0,0x0,0xff,0x2,0x2,0x4,0x8,0x1f,0x0,0x40,0x44,0xfe,0x40,0x40,0x10,0xf8,0x0,0x4,0xfe,0x0,0x0,0x40,0x20,0xf0,0x10,
++0x4,0x4,0xff,0x4,0x1,0xff,0x1,0x1,0x1f,0x11,0x11,0x11,0x11,0x11,0x1,0x1,0x40,0x44,0xfe,0x40,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x50,0x20,0x0,0x0,
++0x4,0x4,0xff,0x5,0x1,0xff,0x1,0x1,0x3f,0x8,0x4,0x2,0x1,0x6,0x18,0xe0,0x40,0x44,0xfe,0x40,0x4,0xfe,0x0,0x0,0xf0,0x20,0x40,0x80,0x0,0xc0,0x30,0xe,
++0x4,0x4,0xff,0x4,0x4,0x3f,0x21,0x21,0x2f,0x21,0x21,0x22,0x42,0x44,0x88,0x10,0x40,0x44,0xfe,0x40,0x48,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x50,0x20,
++0x4,0x4,0xff,0x4,0x4,0x1f,0x10,0x10,0x17,0x14,0x14,0x24,0x24,0x44,0x84,0x3,0x40,0x44,0xfe,0x40,0x48,0xfc,0x0,0x20,0xf0,0x20,0x20,0xa0,0x40,0x4,0x4,0xfc,
++0x4,0x4,0xff,0x4,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x20,0x20,0x20,0x3f,0x0,0x40,0x44,0xfe,0x40,0xf8,0x0,0x20,0xf0,0x20,0x20,0xe0,0x20,0x0,0x8,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x4,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0x26,0x38,0x20,0x0,0x40,0x44,0xfe,0x40,0x40,0x80,0x88,0x98,0xa0,0xc0,0x80,0x80,0x84,0x84,0x7c,0x0,
++0x4,0x4,0xff,0x4,0x5,0x1,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0x9,0xff,0x0,0x40,0x44,0xfe,0x40,0x40,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x4,0x4,0xff,0x4,0x5,0x1,0x3f,0x21,0x21,0x22,0x22,0x24,0x28,0x20,0x20,0x20,0x40,0x44,0xfe,0x40,0x40,0x8,0xfc,0x8,0x8,0x88,0x48,0x68,0x28,0x8,0x28,0x10,
++0x4,0x4,0xff,0x4,0x0,0x1f,0x10,0x11,0x11,0x11,0x12,0x12,0x4,0x8,0x30,0xc0,0x40,0x44,0xfe,0x40,0x10,0xf8,0x10,0x10,0x10,0x90,0x90,0x90,0x80,0x84,0x84,0x7c,
++0x4,0x4,0xff,0x4,0x8,0x8,0xb,0x8,0xff,0xa,0x9,0x8,0x8,0xa,0xc,0x8,0x40,0x44,0xfe,0x40,0x20,0xc0,0x0,0x4,0xfe,0x0,0x0,0x80,0x40,0x20,0x1c,0x8,
++0x4,0x4,0xff,0x4,0x4,0x8,0x8,0x8,0x8,0x8,0x8,0x14,0x12,0x20,0x41,0x2,0x40,0x44,0xfe,0x40,0x40,0x20,0x20,0x20,0x20,0x50,0x50,0x50,0x88,0x88,0x4,0x2,
++0x4,0x4,0xff,0x5,0x2,0x4,0x8,0x33,0xc0,0x0,0x1f,0x0,0x0,0x0,0x0,0x1,0x40,0x44,0xfe,0x40,0x80,0x40,0x30,0xe,0x84,0x20,0xf0,0x20,0x40,0x40,0x80,0x0,
++0x4,0x4,0xff,0x4,0x8,0x8,0xf,0x12,0x22,0x44,0x4,0x8,0x11,0x22,0x4,0x0,0x40,0x44,0xfe,0x40,0x0,0x8,0xfc,0x48,0x48,0x48,0x88,0x88,0x8,0x8,0x50,0x20,
++0x4,0x4,0xff,0x4,0xc,0x8,0xf,0x11,0x11,0x21,0x2,0x2,0x4,0x8,0x10,0x60,0x40,0x44,0xfe,0x40,0x40,0x0,0xf8,0x10,0x20,0x0,0x80,0x80,0x40,0x30,0xe,0x4,
++0x4,0x4,0xff,0x4,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x14,0x18,0x10,0x40,0x44,0xfe,0x40,0xf8,0x80,0x80,0x80,0x88,0xfc,0x80,0x40,0x40,0x22,0x12,0xe,
++0x4,0x4,0xff,0x4,0x0,0x7,0x4,0x8,0x30,0xf,0x4,0x2,0x1,0x2,0xc,0x70,0x40,0x44,0xfe,0x40,0x0,0xc0,0x48,0x7c,0x0,0xe0,0x40,0x80,0x0,0x80,0x60,0x1c,
++0x4,0x4,0xff,0x4,0x6,0x1,0xff,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x40,0x44,0xfe,0x40,0x40,0x4,0xfe,0x0,0x0,0x40,0x30,0x10,0x0,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x6,0x41,0x7f,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x7f,0x0,0x40,0x44,0xfe,0x40,0x40,0x0,0xfe,0x2,0x4,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x0,0x7f,0x2,0xc,0x8,0xf,0xf8,0x48,0x8,0x8,0x28,0x10,0x40,0x44,0xfe,0x40,0x0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x4,0x4,0xff,0x4,0x0,0x24,0x22,0x21,0x21,0x20,0x20,0x24,0x28,0x30,0x1,0x6,0x40,0x44,0xfe,0x40,0x8,0x8,0x8,0x10,0x10,0x10,0x20,0x20,0x50,0x8c,0x4,0x0,
++0x4,0x4,0xff,0x5,0x1,0xff,0x1,0x1,0x7f,0x3,0x5,0x9,0x31,0xc1,0x1,0x1,0x40,0x44,0xfe,0x40,0x4,0xfe,0x0,0x8,0xfc,0x80,0x40,0x30,0xe,0x4,0x0,0x0,
++0x4,0x4,0xff,0x4,0x8,0x8,0xff,0x8,0x8,0x8,0xf,0x8,0x8,0x8,0xf,0x8,0x40,0x44,0xfe,0x40,0x20,0x24,0xfe,0x20,0x20,0x20,0xe0,0x20,0x20,0x20,0xe0,0x20,
++0x4,0x4,0xff,0x4,0x0,0x7f,0x0,0x1,0x3,0x5,0x19,0x61,0x1,0x1,0xff,0x0,0x40,0x44,0xfe,0x40,0x4,0xfe,0x80,0x0,0x0,0x60,0x18,0x4,0x0,0x4,0xfe,0x0,
++0x4,0x4,0xff,0x4,0x2,0x2,0xff,0x2,0x2,0x4,0x4,0x8,0x8,0x11,0x26,0x40,0x40,0x44,0xfe,0x40,0x20,0x14,0xfe,0x80,0x88,0x98,0xa0,0xc0,0x82,0x82,0x7e,0x0,
++0x4,0x4,0xff,0x4,0x2,0x2,0xff,0x4,0x4,0x7,0xa,0x9,0x10,0x21,0x46,0x18,0x40,0x44,0xfe,0x40,0x40,0x24,0xfe,0x0,0x0,0xf0,0x20,0x40,0x80,0x60,0x1c,0x8,
++0x4,0x4,0xff,0x4,0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x40,0x44,0xfe,0x40,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x4,0x4,0xff,0x4,0x0,0xf,0x8,0x8,0xf,0x8,0x8,0xf,0x8,0x8,0xff,0x0,0x40,0x44,0xfe,0x40,0x20,0xf0,0x20,0x20,0xe0,0x20,0x20,0xe0,0x20,0x24,0xfe,0x0,
++0x4,0x4,0xff,0x4,0x1,0x1f,0x11,0x11,0x1f,0x11,0x11,0xff,0x10,0x10,0x10,0x10,0x40,0x44,0xfe,0x40,0x10,0xf8,0x10,0x10,0xf0,0x10,0x14,0xfe,0x10,0x10,0x50,0x20,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x20,0x20,0x27,0x24,0x24,0x24,0x27,0x24,0x20,0x20,0x40,0x44,0xfe,0x40,0x8,0xfc,0x8,0x48,0xe8,0x48,0x48,0x48,0xc8,0x48,0x28,0x10,
++0x4,0x4,0xff,0x4,0x8,0x8,0x10,0x1f,0x30,0x50,0x90,0x10,0x10,0x17,0x10,0x10,0x20,0x24,0xfe,0x20,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x48,0xfc,0x0,0x0,
++0x4,0x4,0xff,0x4,0x8,0x8,0x10,0x17,0x30,0x51,0x90,0x10,0x10,0x10,0x10,0x10,0x40,0x44,0xfe,0x40,0x10,0x10,0x14,0xfe,0x10,0x10,0x90,0x90,0x10,0x10,0x50,0x20,
++0x4,0x4,0xff,0x5,0x2,0x4,0xa,0x31,0xc1,0x3f,0x0,0x0,0xc,0x3,0x0,0x0,0x40,0x44,0xfe,0x40,0x80,0x40,0x30,0xe,0x4,0xf0,0x20,0x40,0x80,0x0,0xc0,0x40,
++0x4,0x4,0xff,0x5,0x2,0xf,0x8,0xa,0x9,0x8,0xf,0x0,0xff,0x0,0x0,0x0,0x40,0x44,0xfe,0x40,0x20,0xf0,0x20,0x20,0x60,0x8,0xfc,0x8,0xc8,0x8,0x50,0x20,
++0x4,0x4,0xff,0x4,0x6,0x38,0x20,0x20,0x3e,0x20,0x20,0x26,0x38,0x20,0x0,0x0,0x40,0x44,0xfe,0x40,0x8,0xfc,0x88,0x88,0x88,0x88,0x88,0xa8,0x90,0x80,0x80,0x80,
++0x4,0x4,0xff,0x4,0x6,0x38,0x22,0x22,0x22,0x22,0x22,0x3c,0x24,0x8,0x10,0x60,0x40,0x44,0xfe,0x40,0x8,0xfc,0x88,0x88,0x88,0x88,0xc8,0xa8,0x90,0x80,0x80,0x80,
++0x4,0x4,0xff,0x4,0x0,0x7f,0x41,0x81,0x1,0x3f,0x1,0x1,0x1,0x1,0x7f,0x0,0x40,0x44,0xfe,0x40,0x0,0xfe,0x2,0x4,0x10,0xf8,0x0,0x0,0x0,0x8,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x0,0x7f,0x40,0x9f,0x4,0x5,0x3f,0x4,0x4,0x4,0x4,0x4,0x40,0x44,0xfe,0x40,0x0,0xfe,0x2,0xe4,0x20,0x20,0xa0,0x20,0x20,0x24,0x14,0x8,
++0x4,0x4,0xff,0x4,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x20,0x20,0x28,0x30,0x20,0x40,0x44,0xfe,0x40,0xf8,0x8,0x8,0xf8,0x80,0x88,0xfc,0x40,0x40,0x22,0x12,0xe,
++0x4,0x4,0xff,0x4,0x3f,0x4,0x4,0x8,0x10,0x60,0x1f,0x10,0x10,0x10,0x1f,0x10,0x40,0x44,0xfe,0x40,0xf8,0x8,0x8,0x8,0x50,0x20,0xf0,0x10,0x10,0x10,0xf0,0x10,
++0x4,0x4,0xff,0x4,0x0,0xff,0x4,0x4,0x3f,0x24,0x24,0x28,0x30,0x20,0x3f,0x20,0x40,0x44,0xfe,0x40,0x4,0xfe,0x40,0x48,0xfc,0x48,0x48,0x38,0x8,0x8,0xf8,0x8,
++0x4,0x4,0xff,0x4,0x1,0xff,0x1,0x3f,0x1,0x3f,0x21,0x3f,0x2,0xc,0x30,0xc0,0x40,0x44,0xfe,0x40,0x4,0xfe,0x0,0xf8,0x8,0xf8,0x0,0xfc,0x84,0x4c,0x30,0xe,
++0x4,0x4,0xff,0x4,0x1,0x1,0x7f,0x1,0x3,0x3c,0x0,0x7f,0x4,0x4,0x8,0x70,0x40,0x44,0xfe,0x40,0x0,0xf8,0x20,0x44,0x84,0x7c,0x10,0xf8,0x80,0x82,0x82,0x7e,
++0x4,0x4,0xff,0x4,0x20,0x20,0x3e,0x20,0x26,0x39,0x1,0xff,0x1,0x1,0x1,0x1,0x40,0x44,0xfe,0x40,0x80,0x98,0xe0,0x80,0x84,0x7c,0x0,0xfe,0x0,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x0,0x4,0x24,0x27,0x24,0x24,0x24,0x24,0x27,0xf8,0x40,0x0,0x40,0x44,0xfe,0x40,0x0,0x40,0x44,0x4c,0x50,0x60,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x4,0x4,0xff,0x4,0x1f,0x10,0x10,0x10,0x1f,0x0,0x3f,0x20,0x20,0x20,0x3f,0x20,0x40,0x44,0xfe,0x40,0xf0,0x10,0x10,0x10,0xf0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x4,0xff,0x4,0x3f,0x20,0x2f,0x20,0x27,0x24,0x24,0x24,0x27,0x20,0x20,0x20,0x40,0x44,0xfe,0x40,0xf8,0x8,0xe8,0x8,0xc8,0x48,0x48,0x48,0xc8,0x8,0x28,0x10,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x20,0x20,0x27,0x24,0x24,0x27,0x20,0x20,0x3f,0x20,0x40,0x44,0xfe,0x40,0x8,0xfc,0x8,0x48,0xe8,0x48,0x48,0xc8,0x8,0x8,0xf8,0x8,
++0x4,0x4,0xff,0x4,0x11,0x11,0x1f,0x21,0x1,0xff,0x3,0x5,0x9,0x11,0x61,0x1,0x40,0x44,0xfe,0x40,0x0,0x20,0xf0,0x0,0x4,0xfe,0x80,0x40,0x20,0x1c,0x8,0x0,
++0x4,0x4,0xff,0x4,0x0,0x7d,0x4,0x8,0x13,0x3c,0x4,0x24,0x19,0xc,0x32,0xc1,0x40,0x44,0xfe,0x40,0x1c,0xe0,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x0,0x6,0xfc,
++0x4,0x4,0xff,0x4,0x1,0x3e,0x2,0xff,0x4,0x8,0x34,0xc4,0x4,0x4,0x8,0x10,0x40,0x44,0xfe,0x40,0xf0,0x0,0x4,0xfe,0x40,0x30,0x4e,0x44,0x40,0x40,0x40,0x40,
++0x4,0x4,0xff,0x4,0x8,0x8,0x10,0x1f,0x30,0x50,0x90,0x10,0x11,0x12,0x14,0x18,0x40,0x44,0xfe,0x40,0x50,0x48,0x40,0xfe,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x4,0x4,0xff,0x4,0x8,0x8,0x17,0x10,0x30,0x50,0x9f,0x10,0x10,0x10,0x17,0x10,0x40,0x44,0xfe,0x40,0x8,0x3c,0xc0,0x40,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x4,0x9,0x10,0x64,0xb,0x18,0x28,0xc8,0x8,0x8,0x8,0x8,0x40,0x44,0xfe,0x40,0x8,0xfc,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
++0x4,0x4,0xff,0x5,0x2,0x4,0x8,0x30,0xdf,0x1,0x1,0x1f,0x1,0x1,0x7f,0x0,0x40,0x44,0xfe,0x40,0x80,0x40,0x30,0xe,0xf4,0x0,0x20,0xf0,0x0,0x8,0xfc,0x0,
++0x4,0x4,0xff,0x5,0x2,0x4,0x8,0x30,0xcf,0x0,0x3f,0x2,0x4,0x8,0x1f,0x0,0x40,0x44,0xfe,0x40,0x80,0x40,0x30,0x4e,0xe4,0x0,0xf8,0x0,0x40,0x20,0xf0,0x10,
++0x4,0x4,0xff,0x14,0x10,0x3f,0x20,0x5f,0x90,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0x40,0x44,0xfe,0x40,0x8,0xfc,0x8,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xa8,0x10,
++0x4,0x4,0xff,0x4,0x2,0x7,0x8,0x14,0x23,0x4,0xf,0x38,0xc8,0x8,0xf,0x8,0x40,0x44,0xfe,0x40,0x0,0xf0,0x20,0xc0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x4,0xff,0x4,0x1,0x7f,0x8,0x6,0x1,0x2,0xc,0x34,0xc4,0x4,0x8,0x10,0x40,0x44,0xfe,0x40,0x8,0xfc,0x20,0xc0,0x0,0xc0,0x70,0x4e,0x44,0x40,0x40,0x40,
++0x4,0x4,0xff,0x4,0x1,0x7f,0x8,0x8,0x14,0x24,0x42,0x1,0x2,0x4,0x18,0x60,0x40,0x44,0xfe,0x40,0x8,0xfc,0x0,0x10,0x4c,0x44,0x80,0x0,0x80,0x60,0x1c,0x8,
++0x4,0x4,0xff,0x4,0x1,0xff,0x2,0x4,0x8,0x1f,0x4,0x4,0x4,0x8,0x10,0x60,0x40,0x44,0xfe,0x40,0x4,0xfe,0x0,0x40,0x20,0xf0,0x90,0x80,0x80,0x84,0x84,0x7c,
++0x4,0x4,0xff,0x4,0x20,0x18,0xb,0x40,0x20,0x28,0x10,0x20,0x60,0x20,0x2f,0x20,0x40,0x44,0xfe,0x40,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x4,0x4,0xff,0x4,0x40,0x7f,0x41,0x89,0xf,0x11,0x21,0x7f,0x1,0x1,0x1,0x1,0x40,0x44,0xfe,0x40,0x0,0xfe,0x2,0x24,0xf0,0x0,0x8,0xfc,0x0,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x40,0x7f,0x41,0x41,0xbd,0x5,0x9,0x9,0x11,0x61,0x5,0x2,0x40,0x44,0xfe,0x40,0x0,0xfe,0x2,0x14,0x20,0xc0,0x40,0x20,0x20,0x1c,0x0,0x0,
++0x4,0x4,0xff,0x4,0x1f,0x0,0xf,0x0,0x1f,0x0,0xff,0x8,0x4,0x4,0x0,0x0,0x40,0x44,0xfe,0x40,0xf0,0x10,0xf0,0x10,0xf0,0x24,0xfe,0x20,0x20,0x20,0xa0,0x40,
++0x4,0x4,0xff,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x14,0x12,0x11,0x10,0x14,0x18,0x10,0x40,0x44,0xfe,0x40,0xf0,0x10,0xf0,0x10,0xf8,0x10,0x20,0x40,0x80,0x60,0x1c,0x8,
++0x4,0x4,0xff,0x4,0x1f,0x10,0x10,0x1f,0x10,0x12,0x11,0x20,0x20,0x43,0x80,0x0,0x40,0x44,0xfe,0x40,0xf0,0x10,0x10,0xf0,0x40,0x20,0x90,0x8e,0x4,0x0,0xc0,0x20,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x0,0xc,0x2,0x18,0x4,0xff,0x1,0x2,0xc,0x30,0x40,0x44,0xfe,0x40,0x0,0xf8,0x8,0x90,0x80,0x80,0x84,0xfe,0x0,0x60,0x18,0x4,
++0x4,0x4,0xff,0x4,0x0,0x7e,0x4,0x8,0xe,0x38,0xc9,0x9,0xa,0x8,0x28,0x10,0x40,0x44,0xfe,0x40,0x20,0x20,0x20,0xa0,0xa8,0xa4,0x24,0x22,0x22,0x20,0xa0,0x40,
++0x4,0x4,0xff,0x4,0x10,0x10,0x23,0x7c,0x8,0x10,0x26,0x78,0x20,0xe,0x73,0x20,0x40,0x44,0xfe,0x40,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x4,0x4,0xff,0x4,0x10,0x10,0x22,0x7d,0x8,0x10,0x26,0x78,0x0,0xe,0x70,0x20,0x40,0x44,0xfe,0x40,0x8,0x8,0x8,0xfe,0x8,0x88,0x48,0x48,0x8,0x8,0x28,0x10,
++0x4,0x4,0xff,0x4,0x10,0x10,0x10,0xfd,0x12,0x10,0x10,0x10,0x1c,0xe1,0x42,0x4,0x40,0x44,0xfe,0x40,0x80,0x84,0xfe,0x4,0x48,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x4,0x4,0xff,0x5,0x1,0x3f,0x1,0x7f,0x40,0x9f,0x0,0x1,0x7f,0x1,0x5,0x2,0x40,0x44,0xfe,0x40,0x10,0xf8,0x0,0xfe,0x2,0xe4,0x80,0x8,0xfc,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x0,0x7c,0x44,0x47,0x44,0x7c,0x44,0x44,0x44,0x7c,0x44,0x0,0x40,0x44,0xfe,0x40,0x10,0x10,0x14,0xfe,0x10,0x90,0x50,0x50,0x10,0x10,0x50,0x20,
++0x4,0x4,0xff,0x4,0xf,0x8,0x8,0xf,0x1,0x3f,0x21,0x21,0x22,0x2c,0x20,0x20,0x40,0x44,0xfe,0x40,0xe0,0x20,0x20,0xe0,0x8,0xfc,0x8,0x8,0xc8,0x48,0x28,0x10,
++0x4,0x4,0xff,0x4,0x1,0x3f,0x1,0x7f,0x5,0x9,0x3f,0xc4,0x4,0x4,0x8,0x30,0x40,0x44,0xfe,0x40,0xf0,0x0,0x4,0xfe,0x40,0x30,0xce,0x44,0xf0,0x10,0x50,0x20,
++0x4,0x4,0xff,0x4,0x6,0x3c,0x4,0xff,0x4,0x5,0x6,0x1c,0x64,0x4,0x15,0x8,0x40,0x44,0xfe,0x40,0x60,0x50,0x44,0xfe,0x40,0x48,0x48,0x30,0x20,0x52,0x8a,0x6,
++0x4,0x4,0xff,0x14,0x10,0x1f,0x20,0x5f,0x12,0x11,0xff,0x22,0x21,0x3f,0x0,0x0,0x40,0x44,0xfe,0x40,0x10,0xf8,0x0,0xf0,0x10,0x14,0xfe,0x10,0x10,0xfc,0x50,0x20,
++0x4,0x4,0xff,0x4,0x8,0x8,0x14,0x15,0x36,0x54,0x94,0x14,0x14,0x10,0x11,0x12,0x40,0x44,0xfe,0x40,0x80,0x84,0xfe,0x88,0x88,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x4,0x4,0xff,0x4,0x8,0x8,0x10,0x17,0x30,0x52,0x91,0x11,0x11,0x10,0x1f,0x10,0x40,0x44,0xfe,0x40,0x80,0x40,0x48,0xfc,0x0,0x18,0x10,0x10,0x20,0x24,0xfe,0x0,
++0x4,0x4,0xff,0x5,0x2,0x4,0x8,0x3f,0xc1,0x1,0x3f,0x1,0x9,0x11,0x25,0x2,0x40,0x44,0xfe,0x40,0x80,0x40,0x30,0xee,0x4,0x10,0xf8,0x0,0x20,0x18,0x8,0x0,
++0x4,0x4,0xff,0x5,0x2,0x4,0x8,0x3f,0xc0,0x2,0x11,0x9,0x9,0x0,0x7f,0x0,0x40,0x44,0xfe,0x40,0x80,0x40,0x30,0xee,0x4,0x10,0x10,0x20,0x20,0x48,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x0,0x7f,0x11,0x9,0x3f,0x0,0x1,0x1,0xff,0x1,0x5,0x2,0x40,0x44,0xfe,0x40,0xf8,0x10,0x10,0x20,0xf0,0x40,0x80,0x4,0xfe,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x11,0x9,0x2,0xff,0x4,0x8,0x6,0x1,0x6,0x38,0x40,0x44,0xfe,0x40,0xf8,0x10,0x10,0x20,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x4,0x4,0xff,0x4,0x20,0x14,0xb,0x14,0x64,0xc,0x14,0x24,0xc5,0x5,0x2a,0x14,0x40,0x44,0xfe,0x40,0x50,0x48,0xfe,0x40,0x60,0xa0,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x4,0x4,0xff,0x4,0x20,0x14,0x8,0x14,0x64,0xd,0x14,0x24,0xc4,0x4,0x29,0x12,0x40,0x44,0xfe,0x40,0x20,0x20,0xa4,0xa4,0xa8,0x20,0x50,0x50,0x90,0x88,0xe,0x4,
++0x4,0x4,0xff,0x4,0x1,0x3f,0x8,0x4,0x4,0xff,0x1,0x1,0x3f,0x1,0x1,0x1,0x40,0x44,0xfe,0x40,0x10,0xf8,0x20,0x40,0x84,0xfe,0x0,0x10,0xf8,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x1,0x7f,0x40,0x9f,0x0,0x7f,0x4,0x4,0x4,0x8,0x10,0x60,0x40,0x44,0xfe,0x40,0x0,0xfe,0x2,0xf4,0x0,0xfc,0x80,0x80,0x80,0x84,0x84,0x7c,
++0x4,0x4,0xff,0x4,0x1,0x1f,0x10,0x1f,0x10,0x1f,0x12,0x11,0x10,0x14,0x18,0x10,0x40,0x44,0xfe,0x40,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x20,0xc0,0x60,0x1e,0x4,
++0x4,0x4,0xff,0x4,0x7f,0x42,0x8f,0x8,0xb,0x8,0x8,0xf,0x0,0x7f,0x0,0x0,0x40,0x44,0xfe,0x40,0xfe,0x2,0xe4,0x20,0x20,0xa0,0x48,0xfc,0x8,0xc8,0x28,0x10,
++0x4,0x4,0xff,0x4,0x10,0x17,0x20,0x7e,0xa,0x12,0x23,0x7c,0x0,0xe,0x70,0x20,0x40,0x44,0xfe,0x40,0x48,0xfc,0x40,0x48,0x48,0x48,0xf8,0x48,0x40,0x42,0x42,0x3e,
++0x4,0xff,0x5,0x3f,0x1,0x1f,0x1,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x40,0xfe,0x40,0xf8,0x0,0xf0,0x4,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x30,
++0x4,0x4,0xff,0x4,0x8,0x7f,0x8,0xf,0x8,0xf,0x8,0x8,0xff,0x4,0x8,0x30,0x40,0x44,0xfe,0x40,0x28,0xfc,0x20,0xe0,0x20,0xe0,0x20,0x24,0xfe,0x40,0x30,0x8,
++0x4,0x4,0xff,0x4,0x8,0x8,0xfe,0x8,0x1c,0x1a,0x28,0x48,0x89,0x9,0xa,0x8,0x40,0x44,0xfe,0x40,0x1c,0xe0,0x80,0x84,0xfe,0x90,0x90,0x90,0x10,0x10,0x10,0x10,
++0x4,0x4,0x7f,0x4,0x8,0xa,0x7f,0x8,0x1c,0x1a,0x29,0x48,0x88,0x8,0x9,0x8,0x40,0x44,0xfe,0x40,0x0,0x50,0x50,0x50,0x88,0xae,0x24,0x40,0x50,0x88,0xfc,0x4,
++0x8,0x8,0xff,0x8,0xf,0x1,0x3f,0x21,0x3f,0x1,0x7f,0x1,0x3f,0x1,0xff,0x0,0x20,0x24,0xfe,0x20,0xe0,0x8,0xfc,0x8,0xf8,0x0,0xfc,0x0,0xf8,0x0,0xfe,0x0,
++0x4,0x4,0xff,0x5,0x1,0x7f,0x2,0x4,0xf,0x30,0xdf,0x1,0x9,0x11,0x25,0x2,0x40,0x44,0xfe,0x40,0x8,0xfc,0x80,0x40,0xf0,0xe,0xf4,0x0,0x20,0x18,0x8,0x0,
++0x4,0xff,0x5,0x7f,0x1,0x3f,0x1,0xff,0x1,0x3f,0x2,0xff,0x4,0x8,0x7,0x38,0x40,0xfe,0x40,0xfc,0x0,0xf0,0x14,0xfe,0x10,0xf0,0x4,0xfe,0x40,0x80,0x80,0x78,
++0x4,0x4,0xff,0x4,0x10,0x10,0xff,0x11,0x11,0x1d,0xf2,0x52,0x14,0x18,0x50,0x23,0x40,0x44,0xfe,0x40,0x90,0x88,0xfe,0x0,0xf8,0x88,0x90,0x50,0x20,0x50,0x8e,0x4,
++0x4,0x4,0xff,0x4,0x8,0xf,0x8,0xa,0xff,0x8,0x2c,0x2b,0x49,0x88,0x28,0x11,0x40,0x44,0xfe,0x40,0x0,0x7c,0x4,0x44,0x44,0x28,0x28,0x10,0x28,0x48,0x86,0x4,
++0x4,0x4,0xff,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x0,0x3f,0x20,0x3f,0x20,0x3f,0x20,0x40,0x44,0xfe,0x40,0xf0,0x10,0xf0,0x10,0xf0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x4,0x4,0xff,0x4,0x10,0x10,0x7c,0x54,0x54,0x55,0x55,0x55,0x5d,0x11,0x11,0x11,0x40,0x44,0xfe,0x40,0x20,0x24,0x3e,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x4,0x4,0xff,0x4,0xd,0x31,0x21,0x21,0x3d,0x21,0x21,0x3f,0x2,0x4,0x18,0x60,0x40,0x44,0xfe,0x40,0x8,0x7c,0x8,0x8,0x78,0x8,0x8,0xf8,0x80,0x60,0x1c,0x8,
++0x4,0xff,0x4,0x9,0x8,0x1f,0x10,0x30,0x5f,0x90,0x10,0x1f,0x10,0x10,0x1f,0x10,0x40,0xfe,0x40,0x0,0x88,0xfc,0x80,0x90,0xf8,0x80,0x90,0xf8,0x80,0x88,0xfc,0x0,
++0x4,0x4,0xff,0x5,0x2,0x3f,0x21,0x3f,0x22,0x3f,0x5,0x9,0xff,0x1,0x1,0x1,0x40,0x44,0xfe,0x40,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0x4,0xfe,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x3d,0x25,0x25,0x3d,0x25,0x25,0x3d,0x25,0x25,0x45,0x55,0x89,0x40,0x44,0xfe,0x40,0xf8,0x8,0x48,0x30,0x0,0xf8,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x4,0x4,0xff,0x4,0xf,0x8,0x10,0x3f,0x51,0x11,0x1f,0x12,0x2,0x4,0x18,0x60,0x40,0x44,0xfe,0x40,0xe0,0x20,0x48,0xfc,0x8,0x8,0xf8,0x80,0xa0,0x94,0x84,0x7c,
++0x4,0x4,0xff,0x4,0x8,0xf,0x10,0x26,0x78,0xa0,0x24,0x3e,0x20,0x20,0x3f,0x20,0x40,0x44,0xfe,0x40,0x0,0xf0,0x20,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x4,0x4,0xff,0x4,0x1,0x7f,0x8,0x8,0x14,0x22,0x1,0xff,0x1,0x1,0x1,0x1,0x40,0x44,0xfe,0x40,0x8,0xfc,0x20,0x20,0x50,0x88,0x0,0xfe,0x0,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x10,0x8,0xff,0x10,0x1e,0x13,0x12,0x22,0x22,0x42,0x8a,0x4,0x40,0x44,0xfe,0x40,0x20,0x20,0x50,0x50,0x8e,0x4,0x60,0x10,0x0,0xc0,0x30,0x8,
++0x4,0x4,0xff,0x4,0x40,0x33,0x12,0x82,0x4b,0x12,0x22,0xe3,0x22,0x22,0x3f,0x20,0x40,0x44,0xfe,0x40,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x14,0xfe,0x0,
++0x4,0xff,0x4,0x41,0x7f,0x40,0x80,0x7f,0x4,0x4,0xf,0x18,0x28,0x48,0xf,0x8,0x40,0xfe,0x40,0x0,0xfe,0x2,0x4,0xfc,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x4,0xff,0x4,0x41,0x7f,0x40,0x8f,0x8,0x8,0xf,0x8,0xf,0x8,0x8,0xf,0x8,0x40,0xfe,0x40,0x0,0xfe,0x2,0xe4,0x20,0x20,0xe0,0x0,0xf0,0x10,0x10,0xf0,0x0,
++0x4,0x4,0xff,0x4,0x41,0x7f,0x50,0x9e,0x12,0x22,0x52,0xc,0x4,0x8,0x30,0x40,0x40,0x44,0xfe,0x40,0x0,0xfe,0x2,0xfc,0x88,0x88,0x88,0xa8,0x92,0x82,0x7e,0x0,
++0x4,0x4,0xff,0x4,0x40,0x7f,0x42,0x84,0x1f,0x1,0x2,0x1f,0x9,0x9,0x31,0x3,0x40,0x44,0xfe,0x40,0x0,0xfe,0x2,0x24,0xc0,0x0,0x20,0xf0,0x20,0x18,0x8,0x0,
++0x4,0x4,0xff,0x4,0x7c,0x9,0x11,0x11,0x15,0x39,0xd2,0x12,0x12,0x14,0x58,0x20,0x40,0x44,0xfe,0x40,0x1c,0xe0,0x50,0x50,0x50,0x50,0x50,0x48,0x48,0x54,0xf6,0x0,
++0x4,0x4,0xff,0x4,0x1f,0x0,0x40,0x51,0x49,0x45,0x45,0x49,0x53,0x41,0x7f,0x40,0x40,0x44,0xfe,0x40,0xe0,0x20,0x44,0x94,0x24,0x44,0x44,0x34,0x14,0x4,0xfc,0x4,
++0x4,0xff,0x4,0x8,0x7e,0x8,0x3e,0x8,0x7e,0x9,0x1,0xff,0x2,0x4,0x18,0x60,0x40,0xfe,0x40,0x8,0xfc,0x48,0x48,0x48,0xa8,0x10,0x4,0xfe,0x80,0x40,0x30,0xc,
++0x4,0x4,0xff,0x4,0x8,0x7f,0x8,0x8,0x7f,0x0,0x8,0x7f,0x8,0xf,0x78,0x20,0x40,0x44,0xfe,0x40,0x8,0x8,0xfe,0x8,0x48,0x28,0x28,0x8,0x8,0x8,0x28,0x10,
++0x4,0xff,0x4,0x8,0x3f,0x8,0xf,0x8,0xf,0x8,0xff,0x12,0x14,0x10,0x1f,0x0,0x40,0xfe,0x40,0x20,0xf8,0x20,0xe0,0x20,0xe0,0x24,0xfe,0x80,0x40,0x10,0xf8,0x0,
++0x4,0x4,0xff,0x4,0x8,0x8,0x7e,0x8,0x18,0x1c,0x2a,0x28,0x48,0x88,0x8,0x8,0x40,0x44,0xfe,0x40,0x4,0xfe,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x20,0x3f,0x24,0x3f,0x25,0x29,0x2a,0x44,0x5b,0x80,0x40,0x44,0xfe,0x50,0x48,0xfc,0x40,0xc8,0x48,0xd0,0x20,0x20,0x60,0xa2,0x12,0xe,
++0x4,0x4,0xff,0x4,0x0,0x3f,0x20,0x2f,0x28,0x2a,0x2a,0x2a,0x2a,0x45,0x44,0x98,0x40,0x44,0xfe,0x50,0x28,0xfc,0x20,0xa0,0xa4,0xa4,0xa8,0xa8,0x90,0x32,0xca,0x86,
++0x4,0x4,0xff,0x4,0x20,0x3e,0x20,0x2e,0x72,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x40,0x44,0xfe,0x40,0x80,0x98,0xe0,0x84,0x7c,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,
++0x4,0xff,0x4,0xf,0x8,0xf,0x0,0xff,0x8,0xf,0x8,0xf,0x8,0x7f,0x0,0x0,0x44,0xfe,0x40,0xe0,0x20,0xe0,0x4,0xfe,0x20,0xe0,0x20,0xe0,0x28,0xfc,0x20,0x20,
++0x4,0xff,0x5,0x1f,0x11,0x1f,0x1,0xff,0x0,0x1f,0x10,0x11,0x11,0x12,0xc,0x30,0x40,0xfe,0x40,0xf0,0x10,0xf0,0x4,0xfe,0x10,0xf8,0x10,0x10,0x10,0x90,0x60,0x1c,
++0x4,0x4,0xff,0x4,0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x2,0x29,0x29,0x48,0x7,0x40,0x44,0xfe,0x40,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,0x0,0x8,0x24,0x24,0xe0,
++0x4,0xff,0x4,0x3e,0x22,0x3e,0x0,0x1f,0x0,0xff,0x8,0xf,0x0,0x0,0x0,0x0,0x40,0xfe,0x40,0xf8,0x88,0xf8,0x0,0xf0,0x4,0xfe,0x0,0xf0,0x10,0x10,0xa0,0x40,
++0x4,0x4,0xff,0x4,0xb,0xa,0x12,0x13,0x30,0x5f,0x90,0x10,0x11,0x12,0x14,0x10,0x40,0x44,0xfe,0x40,0xf8,0x8,0x8,0xf8,0x40,0xfe,0x40,0xe0,0x50,0x4e,0x44,0x40,
++0x4,0x4,0xff,0x14,0x20,0x7d,0x45,0x45,0x45,0x7d,0x45,0x45,0x45,0x7d,0x44,0x0,0x40,0x44,0xfe,0x40,0x4,0xfe,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,0x2,0xfe,0x0,
++0x4,0xff,0x5,0x7f,0x0,0x1f,0x10,0x1f,0x40,0x7f,0x40,0x9f,0x1,0x1,0x5,0x2,0x40,0xfe,0x40,0xfc,0x0,0xf0,0x10,0xf0,0x0,0xfe,0x2,0xf4,0x0,0x0,0x0,0x0,
++0x4,0x4,0xff,0x4,0x11,0x9,0x7f,0x5,0x39,0x2,0xff,0x4,0xc,0x3,0x6,0x38,0x40,0x44,0xfe,0x40,0x10,0x20,0xfc,0x40,0x38,0x0,0xfe,0x40,0x40,0x80,0x60,0x18,
++0x4,0x4,0xff,0x4,0x20,0x1b,0x4a,0x22,0xa,0x12,0x22,0x64,0x24,0x24,0x28,0x30,0x40,0x44,0xfe,0x40,0x1c,0xe0,0xc,0xf0,0xa4,0xa8,0x90,0x90,0x90,0xa8,0xce,0x84,
++0x4,0xff,0x4,0x41,0x7f,0x40,0x9f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x0,0xff,0x0,0x40,0xfe,0x40,0x0,0xfe,0x2,0xf4,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,
++0x4,0x4,0xff,0x4,0x7e,0x42,0x42,0x7e,0x40,0x49,0x7c,0x40,0x44,0x7e,0x41,0x46,0x40,0x44,0xfe,0x40,0xfc,0x4,0x4,0xfc,0x0,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x4,0xff,0x5,0x7f,0x1,0x1f,0x2,0xff,0x4,0xf,0x31,0xdf,0x5,0x9,0x31,0x1,0x40,0xfe,0x40,0xfc,0x0,0xf0,0x4,0xfe,0x40,0xf0,0xe,0xf4,0x40,0x30,0x8,0x0,
++0x4,0xff,0x5,0x3f,0x1,0xff,0x1,0x7,0x1c,0x67,0x0,0xf,0x8,0xf,0x8,0xf,0x40,0xfe,0x40,0xd0,0x24,0xfe,0x0,0xe8,0x8,0xf8,0x0,0xe0,0x20,0xe0,0x20,0xe0,
++0x4,0xff,0x4,0x3f,0x20,0x2f,0x20,0x3f,0x29,0x2a,0x2c,0x20,0x5f,0x44,0x82,0x0,0x40,0xfe,0x40,0xfc,0x0,0xf0,0x4,0xfe,0x10,0xe0,0x1e,0x20,0xfc,0x20,0x20,0x60,
++0x4,0xff,0x4,0x1f,0x10,0x1f,0x10,0xff,0x8,0x3f,0xc0,0x8,0xf,0x0,0x3f,0x0,0x40,0xfe,0x40,0xf0,0x10,0xf0,0x14,0xfe,0x20,0xf8,0x26,0x20,0xf8,0x8,0xc8,0x30,
++0x4,0x4,0xff,0x4,0x1f,0x11,0x11,0x1f,0x11,0x12,0x14,0x1f,0x29,0x28,0x48,0x7,0x40,0x44,0xfe,0x40,0xf0,0x10,0x10,0xf0,0x10,0x90,0x50,0xf0,0x8,0x84,0x24,0xe0,
++0x4,0x4,0xff,0x4,0x8,0xf,0x10,0x11,0x30,0x5f,0x90,0x13,0x12,0x12,0x13,0x12,0x40,0x44,0xfe,0x80,0x48,0xfc,0x0,0x10,0xa4,0xfe,0x0,0xf8,0x8,0x8,0xf8,0x8,
++0x4,0xff,0x4,0x5,0xa,0x14,0xef,0x0,0x7e,0x2,0x12,0x6,0x1a,0x63,0xa,0x4,0x40,0xfe,0x40,0x40,0x20,0x50,0xee,0x4,0xf8,0x8,0x48,0x18,0x68,0x88,0x28,0x10,
++0x4,0xff,0x5,0x7f,0x0,0x1f,0x10,0x1f,0x0,0x7f,0x40,0x4f,0x48,0x4f,0x40,0x40,0x40,0xfe,0x40,0xfc,0x0,0xf0,0x10,0xf0,0x4,0xfe,0x4,0xe4,0x24,0xe4,0x14,0x8,
++0x4,0x4,0x7f,0x5,0x1f,0x92,0x52,0x13,0x34,0x50,0x9f,0x10,0x20,0x21,0x42,0xc,0x40,0x44,0xfe,0x40,0xfc,0x0,0x10,0xf8,0x40,0x44,0xfe,0xa0,0xa0,0x10,0xe,0x4,
++0x4,0xff,0x4,0x1,0xff,0x14,0x13,0x14,0x1f,0x1,0x7f,0x42,0x44,0x4f,0x40,0x40,0x40,0xfe,0x40,0x4,0xfe,0x50,0x90,0x50,0xf0,0x4,0xfe,0x4,0x24,0xf4,0x14,0x8,
++0x4,0xff,0x4,0x1,0x3f,0x4,0x7f,0x42,0x81,0x3f,0x4,0x7,0x8,0x8,0x10,0x60,0x40,0xfe,0x40,0x10,0xf8,0x40,0xfe,0x2,0x14,0xf8,0x0,0xe0,0x20,0x20,0xa0,0x40,
++0x4,0xff,0x14,0x8,0x7f,0x4,0x3f,0x4,0xff,0x4,0x3f,0xc,0x14,0x24,0xc4,0x4,0x40,0xfe,0x50,0x20,0xfc,0x40,0xf8,0x48,0xfe,0x48,0xf8,0x60,0x50,0x4e,0x44,0x40,
++0x4,0x4,0xff,0x4,0x22,0x14,0xff,0x8,0x49,0x49,0x7f,0x9,0x8,0x8,0x10,0x21,0x40,0x44,0xfe,0x40,0x7c,0x44,0xc4,0x7c,0x44,0x44,0x7c,0x44,0x44,0x84,0x94,0x8,
++0x4,0x4,0xff,0x4,0x20,0x1b,0xa,0x43,0x26,0xb,0x12,0x72,0x12,0x12,0x13,0x12,0x40,0x44,0xfe,0x80,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x88,0x50,0x20,0x90,0xe,0x4,
++0x4,0x4,0xff,0x4,0x7f,0x41,0x82,0xc,0x37,0xc1,0x1f,0x1,0x9,0x5,0x7f,0x0,0x40,0x44,0xfe,0x40,0xfe,0x2,0x84,0x60,0xde,0x4,0xf0,0x0,0x20,0x48,0xfc,0x0,
++0x4,0x4,0xff,0x4,0x7d,0x4,0x28,0x11,0xfd,0x15,0x11,0x11,0x11,0x10,0x50,0x23,0x40,0x44,0xfe,0x40,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x44,0x58,0x84,0x2,
++0x4,0x4,0xff,0x4,0x9,0xff,0x8,0x7f,0x49,0x49,0x7f,0x18,0x1c,0x2a,0xc8,0x9,0x40,0x44,0xfe,0x40,0x20,0xa4,0x7e,0x44,0xa8,0x20,0x20,0x20,0x50,0x48,0x8e,0x4,
++0x4,0xff,0x4,0x3f,0x24,0x3f,0x40,0x7f,0x40,0x9f,0x4,0x7,0xa,0x9,0x1f,0x0,0x40,0xfe,0x40,0xf8,0x48,0xf8,0x0,0xfe,0x22,0xf4,0x0,0xc0,0x40,0x44,0xc4,0x3c,
++0x4,0x4,0xff,0x5,0xa,0x37,0x24,0x27,0x24,0x2f,0x30,0x4,0x4,0x8,0x30,0xc0,0x40,0x44,0xfe,0x40,0x8,0xfc,0x48,0xc8,0x48,0xc8,0x38,0x40,0x40,0x42,0x42,0x3e,
++0x4,0x4,0xff,0x4,0x8,0x11,0x25,0x49,0x17,0x30,0x52,0x92,0x13,0x12,0x14,0x18,0x40,0x44,0xfe,0x40,0x48,0x7c,0x40,0x44,0xfe,0x40,0x48,0x7c,0x40,0xc0,0x3e,0x8,
++0x4,0x4,0xff,0x4,0x8,0x14,0x22,0x41,0xbe,0x0,0x49,0x29,0x2a,0x7,0x78,0x20,0x40,0x44,0xfe,0x40,0x20,0x24,0x3e,0x44,0xa4,0x24,0x24,0x28,0x10,0x28,0x46,0x84,
++0x4,0x4,0xff,0x4,0x11,0x11,0xfe,0x24,0x20,0x3c,0x25,0x27,0x24,0x44,0x54,0x89,0x40,0x44,0xfe,0x40,0x4,0xfe,0x0,0x88,0xfc,0xa0,0x24,0xfe,0x50,0x50,0x8e,0x4,
++0x4,0x4,0xff,0x4,0x17,0x45,0x44,0x4f,0x58,0x6f,0x48,0x4f,0x48,0x4f,0x48,0x40,0x40,0x44,0xfe,0x40,0xfc,0x4,0xa4,0xf4,0x84,0xe4,0x84,0xe4,0x84,0xf4,0x14,0x8,
++0x4,0xff,0x24,0x13,0x42,0x2b,0x12,0x63,0x22,0x23,0x1,0xff,0x5,0x19,0x61,0x1,0x40,0xfe,0x40,0xfc,0x0,0xf8,0x8,0xf8,0x0,0xfc,0x0,0xfe,0x40,0x30,0xc,0x0,
++0x4,0xff,0x4,0x1,0x7f,0x40,0x84,0x3e,0x0,0xff,0x14,0x14,0x14,0x25,0x44,0x83,0x40,0xfe,0x40,0x0,0xfe,0x42,0x74,0x40,0xf8,0x8,0x50,0x20,0x50,0x8a,0x2,0xfe,
++0x4,0xff,0x4,0x1,0x7f,0x48,0x88,0x17,0x30,0x53,0x92,0x13,0x12,0x12,0x13,0x12,0x40,0xfe,0x40,0x0,0xfe,0x2,0x8,0xfc,0x40,0xf8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x4,0xff,0x4,0x3e,0x12,0xa,0x13,0x22,0xc,0x31,0xc6,0x18,0x7,0x18,0x3,0x3c,0x40,0xfe,0x40,0xf8,0x48,0x28,0x48,0x88,0x60,0x98,0x6,0xc0,0x18,0x60,0x80,0x0,
++0x4,0xff,0x5,0x7f,0x1,0x1f,0x11,0x1f,0x11,0x1f,0x1,0x7f,0x12,0x51,0x50,0x8f,0x40,0xfe,0x40,0xfc,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x8,0xfc,0x0,0x14,0x12,0xf2,
++0x4,0xff,0x4,0x7f,0x4,0x3f,0x24,0x3f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x1,0x1,0x40,0xfe,0x40,0xfc,0x40,0xf8,0x48,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,0x0,
++0x4,0xff,0x4,0x3f,0x28,0x25,0x3f,0x22,0x2a,0x2a,0x2a,0x2f,0x42,0x42,0x84,0x8,0x40,0xfe,0x40,0xfc,0xa0,0x20,0xbe,0x42,0x94,0x90,0x90,0xa8,0xa8,0x28,0x46,0x84,
++0x4,0xff,0x4,0xff,0x10,0x31,0x4a,0x96,0x25,0x4d,0x15,0x25,0x44,0x84,0x28,0x10,0x40,0xfe,0x40,0x10,0x50,0x7c,0x90,0x10,0x7c,0x10,0x14,0xfe,0x80,0x40,0x3e,0xc,
++0x4,0xff,0x4,0x1f,0x10,0x1f,0x10,0xff,0x21,0x3f,0x21,0x3f,0x21,0xff,0x1,0x1,0x40,0xfe,0x40,0xf0,0x10,0xf0,0x14,0xfe,0x0,0x7c,0x44,0x28,0x10,0xa8,0x4e,0x84,
++0x4,0xff,0x4,0x3e,0x22,0x3e,0x0,0xff,0x22,0x3e,0x22,0x3e,0x22,0xff,0x2,0x2,0x40,0xfe,0x40,0x10,0x48,0x48,0x40,0xfe,0x40,0x48,0x48,0x30,0x20,0x52,0x8a,0x4,
++0x4,0xff,0x4,0x3f,0x24,0x3f,0x0,0x7f,0x40,0x9f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x40,0xfe,0x40,0xf8,0x48,0xf8,0x0,0xfe,0x2,0xf4,0x10,0xf0,0x10,0xf0,0x10,0xf0,
++0x4,0xff,0x4,0x3f,0x9,0x5,0xff,0x5,0x9,0x31,0xdf,0x11,0x1f,0x11,0x1f,0x10,0x40,0xfe,0x40,0xf8,0x20,0x44,0xfe,0x40,0x20,0x18,0xf6,0x10,0xf0,0x10,0xf0,0x10,
++0x4,0xff,0x4,0x22,0x14,0x7f,0x49,0x7f,0x49,0x7f,0x8,0xff,0x8,0x8,0x9,0x8,0x40,0xfe,0x40,0xc,0x70,0x40,0x40,0x7e,0x48,0x48,0x48,0x48,0x88,0x88,0x8,0x8,
++0x4,0x4,0xff,0x4,0x3e,0x20,0x3d,0x20,0x3c,0x20,0xff,0x10,0x24,0x24,0x7d,0x2,0x40,0x44,0xfe,0x40,0x90,0x90,0xfc,0x90,0x90,0x94,0xfe,0x0,0x90,0x88,0x4,0x4,
++0x4,0xff,0x4,0x0,0x7e,0x11,0x10,0x1c,0x25,0x54,0x8,0x9,0x10,0x20,0x43,0x0,0x20,0xfe,0x20,0x50,0x50,0xdc,0x50,0x50,0xdc,0x50,0x50,0xdc,0x50,0x54,0xfe,0x0,
++0x4,0xff,0x4,0x3f,0x24,0x3f,0x0,0x7f,0x40,0x9f,0x8,0x1e,0x32,0x4c,0x8,0x70,0x40,0xfe,0x40,0xf8,0x48,0xf8,0x0,0xfe,0x2,0xf4,0x80,0x90,0xa0,0xc4,0x84,0x7c,
++0x4,0xff,0x4,0x12,0x1a,0x2a,0x4f,0x90,0x2f,0x60,0xa7,0x25,0x25,0x29,0x28,0x30,0x40,0xfe,0x40,0x20,0xa4,0xbe,0xc4,0x24,0xa4,0x28,0x28,0x10,0x90,0x28,0x46,0x84,
++0x4,0xff,0x5,0x3f,0x8,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x9,0x28,0x28,0x47,0x40,0xfe,0x40,0xf8,0x20,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0x88,0x24,0xe4,
++0x4,0x4,0xff,0x5,0xff,0x10,0x14,0x25,0x7a,0x10,0x24,0x7c,0x4,0x8,0x10,0x60,0x40,0x40,0xfe,0x40,0xfe,0xa0,0x94,0xfe,0x90,0xfc,0x90,0xfc,0x90,0x94,0xfe,0x80,
++0x4,0x4,0xff,0x4,0x49,0x2a,0xff,0x2a,0x49,0x10,0xff,0x22,0x64,0x18,0x26,0x41,0x40,0x44,0xfe,0x40,0x20,0x24,0x7e,0x84,0x44,0x48,0x48,0x30,0x20,0x50,0x8e,0x4,
++0x4,0x4,0xff,0x4,0x3e,0x23,0x22,0x3e,0x21,0x20,0x3e,0x53,0x52,0x92,0x1e,0x10,0x40,0x44,0xfe,0x40,0x20,0xfc,0x88,0x50,0xfe,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,
++0x4,0xff,0x24,0x23,0x22,0xfa,0x4a,0x4b,0x4a,0x92,0x52,0x22,0x55,0x4c,0x88,0x10,0x40,0xfe,0x40,0xfc,0x0,0xf8,0x0,0xfe,0xa8,0x90,0xce,0x8,0xfe,0x88,0x48,0x18,
++0x4,0xff,0x8,0x3f,0xa,0x9,0x48,0x7f,0x40,0x9f,0x4,0xf,0x1,0x1f,0x1,0x7f,0x40,0xfe,0x20,0xf8,0x20,0x20,0xa0,0xfe,0x2,0xf4,0x40,0xe0,0x0,0xf0,0x0,0xfc,
++0x4,0xff,0x4,0x7f,0x1,0x7f,0x51,0x8d,0x11,0x7f,0x2,0x3f,0x24,0x24,0x24,0x20,0x40,0xfe,0x40,0xfc,0x0,0xfe,0x12,0x64,0x10,0xfc,0x0,0xf8,0x48,0x48,0x48,0x18,
++0x4,0xff,0x4,0x3f,0x1,0xff,0x1,0x3f,0x25,0x3f,0x1,0x3f,0x1,0x7f,0x24,0x42,0x40,0xfe,0x40,0xf8,0x0,0xfe,0x0,0xf8,0x48,0xf8,0x0,0xf8,0x0,0xfc,0x88,0x44,
++0x4,0xff,0x14,0x10,0x3e,0x44,0x88,0x7f,0x49,0x7f,0x49,0x7f,0x0,0xf,0xf0,0x0,0x40,0xfe,0x40,0x44,0x28,0xfe,0x10,0x10,0x7c,0x10,0x10,0xfe,0x10,0x10,0x10,0x10,
++0x4,0xff,0x5,0x7f,0x9,0x8,0x7f,0x40,0x4f,0x48,0x4f,0x1,0xff,0x5,0x19,0x61,0x40,0xfe,0x40,0xfc,0x20,0xa0,0xfc,0x4,0xe4,0x24,0xec,0x0,0xfe,0x40,0x30,0xc,
++0x4,0xff,0x4,0x3e,0x8,0x7e,0x18,0x2d,0x4a,0x4,0x19,0xe9,0x5,0x9,0x15,0x2,0x40,0xfe,0x40,0x44,0x7e,0x94,0x24,0x44,0x98,0x40,0x30,0x2e,0x40,0x20,0x10,0x0,
++0x4,0xff,0x4,0x3f,0x1,0x7f,0x51,0x8d,0x10,0x1f,0x30,0x5f,0x90,0x1f,0x10,0x1f,0x40,0xfe,0x40,0xf8,0x0,0xfe,0x12,0x64,0x90,0xfc,0x80,0xf8,0x80,0xf8,0x80,0xfc,
++0x4,0xff,0x4,0x40,0x30,0x17,0x4,0x5,0xf4,0x15,0x16,0x15,0x14,0x19,0x28,0x47,0x40,0xfe,0x40,0x78,0x40,0xfc,0x44,0xf0,0x44,0x3c,0xa8,0x68,0xa8,0x24,0x40,0xfe,
++0x4,0xff,0x4,0x12,0x13,0x24,0x4f,0x95,0x27,0x65,0xa7,0x21,0x2f,0x21,0x22,0x2c,0x40,0xfe,0x40,0x0,0xdc,0x80,0xc0,0x7e,0xc8,0x48,0xc8,0x8,0xe8,0x8,0x88,0x58,
++0x4,0xff,0x24,0x3f,0x40,0xbf,0x29,0xff,0x25,0x3f,0x2,0xf,0x2,0x1f,0x5,0x39,0x40,0xfe,0x20,0xa4,0x7e,0x84,0x24,0xa8,0x10,0x2e,0x44,0xe0,0x20,0xf0,0x40,0x38,
++0x4,0xff,0x14,0x3f,0x62,0x3e,0x21,0x3e,0x23,0x3e,0x1,0xff,0x5,0x19,0x61,0x1,0x40,0xfe,0x20,0xfc,0x88,0x50,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x40,0x30,0xc,0x0,
++0x2,0x7f,0x2,0x3f,0x22,0x3f,0x2b,0x32,0x21,0x2f,0x21,0x2f,0x41,0x5f,0x81,0x1,0x20,0xfe,0xa0,0xfc,0x10,0xfe,0x54,0x92,0x20,0x3c,0x20,0x3c,0x20,0x3e,0x20,0x20,
++0x0,0x0,0x0,0x0,0x4,0x4,0x4,0x4,0x4,0xff,0x4,0x4,0x8,0x8,0x10,0x20,0x0,0x0,0x0,0x0,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x2,0x1,0x7f,0x4,0x14,0x24,0x48,0x10,0x4,0x4,0xff,0x4,0x4,0x8,0x10,0x20,0x0,0x8,0xfc,0x40,0x50,0x4c,0xc4,0x0,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x1,0x1,0xff,0x2,0x4,0x8,0x30,0xc9,0x9,0x9,0x9,0x9,0x11,0x11,0x21,0x0,0x0,0x4,0xfe,0x80,0x40,0x30,0xe,0x24,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x1,0x1,0xff,0x2,0x4,0x8,0x3f,0xd0,0x14,0x12,0x11,0x12,0x14,0x18,0x1f,0x0,0x0,0x4,0xfe,0x80,0x40,0x20,0xf8,0x26,0x40,0x80,0x0,0x80,0x60,0x20,0xf8,0x0,
++0x1,0x1,0xff,0x2,0x4,0x8,0x3f,0xc8,0xf,0x8,0xf,0x8,0x8,0x7f,0x0,0x0,0x0,0x4,0xfe,0x80,0x40,0x20,0xf8,0x26,0xe0,0x20,0xe0,0x28,0xfc,0x20,0x20,0x20,
++0x2,0x1,0x7f,0x4,0x14,0x24,0x48,0x11,0x1,0xff,0x2,0x2,0x4,0x8,0x30,0xc0,0x0,0x8,0xfc,0x40,0x50,0x4c,0xc4,0x0,0x4,0xfe,0x80,0x80,0x40,0x30,0xe,0x4,
++0x0,0x7f,0x22,0x11,0x12,0x4,0x1f,0x2,0x4,0x1f,0x1,0xff,0x1,0x2,0xc,0x70,0x3c,0xc8,0x8,0x10,0x40,0x20,0xf0,0x0,0x20,0xf0,0x4,0xfe,0x0,0x80,0x60,0x1c,
++0x4,0x24,0x24,0x3d,0x4,0x7c,0x24,0x25,0x44,0x1,0xff,0x1,0x2,0x4,0x18,0x60,0x20,0x20,0x28,0xfc,0x20,0x20,0x28,0xfc,0x0,0x4,0xfe,0x0,0x80,0x40,0x30,0xe,
++0x10,0x10,0x10,0xfe,0x29,0x46,0xfd,0x1,0xff,0x21,0x3d,0x5,0x5,0x5,0x28,0x10,0x80,0x80,0x88,0xfc,0x8,0x8,0xe8,0x28,0x28,0xe8,0x28,0x10,0x2,0x2,0xfe,0x0,
++0x2,0x2,0x2,0x2,0xff,0x2,0x2,0x2,0x2,0x4,0x4,0x4,0x8,0x10,0x20,0x40,0x0,0x0,0x0,0x4,0xfe,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x84,0x84,0x7c,0x0,
++0x20,0x20,0x20,0x20,0xfd,0x29,0x2a,0x28,0x28,0x28,0x28,0x28,0x28,0x48,0x47,0x80,0x80,0x80,0x88,0xfc,0x8,0x8,0x88,0x48,0x48,0x8,0x8,0x88,0x52,0x22,0xfe,0x0,
++0x20,0x20,0x20,0x20,0xfd,0x2a,0x2c,0x28,0x28,0x28,0x29,0x29,0x2a,0x48,0x47,0x80,0x20,0x20,0x50,0x90,0x8,0x6,0x94,0x90,0x90,0x90,0x10,0x10,0x12,0x2,0xfe,0x0,
++0x20,0x22,0x22,0x22,0xfe,0x2a,0x28,0x28,0x2b,0x2a,0x2a,0x2a,0x2f,0x48,0x47,0x80,0x90,0x90,0xa0,0xfc,0x80,0x90,0x88,0x80,0xf8,0xa8,0xa8,0xa8,0xfe,0x2,0xfe,0x0,
++0x10,0x10,0x10,0x10,0xfc,0x10,0x10,0x14,0x18,0x30,0xd0,0x10,0x10,0x10,0x50,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x12,0x11,0x12,0xfe,0x12,0x12,0x16,0x1a,0x32,0xd2,0x12,0x12,0x12,0x52,0x20,0x0,0x4,0x7e,0x84,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x14,0x8,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x17,0x14,0x18,0x31,0xd0,0x13,0x10,0x10,0x50,0x20,0x40,0x40,0x48,0xfc,0x40,0x44,0xfe,0x80,0x80,0xf8,0x8,0x10,0xd0,0x20,0x10,0x8,
++0x10,0x10,0x10,0x10,0xfb,0x12,0x12,0x1b,0x32,0xd2,0x13,0x12,0x10,0x10,0x50,0x20,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x40,0x40,0x40,0x40,
++0x10,0x10,0x10,0x11,0xfd,0x13,0x15,0x15,0x19,0x31,0xd1,0x11,0x11,0x11,0x51,0x21,0x88,0x88,0x88,0x8,0x8,0xfe,0x8,0x48,0x28,0x28,0x8,0x8,0x8,0x8,0x28,0x10,
++0x10,0x10,0x10,0x11,0xff,0x10,0x11,0x15,0x19,0x37,0xd1,0x11,0x11,0x11,0x52,0x24,0x40,0x40,0x90,0x8,0xfc,0x4,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x11,0x11,0x12,0xfa,0x14,0x1f,0x11,0x1a,0x32,0xd4,0x1f,0x10,0x10,0x50,0x21,0x20,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xa4,0xa4,0x44,0x44,0x94,0x8,
++0x10,0x10,0x10,0x10,0xff,0x10,0x10,0x17,0x18,0x30,0xd3,0x12,0x12,0x12,0x53,0x22,0x40,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x17,0x10,0xfc,0x17,0x10,0x15,0x1a,0x35,0xd9,0x11,0x11,0x12,0x52,0x24,0x8,0x3c,0xc0,0x40,0x84,0xfe,0xa0,0x10,0x8,0x16,0x14,0x10,0x10,0x10,0x10,0x10,
++0x11,0x11,0x12,0x11,0xfd,0x10,0x10,0x14,0x19,0x31,0xd2,0x14,0x10,0x10,0x50,0x23,0x24,0x24,0x48,0x24,0x24,0x80,0x84,0xfe,0x4,0x84,0x48,0x28,0x10,0x20,0xc0,0x0,
++0x10,0x11,0x11,0x11,0xfd,0x10,0x13,0x16,0x1a,0x32,0xd3,0x12,0x12,0x12,0x52,0x21,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x44,0x44,0x44,0xfc,0x4,0x0,0x2,0x2,0xfe,
++0x10,0x10,0x17,0x12,0xfd,0x11,0x10,0x14,0x1b,0x30,0xd1,0x10,0x10,0x10,0x50,0x20,0x8,0x7c,0x80,0x48,0x48,0x50,0x20,0x8,0xfe,0x8,0x8,0x88,0x88,0x8,0x28,0x10,
++0x10,0x17,0x11,0x11,0xff,0x11,0x11,0x17,0x19,0x32,0xd3,0x15,0x15,0x19,0x51,0x21,0x8,0xfc,0x8,0x8,0xfe,0x8,0x8,0xf8,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x13,0x10,0x10,0xfc,0x17,0x10,0x15,0x1a,0x34,0xd9,0x11,0x12,0x14,0x51,0x20,0x8,0xfc,0x40,0x40,0x84,0xfe,0xa0,0x10,0x4e,0x44,0x68,0x54,0x54,0x44,0x40,0x80,
++0x20,0x2f,0x24,0x24,0xfc,0x27,0x24,0x24,0x2f,0x34,0xe4,0x24,0x2f,0x20,0xa0,0x40,0x0,0xfc,0xa4,0xa4,0xa4,0xa8,0xa4,0xa4,0xa2,0xa2,0xa2,0xb4,0xe8,0xa0,0xa0,0xa0,
++0x10,0x13,0x12,0x12,0xff,0x12,0x12,0x17,0x1a,0x32,0xd3,0x12,0x14,0x14,0x5b,0x20,0x4,0xfe,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x10,0x17,0xf8,0x11,0x12,0x15,0x18,0x30,0xd7,0x10,0x12,0x12,0x55,0x20,0x40,0x40,0x48,0xfc,0xa0,0x10,0x8,0xf6,0x4,0x8,0xfc,0x40,0x50,0x4c,0x44,0x80,
++0x10,0x10,0x17,0x10,0xfc,0x11,0x17,0x10,0x18,0x33,0xd2,0x12,0x13,0x10,0x50,0x20,0x40,0x48,0xfc,0x40,0xa0,0x14,0xfe,0x8,0x8,0xc8,0x48,0x48,0xc8,0x8,0x28,0x10,
++0x20,0x27,0x24,0x24,0xfd,0x24,0x24,0x25,0x2c,0x34,0xe4,0x27,0x24,0x24,0xa7,0x44,0x4,0xfe,0x4,0x4,0xf4,0x44,0x44,0xf4,0x44,0x54,0x44,0xfc,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x13,0x12,0xfe,0x13,0x12,0x16,0x1b,0x30,0xd1,0x1f,0x10,0x10,0x50,0x20,0x40,0x84,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x11,0x11,0x11,0x13,0xfe,0x14,0x12,0x10,0x1b,0x30,0xd1,0x12,0x14,0x10,0x50,0x20,0x0,0x0,0x4,0xfe,0x84,0x94,0xa4,0x84,0xf4,0x84,0xc4,0xb4,0x94,0x84,0x14,0x8,
++0x10,0x10,0x10,0x17,0xfc,0x11,0x10,0x17,0x18,0x30,0xd3,0x12,0x12,0x12,0x53,0x22,0x80,0x40,0x48,0xfc,0x0,0x10,0xa4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x13,0x12,0xfe,0x13,0x12,0x16,0x1a,0x33,0xd2,0x12,0x14,0x14,0x59,0x22,0x40,0x24,0xfe,0x4,0x4,0xfc,0x20,0x28,0x24,0xfe,0x50,0x50,0x88,0x88,0x6,0x4,
++0x10,0x10,0x13,0x12,0xfe,0x13,0x12,0x16,0x1a,0x32,0xd2,0x12,0x14,0x14,0x58,0x20,0x40,0x24,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x84,0xfc,0x84,0xfc,0x84,0x84,0x94,0x88,
++0x10,0x13,0x12,0x17,0xfa,0x12,0x13,0x10,0x1b,0x32,0xd2,0x12,0x12,0x10,0x51,0x26,0x8,0xfc,0x48,0xfe,0x48,0x48,0xf8,0x0,0xf8,0x8,0x48,0x48,0x48,0xb0,0x8,0x4,
++0x10,0x12,0x12,0x17,0xfa,0x12,0x12,0x16,0x1b,0x30,0xd7,0x10,0x11,0x12,0x54,0x20,0x90,0x90,0x94,0xfe,0x90,0x90,0xf0,0x0,0xfc,0x40,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x10,0x10,0x17,0x10,0xfc,0x11,0x12,0x14,0x1b,0x32,0xd3,0x12,0x13,0x10,0x5f,0x20,0x40,0x48,0xfc,0x40,0xe0,0x50,0x4e,0x44,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x0,
++0x10,0x17,0x14,0x15,0xfd,0x15,0x15,0x15,0x1c,0x37,0xd4,0x15,0x14,0x14,0x57,0x20,0x8,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x88,0x90,0x60,0x98,0xfe,0x0,
++0x20,0x24,0x24,0x27,0xf4,0x28,0x37,0x22,0x32,0x2f,0xe2,0x22,0x23,0x22,0xa0,0x41,0x20,0x20,0x20,0xa4,0x3e,0x44,0xa8,0x20,0x20,0xa0,0x20,0x50,0x50,0x88,0x8e,0x4,
++0x10,0x10,0x10,0x11,0xfe,0x15,0x18,0x13,0x1a,0x33,0xd2,0x13,0x12,0x12,0x52,0x22,0x40,0x40,0xa0,0x10,0x8,0xf6,0x0,0xc4,0x54,0xd4,0x54,0xd4,0x54,0x44,0x54,0xc8,
++0x10,0x10,0x17,0x10,0xfd,0x10,0x1f,0x14,0x1b,0x32,0xd2,0x13,0x12,0x12,0x53,0x22,0x80,0x48,0xfc,0x0,0x10,0xa4,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x14,0x17,0x14,0xfc,0x13,0x10,0x13,0x1a,0x33,0xd2,0x13,0x12,0x10,0x57,0x20,0x80,0x40,0xfe,0x2,0x8,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x4,0xfe,0x0,
++0x20,0x27,0x24,0x24,0xff,0x25,0x24,0x27,0x2c,0x34,0xe7,0x24,0x28,0x28,0xb1,0x42,0x4,0xfe,0x4,0x4,0xfc,0x8,0x90,0xfc,0x90,0x94,0xfe,0x90,0x90,0x90,0x10,0x10,
++0x10,0x17,0x10,0x14,0xfb,0x11,0x12,0x13,0x1c,0x30,0xd7,0x10,0x10,0x11,0x52,0x24,0x20,0xa8,0xb0,0xa4,0x28,0x10,0x8,0xf6,0x44,0x40,0xfc,0x80,0xa0,0x10,0x8,0x4,
++0x10,0x10,0x10,0x11,0xfd,0x10,0x17,0x14,0x19,0x36,0xd1,0x16,0x11,0x16,0x50,0x20,0x80,0x80,0xf8,0x8,0xf0,0x14,0xfe,0x88,0x50,0xa0,0x30,0x68,0xae,0x24,0xa0,0x40,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x13,0x16,0x1a,0x32,0xd2,0x14,0x1a,0x12,0x54,0x20,0x48,0x7c,0x40,0xfc,0x44,0x48,0xf8,0x40,0x44,0x3c,0x0,0xa0,0x94,0x82,0x8a,0x78,
++0x10,0x13,0x12,0x12,0xff,0x12,0x12,0x17,0x1a,0x33,0xd0,0x11,0x15,0x15,0x59,0x20,0x8,0xfc,0x48,0x48,0xf8,0x48,0xa8,0x18,0x8,0xf8,0x0,0x40,0x44,0x12,0x12,0xf0,
++0x10,0x10,0x17,0x14,0xfc,0x15,0x15,0x15,0x1d,0x35,0xd5,0x15,0x15,0x16,0x58,0x23,0x8,0x7c,0xa0,0x3c,0x20,0xfe,0x22,0xf8,0x24,0x3c,0x0,0x78,0x48,0x4a,0x8a,0x6,
++0x12,0x11,0x10,0x17,0xf8,0x10,0x17,0x10,0x1f,0x30,0xd7,0x11,0x12,0x14,0x58,0x20,0x8,0x10,0xa4,0xfe,0xa0,0xa4,0xfe,0xa4,0xfe,0xa4,0xfc,0xb0,0xa8,0xa6,0xa4,0xa0,
++0x20,0x28,0x25,0x20,0xff,0x22,0x2a,0x2a,0x2a,0x3a,0xef,0x22,0x22,0x24,0xa8,0x51,0x4,0xbe,0x24,0x24,0xe4,0x3c,0xa4,0xa4,0xa4,0xbc,0xa4,0xa4,0x44,0x44,0x94,0x8,
++0x10,0x13,0x12,0x12,0xff,0x12,0x12,0x17,0x1a,0x32,0xd3,0x15,0x15,0x15,0x59,0x21,0x4,0xfe,0x4,0x4,0xfc,0x94,0x90,0xfc,0x90,0x94,0xfe,0x40,0x28,0x10,0x8e,0x4,
++0x10,0x17,0x10,0x10,0xff,0x14,0x14,0x17,0x18,0x34,0xd2,0x12,0x14,0x10,0x52,0x21,0x4,0xbe,0x84,0x84,0xbc,0x20,0x24,0xbe,0x84,0xa4,0x94,0x94,0xa4,0x84,0x94,0x8,
++0x10,0x13,0x11,0x10,0xfb,0x10,0x17,0x14,0x1b,0x34,0xd0,0x1f,0x11,0x12,0x54,0x20,0x0,0xf8,0x10,0xe0,0x18,0x0,0xbc,0xa4,0x18,0xa4,0x40,0xfe,0x50,0x48,0x46,0x40,
++0x10,0x17,0x14,0x17,0xfc,0x17,0x14,0x11,0x1b,0x30,0xd0,0x17,0x11,0x12,0x54,0x20,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x84,0x10,0xe0,0x40,0x88,0xfc,0x50,0x4c,0x44,0xc0,
++0x10,0x17,0x14,0x15,0xfd,0x16,0x13,0x14,0x18,0x37,0xd1,0x12,0x11,0x10,0x51,0x26,0x0,0xbc,0xa4,0xac,0xac,0x34,0x18,0xa4,0x80,0xfe,0x10,0x10,0x20,0xe0,0x98,0x4,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x13,0x16,0x1a,0x32,0xd4,0x14,0x15,0x15,0x5a,0x20,0x40,0x24,0xfe,0x88,0x88,0x88,0xfe,0x88,0x88,0xf8,0x88,0x0,0x54,0x52,0x52,0x0,
++0x20,0x20,0x27,0x21,0xfa,0x2f,0x24,0x27,0x2c,0x37,0xe4,0x24,0x3f,0x20,0xa0,0x40,0x0,0x10,0x90,0x24,0x3e,0xc4,0xa4,0xa8,0xa8,0xa8,0x90,0xd0,0xa8,0xa8,0xc6,0x84,
++0x10,0x17,0x10,0x14,0xfa,0x12,0x14,0x10,0x1b,0x32,0xd2,0x13,0x12,0x12,0x53,0x22,0x4,0xbe,0x84,0xa4,0x94,0x94,0xa4,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x12,0x12,0x12,0xff,0x12,0x12,0x17,0x18,0x37,0xd5,0x15,0x15,0x17,0x50,0x21,0x0,0x4,0x7e,0x10,0xa4,0x7e,0x44,0xd4,0x54,0x54,0x54,0x54,0x54,0x20,0x4c,0x82,
++0x11,0x13,0x14,0x17,0xfc,0x17,0x14,0x17,0x18,0x37,0xd0,0x13,0x12,0x13,0x52,0x23,0x0,0xf0,0x24,0xfe,0x44,0xfc,0x44,0xfc,0x0,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,
++0x12,0x11,0x17,0x10,0xfb,0x12,0x13,0x12,0x1a,0x33,0xd0,0x1f,0x12,0x11,0x50,0x20,0x8,0x10,0xfc,0xa8,0xfc,0xa8,0x18,0xe8,0x8,0xf8,0x14,0xfe,0x10,0x10,0x50,0x20,
++0x10,0x10,0x17,0x15,0xfa,0x14,0x13,0x12,0x1b,0x30,0xd7,0x14,0x17,0x10,0x50,0x20,0x80,0x40,0xfe,0x12,0x48,0x44,0xf8,0x48,0xf8,0x40,0xfc,0x44,0xfc,0x40,0x40,0x40,
++0x22,0x22,0x22,0x2f,0xf2,0x2f,0x28,0x2f,0x38,0xef,0x22,0x2f,0x22,0x22,0xa2,0x42,0x10,0x10,0x28,0xa8,0x44,0x82,0xfc,0x90,0x90,0x94,0x7e,0x90,0x10,0x10,0x10,0x10,
++0x10,0x17,0x14,0x14,0xff,0x10,0x17,0x10,0x1b,0x32,0xd3,0x11,0x13,0x15,0x59,0x21,0x4,0xfe,0xa4,0xa4,0xfc,0x0,0xfe,0x0,0xf8,0x8,0xf8,0x44,0x28,0x10,0x8e,0x4,
++0x20,0x20,0x27,0x24,0xf4,0x27,0x24,0x34,0x27,0xe6,0x26,0x2a,0x2a,0x33,0xa2,0x40,0x10,0x8,0xc8,0x7e,0x40,0xd4,0x14,0x3e,0xc8,0x48,0x7e,0x48,0x48,0xc8,0x48,0x8,
++0x10,0x13,0x12,0x12,0xfb,0x10,0x17,0x14,0x1f,0x34,0xd7,0x10,0x1f,0x11,0x51,0x26,0x80,0xf8,0x88,0x48,0xf8,0x0,0xfc,0x44,0xfc,0x44,0xfc,0x0,0xfe,0x10,0x10,0x10,
++0x10,0x17,0x10,0x12,0xf8,0x12,0x11,0x11,0x1a,0x37,0xda,0x13,0x12,0x12,0x53,0x22,0x0,0xbc,0x84,0x94,0x84,0x94,0x20,0xfe,0x20,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x20,0x27,0x20,0x2f,0xfa,0x21,0x22,0x28,0x37,0xe4,0x2f,0x34,0x27,0x24,0xa7,0x44,0x8,0xfc,0x40,0xfe,0x4a,0x50,0x48,0x40,0xfc,0x40,0xf8,0x40,0xf8,0x40,0xfe,0x0,
++0x12,0x13,0x15,0x13,0xfe,0x12,0x13,0x18,0x17,0x31,0xd2,0x1d,0x10,0x13,0x51,0x26,0x10,0xde,0x28,0xf8,0x88,0x48,0xf8,0x80,0xfe,0x50,0x98,0xe6,0x90,0xf8,0x50,0x4c,
++0x20,0x27,0x20,0x23,0xf2,0x2f,0x29,0x27,0x21,0x33,0xe1,0x27,0x21,0x23,0xad,0x41,0x40,0xfc,0x40,0xf8,0x48,0xfe,0x12,0xfc,0x10,0xf8,0x10,0xfc,0x48,0x30,0x8e,0x4,
++0x2,0x2,0x2,0x2,0x3,0xfe,0x2,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x44,0x24,0x1c,0x0,
++0x0,0x0,0x0,0x0,0xff,0x0,0x8,0x4,0x14,0x54,0x50,0x50,0x91,0x11,0xf,0x0,0x80,0xa0,0x94,0xfe,0x80,0x40,0x40,0x40,0x20,0xa0,0x60,0x50,0x12,0xa,0xa,0x4,
++0x0,0x0,0x0,0x0,0xff,0x22,0x22,0xff,0x22,0x22,0x3e,0x22,0x22,0x3e,0x22,0x0,0x80,0xa0,0x94,0xfe,0x80,0x40,0x40,0xc0,0x40,0x40,0x20,0x20,0x12,0x12,0xa,0x4,
++0x0,0x22,0x14,0xb,0x14,0x62,0x8,0x9,0xfe,0x8,0x2c,0x2a,0x48,0xb,0x28,0x10,0x20,0x28,0x24,0xfe,0x20,0x20,0x20,0xd0,0x90,0x90,0x90,0x90,0xf2,0x8a,0xa,0x4,
++0x0,0x0,0x8,0x7c,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x80,0x80,0x80,0x80,0x80,0xa0,0x98,0x8c,0x84,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
++0x0,0x8,0x7c,0x48,0x48,0x48,0x48,0x49,0x4a,0x4c,0x48,0x78,0x48,0x0,0x0,0x0,0x80,0x80,0x88,0x98,0xa0,0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x9,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x79,0x4a,0x2,0x4,0x8,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x0,0x8,0x7c,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xc8,0xa8,0x90,0x80,0x80,0x80,
++0x0,0x8,0x7d,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x79,0x49,0x2,0x4,0x8,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x4,0x4,0x4,0x28,0x10,
++0x0,0x8,0x7c,0x48,0x4b,0x48,0x48,0x48,0x48,0x48,0x48,0x79,0x49,0x2,0x4,0x8,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x84,0x84,0x4,0x4,0x4,0x28,0x10,
++0x0,0x8,0x7d,0x48,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x8,0x1c,0xe0,0x40,0x40,0x44,0x7e,0xc0,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0xa,0x7d,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x0,0x4,0xc,0x90,0xa0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x8,0x7c,0x48,0x48,0x49,0x4b,0x48,0x48,0x48,0x48,0x78,0x49,0x2,0x3,0x0,0x40,0x40,0x40,0x80,0x84,0x4,0xf8,0x8,0x10,0x20,0x40,0x80,0x8,0x4,0xfe,0x2,
++0x0,0x8,0x7c,0x4b,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x79,0x49,0x2,0x4,0x8,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x10,0x8,0xe,0x4,
++0x0,0xb,0x7c,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x49,0x79,0x4a,0x2,0x4,0x8,0x8,0xfc,0x80,0x80,0x80,0x84,0xfe,0xa0,0xa0,0xa0,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x0,0x7b,0x48,0x48,0x4b,0x48,0x48,0x48,0x48,0x49,0x7a,0x4a,0x2,0x1,0x0,0x90,0x94,0xfe,0x90,0x0,0xf8,0x10,0x20,0x40,0x80,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x0,0x8,0x7c,0x48,0x4f,0x48,0x48,0x48,0x48,0x48,0x49,0x79,0x4a,0x4,0x8,0x10,0x40,0x40,0x40,0x44,0xfe,0x40,0xa0,0xa0,0xa0,0xa0,0x10,0x90,0x48,0x48,0x6,0x4,
++0x0,0xb,0x7e,0x4a,0x4a,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x44,0x4,0x9,0x12,0x4,0xfe,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x0,0xb,0x7e,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x44,0x4,0x8,0x10,0x4,0xfe,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0xa8,0x90,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x2,0xa,0x7e,0x4a,0x4a,0x4b,0x4a,0x4a,0x4a,0x4a,0x7a,0x4a,0x3,0x2,0x0,0x20,0x20,0x20,0x20,0x24,0x28,0xb0,0x20,0x20,0x20,0x20,0x20,0xa2,0x22,0x1e,0x0,
++0x0,0x9,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x79,0x48,0x0,0x1,0x2,0x4,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x40,0x98,0x6,0x2,
++0x0,0x1f,0x10,0x10,0x10,0x1f,0x11,0x1,0x7f,0x42,0x42,0x44,0x48,0x40,0x40,0x40,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,0x4,0xfe,0x84,0x44,0x24,0x24,0x4,0x14,0x8,
++0x0,0x0,0x8,0x7c,0x48,0x48,0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x44,0x0,0x0,0x0,0x40,0x20,0x20,0x20,0xa0,0x80,0x88,0x84,0x82,0x82,0x82,0x8a,0x8a,0x88,0x78,0x0,
++0x0,0xb,0x7c,0x48,0x48,0x4b,0x4a,0x4a,0x4a,0x4b,0x48,0x78,0x48,0x2,0x1,0x0,0x24,0xf4,0x24,0x24,0x24,0xe4,0x4,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0x44,0x84,
++0x0,0x3,0x7a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x4a,0x2,0x3,0x0,0x8,0xfc,0x20,0x28,0xfc,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xb8,0x20,0x24,0xfe,0x0,
++0x0,0x0,0x8,0x7c,0x48,0x48,0x48,0x4f,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x80,0x80,0x88,0xfc,0x80,0x80,0x84,0xfe,0x80,0xa0,0x90,0x88,0x88,0x80,0x80,0x80,
++0x0,0x9,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x79,0x48,0x0,0x0,0x0,0x0,0x4,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,0x20,
++0x0,0x0,0x7b,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x44,0x5,0x9,0x10,0x8,0x1c,0xe0,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xa4,0x14,0xf2,0x0,
++0x0,0x0,0x8,0x7c,0x49,0x4a,0x4c,0x48,0x48,0x4b,0x48,0x79,0x48,0x0,0x0,0x0,0x40,0x40,0xa0,0xa0,0x10,0x8e,0x64,0x20,0x0,0xf8,0x8,0x10,0xa0,0x40,0x20,0x20,
++0x0,0x8,0x7c,0x49,0x49,0x4a,0x48,0x48,0x49,0x4a,0x4c,0x78,0x49,0x0,0x0,0x0,0x80,0x80,0xf8,0x8,0x10,0xa0,0x40,0xa0,0x10,0x8e,0x64,0x20,0x80,0x60,0x10,0x0,
++0x0,0x8,0x7c,0x4b,0x4a,0x4a,0x48,0x4b,0x48,0x48,0x48,0x78,0x48,0x0,0x0,0x0,0x40,0x20,0x20,0xfe,0x2,0x4,0x0,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x8,0x7d,0x49,0x49,0x49,0x49,0x48,0x48,0x49,0x49,0x79,0x49,0x1,0x1,0x0,0x20,0x20,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x2,0x12,0x7a,0x52,0x5f,0x52,0x52,0x52,0x54,0x54,0x55,0x72,0x55,0x8,0x10,0x0,0x0,0x0,0x8,0x7c,0x88,0x88,0xa8,0xa8,0xa8,0x90,0x10,0x28,0x28,0xc4,0x44,0x82,
++0x0,0x11,0x79,0x51,0x52,0x54,0x5f,0x51,0x52,0x52,0x54,0x7f,0x54,0x0,0x1,0x2,0x20,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xa4,0xc4,0x44,0x84,0x28,0x10,
++0x0,0x11,0x79,0x51,0x52,0x52,0x57,0x51,0x52,0x52,0x54,0x77,0x50,0x0,0xf,0x0,0x0,0x8,0x8,0x8,0x10,0x94,0xbc,0x8,0x10,0x10,0x20,0xbc,0x0,0x4,0xfe,0x0,
++0x0,0xb,0x7e,0x4a,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x7b,0x4a,0x2,0x3,0x0,0x8,0xfc,0x0,0x8,0xfc,0x20,0x20,0xf8,0x20,0x20,0x28,0xfc,0x0,0x4,0xfe,0x0,
++0x0,0x8,0x7c,0x4b,0x48,0x48,0x49,0x48,0x48,0x49,0x49,0x79,0x49,0x1,0x1,0x1,0x20,0x20,0x24,0xfe,0x20,0x20,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x7,0x8,0x7c,0x48,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x7b,0x4a,0x2,0x3,0x2,0x4,0xfe,0x90,0x90,0x94,0xfe,0x94,0x94,0x94,0x94,0x9c,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x0,0x8,0x7f,0x48,0x48,0x49,0x49,0x4a,0x4c,0x49,0x78,0x48,0x0,0x1,0x2,0x80,0x80,0x84,0xfe,0x80,0xa0,0x20,0x24,0xac,0xb0,0x20,0x50,0x50,0x88,0xe,0x4,
++0x0,0x0,0x70,0x54,0x52,0x52,0x50,0x5e,0x52,0x52,0x52,0x72,0x53,0x6,0x9,0x0,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x50,0x48,0x8c,0x4,0x0,0x6,0xfc,
++0x0,0x7,0x9,0x7d,0x49,0x4a,0x4a,0x4a,0x4d,0x48,0x48,0x79,0x49,0x2,0x4,0x8,0x44,0xe4,0x4,0x4,0xd4,0x54,0x54,0x54,0x54,0x94,0x94,0x14,0x4,0x4,0x14,0x8,
++0x0,0x0,0x7b,0x48,0x4b,0x48,0x48,0x4b,0x4a,0x4a,0x7b,0x48,0x0,0x1,0x2,0xc,0x40,0x48,0xfc,0x40,0xf8,0x48,0x48,0xf8,0x40,0x44,0xfe,0x44,0xac,0x10,0x8,0x6,
++0x0,0x8,0x7c,0x4b,0x48,0x48,0x48,0x4b,0x48,0x4f,0x49,0x79,0x49,0x2,0x4,0x18,0x80,0x88,0xfc,0x80,0x48,0x50,0x62,0x92,0xe,0xf8,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x2,0x2,0x7a,0x4b,0x4a,0x4a,0x4a,0x4b,0x48,0x48,0x4f,0x78,0x48,0x0,0x0,0x0,0x20,0x20,0x24,0xa8,0x30,0x24,0xa4,0x1c,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x0,0x8,0x7c,0x48,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x4a,0x3,0xc,0x0,0x90,0x90,0x90,0x90,0x92,0x94,0xf8,0x90,0x90,0x90,0x90,0xb0,0xd2,0x12,0xe,0x0,
++0x0,0x0,0x7a,0x49,0x49,0x49,0x48,0x4f,0x49,0x49,0x49,0x79,0x4a,0x2,0x4,0x8,0x40,0x40,0x48,0x4c,0x50,0x50,0x44,0xfe,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x8,0x7d,0x49,0x49,0x49,0x48,0x48,0x48,0x49,0x4a,0x78,0x48,0x0,0x1,0x6,0x20,0x20,0x24,0x24,0x24,0xfc,0x44,0x40,0xfc,0x84,0x44,0x28,0x10,0x60,0x80,0x0,
++0x1,0x1,0x11,0x7a,0x52,0x57,0x5a,0x52,0x52,0x52,0x52,0x72,0x53,0x2,0x2,0x2,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x70,0x68,0xa8,0xa8,0xa6,0x24,0x20,0x20,0x20,
++0x1,0x1,0x11,0x7a,0x52,0x56,0x5b,0x52,0x52,0x52,0x53,0x72,0x52,0x2,0x2,0x3,0x0,0x4,0xfe,0x44,0x44,0x44,0xfe,0x44,0x44,0x44,0xfc,0x44,0x40,0x40,0x80,0x0,
++0x0,0x0,0x7b,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x44,0x4,0x8,0x0,0x8,0x3c,0xc0,0x4,0x18,0xe0,0xa0,0xa4,0xa8,0x90,0x90,0x90,0x88,0xae,0xc4,0x80,
++0x0,0x0,0x8,0x7c,0x49,0x4a,0x4d,0x48,0x48,0x4f,0x48,0x78,0x49,0x2,0x7,0x0,0x40,0x40,0xa0,0xa0,0x10,0x8,0xf6,0x0,0x4,0xfe,0x80,0x80,0x10,0x8,0xfc,0x4,
++0x0,0x1,0x9,0x7d,0x49,0x49,0x4a,0x48,0x4f,0x48,0x48,0x78,0x49,0x2,0xc,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x4c,0x40,0xfe,0x40,0xe0,0xd0,0x48,0x4e,0x44,0x40,
++0x0,0x0,0x78,0x4b,0x49,0x48,0x48,0x48,0x49,0x4e,0x48,0x78,0x48,0x1,0x2,0x4,0x80,0x40,0x24,0xfe,0x8,0x90,0x60,0x90,0xe,0x94,0x90,0x90,0x90,0x10,0x10,0x10,
++0x2,0x9,0x7c,0x4b,0x48,0x48,0x48,0x4b,0x48,0x48,0x48,0x7f,0x48,0x0,0x0,0x0,0x8,0x10,0xa0,0xfc,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x0,0x8,0x7c,0x4a,0x49,0x48,0x4f,0x48,0x48,0x48,0x49,0x79,0x4a,0x4,0x8,0x0,0x40,0x40,0x44,0x48,0x50,0x44,0xfe,0x40,0xe0,0xd0,0x50,0x48,0x46,0x44,0x40,0x40,
++0x0,0x0,0x7b,0x4a,0x4c,0x48,0x4b,0x48,0x48,0x4f,0x48,0x78,0x48,0x0,0x0,0x0,0x80,0x40,0xfe,0x2,0x4,0x38,0xc0,0x44,0x7e,0xc0,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x8,0x7c,0x49,0x49,0x4a,0x48,0x48,0x48,0x49,0x49,0x7a,0x44,0x8,0x0,0x0,0x20,0x20,0x20,0xfe,0x42,0x44,0x40,0xa0,0xa4,0x28,0x90,0x90,0x88,0xae,0xc4,0x80,
++0x0,0x9,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0x1,0x1,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x44,0x48,0x30,0x20,0x10,0x4e,0x84,0x0,
++0x0,0x0,0x8,0x7d,0x4b,0x48,0x49,0x49,0x49,0x4a,0x48,0x7b,0x48,0x0,0x0,0x0,0x20,0x40,0x88,0x4,0xfe,0x22,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x0,0x7b,0x48,0x4b,0x48,0x4f,0x48,0x49,0x49,0x49,0x7a,0x44,0x0,0x3,0xc,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x80,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x0,0x0,0x7b,0x48,0x48,0x48,0x4f,0x48,0x4a,0x4a,0x7a,0x45,0x9,0x2,0x4,0x0,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0xa0,0xa8,0xa4,0xa4,0x24,0x20,0x20,0xa0,0x40,
++0x0,0x0,0x7b,0x48,0x48,0x4b,0x4a,0x4c,0x4b,0x48,0x48,0x78,0x49,0x2,0x4,0x8,0x90,0x94,0xfe,0x90,0x90,0xfe,0x42,0x44,0xf8,0x48,0x88,0x88,0x8,0x8,0x50,0x20,
++0x0,0x3,0x78,0x48,0x4b,0x4a,0x4a,0x4b,0x4a,0x4a,0x4b,0x7a,0x49,0x0,0x3,0xc,0x8,0xfc,0x40,0x48,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0x40,0xc0,0x30,0xe,
++0x0,0x3,0x8,0x7c,0x4b,0x49,0x49,0x49,0x4f,0x48,0x4b,0x7a,0x4a,0x2,0x3,0x2,0x10,0xf8,0x80,0x90,0xf8,0x10,0x10,0x14,0xfe,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x2,0x2,0x72,0x5f,0x52,0x52,0x52,0x52,0x53,0x5e,0x52,0x72,0x52,0x2,0xb,0x4,0x0,0xc,0x70,0xc0,0x40,0x44,0x7e,0xc8,0x48,0x48,0x48,0x48,0x88,0x88,0x8,0x8,
++0x0,0x2,0x9,0x7d,0x48,0x4b,0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x4a,0x0,0x1,0x6,0x40,0x44,0x4c,0x50,0x48,0xfc,0x8,0x48,0x48,0x48,0x48,0x48,0xa8,0x90,0xc,0x4,
++0x0,0x0,0x7b,0x4a,0x4a,0x4b,0x4a,0x4a,0x4b,0x4a,0x78,0x40,0xf,0x0,0x0,0x0,0x40,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x40,0x44,0x7e,0xc0,0x44,0x44,0x3c,
++0x1,0x8,0x7c,0x48,0x49,0x48,0x4f,0x48,0x49,0x4b,0x4d,0x79,0x49,0x1,0x0,0x0,0x8,0xd0,0x20,0x58,0x84,0x40,0xfe,0xa0,0x24,0xfe,0x24,0x24,0x34,0x28,0x20,0x20,
++0x0,0x0,0x2,0x7a,0x4a,0x4a,0x4d,0x48,0x48,0x48,0x4b,0x78,0x48,0x0,0xf,0x0,0x40,0x40,0x48,0x48,0x48,0x48,0x54,0xe2,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x7,0x74,0x54,0x57,0x54,0x54,0x57,0x54,0x54,0x55,0x74,0x55,0x6,0x0,0x0,0x80,0xc4,0xbe,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0x24,0x24,0xb4,0x28,0x20,0x20,0x20,
++0x0,0x8,0x7f,0x48,0x4b,0x48,0x4f,0x48,0x49,0x4b,0x4c,0x78,0x47,0x0,0x0,0x0,0x40,0x44,0xfe,0x40,0xfc,0x40,0xfe,0xa0,0x50,0xf8,0x46,0x40,0xfc,0x40,0x40,0x40,
++0x0,0x8,0x7f,0x48,0x4b,0x48,0x4f,0x48,0x4b,0x4a,0x4a,0x7a,0x4a,0x0,0x1,0x6,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x8,0xfc,0x8,0x48,0x48,0x48,0xb0,0xc,0x4,
++0x1,0x9,0x7f,0x49,0x48,0x48,0x4f,0x48,0x48,0x49,0x49,0x7b,0x45,0x9,0x1,0x1,0x10,0x10,0xfc,0x10,0x40,0x44,0xfe,0x80,0x88,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x1,0x11,0x7f,0x51,0x51,0x50,0x57,0x54,0x54,0x54,0x57,0x74,0x54,0x4,0x7,0x4,0x10,0x14,0xfe,0x10,0x10,0x4,0xfe,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x4,
++0x1,0x11,0x79,0x51,0x5f,0x51,0x53,0x53,0x55,0x55,0x55,0x79,0x51,0x1,0x1,0x1,0x10,0x10,0x10,0x14,0xfe,0x10,0x30,0xb8,0x58,0x54,0x54,0x92,0x10,0x10,0x10,0x10,
++0x1,0x11,0x79,0x57,0x52,0x52,0x55,0x55,0x5f,0x51,0x51,0x73,0x4d,0x1,0x1,0x1,0x10,0x10,0x14,0xfe,0x10,0x14,0x7e,0x10,0x90,0x20,0x7e,0x84,0x28,0x10,0xc,0x4,
++0x0,0x9,0x7d,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0x79,0x4a,0x2,0x4,0x8,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,0x74,0x54,0x54,0x74,0x4,0x14,0x8,
++0x2,0x12,0x7b,0x54,0x5a,0x53,0x54,0x50,0x5f,0x50,0x54,0x74,0x57,0x0,0x0,0x0,0x0,0x4,0xfe,0x4,0x24,0xf4,0x84,0x94,0xfc,0x84,0x94,0x94,0xf4,0x4,0x14,0x8,
++0x1,0x9,0x7d,0x4a,0x4a,0x4c,0x49,0x49,0x4a,0x48,0x49,0x7d,0x45,0x9,0x0,0x0,0x0,0x4,0xfe,0x94,0x94,0x94,0x24,0x24,0x54,0x8,0x40,0x24,0x22,0xa,0xf8,0x0,
++0x0,0x8,0x7f,0x49,0x49,0x49,0x4a,0x4a,0x4c,0x48,0x4f,0x78,0x48,0x0,0x0,0x0,0x80,0x48,0xfc,0x10,0x10,0x10,0xa8,0x44,0x44,0x40,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x0,0x0,0xb,0x7c,0x49,0x48,0x4f,0x48,0x48,0x4f,0x49,0x7a,0x49,0x0,0x1,0x6,0x80,0x50,0xf8,0x0,0x10,0xa0,0xfc,0x80,0x84,0xfe,0x10,0x10,0x20,0xc0,0x30,0x8,
++0x0,0x8,0x7f,0x48,0x49,0x4b,0x48,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0x1,0x1,0x80,0x44,0xfe,0x80,0x8,0xfc,0x4,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x8,0x7d,0x49,0x4a,0x48,0x49,0x4a,0x48,0x49,0x49,0x7a,0x48,0x0,0x3,0xc,0x40,0x40,0x48,0x50,0x40,0xa0,0x10,0xc,0x40,0x48,0x50,0x40,0xa0,0x90,0xe,0x4,
++0x0,0x4,0x72,0x52,0x58,0x54,0x50,0x52,0x52,0x54,0x5c,0x74,0x55,0x5,0x6,0x4,0x10,0x10,0x10,0xfe,0x92,0x94,0x90,0xfc,0xa4,0xa4,0xa8,0x90,0x28,0x28,0x46,0x84,
++0x0,0x8,0x7c,0x4b,0x4a,0x4c,0x48,0x4b,0x48,0x49,0x49,0x79,0x49,0x2,0x4,0x8,0x40,0x20,0x20,0xfe,0x2,0x4,0x0,0xfe,0x20,0x20,0x3c,0x20,0x20,0xa0,0x60,0x1e,
++0x2,0x1,0x17,0x7c,0x54,0x57,0x54,0x54,0x57,0x54,0x54,0x75,0x54,0x5,0x6,0x0,0x0,0x0,0xbc,0xa4,0xa8,0xa8,0xb0,0xa8,0xa4,0x24,0x24,0x24,0xb4,0xa8,0x20,0x20,
++0x0,0x8,0x7f,0x4a,0x4a,0x4b,0x4a,0x4a,0x4a,0x4b,0x4a,0x7a,0x44,0x4,0x9,0x2,0x40,0x24,0xfe,0x4,0x4,0xfc,0x20,0x28,0x24,0xfe,0x20,0x50,0x50,0x88,0xe,0x4,
++0x0,0x17,0x7c,0x54,0x57,0x55,0x55,0x57,0x55,0x75,0x4d,0x15,0x15,0x25,0x1,0x1,0x4,0xc4,0x54,0x54,0xd4,0x14,0x14,0xd4,0x54,0x54,0x54,0x44,0x44,0xc4,0x14,0x8,
++0x0,0xf,0x4,0x75,0x52,0x55,0x58,0x50,0x5f,0x50,0x55,0x75,0x52,0x5,0x8,0x10,0x0,0xfc,0xa4,0x28,0x10,0x28,0xc4,0x0,0xfc,0x84,0x28,0x28,0x10,0x28,0xc6,0x84,
++0x0,0x2,0x12,0x7f,0x52,0x52,0x52,0x52,0x53,0x50,0x5f,0x70,0x51,0x2,0xc,0x0,0x90,0x90,0x94,0xfe,0x90,0x90,0xf0,0x0,0xfc,0x40,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x1,0x1,0xf,0x79,0x48,0x48,0x49,0x4a,0x4d,0x48,0x4b,0x7a,0x4a,0x2,0x3,0x2,0x10,0x14,0xfe,0x50,0x40,0xa0,0x10,0xe,0xf4,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x0,0xf,0x70,0x50,0x57,0x55,0x54,0x55,0x54,0x54,0x77,0x54,0x4,0x4,0x4,0x40,0x44,0xfe,0x40,0x44,0xfe,0x14,0xa4,0xf4,0x44,0x44,0xfc,0x44,0x44,0x54,0x8,
++0x0,0x17,0x7c,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x74,0x49,0x8,0x10,0x3,0x4,0xfe,0x0,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,
++0x0,0x0,0x0,0x77,0x50,0x51,0x53,0x5c,0x53,0x50,0x50,0x77,0x50,0x0,0xf,0x0,0x40,0x40,0x44,0xfe,0xa0,0x50,0xf8,0x46,0xf8,0x40,0x48,0xfc,0x40,0x44,0xfe,0x0,
++0x2,0x2,0x7b,0x4a,0x4a,0x4a,0x4b,0x48,0x49,0x49,0x79,0x49,0x1,0x1,0x1,0x1,0x20,0x24,0xa8,0x30,0x22,0xa2,0x5e,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x13,0x7a,0x52,0x53,0x52,0x52,0x53,0x50,0x57,0x74,0x54,0x5,0x4,0x4,0x4,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x44,0xfe,0x44,0x54,0xf4,0x4,0x14,0x8,
++0x0,0x7,0x74,0x57,0x54,0x57,0x50,0x53,0x52,0x53,0x72,0x53,0x2,0x2,0x2,0x2,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x1,0x77,0x51,0x51,0x51,0x57,0x51,0x53,0x53,0x55,0x75,0x49,0x11,0x1,0x1,0x90,0xd0,0x10,0x52,0x34,0x38,0xd0,0x10,0x90,0x50,0x28,0x28,0x28,0x44,0x44,0x82,
++0x0,0x1,0x7a,0x4a,0x4a,0x4b,0x4a,0x4a,0x4b,0x48,0x7b,0x49,0x0,0x0,0x1,0xe,0x40,0x48,0x5c,0x48,0x48,0x58,0x48,0x48,0xf8,0x40,0xf8,0x10,0xa0,0x40,0xb0,0xe,
++0x0,0x0,0x7,0x78,0x49,0x48,0x4f,0x48,0x4b,0x4a,0x4a,0x7b,0x4a,0x2,0x3,0x2,0x80,0x48,0xfc,0x0,0x10,0xa4,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x1,0x3f,0x8,0x4,0x7f,0x41,0x9f,0x11,0x11,0x11,0x1,0x1f,0x10,0x10,0x1f,0x10,0x0,0xf8,0x20,0x40,0xfe,0x2,0xf4,0x10,0x10,0x30,0x0,0xf0,0x10,0x10,0xf0,0x10,
++0x0,0x9,0x7c,0x4b,0x48,0x49,0x48,0x4f,0x48,0x48,0x49,0x7a,0x44,0x8,0x13,0x0,0x8,0x8,0x90,0xfc,0x40,0xf8,0x40,0xfe,0x80,0x88,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x0,0xa,0x7d,0x48,0x4f,0x48,0x49,0x4a,0x48,0x4f,0x49,0x7a,0x49,0x0,0x1,0x6,0x40,0x48,0x50,0x40,0xfc,0x40,0x50,0x48,0x80,0xfe,0x10,0x10,0x20,0xc0,0x30,0x8,
++0x22,0x11,0x0,0x7f,0x41,0x91,0x1f,0x21,0xff,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x8,0x10,0x20,0xfe,0x2,0x24,0xf0,0x4,0xfe,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x0,0x3,0x7a,0x4a,0x4b,0x4a,0x4b,0x4a,0x4a,0x4a,0x7a,0x42,0x4,0x4,0xb,0x10,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x40,0x88,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x1,0x1,0x7a,0x4b,0x48,0x4f,0x49,0x49,0x4a,0x4c,0x79,0x46,0x1,0xe,0x1,0x0,0x0,0xf0,0x10,0xf0,0x24,0xfe,0x0,0x88,0x50,0xe0,0x50,0xd0,0x4e,0x44,0x40,0x80,
++0x0,0x0,0xb,0x7c,0x4b,0x48,0x4f,0x48,0x49,0x4b,0x4c,0x7b,0x48,0x1,0x6,0x0,0x40,0x48,0xfc,0x40,0xf8,0x80,0xfe,0xa0,0x10,0xf8,0x46,0xf8,0xc0,0x70,0x48,0x40,
++0x1,0x1,0x17,0x79,0x57,0x51,0x5f,0x52,0x53,0x52,0x52,0x74,0x44,0x9,0x10,0x0,0x10,0x10,0xd0,0x14,0xfe,0x24,0xe4,0x28,0xa8,0xa8,0x90,0x90,0xa8,0xa8,0x46,0x84,
++0x0,0x0,0x7,0x78,0x4b,0x48,0x4f,0x48,0x48,0x4b,0x48,0x7b,0x49,0x2,0x4,0x0,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x40,0x90,0xe0,0x48,0xf8,0x50,0x4c,0x44,0x40,
++0x2,0x12,0x7f,0x52,0x52,0x5f,0x52,0x57,0x5c,0x54,0x57,0x74,0x54,0x7,0x4,0x0,0x0,0x3c,0xa4,0x24,0xa4,0xe8,0x24,0xa4,0xa2,0xa2,0xa2,0xb4,0xa8,0xa0,0xa0,0x20,
++0x0,0x0,0xb,0x7c,0x48,0x4f,0x48,0x49,0x4b,0x48,0x4b,0x7a,0x4a,0x2,0xf,0x0,0x40,0x48,0xfc,0x40,0x44,0xfe,0x80,0x10,0xf8,0x0,0xf8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x0,0xf,0x72,0x53,0x52,0x53,0x52,0x5f,0x50,0x5f,0x50,0x74,0x55,0x2,0x5,0x8,0x8,0xfc,0x10,0xf0,0x10,0xf0,0x14,0xfe,0x10,0xbc,0x84,0xa4,0x28,0x10,0x28,0xc6,
++0x1,0x1,0x17,0x79,0x51,0x53,0x52,0x56,0x5a,0x52,0x52,0x72,0x52,0x2,0x2,0x2,0x20,0x28,0xfc,0x20,0x4,0xfe,0x8,0x8,0xe8,0xa8,0xa8,0xe8,0x8,0x8,0x28,0x10,
++0x0,0x0,0x7,0x78,0x4b,0x4a,0x4b,0x4a,0x4b,0x4a,0x4b,0x7a,0x4f,0x1,0x2,0x4,0x40,0x44,0xfe,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x10,0xc,0x4,
++0x0,0x0,0x17,0x78,0x57,0x54,0x58,0x53,0x50,0x50,0x57,0x71,0x52,0x4,0x1,0x0,0x40,0x48,0xfc,0x40,0xfe,0x42,0x94,0xf0,0x40,0x88,0xfc,0x50,0x4c,0x44,0x40,0x80,
++0x0,0x7,0x10,0x7b,0x52,0x52,0x53,0x50,0x57,0x55,0x54,0x75,0x54,0x4,0x4,0x4,0x4,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x14,0xa4,0xf4,0x44,0x44,0x54,0x8,
++0x0,0x7,0x0,0x7b,0x4a,0x4b,0x4a,0x4b,0x4a,0x4b,0x49,0x79,0x4a,0x4,0x8,0x3,0x4,0xfe,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xf8,0x90,0x60,0x90,0xe,
++0x0,0x3,0x7a,0x4a,0x4b,0x4a,0x4a,0x4b,0x4a,0x4b,0x78,0x45,0x5,0x9,0x0,0x0,0x8,0xfc,0x48,0x48,0xf8,0x48,0xa8,0x18,0x8,0xf8,0x0,0x44,0x22,0xa,0xf8,0x0,
++0x0,0x0,0x7b,0x4a,0x4b,0x4a,0x4b,0x48,0x4f,0x48,0x49,0x7a,0x45,0x8,0x0,0x0,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x84,0xfe,0xa0,0x50,0x48,0xfe,0x44,0x40,0x40,
++0x0,0x1,0xa,0x7c,0x49,0x4e,0x48,0x4b,0x48,0x4b,0x48,0x7b,0x48,0x0,0x0,0x7,0x90,0x18,0xa4,0x40,0xb0,0x4e,0xf0,0x90,0x60,0xa0,0x78,0x88,0x90,0x60,0xc0,0x0,
++0x0,0x10,0x7b,0x52,0x51,0x57,0x54,0x58,0x57,0x51,0x51,0x73,0x52,0x4,0x8,0x3,0x10,0x78,0x80,0x48,0x50,0xfe,0x82,0x84,0xfc,0x0,0xf0,0x10,0xa0,0x40,0xb0,0xc,
++0x0,0x2,0x1,0x78,0x4f,0x48,0x49,0x4a,0x48,0x4b,0x4a,0x7a,0x4a,0x2,0xf,0x0,0x0,0x8,0x10,0x4,0xfe,0xa0,0x18,0x8,0x0,0xf8,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x8,0x4,0x12,0x7f,0x51,0x55,0x55,0x55,0x55,0x55,0x57,0x71,0x51,0x2,0x4,0x8,0x24,0x5e,0x94,0xf4,0x14,0x5c,0x54,0x54,0x54,0x5c,0xd4,0x54,0x24,0x24,0x54,0x88,
++0x0,0x8,0x75,0x51,0x53,0x59,0x55,0x51,0x57,0x55,0x55,0x75,0x59,0x9,0x8,0x0,0x80,0x88,0xfc,0x0,0xf8,0x8,0x48,0x28,0xfe,0x8,0x48,0x28,0x8,0xfc,0x8,0x30,
++0x1,0x8,0x74,0x54,0x51,0x51,0x5d,0x55,0x55,0x55,0x55,0x75,0x55,0xa,0x11,0x0,0xfc,0x8,0x50,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x2c,0x6,0xfc,0x0,
++0x0,0x2,0x7a,0x4b,0x48,0x4f,0x48,0x48,0x4b,0x4a,0x4a,0x7b,0x4a,0x0,0x7,0x0,0x40,0x48,0x48,0xf8,0x40,0xfe,0x40,0x48,0xfc,0x48,0x48,0xf8,0x40,0x48,0xfc,0x4,
++0x11,0x11,0x27,0x22,0x7d,0x17,0x21,0x79,0x7,0xf9,0x1,0x1f,0x10,0x10,0x1f,0x10,0x8,0x8,0xd0,0x10,0x3c,0xc8,0x10,0x3c,0xc0,0x3e,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x2,0x12,0x7f,0x52,0x53,0x51,0x57,0x55,0x55,0x57,0x51,0x5f,0x71,0x1,0x1,0x1,0x90,0x90,0xf0,0x94,0xbe,0x14,0xd4,0x54,0x54,0xd4,0x14,0xf4,0x24,0x24,0x54,0x88,
++0x0,0x0,0xf,0x70,0x57,0x54,0x57,0x54,0x57,0x50,0x53,0x72,0x53,0x2,0x3,0x2,0xa0,0xa4,0xfe,0xa0,0xfc,0xa4,0xfc,0xa4,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,
++0x0,0x7,0x70,0x50,0x57,0x54,0x54,0x57,0x50,0x57,0x50,0x7f,0x51,0x2,0x5,0x0,0x4,0xfe,0xa0,0xa4,0xfe,0xa4,0xa4,0xfc,0x0,0xfc,0x0,0xfe,0x50,0x4c,0x44,0x80,
++0x0,0x0,0x77,0x54,0x55,0x55,0x55,0x55,0x57,0x55,0x55,0x7b,0x4d,0x11,0x23,0x0,0x28,0x24,0xfe,0x20,0x20,0xe4,0x24,0x24,0xe8,0x28,0x28,0x90,0x50,0x2a,0x4a,0x84,
++0x7,0x14,0x7d,0x55,0x56,0x56,0x55,0x58,0x50,0x5f,0x51,0x72,0x51,0x0,0x1,0x6,0xbc,0xa4,0xac,0xac,0xb4,0xb4,0x28,0xc4,0x80,0xfe,0x10,0x10,0x20,0xc0,0x30,0x8,
++0x0,0x14,0x7c,0x57,0x50,0x57,0x54,0x54,0x57,0x54,0x54,0x77,0x54,0x8,0xa,0x11,0x40,0x44,0x44,0xfc,0x4,0xbe,0xa4,0xa4,0xbc,0xa4,0xa4,0xbc,0xa4,0xa4,0xd4,0x8,
++0x4,0x2,0x72,0x5f,0x54,0x54,0x57,0x55,0x55,0x55,0x55,0x75,0x49,0xb,0x10,0x0,0x20,0x24,0x3e,0x40,0xa0,0x24,0x3e,0x50,0x14,0xfe,0x10,0x10,0x28,0x28,0x44,0x82,
++0x0,0x10,0x7f,0x51,0x50,0x57,0x54,0x54,0x57,0x54,0x55,0x75,0x55,0x5,0x4,0x4,0x80,0x44,0xfe,0x10,0xa4,0xfe,0x44,0x44,0xfc,0x44,0xf4,0x14,0x14,0xf4,0x14,0x8,
++0x0,0x0,0x7,0x74,0x58,0x51,0x55,0x55,0x59,0x52,0x5c,0x72,0x52,0x2,0x3,0x0,0x80,0x40,0xfe,0x2,0x94,0x50,0x24,0x4a,0x8a,0xf8,0x40,0x48,0x48,0x48,0xf8,0x8,
++0x1,0x1,0xf,0x71,0x57,0x50,0x57,0x54,0x54,0x57,0x50,0x74,0x52,0xf,0x0,0x0,0x4,0x44,0xe4,0x8,0xc8,0x10,0xc4,0x44,0x48,0xd2,0x2,0x44,0x84,0xe8,0x10,0x20,
++0x0,0x7,0x74,0x56,0x55,0x57,0x54,0x56,0x56,0x56,0x7b,0x48,0x8,0x11,0x22,0x0,0x4,0xfe,0x8,0x28,0x4e,0xf2,0x84,0xa8,0xa8,0xa8,0xe8,0xa8,0x88,0x14,0x24,0x42,
++0x0,0x8,0x7f,0x48,0x4a,0x49,0x4b,0x4e,0x4b,0x4a,0x4b,0x78,0x49,0x2,0x5,0x0,0x40,0x44,0xfe,0x40,0xa8,0x10,0xf8,0xe,0xf8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x80,
++0x0,0x2,0x79,0x48,0x4f,0x49,0x48,0x4b,0x48,0x4b,0x48,0x7f,0x48,0x1,0x1,0x6,0xa0,0xa8,0xb0,0xa4,0xfe,0x10,0xa0,0xf8,0x40,0xf8,0x40,0xfe,0xa0,0x10,0x10,0xc,
++0x1,0x9,0x7d,0x49,0x49,0x48,0x4f,0x4a,0x4b,0x4a,0x4b,0x7a,0x43,0xe,0x4,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x40,0xfc,0x44,0xe8,0x68,0xd0,0x68,0x46,0x40,
++0x0,0x8,0x7d,0x49,0x4b,0x4d,0x49,0x49,0x49,0x49,0x49,0x79,0x49,0x2,0x2,0x4,0xa0,0x90,0xfc,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,0xa8,0xa4,0x4,
++0x0,0x1,0x77,0x54,0x55,0x54,0x57,0x54,0x55,0x56,0x70,0x4f,0x0,0x1,0x2,0xc,0x80,0x4,0xfe,0x44,0x54,0x44,0xfc,0xc4,0x74,0x4c,0x40,0xfe,0xa0,0x10,0x8,0x6,
++0x0,0x0,0x10,0x79,0x52,0x55,0x58,0x52,0x52,0x53,0x50,0x77,0x54,0x5,0x4,0x4,0x40,0x40,0xa0,0x10,0x48,0xf6,0xa0,0x48,0xa8,0xf8,0x44,0xfe,0x94,0xf4,0x4,0xc,
++0x1,0x11,0x7a,0x57,0x5c,0x57,0x54,0x57,0x50,0x5f,0x50,0x73,0x52,0x3,0x2,0x3,0x0,0xf0,0x20,0xfc,0x44,0xfc,0x44,0xfc,0x0,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,
++0x2,0x11,0x78,0x57,0x54,0x55,0x54,0x57,0x50,0x53,0x52,0x72,0x53,0x2,0x2,0x3,0x8,0x10,0xa4,0xfe,0x44,0x54,0x44,0xfc,0x0,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,
++0x0,0x7,0x71,0x55,0x52,0x53,0x54,0x5b,0x52,0x52,0x53,0x70,0x52,0x1,0x1f,0x0,0x40,0x48,0x30,0x24,0x18,0xf0,0x8,0xf6,0x10,0x10,0xf0,0x0,0x10,0x24,0xfe,0x0,
++0x1,0xf,0x71,0x50,0x57,0x50,0x53,0x52,0x53,0x50,0x57,0x74,0x55,0x5,0x5,0x4,0x10,0xfe,0x10,0x44,0xfe,0x0,0xf8,0x8,0xf8,0x4,0xfe,0x4,0xf4,0x14,0xf4,0xc,
++0x1,0x11,0x7f,0x51,0x53,0x55,0x59,0x51,0x57,0x50,0x5f,0x70,0x52,0x4,0x9,0x0,0x10,0x14,0xfe,0x10,0xb8,0x54,0x12,0x10,0xfc,0x0,0xfe,0x40,0x48,0x46,0x42,0x80,
++0x0,0x10,0x78,0x57,0x54,0x57,0x54,0x54,0x57,0x54,0x55,0x7a,0x49,0x10,0x23,0x0,0x48,0x7c,0x40,0xfe,0x42,0xf8,0x40,0x38,0xfe,0x80,0x48,0xb0,0x70,0xae,0x24,0x60,
++0x0,0x0,0x77,0x52,0x51,0x5f,0x50,0x53,0x52,0x53,0x52,0x73,0x54,0x5,0x9,0x1,0x80,0x40,0xfc,0x8,0x10,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x44,0x42,0x12,0xf0,
++0x0,0x0,0x77,0x55,0x5b,0x51,0x53,0x51,0x5f,0x51,0x52,0x75,0x48,0x0,0x7,0x0,0x80,0x40,0xfe,0x12,0xfc,0x10,0xf8,0x10,0xfe,0x50,0x48,0xf6,0x40,0x48,0xfc,0x0,
++0x0,0x7,0x74,0x54,0x54,0x57,0x54,0x54,0x57,0x56,0x76,0x4a,0xa,0x13,0x22,0x0,0x10,0xc8,0x7e,0x40,0x54,0xd4,0x3e,0x8,0xc8,0x48,0x7e,0x48,0x48,0xc8,0x48,0x8,
++0x0,0x7,0x70,0x57,0x54,0x5b,0x50,0x53,0x50,0x5f,0x50,0x77,0x54,0x4,0x4,0x4,0x8,0xfc,0x40,0xfe,0x42,0x5c,0x40,0x58,0x4,0xfe,0x80,0xfc,0xa4,0xa4,0xa4,0xc,
++0x0,0x0,0x77,0x55,0x59,0x52,0x56,0x51,0x53,0x54,0x5b,0x70,0x51,0x2,0x5,0x0,0x80,0x40,0xfe,0x2,0xbc,0xa8,0xb0,0x10,0xf8,0x6,0xf8,0x40,0x50,0x4c,0x44,0x80,
++0x0,0x7,0x70,0x57,0x55,0x58,0x51,0x51,0x53,0x56,0x5b,0x72,0x53,0x2,0x3,0x2,0x8,0xfc,0x40,0xfe,0x52,0xe4,0x50,0x20,0xfc,0x20,0xfc,0x20,0xfc,0x20,0xfe,0x0,
++0x0,0x17,0x78,0x53,0x52,0x57,0x55,0x5b,0x51,0x57,0x51,0x7f,0x51,0x3,0xd,0x1,0x48,0xfc,0x40,0xf8,0x8,0xfe,0x12,0xfc,0x10,0xfc,0x10,0xfe,0x48,0x30,0x9e,0x4,
++0x0,0x7f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7f,0x40,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x7f,0x40,0x4f,0x40,0x40,0x41,0x5f,0x41,0x41,0x41,0x41,0x43,0x40,0x7f,0x40,0x4,0xfe,0x4,0xe4,0x44,0x84,0x24,0xf4,0x4,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x7f,0x42,0x42,0x42,0x7f,0x44,0x44,0x48,0x44,0x43,0x42,0x44,0x48,0x7f,0x40,0x4,0xfe,0x4,0x4,0x14,0xfc,0x44,0x44,0x44,0x44,0x84,0x84,0x64,0x14,0xfc,0x4,
++0x0,0x7f,0x41,0x41,0x42,0x44,0x48,0x54,0x64,0x45,0x46,0x44,0x43,0x40,0x7f,0x40,0x4,0xfe,0x4,0x4,0x84,0x44,0x24,0x5c,0x84,0x4,0x4,0x24,0xe4,0x4,0xfc,0x4,
++0x0,0x7f,0x48,0x48,0x4f,0x54,0x54,0x64,0x48,0x49,0x51,0x62,0x44,0x40,0x7f,0x40,0x4,0xfe,0x4,0x14,0xfc,0x94,0x94,0x94,0x94,0x14,0x14,0x54,0x24,0x4,0xfc,0x4,
++0x0,0x7f,0x41,0x41,0x42,0x44,0x4a,0x51,0x6f,0x40,0x44,0x42,0x41,0x40,0x7f,0x40,0x4,0xfe,0x4,0x4,0x84,0x44,0x24,0x1c,0xe4,0x24,0x44,0x84,0x4,0x84,0xfc,0x4,
++0x0,0x7f,0x42,0x42,0x7f,0x44,0x47,0x4c,0x57,0x64,0x47,0x44,0x44,0x44,0x7f,0x40,0x4,0xfe,0x4,0x14,0xfc,0x4,0xe4,0x24,0xe4,0x24,0xe4,0x24,0xa4,0x44,0xfc,0x4,
++0x0,0x7f,0x40,0x5f,0x42,0x4f,0x44,0x7f,0x40,0x4f,0x48,0x48,0x4f,0x40,0x7f,0x40,0x4,0xfe,0x4,0xf4,0x4,0xe4,0x24,0xfc,0x4,0xe4,0x24,0x24,0xe4,0x4,0xfc,0x4,
++0x0,0x7f,0x41,0x41,0x5f,0x41,0x4f,0x41,0x5f,0x40,0x44,0x42,0x41,0x40,0x7f,0x40,0x4,0xfe,0x4,0x4,0xf4,0x4,0xe4,0x4,0xf4,0x24,0x44,0x84,0x4,0x84,0xfc,0x4,
++0x0,0x7f,0x41,0x41,0x5f,0x41,0x7f,0x44,0x42,0x4f,0x41,0x5f,0x41,0x41,0x7f,0x40,0x4,0xfe,0x4,0x24,0xf4,0x4,0xfc,0x44,0x84,0xe4,0x4,0xf4,0x4,0x4,0xfc,0x4,
++0x0,0x7f,0x40,0x5f,0x52,0x5f,0x40,0x7f,0x48,0x4f,0x45,0x4c,0x56,0x44,0x7f,0x40,0x4,0xfe,0x4,0xf4,0x94,0xf4,0x4,0xfc,0x24,0xe4,0x44,0x84,0x74,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x7f,0x54,0x54,0x55,0x54,0x54,0x57,0x5c,0x54,0x10,0x10,0x10,0x10,0x20,0x20,0x24,0xfe,0x20,0x28,0xfc,0x20,0x20,0xfe,0x22,0x22,0x2a,0x24,0x20,0x20,
++0x10,0x10,0x11,0x7d,0x55,0x55,0x56,0x54,0x57,0x54,0x5c,0x54,0x10,0x10,0x11,0x16,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x24,0xfe,0x20,0x50,0x50,0x88,0x88,0x4,0x2,
++0x10,0x10,0x10,0x7d,0x55,0x55,0x55,0x55,0x55,0x55,0x5d,0x55,0x12,0x12,0x14,0x13,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xf8,0x8,0x48,0x50,0x50,0x20,0x50,0x8e,0x4,
++0x8,0x8,0xfe,0x12,0x32,0xc,0x12,0x61,0x1,0x1f,0x11,0x11,0x11,0x11,0x1,0x1,0x0,0x0,0xfc,0x44,0x28,0x10,0x28,0x46,0x10,0xf8,0x10,0x10,0x50,0x20,0x0,0x0,
++0x10,0x10,0x13,0x7c,0x55,0x54,0x57,0x54,0x54,0x55,0x5d,0x52,0x14,0x10,0x10,0x10,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x88,0x88,0xfe,0x8,0x88,0x48,0x8,0x28,0x10,
++0x10,0x10,0x11,0x7c,0x55,0x54,0x57,0x54,0x55,0x55,0x5d,0x55,0x11,0x10,0x10,0x13,0x20,0x28,0xfc,0x20,0xfc,0x20,0xfe,0x0,0xfc,0x4,0x24,0x24,0x20,0x58,0x86,0x2,
++0x10,0x11,0x11,0x7d,0x55,0x55,0x55,0x55,0x55,0x55,0x5d,0x55,0x11,0x11,0x11,0x11,0x4,0xfe,0x4,0xfc,0x24,0x24,0xfc,0x24,0x34,0x2c,0x24,0xfc,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x7d,0x55,0x57,0x55,0x55,0x55,0x55,0x55,0x5d,0x11,0x11,0x11,0x11,0x80,0xa0,0x94,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x10,0x14,0xfe,0x0,0x0,
++0x10,0x11,0x11,0x7d,0x55,0x55,0x55,0x55,0x55,0x55,0x5d,0x56,0x12,0x14,0x19,0x10,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x20,0x48,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x21,0x21,0x21,0xf9,0xa9,0xa8,0xab,0xaa,0xab,0xa8,0xab,0xb9,0x20,0x20,0x21,0x2e,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x94,0xfc,0x0,0xf8,0x10,0xa0,0x40,0xb0,0xe,
++0x10,0x11,0x10,0x7c,0x57,0x54,0x55,0x55,0x55,0x55,0x5d,0x54,0x13,0x10,0x10,0x10,0x20,0xfc,0x88,0x50,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x20,0xfe,0x20,0x20,0x20,
++0x10,0x11,0x10,0x7c,0x57,0x54,0x54,0x55,0x54,0x55,0x5c,0x57,0x10,0x10,0x10,0x13,0x50,0x54,0xd8,0x50,0xfe,0x88,0x50,0xfc,0x20,0xfc,0x20,0xfe,0x20,0x50,0x88,0x6,
++0x10,0x10,0x13,0x7d,0x54,0x57,0x54,0x54,0x57,0x54,0x5d,0x55,0x11,0x11,0x11,0x11,0x8,0x1c,0xe0,0x24,0xa8,0xfe,0x70,0xa8,0x26,0x24,0xfe,0x24,0xfc,0x24,0xfc,0x4,
++0x1,0x21,0x21,0x3f,0x0,0x3f,0x8,0x8,0x8,0x14,0x12,0x21,0x20,0x41,0x86,0x18,0x0,0x8,0x8,0xf8,0x0,0xf0,0x20,0x40,0x80,0xf0,0x10,0x20,0xc0,0x40,0x30,0xe,
++0x10,0x10,0x11,0x10,0x54,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x5,0x0,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x13,0x10,0x54,0x54,0x54,0x57,0x54,0x54,0x54,0x54,0x7d,0x5,0x2,0x4,0x0,0x4,0xfe,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0x8,0x8,0x8,0x8,
++0x10,0x10,0x10,0x13,0x54,0x54,0x54,0x55,0x54,0x54,0x54,0x54,0x7c,0x4,0x1,0x6,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0xfc,0x84,0x88,0x50,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x11,0x11,0x11,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x5,0x1,0x0,0x4,0xfe,0x0,0x4,0x44,0x28,0x28,0x10,0x10,0x28,0x24,0x44,0x80,0x0,0xfe,0x0,
++0x10,0x10,0x11,0x10,0x55,0x55,0x55,0x54,0x54,0x54,0x54,0x55,0x7e,0x4,0x0,0x0,0x0,0x8,0xfc,0x10,0x10,0x14,0xfe,0x10,0x30,0x50,0x90,0x10,0x10,0x10,0x50,0x20,
++0x10,0x11,0x11,0x11,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x54,0x7d,0x5,0x2,0xc,0x8,0xfc,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0x68,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x0,0x0,0x3f,0x2,0x2,0xff,0x4,0x8,0x31,0xc1,0x11,0x11,0x11,0x11,0x1f,0x0,0x10,0x38,0xc0,0x0,0x4,0xfe,0x40,0x30,0xe,0x4,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x1,0x21,0x21,0x3f,0x21,0x2,0x4,0xa,0x31,0xc0,0xf,0x0,0x0,0x0,0x0,0x1,0x0,0x8,0x8,0xf8,0x8,0x80,0x40,0x30,0xe,0x4,0xf0,0x10,0x20,0x40,0x80,0x0,
++0x1,0x21,0x21,0x3f,0x0,0x1f,0x10,0x10,0x14,0x12,0x11,0x12,0x24,0x28,0x40,0x80,0x0,0x8,0x8,0xf8,0x0,0xf0,0x10,0x10,0x50,0x90,0x10,0x90,0x50,0x52,0xa,0x4,
++0x1,0x21,0x21,0x3f,0x0,0x3f,0x21,0x21,0x21,0x3f,0x20,0x20,0x20,0x20,0x1f,0x0,0x0,0x8,0x8,0xf8,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x10,0x10,0x55,0x54,0x54,0x54,0x54,0x55,0x55,0x55,0x7d,0x5,0x1,0x1,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x21,0x21,0x3f,0x0,0xff,0x0,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x0,0x0,0x8,0x8,0xf8,0x4,0xfe,0x10,0x90,0xd0,0x90,0x90,0x90,0x90,0x10,0x50,0x20,
++0x1,0x21,0x21,0x3f,0x2,0x2,0xff,0x4,0x4,0x8,0x1f,0x0,0x8,0x10,0x62,0x1,0x0,0x8,0x8,0xf8,0x0,0x4,0xfe,0x0,0x80,0x90,0xf8,0x80,0x90,0x8c,0x84,0x0,
++0x10,0x10,0x11,0x11,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7c,0x4,0x0,0x0,0x0,0x4,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,
++0x10,0x10,0x10,0x10,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x5,0x1,0x1,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x9,0x9,0x11,0x11,0x3f,0x50,0x90,0x10,0x11,0x1,0x21,0x21,0x21,0x21,0x3f,0x0,0x0,0x40,0x24,0xfe,0x0,0x80,0x84,0x44,0x3c,0x0,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x10,0x10,0x55,0x56,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x4,0x0,0x0,0x80,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0xe4,0x24,0x4,0x28,0x10,
++0x1,0x21,0x21,0x3f,0x4,0x78,0x42,0x42,0x42,0x42,0x4e,0x72,0x4,0x4,0x18,0x60,0x0,0x8,0x8,0xf8,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0xa4,0x98,0x80,0x80,0x80,
++0x10,0x11,0x11,0x11,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x5,0x1,0x0,0x4,0xfe,0x4,0x4,0xfc,0x20,0x20,0x24,0xfe,0x10,0x10,0x10,0x8,0x4a,0x86,0x2,
++0x10,0x13,0x10,0x10,0x54,0x54,0x57,0x54,0x55,0x54,0x54,0x57,0x7c,0x4,0x0,0x0,0x0,0xfc,0x88,0x50,0x20,0xd8,0x6,0x20,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x10,0x11,0x11,0x11,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x5,0x1,0x1,0x4,0xfe,0x4,0x14,0xfc,0x4,0x4,0x74,0x54,0x54,0x54,0x74,0x54,0x4,0x14,0x8,
++0x20,0x20,0x23,0x20,0xa8,0xaf,0xa8,0xa9,0xa9,0xab,0xad,0xa9,0xf9,0x9,0x2,0x4,0x8,0x3c,0xc0,0x40,0x44,0xfe,0xa0,0x10,0x18,0x16,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x10,0x10,0x10,0x55,0x56,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x5,0x0,0x0,0x80,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0xe4,0x24,0x24,0xe4,0x4,0x28,0x10,
++0x10,0x10,0x10,0x11,0x56,0x55,0x54,0x54,0x57,0x54,0x54,0x55,0x7c,0x4,0x0,0x0,0x40,0x40,0xf8,0x10,0x24,0xfe,0x24,0x24,0xfe,0x24,0x24,0xfc,0x24,0x20,0xa0,0x40,
++0x10,0x10,0x17,0x10,0x54,0x57,0x56,0x54,0x55,0x54,0x54,0x54,0x7c,0x4,0x1,0x2,0x90,0x94,0xfe,0x90,0x0,0xfe,0x42,0x44,0xf8,0x48,0x48,0x48,0x88,0x88,0x28,0x10,
++0x10,0x10,0x10,0x13,0x54,0x55,0x54,0x54,0x57,0x54,0x54,0x54,0x7c,0x5,0x2,0x0,0x20,0x20,0x24,0xfe,0x20,0x24,0xa8,0x20,0xfe,0x20,0x70,0xa8,0xa8,0x24,0x22,0x20,
++0x1,0x21,0x21,0x3f,0x8,0x8,0x8,0x7e,0x9,0x1d,0x2a,0x28,0x48,0x89,0x9,0x8,0x0,0x8,0x8,0xf8,0x0,0x10,0x90,0x90,0x8,0x48,0x46,0x80,0x90,0x8,0xfc,0x4,
++0x10,0x10,0x10,0x13,0x54,0x54,0x55,0x57,0x55,0x55,0x55,0x55,0x7d,0x4,0x0,0x0,0x20,0x20,0x24,0xfe,0x50,0xa8,0xfc,0x26,0x24,0xfc,0x24,0x24,0xfc,0x20,0x22,0x1e,
++0x1,0x21,0x21,0x3f,0x0,0x3f,0x21,0x2f,0x21,0x27,0x24,0x24,0x27,0x20,0x3f,0x20,0x0,0x8,0x8,0xf8,0x0,0xf8,0x8,0xe8,0x8,0xc8,0x48,0x48,0xc8,0x8,0xf8,0x8,
++0x11,0x10,0x10,0x10,0x55,0x54,0x57,0x54,0x54,0x55,0x56,0x54,0x7c,0x4,0x0,0x0,0x8,0x90,0x60,0x90,0x48,0x40,0xfe,0x80,0xf8,0x88,0xf8,0x88,0xf8,0x88,0xa8,0x90,
++0x10,0x10,0x13,0x10,0x55,0x55,0x55,0x54,0x55,0x54,0x54,0x57,0x7c,0x4,0x1,0x0,0x80,0x48,0xfc,0x0,0xf8,0x8,0xf8,0x0,0xf8,0x10,0x60,0xfe,0x40,0x40,0x40,0x80,
++0x10,0x10,0x10,0x11,0x55,0x56,0x54,0x55,0x54,0x55,0x54,0x54,0x7c,0x4,0x3,0x0,0x40,0x20,0x20,0xfe,0x2,0x54,0x88,0x4,0x0,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x11,0x11,0x11,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x2,0x4,0x8,0x0,0x4,0xfe,0x4,0x4,0xfc,0x10,0x54,0x54,0x54,0x7c,0x10,0x12,0x92,0x92,0xfe,0x2,
++0x10,0x10,0x13,0x10,0x54,0x55,0x55,0x56,0x54,0x55,0x54,0x54,0x7c,0x5,0x2,0x0,0x88,0x88,0xfe,0x88,0x0,0xfe,0x2,0x24,0x20,0xfe,0x20,0x70,0xa8,0x26,0x24,0x20,
++0x10,0x13,0x10,0x10,0x55,0x55,0x55,0x55,0x54,0x54,0x57,0x54,0x7c,0x4,0x0,0x3,0x4,0xfe,0x50,0x54,0xfe,0x54,0x54,0xfc,0x40,0x44,0xfe,0x88,0x90,0x60,0x98,0x4,
++0x1,0x21,0x21,0x3f,0x0,0x3f,0x20,0x3f,0x24,0x3f,0x24,0x29,0x46,0x45,0x98,0x0,0x0,0x8,0x8,0xf8,0x50,0xfe,0x40,0xc4,0x44,0xc8,0xa8,0x30,0x20,0x52,0x8a,0x6,
++0x1,0x21,0x21,0x3f,0x0,0x1f,0x11,0x1f,0x11,0x1f,0x2,0x51,0x51,0x90,0xf,0x0,0x0,0x8,0x8,0xf8,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x0,0x8,0x6,0x12,0xf0,0x0,
++0x1,0x21,0x21,0x3f,0x0,0x1f,0x11,0x1f,0x11,0x1f,0x12,0x2,0x4,0x8,0x30,0x40,0x0,0x8,0x8,0xf8,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x90,0xa8,0xba,0x82,0x7e,0x0,
++0x1,0x21,0x21,0x3f,0x1,0x6,0x38,0xcf,0x0,0x3e,0x22,0x3e,0x22,0x3e,0x22,0x26,0x0,0x8,0x8,0xf8,0x0,0xc0,0x30,0xee,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0x18,
++0x11,0x10,0x10,0x13,0x54,0x55,0x54,0x57,0x54,0x54,0x55,0x55,0x7e,0x4,0xb,0x0,0x8,0x90,0xa0,0xfe,0x40,0xfc,0x40,0xfe,0x80,0x88,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x11,0x10,0x54,0x57,0x54,0x54,0x55,0x54,0x57,0x54,0x55,0x7c,0x4,0x0,0x3,0x20,0x24,0xa8,0x20,0xfe,0x20,0xa8,0x24,0x40,0xfe,0x88,0x8,0x90,0x60,0x98,0x4,
++0x11,0x10,0x10,0x13,0x54,0x54,0x55,0x55,0x57,0x54,0x55,0x55,0x7e,0x3,0x0,0x0,0x4,0x88,0x0,0xfe,0x88,0x88,0x10,0x54,0xb8,0x88,0x10,0x14,0xa4,0xfc,0x84,0x0,
++0x10,0x11,0x11,0x11,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x7d,0x2,0x4,0x0,0x4,0xfe,0x24,0x24,0xfc,0x0,0x4,0x7e,0x44,0x7c,0x44,0x7c,0x44,0x44,0x7c,0x44,
++0x20,0x20,0x27,0x20,0xaf,0xa8,0xa9,0xaf,0xa9,0xaf,0xa8,0xa9,0xf9,0xa,0x4,0x0,0x8,0x3c,0xc0,0x44,0xfe,0x40,0x50,0x5c,0x50,0x5c,0xe0,0x50,0x48,0x4e,0x44,0x40,
++0x1,0x21,0x3f,0x1,0xff,0x0,0x1f,0x10,0x1f,0x0,0x3f,0x20,0x2f,0x28,0x2f,0x20,0x0,0x8,0xf8,0x0,0xfe,0x0,0xf0,0x10,0xf0,0x0,0xf8,0x8,0xe8,0x28,0xe8,0x18,
++0x20,0x22,0x21,0xaa,0xa8,0xa9,0xab,0xad,0xa9,0xa9,0xa9,0xa9,0xf9,0x9,0x1,0x1,0x40,0x48,0x50,0x48,0xa0,0x10,0xfe,0x14,0x10,0xf0,0x10,0x10,0xf0,0x10,0x50,0x20,
++0x10,0x13,0x10,0x54,0x57,0x54,0x55,0x55,0x55,0x55,0x55,0x54,0x7f,0x4,0x0,0x0,0x20,0xfe,0x88,0x50,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x20,0xfe,0x20,0x20,0x20,
++0x20,0x22,0x21,0x20,0xaf,0xa9,0xaa,0xac,0xaa,0xab,0xac,0xaa,0xf9,0x9,0x2,0x4,0x40,0x48,0x50,0x44,0xfe,0x50,0x48,0x44,0x8,0xbc,0xa8,0xa8,0x7e,0x8,0x8,0x8,
++0x20,0x27,0x20,0x22,0xa9,0xa9,0xaa,0xac,0xab,0xaa,0xaa,0xab,0xf9,0x8,0x7,0x0,0x20,0xa8,0xb0,0xa4,0x18,0xf0,0xe,0x4,0xf8,0x8,0x8,0xf8,0x10,0xa4,0xfe,0x0,
++0x1,0x1,0x45,0x7f,0x51,0x59,0x6b,0x5d,0x69,0x5d,0x6b,0x49,0x59,0x41,0x7f,0x40,0x0,0x0,0x14,0xfc,0x44,0x64,0xac,0x74,0xa4,0x74,0xac,0x24,0x64,0x4,0xfc,0x4,
++0x1,0x21,0x3f,0x0,0x26,0x38,0x21,0x1f,0x20,0x3e,0x48,0xa,0xff,0x14,0x22,0x41,0x0,0x8,0xf8,0x0,0xfc,0x8,0x30,0x10,0xfe,0x14,0x50,0x5c,0x50,0xb0,0x90,0xe,
++0x1,0x21,0x3f,0x8,0xff,0x8,0x3e,0x22,0x2a,0x2a,0x2a,0x2a,0xff,0x8,0x14,0x62,0x0,0x8,0xf8,0x0,0xfe,0x20,0x7c,0x44,0x54,0x54,0x54,0x54,0x54,0x28,0x26,0xc2,
++0x0,0x0,0x1,0x2,0x4,0x8,0x10,0x1,0x3,0x5,0x9,0x31,0x1,0x1,0x1,0x1,0x80,0x80,0x0,0x0,0x40,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x8,0x10,0x27,0x40,0x8,0x10,0x20,0x50,0x90,0x11,0x11,0x12,0x14,0x18,0x10,0x80,0x40,0x44,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x8,0x8,0x8,0x8,0x50,0x20,
++0x8,0x8,0x11,0x21,0x49,0x9,0x11,0x31,0x51,0x91,0x11,0x11,0x11,0x11,0x1f,0x10,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xfe,0x0,
++0x8,0x8,0x10,0x20,0x49,0xa,0x11,0x31,0x51,0x91,0x11,0x11,0x11,0x11,0x10,0x10,0x80,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0xe4,0x24,0x24,0xe4,0x4,0x28,0x10,
++0xa,0x9,0x10,0x20,0x4b,0x8,0x10,0x37,0x50,0x90,0x1f,0x10,0x10,0x10,0x10,0x10,0x8,0x10,0xa0,0x8,0xfc,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x8,0x8,0x10,0x21,0x4b,0x8,0x10,0x37,0x51,0x91,0x12,0x15,0x10,0x10,0x11,0x16,0x40,0x40,0x88,0x10,0xe0,0x40,0x88,0xfc,0x0,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,
++0x8,0x8,0x10,0x27,0x48,0xa,0x11,0x37,0x50,0x90,0x11,0x12,0x14,0x18,0x10,0x10,0x40,0x40,0x48,0xfc,0x40,0x48,0x50,0xfe,0x40,0xe0,0x50,0x48,0x4e,0x44,0x40,0x40,
++0x8,0x8,0x12,0x22,0x4a,0xa,0x17,0x30,0x50,0x92,0x12,0x12,0x13,0x14,0x14,0x18,0x40,0x40,0x48,0x7c,0x40,0x44,0xfe,0x40,0x40,0x48,0x7c,0x40,0x40,0xc0,0x66,0x1c,
++0x8,0x8,0x12,0x21,0x49,0x8,0x17,0x34,0x54,0x95,0x15,0x15,0x15,0x14,0x14,0x14,0x40,0x48,0x4c,0x48,0x50,0x44,0xfe,0x4,0x4,0xf4,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x8,0x8,0x13,0x22,0x4b,0xa,0x13,0x30,0x57,0x90,0x10,0x13,0x10,0x10,0x1f,0x10,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x40,0x48,0xfc,0x40,0x44,0xfe,0x0,
++0x8,0x8,0x17,0x22,0x49,0x9,0x12,0x33,0x54,0x90,0x1f,0x10,0x12,0x12,0x13,0x10,0x8,0x7c,0x80,0x48,0x48,0x50,0x0,0xfc,0x40,0x44,0xfe,0x40,0x48,0x48,0xf8,0x8,
++0x12,0x12,0x2a,0x4a,0x8f,0x10,0x2f,0x60,0xaf,0x22,0x2f,0x22,0x23,0x2e,0x20,0x21,0x10,0x10,0x90,0xa4,0xbe,0x44,0xa4,0x28,0xa8,0x10,0x90,0x28,0xa8,0x44,0x86,0x0,
++0x12,0x14,0x2f,0x48,0x8f,0x18,0x2f,0x62,0xbf,0x24,0x27,0x24,0x28,0x2b,0x30,0x21,0x10,0x10,0x90,0xa4,0xbe,0xc4,0xa4,0x28,0xa8,0x10,0x90,0xa8,0xa8,0x44,0x86,0x0,
++0xe,0x1a,0x2e,0x4a,0x8e,0x1a,0x2e,0x64,0xa7,0x2c,0x37,0x24,0x27,0x24,0x27,0x24,0xe0,0xa4,0xfe,0xa0,0xe0,0xa0,0xfe,0x84,0xe4,0x84,0xe4,0x84,0xe4,0x84,0xf4,0x8,
++0x0,0x0,0x8,0x10,0x20,0x40,0x8,0x10,0x20,0x40,0x8,0x10,0x20,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x4,0x88,0x50,0x20,0x50,0x88,0x8,0x18,0x28,0x48,0x88,0x8,0x8,0x8,0x50,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x4,0x88,0x50,0x20,0x57,0x88,0x8,0x18,0x28,0x49,0x89,0x9,0xa,0xa,0x54,0x28,0x80,0x80,0x80,0x90,0xf8,0x90,0x90,0x90,0x90,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x4,0x8b,0x50,0x20,0x50,0x88,0xf,0x18,0x28,0x48,0x88,0x8,0x8,0x8,0x50,0x20,0x10,0xf8,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x4,0x88,0x50,0x21,0x51,0x89,0x9,0x19,0x29,0x49,0x89,0x9,0xa,0xa,0x54,0x28,0x40,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x4,0x8b,0x50,0x21,0x51,0x89,0x9,0x19,0x29,0x48,0x88,0xf,0x8,0x8,0x50,0x20,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x4,0x24,0xf4,0x4,0x4,0x28,0x10,
++0x4,0x88,0x53,0x20,0x50,0x88,0x8,0x18,0x2b,0x48,0x88,0x8,0x8,0x8,0x57,0x20,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0x88,0xfe,0x0,
++0x4,0x88,0x50,0x20,0x51,0x8a,0xb,0x18,0x28,0x48,0x88,0x8,0x9,0x9,0x52,0x24,0x40,0x40,0x40,0x90,0x8,0x4,0xfe,0x90,0x90,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x4,0x88,0x51,0x21,0x51,0x89,0x9,0x19,0x29,0x49,0x89,0x9,0x8,0x8,0x50,0x20,0x0,0x4,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,
++0x5,0x89,0x51,0x22,0x52,0x8d,0x9,0x19,0x29,0x49,0x89,0x9,0x9,0x9,0x50,0x20,0x0,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x28,0x10,0x2,0x2,0xfe,0x0,
++0x4,0x88,0x50,0x27,0x50,0x88,0xb,0x1a,0x2a,0x4b,0x88,0x8,0x9,0x9,0x52,0x24,0xa0,0xa0,0xa8,0xfc,0xa8,0xa8,0xf8,0xa0,0xa4,0xfe,0xa4,0xa4,0x34,0x28,0x20,0x20,
++0x4,0x88,0x50,0x20,0x57,0x88,0x9,0x19,0x2f,0x49,0x89,0x9,0x9,0xa,0x50,0x20,0x20,0x28,0x24,0x20,0xfe,0x20,0x20,0x28,0xe8,0x28,0x28,0x10,0x12,0x2a,0xc6,0x2,
++0x4,0x88,0x50,0x21,0x52,0x8c,0x9,0x18,0x28,0x4f,0x88,0x8,0x9,0xa,0x53,0x20,0x40,0x40,0xa0,0x10,0xe,0x24,0xf0,0x0,0x4,0xfe,0x40,0x80,0x10,0x8,0xfc,0x4,
++0x4,0x88,0x53,0x22,0x54,0x88,0x8,0x1f,0x28,0x49,0x88,0x8,0x8,0x8,0x50,0x20,0x40,0x20,0xfe,0x2,0x14,0x10,0x14,0xfe,0x10,0x10,0x90,0x90,0x10,0x10,0x50,0x20,
++0x0,0x88,0x57,0x20,0x51,0x92,0x12,0x33,0x56,0x9a,0x12,0x12,0x12,0x1a,0xa4,0x40,0x10,0x10,0x90,0x90,0x10,0x10,0xd8,0x54,0x54,0x52,0x92,0x10,0x10,0x10,0x50,0x20,
++0x4,0x8a,0x52,0x22,0x53,0x8a,0xa,0x1a,0x2b,0x48,0x88,0xb,0x8,0x8,0x57,0x20,0x0,0x20,0x24,0x28,0xb0,0x20,0x22,0xa2,0x1e,0x40,0x48,0xfc,0x40,0x44,0xfe,0x0,
++0x4,0x89,0x51,0x21,0x51,0x88,0xb,0x1a,0x2a,0x4b,0x8a,0xa,0xb,0xa,0x52,0x22,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x14,0x8,
++0x4,0x88,0x57,0x21,0x51,0x91,0x1f,0x31,0x53,0x93,0x15,0x15,0x19,0x11,0xa1,0x41,0x4,0xc4,0x4,0x14,0x14,0x54,0xf4,0x14,0x14,0x94,0x54,0x14,0x4,0x4,0x14,0x8,
++0x4,0x88,0x50,0x21,0x52,0x8d,0x8,0x18,0x2f,0x48,0x89,0x9,0xa,0xc,0x51,0x20,0x40,0x40,0xa0,0x10,0x8,0xf6,0x40,0x48,0xfc,0x40,0x50,0x48,0x44,0x44,0x40,0x80,
++0x4,0x88,0x50,0x21,0x52,0x8c,0xb,0x18,0x28,0x4a,0x89,0x9,0x9,0x8,0x57,0x20,0x40,0x40,0xa0,0x10,0x8,0x6,0xf8,0x0,0x8,0x48,0x48,0x50,0x50,0x4,0xfe,0x0,
++0x4,0x88,0x57,0x20,0x50,0x8b,0x8,0x1b,0x28,0x48,0x8b,0xa,0xa,0xa,0x53,0x22,0x80,0x44,0xfe,0x0,0x0,0xfc,0x0,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x4,0x88,0x51,0x22,0x57,0x91,0x12,0x35,0x51,0x91,0x13,0x14,0x10,0x10,0xa1,0x46,0x40,0x80,0x10,0x8,0xfc,0x10,0x8,0x4,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x4,0x88,0x57,0x20,0x50,0x89,0xf,0x18,0x2b,0x4a,0x8a,0xa,0xb,0xa,0x50,0x20,0x40,0x44,0xfe,0x40,0xa0,0x14,0xfe,0x8,0xc8,0x48,0x48,0x48,0xc8,0x8,0x28,0x10,
++0x4,0x8b,0x52,0x22,0x53,0x8a,0xa,0x1b,0x28,0x4f,0x88,0x8,0x9,0xa,0x54,0x20,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0xfe,0x40,0xe0,0x50,0x4e,0x44,0x40,
++0x4,0x8f,0x54,0x24,0x54,0x97,0x14,0x10,0x31,0x52,0x95,0x10,0x10,0x10,0xa1,0x46,0x4,0xfe,0xa4,0xa4,0xa4,0xfc,0x84,0x80,0xf8,0x8,0x8,0x90,0x60,0x40,0x80,0x0,
++0x4,0x88,0x53,0x22,0x52,0x8b,0xa,0x1a,0x2b,0x4a,0x88,0x8,0x8,0x9,0x52,0x24,0x0,0x44,0x9e,0x4,0x4,0x9c,0x4,0x4,0xfc,0x94,0x90,0x90,0x90,0x12,0x12,0xe,
++0x4,0x88,0x50,0x21,0x52,0x95,0x18,0x30,0x57,0x90,0x13,0x12,0x12,0x12,0xa3,0x42,0x40,0x40,0xa0,0x10,0x8,0xf6,0x40,0x48,0xfc,0x40,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x88,0x57,0x21,0x51,0x89,0xa,0x1c,0x28,0x4f,0x88,0x8,0x8,0x8,0x50,0x20,0x80,0x48,0xfc,0x10,0x10,0x10,0xa8,0x44,0x40,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x8,0x8f,0x51,0x21,0x51,0x97,0x14,0x34,0x54,0x97,0x11,0x11,0x11,0x11,0xaa,0x44,0x20,0x20,0x20,0x40,0x7e,0x82,0x14,0x10,0x54,0x54,0x52,0x52,0x92,0x10,0x50,0x20,
++0x5,0x89,0x51,0x21,0x5f,0x91,0x11,0x31,0x57,0x94,0x14,0x14,0x17,0x14,0xa0,0x41,0x4,0x3e,0x24,0x24,0xe4,0x3c,0x24,0x24,0xa4,0xbc,0xa4,0xa4,0xa4,0x44,0x94,0x8,
++0x4,0x88,0x57,0x20,0x51,0x92,0x14,0x3b,0x52,0x93,0x12,0x13,0x12,0x10,0xaf,0x40,0x40,0x48,0xfc,0xe0,0x50,0x48,0x46,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x0,0xfe,0x0,
++0x4,0x8b,0x52,0x22,0x53,0x92,0x12,0x33,0x50,0x9f,0x12,0x12,0x12,0x12,0xa3,0x42,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x0,0xfe,0x40,0x48,0x30,0x90,0xe,0x4,
++0x0,0x8f,0x54,0x27,0x54,0x97,0x10,0x33,0x52,0x93,0x12,0x13,0x12,0x12,0xa2,0x42,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x4,0x8b,0x52,0x22,0x53,0x8a,0xa,0x1a,0x2a,0x4a,0x8a,0xa,0xa,0xa,0x54,0x28,0x4,0xfe,0x24,0x24,0xfc,0x0,0xfc,0x84,0xfc,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,
++0x4,0x8b,0x50,0x20,0x57,0x88,0x9,0xa,0x18,0x2f,0x48,0x88,0x9,0xa,0x54,0x20,0x0,0xf8,0x90,0x60,0xfc,0xc4,0x48,0xc0,0x44,0xfe,0x40,0xe0,0x50,0x4e,0x44,0x40,
++0x4,0x8f,0x51,0x20,0x5f,0x88,0xb,0x1a,0x2b,0x4a,0x8b,0x8,0xf,0x8,0x50,0x20,0x40,0xfc,0x10,0xa4,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0x40,0x40,
++0x4,0x8f,0x51,0x20,0x5f,0x88,0xb,0x1a,0x2b,0x4a,0x8b,0x8,0x8,0x9,0x52,0x2c,0x40,0xfc,0x10,0xa4,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0xa0,0xa0,0x22,0x22,0x1e,
++0x0,0x8f,0x58,0x2a,0x69,0xaf,0x28,0x2a,0x6a,0xaa,0x2b,0x28,0x28,0x29,0xb2,0x44,0x4,0xfe,0x0,0x28,0x48,0xee,0x92,0xa4,0xa8,0xa8,0xe8,0x88,0x94,0x14,0x24,0x42,
++0x4,0x88,0x57,0x20,0x52,0x91,0x13,0x36,0x5b,0x92,0x13,0x10,0x12,0x14,0xa9,0x40,0x40,0x44,0xfe,0x40,0xa8,0x10,0xf8,0xe,0xf8,0x8,0xf8,0x40,0x50,0x4c,0x44,0x80,
++0x2,0x8a,0x53,0x24,0x59,0x97,0x15,0x35,0x57,0x95,0x15,0x17,0x15,0x15,0xa8,0x40,0x4,0x3e,0x94,0x94,0x14,0xec,0x40,0x58,0xde,0x68,0x48,0xfe,0x48,0x48,0xc8,0x8,
++0x0,0x8b,0x50,0x2f,0x50,0x97,0x15,0x34,0x57,0x90,0x17,0x10,0x1f,0x15,0xa4,0x48,0x38,0xc0,0x44,0xfe,0x40,0xfc,0x54,0xe4,0xfc,0x40,0xfc,0x40,0xfe,0x24,0x92,0x2,
++0x1,0x8f,0x51,0x27,0x54,0x97,0x11,0x32,0x57,0x9a,0x13,0x12,0x13,0x12,0xa3,0x42,0x10,0xfe,0x10,0xbc,0xa4,0xbc,0x40,0x24,0xfe,0x20,0xfc,0x20,0xfc,0x20,0xfe,0x0,
++0x0,0x10,0x10,0x10,0x1f,0x22,0x22,0x22,0x54,0x8c,0x8,0x8,0x10,0x20,0xc0,0x0,0x10,0x10,0x10,0x10,0xfc,0x10,0x90,0x90,0x90,0x94,0xfe,0x10,0x10,0x10,0x10,0x10,
++0x1,0x7f,0x49,0x49,0x7f,0x49,0x49,0x7f,0x8,0xff,0x8,0x1c,0x2a,0x49,0x88,0x8,0x20,0xa0,0x3c,0x44,0xa8,0x10,0x20,0x60,0xbe,0x22,0x44,0xa4,0x18,0x10,0x20,0xc0,
++0x20,0x20,0x20,0x21,0x3a,0x4c,0x4b,0x4a,0xab,0x12,0x13,0x22,0x22,0x42,0x83,0x2,0x40,0x40,0xa0,0x10,0x8e,0x44,0xf8,0x8,0xf8,0x8,0xf8,0x48,0x30,0x90,0xc,0x4,
++0x4,0xf,0x32,0x7,0x59,0x7f,0x40,0x9f,0x1,0x1f,0x11,0x1f,0x11,0x1f,0x8,0x30,0x0,0xf0,0x60,0x80,0x0,0xfe,0x2,0xf4,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x20,0x18,
++0x2,0x2,0x7,0x4,0xa,0x11,0x6,0x18,0xe0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe0,0x40,0x80,0x0,0xc0,0x30,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x10,0x1e,0x24,0x28,0x40,0x90,0x10,0x10,0x10,0x12,0x14,0x18,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x20,0x23,0x20,0x3c,0x44,0x89,0x23,0x20,0x20,0x20,0x21,0x25,0x2a,0x32,0x24,0x0,0x0,0xf8,0x20,0x40,0x80,0x4,0xfe,0x94,0x94,0x94,0x24,0x24,0x44,0x44,0xa8,0x10,
++0x20,0x20,0x20,0x3f,0x44,0x8a,0x22,0x22,0x22,0x22,0x23,0x20,0x28,0x30,0x20,0x0,0x40,0x40,0x44,0xfe,0x40,0x48,0x48,0x48,0x48,0x48,0xf8,0x48,0x40,0x42,0x42,0x3e,
++0x21,0x21,0x21,0x3d,0x46,0x89,0x20,0x23,0x20,0x20,0x20,0x24,0x28,0x30,0x20,0x0,0x0,0x0,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0x8,0x8,0x8,0x8,0xa,0xa,0x6,
++0x20,0x20,0x23,0x3c,0x44,0x88,0x20,0x20,0x2f,0x20,0x20,0x24,0x28,0x30,0x27,0x0,0x8,0x3c,0xc0,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x48,0xfc,0x0,
++0x20,0x20,0x23,0x3c,0x44,0x88,0x20,0x2f,0x20,0x20,0x20,0x24,0x29,0x31,0x22,0xc,0x8,0x3c,0xc0,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x20,0x20,0x21,0x3d,0x46,0x88,0x23,0x20,0x20,0x20,0x20,0x24,0x28,0x30,0x21,0x6,0x80,0x84,0xfe,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x20,0x20,0x20,0x3c,0x45,0x8a,0x27,0x20,0x20,0x23,0x22,0x26,0x2a,0x32,0x23,0x2,0x40,0x40,0x80,0x80,0x10,0x8,0xfc,0x4,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x20,0x20,0x3f,0x46,0x8a,0x22,0x22,0x22,0x22,0x22,0x26,0x2a,0x32,0x22,0x2,0x40,0x40,0x84,0xfe,0x4,0x4,0xf4,0x94,0x94,0x94,0x94,0xf4,0x4,0x4,0x14,0x8,
++0x20,0x20,0x23,0x3c,0x44,0x8b,0x22,0x24,0x21,0x20,0x20,0x27,0x28,0x30,0x21,0x0,0x40,0x48,0xfc,0x40,0x40,0xfc,0x4,0x8,0xf0,0x20,0x44,0xfe,0x40,0x40,0x40,0x80,
++0x20,0x20,0x20,0x3c,0x45,0x8a,0x25,0x20,0x20,0x27,0x20,0x21,0x2a,0x34,0x21,0x0,0x40,0x40,0xa0,0xa0,0x10,0x8,0xf6,0x40,0x48,0xfc,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x20,0x23,0x22,0x3e,0x47,0x8a,0x22,0x23,0x22,0x22,0x23,0x26,0x2a,0x32,0x23,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x20,0x24,0xa8,0x30,0x22,0xa2,0x1e,0x0,
++0x20,0x20,0x27,0x3c,0x45,0x8a,0x24,0x2b,0x22,0x23,0x22,0x23,0x2a,0x30,0x27,0x0,0x40,0x48,0xfc,0xe0,0x50,0x48,0x46,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x0,0xfc,0x0,
++0x20,0x20,0x21,0x3d,0x45,0x89,0x21,0x21,0x21,0x20,0x23,0x20,0x28,0x30,0x20,0x7,0x20,0xa4,0x2e,0x24,0x24,0xac,0x24,0x24,0xfc,0x20,0xfc,0x88,0x50,0x20,0xd8,0x6,
++0x21,0x21,0x27,0x39,0x49,0x93,0x2,0x23,0x22,0x23,0x20,0x27,0x28,0x31,0x22,0xc,0x10,0x14,0xfe,0x10,0x10,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0xa0,0x10,0xe,0x4,
++0x21,0x20,0x27,0x38,0x4b,0x90,0xf,0x20,0x21,0x21,0x22,0x2b,0x34,0x28,0x17,0x0,0x10,0xa0,0xfc,0x40,0xfc,0x40,0xfe,0x88,0xfc,0x48,0x48,0xf8,0x88,0x88,0xfe,0x0,
++0x21,0x21,0x27,0x39,0x49,0x90,0x3,0x22,0x23,0x20,0x27,0x20,0x2b,0x30,0x2f,0x0,0x10,0x14,0xfe,0x10,0xf0,0x40,0xf8,0x48,0xf8,0x40,0xfc,0x40,0xf8,0x40,0xfe,0x0,
++0x22,0x22,0x22,0x3f,0x4a,0x92,0xf,0x20,0x27,0x24,0x27,0x24,0x2f,0x34,0x25,0x4,0x88,0x88,0x88,0xd0,0x9e,0xa4,0xf4,0x14,0xd4,0x54,0xc8,0x48,0xd4,0x54,0x64,0x82,
++0x20,0x27,0x24,0x3c,0x4f,0x94,0x4,0x27,0x21,0x27,0x21,0x21,0x2f,0x31,0x22,0x4,0x4,0xbe,0xa4,0xa4,0xbc,0x20,0xa4,0xbc,0x10,0xfc,0x10,0x14,0xfe,0x10,0xc,0x4,
++0x20,0x2f,0x20,0x3b,0x4a,0x97,0x5,0x2b,0x21,0x23,0x21,0x27,0x29,0x33,0x2d,0x1,0x40,0xfe,0x40,0xf8,0x48,0xfe,0x12,0xfc,0x10,0xf8,0x10,0xfe,0x48,0x30,0x8e,0x4,
++0x1,0x0,0x3f,0x20,0x24,0x24,0x24,0x24,0x24,0x27,0x24,0x24,0x44,0x44,0x83,0x0,0x0,0x88,0xfc,0x0,0x0,0x0,0x8,0x30,0xc0,0x0,0x0,0x0,0x4,0x4,0xfc,0x0,
++0x1,0x0,0x3f,0x20,0x20,0x2f,0x20,0x20,0x3f,0x21,0x21,0x21,0x42,0x42,0x84,0x18,0x0,0x88,0xfc,0x0,0x10,0xf8,0x80,0x84,0xfe,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,
++0x1,0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x2f,0x24,0x22,0x21,0x40,0x41,0x86,0x18,0x0,0x88,0xfc,0x80,0x84,0xfe,0x80,0x80,0xf8,0x10,0x20,0x40,0x80,0x60,0x1e,0x4,
++0x1,0x0,0x3f,0x24,0x24,0x27,0x28,0x30,0x27,0x24,0x24,0x27,0x44,0x44,0x84,0x3,0x0,0x88,0xfc,0x0,0x8,0xfc,0x8,0x48,0xe8,0x48,0x48,0xc8,0x28,0x12,0x2,0xfe,
++0x1,0x0,0x3f,0x20,0x22,0x24,0x24,0x2f,0x34,0x24,0x24,0x24,0x45,0x46,0x84,0x4,0x0,0x88,0xfc,0x0,0x20,0x20,0x24,0xfe,0x60,0x70,0xa8,0xa8,0x26,0x24,0x20,0x20,
++0x1,0x0,0x3f,0x24,0x22,0x3f,0x20,0x20,0x2f,0x20,0x20,0x3f,0x40,0x40,0x80,0x0,0x0,0x88,0xfc,0x10,0x20,0xfc,0x80,0x90,0xf8,0x80,0x84,0xfe,0x80,0x80,0x80,0x80,
++0x1,0x0,0x3f,0x22,0x3f,0x22,0x23,0x20,0x27,0x24,0x27,0x24,0x44,0x48,0x88,0x10,0x0,0x88,0xfc,0x20,0xfc,0x20,0xe0,0x0,0xf0,0x10,0xf0,0x80,0x40,0x30,0xe,0x4,
++0x1,0x0,0x3f,0x20,0x2f,0x21,0x22,0x24,0x2f,0x34,0x27,0x24,0x47,0x44,0x80,0x0,0x0,0x88,0xfc,0x80,0xfc,0x40,0xa0,0x90,0xfe,0x94,0xf0,0x90,0xf0,0x92,0x82,0x7e,
++0x1,0x0,0x3f,0x22,0x2c,0x28,0x28,0x2e,0x28,0x28,0x2f,0x29,0x42,0x44,0x88,0x30,0x0,0x88,0xfc,0x80,0xb8,0x88,0x88,0xb8,0x88,0x88,0xf8,0x48,0x20,0x10,0xe,0x4,
++0x1,0x0,0x3f,0x21,0x2f,0x28,0x2f,0x28,0x2f,0x21,0x22,0x3f,0x40,0x40,0x80,0x0,0x0,0x88,0xfc,0x0,0xf8,0x88,0xf8,0x88,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x0,0x3f,0x20,0x2f,0x20,0x3f,0x21,0x2f,0x22,0x27,0x2c,0x34,0x24,0x41,0x42,0x8c,0x80,0xfe,0x80,0xf8,0x88,0xfe,0x8,0xf8,0x20,0xf0,0x1e,0x94,0x90,0x40,0x30,0x8,
++0x1,0x0,0x3f,0x22,0x2f,0x22,0x2f,0x22,0x3f,0x24,0x27,0x24,0x44,0x4a,0x91,0x0,0x0,0x88,0xfc,0x20,0xa4,0x3e,0xa8,0x48,0xa8,0x28,0xa8,0x90,0x90,0xa8,0x44,0x82,
++0x0,0x3f,0x24,0x3f,0x24,0x27,0x20,0x2f,0x28,0x2f,0x20,0x2f,0x20,0x4f,0x40,0xbf,0x80,0xfe,0x10,0xfc,0x10,0xf0,0x80,0xf8,0x88,0xf8,0x80,0xf8,0x80,0xf8,0x80,0xfe,
++0x0,0x3f,0x20,0x2f,0x28,0x2f,0x28,0x2f,0x20,0x2f,0x20,0x3f,0x24,0x4b,0x40,0xbf,0x80,0xfe,0x0,0xf8,0x88,0xf8,0x88,0xf8,0x80,0xf8,0x80,0xfe,0x90,0xe8,0x80,0xfe,
++0x0,0x3f,0x24,0x27,0x29,0x2a,0x3f,0x2a,0x2f,0x2a,0x2f,0x2a,0x2a,0x4a,0x51,0x80,0x80,0xfe,0x0,0xfc,0x24,0x24,0xac,0xc8,0xa8,0xbe,0xc8,0x88,0xfe,0x88,0x88,0x8,
++0x0,0x3f,0x20,0x3f,0x20,0x2f,0x2a,0x2b,0x2a,0x2f,0x20,0x27,0x20,0x5f,0x42,0x8c,0x80,0xfe,0x80,0xfe,0x0,0xf8,0x28,0xe8,0x28,0xf8,0x0,0xf0,0x0,0xfc,0xa0,0x98,
++0x0,0x3f,0x22,0x24,0x2d,0x36,0x24,0x24,0x27,0x24,0x27,0x24,0x27,0x44,0x44,0x84,0x80,0xfe,0x50,0xfc,0x90,0xfc,0x90,0x9c,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x10,0x10,0x10,0x10,0x58,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x17,0x10,0x58,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x11,0x12,0x14,0x0,0x4,0xfe,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x84,0x4,0x28,0x10,
++0x10,0x10,0x10,0x10,0x5b,0x54,0x50,0x91,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x90,0x90,0x10,0x10,0x10,0x10,0x50,0x20,
++0x10,0x10,0x13,0x10,0x58,0x54,0x50,0x97,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x8,0x1c,0xe0,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x17,0x10,0x58,0x54,0x5f,0x90,0x10,0x10,0x10,0x10,0x11,0x11,0x12,0x14,0x0,0x8,0xfc,0x40,0x40,0x44,0xfe,0x40,0x60,0xa0,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x10,0x17,0x58,0x54,0x50,0x93,0x12,0x11,0x10,0x10,0x10,0x11,0x12,0x1c,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0xf8,0x8,0x10,0xa0,0x40,0xa0,0x10,0xe,0x4,
++0x10,0x13,0x12,0x12,0x5a,0x56,0x52,0x92,0x12,0x12,0x12,0x12,0x13,0x12,0x13,0x10,0x8,0xfc,0x0,0x4,0x84,0x48,0x48,0x30,0x10,0x28,0x48,0x84,0x4,0x0,0xfe,0x0,
++0x20,0x20,0x20,0x20,0xb7,0xac,0xa4,0xa4,0x24,0x27,0x24,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xfc,0x44,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x10,0x10,0x59,0x56,0x50,0x90,0x17,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x80,0x80,0x88,0xfc,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x11,0x11,0x11,0x12,0x5b,0x54,0x53,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x4,0xfe,0x0,0xf8,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x12,0xa,0x6,0x2,
++0x11,0x11,0x11,0x11,0x59,0x55,0x51,0x9f,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x0,0x8,0x10,0x20,0x40,0x80,0x4,0xfe,0x40,0x40,0x20,0x20,0x10,0x4e,0x84,0x0,
++0x10,0x10,0x10,0x10,0x59,0x56,0x54,0x91,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x40,0x40,0xa0,0x90,0x8,0xe,0x4,0xf0,0x10,0x10,0x50,0x20,0x4,0x4,0xfc,0x0,
++0x10,0x10,0x10,0x10,0x59,0x55,0x52,0x94,0x10,0x10,0x10,0x11,0x12,0x13,0x10,0x10,0x0,0x20,0xa0,0x90,0x10,0x8,0xe,0x44,0x40,0x80,0x80,0x10,0x8,0xfc,0x4,0x0,
++0x10,0x10,0x10,0x17,0x58,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x80,0x40,0x4,0xfe,0x40,0x40,0x60,0x50,0x4c,0x44,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x13,0x10,0x58,0x54,0x50,0x93,0x10,0x10,0x10,0x10,0x10,0x10,0x17,0x10,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0x88,0x88,0xfe,0x0,
++0x10,0x10,0x10,0x10,0x5f,0x54,0x50,0x90,0x13,0x12,0x12,0x12,0x12,0x12,0x13,0x12,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x10,0x10,0x5b,0x54,0x50,0x90,0x11,0x11,0x12,0x14,0x18,0x10,0x10,0x10,0x40,0x50,0x48,0x40,0xfe,0x40,0xc0,0xe0,0x50,0x50,0x48,0x4e,0x44,0x40,0x40,0x40,
++0x10,0x17,0x10,0x12,0x59,0x55,0x51,0x90,0x1f,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x8,0xfc,0x40,0x48,0x48,0x48,0x50,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x13,0x12,0x5a,0x56,0x53,0x92,0x12,0x12,0x13,0x12,0x10,0x10,0x1f,0x10,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x0,0x4,0xfe,0x0,
++0x10,0x10,0x10,0x13,0x5a,0x56,0x52,0x92,0x12,0x1f,0x10,0x10,0x10,0x11,0x12,0x14,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0x48,0x48,0xfe,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x11,0x11,0x11,0x11,0x5a,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x4,0xfe,0x80,0x80,0x88,0xfc,0x80,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,
++0x10,0x13,0x12,0x12,0x5b,0x56,0x52,0x92,0x12,0x12,0x12,0x12,0x14,0x14,0x18,0x10,0x4,0xfe,0x4,0x4,0xfc,0x0,0x80,0x84,0x88,0x90,0xa0,0xc0,0x82,0x82,0x7e,0x0,
++0x10,0x10,0x10,0x17,0x58,0x54,0x57,0x94,0x14,0x17,0x10,0x10,0x11,0x11,0x12,0x14,0xa0,0xa0,0xa4,0xfe,0xa4,0xa4,0xfc,0xa4,0xa0,0xfe,0xa2,0xa2,0x2a,0x24,0x20,0x20,
++0x10,0x10,0x13,0x10,0x58,0x54,0x51,0x92,0x14,0x13,0x12,0x12,0x12,0x12,0x13,0x12,0x0,0x4,0xfe,0x84,0x84,0x84,0x14,0x8,0x0,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x13,0x11,0x10,0x58,0x54,0x51,0x92,0x15,0x10,0x10,0x17,0x10,0x10,0x10,0x10,0x0,0xf8,0x10,0xa0,0x40,0xa0,0x50,0x4e,0xf4,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,
++0x10,0x10,0x10,0x18,0x55,0x52,0x57,0x90,0x10,0x13,0x12,0x12,0x12,0x12,0x13,0x12,0x40,0x40,0x80,0x80,0x10,0x8,0xfc,0x4,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x21,0x2f,0x30,0xa8,0xa0,0xbf,0xa2,0x22,0x24,0x25,0x28,0x2f,0x20,0x20,0x21,0x10,0x10,0x90,0x14,0x7e,0x14,0xd4,0x14,0x14,0x14,0x24,0xa4,0xa4,0x44,0x94,0x8,
++0x20,0x27,0x24,0x24,0xb4,0xac,0xa7,0xa4,0x24,0x24,0x24,0x24,0x28,0x29,0x31,0x26,0x4,0xfe,0x40,0x50,0x48,0x40,0xfe,0x40,0x40,0x40,0xa0,0xa0,0xa0,0x10,0xe,0x4,
++0x20,0x27,0x24,0x24,0xb5,0xad,0xa5,0xa5,0x25,0x25,0x25,0x21,0x22,0x22,0x24,0x28,0x44,0xe4,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x4,0x84,0x44,0x54,0x8,
++0x10,0x12,0x12,0x12,0x5b,0x54,0x53,0x90,0x10,0x13,0x12,0x12,0x12,0x12,0x11,0x10,0x40,0x48,0x48,0x48,0xf8,0x0,0xf8,0x8,0x8,0xf8,0x8,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x10,0x11,0x5a,0x54,0x53,0x92,0x12,0x13,0x12,0x12,0x13,0x12,0x10,0x10,0x80,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0xe4,0x24,0x24,0xe4,0x4,0x28,0x10,
++0x10,0x10,0x11,0x11,0x5a,0x54,0x50,0x91,0x12,0x14,0x1b,0x12,0x12,0x12,0x13,0x12,0x80,0x80,0xf8,0x10,0xa0,0x40,0xa0,0x10,0xe,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x27,0x24,0x28,0xb7,0xa9,0xa1,0xa2,0x27,0x20,0x20,0x2f,0x20,0x20,0x20,0x20,0x0,0xfe,0x82,0x84,0xf8,0x0,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x10,0x10,0x17,0x10,0x58,0x57,0x54,0x98,0x13,0x10,0x10,0x17,0x10,0x10,0x11,0x10,0x40,0x48,0xfc,0x40,0x40,0xfe,0x2,0x4,0xf8,0x10,0x24,0xfe,0x40,0x40,0x40,0x80,
++0x10,0x10,0x17,0x10,0x58,0x57,0x54,0x94,0x17,0x14,0x10,0x11,0x12,0x14,0x18,0x10,0x40,0x44,0xfe,0x40,0x44,0xfe,0x44,0x44,0xfc,0x44,0xe0,0x50,0x48,0x46,0x44,0x40,
++0x21,0x25,0x25,0x25,0xb5,0xad,0xa5,0xa5,0x25,0x20,0x20,0x2f,0x20,0x20,0x3f,0x20,0x0,0x0,0xfc,0x4,0x28,0x10,0x28,0x46,0x80,0x80,0x90,0xf8,0x80,0x84,0xfe,0x0,
++0x10,0x10,0x17,0x14,0x5c,0x57,0x54,0x94,0x17,0x10,0x10,0x17,0x10,0x10,0x1f,0x10,0x0,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x40,0x48,0xfc,0x40,0x44,0xfe,0x0,
++0x10,0x17,0x14,0x14,0x5c,0x57,0x54,0x94,0x14,0x15,0x16,0x14,0x14,0x14,0x17,0x14,0x4,0xfe,0x44,0x44,0x54,0xfc,0x44,0xc4,0xe4,0x5c,0x4c,0x44,0x44,0x4,0xfc,0x4,
++0x10,0x13,0x12,0x12,0x5b,0x54,0x57,0x94,0x14,0x14,0x17,0x14,0x14,0x14,0x13,0x10,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x44,0x44,0x44,0xfc,0x0,0x2,0x2,0xfe,0x0,
++0x12,0x11,0x10,0x13,0x58,0x50,0x57,0x94,0x14,0x17,0x10,0x11,0x12,0x14,0x10,0x10,0x8,0x10,0xa0,0xf8,0x48,0x48,0xf8,0x40,0x44,0xfe,0xc4,0x44,0x54,0x48,0x40,0x40,
++0x10,0x10,0x11,0x1a,0x57,0x51,0x52,0x94,0x11,0x12,0x15,0x10,0x10,0x10,0x13,0x14,0x40,0x80,0x10,0x8,0xfc,0x10,0x8c,0x84,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,0x4,
++0x10,0x17,0x14,0x14,0x5d,0x54,0x54,0x94,0x17,0x14,0x14,0x14,0x14,0x15,0x17,0x10,0x8,0xfc,0x20,0x28,0xfc,0x20,0xa8,0x20,0xfe,0x20,0x50,0x50,0x88,0x4,0xfe,0x0,
++0x10,0x10,0x17,0x10,0x58,0x57,0x52,0x91,0x10,0x17,0x10,0x10,0x1f,0x10,0x10,0x10,0x40,0x48,0xfc,0x40,0x44,0xfe,0x8,0x10,0xa0,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,
++0x10,0x10,0x10,0x17,0x58,0x54,0x50,0x97,0x10,0x10,0x10,0x1f,0x10,0x10,0x10,0x10,0xa0,0xa0,0xa8,0xbc,0xa0,0xa0,0xa0,0xbc,0xa0,0xa0,0xa4,0xbe,0xa0,0xa0,0xa0,0xa0,
++0x10,0x14,0x12,0x11,0x58,0x57,0x54,0x94,0x15,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x40,0x44,0x48,0x50,0x44,0xfe,0x4,0x4,0xf4,0x14,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x10,0x17,0x14,0x15,0x5c,0x57,0x54,0x94,0x17,0x15,0x15,0x15,0x15,0x14,0x14,0x14,0x4,0xfe,0x4,0x14,0xa4,0xfc,0x44,0x54,0xfc,0x4,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x17,0x14,0x14,0x5d,0x54,0x54,0x97,0x14,0x15,0x15,0x15,0x15,0x15,0x18,0x10,0x4,0xfe,0x44,0x44,0xf4,0x44,0x54,0xfc,0x4,0xf4,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x11,0x11,0x11,0x12,0x5c,0x55,0x51,0x92,0x14,0x11,0x11,0x15,0x15,0x19,0x10,0x10,0x0,0x4,0xfe,0xa4,0xa4,0x24,0x44,0x54,0x88,0x40,0x20,0x24,0xa,0xa,0xf8,0x0,
++0x10,0x10,0x17,0x11,0x59,0x55,0x52,0x94,0x10,0x1f,0x10,0x10,0x10,0x10,0x10,0x10,0x80,0x48,0xfc,0x10,0x10,0x10,0xa8,0x44,0x40,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x20,0x27,0x24,0x24,0xb7,0xac,0xa4,0xa7,0x20,0x2f,0x29,0x29,0x29,0x29,0x3f,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xfc,0x24,0x24,0x24,0x24,0xfe,0x0,
++0x10,0x10,0x13,0x1a,0x53,0x50,0x5f,0x90,0x13,0x12,0x12,0x12,0x12,0x10,0x11,0x16,0x40,0x48,0xfc,0x48,0xf8,0x40,0xfe,0x8,0xfc,0x8,0x48,0x48,0x48,0xb0,0x8,0x4,
++0x10,0x17,0x14,0x14,0x5f,0x54,0x53,0x90,0x1f,0x11,0x13,0x10,0x10,0x10,0x10,0x10,0x4,0xbe,0xa4,0xa4,0xbc,0x0,0xf8,0x0,0xfe,0x0,0xf8,0x8,0x8,0x88,0x50,0x20,
++0x10,0x17,0x14,0x14,0x5f,0x54,0x50,0x9f,0x10,0x10,0x10,0x10,0x11,0x11,0x12,0x14,0x4,0xfe,0xa4,0xa4,0xfc,0x80,0x44,0xfe,0x80,0x88,0xfc,0x88,0x8,0x8,0x28,0x10,
++0x10,0x12,0x12,0x12,0x5b,0x54,0x50,0x97,0x10,0x10,0x17,0x14,0x14,0x14,0x14,0x14,0x40,0x48,0x48,0x48,0xf8,0x0,0x4,0xfe,0x40,0x84,0xfe,0xa4,0xa4,0xa4,0xa4,0xc,
++0x10,0x11,0x17,0x11,0x59,0x55,0x57,0x91,0x13,0x13,0x15,0x15,0x19,0x11,0x11,0x11,0x90,0xd0,0x10,0x10,0x52,0x34,0xd8,0x10,0x10,0x90,0x50,0x28,0x28,0x44,0x82,0x0,
++0x11,0x11,0x11,0x1a,0x55,0x51,0x51,0x91,0x11,0x11,0x11,0x13,0x14,0x10,0x11,0x16,0x0,0x4,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xf8,0x10,0xa0,0x40,0xb0,0xe,
++0x10,0x10,0x17,0x18,0x57,0x50,0x5f,0x90,0x11,0x13,0x10,0x17,0x11,0x12,0x14,0x10,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x80,0x10,0xe0,0x48,0xfc,0x50,0x4c,0x44,0xc0,
++0x22,0x21,0x2f,0x21,0xb7,0xa9,0xa1,0xbf,0x21,0x21,0x27,0x21,0x23,0x25,0x29,0x21,0x10,0x24,0xfe,0x20,0xfc,0x24,0x24,0xfe,0x24,0x24,0xfc,0x20,0x30,0x2e,0x24,0x20,
++0x10,0x13,0x12,0x13,0x5a,0x57,0x52,0x93,0x12,0x13,0x13,0x13,0x15,0x15,0x19,0x11,0x20,0xfe,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x24,0x2c,
++0x10,0x13,0x12,0x13,0x5a,0x57,0x50,0x9f,0x10,0x13,0x12,0x13,0x11,0x12,0x14,0x10,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x0,0xf8,0x8,0xf8,0x50,0x4c,0x44,0xc0,
++0x11,0x11,0x11,0x1a,0x56,0x5b,0x52,0x92,0x13,0x12,0x12,0x13,0x12,0x12,0x12,0x14,0x40,0x24,0xfe,0x20,0x20,0xfc,0x20,0x20,0xfc,0x20,0x20,0xfe,0x0,0x94,0x4a,0x2,
++0x10,0x17,0x11,0x10,0x5f,0x54,0x53,0x92,0x13,0x12,0x13,0x10,0x17,0x10,0x1f,0x10,0x40,0xfc,0x10,0xa4,0xfe,0x0,0xf8,0x48,0xf8,0x48,0xf8,0x40,0xfc,0x40,0xfe,0x0,
++0x11,0x11,0x1f,0x11,0x5b,0x55,0x51,0x97,0x10,0x12,0x12,0x12,0x13,0x12,0x14,0x18,0x10,0x14,0xfe,0x10,0xb8,0x54,0x10,0xfc,0x48,0x40,0x7c,0x40,0x40,0xc0,0x46,0x3c,
++0x10,0x1f,0x10,0x17,0x5d,0x55,0x55,0x97,0x10,0x13,0x10,0x1f,0x11,0x12,0x14,0x10,0x40,0xfe,0x0,0xfc,0x14,0xf4,0x14,0xfc,0x0,0xf8,0x0,0xfe,0x50,0x4c,0x44,0xc0,
++0x21,0x2f,0x21,0x23,0xb2,0xab,0xa0,0xaf,0x28,0x33,0x22,0x23,0x22,0x23,0x22,0x23,0x10,0xfe,0x10,0xf8,0xa8,0xf8,0x0,0xfe,0x2,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,
++0x0,0x3f,0x2,0x2,0xff,0x4,0x4,0x8,0x12,0x22,0xcb,0xa,0x12,0x22,0xa,0x4,0x10,0xf8,0x0,0x4,0xfe,0x80,0x40,0x20,0x10,0xe,0x24,0x90,0x48,0x48,0x0,0x0,
++0x3c,0x27,0x24,0x29,0x26,0x24,0x34,0x28,0x21,0x26,0x18,0xe1,0x9,0x11,0x25,0x2,0x40,0xfc,0x80,0xf8,0x88,0xf8,0x88,0xf8,0x88,0xc0,0x30,0xe,0x50,0x28,0x28,0x0,
++0x20,0x17,0x40,0x40,0x40,0x40,0x40,0x5f,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x4,0xfe,0x4,0x4,0x4,0x4,0x24,0xf4,0x4,0x4,0x4,0x4,0x4,0x4,0x14,0x8,
++0x20,0x17,0x40,0x40,0x5f,0x40,0x40,0x40,0x4f,0x40,0x40,0x40,0x5f,0x40,0x40,0x40,0x4,0xfe,0x4,0x24,0xf4,0x4,0x4,0x44,0xe4,0x4,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x20,0x17,0x41,0x41,0x5f,0x41,0x41,0x4f,0x41,0x41,0x5f,0x41,0x41,0x41,0x41,0x41,0x4,0xfe,0x4,0x24,0xf4,0x4,0x44,0xe4,0x4,0x14,0xfc,0x14,0x54,0x24,0xc,0x4,
++0x20,0x17,0x42,0x42,0x42,0x5f,0x42,0x44,0x45,0x49,0x4a,0x52,0x67,0x40,0x40,0x40,0x4,0xfe,0x4,0x4,0x24,0xf4,0x4,0x84,0x4,0x4,0x44,0x24,0xe4,0x4,0x14,0x8,
++0x20,0x17,0x40,0x42,0x41,0x5f,0x40,0x44,0x42,0x41,0x42,0x44,0x48,0x40,0x40,0x40,0x4,0xfe,0x4,0x4,0x24,0xf4,0x44,0x44,0x84,0x4,0x84,0x64,0x24,0x4,0x14,0x8,
++0x20,0x17,0x40,0x42,0x41,0x5f,0x40,0x47,0x44,0x44,0x44,0x44,0x48,0x50,0x40,0x40,0x4,0xfe,0x4,0x4,0x24,0xf4,0x4,0xc4,0x44,0x44,0x44,0x54,0x74,0x4,0x14,0x8,
++0x20,0x17,0x40,0x50,0x48,0x47,0x40,0x58,0x49,0x49,0x4a,0x4c,0x53,0x60,0x40,0x40,0x4,0xfe,0x4,0x84,0xa4,0xf4,0x84,0x84,0x44,0x34,0x14,0x4,0xfc,0x4,0x14,0x8,
++0x20,0x17,0x40,0x40,0x47,0x44,0x44,0x47,0x40,0x4f,0x48,0x48,0x48,0x4f,0x48,0x40,0x4,0xfe,0x4,0x44,0xe4,0x44,0x44,0xc4,0x4,0xe4,0x24,0x24,0x24,0xe4,0x14,0x8,
++0x20,0x17,0x40,0x40,0x5f,0x51,0x51,0x5f,0x51,0x53,0x55,0x59,0x51,0x5f,0x50,0x40,0x4,0xfe,0x4,0x4,0xf4,0x14,0x54,0xf4,0x14,0x94,0x54,0x34,0x14,0xf4,0x14,0x8,
++0x20,0x17,0x42,0x47,0x48,0x51,0x4f,0x49,0x4f,0x49,0x4f,0x41,0x41,0x40,0x40,0x40,0x4,0xfe,0x4,0xc4,0x84,0x24,0xf4,0x24,0xe4,0x24,0xe4,0x4,0x14,0xf4,0x4,0xc,
++0x20,0x17,0x42,0x41,0x4f,0x48,0x4f,0x48,0x4f,0x4a,0x49,0x48,0x4a,0x4c,0x48,0x40,0x4,0xfe,0x4,0x24,0xf4,0x24,0xe4,0x24,0xe4,0x14,0x24,0xc4,0x44,0x34,0x4,0xc,
++0x20,0x17,0x40,0x40,0x7f,0x40,0x5e,0x52,0x52,0x52,0x5e,0x40,0x7e,0x41,0x42,0x40,0x4,0xfe,0xa4,0x94,0xfc,0x84,0x84,0x94,0x54,0x64,0x44,0x54,0xb4,0x14,0x4,0xc,
++0x20,0x17,0x40,0x4f,0x48,0x4f,0x48,0x4f,0x40,0x5f,0x50,0x5f,0x50,0x5f,0x40,0x40,0x4,0xfe,0x4,0xe4,0x24,0xe4,0x24,0xe4,0x4,0xf4,0x14,0xf4,0x14,0xf4,0x14,0x8,
++0x20,0x17,0x40,0x42,0x4c,0x48,0x4e,0x48,0x4f,0x42,0x42,0x44,0x44,0x48,0x50,0x40,0x4,0xfe,0x4,0x24,0xf4,0x24,0xe4,0x24,0xe4,0x84,0x84,0x94,0x94,0x74,0x4,0xc,
++0x20,0x17,0x40,0x40,0x5f,0x49,0x45,0x5f,0x50,0x67,0x44,0x42,0x41,0x46,0x58,0x40,0x4,0xfe,0x24,0xf4,0x4,0x24,0x44,0xfc,0xc,0xd4,0x44,0x84,0x4,0xc4,0x34,0x8,
++0x20,0x17,0x40,0x4f,0x49,0x4f,0x48,0x4a,0x4c,0x40,0x4f,0x48,0x4f,0x48,0x4f,0x40,0x4,0xfe,0x4,0xe4,0x4,0xf4,0x84,0x54,0x34,0x4,0xe4,0x24,0xe4,0x24,0xf4,0x8,
++0x20,0x17,0x48,0x44,0x44,0x7f,0x48,0x49,0x4e,0x4a,0x4a,0x52,0x52,0x66,0x40,0x40,0x4,0xfe,0x4,0x44,0x44,0xa4,0xa4,0x14,0x8c,0x64,0x24,0x4,0x84,0x64,0x24,0xc,
++0x20,0x17,0x40,0x4f,0x48,0x4f,0x48,0x4f,0x48,0x4f,0x41,0x7f,0x41,0x46,0x58,0x40,0x4,0xfe,0x4,0xe4,0x24,0xe4,0x24,0xe4,0x24,0xe4,0x44,0xfc,0x4,0xc4,0x34,0xc,
++0x20,0x17,0x40,0x5e,0x52,0x4a,0x44,0x4f,0x71,0x41,0x5f,0x41,0x42,0x44,0x58,0x40,0x4,0xfe,0x84,0xa4,0xcc,0x94,0x64,0xe4,0x1c,0x4,0xf4,0x4,0xc4,0x34,0x14,0x8,
++0x20,0x17,0x41,0x4f,0x41,0x5f,0x42,0x44,0x4f,0x40,0x4f,0x4a,0x4a,0x4a,0x5f,0x40,0x4,0xfe,0x4,0xe4,0x4,0xf4,0x4,0x44,0xe4,0x4,0xe4,0xa4,0xa4,0xa4,0xf4,0x8,
++0x20,0x17,0x41,0x5f,0x41,0x4f,0x48,0x4f,0x48,0x4f,0x48,0x4f,0x48,0x7f,0x44,0x48,0x4,0xfe,0x4,0xf4,0x4,0xe4,0x24,0xe4,0x24,0xe4,0x24,0xe4,0x24,0xfc,0x44,0x2c,
++0x20,0x17,0x40,0x51,0x4a,0x7f,0x44,0x55,0x55,0x5f,0x54,0x44,0x48,0x51,0x40,0x40,0x4,0xfe,0x4,0x44,0x44,0xfc,0x94,0x44,0x44,0x44,0x44,0xa4,0xa4,0x14,0x14,0x8,
++0x20,0x17,0x40,0x5c,0x44,0x7e,0x53,0x5e,0x52,0x5e,0x52,0x7e,0x43,0x42,0x42,0x40,0x4,0xfe,0x4,0x44,0x44,0xfc,0x14,0x94,0xa4,0xa4,0x44,0xa4,0x1c,0x4,0x14,0x8,
++0x10,0x10,0x10,0x90,0x50,0x50,0x10,0x10,0x10,0x30,0x50,0x90,0x10,0x10,0x10,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x8,0x8,0x8,0x8,0xf,0x0,0x0,0x7f,0x8,0x8,0x8,0x8,0x10,0x60,0x0,0x20,0x20,0x20,0x20,0x20,0xe0,0x20,0x20,0xe0,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x4,0x24,0x24,0x24,0x24,0x3c,0x7,0x4,0xfc,0x24,0x24,0x24,0x24,0x44,0x85,0x4,0x40,0x50,0x48,0x40,0x44,0x7e,0xc0,0x40,0x48,0x48,0x50,0x20,0x60,0x92,0xa,0x4,
++0x0,0x40,0x30,0x10,0x80,0x48,0x48,0x10,0x10,0x20,0xe0,0x20,0x20,0x20,0x20,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x41,0x31,0x11,0x82,0x4c,0x4b,0x10,0x10,0x20,0xe0,0x21,0x22,0x22,0x21,0x20,0x0,0x0,0x4,0xfe,0x0,0x0,0xf0,0x10,0x20,0x40,0x80,0x0,0x2,0x2,0xfe,0x0,
++0x0,0x40,0x33,0x12,0x82,0x4a,0x4a,0x13,0x12,0x22,0xe2,0x22,0x22,0x22,0x21,0x20,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x0,0x40,0x37,0x10,0x82,0x4a,0x49,0x11,0x10,0x20,0xe0,0x20,0x20,0x21,0x22,0x2c,0x0,0x0,0xfc,0x8,0x88,0x50,0x50,0x10,0xa0,0xa0,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x0,0x40,0x30,0x17,0x80,0x48,0x4b,0x10,0x10,0x20,0xef,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x48,0xfc,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x0,0x47,0x30,0x10,0x80,0x4f,0x49,0x11,0x11,0x21,0xe1,0x22,0x22,0x24,0x28,0x30,0x8,0xfc,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x40,0x30,0x10,0x87,0x48,0x48,0x11,0x11,0x22,0xe2,0x24,0x28,0x20,0x20,0x20,0x40,0x40,0x40,0x44,0xfe,0x40,0xe0,0x50,0x50,0x48,0x48,0x44,0x46,0x40,0x40,0x40,
++0x0,0x4f,0x30,0x10,0x82,0x4a,0x4a,0x12,0x12,0x23,0xe0,0x20,0x20,0x20,0x20,0x20,0x4,0xfe,0x40,0x40,0x44,0x7e,0x44,0x44,0x44,0xfc,0x4,0x4,0x4,0x4,0x28,0x10,
++0x0,0x40,0x20,0x2f,0x80,0x44,0x4c,0x14,0x14,0x27,0xe0,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x44,0xfe,0x40,0x44,0x44,0x44,0x44,0xfc,0x44,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x40,0x33,0x12,0x82,0x4a,0x4a,0x12,0x13,0x22,0xe2,0x22,0x22,0x22,0x23,0x22,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x30,0x17,0x84,0x44,0x4c,0x14,0x17,0x24,0xe4,0x24,0x24,0x27,0x24,0x20,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,0x0,
++0x1,0x40,0x30,0x10,0x8f,0x40,0x48,0x10,0x10,0x20,0xe0,0x20,0x20,0x20,0x20,0x20,0x0,0x80,0x80,0x4,0xfe,0x80,0x80,0xa0,0x90,0x8c,0x84,0x80,0x80,0x80,0x80,0x80,
++0x0,0x40,0x30,0x17,0x80,0x4a,0x4a,0x11,0x11,0x20,0xe0,0x20,0x21,0x22,0x24,0x28,0x80,0x40,0x44,0xfe,0x8,0x8,0x8,0x10,0x10,0xa0,0x40,0xa0,0x10,0x8,0xe,0x4,
++0x0,0x40,0x30,0x17,0x80,0x48,0x49,0x11,0x11,0x21,0xe1,0x21,0x22,0x22,0x24,0x28,0x80,0x40,0x44,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x0,0x40,0x34,0x13,0x81,0x4f,0x48,0x10,0x10,0x20,0xe1,0x21,0x22,0x22,0x24,0x28,0x40,0x40,0x40,0x40,0x44,0xfe,0x84,0x84,0x84,0xc4,0x34,0x14,0x4,0x44,0x28,0x10,
++0x0,0x4f,0x39,0x1a,0x8a,0x4c,0x4a,0x19,0x19,0x29,0xed,0x2a,0x28,0x28,0x29,0x2a,0x20,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x44,0x44,0x84,0x28,0x10,
++0x2,0x42,0x22,0x22,0x9f,0x42,0x4a,0x12,0x12,0x23,0xe2,0x22,0x22,0x22,0x23,0x22,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x0,0x40,0x30,0x10,0x87,0x48,0x48,0x11,0x11,0x22,0xe2,0x24,0x28,0x20,0x20,0x20,0x40,0x50,0x4c,0x44,0xfe,0x40,0xe0,0x50,0x50,0x48,0x48,0x44,0x46,0x40,0x40,0x40,
++0x1,0x41,0x31,0x11,0x8f,0x49,0x49,0x11,0x11,0x22,0xe2,0x22,0x24,0x25,0x28,0x30,0x0,0x20,0x10,0x4,0xfe,0x40,0x48,0x48,0x50,0x50,0x60,0x40,0xc2,0x42,0x3e,0x0,
++0x0,0x40,0x30,0x10,0x80,0x4b,0x4a,0x12,0x12,0x23,0xe2,0x22,0x22,0x24,0x24,0x28,0x40,0x44,0x7e,0x40,0x44,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,
++0x0,0x40,0x30,0x13,0x82,0x4a,0x4a,0x12,0x12,0x2f,0xe0,0x20,0x20,0x21,0x22,0x2c,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0x48,0x48,0xfe,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x0,0x40,0x30,0x1f,0x89,0x49,0x59,0x19,0x29,0x29,0xca,0x4c,0x48,0x4f,0x48,0x40,0x0,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0x24,0x24,0x1c,0x4,0x4,0xfc,0x4,0x0,
++0x1,0x41,0x31,0x12,0x84,0x42,0x4a,0x13,0x16,0x22,0xe2,0x22,0x22,0x22,0x21,0x20,0x0,0x8,0xfc,0x40,0x40,0x48,0x7c,0xc8,0x48,0x48,0x68,0x50,0x42,0x2,0xfe,0x0,
++0x0,0x40,0x30,0x11,0x81,0x4a,0x4c,0x10,0x17,0x20,0xe0,0x21,0x20,0x20,0x20,0x20,0x40,0x40,0xa0,0x10,0x10,0x88,0x46,0x40,0xf8,0x8,0x10,0x20,0xc0,0x40,0x30,0x10,
++0x0,0x41,0x36,0x14,0x84,0x44,0x4c,0x14,0x15,0x26,0xe0,0x21,0x21,0x22,0x24,0x28,0x80,0x4,0x3e,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xb4,0xa8,0x20,0x20,0x20,0x20,0x20,
++0x0,0x40,0x37,0x14,0x84,0x44,0x44,0x17,0x10,0x20,0xe1,0x22,0x24,0x28,0x21,0x20,0x8,0x7c,0x80,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x50,0x48,0x46,0x42,0x40,0x80,
++0x0,0x40,0x30,0x17,0x80,0x40,0x49,0x12,0x17,0x20,0xe0,0x21,0x22,0x24,0x27,0x20,0x80,0x40,0x44,0xfe,0x80,0x80,0x8,0x18,0xe0,0x40,0x80,0x0,0x10,0x8,0xfc,0x4,
++0x0,0x44,0x33,0x11,0x80,0x47,0x48,0x10,0x10,0x2f,0xe0,0x20,0x20,0x20,0x20,0x20,0x40,0x44,0x4c,0x50,0x40,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,
++0x0,0x40,0x30,0x17,0x84,0x48,0x42,0x12,0x12,0x22,0xe3,0x22,0x22,0x22,0x21,0x20,0x80,0x40,0x40,0xfc,0x4,0x4,0x10,0x30,0x40,0x80,0x0,0x0,0x4,0x4,0xfc,0x0,
++0x0,0x4f,0x30,0x10,0x80,0x47,0x4c,0x14,0x14,0x27,0xe0,0x20,0x20,0x21,0x25,0x22,0x0,0x90,0x90,0x90,0x90,0x90,0x10,0x20,0x20,0xa0,0xa0,0xa8,0xa4,0x42,0x7e,0x0,
++0x0,0x47,0x34,0x14,0x84,0x47,0x4c,0x14,0x14,0x27,0xe4,0x24,0x24,0x25,0x26,0x24,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x40,0x44,0xfe,0x40,0x20,0x20,0x12,0xa,0x4,
++0x0,0x40,0x37,0x10,0x80,0x48,0x49,0x12,0x14,0x27,0xe0,0x20,0x20,0x20,0x2f,0x20,0x0,0x10,0xf8,0x10,0x20,0xc0,0x18,0x6,0x2,0xfc,0x40,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x47,0x30,0x10,0x83,0x4a,0x4a,0x13,0x12,0x22,0xe2,0x23,0x22,0x20,0x2f,0x20,0x8,0xfc,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x0,0xfe,0x0,
++0x0,0x40,0x37,0x10,0x81,0x49,0x4b,0x15,0x11,0x21,0xe1,0x21,0x21,0x21,0x21,0x21,0x80,0x84,0xfe,0x80,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x0,0x40,0x37,0x12,0x82,0x43,0x42,0x14,0x16,0x29,0xe0,0x20,0x21,0x21,0x22,0x24,0x4,0x44,0xe4,0x4,0x14,0xd4,0x54,0x54,0x54,0x94,0x94,0x94,0x4,0x4,0x14,0x8,
++0x0,0x40,0x30,0x17,0x80,0x4a,0x49,0x10,0x1f,0x20,0xe0,0x20,0x21,0x21,0x22,0x2c,0x40,0x40,0x48,0xfc,0x40,0x48,0x50,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x8,0xe,0x4,
++0x0,0x40,0x30,0x10,0x80,0x4b,0x4a,0x12,0x12,0x22,0xe2,0x22,0x20,0x20,0x21,0x26,0x40,0x44,0x7e,0x40,0x48,0xfc,0x8,0x48,0x48,0x48,0x48,0x48,0xa0,0x90,0xc,0x4,
++0x0,0x47,0x34,0x14,0x84,0x4f,0x4c,0x14,0x14,0x24,0xe4,0x25,0x26,0x24,0x27,0x24,0x4,0xfe,0x44,0x44,0x54,0xfc,0x44,0x44,0xa4,0xa4,0xa4,0x14,0xc,0x4,0xfc,0x4,
++0x0,0x4f,0x28,0x18,0x89,0x49,0x49,0x19,0x19,0x29,0xe9,0x29,0x28,0x28,0x2f,0x28,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0x24,0xe4,0x24,0x4,0x4,0xfc,0x4,
++0x0,0x42,0x32,0x13,0x84,0x48,0x48,0x17,0x10,0x21,0xe1,0x22,0x24,0x28,0x20,0x20,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0xe0,0x50,0x50,0x48,0x4e,0x44,0x40,0x40,
++0x0,0x40,0x33,0x12,0x82,0x4a,0x4b,0x12,0x12,0x22,0xe3,0x22,0x22,0x22,0x23,0x22,0x40,0x88,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x30,0x11,0x87,0x45,0x4d,0x15,0x15,0x25,0xe5,0x25,0x25,0x25,0x3f,0x20,0x40,0x40,0x80,0x8,0xfc,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28,0xfe,0x0,
++0x0,0x40,0x30,0x11,0x82,0x4c,0x49,0x10,0x10,0x2f,0xe0,0x20,0x21,0x22,0x27,0x20,0x40,0x40,0xa0,0x10,0x8,0xe,0xf4,0x0,0x4,0xfe,0x40,0x80,0x10,0x8,0xfc,0x4,
++0x0,0x40,0x30,0x14,0x82,0x4a,0x48,0x11,0x12,0x24,0xe0,0x21,0x21,0x22,0x24,0x28,0xa0,0xa0,0xa0,0xa4,0xac,0xb0,0xa0,0xb0,0xac,0xa4,0xa0,0x20,0x22,0x22,0x1e,0x0,
++0x1,0x41,0x31,0x11,0x82,0x4c,0x4b,0x12,0x12,0x23,0xe2,0x22,0x23,0x22,0x20,0x20,0x0,0x0,0x4,0xfe,0x4,0x24,0xf4,0x24,0x24,0xe4,0x24,0x24,0xe4,0x4,0x28,0x10,
++0x1,0x41,0x31,0x13,0x84,0x40,0x49,0x16,0x10,0x23,0xe2,0x22,0x27,0x20,0x20,0x20,0x0,0x0,0xf8,0x10,0xa0,0x40,0xb0,0x4e,0x40,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,
++0x2,0x41,0x31,0x1f,0x80,0x44,0x42,0x12,0x11,0x21,0xe2,0x22,0x24,0x28,0x20,0x20,0x4,0x4,0x14,0xf4,0x54,0x54,0x94,0x94,0x14,0x14,0x94,0x94,0x44,0x44,0x14,0x8,
++0x0,0x48,0x24,0x24,0x80,0x51,0x5c,0x14,0x25,0x24,0xe4,0x25,0x26,0x24,0x20,0x20,0x40,0x40,0x48,0xfc,0xa0,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x47,0x30,0x10,0x83,0x48,0x48,0x13,0x10,0x2f,0xe2,0x21,0x21,0x20,0x20,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x14,0xfe,0x10,0x10,0x10,0x10,0x50,0x20,
++0x4,0x44,0x24,0x24,0x9f,0x44,0x44,0x14,0x14,0x28,0xe5,0x22,0x25,0x24,0x28,0x30,0x0,0x0,0x0,0x4,0xbe,0xa4,0xa4,0xa4,0xa4,0xa4,0x24,0x24,0x24,0xbc,0xa4,0x0,
++0x0,0x40,0x37,0x10,0x80,0x4b,0x4a,0x12,0x12,0x23,0xe0,0x21,0x22,0x2c,0x20,0x20,0x40,0x44,0xfe,0x40,0x48,0xfc,0x48,0x48,0x48,0xf8,0xe0,0x50,0x4e,0x44,0x40,0x40,
++0x0,0x47,0x30,0x10,0x87,0x49,0x49,0x11,0x1f,0x20,0xe3,0x22,0x22,0x22,0x23,0x22,0x8,0xfc,0x80,0x90,0xf8,0x10,0x10,0x14,0xfe,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x40,0x30,0x17,0x80,0x42,0x49,0x10,0x17,0x20,0xe1,0x22,0x24,0x28,0x20,0x20,0x40,0x40,0x48,0xfc,0x40,0x48,0x50,0x44,0xfe,0xd0,0x50,0x48,0x4e,0x44,0x40,0x40,
++0x0,0x47,0x34,0x14,0x87,0x4c,0x4d,0x14,0x17,0x24,0xe4,0x24,0x24,0x24,0x27,0x24,0x4,0xfe,0x44,0x54,0xfc,0x44,0xf4,0x44,0xf4,0x54,0x54,0x74,0x44,0x44,0xfc,0x4,
++0x0,0x43,0x32,0x12,0x82,0x4b,0x48,0x10,0x12,0x22,0xe2,0x22,0x23,0x22,0x24,0x28,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0xc0,0x30,0xe,
++0x0,0x41,0x31,0x11,0x81,0x48,0x4b,0x12,0x12,0x23,0xe2,0x22,0x23,0x22,0x22,0x22,0x8,0xfc,0x8,0x8,0xf8,0x0,0xfc,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x14,0x8,
++0x0,0x40,0x34,0x14,0x87,0x40,0x48,0x11,0x12,0x24,0xeb,0x20,0x20,0x20,0x20,0x20,0x40,0x40,0x44,0x44,0xfc,0x44,0xa0,0x10,0x4e,0x4,0xf8,0x8,0x10,0x20,0x40,0x80,
++0x0,0x40,0x33,0x12,0x82,0x43,0x42,0x12,0x12,0x22,0xef,0x20,0x21,0x22,0x24,0x28,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x10,0x10,0x10,0x14,0xfe,0x0,0x20,0x10,0xc,0x4,
++0x2,0x41,0x30,0x11,0x82,0x40,0x4f,0x11,0x12,0x27,0xea,0x22,0x22,0x22,0x20,0x0,0x8,0xb0,0x40,0xb0,0x48,0x80,0xfe,0x40,0x48,0xfc,0x48,0x48,0x48,0x58,0x40,0x40,
++0x1,0x41,0x31,0x12,0x84,0x47,0x4c,0x14,0x14,0x27,0xe4,0x20,0x21,0x21,0x22,0x2c,0x0,0x0,0xf8,0x10,0x24,0xfe,0x44,0x44,0x44,0xfc,0xa4,0xa0,0x20,0x22,0x22,0x1e,
++0x0,0x44,0x37,0x14,0x88,0x43,0x48,0x10,0x17,0x21,0xe1,0x21,0x21,0x22,0x24,0x28,0x80,0x40,0xfe,0x2,0x24,0xf0,0x0,0x8,0xfc,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x40,0x27,0x10,0x80,0x4f,0x48,0x10,0x13,0x22,0xe6,0x2b,0x32,0x22,0x23,0x22,0x80,0x88,0xf8,0x90,0xa4,0xfe,0x40,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x2,0x42,0x37,0x12,0x82,0x4b,0x4a,0x12,0x13,0x22,0xe2,0x3f,0x20,0x22,0x24,0x28,0x10,0x10,0xfc,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x14,0xfe,0x0,0x10,0xc,0x4,
++0x2,0x42,0x32,0x12,0x8f,0x42,0x56,0x17,0x2a,0x2a,0xf2,0x22,0x22,0x22,0x23,0x22,0x0,0xc,0x70,0x40,0xc0,0x44,0x7e,0x48,0xc8,0x48,0x48,0x48,0x88,0x88,0x8,0x8,
++0x2,0x42,0x32,0x12,0x8f,0x42,0x56,0x17,0x2a,0x2a,0xf2,0x22,0x22,0x22,0x22,0x22,0x0,0x10,0x50,0x50,0xd0,0x48,0x88,0x26,0xa0,0x20,0x40,0x48,0x44,0xfc,0x4,0x0,
++0x0,0x40,0x37,0x10,0x80,0x4f,0x41,0x10,0x12,0x21,0xe0,0x2f,0x20,0x20,0x21,0x26,0x40,0x48,0xfc,0x40,0x40,0xfe,0x22,0xa4,0x60,0x20,0xa4,0xfe,0x40,0x50,0x8c,0x4,
++0x0,0x4f,0x30,0x11,0x86,0x40,0x55,0x12,0x16,0x29,0xe2,0x24,0x28,0x20,0x21,0x20,0x4,0xfe,0x80,0x0,0x88,0xd0,0x60,0x60,0xd0,0x50,0x48,0x4e,0x44,0x40,0x40,0x80,
++0x0,0x47,0x34,0x14,0x87,0x54,0x54,0x17,0x10,0x2f,0xe1,0x21,0x21,0x22,0x24,0x28,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x0,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0x43,0x32,0x12,0x83,0x48,0x4f,0x14,0x14,0x27,0xe4,0x24,0x27,0x20,0x20,0x20,0x8,0xfc,0x8,0x8,0xf8,0x40,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x40,0x42,0x3e,
++0x0,0x40,0x30,0x11,0x82,0x4d,0x48,0x10,0x17,0x20,0xe2,0x21,0x21,0x20,0x2f,0x20,0x40,0x40,0xa0,0x10,0xe,0xf4,0x40,0x48,0xfc,0x40,0x44,0x48,0x50,0x40,0xfe,0x0,
++0x0,0x4f,0x29,0x29,0x89,0x4f,0x59,0x19,0x29,0x2f,0xe9,0x29,0x29,0x29,0x2b,0x10,0x4,0x7e,0x54,0x54,0x54,0x54,0x54,0x54,0x7c,0x44,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x40,0x37,0x14,0x88,0x43,0x48,0x10,0x17,0x20,0xe1,0x22,0x24,0x28,0x21,0x20,0x80,0x40,0xfe,0x2,0x14,0xf8,0x0,0x4,0xfe,0x40,0x50,0x48,0x44,0x44,0x40,0x80,
++0x0,0x40,0x37,0x14,0x88,0x47,0x44,0x14,0x17,0x24,0xe4,0x27,0x24,0x20,0x20,0x20,0x80,0x40,0xfe,0x42,0x40,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x44,0x40,0x40,0x40,
++0x0,0x40,0x37,0x14,0x88,0x43,0x4a,0x12,0x13,0x22,0xe3,0x22,0x22,0x22,0x23,0x22,0x80,0x40,0xfe,0x2,0x4,0xf8,0x8,0x8,0xf8,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x0,0x43,0x30,0x10,0x83,0x48,0x48,0x17,0x10,0x24,0xe2,0x21,0x22,0x2c,0x21,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xfe,0x40,0x44,0xe8,0x50,0x48,0x4e,0x44,0x80,
++0x0,0x47,0x34,0x14,0x87,0x45,0x4d,0x17,0x15,0x2d,0xed,0x35,0x25,0x25,0x21,0x21,0x44,0xe4,0x44,0x54,0xd4,0x14,0x54,0xf4,0x54,0x54,0x54,0x54,0x44,0xc4,0x14,0x8,
++0x0,0x42,0x32,0x17,0x82,0x4a,0x4a,0x12,0x13,0x20,0xe7,0x20,0x21,0x22,0x2c,0x20,0x90,0x90,0x94,0xfe,0x90,0x90,0xf0,0x0,0xfc,0x40,0xfc,0xe0,0x50,0x4e,0x44,0x40,
++0x0,0x47,0x30,0x10,0x87,0x44,0x4c,0x14,0x17,0x24,0xe0,0x27,0x20,0x20,0x2f,0x20,0x4,0xfe,0xa0,0xa4,0xfe,0xa4,0xa4,0xa4,0xfc,0x44,0x40,0xfc,0x40,0x44,0xfe,0x0,
++0x0,0x40,0x37,0x10,0x81,0x4f,0x49,0x19,0x19,0x29,0xe9,0x29,0x29,0x29,0x2f,0x28,0x0,0x4,0xfe,0x80,0x4,0xfe,0x24,0x24,0xe4,0x24,0x24,0xe4,0x24,0x24,0xfc,0x4,
++0x0,0x41,0x36,0x12,0x82,0x5f,0x42,0x16,0x17,0x2a,0xea,0x32,0x22,0x22,0x22,0x23,0x10,0x90,0x10,0x10,0x92,0xd4,0x38,0x10,0x10,0x90,0x28,0x28,0x48,0x48,0x84,0x2,
++0x0,0x41,0x36,0x14,0x87,0x44,0x4c,0x17,0x10,0x27,0xe2,0x21,0x20,0x20,0x23,0x2c,0x40,0x44,0x5e,0x44,0x5c,0x44,0x44,0xfc,0x40,0xfc,0x8,0x10,0xe0,0xa0,0x10,0xe,
++0x0,0x41,0x33,0x12,0x83,0x4a,0x4b,0x10,0x17,0x20,0xe0,0x27,0x20,0x20,0x2f,0x20,0x80,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x40,0x48,0xfc,0x40,0x44,0xfe,0x0,
++0x2,0x42,0x35,0x14,0x88,0x57,0x42,0x12,0x1f,0x22,0xe7,0x2a,0x32,0x22,0x2a,0x24,0x0,0x0,0x4,0xfe,0x44,0x44,0x44,0x28,0xa8,0x28,0x10,0x90,0x28,0x28,0x44,0x82,
++0x0,0x41,0x31,0x12,0x87,0x49,0x41,0x12,0x14,0x27,0xe5,0x25,0x25,0x25,0x3f,0x20,0x20,0x20,0x20,0x10,0xfe,0x14,0x10,0x50,0x20,0xf8,0x28,0x28,0x28,0x28,0xfe,0x0,
++0x4,0x42,0x31,0x1f,0x80,0x47,0x44,0x14,0x17,0x24,0xe4,0x27,0x24,0x24,0x25,0x24,0x8,0x10,0x24,0xfe,0x0,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x88,0x88,0xa8,0x90,
++0x0,0x40,0x37,0x14,0x89,0x40,0x4b,0x12,0x12,0x23,0xe2,0x22,0x23,0x20,0x2f,0x20,0x80,0x40,0xfe,0x2,0xf4,0x0,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xfe,0x0,
++0x0,0x47,0x34,0x14,0x87,0x4c,0x4d,0x14,0x14,0x25,0xe4,0x25,0x28,0x28,0x33,0x20,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x40,0x88,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x0,0x47,0x34,0x14,0x87,0x44,0x4d,0x15,0x15,0x25,0xe5,0x25,0x25,0x29,0x29,0x31,0x4,0xfe,0x44,0x44,0xfc,0x0,0xfc,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0xfc,
++0x2,0x42,0x22,0x2f,0x82,0x42,0x4f,0x12,0x12,0x22,0xef,0x22,0x22,0x22,0x22,0x22,0x20,0x20,0x3c,0x48,0x94,0x7e,0xd4,0x54,0x54,0x54,0xfc,0x40,0x42,0x42,0x3e,0x0,
++0x0,0x40,0x37,0x10,0x87,0x40,0x4f,0x11,0x12,0x25,0xe8,0x23,0x20,0x21,0x26,0x20,0x40,0x44,0xfe,0x40,0xfc,0x80,0xfe,0x10,0x8,0xfe,0x44,0xf8,0xe0,0x50,0x4c,0x40,
++0x0,0x40,0x37,0x10,0x80,0x4f,0x48,0x11,0x13,0x20,0xe7,0x24,0x24,0x24,0x2f,0x20,0x40,0x48,0xfc,0x40,0x44,0xfe,0x80,0x10,0xf8,0x0,0xfc,0xa4,0xa4,0xa4,0xfe,0x0,
++0x0,0x4f,0x32,0x13,0x82,0x4b,0x4a,0x1f,0x10,0x2f,0xe8,0x25,0x22,0x25,0x28,0x30,0x8,0xfc,0x10,0xf0,0x10,0xf0,0x14,0xfe,0x10,0xfc,0x84,0x28,0x10,0x28,0xc6,0x84,
++0x1,0x41,0x3f,0x11,0x80,0x4f,0x40,0x11,0x12,0x2d,0xe1,0x27,0x21,0x21,0x22,0x24,0x10,0x10,0xfe,0x10,0x48,0xfe,0xa0,0x10,0xe,0x14,0x10,0xfc,0x10,0x10,0x10,0x10,
++0x1,0x41,0x3f,0x11,0x8f,0x48,0x48,0x17,0x10,0x20,0xe3,0x20,0x20,0x20,0x2f,0x20,0x10,0x14,0xfe,0x10,0xfe,0x2,0x4,0xfc,0x40,0x50,0xf8,0x40,0x50,0x48,0xfe,0x0,
++0x0,0x40,0x37,0x10,0x87,0x44,0x4f,0x14,0x17,0x24,0xe0,0x2f,0x21,0x20,0x20,0x20,0x50,0x48,0xfe,0x40,0xfc,0x44,0xfc,0x44,0xfc,0x44,0x40,0xfe,0x8,0x88,0x28,0x10,
++0x0,0x47,0x30,0x10,0x87,0x44,0x44,0x17,0x10,0x20,0xef,0x20,0x21,0x22,0x2c,0x20,0x4,0xfe,0xa0,0xa4,0xfe,0xa4,0xa4,0xfc,0x40,0x44,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x0,0x47,0x34,0x15,0x84,0x47,0x4d,0x15,0x15,0x29,0xe0,0x2f,0x22,0x21,0x20,0x20,0x8,0xfc,0x0,0xf8,0x0,0xfc,0x44,0x28,0x90,0xe,0x10,0xfe,0x10,0x10,0x50,0x20,
++0x0,0x47,0x34,0x17,0x84,0x4f,0x48,0x17,0x10,0x24,0xe3,0x22,0x24,0x20,0x22,0x21,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x4,0xbe,0x84,0xa4,0x9c,0x94,0xa4,0x84,0x94,0x8,
++0x0,0x47,0x34,0x17,0x84,0x45,0x4e,0x14,0x17,0x24,0xe7,0x24,0x25,0x24,0x27,0x24,0x4,0xfe,0x4,0xfc,0x84,0x8c,0x54,0xe4,0x44,0xe4,0x5c,0x4c,0x44,0x84,0xfc,0x4,
++0x2,0x42,0x33,0x15,0x88,0x40,0x4f,0x10,0x17,0x20,0xe0,0x2f,0x20,0x20,0x20,0x20,0x20,0x24,0xbe,0x50,0x88,0x3c,0xc0,0x90,0xf8,0x80,0x84,0xfe,0x80,0x84,0x84,0x7c,
++0x0,0x41,0x37,0x14,0x87,0x44,0x47,0x14,0x17,0x20,0xe0,0x3f,0x21,0x21,0x22,0x2c,0x80,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0xa0,0x94,0xfe,0x40,0x20,0x10,0xe,
++0x1,0x42,0x35,0x10,0x80,0x49,0x4e,0x13,0x10,0x20,0xe7,0x22,0x21,0x20,0x2f,0x20,0x10,0xc,0x14,0xa0,0x40,0xb0,0xe,0xf8,0x40,0x40,0xfc,0x48,0x50,0x44,0xfe,0x0,
++0x0,0x40,0x37,0x14,0x85,0x44,0x57,0x14,0x25,0x24,0xe5,0x25,0x25,0x29,0x29,0x31,0x40,0x24,0xfe,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x40,0x37,0x11,0x80,0x4f,0x48,0x10,0x1f,0x21,0xe1,0x21,0x21,0x21,0x22,0x24,0x80,0x48,0xfc,0x10,0xa0,0xfe,0x82,0x44,0xfe,0x10,0xf8,0x10,0x10,0x10,0x50,0x20,
++0x0,0x4f,0x28,0x10,0x83,0x4a,0x4b,0x12,0x13,0x20,0xe0,0x2f,0x20,0x21,0x22,0x24,0x0,0xfe,0x2,0x4,0xf8,0x8,0xf8,0x8,0xf8,0x80,0x44,0xfe,0x0,0x10,0xc,0x4,
++0x1,0x41,0x37,0x11,0x81,0x4f,0x48,0x17,0x14,0x27,0xe4,0x27,0x24,0x21,0x22,0x24,0x10,0x10,0xfc,0x10,0x14,0xfe,0x40,0xfc,0x44,0xfc,0x44,0xfc,0x4,0x10,0xc,0x4,
++0x1,0x41,0x2f,0x11,0x87,0x44,0x49,0x13,0x10,0x21,0xe7,0x20,0x22,0x24,0x29,0x20,0x10,0x14,0xfe,0x10,0xfe,0x82,0x14,0xe0,0x80,0x8,0xfc,0x44,0x50,0x4c,0x44,0x80,
++0x1,0x4f,0x31,0x10,0x87,0x40,0x4f,0x10,0x17,0x20,0xe4,0x25,0x25,0x26,0x28,0x30,0x10,0xfe,0x10,0x40,0xfc,0x44,0xfe,0x44,0xfc,0x40,0x44,0x64,0x54,0x54,0x44,0x44,
++0x2,0x42,0x2f,0x12,0x87,0x4a,0x52,0x12,0x10,0x2f,0xe1,0x22,0x21,0x20,0x23,0x2c,0x10,0x10,0xfc,0x10,0x38,0xd4,0x12,0x90,0x84,0xfe,0x10,0x10,0x20,0xc0,0x30,0x8,
++0x1,0x41,0x3f,0x11,0x8f,0x49,0x4f,0x19,0x2f,0x20,0xe7,0x24,0x27,0x24,0x27,0x24,0x20,0x24,0xfe,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,
++0x0,0x40,0x30,0x17,0x84,0x45,0x44,0x14,0x14,0x25,0xe5,0x24,0x2b,0x28,0x30,0x20,0x48,0x7c,0x40,0xfe,0x44,0xf0,0x44,0x3c,0x8,0xf0,0x24,0xa8,0xfe,0x20,0xa0,0x40,
++0x0,0x47,0x34,0x17,0x84,0x47,0x44,0x11,0x17,0x20,0xe1,0x27,0x22,0x24,0x29,0x20,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x84,0x8,0xf0,0x80,0x8,0xfc,0x50,0x4c,0x44,0x80,
++0x0,0x40,0x37,0x14,0x84,0x47,0x40,0x17,0x14,0x24,0xe7,0x20,0x2a,0x2a,0x32,0x21,0x40,0x44,0xfe,0x44,0x44,0xfc,0x40,0xfc,0x44,0x44,0xfc,0x40,0x88,0x46,0xa,0xf8,
++0x2,0x42,0x35,0x14,0x88,0x57,0x40,0x1a,0x1a,0x2a,0xea,0x21,0x23,0x3c,0x28,0x21,0x10,0x10,0x10,0xa4,0x7e,0xa4,0x24,0xa4,0xa8,0xa8,0x90,0x10,0xa8,0x28,0x44,0x82,
++0x0,0x48,0x25,0x12,0x86,0x4a,0x4b,0x12,0x16,0x2b,0xf2,0x22,0x22,0x22,0x2a,0x24,0x20,0xa0,0x24,0xfc,0x28,0x30,0xfe,0x40,0xfc,0x44,0x44,0x7c,0x44,0x44,0x7c,0x44,
++0x1,0x49,0x25,0x12,0x86,0x4a,0x53,0x12,0x26,0x2a,0xf2,0x22,0x22,0x22,0x2a,0x24,0x20,0x28,0xfc,0x20,0x50,0x88,0xfe,0x4,0xf4,0x94,0x94,0x94,0xf4,0x4,0x14,0x8,
++0x0,0x40,0x37,0x14,0x84,0x4f,0x4c,0x14,0x17,0x25,0xe5,0x25,0x29,0x29,0x31,0x21,0x80,0x44,0xfe,0xa0,0xa4,0xfe,0xa4,0xa4,0xfc,0x20,0x24,0xe8,0x30,0x62,0xa2,0x1e,
++0x4,0x42,0x32,0x1f,0x84,0x44,0x4f,0x15,0x15,0x25,0xe5,0x29,0x29,0x2d,0x32,0x21,0x20,0x20,0x24,0xfe,0x80,0x0,0x7e,0x12,0x14,0x50,0x5c,0x50,0x50,0x70,0x98,0x6,
++0x0,0x47,0x30,0x11,0x8f,0x44,0x4c,0x17,0x14,0x24,0xe7,0x24,0x24,0x3f,0x20,0x20,0x10,0x90,0x90,0x24,0xfe,0xa4,0xa4,0xa4,0xa8,0xa8,0x90,0x90,0xa8,0xa8,0xc4,0x82,
++0x2,0x42,0x2f,0x22,0x8f,0x50,0x1f,0x28,0x28,0x4f,0xc0,0x48,0x45,0x5f,0x40,0x40,0x8,0x88,0xc8,0x8,0xbe,0x8,0x88,0xa8,0x98,0x88,0x8,0x88,0x8,0xc8,0x28,0x10,
++0x9,0x49,0x29,0x1f,0x89,0x49,0x5f,0x19,0x2f,0x29,0xe9,0x3f,0x24,0x29,0x30,0x21,0x0,0xc,0x70,0xc0,0x40,0x44,0x7e,0x48,0x48,0x48,0x48,0xc8,0x48,0x48,0x88,0x8,
++0x2,0x42,0x2f,0x12,0x87,0x4a,0x42,0x17,0x14,0x27,0xe4,0x24,0x27,0x24,0x24,0x24,0x10,0x10,0xfc,0x10,0x38,0xd6,0x10,0xf8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x28,0x10,
++0x0,0x41,0x2e,0x12,0x82,0x5f,0x42,0x16,0x17,0x2a,0xea,0x32,0x22,0x22,0x22,0x22,0x10,0x90,0x54,0x38,0x10,0xfc,0x44,0x44,0x7c,0xc4,0x44,0x7c,0x44,0x44,0x54,0x48,
++0x0,0x47,0x31,0x10,0x8f,0x40,0x47,0x14,0x17,0x24,0xe7,0x20,0x27,0x20,0x2f,0x20,0x40,0xfc,0x10,0xa4,0xfe,0x0,0xfc,0x44,0xfc,0x44,0xfc,0x40,0xfc,0x40,0xfe,0x0,
++0x7,0x44,0x37,0x14,0x85,0x44,0x4f,0x14,0x14,0x27,0xe4,0x25,0x2b,0x29,0x31,0x23,0xfc,0x4,0xfc,0x0,0xf8,0x10,0xfe,0x20,0x64,0xde,0x84,0x8,0xfe,0x8,0x8,0x18,
++0x4,0x44,0x3f,0x24,0x84,0x5f,0x15,0x55,0x5f,0x44,0xcc,0x4e,0x55,0x64,0x44,0x44,0x20,0x20,0x7c,0x88,0x10,0x7c,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x28,0x46,0x82,
++0x0,0x40,0x2f,0x29,0x89,0x49,0x5f,0x19,0x29,0x2f,0xe9,0x29,0x29,0x2f,0x29,0x20,0x20,0x30,0x48,0x7e,0xc8,0x48,0x7e,0x48,0x48,0x7e,0x48,0x48,0x48,0x7e,0x40,0x40,
++0x0,0x40,0x37,0x14,0x87,0x44,0x57,0x10,0x27,0x20,0xe3,0x22,0x23,0x21,0x20,0x2f,0xa0,0xa4,0xfe,0xa4,0xfc,0xa4,0xfc,0x0,0xfc,0x0,0xf8,0x8,0xf8,0x10,0xa0,0xfe,
++0x0,0x41,0x32,0x17,0x84,0x45,0x57,0x14,0x25,0x24,0xe5,0x24,0x29,0x29,0x31,0x21,0x80,0xf0,0x24,0xfe,0x88,0x24,0xfe,0x0,0xfc,0x0,0xfc,0x0,0xfc,0x4,0x4,0xfc,
++0x0,0x4f,0x20,0x27,0x85,0x45,0x45,0x17,0x10,0x23,0xe2,0x23,0x22,0x23,0x20,0x2f,0x40,0xfe,0x0,0xfc,0x14,0xf4,0x14,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,
++0x0,0x40,0x37,0x15,0x87,0x4c,0x4f,0x14,0x17,0x24,0xe7,0x24,0x29,0x2a,0x34,0x20,0x40,0x24,0xfe,0x8,0xfc,0x90,0xfc,0x94,0xfe,0x94,0xfc,0x90,0x98,0x94,0x92,0x90,
++0x0,0x47,0x20,0x2f,0x88,0x53,0x40,0x13,0x10,0x2f,0xe0,0x27,0x24,0x24,0x24,0x24,0x8,0xfc,0x40,0xfe,0x42,0x58,0x40,0x58,0x40,0xfe,0x80,0xfc,0xa4,0xa4,0xa4,0xc,
++0x2,0x43,0x22,0x24,0x8f,0x54,0x44,0x17,0x14,0x25,0xe4,0x27,0x24,0x24,0x24,0x27,0x50,0x54,0xd8,0x50,0xfe,0x88,0x50,0xfe,0x20,0xfc,0x20,0xfe,0x20,0x50,0x8e,0x4,
++0x0,0x43,0x32,0x12,0x83,0x48,0x4f,0x14,0x17,0x24,0xe7,0x20,0x2f,0x21,0x21,0x22,0x80,0xf8,0x88,0x48,0xf8,0x0,0xfc,0x44,0xfc,0x44,0xfc,0x0,0xfe,0x10,0x10,0x10,
++0x0,0x4f,0x30,0x13,0x82,0x4f,0x48,0x13,0x10,0x23,0xec,0x23,0x2c,0x23,0x2d,0x20,0x40,0xfe,0x0,0xf8,0x8,0xfe,0x2,0xfc,0x80,0x48,0x50,0x60,0xd0,0x4e,0x44,0x80,
++0x0,0x4f,0x34,0x12,0x82,0x44,0x41,0x11,0x13,0x26,0xeb,0x22,0x23,0x22,0x23,0x22,0x0,0xbc,0xa4,0x94,0x94,0xa4,0x0,0x24,0xfe,0x20,0xfc,0x20,0xfc,0x20,0xfe,0x0,
++0x4,0x44,0x3f,0x4,0x9f,0x51,0x11,0x3f,0x51,0x51,0xdf,0x44,0x7f,0x44,0x44,0x44,0x10,0x10,0xa8,0x28,0x44,0x82,0xfc,0x24,0xb4,0x6c,0x6c,0xb4,0x24,0x24,0xb4,0x48,
++0x2,0x43,0x32,0x17,0x84,0x4a,0x41,0x12,0x17,0x20,0xe7,0x20,0x27,0x20,0x2f,0x20,0x0,0xbc,0x24,0xa8,0x90,0xa8,0x46,0xa0,0xbc,0xa0,0xbc,0xa0,0xbc,0xa0,0xfe,0x0,
++0x0,0x5f,0x24,0x27,0x80,0x47,0x4c,0x17,0x10,0x2e,0xeb,0x2e,0x2b,0x2f,0x2a,0x37,0x80,0xfe,0x0,0xf8,0x0,0xf8,0x8,0xf8,0x80,0x9c,0xf4,0x9c,0x54,0x54,0x96,0x62,
++0x0,0x41,0x22,0x24,0x8b,0x50,0x4f,0x19,0x2f,0x20,0xef,0x29,0x29,0x2f,0x29,0x28,0x80,0x40,0x20,0x10,0xee,0x4,0xfc,0x24,0xfc,0x0,0xfc,0x24,0x24,0xfc,0x24,0xc,
++0x0,0x42,0x2f,0x21,0x82,0x4f,0x44,0x17,0x14,0x27,0xe1,0x27,0x21,0x2f,0x22,0x24,0x40,0x48,0xfe,0x50,0x48,0xfe,0x44,0xfc,0x44,0xfc,0x10,0xfc,0x10,0xfe,0x8,0x4,
++0x40,0x3f,0x31,0x9f,0x51,0x5f,0x4,0x3f,0x20,0x5f,0xd1,0x5f,0x44,0x55,0x64,0x4c,0x4,0x7e,0x10,0x24,0x7e,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x20,0x28,0x46,0x82,
++0x47,0x20,0x2f,0xa,0x95,0x4f,0x45,0x17,0x12,0x2f,0xea,0x2f,0x22,0x3f,0x22,0x22,0xfc,0x40,0xfe,0x4a,0x40,0xbc,0x24,0x24,0x3c,0xa4,0xa4,0xbc,0x24,0xe4,0x54,0x88,
++0x0,0x0,0x0,0x2,0x1,0x1,0x7f,0x40,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x2,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x2,0x1,0x7f,0x42,0x82,0x2,0x3f,0x2,0x2,0x2,0x4,0x4,0x8,0x10,0x20,0x40,0x0,0x0,0xfe,0x2,0x4,0x20,0xf0,0x20,0x20,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x2,0x1,0x7f,0x40,0x80,0xff,0x4,0x4,0x8,0xf,0x18,0x28,0x48,0x8,0xf,0x8,0x0,0x0,0xfe,0x2,0x4,0xfe,0x0,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0xf0,0x10,
++0x2,0x1,0x7f,0x40,0x82,0x1,0x9,0x8,0x28,0x28,0x29,0x4a,0xc,0x18,0x67,0x0,0x0,0x0,0xfe,0x2,0x4,0x10,0x10,0x20,0x48,0x84,0x4,0x4,0x10,0x10,0xf0,0x0,
++0x2,0x1,0x7f,0x42,0x82,0xff,0x4,0xf,0x18,0x2f,0xc8,0xf,0x8,0x8,0x8,0x8,0x0,0x0,0xfe,0x2,0x4,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x2,0x1,0x7f,0x40,0x9f,0x10,0x17,0x10,0x1f,0x15,0x25,0x24,0x24,0x45,0x86,0x4,0x0,0x0,0xfe,0x2,0xf4,0x0,0xe0,0x8,0xfc,0x0,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x2,0x1,0x7f,0x42,0xa9,0x28,0x47,0x0,0x3f,0x21,0x3f,0x21,0x3f,0x21,0x21,0x21,0x0,0x0,0xfe,0x2,0x14,0x28,0xe4,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x28,0x10,
++0x1,0x7f,0x44,0x9f,0x4,0x1f,0x4,0xff,0x8,0x1f,0xe4,0x4,0x7,0x0,0x3f,0x0,0x0,0xfe,0x42,0xf4,0x40,0xf0,0x44,0xfe,0x20,0xd0,0x4e,0x40,0xf8,0x8,0xe8,0x10,
++0x1,0x7f,0x44,0x9f,0x4,0x1f,0x4,0xff,0x8,0x17,0x21,0xcf,0x1,0x3f,0x1,0x3,0x0,0xfe,0x42,0xf4,0x40,0xf0,0x44,0xfe,0x20,0xd0,0xe,0xe4,0x0,0xf8,0x0,0x0,
++0x2,0x1,0x7f,0x40,0xa5,0x24,0x25,0x3c,0x4,0xff,0x24,0x25,0x25,0x25,0x45,0x5,0x0,0x0,0xfe,0x2,0xfc,0x40,0xf8,0x88,0x88,0xfe,0x0,0xfc,0x4,0x4,0xfc,0x4,
++0x1,0x7f,0x41,0xbf,0x1,0xa,0x4,0x1f,0x30,0xdf,0x10,0x1f,0x9,0x11,0x25,0x2,0x0,0xfe,0x2,0xf8,0x0,0xa0,0x40,0xf0,0x1e,0xf4,0x10,0xf0,0x20,0x18,0x8,0x0,
++0x1,0x7f,0x44,0x9f,0x4,0x1f,0x4,0xff,0x9,0x1f,0x22,0xc4,0xc,0x35,0x6,0x4,0x0,0xfe,0x42,0xf4,0x40,0xf0,0x44,0xfe,0x20,0xf0,0x1e,0xa4,0x40,0x20,0x1c,0x8,
++0x1,0x7f,0x40,0xbf,0x24,0x3f,0x0,0xff,0x0,0x1f,0x10,0x1f,0x4,0xc,0x75,0x6,0x0,0xfe,0x2,0xfc,0x48,0xf8,0x0,0xfe,0x0,0xf0,0x10,0xf0,0x88,0x50,0x20,0x1c,
++0x1,0x7f,0x44,0x9f,0x4,0x1f,0x4,0xff,0x8,0x1f,0x28,0xcf,0x9,0xd,0x13,0x20,0x0,0xfe,0x42,0xf4,0x40,0xf0,0x44,0xfe,0x20,0xf0,0x2e,0xe4,0x0,0xe0,0x0,0xf8,
++0x1,0x7f,0x44,0x9f,0x4,0x1f,0x4,0xff,0x9,0x1f,0x27,0xc0,0xf,0x8,0x8,0xf,0x0,0xfe,0x42,0xf4,0x40,0xf0,0x44,0xfe,0x20,0xf0,0x8,0xe6,0xe0,0x20,0x20,0xe0,
++0x0,0x40,0x30,0x10,0x0,0x0,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x28,0x47,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0xfc,0x0,
++0x0,0x40,0x37,0x10,0x2,0x2,0xf7,0x10,0x10,0x10,0x11,0x12,0x14,0x28,0x47,0x0,0x0,0x8,0xfc,0x10,0x10,0x14,0xfe,0x50,0x50,0x90,0x10,0x10,0x50,0x26,0xfc,0x0,
++0x1,0x41,0x31,0x12,0x4,0x0,0xf0,0x1f,0x10,0x10,0x10,0x10,0x10,0x28,0x47,0x0,0x0,0x8,0xfc,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x46,0xfc,0x0,
++0x0,0x40,0x27,0x24,0x4,0x5,0xe5,0x25,0x25,0x25,0x25,0x24,0x24,0x50,0x8f,0x0,0x0,0x8,0xfc,0x8,0x8,0xe8,0x28,0x28,0x28,0xe8,0x28,0x8,0x18,0x6,0xfc,0x0,
++0x1,0x41,0x31,0x11,0x2,0x4,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x28,0x47,0x0,0x0,0x0,0x8,0xfc,0x80,0x90,0xf8,0x80,0x90,0xf8,0x80,0x80,0x80,0x86,0xfc,0x0,
++0x2,0x42,0x33,0x14,0x8,0x2,0xf3,0x16,0x12,0x12,0x12,0x11,0x10,0x28,0x47,0x0,0x0,0x8,0xfc,0x40,0x48,0x7c,0xc8,0x48,0x68,0x50,0x4,0xfc,0x0,0x6,0xfc,0x0,
++0x1,0x41,0x21,0x21,0x2,0x4,0xf0,0x11,0x11,0x12,0x14,0x11,0x20,0x48,0x87,0x0,0x0,0x0,0x8,0xfc,0x8,0x10,0x40,0x50,0x48,0x44,0x44,0x40,0x80,0x6,0xfc,0x0,
++0x4,0x44,0x2f,0x24,0x4,0x4,0xe4,0x24,0x24,0x24,0x28,0x32,0x21,0x50,0x8f,0x0,0x0,0x4,0xbe,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xbc,0x20,0x6,0xfc,0x0,
++0x0,0x43,0x30,0x10,0x1,0x6,0xf0,0x13,0x10,0x10,0x10,0x17,0x10,0x28,0x47,0x0,0x0,0xf8,0x10,0x60,0x98,0x4,0x10,0xf8,0x40,0x40,0x48,0xfc,0x0,0x6,0xfc,0x0,
++0x0,0x40,0x31,0x12,0x4,0x7,0xf0,0x13,0x12,0x12,0x12,0x13,0x12,0x28,0x47,0x0,0x80,0x80,0x10,0x8,0x4,0xfc,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,0x6,0xfc,0x0,
++0x0,0x40,0x27,0x24,0x4,0x7,0xe4,0x24,0x25,0x29,0x29,0x31,0x21,0x50,0x8f,0x0,0x0,0x18,0xe0,0x0,0x8,0xfc,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x6,0xfc,0x0,
++0x1,0x41,0x31,0x12,0x4,0x1,0xf6,0x10,0x13,0x12,0x12,0x17,0x10,0x28,0x47,0x0,0x0,0xf8,0x10,0xa0,0x40,0xb0,0x4e,0x40,0xf8,0x40,0x48,0xfc,0x40,0x46,0xfc,0x0,
++0x0,0x40,0x2f,0x20,0xf,0x8,0xe8,0x2f,0x28,0x28,0x2f,0x28,0x28,0x50,0x8f,0x0,0xa0,0x90,0xfc,0x80,0xf8,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,0x98,0x6,0xfc,0x0,
++0x0,0x4f,0x30,0x17,0x4,0x4,0xf6,0x15,0x14,0x14,0x14,0x15,0x14,0x28,0x47,0x0,0x4,0xfe,0x0,0xbc,0xa4,0xa4,0xb4,0xac,0xa4,0xa4,0xa4,0xac,0xa4,0x2,0xfc,0x0,
++0x0,0x40,0x30,0x17,0x0,0x2,0xf1,0x10,0x11,0x16,0x10,0x11,0x10,0x28,0x47,0x0,0x40,0x50,0x48,0xfc,0x40,0x48,0x50,0x40,0x50,0x4c,0x44,0x40,0x80,0x6,0xfc,0x0,
++0x0,0x42,0x31,0x10,0x3,0x2,0xf2,0x13,0x12,0x12,0x13,0x12,0x12,0x28,0x47,0x0,0x40,0x48,0x50,0x40,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x18,0x6,0xfc,0x0,
++0x0,0x48,0x25,0x22,0x5,0x9,0xe3,0x25,0x29,0x31,0x21,0x25,0x22,0x50,0x8f,0x0,0x10,0x90,0x10,0x10,0x52,0x54,0x58,0x90,0x28,0x28,0x28,0x44,0x82,0x6,0xfc,0x0,
++0x0,0x41,0x32,0x17,0x1,0x2,0xf5,0x11,0x11,0x12,0x14,0x10,0x13,0x28,0x47,0x0,0x80,0x10,0x8,0xfc,0x10,0xc,0x4,0xf0,0x10,0xa0,0x40,0xa0,0x1c,0x6,0xfc,0x0,
++0x0,0x40,0x37,0x10,0x0,0xf,0xf1,0x16,0x10,0x17,0x10,0x10,0x17,0x28,0x47,0x0,0x40,0x48,0xfc,0x40,0x44,0xfe,0x10,0x4c,0x40,0xfc,0x40,0x44,0xfe,0x0,0xfe,0x0,
++0x0,0x43,0x30,0x17,0x0,0x1,0xf6,0x10,0x1f,0x11,0x13,0x10,0x11,0x2a,0x47,0x0,0x18,0xe0,0x48,0xfc,0xe0,0x50,0x4e,0x84,0xfe,0x10,0x10,0xe0,0x10,0x8,0xfe,0x0,
++0x0,0x40,0x2f,0x28,0x13,0x2,0xe2,0x23,0x22,0x23,0x22,0x22,0x23,0x52,0x8f,0x0,0x80,0x40,0xfe,0x2,0xf4,0x10,0x10,0xf0,0x0,0xf8,0x8,0x8,0xf8,0x6,0xfc,0x0,
++0x0,0x47,0x20,0x13,0x0,0xf,0xf0,0x12,0x11,0x11,0x12,0x14,0x11,0x28,0x47,0x0,0x8,0xfc,0x8,0xf8,0x8,0xfe,0x40,0x44,0x68,0x50,0x48,0x44,0x40,0x86,0xfc,0x0,
++0x0,0x42,0x32,0x12,0x3,0x0,0xf7,0x10,0x17,0x14,0x14,0x14,0x14,0x28,0x47,0x0,0x40,0x48,0x48,0x48,0xf8,0x0,0xfe,0x80,0xfc,0xa4,0xa4,0xa4,0xac,0x2,0xfc,0x0,
++0x0,0x40,0x33,0x12,0x3,0x2,0xf3,0x10,0x17,0x10,0x13,0x10,0x17,0x28,0x47,0x0,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x40,0xf8,0x40,0xfc,0x0,0xfe,0x0,
++0x1,0x40,0x37,0x10,0x7,0x4,0xf4,0x14,0x15,0x16,0x15,0x14,0x17,0x28,0x47,0x0,0x10,0xa4,0xfe,0xa0,0xfc,0xa4,0xa4,0xa4,0x1c,0x4,0xf4,0x4,0xfc,0x0,0xfe,0x0,
++0x0,0x47,0x34,0x14,0x7,0x4,0xf4,0x17,0x14,0x14,0x17,0x14,0x14,0x28,0x47,0x0,0x4,0xbe,0x84,0x84,0xbc,0x4,0x0,0x7c,0x44,0x44,0xa8,0x10,0x28,0x44,0xfe,0x0,
++0x2,0x42,0x2f,0x22,0xf,0x2,0xff,0x24,0x27,0x24,0x24,0x28,0x29,0x50,0x8f,0x0,0x10,0x10,0x94,0x3e,0xa4,0x44,0xe4,0x14,0x94,0x88,0x94,0x94,0xa2,0x42,0xfe,0x0,
++0x1,0x47,0x31,0x17,0x1,0xf,0xf0,0x13,0x12,0x13,0x12,0x1f,0x12,0x2a,0x47,0x0,0x10,0xfc,0x10,0xfc,0x10,0xfe,0x40,0xf8,0x48,0xf8,0x48,0xfe,0x8,0x18,0xfe,0x0,
++0x3,0x42,0x33,0x12,0x3,0x0,0xf7,0x10,0x14,0x12,0x12,0x14,0x11,0x28,0x47,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xbc,0x84,0xa4,0x94,0x94,0xa4,0x8c,0x86,0xfc,0x0,
++0x1,0x46,0x34,0x15,0x6,0x4,0xf3,0x12,0x12,0x13,0x12,0x12,0x13,0x28,0x47,0x0,0x4,0xfe,0x24,0x24,0x54,0x88,0xf8,0x48,0x48,0xf8,0x48,0x48,0xf8,0x6,0xfc,0x0,
++0x7,0x44,0x27,0x24,0x7,0x2,0xe7,0x2c,0x37,0x24,0x27,0x24,0x27,0x54,0x8f,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x40,0xfc,0x40,0xf8,0x40,0xf8,0x40,0xfc,0x0,0xfe,0x0,
++0x0,0x42,0x31,0x17,0x0,0x1,0xf6,0x12,0x13,0x14,0x1a,0x11,0x12,0x2c,0x47,0x0,0x40,0x48,0x50,0xfc,0xe0,0x50,0x4c,0x8,0xfe,0xa8,0xa8,0x3e,0x8,0x8,0xfe,0x0,
++0x0,0x40,0x20,0x27,0x4,0x7,0xe4,0x25,0x26,0x25,0x2a,0x28,0x33,0x50,0x8f,0x0,0x48,0x7c,0x40,0xfc,0x84,0xf0,0x84,0x78,0xa0,0x30,0x68,0xa4,0x24,0x60,0xfe,0x0,
++0x4,0x47,0x29,0x32,0xf,0xa,0xea,0x2f,0x2a,0x2a,0x2f,0x2a,0x2a,0x51,0x8f,0x0,0x4,0xfe,0x24,0x24,0xac,0xc4,0xa8,0xbe,0xc8,0x88,0xfe,0x88,0x88,0x88,0xfe,0x0,
++0x0,0x43,0x3c,0x2a,0x5,0x6,0xeb,0x25,0x39,0x23,0x25,0x39,0x25,0x52,0x8f,0x0,0x90,0x24,0xfe,0xc4,0x44,0x7c,0x44,0x44,0x7c,0x28,0x28,0x2a,0x4e,0x80,0xfe,0x0,
++0x0,0x40,0x2f,0x29,0x12,0x1,0xef,0x21,0x2e,0x21,0x2e,0x21,0x2e,0x50,0x8f,0x0,0x80,0x40,0xfe,0x12,0xc,0x10,0xfc,0x88,0x50,0xe0,0x50,0xce,0x40,0xc6,0xfc,0x0,
++0x2,0x44,0x22,0x2f,0x9,0x8,0xe9,0x2f,0x24,0x26,0x24,0x26,0x24,0x56,0x88,0x7,0x48,0x90,0x48,0xfc,0x24,0xc4,0x24,0xfc,0x90,0xd0,0x90,0xd4,0x94,0xdc,0x0,0xfe,
++0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x3f,0x0,0x0,0x0,0x0,0x7f,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,
++0x10,0x14,0xfe,0x10,0x7c,0x10,0xfe,0x10,0x7f,0x0,0x0,0x3f,0x0,0x0,0x7f,0x0,0x10,0x14,0xfe,0x10,0x7c,0x10,0xfe,0x10,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x4,0x7,0x8,0x1f,0x0,0xff,0x2,0x5,0x19,0x62,0x4,0x19,0x62,0xc,0x72,0x1,0x0,0xf0,0x10,0xe0,0x44,0xfe,0x8,0x10,0xa0,0xc0,0xa0,0x90,0x8e,0x84,0x80,0x0,
++0x4,0x7,0x8,0x1f,0x0,0xff,0x2,0x22,0x27,0x39,0x21,0x2f,0x29,0x32,0x24,0x8,0x0,0xf0,0x20,0xe0,0x44,0xfe,0x0,0x20,0xe4,0x28,0x30,0xe0,0x22,0xa2,0x5e,0x0,
++0x0,0x3f,0x20,0x20,0x3f,0x22,0x22,0x22,0x3f,0x22,0x22,0x22,0x44,0x44,0x88,0x10,0x8,0xfc,0x8,0x8,0xf8,0x8,0x0,0x20,0xf0,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x2,0x3f,0x22,0x22,0x22,0x22,0x3e,0x28,0x28,0x24,0x24,0x22,0x41,0x40,0x80,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0x7c,0x0,0x28,0x24,0x46,0x82,0x80,0x60,0x1e,0x4,
++0x0,0x3f,0x20,0x3f,0x22,0x24,0x29,0x32,0x24,0x2d,0x34,0x24,0x44,0x44,0x84,0x5,0x4,0xfe,0x4,0xfc,0x20,0x28,0xfc,0x20,0x20,0xf8,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x0,0x3f,0x20,0x3f,0x20,0x2f,0x2a,0x2a,0x2c,0x2a,0x2a,0x2e,0x4a,0x48,0x88,0x8,0x4,0xfe,0x4,0xfc,0x0,0xfe,0x8,0xe8,0xa8,0xa8,0xa8,0xa8,0xe8,0x8,0x28,0x10,
++0x3f,0x20,0x3f,0x20,0x27,0x20,0x2f,0x20,0x21,0x3f,0x22,0x24,0x5f,0x44,0x84,0xc,0xfc,0x4,0xfc,0x0,0xe0,0x48,0xfc,0x80,0x80,0x7c,0x8,0x10,0x7e,0x10,0x10,0x30,
++0x0,0x3f,0x20,0x3f,0x22,0x24,0x28,0x32,0x25,0x2c,0x34,0x24,0x44,0x45,0x86,0x4,0x4,0xfe,0x4,0xfc,0x20,0xbc,0xa0,0xa8,0xfc,0x20,0xa8,0xbc,0xa0,0x60,0x3e,0x0,
++0x0,0x3f,0x20,0x3f,0x22,0x24,0x28,0x33,0x24,0x2d,0x34,0x27,0x44,0x44,0x84,0x5,0x4,0xfe,0x4,0xfc,0x20,0xa8,0x20,0xfc,0xa8,0x24,0x40,0xfe,0x88,0x70,0x48,0x84,
++0x3f,0x20,0x3f,0x22,0x2f,0x20,0x27,0x20,0x3f,0x2a,0x3f,0x24,0x5f,0x44,0xbf,0x4,0xfc,0x4,0xfc,0x20,0xf8,0x80,0xf0,0x80,0xfc,0xa8,0x7c,0x10,0x7c,0x10,0xfe,0x10,
++0x0,0x7d,0x4,0x4,0x4,0x7c,0x43,0x40,0x41,0x7c,0x4,0x4,0x4,0x4,0x2b,0x10,0x8,0xfc,0x8,0x30,0x58,0x86,0x2,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x8,0x7e,0x12,0x22,0x1c,0x14,0x62,0x3f,0x0,0x1f,0x10,0x1f,0x0,0x0,0x0,0x0,0x0,0xfc,0x44,0x48,0x30,0x48,0x86,0xf0,0x10,0xf0,0x0,0xf8,0x8,0x8,0x50,0x20,
++0x0,0x7f,0x5,0x5,0x5,0x7d,0x41,0x41,0x41,0x7d,0x7,0x4,0x4,0x4,0x28,0x10,0x4,0xfe,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0xfe,0x8,0x8,0x8,0x8,0x8,
++0x14,0x14,0x7f,0x15,0x15,0x7f,0x54,0x54,0x54,0x7f,0x15,0x15,0x15,0x27,0x24,0x44,0x20,0x20,0x3c,0x48,0x90,0x7c,0x54,0x54,0x54,0x7c,0x44,0x40,0x42,0x42,0x3e,0x0,
++0x0,0xf0,0x1f,0x12,0x12,0x77,0x44,0x44,0x44,0x77,0x14,0x14,0x14,0x17,0xa4,0x40,0x4,0xbe,0xc4,0x4,0x4,0xbc,0xa0,0xa0,0xa4,0xbe,0x84,0x84,0x84,0x84,0xa8,0x10,
++0x79,0xd,0x79,0x47,0x79,0xd,0x31,0xff,0x0,0xf,0x8,0x3f,0x24,0x2f,0x21,0x21,0x3c,0x44,0x3c,0xe0,0x3c,0x44,0x18,0xfe,0x0,0xe0,0x20,0xf8,0x48,0xe8,0x8,0x18,
++0x1,0x11,0x11,0x11,0x11,0x1f,0x11,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x10,0x10,0x10,0x10,0xf0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x26,0x24,0x24,0x24,0x44,0x28,0x10,0x28,0x44,0x84,0x0,0x80,0x80,0x84,0xfe,0x4,0x4,0x4,0x84,0x44,0x44,0x4,0x4,0x4,0x44,0x28,0x10,
++0x10,0x10,0x11,0x10,0xfc,0x24,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x84,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x17,0x10,0x10,0xfc,0x24,0x24,0x27,0x24,0x44,0x28,0x10,0x28,0x44,0x81,0x2,0x4,0xfe,0x88,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0x88,0x88,0x8,0x8,
++0x10,0x11,0x10,0x10,0xfc,0x24,0x27,0x24,0x24,0x44,0x28,0x10,0x28,0x45,0x82,0x4,0x8,0xfc,0x40,0x40,0x40,0x44,0xfe,0x50,0x50,0x50,0x90,0x90,0x92,0x12,0xe,0x0,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x0,0x4,0xfe,0x0,0x4,0x84,0x48,0x28,0x10,0x10,0x28,0x44,0x84,0x0,0x4,0xfe,0x0,
++0x11,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x0,0x20,0x20,0x20,0x24,0x2c,0xf0,0x20,0x20,0x20,0x20,0x20,0x20,0x62,0xa2,0x1e,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x25,0x26,0x24,0x24,0x45,0x28,0x10,0x28,0x44,0x84,0x0,0x40,0x40,0xa0,0xa0,0x10,0xe,0x44,0x20,0x0,0xf8,0x8,0x10,0x10,0x20,0x40,0x80,
++0x10,0x10,0x10,0x11,0xfd,0x25,0x25,0x25,0x24,0x44,0x28,0x10,0x29,0x46,0x80,0x0,0x20,0x28,0x3c,0xe0,0x20,0x20,0x20,0xfe,0x22,0x62,0x6a,0xa4,0x20,0x20,0x20,0x20,
++0x10,0x12,0x11,0x11,0xfc,0x27,0x24,0x24,0x24,0x44,0x28,0x10,0x29,0x45,0x82,0x4,0x40,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xa4,0x94,0x4,0x4,0x28,0x10,
++0x10,0x13,0x10,0x10,0xfc,0x24,0x24,0x25,0x24,0x44,0x28,0x10,0x28,0x44,0x87,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0x88,0x88,0xfe,0x0,
++0x10,0x11,0x10,0x10,0xfc,0x24,0x27,0x24,0x24,0x44,0x28,0x10,0x28,0x44,0x84,0x0,0x0,0xf8,0x8,0x50,0x20,0x20,0xfe,0x22,0x24,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x10,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x44,0x84,0x0,0x0,0x8,0x48,0x28,0x28,0x28,0x8,0x8,0x8,0x8,0x48,0x90,0x10,0x28,0x46,0x82,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x28,0x44,0x87,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x1,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x27,0x25,0x45,0x29,0x11,0x29,0x45,0x82,0x4,0x4,0xde,0x54,0x54,0x54,0x54,0x54,0xfe,0x54,0x54,0x54,0x54,0x54,0x54,0xec,0x44,
++0x2,0x1,0x7f,0x0,0x8,0x4,0xff,0x1,0x2,0xff,0x4,0x8,0x6,0x1,0x6,0x38,0x0,0x8,0xfc,0x0,0x20,0x44,0xfe,0x0,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x18,
++0x10,0x10,0x17,0x10,0xfc,0x24,0x24,0x26,0x25,0x44,0x28,0x10,0x28,0x44,0x87,0x0,0x0,0x4,0xfe,0x90,0x90,0x90,0x92,0x94,0x98,0x90,0x90,0x90,0x90,0x94,0xfe,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x24,0x24,0x27,0x24,0x47,0x28,0x10,0x28,0x44,0x81,0x6,0x40,0x40,0x5c,0xe0,0x48,0x52,0x62,0x9e,0x0,0xf8,0x90,0x90,0x90,0x92,0x12,0xe,
++0x10,0x11,0x11,0x11,0xfd,0x26,0x24,0x27,0x24,0x44,0x28,0x10,0x29,0x46,0x84,0x0,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x70,0xa8,0xa8,0x24,0x22,0x20,0x20,
++0x2,0x1,0x7f,0x4,0x14,0x24,0x44,0x5,0x2,0xff,0x4,0x8,0x6,0x1,0x6,0x38,0x0,0x8,0xfc,0x40,0x50,0x4c,0x44,0x40,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x18,
++0x10,0x10,0x10,0x13,0xfc,0x24,0x25,0x26,0x24,0x44,0x28,0x10,0x28,0x44,0x81,0x6,0x40,0x20,0x4,0xfe,0x0,0x88,0x6,0x8a,0x88,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x11,0x10,0x10,0x13,0xfc,0x24,0x24,0x24,0x27,0x44,0x28,0x10,0x28,0x44,0x81,0x2,0x4,0x88,0x0,0xfe,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0x88,0x8,0x8,
++0x10,0x10,0x13,0x12,0xfc,0x24,0x25,0x24,0x24,0x47,0x28,0x10,0x28,0x44,0x84,0x0,0x40,0x20,0xfe,0x2,0x4,0x38,0xc0,0x40,0x44,0xfe,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x10,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x44,0x28,0x11,0x28,0x44,0x87,0x0,0x0,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x11,0x11,0xfd,0x25,0x25,0x24,0x27,0x44,0x28,0x10,0x28,0x44,0x84,0x0,0x20,0x24,0xfe,0x24,0xfc,0x24,0xfc,0x0,0xfe,0x80,0xfc,0x4,0x4,0x44,0x28,0x10,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x24,0x27,0x4a,0x2a,0x12,0x2a,0x46,0x82,0x2,0x4,0xfe,0x4,0x4,0x4,0xfc,0x24,0x20,0xfe,0x22,0x22,0x52,0x8a,0x2,0xa,0x4,
++0x11,0x10,0x10,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x1,0x4,0xbe,0x84,0x24,0x24,0x24,0xfc,0x24,0x74,0x6c,0xac,0x24,0x24,0x4,0x14,0x8,
++0x10,0x8,0x41,0x25,0x9,0x72,0x10,0x17,0x1,0xff,0x4,0x8,0x6,0x1,0x6,0x38,0x40,0x40,0x50,0x4c,0x44,0x50,0xe0,0x0,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x18,
++0x10,0x10,0x10,0x11,0xfc,0x24,0x25,0x25,0x25,0x45,0x28,0x10,0x28,0x45,0x82,0x0,0x88,0x48,0x10,0xfc,0x24,0x24,0xfc,0x20,0x20,0xfe,0x62,0x62,0xaa,0x24,0x20,0x20,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x82,0x4,0x4,0xfe,0x4,0x4,0xfc,0x0,0xc,0xf0,0x20,0xfc,0x20,0xfe,0x20,0x22,0x22,0x1e,
++0x20,0x27,0x24,0x25,0xf5,0x56,0x55,0x55,0x55,0x95,0x55,0x27,0x25,0x54,0x94,0x4,0x0,0x84,0xfe,0x4,0x4,0x74,0x54,0x54,0x54,0x54,0x54,0x74,0x4,0x4,0x14,0x8,
++0x10,0x10,0x13,0x10,0xfd,0x24,0x27,0x24,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x1,0x20,0x24,0xfe,0x20,0xfc,0x20,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x4,0x14,0x8,
++0x10,0x10,0x13,0x10,0xfc,0x25,0x24,0x24,0x27,0x44,0x28,0x11,0x2a,0x44,0x80,0x0,0x20,0x24,0xfe,0x20,0x20,0xfc,0x20,0x24,0xfe,0x40,0xa4,0xa8,0x90,0x88,0xc6,0x80,
++0x20,0x20,0x27,0x20,0xfb,0x48,0x4f,0x48,0x4b,0x90,0x52,0x22,0x23,0x52,0x84,0x8,0x40,0x48,0xfc,0x40,0xf8,0x48,0xfe,0x48,0xf8,0x40,0x48,0x7c,0x40,0xc0,0x60,0x1e,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x25,0x24,0x27,0x4a,0x2a,0x13,0x2a,0x46,0x83,0x2,0x8,0xfc,0x8,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x44,0x28,0x13,0x28,0x44,0x80,0x0,0x20,0x44,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x50,0x94,0xfe,0x10,0x10,0x10,0x10,
++0x11,0x10,0x10,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x28,0x13,0x28,0x44,0x84,0x0,0x4,0x88,0x50,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x20,0x20,0x20,0x20,
++0x10,0x10,0xfe,0x12,0x34,0xc,0x32,0xc1,0x3f,0x21,0x22,0x24,0x21,0x22,0x24,0x20,0x0,0x0,0xfc,0x8,0x50,0x20,0xd8,0x6,0xf8,0x8,0x88,0x48,0x8,0x88,0x48,0x18,
++0x20,0x23,0x22,0x22,0xfb,0x4a,0x4a,0x4b,0x48,0x97,0x54,0x24,0x24,0x54,0x8f,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xfc,0xa4,0xa4,0xa4,0xa4,0xfe,0x0,
++0x10,0x10,0x13,0x11,0xfc,0x25,0x24,0x27,0x24,0x44,0x28,0x11,0x2a,0x44,0x84,0x3,0x8,0x1c,0xe0,0x24,0xa8,0xfc,0x40,0xfe,0x80,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x13,0x10,0xfd,0x25,0x25,0x24,0x27,0x4a,0x29,0x10,0x28,0x44,0x84,0x0,0x40,0x24,0xfe,0x0,0xfc,0x4,0xfc,0x0,0xfe,0x2,0xfc,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x7f,0x12,0xc,0x7f,0x15,0x24,0x4c,0x2,0xff,0x4,0x8,0x4,0x3,0x4,0x38,0x40,0x44,0x7e,0x88,0x50,0x20,0x50,0x8e,0x4,0xfe,0x20,0x20,0x40,0x80,0x60,0x10,
++0x10,0x10,0x13,0x10,0xfd,0x24,0x27,0x24,0x25,0x45,0x29,0x11,0x2b,0x45,0x85,0x1,0x88,0x88,0xfe,0x88,0xfc,0x88,0xfe,0x20,0xfc,0x24,0xfc,0x24,0xfe,0x4,0x14,0x8,
++0x10,0x10,0x13,0x10,0xfc,0x25,0x25,0x25,0x25,0x45,0x28,0x13,0x28,0x44,0x84,0x3,0x88,0x88,0xfe,0x88,0x88,0xfc,0x4,0xfc,0x4,0xfc,0x20,0xfe,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x11,0x11,0xfd,0x25,0x25,0x25,0x25,0x45,0x29,0x11,0x29,0x45,0x81,0x0,0x20,0x44,0xfe,0x54,0x24,0x54,0x4,0xfc,0x10,0x12,0xd4,0x18,0x12,0x52,0x8e,0x0,
++0x20,0x23,0x21,0x20,0xfb,0x4a,0x4c,0x4b,0x48,0x88,0x51,0x22,0x24,0x50,0x88,0x3,0x1c,0xe0,0x24,0xa8,0xfe,0x42,0x44,0xfe,0x80,0x80,0xfc,0x88,0x50,0x20,0xd8,0x6,
++0x10,0x10,0x13,0x12,0xfc,0x24,0x24,0x24,0x24,0x44,0x28,0x13,0x28,0x44,0x85,0x2,0x40,0x20,0xfe,0x2,0x1c,0xe0,0x80,0xfc,0x88,0x88,0x88,0xfe,0x0,0x88,0x6,0x2,
++0x10,0x11,0x11,0x11,0xfc,0x27,0x24,0x24,0x25,0x45,0x29,0x11,0x28,0x44,0x85,0x0,0x20,0x24,0x24,0xfc,0x20,0xfe,0x0,0x24,0xfe,0x24,0x24,0xfc,0x20,0x24,0xfe,0x2,
++0x4,0x3f,0x4,0x7f,0xe,0x15,0x24,0x3f,0x21,0x21,0x3f,0x22,0x26,0x41,0x46,0x98,0x20,0x24,0x3e,0xe8,0x10,0x28,0x44,0xfe,0x0,0x4,0xfe,0x10,0x20,0xc0,0x30,0x8,
++0x20,0x23,0x20,0x21,0xf9,0x4f,0x49,0x49,0x49,0x89,0x51,0x20,0x22,0x52,0x88,0x0,0x8,0xfc,0x20,0x3c,0x20,0xfe,0x0,0x8,0xfc,0x0,0xfe,0x2,0xaa,0xaa,0x2,0xc,
++0x10,0x10,0x11,0x10,0xfd,0x24,0x27,0x24,0x25,0x45,0x29,0x11,0x29,0x45,0x85,0x1,0x20,0x28,0xfc,0x20,0x24,0xa8,0xfe,0x0,0xfc,0x4,0x74,0x54,0x74,0x4,0xfc,0x4,
++0x10,0x13,0x10,0x10,0xfd,0x25,0x25,0x25,0x24,0x45,0x28,0x13,0x28,0x45,0x82,0x0,0x4,0xfe,0x50,0x54,0xfe,0x54,0x54,0xfc,0x0,0xfc,0x0,0xfe,0xa8,0x24,0x22,0x20,
++0x10,0x11,0x10,0x13,0xfe,0x24,0x24,0x24,0x24,0x44,0x29,0x11,0x29,0x45,0x84,0x0,0x20,0x24,0xa8,0xfe,0x2,0xfc,0x88,0x88,0xf8,0x20,0xfc,0x24,0x24,0x2c,0x20,0x20,
++0x10,0x11,0x11,0x11,0xfd,0x25,0x24,0x24,0x25,0x44,0x28,0x11,0x28,0x45,0x86,0x0,0x4,0xfe,0x24,0xfc,0x24,0xfc,0x40,0x84,0xf8,0x20,0x48,0xfc,0xa8,0x26,0x22,0x60,
++0x10,0x11,0x10,0x10,0xff,0x24,0x25,0x25,0x25,0x45,0x29,0x10,0x2b,0x44,0x84,0x0,0x20,0xfc,0x88,0x50,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x20,0xfe,0x20,0x20,0x20,
++0x10,0x13,0x10,0x11,0xfc,0x25,0x25,0x25,0x24,0x47,0x28,0x11,0x29,0x45,0x85,0x1,0x20,0xfe,0x20,0xfc,0x0,0xfc,0x4,0xfc,0x88,0xfe,0x0,0xfc,0x4,0x4,0xfc,0x4,
++0x10,0x13,0x10,0x11,0xfd,0x25,0x25,0x25,0x24,0x45,0x29,0x11,0x29,0x45,0x84,0x3,0x20,0xfe,0x0,0xfc,0x54,0x74,0x54,0xfc,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x0,0xfe,
++0x0,0x3e,0x23,0x3e,0x20,0x3f,0x52,0x52,0x9e,0x1,0xff,0x4,0xc,0x3,0x4,0x18,0x40,0x20,0xfc,0x88,0x50,0xfc,0x20,0xf8,0x20,0x20,0xfe,0x20,0x40,0x80,0x60,0x10,
++0x2,0xfa,0xaa,0xaa,0xff,0xaa,0xaa,0xfa,0x22,0xfa,0x2a,0x2a,0x49,0x4a,0xac,0x10,0x0,0x3e,0x2a,0xaa,0xfe,0xaa,0xaa,0xbe,0x88,0xbe,0x8a,0x8a,0x12,0x92,0x6a,0x4,
++0x40,0x40,0x47,0x44,0xf4,0x57,0x54,0x55,0x56,0x94,0x54,0x25,0x24,0x54,0x89,0x10,0x40,0x24,0xfe,0x88,0x88,0xfe,0x88,0xdc,0xaa,0x40,0x90,0x20,0x48,0x84,0xfc,0x4,
++0x20,0x21,0x20,0x23,0xfa,0x4c,0x49,0x49,0x4f,0x89,0x53,0x23,0x25,0x55,0x89,0x1,0x8,0xfc,0x20,0xfe,0xaa,0x70,0xa8,0x20,0xfc,0x24,0x3c,0xa4,0x7c,0x24,0x3c,0x24,
++0x0,0x3f,0x4,0x4,0x4,0x8,0x8,0x11,0x21,0x49,0x89,0x11,0x11,0x21,0x5,0x2,0x0,0xf0,0x10,0x24,0x7e,0x4,0x4,0x14,0x8,0x0,0x20,0x10,0x10,0xc,0x4,0x0,
++0x1,0x9,0x9,0x11,0x23,0x0,0x1,0xff,0x2,0xc,0x31,0xc9,0x9,0x11,0x25,0x2,0x0,0x20,0x10,0x8,0x8,0x0,0x4,0xfe,0x80,0x60,0x1e,0x24,0x20,0x18,0x8,0x0,
++0x0,0x0,0x3f,0x0,0x11,0x9,0x3f,0x0,0x0,0x1,0xff,0x1,0x1,0x1,0x5,0x2,0x10,0x78,0x80,0x10,0x10,0x20,0xf0,0x40,0x80,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0xfe,0x12,0x34,0xc,0x32,0xc1,0x1f,0x0,0x1,0xff,0x1,0x1,0x5,0x2,0x0,0x8,0xfc,0x8,0x50,0x20,0xd8,0x6,0xe0,0x40,0x84,0xfe,0x0,0x0,0x0,0x0,
++0x4,0xff,0x8,0x12,0x3c,0x8,0x14,0x3e,0x0,0x1f,0x0,0x1,0xff,0x1,0x5,0x2,0x40,0xfe,0x20,0x48,0xf0,0x20,0x50,0xf8,0x0,0xe0,0x40,0x84,0xfe,0x0,0x0,0x0,
++0x0,0x3f,0x0,0x0,0x1,0x1,0x1,0x1,0x7,0x19,0x61,0x1,0x1,0x1,0x5,0x2,0x0,0xf0,0x20,0x40,0x80,0xc,0x30,0xc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x3f,0x0,0x0,0x11,0x9,0x5,0x3,0x1,0x1,0x1,0x1,0x1,0x1,0x5,0x2,0x0,0xf0,0x20,0x40,0x80,0x0,0x0,0x0,0x0,0x80,0x40,0x30,0xc,0x0,0x0,0x0,
++0x0,0x0,0xfc,0x5,0xa,0x10,0x13,0x1e,0x32,0xd3,0x12,0x12,0x12,0x12,0x51,0x20,0x80,0x80,0x88,0xfc,0x8,0x8,0xe8,0x28,0x28,0xe8,0x8,0x28,0x12,0x2,0xfe,0x0,
++0x8,0xfd,0x9,0x49,0x49,0x49,0x49,0x49,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x17,0x8,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xfe,0x0,
++0x8,0xfc,0x9,0x49,0x49,0x49,0x49,0x49,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x15,0x8,0x0,0x4,0xfe,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x9c,0x4,0x4,0xfc,0x4,0x0,
++0x8,0xfc,0x8,0x49,0x49,0x4b,0x4d,0x49,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x15,0x9,0x88,0x88,0x88,0x8,0x8,0xfe,0x8,0x48,0x28,0x28,0x8,0x8,0x8,0x8,0x28,0x10,
++0x8,0xfc,0x8,0x49,0x4a,0x48,0x4b,0x48,0x7c,0x4,0x5,0x1c,0xe4,0x4,0x17,0x8,0x80,0x80,0xf8,0x8,0x10,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x8,0xfd,0x8,0x48,0x48,0x48,0x48,0x4b,0x7c,0x5,0x4,0x1c,0xe7,0x4,0x14,0x8,0x0,0xfc,0x88,0x50,0x20,0x50,0x8e,0x24,0x20,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,
++0x10,0x10,0xfe,0x12,0x34,0xc,0x32,0xc1,0x1f,0x0,0x8,0xf,0x0,0x7f,0x0,0x0,0x0,0x0,0xfc,0x8,0x50,0x20,0xd8,0x6,0xe0,0x20,0x24,0xfe,0x4,0xf4,0x14,0x8,
++0x8,0xfc,0x8,0x48,0x49,0x4b,0x48,0x48,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x15,0x9,0x20,0x20,0x40,0x88,0x4,0xfe,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0xfc,0x8,0x4b,0x48,0x48,0x48,0x4b,0x7c,0x7,0x4,0x1c,0xe4,0x5,0x15,0xa,0x80,0x80,0xbc,0xc0,0x50,0x24,0xd4,0xc,0x0,0xfc,0x90,0x90,0x90,0x12,0x12,0xe,
++0x8,0xfc,0x9,0x49,0x4b,0x4d,0x49,0x49,0x7d,0x4,0x7,0x1c,0xe4,0x4,0x14,0x8,0xa0,0xa0,0x24,0x28,0x30,0x60,0xa2,0x1e,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x9,0xfc,0x8,0x4b,0x48,0x48,0x48,0x48,0x7f,0x4,0x4,0x1c,0xe4,0x4,0x15,0xa,0x4,0x88,0x50,0xfe,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0x88,0x8,0x8,
++0x0,0xfb,0x8,0x48,0x49,0x49,0x49,0x49,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x15,0x8,0x4,0xfe,0x0,0x0,0xdc,0x54,0x54,0x54,0xdc,0x54,0x54,0x54,0x54,0x54,0x54,0x0,
++0x8,0xfc,0xb,0x48,0x48,0x48,0x48,0x48,0x7c,0x4,0x4,0x1f,0xe4,0x4,0x15,0xa,0x88,0x88,0xfe,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,0x88,0xfe,0x0,0x88,0x6,0x2,
++0x8,0xfd,0x9,0x49,0x49,0x49,0x49,0x49,0x7c,0x7,0x4,0x1c,0xe5,0x6,0x14,0x8,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x70,0xa8,0x2e,0x24,0x20,0x20,
++0x8,0xfc,0x9,0x49,0x4b,0x4d,0x49,0x49,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x15,0x9,0xa0,0x90,0x4,0xfe,0x10,0x10,0xfc,0x10,0x10,0xfc,0x10,0x10,0x14,0xfe,0x0,0x0,
++0x8,0xfc,0x9,0x4b,0x48,0x4f,0x48,0x49,0x7e,0x5,0x4,0x1c,0xe5,0x4,0x14,0xb,0x40,0x80,0x8,0xfc,0x44,0xfe,0x90,0x28,0x46,0x90,0x20,0x44,0x88,0x30,0xc0,0x0,
++0x0,0x79,0x49,0x57,0x48,0x69,0x56,0x41,0x5f,0x0,0x8,0xf,0x0,0x7f,0x0,0x0,0x40,0x7c,0x40,0xfe,0x48,0x50,0x60,0x80,0xe0,0x20,0x24,0xfe,0x4,0xf4,0x14,0x8,
++0x0,0xfe,0x14,0x8,0xfe,0x1a,0x28,0x49,0x1f,0x0,0x8,0xf,0x0,0x7f,0x0,0x0,0x80,0x88,0xfc,0x88,0x50,0x20,0xd0,0xe,0xe0,0x20,0x24,0xfe,0x4,0xf4,0x14,0x8,
++0x8,0x7e,0x8,0x7e,0x8,0xff,0x10,0x3e,0x42,0x9f,0x0,0x8,0xf,0x0,0x7f,0x0,0x40,0x44,0xfe,0x88,0x50,0x20,0x58,0x86,0x0,0xf0,0x10,0x14,0xfe,0x4,0xf4,0x8,
++0x8,0xff,0xa,0x4a,0x4a,0x4b,0x4a,0x48,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x15,0x9,0x40,0xbe,0x12,0x12,0x92,0x2a,0x44,0x0,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,
++0x8,0xfc,0x9,0x49,0x49,0x49,0x49,0x49,0x7d,0x5,0x5,0x1d,0xe5,0x5,0x16,0x8,0x20,0x10,0xfe,0x2,0xfe,0x0,0xee,0x22,0x22,0xaa,0x66,0x66,0xaa,0x22,0xaa,0x44,
++0x8,0xfd,0x8,0x48,0x49,0x49,0x49,0x49,0x7c,0x5,0x4,0x1f,0xe4,0x5,0x16,0x8,0x4,0xfe,0x50,0x54,0xfe,0x54,0x54,0xfc,0x0,0xfc,0x0,0xfe,0xa8,0x26,0x22,0x60,
++0x8,0xfc,0x9,0x49,0x49,0x49,0x49,0x49,0x7d,0x5,0x4,0x1c,0xe5,0x6,0x14,0x8,0x20,0x44,0xfe,0x44,0x74,0x54,0xb4,0x24,0x44,0xfc,0x0,0xa0,0xa4,0x8a,0x88,0x78,
++0x13,0xfa,0x13,0x52,0x52,0x52,0x53,0x52,0x7a,0xb,0xa,0x3a,0xcb,0xa,0x2c,0x11,0xfc,0x4,0xfc,0x0,0xf8,0x10,0xfe,0x20,0x60,0xdc,0x44,0x88,0xfe,0x88,0x88,0x98,
++0x8,0xfd,0x8,0x4b,0x48,0x49,0x49,0x49,0x7d,0x5,0x4,0x1d,0xe4,0x7,0x14,0x9,0x50,0xdc,0x50,0xde,0x0,0xfc,0x24,0xfc,0x24,0xfc,0x88,0xfc,0x88,0xfe,0x88,0x4,
++0x10,0xff,0x10,0x57,0x54,0x57,0x51,0x53,0x79,0xb,0x9,0x3f,0xc9,0xb,0x2d,0x11,0x40,0xfe,0x0,0xbc,0xa4,0xbc,0x10,0xf8,0x10,0xf8,0x10,0xfe,0x48,0x30,0x8e,0x4,
++0x8,0x8,0x10,0x12,0x24,0x7c,0x8,0x10,0x20,0x7e,0x20,0x0,0xe,0x70,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x8,0x10,0x11,0x22,0x7e,0x8,0x13,0x20,0x7e,0x20,0x0,0xe,0x70,0x20,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x8,0x8,0x10,0x12,0x24,0x7d,0x8,0x10,0x20,0x7e,0x20,0x0,0xe,0x70,0x20,0x0,0x8,0x8,0x8,0x8,0x8,0xfe,0x8,0x8,0x88,0x48,0x48,0x8,0x8,0x8,0x28,0x10,
++0x8,0x8,0x10,0x12,0x25,0x7c,0x9,0x10,0x20,0x7e,0x20,0x0,0xf,0x71,0x20,0x0,0x80,0x80,0x84,0xfe,0x0,0x0,0xf8,0x8,0x10,0x20,0x40,0x80,0x2,0x2,0xfe,0x0,
++0x8,0x8,0x10,0x12,0x25,0x7c,0x8,0x11,0x20,0x7e,0x20,0x0,0xe,0x71,0x21,0x2,0x40,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0xc8,0x48,0xa8,0x88,0x8a,0xa,0xa,0x4,
++0x8,0x8,0x10,0x13,0x25,0x7d,0x9,0x11,0x21,0x7d,0x21,0x1,0xe,0x72,0x24,0x8,0x40,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x8,0x8,0x11,0x12,0x24,0x7c,0xb,0x10,0x20,0x7e,0x20,0x0,0xe,0x71,0x21,0x0,0x0,0x8,0xfc,0x0,0x0,0x4,0xfe,0x40,0x40,0x40,0x80,0x80,0x88,0x4,0xfc,0x4,
++0x9,0x9,0x11,0x13,0x25,0x7d,0x9,0x11,0x21,0x7f,0x21,0x1,0xf,0x71,0x21,0x0,0x20,0x20,0x20,0x20,0x24,0x2c,0xf0,0x20,0x20,0x20,0x20,0x20,0x62,0xa2,0x1e,0x0,
++0x8,0x9,0x10,0x10,0x24,0x7c,0x9,0x10,0x20,0x7e,0x20,0x0,0xe,0x70,0x20,0x0,0x8,0xfc,0x8,0x50,0x20,0x10,0xfe,0x22,0x24,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x8,0x8,0x10,0x12,0x27,0x7c,0x8,0x10,0x20,0x7e,0x20,0x0,0xe,0x70,0x20,0x0,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0xf8,0x88,
++0x10,0x11,0x21,0x25,0x49,0xff,0x11,0x21,0x41,0xfd,0x41,0x1,0x1d,0xe1,0x41,0x0,0x48,0x48,0x48,0x48,0x48,0xfe,0x48,0x48,0x48,0x48,0x48,0x78,0x0,0x0,0xfc,0x0,
++0x10,0x10,0x20,0x24,0x4f,0xf8,0x10,0x21,0x41,0xfd,0x42,0x2,0x1c,0xe4,0x48,0x13,0xa0,0x90,0x90,0x84,0xfe,0x80,0x80,0xf8,0x8,0x8,0x90,0x60,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x20,0x25,0x4a,0xf8,0x13,0x20,0x40,0xfc,0x41,0x0,0x1c,0xe0,0x43,0x0,0x80,0x80,0xf8,0x8,0x10,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x20,0x27,0x48,0xf8,0x13,0x22,0x46,0xfb,0x40,0x0,0x1c,0xe1,0x41,0x2,0x90,0x90,0x94,0xfe,0x94,0x94,0xfc,0x90,0x90,0xfe,0x92,0x92,0x9a,0x14,0x10,0x10,
++0x8,0x8,0x11,0x11,0x25,0x7d,0x9,0x10,0x21,0x7d,0x21,0x1,0xd,0x71,0x20,0x0,0x20,0x20,0x24,0x24,0x24,0x24,0xfc,0x20,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,
++0x10,0x10,0x20,0x20,0x48,0xf9,0x13,0x20,0x40,0xfd,0x41,0x1,0x1d,0xe1,0x41,0x1,0x20,0x20,0x40,0x40,0x88,0x4,0xfe,0x2,0x0,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x27,0x24,0x48,0xf9,0x13,0x24,0x43,0xfd,0x41,0x0,0x1c,0xe0,0x40,0x0,0x40,0x44,0xfe,0xa0,0xa0,0x10,0xf8,0x6,0xfc,0x0,0xf8,0x8,0x8,0x88,0x50,0x20,
++0x10,0x10,0x21,0x25,0x7f,0xf8,0x11,0x23,0x45,0xf9,0x41,0x1,0x1d,0xe1,0x41,0x1,0x80,0x88,0x7c,0x0,0xff,0x84,0xfe,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x28,0x10,
++0x11,0x11,0x23,0x24,0x40,0xf8,0x11,0x26,0x43,0xfa,0x42,0x7,0x18,0xe0,0x40,0x0,0x0,0xf8,0x10,0xa0,0x40,0xa0,0x58,0x46,0xf8,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,
++0x10,0x17,0x20,0x23,0x4a,0xfa,0x13,0x22,0x42,0xfb,0x42,0x1,0x18,0xe1,0x42,0x4,0x4,0xfe,0x40,0xf8,0x48,0x48,0xf8,0x48,0x48,0xf8,0x40,0x40,0x80,0x60,0x1e,0x4,
++0x8,0x9,0x10,0x10,0x24,0x7d,0x9,0x11,0x21,0x7f,0x21,0x1,0xf,0x71,0x21,0x1,0x20,0x24,0xa8,0xb0,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x14,0x8,
++0x12,0x11,0x20,0x27,0x48,0xf8,0x13,0x22,0x42,0xfb,0x40,0x4,0x19,0xe2,0x44,0x8,0x8,0x10,0xa0,0xf8,0x48,0x48,0xf8,0x40,0x44,0xfe,0xc4,0xc4,0x54,0x48,0x40,0x40,
++0x10,0x10,0x21,0x24,0x48,0xfb,0x10,0x21,0x42,0xfc,0x40,0x1,0x1c,0xe0,0x41,0x6,0x20,0x28,0xfc,0x20,0x24,0xfe,0x88,0x46,0x7a,0x88,0x90,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x27,0x20,0x48,0xf9,0x17,0x20,0x43,0xfa,0x42,0x2,0x1b,0xe2,0x40,0x0,0x40,0x48,0xfc,0x40,0xb0,0x14,0xfe,0x8,0xc8,0x48,0x48,0x48,0xc8,0x8,0x28,0x10,
++0x10,0x10,0x20,0x23,0x48,0xf8,0x10,0x23,0x40,0xfc,0x40,0x3,0x1c,0xe0,0x40,0x0,0x50,0x50,0x54,0xde,0x50,0x50,0x54,0xde,0x50,0x50,0x54,0xde,0x50,0x50,0x50,0x50,
++0x10,0x12,0x21,0x21,0x48,0xff,0x14,0x24,0x45,0xfd,0x45,0x5,0x1d,0xe4,0x44,0x4,0x40,0x48,0x48,0x50,0x44,0xfe,0x4,0x4,0xf4,0x14,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x8,0x9,0x11,0x13,0x25,0x7d,0x9,0x11,0x20,0x7d,0x21,0x1,0xd,0x71,0x21,0x1,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x10,0x12,0x16,0xd8,0x10,0x52,0x92,0xe,
++0x10,0x13,0x20,0x2f,0x49,0xf9,0x11,0x27,0x41,0xf9,0x41,0x7,0x18,0xe0,0x47,0x0,0x18,0xe0,0x44,0xfe,0x50,0x50,0x50,0xfc,0x50,0x50,0x54,0xfe,0x40,0x48,0xfc,0x0,
++0x10,0x17,0x20,0x22,0x41,0xf7,0x14,0x28,0x41,0xfc,0x41,0x0,0x1c,0xe0,0x41,0x6,0x1c,0xe0,0x0,0x48,0x50,0xfe,0x2,0x4,0xf0,0x10,0x10,0xa0,0x40,0xa0,0x1e,0x4,
++0x11,0x11,0x21,0x25,0x4a,0xfb,0x14,0x21,0x42,0xfc,0x41,0x1,0x1d,0xe1,0x41,0x1,0x10,0x10,0xd0,0x58,0x56,0x52,0x90,0x50,0x3e,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x12,0x21,0x20,0x47,0xf8,0x1f,0x20,0x41,0xfb,0x45,0x1,0x1d,0xe1,0x41,0x0,0x40,0x48,0x50,0x40,0xfc,0x40,0xfe,0xa0,0x10,0xfe,0x14,0x10,0x50,0x24,0x4,0xfc,
++0x10,0x10,0x24,0x27,0x4c,0xf3,0x12,0x22,0x43,0xfe,0x43,0x2,0x1e,0xe2,0x43,0x2,0x80,0x40,0x40,0xfe,0x2,0xf8,0x8,0x8,0xf8,0x0,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x11,0x11,0x22,0x24,0x4a,0xf9,0x11,0x20,0x47,0xfc,0x44,0x7,0x1c,0xe4,0x47,0x4,0x24,0x24,0x48,0x90,0x48,0x24,0x24,0x4,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x11,0x11,0x2f,0x21,0x49,0xf8,0x13,0x22,0x42,0xfb,0x40,0x7,0x18,0xe0,0x40,0x0,0x10,0x14,0xfe,0x10,0xf0,0x40,0xf8,0x48,0x48,0xf8,0x40,0xfe,0x40,0x40,0x40,0x40,
++0x11,0x11,0x21,0x21,0x4f,0xf9,0x13,0x23,0x45,0xfd,0x49,0x1,0x1d,0xe1,0x41,0x1,0x0,0x4,0x3e,0x24,0xe4,0x24,0x3c,0xa4,0x64,0x24,0x3c,0x24,0x24,0x24,0x3c,0x24,
++0x13,0x12,0x22,0x23,0x4a,0xfa,0x13,0x20,0x47,0xf8,0x2,0x2,0x1a,0xe3,0x44,0x18,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xfe,0x40,0x48,0x7c,0x40,0x40,0xc6,0x3c,
++0x10,0x10,0x27,0x24,0x4c,0xfc,0x17,0x24,0x44,0xff,0x44,0x4,0x1c,0xe7,0x44,0x1,0x10,0x90,0xd0,0x90,0xb8,0xb6,0xd2,0x90,0x94,0x94,0x98,0x88,0x90,0xa0,0x40,0x80,
++0x10,0x10,0x23,0x22,0x4b,0xf8,0x17,0x20,0x43,0xfa,0x42,0x2,0x1a,0xe0,0x41,0x6,0x40,0x48,0xfc,0x48,0xf8,0x40,0xfe,0x0,0xf8,0x8,0x48,0x48,0x88,0xb0,0xc,0x4,
++0x10,0x10,0x23,0x22,0x4a,0xfb,0x12,0x22,0x43,0xf8,0x41,0x5,0x1d,0xe5,0x48,0x0,0x0,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x80,0x40,0x24,0x2,0xa,0xf8,0x0,
++0x12,0x13,0x22,0x25,0x4d,0xf5,0x15,0x25,0x45,0xfd,0x44,0x4,0x1c,0xe4,0x44,0x7,0x4,0xfe,0x20,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0xa0,0xa0,0x40,0x60,0x98,0x6,
++0x11,0x11,0x21,0x22,0x4b,0xf6,0x1a,0x22,0x43,0xfa,0x43,0x2,0x1a,0xe2,0x42,0x3,0x8,0x7c,0x8,0x8,0xfe,0x40,0x48,0xfc,0x20,0x24,0xfe,0x20,0x20,0x50,0x8e,0x4,
++0x10,0x14,0x22,0x22,0x48,0xf8,0x16,0x22,0x42,0xfa,0x42,0x2,0x1a,0xe5,0x48,0x0,0x20,0x48,0xfc,0x88,0x88,0x88,0xf8,0x80,0xf8,0x88,0x88,0x88,0xf8,0x0,0x86,0x7c,
++0x10,0x13,0x22,0x27,0x4a,0xfb,0x12,0x22,0x43,0xfd,0x41,0x1,0x1d,0xe1,0x41,0x1,0x8,0xfc,0x8,0xf8,0x40,0xfc,0x20,0x92,0xe,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,
++0x10,0x13,0x20,0x22,0x49,0xf8,0x17,0x20,0x41,0xfd,0x41,0x1,0x1d,0xe1,0x41,0x1,0x8,0xfc,0x90,0x94,0x98,0x90,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x27,0x20,0x4b,0xfa,0x13,0x22,0x43,0xfa,0x43,0x2,0x1f,0xe1,0x42,0x4,0x40,0x48,0xfc,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x10,0xc,0x4,
++0x10,0x17,0x24,0x25,0x4c,0xf7,0x15,0x25,0x45,0xfc,0x47,0x4,0x1c,0xe4,0x48,0x0,0x4,0xfe,0x0,0xf8,0x0,0xfe,0x48,0x30,0x8e,0x10,0xfe,0x90,0x50,0x10,0x50,0x20,
++0x10,0x10,0x27,0x20,0x49,0xf9,0x11,0x20,0x43,0xfa,0x42,0x2,0x1a,0xe2,0x42,0x2,0x40,0x24,0xfe,0x0,0xf8,0x8,0xf8,0x4,0xfe,0x4,0xf4,0x94,0x94,0xf4,0x14,0x8,
++0x10,0x10,0x2f,0x21,0x4a,0xfa,0x12,0x23,0x40,0xff,0x44,0x4,0x1d,0xe4,0x44,0x4,0x80,0x44,0xfe,0x10,0xa8,0x48,0xa8,0xf8,0x44,0xfe,0x44,0x94,0xf4,0x4,0x14,0x8,
++0x10,0x12,0x21,0x20,0x4b,0xf8,0x11,0x22,0x44,0xfb,0x42,0x2,0x1a,0xe2,0x4f,0x0,0x0,0x8,0x10,0x0,0xfc,0x0,0x10,0x8,0x4,0xf8,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x11,0x10,0x2f,0x20,0x4b,0xf8,0x17,0x20,0x40,0xfb,0x40,0x1,0x1a,0xe4,0x48,0x0,0x10,0xa4,0xfe,0xa0,0xf8,0xa8,0xfe,0xa8,0xa8,0xf8,0xa0,0xb0,0xa8,0xae,0xa4,0xa0,
++0x10,0x10,0x27,0x24,0x48,0xf9,0x11,0x21,0x41,0xf9,0x41,0x7,0x18,0xe1,0x42,0x4,0x40,0x20,0xfe,0x2,0x34,0xc0,0x8,0xfc,0x10,0x10,0x14,0xfe,0x0,0x10,0xc,0x4,
++0x10,0x17,0x20,0x28,0x4f,0xf4,0x14,0x27,0x40,0xfb,0x40,0xf,0x19,0xe2,0x45,0x0,0x8,0xfc,0xa0,0xa4,0xfe,0xa4,0xa4,0xfc,0x0,0xf8,0x0,0xfe,0x50,0x4c,0x44,0x80,
++0x13,0x12,0x23,0x22,0x4b,0xf8,0x17,0x24,0x47,0xf8,0x43,0x2,0x19,0xe0,0x43,0xc,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfc,0xa4,0xfc,0x0,0xf8,0x8,0xb0,0x40,0xb0,0xe,
++0x10,0x17,0x24,0x2f,0x54,0xf7,0x14,0x21,0x43,0xf8,0x40,0x7,0x19,0xe2,0x45,0x0,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x84,0x10,0xe0,0x40,0x88,0xfc,0x50,0x4c,0x44,0x80,
++0x10,0x17,0x24,0x22,0x4a,0xf4,0x10,0x20,0x41,0xfa,0x45,0x0,0x19,0xe0,0x40,0x7,0x4,0xbe,0xa4,0x94,0x94,0xa4,0x50,0x88,0x24,0x42,0x90,0x60,0x88,0x30,0xc0,0x0,
++0x12,0x12,0x24,0x22,0x4a,0xf7,0x14,0x27,0x44,0xf7,0x40,0xf,0x18,0xe1,0x46,0x0,0x48,0x48,0x90,0x48,0x48,0xfc,0x44,0xfc,0x44,0xfc,0x40,0xfe,0xe0,0x50,0x4e,0x40,
++0x12,0x12,0x22,0x2f,0x42,0xfa,0x17,0x20,0x47,0xfd,0x45,0x5,0x1d,0xe7,0x40,0x0,0x4,0xfe,0x10,0xa4,0x7e,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x28,0x26,0xc2,
++0x10,0x10,0x2f,0x20,0x4a,0xf9,0x13,0x22,0x43,0xfa,0x43,0x1,0x1a,0xe4,0x41,0x0,0x40,0x44,0xfe,0xa0,0xa8,0x10,0xfe,0xc,0xf8,0x8,0xf8,0x50,0x4c,0x44,0x40,0x80,
++0x12,0x11,0x27,0x24,0x4d,0xfc,0x17,0x24,0x43,0xfa,0x42,0x3,0x1a,0xe2,0x43,0x2,0x8,0x10,0xfc,0x44,0x54,0x44,0xfc,0x4,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x1f,0x20,0x27,0x4c,0xff,0x14,0x27,0x40,0xff,0x44,0x7,0x1c,0xe7,0x40,0xf,0x4,0xfe,0x0,0xfc,0x44,0xfc,0x44,0xfc,0x0,0xfe,0x44,0xfc,0x44,0xfc,0x0,0xfe,
++0x10,0x11,0x25,0x23,0x4a,0xf9,0x10,0x2e,0x42,0xfa,0x42,0x2,0x1a,0xe5,0x48,0x0,0x24,0xfe,0x24,0xfc,0x20,0xfe,0x0,0xf8,0x88,0xf8,0x80,0xf8,0x88,0xf8,0x86,0x7c,
++0x10,0x11,0x21,0x25,0x49,0xf8,0x17,0x24,0x44,0xff,0x40,0x7,0x18,0xe1,0x46,0x0,0x10,0xf8,0x10,0x10,0xf0,0x0,0xbc,0xa4,0xa4,0xbc,0x40,0xfe,0xe0,0x50,0x4e,0x40,
++0x10,0x13,0x22,0x26,0x4b,0xf8,0x17,0x20,0x43,0xfa,0x43,0x1,0x1b,0xe5,0x49,0x1,0x8,0xfc,0xa8,0xa8,0xf8,0x4,0xfe,0x0,0xf8,0x8,0xf8,0x44,0x48,0x30,0x8e,0x4,
++0x11,0x15,0x27,0x29,0x47,0xfb,0x15,0x29,0x43,0xfa,0x42,0x2,0x1a,0xe0,0x41,0x6,0x8,0x28,0xbc,0x48,0xbe,0x18,0x2a,0x4e,0xf8,0x8,0x48,0x48,0x48,0xb0,0xc,0x4,
++0x0,0x2,0x2,0x4,0x4,0x8,0x10,0x3f,0x0,0x1,0x2,0x4,0x8,0x10,0x3f,0x0,0x0,0x0,0x0,0x0,0x10,0x10,0x20,0xc0,0x80,0x0,0x0,0x0,0x20,0x10,0xf8,0x8,
++0x11,0x25,0x79,0x11,0x29,0x7d,0x1,0xff,0x0,0x7f,0x49,0x7f,0x49,0x7f,0x40,0x3,0x10,0x24,0x78,0x10,0x28,0x7c,0x10,0xfe,0x80,0x88,0x48,0x50,0x50,0x22,0xd2,0xe,
++0x0,0x0,0x4,0x4,0x4,0x9,0x9,0x12,0x9,0x9,0x4,0x4,0x4,0x0,0x0,0x0,0x0,0x0,0x90,0x90,0x90,0x20,0x20,0x40,0x20,0x20,0x90,0x90,0x90,0x0,0x0,0x0,
++0x11,0x11,0x22,0x44,0x22,0x11,0x11,0x0,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x20,0x10,0x10,0x20,0x40,0x20,0x10,0x10,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x21,0x42,0x21,0x10,0x1f,0x10,0x1f,0x0,0x3f,0x21,0x21,0x3f,0x20,0x20,0x1f,0x84,0x8,0x10,0x8,0x88,0xf0,0x10,0xf0,0x8,0xfc,0x8,0x8,0xf8,0xa,0x2,0xfe,
++0x0,0x8,0x7d,0x10,0x10,0x10,0x7c,0x10,0x10,0x10,0x10,0x1c,0x70,0x21,0x0,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x9,0x7d,0x11,0x11,0x11,0x7d,0x11,0x11,0x11,0x11,0x1e,0x72,0x24,0x8,0x10,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x12,0x12,0xe,0x0,
++0x0,0x8,0x7c,0x13,0x10,0x10,0x7d,0x10,0x10,0x17,0x10,0x1c,0x70,0x20,0x0,0x0,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x40,0x44,0xfe,0x44,0x44,0x44,0x54,0x48,0x40,
++0x0,0x8,0x7c,0x10,0x11,0x12,0x7c,0x13,0x10,0x10,0x10,0x1c,0x71,0x21,0x2,0x4,0x10,0x90,0x90,0x90,0x8,0x4,0x2,0xf8,0x88,0x88,0x88,0x88,0x8,0x8,0x50,0x20,
++0x0,0x8,0x7c,0x17,0x10,0x11,0x7d,0x11,0x10,0x10,0x10,0x1c,0x71,0x22,0x4,0x8,0x80,0x40,0x24,0xfe,0x8,0x8,0x8,0x10,0x90,0xa0,0x40,0xa0,0x10,0x8,0xe,0x4,
++0x0,0xb,0x7c,0x10,0x10,0x10,0x7c,0x13,0x10,0x10,0x10,0x10,0x1c,0x70,0x27,0x0,0x8,0xfc,0x40,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x50,0x48,0x48,0x40,0xfe,0x0,
++0x0,0x8,0x7f,0x10,0x10,0x11,0x11,0x7d,0x11,0x11,0x11,0x1d,0x70,0x20,0x0,0x0,0x0,0x4,0xfe,0x8,0x8,0xe8,0x28,0x28,0x28,0x28,0xe8,0x8,0x8,0x8,0x28,0x10,
++0x0,0x8,0x7c,0x10,0x17,0x10,0x7c,0x10,0x11,0x11,0x11,0x1e,0x72,0x24,0x8,0x10,0x80,0xa0,0x98,0x88,0xfe,0xa0,0xa0,0xa4,0x24,0x28,0x30,0x20,0x62,0xa2,0x1e,0x0,
++0x0,0x8,0x7c,0x10,0x10,0x10,0x7c,0x10,0x11,0x11,0x11,0x1d,0x71,0x21,0x1,0x1,0x40,0x40,0x44,0x7e,0x40,0x40,0x40,0x44,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x8,0xfc,0x21,0x21,0x23,0xfd,0x21,0x21,0x21,0x25,0x39,0xe1,0x41,0x1,0x1,0xa0,0xa8,0xa4,0x24,0x20,0x3e,0xe0,0x20,0x20,0x20,0x10,0x10,0x12,0xa,0xa,0x4,
++0x0,0x8,0x7c,0x11,0x11,0x11,0x7d,0x11,0x11,0x11,0x11,0x11,0x1d,0x71,0x21,0x1,0x20,0x20,0x44,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x9,0x7d,0x11,0x11,0x11,0x7d,0x11,0x11,0x11,0x11,0x11,0x1d,0x71,0x21,0x1,0x4,0xfe,0x4,0x4,0xfc,0x24,0x20,0x24,0xfe,0x20,0x20,0x10,0x10,0x4a,0x8a,0x6,
++0x2,0x12,0xfa,0x2f,0x22,0x22,0xfa,0x22,0x22,0x22,0x22,0x3a,0xe4,0x4a,0x11,0x0,0x0,0x0,0x4,0xbe,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xbc,0xa4,0x0,0x0,
++0x0,0xb,0x7d,0x11,0x11,0x11,0x7d,0x11,0x11,0x11,0x11,0x1d,0x73,0x20,0x0,0x0,0x4,0xfe,0x8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0xe,0xf8,0x8,0x8,0x8,
++0x1,0x11,0xf9,0x21,0x27,0x21,0xf9,0x21,0x21,0x21,0x2f,0x20,0x39,0xe2,0x44,0x8,0x10,0x10,0x10,0x10,0xfc,0x10,0x10,0x10,0x10,0x14,0xfe,0x0,0x10,0x8,0x4,0x4,
++0x0,0xb,0x7c,0x10,0x11,0x11,0x7d,0x11,0x11,0x11,0x11,0x1d,0x70,0x20,0x0,0x3,0x4,0xfe,0x20,0x40,0xfc,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x48,0x86,0x2,
++0x0,0x17,0xf8,0x22,0x22,0x24,0xf7,0x21,0x21,0x22,0x2a,0x34,0xe4,0x4a,0x1,0x0,0x0,0xc0,0xbe,0xa2,0xa4,0xa4,0xe8,0xa4,0xa4,0xa2,0xa2,0xa2,0xb4,0xa8,0x20,0x20,
++0x1,0x11,0xfa,0x24,0x29,0x21,0xfa,0x26,0x2a,0x22,0x22,0x3a,0xe2,0x42,0x2,0x2,0x0,0x8,0x7c,0x0,0x0,0x4,0xfe,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x28,0x10,
++0x1,0x11,0xf9,0x25,0x23,0x21,0xf9,0x21,0x23,0x2d,0x21,0x39,0xe2,0x42,0x4,0x18,0x20,0x20,0x24,0x2c,0x30,0x20,0x20,0x30,0x2c,0x24,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x1,0x11,0xf9,0x22,0x25,0x20,0xf8,0x20,0x23,0x2c,0x23,0x3a,0xe2,0x42,0x3,0x2,0x0,0x0,0xfc,0x8,0x10,0xa0,0x40,0xa0,0x18,0x6,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0x1f,0x21,0x49,0x11,0x23,0x0,0x7f,0x1,0x1,0x3f,0x1,0x1,0xff,0x0,0x0,0x8,0xfc,0x8,0x20,0x18,0x8,0x0,0xfc,0x0,0x10,0xf8,0x40,0x24,0xfe,0x0,
++0x0,0x13,0xfa,0x24,0x23,0x20,0xf8,0x21,0x23,0x20,0x28,0x37,0xe0,0x40,0x0,0x0,0x0,0xfe,0x42,0x44,0xfc,0x80,0xa0,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x14,0xfa,0x21,0x20,0x26,0xfa,0x22,0x22,0x22,0x22,0x3a,0xe2,0x45,0x8,0x0,0x20,0x20,0x24,0xfe,0x40,0x50,0x90,0xfc,0x10,0x14,0xfe,0x10,0x10,0x16,0xfc,0x0,
++0x1,0x9,0x7f,0x11,0x11,0x11,0x7d,0x11,0x11,0x11,0x11,0x17,0x1c,0x71,0x22,0x4,0x10,0x10,0xfc,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x14,0xfe,0x0,0x10,0xc,0x4,
++0x1,0x11,0xff,0x21,0x20,0x23,0xfa,0x22,0x22,0x22,0x27,0x38,0xe0,0x41,0x2,0xc,0x10,0x14,0xfe,0x10,0x40,0xf8,0x48,0x48,0x48,0x48,0xfe,0x40,0xa0,0x10,0xe,0x4,
++0x0,0x10,0xfb,0x20,0x20,0x21,0xfb,0x20,0x23,0x22,0x22,0x3a,0xe3,0x42,0x0,0x0,0x40,0x48,0xfc,0x40,0xa0,0x14,0xfe,0x8,0xc8,0x48,0x48,0x48,0xc8,0x8,0x28,0x10,
++0x0,0x10,0xf8,0x23,0x22,0x22,0xfb,0x22,0x22,0x22,0x22,0x3a,0xe2,0x44,0x9,0x2,0x48,0x7c,0x40,0xfe,0x42,0x78,0xc4,0x7c,0x0,0xf0,0x90,0x90,0x90,0x92,0x12,0xe,
++0x0,0xb,0x7e,0x12,0x13,0x12,0x7e,0x13,0x12,0x12,0x13,0x1e,0x72,0x22,0x3,0x2,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x20,0x24,0xa8,0x30,0x20,0xa2,0x22,0x1e,
++0x0,0x8,0x7d,0x11,0x12,0x10,0x7c,0x11,0x12,0x11,0x11,0x1e,0x70,0x21,0x2,0xc,0x40,0x40,0x48,0x50,0x40,0xa0,0x98,0x48,0x44,0x48,0x50,0xa0,0xa0,0x10,0xe,0x4,
++0x0,0x14,0xff,0x24,0x28,0x23,0xf8,0x20,0x27,0x20,0x21,0x39,0xe2,0x44,0x1,0x0,0x80,0x40,0xfe,0x2,0x14,0xf8,0x0,0x4,0xfe,0x40,0x50,0x48,0x44,0x44,0x40,0x80,
++0x0,0x14,0xff,0x24,0x2a,0x23,0xfa,0x24,0x24,0x2a,0x21,0x39,0xe2,0x44,0x8,0x10,0x80,0x40,0xfe,0x2,0x4,0xbc,0xa4,0xa4,0xa4,0xa4,0x34,0x28,0x22,0x22,0x1e,0x0,
++0x0,0x17,0xfc,0x28,0x21,0x22,0xf8,0x20,0x2f,0x20,0x20,0x39,0xe2,0x44,0x8,0x0,0x0,0xfe,0x2,0xa4,0x18,0x8,0x40,0x44,0xfe,0x40,0xe0,0x50,0x48,0x4e,0x44,0x40,
++0x0,0x13,0xfa,0x22,0x23,0x22,0xfa,0x23,0x22,0x22,0x23,0x3d,0xe5,0x49,0x11,0x1,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0xfe,0x20,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x7,0xfc,0x25,0x24,0x25,0xf8,0x20,0x23,0x22,0x23,0x3a,0xe3,0x42,0x3,0x2,0x4,0xfe,0x4,0xf4,0x4,0xf4,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,
++0x0,0x10,0xf9,0x22,0x25,0x28,0xff,0x24,0x24,0x27,0x24,0x3c,0xe7,0x44,0x4,0x5,0x40,0xc0,0x20,0x10,0xe8,0x6,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x88,0xa8,0x90,
++0x0,0x17,0xfa,0x21,0x20,0x23,0xf8,0x27,0x21,0x21,0x22,0x3a,0xe4,0x48,0x1,0x6,0x1c,0xe0,0x48,0x50,0x20,0xfc,0x80,0xfe,0x0,0xf8,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x0,0x17,0xfc,0x24,0x24,0x27,0xfc,0x24,0x27,0x24,0x24,0x3f,0xe4,0x44,0x4,0x4,0x4,0xbe,0x84,0x84,0x84,0xbc,0x4,0x0,0xbc,0x4,0x24,0xa8,0x10,0x28,0x46,0x84,
++0x1,0x11,0xfa,0x21,0x21,0x20,0xf8,0x23,0x22,0x22,0x22,0x3a,0xe3,0x42,0x3,0x2,0x24,0x24,0x48,0x24,0x24,0x40,0x84,0xfe,0x4,0x94,0x64,0x94,0xc,0x4,0xfc,0x4,
++0x0,0x17,0xfa,0x21,0x27,0x24,0xf8,0x27,0x21,0x21,0x22,0x3a,0xe4,0x48,0x1,0x6,0x38,0xc0,0x48,0x50,0xfe,0x82,0x84,0xfe,0x0,0xf0,0x10,0xa0,0x40,0xa0,0x1e,0x4,
++0x0,0x10,0xfb,0x22,0x22,0x22,0xfb,0x22,0x22,0x22,0x23,0x3d,0xe5,0x49,0x11,0x1,0x40,0x24,0xfe,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x11,0xff,0x21,0x21,0x20,0xff,0x24,0x27,0x20,0x27,0x38,0xe7,0x40,0xf,0x0,0x10,0x14,0xfe,0x10,0xf0,0x44,0xfe,0x44,0xfc,0x40,0xfc,0x40,0xfc,0x40,0xfe,0x0,
++0x1,0x11,0xff,0x21,0x21,0x2f,0xf8,0x23,0x22,0x23,0x22,0x3b,0xe0,0x41,0x2,0x4,0x10,0x10,0xfc,0x10,0x14,0xfe,0x40,0xf8,0x48,0xf8,0x48,0xf8,0x0,0x10,0xc,0x4,
++0x0,0x17,0xfd,0x25,0x26,0x26,0xfb,0x24,0x20,0x2f,0x20,0x39,0xe0,0x40,0x1,0x6,0x0,0xbc,0xac,0xac,0xb4,0xb4,0x18,0xa4,0x40,0xfe,0x90,0x10,0xa0,0x40,0xb0,0xc,
++0x0,0x14,0xfc,0x27,0x21,0x21,0xfb,0x22,0x27,0x2a,0x23,0x3a,0xe2,0x43,0x2,0x2,0x40,0x44,0x44,0xfc,0x44,0x20,0xfe,0x20,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,0x0,
++0x0,0x10,0xfb,0x22,0x22,0x22,0xfa,0x23,0x22,0x22,0x23,0x38,0xe5,0x45,0x9,0x0,0x40,0x84,0xfe,0x44,0x74,0x94,0xd4,0x24,0x44,0x84,0xfc,0x40,0x24,0x2a,0xa,0xf8,
++0x4,0x2,0xf2,0x2f,0x24,0x24,0xf7,0x25,0x25,0x25,0x35,0xe9,0x49,0x15,0x22,0x1,0x40,0x40,0x44,0xfe,0x80,0x0,0x7e,0x12,0x54,0x50,0x5e,0x50,0x50,0xb0,0x90,0xe,
++0x0,0x17,0xf9,0x20,0x2f,0x20,0xfb,0x22,0x23,0x22,0x23,0x38,0xef,0x40,0x0,0x0,0x40,0xfc,0x10,0xa0,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x40,0xfe,0x40,0x40,0x40,
++0x0,0x14,0xfa,0x20,0x2f,0x21,0xf8,0x27,0x20,0x23,0x20,0x3f,0xe0,0x40,0x3,0xc,0xa0,0xa4,0xa8,0xa0,0xfe,0x10,0xa0,0xfc,0x40,0xf8,0x40,0xfe,0x40,0xa0,0x18,0x6,
++0x2,0x13,0xfa,0x27,0x28,0x25,0xfa,0x24,0x2a,0x21,0x27,0x38,0xe1,0x42,0xc,0x0,0x0,0xbc,0x4,0xa8,0x90,0x28,0x46,0x40,0x48,0x50,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x0,0x10,0xff,0x24,0x24,0x27,0xfc,0x24,0x27,0x24,0x27,0x3c,0xe7,0x48,0x13,0x0,0x78,0x40,0xfe,0x82,0xf4,0x88,0xf8,0x0,0xfe,0xc0,0x68,0xb0,0x68,0xa6,0x24,0x40,
++0x0,0xf,0xf8,0x28,0x28,0x2f,0xf2,0x22,0x2b,0x2a,0x2a,0x3a,0xcb,0x5e,0x0,0x0,0x20,0xa0,0xbe,0xc4,0xa4,0xa8,0x10,0x28,0xc4,0x82,0x7c,0x44,0xc4,0x44,0x7c,0x44,
++0x3e,0x23,0x3e,0x20,0x3f,0x22,0x62,0xbe,0x0,0x7f,0x1,0x3f,0x1,0x1,0xff,0x0,0x20,0xfc,0x88,0x50,0xfe,0x20,0xf8,0x20,0x20,0xfc,0x0,0xf8,0x40,0x24,0xfe,0x0,
++0x1,0x5,0xf7,0x29,0x2f,0x23,0xf5,0x29,0x23,0x22,0x22,0x3a,0xe2,0x40,0x1,0x6,0x8,0x28,0xbc,0x48,0xbe,0x18,0xaa,0x4e,0xf8,0x8,0x48,0x48,0x48,0xb0,0xc,0x4,
++0xf,0x78,0x4b,0x68,0x4b,0x6a,0x4b,0x48,0xff,0x80,0x3f,0x1,0x1f,0x1,0x1,0xff,0xe4,0x3e,0xa4,0x2c,0xa4,0xac,0xa4,0x24,0xfe,0x2,0xf8,0x0,0xf0,0x40,0x24,0xfe,
++0x0,0x3e,0x22,0x3e,0x22,0x3e,0x0,0xff,0x9,0x28,0x2f,0x28,0x38,0x48,0x84,0x3,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x24,0x24,0x34,0x28,0x20,0x26,0xfc,
++0x20,0x23,0x22,0xfa,0x23,0x22,0xfa,0x23,0x20,0xfb,0x2a,0x2a,0x3a,0x22,0x2f,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xf8,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x20,0x20,0x27,0xfa,0x21,0x21,0xf8,0x23,0x22,0xfa,0x2b,0x2a,0x3a,0x22,0x23,0x22,0x8,0x3c,0xc0,0x48,0x48,0x50,0x84,0x3e,0x4,0x4,0xbc,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x30,0x38,0x54,0x50,0x90,0x11,0x11,0x12,0x14,0x18,0x0,0x4,0xfe,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x10,0x12,0x12,0xe,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x30,0x38,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x80,0x80,0x80,0x84,0xfe,0x4,0x4,0x84,0x44,0x44,0x4,0x4,0x4,0x4,0x28,0x10,
++0x10,0x10,0x13,0x10,0xfc,0x10,0x30,0x3b,0x56,0x52,0x92,0x12,0x12,0x12,0x11,0x10,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x12,0x31,0x39,0x54,0x50,0x90,0x10,0x11,0x12,0x14,0x18,0x0,0x8,0xfc,0x8,0x88,0x50,0x50,0x10,0xa0,0xa0,0x40,0xa0,0x20,0x18,0xe,0x4,
++0x10,0x10,0x13,0x10,0xfd,0x11,0x31,0x39,0x55,0x51,0x90,0x10,0x17,0x10,0x10,0x10,0x0,0x10,0xf8,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x33,0x3a,0x56,0x52,0x92,0x12,0x14,0x14,0x19,0x12,0x0,0x4,0xfe,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x10,0x12,0x12,0x12,0xfe,0x12,0x33,0x3a,0x56,0x52,0x92,0x12,0x12,0x13,0x12,0x10,0x20,0x20,0x20,0x20,0x24,0x2c,0xb0,0x20,0x20,0x20,0x20,0x22,0xa2,0x22,0x1e,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x11,0x32,0x3a,0x54,0x50,0x90,0x10,0x10,0x10,0x13,0x1c,0x40,0x40,0x40,0x40,0x50,0x48,0x46,0x42,0x48,0x48,0x50,0x50,0x20,0xc0,0x0,0x0,
++0x1,0x1,0x1,0xff,0x3,0x5,0x9,0x31,0xdf,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0x0,0x4,0xfe,0x80,0x40,0x30,0xe,0xf4,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x10,0x10,0x10,0x10,0xff,0x12,0x32,0x3a,0x56,0x52,0x92,0x13,0x12,0x12,0x12,0x12,0x40,0x40,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0xa4,0x9c,0xc,0x4,0x4,0x14,0x8,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x31,0x39,0x55,0x51,0x90,0x10,0x10,0x11,0x12,0x14,0x8,0xfc,0x8,0x28,0x28,0x28,0x28,0x28,0x48,0x48,0x60,0xa0,0xa2,0x22,0x1e,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x11,0x32,0x38,0x57,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x80,0x80,0x88,0xfc,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x11,0x11,0x11,0x11,0xfd,0x11,0x31,0x3b,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x0,0x8,0x18,0x20,0x40,0x80,0x4,0xfe,0x40,0x20,0x20,0x10,0x10,0x4e,0x84,0x0,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x31,0x39,0x55,0x52,0x92,0x14,0x14,0x18,0x11,0x10,0x0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xa8,0xa8,0x48,0x44,0x84,0x2,0x0,
++0x2,0x4,0x1f,0x10,0x12,0x11,0x10,0x1f,0x1,0x1,0x7f,0x3,0x5,0x19,0x61,0x1,0x0,0x10,0xf8,0x10,0x10,0x60,0x4,0xfe,0x4,0x4,0xf4,0x94,0x48,0x30,0xe,0x0,
++0x10,0x10,0x10,0x10,0xff,0x10,0x30,0x38,0x54,0x50,0x90,0x10,0x11,0x11,0x12,0x14,0x80,0x40,0x40,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0x8,0x8,0x50,0x20,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x32,0x3a,0x57,0x52,0x92,0x12,0x12,0x12,0x11,0x10,0x0,0x8,0xfc,0x48,0x48,0x48,0x48,0x48,0xf8,0x8,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x11,0x10,0x10,0xfc,0x10,0x33,0x38,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x0,0xfc,0x8,0x90,0x60,0x20,0xfe,0x22,0x24,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x1,0x1,0x7f,0x5,0x9,0x11,0x20,0xdf,0x0,0x0,0x7f,0x1,0x9,0x11,0x25,0x2,0x0,0x8,0xfc,0x40,0x30,0xe,0x24,0xf0,0x0,0x8,0xfc,0x0,0x20,0x18,0x8,0x0,
++0x11,0x11,0x11,0x17,0xfd,0x10,0x33,0x38,0x54,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x14,0xfe,0x10,0x8,0xfc,0x88,0x88,0x88,0x88,0xa8,0x90,0x80,0x80,0x80,
++0x10,0x10,0x17,0x10,0xfc,0x10,0x31,0x39,0x55,0x53,0x95,0x19,0x11,0x11,0x11,0x11,0x0,0x4,0xfe,0x80,0x80,0x80,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x10,0xff,0x10,0x30,0x38,0x54,0x50,0x91,0x11,0x12,0x12,0x14,0x18,0x80,0xa0,0x90,0x94,0xfe,0xa0,0xa0,0xa4,0xa4,0xa8,0x28,0x30,0x62,0xa2,0x1e,0x0,
++0x10,0x13,0x12,0x12,0xfe,0x12,0x32,0x3b,0x56,0x52,0x92,0x12,0x13,0x12,0x13,0x10,0x8,0xfc,0x0,0x40,0x40,0x78,0x88,0x10,0x20,0x20,0x50,0x8c,0x4,0x0,0xfe,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x12,0x31,0x38,0x57,0x50,0x90,0x10,0x10,0x10,0x10,0x10,0x0,0x8,0xfc,0x40,0x40,0x48,0x50,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x10,0x10,0xfc,0x13,0x32,0x3a,0x56,0x53,0x92,0x12,0x12,0x14,0x14,0x18,0x40,0x44,0x7e,0x40,0x44,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x11,0x11,0xfd,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x10,0x10,0x10,0x10,0x0,0x4,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,
++0x10,0x11,0x11,0x11,0xfd,0x11,0x30,0x3b,0x54,0x50,0x91,0x10,0x10,0x10,0x10,0x10,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0xfe,0x80,0x88,0xfc,0x8,0x8,0x88,0x50,0x20,
++0x10,0x10,0x10,0x10,0xfd,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x32,0x3a,0x57,0x52,0x91,0x11,0x12,0x12,0x14,0x10,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x10,0x10,0x8,0x4,0x4,0x0,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x33,0x3a,0x56,0x52,0x92,0x12,0x14,0x14,0x18,0x10,0x8,0x1c,0xe0,0x0,0x0,0x4,0xfe,0x20,0x60,0x20,0x30,0x2c,0x24,0x20,0x20,0x20,
++0x10,0x10,0x13,0x12,0xfe,0x13,0x32,0x3a,0x56,0x52,0x92,0x12,0x14,0x14,0x18,0x10,0x8,0x1c,0xe0,0x0,0x8,0xfc,0x0,0xf8,0x88,0x88,0xa8,0x90,0x82,0x82,0x7e,0x0,
++0x10,0x10,0x10,0x10,0xfd,0x12,0x34,0x38,0x54,0x53,0x90,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0xa0,0xa0,0x10,0x8e,0x44,0x40,0x0,0xf8,0x8,0x10,0x10,0xa0,0x40,0x20,
++0x10,0x10,0x10,0x11,0xfd,0x12,0x35,0x39,0x55,0x51,0x91,0x11,0x11,0x10,0x10,0x10,0x80,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0xe4,0x24,0x4,0x28,0x10,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x33,0x3a,0x56,0x52,0x92,0x12,0x12,0x13,0x12,0x10,0x8,0x1c,0xe0,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x10,0x52,0x8a,0x26,0x12,0x0,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x32,0x3b,0x54,0x50,0x90,0x11,0x12,0x14,0x10,0x10,0x8,0x1c,0xe0,0x0,0x20,0x20,0x24,0xfe,0x20,0x20,0xa8,0x24,0x22,0x22,0xa0,0x40,
++0x10,0x10,0x10,0x13,0xfe,0x14,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x11,0x10,0x10,0x40,0x20,0x20,0xfe,0x2,0x4,0x0,0x10,0x30,0x40,0x80,0x0,0x4,0x4,0xfc,0x0,
++0x10,0x13,0x12,0x11,0xfc,0x10,0x30,0x3b,0x54,0x50,0x93,0x10,0x10,0x10,0x17,0x10,0x0,0xf8,0x8,0x10,0xa0,0x40,0xb0,0xe,0x44,0x50,0xf8,0x40,0x40,0x48,0xfc,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x37,0x38,0x55,0x52,0x94,0x18,0x10,0x10,0x10,0x10,0x40,0x40,0x48,0xf8,0x50,0x64,0xfe,0x80,0xfc,0x40,0x88,0xfc,0x8,0x8,0x28,0x10,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x37,0x38,0x54,0x51,0x92,0x14,0x18,0x10,0x10,0x10,0x40,0x40,0x44,0xf8,0x50,0x64,0xfe,0x40,0x88,0x98,0xa0,0xc0,0x84,0x84,0x7c,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x10,0x32,0x3a,0x55,0x50,0x90,0x10,0x10,0x10,0x17,0x10,0x0,0x8,0xfc,0x90,0x90,0x90,0x94,0x94,0x94,0x98,0x90,0x90,0x90,0x94,0xfe,0x0,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x30,0x39,0x54,0x53,0x90,0x10,0x10,0x11,0x12,0x14,0x80,0x80,0x9c,0xe0,0x50,0x20,0x52,0x8e,0x0,0xfc,0x90,0x90,0x90,0x12,0x12,0xe,
++0x10,0x10,0x17,0x10,0xfc,0x11,0x32,0x3b,0x54,0x50,0x97,0x10,0x10,0x10,0x1f,0x10,0x0,0x4,0xfe,0x40,0x80,0x10,0x8,0xfc,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x10,0x10,0x10,0x10,0xfc,0x13,0x32,0x3a,0x56,0x52,0x92,0x12,0x10,0x10,0x11,0x16,0x40,0x44,0x7e,0x40,0x48,0xfc,0x8,0x48,0x48,0x48,0x48,0x48,0x80,0xb0,0xc,0x4,
++0x10,0x10,0x14,0x12,0xfd,0x10,0x37,0x38,0x54,0x50,0x90,0x10,0x11,0x11,0x12,0x14,0x40,0x40,0x44,0x48,0x50,0x44,0xfe,0xa0,0xa0,0xa0,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x10,0x10,0x12,0x12,0xff,0x10,0x33,0x38,0x54,0x53,0x92,0x12,0x12,0x12,0x11,0x10,0x40,0x40,0x48,0x48,0xf8,0x0,0xf8,0x8,0x8,0xf8,0x8,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x17,0x11,0xfd,0x12,0x3a,0x37,0x51,0x51,0x95,0x15,0x12,0x15,0x18,0x10,0x0,0xc,0x70,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x7c,0x0,0x6,0xfc,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x10,0x37,0x38,0x54,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x8,0x3c,0xe0,0x20,0x20,0x24,0xfe,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x11,0xfe,0x12,0x32,0x3a,0x57,0x52,0x92,0x12,0x12,0x12,0x13,0x12,0x0,0x40,0xc0,0x4,0x3e,0x4,0x4,0x4,0xbc,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x11,0xfd,0x13,0x35,0x39,0x55,0x50,0x97,0x10,0x10,0x10,0x10,0x10,0xa0,0xa0,0xa4,0x28,0x30,0x60,0xa4,0x1c,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x10,0x10,0x11,0x12,0xfe,0x14,0x31,0x39,0x53,0x55,0x91,0x11,0x11,0x11,0x11,0x11,0x80,0x88,0x7c,0x0,0x80,0x84,0x7e,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0x28,0x10,
++0x10,0x10,0x10,0x11,0xfe,0x14,0x31,0x38,0x54,0x57,0x90,0x10,0x11,0x12,0x17,0x10,0x40,0x40,0xa0,0x10,0xe,0x24,0xf0,0x0,0x8,0xfc,0x80,0x80,0x10,0x8,0xfc,0x4,
++0x10,0x10,0x1e,0x22,0x24,0x54,0x8,0x11,0x21,0xff,0x3,0x5,0x9,0x11,0x61,0x1,0x10,0x10,0xfc,0x10,0x50,0x90,0xfc,0x10,0x14,0xfe,0x80,0x40,0x30,0xe,0x4,0x0,
++0x2,0x1,0x7f,0x4,0x14,0x14,0x24,0x45,0x1,0xff,0x3,0x5,0x9,0x11,0x61,0x1,0x0,0x8,0xfc,0x40,0x50,0x48,0x44,0x44,0x0,0xfe,0x80,0x40,0x30,0xe,0x4,0x0,
++0x1,0x11,0x9,0x3f,0x2,0x7f,0x4,0x8,0x31,0xc1,0x3f,0x1,0x9,0x11,0x25,0x2,0x0,0x10,0x20,0xf8,0x0,0xfc,0x40,0x30,0xe,0x4,0xf8,0x0,0x20,0x18,0x8,0x0,
++0x10,0x10,0x12,0x13,0xfe,0x14,0x30,0x38,0x57,0x50,0x91,0x10,0x10,0x10,0x11,0x12,0x40,0x20,0x20,0xfe,0x2,0x44,0x40,0x84,0xfe,0x88,0x8,0x90,0x60,0x90,0xc,0x4,
++0x10,0x10,0x17,0x10,0xfc,0x12,0x32,0x38,0x54,0x51,0x96,0x10,0x10,0x10,0x12,0x11,0x0,0x4,0xbe,0x84,0x84,0xa4,0x94,0x94,0x84,0x8c,0xb4,0x84,0x84,0x84,0x94,0x8,
++0x8,0x8,0x8,0xfe,0x1c,0x2a,0x49,0x0,0xf,0x8,0xa,0x9,0x8,0x10,0x10,0x60,0x20,0x20,0x24,0xfe,0x70,0xa8,0x26,0x20,0xf0,0x20,0x20,0xa0,0xa0,0x22,0x22,0x1e,
++0x10,0x11,0x11,0x11,0xfd,0x12,0x30,0x3b,0x54,0x51,0x91,0x11,0x11,0x11,0x11,0x11,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x17,0x12,0xfd,0x11,0x33,0x38,0x54,0x50,0x97,0x10,0x10,0x10,0x11,0x10,0x8,0x3c,0xc0,0x48,0x48,0x50,0xf8,0x10,0x60,0x44,0xfe,0x40,0x40,0x40,0x40,0x80,
++0x10,0x10,0x10,0x11,0xfe,0x11,0x31,0x39,0x55,0x51,0x91,0x11,0x11,0x12,0x12,0x14,0x40,0x40,0xf8,0x10,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x24,0x34,0x28,
++0x10,0x10,0x10,0x17,0xfc,0x11,0x30,0x3f,0x54,0x50,0x90,0x17,0x10,0x10,0x10,0x10,0x80,0x40,0x48,0xfc,0x0,0x10,0xa4,0xfe,0x40,0x40,0x48,0xfc,0x40,0x40,0x40,0x40,
++0x10,0x12,0x11,0x11,0xfc,0x12,0x32,0x38,0x55,0x51,0x92,0x16,0x12,0x12,0x10,0x13,0x10,0x10,0x10,0x10,0x54,0x52,0x90,0x14,0x14,0x18,0x8,0x10,0x20,0x40,0x80,0x0,
++0x10,0x13,0x10,0x10,0xfd,0x10,0x30,0x3b,0x54,0x51,0x91,0x12,0x10,0x10,0x11,0x16,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x40,0x48,0x48,0x50,0xa0,0x90,0xe,0x4,
++0x10,0x10,0x10,0x13,0xfc,0x10,0x37,0x38,0x55,0x53,0x95,0x19,0x11,0x11,0x11,0x11,0x40,0x40,0x44,0xf8,0x50,0x64,0xfe,0x80,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x8,0x8,0x7e,0x8,0x1c,0x2a,0x49,0x4,0x8,0x10,0x2f,0xc4,0x4,0x4,0x8,0x10,0x20,0x28,0xfc,0x20,0x70,0xac,0x20,0xc0,0x20,0x10,0xee,0x24,0x20,0x20,0xa0,0x40,
++0x10,0x10,0x13,0x10,0xfc,0x13,0x31,0x38,0x56,0x51,0x90,0x17,0x10,0x10,0x11,0x16,0x40,0x48,0xfc,0x40,0x40,0xfe,0x22,0xa4,0x20,0x20,0x24,0xfe,0x40,0x58,0x86,0x2,
++0x8,0xa,0x7f,0x14,0x14,0x3f,0x4,0x7f,0x4,0x5,0xff,0x3,0x5,0x19,0x61,0x1,0x8,0xc,0x70,0x40,0x44,0x7e,0x48,0x48,0x88,0x8,0xfe,0x80,0x40,0x30,0xe,0x0,
++0x10,0x10,0x10,0x10,0xff,0x12,0x33,0x3a,0x57,0x52,0x90,0x1f,0x10,0x10,0x10,0x10,0x44,0x7e,0x40,0x48,0xfc,0x8,0xf8,0x8,0xf8,0x48,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x10,0x13,0x12,0x12,0xfe,0x13,0x30,0x38,0x55,0x51,0x92,0x14,0x10,0x10,0x13,0x1c,0x4,0xfe,0x94,0x94,0x94,0xfc,0x80,0x88,0xfc,0x8,0x88,0x50,0x20,0xc0,0x0,0x0,
++0x10,0x10,0x17,0x10,0xff,0x12,0x32,0x3a,0x57,0x52,0x92,0x1f,0x10,0x10,0x17,0x10,0x10,0x38,0xc0,0x44,0xfe,0x48,0x48,0x48,0xfc,0x48,0x48,0xfe,0x40,0x48,0xfc,0x0,
++0x10,0x10,0x10,0x17,0xf8,0x10,0x33,0x3a,0x56,0x52,0x93,0x10,0x12,0x14,0x19,0x10,0x80,0x40,0x44,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x40,0x48,0x46,0x42,0x80,
++0x10,0x10,0x17,0x10,0xff,0x12,0x32,0x3b,0x54,0x53,0x90,0x1f,0x10,0x10,0x11,0x10,0x80,0x48,0xfc,0x0,0xf8,0x8,0x8,0xf8,0x0,0xf8,0x10,0xfe,0x40,0x40,0x40,0x80,
++0x10,0x10,0x17,0x11,0xfd,0x12,0x37,0x39,0x55,0x51,0x95,0x15,0x12,0x15,0x18,0x10,0x10,0x14,0x7e,0x14,0xfe,0x14,0x7c,0x10,0x7c,0x10,0xfe,0x10,0x10,0x16,0xfc,0x0,
++0x10,0x10,0x13,0x10,0xfc,0x13,0x30,0x38,0x57,0x52,0x91,0x10,0x11,0x16,0x11,0x10,0x40,0x48,0xfc,0x48,0x48,0xfe,0x48,0x48,0xf8,0x48,0x50,0xe0,0x50,0x4e,0x44,0x80,
++0x10,0x13,0x12,0x12,0xff,0x12,0x32,0x3b,0x56,0x52,0x93,0x13,0x15,0x15,0x19,0x11,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0xfe,0x20,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x13,0x10,0xfd,0x10,0x37,0x39,0x56,0x55,0x98,0x13,0x10,0x10,0x11,0x16,0x40,0x48,0xfc,0x40,0xf8,0x80,0xfc,0x10,0x8,0xf6,0x40,0xf8,0x40,0xb0,0xc,0x4,
++0x11,0x11,0x13,0x11,0xfd,0x11,0x31,0x39,0x55,0x51,0x9f,0x12,0x12,0x12,0x13,0x10,0x10,0x10,0xfc,0x10,0xf0,0x10,0x10,0xf0,0x10,0x14,0xfe,0x50,0x88,0x0,0xfc,0x0,
++0x20,0x20,0x20,0x2f,0xf8,0x20,0x37,0x6d,0x64,0xa5,0x24,0x24,0x27,0x24,0x24,0x24,0x40,0x40,0x44,0xfe,0x40,0x44,0xfe,0x14,0xa4,0xf4,0x44,0x44,0xfc,0x44,0x54,0x8,
++0x10,0x10,0x10,0x17,0xfc,0x11,0x32,0x3c,0x57,0x52,0x93,0x12,0x13,0x10,0x1f,0x10,0x40,0x40,0x48,0xfc,0xe0,0x50,0x4e,0x44,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x0,
++0x10,0x10,0x17,0x10,0xff,0x12,0x33,0x3a,0x56,0x53,0x90,0x10,0x11,0x12,0x14,0x10,0x40,0x44,0xfe,0x40,0xf8,0x48,0x58,0xe8,0x48,0xf8,0xc0,0xe0,0x50,0x4e,0x44,0x40,
++0x11,0x15,0x15,0x15,0xfd,0x15,0x30,0x3b,0x56,0x52,0x92,0x12,0x12,0x10,0x11,0x16,0x20,0x20,0x24,0x3e,0x50,0x88,0x8,0xfc,0x8,0x48,0x48,0x48,0xa8,0xa2,0x22,0x1e,
++0x10,0x13,0x12,0x12,0xfb,0x10,0x37,0x3a,0x57,0x52,0x93,0x12,0x12,0x1f,0x10,0x10,0x8,0xfc,0x8,0x8,0xf8,0x0,0xfe,0x8,0xf8,0x8,0xf8,0x8,0xe,0xf8,0x8,0x8,
++0x10,0x10,0x13,0x12,0xfe,0x12,0x33,0x38,0x54,0x57,0x94,0x14,0x14,0x14,0x17,0x14,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x4,0xbe,0xa4,0xa4,0xa4,0xa4,0xbc,0xa4,
++0x10,0x10,0x3e,0x48,0x8,0x7e,0x14,0x22,0x41,0x1,0xff,0x3,0x5,0x39,0xc1,0x1,0x8,0xfc,0x80,0xf8,0x88,0xf8,0x80,0xfc,0x0,0x4,0xfe,0x80,0x40,0x30,0xe,0x0,
++0x10,0x10,0x17,0x11,0xf9,0x17,0x31,0x3b,0x53,0x55,0x95,0x19,0x11,0x11,0x11,0x11,0x10,0xd0,0x10,0x10,0x54,0xd4,0x38,0x90,0x50,0x28,0x28,0x28,0x28,0x44,0x82,0x0,
++0x10,0x10,0x13,0x12,0xfe,0x13,0x32,0x3a,0x57,0x52,0x92,0x13,0x1e,0x12,0x12,0x13,0x40,0xbc,0x24,0x24,0x24,0xa6,0x40,0x3c,0x84,0x24,0x28,0xa8,0x10,0x28,0x46,0x84,
++0x10,0x14,0x12,0x12,0xfc,0x10,0x36,0x3a,0x56,0x52,0x92,0x12,0x12,0x15,0x18,0x10,0x20,0x44,0xfe,0x84,0x84,0xfc,0x80,0xfc,0x84,0x84,0x84,0xfc,0x80,0x6,0xfc,0x0,
++0x10,0x10,0x17,0x10,0xfd,0x10,0x37,0x38,0x54,0x57,0x90,0x11,0x12,0x14,0x11,0x10,0x80,0x48,0xfc,0x0,0x10,0xa4,0xfe,0x40,0x48,0xfc,0x40,0x50,0x4c,0x44,0x40,0x80,
++0x10,0x14,0x12,0x14,0xfc,0x15,0x35,0x3d,0x55,0x54,0x95,0x15,0x15,0x15,0x14,0x14,0x0,0x4,0xfe,0x4,0x4,0xf4,0x14,0x14,0xf4,0x4,0xf4,0x14,0x14,0xf4,0x14,0x8,
++0x11,0x10,0x13,0x10,0xfc,0x13,0x30,0x38,0x57,0x50,0x91,0x12,0x14,0x18,0x13,0x10,0x8,0x90,0xfc,0x40,0x50,0xf8,0x40,0x44,0xfe,0x80,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x14,0x12,0x10,0xfc,0x17,0x30,0x39,0x56,0x55,0x98,0x13,0x10,0x10,0x10,0x10,0x80,0x44,0x48,0x10,0x4,0xfe,0xa0,0x10,0x48,0xf6,0x40,0xf8,0x40,0x40,0x40,0x40,
++0x10,0x14,0x17,0x14,0xf8,0x13,0x30,0x3b,0x56,0x53,0x92,0x13,0x12,0x10,0x1f,0x10,0x80,0x40,0xfe,0x2,0x14,0xf8,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x0,0xfe,0x0,
++0x10,0x13,0x12,0x12,0xff,0x12,0x32,0x3a,0x56,0x52,0x92,0x12,0x14,0x14,0x18,0x10,0x4,0xfe,0x24,0x24,0xfc,0x0,0xfc,0x84,0x84,0xfc,0x84,0xfc,0x84,0x84,0xfc,0x84,
++0x10,0x17,0x11,0x11,0xfd,0x12,0x3a,0x35,0x54,0x5b,0x92,0x12,0x12,0x12,0x1f,0x10,0x0,0xf8,0x10,0x1c,0xe4,0xa4,0x44,0xb4,0x8,0xfc,0xa8,0xa8,0xa8,0xa8,0xfe,0x0,
++0x10,0x10,0x17,0x10,0xff,0x10,0x37,0x39,0x52,0x55,0x98,0x17,0x10,0x11,0x16,0x10,0x40,0x48,0xfc,0x40,0xf8,0x80,0xfe,0x10,0x38,0xce,0x44,0xfc,0xe0,0x58,0x44,0x40,
++0x10,0x13,0x12,0x12,0xff,0x12,0x32,0x3b,0x56,0x52,0x93,0x12,0x12,0x12,0x13,0x10,0x8,0xfc,0x50,0x50,0xdc,0x50,0x50,0xdc,0x50,0x50,0xdc,0x50,0x50,0x54,0xfe,0x0,
++0x10,0x13,0x12,0x13,0xfe,0x13,0x38,0x37,0x50,0x54,0x92,0x11,0x16,0x10,0x12,0x11,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x4,0xbe,0x84,0xa4,0x94,0x8c,0xb4,0x84,0x94,0x8,
++0x11,0x11,0x11,0xfa,0x17,0x32,0x3b,0x56,0x53,0x92,0x10,0x17,0x10,0x10,0x10,0x10,0x40,0x24,0xfe,0x20,0xfc,0x20,0xfc,0x20,0xfe,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x10,0x11,0x13,0x12,0xff,0x12,0x3b,0x36,0x52,0x57,0x90,0x11,0x12,0x14,0x11,0x10,0x84,0x4,0xc4,0x44,0xc4,0x7e,0xc4,0x64,0x54,0xd4,0xc4,0x44,0x44,0x44,0x54,0x88,
++0x10,0x10,0x13,0x12,0xff,0x12,0x33,0x38,0x57,0x51,0x92,0x14,0x1b,0x10,0x10,0x10,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x80,0xfe,0x10,0x48,0x46,0xf8,0x40,0x40,0x40,
++0x10,0x10,0x17,0x10,0xfd,0x11,0x37,0x39,0x55,0x50,0x91,0x13,0x15,0x19,0x11,0x11,0x40,0x24,0xfe,0x0,0xf8,0x8,0xfe,0x8,0xf8,0x84,0x48,0x30,0x10,0x4e,0x84,0x0,
++0x10,0x10,0x17,0x10,0xfb,0x12,0x33,0x38,0x57,0x54,0x95,0x15,0x15,0x15,0x14,0x14,0x80,0x44,0xfe,0x0,0xf8,0x8,0xf8,0x0,0xfc,0x4,0xf4,0x14,0x14,0xf4,0x14,0x8,
++0x22,0x14,0xff,0x8,0x49,0x49,0x7f,0x8,0x11,0x21,0xff,0x3,0xd,0x31,0xc1,0x1,0x4,0x7e,0xc4,0x7c,0x44,0x7c,0x44,0x94,0x8,0x0,0xfe,0x80,0x40,0x30,0xe,0x0,
++0x10,0x10,0x17,0x14,0xf8,0x11,0x31,0x39,0x55,0x51,0x91,0x1f,0x10,0x11,0x12,0x14,0x80,0x40,0xfe,0x2,0x34,0xc0,0x8,0xfc,0x10,0x10,0x14,0xfe,0x0,0x10,0xc,0x4,
++0x10,0x10,0x17,0x14,0xf8,0x11,0x32,0x38,0x55,0x52,0x97,0x1a,0x12,0x12,0x13,0x12,0x80,0x40,0xfe,0x2,0xa4,0x10,0x48,0xa0,0x10,0x8,0xfe,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x14,0x12,0x12,0xf8,0x16,0x33,0x3a,0x56,0x53,0x92,0x12,0x12,0x13,0x12,0x10,0x20,0x20,0x24,0xfc,0x28,0x30,0xfe,0x40,0xfc,0x44,0x44,0x7c,0xc4,0x44,0x7c,0x44,
++0x10,0x13,0x12,0x12,0xff,0x12,0x33,0x3a,0x57,0x53,0x95,0x15,0x15,0x15,0x19,0x11,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0xa8,0xfc,0x4,0xfc,0x4,0xfc,0x4,0x14,0x8,
++0x11,0x11,0x1f,0x11,0xfd,0x10,0x37,0x3c,0x57,0x50,0x97,0x10,0x13,0x10,0x1f,0x10,0x10,0x14,0xfe,0x10,0xf0,0x44,0xfe,0x44,0xfc,0x40,0xfc,0x40,0xf8,0x40,0xfe,0x0,
++0x10,0x10,0x17,0x10,0xfa,0x11,0x37,0x38,0x57,0x54,0x95,0x15,0x15,0x14,0x17,0x14,0x40,0x48,0xfc,0x40,0x48,0x50,0xfe,0x0,0xfc,0x4,0xf4,0x14,0xf4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x13,0xfe,0x12,0x32,0x3a,0x57,0x52,0x93,0x12,0x14,0x15,0x18,0x10,0x10,0x18,0x14,0xfe,0x10,0x90,0xd2,0x92,0xf4,0x94,0xd8,0xa8,0x9a,0xaa,0xc6,0x4,
++0x10,0x13,0x10,0x17,0xfd,0x14,0x31,0x38,0x57,0x50,0x9f,0x11,0x11,0x10,0x10,0x10,0x10,0xf8,0x40,0xfe,0x52,0xe4,0x50,0x40,0xfc,0x0,0xfe,0x0,0xf8,0x8,0x48,0x30,
++0x10,0x12,0x11,0x14,0xff,0x14,0x31,0x39,0x55,0x51,0x90,0x17,0x10,0x10,0x17,0x10,0x40,0x48,0x50,0x40,0xfe,0x2,0xf4,0x10,0x10,0xf0,0x40,0xfc,0x40,0x44,0xfe,0x0,
++0x44,0x29,0x10,0x2f,0x48,0x19,0x2b,0x4d,0x9,0x29,0x11,0xff,0x5,0x19,0x61,0x1,0x48,0xf0,0x54,0xfe,0x80,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x40,0x30,0xe,0x0,
++0x22,0x22,0x23,0x24,0xff,0x25,0x75,0x6f,0x65,0xa5,0x27,0x25,0x25,0x25,0x29,0x30,0x4,0x4,0xd4,0x8c,0xcc,0x64,0x54,0xd4,0x46,0x7c,0xc4,0x44,0x44,0x44,0x44,0x84,
++0x10,0x13,0x10,0x11,0xff,0x12,0x32,0x3b,0x56,0x53,0x92,0x12,0x17,0x10,0x10,0x10,0x8,0xc8,0x88,0x10,0xfe,0x64,0x54,0xd4,0x54,0xd4,0x48,0x68,0xc8,0x54,0x52,0x60,
++0x22,0x22,0x22,0x2f,0xf2,0x22,0x7f,0x6a,0xa2,0x2b,0x2a,0x2a,0x2e,0x2a,0x31,0x20,0x10,0x18,0x14,0x94,0x7e,0x50,0xd0,0x54,0x54,0xc8,0x6a,0x56,0x20,0x6,0xfc,0x0,
++0x14,0xff,0x14,0x3f,0x41,0xbd,0x25,0x3d,0x2,0x1,0xff,0x3,0xd,0x31,0xc1,0x1,0x20,0x24,0x3e,0x44,0xa4,0x28,0x10,0x28,0x46,0x0,0xfe,0x80,0x40,0x30,0xe,0x0,
++0x1,0x3f,0x9,0x7f,0x40,0x9f,0x8,0x1f,0x68,0xf,0x1,0xff,0x5,0x19,0x61,0x1,0x0,0xf8,0x20,0xfe,0x2,0xf4,0x0,0xf0,0x10,0xf0,0x4,0xfe,0x40,0x30,0xe,0x0,
++0x20,0x20,0x2f,0x28,0xfa,0x29,0x6f,0x78,0x6a,0xaa,0x2b,0x28,0x28,0x28,0x29,0x32,0x0,0x4,0xfe,0x8,0x28,0x48,0xee,0x92,0xa4,0xa8,0xe8,0xa8,0x88,0x94,0x14,0x22,
++0x10,0x10,0x10,0x11,0xfd,0x13,0x35,0x39,0x55,0x51,0x91,0x11,0x11,0x12,0x12,0x14,0xa0,0x90,0x84,0xfe,0x10,0x10,0xfc,0x10,0xfc,0x10,0x14,0xfe,0x0,0xa8,0xa6,0x2,
++0x10,0x10,0x11,0x12,0xfd,0x10,0x3a,0x36,0x53,0x50,0x97,0x14,0x14,0x15,0x14,0x14,0x40,0xa0,0x10,0x48,0xf6,0xa0,0x48,0xa8,0xf8,0x44,0xfe,0x44,0xa4,0xf4,0x14,0x8,
++0x11,0x11,0x12,0x17,0xfc,0x17,0x3c,0x37,0x50,0x5f,0x90,0x13,0x12,0x13,0x12,0x13,0x0,0xf0,0x24,0xfe,0x44,0xfc,0x44,0xfc,0x0,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,
++0x11,0x10,0x17,0x10,0xff,0x12,0x33,0x3a,0x56,0x52,0x93,0x10,0x1f,0x12,0x11,0x10,0x10,0xa0,0xfc,0xa0,0xf8,0xa8,0x38,0x8,0xe8,0x8,0xf8,0x10,0xfe,0x10,0x50,0x20,
++0x10,0x13,0x12,0x13,0xfe,0x13,0x32,0x3b,0x56,0x52,0x92,0x12,0x13,0x14,0x18,0x10,0x4,0xfe,0x4,0xfc,0x20,0xac,0x70,0xac,0x20,0xa8,0xfc,0x20,0xfe,0x20,0x20,0x20,
++0x10,0x13,0x10,0x10,0xff,0x10,0x33,0x38,0x57,0x54,0x95,0x17,0x15,0x15,0x14,0x14,0x0,0xf8,0x90,0x60,0xfe,0xc4,0x48,0x44,0xfe,0xa4,0x14,0xfc,0x14,0xf4,0x14,0x8,
++0x20,0x22,0x22,0x22,0xf4,0x2f,0x32,0x6c,0x64,0xaf,0x20,0x23,0x2c,0x20,0x21,0x20,0x40,0x78,0x48,0x48,0xf8,0x8,0xfe,0x20,0x54,0xb8,0x50,0xb8,0x54,0x92,0x10,0x30,
++0x10,0x13,0x10,0x17,0xfd,0x14,0x31,0x38,0x57,0x52,0x92,0x13,0x12,0x12,0x13,0x12,0x10,0xf8,0x40,0xfe,0x52,0xe4,0x50,0x40,0xf8,0x48,0x48,0xf8,0x48,0x48,0xf8,0x8,
++0x10,0x10,0x11,0x13,0xfe,0x13,0x33,0x3a,0x56,0x52,0x92,0x12,0x14,0x14,0x18,0x10,0x80,0xf8,0x10,0xfe,0x88,0x24,0xfe,0x0,0xfc,0x0,0xfc,0x0,0xfc,0x84,0xfc,0x84,
++0x10,0x1f,0x10,0x17,0xfd,0x15,0x35,0x3f,0x50,0x53,0x90,0x1f,0x11,0x12,0x15,0x10,0x40,0xfe,0x0,0xfc,0x14,0xf4,0x14,0xfc,0x0,0xf8,0x0,0xfe,0x50,0x4c,0x44,0x80,
++0x0,0x3e,0x23,0x3e,0x20,0x3f,0x62,0xa2,0x3e,0x1,0xff,0x3,0xd,0x31,0xc1,0x1,0x20,0x28,0xfc,0x88,0x50,0xfe,0x20,0xf8,0x20,0x24,0xfe,0x80,0x40,0x30,0xe,0x0,
++0x10,0x14,0x17,0x15,0xf9,0x12,0x35,0x3b,0x52,0x54,0x9b,0x10,0x11,0x12,0x14,0x10,0x80,0x40,0xfe,0x2,0xbc,0xa8,0xb0,0x10,0xe8,0x6,0xf8,0x40,0x50,0x4c,0x44,0xc0,
++0x0,0x22,0x14,0xff,0x14,0x7f,0x55,0x55,0x67,0x41,0x7f,0x41,0x41,0x7f,0x40,0x1,0x20,0x28,0x24,0xa4,0x20,0xfe,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x8e,0x4,
++0x8,0x7f,0x8,0x3e,0x8,0x7f,0x10,0x1e,0x22,0x4a,0x5,0xff,0x1,0x2,0xc,0x70,0x40,0x44,0x7e,0x48,0x88,0x28,0x10,0x28,0x46,0x90,0x8,0xfe,0x0,0x80,0x70,0xe,
++0x0,0x4,0xfe,0x20,0x20,0x3d,0x26,0x45,0x64,0x98,0x8,0x10,0x10,0x20,0x41,0x6,0x8,0xfc,0x88,0x88,0x88,0xe,0x0,0xf8,0x8,0x88,0x50,0x20,0x50,0x90,0xe,0x4,
++0x0,0x5,0xff,0x21,0x21,0x3d,0x25,0x45,0x65,0x99,0x9,0x11,0x11,0x21,0x47,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0xf8,0x8,0x8,0x8,0x8,0xfe,0x0,
++0x0,0x4,0xfe,0x21,0x22,0x3c,0x24,0x45,0x64,0x98,0x9,0x11,0x12,0x24,0x41,0x0,0x80,0x84,0xfe,0x0,0xf8,0x10,0x24,0xfe,0x94,0x94,0x24,0x24,0x44,0x84,0x28,0x10,
++0x0,0x4,0xfe,0x20,0x21,0x3e,0x24,0x44,0x67,0x98,0x8,0x11,0x10,0x20,0x41,0x6,0x40,0x40,0xa0,0xa0,0x18,0x26,0x40,0x88,0x10,0x20,0x44,0x88,0x10,0x60,0x80,0x0,
++0x0,0x5,0xff,0x21,0x21,0x3c,0x25,0x45,0x65,0x99,0x9,0x11,0x11,0x20,0x40,0x3,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x4,0x24,0x24,0x24,0x24,0x24,0x50,0x8c,0x4,
++0x0,0x4,0xfe,0x20,0x21,0x3e,0x25,0x44,0x64,0x99,0x9,0x11,0x11,0x20,0x47,0x0,0x20,0x20,0x50,0x88,0x4,0xa,0xfc,0x0,0x44,0x24,0x24,0x28,0x28,0x10,0xfe,0x0,
++0x0,0x5,0xfe,0x21,0x20,0x3c,0x25,0x44,0x64,0x98,0xb,0x10,0x10,0x20,0x40,0x0,0x1c,0xe0,0x0,0x24,0xa8,0x0,0xfc,0x8,0x30,0x24,0xfe,0x20,0x20,0x20,0xa0,0x40,
++0x1,0x4,0xfe,0x21,0x21,0x3d,0x25,0x45,0x65,0x99,0x8,0x10,0x13,0x20,0x40,0x0,0x4,0x88,0x10,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,
++0x0,0x5,0xfe,0x20,0x20,0x3b,0x2a,0x4a,0x6a,0x9a,0xb,0x12,0x10,0x20,0x4f,0x0,0x0,0xfc,0x8,0x10,0x20,0xbe,0xa2,0xb4,0xb4,0xa8,0xb6,0x22,0xa0,0x44,0xfe,0x0,
++0x0,0x4,0xff,0x22,0x24,0x3d,0x25,0x45,0x65,0x99,0x9,0x17,0x10,0x21,0x42,0x4,0x80,0x40,0xfe,0x2,0x34,0xc0,0x8,0xfc,0x10,0x10,0x14,0xfe,0x0,0x10,0xc,0x4,
++0x0,0xb,0xfc,0x21,0x20,0x3b,0x2a,0x4d,0x68,0x99,0x9,0x11,0x10,0x20,0x47,0x0,0x20,0xfe,0x20,0xfc,0x0,0xfe,0x2,0xfc,0x0,0xfc,0x4,0xfc,0x88,0x50,0xfe,0x0,
++0x10,0x10,0x15,0xfe,0x20,0x28,0x48,0x7e,0x9,0x8,0xe,0xf8,0x48,0x8,0x9,0x8,0x0,0x4,0xfe,0x24,0x24,0xa4,0xa4,0xa4,0x24,0x24,0x24,0x44,0x44,0x84,0x28,0x10,
++0x20,0x21,0x29,0xfd,0x41,0x51,0x91,0xfd,0x11,0x11,0x1d,0xf2,0x52,0x14,0x18,0x10,0x4,0xfe,0x0,0x0,0x4,0x7e,0x44,0x44,0x44,0x54,0x48,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x10,0x14,0xfe,0x23,0x28,0x48,0x7e,0x9,0x9,0xf,0xf9,0x49,0x9,0x9,0x9,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x15,0xfe,0x20,0x29,0x49,0x7f,0x9,0x9,0xf,0xf9,0x48,0x8,0x8,0x8,0x0,0x4,0xfe,0x8,0x8,0xe8,0x28,0x28,0x28,0x28,0xe8,0x28,0x8,0x8,0x28,0x10,
++0x10,0x10,0x14,0xfe,0x20,0x29,0x49,0x7f,0x9,0x9,0xf,0xf9,0x49,0xa,0xa,0xc,0x20,0x24,0x3e,0x20,0x24,0xfe,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x10,0x14,0xfe,0x20,0x28,0x48,0x7e,0x8,0x8,0xe,0xf8,0x48,0x8,0x9,0xa,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,0x0,0x48,0x48,0x84,0x6,0x2,
++0x10,0x10,0x14,0xfe,0x20,0x29,0x48,0x7e,0x9,0x8,0xe,0xf8,0x48,0x8,0x8,0xb,0x20,0xa0,0xa0,0xa8,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x50,0x50,0x88,0x8e,0x4,
++0x20,0x20,0x28,0xfc,0x41,0x52,0x94,0xfc,0x11,0x10,0x18,0xf1,0x50,0x10,0x11,0x16,0x40,0x40,0xa0,0xa0,0x18,0x26,0x40,0x80,0x10,0x20,0x40,0x88,0x10,0x60,0x80,0x0,
++0x10,0x10,0x15,0xfe,0x20,0x29,0x48,0x7e,0x8,0x9,0xe,0xf8,0x48,0x8,0x8,0x8,0x8,0x1c,0xe0,0x20,0x24,0x24,0xa8,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x10,0x15,0xff,0x21,0x29,0x49,0x7f,0x9,0x8,0xe,0xf8,0x49,0xa,0x8,0x8,0x8,0x1c,0xe0,0x0,0x20,0x20,0x20,0x24,0xfe,0x20,0xa8,0xa4,0x26,0x22,0xa0,0x40,
++0x10,0x11,0x14,0xfe,0x20,0x28,0x48,0x7e,0x9,0x8,0xe,0xf8,0x48,0x8,0x8,0x8,0x4,0xfe,0x44,0x44,0x44,0x44,0x94,0x88,0x4,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x10,0x10,0x14,0xfe,0x21,0x28,0x48,0x7d,0x8,0x8,0xe,0xf8,0x4b,0x8,0x8,0x8,0x10,0x18,0x14,0x14,0xfe,0x10,0x10,0xf0,0x90,0x90,0x90,0xf0,0x88,0xa,0x6,0x2,
++0x10,0x13,0x14,0xfe,0x20,0x29,0x49,0x7e,0x8,0x8,0xf,0xf8,0x48,0x8,0xb,0x8,0x4,0xfe,0x40,0x40,0x88,0x4,0xfe,0x22,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x14,0xfe,0x20,0x29,0x4a,0x7e,0x8,0x8,0xe,0xf8,0x48,0x8,0xb,0x8,0x20,0x20,0x50,0x50,0x88,0x4,0xfa,0x20,0x20,0x20,0xf8,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x14,0xff,0x21,0x2a,0x48,0x7e,0x8,0x9,0xf,0xf9,0x49,0x9,0x9,0x9,0x80,0x80,0xfc,0x4,0x88,0x50,0x20,0x50,0x88,0x6,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x13,0x15,0xff,0x21,0x29,0x49,0x7f,0x9,0x9,0xf,0xf9,0x4b,0x9,0x8,0x8,0x4,0xfe,0x20,0x28,0xe8,0x28,0x28,0x28,0xe8,0x28,0x28,0x3a,0xea,0x2e,0x20,0x20,
++0x8,0x8,0x7e,0x8,0x7e,0x14,0x22,0x42,0x3f,0x5,0x9,0x1f,0x1,0xff,0x1,0x1,0x20,0x20,0xfc,0x20,0xfc,0x50,0x88,0x6,0xf8,0x0,0x20,0xf0,0x4,0xfe,0x0,0x0,
++0x20,0x20,0x2b,0xfe,0x42,0x52,0x93,0xfe,0x12,0x13,0x1e,0xf2,0x52,0x12,0x12,0x12,0x0,0x4,0xfe,0x4,0x94,0x94,0xfc,0x44,0x24,0xfc,0x84,0x84,0xf4,0x4,0x14,0x8,
++0x20,0x2f,0x24,0xfd,0x42,0x55,0x90,0xf8,0x17,0x10,0x18,0xf5,0x52,0x15,0x18,0x10,0x0,0xfc,0xa4,0x28,0x10,0x28,0xc4,0x0,0xbc,0x84,0xc4,0x28,0x10,0x28,0xce,0x84,
++0x20,0x21,0x29,0xfe,0x42,0x51,0x91,0xfc,0x11,0x11,0x1d,0xf1,0x51,0x11,0x11,0x11,0x0,0x24,0x24,0x48,0x48,0x24,0x24,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,
++0x10,0x10,0x13,0xfe,0x21,0x28,0x4b,0x7e,0x8,0x9,0xe,0xf9,0x48,0x8,0x8,0xb,0x20,0x24,0xfe,0x20,0xfc,0x20,0xfe,0x50,0x88,0xfc,0x22,0xfc,0x20,0x58,0x86,0x2,
++0x20,0x20,0x2b,0xfe,0x42,0x53,0x92,0xfe,0x13,0x12,0x1e,0xf2,0x52,0x12,0x14,0x10,0x40,0x24,0xfe,0x50,0x54,0xfe,0x54,0x54,0xfc,0x92,0x94,0xf8,0x90,0xb2,0xd2,0x8e,
++0x20,0x22,0x29,0xff,0x41,0x52,0x94,0xfa,0x13,0x12,0x1a,0xf5,0x51,0x11,0x12,0x14,0x40,0x48,0x50,0xfe,0x50,0x4c,0x44,0x8,0xbe,0x88,0xa8,0xa8,0x3e,0x8,0x8,0x8,
++0x1,0x7f,0x1,0x3f,0x21,0x3f,0x21,0x3f,0x1,0xff,0x1,0x1f,0x10,0x10,0x1f,0x10,0x0,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x4,0x4,0x4,0x4,0x7f,0x4,0x2,0x2,0xff,0x1,0x1,0x0,0x1,0x6,0x38,0x0,0x0,0x80,0x48,0xfc,0x0,0x0,0x4,0xfe,0x0,0x10,0x20,0xc0,0x80,0x44,0x24,0x1c,
++0x8,0x8,0x14,0x13,0x21,0x40,0xbf,0x22,0x22,0x2a,0x24,0x20,0x22,0x22,0x1e,0x0,0x40,0x50,0x48,0x48,0x40,0x7e,0xc0,0x24,0x24,0x28,0x28,0x10,0x12,0x2a,0x4a,0x84,
++0x0,0x7f,0x1,0xf,0x8,0xf,0x8,0xf,0x8,0xf,0x1,0xff,0x1,0x0,0x7,0x38,0x8,0xfc,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x44,0xfe,0x20,0xc4,0x44,0x3c,
++0x8,0x9,0xff,0x8,0x9,0x7f,0x41,0x7f,0x41,0x7f,0x8,0x9,0xff,0x8,0x8,0x9,0x20,0x28,0xa4,0x24,0x20,0xfe,0x20,0x20,0x24,0x24,0x28,0x10,0xb2,0x4a,0x8a,0x4,
++0x1,0x3f,0x21,0x3f,0x0,0xff,0x21,0x3f,0x21,0x3f,0x21,0x21,0xff,0x41,0x1,0x1,0x20,0xa8,0x24,0x24,0x20,0xfe,0x20,0x20,0x24,0x24,0x28,0x10,0xb2,0x4a,0x8a,0x4,
++0x22,0x22,0xff,0x22,0x3e,0x22,0x3e,0x22,0x22,0xff,0x54,0x53,0x61,0x40,0x7f,0x1,0x20,0x28,0xa4,0x24,0x20,0xfe,0x20,0x20,0x24,0xa4,0x28,0x10,0x32,0x4a,0x8a,0x4,
++0x1,0x7f,0x41,0x7f,0x41,0x7f,0x28,0x2a,0x3f,0x48,0xbe,0x8,0xf,0xf8,0x40,0x1,0x20,0xa8,0x24,0x24,0x20,0xfe,0x20,0x20,0x24,0x24,0x28,0x10,0x32,0x4a,0x8a,0x4,
++0x1,0xff,0x21,0x22,0x3d,0x55,0x49,0x55,0x82,0x7f,0x55,0x55,0x55,0xff,0x0,0x1,0x20,0xa8,0x24,0x24,0x20,0xfe,0x20,0x20,0x24,0x24,0x28,0x10,0x32,0xca,0x8a,0x4,
++0x2,0x7f,0x14,0x55,0x36,0x14,0xff,0x0,0x3e,0x22,0x22,0x3e,0x22,0x22,0x3e,0x1,0x20,0x28,0x24,0x24,0x20,0xfe,0x20,0x20,0x24,0x24,0x28,0x10,0x32,0x4a,0x8a,0x4,
++0x0,0x0,0x1f,0x50,0x57,0x55,0x75,0x17,0xf4,0x54,0x57,0x95,0x25,0x27,0x40,0x80,0x28,0x24,0xfe,0x20,0xa0,0x20,0x24,0xa4,0xa8,0xa8,0x90,0x10,0x12,0xaa,0x4a,0x84,
++0x0,0x3,0x7e,0x40,0x62,0x52,0x54,0x48,0x48,0x54,0x52,0x62,0x40,0x44,0x7e,0x0,0x4,0xfe,0x80,0x88,0xfc,0x88,0xc8,0xa8,0xa8,0x88,0x88,0x88,0xaa,0xca,0x86,0x2,
++0x8,0xb,0x14,0x14,0x22,0x51,0x88,0x0,0x7e,0x2,0x24,0x14,0x8,0x4,0x4,0x0,0x4,0xfe,0x80,0x88,0xfc,0x88,0xc8,0xa8,0xa8,0x88,0x88,0x88,0xaa,0xca,0x86,0x2,
++0x40,0x23,0xfe,0x0,0x44,0x28,0xfe,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0x7c,0x44,0x4,0xfe,0x80,0x88,0xfc,0x88,0xc8,0xa8,0xa8,0x88,0x88,0x88,0xaa,0xca,0x86,0x2,
++0x8,0x7f,0x8,0x7f,0x22,0x3e,0x14,0x7f,0x0,0xff,0x8,0xf,0x9,0x8,0xe,0x10,0x4,0x8,0x74,0x8,0x74,0x8,0x10,0x60,0x4,0xfe,0x0,0xe0,0x20,0xa4,0x24,0x1c,
++0x44,0x29,0xfe,0x92,0xd6,0xba,0x92,0xfe,0x4,0x7e,0x44,0x7c,0x44,0x44,0x7c,0x0,0x4,0xfe,0x80,0x88,0xfc,0x88,0xc8,0xa8,0xa8,0x88,0x88,0x88,0xaa,0xca,0x86,0x2,
++0x0,0x7f,0x42,0x7e,0x41,0x7e,0x62,0xbe,0x0,0xff,0x8,0xf,0x9,0x8,0xe,0x10,0x20,0xfc,0x88,0x50,0xfe,0x0,0xf8,0x20,0x24,0xfe,0x0,0xe0,0x20,0xa4,0x24,0x1c,
++0x1,0x1,0x1,0x1,0x1,0x3f,0x0,0x8,0x8,0x4,0x2,0x1,0x2,0xc,0x30,0xc0,0x0,0x8,0xfc,0x0,0x0,0xf0,0x10,0x20,0x20,0x40,0x80,0x0,0xc0,0x30,0xe,0x4,
++0x2,0x2,0x7f,0x4,0x4,0x8,0x10,0x20,0xdf,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0x20,0xf0,0x20,0x20,0x22,0x22,0x1e,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x2,0x2,0x7f,0x4,0x4,0x8,0x10,0x60,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x0,0x20,0xf0,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x4,0x7f,0x44,0x44,0x44,0x44,0x7c,0x47,0x44,0x44,0x44,0x7c,0x44,0x0,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x1f,0x10,0x1f,0x10,0x1f,0x0,0x3f,0x1,0x1,0xff,0x1,0x2,0x4,0x18,0x60,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0xf8,0x0,0x4,0xfe,0x0,0x80,0x60,0x1c,0x8,
++0x0,0x1f,0x10,0x1f,0x10,0x1f,0x0,0x3f,0x0,0x0,0xff,0x2,0x4,0x8,0x1f,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0xf8,0x0,0x4,0xfe,0x0,0x40,0x20,0xf0,0x10,
++0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x1,0x1,0xff,0x3,0x5,0x19,0x61,0x1,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x0,0x4,0xfe,0x80,0x60,0x1c,0x8,0x0,
++0x0,0x1f,0x10,0x1f,0x10,0x1f,0x0,0x3f,0x20,0x20,0x21,0x21,0x42,0x44,0x88,0x10,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x80,0x80,0x40,0x40,0x20,0x10,0xe,0x4,
++0x0,0x4,0x7f,0x45,0x45,0x45,0x45,0x7d,0x45,0x45,0x45,0x45,0x7d,0x41,0x2,0x4,0x8,0x1c,0xe0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x0,0x4,0x7e,0x44,0x45,0x46,0x44,0x7c,0x44,0x44,0x45,0x44,0x7c,0x44,0x0,0x0,0x80,0x80,0x84,0xfe,0x4,0x84,0x44,0x44,0x14,0x64,0x84,0x4,0x4,0x44,0x28,0x10,
++0x0,0x1f,0x10,0x1f,0x10,0x1f,0x1,0x1,0x9,0xa,0x12,0x24,0x4,0x8,0x10,0x60,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0x8,0x18,0xa0,0xc0,0x40,0x20,0x10,0xe,0x4,
++0x0,0x1f,0x10,0x1f,0x10,0x1f,0x8,0x1f,0x21,0x61,0xa2,0x24,0x20,0x3f,0x0,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x4,0x4,0xc4,0x44,0x4,0xc4,0x28,0x10,
++0x10,0x1e,0x22,0x34,0x48,0x16,0x21,0x40,0x9f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x40,0x40,0x60,0x58,0x40,0x46,0xfc,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x0,0x3f,0x20,0x3f,0x20,0x3f,0x4,0x78,0x42,0x42,0x4e,0x72,0x2,0x4,0x18,0x60,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x84,0x84,0x84,0xa4,0x98,0x80,0x80,0x80,
++0x0,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x2,0x1,0x7f,0x8,0x4,0x4,0xff,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x0,0x8,0xfc,0x20,0x20,0x44,0xfe,0x0,
++0x10,0xc,0x0,0x3c,0x4,0x5,0x7e,0x16,0x15,0x15,0x24,0x24,0x44,0x84,0x14,0x8,0x0,0x4,0x7e,0x44,0xc4,0x44,0x7c,0x44,0x44,0x44,0xfc,0x84,0x40,0x30,0xe,0x4,
++0x0,0x5,0x7f,0x45,0x45,0x45,0x45,0x7d,0x45,0x45,0x45,0x45,0x7e,0x42,0x4,0x8,0x4,0xfe,0x4,0x4,0xfc,0x4,0x40,0x44,0x4c,0x50,0x60,0x40,0x42,0x42,0x3e,0x0,
++0x2,0x3f,0x2,0xff,0x1,0xa,0xf,0x38,0xc7,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0xe0,0x44,0xfe,0x0,0x70,0x84,0x4,0xfc,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,
++0x0,0x3f,0x20,0x3f,0x20,0x3f,0x0,0x3f,0x20,0x3e,0x22,0x22,0x2a,0x44,0x41,0x80,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x90,0xfc,0x80,0x88,0x50,0x60,0x40,0xa2,0x12,0xe,
++0x0,0x8,0x7d,0x49,0x4b,0x4d,0x49,0x79,0x49,0x48,0x4f,0x48,0x78,0x48,0x0,0x0,0xa0,0xa4,0x2c,0x30,0x20,0x62,0xa2,0x1e,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x0,0x3f,0x20,0x3f,0x20,0x3f,0x2,0x22,0x12,0x16,0xa,0x72,0x2,0x4,0x18,0x60,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x80,0x90,0xa0,0xc0,0xa0,0x98,0x8a,0x82,0x7e,0x0,
++0x0,0x1f,0x10,0x1f,0x10,0x1f,0x1,0x3f,0x22,0x42,0xff,0x4,0xc,0x3,0x4,0x18,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0xfc,0x4,0x8,0xfe,0x20,0x40,0x80,0x60,0x10,
++0x0,0x3,0x7a,0x4a,0x48,0x4b,0x48,0x79,0x4b,0x48,0x48,0x4b,0x78,0x48,0x0,0x0,0x0,0xfe,0x2,0x44,0x40,0xfc,0x80,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x0,0x78,0x4f,0x48,0x4b,0x4a,0x7a,0x4b,0x4a,0x4a,0x4b,0x7a,0x4a,0x2,0x2,0x50,0x48,0x40,0xfe,0x48,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x48,0x48,0x68,0x50,
++0x0,0x8,0x7c,0x48,0x49,0x4a,0x4c,0x7b,0x48,0x48,0x4b,0x4a,0x7a,0x4a,0x3,0x2,0x40,0x40,0xa0,0xa0,0x90,0x4e,0x4,0xf0,0x20,0x48,0xfc,0x8,0x8,0x8,0xf8,0x8,
++0x1f,0x10,0x1f,0x10,0x1f,0x8,0x1f,0x22,0xd4,0x8,0x37,0xc0,0x1f,0x10,0x10,0x1f,0xf0,0x10,0xf0,0x10,0xf0,0x40,0x60,0x58,0x40,0x46,0xfc,0x8,0xfc,0x8,0x8,0xf8,
++0x0,0x8,0x7f,0x4c,0x4b,0x48,0x4b,0x7a,0x4a,0x4b,0x4a,0x4a,0x7b,0x40,0xf,0x0,0x80,0x40,0xfe,0x2,0xfc,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xfe,0x0,
++0x0,0xb,0x7c,0x4a,0x49,0x49,0x4a,0x7d,0x48,0x48,0x4f,0x48,0x78,0x49,0x2,0x4,0x20,0xa8,0xb4,0xa8,0x10,0x10,0xe,0xf4,0x40,0x44,0xfe,0x40,0xa0,0x10,0xc,0x4,
++0x0,0xb,0x7d,0x48,0x4f,0x4c,0x48,0x7b,0x48,0x48,0x49,0x49,0x7a,0x4c,0x1,0x6,0x1c,0xe0,0x24,0xa8,0xfe,0x42,0x44,0xfe,0x80,0xf8,0x8,0x50,0x20,0x50,0x8e,0x4,
++0x0,0x3,0x7a,0x4c,0x4b,0x4a,0x4b,0x7a,0x4b,0x48,0x48,0x4f,0x78,0x49,0x2,0x4,0x0,0xfc,0x4,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x80,0x44,0xfe,0x0,0x10,0xc,0x4,
++0x2,0x11,0x7f,0x50,0x57,0x54,0x54,0x77,0x50,0x5f,0x50,0x51,0x7f,0x51,0x5,0x2,0x10,0x10,0xd4,0x1e,0xa4,0xc4,0xa4,0xa4,0x24,0xa8,0x90,0x50,0xa8,0x28,0x44,0x82,
++0x0,0x7,0x70,0x5f,0x50,0x57,0x55,0x75,0x57,0x50,0x57,0x50,0x7f,0x55,0x4,0x8,0x1c,0xe0,0x44,0xfe,0x40,0xfc,0x54,0x54,0xfc,0x40,0xfc,0x40,0xfe,0x24,0x92,0x92,
++0x0,0x7,0x78,0x4a,0x49,0x4a,0x48,0x79,0x49,0x4b,0x4d,0x49,0x79,0x49,0x1,0x1,0x84,0xbe,0x84,0x94,0x8c,0x94,0xa4,0x10,0xfe,0x10,0xfc,0x10,0xfc,0x10,0xfe,0x0,
++0x1,0x7,0x78,0x4b,0x48,0x4f,0x48,0x7b,0x49,0x4f,0x4d,0x4f,0x7a,0x4b,0x0,0x1,0x10,0xfc,0x40,0xf8,0x40,0xfc,0x10,0xd8,0x14,0xfe,0x10,0x94,0x8,0x9a,0xaa,0x84,
++0x3f,0x20,0x3f,0x20,0x3f,0x1,0xff,0x4,0x3f,0x4,0x3f,0x4,0x7f,0xd,0x74,0x6,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfe,0x40,0xf8,0x40,0xf8,0x40,0xfc,0x10,0xe0,0x1e,
++0x1,0x1,0x3f,0x1,0x8,0xff,0x8,0x8,0x1f,0x10,0x11,0x11,0x11,0x2,0x4,0x38,0x0,0x10,0xf8,0x0,0x24,0xfe,0x20,0x20,0xf0,0x10,0x10,0x10,0x10,0xc0,0x20,0x18,
++0x12,0x12,0xff,0x12,0x13,0x10,0x1f,0x0,0x1f,0x10,0x11,0x11,0x11,0x2,0x4,0x38,0x20,0x24,0xfe,0x20,0xe0,0x0,0xf8,0x0,0xf0,0x10,0x10,0x10,0x10,0xc0,0x20,0x18,
++0x0,0x7d,0x45,0x55,0x55,0x55,0x55,0x55,0x54,0x54,0x54,0x10,0x28,0x25,0x42,0x84,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x90,0x90,0x90,0x90,0x92,0x12,0x12,0x1e,
++0x4,0x7e,0x44,0x54,0x55,0x57,0x54,0x54,0x55,0x55,0x55,0x11,0x29,0x25,0x45,0x81,0x20,0x20,0x40,0x88,0x4,0xfe,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0xfd,0x10,0x1d,0xf0,0x11,0x62,0x1f,0x10,0x11,0x11,0x11,0x2,0xc,0x30,0x40,0x48,0xfc,0x48,0xc8,0xa8,0xa,0x6,0xf0,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x8,0x8,0x2e,0x28,0x28,0x2e,0xf0,0x0,0x1f,0x10,0x11,0x11,0x11,0x2,0x4,0x38,0x80,0x84,0x98,0xe0,0x82,0x82,0x7e,0x10,0xf8,0x10,0x10,0x10,0x10,0xc0,0x30,0x8,
++0x4,0x7e,0x44,0x57,0x54,0x54,0x54,0x55,0x54,0x54,0x54,0x11,0x28,0x24,0x44,0x81,0x40,0x20,0x4,0xfe,0x40,0x44,0x88,0xf4,0x24,0x48,0x88,0x10,0x28,0x44,0x82,0x2,
++0x4,0x7e,0x44,0x54,0x54,0x54,0x54,0x55,0x55,0x56,0x54,0x10,0x28,0x24,0x44,0x80,0x4,0xfe,0x84,0x84,0xfc,0xa0,0x90,0x8,0x4e,0x24,0x20,0x0,0xc0,0x30,0x18,0x8,
++0x0,0x7d,0x45,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x11,0x2a,0x24,0x48,0x80,0x4,0xfe,0x0,0x0,0x7c,0x0,0x0,0xfe,0x52,0x54,0x48,0x48,0x44,0x54,0x62,0x40,
++0x1,0x1,0x7f,0x9,0x5,0xff,0x5,0x9,0x3f,0xd0,0x11,0x11,0x11,0x12,0x4,0x38,0x0,0x8,0xfc,0x20,0x44,0xfe,0x40,0x20,0xf8,0x16,0x10,0x10,0x10,0xc0,0x20,0x18,
++0x4,0x7e,0x44,0x57,0x54,0x55,0x54,0x54,0x54,0x54,0x54,0x13,0x28,0x24,0x44,0x80,0x20,0x28,0x24,0xfe,0x20,0x24,0xa8,0xb0,0x30,0x68,0xa8,0x24,0x22,0x20,0xa0,0x40,
++0x1,0x1,0x7f,0x9,0x9,0x15,0x7f,0x40,0x9f,0x10,0x11,0x11,0x11,0x2,0x4,0x38,0x0,0x8,0xfc,0x20,0x20,0x50,0xfe,0x2,0xf4,0x10,0x10,0x10,0x10,0xc0,0x20,0x18,
++0x4,0x7e,0x44,0x54,0x55,0x54,0x54,0x55,0x54,0x54,0x54,0x11,0x28,0x24,0x44,0x83,0x20,0x24,0xac,0xb0,0x20,0x50,0x4c,0xa4,0x20,0xa4,0xa8,0x30,0x50,0x48,0x8e,0x4,
++0x0,0x7c,0x47,0x54,0x55,0x55,0x55,0x55,0x55,0x55,0x54,0x13,0x29,0x24,0x44,0x80,0x30,0x28,0xfe,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x24,0x8,0xfe,0x8,0x88,0xa8,0x10,
++0x10,0x11,0x15,0x1f,0x11,0x11,0x15,0x7f,0x45,0x45,0x45,0x44,0x7c,0x44,0x1,0x6,0x4,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x34,0x50,0x50,0x92,0x12,0xe,
++0x8,0x49,0x49,0x49,0x7f,0x0,0x7f,0x1,0x1,0x3f,0x21,0x20,0x23,0x2c,0x30,0x3,0x4,0x7e,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x18,0x28,0x28,0x4a,0x8a,0x6,
++0x0,0x1,0xff,0x8,0x8,0x2a,0x2a,0x2a,0x5d,0x88,0x8,0xf,0xf8,0x40,0x0,0x3,0x4,0x7e,0xc4,0x54,0x54,0x54,0x54,0x54,0x54,0xd4,0x18,0xa8,0x28,0x4a,0x8a,0x6,
++0x8,0xa,0x7f,0x8,0x8,0xff,0x25,0x14,0x64,0x14,0xff,0x4,0x8,0xc,0x12,0x61,0x4,0x7e,0x44,0x54,0x54,0xd4,0x54,0x54,0x54,0x54,0x18,0x28,0x28,0x4a,0x8a,0x6,
++0x8,0x8,0x14,0x14,0x22,0x7f,0x80,0x71,0x55,0x75,0x55,0x75,0x51,0x55,0x52,0x3,0x4,0x7e,0x44,0x54,0x54,0x54,0xd4,0x54,0x54,0x54,0x18,0x28,0x28,0x4a,0x8a,0x6,
++0x14,0x14,0x7f,0x14,0x7f,0x14,0xff,0x8,0x7f,0x49,0x7f,0x49,0xff,0x41,0x45,0x43,0x4,0x7e,0x44,0x54,0x54,0x54,0xd4,0x54,0x54,0x54,0x18,0x28,0xa8,0x4a,0x8a,0x6,
++0x22,0x22,0xff,0x22,0x3e,0x8,0x7f,0x49,0x7f,0x8,0x7f,0x8,0x7f,0x8,0xff,0x1,0x4,0x7e,0xc4,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x18,0x28,0x28,0x4a,0x8a,0x6,
++0xa,0xf,0x8,0x7f,0x49,0x4e,0x79,0x4f,0x40,0x4a,0x6a,0x5b,0x4a,0x4a,0xbf,0x1,0x4,0x7e,0x44,0xd4,0x54,0x54,0x54,0x54,0x54,0x54,0x98,0x28,0x28,0x4a,0x8a,0x6,
++0x8,0x8,0x8,0x17,0x30,0x50,0x91,0x19,0x9,0xf,0x11,0x21,0xff,0x1,0x1,0x1,0xa0,0x94,0x9e,0xe0,0x80,0x44,0x34,0xc,0x20,0xf0,0x0,0x4,0xfe,0x0,0x0,0x0,
++0x7d,0x5,0x7d,0x44,0x41,0x7d,0x5,0x28,0x13,0x11,0x1f,0x21,0xff,0x1,0x1,0x1,0xfc,0x4,0xfc,0x20,0xfc,0x24,0xfc,0x28,0xfc,0x2,0xf8,0x0,0xfe,0x0,0x0,0x0,
++0x8,0x8,0x28,0x28,0x3e,0x48,0x48,0x88,0xe,0x18,0x68,0x8,0x8,0x8,0x8,0x8,0x80,0x80,0x80,0x84,0x8c,0x90,0xa0,0xc0,0x80,0x80,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x8,0x8,0x2b,0x28,0x3e,0x48,0x49,0x88,0xe,0x18,0x6b,0x8,0x8,0x8,0x8,0x8,0x8,0x1c,0xe0,0x40,0x40,0x5c,0xe0,0x40,0x44,0x7e,0xc0,0x40,0x42,0x42,0x3e,0x0,
++0x8,0x8,0x28,0x28,0x3e,0x4b,0x48,0x88,0xe,0x19,0x69,0x9,0x9,0x9,0x9,0x9,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0xb,0x28,0x28,0x3f,0x48,0x48,0x88,0xf,0x18,0x69,0x9,0x9,0x9,0x9,0x9,0x8,0xfc,0x40,0x48,0xfc,0x88,0x88,0x88,0xfe,0x0,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x8,0x28,0x28,0x3e,0x49,0x48,0x8b,0xe,0x18,0x69,0x9,0x9,0x9,0x9,0x9,0x20,0x20,0xa0,0xa8,0xfc,0x20,0x24,0xfe,0x0,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x8,0x2b,0x28,0x3e,0x49,0x4f,0x88,0xd,0x19,0x69,0x9,0x9,0x8,0x8,0x8,0x40,0x48,0xfc,0xa0,0x98,0x8,0xfe,0x8,0xe8,0x28,0x28,0x28,0xe8,0x8,0x28,0x10,
++0x8,0x9,0x29,0x29,0x3f,0x49,0x4b,0x8d,0x9,0x19,0x6f,0x8,0x9,0x9,0xa,0xc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x8,0xfe,0x0,0x10,0x8,0x4,0x4,
++0x10,0x10,0x57,0x51,0x7d,0x92,0x14,0x17,0x19,0x35,0xd5,0x12,0x13,0x12,0x14,0x18,0x10,0x10,0x7c,0x14,0xfe,0x14,0x7c,0x10,0x7c,0x10,0xfe,0x10,0x10,0x96,0x7c,0x0,
++0x10,0x10,0x53,0x52,0x7e,0x93,0x12,0x12,0x1f,0x33,0xd3,0x15,0x15,0x19,0x11,0x11,0x40,0x24,0xfe,0x4,0x4,0xfc,0x0,0x4,0xfe,0x54,0x54,0xfc,0x54,0x54,0x54,0xc,
++0x10,0x10,0x5f,0x50,0x7b,0x92,0x13,0x10,0x1f,0x34,0xd5,0x15,0x15,0x15,0x14,0x14,0x80,0x44,0xfe,0x0,0xf8,0x8,0xf8,0x0,0xfc,0x4,0xf4,0x14,0x14,0xf4,0x14,0x8,
++0x8,0x7f,0x8,0x3e,0x8,0x7e,0x9,0x0,0x7f,0x1,0x3f,0x1,0xff,0x1,0x5,0x2,0x4,0xfe,0x44,0x44,0x44,0x94,0x8,0xf0,0x0,0x10,0xf8,0x0,0xfe,0x0,0x0,0x0,
++0x10,0x9,0x41,0x26,0x8,0x70,0x23,0xc,0x7f,0x1,0x3f,0x1,0xff,0x1,0x5,0x2,0x40,0x50,0x4c,0x54,0x60,0xc0,0x0,0xf0,0x0,0x10,0xf8,0x0,0xfe,0x0,0x0,0x0,
++0x0,0xc,0xf2,0x12,0x14,0x78,0x17,0x12,0x1e,0xf2,0x12,0x14,0x24,0x29,0x40,0x0,0x0,0x86,0xb8,0x88,0x48,0x3e,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0x28,0x10,
++0x0,0xd,0xf1,0x12,0x14,0x78,0x17,0x10,0x17,0xfc,0x14,0x14,0x24,0x27,0x20,0x40,0x0,0x6,0x38,0x88,0x48,0x3e,0xc8,0x8,0xc8,0x7e,0x48,0x48,0x48,0xc8,0x28,0x10,
++0x0,0x3e,0x23,0x3e,0x21,0x3e,0x62,0xbe,0x0,0x3f,0x1,0x1f,0x1,0xff,0x1,0x3,0x40,0x28,0xfc,0x50,0xfe,0x20,0xf8,0x20,0x20,0xf8,0x0,0xf0,0x4,0xfe,0x0,0x0,
++0x2,0x3f,0x2,0xff,0x2,0xf,0x34,0xc7,0x0,0x3f,0x2,0x1f,0x2,0xff,0x2,0x1,0x20,0xc0,0x84,0xfe,0x0,0xe0,0x8,0xf8,0x30,0xc0,0x0,0xf0,0x0,0xfa,0x2,0xfe,
++0x4,0x1e,0xf0,0x10,0x11,0x10,0x7d,0x11,0x11,0x1e,0xf3,0x10,0x10,0x10,0xf,0x0,0x40,0x40,0x88,0x84,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x22,0x22,0xfe,0x0,
++0x3f,0x1,0x1f,0x1,0x7f,0x1,0x0,0x4,0x79,0x10,0x7c,0x10,0xff,0x10,0x14,0x18,0xf8,0x0,0xf0,0x0,0xf8,0x2,0xfe,0x0,0xf8,0x40,0xf8,0x40,0xfc,0x40,0x42,0x3e,
++0x0,0x18,0xe0,0x2e,0x23,0x24,0xf4,0x2e,0x22,0x22,0xfb,0x24,0x2a,0x31,0x20,0x1f,0x20,0x28,0xfc,0x28,0xfe,0x28,0xf8,0x20,0xf8,0x20,0xfc,0x20,0x22,0xfe,0x2,0xfe,
++0x10,0x10,0x25,0x7e,0x10,0xff,0x28,0x4c,0x92,0x24,0x49,0x12,0x64,0x8,0x30,0xc0,0x8,0x3c,0xe0,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x22,0x22,0x1e,
++0x8,0x8,0x15,0x22,0x7f,0x80,0x71,0x55,0x55,0x75,0x55,0x55,0x75,0x51,0x55,0x52,0x8,0x3c,0xe0,0x20,0x20,0xa8,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x22,0x22,0x1e,
++0x8,0x49,0x2a,0x7f,0x41,0x5d,0x55,0x5d,0x41,0x3f,0x2,0x1f,0x2,0xff,0x2,0x1,0x20,0x20,0x24,0x7e,0xa8,0x10,0x28,0xc6,0x30,0xc0,0x0,0xf0,0x0,0xfa,0x2,0xfe,
++0x1,0x39,0xe2,0x27,0x2a,0x23,0xf2,0x2f,0x20,0x23,0xfa,0x23,0x22,0x23,0x20,0x1f,0x0,0xf0,0x20,0xf8,0x48,0xf8,0x48,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xfa,0x2,0xfe,
++0x2,0x39,0xe7,0x21,0x25,0x23,0xf1,0x2f,0x20,0x23,0xfa,0x23,0x22,0x23,0x20,0x1f,0x10,0x20,0xfc,0x20,0x28,0x30,0x24,0xfe,0x0,0xf0,0x10,0xf0,0x10,0xf2,0x2,0xfe,
++0x77,0x55,0x77,0x55,0x77,0x55,0x77,0x24,0x3f,0x64,0x7f,0xa4,0x3f,0x24,0x3f,0x20,0x8,0x3c,0xe0,0x20,0x20,0x28,0xfc,0x20,0xa0,0x24,0xfe,0x20,0x20,0x22,0xa2,0x1e,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x0,0x2,0x2,0x2,0x2,0x2,0x4,0x4,0x8,0x10,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0x8,0x8,0x8,0x8,0x8,0x8,0xa,0xa,0x4,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x0,0x8,0x8,0x8,0x8,0x8,0x10,0x10,0x20,0x40,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0x88,0x88,0x88,0x88,0x88,0x88,0x8a,0x8a,0x84,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x2,0x2,0x22,0x22,0x22,0x22,0x22,0x3f,0x0,0x0,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0x8,0x28,0x28,0x28,0x28,0x28,0xea,0x2a,0x4,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x0,0x12,0x12,0x12,0x12,0x12,0x12,0x22,0x22,0x40,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0x4a,0x4a,0x44,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x4,0xf,0x10,0x6d,0x2,0xd,0x76,0x1,0xc,0x3,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0xc8,0x88,0x8,0x8,0x88,0x78,0xa,0xa,0x4,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x0,0x7f,0x9,0x49,0x29,0x29,0x9,0x9,0xff,0x0,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0xe8,0x8,0x28,0x48,0x88,0x8,0xa,0xfa,0x4,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x0,0x3f,0x22,0x22,0x2f,0x22,0x25,0x28,0x3f,0x20,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0xe8,0x28,0x28,0xa8,0x28,0x28,0xaa,0xea,0x24,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x4,0x7f,0x4,0x3f,0x20,0x3f,0xa,0xa,0x12,0x61,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0xe8,0x8,0x88,0x88,0x88,0x8,0x2a,0x2a,0xe4,
++0x10,0x1f,0x20,0x2f,0x40,0xbf,0x0,0x3f,0x26,0x3f,0x0,0x7f,0x49,0x49,0xff,0x0,0x4,0xfe,0x0,0xf8,0x0,0xf8,0x8,0xc8,0x48,0xc8,0x8,0xe8,0x28,0x2a,0xfa,0x4,
++0x10,0x10,0x11,0x1f,0x22,0x42,0x12,0x12,0x12,0x14,0x14,0x8,0x14,0x22,0x43,0x81,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,
++0x8,0x8,0xa,0xff,0x8,0x7f,0x49,0x49,0x7f,0x49,0x1c,0x2b,0x49,0x88,0x9,0xa,0x40,0x40,0x44,0x7e,0x48,0x88,0x48,0x48,0x48,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x8,0x10,0x7e,0x42,0x7e,0x42,0x7f,0x10,0xa,0xff,0x10,0x1e,0x22,0x22,0x4b,0x86,0x40,0x40,0x44,0x7e,0x88,0x88,0x48,0x48,0x48,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x8,0x48,0x4b,0x48,0x4b,0x7c,0x41,0x40,0x7a,0x49,0x48,0x4f,0x48,0x48,0x88,0x3,0x40,0x48,0xfc,0x40,0xfe,0x2,0x24,0xa0,0x20,0x20,0x24,0xfe,0x40,0x50,0x8c,0x4,
++0x9,0x49,0x4f,0x49,0x49,0x7d,0x41,0x41,0x78,0x48,0x4b,0x48,0x48,0x49,0x8a,0x8,0x48,0x48,0xfe,0x48,0x48,0x78,0x0,0xfc,0x20,0x24,0xfe,0x70,0xa8,0x2e,0x24,0x20,
++0x10,0x50,0x57,0x54,0x57,0x7c,0x47,0x44,0x75,0x55,0x55,0x55,0x55,0x55,0x99,0x11,0x40,0x24,0xfe,0x4,0xfc,0x28,0xfe,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x24,0x24,0x2c,
++0x0,0x0,0x3f,0x11,0x9,0x9,0x7f,0x2,0xff,0x4,0x7,0xa,0x11,0x20,0x43,0x1c,0x10,0x78,0x80,0x10,0x10,0x20,0xfc,0x0,0xfe,0x0,0xf0,0x20,0x40,0x80,0x60,0x1e,
++0x4,0xe,0xf0,0x3,0x93,0x55,0x1,0x9,0xff,0x9,0x49,0x29,0x9,0xa,0x2c,0x11,0x24,0x3e,0x20,0xfe,0x22,0xf8,0x24,0x3c,0x0,0x78,0x48,0x48,0x48,0x4a,0x8a,0x6,
++0x2,0x3f,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x3e,0x22,0x22,0x42,0x42,0x8a,0x4,0x8,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x8,0x8,0x28,0x10,
++0x4,0x3e,0x24,0x24,0x24,0x3f,0x24,0x24,0x24,0x3c,0x24,0x24,0x44,0x44,0x94,0x8,0x8,0xfc,0x0,0x0,0x4,0xfe,0x80,0x80,0x84,0xfe,0x4,0x4,0x4,0x44,0x28,0x10,
++0x2,0x3f,0x22,0x22,0x22,0x3e,0x22,0x22,0x22,0x3e,0x22,0x22,0x42,0x42,0x8a,0x4,0x8,0x18,0x20,0x40,0x84,0xc,0x10,0x20,0x40,0x80,0x4,0xc,0x10,0x20,0x40,0x80,
++0x2,0x1,0xff,0x10,0x10,0x1f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x10,0x0,0x4,0xfe,0x0,0x10,0xf8,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x4,0x3e,0x24,0x24,0x25,0x3c,0x24,0x24,0x27,0x3c,0x24,0x24,0x44,0x45,0x95,0xa,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0x8,0x8,0x8,
++0x4,0x3f,0x24,0x24,0x24,0x3c,0x27,0x24,0x24,0x3c,0x24,0x24,0x44,0x45,0x96,0x8,0x8,0xfc,0x0,0x0,0x0,0x4,0xfe,0x90,0x90,0x90,0x90,0x90,0x92,0x12,0xe,0x0,
++0x4,0x3e,0x24,0x24,0x24,0x3f,0x24,0x24,0x24,0x3c,0x24,0x24,0x44,0x44,0x95,0xa,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x50,0x50,0x50,0x50,0x88,0xc8,0xa8,0x6,0x4,
++0x4,0x3e,0x24,0x24,0x27,0x3c,0x24,0x24,0x24,0x3d,0x25,0x26,0x44,0x44,0x95,0x8,0x40,0x40,0x40,0x44,0xfe,0x80,0x80,0xa0,0xa0,0x20,0x40,0x50,0x48,0x84,0xfc,0x4,
++0x4,0x3e,0x24,0x27,0x24,0x3d,0x25,0x25,0x25,0x3d,0x24,0x24,0x44,0x44,0x94,0x8,0x20,0x20,0x24,0xfe,0x20,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x22,0x22,0x1e,0x0,
++0x4,0x3e,0x24,0x24,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x45,0x45,0x95,0x9,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x54,0x4c,0x8c,0x4,0x4,0x14,0x8,
++0x10,0xc,0x3,0xc,0x12,0xff,0x4,0x8,0x1f,0x28,0xcf,0x8,0xf,0x8,0x8,0x8,0x10,0x70,0x80,0x60,0x14,0xfe,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x4,0x3e,0x24,0x24,0x24,0x3d,0x26,0x24,0x24,0x3c,0x24,0x24,0x44,0x44,0x95,0xa,0x80,0x80,0x80,0xfe,0x82,0x24,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x88,0x6,0x4,
++0x4,0x3e,0x24,0x24,0x27,0x3c,0x24,0x24,0x24,0x3c,0x24,0x24,0x45,0x45,0x96,0x8,0x80,0xa0,0x90,0x94,0xfe,0xa0,0xa4,0xa4,0xa8,0xa8,0xb0,0xa0,0x62,0x22,0x1e,0x0,
++0x4,0x3e,0x24,0x27,0x24,0x3c,0x25,0x25,0x27,0x3c,0x24,0x24,0x45,0x46,0x94,0x8,0x40,0x40,0x44,0xfe,0x80,0xa0,0x20,0x24,0xfe,0x20,0xa8,0xa4,0x26,0x22,0xa0,0x40,
++0x4,0x3e,0x24,0x24,0x24,0x3c,0x24,0x27,0x24,0x3c,0x24,0x24,0x44,0x44,0x94,0x8,0x40,0x40,0x48,0x7c,0x40,0x40,0x44,0xfe,0x40,0x40,0x60,0x50,0x4c,0x44,0x40,0x40,
++0x4,0x3e,0x24,0x24,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x45,0x45,0x95,0xa,0x24,0x3e,0x20,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x24,0x44,0x44,0x94,0x8,0x4,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,0x20,
++0x0,0x3c,0x24,0x25,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x45,0x44,0x94,0x8,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,
++0x1,0x1,0x3f,0x21,0x3f,0x21,0x3f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x4,0x3e,0x24,0x24,0x25,0x3d,0x26,0x24,0x24,0x3c,0x24,0x24,0x44,0x44,0x94,0x8,0x80,0x80,0x84,0xfe,0x40,0x40,0x48,0x7c,0x40,0x48,0x7c,0x40,0x40,0x40,0x40,0x40,
++0x4,0x3e,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x45,0x45,0x96,0x8,0x8,0x1c,0xe0,0x10,0x50,0x50,0x50,0x50,0x48,0x48,0x48,0x44,0x54,0x54,0x72,0x0,
++0x4,0x3e,0x24,0x24,0x25,0x3e,0x24,0x24,0x25,0x3c,0x24,0x25,0x44,0x44,0x94,0xb,0x40,0x40,0xa0,0xa0,0x18,0x36,0x40,0x88,0x10,0x20,0x44,0x88,0x10,0x20,0xc0,0x0,
++0x4,0x3e,0x24,0x24,0x25,0x3e,0x24,0x24,0x24,0x3c,0x24,0x24,0x44,0x44,0x94,0x8,0x80,0x80,0x84,0xfe,0x4,0x4,0xf4,0x94,0x94,0x94,0x94,0xf4,0x84,0x4,0x14,0x8,
++0x4,0x3e,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x45,0x45,0x95,0x9,0x8,0x1c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x10,0x10,0x10,0x2a,0x4a,0xa6,0x12,
++0x4,0x3f,0x24,0x24,0x24,0x3c,0x24,0x27,0x24,0x3d,0x24,0x24,0x44,0x44,0x97,0x8,0x0,0xfc,0x8,0x10,0x20,0x58,0x86,0x2,0x0,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x4,0x3e,0x25,0x24,0x24,0x3c,0x27,0x24,0x24,0x3c,0x24,0x24,0x44,0x45,0x96,0x8,0x20,0x20,0x24,0xac,0xb0,0x24,0xfe,0x50,0x50,0x50,0x50,0x90,0x92,0x12,0xe,0x0,
++0x0,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x45,0x45,0x95,0x9,0x4,0xfe,0x4,0x14,0xfc,0x4,0x4,0x74,0x54,0x54,0x54,0x74,0x4,0x4,0x14,0x8,
++0x0,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x45,0x45,0x95,0x9,0x4,0xfe,0x4,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x54,0x4c,0x8c,0x4,0xfc,0x4,
++0x4,0x3e,0x24,0x24,0x25,0x3e,0x24,0x24,0x24,0x3f,0x24,0x24,0x44,0x44,0x95,0x8,0x20,0x20,0x50,0x88,0x6,0x10,0xf8,0x0,0x4,0xfe,0x40,0x40,0x48,0x84,0xfc,0x4,
++0x0,0x3d,0x24,0x24,0x24,0x3c,0x25,0x24,0x27,0x3c,0x24,0x25,0x46,0x44,0x94,0x8,0x0,0x8,0x90,0x60,0x50,0x8c,0x24,0x20,0xfe,0x20,0xa8,0x26,0x22,0x20,0xa0,0x40,
++0x4,0x3e,0x24,0x27,0x24,0x3c,0x24,0x25,0x24,0x3c,0x24,0x25,0x44,0x44,0x94,0x9,0x40,0x20,0x4,0xfe,0x40,0x48,0x88,0xf4,0x24,0x48,0x88,0x10,0x28,0x44,0x82,0x2,
++0x5,0x3e,0x24,0x27,0x24,0x3c,0x24,0x24,0x27,0x3c,0x24,0x24,0x45,0x45,0x96,0x8,0x8,0x90,0x0,0xfc,0x90,0x90,0x90,0x94,0xfe,0x90,0x90,0x90,0x10,0x10,0x10,0x10,
++0x4,0x3e,0x24,0x24,0x25,0x3c,0x24,0x24,0x27,0x3c,0x24,0x24,0x44,0x44,0x95,0xa,0x0,0x88,0x50,0x0,0xfc,0x20,0x20,0x24,0xfe,0x20,0x50,0x50,0x88,0x88,0x4,0x2,
++0x4,0x3e,0x25,0x24,0x24,0x3c,0x27,0x24,0x24,0x3c,0x24,0x24,0x45,0x46,0x94,0x8,0x20,0x20,0x24,0xa4,0xa8,0x20,0xfe,0x20,0x60,0x70,0xa8,0xa8,0x26,0x24,0x20,0x20,
++0x0,0x3c,0x27,0x24,0x24,0x3d,0x26,0x24,0x25,0x3e,0x24,0x25,0x46,0x44,0x94,0x8,0x0,0x4,0xfe,0x40,0x84,0x4c,0x70,0xa0,0x30,0x70,0xa8,0x28,0x26,0x24,0xa0,0x40,
++0x0,0x3d,0x25,0x25,0x25,0x3d,0x24,0x24,0x25,0x3d,0x25,0x25,0x45,0x45,0x95,0x9,0x4,0xfe,0x4,0x4,0x4,0xfc,0x20,0x24,0xfe,0x24,0x24,0x54,0x8c,0x4,0x14,0x8,
++0x4,0x3e,0x24,0x24,0x24,0x3d,0x26,0x24,0x24,0x3d,0x24,0x24,0x44,0x44,0x97,0x8,0x20,0x20,0xa8,0xa8,0xa8,0x74,0x22,0x20,0x28,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x4,0x3e,0x25,0x25,0x24,0x3c,0x25,0x24,0x24,0x3c,0x27,0x24,0x44,0x44,0x94,0x8,0x8,0x1c,0xe0,0x4,0xa4,0xa8,0xfc,0x10,0x20,0x24,0xfe,0x20,0x20,0x20,0xa0,0x40,
++0x4,0x3e,0x25,0x25,0x26,0x3c,0x24,0x24,0x27,0x3c,0x24,0x24,0x44,0x45,0x96,0x8,0x40,0x20,0xfe,0x2,0x14,0xf8,0x0,0x4,0xfe,0x90,0x90,0x90,0x92,0x12,0xe,0x0,
++0x0,0x7b,0x4a,0x4a,0x4b,0x7a,0x4a,0x4b,0x4a,0x7a,0x4a,0x4a,0x4b,0x4a,0xac,0x10,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0xa8,0xb0,0xa8,0xa8,0xa4,0x24,0x22,0xa0,0x40,
++0x4,0x3e,0x27,0x24,0x25,0x3c,0x27,0x24,0x25,0x3d,0x25,0x25,0x45,0x45,0x95,0x9,0x20,0x24,0xfe,0x20,0xfc,0x20,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x4,0x14,0x8,
++0x8,0x7c,0x48,0x4f,0x48,0x79,0x4a,0x4f,0x4a,0x7b,0x4a,0x4b,0x4a,0x48,0xa8,0x10,0x40,0x40,0x44,0xfe,0xa0,0x10,0x48,0xfe,0x48,0xf8,0x48,0xf8,0x48,0x40,0x44,0x3c,
++0x4,0x3e,0x24,0x27,0x24,0x3c,0x24,0x27,0x24,0x3c,0x24,0x27,0x44,0x44,0x94,0x8,0x50,0x50,0x54,0xde,0x50,0x50,0x54,0xde,0x50,0x50,0x54,0xde,0x50,0x50,0x50,0x50,
++0x4,0x3e,0x25,0x25,0x25,0x3d,0x25,0x25,0x25,0x3d,0x24,0x24,0x44,0x45,0x96,0x8,0x20,0xa4,0x2e,0x24,0x24,0xac,0x24,0x24,0xfc,0x24,0x50,0x50,0x88,0x6,0x4,0x0,
++0x0,0x7a,0x4b,0x4a,0x4c,0x79,0x48,0x48,0x4b,0x78,0x49,0x49,0x49,0x4a,0xa8,0x10,0x40,0x20,0xfe,0x2,0x4,0xfc,0x0,0x4,0xfe,0x20,0x20,0x28,0x26,0x22,0xa0,0x40,
++0x0,0x78,0x4b,0x4a,0x4c,0x78,0x4b,0x48,0x48,0x79,0x49,0x49,0x49,0x4a,0xac,0x10,0x40,0x20,0xfe,0x2,0x4,0x0,0xfe,0x20,0x20,0x28,0x3c,0x20,0x20,0xa6,0x7c,0x0,
++0x0,0x78,0x4f,0x49,0x49,0x79,0x4a,0x4f,0x49,0x79,0x4d,0x4b,0x49,0x4a,0xac,0x10,0x10,0x10,0x7c,0x14,0xfe,0x14,0x7c,0x10,0x7c,0x10,0xfe,0x10,0x10,0x96,0x7c,0x0,
++0x8,0x7c,0x4b,0x48,0x4b,0x78,0x4f,0x48,0x49,0x7b,0x4c,0x4b,0x48,0x48,0xa8,0x13,0x40,0x48,0xfc,0x40,0xfc,0x40,0xfe,0xa0,0x10,0xf8,0x46,0xf8,0x40,0xa0,0x98,0x8,
++0x0,0x3c,0x27,0x24,0x24,0x3d,0x25,0x25,0x25,0x3d,0x25,0x25,0x45,0x45,0x95,0x9,0x20,0x24,0xfe,0x20,0x24,0xfe,0x4,0x54,0xfc,0x24,0x24,0xfc,0x24,0x24,0x24,0xc,
++0x8,0x7c,0x4b,0x48,0x48,0x7b,0x4a,0x4a,0x4a,0x7a,0x4a,0x4a,0x4a,0x4a,0xab,0x12,0x0,0x4,0xfe,0x40,0x84,0xfe,0x94,0x94,0xf4,0x94,0x94,0xf4,0x94,0x94,0xfc,0x4,
++0x8,0x7d,0x49,0x49,0x49,0x79,0x49,0x49,0x48,0x7b,0x4a,0x4a,0x4a,0x4a,0xaf,0x10,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x0,0xfc,0x94,0x94,0x94,0x94,0xfe,0x0,
++0x0,0x7b,0x4a,0x4a,0x4b,0x78,0x4b,0x48,0x4f,0x79,0x49,0x48,0x48,0x48,0xa8,0x10,0x8,0xbc,0xa8,0xa8,0xb8,0x0,0xf8,0x0,0xfe,0x0,0xf8,0x8,0x8,0x88,0x50,0x20,
++0x8,0x7c,0x48,0x49,0x4b,0x7c,0x4b,0x4a,0x4a,0x7b,0x4a,0x4a,0x4b,0x4a,0xaa,0x12,0x40,0x40,0xa0,0x10,0xf8,0x6,0xc4,0x54,0x54,0xd4,0x54,0x54,0xd4,0x44,0x54,0xc8,
++0x0,0x7a,0x49,0x48,0x4b,0x78,0x4f,0x48,0x49,0x7a,0x4c,0x4b,0x48,0x48,0xab,0x10,0x40,0x48,0x50,0x40,0xfc,0x40,0xfe,0xa0,0x10,0x4e,0x44,0xf8,0x40,0x48,0xfc,0x0,
++0x0,0x7a,0x49,0x4b,0x48,0x7f,0x48,0x49,0x4a,0x7c,0x4f,0x48,0x49,0x48,0xa9,0x16,0x40,0x48,0x50,0xfc,0x40,0xfe,0xa0,0x10,0x4e,0x44,0xfe,0x90,0x10,0xe0,0x18,0x4,
++0x0,0x7b,0x48,0x49,0x49,0x79,0x49,0x48,0x4b,0x7a,0x4a,0x4b,0x4a,0x4a,0xaa,0x12,0x4,0xfe,0x0,0xfc,0x4,0x4,0xfc,0x0,0xfe,0x8a,0x52,0xfe,0x22,0x22,0x2a,0x4,
++0x10,0x8,0xfe,0x11,0x1e,0x22,0x2a,0x44,0x9f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x40,0x44,0xfe,0x18,0xe4,0xa8,0x90,0xc8,0xf6,0x10,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x8,0x7c,0x4b,0x4a,0x4c,0x79,0x49,0x49,0x49,0x79,0x49,0x4f,0x48,0x48,0xa9,0x12,0x40,0x20,0xfe,0x2,0x34,0xc0,0x8,0xfc,0x10,0x10,0x14,0xfe,0x0,0x90,0xc,0x4,
++0x0,0x7a,0x49,0x48,0x4f,0x78,0x4f,0x48,0x49,0x7a,0x4d,0x49,0x48,0x49,0xaa,0x10,0x40,0x48,0x50,0x40,0xfc,0x40,0xfe,0xa0,0x10,0x4e,0x54,0x50,0xe0,0x50,0x4c,0xc0,
++0x0,0x78,0x4b,0x4a,0x4d,0x78,0x4b,0x48,0x48,0x79,0x48,0x49,0x48,0x48,0xab,0x10,0x40,0x20,0xfe,0x52,0x8c,0x0,0xfe,0x40,0x88,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x8,0x7d,0x48,0x48,0x4b,0x7a,0x4d,0x49,0x49,0x79,0x48,0x49,0x49,0x49,0xa9,0x11,0x20,0xfc,0x88,0x50,0xfe,0x22,0xfc,0x24,0x24,0x2c,0x20,0xfc,0x4,0x4,0xfc,0x4,
++0x1,0x79,0x4f,0x49,0x4b,0x78,0x4b,0x4a,0x4a,0x7a,0x4b,0x48,0x4a,0x49,0xae,0x10,0x8,0x8,0xc8,0x3e,0x88,0x8,0xbe,0xa2,0xa2,0x94,0x94,0x8,0x88,0xd4,0x14,0x62,
++0x8,0x7f,0x48,0x4b,0x4a,0x7c,0x48,0x4b,0x48,0x79,0x4a,0x49,0x4a,0x49,0xaa,0x10,0x88,0xfe,0x88,0xfe,0x2,0xf8,0x0,0xfe,0x80,0x44,0xa8,0x70,0xa8,0x26,0xa4,0x40,
++0x9,0x7d,0x49,0x49,0x48,0x7b,0x4a,0x4a,0x4b,0x78,0x4f,0x48,0x48,0x49,0xaa,0x10,0xfc,0x4,0x4,0xfc,0x0,0xde,0x52,0x52,0xde,0x20,0xfe,0x70,0xa8,0x2e,0x24,0x20,
++0x8,0x7f,0x48,0x4b,0x4a,0x7a,0x4a,0x4b,0x48,0x7b,0x4a,0x4b,0x4a,0x4b,0xa8,0x17,0x40,0xfe,0x0,0xfc,0x94,0xf4,0x94,0xfc,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x0,0xfe,
++0x8,0x7c,0x4b,0x4a,0x4b,0x7a,0x4b,0x4a,0x4b,0x7a,0x4b,0x4a,0x4a,0x4a,0xad,0x10,0x40,0x24,0xfe,0x88,0xfe,0x50,0xfc,0x54,0xfe,0x54,0xfc,0x50,0xd8,0xd4,0x52,0x50,
++0x0,0x7a,0x49,0x4f,0x48,0x79,0x4a,0x4a,0x4b,0x7a,0x4c,0x4b,0x49,0x4a,0xac,0x10,0x40,0x48,0x50,0xfc,0xe0,0x50,0x48,0x8,0xbe,0xa8,0xa8,0x28,0x7e,0x8,0x8,0x8,
++0x0,0x20,0x24,0x3e,0x20,0x21,0x22,0x3f,0x2,0x2,0x1a,0xe2,0x2,0x14,0x9,0x2,0x40,0x40,0x40,0x7e,0x82,0x24,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x6,0x4,
++0x42,0x24,0x18,0x24,0x42,0x1,0xff,0x28,0x3e,0x6a,0xaa,0x2a,0x2a,0x2e,0x9,0xa,0x40,0x40,0x40,0x7e,0x82,0x24,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x6,0x4,
++0x10,0x12,0xff,0x10,0x28,0x45,0xff,0x2,0x7a,0x4a,0x4a,0x4a,0x7a,0x2,0xb,0x6,0x40,0x40,0x40,0x7e,0x82,0x24,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x6,0x4,
++0x2,0xf,0x78,0x8,0x8,0xff,0x28,0x4b,0x49,0x49,0x6b,0x49,0x49,0x7f,0x41,0x2,0x40,0x40,0x40,0x7e,0x82,0x24,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x6,0x4,
++0x10,0xa,0x7f,0x0,0x22,0x15,0xff,0x0,0x3e,0x22,0x22,0x3e,0x22,0x22,0x3f,0x22,0x40,0x40,0x40,0x7e,0x82,0x24,0xa0,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x6,0x4,
++0x8,0x14,0x22,0x7f,0x80,0x3e,0x23,0x3e,0x0,0x77,0x11,0x55,0x33,0x55,0x11,0x33,0x40,0x40,0x40,0x7e,0x42,0x84,0x20,0x20,0x20,0x20,0x20,0x50,0x50,0x88,0x6,0x4,
++0x4,0x7e,0x44,0x45,0x46,0x6d,0x6d,0x55,0x55,0x55,0x6d,0x6d,0x44,0x44,0x43,0x80,0x80,0x88,0xfc,0x8,0x8,0xe8,0x28,0x28,0xe8,0x28,0x10,0x4,0xfe,0x2,0xfe,0x0,
++0x0,0x23,0x12,0x12,0xff,0x2,0x4a,0x4a,0x4a,0x52,0x52,0x1e,0xf3,0x44,0x4,0x18,0x8,0xfc,0x8,0x8,0x18,0x98,0xa8,0xa8,0x48,0x48,0xa8,0x98,0x1a,0xa,0xa,0x4,
++0x4,0x7e,0x44,0x44,0x44,0x6c,0x6c,0x54,0x54,0x54,0x6f,0x6c,0x44,0x44,0x43,0x80,0x8,0xfc,0x88,0xf8,0x88,0xf8,0x88,0xf8,0x88,0x88,0xfe,0x50,0x8a,0x2,0xfe,0x0,
++0x0,0x7d,0x45,0x45,0x45,0x6d,0x6d,0x54,0x55,0x54,0x6c,0x6c,0x44,0x44,0x43,0x80,0x20,0xac,0x24,0xac,0x24,0x24,0xfc,0x20,0xfc,0x88,0x50,0x20,0x52,0x8a,0xfe,0x0,
++0x10,0x18,0x14,0xfe,0x10,0x28,0x44,0x82,0x24,0x36,0xff,0x24,0x24,0x5a,0x49,0x92,0x8,0xfc,0x88,0x88,0x88,0xd8,0xd8,0xa8,0xa8,0xa8,0xd8,0xd8,0x8a,0x8a,0xa,0x4,
++0x4,0x7e,0x44,0x44,0x45,0x6c,0x6d,0x54,0x56,0x55,0x6c,0x6d,0x46,0x44,0x43,0x80,0x20,0x20,0xa4,0xa8,0x50,0x88,0x6,0x88,0xaa,0xdc,0x88,0x54,0x22,0x2,0xfe,0x0,
++0x2,0x3f,0x22,0x22,0x22,0x22,0x41,0x80,0x7f,0x21,0x22,0x14,0x8,0x14,0x23,0xc1,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,
++0x10,0xfe,0x10,0x7c,0x0,0xfe,0x83,0xbe,0x1,0x7c,0x4,0x7c,0x40,0x7c,0x4,0x1b,0x8,0xfc,0x88,0x88,0x88,0x88,0x6,0x0,0xfc,0x84,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x8,0x7f,0x8,0x3e,0x0,0xff,0x91,0x92,0x7f,0x28,0x28,0x7e,0x8,0xff,0x8,0xb,0x8,0x7c,0x48,0x48,0x48,0x48,0x86,0x0,0xfc,0x84,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x8,0x7f,0x8,0x3e,0x0,0xff,0x91,0x9c,0x25,0x7e,0xaa,0x3e,0x2a,0x3e,0x4a,0x8b,0x8,0xfc,0x88,0x88,0x88,0x88,0x6,0x0,0xfc,0x84,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x2,0x2,0x7e,0x2,0x3e,0x2,0x7e,0x2,0x1,0xff,0x8,0x4,0x3,0x2,0xc,0x70,0x80,0x88,0xfc,0x80,0xf8,0x80,0xfc,0x80,0x4,0xfe,0x20,0x40,0x80,0x80,0x60,0x1c,
++0x1,0xff,0x18,0x6,0x1,0xe,0xf2,0x2e,0x22,0x2e,0x22,0x2e,0x22,0x3f,0x20,0x40,0x0,0xfe,0x30,0xc0,0x0,0xe0,0x9e,0xe8,0x88,0xe8,0x88,0xe8,0x88,0xf8,0x8,0x8,
++0x4,0x42,0x20,0x4,0xff,0x14,0x55,0x25,0x25,0x55,0x55,0x4c,0x8d,0x6,0x4,0x4,0x4,0xfe,0x44,0x54,0xfc,0x44,0xf4,0x54,0xf4,0x54,0xf4,0xe4,0x54,0x4c,0x54,0x48,
++0x20,0x18,0x8,0x0,0xfe,0x20,0x25,0x3e,0x24,0x24,0x24,0x24,0x44,0x44,0x94,0x8,0x20,0x20,0x50,0x50,0x88,0x88,0x6,0x44,0x30,0x10,0x80,0x40,0x30,0x18,0x8,0x0,
++0x20,0x18,0x8,0x1,0xfe,0x20,0x25,0x3e,0x25,0x25,0x25,0x25,0x45,0x45,0x94,0x8,0x80,0x80,0x84,0xfe,0x20,0x24,0xfe,0x20,0xfc,0x24,0x24,0x24,0x34,0x28,0x20,0x20,
++0x20,0x18,0x8,0x1,0xfe,0x21,0x24,0x3e,0x25,0x24,0x24,0x27,0x44,0x44,0x94,0x8,0x80,0x84,0xfe,0x0,0x18,0xe0,0x28,0x3c,0xe0,0x24,0x3e,0xe0,0x20,0x22,0x22,0x1e,
++0x21,0x19,0x9,0xfe,0x24,0x21,0x3d,0x25,0x25,0x27,0x25,0x25,0x45,0x45,0x95,0xa,0x0,0x4,0xfe,0x0,0x8,0xfc,0x8,0x48,0x28,0xfe,0x8,0x8,0x8,0x8,0x28,0x10,
++0x20,0x18,0x8,0x1,0xfe,0x21,0x21,0x3d,0x26,0x24,0x25,0x24,0x44,0x44,0x97,0x8,0x80,0x80,0x84,0xfe,0x20,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x20,0x18,0x8,0x0,0xfd,0x22,0x20,0x3c,0x24,0x24,0x24,0x24,0x44,0x45,0x95,0xa,0x80,0x80,0x84,0xfe,0x0,0xfc,0x84,0x84,0xfc,0x80,0xa4,0xa8,0xb0,0x22,0x22,0x1e,
++0x20,0x18,0x8,0x1,0xfe,0x23,0x20,0x3c,0x25,0x24,0x24,0x24,0x44,0x45,0x95,0xa,0x80,0x84,0xfe,0x40,0x24,0xfe,0x40,0x88,0xfc,0x0,0xa8,0xa8,0xa8,0x2a,0x2a,0x26,
++0x20,0x18,0x9,0x2,0xfe,0x20,0x20,0x3c,0x27,0x24,0x25,0x25,0x45,0x45,0x94,0x8,0x80,0x84,0xfe,0x20,0xf8,0x20,0x50,0x88,0xfe,0x8,0xe8,0x28,0x28,0xe8,0x8,0x18,
++0x10,0x13,0x10,0x14,0x54,0x58,0x53,0x90,0x10,0x10,0x19,0x25,0x22,0x44,0x81,0x0,0x0,0xf8,0x10,0x20,0x40,0x84,0xfe,0xa4,0xa4,0xa4,0x24,0x44,0x44,0x84,0x28,0x10,
++0x10,0x10,0x10,0x17,0x54,0x58,0x53,0x90,0x10,0x17,0x10,0x28,0x24,0x44,0x80,0x0,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0x40,0x44,0xfe,0x44,0x44,0x54,0x48,0x40,0x40,
++0x10,0x10,0x10,0x17,0x54,0x5a,0x52,0x92,0x12,0x13,0x10,0x28,0x24,0x44,0x80,0x0,0x40,0x40,0x44,0xfe,0x40,0x48,0x48,0x48,0x48,0xf8,0x48,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x10,0x10,0x14,0x55,0x59,0x52,0x95,0x19,0x11,0x11,0x29,0x25,0x45,0x80,0x0,0x40,0x40,0xa0,0xa0,0x10,0x10,0xe,0xf4,0x10,0x10,0x10,0x50,0x24,0x4,0xfc,0x0,
++0x10,0x10,0x17,0x10,0x54,0x54,0x58,0x91,0x13,0x15,0x11,0x29,0x25,0x45,0x41,0x81,0x0,0x4,0xfe,0x40,0x40,0x80,0x80,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x13,0x10,0x55,0x54,0x58,0x90,0x17,0x10,0x10,0x28,0x24,0x44,0x40,0x80,0x8,0x1c,0xe0,0x20,0x24,0xac,0xb0,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x10,0x10,0x13,0x54,0x54,0x58,0x90,0x11,0x10,0x10,0x28,0x24,0x44,0x43,0x80,0x40,0x20,0x24,0xfe,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x10,0x17,0x54,0x58,0x50,0x91,0x13,0x10,0x10,0x28,0x25,0x42,0x47,0x80,0x40,0x20,0x4,0xfe,0x40,0x40,0x80,0x8,0xf0,0x20,0x40,0x80,0x8,0x4,0xfc,0x4,
++0x1,0x2,0x4,0x8,0x3f,0x0,0x1f,0x10,0x10,0x1f,0x1,0x11,0x11,0x22,0xc,0x70,0x0,0x0,0x20,0x10,0xf8,0x0,0xf0,0x10,0x10,0xf0,0x8,0x10,0x20,0x80,0x60,0x1c,
++0x10,0x10,0x10,0x15,0x55,0x59,0x53,0x95,0x11,0x10,0x17,0x28,0x24,0x44,0x40,0x80,0xa0,0xa0,0xa0,0x24,0x28,0x30,0x64,0x1c,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x12,0x11,0x10,0x14,0x57,0x58,0x50,0x93,0x10,0x10,0x17,0x28,0x24,0x44,0x40,0x80,0x8,0x10,0xa0,0x8,0xfc,0x40,0x48,0xfc,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x10,0x13,0x10,0x14,0x57,0x59,0x51,0x91,0x17,0x10,0x11,0x29,0x25,0x45,0x41,0x81,0x8,0xfc,0x80,0x88,0xfc,0x8,0x8,0x8,0xfe,0x0,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x14,0x55,0x59,0x52,0x95,0x18,0x10,0x13,0x2a,0x26,0x46,0x43,0x82,0x40,0x40,0xa0,0xa0,0x10,0x90,0x48,0xf6,0x14,0x20,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x24,0x22,0x20,0x24,0xac,0xb4,0xa4,0x24,0x25,0x26,0x24,0x24,0x54,0x4c,0x84,0x4,0x4,0xfe,0x4,0x4,0x44,0x24,0xa4,0x84,0x94,0xac,0xa4,0xe4,0x4,0x4,0x14,0x8,
++0x10,0x10,0x10,0x14,0x57,0x5a,0x53,0x92,0x13,0x10,0x10,0x2b,0x24,0x44,0x40,0x80,0x48,0x7c,0x40,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x40,0x44,0xfe,0x40,0x40,0x40,0x40,
++0x1,0x11,0x11,0x11,0x22,0xc,0x30,0xc8,0x8,0x2a,0x2a,0x4d,0x14,0x12,0x20,0xc1,0x0,0x10,0x30,0x40,0x80,0x60,0x1e,0x24,0x20,0xa4,0xa8,0x30,0x50,0x48,0x8e,0x4,
++0x21,0x21,0x21,0x2f,0xa9,0xb1,0xa1,0x27,0x24,0x24,0x24,0x24,0x57,0x48,0x80,0x1,0x4,0x3e,0x24,0xe4,0x24,0x3c,0x24,0xa4,0xa4,0xbc,0xa4,0xa4,0xa4,0x44,0x94,0x8,
++0x10,0x13,0x12,0x12,0x57,0x5a,0x52,0x93,0x10,0x10,0x13,0x29,0x24,0x40,0x47,0x80,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x40,0x20,0xfc,0x8,0x88,0x90,0xfe,0x0,
++0x10,0x13,0x12,0x12,0x57,0x5a,0x52,0x93,0x10,0x1f,0x12,0x12,0x2a,0x26,0x43,0x82,0x8,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x0,0xfe,0x88,0x50,0x20,0x90,0xe,0x4,
++0x10,0x13,0x12,0x12,0x57,0x5a,0x52,0x93,0x12,0x12,0x12,0x17,0x2a,0x2a,0x42,0x82,0x44,0xbe,0x24,0x24,0xa4,0x42,0x0,0xbc,0x4,0x24,0x28,0x90,0x10,0x28,0x4e,0x84,
++0x8,0xb,0xa,0x13,0x30,0x5f,0x90,0x11,0x16,0x11,0x9,0x9,0x12,0x4,0x18,0x60,0x8,0xfc,0x8,0xf8,0x40,0xfe,0xe0,0x50,0x4e,0x40,0x10,0x20,0xc0,0x40,0x30,0xe,
++0x10,0x10,0x17,0x14,0x54,0x5b,0x50,0x93,0x12,0x13,0x12,0x2b,0x24,0x40,0x47,0x80,0x80,0x40,0xfe,0x2,0x4,0xf8,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x0,0x4,0xfe,0x0,
++0x10,0x10,0x13,0x12,0x56,0x5b,0x52,0x92,0x13,0x15,0x15,0x29,0x25,0x45,0x41,0x81,0x40,0x24,0xfe,0x4,0x4,0xfc,0x0,0x4,0xfe,0x54,0x54,0xfc,0x54,0x54,0x54,0xc,
++0x10,0x10,0x14,0x12,0x56,0x58,0x50,0x96,0x12,0x12,0x12,0x2a,0x26,0x45,0x88,0x0,0x8,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0xa4,0xa8,0x90,0xc8,0x84,0x6,0xfc,0x0,
++0x20,0x27,0x24,0x25,0xac,0xb5,0xa6,0x20,0x27,0x24,0x24,0x27,0x54,0x4c,0x87,0x4,0x84,0x7e,0x24,0x24,0xa4,0xa4,0x54,0x88,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x11,0x11,0x11,0x15,0x55,0x58,0x53,0x92,0x13,0x10,0x13,0x29,0x24,0x44,0x41,0x86,0xf8,0x8,0xf8,0x8,0xf8,0x0,0xfc,0x94,0xfc,0x0,0xfc,0x8,0x90,0x60,0x90,0xe,
++0x20,0x20,0x2f,0x21,0xa8,0xb7,0xa4,0x25,0x26,0x25,0x25,0x25,0x55,0x4c,0x84,0x4,0x80,0x44,0xfe,0x10,0xa4,0xfe,0xa4,0x14,0xc,0xf4,0x14,0x14,0xf4,0x4,0x14,0x8,
++0x0,0x3f,0x21,0x3f,0x20,0x3f,0x40,0x7f,0x95,0x24,0xd,0x11,0x11,0x22,0xc,0x70,0x8,0x8,0x8,0x8,0x7e,0x8,0x28,0xa8,0x8,0xa8,0x10,0x10,0x20,0x80,0x60,0x1c,
++0x20,0x2f,0x24,0x22,0xa8,0xb2,0xa4,0x20,0x23,0x22,0x22,0x23,0x52,0x4a,0x83,0x2,0x84,0xfe,0xa4,0x94,0x84,0x94,0xa4,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x20,0x20,0x27,0x24,0xad,0xb4,0xa7,0x24,0x25,0x26,0x24,0x2f,0x50,0x49,0x86,0x18,0x40,0x84,0xfe,0x44,0x54,0x44,0xfc,0x44,0x54,0x4c,0x44,0xfe,0xa0,0x10,0xe,0x4,
++0x10,0x17,0x12,0x11,0x57,0x59,0x52,0x94,0x1b,0x12,0x12,0x13,0x2a,0x26,0x43,0x82,0x1c,0xe0,0x48,0x50,0xfe,0x50,0x48,0x4e,0xfc,0x48,0x48,0xf8,0x48,0x48,0xf8,0x8,
++0x21,0x28,0x24,0x23,0xa8,0xb0,0xad,0x26,0x24,0x27,0x24,0x27,0x54,0x4a,0x91,0x0,0x4,0x88,0x0,0xfe,0x40,0xc0,0x24,0x68,0xb0,0x70,0xa8,0x26,0xa0,0x46,0xfc,0x0,
++0x4,0xfe,0x10,0x32,0xdc,0x28,0xdc,0x2a,0xd9,0x1,0x9,0x9,0x12,0x4,0x18,0xe0,0x4,0xfe,0x10,0x32,0xdc,0x28,0xdc,0x2a,0xd8,0x0,0x10,0x20,0x80,0x40,0x30,0xe,
++0x27,0x22,0x21,0x27,0xac,0xb7,0xa0,0x27,0x24,0x27,0x24,0x27,0x55,0x4d,0x86,0x4,0xfc,0x48,0x50,0xfc,0xa4,0xfc,0x0,0x88,0x88,0xfe,0x88,0xc8,0x28,0x8,0xa8,0x10,
++0x11,0x9,0x7f,0x48,0xbe,0x1c,0x2a,0x9,0x7f,0x2,0xd,0x39,0xc5,0x2,0x4,0x18,0x10,0x20,0xfe,0x22,0xfc,0x70,0xa8,0x20,0xfc,0x80,0x60,0x38,0x46,0x80,0x40,0x38,
++0x0,0x0,0x0,0x0,0x0,0x0,0x48,0x44,0x44,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x88,0x44,0x42,0x2,0x0,0x0,0x0,0x0,0x0,0x0,
++0x2,0x2,0x7f,0x2,0x3f,0x4,0xff,0x8,0x1f,0x24,0x42,0x80,0x0,0x24,0x22,0x42,0x0,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x20,0xfc,0x20,0x20,0xa0,0x40,0x88,0x44,0x44,
++0x0,0x78,0x48,0x49,0x4a,0x79,0x49,0x49,0x49,0x79,0x49,0x0,0x28,0x24,0x44,0x80,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x14,0x8,0x90,0x48,0x46,0x2,
++0x1,0x7f,0x1,0x3f,0x0,0x1f,0x10,0x1f,0x4,0xff,0x0,0x1f,0x10,0x1f,0x24,0x42,0x0,0xfc,0x0,0xf8,0x0,0xf0,0x10,0xf0,0x44,0xfe,0x0,0xf0,0x10,0xf0,0x88,0x44,
++0x2,0x1,0x3f,0x20,0x20,0x3f,0x21,0x21,0x3f,0x21,0x21,0x22,0x42,0x44,0x88,0x30,0x0,0x8,0xfc,0x8,0x8,0xf8,0x40,0x24,0xfe,0x0,0x0,0x80,0x80,0x60,0x1c,0x8,
++0x2,0x1,0x3f,0x20,0x20,0x3f,0x24,0x23,0x29,0x26,0x22,0x3f,0x40,0x40,0x80,0x0,0x0,0x8,0xfc,0x8,0x8,0xf8,0x20,0x20,0x20,0x24,0x3e,0xe0,0x20,0x20,0x20,0x20,
++0x2,0x1,0x3f,0x20,0x20,0x3f,0x20,0x2f,0x28,0x28,0x2b,0x2a,0x4a,0x4b,0x88,0x8,0x0,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,0x4,0x4,0xf4,0x14,0x14,0xf4,0x4,0x8,
++0x1,0x0,0x3f,0x20,0x3f,0x20,0x2f,0x28,0x2f,0x20,0x2f,0x28,0x4f,0x48,0x88,0x7,0x0,0x88,0xfc,0x8,0xf8,0x0,0xf0,0x10,0xf0,0x0,0xf8,0x88,0xf8,0x2,0x2,0xfe,
++0x1,0x0,0x3f,0x20,0x3f,0x22,0x22,0x3e,0x22,0x22,0x3e,0x22,0x42,0x5e,0x82,0x2,0x0,0x88,0xfc,0x8,0xf8,0x40,0x48,0x7c,0x40,0x50,0x78,0x40,0x48,0x7c,0x40,0x40,
++0x2,0x1,0x0,0x1f,0x0,0x1,0x1,0x3,0x5,0x9,0x11,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0xc0,0x80,0x0,0x0,0x80,0x40,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x20,0x13,0x2,0xfe,0xa,0x12,0x12,0x3b,0x56,0x92,0x12,0x12,0x12,0x12,0x11,0x10,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x20,0x10,0x3,0xfc,0x8,0x10,0x10,0x3b,0x54,0x90,0x10,0x11,0x11,0x12,0x14,0x18,0x8,0x7c,0xc0,0x40,0x40,0x40,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x10,0x8,0xe,0x4,
++0x20,0x10,0x0,0xfd,0x9,0x11,0x11,0x39,0x55,0x91,0x11,0x11,0x11,0x11,0x17,0x10,0x20,0x20,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x20,0x10,0x0,0xfc,0xb,0x10,0x10,0x38,0x57,0x90,0x10,0x10,0x11,0x12,0x17,0x10,0x40,0x40,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x40,0x40,0x80,0x10,0x8,0xfc,0x4,
++0x20,0x10,0x0,0xfb,0x8,0x10,0x10,0x38,0x57,0x92,0x12,0x12,0x12,0x12,0x13,0x12,0x40,0x40,0x44,0xfe,0x40,0x40,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x10,0x0,0xfb,0x8,0x10,0x10,0x39,0x55,0x91,0x12,0x12,0x14,0x18,0x11,0x12,0xa0,0x90,0x84,0xfe,0x80,0x80,0xf8,0x8,0x88,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x21,0x11,0x1,0xfd,0xa,0x14,0x10,0x38,0x54,0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x4,0xfe,0x80,0x80,0x88,0xfc,0x80,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,
++0x20,0x10,0x0,0xfc,0x9,0x12,0x10,0x38,0x54,0x90,0x11,0x11,0x12,0x10,0x10,0x10,0x80,0x80,0x80,0xfe,0x2,0x4,0x20,0x20,0xa8,0xa4,0x24,0x22,0x22,0x20,0xa0,0x40,
++0x20,0x10,0x3,0xfa,0xa,0x12,0x13,0x3a,0x56,0x92,0x12,0x12,0x12,0x13,0x12,0x10,0x8,0x3c,0xe0,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x50,0x90,0x4a,0x2a,0x4,
++0x20,0x13,0x0,0xfc,0xb,0x10,0x10,0x3b,0x56,0x92,0x12,0x13,0x12,0x10,0x10,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x24,0xf4,0x24,0x24,0x24,0xe4,0x24,0x4,0x14,0x8,
++0x20,0x10,0x0,0xfc,0xb,0x12,0x12,0x3a,0x56,0x92,0x12,0x12,0x10,0x10,0x11,0x16,0x40,0x48,0x7c,0x40,0xf8,0x8,0x48,0x48,0x48,0x48,0x48,0x48,0xa0,0x98,0xc,0x4,
++0x20,0x10,0x0,0xfc,0xa,0x11,0x10,0x38,0x55,0x92,0x14,0x10,0x11,0x11,0x12,0x14,0x20,0xa0,0xa0,0xa4,0xac,0xb0,0xa0,0xa0,0xb0,0xac,0xa4,0xa0,0x22,0x22,0x1e,0x0,
++0x21,0x11,0x7,0xf9,0x9,0x11,0x11,0x39,0x55,0x91,0x11,0x1f,0x10,0x11,0x12,0x14,0x10,0x10,0xfc,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x14,0xfe,0x0,0x10,0xc,0x4,
++0x21,0x10,0x0,0xfd,0x9,0x11,0x11,0x39,0x55,0x91,0x10,0x17,0x10,0x10,0x10,0x10,0x4,0x88,0x50,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x20,0x20,0x20,0x20,
++0x21,0x11,0x7,0xf9,0x17,0x11,0x17,0x39,0x55,0x90,0x17,0x10,0x10,0x10,0x13,0x14,0x0,0x4,0xfe,0x14,0xd4,0x14,0xd4,0x24,0x4c,0x40,0xfe,0x40,0x40,0xa0,0x1e,0x4,
++0x21,0x10,0x0,0xfb,0x8,0x10,0x11,0x38,0x54,0x90,0x13,0x10,0x12,0x12,0x14,0x10,0x4,0x88,0x50,0xfe,0x20,0x20,0xfc,0x20,0x20,0x24,0xfe,0x0,0xa4,0x52,0x52,0x0,
++0x20,0x17,0x0,0xff,0x8,0x13,0x1a,0x37,0x51,0x9f,0x10,0x13,0x12,0x12,0x13,0x12,0x40,0xfe,0x40,0xfc,0x0,0xf8,0x8,0xf8,0x10,0xfe,0x0,0xf8,0x8,0x8,0xf8,0x8,
++0x20,0x17,0x0,0xff,0xc,0x17,0x11,0x3b,0x55,0x93,0x11,0x1f,0x11,0x13,0x1d,0x11,0x40,0xfe,0x0,0xbc,0xa4,0xbc,0x10,0xf8,0x10,0xf8,0x10,0xfe,0x48,0x30,0x8e,0x4,
++0x0,0x7f,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0xa,0x29,0x28,0x48,0x88,0x7,0x0,0x4,0xfe,0x0,0x80,0x60,0x30,0x10,0x0,0x0,0x0,0x88,0x84,0x12,0x12,0xf0,0x0,
++0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x7f,0x0,0xa,0x29,0x28,0x48,0x88,0x7,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,0x0,0x88,0x84,0x12,0x12,0xf0,0x0,
++0x0,0x0,0x7e,0x3,0x24,0x14,0x8,0x14,0x22,0x40,0x2a,0x29,0x48,0x88,0x7,0x0,0x10,0x10,0x14,0xfe,0x10,0x90,0x50,0x10,0x50,0x20,0x8,0x84,0x92,0x12,0xf0,0x0,
++0x8,0x8,0x7f,0x8,0x3e,0x8,0x7f,0x8,0x8,0x0,0x2a,0x29,0x48,0x88,0x7,0x0,0x0,0x4,0x7e,0x24,0x24,0x24,0x44,0x54,0x88,0x0,0x8,0x84,0x92,0x12,0xf0,0x0,
++0x1,0x1,0x3f,0x1,0xff,0x1,0x3f,0x1,0xff,0x0,0x2a,0x29,0x48,0x88,0x7,0x0,0x0,0x10,0xf8,0x0,0xfe,0x0,0xf8,0x0,0xfe,0x0,0x8,0x84,0x92,0x12,0xf0,0x0,
++0x0,0xff,0x2,0x4,0x3f,0x24,0x24,0x24,0x24,0x0,0x2a,0x29,0x48,0x88,0x7,0x0,0x4,0xfe,0x0,0x8,0xfc,0x48,0x48,0x48,0x58,0x0,0x8,0x84,0x92,0x12,0xf0,0x0,
++0x8,0x8,0x17,0x10,0x30,0x5f,0x90,0x10,0x17,0x10,0x2a,0x29,0x48,0x88,0x7,0x0,0x8,0x1c,0xe0,0x40,0x44,0xfe,0x40,0x48,0xfc,0x0,0x8,0x84,0x92,0x12,0xf0,0x0,
++0x8,0x4,0x7f,0x1,0x1,0x3f,0x1,0x1,0xff,0x0,0x2a,0x29,0x48,0x88,0x7,0x0,0x20,0x48,0xfc,0x0,0x10,0xf8,0x0,0x4,0xfe,0x0,0x8,0x84,0x92,0x12,0xf0,0x0,
++0x40,0x30,0x10,0x5,0xa,0x10,0xe0,0x21,0x26,0x0,0x2a,0x29,0x48,0x88,0x7,0x0,0x80,0x80,0xfc,0x4,0x48,0x40,0xa0,0x10,0xe,0x0,0x8,0x84,0x92,0x12,0xf0,0x0,
++0x1,0x7f,0x1,0x3f,0x0,0x7f,0x40,0x8f,0x8,0x8,0x30,0xa,0x29,0x48,0x88,0x7,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x2,0xe4,0x20,0x28,0x38,0x0,0x84,0x92,0x12,0xf0,
++0x8,0x12,0x21,0x4c,0x12,0x30,0x51,0x96,0x12,0x10,0xa,0x29,0x28,0x48,0x88,0x7,0x8,0x7c,0x0,0x4,0xfe,0x88,0x8,0x8,0x28,0x10,0x0,0x88,0x84,0x12,0x12,0xf0,
++0x0,0x7e,0x42,0x7e,0x49,0x7e,0x48,0x49,0x65,0x42,0x0,0x2a,0x29,0x48,0x88,0x7,0x40,0x40,0x44,0xfe,0x48,0x28,0x10,0x28,0x4e,0x84,0x0,0x8,0x84,0x92,0x12,0xf0,
++0x3f,0x22,0x2f,0x22,0x3f,0x22,0x27,0x2a,0x23,0x20,0x3f,0xa,0x29,0x48,0x88,0x7,0xfc,0x20,0xf8,0xa0,0xfc,0x0,0xf0,0x10,0xf0,0x0,0xfc,0x0,0x84,0x92,0x12,0xf0,
++0xe,0x78,0x8,0xff,0x8,0x3e,0x22,0x22,0x22,0x3e,0x0,0x2a,0x29,0x48,0x88,0x7,0x20,0x24,0xfe,0x84,0xfc,0x84,0xfc,0x84,0xfc,0x84,0x0,0x8,0x84,0x92,0x12,0xf0,
++0x8,0xff,0x0,0x7e,0x43,0x7e,0x0,0x7f,0x4,0xff,0x8,0x1a,0x51,0x50,0x90,0xf,0x40,0x40,0x44,0xfe,0x4,0x44,0x28,0x10,0x28,0x46,0x84,0x0,0x84,0x92,0x12,0xf0,
++0x10,0x17,0x12,0xf9,0x17,0x39,0x33,0x55,0x91,0x13,0x0,0x2a,0x29,0x48,0x88,0x7,0x10,0xd0,0x94,0x7e,0xd0,0x58,0x34,0x52,0x90,0x10,0x0,0x8,0x84,0x92,0x12,0xf0,
++0x41,0x2f,0x11,0x87,0x61,0x2f,0x15,0x26,0xe4,0x24,0x0,0x2a,0x29,0x48,0x88,0x7,0x10,0xfe,0x10,0xfc,0x10,0xfc,0x14,0xac,0x44,0xc,0x0,0x8,0x84,0x92,0x12,0xf0,
++0x8,0xff,0x14,0xff,0x22,0x3e,0x22,0x3e,0x8,0x7f,0x8,0xa,0x51,0x50,0x90,0xf,0x40,0x7e,0xa8,0x10,0xee,0x0,0x7c,0x44,0x54,0x54,0x28,0x44,0x84,0x92,0x12,0xf0,
++0x1,0x1,0x3f,0x1,0xff,0x1,0x3f,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x8,0xfc,0x8,0xfe,0x8,0xf8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x1,0x1,0x3f,0x1,0xff,0x1,0x3f,0x1,0x7f,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x0,0x8,0xfc,0x8,0xfe,0x8,0xf8,0x0,0xfc,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,
++0x1,0x1,0x7d,0x5,0x9,0x11,0x25,0xc2,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0x8,0x18,0xa0,0x40,0x30,0xe,0x4,0xf0,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x22,0x11,0x9,0x0,0x7f,0x41,0x81,0x1,0x3d,0x5,0x9,0x11,0x21,0xc1,0x5,0x2,0x8,0x18,0x20,0x40,0xfe,0x2,0x4,0x10,0xa0,0x40,0x20,0x10,0xe,0x4,0x0,0x0,
++0x1,0x1,0x7d,0x5,0x9,0x11,0x25,0x42,0x8,0x9,0xfa,0x1c,0x2c,0xcb,0x28,0x10,0x8,0x10,0xa0,0xc0,0x40,0x30,0xe,0x4,0x20,0x24,0xe8,0x70,0xa8,0x26,0xa4,0x40,
++0x4,0xfe,0x10,0x10,0x20,0x24,0x3e,0x64,0xa4,0x24,0x24,0x24,0x25,0x3d,0x22,0x4,0x8,0xfc,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0xa,0xa,0x6,0x0,
++0x4,0xfd,0x10,0x10,0x20,0x20,0x3c,0x67,0xa4,0x24,0x24,0x24,0x24,0x3c,0x20,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x1,0xfe,0x10,0x20,0x20,0x21,0x7c,0xa4,0x24,0x24,0x24,0x25,0x3d,0x22,0x0,0x0,0xf8,0x10,0x20,0x40,0x84,0xfe,0x54,0x54,0x54,0x94,0xa4,0x24,0x44,0x54,0x88,
++0x1,0x7f,0x1,0x3f,0x1,0x7f,0x1,0xff,0x4,0x4,0xf,0x18,0x28,0xc8,0xf,0x8,0x0,0xfc,0x0,0xf8,0x0,0xfc,0x0,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x4,0xfe,0x13,0x10,0x20,0x21,0x3d,0x67,0xa4,0x24,0x24,0x27,0x24,0x3c,0x20,0x0,0x40,0x48,0xfc,0x80,0xa0,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x4,0xfe,0x11,0x10,0x21,0x21,0x3d,0x65,0xa5,0x25,0x25,0x24,0x24,0x3c,0x20,0x0,0x20,0x24,0xfe,0x20,0x24,0x24,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x22,0x1e,0x0,
++0x4,0xfe,0x10,0x10,0x20,0x21,0x3d,0x64,0xa4,0x24,0x24,0x24,0x25,0x3e,0x24,0x0,0x4,0xfe,0x8,0x88,0x88,0x8,0xfe,0x28,0x28,0x48,0x48,0x88,0x8,0x8,0x28,0x10,
++0x4,0xfe,0x11,0x11,0x21,0x21,0x3d,0x65,0xa5,0x25,0x25,0x25,0x3d,0x21,0x2,0x4,0x0,0x1c,0xe0,0x0,0x0,0x4,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x4,0xfe,0x13,0x10,0x20,0x24,0x3f,0x64,0xa4,0x24,0x24,0x24,0x25,0x3f,0x22,0x0,0x8,0x3c,0xc0,0x40,0x20,0x20,0xfc,0x8,0x10,0x20,0x40,0x80,0x0,0x0,0x86,0x7c,
++0x4,0xff,0x12,0x12,0x23,0x22,0x3a,0x6a,0xaa,0x2a,0x2a,0x2a,0x3b,0x24,0x8,0x10,0x8,0xfc,0x8,0x8,0x18,0x98,0xa8,0xa8,0x48,0x48,0xa8,0x98,0x1a,0xa,0xa,0x4,
++0x4,0xfe,0x10,0x11,0x20,0x20,0x3c,0x67,0xa4,0x24,0x24,0x24,0x25,0x3d,0x20,0x0,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x40,0x80,0x8,0xfc,0x4,0x0,
++0x4,0xfe,0x13,0x10,0x20,0x20,0x3d,0x65,0xa4,0x24,0x24,0x24,0x24,0x3c,0x21,0x6,0x88,0x88,0xfe,0x88,0x88,0x0,0x4,0x4,0x88,0x88,0x50,0x20,0x50,0x88,0xe,0x4,
++0x8,0xff,0x12,0x12,0x23,0x22,0x3a,0x6a,0xaa,0x2a,0x2a,0x2a,0x3a,0x24,0x9,0x12,0x8,0xfc,0x0,0x4,0xfe,0x40,0x44,0x7e,0x44,0x44,0x44,0x84,0x84,0x84,0x28,0x10,
++0x4,0x4,0x7f,0x5,0x5,0x9,0x37,0xc1,0x0,0xff,0x4,0xf,0x18,0x28,0xcf,0x8,0x40,0x28,0xfc,0x0,0x30,0xc4,0x4,0xfc,0x4,0xfe,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x4,0xfe,0x10,0x10,0x21,0x22,0x3c,0x64,0xa4,0x24,0x24,0x24,0x24,0x3c,0x20,0x0,0x80,0x80,0x84,0xfe,0x40,0x40,0x48,0x7c,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0x40,
++0x4,0xfe,0x10,0x10,0x20,0x25,0x3e,0x64,0xa5,0x24,0x24,0x24,0x24,0x3c,0x23,0x0,0x20,0x20,0x50,0x50,0x88,0x4,0x2,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x4,0xfe,0x11,0x11,0x21,0x21,0x3d,0x65,0xa5,0x25,0x25,0x25,0x25,0x3d,0x21,0x0,0x8,0x1c,0xe0,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x10,0x50,0x4a,0xaa,0x4,
++0x4,0xfe,0x10,0x13,0x20,0x20,0x3d,0x65,0xa4,0x24,0x24,0x24,0x24,0x3c,0x27,0x0,0x40,0x20,0x24,0xfe,0x0,0x8,0x8,0x8,0x90,0x90,0x90,0x90,0x20,0x24,0xfe,0x0,
++0x4,0xfe,0x10,0x13,0x22,0x24,0x3e,0x64,0xa4,0x24,0x24,0x24,0x24,0x3c,0x20,0x0,0x40,0x20,0x20,0xfe,0x2,0x84,0x80,0x88,0x98,0xa0,0xc0,0x80,0x82,0x82,0x7e,0x0,
++0x0,0x0,0xfc,0x13,0x20,0x20,0x23,0x7a,0xaa,0x2b,0x28,0x28,0x28,0x38,0x1,0x2,0x90,0x90,0x94,0xfe,0x94,0x94,0xfc,0x90,0x90,0xfe,0x92,0x92,0x9a,0x94,0x10,0x10,
++0x8,0xff,0x12,0x12,0x22,0x22,0x3a,0x6f,0xaa,0x2a,0x2a,0x2a,0x3a,0x22,0x4,0x8,0x44,0xe4,0x44,0x54,0x54,0x54,0x54,0xf4,0x54,0x54,0x54,0x54,0x44,0x44,0x54,0x48,
++0x4,0xfe,0x13,0x10,0x20,0x20,0x3c,0x67,0xa5,0x25,0x25,0x25,0x25,0x3d,0x20,0x0,0x88,0x88,0xfe,0x88,0x88,0x20,0x24,0xfe,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,
++0x8,0xfc,0x17,0x10,0x22,0x21,0x39,0x68,0xaf,0x28,0x28,0x29,0x29,0x3a,0x24,0x8,0x40,0x48,0xfc,0x40,0x48,0x48,0x50,0x44,0xfe,0xa0,0xa0,0x10,0x10,0x8,0xe,0x4,
++0x4,0xfe,0x10,0x13,0x20,0x20,0x3c,0x65,0xa4,0x27,0x24,0x24,0x24,0x3d,0x21,0x6,0x40,0x48,0x7c,0xc0,0x28,0x12,0x6a,0x86,0x0,0xfc,0x90,0x90,0x90,0x12,0x12,0xe,
++0x4,0x4,0x27,0x24,0x24,0x3f,0xe0,0x0,0x7f,0x4,0x8,0x1f,0x28,0xc8,0xf,0x8,0x40,0x40,0x4c,0x70,0x42,0x42,0x3e,0x0,0xfc,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,
++0x8,0xff,0x12,0x12,0x22,0x22,0x3a,0x6a,0xaa,0x2a,0x2a,0x2a,0x2a,0x3a,0x22,0x2,0x4,0xfe,0x4,0x4,0xf4,0x4,0x4,0xf4,0x94,0x94,0x94,0xf4,0x94,0x4,0x14,0x8,
++0x4,0xfe,0x10,0x11,0x21,0x21,0x3d,0x65,0xa5,0x25,0x25,0x25,0x25,0x3d,0x21,0x1,0x20,0x20,0x44,0xfe,0x4,0x8c,0x54,0x54,0x24,0x54,0x4c,0x8c,0x4,0x4,0xfc,0x4,
++0x0,0x4,0xfe,0x11,0x21,0x22,0x20,0x7c,0xa4,0x25,0x27,0x25,0x25,0x3d,0x21,0x1,0x80,0x88,0xfc,0x8,0x88,0x50,0x20,0x50,0x8e,0x4,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x4,0xfe,0x13,0x10,0x20,0x23,0x3c,0x64,0xa4,0x24,0x27,0x24,0x24,0x3c,0x22,0x1,0x10,0x58,0x94,0x94,0x90,0xfe,0x90,0x90,0xb4,0xd4,0x98,0x90,0xaa,0xca,0x8a,0x4,
++0x8,0xfc,0x13,0x10,0x21,0x24,0x3f,0x64,0xa5,0x25,0x25,0x25,0x25,0x3c,0x20,0x3,0x20,0x24,0xfe,0x20,0xfc,0x20,0xfe,0x0,0xfc,0x4,0x24,0x24,0x24,0x58,0x84,0x2,
++0x4,0xfe,0x10,0x10,0x20,0x25,0x3e,0x64,0xa4,0x24,0x24,0x24,0x24,0x3c,0x20,0x0,0x60,0x50,0x44,0xfe,0x90,0x90,0x90,0xfc,0x90,0x90,0xfc,0x90,0x90,0x94,0xfe,0x80,
++0x4,0xfe,0x13,0x10,0x21,0x20,0x3c,0x67,0xa4,0x25,0x25,0x25,0x25,0x3d,0x21,0x1,0x40,0x28,0xfc,0x0,0x8,0x90,0x4,0xfe,0x0,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x4,0xfe,0x13,0x12,0x24,0x21,0x3c,0x64,0xa5,0x25,0x25,0x25,0x25,0x3d,0x22,0x4,0x40,0x20,0xfe,0x2,0x4,0xfc,0x20,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0xa6,0x7c,
++0x8,0xfc,0x11,0x13,0x20,0x27,0x38,0x69,0xaa,0x2d,0x28,0x28,0x2b,0x38,0x20,0x3,0x40,0x90,0x8,0xfc,0x40,0xfe,0x90,0x28,0x46,0x94,0x20,0xc8,0x10,0x20,0xc0,0x0,
++0x4,0xff,0x10,0x11,0x20,0x23,0x3c,0x65,0xa5,0x25,0x27,0x25,0x25,0x3d,0x20,0x0,0x20,0xfc,0x20,0xfc,0x20,0xfe,0x0,0xfc,0x44,0x24,0xfe,0x44,0x24,0xfe,0x4,0x18,
++0x8,0xfd,0x11,0x11,0x21,0x29,0x3d,0x69,0xaa,0x2c,0x2a,0x2b,0x2a,0x3b,0x20,0x0,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x44,0x44,0xb4,0x14,0x4,0xfc,0x4,0x8,
++0x4,0xfe,0x11,0x10,0x20,0x23,0x3e,0x64,0xa5,0x25,0x25,0x25,0x25,0x3c,0x20,0x0,0x40,0x24,0xfe,0x88,0x50,0xfe,0x22,0x24,0xfe,0x24,0x24,0x34,0x28,0x20,0x20,0x20,
++0x4,0xfe,0x13,0x12,0x24,0x21,0x3c,0x65,0xa5,0x25,0x25,0x25,0x24,0x3c,0x23,0x0,0x40,0x20,0xfe,0x2,0x4,0xfc,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x0,0x4,0xfe,0x0,
++0x8,0xfc,0x13,0x12,0x22,0x23,0x3a,0x6a,0xab,0x2b,0x2b,0x2d,0x29,0x39,0x21,0x1,0x40,0x24,0xfe,0x4,0x4,0xfc,0x0,0x4,0xfe,0x54,0x54,0xfc,0x54,0x54,0x54,0xc,
++0x9,0xfd,0x11,0x12,0x26,0x21,0x39,0x6a,0xa8,0x2f,0x28,0x28,0x29,0x3a,0x2c,0x0,0x8,0x8,0xfc,0x48,0xa8,0x3e,0x8,0x48,0x44,0xfe,0xc0,0xe0,0x50,0x4e,0x44,0x40,
++0x8,0xfc,0x17,0x11,0x22,0x24,0x39,0x6b,0xa8,0x28,0x29,0x2b,0x2d,0x39,0x21,0x1,0x40,0x24,0xfe,0x8,0x46,0x92,0x8,0xfc,0x80,0x88,0x50,0x20,0x10,0x48,0x8e,0x4,
++0x5,0xfe,0x10,0x10,0x21,0x23,0x3d,0x64,0xa5,0x24,0x27,0x24,0x24,0x3d,0x22,0x0,0xfc,0x88,0x70,0x88,0x6,0xfc,0x54,0x88,0x54,0x22,0xfe,0x70,0xa8,0x26,0x20,0x20,
++0x8,0x7f,0x8,0x3e,0x0,0x7f,0x49,0x7f,0x40,0x40,0xbf,0x4,0xf,0x18,0x68,0xf,0x78,0x48,0x48,0x48,0x86,0x78,0x48,0x30,0x48,0x86,0xfc,0x0,0xf0,0x10,0x10,0xf0,
++0xa,0xff,0x11,0x14,0x22,0x20,0x39,0x6a,0xaa,0x28,0x2f,0x28,0x29,0x3a,0x24,0x0,0x4,0x7e,0x40,0x7c,0x44,0xfc,0x40,0x7e,0x40,0x44,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x9,0xfd,0x17,0x10,0x27,0x24,0x3f,0x68,0xaf,0x28,0x29,0x29,0x2f,0x39,0x25,0x2,0x10,0x10,0xd0,0x1e,0xe4,0x44,0xd4,0x14,0xd4,0x94,0x8,0xc8,0x14,0x14,0x22,0x40,
++0x8,0xff,0x10,0x12,0x21,0x21,0x3b,0x6c,0xab,0x2a,0x2a,0x2b,0x29,0x38,0x27,0x0,0x20,0xa8,0xb0,0xa4,0x18,0x10,0xf8,0x6,0xf8,0x8,0x8,0xf8,0x10,0xa4,0xfe,0x0,
++0xb,0xfc,0x11,0x11,0x21,0x25,0x3f,0x64,0xa5,0x25,0x25,0x25,0x25,0x3c,0x23,0x0,0xfe,0x0,0xfc,0x24,0xfc,0x24,0xfe,0x0,0xfc,0x24,0xfc,0x24,0xfc,0x0,0xfe,0x0,
++0x1,0xff,0x21,0x22,0x23,0x44,0x7b,0xd6,0x55,0x58,0x57,0x50,0x51,0x72,0x44,0x0,0x10,0xfe,0x10,0x20,0xbc,0xa4,0x18,0x8,0xf4,0x2,0xfc,0x40,0x50,0x4c,0x44,0xc0,
++0x1,0xff,0x21,0x27,0x24,0x49,0x70,0xd7,0x50,0x51,0x56,0x50,0x57,0x70,0x47,0x0,0x10,0xfe,0x10,0xfe,0x2,0xf4,0x0,0xfc,0x80,0x48,0x70,0xb0,0x68,0xa6,0x20,0x60,
++0x1,0xff,0x21,0x2b,0x24,0x41,0x79,0xd5,0x55,0x51,0x55,0x57,0x54,0x78,0x48,0x0,0x10,0xfe,0x28,0xfe,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x24,0xfe,0x88,0x48,0x8,0x18,
++0x1,0x2,0xc,0x3f,0xc0,0x1f,0x10,0x1f,0x2,0xff,0x2,0x4,0x4,0x9,0x12,0x60,0x0,0x80,0x60,0xf8,0x6,0xf0,0x10,0xf0,0x24,0xfe,0x80,0xa0,0xc0,0x84,0x84,0x7c,
++0x4,0x24,0x14,0x4,0xff,0x9,0x5,0x3f,0x21,0x21,0x23,0x25,0x29,0x21,0x21,0x21,0x40,0x48,0x50,0x44,0xfe,0x20,0x48,0xfc,0x8,0x8,0x88,0x68,0x28,0x8,0x28,0x10,
++0x14,0x55,0x36,0x14,0xff,0x49,0x2a,0x7f,0x49,0x49,0x5d,0x6b,0x49,0x49,0x49,0x43,0x20,0x28,0x24,0x24,0xfe,0x20,0x20,0x3c,0x54,0x54,0x54,0x48,0x54,0x94,0x24,0x42,
++0x28,0xaa,0x6c,0x29,0xfe,0x54,0x39,0x7d,0x55,0x55,0x7d,0x55,0x55,0x55,0x55,0x45,0x20,0x28,0x24,0xfe,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x24,0x2c,
++0x0,0x5,0x7e,0x44,0x44,0x7c,0x44,0x47,0x7c,0x44,0x44,0x44,0x7c,0x44,0x0,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x3,0x7c,0x45,0x45,0x7d,0x45,0x45,0x7d,0x44,0x44,0x44,0x7c,0x44,0x0,0x0,0x4,0xfe,0x20,0x20,0x24,0x3e,0x24,0x24,0xfc,0x4,0x4,0x4,0x4,0x44,0x28,0x10,
++0x0,0x1,0x7d,0x45,0x45,0x7d,0x45,0x45,0x7d,0x45,0x45,0x45,0x7d,0x45,0x1,0x0,0x4,0xfe,0x0,0x4,0x84,0x48,0x28,0x10,0x28,0x28,0x44,0x84,0x0,0x4,0xfe,0x0,
++0x0,0x0,0x78,0x4f,0x48,0x7a,0x4a,0x4a,0x7a,0x4a,0x4b,0x48,0x78,0x48,0x0,0x0,0x40,0x40,0x44,0xfe,0x40,0x48,0x48,0x48,0x48,0x48,0xf8,0x48,0x42,0x42,0x3e,0x0,
++0x0,0x8,0x7c,0x48,0x49,0x79,0x4a,0x4a,0x7c,0x48,0x48,0x48,0x78,0x48,0x3,0xc,0x40,0x40,0x40,0x40,0x50,0x48,0x46,0x4a,0x48,0x50,0x50,0x20,0x40,0x80,0x0,0x0,
++0x0,0x8,0x7c,0x4b,0x4a,0x7c,0x48,0x48,0x78,0x48,0x48,0x48,0x79,0x49,0x2,0xc,0x40,0x40,0x40,0xfe,0x42,0x44,0x40,0x40,0x60,0xa0,0xa0,0xa0,0x22,0x22,0x1e,0x0,
++0x11,0x11,0x1f,0x21,0x5f,0x1,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x0,0x10,0xf8,0x0,0xf0,0x4,0xfe,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x10,0x1e,0x12,0x32,0x4a,0x4,0x8,0x30,0xdf,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x8,0xfc,0x88,0x88,0xa8,0x90,0x82,0x7e,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x0,0x4,0x7e,0x44,0x44,0x7d,0x47,0x44,0x7c,0x45,0x45,0x45,0x7d,0x45,0x1,0x1,0x20,0x20,0x40,0x40,0x88,0x4,0xfe,0x2,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0x0,0x7d,0x44,0x44,0x7c,0x47,0x44,0x7c,0x44,0x45,0x44,0x7c,0x44,0x3,0x0,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x8,0x7c,0x48,0x4a,0x7a,0x4a,0x4a,0x7a,0x4a,0x4a,0x4a,0x7a,0x4b,0x6,0x0,0x10,0x90,0x90,0x90,0x90,0x92,0xf6,0x98,0x90,0x90,0x90,0x90,0xf2,0x92,0x1e,0x0,
++0x0,0x4,0x7e,0x45,0x46,0x7c,0x44,0x44,0x7f,0x44,0x44,0x45,0x7c,0x44,0x0,0x3,0x40,0x40,0xfc,0x8,0x90,0x60,0x40,0xa0,0x3e,0x42,0x84,0x44,0x28,0x10,0x60,0x80,
++0x0,0x8,0x7c,0x49,0x4b,0x78,0x49,0x49,0x7a,0x48,0x4f,0x48,0x78,0x48,0x0,0x0,0x40,0x40,0x90,0x8,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x0,0x0,0x78,0x4f,0x48,0x7a,0x49,0x48,0x7f,0x48,0x48,0x49,0x79,0x4a,0x4,0x0,0x40,0x40,0x48,0xfc,0x40,0x48,0x50,0x64,0xfe,0xc0,0xe0,0x50,0x48,0x4e,0x44,0x40,
++0x0,0x8,0x7c,0x49,0x4a,0x7c,0x49,0x48,0x7a,0x4a,0x49,0x49,0x79,0x48,0x7,0x0,0x40,0x40,0xa0,0x10,0xe,0x24,0xf0,0x0,0x48,0x48,0x48,0x50,0x50,0x24,0xfe,0x0,
++0x2,0x9,0x7c,0x4b,0x48,0x78,0x4b,0x4a,0x7a,0x4b,0x48,0x49,0x7a,0x44,0x0,0x0,0x8,0x10,0xa0,0xf8,0x48,0x48,0xf8,0x40,0x44,0xfe,0xc4,0x44,0x54,0x48,0x40,0x40,
++0x0,0x8,0x7c,0x49,0x4b,0x78,0x49,0x4a,0x78,0x49,0x49,0x4a,0x7c,0x48,0x1,0x6,0x40,0x40,0x90,0x8,0xfc,0x90,0xc,0x84,0xf8,0x8,0x10,0xa0,0x40,0xa0,0x18,0x6,
++0x0,0xb,0x7e,0x4a,0x4a,0x7a,0x4a,0x4b,0x7a,0x4a,0x4a,0x4a,0x7a,0x42,0x5,0x8,0x4,0xfe,0x20,0x20,0xf8,0x20,0x20,0xfc,0x20,0x20,0xf8,0x20,0x20,0x24,0xfe,0x0,
++0x0,0x7d,0x45,0x45,0x45,0x7d,0x45,0x45,0x7d,0x44,0x44,0x44,0x7c,0x41,0x2,0xc,0x44,0x9e,0x4,0x4,0xdc,0x4,0x4,0xfc,0x54,0x50,0x50,0x90,0x92,0x12,0xe,0x0,
++0x0,0x8,0x7c,0x49,0x49,0x7b,0x4d,0x49,0x79,0x49,0x49,0x49,0x79,0x49,0x1,0x1,0xc0,0xa0,0x84,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x0,0x8,0x7f,0x4a,0x4a,0x7b,0x4a,0x4a,0x7b,0x48,0x49,0x4f,0x78,0x48,0x0,0x0,0x40,0x84,0xfe,0x44,0x44,0xfc,0x44,0x44,0xfc,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x1,0x1,0x41,0x7f,0x40,0x9f,0x9,0x32,0xc,0x3f,0xd0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0xf8,0x0,0xfe,0x2,0xf4,0x20,0x98,0x60,0xf0,0x1e,0xf0,0x10,0xf0,0x10,0xf0,
++0x0,0x7d,0x45,0x45,0x45,0x7d,0x45,0x45,0x7c,0x47,0x44,0x44,0x7c,0x44,0x1,0x6,0x24,0xae,0x24,0x24,0xac,0x24,0x24,0xfc,0x20,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x0,0x3,0x78,0x4a,0x49,0x79,0x4a,0x4d,0x78,0x48,0x4b,0x48,0x78,0x48,0x1,0x6,0x28,0xb0,0xa4,0xa8,0x10,0x8,0xe,0xf4,0x40,0x48,0xfc,0x40,0xa0,0xa0,0x1c,0x8,
++0x7e,0x24,0x18,0xfe,0x2b,0x28,0x48,0x89,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x40,0x44,0x7e,0x88,0x50,0x20,0x50,0x8e,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x0,0x0,0x7b,0x48,0x4f,0x78,0x49,0x4b,0x78,0x4b,0x4a,0x4a,0x7a,0x4a,0x7,0x0,0x40,0x48,0xfc,0x40,0xfe,0x80,0x10,0xf8,0x0,0xfc,0x94,0x94,0x94,0x94,0xfe,0x0,
++0x0,0x7b,0x4a,0x4c,0x49,0x79,0x49,0x49,0x79,0x48,0x48,0x4f,0x78,0x48,0x1,0x2,0x0,0xfe,0x2,0x4,0xf8,0x8,0xf8,0x8,0xf8,0x40,0x24,0xfe,0x0,0x88,0x6,0x2,
++0x0,0x7,0x78,0x48,0x4b,0x7a,0x4a,0x4b,0x78,0x49,0x48,0x4f,0x79,0x4a,0x4,0x0,0x4,0xfe,0x90,0x94,0xfe,0x94,0x94,0xfc,0x0,0xf8,0x0,0xfe,0x50,0x4c,0x44,0xc0,
++0x0,0x9,0x7c,0x48,0x4b,0x7a,0x4d,0x49,0x79,0x49,0x48,0x49,0x78,0x48,0x3,0x0,0x20,0x24,0xa8,0x20,0xfe,0x2,0xfc,0x4,0x4,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x0,0xb,0x7c,0x48,0x4f,0x7a,0x4a,0x4b,0x7a,0x4a,0x4b,0x4a,0x7a,0x4f,0x0,0x0,0x10,0x90,0x90,0x9e,0xe4,0x54,0x54,0xd4,0x54,0x4c,0xc8,0x54,0xf4,0x54,0x62,0x40,
++0x0,0x2,0x79,0x4f,0x49,0x7a,0x4c,0x4a,0x7b,0x4a,0x4a,0x4d,0x79,0x42,0x4,0x0,0x40,0x48,0x50,0xfe,0x50,0x48,0x46,0x8,0xbc,0xa8,0xa8,0x28,0x7e,0x8,0x8,0x8,
++0x8,0xff,0x8,0x7f,0x22,0x3e,0x14,0x1f,0xf0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x10,0xfe,0x10,0x7c,0x44,0x28,0x10,0x28,0x46,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf0,
++0x0,0x3,0x7c,0x54,0x54,0x54,0x54,0x7c,0x54,0x54,0x54,0x54,0x7c,0x44,0x0,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x0,0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x0,0xff,0x8,0x8,0x8,0x8,0x10,0x20,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,
++0x0,0x4,0x7e,0x54,0x54,0x57,0x54,0x7c,0x54,0x54,0x54,0x55,0x7d,0x42,0x4,0x8,0x40,0x60,0x50,0x50,0x44,0xfe,0x40,0x40,0x40,0xa0,0xa0,0x10,0x10,0x8,0xe,0x4,
++0x0,0x4,0x7e,0x54,0x54,0x55,0x56,0x7c,0x54,0x54,0x54,0x54,0x7c,0x44,0x1,0x2,0x40,0x40,0x40,0x84,0xfe,0x8,0x88,0x88,0x50,0x50,0x20,0x50,0x50,0x88,0x6,0x4,
++0x0,0x4,0x7f,0x55,0x55,0x55,0x55,0x7d,0x55,0x55,0x55,0x55,0x7e,0x42,0x4,0x1,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x4,0x44,0x48,0x28,0x28,0x10,0x28,0x28,0x44,0x82,
++0x0,0x4,0x7e,0x54,0x55,0x56,0x54,0x7c,0x57,0x54,0x54,0x55,0x7c,0x44,0x0,0x3,0x40,0x40,0xa0,0xa0,0x18,0x16,0x20,0xc8,0x10,0x20,0x44,0x88,0x10,0x20,0xc0,0x0,
++0x1,0x2,0xc,0x17,0xe0,0x1f,0x9,0x11,0x25,0x2,0x1f,0x11,0x1f,0x11,0x1f,0x10,0x0,0x80,0x60,0xd0,0xe,0xf0,0x20,0x18,0x8,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x0,0x4,0x7f,0x56,0x55,0x55,0x55,0x7d,0x55,0x56,0x54,0x54,0x7c,0x45,0x2,0x4,0x40,0x20,0xfe,0x2,0x4,0xde,0x54,0x54,0x54,0xd4,0x5c,0x94,0x90,0x12,0xe,0x0,
++0x0,0x5,0x7e,0x54,0x57,0x54,0x55,0x7d,0x55,0x55,0x55,0x54,0x7d,0x44,0x3,0x0,0x20,0xfc,0x88,0x50,0xfe,0x0,0xfc,0x24,0xfc,0x24,0xfc,0x20,0xfc,0x20,0xfe,0x0,
++0x0,0x3f,0x24,0x24,0x24,0x3f,0x0,0xff,0x0,0x1,0x3,0x5,0x19,0x61,0x1,0x1,0x8,0xfc,0x48,0x48,0x48,0xf8,0x4,0xfe,0x80,0x0,0x0,0x60,0x18,0x4,0x0,0x0,
++0x0,0x3f,0x24,0x24,0x24,0x3f,0x0,0x3f,0x1,0x11,0x11,0x11,0x11,0x11,0xff,0x0,0x8,0xfc,0x48,0x48,0x48,0xf8,0x0,0xfc,0x0,0x10,0xf8,0x0,0x0,0x4,0xfe,0x0,
++0x0,0x7f,0x44,0x44,0x7f,0x1,0x1,0xff,0x1,0x1,0x1f,0x10,0x10,0x10,0x1f,0x10,0x4,0xfe,0x44,0x44,0xfc,0x0,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x0,0x7f,0x44,0x44,0x7f,0x1,0xff,0x0,0x3f,0x0,0x3f,0x0,0x1f,0x10,0x10,0x1f,0x4,0xfe,0x44,0x44,0xfc,0x0,0xfe,0x0,0xf8,0x0,0xf8,0x0,0xf0,0x10,0x10,0xf0,
++0x0,0x7f,0x44,0x44,0x7f,0x2,0xff,0x4,0x9,0x3f,0xd1,0x1f,0x11,0x1f,0x1,0x0,0x4,0xfe,0x44,0x44,0xfc,0x0,0xfe,0x40,0x20,0xf8,0x16,0xf0,0x10,0xf4,0x4,0xfc,
++0x0,0x7f,0x44,0x44,0x7f,0x1,0x3f,0x1,0xff,0x2,0x4,0x1f,0x0,0x24,0x22,0x42,0x4,0xfe,0x44,0x44,0xfc,0x0,0xf8,0x0,0xfe,0x0,0x20,0xf0,0x0,0x88,0x44,0x44,
++0x0,0x7f,0x44,0x44,0x7f,0x1,0xff,0x1,0x3f,0x24,0x2f,0x21,0x3f,0x21,0x21,0x20,0x4,0xfe,0x44,0x44,0xfc,0x0,0xfe,0x8,0xfc,0x48,0xe8,0x8,0xf8,0x8,0x28,0x10,
++0x0,0x7f,0x44,0x44,0x7f,0x11,0x11,0x5b,0x52,0x97,0x1a,0x13,0x12,0x12,0x13,0x12,0x4,0xfe,0x44,0x44,0xfc,0x40,0x24,0xfe,0x20,0xfc,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x0,0x7f,0x44,0x7f,0x22,0xff,0x22,0x3e,0x8,0x7f,0x49,0x7f,0x8,0xff,0x8,0x8,0x4,0xfe,0x44,0xfc,0x0,0xf8,0x8,0x48,0x48,0x48,0x7c,0x4,0xf4,0x4,0x14,0x8,
++0x0,0x3f,0x24,0x3f,0x8,0x7f,0x51,0x49,0x7f,0x40,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x8,0xfc,0x48,0xf8,0x20,0xfc,0x14,0x24,0xfc,0x4,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x1,0x1,0x3f,0x1,0x1,0x7f,0x4,0x8,0x1f,0x0,0x3f,0x24,0x24,0x24,0xff,0x0,0x0,0x10,0xf8,0x0,0x8,0xfc,0x0,0x20,0xf0,0x8,0xfc,0x48,0x48,0x48,0xfe,0x0,
++0x9,0x71,0x4d,0x45,0x75,0x49,0x41,0x75,0x42,0x3f,0x24,0x24,0x24,0x24,0xff,0x0,0x4,0x3e,0xc4,0x84,0x5c,0x44,0x24,0x1c,0x4,0xf8,0x48,0x48,0x48,0x48,0xfe,0x0,
++0x0,0x45,0x29,0xff,0x1,0x28,0x44,0x1,0x7f,0x45,0x65,0x55,0x4c,0x44,0xff,0x0,0x4,0xfe,0x54,0x54,0xfc,0x84,0xfe,0x44,0xf4,0x54,0x54,0xf4,0x54,0x74,0x94,0x8,
++0x10,0x14,0x1e,0x20,0x20,0x7c,0x90,0x14,0xfe,0x10,0x10,0x12,0x14,0x18,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x14,0x1e,0x20,0x20,0x7c,0x90,0x14,0xfe,0x10,0x10,0x12,0x14,0x18,0x10,0x0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x82,0x82,0x82,0x7e,0x0,
++0x10,0x14,0x1e,0x20,0x20,0x7c,0x90,0x14,0xfe,0x10,0x10,0x11,0x15,0x19,0x10,0x0,0x0,0x0,0xfc,0x8,0x10,0x20,0x20,0x40,0x40,0x80,0x80,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x14,0x1e,0x20,0x20,0x7c,0x90,0x14,0xfe,0x10,0x10,0x12,0x14,0x18,0x10,0x0,0x40,0x40,0x40,0x40,0x40,0x60,0x50,0x48,0x44,0x44,0x40,0x40,0x40,0x40,0x40,0x40,
++0x10,0x12,0x1f,0x20,0x24,0x7e,0x90,0x12,0xff,0x10,0x10,0x12,0x14,0x18,0x10,0x0,0x4,0x4,0x4,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x4,0x4,0x14,0x8,
++0x10,0x14,0x1e,0x20,0x20,0x7c,0x90,0x14,0xfe,0x10,0x10,0x12,0x14,0x18,0x10,0x0,0x0,0x0,0xfc,0x4,0x8,0x30,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x14,0x1e,0x20,0x20,0x7c,0x91,0x14,0xfe,0x10,0x10,0x12,0x14,0x18,0x13,0x0,0x20,0x20,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x15,0xff,0x11,0x11,0x13,0x15,0x19,0x12,0x4,0x4,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x4,0x4,
++0x10,0x12,0x1f,0x20,0x24,0x7e,0x90,0x12,0xff,0x10,0x10,0x12,0x14,0x18,0x11,0x6,0x4,0xc,0x10,0x20,0x40,0x84,0xc,0x10,0x20,0x42,0x6,0x8,0x10,0x60,0x80,0x0,
++0x12,0x11,0x1c,0x22,0x22,0x7e,0x92,0x12,0xfe,0x12,0x12,0x12,0x16,0x1a,0x12,0x2,0x4,0x7e,0x84,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x14,0x8,
++0x10,0x14,0x1e,0x20,0x21,0x7c,0x90,0x14,0xfe,0x10,0x10,0x12,0x14,0x18,0x11,0x6,0x0,0x4,0xfe,0x4,0x44,0xa8,0xa8,0x48,0x50,0x20,0x50,0x50,0x88,0x88,0x6,0x4,
++0x10,0x14,0x1e,0x20,0x20,0x7f,0x90,0x14,0xfe,0x11,0x10,0x12,0x14,0x18,0x11,0x6,0x40,0x40,0x40,0x40,0x44,0xfe,0x88,0x88,0x88,0x8,0x88,0x50,0x20,0x50,0x8c,0x4,
++0x10,0x14,0x1f,0x20,0x20,0x7c,0x90,0x14,0xfe,0x11,0x12,0x10,0x14,0x18,0x10,0x0,0x0,0x4,0xfe,0x10,0x10,0x20,0x20,0x60,0xa8,0x26,0x22,0x20,0x20,0x20,0x20,0x20,
++0x10,0x14,0x1e,0x20,0x20,0x7f,0x90,0x14,0xfe,0x10,0x10,0x15,0x19,0x12,0x4,0x8,0x40,0x40,0x40,0x40,0x44,0xfe,0x40,0x40,0xa0,0xa0,0x90,0x10,0x88,0x48,0x46,0x4,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x15,0xff,0x11,0x11,0x11,0x15,0x19,0x11,0x0,0x8,0xfc,0x0,0x0,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,
++0x10,0x14,0x1f,0x21,0x21,0x7d,0x91,0x15,0xff,0x11,0x11,0x11,0x15,0x1a,0x12,0x5,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x4,0x44,0x48,0x48,0x30,0x10,0x28,0x48,0x86,0x4,
++0x10,0x14,0x1e,0x20,0x21,0x7e,0x94,0x10,0xfe,0x11,0x10,0x12,0x14,0x18,0x10,0x0,0x40,0x40,0xa0,0xa0,0x10,0x8e,0x44,0x40,0x0,0xf8,0x8,0x10,0x10,0x20,0x40,0x80,
++0x10,0x14,0x1e,0x21,0x20,0x7c,0x90,0x14,0xfe,0x10,0x10,0x10,0x15,0x19,0x12,0x4,0x40,0x20,0x24,0xfe,0x40,0x44,0x7e,0x44,0x44,0x44,0x84,0x84,0x4,0x4,0x28,0x10,
++0x10,0x14,0x1e,0x21,0x20,0x7c,0x90,0x14,0xfe,0x10,0x10,0x12,0x15,0x19,0x12,0x4,0x40,0x20,0x4,0xfe,0x0,0x10,0xf8,0x90,0x90,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x10,0x14,0x1e,0x20,0x24,0x7e,0x90,0x14,0xfe,0x10,0x13,0x10,0x14,0x18,0x10,0x0,0x8,0x88,0x48,0x48,0x8,0x88,0x48,0x48,0xe,0x78,0x88,0x8,0x8,0x8,0x8,0x8,
++0x10,0x14,0x1e,0x20,0x20,0x7c,0x90,0x11,0xfe,0x10,0x10,0x12,0x14,0x18,0x11,0x2,0x20,0x20,0x20,0x20,0xa4,0xac,0xb0,0x20,0x20,0x50,0x50,0x50,0x88,0x88,0x6,0x4,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x11,0xff,0x11,0x11,0x13,0x15,0x19,0x10,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x15,0x1e,0x20,0x20,0x7c,0x90,0x11,0xfe,0x10,0x10,0x12,0x14,0x18,0x13,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x28,0xfc,0x20,0x30,0x28,0x28,0x20,0x24,0xfe,0x0,
++0x10,0x13,0x1e,0x20,0x20,0x7c,0x91,0x11,0xfd,0x11,0x11,0x11,0x15,0x19,0x17,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x14,0x1e,0x20,0x23,0x7c,0x90,0x10,0xfd,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x14,0x1f,0x20,0x20,0x7d,0x91,0x11,0xff,0x11,0x11,0x11,0x14,0x18,0x10,0x0,0x0,0x4,0xfe,0x8,0x8,0xe8,0x28,0x28,0x28,0x28,0xe8,0x8,0x8,0x8,0x28,0x10,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x11,0xff,0x11,0x11,0x11,0x15,0x19,0x11,0x0,0x4,0xfe,0x0,0x8,0x7c,0x48,0x48,0x48,0x48,0x48,0x78,0x48,0x0,0x4,0xfe,0x0,
++0x10,0x10,0x1e,0x23,0x20,0x7c,0x91,0x13,0xfd,0x11,0x11,0x11,0x15,0x19,0x10,0x0,0x40,0x40,0x44,0xfe,0x80,0xa0,0x24,0xfe,0x24,0x24,0x24,0x24,0x34,0x28,0x20,0x20,
++0x10,0x14,0x1e,0x20,0x23,0x7c,0x90,0x14,0xfe,0x10,0x10,0x13,0x15,0x19,0x12,0x4,0x40,0x50,0x48,0x48,0xfe,0x40,0x40,0xfc,0x84,0xa4,0xa8,0x28,0x10,0x28,0x46,0x84,
++0x10,0x14,0x1e,0x20,0x21,0x7d,0x91,0x15,0xff,0x11,0x11,0x13,0x15,0x19,0x10,0x0,0x20,0x28,0x24,0x20,0xfe,0x20,0x20,0x24,0x24,0x24,0x18,0x50,0x92,0x2a,0x4a,0x84,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x11,0xff,0x11,0x11,0x13,0x15,0x19,0x11,0x1,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x14,0x1f,0x21,0x21,0x7d,0x91,0x11,0xff,0x11,0x11,0x11,0x14,0x18,0x13,0x0,0x0,0x4,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0xfe,0x0,
++0x10,0x14,0x1f,0x21,0x21,0x7d,0x91,0x11,0xfd,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x10,0x1d,0x21,0x21,0x7d,0x91,0x15,0xfe,0x10,0x10,0x10,0x15,0x1a,0x10,0x0,0x8,0x1c,0xe0,0x0,0x20,0x20,0x24,0xfe,0x20,0x20,0xa8,0xa4,0x26,0x22,0xa0,0x40,
++0x10,0x10,0x1e,0x23,0x20,0x7c,0x91,0x15,0xff,0x11,0x11,0x11,0x15,0x19,0x10,0x0,0x40,0x20,0x24,0xfe,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x24,0x2c,0x20,0x20,
++0x10,0x10,0x1e,0x23,0x20,0x7c,0x90,0x11,0xfd,0x10,0x10,0x12,0x14,0x19,0x13,0x0,0x40,0x20,0x24,0xfe,0x40,0x40,0x88,0x8,0xf0,0x20,0x40,0x40,0x88,0x4,0xfc,0x4,
++0x10,0x10,0x1e,0x23,0x22,0x7c,0x90,0x14,0xfc,0x10,0x10,0x10,0x14,0x18,0x10,0x0,0x40,0x20,0x20,0xfe,0x2,0x84,0x80,0x90,0xb0,0xc0,0x80,0x80,0x82,0x82,0x7e,0x0,
++0x10,0x14,0x1e,0x20,0x20,0x7c,0x90,0x12,0xfe,0x12,0x14,0x10,0x15,0x1a,0x14,0x0,0x0,0x44,0x24,0x28,0x88,0x90,0x90,0xa4,0xa2,0xc2,0x82,0x80,0x84,0x84,0x7c,0x0,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x15,0xff,0x11,0x11,0x11,0x15,0x19,0x12,0x4,0x4,0xfe,0x4,0x4,0xfc,0x0,0x40,0x44,0x4c,0x50,0x60,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x14,0x1e,0x21,0x21,0x7d,0x91,0x15,0xff,0x11,0x11,0x11,0x15,0x1a,0x12,0x5,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xfc,0x8,0x48,0x50,0x20,0x50,0x48,0x8e,0x4,
++0x10,0x15,0x1e,0x20,0x20,0x7c,0x90,0x13,0xfe,0x10,0x10,0x11,0x14,0x18,0x10,0x0,0x0,0xfc,0x88,0x50,0x20,0x50,0x8e,0x24,0xf8,0x20,0x28,0xfc,0x20,0x20,0x20,0x20,
++0x10,0x14,0x1f,0x20,0x24,0x7f,0x90,0x10,0xfd,0x12,0x14,0x12,0x14,0x18,0x10,0x0,0x40,0x44,0xf8,0x50,0x64,0xfe,0x40,0x88,0xfc,0x40,0x7c,0x4,0x4,0x44,0x28,0x10,
++0x10,0x10,0x1d,0x20,0x20,0x7c,0x93,0x10,0xfd,0x12,0x14,0x10,0x14,0x18,0x10,0x0,0x40,0x44,0xfc,0x48,0x50,0x64,0xfe,0x80,0x88,0x98,0xa0,0xc0,0x84,0x84,0x7c,0x0,
++0x10,0x17,0x1d,0x21,0x21,0x7d,0x91,0x11,0xfd,0x11,0x11,0x11,0x17,0x18,0x10,0x0,0x4,0xfe,0x8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x3e,0xc8,0x8,0x8,0x8,
++0x10,0x14,0x1f,0x20,0x21,0x7d,0x93,0x15,0xfd,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x80,0x84,0xfe,0x80,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x10,0x10,0x1c,0x23,0x22,0x7e,0x92,0x13,0xfe,0x12,0x12,0x17,0x1a,0x12,0x4,0x8,0x10,0x18,0x14,0xfe,0x10,0x10,0x10,0xd4,0x54,0x54,0x54,0x58,0x88,0xa,0xa,0x6,
++0x10,0x10,0x1e,0x23,0x20,0x7e,0x91,0x10,0xff,0x10,0x10,0x10,0x15,0x19,0x12,0xc,0x40,0x40,0x48,0xfc,0x40,0x48,0x50,0x44,0xfe,0x40,0xa0,0xa0,0x10,0x10,0xe,0x4,
++0x10,0x10,0x1e,0x23,0x20,0x7c,0x91,0x14,0xff,0x10,0x10,0x10,0x15,0x19,0x12,0x4,0x40,0x40,0x5c,0xe0,0x28,0x32,0xce,0x0,0xfc,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x20,0x2f,0x38,0x22,0x42,0x7c,0xa4,0x27,0xf9,0x21,0x22,0x2a,0x34,0x24,0xa,0x1,0x0,0xfc,0xa4,0xa4,0xa4,0xa8,0xa4,0xe4,0xa2,0xa2,0xa2,0xb4,0xa8,0xa0,0xa0,0x20,
++0x10,0x15,0x1e,0x20,0x20,0x7c,0x93,0x10,0xfe,0x10,0x11,0x10,0x14,0x18,0x13,0x0,0x20,0x24,0xa4,0xa8,0xb0,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x20,0x23,0x3a,0x22,0x43,0x78,0xa0,0x27,0xfc,0x24,0x24,0x24,0x2c,0x34,0x20,0x0,0x8,0xfc,0x8,0x8,0xf8,0x40,0x44,0xfe,0x44,0x44,0x44,0x44,0x54,0x48,0x40,0x40,
++0x20,0x27,0x3c,0x24,0x44,0x7c,0xa7,0x24,0xfc,0x24,0x24,0x25,0x2c,0x34,0x27,0x4,0x4,0xfe,0x4,0x44,0x44,0x54,0xfc,0x44,0x44,0xa4,0x94,0x14,0x4,0x4,0xfc,0x4,
++0x10,0x15,0x1f,0x21,0x21,0x7c,0x91,0x14,0xfe,0x11,0x11,0x11,0x15,0x19,0x10,0x0,0x20,0x24,0x24,0x24,0xfc,0x0,0xfc,0x4,0x4,0xfc,0x4,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x11,0x1d,0x21,0x22,0x7e,0x90,0x13,0xfc,0x10,0x10,0x14,0x19,0x12,0x4,0x0,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x60,0x70,0xa8,0xa8,0x24,0x26,0x20,0x20,
++0x10,0x10,0x1c,0x27,0x20,0x7d,0x92,0x13,0xfc,0x10,0x14,0x12,0x15,0x19,0x12,0x4,0x0,0xc,0x70,0x90,0x90,0x14,0x7e,0x90,0x90,0x90,0x94,0xfe,0x0,0x80,0x46,0x3c,
++0x10,0x10,0x1d,0x20,0x20,0x7d,0x90,0x10,0xfc,0x13,0x10,0x12,0x14,0x19,0x13,0x0,0x8,0x3c,0xe0,0x20,0x20,0xfc,0x20,0x20,0x24,0xfe,0x40,0x40,0x90,0x8,0xfc,0x4,
++0x10,0x10,0x1c,0x20,0x21,0x7e,0x94,0x10,0xfc,0x10,0x13,0x10,0x14,0x18,0x10,0x0,0x50,0x50,0x94,0x98,0x90,0xb0,0xd2,0x8e,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x10,0x10,0x1c,0x21,0x22,0x7f,0x90,0x10,0xfc,0x13,0x10,0x10,0x14,0x18,0x17,0x0,0x40,0x40,0xa0,0x10,0x8,0xfe,0x44,0x40,0x40,0xf8,0x40,0x40,0x40,0x48,0xfc,0x0,
++0x10,0x10,0x1e,0x20,0x21,0x7e,0x91,0x10,0xfe,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x20,0x20,0x50,0x88,0x4,0x2,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x11,0x14,0x1e,0x20,0x20,0x7c,0x91,0x10,0xfd,0x10,0x10,0x12,0x15,0x1a,0x10,0x0,0x4,0x8c,0x50,0x20,0x50,0x8c,0x24,0x20,0xfe,0x20,0xa8,0xa4,0x22,0x22,0xa0,0x40,
++0x10,0x14,0x1e,0x20,0x24,0x7e,0x91,0x10,0xfc,0x11,0x16,0x10,0x15,0x19,0x12,0x4,0x20,0xa0,0xa0,0xa0,0xa4,0xac,0xb0,0xa0,0xa0,0xb0,0xa8,0xa8,0x22,0x22,0x1e,0x0,
++0x10,0x14,0x1e,0x21,0x20,0x7d,0x90,0x10,0xfd,0x10,0x10,0x11,0x14,0x18,0x10,0x0,0x40,0x40,0xf8,0x10,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x20,0xa0,0x40,
++0x10,0x14,0x1e,0x21,0x22,0x7d,0x91,0x15,0xff,0x11,0x11,0x13,0x15,0x19,0x10,0x0,0x80,0x80,0xf8,0x10,0x24,0xfe,0x24,0x24,0x24,0xfc,0x4,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x14,0x1e,0x23,0x20,0x7c,0x90,0x15,0xfe,0x10,0x10,0x12,0x14,0x19,0x12,0x0,0x40,0x20,0x24,0xfe,0x40,0x88,0x84,0xfc,0x90,0x90,0x90,0x90,0x92,0x12,0xe,0x0,
++0x20,0x24,0x3b,0x41,0x40,0x74,0xa2,0x22,0xf8,0x21,0x22,0x22,0x2c,0x35,0x22,0x0,0x0,0xfc,0x8,0x10,0x20,0x44,0xfe,0x54,0x54,0x54,0x54,0x94,0xa4,0x24,0x54,0x88,
++0x10,0x10,0x1e,0x23,0x22,0x7c,0x90,0x17,0xfc,0x10,0x11,0x10,0x14,0x18,0x11,0x2,0x40,0x20,0x20,0xfe,0x2,0x44,0x40,0xfe,0x88,0x88,0x8,0x90,0x60,0x90,0xc,0x4,
++0x11,0x11,0x1d,0x27,0x21,0x7d,0x91,0x11,0xfd,0x12,0x11,0x14,0x19,0x12,0x4,0x0,0x0,0x0,0x4,0xde,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x94,0x54,0x5c,0x14,0x0,
++0x10,0x10,0x1f,0x20,0x20,0x7b,0x92,0x12,0xfd,0x10,0x10,0x10,0x14,0x18,0x11,0x2,0x88,0x88,0xfe,0x88,0x88,0xfe,0x42,0x44,0xfe,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x20,0x20,0x3b,0x40,0x42,0x79,0xa0,0x27,0xf8,0x20,0x21,0x21,0x2a,0x34,0x28,0x0,0x40,0x40,0xfc,0x40,0x48,0x50,0x44,0xfe,0x40,0xe0,0x50,0x50,0x48,0x46,0x44,0x40,
++0x20,0x20,0x38,0x47,0x40,0x7a,0xa1,0x20,0xfa,0x22,0x26,0x2a,0x2a,0x32,0x21,0x0,0x20,0x28,0x24,0xfe,0x20,0x20,0xa0,0xa0,0x10,0x90,0x50,0x50,0x90,0x8a,0x86,0x2,
++0x20,0x22,0x3a,0x42,0x42,0x7a,0xa2,0x22,0xf8,0x20,0x20,0x25,0x28,0x30,0x23,0x0,0x80,0xfc,0xa4,0xa8,0x90,0xa8,0xa6,0xc4,0x80,0xa0,0x28,0xfc,0x20,0x24,0xfe,0x0,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x90,0x13,0xfc,0x10,0x11,0x10,0x14,0x18,0x13,0x0,0x4,0xfe,0x4,0x4,0x4,0xfc,0x0,0xfe,0x20,0x20,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x11,0xff,0x10,0x11,0x10,0x14,0x18,0x13,0x0,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x24,0x20,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x1c,0x21,0x21,0x7e,0x90,0x13,0xfc,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x20,0xa0,0xa4,0xfe,0x20,0x20,0x24,0xfe,0x0,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x1c,0x23,0x20,0x7f,0x90,0x10,0xfc,0x11,0x12,0x10,0x14,0x18,0x12,0x1,0x10,0x58,0x94,0x90,0x90,0xfe,0x90,0x94,0xd4,0x98,0x90,0xb0,0xd2,0x92,0x8a,0x4,
++0x10,0x14,0x1e,0x21,0x21,0x7d,0x91,0x12,0xfc,0x10,0x11,0x10,0x14,0x18,0x13,0x0,0x20,0x20,0x20,0x24,0x24,0x28,0xac,0x72,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x14,0x1f,0x20,0x21,0x7c,0x90,0x10,0xfd,0x10,0x11,0x10,0x14,0x18,0x10,0x0,0x8,0x1c,0xe0,0x44,0x24,0xa8,0x90,0x8,0xfe,0x8,0x8,0x88,0x88,0x8,0x28,0x10,
++0x10,0x14,0x1f,0x20,0x20,0x7d,0x93,0x10,0xfd,0x11,0x11,0x11,0x15,0x19,0x12,0x4,0x40,0x24,0xfe,0x80,0x90,0x8,0xfc,0x4,0x50,0x50,0x50,0x50,0x52,0x52,0x4e,0x0,
++0x12,0x11,0x1c,0x22,0x22,0x7f,0x92,0x12,0xfe,0x13,0x12,0x12,0x16,0x1b,0x12,0x2,0x4,0x7e,0x84,0x4,0x4,0xfc,0x94,0x94,0x94,0xfc,0x94,0x94,0x94,0x14,0x4,0xc,
++0x12,0x11,0x1c,0x22,0x22,0x7e,0x92,0x12,0xfe,0x12,0x12,0x12,0x16,0x1a,0x12,0x2,0x4,0x7e,0x84,0x4,0x4,0xf4,0x94,0x94,0xf4,0x94,0x94,0xf4,0x94,0x4,0x14,0x8,
++0x10,0x14,0x1f,0x21,0x21,0x7d,0x91,0x11,0xfd,0x11,0x11,0x13,0x15,0x19,0x11,0x1,0x40,0x28,0xfc,0x8,0x8,0xf8,0x8,0x8,0xfc,0x48,0x50,0x20,0x10,0x48,0x86,0x0,
++0x10,0x11,0x1e,0x20,0x20,0x7d,0x90,0x13,0xfe,0x14,0x10,0x12,0x14,0x18,0x10,0x3,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x0,0xfe,0x2,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x13,0x1e,0x22,0x23,0x7e,0x92,0x13,0xfe,0x12,0x12,0x16,0x1a,0x12,0x4,0x8,0x4,0xfe,0x4,0x4,0xfc,0x0,0x4,0xfe,0x4,0xf4,0x94,0x94,0xf4,0x4,0x14,0x8,
++0x20,0x27,0x3d,0x45,0x45,0x7e,0xa5,0x25,0xfd,0x25,0x27,0x25,0x2c,0x34,0x24,0x4,0x0,0x4,0xfe,0x4,0x4,0x74,0x54,0x54,0x54,0x54,0x54,0x74,0x44,0x4,0x14,0x8,
++0x10,0x14,0x1f,0x20,0x21,0x7c,0x93,0x10,0xfd,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x20,0x24,0xfe,0x20,0xfc,0x20,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x4,0x14,0x8,
++0x10,0x10,0x1f,0x20,0x20,0x7c,0x97,0x10,0xfc,0x11,0x13,0x15,0x11,0x19,0x11,0x1,0x88,0x88,0xfe,0x88,0x40,0x44,0xfe,0x80,0x84,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x1f,0x20,0x21,0x7e,0x95,0x10,0xfd,0x11,0x1f,0x11,0x15,0x19,0x12,0x4,0x40,0x44,0xfe,0xa0,0x10,0x4e,0xf4,0x40,0x50,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x90,0x15,0xfe,0x10,0x13,0x10,0x14,0x18,0x10,0x0,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x0,0xfc,0x8,0x8,0xfe,0x88,0x48,0x8,0x28,0x10,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x11,0xfc,0x13,0x10,0x10,0x14,0x19,0x12,0x0,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x20,0x70,0xa8,0x26,0x24,0x20,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x11,0xfe,0x11,0x11,0x13,0x15,0x19,0x11,0x0,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x10,0x14,0xd8,0x10,0x12,0x52,0x8e,0x0,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x11,0xff,0x11,0x11,0x13,0x15,0x19,0x11,0x1,0x4,0xfe,0x4,0x24,0x24,0xfc,0x24,0x24,0x74,0x54,0x54,0x74,0x54,0x4,0xfc,0x4,
++0x11,0x11,0x1d,0x22,0x22,0x7c,0x91,0x11,0xfe,0x10,0x13,0x13,0x15,0x19,0x10,0x0,0x0,0x4,0xfe,0x94,0x94,0xa4,0x24,0x54,0x8,0x40,0x28,0x26,0xa,0x8,0xf8,0x0,
++0x10,0x14,0x1f,0x20,0x21,0x7c,0x90,0x13,0xfc,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x40,0x28,0xfc,0x0,0x8,0x90,0x4,0xfe,0x0,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x12,0x1d,0x20,0x23,0x7c,0x97,0x10,0xfd,0x13,0x15,0x11,0x15,0x19,0x11,0x0,0x40,0x48,0x50,0x40,0xfc,0x40,0xfe,0xa0,0x10,0xf8,0x16,0x10,0x50,0x24,0x4,0xfc,
++0x10,0x14,0x1e,0x20,0x21,0x7c,0x90,0x13,0xfe,0x10,0x10,0x11,0x14,0x18,0x10,0x3,0x20,0x24,0xac,0xb0,0x20,0x58,0x86,0x22,0x20,0xa4,0xac,0x30,0x50,0x50,0x8e,0x4,
++0x21,0x21,0x3a,0x44,0x42,0x79,0xa1,0x27,0xfc,0x24,0x27,0x24,0x2c,0x34,0x27,0x4,0x24,0x24,0x48,0x90,0x48,0x24,0x24,0xfe,0x44,0x44,0xfc,0x44,0x44,0x44,0xfc,0x4,
++0x21,0x21,0x3f,0x41,0x47,0x79,0xa7,0x21,0xf9,0x20,0x27,0x20,0x28,0x30,0x21,0x6,0x0,0x4,0xfe,0x14,0xd4,0x14,0xd4,0x24,0x4c,0x40,0xfe,0x40,0xa0,0x90,0xe,0x4,
++0x10,0x12,0x1f,0x22,0x22,0x7e,0x93,0x10,0xfd,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x20,0x24,0xa8,0x30,0x22,0xa2,0x5e,0x88,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x11,0x1d,0x21,0x21,0x7d,0x91,0x11,0xfd,0x10,0x12,0x12,0x14,0x18,0x10,0x0,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,0x40,0xa8,0xa4,0x8a,0x8a,0x78,0x0,
++0x10,0x15,0x1f,0x21,0x21,0x7c,0x91,0x10,0xff,0x10,0x10,0x10,0x14,0x18,0x10,0x0,0x0,0xdc,0x54,0x54,0xdc,0x8,0xfc,0x0,0xfe,0x80,0xf8,0x8,0x8,0x8,0x50,0x20,
++0x20,0x20,0x3b,0x40,0x48,0x7f,0xa0,0x21,0xfe,0x24,0x24,0x27,0x2c,0x34,0x27,0x4,0x8,0x7c,0xc0,0x40,0x44,0xfe,0x40,0x44,0x5e,0x44,0x44,0x5c,0x44,0x44,0xfc,0x4,
++0x10,0x10,0x1d,0x21,0x21,0x7d,0x91,0x11,0xfe,0x11,0x10,0x12,0x14,0x18,0x11,0x6,0x20,0xac,0x24,0x24,0xac,0x24,0x24,0xfc,0x20,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x13,0x1c,0x21,0x20,0x7d,0x90,0x13,0xfc,0x10,0x11,0x11,0x16,0x1a,0x14,0x1,0x3c,0xc0,0x24,0x24,0xa8,0xfc,0x40,0xfe,0x80,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x14,0x1f,0x20,0x21,0x7d,0x91,0x11,0xfe,0x10,0x10,0x10,0x15,0x1a,0x14,0x0,0x40,0x24,0xfe,0x0,0xfc,0x4,0x4,0xfc,0x40,0x44,0xa8,0x90,0x90,0xa8,0xc6,0x84,
++0x10,0x11,0x1c,0x20,0x23,0x7c,0x90,0x11,0xfc,0x13,0x10,0x11,0x14,0x18,0x10,0x3,0x20,0x24,0xa8,0x20,0xfe,0x70,0xa8,0x26,0x40,0xfe,0x88,0x8,0xd0,0x30,0xcc,0x4,
++0x21,0x21,0x39,0x45,0x43,0x79,0xa1,0x21,0xfb,0x25,0x29,0x21,0x29,0x31,0x21,0x1,0x20,0x20,0x3c,0x44,0xa8,0x10,0x28,0x48,0xfe,0x8,0x48,0x28,0x28,0x8,0x28,0x10,
++0x21,0x21,0x3f,0x41,0x47,0x7d,0xa7,0x21,0xfb,0x22,0x22,0x22,0x2a,0x30,0x21,0x6,0x10,0x14,0xfe,0x14,0xfc,0x10,0xfe,0x12,0xfe,0x8,0x48,0x48,0x48,0xb0,0xc,0x4,
++0x10,0x15,0x1f,0x21,0x21,0x7d,0x91,0x11,0xfe,0x12,0x12,0x16,0x1a,0x12,0x4,0x8,0x4,0xfe,0x24,0x24,0xfc,0x0,0xfc,0x84,0x84,0xfc,0x84,0xfc,0x84,0x84,0xfc,0x84,
++0x11,0x11,0x1f,0x21,0x23,0x7e,0x93,0x12,0xff,0x10,0x10,0x17,0x14,0x18,0x11,0x6,0x10,0x14,0xfe,0x10,0xf8,0x8,0xf8,0x8,0xf8,0x40,0x44,0xfe,0x40,0xa0,0x1c,0x8,
++0x20,0x27,0x38,0x43,0x42,0x7a,0xa3,0x20,0xff,0x25,0x24,0x27,0x2c,0x34,0x24,0x4,0x8,0xfc,0x0,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x14,0xa4,0xfc,0x44,0x44,0x54,0x8,
++0x10,0x10,0x1d,0x21,0x23,0x7d,0x91,0x11,0xfd,0x11,0x13,0x10,0x14,0x19,0x12,0x4,0xa0,0xa8,0xfc,0x20,0xf8,0x20,0xf8,0x20,0xfe,0x0,0xf8,0x88,0x9c,0x4,0x28,0x10,
++0x20,0x20,0x39,0x43,0x44,0x7b,0xa2,0x23,0xf8,0x27,0x20,0x23,0x28,0x37,0x20,0x0,0x40,0xa0,0x10,0xf8,0x6,0xf8,0x8,0xf8,0x1c,0xe0,0x40,0xf8,0x40,0xfe,0x40,0xc0,
++0x20,0x27,0x3c,0x44,0x45,0x7d,0xa6,0x20,0xff,0x24,0x24,0x27,0x2c,0x34,0x27,0x4,0x84,0x7e,0x24,0x24,0x24,0xa4,0x54,0x88,0xfc,0x44,0x44,0xfc,0x44,0x44,0xfc,0x4,
++0x10,0x14,0x1e,0x20,0x23,0x7c,0x90,0x15,0xfe,0x11,0x11,0x11,0x15,0x19,0x13,0x0,0x0,0x88,0x50,0x4,0xfe,0x50,0x8c,0x4,0x0,0xfc,0x54,0x54,0x54,0x54,0xfe,0x0,
++0x10,0x12,0x1f,0x22,0x24,0x7f,0x90,0x10,0xff,0x10,0x13,0x10,0x14,0x1b,0x10,0x0,0x40,0x20,0xfe,0x2,0x4,0xfe,0x40,0xc4,0x68,0xb0,0x30,0x68,0xa8,0x26,0xa4,0x40,
++0x10,0x12,0x1f,0x22,0x24,0x7d,0x91,0x11,0xfd,0x11,0x11,0x17,0x14,0x19,0x12,0x4,0x40,0x20,0xfe,0x2,0x34,0xc0,0x8,0xfc,0x10,0x10,0x14,0xfe,0x0,0x10,0xc,0x4,
++0x10,0x13,0x1c,0x20,0x21,0x7d,0x91,0x15,0xfe,0x11,0x10,0x13,0x14,0x19,0x12,0x0,0x4,0xfe,0x50,0x54,0xfe,0x54,0x54,0xfc,0x0,0xfc,0x0,0xfe,0xa8,0x26,0x22,0x60,
++0x20,0x22,0x39,0x40,0x47,0x7c,0xa9,0x21,0xf9,0x21,0x20,0x23,0x28,0x30,0x2f,0x0,0x40,0x48,0x50,0x40,0xfe,0x2,0xf4,0x10,0x10,0xf0,0x40,0xf8,0x40,0x44,0xfe,0x0,
++0x20,0x23,0x3a,0x43,0x42,0x7b,0xa0,0x27,0xfc,0x27,0x20,0x23,0x29,0x30,0x23,0xc,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x4,0xfe,0xa4,0xfc,0x0,0xf8,0x10,0xe0,0x10,0xe,
++0x20,0x27,0x3c,0x47,0x44,0x7f,0xa0,0x21,0xfb,0x20,0x20,0x27,0x29,0x32,0x24,0x0,0x4,0xfe,0x44,0xfc,0x44,0xfc,0x80,0x8,0xf0,0x20,0x48,0xfc,0x50,0x4c,0x44,0xc0,
++0x20,0x27,0x3c,0x45,0x44,0x7f,0xa4,0x25,0xfc,0x25,0x25,0x25,0x2d,0x35,0x29,0x11,0x20,0xfe,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x24,0x2c,
++0x22,0x21,0x39,0x47,0x42,0x7a,0xa3,0x22,0xfa,0x22,0x22,0x22,0x2c,0x34,0x29,0x0,0x20,0x20,0x24,0xfe,0x40,0x20,0xbc,0xd0,0x94,0xfe,0x90,0x90,0xa8,0xa6,0xc2,0x0,
++0x24,0x22,0x38,0x4f,0x44,0x7c,0xa7,0x25,0xfd,0x25,0x25,0x2d,0x35,0x25,0xb,0x11,0x40,0x40,0x44,0xfe,0x80,0x0,0x7e,0x14,0x10,0x54,0x5e,0x50,0x50,0x70,0x9e,0x4,
++0x20,0x28,0x3f,0x41,0x40,0x7f,0xa4,0x24,0xff,0x24,0x25,0x25,0x2d,0x35,0x24,0x4,0x80,0x44,0xfe,0x10,0xa4,0xfe,0x44,0x54,0xfc,0x44,0xf4,0x14,0x14,0xf4,0x4,0xc,
++0x10,0x13,0x1c,0x21,0x21,0x7d,0x90,0x15,0xff,0x11,0x11,0x11,0x14,0x1b,0x10,0x0,0x4,0xfe,0x50,0xfc,0x54,0xfc,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x20,0xfe,0x20,0x20,
++0x20,0x2f,0x38,0x4a,0x49,0x7f,0xa8,0x2a,0xfa,0x2a,0x2b,0x28,0x38,0x29,0x12,0x24,0x4,0xfe,0x8,0x28,0x48,0xee,0x92,0xa4,0xa8,0xa8,0xe8,0xa8,0x94,0x14,0x24,0x42,
++0x20,0x24,0x3a,0x40,0x4f,0x79,0xa0,0x27,0xf8,0x23,0x20,0x27,0x28,0x30,0x21,0x6,0xa0,0xa4,0xa8,0xa0,0xfe,0x10,0xa0,0xfc,0x40,0xf8,0x40,0xfc,0x40,0xa0,0x1c,0x8,
++0x10,0x10,0x1d,0x23,0x21,0x7d,0x91,0x11,0xfc,0x13,0x10,0x11,0x15,0x19,0x11,0x1,0x80,0xf8,0x10,0xfc,0x24,0xfc,0x24,0xfc,0x0,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,
++0x22,0x21,0x3f,0x40,0x47,0x7c,0xa4,0x27,0xf8,0x27,0x20,0x21,0x2f,0x31,0x25,0x2,0x10,0x10,0xf4,0x1e,0xe4,0x54,0x54,0xd4,0x14,0xc8,0x88,0xd4,0x14,0x24,0x22,0x40,
++0x24,0x22,0x39,0x44,0x47,0x7c,0xa5,0x25,0xfd,0x25,0x25,0x24,0x2d,0x36,0x24,0x4,0x4,0xfe,0x44,0x54,0xfc,0x44,0xf4,0x54,0xf4,0x54,0xf4,0xe4,0x54,0x4c,0x44,0x4c,
++0x11,0x10,0x1f,0x20,0x22,0x7d,0x90,0x17,0xfc,0x11,0x11,0x11,0x15,0x19,0x11,0x1,0x8,0x90,0xfc,0x90,0x94,0x98,0x90,0xfe,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,
++0x20,0x20,0x3f,0x45,0x4a,0x78,0xa3,0x22,0xfb,0x20,0x23,0x22,0x2b,0x32,0x20,0x0,0x80,0x40,0xfe,0x12,0x4c,0x40,0xf8,0x48,0xf8,0x40,0xf8,0x48,0xf8,0x48,0x40,0x40,
++0x20,0x27,0x39,0x41,0x41,0x7f,0xa4,0x24,0xfc,0x27,0x21,0x21,0x29,0x31,0x2a,0x4,0x4,0x7e,0x44,0x44,0x7c,0x10,0xfe,0x92,0x92,0x92,0xfe,0x10,0x10,0x14,0xfe,0x42,
++0x20,0x23,0x38,0x42,0x41,0x7b,0xa4,0x23,0xfa,0x22,0x23,0x20,0x29,0x30,0x2f,0x0,0x28,0xb0,0xa4,0x98,0x10,0xf8,0x4,0xfa,0x8,0x8,0xf8,0x0,0x10,0xa4,0xfe,0x0,
++0x21,0x27,0x39,0x41,0x42,0x7f,0xa2,0x23,0xfa,0x23,0x22,0x23,0x29,0x30,0x23,0xc,0x8,0xfe,0x28,0xfe,0x20,0xfc,0x20,0xfc,0x20,0xfe,0x0,0xf8,0x10,0xe0,0x18,0x6,
++0x20,0x27,0x3c,0x44,0x47,0x79,0xa3,0x24,0xf8,0x27,0x24,0x27,0x28,0x30,0x27,0x0,0x4,0xfe,0xa4,0xa4,0xfc,0x0,0xfc,0x84,0x84,0xf4,0x94,0xf4,0x84,0xa4,0xf4,0x8,
++0x20,0x28,0x3f,0x41,0x48,0x7f,0xa0,0x23,0xfe,0x23,0x22,0x2b,0x30,0x25,0x9,0x0,0x80,0x48,0xfc,0x10,0xa4,0xfe,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x40,0x24,0xa,0xf8,
++0x20,0x20,0x3f,0x45,0x41,0x7a,0xa7,0x2d,0xf3,0x24,0x2b,0x20,0x29,0x32,0x24,0x0,0x80,0x40,0xfe,0x2,0xbc,0xa4,0xa8,0x10,0xf8,0x6,0xf8,0x40,0x50,0x4c,0x44,0xc0,
++0x20,0x20,0x3f,0x44,0x47,0x7c,0xa7,0x25,0xfd,0x25,0x25,0x2d,0x34,0x25,0x9,0x12,0x40,0x24,0xfe,0x90,0xfc,0x94,0xfc,0x10,0xd4,0x18,0x52,0x8e,0x0,0x54,0x52,0x2,
++0x20,0x20,0x3b,0x40,0x4f,0x78,0xa3,0x2a,0xff,0x22,0x23,0x20,0x2b,0x30,0x2f,0x0,0x8,0x1c,0xe0,0x44,0xfe,0x40,0xf8,0x48,0xf8,0x48,0xf8,0x40,0xf8,0x40,0xfe,0x0,
++0x20,0x23,0x20,0x3c,0x50,0x93,0x12,0xfe,0x12,0x13,0x10,0x28,0x24,0x44,0x81,0x0,0x44,0xe4,0x44,0x44,0x44,0xc4,0x44,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0x44,0x84,
++0x20,0x20,0x22,0x3e,0x52,0x92,0x15,0xfc,0x10,0x10,0x13,0x28,0x24,0x40,0x8f,0x0,0x40,0x40,0x48,0x48,0x48,0x48,0x54,0xe2,0x40,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x20,0x20,0x20,0x3d,0x51,0x93,0x15,0xfd,0x11,0x11,0x11,0x29,0x25,0x45,0x81,0x1,0x80,0xa0,0x94,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x0,0xe,0xf2,0x12,0x12,0xfe,0x13,0x32,0x3a,0x56,0x52,0x92,0x12,0x13,0x12,0x10,0x20,0x20,0x20,0x20,0x20,0x24,0xac,0x30,0x20,0x20,0x20,0x20,0xa2,0x22,0x1e,0x0,
++0x0,0xc,0xf0,0x13,0x12,0xfe,0x12,0x33,0x38,0x54,0x51,0x92,0x14,0x10,0x10,0x10,0x40,0x50,0x78,0xc0,0x40,0x40,0x44,0xfe,0x44,0xc4,0x44,0x54,0x48,0x40,0x40,0x40,
++0x0,0xc,0xf0,0x17,0x10,0xfc,0x13,0x30,0x38,0x55,0x51,0x92,0x14,0x10,0x10,0x10,0x40,0x40,0x44,0xfe,0x40,0x48,0xfc,0xc0,0xe0,0x50,0x50,0x48,0x4e,0x44,0x40,0x40,
++0x0,0xc,0xf0,0x10,0x17,0xfc,0x10,0x30,0x38,0x55,0x51,0x91,0x12,0x14,0x18,0x10,0x40,0x50,0x48,0x48,0xfe,0x40,0x40,0xc0,0xe0,0x50,0x50,0x48,0x4e,0x44,0x40,0x40,
++0x0,0xd,0xf1,0x11,0x11,0xfd,0x11,0x30,0x38,0x57,0x52,0x92,0x12,0x12,0x13,0x12,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x0,0xc,0xf0,0x17,0x10,0xfc,0x11,0x31,0x3a,0x54,0x50,0x92,0x12,0x12,0x13,0x10,0x80,0xa0,0x94,0xfe,0xa0,0xa0,0x22,0x22,0x1e,0x40,0x40,0x48,0x48,0x48,0xf8,0x8,
++0x8,0xc,0xf7,0x12,0x11,0xfc,0x13,0x30,0x38,0x54,0x57,0x90,0x10,0x10,0x11,0x10,0x8,0x3c,0xc0,0x48,0x50,0x0,0xf8,0x10,0x60,0x44,0xfe,0x40,0x40,0x40,0x40,0x80,
++0x0,0xc,0xf3,0x12,0x12,0xff,0x12,0x32,0x3b,0x56,0x52,0x92,0x12,0x12,0x13,0x12,0x80,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x84,0x4c,0x50,0x20,0x90,0xe,0x4,
++0x4,0xf,0xf1,0x11,0x15,0xff,0x11,0x31,0x38,0x57,0x50,0x90,0x10,0x11,0x12,0x10,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x20,0x70,0xa8,0x26,0x24,0x20,
++0x0,0xc,0xf0,0x10,0x11,0xfe,0x14,0x31,0x38,0x54,0x50,0x95,0x15,0x19,0x10,0x10,0x40,0x40,0xa0,0xa0,0x10,0x8e,0x44,0xf0,0x10,0xa0,0x40,0x44,0x12,0x12,0xf0,0x0,
++0x0,0xc,0xf7,0x10,0x13,0xfe,0x13,0x32,0x3b,0x56,0x53,0x92,0x1f,0x11,0x12,0x14,0x40,0x48,0xfc,0x40,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x10,0xc,0x4,
++0x0,0xd,0xf1,0x11,0x11,0xfd,0x11,0x31,0x39,0x56,0x50,0x91,0x12,0x10,0x11,0x16,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x44,0x7a,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x0,0xc,0xf7,0x10,0x12,0xf9,0x17,0x30,0x3f,0x54,0x55,0x95,0x15,0x14,0x17,0x14,0x40,0x48,0xfc,0x40,0x48,0x50,0xfe,0x4,0xfe,0x4,0xf4,0x14,0xf4,0x4,0xfc,0x4,
++0x0,0x6,0x78,0x9,0xff,0x1c,0x2a,0x48,0x14,0x2a,0x6b,0x9c,0x1a,0x69,0x8,0x18,0x20,0x20,0x24,0x3e,0xa0,0x20,0x24,0xfe,0x84,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x4,0xe,0xf1,0x12,0xfe,0x10,0x38,0x56,0x92,0x7c,0x44,0x7d,0x46,0x7c,0x44,0x1,0x84,0xfe,0x0,0xfc,0x84,0xfc,0x84,0xfc,0x40,0xfc,0x84,0x88,0x50,0x20,0x50,0x8e,
++0x4,0xb,0xf0,0x17,0x14,0xff,0x11,0x37,0x39,0x57,0x51,0x9f,0x11,0x13,0x1d,0x11,0x40,0xfe,0x0,0xbc,0xa4,0xbc,0x10,0xfc,0x10,0xf8,0x10,0xfe,0x48,0x30,0x8e,0x4,
++0x10,0x10,0x21,0x7d,0x45,0x45,0x45,0x7d,0x45,0x45,0x45,0x45,0x7e,0x42,0x4,0xb,0x8,0x1c,0xe0,0x0,0x0,0x0,0xfc,0x4,0x84,0x88,0x48,0x50,0x20,0x50,0x8e,0x4,
++0x10,0x10,0x20,0x7f,0x48,0x49,0x4a,0x4d,0x79,0x48,0x48,0x48,0x48,0x79,0x42,0xc,0x80,0x40,0x44,0xfe,0x0,0x10,0xc,0x14,0x10,0xa0,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x10,0x11,0x21,0x79,0x49,0x4a,0x48,0x4f,0x78,0x49,0x49,0x49,0x49,0x79,0x49,0x1,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x8,0xfe,0x8,0x1c,0x2a,0x48,0x89,0xa,0x1f,0x10,0x1f,0x10,0x10,0x1f,0x10,0xc,0xf0,0x80,0x84,0xfe,0x90,0x90,0x10,0x10,0xf8,0x10,0xf0,0x10,0x10,0xf0,0x10,
++0x10,0x17,0x20,0x7a,0x4f,0x48,0x49,0x4a,0x7f,0x4a,0x4a,0x4b,0x4a,0x7a,0x4b,0x2,0x38,0xc0,0x48,0x54,0xfe,0xe0,0x50,0x48,0xfe,0x48,0x48,0xf8,0x48,0x48,0xf8,0x8,
++0x2,0x7,0x7a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x29,0x2a,0x5e,0x40,0x80,0x10,0x10,0x50,0x54,0x7e,0x90,0x14,0xfe,0x10,0x28,0x26,0x42,0x80,0x40,0x3e,0x4,
++0x10,0x12,0xff,0x28,0x26,0x42,0xbc,0x0,0xfe,0x20,0x7c,0x4,0x4,0x44,0x29,0x12,0x0,0xc,0xf8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xc8,0xd4,0x74,0x2,
++0x0,0x7f,0x4,0x2,0x1,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x21,0x21,0x21,0x20,0x10,0xf8,0x20,0xc0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x20,0x20,0x21,0x29,0xfd,0x29,0x29,0x29,0x29,0x29,0x28,0x2a,0x4d,0x48,0x80,0x0,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x4,0x4,0x2,0xff,0x0,0x4,0x1f,0x14,0x12,0x10,0x10,0x1f,0x0,0x7f,0x0,0x0,0x80,0x44,0x7e,0x80,0x82,0x62,0xfe,0x20,0x20,0xa0,0x44,0xfe,0x4,0xe4,0x14,0x8,
++0x0,0x40,0x49,0x59,0x61,0x45,0x45,0x3d,0x11,0x11,0xfe,0x10,0x13,0x10,0x10,0x10,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x10,0x11,0x51,0x7f,0x53,0x95,0x11,0x11,0x29,0x28,0x2a,0x4d,0x48,0x80,0x0,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x10,0x11,0x15,0xff,0x11,0x11,0x11,0x7d,0x45,0x44,0x44,0x47,0x7c,0x44,0x0,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x10,0x15,0xff,0x21,0x51,0x95,0xff,0x11,0x39,0x34,0x54,0x93,0x10,0x50,0x20,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x10,0x14,0x1f,0x11,0x15,0x7f,0x45,0x45,0x7d,0x45,0x40,0x40,0x43,0x40,0x80,0x0,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x20,0x20,0x25,0x7f,0x85,0x5,0x75,0x55,0x55,0x55,0x74,0x54,0x5,0x8,0x28,0x10,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x0,0x6,0x79,0x51,0x51,0x55,0x7f,0x49,0x49,0x49,0x48,0x44,0x45,0x54,0x6a,0x1,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x94,0x8,
++0x8,0x8,0x32,0xc,0x10,0x3e,0x0,0xff,0x2,0x1f,0x12,0x11,0x1f,0x0,0x7f,0x0,0x20,0x20,0xc8,0x30,0x40,0xf8,0x4,0xfe,0x0,0xf0,0x10,0x24,0xfe,0x4,0xe4,0xc,
++0x0,0x1,0xff,0x8,0x10,0x7f,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x41,0x43,0x0,0x10,0x24,0xfe,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x8,0x8,0xfe,0x8,0xe,0x78,0x9,0x1a,0x1f,0x12,0x11,0x1f,0x0,0x7f,0x0,0x0,0x40,0x48,0xfc,0x48,0xc8,0xaa,0xa,0x6,0xe0,0x20,0x44,0xfe,0x4,0xf4,0x4,0x18,
++0x0,0xc,0x71,0x11,0x11,0x15,0xff,0x11,0x15,0x7f,0x44,0x44,0x47,0x7c,0x44,0x0,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x12,0x12,0x12,0x22,0x3f,0x62,0xa6,0x27,0x2a,0x2a,0x32,0x22,0x22,0x22,0x22,0x22,0x10,0x24,0x7e,0x44,0xd4,0x44,0x54,0x48,0xc0,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x2,0x1,0xff,0x4,0x14,0x25,0x46,0x1f,0x12,0x11,0x10,0x1f,0x0,0x7f,0x0,0x0,0x0,0x4,0xfe,0x40,0x50,0x4c,0x44,0xe0,0x20,0x20,0x44,0xfe,0x4,0xf4,0x4,0x18,
++0x8,0xa,0x7f,0x8,0x48,0x7f,0x41,0x82,0x3e,0x4,0x8,0xfe,0xb,0x8,0x28,0x10,0x20,0x48,0xfc,0x88,0xa8,0x88,0xa8,0x90,0x84,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x0,0x1,0xff,0x0,0x0,0x77,0x55,0x55,0x55,0x77,0x55,0x55,0x55,0x55,0x55,0x0,0x10,0x24,0xfe,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x8,0x28,0x2a,0x3f,0x48,0x88,0xa,0xff,0x0,0x3e,0x22,0x22,0x23,0x22,0x3e,0x22,0x20,0x48,0xfc,0x88,0xa8,0x88,0xa8,0x90,0x84,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x0,0x28,0x45,0x93,0x11,0x29,0x45,0x83,0x7d,0x45,0x44,0x44,0x47,0x7c,0x44,0x0,0x20,0x48,0xfc,0x8,0x48,0x8,0x28,0x10,0x4,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x40,0x2f,0x11,0x49,0x49,0x7f,0x49,0x59,0x5d,0x5b,0x69,0x49,0x49,0x41,0x45,0x42,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x22,0x14,0x7f,0x9,0x9,0x7f,0x48,0x48,0x7f,0x9,0x19,0x1d,0x2a,0xc8,0x8,0x8,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x4,0x6,0x7d,0x4,0x4,0xff,0x14,0x54,0x5c,0x54,0x52,0x52,0x5e,0xf1,0x40,0x0,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x82,0x8a,0x4,
++0x22,0x22,0xff,0x22,0x22,0x0,0x7f,0x49,0x49,0x49,0x7f,0x49,0x49,0x49,0x7f,0x41,0x10,0x24,0xfe,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x8,0x9,0xff,0x14,0x12,0x29,0x7f,0xc9,0x7f,0x49,0x49,0x7f,0x8,0xa,0xc,0x8,0x10,0x24,0xfe,0x44,0x54,0x44,0xd4,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x8,0x11,0x7f,0x49,0x49,0x7f,0x49,0x51,0x7f,0x10,0x29,0xff,0x8,0x8,0x8,0x8,0x10,0x24,0xfe,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x92,0xfa,0x2,0xa,0x4,
++0x10,0xa,0xff,0x0,0x3e,0x22,0x22,0x3e,0x0,0x7e,0x4,0xff,0x9,0x8,0x28,0x10,0x20,0x48,0xfc,0x88,0xa8,0x88,0xa8,0x90,0x84,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x20,0x27,0x25,0xfd,0x25,0x27,0x25,0x75,0x55,0x57,0x55,0x55,0x75,0x49,0x13,0x0,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x0,0x77,0x55,0x55,0x77,0x0,0x7f,0x0,0xff,0x20,0x3e,0x2,0x2,0x2,0x14,0x8,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0xc0,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x0,0x41,0x22,0x0,0xff,0x0,0x22,0x22,0x55,0xff,0x22,0x22,0x55,0xff,0x11,0x0,0x10,0x24,0x7e,0x44,0xd4,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x1,0x7f,0x49,0x49,0x7f,0x40,0x5f,0x51,0x51,0x5f,0x51,0x5f,0x51,0x51,0x9f,0x11,0x10,0xa4,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x7c,0x8,0xff,0x32,0x54,0x91,0x32,0x1f,0x12,0x11,0x10,0x1f,0x0,0x7f,0x0,0x0,0x80,0xfe,0x88,0x50,0x20,0x50,0x8e,0xe0,0x20,0x20,0x44,0xfe,0x4,0xf4,0x4,0x18,
++0x2,0x7,0xf8,0x41,0x2a,0x2a,0x40,0x7e,0x88,0x9,0xff,0x8,0x49,0x49,0x7f,0x1,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x82,0x12,0xfa,0x2,0xa,0x4,
++0x22,0x14,0x7f,0x14,0x7f,0x15,0xff,0x15,0x7f,0x14,0x36,0x55,0x94,0x14,0x14,0x14,0x10,0x24,0x7e,0x44,0x54,0x44,0xd4,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x0,0x77,0x55,0x55,0x55,0x55,0x22,0x55,0x10,0xff,0x22,0x22,0x14,0x8,0x16,0x61,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0xfe,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x8,0x5,0x7f,0x52,0x52,0x52,0x7f,0x52,0x52,0x5e,0x40,0x52,0x52,0x6d,0x80,0x0,0x10,0x24,0xfe,0x44,0x54,0x44,0xd4,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x0,0xee,0x22,0xaa,0x66,0xaa,0x32,0x10,0x28,0x46,0x9a,0x60,0x19,0x64,0x8,0x70,0x20,0x48,0xfc,0x88,0xa8,0x88,0xa8,0x90,0x84,0xfe,0x4,0x24,0xf4,0x4,0x14,0x8,
++0x8,0x9,0xff,0x55,0x22,0x41,0xbe,0x22,0x3e,0x22,0x3e,0x8,0x2a,0x49,0x88,0x18,0x10,0x24,0xfe,0x44,0x54,0x44,0xd4,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0x8a,0x4,
++0x14,0x14,0x3f,0x24,0x64,0xbf,0x24,0x24,0x3f,0x24,0x24,0x3f,0x20,0x55,0x54,0x80,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0x8a,0x84,
++0x8,0xff,0x22,0x3e,0x2a,0x49,0x9a,0x1f,0x12,0x11,0x10,0x1f,0x0,0x7f,0x0,0x0,0x28,0xa4,0xfe,0x20,0x52,0x92,0xe,0xe0,0x20,0x20,0x44,0xfe,0x4,0xe4,0x14,0x8,
++0x2,0x7f,0x14,0x8,0xff,0x1a,0x28,0x49,0x7f,0x55,0x63,0x5d,0x55,0x5d,0x41,0x43,0x10,0x24,0x7e,0x44,0x54,0x44,0x54,0x48,0xc0,0x7e,0x2,0x12,0xfa,0x2,0xa,0x4,
++0x10,0x23,0x7c,0x45,0x57,0x45,0x55,0x49,0x41,0x7f,0x2,0x12,0xfa,0x2,0xa,0x5,0x88,0xfe,0xa8,0xfc,0x20,0xfc,0x20,0xfc,0x20,0xfe,0x0,0xf8,0x48,0x30,0x48,0x86,
++0x0,0x7c,0x45,0x7c,0x10,0x5d,0x50,0xfe,0x4,0x1f,0x12,0x11,0x1f,0x0,0x7f,0x0,0x80,0xf8,0x50,0x20,0x50,0xfe,0x88,0xf8,0x0,0xe0,0x20,0x44,0xfe,0x4,0xe4,0x18,
++0x22,0xff,0x22,0x77,0x55,0x77,0x24,0x3f,0x64,0xbf,0x24,0x3f,0x24,0x24,0x3f,0x20,0x10,0xa4,0x7e,0x44,0x54,0x44,0x54,0x48,0x40,0x7e,0x2,0x12,0xfa,0x2,0x8a,0x4,
++0x0,0x0,0x1f,0x10,0x90,0x50,0x50,0x10,0x30,0x50,0xd0,0x10,0x20,0x20,0x40,0x0,0x80,0x44,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x0,0x0,0x1f,0x10,0x90,0x5f,0x50,0x10,0x30,0x50,0xd0,0x10,0x20,0x20,0x41,0x0,0x80,0x44,0xfe,0x0,0x4,0xfe,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x80,
++0x0,0x0,0x1f,0x10,0x90,0x57,0x50,0x10,0x30,0x50,0xd0,0x10,0x20,0x20,0x40,0x0,0x80,0x44,0xfe,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0xa4,0x94,0x88,0x80,0x80,0x80,
++0x0,0x0,0x1f,0x10,0x90,0x5f,0x51,0x11,0x31,0x51,0xd1,0x12,0x22,0x24,0x48,0x10,0x80,0x44,0xfe,0x0,0x4,0xfe,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0x50,0x20,
++0x0,0x0,0x1f,0x10,0x90,0x50,0x54,0x14,0x34,0x54,0xd4,0x14,0x24,0x27,0x40,0x0,0x80,0x44,0xfe,0x0,0x40,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xfc,0x4,0x4,
++0x0,0x0,0x1f,0x10,0x97,0x54,0x54,0x14,0x35,0x54,0xd4,0x14,0x28,0x28,0x51,0x2,0x80,0x44,0xfe,0x0,0xfc,0x0,0x40,0x44,0xfe,0x44,0x44,0x44,0x84,0x84,0x28,0x10,
++0x0,0x0,0x1f,0x10,0x90,0x50,0x5f,0x10,0x30,0x51,0xd1,0x11,0x22,0x22,0x44,0x8,0x80,0x44,0xfe,0x80,0xa0,0x94,0xfe,0xa0,0xa0,0x20,0x20,0x20,0x22,0x22,0x1e,0x0,
++0x0,0x0,0x1f,0x12,0x92,0x52,0x5f,0x12,0x32,0x52,0xd3,0x12,0x22,0x22,0x43,0x2,0x80,0x44,0xfe,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0xf0,0x10,0x10,0x10,0xf0,0x10,
++0x0,0x0,0x1f,0x10,0x90,0x5f,0x50,0x10,0x33,0x52,0xd2,0x12,0x23,0x20,0x40,0x0,0x80,0x44,0xfe,0x0,0x4,0xfe,0x8,0x8,0xc8,0x48,0x48,0x48,0xc8,0x8,0x28,0x10,
++0x0,0x0,0x1f,0x10,0x90,0x53,0x52,0x12,0x33,0x52,0xd2,0x13,0x22,0x20,0x4f,0x0,0x80,0x44,0xfe,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x0,0xfe,0x0,
++0x0,0x0,0x1f,0x11,0x91,0x51,0x52,0x12,0x34,0x58,0xd0,0x10,0x20,0x20,0x40,0x0,0x80,0x44,0xfe,0x0,0x8,0xfc,0x80,0x90,0xf8,0x80,0x88,0xfc,0x80,0x80,0x80,0x80,
++0x0,0x0,0x1f,0x12,0x92,0x53,0x54,0x1b,0x32,0x52,0xd3,0x12,0x22,0x22,0x41,0x0,0x80,0x44,0xfe,0x0,0x8,0xfc,0x8,0xc8,0x48,0x48,0xc8,0x28,0x12,0x2,0xfe,0x0,
++0x0,0x0,0x1f,0x10,0x90,0x50,0x57,0x10,0x30,0x50,0xd3,0x10,0x20,0x20,0x4f,0x0,0x80,0x44,0xfe,0x0,0x80,0x48,0xfc,0x40,0x40,0x50,0xf8,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x0,0x1f,0x10,0x90,0x5f,0x50,0x11,0x32,0x57,0xd0,0x10,0x21,0x22,0x47,0x0,0x80,0x44,0xfe,0x80,0x44,0xfe,0x80,0x0,0x10,0xe0,0x40,0x80,0x10,0x8,0xfc,0x4,
++0x0,0x0,0x1f,0x12,0x92,0x52,0x5f,0x12,0x32,0x52,0xd2,0x12,0x24,0x24,0x4a,0x11,0x80,0x44,0xfe,0x0,0x0,0x4,0xbe,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xa4,0xbc,0x24,
++0x0,0x0,0x1f,0x10,0x9f,0x51,0x51,0x19,0x35,0x55,0xd5,0x15,0x21,0x21,0x5f,0x0,0x80,0x44,0xfe,0x0,0xfc,0x20,0x20,0x24,0x24,0x28,0x28,0x30,0x20,0x24,0xfe,0x0,
++0x1,0x0,0x3f,0x20,0xbf,0x60,0x2f,0x20,0x6f,0xa8,0x2f,0x20,0x41,0x41,0x86,0x18,0x0,0x84,0xfe,0x80,0xfe,0x80,0xf8,0x88,0xf8,0x80,0xfc,0x84,0x54,0x48,0x20,0x1c,
++0x0,0x0,0x1f,0x10,0x90,0x5f,0x50,0x10,0x37,0x50,0xd0,0x15,0x25,0x29,0x40,0x0,0x80,0x44,0xfe,0x40,0x44,0xfe,0x40,0x48,0xfc,0x0,0x80,0x64,0x2a,0xa,0xf8,0x0,
++0x0,0x0,0x1f,0x11,0x97,0x51,0x51,0x17,0x34,0x58,0xd3,0x10,0x20,0x21,0x42,0xc,0x80,0x44,0xfe,0x10,0xfc,0x10,0x10,0xfe,0x82,0x84,0xf8,0x88,0x88,0x8,0x28,0x10,
++0x0,0x0,0x1f,0x10,0x97,0x50,0x53,0x11,0x31,0x5f,0xd0,0x13,0x22,0x22,0x43,0x2,0x80,0x44,0xfe,0x0,0xfc,0x80,0xf0,0x10,0x14,0xfe,0x0,0xf8,0x8,0x8,0xf8,0x8,
++0x0,0x0,0x1f,0x10,0x92,0x52,0x52,0x15,0x38,0x50,0xd7,0x10,0x20,0x20,0x4f,0x0,0x80,0x44,0xfe,0x40,0x48,0x48,0x48,0x54,0xe2,0x48,0xfc,0x40,0x40,0x44,0xfe,0x0,
++0x0,0x0,0x1f,0x12,0x91,0x55,0x54,0x17,0x34,0x54,0xd4,0x15,0x26,0x24,0x44,0x4,0x80,0x44,0xfe,0x0,0xfc,0x44,0x44,0xf4,0x44,0xc4,0xe4,0x54,0x4c,0x44,0x54,0x8,
++0x0,0x0,0x1f,0x10,0x94,0x52,0x52,0x18,0x35,0x50,0xd2,0x14,0x2c,0x24,0x44,0x3,0x80,0x44,0xfe,0x20,0x20,0xa8,0xa4,0xa2,0x2a,0x28,0x30,0x10,0x20,0x40,0x80,0x0,
++0x0,0x0,0x1f,0x10,0x9f,0x50,0x53,0x1c,0x35,0x52,0xdd,0x11,0x22,0x2c,0x41,0x0,0x80,0x44,0xfe,0x0,0xfc,0x80,0x8,0x98,0x60,0x40,0xe0,0x50,0x4e,0x44,0x40,0x80,
++0x0,0x0,0x1f,0x11,0x91,0x5f,0x51,0x11,0x3f,0x51,0xd1,0x1f,0x21,0x21,0x41,0x1,0x80,0x44,0xfe,0x20,0x24,0x3e,0x20,0x28,0x3c,0x20,0x24,0x3e,0x20,0x20,0x20,0x20,
++0x0,0x0,0x1f,0x10,0x97,0x54,0x54,0x17,0x34,0x55,0xd5,0x15,0x25,0x24,0x47,0x4,0x80,0x44,0xfe,0x0,0xfc,0x44,0x44,0xfc,0x44,0xf4,0x14,0x14,0xf4,0x4,0xfc,0x4,
++0x0,0x0,0x1f,0x10,0x93,0x50,0x5f,0x11,0x36,0x50,0xdf,0x11,0x23,0x20,0x41,0x6,0x80,0x44,0xfe,0x0,0xf8,0x40,0xfe,0x50,0x4c,0x80,0xfe,0x10,0x20,0xc0,0x30,0x8,
++0x1,0x0,0x3f,0x22,0xac,0x68,0x28,0x2e,0x68,0xa8,0x2f,0x28,0x41,0x42,0x8c,0x30,0x0,0x84,0xfe,0x80,0xb8,0x88,0x88,0xb8,0x88,0x88,0xf8,0x88,0x40,0x20,0x1e,0x4,
++0x0,0x0,0x1f,0x14,0x92,0x50,0x5f,0x12,0x33,0x52,0xd2,0x14,0x24,0x2a,0x51,0x0,0x80,0x44,0xfe,0x0,0x10,0x10,0xe8,0x28,0xa4,0xc6,0xb0,0x88,0xa0,0x98,0x8,0x0,
++0x1,0x0,0x3f,0x24,0xa2,0x6f,0x28,0x2f,0x68,0xaf,0x20,0x3f,0x40,0x40,0x80,0x0,0x0,0x84,0xfe,0x10,0x20,0xf8,0x88,0xf8,0x88,0xf8,0x80,0xfe,0x80,0x80,0x80,0x80,
++0x0,0x0,0x1f,0x11,0x9f,0x51,0x57,0x15,0x35,0x57,0xd1,0x13,0x25,0x29,0x41,0x1,0x80,0x44,0xfe,0x0,0xe4,0x4,0xd4,0x54,0x54,0xd4,0x14,0x94,0x54,0x44,0x14,0x8,
++0x1,0x0,0x3f,0x20,0xaf,0x64,0x22,0x3f,0x62,0xa4,0x28,0x37,0x40,0x40,0x9f,0x0,0x0,0x84,0xfe,0x80,0xf8,0x90,0xa4,0xfe,0x20,0x90,0x8e,0xf4,0x80,0x88,0xfc,0x0,
++0x0,0x0,0x1f,0x12,0x92,0x54,0x55,0x1c,0x34,0x55,0xd4,0x17,0x24,0x24,0x44,0x7,0x80,0x44,0xfe,0x0,0xf8,0x8,0xfe,0x40,0xfc,0x20,0x24,0xfe,0x20,0x50,0x8e,0x4,
++0x0,0x0,0x1f,0x11,0x9f,0x50,0x57,0x10,0x3f,0x51,0xd2,0x17,0x28,0x30,0x47,0x0,0x80,0x44,0xfe,0x20,0xfc,0x80,0xf8,0x80,0xfe,0x0,0x8,0xfc,0x40,0x44,0xfe,0x0,
++0x0,0x0,0x1f,0x10,0x92,0x51,0x57,0x11,0x36,0x50,0xdf,0x11,0x23,0x20,0x41,0x6,0x80,0x44,0xfe,0x40,0x48,0x50,0xfc,0x50,0x4c,0x80,0xfe,0x10,0x20,0xc0,0x30,0x8,
++0x0,0x0,0x1f,0x10,0x97,0x54,0x54,0x17,0x34,0x57,0xd4,0x14,0x27,0x24,0x44,0x5,0x80,0x44,0xfe,0x0,0xbc,0x84,0x84,0xbc,0x0,0xfc,0x24,0x28,0x90,0x28,0x46,0x84,
++0x1,0x0,0x3f,0x20,0xaf,0x64,0x22,0x21,0x62,0xbc,0x27,0x24,0x47,0x40,0x9f,0x0,0x0,0x84,0xfe,0x0,0xf8,0x90,0x20,0xc0,0x20,0x9e,0xf4,0x90,0xf0,0x88,0xfc,0x4,
++0x0,0x0,0x1f,0x12,0x9f,0x52,0x5f,0x12,0x3f,0x52,0xd1,0x12,0x2a,0x2a,0x51,0x0,0x80,0x44,0xfe,0x0,0xfc,0x24,0xa4,0x24,0xd4,0x88,0x0,0xc0,0x54,0x12,0xf2,0x0,
++0x1,0x0,0x3f,0x22,0xbf,0x62,0x2f,0x28,0x6f,0xa8,0x2f,0x20,0x5f,0x41,0x86,0x18,0x0,0x84,0xfe,0x20,0xfc,0x20,0xf8,0x8,0xf8,0x8,0xf8,0x80,0xfe,0x40,0x20,0x1c,
++0x1,0x0,0x3f,0x24,0xaf,0x69,0x2d,0x2b,0x7f,0xa9,0x2d,0x2b,0x49,0x49,0x93,0x20,0x0,0x84,0xfe,0x0,0x78,0x48,0x48,0x46,0x80,0x78,0x48,0x28,0x10,0x28,0x46,0x84,
++0x1,0x0,0x3f,0x28,0xa4,0x69,0x22,0x24,0x6f,0xb4,0x27,0x24,0x47,0x44,0x84,0x4,0x0,0x84,0xfe,0x88,0x90,0x48,0x20,0x10,0xfe,0x14,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x1,0x0,0x3f,0x22,0xaf,0x62,0x3f,0x20,0x6f,0xa8,0x2f,0x28,0x4f,0x42,0x84,0x8,0x0,0x84,0xfe,0x20,0xf8,0x20,0xfe,0x88,0xf8,0x88,0xf8,0x88,0xf8,0x20,0x18,0x8,
++0x0,0x3f,0x20,0x3f,0xa1,0x6f,0x29,0x2f,0x60,0xaf,0x20,0x3f,0x44,0x48,0x92,0x1,0x80,0xfe,0x0,0xfc,0x40,0xf8,0x48,0xf8,0x0,0xf8,0x0,0xfe,0x90,0x8c,0x84,0x0,
++0x0,0x3f,0x20,0x2f,0xa8,0x6f,0x28,0x2f,0x61,0xaf,0x21,0x2f,0x44,0x48,0x92,0x1,0x80,0xfe,0x8,0xfc,0x88,0xf8,0x88,0xf8,0x10,0xe0,0x8,0xfc,0x90,0x8c,0x84,0x0,
++0x0,0x3f,0x20,0x2f,0xa9,0x6b,0x2b,0x26,0x69,0xa1,0x3f,0x22,0x46,0x41,0x82,0xc,0x80,0xfe,0x0,0x78,0x48,0x58,0x58,0x30,0x48,0x0,0xfe,0x20,0x40,0xc0,0x30,0x10,
++0x0,0x3f,0x24,0x27,0xa9,0x75,0x2a,0x24,0x6b,0xb0,0x2f,0x20,0x44,0x44,0x8a,0x1,0x80,0xfe,0x40,0x78,0x48,0x50,0x20,0x18,0xe6,0x0,0xf8,0x80,0x90,0x8c,0x84,0x0,
++0x0,0x3f,0x20,0x2f,0xa9,0x6a,0x2c,0x2a,0x69,0xa9,0x2d,0x2a,0x48,0x48,0x89,0x8,0x80,0xfe,0x20,0x3c,0x68,0x90,0x28,0xc6,0x38,0x50,0x7c,0x90,0x7c,0x10,0xfe,0x0,
++0x0,0x3f,0x20,0x2e,0xaa,0x6a,0x2c,0x2a,0x69,0xa9,0x2d,0x2a,0x49,0x49,0x8a,0x8,0x80,0xfe,0x40,0x78,0x90,0xfc,0x4,0xfc,0x4,0xfc,0x20,0x10,0x44,0x4a,0x4a,0x38,
++0x0,0x3f,0x20,0xaf,0x69,0x25,0x25,0x69,0xa6,0x28,0x37,0x20,0x47,0x40,0x80,0xf,0x80,0xfc,0x0,0x78,0x48,0x28,0xa8,0x48,0x70,0x8e,0x24,0x40,0x90,0x20,0xc0,0x0,
++0x0,0x3f,0x21,0x20,0xbc,0x6b,0x28,0x29,0x69,0xbd,0x28,0x29,0x4a,0x4e,0xb8,0x0,0x80,0xfe,0x0,0x80,0x1e,0xe8,0x48,0x48,0x48,0x5c,0x88,0x48,0x28,0x8,0x3e,0x0,
++0x0,0x3f,0x22,0x22,0xaf,0x62,0x2f,0x2a,0x6a,0xaf,0x22,0x27,0x4a,0x52,0x82,0x2,0x80,0xfe,0x20,0x3c,0xa4,0x48,0xbe,0xa2,0xaa,0xaa,0x2a,0x2a,0xaa,0x10,0x14,0x22,
++0x0,0x3f,0x20,0x2f,0xa2,0x7f,0x20,0x2f,0x68,0xaf,0x28,0x2f,0x40,0x4a,0x92,0x21,0x80,0xfe,0x80,0xf8,0x20,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x80,0x44,0x14,0xf0,
++0x0,0x3f,0x20,0x2f,0xa8,0x6f,0x28,0x2a,0x6f,0xaa,0x2a,0x2f,0x50,0x52,0xa4,0x0,0x80,0xfe,0x0,0xdc,0x54,0xd4,0x14,0xa6,0xc0,0xbc,0x94,0xd4,0x8,0x94,0x62,0x0,
++0x1,0x0,0x3f,0x20,0xaf,0x69,0x29,0x2f,0x68,0xaf,0x39,0x29,0x49,0x4f,0x89,0x0,0x0,0x84,0xfe,0x20,0x14,0xfe,0x4,0x8,0xfe,0x10,0x10,0x7c,0x10,0x10,0x10,0x10,
++0x0,0x3f,0x22,0xbf,0x62,0x2f,0x28,0x6f,0xa8,0x2f,0x28,0x2f,0x48,0x5f,0x85,0x8,0x80,0xfe,0x0,0xfe,0x10,0xbe,0xa2,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xd0,0x14,0xa2,
++0x0,0x3f,0x20,0x2f,0xad,0x6b,0x2f,0x22,0x67,0xac,0x37,0x24,0x47,0x44,0x87,0x4,0x80,0xfe,0x0,0x78,0x68,0x58,0x78,0x40,0xfc,0x40,0xf8,0x40,0xf8,0x40,0xfc,0x0,
++0x20,0x10,0x13,0x0,0xfe,0x1,0x5,0x44,0x24,0x29,0x2a,0x8,0x16,0xf8,0x1,0x0,0x0,0x4,0xfe,0x44,0x64,0x54,0x54,0x44,0xcc,0x54,0x64,0x44,0x44,0x44,0x54,0x88,
++0x20,0x10,0x13,0x0,0xfe,0x1,0x5,0x45,0x25,0x29,0x28,0x8,0x16,0xf9,0x2,0x0,0x20,0x24,0xfe,0x20,0x24,0xfe,0x24,0x24,0x24,0xfc,0x20,0x70,0xa8,0x26,0x24,0x20,
++0x2,0x41,0x7f,0x40,0x88,0x12,0x22,0x7,0x8,0x14,0x22,0x1,0x1,0x6,0x18,0x60,0x0,0x0,0xfe,0x2,0x24,0x10,0x8,0xf0,0x10,0x20,0x40,0x80,0x0,0x0,0x0,0x0,
++0x2,0x41,0x7f,0x48,0x90,0x2f,0x0,0x0,0x1f,0x10,0x10,0x1f,0x0,0x0,0x0,0x0,0x0,0x0,0xfe,0x22,0x14,0xf8,0x10,0x10,0xf0,0x0,0x8,0xfc,0x8,0x8,0x50,0x20,
++0x2,0x41,0x7f,0x48,0x91,0x1,0xff,0x1,0x11,0x11,0x11,0x1f,0x1,0x1,0x1,0x0,0x0,0x0,0xfe,0x22,0x14,0x0,0xfe,0x0,0x10,0x10,0x10,0xf0,0x10,0x2,0x2,0xfe,
++0x2,0x41,0x7f,0x48,0x90,0x0,0x1f,0x2,0x1,0x3f,0x0,0x1,0xe,0x30,0x48,0x7,0x0,0x0,0xfe,0x22,0x14,0x70,0x80,0x0,0x20,0xf0,0x40,0x80,0x0,0x0,0x6,0xfc,
++0x2,0x41,0x7f,0x48,0x90,0x4,0x8,0x11,0x7e,0x4,0x8,0x14,0x22,0x7e,0x1,0x2,0x0,0x0,0xfe,0x22,0x14,0x40,0x48,0xfc,0x48,0x48,0x48,0x48,0x88,0x88,0x28,0x10,
++0x2,0x41,0x7f,0x48,0x92,0x2,0x22,0x12,0x16,0xa,0x12,0x62,0x4,0x4,0x18,0x60,0x0,0x0,0xfe,0x22,0x94,0x80,0x90,0x98,0xa0,0xc0,0xa0,0x98,0x8a,0x82,0x7e,0x0,
++0x41,0x7f,0x48,0x91,0x2f,0x1,0x3f,0x8,0x4,0x12,0x8,0xff,0x1,0x2,0xc,0x30,0x0,0xfe,0x22,0x14,0xe8,0x0,0xfc,0x84,0x88,0x80,0x84,0xfe,0x40,0x30,0x18,0x8,
++0x41,0x7f,0x48,0x90,0x3f,0x11,0x1f,0x11,0x1f,0x1,0xff,0x3,0x5,0x19,0x61,0x1,0x0,0xfe,0x22,0x14,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x80,0x60,0x1e,0x8,0x0,
++0x41,0x7f,0x48,0x91,0x22,0x4,0xf,0x30,0xde,0x12,0x1e,0x12,0x1e,0x12,0x12,0x16,0x0,0xfe,0x22,0x14,0x88,0x40,0xf0,0xe,0x14,0x90,0x90,0x90,0x90,0x90,0x10,0x30,
++0x41,0x7f,0x48,0x92,0x1,0x3f,0x8,0x4,0xff,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x0,0xfe,0x22,0x14,0x0,0xf8,0x20,0x44,0xfe,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x41,0x7f,0x49,0x91,0x29,0x5,0x7f,0x9,0x31,0x2,0xff,0x4,0xe,0x1,0x6,0x38,0x0,0xfe,0x22,0x14,0x28,0x40,0xfc,0x20,0x18,0x4,0xfe,0x20,0x40,0x80,0x70,0x8,
++0x41,0x7f,0x48,0x90,0x26,0x38,0x2c,0x2c,0x2a,0x2a,0x29,0x29,0x34,0x5d,0x81,0x2,0x0,0xfe,0x22,0x14,0x18,0xe8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa4,0x54,0x72,0x0,
++0x20,0x10,0x10,0x0,0xfc,0x8,0x10,0x34,0x58,0x94,0x10,0x10,0x10,0x10,0x10,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
++0x20,0x10,0x13,0x0,0xfd,0x8,0x10,0x34,0x58,0x94,0x10,0x10,0x10,0x11,0x12,0x14,0x0,0x4,0xfe,0x4,0x44,0xa8,0xa8,0x88,0x50,0x50,0x20,0x50,0x90,0x8,0x6,0x4,
++0x20,0x10,0x10,0x0,0xfd,0x9,0x11,0x35,0x59,0x95,0x11,0x11,0x11,0x11,0x11,0x11,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x54,0x4c,0x8c,0x4,0x4,0x4,0x14,0x8,
++0x20,0x10,0x13,0x0,0xfc,0x8,0x10,0x35,0x58,0x94,0x10,0x10,0x10,0x10,0x13,0x10,0x8,0x1c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x20,0x10,0x10,0x0,0xfd,0xa,0x14,0x30,0x54,0x9b,0x14,0x10,0x10,0x10,0x10,0x10,0x40,0x40,0xa0,0xa0,0x10,0x8e,0x64,0x20,0x0,0xf8,0x8,0x10,0x10,0x20,0x40,0x80,
++0x20,0x10,0x10,0x0,0xfd,0x8,0x10,0x34,0x5b,0x94,0x10,0x10,0x10,0x11,0x12,0x14,0x40,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0xfe,0x40,0x40,0xa0,0xa0,0x10,0xe,0x4,
++0x20,0x10,0x11,0x0,0xfc,0x8,0x11,0x34,0x58,0x94,0x13,0x10,0x10,0x10,0x10,0x10,0x20,0x20,0x24,0xac,0xb0,0x20,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x20,0x10,0x11,0x0,0xfc,0x8,0x11,0x34,0x58,0x94,0x11,0x10,0x10,0x10,0x13,0x10,0x20,0x20,0x24,0xac,0xb0,0x24,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0xfc,0x4,
++0x20,0x10,0x10,0x0,0xfd,0xa,0x15,0x30,0x54,0x99,0x15,0x11,0x11,0x11,0x11,0x11,0x40,0x40,0xa0,0x90,0x8,0xe,0xf4,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x10,0x10,0x1,0xfd,0xa,0x10,0x34,0x5b,0x95,0x11,0x11,0x11,0x11,0x11,0x11,0x80,0x88,0xfc,0x88,0x50,0x20,0x50,0x88,0x6,0xf8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x11,0x11,0x1,0xfd,0x9,0x11,0x35,0x59,0x95,0x11,0x11,0x11,0x11,0x11,0x11,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x44,0x48,0x30,0x20,0x10,0x4e,0x84,0x0,
++0x40,0x24,0x22,0x2,0xf8,0x10,0x26,0x2a,0x72,0xaa,0x22,0x22,0x22,0x25,0x28,0x20,0x20,0x20,0x28,0xfc,0x40,0x50,0x90,0xfc,0x10,0x14,0xfe,0x10,0x10,0x16,0xfc,0x0,
++0x20,0x11,0x11,0x1,0xfd,0x9,0x10,0x35,0x58,0x94,0x11,0x10,0x10,0x10,0x17,0x10,0x4,0xfe,0x4,0x4,0x4,0xfc,0x0,0xfc,0x20,0x20,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x20,0x10,0x10,0x1,0xfd,0xa,0x15,0x34,0x5a,0x95,0x11,0x11,0x11,0x10,0x17,0x10,0x40,0x40,0xa0,0x10,0x10,0x28,0xf6,0x0,0x48,0x48,0x48,0x50,0x50,0x24,0xfe,0x0,
++0x22,0x11,0x10,0x2,0xfe,0xa,0x12,0x36,0x5a,0x96,0x12,0x12,0x12,0x12,0x12,0x12,0x4,0xbe,0x84,0x4,0x4,0xf4,0x94,0x94,0xf4,0x94,0x94,0xf4,0x4,0x4,0x14,0x8,
++0x20,0x10,0x10,0x3,0xfc,0x9,0x10,0x37,0x58,0x94,0x11,0x13,0x15,0x11,0x11,0x11,0x40,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0x44,0xa8,0x30,0x20,0x10,0x48,0x8e,0x4,
++0x20,0x10,0x10,0x3,0xfc,0x8,0x13,0x34,0x59,0x95,0x13,0x15,0x19,0x11,0x11,0x11,0x80,0x80,0x88,0xf8,0x90,0xa4,0xfe,0x40,0xf8,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x20,0x11,0x11,0x1,0xfd,0x9,0x11,0x34,0x58,0x95,0x12,0x14,0x11,0x12,0x10,0x11,0x8,0xfc,0x8,0xf8,0x8,0x8,0xf8,0x84,0xfe,0x54,0x94,0xa4,0x24,0x44,0xa8,0x10,
++0x20,0x10,0x11,0x1,0xfd,0x9,0x11,0x35,0x59,0x94,0x11,0x17,0x10,0x10,0x10,0x10,0x20,0x44,0xfe,0x24,0x24,0xfc,0x24,0x44,0xfc,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x20,0x11,0x11,0x1,0xfd,0x9,0x11,0x35,0x59,0x95,0x11,0x12,0x12,0x14,0x18,0x10,0x4,0xfe,0x4,0x4,0xfc,0x20,0x24,0xfe,0x20,0x24,0xfe,0x84,0x84,0x84,0xfc,0x84,
++0x40,0x2f,0x20,0x5,0xfa,0x15,0x20,0x68,0xb7,0x28,0x24,0x25,0x22,0x25,0x28,0x30,0x0,0xfc,0x84,0x28,0x10,0x28,0xc4,0x0,0xbc,0x84,0xc4,0x28,0x10,0x28,0xce,0x84,
++0x21,0x11,0x17,0x1,0xfc,0x8,0x11,0x3a,0x55,0x98,0x13,0x12,0x12,0x12,0x13,0x12,0x10,0x14,0xfe,0x10,0x40,0xa0,0x10,0x8,0xf6,0x0,0xf8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x10,0x13,0x0,0xfc,0xb,0x10,0x35,0x59,0x95,0x11,0x11,0x11,0x11,0x11,0x11,0x90,0x94,0x98,0x90,0x92,0x8e,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0x28,0x10,
++0x21,0x11,0x11,0x1,0xfa,0xa,0x16,0x3a,0x52,0x9a,0x12,0x12,0x12,0x12,0x12,0x12,0x4,0x7e,0x44,0x44,0x44,0x7c,0x10,0x10,0xfe,0x10,0x38,0x54,0x54,0x92,0x10,0x10,
++0x20,0x12,0x11,0x0,0xff,0x9,0x12,0x34,0x58,0x97,0x19,0x12,0x11,0x10,0x11,0x16,0x40,0x48,0x50,0x44,0xfe,0x50,0x48,0x46,0x80,0xfe,0x10,0x10,0xa0,0x40,0xb0,0xc,
++0x40,0x20,0x27,0x4,0xfc,0x17,0x24,0x6c,0xb7,0x2e,0x26,0x2b,0x2a,0x32,0x22,0x22,0x80,0x44,0xfe,0x4,0x4,0xfc,0x0,0x4,0xfe,0x94,0x94,0xfc,0x94,0x94,0x94,0x8,
++0x20,0x12,0x12,0x2,0xfe,0xa,0x12,0x34,0x58,0x97,0x12,0x12,0x12,0x12,0x17,0x10,0x90,0x90,0x94,0xbe,0xa0,0xd0,0x88,0x80,0x4,0xfe,0x94,0x94,0x94,0x94,0xfe,0x0,
++0x40,0x27,0x24,0x4,0xfd,0x15,0x25,0x6d,0xb5,0x2d,0x25,0x25,0x29,0x2a,0x34,0x21,0x3c,0xe0,0x3c,0x20,0xfe,0x22,0xf8,0x24,0x1c,0x0,0x78,0x48,0x48,0x4a,0x8a,0x6,
++0x40,0x2f,0x20,0x4,0xfa,0x12,0x24,0x68,0xb3,0x2a,0x22,0x23,0x22,0x22,0x23,0x22,0x4,0xbe,0x84,0xa4,0x94,0x94,0xa4,0x48,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,
++0x40,0x2f,0x21,0x1,0xf9,0x17,0x24,0x6c,0xb7,0x29,0x21,0x21,0x21,0x21,0x2a,0x24,0x4,0x7e,0x44,0x44,0x44,0x7c,0x10,0x7c,0x54,0x54,0x54,0x7c,0x10,0x14,0xfe,0x2,
++0x43,0x20,0x2f,0x8,0xfb,0x10,0x23,0x68,0xb7,0x28,0x27,0x24,0x24,0x24,0x24,0x24,0xf8,0x40,0xfe,0x42,0x5c,0x40,0x58,0x44,0xfe,0x80,0xfc,0xa4,0xa4,0xa4,0xb4,0x8,
++0x42,0x22,0x2f,0x2,0xf7,0x2a,0x22,0x77,0xa1,0x33,0x24,0x29,0x20,0x27,0x20,0x20,0xa8,0x48,0xbe,0xa8,0x5c,0xaa,0x8,0xfe,0x10,0xf8,0x44,0xf2,0x40,0xfc,0x40,0xc0,
++0x0,0x0,0x7f,0x1,0x1,0x9,0x9,0x9,0x9,0x11,0x11,0x19,0x25,0x23,0x41,0x80,0x0,0x8,0xfc,0x8,0x10,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x0,0x0,0x86,0x7c,
++0x7f,0x1,0x9,0x9,0x9,0x15,0x23,0xc0,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0xfc,0x8,0x0,0xf0,0x0,0x6,0xfc,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x50,0x20,
++0x0,0x7f,0x52,0x91,0x7d,0x11,0x29,0x29,0x7d,0x9,0x9,0xfd,0xa,0xa,0xd,0xa,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xfc,0x88,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x10,0x10,0x28,0x45,0xfd,0x45,0xa3,0x3d,0x25,0x45,0xa9,0x11,0x2a,0x44,0x89,0x2,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xf8,0x88,0x50,0x20,0x50,0x50,0x88,0xe,0x4,
++0x0,0x7e,0x2,0x24,0x18,0x9,0xfe,0xa,0x18,0x19,0x28,0x48,0x88,0x8,0x28,0x10,0x20,0x20,0x50,0x50,0x88,0x46,0x24,0x20,0x8,0xfc,0x8,0x8,0x10,0x10,0x20,0x40,
++0x1,0x1,0x7f,0x1,0x1,0x3f,0x1,0x1,0xff,0x3,0x5,0x9,0x11,0x21,0x41,0x1,0x0,0x8,0xfc,0x0,0x0,0xf8,0x0,0x4,0xfe,0x80,0x40,0x20,0x10,0xe,0x4,0x0,
++0x10,0x10,0x15,0xfe,0x10,0x7c,0x10,0xfe,0x33,0x38,0x54,0x50,0x90,0x10,0x10,0x10,0x0,0x8,0xfc,0x8,0x10,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x10,0x10,0x14,0xfe,0x10,0x10,0x7c,0x11,0xfd,0x30,0x38,0x54,0x50,0x90,0x11,0x16,0x20,0x20,0x20,0x20,0xa8,0xa4,0xa2,0x22,0x28,0x2c,0x10,0x20,0x40,0x80,0x0,0x0,
++0x10,0x11,0x15,0xff,0x11,0x7d,0x11,0xff,0x31,0x39,0x55,0x55,0x91,0x11,0x11,0x11,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x14,0xfe,0x11,0x7e,0x11,0xfe,0x30,0x39,0x55,0x55,0x91,0x11,0x11,0x11,0x40,0x40,0xa0,0x90,0x8,0x2e,0xf4,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x13,0xfc,0x10,0x7f,0x12,0xfc,0x30,0x3b,0x54,0x54,0x91,0x11,0x12,0x14,0x88,0x88,0xfe,0x88,0x88,0xfe,0x2,0x84,0x80,0xf8,0x88,0x88,0x8,0x8,0x28,0x10,
++0x10,0x12,0x11,0xfd,0x11,0x7c,0x13,0xfe,0x32,0x3a,0x56,0x56,0x92,0x12,0x12,0x12,0x40,0x48,0x4c,0x48,0x50,0x44,0xfe,0x4,0xf4,0x94,0x94,0x94,0xf4,0x4,0x14,0x8,
++0x10,0x11,0x15,0xff,0x11,0x7d,0x11,0xfd,0x30,0x3b,0x56,0x56,0x92,0x12,0x12,0x12,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x22,0x2a,0xfa,0x2,0xa,0x4,
++0x10,0x12,0x11,0xfc,0x13,0x7d,0x12,0xfc,0x38,0x37,0x51,0x52,0x91,0x10,0x11,0x16,0x40,0x48,0x50,0x44,0xfe,0x50,0x4c,0x44,0x80,0xfe,0x10,0x10,0xa0,0x40,0xb0,0xc,
++0x11,0x11,0x17,0xf9,0x13,0x79,0x17,0xf8,0x33,0x3a,0x57,0x52,0x9f,0x12,0x12,0x12,0x10,0x10,0xfc,0x10,0xf8,0x10,0xfe,0x40,0xf8,0x48,0xf8,0x48,0xfe,0x8,0x28,0x10,
++0x10,0x13,0x12,0xff,0x12,0x7f,0x12,0xfe,0x32,0x32,0x52,0x53,0x94,0x14,0x18,0x10,0x8,0xfc,0x0,0xf8,0x0,0xfe,0xa4,0x98,0xae,0xc4,0x8,0xfe,0x88,0x88,0x28,0x10,
++0x10,0x10,0x13,0xfe,0x13,0x7e,0x12,0xff,0x32,0x3b,0x56,0x52,0x92,0x15,0x1a,0x10,0x40,0x24,0xfe,0x48,0xfe,0x58,0xec,0x4a,0x48,0xfe,0x40,0xfc,0x84,0x84,0xfc,0x84,
++0x1,0x1f,0x1,0xff,0x4,0x1b,0x68,0x7,0x0,0x7f,0x10,0x3f,0x1,0x1f,0x1,0xff,0x20,0xc0,0x4,0xfe,0x0,0xe0,0x8,0xf8,0x0,0xfc,0x10,0xf8,0x4,0xf0,0x4,0xfe,
++0x2,0xff,0x25,0x24,0x3c,0x24,0x24,0x3c,0x24,0x24,0x27,0x3c,0xe4,0x44,0x4,0x4,0x0,0x4,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x2,0xff,0x24,0x25,0x3d,0x25,0x25,0x3d,0x25,0x27,0x25,0x3f,0xe5,0x45,0x5,0x5,0x20,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfe,0x4,0x4,0x4,0x4,0x14,0x8,
++0x2,0xff,0x24,0x24,0x3c,0x25,0x26,0x3c,0x25,0x24,0x26,0x3c,0xe4,0x44,0x4,0x4,0x20,0x20,0x50,0x50,0x88,0x46,0x24,0x20,0xfc,0x4,0x8,0x90,0x60,0x20,0x10,0x0,
++0x2,0xff,0x24,0x25,0x3d,0x26,0x24,0x3f,0x24,0x24,0x27,0x3c,0xe4,0x44,0x4,0x4,0x40,0x20,0x20,0xfe,0x2,0x4,0x0,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,0xa0,0x40,
++0x2,0xff,0x25,0x24,0x3c,0x27,0x24,0x3c,0x24,0x25,0x27,0x3d,0xe5,0x45,0x5,0x5,0x8,0x1c,0xe0,0x20,0x24,0xfe,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x2,0xff,0x25,0x25,0x3d,0x24,0x27,0x3c,0x25,0x25,0x27,0x3d,0xe5,0x44,0x4,0x5,0x20,0x24,0xfe,0x24,0xfc,0x20,0xfe,0x0,0xfc,0x4,0x24,0x24,0x24,0x50,0x8c,0x4,
++0x8,0x7f,0x8,0x7f,0x8,0xff,0x10,0x2e,0x42,0xbf,0xc,0xb,0x8,0xff,0x0,0x0,0x40,0x44,0x7e,0x44,0xa8,0x10,0x28,0x46,0x84,0xf8,0x20,0xa0,0x64,0xfe,0x20,0x20,
++0xff,0x4,0x3f,0x24,0x3f,0x0,0x1f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x1,0x1,0x1,0xfe,0x40,0xf8,0x48,0xf8,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,0x0,0x0,
++0x0,0xb,0x7c,0x10,0x11,0x11,0x15,0xff,0x11,0x11,0x11,0x11,0x11,0x10,0x10,0x13,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x44,0x58,0x86,0x2,
++0x4,0xf,0x70,0x40,0x41,0x41,0x7f,0x49,0x49,0x49,0x49,0x49,0x49,0x88,0x8,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x44,0x58,0x86,0x2,
++0x20,0x13,0x10,0xfe,0x1,0x9,0x7d,0x49,0x49,0x49,0x49,0x49,0x4d,0x48,0x80,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x44,0x58,0x86,0x2,
++0x10,0x13,0x10,0xfe,0x11,0x11,0x7d,0x1,0x7d,0x45,0x45,0x45,0x44,0x7c,0x40,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x48,0x86,0x2,
++0x10,0x13,0x10,0x28,0x45,0x81,0x7d,0x1,0x7d,0x45,0x45,0x45,0x44,0x7c,0x40,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x48,0x86,0x2,
++0x40,0x45,0x48,0x70,0x45,0x7d,0x1,0x13,0xf5,0x39,0x39,0x55,0x54,0x90,0x30,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x48,0x86,0x2,
++0x20,0x13,0x10,0xfe,0x11,0x11,0x25,0x7d,0x9,0x11,0x25,0xc9,0x18,0x24,0xc2,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x48,0x86,0x2,
++0x10,0x13,0x28,0x26,0x53,0x81,0x7d,0x5,0x9,0x7d,0x45,0x45,0x44,0x7c,0x44,0x3,0x4,0xfe,0x20,0x44,0xfe,0x4,0x24,0x24,0x24,0x24,0x24,0x24,0x50,0x48,0x86,0x2,
++0x1,0x77,0x55,0x55,0x77,0x0,0x3e,0x0,0xff,0x20,0x3e,0x2,0x2,0x2,0x14,0x9,0x4,0xfe,0x10,0x24,0x7e,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x64,0x28,0x46,0x82,
++0x8,0x49,0x49,0x49,0x7f,0x0,0xff,0x8,0x7f,0x55,0x55,0x55,0x55,0x55,0x43,0x0,0x4,0xfe,0x10,0x24,0x7e,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x64,0x28,0x46,0x82,
++0x2,0xff,0x22,0x3e,0x22,0x3e,0x22,0xff,0x2,0x77,0x11,0x55,0x22,0x22,0x55,0x88,0x4,0xfe,0x10,0x24,0x7e,0x44,0x54,0xd4,0x54,0x54,0x54,0x54,0x64,0x28,0x46,0x82,
++0x24,0x24,0xff,0x24,0x2,0xff,0x24,0x24,0xff,0xa5,0xa5,0xdb,0x81,0x85,0x82,0x0,0x4,0xfe,0x10,0x24,0x7e,0x44,0x54,0x54,0x54,0x54,0x54,0x54,0x20,0x28,0x46,0x82,
++0x0,0x3e,0x14,0x8,0x14,0x77,0x55,0x22,0x55,0x8,0xff,0x18,0x2c,0x4b,0x89,0x8,0x4,0xfe,0x10,0x24,0x7e,0x44,0x54,0x54,0x54,0x54,0xd4,0x54,0x20,0x28,0x46,0x82,
++0x2,0x3f,0x22,0x3e,0x22,0x3e,0x8,0xff,0x0,0x3e,0x22,0x3e,0x8,0x2a,0x49,0x18,0x4,0xfe,0x10,0x24,0x7e,0x44,0x54,0xd4,0x54,0x54,0x54,0x54,0x20,0x28,0x46,0x82,
++0x2,0x7f,0x8,0xff,0x88,0x6b,0x8,0x6b,0x8,0xff,0x10,0x7f,0x55,0x55,0x55,0x43,0x4,0xfe,0x10,0xa4,0xfe,0x44,0x54,0x54,0x54,0xd4,0x54,0x54,0x20,0x28,0x46,0x82,
++0x9,0x2e,0x28,0xff,0x4a,0xc,0x32,0xdf,0x11,0x1f,0x12,0x1f,0x5,0xff,0x1,0x1,0xfe,0x20,0xfc,0x94,0x94,0x28,0xc4,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,0x0,
++0x1,0x1,0x1,0x1,0x3f,0x20,0x22,0x22,0x22,0x22,0x23,0x26,0x5a,0x42,0x81,0x0,0x0,0x10,0xf8,0x0,0xfc,0x4,0x8,0x20,0x60,0x80,0x0,0x0,0x4,0x4,0xfc,0x0,
++0x1,0x1,0x1,0x3f,0x22,0x3f,0x22,0x23,0x21,0x20,0x2f,0x22,0x41,0x40,0x83,0x1c,0x10,0xf8,0x0,0xfc,0x4,0xc8,0x10,0xf0,0x0,0x88,0xfc,0x20,0x40,0x80,0x60,0x1c,
++0x8,0x8,0x8,0x9,0x7f,0x49,0x49,0x49,0x49,0x7f,0x48,0x9,0xf,0xf1,0x40,0x0,0x40,0x40,0x40,0x40,0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x10,0x10,0x10,0x14,0x7e,0x54,0x54,0x54,0x54,0x7c,0x50,0x14,0x1d,0xe5,0x42,0x4,0x0,0x10,0xf8,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x12,0x12,0xe,0x0,
++0x0,0xff,0x4,0x4,0x7,0x8,0x31,0xc1,0x3f,0x21,0x21,0x3f,0x1,0x1,0x7f,0x0,0x4,0xfe,0x0,0x10,0xf8,0x10,0x50,0x28,0xfc,0x8,0x8,0xf8,0x0,0x8,0xfc,0x4,
++0x0,0x2,0xff,0x24,0x25,0x25,0x25,0x25,0x25,0x24,0x24,0x24,0x25,0x44,0x43,0x80,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0xfc,0x20,0x24,0x3c,0xc6,0x2,0xfe,0x0,
++0x10,0x10,0x10,0x15,0x7e,0x54,0x55,0x54,0x54,0x7c,0x50,0x14,0x1d,0xe5,0x40,0x0,0x80,0x80,0x88,0xfc,0x0,0x0,0xf8,0x8,0x10,0x20,0x40,0x80,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x10,0x14,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x40,0x0,0x40,0x20,0x20,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8,0xfc,0x0,
++0x10,0x10,0x10,0x14,0x7d,0x54,0x54,0x54,0x57,0x7c,0x50,0x14,0x1c,0xe4,0x41,0x6,0x20,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x50,0x50,0x88,0x88,0x6,0x4,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x0,0x20,0x20,0x20,0x20,0x24,0xec,0x30,0x20,0x20,0x20,0x20,0x20,0x62,0xa2,0x1e,0x0,
++0x10,0x10,0x10,0x14,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x54,0x4c,0x8c,0x4,0x4,0x14,0x8,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x14,0x1c,0xe5,0x42,0xc,0x8,0xfc,0x8,0x28,0x28,0x28,0x28,0x48,0x48,0x48,0xa8,0xa0,0xa0,0x22,0x22,0x1e,
++0x10,0x10,0x13,0x14,0x7e,0x54,0x57,0x54,0x54,0x7c,0x53,0x14,0x1c,0xe4,0x40,0x0,0x8,0x1c,0xe0,0x40,0x48,0x7c,0xc0,0x40,0x44,0x7e,0xc0,0x40,0x40,0x42,0x42,0x3e,
++0x10,0x10,0x10,0x14,0x7e,0x55,0x56,0x54,0x54,0x7c,0x50,0x14,0x1c,0xe4,0x41,0x2,0x20,0x20,0x50,0x50,0x88,0xe,0x4,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x8,0x8,
++0x10,0x10,0x10,0x14,0x7e,0x54,0x54,0x55,0x56,0x7c,0x50,0x14,0x1c,0xe5,0x41,0x0,0x0,0x10,0x58,0x50,0x50,0x88,0x88,0x26,0x24,0x20,0x40,0x40,0x90,0x8,0xfc,0x4,
++0x10,0x10,0x11,0x14,0x7e,0x54,0x55,0x54,0x54,0x7c,0x53,0x14,0x1c,0xe4,0x40,0x0,0x10,0x10,0x10,0xd0,0x50,0x10,0x10,0x90,0x94,0x1e,0xf0,0x10,0x10,0x10,0x10,0x10,
++0x10,0x13,0x10,0x14,0x7f,0x55,0x55,0x55,0x55,0x7c,0x50,0x14,0x1c,0xe4,0x1,0x0,0x24,0xf4,0x24,0x24,0xe4,0x4,0x4,0x24,0xf4,0x24,0x24,0x24,0x24,0x24,0x44,0x84,
++0x1,0x21,0x21,0x3f,0x1,0xff,0x1,0x1,0x1f,0x11,0x11,0x1f,0x1,0x1,0x7f,0x0,0x0,0x8,0x8,0xf8,0x4,0xfe,0x0,0x10,0xf8,0x10,0x10,0xf0,0x0,0x8,0xfc,0x4,
++0x10,0x10,0x10,0x14,0x7f,0x54,0x54,0x54,0x54,0x7c,0x50,0x14,0x1c,0xe4,0x40,0x0,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0xf8,0x88,
++0x10,0x10,0x10,0x14,0x7f,0x54,0x54,0x54,0x54,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x17,0x14,0x7e,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1c,0xe4,0x40,0x0,0x0,0x4,0xfe,0x8,0x8,0xe8,0x28,0x28,0x28,0x28,0xe8,0x28,0x8,0x8,0x28,0x10,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe6,0x44,0x9,0x4,0xfe,0x0,0x4,0xfe,0x20,0x24,0x3e,0x24,0x24,0x24,0x24,0x44,0x44,0x94,0x8,
++0x10,0x10,0x10,0x14,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x10,0x10,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x17,0x1d,0xe5,0x41,0x1,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0xfe,0x4,0x4,0x14,0x8,
++0x10,0x10,0x10,0x14,0x7f,0x55,0x56,0x54,0x54,0x7c,0x50,0x14,0x1c,0xe4,0x40,0x0,0x80,0xc0,0x84,0xfe,0x40,0x40,0x48,0x7c,0x40,0x40,0x44,0x7e,0x40,0x40,0x40,0x40,
++0x10,0x10,0x10,0x14,0x7e,0x54,0x54,0x54,0x54,0x7c,0x50,0x14,0x1c,0xe4,0x47,0x0,0x8,0x1c,0xe0,0x80,0x80,0x80,0x88,0xfc,0x90,0x90,0x90,0x90,0x90,0x94,0xfe,0x0,
++0x10,0x10,0x10,0x14,0x7e,0x55,0x56,0x54,0x54,0x7d,0x50,0x14,0x1c,0xe4,0x40,0x0,0x20,0x20,0x50,0x50,0x88,0x46,0x24,0x20,0x0,0xfc,0x8,0x10,0xa0,0x40,0x20,0x20,
++0x10,0x11,0x11,0x14,0x7e,0x54,0x54,0x54,0x57,0x7c,0x51,0x14,0x1c,0xe4,0x43,0x0,0x0,0xfc,0x4,0x88,0x50,0x20,0x50,0x8e,0x24,0x20,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x10,0x14,0x7e,0x55,0x55,0x57,0x54,0x7c,0x51,0x17,0x1c,0xe4,0x40,0x1,0x10,0x90,0x90,0x94,0xbe,0x14,0x54,0xd4,0x94,0x94,0x54,0xf4,0x24,0x44,0x94,0x8,
++0x4,0x7e,0x8,0x8,0x8,0xe,0xf1,0x1,0x1f,0x11,0x11,0x1f,0x11,0x1,0x7f,0x0,0x8,0xfc,0x88,0xc8,0xaa,0x8a,0x6,0x10,0xf8,0x10,0x10,0xf0,0x0,0x8,0xfc,0x4,
++0x10,0x10,0x10,0x15,0x7e,0x55,0x54,0x54,0x54,0x7f,0x50,0x14,0x1c,0xe4,0x41,0x2,0x20,0x20,0x28,0xfc,0x20,0x24,0xac,0xb0,0x24,0xfe,0x50,0x50,0x90,0x88,0x6,0x4,
++0x10,0x10,0x10,0x15,0x7e,0x54,0x54,0x57,0x54,0x7d,0x50,0x14,0x1c,0xe4,0x41,0x2,0x80,0x80,0x5c,0xe0,0x50,0x22,0xd2,0xe,0x0,0xfc,0x90,0x90,0x92,0x92,0xe,0x0,
++0x10,0x10,0x11,0x14,0x7e,0x54,0x54,0x55,0x54,0x7c,0x51,0x14,0x1c,0xe4,0x43,0x0,0x0,0x8,0xfc,0x20,0x20,0x48,0x84,0xfe,0x22,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x20,0x20,0x22,0x2a,0xfe,0xaa,0xaa,0xaa,0xaa,0xfa,0xa2,0x2a,0x38,0xc9,0x1,0x2,0x80,0x84,0xbe,0x88,0x88,0xbe,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xae,0x8,0x8,0x8,
++0x10,0x10,0x10,0x14,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x50,0x50,0x50,0x54,0xfe,0x54,0x54,0x54,0x54,0xfc,0x54,0x54,0x54,0x54,0xfc,0x4,
++0x20,0x20,0x27,0x29,0xfd,0xaa,0xaa,0xaf,0xa9,0xf9,0xa5,0x2b,0x39,0xca,0x4,0x8,0x0,0xc,0x70,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x7c,0x0,0x86,0x7c,0x0,
++0x10,0x10,0x11,0x14,0x7e,0x54,0x57,0x54,0x54,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x8,0x1c,0xe0,0x20,0x20,0x24,0xfe,0x20,0x24,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x10,0x10,0x10,0x15,0x7e,0x54,0x54,0x54,0x57,0x7c,0x50,0x14,0x1c,0xe4,0x41,0x2,0x40,0x20,0x24,0xfe,0x88,0x50,0x20,0xd8,0x6,0x88,0x88,0x88,0x88,0x88,0x8,0x8,
++0x10,0x10,0x10,0x15,0x7e,0x54,0x55,0x56,0x54,0x7c,0x50,0x14,0x1c,0xe4,0x1,0x6,0x40,0x20,0x4,0xfe,0x88,0x88,0x4,0x8a,0x88,0x50,0x50,0x20,0x50,0x88,0x6,0x4,
++0x11,0x10,0x10,0x10,0x7d,0x54,0x54,0x55,0x54,0x7c,0x53,0x14,0x1c,0xe4,0x40,0x0,0x4,0x8c,0x50,0x4,0xfe,0x20,0x20,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x10,0x10,0x10,0x14,0x7f,0x54,0x54,0x54,0x55,0x7c,0x53,0x14,0x1c,0xe4,0x40,0x0,0x20,0x20,0x40,0x88,0xfc,0x20,0xa8,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x3f,0x20,0x2f,0x20,0x3f,0x24,0x24,0x26,0x24,0x2f,0x28,0x28,0x4f,0x40,0xbf,0x0,0xfc,0x0,0xf8,0x0,0xfe,0x88,0x50,0xb0,0x8e,0xf8,0x88,0x88,0xf8,0x84,0xfc,0x2,
++0x8,0x8,0xfe,0x8,0xe,0xf8,0x9,0x2a,0x11,0x3f,0x21,0x21,0x3f,0x1,0x7f,0x0,0x4,0xf8,0x80,0x84,0xfe,0x90,0x10,0x10,0x10,0xf8,0x8,0x8,0xf8,0x4,0xfc,0x2,
++0x10,0x11,0x10,0x14,0x7e,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x20,0x24,0xa8,0xb0,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x14,0x8,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x54,0x57,0x54,0x7c,0x53,0x14,0x1c,0xe5,0x42,0x4,0x8,0xfc,0x8,0x8,0x8,0xf8,0x0,0xfc,0x40,0x44,0xfe,0xa0,0xa0,0x10,0xe,0x4,
++0x10,0x10,0x13,0x10,0x7c,0x57,0x54,0x55,0x55,0x7e,0x52,0x14,0x1c,0xe4,0x40,0x0,0x44,0xe4,0x84,0x84,0x94,0xf4,0x94,0x94,0xd4,0xb4,0x94,0x94,0x84,0x84,0x94,0x88,
++0x10,0x10,0x10,0x14,0x7e,0x55,0x56,0x54,0x54,0x7d,0x50,0x14,0x1d,0xe6,0x40,0x0,0x20,0x20,0x50,0x88,0x88,0x6,0xf8,0x20,0x28,0xfc,0x20,0xa8,0x26,0x22,0xa0,0x40,
++0x10,0x10,0x13,0x11,0x7c,0x54,0x55,0x54,0x54,0x7c,0x53,0x14,0x1c,0xe4,0x40,0x0,0x8,0x1c,0xe0,0x24,0xa4,0xa8,0xfc,0x8,0x30,0x24,0xfe,0x20,0x20,0x20,0xa0,0x40,
++0x11,0x10,0x13,0x14,0x7e,0x55,0x54,0x54,0x57,0x7c,0x50,0x14,0x1c,0xe4,0x41,0x6,0x4,0x88,0xfe,0x20,0x28,0xfc,0x20,0x24,0xfe,0x50,0x50,0x50,0x92,0x92,0xe,0x0,
++0x10,0x10,0x13,0x10,0x7d,0x54,0x57,0x54,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x20,0x24,0xfe,0x20,0xfc,0x20,0xfe,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x4,0x14,0x8,
++0x10,0x10,0x13,0x14,0x7e,0x54,0x54,0x54,0x54,0x7c,0x50,0x17,0x1c,0xe4,0x41,0x2,0x88,0x88,0xfe,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,0x88,0xfe,0x0,0x88,0x6,0x2,
++0x10,0x10,0x10,0x14,0x7f,0x54,0x55,0x55,0x55,0x7e,0x52,0x14,0x1c,0xe4,0x40,0x0,0x80,0x86,0x98,0x90,0xf0,0x90,0x9e,0xd4,0xb4,0x94,0x94,0x94,0xa4,0xa4,0xc4,0x84,
++0x20,0x20,0x20,0x27,0xf8,0xa8,0xab,0xaa,0xaa,0xfa,0xa3,0x28,0x39,0xce,0x4,0x0,0x20,0x28,0x24,0xfe,0x20,0x20,0xa4,0xa4,0xa4,0xa8,0xa8,0x10,0xb2,0x52,0x8a,0x4,
++0x2,0x2,0x7e,0x2,0x3e,0x2,0x7e,0x2,0x1,0x3f,0x21,0x21,0x3f,0x1,0xff,0x0,0x80,0x88,0xfc,0x80,0xf8,0x80,0xfe,0x80,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfc,0x2,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x55,0x55,0x54,0x7f,0x50,0x14,0x1c,0xe5,0x42,0x0,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x20,0x70,0xa8,0x2e,0x24,0x20,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x4,0xfe,0x4,0x14,0xfc,0x24,0x24,0xfc,0x24,0x34,0x2c,0xfc,0x4,0x4,0xfc,0x4,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x55,0x54,0x54,0x7d,0x52,0x14,0x1d,0xe6,0x40,0x1,0x8,0xfc,0x8,0xf8,0x8,0x8,0xf8,0x84,0xfe,0x54,0x94,0xa4,0x24,0x44,0xa8,0x10,
++0x10,0x10,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7c,0x50,0x17,0x1c,0xe4,0x40,0x0,0x20,0x44,0xfe,0x24,0x24,0xfc,0x24,0x44,0xfc,0x50,0x94,0xfe,0x10,0x10,0x10,0x10,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x42,0x4,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,0x74,0x54,0x54,0x74,0x4,0x14,0x8,
++0x10,0x11,0x10,0x10,0x7d,0x54,0x57,0x54,0x54,0x7d,0x52,0x14,0x1c,0xe4,0x40,0x0,0x20,0x24,0xa8,0x20,0xfc,0x20,0xfe,0x50,0x88,0xfe,0x88,0x88,0xa8,0x92,0x82,0x7e,
++0x10,0x12,0x13,0x12,0x7d,0x55,0x55,0x55,0x56,0x7d,0x50,0x14,0x1c,0xe5,0x42,0x4,0x40,0x20,0xfe,0x2,0x4,0x0,0xdc,0x54,0x54,0x54,0xdc,0x90,0x92,0x12,0xe,0x0,
++0x21,0x20,0x20,0x2b,0xfe,0xaa,0xab,0xaa,0xaa,0xfb,0xa2,0x2a,0x3a,0xcb,0x2,0x0,0x0,0x80,0x9e,0xd2,0x54,0x54,0xd8,0x54,0x54,0xd2,0x12,0x9a,0xd4,0x50,0x10,0x10,
++0x10,0x11,0x10,0x14,0x7e,0x55,0x54,0x54,0x54,0x7d,0x51,0x15,0x1d,0xe5,0x43,0x0,0x0,0xfc,0x8,0x30,0x24,0xfe,0x20,0xa0,0x44,0xfe,0x54,0x54,0x54,0x54,0xfe,0x0,
++0x20,0x20,0x27,0x20,0xfb,0xa8,0xaf,0xa9,0xab,0xfe,0xaa,0x23,0x3a,0xca,0x3,0x2,0x40,0x48,0xfc,0x40,0xf8,0x80,0xfe,0x10,0xf8,0xc,0xa,0xf8,0x8,0x8,0xf8,0x8,
++0x10,0x10,0x13,0x10,0x7c,0x57,0x56,0x54,0x55,0x7c,0x50,0x14,0x1c,0xe5,0x42,0x0,0x88,0x88,0xfe,0x88,0x88,0xfe,0x2,0x24,0xfc,0x20,0x70,0x68,0xa8,0x26,0x24,0x20,
++0x10,0x10,0x10,0x13,0x7c,0x54,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x20,0x20,0x24,0xfe,0x20,0x24,0xfe,0x4,0x54,0xfc,0x24,0xfc,0x24,0x24,0x24,0xc,
++0x10,0x13,0x10,0x14,0x7e,0x54,0x54,0x54,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x4,0xfe,0x8,0xfc,0x88,0x88,0xf8,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,
++0x10,0x10,0x10,0x13,0x7c,0x54,0x55,0x56,0x54,0x7d,0x50,0x14,0x1c,0xe4,0x43,0x0,0x20,0x20,0x24,0xfe,0x50,0x88,0x26,0xf8,0x20,0xfc,0x20,0xf8,0x20,0x24,0xfe,0x0,
++0x10,0x10,0x13,0x10,0x7c,0x57,0x54,0x55,0x55,0x7e,0x52,0x14,0x1c,0xe4,0x40,0x0,0x4,0x64,0x84,0xa4,0x94,0xc4,0xa4,0x94,0xc4,0xbe,0x84,0x84,0x84,0x84,0x84,0x84,
++0x10,0x10,0x10,0x15,0x7e,0x54,0x54,0x54,0x54,0x7c,0x50,0x14,0x1d,0xe6,0x40,0x3,0x80,0x84,0xfe,0x0,0xfc,0x84,0xfc,0x84,0xfc,0x80,0xfc,0x84,0x58,0x20,0xd8,0x6,
++0x10,0x10,0x11,0x15,0x7f,0x55,0x55,0x55,0x54,0x7d,0x50,0x14,0x1c,0xe4,0x40,0x3,0x20,0xac,0x24,0x24,0xac,0x24,0x24,0xfc,0x20,0xfc,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x20,0x20,0x20,0x28,0xfd,0xaa,0xac,0xab,0xaa,0xfb,0xa2,0x2b,0x3a,0xca,0x2,0x2,0x20,0x20,0x50,0x90,0x8,0xf4,0x2,0xc4,0x54,0xd4,0x54,0xd4,0x54,0x54,0x44,0xcc,
++0x22,0x21,0x21,0x27,0xfa,0xaa,0xab,0xaa,0xfa,0xa2,0x22,0x2a,0x3a,0xcc,0x5,0x8,0x20,0x20,0x24,0xbe,0x40,0x0,0xbc,0x88,0x90,0xfe,0x90,0x90,0x90,0x90,0xd0,0x20,
++0x20,0x22,0x21,0x28,0xff,0xa8,0xa9,0xaa,0xa8,0xff,0xa1,0x2a,0x39,0xe8,0x1,0x6,0x40,0x48,0x50,0x40,0xfc,0xe0,0x58,0x48,0x80,0xfe,0x10,0x10,0xa0,0x40,0xb0,0x8,
++0x10,0x10,0x10,0x13,0x7c,0x54,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x0,0x88,0x50,0xfe,0x50,0x54,0xfe,0x54,0x54,0x54,0x9c,0x4,0x74,0x4,0xfc,0x4,
++0x10,0x10,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x53,0x15,0x1d,0xe5,0x41,0x1,0x40,0x24,0xfe,0x4,0x4,0xfc,0x4,0x0,0xfe,0x4a,0x4a,0xfe,0x4a,0x4a,0x4a,0x6,
++0x0,0x7e,0x14,0x8,0xff,0x1a,0x28,0x49,0x19,0x3f,0x21,0x21,0x3f,0x1,0xff,0x0,0x40,0x44,0x7e,0xc8,0x28,0x10,0x28,0x46,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfc,0x2,
++0x20,0x20,0x27,0x28,0xff,0xa8,0xaf,0xa8,0xa9,0xfb,0xa4,0x2b,0x38,0xc9,0x2,0x0,0x40,0x48,0xfc,0x40,0xf8,0x40,0xfe,0xa0,0x10,0xe8,0x46,0xf8,0x40,0x50,0x48,0x40,
++0x8,0x7f,0x8,0x3e,0x8,0xff,0x10,0x1c,0x25,0x4d,0x3f,0x21,0x21,0x3f,0x1,0xff,0x20,0x20,0x24,0x7e,0xc8,0x28,0x10,0x28,0x46,0x8,0xfc,0x8,0x8,0xf8,0x4,0xfe,
++0x20,0x20,0x27,0x28,0xfc,0xab,0xa8,0xaa,0xab,0xfa,0xa2,0x2b,0x3a,0xca,0x2,0x2,0x90,0x94,0xfe,0x90,0x90,0xfc,0x90,0x94,0xfe,0x94,0x94,0x6c,0x44,0x4,0x14,0x8,
++0x21,0x21,0x27,0x21,0xf8,0xaf,0xa8,0xa9,0xaa,0xfd,0xa1,0x2f,0x39,0xc9,0x2,0x4,0x10,0x14,0xfe,0x18,0x44,0xfe,0xa0,0x10,0xe,0x14,0x10,0xfe,0x10,0x10,0x10,0x10,
++0x10,0x10,0x13,0x14,0x7e,0x55,0x55,0x55,0x55,0x7d,0x50,0x17,0x1c,0xe4,0x40,0x3,0x88,0x88,0xfe,0x88,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x20,0xfe,0x20,0x50,0x8e,0x4,
++0x10,0x11,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe6,0x42,0x4,0x4,0xfe,0x10,0x24,0x7e,0x44,0x44,0x7c,0x44,0x44,0x7c,0x10,0x58,0x56,0x92,0x30,
++0x10,0x10,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x14,0x1c,0xe6,0x42,0x4,0x40,0x88,0xfc,0x8,0xf8,0x8,0xf8,0x8,0x8,0xf8,0x48,0x20,0xa4,0x82,0x8a,0x78,
++0x10,0x10,0x13,0x10,0x7d,0x55,0x55,0x55,0x54,0x7d,0x51,0x15,0x1d,0xe5,0x41,0x1,0x40,0x24,0xfe,0x0,0x54,0x24,0x54,0xfc,0x24,0xfe,0x24,0x54,0x74,0x4,0x14,0x8,
++0x10,0x10,0x11,0x15,0x7f,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe6,0x42,0x4,0x20,0x14,0xfe,0x10,0x7c,0x14,0xfe,0x14,0x7c,0x10,0x7c,0x44,0x44,0x44,0x7c,0x44,
++0x10,0x10,0x13,0x10,0x7c,0x57,0x56,0x54,0x57,0x7c,0x50,0x14,0x1c,0xe5,0x42,0x4,0x40,0x20,0xfe,0x88,0x50,0xfe,0x42,0x20,0xfe,0x80,0xf8,0x88,0x88,0x8,0x28,0x10,
++0x8,0x7f,0x8,0xff,0x14,0x56,0x55,0x94,0x25,0x3f,0x21,0x21,0x3f,0x1,0xff,0x0,0x40,0x40,0x44,0x7e,0xc8,0x28,0x10,0x28,0x46,0xf8,0x8,0x8,0xf8,0x4,0xfc,0x2,
++0x10,0x10,0x13,0x10,0x7c,0x57,0x54,0x55,0x55,0x7d,0x51,0x15,0x1c,0xe4,0x41,0x2,0x88,0x88,0xfe,0x88,0x88,0xfe,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x0,0x88,0x6,0x2,
++0x20,0x20,0x27,0x20,0xfb,0xaa,0xab,0xaa,0xab,0xf8,0xa1,0x29,0x39,0xc9,0x1,0x1,0x90,0x94,0xfe,0x90,0xfc,0x94,0xfc,0x94,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,
++0x10,0x13,0x10,0x10,0x7d,0x55,0x55,0x55,0x54,0x7c,0x50,0x17,0x1c,0xe5,0x42,0x0,0x4,0xfe,0x50,0x54,0xfe,0x54,0x54,0xfc,0x0,0xf8,0x0,0xfe,0xa8,0x26,0x22,0x60,
++0x10,0x11,0x10,0x10,0x7d,0x55,0x56,0x54,0x54,0x7c,0x50,0x15,0x1c,0xe4,0x43,0x0,0x20,0x24,0xa8,0x20,0xfe,0x2,0xf8,0x88,0x88,0xf8,0x20,0xfc,0x20,0x24,0xfe,0x0,
++0x10,0x11,0x10,0x11,0x7c,0x57,0x54,0x54,0x55,0x7e,0x50,0x14,0x1d,0xe2,0x44,0x0,0xc,0xf0,0x24,0x24,0xa8,0xfe,0x68,0xa8,0x26,0x24,0x0,0xa0,0xa4,0x8a,0x8a,0x78,
++0x10,0x10,0x11,0x13,0x7d,0x55,0x55,0x54,0x54,0x7d,0x52,0x14,0x1f,0xe4,0x43,0x0,0x80,0xf8,0x10,0xfc,0x24,0x24,0xfc,0x40,0xc4,0x28,0x70,0xb0,0x68,0xae,0x24,0x60,
++0x8,0xf,0x18,0x26,0x1,0xe,0xf2,0x1,0xa,0x9,0x3e,0x2a,0x3e,0x9,0x7f,0x1,0x0,0xf0,0x20,0xc0,0x0,0xe0,0x1e,0x0,0x20,0x20,0xf8,0xa8,0xf8,0x24,0xfc,0x4,
++0x10,0x11,0x10,0x14,0x7f,0x54,0x55,0x55,0x55,0x7d,0x51,0x14,0x1f,0xe4,0x40,0x0,0x20,0xfc,0x88,0x50,0xfe,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x20,0xfe,0x20,0x20,0x20,
++0x10,0x10,0x13,0x10,0x7c,0x56,0x55,0x56,0x54,0x7c,0x53,0x14,0x1c,0xe4,0x40,0x0,0x40,0x24,0xfe,0x20,0x48,0xf2,0x24,0x52,0xf8,0x20,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x0,0x1f,0x2,0x1,0x7f,0x2,0xc,0x30,0xca,0x9,0x3e,0x2a,0x3e,0x9,0x7f,0x1,0x0,0xf0,0x20,0x40,0xfe,0x82,0x84,0x80,0xa0,0x28,0xfc,0xa8,0xf8,0x24,0xfc,0x4,
++0x20,0x20,0x27,0x20,0xfb,0xa8,0xab,0xaa,0xaa,0xfb,0xa0,0x2a,0x39,0xcf,0x0,0x0,0x82,0xa2,0xf4,0x84,0xe8,0x12,0xe2,0x24,0x28,0xf0,0x2,0x22,0x44,0xe8,0x10,0x60,
++0x10,0x10,0x13,0x10,0x7d,0x55,0x55,0x55,0x55,0x7c,0x53,0x14,0x1c,0xe6,0x42,0x0,0x20,0x24,0xfe,0x24,0xfe,0x24,0xfc,0x24,0xfc,0x22,0xfe,0x42,0xa0,0xa4,0x8a,0x78,
++0x10,0x11,0x10,0x11,0x7c,0x57,0x54,0x54,0x55,0x7f,0x51,0x15,0x1d,0xe5,0x41,0x1,0xc,0xf0,0x20,0x24,0xa8,0xfe,0x70,0xa8,0x26,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,
++0x10,0x10,0x13,0x10,0x7d,0x54,0x57,0x55,0x54,0x7f,0x50,0x15,0x1d,0xe5,0x41,0x1,0x88,0x50,0xfe,0x20,0xfc,0x20,0xfe,0x24,0xa8,0xfe,0x4,0xfe,0x4,0x4,0xfc,0x4,
++0x10,0x13,0x10,0x10,0x7d,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1c,0xe4,0x41,0x6,0x88,0xfe,0x88,0xa0,0xfc,0x20,0xfc,0x20,0x3c,0x0,0xfc,0x8,0x90,0x60,0x98,0x6,
++0x20,0x20,0x27,0x20,0xfb,0xaa,0xad,0xa8,0xaf,0xf8,0xa3,0x28,0x3b,0xe8,0x43,0x0,0x90,0x94,0xfe,0x90,0xfe,0x2,0xf4,0x0,0xfe,0x40,0xa4,0x78,0xb0,0x68,0xa6,0x60,
++0x10,0x10,0x11,0x13,0x7d,0x55,0x55,0x55,0x55,0x7d,0x51,0x15,0x1d,0xe6,0x42,0x4,0x80,0xf8,0x10,0xfe,0x44,0x92,0xfe,0x0,0x7c,0x0,0x7c,0x0,0x7c,0x44,0x7c,0x44,
++0x20,0x23,0x22,0x2a,0xff,0xaa,0xaa,0xaa,0xab,0xfa,0xa2,0x2a,0x3a,0xcd,0x6,0x8,0x20,0xfe,0x88,0x50,0xfe,0x50,0xfc,0x54,0xfe,0x54,0xfc,0x50,0xd8,0x54,0x52,0x50,
++0x10,0x10,0x13,0x10,0x7d,0x55,0x55,0x55,0x54,0x7d,0x51,0x15,0x1d,0xe5,0x42,0x4,0x88,0x88,0xfe,0x88,0xfc,0x54,0x54,0xfc,0x28,0xfe,0x20,0x24,0x98,0x52,0x2a,0x46,
++0xf,0x8,0x1f,0x0,0xff,0xc,0x73,0xd,0x72,0x1c,0x6b,0x3e,0x2a,0x3e,0x9,0x7f,0xe0,0x20,0xe0,0x44,0xfe,0x10,0x20,0xc0,0xa0,0x9e,0x24,0xf8,0xa8,0xf8,0x24,0xfc,
++0x1,0x7f,0x9,0x7f,0x40,0x9f,0x4,0xf,0x38,0xcf,0x8,0x3e,0x2a,0x3e,0x8,0x7f,0x0,0xfc,0x20,0xfe,0x2,0xf4,0x0,0xf0,0x10,0xf0,0x20,0xf8,0xa8,0xf8,0x24,0xfc,
++0x27,0x26,0x25,0x27,0xf9,0xab,0xae,0xab,0xaa,0xfa,0xa0,0x2b,0x39,0xc8,0x1,0x6,0xbc,0xb4,0xac,0xbc,0x40,0xfc,0x40,0xf8,0x40,0x7c,0x0,0xf8,0x10,0xe0,0x10,0xe,
++0x8,0x8,0x8,0x1f,0x21,0x41,0x1,0x1,0xff,0x1,0x21,0x21,0x21,0x21,0x3f,0x0,0x0,0x0,0x10,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x3e,0x22,0x2a,0x2a,0x2a,0x14,0x22,0x8,0xf,0x11,0x1,0xff,0x1,0x11,0x11,0x1f,0xf8,0x88,0xa8,0xa8,0xa8,0x50,0x88,0x20,0xf0,0x0,0x4,0xfe,0x0,0x10,0x10,0xf0,
++0x8,0x7f,0x8,0x3e,0x0,0x7f,0x49,0x7f,0x44,0x4f,0x91,0x1,0xff,0x1,0x11,0x1f,0x78,0x48,0x4e,0x80,0x78,0x48,0x30,0x48,0x86,0xf0,0x0,0x4,0xfe,0x0,0x10,0xf0,
++0x20,0x24,0x3e,0x51,0x91,0x15,0xff,0x11,0x11,0x55,0x55,0x55,0x55,0x7d,0x2,0x4,0x20,0x3c,0x20,0xfe,0x24,0xf8,0x24,0x38,0x0,0xfe,0x54,0x54,0xfe,0x10,0x10,0x30,
++0x0,0x6,0x79,0x11,0x15,0xff,0x11,0x11,0x15,0x7f,0x45,0x45,0x45,0x7d,0x45,0x1,0x8,0x1c,0xe0,0x20,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x10,0x10,0x4a,0x8a,0x4,
++0x10,0x12,0x1f,0x20,0x28,0x45,0x80,0x0,0x3f,0x0,0x0,0x0,0x0,0xff,0x0,0x0,0x40,0x44,0x7e,0x80,0x90,0x8,0x0,0x10,0xf8,0x0,0x0,0x0,0x4,0xfe,0x0,0x0,
++0x10,0x12,0x1f,0x28,0x45,0x80,0x3f,0x1,0x1,0xff,0x1,0x1,0x1,0x1,0x5,0x2,0x40,0x44,0x7e,0xa0,0x10,0x0,0xf8,0x0,0x4,0xfe,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x0,0x3f,0x8,0x8,0x9,0x14,0x12,0x11,0x21,0x46,0x98,0x40,0x44,0x7e,0xa0,0x10,0x20,0xf0,0x40,0x90,0xf8,0x20,0x40,0x80,0x60,0x1e,0x4,
++0x10,0x12,0x1f,0x28,0x45,0x0,0x3f,0x8,0x8,0x8,0xf,0x0,0x7f,0x0,0x0,0x0,0x40,0x44,0x7e,0xa0,0x10,0x20,0xf0,0x20,0x20,0x24,0xfe,0x4,0xf4,0x4,0x14,0x8,
++0x10,0x12,0x1f,0x28,0x45,0x0,0x3f,0x4,0x4,0xff,0x4,0x4,0x8,0x8,0x10,0x20,0x40,0x44,0x7e,0xa0,0x10,0x0,0xf8,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,
++0x10,0x12,0x1f,0x28,0xc5,0x0,0x1f,0x10,0x11,0x11,0x11,0x12,0x12,0x4,0x18,0xe0,0x40,0x44,0x7e,0xa0,0x10,0x10,0xf8,0x10,0x10,0x10,0x90,0x90,0x90,0x82,0x82,0x7e,
++0x10,0x12,0x1f,0x28,0x45,0x0,0x1f,0x11,0x11,0x11,0x11,0x11,0x11,0x21,0x41,0x1,0x40,0x44,0x7e,0xa0,0x10,0x38,0xe0,0x20,0x20,0x20,0x10,0x10,0x8,0xe,0x4,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x1,0x3f,0x21,0x21,0x3f,0x3,0x5,0x9,0x31,0xc1,0x1,0x40,0x44,0x7e,0xa0,0x10,0x8,0xf0,0x0,0x4,0xfe,0x4,0x4,0x44,0x28,0x10,0x0,
++0x10,0x12,0x1f,0x28,0x45,0x8,0xf,0x12,0x12,0x22,0x44,0x4,0x8,0x11,0x22,0x0,0x40,0x44,0x7e,0xa0,0x10,0x8,0xfc,0x48,0x48,0x48,0x48,0x88,0x88,0x8,0x50,0x20,
++0x10,0x12,0x1f,0x28,0x45,0x0,0x7e,0x8,0x8,0x8,0x8,0xe,0x78,0x20,0x0,0x0,0x40,0x44,0x7e,0xa0,0x10,0x0,0xfc,0x88,0x90,0x90,0x88,0xc4,0xa4,0x98,0x80,0x80,
++0x10,0x12,0x1f,0x28,0xc5,0x3f,0x20,0x20,0x27,0x24,0x24,0x27,0x24,0x20,0x3f,0x0,0x40,0x44,0x7e,0xa0,0x10,0xfc,0x0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x4,0xfe,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x1f,0x10,0x10,0x1f,0x10,0x10,0x1f,0x10,0x0,0xff,0x0,0x40,0x44,0x7e,0xa0,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x4,0xfe,0x0,
++0x10,0x12,0x1f,0x28,0x45,0x11,0x11,0x1f,0x21,0x41,0x1f,0x1,0x1,0x1,0xff,0x0,0x40,0x44,0x7e,0xa0,0x10,0x0,0x10,0xf8,0x0,0x20,0xf0,0x0,0x0,0x4,0xfe,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x4,0xf,0xa,0x12,0x23,0x42,0x2,0x3,0x2,0x2,0x2,0x40,0x44,0x7e,0xa0,0x10,0x8,0xfc,0x0,0x10,0xf8,0x0,0x8,0xfc,0x0,0x0,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x8,0xf,0x10,0x10,0x2f,0x48,0x8,0xf,0x8,0x0,0x0,0x40,0x44,0x7e,0xa0,0x10,0x8,0xfc,0x8,0x48,0xe8,0x48,0x48,0xc8,0x8,0x28,0x10,
++0x10,0x12,0x1f,0x28,0xc5,0x2,0x1,0x7f,0x0,0x8,0x4,0x4,0x2,0x2,0x7f,0x0,0x40,0x44,0x7e,0xa0,0x10,0x0,0x8,0xfc,0x0,0x20,0x20,0x40,0x40,0x84,0xfe,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x3f,0x0,0x7f,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x0,0x40,0x44,0x7e,0xa0,0x14,0xfe,0x4,0xe4,0x4,0x84,0x84,0x84,0x84,0x84,0x94,0x8,
++0x10,0x12,0x1f,0x28,0xc5,0x3f,0x2,0x2,0x4,0x8,0x3f,0xd0,0x10,0x10,0x1f,0x10,0x40,0x44,0x7e,0xa0,0x10,0xf8,0x8,0x10,0x50,0x20,0xf0,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x12,0x1f,0x28,0xc5,0x8,0x8,0x7f,0x9,0x9,0x9,0x9,0x11,0x11,0x25,0xc2,0x40,0x44,0x7e,0xa0,0x10,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0x44,0x7c,0x44,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x20,0x10,0x7,0x70,0x10,0x11,0x11,0x12,0x2c,0x44,0x3,0x40,0x44,0x7e,0xa0,0x10,0x80,0x88,0xfc,0x88,0x88,0x8,0x8,0x28,0x10,0x6,0xfc,
++0x10,0x12,0x1f,0x28,0x45,0x84,0x8,0x10,0x3f,0x0,0x1f,0x10,0x10,0x10,0x1f,0x10,0x40,0x44,0x7e,0xa0,0x10,0x0,0x20,0x10,0xf8,0x8,0xf0,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x12,0x1f,0x28,0xc5,0x8,0x8,0xfe,0x8,0x8,0xe,0x78,0x8,0x8,0x28,0x10,0x40,0x44,0x7e,0xa0,0x10,0x0,0x4,0xfe,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x10,0x1e,0x10,0x10,0x1e,0x1,0xff,0x1,0x1,0x1,0x1,0x40,0x44,0x7e,0xa0,0x10,0x80,0x98,0xe0,0x84,0xfc,0x0,0xfe,0x0,0x0,0x0,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x11,0x1f,0x21,0x1,0xff,0x4,0x4,0x4,0x8,0x10,0x60,0x40,0x44,0x7e,0xa0,0x10,0x0,0xf8,0x0,0x4,0xfe,0x80,0x80,0x80,0x84,0x84,0x7c,
++0x10,0x12,0x1f,0x28,0xc5,0x0,0x7d,0x10,0x21,0x7d,0x5,0x49,0x29,0x10,0x28,0xc7,0x40,0x44,0x7e,0xa0,0x10,0xc,0xf0,0x20,0x28,0x3c,0x20,0x28,0xfc,0x0,0x6,0xfc,
++0x10,0x12,0x1f,0x28,0xc5,0x2,0x4,0x8,0x3f,0xc1,0x1,0x1f,0x1,0x1,0x7f,0x0,0x40,0x44,0x7e,0xa0,0x10,0x80,0x40,0x20,0xfe,0x4,0x20,0xf0,0x0,0x8,0xfc,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x7,0x8,0x3f,0x1,0xff,0x1,0x3f,0x1,0x1,0x5,0x2,0x40,0x44,0x7e,0xa0,0x10,0xe0,0x48,0xfc,0x8,0xfe,0x8,0xf8,0x8,0x0,0x0,0x0,
++0x10,0x12,0x1f,0x28,0xc5,0x10,0x10,0x7c,0x11,0x12,0x10,0x1c,0xe1,0x40,0x0,0x0,0x40,0x44,0x7e,0xa0,0x10,0x84,0xfe,0x84,0x44,0x24,0x4,0x34,0xc4,0x84,0x14,0x8,
++0x10,0x12,0x1f,0x28,0xc5,0x0,0x7f,0x1,0x11,0x11,0x11,0x29,0x45,0x1,0xff,0x0,0x40,0x44,0x7e,0xa0,0x10,0x0,0xfc,0x0,0x10,0x10,0x10,0x28,0x44,0x0,0xfe,0x0,
++0x10,0x1f,0x28,0x45,0xff,0x1,0x3f,0x21,0x3f,0x21,0x3f,0x29,0x5,0x3,0xc,0x70,0x40,0x7e,0xa0,0x14,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,0x0,0x0,0xe0,0x1e,
++0x10,0x12,0x1f,0x28,0x45,0x8,0x9,0x7f,0x9,0xd,0x19,0x69,0x9,0x9,0x29,0x10,0x40,0x44,0x7e,0xa0,0x10,0x4,0xfe,0x24,0x24,0x24,0xfc,0x4,0x0,0x2,0x2,0xfe,
++0x10,0x12,0x1f,0x28,0xc5,0x9,0x5,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x10,0x10,0x10,0x40,0x44,0x7e,0xa0,0x10,0x20,0x50,0xf8,0x10,0xf0,0x10,0xf0,0x10,0x10,0x50,0x20,
++0x10,0x12,0x1f,0x28,0xc5,0x8,0x8,0x14,0x35,0x56,0x94,0x14,0x14,0x14,0x11,0x12,0x40,0x44,0x7e,0xa0,0x10,0x84,0xfe,0x88,0x88,0x90,0x50,0x20,0x50,0x88,0xe,0x4,
++0x10,0x12,0x1f,0x68,0x85,0x7f,0x1,0x3f,0x1,0xff,0x10,0x1f,0x10,0x1f,0x10,0x10,0x40,0x44,0x7e,0xa0,0x10,0xfc,0x0,0xf8,0x0,0xfe,0x10,0xf0,0x10,0xf0,0x10,0x30,
++0x12,0x1f,0x28,0x45,0x7f,0x1,0x1f,0x1,0xff,0x0,0x1f,0x10,0x11,0x12,0x4,0x38,0x48,0x7c,0xa0,0x10,0xfc,0x0,0xf8,0x0,0xfe,0x10,0xf8,0x10,0x10,0xd0,0x30,0x8,
++0x12,0x1f,0x28,0xc5,0x3f,0x20,0x20,0x2f,0x24,0x22,0x3f,0x21,0x22,0x24,0x3f,0x0,0x44,0x7e,0xa0,0x10,0xfc,0x80,0x90,0xf8,0x90,0xa0,0xfc,0x40,0x30,0x14,0xfe,0x0,
++0x10,0x12,0x1f,0x28,0xc2,0x3f,0x2,0x2,0xff,0x4,0xf,0x18,0x6f,0x8,0xf,0x8,0x40,0x44,0x7e,0xa0,0x10,0xe0,0x40,0x84,0xfe,0x0,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x12,0x1f,0x28,0xc5,0x8,0x7f,0xa,0x2,0xff,0x4,0xf,0x38,0xc8,0x8,0xf,0x8,0x48,0x7c,0xa0,0x10,0x20,0xfc,0x20,0x4,0xfe,0x10,0xf8,0x10,0x10,0x10,0xf0,0x10,
++0x10,0x12,0x1f,0x28,0x45,0x8,0x8,0xff,0x8,0x8,0xe,0xf8,0x48,0x8,0x28,0x10,0x40,0x48,0x7c,0xa0,0x10,0x88,0x88,0xfe,0x88,0x88,0xf8,0x88,0x88,0x88,0xf8,0x88,
++0x10,0x12,0x1f,0x28,0x45,0x13,0x11,0xfc,0x11,0x12,0x1d,0xf0,0x13,0x10,0x50,0x20,0x40,0x44,0x7e,0xa0,0x10,0xf8,0x10,0xe0,0x10,0x4e,0xf4,0x40,0xf8,0x40,0x40,0x40,
++0x10,0x12,0x1f,0x28,0x45,0x1f,0x11,0x1f,0x11,0x1f,0x0,0xff,0x8,0x8,0x10,0x20,0x40,0x44,0x7e,0xa0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x20,0x20,0x20,0x20,
++0x12,0x1f,0x28,0x45,0x8,0x4,0x1f,0x11,0x1f,0x11,0x1f,0x1,0xff,0x1,0x1,0x1,0x48,0x7c,0x90,0x8,0x20,0x40,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,0x0,0x0,
++0x12,0x1f,0x28,0x45,0x1,0x7f,0x40,0x88,0x10,0x20,0x1f,0x1,0x1,0x1,0xff,0x0,0x48,0x7c,0xa0,0x10,0x0,0xfe,0x2,0x24,0x18,0x8,0xf0,0x0,0x0,0x4,0xfe,0x0,
++0x12,0x1f,0x28,0x45,0x1,0x7f,0x48,0x8e,0x12,0x12,0x32,0x4c,0x8,0x10,0x20,0x40,0x48,0x7c,0xa0,0x10,0x0,0xfe,0x2,0xf4,0x90,0x90,0x90,0xd0,0xa0,0x82,0x82,0x7e,
++0x12,0x1f,0x28,0x45,0x3f,0x1,0xff,0x1,0x3f,0x1,0x25,0x25,0x29,0x29,0x31,0x41,0x48,0x7c,0xa0,0x10,0xf8,0x8,0xfe,0x8,0xf8,0x0,0x48,0x28,0x28,0x18,0x18,0x8,
++0x12,0x1f,0x28,0x45,0x0,0x3f,0x20,0x3f,0x20,0x2f,0x29,0x29,0x4f,0x49,0x80,0x0,0x48,0x7c,0xa0,0x10,0x50,0xfc,0x40,0xc0,0x28,0x28,0x28,0x30,0x20,0x52,0x8a,0x4,
++0x12,0x1f,0x28,0x41,0x3f,0x21,0x3f,0x1,0xff,0x0,0x1f,0x10,0x11,0x11,0x6,0x38,0x48,0x7c,0xa0,0x8,0xfc,0x8,0xf8,0x0,0xfe,0x10,0xf8,0x10,0x10,0x10,0x60,0x18,
++0x12,0x1f,0x28,0x41,0x1f,0x10,0x1f,0x10,0x1f,0x0,0x7f,0x1,0x3f,0x1,0xff,0x0,0x48,0x7c,0xa0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x0,0xfc,0x0,0xf8,0x0,0xfe,0x0,
++0x12,0x1f,0x28,0x45,0x5,0x8,0x17,0x31,0x51,0x96,0x10,0x17,0x10,0x10,0x11,0x16,0x48,0x7c,0xa0,0x0,0xf0,0x10,0xfc,0x0,0xfc,0x40,0x44,0xfe,0x40,0xa0,0x18,0x6,
++0x12,0x1f,0x28,0x41,0x7f,0x4,0x3f,0x4,0xff,0x11,0x1f,0x11,0xff,0x10,0x10,0x10,0x48,0x7c,0xa0,0x50,0xfc,0x40,0xf8,0x40,0xfe,0x10,0xf0,0x14,0xfe,0x10,0x10,0x30,
++0x10,0x1f,0x28,0x45,0x3f,0x22,0x22,0x3e,0x22,0x3e,0x22,0x3e,0x22,0x22,0x3f,0x0,0x40,0x7c,0xa0,0x10,0xfc,0x40,0x50,0x78,0x40,0x78,0x40,0x78,0x40,0x48,0xfc,0x0,
++0x10,0x1f,0x28,0x45,0x7f,0x4,0x3f,0x24,0x24,0x3f,0x1,0xff,0x3,0xd,0x71,0x1,0x40,0x7c,0xa0,0x10,0xfc,0x40,0xf8,0x48,0x48,0xf8,0x0,0xfe,0x80,0x60,0x1c,0x0,
++0x10,0x1f,0x28,0x45,0x1,0x3f,0x24,0x23,0x24,0x3f,0x20,0x3c,0x20,0x22,0x2c,0x30,0x40,0x7c,0xa0,0x10,0x8,0xfc,0x48,0x88,0x48,0xf8,0x80,0x8c,0xb0,0xc2,0x82,0x7e,
++0x10,0x1f,0x28,0x45,0x1e,0x10,0x10,0x17,0x14,0x15,0x24,0x24,0x29,0x49,0x91,0x26,0x44,0x7e,0xa0,0xfc,0x80,0xf0,0x80,0xfe,0x44,0xf0,0x48,0x38,0xe0,0x22,0x22,0x1e,
++0x10,0x1f,0x28,0x45,0x8,0xff,0x8,0x7f,0x49,0x7f,0x49,0x1c,0x2a,0x4a,0x88,0x9,0x40,0x7c,0xa0,0x50,0x40,0x7e,0x82,0x24,0x20,0x20,0x20,0x50,0x50,0x88,0x8e,0x4,
++0x10,0x1f,0x28,0x45,0x3f,0x24,0x24,0x3f,0x1,0x3f,0x21,0x28,0x24,0x40,0x43,0x8c,0x40,0x7c,0xa0,0x10,0xf8,0x48,0x48,0xf8,0x40,0xfc,0x10,0xa0,0x40,0xa2,0x1a,0x6,
++0x10,0x1f,0x28,0x45,0xa,0x37,0x24,0x27,0x24,0x2f,0x30,0x4,0x4,0x4,0x8,0x70,0x40,0x7c,0xa0,0x10,0x8,0xfc,0x48,0xc8,0x48,0xc8,0x38,0x40,0x40,0x42,0x42,0x3e,
++0x10,0x1f,0x28,0x45,0x1,0x3f,0x22,0x3f,0x22,0x22,0x3f,0x28,0x2f,0x48,0x49,0x8e,0x40,0x7c,0xa0,0x10,0x0,0xfc,0x40,0xf8,0x48,0x48,0xf8,0x44,0x48,0x72,0x42,0x3e,
++0x10,0x1f,0x28,0x45,0x8,0x6a,0x5c,0x48,0x7e,0x48,0x58,0x6a,0x48,0x7e,0x1,0x0,0x40,0x7c,0xa0,0x10,0xc,0xf0,0x80,0x84,0xfe,0x90,0x90,0x90,0x90,0x90,0x10,0x10,
++0x10,0x1f,0x28,0x5f,0x10,0x1f,0x10,0x1f,0x11,0x14,0x18,0x3f,0x24,0x24,0xff,0x0,0x40,0x7c,0xa0,0xf0,0x10,0xf0,0x10,0xf8,0x10,0xe0,0x1c,0xf8,0x48,0x48,0xfe,0x0,
++0x10,0x1f,0x28,0x7f,0x4,0x3f,0x24,0x3f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x1,0x1,0x40,0x7c,0xa0,0xfc,0x40,0xf8,0x48,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,0x0,
++0x10,0x1f,0x28,0x41,0x3e,0x28,0x7f,0x18,0x28,0xcd,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x40,0x7c,0xa0,0x10,0xf8,0xa0,0xfc,0x62,0xa2,0x1e,0xf0,0x10,0xf0,0x10,0xf0,0x10,
++0x10,0x1f,0x28,0x45,0x3e,0x2,0x14,0xf,0x10,0x2f,0xc8,0xf,0x4,0x2,0x7f,0x0,0x40,0x7c,0xa0,0x10,0xa0,0xc8,0x50,0xe0,0x10,0xee,0x24,0xe0,0x40,0x88,0xfc,0x0,
++0x10,0x1f,0x28,0x45,0x24,0x7e,0x24,0x3c,0x24,0x3c,0x24,0xfe,0x0,0x29,0x46,0x80,0x40,0x7c,0xa0,0x10,0x10,0xfe,0x92,0x90,0xfc,0xa4,0xa4,0xa8,0x90,0x28,0x46,0x84,
++0x10,0x1f,0x28,0x45,0x8,0x7f,0x8,0x3f,0x2a,0x2a,0x3e,0x18,0x2c,0x4a,0x88,0x8,0x40,0x7c,0xa0,0x50,0x40,0x78,0x90,0xfc,0x84,0x94,0x94,0xa4,0xb4,0x48,0x46,0x82,
++0x10,0x1f,0x28,0x45,0x10,0x17,0xfc,0x15,0x1e,0x34,0xd3,0x12,0x13,0x12,0x53,0x22,0x40,0x7c,0xa0,0x10,0x84,0x7e,0x24,0x24,0xd4,0x8,0xf8,0x8,0xf8,0x8,0xf8,0x8,
++0x1,0x5,0x39,0x21,0x21,0x3d,0x21,0x21,0x21,0x3f,0x21,0x2,0x2,0x4,0x18,0xe0,0x0,0x8,0x7c,0x8,0x8,0x78,0x8,0x8,0x8,0xf8,0x8,0x80,0x80,0x40,0x30,0xe,
++0x6,0x38,0x20,0x20,0x3e,0x20,0x20,0x3f,0x24,0x4,0xff,0x4,0x4,0x8,0x10,0x20,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x48,0x40,0xfe,0x40,0x40,0x40,0x40,0x40,
++0x1,0x7f,0x1,0x3f,0x2,0xff,0x4,0x8,0x16,0x38,0xd0,0x1e,0x10,0x10,0x1f,0x10,0x8,0xfc,0x0,0xf8,0x0,0xfe,0x40,0x20,0x10,0xfe,0x14,0xf0,0x10,0x10,0xf0,0x10,
++0x6,0x38,0x20,0x20,0x3e,0x20,0x20,0x3f,0x8,0x1f,0x20,0xe9,0x24,0x24,0x40,0x0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x4,0xfe,0x4,0x24,0x94,0x84,0x14,0x8,
++0x2,0x4,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x1f,0x1,0xff,0x3,0x5,0x19,0x61,0x1,0x0,0x10,0xf8,0x10,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x80,0x60,0x1c,0x8,0x0,
++0x8,0x8,0x10,0x7f,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x5f,0xf0,0x1,0x0,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xa4,0x24,0xfe,0x0,
++0x10,0x20,0x7d,0x44,0x64,0x54,0x44,0xfc,0x44,0x64,0x54,0x54,0x44,0x44,0x57,0x88,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x10,0x24,0x7e,0x44,0x65,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x45,0x45,0x55,0x88,0x20,0x20,0x20,0x20,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x24,0x7e,0x45,0x65,0x54,0x44,0xfc,0x44,0x64,0x54,0x54,0x44,0x45,0x56,0x88,0x0,0x44,0x24,0x24,0x28,0x88,0x88,0x90,0x50,0x20,0x50,0x50,0x88,0xe,0x4,0x0,
++0x10,0x25,0x7f,0x45,0x65,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x45,0x45,0x55,0x88,0x20,0x20,0x20,0x20,0x20,0x24,0xec,0x30,0x20,0x20,0x20,0x20,0x62,0xa2,0x1e,0x0,
++0x10,0x24,0x7e,0x45,0x65,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x44,0x44,0x54,0x88,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0x24,0xfc,0x24,0x20,0x20,0x20,0x20,
++0x10,0x24,0x7f,0x45,0x65,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x45,0x46,0x54,0x89,0x8,0x1c,0xe0,0x0,0x0,0xfc,0x44,0x44,0x44,0x28,0x28,0x10,0x28,0x48,0x84,0x2,
++0x10,0x24,0x7e,0x45,0x64,0x54,0x44,0xfc,0x44,0x64,0x54,0x54,0x44,0x45,0x55,0x8a,0x40,0x20,0x24,0xfe,0x40,0x40,0x44,0x7e,0x44,0x44,0x84,0x84,0x84,0x4,0x28,0x10,
++0x10,0x24,0x7f,0x44,0x64,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x44,0x44,0x54,0x88,0x0,0x4,0xfe,0x8,0x8,0xe8,0x28,0x28,0x28,0x28,0xe8,0x28,0x8,0x8,0x28,0x10,
++0x10,0x24,0x7e,0x44,0x64,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x45,0x45,0x55,0x8a,0x20,0x24,0x3e,0x20,0x24,0xfe,0x4,0x4,0x4,0xfc,0x0,0x0,0x0,0x0,0x0,0x0,
++0x10,0x24,0x7e,0x44,0x65,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x45,0x45,0x55,0x89,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfc,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x10,0x24,0x7e,0x44,0x65,0x55,0x46,0xfc,0x44,0x64,0x54,0x54,0x44,0x44,0x54,0x88,0x80,0x80,0x84,0xfe,0x40,0x40,0x50,0x78,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0x40,
++0x10,0x21,0x7c,0x44,0x64,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x45,0x45,0x55,0x89,0x4,0xfe,0x50,0x50,0x54,0xfe,0x54,0x54,0x54,0x54,0x5c,0x84,0x4,0x4,0xfc,0x4,
++0x10,0x25,0x7e,0x44,0x64,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x45,0x45,0x55,0x89,0x20,0x24,0xa8,0xb0,0x24,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,0x4,0x14,0x8,
++0x10,0x25,0x7f,0x45,0x65,0x55,0x45,0xfd,0x45,0x65,0x55,0x55,0x45,0x45,0x56,0x88,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfc,0x20,0xfc,0x20,0xfe,0x20,0x20,0x22,0x22,0x1e,
++0x10,0x24,0x7e,0x44,0x64,0x57,0x44,0xfc,0x44,0x65,0x55,0x55,0x45,0x45,0x57,0x88,0x8,0xfc,0x10,0x20,0x24,0xfe,0x20,0xa0,0x44,0xfe,0x54,0x54,0x54,0x54,0xfe,0x0,
++0x11,0x20,0x7c,0x47,0x64,0x54,0x45,0xfd,0x45,0x65,0x55,0x55,0x45,0x45,0x55,0x89,0x4,0x88,0x50,0xfe,0x20,0x44,0xfe,0x4,0x4,0xfc,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x10,0x24,0x7f,0x44,0x65,0x55,0x45,0xfd,0x45,0x64,0x55,0x55,0x45,0x45,0x55,0x89,0x50,0x54,0xfe,0x50,0xfc,0x54,0xfc,0x54,0xfc,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x4,
++0x10,0x25,0x7e,0x44,0x67,0x54,0x45,0xfd,0x45,0x65,0x55,0x54,0x45,0x44,0x57,0x88,0x20,0xfc,0x88,0x50,0xfe,0x0,0xfc,0x24,0xfc,0x24,0xfc,0x20,0xfc,0x20,0xfe,0x0,
++0x10,0x24,0x7f,0x44,0x65,0x55,0x46,0xfc,0x47,0x64,0x57,0x54,0x47,0x44,0x57,0x88,0x50,0x54,0xfe,0x50,0xfe,0x2,0xf4,0x0,0xfe,0x84,0x48,0xb0,0x70,0xae,0x24,0x60,
++0x1,0x2,0x6,0x9,0x37,0xc0,0x2,0x1,0xff,0x5,0xd,0x14,0x24,0xc5,0x6,0x4,0x0,0x80,0x40,0x30,0xee,0x24,0x40,0x4,0xfe,0x0,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x4,0x1f,0x10,0x14,0x12,0x10,0x1f,0x2,0x1,0xff,0x5,0xc,0x14,0x65,0x6,0x4,0x20,0xf0,0x20,0x20,0xa0,0x44,0xfe,0x4,0x24,0xf4,0x14,0xa8,0x40,0x3c,0x8,0x0,
++0x10,0x10,0x7e,0x12,0x12,0x22,0x2a,0x45,0x1,0xff,0x5,0xc,0x34,0xc5,0x6,0x4,0x0,0x8,0xfc,0x88,0x88,0x88,0xf8,0x0,0x4,0xfe,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x1,0x1,0x7f,0x11,0xd,0x5,0x9,0x33,0xff,0x5,0xd,0x14,0x24,0xc5,0x6,0x4,0x40,0x28,0xfc,0x10,0x60,0x80,0x60,0x14,0xfe,0x8,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x10,0x8,0x41,0x25,0xa,0x10,0x21,0x2e,0x1,0xff,0x5,0xc,0x34,0xc5,0x6,0x4,0x40,0x50,0x4c,0x44,0x50,0x60,0x80,0x0,0x4,0xfe,0x10,0xa0,0x40,0x30,0xe,0x4,
++0x2,0x3f,0x22,0x3e,0x21,0x7e,0xa2,0x22,0x3f,0x1,0xff,0x4,0xc,0x15,0x66,0x4,0x20,0xfc,0x88,0x50,0xfe,0x20,0xf8,0x20,0x20,0x24,0xfe,0x90,0x60,0x1e,0x4,0x0,
++0x44,0x24,0x29,0xff,0x11,0x11,0x7d,0x11,0x11,0xff,0x11,0x11,0x21,0x21,0x41,0x81,0x8,0x1c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x10,0x10,0x10,0x2a,0x4a,0xa6,0x12,
++0x44,0x25,0x28,0xfe,0x10,0x10,0x7c,0x11,0x12,0xfe,0x10,0x10,0x20,0x20,0x43,0x80,0x8,0xfc,0x8,0x10,0x20,0x50,0x88,0x6,0x0,0xf8,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x44,0x24,0x28,0xfe,0x11,0x10,0x7d,0x12,0x10,0xfe,0x10,0x11,0x22,0x20,0x40,0x83,0x20,0x20,0x50,0x88,0xfc,0x88,0x6,0x82,0xf8,0x88,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x44,0x25,0x29,0xfd,0x11,0x11,0x7c,0x10,0x11,0xfe,0x15,0x11,0x21,0x21,0x40,0x80,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x84,0xfe,0x4,0x24,0x24,0x54,0x4,0xe4,0x14,0x8,
++0x44,0x25,0x29,0xfd,0x11,0x10,0x7c,0x13,0x10,0xfe,0x11,0x11,0x22,0x22,0x44,0x88,0x20,0x24,0x24,0x24,0xfc,0x80,0x84,0xfe,0x90,0x90,0x54,0x58,0xa8,0x28,0x44,0x82,
++0x4,0x7f,0x1,0x3f,0x1,0xff,0x0,0x3e,0x8,0xff,0x2a,0x3d,0x51,0x9e,0x2,0xc,0x40,0xfc,0x0,0xf8,0x0,0xfe,0x80,0xa0,0x94,0xfe,0x80,0x48,0x50,0x22,0x52,0x8e,
++0x100,0x7f,0x55,0x55,0x7f,0xd5,0x55,0x41,0x43,0x0,0x24,0xfe,0x24,0x24,0xb4,0x6c,0x24,0x24,0x6c,0xb4,0x24,0x24,0x24,0xb4,0x48,
++0x2,0x7f,0x0,0x3e,0x22,0x3e,0x0,0x7f,0x41,0x55,0x55,0x7f,0x49,0x49,0x43,0x0,0x24,0xfe,0x24,0x24,0x24,0xb4,0x6c,0x24,0x24,0x6c,0xb4,0x24,0x24,0x24,0xb4,0x48,
++0x7f,0x50,0x5e,0x68,0x7f,0x48,0x54,0x7f,0x0,0x7e,0x22,0x12,0x1a,0x62,0xa,0x4,0x7c,0x44,0x46,0x80,0x7c,0x28,0x10,0x6e,0x4,0xfe,0x44,0x24,0x34,0xc4,0x14,0x8,
++0x1,0x3,0x4,0x8,0x10,0x3f,0x1,0x2,0x4,0x3f,0x1,0x9,0x19,0x21,0x45,0x2,0x0,0x0,0x0,0x10,0x30,0xc0,0x0,0x20,0x10,0xf8,0x0,0x20,0x18,0xc,0x4,0x0,
++0x8,0x8,0xfe,0x8,0x3e,0xc8,0x29,0x12,0x1f,0x1,0x2,0x3f,0x9,0x11,0x21,0x3,0x40,0x48,0xfc,0x48,0xc8,0x6a,0x8a,0x26,0xc0,0x0,0x10,0xf8,0x20,0x18,0x8,0x0,
++0x8,0x8,0x7f,0xa,0x9,0x8,0xff,0x9,0x12,0x2f,0xc1,0x2,0x3f,0x9,0x11,0x23,0x20,0x28,0xfc,0x20,0x20,0xa4,0xfe,0x20,0x30,0xee,0x4,0x10,0xf8,0x20,0x18,0x8,
++0x10,0x8,0x3e,0x23,0x22,0x3e,0x41,0x42,0x9f,0x1,0x2,0x3f,0x9,0x11,0x21,0x3,0x40,0x48,0xfc,0x48,0x30,0x48,0x86,0x20,0xc0,0x0,0x10,0xf8,0x20,0x18,0x8,0x0,
++0x2,0xd,0xf0,0x94,0x54,0x49,0x7e,0x90,0x10,0xfd,0x10,0x54,0x55,0x56,0x7c,0x0,0x1c,0xe0,0x20,0x40,0x84,0xf8,0x10,0x20,0x44,0xfe,0x20,0xa8,0x26,0x22,0xa0,0x40,
++0x1,0xff,0x1,0x1f,0x12,0xff,0x10,0x1f,0x0,0x3e,0x32,0x2a,0xff,0x28,0x4a,0x18,0x4,0xfe,0x0,0xf0,0x14,0xfe,0x90,0xf0,0x1c,0xe0,0x24,0xf8,0x24,0xfe,0x54,0xb2,
++0x10,0x14,0xfe,0x11,0x7c,0x10,0xfe,0x21,0x3c,0x44,0xa4,0x28,0x10,0x28,0x41,0x82,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x50,0x50,0x88,0x88,0x6,0x4,
++0x10,0x14,0xfe,0x10,0x55,0xba,0x11,0x28,0x67,0xbc,0x24,0x29,0x5a,0x10,0x20,0xc0,0x80,0x80,0x84,0xfe,0x4,0x4c,0x54,0xe4,0xfc,0x44,0xe4,0x54,0x4c,0x44,0x54,0x48,
++0x8,0xa,0x7f,0x8,0x9,0xff,0x8,0x28,0x2a,0x2f,0x28,0x28,0x58,0x48,0x87,0x0,0x8,0x8,0x48,0x48,0x48,0xc8,0x48,0x48,0x48,0x78,0x8,0x8,0x8,0x6,0xfc,0x0,
++0x8,0x8,0x7f,0x8,0xa,0xff,0x8,0x28,0x28,0x2e,0x28,0x2b,0x58,0x48,0x87,0x0,0x8,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,0x88,0x88,0xfe,0x0,0x6,0xfc,0x0,
++0x10,0x17,0x7d,0x11,0x11,0xfd,0x12,0x55,0x50,0x5c,0x51,0x72,0x50,0x48,0x87,0x0,0x44,0xe4,0x4,0x14,0xd4,0x54,0x54,0x54,0xd4,0x94,0x4,0x14,0x8,0x6,0xfc,0x0,
++0x10,0x12,0x7d,0x11,0x14,0xfe,0x10,0x50,0x51,0x5d,0x52,0x72,0x50,0x48,0x87,0x0,0x20,0x20,0x20,0x7e,0x82,0x14,0x90,0x90,0x10,0x28,0x26,0x42,0x80,0x6,0xfc,0x0,
++0x11,0x15,0x7f,0x19,0x17,0xfb,0x15,0x59,0x57,0x5a,0x52,0x72,0x52,0x49,0x86,0x3,0x8,0x28,0xbc,0x48,0xfe,0x18,0xaa,0x4e,0xf8,0x8,0x48,0x48,0xb8,0x8,0x6,0xfc,
++0x8,0x8,0xa,0x7f,0x8,0x8,0xff,0x14,0x54,0x56,0x55,0x94,0x14,0x14,0x24,0x4c,0x8,0xfc,0x88,0x88,0x88,0xa8,0x90,0xfc,0x84,0xc4,0xa8,0xa8,0x90,0xa8,0xc6,0x84,
++0x8,0x8,0x8,0x7e,0x8,0x8,0xff,0x14,0x56,0x55,0x56,0x94,0x14,0x14,0x24,0x4c,0x20,0x20,0x24,0xfc,0x28,0x30,0xfe,0x40,0xfc,0x84,0x84,0xfc,0x84,0x84,0xfc,0x84,
++0x0,0xff,0x1,0x0,0x7e,0x42,0x42,0x42,0x7e,0x0,0x44,0x24,0x28,0xe,0xf1,0x40,0x0,0x8,0xfc,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x2,0xff,0x0,0x1,0x7e,0x42,0x42,0x42,0x7e,0x0,0x44,0x24,0x28,0xe,0xf0,0x43,0x20,0x20,0x24,0xfe,0x20,0x20,0xf8,0x8,0x88,0x50,0x50,0x20,0x50,0x48,0x8e,0x4,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x57,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x0,0x84,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x50,0x20,
++0x1,0xff,0x14,0x15,0x7f,0x55,0x55,0x55,0x57,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x0,0x88,0x7c,0x10,0x90,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x57,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x8,0x88,0x8,0x8,0xfe,0x8,0x8,0x48,0x28,0x28,0x8,0x8,0x8,0x8,0x28,0x10,
++0x4,0xfe,0x28,0x28,0xfe,0xaa,0xaa,0xab,0xae,0xc2,0x82,0xfe,0x82,0x82,0xfe,0x82,0x20,0x20,0x20,0x24,0xa6,0xbc,0xe4,0xa4,0xa4,0xb4,0xa8,0xa0,0x82,0x82,0x7e,0x0,
++0x4,0xfe,0x28,0x28,0xff,0xaa,0xaa,0xaa,0xae,0xc2,0x82,0xfe,0x82,0x82,0xfe,0x82,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x88,0x88,0x88,0x88,0x88,0xf8,0x88,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x57,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x20,0xa0,0x20,0x24,0x7e,0x60,0xa4,0x3e,0x20,0x20,0x24,0x3e,0x20,0x20,0x20,0x20,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x57,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x20,0x90,0x10,0x7e,0x42,0x84,0x20,0x20,0x24,0x28,0x30,0x20,0x22,0x22,0x1e,0x0,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x57,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x10,0x90,0x50,0x7c,0x50,0x90,0x14,0xfe,0x28,0x28,0x28,0x28,0x2a,0x4a,0x86,0x0,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x57,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x10,0x90,0x10,0x3e,0x44,0xa8,0x18,0x10,0x24,0x7e,0xc4,0x44,0x44,0x44,0x7c,0x44,
++0x1,0xff,0x14,0x14,0x7f,0x55,0x55,0x55,0x57,0x61,0x41,0x7f,0x41,0x41,0x7f,0x41,0x40,0xc4,0x4c,0x50,0x62,0x42,0x7e,0x4,0x7e,0x44,0x44,0x7c,0x44,0x44,0x7c,0x44,
++0x4,0xff,0x28,0x28,0xfe,0xaa,0xaa,0xaa,0xae,0xc2,0x82,0xfe,0x82,0x82,0xff,0x82,0x4,0xfe,0x28,0xaa,0x6c,0x28,0xfe,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x0,0x0,
++0x4,0xff,0x28,0x28,0x7d,0x55,0x55,0x55,0x6d,0x45,0x45,0x7d,0x45,0x45,0x7d,0x45,0x4,0xfe,0x0,0x4,0xde,0x54,0x54,0x54,0x54,0xdc,0x54,0x54,0x54,0x54,0x54,0x54,
++0x4,0xfe,0x28,0x28,0xfe,0xaa,0xaa,0xab,0xae,0xc2,0x82,0xfe,0x82,0x82,0xff,0x82,0x4,0xfe,0x84,0x84,0x84,0xfc,0x0,0xfe,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x4,0xfe,0x28,0x28,0xfe,0xab,0xaa,0xaa,0xae,0xc3,0x82,0xfe,0x82,0x83,0xfe,0x82,0x20,0x20,0x50,0x50,0x8e,0x4,0xf8,0x20,0x24,0xfe,0x20,0x70,0xac,0x24,0xa0,0x40,
++0x4,0xfe,0x29,0x28,0xff,0xaa,0xaa,0xab,0xae,0xc2,0x82,0xfe,0x82,0x82,0xfe,0x82,0x8,0x1c,0xe0,0x4,0x24,0xa8,0x8,0xfe,0x8,0x88,0x48,0x48,0x8,0x8,0x28,0x10,
++0x4,0xfe,0x28,0x28,0xfe,0xaa,0xaa,0xaa,0xae,0xc2,0x82,0xfe,0x82,0x82,0xfe,0x82,0x4,0xfe,0x84,0x84,0xfc,0x84,0x84,0xfc,0x10,0x90,0x92,0xf4,0x98,0xb2,0xd2,0x8e,
++0x4,0xfe,0x28,0x29,0xfe,0xaa,0xaa,0xab,0xae,0xc2,0x82,0xfe,0x82,0x82,0xfe,0x82,0x20,0x10,0x14,0xfe,0x0,0x84,0x48,0xfe,0x0,0x4,0xfe,0x84,0x84,0x84,0xfc,0x84,
++0x4,0xfe,0x28,0x28,0x7f,0x54,0x54,0x55,0x6d,0x45,0x45,0x7d,0x45,0x45,0x7c,0x44,0x84,0x9e,0x94,0x94,0xf4,0x9c,0x94,0xd4,0x54,0x5c,0x54,0x54,0xd4,0x24,0x24,0x4c,
++0x4,0xfe,0x28,0x28,0x7c,0x54,0x54,0x57,0x6c,0x44,0x44,0x7c,0x44,0x44,0x7d,0x46,0x8,0xfc,0x88,0xf8,0x88,0xf8,0x0,0xfe,0x20,0xa8,0xbc,0xa0,0xa0,0xe6,0x3c,0x0,
++0x4,0xfe,0x28,0x28,0xfe,0xaa,0xaa,0xab,0xae,0xc2,0x82,0xfe,0x82,0x82,0xfe,0x82,0x0,0xfe,0x12,0x50,0x5c,0x50,0xb0,0xe,0x7c,0x44,0x7c,0x44,0x7c,0x44,0x54,0x48,
++0x4,0xfe,0x2b,0x28,0x7c,0x55,0x56,0x54,0x6c,0x44,0x45,0x7d,0x45,0x45,0x7f,0x44,0x40,0x44,0xfe,0x40,0x88,0xfc,0x88,0x88,0xf8,0x4,0xfe,0x54,0x54,0x54,0xfe,0x0,
++0x4,0xfe,0x29,0x29,0x7d,0x55,0x55,0x55,0x6d,0x45,0x45,0x7d,0x45,0x45,0x7e,0x44,0x20,0x14,0xfe,0x10,0x7c,0x14,0xfe,0x14,0x7c,0x10,0x7c,0x44,0x44,0x44,0x7c,0x44,
++0x4,0xff,0x29,0x28,0x7d,0x54,0x54,0x54,0x6f,0x44,0x45,0x7c,0x45,0x44,0x7c,0x45,0x4,0xde,0x54,0xcc,0x54,0x64,0x50,0xa8,0x46,0x90,0x20,0x48,0x90,0x20,0x40,0x80,
++0x2,0xff,0x28,0x28,0xff,0xaa,0xaa,0xaa,0xae,0xc2,0x82,0xff,0x82,0x82,0xfe,0x83,0x50,0x54,0xd8,0x50,0xfe,0x88,0x50,0xfc,0x20,0xfc,0x20,0xfe,0x20,0x50,0x8e,0x4,
++0x4,0xfe,0x28,0x28,0xff,0xaa,0xaa,0xaa,0xae,0xc2,0x82,0xfe,0x82,0x83,0xff,0x82,0x40,0x60,0x94,0xfe,0x90,0xfc,0x90,0x90,0xfc,0x90,0x94,0xfe,0x80,0x54,0x52,0x2,
++0x4,0xfe,0x29,0x28,0x7c,0x55,0x54,0x54,0x6d,0x46,0x45,0x7d,0x45,0x45,0x7f,0x44,0x40,0x24,0xfe,0x40,0x88,0xfc,0xa8,0xaa,0x2e,0x0,0xfc,0x54,0x54,0x54,0xfe,0x0,
++0x4,0xfe,0x28,0x29,0x7d,0x55,0x55,0x55,0x6d,0x45,0x45,0x7d,0x45,0x45,0x7e,0x44,0x20,0x3c,0x20,0xfe,0x22,0xfc,0x20,0xfe,0x20,0x54,0xb8,0x58,0xb6,0x54,0x90,0x30,
++0x4,0xff,0x29,0x29,0x7d,0x55,0x54,0x55,0x6c,0x45,0x45,0x7d,0x44,0x44,0x7f,0x44,0x50,0xfc,0x54,0xfc,0x54,0xfc,0x0,0xfc,0x0,0xfc,0x4,0xfc,0x88,0x50,0xfe,0x0,
++0x4,0xff,0x28,0x2b,0x7c,0x55,0x55,0x55,0x6d,0x44,0x45,0x7c,0x47,0x45,0x7d,0x46,0x1c,0xe0,0x24,0xfe,0x20,0xfc,0xac,0x74,0xfc,0x20,0xfc,0x20,0xfe,0x54,0x52,0x2,
++0x0,0xff,0x2,0x6,0x9,0x11,0x62,0x4,0x8,0x31,0x2,0x4,0x18,0x60,0x2,0x1,0x4,0xfe,0x0,0x8,0x18,0xa0,0xc0,0xc0,0xa0,0xa0,0x90,0x8e,0x84,0x80,0x80,0x0,
++0x11,0x10,0x1f,0x10,0x7d,0x44,0x47,0x6c,0x54,0x54,0x55,0x6d,0x46,0x44,0x7f,0x44,0x8,0x90,0xfe,0x40,0xfc,0x40,0xfe,0x80,0x88,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x0,0xff,0x4,0x7,0x4,0x8,0x30,0xdf,0x10,0x10,0x1f,0x9,0x9,0x19,0x27,0xc0,0x4,0xfe,0x0,0xf0,0x10,0x90,0x60,0xf0,0x10,0x10,0xf0,0x0,0xf8,0x0,0x6,0xfc,
++0x0,0x7e,0x8,0x8,0xe,0x71,0x2,0x1f,0x10,0x10,,0x10,0x94,0x54,0x59,0x11,0xff,0x31,0x39,0x55,0x55,0x91,0x11,0x11,0x10,0x10,0x20,0x20,0x20,0x20,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,
++0x10,0x10,0x94,0x54,0x58,0x11,0xfe,0x30,0x38,0x54,0x54,0x90,0x10,0x10,0x11,0x12,0x40,0x40,0x40,0x44,0xfe,0x8,0x88,0x88,0x88,0x90,0x50,0x20,0x50,0x8e,0x4,0x0,
++0x10,0x10,0x95,0x55,0x59,0x11,0xff,0x31,0x39,0x55,0x55,0x91,0x11,0x11,0x10,0x10,0x0,0x4,0xfe,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,0x0,0x0,0x2,0x2,0xfe,0x0,
++0x10,0x10,0x95,0x55,0x59,0x11,0xff,0x31,0x39,0x55,0x55,0x91,0x12,0x12,0x14,0x11,0x0,0x4,0xfe,0x0,0x4,0xfe,0x40,0x44,0x7e,0x44,0x44,0x44,0x44,0x44,0x94,0x8,
++0x1,0x11,0x11,0x1f,0x21,0x21,0x3f,0x11,0x9,0x5,0xff,0x3,0x5,0x19,0x61,0x1,0x0,0x10,0x10,0xf0,0x8,0x8,0xf8,0x10,0x30,0x44,0xfe,0x80,0x60,0x1c,0x8,0x0,
++0x10,0x10,0x97,0x54,0x58,0x10,0xff,0x32,0x3a,0x56,0x56,0x93,0x12,0x12,0x13,0x12,0x0,0x4,0xfe,0x90,0x90,0x94,0xfe,0x94,0x94,0x94,0x9c,0x4,0x4,0x4,0xfc,0x4,
++0x1,0x41,0x31,0x12,0x4,0x11,0x26,0x50,0x9,0x5,0xff,0x3,0x5,0x19,0x61,0x1,0x0,0x0,0xfc,0x48,0xa0,0x10,0xe,0x10,0x30,0x44,0xfe,0x80,0x60,0x1c,0x8,0x0,
++0x8,0xf,0x28,0x3f,0x21,0x52,0x8c,0x19,0x69,0x5,0xff,0x3,0x5,0x19,0x61,0x1,0x0,0x7c,0x44,0x28,0x10,0x28,0xc6,0x10,0x30,0x44,0xfe,0x80,0x60,0x1c,0x8,0x0,
++0x8,0x49,0x2a,0xff,0x1c,0x2a,0x49,0x49,0x7f,0x95,0x55,0x37,0x21,0x41,0x81,0x1,0x0,0x12,0x12,0x92,0x24,0x24,0x24,0x48,0xa4,0x24,0x24,0x92,0x12,0x12,0x12,0x0,
++0x10,0x10,0x95,0x55,0x59,0x12,0xfe,0x30,0x38,0x57,0x54,0x90,0x11,0x12,0x10,0x10,0x40,0x20,0x20,0xfe,0x2,0x4,0xf8,0x0,0x4,0xfe,0x20,0xa8,0x26,0x22,0xa0,0x40,
++0x10,0x10,0x94,0x55,0x58,0x13,0xfe,0x30,0x39,0x56,0x54,0x90,0x11,0x10,0x10,0x17,0x20,0x40,0x88,0xfc,0x40,0xfe,0x50,0x98,0x24,0xca,0x10,0x64,0x88,0x30,0xc0,0x0,
++0x10,0x10,0x94,0x55,0x59,0x13,0xfd,0x31,0x39,0x55,0x55,0x91,0x11,0x11,0x11,0x11,0x80,0xf8,0x88,0x8,0xfe,0x40,0x40,0x7c,0x90,0x14,0xfe,0x10,0x10,0x28,0x24,0xc2,
++0x11,0x11,0x95,0x55,0x5a,0x11,0xfe,0x31,0x3a,0x54,0x55,0x91,0x11,0x11,0x11,0x11,0x10,0x10,0xd0,0x58,0x54,0x50,0x90,0x56,0x3c,0x8,0xfc,0x8,0xf8,0x8,0xf8,0x8,
++0x10,0x10,0x94,0x54,0x5b,0x10,0xfe,0x30,0x39,0x57,0x54,0x90,0x11,0x11,0x13,0x10,0x0,0x88,0x50,0x4,0xfe,0x0,0x88,0x88,0x54,0xfc,0x88,0x88,0x10,0x54,0xfe,0x22,
++0x10,0x11,0x94,0x54,0x58,0x12,0xfd,0x32,0x39,0x55,0x55,0x91,0x11,0x11,0x11,0x11,0x0,0xfc,0x24,0xa0,0xbc,0xe0,0x3e,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x4,0x14,0x8,
++0x10,0x11,0x94,0x54,0x59,0x10,0xfe,0x31,0x3a,0x54,0x55,0x90,0x10,0x11,0x12,0x10,0x0,0xf8,0x50,0x20,0xfe,0x62,0xa4,0x20,0x60,0x24,0xfe,0x70,0xa8,0x26,0x20,0x20,
++0x10,0x10,0x95,0x55,0x59,0x11,0xff,0x31,0x39,0x54,0x50,0x97,0x10,0x10,0x10,0x13,0x40,0x84,0xfe,0x4,0xfc,0x4,0xfc,0x4,0xfc,0x28,0x24,0xfe,0x50,0x50,0x8e,0x4,
++0x20,0x2f,0x21,0xa9,0x71,0x27,0xfc,0x24,0x77,0x69,0xa9,0x21,0x21,0x21,0x2a,0x24,0x4,0x7e,0x44,0x44,0x7c,0x10,0x14,0x7e,0x54,0x54,0x7c,0x10,0x10,0x14,0xfe,0x2,
++0x0,0x3f,0x20,0x20,0x3f,0x20,0x20,0x3f,0x24,0x24,0x22,0x21,0x20,0x28,0x30,0x20,0x10,0xf8,0x10,0x10,0xf0,0x10,0x10,0xf0,0x10,0x20,0x40,0x80,0x60,0x1e,0x4,0x0,
++0x7d,0x44,0x7d,0x45,0x7c,0x48,0x5c,0x63,0x1f,0x10,0x1f,0x10,0x1f,0x0,0xff,0x0,0xf8,0x20,0x24,0xfe,0x20,0x52,0x92,0xe,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,
++0x2,0x7f,0x22,0x12,0x2,0x1a,0x63,0xa,0x4,0x8,0xff,0x8,0x8,0x8,0x10,0x20,0x8,0xfc,0x88,0x48,0x8,0x68,0x88,0x28,0x10,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x10,0x10,0x2b,0x24,0x50,0x8a,0x1,0x7c,0x4,0x8,0x49,0x32,0x10,0x8,0x9,0x0,0x0,0x44,0xfe,0x44,0x44,0x64,0x54,0xcc,0x44,0xcc,0x54,0x64,0x44,0x44,0x54,0x88,
++0x1,0x2,0xc,0x37,0xc0,0x1f,0x10,0x1f,0x2,0x7f,0x12,0xa,0x12,0x22,0xa,0x4,0x0,0x80,0x60,0xd8,0x6,0xf0,0x10,0xf0,0x8,0xfc,0x48,0x28,0x48,0x88,0x28,0x10,
++0x2,0x1f,0x2,0xff,0x2,0xf,0x38,0xcf,0x8,0xf,0x0,0x7e,0x22,0x1a,0x62,0x6,0x20,0xc0,0x84,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x4,0xfe,0x44,0x34,0xc4,0xc,
++0x2,0x2,0x7e,0x2,0x3e,0x2,0xfe,0x2,0x7f,0x22,0x12,0xa,0x12,0x63,0xa,0x4,0x80,0x88,0xfc,0x80,0xf8,0x80,0xfe,0x88,0xfc,0x8,0x48,0x28,0x48,0x88,0x28,0x10,
++0x8,0x4,0xff,0x0,0x3e,0x22,0x3e,0x22,0x3e,0x22,0x7e,0x22,0x12,0x1a,0x62,0x6,0x20,0x44,0xfe,0x8,0x48,0x48,0x48,0x48,0x48,0x18,0xfc,0x44,0x24,0x34,0xc4,0xc,
++0x10,0x9,0x7f,0x41,0x41,0x7f,0x40,0x40x1f,0x9,0x9,0xd,0x33,0xc0,0x8,0xfc,0x88,0xc8,0xaa,0x6,0x10,0xf8,0x10,0x10,0xf0,0x0,0xf8,0x0,0x6,0xfc,
++0x8,0x8,0xfe,0x8,0x1e,0xe8,0x9,0x1f,0x10,0x10,0x1f,0x9,0x9,0xd,0x33,0xc0,0xc,0xf0,0x84,0xfe,0x90,0x90,0x10,0xf0,0x10,0x10,0xf0,0x0,0xf8,0x0,0x6,0xfc,
++0x0,0x3f,0x24,0x27,0x24,0x3f,0x55,0x64,0x9f,0x10,0x1f,0x9,0x9,0xd,0x33,0xc0,0x48,0xfe,0x40,0x48,0x50,0xa0,0x52,0x8a,0xf6,0x10,0xf0,0x0,0xf8,0x0,0x6,0xfc,
++0x49,0x2a,0x7f,0x49,0x5d,0x6b,0x49,0x1f,0x10,0x10,0x1f,0x9,0x9,0xd,0x33,0xc0,0x20,0x24,0x3e,0x44,0xa8,0x10,0x6e,0xf0,0x10,0x10,0xf0,0x0,0xf8,0x0,0x6,0xfc,
++0x4,0x7e,0x44,0x44,0x45,0x7d,0x56,0x10,0x50,0x5c,0x50,0x50,0x5c,0xf0,0x40,0x0,0x80,0x80,0x84,0xfe,0x4,0x4,0x4,0x84,0x44,0x44,0x4,0x4,0x4,0x44,0x28,0x10,
++0x4,0x7f,0x44,0x44,0x44,0x7c,0x54,0x10,0x50,0x5c,0x51,0x51,0x5d,0xf2,0x44,0x9,0x0,0xfc,0x84,0x88,0x88,0x90,0xbc,0x84,0xc4,0xa8,0x28,0x10,0x28,0x28,0x46,0x84,
++0x4,0x7f,0x44,0x44,0x44,0x7c,0x10,0x13,0x50,0x5c,0x50,0x51,0x5d,0xf1,0x42,0x4,0x4,0xfe,0x88,0x88,0x88,0x88,0x88,0xfe,0x88,0x88,0x88,0x8,0x8,0x8,0x8,0x8,
++0x4,0x7e,0x44,0x45,0x44,0x7c,0x54,0x13,0x50,0x5c,0x50,0x50,0x5c,0xf1,0x42,0x4,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x50,0x50,0x90,0x88,0x8,0x6,0x4,
++0x4,0x7e,0x44,0x44,0x44,0x7d,0x56,0x11,0x51,0x5d,0x51,0x51,0x5d,0xf1,0x41,0x0,0x40,0x40,0xa0,0xa0,0x90,0x8,0x16,0xf8,0x10,0x10,0x10,0x50,0x20,0x4,0x4,0xfc,
++0x4,0x7f,0x44,0x44,0x44,0x7c,0x54,0x10,0x51,0x5e,0x50,0x50,0x5c,0xf0,0x40,0x0,0x4,0xfe,0x40,0x40,0x40,0x80,0x84,0xfe,0x84,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x4,0x7e,0x44,0x45,0x45,0x7f,0x55,0x11,0x51,0x5d,0x51,0x51,0x5d,0xf1,0x41,0x1,0x88,0x88,0x88,0x8,0x8,0xfe,0x8,0x8,0x48,0x28,0x28,0x8,0x8,0x8,0x28,0x10,
++0x0,0x7d,0x45,0x45,0x45,0x7d,0x55,0x13,0x51,0x5d,0x51,0x51,0x5d,0xf2,0x42,0x4,0x4,0xde,0x54,0x54,0x54,0x54,0x54,0xfe,0x54,0x54,0x54,0x54,0x54,0x54,0xe4,0xc,
++0x4,0x7f,0x45,0x45,0x45,0x7d,0x55,0x11,0x50,0x5c,0x50,0x51,0x5e,0xf0,0x40,0x0,0x1c,0xe0,0x0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0xa8,0x26,0x22,0x20,0xa0,0x40,
++0x4,0x7e,0x44,0x45,0x45,0x7e,0x54,0x10,0x50,0x5c,0x50,0x52,0x5c,0xf0,0x40,0x0,0x40,0x20,0x20,0xfe,0x2,0x4,0x80,0x88,0x98,0xa0,0xc0,0x80,0x82,0x82,0x7e,0x0,
++0x9,0x7d,0x49,0x49,0x4f,0x79,0x51,0x11,0x51,0x5d,0x51,0x51,0x5e,0xf2,0x45,0x8,0x0,0x0,0x0,0x4,0xde,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x5c,0x54,0x80,
++0x4,0x7e,0x44,0x45,0x45,0x7d,0x55,0x11,0x51,0x5d,0x51,0x51,0x5d,0xf2,0x42,0x5,0x20,0x20,0x20,0xfe,0x22,0x24,0x20,0xfc,0x88,0x48,0x50,0x20,0x50,0x48,0x8e,0x4,
++0x4,0x7e,0x44,0x44,0x45,0x7f,0x54,0x10,0x51,0x5d,0x51,0x51,0x5d,0xf1,0x41,0x1,0x40,0x40,0x80,0x90,0x8,0xfc,0x2,0x8,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x4,0x7e,0x44,0x45,0x44,0x7c,0x53,0x10,0x50,0x5c,0x51,0x50,0x5c,0xf0,0x43,0x0,0x20,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x4,0x7e,0x44,0x47,0x44,0x7c,0x54,0x13,0x50,0x5d,0x50,0x50,0x5c,0xf1,0x42,0x4,0x40,0x48,0x7c,0xc0,0x50,0x22,0xd2,0xe,0x8,0xfc,0xa0,0xa0,0xa0,0x22,0x22,0x1e,
++0x0,0x7d,0x45,0x45,0x45,0x7d,0x55,0x11,0x50,0x5c,0x53,0x50,0x5c,0xf0,0x40,0x0,0x10,0x10,0x12,0xd4,0x18,0x12,0x52,0x8e,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,
++0x4,0x7e,0x45,0x45,0x45,0x7e,0x54,0x13,0x50,0x5c,0x50,0x50,0x5c,0xf1,0x42,0x4,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x90,0x90,0x90,0x90,0x92,0x12,0xe,0x0,
++0x4,0x7e,0x45,0x45,0x44,0x7c,0x57,0x11,0x51,0x5d,0x51,0x51,0x5d,0xf2,0x44,0x0,0x0,0xc,0x70,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x86,0x7c,0x0,
++0x0,0x7c,0x47,0x44,0x44,0x7c,0x54,0x10,0x53,0x5c,0x50,0x50,0x5c,0xf0,0x41,0x2,0x40,0x24,0xfe,0x88,0x50,0x20,0x50,0x8e,0x4,0x88,0x88,0x88,0x88,0x88,0x8,0x8,
++0x4,0x7e,0x44,0x47,0x44,0x7c,0x55,0x12,0x50,0x5c,0x50,0x50,0x5c,0xf0,0x41,0x2,0x40,0x20,0x4,0xfe,0x0,0x88,0x6,0x8a,0x88,0x50,0x50,0x20,0x50,0x88,0xe,0x4,
++0x4,0x7e,0x45,0x45,0x45,0x7d,0x55,0x11,0x51,0x5d,0x51,0x51,0x5d,0xf1,0x41,0x1,0x40,0x28,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x40,0x24,0x28,0x10,0x4e,0x84,0x0,
++0x0,0x7d,0x44,0x44,0x45,0x7d,0x55,0x11,0x50,0x5c,0x50,0x52,0x5e,0xf4,0x40,0x0,0x8,0xfc,0x8,0x8,0xf8,0x0,0x4,0x4,0xfc,0x0,0x40,0xa4,0xa2,0x8a,0x78,0x0,
++0x4,0x7e,0x44,0x44,0x45,0x7d,0x55,0x11,0x51,0x5c,0x50,0x53,0x5c,0xf0,0x40,0x0,0x24,0x3e,0x20,0x20,0xfc,0x4,0xfc,0x4,0xfc,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x7d,0x45,0x45,0x45,0x7d,0x55,0x11,0x5c,0x53,0x50,0x50,0x5d,0xf2,0x40,0x0,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x70,0xa8,0x26,0x24,0x20,0x20,
++0x9,0x7d,0x49,0x49,0x4a,0x7c,0x50,0x17,0x50,0x5c,0x50,0x51,0x5d,0xf2,0x44,0x0,0x0,0x0,0x0,0xfe,0x92,0x92,0x92,0xf2,0x92,0x92,0x92,0x52,0x32,0x1e,0x12,0x0,
++0x4,0x7f,0x45,0x45,0x45,0x7d,0x55,0x11,0x51,0x5d,0x51,0x51,0x5e,0xf2,0x44,0x0,0xc,0xf0,0x10,0x14,0xfe,0x10,0x7c,0x44,0x54,0x54,0x54,0x54,0x20,0x28,0x46,0x82,
++0x4,0x7e,0x45,0x45,0x45,0x7d,0x55,0x11,0x51,0x5d,0x52,0x52,0x5c,0xf4,0x48,0x0,0x20,0x10,0xfe,0x20,0x24,0x3e,0x20,0x20,0x24,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x4,0x7e,0x45,0x44,0x44,0x7c,0x54,0x13,0x50,0x5d,0x51,0x51,0x5d,0xf1,0x41,0x1,0x40,0x28,0xfc,0x0,0x88,0x50,0x4,0xfe,0x0,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x4,0x7a,0x4a,0x48,0x4f,0x79,0x51,0x11,0x5f,0x59,0x51,0x51,0x5a,0xf2,0x44,0x0,0x40,0x5e,0x92,0x14,0xd4,0x18,0x14,0x54,0xf2,0x12,0x1a,0x14,0x90,0x50,0x50,0x10,
++0x0,0x78,0x4f,0x49,0x49,0x7a,0x57,0x11,0x51,0x5d,0x55,0x53,0x5d,0xf2,0x44,0x8,0x10,0x10,0x7c,0x14,0xfe,0x14,0x7c,0x10,0x7c,0x10,0xfe,0x10,0x10,0x96,0x7c,0x0,
++0x0,0x7d,0x47,0x45,0x45,0x7d,0x55,0x11,0x50,0x5c,0x53,0x50,0x5c,0xf1,0x42,0x0,0x48,0x48,0xfe,0x48,0x48,0x78,0x0,0xfc,0x20,0x24,0xfe,0x70,0xa8,0x26,0x24,0x20,
++0x8,0x7c,0x4a,0x4a,0x4b,0x78,0x57,0x10,0x58,0x57,0x54,0x54,0x5c,0xf4,0x44,0x4,0x40,0x40,0x48,0x48,0xf8,0x0,0xfe,0x40,0x84,0xfe,0xa4,0xa4,0xa4,0xa4,0xa4,0xc,
++0x0,0x7d,0x44,0x44,0x47,0x7c,0x55,0x11,0x51,0x5d,0x51,0x50,0x5d,0xf0,0x43,0x0,0xc,0xf0,0x20,0x24,0xfe,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x20,0xfc,0x20,0xfe,0x0,
++0x0,0x7d,0x44,0x45,0x45,0x7d,0x55,0x11,0x50,0x5f,0x52,0x52,0x5e,0xf2,0x42,0x2,0xc,0xf0,0x24,0xfe,0x24,0x24,0xfc,0x24,0x20,0xfe,0x22,0x2a,0xfa,0x2,0xa,0x4,
++0x4,0x7e,0x45,0x45,0x45,0x7d,0x55,0x11,0x51,0x5d,0x51,0x51,0x5e,0xf2,0x44,0xb,0x20,0x14,0xfe,0x48,0x48,0xfe,0x48,0x78,0x0,0xfc,0x4,0x48,0x30,0x28,0xc6,0x4,
++0x1,0x7c,0x47,0x44,0x45,0x7c,0x57,0x10,0x50,0x5c,0x51,0x51,0x5e,0xf0,0x43,0x0,0x8,0x90,0xfe,0x40,0xfc,0x40,0xfe,0x80,0x88,0xfc,0x20,0x20,0x20,0x24,0xfe,0x0,
++0x4,0x7e,0x45,0x45,0x45,0x7d,0x55,0x11,0x51,0x5d,0x52,0x52,0x5c,0xf4,0x48,0x0,0x40,0x24,0xfe,0x4,0x4,0xfc,0x4,0x0,0xfe,0xaa,0xaa,0xfe,0xaa,0xaa,0xaa,0x84,
++0x4,0x7e,0x44,0x44,0x45,0x7c,0x54,0x11,0x50,0x5c,0x53,0x50,0x5c,0xf1,0x42,0x0,0x0,0xfc,0x48,0x30,0xfe,0x32,0x54,0x90,0x30,0x24,0xfe,0x70,0xa8,0x26,0x24,0x20,
++0x8,0x7f,0x49,0x49,0x49,0x79,0x51,0x17,0x50,0x5f,0x54,0x52,0x59,0xf2,0x44,0x8,0x4,0xfe,0x8,0xf8,0x8,0xf8,0x8,0xfe,0x8,0xbe,0xa2,0x94,0x8,0x94,0x24,0x42,
++0x8,0x7c,0x4b,0x48,0x48,0x7f,0x50,0x13,0x52,0x5e,0x52,0x53,0x5f,0xf2,0x42,0x2,0x90,0x90,0xfc,0x90,0x94,0xfe,0x90,0xfc,0x94,0x94,0x94,0x6c,0x2c,0x44,0x14,0x8,
++0x4,0x7f,0x45,0x44,0x44,0x7c,0x55,0x10,0x50,0x5d,0x50,0x53,0x5c,0xf0,0x40,0x3,0x1c,0xe0,0x24,0xa8,0x40,0x88,0xf0,0x20,0x44,0xfc,0x20,0xfe,0x20,0x50,0x8e,0x4,
++0x8,0x7f,0x4a,0x4b,0x4a,0x7a,0x52,0x12,0x52,0x5a,0x52,0x52,0x5c,0xf5,0x48,0x0,0x4,0xfe,0x0,0xf4,0x4,0xe4,0xbe,0xa4,0xb4,0xec,0xc,0xa4,0xa4,0xf4,0x14,0x8,
++0x10,0xff,0x94,0x96,0x95,0xf7,0xa4,0x26,0xa6,0xb7,0xa4,0xa4,0xa9,0xe9,0x92,0x24,0x4,0xfe,0x0,0x28,0x48,0xee,0x92,0xa4,0xa8,0xe8,0xa8,0x88,0x14,0x14,0x24,0x42,
++0x0,0x7d,0x44,0x44,0x47,0x7c,0x50,0x11,0x50,0x5d,0x50,0x53,0x5c,0xf0,0x41,0x6,0x50,0x54,0xd8,0x50,0xfe,0x88,0x50,0xfc,0x20,0xfc,0x20,0xfe,0x20,0x50,0x8e,0x4,
++0x4,0x7f,0x45,0x44,0x47,0x7c,0x54,0x13,0x51,0x5d,0x51,0x51,0x5d,0xf1,0x41,0x1,0x1c,0xe0,0x24,0xa8,0xfe,0x70,0xae,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,
++0x14,0xfa,0x90,0x9f,0x90,0xff,0xa8,0x28,0xaf,0xb2,0xa7,0xaa,0xb2,0xe2,0x86,0x1,0x20,0x28,0x24,0xa0,0x7e,0xa8,0xa8,0xa8,0xa8,0x28,0x28,0xa8,0x4a,0x4a,0x86,0x0,
++0x4,0x7f,0x45,0x45,0x45,0x7c,0x55,0x12,0x55,0x5d,0x51,0x50,0x5c,0xf3,0x40,0x0,0x4,0xfe,0x54,0x54,0xfc,0x84,0xfe,0x44,0xf4,0x54,0xf4,0x44,0x54,0xfc,0x14,0x8,
++0x11,0xff,0x91,0x94,0x92,0xf5,0xa5,0x25,0xa5,0xbd,0xa5,0xa5,0xbd,0xe5,0x84,0x4,0x10,0xfe,0x10,0x4,0xfe,0x44,0xf4,0x44,0xf4,0x44,0xf4,0x44,0xfc,0x4,0x14,0x8,
++0x10,0xff,0x94,0x95,0x95,0xf5,0xa5,0x25,0xa4,0xbd,0xa4,0xa7,0xbd,0xea,0x90,0x3,0x40,0xfe,0x0,0xfc,0x24,0xfc,0x24,0xfc,0x20,0xfc,0x20,0xfe,0x24,0xfa,0x20,0xfe,
++0x9,0x7d,0x4a,0x49,0x4b,0x7a,0x52,0x12,0x53,0x5e,0x53,0x52,0x5f,0xf2,0x43,0x2,0x24,0x24,0x48,0x24,0xfe,0x94,0x64,0x94,0xfc,0x48,0x68,0x48,0x68,0x4a,0x6a,0x46,
++0x1,0xf5,0x97,0x99,0x97,0xf3,0xa5,0x29,0xa3,0xba,0xa2,0xa2,0xba,0xe0,0x81,0x6,0x8,0x28,0xbc,0x48,0xbe,0x18,0xaa,0x4e,0xf8,0xc,0x48,0x48,0x48,0xb0,0xc,0x4,
++0x10,0xff,0x90,0x95,0x94,0xf7,0xac,0x25,0xab,0xb1,0xa0,0xa3,0xb9,0xe0,0x83,0xc,0x40,0xfe,0x0,0xf4,0x4,0xf6,0xc,0xf4,0x1a,0xf2,0x0,0xf8,0x10,0xe0,0x10,0xe,
++0x0,0x3f,0x2,0x11,0x8,0x7,0x78,0x0,0x1,0x6,0x38,0x1,0x6,0x38,0x1,0x0,0xe0,0x8,0xc,0x30,0xc0,0x0,0x80,0xc0,0x20,0x50,0x90,0x10,0x10,0x10,0x20,0xc0,
++0x8,0x10,0x35,0xcc,0x28,0x10,0x30,0xc8,0x15,0x26,0xcc,0x14,0x24,0xc4,0x14,0x8,0x0,0x4,0xfe,0x44,0x44,0x44,0x94,0x88,0x4,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x8,0x13,0x34,0xcc,0x28,0x11,0x31,0xc9,0x15,0x25,0xcd,0x15,0x25,0xc5,0x15,0x9,0x4,0xfe,0x40,0x40,0x84,0xfe,0x4,0x4,0x4,0xfc,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x8,0x10,0x34,0xcc,0x29,0x11,0x33,0xcd,0x15,0x25,0xcd,0x15,0x25,0xc5,0x15,0x9,0x10,0x90,0x90,0x90,0x14,0xfe,0x10,0x38,0x34,0x54,0x54,0x92,0x10,0x10,0x10,0x10,
++0x8,0x10,0x37,0xcc,0x29,0x11,0x31,0xc9,0x15,0x24,0xcf,0x14,0x24,0xc4,0x15,0xa,0x88,0x88,0xfe,0x88,0xfc,0x4,0xfc,0x4,0xfc,0x20,0xfe,0x20,0x50,0x88,0x6,0x4,
++0x8,0x10,0x35,0xcd,0x29,0x11,0x31,0xc9,0x15,0x24,0xcd,0x15,0x25,0xc5,0x15,0x9,0x20,0x44,0xfe,0x4,0x54,0x24,0x54,0x4,0xfc,0x10,0x12,0xd4,0x18,0x12,0xd2,0xe,
++0x10,0x10,0x1e,0x24,0x28,0x7e,0xaa,0x2a,0x3e,0x2b,0x2a,0x3e,0x2a,0x4a,0x42,0x86,0x10,0x90,0x50,0x50,0x10,0x90,0x50,0x54,0x1e,0xf0,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x10,0x1e,0x24,0x28,0x7e,0xaa,0x2a,0x3e,0x2b,0x2a,0x3e,0x2a,0x4a,0x42,0x87,0x20,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0xfe,0x20,0x20,0x50,0x48,0x86,0x4,
++0x10,0x10,0x1e,0x25,0x28,0x7e,0xaa,0x2a,0x3e,0x2a,0x2a,0x3e,0x2a,0x4b,0x42,0x86,0x80,0x84,0xfe,0x0,0xf8,0x20,0x44,0xfe,0x54,0x54,0x54,0x94,0xa4,0x24,0x54,0x8,
++0x10,0x10,0x1f,0x24,0x28,0x7e,0xaa,0x2a,0x3e,0x2a,0x2a,0x3e,0x2a,0x4a,0x43,0x86,0x4,0xe,0xf0,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa4,0xac,0x7a,0x8,
++0x8,0x8,0x2e,0x28,0x2e,0xf4,0x44,0xf,0x10,0x3f,0x51,0x1f,0x11,0x1f,0x21,0x41,0x80,0x84,0x98,0xe2,0x82,0x7e,0x0,0xe0,0x40,0xf0,0x10,0xf0,0x10,0xf0,0x10,0x30,
++0x10,0x10,0x1d,0x24,0x28,0x7e,0xaa,0x2b,0x3e,0x2a,0x2a,0x3e,0x2a,0x4a,0x42,0x87,0x20,0x20,0x24,0xac,0xb0,0x20,0x24,0xfe,0x50,0x50,0x50,0x50,0x52,0x92,0x8e,0x0,
++0x20,0x20,0x3d,0x48,0x50,0xfd,0x55,0x55,0x7d,0x55,0x54,0x7c,0x55,0x56,0x44,0x8c,0x20,0x24,0xfe,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x70,0xa8,0x26,0x24,0x20,0x20,
++0x21,0x20,0x3c,0x49,0x51,0xfd,0x55,0x55,0x7d,0x55,0x54,0x7f,0x54,0x54,0x44,0x8c,0x4,0x88,0x50,0xfc,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x20,0x20,0x20,0x20,
++0x8,0x2f,0x28,0x2f,0x7a,0x1,0xff,0x0,0x1f,0x0,0x1f,0x0,0x1f,0x10,0x1f,0x10,0x40,0x58,0x60,0x44,0x7c,0x0,0xfe,0x0,0xf0,0x0,0xf0,0x0,0xf0,0x10,0xf0,0x10,
++0x8,0xff,0x8,0x3e,0x2b,0x3e,0x22,0x41,0xff,0x0,0x1e,0x0,0x0,0x1f,0x10,0x1f,0x78,0x48,0x48,0x86,0x78,0x48,0x30,0x4c,0xfe,0x0,0x0,0xf0,0x0,0xf0,0x10,0xf0,
++0x10,0x14,0xfe,0x10,0x7c,0x10,0xfe,0x0,0x7c,0x44,0x7c,0x44,0x7c,0x44,0x55,0x4a,0x0,0x8,0xfc,0x88,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0x50,0x52,0x92,0xe,0x0,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x1,0x3f,0x0,0xff,0x8,0xf,0x0,0x0,0x0,0x0,0xf0,0x0,0xfe,0x12,0x64,0x10,0x0,0xf8,0x0,0xfe,0x0,0xf0,0x10,0x10,0xa0,0x40,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x3f,0x21,0x21,0x2f,0x21,0x21,0x21,0x42,0x4c,0x90,0xf0,0x0,0xfe,0x12,0x64,0x10,0xfc,0x0,0x8,0xfc,0x8,0x8,0x8,0x8,0x50,0x20,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x2,0x1,0xff,0x8,0x4,0x2,0x1,0x6,0x18,0x60,0xf0,0x0,0xfe,0x12,0x64,0x10,0x0,0x4,0xfe,0x20,0x40,0x80,0x0,0xc0,0x3c,0x8,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x78,0xb,0x10,0x78,0xf,0x28,0x10,0x2b,0x44,0x83,0xf0,0x0,0xfe,0x12,0x64,0x10,0x38,0xc0,0x40,0x48,0xfc,0x40,0x50,0xf8,0x46,0xfc,
++0x1f,0x1,0x7f,0x51,0x8d,0x12,0x1,0x7f,0x8,0x4,0x3,0x1c,0xe8,0x8,0x10,0x20,0xf0,0x0,0xfe,0x12,0x64,0x10,0x0,0xfc,0x20,0x40,0x80,0x70,0x2e,0x20,0x20,0x20,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x41,0x20,0x8f,0x60,0x2b,0x12,0x62,0x22,0x22,0x20,0xf0,0x0,0xfe,0x12,0x64,0x10,0x40,0x44,0xfe,0x40,0xf8,0x48,0x48,0x48,0x58,0x40,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x2,0x7e,0x2,0x2,0x3e,0x2,0x2,0x7e,0x2,0x2,0xf0,0x0,0xfe,0x12,0x64,0x10,0x88,0xfc,0x80,0x90,0xf8,0x80,0x88,0xfc,0x80,0x80,
++0x1f,0x1,0x7f,0x51,0x8d,0x12,0x1,0x1f,0x4,0xff,0x1,0x7f,0x4,0xc,0x3,0x1c,0xf0,0x0,0xfe,0x12,0x64,0x10,0x0,0xf0,0x44,0xfe,0x0,0xfc,0x40,0x40,0x80,0x70,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x20,0x17,0x42,0x21,0xb,0x10,0x6f,0x20,0x20,0x27,0xf0,0x0,0xfe,0x12,0x64,0x10,0x38,0xc0,0x48,0x50,0xf8,0x40,0xfe,0x40,0x48,0xfc,
++0x1f,0x1,0x7f,0x51,0x8d,0x11,0x23,0x12,0x2,0xf3,0x11,0x13,0x1c,0x12,0x1b,0x10,0xf0,0x0,0xfe,0x12,0x64,0x10,0xf8,0x88,0x48,0xf8,0x0,0xfc,0x44,0xa4,0xf4,0x8,
++0x1f,0x1,0x7f,0x51,0x8d,0x12,0x3f,0x12,0xff,0x21,0x3f,0x21,0x3f,0x21,0x25,0x22,0xf0,0x0,0xfe,0x12,0x64,0x10,0x20,0x24,0xfe,0x4,0x44,0x28,0x10,0x28,0x46,0x84,
++0x1f,0x1,0x7f,0x51,0x8d,0x10,0x2b,0xe5,0x19,0x69,0x95,0x64,0x5,0x64,0x17,0x8,0xf0,0x0,0xfe,0x12,0x64,0x10,0xfc,0x24,0xfc,0x24,0xfc,0x20,0xfc,0x20,0xfe,0x0,
++0x8,0x8,0x2a,0x2f,0x28,0x29,0xff,0x0,0x49,0x49,0x49,0x55,0x63,0x41,0x7f,0x1,0x40,0x40,0x40,0x40,0x40,0x44,0xcc,0x50,0x60,0x40,0x40,0x40,0x42,0x42,0x3e,0x0,
++0x8,0x8,0x2a,0x2f,0x28,0x29,0xff,0x0,0x49,0x49,0x49,0x55,0x63,0x41,0x7f,0x1,0x0,0x4,0x7e,0x44,0x44,0x44,0xfc,0x44,0x44,0x44,0x7c,0x44,0x44,0x44,0xfe,0x0,
++0x10,0x10,0x50,0x5d,0x52,0x50,0xff,0x1,0x55,0x55,0x55,0x6d,0x45,0x45,0x7c,0x4,0x80,0x80,0x84,0xfe,0x4,0x24,0xf4,0x24,0x24,0xe4,0x14,0x8,0x2,0x2,0xfe,0x0,
++0x10,0x11,0x50,0x5c,0x50,0x54,0xfe,0x1,0x54,0x54,0x54,0x6c,0x44,0x44,0x7c,0x4,0x4,0xfe,0x44,0x44,0x44,0x44,0x94,0x8,0x0,0xfc,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x10,0x10,0x50,0x5d,0x51,0x55,0xff,0x1,0x55,0x55,0x55,0x6d,0x45,0x45,0x7f,0x4,0x50,0x50,0x50,0x50,0x52,0x74,0x58,0x50,0x50,0x50,0x50,0x50,0x50,0x72,0x92,0xe,
++0x10,0x11,0x51,0x5d,0x51,0x55,0xff,0x1,0x55,0x55,0x55,0x6d,0x45,0x45,0x7d,0x5,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x44,0x48,0x30,0x20,0x10,0x4e,0x84,0x0,
++0x10,0x11,0x50,0x5c,0x51,0x54,0xfe,0x0,0x57,0x54,0x54,0x6c,0x44,0x44,0x7c,0x4,0x8,0xfc,0x20,0x28,0xfc,0x48,0x48,0x48,0xfe,0x4,0xfe,0x84,0x84,0x84,0xfc,0x84,
++0x10,0x10,0x50,0x5c,0x50,0x54,0xfe,0x0,0x54,0x54,0x54,0x6c,0x44,0x45,0x7e,0x4,0x8,0xfc,0x88,0x88,0x88,0x88,0xf8,0xa0,0x28,0xbc,0xa0,0xa0,0xa0,0x66,0x3c,0x0,
++0x10,0x11,0x51,0x5d,0x51,0x55,0xff,0x1,0x55,0x55,0x55,0x6d,0x45,0x45,0x7e,0x4,0x4,0xfe,0x4,0x4,0xfc,0x0,0xfe,0x20,0x48,0xfc,0x10,0x7c,0x10,0x14,0xfe,0x0,
++0x0,0x1f,0x10,0x1f,0x1,0x3f,0x21,0x21,0x3f,0x21,0x21,0x3f,0x21,0x1,0x1,0x0,0x10,0xf8,0x10,0xf0,0x8,0xfc,0x8,0x8,0xf8,0x8,0x8,0xf8,0x8,0x2,0x2,0xfe,
++0x1f,0x0,0xff,0x4,0x78,0x1f,0x10,0x1f,0x1,0x3f,0x21,0x3f,0x21,0x3f,0x1,0x0,0xf0,0x4,0xfe,0x40,0x3c,0xf0,0x10,0xf0,0x8,0xfc,0x8,0xf8,0x8,0xfa,0x2,0xfe,
++0x3e,0x22,0x3e,0x1f,0x11,0x1f,0x11,0xff,0x1,0x1f,0x11,0x1f,0x11,0x1f,0x1,0x0,0xf8,0x88,0xf8,0xf0,0x10,0xf0,0x14,0xfe,0x0,0xf0,0x10,0xf0,0x10,0xf4,0x4,0xfc,
++0x9,0x8,0x8,0x1f,0x10,0x30,0x3f,0x50,0x90,0x1f,0x10,0x10,0x10,0x1f,0x10,0x10,0x0,0x80,0x88,0xfc,0x80,0x90,0xf8,0x80,0x90,0xf8,0x80,0x80,0x84,0xfe,0x0,0x0,
++0x9,0x8,0xf,0x10,0x3f,0x50,0x1f,0x10,0x1f,0x10,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x88,0xfc,0x80,0xf8,0x80,0xf8,0x80,0xfc,0x80,0x84,0xfe,0x80,0x80,0x80,0x80,
++0x9,0x8,0x1f,0x10,0x3f,0x50,0x9f,0x10,0x1f,0x10,0x7f,0x4,0x4,0x8,0x10,0x60,0x0,0x88,0xfc,0x80,0xf8,0x80,0xf8,0x80,0xfc,0x0,0xe0,0x28,0x7c,0x8,0x28,0x10,
++0x0,0x8,0x7d,0x49,0x4b,0x7d,0x49,0x49,0x79,0x49,0x49,0x4d,0xf1,0x41,0x1,0x1,0xc0,0xa0,0x24,0xfe,0x20,0x28,0xfc,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,0x0,
++0x10,0x10,0x1e,0x22,0x65,0x99,0xa,0x14,0x22,0x7f,0xa2,0x22,0x22,0x3e,0x22,0x0,0x60,0x50,0x84,0xfe,0x90,0x90,0xfc,0x90,0x90,0xfc,0x90,0x90,0x94,0xfe,0x80,0x80,
++0x3e,0x22,0x2a,0x2a,0x22,0x3e,0x9,0x10,0x3f,0x50,0x9f,0x10,0x1f,0x10,0x1f,0x10,0xf8,0x88,0xa8,0xa8,0x88,0xf8,0x0,0x88,0xfc,0x80,0xf8,0x80,0xf8,0x80,0xfc,0x0,
++0x20,0x32,0x21,0x3d,0x50,0xd7,0x79,0x51,0x51,0x7d,0x51,0x51,0x51,0x7d,0x40,0x40,0x10,0x18,0x10,0x3e,0x68,0x28,0x3e,0x28,0x28,0x3e,0x28,0x68,0xa8,0x3e,0x20,0x20,
++0x4,0x7e,0x10,0x10,0x1e,0x71,0x2,0xc,0x37,0xc1,0x1f,0x1,0x9,0x5,0x7f,0x0,0x8,0xfc,0x88,0xc8,0xaa,0xe,0x80,0x60,0xde,0x4,0xf0,0x0,0x20,0x48,0xfc,0x0,
++0x2,0x1,0x7f,0x4,0x14,0x25,0x42,0xc,0x37,0xc1,0x1f,0x1,0x9,0x5,0x7f,0x0,0x0,0x8,0xfc,0x40,0x50,0x4c,0x84,0x30,0xee,0x4,0xf0,0x0,0x20,0x48,0xfc,0x0,
++0x20,0x13,0x40,0x27,0x8,0x73,0x22,0x2c,0x37,0xc1,0x1f,0x1,0x9,0x5,0x7f,0x0,0x38,0xc0,0x48,0xfc,0xa0,0x18,0x88,0x60,0xde,0x4,0xf0,0x0,0x20,0x48,0xfc,0x0,
++0x8,0x7e,0x10,0x28,0x7e,0x8,0x7d,0xa,0xc,0x37,0xc1,0x1f,0x9,0x5,0x7f,0x0,0xc,0xf0,0x80,0x88,0xfc,0x90,0x10,0x90,0x60,0xde,0x4,0xf0,0x20,0x48,0xfc,0x0,
++0x0,0x7e,0x14,0x8,0xfe,0x1a,0x29,0x4a,0xc,0x37,0xc1,0x1f,0x9,0x5,0x7f,0x0,0x40,0x44,0x7e,0xc8,0x48,0x30,0x48,0x86,0x60,0xde,0x4,0xf0,0x20,0x48,0xfc,0x0,
++0x8,0x7f,0x8,0x3e,0x9,0xfe,0x11,0x1e,0x24,0xdf,0x31,0xdf,0x9,0x5,0x7f,0x0,0x40,0x44,0x7e,0xc8,0x48,0x30,0x48,0x86,0x40,0xf0,0xe,0xf4,0x20,0x48,0xfc,0x0,
++0x20,0x17,0x40,0x23,0x9,0x71,0x23,0x22,0xc,0x37,0xc1,0x1f,0x9,0x5,0x7f,0x0,0x40,0xfe,0x90,0xf8,0x50,0x50,0x52,0x8e,0x60,0xde,0x4,0xf0,0x20,0x48,0xfc,0x0,
++0x3f,0x21,0x3f,0x20,0x3f,0x51,0x9f,0x2,0xc,0x37,0xc1,0x1f,0x9,0x5,0x7f,0x0,0x10,0x7c,0x28,0xfe,0x10,0x7c,0x10,0x90,0x60,0xde,0x4,0xf0,0x20,0x48,0xfc,0x0,
++0x1,0x6,0x18,0xef,0x1,0x1f,0x5,0x3f,0x10,0x28,0x7c,0x93,0x7c,0x10,0x54,0xfe,0x0,0xc0,0x30,0xee,0x0,0xf0,0x40,0xf8,0x10,0x28,0x7c,0x92,0x7c,0x10,0x54,0xfe,
++0x20,0x20,0x3c,0x48,0x90,0x7f,0x54,0x54,0x7c,0x54,0x54,0x7c,0x0,0x1d,0xe2,0x44,0x40,0x60,0x50,0x50,0x44,0xfe,0x40,0x50,0x50,0x50,0x50,0x90,0x90,0x12,0x12,0xe,
++0x20,0x20,0x3c,0x48,0x93,0x7c,0x54,0x54,0x7c,0x54,0x54,0x7c,0x0,0x1d,0xe1,0x42,0x40,0x20,0x20,0x4,0xfe,0x80,0x88,0xfc,0x88,0x88,0x88,0x88,0x88,0x8,0x28,0x10,
++0x20,0x20,0x3c,0x48,0x93,0x7c,0x54,0x54,0x7c,0x54,0x55,0x7d,0x1,0x1e,0xe2,0x45,0x40,0x60,0x50,0x44,0xfe,0x80,0x80,0xfc,0x84,0xc4,0x48,0x28,0x10,0x28,0x46,0x84,
++0x20,0x20,0x3d,0x48,0x91,0x7c,0x54,0x54,0x7c,0x57,0x54,0x7c,0x0,0x1c,0xe0,0x40,0x0,0x8,0xfc,0x20,0x24,0xa8,0xa8,0x20,0x24,0xfe,0x20,0x20,0x20,0x20,0x20,0x20,
++0x20,0x20,0x3c,0x48,0x90,0x7c,0x54,0x54,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x40,0x40,0x48,0x7c,0x40,0x40,0x40,0x48,0xfc,0x8,0x8,0x8,0x8,0x8,0xf8,0x8,
++0x20,0x20,0x3c,0x48,0x90,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe2,0x44,0x40,0x44,0x7e,0x40,0x44,0xfe,0x4,0x4,0x4,0xfc,0x4,0x0,0x0,0x0,0x0,0x0,
++0x20,0x20,0x3d,0x48,0x90,0x7c,0x57,0x54,0x7c,0x54,0x54,0x7d,0x2,0x1c,0xe0,0x40,0x8,0x1c,0xe0,0x20,0x20,0x24,0xfe,0x20,0x70,0x68,0xa8,0x26,0x24,0x20,0x20,0x20,
++0x20,0x20,0x3c,0x48,0x90,0x7d,0x56,0x54,0x7c,0x54,0x54,0x7c,0x0,0x1c,0xe0,0x40,0x48,0x48,0x48,0x88,0x88,0xfe,0x88,0x88,0xc8,0xa8,0xa8,0x88,0x88,0x88,0xa8,0x90,
++0x11,0x9,0x49,0x7f,0x44,0x84,0xf,0x10,0x3f,0x51,0x1f,0x11,0x1f,0x0,0xff,0x0,0x10,0x20,0x40,0xfe,0x2,0x4,0xc0,0x90,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,0x0,
++0x20,0x20,0x3c,0x48,0x91,0x7f,0x54,0x54,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x20,0x20,0x40,0x88,0x4,0xfe,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x20,0x20,0x3d,0x48,0x90,0x7c,0x57,0x54,0x7c,0x54,0x55,0x7c,0x0,0x1c,0xe3,0x40,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x20,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x20,0x20,0x3c,0x4b,0x90,0x7c,0x55,0x54,0x7c,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x20,0x20,0x24,0xfe,0x20,0x28,0xfc,0x0,0x4,0xfe,0x4,0x4,0x4,0x4,0xfc,0x4,
++0x20,0x20,0x3c,0x4b,0x90,0x7c,0x55,0x56,0x7c,0x54,0x54,0x7c,0x0,0x1c,0xe0,0x40,0x40,0x40,0x44,0xfe,0x80,0x88,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,0xa8,0x90,
++0x20,0x23,0x3c,0x48,0x90,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x40,0x4,0xfe,0x20,0x20,0x44,0xfe,0x54,0x54,0x54,0x54,0x54,0x54,0x54,0x4,0x14,0x8,
++0x20,0x20,0x3c,0x4b,0x90,0x7c,0x54,0x54,0x7c,0x57,0x54,0x7c,0x0,0x1c,0xe1,0x42,0x40,0x20,0x4,0xfe,0x88,0x50,0x20,0x50,0x8e,0x4,0x88,0x88,0x88,0x88,0x8,0x8,
++0x20,0x20,0x3c,0x4b,0x90,0x7c,0x55,0x56,0x7c,0x54,0x54,0x7c,0x0,0x1c,0xe1,0x46,0x40,0x20,0x4,0xfe,0x0,0x88,0x6,0x8a,0x88,0x50,0x50,0x20,0x50,0x88,0x6,0x4,
++0x9,0x5,0x3f,0x2,0xff,0x4,0xa,0x37,0xc8,0x1f,0x31,0x1f,0x11,0x1f,0x0,0x7f,0x20,0x40,0xf8,0x0,0xfe,0x40,0x30,0xce,0x84,0xf0,0x10,0xf0,0x10,0xf0,0x0,0xfc,
++0x20,0x21,0x3c,0x48,0x91,0x7c,0x54,0x55,0x7c,0x54,0x57,0x7c,0x0,0x1c,0xe0,0x40,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x8,0x8,0xfe,0x88,0x48,0x8,0x28,0x10,
++0x20,0x23,0x3c,0x48,0x91,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7c,0x0,0x1c,0xe0,0x43,0x4,0xfe,0x20,0x24,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0xa0,0xa0,0x40,0xb0,0xe,
++0x20,0x23,0x3c,0x48,0x91,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x4,0xfe,0x0,0x4,0xde,0x54,0x54,0x54,0x54,0xdc,0x54,0x54,0x54,0x54,0x54,0x54,
++0x20,0x20,0x3c,0x4a,0x91,0x7d,0x54,0x57,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe2,0x44,0x20,0x20,0x24,0xfe,0x20,0x20,0x50,0x50,0xfc,0x10,0x14,0xfe,0x10,0x10,0x96,0x7c,
++0x20,0x20,0x3d,0x49,0x91,0x7d,0x55,0x55,0x7c,0x54,0x55,0x7c,0x0,0x1c,0xe3,0x40,0x40,0x40,0x7e,0x62,0x54,0x48,0x54,0x62,0x20,0x28,0xfc,0x20,0x20,0x24,0xfe,0x0,
++0x20,0x20,0x3d,0x49,0x91,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe0,0x40,0x4,0x44,0xe4,0x44,0x44,0x7e,0x44,0xc4,0x64,0x54,0x54,0x44,0xc4,0x44,0x14,0x8,
++0x20,0x20,0x3c,0x48,0x91,0x7c,0x54,0x54,0x7f,0x54,0x55,0x7c,0x0,0x1d,0xe2,0x40,0x40,0x40,0x7c,0x88,0x50,0x20,0x50,0x8e,0x24,0x20,0xfc,0x20,0xa8,0x26,0xa2,0x40,
++0x20,0x21,0x3c,0x48,0x90,0x7d,0x54,0x54,0x7c,0x55,0x54,0x7c,0x1,0x1e,0xe0,0x40,0x1c,0xe0,0x40,0x40,0x88,0xf0,0x20,0x40,0x88,0xfc,0x20,0xa8,0x26,0x22,0xa0,0x40,
++0x20,0x10,0x40,0x25,0x8,0x77,0x22,0x27,0x8,0x1f,0x31,0x5f,0x11,0x1f,0x0,0xff,0x20,0xa8,0xa6,0x3a,0x60,0x80,0x0,0xc0,0x90,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfe,
++0x20,0x20,0x3c,0x4b,0x92,0x7c,0x54,0x54,0x7c,0x57,0x54,0x7c,0x0,0x1c,0xe1,0x46,0x40,0x20,0x20,0xfe,0x2,0x14,0xf8,0x0,0x4,0xfe,0x90,0x90,0x90,0x92,0x12,0xe,
++0x20,0x20,0x3d,0x49,0x91,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe0,0x40,0x0,0x4,0xde,0x54,0x54,0xd4,0x54,0x54,0xd4,0x14,0x94,0x54,0x5c,0x90,0x10,0x10,
++0x20,0x20,0x3d,0x48,0x90,0x7c,0x57,0x54,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x20,0x28,0xfc,0x20,0xf8,0x20,0xfe,0x0,0xfc,0x4,0xfc,0x4,0xfc,0x4,0x14,0x8,
++0x20,0x20,0x3d,0x48,0x90,0x7f,0x54,0x55,0x7e,0x54,0x55,0x7e,0x0,0x1c,0xe0,0x43,0x20,0x28,0xfc,0x20,0x24,0xfe,0x88,0x46,0x7a,0x88,0x48,0x50,0x20,0x50,0x8e,0x4,
++0x20,0x23,0x3d,0x49,0x91,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7d,0x1,0x1f,0xe0,0x40,0x20,0xf0,0x44,0x7e,0x44,0xd4,0x54,0x54,0x54,0xd4,0x54,0x68,0xc8,0x54,0x52,0x60,
++0x20,0x20,0x3c,0x4b,0x90,0x7c,0x54,0x55,0x7c,0x54,0x54,0x7f,0x0,0x1c,0xe0,0x40,0x50,0x50,0x54,0xde,0x50,0x50,0x50,0xdc,0x50,0x50,0x54,0xde,0x50,0x50,0x50,0x50,
++0x20,0x21,0x3d,0x49,0x91,0x7d,0x55,0x55,0x7c,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x10,0x12,0xd6,0x18,0x10,0x52,0x92,0xe,
++0x20,0x20,0x3c,0x48,0x90,0x7c,0x54,0x54,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x8,0xfc,0x88,0xf8,0x88,0x88,0xf8,0x4,0xfe,0x4,0x4,0xfc,0x4,0x4,0xfc,0x4,
++0x20,0x21,0x3d,0x49,0x91,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x4,0xfe,0x4,0x24,0x24,0xfc,0x24,0x24,0x74,0x54,0x54,0x74,0x4,0x4,0xfc,0x4,
++0x20,0x20,0x3d,0x49,0x91,0x7d,0x55,0x55,0x7d,0x55,0x54,0x7c,0x0,0x1c,0xe1,0x46,0x0,0x44,0x8e,0x4,0x4,0xdc,0x4,0x4,0xfc,0x54,0x50,0x50,0x90,0x92,0x12,0xe,
++0x20,0x20,0x3c,0x48,0x91,0x7e,0x54,0x55,0x7c,0x54,0x54,0x7c,0x1,0x1e,0xe2,0x40,0x20,0x20,0x50,0x88,0x46,0x24,0x20,0xf8,0x8,0x10,0x40,0xa0,0xa4,0x8a,0x8a,0x78,
++0x20,0x21,0x3d,0x49,0x91,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe2,0x44,0x4,0xfe,0x24,0x24,0x74,0x24,0x24,0xfc,0x4,0x74,0x54,0x54,0x74,0x4,0x14,0x8,
++0x20,0x23,0x3c,0x48,0x91,0x7c,0x55,0x55,0x7d,0x55,0x55,0x7c,0x0,0x1c,0xe1,0x40,0x4,0xfe,0x4,0x74,0xc4,0x44,0xf4,0x54,0x54,0x54,0xf4,0x44,0x54,0x76,0xca,0x0,
++0x20,0x20,0x3c,0x49,0x92,0x7d,0x54,0x54,0x7d,0x55,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x0,0x92,0x92,0x24,0x48,0x24,0x92,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x4,
++0x20,0x21,0x3c,0x48,0x93,0x7c,0x54,0x55,0x7d,0x55,0x55,0x7d,0x1,0x1c,0xe0,0x43,0x20,0xfc,0x20,0x88,0xfe,0x88,0x4,0xfe,0x4,0x24,0x24,0x24,0x24,0x58,0x86,0x2,
++0x20,0x21,0x3d,0x4b,0x91,0x7d,0x55,0x55,0x7d,0x54,0x57,0x7c,0x0,0x1d,0xe2,0x40,0x48,0x48,0x48,0xfe,0x48,0x48,0x78,0x0,0xfc,0x20,0xfe,0x70,0xa8,0x26,0x24,0x20,
++0x20,0x21,0x3d,0x49,0x91,0x7d,0x54,0x55,0x7c,0x57,0x54,0x7c,0x0,0x1c,0xe0,0x40,0x4,0xde,0x54,0x54,0x54,0xdc,0x0,0xfc,0x0,0xfe,0x80,0xfc,0x4,0x4,0x28,0x10,
++0x20,0x20,0x3b,0x48,0x90,0x7f,0x54,0x55,0x7d,0x55,0x56,0x7c,0x0,0x1c,0xe0,0x40,0x8,0x68,0x88,0x88,0x8a,0xea,0x9c,0x88,0xc8,0xa8,0x88,0x88,0x94,0x94,0xa2,0xc0,
++0x20,0x20,0x3c,0x49,0x93,0x7d,0x55,0x55,0x7d,0x54,0x54,0x7d,0x2,0x1c,0xe0,0x43,0x80,0x84,0xfe,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x80,0xf8,0x88,0x50,0x20,0xd0,0xe,
++0x20,0x20,0x3d,0x49,0x91,0x7d,0x55,0x54,0x7d,0x54,0x54,0x7d,0x0,0x1c,0xe3,0x40,0x20,0x44,0xfe,0x4,0xfc,0x4,0xfc,0x0,0xfc,0x20,0x28,0xfc,0x20,0x24,0xfe,0x0,
++0x20,0x20,0x3d,0x49,0x91,0x7d,0x55,0x55,0x7d,0x55,0x57,0x7d,0x1,0x1d,0xe1,0x41,0x40,0x24,0xfe,0x4,0x4,0xfc,0x0,0x4,0xfe,0x54,0x54,0xfc,0x54,0x54,0x54,0xc,
++0x20,0x21,0x3d,0x48,0x90,0x7c,0x55,0x56,0x7d,0x55,0x55,0x7d,0x0,0x1c,0xe3,0x40,0x0,0xfc,0x24,0x88,0x70,0x88,0x26,0x24,0xfe,0x24,0x24,0xfc,0x20,0x24,0xfc,0x2,
++0x8,0x7f,0x8,0xfe,0x11,0x1e,0x22,0x4f,0x88,0x1f,0x31,0x5f,0x11,0x1f,0x0,0xff,0x40,0x44,0x7e,0xc8,0x48,0x30,0x48,0xc6,0x90,0xf8,0x10,0xf0,0x10,0xf0,0x4,0xfc,
++0x20,0x20,0x3d,0x48,0x93,0x7c,0x54,0x55,0x7e,0x54,0x55,0x7d,0x1,0x1d,0xe1,0x41,0x40,0x48,0xf8,0x50,0xfe,0x40,0xf0,0x84,0xfc,0x0,0xf8,0x8,0xf8,0x8,0xf8,0x8,
++0x20,0x21,0x3d,0x49,0x91,0x7d,0x54,0x57,0x7c,0x56,0x55,0x7d,0x2,0x1c,0xe1,0x40,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x0,0xde,0x42,0x52,0xce,0x4a,0x52,0x42,0x4a,0x84,
++0x20,0x21,0x3d,0x49,0x91,0x7d,0x54,0x54,0x7c,0x55,0x54,0x7c,0x0,0x1d,0xe2,0x40,0x4,0xfe,0x54,0x54,0x54,0xfc,0x20,0xa8,0xa8,0x24,0x20,0xa8,0xa4,0x22,0x22,0x20,
++0x20,0x20,0x3d,0x48,0x91,0x7c,0x54,0x54,0x7d,0x54,0x57,0x7c,0x1,0x1d,0xe1,0x41,0x8,0x1c,0xe0,0x4,0x24,0xa8,0x80,0xfc,0x20,0x24,0xfe,0x20,0x24,0x24,0xfc,0x4,
++0x21,0x21,0x7f,0x91,0x21,0xf8,0xab,0xaa,0xfa,0xaa,0xab,0xf8,0x7,0x18,0xe0,0x40,0x48,0x48,0xf8,0x48,0xc8,0x9e,0xea,0xaa,0xaa,0xaa,0xea,0x8a,0xea,0x8a,0x92,0xa6,
++0x20,0x23,0x3c,0x48,0x91,0x7d,0x55,0x55,0x7c,0x55,0x54,0x7f,0x0,0x1d,0xe2,0x40,0x4,0xfe,0x50,0x54,0xfe,0x54,0x54,0xfc,0x0,0xfc,0x0,0xfe,0xa8,0x26,0x22,0x60,
++0x20,0x21,0x3c,0x4b,0x92,0x7d,0x54,0x55,0x7c,0x54,0x55,0x7c,0x0,0x1c,0xe1,0x40,0x8,0xfc,0x20,0xfe,0x22,0xac,0x20,0xac,0x20,0x4,0xfe,0x4,0xfc,0x4,0xfc,0x4,
++0x20,0x20,0x3c,0x48,0x90,0x7c,0x55,0x55,0x7d,0x55,0x54,0x7c,0x0,0x1c,0xe0,0x43,0xfc,0x84,0xfc,0x84,0xfc,0x0,0xfe,0x4a,0x4a,0xfe,0x0,0xfc,0x48,0x30,0xc8,0x6,
++0x20,0x3f,0x40,0xbf,0x29,0xff,0x25,0x3f,0x8,0x1f,0x31,0x5f,0x11,0x1f,0x0,0xff,0x40,0x44,0xfe,0x4,0x44,0xa8,0x10,0xe8,0x86,0xf0,0x10,0xf0,0x10,0xf0,0x4,0xfe,
++0x20,0x23,0x7a,0x93,0x22,0xfb,0xaa,0xab,0xfa,0xab,0xab,0xfb,0x5,0x1d,0xe5,0x49,0x20,0xfe,0x20,0xfc,0x24,0xfe,0x24,0xfc,0x20,0xfc,0x24,0xfc,0x24,0xfc,0x24,0x2c,
++0x20,0x23,0x7a,0x92,0x22,0xfa,0xab,0xaa,0xfb,0xab,0xab,0xfb,0x2,0x1c,0xe4,0x49,0x4,0xfe,0x8,0xa8,0xae,0x12,0xf4,0x44,0x54,0x54,0x54,0xf4,0x54,0x4a,0x8a,0x10,
++0x21,0x20,0x3f,0x48,0x91,0x7c,0x57,0x55,0x7c,0x57,0x54,0x7d,0x1,0x1d,0xe1,0x41,0x4,0x88,0xfe,0x20,0xfc,0x20,0xfe,0x24,0xa8,0xfe,0x4,0xfe,0x4,0x4,0xfc,0x4,
++0x21,0x20,0x3f,0x48,0x91,0x7d,0x55,0x55,0x7d,0x55,0x55,0x7c,0x3,0x1c,0xe0,0x40,0x4,0x88,0xfe,0x50,0xfc,0x54,0x54,0x8c,0x74,0x4,0xfc,0x8,0xfe,0x88,0x48,0x18,
++0x20,0x21,0x3d,0x49,0x91,0x7d,0x54,0x57,0x7c,0x55,0x55,0x7d,0x0,0x1c,0xe3,0x40,0x50,0xfc,0x54,0xfc,0x54,0xfc,0x0,0xfe,0x0,0xfc,0x4,0xfc,0x88,0x50,0xfe,0x0,
++0x28,0x28,0xfc,0x28,0x38,0x10,0x7c,0x54,0x54,0x7c,0x10,0xfe,0x10,0x10,0x13,0x10,0x4,0xfe,0x84,0x84,0x84,0x84,0xfc,0x84,0x84,0x84,0x84,0xfc,0x0,0x4,0xfe,0x0,
++0x28,0x28,0xfe,0x29,0x39,0x11,0x7d,0x55,0x55,0x7f,0x10,0xfe,0x10,0x10,0x11,0x12,0x20,0x20,0x24,0xfe,0x24,0x24,0x24,0x24,0x24,0xfe,0x20,0x50,0x50,0x88,0x6,0x4,
++0x28,0x28,0xfe,0x29,0x39,0x10,0x7f,0x55,0x55,0x7d,0x11,0xfd,0x11,0x12,0x14,0x10,0x10,0x10,0x10,0x10,0x7c,0x10,0x10,0x10,0x28,0x28,0x24,0x44,0x0,0x86,0x7c,0x0,
++0x28,0x29,0xfe,0x28,0x3b,0x10,0x7c,0x55,0x56,0x7c,0x10,0xfe,0x10,0x10,0x11,0x12,0x1c,0xe0,0x20,0x24,0xfe,0x50,0x88,0x6,0x88,0x88,0x88,0x88,0x88,0x88,0x8,0x8,
++0x28,0x28,0xfe,0x28,0x39,0x13,0x7d,0x55,0x55,0x7d,0x10,0xfe,0x10,0x10,0x11,0x12,0x40,0x40,0x78,0x90,0x24,0xfe,0x24,0x24,0x24,0xfc,0x50,0x50,0x90,0x92,0x12,0xe,
++0x28,0x28,0xff,0x28,0x38,0x13,0x7c,0x54,0x55,0x7f,0x11,0xff,0x11,0x11,0x11,0x11,0x90,0x90,0xfc,0x90,0x44,0xfe,0x80,0xfc,0x8,0x10,0xfe,0x10,0x10,0x10,0x50,0x20,
++0x28,0x28,0xfe,0x29,0x3a,0x13,0x7c,0x55,0x54,0x7d,0x10,0xff,0x11,0x11,0x11,0x10,0x80,0x84,0xfe,0x4,0x44,0xfc,0x4,0xf4,0x4,0xf4,0x4,0xf4,0x14,0x14,0xf4,0x8,
++0x28,0x29,0xfe,0x28,0x3b,0x10,0x7c,0x55,0x56,0x7c,0x13,0xfc,0x10,0x11,0x12,0x10,0x0,0xfc,0x48,0x20,0xfe,0xa2,0xa4,0x20,0x60,0x24,0xfe,0x70,0xa8,0x26,0x24,0x20,
++0x28,0x28,0xff,0x28,0x39,0x10,0x7f,0x54,0x55,0x7d,0x11,0xfd,0x13,0x11,0x11,0x11,0x88,0x88,0xfe,0x88,0xfc,0x88,0xfe,0x20,0xfc,0x24,0xfc,0x24,0xfe,0x4,0x14,0x8,
++0x28,0x28,0xfd,0x28,0x3b,0x10,0x7d,0x57,0x55,0x7d,0x11,0xff,0x11,0x11,0x11,0x11,0x88,0x88,0xfc,0x88,0xfe,0x88,0x4,0xfe,0x24,0xfc,0x24,0xfc,0x24,0x24,0x34,0x28,
++0x2,0x3f,0x22,0x3a,0x2a,0x7f,0x41,0xbe,0x22,0x3e,0x22,0x3e,0x22,0x22,0x2a,0x25,0x20,0x20,0x50,0x50,0x88,0x6,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x88,0x8,
++0x2,0x3f,0x22,0x3a,0x2a,0x7f,0x41,0xbe,0x22,0x3e,0x22,0x3e,0x22,0x22,0x2a,0x25,0x8,0x7c,0x48,0x48,0x48,0x86,0x0,0xfc,0x44,0x48,0x28,0x10,0x30,0x48,0x8e,0x4,
++0x2,0x3f,0x22,0x3a,0x2a,0x7f,0x41,0xbe,0x22,0x3e,0x22,0x3e,0x22,0x22,0x2a,0x24,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x24,0xfe,0x84,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x4,0x7e,0x44,0x74,0x54,0xfe,0x82,0x7c,0x44,0x7c,0x44,0x7c,0x45,0x44,0x54,0x48,0x20,0x48,0xfc,0x88,0xa8,0x88,0xa8,0x90,0x84,0xfe,0x4,0x24,0xf4,0x4,0x28,0x10,
++0x4,0x7e,0x45,0x75,0x55,0xff,0x83,0x7d,0x45,0x7d,0x45,0x7d,0x45,0x45,0x55,0x49,0x8,0x1c,0xe0,0x20,0x20,0x20,0x24,0xfe,0x20,0x20,0x10,0x10,0x28,0x4a,0xa6,0x12,
++0x4,0x7e,0x45,0x75,0x55,0xff,0x83,0x7d,0x45,0x7d,0x45,0x7d,0x45,0x45,0x56,0x48,0x8,0x1c,0xe0,0x0,0x4,0xfe,0x0,0x4,0x7e,0x44,0x44,0x44,0x44,0x44,0x7c,0x44,
++0x4,0x7e,0x44,0x74,0x54,0xff,0x82,0x7c,0x44,0x7f,0x44,0x7c,0x44,0x44,0x54,0x48,0x40,0x40,0x7c,0x84,0x88,0x50,0x20,0x50,0x8e,0x4,0xf8,0x88,0x88,0x88,0xf8,0x88,
++0x0,0x7d,0x45,0x75,0x55,0xff,0x83,0x7d,0x44,0x7f,0x44,0x7c,0x44,0x45,0x56,0x48,0x4,0xfe,0x24,0x24,0xfc,0x24,0x24,0xfc,0x20,0xfe,0x60,0x70,0xa8,0x26,0x24,0x20,
++0x0,0x7c,0x45,0x75,0x55,0xff,0x83,0x7d,0x45,0x7c,0x45,0x7f,0x44,0x44,0x54,0x48,0x40,0x84,0xfe,0x24,0x24,0xfc,0x24,0x44,0xfc,0xa0,0x24,0xfe,0x20,0x20,0x20,0x20,
++0x0,0x7d,0x44,0x74,0x55,0xfe,0x82,0x7d,0x44,0x7f,0x44,0x7c,0x44,0x44,0x54,0x49,0x20,0x24,0xa8,0x20,0xfe,0x20,0xa8,0x24,0x40,0xfe,0x48,0x88,0x70,0x50,0x8c,0x4,
++0x4,0x7e,0x45,0x75,0x54,0xfe,0x83,0x7c,0x44,0x7d,0x44,0x7c,0x44,0x44,0x54,0x48,0x40,0x20,0xfe,0x42,0x7c,0x88,0x50,0x20,0x50,0x8e,0xf8,0x88,0x88,0x88,0xf8,0x88,
++0x4,0x7e,0x45,0x75,0x54,0xff,0x82,0x7c,0x44,0x7c,0x44,0x7c,0x44,0x44,0x54,0x49,0x20,0x10,0xfe,0x2,0x48,0xfe,0x48,0xfc,0x94,0x94,0xa4,0xa4,0x50,0x52,0x92,0xe,
++0x4,0x7e,0x45,0x75,0x54,0xfe,0x82,0x7c,0x44,0x7c,0x44,0x7f,0x44,0x44,0x55,0x4a,0x40,0x20,0xfe,0x2,0x1c,0xe0,0x84,0xfe,0x88,0x88,0x88,0xfe,0x0,0x88,0x6,0x2,
++0x0,0x7d,0x45,0x75,0x55,0xfe,0x82,0x7d,0x47,0x7d,0x45,0x7d,0x44,0x47,0x54,0x48,0x4,0xfe,0x54,0x54,0xfc,0x84,0xfe,0x44,0xf4,0x54,0x54,0xf4,0x4c,0xfc,0x14,0x8,
++0x10,0x24,0x7e,0x55,0x54,0x7c,0x55,0x54,0x7c,0x10,0x19,0x28,0x2a,0x48,0x87,0x0,0x20,0x20,0x28,0xfc,0x20,0x24,0xfe,0x20,0x70,0xac,0x24,0x20,0x22,0x2,0xfe,0x0,
++0x10,0x24,0x7e,0x55,0x54,0x7c,0x54,0x54,0x7d,0x12,0x18,0x28,0x2a,0x48,0x87,0x0,0x50,0x48,0x40,0xfe,0x40,0x40,0xfc,0x84,0x28,0x10,0x2c,0xc4,0x2,0x2,0xfe,0x0,
++0x3f,0x20,0x20,0x3f,0x21,0x26,0x39,0x27,0x24,0x27,0x24,0x27,0x41,0x42,0x84,0x18,0xfc,0xa0,0x94,0xfe,0x40,0x30,0xe,0xf8,0x88,0xf8,0x88,0xf8,0x40,0x52,0x42,0x3e,
++0x10,0x25,0x7e,0x54,0x55,0x7d,0x55,0x55,0x7d,0x11,0x19,0x2d,0x29,0x48,0x87,0x0,0x8,0xfc,0x50,0x54,0xfe,0x54,0x54,0x54,0x54,0xac,0x4,0x4,0xc,0x2,0xfe,0x0,
++0x10,0x25,0x7e,0x54,0x54,0x7c,0x54,0x54,0x7c,0x10,0x18,0x2a,0x28,0x48,0x87,0x0,0x20,0x24,0xa8,0x20,0xf8,0x88,0xf8,0x88,0xf8,0x88,0x88,0xa8,0x92,0x2,0xfe,0x0,
++0x10,0x25,0x7f,0x55,0x55,0x7d,0x55,0x55,0x7d,0x11,0x19,0x2d,0x29,0x48,0x87,0x0,0x4,0xfe,0x4,0x54,0xfc,0x24,0xfc,0x44,0x44,0x74,0x4,0x14,0xa,0x2,0xfe,0x0,
++0x10,0x24,0x7f,0x54,0x55,0x7d,0x55,0x54,0x7d,0x11,0x19,0x2d,0x29,0x48,0x87,0x0,0x40,0x24,0xfe,0x50,0x24,0x54,0xfc,0x20,0xfc,0x44,0x54,0x74,0xc,0x2,0xfe,0x0,
++0x20,0x20,0x20,0x48,0x49,0xf2,0x27,0x4a,0xfb,0xa,0x13,0x12,0x22,0x42,0x83,0x2,0x40,0x40,0xa0,0xa0,0x90,0x48,0xff,0x8,0xf8,0x8,0xf8,0x88,0x50,0x20,0x1e,0x4,
++0x3f,0x20,0x3f,0x21,0x26,0x38,0x21,0x26,0x2f,0x34,0x27,0x24,0x47,0x44,0x85,0x6,0xfc,0x90,0xfc,0x40,0x30,0x8e,0x44,0xb0,0xf8,0x16,0xf0,0x10,0xf4,0x48,0x30,0xc,
++0x7f,0x10,0x1e,0x23,0x54,0x9,0x32,0x4,0x1f,0x28,0xcf,0x8,0xf,0x8,0xa,0xc,0x20,0x50,0x98,0x26,0x48,0x10,0xa4,0x48,0xf0,0x2e,0xe4,0x20,0xf0,0xa0,0x60,0x18,
++0x7c,0x44,0x7d,0x1,0xff,0x21,0x7d,0x5,0x1a,0x5,0xf,0x39,0xcf,0xa,0x9,0xc,0x38,0x20,0xfc,0x24,0xf8,0x24,0x7c,0x50,0x9c,0x40,0xf0,0x2e,0xe4,0x20,0xc0,0x30,
++0x1,0x7f,0x8,0x12,0x7d,0xa,0x7c,0x9,0x32,0x45,0xf,0x39,0xcf,0xa,0x9,0xc,0x4,0xfe,0x90,0xfc,0x90,0xfc,0x90,0x9e,0x80,0x40,0xf0,0x2e,0xe4,0x20,0xc0,0x30,
++0x2,0x3f,0x20,0x24,0x3e,0x20,0x24,0x3e,0x20,0x22,0xff,0x10,0x10,0x20,0x7f,0x1,0x4,0x4,0x8,0x8,0x10,0x24,0x44,0x88,0x10,0x22,0x42,0x4,0x8,0x10,0x20,0x40,
++0x1,0x3f,0x20,0x3f,0x20,0x3f,0x20,0xff,0x12,0x3f,0x0,0xff,0x4,0x4,0x18,0x60,0x4,0x88,0x10,0x24,0x48,0x10,0x24,0x88,0x10,0x60,0x4,0xfe,0x40,0x42,0x42,0x3e,
++0x12,0x14,0x18,0x12,0xff,0x10,0x22,0x7f,0x0,0x1f,0x1,0xf,0x1,0x7f,0x1,0x0,0x8,0x10,0x64,0x8,0x72,0x4,0x18,0x60,0x18,0xe0,0x0,0xf0,0x0,0xfa,0x2,0xfe,
++0x12,0x14,0x18,0x12,0xff,0x10,0x22,0x7f,0x1,0x1f,0x11,0x1f,0x11,0xff,0x10,0x10,0x8,0x10,0x64,0x8,0x72,0x4,0x18,0x60,0x10,0xf8,0x10,0xf0,0x14,0xfe,0x10,0x30,
++0x12,0x14,0x18,0xfe,0x24,0x7e,0x0,0x3f,0x4,0x18,0x60,0x1f,0x10,0x10,0x1f,0x10,0x18,0xe0,0x18,0xe4,0x8,0xf0,0x0,0xf8,0x8,0x48,0x30,0xf0,0x10,0x10,0xf0,0x10,
++0x12,0x14,0x18,0xfe,0x24,0x7e,0x1,0xff,0x1,0x1,0x3f,0x0,0x1f,0x10,0x10,0x1f,0x18,0xe0,0x18,0xe4,0x8,0xf0,0x4,0xfe,0x0,0x10,0xf8,0x0,0xf0,0x10,0x10,0xf0,
++0x12,0x14,0x18,0x12,0xff,0x10,0x22,0x7f,0x4,0x24,0x27,0x24,0x24,0x2f,0xf0,0x40,0x8,0x10,0x64,0x8,0x72,0x4,0x18,0x60,0x40,0x44,0x48,0x70,0x40,0x42,0x3e,0x0,
++0x12,0x14,0x18,0x12,0xff,0x10,0x22,0x7f,0x4,0x8,0x17,0x30,0xd1,0x12,0x14,0x10,0x8,0x10,0x64,0x8,0x72,0x4,0x18,0x60,0x40,0x44,0xfe,0xe0,0x50,0x4e,0x44,0x40,
++0x12,0x14,0x18,0xfe,0x24,0x7e,0x11,0x9,0x3f,0x2,0x7f,0x8,0x3f,0xc8,0x8,0x7,0x8,0xf0,0x8,0xf0,0x4,0xf8,0x10,0x20,0xf8,0x0,0xfc,0x20,0xd8,0x46,0xd0,0xf0,
++0x12,0x14,0x18,0xfe,0x24,0x7e,0x0,0x6,0x78,0x8,0xff,0x18,0x2c,0xca,0x8,0x9,0x18,0xe0,0x18,0xe4,0x8,0xf0,0x20,0x24,0xac,0xb0,0x20,0x50,0x50,0x88,0x86,0x4,
++0x12,0x14,0x18,0xfe,0x24,0x7e,0x1,0x7f,0x40,0x8f,0x8,0xf,0x8,0xff,0x8,0x30,0x18,0xe0,0x18,0xe4,0x8,0xf0,0x0,0xfe,0x62,0x84,0x20,0xf0,0x44,0xfe,0x20,0x18,
++0x12,0x14,0x18,0xfe,0x24,0x7e,0x0,0x1f,0x12,0xff,0x8,0xf,0x5,0x18,0x6c,0x8,0x18,0xe0,0x18,0xe4,0x8,0xf0,0x0,0xf0,0x94,0xfe,0x20,0xf0,0x20,0xc0,0x3c,0x8,
++0x12,0x14,0x18,0xfe,0x24,0x7e,0x9,0x1f,0x14,0x13,0x14,0x1f,0x22,0x3b,0x22,0x3b,0x18,0xe0,0x18,0xe4,0x8,0xf0,0x20,0xf0,0x50,0x90,0x50,0xf0,0x20,0xa2,0x22,0x9e,
++0x1,0x0,0x3f,0x22,0x3f,0x22,0x27,0x2a,0x32,0x21,0x22,0x24,0x49,0x42,0x87,0x0,0x0,0x84,0xfe,0x10,0xfc,0x10,0x38,0xd6,0x10,0x0,0x40,0x80,0x10,0x8,0xfc,0x4,
++0x1,0x0,0x3f,0x22,0x3f,0x26,0x2b,0x32,0x3f,0x20,0x2f,0x20,0x5f,0x40,0x80,0x0,0x0,0x84,0xfe,0x10,0xfc,0x38,0x56,0x90,0xf0,0x80,0xf8,0x80,0xf8,0x82,0x82,0xfe,
++0x1,0x0,0x3f,0x22,0x3f,0x22,0x27,0x2a,0x32,0x27,0x21,0x22,0x4f,0x42,0x84,0x9,0x0,0x84,0xfe,0x10,0xfc,0x10,0x38,0x56,0x90,0x20,0xc0,0x10,0xf8,0xa0,0x98,0x88,
++0x1,0x3f,0x24,0x3f,0x24,0x3f,0x28,0x2f,0x28,0x2f,0x20,0x27,0x44,0x44,0x84,0x18,0x0,0xfc,0x40,0xf8,0x48,0xf8,0x40,0x78,0x44,0x3c,0x20,0xf8,0x20,0x22,0x22,0x1e,
++0x1,0x3f,0x24,0x3f,0x24,0x3f,0x2a,0x2c,0x2f,0x20,0x27,0x20,0x5f,0x42,0x9c,0x0,0x0,0xfe,0x40,0xf8,0x48,0xf8,0x50,0x64,0x7c,0x30,0xc0,0x88,0xfc,0xa0,0x9c,0x80,
++0x1,0x3f,0x24,0x3f,0x24,0x3f,0x28,0x2f,0x28,0x2f,0x20,0x3f,0x40,0x4f,0x80,0x3f,0x0,0xfc,0x40,0xf8,0x48,0xf8,0x40,0x78,0x44,0x3c,0x88,0xfc,0x80,0xf8,0x80,0xfe,
++0x1,0x3f,0x24,0x3f,0x24,0x3f,0x28,0x2f,0x28,0x2f,0x24,0x22,0x5f,0x42,0x9c,0x0,0x0,0xfc,0x40,0xf8,0x48,0xf8,0x40,0x78,0x44,0x3c,0x90,0xa0,0xfc,0xa0,0x9c,0x80,
++0x10,0xa,0x7f,0x54,0x54,0x7f,0x55,0x55,0x7f,0x44,0x55,0x5e,0x54,0x5f,0x94,0x1,0x48,0x48,0xfc,0x48,0x48,0x78,0x48,0x48,0x78,0x48,0x48,0xfe,0x0,0x48,0x86,0x2,
++0x1,0x3f,0x24,0x3f,0x24,0x3f,0x2a,0x2c,0x2e,0x21,0x27,0x38,0x4f,0x44,0x82,0x1f,0x0,0xfc,0x40,0xf8,0x48,0xf8,0x50,0x64,0xbc,0x40,0xf0,0x8e,0xf8,0x90,0xa0,0xfc,
++0x1,0x3f,0x24,0x3f,0x24,0x3f,0x2a,0x2c,0x2f,0x24,0x2f,0x3c,0x4a,0x4f,0x84,0x39,0x0,0xfc,0x40,0xf8,0x48,0xf8,0x50,0x64,0x3c,0x8,0x88,0xfe,0x88,0xa8,0x88,0x98,
++0x10,0xa,0x7f,0x54,0x54,0x7f,0x55,0x55,0x7f,0x44,0x55,0x5e,0x54,0x5f,0x94,0x1,0x10,0x54,0x10,0xfe,0x10,0x54,0x10,0x48,0x48,0xfe,0x28,0xa8,0x5e,0x48,0x88,0x8,
++0x8,0x10,0x30,0x5f,0x90,0x10,0x1f,0x19,0x15,0x1f,0x1,0x3f,0x1,0xff,0x24,0x42,0xa0,0x90,0xfc,0x40,0x32,0xe,0xf0,0x30,0x50,0xf0,0x0,0xf8,0x0,0xfe,0x88,0x44,
++0x4,0x7e,0x55,0x55,0x7d,0x55,0x55,0x7c,0x10,0x7d,0x11,0xff,0x1,0xab,0xab,0x0,0x20,0x20,0x24,0x24,0x24,0x24,0xfc,0x20,0x20,0x24,0x24,0x24,0x24,0x24,0xfc,0x4,
++0x4,0x7e,0x54,0x54,0x7d,0x55,0x57,0x7c,0x10,0x7c,0x11,0xff,0x1,0xaa,0xaa,0x0,0x10,0x90,0x90,0x94,0x3e,0x54,0xd4,0x94,0x94,0x94,0x14,0x54,0xd4,0x24,0x24,0x4c,
++0x4,0x7e,0x54,0x57,0x7c,0x54,0x55,0x7c,0x10,0x7c,0x10,0xfe,0x0,0xaa,0xaa,0x0,0x20,0x20,0x24,0xfe,0x20,0x28,0xfc,0x0,0x8,0xfc,0x88,0x88,0x88,0x88,0xf8,0x88,
++0x4,0x7e,0x54,0x54,0x7d,0x54,0x54,0x7d,0x10,0x7c,0x10,0xff,0x0,0xaa,0xaa,0x1,0x20,0x20,0x7c,0x84,0x48,0x30,0x60,0x90,0x3e,0x42,0xc4,0x28,0x10,0x20,0x40,0x80,
++0x4,0x7e,0x54,0x54,0x7d,0x54,0x55,0x7e,0x10,0x7c,0x11,0xfe,0x0,0xaa,0xaa,0x1,0x20,0x20,0x40,0x88,0xfc,0x88,0x6,0x82,0xf8,0x88,0x88,0x50,0x20,0x50,0x8e,0x4,
++0x4,0x7e,0x55,0x54,0x7c,0x57,0x54,0x7c,0x11,0x7c,0x13,0xfc,0x0,0xaa,0xaa,0x1,0x20,0x28,0xfc,0x20,0x20,0xfe,0x92,0x54,0x10,0x94,0xfe,0x20,0x20,0x58,0x86,0x2,
++0x3e,0x8,0xfe,0x1c,0x2a,0x48,0x1f,0x19,0x15,0x1f,0x1,0x3f,0x1,0xff,0x24,0x44,0x44,0x7e,0xa4,0x24,0x54,0x88,0xf0,0x30,0x50,0xf0,0x0,0xf8,0x0,0xfe,0x48,0x44,
++0x4,0x7e,0x54,0x57,0x7c,0x54,0x54,0x7c,0x10,0x7c,0x10,0xfe,0x1,0xaa,0xaa,0x0,0x40,0x20,0x4,0xfe,0x0,0xf8,0x88,0x88,0x88,0xf8,0x20,0xa8,0x26,0x22,0xa0,0x40,
++0x4,0x7e,0x54,0x55,0x7c,0x54,0x57,0x7c,0x10,0x7d,0x10,0xfe,0x0,0xaa,0xaa,0x1,0x20,0x40,0x88,0xfc,0x20,0x24,0xfe,0x50,0x98,0x26,0xc8,0x30,0xc4,0x18,0x60,0x80,
++0x4,0x7e,0x55,0x54,0x7c,0x54,0x57,0x7c,0x10,0x7c,0x10,0xfe,0x0,0xaa,0xaa,0x0,0x40,0x28,0xfc,0x0,0x88,0x50,0xfe,0x8,0xfc,0x88,0x88,0xf8,0x88,0x88,0xf8,0x88,
++0x12,0x6f,0x42,0x6e,0x42,0x7e,0x1,0x54,0x7c,0x54,0x7c,0x54,0x54,0x7d,0x52,0x1,0x10,0x50,0x50,0x50,0x88,0x88,0x6,0xf8,0x48,0x48,0x48,0x48,0x48,0x88,0xa8,0x10,
++0x12,0x6f,0x42,0x6e,0x42,0x7e,0x0,0x54,0x7c,0x54,0x7c,0x54,0x54,0x7d,0x52,0x0,0x10,0x10,0x10,0x10,0xfe,0x92,0x92,0x92,0x92,0xfe,0x92,0x92,0x92,0x92,0xfe,0x82,
++0x12,0x6f,0x42,0x6e,0x42,0x7e,0x0,0x55,0x7c,0x54,0x7c,0x54,0x54,0x7d,0x52,0x0,0x8,0xfc,0x40,0x48,0xfc,0x48,0x48,0xfe,0x0,0xfc,0x84,0x84,0x84,0x84,0xfc,0x84,
++0x12,0x6f,0x42,0x6e,0x42,0x7e,0x0,0x55,0x7d,0x56,0x7f,0x54,0x54,0x7e,0x52,0x1,0x4,0xfe,0x84,0xfc,0x84,0xfc,0x20,0xfe,0x22,0x24,0xfe,0x48,0x88,0x70,0x58,0x84,
++0x12,0x6f,0x42,0x6e,0x42,0x7e,0x1,0x54,0x7c,0x55,0x7c,0x57,0x54,0x7d,0x52,0x1,0x1c,0xe0,0xa4,0xa8,0x50,0x84,0xf8,0x20,0x48,0xfc,0x20,0xfe,0x20,0x50,0x4e,0x84,
++0x10,0x3e,0x32,0x2a,0x3e,0x0,0x7f,0x49,0x7f,0x49,0x7f,0x0,0xff,0x22,0x22,0x43,0x40,0x40,0x40,0x48,0xfc,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0x4a,0x8a,0x86,0x0,
++0x10,0x3e,0x32,0x2a,0x3e,0x0,0x7f,0x49,0x7f,0x49,0x7f,0x0,0xff,0x22,0x22,0x42,0x0,0x8,0xfc,0x10,0x10,0x10,0x14,0xfe,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,
++0x10,0x3e,0x32,0x2a,0x3e,0x0,0x7f,0x49,0x7f,0x49,0x7f,0x0,0xff,0x22,0x22,0x42,0x10,0x14,0xfe,0x10,0x38,0x56,0x90,0x7c,0x44,0x7c,0x44,0x7c,0x44,0x0,0xfe,0x0};
+diff -Nur c3000_pre/linux/drivers/video/font_jis16.h c3000_work/linux/drivers/video/font_jis16.h
+--- c3000_pre/linux/drivers/video/font_jis16.h 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/drivers/video/font_jis16.h 2004-12-06 09:25:01.000000000 +0900
+@@ -0,0 +1,30231 @@
++#define max_jis16 241824
++unsigned char font_jis16[max_jis16] = {
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x40, 0x30, 0x18, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x30, 0x48, 0x48, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x60, 0x60, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x07,
++ 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x04, 0x08, 0x0c, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x80, 0xc0, 0x60, 0x60, 0x60, 0xc0, 0x80,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
++ 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01,
++ 0x01, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00,
++ 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00,
++ 0x10, 0x48, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x30, 0x48, 0x48, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40,
++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x90, 0x40, 0x00, 0x80, 0x40,
++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00,
++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x90, 0x40, 0x00, 0x80, 0xc0,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x08,
++ 0x08, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x80,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x08, 0x10, 0x60, 0x0f,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x0c, 0xe0,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x03, 0x04,
++ 0x04, 0x08, 0x12, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x20,
++ 0x20, 0x40, 0x80, 0x80, 0x40, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x09,
++ 0x12, 0x14, 0x18, 0x10, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x10, 0x20, 0x40, 0x80, 0x00,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x18, 0x20, 0x20, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x20, 0x20, 0x18, 0x07, 0x00, 0x00,
++ 0x00, 0xc0, 0x30, 0x08, 0x08, 0x04, 0x04, 0x04,
++ 0x04, 0x04, 0x08, 0x08, 0x30, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x3f,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02,
++ 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00,
++ 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x22, 0x41,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10,
++ 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
++ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x18, 0x20, 0x30, 0x38, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x20, 0x70, 0x30, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x98, 0x20, 0x30, 0xb8, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x22, 0x77, 0x33, 0x11, 0x66, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x10, 0x20, 0x60, 0x40, 0xc0, 0xc0, 0xc0,
++ 0xc0, 0x40, 0x60, 0x20, 0x10, 0x08, 0x00, 0x00,
++ 0x40, 0x20, 0x10, 0x18, 0x08, 0x0c, 0x0c, 0x0c,
++ 0x0c, 0x08, 0x18, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x20, 0x10, 0x08, 0x00, 0x00,
++ 0x40, 0x20, 0x10, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xf8, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
++ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0x00, 0x00,
++ 0x7c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x18, 0x20, 0x60, 0x60, 0x60, 0x40, 0x80, 0x40,
++ 0x60, 0x60, 0x60, 0x60, 0x20, 0x18, 0x00, 0x00,
++ 0x60, 0x10, 0x18, 0x18, 0x18, 0x08, 0x06, 0x08,
++ 0x18, 0x18, 0x18, 0x18, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x02,
++ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x00, 0x00,
++ 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01,
++ 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02,
++ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0x90, 0x20, 0x20, 0x40, 0x40,
++ 0x20, 0x20, 0x90, 0x90, 0x48, 0x48, 0x00, 0x00,
++ 0x48, 0x48, 0x24, 0x24, 0x12, 0x12, 0x09, 0x09,
++ 0x12, 0x12, 0x24, 0x24, 0x48, 0x48, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
++ 0x02, 0x02, 0x02, 0x02, 0x02, 0x7e, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
++ 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00,
++ 0xf8, 0x08, 0xf8, 0x80, 0x80, 0x80, 0x80, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x07, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
++ 0x05, 0x05, 0x05, 0x7d, 0x41, 0x7f, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xf8, 0xf0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0,
++ 0xc0, 0xc0, 0xe0, 0xe0, 0xf0, 0xf8, 0x00, 0x00,
++ 0x7c, 0x3c, 0x1c, 0x1c, 0x0c, 0x0c, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x1c, 0x1c, 0x3c, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x3f, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x01, 0x01, 0x3f, 0x01, 0x01,
++ 0x01, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x02,
++ 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x80,
++ 0x40, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x3f, 0x00,
++ 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xf8, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00,
++ 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x01, 0x01, 0x01,
++ 0x3f, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x80, 0x80, 0xf8, 0x00, 0x00, 0x00,
++ 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x03, 0x04, 0x18, 0x20, 0x18,
++ 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x60, 0x10, 0x00, 0x00, 0x00,
++ 0x20, 0x18, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x04, 0x18, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x10, 0x60,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x0c, 0x30, 0x0c, 0x03, 0x00,
++ 0x00, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
++ 0x30, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x03, 0x0c,
++ 0x30, 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x30, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1c, 0x36, 0x23, 0x23,
++ 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0x88, 0x88,
++ 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x22,
++ 0x41, 0x41, 0x41, 0x22, 0x1c, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x18, 0x28, 0x48, 0x88, 0x08, 0x08,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x04, 0x08, 0x08, 0x08, 0x04, 0x03,
++ 0x01, 0x01, 0x1f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x20, 0x20, 0x20, 0x40, 0x80,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x18, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x18, 0x18, 0x30, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1b, 0x1b, 0x36, 0x24, 0x48, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x30, 0x48, 0x49, 0x33, 0x06, 0x06, 0x06,
++ 0x06, 0x06, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xe8, 0x18, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x10, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x30, 0x18, 0x0c, 0x3f, 0x06, 0x03,
++ 0x3f, 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x10, 0x20, 0x40, 0xf0, 0x80, 0x00,
++ 0xf0, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x07, 0x09, 0x11, 0x19, 0x0f, 0x03,
++ 0x01, 0x19, 0x19, 0x09, 0x07, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x20, 0x30, 0x30, 0x00, 0xc0,
++ 0x60, 0x30, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x03, 0x05, 0x09, 0x19, 0x19,
++ 0x1a, 0x0a, 0x06, 0x07, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x80, 0x80, 0x80, 0x40, 0x60, 0x60, 0x00,
++ 0x00, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x02, 0x02, 0x06, 0x06, 0x3f,
++ 0x06, 0x36, 0x4c, 0x4f, 0x39, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x20, 0x30, 0x20, 0x00, 0x00, 0xe0,
++ 0x00, 0x00, 0x08, 0xf0, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x18, 0x24, 0x66, 0x66, 0x24, 0x19, 0x02,
++ 0x04, 0x09, 0x11, 0x20, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x60,
++ 0x90, 0x98, 0x98, 0x90, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x02, 0x02, 0x02, 0x1f, 0x04, 0x04, 0x04,
++ 0x04, 0x3f, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x20, 0x20, 0x20, 0xf8, 0x40, 0x40, 0x40,
++ 0x40, 0xf0, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x07, 0x08, 0x18, 0x19, 0x0e, 0x0c, 0x16,
++ 0x33, 0x31, 0x30, 0x19, 0x0e, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x78, 0x30,
++ 0x20, 0xc0, 0xc0, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x03, 0x19, 0x1d, 0x03, 0x03,
++ 0x1d, 0x19, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x30, 0x70, 0x80, 0x80,
++ 0x70, 0x30, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x10, 0x23, 0x24, 0x44, 0x48,
++ 0x49, 0x27, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x10, 0xc8, 0xc8, 0xc8, 0x88,
++ 0x90, 0x60, 0x08, 0x30, 0xc0, 0x00, 0x00, 0x00,
++ 0x03, 0x04, 0x04, 0x06, 0x03, 0x03, 0x04, 0x06,
++ 0x03, 0x01, 0x00, 0x04, 0x04, 0x03, 0x00, 0x00,
++ 0x80, 0x40, 0x40, 0x00, 0x00, 0x80, 0xc0, 0x40,
++ 0x80, 0x80, 0xc0, 0x40, 0x40, 0x80, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x02, 0x02, 0x7c, 0x30, 0x0c,
++ 0x04, 0x09, 0x0a, 0x1c, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0x7c, 0x18, 0x60,
++ 0x40, 0x20, 0xa0, 0x70, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x03, 0x03, 0x7f, 0x3f, 0x0f,
++ 0x07, 0x0f, 0x0e, 0x1c, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0xfc, 0xf8, 0xe0,
++ 0xc0, 0xe0, 0xe0, 0x70, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x0c, 0x10, 0x10, 0x20, 0x20,
++ 0x20, 0x10, 0x10, 0x0c, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x60, 0x10, 0x10, 0x08, 0x08,
++ 0x08, 0x10, 0x10, 0x60, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x0f, 0x1f, 0x1f, 0x3f, 0x3f,
++ 0x3f, 0x1f, 0x1f, 0x0f, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8,
++ 0xf8, 0xf0, 0xf0, 0xe0, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x0c, 0x13, 0x14, 0x28, 0x28,
++ 0x28, 0x14, 0x13, 0x0c, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x60, 0x90, 0x50, 0x28, 0x28,
++ 0x28, 0x50, 0x90, 0x60, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40,
++ 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04,
++ 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f,
++ 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc,
++ 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
++ 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8,
++ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x08,
++ 0x08, 0x10, 0x10, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x20,
++ 0x20, 0x10, 0x10, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x0f,
++ 0x0f, 0x1f, 0x1f, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xe0,
++ 0xe0, 0xf0, 0xf0, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x10, 0x10, 0x08, 0x08, 0x04, 0x04,
++ 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x1f, 0x1f, 0x0f, 0x0f, 0x07, 0x07,
++ 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0, 0xc0,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x21, 0x13, 0x09, 0x04, 0x12, 0x39,
++ 0x12, 0x04, 0x09, 0x13, 0x21, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x90, 0x20, 0x40, 0x90, 0x38,
++ 0x90, 0x40, 0x20, 0x90, 0x08, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x3f, 0x00, 0x00, 0x7f, 0x7f, 0x03,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0xf0, 0x00, 0x00, 0xf8, 0xf8, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x7f, 0x00,
++ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0xf8, 0x60,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x02, 0x04, 0x18, 0x7f, 0x18,
++ 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x03, 0x03, 0x05, 0x09, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x20, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x09,
++ 0x05, 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
++ 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x00, 0x00,
++ 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00,
++ 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x0c, 0x10, 0x20, 0x3f, 0x20,
++ 0x10, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3f, 0x00,
++ 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x20, 0x10, 0xf0, 0x10,
++ 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x10, 0x20, 0x20, 0x20, 0x10,
++ 0x0f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xf0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x20, 0x10, 0x10, 0x10, 0x20,
++ 0xc0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x0c, 0x10, 0x20, 0x20, 0x20,
++ 0x20, 0x10, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x20, 0x10, 0x10, 0x10,
++ 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x10, 0x10, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x07, 0x08, 0x10, 0x10, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x20, 0x20, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04,
++ 0x08, 0x08, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40,
++ 0x20, 0x20, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x10, 0x08, 0x08, 0x04, 0x04,
++ 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x7f,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x40, 0x20, 0xf0, 0x08, 0xf0,
++ 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x08, 0x10, 0x3f, 0x40, 0x3f,
++ 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x40, 0x20, 0xf0, 0x08, 0xf0,
++ 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x20, 0x10, 0x1f, 0x08, 0x08, 0x04,
++ 0x04, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0x10, 0xf0, 0x20, 0x20, 0x40,
++ 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,
++ 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0x20, 0xe0, 0x20,
++ 0x20, 0x20, 0x20, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02,
++ 0x04, 0x08, 0x10, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x30, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x02, 0x00, 0x00, 0x03, 0x06, 0x04,
++ 0x0c, 0x0c, 0x0c, 0x05, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x60, 0x20, 0x20, 0xa0, 0x60, 0x60,
++ 0x60, 0x40, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x1f, 0x18, 0x08, 0x0c, 0x04,
++ 0x06, 0x02, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0xf0, 0x10, 0x20, 0x20, 0x40,
++ 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xf0, 0x00,
++ 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x1c, 0x08, 0x3f, 0x00, 0x00,
++ 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
++ 0xf0, 0x40, 0xe0, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x02, 0x04, 0x08, 0x11, 0x22, 0x11,
++ 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x80, 0x40, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x22, 0x11, 0x08, 0x04, 0x02, 0x01, 0x02,
++ 0x04, 0x08, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x20,
++ 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
++ 0x22, 0x74, 0x1c, 0x0c, 0x04, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x10, 0x21, 0x21,
++ 0x12, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x60, 0x90, 0x08, 0x08,
++ 0x10, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x10, 0x10,
++ 0x09, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x30, 0x40, 0x80, 0x80,
++ 0x40, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x38, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x38, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x02, 0x02, 0x03, 0x03, 0x01, 0x01,
++ 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00,
++ 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
++ 0xc0, 0xc0, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x06, 0x0e, 0x11, 0x11, 0x19, 0x19, 0x0c, 0x0c,
++ 0x06, 0x06, 0x02, 0x02, 0x1d, 0x19, 0x00, 0x00,
++ 0x60, 0xe0, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0,
++ 0x60, 0x60, 0x20, 0x20, 0xc0, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x04, 0x04, 0x03, 0x01, 0x03, 0x03, 0x04,
++ 0x04, 0x08, 0x0f, 0x10, 0x38, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0xc0,
++ 0xc0, 0x60, 0xe0, 0x30, 0x78, 0x00, 0x00, 0x00,
++ 0x00, 0x18, 0x24, 0x66, 0x66, 0x25, 0x1a, 0x03,
++ 0x06, 0x0e, 0x16, 0x12, 0x21, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x10,
++ 0xa8, 0xec, 0xec, 0xa8, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x04, 0x07, 0x1f, 0x1c, 0x04, 0x04,
++ 0x07, 0x1f, 0x1c, 0x04, 0x04, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0xe0, 0xe0, 0x80, 0x80, 0x80, 0xe0,
++ 0xe0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x06,
++ 0x04, 0x04, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60,
++ 0x60, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x07, 0x0f, 0x0f, 0x06, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0xc0, 0x60, 0x20, 0x30, 0x10, 0x10,
++ 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x03, 0x01, 0x09, 0x1f, 0x09, 0x03, 0x03,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x80, 0x00, 0x20, 0xf0, 0x20, 0x80, 0x80,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x03, 0x09, 0x1f, 0x09, 0x03, 0x01, 0x01,
++ 0x03, 0x09, 0x1f, 0x09, 0x03, 0x01, 0x00, 0x00,
++ 0x00, 0x80, 0x20, 0xf0, 0x20, 0x80, 0x00, 0x00,
++ 0x80, 0x20, 0xf0, 0x20, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x07, 0x07, 0x07, 0x03, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x18, 0x20, 0x20, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x20, 0x20, 0x18, 0x07, 0x00, 0x00,
++ 0x00, 0xc0, 0x30, 0x08, 0x08, 0x04, 0x04, 0x04,
++ 0x04, 0x04, 0x08, 0x08, 0x30, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x03, 0x0f, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x08, 0x18, 0x1c, 0x08, 0x00, 0x01,
++ 0x02, 0x04, 0x0f, 0x1f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0xc0, 0x60, 0x60, 0xc0, 0x80, 0x00,
++ 0x00, 0x20, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x08, 0x18, 0x18, 0x00, 0x03, 0x00,
++ 0x18, 0x18, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0xc0, 0x60, 0x60, 0xc0, 0x80, 0x40,
++ 0x60, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x02, 0x02, 0x04, 0x08, 0x18,
++ 0x1f, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
++ 0xf0, 0xc0, 0xc0, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x0f, 0x08, 0x08, 0x0f, 0x00, 0x00,
++ 0x00, 0x18, 0x18, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0x00, 0x00, 0x80, 0xc0, 0x60,
++ 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x04, 0x0c, 0x08, 0x1b, 0x1c, 0x18,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x60, 0x60, 0x00, 0xc0, 0x60, 0x30,
++ 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x0f, 0x10, 0x00, 0x00, 0x01, 0x01,
++ 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0xe0, 0x40, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x08, 0x18, 0x1c, 0x0e, 0x07, 0x0d,
++ 0x18, 0x18, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x60, 0x60, 0xc0, 0x80, 0xc0,
++ 0xe0, 0x60, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x18, 0x18, 0x0c, 0x07,
++ 0x00, 0x18, 0x18, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x60, 0x60, 0x60, 0xe0, 0x60,
++ 0x60, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x03, 0x03, 0x04, 0x04, 0x08,
++ 0x0f, 0x10, 0x10, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0x60,
++ 0xe0, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x30, 0x60, 0xc0, 0x30,
++ 0x18, 0x18, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xd0, 0x30, 0x10, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x10, 0x00, 0x40, 0xc0, 0x40,
++ 0x00, 0x08, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x10, 0x00, 0x40, 0xc0, 0x40,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xd0, 0x30, 0x10, 0x00, 0x00, 0xf8, 0x30,
++ 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x30, 0x30, 0x30, 0x30, 0xf0, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
++ 0x38, 0x30, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
++ 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x19, 0x1a, 0x1c,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x20, 0x40, 0x80, 0x80, 0xc0, 0xc0,
++ 0x60, 0x60, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x18, 0x1c, 0x1c, 0x16, 0x16, 0x17,
++ 0x13, 0x12, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x30, 0x70, 0x70, 0xb0, 0xb0, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x18, 0x1c, 0x16, 0x16, 0x13, 0x11,
++ 0x11, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0xa0,
++ 0xa0, 0xe0, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x30, 0x60, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30,
++ 0x33, 0x1c, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0xb0, 0x60, 0xe0, 0x18, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x30, 0x60, 0x80, 0xc0,
++ 0x60, 0x60, 0x30, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x08, 0x18, 0x1c, 0x0f, 0x03, 0x00,
++ 0x10, 0x18, 0x1c, 0x13, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xa0, 0x60, 0x20, 0x00, 0x00, 0xc0, 0xe0,
++ 0x30, 0x30, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x23, 0x43, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06,
++ 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3b, 0x19, 0x19, 0x19, 0x0d, 0x0e, 0x0e,
++ 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xb8, 0x90, 0x90, 0x90, 0xd0, 0xe0, 0xe0,
++ 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x0c, 0x06, 0x03, 0x03, 0x03,
++ 0x04, 0x08, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x20, 0x40, 0x80, 0x00, 0x00, 0x80,
++ 0xc0, 0x60, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x0c, 0x06, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x20, 0x01, 0x01, 0x03, 0x06,
++ 0x06, 0x0c, 0x18, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x60, 0xc0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x08, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x0c, 0x03,
++ 0x0c, 0x18, 0x18, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x60, 0xe0,
++ 0x60, 0x60, 0xe0, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1c, 0x0c, 0x0c, 0x0d, 0x0e, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0e, 0x1d, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x30, 0x30,
++ 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x18, 0x18,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x20, 0x00,
++ 0x00, 0x20, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x18, 0x18,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x60, 0x60, 0x60, 0xe0, 0x60, 0x60,
++ 0x60, 0x60, 0xe0, 0x70, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x18, 0x1f,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x30, 0xf0,
++ 0x00, 0x10, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x02, 0x06, 0x06, 0x1f, 0x06, 0x06,
++ 0x06, 0x06, 0x06, 0x1f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x60, 0x60, 0x00, 0xe0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x08, 0x08,
++ 0x07, 0x0c, 0x0f, 0x18, 0x08, 0x07, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0xc0, 0xc0, 0x80,
++ 0x00, 0x00, 0xc0, 0xe0, 0x20, 0xc0, 0x00, 0x00,
++ 0x00, 0x1c, 0x0c, 0x0c, 0x0d, 0x0e, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x03, 0x01, 0x00, 0x0f, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x03, 0x01, 0x00, 0x0f, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x19, 0x19, 0x0e, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0d, 0x0e,
++ 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x70, 0x40, 0x80, 0xc0, 0xc0,
++ 0x60, 0x60, 0x30, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x76, 0x3b, 0x33, 0x33,
++ 0x33, 0x33, 0x33, 0x7b, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0xb8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1d, 0x0e, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x18, 0x18,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x30, 0x30,
++ 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1d, 0x0e, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0e, 0x0d, 0x0c, 0x1e, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x30, 0x30,
++ 0x30, 0x30, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x18, 0x18,
++ 0x18, 0x18, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x70, 0xe0, 0x60, 0x60,
++ 0x60, 0x60, 0xe0, 0x60, 0x60, 0xf0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1d, 0x0e, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x60, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x18, 0x1c, 0x0f,
++ 0x03, 0x10, 0x18, 0x17, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x00, 0x00,
++ 0xc0, 0xe0, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x02, 0x06, 0x06, 0x1f, 0x06, 0x06,
++ 0x06, 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x70, 0x98, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3e, 0x18, 0x0c, 0x0c,
++ 0x06, 0x06, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x70, 0x20, 0x40, 0x40,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3d, 0x19, 0x19, 0x0e,
++ 0x0e, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xb8, 0x90, 0x90, 0xd0,
++ 0xe0, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c, 0x06, 0x03,
++ 0x03, 0x04, 0x08, 0x1c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x70, 0x20, 0x40, 0x80,
++ 0x80, 0xc0, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x0c, 0x06, 0x06,
++ 0x03, 0x03, 0x01, 0x19, 0x19, 0x0e, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x70, 0x20, 0x20, 0x40,
++ 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x10, 0x01, 0x03,
++ 0x06, 0x0c, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0xc0, 0x80, 0x00,
++ 0x00, 0x00, 0x20, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x04, 0x02, 0x13, 0x0e, 0x04,
++ 0x07, 0x0d, 0x16, 0x26, 0x2a, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80,
++ 0xe0, 0x10, 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00,
++ 0x04, 0x02, 0x02, 0x1f, 0x04, 0x04, 0x07, 0x0d,
++ 0x15, 0x22, 0x26, 0x2a, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x00, 0x80, 0x80, 0xe0, 0x10,
++ 0x08, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,
++ 0x10, 0x10, 0x0a, 0x0c, 0x04, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20,
++ 0x10, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x40, 0x20, 0x20, 0x20, 0x22,
++ 0x24, 0x14, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x08, 0x08,
++ 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x13,
++ 0x0c, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80,
++ 0x40, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x02, 0x01, 0x00, 0x00, 0x03, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
++ 0x00, 0xc0, 0x00, 0x00, 0xc0, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01,
++ 0x0e, 0x01, 0x02, 0x07, 0x09, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xc0,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
++ 0x04, 0x03, 0x00, 0x00, 0x11, 0x0e, 0x01, 0x02,
++ 0x04, 0x0e, 0x11, 0x21, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x00, 0x00, 0xc0, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x0c, 0x38,
++ 0x0b, 0x0c, 0x18, 0x28, 0x18, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x40, 0x30, 0x20, 0x00,
++ 0xc0, 0x20, 0x20, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x05, 0x06, 0x1c, 0x04, 0x05,
++ 0x06, 0x0c, 0x34, 0x0c, 0x04, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x30, 0x08, 0x0c, 0x00, 0x60, 0x90,
++ 0x08, 0x08, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x04, 0x47, 0x3c, 0x08, 0x08,
++ 0x08, 0x10, 0x11, 0x25, 0x22, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x60, 0x10, 0x88, 0x98, 0x80,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x04, 0x47, 0x3c, 0x08, 0x08,
++ 0x08, 0x10, 0x11, 0x25, 0x22, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0x10, 0x40, 0x20, 0x90, 0x88, 0x98,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x02, 0x01, 0x01, 0x0f, 0x00, 0x00, 0x1f, 0x00,
++ 0x00, 0x07, 0x08, 0x08, 0x06, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x60, 0x80, 0x80, 0xf0, 0x40, 0x20,
++ 0x20, 0xf0, 0x10, 0x00, 0x00, 0xc0, 0x00, 0x00,
++ 0x04, 0x02, 0x02, 0x1f, 0x01, 0x01, 0x3e, 0x00,
++ 0x00, 0x0f, 0x10, 0x10, 0x0c, 0x03, 0x00, 0x00,
++ 0x08, 0x24, 0xd0, 0x00, 0x00, 0xe0, 0x80, 0x40,
++ 0x40, 0xe0, 0x20, 0x00, 0x00, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0x08,
++ 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x80, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x08, 0x08,
++ 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x80, 0x40, 0x40, 0x88, 0x24, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x10, 0x10, 0x23, 0x20, 0x20,
++ 0x20, 0x20, 0x18, 0x10, 0x10, 0x00, 0x00, 0x00,
++ 0x80, 0x40, 0x20, 0x20, 0x3c, 0xe0, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00,
++ 0x01, 0x40, 0x20, 0x20, 0x20, 0x47, 0x40, 0x40,
++ 0x40, 0x40, 0x30, 0x20, 0x20, 0x01, 0x00, 0x00,
++ 0x08, 0xa4, 0x50, 0x40, 0x78, 0xc0, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x07, 0x00, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x20, 0x10, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x10, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x07, 0x00, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x20, 0x10, 0x0f, 0x00, 0x00, 0x00,
++ 0x08, 0x04, 0xf0, 0x88, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x10, 0xe0, 0x00, 0x00, 0x00,
++ 0x04, 0x02, 0x01, 0x21, 0x1e, 0x00, 0x00, 0x07,
++ 0x08, 0x10, 0x10, 0x0c, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x30, 0xc0, 0x80, 0x40, 0x40, 0xe0,
++ 0x20, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
++ 0x04, 0x02, 0x01, 0x21, 0x1e, 0x00, 0x00, 0x07,
++ 0x08, 0x10, 0x10, 0x0c, 0x03, 0x00, 0x00, 0x00,
++ 0x08, 0x04, 0x30, 0xc8, 0x80, 0x40, 0x40, 0xe0,
++ 0x20, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x10, 0x60, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x90, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x10, 0x60, 0x80, 0x00, 0x00, 0x00,
++ 0x01, 0x00, 0x40, 0x3f, 0x00, 0x03, 0x04, 0x04,
++ 0x03, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x80, 0xf8, 0x80, 0x80, 0x80, 0xc0, 0x40,
++ 0xc0, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x00, 0x40, 0x3f, 0x00, 0x03, 0x04, 0x04,
++ 0x03, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x28, 0x94, 0xf8, 0x80, 0x80, 0x80, 0xc0, 0x40,
++ 0xc0, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x08, 0x08, 0x4b, 0x3c, 0x08,
++ 0x08, 0x08, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x40, 0x78, 0xc0, 0x40, 0x40,
++ 0x40, 0xc0, 0x40, 0x00, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x08, 0x08, 0x4b, 0x3c, 0x08,
++ 0x08, 0x08, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00,
++ 0x08, 0x84, 0x50, 0x48, 0x78, 0xc0, 0x40, 0x40,
++ 0x40, 0xc0, 0x40, 0x00, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x09, 0x06, 0x00, 0x01, 0x02, 0x07, 0x38,
++ 0x01, 0x02, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x80, 0x00, 0x38, 0xc0, 0x80,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00,
++ 0x00, 0x09, 0x06, 0x00, 0x01, 0x02, 0x07, 0x38,
++ 0x01, 0x02, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0xc8, 0x64, 0x90, 0x00, 0x38, 0xc0, 0x80,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x07, 0x3c, 0x08, 0x08, 0x08,
++ 0x10, 0x10, 0x11, 0x21, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x00, 0xf0, 0x18, 0x20,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x07, 0x3c, 0x08, 0x08, 0x08,
++ 0x10, 0x10, 0x11, 0x21, 0x20, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0x90, 0x00, 0x00, 0xf0, 0x18, 0x20,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x47, 0x3c, 0x08, 0x08, 0x0b,
++ 0x1c, 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0xc0, 0x20,
++ 0x10, 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x47, 0x3c, 0x08, 0x08, 0x0b,
++ 0x1c, 0x10, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
++ 0x00, 0x08, 0xc4, 0x10, 0x08, 0x00, 0xc0, 0x20,
++ 0x10, 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06,
++ 0x38, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20,
++ 0x10, 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x03, 0x4c, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x08, 0x08,
++ 0x08, 0x10, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x03, 0x4c, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0x10, 0xe0, 0x10, 0x08, 0x08, 0x08,
++ 0x08, 0x10, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x43, 0x3c, 0x01, 0x01, 0x02, 0x02,
++ 0x02, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x43, 0x3c, 0x01, 0x01, 0x02, 0x02,
++ 0x02, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0xc0, 0x88, 0x24, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x02, 0x02, 0x02, 0x02, 0x03, 0x06,
++ 0x08, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x02, 0x02, 0x02, 0x02, 0x03, 0x06,
++ 0x08, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x24, 0x10, 0x00, 0x70, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
++ 0x04, 0x02, 0x02, 0x3f, 0x04, 0x08, 0x08, 0x10,
++ 0x10, 0x20, 0x03, 0x04, 0x04, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x70, 0x18, 0x20, 0x40,
++ 0x40, 0x40, 0xc0, 0x60, 0x50, 0x80, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x10, 0x13, 0x20, 0x20, 0x20,
++ 0x20, 0x22, 0x2a, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x18, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x00, 0x00, 0x13, 0x15, 0x19, 0x12,
++ 0x2a, 0x4c, 0x4c, 0x54, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x80, 0xe0, 0x10, 0x08, 0x08,
++ 0x08, 0x08, 0x68, 0x90, 0x68, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x08, 0x4c, 0x3f, 0x0c, 0x08,
++ 0x18, 0x18, 0x28, 0x59, 0x08, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0xf0, 0x18, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x0d, 0x11, 0x11, 0x22, 0x22,
++ 0x24, 0x24, 0x28, 0x10, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x20, 0x10, 0x08, 0x08, 0x08,
++ 0x08, 0x10, 0x10, 0x60, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x14, 0x13, 0x20, 0x20, 0x20,
++ 0x20, 0x29, 0x12, 0x12, 0x11, 0x00, 0x00, 0x00,
++ 0x40, 0x20, 0x20, 0x38, 0xe0, 0x20, 0x20, 0x20,
++ 0x20, 0xe0, 0x30, 0x28, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x40, 0x20, 0x28, 0x27, 0x40, 0x40, 0x40,
++ 0x40, 0x53, 0x24, 0x24, 0x23, 0x00, 0x00, 0x00,
++ 0x88, 0x44, 0x50, 0x78, 0xc0, 0x40, 0x40, 0x40,
++ 0x40, 0xc0, 0x60, 0x50, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x40, 0x20, 0x28, 0x27, 0x40, 0x40, 0x40,
++ 0x40, 0x53, 0x24, 0x24, 0x23, 0x00, 0x00, 0x00,
++ 0x98, 0x64, 0x64, 0x78, 0xc0, 0x40, 0x40, 0x40,
++ 0x40, 0xc0, 0x60, 0x50, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x04, 0x3c, 0x08, 0x08, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00, 0x00,
++ 0x00, 0x40, 0x40, 0x20, 0x20, 0x30, 0x28, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x04, 0x3c, 0x08, 0x08, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00, 0x00,
++ 0x08, 0x44, 0x50, 0x28, 0x20, 0x30, 0x28, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x04, 0x3c, 0x08, 0x08, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00, 0x00,
++ 0x30, 0x48, 0x48, 0x30, 0x20, 0x30, 0x28, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x03, 0x00, 0x01, 0x02, 0x02, 0x01,
++ 0x02, 0x4c, 0x38, 0x24, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0xb0, 0x88, 0x9c, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x03, 0x00, 0x01, 0x02, 0x02, 0x01,
++ 0x02, 0x4c, 0x38, 0x24, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x88, 0xa4, 0x10, 0x00, 0x00, 0x00,
++ 0xb0, 0x88, 0x9c, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x03, 0x00, 0x01, 0x02, 0x02, 0x01,
++ 0x02, 0x4c, 0x38, 0x24, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x98, 0xa4, 0x24, 0x18, 0x00, 0x00,
++ 0xb0, 0x88, 0x9c, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x50, 0x20,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40,
++ 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x50, 0x20,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x48, 0x20, 0x00, 0x80, 0x40,
++ 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x50, 0x20,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x30, 0x48, 0x48, 0x30, 0x00, 0x80, 0x40,
++ 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x22, 0x11, 0x10, 0x10, 0x23, 0x20, 0x20,
++ 0x20, 0x29, 0x12, 0x12, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0x30, 0xc0, 0x40, 0x38, 0xe0, 0x20, 0x20,
++ 0x20, 0xe0, 0x30, 0x28, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x44, 0x23, 0x20, 0x20, 0x47, 0x40, 0x40,
++ 0x40, 0x53, 0x24, 0x24, 0x23, 0x00, 0x00, 0x00,
++ 0x00, 0x68, 0x84, 0x90, 0x78, 0xc0, 0x40, 0x40,
++ 0x40, 0xc0, 0x60, 0x50, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x44, 0x23, 0x20, 0x20, 0x47, 0x40, 0x40,
++ 0x40, 0x53, 0x24, 0x24, 0x23, 0x00, 0x00, 0x00,
++ 0x18, 0x64, 0xa4, 0x98, 0x70, 0xc0, 0x40, 0x40,
++ 0x40, 0xc0, 0x60, 0x50, 0x80, 0x00, 0x00, 0x00,
++ 0x01, 0x00, 0x10, 0x0f, 0x00, 0x10, 0x0f, 0x00,
++ 0x00, 0x0f, 0x10, 0x10, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0xf0, 0x80, 0x80, 0xe0, 0x80, 0x80,
++ 0x80, 0x80, 0xe0, 0x90, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x07, 0x01, 0x01, 0x02, 0x02, 0x0f,
++ 0x34, 0x44, 0x48, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x80, 0x00, 0x00, 0x20, 0x10, 0xf0,
++ 0x18, 0x24, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x08, 0x04, 0x27, 0x1c, 0x04, 0x1c, 0x24, 0x24,
++ 0x2c, 0x18, 0x08, 0x08, 0x07, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x30, 0x08, 0x0c, 0x00, 0x00,
++ 0x20, 0x10, 0x10, 0x10, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x00, 0x10, 0x13, 0x1c, 0x11, 0x29,
++ 0x2a, 0x46, 0x44, 0x4a, 0x30, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x80, 0xc0, 0xa0, 0x10, 0x08,
++ 0x08, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x02, 0x01, 0x11, 0x0e, 0x03, 0x12, 0x24, 0x1c,
++ 0x07, 0x04, 0x04, 0x04, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x20, 0x20,
++ 0x10, 0x10, 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x09, 0x0e,
++ 0x3c, 0x04, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0x10,
++ 0x10, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x00, 0x01, 0x18, 0x10, 0x0b, 0x4c, 0x34,
++ 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0xc0, 0x00, 0xf0, 0x08, 0x08, 0x08,
++ 0x70, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x21, 0x27,
++ 0x29, 0x31, 0x23, 0x21, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10,
++ 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x40, 0x21, 0x22, 0x24, 0x28, 0x30,
++ 0x34, 0x22, 0x21, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0xe0, 0x90, 0x88, 0x88, 0x88,
++ 0x88, 0x90, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x0f, 0x11, 0x11, 0x0e, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xc0, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00, 0x00,
++ 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x1f, 0x21, 0x21, 0x1e, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x30, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x02, 0x01, 0x01, 0x06, 0x08, 0x08, 0x08, 0x09,
++ 0x0e, 0x08, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xe0,
++ 0x10, 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x10, 0x09, 0x0a, 0x0c, 0x0c, 0x08, 0x08, 0x08,
++ 0x08, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x07, 0x00, 0x01, 0x02, 0x07, 0x0c,
++ 0x10, 0x20, 0x03, 0x04, 0x04, 0x03, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x80, 0x00, 0x00, 0xc0, 0x20,
++ 0x10, 0x10, 0x90, 0x60, 0x40, 0x80, 0x00, 0x00,
++ 0x00, 0x10, 0x08, 0x09, 0x0a, 0x1c, 0x6c, 0x08,
++ 0x18, 0x18, 0x28, 0x48, 0x18, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x24, 0x18, 0x00, 0x00, 0x00,
++ 0x00, 0x11, 0x0e, 0x01, 0x02, 0x04, 0x0f, 0x08,
++ 0x10, 0x20, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00,
++ 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x20,
++ 0x10, 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0x06,
++ 0x1d, 0x06, 0x0c, 0x0c, 0x14, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
++ 0x10, 0x10, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x08, 0x4c, 0x3f, 0x0c, 0x08,
++ 0x18, 0x18, 0x28, 0x48, 0x18, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x08,
++ 0x08, 0x08, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x09, 0x06, 0x01, 0x01, 0x03, 0x0e, 0x12,
++ 0x24, 0x24, 0x28, 0x19, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x80, 0x00, 0x00, 0xe0, 0x10, 0x08,
++ 0x08, 0x08, 0xc8, 0x30, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x09, 0x07, 0x02, 0x07, 0x08, 0x10, 0x06,
++ 0x09, 0x07, 0x08, 0x1c, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0x80, 0x00, 0x00, 0xc0, 0x20, 0x20, 0x20,
++ 0xc0, 0x00, 0x00, 0xe0, 0x10, 0x38, 0x00, 0x00,
++ 0x04, 0x02, 0x12, 0x0f, 0x04, 0x04, 0x0f, 0x18,
++ 0x21, 0x02, 0x04, 0x08, 0x08, 0x07, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x00, 0x00, 0x20, 0x38, 0xc0,
++ 0x80, 0x80, 0x80, 0x00, 0x00, 0xe0, 0x00, 0x00,
++ 0x02, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x0f,
++ 0x08, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0x88, 0x90, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x1e,
++ 0x02, 0x01, 0x01, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x20,
++ 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x21, 0x1e, 0x00, 0x02, 0x01, 0x01,
++ 0x01, 0x01, 0x02, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x20, 0x40, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
++ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x20, 0x40, 0x80, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0d, 0x30,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x01, 0x1e,
++ 0x08, 0x08, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x02, 0x01, 0x01, 0x01, 0x3e, 0x10, 0x10,
++ 0x08, 0x08, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f,
++ 0x01, 0x01, 0x01, 0x01, 0x1e, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x02, 0x01, 0x01,
++ 0x01, 0x01, 0x03, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x0f,
++ 0x01, 0x02, 0x04, 0x08, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x01,
++ 0x02, 0x04, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x40, 0x78, 0xc0, 0xc0, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xc0, 0x40, 0x00, 0x00,
++ 0x00, 0x02, 0x01, 0x01, 0x21, 0x1f, 0x02, 0x02,
++ 0x04, 0x04, 0x08, 0x11, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10,
++ 0x20, 0x20, 0x20, 0x40, 0xc0, 0x80, 0x00, 0x00,
++ 0x00, 0x02, 0x01, 0x01, 0x21, 0x1f, 0x02, 0x02,
++ 0x04, 0x04, 0x08, 0x11, 0x20, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0x14, 0x10, 0xf0, 0x10, 0x10, 0x10,
++ 0x20, 0x20, 0x20, 0x40, 0xc0, 0x80, 0x00, 0x00,
++ 0x00, 0x04, 0x02, 0x02, 0x03, 0x1d, 0x01, 0x01,
++ 0x03, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x70, 0x80, 0x00, 0x00, 0x78,
++ 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x04, 0x02, 0x02, 0x03, 0x1d, 0x01, 0x01,
++ 0x03, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0x14, 0x70, 0x80, 0x00, 0x00, 0x78,
++ 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x04, 0x02, 0x03, 0x02, 0x04, 0x04, 0x08,
++ 0x10, 0x00, 0x01, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x70, 0x90, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x07, 0x04, 0x08, 0x08, 0x10,
++ 0x21, 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x08, 0x24, 0xd4, 0x50, 0x40, 0x40, 0x80, 0x80,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x04, 0x04, 0x0f, 0x09, 0x10,
++ 0x20, 0x00, 0x01, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x38, 0xc0, 0x00, 0x80,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x04, 0x04, 0x0f, 0x09, 0x10,
++ 0x20, 0x00, 0x01, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x08, 0x24, 0x14, 0x10, 0x38, 0xc0, 0x00, 0x80,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x21, 0x1e, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x1c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10,
++ 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x43, 0x3c, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x07, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0x14, 0xd0, 0x40, 0x40, 0x40, 0x40,
++ 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x04, 0x04, 0x24, 0x1f, 0x04,
++ 0x04, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40,
++ 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x04, 0x04, 0x24, 0x1f, 0x04,
++ 0x04, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x08, 0xa4, 0x54, 0x50, 0x40, 0xf8, 0x40, 0x40,
++ 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0c, 0x02, 0x00, 0x18, 0x04, 0x00,
++ 0x00, 0x00, 0x00, 0x13, 0x0c, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10,
++ 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0c, 0x02, 0x00, 0x18, 0x04, 0x00,
++ 0x00, 0x00, 0x00, 0x13, 0x0c, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x24, 0x14, 0x10, 0x00, 0x08, 0x10,
++ 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0x40, 0x40, 0x80, 0x80,
++ 0x40, 0x20, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x21, 0x1e, 0x00, 0x00, 0x01, 0x01,
++ 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0xd4, 0x50, 0x80, 0x80, 0x00, 0x00,
++ 0x80, 0x40, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x04, 0x04, 0x05, 0x26, 0x1c,
++ 0x04, 0x04, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x78, 0x88, 0x10, 0x20,
++ 0x40, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x04, 0x04, 0x05, 0x26, 0x1c,
++ 0x04, 0x04, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0x14, 0x10, 0x78, 0x88, 0x10, 0x20,
++ 0x40, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x08, 0x04, 0x04, 0x04, 0x00,
++ 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x10, 0x10, 0x20, 0x20, 0x40,
++ 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x10, 0x08, 0x08, 0x08, 0x00,
++ 0x00, 0x01, 0x01, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x08, 0xa4, 0x54, 0x50, 0x40, 0x40, 0x40, 0x80,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x02, 0x01, 0x01, 0x02, 0x02, 0x05, 0x08,
++ 0x10, 0x00, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x20, 0x20, 0xc0,
++ 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x02, 0x03, 0x04, 0x04, 0x0a, 0x11,
++ 0x20, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x08, 0x24, 0x14, 0xf0, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x1e, 0x01, 0x00, 0x23, 0x1c,
++ 0x00, 0x00, 0x01, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0x40, 0x80, 0x00, 0x00, 0xf8, 0x80, 0x80,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x1e, 0x01, 0x00, 0x23, 0x1c,
++ 0x00, 0x00, 0x01, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x08, 0x64, 0x94, 0x10, 0x00, 0xf8, 0x80, 0x80,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x12,
++ 0x0a, 0x08, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x04, 0x22, 0x11, 0x09, 0x08, 0x00,
++ 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x08, 0x08, 0x10, 0x10, 0x20,
++ 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x08, 0x44, 0x24, 0x10, 0x10,
++ 0x00, 0x01, 0x02, 0x04, 0x08, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0x94, 0x50, 0x40, 0x40, 0x40, 0x80,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x11, 0x0e, 0x00, 0x00, 0x23, 0x1c,
++ 0x00, 0x01, 0x01, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x00, 0x00, 0x78, 0x80, 0x80,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x11, 0x0e, 0x00, 0x20, 0x1f, 0x00,
++ 0x00, 0x01, 0x01, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x08, 0x24, 0xd4, 0x10, 0x00, 0xf0, 0x00, 0x80,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x04, 0x04, 0x04, 0x07, 0x04,
++ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x08, 0x08, 0x08, 0x08, 0x0e, 0x09,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x90, 0x50, 0x40, 0x00, 0x00, 0x00, 0x80,
++ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x80, 0xf8, 0x80, 0x80, 0x80,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x0f, 0x00, 0x00, 0x0e, 0x01,
++ 0x00, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x20, 0x20, 0x40, 0xc0,
++ 0xc0, 0x20, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x02, 0x01, 0x01, 0x1e, 0x00, 0x00, 0x01,
++ 0x03, 0x0d, 0x31, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x20, 0x40, 0x80, 0x00,
++ 0x40, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x40, 0x20, 0x20, 0x20, 0x40, 0x40, 0x80,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0x08,
++ 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10,
++ 0x10, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0x08,
++ 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x24, 0x14, 0x90, 0x40, 0x20, 0x10,
++ 0x10, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04, 0x08,
++ 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x18, 0x24, 0x24, 0x18, 0x80, 0x40, 0x20, 0x10,
++ 0x10, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x08, 0x08, 0x08, 0x0f, 0x08,
++ 0x08, 0x08, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x08, 0x08, 0x08, 0x08, 0x0f,
++ 0x08, 0x08, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x48, 0x28, 0x20, 0x00, 0xe0, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x08, 0x08, 0x08, 0x08, 0x0f,
++ 0x08, 0x08, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00,
++ 0x00, 0x30, 0x48, 0x48, 0x30, 0x00, 0xe0, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x02, 0x04, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x10, 0x20, 0x20, 0x40,
++ 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x23, 0x1c, 0x00, 0x00, 0x00, 0x01,
++ 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00, 0x00,
++ 0x08, 0x24, 0xd4, 0x50, 0x40, 0x80, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x23, 0x1c, 0x00, 0x00, 0x00, 0x01,
++ 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00, 0x00,
++ 0x18, 0x24, 0xe4, 0x58, 0x40, 0x80, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x48, 0x30,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40,
++ 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x48, 0x30,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x90, 0x50, 0x40, 0x00, 0x80, 0x40,
++ 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x48, 0x30,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x60, 0x90, 0x90, 0x60, 0x00, 0x80, 0x40,
++ 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x02, 0x01, 0x01, 0x21, 0x1f, 0x01, 0x01,
++ 0x09, 0x09, 0x11, 0x21, 0x03, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x40,
++ 0x20, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x02, 0x01, 0x01, 0x21, 0x1f, 0x01, 0x01,
++ 0x09, 0x09, 0x11, 0x21, 0x03, 0x01, 0x00, 0x00,
++ 0x08, 0x24, 0x14, 0x10, 0xf0, 0x00, 0x00, 0x40,
++ 0x20, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x02, 0x01, 0x01, 0x21, 0x1f, 0x01, 0x01,
++ 0x09, 0x09, 0x11, 0x21, 0x03, 0x01, 0x00, 0x00,
++ 0x18, 0x24, 0x24, 0x18, 0xf0, 0x00, 0x00, 0x40,
++ 0x20, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x20, 0x1f, 0x00, 0x00, 0x00,
++ 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x08, 0x10, 0x20, 0x40,
++ 0x80, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x03, 0x00, 0x00, 0x08, 0x06, 0x01,
++ 0x00, 0x10, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00, 0x80,
++ 0x40, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00,
++ 0x00, 0x02, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
++ 0x04, 0x04, 0x29, 0x1e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
++ 0x20, 0x30, 0xc8, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00,
++ 0x00, 0x00, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0x40, 0x20, 0x20, 0x20, 0x20, 0xc0, 0x40,
++ 0xa0, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x0f, 0x02, 0x02, 0x23, 0x1e,
++ 0x02, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xf8, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x03,
++ 0x1e, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x90,
++ 0x20, 0x40, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x08, 0x04, 0x04, 0x03, 0x26, 0x1a, 0x01,
++ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x78, 0x88, 0x10, 0x20, 0x40,
++ 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e,
++ 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40,
++ 0x40, 0x80, 0xe0, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x11, 0x0e, 0x00, 0x00,
++ 0x00, 0x01, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x40, 0x80,
++ 0x80, 0xf0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x00,
++ 0x01, 0x0e, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x20, 0x20,
++ 0xe0, 0x40, 0x40, 0xc0, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x01, 0x0e,
++ 0x00, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0xe0, 0x20,
++ 0x20, 0x20, 0x20, 0xe0, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x11, 0x0e, 0x00, 0x23, 0x1c, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x00, 0x70, 0x90, 0x10, 0x10,
++ 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04,
++ 0x04, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x08, 0x04, 0x04, 0x04, 0x04,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x88, 0x88,
++ 0x90, 0x90, 0xa0, 0xc0, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x0b, 0x0c, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
++ 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x21, 0x1e, 0x10, 0x10, 0x08,
++ 0x08, 0x09, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0x20,
++ 0x20, 0xe0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0f,
++ 0x08, 0x04, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x10,
++ 0x20, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x21, 0x1e, 0x10, 0x08, 0x08, 0x08,
++ 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0x20, 0x20,
++ 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x00, 0x00, 0x01, 0x1e, 0x08, 0x04,
++ 0x05, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x80, 0xf0, 0x80, 0x80, 0x80,
++ 0xf0, 0x88, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x01, 0x1e, 0x02, 0x01, 0x01,
++ 0x01, 0x01, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x20, 0x40, 0x80, 0x00,
++ 0x00, 0xf0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x01, 0x0e,
++ 0x00, 0x00, 0x00, 0x01, 0x06, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x10, 0x20, 0xe0, 0x20,
++ 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x18, 0x04, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x13, 0x0c, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10, 0x10,
++ 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x02, 0x02, 0x43, 0x3c, 0x20, 0x10,
++ 0x10, 0x00, 0x00, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x08, 0x24, 0x14, 0x10, 0xe0, 0x20, 0x20, 0x40,
++ 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x11,
++ 0x0e, 0x02, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
++ 0x20, 0x20, 0x20, 0x20, 0xc0, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x04,
++ 0x07, 0x08, 0x10, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
++ 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x03, 0x03, 0x04, 0x04, 0x08,
++ 0x0f, 0x10, 0x10, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0x60,
++ 0xe0, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x30, 0x60, 0xc0, 0x30,
++ 0x18, 0x18, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x03, 0x03, 0x04, 0x04, 0x08,
++ 0x08, 0x10, 0x10, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0x60,
++ 0x60, 0x30, 0x30, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x10, 0x00, 0x40, 0xc0, 0x40,
++ 0x00, 0x08, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x20, 0x01, 0x01, 0x03, 0x06,
++ 0x06, 0x0c, 0x18, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x60, 0xc0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x08, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x30, 0x30, 0x30, 0x30, 0xf0, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x30, 0x34, 0x37, 0x34,
++ 0x30, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x18, 0x58, 0xd8, 0x58,
++ 0x18, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x19, 0x1a, 0x1c,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x20, 0x40, 0x80, 0x80, 0xc0, 0xc0,
++ 0x60, 0x60, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x03, 0x03, 0x04, 0x04, 0x08,
++ 0x08, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0x60,
++ 0x60, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x18, 0x1c, 0x1c, 0x16, 0x16, 0x17,
++ 0x13, 0x12, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x30, 0x70, 0x70, 0xb0, 0xb0, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x18, 0x1c, 0x16, 0x16, 0x13, 0x11,
++ 0x11, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x70, 0x20, 0x20, 0x20, 0x20, 0x20, 0xa0,
++ 0xa0, 0xe0, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x1f, 0x20, 0x00, 0x10, 0x1f, 0x1f,
++ 0x10, 0x00, 0x10, 0x1f, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0xe0, 0x20, 0x00, 0x20, 0xe0, 0xe0,
++ 0x20, 0x00, 0x10, 0xe0, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x30, 0x60, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x18, 0x0c, 0x06, 0x03, 0x01, 0x01,
++ 0x02, 0x04, 0x08, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x10, 0x00, 0x00, 0x80, 0x00,
++ 0x00, 0x10, 0x20, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x23, 0x43, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0c, 0x17, 0x23, 0x23, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0xa0, 0x10, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x03, 0x07, 0x1b, 0x33, 0x33, 0x33,
++ 0x1b, 0x07, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x00, 0x80, 0x60, 0x30, 0x30, 0x30,
++ 0x60, 0x80, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x0c, 0x06, 0x03, 0x03, 0x03,
++ 0x04, 0x08, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x20, 0x40, 0x80, 0x00, 0x00, 0x80,
++ 0xc0, 0x60, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x03, 0x63, 0x33, 0x33, 0x33, 0x13,
++ 0x0f, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x00, 0x18, 0x30, 0x30, 0x30, 0x20,
++ 0xc0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x18,
++ 0x08, 0x04, 0x22, 0x3e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x18, 0x18, 0x18, 0x30,
++ 0x20, 0x40, 0x88, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x18, 0x10,
++ 0x10, 0x10, 0x19, 0x0e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x20, 0x20, 0xa0, 0x60, 0x60,
++ 0x40, 0xc0, 0x40, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x02, 0x02, 0x04, 0x05, 0x04,
++ 0x0c, 0x08, 0x0c, 0x1b, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xe0, 0x10, 0x10, 0x10, 0x20, 0xc0, 0x20,
++ 0x20, 0x20, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x06, 0x09, 0x01, 0x01,
++ 0x01, 0x03, 0x03, 0x03, 0x02, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x30, 0x40, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x04, 0x04, 0x02, 0x03, 0x04, 0x0c,
++ 0x08, 0x08, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0xe0, 0x10, 0x00, 0x80, 0xc0, 0x40,
++ 0x40, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x04, 0x03,
++ 0x06, 0x0c, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x80,
++ 0x00, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x04, 0x0c, 0x07, 0x02, 0x04, 0x04, 0x08,
++ 0x08, 0x0e, 0x07, 0x00, 0x06, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0xc0, 0x40, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x17, 0x02, 0x04,
++ 0x04, 0x0c, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x20, 0x20,
++ 0x20, 0x40, 0x40, 0xc0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x02, 0x06, 0x04, 0x0f, 0x0c,
++ 0x08, 0x08, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x10, 0x10, 0x10, 0x30, 0xf0, 0x20,
++ 0x60, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x02, 0x06,
++ 0x04, 0x04, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x0d, 0x0e,
++ 0x09, 0x19, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x70, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0xa0, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02,
++ 0x06, 0x04, 0x0c, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0xc0, 0x40, 0xc0, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x0c,
++ 0x08, 0x08, 0x0c, 0x1b, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x60, 0x40,
++ 0x40, 0x40, 0xe8, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x08, 0x0c, 0x04, 0x04,
++ 0x04, 0x07, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x04, 0x03, 0x02, 0x04, 0x04, 0x03, 0x04,
++ 0x08, 0x08, 0x0e, 0x07, 0x00, 0x07, 0x00, 0x00,
++ 0x00, 0x60, 0xe0, 0x00, 0x00, 0x00, 0xc0, 0xc0,
++ 0x00, 0x00, 0x00, 0x80, 0xc0, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06, 0x0c,
++ 0x0c, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x10, 0x30,
++ 0x30, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x0c, 0x1f, 0x22, 0x04, 0x04,
++ 0x08, 0x08, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x08, 0xf0, 0x40, 0x40, 0x80,
++ 0x80, 0x80, 0xc0, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x06, 0x04,
++ 0x0c, 0x0c, 0x0c, 0x1b, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x10, 0x10,
++ 0x30, 0x20, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0c, 0x18,
++ 0x10, 0x10, 0x11, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x80, 0x40, 0x40,
++ 0x40, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x06, 0x0f, 0x11, 0x03,
++ 0x02, 0x04, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x30, 0xe0, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x0c, 0x0c,
++ 0x08, 0x08, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x20, 0x20,
++ 0x60, 0x40, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0d, 0x19, 0x31,
++ 0x32, 0x12, 0x0e, 0x07, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x80, 0x80, 0x80, 0x80, 0xc0, 0x20, 0x30,
++ 0x30, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x06, 0x0b, 0x01, 0x01, 0x01, 0x01, 0x03,
++ 0x07, 0x05, 0x09, 0x19, 0x31, 0x20, 0x00, 0x00,
++ 0x00, 0x10, 0x30, 0x60, 0x40, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xa0, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x31, 0x59, 0x09, 0x09,
++ 0x12, 0x12, 0x12, 0x0f, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x80, 0x80, 0x80, 0xa0, 0x30, 0x10, 0x10,
++ 0x30, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x31, 0x23,
++ 0x22, 0x22, 0x36, 0x19, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x10, 0x10,
++ 0x30, 0x20, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x01, 0x03, 0x03, 0x04, 0x04, 0x08,
++ 0x0f, 0x10, 0x10, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0x60,
++ 0xe0, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x10, 0x00, 0x00, 0x80, 0x60,
++ 0x30, 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x30, 0x60, 0xc0, 0x30,
++ 0x18, 0x18, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
++ 0x04, 0x08, 0x08, 0x1f, 0x30, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
++ 0x60, 0x60, 0x60, 0xf8, 0x18, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x10, 0x00, 0x40, 0xc0, 0x40,
++ 0x00, 0x08, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x0c, 0x0c, 0x3f, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0xc0, 0xc0, 0xe0, 0x10, 0x00, 0x40, 0xc0, 0x40,
++ 0x00, 0x08, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x67, 0x73, 0x13, 0x13, 0x13, 0x0f, 0x0b,
++ 0x13, 0x33, 0x23, 0x77, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x98, 0x38, 0x20, 0x20, 0x20, 0xc0, 0x40,
++ 0x20, 0x30, 0x10, 0xb8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x1c, 0x10, 0x00, 0x00, 0x03, 0x00,
++ 0x00, 0x10, 0x1c, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x30, 0x60, 0xc0, 0x60,
++ 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x19, 0x1a,
++ 0x1c, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x30, 0x30, 0x70, 0xb0, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x06, 0x03, 0x3c, 0x18, 0x18, 0x18, 0x19, 0x1a,
++ 0x1c, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0xc0, 0x80, 0x78, 0x30, 0x70, 0xb0, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x19, 0x1f, 0x19,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x58, 0x80, 0x80, 0x00, 0x00, 0x80,
++ 0xc0, 0x60, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
++ 0x02, 0x34, 0x34, 0x18, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x18, 0x18, 0x1c, 0x1c, 0x17, 0x26,
++ 0x22, 0x22, 0x20, 0x70, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x70, 0x60, 0x60, 0xe0, 0xe0, 0x60, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x30, 0x30, 0x30, 0x30, 0xf0, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x30, 0x60, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xd0, 0x30, 0x10, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x23, 0x43, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06,
++ 0x03, 0x03, 0x01, 0x19, 0x1a, 0x0c, 0x00, 0x00,
++ 0x00, 0x78, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x03, 0x07, 0x1b, 0x33, 0x33, 0x33,
++ 0x1b, 0x07, 0x03, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x00, 0x80, 0x60, 0x30, 0x30, 0x30,
++ 0x60, 0x80, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x0c, 0x06, 0x03, 0x03, 0x03,
++ 0x04, 0x08, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x20, 0x40, 0x80, 0x00, 0x00, 0x80,
++ 0xc0, 0x60, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x18, 0x18, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0xf8, 0x18, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0f,
++ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0xe0,
++ 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x77, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
++ 0x33, 0x33, 0x33, 0x7f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xb8, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x77, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
++ 0x33, 0x33, 0x33, 0x7f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xb8, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0xf8, 0x18, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x26, 0x46, 0x06, 0x07, 0x06, 0x06,
++ 0x06, 0x06, 0x06, 0x1f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x30, 0x18,
++ 0x18, 0x18, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x18, 0x18, 0x18, 0x1e, 0x19, 0x18,
++ 0x18, 0x18, 0x19, 0x3e, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x30, 0x30, 0x30, 0x30, 0xb0, 0xf0,
++ 0xf0, 0xf0, 0xb0, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0f, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x30,
++ 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x1c, 0x10, 0x00, 0x06, 0x0b, 0x00,
++ 0x00, 0x10, 0x1c, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x30, 0x10, 0x18, 0xb8, 0xd8,
++ 0x10, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x33, 0x32, 0x36, 0x36, 0x3e, 0x36,
++ 0x36, 0x32, 0x33, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x30, 0x10, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x10, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x0c, 0x18, 0x18, 0x18, 0x0c, 0x07,
++ 0x03, 0x06, 0x0c, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x30, 0x30, 0x30, 0x30, 0x30, 0xf0,
++ 0x30, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x0c, 0x0c, 0x03,
++ 0x0c, 0x18, 0x18, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x60, 0xe0,
++ 0x60, 0x60, 0xe0, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x04, 0x05, 0x0e, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0xe0, 0xc0, 0x00, 0x80, 0x60, 0x30, 0x30,
++ 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x0c, 0x0c, 0x0f,
++ 0x0c, 0x0c, 0x0c, 0x1f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x60, 0xc0,
++ 0x20, 0x30, 0x30, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x0c, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0c, 0x1f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x20, 0x10, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x04, 0x04, 0x04,
++ 0x04, 0x04, 0x08, 0x3f, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60,
++ 0x60, 0x60, 0x60, 0xe0, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x18, 0x1f,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x30, 0xf0,
++ 0x00, 0x10, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x06, 0x06, 0x00, 0x07, 0x08, 0x18, 0x1f,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x60, 0x60, 0x00, 0xc0, 0x20, 0x30, 0xf0,
++ 0x00, 0x10, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x67, 0x73, 0x0b, 0x0f,
++ 0x0b, 0x13, 0x33, 0x67, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x98, 0x38, 0x40, 0xc0,
++ 0x40, 0x20, 0x30, 0x98, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x10, 0x03,
++ 0x00, 0x10, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x60, 0xc0,
++ 0x60, 0x60, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x19,
++ 0x1a, 0x1c, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0xe0, 0x60,
++ 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x06, 0x03, 0x00, 0x3c, 0x18, 0x18, 0x19,
++ 0x1a, 0x1c, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x80, 0x00, 0xf0, 0x60, 0xe0, 0x60,
++ 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x19, 0x1f,
++ 0x19, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x60, 0xe0, 0x00, 0x00,
++ 0x80, 0xc0, 0x60, 0x70, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x02, 0x02, 0x02,
++ 0x02, 0x34, 0x34, 0x18, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60,
++ 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x1c, 0x16,
++ 0x16, 0x13, 0x13, 0x38, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x38, 0x70, 0x70, 0xb0,
++ 0xb0, 0x30, 0x30, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x1f,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0xe0,
++ 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x18, 0x18,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x30, 0x30,
++ 0x30, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x18, 0x18, 0x18,
++ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60,
++ 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1d, 0x0e, 0x0c, 0x0c,
++ 0x0c, 0x0c, 0x0e, 0x0d, 0x0c, 0x1e, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x30, 0x30,
++ 0x30, 0x30, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x18, 0x18,
++ 0x18, 0x18, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x20, 0x00,
++ 0x00, 0x20, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x13, 0x23, 0x03,
++ 0x03, 0x03, 0x03, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x20, 0x10, 0x00,
++ 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x0c, 0x06, 0x06,
++ 0x03, 0x03, 0x01, 0x19, 0x19, 0x0e, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x70, 0x20, 0x20, 0x40,
++ 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x03, 0x03, 0x1b, 0x37, 0x63, 0x63,
++ 0x63, 0x63, 0x37, 0x1b, 0x03, 0x07, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x18, 0x18,
++ 0x18, 0x18, 0xb0, 0x60, 0x00, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c, 0x06, 0x03,
++ 0x03, 0x04, 0x08, 0x1c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x70, 0x20, 0x40, 0x80,
++ 0x80, 0xc0, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18,
++ 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60,
++ 0x60, 0x60, 0x60, 0xf0, 0x30, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18,
++ 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60,
++ 0xe0, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x77, 0x33, 0x33, 0x33,
++ 0x33, 0x33, 0x33, 0x7f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x78, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x77, 0x33, 0x33, 0x33,
++ 0x33, 0x33, 0x33, 0x7f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x78, 0x30, 0x30, 0x30,
++ 0x30, 0x30, 0x30, 0xf8, 0x18, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3f, 0x26, 0x46, 0x07,
++ 0x06, 0x06, 0x06, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
++ 0x30, 0x30, 0x30, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x1f,
++ 0x19, 0x19, 0x19, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x78, 0x30, 0x30, 0x30,
++ 0xb0, 0xb0, 0xb0, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0f,
++ 0x0c, 0x0c, 0x0c, 0x1f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0,
++ 0x30, 0x30, 0x30, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x18, 0x10, 0x03,
++ 0x05, 0x10, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x30, 0x70,
++ 0xb0, 0x30, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x19, 0x1b, 0x1f,
++ 0x1b, 0x1b, 0x19, 0x3c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x18, 0x18,
++ 0x18, 0x18, 0x10, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x18, 0x18,
++ 0x0f, 0x06, 0x0c, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60,
++ 0xe0, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xff, 0xff,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xff, 0xff,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xff, 0xff,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xff, 0xff,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xff,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, 0xff,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xff,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xff,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x04, 0x3f, 0x24, 0x24, 0x24,
++ 0x3f, 0x24, 0x04, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x80, 0x80, 0xf0, 0x90, 0x90, 0x90,
++ 0xf0, 0x90, 0x80, 0x80, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x4b, 0x4a, 0x4a, 0x4a,
++ 0x4b, 0x7a, 0x48, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0xa8, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x13, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x11, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x28, 0x31, 0x29, 0x25, 0x25,
++ 0x25, 0x25, 0x38, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xe8, 0x28, 0x28, 0x28,
++ 0xe8, 0x28, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x08, 0x0f,
++ 0x03, 0x0c, 0x74, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xe0, 0x20, 0x20, 0xe8,
++ 0x08, 0x90, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x12, 0x09, 0x3f, 0x25, 0x54, 0x13,
++ 0x22, 0x07, 0x3a, 0x01, 0x06, 0x78, 0x00, 0x00,
++ 0x30, 0xd0, 0x10, 0x20, 0xfc, 0x88, 0x50, 0xc8,
++ 0x08, 0xe0, 0x40, 0x80, 0xe0, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x79, 0x17, 0x11, 0x11, 0x1a,
++ 0x74, 0x17, 0x10, 0x10, 0x13, 0x3c, 0x00, 0x00,
++ 0x80, 0xa0, 0x90, 0x38, 0xc8, 0x00, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x13, 0x12,
++ 0x32, 0x2c, 0x04, 0x0a, 0x10, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x50, 0x50, 0x88, 0xfc, 0x00,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x21, 0x16, 0x10, 0x01, 0x0e, 0x73, 0x10,
++ 0x13, 0x10, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0xf8, 0x90, 0x60, 0xf0, 0x4c, 0xf8, 0x40,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0xfc, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x07, 0x11, 0x0a, 0x04, 0x1f,
++ 0x61, 0x1f, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x20, 0x28, 0xc8, 0x50, 0xf0,
++ 0x0c, 0xf0, 0x00, 0x80, 0x60, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x7f, 0x04, 0x3f, 0x24,
++ 0x24, 0x28, 0x30, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xfc, 0x80, 0xf8, 0x88,
++ 0x98, 0x78, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x19, 0x76, 0x11, 0x11, 0x7d, 0x11, 0x1b,
++ 0x36, 0x37, 0x52, 0x13, 0x12, 0x10, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xf0, 0x50, 0xf0, 0xf0, 0xf8,
++ 0x48, 0xf8, 0x48, 0xfc, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x1f, 0x12, 0x1f, 0x02, 0x7f,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x80, 0xf0, 0x90, 0xf0, 0x80, 0xfc,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x12, 0x1a,
++ 0x73, 0x14, 0x17, 0x18, 0x17, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8, 0x60, 0x90,
++ 0xe8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x02, 0x02,
++ 0x13, 0x12, 0x25, 0x24, 0x4f, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xfc, 0x50, 0x98,
++ 0xe4, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x0a, 0x0a, 0x0a,
++ 0x0a, 0x0a, 0x12, 0x12, 0x22, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0x88, 0xf8, 0x88, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x0f, 0x02, 0x7f, 0x0f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xfc, 0xe0, 0x20,
++ 0xe0, 0xf0, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3f, 0x00, 0x1f, 0x10,
++ 0x10, 0x1f, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7e, 0x2b, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2e, 0x28, 0x41, 0x00, 0x00,
++ 0x20, 0x30, 0x48, 0xf4, 0x20, 0xfc, 0x50, 0x98,
++ 0x64, 0x10, 0x64, 0x08, 0x30, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x28, 0x29, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x48, 0x50, 0xfc, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x17, 0x10,
++ 0x10, 0x10, 0x20, 0x20, 0x4f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0x80, 0x80, 0xf8, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x22, 0x3e, 0x22,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x88, 0x54, 0x30, 0x90, 0x50,
++ 0x50, 0x1c, 0xf0, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x7d, 0x11, 0x11, 0x11, 0x1d,
++ 0x72, 0x12, 0x12, 0x14, 0x15, 0x3e, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x20, 0x20, 0xf8, 0x88, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x28, 0x48, 0x0e, 0x12, 0x12,
++ 0x2a, 0x44, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xf8, 0x88, 0x88,
++ 0x88, 0xb0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x08, 0x13, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2b, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0c, 0x0a, 0x0f, 0x71, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x80, 0x80, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x78, 0x00, 0x00,
++ 0x08, 0x0c, 0x12, 0x2a, 0x48, 0x3e, 0x23, 0x3e,
++ 0x22, 0x3e, 0x24, 0x26, 0x3a, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x50, 0x48, 0x9c, 0xe4, 0x00,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x11, 0x11, 0x15, 0x65, 0x1a, 0x13, 0x29, 0x7d,
++ 0x15, 0x19, 0x35, 0x34, 0x50, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0xe8, 0x28, 0xe8,
++ 0x28, 0xe8, 0x28, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x64, 0x1f, 0x10, 0x29, 0x7e,
++ 0x14, 0x39, 0x36, 0x34, 0x51, 0x16, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0xa0, 0x24, 0x9c,
++ 0xf0, 0x90, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x3c, 0x20, 0x20, 0x20, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7f, 0x00, 0x1e, 0x12, 0x12,
++ 0x1e, 0x10, 0x03, 0x0c, 0x71, 0x06, 0x00, 0x00,
++ 0x90, 0x88, 0x88, 0xfc, 0x80, 0x88, 0x88, 0x48,
++ 0x50, 0x30, 0x24, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x1f, 0x12, 0x12, 0x1f, 0x09,
++ 0x05, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0x90, 0x90, 0xf0, 0x20,
++ 0x40, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x09, 0x0b, 0x12, 0x3c,
++ 0x55, 0x13, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x42, 0x02, 0x7f, 0x04,
++ 0x04, 0x0f, 0x08, 0x01, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0x00, 0xfc, 0x40,
++ 0x40, 0x40, 0xc0, 0x20, 0x10, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x11, 0x1f, 0x12, 0x14, 0x1f,
++ 0x14, 0x17, 0x24, 0x27, 0x44, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xfc, 0xa0, 0x90, 0xfc,
++ 0x90, 0xf0, 0x90, 0xf0, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x14, 0x10, 0x17, 0x18,
++ 0x70, 0x11, 0x11, 0x10, 0x10, 0x37, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x40, 0x40, 0xfc, 0x90,
++ 0x90, 0x90, 0x60, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x49, 0x48, 0x4f, 0x78, 0x49,
++ 0x49, 0x49, 0x79, 0x49, 0x41, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x7f, 0x04, 0x0f, 0x03,
++ 0x1d, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xf8, 0x40, 0x80, 0x60,
++ 0x10, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x3e, 0x21, 0x2f, 0x22,
++ 0x3f, 0x27, 0x24, 0x27, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0x08, 0xe8, 0x88,
++ 0xf8, 0xc8, 0x48, 0xc8, 0xc8, 0x58, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1d, 0x08, 0x3f, 0x2a,
++ 0x3e, 0x08, 0x7e, 0x08, 0x08, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x20, 0x20, 0xfc, 0x48,
++ 0x48, 0xf0, 0x90, 0x28, 0x44, 0x84, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01,
++ 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x12, 0x11, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x16, 0x18, 0x61, 0x06, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0x90, 0x90, 0x10, 0x10,
++ 0x10, 0x30, 0x28, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x10, 0x17, 0x30, 0x50, 0x13,
++ 0x10, 0x10, 0x10, 0x10, 0x11, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xfc, 0x48, 0x48, 0xf8,
++ 0x48, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x10, 0x1f, 0x30, 0x52, 0x11,
++ 0x11, 0x11, 0x11, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0xfc, 0x10, 0x10, 0x10,
++ 0x10, 0x20, 0x20, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x10, 0x30, 0x51, 0x13,
++ 0x15, 0x11, 0x11, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x80, 0xc8, 0x48, 0x50,
++ 0x20, 0x20, 0x10, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x17, 0x10, 0x33, 0x52, 0x13,
++ 0x10, 0x13, 0x12, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0xf0, 0x90, 0xfc, 0x00, 0xf0, 0x10, 0xf0,
++ 0x20, 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x22, 0x22, 0x2f, 0x22, 0x22,
++ 0x3f, 0x22, 0x24, 0x28, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x48, 0x48, 0xe8, 0x48, 0x48,
++ 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x3f, 0x01, 0x3f, 0x21,
++ 0x3f, 0x23, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00,
++ 0xfc, 0x04, 0x84, 0x58, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x02,
++ 0x7f, 0x04, 0x0f, 0x10, 0x03, 0x3c, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00,
++ 0xfc, 0x40, 0x40, 0xc0, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x1f, 0x12, 0x1f, 0x14,
++ 0x14, 0x1f, 0x11, 0x22, 0x2c, 0x40, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xc8, 0x48, 0xc8, 0xd0,
++ 0xb0, 0x30, 0x24, 0xd4, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x3f, 0x20, 0x3e, 0x20, 0x3f,
++ 0x24, 0x2e, 0x2d, 0x35, 0x44, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0xfc, 0x08, 0x48, 0x28,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x19, 0x37, 0x35, 0x31, 0x51,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x90, 0x90, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x04, 0x7f, 0x00, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x25, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x00, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x08, 0x84, 0x24, 0xe0, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x3f, 0x2e, 0x20, 0x3f, 0x56,
++ 0x25, 0x4d, 0x04, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x90, 0x50, 0x50, 0x10,
++ 0x10, 0x30, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x02, 0x07,
++ 0x19, 0x62, 0x0c, 0x31, 0x06, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x00, 0xf8,
++ 0x28, 0x48, 0x88, 0x08, 0x10, 0xe0, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x29, 0x29, 0x49, 0x09, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x60, 0x50, 0x88, 0xfc, 0x08,
++ 0xe8, 0x28, 0xe8, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x3f, 0x02, 0x02, 0x07, 0x04,
++ 0x0f, 0x08, 0x15, 0x32, 0x4a, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x20, 0x40, 0xf0, 0x10,
++ 0xfc, 0x04, 0x44, 0xa4, 0xa4, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x00, 0x7f,
++ 0x09, 0x08, 0x08, 0x0b, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x10, 0x90, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x04, 0x3f,
++ 0x04, 0x04, 0x7f, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x40, 0xf8,
++ 0x40, 0x40, 0xfc, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x02, 0x0c, 0x38, 0x09, 0x08, 0x7e, 0x09, 0x1c,
++ 0x1a, 0x2a, 0x49, 0x08, 0x08, 0x0b, 0x00, 0x00,
++ 0x40, 0x78, 0x88, 0x50, 0x20, 0x40, 0xa0, 0x3c,
++ 0x44, 0xa8, 0x18, 0x10, 0x60, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x15, 0x08, 0x14, 0x7e,
++ 0x0a, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x08, 0x09, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2b, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0xf8, 0x48, 0xfc, 0x00, 0xf8, 0x88, 0xf8,
++ 0x10, 0xf8, 0x90, 0xfc, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x3f, 0x21, 0x3f, 0x00, 0x1f,
++ 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x01, 0x7f, 0x05, 0x19,
++ 0x62, 0x3f, 0x04, 0x0f, 0x03, 0x3c, 0x00, 0x00,
++ 0x40, 0xfc, 0x60, 0xc0, 0x00, 0xfc, 0x40, 0x30,
++ 0x0c, 0xf8, 0x40, 0x80, 0x60, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x01, 0x03, 0x04, 0x1c,
++ 0x64, 0x04, 0x04, 0x05, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x08, 0x88, 0x90,
++ 0x60, 0x40, 0x20, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3d, 0x01, 0x7f, 0x01, 0x3d, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0xfc, 0x24, 0xfc, 0x24, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x23, 0x10, 0x17, 0x01, 0x01, 0x71, 0x10,
++ 0x11, 0x11, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf0, 0x90, 0xfc, 0xf0, 0x10, 0xf0, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0xfc, 0x00, 0x00,
++ 0x00, 0x21, 0x11, 0x11, 0x07, 0x01, 0x71, 0x11,
++ 0x11, 0x11, 0x11, 0x1b, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf0, 0x50, 0xf0, 0xfc, 0xf0, 0x10, 0xf0,
++ 0xf0, 0x10, 0xf0, 0x10, 0x08, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x22, 0x27, 0x24, 0x28, 0x3f,
++ 0x21, 0x21, 0x22, 0x2c, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xf0, 0x80, 0x80, 0xf8,
++ 0x40, 0x20, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x3f, 0x04, 0x04, 0x04,
++ 0x7f, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x02, 0x1a, 0x04, 0x03,
++ 0x02, 0x0c, 0x11, 0x06, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x40, 0x40, 0x90, 0x20,
++ 0x40, 0xc0, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x17, 0x10, 0x7f, 0x12, 0x12,
++ 0x13, 0x16, 0x18, 0x63, 0x0c, 0x00, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0xfc, 0x40, 0xc8, 0xc8, 0xa8,
++ 0xa8, 0x30, 0x94, 0x34, 0x4c, 0x84, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x04, 0x3f, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0x70, 0x88, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x08, 0x08, 0x1f, 0x11, 0x3f,
++ 0x51, 0x1f, 0x11, 0x11, 0x11, 0x13, 0x00, 0x00,
++ 0x00, 0x78, 0xc8, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x7d, 0x12, 0x16, 0x11, 0x3a, 0x2f, 0x68,
++ 0x2b, 0x2b, 0x3a, 0x2a, 0x04, 0x08, 0x00, 0x00,
++ 0x50, 0x50, 0x68, 0xd8, 0x50, 0xe8, 0xfc, 0x50,
++ 0xfc, 0x28, 0xa8, 0x94, 0x2c, 0xc4, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x00, 0x3f, 0x24,
++ 0x44, 0x07, 0x04, 0x04, 0x04, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xfc, 0x08,
++ 0x60, 0x80, 0x00, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x24, 0x12, 0x12, 0x4f, 0x22, 0x22, 0x04, 0x1f,
++ 0x15, 0x15, 0x25, 0x25, 0x5f, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x20, 0x20, 0x10, 0xf8,
++ 0x54, 0x50, 0x50, 0x50, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x11, 0x12, 0x07, 0x02, 0x72, 0x13,
++ 0x12, 0x10, 0x11, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0xc8, 0xc0, 0x44, 0x3c, 0x00, 0xfc, 0x00, 0x00,
++ 0x02, 0x0f, 0x3a, 0x09, 0x09, 0x7e, 0x19, 0x1d,
++ 0x2b, 0x2b, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x18, 0xe4, 0x44, 0x28, 0x30, 0x00, 0x78, 0x48,
++ 0x48, 0x78, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x21, 0x11, 0x11,
++ 0x02, 0x04, 0x18, 0x61, 0x06, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xfc, 0x48,
++ 0x50, 0x40, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x1f, 0x01, 0x01,
++ 0x7f, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x00, 0x00,
++ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x1e, 0x24, 0x7f, 0x2b, 0x3f, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2f, 0x28, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x20, 0xf8, 0x48,
++ 0x68, 0xd8, 0xd8, 0x68, 0x48, 0xb0, 0x00, 0x00,
++ 0x02, 0x02, 0x04, 0x08, 0x7f, 0x04, 0x04, 0x04,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x40, 0x30, 0x68, 0x84, 0x80, 0x80, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x06, 0x38, 0x20, 0x20, 0x3e, 0x20, 0x20,
++ 0x20, 0x3e, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0xf0, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4a, 0x4a, 0x4b, 0x4a, 0x4a,
++ 0x4a, 0x7a, 0x4b, 0x42, 0x03, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x48, 0x48,
++ 0xa8, 0x98, 0x18, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x00, 0x1f, 0x10, 0x1f,
++ 0x10, 0x1f, 0x10, 0x1f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x21, 0x3f, 0x21, 0x23,
++ 0x22, 0x24, 0x28, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x08,
++ 0x88, 0x48, 0x28, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x25,
++ 0x79, 0x49, 0x0d, 0x15, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x48, 0x48,
++ 0x68, 0x98, 0x98, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x3f, 0x21, 0x20, 0x3f,
++ 0x21, 0x01, 0x01, 0x01, 0x02, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1a, 0x29, 0x7e, 0x23, 0x3e,
++ 0x22, 0x3e, 0x28, 0x24, 0x3b, 0x62, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa8, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x44, 0x22, 0x22, 0x03, 0x10,
++ 0x10, 0x13, 0x20, 0x20, 0x4f, 0x40, 0x00, 0x00,
++ 0x0c, 0x74, 0x84, 0x88, 0x50, 0x38, 0xc0, 0x40,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x1e, 0x12, 0x11, 0x1f, 0x10, 0x17,
++ 0x14, 0x17, 0x14, 0x27, 0x24, 0x44, 0x00, 0x00,
++ 0x10, 0x50, 0x50, 0x90, 0x50, 0xf0, 0x30, 0xd0,
++ 0x50, 0xd0, 0x50, 0xd4, 0x54, 0xcc, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3c, 0x27, 0x2c, 0x31, 0x28,
++ 0x25, 0x24, 0x27, 0x38, 0x21, 0x23, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xa0, 0xf0, 0x0c, 0xf0, 0x20,
++ 0xf8, 0x00, 0xfc, 0xa0, 0x30, 0xc8, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x2a, 0x30, 0x2b, 0x24, 0x27,
++ 0x24, 0x24, 0x39, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x00, 0xf8, 0x00, 0xfc,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x29, 0x32, 0x28, 0x25, 0x24,
++ 0x25, 0x24, 0x3f, 0x20, 0x21, 0x27, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xe8, 0x04, 0xf0, 0x20,
++ 0xf0, 0x00, 0xfc, 0xa0, 0x30, 0xc8, 0x00, 0x00,
++ 0x00, 0x3f, 0x26, 0x29, 0x31, 0x28, 0x25, 0x24,
++ 0x25, 0x24, 0x3a, 0x22, 0x24, 0x20, 0x00, 0x00,
++ 0x18, 0xe4, 0x44, 0x28, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xa8, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x22, 0x14, 0x7f, 0x00, 0x3c,
++ 0x24, 0x3c, 0x24, 0x24, 0x3c, 0x27, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x00, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x48, 0x4f, 0x48, 0x49, 0x48,
++ 0x48, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x90,
++ 0x90, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x7f, 0x04, 0x04, 0x08, 0x0f,
++ 0x18, 0x18, 0x28, 0x48, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x40, 0x1f, 0x01, 0x01,
++ 0x7f, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xf0, 0x00, 0x00,
++ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x29, 0x24, 0x24, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x00, 0xfc,
++ 0x00, 0xf8, 0x48, 0xa8, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x02, 0x22, 0x12, 0x12, 0x02,
++ 0x06, 0x1a, 0x63, 0x02, 0x02, 0x06, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x88, 0x48, 0x48, 0x08,
++ 0x18, 0x68, 0x88, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x23, 0x10, 0x10, 0x00, 0x07, 0x70, 0x10,
++ 0x10, 0x10, 0x10, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0xc0, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x3f, 0x29, 0x25, 0x25,
++ 0x21, 0x29, 0x25, 0x25, 0x21, 0x21, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x48, 0x28, 0x28,
++ 0x08, 0x48, 0x28, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x02, 0x0c, 0x30, 0x22, 0x22, 0x22, 0x22, 0x22,
++ 0x22, 0x3e, 0x64, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0xf0, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x24, 0x14, 0x18, 0x7e, 0x0a, 0x3e, 0x28, 0x3e,
++ 0x3a, 0x1a, 0x2e, 0x49, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x48, 0x19, 0x09, 0x3f, 0x09,
++ 0x7f, 0x09, 0x15, 0x14, 0x21, 0x46, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x78, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x1f, 0x02, 0x02, 0x02, 0x02, 0x3f, 0x04,
++ 0x04, 0x04, 0x04, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x11, 0x11, 0x3f, 0x25, 0x65,
++ 0x25, 0x25, 0x3d, 0x25, 0x21, 0x01, 0x00, 0x00,
++ 0x90, 0x90, 0xa0, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x06, 0x38, 0x20, 0x20, 0x20, 0x20, 0x3e,
++ 0x20, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x22, 0x22, 0x07, 0x14,
++ 0x15, 0x15, 0x25, 0x25, 0x44, 0x44, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x90, 0x90, 0xf8, 0x08,
++ 0xe8, 0x28, 0xe8, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x70, 0x57, 0x54, 0x57, 0x54, 0x54,
++ 0x56, 0x75, 0x49, 0x08, 0x17, 0x00, 0x00, 0x00,
++ 0x80, 0xf8, 0x80, 0xfc, 0xf8, 0x88, 0x78, 0xa0,
++ 0xa8, 0xa8, 0xb0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x3d, 0x25, 0x25, 0x25, 0x25, 0x25,
++ 0x25, 0x3d, 0x25, 0x20, 0x03, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x12, 0x7d, 0x3a, 0x55, 0x1f, 0x12, 0x1f, 0x3e,
++ 0x23, 0x3e, 0x3e, 0x24, 0x3e, 0x60, 0x00, 0x00,
++ 0x90, 0xfc, 0xb8, 0xd4, 0xf0, 0x90, 0xf0, 0x10,
++ 0xfc, 0x90, 0x50, 0x50, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x21, 0x3f, 0x20, 0x2e,
++ 0x20, 0x3f, 0x2e, 0x2d, 0x55, 0x0c, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x08, 0x08, 0xfc, 0x08, 0x48,
++ 0x28, 0x28, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3f, 0x2b,
++ 0x3f, 0x04, 0x3a, 0x2e, 0x28, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc, 0x54,
++ 0xfc, 0xf8, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x10, 0x7c, 0x27, 0x24, 0x24,
++ 0x78, 0x49, 0x0e, 0x14, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x48, 0xf8, 0x50, 0x50, 0xfc, 0x20, 0xc0,
++ 0x98, 0xe0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x2f, 0x29, 0x2f, 0x29, 0x2f,
++ 0x28, 0x2a, 0x29, 0x2b, 0x4c, 0x31, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x78, 0x50, 0x50, 0x50, 0xfc,
++ 0x30, 0x30, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x40, 0x23, 0x22, 0x02, 0x0b,
++ 0x0a, 0x0a, 0x13, 0x12, 0x22, 0x22, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x09, 0x09, 0x09, 0x09, 0x09,
++ 0x09, 0x09, 0x11, 0x11, 0x2e, 0x40, 0x00, 0x00,
++ 0x10, 0xe0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x10, 0x90, 0x50, 0xe8, 0x28, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x2f,
++ 0x21, 0x27, 0x21, 0x2f, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xe8,
++ 0x08, 0xc8, 0x08, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x00, 0x7f, 0x48, 0x4b, 0x4a, 0x4b, 0x4b,
++ 0x4b, 0x78, 0x4f, 0x41, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0x38, 0xf8,
++ 0xf8, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x00, 0x7f, 0x01, 0x01,
++ 0x01, 0x02, 0x02, 0x04, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x40, 0x20, 0x10, 0x70, 0x88, 0x08, 0x00, 0x00,
++ 0x00, 0x27, 0x14, 0x1f, 0x00, 0x03, 0x72, 0x13,
++ 0x12, 0x13, 0x10, 0x17, 0x2c, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x21, 0x3d, 0x4f, 0x00,
++ 0x1f, 0x00, 0x7f, 0x02, 0x04, 0x3f, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x04, 0x78, 0x38, 0x00,
++ 0xf0, 0x00, 0xfc, 0x20, 0xf0, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x0b, 0x10, 0x10,
++ 0x37, 0x50, 0x10, 0x10, 0x13, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x18, 0xe0, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x08, 0x0d, 0x12, 0x2a, 0x48, 0x3e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x24, 0x27, 0x3a, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x48, 0x78, 0x48, 0x48, 0x78,
++ 0x48, 0x4c, 0x78, 0x88, 0x08, 0x08, 0x00, 0x00,
++ 0x0e, 0x08, 0x7f, 0x5d, 0x5a, 0x2d, 0x52, 0x1f,
++ 0x32, 0x5e, 0x12, 0x1e, 0x12, 0x1f, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x48, 0x48, 0x50, 0x50, 0x30,
++ 0x20, 0x30, 0x50, 0x48, 0x88, 0x04, 0x00, 0x00,
++ 0x12, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x08, 0x0f,
++ 0x02, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0x20, 0xe0,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x3e,
++ 0x15, 0x7f, 0x04, 0x0f, 0x01, 0x3e, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x50, 0xfc, 0x20, 0x40, 0xe0, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x04, 0x7f,
++ 0x1f, 0x11, 0x1f, 0x15, 0x64, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x20, 0x48, 0x08, 0x10, 0x90,
++ 0x24, 0x04, 0x08, 0x08, 0x90, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4b, 0x4a, 0x4a, 0x7a, 0x4f,
++ 0x48, 0x48, 0x78, 0x49, 0x02, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xfc,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x1f,
++ 0x11, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf8,
++ 0x10, 0xa0, 0xc0, 0x44, 0x34, 0x0c, 0x00, 0x00,
++ 0x12, 0x09, 0x09, 0x3f, 0x20, 0x41, 0x01, 0x7f,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x08, 0x00, 0x00, 0xfc,
++ 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x00, 0x00, 0x0f, 0x01, 0x01, 0x7f, 0x05,
++ 0x05, 0x09, 0x11, 0x61, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x80, 0x00, 0x00, 0x08, 0x88, 0x90, 0x60,
++ 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x43, 0x20, 0x20, 0x07, 0x10,
++ 0x11, 0x11, 0x22, 0x24, 0x40, 0x40, 0x00, 0x00,
++ 0xc0, 0x20, 0x00, 0xc0, 0x48, 0x48, 0xf0, 0xe0,
++ 0x50, 0x50, 0x48, 0x44, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x22, 0x23, 0x02, 0x0b,
++ 0x0a, 0x08, 0x10, 0x10, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x30, 0x20, 0xd4, 0x0c, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x11, 0x10, 0x13, 0x7e, 0x12,
++ 0x17, 0x10, 0x1c, 0x60, 0x03, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0x40, 0xf8, 0x48, 0x48,
++ 0xfc, 0x40, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x04, 0x04, 0x0f, 0x0c, 0x13, 0x22,
++ 0x4c, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x40, 0xf8, 0x88, 0x08, 0x88,
++ 0x70, 0xf0, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x20, 0x25, 0x38, 0x22, 0x1c, 0x02, 0x3c, 0x08,
++ 0x7e, 0x18, 0x1c, 0x2a, 0x48, 0x0b, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x20, 0x25, 0x38, 0x22, 0x1e, 0x00, 0x3e, 0x00,
++ 0x7f, 0x0c, 0x2a, 0x2a, 0x48, 0x1b, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x01, 0x1f, 0x11, 0x11,
++ 0x11, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x10, 0x10,
++ 0x10, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x11, 0x17, 0x22, 0x4f, 0x08, 0x17, 0x14, 0x37,
++ 0x51, 0x17, 0x15, 0x1f, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xb8, 0x80, 0xc0, 0x7c, 0x90, 0x90, 0x90,
++ 0x10, 0x90, 0x10, 0xd0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3c, 0x01, 0x3c,
++ 0x00, 0x3c, 0x25, 0x26, 0x3c, 0x20, 0x00, 0x00,
++ 0x40, 0x20, 0x20, 0xe0, 0x28, 0x28, 0xf0, 0x70,
++ 0xb0, 0xa8, 0x28, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0xf8, 0x88, 0x88, 0x88, 0xf8,
++ 0x50, 0x50, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x41, 0x21, 0x22, 0x02, 0x16,
++ 0x1b, 0x12, 0x22, 0x22, 0x42, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x78, 0x48, 0xa8, 0x98,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x29, 0x29, 0x09, 0x1a,
++ 0x2f, 0x49, 0x10, 0x10, 0x21, 0x4e, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xe0, 0x24, 0x24, 0x1c,
++ 0xf0, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x7f, 0x08, 0x08, 0x10, 0x1f,
++ 0x2a, 0x4a, 0x0a, 0x0a, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xfc, 0x20, 0x20, 0x10, 0xf0,
++ 0xa8, 0xa4, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3a, 0x33, 0x45, 0x1a, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0xa8, 0xa0,
++ 0xa0, 0x90, 0x90, 0x08, 0x08, 0x04, 0x00, 0x00,
++ 0x11, 0x10, 0x10, 0x1b, 0x36, 0x36, 0x33, 0x52,
++ 0x10, 0x11, 0x11, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xf8, 0x08, 0x08, 0xf8, 0xa8,
++ 0xa0, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3d, 0x01, 0x7f, 0x01, 0x3d, 0x00, 0x3d,
++ 0x03, 0x3d, 0x25, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x80, 0xf8,
++ 0x28, 0xc8, 0x28, 0xe8, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x09, 0x09, 0x7f, 0x09, 0x29,
++ 0x2f, 0x29, 0x3b, 0x28, 0x46, 0x41, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0x28, 0x28, 0x30,
++ 0x50, 0x94, 0x2c, 0x44, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x24, 0x22,
++ 0x27, 0x24, 0x27, 0x22, 0x24, 0x28, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x48, 0x88,
++ 0xc8, 0x48, 0xc8, 0x88, 0xa8, 0x78, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x28, 0x4b, 0x08, 0x09, 0x0e, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x08, 0xf8, 0xf8, 0x08,
++ 0xf8, 0xf8, 0x90, 0x60, 0xb0, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x2f, 0x29, 0x2f, 0x2f, 0x20,
++ 0x2f, 0x29, 0x2f, 0x2f, 0x29, 0x4b, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x28, 0x24, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x70, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3f,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x2f, 0x21, 0x3f, 0x27, 0x24,
++ 0x27, 0x23, 0x2d, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xe8, 0x08, 0xf8, 0xc8, 0x48,
++ 0xe8, 0xa8, 0x48, 0x28, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x12, 0x7e, 0x12, 0x12, 0x12,
++ 0x16, 0x1b, 0x62, 0x02, 0x02, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x20, 0xfc, 0xd0, 0x30, 0xc8, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x0d, 0x71, 0x1f, 0x11,
++ 0x1f, 0x11, 0x1f, 0x11, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x60, 0x1c, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x14, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x01, 0x7f, 0x04, 0x0e, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0x00, 0xfc, 0x40, 0x80, 0xc0, 0x30, 0x00, 0x00,
++ 0x00, 0x78, 0x0b, 0x10, 0x10, 0x3d, 0x05, 0x25,
++ 0x25, 0x15, 0x1b, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0x1c, 0xe0, 0x20, 0x20, 0x20, 0x38, 0x20,
++ 0x20, 0x20, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x11, 0x2a, 0x46, 0x04, 0x18,
++ 0x61, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0xb0, 0x84, 0x7c,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x11, 0x12, 0x1f, 0x12,
++ 0x33, 0x52, 0x13, 0x12, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x50, 0x48, 0xfc, 0x48,
++ 0xf8, 0x48, 0xf8, 0x48, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x11, 0x13, 0x10, 0x1f,
++ 0x71, 0x11, 0x12, 0x14, 0x18, 0x33, 0x00, 0x00,
++ 0x08, 0x30, 0xc8, 0x48, 0x10, 0xf8, 0x80, 0xfc,
++ 0x00, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x09, 0x41, 0x21, 0x22, 0x02, 0x17,
++ 0x12, 0x12, 0x22, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0xe0, 0x20, 0x20, 0x20, 0x10, 0x10, 0x08, 0xf4,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x44, 0x2f, 0x20, 0x03, 0x12,
++ 0x13, 0x12, 0x23, 0x20, 0x43, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xfc, 0x40, 0xf8, 0x48,
++ 0xf8, 0x48, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x13, 0x02, 0x0c, 0x31, 0x01,
++ 0x11, 0x13, 0x22, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x00, 0xc0, 0x30, 0x08, 0x10,
++ 0x10, 0x20, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x0a, 0x2b, 0x2c, 0x29, 0x49,
++ 0x09, 0x0d, 0x13, 0x13, 0x21, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x10, 0x20, 0x78, 0x48,
++ 0x48, 0x78, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x17, 0x36, 0x3a, 0x33, 0x52,
++ 0x18, 0x17, 0x24, 0x20, 0x47, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0x48,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x0f, 0x78, 0x0b, 0x1a,
++ 0x6a, 0x0b, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xe4, 0x28, 0xb0, 0xa0,
++ 0xa4, 0x9c, 0x90, 0x48, 0x44, 0x04, 0x00, 0x00,
++ 0x08, 0x4b, 0x30, 0x17, 0x30, 0x49, 0x09, 0x19,
++ 0x28, 0x4f, 0x09, 0x09, 0x31, 0x16, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0,
++ 0xc8, 0x48, 0x30, 0x10, 0xc8, 0x04, 0x00, 0x00,
++ 0x10, 0x11, 0x14, 0x65, 0x18, 0x1b, 0x24, 0x7c,
++ 0x13, 0x38, 0x37, 0x34, 0x53, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xfc, 0x40, 0xe4,
++ 0x68, 0xb0, 0x70, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x14, 0x7f, 0x55, 0x7f, 0x55, 0x7f, 0x00, 0x7f,
++ 0x3e, 0x22, 0x3e, 0x24, 0x1e, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0x78, 0x90, 0x20, 0xf8, 0xa8, 0xa8,
++ 0xf8, 0x88, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x1e, 0x12,
++ 0x22, 0x54, 0x0c, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x88, 0x88,
++ 0x88, 0xb0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x21, 0x27, 0x3f, 0x24,
++ 0x27, 0x23, 0x2e, 0x22, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x08, 0xc8, 0xf8, 0x48,
++ 0xe8, 0xa8, 0x48, 0x28, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x23, 0x10, 0x17, 0x00, 0x03, 0x72, 0x13,
++ 0x10, 0x11, 0x1e, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x00, 0xf8, 0x08, 0xf8,
++ 0x88, 0xd0, 0xb0, 0x88, 0x80, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x70, 0x10, 0x90, 0x90, 0x88, 0x08, 0x04, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x1f, 0x72, 0x0c, 0x1a, 0x6f, 0x0b, 0x0f,
++ 0x0f, 0x08, 0x0f, 0x15, 0x25, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xb0, 0x84, 0xfc, 0xc0, 0xc0,
++ 0xf8, 0x00, 0xf8, 0x48, 0x28, 0x30, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x12, 0x7f, 0x15, 0x11, 0x10,
++ 0x17, 0x1a, 0x62, 0x02, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x0f, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x42, 0x0c, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x50, 0x50, 0x88, 0x44, 0x20,
++ 0x20, 0x00, 0x40, 0x20, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x40, 0x27, 0x20, 0x00, 0x09,
++ 0x09, 0x08, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0xfc, 0x80, 0x80, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x08, 0x2b, 0x2a, 0x3e, 0x2b, 0x4a, 0x0a, 0x3f,
++ 0x08, 0x0b, 0x0c, 0x18, 0x61, 0x06, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x48, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x24, 0x24, 0x24, 0x27,
++ 0x24, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x48, 0x48, 0x48, 0xc8,
++ 0x48, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x11, 0x11, 0x11, 0x11,
++ 0x7f, 0x03, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10,
++ 0xfc, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x02, 0x1f, 0x19, 0x15, 0x15, 0x1f, 0x13,
++ 0x15, 0x19, 0x7f, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x50, 0x50, 0x90, 0xf0, 0x90,
++ 0x50, 0x30, 0xfc, 0x80, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x10, 0x27, 0x44, 0x08, 0x08, 0x1b,
++ 0x28, 0x48, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x80, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x10, 0x11, 0x11, 0x15,
++ 0x15, 0x15, 0x29, 0x29, 0x41, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0x40, 0x20, 0x20, 0x08,
++ 0x04, 0x04, 0x04, 0x10, 0x10, 0xf0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x13, 0x12, 0x12, 0x1f,
++ 0x72, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x44, 0x44, 0x44, 0x7c, 0x47, 0x44,
++ 0x44, 0x7c, 0x44, 0x40, 0x07, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x17, 0x10, 0x3b, 0x36,
++ 0x37, 0x52, 0x53, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0xa0, 0xa0, 0xf8, 0xa0, 0xfc, 0x40, 0xf8, 0x48,
++ 0xf8, 0x48, 0xf8, 0xa0, 0x10, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x22, 0x32, 0x2b, 0x24, 0x26,
++ 0x2a, 0x29, 0x31, 0x20, 0x3f, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x22, 0x32, 0x2a, 0x25, 0x24,
++ 0x2a, 0x2a, 0x30, 0x20, 0x3e, 0x23, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x50, 0x54, 0x94, 0x0c, 0xf8,
++ 0x48, 0x50, 0x30, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x1f, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x05, 0x04, 0x19, 0x61, 0x02, 0x3f, 0x00, 0x7f,
++ 0x22, 0x12, 0x06, 0x1a, 0x63, 0x06, 0x00, 0x00,
++ 0xe0, 0x20, 0x10, 0xcc, 0x60, 0x90, 0x00, 0xf8,
++ 0x88, 0x48, 0x18, 0x68, 0x88, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7f, 0x0a, 0x0b, 0x16, 0x1b,
++ 0x36, 0x57, 0x10, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x58, 0xe8, 0xf8, 0xe8, 0x58,
++ 0x48, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x12, 0x09, 0x3f, 0x22, 0x4f, 0x08, 0x0f, 0x0f,
++ 0x0f, 0x08, 0x0f, 0x29, 0x24, 0x40, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0xe0,
++ 0xfc, 0x00, 0xf8, 0x48, 0xa8, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x22, 0x22, 0x32, 0x2c, 0x24,
++ 0x26, 0x2a, 0x30, 0x21, 0x3f, 0x22, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x7f, 0x01, 0x1f, 0x11,
++ 0x1f, 0x11, 0x1f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x24, 0x24, 0x3f, 0x21, 0x29,
++ 0x29, 0x29, 0x2f, 0x28, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x88, 0xf8, 0x08, 0x28,
++ 0x28, 0x28, 0xe8, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x43, 0x22, 0x22, 0x02, 0x0a,
++ 0x0b, 0x0a, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x04, 0x34, 0x08, 0x18,
++ 0x65, 0x0d, 0x14, 0x64, 0x05, 0x1a, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x20, 0x28, 0xa8, 0xb0,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x17, 0x10, 0x31, 0x51, 0x11,
++ 0x11, 0x11, 0x15, 0x15, 0x19, 0x10, 0x00, 0x00,
++ 0x40, 0xf8, 0xa0, 0xfc, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x48, 0x24, 0x14, 0xf0, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x11, 0x12,
++ 0x1f, 0x10, 0x27, 0x20, 0x5f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8, 0x40, 0x30,
++ 0xc8, 0x80, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x17, 0x38, 0x35, 0x35, 0x51,
++ 0x11, 0x11, 0x15, 0x15, 0x19, 0x10, 0x00, 0x00,
++ 0x40, 0xf8, 0x10, 0xfc, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x48, 0x24, 0x14, 0xf0, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x27, 0x3c, 0x25, 0x25, 0x3d,
++ 0x25, 0x25, 0x24, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x20, 0xfc, 0x90, 0xfc, 0x00, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0xa8, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x13, 0x12, 0x3a, 0x37,
++ 0x36, 0x52, 0x53, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x60, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x08, 0x08, 0x28, 0x28, 0x3e, 0x29, 0x28, 0x48,
++ 0x0e, 0x78, 0x08, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08,
++ 0x10, 0x20, 0x20, 0x20, 0x1f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0x08, 0xf8, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x11, 0x12, 0x34, 0x5f, 0x14,
++ 0x17, 0x14, 0x17, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x40, 0xa0, 0x98, 0xf4, 0x90,
++ 0xf0, 0x90, 0xf0, 0x94, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x24, 0x44, 0x7f, 0x04, 0x27,
++ 0x24, 0x24, 0x27, 0x3c, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x48, 0xc8, 0x48, 0x48,
++ 0x48, 0x48, 0x70, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x12, 0x1c, 0x1f,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xd0, 0x30, 0xf0,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x02, 0x10,
++ 0x17, 0x15, 0x25, 0x25, 0x4f, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00,
++ 0xf8, 0x28, 0x28, 0x28, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x1b, 0x72, 0x11, 0x11, 0x7c, 0x11, 0x18,
++ 0x35, 0x34, 0x52, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x18, 0xe8, 0x48, 0x10, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xa8, 0x84, 0x94, 0x70, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x08, 0x04, 0x7f, 0x00, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x20, 0x40, 0xfc, 0x00, 0xe0,
++ 0x20, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10,
++ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x08, 0x08, 0x18, 0x28, 0x48,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0x88, 0x88, 0x90, 0xa0, 0xc0, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x32, 0x52, 0x12,
++ 0x12, 0x12, 0x14, 0x14, 0x19, 0x16, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x10, 0x13, 0x32, 0x52, 0x12,
++ 0x13, 0x12, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xc8, 0x48, 0x48, 0x48,
++ 0xc8, 0x48, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x0a, 0x0a, 0x0a, 0x1f, 0x12, 0x32, 0x52, 0x12,
++ 0x12, 0x12, 0x14, 0x14, 0x19, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x38, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xb8, 0xa8, 0x00, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x10, 0x10, 0x33, 0x52, 0x12,
++ 0x12, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x13, 0x10, 0x30, 0x57, 0x10,
++ 0x10, 0x13, 0x10, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7f, 0x09, 0x09, 0x09,
++ 0x09, 0x09, 0x11, 0x11, 0x21, 0x46, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7c, 0x44, 0x44, 0x44, 0x44,
++ 0x44, 0x44, 0x44, 0x7c, 0x44, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x00, 0x1f, 0x11, 0x11, 0x11,
++ 0x1f, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x00, 0x0f, 0x08, 0x0f,
++ 0x04, 0x7f, 0x04, 0x3f, 0x09, 0x33, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xe0, 0x20, 0xe0,
++ 0x40, 0xfc, 0x00, 0x78, 0x48, 0x78, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x0f, 0x08, 0x0f, 0x0f, 0x08,
++ 0x0f, 0x07, 0x3c, 0x03, 0x06, 0x78, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x40, 0x80, 0xe0, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x12, 0x7f, 0x24, 0x24, 0x27,
++ 0x78, 0x4b, 0x0c, 0x17, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xfc, 0x40, 0xe4, 0x68,
++ 0xb0, 0x70, 0xa8, 0x24, 0x20, 0xc0, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x7f, 0x02, 0x0d, 0x33,
++ 0x0d, 0x32, 0x04, 0x18, 0x60, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xf8, 0x00, 0x48, 0xc8,
++ 0xb0, 0xa0, 0x90, 0x88, 0x84, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x2f, 0x42, 0x0f, 0x08, 0x0f, 0x0f,
++ 0x0f, 0x7f, 0x0f, 0x72, 0x04, 0x19, 0x00, 0x00,
++ 0x00, 0xfc, 0xe8, 0x00, 0xe0, 0x20, 0xe0, 0xe0,
++ 0xe0, 0xfc, 0xe0, 0x5c, 0x40, 0x80, 0x00, 0x00,
++ 0x02, 0x0c, 0x38, 0x08, 0x09, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2b, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x90, 0x50, 0x50, 0x10, 0x90, 0x90, 0x1c,
++ 0x70, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x07, 0x74, 0x54, 0x57, 0x54, 0x74, 0x57,
++ 0x54, 0x54, 0x77, 0x54, 0x44, 0x04, 0x00, 0x00,
++ 0x00, 0xb8, 0x88, 0x88, 0xb8, 0x88, 0x00, 0x78,
++ 0x48, 0x28, 0x30, 0x10, 0x28, 0xc4, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x1f, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x7e, 0x12, 0x12, 0x22, 0x4d, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x3a, 0x2a, 0x3a, 0x03, 0x7f,
++ 0x02, 0x3a, 0x2a, 0x3a, 0x2b, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa8, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x40, 0x23, 0x22, 0x02, 0x02,
++ 0x0b, 0x0a, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xc8, 0x48, 0x48, 0x48,
++ 0xc8, 0x48, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x11, 0x11, 0x11, 0x21, 0x22,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x08, 0x10, 0x20, 0x80, 0x80,
++ 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x7c, 0x10, 0x11, 0x11, 0x7d, 0x11,
++ 0x11, 0x11, 0x1c, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xe8, 0x28, 0x28, 0x28,
++ 0xe8, 0x28, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x09, 0x13, 0x1a,
++ 0x36, 0x56, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x70, 0x50, 0x50, 0xf8, 0x08,
++ 0xe8, 0xa8, 0xe8, 0xa8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x01, 0x03,
++ 0x05, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x80,
++ 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x18, 0x73, 0x12, 0x17, 0x7c, 0x10, 0x3b,
++ 0x34, 0x57, 0x50, 0x13, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xf8, 0x40, 0xe4, 0x68,
++ 0xb0, 0x70, 0xa8, 0x24, 0x20, 0xc0, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x21, 0x2f, 0x21,
++ 0x27, 0x24, 0x27, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x10, 0xf8, 0x08, 0xe8, 0x08,
++ 0xc8, 0x48, 0xc8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x04, 0x04, 0x08, 0x08,
++ 0x18, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x80, 0x88, 0x90,
++ 0xe0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x7f, 0x00, 0x1f,
++ 0x11, 0x11, 0x1f, 0x11, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x14, 0x10, 0x7e, 0x12,
++ 0x12, 0x12, 0x12, 0x22, 0x22, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xf8, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x0b, 0x10, 0x13,
++ 0x32, 0x52, 0x13, 0x12, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x10, 0xd0,
++ 0x50, 0x50, 0xd0, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x09, 0x7f, 0x09,
++ 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x20, 0xfc, 0x20,
++ 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x55, 0x55, 0x55, 0x7d,
++ 0x51, 0x19, 0x15, 0x1d, 0x65, 0x01, 0x00, 0x00,
++ 0x00, 0xd8, 0x48, 0x48, 0xd8, 0x08, 0x00, 0xf8,
++ 0x28, 0x28, 0xd0, 0x10, 0x28, 0x44, 0x00, 0x00,
++ 0x00, 0x3d, 0x01, 0x7f, 0x01, 0x3d, 0x01, 0x3c,
++ 0x03, 0x3c, 0x25, 0x26, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x49, 0x4b, 0x49, 0x4f, 0x49,
++ 0x4b, 0x78, 0x4f, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xf8, 0x50, 0xfc, 0x50,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x04, 0x18, 0x68, 0x08, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x80, 0x8c, 0xf0, 0x84, 0x7c, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x02, 0x22, 0x12, 0x1f, 0x02, 0x02, 0x72, 0x12,
++ 0x14, 0x14, 0x18, 0x1b, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0x00, 0x38, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xb8, 0x28, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x23, 0x12, 0x12, 0x02, 0x07, 0x74, 0x15,
++ 0x15, 0x15, 0x15, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x90, 0xf8, 0x08, 0xe8,
++ 0x28, 0xe8, 0x28, 0x18, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x01, 0x3e,
++ 0x22, 0x3e, 0x3d, 0x20, 0x3c, 0x21, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x00, 0xf8,
++ 0x08, 0xf8, 0xf8, 0x50, 0x70, 0x8c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x01, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x88, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x0f, 0x11, 0x11, 0x3f, 0x51, 0x11,
++ 0x11, 0x13, 0x1d, 0x11, 0x13, 0x11, 0x00, 0x00,
++ 0x60, 0xa8, 0x24, 0x24, 0x20, 0xfc, 0x20, 0xa8,
++ 0x28, 0x10, 0x10, 0x34, 0x4c, 0x04, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x10, 0x54, 0x57, 0x54, 0x54,
++ 0x54, 0x55, 0x7e, 0x44, 0x40, 0x01, 0x00, 0x00,
++ 0x60, 0xa8, 0xa4, 0xa4, 0xa0, 0xfc, 0xa4, 0xa8,
++ 0xd8, 0x90, 0xb0, 0xcc, 0x8c, 0x84, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x08, 0x08, 0x7f, 0x08, 0x08,
++ 0x0e, 0x78, 0x08, 0x08, 0x0b, 0x18, 0x00, 0x00,
++ 0x80, 0x90, 0x88, 0x88, 0x80, 0xfc, 0x88, 0x88,
++ 0x50, 0x50, 0x24, 0xd4, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x08, 0x7f, 0x00,
++ 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x40, 0x40, 0x40, 0x40, 0xfc, 0xc0,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x2f, 0x29, 0x29, 0x2f,
++ 0x29, 0x29, 0x2f, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xe8, 0x28, 0x28, 0xe8,
++ 0x28, 0x28, 0xe8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x3f, 0x21, 0x21, 0x21,
++ 0x3f, 0x24, 0x24, 0x3f, 0x21, 0x02, 0x00, 0x00,
++ 0x20, 0xa0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60,
++ 0x50, 0x50, 0x90, 0x88, 0x08, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x08, 0x08, 0x7f,
++ 0x00, 0x01, 0x06, 0x18, 0x60, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x40, 0x40, 0xfc,
++ 0xc0, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x54, 0x57, 0x54, 0x7c,
++ 0x50, 0x1b, 0x14, 0x1e, 0x60, 0x01, 0x00, 0x00,
++ 0x60, 0xb0, 0xa8, 0xa8, 0xa0, 0xfc, 0xa0, 0xa8,
++ 0xe8, 0xb0, 0x90, 0xb4, 0xcc, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x12, 0x16, 0x2f, 0x48, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x24, 0x24, 0x25, 0x7e, 0x0c, 0x0c,
++ 0x14, 0x14, 0x24, 0x44, 0x04, 0x0c, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0xfc, 0x90, 0x90, 0xfc, 0x90,
++ 0x90, 0xfc, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x17, 0x1a, 0x28, 0x7f, 0x24, 0x3c,
++ 0x24, 0x3f, 0x28, 0x24, 0x3e, 0x61, 0x00, 0x00,
++ 0x20, 0x68, 0xa4, 0xa4, 0xa0, 0xfc, 0xa0, 0xa8,
++ 0xe8, 0x90, 0x94, 0xac, 0xcc, 0x84, 0x00, 0x00,
++ 0x08, 0x7e, 0x12, 0x12, 0x26, 0x5f, 0x11, 0x1f,
++ 0x1f, 0x11, 0x1f, 0x2a, 0x25, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf0, 0x00, 0xe0,
++ 0xe0, 0x00, 0xf8, 0x48, 0x28, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x18, 0x64, 0x04, 0x04,
++ 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0x4c, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x18, 0x67, 0x00, 0x00,
++ 0x3f, 0x02, 0x02, 0x04, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0xcc, 0x00, 0x00,
++ 0xf8, 0x40, 0x20, 0xf0, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x48, 0x3f, 0x2a, 0x2a, 0x3f,
++ 0x2a, 0x3f, 0x22, 0x22, 0x22, 0x46, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x88, 0x30, 0xa0, 0xf8, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x27, 0x24, 0x24, 0x24,
++ 0x24, 0x27, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xc8, 0x48, 0x48, 0x48,
++ 0x48, 0xc8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x12,
++ 0x10, 0x1d, 0x61, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xc8,
++ 0xd0, 0x50, 0x68, 0x7c, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x17, 0x10, 0x13, 0x7e, 0x12, 0x13, 0x10,
++ 0x17, 0x18, 0x63, 0x0d, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xa8, 0xa8, 0xf8, 0x40,
++ 0xfc, 0xc8, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x0a, 0x12, 0x12, 0x3a, 0x0a,
++ 0x4a, 0x2a, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xe8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xe8, 0x08, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x13, 0x38, 0x34, 0x34, 0x53,
++ 0x10, 0x10, 0x10, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xfc,
++ 0x60, 0xa0, 0x90, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x10, 0x38, 0x37, 0x34, 0x50,
++ 0x13, 0x10, 0x10, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0xa0, 0xc0, 0x30, 0x4c, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x1a, 0x35, 0x35, 0x31, 0x57,
++ 0x12, 0x12, 0x17, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x50, 0x50, 0xfc,
++ 0x50, 0x50, 0xfc, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x12, 0x3a, 0x36, 0x36, 0x52,
++ 0x13, 0x12, 0x12, 0x14, 0x1b, 0x1c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x20, 0x28, 0xa8, 0xb0, 0xa0,
++ 0x20, 0x20, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x1b, 0x36, 0x36, 0x33, 0x50,
++ 0x17, 0x10, 0x13, 0x1d, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xa8, 0xa8, 0xf8, 0x40,
++ 0xfc, 0xc8, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7f, 0x00, 0x12, 0x12, 0x12,
++ 0x7f, 0x12, 0x12, 0x22, 0x22, 0x41, 0x00, 0x00,
++ 0x90, 0x88, 0x88, 0xfc, 0x80, 0x88, 0x88, 0x50,
++ 0xd0, 0x20, 0x24, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x13, 0x12, 0x10, 0x1f,
++ 0x70, 0x10, 0x10, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0xf8,
++ 0x88, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x7c, 0x04, 0x04, 0x05, 0x7d, 0x46, 0x40,
++ 0x40, 0x44, 0x44, 0x3c, 0x03, 0x0c, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x10, 0x3e, 0x2b, 0x3e, 0x2a, 0x3e, 0x2d,
++ 0x0d, 0x0d, 0x16, 0x17, 0x24, 0x43, 0x00, 0x00,
++ 0x90, 0x50, 0x50, 0x10, 0x90, 0x90, 0x1c, 0xf0,
++ 0x10, 0x10, 0x90, 0xd4, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x4a, 0x4d, 0x49, 0x79, 0x4f,
++ 0x4a, 0x4a, 0x7b, 0x4a, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x50, 0x50, 0xfc,
++ 0x50, 0x50, 0xfc, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x12, 0x3a, 0x36,
++ 0x37, 0x52, 0x52, 0x14, 0x18, 0x10, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0xa8, 0xa8, 0xa8,
++ 0xf0, 0x90, 0x94, 0xac, 0x4c, 0x84, 0x00, 0x00,
++ 0x11, 0x09, 0x0b, 0x42, 0x25, 0x21, 0x01, 0x1f,
++ 0x12, 0x12, 0x27, 0x24, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x50, 0x50, 0xfc,
++ 0x50, 0x50, 0xfc, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x10, 0x12, 0x12, 0x14,
++ 0x10, 0x11, 0x21, 0x22, 0x4c, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x80, 0x88, 0x88, 0x90, 0xa0,
++ 0x80, 0x40, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x11, 0x02,
++ 0x0c, 0x74, 0x04, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x80,
++ 0x60, 0x5c, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x10, 0x10, 0x1d, 0x62, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x80, 0x98, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0xe0,
++ 0x20, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0d, 0x12, 0x7e,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x74, 0x00, 0x00,
++ 0xfc, 0x40, 0x50, 0x98, 0xe4, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x02, 0x04, 0x1c,
++ 0x64, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x80, 0x40, 0x70,
++ 0x4c, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x1d, 0x28, 0x7e, 0x2b, 0x3e, 0x2b, 0x3f,
++ 0x23, 0x5f, 0x11, 0x1f, 0x01, 0x3f, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x98, 0xa0, 0xf8, 0x20, 0xfc,
++ 0x20, 0xf0, 0x10, 0xf0, 0xf0, 0x08, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x2f,
++ 0x22, 0x3f, 0x22, 0x24, 0x28, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xe8,
++ 0x88, 0xf8, 0x88, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x01, 0x3d, 0x25, 0x29, 0x31, 0x29, 0x26, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x20, 0x24, 0xf8, 0x20, 0x24, 0xbc, 0x40, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x10, 0x1f,
++ 0x10, 0x10, 0x1f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0xf0, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x08, 0x2a, 0x2a, 0x3e, 0x00, 0x7e, 0x00, 0x3e,
++ 0x22, 0x3e, 0x24, 0x14, 0x1f, 0x62, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
++ 0x90, 0x90, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x10, 0x15, 0x64, 0x18, 0x0a,
++ 0x12, 0x24, 0x0c, 0x12, 0x21, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0f, 0x09, 0x11, 0x19, 0x26,
++ 0x42, 0x04, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xc0, 0x40, 0x60, 0x58,
++ 0x44, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x48, 0x4a, 0x49, 0x48, 0x48,
++ 0x48, 0x7b, 0x48, 0x40, 0x03, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x48, 0x90, 0xa0, 0x48,
++ 0x90, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x3f, 0x21, 0x5f, 0x01, 0x1f, 0x01, 0x7f,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x00, 0xf0, 0x00, 0xfc,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x11, 0x1f, 0x00, 0x1f, 0x10, 0x17, 0x10,
++ 0x1f, 0x10, 0x27, 0x20, 0x5f, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0xf0, 0x00, 0xfc, 0x80, 0xf0, 0x80,
++ 0xf8, 0x80, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x15, 0x3f, 0x3d, 0x35, 0x57,
++ 0x15, 0x14, 0x15, 0x16, 0x1c, 0x11, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x50, 0x50, 0x50, 0xfc, 0x10,
++ 0x30, 0xb0, 0xd0, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x7d, 0x17, 0x15, 0x3d, 0x37,
++ 0x36, 0x55, 0x55, 0x16, 0x1c, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x50, 0x50, 0x50, 0xfc, 0x30,
++ 0x30, 0x30, 0xd0, 0xd4, 0x94, 0x0c, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x22, 0x22, 0x03, 0x02,
++ 0x12, 0x12, 0x24, 0x24, 0x4b, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0xf8, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7d, 0x11, 0x11, 0x11, 0x3d, 0x24, 0x65,
++ 0x24, 0x27, 0x3d, 0x20, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0x10, 0xfc, 0x10, 0x90, 0x90, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x1f, 0x01, 0x7f, 0x02, 0x3f,
++ 0x00, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x00, 0xfc, 0x40, 0xf0,
++ 0x08, 0xf0, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x27, 0x49, 0x09, 0x17, 0x11, 0x31,
++ 0x57, 0x11, 0x11, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x00, 0x3c, 0xc0, 0x00, 0x00, 0xfc, 0x08, 0x08,
++ 0xc8, 0x08, 0x08, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7c, 0x00, 0x3d, 0x00, 0x3c,
++ 0x00, 0x3c, 0x25, 0x24, 0x3d, 0x26, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x50, 0x90, 0xa0, 0x68,
++ 0x48, 0x90, 0x30, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x20, 0xa8, 0xa8, 0xf8, 0x00, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0x50, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x23, 0x2e, 0x2a, 0x7f, 0x42, 0x7e,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x27, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x40, 0x50, 0x90, 0xa0, 0x68,
++ 0x48, 0x90, 0x30, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x23, 0x22, 0x02, 0x0b,
++ 0x08, 0x0b, 0x10, 0x10, 0x27, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x3e, 0x2a, 0x3e, 0x27, 0x41,
++ 0x7f, 0x05, 0x1f, 0x67, 0x04, 0x07, 0x00, 0x00,
++ 0x70, 0x54, 0x9c, 0xf0, 0x50, 0x70, 0xcc, 0x00,
++ 0xfc, 0x40, 0xf0, 0xcc, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2b, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0e, 0x73, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x17, 0x10, 0x11, 0x7d, 0x11, 0x11, 0x11,
++ 0x15, 0x19, 0x61, 0x00, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x18, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xfc, 0x24,
++ 0x24, 0x24, 0x24, 0x2c, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0b, 0x0f, 0x72, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xfc, 0xa0, 0xa0, 0xbc,
++ 0xa4, 0xa4, 0x44, 0x44, 0x84, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5e, 0x08, 0x7e,
++ 0x08, 0x2b, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0x48, 0x48, 0xc8,
++ 0xa8, 0xd8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x3f, 0x09, 0x7f, 0x09, 0x3f, 0x3f, 0x7f,
++ 0x3f, 0x29, 0x3f, 0x3f, 0x07, 0x78, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0xc8, 0x48, 0x48, 0x48, 0xc8,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x02, 0x02, 0x7f, 0x52, 0x52, 0x5f, 0x55, 0x55,
++ 0x5d, 0x7d, 0x55, 0x49, 0x09, 0x13, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0x10, 0xfc, 0x28, 0x68,
++ 0xec, 0xac, 0x6c, 0x48, 0x48, 0x98, 0x00, 0x00,
++ 0x02, 0x02, 0x07, 0x0c, 0x12, 0x21, 0x03, 0x0c,
++ 0x7f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x20, 0x40, 0x80, 0x40, 0x30,
++ 0xec, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x10, 0x17, 0x14, 0x17,
++ 0x10, 0x17, 0x21, 0x2f, 0x41, 0x03, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xfc, 0x24, 0xa8, 0xb0, 0xa8,
++ 0x24, 0xa4, 0xa4, 0x38, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x11, 0x11, 0x1d,
++ 0x71, 0x11, 0x12, 0x12, 0x17, 0x38, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x00, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x50, 0x48, 0x7c, 0x84, 0x04, 0x00, 0x00,
++ 0x12, 0x11, 0x13, 0x7e, 0x15, 0x11, 0x11, 0x1d,
++ 0x71, 0x11, 0x11, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0x88, 0x50, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x09, 0x18, 0x1c, 0x1a,
++ 0x2b, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x50, 0x20, 0x50, 0x88,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x09, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x29, 0x48, 0x08, 0x09, 0x0e, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x48, 0x88, 0x50, 0x20,
++ 0x48, 0x90, 0x30, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x00, 0x3f, 0x22,
++ 0x5c, 0x14, 0x14, 0x16, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x54, 0x54, 0x8c, 0x00, 0xf8,
++ 0x88, 0x50, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x09, 0x4f, 0x31, 0x11, 0x33, 0x4d, 0x09, 0x19,
++ 0x29, 0x4b, 0x08, 0x08, 0x30, 0x17, 0x00, 0x00,
++ 0x10, 0xfc, 0x30, 0xfc, 0x20, 0xf8, 0xf8, 0x20,
++ 0xfc, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x11, 0x12, 0x3c, 0x25, 0x67,
++ 0x25, 0x25, 0x3d, 0x25, 0x21, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x90, 0xa0, 0xfc, 0x20,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x0b, 0x70, 0x11, 0x13, 0x7d, 0x11, 0x19,
++ 0x35, 0x37, 0x50, 0x10, 0x10, 0x17, 0x00, 0x00,
++ 0x90, 0xfc, 0xb0, 0xfc, 0x20, 0xf8, 0xf8, 0x20,
++ 0xfc, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x12, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x02, 0x07, 0x18, 0x61, 0x1f, 0x11, 0x1f, 0x11,
++ 0x11, 0x1f, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xe0, 0x80, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x08, 0x08, 0x7f, 0x14, 0x36,
++ 0x35, 0x55, 0x16, 0x24, 0x24, 0x4d, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x50, 0xd0,
++ 0xd8, 0x54, 0x54, 0x90, 0x90, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x09, 0x3e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x50, 0x88, 0x94, 0x90,
++ 0x50, 0x60, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x7f, 0x00, 0x1f, 0x11, 0x1f, 0x00, 0x3f,
++ 0x02, 0x07, 0x7c, 0x04, 0x04, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x23, 0x2e,
++ 0x21, 0x22, 0x3f, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xc8, 0x48,
++ 0x88, 0xc8, 0xf8, 0x48, 0xc8, 0x58, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x29, 0x29, 0x31, 0x28, 0x27,
++ 0x26, 0x27, 0x3a, 0x22, 0x22, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0xa8, 0x38, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x07, 0x01, 0x1f, 0x11,
++ 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xc0, 0x00, 0xf0, 0x10,
++ 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x12, 0x09, 0x09, 0x3f, 0x20, 0x4f, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x40, 0x80,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x7f,
++ 0x01, 0x11, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x20, 0xc0, 0x00, 0x00, 0xf8, 0x40, 0x40, 0xfc,
++ 0x00, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x22, 0x17, 0x14, 0x07, 0x1c, 0x67, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0x08, 0xc8, 0x50, 0xe0, 0x58, 0xc4, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x3f, 0x29, 0x4e, 0x12, 0x34, 0x0c,
++ 0x12, 0x3f, 0x52, 0x12, 0x1e, 0x13, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x77, 0x55, 0x55, 0x77, 0x00, 0x3e, 0x00,
++ 0x7f, 0x10, 0x1e, 0x22, 0x02, 0x0f, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x79, 0x11, 0x17, 0x19, 0x11,
++ 0x37, 0x51, 0x11, 0x11, 0x1e, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0xd0, 0x10, 0x10, 0xf8, 0x14, 0x14,
++ 0xf0, 0x10, 0x10, 0xd0, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x18, 0x25, 0x45, 0x01, 0x3f,
++ 0x00, 0x08, 0x04, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x10, 0x00, 0xf8,
++ 0x20, 0x20, 0x40, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x3a, 0x37,
++ 0x34, 0x53, 0x50, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xe8, 0x50, 0xd0, 0xa8, 0xc4,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x7d, 0x11, 0x19, 0x35, 0x37,
++ 0x31, 0x51, 0x51, 0x11, 0x11, 0x17, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0x50, 0xf0, 0x50, 0xf0, 0xf8,
++ 0xf0, 0x50, 0xf0, 0x50, 0xf0, 0xfc, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x0a, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf0, 0x40, 0xf8,
++ 0x40, 0xfc, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x09, 0x1e, 0x24, 0x7e, 0x2b, 0x3e, 0x2a,
++ 0x3f, 0x05, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x30, 0xd0, 0x90, 0x94, 0xb4, 0xf4, 0xb8, 0xd0,
++ 0xf0, 0xa8, 0xa8, 0xc8, 0xc4, 0x84, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x01, 0x13,
++ 0x16, 0x2a, 0x25, 0x45, 0x48, 0x40, 0x00, 0x00,
++ 0x80, 0x38, 0x08, 0xb8, 0x08, 0xf8, 0x00, 0xfc,
++ 0x24, 0x94, 0x54, 0x44, 0x04, 0x18, 0x00, 0x00,
++ 0x08, 0x7f, 0x49, 0x7f, 0x08, 0x3e, 0x08, 0x7f,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4b, 0x4a, 0x4b, 0x48, 0x49,
++ 0x4e, 0x7b, 0x4a, 0x42, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x80, 0xf8,
++ 0x68, 0x88, 0x08, 0x28, 0xe8, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x18, 0x35, 0x37, 0x34, 0x50,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x17, 0x10, 0x1c,
++ 0x73, 0x12, 0x12, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x40, 0x20, 0x27, 0x00, 0x10,
++ 0x13, 0x12, 0x22, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x01, 0x13,
++ 0x16, 0x1b, 0x22, 0x22, 0x41, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x48, 0x88, 0x08, 0x28, 0xe8, 0x30, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x22, 0x27, 0x04, 0x17,
++ 0x1a, 0x13, 0x22, 0x23, 0x42, 0x42, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x90, 0xfc, 0x04, 0xf8,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x07, 0x18, 0x6f, 0x08, 0x07, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0xf8, 0xc8, 0x08, 0x48, 0xc8, 0x70, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x0b, 0x14, 0x19,
++ 0x37, 0x55, 0x11, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x80, 0xf8,
++ 0x28, 0xc8, 0x08, 0x28, 0xe8, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x09, 0x3f, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x24, 0xf8, 0x20, 0xf8, 0x20,
++ 0xfc, 0x00, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x08,
++ 0x0f, 0x08, 0x08, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x20,
++ 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x1f, 0x25, 0x7f, 0x2b, 0x3f, 0x2b,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x44, 0xf4, 0x28, 0xe8, 0x54, 0xe4,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x48, 0x48, 0x4f, 0x48, 0x48,
++ 0x48, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x7e, 0x08, 0x1c, 0x1a, 0x1b,
++ 0x29, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0x40, 0x64, 0xa4, 0xa8,
++ 0xb0, 0xa0, 0xa0, 0xa4, 0xa4, 0x9c, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x7d, 0x13, 0x19, 0x37, 0x35,
++ 0x33, 0x50, 0x57, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xf8, 0x50, 0xfc, 0x50,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1d, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x88, 0xe8, 0x28, 0x28, 0xe8,
++ 0xb0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x1a, 0x1f, 0x1a,
++ 0x2a, 0x28, 0x49, 0x0a, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xf8, 0x20, 0x20, 0xfc, 0x60,
++ 0x70, 0xb0, 0x28, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x09, 0x37, 0x24, 0x27, 0x24, 0x37, 0x20,
++ 0x04, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x80, 0x00, 0xf8, 0x48, 0xc8, 0x48, 0xd8, 0x08,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x3f, 0x2d, 0x77, 0x3f, 0x0f, 0x0f, 0x09,
++ 0x0f, 0x1f, 0x1f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0xf8, 0xe0, 0xe0, 0x20,
++ 0xe0, 0xf0, 0xf0, 0x14, 0xf4, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x10, 0x0f, 0x48, 0x23,
++ 0x2a, 0x0b, 0x12, 0x13, 0x22, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x50, 0x48, 0xfc, 0x40, 0xf8,
++ 0x48, 0xf8, 0x48, 0xf8, 0x48, 0x58, 0x00, 0x00,
++ 0x02, 0x0c, 0x32, 0x01, 0x02, 0x0c, 0x7f, 0x01,
++ 0x1f, 0x09, 0x05, 0x05, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x30, 0x48, 0x80, 0xc0, 0x30, 0xec, 0x00,
++ 0xf0, 0x20, 0x20, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x10, 0x1b, 0x24, 0x27, 0x78, 0x13, 0x7c,
++ 0x13, 0x54, 0x39, 0x32, 0x1c, 0x60, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xfc, 0xa8,
++ 0xf8, 0xa8, 0xb0, 0xa8, 0xa4, 0xa0, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x4f, 0x4b, 0x4a, 0x4a,
++ 0x4b, 0x7a, 0x4b, 0x42, 0x03, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x40, 0xfc, 0x58, 0xd8, 0xe8,
++ 0xf8, 0xe8, 0x58, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7c, 0x55, 0x55, 0x7d, 0x55, 0x55, 0x7d,
++ 0x55, 0x11, 0x11, 0x12, 0x12, 0x14, 0x00, 0x00,
++ 0x20, 0x40, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xfc, 0x54, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7e, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x08, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x04, 0x03, 0x7f,
++ 0x01, 0x03, 0x05, 0x19, 0x61, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0xc0, 0x00, 0xfc,
++ 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x3f, 0x20, 0x7f, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0x08, 0xf8, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x71, 0x19, 0x15, 0x75, 0x41, 0x4f, 0x71,
++ 0x53, 0x13, 0x15, 0x19, 0x11, 0x61, 0x00, 0x00,
++ 0x00, 0x38, 0x48, 0x48, 0xb8, 0x20, 0xe0, 0x38,
++ 0xa8, 0x48, 0x48, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x22, 0x12, 0x0c, 0x04, 0x06,
++ 0x0a, 0x09, 0x11, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x04, 0x02, 0x22, 0x12,
++ 0x0c, 0x04, 0x0c, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x08, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x04, 0x07, 0x04, 0x04, 0x06,
++ 0x09, 0x09, 0x08, 0x09, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xc0, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0xc4, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x22, 0x3e, 0x22,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0x00, 0xf8, 0x10, 0x20,
++ 0x40, 0x40, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x12, 0x33, 0x50, 0x12,
++ 0x12, 0x12, 0x12, 0x14, 0x14, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x00, 0x90,
++ 0x90, 0x90, 0x90, 0x94, 0x94, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x7e, 0x00, 0x01, 0x7f, 0x14,
++ 0x14, 0x14, 0x14, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x10, 0x10, 0xfc, 0x10, 0x90,
++ 0x90, 0x10, 0x10, 0x34, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x7f, 0x04, 0x1f, 0x04, 0x7f,
++ 0x04, 0x1b, 0x60, 0x06, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0x40, 0xf0, 0x40, 0xfc,
++ 0x40, 0x30, 0x8c, 0x00, 0x80, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x08, 0x08, 0x08, 0x7f, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x12, 0x12, 0x7f, 0x12, 0x1e, 0x12, 0x1e, 0x12,
++ 0x7f, 0x2c, 0x2d, 0x33, 0x3f, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0xc8, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x3f, 0x28, 0x5f, 0x14, 0x3f, 0x64,
++ 0x3f, 0x24, 0x3f, 0x24, 0x3f, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x3f, 0x02, 0x7f, 0x04, 0x1f,
++ 0x60, 0x0f, 0x08, 0x08, 0x08, 0x07, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xf8, 0x80, 0xfc, 0x40, 0xf0,
++ 0x4c, 0xc0, 0x40, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x00, 0x00, 0x79, 0x4a, 0x4f, 0x4a, 0x4a, 0x4a,
++ 0x4b, 0x7a, 0x4f, 0x40, 0x03, 0x0c, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0x40, 0xf8, 0xa8, 0xa8, 0xb8,
++ 0x28, 0x48, 0xfc, 0xa0, 0x18, 0x04, 0x00, 0x00,
++ 0x01, 0x17, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x17,
++ 0x12, 0x1a, 0x63, 0x02, 0x03, 0x02, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0xfc,
++ 0xa0, 0xa8, 0x18, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x04, 0x0e, 0x03, 0x1c, 0x08,
++ 0x7f, 0x12, 0x34, 0x0c, 0x1a, 0x61, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x40, 0x80, 0xc0, 0x30, 0x20,
++ 0xfc, 0x48, 0xd0, 0x30, 0x68, 0x84, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x4f, 0x00, 0x00, 0x7f,
++ 0x04, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xe0, 0x00, 0x00, 0xfc,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x4f, 0x08, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xe0, 0x20, 0x20, 0xe0,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x7f, 0x04, 0x0f, 0x08, 0x0f,
++ 0x0f, 0x08, 0x0f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0x40, 0xe0, 0x20, 0xe0,
++ 0xe0, 0x20, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x7f, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x22, 0x3e, 0x22,
++ 0x3f, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x88, 0x04, 0xf8, 0x20, 0x20,
++ 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x0f, 0x09, 0x0f, 0x01, 0x1f, 0x11, 0x1f,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xf0, 0x10, 0xf0,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x2f, 0x29,
++ 0x4f, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x90, 0x88, 0xfc, 0x88, 0x48, 0x50, 0x20, 0x54,
++ 0x8c, 0x04, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x17, 0x3a, 0x37, 0x37, 0x52,
++ 0x13, 0x13, 0x12, 0x13, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xfc, 0x50, 0xf0, 0xf8, 0x08,
++ 0xf8, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1b, 0x36, 0x37, 0x33, 0x55,
++ 0x18, 0x11, 0x15, 0x15, 0x19, 0x10, 0x00, 0x00,
++ 0x28, 0xfc, 0x20, 0xe8, 0x28, 0xd0, 0x54, 0xec,
++ 0x84, 0x50, 0x48, 0x14, 0x14, 0xf0, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7f, 0x12, 0x12, 0x13, 0x1a,
++ 0x70, 0x17, 0x10, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0xf8, 0xa8, 0xa8, 0x38, 0x58,
++ 0x40, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x04, 0x7f, 0x12, 0x1f, 0x12,
++ 0x1e, 0x13, 0x1e, 0x62, 0x02, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x18, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x88, 0x88, 0x88, 0xfc, 0x88, 0x88, 0x88, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x18, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88,
++ 0x88, 0xf8, 0x88, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x7e, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xf0, 0x10, 0x10, 0xf0,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x00, 0x3f, 0x00,
++ 0x7f, 0x0c, 0x2a, 0x2a, 0x49, 0x1a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa8, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x7f, 0x14, 0x1f, 0x34,
++ 0x5f, 0x14, 0x1f, 0x14, 0x1f, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa8, 0x30, 0x20,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x40, 0x20, 0x20, 0x07, 0x08,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x11, 0x09, 0x0f, 0x41, 0x23, 0x22, 0x03, 0x10,
++ 0x13, 0x10, 0x27, 0x20, 0x41, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x48, 0xf8, 0x40,
++ 0xf8, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x20, 0x1f, 0x19, 0x4f, 0x29, 0x2f, 0x08, 0x0b,
++ 0x1a, 0x1b, 0x2a, 0x2b, 0x4a, 0x48, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x78, 0x48, 0x78, 0x08, 0xe8,
++ 0x28, 0xe8, 0x28, 0xe8, 0x28, 0x18, 0x00, 0x00,
++ 0x11, 0x09, 0x0b, 0x42, 0x27, 0x29, 0x03, 0x12,
++ 0x17, 0x2a, 0x23, 0x42, 0x43, 0x42, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x80, 0xfc, 0x20, 0xfc, 0x20,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x7e, 0x13, 0x10, 0x17, 0x7d, 0x11,
++ 0x11, 0x14, 0x19, 0x66, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x00, 0xfc, 0xf0, 0x10,
++ 0xf8, 0xc8, 0xb0, 0x90, 0x8c, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x08,
++ 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20,
++ 0xe0, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3e, 0x22, 0x3f, 0x24, 0x3f,
++ 0x20, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x80, 0x00, 0x78, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x02, 0x3f, 0x02, 0x7f, 0x04, 0x07,
++ 0x0c, 0x0f, 0x14, 0x27, 0x44, 0x07, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xf8, 0x00, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x25, 0x42, 0x3f, 0x01,
++ 0x01, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x10, 0xf8, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x45, 0x3f, 0x20, 0x4f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x10, 0xfc, 0x08, 0xe0, 0x20,
++ 0xe0, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3e, 0x22, 0x3e, 0x22,
++ 0x3f, 0x24, 0x27, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x10, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x48, 0xc8, 0x48, 0xc8, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x0a, 0x72, 0x17, 0x0c, 0x13, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x29, 0x4a, 0x0b, 0x00, 0x00,
++ 0x1c, 0xe4, 0xa8, 0x50, 0xfc, 0x40, 0xfc, 0x40,
++ 0x78, 0xc8, 0xb0, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x1f, 0x11, 0x21, 0x7f, 0x01,
++ 0x11, 0x11, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x23, 0x3e, 0x23,
++ 0x3e, 0x08, 0x7f, 0x09, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x90, 0x08, 0xfc, 0x48, 0x68,
++ 0xd8, 0xd8, 0x68, 0x68, 0x48, 0xd8, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x24, 0x3c, 0x27, 0x24,
++ 0x3c, 0x24, 0x24, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x11, 0x3d, 0x25, 0x35, 0x2d, 0x2d, 0x7f,
++ 0x24, 0x2d, 0x2d, 0x2d, 0x25, 0x4f, 0x00, 0x00,
++ 0x10, 0xf0, 0x50, 0xfc, 0x30, 0xe0, 0x5c, 0xe0,
++ 0x00, 0xf8, 0x68, 0x68, 0x68, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x01, 0x3f, 0x20, 0x4f,
++ 0x00, 0x3f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x08, 0xe0,
++ 0x00, 0xfc, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x3e, 0x48, 0x7f, 0x14, 0x3f, 0x68,
++ 0x3e, 0x28, 0x3e, 0x28, 0x3f, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x50, 0x50, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7c, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3c, 0x25, 0x26, 0x3c, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x00, 0x0f, 0x09, 0x7f, 0x12, 0x1f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xfc, 0x40, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x27, 0x15, 0x17, 0x00, 0x0f, 0x73, 0x12,
++ 0x13, 0x10, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xf8, 0x00, 0xfc, 0xf0, 0x10,
++ 0xf8, 0xc8, 0xb0, 0x88, 0x80, 0xfc, 0x00, 0x00,
++ 0x10, 0x13, 0x1a, 0x27, 0x26, 0x7b, 0x12, 0x7f,
++ 0x12, 0x55, 0x39, 0x31, 0x1f, 0x60, 0x00, 0x00,
++ 0x10, 0xd0, 0x90, 0xdc, 0x60, 0xc0, 0x9c, 0xc0,
++ 0x00, 0xf8, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x27,
++ 0x24, 0x27, 0x24, 0x27, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xc8,
++ 0x48, 0xc8, 0x48, 0xc8, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x21,
++ 0x2f, 0x23, 0x25, 0x29, 0x21, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x08,
++ 0xe8, 0x88, 0x48, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x24, 0x22,
++ 0x27, 0x21, 0x2f, 0x22, 0x24, 0x28, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x48, 0x88,
++ 0xc8, 0x08, 0xe8, 0x88, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x28, 0x31, 0x2a, 0x25, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x90, 0x10, 0x20, 0x78, 0x48,
++ 0x48, 0x78, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x09, 0x3e, 0x22, 0x3e, 0x22,
++ 0x3e, 0x08, 0x7e, 0x09, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0xf8, 0x28, 0xfc, 0x00, 0xf8, 0x88, 0xf8,
++ 0x10, 0xf8, 0x90, 0xfc, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x1b, 0x28, 0x7e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x24, 0x26, 0x39, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0xf0, 0x90, 0x90, 0xf0,
++ 0x80, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x22, 0x7e, 0x08, 0x7e,
++ 0x08, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0xf0, 0x90, 0x90, 0xf0,
++ 0x80, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x02, 0x7f, 0x02, 0x02, 0x1a,
++ 0x06, 0x05, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0xc4, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x1f, 0x60, 0x1f, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0xf0, 0x0c, 0xe0, 0x40,
++ 0x80, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x1f, 0x00, 0x1f, 0x10, 0x17,
++ 0x10, 0x10, 0x2f, 0x20, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0xf0,
++ 0x80, 0x80, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x01, 0x11, 0x1f, 0x09, 0x3f, 0x2f, 0x22, 0x3f,
++ 0x29, 0x2f, 0x2f, 0x2f, 0x39, 0x41, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x10, 0xfc, 0x20, 0x20, 0xbc,
++ 0x48, 0xa8, 0x10, 0xb0, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x01, 0x7c, 0x10, 0x10, 0x13, 0x7c, 0x10,
++ 0x10, 0x11, 0x1d, 0x62, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0xa0, 0xa0,
++ 0xa0, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x49, 0x29, 0x29, 0x0f, 0x1c,
++ 0x2f, 0x4c, 0x12, 0x12, 0x23, 0x42, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0xbc, 0xa4,
++ 0xbc, 0x44, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x79, 0x49, 0x49, 0x79, 0x49, 0x49, 0x79,
++ 0x49, 0x49, 0x79, 0x49, 0x41, 0x06, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf8,
++ 0x48, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x1f, 0x00, 0x7f, 0x04, 0x04,
++ 0x0f, 0x0c, 0x14, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x4c, 0x2a, 0x1b, 0x6c, 0x19, 0x08,
++ 0x3f, 0x21, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x80, 0x80, 0x80, 0xfc, 0xb0, 0x30,
++ 0x30, 0x30, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x14, 0x1d, 0x16, 0x14, 0x13,
++ 0x13, 0x13, 0x22, 0x23, 0x43, 0x1c, 0x00, 0x00,
++ 0x00, 0xfc, 0x90, 0xfc, 0xf8, 0xf8, 0xfc, 0xf0,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x12, 0x14, 0x14, 0x1d, 0x16,
++ 0x14, 0x14, 0x24, 0x24, 0x44, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x50, 0xfc, 0x90, 0x90, 0xf8,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x00, 0x01, 0x3e, 0x00, 0x00, 0x7f, 0x14, 0x14,
++ 0x14, 0x15, 0x23, 0x20, 0x41, 0x06, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x22, 0x14, 0x3f, 0x24, 0x28,
++ 0x32, 0x24, 0x39, 0x22, 0x4c, 0x33, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x24, 0x2f, 0x29, 0x2f, 0x29,
++ 0x2f, 0x26, 0x2d, 0x35, 0x44, 0x0d, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x20, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x19, 0x61, 0x01, 0x09,
++ 0x09, 0x09, 0x09, 0x09, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x10, 0x30, 0x53, 0x11,
++ 0x11, 0x10, 0x10, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x08,
++ 0x10, 0x90, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x02, 0x07, 0x18, 0x61, 0x1f, 0x10, 0x13, 0x12,
++ 0x12, 0x12, 0x12, 0x22, 0x22, 0x41, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0x00, 0xfc, 0x00, 0xf0, 0x10,
++ 0x10, 0x10, 0x60, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x00, 0x0f, 0x08, 0x0f,
++ 0x04, 0x7f, 0x00, 0x1f, 0x10, 0x1f, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xe0, 0x20, 0xe0,
++ 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0x00,
++ 0x00, 0x1e, 0x12, 0x12, 0x1e, 0x01, 0x7f, 0x04,
++ 0x18, 0x7e, 0x12, 0x12, 0x1e, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0xf0, 0x00, 0xfc, 0x40,
++ 0x30, 0xfc, 0x90, 0x90, 0xf0, 0x90, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x07, 0x04, 0x07, 0x04, 0x7f,
++ 0x09, 0x1f, 0x61, 0x01, 0x3f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xc0, 0x40, 0xc0, 0x40, 0xfc,
++ 0x20, 0xf0, 0x0c, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x02, 0x04, 0x18, 0x7f, 0x00,
++ 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x80, 0x40, 0x20, 0xfc, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x13, 0x7d, 0x25, 0x25, 0x24,
++ 0x7b, 0x48, 0x0d, 0x15, 0x21, 0x41, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xf8, 0x08, 0xf8, 0x90,
++ 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x21, 0x5f, 0x02, 0x0c, 0x7f,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xf8, 0x40, 0x20, 0xfc,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x17, 0x54, 0x54, 0x57, 0x55,
++ 0x54, 0x7c, 0x44, 0x40, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x08,
++ 0x90, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x06, 0x01, 0x07, 0x39, 0x02, 0x7f, 0x04, 0x0f,
++ 0x18, 0x28, 0x48, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x20, 0xc0, 0x60, 0x10, 0x00, 0xfc, 0x80, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xb0, 0x80, 0x00, 0x00,
++ 0x11, 0x15, 0x65, 0x19, 0x0d, 0x13, 0x7f, 0x01,
++ 0x3f, 0x08, 0x0c, 0x12, 0x21, 0x46, 0x00, 0x00,
++ 0x20, 0x28, 0xc8, 0x30, 0x30, 0x48, 0xfc, 0x10,
++ 0xfc, 0x90, 0xa0, 0x44, 0xb4, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x0f,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x08, 0xf8,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x10, 0x13, 0x12, 0x1f,
++ 0x72, 0x13, 0x10, 0x17, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x49, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
++ 0x90, 0x90, 0x10, 0x14, 0x14, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x13, 0x10, 0x1c, 0x14,
++ 0x14, 0x14, 0x27, 0x24, 0x44, 0x1b, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x90, 0xfc, 0x90, 0xf0, 0x90,
++ 0xf0, 0x90, 0xfc, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x23, 0x3e,
++ 0x28, 0x24, 0x26, 0x3a, 0x61, 0x02, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0x50, 0x50, 0x50, 0xfc, 0x30,
++ 0x30, 0x50, 0x50, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x7f, 0x12, 0x1e, 0x12, 0x1e,
++ 0x12, 0x7f, 0x14, 0x12, 0x22, 0x41, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0xc8, 0x78, 0x48, 0x48, 0x78,
++ 0x48, 0xc8, 0x48, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x2b, 0x48, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0xfc, 0x90, 0xf0, 0x90, 0xf0,
++ 0x90, 0xfc, 0x90, 0x88, 0x04, 0x04, 0x00, 0x00,
++ 0x01, 0x7f, 0x02, 0x1f, 0x09, 0x7f, 0x09, 0x0f,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xe0, 0x30, 0xfc, 0x20, 0xe0,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x16, 0x7e, 0x11, 0x1a, 0x37, 0x34,
++ 0x33, 0x52, 0x53, 0x14, 0x14, 0x18, 0x00, 0x00,
++ 0x48, 0x48, 0xf4, 0xd4, 0x48, 0xd4, 0xfc, 0x50,
++ 0xfc, 0x28, 0x28, 0x90, 0x3c, 0xc4, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x09, 0x28, 0x2b, 0x28, 0x4f,
++ 0x0c, 0x0b, 0x0a, 0x12, 0x12, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00, 0xfc,
++ 0x44, 0xf8, 0x48, 0x48, 0x58, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x12, 0x0c, 0x7f, 0x19, 0x6d,
++ 0x16, 0x6d, 0x15, 0x64, 0x04, 0x1b, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x50, 0x54, 0x94, 0x0c, 0xf8,
++ 0x48, 0x50, 0x30, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x10, 0x2f, 0x40, 0x3f, 0x01,
++ 0x01, 0x1a, 0x06, 0x05, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xe0, 0x00, 0xe0, 0x20,
++ 0x20, 0x20, 0x14, 0x14, 0x0c, 0x04, 0x00, 0x00,
++ 0x11, 0x09, 0x0b, 0x42, 0x25, 0x20, 0x07, 0x00,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xf0, 0x10,
++ 0x10, 0x10, 0x14, 0x0c, 0x0c, 0x04, 0x00, 0x00,
++ 0x11, 0x15, 0x65, 0x19, 0x15, 0x7f, 0x02, 0x7f,
++ 0x3e, 0x2a, 0x3e, 0x2a, 0x3e, 0x21, 0x00, 0x00,
++ 0x20, 0x28, 0xc8, 0x30, 0x28, 0xfc, 0xa4, 0xfc,
++ 0x88, 0x48, 0x50, 0x20, 0x54, 0x8c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x04, 0x08, 0x0c, 0x1a,
++ 0x2a, 0x48, 0x09, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x6f,
++ 0x00, 0x01, 0x7f, 0x01, 0x01, 0x07, 0x00, 0x00,
++ 0x60, 0x80, 0x00, 0xfc, 0x80, 0x40, 0x30, 0xec,
++ 0x40, 0x80, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x02, 0x0c, 0x38, 0x09, 0x08, 0x7f, 0x08, 0x1c,
++ 0x1b, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0xd0, 0x30, 0xc8, 0x40, 0xfc, 0xa0, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xb8, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7d,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x88, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x12, 0x1a, 0x2a, 0x4f, 0x14, 0x15, 0x3d, 0x62,
++ 0x25, 0x3f, 0x2a, 0x2b, 0x32, 0x22, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa0, 0x7c, 0x48, 0xc8, 0x28,
++ 0x28, 0xb0, 0x90, 0x30, 0xc8, 0x84, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x3f, 0x09, 0x09, 0x7f, 0x09,
++ 0x09, 0x08, 0x15, 0x15, 0x22, 0x44, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0xf8,
++ 0xa8, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x7f, 0x00, 0x3e, 0x00, 0x3e,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x88, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x0f, 0x09, 0x0f, 0x7f, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0xfc, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x08, 0x08, 0x7f, 0x08, 0x28,
++ 0x2f, 0x28, 0x38, 0x28, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x88, 0x80,
++ 0x80, 0x84, 0x84, 0x7c, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x70, 0xd0, 0x50, 0x50, 0x50,
++ 0x50, 0x50, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x08, 0x09, 0x4b, 0x2b, 0x2c, 0x08, 0x7f, 0x14,
++ 0x14, 0x15, 0x16, 0x25, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x28, 0xfc, 0x20, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1a, 0x28, 0x7e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x28, 0x25, 0x3b, 0x62, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
++ 0x90, 0x90, 0x90, 0x14, 0x14, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x3e, 0x28, 0x3e, 0x29, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x50, 0x88, 0xfc, 0x08,
++ 0xe8, 0xa8, 0xe8, 0xa8, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x02, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x15,
++ 0x05, 0x05, 0x09, 0x09, 0x11, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10,
++ 0x20, 0x20, 0x50, 0xfc, 0x04, 0xfc, 0x00, 0x00,
++ 0x02, 0x03, 0x0c, 0x7f, 0x09, 0x0f, 0x0f, 0x1f,
++ 0x11, 0x1f, 0x11, 0x1f, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0xc0, 0x80, 0xe0, 0x20, 0xe0, 0xe0, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf4, 0x04, 0xfc, 0x00, 0x00,
++ 0x0a, 0x09, 0x09, 0x17, 0x10, 0x30, 0x51, 0x11,
++ 0x13, 0x15, 0x1c, 0x12, 0x12, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf0, 0x90, 0x90, 0xf8, 0x08,
++ 0xfc, 0x54, 0xac, 0x84, 0x04, 0x18, 0x00, 0x00,
++ 0x09, 0x08, 0x0f, 0x10, 0x13, 0x30, 0x57, 0x13,
++ 0x11, 0x1f, 0x11, 0x17, 0x11, 0x13, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0xa8,
++ 0x24, 0xfc, 0xa8, 0x10, 0x6c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x08, 0x7e, 0x13, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x11, 0x22, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x88, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x4f, 0x08, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xc0, 0x40, 0x40, 0xc0,
++ 0x40, 0xc0, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x07, 0x04, 0x3f, 0x27, 0x3d, 0x23, 0x2a,
++ 0x2a, 0x3b, 0x3a, 0x2b, 0x4c, 0x30, 0x00, 0x00,
++ 0x30, 0x28, 0x28, 0xa0, 0x3c, 0xe0, 0x28, 0x28,
++ 0xb0, 0x10, 0x34, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x13, 0x1d,
++ 0x70, 0x10, 0x10, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x08,
++ 0x90, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x14, 0x15, 0x16, 0x7c, 0x13, 0x12, 0x13, 0x1d,
++ 0x77, 0x11, 0x13, 0x12, 0x14, 0x39, 0x00, 0x00,
++ 0x00, 0xfc, 0x28, 0x90, 0x90, 0x7c, 0x98, 0x50,
++ 0xdc, 0x50, 0x50, 0xf0, 0x90, 0x0c, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x7f, 0x12, 0x1e, 0x13, 0x1e,
++ 0x12, 0x7f, 0x12, 0x11, 0x21, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x7c, 0xa8, 0x30, 0x20,
++ 0x20, 0x20, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x09, 0x08, 0x2b, 0x28, 0x3d, 0x28, 0x4b, 0x0d,
++ 0x18, 0x6f, 0x08, 0x0b, 0x08, 0x09, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0xe8,
++ 0xa4, 0xfc, 0xe8, 0x94, 0xac, 0xc4, 0x00, 0x00,
++ 0x20, 0x27, 0x38, 0x22, 0x1e, 0x11, 0x1e, 0x28,
++ 0x7e, 0x08, 0x14, 0x13, 0x22, 0x44, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x60, 0x20, 0xfc, 0x28, 0xb0,
++ 0xa0, 0xb8, 0xa0, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x05, 0x09, 0x09, 0x19,
++ 0x35, 0x55, 0x11, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x10, 0x14, 0x14, 0xcc, 0x0c, 0x04, 0x00, 0x00,
++ 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x06, 0x38,
++ 0x7f, 0x08, 0x0e, 0x78, 0x08, 0x1b, 0x00, 0x00,
++ 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x90, 0x88,
++ 0xfc, 0x48, 0x50, 0x24, 0xd4, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x54, 0x57, 0x54, 0x7f,
++ 0x53, 0x18, 0x14, 0x1f, 0x60, 0x01, 0x00, 0x00,
++ 0x90, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0xa8, 0xa4,
++ 0xfc, 0xa8, 0xd8, 0x94, 0xec, 0x84, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7e, 0x03, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x25, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x38, 0x07, 0x78, 0x03, 0x38, 0x07, 0x3b,
++ 0x01, 0x3f, 0x29, 0x2f, 0x39, 0x2b, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0xa8,
++ 0x24, 0xfc, 0xa8, 0x14, 0x6c, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7f, 0x12, 0x14, 0x12, 0x1a,
++ 0x77, 0x11, 0x11, 0x12, 0x14, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x88, 0xa8, 0xa8, 0xc8,
++ 0xf8, 0xc8, 0xa8, 0x98, 0x88, 0xb0, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x0c, 0x08, 0x1f, 0x12, 0x2a,
++ 0x4a, 0x3f, 0x07, 0x0a, 0x32, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x48, 0x48,
++ 0x88, 0xe8, 0x08, 0xc8, 0x28, 0x30, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1d, 0x0b, 0x3e, 0x2b,
++ 0x3e, 0x08, 0x7f, 0x0a, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0xc8, 0x58, 0x58, 0xe8, 0xf8,
++ 0xe8, 0xd8, 0x58, 0x48, 0x48, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x3f, 0x00,
++ 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x79, 0x4a, 0x4a, 0x4d, 0x48,
++ 0x48, 0x78, 0x49, 0x42, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x20,
++ 0x40, 0x80, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x02, 0x02, 0x7f, 0x52, 0x5f, 0x52, 0x53, 0x5e,
++ 0x50, 0x7f, 0x50, 0x41, 0x06, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0x28, 0xa8, 0x28, 0xc8, 0x58,
++ 0x80, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x29, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x10, 0x1b, 0x34, 0x37,
++ 0x32, 0x53, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0xa0, 0xfc, 0xc8, 0x50, 0xc0, 0xf8,
++ 0xa8, 0x38, 0xe8, 0xa8, 0xe8, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x00, 0x3c, 0x01, 0x3c,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x08, 0x08, 0x08, 0x10, 0x1e, 0x32,
++ 0x52, 0x12, 0x12, 0x1e, 0x10, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x3c, 0x20, 0x20, 0x20, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x1a, 0x1c, 0x1b,
++ 0x2a, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x20, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x03,
++ 0x0d, 0x79, 0x07, 0x0d, 0x31, 0x03, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x80,
++ 0x60, 0x3c, 0xc0, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x08, 0x08, 0x7f, 0x08,
++ 0x0c, 0x12, 0x13, 0x7d, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x48, 0x48, 0xc8, 0x48,
++ 0x48, 0x48, 0x70, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x47, 0x0c, 0x32, 0x03,
++ 0x0c, 0x7f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xe0, 0x40, 0x80, 0x80,
++ 0x70, 0xec, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x39, 0x29, 0x2f, 0x39, 0x29, 0x2f, 0x39,
++ 0x29, 0x2a, 0x2a, 0x2f, 0x28, 0x58, 0x00, 0x00,
++ 0x00, 0x38, 0x28, 0xe8, 0x28, 0x28, 0xe8, 0x28,
++ 0x28, 0xa8, 0xf8, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x12, 0x1f, 0x11, 0x10,
++ 0x17, 0x14, 0x27, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0xe8, 0x10, 0xf0, 0x00,
++ 0xf8, 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x02, 0x21, 0x11, 0x17, 0x00, 0x02, 0x02, 0x72,
++ 0x13, 0x12, 0x10, 0x18, 0x27, 0x41, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x40, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x40, 0x80, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0xc0, 0x00, 0x00, 0x00, 0xf8, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x03, 0x04, 0x04, 0x08, 0x10,
++ 0x20, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x20, 0x20, 0x40, 0x40,
++ 0xc0, 0x20, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x09, 0x09, 0x09, 0x11, 0x11, 0x3f, 0x51, 0x11,
++ 0x11, 0x11, 0x12, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xe0, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x24, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x10, 0x17, 0x30, 0x50, 0x10,
++ 0x11, 0x11, 0x12, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0xe0, 0xe0,
++ 0x50, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x04, 0x04, 0x06, 0x0a, 0x09,
++ 0x09, 0x08, 0x10, 0x10, 0x23, 0x4c, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x40, 0x40, 0xf0, 0x10, 0x10,
++ 0x20, 0xa0, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x07, 0x79, 0x49, 0x49, 0x49, 0x49, 0x49,
++ 0x7a, 0x4a, 0x42, 0x04, 0x09, 0x16, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x20, 0x20, 0xf8, 0x88, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x4f, 0x08, 0x08, 0x0f,
++ 0x01, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xe0, 0x20, 0x20, 0xe0,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x1f,
++ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0x10, 0xe0, 0x00, 0x00,
++ 0x02, 0x07, 0x08, 0x3f, 0x00, 0x0f, 0x00, 0x1f,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xc0, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x08, 0x0a, 0x09, 0x7f, 0x08, 0x4a, 0x2b, 0x2c,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x1b, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x88, 0x88, 0x50, 0x50,
++ 0x30, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x29, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0xf8, 0x88, 0x88,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x31, 0x09,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x03, 0x00, 0x00,
++ 0x20, 0x10, 0x10, 0xfc, 0x00, 0x88, 0x88, 0x50,
++ 0x60, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00,
++ 0x20, 0x17, 0x12, 0x42, 0x22, 0x23, 0x03, 0x12,
++ 0x12, 0x12, 0x24, 0x24, 0x48, 0x53, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x20, 0x20, 0x78, 0x08, 0x90,
++ 0x90, 0x60, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x20, 0x22, 0x01, 0x09,
++ 0x08, 0x10, 0x10, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x10, 0x10, 0x10, 0x10,
++ 0x90, 0xa0, 0xa0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x03, 0x0c, 0x31, 0x02, 0x0d, 0x71, 0x01,
++ 0x11, 0x12, 0x22, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xc0, 0x80, 0x80, 0x40, 0x30, 0x0c, 0x10,
++ 0x10, 0xa0, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x13, 0x10, 0x12, 0x7d, 0x11,
++ 0x10, 0x14, 0x19, 0x66, 0x00, 0x00, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0x48, 0x68, 0x70,
++ 0x50, 0xd0, 0x48, 0x44, 0x40, 0xc0, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x44, 0x04, 0x09, 0x11,
++ 0x3f, 0x02, 0x02, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x80, 0x88, 0x78, 0x00,
++ 0xc0, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x48, 0x14, 0x1e, 0x12, 0x1e,
++ 0x1e, 0x12, 0x7e, 0x06, 0x1a, 0x66, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x90, 0x70, 0xf0, 0x10, 0xf0,
++ 0x80, 0xf8, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x14, 0x23, 0x5f, 0x04, 0x04,
++ 0x06, 0x0a, 0x09, 0x10, 0x23, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0xe0, 0x20, 0x40,
++ 0xf0, 0x10, 0x20, 0xc0, 0x60, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2b, 0x49, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x90, 0x90, 0xb8, 0xc8, 0xc8,
++ 0xa8, 0xb0, 0x90, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7d,
++ 0x08, 0x2c, 0x2b, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x10, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
++ 0x9c, 0xf0, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0d, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0xfc, 0x00, 0x00,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x20, 0x27, 0x24, 0x24, 0x24, 0x24, 0x27, 0x24,
++ 0x24, 0x24, 0x24, 0x27, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10,
++ 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x09, 0x1f, 0x11, 0x21, 0x01,
++ 0x7f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00,
++ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x01, 0x01, 0x01, 0x7f,
++ 0x02, 0x02, 0x04, 0x08, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x40, 0x20, 0xf0, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x1f, 0x10,
++ 0x10, 0x17, 0x24, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x88, 0x80, 0xfc, 0x80,
++ 0x80, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x3f, 0x20, 0x20, 0x20,
++ 0x3f, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xe0, 0x20, 0x20, 0x20,
++ 0xe0, 0x20, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x09, 0x09, 0x0f,
++ 0x79, 0x09, 0x09, 0x09, 0x09, 0x19, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08,
++ 0xf8, 0x08, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x12, 0x12, 0x7a, 0x17, 0x15, 0x15, 0x1b,
++ 0x72, 0x12, 0x15, 0x19, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0x90, 0x94, 0x14, 0x0c, 0xc0, 0x3c, 0x00, 0x00,
++ 0x12, 0x09, 0x09, 0x7f, 0x04, 0x08, 0x1f, 0x61,
++ 0x1f, 0x01, 0x3f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x40, 0x60, 0x98, 0x04,
++ 0xf0, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x4a, 0x23, 0x22, 0x0b, 0x0a, 0x13,
++ 0x21, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x11, 0x1f, 0x11, 0x11,
++ 0x19, 0x15, 0x25, 0x21, 0x5f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0xe8, 0x08, 0xf8, 0x40,
++ 0x48, 0x48, 0x50, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x01, 0x3e, 0x00, 0x3f,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x08, 0x28, 0x2e,
++ 0x28, 0x28, 0x28, 0x2e, 0x38, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0x88, 0x88, 0x88,
++ 0xf8, 0x88, 0x80, 0x80, 0xfc, 0x80, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x13, 0x23, 0x5d, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x08, 0x09, 0x41, 0x22, 0x27, 0x02, 0x13,
++ 0x12, 0x13, 0x20, 0x25, 0x44, 0x48, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x20, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x00, 0x48, 0xa4, 0xa4, 0x00, 0x00,
++ 0x12, 0x13, 0x2d, 0x4f, 0x11, 0x35, 0x55, 0x15,
++ 0x1e, 0x1f, 0x00, 0x7f, 0x19, 0x63, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xe8, 0x28, 0xe8, 0x28, 0xf8,
++ 0x20, 0xf0, 0x00, 0xfc, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x07, 0x08, 0x11, 0x3f, 0x51, 0x1f, 0x11,
++ 0x11, 0x1f, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xc0, 0x80, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0x10, 0xf0, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f, 0x00, 0x1f,
++ 0x00, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xe0,
++ 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f, 0x00, 0x1f,
++ 0x00, 0x01, 0x7f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xe0,
++ 0x40, 0x80, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x08, 0x0f,
++ 0x01, 0x09, 0x09, 0x11, 0x21, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xe0, 0x20, 0x20, 0xe0,
++ 0x00, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x09, 0x09, 0x09, 0x11, 0x17, 0x31, 0x51, 0x11,
++ 0x1f, 0x10, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0x20,
++ 0xfc, 0x00, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x12, 0x31, 0x51, 0x1f,
++ 0x10, 0x10, 0x10, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x48, 0x48, 0x50, 0xfc,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x1f, 0x11, 0x33, 0x55, 0x19,
++ 0x17, 0x14, 0x15, 0x15, 0x15, 0x14, 0x00, 0x00,
++ 0x30, 0xc0, 0x80, 0xfc, 0x20, 0xf0, 0x28, 0xe4,
++ 0xf8, 0x08, 0xe8, 0x28, 0xe8, 0x18, 0x00, 0x00,
++ 0x00, 0x20, 0x2d, 0x23, 0x22, 0x24, 0x28, 0x3f,
++ 0x24, 0x04, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x80, 0x90, 0x10, 0x10, 0x90, 0x90, 0x10, 0xf0,
++ 0x90, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x14, 0x14, 0x7f, 0x00, 0x3e,
++ 0x22, 0x3e, 0x14, 0x15, 0x26, 0x45, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x50, 0x50, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x50, 0x50, 0x94, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x3f, 0x04, 0x04, 0x04,
++ 0x7f, 0x00, 0x04, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40,
++ 0xfc, 0x00, 0x40, 0x20, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x40, 0x58, 0x46, 0x41, 0x41, 0x42,
++ 0x44, 0x48, 0x50, 0x7f, 0x40, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x48, 0x88, 0x88, 0x08, 0x88, 0x48,
++ 0x28, 0x28, 0x08, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x10, 0x7c, 0x11, 0x12, 0x12,
++ 0x1f, 0x12, 0x12, 0x14, 0x14, 0x19, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x88, 0x08, 0x30, 0x10,
++ 0xfc, 0x94, 0x94, 0xa4, 0xa4, 0xcc, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x2f, 0x20, 0x20, 0x27, 0x20,
++ 0x20, 0x20, 0x2f, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x80, 0x80, 0xf0, 0x80,
++ 0x80, 0x80, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x33, 0x22, 0x2a, 0x2b, 0x2a, 0x2a, 0x2b,
++ 0x2a, 0x3b, 0x6a, 0x13, 0x16, 0x20, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0x28, 0x28, 0xa8, 0xf0, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x79, 0x49, 0x49, 0x49, 0x49, 0x49,
++ 0x49, 0x79, 0x4f, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x1c, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x0f, 0x01, 0x7f, 0x04, 0x1f, 0x64, 0x07,
++ 0x3f, 0x20, 0x27, 0x24, 0x27, 0x20, 0x00, 0x00,
++ 0x60, 0x80, 0x00, 0xfc, 0x40, 0xf0, 0x4c, 0xc0,
++ 0xf8, 0x08, 0xc8, 0x48, 0xc8, 0x18, 0x00, 0x00,
++ 0x00, 0x13, 0x11, 0x10, 0x7f, 0x10, 0x11, 0x11,
++ 0x15, 0x19, 0x61, 0x00, 0x03, 0x0c, 0x00, 0x00,
++ 0x40, 0xf8, 0x20, 0xa0, 0xfc, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xa0, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x10, 0x56, 0x55, 0x55, 0x57,
++ 0x54, 0x7c, 0x44, 0x41, 0x02, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x48, 0x48, 0x50, 0xfc,
++ 0x40, 0xa0, 0x90, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x78, 0x08, 0x0f, 0x78, 0x4b, 0x42, 0x7a,
++ 0x4b, 0x4a, 0x08, 0x08, 0x17, 0x60, 0x00, 0x00,
++ 0x40, 0x50, 0x88, 0xfc, 0x44, 0xf8, 0x48, 0x48,
++ 0xf8, 0x50, 0x48, 0x7c, 0xc4, 0x04, 0x00, 0x00,
++ 0x00, 0x7b, 0x09, 0x09, 0x79, 0x49, 0x43, 0x79,
++ 0x49, 0x49, 0x09, 0x09, 0x17, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0xf0, 0x50, 0xf0, 0xf8, 0xf0,
++ 0x50, 0xf0, 0x50, 0xf0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x13, 0x38, 0x34, 0x34, 0x57,
++ 0x10, 0x10, 0x10, 0x11, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0x90, 0x88, 0x38, 0xc4, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x09, 0x09, 0x09, 0x0f, 0x72, 0x04,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x90, 0x54, 0x54, 0x0c,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x04, 0x7f, 0x04, 0x0a,
++ 0x12, 0x62, 0x12, 0x12, 0x22, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0x20,
++ 0x10, 0x0c, 0x90, 0x48, 0x48, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x78, 0x12, 0x11, 0x11, 0x1f,
++ 0x70, 0x10, 0x10, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x48, 0x48, 0x50, 0xfc,
++ 0x40, 0xa0, 0x90, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x3f, 0x0a, 0x0a, 0x7f, 0x09, 0x1f,
++ 0x22, 0x47, 0x3c, 0x04, 0x05, 0x0e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x88, 0x88, 0x48,
++ 0x50, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x10, 0x19, 0x36, 0x34,
++ 0x33, 0x52, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xfc, 0xa0, 0xf0, 0xa8, 0xe4,
++ 0xf8, 0x08, 0xe8, 0xa8, 0xe8, 0x18, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x22, 0x23, 0x02, 0x10,
++ 0x10, 0x11, 0x21, 0x22, 0x44, 0x48, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0xa8, 0xa0,
++ 0xa0, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x4f, 0x30, 0x10, 0x30, 0x48, 0x0b, 0x18,
++ 0x28, 0x48, 0x08, 0x08, 0x3f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x44, 0x28, 0x17, 0x32, 0x49, 0x09, 0x1f,
++ 0x28, 0x48, 0x08, 0x09, 0x32, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x48, 0x48, 0x50, 0xfc,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x3f, 0x28, 0x49, 0x0a, 0x7e,
++ 0x0b, 0x0e, 0x16, 0x12, 0x22, 0x42, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xfc, 0xa0, 0xf0, 0xa8, 0xe4,
++ 0xf8, 0x08, 0xe8, 0xa8, 0xe8, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x25, 0x3e, 0x25, 0x25,
++ 0x3d, 0x25, 0x25, 0x25, 0x24, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x24, 0x24, 0xd4, 0x74,
++ 0xb4, 0x14, 0xf4, 0x14, 0x04, 0x18, 0x00, 0x00,
++ 0x02, 0x0f, 0x02, 0x0c, 0x7f, 0x12, 0x26, 0x4f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0xc0, 0xf8, 0x48, 0x98, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x37, 0x24, 0x27, 0x3c, 0x27, 0x3e, 0x27,
++ 0x24, 0x7f, 0x00, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xc8, 0x78, 0xc8, 0xf8, 0xc8,
++ 0x48, 0xfc, 0x00, 0x60, 0x10, 0x08, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x01, 0x3f, 0x07, 0x1c,
++ 0x67, 0x1f, 0x17, 0x14, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x60, 0xc0, 0x00, 0xf8, 0xc0, 0x70,
++ 0xcc, 0xf0, 0xd0, 0x50, 0xd0, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x66, 0x2b, 0x1a, 0x12, 0x1b,
++ 0x2b, 0x7a, 0x12, 0x13, 0x2c, 0x40, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xb0, 0xb0, 0xa8, 0xa8,
++ 0x24, 0xa4, 0xe4, 0x78, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x13, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x73, 0x00, 0x00,
++ 0x20, 0xf8, 0x90, 0xfc, 0x00, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x13, 0x6a, 0x2b, 0x1f, 0x6a, 0x13, 0x3f, 0x04,
++ 0x7f, 0x0f, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0xb8, 0xa8, 0xb8, 0xa4, 0xf8, 0x60, 0xf8, 0x40,
++ 0xfc, 0xe0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x11, 0x5b, 0x2b, 0x16, 0x7f, 0x0b, 0x33, 0x07,
++ 0x1f, 0x67, 0x07, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x38, 0xa8, 0xb0, 0xa8, 0xe4, 0xf8, 0xa0, 0xc0,
++ 0xf0, 0xcc, 0xc0, 0xb0, 0x60, 0x18, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x3f, 0x7a, 0x2a, 0x3f, 0x08,
++ 0x0f, 0x0f, 0x0f, 0x2a, 0x25, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x30, 0xcc, 0xf0, 0x80,
++ 0xe0, 0xe0, 0xf8, 0x48, 0x28, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x12, 0x12, 0x32, 0x52, 0x12,
++ 0x12, 0x13, 0x1e, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x80, 0x78, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0xc8, 0x70, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x09, 0x4e, 0x28, 0x27, 0x04, 0x17, 0x1a,
++ 0x22, 0x3f, 0x46, 0x45, 0x48, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xb0, 0x90, 0x7c, 0x98, 0x50,
++ 0x5c, 0xd0, 0x50, 0x70, 0x90, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x09, 0x7f, 0x08, 0x08,
++ 0x7f, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0x20, 0xfc, 0x20, 0x20,
++ 0xfc, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x48, 0x49, 0x4f, 0x79, 0x49,
++ 0x4f, 0x48, 0x78, 0x49, 0x42, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x50, 0xfc, 0x10, 0x10,
++ 0xfc, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x02, 0x12, 0x0a, 0x7f, 0x04, 0x3f, 0x01, 0x1f,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x80, 0x90, 0xa0, 0xfc, 0x40, 0xf8, 0x00, 0xf0,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x1f, 0x10,
++ 0x13, 0x12, 0x12, 0x23, 0x22, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x00, 0xfc, 0x04,
++ 0xe4, 0x24, 0x24, 0xe4, 0x24, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x3f, 0x24, 0x24, 0x24, 0x3f,
++ 0x24, 0x24, 0x24, 0x3f, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0x48, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7c, 0x11, 0x11, 0x3b, 0x36,
++ 0x36, 0x53, 0x52, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xdc, 0x24, 0xb4, 0xa8,
++ 0xa8, 0xb4, 0x24, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x1f, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00,
++ 0x20, 0x10, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x13, 0x12, 0x3a, 0x36,
++ 0x36, 0x52, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xe8, 0xa8,
++ 0xa8, 0xe8, 0xa8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x08, 0x7e, 0x09, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x09, 0x09, 0x0f, 0x11, 0x13, 0x32, 0x53, 0x10,
++ 0x13, 0x10, 0x13, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xf8, 0x48, 0xf8, 0x40,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x3e, 0x2b, 0x2a, 0x3e, 0x08,
++ 0x3e, 0x08, 0x3e, 0x08, 0x0e, 0x79, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x11, 0x7e, 0x13, 0x14, 0x10,
++ 0x10, 0x14, 0x1b, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x88, 0x88,
++ 0x28, 0xc8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x3f, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x70, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x20,
++ 0xfc, 0x24, 0x24, 0x24, 0x38, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x08,
++ 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00,
++ 0x10, 0x60, 0x80, 0x00, 0x00, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x02, 0x1c, 0x10, 0x10, 0x1f, 0x15, 0x14,
++ 0x14, 0x14, 0x24, 0x24, 0x45, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa8, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa8, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x08, 0x3e, 0x08, 0x0f, 0x72, 0x04,
++ 0x1f, 0x60, 0x0f, 0x00, 0x00, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x80, 0x40,
++ 0xf0, 0x0c, 0xe0, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x1c, 0x1a, 0x2a, 0x49, 0x0f,
++ 0x00, 0x7f, 0x09, 0x11, 0x61, 0x03, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x60, 0x70, 0xa8, 0x24, 0xe0,
++ 0x00, 0xfc, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x05, 0x1f, 0x6a, 0x09, 0x0e, 0x0f,
++ 0x01, 0x1f, 0x12, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0xf0, 0xac, 0xa0, 0x60, 0xe0,
++ 0x00, 0xf0, 0x90, 0xd0, 0x50, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x14, 0x23, 0x40, 0x1e, 0x13,
++ 0x1e, 0x12, 0x1e, 0x22, 0x22, 0x47, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x40, 0x40, 0xf8,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3e, 0x22, 0x3e, 0x3f, 0x21,
++ 0x0e, 0x01, 0x7f, 0x0d, 0x31, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c, 0x20,
++ 0x60, 0x98, 0xe4, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x04, 0x0f, 0x08, 0x0f,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x70, 0xc0, 0x00, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x20, 0x2f, 0x21, 0x3f,
++ 0x23, 0x25, 0x39, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x68, 0x88, 0x08, 0xf8,
++ 0x88, 0x48, 0x28, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x08, 0x0b, 0x12, 0x3c,
++ 0x55, 0x12, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x60, 0xa0, 0x90, 0xf8, 0x04, 0x00,
++ 0xf8, 0x10, 0x10, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x09, 0x0a, 0x14, 0x19,
++ 0x34, 0x57, 0x11, 0x11, 0x12, 0x10, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0xd0, 0xb8, 0xd4, 0x90, 0xf8,
++ 0x00, 0xfc, 0x28, 0x24, 0x24, 0x60, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7c, 0x03, 0x3e, 0x03, 0x3c,
++ 0x03, 0x3c, 0x27, 0x24, 0x3f, 0x20, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf8, 0x48, 0xf8, 0x40,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x13, 0x12, 0x02, 0x03, 0x02, 0x72,
++ 0x12, 0x14, 0x14, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x10, 0x60, 0x80, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x18, 0x67, 0x01, 0x3f,
++ 0x01, 0x09, 0x05, 0x05, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0xcc, 0x00, 0xf8,
++ 0x00, 0x20, 0x20, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x48, 0x49, 0x4b, 0x4c, 0x48,
++ 0x4b, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0x00,
++ 0xf8, 0x08, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x73, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x88, 0xf8,
++ 0xa4, 0xa8, 0x90, 0xb0, 0xc8, 0x04, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x02, 0x7f, 0x02, 0x02, 0x02,
++ 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x44, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x32, 0x53, 0x12,
++ 0x13, 0x10, 0x1f, 0x11, 0x12, 0x1c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x00, 0xfc, 0x20, 0x10, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x1f, 0x10, 0x2f, 0x48, 0x08,
++ 0x08, 0x0f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x20, 0x2c, 0x23, 0x20,
++ 0x21, 0x22, 0x24, 0x28, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80,
++ 0x40, 0x20, 0x20, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x48, 0x30, 0x11, 0x31, 0x4a, 0x0d, 0x19,
++ 0x29, 0x49, 0x09, 0x08, 0x30, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0x08, 0xe8, 0x28,
++ 0x28, 0xe8, 0x28, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x10, 0x11, 0x11, 0x7e, 0x10,
++ 0x10, 0x14, 0x18, 0x61, 0x02, 0x0c, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf0, 0x10, 0x10, 0x20, 0x20,
++ 0x60, 0x60, 0x90, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x3f, 0x28, 0x48, 0x08, 0x7f,
++ 0x08, 0x0c, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0x88, 0x88, 0x88,
++ 0xf8, 0x88, 0x80, 0x80, 0xfc, 0x80, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x01, 0x7f, 0x01,
++ 0x01, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xfc, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x10, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x23,
++ 0x3e, 0x66, 0x0a, 0x12, 0x62, 0x06, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x88, 0x88, 0xc8, 0xb0, 0x90,
++ 0x90, 0xa8, 0xc8, 0x80, 0xfc, 0x80, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x88, 0xc8, 0xb0, 0x90, 0x90,
++ 0xa8, 0xa8, 0xc0, 0x80, 0xfc, 0x80, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x43, 0x0c, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3f, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x88, 0xe8, 0xa8, 0xa8,
++ 0xe8, 0xa8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x00, 0x7f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0xe0, 0x20,
++ 0xe0, 0x00, 0xfc, 0x60, 0x10, 0x08, 0x00, 0x00,
++ 0x00, 0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x3f, 0x21,
++ 0x2f, 0x21, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xf8, 0x48,
++ 0xe8, 0x38, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x11, 0x1f, 0x10, 0x15, 0x15,
++ 0x15, 0x17, 0x20, 0x3f, 0x46, 0x18, 0x00, 0x00,
++ 0x00, 0xf0, 0xfc, 0xe8, 0x08, 0xf8, 0xf0, 0x10,
++ 0xf0, 0xe0, 0x20, 0xfc, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x49, 0x4e, 0x49, 0x49, 0x49,
++ 0x49, 0x79, 0x49, 0x41, 0x01, 0x0f, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xf0, 0x0c, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf8, 0x48, 0x30, 0xd8, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x44, 0x08, 0x10, 0x00,
++ 0x1f, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x80, 0x88, 0x78, 0x00,
++ 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x13, 0x12, 0x33, 0x50, 0x17,
++ 0x14, 0x14, 0x17, 0x14, 0x14, 0x14, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0xf0, 0x90, 0xf0, 0x80, 0xf8,
++ 0xa8, 0xf8, 0x18, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x4f, 0x09, 0x0f, 0x09, 0x0f,
++ 0x01, 0x3f, 0x21, 0x2f, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0x00, 0xf8, 0x48, 0xe8, 0x28, 0x18, 0x00, 0x00,
++ 0x00, 0x23, 0x12, 0x13, 0x02, 0x03, 0x70, 0x17,
++ 0x14, 0x14, 0x17, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0xf0, 0x90, 0xf0, 0x80, 0xf8,
++ 0xa8, 0xf8, 0x08, 0x18, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x29, 0x31, 0x29, 0x25, 0x24,
++ 0x27, 0x26, 0x3a, 0x23, 0x22, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8, 0x40,
++ 0xfc, 0x54, 0x7c, 0x8c, 0x04, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x11, 0x11, 0x1f, 0x01, 0x3f,
++ 0x21, 0x21, 0x3f, 0x21, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x00, 0xf8,
++ 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x12, 0x13, 0x13, 0x7c, 0x10, 0x1b, 0x36, 0x37,
++ 0x32, 0x53, 0x53, 0x12, 0x13, 0x1c, 0x00, 0x00,
++ 0x20, 0xfc, 0x30, 0xc8, 0x00, 0xb8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0x28, 0xb0, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1d, 0x19, 0x0e, 0x74, 0x00, 0x00,
++ 0x08, 0x88, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0x28, 0x28, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x14, 0x12, 0x17, 0x14,
++ 0x17, 0x14, 0x27, 0x24, 0x44, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x90, 0xa0, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x14, 0x14, 0x17,
++ 0x14, 0x18, 0x28, 0x28, 0x4f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x88, 0x90, 0x90, 0xf0,
++ 0x90, 0x88, 0x88, 0x88, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x12, 0x12, 0x1e,
++ 0x72, 0x13, 0x15, 0x15, 0x19, 0x31, 0x00, 0x00,
++ 0x00, 0xfc, 0x04, 0xfc, 0x24, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0x24, 0x24, 0x24, 0xfc, 0x04, 0x00, 0x00,
++ 0x01, 0x3f, 0x26, 0x58, 0x1f, 0x10, 0x1f, 0x14,
++ 0x14, 0x17, 0x28, 0x28, 0x4f, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x78, 0xf8, 0x08, 0xf8, 0x90,
++ 0x90, 0xf0, 0x88, 0x88, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x05, 0x09, 0x11, 0x63, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x08, 0x90, 0x60, 0x20, 0x10, 0x0c, 0xe0,
++ 0x20, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1c, 0x09, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x60, 0x60, 0x60, 0xa4, 0xa4, 0xa8, 0xb0, 0xa0,
++ 0xa0, 0xa0, 0xa0, 0xa4, 0xa4, 0x9c, 0x00, 0x00,
++ 0x21, 0x2f, 0x4f, 0x35, 0x2f, 0x7d, 0x37, 0x5f,
++ 0x11, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x10, 0xd4, 0xe4, 0x58, 0xd4, 0x7c, 0xd8, 0xf4,
++ 0x10, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x44, 0x08, 0x10, 0x0b, 0x48,
++ 0x27, 0x20, 0x0b, 0x08, 0x17, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x88, 0x78, 0x40, 0xf8, 0x40,
++ 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x12, 0x7f, 0x01, 0x3e, 0x22, 0x3e, 0x22,
++ 0x3e, 0x22, 0x26, 0x14, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0x48, 0x70, 0x44, 0x3c, 0x40, 0x4c, 0x70,
++ 0x40, 0x44, 0x3c, 0x90, 0x48, 0x44, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x29, 0x31, 0x29, 0x24, 0x27,
++ 0x25, 0x25, 0x39, 0x21, 0x21, 0x26, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x00, 0xfc,
++ 0x48, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x07, 0x18, 0x01, 0x07, 0x79, 0x09, 0x05,
++ 0x3f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0xc0, 0x30, 0x2c, 0x20, 0x40,
++ 0xf8, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x1f, 0x12, 0x12, 0x1f, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0x90, 0x90, 0xf0, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0d, 0x13, 0x7f,
++ 0x08, 0x2d, 0x2a, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x00, 0xdc, 0x54, 0xdc,
++ 0x20, 0xfc, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x04, 0x03, 0x3e, 0x12, 0x0d, 0x1b,
++ 0x61, 0x3f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x80, 0xf8, 0x48, 0x30, 0xc8,
++ 0x04, 0xf8, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1b, 0x24, 0x24, 0x7b, 0x10, 0x7d,
++ 0x11, 0x55, 0x3a, 0x30, 0x1c, 0x60, 0x00, 0x00,
++ 0x50, 0x90, 0x90, 0x94, 0xb4, 0xf4, 0xb8, 0xd0,
++ 0xb0, 0x98, 0xa8, 0xa8, 0xc4, 0x84, 0x00, 0x00,
++ 0x02, 0x3c, 0x7f, 0x3f, 0x2a, 0x3e, 0x2a, 0x3e,
++ 0x3e, 0x0f, 0x79, 0x00, 0x24, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0x88, 0x88, 0x30, 0x00, 0x88, 0x44, 0x00, 0x00,
++ 0x00, 0x1f, 0x02, 0x02, 0x7f, 0x02, 0x02, 0x1f,
++ 0x04, 0x0f, 0x14, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xe0,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x7f, 0x0f, 0x09, 0x0f,
++ 0x09, 0x0f, 0x1f, 0x7f, 0x12, 0x61, 0x00, 0x00,
++ 0x40, 0xfc, 0x60, 0xc0, 0xfc, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0xf0, 0xfc, 0x48, 0x24, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x7f, 0x00, 0x3e, 0x00, 0x3e,
++ 0x00, 0x3e, 0x22, 0x23, 0x3f, 0x22, 0x00, 0x00,
++ 0x08, 0x88, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x3e, 0x12, 0x13, 0x7f, 0x12, 0x3e, 0x10,
++ 0x1e, 0x33, 0x32, 0x52, 0x1e, 0x10, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x7f, 0x01, 0x1f, 0x11, 0x1f,
++ 0x11, 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf8, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x09, 0x09, 0x7f, 0x09, 0x3f, 0x08,
++ 0x0f, 0x19, 0x19, 0x29, 0x4f, 0x09, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0xd0, 0x60, 0x50, 0x48,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x3f, 0x04, 0x04, 0x7f, 0x04,
++ 0x04, 0x3f, 0x04, 0x04, 0x07, 0x7c, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xa0, 0x20, 0x30, 0xe8, 0x24,
++ 0x24, 0xa0, 0x20, 0x20, 0xa0, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x7e, 0x12, 0x12, 0x22, 0x4d, 0x01,
++ 0x7f, 0x03, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00,
++ 0xfc, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x02, 0x04, 0x08, 0x1c,
++ 0x2a, 0x4a, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x90, 0x90, 0xa0, 0x90, 0x88,
++ 0x84, 0x84, 0xc4, 0xb8, 0x80, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x13, 0x30, 0x50, 0x11,
++ 0x17, 0x10, 0x12, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x18, 0xe0, 0x90, 0x90, 0x20, 0xd0, 0x98, 0xe4,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x14, 0x15, 0x35, 0x56, 0x14,
++ 0x14, 0x15, 0x15, 0x13, 0x10, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x20, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x12, 0x12, 0x12, 0x12, 0x7f, 0x12,
++ 0x12, 0x12, 0x12, 0x22, 0x22, 0x42, 0x00, 0x00,
++ 0x08, 0xc8, 0x48, 0x48, 0x48, 0x48, 0xc8, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x15, 0x05,
++ 0x05, 0x09, 0x09, 0x11, 0x21, 0x40, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00,
++ 0x00, 0x00, 0x08, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x3f, 0x22, 0x22, 0x3e, 0x23,
++ 0x20, 0x4f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x90, 0x90, 0x60, 0x60, 0x90,
++ 0x0c, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x01, 0x01,
++ 0x3f, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x10, 0x10, 0x17, 0x7c, 0x10,
++ 0x13, 0x14, 0x18, 0x60, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x22,
++ 0x41, 0x1f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x08, 0xc8, 0x48, 0x48, 0xc8, 0x48, 0x48, 0x18,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x08, 0x3e, 0x08, 0x0f, 0x71,
++ 0x01, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x88, 0x08, 0x30,
++ 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x12, 0x12, 0x12, 0x12, 0x7f, 0x12,
++ 0x12, 0x12, 0x12, 0x22, 0x22, 0x42, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x20, 0x48, 0x08, 0x90, 0x10,
++ 0x24, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x08, 0x0b, 0x11, 0x24, 0x04, 0x09, 0x1e, 0x28,
++ 0x4b, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0xa0, 0x40, 0xf0, 0x4c, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x12, 0x1f, 0x1f, 0x15,
++ 0x19, 0x13, 0x2d, 0x20, 0x43, 0x1c, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0xfc, 0x58,
++ 0xe4, 0xf4, 0x20, 0xc0, 0x60, 0x1c, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x0f, 0x78, 0x0f, 0x07,
++ 0x00, 0x0f, 0x25, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0xfc, 0x20, 0xe0, 0xe0,
++ 0x20, 0xe0, 0x08, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x02, 0x3c, 0x08, 0x7f, 0x08, 0x3e, 0x22, 0x3e,
++ 0x20, 0x05, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x20, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x88, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x10, 0x1d,
++ 0x73, 0x15, 0x11, 0x11, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x80, 0xfc,
++ 0x34, 0xc4, 0x04, 0x14, 0xf4, 0x18, 0x00, 0x00,
++ 0x11, 0x11, 0x13, 0x7f, 0x15, 0x11, 0x11, 0x15,
++ 0x1f, 0x71, 0x11, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xf8, 0x20, 0xfc,
++ 0xe0, 0x20, 0x3c, 0x04, 0x04, 0x18, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x10, 0x1e, 0x23, 0x7a,
++ 0x2a, 0x2a, 0x3a, 0x22, 0x02, 0x0d, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x88, 0x88, 0x48, 0x50,
++ 0x30, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x01, 0x7f,
++ 0x0f, 0x08, 0x0f, 0x05, 0x09, 0x33, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x00, 0xfc,
++ 0xe0, 0x20, 0xe0, 0x60, 0x10, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x08, 0x1b, 0x1c, 0x1a,
++ 0x2b, 0x28, 0x48, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x21, 0x21, 0x00, 0x13,
++ 0x10, 0x17, 0x20, 0x20, 0x41, 0x46, 0x00, 0x00,
++ 0x08, 0x70, 0x88, 0x48, 0x50, 0x20, 0x40, 0xf8,
++ 0x40, 0xfc, 0xc0, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x54, 0x54, 0x57, 0x7c, 0x54,
++ 0x57, 0x54, 0x7c, 0x44, 0x07, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x0d, 0x78, 0x08, 0x09, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x28, 0xfc, 0x60, 0xa4, 0x9c, 0xf0, 0x84, 0x7c,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x02, 0x1c, 0x03, 0x01, 0x7f,
++ 0x01, 0x09, 0x09, 0x11, 0x21, 0x01, 0x00, 0x00,
++ 0x38, 0xc0, 0x20, 0x20, 0x40, 0x90, 0x08, 0xfc,
++ 0x04, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x0a, 0x72, 0x14, 0x0c, 0x13, 0x7f,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x4b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x20, 0x70, 0xac, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x0b, 0x73, 0x15, 0x0d, 0x13, 0x7f,
++ 0x09, 0x2d, 0x2b, 0x2b, 0x49, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0xa8, 0x68, 0x70, 0x20, 0xfc, 0x20,
++ 0x70, 0xa8, 0x28, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x2a, 0x3f, 0x2a, 0x3e, 0x7f,
++ 0x0a, 0x0e, 0x01, 0x7f, 0x0d, 0x31, 0x00, 0x00,
++ 0x00, 0x70, 0x54, 0x8c, 0xf8, 0x90, 0x60, 0xb0,
++ 0x4c, 0xc0, 0x70, 0x88, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x04, 0x3f, 0x04, 0x7f,
++ 0x04, 0x3f, 0x04, 0x07, 0x78, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x20, 0x20, 0x30, 0xa8,
++ 0x24, 0x24, 0x20, 0xa0, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x04, 0x03, 0x0d,
++ 0x71, 0x0f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x60, 0x80, 0x60,
++ 0x1c, 0xe0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x3f, 0x12, 0x12,
++ 0x7f, 0x12, 0x12, 0x12, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0x48, 0x48, 0x48,
++ 0xc8, 0x48, 0x48, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x12, 0x09, 0x09, 0x3f, 0x21, 0x41, 0x0f, 0x09,
++ 0x09, 0x0f, 0x09, 0x01, 0x01, 0x3e, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x08, 0x00, 0xe0, 0x20,
++ 0x20, 0xe0, 0x20, 0x10, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x80, 0x98, 0xe0, 0x80, 0x84, 0x7c, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x12, 0x7f, 0x1f, 0x3d, 0x55, 0x1e, 0x07, 0x7f,
++ 0x07, 0x07, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0xc8, 0x50, 0x30, 0xcc, 0xc0, 0xfc,
++ 0xc0, 0xc0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x7e, 0x08, 0x3e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x20, 0xf0, 0x2c, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x34, 0x0c, 0x1a, 0x29, 0x48,
++ 0x3e, 0x08, 0x08, 0x0e, 0x70, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x02, 0x0c, 0x72, 0x4a, 0x2c, 0x08, 0x3e, 0x08,
++ 0x7e, 0x08, 0x14, 0x13, 0x21, 0x42, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x38, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x04, 0x1f, 0x00, 0x00,
++ 0x7f, 0x02, 0x02, 0x04, 0x3f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf0, 0x00, 0x00,
++ 0xfc, 0x40, 0x20, 0xf0, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x20, 0x13, 0x12, 0x02, 0x02, 0x72, 0x12,
++ 0x13, 0x1e, 0x10, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x80, 0x78, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0xc8, 0x70, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x00, 0xf8, 0x88, 0x88, 0xf8,
++ 0x20, 0xb0, 0xa8, 0xa4, 0x24, 0x60, 0x00, 0x00,
++ 0x04, 0x07, 0x3f, 0x26, 0x3b, 0x3f, 0x26, 0x3c,
++ 0x27, 0x3b, 0x26, 0x3a, 0x42, 0x0c, 0x00, 0x00,
++ 0x08, 0xa8, 0xe8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0x28, 0x28, 0xa8, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x22, 0x3e, 0x22,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x08, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x5c, 0xe0, 0x48, 0x48, 0x50,
++ 0x30, 0x20, 0x60, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x2a, 0x3f, 0x3e, 0x7f, 0x08,
++ 0x0f, 0x1f, 0x01, 0x7f, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x70, 0x54, 0x8c, 0xf8, 0x50, 0x30, 0xcc,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x21, 0x12, 0x17, 0x44, 0x27, 0x24, 0x07, 0x12,
++ 0x1f, 0x13, 0x24, 0x24, 0x4b, 0x50, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0xa0, 0xfc, 0xc8, 0xa8, 0x28,
++ 0xe8, 0x90, 0x90, 0xa8, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x2a, 0x31, 0x29, 0x25, 0x25,
++ 0x25, 0x25, 0x39, 0x22, 0x24, 0x20, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x48, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x50, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x08, 0x1c, 0x1b, 0x1b,
++ 0x29, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x80, 0xf8, 0x00, 0x00, 0x80, 0xfc, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x09, 0x09, 0x0b, 0x12, 0x15, 0x31, 0x52, 0x14,
++ 0x1f, 0x10, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0xfc, 0xa8, 0xa8, 0x7c, 0x48, 0x48,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x1f, 0x11, 0x21, 0x41,
++ 0x01, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x08, 0x10, 0x20,
++ 0x80, 0x80, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x20, 0x20, 0x00, 0x1f,
++ 0x10, 0x11, 0x21, 0x22, 0x44, 0x48, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf0, 0x90, 0x90, 0x90, 0xfc,
++ 0xc0, 0x20, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x22, 0x1f, 0x12, 0x4f, 0x22, 0x23, 0x0c, 0x11,
++ 0x17, 0x10, 0x2f, 0x22, 0x4c, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xa8, 0x28, 0xd8, 0xa0, 0x20,
++ 0x50, 0xb8, 0xc8, 0xb0, 0x88, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x40, 0x01, 0x04, 0x04,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xc0, 0x40, 0x40,
++ 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x00,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x02, 0x1f, 0x12, 0x12, 0x12,
++ 0x12, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x90, 0x90, 0x90,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x00, 0x3c, 0x00, 0x3f,
++ 0x00, 0x3c, 0x24, 0x25, 0x3e, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xfc,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x08,
++ 0x0f, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x13, 0x12, 0x34, 0x50, 0x17,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x12, 0x17, 0x38, 0x57, 0x14,
++ 0x17, 0x14, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x80, 0x80, 0x40, 0x20, 0xf0, 0x88, 0xf0, 0x90,
++ 0xf0, 0x90, 0x40, 0x20, 0x10, 0x08, 0x00, 0x00,
++ 0x08, 0x0a, 0x09, 0x13, 0x10, 0x37, 0x50, 0x11,
++ 0x12, 0x15, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00,
++ 0x40, 0x48, 0x50, 0xf8, 0x40, 0xfc, 0xa0, 0xf0,
++ 0x28, 0xe4, 0x20, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x08, 0x08, 0x0e, 0x13, 0x12, 0x34, 0x5f, 0x11,
++ 0x15, 0x15, 0x12, 0x13, 0x14, 0x18, 0x00, 0x00,
++ 0x20, 0xf8, 0x28, 0xfc, 0x28, 0xf8, 0x20, 0xf8,
++ 0x20, 0xfc, 0x20, 0x20, 0xc0, 0x3c, 0x00, 0x00,
++ 0x08, 0x04, 0x7f, 0x04, 0x3f, 0x04, 0x7f, 0x04,
++ 0x3f, 0x04, 0x1c, 0x64, 0x04, 0x04, 0x00, 0x00,
++ 0x20, 0x40, 0xfc, 0x80, 0xf0, 0x90, 0xfc, 0x90,
++ 0xf0, 0xc0, 0xb0, 0x8c, 0x80, 0x80, 0x00, 0x00,
++ 0x01, 0x11, 0x09, 0x3f, 0x02, 0x7f, 0x04, 0x18,
++ 0x6f, 0x02, 0x02, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x10, 0x20, 0xf8, 0x80, 0xfc, 0x40, 0x30,
++ 0xec, 0x20, 0x20, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x04, 0x04, 0x0a, 0x11, 0x7f, 0x04, 0x3f, 0x25,
++ 0x3f, 0x24, 0x0a, 0x09, 0x11, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x48, 0x48, 0xc8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4b, 0x48, 0x49, 0x49,
++ 0x49, 0x79, 0x49, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x08, 0xf8, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x25, 0x2f, 0x22, 0x3f, 0x24, 0x2f,
++ 0x30, 0x27, 0x24, 0x23, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xe8, 0x88, 0xf8, 0x48, 0xe8,
++ 0x58, 0xc8, 0x28, 0xe8, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3e, 0x22, 0x3e, 0x24, 0x3f,
++ 0x21, 0x1f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x50, 0x20, 0xd0, 0x0c,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x10, 0x13, 0x10, 0x7d, 0x24, 0x27, 0x24,
++ 0x79, 0x48, 0x0d, 0x16, 0x24, 0x40, 0x00, 0x00,
++ 0x08, 0x90, 0xfc, 0xa0, 0xf8, 0xa8, 0xfc, 0xa8,
++ 0xf8, 0xa0, 0xb0, 0xa8, 0xa4, 0xa0, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x08, 0x17, 0x10, 0x3b, 0x08,
++ 0x4b, 0x28, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0x40,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0xfc, 0x00, 0x00,
++ 0x01, 0x3f, 0x21, 0x7f, 0x1f, 0x01, 0x7f, 0x1f,
++ 0x12, 0x1f, 0x25, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf8, 0xf0, 0x00, 0xfc, 0xf0,
++ 0x90, 0xf0, 0x08, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x1e, 0x52, 0x5e, 0x5e, 0x52, 0x5f, 0x7e, 0x2a,
++ 0x29, 0x49, 0x04, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x18, 0xe0, 0x28, 0xd0, 0x28, 0xfc, 0x64, 0xa8,
++ 0x24, 0x20, 0x80, 0x88, 0x24, 0xe4, 0x00, 0x00,
++ 0x09, 0x11, 0x1f, 0x02, 0x7f, 0x08, 0x1f, 0x61,
++ 0x1f, 0x01, 0x3f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x20, 0x10, 0xf0, 0x80, 0xfc, 0x20, 0xd8, 0x04,
++ 0xf0, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x7f, 0x10, 0x17, 0x11, 0x13,
++ 0x1c, 0x71, 0x11, 0x11, 0x11, 0x30, 0x00, 0x00,
++ 0x40, 0x48, 0x50, 0xf8, 0xa0, 0xfc, 0x10, 0xe8,
++ 0x24, 0xe0, 0x20, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x0b, 0x18, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x48, 0x08, 0x0b, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x44, 0xf8, 0x48,
++ 0x48, 0xf8, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x13, 0x30, 0x39, 0x37,
++ 0x55, 0x51, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x40, 0xfc, 0x90, 0xfc, 0x20,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x06, 0x03, 0x7f, 0x44, 0x5f,
++ 0x09, 0x0f, 0x11, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0xc0, 0x00, 0xfc, 0x48, 0xe0,
++ 0x10, 0xe0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x01, 0x03, 0x02,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x80,
++ 0x80, 0x40, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3f, 0x33, 0x2d, 0x3f,
++ 0x25, 0x3f, 0x25, 0x25, 0x25, 0x23, 0x00, 0x00,
++ 0x20, 0x28, 0xa4, 0x24, 0xfc, 0x20, 0x20, 0x30,
++ 0x50, 0x50, 0x48, 0x88, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x08, 0x08, 0x08, 0x10, 0x1f, 0x32,
++ 0x52, 0x12, 0x12, 0x1f, 0x11, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x90, 0x90, 0x90, 0xfc, 0x90,
++ 0x90, 0x90, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x11, 0x11, 0x11, 0x3d, 0x25,
++ 0x65, 0x24, 0x24, 0x3d, 0x22, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x00, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x07, 0x24, 0x27, 0x24, 0x27, 0x24, 0x27,
++ 0x20, 0x3f, 0x25, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x00, 0xfc, 0x60, 0x18, 0x04, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x14, 0x17, 0x24, 0x47, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x0a, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0xe0, 0x20,
++ 0xe0, 0xa0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x38, 0x03, 0x7c, 0x03, 0x38, 0x07, 0x38,
++ 0x03, 0x38, 0x29, 0x2a, 0x3c, 0x20, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xfc, 0xa8,
++ 0xf8, 0xa0, 0xb0, 0xa8, 0xa4, 0xa0, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3e, 0x3e, 0x3f, 0x2f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x70, 0x8c, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x23, 0x12, 0x13, 0x00, 0x0f, 0x71, 0x11,
++ 0x11, 0x11, 0x11, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xf8, 0x40, 0xfc, 0xf0, 0x10,
++ 0xf0, 0xf8, 0x08, 0xf8, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x1b, 0x24, 0x25, 0x79, 0x13, 0x7c,
++ 0x12, 0x56, 0x39, 0x31, 0x1a, 0x64, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0xa8, 0xfc, 0x28, 0xf8, 0xa0,
++ 0xf8, 0xa0, 0xfc, 0x20, 0xa0, 0x7c, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x29, 0x2b, 0x30, 0x2b, 0x26,
++ 0x26, 0x27, 0x38, 0x20, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x44, 0xf8, 0x48,
++ 0x48, 0xf8, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x3e, 0x22, 0x3e, 0x14, 0x15,
++ 0x55, 0x36, 0x34, 0x16, 0x18, 0x63, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x29, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x88, 0xfc, 0x20, 0xf8, 0xa8,
++ 0xa8, 0xf8, 0x60, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x1e, 0x10, 0x7f, 0x52, 0x4e, 0x76,
++ 0x6e, 0x5a, 0x76, 0x4a, 0x7e, 0x43, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x88, 0xfc, 0x20, 0xf8, 0xa8,
++ 0xa8, 0xf8, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x00, 0x7f, 0x04, 0x04,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x80, 0x80,
++ 0x80, 0x80, 0x84, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x13, 0x12, 0x13, 0x12, 0x13,
++ 0x10, 0x12, 0x22, 0x24, 0x48, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x80, 0xa0, 0x90, 0x88, 0x88, 0x80, 0x00, 0x00,
++ 0x09, 0x04, 0x1f, 0x10, 0x1f, 0x12, 0x1f, 0x15,
++ 0x17, 0x17, 0x25, 0x3f, 0x41, 0x01, 0x00, 0x00,
++ 0x08, 0x90, 0xfc, 0x20, 0xa0, 0x20, 0xbc, 0x48,
++ 0xa8, 0x30, 0x10, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x0a, 0x72, 0x12, 0x0c, 0x04,
++ 0x0c, 0x0a, 0x12, 0x7d, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x7c, 0x07, 0x04, 0x3c, 0x27, 0x20, 0x3c,
++ 0x24, 0x24, 0x04, 0x04, 0x0b, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x48, 0x88, 0x90, 0x50,
++ 0x20, 0x20, 0x50, 0x88, 0xf4, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x24, 0x27, 0x04, 0x17,
++ 0x16, 0x16, 0x27, 0x2a, 0x48, 0x51, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0xe8, 0x28, 0xa8,
++ 0xb0, 0x90, 0xb4, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x22, 0x22, 0x02, 0x12,
++ 0x12, 0x12, 0x24, 0x24, 0x49, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x20, 0xa8, 0xa4, 0x24, 0x60, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x01, 0x02, 0x1a, 0x06,
++ 0x01, 0x00, 0x01, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0xa0, 0x10, 0x78, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x01, 0x7d, 0x11, 0x11, 0x11, 0x7d, 0x11,
++ 0x11, 0x10, 0x1c, 0x61, 0x06, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0d, 0x12, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x4b, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x28, 0xc8, 0x50,
++ 0x30, 0x20, 0x30, 0x48, 0xfc, 0x04, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x13, 0x1a, 0x16, 0x17, 0x7f,
++ 0x12, 0x1a, 0x1a, 0x2a, 0x23, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x28, 0xc8, 0x50,
++ 0x30, 0x10, 0x28, 0x48, 0xf4, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x00, 0x7f, 0x00, 0x0f, 0x00, 0x0f,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xe0, 0x00, 0xfc, 0x00, 0xe0, 0x00, 0xe0,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7c, 0x00, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x26, 0x3e, 0x25, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x50, 0xfc, 0x10, 0x20,
++ 0xc8, 0x10, 0x64, 0x08, 0x30, 0xc0, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x29, 0x31, 0x29, 0x25, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x21, 0x26, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x48,
++ 0x48, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x11, 0x09, 0x09, 0x01, 0x7f,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x30, 0xc0, 0x10, 0x10, 0x20, 0x40, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x0f, 0x0c, 0x14, 0x17, 0x34, 0x55, 0x15,
++ 0x15, 0x15, 0x15, 0x14, 0x17, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xe8, 0x28,
++ 0x28, 0xe8, 0x28, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x1f,
++ 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x4a, 0x49, 0x49, 0x48, 0x4f,
++ 0x48, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x18, 0xe0, 0x48, 0x48, 0x50, 0x60, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x3f, 0x21, 0x27, 0x24,
++ 0x24, 0x27, 0x24, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xc8, 0x48,
++ 0x48, 0xc8, 0x48, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x09, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3e, 0x03, 0x05, 0x05, 0x09, 0x0d, 0x19,
++ 0x69, 0x09, 0x0a, 0x0a, 0x0f, 0x18, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0x50, 0x68, 0x58, 0x78, 0x94, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x1f, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00,
++ 0x00, 0x00, 0x08, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x17, 0x14, 0x17,
++ 0x14, 0x17, 0x20, 0x3f, 0x40, 0x00, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0xf8, 0x80, 0xf0, 0x90, 0xf0,
++ 0x90, 0xf0, 0x80, 0xfc, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x7c, 0x05, 0x05, 0x3d, 0x25, 0x21, 0x3d,
++ 0x25, 0x25, 0x05, 0x06, 0x0b, 0x34, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0x50, 0x68, 0x58, 0x7c, 0x94, 0x14, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x1f,
++ 0x10, 0x10, 0x10, 0x20, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x3e,
++ 0x22, 0x22, 0x22, 0x3e, 0x23, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x90, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1b,
++ 0x29, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x20, 0x12, 0x12, 0x42, 0x2f, 0x22, 0x02, 0x0f,
++ 0x19, 0x19, 0x2f, 0x29, 0x40, 0x41, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0xc8, 0x78, 0x48, 0x48,
++ 0x48, 0x78, 0x48, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x04, 0x44, 0x29, 0x11, 0x31, 0x49, 0x09, 0x19,
++ 0x29, 0x49, 0x09, 0x0a, 0x33, 0x14, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0x50, 0x68, 0x58, 0x78, 0x94, 0x04, 0x00, 0x00,
++ 0x10, 0x55, 0x35, 0x39, 0x17, 0x7d, 0x11, 0x1b,
++ 0x36, 0x36, 0x53, 0x12, 0x10, 0x11, 0x00, 0x00,
++ 0x00, 0x38, 0x28, 0x28, 0xe8, 0x38, 0x28, 0xa8,
++ 0xb8, 0xa8, 0xc8, 0x48, 0x88, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7c, 0x08, 0x0b, 0x12, 0x3d,
++ 0x54, 0x12, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0x88, 0xfc, 0x00, 0xfc,
++ 0x40, 0x78, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x25, 0x26, 0x3d,
++ 0x24, 0x24, 0x24, 0x24, 0x25, 0x4e, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x94, 0x14, 0x0c, 0xf8,
++ 0x88, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x3e,
++ 0x22, 0x22, 0x22, 0x3f, 0x23, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x88, 0xf8,
++ 0x88, 0x88, 0x88, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x3f, 0x05, 0x09,
++ 0x0d, 0x19, 0x69, 0x0a, 0x0b, 0x1c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x18, 0xf0, 0x50, 0x50,
++ 0x50, 0x50, 0x68, 0x58, 0xf4, 0x14, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x11, 0x11, 0x1f, 0x10,
++ 0x12, 0x12, 0x22, 0x24, 0x48, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0xf0, 0x08, 0xf8,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7c, 0x01, 0x3e, 0x00, 0x3d,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0xf8, 0x04, 0xf8,
++ 0x40, 0x78, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3e, 0x23, 0x22, 0x3e, 0x09, 0x28, 0x2f,
++ 0x28, 0x28, 0x28, 0x2e, 0x38, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0x88, 0x74, 0x00, 0xfc,
++ 0x40, 0x78, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1f, 0x10, 0x1f, 0x12, 0x17,
++ 0x1c, 0x17, 0x27, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x20, 0xfc,
++ 0x40, 0xf0, 0xf0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x3f, 0x21, 0x3f, 0x2a, 0x2f,
++ 0x3a, 0x2f, 0x2f, 0x4a, 0x4f, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x20, 0x78, 0x48, 0x78, 0xc8,
++ 0x78, 0x48, 0x78, 0x30, 0xc8, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x01, 0x3e, 0x22,
++ 0x3e, 0x22, 0x14, 0x16, 0x18, 0x63, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x88, 0x88,
++ 0x50, 0x70, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x02, 0x02, 0x02, 0x3f, 0x04,
++ 0x04, 0x04, 0x08, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x02, 0x07, 0x04, 0x04, 0x04,
++ 0x0f, 0x08, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xe0, 0x20, 0x20, 0x20,
++ 0xe0, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x10, 0x10, 0x30, 0x57, 0x11,
++ 0x11, 0x11, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x80, 0x80, 0x80, 0x80, 0xf0, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x11, 0x11, 0x21, 0x01, 0x7f,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x12, 0x12, 0x13, 0x10, 0x1f, 0x10,
++ 0x00, 0x7f, 0x00, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x00, 0xf0, 0x10,
++ 0x10, 0xfc, 0x00, 0x60, 0x10, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x02, 0x1f, 0x04, 0x04, 0x7f,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xe0, 0x20, 0x20, 0xfc,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x25,
++ 0x79, 0x48, 0x0f, 0x14, 0x21, 0x46, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x48, 0x78, 0x48, 0x00,
++ 0xf0, 0x10, 0xfc, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x23, 0x48, 0x08, 0x10, 0x17, 0x30,
++ 0x51, 0x17, 0x10, 0x10, 0x11, 0x1e, 0x00, 0x00,
++ 0x40, 0x50, 0x90, 0xa0, 0x50, 0x88, 0xf4, 0x84,
++ 0xf8, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x12, 0x12, 0x23, 0x4d, 0x09, 0x17, 0x11, 0x35,
++ 0x55, 0x15, 0x15, 0x15, 0x1e, 0x10, 0x00, 0x00,
++ 0x00, 0x38, 0xe8, 0x28, 0x28, 0xe8, 0x28, 0x28,
++ 0xe8, 0x28, 0x78, 0xa0, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x18, 0x35, 0x34, 0x30, 0x57,
++ 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf0, 0x90, 0x90, 0xfc,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7e, 0x09, 0x1c, 0x1a, 0x1b,
++ 0x28, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf0, 0x90, 0x90, 0xfc,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x12, 0x7f, 0x12, 0x1a, 0x37, 0x37,
++ 0x30, 0x57, 0x55, 0x17, 0x14, 0x14, 0x00, 0x00,
++ 0x80, 0x40, 0xb0, 0xfc, 0xb0, 0x50, 0xb0, 0xf0,
++ 0x80, 0xf8, 0x28, 0xd8, 0x08, 0x18, 0x00, 0x00,
++ 0x02, 0x02, 0x7a, 0x17, 0x12, 0x12, 0x7f, 0x15,
++ 0x15, 0x15, 0x1f, 0x64, 0x01, 0x02, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0xc8, 0x48, 0x78, 0x48, 0x48,
++ 0x78, 0x48, 0x88, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x07, 0x07, 0x04, 0x7f, 0x08,
++ 0x1f, 0x62, 0x0f, 0x34, 0x07, 0x04, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xc0, 0xc0, 0x40, 0xfc, 0x20,
++ 0xf0, 0x0c, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x01, 0x3c, 0x00, 0x3f,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0xf0, 0x90, 0x90, 0xfc,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7f, 0x01, 0x3d, 0x01, 0x3d,
++ 0x00, 0x3f, 0x24, 0x24, 0x3c, 0x25, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x78, 0x00, 0xf8, 0x08,
++ 0x08, 0xfc, 0x50, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x3b, 0x00, 0x7d, 0x03, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3f, 0x24, 0x24, 0x3c, 0x27, 0x00, 0x00,
++ 0x90, 0xfc, 0xb0, 0xfc, 0x20, 0xf8, 0xf8, 0x20,
++ 0xfc, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2e, 0x2e, 0x3f,
++ 0x37, 0x27, 0x3f, 0x23, 0x3e, 0x22, 0x00, 0x00,
++ 0x80, 0xb8, 0xa8, 0xa8, 0xe8, 0xb8, 0xa8, 0xe8,
++ 0x78, 0x68, 0xe8, 0x48, 0x48, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x1f, 0x10, 0x20, 0x4f, 0x01,
++ 0x02, 0x04, 0x08, 0x10, 0x10, 0x0f, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xc0, 0x00,
++ 0x00, 0x00, 0x00, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x04, 0x04, 0x08, 0x14, 0x22,
++ 0x02, 0x01, 0x01, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x20, 0x50, 0x48, 0x48,
++ 0x80, 0x80, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x11, 0x11, 0x32, 0x55, 0x11,
++ 0x10, 0x10, 0x10, 0x11, 0x16, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x20, 0x10, 0x28, 0x28, 0x20,
++ 0xc0, 0xc0, 0xc0, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x09, 0x08, 0x08, 0x17, 0x11, 0x31, 0x51, 0x12,
++ 0x14, 0x17, 0x10, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0xf0, 0x10, 0x10, 0xfc, 0x00, 0x00, 0xf8, 0x40,
++ 0x40, 0xfc, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x09, 0x08, 0x0c, 0x17, 0x34, 0x54, 0x15, 0x16,
++ 0x17, 0x14, 0x14, 0x14, 0x11, 0x16, 0x00, 0x00,
++ 0xf0, 0x10, 0x10, 0xfc, 0x80, 0xf8, 0x20, 0x20,
++ 0xfc, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x10, 0x10, 0x37, 0x51, 0x11,
++ 0x17, 0x10, 0x10, 0x13, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x20,
++ 0xfc, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x11, 0x09, 0x09, 0x01, 0x7f, 0x04,
++ 0x04, 0x04, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x10, 0x20, 0x00, 0xfc, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x04, 0x04, 0x08, 0x08, 0x11, 0x21, 0x41,
++ 0x02, 0x02, 0x02, 0x04, 0x3f, 0x00, 0x00, 0x00,
++ 0xc0, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x00,
++ 0x40, 0x20, 0x10, 0x70, 0x88, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7c, 0x13, 0x10, 0x10, 0x10,
++ 0x10, 0x15, 0x19, 0x61, 0x02, 0x04, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0xf8, 0x88, 0x88, 0x88,
++ 0x88, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x14, 0x12, 0x23, 0x52,
++ 0x0c, 0x04, 0x0a, 0x12, 0x21, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x1f, 0x12, 0x22, 0x42, 0x03,
++ 0x04, 0x05, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08,
++ 0x88, 0xc8, 0x48, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x13, 0x12, 0x13, 0x12, 0x13, 0x10,
++ 0x13, 0x10, 0x2f, 0x20, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf0, 0x20, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x1f, 0x10, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0xf0, 0x10, 0x10, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x04, 0x3f, 0x20, 0x20, 0x27, 0x24,
++ 0x24, 0x24, 0x27, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0xc8, 0x48,
++ 0x48, 0x48, 0xc8, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x10, 0x13,
++ 0x12, 0x12, 0x22, 0x22, 0x43, 0x02, 0x00, 0x00,
++ 0x38, 0xc0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x4b, 0x4a, 0x4e, 0x4a, 0x4a,
++ 0x4b, 0x7b, 0x4a, 0x42, 0x02, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xfc, 0x40, 0x40, 0xfc, 0xa0,
++ 0x20, 0xfc, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x10, 0x17, 0x10, 0x7c, 0x11, 0x11, 0x11,
++ 0x11, 0x1d, 0x62, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0x00, 0xe0, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x12,
++ 0x12, 0x1e, 0x64, 0x04, 0x08, 0x00, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x13,
++ 0x3c, 0x24, 0x06, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x10, 0x10, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x3e, 0x02, 0x04, 0x04, 0x08, 0x08, 0x0e,
++ 0x78, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x01, 0x07,
++ 0x18, 0x60, 0x1f, 0x00, 0x00, 0x01, 0x00, 0x00,
++ 0x00, 0x10, 0xf0, 0x20, 0x40, 0xfc, 0x00, 0xe0,
++ 0x40, 0x80, 0xf8, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x42, 0x7f, 0x02, 0x04,
++ 0x04, 0x08, 0x11, 0x21, 0x4f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xfc, 0x00, 0x80,
++ 0x80, 0x80, 0x20, 0x30, 0xc8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x00, 0x7c, 0x10, 0x10, 0x11, 0x11,
++ 0x10, 0x1c, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0x80, 0xf8, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x04, 0x7f, 0x04, 0x0f,
++ 0x10, 0x6f, 0x08, 0x08, 0x08, 0x07, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0xe0,
++ 0x50, 0xcc, 0x40, 0x10, 0x10, 0xf0, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x08, 0x04, 0x7f,
++ 0x01, 0x01, 0x3f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x20, 0x40, 0xfc,
++ 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x11, 0x11, 0x22, 0x2f, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x80, 0x80, 0x80, 0x80,
++ 0x80, 0x20, 0x10, 0x38, 0xc4, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x17, 0x10, 0x1f, 0x10,
++ 0x17, 0x10, 0x11, 0x21, 0x22, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0xf0, 0x90, 0xfc, 0x90,
++ 0xf0, 0x90, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x17, 0x10, 0x1f, 0x10,
++ 0x17, 0x1c, 0x23, 0x26, 0x58, 0x01, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0xf0, 0x90, 0xfc, 0x90,
++ 0xf0, 0xc8, 0xb0, 0x90, 0x8c, 0x80, 0x00, 0x00,
++ 0x00, 0x7e, 0x02, 0x02, 0x3e, 0x22, 0x20, 0x3e,
++ 0x22, 0x02, 0x02, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40,
++ 0x40, 0x50, 0x88, 0x98, 0xe4, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x11, 0x39, 0x35, 0x35, 0x51,
++ 0x11, 0x11, 0x11, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x18, 0x37, 0x35, 0x31, 0x50,
++ 0x11, 0x11, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x90, 0xfc, 0x90, 0x40, 0xfc, 0x00, 0x00, 0xf8,
++ 0x50, 0x50, 0x50, 0x54, 0x54, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x11, 0x11, 0x15,
++ 0x19, 0x71, 0x11, 0x12, 0x12, 0x34, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0x00, 0xe0, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7f, 0x12, 0x14, 0x13, 0x12,
++ 0x1a, 0x73, 0x12, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0xc8, 0x48,
++ 0x48, 0xc8, 0x48, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x14, 0x10, 0x11, 0x16,
++ 0x1b, 0x70, 0x10, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0xa0, 0xa4, 0x1c, 0x00,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7e, 0x11, 0x11, 0x12, 0x10,
++ 0x14, 0x18, 0x60, 0x00, 0x03, 0x0c, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x06, 0x38,
++ 0x20, 0x20, 0x26, 0x38, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x11, 0x09,
++ 0x09, 0x7f, 0x02, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x10, 0x10,
++ 0x20, 0xfc, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x1f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x19, 0x05, 0x03, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x10, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x48, 0x09, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x00, 0xf0, 0x90, 0x90,
++ 0x90, 0x90, 0x90, 0x14, 0x14, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x18, 0x1d, 0x1a,
++ 0x2a, 0x28, 0x48, 0x08, 0x09, 0x0e, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x90, 0x88, 0x94, 0x94,
++ 0x50, 0x60, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x12, 0x13, 0x3a, 0x37,
++ 0x36, 0x51, 0x50, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x40, 0x80, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7f, 0x08, 0x1b, 0x1c, 0x1b,
++ 0x2b, 0x29, 0x49, 0x0b, 0x09, 0x09, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa0, 0xfc, 0x40, 0xf8,
++ 0x48, 0xf8, 0x48, 0xfc, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x40, 0x20, 0x20, 0x00, 0x08,
++ 0x08, 0x08, 0x10, 0x10, 0x27, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x41, 0x27, 0x21, 0x01, 0x01,
++ 0x1f, 0x11, 0x21, 0x22, 0x44, 0x48, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0x20,
++ 0xfc, 0x00, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x43, 0x22, 0x24, 0x0f, 0x00,
++ 0x13, 0x12, 0x22, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x09, 0x0f, 0x41, 0x2f, 0x21, 0x02, 0x17,
++ 0x18, 0x13, 0x22, 0x22, 0x42, 0x41, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0xfc, 0x20, 0x10, 0xec,
++ 0x20, 0xe0, 0x20, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x11, 0x0f, 0x09, 0x47, 0x21, 0x2f, 0x00, 0x13,
++ 0x12, 0x13, 0x22, 0x2f, 0x42, 0x42, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x80, 0xf0,
++ 0x90, 0xf0, 0x90, 0xfc, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x3f, 0x21, 0x21, 0x3f,
++ 0x21, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x08, 0xf8,
++ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x00,
++ 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x13, 0x12, 0x23, 0x3e, 0x67,
++ 0x26, 0x25, 0x3c, 0x20, 0x23, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x40, 0x80, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x1b, 0x70, 0x11, 0x11, 0x7d, 0x10, 0x1b,
++ 0x36, 0x36, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x08, 0xe8, 0xa8, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x57, 0x36, 0x3a, 0x12, 0x7f, 0x12, 0x1a,
++ 0x37, 0x36, 0x52, 0x14, 0x17, 0x18, 0x00, 0x00,
++ 0x40, 0xfc, 0x20, 0xf8, 0x28, 0xfc, 0x28, 0xf8,
++ 0x24, 0xa8, 0x70, 0xa8, 0x24, 0x60, 0x00, 0x00,
++ 0x08, 0x09, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7d,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x4b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7e,
++ 0x0c, 0x2a, 0x2b, 0x29, 0x4b, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x50, 0x90,
++ 0x90, 0xa0, 0x30, 0x48, 0xf4, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x72, 0x14, 0x0d, 0x12, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x90, 0x88, 0x94, 0x94, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x17, 0x66, 0x1a, 0x1b, 0x26, 0x7f,
++ 0x13, 0x3b, 0x37, 0x37, 0x52, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xa8, 0xc8, 0xf8, 0x48, 0x58,
++ 0x58, 0x58, 0xf8, 0x18, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x08, 0x7f, 0x08,
++ 0x1d, 0x1a, 0x2a, 0x48, 0x09, 0x0a, 0x00, 0x00,
++ 0x48, 0x48, 0x48, 0xfc, 0x48, 0x48, 0x48, 0x48,
++ 0xfc, 0x48, 0x88, 0x88, 0x08, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x03, 0x0f,
++ 0x72, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0xf0, 0x20, 0xfc, 0x80, 0x00, 0xf8,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xe0, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x09, 0x7f, 0x00, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x24, 0x3c, 0x24, 0x24,
++ 0x3c, 0x25, 0x25, 0x26, 0x25, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xa0, 0xa0,
++ 0xa0, 0x30, 0x48, 0x58, 0xe4, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x26, 0x24, 0x3c, 0x25, 0x26,
++ 0x3f, 0x24, 0x24, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0xa0, 0xa8, 0x18, 0x00,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x07, 0x04, 0x07, 0x3f, 0x27, 0x47,
++ 0x0f, 0x08, 0x0f, 0x0f, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0xc0, 0x40, 0xc0, 0xfc, 0xc8, 0xc0,
++ 0xe0, 0x20, 0xe0, 0xe0, 0x20, 0x60, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x13, 0x1a, 0x16, 0x16, 0x7f,
++ 0x12, 0x1a, 0x1a, 0x2a, 0x23, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x00, 0x70, 0x50, 0x50,
++ 0x50, 0x50, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x7f, 0x08, 0x08,
++ 0x07, 0x09, 0x09, 0x09, 0x11, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x00, 0x00,
++ 0xf0, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x09, 0x10, 0x24, 0x04, 0x0b, 0x08, 0x18,
++ 0x28, 0x48, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x12, 0x13, 0x24, 0x49, 0x0f, 0x15, 0x37, 0x55,
++ 0x17, 0x11, 0x1f, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xbc, 0x80, 0x00, 0xfc, 0x48, 0xc8, 0x48,
++ 0xc8, 0x08, 0xe8, 0x88, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x7f, 0x00, 0x3f, 0x00, 0x3d,
++ 0x01, 0x3d, 0x25, 0x27, 0x3d, 0x25, 0x00, 0x00,
++ 0xa0, 0xf8, 0xa0, 0xf8, 0xa0, 0xfc, 0x40, 0xf8,
++ 0x48, 0xf8, 0x48, 0xfc, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x27, 0x3c, 0x27, 0x3c, 0x25,
++ 0x25, 0x3d, 0x19, 0x17, 0x25, 0x41, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa0, 0xfc, 0x40, 0xf8,
++ 0x48, 0xf8, 0x48, 0xfc, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x7f, 0x12, 0x11, 0x22, 0x52,
++ 0x0c, 0x04, 0x0a, 0x12, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0xd0, 0x50, 0x60, 0xd0, 0xc8,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0x24, 0xfc, 0x28, 0x28, 0xfc, 0x20, 0xf8,
++ 0x88, 0x10, 0xfc, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1d, 0x19, 0x0f, 0x72, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x80, 0xa0, 0xa0, 0xa0,
++ 0xa0, 0xb0, 0x48, 0x58, 0xe4, 0x04, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x11, 0x11, 0x3d, 0x25, 0x65,
++ 0x25, 0x25, 0x3d, 0x26, 0x23, 0x04, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x00, 0x20, 0x20, 0x20,
++ 0x20, 0x30, 0x48, 0x48, 0xf4, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x1b, 0x26, 0x26, 0x7b, 0x12, 0x7f,
++ 0x13, 0x57, 0x3b, 0x33, 0x1e, 0x62, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xa8, 0xc8, 0xf8, 0x48, 0x58,
++ 0x58, 0x58, 0xf8, 0x18, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x22,
++ 0x2f, 0x30, 0x27, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x88,
++ 0xe8, 0x18, 0xc8, 0x48, 0xc8, 0x58, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x29, 0x32, 0x28, 0x27, 0x24,
++ 0x24, 0x24, 0x3b, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x78, 0x88, 0x50, 0x30, 0xdc, 0x10, 0xf8,
++ 0x90, 0x90, 0xfc, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x07, 0x00, 0x7c, 0x11, 0x11, 0x11, 0x11,
++ 0x15, 0x19, 0x61, 0x00, 0x03, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x6f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0x80, 0x40, 0x30, 0xec,
++ 0x20, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f, 0x00,
++ 0x3f, 0x20, 0x27, 0x24, 0x27, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0x00,
++ 0xf8, 0x08, 0xc8, 0x48, 0xc8, 0x18, 0x00, 0x00,
++ 0x20, 0x10, 0x11, 0x0f, 0x45, 0x25, 0x25, 0x05,
++ 0x15, 0x17, 0x39, 0x22, 0x42, 0x44, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xfc, 0x54, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x32, 0x2a, 0x2c, 0x3f, 0x24, 0x35,
++ 0x35, 0x35, 0x3f, 0x31, 0x20, 0x21, 0x00, 0x00,
++ 0x08, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x09, 0x08, 0x7f, 0x08,
++ 0x0c, 0x12, 0x16, 0x79, 0x01, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x00, 0x7f, 0x04,
++ 0x07, 0x08, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x00, 0xfc, 0x00,
++ 0xe0, 0x20, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x18, 0x6f, 0x00, 0x00,
++ 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0xec, 0x00, 0x00,
++ 0xe0, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x17, 0x11, 0x11, 0x7d, 0x17, 0x14, 0x17,
++ 0x14, 0x1f, 0x63, 0x00, 0x07, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0xf0, 0x10, 0xf0, 0xfc, 0x08, 0xf8,
++ 0xc8, 0x70, 0xb0, 0xe8, 0x24, 0xc0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x17, 0x10, 0x1c,
++ 0x71, 0x12, 0x14, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x50, 0xfc, 0x40, 0xf8,
++ 0x80, 0xf8, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x0f, 0x09, 0x41, 0x21, 0x27, 0x04, 0x0f,
++ 0x10, 0x17, 0x23, 0x21, 0x46, 0x40, 0x00, 0x00,
++ 0x40, 0xfc, 0xf0, 0x10, 0xf0, 0xfc, 0x08, 0xf8,
++ 0xc8, 0x70, 0xf0, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x01, 0x7f, 0x0f, 0x08, 0x0f, 0x3f, 0x20, 0x7f,
++ 0x07, 0x3a, 0x1d, 0x06, 0x38, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0xe0, 0x20, 0xe0, 0xfc, 0x08, 0xf8,
++ 0x88, 0xd0, 0xe0, 0xb0, 0x8c, 0x00, 0x00, 0x00,
++ 0x01, 0x1f, 0x07, 0x07, 0x07, 0x3f, 0x09, 0x7f,
++ 0x3e, 0x3e, 0x2a, 0x3e, 0x7f, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0xc0, 0xc0, 0xc0, 0xf8, 0x20, 0xfc,
++ 0xf8, 0xf8, 0xa8, 0xf8, 0xfc, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x08, 0x7f, 0x08,
++ 0x1e, 0x12, 0x2d, 0x44, 0x1b, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa4, 0x2c, 0xb4, 0x64, 0xfc,
++ 0x74, 0xac, 0x2c, 0x38, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x10, 0x10, 0x1f,
++ 0x12, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0x10, 0xf0,
++ 0x90, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x08, 0x0a, 0x32, 0x0c, 0x05,
++ 0x09, 0x12, 0x26, 0x09, 0x11, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0xc8, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x1f, 0x11, 0x21, 0x7f, 0x00,
++ 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00,
++ 0xe0, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x2f, 0x21, 0x21, 0x2f, 0x21,
++ 0x21, 0x21, 0x2f, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xe8, 0x08, 0x08, 0xe8, 0x08,
++ 0x48, 0x28, 0xe8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x00, 0x3f, 0x26, 0x79,
++ 0x08, 0x7f, 0x1c, 0x2a, 0x48, 0x0b, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x94, 0x94, 0x0c, 0x00, 0xf8,
++ 0x88, 0x50, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x10, 0xd0, 0x50, 0x7c, 0x90, 0x10, 0xfc, 0x00,
++ 0x78, 0x48, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x08, 0x28, 0x28, 0x3e, 0x28, 0x48, 0x7f, 0x00,
++ 0x3e, 0x22, 0x22, 0x3f, 0x21, 0x02, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x01, 0x3f,
++ 0x01, 0x7f, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x00, 0xfc, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x08, 0x4b, 0x30, 0x1f, 0x30, 0x4b, 0x08, 0x1b,
++ 0x28, 0x4b, 0x0a, 0x0b, 0x32, 0x10, 0x00, 0x00,
++ 0x10, 0x98, 0x14, 0xd4, 0x10, 0xfc, 0x10, 0x90,
++ 0x10, 0xa8, 0xa8, 0xa8, 0x44, 0x84, 0x00, 0x00,
++ 0x20, 0x10, 0x17, 0x44, 0x27, 0x24, 0x04, 0x17,
++ 0x15, 0x15, 0x25, 0x29, 0x49, 0x56, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0x20, 0xe8, 0x30, 0x64, 0xa4, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x2b, 0x2a, 0x3a, 0x2b, 0x28,
++ 0x3f, 0x28, 0x29, 0x28, 0x28, 0x5b, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0x40,
++ 0xfc, 0x90, 0xd0, 0x20, 0xd0, 0x08, 0x00, 0x00,
++ 0x22, 0x14, 0x7f, 0x49, 0x7f, 0x49, 0x7f, 0x00,
++ 0x3e, 0x22, 0x3e, 0x22, 0x3f, 0x22, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x78, 0x48, 0x68, 0x58,
++ 0x58, 0x88, 0x88, 0xec, 0x8c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x12, 0x22, 0x44, 0x08, 0x01,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x48, 0x48, 0x88, 0x88, 0x30,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x1a, 0x34, 0x35, 0x32, 0x50,
++ 0x10, 0x11, 0x15, 0x15, 0x19, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0xa8, 0xa8, 0x28, 0x48, 0xb0,
++ 0x80, 0x50, 0x48, 0x14, 0x14, 0xf0, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x09, 0x09, 0x3f, 0x20, 0x4f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xfc, 0x08, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x60, 0x00, 0x00,
++ 0x04, 0x44, 0x28, 0x11, 0x31, 0x49, 0x09, 0x19,
++ 0x29, 0x49, 0x09, 0x09, 0x31, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf8, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x21, 0x10, 0x10, 0x00, 0x00, 0x70, 0x11,
++ 0x11, 0x12, 0x14, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x40, 0x40, 0xc0, 0xa0, 0x20,
++ 0x10, 0x10, 0x08, 0x04, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x24, 0x27, 0x24, 0x24,
++ 0x24, 0x24, 0x25, 0x26, 0x38, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x48, 0x48, 0xd0, 0x60, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x27, 0x20, 0x20, 0x27, 0x39, 0x21, 0x21,
++ 0x25, 0x25, 0x1d, 0x00, 0x03, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x18, 0x67, 0x00, 0x00,
++ 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0xcc, 0x00, 0x00,
++ 0xe0, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x3f, 0x23, 0x23, 0x25,
++ 0x25, 0x29, 0x31, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x88, 0x88, 0x48,
++ 0x48, 0x28, 0x18, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x13, 0x7e, 0x12, 0x13, 0x12,
++ 0x16, 0x1b, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0xf8, 0x48,
++ 0x48, 0xf8, 0x48, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x0c, 0x79, 0x26, 0x18, 0x6c, 0x36, 0x1a, 0x62,
++ 0x0d, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0xc8, 0xb0, 0xd8,
++ 0x84, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x27,
++ 0x79, 0x49, 0x0d, 0x15, 0x21, 0x41, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0xfc, 0x20, 0x10, 0xd4, 0x0c,
++ 0xfc, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x35, 0x35, 0x31, 0x51,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf4,
++ 0x44, 0x28, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x0c, 0x78, 0x26, 0x18, 0x78, 0x1c, 0x6c, 0x14,
++ 0x65, 0x19, 0x04, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xa4, 0xb8,
++ 0xc8, 0x04, 0x90, 0x88, 0x24, 0xe4, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x70, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x70, 0x80, 0x80, 0xfc, 0x40, 0x24, 0x1c, 0xf4,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x1f, 0x10,
++ 0x10, 0x1f, 0x10, 0x10, 0x1e, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x80,
++ 0x98, 0xe0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x09, 0x7f, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x0e, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf4,
++ 0x44, 0x28, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x13, 0x3a, 0x36,
++ 0x36, 0x53, 0x52, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x48, 0xe8,
++ 0xd8, 0x58, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x23, 0x22, 0x03, 0x12,
++ 0x12, 0x13, 0x22, 0x22, 0x43, 0x4c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x40,
++ 0x48, 0xf0, 0x40, 0x44, 0xc4, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2b, 0x2a, 0x0b, 0x1a,
++ 0x2b, 0x4a, 0x12, 0x12, 0x23, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf8, 0x48, 0x50, 0x20, 0x90, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x17, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x88, 0x88, 0x88, 0x88, 0xfc, 0x88, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x10, 0x1f,
++ 0x11, 0x11, 0x10, 0x13, 0x1c, 0x70, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x20, 0xe8,
++ 0x08, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x02, 0x03, 0x7e, 0x13, 0x1a,
++ 0x14, 0x27, 0x7b, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xc8,
++ 0xd0, 0x50, 0x68, 0x7c, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x28, 0x2f, 0x28, 0x28, 0x2e, 0x70,
++ 0x00, 0x1f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0x98, 0xe0, 0x80, 0x84, 0x84, 0x7c,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x10, 0x30, 0x50, 0x11,
++ 0x11, 0x12, 0x14, 0x18, 0x13, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x80, 0x80, 0x80, 0xf8,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x09, 0x09, 0x04, 0x04, 0x02,
++ 0x01, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x79, 0x4f, 0x49, 0x49, 0x4a, 0x4c,
++ 0x49, 0x7b, 0x4c, 0x40, 0x01, 0x0e, 0x00, 0x00,
++ 0x80, 0x90, 0x18, 0xe4, 0x20, 0x24, 0x9c, 0xf0,
++ 0x10, 0x20, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x01, 0x10, 0x13, 0x10, 0x55, 0x54, 0x57, 0x54,
++ 0x55, 0x7d, 0x46, 0x44, 0x0b, 0x00, 0x00, 0x00,
++ 0x08, 0x90, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x80,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x7f, 0x02, 0x02, 0x04, 0x07,
++ 0x08, 0x08, 0x10, 0x20, 0x5f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xf0,
++ 0x80, 0x80, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f,
++ 0x08, 0x0f, 0x10, 0x20, 0x5f, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x6f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30, 0xec, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x42, 0x22, 0x22, 0x04, 0x14,
++ 0x18, 0x10, 0x20, 0x20, 0x41, 0x4e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x50, 0x48, 0x48, 0x4c, 0x54,
++ 0xd0, 0x60, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x01, 0x00, 0x7c, 0x13, 0x10, 0x11, 0x7c, 0x17,
++ 0x11, 0x13, 0x1a, 0x64, 0x0b, 0x00, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xf8, 0x40, 0xf0, 0x40, 0xfc,
++ 0x00, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x08, 0x08, 0x08, 0x10, 0x1f, 0x33,
++ 0x52, 0x12, 0x12, 0x1e, 0x10, 0x03, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xb0, 0xa8, 0xa8, 0x24, 0x2c,
++ 0x68, 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3d, 0x02, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x40, 0x40, 0x7c, 0x40,
++ 0x40, 0x7c, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x73, 0x00, 0x00,
++ 0x20, 0x24, 0xa4, 0xa8, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x09, 0x49, 0x22, 0x2c, 0x08, 0x17, 0x21,
++ 0x7f, 0x02, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x4c, 0xd4, 0x60, 0x80, 0x00,
++ 0xfc, 0x90, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x09, 0x19, 0x15, 0x23, 0x41,
++ 0x3f, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x20, 0x20, 0x60, 0x50, 0x88, 0x04,
++ 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x14, 0x14, 0x16, 0x19,
++ 0x10, 0x17, 0x20, 0x20, 0x5f, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x90, 0x90, 0x98, 0xa4,
++ 0xc4, 0xf0, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x11, 0x12, 0x1c,
++ 0x70, 0x13, 0x10, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0x50, 0x50, 0x50, 0x58, 0xe4, 0x44,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x13, 0x10, 0x3f, 0x53, 0x12,
++ 0x13, 0x13, 0x12, 0x13, 0x13, 0x1c, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x10, 0x08, 0x00, 0x00,
++ 0x08, 0x0a, 0x0a, 0x13, 0x12, 0x31, 0x53, 0x16,
++ 0x1b, 0x12, 0x13, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x98, 0x20, 0xfc, 0x20,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x1f, 0x11, 0x11, 0x1f, 0x11,
++ 0x11, 0x7f, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10,
++ 0x10, 0xfc, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x7f, 0x12,
++ 0x1e, 0x1e, 0x12, 0x1e, 0x73, 0x02, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xfc, 0x00,
++ 0xf8, 0x48, 0x30, 0x70, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x08, 0x08, 0x7f, 0x00, 0x3e,
++ 0x22, 0x22, 0x22, 0x3e, 0x22, 0x20, 0x00, 0x00,
++ 0x80, 0x90, 0x88, 0x88, 0x80, 0xfc, 0x48, 0x48,
++ 0x50, 0x30, 0x20, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x7f, 0x04, 0x1f, 0x04, 0x7f,
++ 0x05, 0x19, 0x6f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0x40, 0xf0, 0x40, 0xfc,
++ 0x40, 0x30, 0xec, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x01, 0x7f, 0x01, 0x1f,
++ 0x02, 0x7f, 0x04, 0x0f, 0x01, 0x3e, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xfc, 0x10, 0xf0,
++ 0x00, 0xfc, 0x20, 0x40, 0xe0, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x21, 0x7f, 0x08, 0x04, 0x7f,
++ 0x01, 0x01, 0x3f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xf8, 0x20, 0x40, 0xfc,
++ 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x06, 0x79, 0x49, 0x2a, 0x24, 0x08, 0x08, 0x7f,
++ 0x1c, 0x1a, 0x29, 0x48, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x28, 0x48, 0x90, 0x10, 0x24,
++ 0x44, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x01,
++ 0x02, 0x0c, 0x30, 0x00, 0x00, 0x01, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0xa0, 0xc0, 0x80, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7d, 0x11, 0x10, 0x10, 0x1f,
++ 0x70, 0x10, 0x11, 0x12, 0x14, 0x30, 0x00, 0x00,
++ 0x18, 0xe8, 0x48, 0x50, 0x20, 0x40, 0x40, 0xfc,
++ 0xe0, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x08, 0x08, 0x7f, 0x08, 0x7f,
++ 0x1c, 0x1a, 0x29, 0x48, 0x08, 0x09, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x48, 0x40, 0xfc, 0x48, 0x48,
++ 0x50, 0x30, 0x24, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x3f, 0x00, 0x1f, 0x10, 0x1f,
++ 0x12, 0x17, 0x16, 0x2a, 0x32, 0x46, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x50, 0xfc, 0x40, 0xc8,
++ 0x28, 0x30, 0x90, 0xb4, 0x4c, 0x84, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x41, 0x20, 0x20, 0x07, 0x09,
++ 0x09, 0x09, 0x11, 0x12, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0xe0, 0x1c, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x11, 0x22, 0x11, 0x08, 0x01, 0x01,
++ 0x11, 0x12, 0x22, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x88, 0x88, 0x10, 0x20, 0x10, 0x88, 0x00, 0x08,
++ 0x08, 0x90, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x11, 0x08, 0x08, 0x01, 0x7f,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x18, 0xe8, 0x08, 0x10, 0xa0, 0x40, 0x00, 0xfc,
++ 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x16, 0x10, 0x16,
++ 0x12, 0x17, 0x28, 0x2f, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x88, 0xb0, 0x80, 0xb0,
++ 0x80, 0xf0, 0x80, 0xf8, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x3f, 0x09, 0x08, 0x08, 0x10, 0x1f, 0x32,
++ 0x52, 0x13, 0x12, 0x1e, 0x10, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0x94, 0x94, 0x0c, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x2f, 0x28, 0x28, 0x2e, 0x70, 0x3f,
++ 0x02, 0x07, 0x1c, 0x64, 0x07, 0x04, 0x00, 0x00,
++ 0x80, 0x88, 0x90, 0xe4, 0x84, 0x7c, 0x00, 0xf8,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x0f, 0x11, 0x2a, 0x64, 0x18, 0x1f, 0x60,
++ 0x1f, 0x09, 0x09, 0x11, 0x21, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x20, 0x10, 0xec, 0x00,
++ 0xf8, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x04, 0x03, 0x06, 0x78, 0x17,
++ 0x10, 0x1f, 0x15, 0x15, 0x29, 0x43, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x80, 0xc0, 0x3c, 0xd0,
++ 0x10, 0xf0, 0x90, 0x50, 0x50, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0xf8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x12, 0x09, 0x08, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x70, 0x90, 0x10, 0x20, 0x40, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x08, 0x7f, 0x08, 0x7f, 0x08,
++ 0x19, 0x36, 0x52, 0x15, 0x19, 0x60, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x48, 0xfc, 0x40, 0x48, 0x48,
++ 0x50, 0x30, 0x24, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x04, 0x1f, 0x04, 0x7f, 0x04, 0x7f, 0x1f, 0x15,
++ 0x1f, 0x15, 0x1f, 0x7f, 0x04, 0x04, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0xfc, 0x40, 0xc8, 0x48, 0x48,
++ 0x50, 0x30, 0x24, 0xd4, 0x8c, 0x04, 0x00, 0x00,
++ 0x01, 0x3d, 0x25, 0x2a, 0x32, 0x2d, 0x25, 0x26,
++ 0x27, 0x24, 0x39, 0x21, 0x22, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xe8, 0xb0, 0x90, 0xf8, 0x04,
++ 0xf8, 0x40, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x11, 0x0e, 0x1b, 0x71, 0x1f,
++ 0x11, 0x1f, 0x11, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x08, 0x48, 0xc8, 0x48, 0x48, 0xc8, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x7f, 0x04, 0x0c, 0x08, 0x0b,
++ 0x18, 0x28, 0x48, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x49, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x10, 0x30, 0x30, 0x50,
++ 0x50, 0x90, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x3f, 0x02, 0x3e, 0x02,
++ 0x3e, 0x02, 0x1c, 0x64, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x40, 0x78, 0x40,
++ 0x78, 0x40, 0x7c, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3f, 0x22, 0x3e, 0x22,
++ 0x22, 0x3e, 0x15, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x30, 0x30, 0x50,
++ 0x50, 0x90, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x03, 0x21, 0x11, 0x11, 0x01, 0x0f, 0x10,
++ 0x10, 0x20, 0x20, 0x43, 0x4c, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0x10, 0x10, 0x10, 0xfc, 0x30,
++ 0x30, 0x50, 0x90, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x11,
++ 0x11, 0x1e, 0x62, 0x04, 0x0b, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x29, 0x29, 0x31, 0x29, 0x25,
++ 0x25, 0x25, 0x3a, 0x22, 0x25, 0x2e, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x13, 0x7e, 0x13, 0x12, 0x10,
++ 0x1d, 0x73, 0x0d, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x48, 0xa0,
++ 0x30, 0x28, 0x24, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7f, 0x10, 0x18, 0x35, 0x35,
++ 0x33, 0x55, 0x59, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0xd4, 0xd4, 0x7c, 0x54,
++ 0xd4, 0xfc, 0x54, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x02, 0x01, 0x1f, 0x01, 0x7f, 0x02, 0x07, 0x0c,
++ 0x17, 0x64, 0x07, 0x04, 0x04, 0x04, 0x00, 0x00,
++ 0x20, 0xc0, 0x60, 0x10, 0xfc, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x02, 0x01, 0x79, 0x4b, 0x48, 0x48, 0x48, 0x4f,
++ 0x48, 0x78, 0x48, 0x41, 0x06, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xf8, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x2a, 0x2a, 0x2a, 0x2b, 0x2a,
++ 0x2a, 0x2a, 0x3e, 0x22, 0x20, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x50, 0x88, 0xfc, 0x08,
++ 0xe8, 0xa8, 0xe8, 0xa8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x10, 0x7c, 0x13, 0x17, 0x10,
++ 0x17, 0x1a, 0x62, 0x03, 0x02, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x60, 0x90, 0x08, 0xfc, 0x08,
++ 0xc8, 0x48, 0x48, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x7c, 0x13, 0x10, 0x10, 0x3d, 0x27, 0x64,
++ 0x25, 0x25, 0x3d, 0x21, 0x21, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x60, 0x90, 0x10, 0xfc, 0x08,
++ 0xe8, 0x28, 0x28, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x23, 0x3e, 0x2f, 0x3e, 0x6f, 0x08,
++ 0x0f, 0x0f, 0x0f, 0x0f, 0x2a, 0x45, 0x00, 0x00,
++ 0x40, 0x78, 0x90, 0x70, 0xfc, 0x70, 0xe0, 0x20,
++ 0xe0, 0xe0, 0xfc, 0xf8, 0x88, 0x70, 0x00, 0x00,
++ 0x09, 0x09, 0x09, 0x13, 0x12, 0x34, 0x58, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x80, 0x80, 0xf8, 0x80,
++ 0x80, 0xf8, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x08, 0x49, 0x29, 0x2a, 0x08, 0x3e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x22, 0x22, 0x22, 0x26, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x4b, 0x4a, 0x4c, 0x48, 0x48,
++ 0x48, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x80, 0x80, 0xf8, 0x80,
++ 0x80, 0xf8, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x14, 0x11, 0x13, 0x19,
++ 0x72, 0x14, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0xa8, 0x18, 0x00, 0xfc,
++ 0x40, 0x78, 0x40, 0x78, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x49, 0x4a, 0x4a, 0x7c, 0x48,
++ 0x48, 0x48, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x40, 0x40, 0x7c, 0x40,
++ 0x40, 0x7c, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x22, 0x12, 0x14, 0x7f, 0x08, 0x2a, 0x2a, 0x2a,
++ 0x3e, 0x2a, 0x28, 0x08, 0x11, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x1a, 0x17, 0x36,
++ 0x32, 0x52, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0xfc, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x44, 0x0a, 0x12, 0x07,
++ 0x19, 0x61, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x88, 0x78, 0x00, 0xfc,
++ 0x00, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x7f, 0x01, 0x1f,
++ 0x11, 0x13, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0xfc, 0x00, 0xf0,
++ 0x10, 0xe0, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x3f, 0x22, 0x4c, 0x03,
++ 0x02, 0x7f, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x48, 0x80, 0x40,
++ 0x30, 0xc8, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x13, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x50, 0x50, 0x50, 0xfc, 0x50, 0x50, 0xfc, 0x00,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x0a, 0x09, 0x7f, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x28, 0x29, 0x49, 0x08, 0x08, 0x0b, 0x00, 0x00,
++ 0x88, 0x48, 0x48, 0x10, 0x60, 0x40, 0xfc, 0x90,
++ 0x90, 0xd0, 0x20, 0x30, 0xc8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x14, 0x23, 0x49, 0x09, 0x7f,
++ 0x09, 0x09, 0x09, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0xe0, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x00, 0x7f,
++ 0x04, 0x17, 0x14, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x48, 0x48, 0x50, 0x60, 0xc0,
++ 0x40, 0x44, 0x44, 0x3c, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x12, 0x12, 0x12, 0x12, 0x7f,
++ 0x12, 0x12, 0x12, 0x12, 0x12, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90, 0xfc,
++ 0x90, 0x90, 0x90, 0x90, 0x90, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x3f, 0x24, 0x24, 0x3f,
++ 0x35, 0x55, 0x55, 0x17, 0x14, 0x04, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x28, 0x4f, 0x19, 0x66, 0x14, 0x1f,
++ 0x60, 0x3f, 0x05, 0x19, 0x61, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf8, 0x90, 0x60, 0x30, 0xec,
++ 0x00, 0xf8, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x12, 0x7c, 0x12, 0x11, 0x10, 0x14,
++ 0x18, 0x71, 0x12, 0x10, 0x10, 0x33, 0x00, 0x00,
++ 0x24, 0x24, 0x48, 0x90, 0x48, 0xa4, 0x40, 0x78,
++ 0x88, 0x90, 0x50, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x1f, 0x1c,
++ 0x77, 0x17, 0x14, 0x17, 0x1c, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc, 0x80,
++ 0xf8, 0xc8, 0xa8, 0x90, 0xe8, 0x84, 0x00, 0x00,
++ 0x10, 0x13, 0x13, 0x7d, 0x13, 0x16, 0x11, 0x1b,
++ 0x74, 0x13, 0x11, 0x12, 0x14, 0x30, 0x00, 0x00,
++ 0x40, 0xfc, 0x08, 0xf8, 0x68, 0xf0, 0x90, 0xf8,
++ 0x04, 0xf8, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x18, 0x1c, 0x1a,
++ 0x29, 0x29, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x02, 0x02, 0x34, 0x0c, 0x1a, 0x69, 0x0a, 0x7f,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x0b, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x94, 0x94, 0x0c, 0x00, 0xf8,
++ 0x88, 0x50, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x24, 0x28, 0x31, 0x29,
++ 0x25, 0x25, 0x25, 0x3a, 0x25, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x60, 0xfc, 0x88, 0x50, 0xfc, 0x60,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7c, 0x14, 0x15, 0x23, 0x48, 0x08,
++ 0x7f, 0x1c, 0x1a, 0x29, 0x48, 0x08, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x02, 0x04, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x1d,
++ 0x01, 0x1d, 0x01, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x70,
++ 0x00, 0x70, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x1e, 0x24, 0x7e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x98, 0x00, 0x00,
++ 0x10, 0x17, 0x14, 0x7c, 0x14, 0x17, 0x12, 0x1a,
++ 0x73, 0x12, 0x14, 0x14, 0x18, 0x33, 0x00, 0x00,
++ 0x08, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x28, 0x28,
++ 0xa8, 0xa8, 0xa8, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7e, 0x2a, 0x3e, 0x2b,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x43, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x50, 0x48, 0x94, 0x54,
++ 0x50, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x12, 0x12, 0x12, 0x12,
++ 0x12, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x4b, 0x4a, 0x7a, 0x4a,
++ 0x4a, 0x4b, 0x7a, 0x4a, 0x43, 0x02, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xb8, 0x38, 0x18, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x05, 0x19, 0x69, 0x09, 0x15, 0x2b,
++ 0x09, 0x15, 0x23, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x30, 0x2c, 0x20, 0x50, 0xa8,
++ 0x20, 0x50, 0x88, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x04, 0x3f, 0x02, 0x7f, 0x04, 0x09,
++ 0x16, 0x61, 0x0e, 0x00, 0x01, 0x1e, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0x90, 0x00, 0xfc, 0xc0, 0x20,
++ 0x50, 0x8c, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3f, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x1b, 0x34, 0x37, 0x30, 0x51,
++ 0x16, 0x11, 0x10, 0x11, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0x60, 0x90, 0xe8, 0x40, 0xfc, 0xa0, 0x10,
++ 0x4c, 0xa0, 0x48, 0x90, 0x60, 0x80, 0x00, 0x00,
++ 0x12, 0x12, 0x17, 0x7a, 0x12, 0x1f, 0x10, 0x1f,
++ 0x74, 0x17, 0x14, 0x17, 0x14, 0x35, 0x00, 0x00,
++ 0xa0, 0xa0, 0xe0, 0xbc, 0xa8, 0xc8, 0x28, 0xa8,
++ 0xb0, 0x90, 0x90, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x14, 0x14, 0x3f, 0x14, 0x14, 0x7f, 0x01, 0x3e,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x27, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x88, 0x88, 0x48, 0x50,
++ 0x30, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x19, 0x1c, 0x1b,
++ 0x2a, 0x28, 0x48, 0x08, 0x08, 0x0b, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0xf8, 0x40, 0xfc,
++ 0x28, 0x28, 0x10, 0x34, 0xcc, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x17, 0x36, 0x3d, 0x51, 0x16,
++ 0x11, 0x17, 0x18, 0x29, 0x26, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xe8, 0x90, 0xa8, 0x44, 0x48,
++ 0x50, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x00, 0x03, 0x7e, 0x12, 0x12, 0x12, 0x7f, 0x12,
++ 0x12, 0x12, 0x1e, 0x62, 0x02, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0xfc, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x01, 0x3f, 0x04, 0x02, 0x1f, 0x12, 0x12, 0x17,
++ 0x18, 0x17, 0x20, 0x20, 0x5f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xfc, 0x80, 0x80, 0xf8,
++ 0x80, 0xf0, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x4f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x04, 0x7f, 0x04, 0x18, 0x00, 0x00,
++ 0x40, 0xfc, 0x90, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x4f, 0x08, 0x0f, 0x0f, 0x0f,
++ 0x7f, 0x16, 0x63, 0x3f, 0x0d, 0x31, 0x00, 0x00,
++ 0x40, 0xfc, 0x90, 0xe0, 0x20, 0xe0, 0xe0, 0xe0,
++ 0xfc, 0x90, 0x6c, 0xf0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x1f, 0x02, 0x05, 0x19, 0x6f,
++ 0x09, 0x09, 0x0f, 0x09, 0x01, 0x3e, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x80, 0x40, 0x30, 0xec,
++ 0x20, 0x20, 0xe0, 0x20, 0xf0, 0x08, 0x00, 0x00,
++ 0x01, 0x3b, 0x01, 0x7f, 0x02, 0x3f, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x26, 0x00, 0x00,
++ 0x10, 0xf8, 0x10, 0xfc, 0xa8, 0xf4, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x90, 0x0c, 0x00, 0x00,
++ 0x04, 0x3f, 0x04, 0x7f, 0x0a, 0x1f, 0x68, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x20, 0xf8, 0x20, 0xfc, 0x50, 0xe8, 0x24, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0xb0, 0x28, 0xfc, 0x50, 0x54, 0xac, 0x38,
++ 0x48, 0x50, 0xb0, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x0f, 0x1f, 0x72, 0x0d, 0x33, 0x0d, 0x77,
++ 0x04, 0x07, 0x07, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x30, 0x48, 0x84, 0x60, 0xdc,
++ 0x40, 0xc0, 0xd0, 0xa0, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x09, 0x0a, 0x08, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x2a, 0x3e, 0x3e, 0x7f, 0x09,
++ 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0xfc, 0x90, 0x90, 0x90, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x13, 0x1c, 0x27, 0x24, 0x57,
++ 0x18, 0x08, 0x10, 0x10, 0x20, 0x43, 0x00, 0x00,
++ 0x50, 0x48, 0x40, 0xf8, 0x40, 0xf8, 0x40, 0xfc,
++ 0x28, 0x28, 0x10, 0x34, 0xcc, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x10, 0x10, 0x37, 0x50, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x13, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x10, 0x10, 0x30, 0x50, 0x17,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0x20, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x17, 0x10, 0x33, 0x52, 0x12,
++ 0x12, 0x13, 0x12, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xe8, 0x08, 0xc8, 0x48, 0x48,
++ 0x48, 0xc8, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x13, 0x32, 0x52, 0x13,
++ 0x12, 0x11, 0x10, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x40, 0x80, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3f, 0x25, 0x25, 0x27,
++ 0x0c, 0x0e, 0x15, 0x25, 0x44, 0x04, 0x00, 0x00,
++ 0x08, 0x48, 0xc8, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x3f, 0x00, 0x1f, 0x10, 0x10,
++ 0x10, 0x1f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xc8, 0x08, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x11, 0x11, 0x11, 0x1f,
++ 0x11, 0x0a, 0x06, 0x07, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0,
++ 0x10, 0x00, 0x00, 0x00, 0xc0, 0x3c, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x00, 0x7f, 0x55,
++ 0x55, 0x7f, 0x55, 0x55, 0x55, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x04, 0x74, 0x04, 0x74, 0x54, 0x54,
++ 0x54, 0x74, 0x54, 0x04, 0x04, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x44, 0x44, 0x44, 0x44, 0x48, 0x48,
++ 0x50, 0x60, 0x40, 0x7f, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x98, 0x98,
++ 0x78, 0x08, 0x08, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x7f, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0x7c, 0x24, 0x27, 0x24,
++ 0x75, 0x49, 0x0d, 0x15, 0x21, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x50, 0x88, 0x9c, 0xe4, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xb0, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x31, 0x0b, 0x02, 0x0c, 0x11, 0x66, 0x01,
++ 0x7f, 0x02, 0x07, 0x08, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0xc0, 0x30, 0x0c, 0x00,
++ 0xfc, 0x20, 0x40, 0xc0, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x01, 0x7f,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x20, 0x40, 0x80, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x12, 0x13,
++ 0x14, 0x1d, 0x23, 0x22, 0x4c, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xfc, 0x40, 0xc8,
++ 0xf0, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x01, 0x1f, 0x11, 0x11,
++ 0x11, 0x11, 0x11, 0x11, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x20,
++ 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xb0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x1f, 0x01,
++ 0x04, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x00,
++ 0x90, 0x88, 0x04, 0x24, 0x20, 0xe0, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x1f,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf0,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x11, 0x10, 0x10, 0x1d,
++ 0x71, 0x11, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x00, 0x18, 0xe0, 0x00, 0x04, 0xfc, 0x00, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x1f, 0x04,
++ 0x04, 0x02, 0x01, 0x03, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xe0, 0x20,
++ 0x40, 0x40, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x7e, 0x02, 0x04, 0x09, 0x09, 0x0e, 0x78,
++ 0x08, 0x08, 0x08, 0x08, 0x0b, 0x1c, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x7f, 0x12, 0x1e, 0x12, 0x1e,
++ 0x12, 0x7f, 0x14, 0x12, 0x23, 0x40, 0x00, 0x00,
++ 0x08, 0x10, 0x60, 0xc0, 0x40, 0x7c, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x11, 0x12, 0x1c, 0x17,
++ 0x14, 0x14, 0x24, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0xa0, 0xb8, 0xe8, 0xa8,
++ 0xa8, 0xa8, 0xb8, 0xa0, 0x84, 0x7c, 0x00, 0x00,
++ 0x20, 0x20, 0x3f, 0x20, 0x20, 0x1f, 0x00, 0x1f,
++ 0x10, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x70, 0x80, 0x08, 0x08, 0xf8, 0x00, 0xe0,
++ 0x20, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1b, 0x1b,
++ 0x28, 0x28, 0x48, 0x08, 0x09, 0x0e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x08,
++ 0x90, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x11, 0x11, 0x11, 0x11, 0x11,
++ 0x11, 0x11, 0x11, 0x11, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x08, 0x0e, 0x12, 0x12, 0x2a,
++ 0x44, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0x88, 0x88, 0x90, 0xa0,
++ 0xc0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x01, 0x1f, 0x11, 0x11, 0x11, 0x1f, 0x10,
++ 0x10, 0x10, 0x10, 0x13, 0x1c, 0x60, 0x00, 0x00,
++ 0x60, 0x80, 0x00, 0x00, 0x00, 0x78, 0x80, 0x80,
++ 0x40, 0x40, 0x24, 0x14, 0x0c, 0x04, 0x00, 0x00,
++ 0x12, 0x52, 0x34, 0x27, 0x35, 0x55, 0x17, 0x34,
++ 0x37, 0x55, 0x15, 0x17, 0x14, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x10, 0x7c, 0x54, 0x54, 0x54,
++ 0x54, 0x54, 0x5c, 0x50, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x04, 0x08, 0x0c, 0x1a,
++ 0x2a, 0x48, 0x08, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xa0, 0xbc, 0xa0, 0xa0,
++ 0xa0, 0xa0, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x06, 0x3c, 0x04, 0x04, 0x7f, 0x0c, 0x0e,
++ 0x15, 0x15, 0x24, 0x44, 0x07, 0x04, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40,
++ 0x60, 0x50, 0x88, 0x98, 0xe4, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x1c, 0x03, 0x01, 0x02, 0x7f,
++ 0x01, 0x09, 0x09, 0x11, 0x21, 0x01, 0x00, 0x00,
++ 0x00, 0x20, 0x20, 0x40, 0x80, 0x20, 0x18, 0xe4,
++ 0x00, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x0b, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0xa0, 0xa0, 0xfc, 0xa0, 0xa0,
++ 0x90, 0x90, 0x94, 0xac, 0xcc, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x2f, 0x28, 0x28, 0x2f, 0x72, 0x0c,
++ 0x03, 0x7f, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x80, 0x98, 0xe0, 0x80, 0x84, 0x7c, 0x40, 0xc0,
++ 0x30, 0xc8, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x3c, 0x24, 0x27, 0x3d,
++ 0x24, 0x24, 0x24, 0x24, 0x25, 0x4e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x08,
++ 0x90, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x01, 0x3d, 0x25, 0x25, 0x25, 0x3c, 0x24, 0x24,
++ 0x3c, 0x24, 0x24, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x00, 0x18, 0xe0, 0x04, 0x04, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x02, 0x04, 0x3f, 0x01, 0x01,
++ 0x1f, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x40, 0x30, 0xc8, 0x00, 0x00,
++ 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x09, 0x11, 0x19,
++ 0x35, 0x54, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0xf8,
++ 0xa8, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x01, 0x3c, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xe8, 0x28,
++ 0x28, 0xe8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3f, 0x00, 0x3c,
++ 0x03, 0x3d, 0x24, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x00, 0x3c, 0x03, 0x3c,
++ 0x00, 0x3c, 0x24, 0x27, 0x3c, 0x20, 0x00, 0x00,
++ 0x30, 0x28, 0x28, 0xfc, 0x20, 0x20, 0xe0, 0xa0,
++ 0x90, 0xb0, 0xd4, 0x0c, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x00, 0x3c, 0x03, 0x3c,
++ 0x00, 0x3d, 0x25, 0x26, 0x3c, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x40,
++ 0xb0, 0xa8, 0x84, 0x94, 0x90, 0x70, 0x00, 0x00,
++ 0x00, 0x3e, 0x01, 0x7d, 0x00, 0x3c, 0x03, 0x3c,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa4, 0x28, 0xb0, 0x50, 0x48,
++ 0x84, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x09, 0x0a, 0x04, 0x19, 0x6f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0xe0, 0x30, 0xec, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x3c, 0x27,
++ 0x25, 0x3d, 0x1a, 0x14, 0x25, 0x42, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0xa8, 0x48, 0xb0, 0x00, 0x00,
++ 0x0a, 0x0a, 0x0a, 0x0a, 0x2a, 0x2f, 0x2a, 0x2a,
++ 0x2a, 0x2a, 0x2f, 0x3b, 0x61, 0x00, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x1a, 0x2a, 0x7e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x24, 0x26, 0x3a, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xe8, 0xa8, 0xa8,
++ 0xa8, 0xe8, 0xa8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x09, 0x7f, 0x29, 0x25, 0x3f,
++ 0x23, 0x25, 0x29, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xfc, 0x28, 0x48, 0xf8,
++ 0x88, 0x48, 0x28, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x0f, 0x09, 0x0f, 0x01, 0x1f,
++ 0x01, 0x7f, 0x01, 0x1f, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xf0,
++ 0x10, 0xfc, 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00,
++ 0x08, 0x0a, 0x0b, 0x12, 0x12, 0x32, 0x52, 0x12,
++ 0x12, 0x12, 0x12, 0x13, 0x1c, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x90, 0x50, 0x50, 0x10, 0x10,
++ 0x10, 0x10, 0xb0, 0x28, 0x44, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x10, 0x10, 0x37, 0x50, 0x10,
++ 0x17, 0x12, 0x11, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x10,
++ 0xfc, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x12, 0x13, 0x12, 0x12, 0x13,
++ 0x12, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf0,
++ 0x90, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x4f, 0x00, 0x01, 0x01,
++ 0x7f, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xe0, 0x40, 0x80, 0x00,
++ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x01, 0x7f, 0x00, 0x00,
++ 0x7f, 0x08, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x04, 0x7f, 0x08, 0x32, 0x0c, 0x12, 0x7f,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x20, 0x40, 0xfc, 0x20, 0xc8, 0x30, 0x48, 0xfc,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x17, 0x10, 0x10,
++ 0x1f, 0x71, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x48, 0x48, 0x4f, 0x78, 0x48,
++ 0x4f, 0x49, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x21, 0x11, 0x11, 0x02, 0x02, 0x14,
++ 0x10, 0x20, 0x20, 0x41, 0x46, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x48, 0x50, 0x40,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x11, 0x08, 0x08, 0x47, 0x21, 0x21, 0x01, 0x06,
++ 0x12, 0x11, 0x21, 0x22, 0x4f, 0x40, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xfc, 0x10, 0x10, 0x54, 0x64,
++ 0xa8, 0x98, 0x10, 0xa8, 0xfc, 0x44, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x21, 0x21, 0x0f, 0x00,
++ 0x13, 0x12, 0x22, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xa0, 0x10, 0x38, 0xc4, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x61, 0x3f, 0x23, 0x2d, 0x2b,
++ 0x33, 0x2d, 0x25, 0x2b, 0x31, 0x21, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x0c, 0xf8, 0x18, 0x68, 0x58,
++ 0x98, 0x68, 0x28, 0x58, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x3f, 0x5b, 0x15, 0x1b, 0x15,
++ 0x1b, 0x3f, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0xf8, 0xb4, 0x70, 0xb0, 0x50,
++ 0xb0, 0xf8, 0xf0, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x2b, 0x08, 0x1f,
++ 0x28, 0x4f, 0x12, 0x11, 0x21, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x40, 0x40, 0xf8, 0x40, 0xfc,
++ 0x10, 0xfc, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x7c, 0x10, 0x17, 0x11, 0x21, 0x39, 0x6e,
++ 0x29, 0x28, 0x39, 0x2a, 0x27, 0x00, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xfc, 0x10, 0x10, 0x54, 0x64,
++ 0x98, 0x88, 0x10, 0xa8, 0xfc, 0x44, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x00, 0x7f, 0x01, 0x09,
++ 0x09, 0x11, 0x11, 0x21, 0x41, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x20,
++ 0x10, 0x08, 0x08, 0x04, 0x04, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x02, 0x3f, 0x24, 0x24, 0x24,
++ 0x24, 0x24, 0x24, 0x24, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xf0, 0x90, 0x90, 0x90,
++ 0x90, 0x90, 0x90, 0x90, 0x90, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x08, 0x0f, 0x08, 0x08, 0x0f,
++ 0x08, 0x08, 0x0f, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0xe0, 0x20, 0x20, 0xe0,
++ 0x20, 0x38, 0xe0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x1f, 0x10, 0x10, 0x1f, 0x10,
++ 0x10, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x3d, 0x24, 0x27,
++ 0x3c, 0x27, 0x25, 0x3c, 0x20, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x40, 0xfc,
++ 0x10, 0xfc, 0x10, 0x90, 0x90, 0x30, 0x00, 0x00,
++ 0x02, 0x04, 0x39, 0x08, 0x08, 0x7e, 0x09, 0x08,
++ 0x3e, 0x23, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x48, 0x50, 0xfc, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x21, 0x21, 0x02, 0x0c,
++ 0x08, 0x08, 0x10, 0x10, 0x23, 0x2c, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0x08, 0x90, 0x50,
++ 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x1f, 0x12, 0x12, 0x1f,
++ 0x14, 0x17, 0x24, 0x24, 0x47, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xc8, 0x70, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x3f, 0x04,
++ 0x04, 0x04, 0x04, 0x07, 0x78, 0x00, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0x40, 0xc0, 0x20,
++ 0x20, 0x20, 0x14, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x01, 0x39, 0x07, 0x7a, 0x02, 0x3f, 0x00, 0x3b,
++ 0x02, 0x3b, 0x2a, 0x2b, 0x3a, 0x20, 0x00, 0x00,
++ 0x20, 0x30, 0xe8, 0xa8, 0xa0, 0xfc, 0x28, 0xa8,
++ 0xb0, 0x90, 0xb4, 0xac, 0x4c, 0x84, 0x00, 0x00,
++ 0x00, 0x00, 0x7d, 0x55, 0x55, 0x55, 0x7d, 0x55,
++ 0x55, 0x55, 0x7d, 0x42, 0x02, 0x04, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xfc, 0x54, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x1f, 0x28, 0x24, 0x45, 0x00,
++ 0x1f, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0xa0, 0x90, 0x10, 0x00,
++ 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x41, 0x01, 0x01, 0x7f,
++ 0x00, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x40, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x00,
++ 0x7f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x70, 0x70, 0x00,
++ 0xfc, 0x80, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x7c, 0x04,
++ 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x3c, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x44, 0x44, 0x44, 0x44, 0x44,
++ 0x47, 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x88, 0x88, 0x90, 0xa0, 0xc0,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x09, 0x7f, 0x22, 0x12, 0x14,
++ 0x7f, 0x08, 0x3e, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf0, 0x50, 0x50, 0xd0, 0x50,
++ 0x70, 0xb0, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x09, 0x1f, 0x11, 0x21, 0x7f,
++ 0x01, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc,
++ 0x00, 0x80, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x15, 0x7b, 0x2b, 0x29, 0x29,
++ 0x7b, 0x55, 0x1a, 0x12, 0x24, 0x49, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x40, 0x40, 0x78, 0xa0, 0x20,
++ 0xfc, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x7f, 0x02, 0x04, 0x3f,
++ 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xf8, 0x80, 0x60, 0x90,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x09, 0x7f, 0x03, 0x0d, 0x71,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x30, 0xd0, 0x10, 0x20, 0xfc, 0x80, 0x60, 0x1c,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x02, 0x10,
++ 0x14, 0x12, 0x22, 0x20, 0x4f, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0xa8, 0xa0,
++ 0xa8, 0xa8, 0xb0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x40, 0x21, 0x26, 0x00, 0x13,
++ 0x1e, 0x11, 0x20, 0x21, 0x46, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0xa0, 0x58,
++ 0x4c, 0x50, 0xe0, 0x50, 0x4c, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x49, 0x29, 0x2b, 0x0a, 0x1c,
++ 0x2f, 0x48, 0x10, 0x11, 0x22, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x00, 0xf8, 0x40, 0x40,
++ 0xfc, 0xc0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x06, 0x38, 0x3f, 0x24, 0x25, 0x4f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x30, 0xc0, 0xfc, 0x90, 0x10, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x21, 0x41, 0x1f, 0x01, 0x0f,
++ 0x01, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xf0, 0x00, 0xe0,
++ 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x08, 0x08, 0x7f, 0x22, 0x14,
++ 0x7f, 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0x78, 0x48, 0x50, 0x50,
++ 0x48, 0x44, 0x44, 0x44, 0x58, 0x40, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x08, 0x0c, 0x17, 0x14,
++ 0x37, 0x55, 0x14, 0x15, 0x16, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x10, 0x40, 0xf8, 0x90, 0xe0,
++ 0x5c, 0xf8, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x32, 0x52, 0x13,
++ 0x10, 0x11, 0x15, 0x15, 0x19, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0x20, 0x28, 0x04, 0x14, 0xf0, 0x00, 0x00,
++ 0x08, 0x08, 0x2f, 0x28, 0x28, 0x2e, 0x71, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x80, 0x98, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x01, 0x3f, 0x00,
++ 0x00, 0x00, 0x13, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xf8, 0x10,
++ 0x20, 0xc0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x14, 0x12, 0x1f, 0x13,
++ 0x1c, 0x1f, 0x11, 0x23, 0x20, 0x4f, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x90, 0xa0, 0xfc, 0xe0,
++ 0x98, 0xfc, 0x20, 0xa0, 0xe0, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x01, 0x14, 0x14, 0x24, 0x03,
++ 0x08, 0x36, 0x35, 0x51, 0x55, 0x0c, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0x90, 0x88, 0x28, 0xe0,
++ 0x20, 0xd8, 0xd4, 0x44, 0x50, 0x30, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7f,
++ 0x09, 0x2d, 0x2b, 0x2b, 0x49, 0x09, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf0, 0x90, 0xf0, 0x00, 0xf8,
++ 0x08, 0xe8, 0xa8, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x19, 0x61, 0x0f, 0x01, 0x3f,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x30, 0x0c, 0xe0, 0x00, 0xf8,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x44, 0x07, 0x04, 0x07, 0x04,
++ 0x00, 0x7f, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x00, 0xf0, 0x00, 0xc0, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x04, 0x08, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x11,
++ 0x1f, 0x73, 0x05, 0x19, 0x61, 0x03, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0xfc, 0x08, 0x48, 0xa8,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x16, 0x11, 0x10, 0x1f,
++ 0x70, 0x11, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x50, 0x4c, 0xf0, 0x40, 0xfc,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x08, 0x08, 0x7f, 0x14, 0x36,
++ 0x35, 0x55, 0x14, 0x24, 0x24, 0x4d, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x88, 0x48, 0x48, 0x50,
++ 0x30, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x7e, 0x08, 0x7e,
++ 0x08, 0x2d, 0x2a, 0x2a, 0x48, 0x18, 0x00, 0x00,
++ 0x10, 0x90, 0x50, 0x50, 0x10, 0x90, 0x90, 0x1c,
++ 0x70, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x7f, 0x01, 0x07, 0x1c, 0x67,
++ 0x04, 0x07, 0x04, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x10, 0xf0, 0x20, 0xfc, 0x00, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x04, 0x09, 0x0c, 0x1a,
++ 0x2a, 0x48, 0x08, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7f,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x48, 0x0b, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xb0, 0xa8, 0xa8, 0xa4, 0x24,
++ 0x28, 0x78, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x01, 0x07,
++ 0x1c, 0x67, 0x04, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0x10, 0xf0, 0x20, 0x40, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x39, 0x03, 0x7e, 0x03, 0x3a, 0x03, 0x3a,
++ 0x07, 0x38, 0x29, 0x2e, 0x38, 0x20, 0x00, 0x00,
++ 0x88, 0x08, 0xc8, 0x48, 0xfc, 0x48, 0xe8, 0x78,
++ 0xd8, 0xc8, 0x48, 0x48, 0x48, 0xd8, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x1f, 0x11, 0x1f, 0x11,
++ 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x13, 0x12, 0x03, 0x02, 0x72, 0x12,
++ 0x14, 0x15, 0x19, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x90, 0xfc, 0x90, 0xf0, 0x90,
++ 0x00, 0xa8, 0x54, 0x54, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x71, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x88, 0x40, 0x48, 0x48,
++ 0x50, 0x60, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x06, 0x06,
++ 0x0a, 0x0a, 0x12, 0x22, 0x42, 0x06, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x09, 0x09, 0x09, 0x17, 0x11, 0x31, 0x5f, 0x10,
++ 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0f, 0x10, 0x10, 0x24, 0x42,
++ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x09, 0x09,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00,
++ 0x80, 0x80, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x1a, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0x08, 0x88, 0x48,
++ 0x48, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0a, 0x2a, 0x2d, 0x29, 0x4a,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x88, 0x08, 0x88, 0x48,
++ 0x48, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x12, 0x3f, 0x24, 0x3f, 0x1e, 0x13,
++ 0x1e, 0x12, 0x1e, 0x14, 0x1e, 0x61, 0x00, 0x00,
++ 0x78, 0x90, 0x20, 0xf8, 0x48, 0xf8, 0x10, 0xfc,
++ 0x90, 0x50, 0x50, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x40, 0xc0, 0x40, 0x78, 0x88, 0x88, 0x48, 0x28,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x03, 0x0c, 0x79, 0x49, 0x2a, 0x2c, 0x7f, 0x08,
++ 0x1c, 0x1a, 0x2a, 0x49, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0xa8, 0xa0,
++ 0xa0, 0xa0, 0x90, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x13, 0x23, 0x5d, 0x08, 0x7e,
++ 0x09, 0x2a, 0x1c, 0x19, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x80, 0xfc,
++ 0x54, 0x54, 0x94, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x01, 0x01, 0x7f, 0x02,
++ 0x07, 0x1c, 0x64, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0x00, 0xfc, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x28, 0x48, 0x0e, 0x08, 0x7f,
++ 0x08, 0x2a, 0x29, 0x49, 0x08, 0x19, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xf8, 0x88, 0x48,
++ 0x50, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x7e, 0x02, 0x02, 0x3e, 0x20, 0x3e, 0x22,
++ 0x12, 0x0e, 0x1a, 0x62, 0x02, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x80, 0xf8, 0x88,
++ 0x48, 0x38, 0x68, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x7f, 0x04, 0x1f, 0x64,
++ 0x07, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xfc, 0x00, 0xf0, 0x10,
++ 0xf0, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x02, 0x01, 0x01, 0x3f, 0x01, 0x01, 0x01, 0x1f,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xf0,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x13, 0x12, 0x1e, 0x12, 0x12, 0x1e,
++ 0x12, 0x12, 0x1e, 0x62, 0x03, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0x48, 0x50,
++ 0x50, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x40, 0x00, 0x7f, 0x00,
++ 0x08, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x01, 0x01, 0x3f, 0x01, 0x01,
++ 0x7f, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x20, 0xc0, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
++ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x0f, 0x11, 0x21, 0x7f, 0x03,
++ 0x05, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x80,
++ 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x11, 0x1e, 0x24, 0x27, 0x54,
++ 0x08, 0x09, 0x0a, 0x14, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0xe0,
++ 0xe0, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x48, 0x33, 0x12, 0x34, 0x48, 0x0f, 0x18,
++ 0x29, 0x48, 0x08, 0x08, 0x30, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x10, 0x10, 0xfc, 0x10,
++ 0x10, 0x90, 0x90, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x01, 0x7d, 0x11, 0x12, 0x14, 0x7f, 0x10,
++ 0x10, 0x11, 0x1e, 0x64, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0xe0,
++ 0xe0, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x19, 0x70, 0x17, 0x10, 0x7f, 0x12, 0x1b,
++ 0x36, 0x37, 0x50, 0x13, 0x10, 0x17, 0x00, 0x00,
++ 0x08, 0xf0, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00,
++ 0x00, 0x3b, 0x28, 0x2f, 0x38, 0x2b, 0x2a, 0x3b,
++ 0x2a, 0x2b, 0x28, 0x2b, 0x28, 0x4f, 0x00, 0x00,
++ 0x08, 0xf0, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00,
++ 0x08, 0x0b, 0x3d, 0x09, 0x09, 0x7f, 0x09, 0x29,
++ 0x2f, 0x29, 0x3b, 0x28, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x78, 0xc8, 0x68, 0x58, 0xd0,
++ 0x58, 0x68, 0xe4, 0x44, 0x40, 0xfc, 0x00, 0x00,
++ 0x10, 0x0f, 0x09, 0x41, 0x27, 0x25, 0x05, 0x15,
++ 0x16, 0x14, 0x27, 0x24, 0x47, 0x44, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x58,
++ 0x38, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x04, 0x7f, 0x01, 0x02, 0x1f, 0x10, 0x1f,
++ 0x10, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x20, 0x40, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x17, 0x17, 0x3b, 0x50, 0x17,
++ 0x10, 0x13, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xfc, 0x58, 0x58, 0x00, 0xfc,
++ 0x40, 0xf8, 0xa8, 0xa8, 0xa8, 0xb8, 0x00, 0x00,
++ 0x00, 0x01, 0x3e, 0x12, 0x09, 0x3f, 0x20, 0x5f,
++ 0x04, 0x02, 0x01, 0x01, 0x06, 0x38, 0x00, 0x00,
++ 0x30, 0xd0, 0x10, 0x20, 0x40, 0xfc, 0x08, 0xe0,
++ 0x20, 0x40, 0x80, 0x80, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4a, 0x4a, 0x4b, 0x4a, 0x48,
++ 0x48, 0x79, 0x49, 0x42, 0x04, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0xa8, 0xa0,
++ 0xa0, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x1f, 0x02, 0x7f, 0x04,
++ 0x7f, 0x08, 0x14, 0x22, 0x42, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x20,
++ 0xfc, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7d, 0x11, 0x13, 0x12, 0x15,
++ 0x1c, 0x70, 0x10, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0x18, 0xe8, 0x48, 0x50, 0x20, 0xfc, 0x08, 0xf0,
++ 0x90, 0xa0, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x79, 0x17, 0x10, 0x3b, 0x36,
++ 0x37, 0x54, 0x52, 0x13, 0x1e, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0xc8, 0x3c, 0xc8, 0x28, 0xd8, 0x58,
++ 0xc8, 0x48, 0x88, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x0b, 0x72, 0x14, 0x0d, 0x13, 0x7f,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0e, 0x00, 0x00,
++ 0x08, 0xf4, 0x44, 0xa8, 0x90, 0xfc, 0x08, 0xf0,
++ 0x90, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x7f,
++ 0x02, 0x3f, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x70, 0x70, 0xfc,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22,
++ 0x22, 0x24, 0x28, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x88,
++ 0x88, 0x48, 0x28, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x05, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24,
++ 0x26, 0x3c, 0x64, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x50, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x17, 0x11, 0x1f, 0x10,
++ 0x17, 0x14, 0x14, 0x27, 0x24, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xc8, 0x08, 0xe8, 0x08,
++ 0xc8, 0x48, 0x48, 0xc8, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x4f, 0x00, 0x00, 0x7f,
++ 0x01, 0x09, 0x09, 0x11, 0x21, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xe0, 0x00, 0x00, 0xfc,
++ 0x00, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x00, 0x3f, 0x22, 0x22, 0x3e,
++ 0x08, 0x2c, 0x2a, 0x2b, 0x4a, 0x18, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x48, 0xfc, 0x40, 0x60, 0x60,
++ 0x60, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x2c, 0x2a, 0x2a, 0x48,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x08, 0x88, 0x88, 0x88, 0xc8, 0xa8, 0xa8, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x0c, 0x15, 0x16, 0x34, 0x57, 0x14,
++ 0x15, 0x14, 0x15, 0x14, 0x10, 0x13, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0xa0, 0xe0, 0x3c, 0x40,
++ 0x90, 0x60, 0x88, 0x10, 0x60, 0x80, 0x00, 0x00,
++ 0x02, 0x3c, 0x08, 0x7e, 0x1d, 0x2a, 0x4a, 0x09,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x20, 0x24, 0xa4, 0xa8, 0x50, 0x50, 0x88, 0x04,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x11, 0x13, 0x14, 0x1c,
++ 0x71, 0x11, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x12, 0x0a, 0x0a, 0x42, 0x27, 0x26, 0x0a, 0x02,
++ 0x12, 0x12, 0x24, 0x24, 0x48, 0x50, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x68, 0xd8, 0xd8, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x6f,
++ 0x02, 0x02, 0x04, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0x80, 0x40, 0x30, 0xcc,
++ 0x40, 0x78, 0x48, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x02, 0x0c, 0x38, 0x08, 0x08, 0x7e, 0x08, 0x1d,
++ 0x1a, 0x2a, 0x48, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x24, 0xa4, 0xa8, 0xb0, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x15, 0x0c, 0x12, 0x7f,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0xc8, 0x30, 0x20, 0xd0, 0x08,
++ 0x64, 0x10, 0x00, 0xc0, 0x30, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x14, 0x67, 0x28, 0x1b, 0x26, 0x7f,
++ 0x12, 0x3b, 0x36, 0x37, 0x52, 0x14, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0x48, 0x58,
++ 0xe8, 0xf8, 0xe8, 0x58, 0x58, 0x48, 0x00, 0x00,
++ 0x00, 0x7f, 0x22, 0x16, 0x1a, 0x63, 0x06, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x58, 0x68, 0x88, 0x18, 0xe0,
++ 0x20, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x01, 0x7f, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20,
++ 0xe0, 0x00, 0xfc, 0x80, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x0a, 0x09, 0x09, 0x08, 0x7f,
++ 0x09, 0x09, 0x11, 0x11, 0x21, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0x20, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x02, 0x1f, 0x11, 0x1f, 0x11,
++ 0x1f, 0x05, 0x05, 0x09, 0x11, 0x60, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x20, 0x50, 0xfc, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x02, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x09,
++ 0x17, 0x61, 0x09, 0x11, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x90, 0x90, 0xfc, 0x40, 0x88,
++ 0x90, 0x60, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x04, 0x3f, 0x12, 0x7f, 0x1e, 0x1e, 0x1e, 0x12,
++ 0x17, 0x7f, 0x06, 0x7c, 0x07, 0x38, 0x00, 0x00,
++ 0x40, 0x7c, 0x78, 0x88, 0x78, 0x70, 0x70, 0x74,
++ 0x3c, 0xfc, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x12, 0x1f, 0x34, 0x5f, 0x1e, 0x1f, 0x07, 0x7f,
++ 0x07, 0x07, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x48, 0x7c, 0xd0, 0x78, 0x78, 0xfc, 0xc0, 0xfc,
++ 0xc0, 0xc0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x3d, 0x27, 0x24, 0x3f, 0x0a, 0x2a, 0x2f,
++ 0x29, 0x2b, 0x2b, 0x3d, 0x61, 0x03, 0x00, 0x00,
++ 0x10, 0x18, 0xd4, 0x14, 0x90, 0xfc, 0x90, 0x90,
++ 0x30, 0xb0, 0x70, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x00, 0xfc, 0x88, 0xf8,
++ 0x88, 0xf8, 0x8c, 0xf8, 0x88, 0x08, 0x00, 0x00,
++ 0x00, 0x23, 0x12, 0x13, 0x02, 0x03, 0x72, 0x13,
++ 0x15, 0x15, 0x19, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0xe8,
++ 0x28, 0xe8, 0x28, 0x18, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x7f, 0x02, 0x1f, 0x12, 0x14,
++ 0x18, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xfc, 0x80, 0xf0, 0x90, 0xb0,
++ 0x70, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7e, 0x18, 0x18, 0x7e, 0x5b, 0x5b, 0x5e,
++ 0x6e, 0x46, 0x7e, 0x43, 0x7f, 0x42, 0x00, 0x00,
++ 0x08, 0x88, 0xa8, 0xa8, 0xa8, 0xf8, 0xf8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x28, 0x28, 0x08, 0x00, 0x00,
++ 0x08, 0x0f, 0x18, 0x1f, 0x28, 0x4f, 0x08, 0x0f,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x80, 0xf8, 0x80, 0xf0, 0x80, 0xf0, 0x80, 0xf8,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x60,
++ 0x68, 0x68, 0xb4, 0xbc, 0x24, 0x1c, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x08, 0x08, 0x1f, 0x28, 0x48,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x10, 0x30, 0x50, 0x13,
++ 0x10, 0x10, 0x10, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x80, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x02, 0x04, 0x3f, 0x02,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x20, 0x70, 0x88, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x7f, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x12, 0x11, 0x21, 0x4f, 0x08, 0x10, 0x12, 0x32,
++ 0x52, 0x12, 0x13, 0x14, 0x14, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x40, 0x40, 0x40, 0x78,
++ 0x40, 0x40, 0x40, 0xc0, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7f, 0x00, 0x08, 0x08, 0x0b,
++ 0x7c, 0x08, 0x08, 0x10, 0x11, 0x20, 0x00, 0x00,
++ 0x90, 0x88, 0x88, 0xfc, 0x80, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x60, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x04, 0x03, 0x7f, 0x03, 0x0d, 0x33,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xc0, 0x80, 0x00, 0xf8, 0x30, 0x40, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x20, 0x27, 0x00, 0x08,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x08, 0x0a, 0x42, 0x22, 0x22, 0x0f, 0x10,
++ 0x16, 0x11, 0x20, 0x20, 0x43, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x78, 0x40, 0x40, 0xfc, 0x00,
++ 0x08, 0x30, 0x00, 0xa0, 0x18, 0x04, 0x00, 0x00,
++ 0x11, 0x49, 0x22, 0x3e, 0x2a, 0x3f, 0x2a, 0x3e,
++ 0x7f, 0x00, 0x3e, 0x22, 0x3f, 0x22, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0x24, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x15, 0x65, 0x2a, 0x18, 0x24, 0x7d,
++ 0x13, 0x39, 0x35, 0x35, 0x51, 0x11, 0x00, 0x00,
++ 0x88, 0xc8, 0x28, 0x30, 0xfc, 0x90, 0x90, 0x50,
++ 0x5c, 0x50, 0x50, 0xb0, 0x90, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x1f,
++ 0x11, 0x1f, 0x01, 0x3f, 0x01, 0x7f, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x00, 0xf8, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0x48, 0x9c, 0xf4, 0x50,
++ 0x50, 0x50, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x0f, 0x08, 0x08, 0x7f, 0x08,
++ 0x0a, 0x29, 0x29, 0x28, 0x49, 0x1a, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x50, 0x50, 0x50,
++ 0x20, 0x20, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x11, 0x11, 0x12, 0x12,
++ 0x15, 0x18, 0x10, 0x21, 0x22, 0x44, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xd0, 0x50, 0x50,
++ 0x50, 0x90, 0x94, 0x0c, 0x0c, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x48, 0x0f, 0x10, 0x13,
++ 0x32, 0x53, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xf8, 0x80, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x12, 0x0a, 0x0b, 0x42, 0x22, 0x2f, 0x02, 0x13,
++ 0x16, 0x16, 0x2a, 0x2a, 0x42, 0x47, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x48, 0x48, 0xc8, 0x28, 0x30,
++ 0xb0, 0x90, 0x30, 0x48, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x09, 0x11, 0x18,
++ 0x34, 0x54, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0xa8, 0xa0,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x15, 0x65, 0x2a, 0x18, 0x24, 0x7d,
++ 0x13, 0x39, 0x35, 0x35, 0x51, 0x11, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x80, 0xf8, 0xa0, 0x78,
++ 0x48, 0x78, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x7f, 0x01, 0x1f, 0x29, 0x25,
++ 0x3f, 0x23, 0x25, 0x39, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xfc, 0x10, 0xf0, 0x28, 0x48,
++ 0xf8, 0x88, 0x48, 0x38, 0x08, 0x08, 0x00, 0x00,
++ 0x04, 0x7f, 0x1f, 0x12, 0x1f, 0x3e, 0x0c, 0x74,
++ 0x0d, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0xd0, 0x70, 0x54, 0x8c,
++ 0x04, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x01, 0x1e, 0x12, 0x1f, 0x3e, 0x06,
++ 0x7c, 0x05, 0x0e, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0x50, 0xd0, 0x50, 0x74,
++ 0x8c, 0x0c, 0x04, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x11, 0x11, 0x1f, 0x11, 0x21,
++ 0x21, 0x21, 0x21, 0x3f, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x08,
++ 0x08, 0x08, 0x08, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x11, 0x11, 0x21, 0x49, 0x0f, 0x11, 0x11, 0x35,
++ 0x55, 0x15, 0x15, 0x19, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xbc, 0x40, 0x40, 0xc0, 0x3c, 0x88, 0x88,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x1f, 0x00, 0x02, 0x72, 0x12,
++ 0x14, 0x14, 0x18, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0x90, 0x88, 0xfc, 0x80, 0xa0, 0x90, 0x90,
++ 0x88, 0x88, 0x88, 0x80, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x17, 0x11, 0x31, 0x52, 0x14,
++ 0x11, 0x13, 0x14, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x80, 0x90, 0x18, 0xe4, 0x20, 0x24, 0x9c, 0xf0,
++ 0x10, 0x20, 0xc0, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x57, 0x54, 0x54, 0x55, 0x56,
++ 0x54, 0x7d, 0x46, 0x40, 0x03, 0x0c, 0x00, 0x00,
++ 0x40, 0x50, 0x98, 0xe4, 0xa0, 0xa4, 0x9c, 0xf0,
++ 0x90, 0xa0, 0x40, 0xa0, 0x18, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x1f, 0x02, 0x7f, 0x04,
++ 0x1f, 0x68, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x80, 0xfc, 0x40,
++ 0xf0, 0x2c, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x7b, 0x4a, 0x49, 0x79, 0x4f, 0x4d, 0x79,
++ 0x4a, 0x4e, 0x79, 0x49, 0x42, 0x04, 0x00, 0x00,
++ 0x18, 0xe8, 0x48, 0x50, 0x20, 0xfc, 0x18, 0xf8,
++ 0xd0, 0xd0, 0xfc, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x13, 0x7e, 0x04, 0x45, 0x26,
++ 0x28, 0x29, 0x0e, 0x70, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0x50, 0x88, 0xfc, 0xa4, 0xa4, 0x9c, 0xf0,
++ 0x90, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x00, 0x01, 0x3e, 0x11, 0x09, 0x3f, 0x28, 0x4e,
++ 0x12, 0x32, 0x0d, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x30, 0xd0, 0x10, 0x20, 0x40, 0xfc, 0x18, 0xf8,
++ 0x90, 0x90, 0xfc, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3f, 0x28, 0x3e, 0x28, 0x3f,
++ 0x0a, 0x3e, 0x3f, 0x32, 0x44, 0x1b, 0x00, 0x00,
++ 0x20, 0x30, 0x48, 0xf4, 0x50, 0x54, 0xcc, 0x78,
++ 0x48, 0xd0, 0x30, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x22, 0x13, 0x16, 0x06, 0x0b, 0x12,
++ 0x12, 0x23, 0x22, 0x42, 0x43, 0x02, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x23, 0x4a, 0x0b, 0x12, 0x12, 0x32,
++ 0x52, 0x12, 0x12, 0x14, 0x14, 0x18, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0xfc, 0x20, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x1f, 0x28, 0x48, 0x0f,
++ 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x13, 0x1a, 0x36, 0x36,
++ 0x32, 0x52, 0x54, 0x14, 0x18, 0x10, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0xfc, 0x20, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x11, 0x1f, 0x25, 0x25, 0x55,
++ 0x09, 0x09, 0x09, 0x11, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x08, 0xe8, 0x28, 0x28, 0xe8,
++ 0x28, 0x28, 0xe8, 0x28, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x41, 0x21, 0x21, 0x00, 0x13,
++ 0x10, 0x10, 0x27, 0x20, 0x40, 0x40, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x10, 0x60, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x11, 0x09, 0x4b, 0x22, 0x27, 0x0a, 0x0b, 0x12,
++ 0x23, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0x20, 0xf8, 0x40, 0xf0, 0x40, 0xf0, 0x40,
++ 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x20, 0x1f, 0x19, 0x4f, 0x29, 0x2f, 0x08, 0x0b,
++ 0x18, 0x1b, 0x28, 0x2b, 0x48, 0x48, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x78, 0x48, 0x78, 0x08, 0xe8,
++ 0x88, 0xe8, 0x88, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x17, 0x14,
++ 0x17, 0x14, 0x27, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0x80, 0xfc, 0x80, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0d, 0x13, 0x7f,
++ 0x09, 0x2d, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x4c, 0x70, 0xc0, 0x48, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x02, 0x42, 0x22, 0x24, 0x04, 0x09, 0x04, 0x74,
++ 0x12, 0x12, 0x12, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x48, 0x48, 0x48, 0x90, 0x90, 0x20, 0x90, 0x90,
++ 0x48, 0x48, 0x48, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x20, 0x17, 0x10, 0x03, 0x02, 0x73, 0x13,
++ 0x13, 0x10, 0x1f, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0xc0, 0xf8, 0xd8, 0x38, 0xf8,
++ 0xf8, 0x10, 0xfc, 0x90, 0x30, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0xfc, 0x00, 0x78, 0x48, 0x78, 0x00, 0x78,
++ 0x08, 0x10, 0xfc, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x23, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x22, 0x22, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0e, 0x12, 0x12, 0x32, 0x4a,
++ 0x0c, 0x04, 0x0d, 0x12, 0x21, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
++ 0x90, 0x94, 0x14, 0x0c, 0x80, 0x7c, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x04, 0x05, 0x09, 0x1e,
++ 0x2a, 0x49, 0x08, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1e, 0x12, 0x12, 0x12, 0x1e,
++ 0x12, 0x10, 0x11, 0x11, 0x22, 0x40, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x1f, 0x01, 0x1f, 0x01,
++ 0x7f, 0x07, 0x1f, 0x64, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0xf0, 0x10, 0xe0, 0x40,
++ 0xfc, 0xe0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4b, 0x48, 0x4b, 0x78, 0x4f,
++ 0x48, 0x4b, 0x7c, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x44, 0xf8, 0x50, 0xfc,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x40, 0x20, 0x27, 0x00, 0x10,
++ 0x13, 0x1d, 0x21, 0x21, 0x41, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x50, 0xfc, 0x40, 0x80,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x11,
++ 0x11, 0x11, 0x20, 0x2a, 0x49, 0x11, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0xe0, 0x20, 0x00, 0x48, 0x24, 0x24, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x72, 0x0c, 0x0f, 0x12, 0x7e,
++ 0x09, 0x2e, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x48, 0xf8, 0x50, 0x50, 0xfc, 0x40, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x01, 0x1f, 0x01, 0x7f,
++ 0x07, 0x1c, 0x67, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x10, 0xe0, 0x40, 0xfc,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x7f, 0x1f, 0x01, 0x1f, 0x01,
++ 0x7f, 0x0f, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xfc, 0xf0, 0x00, 0xf0, 0x00,
++ 0xfc, 0xe0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x1f, 0x12, 0x1f, 0x0f, 0x01, 0x7f,
++ 0x07, 0x1c, 0x67, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x40, 0xfc, 0xf0, 0x90, 0xf0, 0xf0, 0x40, 0xfc,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3c, 0x01, 0x7e, 0x03, 0x3c,
++ 0x3c, 0x01, 0x3e, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x48, 0xf8, 0x50, 0xfc, 0x40,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7c, 0x00, 0x3f, 0x00, 0x3c,
++ 0x01, 0x3e, 0x24, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x50, 0xfc, 0x40, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x3c, 0x24, 0x24, 0x3c,
++ 0x24, 0x24, 0x26, 0x38, 0x61, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x7e, 0x08, 0x7f,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x49, 0x1a, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x50, 0x50, 0x50,
++ 0x20, 0x20, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x02, 0x7f, 0x04, 0x04, 0x04,
++ 0x0f, 0x08, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x40, 0x40, 0x40,
++ 0x80, 0x80, 0x40, 0x20, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x17, 0x11, 0x10, 0x1f,
++ 0x10, 0x10, 0x20, 0x20, 0x40, 0x01, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf0, 0x20, 0xc0, 0xfc,
++ 0x88, 0x90, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x49, 0x0a, 0x15, 0x10, 0x37,
++ 0x50, 0x11, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0x08, 0xf4, 0x40, 0xfc,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x12, 0x12, 0x3c, 0x06, 0x18,
++ 0x61, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x13, 0x1a, 0x26, 0x27, 0x7a, 0x12, 0x7f,
++ 0x12, 0x56, 0x3b, 0x36, 0x1c, 0x61, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xe8, 0xc8, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x28, 0x31, 0x2b, 0x24, 0x27,
++ 0x24, 0x25, 0x39, 0x22, 0x24, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x90, 0x08, 0xf4, 0x40, 0xfc,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x09, 0x09, 0x0b, 0x15, 0x19, 0x31, 0x51, 0x1f,
++ 0x12, 0x13, 0x14, 0x19, 0x12, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xf8, 0xa8, 0x28, 0x48, 0xb0, 0x00, 0x00,
++ 0x0a, 0x09, 0x0f, 0x15, 0x19, 0x31, 0x53, 0x12,
++ 0x13, 0x13, 0x12, 0x13, 0x13, 0x1c, 0x00, 0x00,
++ 0x88, 0x50, 0xfc, 0xe8, 0x20, 0xe0, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x10, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x25, 0x27, 0x24, 0x3f, 0x24, 0x25,
++ 0x3e, 0x27, 0x24, 0x24, 0x25, 0x4e, 0x00, 0x00,
++ 0x40, 0x48, 0x50, 0xf8, 0x40, 0xfc, 0xa0, 0x50,
++ 0x48, 0xf4, 0x90, 0x90, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x27, 0x24, 0x27, 0x24,
++ 0x24, 0x28, 0x28, 0x30, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0xc0, 0x00, 0x00, 0xf8, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x06, 0x3c, 0x04, 0x04, 0x04, 0x7f, 0x04,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00,
++ 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x70, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x4a, 0x4c, 0x4b, 0x4a, 0x4b,
++ 0x4a, 0x7b, 0x4a, 0x42, 0x02, 0x02, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x08, 0x04, 0x3f, 0x24, 0x24,
++ 0x2f, 0x34, 0x24, 0x27, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0x98,
++ 0xf8, 0x48, 0x48, 0xc8, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x49, 0x49, 0x49, 0x48,
++ 0x7b, 0x4a, 0x43, 0x02, 0x03, 0x02, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x12, 0x09, 0x3f, 0x27, 0x44, 0x17, 0x1f, 0x10,
++ 0x0f, 0x0f, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0xc8, 0x40, 0xf0, 0xc0, 0x08,
++ 0xf8, 0xe0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x4b, 0x2a, 0x29, 0x08, 0x1f, 0x69, 0x08,
++ 0x09, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x1c, 0xe4, 0x48, 0x30, 0x10, 0xfc, 0x10, 0x90,
++ 0x30, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x08, 0x04, 0x7f, 0x01, 0x02,
++ 0x7f, 0x04, 0x0f, 0x10, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x20, 0x40, 0xfc, 0x00, 0x00,
++ 0xfc, 0x40, 0x40, 0xc0, 0x30, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x24,
++ 0x7b, 0x4a, 0x0f, 0x16, 0x23, 0x42, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x29, 0x45, 0x05, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x28, 0x20, 0x40, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x4a, 0x29, 0x29, 0x08, 0x0f,
++ 0x19, 0x68, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x18, 0x60, 0x88, 0x48, 0x50, 0x20, 0x10, 0xfc,
++ 0x10, 0x90, 0x90, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x09, 0x09, 0x11, 0x11,
++ 0x21, 0x41, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x08,
++ 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x09, 0x09, 0x11, 0x11, 0x21, 0x41,
++ 0x03, 0x00, 0x00, 0x01, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x10, 0x08, 0x14, 0x14, 0x20,
++ 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x11, 0x09, 0x09, 0x3f, 0x20, 0x27, 0x24,
++ 0x24, 0x27, 0x24, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x20, 0xf8, 0x08, 0xc8, 0x48,
++ 0x48, 0xc8, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x1f,
++ 0x10, 0x10, 0x10, 0x20, 0x3f, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x80, 0x80, 0x80, 0xf8,
++ 0x80, 0x80, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x11,
++ 0x11, 0x12, 0x12, 0x24, 0x28, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x80, 0x80, 0xfc, 0xc0,
++ 0xa0, 0xa0, 0x90, 0x88, 0x84, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x1a, 0x17, 0x1f, 0x18,
++ 0x1f, 0x1d, 0x2f, 0x2c, 0x48, 0x09, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0xa0, 0x20, 0xbc, 0xc8,
++ 0xa8, 0xb0, 0x90, 0xb0, 0xc8, 0x84, 0x00, 0x00,
++ 0x04, 0x3f, 0x0a, 0x7f, 0x00, 0x1f, 0x11, 0x1f,
++ 0x11, 0x1f, 0x04, 0x7f, 0x04, 0x04, 0x00, 0x00,
++ 0x10, 0x90, 0x20, 0xa8, 0x48, 0x10, 0x10, 0x24,
++ 0x44, 0x08, 0x08, 0x90, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x0f, 0x00, 0x00, 0x79, 0x0f, 0x09, 0x0f,
++ 0x11, 0x1f, 0x21, 0x41, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x84, 0x24, 0xe8, 0x30, 0xe0,
++ 0x10, 0xf0, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x12, 0x12, 0x1c,
++ 0x70, 0x10, 0x10, 0x10, 0x13, 0x3c, 0x00, 0x00,
++ 0x40, 0x40, 0x60, 0x50, 0x48, 0x48, 0x54, 0x54,
++ 0xe0, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x11, 0x11, 0x16,
++ 0x19, 0x71, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x08, 0x30, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x12, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x1f,
++ 0x01, 0x1f, 0x01, 0x7f, 0x01, 0x03, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0xf0, 0xc0,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x10, 0x17, 0x10, 0x1b,
++ 0x70, 0x11, 0x11, 0x13, 0x14, 0x38, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0x40, 0x78, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x03, 0x3c,
++ 0x04, 0x7f, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x40, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00,
++ 0x3f, 0x20, 0x3f, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x48, 0x48, 0x49, 0x79, 0x4a,
++ 0x49, 0x49, 0x79, 0x49, 0x41, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x08, 0x30, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x00,
++ 0x7c, 0x44, 0x7c, 0x44, 0x7c, 0x44, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x08, 0x1d, 0x1b, 0x1a,
++ 0x28, 0x28, 0x48, 0x09, 0x0f, 0x08, 0x00, 0x00,
++ 0x70, 0x10, 0x90, 0x90, 0x90, 0x08, 0x48, 0x44,
++ 0x40, 0xa0, 0x90, 0x18, 0xe4, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x18, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x24, 0xa4, 0xa8, 0x20, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x48, 0x0b, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0xfc, 0x50, 0xfc, 0x00, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7f, 0x13, 0x15, 0x39, 0x35,
++ 0x35, 0x51, 0x50, 0x12, 0x12, 0x14, 0x00, 0x00,
++ 0x90, 0x90, 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xf8,
++ 0x20, 0xfc, 0x00, 0xa8, 0x54, 0x54, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x40, 0x21, 0x21, 0x02, 0x04,
++ 0x13, 0x12, 0x22, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0c, 0x0a, 0x41, 0x21, 0x23, 0x02, 0x13,
++ 0x12, 0x13, 0x22, 0x22, 0x42, 0x42, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0x50, 0x60, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x08, 0x0a, 0x42, 0x22, 0x2f, 0x00, 0x12,
++ 0x12, 0x14, 0x28, 0x20, 0x41, 0x4e, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x40, 0x40, 0xfc, 0x50, 0x48,
++ 0x54, 0xd4, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x22, 0x12, 0x12, 0x4f, 0x22, 0x22, 0x07, 0x16,
++ 0x16, 0x1a, 0x2a, 0x22, 0x42, 0x42, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0xc8, 0x48, 0x78, 0x48, 0xc8,
++ 0xf8, 0x48, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x0a, 0x2c, 0x2b, 0x28, 0x48,
++ 0x0f, 0x08, 0x14, 0x13, 0x22, 0x44, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xd0, 0xf8, 0x90, 0x90,
++ 0xfc, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x04, 0x04, 0x08, 0x0f, 0x18, 0x2f, 0x48, 0x0f,
++ 0x08, 0x0f, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf8, 0x80, 0xf0, 0x80, 0xf0,
++ 0x80, 0xfc, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x25, 0x3f, 0x25, 0x25,
++ 0x3d, 0x25, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x30, 0xf8, 0x08, 0x08,
++ 0xf8, 0x08, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x2f, 0x08, 0x18,
++ 0x2a, 0x4a, 0x12, 0x12, 0x2f, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x00, 0xf8, 0x40, 0x40,
++ 0x78, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x09, 0x11, 0x63, 0x00, 0x07, 0x7f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x20, 0x18, 0x24, 0xc0, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x11, 0x10, 0x11, 0x3d, 0x25,
++ 0x65, 0x25, 0x25, 0x3d, 0x25, 0x01, 0x00, 0x00,
++ 0x40, 0x44, 0x44, 0x48, 0x50, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x11, 0x11, 0x3f, 0x25, 0x65,
++ 0x25, 0x25, 0x3c, 0x22, 0x22, 0x04, 0x00, 0x00,
++ 0x90, 0x90, 0xa0, 0xfc, 0x20, 0xf8, 0x20, 0xf8,
++ 0x20, 0xfc, 0x00, 0xa8, 0x54, 0x04, 0x00, 0x00,
++ 0x11, 0x10, 0x10, 0x7f, 0x08, 0x08, 0x13, 0x18,
++ 0x34, 0x57, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xfc, 0x40, 0x40, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x02, 0x0c, 0x38, 0x09, 0x09, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2b, 0x49, 0x0a, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x20, 0x20, 0xb0, 0xa8,
++ 0xa8, 0x24, 0x24, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x01, 0x1f, 0x04, 0x7f, 0x00, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x01, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x40, 0xfc, 0x00, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x25, 0x42, 0x01, 0x1f,
++ 0x01, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x10, 0xe0, 0x00,
++ 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x4a, 0x2b, 0x2d, 0x09, 0x7f, 0x09, 0x1d,
++ 0x1b, 0x2b, 0x49, 0x0a, 0x0b, 0x0c, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x00, 0x20, 0x20, 0x20, 0xf8,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7f,
++ 0x09, 0x2d, 0x2b, 0x2b, 0x49, 0x09, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x88, 0xb0, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x21, 0x11, 0x11, 0x01, 0x1f, 0x10, 0x1f,
++ 0x10, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0x10, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x3f, 0x20, 0x3f, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x08, 0x0f, 0x4a, 0x29, 0x28,
++ 0x0b, 0x19, 0x68, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x3c, 0xc8, 0x48, 0x30, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x08, 0x0f, 0x18, 0x1f, 0x28,
++ 0x4f, 0x08, 0x0f, 0x14, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x80, 0xf8, 0x80, 0xf0, 0x80,
++ 0xf0, 0x80, 0xf8, 0x90, 0x48, 0x44, 0x00, 0x00,
++ 0x10, 0x17, 0x21, 0x4f, 0x0f, 0x15, 0x17, 0x35,
++ 0x57, 0x11, 0x17, 0x11, 0x1e, 0x10, 0x00, 0x00,
++ 0xc0, 0x3c, 0x00, 0xc0, 0xfc, 0x48, 0xc8, 0x48,
++ 0xc8, 0x08, 0xc8, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x11, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x01,
++ 0x7f, 0x02, 0x0c, 0x74, 0x07, 0x18, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x00,
++ 0xfc, 0x90, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3d, 0x01, 0x3e,
++ 0x00, 0x3c, 0x24, 0x24, 0x3f, 0x20, 0x00, 0x00,
++ 0x60, 0x20, 0xa0, 0x90, 0x90, 0x48, 0x48, 0x44,
++ 0x40, 0x60, 0x90, 0x90, 0xe8, 0x08, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0xa0, 0xa0, 0xb8, 0xa0,
++ 0xa0, 0xa0, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x00, 0x3c, 0x01, 0x3e,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x3c, 0x00, 0x7f, 0x00, 0x3c, 0x03, 0x3c,
++ 0x00, 0x3f, 0x24, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xfc, 0x40, 0x40, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x02, 0x07, 0x18, 0x7f, 0x11, 0x1f, 0x13, 0x0d,
++ 0x72, 0x0d, 0x32, 0x0c, 0x30, 0x03, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0xf0, 0x10, 0xf0, 0x18, 0x90,
++ 0xa0, 0xc0, 0xa0, 0x98, 0x84, 0x00, 0x00, 0x00,
++ 0x11, 0x09, 0x3f, 0x27, 0x44, 0x07, 0x0f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0xc8, 0x40, 0xc0, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x4f, 0x29, 0x1f, 0x69, 0x08, 0x7f, 0x02,
++ 0x1f, 0x14, 0x18, 0x1f, 0x1f, 0x10, 0x00, 0x00,
++ 0x3c, 0xc8, 0x50, 0xfc, 0x10, 0xb0, 0xfc, 0x80,
++ 0xf0, 0xb0, 0xf0, 0xf0, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0xa0, 0xa0, 0xb8, 0xa0,
++ 0xa0, 0xa0, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x18, 0xe0, 0xfc, 0x20, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x13, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1d, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x20, 0xf8, 0x90, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x2b, 0x28, 0x31, 0x29, 0x25,
++ 0x25, 0x25, 0x38, 0x27, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0xf8, 0x90, 0xfc, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x14, 0x15, 0x7f, 0x14, 0x1c, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x24, 0xa4, 0xa8, 0x20, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02,
++ 0x02, 0x02, 0x02, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x11, 0x09,
++ 0x05, 0x03, 0x03, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x0f, 0x00, 0x00, 0x3d, 0x05, 0x09, 0x09,
++ 0x11, 0x21, 0x43, 0x00, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x88, 0x48, 0x50, 0x20, 0x20,
++ 0x10, 0x08, 0x04, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x09, 0x7f, 0x09, 0x3f,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x60, 0x80, 0x00, 0xf8, 0x20, 0xfc, 0x20, 0xf8,
++ 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x40, 0x07, 0x04, 0x04, 0x04,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0x00, 0x80, 0x80, 0x80, 0x80,
++ 0x80, 0x80, 0x80, 0x88, 0x88, 0x78, 0x00, 0x00,
++ 0x01, 0x1e, 0x04, 0x3f, 0x15, 0x7f, 0x15, 0x15,
++ 0x3f, 0x0e, 0x15, 0x25, 0x44, 0x04, 0x00, 0x00,
++ 0x08, 0x28, 0x28, 0xa8, 0x28, 0xe8, 0x28, 0x28,
++ 0xa8, 0x28, 0x28, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x13, 0x7e, 0x12, 0x13, 0x12,
++ 0x16, 0x1a, 0x64, 0x06, 0x09, 0x10, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0x48, 0xa8, 0xa8,
++ 0xb0, 0x90, 0x90, 0xb4, 0xcc, 0x04, 0x00, 0x00,
++ 0x00, 0x11, 0x11, 0x11, 0x7d, 0x11, 0x10, 0x17,
++ 0x15, 0x1b, 0x64, 0x01, 0x02, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0x28, 0x48, 0xb0, 0x00, 0x00,
++ 0x00, 0x17, 0x11, 0x12, 0x7f, 0x10, 0x13, 0x10,
++ 0x17, 0x18, 0x63, 0x0d, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0xfc, 0x10, 0xa8, 0xfc, 0xa0, 0xf8, 0xa0,
++ 0xfc, 0xc8, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x12, 0x7f, 0x24, 0x25, 0x24,
++ 0x7b, 0x48, 0x0f, 0x14, 0x20, 0x43, 0x00, 0x00,
++ 0x40, 0xfc, 0xa8, 0xa4, 0xfc, 0xa0, 0xf8, 0xa0,
++ 0xfc, 0xc8, 0xb0, 0x90, 0xc8, 0x04, 0x00, 0x00,
++ 0x11, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x01,
++ 0x1f, 0x11, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x19, 0x34, 0x37, 0x30, 0x51,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7d, 0x11, 0x11, 0x17, 0x1e,
++ 0x72, 0x14, 0x11, 0x16, 0x10, 0x37, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf0, 0xf0, 0xf0, 0xfc, 0xd4,
++ 0xf8, 0xf4, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x02, 0x02, 0x07, 0x0c, 0x32, 0x03, 0x0d, 0x71,
++ 0x1f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x40, 0x80, 0x80, 0x60, 0x1c,
++ 0xf0, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1d, 0x1b, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x09, 0x0e, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20, 0xa0,
++ 0xa0, 0x60, 0x60, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x09, 0x42, 0x24, 0x23, 0x00, 0x0f,
++ 0x10, 0x13, 0x20, 0x20, 0x40, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x20, 0x40, 0xf8, 0x48, 0xfc,
++ 0x48, 0xf8, 0x48, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x48, 0x2f, 0x28, 0x08, 0x08,
++ 0x18, 0x28, 0x49, 0x0a, 0x0c, 0x08, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x48, 0xfc, 0x40, 0x40, 0x40,
++ 0xa0, 0xa0, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x3f, 0x2f,
++ 0x48, 0x0f, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xfc, 0xe8,
++ 0x20, 0xe0, 0xe0, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x1b, 0x71, 0x12, 0x17, 0x7c, 0x13, 0x18,
++ 0x37, 0x34, 0x57, 0x10, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0xfc, 0x10, 0xa8, 0xfc, 0xa0, 0xf8, 0xa0,
++ 0xfc, 0xe8, 0x90, 0xb0, 0xc8, 0x04, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x00, 0x3d, 0x05, 0x19,
++ 0x63, 0x0f, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x48, 0x88, 0x50, 0x30,
++ 0x0c, 0xe0, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x7e, 0x03, 0x3c, 0x01, 0x3c,
++ 0x03, 0x3c, 0x27, 0x24, 0x3c, 0x27, 0x00, 0x00,
++ 0x40, 0xfc, 0x10, 0xa8, 0xfc, 0xa0, 0xf8, 0xa0,
++ 0xfc, 0xe8, 0x90, 0xb0, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0d, 0x3f, 0x2e, 0x2e, 0x36,
++ 0x37, 0x22, 0x3f, 0x22, 0x3e, 0x23, 0x00, 0x00,
++ 0x20, 0xfc, 0x88, 0x54, 0xfc, 0x50, 0xf8, 0x50,
++ 0xfc, 0x68, 0xd0, 0x50, 0x68, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0f, 0x72, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x00, 0xfc, 0x20, 0xa0,
++ 0xb8, 0xa0, 0xa0, 0x60, 0x20, 0x1c, 0x00, 0x00,
++ 0x00, 0x07, 0x74, 0x57, 0x54, 0x57, 0x55, 0x55,
++ 0x55, 0x77, 0x4a, 0x4b, 0x12, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x38, 0xc0, 0xf0, 0x50,
++ 0xf0, 0xf8, 0xa8, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x10, 0x7e, 0x12, 0x12, 0x12,
++ 0x16, 0x1a, 0x62, 0x02, 0x02, 0x01, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x29, 0x7e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x24, 0x26, 0x3a, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x20, 0x20, 0xf8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xb8, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x17, 0x11,
++ 0x19, 0x71, 0x11, 0x11, 0x1e, 0x30, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0x20, 0xe0, 0x20,
++ 0x20, 0x10, 0x50, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x10, 0x1d, 0x25, 0x25, 0x55,
++ 0x19, 0x09, 0x11, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x12, 0x17, 0x35, 0x39, 0x52,
++ 0x17, 0x1a, 0x17, 0x24, 0x20, 0x47, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xf8, 0x00, 0xf8, 0x88,
++ 0xe8, 0xa8, 0xe8, 0xa8, 0xf8, 0x30, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x66, 0x2a, 0x1b, 0x24, 0x7f,
++ 0x12, 0x3b, 0x36, 0x37, 0x52, 0x10, 0x00, 0x00,
++ 0x20, 0x30, 0xe8, 0xa8, 0xa0, 0xfc, 0x20, 0xa8,
++ 0xa8, 0x90, 0x90, 0xb4, 0x4c, 0x84, 0x00, 0x00,
++ 0x01, 0x7d, 0x2f, 0x2a, 0x3a, 0x2f, 0x28, 0x3b,
++ 0x2a, 0x2f, 0x3a, 0x6b, 0x0a, 0x08, 0x00, 0x00,
++ 0x20, 0x30, 0xe8, 0xa8, 0xa0, 0xfc, 0x20, 0xa8,
++ 0xa8, 0xb0, 0x90, 0xb4, 0x4c, 0x84, 0x00, 0x00,
++ 0x04, 0x07, 0x08, 0x10, 0x7f, 0x11, 0x11, 0x11,
++ 0x1f, 0x10, 0x10, 0x10, 0x10, 0x0f, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x80, 0xf0, 0x10, 0x10, 0x10,
++ 0xf0, 0x10, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x1e, 0x24, 0x48, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x2a, 0x3e, 0x22, 0x22, 0x22, 0x47, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0x20, 0x30, 0x28, 0x3c, 0xc4, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x19, 0x6f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x09, 0x08, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0xec, 0x20, 0xe0,
++ 0x20, 0xf0, 0x10, 0xa0, 0x60, 0x1c, 0x00, 0x00,
++ 0x08, 0x0c, 0x12, 0x2a, 0x48, 0x3e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x24, 0x26, 0x3a, 0x61, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0x20, 0x30, 0x28, 0x3c, 0xc4, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x10, 0x1f, 0x12, 0x23,
++ 0x5c, 0x00, 0x7f, 0x04, 0x02, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xfc, 0x48, 0xb0,
++ 0x2c, 0x20, 0xfc, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x11, 0x11, 0x1f,
++ 0x11, 0x11, 0x12, 0x22, 0x24, 0x48, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0xe0,
++ 0x20, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x12, 0x12, 0x33, 0x52, 0x12,
++ 0x13, 0x12, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48,
++ 0xf8, 0x48, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x17, 0x10, 0x33, 0x50, 0x13,
++ 0x10, 0x13, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0xf8, 0x00, 0xf8,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x13, 0x10, 0x33, 0x50, 0x17,
++ 0x14, 0x1b, 0x11, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x08, 0xf0, 0x20, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x10, 0x1f, 0x14, 0x27,
++ 0x58, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x90, 0x60,
++ 0x1c, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x25,
++ 0x79, 0x4d, 0x0a, 0x12, 0x24, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x00, 0xfc, 0x68,
++ 0x68, 0x70, 0x50, 0x50, 0x68, 0x84, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x49, 0x08, 0x49, 0x29, 0x2b,
++ 0x0a, 0x1f, 0x68, 0x08, 0x08, 0x0b, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0xf0, 0xfc,
++ 0x08, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x5f, 0x05, 0x7f, 0x05, 0x19,
++ 0x6f, 0x09, 0x0f, 0x09, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x68, 0xa0, 0x40, 0xfc, 0x40, 0x30,
++ 0xec, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x00, 0x00, 0x02, 0x02, 0x02, 0x12, 0x12,
++ 0x12, 0x22, 0x42, 0x02, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x40, 0x00, 0x00, 0x10, 0x08,
++ 0x04, 0x04, 0x00, 0x10, 0x10, 0xf0, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x19, 0x35, 0x35, 0x31, 0x51,
++ 0x11, 0x11, 0x17, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0xfc, 0xa0, 0x10, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x12, 0x13, 0x1e,
++ 0x72, 0x12, 0x14, 0x14, 0x18, 0x33, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x00, 0xfc, 0xc8,
++ 0xc8, 0xb0, 0xa0, 0x90, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x22, 0x12, 0x14, 0x7f, 0x08,
++ 0x7e, 0x1c, 0x1b, 0x29, 0x4a, 0x08, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x14, 0x14, 0x7f, 0x00, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x50, 0xfc, 0x00, 0xe0,
++ 0x20, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x03, 0x0d, 0x31, 0x09, 0x08,
++ 0x7f, 0x18, 0x1c, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x80, 0x60, 0x18, 0x20, 0x20,
++ 0xfc, 0x60, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x10, 0x17, 0x39, 0x36,
++ 0x34, 0x53, 0x50, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xa0, 0xfc, 0x10, 0xe8,
++ 0x44, 0xf8, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x43, 0x20, 0x23, 0x00, 0x17,
++ 0x14, 0x1b, 0x21, 0x20, 0x41, 0x4e, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x08, 0xf0, 0x20, 0xc0, 0xe0, 0x1c, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x44, 0x20, 0x21, 0x02, 0x10,
++ 0x17, 0x10, 0x21, 0x22, 0x44, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0xa8, 0xa0, 0xa4, 0x1c, 0x40, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x21, 0x21, 0x3f, 0x21, 0x21,
++ 0x3f, 0x21, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x08,
++ 0xf8, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x29, 0x2a, 0x0c, 0x19,
++ 0x28, 0x48, 0x13, 0x10, 0x20, 0x47, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0x40, 0x30, 0x4c, 0x80,
++ 0x20, 0xc8, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x7f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0xfc, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x0a, 0x0a, 0x13, 0x1a,
++ 0x36, 0x57, 0x12, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0xf8, 0x48,
++ 0x48, 0xf8, 0x48, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x02, 0x7f, 0x04, 0x0f,
++ 0x11, 0x6f, 0x03, 0x0d, 0x31, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x80, 0xfc, 0x40, 0xa0,
++ 0x10, 0xec, 0x80, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x67, 0x1a, 0x1a, 0x27, 0x7e,
++ 0x12, 0x1b, 0x36, 0x34, 0x50, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0xf8, 0x48,
++ 0x48, 0xf8, 0x48, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x3f, 0x20, 0x20, 0x20,
++ 0x3f, 0x21, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10,
++ 0xf0, 0x10, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x04, 0x00, 0x01, 0x04,
++ 0x14, 0x14, 0x24, 0x44, 0x04, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00, 0x90,
++ 0x48, 0x44, 0x04, 0x20, 0x20, 0xe0, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x08, 0x3f, 0x12, 0x14, 0x7f,
++ 0x08, 0x7f, 0x1c, 0x2a, 0x4a, 0x09, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x0c, 0x70, 0x40, 0x40, 0x7c,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x22, 0x14, 0x7f, 0x08, 0x7f,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x68, 0x60, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3d, 0x02, 0x3d,
++ 0x00, 0x3c, 0x25, 0x24, 0x3c, 0x23, 0x00, 0x00,
++ 0x40, 0x40, 0x60, 0xa0, 0x90, 0x28, 0x44, 0x90,
++ 0x20, 0x44, 0x88, 0x10, 0x60, 0x80, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x78, 0x01, 0x06, 0x38, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0xe0, 0x24, 0xe8, 0x30,
++ 0xe0, 0x60, 0xa0, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x08, 0x04, 0x04, 0x7f, 0x01,
++ 0x01, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x20, 0x20, 0x40, 0xfc, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x21, 0x12, 0x13, 0x06, 0x0a, 0x73, 0x12,
++ 0x13, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0xf8, 0x20, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x00,
++ 0x1f, 0x13, 0x1f, 0x14, 0x27, 0x58, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x70, 0x70, 0x00,
++ 0xf8, 0xe0, 0xfc, 0x90, 0x60, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02,
++ 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
++ 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x10, 0x10, 0x30, 0x50, 0x10,
++ 0x10, 0x10, 0x10, 0x17, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x02, 0x02, 0x02, 0x1e, 0x07,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x88, 0x48, 0x08, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x12, 0x1f, 0x17, 0x14,
++ 0x27, 0x58, 0x0f, 0x00, 0x3f, 0x00, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0xcc, 0x70,
++ 0x44, 0xbc, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x3d, 0x01, 0x01, 0x01, 0x7f, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x3f, 0x00, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x3e, 0x08,
++ 0x0e, 0x30, 0x7f, 0x04, 0x02, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xf8, 0x88,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x04, 0x3f, 0x04, 0x07, 0x04, 0x07, 0x04, 0x7f,
++ 0x12, 0x12, 0x14, 0x18, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xc0, 0x40, 0xc0, 0x40, 0xfc,
++ 0x80, 0x88, 0x78, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x09, 0x10, 0x10,
++ 0x23, 0x40, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x80, 0x40,
++ 0x30, 0x8c, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3e, 0x22, 0x3f, 0x3f, 0x2f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x60, 0x90, 0x0c, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x01, 0x3c, 0x24, 0x25, 0x3d, 0x22, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0xb0, 0xd0,
++ 0x90, 0x90, 0x94, 0x0c, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x27, 0x11, 0x11, 0x01, 0x01, 0x0f, 0x71,
++ 0x11, 0x11, 0x11, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0x20, 0xe0, 0x20,
++ 0x10, 0x14, 0x0c, 0x04, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x28, 0x2b, 0x32, 0x2b, 0x26,
++ 0x27, 0x24, 0x27, 0x38, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x14, 0x15, 0x7f, 0x14, 0x1c, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xc8, 0x68, 0x58,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x00, 0x7f, 0x00, 0x3f,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xf8, 0x08, 0xe8,
++ 0x08, 0x88, 0x88, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x7a, 0x03, 0x3a, 0x02, 0x3b,
++ 0x02, 0x3a, 0x2b, 0x2e, 0x38, 0x20, 0x00, 0x00,
++ 0x00, 0xc0, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0x98,
++ 0x90, 0xd0, 0xb0, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x10, 0x17, 0x20, 0x48, 0x09, 0x11, 0x25, 0x45,
++ 0x09, 0x09, 0x11, 0x20, 0x43, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x40, 0xc0, 0x40, 0x7c, 0xa0, 0xa0, 0x3c, 0x20,
++ 0x20, 0x3c, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x22, 0x29, 0x25, 0x24, 0x20,
++ 0x27, 0x20, 0x23, 0x2c, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x28, 0x28, 0x28, 0x48, 0x48,
++ 0x88, 0xc8, 0x28, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x17, 0x14, 0x14,
++ 0x17, 0x14, 0x12, 0x23, 0x23, 0x4c, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xc8, 0x08, 0x88, 0xfc, 0xc8,
++ 0xa8, 0xa8, 0x88, 0x08, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x27, 0x10, 0x13, 0x02, 0x02, 0x73, 0x12,
++ 0x11, 0x11, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x10,
++ 0x10, 0x20, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x49, 0x49, 0x4a, 0x4a, 0x4c,
++ 0x48, 0x78, 0x48, 0x41, 0x06, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x48, 0x50, 0x40,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x09, 0x09, 0x7f, 0x09,
++ 0x09, 0x3f, 0x01, 0x01, 0x3f, 0x00, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x3c, 0x25, 0x25, 0x3d, 0x25, 0x21,
++ 0x3d, 0x25, 0x25, 0x3c, 0x24, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x24, 0x24, 0x24, 0x24,
++ 0x24, 0x24, 0x38, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x13, 0x15, 0x11, 0x15,
++ 0x19, 0x71, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x90, 0x90, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x05, 0x05, 0x09,
++ 0x09, 0x11, 0x21, 0x41, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x88, 0x90, 0x60, 0x40, 0x20,
++ 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0a, 0x2a, 0x2c, 0x29, 0x4a,
++ 0x08, 0x0c, 0x12, 0x12, 0x21, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa8, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x7b, 0x48, 0x4b, 0x79, 0x49, 0x4f, 0x79,
++ 0x49, 0x4b, 0x78, 0x48, 0x07, 0x00, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xf8, 0x50, 0x50, 0xfc, 0x50,
++ 0x50, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x4a, 0x2b, 0x2c, 0x08, 0x7e, 0x09, 0x1c,
++ 0x1a, 0x2b, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0x54, 0x94, 0x2c, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x12, 0x0e, 0x32, 0x07, 0x01, 0x3f,
++ 0x04, 0x0b, 0x11, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x38, 0xc8, 0x18, 0x00, 0xf8,
++ 0x20, 0x50, 0x88, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x7f, 0x08, 0x0f,
++ 0x03, 0x0d, 0x74, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xfc, 0x20, 0xe0,
++ 0x10, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x02, 0x21, 0x17, 0x10, 0x01, 0x0e, 0x71, 0x16,
++ 0x11, 0x16, 0x10, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x80, 0x88, 0xc8, 0x70, 0xe0,
++ 0x50, 0x48, 0x44, 0x80, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0x50, 0x54, 0x94, 0x2c,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5e, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x13, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2b, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0xfc, 0xa8, 0xa8, 0xfc, 0xa8,
++ 0xa8, 0xfc, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x25, 0x29, 0x30, 0x28, 0x27, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x40, 0x78, 0xc8, 0x78, 0x48,
++ 0x78, 0x48, 0x48, 0x58, 0x80, 0x7c, 0x00, 0x00,
++ 0x00, 0x02, 0x7e, 0x13, 0x10, 0x17, 0x7c, 0x13,
++ 0x12, 0x16, 0x1a, 0x62, 0x02, 0x02, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x40, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x25, 0x2d, 0x2c, 0x7e, 0x43, 0x7d,
++ 0x25, 0x3d, 0x25, 0x3d, 0x26, 0x2c, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x78, 0x48, 0xf8, 0x48,
++ 0x78, 0x48, 0x48, 0x58, 0x80, 0x7c, 0x00, 0x00,
++ 0x11, 0x11, 0x1f, 0x01, 0x3f, 0x20, 0x4f, 0x00,
++ 0x7f, 0x09, 0x09, 0x11, 0x21, 0x03, 0x00, 0x00,
++ 0x10, 0x10, 0xf0, 0x00, 0xfc, 0x08, 0xe0, 0x00,
++ 0xfc, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x01, 0x11, 0x1f, 0x01, 0x7f, 0x0f, 0x08, 0x0f,
++ 0x3f, 0x20, 0x27, 0x24, 0x27, 0x20, 0x00, 0x00,
++ 0x00, 0x10, 0xf0, 0x00, 0xfc, 0xe0, 0x20, 0xe0,
++ 0xf8, 0x08, 0xc8, 0x48, 0xc8, 0x18, 0x00, 0x00,
++ 0x49, 0x29, 0x2a, 0x7f, 0x1c, 0x1a, 0x2b, 0x48,
++ 0x7f, 0x12, 0x3a, 0x04, 0x1a, 0x61, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x88, 0x88, 0x48, 0x50,
++ 0x30, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x08, 0x08, 0x48, 0x30, 0x10,
++ 0x30, 0x48, 0x88, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x09, 0x09, 0x7e, 0x09, 0x28,
++ 0x2f, 0x29, 0x39, 0x28, 0x27, 0x41, 0x00, 0x00,
++ 0x80, 0xf8, 0x48, 0x58, 0xf8, 0x88, 0xb0, 0xf8,
++ 0x48, 0x58, 0xf8, 0x88, 0x30, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x3e, 0x52, 0x57, 0x7f, 0x52, 0x2c,
++ 0x3e, 0x52, 0x56, 0x7e, 0x52, 0x2c, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x12, 0x13, 0x1e,
++ 0x72, 0x15, 0x15, 0x19, 0x11, 0x31, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x48, 0x40, 0xfc, 0x40,
++ 0x40, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x08, 0x09, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x40, 0x88, 0x08, 0x10, 0x20,
++ 0xc4, 0x04, 0x08, 0x10, 0x60, 0x80, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7f, 0x11, 0x19, 0x35, 0x34,
++ 0x33, 0x52, 0x53, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x3f, 0x20, 0x4f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xfc, 0x08, 0xe0, 0x20,
++ 0xe0, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x09, 0x3f, 0x2a, 0x2c, 0x28, 0x3e, 0x22,
++ 0x32, 0x2c, 0x24, 0x2a, 0x32, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x05, 0x19, 0x63, 0x00, 0x03, 0x0f, 0x78,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x60, 0x18, 0x24, 0xc0, 0x40, 0xf8, 0x80,
++ 0xf0, 0x80, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x0b, 0x13, 0x1d,
++ 0x35, 0x53, 0x12, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x23, 0x10, 0x15, 0x43, 0x23, 0x24, 0x0b, 0x12,
++ 0x13, 0x12, 0x21, 0x21, 0x4f, 0x40, 0x00, 0x00,
++ 0x90, 0x90, 0x64, 0x28, 0xf0, 0x08, 0xf4, 0x10,
++ 0xf0, 0x20, 0x20, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x14, 0x7e, 0x13, 0x14, 0x11, 0x1c,
++ 0x73, 0x12, 0x13, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x00, 0xf8, 0xc8, 0xa8, 0xb8, 0xc8, 0x98, 0x80,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x08, 0x04,
++ 0x02, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x12,
++ 0x13, 0x12, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20,
++ 0xe0, 0x20, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x42, 0x2f, 0x2a, 0x0a, 0x0f,
++ 0x12, 0x17, 0x26, 0x2a, 0x52, 0x42, 0x00, 0x00,
++ 0x00, 0x7c, 0x90, 0x78, 0xc8, 0xf8, 0xc8, 0xf8,
++ 0x48, 0x78, 0xb0, 0xa8, 0x44, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x00, 0x3e, 0x2b, 0x2a,
++ 0x3e, 0x2a, 0x2a, 0x3e, 0x23, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x78, 0x88, 0x88, 0x10, 0x10,
++ 0x30, 0x30, 0x48, 0x88, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x00, 0x7f,
++ 0x09, 0x09, 0x09, 0x15, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x00, 0xfc,
++ 0x00, 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x0f, 0x40, 0x23, 0x20, 0x0f, 0x00, 0x13,
++ 0x10, 0x2f, 0x21, 0x43, 0x40, 0x0f, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0xf0, 0x90, 0xfc, 0x90, 0xf0,
++ 0x80, 0xfc, 0x20, 0xe0, 0xd0, 0x08, 0x00, 0x00,
++ 0x14, 0x14, 0x1f, 0x24, 0x44, 0x7f, 0x04, 0x3f,
++ 0x25, 0x25, 0x25, 0x26, 0x24, 0x04, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0xc8, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x3e, 0x09, 0x7f, 0x15, 0x2b, 0x7e, 0x08,
++ 0x7f, 0x01, 0x3f, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0xd0, 0x50, 0x70, 0x94,
++ 0x0c, 0x00, 0xf0, 0x10, 0x10, 0xe0, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x26, 0x26, 0x24,
++ 0x79, 0x48, 0x0c, 0x14, 0x23, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x10, 0x24, 0x45, 0x09, 0x09, 0x19,
++ 0x29, 0x49, 0x09, 0x09, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x78, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x13, 0x3a, 0x34, 0x34, 0x53,
++ 0x10, 0x10, 0x10, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40, 0xf8,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x1e, 0x12,
++ 0x12, 0x12, 0x12, 0x2c, 0x21, 0x40, 0x00, 0x00,
++ 0x90, 0x88, 0x88, 0xfc, 0x80, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x64, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x08, 0x29, 0x2f, 0x2a, 0x28,
++ 0x28, 0x28, 0x2e, 0x38, 0x63, 0x0c, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x2a, 0x3f, 0x1c, 0x2a, 0x49,
++ 0x3f, 0x01, 0x09, 0x09, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xc8, 0x28, 0x30, 0xc8, 0x04,
++ 0xf8, 0x00, 0xe0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x09, 0x09,
++ 0x1f, 0x21, 0x0f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0x00,
++ 0xf8, 0x00, 0xe0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x49, 0x48, 0x4f, 0x78, 0x49,
++ 0x49, 0x49, 0x79, 0x49, 0x41, 0x01, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x10, 0x1b, 0x34, 0x35,
++ 0x30, 0x57, 0x50, 0x11, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0x40, 0xfc, 0x90, 0xd0, 0x70, 0x88, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7c, 0x10, 0x13, 0x3a, 0x36,
++ 0x36, 0x53, 0x53, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8,
++ 0xb8, 0x38, 0x18, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x01, 0x11, 0x11, 0x11,
++ 0x11, 0x11, 0x11, 0x11, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x47, 0x20, 0x2f, 0x00, 0x03,
++ 0x12, 0x13, 0x22, 0x23, 0x42, 0x42, 0x00, 0x00,
++ 0x80, 0xf8, 0x80, 0xf0, 0x80, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x28, 0x28, 0x3f, 0x29, 0x2a, 0x48,
++ 0x0d, 0x78, 0x08, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa0, 0xfc, 0x20, 0x20, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x09, 0x1f, 0x11, 0x21, 0x41,
++ 0x1f, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x1e, 0x12, 0x22, 0x4c,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x90, 0x88, 0xfc, 0x90, 0x90, 0x60, 0x64, 0x9c,
++ 0xf4, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x4b, 0x2a, 0x2c, 0x08, 0x7f, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x1e, 0x1e, 0x13, 0x7e, 0x02,
++ 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x78, 0x48, 0x48, 0x78, 0x48, 0x00,
++ 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x3f, 0x00, 0x1f, 0x11,
++ 0x11, 0x1f, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf8, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x14, 0x1f, 0x24, 0x7f, 0x3f, 0x24, 0x27, 0x01,
++ 0x7f, 0x03, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0xc8, 0xc8, 0xc8, 0x18, 0x00,
++ 0xfc, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x04, 0x04, 0x3f, 0x24, 0x24,
++ 0x28, 0x28, 0x30, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0x80, 0xf8, 0x88, 0x88,
++ 0x98, 0x98, 0x78, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x26, 0x3e, 0x24, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0x28, 0xe8, 0x68,
++ 0x50, 0x50, 0x54, 0xec, 0x4c, 0x84, 0x00, 0x00,
++ 0x08, 0x7e, 0x08, 0x0e, 0x78, 0x19, 0x07, 0x7f,
++ 0x07, 0x07, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0xfc, 0x90, 0x10, 0xc0, 0xfc,
++ 0xc0, 0xc0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x00, 0x3f, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x98, 0x00, 0x00,
++ 0x02, 0x22, 0x12, 0x1f, 0x02, 0x02, 0x03, 0x7e,
++ 0x12, 0x12, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x08, 0x10, 0x60, 0xc0, 0x7c, 0x50, 0xd0, 0x50,
++ 0x90, 0x90, 0x10, 0x10, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x78, 0x48, 0x78, 0x50, 0x7c,
++ 0x90, 0x78, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x09, 0x7f, 0x00, 0x3f,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x26, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x90, 0x20, 0xf8, 0x28, 0xfc,
++ 0x28, 0xf8, 0x28, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x04, 0x02, 0x03, 0x0c, 0x78,
++ 0x0f, 0x08, 0x0f, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x80, 0x80, 0x60, 0x3c,
++ 0xe0, 0x20, 0xe0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x03, 0x04, 0x38, 0x09, 0x09, 0x7f, 0x09, 0x1d,
++ 0x1a, 0x2a, 0x48, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xf8, 0x08, 0x08, 0xf8, 0x68,
++ 0x60, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x27, 0x3d, 0x25, 0x25,
++ 0x3d, 0x25, 0x25, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x40, 0x78, 0x90, 0x20, 0xfc, 0x00, 0x78, 0x48,
++ 0x48, 0x70, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x0f, 0x18, 0x1f, 0x28, 0x4f, 0x08, 0x0f,
++ 0x08, 0x3f, 0x02, 0x01, 0x07, 0x38, 0x00, 0x00,
++ 0x40, 0xf8, 0x80, 0xf0, 0x80, 0xf0, 0x80, 0xfc,
++ 0x00, 0xf0, 0x60, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x1f, 0x12, 0x13, 0x10,
++ 0x17, 0x14, 0x24, 0x24, 0x44, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0xfc, 0x20, 0xe0, 0x80,
++ 0xf8, 0x88, 0x88, 0x88, 0xb0, 0x80, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x1b, 0x34, 0x34, 0x37, 0x50,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0xfc, 0x90, 0x90, 0xfc, 0x00,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x13, 0x12, 0x1f, 0x12,
++ 0x17, 0x16, 0x2a, 0x32, 0x42, 0x06, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xc8, 0x48, 0xc8, 0x28,
++ 0x30, 0xb0, 0xb4, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x08,
++ 0x09, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00,
++ 0x10, 0x60, 0x80, 0x00, 0x00, 0xfc, 0x40, 0x40,
++ 0xc0, 0x70, 0x48, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x04, 0x7f, 0x00, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0xe0,
++ 0x20, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x08, 0x18, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x49, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x02, 0x02, 0x04, 0x07, 0x0c,
++ 0x0c, 0x14, 0x24, 0x44, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x1b, 0x70, 0x13, 0x10, 0x7f, 0x11, 0x19,
++ 0x35, 0x35, 0x51, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0xf8, 0x08,
++ 0xf8, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x08, 0x7f, 0x08, 0x3f,
++ 0x08, 0x7f, 0x1c, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x50, 0x50, 0xfc, 0x50, 0xfc,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x00, 0x00,
++ 0x08, 0x09, 0x0a, 0x72, 0x14, 0x0f, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x0b, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0xf8, 0x88,
++ 0xf8, 0xf8, 0x88, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x01, 0x39, 0x01, 0x3a, 0x02, 0x04, 0x1f, 0x68,
++ 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x38, 0x00, 0xb8, 0x40, 0x20, 0xf0, 0x2c,
++ 0xe0, 0x20, 0xe0, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x0f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x02, 0x12,
++ 0x12, 0x22, 0x44, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x40, 0x50,
++ 0x48, 0x44, 0x44, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x23, 0x3e, 0x08, 0x28, 0x2e,
++ 0x29, 0x2a, 0x2e, 0x38, 0x61, 0x02, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x50, 0x50, 0xd8, 0xd8,
++ 0x54, 0x54, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3d, 0x24, 0x24, 0x3c, 0x2b, 0x08, 0x2e,
++ 0x28, 0x28, 0x28, 0x2e, 0x38, 0x63, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0xf8, 0x88,
++ 0xf8, 0xf8, 0x88, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x10, 0x11, 0x3d, 0x25, 0x65,
++ 0x25, 0x25, 0x3d, 0x20, 0x23, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x13, 0x1c, 0x70, 0x10, 0x10,
++ 0x12, 0x12, 0x0e, 0x01, 0x06, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x12, 0x7e, 0x12, 0x13, 0x12, 0x10,
++ 0x1a, 0x72, 0x12, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x40, 0x40, 0x48, 0x48, 0x48, 0xf8, 0x48, 0x40,
++ 0x48, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7d, 0x10, 0x17, 0x10, 0x17,
++ 0x18, 0x70, 0x11, 0x10, 0x10, 0x37, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0x40, 0xfc,
++ 0x90, 0x90, 0xe0, 0x30, 0xc8, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x1f,
++ 0x71, 0x10, 0x10, 0x10, 0x13, 0x3c, 0x00, 0x00,
++ 0x00, 0xfc, 0x90, 0xf0, 0x90, 0xf0, 0x9c, 0xf0,
++ 0x18, 0xb0, 0x00, 0xa0, 0x18, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x11, 0x11, 0x1d,
++ 0x71, 0x12, 0x12, 0x14, 0x18, 0x30, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3d, 0x02, 0x3d,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x23, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x94, 0x94, 0x0c, 0x00, 0xf8,
++ 0x88, 0x90, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x44, 0x08, 0x10, 0x13,
++ 0x1c, 0x70, 0x10, 0x12, 0x0f, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x88, 0x78, 0x00, 0xf8,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x1e, 0x12, 0x1e,
++ 0x12, 0x1e, 0x14, 0x12, 0x1d, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x78, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x3c, 0x00, 0x7f, 0x01, 0x3d, 0x01, 0x3d,
++ 0x00, 0x3c, 0x24, 0x24, 0x3d, 0x26, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xf8, 0x08, 0x08, 0xf8, 0x68,
++ 0x60, 0x60, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x01,
++ 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x70, 0x70, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x15, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x90, 0x20, 0xf8, 0xa8, 0xa8,
++ 0xf8, 0x88, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x01, 0x01, 0x7f, 0x01, 0x01,
++ 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0xe0, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0c, 0x0b, 0x0e, 0x70, 0x00, 0x00, 0x00,
++ 0x44, 0x24, 0xa8, 0x90, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x12, 0x12, 0x32, 0x52, 0x12,
++ 0x12, 0x12, 0x12, 0x13, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x0f, 0x11, 0x21, 0x7f, 0x02,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x01, 0x01, 0x01, 0x7f, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x02, 0x3f,
++ 0x20, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x5f, 0x00, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xf0, 0x00, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x00, 0x7f, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x01, 0x01, 0x09, 0x09, 0x11, 0x21, 0x03, 0x01,
++ 0x7f, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0xfc, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x08, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x11, 0x49, 0x2a, 0x24, 0x3e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0x7c, 0xc0, 0x48, 0x48,
++ 0x50, 0x30, 0x24, 0xd4, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f,
++ 0x19, 0x15, 0x27, 0x39, 0x41, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0x48, 0x28, 0x38, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x14, 0x14, 0x13, 0x19,
++ 0x77, 0x11, 0x1f, 0x11, 0x16, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x40, 0xc8, 0xb8, 0x20,
++ 0xf8, 0x20, 0xfc, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x09, 0x1e, 0x1b, 0x1a,
++ 0x28, 0x2b, 0x48, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0x08, 0xfc, 0x40,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x0a, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x2b, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x00, 0xf8, 0xa8, 0xa8,
++ 0xa8, 0xfc, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x01,
++ 0x3f, 0x03, 0x05, 0x19, 0x61, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x08,
++ 0x90, 0xe0, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x20, 0x23, 0x00, 0x17,
++ 0x10, 0x10, 0x20, 0x21, 0x46, 0x40, 0x00, 0x00,
++ 0x90, 0x88, 0xf8, 0x80, 0xf0, 0x80, 0xf8, 0x90,
++ 0x50, 0x60, 0x64, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x41, 0x22, 0x24, 0x07, 0x10,
++ 0x10, 0x11, 0x21, 0x22, 0x44, 0x48, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0xa0,
++ 0xa0, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x48, 0x2b, 0x20, 0x08, 0x11, 0x22, 0x41,
++ 0x3f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x80, 0x80, 0xe0, 0xa0, 0xa4, 0x24, 0x1c, 0x00,
++ 0xf8, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x11, 0x09, 0x0f, 0x41, 0x2f, 0x23, 0x02, 0x14,
++ 0x1b, 0x12, 0x23, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0xfc, 0x30, 0xd0, 0x88,
++ 0xf4, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x04, 0x7f, 0x00, 0x3e, 0x22, 0x3e, 0x3e,
++ 0x22, 0x26, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x20, 0x40, 0xfc, 0x00, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x18, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x13, 0x16, 0x37, 0x3a, 0x53,
++ 0x12, 0x1b, 0x16, 0x23, 0x24, 0x48, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0x48, 0x68, 0xd8, 0x68, 0x48, 0xd8, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x11, 0x11, 0x1e, 0x14,
++ 0x14, 0x14, 0x24, 0x24, 0x45, 0x1a, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x00, 0xfc, 0x28, 0xb0,
++ 0xa0, 0xbc, 0xa0, 0xa0, 0x60, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x48, 0x10, 0x0f, 0x08,
++ 0x08, 0x7f, 0x03, 0x0c, 0x70, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x88, 0x78, 0xf0, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x4d, 0x04, 0x7f, 0x00, 0x3e,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x26, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x30, 0x40, 0xfc, 0x00, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7f,
++ 0x0d, 0x2a, 0x2a, 0x29, 0x4a, 0x08, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x20,
++ 0xe4, 0x78, 0xb0, 0x28, 0x24, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x64, 0x18, 0x1b, 0x25, 0x7d,
++ 0x13, 0x3b, 0x35, 0x31, 0x56, 0x10, 0x00, 0x00,
++ 0x90, 0x98, 0xf4, 0x94, 0x90, 0xfc, 0x50, 0x74,
++ 0x74, 0x58, 0x78, 0x94, 0x2c, 0x44, 0x00, 0x00,
++ 0x04, 0x3f, 0x01, 0x0f, 0x01, 0x7f, 0x10, 0x08,
++ 0x41, 0x22, 0x0c, 0x10, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x80, 0x80,
++ 0xfc, 0x48, 0x50, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x24,
++ 0x3d, 0x24, 0x24, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x20,
++ 0xe4, 0x78, 0xb0, 0x28, 0x24, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0e, 0x12, 0x12, 0x32, 0x4a,
++ 0x05, 0x04, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x90, 0x90, 0x90, 0x90,
++ 0xfc, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x12, 0x1a, 0x16, 0x17, 0x1e,
++ 0x72, 0x1a, 0x1a, 0x2a, 0x22, 0x46, 0x00, 0x00,
++ 0x70, 0x10, 0x50, 0x50, 0x88, 0x88, 0x04, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x1f, 0x12, 0x1f, 0x12, 0x1f,
++ 0x13, 0x12, 0x23, 0x2a, 0x49, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8,
++ 0xfc, 0x00, 0xfc, 0xa4, 0x54, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3e, 0x03, 0x3c,
++ 0x00, 0x3d, 0x24, 0x24, 0x3f, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0x08, 0xfc, 0x40,
++ 0x40, 0xf0, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x3c, 0x27, 0x3c, 0x27,
++ 0x24, 0x3c, 0x18, 0x14, 0x27, 0x40, 0x00, 0x00,
++ 0x50, 0x48, 0x7c, 0xc0, 0x78, 0xc0, 0x7c, 0xc8,
++ 0x48, 0x30, 0x24, 0xd4, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x23, 0x3e, 0x09, 0x28, 0x2f,
++ 0x28, 0x28, 0x2e, 0x38, 0x61, 0x06, 0x00, 0x00,
++ 0x50, 0x48, 0x78, 0xc0, 0x78, 0xc0, 0x7c, 0xc8,
++ 0x48, 0x30, 0x24, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x27, 0x10, 0x17, 0x04, 0x03, 0x71, 0x17,
++ 0x11, 0x1f, 0x10, 0x1b, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x44, 0xfc, 0x20, 0xf8,
++ 0x20, 0xfc, 0xa0, 0x18, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x27, 0x10, 0x13, 0x02, 0x03, 0x70, 0x1f,
++ 0x13, 0x1c, 0x11, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0x80, 0xfc,
++ 0xf0, 0x28, 0xe4, 0x10, 0xf0, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x13, 0x22, 0x5d, 0x08, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x73, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x40, 0xfc,
++ 0x48, 0x28, 0x30, 0x34, 0xcc, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x09, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0xa0, 0xf8, 0xa0, 0x20, 0xfc,
++ 0x50, 0x50, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x21,
++ 0x22, 0x22, 0x24, 0x28, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x08,
++ 0x88, 0x88, 0x48, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x05, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x7f, 0x00, 0x3e, 0x22, 0x22,
++ 0x3e, 0x22, 0x3e, 0x22, 0x22, 0x26, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xfc, 0x00, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x3f, 0x09,
++ 0x7f, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xf8, 0x20,
++ 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x42, 0x2f, 0x2a, 0x0f, 0x0a,
++ 0x1f, 0x12, 0x3f, 0x22, 0x42, 0x42, 0x00, 0x00,
++ 0x08, 0x08, 0xd0, 0x20, 0xa0, 0xbc, 0xa8, 0xa8,
++ 0xa8, 0x28, 0xe8, 0x48, 0x48, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x19, 0x15, 0x32, 0x4a, 0x0c,
++ 0x19, 0x60, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0x60, 0x50, 0x90,
++ 0x08, 0x04, 0x90, 0x48, 0x44, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x18, 0x60, 0x1f, 0x01,
++ 0x01, 0x0f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0x0c, 0xf0, 0x00,
++ 0x00, 0xe0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x7d, 0x0b, 0x0a, 0x13, 0x1a,
++ 0x37, 0x54, 0x17, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0x20, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x09, 0x0a, 0x72, 0x14, 0x0f, 0x12, 0x7e,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x88, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0xa8, 0x70,
++ 0xfc, 0x00, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x01, 0x3c, 0x27, 0x24, 0x25, 0x3c, 0x27, 0x25,
++ 0x3f, 0x24, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x50,
++ 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x57, 0x36, 0x3a, 0x12, 0x7e, 0x12, 0x1a,
++ 0x36, 0x36, 0x52, 0x14, 0x17, 0x18, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x00, 0x7b, 0x4a, 0x4b, 0x4a, 0x4b, 0x48,
++ 0x49, 0x79, 0x49, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x22, 0x14, 0x7f, 0x2a, 0x2a, 0x3e, 0x2a, 0x09,
++ 0x11, 0x2f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x08,
++ 0x18, 0xe0, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x7d, 0x45, 0x41, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x7d, 0x11, 0x17, 0x10, 0x1f,
++ 0x72, 0x13, 0x12, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x04, 0x18, 0x7f, 0x15, 0x13, 0x1f, 0x10,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0xc0, 0x20, 0x10, 0xfc, 0x50, 0x90, 0xf0, 0x10,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x04, 0x3f, 0x21, 0x3f, 0x21, 0x3f, 0x20,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x0e, 0x15, 0x65, 0x04, 0x7f,
++ 0x01, 0x11, 0x11, 0x19, 0x27, 0x41, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x60, 0xb0, 0x2c, 0x20, 0xf8,
++ 0x10, 0x20, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x04, 0x45, 0x29, 0x11, 0x31, 0x49, 0x09, 0x19,
++ 0x19, 0x29, 0x49, 0x09, 0x0f, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7e, 0x03, 0x0c, 0x08, 0x2b, 0x28, 0x2d,
++ 0x29, 0x29, 0x29, 0x2f, 0x3a, 0x64, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0x98, 0xe4, 0x10, 0x50,
++ 0x50, 0x50, 0x50, 0x54, 0x54, 0x0c, 0x00, 0x00,
++ 0x00, 0x7e, 0x07, 0x08, 0x0b, 0x2a, 0x2e, 0x2b,
++ 0x28, 0x28, 0x29, 0x2e, 0x38, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0xe0, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x01, 0x7d, 0x17, 0x11, 0x13, 0x3b, 0x2d, 0x6b,
++ 0x28, 0x2a, 0x3a, 0x23, 0x24, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xb8, 0x54, 0x10, 0xfc,
++ 0x48, 0x40, 0x78, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x09, 0x11, 0x19,
++ 0x35, 0x57, 0x11, 0x11, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x0c, 0x38, 0x08, 0x08, 0x7f, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x08, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x02, 0x0c,
++ 0x03, 0x7f, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x40, 0xc0,
++ 0x30, 0xc8, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7f,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x4b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x10, 0x1e, 0x24, 0x7e, 0x2b,
++ 0x3e, 0x2a, 0x3e, 0x3b, 0x2d, 0x40, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x18, 0xe0, 0x20, 0x20, 0xfc,
++ 0x70, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x25, 0x25, 0x3e, 0x24, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0xb0, 0x98, 0x14, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x29, 0x29, 0x31, 0x29, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x2f, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x22, 0x13, 0x1f, 0x01, 0x05, 0x05, 0x77,
++ 0x15, 0x11, 0x12, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0xb8, 0x28, 0xe8, 0x38, 0x68, 0x68, 0xf8,
++ 0x28, 0x48, 0x48, 0x98, 0x00, 0xfc, 0x00, 0x00,
++ 0x03, 0x1c, 0x10, 0x1e, 0x10, 0x1f, 0x00, 0x15,
++ 0x13, 0x19, 0x15, 0x15, 0x19, 0x66, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0x50,
++ 0x30, 0x90, 0x54, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x09, 0x08, 0x0b, 0x12, 0x13, 0x32, 0x53, 0x10,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x06, 0x09, 0x14, 0x3f, 0x51, 0x1f, 0x11,
++ 0x1f, 0x10, 0x3f, 0x31, 0x5f, 0x11, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0xc8, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x02, 0x22, 0x12, 0x0c, 0x04,
++ 0x04, 0x0a, 0x0a, 0x10, 0x21, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x50, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x12, 0x0a, 0x7f, 0x04, 0x3f, 0x1f, 0x01, 0x7f,
++ 0x12, 0x1f, 0x1e, 0x12, 0x7e, 0x03, 0x00, 0x00,
++ 0x90, 0xa0, 0xfc, 0x40, 0xf8, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x1f, 0x60, 0x0f, 0x08, 0x0f,
++ 0x0f, 0x08, 0x1f, 0x18, 0x2f, 0x08, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0xf0, 0x0c, 0xe0, 0x20, 0xe0,
++ 0xe0, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x3d, 0x25, 0x3d, 0x25, 0x01,
++ 0x7f, 0x08, 0x08, 0x08, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x78, 0x48, 0x78, 0x48, 0x00,
++ 0xfc, 0x90, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x48, 0x28, 0x2f, 0x08, 0x08,
++ 0x18, 0x18, 0x28, 0x48, 0x0b, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x1f, 0x02, 0x7f, 0x04,
++ 0x1f, 0x61, 0x1f, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x80, 0xfc, 0xc0,
++ 0x30, 0x0c, 0xf0, 0x80, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x05, 0x35, 0x09, 0x1d, 0x65,
++ 0x19, 0x15, 0x66, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x68, 0x10, 0x68, 0xc8,
++ 0x30, 0xa8, 0xc8, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x41, 0x01, 0x7f, 0x03,
++ 0x05, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0x00, 0xfc, 0x80,
++ 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x12, 0x17, 0x17, 0x14,
++ 0x17, 0x13, 0x23, 0x22, 0x43, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x20, 0xf8, 0xf8, 0x88,
++ 0xf8, 0xf0, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x27, 0x24, 0x24, 0x24,
++ 0x24, 0x24, 0x24, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf0, 0x90, 0x90, 0x90,
++ 0x90, 0x90, 0xe0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x09, 0x29, 0x3f, 0x2a, 0x4c, 0x19, 0x6a, 0x08,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0xa8, 0xa8, 0x28, 0x48, 0xb0,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x08, 0x1c, 0x1a, 0x2a, 0x48,
++ 0x09, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x13, 0x12, 0x13, 0x10,
++ 0x1f, 0x71, 0x10, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x40,
++ 0xf8, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x7d, 0x10, 0x11, 0x10, 0x1f,
++ 0x74, 0x13, 0x12, 0x12, 0x12, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x48, 0xf8, 0x48, 0x48, 0x70, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x17, 0x10, 0x13, 0x1e,
++ 0x73, 0x12, 0x13, 0x12, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0xfc, 0x40, 0xf8, 0x48,
++ 0xf8, 0x48, 0xf8, 0x48, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x17, 0x10, 0x1f,
++ 0x72, 0x13, 0x12, 0x10, 0x10, 0x37, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x60, 0xf0, 0x4c, 0x40, 0xf8,
++ 0x48, 0xf8, 0x48, 0x50, 0x78, 0x84, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x10, 0x17, 0x14, 0x1f,
++ 0x70, 0x17, 0x10, 0x11, 0x16, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xbc, 0xa4, 0xbc,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x1f, 0x11,
++ 0x01, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x10,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x24, 0x3f, 0x24, 0x3f,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x12, 0x09, 0x09, 0x1f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x12, 0x15, 0x39, 0x35,
++ 0x35, 0x51, 0x53, 0x15, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xf0, 0x08, 0xf4, 0x10, 0xf0,
++ 0xf0, 0x00, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x12, 0x13, 0x3a, 0x37,
++ 0x35, 0x51, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x43, 0x22, 0x23, 0x02, 0x0b,
++ 0x09, 0x09, 0x11, 0x11, 0x21, 0x21, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x15, 0x34, 0x3b, 0x32, 0x53,
++ 0x10, 0x17, 0x18, 0x25, 0x26, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xb8, 0xa8, 0xb8,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x01, 0x03, 0x0c, 0x30, 0x1f, 0x01, 0x7f, 0x01,
++ 0x01, 0x1f, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x80, 0xf0, 0x10, 0xfc, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x4b, 0x2a, 0x2b, 0x0a, 0x1b,
++ 0x28, 0x4b, 0x10, 0x10, 0x21, 0x4e, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x40, 0xf8, 0x90, 0x60, 0xb0, 0x0c, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x45, 0x09, 0x12, 0x0f,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0x38, 0x40, 0x30, 0xc8,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x57, 0x34, 0x3b, 0x12, 0x7f, 0x12, 0x3b,
++ 0x35, 0x55, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x15, 0x0c, 0x12, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x29, 0x4a, 0x08, 0x00, 0x00,
++ 0x30, 0x90, 0x90, 0xa8, 0x24, 0x50, 0xf8, 0x48,
++ 0x20, 0xe8, 0xc4, 0x54, 0x50, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x15, 0x0c, 0x12, 0x7f,
++ 0x0c, 0x2a, 0x2a, 0x29, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x00, 0xf8, 0x00, 0xfc,
++ 0x20, 0xa8, 0xa4, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x7e, 0x24, 0x25, 0x3e, 0x24, 0x25, 0x3c,
++ 0x24, 0x25, 0x3d, 0x66, 0x04, 0x04, 0x00, 0x00,
++ 0x70, 0x90, 0x90, 0x48, 0x64, 0x90, 0xf8, 0x48,
++ 0xa0, 0xa8, 0x84, 0x94, 0x90, 0x70, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x10, 0x1f, 0x10,
++ 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x48, 0x28, 0x2f,
++ 0x08, 0x18, 0x28, 0x48, 0x0b, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x7f, 0x08, 0x1f, 0x72, 0x0c,
++ 0x74, 0x04, 0x7f, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0x80, 0x98, 0xe0, 0x84,
++ 0x7c, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x7f, 0x09, 0x02, 0x0f, 0x7f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x17, 0x14, 0x27, 0x44, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0x80, 0xe0, 0xfc, 0x20, 0xe0,
++ 0x20, 0xe0, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x11, 0x09, 0x49, 0x23, 0x22,
++ 0x0b, 0x08, 0x17, 0x11, 0x26, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0xb8, 0xa8,
++ 0xf8, 0x40, 0xfc, 0xf0, 0x4c, 0x40, 0x00, 0x00,
++ 0x04, 0x24, 0x17, 0x04, 0x1c, 0x65, 0x05, 0x01,
++ 0x7f, 0x04, 0x1c, 0x64, 0x07, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x00, 0x00,
++ 0xfc, 0x90, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x01, 0x7f, 0x01, 0x09,
++ 0x09, 0x09, 0x09, 0x15, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0xf8, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x02, 0x21, 0x11, 0x17, 0x00, 0x00, 0x7f, 0x10,
++ 0x11, 0x11, 0x12, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xf8, 0x80, 0x80, 0xfc, 0xc0,
++ 0x20, 0x10, 0x08, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x27, 0x13, 0x12, 0x03, 0x02, 0x73, 0x11,
++ 0x11, 0x11, 0x11, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0xa0, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1d, 0x19, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0xf8, 0x04, 0xf8, 0x88, 0xf8,
++ 0xf8, 0x80, 0xfc, 0x84, 0xfc, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x3d, 0x5d, 0x00, 0x08,
++ 0x7f, 0x1c, 0x1a, 0x29, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x78, 0x70, 0x00, 0xf8,
++ 0x88, 0xf8, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3f, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x70, 0xac, 0x20, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0x28, 0x3c, 0xc4, 0x00, 0x00,
++ 0x08, 0x09, 0x0e, 0x13, 0x12, 0x33, 0x50, 0x11,
++ 0x16, 0x11, 0x16, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0xf8, 0x48, 0xf8, 0x40, 0x88,
++ 0xd0, 0x60, 0xb0, 0x28, 0x24, 0xc0, 0x00, 0x00,
++ 0x01, 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x10,
++ 0x15, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x11, 0x10, 0x13, 0x1a, 0x37, 0x36, 0x33, 0x50,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x29, 0x28, 0x3b, 0x2a, 0x2b, 0x3b,
++ 0x2b, 0x2b, 0x2b, 0x2b, 0x2d, 0x58, 0x00, 0x00,
++ 0x20, 0xfc, 0x28, 0x24, 0xfc, 0x20, 0xe8, 0xa8,
++ 0xe8, 0x50, 0xd4, 0x9c, 0xec, 0x44, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x00, 0x1f, 0x10, 0x1f, 0x19,
++ 0x1f, 0x18, 0x1f, 0x29, 0x2f, 0x48, 0x00, 0x00,
++ 0x40, 0xfc, 0x50, 0x48, 0xfc, 0x40, 0xc8, 0x28,
++ 0xa8, 0xb0, 0x90, 0x34, 0xcc, 0x84, 0x00, 0x00,
++ 0x01, 0x3c, 0x25, 0x25, 0x3d, 0x25, 0x3d, 0x24,
++ 0x25, 0x3d, 0x19, 0x15, 0x25, 0x41, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x22, 0x12, 0x13, 0x04, 0x0f, 0x70, 0x13,
++ 0x12, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0xf0,
++ 0x10, 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x32, 0x50, 0x12,
++ 0x12, 0x12, 0x12, 0x13, 0x14, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x48, 0x40, 0x40,
++ 0x78, 0x40, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x08, 0x0f, 0x0c, 0x14, 0x17, 0x34, 0x54, 0x17,
++ 0x14, 0x14, 0x17, 0x13, 0x14, 0x18, 0x00, 0x00,
++ 0x08, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x08, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x3e, 0x22,
++ 0x22, 0x3e, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x22, 0x3e,
++ 0x28, 0x24, 0x26, 0x3a, 0x62, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20,
++ 0xe0, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x13, 0x10, 0x16,
++ 0x1a, 0x72, 0x12, 0x13, 0x14, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x40, 0x40,
++ 0x78, 0x40, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x11, 0x1f,
++ 0x13, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0x10, 0xf0,
++ 0x90, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00, 0x00,
++ 0x20, 0x17, 0x14, 0x44, 0x27, 0x24, 0x07, 0x14,
++ 0x14, 0x17, 0x23, 0x22, 0x44, 0x48, 0x00, 0x00,
++ 0x08, 0x88, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0x08, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x11, 0x01, 0x11,
++ 0x11, 0x11, 0x19, 0x15, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0xf0, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x20, 0x17, 0x10, 0x03, 0x02, 0x72, 0x13,
++ 0x10, 0x11, 0x16, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0xe0, 0x50, 0x4c, 0x40, 0x00, 0xfc, 0x00, 0x00,
++ 0x09, 0x09, 0x0a, 0x14, 0x10, 0x31, 0x51, 0x12,
++ 0x17, 0x1a, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x20, 0x10, 0x08, 0x88, 0x80, 0x40, 0x20, 0x10,
++ 0xf8, 0x14, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x17, 0x14,
++ 0x17, 0x1f, 0x18, 0x2f, 0x28, 0x48, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x78, 0x80, 0xf0, 0x90,
++ 0xf0, 0xf8, 0xa8, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x3c, 0x24, 0x3c, 0x27,
++ 0x24, 0x3c, 0x18, 0x14, 0x24, 0x40, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0xa8, 0xa8, 0xe8,
++ 0x90, 0x90, 0xb4, 0xac, 0xcc, 0x84, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x12, 0x10, 0x1d, 0x16,
++ 0x17, 0x14, 0x24, 0x24, 0x45, 0x1a, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x80, 0xf8, 0x20, 0x20,
++ 0xfc, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x72, 0x14, 0x0c, 0x13, 0x7f,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x48, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x00, 0xfc, 0x08,
++ 0x50, 0x50, 0x50, 0x94, 0x94, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x08, 0x08, 0x0c, 0x12, 0x23,
++ 0x01, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x40, 0x60, 0x90, 0x10,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x09, 0x0b, 0x13, 0x3d,
++ 0x55, 0x13, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x07, 0x04, 0x07, 0x04,
++ 0x04, 0x7f, 0x00, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xc0, 0x40, 0xc0, 0x40,
++ 0x40, 0xfc, 0x00, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x12, 0x11, 0x11, 0x7f, 0x10, 0x17, 0x14, 0x17,
++ 0x1c, 0x77, 0x14, 0x14, 0x14, 0x35, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x00, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x7f, 0x04, 0x05, 0x08, 0x18,
++ 0x28, 0x4f, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0xf8, 0x10, 0x20,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x7c, 0x07, 0x08, 0x0b, 0x10, 0x10, 0x1b,
++ 0x70, 0x11, 0x11, 0x12, 0x14, 0x30, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x50, 0x90, 0xa0, 0x48, 0xf4,
++ 0x44, 0x50, 0x48, 0x44, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x04, 0x7f, 0x02, 0x1f, 0x12, 0x14, 0x1f,
++ 0x1f, 0x00, 0x7f, 0x08, 0x04, 0x00, 0x00, 0x00,
++ 0x20, 0x40, 0xfc, 0x80, 0xf0, 0xd0, 0x50, 0xf0,
++ 0xf0, 0x40, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x10, 0x13, 0x12, 0x1f,
++ 0x72, 0x13, 0x12, 0x13, 0x11, 0x36, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x18, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x90, 0x50,
++ 0x50, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x2f, 0x11, 0x12, 0x02, 0x03, 0x0e, 0x72,
++ 0x12, 0x12, 0x13, 0x1e, 0x26, 0x41, 0x00, 0x00,
++ 0x0c, 0xf0, 0x28, 0x48, 0xd0, 0x30, 0x48, 0xfc,
++ 0xa8, 0xa4, 0x24, 0x20, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x12, 0x12, 0x33, 0x5e, 0x12,
++ 0x12, 0x12, 0x12, 0x12, 0x12, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x48, 0x78, 0xc8, 0x48, 0x48,
++ 0x48, 0x58, 0x40, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x02, 0x03, 0x04, 0x0a, 0x31, 0x01, 0x06, 0x38,
++ 0x03, 0x0c, 0x00, 0x00, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x40, 0x80, 0x40, 0x7c, 0x84,
++ 0x88, 0x50, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x01, 0x02, 0x02,
++ 0x04, 0x04, 0x0a, 0x11, 0x21, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x80, 0x80,
++ 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x27, 0x20, 0x00, 0x10,
++ 0x10, 0x11, 0x21, 0x22, 0x44, 0x48, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xc0,
++ 0xa0, 0x20, 0x90, 0x50, 0x48, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x01, 0x3e, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x08, 0x80, 0x80, 0x98,
++ 0xe0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x4b, 0x49, 0x49, 0x4f, 0x49,
++ 0x49, 0x7b, 0x48, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xf8, 0x50, 0x50, 0xfc, 0x50,
++ 0x50, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x48, 0x71, 0x53, 0x4d, 0x49, 0x71,
++ 0x41, 0x41, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8,
++ 0x08, 0x18, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x12, 0x09, 0x08, 0x01, 0x7f,
++ 0x02, 0x04, 0x07, 0x08, 0x03, 0x3c, 0x00, 0x00,
++ 0x18, 0xe8, 0x08, 0x10, 0x20, 0x40, 0x00, 0xfc,
++ 0x20, 0x20, 0x40, 0xc0, 0x30, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x19, 0x36, 0x37, 0x30, 0x51,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0xfc, 0x80, 0xf8, 0x20, 0xfc, 0x00, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x08, 0x08, 0x0e,
++ 0x78, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7f, 0x0a, 0x18, 0x18, 0x1c,
++ 0x2a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x80, 0x80, 0x88, 0x90,
++ 0xe0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x12, 0x1b, 0x16, 0x16, 0x7f,
++ 0x12, 0x1a, 0x1a, 0x2a, 0x22, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x40, 0x40, 0x48, 0x50,
++ 0x60, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7f, 0x09, 0x1b, 0x1c, 0x1b,
++ 0x2b, 0x2b, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x40, 0xfc, 0x80, 0xf8, 0x20, 0xfc, 0x00, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x29, 0x29, 0x32, 0x28, 0x24,
++ 0x24, 0x24, 0x24, 0x38, 0x20, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x08, 0x80, 0x80, 0x98,
++ 0xe0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x29, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x45, 0x1a, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x70,
++ 0x50, 0x50, 0xc8, 0xa8, 0x24, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3f, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x44, 0x24, 0xa8, 0x90, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x10, 0x17, 0x30, 0x50, 0x11,
++ 0x11, 0x12, 0x15, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xe0, 0xe0, 0x50,
++ 0x50, 0x48, 0xf4, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x13, 0x7f, 0x15, 0x11, 0x11,
++ 0x15, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x04, 0x04, 0x24, 0x14,
++ 0x0c, 0x0c, 0x0a, 0x12, 0x20, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x90, 0x50,
++ 0x50, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x10, 0x7f, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x55, 0x55, 0x55, 0x43, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0xfc, 0x08, 0x48, 0x28,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x10, 0x17, 0x30, 0x50, 0x10, 0x11,
++ 0x01, 0x11, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x90, 0x88, 0xfc, 0xc0, 0x40, 0x24, 0x14, 0x0c,
++ 0x00, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x09, 0x09, 0x7f, 0x09, 0x0f, 0x00, 0x3f, 0x21,
++ 0x5f, 0x11, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xe0, 0x00, 0xfc, 0x08,
++ 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x13, 0x24, 0x04, 0x0f, 0x18, 0x28,
++ 0x4f, 0x09, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x02, 0x02, 0x04, 0x7f, 0x00, 0x0f, 0x08, 0x08,
++ 0x0f, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x40, 0x30, 0xe8, 0x04, 0xe0, 0x20, 0x20,
++ 0xe0, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x08, 0x12, 0x7f, 0x3e, 0x22, 0x3e, 0x3e, 0x22,
++ 0x26, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x40, 0x48, 0x70, 0x44, 0x3c, 0x48, 0x70, 0x44,
++ 0x3c, 0x10, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x04, 0x1f, 0x04, 0x7f, 0x1f, 0x15, 0x1f, 0x15,
++ 0x1f, 0x3f, 0x0a, 0x7f, 0x19, 0x60, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0xfc, 0x40, 0x48, 0x48, 0x28,
++ 0x28, 0xb0, 0x14, 0xac, 0x4c, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x08, 0x7f, 0x14, 0x12, 0x22,
++ 0x4f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0xfc, 0x30, 0x50, 0x88,
++ 0xe4, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x0f, 0x02, 0x7f, 0x05,
++ 0x19, 0x6d, 0x03, 0x0d, 0x31, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xe0, 0x80, 0xfc, 0x40,
++ 0x30, 0x6c, 0x80, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x11, 0x09, 0x0f, 0x41, 0x21, 0x20, 0x07, 0x04,
++ 0x1b, 0x12, 0x22, 0x22, 0x42, 0x40, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0xf0, 0x00, 0xfc, 0x48,
++ 0xf8, 0x48, 0x48, 0x48, 0x70, 0x40, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x27, 0x3c,
++ 0x25, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x50, 0x88, 0x9c, 0xe4, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3e, 0x25, 0x25, 0x24, 0x3c, 0x24, 0x27,
++ 0x3d, 0x25, 0x25, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x78, 0x48, 0x78, 0x64,
++ 0x58, 0x50, 0x68, 0x84, 0x80, 0x7c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x02, 0x04, 0x7f,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0x40, 0x30, 0xc8,
++ 0x04, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x02, 0x04, 0x18, 0x6f, 0x08, 0x09, 0x09, 0x7f,
++ 0x03, 0x0c, 0x74, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x90, 0x88, 0x7c, 0xc0, 0x20, 0x14, 0x0c, 0xfc,
++ 0x10, 0x90, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x02, 0x04, 0x1b, 0x68, 0x08, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x90, 0x88, 0xfc, 0x40, 0x34, 0xec, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x23, 0x12, 0x13, 0x02, 0x03, 0x72, 0x12,
++ 0x12, 0x12, 0x1f, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x88, 0x48,
++ 0x30, 0xd0, 0x08, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x23, 0x10, 0x17, 0x00, 0x03, 0x74, 0x12,
++ 0x12, 0x11, 0x16, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0x48, 0x50,
++ 0xe0, 0x50, 0x48, 0xc8, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x3c, 0x24, 0x2b, 0x28, 0x30, 0x2b, 0x24,
++ 0x27, 0x24, 0x38, 0x23, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xfc, 0x40, 0xe8, 0x68, 0xb0,
++ 0x30, 0x70, 0xa8, 0x24, 0x20, 0xc0, 0x00, 0x00,
++ 0x02, 0x04, 0x1f, 0x68, 0x08, 0x1f, 0x11, 0x1f,
++ 0x1f, 0x3f, 0x01, 0x7f, 0x24, 0x42, 0x00, 0x00,
++ 0x90, 0xbc, 0xc0, 0x24, 0x1c, 0xf4, 0x10, 0xf0,
++ 0xf0, 0xf8, 0x00, 0xfc, 0x88, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2f, 0x29, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8, 0xf8, 0x88,
++ 0xf8, 0xd8, 0xf8, 0x58, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x08, 0x08, 0x1f, 0x28, 0x48,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x90, 0x88, 0x88, 0x80, 0xfc, 0x40, 0x40, 0x40,
++ 0x20, 0x20, 0x14, 0x14, 0x0c, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x08, 0x7f, 0x00, 0x00,
++ 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x40, 0x30, 0xc8, 0x04, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x7f, 0x01, 0x02,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x80,
++ 0x80, 0x40, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x29, 0x46, 0x3f, 0x01, 0x3f,
++ 0x21, 0x3f, 0x23, 0x05, 0x19, 0x61, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x20, 0x10, 0xf0, 0x10, 0xf0,
++ 0x00, 0xf8, 0x08, 0x08, 0x30, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x2f,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x78, 0x48, 0x78, 0x00, 0xfc,
++ 0x10, 0x50, 0x5c, 0x50, 0xb0, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x3e, 0x22, 0x3e, 0x00, 0x7f,
++ 0x08, 0x2e, 0x28, 0x38, 0x2d, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x50, 0x88, 0x08, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x15, 0x1f, 0x15, 0x15, 0x13,
++ 0x13, 0x13, 0x23, 0x23, 0x4d, 0x12, 0x00, 0x00,
++ 0x80, 0xfc, 0xa0, 0xfc, 0xf0, 0xf0, 0xfc, 0xe0,
++ 0xe0, 0xe0, 0xf8, 0xf8, 0x48, 0xb0, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x42, 0x21, 0x2f, 0x00, 0x17,
++ 0x14, 0x17, 0x24, 0x27, 0x44, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x20, 0x40, 0xfc, 0x00, 0xf0,
++ 0x90, 0xf0, 0x90, 0xf4, 0x84, 0x7c, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x45, 0x25, 0x3f, 0x00, 0x0f,
++ 0x19, 0x1f, 0x29, 0x2f, 0x49, 0x4b, 0x00, 0x00,
++ 0x40, 0x78, 0xc0, 0x78, 0x08, 0xf8, 0x40, 0x78,
++ 0x40, 0x78, 0x40, 0x78, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x1f, 0x10, 0x1f, 0x10,
++ 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x49, 0x4e, 0x48, 0x49,
++ 0x7e, 0x48, 0x43, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x88, 0xc8, 0x50, 0xe0, 0x20,
++ 0x70, 0xa8, 0x24, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x40, 0x01, 0x1e, 0x02,
++ 0x03, 0x7e, 0x02, 0x02, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x60, 0x80, 0x00, 0x00,
++ 0xfc, 0x00, 0x00, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x08, 0x08, 0x08, 0x0f,
++ 0x18, 0x68, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0x40, 0x7c, 0xc0,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x11, 0x1d,
++ 0x71, 0x11, 0x12, 0x12, 0x14, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x48, 0x40,
++ 0x20, 0x20, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x10, 0x11, 0x13,
++ 0x1d, 0x79, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x80, 0x80, 0xf8, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x22, 0x23, 0x02, 0x12,
++ 0x12, 0x12, 0x24, 0x24, 0x48, 0x50, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x48, 0x40,
++ 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x20, 0x17, 0x10, 0x47, 0x20, 0x27, 0x02, 0x13,
++ 0x16, 0x1b, 0x23, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x20, 0xf8,
++ 0x40, 0xf0, 0xf0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x7c, 0x10, 0x11, 0x16, 0x7c, 0x11,
++ 0x16, 0x10, 0x1b, 0x6c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0xc8, 0x48, 0xf0, 0x20,
++ 0x70, 0xa8, 0x24, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3c, 0x00, 0x3d,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0x40, 0x7c, 0xc0,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x13, 0x22, 0x5c, 0x08, 0x7f,
++ 0x08, 0x2b, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x54, 0xfc, 0x20, 0xf8, 0x20, 0xfc,
++ 0x50, 0xfc, 0x20, 0xf8, 0x20, 0x20, 0x00, 0x00,
++ 0x20, 0x17, 0x15, 0x47, 0x22, 0x23, 0x05, 0x1f,
++ 0x15, 0x17, 0x25, 0x21, 0x4e, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x50, 0xf0, 0x00, 0xf8, 0x08, 0xc8,
++ 0x48, 0xc8, 0x48, 0xe8, 0x28, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3f, 0x00, 0x3c,
++ 0x00, 0x3d, 0x26, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0xd0, 0x40, 0xfc, 0x40, 0x80,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x7f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x78, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xfc, 0x20, 0xe0, 0x20,
++ 0xe0, 0x38, 0xe0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x17, 0x15, 0x15, 0x15,
++ 0x15, 0x15, 0x15, 0x21, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xd0, 0x50, 0x50, 0x50,
++ 0x50, 0x50, 0xd4, 0x0c, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0x24, 0xa4, 0xa8, 0x20, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f,
++ 0x10, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0,
++ 0x10, 0x40, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x44, 0x44, 0x44, 0x44, 0x44,
++ 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0xf0, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x12, 0x33, 0x52, 0x12,
++ 0x12, 0x13, 0x12, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x23, 0x10, 0x17, 0x01, 0x00, 0x77, 0x10,
++ 0x13, 0x10, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xa0, 0xfc, 0x40,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x10, 0x10, 0x1f, 0x12,
++ 0x12, 0x12, 0x22, 0x22, 0x43, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x88,
++ 0x48, 0x50, 0x20, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x02, 0x7f, 0x06, 0x1a, 0x67, 0x0c, 0x17, 0x07,
++ 0x04, 0x07, 0x7f, 0x04, 0x02, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xb0, 0xfc, 0x80, 0xe0, 0xe0,
++ 0x80, 0xf0, 0xfc, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x01, 0x3c, 0x24, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3c, 0x24, 0x24, 0x24, 0x25, 0x4e, 0x00, 0x00,
++ 0x08, 0x88, 0x90, 0xf8, 0x08, 0x08, 0xf8, 0x68,
++ 0x60, 0x60, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3e, 0x02, 0x3e, 0x20, 0x22, 0x1e, 0x04,
++ 0x3f, 0x04, 0x7f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x80, 0x88, 0x78, 0x40,
++ 0xf8, 0x40, 0xfc, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3e, 0x22, 0x3e, 0x24, 0x3f,
++ 0x01, 0x3f, 0x08, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x30, 0x30, 0xc8, 0x04,
++ 0x00, 0xf8, 0x20, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x20, 0x12, 0x12, 0x02, 0x02, 0x72, 0x12,
++ 0x12, 0x13, 0x12, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0xf8, 0x08, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x13, 0x3a, 0x36,
++ 0x37, 0x52, 0x52, 0x14, 0x14, 0x19, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xa8, 0xb8, 0xa8, 0xa8,
++ 0xb8, 0xa8, 0xa8, 0xc8, 0xc8, 0x98, 0x00, 0x00,
++ 0x04, 0x04, 0x08, 0x11, 0x01, 0x02, 0x04, 0x18,
++ 0x6f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x20, 0x10, 0x10, 0x00, 0x80, 0x40, 0x30,
++ 0xec, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x4b, 0x32, 0x12, 0x33, 0x4a, 0x0a, 0x1b,
++ 0x28, 0x4b, 0x08, 0x08, 0x3f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7f, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3b, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0xfc, 0x24, 0xf8, 0xf8, 0x20,
++ 0xf8, 0x08, 0xfc, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x10, 0x17, 0x78, 0x13, 0x1a, 0x37, 0x37,
++ 0x33, 0x50, 0x57, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0xa0, 0xf8, 0xb8, 0x18, 0xf8,
++ 0xf8, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x01, 0x3f, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x21, 0x00, 0x00,
++ 0x90, 0x90, 0xa0, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0a, 0x09, 0x09, 0x08, 0x7f,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x12, 0x09, 0x09, 0x1f, 0x11, 0x1f, 0x11, 0x11,
++ 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xf0, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x49, 0x4b, 0x4a, 0x4b, 0x48,
++ 0x4b, 0x78, 0x4f, 0x40, 0x03, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xf8, 0x48, 0xf8, 0x40,
++ 0xf8, 0x40, 0xfc, 0xa0, 0x18, 0x04, 0x00, 0x00,
++ 0x00, 0x11, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x11,
++ 0x15, 0x19, 0x61, 0x00, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x11, 0x15,
++ 0x19, 0x71, 0x11, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7c, 0x11, 0x12, 0x10, 0x1f,
++ 0x70, 0x11, 0x12, 0x14, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0xa8, 0xa0, 0x24, 0x5c, 0x40, 0xfc,
++ 0xe0, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x08,
++ 0x08, 0x0f, 0x08, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x20,
++ 0x20, 0xe0, 0x20, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x3e, 0x2b, 0x3e, 0x08,
++ 0x3e, 0x08, 0x7f, 0x14, 0x23, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x0a, 0x42, 0x24, 0x21, 0x06, 0x10,
++ 0x12, 0x12, 0x24, 0x21, 0x42, 0x4c, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xd0, 0xa0, 0x18, 0x44, 0x48,
++ 0x48, 0xd0, 0xa0, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x11, 0x0f, 0x09, 0x41, 0x21, 0x21, 0x01, 0x1f,
++ 0x14, 0x14, 0x25, 0x26, 0x47, 0x44, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0xfc,
++ 0xa0, 0xa4, 0x1c, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x1f, 0x00, 0x1f, 0x10, 0x10,
++ 0x14, 0x15, 0x29, 0x22, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0xf0, 0x00, 0xfc, 0x80, 0x88,
++ 0x88, 0x50, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x3f, 0x29, 0x49, 0x09, 0x7f,
++ 0x09, 0x08, 0x14, 0x12, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08,
++ 0x08, 0x90, 0x90, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x12, 0x12, 0x13, 0x7c, 0x0b, 0x48, 0x2b,
++ 0x2a, 0x32, 0x1e, 0x72, 0x02, 0x02, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x40, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x12, 0x09, 0x1f, 0x11,
++ 0x1f, 0x11, 0x1f, 0x01, 0x7f, 0x01, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0x10, 0x20, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x15, 0x0d, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2b, 0x49, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x00, 0xfc, 0x20, 0xa0,
++ 0xb8, 0xa0, 0xa0, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x7e, 0x24, 0x25, 0x3d, 0x26, 0x24, 0x3c,
++ 0x24, 0x26, 0x3c, 0x64, 0x05, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x48, 0x40, 0x40, 0x60,
++ 0x60, 0x60, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x25, 0x3d,
++ 0x25, 0x25, 0x25, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x09, 0x09, 0x1d, 0x23, 0x41, 0x0f,
++ 0x09, 0x09, 0x0f, 0x09, 0x01, 0x3e, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0xe0,
++ 0x20, 0x20, 0xe0, 0x20, 0xf0, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x7d, 0x02, 0x3a, 0x07, 0x39,
++ 0x05, 0x3b, 0x2a, 0x2b, 0x3c, 0x28, 0x00, 0x00,
++ 0x00, 0x0c, 0xf0, 0x10, 0x50, 0x50, 0x5c, 0x50,
++ 0x50, 0x50, 0xfc, 0x00, 0xc0, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x23, 0x5d, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x1b, 0x0d, 0x71, 0x00, 0x00,
++ 0x40, 0xb8, 0x28, 0x28, 0xe8, 0x4c, 0x04, 0xf8,
++ 0x48, 0x28, 0xf0, 0x10, 0x28, 0xc4, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x3f, 0x20, 0x24, 0x22,
++ 0x22, 0x20, 0x20, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x17, 0x13, 0x12, 0x7e, 0x12, 0x13, 0x11,
++ 0x15, 0x19, 0x61, 0x01, 0x00, 0x0f, 0x00, 0x00,
++ 0x40, 0xfc, 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x7a, 0x09, 0x0b, 0x7a, 0x4b, 0x42, 0x7b,
++ 0x48, 0x4f, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x88, 0x48, 0x10, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x04, 0x65, 0x55, 0x56, 0x44, 0x7f, 0x4c,
++ 0x4e, 0x55, 0x65, 0x44, 0x7f, 0x40, 0x00, 0x00,
++ 0x08, 0x10, 0x60, 0x40, 0x40, 0x7c, 0xc8, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x07, 0x7a, 0x49, 0x4b, 0x48, 0x7f, 0x48,
++ 0x49, 0x49, 0x7a, 0x4c, 0x09, 0x16, 0x00, 0x00,
++ 0x1c, 0xe4, 0x48, 0x30, 0xf8, 0x80, 0xfc, 0x80,
++ 0xf0, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x10, 0x17, 0x13, 0x7e, 0x12, 0x12, 0x3b, 0x35,
++ 0x35, 0x51, 0x51, 0x11, 0x10, 0x17, 0x00, 0x00,
++ 0x40, 0xfc, 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00,
++ 0x06, 0x38, 0x20, 0x20, 0x3c, 0x21, 0x22, 0x3d,
++ 0x20, 0x20, 0x3c, 0x60, 0x20, 0x23, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x94, 0x14, 0x0c, 0xf8,
++ 0x88, 0x90, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x1f,
++ 0x01, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf0,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x25, 0x24, 0x3c, 0x27, 0x00, 0x00,
++ 0x20, 0x28, 0xa8, 0xb0, 0x20, 0x50, 0x88, 0x24,
++ 0xa4, 0xa8, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x15, 0x35, 0x55, 0x15,
++ 0x15, 0x15, 0x15, 0x14, 0x17, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x3f, 0x28, 0x48, 0x08, 0x7f,
++ 0x08, 0x0c, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00, 0x00,
++ 0x00, 0x12, 0x12, 0x12, 0x7e, 0x13, 0x16, 0x12,
++ 0x12, 0x16, 0x1a, 0x62, 0x02, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x48, 0x78, 0xc8, 0x48, 0x48,
++ 0x48, 0x70, 0x40, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x7c, 0x04, 0x04, 0x3c, 0x24, 0x23, 0x3c,
++ 0x24, 0x24, 0x04, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa8, 0xb8, 0xe8, 0xa8, 0xa8,
++ 0xa8, 0xb8, 0xa0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x7e, 0x24, 0x24, 0x3c, 0x24, 0x25, 0x3d,
++ 0x25, 0x26, 0x3e, 0x64, 0x04, 0x04, 0x00, 0x00,
++ 0x20, 0x10, 0x10, 0x40, 0x40, 0x40, 0x48, 0x44,
++ 0x44, 0x44, 0x40, 0x48, 0x48, 0x38, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x24, 0x7f, 0x0c, 0x0a, 0x12,
++ 0x2f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x10, 0x0a, 0x0a, 0x42, 0x22, 0x23, 0x0e, 0x02,
++ 0x0a, 0x0a, 0x12, 0x12, 0x22, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x48, 0x78, 0xc8, 0x48, 0x48,
++ 0x48, 0x70, 0x40, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x4a, 0x2a, 0x2b, 0x0d, 0x19,
++ 0x2f, 0x49, 0x11, 0x12, 0x24, 0x48, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x00, 0xf8, 0x28, 0x28,
++ 0xe8, 0x28, 0x28, 0xb8, 0xa8, 0x00, 0x00, 0x00,
++ 0x02, 0x0c, 0x38, 0x09, 0x0b, 0x7f, 0x09, 0x1d,
++ 0x1b, 0x2b, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x90, 0x90, 0xa0, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x00, 0x7f, 0x07, 0x24,
++ 0x27, 0x27, 0x24, 0x27, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x80, 0xfc, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x14, 0x23, 0x7f, 0x0a, 0x08,
++ 0x3e, 0x08, 0x08, 0x0e, 0x71, 0x06, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x56, 0x56, 0x54, 0x7f,
++ 0x50, 0x18, 0x15, 0x1f, 0x62, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x38, 0xe8, 0xa8, 0xa8, 0xa8, 0xe8,
++ 0xa8, 0xa8, 0x68, 0x78, 0x28, 0x00, 0x00, 0x00,
++ 0x00, 0x27, 0x14, 0x17, 0x05, 0x04, 0x77, 0x14,
++ 0x15, 0x14, 0x1b, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x10, 0xa0, 0xf8, 0x40,
++ 0xf0, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3f, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x20, 0xa0, 0xa8, 0xb8, 0xe8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xb8, 0xa0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x7e, 0x08, 0x0e, 0x71,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x10, 0xf0, 0x90, 0xd4, 0x2c,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x1c, 0x05, 0x03, 0x7e,
++ 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0xc0, 0x20, 0xf0, 0x08,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x1f, 0x14, 0x25, 0x44,
++ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x90, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x14, 0x23, 0x42, 0x7f, 0x11,
++ 0x11, 0x11, 0x1e, 0x72, 0x04, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x10, 0xf0, 0x10,
++ 0x90, 0x50, 0x50, 0x14, 0x14, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x7f, 0x02, 0x0c, 0x03, 0x7f,
++ 0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x40, 0xc0, 0x30, 0xc8,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x27, 0x10, 0x11, 0x0e, 0x01, 0x76, 0x10,
++ 0x13, 0x1c, 0x10, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x88, 0xc8, 0x50, 0x60, 0xd0,
++ 0x48, 0x44, 0x44, 0x80, 0x00, 0xfc, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x08, 0x08, 0x7e, 0x09, 0x1d,
++ 0x1a, 0x2a, 0x48, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0xa0, 0xf8, 0xa0, 0x20, 0xfc,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x44, 0x08, 0x3f, 0x02, 0x04,
++ 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x90, 0x70, 0xf8, 0x40, 0x70,
++ 0x88, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x02, 0x04, 0x19, 0x61,
++ 0x1f, 0x01, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x80, 0x40, 0x30, 0x0c,
++ 0xf0, 0x00, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x11, 0x78, 0x2b, 0x2a, 0x2b,
++ 0x2a, 0x7a, 0x5a, 0x16, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0xf8, 0x48, 0xf8,
++ 0x48, 0xe8, 0xa8, 0xe8, 0xa8, 0x18, 0x00, 0x00,
++ 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x0f, 0x0c,
++ 0x17, 0x14, 0x27, 0x44, 0x07, 0x04, 0x00, 0x00,
++ 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x3f, 0x21, 0x21, 0x21, 0x21,
++ 0x3f, 0x21, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08,
++ 0xf8, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x14, 0x34, 0x54, 0x14,
++ 0x17, 0x14, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x44, 0x44, 0x44, 0x44,
++ 0xfc, 0x44, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x41, 0x01, 0x1f, 0x11,
++ 0x11, 0x1f, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x11, 0x11, 0x11, 0x1f, 0x11,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x13, 0x12, 0x12, 0x1e,
++ 0x73, 0x12, 0x12, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x17, 0x14,
++ 0x27, 0x44, 0x07, 0x00, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x90, 0x40, 0xe0, 0x50,
++ 0xc8, 0x44, 0xc0, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x18, 0x1c, 0x1b,
++ 0x2a, 0x28, 0x48, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x80, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x20, 0x20, 0x00, 0x13,
++ 0x10, 0x10, 0x20, 0x20, 0x4f, 0x40, 0x00, 0x00,
++ 0x80, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x11, 0x11, 0x11, 0x1f,
++ 0x11, 0x01, 0x01, 0x01, 0x7e, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0,
++ 0x10, 0x20, 0x10, 0xf8, 0x04, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x1f, 0x11,
++ 0x03, 0x0c, 0x74, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0x08, 0xb0, 0xc0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x00, 0x3c, 0x00, 0x3f,
++ 0x00, 0x3c, 0x24, 0x24, 0x3f, 0x20, 0x00, 0x00,
++ 0x80, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x08, 0x88, 0x08, 0x08, 0xfc, 0x08, 0x48, 0x28,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x09, 0x7e,
++ 0x09, 0x2a, 0x1c, 0x19, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x48,
++ 0xfc, 0x48, 0xa8, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3f, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x43, 0x0c, 0x00, 0x00,
++ 0x40, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20, 0xf8,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x17, 0x13, 0x39, 0x34,
++ 0x37, 0x50, 0x50, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x58, 0x58, 0xf0, 0x00,
++ 0xfc, 0x80, 0xf0, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x20, 0x1f, 0x12, 0x42, 0x26, 0x2a, 0x03, 0x17,
++ 0x1b, 0x22, 0x26, 0x5a, 0x42, 0x4c, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x28, 0xb0, 0xfc, 0x20, 0x78,
++ 0xc8, 0xf8, 0xc8, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x04, 0x44, 0x2b, 0x10, 0x30, 0x4f, 0x08, 0x19,
++ 0x2b, 0x4d, 0x09, 0x09, 0x31, 0x11, 0x00, 0x00,
++ 0x80, 0x88, 0xf8, 0x90, 0xa0, 0xfc, 0x80, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x3f, 0x20, 0x40,
++ 0x7f, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x08, 0x00,
++ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x7f, 0x09, 0x01, 0x1f, 0x01, 0x7f, 0x01,
++ 0x07, 0x1c, 0x67, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0x08, 0xf0, 0x20, 0xfc, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x3e, 0x24, 0x3d, 0x24,
++ 0x24, 0x3c, 0x18, 0x14, 0x24, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x00, 0x00, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x24, 0x14, 0x14, 0x04, 0x06,
++ 0x0c, 0x78, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0x90, 0x90, 0xa0, 0xc0, 0x80, 0xa0,
++ 0x90, 0x90, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x07, 0x44, 0x24, 0x27, 0x04, 0x17, 0x14,
++ 0x25, 0x25, 0x45, 0x49, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xe8, 0x88, 0xf8, 0x08,
++ 0xe8, 0x28, 0xe8, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x49, 0x49, 0x49, 0x49, 0x48,
++ 0x4f, 0x78, 0x49, 0x46, 0x18, 0x00, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x70, 0x00, 0xf8, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x01, 0x3f, 0x28, 0x7f, 0x14, 0x7f, 0x00, 0x3e,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x26, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x78, 0x40, 0x78, 0x08, 0x78,
++ 0x40, 0x78, 0x78, 0x7c, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x54, 0x54, 0x54, 0x55,
++ 0x55, 0x5d, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x40, 0x40, 0x40, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x55, 0x55, 0x55, 0x57,
++ 0x55, 0x5d, 0x51, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xfc,
++ 0x48, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x20, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x00, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x02, 0x3f, 0x22, 0x22, 0x3f,
++ 0x22, 0x22, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0xf8,
++ 0x08, 0x08, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x79, 0x09, 0x09, 0x79, 0x49, 0x41, 0x7f,
++ 0x49, 0x49, 0x09, 0x09, 0x11, 0x66, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xfc,
++ 0x48, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x2e, 0x24, 0x3f, 0x20,
++ 0x2e, 0x2a, 0x2a, 0x2e, 0x2a, 0x41, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xa0, 0xc8, 0x88, 0x90, 0x90,
++ 0xa4, 0x84, 0x88, 0x88, 0x90, 0xa0, 0x00, 0x00,
++ 0x12, 0x1a, 0x2a, 0x4a, 0x1f, 0x10, 0x2f, 0x62,
++ 0x22, 0x2f, 0x22, 0x23, 0x2c, 0x20, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa0, 0xfc, 0x48, 0xc8, 0x28,
++ 0x28, 0xb0, 0x10, 0xb0, 0x48, 0x84, 0x00, 0x00,
++ 0x22, 0x2a, 0x4f, 0x10, 0x3f, 0x52, 0x17, 0x13,
++ 0x1c, 0x01, 0x14, 0x14, 0x24, 0x43, 0x00, 0x00,
++ 0x20, 0xa0, 0xbc, 0x48, 0xa8, 0x28, 0x90, 0xb0,
++ 0x48, 0x04, 0x90, 0x88, 0x24, 0xe4, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7e, 0x11, 0x11, 0x10, 0x1d,
++ 0x72, 0x14, 0x11, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa8, 0xa8, 0xb0, 0xa0, 0xb0, 0xa8,
++ 0xa4, 0xa4, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x55, 0x7d, 0x54, 0x7f,
++ 0x55, 0x53, 0x14, 0x11, 0x12, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0x28, 0x48, 0xb0, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x22, 0x3e, 0x22,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x42, 0x2f, 0x29, 0x0f, 0x19,
++ 0x1f, 0x22, 0x3f, 0x42, 0x42, 0x43, 0x00, 0x00,
++ 0x00, 0x78, 0xc8, 0x48, 0x48, 0x78, 0x48, 0x48,
++ 0x78, 0x48, 0xc8, 0x48, 0x88, 0x18, 0x00, 0x00,
++ 0x29, 0x29, 0x2b, 0x29, 0x3d, 0x21, 0x21, 0x39,
++ 0x28, 0x2f, 0x28, 0x29, 0x2e, 0x48, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x50, 0x70, 0x00, 0xf8,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x24, 0x3f, 0x24, 0x24,
++ 0x24, 0x3f, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0xfc, 0x90, 0x90, 0x90, 0x90, 0x90,
++ 0x90, 0x90, 0x90, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x4a, 0x79, 0x49, 0x48, 0x79,
++ 0x4e, 0x48, 0x79, 0x49, 0x42, 0x04, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa8, 0xa8, 0xb0, 0xa0, 0xb0, 0xa8,
++ 0xa4, 0xa4, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x7c, 0x2b, 0x28, 0x3b, 0x2a, 0x2a, 0x3b,
++ 0x2a, 0x2c, 0x3a, 0x6a, 0x0c, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0x48, 0xa0, 0xa8, 0x84, 0x94, 0x70, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x24, 0x3f,
++ 0x24, 0x24, 0x24, 0x24, 0x24, 0x4f, 0x00, 0x00,
++ 0x00, 0xf8, 0x80, 0xf0, 0x80, 0xf0, 0x80, 0xfc,
++ 0xc8, 0xa8, 0x90, 0xb0, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x25, 0x3d, 0x24, 0x27,
++ 0x3d, 0x25, 0x26, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0x28, 0x48, 0xb0, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0d, 0x0a, 0x0e, 0x73, 0x00, 0x00, 0x00,
++ 0xa8, 0xa8, 0xfc, 0xa8, 0xa8, 0xb8, 0x80, 0xfc,
++ 0x20, 0xfc, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x3d, 0x01, 0x7f, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x26, 0x3e, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8, 0x08,
++ 0xe8, 0xa8, 0xa8, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x3d, 0x03, 0x7d, 0x01, 0x3d, 0x01, 0x3d,
++ 0x00, 0x3f, 0x24, 0x25, 0x3e, 0x24, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x50, 0x70, 0x00, 0xf8,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x08, 0x09, 0x3e, 0x08, 0x08, 0x7e, 0x09, 0x28,
++ 0x2e, 0x28, 0x38, 0x28, 0x46, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x88, 0xb0, 0x00, 0xf8,
++ 0x88, 0x88, 0xf8, 0x88, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x26, 0x3d, 0x09, 0x28, 0x2d,
++ 0x2a, 0x28, 0x2d, 0x39, 0x62, 0x04, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa8, 0xa8, 0xb0, 0xa0, 0xb0, 0xa8,
++ 0xa4, 0xa4, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x13, 0x22, 0x5c, 0x08, 0x7e,
++ 0x09, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x50, 0x50, 0x50, 0x54, 0xd4, 0xd8, 0x50, 0xd8,
++ 0x54, 0x54, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x7f,
++ 0x09, 0x08, 0x08, 0x08, 0x0f, 0x70, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xfc,
++ 0x10, 0x90, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x10, 0x11, 0x11, 0x11, 0x11,
++ 0x11, 0x11, 0x11, 0x10, 0x33, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x0f,
++ 0x08, 0x0f, 0x29, 0x24, 0x24, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xfc,
++ 0x00, 0xfc, 0x24, 0x94, 0x04, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x2a, 0x2a, 0x3e,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x17, 0x11, 0x1d,
++ 0x72, 0x14, 0x10, 0x10, 0x11, 0x3e, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x40, 0x40, 0xfc, 0x50, 0x48,
++ 0x54, 0xd4, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x00, 0x27, 0x24, 0x27, 0x24,
++ 0x27, 0x24, 0x27, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x3d, 0x24, 0x24, 0x3f, 0x24, 0x24, 0x3f,
++ 0x24, 0x24, 0x24, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x08, 0x08, 0x90, 0xa0, 0xf8, 0x40, 0x40, 0xfc,
++ 0x40, 0xa0, 0x90, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x23, 0x22, 0x04, 0x10,
++ 0x10, 0x20, 0x20, 0x41, 0x42, 0x44, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x48, 0x40, 0x60,
++ 0x60, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x10, 0x11, 0x12, 0x7c, 0x13,
++ 0x10, 0x11, 0x1c, 0x60, 0x00, 0x07, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0x48, 0x84, 0x20,
++ 0x40, 0x88, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x04, 0x19, 0x77, 0x10, 0x13, 0x1f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x30, 0xc0, 0xfc, 0x40, 0xf8, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1d, 0x18, 0x0e, 0x71, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0xfc, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x28, 0x2b, 0x32, 0x2b, 0x26,
++ 0x27, 0x24, 0x39, 0x22, 0x24, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x40, 0x27, 0x20, 0x03, 0x10,
++ 0x13, 0x10, 0x27, 0x20, 0x40, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0x40,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x3c, 0x2b, 0x30, 0x2f, 0x24, 0x27, 0x38,
++ 0x23, 0x21, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0xc8, 0x68, 0xb0, 0x70, 0xa8,
++ 0x24, 0xc0, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x1b, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x90, 0x90, 0xa0, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x7d, 0x10, 0x10, 0x3b, 0x35,
++ 0x35, 0x51, 0x51, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x10, 0x20, 0x78, 0x48, 0x48, 0x78, 0x40, 0x78,
++ 0x48, 0x48, 0x78, 0x48, 0x80, 0x7c, 0x00, 0x00,
++ 0x00, 0x20, 0x13, 0x12, 0x02, 0x03, 0x72, 0x13,
++ 0x12, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0x10, 0xf0, 0x00, 0xf0,
++ 0x10, 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x12, 0x19, 0x25, 0x24, 0x78, 0x13, 0x7d,
++ 0x11, 0x55, 0x39, 0x31, 0x1e, 0x64, 0x00, 0x00,
++ 0x10, 0x20, 0x78, 0x48, 0x48, 0x78, 0x40, 0x78,
++ 0x48, 0x48, 0x78, 0x48, 0x80, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2b, 0x29, 0x08, 0x1b,
++ 0x2a, 0x4b, 0x12, 0x13, 0x22, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf0, 0x20, 0xc0, 0xf8,
++ 0x48, 0xf8, 0x48, 0xf8, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x27, 0x11, 0x10, 0x03, 0x02, 0x73, 0x12,
++ 0x13, 0x12, 0x12, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0xc0, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x48, 0x48, 0x58, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x17, 0x7c, 0x11, 0x16, 0x10,
++ 0x13, 0x1c, 0x61, 0x06, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf8, 0x40, 0xc8, 0x68, 0xb0,
++ 0x30, 0x68, 0xa4, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x08, 0x1c, 0x1b, 0x1b,
++ 0x29, 0x29, 0x49, 0x0b, 0x0a, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xc8, 0xa8, 0x88, 0xfc, 0x08,
++ 0x48, 0x28, 0x08, 0xfc, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x12, 0x13, 0x1e,
++ 0x72, 0x12, 0x13, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x48, 0x48, 0xf8, 0x48,
++ 0x68, 0x58, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x7f, 0x12, 0x1a, 0x37, 0x36,
++ 0x32, 0x53, 0x52, 0x14, 0x14, 0x19, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0xc8, 0x78, 0x48, 0xf8, 0x48,
++ 0x48, 0x78, 0xb0, 0xb4, 0x54, 0x8c, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x12, 0x32, 0x53, 0x12,
++ 0x12, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0xf8, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x41, 0x20, 0x27, 0x01, 0x11,
++ 0x11, 0x11, 0x21, 0x21, 0x41, 0x46, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7e, 0x08, 0x18, 0x1c, 0x1a,
++ 0x2b, 0x29, 0x4a, 0x0c, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x80, 0xf8, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x10, 0x00, 0x07, 0x70, 0x10,
++ 0x10, 0x10, 0x10, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x00, 0xfc, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x0f, 0x08, 0x0f, 0x29, 0x24, 0x40, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0xfc, 0x00, 0xfc, 0x24, 0x94, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x65, 0x18, 0x11, 0x2a, 0x7f,
++ 0x1a, 0x35, 0x34, 0x31, 0x52, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xb0, 0x90, 0x68, 0x48, 0xf8,
++ 0x48, 0x68, 0xb0, 0x90, 0x28, 0x44, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x13, 0x22, 0x5c, 0x08, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xdc, 0x54, 0xdc, 0x00, 0xf8, 0x00, 0xfc,
++ 0x40, 0x78, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x11, 0x18, 0x37, 0x35,
++ 0x33, 0x55, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xf0, 0xa0, 0xfc, 0x10,
++ 0xf8, 0x14, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x20, 0x2f, 0x03, 0x12,
++ 0x13, 0x13, 0x22, 0x23, 0x43, 0x4c, 0x00, 0x00,
++ 0x80, 0xf0, 0x90, 0xf0, 0x80, 0xfc, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x10, 0x08, 0x00, 0x00,
++ 0x00, 0x17, 0x10, 0x12, 0x7d, 0x11, 0x10, 0x17,
++ 0x10, 0x1c, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x48, 0x48, 0x50, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x00, 0x3f, 0x22, 0x5f,
++ 0x12, 0x1f, 0x12, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xfc, 0x88, 0xf0,
++ 0x90, 0xf0, 0x90, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x13, 0x7f, 0x2b, 0x28, 0x2f,
++ 0x28, 0x73, 0x5a, 0x16, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x58, 0x58, 0x40, 0xfc,
++ 0x40, 0xf8, 0xa8, 0xa8, 0xa8, 0xb8, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x64, 0x1b, 0x1a, 0x26, 0x7e,
++ 0x13, 0x1a, 0x36, 0x36, 0x53, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x09, 0x09, 0x09, 0x09, 0x09,
++ 0x09, 0x09, 0x11, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x10, 0xe0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x10, 0x10, 0x10, 0x08, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x11, 0x01, 0x3f,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x78, 0x88, 0x88, 0x48, 0x28,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x7f, 0x52, 0x14, 0x28, 0x3e, 0x68,
++ 0x3e, 0x28, 0x3e, 0x29, 0x3f, 0x22, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f, 0x00, 0x3f,
++ 0x20, 0x5f, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xfc,
++ 0x08, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x12, 0x33, 0x52, 0x12,
++ 0x12, 0x13, 0x1c, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0x40, 0x40, 0xfc, 0x20, 0x20,
++ 0x20, 0x90, 0x14, 0x0c, 0xfc, 0x04, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x11, 0x11, 0x31, 0x50, 0x17,
++ 0x14, 0x1b, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x08, 0xf8, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x10, 0x13, 0x32, 0x53, 0x12,
++ 0x13, 0x12, 0x13, 0x11, 0x16, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x80, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x20, 0x10, 0x08, 0x00, 0x00,
++ 0x22, 0x12, 0x14, 0x7f, 0x09, 0x7f, 0x48, 0x7f,
++ 0x59, 0x19, 0x2e, 0x48, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x1f, 0x10, 0x1f, 0x10,
++ 0x1f, 0x10, 0x1f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x00, 0x3f, 0x01,
++ 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x00, 0xf8, 0x00,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x11, 0x11, 0x11, 0x7d, 0x11, 0x10, 0x17,
++ 0x10, 0x1e, 0x62, 0x03, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x40, 0x78, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x40, 0x3f, 0x01, 0x09,
++ 0x09, 0x09, 0x09, 0x15, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xf8, 0x00, 0x00,
++ 0xf0, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x08, 0x04, 0x3f, 0x21, 0x5f,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x20, 0x40, 0xfc, 0x08, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x13, 0x12, 0x12, 0x13,
++ 0x12, 0x12, 0x13, 0x1c, 0x27, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x30, 0xc0, 0x40, 0x40, 0xfc,
++ 0x20, 0x20, 0x90, 0x14, 0xec, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x1e, 0x12, 0x14, 0x1f,
++ 0x12, 0x1a, 0x14, 0x26, 0x29, 0x50, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x18, 0xe0, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0xf8, 0x00, 0x80, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x08, 0x10, 0x10, 0x3f, 0x08,
++ 0x48, 0x28, 0x13, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x40, 0xf8, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x3f, 0x01, 0x3f, 0x21, 0x3f,
++ 0x23, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x08, 0x08, 0x08, 0x70, 0x00, 0x00, 0x00, 0x00,
++ 0x11, 0x10, 0x10, 0x1b, 0x34, 0x37, 0x32, 0x53,
++ 0x12, 0x10, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xf8, 0x48, 0xf8, 0x40, 0xfc,
++ 0xc4, 0xc4, 0x44, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x11, 0x1d,
++ 0x71, 0x11, 0x16, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0xd0, 0x14, 0x0c, 0xfc, 0x04, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x7a, 0x12, 0x17, 0x11, 0x1d,
++ 0x75, 0x12, 0x12, 0x15, 0x18, 0x30, 0x00, 0x00,
++ 0x00, 0x18, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0xf8, 0x00, 0xc0, 0x3c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x10, 0x1f,
++ 0x70, 0x12, 0x12, 0x13, 0x14, 0x38, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x40, 0x78, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x09, 0x08, 0x08, 0x7f, 0x08, 0x1b, 0x1e, 0x1b,
++ 0x2a, 0x28, 0x49, 0x0a, 0x0c, 0x08, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xf8, 0x48, 0xf8, 0x40, 0xfc,
++ 0xc4, 0xc4, 0x44, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x40, 0x20, 0x20, 0x00, 0x08,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x11, 0x12, 0x3f, 0x24, 0x64,
++ 0x24, 0x24, 0x3c, 0x25, 0x22, 0x04, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x00, 0xfc, 0x20, 0xa0,
++ 0xb8, 0xa0, 0xa0, 0xa0, 0x60, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x09, 0x09, 0x11, 0x19,
++ 0x35, 0x55, 0x11, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x40, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x02, 0x0d, 0x39, 0x09, 0x09, 0x7e, 0x09, 0x1c,
++ 0x1a, 0x2b, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x00, 0xf8, 0x40,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x65, 0x28, 0x1b, 0x22, 0x7c,
++ 0x13, 0x3a, 0x36, 0x36, 0x52, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0xfc, 0x48, 0x40,
++ 0xf8, 0x48, 0x48, 0x48, 0x58, 0x40, 0x00, 0x00,
++ 0x08, 0x13, 0x3c, 0x25, 0x35, 0x2f, 0x2c, 0x7e,
++ 0x26, 0x2d, 0x2d, 0x2e, 0x24, 0x4c, 0x00, 0x00,
++ 0x00, 0x8c, 0xf0, 0x10, 0x10, 0x90, 0xfc, 0x90,
++ 0x90, 0x10, 0x7c, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3d, 0x01, 0x3e,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x50, 0xfc, 0x24, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xb8, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x23, 0x22, 0x3e, 0x29, 0x09, 0x2f,
++ 0x28, 0x28, 0x28, 0x2e, 0x38, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x50, 0xfc, 0x28, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xb8, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x27, 0x14, 0x17, 0x04, 0x07, 0x04, 0x77,
++ 0x1a, 0x1a, 0x12, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xfc, 0x40, 0xfc, 0x40, 0xf8,
++ 0x48, 0x48, 0x70, 0x40, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x3c, 0x24, 0x24, 0x24, 0x3f, 0x24, 0x24,
++ 0x22, 0x3a, 0x61, 0x00, 0x7e, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0x50, 0xe0, 0x50, 0x48,
++ 0x44, 0xc4, 0xe4, 0xd8, 0x40, 0x40, 0x00, 0x00,
++ 0x11, 0x0a, 0x7f, 0x0c, 0x3f, 0x2f, 0x33, 0x3f,
++ 0x3f, 0x04, 0x7f, 0x0a, 0x11, 0x20, 0x00, 0x00,
++ 0x00, 0x78, 0xc8, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x44, 0x44, 0xe4, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x07, 0x24, 0x27, 0x27, 0x24, 0x27, 0x3e,
++ 0x02, 0x7e, 0x12, 0x12, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xc0, 0x48, 0xc8, 0xc8, 0x48, 0xc8, 0xf8,
++ 0x80, 0xfc, 0x90, 0x90, 0x90, 0x90, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x23, 0x22, 0x02, 0x02,
++ 0x12, 0x12, 0x24, 0x24, 0x48, 0x50, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x88, 0x80, 0x98,
++ 0xe0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7d, 0x10, 0x13, 0x12, 0x1f,
++ 0x72, 0x12, 0x12, 0x12, 0x12, 0x32, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0xf8, 0x48, 0xf8,
++ 0x48, 0xe8, 0xa8, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x10, 0x17, 0x11, 0x1f,
++ 0x76, 0x13, 0x13, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x20, 0xf8,
++ 0x40, 0xf0, 0xf0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x22, 0x14, 0x7f, 0x49, 0x7f,
++ 0x49, 0x5d, 0x55, 0x5d, 0x41, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x7c, 0x90, 0x90, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x42, 0x21, 0x27, 0x04, 0x17,
++ 0x14, 0x15, 0x25, 0x25, 0x45, 0x44, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x20, 0xf8, 0x88, 0xf8,
++ 0x88, 0xe8, 0x28, 0xe8, 0x28, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x7c, 0x45, 0x45, 0x46, 0x7c,
++ 0x44, 0x44, 0x44, 0x7c, 0x40, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0x08, 0x88, 0x48,
++ 0x48, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x14, 0x23, 0x41, 0x1f, 0x11,
++ 0x11, 0x1f, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x20, 0x17, 0x10, 0x03, 0x02, 0x73, 0x12,
++ 0x12, 0x12, 0x12, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0xf8, 0x48, 0xf8, 0x48,
++ 0xe8, 0xa8, 0xe8, 0x18, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x1b, 0x25, 0x24, 0x7b, 0x12, 0x7f,
++ 0x12, 0x56, 0x3a, 0x32, 0x1e, 0x62, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0xf8, 0x48, 0xf8,
++ 0x48, 0xe8, 0xa8, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x40, 0x27, 0x24, 0x07, 0x10,
++ 0x14, 0x13, 0x22, 0x24, 0x40, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x40, 0xf8, 0x88,
++ 0xc8, 0xb8, 0xa8, 0xc8, 0x88, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x0e, 0x78, 0x09, 0x1a,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0xfc, 0x90, 0x90, 0x10, 0x10,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x11, 0x11, 0x2f, 0x4b, 0x0a, 0x1f, 0x10, 0x37,
++ 0x54, 0x17, 0x14, 0x17, 0x14, 0x15, 0x00, 0x00,
++ 0x20, 0x20, 0xe0, 0x20, 0xfc, 0xc8, 0x48, 0xa8,
++ 0xa8, 0xb0, 0x90, 0xb0, 0xc8, 0x84, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x7b, 0x12, 0x1f, 0x10, 0x1f,
++ 0x74, 0x17, 0x14, 0x17, 0x14, 0x35, 0x00, 0x00,
++ 0x20, 0x20, 0xe0, 0x20, 0xfc, 0xc8, 0x48, 0xa8,
++ 0xa8, 0xb0, 0x90, 0xb0, 0xc8, 0x84, 0x00, 0x00,
++ 0x11, 0x11, 0x7f, 0x11, 0x7e, 0x57, 0x7c, 0x57,
++ 0x7e, 0x13, 0x7e, 0x13, 0x12, 0x12, 0x00, 0x00,
++ 0x20, 0x20, 0xe0, 0x20, 0xbc, 0xc8, 0x68, 0xa8,
++ 0xa8, 0x90, 0x90, 0xb0, 0xc8, 0x84, 0x00, 0x00,
++ 0x00, 0x22, 0x12, 0x13, 0x04, 0x08, 0x7f, 0x10,
++ 0x10, 0x11, 0x12, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0xc0,
++ 0xa0, 0x10, 0x08, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x09, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0xa0, 0xf8, 0xa0, 0x20, 0xfc,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x1f, 0x12, 0x12, 0x1f, 0x12,
++ 0x12, 0x7f, 0x00, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf0, 0x90, 0x90, 0xf0, 0x90,
++ 0x90, 0xfc, 0x00, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x10, 0x17, 0x10, 0x7d, 0x11, 0x11, 0x11,
++ 0x11, 0x1d, 0x61, 0x07, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xfc, 0x90, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x01, 0x3f, 0x01, 0x03,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x80,
++ 0x80, 0x40, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x12, 0x12, 0x1f, 0x12,
++ 0x1f, 0x12, 0x12, 0x22, 0x23, 0x5c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x48, 0x40, 0xf8, 0x40,
++ 0xfc, 0x48, 0x50, 0x20, 0x90, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x17, 0x14, 0x24, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0x80, 0xfc, 0x80, 0x80,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x47, 0x20, 0x21, 0x02, 0x14,
++ 0x12, 0x12, 0x24, 0x28, 0x40, 0x41, 0x00, 0x00,
++ 0x38, 0xc0, 0x40, 0xfc, 0xa0, 0x10, 0x88, 0x84,
++ 0xd0, 0xa8, 0xa4, 0xa4, 0x80, 0x80, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x66, 0x2a, 0x1a, 0x26, 0x7e,
++ 0x13, 0x3a, 0x37, 0x36, 0x52, 0x15, 0x00, 0x00,
++ 0x20, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0xf8,
++ 0xfc, 0xb4, 0x2c, 0xf8, 0x20, 0xfc, 0x00, 0x00,
++ 0x06, 0x38, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x08,
++ 0x3e, 0x22, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x88, 0x88, 0x88, 0x88, 0xfc, 0x88, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x3e, 0x22,
++ 0x22, 0x3e, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x3c, 0x20, 0x20, 0x20, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x20, 0x50, 0x48, 0x78, 0xc4, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x08, 0x3e, 0x22, 0x3e, 0x3e,
++ 0x22, 0x3e, 0x7f, 0x0c, 0x12, 0x63, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x0f, 0x08, 0x08, 0x08,
++ 0x0f, 0x08, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xe0, 0x20, 0x20, 0x20,
++ 0xe0, 0x20, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x10, 0x10, 0x37, 0x50, 0x10,
++ 0x10, 0x11, 0x11, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x80, 0x80,
++ 0xa0, 0x10, 0x08, 0x38, 0xc4, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x3f, 0x2a, 0x2a, 0x3f,
++ 0x2a, 0x3f, 0x2c, 0x4a, 0x52, 0x23, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x50, 0x54, 0x94, 0x8c, 0xf8,
++ 0x48, 0x50, 0x30, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x20, 0x1f, 0x18, 0x08, 0x4f, 0x2a, 0x2a, 0x0f,
++ 0x1a, 0x1a, 0x2f, 0x2b, 0x54, 0x48, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xa8, 0xac, 0xc4, 0xfc,
++ 0xa8, 0xa8, 0xd0, 0x30, 0xc8, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x21, 0x21, 0x3f, 0x21,
++ 0x21, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08,
++ 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x1f,
++ 0x11, 0x1f, 0x11, 0x1f, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x70, 0x70, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf4, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x01, 0x1f, 0x11, 0x11, 0x1f,
++ 0x13, 0x03, 0x05, 0x09, 0x11, 0x60, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0x40, 0x20, 0x24, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x48, 0x4b, 0x48, 0x48, 0x48,
++ 0x48, 0x78, 0x48, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x10, 0x7c, 0x17, 0x10, 0x11,
++ 0x17, 0x1d, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x48, 0xf8, 0x50, 0x60, 0xfc, 0x40, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x30, 0x08, 0x61, 0x17, 0x00, 0x0f, 0x11, 0x26,
++ 0x21, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0xa0, 0x10, 0xfc, 0x40, 0xfc, 0x50, 0x48,
++ 0xc0, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x25, 0x06, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x40, 0x40, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x17, 0x10, 0x1f,
++ 0x11, 0x17, 0x19, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x88, 0xf0, 0xa0, 0xfc,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x23, 0x48, 0x08, 0x17, 0x10, 0x32,
++ 0x52, 0x12, 0x12, 0x15, 0x18, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x78, 0x40, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x00, 0x0c, 0x02, 0x00, 0x18, 0x04, 0x00, 0x00,
++ 0x07, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7c,
++ 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x19, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x44, 0x27, 0x24, 0x04, 0x14,
++ 0x17, 0x15, 0x24, 0x28, 0x49, 0x56, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x90, 0xfc, 0x90, 0xf0, 0x00,
++ 0xf8, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x0e, 0x02, 0x24, 0x14, 0x08, 0x1f, 0x20, 0x4f,
++ 0x08, 0x0f, 0x04, 0x04, 0x3f, 0x00, 0x00, 0x00,
++ 0x90, 0x90, 0x64, 0x44, 0x28, 0xf0, 0x08, 0xe4,
++ 0x20, 0xe0, 0x40, 0x80, 0xf8, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x07, 0x18, 0x7f, 0x11,
++ 0x11, 0x1f, 0x13, 0x05, 0x19, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xe0, 0x80, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x44, 0x24, 0xfc, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x3c, 0x27, 0x3c, 0x24,
++ 0x25, 0x3e, 0x18, 0x14, 0x24, 0x40, 0x00, 0x00,
++ 0x40, 0x48, 0xf8, 0x50, 0x50, 0xfc, 0x40, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x20, 0x11, 0x11, 0x02, 0x0f, 0x70, 0x1f,
++ 0x12, 0x12, 0x14, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0x80, 0x40, 0x20, 0x10, 0xf8, 0x84, 0xf8,
++ 0xa0, 0x90, 0x88, 0x88, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x09, 0x0a, 0x7f, 0x08, 0x1f,
++ 0x31, 0x5f, 0x11, 0x11, 0x1f, 0x11, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0x50, 0xe0, 0x50, 0x48,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x23, 0x7d, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x1a, 0x0e, 0x75, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0xfc, 0x50, 0x70, 0x00,
++ 0xf8, 0x48, 0x50, 0x20, 0x50, 0x8c, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x11, 0x11, 0x21, 0x3d, 0x65,
++ 0x25, 0x25, 0x27, 0x3c, 0x25, 0x00, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x10, 0xd0, 0x14, 0x0c, 0xfc, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x11, 0x11, 0x3d, 0x25, 0x65,
++ 0x25, 0x25, 0x3e, 0x22, 0x24, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xfc, 0x20, 0x20, 0x38,
++ 0x28, 0x28, 0x48, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x7e, 0x12, 0x12, 0x3c, 0x06, 0x19,
++ 0x61, 0x3f, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x48, 0x50, 0x20, 0xd0, 0x0c,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xe0, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x1f, 0x12, 0x13, 0x10,
++ 0x17, 0x12, 0x11, 0x20, 0x23, 0x5c, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0xfc, 0x20, 0xe0, 0x00,
++ 0xf0, 0x20, 0x40, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x3f, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x11, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x48, 0x50, 0x50,
++ 0x20, 0x20, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x12, 0x12, 0x3c, 0x04, 0x1b,
++ 0x61, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x08, 0x0f, 0x09, 0x11, 0x12, 0x3f, 0x51, 0x11,
++ 0x17, 0x11, 0x11, 0x11, 0x1e, 0x10, 0x00, 0x00,
++ 0x08, 0xe8, 0x28, 0xa8, 0x68, 0xe8, 0x28, 0x28,
++ 0xe8, 0x28, 0x28, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x11, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x08,
++ 0x0f, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0x20,
++ 0xe0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x01, 0x03, 0x0c, 0x32, 0x01, 0x03, 0x0c,
++ 0x73, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x20, 0x40, 0x80, 0x40, 0x30,
++ 0x0c, 0x80, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x27, 0x10, 0x13, 0x02, 0x0b, 0x0a,
++ 0x13, 0x10, 0x21, 0x22, 0x2c, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x10, 0x1f, 0x10, 0x17,
++ 0x10, 0x17, 0x24, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0xf0, 0x90, 0xfc, 0x90, 0xf0,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x11, 0x17, 0x11, 0x7d, 0x10, 0x11, 0x17,
++ 0x14, 0x1b, 0x62, 0x02, 0x03, 0x02, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0x50, 0xa0, 0x10, 0xfc,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x13, 0x7e, 0x13, 0x12, 0x13,
++ 0x12, 0x1f, 0x65, 0x05, 0x09, 0x11, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x04, 0x1f, 0x64, 0x07, 0x04,
++ 0x07, 0x04, 0x7f, 0x02, 0x04, 0x3f, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0xf0, 0x0c, 0xc0, 0x00,
++ 0xc0, 0x00, 0xfc, 0x80, 0x60, 0x90, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x40, 0x7f, 0x04, 0x04,
++ 0x0f, 0x0c, 0x14, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x22, 0x22, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x00, 0xfc,
++ 0x00, 0xfc, 0x24, 0x24, 0xe4, 0x38, 0x00, 0x00,
++ 0x00, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x7d, 0x47, 0x42, 0x04, 0x08, 0x00, 0x00,
++ 0x40, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xfc, 0x54, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x18, 0x37, 0x36, 0x33, 0x52,
++ 0x13, 0x10, 0x1f, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x12, 0x14, 0x1f,
++ 0x71, 0x11, 0x10, 0x10, 0x13, 0x3c, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0xf0,
++ 0x10, 0x20, 0xc0, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x7d, 0x11, 0x10, 0x1b, 0x15,
++ 0x30, 0x53, 0x12, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0x50, 0xa0, 0x18, 0xf4,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x1f, 0x11,
++ 0x1f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7e, 0x11, 0x39, 0x34, 0x35,
++ 0x56, 0x50, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa8, 0xa8, 0xb0, 0xa0, 0xb0, 0xa8,
++ 0xa4, 0xa4, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x11, 0x10, 0x3f, 0x34,
++ 0x37, 0x51, 0x52, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x90,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x13, 0x12, 0x3b, 0x36,
++ 0x37, 0x50, 0x51, 0x16, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x01, 0x21, 0x11, 0x02, 0x0a, 0x14, 0x21, 0x22,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0x50, 0xa0, 0x10, 0x0c,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x43, 0x23, 0x25, 0x0a, 0x17,
++ 0x10, 0x12, 0x22, 0x23, 0x42, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0xe8, 0x88, 0xf8,
++ 0x88, 0xa8, 0xa8, 0xe8, 0x28, 0x30, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x00, 0x1f,
++ 0x12, 0x23, 0x24, 0x49, 0x42, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0x28, 0x48, 0xb0, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x40, 0x23, 0x20, 0x07, 0x08,
++ 0x0f, 0x11, 0x12, 0x24, 0x28, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x90,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x0a, 0x2a, 0x2c, 0x28, 0x48,
++ 0x08, 0x0c, 0x12, 0x12, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x11, 0x10, 0x16, 0x15, 0x39, 0x32, 0x35, 0x51,
++ 0x11, 0x19, 0x14, 0x24, 0x27, 0x40, 0x00, 0x00,
++ 0xc8, 0x48, 0xb0, 0xa4, 0xf8, 0x08, 0xf4, 0x10,
++ 0xf0, 0x10, 0x90, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x11, 0x09, 0x09, 0x01, 0x3f, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x10, 0x20, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2f, 0x28, 0x0b, 0x1a,
++ 0x2a, 0x4b, 0x12, 0x11, 0x21, 0x4f, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf8, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x20, 0x20, 0x40, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x05, 0x08, 0x0b, 0x14,
++ 0x37, 0x51, 0x12, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x90,
++ 0xfc, 0x90, 0x50, 0x50, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x1f, 0x01, 0x3f,
++ 0x00, 0x7f, 0x08, 0x04, 0x04, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x14, 0x23, 0x42, 0x04, 0x1f,
++ 0x60, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x90, 0x80, 0x40, 0xf0,
++ 0x0c, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x14, 0x23, 0x5f, 0x10, 0x17,
++ 0x10, 0x13, 0x12, 0x12, 0x13, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0xf8, 0x08, 0xe8,
++ 0x08, 0xc8, 0x48, 0x48, 0xc8, 0x18, 0x00, 0x00,
++ 0x10, 0x57, 0x36, 0x3b, 0x12, 0x7f, 0x12, 0x1b,
++ 0x36, 0x37, 0x53, 0x15, 0x15, 0x19, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x72, 0x14, 0x0c, 0x13, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x40, 0x50, 0x98, 0xe4, 0x50,
++ 0x50, 0x50, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x0c, 0x12, 0x7d, 0x09, 0x08,
++ 0x7f, 0x08, 0x08, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x08, 0xc8, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x7f, 0x0f, 0x09, 0x0f,
++ 0x09, 0x0f, 0x3f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x80, 0xfc, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x11, 0x09, 0x49, 0x21, 0x21,
++ 0x0f, 0x09, 0x13, 0x1c, 0x23, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0xfc, 0x00, 0xf8, 0xa8, 0x48, 0xb0, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x39, 0x28, 0x2b, 0x38, 0x2f,
++ 0x29, 0x3b, 0x2c, 0x2b, 0x28, 0x58, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x50, 0xe0, 0xf8, 0xa0, 0xfc,
++ 0x50, 0x58, 0xe4, 0x50, 0x48, 0xc0, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3c, 0x01, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x90,
++ 0x90, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x02, 0x3d, 0x27, 0x24, 0x3f, 0x25, 0x26, 0x27,
++ 0x3c, 0x24, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x48, 0x50, 0xf8, 0xa0, 0xfc, 0x10, 0xf8, 0xfc,
++ 0xf0, 0xf0, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10,
++ 0x08, 0x04, 0x04, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10,
++ 0x20, 0x20, 0x40, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x23, 0x22, 0x3e, 0x29, 0x08, 0x2e,
++ 0x28, 0x28, 0x28, 0x2e, 0x38, 0x60, 0x00, 0x00,
++ 0x20, 0x24, 0xf8, 0x70, 0xa8, 0x24, 0x60, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x20, 0x14, 0x12, 0x02, 0x00, 0x71, 0x12,
++ 0x1d, 0x11, 0x12, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa8, 0xa8, 0xb0, 0xa0, 0xb0, 0xa8,
++ 0x28, 0x24, 0x24, 0x1c, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x23, 0x10, 0x17, 0x00, 0x01, 0x77, 0x10,
++ 0x10, 0x11, 0x12, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0x10, 0xe0, 0x40, 0xfc, 0xe0, 0x50, 0xec, 0xa0,
++ 0xb8, 0x28, 0x08, 0x30, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5d, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0xe8, 0x68, 0x74, 0x94, 0xf8, 0x08, 0xfc, 0x88,
++ 0xf8, 0x90, 0x50, 0x60, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x79, 0x49, 0x53, 0x65, 0x59, 0x4a, 0x4f,
++ 0x48, 0x4a, 0x72, 0x43, 0x42, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0xe8, 0x88, 0xf8,
++ 0x88, 0xa8, 0xa8, 0xe8, 0x28, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22,
++ 0x12, 0x14, 0x08, 0x0e, 0x71, 0x06, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x02, 0x39, 0x2b, 0x28, 0x2f, 0x39, 0x2b, 0x2d,
++ 0x39, 0x29, 0x29, 0x2b, 0x2a, 0x5c, 0x00, 0x00,
++ 0x48, 0x50, 0xf8, 0xa0, 0xfc, 0xf0, 0x48, 0xf4,
++ 0xf0, 0x40, 0xfc, 0x54, 0xac, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x3f,
++ 0x2f, 0x2a, 0x2e, 0x2a, 0x27, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x28, 0x28,
++ 0xf8, 0xa8, 0xa8, 0x28, 0x28, 0x78, 0x00, 0x00,
++ 0x11, 0x1e, 0x12, 0x3f, 0x2f, 0x6a, 0x2f, 0x2a,
++ 0x2f, 0x22, 0x2f, 0x22, 0x23, 0x2c, 0x00, 0x00,
++ 0xa0, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0x28, 0xa8, 0x28, 0xc8, 0x98, 0x00, 0x00,
++ 0x06, 0x38, 0x08, 0x7f, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x3e, 0x08, 0x0f, 0x72, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x40, 0x40, 0x5f, 0x40, 0x4f, 0x48,
++ 0x48, 0x48, 0x4f, 0x48, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xe8, 0x08, 0xc8, 0x48,
++ 0x48, 0x48, 0xc8, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x11, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x08, 0x0f,
++ 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0x20, 0xe0,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x21, 0x1f, 0x10, 0x03, 0x72, 0x13, 0x13, 0x1a,
++ 0x67, 0x03, 0x7f, 0x04, 0x02, 0x00, 0x00, 0x00,
++ 0x20, 0xfc, 0x80, 0xf0, 0x10, 0xf0, 0xf0, 0x10,
++ 0xf0, 0xf8, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x17, 0x3b, 0x36, 0x37, 0x52,
++ 0x13, 0x10, 0x13, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0xf8, 0x10, 0xfc, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x7f, 0x13, 0x12, 0x13, 0x16,
++ 0x1b, 0x70, 0x13, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x40, 0xf8, 0x10, 0xfc, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0f, 0x0c, 0x44, 0x27, 0x24, 0x05, 0x15,
++ 0x15, 0x15, 0x25, 0x24, 0x44, 0x44, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xe8, 0x28,
++ 0x28, 0xe8, 0x28, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x7b, 0x49, 0x4f, 0x7b, 0x4a, 0x4b, 0x7a,
++ 0x4b, 0x48, 0x7b, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0xf8, 0x10, 0xfc, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x1f, 0x04, 0x7f, 0x0f, 0x09, 0x0f, 0x09,
++ 0x0f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x40, 0xfc, 0xe0, 0x20, 0xe0, 0x20,
++ 0xe0, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x25, 0x3d,
++ 0x25, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x00, 0xfc, 0x04, 0x04, 0xfc, 0x04, 0x74, 0x54,
++ 0x54, 0x54, 0x74, 0x44, 0x04, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x0c, 0x08, 0x1f, 0x24, 0x4f,
++ 0x12, 0x3f, 0x12, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x08, 0xc8,
++ 0x08, 0xe8, 0x48, 0x48, 0xc8, 0x30, 0x00, 0x00,
++ 0x02, 0x21, 0x1f, 0x10, 0x03, 0x02, 0x73, 0x12,
++ 0x13, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x80, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x13, 0x23, 0x5d, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x71, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xe8, 0xa8,
++ 0xa8, 0xa8, 0xe8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x10, 0x54, 0x57, 0x54, 0x57,
++ 0x54, 0x54, 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x40, 0x40, 0xfc, 0x00, 0xfc,
++ 0x60, 0x50, 0x48, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x20, 0x26, 0x39, 0x21, 0x23, 0x1f, 0x11, 0x11,
++ 0x7f, 0x11, 0x11, 0x12, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xfc, 0x54, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x2f, 0x22, 0x21, 0x3f, 0x22,
++ 0x27, 0x2a, 0x33, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xf0, 0x40, 0x00, 0xf8, 0x00,
++ 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x21, 0x49, 0x09, 0x11, 0x10, 0x37,
++ 0x50, 0x17, 0x11, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x10, 0xfc, 0x10, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x27, 0x48, 0x0b, 0x12, 0x12, 0x33,
++ 0x53, 0x10, 0x15, 0x15, 0x19, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0x08, 0xd0, 0x28, 0x04, 0x14, 0xf0, 0x00, 0x00,
++ 0x20, 0x10, 0x17, 0x40, 0x23, 0x20, 0x03, 0x12,
++ 0x14, 0x10, 0x20, 0x21, 0x42, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xfc, 0x08,
++ 0xa0, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x2b, 0x28, 0x3c, 0x2b, 0x28, 0x48,
++ 0x0f, 0x79, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x7f, 0x2a, 0x29, 0x5f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x50, 0x20, 0xd0, 0xec, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x61,
++ 0x04, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x29, 0x24, 0x40, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x10, 0xf8, 0x80, 0xf0, 0x80,
++ 0xf0, 0x80, 0xfc, 0x24, 0x94, 0x18, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x0f,
++ 0x09, 0x7f, 0x09, 0x1f, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0xe0,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xc0, 0x00, 0x00,
++ 0x04, 0x44, 0x28, 0x13, 0x32, 0x4a, 0x0a, 0x1b,
++ 0x2a, 0x48, 0x08, 0x08, 0x37, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xf8,
++ 0x48, 0x50, 0x48, 0x78, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7c, 0x01, 0x3c, 0x01, 0x3d,
++ 0x02, 0x3c, 0x24, 0x24, 0x3d, 0x26, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xfc, 0x08,
++ 0xa0, 0xa0, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x2a, 0x4a, 0x0c, 0x09, 0x0a, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0x00, 0xfc, 0x40, 0x40, 0x78,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x11, 0x16, 0x7f, 0x12, 0x13, 0x38, 0x35,
++ 0x36, 0x51, 0x56, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x80, 0xf0, 0x40, 0xf8, 0x48, 0xf8, 0x80, 0xe8,
++ 0x68, 0xb0, 0x68, 0xa4, 0x20, 0xc0, 0x00, 0x00,
++ 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x3c, 0x24,
++ 0x20, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x40, 0x40, 0x40, 0x78, 0x48,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x44, 0x08, 0x11, 0x01,
++ 0x7f, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x80, 0x88, 0x78, 0x00,
++ 0xfc, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x13, 0x12, 0x3a, 0x37,
++ 0x36, 0x52, 0x53, 0x16, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0xb8, 0x28, 0x28, 0xac, 0x4c, 0x04, 0xf8,
++ 0x28, 0xa8, 0x10, 0x30, 0x48, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x1f, 0x18,
++ 0x18, 0x1f, 0x28, 0x28, 0x4f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x80, 0xf8, 0x88,
++ 0x88, 0xf8, 0x88, 0x88, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x7f, 0x02, 0x04, 0x1f, 0x1f, 0x10, 0x1f,
++ 0x1f, 0x10, 0x1f, 0x15, 0x25, 0x40, 0x00, 0x00,
++ 0x10, 0xfc, 0x80, 0x40, 0xe4, 0xdc, 0x44, 0xc0,
++ 0xf0, 0x00, 0xf8, 0x48, 0x28, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x01, 0x01, 0x01,
++ 0x01, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xf8, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x5f, 0x01, 0x1f, 0x11,
++ 0x1f, 0x11, 0x1f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xf0, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x04, 0x3f, 0x24, 0x24, 0x24,
++ 0x28, 0x30, 0x3f, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0x88, 0x98, 0x98,
++ 0x78, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x24, 0x1f, 0x14, 0x4f, 0x24, 0x3f, 0x00, 0x1f,
++ 0x19, 0x2f, 0x29, 0x4f, 0x49, 0x4b, 0x00, 0x00,
++ 0x20, 0x20, 0x78, 0x90, 0x20, 0xf8, 0x28, 0xfc,
++ 0x28, 0xf8, 0x28, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x02, 0x02, 0x73, 0x5e, 0x52, 0x5a, 0x5a, 0x5a,
++ 0x7f, 0x5a, 0x4a, 0x02, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x7c, 0x90, 0x20, 0xf8, 0xc8, 0xf8, 0xc8,
++ 0xf8, 0xc8, 0x78, 0xb0, 0xa8, 0xc4, 0x00, 0x00,
++ 0x02, 0x02, 0x03, 0x7e, 0x22, 0x22, 0x22, 0x22,
++ 0x3f, 0x22, 0x22, 0x02, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x30, 0xc0, 0x00, 0x20, 0x20, 0x20, 0x20,
++ 0xe0, 0x20, 0x20, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x19, 0x35, 0x35, 0x30, 0x53,
++ 0x10, 0x10, 0x17, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf0,
++ 0x20, 0x40, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x00, 0x3e, 0x22, 0x3f, 0x00,
++ 0x3e, 0x04, 0x0e, 0x78, 0x09, 0x1e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x90, 0x90, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x20, 0x22, 0x02, 0x0a,
++ 0x0b, 0x0a, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xc0, 0x48, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x27, 0x3c, 0x24, 0x27,
++ 0x3c, 0x24, 0x27, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x88, 0x48, 0x70, 0xa0, 0x30,
++ 0x70, 0xa8, 0x24, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x00, 0x23, 0x12, 0x13, 0x02, 0x02, 0x72, 0x12,
++ 0x12, 0x14, 0x14, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0xfc, 0x20, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x09, 0x0f, 0x78, 0x08, 0x2a, 0x2a, 0x2a,
++ 0x2a, 0x3e, 0x28, 0x0a, 0x0a, 0x07, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x01, 0x7f, 0x02, 0x04, 0x18,
++ 0x6f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30,
++ 0xec, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x0f, 0x08, 0x0f, 0x0f, 0x3f, 0x01, 0x3f, 0x2d,
++ 0x4d, 0x1f, 0x00, 0x7f, 0x04, 0x3f, 0x00, 0x00,
++ 0xe0, 0x20, 0xe0, 0xe0, 0xf8, 0x00, 0xfc, 0x68,
++ 0x60, 0xf0, 0x00, 0xfc, 0x60, 0x90, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x13, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0x3c, 0xe0, 0x28, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0xa8, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x02, 0x04, 0x18, 0x67, 0x00,
++ 0x3f, 0x01, 0x05, 0x19, 0x61, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x80, 0x40, 0x30, 0xcc, 0x00,
++ 0xf8, 0x00, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x09, 0x09, 0x3f, 0x09, 0x09, 0x3f,
++ 0x09, 0x09, 0x11, 0x11, 0x21, 0x46, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x3f, 0x21, 0x21, 0x22, 0x22,
++ 0x24, 0x28, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x88, 0x48,
++ 0x28, 0x28, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x0f, 0x09, 0x11, 0x21, 0x41,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x11, 0x11, 0x15, 0x15, 0x15,
++ 0x15, 0x15, 0x15, 0x3f, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0xd0, 0x10,
++ 0x10, 0x10, 0x14, 0xec, 0x0c, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x14, 0x10, 0x3e, 0x28, 0x49,
++ 0x7e, 0x08, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x48, 0x90, 0xfc, 0x90,
++ 0xf8, 0x90, 0xf8, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x00, 0x3a, 0x01, 0x7d, 0x00, 0x38, 0x07, 0x39,
++ 0x01, 0x39, 0x29, 0x2b, 0x3c, 0x28, 0x00, 0x00,
++ 0x20, 0x28, 0xa8, 0x70, 0x20, 0xfc, 0x70, 0x70,
++ 0xa8, 0xa4, 0x20, 0x20, 0xc0, 0x3c, 0x00, 0x00,
++ 0x25, 0x15, 0x1f, 0x45, 0x2f, 0x2a, 0x0f, 0x12,
++ 0x1f, 0x22, 0x2f, 0x43, 0x44, 0x58, 0x00, 0x00,
++ 0x28, 0x28, 0xb0, 0x7c, 0xd0, 0xd0, 0xfc, 0x50,
++ 0xd0, 0x7c, 0xd0, 0x50, 0xfc, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x11, 0x13, 0x1c,
++ 0x77, 0x11, 0x11, 0x12, 0x14, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xa0, 0x10, 0xf8, 0x04,
++ 0xf8, 0x40, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x71, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xb8, 0xa8, 0xa8, 0xfc, 0x04,
++ 0x74, 0x54, 0x54, 0x74, 0x04, 0x0c, 0x00, 0x00,
++ 0x11, 0x10, 0x10, 0x7f, 0x14, 0x13, 0x3a, 0x36,
++ 0x36, 0x53, 0x53, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8,
++ 0xb8, 0x18, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x45, 0x1a, 0x00, 0x00,
++ 0x08, 0x88, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x67, 0x2a, 0x1b, 0x24, 0x7f,
++ 0x12, 0x3b, 0x36, 0x37, 0x52, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x40, 0xf8,
++ 0x48, 0xf8, 0x48, 0xfc, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x03, 0x7c, 0x56, 0x55, 0x55, 0x7e, 0x57,
++ 0x54, 0x56, 0x7d, 0x45, 0x42, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0xc8, 0xa8, 0x10, 0xb0, 0x48, 0xf8,
++ 0xa8, 0xa8, 0x10, 0x90, 0x68, 0x44, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x01, 0x3f, 0x24, 0x22,
++ 0x2f, 0x21, 0x2f, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x48, 0x88,
++ 0xe8, 0x08, 0xe8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x13, 0x13, 0x3a, 0x37,
++ 0x36, 0x53, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x28, 0xc8, 0xf8,
++ 0x48, 0xf8, 0x48, 0x48, 0x48, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa8, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x3e, 0x2b, 0x3e, 0x08,
++ 0x3e, 0x08, 0x7f, 0x14, 0x22, 0x40, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x27, 0x21, 0x01, 0x09,
++ 0x0b, 0x0a, 0x10, 0x10, 0x21, 0x26, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0xfc, 0x10, 0x10, 0x10,
++ 0x90, 0x60, 0x20, 0x50, 0x88, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x12, 0x12, 0x12,
++ 0x13, 0x12, 0x12, 0x22, 0x22, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x38,
++ 0xc0, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x1f,
++ 0x00, 0x00, 0x01, 0x0e, 0x70, 0x00, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0xfc, 0x40, 0x40, 0x20,
++ 0x20, 0x20, 0x90, 0x14, 0x0c, 0x04, 0x00, 0x00,
++ 0x01, 0x21, 0x11, 0x13, 0x02, 0x04, 0x79, 0x11,
++ 0x12, 0x14, 0x10, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x40, 0x40, 0x50, 0x48,
++ 0x44, 0x44, 0x40, 0xc0, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x1f, 0x10, 0x28, 0x49, 0x0e,
++ 0x08, 0x08, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x88, 0x08,
++ 0x08, 0x48, 0x48, 0xc8, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x3d, 0x25,
++ 0x25, 0x3d, 0x19, 0x15, 0x22, 0x45, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x78, 0x00, 0xfc, 0x60,
++ 0x64, 0x58, 0x50, 0x50, 0x68, 0x84, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x21, 0x21, 0x22, 0x25, 0x29,
++ 0x21, 0x22, 0x24, 0x28, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0x88, 0x48, 0x28, 0x28,
++ 0x88, 0x48, 0x28, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x3e, 0x2a, 0x2a, 0x2a, 0x2a,
++ 0x3e, 0x2c, 0x0a, 0x0f, 0x19, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x03, 0x7c, 0x11, 0x49, 0x2a, 0x24, 0x3f, 0x02,
++ 0x04, 0x07, 0x7c, 0x04, 0x04, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x0f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x02,
++ 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
++ 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x10, 0x1f,
++ 0x11, 0x12, 0x24, 0x38, 0x40, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x80, 0x88, 0xc8,
++ 0xb0, 0xa0, 0x90, 0x88, 0x84, 0x80, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x04, 0x3c, 0x04,
++ 0x3c, 0x04, 0x3c, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0x40, 0x78, 0x40,
++ 0x78, 0x40, 0x78, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x10, 0x10, 0x30, 0x57, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x13, 0x10, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x08, 0x7e, 0x12, 0x12, 0x13,
++ 0x3c, 0x24, 0x06, 0x0a, 0x11, 0x20, 0x00, 0x00,
++ 0x00, 0x1c, 0xe0, 0x20, 0x20, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x0d, 0x03, 0x02, 0x0c, 0x30,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x90, 0x10, 0x60,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7f, 0x00, 0x3c, 0x01, 0x3c,
++ 0x00, 0x3d, 0x25, 0x26, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xc8, 0x68, 0x88, 0x30, 0x40,
++ 0xa0, 0xa8, 0x84, 0x94, 0x90, 0x70, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x47, 0x27, 0x23, 0x00, 0x0f,
++ 0x08, 0x13, 0x12, 0x22, 0x22, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x58, 0x58, 0x40, 0xfc,
++ 0x80, 0xf8, 0xa8, 0xa8, 0xa8, 0xb8, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x7e, 0x07, 0x0a, 0x0b, 0x1a,
++ 0x37, 0x56, 0x13, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0x4c, 0xf8, 0xd8, 0xf8, 0xd8,
++ 0x68, 0xd8, 0xf8, 0xd8, 0x68, 0x58, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x09, 0x0a, 0x10, 0x18,
++ 0x34, 0x55, 0x11, 0x12, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x20, 0x20, 0xb0, 0xa8,
++ 0xa8, 0x24, 0x24, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x01, 0x3f, 0x23, 0x54, 0x14, 0x23, 0x1f, 0x12,
++ 0x1f, 0x00, 0x7f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xa0, 0x50, 0xc8, 0xf0, 0x90,
++ 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x0f, 0x12, 0x2f, 0x44, 0x09,
++ 0x13, 0x00, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xc8, 0xe8, 0x08,
++ 0x30, 0x80, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x09, 0x49, 0x37, 0x11, 0x31, 0x48, 0x0b, 0x1a,
++ 0x2a, 0x4b, 0x0a, 0x0a, 0x33, 0x12, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0x10, 0x00, 0xf8, 0x48,
++ 0x48, 0xf8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x08, 0x7f, 0x15, 0x2b, 0x7e,
++ 0x08, 0x0f, 0x70, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0x50, 0xd0, 0x50, 0x74,
++ 0x94, 0x0c, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x10, 0x20, 0x4f, 0x08, 0x08,
++ 0x08, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x80, 0x80, 0xf0, 0x80, 0x80,
++ 0x80, 0xfc, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x1f, 0x60, 0x0f, 0x00,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0xf0, 0x0c, 0xe0, 0x40,
++ 0x80, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x13, 0x14, 0x13, 0x1c,
++ 0x70, 0x11, 0x15, 0x15, 0x19, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xf8, 0x10,
++ 0xa0, 0x50, 0x48, 0x14, 0x14, 0xf0, 0x00, 0x00,
++ 0x12, 0x12, 0x13, 0x7a, 0x16, 0x15, 0x1d, 0x13,
++ 0x1a, 0x74, 0x18, 0x15, 0x14, 0x38, 0x00, 0x00,
++ 0x30, 0x28, 0xa8, 0xa0, 0xfc, 0xa0, 0x30, 0x50,
++ 0x48, 0x84, 0x00, 0x48, 0xa4, 0xa4, 0x00, 0x00,
++ 0x11, 0x11, 0x15, 0x15, 0x3b, 0x32, 0x36, 0x59,
++ 0x12, 0x14, 0x18, 0x25, 0x24, 0x48, 0x00, 0x00,
++ 0x20, 0x28, 0xe4, 0x64, 0x7c, 0xa0, 0xa0, 0x50,
++ 0x50, 0x88, 0x04, 0x48, 0xa4, 0xa4, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x08, 0x7e, 0x08, 0x1d,
++ 0x1b, 0x2b, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x40, 0x40, 0x40, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x40, 0x40, 0x40, 0x78, 0x48,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x08, 0x13, 0x12, 0x3a, 0x0a,
++ 0x4b, 0x2a, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xb8,
++ 0x38, 0x08, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x3f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x11, 0x1a, 0x14, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x20, 0x20, 0x40,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x1c, 0x1a, 0x2a, 0x49, 0x09,
++ 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x70, 0x70, 0xa8, 0x24, 0x20,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x0f, 0x09, 0x0f, 0x3f, 0x2a, 0x7f,
++ 0x0f, 0x7f, 0x06, 0x7c, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0xe0, 0x20, 0xe0, 0xfc, 0xa8, 0xf8,
++ 0xe0, 0xfc, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x19, 0x34, 0x34, 0x33, 0x52,
++ 0x12, 0x12, 0x12, 0x13, 0x13, 0x12, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0x20, 0x40, 0x20, 0x28, 0xa8,
++ 0x48, 0x48, 0xa8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x07, 0x05,
++ 0x14, 0x17, 0x25, 0x25, 0x49, 0x56, 0x00, 0x00,
++ 0xa0, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0xfc, 0xf0,
++ 0x00, 0xfc, 0x48, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x67, 0x1a, 0x1a, 0x26, 0x7e,
++ 0x12, 0x1b, 0x36, 0x36, 0x52, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xa8,
++ 0x98, 0x18, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x0c, 0x12, 0x7d, 0x01, 0x3e, 0x22,
++ 0x3e, 0x22, 0x3e, 0x22, 0x22, 0x26, 0x00, 0x00,
++ 0x40, 0x40, 0x4c, 0x70, 0x44, 0x44, 0x3c, 0x40,
++ 0x4c, 0x70, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x3e, 0x25, 0x25, 0x3c, 0x25, 0x25, 0x3d,
++ 0x25, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x88, 0x48, 0x48, 0x10, 0x20, 0x18, 0x98, 0x68,
++ 0x28, 0x58, 0x98, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3b, 0x2a, 0x2b, 0x3a, 0x2b, 0x2b, 0x3a,
++ 0x2a, 0x2b, 0x2a, 0x2a, 0x2c, 0x5b, 0x00, 0x00,
++ 0xa0, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0xfc, 0xf8,
++ 0x00, 0xfc, 0xc8, 0xb0, 0xd0, 0x0c, 0x00, 0x00,
++ 0x02, 0x1f, 0x12, 0x1f, 0x12, 0x1f, 0x1f, 0x17,
++ 0x10, 0x1f, 0x12, 0x12, 0x23, 0x5c, 0x00, 0x00,
++ 0x80, 0xf0, 0x90, 0xf0, 0x90, 0xf0, 0xf8, 0xf0,
++ 0x00, 0xfc, 0x90, 0x60, 0xb0, 0x0c, 0x00, 0x00,
++ 0x00, 0x7e, 0x02, 0x7e, 0x02, 0x3a, 0x2a, 0x2a,
++ 0x2a, 0x3a, 0x2a, 0x02, 0x02, 0x0d, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x50, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x12, 0x09, 0x07, 0x19, 0x6f,
++ 0x09, 0x09, 0x0f, 0x01, 0x01, 0x7e, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x60, 0x80, 0xc0, 0x30, 0xec,
++ 0x20, 0x20, 0xe0, 0x10, 0xf8, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x21, 0x21, 0x3f, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x1f, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08,
++ 0x00, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x12, 0x13, 0x1e,
++ 0x72, 0x12, 0x12, 0x12, 0x12, 0x31, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0xf8, 0x08,
++ 0x00, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7d, 0x17, 0x10, 0x11, 0x1a,
++ 0x77, 0x12, 0x13, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x10, 0xe8, 0x48, 0x50, 0xfc, 0xe0, 0x50, 0x48,
++ 0xfc, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x1f, 0x12, 0x1f, 0x14, 0x7f, 0x1c,
++ 0x3e, 0x2a, 0x3e, 0x7f, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0x90, 0xf0, 0x00, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0xf8, 0x08,
++ 0x00, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x22, 0x22, 0x03, 0x13,
++ 0x12, 0x12, 0x24, 0x24, 0x49, 0x56, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x50, 0x40, 0xf8, 0x08,
++ 0x90, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x22, 0x22, 0x02, 0x12,
++ 0x12, 0x12, 0x24, 0x24, 0x48, 0x50, 0x00, 0x00,
++ 0x20, 0xc0, 0x08, 0x30, 0xc0, 0xc8, 0xc8, 0xb0,
++ 0xa0, 0x90, 0x90, 0x88, 0x84, 0x80, 0x00, 0x00,
++ 0x00, 0x3e, 0x08, 0x3e, 0x08, 0x0e, 0x70, 0x1f,
++ 0x11, 0x1f, 0x10, 0x10, 0x10, 0x0f, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x11, 0x11, 0x21, 0x3d, 0x65,
++ 0x25, 0x25, 0x26, 0x3e, 0x25, 0x0e, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x28, 0x30, 0x20, 0xf8, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x30, 0x0b, 0x62, 0x0b, 0x12, 0x24, 0x27, 0x09,
++ 0x7f, 0x02, 0x07, 0x08, 0x03, 0x3c, 0x00, 0x00,
++ 0x40, 0xfc, 0x48, 0xf8, 0x90, 0x60, 0x9c, 0x00,
++ 0xfc, 0x20, 0x40, 0xe0, 0x10, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x29, 0x24, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0xf8, 0x80, 0xf0, 0x80,
++ 0xf0, 0x80, 0xfc, 0x24, 0x94, 0x38, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x04, 0x1f, 0x11, 0x11,
++ 0x1f, 0x10, 0x10, 0x10, 0x10, 0x0f, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x00, 0x09, 0x24, 0x24, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xfc,
++ 0x04, 0x24, 0x94, 0x04, 0x04, 0x38, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x10, 0x30, 0x57, 0x10,
++ 0x10, 0x17, 0x10, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xbc, 0xa0,
++ 0xa0, 0xbc, 0xa0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x13, 0x18, 0x15, 0x12, 0x1f,
++ 0x11, 0x1f, 0x21, 0x22, 0x44, 0x18, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0x90, 0xd4, 0x24, 0x18, 0xf8,
++ 0x44, 0xf8, 0x40, 0x40, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x13, 0x10, 0x10, 0x13,
++ 0x18, 0x70, 0x17, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xf8,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x17, 0x18,
++ 0x70, 0x17, 0x10, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xbc, 0xa0,
++ 0xa0, 0xbc, 0xa0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x3f, 0x22,
++ 0x22, 0x3e, 0x14, 0x12, 0x22, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x90, 0x90, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x29, 0x4a, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x70, 0x68, 0xa8,
++ 0xa4, 0x24, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x03, 0x0d, 0x71, 0x01, 0x1f,
++ 0x12, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xc0, 0x30, 0x08, 0x04, 0xf0,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x28, 0x28, 0x2b, 0x2a, 0x3f, 0x22, 0x23, 0x3a,
++ 0x28, 0x29, 0x2f, 0x28, 0x28, 0x48, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xa8,
++ 0xa0, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x04, 0x7c, 0x04, 0x1c, 0x64, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x88, 0xf0, 0x80, 0x84, 0x7c, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x3c, 0x24, 0x25, 0x3d,
++ 0x25, 0x25, 0x25, 0x25, 0x24, 0x4c, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xfc, 0x24,
++ 0x24, 0x24, 0x24, 0x2c, 0x20, 0x20, 0x00, 0x00,
++ 0x02, 0x7e, 0x02, 0x3e, 0x7f, 0x05, 0x7f, 0x0f,
++ 0x09, 0x0f, 0x09, 0x0f, 0x7f, 0x01, 0x00, 0x00,
++ 0x40, 0x7c, 0x40, 0x78, 0x7c, 0x40, 0xfc, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x78, 0x48, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x12, 0x11, 0x31, 0x5f, 0x10,
++ 0x13, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x10, 0x20, 0xfc, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x11, 0x7c, 0x10, 0x17, 0x10,
++ 0x11, 0x1d, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x90, 0xa0, 0xfc, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x10, 0x7c, 0x24, 0x24, 0x24,
++ 0x7f, 0x48, 0x0d, 0x16, 0x24, 0x40, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf0, 0x90, 0xf0, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x0a, 0x18, 0x1c, 0x1b,
++ 0x2a, 0x28, 0x49, 0x09, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf8, 0xa8, 0xa8, 0xfc,
++ 0xa8, 0xa8, 0xfc, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x7e, 0x08, 0x18, 0x1c, 0x1a,
++ 0x2b, 0x28, 0x49, 0x0e, 0x08, 0x08, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf0, 0x90, 0xf0, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x0a, 0x2c, 0x28, 0x28, 0x48,
++ 0x0b, 0x08, 0x14, 0x13, 0x26, 0x40, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf0, 0x90, 0xf0, 0x40,
++ 0xfc, 0xe0, 0xd0, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x04, 0x45, 0x29, 0x11, 0x31, 0x49, 0x09, 0x19,
++ 0x19, 0x29, 0x48, 0x08, 0x09, 0x32, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xf8, 0x08,
++ 0x08, 0xf8, 0x90, 0x88, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x00, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x00, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x00, 0x3f, 0x20,
++ 0x44, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xfc, 0x08,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x3e, 0x23, 0x22, 0x3e, 0x22, 0x3f, 0x22,
++ 0x22, 0x3e, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x48, 0x50, 0xfc, 0x00,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x29, 0x28, 0x30, 0x2b, 0x24,
++ 0x25, 0x25, 0x39, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x90, 0xa0, 0xfc, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x21, 0x10, 0x17, 0x00, 0x01, 0x70, 0x11,
++ 0x10, 0x11, 0x11, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xf0,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x20, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xf8, 0xa4, 0x1c, 0x00, 0x00,
++ 0x02, 0x0d, 0x38, 0x09, 0x08, 0x7e, 0x08, 0x1d,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x28, 0xa8, 0xb0, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x3e, 0x29, 0x49, 0x09, 0x7f,
++ 0x09, 0x0c, 0x12, 0x12, 0x20, 0x41, 0x00, 0x00,
++ 0x08, 0xc8, 0x48, 0x48, 0xc8, 0x08, 0x08, 0xc8,
++ 0x48, 0x48, 0x48, 0x48, 0x48, 0x88, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x06, 0x38, 0x08, 0x7e,
++ 0x1c, 0x1b, 0x2a, 0x48, 0x08, 0x09, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x20, 0x24, 0xa4, 0xa8,
++ 0xb0, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x10, 0x13, 0x32, 0x52, 0x12,
++ 0x13, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x80, 0xf8, 0x08, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3e, 0x02, 0x3e, 0x02, 0x7f, 0x04, 0x25,
++ 0x15, 0x16, 0x1d, 0x64, 0x04, 0x0c, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0xc8, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x13, 0x7e, 0x13, 0x12, 0x13,
++ 0x10, 0x17, 0x11, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x10, 0xfc, 0x10, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x11, 0x11, 0x11, 0x1d,
++ 0x71, 0x11, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0x80, 0xf8, 0x08, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x43, 0x22, 0x22, 0x02, 0x13,
++ 0x12, 0x12, 0x22, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf8, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x1f, 0x10, 0x10, 0x10, 0x1f,
++ 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x43, 0x10, 0x09, 0x41,
++ 0x29, 0x09, 0x11, 0x11, 0x21, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x30, 0x40, 0xf8, 0x08,
++ 0x08, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x08, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x88, 0x88, 0x88, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x12, 0x1a, 0x16, 0x16, 0x7f,
++ 0x12, 0x1a, 0x1a, 0x2a, 0x22, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x88, 0x88, 0x88, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x10, 0x0f, 0x4b, 0x22, 0x23,
++ 0x12, 0x13, 0x2f, 0x21, 0x40, 0x40, 0x00, 0x00,
++ 0x40, 0xfc, 0x50, 0x48, 0xfc, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x00, 0x20, 0x11, 0x13, 0x02, 0x02, 0x73, 0x12,
++ 0x12, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0x80, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10,
++ 0x10, 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x79, 0x49, 0x49, 0x49, 0x78, 0x4b, 0x48,
++ 0x4f, 0x49, 0x7b, 0x4c, 0x43, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0xf0, 0xa0, 0xf8, 0xa0,
++ 0xfc, 0x50, 0x58, 0xe4, 0x58, 0xc0, 0x00, 0x00,
++ 0x11, 0x09, 0x0f, 0x41, 0x23, 0x22, 0x03, 0x12,
++ 0x13, 0x10, 0x2f, 0x20, 0x43, 0x4c, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x80, 0xfc, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x15, 0x35, 0x38, 0x33, 0x50,
++ 0x17, 0x19, 0x17, 0x24, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0xf0, 0xa0, 0xf8, 0xa0,
++ 0xfc, 0x50, 0x58, 0xe4, 0x58, 0xc0, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x64, 0x2b, 0x1a, 0x27, 0x7e,
++ 0x13, 0x38, 0x37, 0x35, 0x50, 0x10, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x10, 0x1f, 0x10,
++ 0x1f, 0x01, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3f,
++ 0x0a, 0x3e, 0x3a, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x08, 0x08, 0xd0, 0x30, 0x28, 0x44, 0x88, 0x48,
++ 0x50, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x01,
++ 0x03, 0x0e, 0x31, 0x01, 0x06, 0x78, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00,
++ 0xf0, 0x20, 0x40, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x42, 0x47, 0x51, 0x49, 0x4b,
++ 0x45, 0x59, 0x43, 0x40, 0x7f, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0x08, 0x28, 0x28, 0xc8, 0x48,
++ 0x28, 0x28, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x28, 0x45, 0x08, 0x08, 0x7f,
++ 0x08, 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x00, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x12, 0x10, 0x3c, 0x24, 0x65,
++ 0x27, 0x25, 0x3d, 0x21, 0x21, 0x01, 0x00, 0x00,
++ 0xa0, 0x90, 0x08, 0x48, 0x40, 0xa0, 0xa0, 0x10,
++ 0xf8, 0x14, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x1f, 0x01, 0x7f, 0x03,
++ 0x0f, 0x74, 0x07, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x10, 0xf8, 0x20, 0xfc, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x3e, 0x23, 0x3e, 0x21, 0x4f, 0x7f,
++ 0x01, 0x0f, 0x3f, 0x01, 0x7f, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x30, 0xcc, 0xe0, 0xfc,
++ 0x20, 0xe0, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x14, 0x23, 0x5f, 0x01, 0x7f,
++ 0x01, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x18, 0xe0, 0x00, 0xfc,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1a, 0x36, 0x36,
++ 0x32, 0x54, 0x55, 0x19, 0x11, 0x17, 0x00, 0x00,
++ 0x70, 0xfc, 0x58, 0xe8, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x00, 0xf8, 0x68, 0x68, 0xfc, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7d, 0x57, 0x54, 0x55, 0x57,
++ 0x55, 0x5d, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x18, 0xe8, 0x48, 0x50, 0xfc, 0xe0, 0x50, 0xf8,
++ 0x54, 0xf0, 0x50, 0x50, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x24, 0x3c,
++ 0x24, 0x24, 0x24, 0x25, 0x25, 0x4e, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
++ 0x90, 0x90, 0x94, 0x14, 0x14, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0a, 0x2a, 0x2c, 0x28, 0x48,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0xf8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x00,
++ 0x3f, 0x21, 0x3f, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x07, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x08,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20,
++ 0x20, 0x20, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2b, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x70, 0x70, 0xa8,
++ 0xa8, 0x24, 0xf8, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x23, 0x10, 0x15, 0x43, 0x22, 0x27, 0x09, 0x01,
++ 0x1f, 0x11, 0x21, 0x22, 0x44, 0x58, 0x00, 0x00,
++ 0x90, 0x90, 0x64, 0x28, 0x10, 0xf8, 0x24, 0x20,
++ 0xfc, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x1e, 0x02, 0x24, 0x14, 0x08, 0x1f, 0x22, 0x42,
++ 0x3f, 0x02, 0x04, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x90, 0x90, 0x64, 0x44, 0x28, 0xf0, 0x48, 0x44,
++ 0xf8, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x21, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x68, 0x28, 0xd4, 0x54, 0x88, 0xfc, 0x50, 0x50,
++ 0xfc, 0x50, 0x50, 0x94, 0x94, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x01,
++ 0x7f, 0x02, 0x07, 0x1a, 0x61, 0x1e, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0x00,
++ 0xfc, 0x00, 0xf0, 0x20, 0xc0, 0x7c, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x08, 0x08, 0x1f, 0x28, 0x48,
++ 0x08, 0x08, 0x08, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0x7c, 0xc8, 0x48, 0x50,
++ 0x30, 0x20, 0x64, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x00, 0x1e, 0x7f, 0x00,
++ 0x1e, 0x1e, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x00, 0x48, 0xc8, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x10, 0x1c,
++ 0x70, 0x11, 0x11, 0x12, 0x14, 0x3b, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x80, 0x80, 0xf8, 0x88,
++ 0xc8, 0x50, 0x30, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x14, 0x23, 0x44, 0x04, 0x0b,
++ 0x18, 0x28, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x50, 0x48, 0xfc,
++ 0x48, 0x30, 0x20, 0xd4, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x25, 0x25,
++ 0x29, 0x3f, 0x28, 0x2b, 0x28, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x48, 0x28,
++ 0xe8, 0x48, 0xa8, 0x68, 0x28, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x15, 0x15, 0x15, 0x17,
++ 0x17, 0x13, 0x21, 0x22, 0x42, 0x04, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xfc, 0x54, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x54, 0x52, 0x53, 0x5f, 0x52,
++ 0x5f, 0x77, 0x56, 0x4a, 0x12, 0x02, 0x00, 0x00,
++ 0x04, 0x08, 0xf0, 0xa0, 0xa0, 0x3c, 0xe8, 0x28,
++ 0xe8, 0x28, 0xa8, 0xc8, 0x48, 0x88, 0x00, 0x00,
++ 0x00, 0x10, 0x17, 0x10, 0x7d, 0x11, 0x11, 0x10,
++ 0x17, 0x1c, 0x65, 0x05, 0x05, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x08, 0xe8, 0x28, 0xe8, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0xfc, 0x00, 0x00,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x18, 0x2f, 0x48, 0x0f, 0x08,
++ 0x0f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x80, 0xf0, 0x80, 0xf0, 0x80,
++ 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x0a, 0x09, 0x11, 0x10, 0x33, 0x50, 0x10,
++ 0x17, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0x50, 0x40, 0xf8, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x49, 0x29, 0x2a, 0x08, 0x7f, 0x08, 0x08,
++ 0x7f, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x11, 0x09, 0x09, 0x3f, 0x01, 0x01,
++ 0x7f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x10, 0x10, 0x20, 0xf8, 0x00, 0x00,
++ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x12, 0x12, 0x12,
++ 0x11, 0x11, 0x10, 0x21, 0x26, 0x58, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x20,
++ 0x20, 0x40, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x0a, 0x4a, 0x2c, 0x28, 0x7e, 0x08, 0x08,
++ 0x0f, 0x79, 0x11, 0x12, 0x22, 0x44, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0x88, 0x88, 0xc8,
++ 0x50, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x5d, 0x51, 0x12, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x90, 0x50, 0x50,
++ 0x50, 0x10, 0x10, 0x14, 0x14, 0x0c, 0x00, 0x00,
++ 0x12, 0x12, 0x17, 0x7c, 0x16, 0x15, 0x15, 0x1f,
++ 0x74, 0x16, 0x16, 0x1a, 0x18, 0x31, 0x00, 0x00,
++ 0x00, 0x38, 0xa8, 0xa8, 0xac, 0xac, 0xc4, 0xf8,
++ 0xa8, 0xa8, 0x90, 0xb0, 0xc8, 0x84, 0x00, 0x00,
++ 0x01, 0x7d, 0x11, 0x17, 0x10, 0x14, 0x7a, 0x13,
++ 0x11, 0x11, 0x1e, 0x62, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0x7c, 0x10, 0xd0, 0x90, 0x90, 0xfc, 0x10,
++ 0x10, 0x10, 0x90, 0x90, 0x7c, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x0a, 0x0a, 0x0d, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x41, 0x21, 0x21, 0x01, 0x09,
++ 0x09, 0x09, 0x11, 0x11, 0x21, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x30,
++ 0x00, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x41, 0x21, 0x21, 0x01, 0x09,
++ 0x09, 0x09, 0x11, 0x12, 0x22, 0x24, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x90, 0x50, 0x50,
++ 0x10, 0x10, 0x10, 0x14, 0x14, 0x0c, 0x00, 0x00,
++ 0x28, 0x29, 0x29, 0x29, 0x3f, 0x21, 0x21, 0x3d,
++ 0x25, 0x25, 0x26, 0x26, 0x45, 0x46, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x45, 0x29, 0x11, 0x31, 0x49, 0x09, 0x19,
++ 0x29, 0x49, 0x09, 0x09, 0x09, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x30,
++ 0x00, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x7c, 0x12, 0x12, 0x12, 0x12, 0x7e, 0x12,
++ 0x12, 0x10, 0x1d, 0x61, 0x02, 0x04, 0x00, 0x00,
++ 0x80, 0xfc, 0x90, 0x90, 0x90, 0x90, 0xfc, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x02, 0x7d, 0x55, 0x54, 0x57, 0x7c, 0x54,
++ 0x57, 0x54, 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0x50, 0x40, 0xf8, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x3f, 0x5f, 0x15, 0x7f, 0x15, 0x3f, 0x23,
++ 0x0c, 0x03, 0x3f, 0x0d, 0x31, 0x01, 0x00, 0x00,
++ 0x40, 0xc0, 0x7c, 0xc8, 0x48, 0x30, 0xd8, 0x44,
++ 0xc0, 0x30, 0xc8, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x12, 0x1a, 0x16, 0x17, 0x7f,
++ 0x12, 0x1a, 0x1a, 0x2a, 0x22, 0x47, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x50, 0x54, 0x94, 0x0c, 0xf8,
++ 0x88, 0x50, 0x50, 0x20, 0x50, 0x8c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x10, 0x0b, 0x49, 0x27, 0x20,
++ 0x0b, 0x0d, 0x11, 0x11, 0x21, 0x21, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x38, 0xc8, 0x50, 0xfc, 0xe0,
++ 0xf8, 0x54, 0xf0, 0x50, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x3e, 0x22,
++ 0x22, 0x3e, 0x19, 0x15, 0x22, 0x47, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0xc8, 0xc8, 0xc8,
++ 0xa8, 0xb0, 0x10, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x4d, 0x7f, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x2a, 0x3e, 0x08, 0x7f, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x10, 0xf8, 0x88, 0x88, 0x88,
++ 0x88, 0xb0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x01, 0x3f, 0x11, 0x09, 0x09, 0x7f, 0x01,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x30, 0xc0, 0x10, 0x10, 0x20, 0x40, 0xfc, 0x00,
++ 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x0a, 0x2b, 0x2d, 0x29, 0x49,
++ 0x09, 0x0d, 0x13, 0x12, 0x21, 0x46, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x1c, 0x05, 0x14, 0x14, 0x12, 0x22, 0x3f, 0x52,
++ 0x12, 0x12, 0x12, 0x22, 0x2d, 0x42, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x0c, 0x12, 0x2a, 0x48, 0x3e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x24, 0x27, 0x39, 0x63, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0xc8, 0xc8, 0xc8,
++ 0xa8, 0xb0, 0x90, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x17, 0x12, 0x12, 0x1f,
++ 0x72, 0x10, 0x10, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x68, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x79, 0x4a, 0x4f, 0x4a, 0x7a, 0x4b,
++ 0x4a, 0x48, 0x79, 0x49, 0x42, 0x04, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0xa8, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x11, 0x09, 0x7f, 0x03, 0x05, 0x19,
++ 0x7f, 0x11, 0x1f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x30, 0xd0, 0x10, 0x20, 0xfc, 0x80, 0x40, 0x30,
++ 0xfc, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x3e, 0x32, 0x2a, 0x7f, 0x2a, 0x2a, 0x47,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x70, 0x54, 0x8c, 0xf8, 0x50, 0x70, 0x8c,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x3e, 0x32, 0x2a, 0x7f, 0x2a, 0x2a, 0x47,
++ 0x3f, 0x02, 0x0f, 0x74, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0x70, 0x54, 0x8c, 0xf8, 0x50, 0x30, 0xcc,
++ 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x09, 0x7f, 0x05, 0x19,
++ 0x6f, 0x09, 0x0f, 0x09, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x60, 0xd0, 0x20, 0xfc, 0x40, 0x30,
++ 0xec, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x12, 0x12, 0x24, 0x49, 0x0f,
++ 0x09, 0x09, 0x0f, 0x09, 0x01, 0x3e, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x50, 0x48, 0x44, 0xc4, 0xe0,
++ 0x20, 0x20, 0xe0, 0x20, 0xf0, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x2f, 0x21, 0x2f, 0x21,
++ 0x2f, 0x22, 0x22, 0x24, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x78, 0x40, 0x78, 0x40,
++ 0x78, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x04, 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x1f,
++ 0x04, 0x08, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x03, 0x05, 0x19, 0x61, 0x01,
++ 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xc0, 0x30, 0x08, 0x04, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x88, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x14, 0x14, 0x14, 0x17,
++ 0x14, 0x14, 0x14, 0x25, 0x26, 0x58, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x40, 0x40, 0x44, 0xc8,
++ 0x70, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x10, 0x23, 0x4a, 0x0a, 0x12, 0x13, 0x32,
++ 0x52, 0x12, 0x12, 0x14, 0x15, 0x1e, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x50, 0x40, 0xf8, 0x88,
++ 0x90, 0x50, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x02, 0x02, 0x3e, 0x02, 0x3e, 0x02, 0x7e, 0x04,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x80, 0xf8, 0x80, 0xfc, 0x80,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1f, 0x10, 0x1f, 0x11, 0x1f,
++ 0x11, 0x1f, 0x21, 0x3e, 0x42, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x40, 0x78,
++ 0x40, 0x78, 0x40, 0x7c, 0x40, 0x40, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x7e, 0x12, 0x13, 0x12, 0x1e,
++ 0x72, 0x12, 0x12, 0x12, 0x13, 0x3c, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x24, 0x24, 0xe8, 0x30, 0x20,
++ 0x20, 0x20, 0x20, 0xe4, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x12, 0x12, 0x13, 0x1e,
++ 0x72, 0x12, 0x12, 0x14, 0x15, 0x3e, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x50, 0x40, 0xf8, 0x88,
++ 0x90, 0x50, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x02, 0x3e, 0x02, 0x3e, 0x02, 0x7c, 0x05, 0x09,
++ 0x7f, 0x04, 0x02, 0x03, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0x7c, 0x40, 0x7c, 0x40, 0x7c, 0x40, 0x00,
++ 0xfc, 0x40, 0x80, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x10,
++ 0x10, 0x10, 0x11, 0x16, 0x18, 0x60, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x88, 0x88, 0x90, 0xa0, 0xc0,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x20, 0x22, 0x02, 0x12,
++ 0x14, 0x14, 0x28, 0x21, 0x42, 0x44, 0x00, 0x00,
++ 0x40, 0x28, 0x28, 0x88, 0x90, 0x90, 0xb0, 0xa8,
++ 0xc4, 0xc4, 0x80, 0x88, 0x88, 0x78, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2b, 0x2a, 0x0a, 0x1b,
++ 0x2b, 0x4a, 0x12, 0x14, 0x25, 0x4e, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x40, 0xfc, 0x48, 0x50, 0xf0,
++ 0x10, 0xa0, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x12,
++ 0x11, 0x11, 0x10, 0x20, 0x23, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x88, 0x90, 0x80, 0xf0, 0x10,
++ 0x20, 0x20, 0xc0, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x7c, 0x10, 0x13, 0x12, 0x13, 0x3e, 0x27,
++ 0x64, 0x25, 0x27, 0x3c, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0xa0, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x18, 0x70, 0x10, 0x10, 0x7e, 0x12, 0x1a,
++ 0x36, 0x34, 0x50, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x20, 0x28, 0x88, 0x88, 0x90, 0x90, 0xb0,
++ 0xa8, 0xc4, 0x84, 0x88, 0x88, 0x78, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x67, 0x18, 0x10, 0x2b, 0x7c,
++ 0x18, 0x37, 0x35, 0x31, 0x52, 0x14, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xbc, 0xa0,
++ 0xa0, 0xbc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x08, 0x12, 0x7f, 0x3e,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x26, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x40, 0x58, 0x60, 0x44,
++ 0x3c, 0x40, 0x58, 0x60, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0xf8, 0x08,
++ 0x00, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x09, 0x0b, 0x13, 0x3d,
++ 0x55, 0x13, 0x12, 0x12, 0x15, 0x1e, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x28, 0x30, 0xf8, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x00, 0x3c, 0x03, 0x3c,
++ 0x00, 0x3c, 0x27, 0x24, 0x3d, 0x26, 0x00, 0x00,
++ 0x50, 0x50, 0x50, 0xdc, 0x50, 0x50, 0xdc, 0x50,
++ 0x50, 0xdc, 0x90, 0x90, 0x10, 0x10, 0x00, 0x00,
++ 0x02, 0x3f, 0x02, 0x3f, 0x3f, 0x44, 0x1f, 0x68,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x80, 0xf8, 0x88, 0xf8, 0xfc, 0x84, 0xf8, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x27, 0x14, 0x14, 0x07, 0x04, 0x77, 0x1c,
++ 0x14, 0x14, 0x17, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0x10, 0x90, 0xfc, 0xc8, 0xa8, 0x30, 0xfc, 0x90,
++ 0x90, 0xfc, 0x90, 0x10, 0x10, 0xfc, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x3e, 0x02, 0x02, 0x3e, 0x02,
++ 0x02, 0x7e, 0x04, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x40, 0x40, 0x7c, 0x40,
++ 0x40, 0x7c, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x1f, 0x02, 0x0e, 0x32, 0x12, 0x12, 0x7f,
++ 0x12, 0x12, 0x22, 0x22, 0x42, 0x02, 0x00, 0x00,
++ 0x00, 0xc8, 0x70, 0x50, 0x48, 0x28, 0x18, 0xc8,
++ 0x50, 0x70, 0x28, 0x24, 0x14, 0x0c, 0x00, 0x00,
++ 0x10, 0x15, 0x12, 0x7e, 0x10, 0x10, 0x3e, 0x36,
++ 0x36, 0x52, 0x52, 0x12, 0x15, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x20, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0xa8, 0xa8, 0x98, 0x80, 0x7c, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x12, 0x7f, 0x12, 0x1e,
++ 0x12, 0x1e, 0x12, 0x7f, 0x15, 0x63, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x10, 0x20, 0xfc, 0xa8, 0xb0,
++ 0xf8, 0xc8, 0xa8, 0x90, 0x68, 0x84, 0x00, 0x00,
++ 0x09, 0x09, 0x0f, 0x11, 0x17, 0x34, 0x57, 0x16,
++ 0x17, 0x16, 0x17, 0x1a, 0x12, 0x12, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0xf8, 0x48,
++ 0xf8, 0x48, 0xf8, 0x48, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x17, 0x10,
++ 0x17, 0x10, 0x1f, 0x20, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x68, 0x80, 0xf0,
++ 0x80, 0xfc, 0x80, 0x80, 0x84, 0x7c, 0x00, 0x00,
++ 0x12, 0x1a, 0x2a, 0x4a, 0x1f, 0x18, 0x20, 0x7f,
++ 0x26, 0x26, 0x2a, 0x2b, 0x32, 0x20, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa0, 0xfc, 0x48, 0xc8, 0xe8,
++ 0x28, 0x30, 0x90, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x09, 0x09, 0x09, 0x7f, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x0e, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x24, 0x24, 0xe8, 0x30, 0x20,
++ 0x20, 0x20, 0x20, 0x64, 0xa4, 0x1c, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x1f, 0x10,
++ 0x10, 0x1f, 0x10, 0x10, 0x1e, 0x70, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x80,
++ 0x98, 0xe0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x7e, 0x08, 0x3e, 0x08, 0x0e, 0x70, 0x10,
++ 0x10, 0x1f, 0x10, 0x10, 0x1e, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x80, 0x80,
++ 0x98, 0xe0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x1f, 0x10, 0x17, 0x14,
++ 0x17, 0x14, 0x27, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f,
++ 0x01, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc,
++ 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x0f, 0x08, 0x0f, 0x0f, 0x0f, 0x1f, 0x11,
++ 0x1f, 0x1f, 0x04, 0x7f, 0x04, 0x18, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0xe0, 0xe0, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x08, 0x1d, 0x1a, 0x1a,
++ 0x28, 0x29, 0x48, 0x09, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x90, 0x50, 0x20, 0x50,
++ 0xc8, 0x24, 0x00, 0xc0, 0x30, 0x08, 0x00, 0x00,
++ 0x04, 0x18, 0x73, 0x12, 0x13, 0x7e, 0x13, 0x18,
++ 0x35, 0x37, 0x50, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xa8,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x22, 0x22, 0x22, 0x22, 0x24,
++ 0x24, 0x28, 0x30, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0x40, 0x40, 0x48,
++ 0x48, 0x38, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x09, 0x09, 0x09, 0x09,
++ 0x09, 0x09, 0x15, 0x13, 0x21, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x10, 0x20, 0x00, 0x00, 0xf0,
++ 0x00, 0x00, 0x00, 0x00, 0x80, 0x7c, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x04,
++ 0x14, 0x17, 0x14, 0x14, 0x17, 0x78, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0x80,
++ 0x98, 0xe0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x04, 0x02, 0x1f, 0x10, 0x10,
++ 0x17, 0x10, 0x13, 0x20, 0x20, 0x47, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0x40, 0xfc, 0x20, 0xc0,
++ 0x10, 0x60, 0x84, 0x18, 0x60, 0x80, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x3d, 0x26, 0x24, 0x3f,
++ 0x26, 0x25, 0x24, 0x27, 0x24, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0xa0, 0x58,
++ 0x4c, 0x50, 0xe0, 0x58, 0x44, 0xc0, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x3f, 0x01, 0x7f, 0x04, 0x1a,
++ 0x63, 0x06, 0x19, 0x03, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x00, 0xfc, 0x88, 0x78,
++ 0xe0, 0x40, 0x80, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x27, 0x3c, 0x25, 0x24,
++ 0x3c, 0x24, 0x24, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x90,
++ 0x90, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x78, 0x0f, 0x09, 0x39, 0x23, 0x22, 0x3a,
++ 0x2b, 0x0a, 0x0a, 0x0b, 0x0a, 0x30, 0x00, 0x00,
++ 0x00, 0x78, 0xc8, 0x08, 0x38, 0xa0, 0xa0, 0xb8,
++ 0xa8, 0x88, 0x88, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x02, 0x01, 0x00, 0x04, 0x04, 0x04, 0x24, 0x24,
++ 0x24, 0x45, 0x46, 0x04, 0x1c, 0x63, 0x00, 0x00,
++ 0x00, 0x10, 0x90, 0x90, 0x20, 0x20, 0x50, 0x48,
++ 0x84, 0x04, 0x00, 0x10, 0x10, 0xf0, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x09, 0x7f,
++ 0x09, 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x20, 0xfc,
++ 0x20, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x25, 0x5f, 0x01, 0x7f, 0x01, 0x1f,
++ 0x01, 0x1f, 0x01, 0x3f, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x20, 0xf0, 0x10, 0xfc, 0x10, 0xf0,
++ 0x00, 0xf0, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x27, 0x10, 0x11, 0x01, 0x01, 0x70, 0x13,
++ 0x12, 0x13, 0x12, 0x13, 0x2c, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x48, 0xf8, 0x48, 0xf8, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x11, 0x1b, 0x34, 0x34,
++ 0x37, 0x50, 0x50, 0x11, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0x00,
++ 0xfc, 0xa0, 0x90, 0x38, 0xc4, 0x04, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x25,
++ 0x79, 0x49, 0x0d, 0x15, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0xf8, 0x08, 0x08,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x11, 0x7f, 0x24, 0x27, 0x24,
++ 0x74, 0x48, 0x09, 0x16, 0x24, 0x43, 0x00, 0x00,
++ 0x1c, 0xe4, 0x48, 0x30, 0xfc, 0x40, 0xfc, 0x40,
++ 0xf8, 0xc8, 0x30, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x0a, 0x72, 0x14, 0x0c, 0x13, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0xfc, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x02, 0x1f, 0x10, 0x10, 0x10,
++ 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x7b, 0x02, 0x3c, 0x01, 0x38,
++ 0x03, 0x3d, 0x28, 0x29, 0x38, 0x2b, 0x00, 0x00,
++ 0x00, 0xf8, 0xc8, 0xb8, 0xa8, 0xc8, 0x98, 0xc0,
++ 0x30, 0xcc, 0x20, 0xc8, 0x30, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x13, 0x30, 0x57, 0x10,
++ 0x11, 0x13, 0x15, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0xc0,
++ 0x48, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x07, 0x04, 0x3f, 0x29, 0x2e, 0x38, 0x27,
++ 0x2a, 0x2a, 0x2a, 0x2a, 0x32, 0x41, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xa8, 0x48, 0x10, 0x94, 0x24,
++ 0x08, 0x08, 0x10, 0x20, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x12, 0x1b, 0x34, 0x35,
++ 0x30, 0x57, 0x51, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0x00, 0xf0,
++ 0x00, 0xfc, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x01, 0x11, 0x09, 0x09, 0x01, 0x7d, 0x05, 0x09,
++ 0x09, 0x11, 0x21, 0x41, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x88, 0x90, 0x60, 0x40, 0x20,
++ 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x43, 0x22, 0x23, 0x00, 0x13,
++ 0x10, 0x17, 0x21, 0x22, 0x44, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0x00, 0xf8,
++ 0x00, 0xfc, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x00, 0x7f, 0x19, 0x7f, 0x5b, 0x7f, 0x01, 0x3d,
++ 0x01, 0x7f, 0x19, 0x36, 0x53, 0x34, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0x50, 0x70, 0x50, 0x78, 0xd8, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x1f, 0x12, 0x1f, 0x00, 0x1f,
++ 0x00, 0x7f, 0x05, 0x19, 0x61, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0x90, 0xf0, 0x00, 0xf0,
++ 0x00, 0xfc, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x03,
++ 0x04, 0x1c, 0x64, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x10,
++ 0x90, 0xa0, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7f, 0x00, 0x3c, 0x00, 0x3f,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x28, 0xa8, 0xb0, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x18, 0x66, 0x14, 0x19, 0x6a, 0x0c, 0x14,
++ 0x64, 0x0c, 0x14, 0x64, 0x04, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0x08, 0x88, 0x48,
++ 0x48, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x24, 0x2f, 0x29, 0x2f,
++ 0x29, 0x2f, 0x24, 0x3f, 0x44, 0x45, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf8, 0x48, 0x48, 0x78, 0x48,
++ 0x48, 0x78, 0x48, 0xc8, 0x88, 0x18, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x7d, 0x11, 0x10, 0x1b, 0x12,
++ 0x32, 0x53, 0x12, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0x10, 0x00, 0xf8, 0x48,
++ 0x48, 0xf8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2b, 0x28, 0x0b, 0x1a,
++ 0x6a, 0x0a, 0x13, 0x12, 0x22, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf8, 0x40, 0xf8, 0x48,
++ 0x68, 0x98, 0x18, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x02, 0x0c, 0x38, 0x08, 0x08, 0x7e, 0x08, 0x1d,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x0b, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xb0, 0xa8, 0xa4, 0xa4, 0x28,
++ 0x68, 0x30, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x04, 0x1f, 0x11, 0x11,
++ 0x1f, 0x11, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x7c, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x71, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0x90, 0x00, 0xf8, 0x48,
++ 0x48, 0xf8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x09, 0x2a, 0x1c, 0x18, 0x0e, 0x71, 0x00, 0x00,
++ 0x08, 0xf0, 0x80, 0x80, 0xfc, 0x90, 0x90, 0x90,
++ 0xfc, 0x00, 0x50, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3e, 0x00, 0x7f, 0x08,
++ 0x2c, 0x2a, 0x2a, 0x49, 0x08, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xfc, 0x20,
++ 0xb0, 0xa8, 0xa4, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0e, 0x73, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x50, 0x88, 0xfc, 0x24, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7e, 0x2a, 0x3e, 0x2b,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x20, 0xf8, 0x28, 0xfc, 0x68, 0x70, 0xc4, 0x3c,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00,
++ 0x7c, 0x44, 0x44, 0x44, 0x7c, 0x44, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x40, 0x40, 0xc0, 0x40, 0x00,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7f, 0x11, 0x19, 0x37, 0x37,
++ 0x33, 0x55, 0x55, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xe0, 0x08, 0x08, 0x90, 0x50,
++ 0x64, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x08, 0x08, 0x4a, 0x2a,
++ 0x12, 0x12, 0x1a, 0x2a, 0x27, 0x40, 0x00, 0x00,
++ 0x20, 0xe8, 0x24, 0xfc, 0xa0, 0xa0, 0xa0, 0xe0,
++ 0x90, 0x90, 0xb4, 0xcc, 0x0c, 0x04, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x23, 0x22, 0x02, 0x12,
++ 0x1f, 0x20, 0x22, 0x42, 0x44, 0x48, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0xf8, 0x20, 0x20, 0x20,
++ 0xfc, 0x00, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x22, 0x12, 0x1a, 0x4b, 0x2a, 0x3f, 0x03, 0x16,
++ 0x16, 0x2f, 0x29, 0x42, 0x44, 0x49, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0xa0, 0x78, 0xc8, 0x78, 0xc8,
++ 0xf8, 0x48, 0x78, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x01, 0x04, 0x1f, 0x62, 0x0c, 0x3f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x80, 0x40, 0xf0, 0x4c, 0xc0, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x5f, 0x09, 0x33, 0x7f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x30, 0xc8, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x2e, 0x28, 0x28, 0x7f, 0x0c, 0x2a,
++ 0x29, 0x49, 0x1a, 0x04, 0x18, 0x63, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x3f, 0x40, 0x3e, 0x2a, 0x2b,
++ 0x7f, 0x2a, 0x2a, 0x7f, 0x43, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x7c, 0x88, 0x88, 0x48,
++ 0x50, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x22, 0x13, 0x14, 0x7f, 0x14, 0x14, 0x14, 0x7f,
++ 0x14, 0x14, 0x14, 0x24, 0x27, 0x44, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf0, 0x90, 0xd0, 0xb0,
++ 0xb0, 0x90, 0x94, 0xec, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x00, 0x01, 0x03, 0x05, 0x19,
++ 0x61, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0x00, 0x80, 0x60, 0x10,
++ 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x08, 0x0b, 0x18, 0x29, 0x48,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x90,
++ 0x90, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x12,
++ 0x13, 0x1c, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x00, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x3f, 0x01, 0x01, 0x01, 0x7f,
++ 0x01, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc,
++ 0x80, 0x80, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x11, 0x7c, 0x25, 0x24, 0x27,
++ 0x7a, 0x4b, 0x0e, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x44, 0xf8, 0x48, 0x48, 0x70, 0x40, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x5f, 0x07, 0x04, 0x07, 0x00,
++ 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0xc0, 0x40, 0xc0, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x5f, 0x0f, 0x08, 0x0f, 0x00,
++ 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0xe0, 0x20, 0xe0, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x7f, 0x04, 0x04, 0x0f, 0x08,
++ 0x18, 0x28, 0x48, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x80, 0x80, 0xf8, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0xb0, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x11, 0x11, 0x12, 0x13, 0x16,
++ 0x1a, 0x12, 0x12, 0x22, 0x22, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0x10, 0x10, 0xfc, 0x10,
++ 0x90, 0x50, 0x50, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x17, 0x38, 0x35, 0x35, 0x53,
++ 0x15, 0x19, 0x11, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0xa0, 0x20, 0xfc, 0x24,
++ 0x24, 0x24, 0x24, 0x38, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x10, 0x1f,
++ 0x70, 0x10, 0x10, 0x11, 0x16, 0x38, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x0a, 0x7f, 0x08, 0x3e, 0x2a, 0x3e, 0x2b, 0x3e,
++ 0x08, 0x7f, 0x1e, 0x12, 0x23, 0x4e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x90, 0x90, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x0c, 0x32, 0x03, 0x0c, 0x70, 0x0f, 0x08,
++ 0x0f, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x60, 0x30, 0x48, 0x80, 0x60, 0xdc, 0x00, 0x00,
++ 0xf8, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x08, 0x04, 0x3f, 0x22, 0x12, 0x12, 0x7f, 0x00,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x90, 0x90, 0xa0, 0xfc, 0x00,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x44, 0x22, 0x22, 0x03, 0x10,
++ 0x10, 0x17, 0x20, 0x20, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x70, 0x88, 0x48, 0x50, 0x00, 0xf8, 0x30,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x04, 0x04, 0x08, 0x10, 0x24, 0x04, 0x04, 0x02,
++ 0x02, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x20, 0x10, 0x08, 0x48, 0x40, 0x40, 0x80,
++ 0x80, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x08, 0x08, 0x17,
++ 0x11, 0x30, 0x50, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x10, 0x10, 0xfc,
++ 0x10, 0x90, 0x90, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x13, 0x16, 0x1a, 0x12, 0x12,
++ 0x2f, 0x29, 0x4a, 0x09, 0x0a, 0x08, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xfc, 0x90, 0x50, 0x50, 0xb0,
++ 0xf8, 0xc8, 0xa8, 0x48, 0x28, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x17, 0x11, 0x17, 0x17, 0x14,
++ 0x17, 0x13, 0x22, 0x23, 0x43, 0x02, 0x00, 0x00,
++ 0x00, 0xf0, 0xfc, 0x28, 0xe0, 0xf8, 0xf8, 0x88,
++ 0xf8, 0xf0, 0x10, 0xf0, 0xf0, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x01, 0x1f, 0x01,
++ 0x7f, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xf0, 0x00,
++ 0xfc, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x3c, 0x03, 0x7e, 0x01, 0x3d, 0x03, 0x3c,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x21, 0x00, 0x00,
++ 0x08, 0x90, 0xfc, 0xa8, 0xa8, 0xb0, 0xfc, 0x00,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x02, 0x07, 0x18, 0x61, 0x1f, 0x10, 0x1f, 0x10,
++ 0x1f, 0x10, 0x1f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x3d, 0x24, 0x24, 0x3f, 0x24, 0x3d, 0x25,
++ 0x25, 0x3d, 0x19, 0x15, 0x27, 0x40, 0x00, 0x00,
++ 0x10, 0xf8, 0x14, 0x14, 0xfc, 0x50, 0x50, 0x70,
++ 0x50, 0x50, 0x74, 0xcc, 0x0c, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x04, 0x7f, 0x04, 0x14,
++ 0x17, 0x14, 0x14, 0x2c, 0x26, 0x41, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0x20, 0x20, 0xf0, 0x28, 0x24,
++ 0xa4, 0x20, 0x20, 0x20, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xf0, 0x10,
++ 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x29, 0x29, 0x33, 0x2b, 0x25,
++ 0x25, 0x25, 0x25, 0x39, 0x21, 0x21, 0x00, 0x00,
++ 0x88, 0x88, 0x88, 0x08, 0xfc, 0x08, 0x48, 0x28,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x09, 0x09, 0x09, 0x12, 0x13, 0x35, 0x51, 0x1f,
++ 0x12, 0x12, 0x17, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x50, 0x50, 0xfc,
++ 0x50, 0x50, 0xfc, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7f, 0x16, 0x12, 0x17, 0x1a,
++ 0x72, 0x17, 0x10, 0x15, 0x14, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0xa8, 0xa8, 0xfc, 0xa8,
++ 0xa8, 0xfc, 0x00, 0x48, 0xa4, 0xa4, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x7f, 0x04, 0x04, 0x17,
++ 0x14, 0x14, 0x14, 0x17, 0x78, 0x00, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0xfc, 0x40, 0x40, 0xc0,
++ 0x40, 0x20, 0x24, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x2a, 0x7f, 0x0a, 0x3f, 0x08,
++ 0x0f, 0x12, 0x6a, 0x0d, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0xa0, 0xfc, 0xa0, 0xf8, 0x20,
++ 0xf8, 0xa0, 0xa0, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x14, 0x1f, 0x12, 0x3f, 0x22, 0x5f,
++ 0x12, 0x1f, 0x12, 0x1f, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xe8, 0x28, 0xc8,
++ 0x48, 0xc8, 0x48, 0xc8, 0x48, 0xf0, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x10, 0x1f, 0x2a, 0x4a, 0x7f,
++ 0x0a, 0x0a, 0x7f, 0x14, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xf8, 0xa0, 0xa0, 0xfc,
++ 0xa0, 0xa0, 0xfc, 0x90, 0x48, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x22, 0x12, 0x14, 0x7f, 0x00,
++ 0x3e, 0x22, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x09, 0x08, 0x7f, 0x08, 0x08,
++ 0x3e, 0x08, 0x08, 0x0e, 0x70, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x90, 0x50,
++ 0x50, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x37, 0x37,
++ 0x33, 0x53, 0x52, 0x14, 0x17, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x38, 0xc8, 0x48, 0xf8, 0x58, 0x58,
++ 0xf8, 0x6c, 0x5c, 0x7c, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x11, 0x17, 0x15, 0x15,
++ 0x17, 0x15, 0x11, 0x21, 0x2e, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0xd0, 0x10, 0x10, 0xd0, 0x50, 0x50,
++ 0xd0, 0x10, 0x54, 0xec, 0x2c, 0x04, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x0f, 0x7f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0xfc, 0x20,
++ 0xe0, 0x20, 0xe0, 0x3c, 0xe0, 0x20, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3e, 0x22, 0x23, 0x3e,
++ 0x08, 0x2f, 0x28, 0x2e, 0x38, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x78, 0xc8, 0x50, 0x30,
++ 0xc8, 0xfc, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x10, 0x10, 0x37, 0x50, 0x10,
++ 0x10, 0x10, 0x10, 0x11, 0x16, 0x18, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x48, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x3e, 0x22, 0x3e, 0x00, 0x7f,
++ 0x49, 0x7f, 0x49, 0x49, 0x7f, 0x41, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x11, 0x11, 0x21, 0x4b, 0x0d, 0x11, 0x11, 0x31,
++ 0x50, 0x11, 0x16, 0x10, 0x11, 0x1e, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x80, 0xf0, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x55, 0x55, 0x54, 0x57,
++ 0x56, 0x5f, 0x52, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x48, 0xf8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x30, 0x00, 0xf8, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x09, 0x09, 0x10, 0x1b,
++ 0x36, 0x57, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x48, 0xf8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x3e, 0x24, 0x24, 0x3c,
++ 0x24, 0x24, 0x27, 0x24, 0x24, 0x4f, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x40, 0xf8, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x11, 0x11, 0x13, 0x7d, 0x09, 0x0b, 0x13, 0x1d,
++ 0x34, 0x51, 0x16, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x80, 0xf0, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x1f, 0x12, 0x1f, 0x11, 0x29, 0x4b,
++ 0x15, 0x31, 0x50, 0x13, 0x10, 0x17, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0x90, 0xf0, 0x00, 0xfc, 0xf0,
++ 0xf0, 0xf0, 0xf0, 0xa0, 0xe0, 0x1c, 0x00, 0x00,
++ 0x12, 0x0a, 0x0a, 0x42, 0x23, 0x22, 0x03, 0x12,
++ 0x13, 0x12, 0x22, 0x24, 0x44, 0x48, 0x00, 0x00,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xb8, 0x08, 0xf8, 0x08,
++ 0xb8, 0xa8, 0xa8, 0xa8, 0xa8, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x04, 0x3f, 0x24, 0x24,
++ 0x3f, 0x24, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x90, 0x90, 0xf0, 0x90, 0x80,
++ 0xf8, 0x88, 0x88, 0x88, 0xb0, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x08, 0x08, 0x08, 0x0c,
++ 0x78, 0x08, 0x09, 0x09, 0x0f, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80,
++ 0xa0, 0x90, 0x08, 0x38, 0xc4, 0x04, 0x00, 0x00,
++ 0x11, 0x09, 0x0f, 0x41, 0x21, 0x27, 0x05, 0x15,
++ 0x17, 0x15, 0x21, 0x22, 0x42, 0x44, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x28, 0x28, 0xf8, 0x28, 0x20,
++ 0xfc, 0x24, 0x24, 0x38, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x10, 0x10, 0x30, 0x51,
++ 0x11, 0x11, 0x12, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00,
++ 0x20, 0x10, 0x08, 0x78, 0x84, 0x04, 0x00, 0x00,
++ 0x09, 0x29, 0x29, 0x29, 0x3e, 0x2a, 0x4c, 0x09,
++ 0x0d, 0x7a, 0x08, 0x08, 0x09, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0x28,
++ 0x28, 0x48, 0x48, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x48, 0x48, 0x48, 0x88, 0xfc, 0x88, 0xc8, 0xa8,
++ 0xa8, 0x88, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x07, 0x00, 0x08, 0x08, 0x10, 0x10, 0x3f, 0x42,
++ 0x02, 0x02, 0x04, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0x20, 0x20, 0x10, 0xe8, 0x24,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x4b, 0x4a, 0x4a, 0x4c, 0x49,
++ 0x49, 0x7a, 0x4c, 0x40, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0x28,
++ 0x48, 0x48, 0x48, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x03, 0x79, 0x4f, 0x49, 0x4b, 0x4a, 0x4b,
++ 0x4a, 0x7b, 0x4a, 0x43, 0x01, 0x0e, 0x00, 0x00,
++ 0x40, 0xf8, 0x50, 0xfc, 0x10, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x13, 0x11, 0x17, 0x7d, 0x13, 0x12, 0x13,
++ 0x16, 0x1b, 0x62, 0x03, 0x03, 0x1c, 0x00, 0x00,
++ 0x40, 0xf8, 0x50, 0xfc, 0x10, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x1f, 0x35, 0x37, 0x32, 0x53,
++ 0x12, 0x13, 0x12, 0x13, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0xf8, 0x50, 0xfc, 0x10, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x12, 0x13, 0x1c,
++ 0x70, 0x10, 0x11, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0xe0, 0x20, 0x20, 0x20, 0x10, 0x10, 0xf8, 0x94,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x1c, 0x1a, 0x29, 0x48, 0x01,
++ 0x09, 0x09, 0x12, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x60, 0xb0, 0x28, 0x24, 0x10,
++ 0x10, 0xa0, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x7f, 0x06, 0x1c, 0x6f, 0x1f, 0x2f, 0x08,
++ 0x0f, 0x1f, 0x11, 0x1f, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x60, 0x90, 0xfc, 0xe0, 0xe0, 0x80,
++ 0xf8, 0xf0, 0x10, 0xf0, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x08, 0x7f, 0x09, 0x1e,
++ 0x1a, 0x2a, 0x48, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0xe0, 0x20, 0xa0, 0xa0, 0x90, 0x10, 0xf8, 0x54,
++ 0x50, 0x50, 0x90, 0x90, 0x10, 0x60, 0x00, 0x00,
++ 0x09, 0x3f, 0x07, 0x19, 0x6f, 0x09, 0x0f, 0x09,
++ 0x0f, 0x3f, 0x04, 0x7f, 0x0c, 0x30, 0x00, 0x00,
++ 0x20, 0xf8, 0xc0, 0x30, 0xfc, 0x20, 0xe0, 0x20,
++ 0xe0, 0xf8, 0x40, 0xfc, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0d, 0x13, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0a, 0x00, 0x00,
++ 0xe0, 0x20, 0xa0, 0xa0, 0x90, 0x10, 0xf8, 0x54,
++ 0x50, 0x50, 0x90, 0x90, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x07,
++ 0x04, 0x18, 0x6f, 0x02, 0x04, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x70, 0x70, 0xc0,
++ 0x40, 0x30, 0xec, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x08, 0x08, 0x04, 0x04,
++ 0x02, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x2f, 0x24,
++ 0x27, 0x24, 0x27, 0x24, 0x2f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xe8, 0x48,
++ 0xc8, 0x48, 0xc8, 0x48, 0xc8, 0x58, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x3f, 0x21, 0x21, 0x22,
++ 0x22, 0x24, 0x28, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x88,
++ 0x48, 0x28, 0x28, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x0a, 0x09, 0x09, 0x17, 0x11, 0x31, 0x51, 0x1f,
++ 0x11, 0x11, 0x12, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xf8, 0x20, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x08, 0x08,
++ 0x08, 0x7f, 0x00, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0xe0, 0x00, 0x00, 0x00, 0xf8, 0x40, 0x40, 0x40,
++ 0x40, 0xfc, 0x00, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x13, 0x7e, 0x12, 0x13, 0x12,
++ 0x16, 0x1b, 0x64, 0x04, 0x09, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x04, 0xfc, 0x8c, 0x50, 0xfc, 0x50,
++ 0x50, 0xfc, 0x90, 0x90, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x49, 0x2a, 0x7f, 0x5d, 0x5b, 0x6b, 0x41,
++ 0x1f, 0x11, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xc8, 0x30, 0x30, 0xc8, 0x04,
++ 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x11, 0x09, 0x09, 0x01, 0x7f,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x10, 0x10, 0x20, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x2a, 0x1c, 0x7f, 0x5d, 0x5b, 0x69, 0x4b,
++ 0x04, 0x7f, 0x04, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xc8, 0x28, 0x30, 0xc8, 0x44,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7e, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x68,
++ 0x98, 0x98, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x7f, 0x04, 0x04, 0x24, 0x14,
++ 0x14, 0x14, 0x04, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xfc, 0x40, 0x40, 0x48, 0x48,
++ 0x50, 0x60, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x4d, 0x29, 0x2a, 0x7f,
++ 0x49, 0x5d, 0x5b, 0x6b, 0x49, 0x4b, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x7c, 0xc8, 0x48,
++ 0x28, 0x30, 0x10, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x20,
++ 0x2f, 0x21, 0x22, 0x24, 0x28, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x88,
++ 0xe8, 0x88, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x01, 0x3d, 0x25, 0x29, 0x29, 0x31, 0x29, 0x27,
++ 0x24, 0x27, 0x38, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x20, 0x24, 0x28, 0xf0, 0x20, 0x24, 0xe4, 0x5c,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x11, 0x09, 0x09, 0x01, 0x7f, 0x03, 0x03,
++ 0x05, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x20, 0x00, 0xfc, 0x80, 0x80,
++ 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x02, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xe0, 0x20, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x12, 0x33, 0x52, 0x12,
++ 0x17, 0x16, 0x1a, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x10, 0x90, 0xfc, 0xa8, 0xa8, 0xa8, 0x7c, 0x10,
++ 0x90, 0xfc, 0x90, 0x90, 0x90, 0x10, 0x00, 0x00,
++ 0x00, 0x1e, 0x13, 0x1e, 0x10, 0x3f, 0x32, 0x5f,
++ 0x12, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x50, 0xfc, 0x20, 0xfc,
++ 0x20, 0x20, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2b, 0x2a, 0x0a, 0x1b,
++ 0x2a, 0x4b, 0x16, 0x16, 0x2b, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0x90, 0xfc, 0xa8, 0xb0,
++ 0x7c, 0x90, 0xfc, 0x90, 0x90, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x3e, 0x08, 0x0f, 0x70, 0x00,
++ 0x7f, 0x02, 0x07, 0x1c, 0x67, 0x04, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x00,
++ 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x21, 0x21, 0x3f, 0x29, 0x08,
++ 0x0f, 0x09, 0x11, 0x11, 0x21, 0x46, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x49, 0x2a, 0x7f, 0x49, 0x5d, 0x6b, 0x4f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x7c, 0xc8, 0x30, 0xd0, 0xec, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x12, 0x1f, 0x00, 0x1f,
++ 0x10, 0x14, 0x12, 0x22, 0x20, 0x43, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x90, 0xfc,
++ 0x48, 0x48, 0x30, 0x34, 0xcc, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x5f, 0x11, 0x12, 0x14,
++ 0x10, 0x1f, 0x10, 0x13, 0x1c, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x90, 0xf0, 0x10, 0x90, 0x50,
++ 0x88, 0x90, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x13, 0x12, 0x33, 0x52, 0x13,
++ 0x16, 0x16, 0x1b, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0xa8, 0xa8, 0xf8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x12, 0x12, 0x24, 0x4a,
++ 0x03, 0x04, 0x1a, 0x01, 0x06, 0x78, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x50, 0x48, 0xc4, 0x04,
++ 0xe0, 0x40, 0x80, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x08, 0x0f,
++ 0x08, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0xe0,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x7f, 0x00, 0x1f, 0x10, 0x1f,
++ 0x10, 0x1f, 0x29, 0x2f, 0x49, 0x09, 0x00, 0x00,
++ 0x40, 0xfc, 0x90, 0xfc, 0x00, 0xf8, 0x08, 0xf8,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0x58, 0x00, 0x00,
++ 0x10, 0x13, 0x14, 0x65, 0x19, 0x19, 0x25, 0x7f,
++ 0x11, 0x3b, 0x37, 0x35, 0x51, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xfc,
++ 0x54, 0xfc, 0x54, 0x54, 0x54, 0x0c, 0x00, 0x00,
++ 0x00, 0x20, 0x17, 0x10, 0x00, 0x00, 0x70, 0x11,
++ 0x11, 0x12, 0x14, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x08,
++ 0x08, 0x08, 0x30, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x23, 0x12, 0x12, 0x03, 0x03, 0x72, 0x12,
++ 0x12, 0x14, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0x90, 0x60,
++ 0x20, 0xd0, 0x08, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x27, 0x10, 0x13, 0x02, 0x03, 0x72, 0x13,
++ 0x16, 0x17, 0x1a, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0x18, 0xfc, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x13, 0x12, 0x33, 0x52, 0x13,
++ 0x12, 0x11, 0x10, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x40, 0x80, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2a, 0x2a, 0x3e,
++ 0x2c, 0x0c, 0x15, 0x16, 0x24, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x88, 0x88, 0x08, 0x34, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x13, 0x7d, 0x25, 0x25, 0x25,
++ 0x79, 0x48, 0x0c, 0x14, 0x21, 0x46, 0x00, 0x00,
++ 0x40, 0x78, 0x90, 0x20, 0xf8, 0x48, 0x48, 0xf8,
++ 0x68, 0x60, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x3f, 0x04, 0x04, 0x04,
++ 0x7f, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x40, 0x30, 0xc8, 0x40, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x28, 0x28, 0x7c, 0x29, 0x39, 0x13, 0x7d, 0x55,
++ 0x55, 0x7d, 0x11, 0x7d, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0xfc, 0x90, 0x7c, 0x54, 0x7c, 0x54, 0x7c,
++ 0x54, 0x50, 0x20, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x32, 0x50, 0x17,
++ 0x10, 0x11, 0x12, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x48, 0x40, 0xfc,
++ 0xe0, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x17, 0x1a, 0x29, 0x7f, 0x09, 0x7f,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x28, 0x24, 0xfc, 0x20, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0xa8, 0xf8, 0xa8, 0xa8, 0x98, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x3f, 0x21, 0x2f, 0x29, 0x2f,
++ 0x29, 0x2f, 0x29, 0x29, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xf8, 0x08, 0xe8, 0x28, 0xe8,
++ 0x28, 0xe8, 0x28, 0x68, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7c, 0x13, 0x12, 0x12, 0x1f,
++ 0x72, 0x12, 0x13, 0x12, 0x12, 0x32, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x09, 0x09, 0x7f, 0x01, 0x09,
++ 0x09, 0x11, 0x23, 0x01, 0x06, 0x78, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x20,
++ 0x10, 0x28, 0x48, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x11, 0x1f,
++ 0x11, 0x11, 0x1f, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x20, 0x10, 0xfc, 0x00, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0xf0, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x0b, 0x0a, 0x16, 0x3b,
++ 0x56, 0x16, 0x13, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x28, 0x24, 0xfc, 0x20, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0xa8, 0xf8, 0xa8, 0xa8, 0xb8, 0x00, 0x00,
++ 0x04, 0x18, 0x77, 0x10, 0x13, 0x7e, 0x13, 0x1a,
++ 0x37, 0x34, 0x52, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xa8, 0x84, 0x94, 0x70, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x7f, 0x05, 0x1f, 0x61, 0x06, 0x18, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0xfc, 0x40, 0xf0, 0x2c, 0x20, 0xc0, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x7f, 0x19, 0x6f, 0x01, 0x3f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0xfc, 0x30, 0xec, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x7f, 0x0a, 0x1b, 0x6a, 0x12, 0x06, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0xfc, 0x20, 0x50, 0xac, 0xa0, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x21, 0x26, 0x40, 0x00, 0x00,
++ 0x80, 0x90, 0x88, 0xfc, 0x80, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x64, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x0f, 0x0f, 0x7f,
++ 0x07, 0x1c, 0x67, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0xe0, 0xfc,
++ 0xc0, 0x70, 0xcc, 0x40, 0xc0, 0x40, 0x00, 0x00,
++ 0x00, 0x0f, 0x09, 0x08, 0x08, 0x7f, 0x12, 0x11,
++ 0x11, 0x10, 0x3f, 0x20, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x90, 0x90, 0xfc, 0x10, 0x10,
++ 0x10, 0x10, 0xfc, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x17, 0x09, 0x49, 0x21,
++ 0x29, 0x09, 0x17, 0x11, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x58, 0xfc, 0xf0, 0x50, 0xf0,
++ 0x50, 0xf0, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x01, 0x3f, 0x08, 0x04, 0x7f,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x20, 0x40, 0xfc,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x0a, 0x0a, 0x0a, 0x1f, 0x12, 0x32, 0x53, 0x12,
++ 0x12, 0x12, 0x14, 0x14, 0x18, 0x13, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xa0, 0x7c, 0x48, 0xc8, 0xa8,
++ 0xa8, 0xb0, 0x90, 0xb0, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x10, 0x13, 0x30, 0x57, 0x11,
++ 0x13, 0x14, 0x13, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xf8, 0xa0, 0xfc, 0x50,
++ 0xf8, 0x44, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x1f, 0x10, 0x3f, 0x40, 0x00,
++ 0x1f, 0x10, 0x10, 0x10, 0x10, 0x0f, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x88, 0x88, 0x88,
++ 0x88, 0xb0, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x11, 0x01, 0x7f,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0xfc,
++ 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x08, 0x7f, 0x22, 0x12, 0x14,
++ 0x7f, 0x08, 0x3e, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xb0, 0x80, 0xf8, 0xc8,
++ 0xa8, 0xb0, 0x90, 0xb0, 0xc8, 0x84, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x1f, 0x02, 0x7f, 0x09,
++ 0x17, 0x61, 0x1f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x80, 0xfc, 0x20,
++ 0xd0, 0x0c, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x40, 0x1f, 0x01, 0x01,
++ 0x1f, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0xf0, 0x00, 0x00,
++ 0xf0, 0x00, 0x20, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x10, 0x54, 0x57, 0x57, 0x54,
++ 0x55, 0x7c, 0x47, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0xf8, 0x90, 0x60, 0xb0, 0x4c, 0xf8, 0x40,
++ 0xf0, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x11, 0x1f, 0x02, 0x07, 0x3c, 0x03, 0x0d, 0x77,
++ 0x01, 0x0f, 0x01, 0x3f, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0xf0, 0x00, 0xe0, 0x40, 0x80, 0x60, 0xdc,
++ 0x00, 0xe0, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x1f, 0x00, 0x1e, 0x12, 0x1e,
++ 0x12, 0x1e, 0x12, 0x22, 0x22, 0x47, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0xf0, 0x00, 0x78, 0x48, 0x78,
++ 0x48, 0x78, 0x48, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x11, 0x11, 0x12, 0x17, 0x18,
++ 0x13, 0x12, 0x12, 0x22, 0x22, 0x41, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf8, 0x08, 0xc8, 0x48,
++ 0xc8, 0x70, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7e, 0x13, 0x14, 0x10, 0x1f,
++ 0x72, 0x12, 0x12, 0x12, 0x12, 0x31, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0xc8, 0x48, 0x48, 0xc8,
++ 0x48, 0x30, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x11, 0x10, 0x1f, 0x11,
++ 0x33, 0x54, 0x13, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xf0, 0xa0, 0xfc, 0x50,
++ 0xf8, 0x44, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x08, 0x0f, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x43, 0x0e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x88, 0x88, 0x48,
++ 0x50, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x02, 0x02, 0x03, 0x02,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0xe0, 0x00, 0x00,
++ 0x00, 0x1e, 0x12, 0x12, 0x12, 0x1e, 0x12, 0x12,
++ 0x1e, 0x12, 0x12, 0x22, 0x23, 0x46, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x48, 0x78, 0x48, 0x48,
++ 0x78, 0x48, 0x88, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x43, 0x20, 0x20, 0x07, 0x00,
++ 0x08, 0x08, 0x10, 0x11, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x90, 0x88, 0x38, 0xc4, 0x04, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x43, 0x22, 0x27, 0x08, 0x03,
++ 0x0a, 0x0a, 0x12, 0x12, 0x22, 0x21, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0xc8, 0x48, 0xc8,
++ 0x70, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f, 0x3f, 0x00,
++ 0x01, 0x01, 0x03, 0x14, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0xf8, 0x60,
++ 0x80, 0x00, 0x00, 0x90, 0x48, 0x44, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x11, 0x13, 0x20, 0x3c, 0x65,
++ 0x25, 0x25, 0x25, 0x3d, 0x25, 0x20, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x08, 0xe8, 0x28, 0x28, 0xe8,
++ 0x30, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x12, 0x15, 0x65, 0x28, 0x18, 0x27, 0x7d,
++ 0x19, 0x35, 0x35, 0x31, 0x52, 0x14, 0x00, 0x00,
++ 0x20, 0x38, 0xc8, 0x30, 0xe8, 0x24, 0xf8, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0xe0, 0x3c, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x3d, 0x26, 0x24, 0x3d,
++ 0x25, 0x25, 0x25, 0x25, 0x25, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x04, 0xe4, 0x24, 0x24, 0xe4,
++ 0x38, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x01, 0x7f, 0x01,
++ 0x01, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xfc, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x7c, 0x44, 0x44, 0x7c,
++ 0x44, 0x44, 0x7c, 0x44, 0x41, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x88, 0x88, 0xf8,
++ 0x88, 0x88, 0xf8, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x21, 0x1f, 0x10, 0x03, 0x7f,
++ 0x10, 0x13, 0x10, 0x17, 0x2c, 0x43, 0x00, 0x00,
++ 0x40, 0xfc, 0xc0, 0xf0, 0x20, 0xe0, 0x5c, 0xf8,
++ 0x40, 0xf8, 0x40, 0xfc, 0x40, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x28, 0x0c, 0x0b, 0x0e, 0x70, 0x00, 0x00, 0x00,
++ 0x40, 0x78, 0xd0, 0x20, 0x70, 0xac, 0xf8, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x7f, 0x09, 0x09, 0x11, 0x77, 0x11, 0x16,
++ 0x11, 0x03, 0x0c, 0x74, 0x07, 0x18, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0x10, 0xf0, 0xfc, 0x50, 0x4c,
++ 0x40, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x25, 0x3e, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x78, 0x48,
++ 0x48, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x02, 0x1f, 0x12, 0x1f, 0x12, 0x1f, 0x00, 0x7f,
++ 0x0f, 0x08, 0x0f, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x80, 0xf0, 0x90, 0xf0, 0x90, 0xf0, 0x00, 0xfc,
++ 0xe0, 0x20, 0xe0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x04, 0x3f, 0x04, 0x04,
++ 0x7f, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0x78, 0xc8, 0x50, 0x50, 0xe0, 0x50, 0x48,
++ 0xc4, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x13, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1d, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x40, 0x78, 0xd0, 0x20, 0x70, 0xac, 0xf8, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x0c, 0x12, 0x2a, 0x49, 0x3e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x24, 0x26, 0x3a, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0xe8, 0x28, 0x28, 0xe8,
++ 0xb0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x12, 0x17, 0x14, 0x17,
++ 0x17, 0x17, 0x14, 0x27, 0x2d, 0x52, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xd0, 0x50, 0xd0,
++ 0xd0, 0xf4, 0x0c, 0xfc, 0x54, 0xe4, 0x00, 0x00,
++ 0x00, 0x3f, 0x2d, 0x2d, 0x2d, 0x3f, 0x2d, 0x2d,
++ 0x2d, 0x3f, 0x2d, 0x2d, 0x2d, 0x5b, 0x00, 0x00,
++ 0x10, 0x20, 0x78, 0x48, 0x78, 0x48, 0x78, 0x7c,
++ 0x40, 0x7c, 0x34, 0xf4, 0xc4, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x3f, 0x01, 0x01, 0x1f, 0x00, 0x00,
++ 0x00, 0x09, 0x0e, 0x14, 0x23, 0x40, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0x00, 0x00, 0xf0, 0x10, 0x20,
++ 0x40, 0x80, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x11, 0x10, 0x37, 0x54, 0x1f,
++ 0x10, 0x10, 0x10, 0x11, 0x16, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0xfc, 0x44, 0xfc,
++ 0x40, 0xf8, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x11, 0x09, 0x0a, 0x7f, 0x00,
++ 0x1f, 0x11, 0x11, 0x11, 0x1f, 0x11, 0x00, 0x00,
++ 0x08, 0x48, 0xc8, 0x48, 0x48, 0x48, 0xc8, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x17, 0x7c, 0x10, 0x10, 0x10,
++ 0x10, 0x1c, 0x61, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x78,
++ 0x88, 0x88, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x09, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x11, 0x22, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x40, 0x40, 0x78, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x56, 0x57, 0x55, 0x55,
++ 0x55, 0x55, 0x59, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x08, 0x08, 0x08, 0x07, 0x01,
++ 0x04, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xf0, 0x00,
++ 0x80, 0x90, 0x08, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x17, 0x39, 0x35, 0x35, 0x51,
++ 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f,
++ 0x10, 0x10, 0x11, 0x22, 0x2c, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x80, 0xfc,
++ 0x80, 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x3f, 0x04,
++ 0x7f, 0x09, 0x15, 0x67, 0x19, 0x03, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xf8, 0x40,
++ 0xfc, 0x20, 0x50, 0xcc, 0x30, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x20, 0x20, 0x20, 0x1f, 0x02,
++ 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x30,
++ 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x0f, 0x08, 0x0f, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xe0, 0x20, 0xe0, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x7e, 0x09, 0x1c, 0x1b, 0x1b,
++ 0x2b, 0x2c, 0x4b, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0xa0, 0xfc, 0x50,
++ 0xf8, 0x44, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x3f, 0x20, 0x3f, 0x2f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0xe8, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7d,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x40, 0x40, 0x78, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x3c, 0x24, 0x24, 0x3c,
++ 0x24, 0x24, 0x24, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x78, 0x48,
++ 0x48, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x01, 0x39, 0x2f, 0x29, 0x2f, 0x38, 0x2b, 0x2a,
++ 0x3b, 0x2a, 0x29, 0x29, 0x2e, 0x58, 0x00, 0x00,
++ 0x08, 0x08, 0xd0, 0x10, 0xe0, 0x08, 0xc8, 0x50,
++ 0xe4, 0x44, 0x88, 0xc8, 0x10, 0x20, 0x00, 0x00,
++ 0x01, 0x39, 0x03, 0x7d, 0x01, 0x3d, 0x01, 0x3c,
++ 0x03, 0x3c, 0x25, 0x26, 0x3c, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xf0, 0x10, 0xf0, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x04, 0x18, 0x6a, 0x25, 0x19, 0x69, 0x0d, 0x15,
++ 0x65, 0x0c, 0x14, 0x64, 0x05, 0x1a, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8,
++ 0x68, 0x60, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x06, 0x38, 0x24, 0x26, 0x3a, 0x6f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x88, 0xf8, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7f,
++ 0x09, 0x2a, 0x1d, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0x50, 0x88, 0xf4, 0xa0, 0xa0, 0xf8,
++ 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x2b, 0x28, 0x30, 0x28, 0x24,
++ 0x24, 0x24, 0x24, 0x39, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x78, 0x48,
++ 0x48, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x48, 0x48, 0x4f, 0x48, 0x48,
++ 0x48, 0x78, 0x48, 0x41, 0x06, 0x18, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x48, 0x40, 0xfc, 0x40, 0x40,
++ 0x60, 0xa0, 0x90, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7f, 0x0a, 0x4a, 0x2c, 0x28,
++ 0x7f, 0x0c, 0x12, 0x12, 0x20, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x7c, 0x04, 0x04, 0x04,
++ 0x04, 0x1c, 0x64, 0x04, 0x04, 0x04, 0x00, 0x00,
++ 0x80, 0x80, 0x88, 0x88, 0x90, 0xa0, 0xc0, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x0a, 0x09, 0x17, 0x11, 0x30, 0x57, 0x10,
++ 0x13, 0x10, 0x17, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0xa0, 0xa8, 0xb0, 0xfc, 0x10, 0xa0, 0xfc, 0x40,
++ 0xf8, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x02,
++ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20,
++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x1f, 0x01,
++ 0x7f, 0x15, 0x2f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xf0, 0x00,
++ 0xfc, 0x50, 0xe8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x7f, 0x11, 0x10, 0x13, 0x1c,
++ 0x71, 0x10, 0x17, 0x10, 0x13, 0x3c, 0x00, 0x00,
++ 0xa0, 0xa8, 0xb0, 0xfc, 0x10, 0xa0, 0xf8, 0x40,
++ 0xf0, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x18, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x60, 0x50, 0x48, 0x44,
++ 0x44, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x28, 0x28, 0x3e, 0x29, 0x29, 0x4a,
++ 0x0e, 0x78, 0x08, 0x08, 0x09, 0x0e, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90,
++ 0x50, 0x60, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x78, 0x4b, 0x48, 0x7f, 0x49, 0x49, 0x7a,
++ 0x4c, 0x4b, 0x78, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0x20, 0x24, 0x5c,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x19, 0x71, 0x11, 0x11, 0x7d, 0x10, 0x19,
++ 0x36, 0x35, 0x50, 0x11, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x40, 0x58,
++ 0x64, 0x90, 0x60, 0x88, 0x30, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x08, 0x3f, 0x22, 0x7e, 0x04,
++ 0x08, 0x0e, 0x78, 0x08, 0x09, 0x1a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x41, 0x21, 0x22, 0x04, 0x0b,
++ 0x09, 0x10, 0x10, 0x20, 0x21, 0x2e, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0xf0,
++ 0x10, 0x90, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x08, 0x0e, 0x12, 0x13, 0x2a,
++ 0x45, 0x05, 0x09, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x50, 0x88, 0x8c, 0xf4, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x13, 0x7e, 0x12, 0x12, 0x12,
++ 0x16, 0x1b, 0x65, 0x05, 0x09, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x04, 0xfc, 0x20, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0x24, 0x24, 0x24, 0xfc, 0x04, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x55, 0x55, 0x56, 0x55,
++ 0x57, 0x54, 0x58, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x48, 0x50,
++ 0xfc, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x04, 0x09, 0x1f, 0x61, 0x05,
++ 0x04, 0x7f, 0x04, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x20, 0xf0, 0x0c, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x03, 0x05, 0x05,
++ 0x09, 0x11, 0x2f, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x80, 0x40, 0x40,
++ 0x20, 0x10, 0xe8, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x06, 0x7b, 0x2a, 0x1c, 0x7f, 0x1c, 0x1a, 0x2a,
++ 0x7e, 0x2b, 0x3e, 0x2a, 0x3e, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x68, 0xd8, 0xd8, 0x48,
++ 0xd8, 0x68, 0x48, 0x48, 0x48, 0xd8, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x0a, 0x09, 0x09,
++ 0x09, 0x08, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x03, 0x08, 0x08, 0x1f, 0x21, 0x42, 0x0c, 0x30,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0xc0, 0x40, 0x20, 0xf0, 0x28, 0x24, 0x20, 0xc0,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x17, 0x1a, 0x12, 0x17,
++ 0x10, 0x17, 0x20, 0x3f, 0x40, 0x01, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xfc, 0x38, 0xd4, 0x30, 0xc0,
++ 0x80, 0xf8, 0x80, 0xfc, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x1f, 0x17, 0x1a, 0x12,
++ 0x17, 0x10, 0x23, 0x2e, 0x43, 0x02, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0xfc, 0x38, 0xd4, 0x90,
++ 0xfc, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x1f, 0x12, 0x1f, 0x17, 0x1a, 0x17, 0x14,
++ 0x17, 0x17, 0x25, 0x22, 0x4c, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xfc, 0x70, 0xa8, 0xf4, 0x90,
++ 0xf0, 0xf0, 0xa8, 0xfc, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x12, 0x1f, 0x12, 0x17,
++ 0x16, 0x1a, 0x13, 0x22, 0x42, 0x02, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0x20, 0xfc, 0x20, 0x70,
++ 0xf0, 0xa8, 0x24, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x13,
++ 0x10, 0x1f, 0x60, 0x00, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x09, 0x7e, 0x12, 0x13, 0x12,
++ 0x3c, 0x24, 0x07, 0x0a, 0x12, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x70,
++ 0x70, 0xa8, 0x24, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4b, 0x48, 0x48, 0x7f, 0x48,
++ 0x48, 0x49, 0x7a, 0x4c, 0x48, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0xe0,
++ 0xe0, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x1a, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x10, 0x2f, 0x49, 0x09, 0x7f,
++ 0x09, 0x09, 0x1f, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xe0, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0xf8, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4a, 0x4b, 0x4a, 0x4a, 0x4b,
++ 0x48, 0x7b, 0x48, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x7e, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x0f, 0x09, 0x0e, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xfc, 0x90, 0x08, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x0f, 0x08, 0x0f, 0x7f,
++ 0x05, 0x1f, 0x69, 0x09, 0x09, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0xe0, 0x20, 0xe0, 0xfc,
++ 0x40, 0xf0, 0x2c, 0x20, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x24, 0x27, 0x24, 0x25, 0x4e, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x1a, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x48, 0x40, 0x60, 0x60,
++ 0x60, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x40, 0x78, 0xc8, 0xf8,
++ 0x48, 0x78, 0x48, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x3c, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3b, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x88, 0x50, 0xfc, 0x30, 0xf8, 0xb8, 0xd8, 0xf8,
++ 0xf8, 0x10, 0xfc, 0x90, 0x50, 0x30, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x12, 0x12, 0x3e, 0x35,
++ 0x34, 0x51, 0x51, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0xfc, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xfc, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x02, 0x02, 0x12, 0x12,
++ 0x22, 0x42, 0x04, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x40, 0x40, 0x50, 0x48,
++ 0x44, 0x44, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x30, 0x53, 0x10,
++ 0x10, 0x17, 0x10, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x00, 0xf8, 0x40,
++ 0x40, 0xfc, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02,
++ 0x02, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x13, 0x1c,
++ 0x70, 0x11, 0x12, 0x14, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0xe0,
++ 0xe0, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x1f, 0x01,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x00,
++ 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x20, 0x20, 0x03, 0x08,
++ 0x08, 0x09, 0x11, 0x12, 0x24, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0xe0,
++ 0xe0, 0x50, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x01, 0x21, 0x11, 0x12, 0x07, 0x00, 0x70, 0x11,
++ 0x12, 0x12, 0x11, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x40, 0x80, 0x00,
++ 0x04, 0x04, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x32, 0x52, 0x12,
++ 0x14, 0x14, 0x18, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x28, 0x20, 0x90,
++ 0x50, 0x48, 0x04, 0x80, 0x60, 0x10, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x29, 0x2b, 0x3b, 0x25,
++ 0x2b, 0x3f, 0x25, 0x2f, 0x35, 0x25, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0xd8, 0xd8,
++ 0xf8, 0x68, 0x58, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x13, 0x16, 0x1b, 0x12,
++ 0x13, 0x10, 0x27, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xfc, 0x30, 0xd8, 0xf4, 0x10,
++ 0xf0, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02,
++ 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x35, 0x35, 0x33, 0x52,
++ 0x13, 0x17, 0x10, 0x10, 0x11, 0x1e, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xf8, 0xa8,
++ 0xf8, 0xf8, 0x90, 0x60, 0xb0, 0x0c, 0x00, 0x00,
++ 0x21, 0x11, 0x1f, 0x41, 0x2f, 0x20, 0x0f, 0x18,
++ 0x1a, 0x2a, 0x2b, 0x4a, 0x48, 0x48, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0xfc, 0x80, 0xf8, 0x88,
++ 0xa8, 0xa8, 0xe8, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x07, 0x15,
++ 0x17, 0x23, 0x21, 0x40, 0x41, 0x4e, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xf8, 0x28,
++ 0xf8, 0xf0, 0x20, 0xc0, 0xe0, 0x1c, 0x00, 0x00,
++ 0x04, 0x7f, 0x0f, 0x08, 0x0f, 0x0f, 0x1f, 0x12,
++ 0x1f, 0x3f, 0x04, 0x02, 0x07, 0x78, 0x00, 0x00,
++ 0x40, 0xfc, 0xe0, 0x20, 0xe0, 0xe0, 0xf0, 0x90,
++ 0xf0, 0xe0, 0x40, 0x80, 0x80, 0x78, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x48, 0x48, 0x4f, 0x48, 0x48,
++ 0x49, 0x7a, 0x4c, 0x48, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0xe0, 0xe0,
++ 0x50, 0x48, 0x44, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x01, 0x03,
++ 0x05, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x80,
++ 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x10, 0x3e, 0x2a, 0x3e, 0x2b, 0x3e, 0x2c,
++ 0x0d, 0x0d, 0x16, 0x17, 0x24, 0x43, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x70, 0x70,
++ 0xa8, 0x24, 0xa0, 0xa0, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x1f, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10,
++ 0x00, 0x00, 0x00, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x4d, 0x3f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x08, 0x7f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0xfc, 0xa0, 0x30, 0xf8, 0x20, 0xe0, 0x20,
++ 0xe0, 0x20, 0xfc, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x11, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x24, 0x24, 0xfc, 0x24, 0x24, 0xfc,
++ 0x24, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x45, 0x15, 0x14, 0x25,
++ 0x07, 0x19, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x50, 0x48, 0x84, 0x24,
++ 0xe0, 0x00, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x23, 0x54, 0x15, 0x27, 0x19,
++ 0x0f, 0x09, 0x0f, 0x01, 0x01, 0x3e, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0x90, 0x28, 0xe4, 0x00,
++ 0xe0, 0x20, 0xe0, 0x20, 0xf0, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x40, 0x23, 0x20, 0x07, 0x11,
++ 0x13, 0x14, 0x23, 0x20, 0x41, 0x46, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0xa0, 0xfc, 0x10,
++ 0xe8, 0x44, 0xf8, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x01, 0x7f, 0x0f, 0x08, 0x7f,
++ 0x08, 0x0f, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xfc, 0xe0, 0x20, 0xfc,
++ 0x20, 0xe0, 0x88, 0x50, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x18, 0x70, 0x11, 0x12, 0x7c, 0x13, 0x18,
++ 0x34, 0x34, 0x52, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xe8, 0x04, 0xf8, 0x10,
++ 0x60, 0x28, 0xa4, 0x84, 0x90, 0x70, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x25, 0x3d,
++ 0x25, 0x25, 0x25, 0x26, 0x26, 0x4c, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0x0c, 0x70, 0x64, 0x64, 0x68,
++ 0x50, 0x50, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x13,
++ 0x3d, 0x24, 0x06, 0x0a, 0x10, 0x23, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xb0, 0xa8, 0xa8, 0xa4, 0x2c,
++ 0x28, 0x70, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x08, 0x4a, 0x2b, 0x2c, 0x08, 0x7f, 0x08, 0x1c,
++ 0x1b, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0xf8, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x10, 0x1f,
++ 0x10, 0x10, 0x10, 0x16, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x88, 0x80, 0xfc,
++ 0x40, 0x40, 0x24, 0x14, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x79, 0x49, 0x49, 0x79, 0x49, 0x49, 0x79,
++ 0x49, 0x49, 0x79, 0x49, 0x41, 0x06, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x10, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x04, 0x19, 0x0a, 0x7e, 0x0a, 0x1b,
++ 0x1c, 0x2b, 0x48, 0x08, 0x09, 0x1a, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x90, 0x50, 0x20, 0xd0, 0x4c,
++ 0x40, 0xf8, 0x48, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x12, 0x1f, 0x00, 0x3f,
++ 0x21, 0x43, 0x1e, 0x01, 0x03, 0x3c, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x90, 0xf0, 0x00, 0xfc,
++ 0x08, 0xe0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x1a, 0x2a, 0x7f, 0x0a, 0x0a,
++ 0x0a, 0x7f, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0xa0, 0xa0, 0xf8, 0xa0, 0xa0,
++ 0xa0, 0xfc, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x04, 0x3f, 0x09, 0x0f, 0x11,
++ 0x21, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x40, 0x20, 0xf0, 0x08, 0x00, 0xf0, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x02, 0x01, 0x00, 0x7f, 0x00, 0x01,
++ 0x02, 0x04, 0x18, 0x60, 0x00, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x20, 0x40, 0x80, 0xfc, 0x88, 0x90,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x01, 0x3e,
++ 0x14, 0x7f, 0x1b, 0x2c, 0x48, 0x19, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x40, 0x7c,
++ 0xd0, 0x70, 0xac, 0xf8, 0x48, 0x98, 0x00, 0x00,
++ 0x04, 0x3e, 0x05, 0x04, 0x7f, 0x14, 0x14, 0x3c,
++ 0x34, 0x34, 0x36, 0x3f, 0x63, 0x02, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x08, 0x18, 0x1c, 0x1a,
++ 0x2a, 0x28, 0x48, 0x09, 0x0a, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x00, 0xf8, 0x88, 0x88, 0xf8,
++ 0x20, 0xb0, 0xa8, 0x24, 0x24, 0x60, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x11, 0x7d, 0x25, 0x26, 0x25,
++ 0x75, 0x49, 0x0d, 0x15, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x50, 0x78, 0xc0, 0x3c, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3a, 0x24, 0x06, 0x0a, 0x10, 0x23, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8,
++ 0xa4, 0xa8, 0x90, 0xb0, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x01, 0x7f, 0x00, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0x00, 0xfc, 0x00, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x02, 0x02, 0x07, 0x04, 0x0c, 0x12, 0x21, 0x02,
++ 0x07, 0x1c, 0x64, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0x40, 0x80, 0x00, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x18, 0x6f, 0x00, 0x3c, 0x24,
++ 0x24, 0x24, 0x3c, 0x24, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x30, 0xec, 0x00, 0xf8, 0x88,
++ 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x7c, 0x44, 0x44, 0x44, 0x7c, 0x44, 0x44,
++ 0x44, 0x7c, 0x45, 0x41, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0x88, 0xf8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x02,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x18,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x24, 0x12, 0x12, 0x00, 0x0f, 0x71, 0x11,
++ 0x12, 0x14, 0x10, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0x90, 0x90, 0xa0, 0x80, 0xf8, 0xc0, 0xa0,
++ 0x90, 0x88, 0x80, 0x80, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2b, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x90, 0x50, 0x20, 0x40,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4b, 0x4a, 0x4b, 0x4b,
++ 0x4a, 0x7b, 0x4a, 0x45, 0x05, 0x08, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xfc, 0xa4, 0x54, 0x04, 0x18, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x10, 0x7d, 0x27, 0x24, 0x24,
++ 0x77, 0x48, 0x0c, 0x14, 0x27, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xa0, 0x10, 0xf8, 0x48, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x28, 0x28, 0x28, 0x3e, 0x28, 0x48, 0x08,
++ 0x0e, 0x78, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x88, 0x88, 0x90, 0xa0, 0xc0,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x24, 0x27, 0x05, 0x17,
++ 0x17, 0x15, 0x25, 0x2a, 0x4c, 0x50, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0xe8, 0x28, 0x68,
++ 0xb0, 0x10, 0xb0, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x04, 0x07, 0x08, 0x11, 0x7f, 0x11, 0x11, 0x1f,
++ 0x12, 0x02, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0xc0, 0x80, 0x00, 0xf0, 0x10, 0x10, 0xf0,
++ 0x90, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x29, 0x29, 0x49, 0x09, 0x09, 0x08, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x20,
++ 0xfc, 0x24, 0x24, 0x24, 0x38, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x15, 0x65, 0x19, 0x19, 0x25, 0x7c,
++ 0x13, 0x3a, 0x36, 0x32, 0x52, 0x10, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x40,
++ 0xf8, 0x48, 0x48, 0x48, 0x70, 0x40, 0x00, 0x00,
++ 0x10, 0x17, 0x14, 0x64, 0x1b, 0x1a, 0x26, 0x7e,
++ 0x12, 0x3a, 0x36, 0x36, 0x53, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0xf8, 0xa8, 0xa8, 0xe8,
++ 0xa8, 0xe8, 0xa8, 0xa8, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x02, 0x3f, 0x24, 0x24, 0x27,
++ 0x24, 0x27, 0x24, 0x24, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x48, 0x48, 0xc8,
++ 0x48, 0xc8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x09, 0x7e, 0x08, 0x3f, 0x09, 0x7f, 0x11,
++ 0x1d, 0x25, 0x55, 0x09, 0x16, 0x61, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0xfc, 0x54, 0x74, 0x54,
++ 0x74, 0x54, 0xfc, 0x04, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7c, 0x11, 0x11, 0x19, 0x11,
++ 0x31, 0x50, 0x17, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0xa0, 0xa0, 0xfc, 0xa0, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x7e, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x28, 0x4f, 0x08, 0x09, 0x0e, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x01, 0x01, 0x1f, 0x11,
++ 0x10, 0x10, 0x10, 0x10, 0x21, 0x46, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x10, 0x08, 0xfc, 0x00,
++ 0x90, 0x90, 0x60, 0x64, 0x9c, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x08, 0x08, 0x07, 0x01, 0x02,
++ 0x7f, 0x04, 0x0f, 0x10, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x00, 0x00,
++ 0xfc, 0x20, 0x40, 0xc0, 0x30, 0x08, 0x00, 0x00,
++ 0x1f, 0x00, 0x01, 0x01, 0x7f, 0x01, 0x03, 0x1f,
++ 0x12, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0xf0, 0x60, 0x80, 0x00, 0xfc, 0x00, 0x00, 0xf0,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x1e, 0x02, 0x02, 0x3f, 0x02, 0x02,
++ 0x7f, 0x02, 0x02, 0x02, 0x02, 0x01, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
++ 0xfc, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x08, 0x4b, 0x30, 0x10, 0x37, 0x48, 0x08, 0x1b,
++ 0x2a, 0x4a, 0x0a, 0x0a, 0x0f, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0x60, 0xfc, 0x40, 0xc0, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x08, 0x07, 0x00, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x17, 0x66, 0x1a, 0x1b, 0x26, 0x7f,
++ 0x12, 0x3a, 0x36, 0x36, 0x52, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xa8, 0xc8, 0xf8, 0x48, 0xf8,
++ 0x88, 0x88, 0x88, 0x78, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x7e, 0x09, 0x7e, 0x08,
++ 0x1d, 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x58, 0xe0, 0x40, 0x5c,
++ 0xe0, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x2f, 0x40, 0x7f, 0x03,
++ 0x3d, 0x06, 0x39, 0x06, 0x78, 0x03, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0xe8, 0x00, 0xfc, 0x48,
++ 0xd0, 0xa0, 0x90, 0x88, 0x84, 0x00, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x1f, 0x10, 0x37, 0x50, 0x17,
++ 0x10, 0x17, 0x15, 0x15, 0x17, 0x15, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x28, 0x30, 0xfc, 0x20, 0x78,
++ 0xc8, 0x78, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x03, 0x03, 0x05,
++ 0x09, 0x11, 0x21, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x80, 0x80, 0x40,
++ 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x25, 0x3f, 0x25, 0x3f, 0x04, 0x3f,
++ 0x06, 0x78, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x30, 0x28, 0x28, 0xfc, 0x20, 0x20, 0x50, 0x50,
++ 0x88, 0x04, 0x90, 0x48, 0x44, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x10,
++ 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01,
++ 0x1f, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00,
++ 0xf0, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0f, 0x12, 0x12, 0x22, 0x44,
++ 0x04, 0x08, 0x10, 0x01, 0x02, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x09, 0x0c, 0x12, 0x2b, 0x48, 0x3c, 0x24, 0x3f,
++ 0x24, 0x3c, 0x28, 0x25, 0x3b, 0x62, 0x00, 0x00,
++ 0x08, 0x88, 0x90, 0xfc, 0x90, 0x90, 0x90, 0xfc,
++ 0x90, 0x90, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x03, 0x03, 0x03,
++ 0x05, 0x05, 0x09, 0x11, 0x21, 0x40, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x10,
++ 0x1f, 0x10, 0x21, 0x22, 0x4c, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x88, 0x80,
++ 0xfc, 0x80, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x08, 0x09, 0x4a, 0x2a, 0x2c, 0x09, 0x7e, 0x0c,
++ 0x1a, 0x1a, 0x28, 0x48, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0xc8, 0x68,
++ 0x58, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x09, 0x7f, 0x09, 0x09, 0x0f, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xe0, 0xf8, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x27,
++ 0x24, 0x24, 0x27, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xc8,
++ 0x48, 0x48, 0xc8, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x20,
++ 0x22, 0x2a, 0x2a, 0x32, 0x21, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x88,
++ 0x88, 0x28, 0x58, 0x58, 0xc8, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0e, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x88, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0f, 0x09, 0x15, 0x13, 0x21,
++ 0x42, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10,
++ 0xd0, 0x30, 0x1c, 0x10, 0x20, 0xc0, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x11, 0x11, 0x17, 0x19, 0x71,
++ 0x11, 0x11, 0x11, 0x10, 0x10, 0x0f, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x30, 0xd0, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x60, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x10, 0x11, 0x01, 0x07, 0x10,
++ 0x13, 0x22, 0x22, 0x42, 0x43, 0x02, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xa0, 0x10, 0x38, 0xc4, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x08, 0x08, 0x10, 0x11, 0x31,
++ 0x53, 0x14, 0x10, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x80, 0xf0, 0x90, 0x50,
++ 0x20, 0xa0, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x02, 0x0c, 0x32, 0x01, 0x06, 0x78, 0x3f, 0x12,
++ 0x1e, 0x12, 0x1e, 0x13, 0x7e, 0x02, 0x00, 0x00,
++ 0xc0, 0x30, 0x48, 0x80, 0x60, 0x1c, 0xf8, 0x50,
++ 0x70, 0x48, 0x44, 0x44, 0x78, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x12, 0x1e, 0x12, 0x12, 0x1e,
++ 0x12, 0x13, 0x1e, 0x62, 0x02, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3f, 0x2a, 0x2a, 0x3e, 0x2b, 0x2a, 0x3e,
++ 0x08, 0x3e, 0x08, 0x0e, 0x70, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x60, 0x20, 0xfc, 0x28, 0x30,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x7c, 0x04, 0x05, 0x3d, 0x26, 0x20, 0x3c,
++ 0x24, 0x25, 0x05, 0x06, 0x08, 0x30, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x20, 0x20, 0xb0, 0xa8,
++ 0xa8, 0x24, 0x24, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x1f, 0x11, 0x21, 0x01, 0x7f,
++ 0x01, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x80, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x13, 0x12, 0x12, 0x12,
++ 0x12, 0x12, 0x12, 0x22, 0x22, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10,
++ 0x10, 0x60, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x11, 0x21, 0x49, 0x09, 0x12, 0x14, 0x37,
++ 0x51, 0x11, 0x10, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0xf0,
++ 0x10, 0x20, 0xc0, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0d, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x88, 0x08, 0x88, 0x48,
++ 0x48, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x27, 0x14, 0x0f, 0x14, 0x67,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xc8, 0x50, 0xe0, 0x58, 0xc4,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x25, 0x25, 0x3e, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0xa8, 0xa0,
++ 0xa0, 0xa0, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x27, 0x3c, 0x2b, 0x08, 0x2d,
++ 0x2b, 0x29, 0x29, 0x2f, 0x39, 0x61, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x90, 0xfc,
++ 0x20, 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00,
++ 0x00, 0x09, 0x08, 0x08, 0x7e, 0x05, 0x24, 0x14,
++ 0x14, 0x08, 0x0e, 0x70, 0x00, 0x00, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x98, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x12, 0x1a, 0x36, 0x36,
++ 0x32, 0x53, 0x14, 0x11, 0x11, 0x12, 0x00, 0x00,
++ 0x40, 0x80, 0x38, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xb8, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x2a, 0x1c, 0x7f, 0x1c, 0x2a,
++ 0x7f, 0x12, 0x3c, 0x04, 0x1a, 0x63, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x7c, 0x90, 0x90,
++ 0x50, 0x60, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x12, 0x19, 0x25, 0x24, 0x79, 0x10, 0x7f,
++ 0x11, 0x55, 0x39, 0x31, 0x1e, 0x64, 0x00, 0x00,
++ 0x20, 0xf8, 0xa8, 0xf8, 0x20, 0xfc, 0x70, 0x50,
++ 0x70, 0x78, 0x48, 0x78, 0xc0, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x19, 0x37, 0x34, 0x37, 0x54,
++ 0x17, 0x14, 0x17, 0x14, 0x14, 0x15, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0x88, 0x98, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x1f, 0x7e, 0x12, 0x1e, 0x1e,
++ 0x12, 0x17, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0xf0, 0x9c, 0x90, 0x90, 0x90,
++ 0x10, 0x30, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x23, 0x22, 0x02, 0x0a,
++ 0x0b, 0x0a, 0x12, 0x12, 0x23, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x4f, 0x29, 0x2b, 0x0a, 0x1b,
++ 0x2b, 0x4a, 0x10, 0x15, 0x25, 0x48, 0x00, 0x00,
++ 0x80, 0xfc, 0xc0, 0x30, 0xfc, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0x98, 0xc0, 0x28, 0x14, 0xf4, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x38, 0x00, 0x7d, 0x03, 0x3c, 0x03, 0x3a,
++ 0x03, 0x3a, 0x2b, 0x2a, 0x3a, 0x2a, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0x88, 0x98, 0x00, 0x00,
++ 0x10, 0x10, 0x7e, 0x10, 0x7d, 0x57, 0x7c, 0x57,
++ 0x7e, 0x13, 0x7e, 0x13, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x00, 0x79, 0x49, 0x4b, 0x4b, 0x4d, 0x49,
++ 0x49, 0x79, 0x49, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x90, 0x90, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x11, 0x31, 0x52, 0x13,
++ 0x15, 0x19, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x11, 0x11, 0x31, 0x57, 0x17,
++ 0x1a, 0x14, 0x11, 0x16, 0x11, 0x1e, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf0, 0xf0, 0xf0, 0xfc, 0x58,
++ 0xe8, 0xf4, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x04, 0x03, 0x1f, 0x11, 0x1f, 0x11,
++ 0x1f, 0x01, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x00, 0xf8, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x7f, 0x02, 0x02, 0x07, 0x06,
++ 0x05, 0x09, 0x08, 0x11, 0x26, 0x58, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10,
++ 0x20, 0x40, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x02, 0x02, 0x3f, 0x22, 0x7f, 0x04, 0x07, 0x0c,
++ 0x0f, 0x14, 0x27, 0x44, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xfc, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x05, 0x25, 0x39, 0x2b, 0x2b, 0x25, 0x27,
++ 0x2b, 0x3f, 0x21, 0x3f, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x20, 0x28, 0xc8, 0x58, 0x58, 0x28, 0x38,
++ 0x58, 0xf8, 0x08, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x15, 0x36, 0x54, 0x15, 0x16,
++ 0x11, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0xa0, 0x40, 0xb0, 0x0c,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x0f, 0x0f, 0x0f, 0x3f, 0x25,
++ 0x57, 0x23, 0x0e, 0x31, 0x07, 0x78, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0xe0, 0xe0, 0xfc, 0x38,
++ 0xe8, 0xe4, 0x40, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x10, 0x17, 0x11, 0x1d,
++ 0x71, 0x11, 0x11, 0x11, 0x17, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x10, 0xf0,
++ 0x10, 0xf0, 0x1c, 0xf0, 0x10, 0x10, 0x00, 0x00,
++ 0x02, 0x02, 0x7f, 0x04, 0x04, 0x0f, 0x0c, 0x17,
++ 0x24, 0x47, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x13, 0x12, 0x3a, 0x36,
++ 0x37, 0x52, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x40, 0x23, 0x22, 0x03, 0x12,
++ 0x13, 0x20, 0x2f, 0x40, 0x43, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x60, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xfc, 0x84, 0x04, 0x18, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x40, 0x23, 0x22, 0x02, 0x0b,
++ 0x0a, 0x0a, 0x13, 0x12, 0x22, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0xb0, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x09, 0x48, 0x30, 0x17, 0x30, 0x4b, 0x0a, 0x1a,
++ 0x2b, 0x4a, 0x0b, 0x0a, 0x33, 0x12, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8,
++ 0x38, 0x18, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x21, 0x11, 0x12, 0x7f, 0x0c, 0x3f, 0x2d, 0x2d,
++ 0x37, 0x33, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xa4, 0x20, 0xfc, 0x20, 0x20,
++ 0x30, 0x50, 0x50, 0x88, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x3f, 0x21, 0x21, 0x21,
++ 0x3f, 0x21, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x08, 0x08, 0x18, 0x14,
++ 0x35, 0x51, 0x12, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x80, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x08, 0x0a, 0x14, 0x19,
++ 0x37, 0x55, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0xa0, 0x90, 0x08, 0x48, 0x40, 0xa0, 0xa0, 0x10,
++ 0xf8, 0x14, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7f, 0x00, 0x3d, 0x02, 0x3d,
++ 0x00, 0x3c, 0x24, 0x25, 0x3d, 0x22, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xfc, 0xe0, 0x50, 0x48, 0xe4,
++ 0xa0, 0xb8, 0xa8, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x02, 0x22, 0x12, 0x1f, 0x02, 0x02, 0x73, 0x12,
++ 0x12, 0x14, 0x14, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x40, 0x7c, 0x88, 0x90,
++ 0xfc, 0x90, 0x90, 0xb0, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x00, 0x3f, 0x21,
++ 0x21, 0x3f, 0x20, 0x20, 0x20, 0x1f, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x00, 0xf8, 0x08,
++ 0x08, 0xf8, 0x08, 0x00, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x3e, 0x04, 0x3f, 0x15, 0x15, 0x7f, 0x15,
++ 0x15, 0x3f, 0x04, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x80, 0x78, 0x48, 0xd0, 0x50, 0x60, 0xd0, 0x48,
++ 0x44, 0xc4, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x0a, 0x0c, 0x0c,
++ 0x14, 0x16, 0x29, 0x4f, 0x38, 0x00, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x3e, 0x22, 0x3e, 0x00, 0x7f,
++ 0x55, 0x67, 0x5f, 0x49, 0x49, 0x4b, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0x30, 0x28, 0x38, 0xe4, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x02, 0x02, 0x05, 0x08, 0x10,
++ 0x00, 0x00, 0x00, 0x01, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0x08, 0x10, 0x90, 0x60,
++ 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x02, 0x01, 0x01, 0x7f, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x20, 0x40, 0x80, 0xfc, 0x08, 0x10,
++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x18, 0x6f, 0x01, 0x01,
++ 0x3f, 0x09, 0x09, 0x11, 0x21, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0xec, 0x00, 0x00,
++ 0xf8, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x07, 0x04, 0x04, 0x07, 0x04, 0x00,
++ 0x7f, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0xc0, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00,
++ 0x12, 0x09, 0x7f, 0x10, 0x17, 0x3f, 0x40, 0x07,
++ 0x07, 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x20, 0xd0, 0xf8, 0x04, 0xc0,
++ 0xc0, 0x00, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x09, 0x31, 0x2f, 0x27, 0x35, 0x27, 0x25, 0x37,
++ 0x2f, 0x21, 0x7f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x38, 0xe8, 0xc8, 0x58, 0xc8, 0x48, 0xd8,
++ 0xe8, 0x08, 0xfc, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x12, 0x0c, 0x08, 0x7f, 0x09, 0x0a,
++ 0x0c, 0x08, 0x08, 0x08, 0x08, 0x1b, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x17, 0x14, 0x27, 0x24, 0x67, 0x27, 0x24,
++ 0x27, 0x26, 0x2b, 0x2b, 0x32, 0x22, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0xf8, 0x40,
++ 0xf8, 0x48, 0xf8, 0xf8, 0x48, 0x58, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x12, 0x53, 0x24, 0x14, 0x08,
++ 0x0c, 0x12, 0x16, 0x3a, 0x61, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x08, 0x7e, 0x12, 0x13, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x11, 0x22, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x44, 0x09, 0x12, 0x04,
++ 0x18, 0x6f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0x20, 0x10, 0x90, 0x40,
++ 0x30, 0xec, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x10, 0x1f, 0x17, 0x10,
++ 0x17, 0x14, 0x27, 0x27, 0x44, 0x04, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0xf0, 0x90, 0xfc, 0xf0, 0x80,
++ 0xf0, 0x90, 0xf0, 0xf0, 0x90, 0xb0, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x10, 0x1f,
++ 0x71, 0x13, 0x14, 0x11, 0x12, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0x28, 0x48, 0xb0, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7d, 0x11, 0x10, 0x13, 0x18,
++ 0x77, 0x10, 0x12, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x38, 0xc8, 0x48, 0x50, 0x20, 0x40, 0xf8, 0x40,
++ 0xfc, 0x40, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x79, 0x11, 0x16, 0x12, 0x19,
++ 0x72, 0x17, 0x11, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x28, 0x28, 0xfc, 0xd0, 0x7c,
++ 0xd0, 0xfc, 0x50, 0x50, 0x7c, 0x40, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x4b, 0x48, 0x4f, 0x79, 0x4b,
++ 0x4e, 0x4b, 0x7a, 0x4b, 0x42, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xb8, 0x88, 0xf8, 0x20, 0xf8,
++ 0x40, 0xf0, 0x40, 0xf0, 0x40, 0xf8, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x19, 0x34, 0x37,
++ 0x31, 0x53, 0x54, 0x11, 0x12, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0x28, 0x48, 0xb0, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x08, 0x18, 0x1d, 0x1b,
++ 0x2a, 0x28, 0x48, 0x0b, 0x08, 0x08, 0x00, 0x00,
++ 0x88, 0x50, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x24,
++ 0xb8, 0x70, 0xa8, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x11, 0x08, 0x08, 0x47, 0x20, 0x20, 0x03, 0x08,
++ 0x08, 0x0f, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xfc, 0x40, 0x40, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x25, 0x21, 0x02, 0x10,
++ 0x11, 0x23, 0x25, 0x41, 0x41, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x10, 0x48, 0x48, 0xa0,
++ 0x10, 0xf8, 0x14, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x16, 0x35, 0x35, 0x3a, 0x50,
++ 0x11, 0x1f, 0x15, 0x25, 0x21, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x10, 0x48, 0x48, 0xa0,
++ 0x10, 0xfc, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x11, 0x1f, 0x11, 0x11,
++ 0x1f, 0x11, 0x11, 0x11, 0x21, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x4c, 0x12, 0x3f, 0x01, 0x0f,
++ 0x01, 0x3f, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x48, 0xb8, 0xf0, 0x00, 0xe0,
++ 0x00, 0xf8, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x3f, 0x01, 0x01, 0x1f, 0x01,
++ 0x01, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x00, 0x00, 0xf0, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x4a, 0x2b, 0x2c, 0x09, 0x7e, 0x19,
++ 0x1b, 0x19, 0x1b, 0x2d, 0x29, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x90, 0xfc,
++ 0x20, 0xf8, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x09, 0x7f, 0x09, 0x09, 0x0f,
++ 0x01, 0x3f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x20, 0xfc, 0x20, 0xe0, 0xf0,
++ 0x00, 0xf8, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x01, 0x3f, 0x24, 0x49, 0x12,
++ 0x04, 0x1f, 0x68, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x48, 0x20, 0x90,
++ 0x40, 0xf0, 0x2c, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x1f, 0x12, 0x12, 0x1f, 0x02,
++ 0x7f, 0x04, 0x0f, 0x08, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0x90, 0x90, 0xf0, 0x00,
++ 0xfc, 0x40, 0x40, 0xc0, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7e, 0x01, 0x3d, 0x03, 0x3c,
++ 0x03, 0x38, 0x2a, 0x2a, 0x3b, 0x22, 0x00, 0x00,
++ 0x08, 0x30, 0xc8, 0x48, 0x50, 0x20, 0xf8, 0x40,
++ 0xfc, 0x40, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x3d, 0x29, 0x09, 0x2f,
++ 0x29, 0x29, 0x29, 0x2f, 0x39, 0x61, 0x00, 0x00,
++ 0x00, 0xf8, 0xa0, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x27, 0x12, 0x11, 0x01, 0x03, 0x70, 0x17,
++ 0x12, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x3c, 0xc8, 0x48, 0x50, 0x20, 0xf8, 0x40, 0xfc,
++ 0x48, 0x48, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x29, 0x29, 0x31, 0x28, 0x27,
++ 0x25, 0x25, 0x3a, 0x24, 0x21, 0x22, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0xa8, 0x48, 0xb0, 0x00, 0x00,
++ 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x05, 0x1f,
++ 0x67, 0x04, 0x07, 0x05, 0x06, 0x38, 0x00, 0x00,
++ 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x40, 0xf0,
++ 0xcc, 0x40, 0xe0, 0x20, 0xc0, 0x38, 0x00, 0x00,
++ 0x14, 0x12, 0x2a, 0x0c, 0x13, 0x3e, 0x52, 0x1f,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa8, 0x30, 0x20, 0x50, 0x88,
++ 0x04, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x12, 0x12, 0x12, 0x1e,
++ 0x72, 0x13, 0x1e, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x80, 0x80, 0x78, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0xc8, 0x70, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x14, 0x12, 0x22, 0x48, 0x08, 0x14, 0x13, 0x22,
++ 0x7e, 0x22, 0x22, 0x3e, 0x23, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa8, 0x30, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x40, 0x20, 0x20, 0x07, 0x10,
++ 0x10, 0x20, 0x20, 0x41, 0x42, 0x4c, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x11, 0x09, 0x0a, 0x42, 0x24, 0x20, 0x01, 0x12,
++ 0x17, 0x1a, 0x22, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0x20, 0x10, 0x08, 0x48, 0x40, 0xa0, 0x20, 0x10,
++ 0xf8, 0x14, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x12, 0x0a, 0x0e, 0x32, 0x07, 0x01,
++ 0x3f, 0x04, 0x02, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x28, 0x38, 0xc8, 0x18, 0x00,
++ 0xf8, 0x40, 0x40, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x1a, 0x6f, 0x09, 0x0f, 0x09,
++ 0x0f, 0x1f, 0x04, 0x7f, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0x98, 0x68, 0xf8, 0x20, 0xe0, 0x20,
++ 0xe0, 0xf0, 0x40, 0xfc, 0x60, 0x18, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x24, 0x27, 0x00, 0x12,
++ 0x12, 0x22, 0x22, 0x43, 0x44, 0x48, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x00, 0xfc, 0x40, 0x40,
++ 0x78, 0x40, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x10, 0x14, 0x64, 0x19,
++ 0x16, 0x7e, 0x2c, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x88, 0x90, 0xfc, 0x90,
++ 0xf8, 0x90, 0xf8, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0d, 0x0a, 0x0e, 0x71, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x48, 0xd0,
++ 0x28, 0xfc, 0xa4, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x0b, 0x0a, 0x17, 0x18,
++ 0x37, 0x54, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x09, 0x05, 0x05, 0x7f, 0x01,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x20, 0x20, 0x40, 0xfc, 0x00,
++ 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x3f, 0x09, 0x05,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x20, 0x40,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x08, 0x3e, 0x2a, 0x2a, 0x3e,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x0b, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x00,
++ 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x70, 0x70, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x41, 0x23, 0x24, 0x00, 0x13,
++ 0x1f, 0x22, 0x22, 0x42, 0x43, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x10, 0x20, 0xc0, 0xc0, 0x30,
++ 0xfc, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0d, 0x12, 0x7e,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0xd0, 0x20, 0x50, 0x88,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x10, 0x09, 0x4a, 0x20,
++ 0x25, 0x0f, 0x11, 0x11, 0x21, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xc0, 0xf0, 0x90, 0x60, 0x60,
++ 0x90, 0xfc, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0xa0, 0x38, 0x48, 0xd0, 0x30, 0x30, 0x48,
++ 0xfc, 0x48, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x02, 0x0c, 0x38, 0x08, 0x08, 0x7f, 0x08, 0x08,
++ 0x3e, 0x22, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x02, 0x0c, 0x32, 0x22, 0x32, 0x2a, 0x2a, 0x22,
++ 0x22, 0x2e, 0x74, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0xc8, 0xa8, 0xa8, 0x88,
++ 0x88, 0x88, 0xf0, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x11, 0x11, 0x1f, 0x00, 0x1f, 0x10, 0x1f, 0x17,
++ 0x15, 0x17, 0x15, 0x21, 0x2e, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0xf0, 0x00, 0xf0, 0xd0, 0x10, 0xd0,
++ 0x50, 0xd0, 0x54, 0xec, 0x2c, 0x04, 0x00, 0x00,
++ 0x10, 0x17, 0x14, 0x7f, 0x17, 0x34, 0x3f, 0x3d,
++ 0x55, 0x55, 0x15, 0x14, 0x17, 0x14, 0x00, 0x00,
++ 0x00, 0xbc, 0xa4, 0xbc, 0xbc, 0x44, 0xfc, 0xf4,
++ 0xf4, 0x54, 0xf4, 0xe4, 0x5c, 0x4c, 0x00, 0x00,
++ 0x20, 0x17, 0x15, 0x47, 0x24, 0x27, 0x05, 0x17,
++ 0x10, 0x17, 0x25, 0x25, 0x5f, 0x40, 0x00, 0x00,
++ 0x20, 0xe0, 0x20, 0xbc, 0xc0, 0x80, 0x38, 0xc0,
++ 0x00, 0xf8, 0x28, 0x28, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x24, 0x3e, 0x3f, 0x24,
++ 0x3f, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x40, 0x7c, 0x80, 0x00, 0x78,
++ 0x00, 0xf0, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x3e, 0x22, 0x3e, 0x3e, 0x21, 0x2f,
++ 0x27, 0x27, 0x27, 0x23, 0x2d, 0x21, 0x00, 0x00,
++ 0x40, 0xfc, 0xf8, 0x88, 0xf8, 0xf8, 0x08, 0xe8,
++ 0xc8, 0xc8, 0xc8, 0x88, 0x68, 0x18, 0x00, 0x00,
++ 0x00, 0x7e, 0x48, 0x7d, 0x7c, 0x7e, 0x4f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0x78, 0x00, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x06, 0x3c, 0x04, 0x04, 0x7f, 0x0c, 0x0e,
++ 0x15, 0x15, 0x24, 0x44, 0x04, 0x04, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x11, 0x1f,
++ 0x19, 0x05, 0x02, 0x05, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0x00, 0x00, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x12, 0x14, 0x1b, 0x12,
++ 0x14, 0x1c, 0x14, 0x27, 0x24, 0x47, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x80, 0xfc, 0xf0, 0xf0,
++ 0x90, 0xf0, 0xf8, 0x90, 0x60, 0x9c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x61, 0x0f,
++ 0x00, 0x01, 0x7f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0xe0,
++ 0xc0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x3e, 0x04, 0x7f, 0x0e, 0x15, 0x64, 0x05,
++ 0x3f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0xc8, 0x48, 0x48, 0x98, 0x00,
++ 0xf8, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x7e, 0x12, 0x13, 0x12, 0x7e, 0x13,
++ 0x10, 0x13, 0x18, 0x60, 0x07, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x7e, 0x12, 0x12, 0x12, 0x7f, 0x10,
++ 0x17, 0x14, 0x1c, 0x67, 0x04, 0x04, 0x00, 0x00,
++ 0x40, 0xfc, 0x28, 0xa8, 0x68, 0x98, 0xf8, 0x40,
++ 0xfc, 0x64, 0x94, 0xf4, 0x14, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x29, 0x2f, 0x09, 0x1f,
++ 0x29, 0x4b, 0x13, 0x15, 0x29, 0x41, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x48, 0xa8, 0x28, 0x28, 0xe8,
++ 0x28, 0xa8, 0x68, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x7f, 0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x3f,
++ 0x01, 0x7f, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xf8,
++ 0x00, 0xfc, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x0b, 0x0a, 0x16, 0x1b,
++ 0x34, 0x57, 0x10, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x1f,
++ 0x01, 0x3f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf0,
++ 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x26, 0x3a, 0x37, 0x3e, 0x08,
++ 0x7f, 0x4d, 0x53, 0x7f, 0x41, 0x43, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0xfc, 0xd0, 0x50, 0x78, 0x50,
++ 0x50, 0x78, 0x50, 0x50, 0x7c, 0x40, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x28, 0x2b, 0x30, 0x29, 0x26,
++ 0x24, 0x27, 0x38, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0xa0, 0x24, 0x5c,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x23, 0x48, 0x0f, 0x10, 0x13, 0x30,
++ 0x53, 0x10, 0x17, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0x40,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x21, 0x16, 0x02, 0x19, 0x62,
++ 0x0f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x50, 0x80, 0xb0, 0x4c,
++ 0xa0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x3f, 0x00, 0x08, 0x04, 0x04,
++ 0x02, 0x02, 0x02, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x13, 0x10, 0x2f, 0x48, 0x13,
++ 0x30, 0x57, 0x10, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0xc0, 0xf0, 0x90, 0xfc, 0x90, 0xf0,
++ 0x80, 0xf8, 0x80, 0xfc, 0x80, 0x80, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7c, 0x13, 0x12, 0x12, 0x1f,
++ 0x70, 0x11, 0x11, 0x12, 0x14, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0xf8, 0x08, 0x08, 0xf8,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x54, 0x55, 0x56, 0x7c, 0x55,
++ 0x56, 0x54, 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x50, 0x20, 0x50, 0x88,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x37, 0x32, 0x2a, 0x3c, 0x65, 0x0a, 0x1f,
++ 0x64, 0x3f, 0x15, 0x0e, 0x07, 0x78, 0x00, 0x00,
++ 0x04, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4, 0x24, 0x24,
++ 0xa4, 0xa4, 0x24, 0x04, 0x84, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x40, 0x21, 0x27, 0x00, 0x12,
++ 0x12, 0x22, 0x22, 0x42, 0x44, 0x48, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0xe8, 0x08, 0xa0,
++ 0xa0, 0xa0, 0xa0, 0xa4, 0xa4, 0x1c, 0x00, 0x00,
++ 0x21, 0x16, 0x14, 0x45, 0x24, 0x25, 0x0e, 0x10,
++ 0x17, 0x24, 0x27, 0x44, 0x47, 0x44, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0x28, 0xa8, 0xc8, 0x58, 0x80,
++ 0xf0, 0x90, 0xf0, 0x90, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x10, 0x10, 0x13, 0x7c, 0x11,
++ 0x11, 0x11, 0x1e, 0x62, 0x04, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x60, 0x90, 0xf8, 0x08, 0x50,
++ 0x50, 0x50, 0x50, 0x54, 0x54, 0x0c, 0x00, 0x00,
++ 0x06, 0x39, 0x20, 0x24, 0x26, 0x39, 0x62, 0x1f,
++ 0x11, 0x1f, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x88, 0x08, 0x30, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7c, 0x13, 0x10, 0x10, 0x3f, 0x24, 0x65,
++ 0x25, 0x25, 0x3d, 0x25, 0x22, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x60, 0x90, 0xe8, 0x08, 0x50,
++ 0x50, 0x50, 0x50, 0x54, 0x54, 0x0c, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x09, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x08, 0x88, 0x48,
++ 0x48, 0x50, 0x50, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x29, 0x2a, 0x30, 0x2b, 0x25,
++ 0x25, 0x26, 0x39, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x90, 0x60, 0xf0, 0x4c, 0x40,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x04, 0x7f, 0x00, 0x1f, 0x11,
++ 0x1f, 0x11, 0x1f, 0x11, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x40, 0xfc, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x14, 0x04, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x22, 0x14, 0x7f, 0x00, 0x3e,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x26, 0x00, 0x00,
++ 0x80, 0xf8, 0x80, 0xf8, 0x08, 0xf8, 0x80, 0xf8,
++ 0x80, 0xf8, 0x80, 0xf8, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x12, 0x33, 0x50, 0x11,
++ 0x17, 0x14, 0x14, 0x14, 0x17, 0x14, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x80, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x11, 0x1f, 0x10, 0x17, 0x14,
++ 0x17, 0x14, 0x27, 0x2a, 0x4a, 0x11, 0x00, 0x00,
++ 0x00, 0xf0, 0xfc, 0xe8, 0x10, 0xf0, 0xf0, 0x90,
++ 0xf0, 0x90, 0xf8, 0x44, 0x34, 0xf0, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x09, 0x0e, 0x0a,
++ 0x0a, 0x13, 0x12, 0x22, 0x42, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0xa0, 0x28, 0x48, 0x70,
++ 0xe0, 0x50, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x17, 0x11, 0x17, 0x14, 0x17,
++ 0x14, 0x17, 0x2f, 0x20, 0x43, 0x0c, 0x00, 0x00,
++ 0x00, 0xf0, 0xfc, 0x28, 0xe0, 0xf0, 0x90, 0xf0,
++ 0x90, 0xf0, 0xf8, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f, 0x00, 0x3f,
++ 0x20, 0x44, 0x04, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xfc,
++ 0x08, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x14, 0x13, 0x33, 0x55, 0x11,
++ 0x11, 0x11, 0x12, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa4, 0x18, 0xf8, 0x14, 0xf0,
++ 0x10, 0xf0, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x3f, 0x21, 0x29, 0x29,
++ 0x29, 0x29, 0x2f, 0x28, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x08, 0x28, 0x28,
++ 0x28, 0x28, 0xe8, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x23, 0x10, 0x17, 0x00, 0x11, 0x16,
++ 0x20, 0x21, 0x46, 0x40, 0x01, 0x0e, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0xa0, 0x24, 0x9c,
++ 0xf0, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x01, 0x3f, 0x21, 0x7f, 0x24, 0x1f, 0x68, 0x0f,
++ 0x08, 0x0f, 0x05, 0x09, 0x31, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xfc, 0x48, 0xf0, 0x2c, 0xe0,
++ 0x20, 0xe0, 0x60, 0x10, 0x08, 0x00, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x09, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2b, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x90, 0x50, 0x50, 0x10, 0x90, 0x90, 0x1c,
++ 0x70, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x0b, 0x40, 0x22, 0x0a, 0x0d, 0x12, 0x21,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x98, 0x14, 0x64, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x40, 0x23, 0x22, 0x02, 0x13,
++ 0x10, 0x12, 0x22, 0x24, 0x48, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0xf8, 0x08, 0x08, 0xf8,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x0c, 0x4a, 0x32, 0x11, 0x31, 0x49, 0x09, 0x19,
++ 0x29, 0x49, 0x0a, 0x0a, 0x0c, 0x38, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50,
++ 0x50, 0xf0, 0x54, 0x4c, 0x4c, 0x44, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x4f, 0x2a, 0x29, 0x0b, 0x1d,
++ 0x29, 0x49, 0x11, 0x12, 0x24, 0x40, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xfc, 0xa8, 0x10, 0xf8, 0x14,
++ 0xf0, 0x10, 0xf0, 0x48, 0x44, 0xc0, 0x00, 0x00,
++ 0x00, 0x78, 0x4f, 0x4a, 0x79, 0x4b, 0x4d, 0x79,
++ 0x49, 0x49, 0x7a, 0x4a, 0x44, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0x10, 0xf8, 0x14, 0xf0,
++ 0x10, 0xf0, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x04, 0x18, 0x73, 0x10, 0x17, 0x7c, 0x11, 0x1a,
++ 0x34, 0x35, 0x52, 0x10, 0x11, 0x1e, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0xa0, 0x24, 0x9c,
++ 0xf0, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x10, 0x55, 0x35, 0x39, 0x11, 0x7f, 0x11, 0x19,
++ 0x35, 0x35, 0x53, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0xf0, 0x10, 0xf0, 0xfc, 0xf0, 0x50,
++ 0xf0, 0xf0, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x0f,
++ 0x0a, 0x09, 0x08, 0x08, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0xf0,
++ 0x10, 0x20, 0xc0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x25, 0x3e, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x00, 0xf8, 0x88, 0x88, 0xf8,
++ 0x20, 0xb0, 0xa8, 0x24, 0x24, 0x60, 0x00, 0x00,
++ 0x00, 0x20, 0x17, 0x12, 0x01, 0x03, 0x75, 0x11,
++ 0x11, 0x11, 0x12, 0x14, 0x2c, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0x10, 0xf8, 0x14, 0xf0,
++ 0x10, 0xf0, 0x48, 0x44, 0xc0, 0xfc, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x0f, 0x7f, 0x0f, 0x09,
++ 0x0f, 0x0f, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0xe0, 0xfc, 0xe0, 0x20,
++ 0xe0, 0xe0, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x28, 0x33, 0x28, 0x25, 0x26,
++ 0x24, 0x25, 0x3a, 0x20, 0x21, 0x2e, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0xa0, 0x24, 0x9c,
++ 0xf0, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x00, 0x7e,
++ 0x12, 0x12, 0x12, 0x1c, 0x10, 0x13, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x02, 0x7f, 0x02, 0x02, 0x02,
++ 0x04, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x11, 0x14, 0x65, 0x18, 0x1b, 0x26, 0x7d,
++ 0x19, 0x34, 0x35, 0x36, 0x50, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xfc, 0x40, 0x64,
++ 0x68, 0xd0, 0x50, 0x48, 0x44, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x11, 0x13, 0x34, 0x5b, 0x12,
++ 0x12, 0x13, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xf8, 0xa8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x14, 0x17, 0x14, 0x17,
++ 0x10, 0x17, 0x10, 0x20, 0x3f, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x90, 0xf0, 0x90, 0xf0,
++ 0x80, 0xf0, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x0c, 0x1a, 0x1a,
++ 0x29, 0x4a, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x60, 0xe0, 0xd0,
++ 0x50, 0x48, 0x44, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x22, 0x12, 0x12, 0x4f, 0x22, 0x23, 0x06, 0x16,
++ 0x1a, 0x1b, 0x22, 0x22, 0x42, 0x42, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x30, 0xf0, 0xe8,
++ 0xa8, 0x24, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x17, 0x34, 0x39, 0x56, 0x11,
++ 0x11, 0x1a, 0x16, 0x21, 0x22, 0x44, 0x00, 0x00,
++ 0x40, 0x48, 0x50, 0xfc, 0xe0, 0x50, 0x4c, 0x48,
++ 0xfc, 0xa8, 0xa8, 0x7c, 0x08, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x7d, 0x17, 0x11, 0x11, 0x7f, 0x13,
++ 0x13, 0x15, 0x1d, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x10, 0x90, 0x78, 0x78,
++ 0x54, 0x94, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x01, 0x7d, 0x51, 0x52, 0x7b, 0x4d, 0x49, 0x49,
++ 0x78, 0x53, 0x52, 0x7e, 0x43, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x10, 0x10, 0xf0,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xb8, 0xa8, 0x00, 0x00,
++ 0x10, 0x10, 0x7e, 0x10, 0x7d, 0x57, 0x7c, 0x57,
++ 0x7e, 0x12, 0x7f, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0xf8,
++ 0xa8, 0xa8, 0xf8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x25, 0x2b, 0x30, 0x29, 0x26, 0x25,
++ 0x25, 0x26, 0x3b, 0x24, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0x48, 0x50, 0xfc, 0xe0, 0x50, 0x4c, 0x48,
++ 0xfc, 0x68, 0xa8, 0xfc, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x05, 0x3b, 0x2e, 0x28, 0x41, 0x00, 0x00,
++ 0x20, 0xa8, 0x70, 0xfc, 0x70, 0xa8, 0x24, 0xa8,
++ 0xfc, 0x68, 0xe8, 0x7c, 0x88, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x2a, 0x3f, 0x2b, 0x2b, 0x3f,
++ 0x2a, 0x2f, 0x2a, 0x2a, 0x2f, 0x59, 0x00, 0x00,
++ 0x20, 0xa8, 0x70, 0xfc, 0x70, 0xa8, 0x64, 0x48,
++ 0xfc, 0xa8, 0xa8, 0x7c, 0x88, 0x08, 0x00, 0x00,
++ 0x00, 0x03, 0x7e, 0x12, 0x12, 0x13, 0x7c, 0x13,
++ 0x12, 0x13, 0x1e, 0x62, 0x03, 0x02, 0x00, 0x00,
++ 0x80, 0x7c, 0x14, 0x94, 0xd4, 0x24, 0x4c, 0xf8,
++ 0x48, 0xf8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x30, 0x09,
++ 0x0d, 0x71, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x08, 0x30,
++ 0x60, 0x18, 0xf4, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x43, 0x22, 0x23, 0x02, 0x12,
++ 0x13, 0x24, 0x24, 0x48, 0x53, 0x4c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x48, 0x40,
++ 0xfc, 0x40, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x02, 0x1c,
++ 0x03, 0x7f, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x40, 0xc0,
++ 0x30, 0xc8, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x7f, 0x1c, 0x1a, 0x2a,
++ 0x48, 0x7f, 0x08, 0x14, 0x22, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x18, 0x6f, 0x00, 0x1f,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0xec, 0x00, 0xf0,
++ 0x10, 0x10, 0x10, 0xe0, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x08, 0x09, 0x1b, 0x2c, 0x4b,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0xf8,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x0f, 0x0a, 0x12, 0x13, 0x34, 0x54, 0x1a,
++ 0x11, 0x11, 0x11, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x08, 0xe8, 0x28, 0x28, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0x28, 0x28, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x21, 0x11, 0x12, 0x05, 0x08, 0x17,
++ 0x10, 0x20, 0x20, 0x40, 0x40, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0x40, 0x20, 0x10, 0xe8, 0x04, 0xf8,
++ 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x00, 0x00,
++ 0x01, 0x1e, 0x10, 0x10, 0x1f, 0x14, 0x14, 0x17,
++ 0x15, 0x15, 0x15, 0x29, 0x29, 0x57, 0x00, 0x00,
++ 0xa0, 0x20, 0x20, 0x20, 0xfc, 0x24, 0x24, 0x24,
++ 0x24, 0x24, 0x44, 0x44, 0x84, 0x18, 0x00, 0x00,
++ 0x11, 0x11, 0x1f, 0x18, 0x0d, 0x12, 0x1e, 0x20,
++ 0x7e, 0x0a, 0x0a, 0x0c, 0x08, 0x0b, 0x00, 0x00,
++ 0x10, 0x10, 0xf0, 0x10, 0xfc, 0x20, 0xf8, 0x88,
++ 0xf8, 0xf8, 0x88, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x18, 0x35, 0x37, 0x34, 0x53,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0xf8,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x10, 0x11, 0x12, 0x7c, 0x13,
++ 0x10, 0x14, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xe8, 0x04, 0xf8,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x04, 0x08, 0x08, 0x1c,
++ 0x2a, 0x4a, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x02, 0x04, 0x1f, 0x60,
++ 0x1f, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x80, 0x40, 0xf0, 0x0c,
++ 0xf0, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5d, 0x08, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xe8, 0x04, 0xf8,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x08, 0x3f, 0x00, 0x3e, 0x01,
++ 0x7e, 0x08, 0x2c, 0x2b, 0x4a, 0x18, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x28, 0xfc, 0x28, 0xf8, 0x20,
++ 0xa4, 0xb8, 0x70, 0xa8, 0x24, 0x60, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x02,
++ 0x0f, 0x70, 0x1f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x70, 0x70, 0x80,
++ 0xe0, 0x1c, 0xf0, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x0f,
++ 0x00, 0x3f, 0x12, 0x0a, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x70, 0x70, 0xe0,
++ 0x00, 0xf8, 0x90, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x3e, 0x22, 0x2b, 0x1f, 0x12, 0x1f,
++ 0x12, 0x1f, 0x17, 0x24, 0x47, 0x18, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x88, 0xa8, 0xfc, 0x40, 0xf8,
++ 0x48, 0xf8, 0x58, 0x60, 0x44, 0x3c, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x24, 0x35, 0x2e,
++ 0x3f, 0x2e, 0x35, 0x24, 0x3f, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0xa8, 0x28, 0xc4, 0xfc, 0x80, 0xfc,
++ 0x94, 0x94, 0x98, 0x90, 0x90, 0x90, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x3f, 0x27, 0x2a, 0x32, 0x22,
++ 0x27, 0x24, 0x27, 0x44, 0x47, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xfc, 0x30, 0xe8, 0xa4, 0x20,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x22, 0x3f, 0x27, 0x2a, 0x32,
++ 0x20, 0x24, 0x24, 0x44, 0x5f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0xfc, 0x70, 0xa8, 0xa4,
++ 0x80, 0xf0, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x08, 0x0e, 0x12, 0x12, 0x2a,
++ 0x46, 0x04, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x11, 0x23, 0x01, 0x06, 0x78,
++ 0x0f, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x28, 0x44, 0x84, 0x80, 0x80,
++ 0xf8, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x0f, 0x11, 0x29, 0x06, 0x04,
++ 0x18, 0x60, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x08, 0x88, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x08, 0x18, 0x90, 0x48, 0x44, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x08, 0x0f, 0x19, 0x26, 0x0d, 0x31,
++ 0x7f, 0x03, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x08, 0xc8, 0x48, 0x48, 0x48, 0x48, 0x48, 0x18,
++ 0xfc, 0x10, 0xa0, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x11, 0x17, 0x11, 0x1f,
++ 0x11, 0x17, 0x23, 0x2d, 0x71, 0x01, 0x00, 0x00,
++ 0x80, 0xfc, 0x20, 0xfc, 0x40, 0xf0, 0x50, 0xfc,
++ 0x50, 0xf0, 0x60, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x12, 0x12, 0x22, 0x44,
++ 0x01, 0x14, 0x14, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x50, 0x48, 0x44, 0xc4,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x1b, 0x34, 0x35, 0x36, 0x52,
++ 0x13, 0x12, 0x15, 0x11, 0x12, 0x1c, 0x00, 0x00,
++ 0x40, 0x48, 0x50, 0xfc, 0xe0, 0x50, 0x4c, 0x48,
++ 0xfc, 0xa8, 0xa8, 0x7c, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x15, 0x12, 0x42, 0x20, 0x20, 0x0e, 0x12,
++ 0x12, 0x23, 0x22, 0x42, 0x45, 0x48, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0x20, 0xfc, 0x20, 0x20, 0xa0, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x10, 0x17, 0x36, 0x3b, 0x52,
++ 0x13, 0x10, 0x19, 0x26, 0x24, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x5f, 0x12, 0x1f, 0x17, 0x11,
++ 0x1f, 0x11, 0x2f, 0x27, 0x59, 0x01, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xfc, 0x20, 0xfc, 0xf0, 0x50,
++ 0xfc, 0x50, 0xf0, 0x70, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x64, 0x1b, 0x1a, 0x27, 0x7e,
++ 0x1b, 0x34, 0x35, 0x32, 0x54, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x01, 0x7d, 0x2e, 0x2a, 0x39, 0x2a, 0x2f, 0x38,
++ 0x2a, 0x2e, 0x3b, 0x6a, 0x09, 0x0a, 0x00, 0x00,
++ 0x10, 0x10, 0xe8, 0xa8, 0x10, 0xa8, 0xfc, 0xa4,
++ 0xa8, 0xa8, 0xb8, 0xa8, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x20, 0x17, 0x13, 0x02, 0x73,
++ 0x12, 0x13, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x40, 0xfc, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0xfc, 0x40, 0x40, 0xfc, 0x00, 0x00,
++ 0x00, 0x20, 0x17, 0x10, 0x03, 0x02, 0x73, 0x12,
++ 0x13, 0x10, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x09, 0x02,
++ 0x1f, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x02, 0x07, 0x19, 0x7f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x12, 0x6f, 0x08, 0x0f, 0x08, 0x0f, 0x00, 0x00,
++ 0x00, 0xc0, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x48, 0xe4, 0x20, 0xe0, 0x20, 0xe0, 0x00, 0x00,
++ 0x10, 0x11, 0x16, 0x7f, 0x12, 0x1b, 0x36, 0x37,
++ 0x32, 0x53, 0x55, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0xf0, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0xa8, 0xf4, 0x14, 0xf0, 0x10, 0xf0, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x0a, 0x2a, 0x2c, 0x28, 0x48,
++ 0x08, 0x08, 0x15, 0x13, 0x22, 0x44, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8,
++ 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x23, 0x3e, 0x22,
++ 0x23, 0x3e, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0xd0, 0x50, 0x20, 0x50,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x09, 0x08, 0x2e,
++ 0x29, 0x28, 0x28, 0x2e, 0x38, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0xd0, 0x20, 0x50, 0x88,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x3d, 0x5d, 0x01, 0x3e,
++ 0x23, 0x3e, 0x0f, 0x28, 0x2e, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x78, 0x70, 0x00, 0x78,
++ 0xd0, 0x70, 0xfc, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x12, 0x09, 0x09, 0x3f, 0x20, 0x41, 0x01, 0x3f,
++ 0x01, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x08, 0x00, 0x00, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x01, 0x0f, 0x09, 0x7f, 0x09, 0x0f, 0x0f, 0x09,
++ 0x0f, 0x7f, 0x04, 0x0f, 0x01, 0x3e, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xfc, 0x20, 0xe0, 0xe0, 0x20,
++ 0xe0, 0xfc, 0x40, 0x40, 0xc0, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x12, 0x17, 0x14, 0x17,
++ 0x14, 0x17, 0x25, 0x25, 0x46, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x38, 0xa8, 0xa8, 0xb0,
++ 0xa8, 0xa4, 0x24, 0xb8, 0xa0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x0f, 0x01, 0x01, 0x3f, 0x04,
++ 0x04, 0x7f, 0x04, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xe0, 0x00, 0x00, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x3e,
++ 0x28, 0x24, 0x27, 0x39, 0x62, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x0a, 0x09, 0x7f, 0x08, 0x0d, 0x1a, 0x1a,
++ 0x2b, 0x48, 0x09, 0x08, 0x08, 0x0f, 0x00, 0x00,
++ 0x40, 0x48, 0x50, 0xfc, 0xe0, 0x50, 0x48, 0x40,
++ 0xfc, 0x90, 0xd0, 0x20, 0xd0, 0x08, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x7c, 0x14, 0x17, 0x3c, 0x3f,
++ 0x36, 0x55, 0x54, 0x15, 0x16, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0xa4, 0xa8, 0xa8, 0xb0, 0xa8, 0xa4,
++ 0x24, 0x24, 0xa4, 0x78, 0x60, 0x20, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x22, 0x23, 0x02, 0x13,
++ 0x12, 0x22, 0x22, 0x42, 0x43, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0,
++ 0x88, 0x48, 0x50, 0x20, 0x90, 0x0c, 0x00, 0x00,
++ 0x20, 0x17, 0x14, 0x47, 0x24, 0x27, 0x04, 0x17,
++ 0x17, 0x16, 0x2a, 0x2b, 0x52, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xfc, 0x40, 0xf8,
++ 0x68, 0xd8, 0x48, 0x68, 0xd8, 0x58, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x49, 0x09, 0x0f, 0x11,
++ 0x21, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x00, 0x00, 0xf0, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x44, 0x29, 0x11, 0x31, 0x49, 0x09, 0x19,
++ 0x29, 0x49, 0x09, 0x09, 0x09, 0x36, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0,
++ 0x48, 0x28, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x45, 0x3f, 0x04, 0x7f, 0x1f,
++ 0x11, 0x1f, 0x11, 0x1f, 0x11, 0x00, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xf8, 0x40, 0xfc, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf4, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x03, 0x02,
++ 0x06, 0x1b, 0x62, 0x02, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x10, 0xf0, 0x20, 0x40, 0xfc, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x04, 0x3f, 0x0a, 0x7f, 0x1e, 0x12, 0x1e, 0x1e,
++ 0x16, 0x7f, 0x07, 0x07, 0x7f, 0x00, 0x00, 0x00,
++ 0x80, 0xf8, 0xf0, 0x10, 0xf0, 0xf0, 0xf0, 0xf4,
++ 0x7c, 0xfc, 0xc0, 0xf8, 0xc0, 0x40, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x7d, 0x55, 0x55, 0x55, 0x7d,
++ 0x51, 0x19, 0x15, 0x1d, 0x62, 0x04, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x50,
++ 0x50, 0xf0, 0x54, 0x4c, 0x4c, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x3e,
++ 0x24, 0x22, 0x27, 0x39, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x44, 0x44, 0x64, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x04, 0x04,
++ 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x40, 0x20,
++ 0x10, 0x10, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x0e, 0x15, 0x25, 0x5f, 0x12, 0x1f,
++ 0x12, 0x1f, 0x17, 0x24, 0x47, 0x18, 0x00, 0x00,
++ 0x20, 0xfc, 0x70, 0xa8, 0x24, 0xfc, 0x40, 0xf8,
++ 0x48, 0xf8, 0x58, 0x60, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x7d, 0x08, 0x0b, 0x18, 0x16,
++ 0x35, 0x50, 0x11, 0x16, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xfc, 0x40, 0x64,
++ 0x68, 0xd0, 0x50, 0x48, 0x44, 0xc0, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x27, 0x3c, 0x24, 0x24,
++ 0x3c, 0x24, 0x24, 0x24, 0x25, 0x4e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xfc, 0x20, 0x24,
++ 0xb8, 0x70, 0x68, 0xa4, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x38, 0x00, 0x7c, 0x01, 0x3b, 0x04, 0x3b,
++ 0x02, 0x3a, 0x2b, 0x2a, 0x3a, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0xf8,
++ 0xa8, 0xa8, 0xf8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x17, 0x10, 0x31, 0x52, 0x10,
++ 0x17, 0x10, 0x11, 0x10, 0x10, 0x17, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xfc, 0xe0, 0x50, 0x48, 0x40,
++ 0xfc, 0x90, 0xd0, 0x20, 0xd0, 0x08, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x08, 0x08, 0x7f, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3f, 0x00, 0x3c,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x03, 0x0d, 0x71, 0x01, 0x3f,
++ 0x01, 0x09, 0x09, 0x09, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xc0, 0x30, 0x08, 0x00, 0xf8,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x3c, 0x24, 0x3c, 0x25,
++ 0x26, 0x3c, 0x18, 0x14, 0x24, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x24, 0x3c, 0x24, 0x25, 0x3d,
++ 0x27, 0x25, 0x25, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x48, 0x88, 0x30, 0x10,
++ 0xfc, 0x54, 0x54, 0x54, 0x64, 0xcc, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x00, 0x1e, 0x12, 0x1e, 0x07,
++ 0x79, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x90, 0x88, 0xfc, 0x90, 0x90, 0x60, 0x64, 0x9c,
++ 0x04, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x08, 0x0c, 0x1b, 0x1a,
++ 0x28, 0x4b, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0x50, 0x94, 0x54, 0x4c,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x7f, 0x3f, 0x22, 0x3e, 0x2b, 0x5f, 0x08,
++ 0x0f, 0x0f, 0x0f, 0x0f, 0x29, 0x44, 0x00, 0x00,
++ 0x30, 0x28, 0xfc, 0x60, 0xa4, 0x1c, 0xe0, 0x20,
++ 0xe0, 0xe0, 0xfc, 0xfc, 0x24, 0x98, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x02, 0x07, 0x05, 0x04, 0x04,
++ 0x0a, 0x09, 0x09, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xe0, 0x20, 0xa0, 0xa0,
++ 0x20, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x0f, 0x08, 0x08, 0x0f,
++ 0x08, 0x08, 0x0f, 0x08, 0x00, 0x7f, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xe0, 0x20, 0x20, 0xe0,
++ 0x20, 0x20, 0xe0, 0x20, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x09, 0x1f, 0x25, 0x7e, 0x2a, 0x3e, 0x2b,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x00, 0xdc, 0x54, 0xdc, 0x00, 0xf8, 0x00, 0xfc,
++ 0x40, 0x78, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7f, 0x02, 0x3d, 0x00, 0x3c,
++ 0x03, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x18, 0xe0, 0x40, 0x7c,
++ 0xc0, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x7f, 0x07, 0x07, 0x3f, 0x27,
++ 0x24, 0x27, 0x7f, 0x05, 0x19, 0x61, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0xc0, 0xc0, 0xf8, 0xc8,
++ 0x48, 0xd8, 0xfc, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x14, 0x13, 0x1f, 0x1a,
++ 0x1a, 0x1f, 0x1a, 0x12, 0x24, 0x48, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0xa0, 0x20, 0xfc, 0xb4,
++ 0xd8, 0x90, 0xb0, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x15, 0x19, 0x35, 0x37,
++ 0x32, 0x54, 0x50, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x00, 0xf8, 0x68, 0x68,
++ 0xe8, 0xb8, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x42, 0x24, 0x29, 0x03, 0x10,
++ 0x13, 0x12, 0x27, 0x24, 0x40, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0xa4, 0x64, 0xf0, 0x10,
++ 0xf0, 0x00, 0xf8, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x00, 0x7c, 0x13, 0x12, 0x11, 0x21, 0x3d, 0x65,
++ 0x26, 0x26, 0x3c, 0x25, 0x22, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x00, 0xf8, 0x68, 0x68,
++ 0xe8, 0xb8, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x26, 0x25, 0x3d, 0x25, 0x27,
++ 0x3e, 0x24, 0x24, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x00, 0xf8, 0x68, 0x68,
++ 0xe8, 0xb8, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0xfc, 0x40, 0x40, 0x20,
++ 0x20, 0xa0, 0x10, 0x14, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x21, 0x21, 0x21, 0x3f,
++ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xf8,
++ 0x08, 0x08, 0x08, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x01, 0x03, 0x05, 0x09, 0x31,
++ 0x41, 0x01, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x80, 0x00, 0x80, 0x60, 0x10, 0x08,
++ 0x04, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x02, 0x04, 0x08, 0x11, 0x21,
++ 0x41, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x80, 0x40, 0x20, 0x10, 0x08,
++ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
++ 0x7c, 0x44, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x80, 0x80, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0xf8, 0x88, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x3f, 0x04, 0x05, 0x04, 0x04,
++ 0x7f, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xa0, 0xa0,
++ 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x01, 0x06, 0x18, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04, 0x04,
++ 0x02, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x80,
++ 0x80, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x01, 0x7f, 0x01, 0x09, 0x79,
++ 0x09, 0x09, 0x19, 0x69, 0x01, 0x01, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x00, 0x20, 0x2c,
++ 0x30, 0x20, 0x24, 0x1c, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x05, 0x3d, 0x05, 0x1d,
++ 0x65, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x60, 0x80, 0x00, 0xfc, 0x48, 0x70, 0x40, 0x48,
++ 0x38, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x07, 0x7a, 0x29, 0x3f, 0x56, 0x08, 0x7f, 0x55,
++ 0x7d, 0x5d, 0x55, 0x49, 0x55, 0x63, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7e, 0x24, 0x19, 0x08, 0x7e, 0x12, 0x14,
++ 0x1b, 0x10, 0x13, 0x10, 0x13, 0x30, 0x00, 0x00,
++ 0x40, 0x78, 0x90, 0xf8, 0xa8, 0xa8, 0xfc, 0x64,
++ 0xf8, 0xb0, 0x70, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x11, 0x09, 0x09, 0x1f, 0x01,
++ 0x7f, 0x01, 0x1f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x10, 0x10, 0x20, 0xf0, 0x10,
++ 0xfc, 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x7f, 0x08, 0x7e,
++ 0x08, 0x3e, 0x22, 0x22, 0x3e, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x60, 0x20, 0xfc, 0x24, 0x28,
++ 0x30, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x3f,
++ 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0x40, 0x40, 0x20,
++ 0x20, 0x20, 0x10, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x7f, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x04, 0x04, 0x3c, 0x20, 0x20,
++ 0x3c, 0x24, 0x04, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x78, 0x08, 0x08,
++ 0x78, 0x48, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x02, 0x07, 0x3c, 0x24, 0x24,
++ 0x24, 0x3c, 0x20, 0x03, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0xc8, 0xa8, 0xb0,
++ 0x90, 0xa8, 0xc4, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x7f,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x00, 0x00, 0x07, 0x04, 0x04,
++ 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x00, 0xc0, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x00, 0x1f, 0x10, 0x1f, 0x10,
++ 0x1f, 0x09, 0x09, 0x11, 0x21, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f, 0x00, 0x3f,
++ 0x20, 0x4f, 0x01, 0x3f, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xfc,
++ 0xc8, 0x00, 0xf8, 0x00, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x7f, 0x1f, 0x17, 0x14, 0x17, 0x1f, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0xd0, 0x50, 0xd0, 0xf0, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x0c, 0x12, 0x12, 0x11, 0x21, 0x42, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x60,
++ 0x50, 0x50, 0x90, 0x88, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x0f, 0x09, 0x11, 0x11, 0x31, 0x51, 0x11,
++ 0x11, 0x11, 0x12, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0x20, 0x38, 0x28,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11,
++ 0x11, 0x12, 0x22, 0x24, 0x48, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40,
++ 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x08, 0x08, 0x18, 0x28, 0x48,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x60, 0x50, 0x48, 0x44,
++ 0x44, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x10, 0x1f, 0x30, 0x50, 0x10,
++ 0x10, 0x11, 0x11, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0xf8, 0x88, 0x88, 0x88,
++ 0x88, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x10, 0x32, 0x52, 0x11,
++ 0x11, 0x10, 0x10, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40,
++ 0xc0, 0x80, 0xc0, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x10, 0x10, 0x30, 0x52, 0x12,
++ 0x14, 0x10, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x10, 0x10, 0x34, 0x52, 0x11,
++ 0x10, 0x11, 0x11, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x68, 0x1c, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x10, 0x10, 0x30, 0x5f, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x11, 0x11, 0x32, 0x55, 0x19,
++ 0x11, 0x11, 0x12, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0xc0, 0x40, 0x20, 0x10, 0x28, 0x24,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x10, 0x31, 0x51, 0x11,
++ 0x11, 0x11, 0x12, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0x00, 0xe0, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x0a, 0x0a, 0x12, 0x13, 0x34, 0x58, 0x1f,
++ 0x10, 0x10, 0x11, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc,
++ 0xc0, 0xa0, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x17, 0x10, 0x30, 0x50, 0x13,
++ 0x12, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x10, 0x37, 0x54, 0x14,
++ 0x17, 0x14, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0xa0, 0xa0,
++ 0xfc, 0xa4, 0x24, 0x24, 0x38, 0x20, 0x00, 0x00,
++ 0x09, 0x09, 0x09, 0x13, 0x12, 0x34, 0x53, 0x12,
++ 0x12, 0x12, 0x13, 0x12, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0xc8, 0x48,
++ 0x48, 0x48, 0xc8, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x12, 0x12, 0x34, 0x50, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x04, 0x88, 0x80, 0x88, 0x90,
++ 0xe0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x12, 0x12, 0x34, 0x57, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x04, 0x08, 0x00, 0xfc, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x1f, 0x10, 0x30, 0x53, 0x10,
++ 0x13, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x12, 0x14, 0x30, 0x51, 0x16,
++ 0x10, 0x13, 0x10, 0x10, 0x10, 0x17, 0x00, 0x00,
++ 0x80, 0xf8, 0x08, 0x90, 0x60, 0x40, 0xa0, 0x7c,
++ 0x84, 0x48, 0x30, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x13, 0x12, 0x34, 0x5f, 0x10,
++ 0x10, 0x11, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0xe0,
++ 0xe0, 0x50, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x12, 0x12, 0x34, 0x53, 0x10,
++ 0x10, 0x17, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x04, 0x18, 0x60, 0xc0, 0x40,
++ 0x7c, 0xc0, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x14, 0x12, 0x32, 0x50, 0x11,
++ 0x12, 0x1c, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa8, 0xa8, 0xb0, 0xa0, 0xb0, 0xa8,
++ 0xa4, 0xa4, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x0f, 0x0c, 0x14, 0x17, 0x34, 0x57, 0x16,
++ 0x16, 0x16, 0x16, 0x1a, 0x18, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x90, 0xf0, 0xb0,
++ 0xb0, 0xb0, 0xf4, 0x8c, 0x8c, 0x84, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x10, 0x13, 0x32, 0x52, 0x12,
++ 0x13, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0xf8, 0x08, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x11, 0x31, 0x53, 0x15,
++ 0x19, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0x00, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x0a, 0x09, 0x09, 0x17, 0x10, 0x30, 0x53, 0x10,
++ 0x10, 0x17, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x40, 0x40, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x09, 0x09, 0x0d, 0x13, 0x23,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0x20, 0x30, 0x48, 0x88,
++ 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x1f, 0x60, 0x1f, 0x12,
++ 0x12, 0x1f, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0x00, 0x80, 0x40, 0xf0, 0x0c, 0xf0, 0x90,
++ 0x90, 0xf0, 0x90, 0x90, 0x90, 0xb0, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x2f, 0x27, 0x60, 0x3f, 0x2a,
++ 0x31, 0x27, 0x25, 0x25, 0x3f, 0x20, 0x00, 0x00,
++ 0x80, 0xf0, 0x90, 0xfc, 0xf0, 0x80, 0xfc, 0x48,
++ 0x24, 0xf0, 0x50, 0x50, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x13, 0x12, 0x33, 0x52, 0x13,
++ 0x12, 0x10, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0xf8,
++ 0xa8, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x11, 0x17, 0x31, 0x51, 0x12,
++ 0x14, 0x1f, 0x10, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x80, 0xa0, 0x90, 0x38, 0xc8, 0x00, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x25, 0x25, 0x51, 0x11,
++ 0x19, 0x15, 0x25, 0x21, 0x4f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x12, 0x12, 0x34, 0x53, 0x10,
++ 0x10, 0x17, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x48, 0x44, 0x04, 0xf8, 0x30,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x12, 0x17, 0x32, 0x52, 0x13,
++ 0x12, 0x10, 0x10, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x68, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x10, 0x13, 0x32, 0x52, 0x13,
++ 0x12, 0x12, 0x13, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x60, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x32, 0x52, 0x13,
++ 0x10, 0x13, 0x10, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x0f, 0x11, 0x11, 0x3f, 0x51, 0x13,
++ 0x13, 0x15, 0x15, 0x19, 0x11, 0x11, 0x00, 0x00,
++ 0x48, 0xa8, 0x28, 0x28, 0x28, 0xe8, 0x28, 0x28,
++ 0xa8, 0x68, 0x68, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x09, 0x08, 0x08, 0x13, 0x10, 0x33, 0x52, 0x13,
++ 0x12, 0x10, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xf8, 0x48, 0xf8, 0x40, 0xfc,
++ 0xc4, 0xc4, 0x44, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x13, 0x32, 0x53, 0x12,
++ 0x13, 0x10, 0x17, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x11, 0x32, 0x5f, 0x10,
++ 0x13, 0x12, 0x12, 0x13, 0x12, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0x10, 0xfc, 0x08,
++ 0xc8, 0x48, 0x48, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x32, 0x52, 0x13,
++ 0x12, 0x15, 0x15, 0x19, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x48, 0x40, 0xfc,
++ 0x40, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x13, 0x12, 0x32, 0x52, 0x12,
++ 0x12, 0x13, 0x15, 0x15, 0x19, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x04, 0xfc, 0x20, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0x24, 0x24, 0x24, 0xfc, 0x04, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x12, 0x13, 0x32, 0x52, 0x13,
++ 0x12, 0x10, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x80, 0x38, 0x08, 0x08, 0xb8, 0x08, 0x08, 0xf8,
++ 0xa8, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x12, 0x12, 0x34, 0x51, 0x12,
++ 0x13, 0x10, 0x10, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa4, 0xa8, 0xa4, 0x1c, 0x00,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x11, 0x11, 0x31, 0x52, 0x14,
++ 0x10, 0x17, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x10, 0x30, 0xc8, 0x48,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x11, 0x31, 0x52, 0x14,
++ 0x10, 0x17, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0xe0, 0xa0, 0x24, 0x24, 0x1c, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x0a, 0x0a, 0x0a, 0x13, 0x12, 0x32, 0x5f, 0x12,
++ 0x13, 0x16, 0x16, 0x1a, 0x12, 0x16, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x88, 0x48, 0x48, 0xc8, 0x28,
++ 0x30, 0x90, 0xb0, 0x28, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x13, 0x12, 0x33, 0x52, 0x10,
++ 0x17, 0x14, 0x17, 0x14, 0x17, 0x14, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x13, 0x10, 0x37, 0x50, 0x13,
++ 0x12, 0x12, 0x13, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0xf8,
++ 0x48, 0x48, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x10, 0x13, 0x32, 0x53, 0x12,
++ 0x13, 0x10, 0x17, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x40, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x12, 0x13, 0x32, 0x53, 0x10,
++ 0x10, 0x11, 0x17, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x40,
++ 0xa0, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x14, 0x14, 0x34, 0x55, 0x15,
++ 0x17, 0x15, 0x15, 0x19, 0x19, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x88, 0x88, 0x88, 0xfc, 0x48,
++ 0x28, 0x28, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x0f, 0x0c, 0x17, 0x14, 0x37, 0x54, 0x14,
++ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00,
++ 0x00, 0xbc, 0xa4, 0xbc, 0xa4, 0xbc, 0x04, 0x04,
++ 0x04, 0x04, 0x04, 0x04, 0x04, 0x0c, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x10, 0x17, 0x34, 0x57, 0x15,
++ 0x15, 0x16, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xfc, 0x44, 0x74, 0x54,
++ 0x54, 0xec, 0xcc, 0x44, 0x44, 0x4c, 0x00, 0x00,
++ 0x08, 0x0f, 0x0d, 0x15, 0x15, 0x35, 0x55, 0x14,
++ 0x17, 0x15, 0x14, 0x15, 0x17, 0x14, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x40,
++ 0xfc, 0x90, 0x60, 0xd8, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0f, 0x0c, 0x14, 0x17, 0x34, 0x54, 0x17,
++ 0x14, 0x14, 0x17, 0x14, 0x14, 0x14, 0x00, 0x00,
++ 0x00, 0xb8, 0x88, 0x88, 0xb8, 0x88, 0x00, 0x78,
++ 0x48, 0x28, 0x30, 0x10, 0x28, 0xc4, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x1f, 0x60, 0x1f, 0x19, 0x15,
++ 0x1f, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0xf0, 0x0c, 0xf0, 0x30, 0x50,
++ 0xf0, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x00, 0x00,
++ 0x0a, 0x0a, 0x0b, 0x12, 0x12, 0x33, 0x5e, 0x10,
++ 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x20, 0x24, 0xe8, 0x30, 0x20, 0xa4, 0x5c, 0x80,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x10, 0x11, 0x33, 0x52, 0x12,
++ 0x13, 0x12, 0x12, 0x14, 0x14, 0x19, 0x00, 0x00,
++ 0x40, 0xfc, 0x90, 0x60, 0x90, 0xfc, 0x10, 0x60,
++ 0x88, 0x30, 0xc4, 0x08, 0x30, 0xc0, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x13, 0x12, 0x33, 0x52, 0x13,
++ 0x14, 0x1c, 0x15, 0x16, 0x17, 0x14, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x88, 0xc8, 0x28, 0x08, 0xe8, 0x30, 0x00, 0x00,
++ 0x08, 0x0a, 0x0a, 0x12, 0x1f, 0x32, 0x52, 0x17,
++ 0x14, 0x14, 0x14, 0x17, 0x14, 0x10, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x48, 0xc8, 0xa8,
++ 0xb0, 0x90, 0xb0, 0xa8, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x10, 0x10, 0x37, 0x50, 0x10,
++ 0x13, 0x1d, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x50, 0xfc, 0x60, 0x90,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x09, 0x09, 0x0b, 0x12, 0x15, 0x39, 0x52, 0x14,
++ 0x10, 0x11, 0x15, 0x15, 0x19, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0xa8, 0xa8, 0x68, 0x68, 0xb0,
++ 0x80, 0x50, 0x48, 0x04, 0x14, 0xf0, 0x00, 0x00,
++ 0x09, 0x08, 0x08, 0x11, 0x17, 0x38, 0x57, 0x14,
++ 0x16, 0x15, 0x16, 0x15, 0x14, 0x15, 0x00, 0x00,
++ 0xc0, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xa8, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x12, 0x13, 0x32, 0x53, 0x12,
++ 0x10, 0x10, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xc8,
++ 0xd0, 0xd0, 0x68, 0x7c, 0x44, 0x3c, 0x00, 0x00,
++ 0x09, 0x09, 0x09, 0x1f, 0x15, 0x34, 0x54, 0x1b,
++ 0x11, 0x11, 0x12, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x48, 0xc8, 0xa8, 0x28,
++ 0x30, 0x10, 0x90, 0xa8, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x13, 0x12, 0x33, 0x52, 0x13,
++ 0x12, 0x10, 0x1f, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x50, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x58, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x08, 0x0f, 0x0c, 0x14, 0x14, 0x34, 0x54, 0x15,
++ 0x15, 0x15, 0x15, 0x14, 0x17, 0x14, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x90, 0xf0, 0x00, 0xf8,
++ 0x68, 0x68, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x0a, 0x0a, 0x0f, 0x12, 0x1f, 0x32, 0x52, 0x1f,
++ 0x12, 0x13, 0x12, 0x14, 0x14, 0x19, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0x7c, 0xc8, 0x48, 0xa8, 0xa8,
++ 0x30, 0x90, 0x90, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x1f, 0x60, 0x1e, 0x12, 0x12,
++ 0x1e, 0x08, 0x0c, 0x12, 0x22, 0x41, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0xf0, 0x0c, 0xf0, 0x90, 0x90,
++ 0xf0, 0x20, 0x20, 0x50, 0x88, 0x08, 0x00, 0x00,
++ 0x08, 0x0f, 0x09, 0x17, 0x15, 0x37, 0x50, 0x1f,
++ 0x11, 0x17, 0x1a, 0x13, 0x12, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x28, 0xf8, 0x80, 0xfc,
++ 0x20, 0xf8, 0x24, 0xe0, 0x08, 0xf8, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x13, 0x12, 0x33, 0x53, 0x10,
++ 0x17, 0x10, 0x1f, 0x12, 0x11, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0xf8, 0x48,
++ 0xfc, 0x10, 0xfc, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x17, 0x12, 0x33, 0x53, 0x12,
++ 0x13, 0x10, 0x1f, 0x11, 0x10, 0x17, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0xf8, 0x48,
++ 0xf8, 0x80, 0xfc, 0x90, 0x70, 0x88, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x13, 0x10, 0x33, 0x52, 0x13,
++ 0x11, 0x1f, 0x10, 0x13, 0x12, 0x13, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xf8, 0x08, 0xf8,
++ 0x10, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0x00,
++ 0x08, 0x0f, 0x0a, 0x14, 0x13, 0x32, 0x53, 0x12,
++ 0x13, 0x12, 0x15, 0x14, 0x1a, 0x12, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x44, 0xf0, 0x10, 0xf8, 0x08,
++ 0xfc, 0x54, 0x2c, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x17, 0x11, 0x37, 0x51, 0x11,
++ 0x16, 0x17, 0x10, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xbc, 0x10, 0xbc,
++ 0x00, 0xfc, 0xa0, 0xa0, 0x24, 0x1c, 0x00, 0x00,
++ 0x09, 0x0f, 0x0d, 0x15, 0x17, 0x33, 0x55, 0x19,
++ 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x10, 0xfc, 0x50, 0x50, 0xfc, 0x30, 0xb4, 0x4c,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x09, 0x09, 0x0f, 0x11, 0x1f, 0x33, 0x52, 0x14,
++ 0x1b, 0x12, 0x13, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0xfc, 0x30, 0xb0, 0xc8,
++ 0xf4, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x0f, 0x09, 0x1f, 0x10, 0x33, 0x52, 0x13,
++ 0x12, 0x13, 0x10, 0x13, 0x10, 0x17, 0x00, 0x00,
++ 0x40, 0xf8, 0x20, 0xfc, 0x00, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00,
++ 0x08, 0x0f, 0x09, 0x17, 0x15, 0x37, 0x53, 0x12,
++ 0x13, 0x13, 0x12, 0x13, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x28, 0xf8, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x30, 0x08, 0x00, 0x00,
++ 0x08, 0x0f, 0x0b, 0x12, 0x13, 0x32, 0x53, 0x17,
++ 0x13, 0x12, 0x13, 0x12, 0x13, 0x17, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xfc,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x11, 0x17, 0x30, 0x53, 0x12,
++ 0x12, 0x13, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xfc, 0x00, 0xb8, 0xa8,
++ 0xa8, 0xb8, 0x10, 0x98, 0x64, 0x44, 0x00, 0x00,
++ 0x09, 0x09, 0x0b, 0x12, 0x17, 0x3a, 0x53, 0x12,
++ 0x13, 0x10, 0x17, 0x14, 0x14, 0x14, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x40, 0xf8, 0x40, 0xf8, 0x40,
++ 0xfc, 0x00, 0xbc, 0xa4, 0xe4, 0x0c, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x13, 0x12, 0x33, 0x50, 0x17,
++ 0x14, 0x17, 0x15, 0x19, 0x19, 0x17, 0x00, 0x00,
++ 0xa0, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x00, 0xf8,
++ 0xe0, 0xfc, 0x48, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x08, 0x0f, 0x0d, 0x17, 0x14, 0x37, 0x55, 0x17,
++ 0x10, 0x13, 0x12, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x20, 0xe0, 0x20, 0xbc, 0xc0, 0x80, 0x38, 0xc0,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x11, 0x3e, 0x2a, 0x6a, 0x2e, 0x32,
++ 0x23, 0x22, 0x23, 0x22, 0x24, 0x28, 0x00, 0x00,
++ 0x80, 0xfc, 0x48, 0xb8, 0xa8, 0xb8, 0xe8, 0x14,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x0f, 0x08, 0x13, 0x1f, 0x33, 0x50, 0x13,
++ 0x1f, 0x10, 0x17, 0x15, 0x17, 0x14, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xfc, 0xe8, 0x40, 0xf8,
++ 0xfc, 0x08, 0xfc, 0x48, 0x28, 0x18, 0x00, 0x00,
++ 0x09, 0x0f, 0x09, 0x13, 0x12, 0x33, 0x50, 0x17,
++ 0x14, 0x18, 0x13, 0x10, 0x10, 0x17, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0xa8, 0xf8, 0x00, 0xfc,
++ 0x44, 0xf8, 0x90, 0x60, 0xc0, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x0a, 0x13, 0x12, 0x33, 0x52, 0x10,
++ 0x17, 0x15, 0x17, 0x15, 0x17, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00,
++ 0xfc, 0x54, 0xfc, 0x54, 0xfc, 0x44, 0x00, 0x00,
++ 0x15, 0x1f, 0x15, 0x17, 0x22, 0x2f, 0x6a, 0x2f,
++ 0x22, 0x2f, 0x22, 0x2f, 0x25, 0x28, 0x00, 0x00,
++ 0x28, 0xa8, 0x28, 0x7c, 0x50, 0xd0, 0xfc, 0xd0,
++ 0x50, 0xfc, 0x50, 0xd0, 0x7c, 0xc0, 0x00, 0x00,
++ 0x0f, 0x08, 0x0f, 0x15, 0x10, 0x37, 0x54, 0x17,
++ 0x14, 0x17, 0x15, 0x19, 0x19, 0x17, 0x00, 0x00,
++ 0xbc, 0x00, 0xbc, 0xb4, 0x40, 0xfc, 0xa0, 0xf8,
++ 0xa8, 0xf8, 0xe4, 0x38, 0xe4, 0x1c, 0x00, 0x00,
++ 0x13, 0x12, 0x13, 0x20, 0x2f, 0x6b, 0x29, 0x2f,
++ 0x2a, 0x2b, 0x2b, 0x32, 0x37, 0x20, 0x00, 0x00,
++ 0xb8, 0xa8, 0xb8, 0x00, 0xfc, 0xa0, 0x20, 0xfc,
++ 0xe8, 0xa8, 0x90, 0xd0, 0xa8, 0xc4, 0x00, 0x00,
++ 0x09, 0x0f, 0x0d, 0x11, 0x13, 0x33, 0x52, 0x13,
++ 0x10, 0x13, 0x10, 0x17, 0x12, 0x14, 0x00, 0x00,
++ 0x50, 0xfc, 0x18, 0xf0, 0xf8, 0x58, 0xe8, 0xf8,
++ 0x40, 0xf8, 0x40, 0xfc, 0xa8, 0xa4, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x02, 0x3c, 0x20, 0x20, 0x3e, 0x20, 0x20, 0x3f,
++ 0x24, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x08, 0xf8,
++ 0x88, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x04, 0x08, 0x10, 0x6f, 0x08, 0x08, 0x08,
++ 0x0f, 0x02, 0x02, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0xc0, 0x40, 0x20, 0x10, 0xec, 0x20, 0x20, 0x20,
++ 0xe0, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x02, 0x03, 0x04, 0x18, 0x7f, 0x11, 0x11, 0x1f,
++ 0x13, 0x03, 0x05, 0x09, 0x11, 0x60, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x80, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0x40, 0x20, 0x24, 0x04, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x22, 0x22, 0x3e,
++ 0x14, 0x14, 0x15, 0x26, 0x2c, 0x41, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x88, 0x88, 0xf8,
++ 0x50, 0x50, 0x50, 0x94, 0x94, 0x0c, 0x00, 0x00,
++ 0x08, 0x3e, 0x14, 0x7f, 0x00, 0x3e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x14, 0x15, 0x26, 0x4d, 0x00, 0x00,
++ 0x20, 0xf8, 0x50, 0xfc, 0x00, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x3f, 0x21, 0x2d, 0x25,
++ 0x25, 0x2b, 0x33, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x08, 0x68, 0x28,
++ 0x28, 0x58, 0x98, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x07, 0x02, 0x04, 0x18, 0x6f, 0x00, 0x3e, 0x22,
++ 0x3a, 0x27, 0x3a, 0x26, 0x22, 0x26, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x30, 0xec, 0x00, 0x48, 0x48,
++ 0x90, 0x20, 0x90, 0x90, 0x48, 0x48, 0x00, 0x00,
++ 0x01, 0x04, 0x08, 0x10, 0x6f, 0x04, 0x04, 0x07,
++ 0x08, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
++ 0xc0, 0x40, 0x20, 0x10, 0xec, 0x00, 0x00, 0xe0,
++ 0x20, 0x20, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00,
++ 0x04, 0x3c, 0x04, 0x1f, 0x69, 0x0f, 0x09, 0x0f,
++ 0x04, 0x3f, 0x04, 0x7f, 0x08, 0x30, 0x00, 0x00,
++ 0x48, 0x70, 0x44, 0xfc, 0x20, 0xe0, 0x20, 0xe0,
++ 0x40, 0xf8, 0x40, 0xfc, 0x20, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x27, 0x24, 0x24, 0x27,
++ 0x24, 0x24, 0x24, 0x23, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xc8, 0x48, 0x48, 0xc8,
++ 0x08, 0x28, 0x28, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x1e, 0x12, 0x12, 0x12, 0x12, 0x7f, 0x12,
++ 0x12, 0x12, 0x12, 0x22, 0x22, 0x47, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x48, 0x48, 0xfc, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x11, 0x11, 0x1f, 0x11,
++ 0x11, 0x7f, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10,
++ 0x10, 0xfc, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x28, 0x28, 0x30, 0x27,
++ 0x24, 0x24, 0x24, 0x27, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x98, 0x78, 0x08, 0xc8,
++ 0x48, 0x48, 0x48, 0xc8, 0x48, 0x18, 0x00, 0x00,
++ 0x01, 0x3f, 0x21, 0x3f, 0x21, 0x3f, 0x00, 0x1f,
++ 0x10, 0x17, 0x10, 0x17, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00, 0xf0,
++ 0x10, 0xd0, 0x10, 0xd0, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x3f, 0x04, 0x1f, 0x04, 0x7f, 0x01, 0x1f,
++ 0x11, 0x1f, 0x11, 0x7f, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xfc, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x07, 0x18,
++ 0x7f, 0x11, 0x1f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xc0, 0x80,
++ 0xf0, 0x10, 0xf0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x10, 0x20, 0x40,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x04, 0x08, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x47, 0x18, 0x7f, 0x11, 0x11,
++ 0x1f, 0x13, 0x03, 0x05, 0x19, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xc0, 0x80, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x40, 0x24, 0x24, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x5e, 0x00, 0x00, 0x7f, 0x14,
++ 0x14, 0x14, 0x14, 0x25, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x40, 0x7c, 0x40, 0xf8, 0x88,
++ 0x50, 0x30, 0x68, 0x8c, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x5f, 0x02, 0x06, 0x19, 0x6b,
++ 0x0c, 0x35, 0x06, 0x0c, 0x30, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf8, 0x00, 0x48, 0x48, 0x50,
++ 0xa0, 0xa0, 0x90, 0x88, 0x84, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x5c, 0x10, 0x1e, 0x10, 0x1f,
++ 0x04, 0x1f, 0x6a, 0x25, 0x25, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x00, 0xf8, 0x48, 0x28, 0x28, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x7f, 0x0f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x7f, 0x09, 0x1f, 0x69, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0xe0, 0x20, 0xe0, 0x20,
++ 0xe0, 0xfc, 0x20, 0xf0, 0x2c, 0x60, 0x00, 0x00,
++ 0x00, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x02, 0x02, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x17, 0x10, 0x00, 0x00, 0x1f,
++ 0x10, 0x21, 0x21, 0x42, 0x44, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf0, 0x90, 0x90, 0x90, 0xfc,
++ 0xc0, 0x20, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x22, 0x12, 0x13, 0x02, 0x02, 0x12,
++ 0x13, 0x22, 0x20, 0x40, 0x5f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x13, 0x12, 0x02, 0x02, 0x12,
++ 0x13, 0x22, 0x20, 0x40, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x10, 0x17, 0x00, 0x00, 0x11,
++ 0x11, 0x22, 0x24, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x44, 0xe4, 0xe8, 0xf0, 0x60,
++ 0x50, 0x50, 0x48, 0x44, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x03, 0x22, 0x12, 0x12, 0x03, 0x02, 0x10,
++ 0x10, 0x21, 0x21, 0x42, 0x44, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0xa8, 0xa0,
++ 0xa0, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x0f, 0x22, 0x12, 0x13, 0x04, 0x04, 0x1a,
++ 0x13, 0x21, 0x22, 0x42, 0x44, 0x08, 0x00, 0x00,
++ 0x08, 0xc8, 0x28, 0x28, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0x28, 0x28, 0x28, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x07, 0x24, 0x14, 0x17, 0x04, 0x04, 0x15,
++ 0x15, 0x25, 0x25, 0x44, 0x47, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x88, 0xe8,
++ 0x28, 0x28, 0xe8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x27, 0x10, 0x13, 0x02, 0x02, 0x13,
++ 0x10, 0x22, 0x22, 0x44, 0x48, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0xf8, 0x08, 0x08, 0xf8,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x00, 0x07, 0x20, 0x13, 0x12, 0x02, 0x02, 0x13,
++ 0x11, 0x20, 0x27, 0x41, 0x42, 0x04, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf8, 0xe8, 0xa8, 0xe8, 0xf8,
++ 0xf0, 0x00, 0xfc, 0x50, 0x48, 0x48, 0x00, 0x00,
++ 0x00, 0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
++ 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x12, 0x1f, 0x11, 0x14,
++ 0x17, 0x15, 0x1d, 0x22, 0x25, 0x58, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0xe8, 0x10, 0xf0, 0x00,
++ 0x70, 0x54, 0x54, 0xcc, 0x80, 0x7c, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x11, 0x1f, 0x11, 0x13,
++ 0x13, 0x15, 0x15, 0x29, 0x31, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x90,
++ 0x50, 0x50, 0x34, 0x2c, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x0b, 0x10, 0x17, 0x30, 0x50, 0x13, 0x10,
++ 0x07, 0x04, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x00,
++ 0xc0, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x17, 0x14, 0x17, 0x14, 0x17,
++ 0x10, 0x1f, 0x11, 0x27, 0x21, 0x4f, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xd0, 0x50, 0xd0, 0x50, 0xd0,
++ 0x10, 0xf0, 0x14, 0xcc, 0x0c, 0xe4, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x0f, 0x00, 0x40, 0x41, 0x5d, 0x55, 0x55, 0x55,
++ 0x5d, 0x55, 0x41, 0x46, 0x7f, 0x40, 0x00, 0x00,
++ 0xe0, 0x40, 0x88, 0x08, 0xf8, 0x98, 0x68, 0x28,
++ 0x58, 0x98, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x02, 0x22, 0x12, 0x0a, 0x06,
++ 0x05, 0x04, 0x08, 0x10, 0x20, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x90, 0x70, 0x1c, 0x10, 0x20, 0xc0, 0x00, 0x00,
++ 0x01, 0x06, 0x3c, 0x04, 0x04, 0x04, 0x7f, 0x04,
++ 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0xc8, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x09, 0x09, 0x09, 0x7f,
++ 0x08, 0x0c, 0x12, 0x11, 0x21, 0x40, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0xc8,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x1f, 0x2a, 0x2a, 0x4a, 0x12,
++ 0x14, 0x24, 0x08, 0x11, 0x01, 0x06, 0x00, 0x00,
++ 0x08, 0x28, 0x28, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x3f, 0x04, 0x04, 0x7f, 0x08,
++ 0x0a, 0x09, 0x11, 0x1f, 0x70, 0x00, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0xc8, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x2a, 0x2a, 0x2a, 0x2a, 0x7f, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x21, 0x00, 0x00,
++ 0x08, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xe8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x01, 0x06, 0x3c, 0x04, 0x04, 0x7f, 0x04, 0x04,
++ 0x3f, 0x21, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0xc8, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x14, 0x22, 0x5d, 0x00, 0x7f,
++ 0x10, 0x1e, 0x22, 0x02, 0x02, 0x0c, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x02, 0x02, 0x3c, 0x06, 0x19, 0x64, 0x04, 0x7f,
++ 0x0c, 0x0e, 0x15, 0x25, 0x44, 0x04, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x22, 0x12, 0x15, 0x7e, 0x14, 0x15, 0x14, 0x7f,
++ 0x14, 0x14, 0x14, 0x24, 0x25, 0x46, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x48, 0x48, 0x48, 0xc8, 0x48,
++ 0x68, 0x58, 0x8c, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x2a, 0x2a, 0x54, 0x54, 0x2a, 0x2a,
++ 0x00, 0x7f, 0x08, 0x08, 0x0f, 0x78, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x22, 0x22,
++ 0x3e, 0x14, 0x14, 0x14, 0x24, 0x43, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x08, 0x1c, 0x04, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x7f, 0x49, 0x49, 0x7f,
++ 0x4c, 0x1a, 0x19, 0x29, 0x48, 0x08, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x0c, 0x12, 0x22, 0x7f, 0x01,
++ 0x3d, 0x25, 0x25, 0x3d, 0x21, 0x03, 0x00, 0x00,
++ 0x08, 0x48, 0xc8, 0x48, 0x48, 0x48, 0xc8, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x3f, 0x21, 0x3f, 0x10, 0x1f,
++ 0x2b, 0x4b, 0x15, 0x25, 0x09, 0x16, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x04, 0x7f, 0x3e, 0x2a, 0x36, 0x2a, 0x2a,
++ 0x26, 0x00, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x20, 0x40, 0xfc, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x18, 0x00, 0xf8, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x08, 0x2a, 0x2a, 0x3e, 0x00, 0x7f, 0x00, 0x3e,
++ 0x22, 0x3e, 0x22, 0x14, 0x1e, 0x70, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x7f, 0x15, 0x75, 0x15, 0x35,
++ 0x5c, 0x0e, 0x15, 0x24, 0x44, 0x04, 0x00, 0x00,
++ 0x88, 0x28, 0x28, 0xe8, 0x28, 0xe8, 0x28, 0x68,
++ 0xe8, 0x28, 0x28, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x12, 0x12, 0x7f, 0x12, 0x14, 0x0a, 0x11, 0x1f,
++ 0x20, 0x5f, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x08, 0x48, 0xc8, 0x48, 0x48, 0x48, 0x48, 0xc8,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x24, 0x49, 0x24, 0x3f, 0x24, 0x3f, 0x24, 0x3f,
++ 0x04, 0x7f, 0x0e, 0x15, 0x64, 0x04, 0x00, 0x00,
++ 0x88, 0x28, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0x28, 0xe8, 0x28, 0x08, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x14, 0x7f, 0x55, 0x7f, 0x00, 0x3e,
++ 0x00, 0x7f, 0x2a, 0x29, 0x49, 0x18, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x0a, 0x11, 0x3f, 0x40, 0x3f, 0x2d,
++ 0x3f, 0x12, 0x1a, 0x15, 0x24, 0x48, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x08, 0x88, 0x98, 0x00, 0x00,
++ 0x04, 0x04, 0x0a, 0x11, 0x3f, 0x40, 0x3f, 0x2d,
++ 0x3f, 0x12, 0x12, 0x2d, 0x25, 0x49, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xa8, 0xa8, 0x68, 0x68, 0x28,
++ 0x38, 0x28, 0x4c, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x0a, 0x11, 0x3f, 0x40, 0x3f, 0x2d,
++ 0x3f, 0x12, 0x12, 0x2d, 0x25, 0x49, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0x28, 0x68, 0x68, 0xa8, 0xa8,
++ 0x28, 0x28, 0x48, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x3e, 0x49, 0x3e, 0x2a,
++ 0x2a, 0x3e, 0x14, 0x12, 0x23, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0xc8, 0x48,
++ 0x68, 0x58, 0x8c, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x21, 0x3e, 0x32, 0x5e,
++ 0x10, 0x3f, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x50, 0xfc, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x08, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x04, 0x7f, 0x0a, 0x7f, 0x2e, 0x2e, 0x3f, 0x51,
++ 0x1f, 0x11, 0x1f, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x08, 0xe8, 0xa8, 0x28, 0xa8, 0xe8, 0x68, 0x28,
++ 0x28, 0x28, 0x28, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x7c, 0x28, 0x2a, 0x2a, 0x7e, 0x12,
++ 0x1e, 0x70, 0x10, 0x11, 0x21, 0x42, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0xa8, 0xa8, 0xa8, 0xfc, 0x90,
++ 0x90, 0xfc, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x7f, 0x2a, 0x2a, 0x2a, 0x7e, 0x12,
++ 0x1e, 0x72, 0x12, 0x14, 0x24, 0x49, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0xa8, 0xa8, 0xa8, 0xfc, 0x90,
++ 0x90, 0xfc, 0x90, 0x90, 0x90, 0x90, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x1e, 0x23, 0x22, 0x7a, 0x2a,
++ 0x2a, 0x2a, 0x3a, 0x22, 0x03, 0x0e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x7e, 0x12, 0x12, 0x13, 0x22, 0x4c, 0x00,
++ 0x3e, 0x22, 0x22, 0x22, 0x3f, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x08, 0x3e, 0x00,
++ 0x3e, 0x22, 0x22, 0x22, 0x3f, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x1f, 0x21, 0x02, 0x7f, 0x06,
++ 0x0a, 0x1f, 0x62, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0xf8, 0x08, 0x80, 0xfc, 0x40,
++ 0x20, 0xf0, 0x2c, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x00, 0x7f, 0x2a, 0x2a, 0x55, 0x54, 0x2a, 0x2a,
++ 0x00, 0x7f, 0x08, 0x08, 0x0e, 0x79, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x00, 0x3f, 0x22, 0x22, 0x3e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x49, 0x1a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x3e, 0x22,
++ 0x3f, 0x22, 0x3e, 0x22, 0x3f, 0x61, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x40, 0x40,
++ 0xf8, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x08, 0x0c, 0x2a, 0x2a, 0x59, 0x14, 0x22, 0x3f,
++ 0x22, 0x5f, 0x02, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x20, 0x30, 0xa8, 0xa8, 0x60, 0x50, 0x88, 0xfc,
++ 0x08, 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x08, 0x7f, 0x3e, 0x22,
++ 0x3e, 0x3e, 0x22, 0x3e, 0x12, 0x61, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x2a, 0x54, 0x2a, 0x3e, 0x2b, 0x3e, 0x2a, 0x3e,
++ 0x08, 0x7e, 0x1c, 0x2a, 0x49, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1e, 0x23, 0x7e, 0x23, 0x3e,
++ 0x22, 0x3e, 0x3e, 0x20, 0x3e, 0x21, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x40, 0x40, 0xf8, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x2b, 0x5d, 0x2b, 0x4d, 0x1a, 0x61,
++ 0x09, 0x34, 0x0a, 0x34, 0x09, 0x32, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x06, 0x38, 0x7f, 0x08, 0x7f, 0x6b, 0x5d, 0x7f,
++ 0x08, 0x7f, 0x08, 0x7e, 0x3a, 0x55, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x25, 0x3f, 0x25, 0x2f, 0x2a, 0x2f,
++ 0x2a, 0x2f, 0x3f, 0x33, 0x3f, 0x50, 0x00, 0x00,
++ 0x20, 0xa0, 0x20, 0xa0, 0x78, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xe8, 0x68, 0xc8, 0xd8, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x77, 0x55, 0x77, 0x24, 0x3f,
++ 0x24, 0x7e, 0x24, 0x3e, 0x24, 0x3f, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0f, 0x10, 0x10, 0x20, 0x40,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0f, 0x12, 0x12, 0x2e, 0x45,
++ 0x04, 0x08, 0x10, 0x01, 0x02, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x48, 0x48, 0x48, 0xc8,
++ 0x48, 0xa8, 0x88, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0f, 0x10, 0x11, 0x39, 0x57,
++ 0x13, 0x14, 0x18, 0x1f, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x48, 0x48,
++ 0x48, 0xc8, 0x48, 0xc8, 0x48, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x10, 0x10, 0x3f, 0x52, 0x12,
++ 0x1f, 0x12, 0x12, 0x1f, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0x08, 0xc8, 0x48, 0x48,
++ 0xc8, 0x48, 0x48, 0xc8, 0x48, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x12, 0x3f, 0x42, 0x1f, 0x12,
++ 0x1f, 0x12, 0x1f, 0x12, 0x12, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x48, 0xe8, 0x08, 0xc8, 0x48,
++ 0xc8, 0x48, 0xc8, 0x48, 0xc8, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x10, 0x3f, 0x4f, 0x08, 0x0f,
++ 0x1f, 0x12, 0x1f, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0xc8, 0x88, 0x88, 0x88,
++ 0xc8, 0x48, 0xc8, 0x48, 0xc8, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x14, 0x12, 0x3f, 0x40, 0x7e,
++ 0x10, 0x1e, 0x22, 0x02, 0x02, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x88, 0xe8, 0xa8, 0xa8,
++ 0xe8, 0xb0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x13, 0x1c,
++ 0x70, 0x10, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x10, 0x20, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x04, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x27, 0x24, 0x27, 0x24, 0x27,
++ 0x24, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x90, 0xf0, 0x90, 0xf0,
++ 0x90, 0x80, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x24, 0x35, 0x2b, 0x29, 0x21,
++ 0x25, 0x25, 0x29, 0x29, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0xa0, 0xf8, 0x20, 0xf8, 0x20,
++ 0xf8, 0x20, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x27, 0x24, 0x3f, 0x27, 0x24,
++ 0x27, 0x27, 0x27, 0x2c, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0x90, 0xfc, 0xf0, 0x10,
++ 0xf0, 0xf0, 0xf0, 0x18, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x21, 0x27, 0x38, 0x27, 0x25,
++ 0x27, 0x22, 0x25, 0x29, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x80, 0x40, 0xf0, 0x08, 0x70, 0x50,
++ 0x70, 0x20, 0x50, 0x88, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x08, 0x07, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x20, 0x23, 0x22, 0x23, 0x20, 0x2f,
++ 0x29, 0x2f, 0x29, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xe0, 0x20, 0xe0, 0x00, 0x78,
++ 0x48, 0x78, 0x48, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x3f, 0x04, 0x04, 0x08, 0x11, 0x21,
++ 0x01, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xc0, 0x40, 0x44, 0x44, 0x3c, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x7f, 0x11,
++ 0x11, 0x11, 0x11, 0x21, 0x21, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x7f, 0x11, 0x11,
++ 0x11, 0x11, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x3f, 0x01, 0x09, 0x09, 0x08,
++ 0x7f, 0x08, 0x08, 0x10, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x20, 0x20, 0x20,
++ 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x3f, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0xf8, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x01, 0x21, 0x13, 0x12, 0x07, 0x1a, 0x13, 0x22,
++ 0x23, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0x20, 0xf8, 0x40, 0xf0, 0x40, 0xf0, 0x40,
++ 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x01,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x00, 0x80, 0x40, 0x20,
++ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x09, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x13, 0x12,
++ 0x12, 0x12, 0x12, 0x22, 0x22, 0x41, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10,
++ 0x10, 0x10, 0x60, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x1e, 0x12, 0x12, 0x32, 0x2a, 0x4c,
++ 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0xb0, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x08, 0x0c, 0x12, 0x21, 0x49, 0x0c, 0x12, 0x11,
++ 0x3f, 0x52, 0x12, 0x12, 0x1e, 0x10, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x70, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x1f, 0x02, 0x7f, 0x04, 0x08,
++ 0x17, 0x64, 0x04, 0x05, 0x04, 0x03, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0xf0, 0x80, 0xfc, 0x40, 0x20,
++ 0xd0, 0x4c, 0x40, 0x80, 0x10, 0xf0, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x20, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x13, 0x12, 0x12, 0x12, 0x1f, 0x12,
++ 0x13, 0x13, 0x25, 0x25, 0x49, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x90, 0xa8, 0x28, 0xd0, 0x14,
++ 0x24, 0x08, 0x10, 0x24, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x14, 0x17, 0x14, 0x17,
++ 0x14, 0x14, 0x17, 0x23, 0x24, 0x48, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x88, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x28, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x1f, 0x17, 0x10, 0x13, 0x12, 0x13, 0x13,
++ 0x12, 0x13, 0x11, 0x27, 0x20, 0x4f, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x80, 0xf0, 0x10, 0xf0, 0xf0,
++ 0x10, 0xf0, 0xf0, 0x20, 0xe0, 0x38, 0x00, 0x00,
++ 0x00, 0x1f, 0x18, 0x14, 0x15, 0x1f, 0x12, 0x1a,
++ 0x1a, 0x1f, 0x1a, 0x22, 0x24, 0x48, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xa0, 0x20, 0xfc, 0x54, 0x98,
++ 0x90, 0x90, 0xb0, 0x28, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x1f, 0x15, 0x15, 0x1f, 0x15, 0x17, 0x15,
++ 0x17, 0x15, 0x1f, 0x25, 0x24, 0x48, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x10, 0xe0, 0x40, 0x7c, 0x50,
++ 0x50, 0x50, 0xd0, 0x50, 0x90, 0x90, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x17, 0x16, 0x1a, 0x1f, 0x18,
++ 0x1f, 0x1d, 0x1d, 0x2f, 0x28, 0x49, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0xa0, 0xfc, 0xc8, 0xa8,
++ 0xa8, 0x90, 0x90, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02,
++ 0x04, 0x04, 0x08, 0x10, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x20, 0x10, 0x08, 0xf8, 0x04, 0x04, 0x00, 0x00,
++ 0x01, 0x02, 0x1f, 0x08, 0x15, 0x7e, 0x04, 0x18,
++ 0x63, 0x0c, 0x01, 0x0e, 0x00, 0x1f, 0x00, 0x00,
++ 0x00, 0x40, 0xf0, 0x10, 0x28, 0xfc, 0x40, 0xb0,
++ 0x0c, 0x40, 0x90, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x5f, 0x10, 0x1f, 0x17, 0x1f,
++ 0x02, 0x7f, 0x1a, 0x64, 0x19, 0x07, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0xf0, 0x10, 0xd0, 0xf0, 0xf0,
++ 0x00, 0xfc, 0xb0, 0xcc, 0x20, 0xd0, 0x00, 0x00,
++ 0x12, 0x1f, 0x24, 0x7f, 0x24, 0x3e, 0x24, 0x3f,
++ 0x20, 0x1f, 0x02, 0x01, 0x06, 0x38, 0x00, 0x00,
++ 0x48, 0xfc, 0x90, 0xf8, 0x90, 0xf8, 0x90, 0xfc,
++ 0x80, 0xf0, 0x60, 0x80, 0xe0, 0x1c, 0x00, 0x00,
++ 0x05, 0x39, 0x21, 0x3d, 0x21, 0x21, 0x3f, 0x01,
++ 0x3f, 0x04, 0x02, 0x01, 0x06, 0x78, 0x00, 0x00,
++ 0x00, 0x78, 0x08, 0x78, 0x08, 0x08, 0xf8, 0x00,
++ 0xf0, 0x20, 0x40, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x3f, 0x24,
++ 0x3f, 0x0f, 0x02, 0x01, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xf8, 0x48,
++ 0xf8, 0xe0, 0x40, 0x80, 0xc0, 0x38, 0x00, 0x00,
++ 0x13, 0x17, 0x54, 0x5b, 0x33, 0x1b, 0x2a, 0x23,
++ 0x40, 0x1f, 0x04, 0x03, 0x06, 0x38, 0x00, 0x00,
++ 0x90, 0xd4, 0x34, 0xb8, 0xd0, 0x98, 0xa4, 0xc4,
++ 0x00, 0xe0, 0x40, 0x80, 0xc0, 0x38, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x79, 0x49, 0x42, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x01, 0x00, 0x78, 0x48, 0x49, 0x49, 0x49, 0x49,
++ 0x49, 0x79, 0x4a, 0x42, 0x04, 0x08, 0x00, 0x00,
++ 0xe0, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x10, 0x10, 0x10, 0x08, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x00, 0x78, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x79, 0x49, 0x42, 0x04, 0x08, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0xa0,
++ 0xa0, 0x20, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x48, 0x48, 0x48, 0x4f, 0x48,
++ 0x48, 0x48, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x49, 0x4a, 0x4a, 0x4c,
++ 0x4f, 0x48, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x4a, 0x4a, 0x4a, 0x4b, 0x48,
++ 0x48, 0x48, 0x79, 0x4a, 0x44, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x60,
++ 0xa0, 0xa0, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x79, 0x49, 0x49, 0x49, 0x49, 0x49,
++ 0x49, 0x49, 0x7a, 0x42, 0x44, 0x00, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4f, 0x48, 0x49, 0x49, 0x49,
++ 0x49, 0x79, 0x49, 0x42, 0x02, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x00, 0xe0, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x48, 0x49, 0x49, 0x49,
++ 0x4f, 0x79, 0x49, 0x41, 0x01, 0x03, 0x00, 0x00,
++ 0x20, 0xe0, 0x60, 0xa0, 0xa0, 0x20, 0x60, 0xa0,
++ 0x20, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x48, 0x49, 0x4f, 0x48, 0x48,
++ 0x48, 0x48, 0x79, 0x49, 0x42, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0x90, 0x88, 0x3c, 0xe4, 0xa0, 0xa0,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x01, 0x00, 0x78, 0x4b, 0x4a, 0x4a, 0x4a, 0x4a,
++ 0x4a, 0x4b, 0x7a, 0x4a, 0x42, 0x02, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xa8,
++ 0x98, 0x18, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x4a, 0x4a, 0x4f, 0x48,
++ 0x48, 0x48, 0x79, 0x49, 0x42, 0x04, 0x00, 0x00,
++ 0x60, 0x20, 0x20, 0x20, 0x10, 0x10, 0xf8, 0x94,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x04, 0x02, 0x01, 0x06, 0x78,
++ 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0x40, 0x80, 0x60, 0x1c,
++ 0xe0, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x49, 0x49, 0x49, 0x49,
++ 0x79, 0x4a, 0x42, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0xf8, 0x88,
++ 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x49, 0x48, 0x48, 0x4f, 0x48,
++ 0x48, 0x49, 0x79, 0x42, 0x44, 0x00, 0x00, 0x00,
++ 0x40, 0x20, 0x20, 0xc0, 0x44, 0x64, 0xe8, 0xf0,
++ 0xe0, 0x50, 0x50, 0x48, 0x44, 0xc0, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x4b, 0x4a, 0x4a, 0x4a,
++ 0x4a, 0x4b, 0x7a, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xc8, 0x48, 0x48, 0x48,
++ 0x48, 0xc8, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x12, 0x34, 0x4c, 0x0d, 0x13,
++ 0x60, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x60, 0x50, 0x88, 0x08, 0xfc,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4f, 0x48, 0x48, 0x4a, 0x49,
++ 0x48, 0x48, 0x78, 0x48, 0x41, 0x07, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x50, 0x90, 0x90,
++ 0xa0, 0x60, 0x50, 0x88, 0x3c, 0xc4, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
++ 0x4a, 0x4a, 0x7a, 0x4c, 0x47, 0x08, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0,
++ 0xa0, 0x90, 0xd0, 0xa8, 0xf8, 0x14, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4a, 0x4a, 0x4b, 0x4a, 0x4a,
++ 0x4a, 0x7b, 0x4a, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x48, 0x48,
++ 0x48, 0xf8, 0x48, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x28, 0x2f, 0x28, 0x28, 0x2e, 0x38,
++ 0x60, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x80, 0x88, 0x90, 0xe0, 0x80, 0x84, 0x84, 0x7c,
++ 0x00, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x07,
++ 0x04, 0x04, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0xc0,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4a, 0x4b, 0x4a, 0x4a,
++ 0x4b, 0x7a, 0x48, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48,
++ 0xf8, 0x48, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x49, 0x49, 0x49, 0x49,
++ 0x49, 0x49, 0x79, 0x49, 0x47, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x72, 0x52, 0x5f, 0x55, 0x55, 0x55,
++ 0x5d, 0x53, 0x72, 0x52, 0x44, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x48, 0xc8, 0x48, 0x48, 0x30,
++ 0x30, 0x10, 0xb0, 0xa8, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x02, 0x7a, 0x4a, 0x4a, 0x4b, 0x4a, 0x48,
++ 0x4a, 0x4a, 0x7a, 0x4a, 0x43, 0x02, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0x48, 0x48, 0xf8, 0x48, 0x40,
++ 0x48, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x49, 0x49, 0x4b, 0x4d, 0x49,
++ 0x49, 0x49, 0x79, 0x49, 0x41, 0x01, 0x00, 0x00,
++ 0x88, 0x88, 0x88, 0x08, 0xfc, 0x08, 0x48, 0x28,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x4a, 0x4a, 0x4d, 0x49, 0x49,
++ 0x49, 0x79, 0x49, 0x41, 0x01, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0x08, 0xe8, 0x28, 0x28,
++ 0xe8, 0x30, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x48, 0x48, 0x4f, 0x48, 0x48,
++ 0x4b, 0x78, 0x48, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x00, 0x1f, 0x00, 0x7f,
++ 0x04, 0x07, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x00, 0xf0, 0x00, 0xfc,
++ 0x00, 0xe0, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x1f, 0x10, 0x17, 0x10, 0x17,
++ 0x14, 0x14, 0x14, 0x27, 0x24, 0x40, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0xc8, 0x28, 0xa8,
++ 0xb0, 0x90, 0xb4, 0xac, 0x4c, 0x84, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x49, 0x4f, 0x48, 0x48,
++ 0x4b, 0x78, 0x48, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x90, 0x88, 0x3c, 0xc4, 0x40, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x49, 0x49, 0x4b, 0x4c, 0x48,
++ 0x48, 0x78, 0x48, 0x40, 0x03, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x08, 0x14, 0x94, 0x90,
++ 0x60, 0x60, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x49, 0x4f, 0x49, 0x49, 0x49,
++ 0x49, 0x7f, 0x49, 0x41, 0x02, 0x04, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0x20,
++ 0x20, 0xfc, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x48, 0x49, 0x4b, 0x4c, 0x48,
++ 0x49, 0x79, 0x49, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x02, 0x04, 0x00, 0x19, 0x62,
++ 0x0f, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x44, 0x48, 0xb0, 0x10, 0x08,
++ 0xe4, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1e, 0x12, 0x12, 0x12, 0x12, 0x1e, 0x1a,
++ 0x18, 0x14, 0x15, 0x22, 0x21, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0xf8, 0x60,
++ 0x50, 0x88, 0x08, 0x00, 0x80, 0x7c, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x4b, 0x4a, 0x4a, 0x4a,
++ 0x4b, 0x7b, 0x4a, 0x42, 0x03, 0x02, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0x38, 0x38, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4c, 0x4b, 0x48, 0x48,
++ 0x4f, 0x48, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x30, 0xc0, 0x40, 0x7c,
++ 0xc0, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x48, 0x48, 0x4f, 0x48, 0x48,
++ 0x49, 0x4e, 0x78, 0x48, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x50, 0xfc, 0x40, 0x88,
++ 0x90, 0xe0, 0x80, 0x88, 0x88, 0x78, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x09, 0x09, 0x09, 0x3f, 0x20,
++ 0x27, 0x24, 0x24, 0x27, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0x20, 0xf8, 0x08,
++ 0xc8, 0x48, 0x48, 0xc8, 0x48, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x7a, 0x4c, 0x48, 0x48, 0x49, 0x4b,
++ 0x4d, 0x79, 0x49, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x78, 0x00, 0x00, 0x80, 0xfc, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1f, 0x11, 0x1f, 0x00, 0x7f,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x01, 0x7f, 0x49, 0x49, 0x4f, 0x49, 0x49,
++ 0x49, 0x7f, 0x49, 0x41, 0x01, 0x03, 0x00, 0x00,
++ 0xa0, 0x28, 0x24, 0x24, 0x20, 0xfc, 0x28, 0x28,
++ 0x90, 0x10, 0x34, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x01, 0x78, 0x4b, 0x48, 0x4f, 0x49, 0x4a,
++ 0x4b, 0x7e, 0x4a, 0x42, 0x02, 0x00, 0x00, 0x00,
++ 0x10, 0xa0, 0xe0, 0x90, 0x80, 0xfc, 0x40, 0x40,
++ 0xf8, 0x48, 0x48, 0x48, 0x58, 0x40, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x4b, 0x49, 0x49, 0x4f,
++ 0x48, 0x7b, 0x4a, 0x42, 0x03, 0x02, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf0, 0x10, 0x10, 0xfc,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x4b, 0x4a, 0x4b, 0x4a, 0x4b,
++ 0x4a, 0x79, 0x48, 0x41, 0x02, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x40, 0x80, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x48, 0x48, 0x4f, 0x48, 0x49,
++ 0x4b, 0x7c, 0x4f, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x80, 0x88, 0xe8, 0x90, 0x90, 0xfc, 0x40, 0xf8,
++ 0x30, 0x40, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x01, 0x01,
++ 0x7f, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x20, 0x10,
++ 0xfc, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x48, 0x4b, 0x4a, 0x4a, 0x4b,
++ 0x4a, 0x7a, 0x4b, 0x42, 0x02, 0x02, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x49, 0x48, 0x48, 0x4f, 0x49,
++ 0x49, 0x7f, 0x49, 0x41, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xf0, 0x40, 0x40, 0xfc, 0x10,
++ 0x10, 0xfc, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x4f, 0x4a, 0x4a, 0x4a, 0x4b,
++ 0x4a, 0x7a, 0x4c, 0x44, 0x08, 0x13, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xe8, 0x28, 0x44, 0xa4, 0x90,
++ 0x90, 0x80, 0xa0, 0x90, 0x88, 0x08, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4a, 0x4a, 0x4a, 0x4b, 0x4a,
++ 0x4a, 0x7a, 0x4c, 0x44, 0x0b, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x72, 0x57, 0x55, 0x59, 0x5f, 0x51,
++ 0x55, 0x75, 0x55, 0x45, 0x07, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x38, 0xe8, 0x28, 0x28, 0xe8, 0x28,
++ 0xe8, 0x28, 0x28, 0xf0, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4c, 0x49, 0x4a, 0x48,
++ 0x4b, 0x78, 0x48, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0xa0, 0x24, 0x1c, 0x00,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0f, 0x18, 0x1f, 0x28, 0x4f, 0x08, 0x0f,
++ 0x00, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x20, 0xfc, 0x40, 0xf8, 0x40, 0xf8, 0x40, 0xfc,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x07, 0x7c, 0x4a, 0x49, 0x4a, 0x4c, 0x4f,
++ 0x4c, 0x7a, 0x49, 0x41, 0x02, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0xc8, 0xa8, 0x10, 0xa8, 0xc8, 0xf8,
++ 0xc8, 0xa8, 0x30, 0x90, 0xa8, 0x44, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x48, 0x4b, 0x4a, 0x4b, 0x4a,
++ 0x4b, 0x78, 0x4f, 0x40, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x40, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x7a, 0x4a, 0x4c, 0x49, 0x4a, 0x48,
++ 0x4a, 0x7a, 0x4c, 0x41, 0x02, 0x0c, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xd0, 0xa0, 0x10, 0x50, 0x40,
++ 0x48, 0xc8, 0xb0, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x49, 0x4a, 0x4c, 0x4b, 0x4a,
++ 0x4a, 0x7b, 0x4a, 0x42, 0x03, 0x02, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x08, 0x10, 0xe0, 0x38, 0x08,
++ 0x08, 0xb8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x49, 0x4e, 0x48, 0x4b, 0x48,
++ 0x48, 0x78, 0x4d, 0x45, 0x09, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xec, 0x00, 0xf8, 0x10,
++ 0xa0, 0x50, 0x48, 0x04, 0x14, 0xf0, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x4b, 0x4a, 0x4a, 0x4b, 0x4a,
++ 0x4a, 0x7b, 0x4c, 0x44, 0x09, 0x06, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x50,
++ 0x48, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x01, 0x7f, 0x49, 0x49, 0x4f, 0x49, 0x4b,
++ 0x4b, 0x7d, 0x45, 0x09, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x80, 0x38, 0x28, 0x28, 0xe8, 0x28, 0xa8,
++ 0xa8, 0x78, 0x40, 0x20, 0x10, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x4b, 0x48, 0x4f, 0x48, 0x49,
++ 0x4e, 0x79, 0x4e, 0x41, 0x06, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xe0, 0x20, 0xfc, 0x88, 0xc8,
++ 0xf0, 0x60, 0xd0, 0x48, 0x44, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4c, 0x48, 0x49, 0x4a,
++ 0x48, 0x7b, 0x4d, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x88, 0xf0, 0x90, 0xa0, 0x60,
++ 0x90, 0xfc, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x79, 0x49, 0x4b, 0x4c, 0x48, 0x49,
++ 0x4f, 0x79, 0x49, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x10, 0x20, 0xa0, 0x60, 0x98,
++ 0xf4, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x70, 0x57, 0x54, 0x57, 0x54, 0x57,
++ 0x56, 0x76, 0x57, 0x4a, 0x08, 0x10, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0xc8, 0x28, 0xa8,
++ 0xb0, 0x90, 0xb4, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4b, 0x4a, 0x4b, 0x48, 0x49,
++ 0x49, 0x79, 0x49, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x3f, 0x04, 0x02, 0x3f, 0x21, 0x5f, 0x11,
++ 0x11, 0x01, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x80, 0xfc, 0x08, 0xf0, 0x10,
++ 0x30, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x01, 0x7f, 0x49, 0x49, 0x4f, 0x49, 0x49,
++ 0x4b, 0x7b, 0x4d, 0x49, 0x01, 0x01, 0x00, 0x00,
++ 0x50, 0x90, 0x10, 0x14, 0x34, 0xf8, 0x50, 0x90,
++ 0x50, 0x70, 0x28, 0x28, 0x44, 0x84, 0x00, 0x00,
++ 0x00, 0x02, 0x7a, 0x4b, 0x48, 0x4f, 0x48, 0x4b,
++ 0x4a, 0x7a, 0x4a, 0x42, 0x02, 0x02, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x40, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x02, 0x02, 0x77, 0x54, 0x57, 0x54, 0x57, 0x54,
++ 0x54, 0x77, 0x54, 0x47, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0x38, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0x28, 0xa8, 0x30, 0xa0, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x00, 0x1f, 0x11, 0x1f,
++ 0x11, 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x49, 0x48, 0x4b, 0x4a, 0x4c,
++ 0x4b, 0x7a, 0x4a, 0x42, 0x02, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0x48, 0x40,
++ 0xf8, 0x48, 0x48, 0x48, 0x58, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x48, 0x4b, 0x4b, 0x4a, 0x4b,
++ 0x4a, 0x7b, 0x4a, 0x42, 0x02, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x28, 0xa8, 0xf8,
++ 0x48, 0xf8, 0x48, 0x48, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x71, 0x52, 0x57, 0x58, 0x57, 0x54,
++ 0x56, 0x75, 0x56, 0x45, 0x04, 0x05, 0x00, 0x00,
++ 0x80, 0x80, 0x40, 0x20, 0xf0, 0x08, 0xac, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x51, 0x57, 0x55, 0x55, 0x57,
++ 0x51, 0x73, 0x53, 0x45, 0x09, 0x01, 0x00, 0x00,
++ 0x08, 0x08, 0xe8, 0x28, 0xe8, 0x68, 0x68, 0xe8,
++ 0x28, 0xa8, 0x48, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x49, 0x49, 0x49, 0x48, 0x4b,
++ 0x4a, 0x7c, 0x48, 0x40, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x08, 0xa0, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4a, 0x4b, 0x4a, 0x4b,
++ 0x4a, 0x7b, 0x4a, 0x45, 0x05, 0x08, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0x10, 0xf0, 0x00, 0xf8,
++ 0x00, 0xfc, 0xa4, 0x54, 0x54, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4b, 0x4a, 0x4b, 0x4a,
++ 0x4b, 0x78, 0x4f, 0x40, 0x03, 0x0c, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x88, 0xfc, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x00, 0x7b, 0x48, 0x49, 0x48, 0x4f, 0x49,
++ 0x49, 0x7a, 0x4a, 0x44, 0x0b, 0x00, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x4b, 0x4a, 0x4b, 0x4b, 0x4a,
++ 0x4b, 0x79, 0x4b, 0x44, 0x01, 0x0e, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x20, 0xc0, 0xb0, 0x0c, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x4f, 0x48, 0x49, 0x4e, 0x48,
++ 0x4b, 0x7a, 0x4b, 0x42, 0x03, 0x02, 0x00, 0x00,
++ 0x80, 0xf8, 0x90, 0xfc, 0xd8, 0xe0, 0x88, 0xf8,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x02, 0x7a, 0x4b, 0x48, 0x4f, 0x48, 0x4b,
++ 0x4a, 0x7b, 0x4a, 0x40, 0x00, 0x0f, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x80, 0xfc, 0x40, 0xf8,
++ 0x48, 0xf8, 0x50, 0x48, 0x7c, 0x84, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x48, 0x4a, 0x4a, 0x4a, 0x4a,
++ 0x4a, 0x7a, 0x4a, 0x43, 0x01, 0x0e, 0x00, 0x00,
++ 0x18, 0xe0, 0x04, 0xfc, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0xfc, 0x98, 0x04, 0x00, 0x00,
++ 0x00, 0x07, 0x74, 0x54, 0x54, 0x54, 0x54, 0x55,
++ 0x55, 0x75, 0x55, 0x44, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x90, 0xf0, 0x00, 0xf8,
++ 0x68, 0xf8, 0x68, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x02, 0x7f, 0x52, 0x52, 0x5f, 0x52, 0x5f,
++ 0x52, 0x73, 0x54, 0x44, 0x08, 0x13, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0x20, 0x7c, 0xc8, 0x48, 0xa8,
++ 0x28, 0x90, 0x90, 0xa8, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x49, 0x48, 0x4f, 0x49, 0x49,
++ 0x49, 0x79, 0x49, 0x41, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x02, 0x02, 0x7a, 0x4f, 0x4a, 0x4a, 0x4b, 0x4a,
++ 0x4a, 0x7a, 0x4c, 0x44, 0x08, 0x13, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xbc, 0x40, 0x60, 0xbc, 0xd0,
++ 0x90, 0xfc, 0xb0, 0xa8, 0xc8, 0x04, 0x00, 0x00,
++ 0x02, 0x02, 0x7f, 0x52, 0x5f, 0x5a, 0x5a, 0x5a,
++ 0x7f, 0x57, 0x46, 0x0a, 0x12, 0x02, 0x00, 0x00,
++ 0x20, 0x20, 0xe0, 0x20, 0xfc, 0xd4, 0x98, 0x90,
++ 0x90, 0x30, 0xa8, 0xa8, 0x44, 0x84, 0x00, 0x00,
++ 0x00, 0x00, 0x77, 0x54, 0x54, 0x57, 0x54, 0x55,
++ 0x55, 0x75, 0x55, 0x4a, 0x08, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x90, 0x90, 0xfc, 0x90, 0xd8,
++ 0xf8, 0xf8, 0xfc, 0xbc, 0xd4, 0x90, 0x00, 0x00,
++ 0x00, 0x04, 0x73, 0x52, 0x58, 0x54, 0x54, 0x50,
++ 0x5e, 0x72, 0x53, 0x42, 0x05, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0xfc, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x49, 0x4b, 0x4a, 0x4f, 0x49,
++ 0x49, 0x79, 0x49, 0x40, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0xfc, 0x08, 0xfc, 0xf0,
++ 0x10, 0xf0, 0x10, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1e, 0x12, 0x12, 0x1e, 0x00, 0x3f, 0x01,
++ 0x7f, 0x00, 0x1e, 0x12, 0x1e, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0xf0, 0x00, 0xf8, 0x00,
++ 0xfc, 0x00, 0xf0, 0x90, 0xf0, 0x90, 0x00, 0x00,
++ 0x05, 0x16, 0x2c, 0x12, 0x3f, 0x20, 0x4f, 0x08,
++ 0x0f, 0x02, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x28, 0x70, 0xb0, 0x48, 0xfc, 0x08, 0xe0, 0x20,
++ 0xe0, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x05, 0x75, 0x55, 0x57, 0x5c, 0x51, 0x5f,
++ 0x52, 0x73, 0x52, 0x43, 0x04, 0x08, 0x00, 0x00,
++ 0x20, 0x24, 0xf8, 0x20, 0xa4, 0xfc, 0x20, 0xf8,
++ 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x05, 0x05, 0x75, 0x5f, 0x55, 0x57, 0x55, 0x57,
++ 0x55, 0x7f, 0x55, 0x45, 0x08, 0x11, 0x00, 0x00,
++ 0x08, 0x10, 0x60, 0xc0, 0x40, 0x7c, 0x50, 0x50,
++ 0x50, 0xd0, 0x50, 0x90, 0x90, 0x10, 0x00, 0x00,
++ 0x02, 0x02, 0x7f, 0x52, 0x57, 0x54, 0x57, 0x54,
++ 0x57, 0x72, 0x5f, 0x42, 0x02, 0x03, 0x00, 0x00,
++ 0x00, 0x38, 0xe8, 0x28, 0xa8, 0xb8, 0xa8, 0xa8,
++ 0xb8, 0x28, 0xc8, 0x48, 0x88, 0x18, 0x00, 0x00,
++ 0x02, 0x02, 0x73, 0x56, 0x5a, 0x5f, 0x52, 0x52,
++ 0x52, 0x77, 0x50, 0x45, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0xa8, 0xa8, 0xfc, 0xa8, 0xa8,
++ 0xa8, 0xfc, 0x00, 0x48, 0xa4, 0xa4, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x49, 0x4f, 0x49, 0x49, 0x49,
++ 0x49, 0x79, 0x48, 0x45, 0x05, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x20, 0xfc, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0xc0, 0x28, 0x14, 0xf4, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x4b, 0x4b, 0x4d, 0x49, 0x4b,
++ 0x48, 0x7f, 0x4a, 0x42, 0x04, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0xb0, 0x78, 0x54, 0x10, 0xf8,
++ 0x00, 0xfc, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x00, 0x07, 0x70, 0x5f, 0x50, 0x57, 0x55, 0x57,
++ 0x54, 0x77, 0x54, 0x47, 0x05, 0x09, 0x00, 0x00,
++ 0x80, 0xf8, 0x88, 0xfc, 0x88, 0xf8, 0xa8, 0xb8,
++ 0x88, 0xf8, 0x88, 0xb8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x02, 0x02, 0x7b, 0x4d, 0x48, 0x48, 0x4f, 0x49,
++ 0x49, 0x79, 0x4a, 0x44, 0x1f, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0x88, 0x00, 0xfc, 0x50,
++ 0x50, 0x58, 0xe4, 0x44, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x48, 0x4b, 0x4a, 0x4b,
++ 0x48, 0x7f, 0x48, 0x41, 0x06, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xb8, 0xa8, 0xb8,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x01, 0x07, 0x79, 0x48, 0x4f, 0x49, 0x49, 0x49,
++ 0x4b, 0x7a, 0x4a, 0x42, 0x02, 0x02, 0x00, 0x00,
++ 0x10, 0xfc, 0x50, 0x40, 0xfc, 0xf0, 0x10, 0xf0,
++ 0xf8, 0x08, 0xe8, 0xa8, 0xe8, 0x18, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4c, 0x4a, 0x4a, 0x4c, 0x4b,
++ 0x4a, 0x7f, 0x48, 0x47, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x48, 0xa8, 0xa4, 0x94, 0x70, 0xf8,
++ 0xa8, 0xfc, 0x00, 0xfc, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x49, 0x49, 0x49, 0x4b,
++ 0x4b, 0x7a, 0x4b, 0x47, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0xf0, 0x10, 0xf0, 0xf0, 0x10, 0xf0, 0xf8,
++ 0xf8, 0x48, 0xf8, 0xfc, 0x10, 0x10, 0x00, 0x00,
++ 0x01, 0x06, 0x76, 0x55, 0x5f, 0x51, 0x52, 0x57,
++ 0x59, 0x77, 0x55, 0x43, 0x03, 0x0c, 0x00, 0x00,
++ 0x04, 0xf4, 0xb4, 0xb4, 0x74, 0x94, 0x94, 0xf4,
++ 0x34, 0xd4, 0x54, 0x84, 0xc4, 0x0c, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x4b, 0x4b, 0x4d, 0x49, 0x49,
++ 0x49, 0x78, 0x4b, 0x42, 0x05, 0x08, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0xf8, 0x50, 0xf0, 0x50,
++ 0xf0, 0xa0, 0xf0, 0x78, 0xc0, 0x7c, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x4b, 0x4b, 0x4d, 0x49, 0x49,
++ 0x49, 0x7f, 0x4a, 0x42, 0x05, 0x08, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0xf8, 0x50, 0xf0, 0x50,
++ 0xf0, 0xfc, 0x48, 0x78, 0xc0, 0x7c, 0x00, 0x00,
++ 0x01, 0x0f, 0x71, 0x55, 0x54, 0x5d, 0x55, 0x55,
++ 0x5d, 0x75, 0x50, 0x45, 0x04, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xd0, 0x14, 0xd8, 0x50, 0x54,
++ 0xd4, 0x4c, 0x00, 0x48, 0xa4, 0xa4, 0x00, 0x00,
++ 0x17, 0x13, 0x6a, 0x2b, 0x13, 0x2a, 0x7b, 0x13,
++ 0x21, 0x3f, 0x27, 0x24, 0x27, 0x20, 0x00, 0x00,
++ 0xf8, 0xa8, 0xb0, 0xb0, 0xa8, 0x28, 0xb8, 0xa0,
++ 0x00, 0xf8, 0xc8, 0x48, 0xc8, 0x18, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4b, 0x4a, 0x4b, 0x4a, 0x4b,
++ 0x4a, 0x7c, 0x4f, 0x43, 0x00, 0x07, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8,
++ 0xa8, 0xc4, 0xfc, 0x20, 0xe0, 0x18, 0x00, 0x00,
++ 0x1e, 0x12, 0x1e, 0x3f, 0x20, 0x2f, 0x22, 0x3f,
++ 0x29, 0x2f, 0x2f, 0x29, 0x3f, 0x41, 0x00, 0x00,
++ 0x78, 0x48, 0x78, 0xfc, 0x20, 0xa0, 0x20, 0xfc,
++ 0x48, 0xa8, 0x30, 0xb0, 0x48, 0x84, 0x00, 0x00,
++ 0x1e, 0x12, 0x1e, 0x7f, 0x02, 0x1f, 0x1f, 0x13,
++ 0x1f, 0x0c, 0x7e, 0x12, 0x1e, 0x12, 0x00, 0x00,
++ 0xf0, 0x90, 0xf0, 0xfc, 0x00, 0xf0, 0x90, 0xf0,
++ 0xf0, 0x60, 0xfc, 0x90, 0xf0, 0x90, 0x00, 0x00,
++ 0x00, 0x07, 0x74, 0x5f, 0x55, 0x57, 0x57, 0x54,
++ 0x57, 0x77, 0x54, 0x47, 0x07, 0x04, 0x00, 0x00,
++ 0x18, 0xf0, 0x88, 0xfc, 0x28, 0xf8, 0x88, 0x88,
++ 0xfc, 0xc8, 0x28, 0xa8, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x03, 0x79, 0x49, 0x49, 0x4b, 0x48, 0x4f,
++ 0x4a, 0x7b, 0x4b, 0x42, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0xf0, 0xf0, 0xf8, 0x10, 0xfc,
++ 0xa8, 0xb8, 0xb8, 0xac, 0xf8, 0x88, 0x00, 0x00,
++ 0x02, 0x02, 0x7f, 0x55, 0x55, 0x57, 0x5a, 0x52,
++ 0x5f, 0x77, 0x56, 0x4a, 0x12, 0x02, 0x00, 0x00,
++ 0x28, 0x28, 0xa8, 0x7c, 0x68, 0xa8, 0xbc, 0x28,
++ 0xa8, 0x3c, 0xa8, 0xa8, 0x3c, 0x20, 0x00, 0x00,
++ 0x02, 0x02, 0x7f, 0x52, 0x5f, 0x5a, 0x5f, 0x5a,
++ 0x5f, 0x72, 0x5f, 0x42, 0x02, 0x02, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x7c, 0xd4, 0xfc, 0xd4, 0xfc,
++ 0xa8, 0x7c, 0x88, 0x7c, 0x28, 0x18, 0x00, 0x00,
++ 0x01, 0x0f, 0x73, 0x57, 0x52, 0x5f, 0x57, 0x5f,
++ 0x53, 0x7e, 0x53, 0x4f, 0x01, 0x07, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xa0, 0xf8, 0xa8, 0xe8, 0xbc,
++ 0xac, 0x44, 0xf0, 0xfc, 0x10, 0xf8, 0x00, 0x00,
++ 0x00, 0x07, 0x75, 0x55, 0x57, 0x55, 0x55, 0x57,
++ 0x55, 0x75, 0x57, 0x46, 0x05, 0x09, 0x00, 0x00,
++ 0x30, 0x50, 0x48, 0xfc, 0xac, 0xf4, 0xfc, 0x00,
++ 0x78, 0x48, 0x78, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x0f, 0x08, 0x7f, 0x5b, 0x5b, 0x5f, 0x5d, 0x5f,
++ 0x5b, 0x7b, 0x4e, 0x0b, 0x10, 0x27, 0x00, 0x00,
++ 0xf8, 0x08, 0xf8, 0x58, 0x58, 0xf8, 0x28, 0xf8,
++ 0xf8, 0xe8, 0xa8, 0xe8, 0xa8, 0xf0, 0x00, 0x00,
++ 0x03, 0x0e, 0x73, 0x5e, 0x53, 0x5c, 0x52, 0x5f,
++ 0x55, 0x76, 0x57, 0x45, 0x06, 0x07, 0x00, 0x00,
++ 0x80, 0x78, 0xa8, 0x28, 0xc8, 0x98, 0xf0, 0xfc,
++ 0x28, 0xd8, 0xf8, 0x28, 0xd8, 0xf8, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x22, 0x22, 0x24, 0x2c, 0x34,
++ 0x24, 0x24, 0x24, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x88, 0x98, 0xa8, 0xc8, 0x88,
++ 0x98, 0x98, 0x78, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x22, 0x2c, 0x37, 0x20, 0x2f,
++ 0x21, 0x21, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x88, 0x68, 0xd8, 0x08, 0xe8,
++ 0x28, 0x28, 0xc8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x29, 0x21, 0x2f, 0x21,
++ 0x21, 0x22, 0x24, 0x28, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x98, 0x78, 0x08, 0xe8, 0x08,
++ 0xe8, 0x28, 0x28, 0xc8, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x3f, 0x22, 0x27, 0x26, 0x2b,
++ 0x32, 0x23, 0x22, 0x22, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xe8, 0x28, 0xe8,
++ 0x28, 0xe8, 0x28, 0x68, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x2f, 0x21, 0x2f, 0x22, 0x3f,
++ 0x27, 0x24, 0x27, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xe8, 0x08, 0xc8, 0x48, 0xf8,
++ 0xc8, 0x48, 0xc8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x27, 0x21, 0x2f, 0x24, 0x22,
++ 0x2f, 0x21, 0x27, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xc8, 0x08, 0xe8, 0x48, 0x88,
++ 0xe8, 0x08, 0xc8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x37, 0x22, 0x3f, 0x24, 0x2f,
++ 0x34, 0x25, 0x24, 0x23, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xd8, 0x88, 0xf8, 0x48, 0xe8,
++ 0x58, 0x88, 0x28, 0xe8, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x3f, 0x20, 0x2e, 0x2a,
++ 0x2e, 0x23, 0x3c, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0xc8, 0xa8, 0xf8, 0x88, 0xa8, 0xa8,
++ 0x58, 0x78, 0xb8, 0x18, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x27, 0x22, 0x2f, 0x27, 0x27,
++ 0x27, 0x24, 0x2f, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xc8, 0x48, 0xe8, 0xc8, 0xc8,
++ 0xe8, 0x48, 0xe8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x27, 0x24, 0x2f, 0x28, 0x2f, 0x2f,
++ 0x28, 0x2f, 0x26, 0x38, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0xc8, 0x48, 0xe8, 0x28, 0xe8, 0xe8,
++ 0x28, 0xe8, 0x68, 0x18, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x2f, 0x27, 0x25, 0x27, 0x25,
++ 0x27, 0x2f, 0x20, 0x2f, 0x22, 0x3f, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xe8, 0xc8, 0x48, 0xc8, 0x48,
++ 0xe8, 0xe8, 0x48, 0xe8, 0x48, 0xf8, 0x00, 0x00,
++ 0x00, 0x3f, 0x27, 0x24, 0x27, 0x21, 0x3f, 0x2f,
++ 0x2b, 0x2a, 0x2b, 0x2f, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0xc8, 0x48, 0xc8, 0x08, 0xf8, 0xe8,
++ 0xa8, 0xa8, 0xa8, 0xe8, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x09, 0x15, 0x25, 0x7f, 0x00,
++ 0x1f, 0x17, 0x14, 0x17, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x20, 0x50, 0x90, 0xfc, 0x00,
++ 0xf0, 0xd0, 0x50, 0xd0, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x2f, 0x2a, 0x2f, 0x3f, 0x27, 0x24,
++ 0x27, 0x3e, 0x27, 0x2c, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0xc8, 0x48,
++ 0xd8, 0xa8, 0x48, 0x38, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x10, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10,
++ 0x14, 0x19, 0x61, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0xa0,
++ 0xa0, 0x20, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x13, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10,
++ 0x14, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x60, 0x50, 0x48,
++ 0x48, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x12, 0x7e, 0x12, 0x12, 0x12,
++ 0x16, 0x1a, 0x62, 0x03, 0x02, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x11, 0x7e, 0x12, 0x14, 0x10,
++ 0x14, 0x18, 0x61, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x44, 0x48, 0x50, 0xc0,
++ 0xa0, 0xa0, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x10, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x11,
++ 0x15, 0x1a, 0x62, 0x04, 0x08, 0x00, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x12, 0x7e, 0x12, 0x12, 0x12,
++ 0x16, 0x1a, 0x62, 0x02, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x78, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x13, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x11,
++ 0x16, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x40, 0x60, 0xd0, 0x48,
++ 0x44, 0x44, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x17, 0x7d, 0x11, 0x11, 0x11,
++ 0x15, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x05, 0x3d, 0x05, 0x0d,
++ 0x35, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0x48, 0x50, 0x60, 0x48,
++ 0x38, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x08, 0x0b, 0x18, 0x28, 0x49, 0x09,
++ 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x50, 0x48, 0x5c, 0xe0, 0x20, 0x10, 0x14, 0x0c,
++ 0x04, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x12, 0x7e, 0x12, 0x13, 0x13,
++ 0x16, 0x1a, 0x64, 0x04, 0x09, 0x16, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x50, 0x40, 0xf8, 0x08,
++ 0x90, 0x90, 0x60, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x11, 0x7d, 0x13, 0x15, 0x11,
++ 0x15, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0x10, 0xfc, 0x10, 0x90, 0x50,
++ 0x50, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x13, 0x7e, 0x17, 0x12, 0x12,
++ 0x17, 0x1a, 0x62, 0x02, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0xc8, 0x48, 0x48,
++ 0xc8, 0x70, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x10, 0x7c, 0x11, 0x10, 0x10,
++ 0x14, 0x18, 0x61, 0x00, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x50, 0x90, 0xa0, 0x68,
++ 0x48, 0x90, 0x30, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x13,
++ 0x16, 0x1a, 0x62, 0x02, 0x03, 0x0c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf4,
++ 0x44, 0x48, 0x30, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x10, 0x11, 0x12, 0x7c, 0x10, 0x11, 0x13,
++ 0x15, 0x19, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x80, 0xf8, 0x00, 0x00, 0x80, 0xfc, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x13, 0x10, 0x10, 0x7c, 0x13, 0x10, 0x10,
++ 0x17, 0x18, 0x60, 0x00, 0x07, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x50, 0x88, 0xfc, 0x44, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x10, 0x10, 0x13, 0x7c, 0x10, 0x10, 0x10,
++ 0x17, 0x18, 0x61, 0x01, 0x02, 0x04, 0x00, 0x00,
++ 0x08, 0x88, 0x90, 0xfc, 0x90, 0x90, 0x90, 0x90,
++ 0xfc, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x10, 0x7c, 0x13, 0x10, 0x13,
++ 0x14, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x40, 0x40, 0xfc, 0x00, 0xfc,
++ 0x40, 0x70, 0x48, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x13, 0x7c, 0x10, 0x11, 0x12,
++ 0x10, 0x1f, 0x60, 0x00, 0x03, 0x0c, 0x00, 0x00,
++ 0x40, 0x50, 0x88, 0xfc, 0x84, 0x80, 0xf8, 0x40,
++ 0x40, 0xfc, 0xc0, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x10, 0x11, 0x16, 0x7f, 0x12, 0x12, 0x13,
++ 0x16, 0x1a, 0x63, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x10, 0x17, 0x10, 0x7f, 0x12, 0x12, 0x13,
++ 0x16, 0x1a, 0x63, 0x02, 0x02, 0x02, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x11, 0x7d, 0x12, 0x10, 0x10,
++ 0x17, 0x19, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x48, 0x44, 0x44, 0x10, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x11, 0x7c, 0x10, 0x13, 0x10,
++ 0x17, 0x19, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x20, 0x44, 0xa4, 0x18, 0x90, 0xe0, 0x90, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x1e, 0x10, 0x1e, 0x12, 0x02,
++ 0x7f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0x10, 0xf0, 0x90, 0x80,
++ 0xfc, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x11, 0x17, 0x11, 0x7c, 0x10, 0x10, 0x11,
++ 0x15, 0x1b, 0x65, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xa0, 0xa0, 0xa4, 0x28,
++ 0x30, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x10, 0x17, 0x11, 0x7d, 0x11, 0x12, 0x14,
++ 0x10, 0x1f, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x10, 0x98, 0x64, 0x44,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x12, 0x7e, 0x13, 0x12, 0x12,
++ 0x13, 0x1e, 0x64, 0x04, 0x08, 0x11, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xa8, 0xb8, 0xa8, 0xa8,
++ 0xb8, 0xa8, 0xa8, 0xc8, 0xc8, 0x98, 0x00, 0x00,
++ 0x00, 0x17, 0x10, 0x13, 0x7e, 0x12, 0x13, 0x12,
++ 0x14, 0x1b, 0x60, 0x00, 0x0f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0x48,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x11, 0x11, 0x11, 0x7d, 0x11, 0x13, 0x12,
++ 0x16, 0x1a, 0x62, 0x02, 0x02, 0x02, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x70, 0x50, 0x50, 0xf8, 0x08,
++ 0xe8, 0xa8, 0xa8, 0xe8, 0x88, 0x18, 0x00, 0x00,
++ 0x01, 0x11, 0x13, 0x15, 0x7d, 0x11, 0x11, 0x11,
++ 0x17, 0x1a, 0x63, 0x05, 0x09, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0xfc, 0x00, 0xf8, 0x48, 0x48, 0xb0, 0x00, 0x00,
++ 0x08, 0x09, 0x11, 0x11, 0x30, 0x57, 0x10, 0x13,
++ 0x14, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x40, 0xfc, 0xe0, 0x58,
++ 0x44, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x12, 0x7e, 0x13, 0x12, 0x13,
++ 0x16, 0x1b, 0x62, 0x05, 0x05, 0x08, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0x10, 0xf0, 0x00, 0xf8,
++ 0x00, 0xfc, 0xa4, 0x54, 0x54, 0x18, 0x00, 0x00,
++ 0x08, 0x0c, 0x2a, 0x2a, 0x59, 0x14, 0x22, 0x3f,
++ 0x21, 0x5f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0x30, 0xa8, 0xa8, 0x60, 0x50, 0x88, 0xfc,
++ 0x08, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x09, 0x4a, 0x25, 0x21, 0x0f, 0x12, 0x23,
++ 0x21, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x68, 0xfc, 0x68, 0xfc,
++ 0x30, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x36, 0x22, 0x36, 0x22, 0x23, 0x3e, 0x2b,
++ 0x08, 0x3e, 0x08, 0x08, 0x0e, 0x73, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x94, 0x14, 0x0c, 0xf8,
++ 0x88, 0x90, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x10, 0x17, 0x15, 0x7d, 0x15, 0x17, 0x15,
++ 0x15, 0x1d, 0x67, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x10, 0x10,
++ 0xfc, 0x90, 0x50, 0x50, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x12, 0x7f, 0x10, 0x17, 0x10,
++ 0x14, 0x1c, 0x64, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xf8, 0x00, 0xfc, 0x40,
++ 0x40, 0x78, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x2a, 0x3e, 0x2a, 0x3e, 0x7f,
++ 0x0a, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0xfc, 0x90, 0x90, 0x90, 0x10,
++ 0x10, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x2a, 0x3e, 0x2b, 0x3e, 0x08, 0x3e,
++ 0x0c, 0x71, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x20, 0xfc, 0x28, 0x30, 0x20,
++ 0x60, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x2f, 0x29, 0x2f, 0x79, 0x2f, 0x28, 0x2b,
++ 0x2a, 0x3b, 0x6a, 0x0b, 0x0a, 0x08, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x78, 0x48, 0x78, 0x08, 0xe8,
++ 0x28, 0xe8, 0x28, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0x17, 0x7c, 0x14, 0x17, 0x14,
++ 0x16, 0x1e, 0x6b, 0x08, 0x1f, 0x00, 0x00, 0x00,
++ 0x80, 0xf8, 0x80, 0xfc, 0xb8, 0xc8, 0x78, 0xa0,
++ 0xa8, 0xa8, 0xb8, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x11, 0x17, 0x10, 0x7f, 0x12, 0x13, 0x13,
++ 0x16, 0x1b, 0x60, 0x0f, 0x01, 0x00, 0x00, 0x00,
++ 0x60, 0x10, 0xfc, 0xa0, 0xf8, 0xb8, 0x38, 0xf8,
++ 0x08, 0xf8, 0x10, 0xfc, 0x10, 0xb0, 0x00, 0x00,
++ 0x00, 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x12,
++ 0x17, 0x18, 0x6f, 0x00, 0x03, 0x0c, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0xe8, 0x58, 0xe8, 0xf8, 0xe8,
++ 0x58, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x17, 0x10, 0x13, 0x7e, 0x13, 0x10, 0x13,
++ 0x17, 0x18, 0x63, 0x0d, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf8, 0xa8, 0xf8, 0x40, 0x58,
++ 0x58, 0xc8, 0x28, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x10, 0x17, 0x11, 0x7d, 0x12, 0x17, 0x10,
++ 0x17, 0x1a, 0x62, 0x02, 0x03, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x50, 0xd8, 0x64, 0xfc, 0x00,
++ 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x17, 0x11, 0x10, 0x7d, 0x10, 0x17, 0x10,
++ 0x15, 0x1f, 0x61, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x10, 0xfc, 0x50, 0x48, 0xf8, 0x50, 0xfc, 0x50,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x29, 0x3a, 0x25, 0x25, 0x39,
++ 0x21, 0x21, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x80, 0xfc, 0xf8, 0x20, 0xf8, 0xf8, 0x08, 0xf8,
++ 0xf8, 0x18, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x10, 0x14, 0x65, 0x1a, 0x14, 0x7c,
++ 0x09, 0x11, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x90, 0xfc, 0x90, 0xf8, 0xf8, 0x90,
++ 0xfc, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x2f, 0x2e, 0x2f, 0x2f, 0x28, 0x2f,
++ 0x2f, 0x49, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x98, 0x94, 0xfc, 0x90, 0xb0, 0xa8,
++ 0xc8, 0x84, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0e, 0x3f, 0x2d, 0x52, 0x2c, 0x1e, 0x73,
++ 0x1e, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x50, 0x20, 0x50, 0x88,
++ 0x04, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x13, 0x10, 0x17, 0x7c, 0x13, 0x10, 0x17,
++ 0x16, 0x1a, 0x67, 0x02, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0x40, 0xfc,
++ 0xa8, 0x94, 0xf8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x13, 0x7e, 0x12, 0x13, 0x12,
++ 0x16, 0x1a, 0x62, 0x04, 0x04, 0x0b, 0x00, 0x00,
++ 0x40, 0xfc, 0x90, 0xfc, 0x90, 0xf0, 0xfc, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x3e, 0x2a,
++ 0x3e, 0x2b, 0x3f, 0x1f, 0x01, 0x7f, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xf8, 0xa8,
++ 0xf8, 0xa8, 0xf8, 0xf0, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x13, 0x12, 0x12, 0x7e, 0x12, 0x12, 0x12,
++ 0x17, 0x1a, 0x65, 0x05, 0x08, 0x13, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0xa8, 0xf8, 0xf8, 0x20, 0xf8,
++ 0xfc, 0xe8, 0x74, 0xf8, 0x20, 0xfc, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x11, 0x7f, 0x10, 0x17, 0x14,
++ 0x17, 0x1b, 0x61, 0x07, 0x00, 0x03, 0x00, 0x00,
++ 0xf0, 0x10, 0xf0, 0xf0, 0xf8, 0x40, 0xfc, 0x48,
++ 0x58, 0x58, 0xf0, 0xfc, 0x90, 0xf8, 0x00, 0x00,
++ 0x00, 0x17, 0x13, 0x12, 0x7f, 0x10, 0x17, 0x13,
++ 0x10, 0x1f, 0x61, 0x0f, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0xfc, 0xb8, 0xa8, 0xb8, 0xa0, 0xfc, 0xf8,
++ 0xa0, 0xfc, 0x48, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x08, 0x3e, 0x14, 0x7f, 0x3e, 0x22, 0x3e, 0x3e,
++ 0x26, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x80, 0xf8, 0xf8, 0x08, 0xf8, 0xf0, 0xb8, 0x9c,
++ 0x7c, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x24, 0x24, 0x24, 0x3c, 0x27, 0x04, 0x04,
++ 0x7c, 0x24, 0x24, 0x24, 0x47, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x00, 0x3f, 0x22, 0x5e,
++ 0x10, 0x1e, 0x12, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xfc, 0x88, 0xf0,
++ 0x10, 0xf0, 0x90, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x00, 0x3f, 0x20, 0x5f,
++ 0x0f, 0x08, 0x0f, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x08, 0xf0,
++ 0xe0, 0x20, 0xe0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x17, 0x10, 0x11, 0x7d, 0x12, 0x14, 0x13,
++ 0x16, 0x1b, 0x62, 0x03, 0x02, 0x02, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x50, 0x70, 0xc0, 0x3c, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x3f, 0x20, 0x5f, 0x02,
++ 0x1e, 0x10, 0x1e, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0xfc, 0x08, 0xf0, 0x80,
++ 0xf0, 0x10, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x00, 0x7f, 0x0f, 0x01,
++ 0x0f, 0x7f, 0x1e, 0x13, 0x1e, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0xe8, 0x00,
++ 0xe0, 0xfc, 0x10, 0xfc, 0x90, 0x30, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x07, 0x04, 0x0c, 0x14, 0x22,
++ 0x02, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x02, 0x22, 0x22, 0x17, 0x14, 0x08, 0x18, 0x24,
++ 0x02, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x20, 0x20, 0x40, 0x40,
++ 0x80, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x03, 0x0c, 0x7f, 0x12, 0x14, 0x0f, 0x08, 0x0f,
++ 0x0f, 0x08, 0x0f, 0x3c, 0x03, 0x7c, 0x00, 0x00,
++ 0xc0, 0x80, 0xf0, 0x90, 0x50, 0xe0, 0x20, 0xe0,
++ 0xe0, 0x20, 0xe0, 0x40, 0x80, 0x78, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x7f, 0x01, 0x03,
++ 0x0c, 0x32, 0x01, 0x01, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xfc, 0x00, 0xf0,
++ 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x1c, 0x1a, 0x2a, 0x49, 0x01,
++ 0x06, 0x1a, 0x01, 0x01, 0x06, 0x38, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x70, 0x70, 0xa8, 0x24, 0xf0,
++ 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x2a, 0x3e, 0x2b, 0x3e, 0x08, 0x7e,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x50, 0x20, 0x50, 0x9c,
++ 0x24, 0x68, 0x98, 0x10, 0x20, 0xc0, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x01, 0x01, 0x01, 0x7f,
++ 0x01, 0x03, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0xfc,
++ 0x00, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x01, 0x1f, 0x01, 0x01, 0x01, 0x7f, 0x03,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00,
++ 0x80, 0x80, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x02, 0x04, 0x19, 0x61,
++ 0x01, 0x1f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c,
++ 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x04, 0x1f, 0x60, 0x1f,
++ 0x02, 0x03, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x40, 0xf0, 0x0c, 0xf0,
++ 0x00, 0xe0, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x09, 0x09, 0x09, 0x15, 0x15,
++ 0x23, 0x02, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0x20, 0x20, 0x50, 0x48,
++ 0x88, 0x80, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x08, 0x04, 0x04, 0x7f, 0x00,
++ 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x20, 0x20, 0x40, 0xfc, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x12, 0x12, 0x24, 0x09,
++ 0x01, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x50, 0x48, 0x48, 0xc0,
++ 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x03, 0x0c, 0x70, 0x1f, 0x12, 0x12, 0x14,
++ 0x11, 0x01, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x80, 0xf0, 0x90, 0xb0, 0x70,
++ 0x10, 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x05, 0x19, 0x6f, 0x01,
++ 0x1f, 0x01, 0x0f, 0x01, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30, 0xec, 0x00,
++ 0xf0, 0x00, 0xe0, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x22, 0x0e, 0x01, 0x03,
++ 0x1f, 0x01, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x30, 0xe0, 0x10, 0x08, 0x48, 0x40, 0xa0, 0x10,
++ 0xf0, 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x24, 0x24, 0x3c, 0x05, 0x7c, 0x24, 0x24, 0x45,
++ 0x01, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x00,
++ 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x02, 0x02, 0x7f, 0x09, 0x1f, 0x61, 0x1f, 0x02,
++ 0x0f, 0x74, 0x07, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0xf0, 0x4c, 0xf8, 0x40,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x07, 0x10, 0x2f, 0x42, 0x1f, 0x12, 0x14, 0x1f,
++ 0x10, 0x1f, 0x01, 0x7f, 0x0c, 0x70, 0x00, 0x00,
++ 0xe0, 0x20, 0xf0, 0x8c, 0xf0, 0xb0, 0x70, 0xf0,
++ 0x10, 0xf0, 0x00, 0xfc, 0x60, 0x1c, 0x00, 0x00,
++ 0x02, 0x04, 0x1f, 0x13, 0x15, 0x13, 0x1f, 0x13,
++ 0x15, 0x01, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x90, 0x50, 0x90, 0xf0, 0x90,
++ 0x50, 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x24, 0x24, 0x3f, 0x25, 0x04, 0x7f, 0x25, 0x24,
++ 0x44, 0x01, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0xf8, 0x50, 0x20, 0xd0, 0xfc, 0x10, 0x90,
++ 0x30, 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x0c, 0x7f, 0x13, 0x12,
++ 0x13, 0x17, 0x15, 0x17, 0x10, 0x0f, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x30, 0xfc, 0xe0, 0x20,
++ 0xe0, 0x70, 0x50, 0x70, 0x00, 0xf8, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x13, 0x12,
++ 0x3e, 0x24, 0x06, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x13, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x88, 0x08, 0x88, 0x48,
++ 0x48, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x24, 0x24, 0x24, 0x3f, 0x24, 0x04, 0x7c,
++ 0x15, 0x15, 0x14, 0x24, 0x25, 0x46, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x90, 0x90, 0x90,
++ 0x10, 0xa0, 0x60, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x10, 0x17, 0x30, 0x50, 0x17,
++ 0x11, 0x11, 0x13, 0x10, 0x10, 0x17, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x80, 0x80, 0xfc,
++ 0x10, 0x10, 0xe0, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x12, 0x12, 0x31, 0x50, 0x17,
++ 0x11, 0x11, 0x13, 0x10, 0x10, 0x17, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0x00, 0xf8, 0x80, 0xfc,
++ 0x10, 0x10, 0xe0, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x25,
++ 0x79, 0x49, 0x0d, 0x15, 0x21, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x24, 0x24, 0xe8, 0x30, 0x20,
++ 0x20, 0x20, 0x20, 0x64, 0xa4, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0a, 0x13, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0x88, 0xf8, 0x88, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x13, 0x12,
++ 0x3e, 0x24, 0x06, 0x0b, 0x11, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xc8, 0xa8, 0xa8, 0xfc, 0x88,
++ 0xc8, 0xa8, 0xa8, 0xfc, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3d, 0x24, 0x06, 0x08, 0x11, 0x26, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x28, 0xf8, 0xa0,
++ 0xfc, 0x24, 0x78, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x02,
++ 0x7f, 0x04, 0x0f, 0x11, 0x06, 0x38, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00,
++ 0xfc, 0x40, 0x40, 0xc0, 0x20, 0x10, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x08, 0x7e, 0x12, 0x13, 0x12,
++ 0x3c, 0x24, 0x06, 0x0b, 0x11, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x90, 0x90, 0x90, 0xfc, 0x90,
++ 0x90, 0x90, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x11, 0x7d, 0x27, 0x25, 0x25,
++ 0x79, 0x49, 0x0d, 0x15, 0x21, 0x41, 0x00, 0x00,
++ 0x80, 0x8c, 0xf0, 0x10, 0x10, 0x10, 0x10, 0xfc,
++ 0x10, 0x10, 0x10, 0x10, 0x7c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x12, 0x11, 0x7d, 0x24, 0x24, 0x25,
++ 0x7a, 0x48, 0x0d, 0x15, 0x22, 0x44, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa8, 0xa8, 0xb0, 0xa0, 0xb0, 0xa8,
++ 0xa8, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x10, 0x7c, 0x27, 0x24, 0x24,
++ 0x78, 0x4b, 0x0c, 0x14, 0x20, 0x41, 0x00, 0x00,
++ 0x60, 0xa8, 0xa4, 0xa4, 0xa0, 0xfc, 0xa8, 0xa8,
++ 0xd8, 0x90, 0x94, 0xac, 0xcc, 0x84, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x24, 0x25, 0x25,
++ 0x75, 0x49, 0x0d, 0x15, 0x25, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x00, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x49, 0x29, 0x22, 0x0c, 0x10, 0x20, 0x27,
++ 0x02, 0x7f, 0x04, 0x0f, 0x03, 0x3c, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x54, 0xd4, 0x60, 0xc0, 0x00,
++ 0x00, 0xfc, 0x40, 0x80, 0x60, 0x10, 0x00, 0x00,
++ 0x10, 0x17, 0x12, 0x12, 0x7f, 0x2a, 0x2a, 0x2f,
++ 0x2a, 0x72, 0x12, 0x1c, 0x27, 0x48, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xb0, 0xb0, 0xa8, 0xa8,
++ 0xa4, 0xa4, 0xa4, 0xb8, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x13,
++ 0x3c, 0x04, 0x06, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x20, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x00, 0xfc,
++ 0x40, 0x78, 0x88, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3c, 0x05, 0x06, 0x0a, 0x10, 0x23, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0x20, 0xfc, 0x24, 0x44, 0x84, 0x18, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x15, 0x7e, 0x2e, 0x2d, 0x2d,
++ 0x75, 0x55, 0x1f, 0x2c, 0x24, 0x44, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xe8, 0xa8, 0xa8, 0xa8,
++ 0xe8, 0xa8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x11, 0x7e, 0x24, 0x25, 0x24,
++ 0x78, 0x08, 0x0c, 0x10, 0x27, 0x40, 0x00, 0x00,
++ 0x08, 0x30, 0xc8, 0x24, 0x24, 0x18, 0xe0, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x11, 0x7e, 0x24, 0x24, 0x25,
++ 0x6b, 0x18, 0x0c, 0x14, 0x21, 0x42, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x04, 0x88, 0xb8, 0xe8, 0x68,
++ 0x68, 0xf0, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x17, 0x12, 0x12, 0x7b, 0x2a, 0x2a, 0x2b,
++ 0x6a, 0x12, 0x13, 0x1c, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0xc8, 0xc8, 0xa8,
++ 0xb0, 0x90, 0xb0, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x1e, 0x12, 0x1e, 0x12, 0x7f,
++ 0x02, 0x7f, 0x04, 0x0f, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c,
++ 0x00, 0xfc, 0x40, 0x80, 0x60, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x7e, 0x12, 0x12, 0x12,
++ 0x3a, 0x24, 0x07, 0x0a, 0x10, 0x20, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0xa8, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0x50, 0x90, 0xfc, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x1c, 0x1a, 0x2a, 0x49, 0x08,
++ 0x02, 0x7f, 0x04, 0x0f, 0x03, 0x3c, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x70, 0x70, 0xa8, 0x24, 0x20,
++ 0x00, 0xfc, 0x40, 0x80, 0x60, 0x10, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x12, 0x7f, 0x2a, 0x2a, 0x2a,
++ 0x6a, 0x12, 0x1a, 0x14, 0x24, 0x48, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x00, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x24,
++ 0x6b, 0x1a, 0x0e, 0x12, 0x2f, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x68, 0x98, 0x08, 0xf8, 0x00,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x08, 0x7e, 0x13, 0x12, 0x12,
++ 0x3c, 0x24, 0x06, 0x0b, 0x10, 0x20, 0x00, 0x00,
++ 0x50, 0xfc, 0x50, 0xf8, 0x50, 0xfc, 0x20, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xfc, 0x88, 0x98, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x10, 0x7f, 0x2a, 0x2a, 0x2b,
++ 0x29, 0x72, 0x11, 0x1a, 0x20, 0x43, 0x00, 0x00,
++ 0x00, 0xb8, 0x88, 0x88, 0xb8, 0x20, 0x20, 0xb8,
++ 0x98, 0xa8, 0x98, 0xa8, 0x88, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x12, 0x7b, 0x2a, 0x2a, 0x2b,
++ 0x28, 0x73, 0x11, 0x18, 0x20, 0x47, 0x00, 0x00,
++ 0xc0, 0x58, 0x48, 0x48, 0x58, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x10, 0xa0, 0xe0, 0x1c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x25,
++ 0x75, 0x08, 0x0d, 0x16, 0x22, 0x44, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0xf8, 0x20, 0xf8, 0x20,
++ 0xfc, 0x54, 0x2c, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x10, 0x7c, 0x27, 0x24, 0x24,
++ 0x78, 0x08, 0x0d, 0x16, 0x22, 0x44, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xb8, 0xa0, 0xfc, 0x80, 0xf8,
++ 0x80, 0xfc, 0x54, 0xac, 0xac, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x12, 0x7a, 0x2a, 0x2a, 0x2b,
++ 0x2b, 0x73, 0x13, 0x1a, 0x23, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x90, 0xf0, 0x00, 0xf8,
++ 0x68, 0x68, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x13, 0x7a, 0x2d, 0x29, 0x29,
++ 0x28, 0x73, 0x1a, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x40, 0x48, 0x50, 0xfc, 0x08, 0xf0, 0x10, 0xf0,
++ 0x40, 0xf8, 0x48, 0x48, 0x70, 0x40, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x17, 0x79, 0x2f, 0x2d, 0x2d,
++ 0x2f, 0x73, 0x13, 0x1d, 0x29, 0x41, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xd0, 0x3c, 0xe8, 0x68, 0x68,
++ 0xd8, 0x98, 0x50, 0x58, 0x28, 0x44, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x13, 0x7a, 0x2a, 0x2b, 0x28,
++ 0x29, 0x70, 0x17, 0x19, 0x22, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0x00,
++ 0xf0, 0x00, 0xfc, 0x50, 0x48, 0xc0, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x13, 0x7a, 0x2b, 0x2a, 0x2a,
++ 0x2a, 0x72, 0x12, 0x1a, 0x22, 0x43, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0x08, 0xe8,
++ 0xa8, 0xe8, 0xa8, 0xe8, 0xa8, 0x78, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x13, 0x7a, 0x2b, 0x2a, 0x2a,
++ 0x2b, 0x72, 0x12, 0x1b, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0x48, 0x48,
++ 0xf8, 0xe8, 0xd8, 0x58, 0x48, 0x58, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x13, 0x7c, 0x25, 0x26, 0x24,
++ 0x7b, 0x0a, 0x0e, 0x12, 0x22, 0x42, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xf8, 0xa0, 0xf0, 0xa8, 0xe4,
++ 0xf8, 0x08, 0xe8, 0xa8, 0xe8, 0x98, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x13, 0x7c, 0x2b, 0x2a, 0x2b,
++ 0x2a, 0x73, 0x18, 0x17, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0x00, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x21, 0x3e, 0x32, 0x5e,
++ 0x02, 0x7f, 0x04, 0x0f, 0x03, 0x3c, 0x00, 0x00,
++ 0x20, 0xf8, 0x50, 0x50, 0xfc, 0x20, 0xf8, 0x20,
++ 0x20, 0xfc, 0x40, 0x80, 0x60, 0x10, 0x00, 0x00,
++ 0x01, 0x7d, 0x55, 0x55, 0x7f, 0x56, 0x7e, 0x12,
++ 0x7f, 0x15, 0x15, 0x26, 0x26, 0x4c, 0x00, 0x00,
++ 0x00, 0x7c, 0x54, 0x54, 0xfc, 0xd4, 0xfc, 0x90,
++ 0xfc, 0x14, 0x94, 0xa4, 0x24, 0x4c, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x15, 0x7f, 0x2d, 0x2f, 0x29,
++ 0x2f, 0x71, 0x12, 0x1a, 0x24, 0x48, 0x00, 0x00,
++ 0x08, 0xc8, 0x48, 0x48, 0xfc, 0x54, 0xd4, 0x14,
++ 0xd4, 0x78, 0x48, 0x48, 0x54, 0xe4, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x13, 0x7d, 0x26, 0x24, 0x27,
++ 0x24, 0x78, 0x08, 0x14, 0x20, 0x43, 0x00, 0x00,
++ 0x40, 0xfc, 0x08, 0xf8, 0x50, 0x60, 0xf8, 0x88,
++ 0xf8, 0xf8, 0x88, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x11, 0x7d, 0x25, 0x25, 0x27,
++ 0x7a, 0x0b, 0x0f, 0x17, 0x21, 0x46, 0x00, 0x00,
++ 0x40, 0xf0, 0x10, 0xf0, 0xf0, 0x10, 0xf0, 0xf8,
++ 0x48, 0xf8, 0xf8, 0xfc, 0x10, 0x10, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x11, 0x7f, 0x2d, 0x2d, 0x2f,
++ 0x2b, 0x73, 0x15, 0x19, 0x29, 0x41, 0x00, 0x00,
++ 0x00, 0x3c, 0xd4, 0x14, 0xec, 0x7c, 0x64, 0xfc,
++ 0x24, 0xbc, 0x64, 0x3c, 0x18, 0x64, 0x00, 0x00,
++ 0x10, 0x17, 0x13, 0x12, 0x7b, 0x28, 0x2b, 0x29,
++ 0x28, 0x77, 0x11, 0x1f, 0x29, 0x43, 0x00, 0x00,
++ 0x40, 0xfc, 0xb8, 0xa8, 0xb8, 0xa0, 0xf8, 0xf0,
++ 0xa0, 0xfc, 0xc8, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x12, 0x12, 0x13, 0x15, 0x78, 0x2f, 0x2a, 0x2e,
++ 0x2a, 0x76, 0x12, 0x1e, 0x23, 0x4e, 0x00, 0x00,
++ 0xa0, 0xb0, 0xe8, 0x68, 0x20, 0xfc, 0xa0, 0xe8,
++ 0xa8, 0xd0, 0xd4, 0xac, 0xcc, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x13, 0x7b, 0x2d, 0x29, 0x29,
++ 0x2f, 0x73, 0x13, 0x1d, 0x29, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x58, 0x50, 0x78, 0x48,
++ 0xf8, 0x48, 0xf8, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01,
++ 0x0f, 0x71, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x20, 0x40, 0x80, 0x00, 0x30, 0xc0,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x04, 0x08, 0x08, 0x1f, 0x20,
++ 0x40, 0x01, 0x7f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x78, 0x08, 0x08, 0xe8, 0x70,
++ 0x80, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x1e, 0x11, 0x11, 0x2f, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x30, 0xe0, 0x10, 0x08, 0x08, 0xe0, 0x40, 0x80,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x3f, 0x20, 0x4f, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x08, 0xe0, 0x40,
++ 0x80, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x7f, 0x12, 0x12, 0x3c, 0x06, 0x19, 0x6f,
++ 0x00, 0x01, 0x7f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x50, 0x20, 0xd0, 0x0c, 0xe0,
++ 0xc0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7c, 0x07, 0x08, 0x0a, 0x11, 0x10, 0x14,
++ 0x18, 0x70, 0x11, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x50, 0x90, 0xa0, 0x68,
++ 0x48, 0x90, 0x30, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x00, 0x3f, 0x22, 0x3f, 0x00,
++ 0x3e, 0x04, 0x0e, 0x78, 0x09, 0x1a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf0, 0x50, 0x50, 0xd0,
++ 0x50, 0x70, 0xb4, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x08, 0x04, 0x7f, 0x0a, 0x34, 0x0a, 0x3f, 0x01,
++ 0x1f, 0x00, 0x01, 0x7f, 0x01, 0x03, 0x00, 0x00,
++ 0x20, 0x40, 0xfc, 0x28, 0xd0, 0x28, 0xfc, 0x04,
++ 0xf0, 0xc0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x37, 0x2d, 0x2d, 0x3f, 0x3f, 0x2d,
++ 0x2d, 0x2d, 0x7d, 0x16, 0x14, 0x24, 0x00, 0x00,
++ 0x04, 0x78, 0x58, 0x54, 0x94, 0x00, 0x7c, 0x08,
++ 0x10, 0xfc, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x1a, 0x11, 0x1e, 0x12, 0x1d, 0x12, 0x3f,
++ 0x20, 0x4f, 0x00, 0x3f, 0x01, 0x03, 0x00, 0x00,
++ 0x80, 0xf0, 0x10, 0xf0, 0x90, 0x70, 0x90, 0xfc,
++ 0x08, 0xe0, 0xc0, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x04, 0x02, 0x03, 0x0c, 0x77,
++ 0x00, 0x01, 0x7f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x80, 0x80, 0x60, 0xdc,
++ 0x80, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3d, 0x04, 0x0b, 0x0b, 0x15, 0x10, 0x1f,
++ 0x70, 0x13, 0x12, 0x12, 0x12, 0x32, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x58, 0x50, 0x40, 0xfc,
++ 0x80, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x01, 0x01, 0x3f, 0x20, 0x20,
++ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x04, 0x08,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x22, 0x42, 0x02, 0x02,
++ 0x03, 0x02, 0x02, 0x02, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x04, 0x08, 0x00, 0x10, 0x60,
++ 0x80, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x3f, 0x51, 0x1f, 0x10,
++ 0x10, 0x1f, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x04, 0xf8, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x5f, 0x10, 0x17, 0x10, 0x1f,
++ 0x12, 0x12, 0x12, 0x22, 0x23, 0x4c, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf8, 0x00, 0xf0, 0x00, 0xfc,
++ 0x80, 0x48, 0x50, 0x20, 0x90, 0x0c, 0x00, 0x00,
++ 0x01, 0x3f, 0x22, 0x47, 0x18, 0x7f, 0x11, 0x11,
++ 0x1f, 0x12, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xc0, 0x80, 0xf0, 0x10, 0x10,
++ 0xf0, 0x90, 0xa0, 0x94, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x20, 0x3e, 0x40, 0x7f, 0x14,
++ 0x14, 0x14, 0x14, 0x25, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x44, 0x78, 0x40, 0xf8, 0x88,
++ 0x50, 0x30, 0x70, 0x88, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x44, 0x08, 0x0f, 0x18,
++ 0x2f, 0x48, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0x40, 0x80, 0xf8, 0x80,
++ 0xf0, 0x80, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x00, 0x7f, 0x11, 0x19, 0x27, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x64, 0x25, 0x3c, 0x27,
++ 0x04, 0x7c, 0x15, 0x16, 0x24, 0x44, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0x40, 0xf8, 0x40, 0xfc,
++ 0xe0, 0xd0, 0x50, 0x48, 0x44, 0xc0, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x65, 0x24, 0x3d, 0x24,
++ 0x07, 0x7c, 0x15, 0x15, 0x25, 0x45, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x08, 0xf8, 0x40, 0xf0, 0x90,
++ 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x3f, 0x27, 0x45, 0x7f, 0x09, 0x0f, 0x0f,
++ 0x08, 0x0f, 0x0f, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0xe8, 0x20, 0xfc, 0x40, 0xc0, 0xe0,
++ 0x20, 0xe0, 0xe0, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x3f, 0x25, 0x64, 0x27, 0x3c, 0x25, 0x07,
++ 0x7e, 0x15, 0x14, 0x14, 0x24, 0x47, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x10, 0xfc, 0x10, 0xf0, 0xfc,
++ 0x08, 0xf0, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x5f, 0x04, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x01, 0x7f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf0, 0x40, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x00, 0xfc, 0xc0, 0x38, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x5e, 0x0a, 0x16, 0x0b, 0x12,
++ 0x0c, 0x77, 0x01, 0x06, 0x01, 0x0e, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x50, 0xb0, 0x50, 0x80,
++ 0xe0, 0x5c, 0xa0, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x22, 0x5c, 0x10, 0x1e, 0x10, 0x1f,
++ 0x08, 0x1f, 0x65, 0x12, 0x12, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x00, 0xf8, 0x48, 0xa8, 0xa8, 0x30, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x5f, 0x12, 0x1f, 0x7f, 0x0f,
++ 0x08, 0x0f, 0x0c, 0x74, 0x07, 0x18, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x90, 0xf0, 0xfc, 0xe0,
++ 0x20, 0xe0, 0x88, 0x50, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x3f, 0x3e, 0x49, 0x3f, 0x0e, 0x38, 0x0f,
++ 0x08, 0x0f, 0x0f, 0x08, 0x0f, 0x3c, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x20, 0xfc, 0xa8, 0xf8, 0xe0,
++ 0x20, 0xe0, 0xe0, 0x20, 0xe0, 0x38, 0x00, 0x00,
++ 0x01, 0x3f, 0x3e, 0x48, 0x3f, 0x0e, 0x39, 0x0f,
++ 0x08, 0x0f, 0x0f, 0x08, 0x0f, 0x3c, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0xf8, 0xb0, 0xa8, 0x68, 0xe0,
++ 0x20, 0xe0, 0xe0, 0x20, 0xe0, 0x38, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x22, 0x22, 0x3e,
++ 0x14, 0x14, 0x14, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10, 0x90, 0x50,
++ 0x50, 0x10, 0x10, 0x34, 0x04, 0xfc, 0x00, 0x00,
++ 0x04, 0x24, 0x24, 0x24, 0x3d, 0x26, 0x04, 0x7c,
++ 0x17, 0x15, 0x14, 0x24, 0x44, 0x04, 0x00, 0x00,
++ 0x40, 0x78, 0x88, 0xd0, 0x30, 0xa0, 0xd0, 0x90,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x01, 0x3f, 0x00, 0x7f, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf8, 0x48, 0xfc, 0x40, 0xc0, 0x00, 0x00,
++ 0x0a, 0x4a, 0x2a, 0x2b, 0x7f, 0x11, 0x0a, 0x3f,
++ 0x04, 0x3f, 0x04, 0x04, 0x07, 0x78, 0x00, 0x00,
++ 0x08, 0x88, 0x88, 0x08, 0xfc, 0x08, 0x48, 0x28,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x1f, 0x11, 0x21, 0x49, 0x09,
++ 0x11, 0x11, 0x21, 0x41, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x20, 0x10,
++ 0x10, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x12, 0x12, 0x3f, 0x12, 0x1e, 0x12, 0x1e, 0x13,
++ 0x7f, 0x2c, 0x2d, 0x33, 0x20, 0x1f, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xb0, 0xa8, 0xa8, 0xa4, 0x2c,
++ 0x68, 0x30, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x01, 0x02, 0x02,
++ 0x02, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x80, 0x80, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x14, 0x12, 0x12, 0x7e, 0x15, 0x14, 0x14,
++ 0x14, 0x14, 0x14, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0x50, 0x90, 0x20, 0x28, 0x48,
++ 0x90, 0x10, 0x20, 0x44, 0x84, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x20, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x1f,
++ 0x01, 0x01, 0x02, 0x02, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xfc, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x14, 0x14, 0x14,
++ 0x17, 0x14, 0x14, 0x24, 0x27, 0x5c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x48, 0x40, 0x44,
++ 0xc8, 0x70, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x14, 0x17,
++ 0x14, 0x14, 0x15, 0x24, 0x27, 0x44, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x88, 0x80, 0x88, 0xf8,
++ 0x88, 0x88, 0xe8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x14, 0x12, 0x12,
++ 0x1f, 0x11, 0x12, 0x24, 0x28, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x88, 0x90, 0x90, 0xa0,
++ 0xfc, 0xc0, 0xa0, 0x90, 0x8c, 0x80, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x17, 0x14, 0x17,
++ 0x14, 0x17, 0x14, 0x27, 0x23, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x12, 0x12, 0x15, 0x1a,
++ 0x13, 0x14, 0x1c, 0x24, 0x24, 0x47, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x12, 0x11, 0x17, 0x11,
++ 0x11, 0x1f, 0x11, 0x22, 0x24, 0x48, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x10, 0x20, 0xf8, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x13, 0x10, 0x1f, 0x10,
++ 0x17, 0x11, 0x13, 0x3e, 0x22, 0x46, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0xe0, 0x40, 0xf8, 0x80,
++ 0xfc, 0x08, 0x10, 0xfc, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x16, 0x16, 0x17, 0x15,
++ 0x17, 0x17, 0x1d, 0x27, 0x21, 0x4f, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0xb0, 0xb0, 0xf0, 0x50,
++ 0xf0, 0xf8, 0x48, 0xc8, 0x68, 0xf0, 0x00, 0x00,
++ 0x01, 0x01, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3f,
++ 0x21, 0x22, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x54, 0x54, 0x54, 0x54, 0x54,
++ 0x54, 0x54, 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
++ 0x80, 0x80, 0x84, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x21, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x7f,
++ 0x02, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x55, 0x55, 0x56, 0x55, 0x54,
++ 0x54, 0x54, 0x7c, 0x45, 0x41, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x00, 0x00, 0xf0, 0x20,
++ 0x40, 0x80, 0x80, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x00, 0x3f, 0x04, 0x04, 0x07,
++ 0x04, 0x0a, 0x09, 0x10, 0x23, 0x4c, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x00, 0xc0, 0x40, 0x40, 0xf0,
++ 0x10, 0x20, 0x40, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x21, 0x21, 0x3f, 0x21, 0x02, 0x04, 0x18,
++ 0x67, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0xf8, 0x08, 0x80, 0x40, 0x30,
++ 0xcc, 0x00, 0xc0, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x07, 0x04, 0x18, 0x6f, 0x02, 0x02, 0x0c, 0x30,
++ 0x01, 0x21, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0xc0, 0x40, 0x30, 0xec, 0x20, 0x20, 0x20, 0xc0,
++ 0x00, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x1f, 0x00, 0x7f, 0x02, 0x3f,
++ 0x04, 0x04, 0x0f, 0x08, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0xf8,
++ 0x40, 0x40, 0x80, 0xe0, 0x10, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x54, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x7d, 0x45, 0x41, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x7d, 0x46, 0x43, 0x00, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x10, 0x50, 0x94, 0x0c, 0xec, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x7d, 0x45, 0x41, 0x01, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x55, 0x55, 0x56, 0x54, 0x57,
++ 0x54, 0x54, 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x50, 0x48, 0x48, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x7d, 0x45, 0x41, 0x06, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x28, 0x20, 0xfc,
++ 0x20, 0x20, 0x10, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x54, 0x57, 0x54, 0x54, 0x54,
++ 0x57, 0x7c, 0x45, 0x41, 0x02, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0x90, 0x98, 0xe4, 0x90, 0x90, 0x90,
++ 0xfc, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x54, 0x54, 0x54, 0x54, 0x55,
++ 0x55, 0x55, 0x7d, 0x45, 0x41, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x40, 0x40, 0x40, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x21, 0x21, 0x3f, 0x21, 0x02, 0x04, 0x1f,
++ 0x60, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0xf8, 0x08, 0x80, 0x40, 0xf0,
++ 0x0c, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x54, 0x54, 0x57, 0x54, 0x54,
++ 0x57, 0x55, 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x20, 0x06, 0x38, 0x08, 0x7f,
++ 0x08, 0x0e, 0x78, 0x08, 0x09, 0x18, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x08, 0x50, 0x48, 0x40, 0xfc,
++ 0x48, 0x48, 0x30, 0x74, 0x8c, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x55, 0x55, 0x55, 0x56, 0x56,
++ 0x54, 0x54, 0x7c, 0x45, 0x42, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x50, 0x50, 0x50, 0xe8, 0x44,
++ 0x44, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x57, 0x55, 0x7c, 0x44, 0x43, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x40, 0x80, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x56, 0x54, 0x55, 0x55, 0x55,
++ 0x55, 0x7d, 0x45, 0x41, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x01, 0x0f, 0x08, 0x0f, 0x0f,
++ 0x08, 0x0f, 0x0f, 0x2a, 0x25, 0x40, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x00, 0xe0, 0x20, 0xe0, 0xe0,
++ 0x00, 0xfc, 0xf8, 0x88, 0x48, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x56, 0x54, 0x54, 0x54, 0x55,
++ 0x57, 0x55, 0x7d, 0x45, 0x41, 0x01, 0x00, 0x00,
++ 0xa0, 0x90, 0x08, 0x48, 0x40, 0xa0, 0xa0, 0x10,
++ 0xf8, 0x14, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x00, 0x3f, 0x09, 0x7f, 0x09,
++ 0x09, 0x3f, 0x01, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x00, 0xf8, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x7d, 0x46, 0x43, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x00, 0x3f, 0x24, 0x22, 0x3f,
++ 0x21, 0x29, 0x29, 0x2f, 0x28, 0x20, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x00, 0xf8, 0x48, 0x88, 0xf8,
++ 0x08, 0x28, 0x28, 0xe8, 0x28, 0x18, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x01, 0x3f, 0x08, 0x04, 0x7f,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x00, 0xf8, 0x20, 0x40, 0xfc,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x21, 0x21, 0x3f, 0x22, 0x04, 0x1f, 0x61,
++ 0x1f, 0x09, 0x05, 0x05, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0xf8, 0x88, 0x40, 0xf0, 0x0c,
++ 0xf0, 0x20, 0x20, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x7e, 0x47, 0x45, 0x09, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x04, 0x04, 0xfc, 0x20, 0xa8, 0xa8,
++ 0xf8, 0x20, 0x24, 0x24, 0xfc, 0x04, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x20, 0x1f, 0x10, 0x1f, 0x10,
++ 0x1f, 0x10, 0x1e, 0x10, 0x1c, 0x70, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x08, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x98, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x21, 0x21, 0x3f, 0x24, 0x04, 0x0f, 0x08,
++ 0x1f, 0x28, 0x4f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0xf8, 0x48, 0x80, 0xf8, 0x80,
++ 0xf0, 0x80, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x55, 0x56, 0x55, 0x54, 0x57,
++ 0x54, 0x55, 0x7c, 0x44, 0x40, 0x00, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x24, 0x04, 0xf8, 0x48, 0xfc,
++ 0x48, 0xf8, 0x48, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x57, 0x54, 0x54, 0x55, 0x56,
++ 0x54, 0x55, 0x7e, 0x44, 0x41, 0x0e, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0xa0, 0xa4, 0x5c, 0x40,
++ 0xf0, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x01, 0x21, 0x21, 0x3f, 0x22, 0x04, 0x1f, 0x60,
++ 0x1f, 0x12, 0x1f, 0x12, 0x12, 0x10, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0xf8, 0x88, 0x40, 0xf0, 0x0c,
++ 0xf0, 0x90, 0xf0, 0x90, 0x90, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x55, 0x57, 0x54, 0x57, 0x56,
++ 0x56, 0x57, 0x7e, 0x46, 0x42, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xf8, 0xa8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x01, 0x21, 0x21, 0x3f, 0x24, 0x24, 0x7f, 0x24,
++ 0x25, 0x3c, 0x24, 0x24, 0x3d, 0x26, 0x00, 0x00,
++ 0x00, 0x08, 0x08, 0xf8, 0x48, 0x40, 0x7c, 0xa8,
++ 0x30, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x00, 0x3e, 0x22, 0x3e,
++ 0x22, 0x01, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xf8, 0x88, 0xf8,
++ 0x88, 0x00, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55, 0x54,
++ 0x57, 0x56, 0x7e, 0x47, 0x42, 0x02, 0x00, 0x00,
++ 0x00, 0xf0, 0x50, 0xf0, 0x50, 0x50, 0xf0, 0x40,
++ 0xf8, 0x68, 0x58, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x7d, 0x46, 0x42, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0x28, 0xf8, 0x00, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x02, 0x1f, 0x11, 0x1f, 0x11,
++ 0x1f, 0x12, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0xb0, 0xa8, 0xfc, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x04, 0x7f, 0x01, 0x1f, 0x01,
++ 0x7f, 0x08, 0x0f, 0x11, 0x3f, 0x40, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x40, 0xfc, 0x00, 0xf0, 0x00,
++ 0xfc, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x54, 0x57, 0x56, 0x56, 0x57,
++ 0x55, 0x56, 0x7d, 0x46, 0x40, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x40, 0x40, 0xf8,
++ 0x98, 0xe8, 0x98, 0xe8, 0x88, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x56, 0x56, 0x56, 0x56, 0x57,
++ 0x57, 0x57, 0x7f, 0x46, 0x43, 0x02, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x90, 0xf0, 0x00, 0xf8,
++ 0x68, 0x68, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x08, 0x7f, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x2a, 0x3e, 0x09, 0x7f, 0x0a, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x08, 0x30, 0xc0, 0x80, 0xfc,
++ 0x90, 0x90, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x57, 0x54, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x7c, 0x47, 0x40, 0x00, 0x00, 0x00,
++ 0x40, 0xf8, 0x20, 0xfc, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x57, 0x55, 0x57, 0x55, 0x55,
++ 0x56, 0x7f, 0x44, 0x40, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xb8, 0x10, 0xfc,
++ 0x00, 0xfc, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x54, 0x55, 0x56, 0x55, 0x55,
++ 0x55, 0x7d, 0x45, 0x40, 0x03, 0x00, 0x00, 0x00,
++ 0xe0, 0x68, 0x50, 0x94, 0xf8, 0x08, 0xf4, 0x10,
++ 0x10, 0xf0, 0x10, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x10, 0x13, 0x54, 0x55, 0x54, 0x57, 0x54,
++ 0x57, 0x57, 0x7d, 0x47, 0x41, 0x03, 0x00, 0x00,
++ 0x08, 0x90, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0xa8,
++ 0x24, 0xfc, 0xa8, 0x14, 0x2c, 0xc4, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x54, 0x55, 0x57, 0x54, 0x57,
++ 0x56, 0x7f, 0x45, 0x41, 0x02, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0xb8,
++ 0xa8, 0xb8, 0x10, 0x90, 0xa8, 0x44, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x08, 0x2b, 0x17, 0x18, 0x2b,
++ 0x4b, 0x18, 0x2b, 0x4a, 0x0b, 0x32, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x18, 0x94, 0xd4, 0x7c, 0x90,
++ 0x90, 0x10, 0xb0, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x00, 0x3c, 0x27, 0x28, 0x33,
++ 0x29, 0x25, 0x25, 0x3b, 0x20, 0x27, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x40, 0xf8, 0x90, 0x60, 0x9c,
++ 0xf0, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x24, 0x38, 0x22, 0x1e, 0x21,
++ 0x3e, 0x48, 0x7e, 0x08, 0x15, 0x62, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x00, 0xf8, 0x50, 0x20, 0xfc,
++ 0x28, 0xa0, 0xb8, 0xa0, 0x60, 0x3c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x55, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x7f, 0x44, 0x41, 0x02, 0x00, 0x00,
++ 0x40, 0xd8, 0x68, 0x48, 0xf8, 0x28, 0x68, 0xf8,
++ 0x68, 0x68, 0xfc, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x54, 0x55, 0x55, 0x55, 0x57,
++ 0x54, 0x57, 0x7d, 0x45, 0x40, 0x03, 0x00, 0x00,
++ 0x70, 0xa0, 0xf8, 0x88, 0xf8, 0xb0, 0xe4, 0x5c,
++ 0xe0, 0xf0, 0x50, 0xf4, 0xac, 0x1c, 0x00, 0x00,
++ 0x01, 0x21, 0x3f, 0x0c, 0x39, 0x7f, 0x1d, 0x2b,
++ 0x49, 0x7e, 0x14, 0x3c, 0x0d, 0x32, 0x00, 0x00,
++ 0x00, 0x08, 0xf8, 0x40, 0xf0, 0x50, 0xf0, 0x50,
++ 0xf0, 0xd0, 0xe8, 0xfc, 0x44, 0x3c, 0x00, 0x00,
++ 0x21, 0x3f, 0x24, 0x3b, 0x1e, 0x5e, 0x52, 0x5e,
++ 0x5e, 0x52, 0x5e, 0x3e, 0x14, 0x63, 0x00, 0x00,
++ 0x08, 0xf8, 0x00, 0xfc, 0x20, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x48, 0x84, 0x00, 0x00,
++ 0x13, 0x1f, 0x68, 0x13, 0x2b, 0x7c, 0x3b, 0x56,
++ 0x13, 0x01, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x90, 0xd8, 0x68, 0x90, 0xa8, 0x7c, 0xb8, 0xd4,
++ 0x90, 0x00, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x21, 0x3f, 0x1e, 0x12, 0x1e, 0x3f, 0x2f, 0x24,
++ 0x3f, 0x29, 0x2f, 0x2f, 0x3f, 0x41, 0x00, 0x00,
++ 0x08, 0xf8, 0xf0, 0x90, 0xf0, 0xfc, 0x20, 0x20,
++ 0xfc, 0x48, 0xb0, 0x90, 0x68, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x11, 0x11, 0x22, 0x44,
++ 0x22, 0x11, 0x11, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x88, 0x88, 0x88, 0x88, 0x10, 0x10, 0x20, 0x40,
++ 0x20, 0x10, 0x10, 0x88, 0x88, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x09, 0x09, 0x09, 0x09, 0x0d,
++ 0x13, 0x13, 0x21, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x20, 0x20, 0x20, 0x20, 0x60,
++ 0x50, 0x88, 0x08, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x20, 0x20, 0x3f, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x1f, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10,
++ 0x00, 0x00, 0x04, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x17, 0x14, 0x14,
++ 0x17, 0x14, 0x14, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0x00, 0xf0, 0x90, 0x90,
++ 0xf0, 0x10, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x10, 0x1e, 0x71, 0x01,
++ 0x1f, 0x11, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0x80, 0x64, 0x1c, 0x04,
++ 0xf0, 0x10, 0x10, 0x10, 0xe0, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x00, 0x7f, 0x00, 0x0f, 0x00, 0x3f,
++ 0x21, 0x5f, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xfc, 0x20, 0xe0, 0x00, 0xfc,
++ 0x08, 0xf0, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x55, 0x56, 0x54, 0x57,
++ 0x54, 0x58, 0x50, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x12, 0x12, 0x3c, 0x06, 0x19,
++ 0x7f, 0x11, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c,
++ 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x01,
++ 0x3f, 0x21, 0x21, 0x21, 0x21, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00, 0x00,
++ 0x0a, 0x0a, 0x7f, 0x0a, 0x0b, 0x10, 0x3f, 0x21,
++ 0x5f, 0x11, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0xa0, 0xa0, 0xfc, 0xa0, 0xa8, 0x18, 0xfc, 0x08,
++ 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x55, 0x57, 0x55, 0x55,
++ 0x55, 0x55, 0x59, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x90, 0x90, 0xa0, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x59, 0x12, 0x13, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xfc, 0x50, 0x58,
++ 0xe8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x54, 0x55, 0x55, 0x55,
++ 0x54, 0x55, 0x59, 0x17, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0xf0, 0x90, 0xfc, 0x00, 0xf0, 0x10, 0xf0,
++ 0x20, 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x55, 0x59, 0x10, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x40, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7d, 0x55, 0x55, 0x55, 0x55,
++ 0x54, 0x57, 0x58, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x40, 0xfc, 0x00, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x57, 0x56, 0x57, 0x57,
++ 0x57, 0x56, 0x5b, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x68, 0x58, 0xf8, 0x48, 0xd8, 0x58,
++ 0xe8, 0x78, 0xb8, 0x58, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x55, 0x55, 0x57, 0x56,
++ 0x57, 0x55, 0x58, 0x10, 0x10, 0x17, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xf8, 0xa8,
++ 0xf8, 0xf0, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7d, 0x55, 0x57, 0x54, 0x57,
++ 0x56, 0x57, 0x5a, 0x13, 0x12, 0x10, 0x00, 0x00,
++ 0xa0, 0xb0, 0xe8, 0x68, 0xa0, 0xfc, 0x20, 0xe8,
++ 0x68, 0xd8, 0x50, 0xd4, 0x2c, 0x44, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x55, 0x55, 0x55, 0x55,
++ 0x55, 0x54, 0x5b, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0xf8, 0xa0, 0xfc, 0xf0, 0x50, 0xf0, 0x50,
++ 0xf0, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x2a, 0x49, 0x7f, 0x5d, 0x55, 0x5d, 0x41,
++ 0x3f, 0x21, 0x21, 0x21, 0x21, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x88, 0x50, 0x30, 0xcc, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00, 0x00,
++ 0x08, 0x3e, 0x09, 0x7e, 0x08, 0x3e, 0x0f, 0x71,
++ 0x1f, 0x11, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x90, 0x50, 0x10, 0x30, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x08, 0x08, 0x08, 0x08, 0x7f, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x3f, 0x04, 0x04, 0x04, 0x7f,
++ 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x01, 0x01, 0x1a, 0x06, 0x01, 0x00,
++ 0x00, 0x01, 0x02, 0x04, 0x3f, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0x00, 0x10, 0x10, 0x20, 0x20, 0xc0,
++ 0x80, 0x20, 0x10, 0x78, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x16, 0x16, 0x1a, 0x12,
++ 0x11, 0x17, 0x10, 0x21, 0x2f, 0x40, 0x00, 0x00,
++ 0x80, 0xfc, 0x20, 0xfc, 0x68, 0xec, 0xec, 0xa0,
++ 0x10, 0x20, 0xd0, 0x08, 0xfc, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x20, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x11, 0x1f, 0x10, 0x17,
++ 0x10, 0x10, 0x1f, 0x20, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0x40, 0xf8, 0x80, 0xf0,
++ 0x80, 0x80, 0xfc, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x14, 0x17, 0x14, 0x17,
++ 0x14, 0x17, 0x13, 0x22, 0x24, 0x48, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0x88, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0x28, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x12, 0x1f, 0x12, 0x13,
++ 0x16, 0x16, 0x1a, 0x32, 0x22, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x78, 0xc8, 0x48, 0x78,
++ 0xc8, 0xf8, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x13, 0x13, 0x13,
++ 0x12, 0x13, 0x11, 0x27, 0x20, 0x4f, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xfc, 0x80, 0xf0, 0xf0, 0xf0,
++ 0x10, 0xf0, 0xf0, 0x20, 0xe0, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x17, 0x15, 0x17, 0x15,
++ 0x17, 0x14, 0x15, 0x26, 0x24, 0x43, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x78, 0x50, 0x50, 0x7c,
++ 0x50, 0x10, 0x30, 0x34, 0xd4, 0x8c, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x12, 0x17, 0x15, 0x17, 0x15,
++ 0x17, 0x14, 0x15, 0x26, 0x24, 0x43, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x70, 0x50, 0x54, 0x8c,
++ 0xf8, 0x48, 0x50, 0x20, 0xd0, 0x8c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x11, 0x16, 0x11, 0x16,
++ 0x13, 0x1c, 0x13, 0x21, 0x20, 0x47, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf8, 0x98, 0xe8, 0x98, 0xe8,
++ 0x70, 0xdc, 0x60, 0x90, 0x60, 0x80, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x13, 0x1f, 0x10, 0x17,
++ 0x14, 0x17, 0x24, 0x27, 0x43, 0x0c, 0x00, 0x00,
++ 0x80, 0xfc, 0x20, 0xf8, 0xe0, 0xfc, 0x80, 0xf0,
++ 0x90, 0xf0, 0x90, 0xf0, 0x30, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x15, 0x15, 0x1f, 0x15, 0x17, 0x15,
++ 0x17, 0x15, 0x3f, 0x25, 0x44, 0x08, 0x00, 0x00,
++ 0x80, 0xfc, 0x08, 0x70, 0xc0, 0x40, 0x7c, 0x50,
++ 0x50, 0x50, 0xd0, 0x50, 0x90, 0x90, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x17, 0x10, 0x17,
++ 0x14, 0x17, 0x14, 0x23, 0x23, 0x4c, 0x00, 0x00,
++ 0x80, 0xfc, 0x08, 0xc8, 0x08, 0xfc, 0x08, 0xc8,
++ 0xa8, 0xa8, 0x88, 0x08, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x17, 0x14, 0x17, 0x14, 0x17, 0x17,
++ 0x1f, 0x12, 0x14, 0x3b, 0x20, 0x5f, 0x00, 0x00,
++ 0x80, 0xfc, 0xf0, 0x90, 0xf0, 0x90, 0xf0, 0xf0,
++ 0xfc, 0x28, 0xb8, 0xe0, 0x80, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x19, 0x16, 0x17, 0x19,
++ 0x17, 0x14, 0x1f, 0x21, 0x21, 0x46, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xd4, 0x24, 0x18, 0x7c, 0x50,
++ 0x54, 0x8c, 0xf8, 0x50, 0x30, 0xcc, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x12, 0x13, 0x16, 0x1a, 0x1f,
++ 0x12, 0x12, 0x17, 0x25, 0x24, 0x48, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0x00, 0xfc, 0xa8, 0xa8, 0xfc,
++ 0xa8, 0xa8, 0xfc, 0x48, 0xa4, 0xa4, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x27, 0x29, 0x32, 0x2f, 0x2a,
++ 0x2f, 0x2a, 0x2f, 0x28, 0x28, 0x51, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0x78, 0x28, 0x28, 0xd8, 0xb0,
++ 0xb0, 0xfc, 0xd0, 0xfc, 0x90, 0x90, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x17, 0x15, 0x15, 0x15,
++ 0x17, 0x10, 0x13, 0x3f, 0x26, 0x58, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0xf8, 0xf0, 0xd0, 0x50, 0xd0,
++ 0xf0, 0xe0, 0x80, 0xfc, 0xb0, 0x8c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x14, 0x17, 0x15, 0x15,
++ 0x15, 0x15, 0x25, 0x2b, 0x4a, 0x17, 0x00, 0x00,
++ 0x80, 0xfc, 0xf0, 0xfc, 0xe8, 0x78, 0xf0, 0x50,
++ 0xf0, 0x50, 0xf0, 0xf8, 0xa8, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x2a, 0x35, 0x2a, 0x2f, 0x29, 0x2f,
++ 0x20, 0x2f, 0x2a, 0x2f, 0x28, 0x47, 0x00, 0x00,
++ 0x80, 0xfc, 0xa8, 0x28, 0xbc, 0x68, 0x68, 0xbc,
++ 0x28, 0xbc, 0xa8, 0xa8, 0x7c, 0xe0, 0x00, 0x00,
++ 0x00, 0x3f, 0x3f, 0x29, 0x2f, 0x29, 0x2f, 0x29,
++ 0x3f, 0x3f, 0x25, 0x2f, 0x25, 0x4f, 0x00, 0x00,
++ 0x80, 0xfc, 0x20, 0xfc, 0x20, 0xfc, 0xb4, 0xfc,
++ 0x00, 0xfc, 0x28, 0xd4, 0xcc, 0x38, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x3f, 0x2a, 0x2b, 0x2f, 0x2b,
++ 0x2e, 0x2a, 0x2f, 0x3a, 0x23, 0x42, 0x00, 0x00,
++ 0x80, 0xfc, 0x20, 0xfc, 0x20, 0xfc, 0x54, 0xfc,
++ 0x20, 0x58, 0xd4, 0xc4, 0x48, 0x38, 0x00, 0x00,
++ 0x00, 0x3c, 0x04, 0x08, 0x08, 0x10, 0x3c, 0x04,
++ 0x24, 0x28, 0x18, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x78, 0x08, 0x10, 0x13, 0x22, 0x7a, 0x0b,
++ 0x4a, 0x32, 0x13, 0x2a, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x04, 0x7f, 0x04, 0x04,
++ 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x02, 0x02, 0x04, 0x3f, 0x04,
++ 0x04, 0x7f, 0x04, 0x08, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x20, 0x10, 0xf8, 0x48,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x24, 0x24, 0x3c, 0x07, 0x7c, 0x24, 0x25, 0x44,
++ 0x04, 0x7f, 0x04, 0x04, 0x08, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x00,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x03, 0x07, 0x7f, 0x2a, 0x1c, 0x7e, 0x1d,
++ 0x2a, 0x49, 0x04, 0x7f, 0x04, 0x18, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0xfc, 0x28, 0xd0, 0x28, 0xfc,
++ 0xa8, 0x24, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x03, 0x07, 0x7f, 0x2a, 0x1c, 0x7f, 0x1c,
++ 0x2a, 0x48, 0x04, 0x7f, 0x04, 0x18, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0xfc, 0x50, 0x88, 0xfc, 0x48,
++ 0x48, 0x98, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x00, 0x07, 0x78, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x20, 0x10, 0x10, 0x0c, 0xf0, 0x80, 0x80, 0x40,
++ 0x40, 0x20, 0x24, 0x14, 0x0c, 0x04, 0x00, 0x00,
++ 0x02, 0x02, 0x34, 0x0d, 0x1a, 0x6a, 0x09, 0x7e,
++ 0x18, 0x1c, 0x2a, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x18, 0x14, 0x14, 0xfc, 0x10, 0x10, 0xf0, 0x50,
++ 0x50, 0x54, 0x4c, 0x6c, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x1f,
++ 0x10, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0xf8,
++ 0x08, 0x08, 0x10, 0xe0, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x12, 0x3a, 0x06, 0x19, 0x6f,
++ 0x00, 0x0f, 0x08, 0x1f, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c, 0xe0,
++ 0x20, 0xe0, 0x00, 0xf0, 0x10, 0xe0, 0x00, 0x00,
++ 0x00, 0x7f, 0x09, 0x09, 0x79, 0x49, 0x41, 0x41,
++ 0x79, 0x49, 0x09, 0x0f, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x7b, 0x0a, 0x0a, 0x7a, 0x4b, 0x42, 0x7a,
++ 0x4a, 0x0b, 0x0a, 0x0c, 0x14, 0x69, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xa8, 0xb8, 0xa8, 0xa8,
++ 0xa8, 0xb8, 0xa8, 0xc8, 0xc8, 0x98, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x0b, 0x7a, 0x4b, 0x40, 0x7f,
++ 0x48, 0x0b, 0x0a, 0x0b, 0x0a, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xc8, 0x48, 0xc8, 0x18, 0xfc,
++ 0x08, 0xc8, 0x48, 0xc8, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x7b, 0x0a, 0x0b, 0x78, 0x4b, 0x42, 0x7b,
++ 0x4a, 0x0b, 0x08, 0x0f, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0x00, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x09, 0x0e, 0x7b, 0x4a, 0x43, 0x7a,
++ 0x4b, 0x0a, 0x0b, 0x0a, 0x0b, 0x32, 0x00, 0x00,
++ 0x00, 0xfc, 0x58, 0x44, 0xf8, 0xd8, 0xf8, 0xd8,
++ 0x68, 0xd8, 0xf8, 0xd8, 0x68, 0x58, 0x00, 0x00,
++ 0x13, 0x6f, 0x2b, 0x17, 0x7f, 0x3a, 0x57, 0x1f,
++ 0x00, 0x0f, 0x08, 0x1f, 0x10, 0x00, 0x00, 0x00,
++ 0x90, 0xe8, 0xa8, 0x94, 0xfc, 0xb8, 0xd4, 0xe0,
++ 0x20, 0xe0, 0x00, 0xf0, 0x10, 0xe0, 0x00, 0x00,
++ 0x01, 0x7f, 0x02, 0x12, 0x12, 0x24, 0x4f, 0x00,
++ 0x0f, 0x08, 0x1f, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x50, 0x48, 0xc4, 0xe4, 0x20,
++ 0xe0, 0x00, 0xf0, 0x10, 0x10, 0xe0, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x07, 0x04, 0x04, 0x04, 0x04,
++ 0x0f, 0x08, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xe0, 0x20, 0x20, 0x20, 0x20,
++ 0xe0, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x03, 0x04, 0x0f, 0x00, 0x7f, 0x01, 0x07,
++ 0x79, 0x06, 0x39, 0x06, 0x38, 0x03, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x80, 0x80, 0xfc, 0x00, 0x48,
++ 0xd0, 0xe0, 0xa0, 0x90, 0x8c, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x08, 0x3e, 0x08, 0x0e, 0x78,
++ 0x1f, 0x00, 0x7f, 0x00, 0x1f, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x20,
++ 0xf0, 0x10, 0xfc, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x02, 0x07, 0x0f, 0x7f, 0x00, 0x3f, 0x2f, 0x49,
++ 0x0f, 0x09, 0x0f, 0x7f, 0x0d, 0x31, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0xfc, 0x00, 0xfc, 0xe8, 0x20,
++ 0xe0, 0x20, 0xe0, 0xfc, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x02, 0x04, 0x08, 0x10, 0x01,
++ 0x02, 0x04, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x40, 0x40, 0x80, 0x90, 0x10,
++ 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x00, 0x3e, 0x22,
++ 0x3e, 0x22, 0x12, 0x14, 0x1e, 0x70, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x28, 0x48, 0x90, 0x14, 0x24,
++ 0x48, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x02, 0x04, 0x08, 0x00, 0x01,
++ 0x03, 0x05, 0x09, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x40, 0x40, 0x80, 0x80, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x10, 0x17, 0x24, 0x08, 0x08, 0x18,
++ 0x28, 0x48, 0x08, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x78, 0x48,
++ 0x48, 0x88, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x12, 0x22, 0x2a, 0x4b, 0x14, 0x14, 0x38,
++ 0x53, 0x10, 0x10, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x11, 0x15, 0x25, 0x49, 0x09, 0x19,
++ 0x29, 0x49, 0x09, 0x09, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x13, 0x14, 0x24, 0x4b, 0x0a, 0x1a,
++ 0x2b, 0x4a, 0x08, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8, 0xa0,
++ 0xfc, 0xa4, 0xa4, 0xb8, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x22, 0x4a, 0x0a, 0x12, 0x12, 0x32,
++ 0x52, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xe8, 0xa8, 0xa8, 0xa8,
++ 0xe8, 0xa8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x09, 0x11, 0x15, 0x25, 0x49, 0x09, 0x19,
++ 0x29, 0x49, 0x09, 0x09, 0x09, 0x0e, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf4,
++ 0x44, 0x48, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x17, 0x22, 0x4a, 0x0c, 0x12, 0x12, 0x30,
++ 0x53, 0x10, 0x10, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x48, 0x90, 0x48, 0x48, 0x00,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x09, 0x09, 0x11, 0x15, 0x26, 0x4b, 0x0d, 0x19,
++ 0x29, 0x49, 0x09, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0xe8, 0x28, 0xe8,
++ 0x28, 0xe8, 0x28, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x11, 0x11, 0x21, 0x4a, 0x0a, 0x14, 0x10, 0x32,
++ 0x52, 0x12, 0x12, 0x15, 0x14, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xa8, 0xa4, 0x44, 0x40, 0x40,
++ 0x40, 0x78, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x10, 0x10, 0x22, 0x4a, 0x0a, 0x12, 0x17, 0x30,
++ 0x52, 0x12, 0x12, 0x13, 0x14, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x78, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x78, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x4f, 0x08, 0x10, 0x17, 0x30,
++ 0x50, 0x1f, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xb8, 0xa0,
++ 0xa0, 0xbc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x27, 0x49, 0x09, 0x13, 0x12, 0x34,
++ 0x50, 0x10, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x50, 0x50, 0x58, 0xe4, 0x44,
++ 0xe0, 0xd0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x11, 0x15, 0x25, 0x49, 0x09, 0x18,
++ 0x2f, 0x48, 0x0b, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00,
++ 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x21, 0x4e, 0x09, 0x11, 0x17, 0x31,
++ 0x52, 0x17, 0x10, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x80, 0xf0, 0x90, 0x60, 0x40, 0x80, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x12, 0x27, 0x4c, 0x0f, 0x14, 0x17, 0x32,
++ 0x5f, 0x12, 0x13, 0x12, 0x14, 0x19, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0xa0, 0xfc, 0xc8, 0xa8, 0x28,
++ 0xb0, 0x10, 0x90, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x18, 0x37, 0x34, 0x31, 0x50,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x90,
++ 0x90, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x19, 0x35, 0x35, 0x31, 0x51,
++ 0x11, 0x11, 0x12, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x19, 0x36, 0x34, 0x30, 0x57,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x19, 0x35, 0x35, 0x37, 0x51,
++ 0x11, 0x11, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x13, 0x3a, 0x36, 0x34, 0x50,
++ 0x10, 0x10, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x44, 0x48, 0x60, 0x60,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x01, 0x1f, 0x01, 0x7f, 0x02, 0x04, 0x1a,
++ 0x62, 0x0b, 0x0a, 0x12, 0x22, 0x06, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30,
++ 0x0c, 0x20, 0x90, 0x48, 0x48, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x27, 0x24, 0x27, 0x27, 0x24,
++ 0x27, 0x3f, 0x01, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0xf0, 0x10,
++ 0xf0, 0xfc, 0x00, 0x88, 0x24, 0xe4, 0x00, 0x00,
++ 0x01, 0x04, 0x08, 0x10, 0x6f, 0x02, 0x04, 0x18,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0xc0, 0x40, 0x20, 0x10, 0xec, 0x20, 0x20, 0xc0,
++ 0x00, 0x90, 0x88, 0x04, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x18, 0x34, 0x34, 0x31, 0x57, 0x10,
++ 0x13, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x90, 0x88, 0x1c, 0xe4, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x1b, 0x35, 0x35, 0x32, 0x56,
++ 0x1a, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x00, 0x20, 0x20, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x3b, 0x34, 0x34, 0x50, 0x13,
++ 0x12, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x3b, 0x36, 0x34, 0x53, 0x12,
++ 0x12, 0x12, 0x13, 0x12, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0xc8, 0x48,
++ 0x48, 0x48, 0xc8, 0x48, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x1a, 0x36, 0x37, 0x32, 0x52, 0x12,
++ 0x12, 0x12, 0x14, 0x14, 0x18, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x80, 0x88,
++ 0x90, 0xe0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x11, 0x11, 0x21, 0x41, 0x01,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xf0, 0x00,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x12, 0x2e, 0x45, 0x08, 0x01,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x48, 0x48, 0x88, 0xc8, 0x30,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x35, 0x35, 0x31, 0x51,
++ 0x11, 0x11, 0x11, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x19, 0x35, 0x35, 0x31, 0x51,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf8, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x18, 0x34, 0x37, 0x32, 0x52,
++ 0x13, 0x12, 0x10, 0x10, 0x11, 0x12, 0x00, 0x00,
++ 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0xa0, 0xa0,
++ 0xfc, 0xa4, 0xa4, 0xb8, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x19, 0x35, 0x36, 0x30, 0x57,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x50, 0x48, 0x48, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x1b, 0x36, 0x36, 0x32, 0x57,
++ 0x10, 0x10, 0x10, 0x11, 0x12, 0x1c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xfc,
++ 0x40, 0xc0, 0xa0, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x19, 0x34, 0x34, 0x33, 0x50,
++ 0x11, 0x11, 0x12, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x20, 0x20, 0xc0, 0x48, 0x68, 0xf0, 0xe0,
++ 0x50, 0x50, 0x48, 0x44, 0x40, 0xc0, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x7f, 0x01, 0x1f, 0x01, 0x7f,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xfc,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x08, 0x0b, 0x10, 0x10, 0x37, 0x50, 0x10, 0x13,
++ 0x11, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x19, 0x35, 0x36, 0x30, 0x50,
++ 0x11, 0x17, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x10, 0xa0, 0x60, 0x60, 0x90,
++ 0xf8, 0x14, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x17, 0x10, 0x30, 0x51, 0x12, 0x14,
++ 0x11, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xe0, 0xe0, 0x50, 0x48, 0x44,
++ 0x40, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x1b, 0x34, 0x36, 0x39, 0x54,
++ 0x15, 0x16, 0x17, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x48, 0x48, 0xa8, 0xa8,
++ 0x68, 0x28, 0xe8, 0x28, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x18, 0x34, 0x35, 0x32, 0x52,
++ 0x1f, 0x12, 0x12, 0x14, 0x14, 0x19, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x88, 0x88, 0x08, 0x30, 0x10,
++ 0xfc, 0x94, 0x94, 0xa4, 0xa4, 0xcc, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x19, 0x35, 0x35, 0x31, 0x51,
++ 0x13, 0x12, 0x12, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x90, 0x50, 0x50,
++ 0x10, 0xa0, 0xa0, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x12, 0x19, 0x35, 0x34, 0x37, 0x50,
++ 0x10, 0x10, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0x48, 0x48, 0x50, 0x40, 0xfc, 0xa0,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x02, 0x04, 0x18, 0x61, 0x06,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0x50, 0xa0, 0x10, 0x0c,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x18, 0x34, 0x37, 0x30, 0x50,
++ 0x17, 0x11, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x18, 0x37, 0x36, 0x32, 0x52,
++ 0x12, 0x12, 0x12, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x80, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x19, 0x36, 0x37, 0x32, 0x53,
++ 0x12, 0x13, 0x12, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0xc8, 0x48, 0xc8,
++ 0x48, 0xc8, 0x48, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x18, 0x34, 0x37, 0x30, 0x50,
++ 0x13, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1a, 0x37, 0x36, 0x32, 0x52,
++ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xe8, 0xa8,
++ 0xa8, 0xe8, 0xa8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x01, 0x7f,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x00, 0xf0, 0x00, 0x00, 0xfc,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1a, 0x37, 0x34, 0x33, 0x52,
++ 0x13, 0x12, 0x13, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x00, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1b, 0x36, 0x37, 0x30, 0x53,
++ 0x10, 0x10, 0x17, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x35, 0x35, 0x31, 0x51,
++ 0x11, 0x17, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x10, 0xfc, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1a, 0x36, 0x37, 0x32, 0x52,
++ 0x12, 0x13, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x48, 0xe8,
++ 0xd8, 0x58, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x10, 0x3b, 0x36, 0x36, 0x53,
++ 0x12, 0x10, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0xc8, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x1a, 0x34, 0x37, 0x32, 0x53,
++ 0x12, 0x13, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x1b, 0x34, 0x34, 0x31, 0x52,
++ 0x10, 0x11, 0x12, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0x50, 0x88, 0xfc, 0xa4, 0xa0, 0x24, 0x9c,
++ 0xf0, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x1b, 0x14, 0x37, 0x32, 0x35, 0x50,
++ 0x10, 0x17, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xfc, 0x08, 0xf0, 0x20,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x1a, 0x37, 0x36, 0x32, 0x53,
++ 0x12, 0x10, 0x10, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0xe0, 0xd0, 0x54, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x34, 0x37, 0x32, 0x52,
++ 0x13, 0x12, 0x12, 0x12, 0x12, 0x11, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8, 0x48, 0x48,
++ 0xf8, 0x08, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x19, 0x35, 0x37, 0x31, 0x53,
++ 0x13, 0x15, 0x19, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x48, 0xa8, 0x28, 0x28, 0x28, 0xe8, 0x28, 0xa8,
++ 0x68, 0x68, 0x28, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x19, 0x34, 0x34, 0x31, 0x56,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0x40, 0xb0, 0x0c,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x1e, 0x10, 0x1e, 0x02, 0x7f,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0x10, 0xf0, 0x80, 0xfc,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x13, 0x18, 0x17, 0x34, 0x31, 0x36, 0x51,
++ 0x10, 0x10, 0x17, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0xf0,
++ 0x20, 0x40, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x01, 0x3f, 0x01, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf8, 0x00, 0x88, 0x24, 0xe4, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x1b, 0x34, 0x37, 0x31, 0x53,
++ 0x15, 0x11, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0xf8, 0xa0, 0xfc, 0x10, 0xf8,
++ 0x14, 0x10, 0x60, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x19, 0x35, 0x35, 0x32, 0x54,
++ 0x10, 0x17, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x10, 0x98, 0x64, 0x44,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x18, 0x34, 0x35, 0x31, 0x52,
++ 0x10, 0x17, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0xe0, 0xa0, 0xa4, 0x24, 0x1c, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x1b, 0x34, 0x37, 0x30, 0x53,
++ 0x10, 0x17, 0x11, 0x13, 0x10, 0x17, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0x80, 0xfc, 0x10, 0xe0, 0xd0, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1a, 0x36, 0x36, 0x32, 0x52,
++ 0x12, 0x12, 0x12, 0x14, 0x14, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xe8, 0x48, 0xe8, 0x48,
++ 0xe8, 0xa8, 0xa8, 0xe8, 0x88, 0x18, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x35, 0x35, 0x31, 0x57,
++ 0x11, 0x11, 0x11, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xfc,
++ 0x48, 0x28, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x13, 0x1a, 0x36, 0x37, 0x32, 0x53,
++ 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xa8, 0xc8, 0xf8, 0x48, 0xf8,
++ 0x88, 0x88, 0xe8, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x35, 0x35, 0x31, 0x50,
++ 0x13, 0x12, 0x12, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x50, 0x50, 0xb0, 0x10, 0xf0, 0x00,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1b, 0x34, 0x35, 0x30, 0x57,
++ 0x10, 0x10, 0x11, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0x00, 0xf0, 0x00, 0xfc,
++ 0x80, 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x12, 0x11, 0x24, 0x4a, 0x08, 0x11, 0x32, 0x52,
++ 0x10, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0x78, 0x00, 0x00, 0xfc, 0x10, 0x10, 0x10,
++ 0x30, 0x00, 0x88, 0x84, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x19, 0x35, 0x35, 0x31, 0x50,
++ 0x13, 0x10, 0x11, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x1f, 0x0f, 0x02, 0x7f, 0x0f, 0x14, 0x67,
++ 0x04, 0x07, 0x21, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0xe0, 0x80, 0xfc, 0xe0, 0x50, 0xcc,
++ 0x40, 0xc0, 0x08, 0x84, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x19, 0x35, 0x37, 0x31, 0x51,
++ 0x13, 0x13, 0x15, 0x19, 0x11, 0x11, 0x00, 0x00,
++ 0x50, 0x90, 0x10, 0x14, 0x34, 0xf8, 0x50, 0x90,
++ 0x50, 0x50, 0x28, 0x28, 0x44, 0x84, 0x00, 0x00,
++ 0x10, 0x12, 0x12, 0x12, 0x3b, 0x34, 0x37, 0x50,
++ 0x13, 0x12, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x80,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1b, 0x36, 0x37, 0x31, 0x51,
++ 0x13, 0x14, 0x13, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x40, 0x40,
++ 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x1a, 0x37, 0x34, 0x31, 0x51,
++ 0x11, 0x11, 0x11, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xf8, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x1a, 0x35, 0x35, 0x32, 0x50,
++ 0x10, 0x11, 0x15, 0x15, 0x19, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0xa8, 0xa8, 0x68, 0x58, 0xb0,
++ 0x80, 0x50, 0x48, 0x14, 0x14, 0xf0, 0x00, 0x00,
++ 0x10, 0x17, 0x14, 0x1c, 0x3f, 0x3c, 0x37, 0x54,
++ 0x14, 0x17, 0x13, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x08, 0x88, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0x28, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x11, 0x11, 0x12, 0x1a, 0x35, 0x35, 0x30, 0x53,
++ 0x12, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x28, 0x28, 0x50, 0x50, 0x28, 0x68, 0x80, 0xf8,
++ 0x28, 0xc8, 0x68, 0x98, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x29, 0x3f, 0x24, 0x3b,
++ 0x61, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xc8, 0x48, 0x30, 0x30, 0xc8,
++ 0x04, 0x10, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x11, 0x11, 0x12, 0x1d, 0x35, 0x35, 0x31, 0x51,
++ 0x10, 0x11, 0x16, 0x10, 0x10, 0x17, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x80, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x06, 0x38, 0x3e, 0x22, 0x3f, 0x3e, 0x3e, 0x23,
++ 0x4c, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x94, 0xfc, 0x90, 0x60, 0xb0,
++ 0x0c, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x1a, 0x35, 0x34, 0x37, 0x54,
++ 0x12, 0x12, 0x17, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x00, 0xf0, 0xb0,
++ 0xb0, 0xd0, 0xf4, 0xcc, 0xac, 0x84, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x00, 0x3f, 0x22, 0x5e,
++ 0x00, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x70, 0x50, 0x54, 0x8c, 0xf8, 0x48, 0x30, 0xd8,
++ 0x04, 0x10, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x1a, 0x37, 0x36, 0x33, 0x52,
++ 0x10, 0x11, 0x11, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xc8,
++ 0xd0, 0x50, 0x68, 0x7c, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x1f, 0x34, 0x37, 0x30, 0x57,
++ 0x10, 0x13, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x48, 0xb0, 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xfc,
++ 0xa8, 0xf8, 0xb0, 0xa8, 0xa4, 0xa0, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x17, 0x17, 0x14, 0x27, 0x24,
++ 0x59, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0xf0, 0x10, 0xf0, 0xb0,
++ 0x8c, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x18, 0x34, 0x36, 0x32, 0x52,
++ 0x12, 0x12, 0x12, 0x13, 0x11, 0x16, 0x00, 0x00,
++ 0x10, 0x64, 0x84, 0xf8, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0xfc, 0x98, 0x04, 0x00, 0x00,
++ 0x22, 0x14, 0x7f, 0x08, 0x2a, 0x2a, 0x3e, 0x09,
++ 0x13, 0x20, 0x04, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x08,
++ 0x18, 0x80, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x19, 0x36, 0x35, 0x31, 0x51,
++ 0x11, 0x11, 0x12, 0x13, 0x15, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xf0, 0x08, 0xf4, 0x10, 0xf0,
++ 0x10, 0xf0, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x1b, 0x36, 0x37, 0x32, 0x53,
++ 0x12, 0x10, 0x17, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x13, 0x08, 0x4b, 0x22, 0x23, 0x0a, 0x13, 0x22,
++ 0x22, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0xf0, 0xa0, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x48,
++ 0x58, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x1b, 0x36, 0x36, 0x33, 0x50,
++ 0x17, 0x10, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x1f, 0x34, 0x37, 0x35, 0x57,
++ 0x14, 0x13, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x24, 0xa8, 0x98, 0x90, 0x68, 0x84,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1b, 0x36, 0x37, 0x32, 0x53,
++ 0x12, 0x13, 0x14, 0x17, 0x18, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0x48, 0x68, 0xd0, 0x50, 0x4c, 0xc0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x19, 0x35, 0x36, 0x37, 0x50,
++ 0x11, 0x17, 0x10, 0x11, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0x90, 0xf8, 0x10, 0x18, 0xa4, 0xfc, 0xa0,
++ 0x50, 0xac, 0x48, 0x90, 0x60, 0x80, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x2a, 0x3e, 0x2a, 0x3e, 0x7f,
++ 0x08, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x08, 0xf0, 0x80, 0xfc, 0x90, 0x90, 0x90, 0x10,
++ 0x10, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x11, 0x3f, 0x3d, 0x37, 0x55,
++ 0x17, 0x11, 0x17, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x04, 0x38, 0xe0, 0x20, 0xe0, 0x7c, 0xe8, 0x68,
++ 0xe8, 0x28, 0xe8, 0x48, 0x48, 0x88, 0x00, 0x00,
++ 0x11, 0x11, 0x22, 0x4c, 0x0a, 0x12, 0x33, 0x54,
++ 0x18, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x10, 0x10, 0xa8, 0x44, 0x40, 0x78, 0x40, 0xc0,
++ 0x3c, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x1a, 0x35, 0x36, 0x34, 0x51,
++ 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x98, 0xa8, 0xd8, 0xa8, 0xc8, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x11, 0x11, 0x13, 0x15, 0x39, 0x35, 0x35, 0x51,
++ 0x17, 0x11, 0x13, 0x14, 0x11, 0x12, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0xfc, 0x00, 0xf8, 0xa8, 0x48, 0xb0, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x19, 0x34, 0x37, 0x33, 0x50,
++ 0x16, 0x12, 0x12, 0x12, 0x15, 0x18, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xf8, 0xa0, 0x20, 0xfc, 0x20,
++ 0xf8, 0x88, 0x88, 0xf8, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x1b, 0x36, 0x37, 0x32, 0x53,
++ 0x10, 0x17, 0x10, 0x17, 0x11, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0xfc, 0x10, 0xfc, 0x10, 0xb0, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x17, 0x39, 0x3f, 0x35, 0x57,
++ 0x15, 0x17, 0x11, 0x17, 0x11, 0x17, 0x00, 0x00,
++ 0x50, 0x90, 0x10, 0xd0, 0x3c, 0xd4, 0x54, 0xd4,
++ 0x54, 0xd4, 0x14, 0xe4, 0xe4, 0x4c, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x25, 0x3f, 0x27, 0x3a,
++ 0x23, 0x3f, 0x01, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xf0, 0x40, 0xf8, 0xe0, 0x20,
++ 0xe0, 0xf8, 0x00, 0xa8, 0x24, 0xe4, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x1b, 0x36, 0x37, 0x30, 0x53,
++ 0x10, 0x17, 0x11, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0x00, 0xf8,
++ 0x00, 0xfc, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x10, 0x17, 0x14, 0x1d, 0x3c, 0x3f, 0x34, 0x55,
++ 0x17, 0x16, 0x17, 0x1a, 0x1b, 0x12, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x58, 0x00, 0x00,
++ 0x01, 0x7f, 0x1f, 0x0f, 0x08, 0x0f, 0x04, 0x7f,
++ 0x0f, 0x08, 0x0f, 0x25, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0xe0, 0x20, 0xe0, 0x40, 0xfc,
++ 0xe0, 0x20, 0xe0, 0x08, 0xa4, 0xe4, 0x00, 0x00,
++ 0x08, 0x7f, 0x2a, 0x2a, 0x5d, 0x1c, 0x2a, 0x4b,
++ 0x01, 0x04, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x30, 0x28, 0x28, 0xfc, 0x20, 0x30, 0x48, 0x84,
++ 0x00, 0x90, 0x88, 0x24, 0x24, 0xe0, 0x00, 0x00,
++ 0x02, 0x3c, 0x09, 0x7e, 0x08, 0x3e, 0x22, 0x3e,
++ 0x20, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x88, 0x88, 0xfc, 0x88, 0xf8, 0x88, 0x88, 0xf8,
++ 0x88, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x35, 0x35, 0x30, 0x57,
++ 0x11, 0x11, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x40, 0xfc,
++ 0xf0, 0x10, 0xf0, 0x50, 0x48, 0xc8, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x1b, 0x37, 0x35, 0x31, 0x51,
++ 0x11, 0x11, 0x10, 0x12, 0x12, 0x14, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xf8,
++ 0x20, 0xfc, 0x00, 0xa8, 0x54, 0x54, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1b, 0x34, 0x37, 0x32, 0x53,
++ 0x12, 0x13, 0x10, 0x17, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0x00, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x0b, 0x10, 0x17, 0x31, 0x53, 0x1d, 0x11,
++ 0x11, 0x11, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0xa0, 0xf8, 0xa0, 0xfc, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x58, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x00, 0x23, 0x12, 0x13, 0x03, 0x0a, 0x13, 0x25,
++ 0x24, 0x09, 0x04, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xf0, 0xf0, 0x40, 0xfc, 0x54,
++ 0xac, 0x18, 0x80, 0x88, 0x24, 0xe4, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1b, 0x36, 0x37, 0x32, 0x53,
++ 0x12, 0x12, 0x12, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0x48, 0xf8,
++ 0xa8, 0x48, 0x68, 0xa8, 0x08, 0x18, 0x00, 0x00,
++ 0x12, 0x12, 0x13, 0x1e, 0x36, 0x37, 0x32, 0x52,
++ 0x12, 0x17, 0x10, 0x15, 0x14, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0xa8, 0xa8, 0xfc, 0xa8, 0xa8,
++ 0xa8, 0xfc, 0x00, 0x48, 0xa4, 0xa4, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1b, 0x34, 0x37, 0x30, 0x57,
++ 0x11, 0x17, 0x10, 0x13, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x40, 0xf8, 0x40, 0xfc,
++ 0x10, 0xfc, 0x40, 0xf8, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x1a, 0x37, 0x36, 0x33, 0x52,
++ 0x13, 0x10, 0x17, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0xe8, 0x58, 0xe8, 0xf8, 0xe8,
++ 0x58, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x12, 0x15, 0x1e, 0x14, 0x14,
++ 0x14, 0x14, 0x20, 0x2a, 0x4a, 0x11, 0x00, 0x00,
++ 0x80, 0xfc, 0x90, 0xfc, 0x90, 0xf8, 0x90, 0xf8,
++ 0x90, 0xfc, 0x80, 0x48, 0x14, 0xf4, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x1b, 0x36, 0x37, 0x30, 0x57,
++ 0x17, 0x11, 0x1f, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf8, 0xa8, 0xf8, 0x40, 0x5c,
++ 0x5c, 0xc8, 0x28, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x12, 0x13, 0x14, 0x19, 0x37, 0x3d, 0x3d, 0x57,
++ 0x15, 0x15, 0x17, 0x14, 0x18, 0x10, 0x00, 0x00,
++ 0x00, 0xbc, 0x94, 0x14, 0xe4, 0x4c, 0x68, 0xe8,
++ 0x7c, 0x48, 0xfc, 0x48, 0x48, 0xc8, 0x00, 0x00,
++ 0x14, 0x7f, 0x1c, 0x3f, 0x2a, 0x3e, 0x7f, 0x3e,
++ 0x0f, 0x71, 0x04, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x88, 0x88,
++ 0x30, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x19, 0x34, 0x37, 0x32, 0x53,
++ 0x10, 0x17, 0x10, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xb8, 0xa8, 0xb8,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x1b, 0x36, 0x36, 0x33, 0x53,
++ 0x12, 0x12, 0x14, 0x14, 0x18, 0x10, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xfc, 0xa8, 0x98, 0x70, 0xfc,
++ 0x70, 0x70, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x17, 0x7a, 0x11, 0x3f, 0x3b, 0x35, 0x59,
++ 0x13, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x10, 0xd0, 0xbc, 0x10, 0xf8, 0xb8, 0x34, 0x54,
++ 0x10, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x11, 0x11, 0x1b, 0x36,
++ 0x37, 0x52, 0x13, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x10, 0x20, 0xf8, 0x40,
++ 0xf0, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x1b, 0x36, 0x36, 0x32, 0x53,
++ 0x13, 0x10, 0x17, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf8, 0xe8, 0xa8, 0xe8, 0xf8,
++ 0xf0, 0x40, 0xfc, 0xf0, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x1b, 0x36, 0x37, 0x33, 0x50,
++ 0x17, 0x10, 0x13, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x48, 0x58, 0x58, 0x40,
++ 0xfc, 0x80, 0xf8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x11, 0x0f, 0x49, 0x21, 0x27, 0x0f, 0x15, 0x15,
++ 0x26, 0x24, 0x01, 0x24, 0x24, 0x43, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xf0, 0xfc, 0x74, 0x54, 0x54,
++ 0xec, 0x44, 0x00, 0x88, 0x24, 0xe4, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x11, 0x3f, 0x3d, 0x35, 0x57,
++ 0x13, 0x13, 0x15, 0x19, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0x3c, 0xd4, 0x14, 0xec, 0x7c, 0x64, 0xfc,
++ 0x24, 0xbc, 0x64, 0x7c, 0x28, 0x44, 0x00, 0x00,
++ 0x12, 0x12, 0x13, 0x1d, 0x38, 0x3f, 0x32, 0x56,
++ 0x12, 0x16, 0x12, 0x16, 0x13, 0x1e, 0x00, 0x00,
++ 0xa0, 0xb0, 0xe8, 0x68, 0x20, 0xfc, 0xa0, 0xe8,
++ 0xa8, 0xd0, 0xd4, 0xac, 0xcc, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x19, 0x3f, 0x32, 0x36, 0x52,
++ 0x16, 0x12, 0x16, 0x12, 0x13, 0x1e, 0x00, 0x00,
++ 0x20, 0x30, 0xe8, 0x28, 0xfc, 0xa0, 0xe8, 0xa8,
++ 0xd8, 0x90, 0xd4, 0xac, 0xcc, 0x04, 0x00, 0x00,
++ 0x10, 0x7c, 0x13, 0x38, 0x7c, 0x45, 0x7e, 0x00,
++ 0x3c, 0x24, 0x3d, 0x25, 0x1e, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa8, 0x30, 0x30, 0x48, 0xc4,
++ 0x20, 0x20, 0x48, 0x44, 0x54, 0x30, 0x00, 0x00,
++ 0x11, 0x17, 0x11, 0x1b, 0x36, 0x37, 0x31, 0x51,
++ 0x13, 0x15, 0x19, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xb8, 0xa8, 0xb8, 0x20, 0xfc,
++ 0x20, 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x1b, 0x37, 0x36, 0x33, 0x51,
++ 0x11, 0x13, 0x15, 0x19, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xb8, 0xa8, 0xb8, 0x20,
++ 0xfc, 0x20, 0xf8, 0xf8, 0x20, 0xfc, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x19, 0x35, 0x37, 0x30, 0x57,
++ 0x12, 0x13, 0x13, 0x12, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0xf0, 0xf0, 0xf8, 0x10, 0xfc,
++ 0xa8, 0xb8, 0xb8, 0xac, 0xf8, 0x88, 0x00, 0x00,
++ 0x13, 0x1f, 0x68, 0x13, 0x2b, 0x7c, 0x3b, 0x56,
++ 0x13, 0x01, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x90, 0xd8, 0x68, 0x90, 0xa8, 0x7c, 0xb8, 0xd4,
++ 0x90, 0x00, 0x88, 0xa4, 0x24, 0xe0, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x03, 0x1c, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x08, 0x08, 0xfc, 0x80, 0x88, 0x88,
++ 0x50, 0x60, 0xe4, 0x14, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x12, 0x14, 0x18, 0x61, 0x06, 0x00, 0x00,
++ 0x90, 0x88, 0x88, 0xfc, 0x80, 0x88, 0x88, 0x48,
++ 0x50, 0x30, 0x24, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x18, 0x14,
++ 0x12, 0x12, 0x10, 0x20, 0x21, 0x46, 0x00, 0x00,
++ 0x90, 0x88, 0x88, 0xfc, 0x80, 0x88, 0x88, 0x48,
++ 0x50, 0x30, 0x24, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10,
++ 0x1f, 0x10, 0x10, 0x20, 0x21, 0x46, 0x00, 0x00,
++ 0x90, 0x88, 0x88, 0xfc, 0x80, 0x88, 0x88, 0x48,
++ 0x50, 0x30, 0x24, 0x54, 0x8c, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x00, 0x00, 0x01, 0x1e, 0x01,
++ 0x7f, 0x00, 0x00, 0x00, 0x07, 0x38, 0x00, 0x00,
++ 0x20, 0x10, 0xfc, 0x90, 0x64, 0xb4, 0x2c, 0x10,
++ 0xfc, 0x90, 0x60, 0xe4, 0x1c, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x1f, 0x10, 0x1f, 0x1f, 0x10,
++ 0x1f, 0x01, 0x7f, 0x00, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0xf0, 0x10,
++ 0xf0, 0x08, 0xfc, 0xb0, 0xe4, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x0f, 0x08, 0x0f, 0x0f, 0x08,
++ 0x3f, 0x21, 0x5f, 0x00, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0xe0, 0x20,
++ 0xfc, 0x28, 0xf8, 0xa0, 0xe4, 0x1c, 0x00, 0x00,
++ 0x12, 0x12, 0x7f, 0x12, 0x1e, 0x12, 0x1e, 0x12,
++ 0x7f, 0x2a, 0x2b, 0x31, 0x20, 0x1f, 0x00, 0x00,
++ 0x28, 0x24, 0xa4, 0x3c, 0xe0, 0x28, 0x28, 0x28,
++ 0xb0, 0x10, 0x34, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x7f, 0x12, 0x1f, 0x32,
++ 0x3f, 0x52, 0x1f, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x48, 0xfc, 0x40, 0xa8, 0x28,
++ 0xb8, 0x10, 0x94, 0x2c, 0xcc, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x19, 0x2a, 0x5d, 0x2a, 0x4c, 0x16,
++ 0x69, 0x34, 0x09, 0x32, 0x0c, 0x70, 0x00, 0x00,
++ 0x30, 0xa8, 0xa8, 0xa0, 0xbc, 0xe0, 0xa8, 0x28,
++ 0x10, 0x10, 0x34, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x77, 0x55, 0x77, 0x00, 0x3e, 0x2a, 0x3e,
++ 0x2a, 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x00, 0x00,
++ 0x30, 0x28, 0x28, 0x20, 0x3c, 0xe0, 0x28, 0x28,
++ 0x18, 0x10, 0x34, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x04, 0x07, 0x3f, 0x2b, 0x3d, 0x27, 0x3f, 0x20,
++ 0x2f, 0x29, 0x2f, 0x2a, 0x27, 0x5c, 0x00, 0x00,
++ 0x30, 0x28, 0xa8, 0x20, 0x3c, 0xe0, 0x28, 0x28,
++ 0x18, 0x10, 0x34, 0x4c, 0x8c, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x19, 0x2a, 0x5d, 0x2a, 0x5a, 0x1f,
++ 0x24, 0x7f, 0x24, 0x3f, 0x24, 0x3f, 0x00, 0x00,
++ 0x30, 0xa8, 0xa8, 0xa0, 0xbc, 0xe0, 0xa8, 0xa8,
++ 0x18, 0x10, 0x14, 0x2c, 0x4c, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f,
++ 0x19, 0x19, 0x2f, 0x29, 0x49, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x14,
++ 0x18, 0x70, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
++ 0x80, 0x80, 0x84, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x7c, 0x10, 0x10, 0x13, 0x14,
++ 0x18, 0x70, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x11, 0x11, 0x15,
++ 0x19, 0x71, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x14,
++ 0x18, 0x70, 0x10, 0x10, 0x1f, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x11, 0x11, 0x10, 0x14,
++ 0x18, 0x70, 0x10, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x48, 0x28, 0x30, 0x90, 0xa0,
++ 0x60, 0x40, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x12, 0x11, 0x14,
++ 0x18, 0x70, 0x11, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
++ 0xd0, 0xb0, 0x1c, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x12, 0x12, 0x16,
++ 0x1a, 0x72, 0x12, 0x14, 0x14, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x88, 0x88, 0x88,
++ 0x88, 0xb0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7c, 0x10, 0x10, 0x13, 0x14,
++ 0x18, 0x70, 0x10, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x10, 0x17,
++ 0x18, 0x70, 0x11, 0x12, 0x14, 0x38, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf0, 0x90, 0x90, 0x90, 0xfc,
++ 0x80, 0xc0, 0x40, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x10, 0x13, 0x10, 0x14,
++ 0x18, 0x70, 0x10, 0x10, 0x13, 0x30, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0x7c, 0xc8, 0x48, 0x50,
++ 0x30, 0x20, 0x54, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x17, 0x10, 0x14,
++ 0x18, 0x70, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x60, 0x40, 0xfc, 0x48, 0x50,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x11, 0x11, 0x15,
++ 0x19, 0x71, 0x12, 0x12, 0x14, 0x38, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0x50, 0x50, 0x50, 0x48, 0x48, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x10, 0x11, 0x10, 0x14,
++ 0x18, 0x70, 0x13, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x90, 0x50, 0x50, 0x10, 0x10, 0x90, 0x90,
++ 0x1c, 0x70, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x10, 0x15,
++ 0x19, 0x71, 0x12, 0x12, 0x14, 0x39, 0x00, 0x00,
++ 0x90, 0x88, 0x88, 0xfc, 0x80, 0x90, 0x90, 0xd0,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x10, 0x14,
++ 0x18, 0x70, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x60, 0x50,
++ 0x48, 0x48, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x15,
++ 0x1a, 0x70, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x60, 0x60, 0xd0, 0x48,
++ 0x44, 0x44, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x16, 0x12, 0x12, 0x15,
++ 0x19, 0x72, 0x12, 0x1f, 0x10, 0x30, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x78, 0xa8, 0xa8, 0x28,
++ 0x28, 0xa8, 0xa8, 0xc8, 0x48, 0x98, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7f, 0x11, 0x11, 0x11, 0x15,
++ 0x19, 0x71, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x10, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x12, 0x12, 0x13, 0x16,
++ 0x1a, 0x73, 0x12, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0xf8, 0x48,
++ 0x48, 0xf8, 0x48, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x7f, 0x12, 0x12, 0x3c, 0x06, 0x19, 0x60,
++ 0x0f, 0x1f, 0x01, 0x3f, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x50, 0x20, 0xd0, 0x0c, 0xe0,
++ 0x00, 0xf0, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x70, 0x0f, 0x08, 0x0f, 0x01,
++ 0x0f, 0x1f, 0x01, 0x7f, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x80, 0xe0, 0x1c, 0xe0, 0x20, 0xe0, 0xc0,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x12, 0x13, 0x12, 0x16,
++ 0x1a, 0x72, 0x12, 0x14, 0x14, 0x38, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x20, 0xa0,
++ 0x60, 0x30, 0x28, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7f, 0x12, 0x12, 0x13, 0x16,
++ 0x1a, 0x72, 0x12, 0x14, 0x14, 0x38, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xfc, 0xa4, 0x9c, 0x70, 0xf8,
++ 0x70, 0x70, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x14,
++ 0x1b, 0x72, 0x12, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x7c, 0x40, 0x40, 0x40,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x02, 0x05, 0x38, 0x08, 0x08, 0x3e, 0x08, 0x08,
++ 0x0e, 0x79, 0x08, 0x10, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x12, 0x11, 0x10, 0x14,
++ 0x1b, 0x70, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0x50, 0x48, 0x48, 0xf0, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x13, 0x12, 0x16, 0x16,
++ 0x1a, 0x72, 0x12, 0x12, 0x12, 0x32, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10, 0x90, 0x50,
++ 0x50, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x13, 0x12, 0x16,
++ 0x1b, 0x70, 0x10, 0x10, 0x11, 0x32, 0x00, 0x00,
++ 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0xa0, 0xa0,
++ 0xfc, 0xa4, 0xa4, 0xb8, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x17, 0x16,
++ 0x1a, 0x72, 0x12, 0x13, 0x12, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x48, 0x28, 0x28, 0xfc, 0x08,
++ 0x88, 0x48, 0x48, 0xfc, 0x08, 0x30, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x7e, 0x17, 0x12, 0x12, 0x16,
++ 0x1a, 0x72, 0x12, 0x14, 0x14, 0x38, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x78, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xc8, 0x98, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x12, 0x11, 0x15,
++ 0x18, 0x70, 0x10, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x10, 0x10, 0x10, 0x10,
++ 0xa0, 0xa0, 0xa0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x13, 0x14, 0x10, 0x14,
++ 0x19, 0x77, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x10, 0x20, 0xa0, 0x40, 0xa0,
++ 0xf8, 0x14, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x10, 0x11, 0x14,
++ 0x19, 0x71, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x17, 0x11, 0x11, 0x15,
++ 0x19, 0x77, 0x11, 0x11, 0x12, 0x34, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0x20,
++ 0x20, 0xfc, 0x20, 0x10, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7d, 0x11, 0x12, 0x14, 0x15,
++ 0x19, 0x72, 0x14, 0x10, 0x10, 0x31, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x98, 0x98, 0xa8, 0xc8, 0x98,
++ 0x98, 0xa8, 0xc8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x17, 0x10, 0x14,
++ 0x1b, 0x70, 0x10, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x0a, 0x0d, 0x3a, 0x0c, 0x3a, 0x0c, 0x39, 0x00,
++ 0x0f, 0x1f, 0x01, 0x7f, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x88, 0x30, 0xe0,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x7c, 0x13, 0x10, 0x10, 0x15,
++ 0x19, 0x72, 0x14, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x20, 0x40, 0xc8, 0xe8, 0xf0, 0x50,
++ 0x50, 0x48, 0x44, 0xc0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x11, 0x11, 0x12, 0x16,
++ 0x1a, 0x73, 0x12, 0x12, 0x12, 0x32, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x00, 0xf8, 0x08, 0x10,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x13, 0x10, 0x13, 0x16,
++ 0x1b, 0x72, 0x13, 0x12, 0x12, 0x32, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x00, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x11, 0x11, 0x11, 0x16,
++ 0x1a, 0x70, 0x10, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x50, 0x50, 0x58, 0xe4,
++ 0x44, 0x60, 0xa0, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x10, 0x17,
++ 0x18, 0x70, 0x17, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x11, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x13, 0x10,
++ 0x1f, 0x71, 0x10, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0x40, 0x58, 0x48, 0x58, 0x48, 0x48, 0xf8, 0x40,
++ 0xf8, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x12, 0x10,
++ 0x18, 0x73, 0x10, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x40,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7d, 0x11, 0x11, 0x12, 0x16,
++ 0x1a, 0x72, 0x12, 0x12, 0x12, 0x33, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x20, 0x20, 0x38, 0x48, 0x68,
++ 0x98, 0x50, 0x30, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x11, 0x13, 0x14,
++ 0x19, 0x71, 0x11, 0x11, 0x11, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x90, 0x10, 0xfc, 0x08,
++ 0xe8, 0x28, 0x28, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x11, 0x16, 0x7c, 0x14, 0x17, 0x15, 0x15,
++ 0x1d, 0x75, 0x15, 0x19, 0x19, 0x31, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0x40, 0x7c, 0xa4, 0xa8, 0x20,
++ 0x20, 0x30, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x17, 0x12, 0x7e, 0x13, 0x12, 0x12, 0x17,
++ 0x1a, 0x72, 0x13, 0x16, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0xc8, 0xc8, 0xa8,
++ 0xb0, 0x90, 0xb0, 0xc8, 0x88, 0x84, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x11, 0x11, 0x17, 0x11,
++ 0x19, 0x73, 0x10, 0x10, 0x17, 0x30, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xf8, 0x50, 0x50, 0xfc, 0x50,
++ 0x50, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x28, 0x3e, 0x48, 0x7f, 0x08, 0x3e, 0x2a, 0x2e,
++ 0x07, 0x1f, 0x01, 0x7f, 0x01, 0x03, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x08, 0xd8,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7e, 0x15, 0x11, 0x12, 0x17,
++ 0x18, 0x72, 0x12, 0x13, 0x12, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0x08, 0xe8, 0x88, 0xe8,
++ 0x88, 0xa8, 0xa8, 0xe8, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x13, 0x12, 0x13, 0x16,
++ 0x1b, 0x70, 0x17, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x40, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x14, 0x17, 0x10, 0x16,
++ 0x1a, 0x72, 0x12, 0x13, 0x14, 0x38, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x00, 0xfc, 0x40, 0x40,
++ 0x78, 0x40, 0x40, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x13, 0x14, 0x13, 0x16,
++ 0x1a, 0x72, 0x13, 0x12, 0x10, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xb8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x30, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x12, 0x16,
++ 0x1a, 0x72, 0x12, 0x12, 0x12, 0x32, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x12, 0x13, 0x12, 0x1e,
++ 0x73, 0x12, 0x14, 0x14, 0x1b, 0x3c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x48, 0x40,
++ 0xfc, 0x40, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x10, 0x17, 0x10, 0x14,
++ 0x1b, 0x70, 0x13, 0x10, 0x13, 0x30, 0x00, 0x00,
++ 0x80, 0xf0, 0x90, 0xe0, 0x20, 0xfc, 0x40, 0xe8,
++ 0x68, 0xb0, 0x70, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x11, 0x11, 0x16, 0x10,
++ 0x19, 0x71, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x20, 0x24, 0xf8, 0x20, 0x20, 0xe4, 0x5c, 0x80,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7c, 0x13, 0x13, 0x12, 0x16,
++ 0x1b, 0x70, 0x11, 0x12, 0x14, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x58, 0xd8, 0xe8,
++ 0xf8, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x11, 0x10, 0x12, 0x7d, 0x11, 0x12, 0x11, 0x14,
++ 0x18, 0x73, 0x10, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0xd0, 0x54, 0xa4, 0xa8, 0x10, 0x08, 0xf4, 0x40,
++ 0x40, 0xf8, 0xa0, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x12, 0x12, 0x7e, 0x13, 0x10, 0x17, 0x10,
++ 0x1b, 0x72, 0x12, 0x12, 0x12, 0x32, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x40,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x17, 0x10, 0x13, 0x14,
++ 0x18, 0x77, 0x10, 0x11, 0x16, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0xa0, 0x40, 0xfc, 0xc8, 0x50, 0xc0,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x17, 0x11, 0x12,
++ 0x1a, 0x73, 0x12, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0xfc, 0x40, 0x58,
++ 0x48, 0x58, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x17, 0x12, 0x7e, 0x13, 0x12, 0x12, 0x17,
++ 0x1a, 0x72, 0x13, 0x16, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xb0, 0xb0, 0xa8, 0xa8,
++ 0xa4, 0xa4, 0xa4, 0xb8, 0xa0, 0xa0, 0x00, 0x00,
++ 0x11, 0x10, 0x10, 0x7d, 0x13, 0x14, 0x17, 0x14,
++ 0x1e, 0x75, 0x16, 0x15, 0x14, 0x35, 0x00, 0x00,
++ 0xc0, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xa8, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x11, 0x11, 0x17, 0x12,
++ 0x1f, 0x30, 0x52, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x80, 0xf0, 0x90, 0x60, 0x40, 0x80, 0xf8, 0x40,
++ 0xfc, 0x40, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x3f, 0x22, 0x5f, 0x0f, 0x02, 0x3f, 0x08,
++ 0x17, 0x6f, 0x01, 0x3f, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0xf0, 0xe0, 0x80, 0xf8, 0xe0,
++ 0x10, 0xec, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x10, 0x17, 0x10, 0x17,
++ 0x1a, 0x77, 0x12, 0x17, 0x12, 0x32, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa0, 0xfc, 0x40, 0xf8,
++ 0x48, 0xfc, 0x48, 0xfc, 0x08, 0x18, 0x00, 0x00,
++ 0x11, 0x10, 0x13, 0x7c, 0x11, 0x10, 0x17, 0x11,
++ 0x19, 0x72, 0x14, 0x18, 0x17, 0x30, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x13, 0x12, 0x12, 0x17,
++ 0x19, 0x72, 0x15, 0x12, 0x14, 0x33, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xb8, 0x20, 0x20, 0xb8,
++ 0x98, 0xa8, 0xd8, 0xa8, 0xc8, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x12, 0x15, 0x11, 0x15,
++ 0x19, 0x71, 0x11, 0x13, 0x15, 0x31, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xf0, 0x08, 0xf4, 0x10, 0xf0,
++ 0x10, 0xf0, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x7d, 0x11, 0x17, 0x10, 0x17,
++ 0x1a, 0x73, 0x13, 0x12, 0x17, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0xf0, 0xf0, 0xfc, 0x10, 0xfc,
++ 0xa8, 0xb8, 0xb8, 0xac, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x11, 0x11, 0x15,
++ 0x19, 0x71, 0x11, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00,
++ 0xfc, 0x00, 0xfc, 0xa4, 0xe4, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x10, 0x17,
++ 0x19, 0x72, 0x15, 0x12, 0x14, 0x31, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x98, 0xa8, 0xd8, 0xa8, 0xc8, 0x98, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x12, 0x13, 0x12, 0x17,
++ 0x1a, 0x70, 0x17, 0x11, 0x10, 0x30, 0x00, 0x00,
++ 0x50, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x10, 0x12, 0x12, 0x7f, 0x12, 0x10, 0x11, 0x15,
++ 0x1b, 0x75, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x98, 0xa0, 0xfc, 0x20,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x3e, 0x08, 0x7f, 0x14, 0x7f, 0x3f, 0x08,
++ 0x07, 0x1f, 0x01, 0x7f, 0x01, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0xd4, 0xb4, 0x0c, 0x60,
++ 0x80, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x12, 0x13, 0x12, 0x17,
++ 0x18, 0x73, 0x10, 0x17, 0x11, 0x30, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x50, 0xf8, 0x10, 0xfc, 0x10, 0xb0, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x7a, 0x15, 0x12, 0x14, 0x11,
++ 0x1e, 0x71, 0x10, 0x11, 0x10, 0x33, 0x00, 0x00,
++ 0x00, 0xf8, 0x98, 0xa8, 0xd8, 0xa8, 0xc8, 0x20,
++ 0x50, 0xac, 0x48, 0x90, 0x60, 0x80, 0x00, 0x00,
++ 0x11, 0x12, 0x13, 0x7f, 0x12, 0x17, 0x15, 0x1d,
++ 0x71, 0x11, 0x11, 0x11, 0x11, 0x36, 0x00, 0x00,
++ 0xb8, 0x68, 0xb8, 0x78, 0xa8, 0xfc, 0xf8, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0xa4, 0x3c, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x7f, 0x12, 0x13, 0x12, 0x17,
++ 0x1a, 0x77, 0x13, 0x12, 0x14, 0x38, 0x00, 0x00,
++ 0x84, 0x88, 0xb0, 0xe0, 0xa0, 0xbc, 0xa8, 0xa8,
++ 0xa8, 0xe8, 0x28, 0xc8, 0x48, 0x88, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x11, 0x17, 0x11, 0x11,
++ 0x1e, 0x73, 0x10, 0x10, 0x11, 0x36, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xfc, 0x10, 0xfc,
++ 0x00, 0xf8, 0xa0, 0xa0, 0x24, 0x1c, 0x00, 0x00,
++ 0x11, 0x12, 0x11, 0x7d, 0x12, 0x17, 0x11, 0x17,
++ 0x1c, 0x77, 0x15, 0x11, 0x11, 0x36, 0x00, 0x00,
++ 0xd0, 0x54, 0xa4, 0x18, 0x08, 0x74, 0x50, 0x54,
++ 0x8c, 0xf8, 0x48, 0x30, 0x28, 0xc4, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x13, 0x17, 0x11, 0x15,
++ 0x19, 0x71, 0x11, 0x12, 0x14, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa4, 0x18, 0xf8, 0x14, 0xf0,
++ 0x10, 0xf0, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x11, 0x15, 0x13, 0x79, 0x12, 0x14, 0x13, 0x12,
++ 0x1c, 0x73, 0x10, 0x10, 0x11, 0x32, 0x00, 0x00,
++ 0x10, 0x54, 0xb4, 0x18, 0xa8, 0x44, 0xfc, 0x48,
++ 0x40, 0xf8, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x13, 0x12, 0x13, 0x17,
++ 0x1b, 0x74, 0x12, 0x12, 0x14, 0x30, 0x00, 0x00,
++ 0x28, 0x24, 0xfc, 0x20, 0xe8, 0x28, 0xd0, 0x54,
++ 0xec, 0x44, 0xa8, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x13, 0x12, 0x13, 0x16,
++ 0x1b, 0x72, 0x13, 0x14, 0x15, 0x38, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0x78, 0xc8, 0x38, 0xfc, 0x68,
++ 0xb8, 0x70, 0xb8, 0x58, 0x94, 0x60, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7f, 0x12, 0x12, 0x13, 0x17,
++ 0x18, 0x77, 0x14, 0x15, 0x14, 0x34, 0x00, 0x00,
++ 0x40, 0xa0, 0x58, 0xfc, 0xa8, 0x68, 0x98, 0xf8,
++ 0x40, 0xfc, 0xa4, 0xf4, 0x14, 0x0c, 0x00, 0x00,
++ 0x10, 0x17, 0x13, 0x7e, 0x12, 0x12, 0x13, 0x15,
++ 0x19, 0x71, 0x11, 0x11, 0x17, 0x30, 0x00, 0x00,
++ 0x40, 0xfc, 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x10, 0x13, 0x10, 0x17,
++ 0x19, 0x77, 0x10, 0x13, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x40, 0xf8, 0x40, 0xfc,
++ 0x10, 0xfc, 0x40, 0xf8, 0x40, 0x40, 0x00, 0x00,
++ 0x14, 0x12, 0x12, 0x79, 0x14, 0x12, 0x13, 0x10,
++ 0x1e, 0x72, 0x13, 0x12, 0x15, 0x38, 0x00, 0x00,
++ 0x20, 0xf8, 0x20, 0xfc, 0x88, 0x50, 0xfc, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0xfc, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3f, 0x20, 0x3e, 0x52, 0x1e,
++ 0x07, 0x1f, 0x01, 0x7f, 0x01, 0x03, 0x00, 0x00,
++ 0x20, 0xf8, 0x50, 0xfc, 0x20, 0xf8, 0x20, 0xe0,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x12, 0x17, 0x13, 0x10,
++ 0x1b, 0x72, 0x13, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x48, 0x58, 0x58, 0x40,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x12, 0x16,
++ 0x1b, 0x72, 0x13, 0x12, 0x12, 0x32, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0x88, 0xe8,
++ 0xa8, 0x48, 0xf8, 0xa8, 0xe8, 0x18, 0x00, 0x00,
++ 0x0a, 0x13, 0x1a, 0x13, 0x18, 0x12, 0x7f, 0x08,
++ 0x17, 0x6f, 0x01, 0x3f, 0x01, 0x03, 0x00, 0x00,
++ 0x30, 0x90, 0x30, 0x90, 0xb0, 0x90, 0xfc, 0xe0,
++ 0x10, 0xec, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x06, 0x1b, 0x12, 0x1b, 0x12, 0x1a, 0x12, 0x7f,
++ 0x09, 0x17, 0x61, 0x1f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xb0, 0x10, 0xb0, 0x90, 0xb0, 0x90, 0xfc,
++ 0x20, 0xd0, 0x0c, 0xf0, 0x00, 0x00, 0x00, 0x00,
++ 0x20, 0x2f, 0x21, 0x7e, 0x2a, 0x2a, 0x36, 0x22,
++ 0x33, 0x62, 0x23, 0x22, 0x24, 0x68, 0x00, 0x00,
++ 0x80, 0xfc, 0x48, 0xb8, 0xa8, 0xa8, 0xb4, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x11, 0x11, 0x11, 0x17,
++ 0x1d, 0x70, 0x11, 0x10, 0x11, 0x37, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xf0, 0x10, 0xf0, 0xfc,
++ 0xf8, 0x90, 0xf8, 0x40, 0xf0, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x10, 0x11, 0x17, 0x14,
++ 0x19, 0x71, 0x11, 0x11, 0x11, 0x31, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x90, 0x88, 0x1c, 0xe4, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7d, 0x10, 0x17, 0x11, 0x14,
++ 0x19, 0x77, 0x13, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x00, 0xfc, 0xe8, 0x40,
++ 0xf0, 0xfc, 0x88, 0xfc, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x14, 0x11, 0x17,
++ 0x19, 0x71, 0x11, 0x11, 0x11, 0x36, 0x00, 0x00,
++ 0x40, 0xfc, 0x08, 0xf8, 0x58, 0xe4, 0xf4, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x20, 0x2f, 0x2a, 0x7f, 0x2f, 0x2a, 0x2f, 0x2b,
++ 0x32, 0x63, 0x23, 0x23, 0x21, 0x6e, 0x00, 0x00,
++ 0x40, 0xfc, 0x80, 0x78, 0xfc, 0xb4, 0xfc, 0xf0,
++ 0x10, 0xf0, 0xf0, 0xf4, 0xa4, 0x1c, 0x00, 0x00,
++ 0x14, 0x17, 0x15, 0x79, 0x10, 0x17, 0x10, 0x17,
++ 0x1c, 0x77, 0x14, 0x17, 0x14, 0x35, 0x00, 0x00,
++ 0x20, 0xfc, 0x50, 0x18, 0xa0, 0xfc, 0x00, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0x88, 0x98, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x13, 0x12, 0x16,
++ 0x1a, 0x72, 0x12, 0x14, 0x14, 0x3b, 0x00, 0x00,
++ 0x40, 0xfc, 0x90, 0xfc, 0xf0, 0xfc, 0x20, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x24, 0x27, 0x2b, 0x7f, 0x2b, 0x2d, 0x2f, 0x28,
++ 0x3f, 0x62, 0x2f, 0x23, 0x24, 0x68, 0x00, 0x00,
++ 0x80, 0xf8, 0x68, 0xe8, 0x70, 0xf0, 0xe8, 0x68,
++ 0xe4, 0x24, 0xe4, 0x38, 0xa0, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x14, 0x1f, 0x10,
++ 0x1f, 0x74, 0x17, 0x17, 0x14, 0x35, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x20, 0xa8, 0xf0, 0x64,
++ 0x9c, 0xa0, 0xa8, 0xb0, 0xa4, 0x9c, 0x00, 0x00,
++ 0x10, 0x13, 0x7d, 0x1a, 0x36, 0x51, 0x13, 0x7f,
++ 0x05, 0x1f, 0x6f, 0x3f, 0x01, 0x03, 0x00, 0x00,
++ 0x90, 0x90, 0x7c, 0xb0, 0xd8, 0x94, 0x50, 0xfc,
++ 0xc0, 0x30, 0xec, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x12, 0x12, 0x15, 0x7d, 0x12, 0x13, 0x15, 0x17,
++ 0x18, 0x77, 0x10, 0x11, 0x16, 0x30, 0x00, 0x00,
++ 0x48, 0x48, 0xf4, 0xb4, 0xe8, 0xac, 0xb4, 0xfc,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x17, 0x13, 0x7a, 0x13, 0x10, 0x13, 0x11,
++ 0x18, 0x77, 0x10, 0x17, 0x11, 0x33, 0x00, 0x00,
++ 0x40, 0xfc, 0xb8, 0xa8, 0xb8, 0xa0, 0xf8, 0xf0,
++ 0xa0, 0xfc, 0xc8, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x12, 0x13, 0x11, 0x7f, 0x12, 0x17, 0x13, 0x12,
++ 0x1b, 0x77, 0x15, 0x17, 0x15, 0x35, 0x00, 0x00,
++ 0x48, 0xf8, 0x20, 0xf8, 0x40, 0xf0, 0xf0, 0x40,
++ 0xf8, 0xf8, 0x58, 0xf8, 0x48, 0xd8, 0x00, 0x00,
++ 0x11, 0x17, 0x11, 0x7f, 0x11, 0x12, 0x15, 0x1d,
++ 0x71, 0x11, 0x11, 0x11, 0x11, 0x36, 0x00, 0x00,
++ 0x20, 0xf8, 0x20, 0xfc, 0xb0, 0x48, 0xf4, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x25, 0x2f, 0x25, 0x7f, 0x2f, 0x2a, 0x2f, 0x22,
++ 0x3f, 0x62, 0x2f, 0x23, 0x24, 0x68, 0x00, 0x00,
++ 0x28, 0xa8, 0x28, 0x7c, 0xd0, 0xd0, 0xfc, 0x50,
++ 0xd0, 0x7c, 0xd0, 0x50, 0xfc, 0x40, 0x00, 0x00,
++ 0x13, 0x6f, 0x2b, 0x17, 0x7c, 0x3b, 0x56, 0x13,
++ 0x0f, 0x1f, 0x01, 0x7f, 0x01, 0x03, 0x00, 0x00,
++ 0x90, 0xe8, 0xa8, 0x94, 0x7c, 0xb8, 0xd4, 0xe0,
++ 0x80, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x13, 0x12, 0x13, 0x7f, 0x13, 0x11, 0x13, 0x16,
++ 0x1a, 0x73, 0x13, 0x10, 0x10, 0x37, 0x00, 0x00,
++ 0xb8, 0xa8, 0xb8, 0xb8, 0xb8, 0x20, 0xfc, 0xf0,
++ 0xf0, 0xfc, 0xf0, 0xa0, 0xe0, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x3f, 0x04, 0x02,
++ 0x02, 0x01, 0x00, 0x03, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0x20,
++ 0x20, 0x40, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x0f, 0x0c, 0x14, 0x22,
++ 0x02, 0x01, 0x01, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x20, 0x20, 0x40,
++ 0x40, 0x80, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x10, 0x11, 0x1d, 0x26, 0x24,
++ 0x04, 0x04, 0x04, 0x08, 0x08, 0x33, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x24, 0x25, 0x25, 0x26, 0x24, 0x24,
++ 0x26, 0x3c, 0x64, 0x04, 0x05, 0x06, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0c, 0x14, 0x15, 0x35, 0x56, 0x14,
++ 0x14, 0x14, 0x14, 0x14, 0x10, 0x13, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x54, 0x55, 0x55, 0x7e, 0x54,
++ 0x54, 0x54, 0x7c, 0x44, 0x01, 0x06, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x10, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x14, 0x12, 0x26, 0x65, 0x14,
++ 0x0c, 0x0c, 0x0a, 0x12, 0x20, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x90, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x7f,
++ 0x08, 0x0e, 0x12, 0x12, 0x22, 0x4d, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x90, 0x90, 0x50, 0x50,
++ 0x60, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2b, 0x2a, 0x3e,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x0b, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x90, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x3e, 0x49, 0x08, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x1b, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x40, 0x40, 0xf8, 0x88, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x3e, 0x49, 0x0a, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x1b, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x90, 0x90, 0x90, 0x50,
++ 0x60, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x2a, 0x29, 0x49, 0x08, 0x7f, 0x41, 0x5d,
++ 0x55, 0x55, 0x5d, 0x55, 0x41, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0xc8, 0xc8, 0x48, 0x48,
++ 0x30, 0x30, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x2a, 0x29, 0x49, 0x08, 0x7f, 0x49, 0x6b,
++ 0x6b, 0x6b, 0x6b, 0x49, 0x49, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0xc8, 0xc8, 0x48, 0x48,
++ 0x30, 0x30, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x00, 0x3e, 0x22, 0x3e, 0x00,
++ 0x7f, 0x41, 0x5d, 0x55, 0x5d, 0x43, 0x00, 0x00,
++ 0x20, 0x20, 0x3c, 0x20, 0x20, 0xf8, 0x48, 0x48,
++ 0x28, 0x30, 0x10, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x04, 0x3f, 0x25, 0x7f, 0x25, 0x3f, 0x3f, 0x25,
++ 0x3f, 0x08, 0x7f, 0x12, 0x1e, 0x71, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x48, 0xc8, 0x48, 0x50,
++ 0x30, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x3f, 0x40, 0x77, 0x55,
++ 0x77, 0x12, 0x12, 0x2d, 0x25, 0x49, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0xc8, 0xc8, 0x28, 0x28,
++ 0x30, 0x10, 0x30, 0x48, 0x88, 0x04, 0x00, 0x00,
++ 0x49, 0x2a, 0x7f, 0x49, 0x5d, 0x6b, 0x4b, 0x00,
++ 0x7f, 0x08, 0x1e, 0x72, 0x0c, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0x7c, 0xc8, 0x30, 0x30, 0xcc, 0x00,
++ 0xfc, 0x88, 0xb0, 0xc4, 0x84, 0x7c, 0x00, 0x00,
++ 0x13, 0x1f, 0x68, 0x13, 0x2b, 0x7f, 0x3a, 0x57,
++ 0x12, 0x07, 0x3c, 0x03, 0x0e, 0x70, 0x00, 0x00,
++ 0x90, 0xd8, 0x68, 0x90, 0xa8, 0xfc, 0xb8, 0xd4,
++ 0x10, 0xf8, 0x40, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x10, 0x1e, 0x24, 0x7e, 0x2a, 0x2a, 0x3e, 0x2a,
++ 0x2a, 0x3e, 0x23, 0x22, 0x22, 0x46, 0x00, 0x00,
++ 0x10, 0x90, 0x50, 0x50, 0x10, 0x90, 0x50, 0x50,
++ 0x1c, 0x70, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x12, 0x12, 0x7f, 0x12, 0x1e, 0x12, 0x1e, 0x12,
++ 0x7f, 0x2a, 0x2b, 0x33, 0x20, 0x1f, 0x00, 0x00,
++ 0x10, 0x90, 0x50, 0x50, 0x10, 0x90, 0x50, 0x50,
++ 0x1c, 0x70, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x08, 0x08, 0x10, 0x1e, 0x32,
++ 0x32, 0x52, 0x13, 0x1f, 0x12, 0x10, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x12, 0x5b, 0x6d, 0x52, 0x6d, 0x7f, 0x7f, 0x5b,
++ 0x6d, 0x52, 0x6d, 0x7f, 0x7f, 0x40, 0x00, 0x00,
++ 0x08, 0x70, 0x40, 0x40, 0x40, 0x7c, 0x50, 0x50,
++ 0x50, 0x50, 0x90, 0x90, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x11, 0x12, 0x1c, 0x14,
++ 0x14, 0x15, 0x24, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x00, 0xf8, 0xa8, 0xa8,
++ 0xa8, 0xfc, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x12, 0x13, 0x1c, 0x14,
++ 0x14, 0x14, 0x24, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0x20, 0xfc, 0x20, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xb8, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x04, 0x02, 0x3f, 0x21, 0x41,
++ 0x3f, 0x01, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x40, 0x80, 0xfc, 0x08, 0x00,
++ 0xf8, 0x00, 0xf0, 0x10, 0x10, 0xe0, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x13, 0x10, 0x1c, 0x15,
++ 0x14, 0x14, 0x27, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0xe0, 0x40, 0x78, 0xc0,
++ 0x40, 0x7c, 0xc0, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x11, 0x12, 0x1c, 0x14,
++ 0x15, 0x14, 0x24, 0x24, 0x45, 0x18, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xa0, 0xa0, 0xf8, 0xa0,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x13, 0x10, 0x1c, 0x17,
++ 0x14, 0x15, 0x25, 0x25, 0x45, 0x1a, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0xfc, 0x50, 0x98, 0xe8,
++ 0x10, 0x50, 0x50, 0x54, 0x54, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x10, 0x11, 0x1c, 0x14,
++ 0x17, 0x14, 0x24, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x80, 0xfc, 0x18, 0xe8, 0xb0, 0xfc, 0x70, 0xa8,
++ 0xfc, 0xa8, 0xf8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7c, 0x13, 0x10, 0x1c, 0x17,
++ 0x14, 0x14, 0x24, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x18, 0xe8, 0x28, 0xb0, 0xfc, 0x70, 0xa8, 0x24,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x01, 0x01, 0x7f, 0x01,
++ 0x01, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x21, 0x21, 0x21, 0x3f, 0x21,
++ 0x01, 0x02, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x80,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x00, 0x3f,
++ 0x01, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x00, 0x7f,
++ 0x01, 0x3f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x00, 0x1f,
++ 0x10, 0x10, 0x11, 0x21, 0x26, 0x58, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x80, 0x80, 0xc0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x01, 0x7f,
++ 0x04, 0x04, 0x02, 0x03, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x40, 0x40, 0x80, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x61, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0xe0,
++ 0x20, 0xe0, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4a, 0x4b, 0x4a, 0x7a, 0x4a,
++ 0x4a, 0x4a, 0x7a, 0x4c, 0x44, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x80, 0x88,
++ 0x90, 0xe0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x7e, 0x00, 0x3c, 0x05, 0x05, 0x7e, 0x0e,
++ 0x0d, 0x15, 0x14, 0x24, 0x44, 0x0c, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x78, 0x48, 0x48, 0x48,
++ 0x78, 0x48, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x02, 0x3c,
++ 0x22, 0x22, 0x2e, 0x72, 0x04, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x00, 0x7f,
++ 0x08, 0x0f, 0x12, 0x22, 0x04, 0x09, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x00, 0xfc,
++ 0x00, 0xf8, 0x48, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x01, 0x3f,
++ 0x22, 0x7f, 0x04, 0x0f, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x08, 0xf8, 0x40, 0x80, 0x60, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x7a, 0x49, 0x49, 0x48, 0x7f, 0x48,
++ 0x48, 0x48, 0x79, 0x49, 0x02, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0x48, 0x48, 0x50, 0x40, 0xfc, 0xa0,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x08, 0x14, 0x3e, 0x02, 0x7f, 0x00,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x50, 0xf8, 0x08, 0xfc, 0x00,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x02, 0x12,
++ 0x0a, 0x0a, 0x1c, 0x64, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x90, 0x90,
++ 0xe0, 0xa0, 0x90, 0x94, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x01, 0x78, 0x4b, 0x48, 0x4f, 0x79, 0x4b,
++ 0x4e, 0x4a, 0x7a, 0x4a, 0x02, 0x00, 0x00, 0x00,
++ 0x08, 0xd0, 0x70, 0x88, 0x80, 0xfc, 0x40, 0xf8,
++ 0x48, 0x48, 0x48, 0x48, 0x70, 0x40, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x7f, 0x1f, 0x0f, 0x01, 0x3f,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x7f, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xfc, 0xf0, 0xe0, 0x00, 0xf8,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x48, 0x4b, 0x48, 0x78, 0x4f,
++ 0x48, 0x49, 0x79, 0x49, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf0, 0x90, 0x90, 0xfc,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x4a, 0x4c, 0x7f, 0x48,
++ 0x4b, 0x4a, 0x7a, 0x4a, 0x03, 0x02, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x3f, 0x20,
++ 0x2f, 0x20, 0x3f, 0x24, 0x26, 0x5c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xf8, 0x00,
++ 0xf0, 0x00, 0xfc, 0x90, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x00, 0x3f,
++ 0x20, 0x3e, 0x24, 0x24, 0x38, 0x43, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x88, 0xfc,
++ 0x80, 0x48, 0x50, 0x24, 0xd4, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x0e, 0x78, 0x09, 0x1a,
++ 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0xfc, 0x90, 0x90, 0x10, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x4f, 0x49, 0x49, 0x7b, 0x4b,
++ 0x4b, 0x4d, 0x7d, 0x49, 0x01, 0x01, 0x00, 0x00,
++ 0x04, 0x08, 0x30, 0xe0, 0x20, 0xbc, 0x68, 0x68,
++ 0x28, 0x28, 0x48, 0x48, 0x88, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x02, 0x7e,
++ 0x02, 0x3e, 0x02, 0x0e, 0x74, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x80, 0xfc,
++ 0x80, 0xf8, 0x80, 0xfc, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x0f, 0x3f, 0x21, 0x7f,
++ 0x0f, 0x0f, 0x09, 0x0f, 0x7f, 0x01, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0xe0, 0xfc, 0x08, 0xf8,
++ 0xe0, 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x49, 0x48, 0x4b, 0x7a, 0x4a,
++ 0x4a, 0x4f, 0x78, 0x48, 0x03, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x50, 0x40, 0xf8, 0x48, 0x48,
++ 0x48, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4f, 0x48, 0x4b, 0x7a, 0x4b,
++ 0x4a, 0x4b, 0x78, 0x4f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4f, 0x48, 0x79, 0x49,
++ 0x49, 0x49, 0x79, 0x48, 0x07, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xf8, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x49, 0x49, 0x49, 0x78, 0x4f,
++ 0x49, 0x4b, 0x7c, 0x49, 0x02, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0x28, 0x48, 0xb0, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4d, 0x49, 0x49, 0x79, 0x49,
++ 0x48, 0x4f, 0x78, 0x48, 0x01, 0x06, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x40, 0xfc, 0x00, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x3e, 0x22, 0x3f, 0x3e, 0x26, 0x39, 0x1f,
++ 0x04, 0x07, 0x04, 0x07, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0xfc, 0x30, 0xd4, 0x0c, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x23, 0x13, 0x11, 0x01, 0x73,
++ 0x15, 0x11, 0x11, 0x19, 0x27, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0xf8, 0x10, 0xfc, 0x20,
++ 0xf8, 0xf8, 0x20, 0xfc, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x4f, 0x49, 0x4f, 0x79, 0x49,
++ 0x4e, 0x4b, 0x78, 0x40, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xbc, 0x10, 0xbc,
++ 0x00, 0xf8, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x48, 0x4b, 0x4a, 0x7b, 0x48,
++ 0x4f, 0x48, 0x79, 0x4f, 0x01, 0x03, 0x00, 0x00,
++ 0x20, 0x20, 0xe0, 0x3c, 0xc8, 0xe8, 0xa8, 0x28,
++ 0xf0, 0x90, 0x98, 0x28, 0x44, 0x84, 0x00, 0x00,
++ 0x08, 0x2a, 0x49, 0x7f, 0x49, 0x5d, 0x6b, 0x49,
++ 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xc8, 0x48, 0x30, 0x30, 0xc8,
++ 0xf4, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x07, 0x79, 0x4b, 0x49, 0x49, 0x7f, 0x49,
++ 0x49, 0x4b, 0x78, 0x4f, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xf8, 0x50, 0x50, 0xfc, 0x50,
++ 0x50, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x07, 0x7a, 0x49, 0x4b, 0x4d, 0x79, 0x49,
++ 0x49, 0x49, 0x79, 0x42, 0x04, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x48, 0xb0, 0x18, 0xf4, 0x10, 0xf0,
++ 0x10, 0xf0, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x49, 0x4b, 0x4a, 0x7d, 0x49,
++ 0x4a, 0x48, 0x7b, 0x48, 0x00, 0x07, 0x00, 0x00,
++ 0x18, 0xe8, 0x48, 0x10, 0xfc, 0x68, 0x98, 0xf4,
++ 0x40, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x01, 0x07, 0x79, 0x4b, 0x4a, 0x4c, 0x7f, 0x48,
++ 0x4f, 0x48, 0x7b, 0x48, 0x07, 0x00, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xfc, 0xe8, 0x00, 0xfc, 0xc8,
++ 0x68, 0xb0, 0x70, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4b, 0x4a, 0x4b, 0x7a, 0x4a,
++ 0x4a, 0x4a, 0x7c, 0x44, 0x08, 0x03, 0x00, 0x00,
++ 0x40, 0xfc, 0x90, 0xfc, 0xf0, 0xfc, 0x20, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4b, 0x4a, 0x4a, 0x7a, 0x4a,
++ 0x4a, 0x4a, 0x7a, 0x44, 0x07, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x00, 0x20, 0x20, 0x20,
++ 0x40, 0x50, 0x88, 0x98, 0xe4, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x78, 0x49, 0x4f, 0x4b, 0x79, 0x4f,
++ 0x4b, 0x4d, 0x7f, 0x47, 0x04, 0x01, 0x00, 0x00,
++ 0x90, 0xf8, 0x40, 0xf0, 0xfc, 0xa8, 0x24, 0xfc,
++ 0xa8, 0x28, 0xd0, 0xb4, 0xcc, 0x84, 0x00, 0x00,
++ 0x1f, 0x17, 0x1f, 0x01, 0x7f, 0x1e, 0x12, 0x1e,
++ 0x3f, 0x0f, 0x7f, 0x0c, 0x77, 0x1c, 0x00, 0x00,
++ 0xf0, 0xd0, 0xf0, 0x00, 0xfc, 0xf0, 0x90, 0xf0,
++ 0xf8, 0xe0, 0xfc, 0x90, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x20,
++ 0x20, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x90, 0x10,
++ 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x11, 0x1f, 0x11, 0x11, 0x1f,
++ 0x11, 0x00, 0x00, 0x03, 0x3c, 0x00, 0x00, 0x00,
++ 0x20, 0x10, 0xf0, 0x10, 0xd0, 0x10, 0x10, 0xf8,
++ 0x10, 0xa0, 0xc0, 0x44, 0x34, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x12, 0x07,
++ 0x19, 0x71, 0x12, 0x14, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x08, 0x88, 0x48, 0x08, 0xe8, 0x30, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x24,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x20, 0x24, 0x24, 0x24, 0x24, 0xfc, 0x24, 0x20,
++ 0x24, 0x24, 0x24, 0x24, 0xfc, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4f, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0,
++ 0x48, 0x28, 0x30, 0x10, 0xc8, 0x04, 0x00, 0x00,
++ 0x04, 0x3f, 0x04, 0x07, 0x07, 0x04, 0x7f, 0x08,
++ 0x17, 0x64, 0x07, 0x07, 0x08, 0x10, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xc0, 0xc0, 0x40, 0xfc, 0x20,
++ 0xd0, 0x48, 0xc4, 0xc0, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x25, 0x25, 0x3e, 0x27, 0x24,
++ 0x3f, 0x24, 0x27, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x90, 0xfc, 0x90, 0xfc, 0x08, 0xf0, 0xfc, 0xc8,
++ 0x68, 0xb0, 0x70, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x01, 0x39, 0x2f, 0x2a, 0x2a, 0x3f, 0x28, 0x2b,
++ 0x3a, 0x2b, 0x2a, 0x2b, 0x2a, 0x5a, 0x00, 0x00,
++ 0x20, 0x3c, 0xe0, 0xb8, 0x88, 0xf8, 0x20, 0xb8,
++ 0xa0, 0xb8, 0xa0, 0xbc, 0xa4, 0x9c, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x4f, 0x15, 0x7f,
++ 0x14, 0x3e, 0x2a, 0x3e, 0x7f, 0x09, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0xe8, 0x70, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x18, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x01, 0x09, 0x09, 0x09,
++ 0x09, 0x09, 0x11, 0x11, 0x21, 0x01, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0xfc, 0x00, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x11, 0x11, 0x11,
++ 0x11, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x10, 0x10, 0x10,
++ 0x60, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x04, 0x08, 0x10, 0x21, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x78, 0x08, 0x08, 0x70, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x09, 0x08, 0x08, 0x7e, 0x08, 0x0c, 0x1a, 0x1a,
++ 0x18, 0x28, 0x29, 0x49, 0x0a, 0x0c, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0xe0,
++ 0xa0, 0xa0, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7e, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x49, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0x88, 0x88,
++ 0x88, 0x88, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x1c, 0x1b, 0x1b,
++ 0x29, 0x29, 0x49, 0x09, 0x09, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08,
++ 0x00, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x08, 0x1d, 0x1a, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0x7c, 0xc0, 0x40, 0x20,
++ 0x20, 0x20, 0x14, 0x14, 0x0c, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7e, 0x12, 0x1a, 0x36, 0x36,
++ 0x32, 0x52, 0x52, 0x13, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7e, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x49, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x78, 0x48, 0x48,
++ 0x88, 0x88, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x7f, 0x03, 0x05, 0x09, 0x11,
++ 0x61, 0x01, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x80, 0x40, 0x20, 0x10,
++ 0x0c, 0x00, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x03, 0x05, 0x19, 0x61, 0x04,
++ 0x08, 0x11, 0x61, 0x02, 0x04, 0x1f, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x40,
++ 0x30, 0x08, 0x04, 0x20, 0x70, 0x88, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7e, 0x08, 0x1f, 0x1a, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0x60, 0x20, 0xfc, 0x24, 0x28,
++ 0x30, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x09, 0x0e, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xb0, 0xa8, 0xa4, 0x2c, 0x28,
++ 0x70, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x11, 0x10, 0x10, 0x7d, 0x11, 0x1a, 0x37, 0x34,
++ 0x30, 0x50, 0x51, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0xe0, 0xa0, 0xa0, 0x10, 0x10, 0x08, 0xf4, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x78, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x29, 0x49, 0x0a, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x18, 0x37, 0x34,
++ 0x30, 0x50, 0x51, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x50, 0x90, 0x90, 0x90, 0x90, 0x90, 0xfc, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7e, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x28, 0x28, 0x49, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x90, 0x90, 0x90, 0xfc, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x7f, 0x12, 0x1a, 0x36, 0x36,
++ 0x32, 0x52, 0x52, 0x14, 0x14, 0x19, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xb8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xb8, 0xa8, 0x80, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7e, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x29, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xe8, 0x28, 0x28, 0x28,
++ 0xe8, 0x28, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x1d, 0x1a, 0x1b,
++ 0x2a, 0x28, 0x48, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0xf8,
++ 0x48, 0x48, 0x48, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x01, 0x1f, 0x19, 0x15, 0x15,
++ 0x1f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x00, 0xf0, 0x50, 0x50, 0x90,
++ 0xf0, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x28, 0x48, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x00, 0x90, 0x88, 0x04, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x1a, 0x37, 0x36,
++ 0x32, 0x52, 0x53, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x70, 0x90, 0x20, 0x20,
++ 0x50, 0x88, 0x04, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x11, 0x3a, 0x35, 0x35,
++ 0x51, 0x51, 0x11, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0x08, 0xe8, 0x28,
++ 0x28, 0xe8, 0x28, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x29, 0x49, 0x09, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x1e, 0x1a, 0x1a,
++ 0x28, 0x28, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x40, 0x40, 0x78, 0x40,
++ 0x40, 0x78, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x29, 0x4a, 0x0a, 0x0c, 0x08, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x20, 0x60,
++ 0x30, 0x28, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x29, 0x49, 0x0f, 0x09, 0x08, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x10, 0x10, 0xd4, 0x0c, 0xec, 0x04, 0x00, 0x00,
++ 0x10, 0x12, 0x12, 0x7e, 0x12, 0x1b, 0x36, 0x34,
++ 0x32, 0x52, 0x52, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0x48, 0x48, 0xf8, 0x48, 0x40,
++ 0x48, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x12, 0x1b, 0x35, 0x35,
++ 0x31, 0x51, 0x51, 0x11, 0x11, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0xe8, 0x28, 0x28,
++ 0xe8, 0x30, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x11, 0x19, 0x37, 0x35,
++ 0x31, 0x51, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x88, 0x88, 0x88, 0x88, 0xfc, 0x08, 0x48, 0x28,
++ 0x28, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x12, 0x39, 0x35,
++ 0x34, 0x50, 0x50, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x10, 0x10, 0x10, 0x10,
++ 0x90, 0xa0, 0xa0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x29, 0x49, 0x0a, 0x0b, 0x0c, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0x50, 0x50, 0x70, 0x58, 0xf8, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x13, 0x13, 0x3a, 0x37,
++ 0x35, 0x51, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0xa0, 0x10, 0xe8, 0xfc, 0x58, 0xe8, 0xf8,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3e, 0x08, 0x08, 0x7f, 0x08, 0x09, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x1a, 0x36, 0x36,
++ 0x32, 0x52, 0x52, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0x20, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7d, 0x11, 0x1a, 0x34, 0x35,
++ 0x31, 0x52, 0x54, 0x10, 0x10, 0x11, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x98, 0x98, 0xa8, 0xc8, 0x98,
++ 0x98, 0xa8, 0xc8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x22, 0x54, 0x0f, 0x18, 0x61,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x90, 0x90, 0xfc, 0x10, 0x10,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x19, 0x36, 0x37,
++ 0x30, 0x50, 0x51, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x90, 0xf8, 0x04, 0xf8,
++ 0x80, 0xf0, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x08, 0x1f, 0x1a, 0x1a,
++ 0x29, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x48, 0xf8, 0x50, 0x50, 0xfc, 0x40, 0xfc,
++ 0x80, 0xf8, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x1f, 0x34, 0x34,
++ 0x33, 0x50, 0x50, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x50, 0x88, 0xfc, 0x44, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7c, 0x11, 0x1f, 0x34, 0x35,
++ 0x31, 0x51, 0x51, 0x12, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x90, 0x18, 0xe4, 0x00, 0x50,
++ 0x50, 0x50, 0x50, 0x54, 0x54, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x10, 0x18, 0x35, 0x35,
++ 0x33, 0x55, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x80, 0xf8, 0x08, 0x10,
++ 0x10, 0xfc, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1a, 0x1b,
++ 0x2a, 0x2b, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x50, 0x88, 0xfc, 0xa4, 0xa0, 0xf8, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x12, 0x7d, 0x11, 0x18, 0x37, 0x34,
++ 0x30, 0x53, 0x50, 0x10, 0x13, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x48, 0x48, 0x50, 0x40, 0xf8, 0x08,
++ 0x08, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x13, 0x1a, 0x36, 0x37,
++ 0x32, 0x52, 0x53, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x34, 0x37,
++ 0x30, 0x50, 0x57, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x0f, 0x0f, 0x08, 0x0f, 0x0f, 0x08, 0x0f,
++ 0x09, 0x01, 0x7f, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xe0, 0xe0, 0x20, 0xe0, 0xf8, 0x00, 0xf0,
++ 0x10, 0x60, 0xfc, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x12, 0x1c, 0x37, 0x34,
++ 0x31, 0x51, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x28, 0x29, 0x4a, 0x08, 0x09, 0x0e, 0x00, 0x00,
++ 0x40, 0x50, 0x98, 0xe4, 0xa0, 0xa4, 0x5c, 0x40,
++ 0xf0, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1a, 0x36, 0x36,
++ 0x32, 0x52, 0x54, 0x14, 0x18, 0x10, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0xfc, 0x00, 0xf8, 0xa8, 0xa8,
++ 0xf8, 0x88, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0d, 0x16, 0x14, 0x37, 0x54,
++ 0x17, 0x14, 0x15, 0x16, 0x14, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0xa0, 0x60, 0xdc, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x10, 0x17, 0x12, 0x7a, 0x17, 0x1a, 0x3a, 0x37,
++ 0x32, 0x52, 0x54, 0x14, 0x18, 0x13, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xb0, 0xb0, 0xa8, 0xa8,
++ 0xa4, 0xa4, 0xa4, 0xb8, 0xa0, 0x20, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x7d, 0x12, 0x1a, 0x37, 0x31,
++ 0x35, 0x55, 0x52, 0x12, 0x15, 0x18, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0xf8, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x17, 0x11, 0x38, 0x35,
++ 0x37, 0x50, 0x53, 0x12, 0x13, 0x10, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0xfc, 0xe8, 0x40, 0xf0,
++ 0xfc, 0x08, 0xfc, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x19, 0x35, 0x35,
++ 0x31, 0x57, 0x51, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x00, 0xfc, 0x10, 0x10, 0x10,
++ 0x10, 0xfc, 0x10, 0x08, 0x04, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7d, 0x11, 0x1a, 0x35, 0x34,
++ 0x30, 0x53, 0x50, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x30, 0xc8, 0x24, 0x24, 0x00, 0xf8, 0x10,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x1c, 0x1a, 0x2a, 0x49, 0x07,
++ 0x04, 0x06, 0x05, 0x09, 0x10, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x70, 0x70, 0xa8, 0x24, 0xc0,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x19, 0x34, 0x34,
++ 0x33, 0x52, 0x52, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x40, 0x80,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x1c, 0x2a, 0x4b, 0x08, 0x7f,
++ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x70, 0xa8, 0x24, 0x20, 0xfc,
++ 0x00, 0xc0, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x10, 0x1b, 0x36, 0x36,
++ 0x33, 0x52, 0x50, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0xa0, 0xa0, 0xa0, 0xb8, 0x08, 0x08,
++ 0xb8, 0xa8, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x11, 0x19, 0x35, 0x34,
++ 0x30, 0x50, 0x53, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x80,
++ 0x9c, 0xe0, 0x80, 0x88, 0x88, 0x78, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x17, 0x10, 0x38, 0x37,
++ 0x35, 0x51, 0x53, 0x15, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0xfc, 0x90, 0x90, 0xf0,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7d, 0x11, 0x19, 0x34, 0x37,
++ 0x30, 0x50, 0x57, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x10, 0x60, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x04, 0x3f, 0x04, 0x07, 0x04, 0x07, 0x04, 0x7f,
++ 0x09, 0x1f, 0x63, 0x0d, 0x31, 0x01, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xc0, 0x40, 0xc0, 0x40, 0xfc,
++ 0x20, 0xf0, 0x8c, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7e, 0x14, 0x12, 0x39, 0x37,
++ 0x35, 0x51, 0x52, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x88, 0xa8, 0xa8, 0xc8, 0xf8,
++ 0xc8, 0xa8, 0xa8, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x2a, 0x2a,
++ 0x2e, 0x0c, 0x1c, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xb8, 0x30, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1a, 0x37, 0x36,
++ 0x32, 0x52, 0x53, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x48, 0x48, 0xf8, 0x48,
++ 0x68, 0x58, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7f, 0x10, 0x1b, 0x34, 0x35,
++ 0x36, 0x53, 0x50, 0x10, 0x11, 0x12, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0xf8, 0x40, 0xfc, 0xa0, 0x50,
++ 0x4c, 0xf8, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x7c, 0x14, 0x1f, 0x3c, 0x35,
++ 0x35, 0x55, 0x55, 0x15, 0x14, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xa8, 0xc8, 0xf8, 0x48, 0x58,
++ 0x58, 0x58, 0xf8, 0x18, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x14, 0x18, 0x35, 0x36,
++ 0x33, 0x50, 0x50, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0xa0, 0xa4, 0x1c, 0x00,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x29, 0x49, 0x09, 0x09, 0x0f, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xf8, 0x20,
++ 0x24, 0xf8, 0x20, 0x24, 0xe4, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x09, 0x1d, 0x1b, 0x1b,
++ 0x29, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0xfc, 0x20, 0x10, 0xd4, 0x0c,
++ 0xfc, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x08, 0x1c, 0x1b, 0x1a,
++ 0x28, 0x2b, 0x48, 0x08, 0x08, 0x09, 0x00, 0x00,
++ 0x50, 0x48, 0x7c, 0xc8, 0x30, 0x34, 0xcc, 0x54,
++ 0x7c, 0xc8, 0x30, 0x14, 0x6c, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7f, 0x0a, 0x1c, 0x1a, 0x1b,
++ 0x28, 0x28, 0x48, 0x09, 0x0a, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x00, 0xf8, 0x00, 0xfc,
++ 0x20, 0xb0, 0xa8, 0x24, 0x24, 0x60, 0x00, 0x00,
++ 0x10, 0x12, 0x13, 0x7e, 0x12, 0x1b, 0x34, 0x35,
++ 0x32, 0x50, 0x51, 0x16, 0x10, 0x17, 0x00, 0x00,
++ 0x20, 0x28, 0xc8, 0x68, 0x98, 0xf8, 0xa0, 0x24,
++ 0x9c, 0xf0, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x11, 0x17, 0x39, 0x35,
++ 0x37, 0x53, 0x55, 0x19, 0x11, 0x13, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x24, 0x24, 0xe8, 0x28, 0x18,
++ 0x90, 0x50, 0x68, 0x28, 0x44, 0x84, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7d, 0x10, 0x1f, 0x34, 0x37,
++ 0x30, 0x50, 0x51, 0x10, 0x10, 0x17, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0x40, 0xfc,
++ 0x90, 0x90, 0xe0, 0x30, 0xc8, 0x08, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x13, 0x1d, 0x31, 0x7f,
++ 0x01, 0x1f, 0x13, 0x1d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x90, 0x60, 0x10, 0xfc,
++ 0x00, 0xf0, 0x90, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x13, 0x18, 0x37, 0x36,
++ 0x31, 0x51, 0x50, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0x48,
++ 0x68, 0x70, 0xd0, 0x48, 0x44, 0xc0, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x7f, 0x15, 0x19, 0x3f, 0x35,
++ 0x35, 0x51, 0x52, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x38, 0xe8, 0x28, 0x28, 0xe8, 0x28,
++ 0x28, 0xa8, 0x68, 0x78, 0x28, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x13, 0x1a, 0x37, 0x36,
++ 0x33, 0x50, 0x57, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x40, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x11, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x01,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x13, 0x14, 0x39, 0x34,
++ 0x34, 0x50, 0x52, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xf0, 0x20,
++ 0x40, 0xa0, 0xa8, 0x84, 0x94, 0x70, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x12, 0x1a, 0x36, 0x36,
++ 0x33, 0x52, 0x54, 0x14, 0x18, 0x10, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x48, 0x48, 0x48, 0xfc, 0xc8,
++ 0xa8, 0xa8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x11, 0x10, 0x10, 0x7f, 0x10, 0x1a, 0x36, 0x35,
++ 0x31, 0x51, 0x51, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xfc, 0xa0, 0xa8, 0xa8, 0xa8,
++ 0xb0, 0xb0, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x36, 0x36,
++ 0x32, 0x52, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x12, 0x1a, 0x37, 0x36,
++ 0x32, 0x57, 0x50, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8,
++ 0xa8, 0xfc, 0xa0, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x7d, 0x12, 0x17, 0x39, 0x35,
++ 0x37, 0x51, 0x51, 0x11, 0x17, 0x10, 0x00, 0x00,
++ 0x08, 0xc8, 0x28, 0xa8, 0xa8, 0xe8, 0x68, 0x28,
++ 0xe8, 0x28, 0x28, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x13, 0x14, 0x3b, 0x36,
++ 0x36, 0x53, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xf8, 0xa8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x11, 0x19, 0x36, 0x36,
++ 0x33, 0x52, 0x52, 0x12, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x9c, 0xf4, 0x54, 0x64, 0x98,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x09, 0x09, 0x09, 0x7f, 0x09, 0x19, 0x1f, 0x1a,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x20, 0x24, 0xe8, 0x30, 0x20, 0xe4, 0x3c, 0x40,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7f, 0x11, 0x19, 0x37, 0x36,
++ 0x32, 0x52, 0x53, 0x12, 0x10, 0x11, 0x00, 0x00,
++ 0x00, 0x38, 0x28, 0xe8, 0x28, 0x38, 0xa8, 0xa8,
++ 0xb8, 0xa8, 0xc8, 0x48, 0x88, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7d, 0x11, 0x17, 0x39, 0x35,
++ 0x37, 0x53, 0x55, 0x19, 0x11, 0x11, 0x00, 0x00,
++ 0x50, 0x90, 0x10, 0x14, 0x34, 0xf8, 0x58, 0x90,
++ 0x50, 0x50, 0x28, 0x28, 0x44, 0x84, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x10, 0x1f, 0x35, 0x35,
++ 0x31, 0x51, 0x51, 0x11, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x10, 0xf0,
++ 0x10, 0xf0, 0x1c, 0xf0, 0x10, 0x10, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x79, 0x17, 0x11, 0x39, 0x37,
++ 0x35, 0x57, 0x50, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x24, 0xe4, 0x24, 0xc4, 0x18,
++ 0x40, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x13, 0x1a, 0x37, 0x34,
++ 0x37, 0x50, 0x51, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x48,
++ 0xe8, 0xf0, 0x50, 0x48, 0x44, 0xc0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x10, 0x1f, 0x34, 0x34,
++ 0x31, 0x57, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x50, 0xfc, 0x60, 0x90,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x7d, 0x11, 0x19, 0x35, 0x35,
++ 0x37, 0x52, 0x52, 0x13, 0x13, 0x12, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xf0, 0x10, 0xf0, 0x10,
++ 0xfc, 0xa0, 0xa8, 0x18, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7d, 0x10, 0x1b, 0x36, 0x34,
++ 0x33, 0x52, 0x52, 0x12, 0x12, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0x48, 0x40,
++ 0xf8, 0x48, 0x48, 0x48, 0x70, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x10, 0x1f, 0x34, 0x37,
++ 0x30, 0x53, 0x50, 0x17, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0xf8, 0x10, 0xf0, 0x20, 0xfc, 0xc8, 0x68,
++ 0xb0, 0x70, 0xa8, 0x24, 0x20, 0xc0, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x11, 0x17, 0x39, 0x35,
++ 0x37, 0x53, 0x55, 0x19, 0x11, 0x13, 0x00, 0x00,
++ 0x10, 0xd0, 0x90, 0x7c, 0x10, 0xd0, 0x78, 0xb8,
++ 0x38, 0x54, 0x54, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x17, 0x12, 0x7e, 0x13, 0x1a, 0x36, 0x37,
++ 0x32, 0x52, 0x53, 0x16, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xb0, 0xb0, 0xa8, 0xa8,
++ 0xa4, 0xe4, 0xa4, 0xb8, 0xa0, 0xa0, 0x00, 0x00,
++ 0x11, 0x10, 0x10, 0x7d, 0x13, 0x14, 0x3f, 0x3c,
++ 0x36, 0x55, 0x56, 0x15, 0x14, 0x15, 0x00, 0x00,
++ 0xc0, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xa8, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x13, 0x12, 0x38, 0x37,
++ 0x34, 0x50, 0x50, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xf8, 0x48, 0x40, 0xfc,
++ 0x40, 0x78, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7c, 0x13, 0x1b, 0x36, 0x36,
++ 0x33, 0x50, 0x51, 0x16, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x58, 0xd8, 0xe8,
++ 0xf8, 0xe0, 0x50, 0x4c, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x17, 0x18, 0x35, 0x37,
++ 0x30, 0x53, 0x50, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xfc, 0xa0, 0x10, 0xe8,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x7d, 0x11, 0x19, 0x35, 0x34,
++ 0x37, 0x50, 0x51, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x70, 0x00, 0xf8, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x1b, 0x37, 0x34,
++ 0x33, 0x52, 0x52, 0x12, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x68, 0x98, 0x08, 0xf8, 0x00,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x2a, 0x2c, 0x49, 0x14, 0x22, 0x3f, 0x21,
++ 0x5f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x20, 0xa4, 0xa8, 0x30, 0x48, 0x88, 0xfc, 0x08,
++ 0xf0, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x12, 0x1b, 0x36, 0x37,
++ 0x31, 0x51, 0x51, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8,
++ 0x50, 0x50, 0x68, 0x7c, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x12, 0x12, 0x7f, 0x10, 0x1f, 0x34, 0x35,
++ 0x31, 0x51, 0x51, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7c, 0x11, 0x19, 0x35, 0x34,
++ 0x33, 0x52, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x08, 0xe8, 0xa8, 0xe8, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7f, 0x08, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x09, 0x0e, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x00, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x1b, 0x36, 0x35,
++ 0x31, 0x51, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x78, 0x48, 0xfc, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x11, 0x10, 0x17, 0x7c, 0x13, 0x18, 0x37, 0x35,
++ 0x31, 0x52, 0x54, 0x18, 0x17, 0x10, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x00,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x7f, 0x04, 0x1f, 0x04, 0x7f,
++ 0x09, 0x1f, 0x63, 0x0d, 0x31, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0x40, 0xf0, 0x40, 0xfc,
++ 0x20, 0xf0, 0x8c, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x22, 0x14, 0x7f, 0x08, 0x2a, 0x2a, 0x3e, 0x09,
++ 0x11, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x18,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x36, 0x37,
++ 0x32, 0x53, 0x54, 0x14, 0x17, 0x14, 0x00, 0x00,
++ 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xfc, 0x94, 0x94, 0xf4, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x34, 0x37,
++ 0x31, 0x56, 0x51, 0x16, 0x10, 0x11, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x98, 0xe8, 0x98, 0xe8, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x3e, 0x32, 0x2b, 0x2f, 0x7a, 0x2a, 0x47,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0xf0, 0x90, 0x94, 0x0c, 0xf8, 0x90, 0x60, 0x9c,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x13, 0x1a, 0x37, 0x36,
++ 0x33, 0x52, 0x52, 0x13, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0x50, 0xdc, 0x50, 0xdc, 0x70,
++ 0xdc, 0x50, 0x90, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x12, 0x1a, 0x37, 0x34,
++ 0x32, 0x52, 0x54, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0x40,
++ 0x48, 0x48, 0xd0, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x12, 0x1b, 0x36, 0x37,
++ 0x32, 0x50, 0x57, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7d, 0x11, 0x19, 0x35, 0x35,
++ 0x30, 0x57, 0x50, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x40, 0xfc, 0x00, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7d, 0x10, 0x1b, 0x36, 0x37,
++ 0x30, 0x50, 0x50, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0x48, 0xf8,
++ 0x40, 0x78, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x15, 0x19, 0x36, 0x34,
++ 0x31, 0x53, 0x55, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x10, 0x48, 0x48, 0xa0,
++ 0x10, 0xf8, 0x14, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x1a, 0x37, 0x34,
++ 0x33, 0x52, 0x53, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0xbc, 0x14, 0x94, 0x54, 0xe4, 0x2c, 0x40,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7d, 0x10, 0x1f, 0x34, 0x37,
++ 0x32, 0x53, 0x52, 0x13, 0x12, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0x00, 0xf8,
++ 0x48, 0xf8, 0x48, 0xfc, 0x44, 0x3c, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x7c, 0x13, 0x12, 0x3b, 0x34,
++ 0x37, 0x50, 0x51, 0x17, 0x11, 0x13, 0x00, 0x00,
++ 0x00, 0x38, 0xe8, 0x28, 0xb0, 0xb0, 0xa8, 0x28,
++ 0xa4, 0xa4, 0xa4, 0x38, 0x20, 0x20, 0x00, 0x00,
++ 0x11, 0x11, 0x6b, 0x2a, 0x13, 0x1a, 0x2e, 0x77,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0xe8, 0xa8, 0x90, 0x98, 0xac, 0xf4,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x12, 0x19, 0x36, 0x35,
++ 0x36, 0x51, 0x50, 0x11, 0x10, 0x13, 0x00, 0x00,
++ 0x00, 0xfc, 0xcc, 0x54, 0xec, 0x54, 0x64, 0xb0,
++ 0x4c, 0xa0, 0x48, 0x90, 0x60, 0x80, 0x00, 0x00,
++ 0x11, 0x17, 0x11, 0x7d, 0x13, 0x1a, 0x37, 0x34,
++ 0x33, 0x50, 0x53, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xe0, 0xf8, 0x48, 0xf8, 0x40,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x17, 0x11, 0x7f, 0x12, 0x1b, 0x35, 0x35,
++ 0x33, 0x53, 0x55, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xb8, 0xa8, 0xb8, 0xfc, 0x20,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x13, 0x1a, 0x37, 0x34,
++ 0x33, 0x50, 0x53, 0x17, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x40,
++ 0x58, 0x40, 0x58, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x12, 0x13, 0x14, 0x7d, 0x17, 0x15, 0x3d, 0x3f,
++ 0x35, 0x55, 0x57, 0x14, 0x14, 0x18, 0x00, 0x00,
++ 0x08, 0xe8, 0x98, 0x18, 0xc8, 0x68, 0x58, 0xd8,
++ 0x4c, 0x78, 0xc8, 0x48, 0x48, 0xc8, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x2a, 0x3e, 0x2a, 0x3e, 0x7f,
++ 0x09, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0xfc, 0x90, 0x90, 0x90, 0x10,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x12, 0x7c, 0x11, 0x19, 0x36, 0x36,
++ 0x36, 0x52, 0x52, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x48, 0x48, 0x48, 0x48, 0xb4, 0xa4, 0x00, 0x20,
++ 0xa0, 0xb8, 0xa0, 0xa0, 0x60, 0x1c, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7d, 0x11, 0x17, 0x39, 0x35,
++ 0x34, 0x51, 0x57, 0x11, 0x11, 0x13, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xfc, 0x10, 0xf0,
++ 0xc8, 0x48, 0x30, 0x10, 0xc8, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x1a, 0x36, 0x37,
++ 0x33, 0x53, 0x53, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x90, 0xf0, 0x00, 0xf8,
++ 0x68, 0x68, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x12, 0x1a, 0x36, 0x36,
++ 0x33, 0x52, 0x55, 0x15, 0x1a, 0x11, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0xa8, 0xe8, 0xa8,
++ 0xe8, 0x90, 0xd0, 0xb4, 0xac, 0xc4, 0x00, 0x00,
++ 0x12, 0x14, 0x12, 0x7f, 0x12, 0x1b, 0x36, 0x37,
++ 0x30, 0x57, 0x50, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x48, 0x90, 0x48, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x17, 0x13, 0x7e, 0x13, 0x1a, 0x37, 0x34,
++ 0x37, 0x50, 0x57, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x50,
++ 0xf8, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x7f, 0x11, 0x3a, 0x34, 0x57, 0x51,
++ 0x13, 0x7f, 0x01, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x90, 0x90, 0x7c, 0x90, 0xb8, 0xb8, 0x54, 0x94,
++ 0x10, 0xfc, 0x00, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7e, 0x14, 0x12, 0x3a, 0x34,
++ 0x35, 0x56, 0x52, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x98, 0x50, 0xa8, 0xa4, 0xd4,
++ 0xf0, 0x40, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7c, 0x12, 0x1a, 0x34, 0x35,
++ 0x36, 0x53, 0x52, 0x13, 0x10, 0x17, 0x00, 0x00,
++ 0x40, 0xfc, 0x98, 0x50, 0xa8, 0xa4, 0xd4, 0xf0,
++ 0x40, 0xf8, 0x48, 0xf8, 0x58, 0xe4, 0x00, 0x00,
++ 0x11, 0x10, 0x13, 0x7c, 0x11, 0x18, 0x37, 0x34,
++ 0x31, 0x50, 0x57, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0xc0,
++ 0xc8, 0x68, 0xf0, 0x50, 0x4c, 0xc0, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x37, 0x36,
++ 0x33, 0x50, 0x57, 0x11, 0x10, 0x17, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0xf8, 0x48,
++ 0xf8, 0x80, 0xfc, 0x90, 0x70, 0x88, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x7f, 0x12, 0x1a, 0x37, 0x36,
++ 0x33, 0x52, 0x53, 0x16, 0x10, 0x10, 0x00, 0x00,
++ 0x20, 0xe0, 0x20, 0xe0, 0xbc, 0xe8, 0xe8, 0xa8,
++ 0xb0, 0x90, 0xb0, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7f, 0x12, 0x1b, 0x35, 0x35,
++ 0x31, 0x51, 0x51, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xfc, 0x50, 0xf0, 0xf8, 0x08,
++ 0xf8, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x10, 0x19, 0x35, 0x35,
++ 0x30, 0x57, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x00, 0xf0, 0x10, 0xf0,
++ 0xa0, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x19, 0x37, 0x36,
++ 0x33, 0x52, 0x53, 0x12, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc, 0x80,
++ 0xf8, 0xa8, 0xa8, 0x90, 0xe8, 0x84, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x11, 0x19, 0x35, 0x34,
++ 0x33, 0x52, 0x53, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00,
++ 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0xa8, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x10, 0x1b, 0x34, 0x35,
++ 0x36, 0x53, 0x56, 0x13, 0x16, 0x11, 0x00, 0x00,
++ 0x30, 0xc0, 0xf0, 0x80, 0xf8, 0x88, 0x78, 0x98,
++ 0x60, 0xb8, 0x60, 0xbc, 0x64, 0xdc, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x7d, 0x16, 0x17, 0x3d, 0x3d,
++ 0x35, 0x55, 0x56, 0x14, 0x14, 0x14, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0x78, 0x90, 0xfc, 0x00, 0x78,
++ 0x48, 0x78, 0x48, 0x78, 0x48, 0x58, 0x00, 0x00,
++ 0x11, 0x10, 0x12, 0x7d, 0x11, 0x1b, 0x34, 0x35,
++ 0x31, 0x51, 0x51, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0xd0, 0x50, 0xa8, 0xa8, 0x10, 0xf8, 0x04, 0xf0,
++ 0x10, 0xf0, 0x10, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x7f, 0x13, 0x1a, 0x37, 0x36,
++ 0x33, 0x50, 0x53, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x40, 0xf8, 0x10, 0xfc, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x11, 0x1b, 0x35, 0x35,
++ 0x36, 0x57, 0x50, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xb8, 0x10, 0xfc,
++ 0x00, 0xfc, 0xa0, 0xa0, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x7f, 0x11, 0x18, 0x37, 0x34,
++ 0x31, 0x50, 0x57, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0xa0, 0xa8, 0xb0, 0xfc, 0x10, 0xa0, 0xf8, 0x40,
++ 0xf0, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x36, 0x37,
++ 0x32, 0x53, 0x52, 0x15, 0x15, 0x18, 0x00, 0x00,
++ 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x00, 0xfc, 0xa4, 0x54, 0x04, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7f, 0x12, 0x1b, 0x36, 0x37,
++ 0x32, 0x52, 0x55, 0x15, 0x19, 0x11, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xfc, 0xa8, 0x58, 0x40, 0xfc,
++ 0xf0, 0xf0, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x7f, 0x10, 0x19, 0x35, 0x35,
++ 0x31, 0x51, 0x50, 0x12, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0xf8, 0x10, 0xfc, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x48, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x1e, 0x23, 0x7a, 0x2a, 0x3b,
++ 0x0d, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x90, 0x50, 0x20, 0x50, 0x8c,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x11, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x35, 0x37,
++ 0x31, 0x51, 0x52, 0x12, 0x14, 0x11, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xbc, 0xe8, 0xe8, 0x28, 0xe8,
++ 0x10, 0x90, 0x90, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x13, 0x14, 0x3b, 0x36,
++ 0x37, 0x51, 0x51, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xb8, 0xa8,
++ 0xb8, 0x10, 0x10, 0xa8, 0x64, 0x44, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x7d, 0x11, 0x1a, 0x37, 0x34,
++ 0x33, 0x52, 0x52, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x50, 0x50, 0xe8, 0xfc, 0x00,
++ 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3f, 0x20, 0x3f, 0x52, 0x1f,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x20, 0xf8, 0x50, 0xfc, 0x20, 0xfc, 0x20, 0x20,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3e, 0x22, 0x3f, 0x3e, 0x32,
++ 0x5f, 0x01, 0x7f, 0x07, 0x79, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x60, 0xf8, 0x50, 0xfc, 0x20, 0xf8,
++ 0x20, 0x00, 0xfc, 0xc0, 0x3c, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x7f, 0x14, 0x17, 0x3d, 0x3f,
++ 0x34, 0x53, 0x52, 0x12, 0x17, 0x10, 0x00, 0x00,
++ 0x20, 0xe0, 0x20, 0xbc, 0xc0, 0x80, 0x38, 0xc0,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x12, 0x1b, 0x36, 0x36,
++ 0x32, 0x52, 0x52, 0x13, 0x13, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0xa8, 0xfc, 0xf8, 0xe8,
++ 0xb8, 0xf8, 0x50, 0x88, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x10, 0x1b, 0x34, 0x35,
++ 0x33, 0x55, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0xcc, 0x74, 0xcc, 0x74, 0x90, 0xfc,
++ 0x20, 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7d, 0x11, 0x12, 0x3b, 0x36,
++ 0x37, 0x50, 0x57, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x48, 0xa8, 0x94, 0x70, 0xf8, 0xa8,
++ 0xfc, 0x00, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7d, 0x11, 0x12, 0x39, 0x37,
++ 0x35, 0x51, 0x51, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0xfc, 0x08, 0xf8, 0x50, 0x60, 0xf8, 0x08,
++ 0xf8, 0xf8, 0x08, 0xf8, 0x88, 0x04, 0x00, 0x00,
++ 0x11, 0x17, 0x11, 0x7f, 0x12, 0x15, 0x3f, 0x34,
++ 0x37, 0x50, 0x53, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xfc, 0x08, 0xf0, 0xfc, 0xc8,
++ 0x68, 0xb0, 0x70, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x11, 0x11, 0x16, 0x7e, 0x11, 0x19, 0x36, 0x37,
++ 0x31, 0x55, 0x55, 0x15, 0x19, 0x11, 0x00, 0x00,
++ 0x10, 0x3c, 0xa8, 0xf8, 0x08, 0xfc, 0xa0, 0xf4,
++ 0x34, 0xd8, 0xb8, 0xd4, 0x10, 0x60, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x36, 0x34,
++ 0x37, 0x55, 0x57, 0x15, 0x17, 0x14, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00,
++ 0xfc, 0x54, 0xfc, 0x54, 0xfc, 0x44, 0x00, 0x00,
++ 0x12, 0x12, 0x15, 0x7f, 0x12, 0x15, 0x3f, 0x34,
++ 0x37, 0x50, 0x51, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x48, 0x48, 0xf4, 0xac, 0xe8, 0xb4, 0xfc, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x10, 0x14, 0x13, 0x7d, 0x13, 0x13, 0x3d, 0x34,
++ 0x37, 0x50, 0x51, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x40, 0x84, 0xf4, 0x18, 0xf8, 0x14, 0xf4, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x12, 0x1b, 0x36, 0x36,
++ 0x32, 0x52, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0xe8, 0xa8,
++ 0xe8, 0x48, 0xe8, 0xa8, 0xe8, 0x18, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x7c, 0x17, 0x15, 0x3e, 0x3c,
++ 0x34, 0x55, 0x55, 0x19, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x90, 0xfc, 0xf0, 0xd8, 0x94,
++ 0x40, 0x78, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x13, 0x12, 0x3b, 0x36,
++ 0x34, 0x57, 0x50, 0x11, 0x10, 0x13, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xb8, 0xa8, 0xb8, 0xa8,
++ 0x44, 0xfc, 0x90, 0xe0, 0x70, 0x88, 0x00, 0x00,
++ 0x11, 0x12, 0x13, 0x7e, 0x13, 0x1a, 0x37, 0x31,
++ 0x33, 0x55, 0x50, 0x13, 0x10, 0x10, 0x00, 0x00,
++ 0x98, 0xe8, 0x98, 0xe8, 0xb8, 0xa8, 0xfc, 0x70,
++ 0xc8, 0xf4, 0x40, 0xf8, 0x40, 0xc0, 0x00, 0x00,
++ 0x04, 0x7f, 0x14, 0x3e, 0x22, 0x3f, 0x3e, 0x22,
++ 0x3f, 0x01, 0x7f, 0x07, 0x79, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x60, 0xf8, 0x50, 0xfc, 0x20, 0xf8,
++ 0x20, 0x00, 0xfc, 0xc0, 0x3c, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x12, 0x17, 0x3b, 0x34,
++ 0x37, 0x55, 0x55, 0x15, 0x17, 0x15, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x48, 0x58, 0x58, 0x40,
++ 0xfc, 0xb4, 0xb4, 0xb4, 0xfc, 0xb4, 0x00, 0x00,
++ 0x13, 0x1f, 0x68, 0x13, 0x2b, 0x7f, 0x3a, 0x57,
++ 0x11, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x90, 0xd8, 0x68, 0x90, 0xa8, 0xfc, 0xb8, 0xd4,
++ 0x10, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x7f, 0x17, 0x15, 0x3f, 0x37,
++ 0x36, 0x53, 0x53, 0x13, 0x11, 0x1e, 0x00, 0x00,
++ 0x20, 0xfc, 0x40, 0xb8, 0xfc, 0x74, 0xfc, 0xf0,
++ 0x10, 0xf0, 0xf0, 0xf4, 0xa4, 0x1c, 0x00, 0x00,
++ 0x12, 0x7f, 0x17, 0x3d, 0x57, 0x3f, 0x2a, 0x7b,
++ 0x36, 0x2b, 0x3f, 0x26, 0x38, 0x1f, 0x00, 0x00,
++ 0x10, 0xfc, 0xd0, 0x78, 0xd4, 0xfc, 0x88, 0x90,
++ 0xe8, 0x90, 0xe4, 0x08, 0xb0, 0xc0, 0x00, 0x00,
++ 0x14, 0x1f, 0x14, 0x7f, 0x1b, 0x1f, 0x35, 0x3f,
++ 0x3d, 0x57, 0x57, 0x15, 0x17, 0x14, 0x00, 0x00,
++ 0x80, 0xf8, 0xa8, 0xe8, 0x78, 0xe8, 0x38, 0xe8,
++ 0x28, 0xb8, 0xb0, 0x54, 0xd4, 0x8c, 0x00, 0x00,
++ 0x08, 0x08, 0x0c, 0x12, 0x7d, 0x20, 0x3f, 0x28,
++ 0x48, 0x7f, 0x08, 0x14, 0x23, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x02, 0x34, 0x1c, 0x6a, 0x08, 0x7f, 0x11, 0x28,
++ 0x7e, 0x2a, 0x2a, 0x2e, 0x29, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x11, 0x09, 0x41, 0x21, 0x0a, 0x14, 0x20, 0x21,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0x50, 0x60, 0x90, 0x0c,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x0c, 0x12, 0x22, 0x7f, 0x02,
++ 0x3a, 0x2a, 0x2a, 0x3a, 0x02, 0x07, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x0c, 0x12, 0x1e, 0x20, 0x7e, 0x23, 0x3e,
++ 0x22, 0x3e, 0x3e, 0x20, 0x3e, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x11, 0x1f,
++ 0x29, 0x6d, 0x2b, 0x33, 0x3d, 0x27, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x03, 0x3c, 0x08, 0x7f, 0x08, 0x18, 0x6b, 0x49,
++ 0x49, 0x6b, 0x49, 0x49, 0x7f, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x12, 0x34, 0x7f, 0x14, 0x3f, 0x15, 0x7f, 0x15,
++ 0x3f, 0x16, 0x35, 0x35, 0x54, 0x15, 0x00, 0x00,
++ 0x40, 0x40, 0xc0, 0x40, 0x7c, 0xa4, 0xa8, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x40, 0x5e, 0x52, 0x5e, 0x40, 0x7f,
++ 0x6d, 0x6d, 0x7f, 0x40, 0x7f, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x7c, 0xa4, 0xa8, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x0c, 0x12, 0x3f, 0x5e, 0x12, 0x1f, 0x7f,
++ 0x1b, 0x2d, 0x5b, 0x2d, 0x49, 0x1b, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x07, 0x04, 0x3f, 0x2b, 0x3d, 0x27, 0x2a,
++ 0x3b, 0x3b, 0x3b, 0x2a, 0x4f, 0x39, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xc0, 0x7c, 0xa4, 0xa8, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x0a, 0x11, 0x3f, 0x40, 0x3f, 0x2d,
++ 0x3f, 0x12, 0x1a, 0x17, 0x24, 0x49, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x18, 0x29, 0x2e, 0x28, 0x3f, 0x22, 0x2a, 0x3b,
++ 0x2a, 0x2a, 0x7f, 0x0a, 0x11, 0x61, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa0, 0xfc, 0xe4, 0xa8, 0xb0,
++ 0xa0, 0xa0, 0xd0, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x77, 0x55, 0x77, 0x3f, 0x24,
++ 0x7f, 0x24, 0x3f, 0x24, 0x3f, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0xa4, 0x28, 0x30,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x3e, 0x22, 0x3f, 0x20, 0x3e, 0x22, 0x3f,
++ 0x09, 0x2e, 0x28, 0x28, 0x2e, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xfc, 0x08, 0xf8, 0x00, 0xfc,
++ 0x28, 0xf8, 0xa8, 0xa8, 0xb8, 0x20, 0x00, 0x00,
++ 0x00, 0x7f, 0x02, 0x02, 0x03, 0x04, 0x04, 0x0a,
++ 0x11, 0x21, 0x00, 0x01, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x20,
++ 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x10, 0x1e, 0x13, 0x32, 0x2b,
++ 0x4c, 0x04, 0x08, 0x10, 0x20, 0x47, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x88, 0x08, 0x30, 0xf8,
++ 0x88, 0x90, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x10, 0x1e, 0x22, 0x33, 0x4a,
++ 0x0c, 0x04, 0x08, 0x11, 0x22, 0x44, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0x40, 0xfc, 0x40,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x10, 0x1f, 0x22, 0x32, 0x4b,
++ 0x0c, 0x04, 0x09, 0x10, 0x20, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0x28, 0x44, 0x80,
++ 0x10, 0x60, 0x88, 0x10, 0x60, 0x80, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x11, 0x1d, 0x25, 0x25, 0x57,
++ 0x18, 0x08, 0x10, 0x11, 0x22, 0x44, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xfc,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x7e, 0x13, 0x11, 0x1d, 0x26, 0x27, 0x54,
++ 0x18, 0x0f, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x48, 0x24, 0x04, 0xf8, 0x10,
++ 0x60, 0xfc, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x13, 0x1c, 0x24, 0x25, 0x54,
++ 0x08, 0x0b, 0x10, 0x10, 0x20, 0x43, 0x00, 0x00,
++ 0x50, 0x48, 0x7c, 0xc8, 0x30, 0x74, 0x8c, 0x54,
++ 0x7c, 0xc8, 0x50, 0x34, 0xdc, 0x04, 0x00, 0x00,
++ 0x00, 0x7e, 0x13, 0x11, 0x1c, 0x24, 0x27, 0x54,
++ 0x19, 0x09, 0x11, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0x90, 0xa0, 0xfc, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7d, 0x11, 0x11, 0x1c, 0x25, 0x25, 0x55,
++ 0x19, 0x09, 0x11, 0x11, 0x21, 0x46, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x01, 0x7f, 0x11, 0x13, 0x1d, 0x25, 0x25, 0x57,
++ 0x19, 0x09, 0x12, 0x14, 0x21, 0x42, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xf8, 0xa8, 0xa8, 0x48, 0xb0, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x11, 0x1c, 0x27, 0x26, 0x57,
++ 0x19, 0x09, 0x11, 0x10, 0x27, 0x40, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x00, 0xfc, 0x08, 0xf8,
++ 0xf0, 0x10, 0xf0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x13, 0x1c, 0x27, 0x26, 0x57,
++ 0x1a, 0x0b, 0x10, 0x17, 0x20, 0x40, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0x00, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x15, 0x1d, 0x26, 0x25, 0x57,
++ 0x19, 0x09, 0x11, 0x11, 0x21, 0x46, 0x00, 0x00,
++ 0x40, 0xfc, 0x08, 0xf8, 0x50, 0x60, 0xf8, 0x08,
++ 0xf8, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x02, 0x7e, 0x13, 0x15, 0x38, 0x2f, 0x2a, 0x6e,
++ 0x5a, 0x1e, 0x12, 0x16, 0x23, 0x4e, 0x00, 0x00,
++ 0xa0, 0xb0, 0xe8, 0x68, 0x20, 0xfc, 0xa0, 0xe8,
++ 0xa8, 0xd0, 0xd4, 0x9c, 0xec, 0x44, 0x00, 0x00,
++ 0x01, 0x7d, 0x17, 0x11, 0x3f, 0x2a, 0x2e, 0x6a,
++ 0x5e, 0x1a, 0x16, 0x13, 0x2e, 0x40, 0x00, 0x00,
++ 0x20, 0x30, 0xe8, 0x28, 0xfc, 0xa0, 0xe8, 0xa8,
++ 0xe8, 0xd0, 0x94, 0xec, 0x4c, 0x84, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x08, 0x08, 0x10, 0x60, 0x3f,
++ 0x08, 0x04, 0x02, 0x03, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xc0, 0x40, 0x44, 0x44, 0x3c, 0x00, 0xe0,
++ 0x20, 0x40, 0x80, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x06, 0x38, 0x20, 0x3e, 0x22, 0x3e, 0x23, 0x3f,
++ 0x20, 0x3e, 0x22, 0x22, 0x22, 0x4f, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x94, 0x94, 0x8c, 0x00, 0xf8,
++ 0x88, 0x50, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x00, 0x3f, 0x22, 0x5d,
++ 0x00, 0x1c, 0x14, 0x16, 0x24, 0x4b, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x50, 0x54, 0x54, 0x8c, 0xf8,
++ 0x88, 0x50, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x40, 0x5e, 0x52, 0x5e, 0x41, 0x7f,
++ 0x6d, 0x6d, 0x7f, 0x40, 0x7f, 0x41, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x50, 0x54, 0x94, 0x0c, 0xf8,
++ 0x48, 0x50, 0x30, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x11, 0x11, 0x7f, 0x11,
++ 0x11, 0x11, 0x11, 0x3f, 0x20, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10,
++ 0x10, 0x10, 0x10, 0xfc, 0x20, 0xc0, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x20, 0x7e, 0x33, 0x2a, 0x7f,
++ 0x32, 0x2a, 0x3f, 0x22, 0x05, 0x0e, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x30, 0x48, 0xfc, 0x04, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xac, 0x2c, 0x04, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x23, 0x41, 0x0e, 0x70, 0x1f,
++ 0x03, 0x3e, 0x03, 0x7e, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0x10, 0x18, 0x64, 0x84, 0x00, 0xe0, 0x00,
++ 0xf0, 0x00, 0xfc, 0x00, 0x04, 0xfc, 0x00, 0x00,
++ 0x04, 0x08, 0x73, 0x10, 0x1e, 0x71, 0x11, 0x1c,
++ 0x71, 0x16, 0x10, 0x10, 0x10, 0x0f, 0x00, 0x00,
++ 0x50, 0x48, 0xf8, 0x40, 0x48, 0x68, 0x70, 0xd0,
++ 0x48, 0x44, 0x40, 0xc4, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f, 0x3f, 0x20,
++ 0x4f, 0x03, 0x1e, 0x03, 0x3e, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0xfc, 0xc8,
++ 0x00, 0xf0, 0x00, 0xf8, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x0f, 0x03, 0x1e, 0x03, 0x3e, 0x01, 0x06,
++ 0x38, 0x0e, 0x38, 0x0f, 0x79, 0x0f, 0x00, 0x00,
++ 0xc0, 0x00, 0xe0, 0x00, 0xf0, 0x08, 0xf8, 0x18,
++ 0xe0, 0x38, 0xe0, 0x3c, 0xe4, 0x3c, 0x00, 0x00,
++ 0x04, 0x09, 0x71, 0x12, 0x1c, 0x71, 0x12, 0x1d,
++ 0x71, 0x12, 0x10, 0x11, 0x12, 0x0f, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0x60, 0x90, 0x50, 0x48, 0x48,
++ 0x50, 0x60, 0x90, 0x14, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x26, 0x36, 0x37, 0x24,
++ 0x27, 0x21, 0x2f, 0x21, 0x3f, 0x40, 0x00, 0x00,
++ 0x80, 0xfc, 0x20, 0xfc, 0xb0, 0xb4, 0x2c, 0x60,
++ 0x80, 0xf0, 0x00, 0xfc, 0x04, 0xfc, 0x00, 0x00,
++ 0x04, 0x7f, 0x3f, 0x2e, 0x2a, 0x2e, 0x3f, 0x1f,
++ 0x11, 0x1f, 0x1f, 0x11, 0x1f, 0x70, 0x00, 0x00,
++ 0x08, 0xd0, 0xe0, 0xa0, 0xb8, 0xe0, 0xa0, 0x20,
++ 0x3c, 0xe0, 0x20, 0x24, 0xa4, 0x1c, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x12, 0x7f, 0x42, 0x42, 0x43,
++ 0x42, 0x46, 0x3e, 0x02, 0x03, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x48, 0x40, 0xfc,
++ 0x40, 0x20, 0x24, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x10, 0x3f, 0x40, 0x3f, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xe0, 0x00, 0xf0, 0x10,
++ 0x10, 0x10, 0x14, 0x0c, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x10, 0x3f, 0x40, 0x3f, 0x0f,
++ 0x10, 0x7f, 0x04, 0x08, 0x10, 0x63, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xf0, 0x10,
++ 0x90, 0xf0, 0x94, 0x8c, 0x8c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x10, 0x3f, 0x40, 0x3f, 0x1f,
++ 0x12, 0x1f, 0x15, 0x18, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xe0, 0x00, 0xf0, 0xd0,
++ 0x50, 0xd0, 0x54, 0xcc, 0xcc, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x10, 0x3f, 0x40, 0x3f, 0x12,
++ 0x0a, 0x3f, 0x07, 0x0a, 0x32, 0x02, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x00, 0xe0, 0x00, 0xf0, 0x50,
++ 0x90, 0xd0, 0x14, 0x8c, 0x4c, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x7d,
++ 0x05, 0x09, 0x09, 0x11, 0x61, 0x03, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x00, 0x88, 0x88,
++ 0x50, 0x60, 0x20, 0x10, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x42, 0x22, 0x22, 0x02, 0x0a,
++ 0x0a, 0x12, 0x12, 0x23, 0x22, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0xf8, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x20, 0x23, 0x00, 0x08,
++ 0x08, 0x10, 0x10, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x40, 0x20, 0x20, 0x03, 0x08,
++ 0x08, 0x10, 0x10, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x22, 0x23, 0x02, 0x0a,
++ 0x0a, 0x12, 0x12, 0x24, 0x24, 0x28, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x40, 0x21, 0x21, 0x01, 0x09,
++ 0x0b, 0x12, 0x10, 0x20, 0x2f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf0, 0x10, 0x10, 0x10,
++ 0xf0, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x42, 0x22, 0x22, 0x02, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x2f, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x78, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x20, 0x20, 0x02, 0x0a,
++ 0x0a, 0x14, 0x14, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x20, 0x20, 0x80, 0x80, 0x80, 0x88, 0x84,
++ 0x84, 0x80, 0x80, 0x88, 0x88, 0x78, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x20, 0x20, 0x03, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x48,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x08, 0x09, 0x41, 0x22, 0x22, 0x07, 0x08,
++ 0x08, 0x10, 0x11, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0xe0, 0x20, 0x20, 0x10, 0x10, 0x08, 0xf4, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x22, 0x22, 0x03, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x23, 0x22, 0x02, 0x0a,
++ 0x0a, 0x12, 0x12, 0x24, 0x27, 0x2c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x41, 0x22, 0x24, 0x00, 0x0b,
++ 0x09, 0x10, 0x10, 0x20, 0x21, 0x2e, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x70, 0x00, 0xf8,
++ 0x08, 0x90, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x27, 0x20, 0x00, 0x08,
++ 0x09, 0x11, 0x12, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0xe0, 0xe0,
++ 0x50, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x12, 0x0a, 0x0a, 0x42, 0x27, 0x22, 0x02, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x50, 0x50, 0x50, 0x50, 0xfc, 0x50, 0x50, 0x50,
++ 0x50, 0x70, 0x50, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x43, 0x22, 0x22, 0x02, 0x0a,
++ 0x0f, 0x10, 0x10, 0x20, 0x23, 0x2c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x48,
++ 0xfc, 0x40, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x0f, 0x09, 0x41, 0x27, 0x24, 0x04, 0x0f,
++ 0x0d, 0x11, 0x11, 0x21, 0x21, 0x26, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x30, 0x48, 0x48, 0x5c, 0xe4, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x20, 0x20, 0x00, 0x0b,
++ 0x0a, 0x12, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0f, 0x0d, 0x45, 0x25, 0x25, 0x05, 0x0d,
++ 0x0e, 0x16, 0x14, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0x48, 0x58,
++ 0x58, 0x38, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0f, 0x0c, 0x44, 0x24, 0x24, 0x04, 0x0c,
++ 0x0d, 0x15, 0x16, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x88, 0x88, 0x88, 0x88, 0xc8,
++ 0x48, 0x28, 0x18, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x22, 0x23, 0x02, 0x0a,
++ 0x0a, 0x12, 0x12, 0x24, 0x24, 0x28, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x00, 0x00, 0xfc, 0x20, 0xe0,
++ 0x30, 0x28, 0x24, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x41, 0x21, 0x21, 0x01, 0x09,
++ 0x09, 0x11, 0x11, 0x21, 0x2f, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x25, 0x21, 0x01, 0x09,
++ 0x09, 0x11, 0x11, 0x21, 0x21, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x00, 0x00, 0x08, 0x30,
++ 0xc0, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x20, 0x20, 0x00, 0x0b,
++ 0x0a, 0x12, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x40, 0x40, 0x40, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x22, 0x22, 0x03, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0xf8, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x40, 0x20, 0x27, 0x00, 0x08,
++ 0x08, 0x10, 0x12, 0x23, 0x24, 0x28, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0xf8, 0x08, 0x10,
++ 0x10, 0x20, 0x40, 0x80, 0xc0, 0x3c, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x23, 0x22, 0x02, 0x0b,
++ 0x0a, 0x12, 0x12, 0x22, 0x23, 0x2e, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x48, 0x40, 0xfc,
++ 0x20, 0x20, 0x10, 0x14, 0xcc, 0x04, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x41, 0x21, 0x22, 0x00, 0x0f,
++ 0x08, 0x10, 0x10, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x50, 0x48, 0x48, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x22, 0x23, 0x02, 0x0a,
++ 0x0b, 0x12, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x40, 0x23, 0x20, 0x03, 0x0a,
++ 0x0b, 0x12, 0x10, 0x20, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x40,
++ 0xfc, 0x44, 0x58, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x12, 0x11, 0x21, 0x48, 0x0c, 0x12, 0x12, 0x30,
++ 0x51, 0x11, 0x12, 0x12, 0x14, 0x14, 0x00, 0x00,
++ 0x00, 0x78, 0x00, 0x00, 0x00, 0xfc, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x43, 0x22, 0x24, 0x0e, 0x15,
++ 0x14, 0x25, 0x26, 0x47, 0x44, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0x48, 0x68, 0xa8,
++ 0xa8, 0x68, 0x28, 0xe8, 0x28, 0x30, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x43, 0x22, 0x22, 0x02, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x21, 0x23, 0x04, 0x08,
++ 0x0b, 0x12, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x0a, 0x41, 0x21, 0x20, 0x07, 0x08,
++ 0x08, 0x10, 0x11, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0x48, 0x48, 0x50, 0x40, 0xfc, 0xa0,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x41, 0x22, 0x24, 0x07, 0x08,
++ 0x08, 0x11, 0x11, 0x22, 0x24, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0xe0,
++ 0xe0, 0x50, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x41, 0x22, 0x23, 0x06, 0x0b,
++ 0x0a, 0x13, 0x12, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xf8, 0x08, 0xc8, 0x48, 0xc8,
++ 0x48, 0xc8, 0x48, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x41, 0x2f, 0x22, 0x02, 0x0a,
++ 0x0a, 0x17, 0x11, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x00, 0x00, 0x38, 0x28, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x78, 0x28, 0x00, 0x00, 0x00,
++ 0x10, 0x0f, 0x09, 0x41, 0x27, 0x25, 0x05, 0x0d,
++ 0x0d, 0x16, 0x16, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x58,
++ 0x58, 0x38, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0f, 0x0a, 0x42, 0x23, 0x24, 0x04, 0x0e,
++ 0x09, 0x11, 0x11, 0x22, 0x24, 0x28, 0x00, 0x00,
++ 0x08, 0xc8, 0x28, 0x28, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0x28, 0x28, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x27, 0x20, 0x00, 0x0f,
++ 0x08, 0x10, 0x11, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xf8, 0x00, 0x00, 0xfc,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x23, 0x20, 0x03, 0x0a,
++ 0x0b, 0x12, 0x13, 0x22, 0x22, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x00, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x24, 0x20, 0x07, 0x08,
++ 0x09, 0x11, 0x12, 0x24, 0x28, 0x23, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x80, 0x80, 0xfc, 0x80,
++ 0x20, 0x20, 0x50, 0x48, 0xfc, 0x84, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x21, 0x21, 0x02, 0x0c,
++ 0x09, 0x13, 0x14, 0x20, 0x21, 0x2e, 0x00, 0x00,
++ 0x40, 0x50, 0x98, 0xe4, 0x20, 0x24, 0x9c, 0xf0,
++ 0x10, 0x20, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x21, 0x21, 0x01, 0x0a,
++ 0x0c, 0x10, 0x10, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x50, 0x50, 0x58, 0xe4,
++ 0x44, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x12, 0x0a, 0x0a, 0x4f, 0x22, 0x22, 0x02, 0x0a,
++ 0x0b, 0x1e, 0x12, 0x22, 0x22, 0x27, 0x00, 0x00,
++ 0x08, 0x10, 0x60, 0xc0, 0x40, 0x7c, 0x50, 0xd0,
++ 0x50, 0x50, 0x50, 0x90, 0x90, 0x10, 0x00, 0x00,
++ 0x10, 0x0f, 0x09, 0x41, 0x22, 0x22, 0x07, 0x09,
++ 0x0d, 0x15, 0x12, 0x23, 0x24, 0x28, 0x00, 0x00,
++ 0x04, 0x08, 0x70, 0x10, 0x10, 0x50, 0x5c, 0x50,
++ 0x50, 0x50, 0x50, 0x3c, 0x80, 0x7c, 0x00, 0x00,
++ 0x12, 0x09, 0x09, 0x47, 0x20, 0x23, 0x02, 0x0b,
++ 0x0a, 0x10, 0x11, 0x22, 0x2c, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xf8, 0x48, 0xf8, 0x40, 0xfc,
++ 0xc4, 0xc4, 0x44, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x20, 0x17, 0x10, 0x43, 0x2f, 0x23, 0x00, 0x13,
++ 0x1f, 0x20, 0x27, 0x45, 0x47, 0x40, 0x00, 0x00,
++ 0x80, 0xf8, 0x80, 0xf0, 0xfc, 0xe8, 0x80, 0xf0,
++ 0xfc, 0x10, 0xfc, 0x50, 0x30, 0x30, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x02, 0x08,
++ 0x0b, 0x10, 0x10, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x48, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x41, 0x21, 0x22, 0x07, 0x0a,
++ 0x0b, 0x12, 0x13, 0x22, 0x20, 0x20, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0x50, 0x48, 0xfc, 0x48,
++ 0xf8, 0x48, 0xf8, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x0c, 0x0a, 0x43, 0x27, 0x21, 0x01, 0x0f,
++ 0x09, 0x11, 0x12, 0x24, 0x28, 0x20, 0x00, 0x00,
++ 0x08, 0x88, 0xa8, 0x28, 0xe8, 0x28, 0x28, 0xe8,
++ 0x28, 0xa8, 0x68, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x12, 0x0a, 0x0b, 0x42, 0x22, 0x22, 0x03, 0x0a,
++ 0x0a, 0x12, 0x13, 0x26, 0x24, 0x28, 0x00, 0x00,
++ 0x08, 0x48, 0x58, 0xd8, 0xe8, 0x48, 0xf8, 0x48,
++ 0xe8, 0xd8, 0x58, 0x48, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0x1f, 0x11, 0x41, 0x29, 0x2e, 0x0a, 0x1a,
++ 0x19, 0x2e, 0x28, 0x49, 0x4f, 0x48, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xa8, 0xa8, 0xc8, 0xc8,
++ 0xa8, 0xa8, 0x98, 0x88, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x47, 0x21, 0x21, 0x01, 0x09,
++ 0x09, 0x17, 0x10, 0x20, 0x21, 0x26, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0xfc, 0x10, 0xf0, 0x10, 0xf0,
++ 0x10, 0xfc, 0x00, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x41, 0x23, 0x24, 0x00, 0x0b,
++ 0x08, 0x12, 0x11, 0x21, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x44, 0x40, 0xf8,
++ 0x40, 0x48, 0x48, 0x50, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x23, 0x22, 0x02, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xe8,
++ 0xa8, 0xa8, 0xe8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x09, 0x08, 0x43, 0x27, 0x20, 0x01, 0x09,
++ 0x0b, 0x15, 0x19, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x10, 0xe0, 0xd0, 0x48, 0xfc, 0x80, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x41, 0x21, 0x21, 0x02, 0x0c,
++ 0x08, 0x17, 0x10, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x10, 0x18, 0xa4, 0x44,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x22, 0x12, 0x12, 0x4f, 0x22, 0x23, 0x06, 0x16,
++ 0x16, 0x2a, 0x2a, 0x42, 0x43, 0x42, 0x00, 0x00,
++ 0x70, 0x10, 0x50, 0xd0, 0x48, 0x48, 0xa4, 0xa0,
++ 0x20, 0x30, 0x48, 0x58, 0xe4, 0x04, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x42, 0x24, 0x23, 0x02, 0x0a,
++ 0x0a, 0x12, 0x12, 0x22, 0x22, 0x22, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xf8, 0x08, 0xe8,
++ 0xa8, 0xa8, 0xa8, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x24, 0x23, 0x00, 0x0f,
++ 0x08, 0x13, 0x10, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x44, 0x04, 0xf8, 0x48, 0xfc,
++ 0x48, 0xf8, 0x48, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x43, 0x20, 0x27, 0x00, 0x0b,
++ 0x08, 0x17, 0x10, 0x21, 0x20, 0x27, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0x40, 0xfc, 0x90, 0xe0, 0x70, 0x88, 0x00, 0x00,
++ 0x22, 0x12, 0x12, 0x4f, 0x22, 0x23, 0x06, 0x16,
++ 0x16, 0x2a, 0x2a, 0x52, 0x43, 0x42, 0x00, 0x00,
++ 0x08, 0x10, 0x60, 0xc0, 0x40, 0x7c, 0xd0, 0xd0,
++ 0x50, 0x50, 0x90, 0x90, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x47, 0x20, 0x20, 0x03, 0x08,
++ 0x08, 0x17, 0x10, 0x20, 0x20, 0x27, 0x00, 0x00,
++ 0x90, 0x88, 0xfc, 0x90, 0x50, 0x64, 0x9c, 0xa4,
++ 0xfc, 0x90, 0x50, 0x24, 0xdc, 0x04, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x25, 0x20, 0x00, 0x0f,
++ 0x08, 0x11, 0x11, 0x22, 0x24, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xf0, 0x00, 0x00, 0xfc,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x12, 0x0a, 0x0a, 0x42, 0x2f, 0x22, 0x02, 0x0b,
++ 0x0a, 0x12, 0x14, 0x24, 0x28, 0x33, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x50, 0xd0, 0x88, 0x24, 0x90,
++ 0x90, 0xc0, 0xa0, 0x90, 0x88, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x40, 0x27, 0x21, 0x01, 0x0a,
++ 0x0c, 0x13, 0x10, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0x20, 0x24, 0x5c,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x41, 0x23, 0x24, 0x03, 0x0a,
++ 0x0a, 0x13, 0x12, 0x22, 0x22, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xf8, 0xa8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x11, 0x09, 0x09, 0x43, 0x22, 0x22, 0x07, 0x0a,
++ 0x0a, 0x13, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0f, 0x0c, 0x47, 0x24, 0x27, 0x04, 0x0b,
++ 0x0a, 0x13, 0x12, 0x23, 0x22, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x0f, 0x09, 0x47, 0x25, 0x25, 0x06, 0x0f,
++ 0x08, 0x17, 0x10, 0x20, 0x2f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0x58, 0x38, 0xf8,
++ 0x80, 0xf8, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x09, 0x0f, 0x41, 0x21, 0x27, 0x00, 0x0b,
++ 0x0a, 0x12, 0x13, 0x22, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0x10, 0xfc, 0x08, 0xc8,
++ 0x48, 0x48, 0xc8, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x20, 0x11, 0x12, 0x4f, 0x25, 0x25, 0x05, 0x16,
++ 0x14, 0x2f, 0x20, 0x41, 0x46, 0x58, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0xf8, 0x48, 0x58, 0x58, 0x38,
++ 0x88, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x25, 0x20, 0x07, 0x08,
++ 0x09, 0x11, 0x12, 0x24, 0x28, 0x23, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x44, 0xf4, 0x80, 0xfc, 0x80,
++ 0xf8, 0x48, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x23, 0x22, 0x03, 0x08,
++ 0x0f, 0x10, 0x13, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00,
++ 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x47, 0x20, 0x23, 0x02, 0x0b,
++ 0x0a, 0x13, 0x10, 0x27, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x40, 0x21, 0x26, 0x01, 0x09,
++ 0x09, 0x11, 0x11, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x20, 0x11, 0x1e, 0x42, 0x22, 0x2f, 0x02, 0x17,
++ 0x16, 0x2a, 0x2a, 0x52, 0x42, 0x43, 0x00, 0x00,
++ 0xa0, 0x20, 0x20, 0x24, 0x64, 0xe8, 0x70, 0xa0,
++ 0xb0, 0xb0, 0x50, 0x48, 0x88, 0x04, 0x00, 0x00,
++ 0x11, 0x09, 0x0f, 0x41, 0x21, 0x21, 0x01, 0x08,
++ 0x0f, 0x10, 0x11, 0x22, 0x24, 0x20, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x70, 0x00, 0xf8, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x23, 0x22, 0x03, 0x08,
++ 0x0f, 0x10, 0x11, 0x22, 0x2c, 0x20, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x44,
++ 0xe4, 0xe8, 0x50, 0x48, 0x44, 0xc0, 0x00, 0x00,
++ 0x10, 0x0a, 0x0a, 0x42, 0x23, 0x20, 0x07, 0x08,
++ 0x0b, 0x12, 0x12, 0x22, 0x22, 0x22, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x80,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x41, 0x21, 0x21, 0x00, 0x0b,
++ 0x0a, 0x17, 0x10, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x08, 0xf8, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x09, 0x0f, 0x41, 0x21, 0x27, 0x01, 0x09,
++ 0x09, 0x17, 0x11, 0x22, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0xfc, 0x10, 0x10, 0x7c, 0x90, 0x10, 0x7c,
++ 0x90, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x20, 0x1f, 0x19, 0x49, 0x2f, 0x29, 0x09, 0x1f,
++ 0x19, 0x29, 0x2f, 0x49, 0x40, 0x43, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x70, 0x68, 0x68, 0xa4, 0x2c,
++ 0x28, 0x70, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x41, 0x27, 0x25, 0x05, 0x0d,
++ 0x0d, 0x15, 0x15, 0x25, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x00, 0xf8, 0x28, 0x28, 0xe8,
++ 0x28, 0xe8, 0x28, 0x28, 0xf8, 0x08, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x42, 0x2f, 0x28, 0x17, 0x11,
++ 0x12, 0x23, 0x2e, 0x42, 0x42, 0x47, 0x00, 0x00,
++ 0x20, 0x20, 0xe0, 0x20, 0xf8, 0xa8, 0x28, 0x28,
++ 0x28, 0xa8, 0x48, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x22, 0x1f, 0x12, 0x43, 0x20, 0x2f, 0x08, 0x1e,
++ 0x1a, 0x2a, 0x2d, 0x48, 0x48, 0x48, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xe0, 0x80, 0xf8, 0x88, 0xe8,
++ 0xa8, 0xa8, 0xd8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x11, 0x08, 0x08, 0x41, 0x23, 0x2c, 0x07, 0x0c,
++ 0x0e, 0x15, 0x16, 0x25, 0x24, 0x25, 0x00, 0x00,
++ 0xc0, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xa8, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x12, 0x0a, 0x0a, 0x42, 0x2f, 0x22, 0x02, 0x0b,
++ 0x0a, 0x12, 0x12, 0x24, 0x24, 0x2b, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x3c, 0xc0, 0xf8, 0x08, 0x90,
++ 0x90, 0xfc, 0x90, 0x90, 0x90, 0x30, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x42, 0x2f, 0x2a, 0x0a, 0x1f,
++ 0x12, 0x27, 0x26, 0x4a, 0x52, 0x42, 0x00, 0x00,
++ 0x08, 0x28, 0xe8, 0x28, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0x28, 0x28, 0xa8, 0x88, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x24, 0x21, 0x00, 0x08,
++ 0x0b, 0x10, 0x17, 0x20, 0x21, 0x26, 0x00, 0x00,
++ 0x18, 0xf0, 0x88, 0x44, 0x54, 0x90, 0xa0, 0x50,
++ 0xf8, 0x48, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x40, 0x27, 0x20, 0x01, 0x0f,
++ 0x08, 0x13, 0x12, 0x22, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0xa0, 0x10, 0xf8,
++ 0x08, 0xf8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x02, 0x09,
++ 0x09, 0x17, 0x10, 0x20, 0x21, 0x26, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x48, 0x48,
++ 0x50, 0xfc, 0xa0, 0xa0, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x0f, 0x0c, 0x47, 0x24, 0x25, 0x06, 0x0d,
++ 0x0e, 0x15, 0x16, 0x25, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x88, 0xd8, 0xd8, 0x68,
++ 0xe8, 0x58, 0x58, 0x88, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x24, 0x23, 0x01, 0x08,
++ 0x0f, 0x10, 0x13, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0x40, 0xf8, 0x10, 0xa0,
++ 0xfc, 0x40, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x27, 0x05, 0x09,
++ 0x0f, 0x10, 0x17, 0x21, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x00, 0xfc, 0x28, 0xd0,
++ 0x1c, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x28, 0x14, 0x15, 0x4f, 0x22, 0x2a, 0x0a, 0x1a,
++ 0x1f, 0x2a, 0x22, 0x42, 0x44, 0x49, 0x00, 0x00,
++ 0x80, 0xb8, 0x28, 0xe8, 0x28, 0xb8, 0xa8, 0xa8,
++ 0xb8, 0xa8, 0x48, 0x48, 0x88, 0x18, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x41, 0x22, 0x25, 0x01, 0x09,
++ 0x09, 0x12, 0x13, 0x25, 0x29, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xf0, 0x08, 0xf4, 0x10, 0xf0,
++ 0xf0, 0x00, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x0a, 0x0a, 0x43, 0x22, 0x23, 0x02, 0x08,
++ 0x0b, 0x11, 0x10, 0x20, 0x21, 0x2e, 0x00, 0x00,
++ 0x40, 0x58, 0x48, 0x58, 0x48, 0x58, 0x48, 0x40,
++ 0xf8, 0x10, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x42, 0x24, 0x20, 0x03, 0x0a,
++ 0x0a, 0x13, 0x12, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x24, 0x24, 0x80, 0x38, 0x08,
++ 0x08, 0xb8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x27, 0x24, 0x3f, 0x25, 0x26,
++ 0x3d, 0x24, 0x24, 0x27, 0x24, 0x4c, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0xf8, 0xa0, 0xfc, 0x50, 0x48,
++ 0x54, 0xd0, 0xe0, 0x50, 0x48, 0xc0, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x44, 0x25, 0x24, 0x07, 0x14,
++ 0x15, 0x24, 0x25, 0x49, 0x49, 0x51, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48,
++ 0xf8, 0x40, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x43, 0x22, 0x23, 0x02, 0x0b,
++ 0x0a, 0x10, 0x17, 0x21, 0x20, 0x20, 0x00, 0x00,
++ 0x50, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x41, 0x20, 0x27, 0x04, 0x08,
++ 0x0f, 0x10, 0x10, 0x20, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0x48, 0x40,
++ 0xfc, 0x40, 0x78, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x45, 0x21, 0x21, 0x01, 0x09,
++ 0x08, 0x17, 0x10, 0x20, 0x21, 0x26, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x40, 0xfc, 0x00, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x23, 0x3c, 0x20, 0x22, 0x1e, 0x08, 0x0a,
++ 0x7a, 0x1c, 0x2c, 0x2a, 0x49, 0x1b, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x49, 0x29, 0x2f, 0x09, 0x1f,
++ 0x18, 0x2f, 0x28, 0x4f, 0x48, 0x49, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0x50, 0x50, 0x50, 0xfc, 0x20,
++ 0x30, 0x30, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x43, 0x22, 0x23, 0x01, 0x13,
++ 0x16, 0x1b, 0x23, 0x22, 0x43, 0x42, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xb8, 0xa8, 0xb8, 0x20, 0xfc,
++ 0x40, 0xf8, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x20, 0x1f, 0x10, 0x47, 0x24, 0x27, 0x05, 0x15,
++ 0x15, 0x27, 0x26, 0x4b, 0x4a, 0x51, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0xf0, 0x10,
++ 0xf0, 0xf8, 0x48, 0xf8, 0x04, 0xfc, 0x00, 0x00,
++ 0x20, 0x17, 0x10, 0x4f, 0x20, 0x27, 0x00, 0x17,
++ 0x10, 0x27, 0x25, 0x45, 0x47, 0x45, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x50, 0x90, 0x10, 0x10,
++ 0xfc, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x0f, 0x09, 0x42, 0x2f, 0x22, 0x02, 0x0b,
++ 0x08, 0x11, 0x1f, 0x21, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0xfc, 0x10, 0x08, 0xf4, 0x10, 0x10, 0xf0,
++ 0xc8, 0x28, 0x30, 0x10, 0xc8, 0x04, 0x00, 0x00,
++ 0x24, 0x24, 0x3f, 0x04, 0x7f, 0x15, 0x24, 0x45,
++ 0x01, 0x7f, 0x05, 0x19, 0x61, 0x03, 0x00, 0x00,
++ 0x40, 0xf8, 0x50, 0xf0, 0x90, 0xfc, 0x90, 0x30,
++ 0x08, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x41, 0x21, 0x22, 0x07, 0x08,
++ 0x0b, 0x1d, 0x10, 0x21, 0x20, 0x23, 0x00, 0x00,
++ 0x40, 0x90, 0xf8, 0x10, 0x98, 0x64, 0xfc, 0xa0,
++ 0x50, 0xac, 0x48, 0x90, 0x60, 0x80, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x42, 0x2f, 0x2a, 0x0a, 0x1f,
++ 0x13, 0x26, 0x26, 0x4a, 0x52, 0x43, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0x20, 0xfc, 0xe4, 0xa8, 0xb0,
++ 0x20, 0xa0, 0xd0, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x25, 0x15, 0x1f, 0x45, 0x25, 0x28, 0x0f, 0x18,
++ 0x17, 0x24, 0x24, 0x44, 0x44, 0x40, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0xd4, 0x0c, 0xfc, 0x88,
++ 0xf0, 0x90, 0x90, 0x90, 0xe0, 0x80, 0x00, 0x00,
++ 0x20, 0x1e, 0x12, 0x42, 0x2e, 0x28, 0x08, 0x1f,
++ 0x1a, 0x22, 0x22, 0x42, 0x42, 0x4d, 0x00, 0x00,
++ 0x00, 0xf8, 0x80, 0xf0, 0x80, 0xf0, 0x80, 0xfc,
++ 0xa8, 0xa8, 0x90, 0xb0, 0xc8, 0x84, 0x00, 0x00,
++ 0x22, 0x12, 0x12, 0x45, 0x25, 0x2d, 0x15, 0x15,
++ 0x15, 0x25, 0x25, 0x45, 0x45, 0x44, 0x00, 0x00,
++ 0x20, 0x20, 0x7c, 0x48, 0xb0, 0x30, 0xec, 0x20,
++ 0xfc, 0x70, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x11, 0x0f, 0x08, 0x43, 0x20, 0x27, 0x03, 0x09,
++ 0x08, 0x17, 0x10, 0x21, 0x26, 0x20, 0x00, 0x00,
++ 0x10, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0xf0, 0xc0,
++ 0x68, 0xe8, 0xd0, 0x48, 0x44, 0xc0, 0x00, 0x00,
++ 0x20, 0x1f, 0x14, 0x47, 0x24, 0x25, 0x07, 0x10,
++ 0x1f, 0x28, 0x29, 0x4f, 0x48, 0x48, 0x00, 0x00,
++ 0x80, 0xfc, 0x50, 0x50, 0xd0, 0x30, 0xf0, 0x80,
++ 0xf8, 0xc8, 0x28, 0xd8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x40, 0x27, 0x24, 0x06, 0x0d,
++ 0x0e, 0x15, 0x15, 0x26, 0x27, 0x24, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0xf8, 0xa8, 0x68, 0x68,
++ 0xd8, 0xc8, 0xa8, 0x58, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x47, 0x21, 0x27, 0x01, 0x09,
++ 0x0e, 0x17, 0x10, 0x20, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xbc, 0x10, 0xbc,
++ 0x00, 0xfc, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x20, 0x17, 0x14, 0x47, 0x25, 0x24, 0x07, 0x14,
++ 0x17, 0x24, 0x29, 0x4f, 0x51, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0xf0, 0x60, 0xfc, 0x40,
++ 0xf8, 0x88, 0x90, 0x7c, 0x10, 0x30, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x42, 0x2a, 0x2a, 0x0a, 0x13,
++ 0x12, 0x23, 0x22, 0x43, 0x44, 0x48, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xd8, 0xdc, 0x94, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x20, 0x12, 0x12, 0x42, 0x22, 0x2f, 0x02, 0x1a,
++ 0x1b, 0x2a, 0x2a, 0x4b, 0x4e, 0x58, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x40, 0x40, 0xfc, 0x10, 0x50,
++ 0xdc, 0x50, 0x50, 0x50, 0xfc, 0x00, 0x00, 0x00,
++ 0x20, 0x1f, 0x12, 0x4a, 0x26, 0x24, 0x0b, 0x12,
++ 0x1b, 0x2a, 0x2a, 0x4b, 0x4e, 0x58, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xe8, 0xa8, 0xc8, 0xb0, 0x10,
++ 0xdc, 0x50, 0x50, 0x50, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x47, 0x20, 0x23, 0x07, 0x09,
++ 0x09, 0x16, 0x17, 0x21, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xfc, 0x10, 0xf0, 0xb8, 0x28,
++ 0xb8, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x22, 0x1f, 0x1a, 0x4a, 0x2f, 0x26, 0x07, 0x1a,
++ 0x13, 0x22, 0x23, 0x42, 0x43, 0x42, 0x00, 0x00,
++ 0x10, 0xfc, 0x50, 0x50, 0xfc, 0xb0, 0x34, 0x4c,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x26, 0x16, 0x1f, 0x4a, 0x3f, 0x25, 0x05, 0x15,
++ 0x1b, 0x22, 0x23, 0x42, 0x43, 0x42, 0x00, 0x00,
++ 0x30, 0x30, 0xfc, 0x50, 0xfc, 0x30, 0xb4, 0x4c,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x43, 0x22, 0x23, 0x01, 0x09,
++ 0x09, 0x11, 0x11, 0x27, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x22, 0x1a, 0x1a, 0x4a, 0x2f, 0x20, 0x0f, 0x10,
++ 0x1f, 0x22, 0x2f, 0x42, 0x43, 0x5c, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa0, 0xbc, 0x48, 0xe8, 0xa8,
++ 0xb0, 0x10, 0x90, 0x28, 0xc8, 0x84, 0x00, 0x00,
++ 0x10, 0x0b, 0x09, 0x47, 0x23, 0x22, 0x03, 0x0a,
++ 0x0b, 0x10, 0x13, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0xf8, 0x10, 0xfc, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x41, 0x2f, 0x20, 0x01, 0x0e,
++ 0x0b, 0x12, 0x13, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x18, 0xe8, 0x48, 0x50, 0xfc, 0xe0, 0x50, 0x4c,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x11, 0x09, 0x0f, 0x41, 0x27, 0x20, 0x07, 0x0c,
++ 0x0f, 0x14, 0x12, 0x22, 0x23, 0x2c, 0x00, 0x00,
++ 0x10, 0x10, 0xe0, 0x28, 0xc8, 0x10, 0xd0, 0x64,
++ 0xc4, 0x88, 0x88, 0xd0, 0x20, 0x40, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x43, 0x22, 0x22, 0x03, 0x08,
++ 0x0b, 0x12, 0x13, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xb8, 0xa8, 0xa8, 0xb8, 0xa0,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x20, 0x17, 0x14, 0x47, 0x24, 0x27, 0x04, 0x17,
++ 0x14, 0x27, 0x25, 0x4a, 0x4c, 0x50, 0x00, 0x00,
++ 0x40, 0xfc, 0xd8, 0xfc, 0xa0, 0xf8, 0xa8, 0xfc,
++ 0xa8, 0xf8, 0xb0, 0xa8, 0xa4, 0xa0, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x44, 0x23, 0x23, 0x0d, 0x09,
++ 0x09, 0x11, 0x12, 0x22, 0x24, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0x10, 0xf8, 0x14, 0xf0,
++ 0x10, 0xf0, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x23, 0x22, 0x03, 0x0a,
++ 0x0b, 0x10, 0x17, 0x20, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0xe8, 0x58, 0xe8, 0xf8, 0xe8,
++ 0x58, 0x40, 0xfc, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x22, 0x12, 0x1f, 0x42, 0x2f, 0x29, 0x0f, 0x19,
++ 0x1f, 0x22, 0x3f, 0x42, 0x42, 0x42, 0x00, 0x00,
++ 0x20, 0x20, 0xb0, 0x50, 0x48, 0xfc, 0x20, 0x20,
++ 0xfc, 0x20, 0xa0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x41, 0x20, 0x27, 0x04, 0x0f,
++ 0x08, 0x17, 0x10, 0x21, 0x26, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xbc, 0xa4, 0xbc,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x20, 0x23, 0x00, 0x0f,
++ 0x09, 0x17, 0x10, 0x23, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x40, 0xf8, 0x40, 0xfc,
++ 0x10, 0xfc, 0x40, 0xf8, 0x40, 0x40, 0x00, 0x00,
++ 0x20, 0x13, 0x1c, 0x47, 0x24, 0x27, 0x04, 0x17,
++ 0x14, 0x24, 0x25, 0x49, 0x49, 0x51, 0x00, 0x00,
++ 0x80, 0xf0, 0x40, 0xfc, 0xa4, 0x1c, 0xf0, 0xfc,
++ 0xf0, 0xf0, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x0b, 0x09, 0x07, 0x41, 0x23, 0x22, 0x0b,
++ 0x0a, 0x13, 0x12, 0x23, 0x21, 0x2e, 0x00, 0x00,
++ 0x40, 0xf8, 0x50, 0xfc, 0x10, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x43, 0x22, 0x27, 0x03, 0x08,
++ 0x0b, 0x1c, 0x13, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x48, 0x58, 0x58, 0xa0,
++ 0xf8, 0x04, 0xf8, 0x48, 0x70, 0x40, 0x00, 0x00,
++ 0x20, 0x1f, 0x11, 0x4f, 0x25, 0x25, 0x07, 0x1a,
++ 0x13, 0x22, 0x23, 0x42, 0x44, 0x48, 0x00, 0x00,
++ 0x80, 0xfc, 0x48, 0xb0, 0xa8, 0xa8, 0xb8, 0x14,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x43, 0x22, 0x23, 0x01, 0x0e,
++ 0x0b, 0x12, 0x17, 0x23, 0x24, 0x28, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x10, 0xe8,
++ 0x30, 0xa8, 0xfc, 0x48, 0xa4, 0xa4, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x42, 0x25, 0x21, 0x02, 0x09,
++ 0x0f, 0x11, 0x11, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0xe8, 0x10, 0x48, 0xa8, 0xf0,
++ 0x1c, 0xf0, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x20, 0x1f, 0x12, 0x4c, 0x2f, 0x29, 0x0e, 0x1b,
++ 0x1c, 0x29, 0x2e, 0x4b, 0x4c, 0x48, 0x00, 0x00,
++ 0x00, 0xfc, 0xb0, 0x88, 0xf8, 0x98, 0xe8, 0xa8,
++ 0xd8, 0x98, 0xe8, 0xa8, 0xd8, 0x98, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x45, 0x22, 0x24, 0x03, 0x0a,
++ 0x0f, 0x10, 0x13, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x48, 0xa8, 0x94, 0x74, 0xf8, 0xa8,
++ 0xfc, 0x00, 0xf8, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x45, 0x22, 0x24, 0x01, 0x0f,
++ 0x09, 0x11, 0x11, 0x21, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0xfc, 0x08, 0xf0, 0x58, 0xe4, 0xf8, 0x08,
++ 0xf8, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x22, 0x13, 0x12, 0x47, 0x24, 0x2c, 0x05, 0x14,
++ 0x14, 0x24, 0x25, 0x44, 0x44, 0x45, 0x00, 0x00,
++ 0x50, 0x54, 0xd8, 0xfc, 0x88, 0x50, 0xfc, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0x50, 0x8c, 0x00, 0x00,
++ 0x11, 0x0f, 0x09, 0x43, 0x22, 0x24, 0x07, 0x08,
++ 0x0f, 0x10, 0x13, 0x20, 0x23, 0x20, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xfc, 0xe8, 0x00, 0xfc, 0xc8,
++ 0x68, 0xf0, 0x70, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x47, 0x22, 0x23, 0x02, 0x0b,
++ 0x08, 0x13, 0x1e, 0x29, 0x25, 0x24, 0x00, 0x00,
++ 0x40, 0xfc, 0x88, 0x38, 0x08, 0xb8, 0x08, 0xf8,
++ 0x80, 0xfc, 0xa4, 0x54, 0x04, 0x18, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x47, 0x21, 0x27, 0x00, 0x0b,
++ 0x0f, 0x12, 0x13, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x40, 0xfc, 0x28, 0xc8, 0x50, 0xfc, 0xe0, 0x58,
++ 0xfc, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x20, 0x1f, 0x19, 0x49, 0x2f, 0x29, 0x09, 0x1f,
++ 0x19, 0x29, 0x2f, 0x46, 0x49, 0x51, 0x00, 0x00,
++ 0x50, 0x48, 0x5c, 0xe8, 0x28, 0x34, 0xcc, 0x54,
++ 0x5c, 0xe8, 0x28, 0x14, 0x6c, 0x84, 0x00, 0x00,
++ 0x20, 0x17, 0x14, 0x47, 0x24, 0x27, 0x0f, 0x12,
++ 0x1f, 0x26, 0x39, 0x42, 0x4c, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xf8, 0x20,
++ 0xfc, 0xb0, 0xcc, 0xb0, 0x88, 0x80, 0x00, 0x00,
++ 0x11, 0x0f, 0x08, 0x41, 0x27, 0x21, 0x02, 0x0d,
++ 0x09, 0x11, 0x11, 0x21, 0x21, 0x26, 0x00, 0x00,
++ 0x10, 0xfc, 0x40, 0xf0, 0xfc, 0x10, 0xe8, 0xf4,
++ 0x10, 0xf0, 0xf8, 0x50, 0xb0, 0x0c, 0x00, 0x00,
++ 0x22, 0x1f, 0x1d, 0x4b, 0x3e, 0x22, 0x05, 0x1f,
++ 0x12, 0x2f, 0x2a, 0x47, 0x43, 0x4e, 0x00, 0x00,
++ 0x08, 0xc8, 0x68, 0x68, 0xe8, 0x28, 0x28, 0xe8,
++ 0x28, 0xe8, 0xa8, 0x08, 0x88, 0x18, 0x00, 0x00,
++ 0x20, 0x10, 0x17, 0x44, 0x27, 0x24, 0x05, 0x15,
++ 0x15, 0x25, 0x25, 0x4a, 0x4a, 0x54, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0xe8, 0x88, 0x78, 0xf0, 0x50,
++ 0xf0, 0x50, 0xf8, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x20, 0x1f, 0x12, 0x41, 0x27, 0x24, 0x07, 0x1e,
++ 0x1b, 0x2f, 0x2b, 0x4e, 0x4a, 0x57, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf8, 0xf0, 0x10, 0xf0, 0xb8,
++ 0xe8, 0x68, 0x78, 0xbc, 0xec, 0x44, 0x00, 0x00,
++ 0x24, 0x14, 0x1f, 0x44, 0x2e, 0x2b, 0x0f, 0x1a,
++ 0x1e, 0x25, 0x3e, 0x45, 0x44, 0x44, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0xf8, 0x48,
++ 0xd8, 0x68, 0xd8, 0x68, 0x48, 0xd8, 0x00, 0x00,
++ 0x22, 0x12, 0x1b, 0x44, 0x24, 0x2b, 0x02, 0x16,
++ 0x17, 0x2a, 0x2a, 0x42, 0x42, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0x50, 0xfc, 0x50, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x20, 0x17, 0x15, 0x44, 0x27, 0x25, 0x06, 0x14,
++ 0x15, 0x25, 0x25, 0x49, 0x4f, 0x50, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x90, 0xfc, 0xf8, 0xd4, 0x40,
++ 0x40, 0x78, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x20, 0x10, 0x17, 0x44, 0x27, 0x25, 0x05, 0x15,
++ 0x15, 0x25, 0x27, 0x4a, 0x57, 0x40, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0xc8, 0x78, 0xf0, 0x50, 0xf0,
++ 0x50, 0xf0, 0xf8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x22, 0x1f, 0x12, 0x47, 0x20, 0x3f, 0x07, 0x1a,
++ 0x1e, 0x2f, 0x28, 0x4e, 0x4a, 0x52, 0x00, 0x00,
++ 0x20, 0xfc, 0xa0, 0xf0, 0x90, 0xfc, 0xf0, 0xa8,
++ 0xb8, 0xf8, 0x88, 0xb8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x20, 0x1f, 0x12, 0x43, 0x2f, 0x29, 0x09, 0x1f,
++ 0x1b, 0x23, 0x23, 0x43, 0x43, 0x4d, 0x00, 0x00,
++ 0x00, 0xfc, 0xa8, 0x24, 0xfc, 0x6c, 0xfc, 0x6c,
++ 0xb4, 0x6c, 0xfc, 0x6c, 0xb4, 0x2c, 0x00, 0x00,
++ 0x20, 0x1f, 0x19, 0x4f, 0x29, 0x2f, 0x0f, 0x1b,
++ 0x1b, 0x2a, 0x2b, 0x49, 0x4e, 0x48, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x78, 0x48, 0xf8, 0xf8, 0xe8,
++ 0xe8, 0xa8, 0xe8, 0xc8, 0xb8, 0x98, 0x00, 0x00,
++ 0x22, 0x12, 0x13, 0x44, 0x27, 0x28, 0x0f, 0x1b,
++ 0x1b, 0x2f, 0x24, 0x44, 0x4b, 0x52, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xa0, 0xfc, 0x48, 0xe8, 0x68,
++ 0x68, 0xd0, 0x90, 0xa8, 0x68, 0x44, 0x00, 0x00,
++ 0x20, 0x1f, 0x10, 0x4f, 0x2d, 0x2f, 0x09, 0x1f,
++ 0x19, 0x2f, 0x2b, 0x4a, 0x53, 0x6c, 0x00, 0x00,
++ 0x00, 0x7c, 0x00, 0x78, 0xe8, 0xfc, 0x40, 0xf8,
++ 0x48, 0xf8, 0xc8, 0x70, 0xc4, 0x3c, 0x00, 0x00,
++ 0x24, 0x17, 0x1a, 0x44, 0x2e, 0x25, 0x0f, 0x1d,
++ 0x17, 0x20, 0x27, 0x47, 0x48, 0x40, 0x00, 0x00,
++ 0xc8, 0xec, 0x14, 0xc8, 0xdc, 0xe8, 0x3c, 0xec,
++ 0xf0, 0x10, 0xf0, 0xf8, 0x08, 0xf0, 0x00, 0x00,
++ 0x01, 0x03, 0x0d, 0x34, 0x02, 0x07, 0x79, 0x09,
++ 0x09, 0x11, 0x22, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0xa0, 0xc0, 0x00, 0x08, 0x08,
++ 0x10, 0x20, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0a, 0x2a, 0x2c, 0x28, 0x49,
++ 0x08, 0x0c, 0x12, 0x12, 0x21, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xb0, 0xa8, 0xa8, 0xa4, 0x2c,
++ 0x68, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x16, 0x36, 0x3a, 0x32, 0x52,
++ 0x12, 0x1a, 0x16, 0x26, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xe8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xe8, 0xa8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x16, 0x36, 0x3b, 0x32, 0x52,
++ 0x12, 0x1a, 0x16, 0x26, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xb8, 0x38, 0x18, 0xe8,
++ 0xa8, 0xa8, 0xe8, 0xa8, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x0b, 0x2b, 0x2d, 0x29, 0x49,
++ 0x09, 0x0d, 0x13, 0x13, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08,
++ 0xf8, 0x08, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x0a, 0x2d, 0x29, 0x2a, 0x48,
++ 0x08, 0x0c, 0x12, 0x12, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x40, 0x40, 0x78, 0x40,
++ 0x40, 0x78, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x0a, 0x2b, 0x2d, 0x29, 0x49,
++ 0x09, 0x0d, 0x13, 0x13, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x68,
++ 0x98, 0x98, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x0a, 0x2d, 0x29, 0x2b, 0x49,
++ 0x09, 0x0d, 0x13, 0x13, 0x21, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0xe8, 0x28, 0x28,
++ 0xe8, 0x30, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x0b, 0x2b, 0x2d, 0x29, 0x49,
++ 0x09, 0x0d, 0x13, 0x13, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xf8, 0x48, 0x48,
++ 0x68, 0x98, 0x98, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x10, 0x17, 0x30, 0x50, 0x11, 0x12,
++ 0x14, 0x10, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0xe0, 0xe0, 0x50, 0x48,
++ 0x44, 0x40, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x00, 0x0f, 0x00, 0x01, 0x3f, 0x05, 0x09, 0x11,
++ 0x63, 0x1f, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x88, 0x48, 0x50, 0x20, 0x10,
++ 0x0c, 0xf0, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x0a, 0x2a, 0x2d, 0x28, 0x48,
++ 0x0b, 0x0c, 0x12, 0x12, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0xd0, 0x50, 0x20, 0xd8,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x09, 0x09, 0x7f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x1a, 0x15, 0x24, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0xf0,
++ 0x00, 0xf8, 0x48, 0x28, 0x08, 0x70, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x0b, 0x2e, 0x28, 0x2f, 0x4b,
++ 0x08, 0x0d, 0x12, 0x13, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x90, 0x60, 0xf0, 0x4c, 0xf8,
++ 0x40, 0xf0, 0x40, 0xf8, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x0b, 0x2b, 0x2d, 0x29, 0x49,
++ 0x09, 0x0d, 0x13, 0x13, 0x21, 0x47, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xf8, 0x20,
++ 0x24, 0xf8, 0x20, 0x24, 0xe4, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x0b, 0x2a, 0x2c, 0x2b, 0x48,
++ 0x09, 0x0d, 0x13, 0x13, 0x21, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0x90, 0xa0, 0xfc, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x16, 0x37, 0x3a, 0x32, 0x53,
++ 0x12, 0x1f, 0x14, 0x24, 0x21, 0x46, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0x40, 0xf8, 0xa8, 0xb8, 0x18,
++ 0x48, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x2b, 0x29, 0x29, 0x2b, 0x22,
++ 0x3f, 0x20, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x78, 0x48, 0x40, 0x44,
++ 0x44, 0x3c, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x00, 0x2f, 0x2a, 0x2f, 0x29, 0x29, 0x2f, 0x2a,
++ 0x2f, 0x48, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x78, 0x48, 0x40, 0x44,
++ 0xc4, 0x3c, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x27, 0x3d, 0x25, 0x25,
++ 0x3d, 0x24, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x08, 0xe8, 0x28, 0x28, 0xe8,
++ 0x28, 0x08, 0x30, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x08, 0x2a, 0x2c, 0x55, 0x22, 0x3f, 0x20, 0x5f,
++ 0x02, 0x02, 0x1f, 0x02, 0x02, 0x02, 0x00, 0x00,
++ 0x20, 0xa8, 0xb0, 0x50, 0x88, 0xfc, 0x08, 0xf0,
++ 0x10, 0x10, 0xd4, 0x0c, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x0b, 0x2b, 0x2d, 0x29, 0x48,
++ 0x0b, 0x08, 0x15, 0x14, 0x23, 0x40, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00,
++ 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x0b, 0x2a, 0x2d, 0x28, 0x4b,
++ 0x08, 0x0c, 0x12, 0x11, 0x22, 0x45, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x24, 0x04, 0xf8, 0x40, 0xfc,
++ 0x40, 0xf8, 0xc8, 0x30, 0x70, 0x8c, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x0b, 0x2b, 0x2d, 0x28, 0x4b,
++ 0x09, 0x0d, 0x16, 0x14, 0x21, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00, 0xfc,
++ 0x00, 0xf8, 0xa8, 0xa8, 0x48, 0xb0, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x1f, 0x15, 0x13, 0x1f,
++ 0x01, 0x3f, 0x01, 0x7f, 0x24, 0x42, 0x00, 0x00,
++ 0x30, 0xc0, 0x00, 0xfc, 0xf0, 0x50, 0x90, 0xf0,
++ 0x00, 0xf8, 0x00, 0xfc, 0x88, 0x44, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x17, 0x37, 0x3b, 0x32, 0x53,
++ 0x10, 0x1b, 0x14, 0x27, 0x22, 0x44, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xfc, 0xf8, 0x58, 0xe8, 0xf8,
++ 0x40, 0xf8, 0x40, 0xfc, 0xa8, 0x54, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x0b, 0x2b, 0x2d, 0x29, 0x49,
++ 0x09, 0x0c, 0x12, 0x12, 0x24, 0x40, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xa8, 0x84, 0x94, 0x70, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x0b, 0x2a, 0x2d, 0x29, 0x49,
++ 0x09, 0x0d, 0x13, 0x13, 0x21, 0x46, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x00, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x3f, 0x2e, 0x3f, 0x36, 0x55,
++ 0x2d, 0x09, 0x09, 0x12, 0x0c, 0x70, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0xfc, 0x48, 0xa8, 0x28, 0x08,
++ 0x18, 0x10, 0x10, 0xa0, 0x60, 0x1c, 0x00, 0x00,
++ 0x08, 0x3e, 0x08, 0x7f, 0x08, 0x7f, 0x08, 0x0e,
++ 0x12, 0x23, 0x4c, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x90, 0x50, 0x50, 0x20,
++ 0x50, 0x88, 0x04, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x17, 0x36, 0x3b, 0x32, 0x52,
++ 0x12, 0x1a, 0x16, 0x26, 0x23, 0x42, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0xe8, 0xa8,
++ 0xe8, 0xa8, 0xe8, 0xa8, 0x68, 0x18, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x0f, 0x08, 0x0f, 0x04,
++ 0x7f, 0x0f, 0x08, 0x0f, 0x24, 0x42, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0xe0, 0x20, 0xe0, 0x40,
++ 0xfc, 0xe0, 0x20, 0xe0, 0x88, 0x44, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x14, 0x36, 0x3f, 0x30, 0x53,
++ 0x12, 0x1b, 0x16, 0x27, 0x22, 0x40, 0x00, 0x00,
++ 0x20, 0x30, 0xe8, 0xa8, 0xa0, 0xfc, 0x20, 0xe8,
++ 0x58, 0xd0, 0x54, 0xec, 0x4c, 0x84, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x17, 0x35, 0x3b, 0x31, 0x51,
++ 0x16, 0x1b, 0x14, 0x24, 0x21, 0x46, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xb8, 0x10, 0xfc,
++ 0x00, 0xfc, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x14, 0x37, 0x3a, 0x33, 0x50,
++ 0x13, 0x18, 0x15, 0x27, 0x21, 0x43, 0x00, 0x00,
++ 0x20, 0x20, 0xe0, 0x20, 0xfc, 0xc8, 0xa8, 0x28,
++ 0xb0, 0x90, 0xd0, 0x28, 0x48, 0x84, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x15, 0x37, 0x38, 0x31, 0x52,
++ 0x17, 0x1a, 0x17, 0x26, 0x23, 0x42, 0x00, 0x00,
++ 0x18, 0xe8, 0x48, 0x50, 0xfc, 0xe0, 0x50, 0x48,
++ 0xfc, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x16, 0x35, 0x3b, 0x35, 0x51,
++ 0x11, 0x19, 0x15, 0x25, 0x22, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0x10, 0xf8, 0x14, 0xf0,
++ 0x10, 0xf0, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x16, 0x37, 0x3a, 0x33, 0x52,
++ 0x12, 0x1b, 0x17, 0x24, 0x21, 0x46, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0xe8, 0x58, 0xe8, 0xf8, 0xe8,
++ 0xd8, 0x48, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x11, 0x16, 0x15, 0x14, 0x3f, 0x3c, 0x34, 0x57,
++ 0x11, 0x1b, 0x15, 0x25, 0x21, 0x46, 0x00, 0x00,
++ 0x00, 0x38, 0xa8, 0xa8, 0xac, 0xac, 0xc4, 0xf8,
++ 0x28, 0xa8, 0x10, 0x10, 0xa8, 0x44, 0x00, 0x00,
++ 0x12, 0x11, 0x11, 0x14, 0x36, 0x39, 0x31, 0x57,
++ 0x11, 0x19, 0x15, 0x25, 0x22, 0x44, 0x00, 0x00,
++ 0x30, 0x50, 0x48, 0x84, 0xfc, 0x24, 0xf4, 0x38,
++ 0xd8, 0x34, 0xd4, 0x10, 0xe0, 0x7c, 0x00, 0x00,
++ 0x12, 0x11, 0x11, 0x15, 0x36, 0x39, 0x31, 0x57,
++ 0x11, 0x19, 0x15, 0x25, 0x22, 0x44, 0x00, 0x00,
++ 0x20, 0xf8, 0x20, 0xfc, 0x48, 0x50, 0xfc, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0xa0, 0x7c, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x17, 0x34, 0x3b, 0x30, 0x57,
++ 0x12, 0x1c, 0x17, 0x22, 0x22, 0x47, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0x40, 0xfc,
++ 0xa8, 0x54, 0xf8, 0xa8, 0xa8, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x7a, 0x1e, 0x6c, 0x1a, 0x6a,
++ 0x31, 0x09, 0x09, 0x12, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf4, 0x34, 0xd8, 0x34, 0xd4,
++ 0x60, 0x10, 0x10, 0xa0, 0x60, 0x1c, 0x00, 0x00,
++ 0x10, 0x17, 0x12, 0x15, 0x36, 0x34, 0x3a, 0x53,
++ 0x16, 0x1f, 0x17, 0x26, 0x23, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xd8, 0xa8, 0xc8, 0x20, 0xf8,
++ 0x40, 0xf0, 0xf0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x12, 0x12, 0x15, 0x17, 0x36, 0x3d, 0x37, 0x50,
++ 0x17, 0x10, 0x19, 0x26, 0x24, 0x40, 0x00, 0x00,
++ 0x48, 0x48, 0xf4, 0xac, 0xe8, 0xb4, 0xfc, 0x40,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x14, 0x3f, 0x3d, 0x35, 0x55,
++ 0x15, 0x15, 0x1f, 0x26, 0x2a, 0x57, 0x00, 0x00,
++ 0x80, 0xf8, 0xfc, 0xc8, 0x78, 0xf0, 0x50, 0xf0,
++ 0x50, 0xf0, 0xf8, 0xa8, 0xa8, 0xfc, 0x00, 0x00,
++ 0x10, 0x17, 0x14, 0x1f, 0x3c, 0x37, 0x37, 0x55,
++ 0x15, 0x15, 0x1d, 0x2c, 0x27, 0x44, 0x00, 0x00,
++ 0x00, 0xbc, 0xa4, 0xbc, 0xa4, 0xfc, 0xfc, 0xf4,
++ 0x54, 0xf4, 0xf4, 0xe4, 0x54, 0x4c, 0x00, 0x00,
++ 0x0f, 0x15, 0x1f, 0x1e, 0x17, 0x3f, 0x24, 0x7f,
++ 0x0e, 0x35, 0x7f, 0x15, 0x6a, 0x1c, 0x00, 0x00,
++ 0xf0, 0xd0, 0xf0, 0xf0, 0xd0, 0xfc, 0x28, 0xfc,
++ 0x70, 0xac, 0xfc, 0x30, 0xcc, 0x70, 0x00, 0x00,
++ 0x00, 0x3f, 0x12, 0x11, 0x21, 0x5f, 0x01, 0x7f,
++ 0x01, 0x01, 0x1f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x30, 0xe0, 0x10, 0x08, 0x08, 0xf0, 0x10, 0xfc,
++ 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x06, 0x3a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a,
++ 0x2a, 0x29, 0x29, 0x28, 0x28, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0xf8, 0x88, 0x80,
++ 0x84, 0x84, 0x7c, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x10, 0x2f, 0x42, 0x7f, 0x04,
++ 0x07, 0x0a, 0x09, 0x10, 0x23, 0x5c, 0x00, 0x00,
++ 0x30, 0xe0, 0x10, 0x88, 0xf8, 0x00, 0xfc, 0x00,
++ 0xf0, 0x20, 0x40, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x11, 0x2f, 0x48, 0x0f, 0x08,
++ 0x08, 0x0f, 0x15, 0x1a, 0x2a, 0x50, 0x00, 0x00,
++ 0x30, 0xe0, 0x10, 0x08, 0xe8, 0x20, 0xf0, 0x10,
++ 0x10, 0xfc, 0x24, 0x94, 0x04, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x01, 0x06, 0x38, 0x04, 0x04,
++ 0x02, 0x02, 0x01, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x20, 0x40, 0x80, 0x60, 0x10, 0x40, 0x40, 0x40,
++ 0x80, 0x80, 0x00, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x04, 0x05, 0x65, 0x19, 0x09, 0x15, 0x21, 0x45,
++ 0x25, 0x19, 0x09, 0x15, 0x27, 0x40, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x04, 0x07, 0x04, 0x00, 0x3f,
++ 0x02, 0x02, 0x02, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xe0, 0x20, 0x20, 0xe0,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x24, 0x24, 0x24, 0x3f, 0x24, 0x04, 0x7c,
++ 0x15, 0x15, 0x16, 0x24, 0x24, 0x44, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x40, 0xe0, 0xe0,
++ 0x50, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x28, 0x2f, 0x29, 0x3b, 0x2c, 0x0f, 0x78,
++ 0x2b, 0x2a, 0x2a, 0x2a, 0x2b, 0x4a, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x50, 0x58, 0xe4, 0xfc, 0x00,
++ 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0x08, 0x00, 0x00,
++ 0x24, 0x24, 0x24, 0x25, 0x3e, 0x20, 0x21, 0x3c,
++ 0x24, 0x27, 0x24, 0x24, 0x25, 0x44, 0x00, 0x00,
++ 0x50, 0x48, 0x7c, 0xc8, 0x30, 0x74, 0x8c, 0x54,
++ 0x7c, 0xc8, 0x30, 0x74, 0x8c, 0x04, 0x00, 0x00,
++ 0x28, 0x2f, 0x29, 0x2b, 0x3e, 0x23, 0x23, 0x39,
++ 0x29, 0x29, 0x29, 0x29, 0x29, 0x4e, 0x00, 0x00,
++ 0x40, 0xfc, 0xf0, 0xf8, 0xa8, 0x38, 0xf8, 0xf0,
++ 0x10, 0xf0, 0xf0, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x29, 0x29, 0x3f, 0x29, 0x29, 0x49,
++ 0x0f, 0x79, 0x0b, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0xd0, 0x14, 0x0c, 0xfc, 0x04, 0x00, 0x00,
++ 0x08, 0x0b, 0x28, 0x28, 0x3f, 0x28, 0x28, 0x4b,
++ 0x0c, 0x79, 0x09, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf0, 0x90, 0x90, 0xfc,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x06, 0x38, 0x08, 0x7f, 0x1d, 0x1a, 0x2a, 0x49,
++ 0x11, 0x1f, 0x21, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0xa8, 0x28, 0x48, 0x88, 0x30,
++ 0x00, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x02, 0x3c, 0x08, 0x7f, 0x1c, 0x1a, 0x2a, 0x49,
++ 0x11, 0x1f, 0x21, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x08, 0x48, 0x48, 0x48, 0x48, 0x48, 0x08, 0x18,
++ 0x00, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x09, 0x0f, 0x11, 0x3f, 0x01, 0x09, 0x28,
++ 0x3e, 0x28, 0x4f, 0x79, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0xf8, 0x00, 0x20, 0xa0,
++ 0xf8, 0xa0, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x2b, 0x28, 0x3d, 0x29, 0x29, 0x48,
++ 0x0f, 0x7a, 0x0a, 0x0a, 0x0a, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x08, 0xe8, 0xa8, 0xe8, 0x18, 0x00, 0x00,
++ 0x08, 0x2a, 0x2c, 0x49, 0x14, 0x22, 0x3f, 0x29,
++ 0x4f, 0x11, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x20, 0xa8, 0xb0, 0x20, 0x50, 0x88, 0xfc, 0x08,
++ 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x29, 0x2b, 0x3e, 0x2b, 0x2b, 0x49,
++ 0x0d, 0x79, 0x09, 0x09, 0x09, 0x0e, 0x00, 0x00,
++ 0x40, 0xfc, 0xf0, 0xf8, 0xb8, 0x18, 0xf8, 0xf0,
++ 0x10, 0xf0, 0xf0, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x08, 0x0b, 0x28, 0x29, 0x3f, 0x29, 0x28, 0x4b,
++ 0x0d, 0x7a, 0x0b, 0x09, 0x0a, 0x08, 0x00, 0x00,
++ 0x90, 0xfc, 0x40, 0xf8, 0xfc, 0xe8, 0xa4, 0xfc,
++ 0xe8, 0xa8, 0xd8, 0xd4, 0x6c, 0xc4, 0x00, 0x00,
++ 0x04, 0x44, 0x28, 0x10, 0x37, 0x48, 0x08, 0x18,
++ 0x28, 0x49, 0x09, 0x0a, 0x34, 0x18, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0xfc, 0xc0, 0xc0, 0xc0,
++ 0xc0, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x04, 0x44, 0x28, 0x10, 0x37, 0x48, 0x08, 0x18,
++ 0x28, 0x49, 0x0a, 0x0c, 0x30, 0x10, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x60, 0x60, 0xa0,
++ 0xa0, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x04, 0x47, 0x28, 0x10, 0x30, 0x48, 0x0b, 0x18,
++ 0x28, 0x48, 0x08, 0x08, 0x3f, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0xfc, 0x90,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x48, 0x30, 0x13, 0x32, 0x4a, 0x0a, 0x1b,
++ 0x2a, 0x48, 0x08, 0x08, 0x30, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xf8,
++ 0x48, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x48, 0x30, 0x11, 0x31, 0x49, 0x0a, 0x1a,
++ 0x28, 0x48, 0x08, 0x09, 0x32, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0x48, 0x48, 0x50, 0x60, 0x40, 0x60,
++ 0x60, 0xa0, 0x90, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x4b, 0x32, 0x12, 0x33, 0x4a, 0x0a, 0x1b,
++ 0x2a, 0x48, 0x08, 0x08, 0x30, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x44, 0x2b, 0x10, 0x30, 0x4b, 0x0a, 0x1a,
++ 0x2b, 0x4a, 0x08, 0x09, 0x32, 0x14, 0x00, 0x00,
++ 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8, 0xa0,
++ 0xfc, 0xa4, 0xa4, 0x38, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x48, 0x31, 0x11, 0x33, 0x4c, 0x08, 0x19,
++ 0x2f, 0x4a, 0x0a, 0x0a, 0x33, 0x12, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x10, 0x20, 0xc0, 0xc0, 0x30,
++ 0xfc, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x45, 0x29, 0x11, 0x31, 0x49, 0x09, 0x19,
++ 0x29, 0x49, 0x09, 0x09, 0x31, 0x17, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf4,
++ 0x44, 0x28, 0x30, 0x10, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x48, 0x37, 0x11, 0x31, 0x4b, 0x0d, 0x18,
++ 0x28, 0x48, 0x08, 0x09, 0x32, 0x1c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x08, 0x14, 0x14, 0xa0,
++ 0xa0, 0x40, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x48, 0x30, 0x17, 0x31, 0x49, 0x09, 0x1a,
++ 0x2c, 0x48, 0x08, 0x09, 0x32, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x50, 0x50, 0x50, 0xe8,
++ 0x44, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x4b, 0x32, 0x12, 0x33, 0x48, 0x0b, 0x1a,
++ 0x2b, 0x4a, 0x0b, 0x0a, 0x32, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x00, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x15, 0x16, 0x34, 0x57, 0x14,
++ 0x14, 0x17, 0x14, 0x14, 0x11, 0x16, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x90, 0x60, 0xe0, 0x1c, 0x50,
++ 0x48, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x04, 0x44, 0x2b, 0x10, 0x30, 0x49, 0x0f, 0x18,
++ 0x29, 0x49, 0x09, 0x09, 0x30, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xa0, 0x10, 0xfc, 0x08,
++ 0xe8, 0x28, 0xe8, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x4b, 0x32, 0x12, 0x33, 0x4a, 0x0a, 0x1b,
++ 0x28, 0x48, 0x08, 0x09, 0x32, 0x14, 0x00, 0x00,
++ 0x80, 0x38, 0x08, 0x08, 0xb8, 0x08, 0x08, 0xf8,
++ 0xa0, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x4f, 0x30, 0x13, 0x30, 0x4f, 0x08, 0x1b,
++ 0x2a, 0x4a, 0x0b, 0x0a, 0x32, 0x12, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0xf8,
++ 0x48, 0x48, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x49, 0x31, 0x11, 0x31, 0x49, 0x09, 0x18,
++ 0x2b, 0x4a, 0x0b, 0x0a, 0x33, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x48, 0x37, 0x11, 0x31, 0x4a, 0x0c, 0x18,
++ 0x2f, 0x48, 0x08, 0x08, 0x30, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x10, 0xa8, 0x44, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x09, 0x49, 0x31, 0x12, 0x33, 0x4e, 0x0a, 0x1a,
++ 0x2b, 0x4b, 0x0a, 0x0a, 0x32, 0x13, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xfc, 0x80, 0xf8, 0xa0,
++ 0x20, 0xfc, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x4a, 0x32, 0x13, 0x30, 0x4f, 0x08, 0x1b,
++ 0x2a, 0x4a, 0x0a, 0x0a, 0x32, 0x12, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x40, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x08, 0x4b, 0x32, 0x13, 0x32, 0x4b, 0x09, 0x19,
++ 0x2a, 0x4d, 0x08, 0x08, 0x3f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x40, 0xf8,
++ 0x40, 0xf0, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x4b, 0x32, 0x13, 0x32, 0x4b, 0x08, 0x1f,
++ 0x29, 0x49, 0x09, 0x09, 0x31, 0x16, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x00, 0xfc,
++ 0x48, 0x28, 0x30, 0x10, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x4b, 0x32, 0x12, 0x32, 0x4f, 0x0c, 0x1b,
++ 0x2a, 0x4b, 0x0a, 0x0b, 0x32, 0x12, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x90, 0xfc, 0x08, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x24, 0x24, 0x3f, 0x25, 0x04, 0x7f, 0x25, 0x24,
++ 0x45, 0x01, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0xf8, 0x50, 0x20, 0xd0, 0xfc, 0x10, 0xb0,
++ 0x20, 0x10, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x09, 0x4f, 0x31, 0x13, 0x32, 0x4b, 0x0a, 0x1b,
++ 0x28, 0x4f, 0x08, 0x08, 0x31, 0x16, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xf8, 0x08, 0xf8, 0x08, 0xf8,
++ 0x40, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x35, 0x2e, 0x2c, 0x3f, 0x04, 0x3f,
++ 0x04, 0x07, 0x78, 0x15, 0x2a, 0x40, 0x00, 0x00,
++ 0x10, 0x98, 0x94, 0x94, 0x90, 0xfc, 0x10, 0x90,
++ 0x10, 0x90, 0x28, 0x28, 0xc4, 0x84, 0x00, 0x00,
++ 0x10, 0x57, 0x36, 0x25, 0x35, 0x57, 0x15, 0x17,
++ 0x37, 0x37, 0x57, 0x19, 0x1a, 0x34, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0x50, 0x90, 0xfc, 0x34, 0x58,
++ 0x58, 0xd0, 0x30, 0x28, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x48, 0x31, 0x16, 0x33, 0x4b, 0x0a, 0x1b,
++ 0x29, 0x49, 0x09, 0x09, 0x31, 0x11, 0x00, 0x00,
++ 0x40, 0xa0, 0xf0, 0x0c, 0xf8, 0x58, 0xe8, 0xf8,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x4b, 0x32, 0x13, 0x31, 0x49, 0x0a, 0x1f,
++ 0x2a, 0x4b, 0x08, 0x08, 0x37, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x00, 0xf8, 0x88, 0xe8,
++ 0xa8, 0xe8, 0xa8, 0xf8, 0x18, 0x30, 0x00, 0x00,
++ 0x08, 0x4b, 0x32, 0x16, 0x32, 0x4c, 0x0b, 0x1a,
++ 0x2b, 0x48, 0x0f, 0x08, 0x30, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x48, 0xa8, 0x94, 0x70, 0xf8, 0xa8,
++ 0xf8, 0x00, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x77, 0x55, 0x77, 0x3f, 0x25, 0x3f, 0x25, 0x3f,
++ 0x7f, 0x00, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0x24, 0x20, 0xfc, 0x20, 0x20,
++ 0xa0, 0x30, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x0a, 0x4c, 0x32, 0x13, 0x32, 0x4b, 0x0b, 0x1b,
++ 0x2a, 0x4b, 0x0a, 0x0a, 0x33, 0x16, 0x00, 0x00,
++ 0x48, 0x90, 0x48, 0xf8, 0xe8, 0xa8, 0xf8, 0x68,
++ 0xd8, 0x68, 0xd8, 0x4c, 0x6c, 0x44, 0x00, 0x00,
++ 0x04, 0x07, 0x3f, 0x2d, 0x37, 0x3f, 0x2f, 0x29,
++ 0x2f, 0x3f, 0x36, 0x3f, 0x32, 0x52, 0x00, 0x00,
++ 0x20, 0xa8, 0xa4, 0x24, 0x20, 0xfc, 0x20, 0x20,
++ 0x30, 0xb0, 0xd0, 0xc8, 0x88, 0x84, 0x00, 0x00,
++ 0x12, 0x52, 0x2f, 0x22, 0x3f, 0x5a, 0x1a, 0x3f,
++ 0x32, 0x57, 0x16, 0x1a, 0x12, 0x62, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0x48, 0xf8, 0xc8, 0xf8, 0xc8,
++ 0x78, 0x48, 0xf8, 0x30, 0x48, 0x88, 0x00, 0x00,
++ 0x02, 0x02, 0x7a, 0x12, 0x1f, 0x12, 0x7a, 0x12,
++ 0x12, 0x12, 0x1c, 0x64, 0x08, 0x13, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x38, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xb8, 0xa8, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x7d, 0x12, 0x12, 0x17, 0x7a, 0x12,
++ 0x12, 0x12, 0x1a, 0x62, 0x02, 0x02, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0x24, 0x3c, 0xe0, 0x20, 0x20,
++ 0x20, 0x10, 0x14, 0x0c, 0x0c, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x7d, 0x11, 0x12, 0x14, 0x7c, 0x11,
++ 0x11, 0x11, 0x1a, 0x64, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0xfc, 0x48, 0x50, 0x40, 0x60,
++ 0x50, 0x48, 0x44, 0x44, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x12, 0x12, 0x12, 0x7f, 0x12,
++ 0x12, 0x12, 0x1a, 0x64, 0x05, 0x0e, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x50, 0x40, 0xf8, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x11, 0x11, 0x11, 0x7d, 0x11,
++ 0x11, 0x11, 0x1d, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf8, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x07, 0x7d, 0x11, 0x11, 0x11, 0x7d, 0x11,
++ 0x11, 0x11, 0x19, 0x67, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x10, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x07, 0x7c, 0x17, 0x14, 0x14, 0x7f, 0x16,
++ 0x16, 0x16, 0x1e, 0x66, 0x08, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x90, 0x90, 0xf0, 0xb0,
++ 0xb0, 0xb0, 0xb4, 0xec, 0x8c, 0x84, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x11, 0x13, 0x14, 0x7c, 0x11,
++ 0x17, 0x12, 0x1a, 0x62, 0x03, 0x02, 0x00, 0x00,
++ 0x80, 0x80, 0xf0, 0x10, 0x20, 0xc0, 0xc0, 0x30,
++ 0xfc, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x07, 0x7c, 0x13, 0x12, 0x12, 0x7f, 0x10,
++ 0x13, 0x12, 0x1f, 0x62, 0x03, 0x02, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xb8, 0xa8, 0xa8, 0xb8, 0xa0,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x7d, 0x11, 0x11, 0x11, 0x7d, 0x11,
++ 0x11, 0x11, 0x1d, 0x61, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x08, 0xf8, 0x08, 0x08, 0xf8,
++ 0x24, 0x24, 0x18, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x14, 0x17, 0x14, 0x7c, 0x17,
++ 0x14, 0x15, 0x1c, 0x65, 0x06, 0x18, 0x00, 0x00,
++ 0x00, 0x38, 0xa8, 0xa8, 0xb0, 0xb0, 0xa8, 0xe8,
++ 0x64, 0xa4, 0xa4, 0x78, 0x60, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x13, 0x12, 0x12, 0x7f, 0x12,
++ 0x12, 0x12, 0x1c, 0x64, 0x09, 0x12, 0x00, 0x00,
++ 0x40, 0x78, 0x40, 0xfc, 0x48, 0x78, 0xc8, 0x38,
++ 0xa0, 0xa0, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x03, 0x7c, 0x10, 0x11, 0x10, 0x7c, 0x17,
++ 0x10, 0x11, 0x1d, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0xf0, 0x90, 0x90, 0xfc,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x17, 0x10, 0x10, 0x7f, 0x10,
++ 0x10, 0x11, 0x1f, 0x61, 0x02, 0x04, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xbc, 0xa0,
++ 0xa0, 0xbc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x02, 0x01, 0x7d, 0x14, 0x12, 0x12, 0x7d, 0x11,
++ 0x11, 0x12, 0x1e, 0x64, 0x05, 0x04, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x30, 0x48, 0x78, 0xc4, 0x04, 0x00, 0x00,
++ 0x00, 0x07, 0x7c, 0x14, 0x17, 0x14, 0x7c, 0x17,
++ 0x14, 0x14, 0x1f, 0x64, 0x04, 0x04, 0x00, 0x00,
++ 0x00, 0xb8, 0x88, 0x88, 0xb8, 0x88, 0x00, 0xf8,
++ 0x48, 0x28, 0xb0, 0x10, 0x28, 0xc4, 0x00, 0x00,
++ 0x00, 0x03, 0x7e, 0x17, 0x10, 0x13, 0x7e, 0x13,
++ 0x12, 0x13, 0x18, 0x67, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7e, 0x08, 0x3e, 0x08, 0x7e, 0x02, 0x01,
++ 0x05, 0x14, 0x14, 0x25, 0x46, 0x1b, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x20, 0x20,
++ 0x50, 0x48, 0x84, 0x14, 0x10, 0xf0, 0x00, 0x00,
++ 0x02, 0x02, 0x7c, 0x12, 0x12, 0x10, 0x7f, 0x12,
++ 0x13, 0x12, 0x1a, 0x63, 0x03, 0x02, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0x48, 0x48, 0x80, 0xf8, 0x28,
++ 0xa8, 0x48, 0xa8, 0x18, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x03, 0x7e, 0x12, 0x12, 0x12, 0x7d, 0x11,
++ 0x11, 0x11, 0x1d, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xe8, 0x08, 0xe8, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x00, 0x7c, 0x11, 0x13, 0x14, 0x7f, 0x14,
++ 0x16, 0x15, 0x1e, 0x65, 0x04, 0x05, 0x00, 0x00,
++ 0xc0, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xa8, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x08, 0x0a, 0x2a, 0x2c, 0x55, 0x22, 0x3f, 0x20,
++ 0x7f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0x28, 0xa8, 0xb0, 0x50, 0x88, 0xfc, 0x08,
++ 0xf8, 0x00, 0xf0, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x12, 0x13, 0x12, 0x7e, 0x13,
++ 0x10, 0x10, 0x1d, 0x61, 0x02, 0x0c, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0xd0, 0xd0, 0x68, 0x7c, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x01, 0x7d, 0x12, 0x17, 0x12, 0x7f, 0x12,
++ 0x13, 0x12, 0x1b, 0x60, 0x03, 0x0c, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x44, 0xfc, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0xb0, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x7e, 0x13, 0x12, 0x13, 0x7e, 0x13,
++ 0x12, 0x10, 0x1e, 0x65, 0x09, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x40, 0xf8, 0x40, 0xfc,
++ 0x24, 0x94, 0x54, 0x44, 0x04, 0x18, 0x00, 0x00,
++ 0x00, 0x03, 0x7e, 0x11, 0x11, 0x10, 0x7f, 0x10,
++ 0x17, 0x12, 0x1e, 0x62, 0x03, 0x02, 0x00, 0x00,
++ 0x38, 0xc8, 0x48, 0x50, 0x20, 0x40, 0xf8, 0x40,
++ 0xfc, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x07, 0x7d, 0x11, 0x13, 0x12, 0x7f, 0x10,
++ 0x13, 0x10, 0x1d, 0x60, 0x07, 0x00, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xf0, 0xf8, 0x48, 0xf8, 0x40,
++ 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x7d, 0x10, 0x17, 0x11, 0x7d, 0x11,
++ 0x11, 0x15, 0x18, 0x67, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x02, 0x7d, 0x17, 0x11, 0x10, 0x7f, 0x10,
++ 0x11, 0x10, 0x1f, 0x60, 0x01, 0x06, 0x00, 0x00,
++ 0xa0, 0xa8, 0xb0, 0xfc, 0x10, 0xa0, 0xf8, 0x40,
++ 0xf0, 0x40, 0xfc, 0x60, 0x90, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x3e, 0x21, 0x3e, 0x53, 0x1e,
++ 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0xfc, 0x88, 0x50, 0xfc, 0x20, 0xfc, 0x20,
++ 0xf8, 0x00, 0xf0, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x7e, 0x13, 0x12, 0x13, 0x7d, 0x11,
++ 0x11, 0x15, 0x19, 0x67, 0x00, 0x07, 0x00, 0x00,
++ 0x80, 0xf0, 0x20, 0xf8, 0xa8, 0xf8, 0x10, 0xf0,
++ 0xf0, 0x10, 0xf8, 0x10, 0xe0, 0x1c, 0x00, 0x00,
++ 0x01, 0x07, 0x7a, 0x12, 0x17, 0x10, 0x7f, 0x14,
++ 0x17, 0x14, 0x1f, 0x64, 0x04, 0x05, 0x00, 0x00,
++ 0x20, 0xfc, 0xa0, 0xb8, 0xc8, 0x38, 0xa0, 0xb8,
++ 0xa0, 0xb8, 0xa0, 0xb8, 0xa4, 0x9c, 0x00, 0x00,
++ 0x00, 0x07, 0x7c, 0x17, 0x17, 0x14, 0x7f, 0x13,
++ 0x14, 0x17, 0x18, 0x61, 0x00, 0x07, 0x00, 0x00,
++ 0x00, 0xbc, 0xa4, 0xbc, 0xbc, 0xa4, 0xbc, 0x28,
++ 0xc4, 0xfc, 0x90, 0xd0, 0x78, 0x84, 0x00, 0x00,
++ 0x00, 0x04, 0x7a, 0x12, 0x10, 0x10, 0x7f, 0x11,
++ 0x11, 0x13, 0x1c, 0x60, 0x01, 0x0e, 0x00, 0x00,
++ 0x84, 0x44, 0x48, 0x10, 0x80, 0x80, 0xfc, 0x10,
++ 0x10, 0xa0, 0x60, 0x50, 0x88, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x19, 0x25, 0x5f, 0x01, 0x7f,
++ 0x11, 0x1d, 0x25, 0x06, 0x06, 0x1d, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0x50, 0x50, 0x70, 0x58, 0x78, 0xc4, 0x00, 0x00,
++ 0x10, 0x10, 0x7f, 0x2b, 0x2b, 0x2b, 0x7f, 0x13,
++ 0x1f, 0x73, 0x15, 0x15, 0x2f, 0x48, 0x00, 0x00,
++ 0x50, 0x90, 0xfc, 0xa8, 0xa8, 0xa8, 0xfc, 0x90,
++ 0x90, 0x7c, 0xd0, 0xd0, 0x30, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x10, 0x1e, 0x13, 0x12, 0x1a,
++ 0x16, 0x16, 0x12, 0x16, 0x1a, 0x61, 0x00, 0x00,
++ 0x20, 0xa0, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x24, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x10, 0x1e, 0x12, 0x1b, 0x16,
++ 0x16, 0x12, 0x12, 0x16, 0x1a, 0x61, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x24, 0x04, 0xfc, 0x00, 0x00,
++ 0x07, 0x04, 0x19, 0x61, 0x02, 0x1f, 0x00, 0x7f,
++ 0x04, 0x07, 0x05, 0x08, 0x0f, 0x70, 0x00, 0x00,
++ 0xc0, 0x40, 0x30, 0x8c, 0x60, 0x90, 0x00, 0xfc,
++ 0x00, 0xe0, 0x20, 0xa4, 0xa4, 0x1c, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x10, 0x1e, 0x12, 0x1a, 0x16,
++ 0x16, 0x12, 0x12, 0x16, 0x1a, 0x61, 0x00, 0x00,
++ 0x20, 0x2c, 0xf0, 0x20, 0xa8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0x20, 0x28, 0x1c, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x10, 0x1e, 0x13, 0x1a, 0x16,
++ 0x16, 0x12, 0x13, 0x16, 0x1a, 0x61, 0x00, 0x00,
++ 0x70, 0x10, 0x50, 0x48, 0x88, 0xfc, 0x48, 0x48,
++ 0x48, 0x88, 0x30, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x10, 0x1e, 0x13, 0x1a, 0x16,
++ 0x17, 0x12, 0x12, 0x16, 0x1a, 0x61, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x78, 0xc0, 0x40, 0x7c,
++ 0xc0, 0x40, 0x44, 0x3c, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x10, 0x1e, 0x12, 0x1a, 0x16,
++ 0x16, 0x12, 0x12, 0x16, 0x1a, 0x61, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0x88, 0xf8, 0x88, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x01, 0x79, 0x02, 0x1c, 0x61, 0x06, 0x7f,
++ 0x08, 0x0f, 0x0a, 0x11, 0x1f, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0xd0, 0x20, 0x18, 0xfc,
++ 0x00, 0xe0, 0x20, 0x24, 0xa4, 0x1c, 0x00, 0x00,
++ 0x00, 0x7f, 0x14, 0x7f, 0x55, 0x55, 0x7f, 0x49,
++ 0x08, 0x7f, 0x08, 0x08, 0x0e, 0x71, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x78, 0x48, 0x68, 0x58,
++ 0x58, 0x48, 0x48, 0x5c, 0x6c, 0x84, 0x00, 0x00,
++ 0x02, 0x3c, 0x08, 0x7e, 0x1d, 0x2a, 0x48, 0x7f,
++ 0x04, 0x07, 0x05, 0x08, 0x0f, 0x70, 0x00, 0x00,
++ 0x20, 0x24, 0xa4, 0xa8, 0x50, 0x48, 0x84, 0xfc,
++ 0x00, 0xe0, 0x20, 0xa4, 0xa4, 0x1c, 0x00, 0x00,
++ 0x00, 0x7f, 0x21, 0x21, 0x3d, 0x25, 0x35, 0x2d,
++ 0x2d, 0x26, 0x26, 0x2d, 0x34, 0x63, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0x20, 0xf8, 0x20, 0xfc, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x40, 0x5e, 0x52, 0x5e, 0x40, 0x7f,
++ 0x6d, 0x6d, 0x7f, 0x40, 0x7f, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x78, 0x48, 0x68, 0x58,
++ 0x58, 0x48, 0x4c, 0x5c, 0x64, 0x84, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x2a, 0x3e, 0x2a, 0x3e, 0x0a,
++ 0x7f, 0x04, 0x7f, 0x24, 0x14, 0x0d, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x78, 0x48, 0x68, 0x58,
++ 0x58, 0x48, 0x4c, 0x5c, 0x64, 0x84, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x12, 0x1f, 0x3f, 0x20,
++ 0x5f, 0x04, 0x3f, 0x09, 0x0f, 0x70, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x90, 0xf0, 0xfc, 0x08,
++ 0xf0, 0x00, 0xe0, 0x24, 0xa4, 0x1c, 0x00, 0x00,
++ 0x01, 0x7f, 0x08, 0x32, 0x0d, 0x0a, 0x7e, 0x04,
++ 0x08, 0x3f, 0x04, 0x3f, 0x09, 0x7e, 0x00, 0x00,
++ 0x00, 0xfc, 0x90, 0xfc, 0x90, 0xf8, 0xf8, 0x90,
++ 0xfc, 0xf8, 0x00, 0xe4, 0x24, 0x9c, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3f, 0x20, 0x3e, 0x52, 0x1e,
++ 0x7f, 0x04, 0x07, 0x09, 0x0f, 0x78, 0x00, 0x00,
++ 0x20, 0xf8, 0x50, 0xfc, 0x20, 0xf8, 0x20, 0x20,
++ 0xfc, 0x00, 0xe0, 0x24, 0xa4, 0x1c, 0x00, 0x00,
++ 0x11, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x08,
++ 0x7f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x20,
++ 0xfc, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x3e, 0x2a, 0x3f, 0x2b, 0x3e,
++ 0x6a, 0x28, 0x11, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa0, 0xfc, 0x20, 0x20, 0xf8,
++ 0x20, 0x20, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x03, 0x01, 0x3f, 0x21, 0x3f,
++ 0x21, 0x21, 0x3f, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x60, 0x80, 0x00, 0xf8, 0x08, 0xf8,
++ 0x08, 0x08, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x11, 0x1f, 0x00,
++ 0x7f, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x00,
++ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x02, 0x21, 0x11, 0x10, 0x00, 0x3f, 0x21, 0x21,
++ 0x3f, 0x21, 0x21, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x10, 0x20, 0x40, 0xf8, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x54, 0x54, 0x55, 0x7e, 0x54,
++ 0x54, 0x54, 0x7d, 0x45, 0x02, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xa8, 0xa4,
++ 0xa0, 0xa0, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x57, 0x54, 0x54, 0x7c, 0x54,
++ 0x57, 0x54, 0x7d, 0x45, 0x02, 0x04, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0xfc, 0x90, 0x90, 0x90, 0x90,
++ 0xfc, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x57, 0x54, 0x54, 0x7c, 0x57,
++ 0x54, 0x54, 0x7c, 0x45, 0x02, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x54, 0x55, 0x56, 0x7c, 0x57,
++ 0x54, 0x54, 0x7f, 0x44, 0x00, 0x07, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0x28, 0xc4, 0x10,
++ 0x20, 0xc8, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x00, 0x3e, 0x2a, 0x2a,
++ 0x3e, 0x2a, 0x2a, 0x2a, 0x3f, 0x22, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x30, 0x48, 0x48, 0x7c, 0x84, 0x04, 0x00, 0x00,
++ 0x02, 0x02, 0x04, 0x3f, 0x01, 0x7f, 0x04, 0x18,
++ 0x7f, 0x11, 0x1f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xc0, 0x70, 0x88, 0x00, 0xfc, 0x40, 0x30,
++ 0xfc, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x57, 0x54, 0x54, 0x7d, 0x55,
++ 0x57, 0x55, 0x7d, 0x45, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0xc0, 0xc8, 0x48, 0x50,
++ 0x20, 0x20, 0x10, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x54, 0x54, 0x57, 0x7c, 0x54,
++ 0x57, 0x55, 0x7c, 0x44, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x10, 0x10,
++ 0xfc, 0x10, 0x90, 0x90, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x02, 0x07,
++ 0x3c, 0x03, 0x7f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf0,
++ 0x40, 0x80, 0xfc, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x1f, 0x7f, 0x01, 0x1f, 0x0f, 0x7f, 0x1f,
++ 0x11, 0x1f, 0x11, 0x1f, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0xfc, 0x10, 0xf0, 0xe0, 0xfc, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x55, 0x57, 0x54, 0x7c, 0x57,
++ 0x54, 0x55, 0x7d, 0x46, 0x04, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x44, 0x40, 0xfc,
++ 0x40, 0x50, 0x48, 0x44, 0x44, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x54, 0x54, 0x55, 0x7f, 0x54,
++ 0x55, 0x55, 0x7d, 0x45, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xa0, 0x10, 0xfc, 0x08,
++ 0xe8, 0x28, 0xe8, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x11, 0x09, 0x3f, 0x20, 0x4f, 0x08, 0x0f, 0x00,
++ 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x10, 0x20, 0xfc, 0x08, 0xe0, 0x20, 0xe0, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x05, 0x05, 0x3d, 0x21, 0x3d, 0x27,
++ 0x15, 0x3d, 0x15, 0x1d, 0x65, 0x1b, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xfc,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xfc, 0x00, 0x00,
++ 0x00, 0x03, 0x7c, 0x55, 0x57, 0x55, 0x7c, 0x55,
++ 0x57, 0x54, 0x7f, 0x46, 0x03, 0x02, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0xfc, 0xe8, 0x40, 0xf0,
++ 0xfc, 0x08, 0xfc, 0xa8, 0x98, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x54, 0x55, 0x54, 0x7f, 0x54,
++ 0x57, 0x55, 0x7d, 0x46, 0x04, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x90,
++ 0xfc, 0x90, 0x50, 0x50, 0x10, 0x30, 0x00, 0x00,
++ 0x0f, 0x09, 0x0f, 0x0f, 0x3e, 0x2a, 0x3e, 0x3e,
++ 0x3f, 0x3f, 0x4f, 0x0f, 0x08, 0x7f, 0x00, 0x00,
++ 0xe0, 0x20, 0xe0, 0xe0, 0xf8, 0xa8, 0xf8, 0xf8,
++ 0xfc, 0xe8, 0xe0, 0xe0, 0x20, 0xfc, 0x00, 0x00,
++ 0x0f, 0x09, 0x0f, 0x0f, 0x3e, 0x2a, 0x3e, 0x3f,
++ 0x3f, 0x22, 0x47, 0x06, 0x09, 0x7f, 0x00, 0x00,
++ 0xe0, 0x20, 0xe0, 0xe0, 0xf8, 0xa8, 0xf8, 0xf8,
++ 0xfc, 0x08, 0xe0, 0x40, 0x40, 0xfc, 0x00, 0x00,
++ 0x0f, 0x09, 0x0f, 0x0f, 0x38, 0x0e, 0x30, 0x3f,
++ 0x2f, 0x4f, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0xe0, 0x20, 0xe0, 0xe0, 0x38, 0xe0, 0x18, 0xfc,
++ 0xe8, 0xe0, 0xe0, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x2f, 0x08, 0x18,
++ 0x28, 0x48, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x00, 0x00, 0xfc, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x29, 0x09, 0x1a,
++ 0x2c, 0x48, 0x10, 0x11, 0x26, 0x58, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0x80, 0xf0, 0x10, 0x20,
++ 0x20, 0x40, 0xc0, 0x20, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x2a, 0x0a, 0x1a,
++ 0x2a, 0x4a, 0x12, 0x12, 0x23, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x40, 0x40, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x28, 0x09, 0x1b,
++ 0x2d, 0x49, 0x11, 0x11, 0x22, 0x44, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x40, 0x40, 0xa0, 0x10, 0x28,
++ 0x24, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x2f, 0x08, 0x18,
++ 0x28, 0x49, 0x11, 0x12, 0x24, 0x58, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x90, 0x88, 0xfc, 0x80, 0xc0,
++ 0xc0, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x4a, 0x2a, 0x2f, 0x0a, 0x1a,
++ 0x2a, 0x4a, 0x12, 0x12, 0x24, 0x49, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x00, 0xb8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xb8, 0xa8, 0x80, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x49, 0x29, 0x2f, 0x09, 0x19,
++ 0x29, 0x49, 0x11, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0x10, 0xfc, 0x10, 0x10,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x2f, 0x08, 0x18,
++ 0x2b, 0x48, 0x10, 0x10, 0x2f, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x40, 0x40, 0xfc, 0x40, 0x90,
++ 0x90, 0x60, 0x50, 0x98, 0xe4, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x51, 0x31, 0x35, 0x15, 0x15,
++ 0x35, 0x55, 0x15, 0x25, 0x27, 0x5c, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x20, 0x20, 0x20, 0x24, 0xe8,
++ 0x30, 0x20, 0x20, 0xe4, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2b, 0x2a, 0x0a, 0x1b,
++ 0x2a, 0x4b, 0x12, 0x12, 0x2f, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2b, 0x2a, 0x0a, 0x1b,
++ 0x2a, 0x4a, 0x13, 0x10, 0x2f, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x29, 0x0e, 0x18,
++ 0x2b, 0x4c, 0x10, 0x13, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0xf0, 0x10, 0xa0, 0xc0,
++ 0x30, 0xcc, 0x20, 0x80, 0x60, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x49, 0x29, 0x2b, 0x0c, 0x1b,
++ 0x2a, 0x4b, 0x12, 0x12, 0x22, 0x41, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0x00, 0xf8, 0x08, 0xc8,
++ 0x48, 0xc8, 0x70, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x0f, 0x48, 0x2f, 0x28, 0x0b, 0x18, 0x2b,
++ 0x4a, 0x0f, 0x14, 0x10, 0x23, 0x4c, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8,
++ 0x40, 0xfc, 0x44, 0xb8, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x49, 0x28, 0x29, 0x0f, 0x18,
++ 0x28, 0x4b, 0x10, 0x10, 0x2f, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0xc0, 0xa0, 0x10, 0xfc, 0x40,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x49, 0x28, 0x2f, 0x08, 0x1b,
++ 0x28, 0x48, 0x1f, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0xfc, 0x40, 0xf8,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2f, 0x2a, 0x0a, 0x1c,
++ 0x2a, 0x4b, 0x10, 0x10, 0x2f, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xfc, 0x48, 0x48, 0x90,
++ 0x48, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x28, 0x2f, 0x08, 0x1b,
++ 0x28, 0x49, 0x15, 0x15, 0x29, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x40, 0x40, 0xfc, 0x40, 0xf8,
++ 0x40, 0x20, 0x28, 0x04, 0x14, 0xf0, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2f, 0x28, 0x09, 0x1e,
++ 0x28, 0x4b, 0x12, 0x12, 0x23, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xfc, 0x60, 0xd8, 0x44,
++ 0x40, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x50, 0x37, 0x35, 0x16, 0x16,
++ 0x35, 0x55, 0x15, 0x26, 0x24, 0x44, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xfc, 0x08, 0xe8, 0xa8,
++ 0xa8, 0xe8, 0xa8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x4b, 0x28, 0x2f, 0x09, 0x1e,
++ 0x28, 0x4f, 0x11, 0x13, 0x20, 0x47, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0xf0, 0x40, 0xfc, 0xf0, 0x4c,
++ 0xc0, 0xfc, 0x20, 0xe0, 0xd0, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x1f, 0x50, 0x37, 0x34, 0x17, 0x14,
++ 0x35, 0x55, 0x15, 0x24, 0x27, 0x44, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf8, 0x88, 0xf8, 0x88,
++ 0xe8, 0x28, 0xe8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2f, 0x29, 0x09, 0x1b,
++ 0x2c, 0x48, 0x1f, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x40, 0xfc, 0x10, 0x10, 0x28,
++ 0xc4, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2a, 0x2a, 0x0c, 0x19,
++ 0x2e, 0x4a, 0x12, 0x14, 0x23, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x48, 0x48, 0x50, 0xb0, 0x4c,
++ 0x48, 0x48, 0x50, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x48, 0x2b, 0x2a, 0x0b, 0x1a,
++ 0x2b, 0x48, 0x11, 0x17, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x80, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0xa0, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x49, 0x29, 0x2f, 0x09, 0x1b,
++ 0x2b, 0x4b, 0x13, 0x15, 0x29, 0x41, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0x10, 0xfc, 0x10, 0xb8,
++ 0xb8, 0xb8, 0xdc, 0x5c, 0x90, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x49, 0x29, 0x2f, 0x09, 0x1b,
++ 0x2b, 0x4b, 0x15, 0x15, 0x29, 0x41, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x10, 0x10, 0xfc, 0x10, 0xb8,
++ 0xb8, 0x78, 0x54, 0x94, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x50, 0x37, 0x34, 0x17, 0x17, 0x36,
++ 0x56, 0x17, 0x14, 0x28, 0x2f, 0x50, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf0, 0x70, 0x90, 0xf0, 0xb0,
++ 0xb0, 0xf0, 0xac, 0xfc, 0x14, 0x04, 0x00, 0x00,
++ 0x00, 0x0f, 0x4b, 0x2a, 0x2b, 0x0a, 0x1b, 0x2f,
++ 0x4a, 0x0b, 0x15, 0x19, 0x22, 0x45, 0x00, 0x00,
++ 0x80, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xf8, 0x48, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x4b, 0x29, 0x2b, 0x0c, 0x1f,
++ 0x2e, 0x4d, 0x16, 0x15, 0x24, 0x45, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0xc0, 0x20, 0xf0, 0x0c, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x00, 0x0f, 0x48, 0x2b, 0x2a, 0x0a, 0x1b, 0x2b,
++ 0x48, 0x0b, 0x12, 0x12, 0x3f, 0x40, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf0, 0x90, 0xd0, 0x30, 0xf0,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x48, 0x28, 0x2b, 0x0a, 0x1b, 0x2a,
++ 0x4a, 0x0a, 0x17, 0x14, 0x28, 0x50, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0x78, 0xfc, 0x78, 0xc8, 0x38,
++ 0xf8, 0x80, 0xfc, 0x80, 0xf8, 0x80, 0x00, 0x00,
++ 0x00, 0x0f, 0x48, 0x2f, 0x28, 0x0f, 0x19, 0x2f,
++ 0x49, 0x09, 0x11, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0x5c, 0x40, 0xbc, 0x10, 0xfc,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x0f, 0x48, 0x28, 0x29, 0x0f, 0x19, 0x29,
++ 0x49, 0x09, 0x13, 0x13, 0x25, 0x49, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xa0, 0xf0, 0xfc, 0x10, 0xf0,
++ 0xf0, 0x00, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x51, 0x32, 0x37, 0x14, 0x16, 0x35,
++ 0x5f, 0x16, 0x16, 0x26, 0x2a, 0x51, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0x38, 0xa8, 0xa8, 0xac, 0xc4,
++ 0xf8, 0xa8, 0xa8, 0x90, 0xa8, 0xc4, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x4b, 0x2b, 0x2a, 0x0f, 0x18,
++ 0x2b, 0x4a, 0x13, 0x12, 0x23, 0x42, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0x78, 0x28, 0xa8, 0xd8, 0x80,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x0f, 0x48, 0x2b, 0x28, 0x0f, 0x19, 0x29,
++ 0x49, 0x09, 0x11, 0x17, 0x20, 0x40, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xf8, 0xa0, 0xfc, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x0f, 0x4b, 0x2a, 0x2b, 0x0a, 0x1b, 0x28,
++ 0x4b, 0x08, 0x1f, 0x11, 0x26, 0x40, 0x00, 0x00,
++ 0x80, 0xfc, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x90,
++ 0x30, 0xc8, 0xfc, 0x58, 0x44, 0x40, 0x00, 0x00,
++ 0x00, 0x0f, 0x48, 0x2b, 0x2f, 0x0b, 0x18, 0x2b,
++ 0x4b, 0x08, 0x17, 0x11, 0x20, 0x47, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xf8, 0xfc, 0xf8, 0x40, 0xf8,
++ 0xf8, 0x40, 0xfc, 0x90, 0x70, 0x88, 0x00, 0x00,
++ 0x00, 0x1f, 0x50, 0x37, 0x34, 0x17, 0x14, 0x37,
++ 0x55, 0x15, 0x15, 0x25, 0x25, 0x45, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf8, 0xc8, 0xf8, 0xc8, 0xf8,
++ 0xe8, 0x28, 0xe8, 0x28, 0xe8, 0x38, 0x00, 0x00,
++ 0x00, 0x0f, 0x49, 0x2c, 0x2b, 0x0e, 0x1f, 0x29,
++ 0x4f, 0x0c, 0x17, 0x11, 0x21, 0x46, 0x00, 0x00,
++ 0x80, 0xfc, 0xd0, 0xd4, 0x24, 0x18, 0x74, 0x54,
++ 0x9c, 0xf8, 0x48, 0x30, 0x30, 0xcc, 0x00, 0x00,
++ 0x00, 0x0f, 0x49, 0x2d, 0x2d, 0x0a, 0x1c, 0x2f,
++ 0x4c, 0x0f, 0x10, 0x11, 0x22, 0x4c, 0x00, 0x00,
++ 0x80, 0xfc, 0x54, 0xb4, 0x58, 0xa8, 0xc4, 0xfc,
++ 0x88, 0xf8, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x50, 0x37, 0x34, 0x17, 0x16, 0x37,
++ 0x56, 0x16, 0x1f, 0x2a, 0x32, 0x44, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf8, 0x68, 0xec, 0xac, 0xc4,
++ 0xb8, 0xa8, 0xf0, 0x90, 0x68, 0x44, 0x00, 0x00,
++ 0x00, 0x0f, 0x49, 0x2f, 0x2b, 0x0a, 0x1b, 0x2a,
++ 0x4b, 0x0f, 0x14, 0x14, 0x27, 0x44, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xfc, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0xfc, 0x54, 0x7c, 0x8c, 0x0c, 0x00, 0x00,
++ 0x00, 0x0f, 0x4a, 0x2a, 0x2b, 0x0a, 0x19, 0x2a,
++ 0x4b, 0x0d, 0x1f, 0x13, 0x24, 0x48, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xfc, 0x28, 0x90, 0xfc, 0x14,
++ 0xd8, 0x5c, 0xd0, 0x70, 0xd0, 0x8c, 0x00, 0x00,
++ 0x00, 0x0f, 0x49, 0x2f, 0x28, 0x0b, 0x1f, 0x29,
++ 0x4b, 0x0d, 0x11, 0x11, 0x21, 0x47, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xfc, 0x40, 0xf8, 0xfc, 0x50,
++ 0xf8, 0x14, 0xf0, 0xf8, 0x70, 0x88, 0x00, 0x00,
++ 0x00, 0x0f, 0x4b, 0x28, 0x2f, 0x0f, 0x1b, 0x2b,
++ 0x4e, 0x0b, 0x13, 0x12, 0x23, 0x42, 0x00, 0x00,
++ 0x80, 0xfc, 0xf8, 0x40, 0xfc, 0x58, 0x58, 0xf8,
++ 0x20, 0xf8, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x52, 0x3f, 0x32, 0x1f, 0x1a, 0x3a,
++ 0x5f, 0x17, 0x16, 0x2a, 0x32, 0x42, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf8, 0x28, 0xd8, 0xf8, 0xc8,
++ 0xf8, 0x78, 0xc8, 0xf8, 0x28, 0xc4, 0x00, 0x00,
++ 0x00, 0x1f, 0x51, 0x3e, 0x32, 0x12, 0x1f, 0x32,
++ 0x57, 0x16, 0x1a, 0x32, 0x22, 0x42, 0x00, 0x00,
++ 0x80, 0xfc, 0x20, 0xf8, 0x70, 0xfc, 0xf8, 0x48,
++ 0x78, 0xf8, 0xc8, 0x78, 0x28, 0xc4, 0x00, 0x00,
++ 0x00, 0x1f, 0x50, 0x37, 0x37, 0x15, 0x17, 0x35,
++ 0x57, 0x14, 0x15, 0x29, 0x2f, 0x50, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xfc, 0xb8, 0x10, 0xfc, 0x98,
++ 0x74, 0x40, 0x78, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x52, 0x37, 0x39, 0x1f, 0x1a, 0x3f,
++ 0x5a, 0x1f, 0x15, 0x2a, 0x2a, 0x50, 0x00, 0x00,
++ 0x80, 0xfc, 0x48, 0xa8, 0x30, 0xfc, 0x90, 0xb8,
++ 0x90, 0xfc, 0x90, 0xd0, 0xd0, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x55, 0x3a, 0x35, 0x17, 0x14, 0x37,
++ 0x5f, 0x1a, 0x1f, 0x28, 0x28, 0x47, 0x00, 0x00,
++ 0x80, 0xfc, 0x68, 0xa8, 0x7c, 0xa8, 0xe8, 0xbc,
++ 0xa8, 0xbc, 0xa8, 0x28, 0xbc, 0xa0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x54, 0x37, 0x34, 0x13, 0x1b, 0x3b,
++ 0x5b, 0x1a, 0x1b, 0x2f, 0x22, 0x4c, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0x7c, 0x90, 0xb8, 0xa8, 0xb8,
++ 0xa8, 0xb8, 0xa8, 0xf8, 0x98, 0x64, 0x00, 0x00,
++ 0x00, 0x00, 0x0f, 0x01, 0x22, 0x12, 0x0c, 0x08,
++ 0x10, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x20, 0x20, 0xc8, 0x88, 0x50, 0x20,
++ 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x1e, 0x02, 0x24, 0x14, 0x08, 0x1f, 0x21, 0x41,
++ 0x3f, 0x01, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x90, 0x90, 0x64, 0x44, 0x28, 0xf0, 0x08, 0x04,
++ 0xf8, 0x00, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x1e, 0x02, 0x24, 0x18, 0x1c, 0x64, 0x04, 0x3d,
++ 0x23, 0x3c, 0x24, 0x04, 0x08, 0x33, 0x00, 0x00,
++ 0x90, 0x94, 0x64, 0x28, 0xf8, 0xa4, 0xa8, 0x18,
++ 0xf0, 0x90, 0xa0, 0x40, 0xb0, 0x0c, 0x00, 0x00,
++ 0x01, 0x02, 0x3f, 0x20, 0x3f, 0x20, 0x3f, 0x20,
++ 0x10, 0x11, 0x1e, 0x10, 0x10, 0x0f, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08,
++ 0x30, 0xc0, 0x00, 0x08, 0x08, 0xf8, 0x00, 0x00,
++ 0x01, 0x02, 0x3f, 0x20, 0x3f, 0x20, 0x3f, 0x24,
++ 0x04, 0x04, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x88,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x11, 0x21, 0x79, 0x49, 0x49, 0x79, 0x49,
++ 0x49, 0x4a, 0x7a, 0x44, 0x09, 0x16, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x88, 0x88, 0x50,
++ 0x50, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x01, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x01, 0x7f,
++ 0x02, 0x05, 0x19, 0x6f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xfc,
++ 0x80, 0x40, 0x30, 0xec, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x27, 0x79, 0x49, 0x4a, 0x7d, 0x49,
++ 0x48, 0x48, 0x78, 0x48, 0x03, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0x08, 0x14, 0x14, 0x10,
++ 0xa0, 0xa0, 0x40, 0xa0, 0x18, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x23, 0x7a, 0x4d, 0x48, 0x78, 0x4f,
++ 0x48, 0x78, 0x48, 0x01, 0x06, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xf0, 0x00, 0x00, 0xfc,
++ 0xa0, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x11, 0x21, 0x79, 0x4a, 0x4c, 0x7f, 0x48,
++ 0x49, 0x49, 0x79, 0x49, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x1c, 0x1a, 0x28, 0x4a, 0x0d,
++ 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0xfc, 0x90, 0x90, 0x90, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x12, 0x22, 0x7b, 0x48, 0x4f, 0x78, 0x4b,
++ 0x4a, 0x4b, 0x79, 0x48, 0x07, 0x00, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x00, 0xf8,
++ 0x08, 0xf8, 0x10, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x2a, 0x2c, 0x29, 0x3e, 0x32,
++ 0x2a, 0x24, 0x24, 0x2a, 0x32, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x84, 0xf4, 0x94, 0x94,
++ 0xf4, 0x98, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x0c, 0x12, 0x7d, 0x14, 0x15, 0x2b, 0x48,
++ 0x1e, 0x32, 0x4c, 0x0d, 0x13, 0x62, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0xa8, 0xb0, 0xa0, 0xf8, 0xc8,
++ 0xa8, 0xb0, 0x90, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x2a, 0x7f, 0x08, 0x3e, 0x2a, 0x3e,
++ 0x2a, 0x3e, 0x08, 0x7f, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0xa8, 0xb0, 0xa0, 0xf8, 0xc8,
++ 0xa8, 0xb0, 0x90, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x2b, 0x2c, 0x28, 0x3e, 0x32,
++ 0x2a, 0x24, 0x24, 0x2b, 0x32, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0xa8, 0xfc, 0x20, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x1e, 0x2a, 0x6e, 0x3e, 0x2a, 0x14, 0x1e,
++ 0x2a, 0x6e, 0x3e, 0x2a, 0x12, 0x25, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0xa8, 0xb0, 0xa0, 0xf8, 0xc8,
++ 0xa8, 0xb0, 0x90, 0xb0, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x01, 0x7f, 0x01, 0x01, 0x03,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x7f, 0x02, 0x04, 0x3f, 0x00,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x40, 0x70, 0x88, 0x00,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x1f, 0x60, 0x0f, 0x08, 0x0f,
++ 0x00, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0xf0, 0x0c, 0xe0, 0x20, 0xe0,
++ 0x00, 0xf0, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x7f, 0x01, 0x01, 0x1e, 0x02, 0x7f, 0x01,
++ 0x1e, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x20, 0xfc, 0x60, 0xc4, 0xb4, 0xec, 0x20, 0xc4,
++ 0x34, 0xfc, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x7f, 0x1f, 0x01, 0x7f, 0x14,
++ 0x22, 0x5f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xfc, 0xf0, 0x00, 0xfc, 0x90,
++ 0x48, 0xf4, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x09, 0x31, 0x27, 0x3b, 0x23, 0x3d, 0x29, 0x23,
++ 0x1f, 0x12, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0xb8, 0x88, 0x78, 0x28, 0x08,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x11, 0x1f, 0x10, 0x17, 0x14,
++ 0x17, 0x14, 0x17, 0x2f, 0x29, 0x5f, 0x00, 0x00,
++ 0x00, 0xf0, 0xfc, 0xe8, 0x10, 0xf0, 0xf0, 0x90,
++ 0xf0, 0x90, 0xf0, 0xf8, 0x48, 0xfc, 0x00, 0x00,
++ 0x11, 0x09, 0x41, 0x21, 0x0f, 0x11, 0x13, 0x24,
++ 0x21, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0xf0, 0x10, 0xf0, 0xf0, 0xfc, 0x00, 0xfc, 0xa4,
++ 0x58, 0xf0, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x23, 0x13, 0x43, 0x2f, 0x13,
++ 0x2d, 0x42, 0x1f, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0xd0, 0xf0, 0xfc, 0xf8,
++ 0x48, 0xb0, 0xf0, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x01, 0x79, 0x4a, 0x4c, 0x7b, 0x48, 0x48,
++ 0x79, 0x49, 0x48, 0x78, 0x48, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0x10, 0x08, 0xf4, 0x80, 0xf0,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4b, 0x4a, 0x7a, 0x48, 0x48,
++ 0x78, 0x48, 0x49, 0x7a, 0x4c, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x48, 0x40, 0x60, 0x60,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x49, 0x49, 0x79, 0x4a, 0x4a,
++ 0x7c, 0x48, 0x48, 0x78, 0x49, 0x0e, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x50, 0x48, 0x44, 0x4c, 0x48,
++ 0x50, 0xd0, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x4a, 0x4a, 0x7a, 0x4a, 0x4a,
++ 0x7b, 0x4a, 0x4a, 0x78, 0x48, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x78, 0x48, 0x48, 0x48,
++ 0xf8, 0x08, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4f, 0x48, 0x7a, 0x49, 0x48,
++ 0x78, 0x48, 0x48, 0x79, 0x4f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x50, 0x90, 0xa0,
++ 0x60, 0x60, 0x90, 0x38, 0xc4, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4a, 0x4b, 0x7a, 0x4a, 0x4a,
++ 0x7a, 0x4a, 0x4a, 0x7c, 0x4c, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x88, 0x80, 0x88,
++ 0xb0, 0xc0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x11, 0x1e, 0x0f, 0x27, 0x24, 0x27, 0x24,
++ 0x27, 0x24, 0x27, 0x3f, 0x0c, 0x70, 0x00, 0x00,
++ 0x30, 0xc0, 0x08, 0xf8, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xfc, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x17, 0x78, 0x1f, 0x10,
++ 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x48, 0x70, 0x44, 0x44, 0x3c, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4a, 0x4a, 0x7a, 0x4a, 0x4a,
++ 0x7a, 0x4a, 0x4a, 0x7a, 0x4b, 0x0c, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0x90, 0x94, 0xf8, 0x90, 0x90,
++ 0x90, 0x90, 0xb0, 0xd4, 0x14, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4b, 0x48, 0x78, 0x4f, 0x48,
++ 0x78, 0x49, 0x4a, 0x7c, 0x48, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0xe0,
++ 0xe0, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x09, 0x0f, 0x12, 0x7f, 0x08, 0x1f, 0x68,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x20, 0xf0, 0x90, 0xfc, 0x20, 0xf0, 0x2c,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x4f, 0x49, 0x79, 0x4b, 0x4c,
++ 0x78, 0x4f, 0x48, 0x78, 0x48, 0x00, 0x00, 0x00,
++ 0x40, 0x60, 0x90, 0xe8, 0x48, 0x40, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x00, 0x78, 0x4b, 0x48, 0x7b, 0x4a, 0x4b,
++ 0x7a, 0x48, 0x49, 0x7a, 0x4c, 0x00, 0x00, 0x00,
++ 0x10, 0x90, 0xa0, 0xf8, 0x48, 0xf8, 0x40, 0xfc,
++ 0xc4, 0xc4, 0x44, 0x58, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4a, 0x4a, 0x7a, 0x4b, 0x4a,
++ 0x7a, 0x4a, 0x4a, 0x7c, 0x4f, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4b, 0x4a, 0x7a, 0x4b, 0x4a,
++ 0x78, 0x48, 0x49, 0x79, 0x4a, 0x0c, 0x00, 0x00,
++ 0x80, 0x38, 0x08, 0xb8, 0x08, 0x08, 0xf8, 0xa8,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x07, 0x78, 0x4b, 0x48, 0x7f, 0x48, 0x4b,
++ 0x78, 0x4a, 0x4a, 0x7b, 0x4c, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0x48, 0x40, 0x7c, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x00, 0x7b, 0x48, 0x49, 0x78, 0x4f, 0x48, 0x7b,
++ 0x4a, 0x4a, 0x7b, 0x4a, 0x02, 0x02, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0xf8,
++ 0x48, 0x48, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x4a, 0x4b, 0x7a, 0x4b, 0x4a,
++ 0x78, 0x49, 0x4f, 0x78, 0x48, 0x00, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x88,
++ 0xa0, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x2f, 0x49, 0x12, 0x04, 0x1f,
++ 0x68, 0x0f, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0xfc, 0xe8, 0x20, 0x90, 0x40, 0xf0,
++ 0x2c, 0xe0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x3f, 0x01, 0x1f, 0x01, 0x7f,
++ 0x04, 0x3f, 0x01, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x00, 0xf0, 0x00, 0xfc,
++ 0x40, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x7b, 0x48, 0x48, 0x7f, 0x48, 0x48,
++ 0x79, 0x4f, 0x49, 0x79, 0x49, 0x01, 0x00, 0x00,
++ 0x80, 0x88, 0xf8, 0x90, 0xa0, 0xfc, 0x50, 0x88,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4d, 0x48, 0x7b, 0x48, 0x4f,
++ 0x78, 0x4b, 0x4a, 0x7a, 0x4b, 0x02, 0x00, 0x00,
++ 0x40, 0xfc, 0x58, 0xe0, 0x40, 0xf8, 0x40, 0xfc,
++ 0x40, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x79, 0x49, 0x4a, 0x7a, 0x4a, 0x4a, 0x7a,
++ 0x4a, 0x4a, 0x7a, 0x4b, 0x01, 0x06, 0x00, 0x00,
++ 0x08, 0x34, 0xc4, 0xfc, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0xfc, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4d, 0x49, 0x79, 0x49, 0x49,
++ 0x78, 0x4f, 0x48, 0x78, 0x49, 0x06, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x40, 0xfc, 0x00, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x7a, 0x49, 0x4b, 0x7a, 0x4d, 0x49, 0x79,
++ 0x49, 0x48, 0x7b, 0x48, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0x48, 0x50, 0xfc, 0x08, 0xf0, 0x10, 0x10,
++ 0xf0, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x77, 0x51, 0x51, 0x70, 0x57, 0x54,
++ 0x77, 0x55, 0x55, 0x76, 0x54, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xf0, 0x40, 0xfc, 0x44,
++ 0x74, 0x54, 0x54, 0xec, 0x44, 0x4c, 0x00, 0x00,
++ 0x00, 0x07, 0x72, 0x5f, 0x54, 0x74, 0x57, 0x54,
++ 0x77, 0x54, 0x57, 0x7c, 0x50, 0x00, 0x00, 0x00,
++ 0x20, 0xa0, 0x20, 0xe0, 0xbc, 0xe8, 0xa8, 0xa8,
++ 0xa8, 0x90, 0x90, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x4b, 0x4f, 0x7b, 0x4a, 0x4b,
++ 0x7a, 0x4b, 0x4a, 0x7b, 0x49, 0x06, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xf8, 0xfc, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x7a, 0x49, 0x4b, 0x7a, 0x4d, 0x4a,
++ 0x78, 0x49, 0x4e, 0x78, 0x49, 0x0e, 0x00, 0x00,
++ 0x18, 0xe4, 0x48, 0x30, 0xfc, 0x48, 0xa8, 0x94,
++ 0xf0, 0xf8, 0x90, 0x60, 0xb0, 0x0c, 0x00, 0x00,
++ 0x3e, 0x22, 0x3e, 0x3e, 0x22, 0x3e, 0x08, 0x0f,
++ 0x18, 0x2f, 0x4f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0xf8, 0x88, 0xf8, 0xf8, 0x88, 0xf8, 0x40, 0xf8,
++ 0x80, 0xf0, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x49, 0x4b, 0x7c, 0x4b, 0x4a,
++ 0x7a, 0x4b, 0x49, 0x79, 0x4a, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xb8, 0xa8,
++ 0xa8, 0xb8, 0x10, 0x98, 0x64, 0x44, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x3e, 0x22, 0x3e, 0x17, 0x7f,
++ 0x10, 0x1f, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x48, 0x30, 0xd8, 0xf4,
++ 0x10, 0xf0, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x4b, 0x4a, 0x7a, 0x4b, 0x4b,
++ 0x7a, 0x4a, 0x4a, 0x7c, 0x4c, 0x08, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xfc, 0xa8, 0x98, 0x70, 0xfc,
++ 0x70, 0x70, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x01, 0x07, 0x79, 0x4b, 0x4a, 0x7c, 0x4f, 0x48,
++ 0x7f, 0x49, 0x4e, 0x79, 0x4e, 0x00, 0x00, 0x00,
++ 0x10, 0xfc, 0x10, 0xfc, 0xe8, 0x00, 0xfc, 0xc8,
++ 0x68, 0xf0, 0x70, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x3e, 0x22, 0x3e, 0x3e, 0x22, 0x3e, 0x0f, 0x1b,
++ 0x6b, 0x0f, 0x3f, 0x04, 0x03, 0x7c, 0x00, 0x00,
++ 0xf8, 0x88, 0xf8, 0xf8, 0x88, 0xf8, 0xf8, 0xe0,
++ 0xe0, 0xf8, 0xe0, 0x40, 0xc0, 0x3c, 0x00, 0x00,
++ 0x01, 0x3f, 0x07, 0x17, 0x17, 0x17, 0x1f, 0x7f,
++ 0x1c, 0x5d, 0x5d, 0x5d, 0x7f, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0xfc,
++ 0x70, 0x70, 0x70, 0x70, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x07, 0x74, 0x57, 0x57, 0x77, 0x57, 0x56,
++ 0x77, 0x55, 0x57, 0x79, 0x48, 0x17, 0x00, 0x00,
++ 0x00, 0xfc, 0x04, 0xfc, 0x58, 0x58, 0xf8, 0xa8,
++ 0xf8, 0xfc, 0xf4, 0xf4, 0x7c, 0x98, 0x00, 0x00,
++ 0x00, 0x3f, 0x12, 0x0c, 0x04, 0x7f, 0x0d, 0x0e,
++ 0x14, 0x14, 0x24, 0x44, 0x04, 0x0c, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0xf4, 0x00, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x02, 0x04, 0x3f, 0x08, 0x0f, 0x11,
++ 0x21, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x40, 0x30, 0xc8, 0x00, 0xf8, 0x00,
++ 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x1f, 0x28, 0x28, 0x49, 0x7e,
++ 0x09, 0x0c, 0x12, 0x12, 0x20, 0x43, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0xfc, 0x70, 0xa8, 0x24, 0x20,
++ 0xfc, 0x48, 0xc8, 0x30, 0x68, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x08, 0x08, 0x08, 0x10, 0x1e, 0x32,
++ 0x52, 0x12, 0x12, 0x1e, 0x13, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x7e, 0x12, 0x12, 0x13, 0x3e, 0x2a, 0x6a,
++ 0x2a, 0x2a, 0x39, 0x28, 0x20, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xa8, 0x28, 0x28, 0x28, 0x28,
++ 0xa8, 0xa8, 0xc8, 0x48, 0x88, 0x18, 0x00, 0x00,
++ 0x01, 0x7f, 0x11, 0x11, 0x11, 0x3d, 0x25, 0x65,
++ 0x25, 0x25, 0x3d, 0x25, 0x21, 0x06, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x24, 0xe8, 0x30, 0x20,
++ 0x20, 0x20, 0x20, 0x64, 0xa4, 0x1c, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x13, 0x12, 0x3a, 0x2b, 0x6a,
++ 0x2a, 0x2a, 0x3a, 0x2c, 0x24, 0x0b, 0x00, 0x00,
++ 0x20, 0xfc, 0x50, 0xfc, 0x50, 0x70, 0xfc, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x10, 0x10, 0x3c, 0x24, 0x64,
++ 0x24, 0x24, 0x3c, 0x24, 0x23, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x13, 0x12, 0x3a, 0x2a, 0x6a,
++ 0x2a, 0x2b, 0x3d, 0x25, 0x29, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0xfc, 0x34, 0xfc, 0x04, 0x0c, 0x00, 0x00,
++ 0x00, 0x7e, 0x13, 0x10, 0x10, 0x3f, 0x24, 0x64,
++ 0x27, 0x24, 0x3c, 0x24, 0x27, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7e, 0x13, 0x10, 0x10, 0x3c, 0x25, 0x66,
++ 0x24, 0x27, 0x3c, 0x24, 0x20, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x90, 0x90, 0x98, 0x64, 0x64,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x7c, 0x13, 0x10, 0x10, 0x3c, 0x24, 0x65,
++ 0x27, 0x25, 0x3d, 0x25, 0x21, 0x01, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0x90, 0xa0, 0xa4, 0x28,
++ 0x30, 0x20, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x0b, 0x42, 0x23, 0x0a, 0x12, 0x24, 0x2b,
++ 0x7f, 0x04, 0x1f, 0x68, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x48, 0xf8, 0x90, 0x60, 0xf0, 0x0c,
++ 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x12, 0x12, 0x3b, 0x2a, 0x6a,
++ 0x2b, 0x2a, 0x3a, 0x2c, 0x24, 0x09, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xa8, 0xa8, 0xb8, 0xa8, 0xa8,
++ 0xb8, 0xa8, 0xa8, 0xc8, 0xc8, 0x98, 0x00, 0x00,
++ 0x00, 0x7e, 0x13, 0x11, 0x10, 0x3c, 0x27, 0x64,
++ 0x25, 0x25, 0x3d, 0x25, 0x21, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0x90, 0xa0, 0xfc, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x11, 0x10, 0x3f, 0x26, 0x65,
++ 0x25, 0x24, 0x3d, 0x26, 0x20, 0x00, 0x00, 0x00,
++ 0x80, 0xf0, 0x10, 0xe0, 0x20, 0xfc, 0x68, 0x68,
++ 0x50, 0xd0, 0x48, 0x44, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x11, 0x11, 0x3d, 0x24, 0x64,
++ 0x25, 0x27, 0x3d, 0x25, 0x21, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x80, 0xf8,
++ 0x48, 0x68, 0x98, 0xe8, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x7e, 0x10, 0x10, 0x11, 0x3d, 0x25, 0x65,
++ 0x25, 0x25, 0x3d, 0x24, 0x21, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x40, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x08, 0xf8, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x7c, 0x13, 0x10, 0x10, 0x3c, 0x24, 0x64,
++ 0x27, 0x25, 0x3d, 0x25, 0x21, 0x01, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf0, 0x90, 0xf0, 0x90,
++ 0xfc, 0x50, 0x54, 0x8c, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x7a, 0x14, 0x12, 0x12, 0x38, 0x2b, 0x6a,
++ 0x2b, 0x2a, 0x3a, 0x2b, 0x23, 0x02, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0x48, 0x48, 0x80, 0xf8, 0x28,
++ 0xa8, 0x48, 0xa8, 0x18, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7e, 0x13, 0x10, 0x17, 0x3c, 0x25, 0x65,
++ 0x25, 0x25, 0x3d, 0x24, 0x27, 0x00, 0x00, 0x00,
++ 0x40, 0x48, 0xf8, 0x00, 0xfc, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x11, 0x11, 0x3f, 0x26, 0x65,
++ 0x25, 0x25, 0x3d, 0x25, 0x21, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x70, 0x50, 0xfc, 0x08, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x7c, 0x13, 0x10, 0x11, 0x3c, 0x27, 0x64,
++ 0x24, 0x25, 0x3d, 0x26, 0x27, 0x00, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x80,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x7d, 0x11, 0x12, 0x16, 0x39, 0x29, 0x6a,
++ 0x2f, 0x28, 0x39, 0x2a, 0x24, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0xbc, 0xa8, 0xa8, 0xfc, 0x48, 0x48,
++ 0xfc, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x00, 0x7d, 0x11, 0x11, 0x11, 0x3d, 0x25, 0x65,
++ 0x25, 0x25, 0x3e, 0x22, 0x04, 0x09, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x50, 0x50, 0xf8, 0x50,
++ 0x50, 0xfc, 0xa8, 0x90, 0xe8, 0x84, 0x00, 0x00,
++ 0x00, 0x7f, 0x11, 0x11, 0x11, 0x3d, 0x25, 0x65,
++ 0x25, 0x24, 0x3f, 0x22, 0x22, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x20, 0xf8, 0x20, 0x20,
++ 0xfc, 0x54, 0x2c, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x00, 0x7e, 0x13, 0x11, 0x10, 0x3f, 0x26, 0x64,
++ 0x27, 0x24, 0x3c, 0x24, 0x21, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x10, 0xa0, 0xfc, 0x48, 0x40,
++ 0xfc, 0x40, 0x78, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x07, 0x1c, 0x67, 0x04, 0x7e,
++ 0x10, 0x1e, 0x32, 0x53, 0x1e, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xfc,
++ 0x40, 0x78, 0xc8, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x3f, 0x2a, 0x3e, 0x21,
++ 0x7f, 0x04, 0x1f, 0x68, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x70, 0x54, 0x8c, 0xf8, 0x50, 0x70, 0x8c,
++ 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x11, 0x10, 0x3f, 0x25, 0x65,
++ 0x25, 0x25, 0x3d, 0x25, 0x21, 0x06, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x11, 0x11, 0x3d, 0x25, 0x65,
++ 0x24, 0x27, 0x3c, 0x27, 0x20, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0xfc, 0x10, 0xfc, 0x90, 0x70, 0x00, 0x00,
++ 0x00, 0x7f, 0x10, 0x17, 0x11, 0x3f, 0x29, 0x69,
++ 0x2e, 0x2f, 0x38, 0x28, 0x21, 0x06, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xbc, 0x10, 0xbc,
++ 0x00, 0xfc, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x01, 0x7e, 0x12, 0x11, 0x11, 0x3f, 0x24, 0x65,
++ 0x25, 0x25, 0x3c, 0x24, 0x27, 0x00, 0x00, 0x00,
++ 0xd0, 0x54, 0xa4, 0xa8, 0x10, 0xf8, 0x04, 0xf8,
++ 0x08, 0xf8, 0x90, 0x60, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x13, 0x12, 0x3b, 0x2a, 0x6b,
++ 0x2a, 0x28, 0x3f, 0x28, 0x21, 0x06, 0x00, 0x00,
++ 0x40, 0xf8, 0xe8, 0x58, 0xe8, 0xf8, 0xe8, 0x58,
++ 0x48, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x01, 0x7f, 0x10, 0x13, 0x10, 0x3f, 0x28, 0x6f,
++ 0x2f, 0x29, 0x39, 0x2f, 0x21, 0x03, 0x00, 0x00,
++ 0x10, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0xa8, 0x24,
++ 0xfc, 0x28, 0x98, 0x34, 0xcc, 0x04, 0x00, 0x00,
++ 0x02, 0x7d, 0x13, 0x12, 0x15, 0x39, 0x29, 0x68,
++ 0x2b, 0x2a, 0x3b, 0x2a, 0x23, 0x02, 0x00, 0x00,
++ 0x48, 0x50, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x7c, 0x17, 0x14, 0x13, 0x3a, 0x2b, 0x6d,
++ 0x29, 0x2f, 0x3b, 0x2a, 0x24, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x28, 0x90, 0x90, 0x7c, 0x94, 0x58,
++ 0x50, 0xdc, 0x50, 0xf0, 0x50, 0x8c, 0x00, 0x00,
++ 0x10, 0x12, 0x7d, 0x1a, 0x36, 0x51, 0x12, 0x7f,
++ 0x04, 0x1f, 0x62, 0x0f, 0x34, 0x07, 0x00, 0x00,
++ 0x90, 0x90, 0x7c, 0x90, 0xb8, 0x54, 0x90, 0xfc,
++ 0x20, 0xf0, 0x0c, 0xf0, 0x10, 0xf0, 0x00, 0x00,
++ 0x02, 0x7e, 0x13, 0x15, 0x12, 0x3a, 0x2d, 0x6f,
++ 0x28, 0x2f, 0x38, 0x29, 0x26, 0x00, 0x00, 0x00,
++ 0x48, 0x48, 0xec, 0xb4, 0xe8, 0xa8, 0xf4, 0x5c,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x00, 0x7f, 0x08, 0x2a, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x01, 0x7e, 0x08, 0x2a, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xe8, 0xa8, 0xa8,
++ 0xa8, 0xe8, 0xa8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x00, 0x7f, 0x08, 0x2a, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x2b, 0x49, 0x08, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0xa0, 0xa0, 0xfc, 0xa0, 0x90,
++ 0x90, 0xb4, 0xcc, 0x0c, 0xf4, 0x04, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x1f, 0x21, 0x3f, 0x20, 0x0f,
++ 0x00, 0x7f, 0x05, 0x19, 0x61, 0x03, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0xf0, 0x08, 0xf8, 0x08, 0xe0,
++ 0x00, 0xfc, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x00, 0x7f, 0x08, 0x2b, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0xa0, 0xa0, 0x3c, 0x20,
++ 0x20, 0x3c, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x00, 0x7f, 0x08, 0x2a, 0x2a,
++ 0x2b, 0x2b, 0x2a, 0x28, 0x48, 0x09, 0x00, 0x00,
++ 0x20, 0x10, 0x50, 0x48, 0x48, 0xc8, 0xd8, 0xd4,
++ 0x54, 0x64, 0x60, 0x48, 0xc8, 0x38, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x00, 0x7f, 0x08, 0x2a, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x29, 0x4a, 0x0c, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0xfc, 0x40, 0x48, 0x68,
++ 0x68, 0xb0, 0x90, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x03, 0x7e, 0x08, 0x2a, 0x2a,
++ 0x2a, 0x2a, 0x2b, 0x28, 0x49, 0x0a, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0xfc, 0x90, 0xf0, 0x90, 0xf0,
++ 0x90, 0x90, 0xfc, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x00, 0x7e, 0x09, 0x2b, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x2b, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x78, 0x88, 0xf0, 0x10, 0xfc, 0x20, 0xb4,
++ 0xb8, 0x70, 0xa8, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x01, 0x3d, 0x03, 0x01, 0x7f, 0x11, 0x37, 0x35,
++ 0x34, 0x37, 0x34, 0x34, 0x51, 0x16, 0x00, 0x00,
++ 0x00, 0x78, 0xa8, 0x28, 0xa8, 0xa8, 0x48, 0x98,
++ 0x40, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x00, 0x7f, 0x08, 0x2a, 0x2a,
++ 0x2b, 0x2a, 0x2a, 0x2b, 0x48, 0x09, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x50, 0x94,
++ 0x4c, 0x70, 0xd0, 0x20, 0x50, 0x8c, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x00, 0x7e, 0x08, 0x2a, 0x2a,
++ 0x2a, 0x2b, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x00, 0xf8, 0x88, 0xf8,
++ 0x50, 0xfc, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x01, 0x7f, 0x02, 0x7d, 0x15, 0x15, 0x2d, 0x50,
++ 0x1f, 0x10, 0x1f, 0x15, 0x25, 0x49, 0x00, 0x00,
++ 0x00, 0xfc, 0x98, 0x70, 0x50, 0x50, 0xe8, 0x14,
++ 0xf0, 0x10, 0xf0, 0x50, 0x30, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x01, 0x7e, 0x08, 0x2a, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x2b, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xdc, 0x54, 0xdc, 0x00, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x03, 0x7e, 0x13, 0x34, 0x37,
++ 0x35, 0x35, 0x35, 0x30, 0x57, 0x10, 0x00, 0x00,
++ 0xa0, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x00, 0xfc,
++ 0xf0, 0x10, 0xf0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x03, 0x02, 0x7f, 0x10, 0x37, 0x35,
++ 0x34, 0x37, 0x34, 0x37, 0x51, 0x13, 0x00, 0x00,
++ 0x40, 0xfc, 0xb8, 0xa8, 0xb8, 0xa0, 0xf8, 0xf0,
++ 0xa0, 0xfc, 0xc8, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x1f, 0x11, 0x11, 0x1f, 0x01,
++ 0x3f, 0x21, 0x21, 0x3f, 0x20, 0x20, 0x00, 0x00,
++ 0x38, 0xc0, 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x00,
++ 0xf8, 0x48, 0x68, 0x98, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x11, 0x1f, 0x11, 0x1f, 0x01,
++ 0x3f, 0x21, 0x21, 0x3f, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x48, 0x68, 0x98, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x7f, 0x01, 0x1f, 0x01, 0x7f, 0x01,
++ 0x1f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x70, 0x80, 0xfc, 0x00, 0xf0, 0x10, 0xfc, 0x10,
++ 0xf0, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x03, 0x05, 0x39, 0x09, 0x09, 0x7f, 0x09, 0x1d,
++ 0x1b, 0x2b, 0x49, 0x09, 0x09, 0x0b, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x24, 0xe8, 0x30, 0x20,
++ 0x20, 0x20, 0x20, 0x64, 0xa4, 0x1c, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x08, 0x08, 0x7e, 0x08, 0x1d,
++ 0x1a, 0x2a, 0x48, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xfc,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x08, 0x08, 0x7f, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0x88, 0x88, 0x88,
++ 0xf8, 0x88, 0x80, 0x80, 0xfc, 0x80, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x08, 0x09, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x48, 0xfc, 0x40, 0x48, 0x68,
++ 0x68, 0xb0, 0x90, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x09, 0x08, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x09, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x70, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x08, 0x08, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x49, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x00, 0xf8,
++ 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x09, 0x08, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0xb0, 0xa8, 0x24, 0x20, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x0b, 0x08, 0x7e, 0x0c, 0x1a,
++ 0x1a, 0x28, 0x4b, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0xfc, 0x90, 0xf0, 0x90, 0xf0,
++ 0x90, 0x90, 0xfc, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x02, 0x04, 0x39, 0x08, 0x09, 0x7f, 0x09, 0x1d,
++ 0x1b, 0x2b, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x02, 0x05, 0x39, 0x09, 0x09, 0x7f, 0x09, 0x1d,
++ 0x1b, 0x2b, 0x49, 0x0a, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8, 0x08,
++ 0xe8, 0xa8, 0xa8, 0xe8, 0xa8, 0x18, 0x00, 0x00,
++ 0x01, 0x7f, 0x1f, 0x17, 0x14, 0x17, 0x1f, 0x00,
++ 0x1f, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0xd0, 0x50, 0xd0, 0xf0, 0x60,
++ 0x80, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x1f, 0x17, 0x14, 0x17, 0x1f, 0x00,
++ 0x1f, 0x00, 0x7f, 0x0d, 0x31, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0xd0, 0x50, 0xd0, 0xf0, 0x00,
++ 0xf0, 0x00, 0xfc, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x08, 0x09, 0x7e, 0x0c, 0x1a,
++ 0x1a, 0x28, 0x49, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x18, 0xf0, 0xa8, 0xa4, 0x04, 0x20, 0xf8, 0xa8,
++ 0xf8, 0xa8, 0xfc, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x02, 0x04, 0x39, 0x09, 0x0a, 0x7e, 0x09, 0x1d,
++ 0x1b, 0x2b, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x08, 0x30, 0xc8, 0x24, 0x24, 0x40, 0xb8, 0x08,
++ 0x08, 0xb8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x7f, 0x0f, 0x08, 0x0f, 0x3f, 0x27, 0x24,
++ 0x27, 0x1f, 0x7f, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0xe0, 0x20, 0xe0, 0xf8, 0xc8, 0x48,
++ 0xf8, 0xc0, 0xfc, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x02, 0x05, 0x39, 0x09, 0x09, 0x7f, 0x08, 0x1d,
++ 0x1a, 0x2a, 0x4b, 0x08, 0x08, 0x0b, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xa0, 0x24,
++ 0x5c, 0xf0, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x02, 0x04, 0x39, 0x09, 0x0a, 0x7e, 0x09, 0x1c,
++ 0x1a, 0x2b, 0x4a, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x90, 0xa8, 0x24, 0x50,
++ 0x88, 0xfc, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x02, 0x05, 0x38, 0x08, 0x08, 0x7e, 0x08, 0x1c,
++ 0x1b, 0x2a, 0x48, 0x09, 0x0a, 0x08, 0x00, 0x00,
++ 0x20, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x28,
++ 0xf4, 0x40, 0xa8, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x02, 0x05, 0x39, 0x09, 0x09, 0x7f, 0x09, 0x1d,
++ 0x1b, 0x2b, 0x49, 0x0b, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x20, 0xac, 0xac, 0x20,
++ 0x60, 0x78, 0xa0, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x08, 0x77, 0x11, 0x11, 0x7e, 0x17, 0x38,
++ 0x37, 0x56, 0x52, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x50, 0x50, 0xe8, 0xfc, 0x00,
++ 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x09, 0x71, 0x11, 0x17, 0x7c, 0x13, 0x3a,
++ 0x37, 0x56, 0x53, 0x16, 0x14, 0x1b, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x40, 0xfc, 0x28, 0xfc, 0x20,
++ 0xe8, 0xd8, 0xb4, 0xdc, 0xac, 0x44, 0x00, 0x00,
++ 0x04, 0x09, 0x71, 0x13, 0x10, 0x7d, 0x11, 0x3b,
++ 0x34, 0x55, 0x50, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x08, 0xf0, 0x48, 0xf4, 0x40, 0xf0, 0xf8, 0xfc,
++ 0x08, 0xf8, 0x40, 0xa8, 0x94, 0x70, 0x00, 0x00,
++ 0x04, 0x09, 0x76, 0x13, 0x12, 0x7f, 0x13, 0x3f,
++ 0x37, 0x54, 0x53, 0x17, 0x13, 0x10, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xf8, 0xa8, 0xb8, 0xa0, 0xbc,
++ 0xbc, 0xac, 0xb4, 0xbc, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x0f, 0x73, 0x12, 0x13, 0x7c, 0x13, 0x39,
++ 0x34, 0x57, 0x50, 0x17, 0x11, 0x13, 0x00, 0x00,
++ 0x40, 0xfc, 0xb8, 0xa8, 0xb8, 0xa0, 0xf8, 0xf0,
++ 0xa0, 0xfc, 0xc8, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x4c, 0x30, 0x1f, 0x00,
++ 0x1f, 0x10, 0x3f, 0x20, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x88, 0x78, 0xf0, 0x10,
++ 0xf0, 0x00, 0xf8, 0x08, 0x08, 0xf0, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x4c, 0x34, 0x04, 0x3f,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x88, 0x78, 0x40, 0xf8,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x4c, 0x30, 0x08, 0x0a,
++ 0x73, 0x14, 0x0c, 0x0a, 0x1f, 0x62, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x88, 0x78, 0x40, 0x40,
++ 0xf8, 0x48, 0x48, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x49, 0x32, 0x1f, 0x11,
++ 0x17, 0x1e, 0x11, 0x16, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x48, 0x48, 0x38, 0xf0, 0x10,
++ 0xd0, 0x50, 0x90, 0x50, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x24, 0x48, 0x32, 0x02, 0x32,
++ 0x0a, 0x0e, 0x74, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x88, 0xf8, 0x88, 0xb0,
++ 0xc0, 0xb0, 0x88, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x01, 0x3f, 0x22, 0x4c, 0x30, 0x1f, 0x02, 0x7f,
++ 0x02, 0x1f, 0x07, 0x1c, 0x67, 0x04, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x88, 0x78, 0xf0, 0x10, 0xfc,
++ 0x10, 0xf0, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x4c, 0x35, 0x05, 0x0f,
++ 0x11, 0x7f, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x88, 0x78, 0x00, 0xf0,
++ 0x00, 0xfc, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x22, 0x4c, 0x30, 0x0f, 0x09,
++ 0x09, 0x3f, 0x27, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x88, 0x88, 0x78, 0xe0, 0xe0,
++ 0x20, 0xf8, 0xc8, 0x48, 0xc8, 0x58, 0x00, 0x00,
++ 0x01, 0x3f, 0x29, 0x77, 0x3f, 0x1f, 0x12, 0x1e,
++ 0x3e, 0x22, 0x3e, 0x3e, 0x22, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x28, 0xd8, 0xf8, 0xf0, 0x90, 0xf0,
++ 0xf8, 0x88, 0xf8, 0xf8, 0x84, 0xfc, 0x00, 0x00,
++ 0x01, 0x3f, 0x22, 0x4c, 0x32, 0x07, 0x3a, 0x0b,
++ 0x7f, 0x09, 0x7f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x88, 0x78, 0xf0, 0x60, 0x80,
++ 0xf0, 0x00, 0xfc, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x3f, 0x25, 0x7f, 0x09, 0x7f, 0x0f, 0x0f,
++ 0x09, 0x0f, 0x7f, 0x06, 0x01, 0x3e, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0x20, 0xfc, 0xe0, 0xe0,
++ 0x20, 0xe0, 0xfc, 0x40, 0xe0, 0x10, 0x00, 0x00,
++ 0x01, 0x3f, 0x22, 0x4c, 0x38, 0x3e, 0x22, 0x3e,
++ 0x3f, 0x08, 0x7f, 0x0e, 0x12, 0x67, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x88, 0x78, 0x40, 0x7c, 0x88,
++ 0x48, 0x50, 0x30, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x59, 0x1e, 0x10, 0x1e, 0x1f,
++ 0x11, 0x1d, 0x1d, 0x11, 0x1d, 0x73, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x78, 0xf0, 0x10, 0xf0, 0xf0,
++ 0x10, 0xd0, 0xd4, 0x0c, 0xcc, 0x04, 0x00, 0x00,
++ 0x01, 0x3f, 0x22, 0x4c, 0x30, 0x3c, 0x27, 0x38,
++ 0x2b, 0x25, 0x26, 0x39, 0x20, 0x27, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x78, 0x40, 0xf8, 0x90, 0xe0,
++ 0x5c, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x00, 0x00,
++ 0x20, 0x17, 0x14, 0x4b, 0x20, 0x27, 0x00, 0x77,
++ 0x10, 0x13, 0x10, 0x13, 0x2c, 0x43, 0x00, 0x00,
++ 0x40, 0xfc, 0xac, 0x3c, 0xa0, 0xfc, 0xc8, 0xe8,
++ 0xf0, 0x70, 0xa8, 0x28, 0xc0, 0xfc, 0x00, 0x00,
++ 0x01, 0x3f, 0x26, 0x59, 0x7f, 0x0f, 0x3f, 0x2c,
++ 0x3f, 0x1f, 0x1f, 0x17, 0x1f, 0x78, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x78, 0xfc, 0xe0, 0xf8, 0xe8,
++ 0xf8, 0xf0, 0xd0, 0xf0, 0xf0, 0x1c, 0x00, 0x00,
++ 0x01, 0x3f, 0x26, 0x58, 0x06, 0x7a, 0x2a, 0x1c,
++ 0x7e, 0x19, 0x1d, 0x2b, 0x49, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x78, 0x20, 0x3c, 0xf8, 0xa8,
++ 0xd8, 0xfc, 0x54, 0xfc, 0x04, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x02, 0x22, 0x13, 0x12,
++ 0x14, 0x14, 0x06, 0x18, 0x60, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x02, 0x22, 0x13, 0x12,
++ 0x14, 0x14, 0x06, 0x18, 0x60, 0x00, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x04, 0x24, 0x15, 0x16,
++ 0x14, 0x18, 0x0e, 0x18, 0x61, 0x02, 0x00, 0x00,
++ 0x70, 0x10, 0x50, 0x50, 0x88, 0x88, 0xfc, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x04, 0x24, 0x15, 0x14,
++ 0x14, 0x19, 0x0e, 0x18, 0x60, 0x00, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x40, 0x40, 0x78, 0xc0, 0x40,
++ 0x7c, 0xc0, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x04, 0x24, 0x14, 0x15,
++ 0x15, 0x09, 0x0f, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0x40, 0x40, 0x40, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7f, 0x06, 0x24, 0x15, 0x14,
++ 0x14, 0x18, 0x0e, 0x18, 0x60, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x00, 0x00, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x02, 0x22, 0x12, 0x12,
++ 0x14, 0x14, 0x06, 0x18, 0x63, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x08, 0x88, 0x48, 0x48,
++ 0x50, 0x50, 0x10, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x08, 0x7e, 0x05, 0x25, 0x15, 0x15,
++ 0x15, 0x09, 0x0f, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x08, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x05, 0x24, 0x14, 0x14,
++ 0x15, 0x09, 0x0e, 0x18, 0x60, 0x03, 0x00, 0x00,
++ 0x20, 0x20, 0x30, 0x48, 0xf4, 0x84, 0xf8, 0xa0,
++ 0x20, 0xfc, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x7e, 0x04, 0x24, 0x14, 0x14,
++ 0x14, 0x08, 0x0e, 0x19, 0x62, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0x70, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x7f, 0x05, 0x25, 0x14, 0x14,
++ 0x15, 0x0b, 0x0f, 0x19, 0x61, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x80, 0xf8,
++ 0x48, 0x68, 0x98, 0xf8, 0x08, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x0a, 0x4a, 0x2a, 0x2a,
++ 0x2a, 0x32, 0x16, 0x1c, 0x67, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1e, 0x29, 0x45, 0x01, 0x3f, 0x01,
++ 0x0d, 0x03, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x20, 0x10, 0x00, 0xe0, 0x20,
++ 0x20, 0x20, 0xa0, 0x64, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x08, 0x0f, 0x12,
++ 0x22, 0x44, 0x08, 0x11, 0x02, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xf8, 0x48,
++ 0x48, 0x88, 0x88, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x00, 0x0f, 0x09,
++ 0x09, 0x09, 0x11, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x18, 0xe0, 0x20,
++ 0x20, 0x20, 0x10, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x00, 0x1f, 0x11,
++ 0x11, 0x1f, 0x10, 0x10, 0x10, 0x0f, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x08, 0x08, 0x7e,
++ 0x0a, 0x0a, 0x12, 0x12, 0x22, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xf8, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x01, 0x01, 0x01,
++ 0x01, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xfc, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x09, 0x09, 0x1f,
++ 0x11, 0x2f, 0x41, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0x00, 0xf8,
++ 0x00, 0xe0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x02, 0x02, 0x04,
++ 0x7f, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0x60, 0x38,
++ 0xc4, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x10, 0x09, 0x49,
++ 0x21, 0x25, 0x09, 0x11, 0x21, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xf8, 0x08,
++ 0x08, 0x08, 0x30, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x01, 0x01, 0x7f,
++ 0x03, 0x05, 0x19, 0x67, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0x00, 0xfc,
++ 0x80, 0x40, 0x30, 0xcc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x08, 0x0f, 0x11,
++ 0x21, 0x7f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xf8, 0x00,
++ 0x00, 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x20, 0x2f, 0x20,
++ 0x27, 0x20, 0x2f, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xfc, 0x00, 0xf8, 0x80,
++ 0xf0, 0x80, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x20, 0x2f, 0x20,
++ 0x27, 0x20, 0x2f, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xfc, 0x00, 0xf8, 0x80,
++ 0xf0, 0x90, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x00, 0x3f, 0x04,
++ 0x04, 0x7f, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xf8, 0x40,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x04, 0x0f, 0x10,
++ 0x6f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xf8, 0x08,
++ 0x88, 0x88, 0x88, 0x88, 0x88, 0xb0, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x1f, 0x01, 0x7f,
++ 0x01, 0x1f, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0xf0, 0x10, 0xfc,
++ 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x02, 0x04, 0x18,
++ 0x6f, 0x01, 0x0f, 0x01, 0x3f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x80, 0x40, 0x30,
++ 0xec, 0x00, 0xe0, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x09, 0x0f, 0x11,
++ 0x7f, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xf0, 0x00,
++ 0xfc, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x7b, 0x08, 0x11,
++ 0x3d, 0x49, 0x29, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x1c, 0xf0, 0x20, 0x3c,
++ 0x20, 0x20, 0x20, 0xfc, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x1f, 0x10, 0x10, 0x1f,
++ 0x02, 0x3f, 0x20, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xf0, 0x10, 0x10, 0xf0,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x01, 0x7f, 0x09,
++ 0x09, 0x16, 0x22, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xfc, 0x20,
++ 0x30, 0xc8, 0x88, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x29, 0x4f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x20, 0xe0, 0x20, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x09, 0x09, 0x12,
++ 0x34, 0x50, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xfc, 0x40,
++ 0x7c, 0x40, 0x7c, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x08, 0x08, 0x14,
++ 0x35, 0x56, 0x14, 0x14, 0x14, 0x13, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x80, 0x80, 0xfc,
++ 0x90, 0x90, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x00, 0x1f, 0x10,
++ 0x1e, 0x12, 0x12, 0x12, 0x2c, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x90, 0xfc, 0x88,
++ 0x48, 0x50, 0x34, 0x34, 0xcc, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x09, 0x09,
++ 0x0d, 0x13, 0x23, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0xf8, 0x20, 0x20,
++ 0x30, 0x48, 0x88, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x09, 0x09, 0x7f,
++ 0x09, 0x0d, 0x19, 0x69, 0x09, 0x19, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x10, 0x10, 0xfc,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x20, 0x2f, 0x21,
++ 0x3f, 0x27, 0x39, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xf8, 0x28, 0xc8, 0x08,
++ 0xf8, 0xc8, 0x38, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x1f, 0x10, 0x1f, 0x10,
++ 0x1f, 0x10, 0x1f, 0x10, 0x1e, 0x60, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x88, 0x90, 0xe4, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x10, 0x13, 0x7e, 0x12,
++ 0x12, 0x1a, 0x72, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xfc, 0x20, 0xf8,
++ 0xa8, 0xa8, 0xb8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x01, 0x3f, 0x22, 0x4c,
++ 0x30, 0x0f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0x00, 0xfc, 0x88, 0x88,
++ 0x78, 0xe0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x04, 0x06, 0x09,
++ 0x1f, 0x60, 0x1f, 0x11, 0x1f, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x08, 0x48, 0x48,
++ 0xc8, 0x48, 0x48, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x01, 0x00, 0x1f,
++ 0x02, 0x7f, 0x01, 0x00, 0x03, 0x3c, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x18, 0xfc, 0x10, 0xe0, 0xb4,
++ 0x4c, 0xf8, 0x20, 0xc4, 0xb4, 0x0c, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x5f, 0x00, 0x7f, 0x1f, 0x3f,
++ 0x21, 0x5f, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xf0, 0x10, 0xfc, 0xf0, 0xfc,
++ 0x08, 0xf0, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x11, 0x3f, 0x41,
++ 0x7f, 0x01, 0x1f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x18, 0xf0, 0x08, 0xf4, 0x10,
++ 0xfc, 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x03, 0x0c, 0x3f, 0x01,
++ 0x7f, 0x01, 0x1f, 0x01, 0x01, 0x03, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xe0, 0x80, 0xf0, 0x10,
++ 0xfc, 0x10, 0xf0, 0x10, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3d, 0x25, 0x25, 0x3d,
++ 0x25, 0x3d, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xf8, 0x08, 0x30, 0xf8,
++ 0x48, 0x48, 0x30, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x20, 0x2f, 0x24,
++ 0x26, 0x29, 0x22, 0x2c, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xfc, 0x80, 0xf8, 0x90,
++ 0xb0, 0x48, 0x20, 0x18, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x47, 0x0f, 0x08, 0x0f, 0x0f,
++ 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xe0, 0x20, 0xe0, 0xe0,
++ 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x09, 0x08, 0x17, 0x11,
++ 0x31, 0x52, 0x17, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xf0, 0x10, 0xfc, 0x00,
++ 0xf8, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x12, 0x12, 0x7f,
++ 0x12, 0x1f, 0x12, 0x12, 0x1e, 0x13, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0x40, 0x40, 0xfc,
++ 0xa4, 0x28, 0x70, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x00, 0x1f, 0x10, 0x1f,
++ 0x10, 0x17, 0x14, 0x17, 0x24, 0x41, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0x50, 0xfc, 0x48, 0xc8,
++ 0x48, 0xb0, 0xb4, 0xb4, 0x4c, 0x84, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x47, 0x04, 0x0f, 0x7f, 0x03,
++ 0x7d, 0x07, 0x39, 0x06, 0x38, 0x03, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xe0, 0x40, 0xc0, 0xfc, 0x88,
++ 0xd0, 0xe0, 0xa0, 0x90, 0x8c, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x1f, 0x04, 0x7f,
++ 0x0f, 0x0f, 0x09, 0x7f, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x48, 0xf8, 0xf0, 0x40, 0xfc,
++ 0xe0, 0xe0, 0x20, 0xfc, 0x20, 0x60, 0x00, 0x00,
++ 0x10, 0x10, 0x1f, 0x28, 0x45, 0x09, 0x3e, 0x22,
++ 0x3e, 0x20, 0x3e, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xa0, 0x10, 0xfc, 0x20, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xb8, 0x20, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x45, 0x7f, 0x0f, 0x08, 0x7f,
++ 0x08, 0x0f, 0x06, 0x7c, 0x07, 0x38, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xfc, 0xe0, 0x20, 0xfc,
++ 0x20, 0xe8, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x45, 0x7f, 0x3f, 0x08, 0x7f,
++ 0x08, 0x3f, 0x06, 0x7c, 0x07, 0x38, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xfc, 0xf8, 0x20, 0xfc,
++ 0x20, 0xf8, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x47, 0x3f, 0x26, 0x21, 0x2e,
++ 0x3f, 0x10, 0x1f, 0x10, 0x1e, 0x70, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xf8, 0x48, 0xc8, 0x28,
++ 0xf8, 0x88, 0x90, 0xe4, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x7f, 0x04, 0x3f, 0x24,
++ 0x3f, 0x01, 0x7f, 0x07, 0x79, 0x01, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xfc, 0x40, 0xf8, 0x48,
++ 0xf8, 0x00, 0xfc, 0xc0, 0x3c, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x49, 0x7e, 0x14, 0x7f, 0x3e,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x26, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x40, 0x7c, 0x78, 0x08, 0x78,
++ 0x40, 0x78, 0x78, 0x78, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x45, 0x3f, 0x1f, 0x7f, 0x0f,
++ 0x08, 0x0f, 0x0f, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xf8, 0xf0, 0xfc, 0xe0,
++ 0x20, 0xe0, 0xe0, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x08, 0x08, 0x7f, 0x08,
++ 0x0f, 0x13, 0x12, 0x22, 0x44, 0x1f, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0x80, 0xfc, 0x80, 0xf8,
++ 0x20, 0xfc, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3f, 0x24, 0x3f, 0x24,
++ 0x3f, 0x24, 0x2e, 0x2a, 0x2e, 0x41, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0x90, 0x90, 0xa8, 0xc8,
++ 0x90, 0xa4, 0x84, 0x88, 0x90, 0xa0, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x5f, 0x11, 0x1f, 0x11, 0x1f,
++ 0x7f, 0x09, 0x3f, 0x01, 0x3f, 0x01, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0xfc, 0x20, 0xf8, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x10, 0x0b, 0x40, 0x27,
++ 0x03, 0x71, 0x13, 0x10, 0x2c, 0x43, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x90, 0xf0, 0xa0, 0xe0, 0x5c,
++ 0xf8, 0xf0, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x13, 0x48, 0x22, 0x15,
++ 0x23, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0xf0, 0x98, 0x94, 0x14,
++ 0x60, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x25, 0x4f, 0x09, 0x7f, 0x0f, 0x0f,
++ 0x09, 0x0f, 0x7f, 0x0e, 0x01, 0x3e, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xe0, 0x20, 0xfc, 0xe0, 0xe0,
++ 0x20, 0xe0, 0xfc, 0x40, 0xe0, 0x10, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x7f, 0x01, 0x09, 0x09, 0x7f,
++ 0x07, 0x04, 0x0f, 0x2a, 0x25, 0x40, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xf8, 0x00, 0xf0, 0x00, 0xfc,
++ 0xf0, 0x00, 0xf8, 0x48, 0x28, 0x30, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x4f, 0x09, 0x0f, 0x7f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xe0, 0x20, 0xe0, 0xfc, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x7f, 0x04, 0x07, 0x7f, 0x1f,
++ 0x11, 0x1f, 0x11, 0x1f, 0x06, 0x38, 0x00, 0x00,
++ 0x40, 0x7c, 0xd0, 0xf8, 0x40, 0xc0, 0xfc, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x60, 0x18, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x7e, 0x14, 0x7f, 0x0e, 0x14,
++ 0x7f, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xf8, 0x50, 0xfc, 0x30, 0xd4,
++ 0xfc, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x7f, 0x1f, 0x12, 0x1f, 0x0f,
++ 0x08, 0x0f, 0x0f, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xfc, 0xf0, 0x90, 0xf0, 0xe0,
++ 0x20, 0xe0, 0xe0, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x25, 0x43, 0x0c, 0x7f, 0x12, 0x1d,
++ 0x17, 0x11, 0x11, 0x13, 0x22, 0x43, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xe0, 0x80, 0xfc, 0x24, 0xfc,
++ 0xf8, 0xe0, 0xe0, 0xf0, 0x10, 0xf0, 0x00, 0x00,
++ 0x10, 0x1f, 0x25, 0x5f, 0x01, 0x7f, 0x1f, 0x15,
++ 0x1d, 0x11, 0x1f, 0x1d, 0x25, 0x45, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xf0, 0x10, 0xfc, 0xf0, 0x50,
++ 0x70, 0x10, 0xf0, 0x70, 0x50, 0x50, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x02, 0x0c, 0x77, 0x00,
++ 0x1e, 0x12, 0x1e, 0x0c, 0x12, 0x61, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x10, 0x80, 0x60, 0xdc, 0x00,
++ 0xf0, 0x90, 0xf0, 0x60, 0x90, 0x08, 0x00, 0x00,
++ 0x10, 0x1f, 0x25, 0x7f, 0x1f, 0x7f, 0x1f, 0x01,
++ 0x1f, 0x7f, 0x1e, 0x13, 0x1e, 0x10, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xfc, 0xf0, 0xfc, 0xe8, 0x00,
++ 0xe0, 0xfc, 0x10, 0xfc, 0x90, 0x30, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x7f, 0x24, 0x3e, 0x3f, 0x24,
++ 0x3f, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x40, 0x7c, 0x80, 0x00, 0x78,
++ 0x00, 0xf0, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x5f, 0x15, 0x7f, 0x1f, 0x1f,
++ 0x15, 0x1f, 0x7f, 0x1a, 0x06, 0x39, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x20, 0x20, 0xfc, 0x48, 0xc8,
++ 0x28, 0x30, 0x90, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x4d, 0x09, 0x7e, 0x13, 0x1c,
++ 0x14, 0x14, 0x14, 0x27, 0x24, 0x5b, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x90, 0xfc, 0x90, 0xfc, 0x90,
++ 0xf0, 0xf0, 0x90, 0xfc, 0x90, 0x08, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x51, 0x13, 0x7e, 0x12, 0x17,
++ 0x13, 0x1e, 0x73, 0x12, 0x13, 0x32, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x40, 0xbc, 0x94, 0xe4, 0x58,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x1f, 0x28, 0x45, 0x3e, 0x27, 0x24, 0x3f,
++ 0x25, 0x3f, 0x24, 0x27, 0x24, 0x4c, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x50, 0x48, 0xfc, 0xa0, 0xfc,
++ 0x50, 0x58, 0xe4, 0x50, 0x4c, 0xc0, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x41, 0x3f, 0x24, 0x27, 0x3d,
++ 0x27, 0x3c, 0x27, 0x25, 0x25, 0x4e, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x50, 0xf8, 0xa4, 0xfc, 0x50,
++ 0xac, 0xd0, 0xf8, 0x54, 0x48, 0x48, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x49, 0x7f, 0x08, 0x3e, 0x2a,
++ 0x2a, 0x3e, 0x1c, 0x2a, 0x48, 0x09, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0xf8, 0x48, 0x98, 0xf8, 0x88,
++ 0xf8, 0xf8, 0x88, 0xf8, 0x48, 0x84, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x52, 0x12, 0x2d, 0x7f, 0x0a,
++ 0x3b, 0x3b, 0x0a, 0x3b, 0x0f, 0x78, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x40, 0x50, 0x48, 0xfc, 0x28,
++ 0xa8, 0xb0, 0x10, 0xb4, 0xcc, 0x84, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x44, 0x3f, 0x04, 0x7f, 0x0a,
++ 0x3b, 0x3b, 0x0a, 0x3b, 0x0f, 0x70, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x40, 0xd0, 0x48, 0xfc, 0x28,
++ 0xa8, 0xb0, 0x14, 0xb4, 0xcc, 0x84, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x46, 0x0c, 0x77, 0x3b, 0x2a,
++ 0x3b, 0x3f, 0x24, 0x3f, 0x24, 0x24, 0x00, 0x00,
++ 0x40, 0x7c, 0xa0, 0x90, 0x60, 0xdc, 0xb8, 0xa8,
++ 0xb8, 0xf8, 0x48, 0xf8, 0x48, 0x58, 0x00, 0x00,
++ 0x10, 0x1f, 0x24, 0x49, 0x7f, 0x26, 0x3a, 0x37,
++ 0x3e, 0x7f, 0x4d, 0x7f, 0x41, 0x43, 0x00, 0x00,
++ 0x40, 0x7c, 0x90, 0x48, 0x50, 0x7c, 0xd0, 0x78,
++ 0x50, 0x78, 0x50, 0x50, 0x7c, 0x40, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x08, 0x7f, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x11, 0x55, 0x35, 0x39, 0x11, 0x7d, 0x11, 0x39,
++ 0x35, 0x55, 0x51, 0x11, 0x11, 0x16, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x24, 0xe8, 0x30, 0x20,
++ 0x20, 0x20, 0x20, 0x64, 0xa4, 0x1c, 0x00, 0x00,
++ 0x08, 0x4b, 0x2a, 0x2c, 0x08, 0x7e, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x49, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8,
++ 0x88, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x02, 0x1f, 0x15, 0x13, 0x1f, 0x13, 0x1d, 0x1f,
++ 0x00, 0x7f, 0x08, 0x0f, 0x10, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x50, 0x90, 0xf0, 0x90, 0x50, 0xf0,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xe0, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x09, 0x7f, 0x08, 0x1c,
++ 0x1b, 0x2b, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x7c, 0x01, 0x02, 0x0c, 0x71, 0x13, 0x09,
++ 0x09, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x48, 0xc0, 0x30, 0x2c, 0x20,
++ 0x40, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x57, 0x34, 0x38, 0x10, 0x7f, 0x12, 0x3a,
++ 0x36, 0x56, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x80, 0xf8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x57, 0x36, 0x3a, 0x13, 0x7e, 0x12, 0x3a,
++ 0x36, 0x56, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0xe8, 0xa8,
++ 0xa8, 0xe8, 0xa8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x4b, 0x2a, 0x2c, 0x08, 0x7f, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x40, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x4b, 0x2a, 0x2d, 0x09, 0x7f, 0x09, 0x1d,
++ 0x1b, 0x2b, 0x48, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x80, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x0e, 0x08, 0x1f, 0x72, 0x0c, 0x73, 0x11,
++ 0x09, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x50, 0x20, 0xd0, 0x0c, 0x10,
++ 0x20, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x40, 0x2a, 0x12, 0x25, 0x22, 0x11,
++ 0x09, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x98, 0x94, 0x14, 0x60, 0x10,
++ 0x20, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x08, 0x7f, 0x08, 0x1c,
++ 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x0b, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8,
++ 0xa4, 0xa8, 0x90, 0x90, 0xe8, 0x04, 0x00, 0x00,
++ 0x08, 0x4a, 0x2b, 0x2c, 0x08, 0x7e, 0x09, 0x1e,
++ 0x1a, 0x2b, 0x48, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x90, 0x90, 0xd8, 0x24, 0x24,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x4a, 0x2a, 0x2c, 0x09, 0x7e, 0x08, 0x1d,
++ 0x1a, 0x2a, 0x48, 0x09, 0x0a, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0xf8, 0x00, 0x00, 0xfc,
++ 0x20, 0xb0, 0xa8, 0x24, 0x24, 0x60, 0x00, 0x00,
++ 0x10, 0x54, 0x37, 0x38, 0x10, 0x7c, 0x11, 0x39,
++ 0x37, 0x55, 0x51, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xa0, 0xa0, 0x24, 0x28,
++ 0x30, 0x60, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x10, 0x55, 0x34, 0x38, 0x13, 0x7c, 0x13, 0x38,
++ 0x34, 0x57, 0x50, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x20, 0xfc, 0xe8, 0x30, 0x60,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x08, 0x4a, 0x2b, 0x2c, 0x08, 0x7e, 0x08, 0x1c,
++ 0x1b, 0x2b, 0x49, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf0, 0x90, 0xf0, 0x90,
++ 0xfc, 0x50, 0x54, 0x8c, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x4a, 0x2b, 0x2d, 0x0b, 0x7e, 0x09, 0x1c,
++ 0x1b, 0x2a, 0x48, 0x0b, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0xfc, 0x40, 0xe4, 0x68,
++ 0xb0, 0x70, 0xa8, 0x24, 0x20, 0xc0, 0x00, 0x00,
++ 0x10, 0x57, 0x34, 0x38, 0x13, 0x7e, 0x12, 0x3a,
++ 0x36, 0x56, 0x52, 0x14, 0x14, 0x18, 0x00, 0x00,
++ 0x90, 0xfc, 0x90, 0x00, 0xfc, 0x00, 0xf8, 0xa8,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0xa8, 0x98, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x16, 0x16, 0x1a, 0x14,
++ 0x12, 0x1f, 0x11, 0x26, 0x38, 0x40, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xfc, 0xb8, 0xbc, 0x54, 0x90,
++ 0xa0, 0xfc, 0xc0, 0xb0, 0x8c, 0x80, 0x00, 0x00,
++ 0x10, 0x54, 0x37, 0x38, 0x11, 0x7f, 0x11, 0x39,
++ 0x35, 0x54, 0x53, 0x10, 0x11, 0x16, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x3d, 0x0b, 0x3f, 0x3b, 0x0d, 0x31, 0x7f, 0x0f,
++ 0x08, 0x0f, 0x3f, 0x24, 0x3f, 0x21, 0x00, 0x00,
++ 0x78, 0x48, 0xf8, 0xb8, 0x48, 0x30, 0xfc, 0xe0,
++ 0x20, 0xe0, 0xf8, 0x58, 0xf8, 0x18, 0x00, 0x00,
++ 0x10, 0x57, 0x34, 0x3b, 0x13, 0x7d, 0x10, 0x3b,
++ 0x34, 0x57, 0x52, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xfc, 0x58, 0xf8, 0x40, 0xfc,
++ 0x80, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x57, 0x36, 0x3b, 0x12, 0x7e, 0x12, 0x3a,
++ 0x36, 0x57, 0x53, 0x15, 0x15, 0x19, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0xfc, 0x34, 0xfc, 0x04, 0x0c, 0x00, 0x00,
++ 0x00, 0x39, 0x08, 0x09, 0x14, 0x23, 0x48, 0x2a,
++ 0x1d, 0x7e, 0x1c, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0xd8, 0x68, 0xd8, 0x68, 0x50, 0xfc,
++ 0x90, 0xf8, 0xf8, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x08, 0x2b, 0x2a, 0x3f, 0x4a, 0x7f, 0x4a, 0x2a,
++ 0x1d, 0x7e, 0x1c, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0xd8, 0x68, 0xd8, 0x68, 0x50, 0xfc,
++ 0x90, 0xf8, 0xf8, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7d,
++ 0x08, 0x2a, 0x29, 0x29, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x13, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x15, 0x0c, 0x12, 0x7d,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x10, 0x90, 0x50,
++ 0x50, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0d, 0x12, 0x7d,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x4b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x20, 0x50, 0x48, 0x98, 0xe4, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x15, 0x65, 0x19, 0x19, 0x25, 0x7d,
++ 0x11, 0x39, 0x35, 0x35, 0x51, 0x16, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x24, 0xe8, 0x30, 0x20,
++ 0x20, 0x20, 0x20, 0x64, 0xa4, 0x1c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x04, 0x03, 0x0d, 0x71, 0x02,
++ 0x1e, 0x03, 0x7f, 0x05, 0x09, 0x31, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x40, 0x80, 0x60, 0x1c, 0x40,
++ 0xa0, 0x18, 0xe4, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x66, 0x1a, 0x1a, 0x26, 0x7e,
++ 0x12, 0x1a, 0x36, 0x36, 0x52, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xe8, 0xa8, 0xa8, 0xa8,
++ 0xe8, 0xa8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x15, 0x0d, 0x13, 0x7f,
++ 0x0d, 0x2b, 0x2b, 0x29, 0x4b, 0x0c, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x00, 0x20, 0x20, 0x20,
++ 0x20, 0x30, 0x48, 0x58, 0xe4, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x1c, 0x1a, 0x29, 0x49, 0x02,
++ 0x1e, 0x03, 0x7f, 0x05, 0x09, 0x31, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x40,
++ 0xa0, 0x18, 0xe4, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x15, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xfc, 0xa8, 0xa8, 0xa8,
++ 0xb8, 0xa8, 0x80, 0x80, 0xfc, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x13, 0x7e,
++ 0x09, 0x2d, 0x2b, 0x2b, 0x49, 0x09, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x90, 0x88, 0xf4, 0x04,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x0d, 0x0c, 0x13, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x00, 0x00, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x15, 0x0c, 0x12, 0x7e,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xa8, 0xa4, 0x24, 0xf8, 0x20, 0x20,
++ 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x0d, 0x0c, 0x12, 0x7f,
++ 0x08, 0x2c, 0x2a, 0x2b, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x50, 0x30, 0xdc, 0x10,
++ 0xf8, 0x90, 0x90, 0xfc, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x72, 0x14, 0x0c, 0x13, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0x24, 0xa4, 0xa8, 0x20, 0xfc, 0x50,
++ 0x50, 0x50, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x15, 0x65, 0x1a, 0x18, 0x24, 0x7d,
++ 0x13, 0x19, 0x35, 0x35, 0x51, 0x11, 0x00, 0x00,
++ 0x80, 0xf8, 0x00, 0x00, 0x80, 0xfc, 0x90, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7f,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x28, 0xc8, 0x50, 0x30, 0x48, 0xfc,
++ 0x24, 0xb0, 0xa8, 0xa4, 0x24, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x64, 0x1b, 0x18, 0x24, 0x7c,
++ 0x13, 0x38, 0x35, 0x35, 0x52, 0x10, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0x24, 0xfc, 0xa0, 0xa8, 0xe8,
++ 0xa8, 0x90, 0x14, 0x2c, 0x4c, 0x84, 0x00, 0x00,
++ 0x08, 0x7e, 0x12, 0x12, 0x3c, 0x04, 0x1b, 0x62,
++ 0x1c, 0x03, 0x7f, 0x05, 0x09, 0x31, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x40,
++ 0xa0, 0x18, 0xe4, 0x40, 0x30, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x73, 0x15, 0x0d, 0x13, 0x7f,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x4b, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x48,
++ 0x48, 0x30, 0x24, 0xd4, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7f,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0a, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0xfc, 0x50, 0x50, 0x50, 0xfc,
++ 0x50, 0x50, 0x90, 0x90, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x09, 0x0a, 0x72, 0x15, 0x0c, 0x12, 0x7e,
++ 0x0d, 0x2a, 0x2a, 0x28, 0x4b, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0xa8, 0xa8, 0x50, 0xa8, 0xa8, 0x00,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x13, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0a, 0x00, 0x00,
++ 0x08, 0xf0, 0x20, 0xfc, 0x70, 0xa8, 0x24, 0xf0,
++ 0x50, 0x50, 0x9c, 0x84, 0x04, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x16, 0x14, 0x37, 0x54, 0x15,
++ 0x14, 0x17, 0x15, 0x15, 0x12, 0x10, 0x00, 0x00,
++ 0x80, 0xfc, 0x90, 0x60, 0xf0, 0x4c, 0x50, 0xb0,
++ 0x48, 0xfc, 0x50, 0x48, 0x48, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x72, 0x14, 0x0d, 0x12, 0x7f,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x09, 0x00, 0x00,
++ 0x08, 0x10, 0xe8, 0xa4, 0x94, 0x20, 0x20, 0xfc,
++ 0x48, 0x48, 0xf0, 0x10, 0x68, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7e,
++ 0x09, 0x2d, 0x2b, 0x2b, 0x49, 0x09, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x20, 0x40,
++ 0xfc, 0x04, 0x04, 0x04, 0xfc, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x14, 0x64, 0x29, 0x18, 0x25, 0x7e,
++ 0x18, 0x35, 0x35, 0x32, 0x54, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xc8, 0xa8, 0x30, 0x40,
++ 0xa0, 0xa8, 0x84, 0x84, 0x90, 0x70, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x72, 0x14, 0x0c, 0x13, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x60, 0x50, 0x88, 0xfc, 0x08,
++ 0xe8, 0xa8, 0xe8, 0xa8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x7e, 0x00, 0x3f, 0x22, 0x3e, 0x23, 0x22,
++ 0x4e, 0x01, 0x7f, 0x0d, 0x31, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x90, 0x50, 0x60, 0x90, 0x4c,
++ 0xc0, 0x30, 0xc8, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0d, 0x12, 0x7e,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0xa8, 0xa4, 0xfc, 0x20, 0xfc, 0x50, 0x88,
++ 0xf4, 0x90, 0x90, 0xb4, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x0c, 0x0d, 0x12, 0x7e,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x08, 0x10, 0xe8, 0xa4, 0x94, 0x10, 0x20, 0x20,
++ 0xfc, 0x70, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x12, 0x12, 0x14, 0x66, 0x1a, 0x18, 0x27, 0x7e,
++ 0x12, 0x3b, 0x36, 0x36, 0x53, 0x12, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0x48, 0x48, 0x00, 0xf8, 0x48,
++ 0x48, 0xf8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2b, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x3c, 0x20, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2d, 0x2a, 0x2a, 0x48, 0x09, 0x00, 0x00,
++ 0x50, 0x48, 0x7c, 0xe8, 0x28, 0x34, 0xcc, 0x50,
++ 0x5c, 0xe8, 0x28, 0x14, 0x6c, 0x84, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x66, 0x2b, 0x1a, 0x26, 0x7f,
++ 0x18, 0x34, 0x36, 0x32, 0x54, 0x10, 0x00, 0x00,
++ 0x80, 0xf8, 0x48, 0xf8, 0xa8, 0x68, 0x98, 0xf8,
++ 0x40, 0xa8, 0xa4, 0x84, 0x90, 0x70, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x66, 0x1b, 0x1a, 0x27, 0x7e,
++ 0x1a, 0x36, 0x36, 0x32, 0x54, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8, 0x48,
++ 0xe8, 0xa8, 0xe8, 0xa8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x65, 0x1b, 0x19, 0x26, 0x7f,
++ 0x10, 0x3a, 0x36, 0x37, 0x52, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0xe8, 0x88, 0xf8,
++ 0x88, 0xa8, 0xa8, 0xe8, 0x28, 0x30, 0x00, 0x00,
++ 0x08, 0x11, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x09,
++ 0x7e, 0x4a, 0x4a, 0x4a, 0x4f, 0x08, 0x00, 0x00,
++ 0x0c, 0xf0, 0x20, 0xc8, 0x50, 0x30, 0x48, 0xfc,
++ 0x24, 0xb0, 0xa8, 0xa4, 0x24, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x64, 0x19, 0x1b, 0x24, 0x7f,
++ 0x12, 0x3b, 0x36, 0x36, 0x52, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x14, 0x65, 0x19, 0x19, 0x25, 0x7d,
++ 0x19, 0x35, 0x35, 0x32, 0x53, 0x16, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x20, 0x20,
++ 0xfc, 0x20, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x73, 0x16, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xf0, 0x90, 0x90, 0xf0,
++ 0x80, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x67, 0x2a, 0x1b, 0x26, 0x7f,
++ 0x13, 0x3b, 0x37, 0x33, 0x54, 0x18, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0xe8, 0x28, 0xe8,
++ 0x50, 0x54, 0xdc, 0x6c, 0x44, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0f, 0x12, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x4b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x00, 0xfc, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x72, 0x14, 0x0c, 0x12, 0x7e,
++ 0x09, 0x2c, 0x2a, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0xa8, 0xa8, 0xfc, 0xa8, 0xb8, 0x80, 0xfc, 0x20,
++ 0xfc, 0x70, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x66, 0x2b, 0x1a, 0x26, 0x7f,
++ 0x12, 0x3a, 0x37, 0x36, 0x52, 0x12, 0x00, 0x00,
++ 0x80, 0x70, 0x50, 0x54, 0xd4, 0x4c, 0x80, 0xf8,
++ 0x48, 0x28, 0xb0, 0x10, 0x28, 0xc4, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x69, 0x2a, 0x1a, 0x27, 0x7d,
++ 0x17, 0x39, 0x35, 0x31, 0x56, 0x10, 0x00, 0x00,
++ 0x20, 0xe0, 0x20, 0x20, 0xbc, 0xc8, 0x68, 0x28,
++ 0xe8, 0x10, 0x50, 0xa8, 0x48, 0x84, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x66, 0x2b, 0x1a, 0x26, 0x7f,
++ 0x12, 0x3a, 0x37, 0x36, 0x50, 0x10, 0x00, 0x00,
++ 0x10, 0x90, 0x90, 0xb8, 0xb8, 0xb4, 0xd4, 0xd4,
++ 0xb8, 0x88, 0x90, 0xa0, 0x40, 0x80, 0x00, 0x00,
++ 0x10, 0x11, 0x15, 0x65, 0x29, 0x19, 0x25, 0x7d,
++ 0x13, 0x39, 0x35, 0x35, 0x51, 0x11, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x20, 0xfc, 0x10, 0xcc,
++ 0xfc, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x67, 0x2a, 0x1b, 0x26, 0x7f,
++ 0x13, 0x3b, 0x37, 0x34, 0x55, 0x1a, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0x20, 0xe8, 0xa8, 0xe8,
++ 0x58, 0x50, 0x94, 0xec, 0x2c, 0x44, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x65, 0x2a, 0x18, 0x24, 0x7d,
++ 0x13, 0x39, 0x35, 0x35, 0x53, 0x10, 0x00, 0x00,
++ 0xf0, 0x10, 0x90, 0xf8, 0x04, 0xb0, 0x90, 0x08,
++ 0xfc, 0x68, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1e, 0x52, 0x5e, 0x52, 0x5e, 0x52, 0x5f,
++ 0x40, 0x7e, 0x2c, 0x2a, 0x4b, 0x08, 0x00, 0x00,
++ 0x04, 0xf8, 0x20, 0xc8, 0x50, 0x30, 0x48, 0xfc,
++ 0x24, 0xb0, 0xa8, 0xa4, 0x24, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x66, 0x2c, 0x1b, 0x25, 0x7c,
++ 0x13, 0x38, 0x37, 0x34, 0x50, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x48, 0x40, 0xf8, 0x10, 0xa0,
++ 0xfc, 0x40, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7f,
++ 0x0c, 0x2a, 0x2b, 0x2a, 0x4f, 0x08, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0xfc, 0x20, 0xf8, 0x20, 0xfc,
++ 0x80, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x12, 0x6a, 0x2d, 0x19, 0x25, 0x7e,
++ 0x16, 0x3a, 0x36, 0x36, 0x53, 0x12, 0x00, 0x00,
++ 0x50, 0x50, 0x50, 0x50, 0xb8, 0xa4, 0x24, 0xa0,
++ 0xa0, 0xb8, 0xa0, 0xe0, 0x20, 0x1c, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x67, 0x2a, 0x1b, 0x26, 0x7e,
++ 0x13, 0x3a, 0x37, 0x34, 0x58, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x00, 0xfc, 0xa8, 0xf0,
++ 0x9c, 0x10, 0xfc, 0x90, 0x50, 0x30, 0x00, 0x00,
++ 0x10, 0x13, 0x14, 0x64, 0x29, 0x1b, 0x24, 0x7f,
++ 0x11, 0x39, 0x35, 0x35, 0x51, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x90, 0x90, 0x68, 0xfc, 0x00, 0xfc,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x12, 0x11, 0x15, 0x64, 0x2a, 0x19, 0x25, 0x7c,
++ 0x13, 0x39, 0x35, 0x35, 0x52, 0x14, 0x00, 0x00,
++ 0x10, 0x20, 0x78, 0x48, 0x48, 0x78, 0x40, 0x78,
++ 0x48, 0x48, 0x78, 0x48, 0xc0, 0x3c, 0x00, 0x00,
++ 0x00, 0x39, 0x29, 0x2a, 0x2f, 0x39, 0x2a, 0x2d,
++ 0x38, 0x2f, 0x29, 0x29, 0x2a, 0x58, 0x00, 0x00,
++ 0x40, 0x50, 0xf8, 0xa4, 0xfc, 0x50, 0x58, 0xb4,
++ 0x48, 0xfc, 0x50, 0x48, 0x48, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x14, 0x67, 0x28, 0x1b, 0x24, 0x7c,
++ 0x13, 0x39, 0x34, 0x35, 0x50, 0x13, 0x00, 0x00,
++ 0x00, 0xfc, 0xcc, 0x74, 0xcc, 0x74, 0x44, 0xa0,
++ 0x70, 0x9c, 0x68, 0x90, 0x60, 0x80, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x69, 0x2f, 0x14, 0x2c, 0x7f,
++ 0x15, 0x39, 0x35, 0x35, 0x51, 0x16, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x78, 0x20, 0xf8, 0xa8,
++ 0xa8, 0xf8, 0x30, 0x28, 0xfc, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x16, 0x16, 0x1a, 0x11,
++ 0x17, 0x10, 0x1f, 0x22, 0x2c, 0x40, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xfc, 0xb8, 0xbc, 0xd4, 0x20,
++ 0x60, 0x98, 0xe4, 0xb0, 0x88, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x72, 0x14, 0x0c, 0x13, 0x7f,
++ 0x09, 0x2d, 0x2a, 0x2a, 0x48, 0x0b, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc, 0x54,
++ 0xfc, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x6b, 0x2a, 0x1b, 0x24, 0x7d,
++ 0x10, 0x3b, 0x35, 0x35, 0x52, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0x00, 0xf0,
++ 0x00, 0xfc, 0x50, 0x48, 0x48, 0xc0, 0x00, 0x00,
++ 0x10, 0x12, 0x16, 0x67, 0x28, 0x1b, 0x26, 0x7e,
++ 0x13, 0x3a, 0x37, 0x34, 0x54, 0x19, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0xf8, 0x00, 0xb8, 0xa8, 0xa8,
++ 0xb8, 0xa8, 0xb8, 0xa8, 0xc8, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x0a, 0x73, 0x14, 0x0c, 0x12, 0x7e,
++ 0x08, 0x2d, 0x2a, 0x2a, 0x48, 0x09, 0x00, 0x00,
++ 0x20, 0xf8, 0xa8, 0xfc, 0xa8, 0xf8, 0xf8, 0xa8,
++ 0xf8, 0xfc, 0x48, 0xf0, 0x28, 0xc4, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x67, 0x2a, 0x1b, 0x24, 0x7d,
++ 0x10, 0x3b, 0x35, 0x35, 0x52, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x90, 0xb0,
++ 0x48, 0xf4, 0x50, 0x48, 0x48, 0x40, 0x00, 0x00,
++ 0x12, 0x11, 0x15, 0x64, 0x2a, 0x19, 0x25, 0x7c,
++ 0x13, 0x39, 0x35, 0x35, 0x52, 0x14, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xfc, 0x20, 0xe0, 0x3c, 0x00, 0x00,
++ 0x10, 0x13, 0x14, 0x67, 0x2b, 0x1b, 0x24, 0x7d,
++ 0x10, 0x3b, 0x34, 0x34, 0x53, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xfc, 0x58, 0xf8, 0x40, 0xf8,
++ 0x00, 0xfc, 0x50, 0x88, 0xf4, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x67, 0x2a, 0x1b, 0x26, 0x7e,
++ 0x12, 0x3a, 0x36, 0x36, 0x53, 0x12, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0xe8, 0xa8,
++ 0xe8, 0xa8, 0xe8, 0xa8, 0x68, 0x08, 0x00, 0x00,
++ 0x12, 0x12, 0x17, 0x6a, 0x2f, 0x18, 0x2b, 0x7e,
++ 0x13, 0x3a, 0x37, 0x36, 0x52, 0x12, 0x00, 0x00,
++ 0xa0, 0xa0, 0xe0, 0xa0, 0xfc, 0x48, 0xa8, 0xa8,
++ 0xa8, 0x90, 0x90, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x10, 0x11, 0x14, 0x67, 0x29, 0x1b, 0x25, 0x7d,
++ 0x13, 0x3b, 0x34, 0x34, 0x51, 0x12, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xb8, 0x10, 0xfc,
++ 0x00, 0xfc, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x09, 0x0a, 0x72, 0x17, 0x0c, 0x12, 0x7f,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x18, 0xe8, 0xa8, 0x70, 0xfc, 0x70, 0xa8, 0x24,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x73, 0x14, 0x0d, 0x12, 0x7e,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x54, 0x88, 0xfc, 0x88, 0xf8,
++ 0x88, 0xf8, 0xa8, 0xa4, 0x24, 0x60, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x67, 0x28, 0x1b, 0x24, 0x7f,
++ 0x11, 0x3f, 0x34, 0x37, 0x50, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x40, 0xf8, 0x40, 0xfc,
++ 0x10, 0xfc, 0x40, 0xf8, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x14, 0x65, 0x2a, 0x1b, 0x27, 0x7e,
++ 0x13, 0x39, 0x35, 0x35, 0x51, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xf0, 0x08, 0xfc, 0x58, 0xe8,
++ 0xf8, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x67, 0x29, 0x1a, 0x26, 0x7f,
++ 0x12, 0x3a, 0x37, 0x36, 0x50, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xb8, 0xa0, 0xb8, 0xa8, 0xb8,
++ 0xa8, 0xa8, 0xb8, 0xa4, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x12, 0x17, 0x66, 0x2a, 0x1b, 0x27, 0x7e,
++ 0x13, 0x3a, 0x37, 0x37, 0x53, 0x12, 0x00, 0x00,
++ 0x90, 0xd8, 0x68, 0xd0, 0xa8, 0xf8, 0xfc, 0xd8,
++ 0x68, 0x90, 0x68, 0xf8, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x14, 0x67, 0x2b, 0x1f, 0x24, 0x7f,
++ 0x10, 0x3b, 0x36, 0x36, 0x52, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x58, 0x58, 0x40, 0xfc,
++ 0x40, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x17, 0x68, 0x2f, 0x12, 0x2a, 0x7d,
++ 0x11, 0x39, 0x35, 0x35, 0x52, 0x14, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa4, 0xf8, 0xe8, 0xf8, 0xe4,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x0b, 0x72, 0x14, 0x0c, 0x13, 0x7e,
++ 0x0c, 0x2a, 0x2a, 0x28, 0x49, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x50, 0x70, 0x8c, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x09, 0x0b, 0x73, 0x14, 0x0d, 0x12, 0x7f,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x0b, 0x00, 0x00,
++ 0x20, 0xfc, 0x08, 0xfc, 0xa8, 0x70, 0x78, 0x88,
++ 0xf8, 0xf8, 0x88, 0xf8, 0x88, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x7d, 0x2e, 0x2a, 0x29, 0x7e, 0x13,
++ 0x1d, 0x75, 0x15, 0x25, 0x29, 0x41, 0x00, 0x00,
++ 0x10, 0x10, 0x7c, 0xa8, 0xa8, 0x28, 0xfc, 0xd0,
++ 0x10, 0xfc, 0x50, 0x50, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x67, 0x2a, 0x1b, 0x26, 0x7f,
++ 0x18, 0x37, 0x36, 0x32, 0x57, 0x10, 0x00, 0x00,
++ 0x10, 0xd0, 0x90, 0xdc, 0x60, 0xc0, 0xb8, 0xc0,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x15, 0x67, 0x29, 0x19, 0x27, 0x7c,
++ 0x13, 0x3a, 0x36, 0x37, 0x52, 0x10, 0x00, 0x00,
++ 0x00, 0x7c, 0x10, 0xd0, 0x38, 0x28, 0xb8, 0x28,
++ 0xb8, 0xa8, 0xb8, 0xa8, 0xa4, 0x44, 0x00, 0x00,
++ 0x11, 0x13, 0x15, 0x67, 0x29, 0x1a, 0x25, 0x7d,
++ 0x11, 0x39, 0x35, 0x35, 0x50, 0x13, 0x00, 0x00,
++ 0x10, 0xb8, 0x10, 0xfc, 0x10, 0xa8, 0xf4, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x10, 0x17, 0x11, 0x67, 0x2a, 0x1b, 0x27, 0x7f,
++ 0x11, 0x39, 0x35, 0x35, 0x51, 0x16, 0x00, 0x00,
++ 0x40, 0xfc, 0xf0, 0xf8, 0xb8, 0x38, 0xf8, 0xf0,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x66, 0x2a, 0x1a, 0x26, 0x7e,
++ 0x13, 0x3a, 0x37, 0x34, 0x54, 0x1b, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0xf8,
++ 0xfc, 0xa8, 0x74, 0xf8, 0x20, 0xfc, 0x00, 0x00,
++ 0x11, 0x11, 0x15, 0x67, 0x2a, 0x1a, 0x24, 0x7e,
++ 0x19, 0x35, 0x35, 0x32, 0x54, 0x10, 0x00, 0x00,
++ 0x00, 0x7c, 0x10, 0xd0, 0xb8, 0x68, 0xf8, 0xa8,
++ 0xb8, 0xa8, 0x78, 0x68, 0x24, 0x44, 0x00, 0x00,
++ 0x10, 0x13, 0x16, 0x67, 0x2b, 0x1a, 0x27, 0x7d,
++ 0x12, 0x3b, 0x34, 0x35, 0x50, 0x13, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xb8, 0xa8, 0xb8, 0xa8,
++ 0x44, 0xfc, 0x90, 0xe0, 0x70, 0x88, 0x00, 0x00,
++ 0x10, 0x11, 0x17, 0x65, 0x29, 0x19, 0x25, 0x7f,
++ 0x10, 0x3b, 0x35, 0x35, 0x50, 0x17, 0x00, 0x00,
++ 0xf0, 0x20, 0xf8, 0xf8, 0xe4, 0x38, 0xe4, 0x5c,
++ 0xf0, 0xf0, 0x50, 0xf8, 0xa4, 0x1c, 0x00, 0x00,
++ 0x12, 0x12, 0x13, 0x6d, 0x2f, 0x1a, 0x2e, 0x7a,
++ 0x16, 0x3a, 0x3e, 0x33, 0x56, 0x10, 0x00, 0x00,
++ 0xa0, 0xb0, 0xa8, 0x68, 0xfc, 0xa0, 0xe8, 0xa8,
++ 0xe8, 0xd0, 0x90, 0xf4, 0x4c, 0x84, 0x00, 0x00,
++ 0x11, 0x11, 0x17, 0x69, 0x2f, 0x1a, 0x2e, 0x7a,
++ 0x16, 0x3a, 0x3e, 0x33, 0x56, 0x10, 0x00, 0x00,
++ 0x20, 0x30, 0xe8, 0x28, 0xfc, 0xa0, 0xe8, 0xa8,
++ 0xe8, 0xd0, 0x90, 0xf4, 0x4c, 0x84, 0x00, 0x00,
++ 0x01, 0x3f, 0x0f, 0x7f, 0x0f, 0x7f, 0x1f, 0x2e,
++ 0x2f, 0x2e, 0x2e, 0x3f, 0x2a, 0x49, 0x00, 0x00,
++ 0x00, 0xf8, 0xe0, 0xfc, 0xe0, 0xfc, 0xe0, 0xdc,
++ 0xf8, 0xd0, 0x28, 0xfc, 0x58, 0x94, 0x00, 0x00,
++ 0x10, 0x17, 0x15, 0x6f, 0x2f, 0x15, 0x2f, 0x7d,
++ 0x19, 0x35, 0x35, 0x31, 0x50, 0x17, 0x00, 0x00,
++ 0x20, 0xbc, 0x40, 0xf8, 0xfc, 0x74, 0xfc, 0xf0,
++ 0xf0, 0xf0, 0x10, 0xf4, 0xa4, 0x1c, 0x00, 0x00,
++ 0x10, 0x11, 0x1e, 0x28, 0x48, 0x7f, 0x08, 0x2a,
++ 0x2a, 0x2a, 0x2a, 0x3e, 0x23, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x1e, 0x28, 0x48, 0x7f, 0x08, 0x2b,
++ 0x2a, 0x2a, 0x2a, 0x3e, 0x23, 0x22, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0x28, 0x28, 0x28, 0xfc,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x3f, 0x29, 0x49, 0x7f, 0x09,
++ 0x2d, 0x2d, 0x2d, 0x3e, 0x26, 0x24, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0x58, 0xe8, 0x38, 0x18, 0xe8,
++ 0xa8, 0x70, 0xfc, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x3e, 0x3e, 0x14, 0x66,
++ 0x0f, 0x11, 0x7f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0xf8, 0x50, 0x8c,
++ 0xf0, 0x00, 0xfc, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x0f, 0x09, 0x0f, 0x0f, 0x3e, 0x3e, 0x2a,
++ 0x3e, 0x0f, 0x7f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0xe0, 0xf8, 0xf8, 0xa8,
++ 0xf8, 0xe0, 0xfc, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x3f, 0x2b, 0x48, 0x7f, 0x0b,
++ 0x2d, 0x2c, 0x2f, 0x3c, 0x24, 0x23, 0x00, 0x00,
++ 0xf0, 0x10, 0xf0, 0xf0, 0xf8, 0x40, 0xfc, 0x78,
++ 0xd8, 0xf0, 0xfc, 0x90, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x3f, 0x29, 0x49, 0x7e, 0x09,
++ 0x2f, 0x2d, 0x2d, 0x3d, 0x25, 0x21, 0x00, 0x00,
++ 0x90, 0xfc, 0x90, 0xf8, 0x68, 0xf8, 0x90, 0xfc,
++ 0x20, 0xf8, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x44, 0x44, 0x44, 0x66, 0x55, 0x48,
++ 0x4c, 0x4c, 0x53, 0x51, 0x62, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0x48, 0x88,
++ 0xc8, 0xc8, 0x28, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x44, 0x08, 0x10, 0x1f, 0x01,
++ 0x01, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x88, 0x78, 0x00, 0xf0, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x22, 0x22, 0x3f, 0x21, 0x27,
++ 0x24, 0x24, 0x24, 0x23, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x88, 0xf8, 0x08, 0xe8,
++ 0x08, 0x08, 0x08, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x3f, 0x00, 0x7f, 0x00,
++ 0x01, 0x07, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x00, 0xfc, 0x80,
++ 0x80, 0x60, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x3f, 0x21, 0x01, 0x7f,
++ 0x01, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0xfc,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x00, 0x1f, 0x10, 0x1f,
++ 0x11, 0x1f, 0x10, 0x10, 0x1f, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x00, 0xf0, 0x10, 0xf0,
++ 0x00, 0xf8, 0x80, 0x44, 0x34, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x02, 0x7f, 0x09, 0x1f,
++ 0x69, 0x0f, 0x09, 0x0f, 0x09, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x00, 0xfc, 0x20, 0xf0,
++ 0x2c, 0xe0, 0x20, 0xe8, 0x08, 0xf8, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x01, 0x01, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x00, 0xf8, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x3f, 0x08, 0x08, 0x7f,
++ 0x1c, 0x1a, 0x2a, 0x49, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x20, 0x20, 0xfc,
++ 0x70, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x00, 0x1c, 0x7f, 0x00,
++ 0x1c, 0x1c, 0x3e, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x10, 0x10, 0xfc, 0x10,
++ 0x90, 0x50, 0x50, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x10, 0x14, 0x64, 0x19,
++ 0x15, 0x7f, 0x2d, 0x2b, 0x49, 0x09, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0xf0, 0x90, 0xf0, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x14, 0x7e, 0x3e, 0x22,
++ 0x3e, 0x3e, 0x22, 0x26, 0x24, 0x42, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x90, 0xe0, 0x88, 0x78,
++ 0x90, 0xe0, 0x88, 0x78, 0x88, 0x44, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x7f, 0x0f, 0x08, 0x0f,
++ 0x0f, 0x7f, 0x1f, 0x69, 0x09, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0xfc, 0xe0, 0x20, 0xe0,
++ 0xe0, 0xfc, 0xf0, 0x2c, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x14, 0x7f, 0x14, 0x1c,
++ 0x3e, 0x2a, 0x3e, 0x7f, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0xfc, 0xa0, 0xf8, 0xa0,
++ 0xf8, 0xa0, 0xfc, 0xd4, 0x6c, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x14, 0x7f, 0x14, 0x1c,
++ 0x3f, 0x2a, 0x3e, 0x7f, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x20, 0xf8, 0x60, 0x90,
++ 0xfc, 0xe8, 0xa8, 0xe8, 0x88, 0x18, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f,
++ 0x04, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x04, 0x04, 0x3f, 0x01, 0x01, 0x1f, 0x01,
++ 0x01, 0x7f, 0x00, 0x24, 0x22, 0x42, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x00, 0x00, 0xf0, 0x00,
++ 0x00, 0xfc, 0x00, 0x88, 0x44, 0x44, 0x00, 0x00,
++ 0x08, 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x08,
++ 0x0f, 0x11, 0x2f, 0x42, 0x3f, 0x00, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00,
++ 0xe0, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x22, 0x12, 0x14, 0x7f, 0x08, 0x08, 0x3e, 0x08,
++ 0x0e, 0x78, 0x10, 0x11, 0x27, 0x40, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0xa0, 0xa0, 0xa0, 0xfc, 0x90,
++ 0x90, 0x94, 0xcc, 0x8c, 0xf4, 0x04, 0x00, 0x00,
++ 0x22, 0x12, 0x14, 0x7f, 0x08, 0x09, 0x3e, 0x09,
++ 0x0e, 0x78, 0x10, 0x10, 0x20, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0xfc, 0x00, 0xf8,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x7f, 0x1f, 0x07, 0x1c, 0x67,
++ 0x04, 0x3f, 0x1f, 0x01, 0x7f, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xfc, 0xf0, 0xf8, 0x08, 0xf8,
++ 0x40, 0xf8, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x22, 0x12, 0x14, 0x7f, 0x08, 0x08, 0x3e, 0x08,
++ 0x0f, 0x79, 0x11, 0x11, 0x21, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x40, 0xfc,
++ 0x24, 0x64, 0x94, 0xf4, 0x04, 0x18, 0x00, 0x00,
++ 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x06, 0x38,
++ 0x7f, 0x1a, 0x7f, 0x1e, 0x02, 0x0d, 0x00, 0x00,
++ 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x50, 0x48,
++ 0xfc, 0x28, 0x28, 0x14, 0x6c, 0x84, 0x00, 0x00,
++ 0x04, 0x3f, 0x01, 0x1f, 0x7f, 0x24, 0x4a, 0x3f,
++ 0x0f, 0x7f, 0x01, 0x7f, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0xf8, 0x00, 0xf0, 0xfc, 0x88, 0x64, 0xf8,
++ 0xe0, 0xfc, 0x00, 0xfc, 0x60, 0x1c, 0x00, 0x00,
++ 0x04, 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x24, 0x42,
++ 0x3f, 0x0f, 0x01, 0x7f, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x88, 0x44,
++ 0xf8, 0xe0, 0x00, 0xfc, 0x60, 0x1c, 0x00, 0x00,
++ 0x44, 0x2b, 0x7f, 0x12, 0x12, 0x3a, 0x13, 0x1d,
++ 0x71, 0x11, 0x21, 0x21, 0x47, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x1f, 0x1f, 0x10, 0x1f, 0x3a,
++ 0x2f, 0x3b, 0x29, 0x3f, 0x29, 0x59, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0xf0, 0x10, 0xf0, 0xb8,
++ 0xe8, 0xa8, 0x38, 0xec, 0x2c, 0x44, 0x00, 0x00,
++ 0x08, 0x3f, 0x01, 0x1f, 0x7f, 0x01, 0x19, 0x7f,
++ 0x19, 0x19, 0x3d, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x20, 0xf8, 0x00, 0xf0, 0xfc, 0x00, 0x30, 0xfc,
++ 0x30, 0x30, 0x78, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x11, 0x12, 0x7c, 0x24,
++ 0x15, 0x1a, 0x08, 0x14, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0xd8, 0xd8, 0x68, 0x48, 0xd8, 0xd8,
++ 0x68, 0x48, 0x48, 0xd8, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x3e, 0x0a, 0x36, 0x0a, 0x32, 0x02, 0x3f,
++ 0x04, 0x09, 0x31, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0xd8, 0x28, 0xc8, 0x00, 0xc0,
++ 0x44, 0x3c, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7d, 0x09, 0x4a, 0x2c, 0x28,
++ 0x29, 0x11, 0x1a, 0x64, 0x00, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x98, 0x98, 0xa8, 0xc8, 0x98,
++ 0x98, 0xa8, 0xc8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x70, 0x0f, 0x08, 0x0f, 0x00,
++ 0x7f, 0x0a, 0x36, 0x0a, 0x32, 0x06, 0x00, 0x00,
++ 0x00, 0x80, 0xe0, 0x1c, 0xe0, 0x20, 0xe0, 0x00,
++ 0xf8, 0x28, 0xd8, 0x28, 0xc8, 0x18, 0x00, 0x00,
++ 0x44, 0x27, 0x28, 0x7c, 0x12, 0x11, 0x3d, 0x10,
++ 0x19, 0x72, 0x14, 0x10, 0x20, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xc8, 0xa8, 0xa8, 0x88,
++ 0x98, 0xa8, 0xc8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x04, 0x7c, 0x04, 0x3c, 0x04, 0x7c, 0x08, 0x7f,
++ 0x06, 0x1a, 0x67, 0x1a, 0x63, 0x06, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0xf8, 0x80, 0xfc, 0x80, 0xf8,
++ 0x18, 0x68, 0x98, 0x68, 0x88, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x3e, 0x3a, 0x26, 0x3a, 0x26, 0x26,
++ 0x7f, 0x0a, 0x36, 0x0a, 0x32, 0x06, 0x00, 0x00,
++ 0x40, 0xfc, 0x08, 0x48, 0x48, 0x48, 0x48, 0x18,
++ 0xf8, 0x28, 0xd8, 0x28, 0xc8, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x3e, 0x22, 0x3f, 0x20, 0x3e,
++ 0x2e, 0x7f, 0x6e, 0x2e, 0x2e, 0x26, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xd8, 0xd8, 0x68, 0x48, 0xd8,
++ 0xd8, 0x68, 0x48, 0x48, 0x48, 0xd8, 0x00, 0x00,
++ 0x00, 0x3f, 0x2e, 0x34, 0x3f, 0x2c, 0x32, 0x3f,
++ 0x3e, 0x0a, 0x36, 0x0a, 0x32, 0x06, 0x00, 0x00,
++ 0x00, 0x70, 0x54, 0x8c, 0xf8, 0x50, 0x30, 0xcc,
++ 0xf8, 0x28, 0xd8, 0x28, 0xc8, 0x18, 0x00, 0x00,
++ 0x08, 0x3d, 0x08, 0x7e, 0x25, 0x7e, 0x24, 0x3e,
++ 0x41, 0x7e, 0x14, 0x14, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0xd8, 0xd8, 0x68, 0x48, 0xd8, 0xd8,
++ 0x68, 0x48, 0x48, 0xdc, 0x04, 0xfc, 0x00, 0x00,
++ 0x06, 0x7b, 0x2a, 0x1c, 0x7f, 0x1c, 0x1a, 0x29,
++ 0x7e, 0x2a, 0x3e, 0x2a, 0x3f, 0x22, 0x00, 0x00,
++ 0x00, 0xf4, 0x78, 0xb8, 0xb4, 0xac, 0xa4, 0xf4,
++ 0xb8, 0xb8, 0xb4, 0xac, 0x2c, 0x24, 0x00, 0x00,
++ 0x02, 0x1f, 0x02, 0x7f, 0x03, 0x0f, 0x72, 0x01,
++ 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x10, 0xe0, 0x40, 0xfc, 0x30, 0xc8, 0x08, 0xf8,
++ 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x02, 0x1f, 0x02, 0x7f, 0x03, 0x0f, 0x72, 0x01,
++ 0x1f, 0x03, 0x3e, 0x03, 0x7e, 0x01, 0x00, 0x00,
++ 0x10, 0xe0, 0x40, 0xfc, 0x30, 0xc8, 0x08, 0xf8,
++ 0x80, 0xf0, 0x00, 0xfc, 0x04, 0xfc, 0x00, 0x00,
++ 0x02, 0x1f, 0x02, 0x7f, 0x03, 0x0f, 0x71, 0x3f,
++ 0x02, 0x3f, 0x0f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x10, 0xe0, 0x40, 0xfc, 0x30, 0xc4, 0xfc, 0xf8,
++ 0x20, 0xf8, 0xe0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x01, 0x1f, 0x01, 0x01, 0x7f,
++ 0x03, 0x05, 0x19, 0x61, 0x01, 0x01, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc,
++ 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x0e, 0x78, 0x08, 0x3e, 0x09, 0x7e, 0x08,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x09, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x20, 0x30, 0x48, 0x58, 0xe4, 0x04, 0x00, 0x00,
++ 0x08, 0x0e, 0x78, 0x08, 0x3e, 0x08, 0x7f, 0x08,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0xf8, 0x88,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x0e, 0x78, 0x08, 0x3e, 0x08, 0x7e, 0x08,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0xf0, 0x90, 0x80,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x1f, 0x72, 0x12, 0x3b, 0x12, 0x7e, 0x1b,
++ 0x36, 0x36, 0x53, 0x16, 0x10, 0x11, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xe8, 0xc8, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x08, 0x0f, 0x79, 0x09, 0x3f, 0x09, 0x7f, 0x0d,
++ 0x1b, 0x1b, 0x29, 0x4a, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x00, 0xfc, 0x54, 0x78,
++ 0xcc, 0xfc, 0x48, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x12, 0x1e, 0x12, 0x12, 0x1f,
++ 0x12, 0x12, 0x1e, 0x72, 0x03, 0x02, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x24, 0xa4, 0xa8, 0xb0, 0x20,
++ 0x30, 0x50, 0x50, 0x88, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x7e, 0x24, 0x24, 0x3c, 0x24, 0x24, 0x3c,
++ 0x24, 0x24, 0x3c, 0x64, 0x07, 0x04, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xa0, 0xb8, 0xa0, 0xa0,
++ 0xa0, 0xa0, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x2a, 0x2a, 0x3a, 0x2a, 0x2a, 0x3a,
++ 0x2a, 0x2b, 0x3e, 0x68, 0x09, 0x0a, 0x00, 0x00,
++ 0x80, 0x38, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xb8, 0xa0, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x7e, 0x24, 0x24, 0x3d, 0x27, 0x24, 0x3f,
++ 0x24, 0x24, 0x3c, 0x64, 0x04, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xa0, 0x10, 0xf8, 0x04, 0xf8,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7e, 0x24, 0x24, 0x3c, 0x25, 0x24, 0x3c,
++ 0x24, 0x24, 0x3c, 0x64, 0x04, 0x04, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x7f, 0x25, 0x25, 0x3d, 0x25, 0x24, 0x3f,
++ 0x24, 0x24, 0x3c, 0x64, 0x04, 0x04, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x00, 0xfc,
++ 0x40, 0x78, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x12, 0x1e, 0x1e, 0x12, 0x1f, 0x72,
++ 0x03, 0x09, 0x35, 0x09, 0x31, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x48, 0x30, 0x70, 0x88, 0x44,
++ 0x90, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x10, 0x1e, 0x28, 0x7f, 0x0c, 0x12, 0x20, 0x7f,
++ 0x08, 0x0f, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0xfc,
++ 0x20, 0xe0, 0xe0, 0x3c, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x7e, 0x25, 0x25, 0x3e, 0x25, 0x24, 0x3c,
++ 0x24, 0x24, 0x3c, 0x64, 0x05, 0x06, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x00, 0xfc, 0x20, 0xa0,
++ 0xb8, 0xa0, 0xa0, 0xe0, 0x20, 0x1c, 0x00, 0x00,
++ 0x01, 0x7d, 0x2e, 0x2a, 0x39, 0x2a, 0x2f, 0x38,
++ 0x28, 0x2f, 0x38, 0x68, 0x09, 0x0a, 0x00, 0x00,
++ 0x10, 0x10, 0xe8, 0xa8, 0x10, 0xa8, 0xfc, 0x44,
++ 0x90, 0xfc, 0x90, 0x90, 0x10, 0x10, 0x00, 0x00,
++ 0x09, 0x31, 0x0a, 0x15, 0x71, 0x12, 0x14, 0x7f,
++ 0x08, 0x0f, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x10, 0x90, 0x68, 0x44, 0x78, 0xc0, 0x7c, 0xfc,
++ 0x20, 0xe0, 0xe0, 0x3c, 0xe0, 0x20, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x3e, 0x2a, 0x3e, 0x21,
++ 0x5f, 0x0f, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x70, 0x50, 0x54, 0x8c, 0xf8, 0x50, 0x30, 0xcc,
++ 0xf8, 0xe0, 0xe0, 0x38, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x7f, 0x25, 0x25, 0x3d, 0x25, 0x25, 0x3d,
++ 0x24, 0x25, 0x3d, 0x66, 0x04, 0x04, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0x78, 0xa8, 0x68, 0x98, 0xf8,
++ 0x40, 0xa8, 0xa4, 0x84, 0x90, 0x70, 0x00, 0x00,
++ 0x00, 0x3f, 0x04, 0x07, 0x07, 0x3f, 0x00, 0x7f,
++ 0x12, 0x1e, 0x1e, 0x12, 0x7f, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xc0, 0xc0, 0xc0, 0x40, 0xfc,
++ 0x90, 0xf0, 0xf0, 0x90, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x2a, 0x2d, 0x3a, 0x2c, 0x2b, 0x3a,
++ 0x2f, 0x28, 0x3f, 0x68, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x48, 0xa8, 0x94, 0x70, 0xf8, 0xa8,
++ 0xfc, 0x00, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x7c, 0x2f, 0x38, 0x3b, 0x2a, 0x3b, 0x68,
++ 0x7f, 0x28, 0x7a, 0x3a, 0x6c, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0xa8, 0xf8, 0x00,
++ 0xfc, 0x40, 0xa8, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x7f, 0x01, 0x1f, 0x01,
++ 0x1f, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0xfc, 0x10, 0xf0, 0x00,
++ 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x20, 0x26, 0x38, 0x22, 0x1f, 0x10, 0x1e, 0x28,
++ 0x7e, 0x08, 0x15, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x28, 0xfc, 0x28, 0xf8, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x20, 0x3c, 0x21, 0x3c, 0x20, 0x7e,
++ 0x10, 0x18, 0x25, 0x2a, 0x72, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x28, 0xfc, 0x28, 0xf8, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x7f, 0x01, 0x1f, 0x15, 0x1d,
++ 0x11, 0x1f, 0x11, 0x1d, 0x25, 0x45, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xfc, 0x10, 0xf0, 0x50, 0x70,
++ 0x10, 0xf0, 0x10, 0x70, 0x50, 0x50, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x24, 0x3c, 0x24, 0x24,
++ 0x3c, 0x24, 0x24, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x20, 0x20, 0x1f, 0x00, 0x1f, 0x10,
++ 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x00, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x24, 0x3f, 0x24, 0x24,
++ 0x3c, 0x24, 0x24, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0xf8, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x3c, 0x24, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x68,
++ 0x98, 0x18, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x20, 0x3f, 0x20, 0x3f, 0x20, 0x1f,
++ 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xe8, 0x08, 0xe8, 0x08, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x24, 0x3c, 0x24, 0x24,
++ 0x3c, 0x24, 0x24, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0x40, 0x60, 0x60,
++ 0x60, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x24, 0x24, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x09, 0x09, 0x17, 0x61, 0x00, 0x1f,
++ 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0xf8, 0x00, 0xfc, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x25, 0x3e, 0x24, 0x24,
++ 0x3c, 0x24, 0x24, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x40, 0x40, 0x7c, 0x40,
++ 0x40, 0x7c, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x25, 0x27, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0xd4, 0x14, 0x0c, 0xfc, 0x04, 0x00, 0x00,
++ 0x01, 0x3f, 0x21, 0x3f, 0x21, 0x3f, 0x00, 0x1f,
++ 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x24, 0x3c, 0x24, 0x25,
++ 0x3e, 0x24, 0x24, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x40, 0x60, 0xd0, 0x48,
++ 0x44, 0x44, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x26, 0x3f, 0x24, 0x24,
++ 0x3f, 0x24, 0x24, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0x50, 0x48, 0x44, 0xf8, 0x40, 0x40,
++ 0xfc, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x24, 0x3f, 0x24, 0x24,
++ 0x3d, 0x25, 0x26, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x40, 0x20, 0x20, 0xc0, 0x48, 0xe8, 0xf0, 0xe0,
++ 0x50, 0x50, 0x48, 0x44, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x25, 0x3e, 0x24, 0x27,
++ 0x3c, 0x24, 0x24, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0x10, 0xe8, 0x04, 0xf8,
++ 0x40, 0x78, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x26, 0x25, 0x25, 0x3c, 0x27, 0x24,
++ 0x3c, 0x24, 0x25, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x40, 0x48, 0x48, 0x50, 0x60, 0x40, 0xfc, 0xa0,
++ 0xa0, 0xa0, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x25, 0x3d, 0x24, 0x24,
++ 0x3d, 0x24, 0x24, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x00, 0xfc, 0xa8, 0xa8, 0x50, 0x50, 0xa8, 0x00,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x15, 0x16, 0x34, 0x57, 0x14,
++ 0x14, 0x14, 0x14, 0x14, 0x14, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x90, 0x60, 0xf0, 0x0c, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x1f, 0x1f, 0x10, 0x1f, 0x14, 0x37, 0x2c,
++ 0x5f, 0x10, 0x1f, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0x00, 0xfc, 0x90, 0x60, 0x1c,
++ 0xf0, 0x10, 0xf0, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x24, 0x3d, 0x25, 0x27,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0xa0, 0x38, 0x48, 0x68,
++ 0xd0, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x28, 0x29, 0x32, 0x28, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x80, 0xfc, 0x80, 0xf8, 0x20, 0xfc, 0x00, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x38, 0x28, 0x2b, 0x2a, 0x3a, 0x2b, 0x2a,
++ 0x3a, 0x2f, 0x28, 0x28, 0x29, 0x5a, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8,
++ 0xa8, 0xfc, 0xa0, 0x90, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3c, 0x24, 0x27, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x50, 0x90, 0xfc, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x24, 0x3c, 0x27, 0x24,
++ 0x3c, 0x27, 0x24, 0x25, 0x25, 0x4e, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xbc, 0xa0, 0xa0, 0xbc, 0xa0,
++ 0xe0, 0xbc, 0xa0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x38, 0x2b, 0x2a, 0x2a, 0x3a, 0x2a, 0x2b,
++ 0x3a, 0x2a, 0x2a, 0x2c, 0x2c, 0x58, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x48, 0x48, 0x88, 0xfc, 0xc8,
++ 0xa8, 0xa8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x01, 0x3c, 0x24, 0x27, 0x24, 0x3c, 0x24, 0x27,
++ 0x3c, 0x24, 0x24, 0x25, 0x25, 0x4e, 0x00, 0x00,
++ 0x08, 0x88, 0x90, 0xfc, 0x90, 0x90, 0x90, 0xfc,
++ 0x90, 0x90, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x38, 0x2f, 0x29, 0x2a, 0x3a, 0x2f, 0x29,
++ 0x3d, 0x2d, 0x2b, 0x2b, 0x2c, 0x58, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x28, 0xfc, 0x28, 0xf8, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0xe0, 0x3c, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3c, 0x25, 0x25, 0x26, 0x24, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xa8, 0xa4, 0x84, 0x90, 0x70, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x25, 0x3d, 0x24, 0x24,
++ 0x3d, 0x26, 0x25, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0xa0, 0xa0,
++ 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x24, 0x3c, 0x25, 0x25,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0xa8, 0xa8, 0x50, 0x50, 0xa8, 0x40, 0xf8, 0x28,
++ 0xe8, 0x28, 0x58, 0x88, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3d, 0x26, 0x26, 0x27, 0x3e, 0x26, 0x27,
++ 0x3e, 0x24, 0x24, 0x24, 0x25, 0x4e, 0x00, 0x00,
++ 0x40, 0x58, 0x48, 0x48, 0x58, 0x48, 0x48, 0x58,
++ 0x48, 0x60, 0xa0, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x24,
++ 0x3d, 0x25, 0x25, 0x25, 0x27, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0x28, 0x58, 0x88, 0xf8, 0x00,
++ 0xf8, 0x68, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3b, 0x28, 0x29, 0x29, 0x39, 0x28, 0x2b,
++ 0x3a, 0x2b, 0x2a, 0x2a, 0x2a, 0x5a, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0xa8, 0x38, 0xe8, 0x48, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x25, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x24, 0x27, 0x25, 0x24, 0x4c, 0x00, 0x00,
++ 0x50, 0xfc, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x48,
++ 0x58, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x25, 0x24, 0x3f, 0x26, 0x27,
++ 0x3c, 0x24, 0x24, 0x24, 0x25, 0x4e, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0xfc, 0x48, 0xfc,
++ 0x40, 0x78, 0x48, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x7e, 0x11, 0x1e, 0x14, 0x24, 0x39, 0x4f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0xfc, 0x20, 0xe8, 0x90, 0xe8, 0x84, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x3f, 0x25, 0x26, 0x25, 0x3e, 0x24, 0x25,
++ 0x3e, 0x25, 0x24, 0x25, 0x24, 0x4f, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xd8, 0xa8, 0xc8, 0x40, 0xb0,
++ 0x4c, 0xa0, 0x48, 0x90, 0x60, 0x80, 0x00, 0x00,
++ 0x00, 0x3b, 0x2a, 0x2a, 0x2b, 0x3a, 0x2b, 0x2b,
++ 0x3b, 0x2a, 0x2b, 0x2a, 0x2b, 0x5a, 0x00, 0x00,
++ 0x00, 0xf8, 0x38, 0x28, 0xf8, 0x28, 0xe8, 0x78,
++ 0xf8, 0x68, 0xb8, 0x58, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x27, 0x26, 0x3f, 0x27, 0x24,
++ 0x3d, 0x24, 0x27, 0x24, 0x25, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x48, 0x58, 0x58, 0x00,
++ 0xf8, 0x08, 0xfc, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x26, 0x24, 0x3d, 0x27, 0x24,
++ 0x3d, 0x24, 0x25, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa8, 0xa4, 0x1c, 0xf8, 0x90,
++ 0xf8, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x26, 0x27, 0x3c, 0x24, 0x27,
++ 0x3c, 0x25, 0x24, 0x24, 0x27, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x08, 0xfc, 0x50, 0x88, 0xf4,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x27, 0x25, 0x3d, 0x25, 0x25,
++ 0x3f, 0x25, 0x25, 0x26, 0x25, 0x4c, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0xfc, 0x00, 0xf8, 0xa8, 0x48, 0xb0, 0x00, 0x00,
++ 0x00, 0x38, 0x2f, 0x2b, 0x28, 0x3f, 0x2b, 0x2a,
++ 0x3b, 0x2b, 0x2a, 0x2b, 0x29, 0x5a, 0x00, 0x00,
++ 0x28, 0x24, 0xfc, 0xe0, 0x20, 0xe0, 0xe0, 0x50,
++ 0xd0, 0xd4, 0x4c, 0xcc, 0x84, 0x44, 0x00, 0x00,
++ 0x00, 0x3f, 0x25, 0x24, 0x27, 0x3c, 0x25, 0x26,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x18, 0xe8, 0x48, 0xd0, 0xfc, 0xe0, 0x50, 0x4c,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x24, 0x3f, 0x25, 0x25,
++ 0x3e, 0x24, 0x27, 0x24, 0x24, 0x4c, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0xd0, 0x40, 0xfc, 0x50, 0x50,
++ 0xe8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x26, 0x27, 0x3f, 0x26, 0x27,
++ 0x3d, 0x25, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0x40, 0xa0, 0xf0, 0x08, 0xfc, 0x58, 0xe8, 0xf8,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x02, 0x3d, 0x25, 0x24, 0x26, 0x3d, 0x25, 0x24,
++ 0x3f, 0x25, 0x25, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x78, 0x90, 0xfc, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x48, 0xd8, 0x7c, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x27, 0x25, 0x3d, 0x25, 0x25,
++ 0x3d, 0x25, 0x25, 0x26, 0x26, 0x4c, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xfc, 0x54, 0x8c, 0x70, 0xfc,
++ 0x70, 0x70, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x3f, 0x3f, 0x2a, 0x3f, 0x52,
++ 0x3f, 0x10, 0x1f, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x70, 0x54, 0x9c, 0xf8, 0x50, 0x30, 0xcc,
++ 0xf0, 0x10, 0xf0, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3f, 0x3e, 0x32, 0x5e, 0x1f,
++ 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x20, 0xf8, 0x50, 0xfc, 0x20, 0xf8, 0x20, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x12, 0x15, 0x1e, 0x14, 0x14,
++ 0x13, 0x12, 0x13, 0x23, 0x22, 0x42, 0x00, 0x00,
++ 0x80, 0xfc, 0x90, 0xfc, 0xf8, 0xf8, 0x90, 0xfc,
++ 0xf0, 0x10, 0xf0, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x27, 0x3c, 0x27, 0x26,
++ 0x3e, 0x27, 0x25, 0x25, 0x26, 0x4c, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xb8, 0xa8,
++ 0xa8, 0xb8, 0x10, 0x98, 0x64, 0x44, 0x00, 0x00,
++ 0x00, 0x38, 0x2f, 0x28, 0x2f, 0x3a, 0x2b, 0x2c,
++ 0x39, 0x29, 0x29, 0x29, 0x2a, 0x5c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa4, 0xf8, 0xe8, 0xf8, 0x44,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3b, 0x28, 0x2b, 0x2a, 0x3f, 0x2b, 0x28,
++ 0x3b, 0x28, 0x2b, 0x2a, 0x2a, 0x5a, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x48, 0x58, 0x58, 0x40,
++ 0xf8, 0x80, 0xf8, 0xa8, 0xa8, 0xb8, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x28, 0x29, 0x3f, 0x29, 0x29,
++ 0x3b, 0x2d, 0x28, 0x2a, 0x2a, 0x5c, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xe0, 0x10, 0xf4, 0xb8, 0xb0,
++ 0xf4, 0xac, 0x00, 0xa8, 0x54, 0x54, 0x00, 0x00,
++ 0x02, 0x3a, 0x2c, 0x2a, 0x2b, 0x3a, 0x2a, 0x2b,
++ 0x3b, 0x2a, 0x2b, 0x2a, 0x2b, 0x5e, 0x00, 0x00,
++ 0x48, 0x48, 0x90, 0x48, 0xf8, 0x68, 0xe8, 0xf8,
++ 0x68, 0xd8, 0x68, 0xd8, 0x6c, 0xc4, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x25, 0x25, 0x3d, 0x25, 0x25,
++ 0x3c, 0x27, 0x25, 0x25, 0x25, 0x4d, 0x00, 0x00,
++ 0xa0, 0xa0, 0xfc, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0xf8, 0x48, 0x68, 0x98, 0xf8, 0x30, 0x00, 0x00,
++ 0x00, 0x38, 0x2b, 0x2a, 0x2b, 0x3a, 0x2a, 0x2a,
++ 0x3a, 0x2a, 0x2b, 0x2b, 0x2d, 0x5b, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0x68, 0xb8, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0xf8, 0x68, 0x68, 0xfc, 0x00, 0x00,
++ 0x01, 0x3f, 0x29, 0x28, 0x2d, 0x3d, 0x2f, 0x29,
++ 0x3f, 0x2b, 0x2b, 0x2d, 0x2a, 0x5c, 0x00, 0x00,
++ 0x10, 0xfc, 0x18, 0x14, 0xfc, 0x10, 0xf4, 0xd4,
++ 0xf8, 0xb8, 0xf4, 0xdc, 0xec, 0x44, 0x00, 0x00,
++ 0x13, 0x6f, 0x13, 0x2b, 0x7f, 0x3a, 0x57, 0x01,
++ 0x3f, 0x22, 0x2d, 0x22, 0x2c, 0x20, 0x00, 0x00,
++ 0x90, 0xe8, 0x90, 0xa8, 0xfc, 0xb8, 0xd4, 0x00,
++ 0xf8, 0xc8, 0x28, 0xc8, 0x28, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x2f, 0x28, 0x2f, 0x3d, 0x2f, 0x0c,
++ 0x7c, 0x2f, 0x2d, 0x57, 0x14, 0x20, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xc8, 0x48, 0xc8, 0xa8,
++ 0xb0, 0xb0, 0x14, 0xf4, 0x4c, 0x84, 0x00, 0x00,
++ 0x01, 0x1f, 0x0f, 0x0f, 0x08, 0x0f, 0x3f, 0x2f,
++ 0x42, 0x1f, 0x0f, 0x01, 0x3f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0xe0, 0xe0, 0x20, 0xe0, 0xfc, 0xe8,
++ 0x40, 0xf0, 0xe0, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x7c, 0x13, 0x18, 0x25, 0x7c, 0x13, 0x11,
++ 0x7e, 0x13, 0x10, 0x1d, 0x62, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0xa0, 0xfc, 0x30,
++ 0xc8, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x01, 0x05, 0x39, 0x21, 0x21, 0x3d, 0x21, 0x21,
++ 0x3d, 0x21, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x00, 0x78, 0x08, 0x08, 0x78, 0x08, 0x08,
++ 0x78, 0x88, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x02, 0x1c, 0x10, 0x1e, 0x10, 0x10, 0x1f, 0x12,
++ 0x02, 0x7f, 0x02, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x50,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x3f, 0x01, 0x1f, 0x02, 0x7f, 0x04, 0x1a,
++ 0x6c, 0x08, 0x0e, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x80, 0xfc, 0x40, 0x30,
++ 0xec, 0x20, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x02, 0x3c, 0x3e, 0x20, 0x3f, 0x1f, 0x11, 0x1f,
++ 0x11, 0x1f, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0xf8, 0x08, 0xf8, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0xf8, 0x08, 0x08, 0x70, 0x00, 0x00,
++ 0x0a, 0x32, 0x23, 0x22, 0x3b, 0x20, 0x3a, 0x22,
++ 0x22, 0x7f, 0x00, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0x38, 0x88, 0x08, 0xb8, 0x88, 0xb8, 0x88,
++ 0x88, 0xfc, 0x00, 0x60, 0x18, 0x04, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x1f, 0x71, 0x1f, 0x1f, 0x1f,
++ 0x02, 0x1c, 0x1e, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0xc0, 0xf8, 0x00, 0xe0, 0xe0, 0xf8,
++ 0x00, 0xf0, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x18, 0x6f, 0x01, 0x01, 0x3f,
++ 0x01, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0x30, 0xec, 0x00, 0x00, 0xf8,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x02, 0x04, 0x38, 0x08, 0x08, 0x7f, 0x08, 0x08,
++ 0x3e, 0x22, 0x22, 0x22, 0x3e, 0x23, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0xa0, 0xa0, 0xa0, 0xfc, 0xa0,
++ 0xa0, 0x90, 0x94, 0xac, 0xcc, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x3f, 0x49, 0x09, 0x7f,
++ 0x09, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x12, 0x1a, 0x16, 0x17, 0x1f,
++ 0x72, 0x1a, 0x1a, 0x2a, 0x23, 0x46, 0x00, 0x00,
++ 0x70, 0x10, 0x50, 0x50, 0x88, 0x88, 0x24, 0x20,
++ 0x20, 0x50, 0x48, 0x98, 0xe4, 0x04, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x13, 0x1a, 0x16, 0x16, 0x1f,
++ 0x72, 0x1a, 0x1a, 0x2a, 0x23, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x40, 0x40, 0x78, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x09, 0x1e, 0x12, 0x1a, 0x16, 0x16, 0x1f,
++ 0x72, 0x1a, 0x1a, 0x2a, 0x22, 0x46, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xe8, 0xa8, 0xa8, 0xa8,
++ 0xe8, 0xa8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x12, 0x1a, 0x16, 0x16, 0x1f,
++ 0x72, 0x1a, 0x1a, 0x2a, 0x22, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x04, 0x09, 0x1e, 0x12, 0x1b, 0x16, 0x17, 0x1e,
++ 0x72, 0x1b, 0x1a, 0x2a, 0x22, 0x46, 0x00, 0x00,
++ 0x0c, 0xf0, 0xa8, 0xa4, 0x24, 0x10, 0xf8, 0x10,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x12, 0x1b, 0x16, 0x16, 0x1e,
++ 0x72, 0x1a, 0x1b, 0x2b, 0x22, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0xf8, 0x04, 0xf8, 0xf8, 0x88,
++ 0xf8, 0x80, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x10, 0x3d, 0x25, 0x35, 0x2d, 0x2d, 0x3f,
++ 0x64, 0x37, 0x34, 0x34, 0x25, 0x4e, 0x00, 0x00,
++ 0x40, 0xc0, 0x58, 0x48, 0xd8, 0x48, 0xd8, 0x48,
++ 0x40, 0xf8, 0x90, 0x60, 0xb0, 0x0c, 0x00, 0x00,
++ 0x08, 0x11, 0x3c, 0x27, 0x36, 0x2d, 0x2d, 0x3e,
++ 0x65, 0x34, 0x37, 0x34, 0x25, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x48, 0xd8, 0xd8, 0x40,
++ 0xf8, 0x08, 0xfc, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x13, 0x3c, 0x27, 0x36, 0x2f, 0x2e, 0x3f,
++ 0x65, 0x35, 0x35, 0x35, 0x25, 0x4d, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x08, 0x1e, 0x13, 0x1a, 0x16, 0x16, 0x1e,
++ 0x72, 0x1a, 0x1a, 0x2a, 0x23, 0x46, 0x00, 0x00,
++ 0x20, 0xf8, 0x50, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x09, 0x10, 0x3f, 0x24, 0x35, 0x2c, 0x2f, 0x3c,
++ 0x65, 0x37, 0x34, 0x37, 0x24, 0x4d, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x68,
++ 0xa4, 0xfc, 0xe8, 0x94, 0xec, 0x84, 0x00, 0x00,
++ 0x08, 0x10, 0x3f, 0x25, 0x35, 0x2e, 0x2f, 0x3c,
++ 0x67, 0x36, 0x36, 0x36, 0x27, 0x4e, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x50, 0x50, 0xe8, 0xfc, 0x00,
++ 0xf8, 0xe8, 0xa8, 0xe8, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x13, 0x3c, 0x27, 0x36, 0x2c, 0x2f, 0x3c,
++ 0x67, 0x34, 0x37, 0x34, 0x27, 0x4c, 0x00, 0x00,
++ 0x90, 0xfc, 0x90, 0xfc, 0xe8, 0x00, 0xfc, 0x48,
++ 0xe8, 0xb0, 0x70, 0xa8, 0x24, 0xc0, 0x00, 0x00,
++ 0x08, 0x10, 0x3f, 0x25, 0x35, 0x2d, 0x2d, 0x3d,
++ 0x66, 0x35, 0x35, 0x35, 0x25, 0x4d, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xf8, 0x48, 0xf8, 0xf8, 0xa8,
++ 0x54, 0xf8, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x10, 0x3d, 0x25, 0x35, 0x2d, 0x2d, 0x3d,
++ 0x65, 0x35, 0x35, 0x36, 0x26, 0x4d, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0x68, 0xb8, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0xf8, 0xe8, 0xe8, 0xfc, 0x00, 0x00,
++ 0x04, 0x09, 0x1e, 0x12, 0x1a, 0x16, 0x16, 0x1f,
++ 0x72, 0x1a, 0x1a, 0x2a, 0x23, 0x47, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8,
++ 0x88, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x1c, 0x3e, 0x2a, 0x3e, 0x08,
++ 0x3e, 0x08, 0x7e, 0x14, 0x22, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0xa4,
++ 0xa4, 0xa8, 0x90, 0x90, 0xe8, 0x84, 0x00, 0x00,
++ 0x5b, 0x7f, 0x5b, 0x7f, 0x7f, 0x5b, 0x7f, 0x00,
++ 0x7f, 0x3e, 0x22, 0x3e, 0x16, 0x78, 0x00, 0x00,
++ 0x40, 0x78, 0x90, 0x20, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0x88, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a,
++ 0x3e, 0x2a, 0x08, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0xa8, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x08, 0x08, 0x04,
++ 0x04, 0x02, 0x01, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x20, 0x20, 0x20, 0x40,
++ 0x40, 0x80, 0x00, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x1f, 0x10,
++ 0x22, 0x41, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0x00, 0xf8, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x01, 0x7f, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x0f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xfc, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x1f, 0x00, 0x7f,
++ 0x04, 0x04, 0x04, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x00, 0xfc,
++ 0x80, 0x80, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x07, 0x04, 0x04, 0x08,
++ 0x3f, 0x04, 0x02, 0x03, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xc0, 0x48, 0x48, 0x38,
++ 0xe0, 0x40, 0x80, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x08, 0x0f, 0x12, 0x72, 0x1f, 0x12, 0x0c, 0x38,
++ 0x0f, 0x12, 0x72, 0x1f, 0x04, 0x38, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xc8, 0x48, 0x30, 0x00,
++ 0xf8, 0x48, 0x48, 0xc8, 0x48, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x07, 0x04, 0x08, 0x10,
++ 0x7f, 0x02, 0x02, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xc0, 0x40, 0x20, 0x10,
++ 0xec, 0x20, 0x20, 0x20, 0x20, 0xc0, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x04, 0x10, 0x12, 0x11,
++ 0x11, 0x10, 0x10, 0x16, 0x18, 0x63, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x30, 0x28, 0xc4, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x10, 0x1f, 0x10,
++ 0x10, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xf0, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x0f, 0x10, 0x2f,
++ 0x48, 0x08, 0x0f, 0x08, 0x00, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x08, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x01, 0x1f, 0x11, 0x1f,
++ 0x11, 0x11, 0x7f, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0x10, 0xfc, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xe0, 0x20, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x06, 0x03, 0x0c, 0x32, 0x03,
++ 0x0e, 0x71, 0x01, 0x00, 0x01, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xe0, 0x40, 0x80, 0x80,
++ 0x60, 0x1c, 0x00, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x0f, 0x0a, 0x09, 0x7f,
++ 0x12, 0x11, 0x11, 0x3f, 0x20, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xe0, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0xf8, 0x40, 0x80, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x10, 0x1f, 0x20, 0x4f, 0x09,
++ 0x08, 0x7f, 0x12, 0x11, 0x3f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x00, 0xe0, 0x20,
++ 0xa0, 0xfc, 0x20, 0x20, 0xf8, 0xc0, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x10, 0x09, 0x49, 0x21,
++ 0x21, 0x09, 0x11, 0x11, 0x21, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x08, 0x08,
++ 0x08, 0x30, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x17, 0x10,
++ 0x31, 0x50, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x10, 0x10, 0xfc, 0x10,
++ 0x10, 0x90, 0x90, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3f, 0x09, 0x09, 0x11,
++ 0x21, 0x7f, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x20, 0x10, 0x08,
++ 0x08, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x0f, 0x10, 0x2f,
++ 0x48, 0x0f, 0x08, 0x08, 0x08, 0x07, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x08, 0x88,
++ 0x88, 0x88, 0xb0, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x06, 0x38, 0x24, 0x24,
++ 0x24, 0x24, 0x3c, 0x64, 0x08, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x10, 0x10, 0x1f,
++ 0x10, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x01, 0x7f, 0x01,
++ 0x3f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xfc, 0x00,
++ 0xf8, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x01, 0x3f, 0x00,
++ 0x08, 0x04, 0x04, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x00, 0xf8, 0x20,
++ 0x20, 0x40, 0x40, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x3f, 0x21, 0x2f,
++ 0x21, 0x22, 0x24, 0x28, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x08, 0xe8,
++ 0x08, 0x88, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x00, 0x3f, 0x20, 0x27,
++ 0x24, 0x24, 0x27, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x08, 0xc8,
++ 0x48, 0x48, 0xc8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x01, 0x03, 0x3c, 0x03,
++ 0x06, 0x7f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xe0, 0x40, 0x80,
++ 0x60, 0xfc, 0x20, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x32, 0x12,
++ 0x0c, 0x04, 0x0c, 0x12, 0x7f, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x20, 0x20, 0xc8, 0x48,
++ 0x30, 0x10, 0x30, 0x48, 0xf4, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x09, 0x09, 0x1f, 0x21,
++ 0x7f, 0x03, 0x05, 0x19, 0x61, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0x00, 0xf0, 0x00,
++ 0xfc, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x0f, 0x10, 0x2f,
++ 0x48, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x08, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0x88, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x7e, 0x12,
++ 0x12, 0x3a, 0x24, 0x06, 0x1a, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x88, 0x88,
++ 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x01, 0x7f, 0x02, 0x0f,
++ 0x08, 0x18, 0x6f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x00, 0xf0,
++ 0x20, 0x40, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x02, 0x04, 0x18, 0x6f,
++ 0x00, 0x1f, 0x10, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x80, 0x40, 0x30, 0xec,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x10, 0x17,
++ 0x30, 0x50, 0x10, 0x10, 0x13, 0x1c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x50, 0x48, 0x40, 0xfc,
++ 0x40, 0x60, 0xa0, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x10, 0x08, 0x4b, 0x22,
++ 0x22, 0x0a, 0x12, 0x12, 0x21, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xfc, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x01, 0x03, 0x0e, 0x31,
++ 0x01, 0x0f, 0x74, 0x04, 0x07, 0x04, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x20, 0x40,
++ 0x80, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x01, 0x06, 0x18,
++ 0x00, 0x7f, 0x12, 0x12, 0x22, 0x4d, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0x10, 0x60,
++ 0x00, 0xf8, 0x48, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x17, 0x10,
++ 0x32, 0x51, 0x11, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x80, 0x80, 0xf8, 0x10,
++ 0x10, 0x20, 0x20, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x78, 0x0b, 0x10, 0x3a,
++ 0x0a, 0x4a, 0x32, 0x11, 0x2c, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x18, 0xe0, 0x40, 0x40,
++ 0x78, 0x40, 0x40, 0xf8, 0x00, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x06, 0x38, 0x08, 0x7f,
++ 0x08, 0x0e, 0x78, 0x08, 0x0b, 0x18, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x50, 0x48, 0x40, 0xfc,
++ 0x48, 0x30, 0x20, 0xd4, 0x0c, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x02, 0x04, 0x1f, 0x60,
++ 0x1f, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x80, 0x40, 0xf0, 0x0c,
++ 0xe0, 0x40, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x7f, 0x09, 0x09,
++ 0x15, 0x23, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x20, 0x30,
++ 0x48, 0x88, 0x80, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x7f, 0x08, 0x11, 0x33,
++ 0x08, 0x3f, 0x01, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xfc, 0x88, 0x10, 0x30,
++ 0x88, 0xf8, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x13, 0x12, 0x13, 0x10,
++ 0x1f, 0x01, 0x7f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf0, 0x10, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x10, 0x09, 0x49, 0x22,
++ 0x22, 0x0c, 0x10, 0x10, 0x21, 0x26, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x50, 0x48, 0x44,
++ 0x4c, 0xd0, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3c, 0x24, 0x25, 0x3c,
++ 0x24, 0x3c, 0x24, 0x26, 0x39, 0x62, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0xf8, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x24, 0x24, 0x3c, 0x27,
++ 0x04, 0x7c, 0x14, 0x14, 0x27, 0x44, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0xfc,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x02, 0x04, 0x1f, 0x61,
++ 0x1f, 0x01, 0x05, 0x19, 0x61, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x80, 0x40, 0xf0, 0x0c,
++ 0xf0, 0x00, 0x40, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x02, 0x1f, 0x11, 0x11,
++ 0x1f, 0x11, 0x03, 0x05, 0x19, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x10, 0x10,
++ 0xf0, 0x10, 0x40, 0x24, 0x24, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3f, 0x00, 0x0f, 0x08,
++ 0x08, 0x0f, 0x04, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xe0, 0x20,
++ 0x20, 0xe0, 0x40, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3f, 0x02, 0x0e, 0x05,
++ 0x18, 0x61, 0x24, 0x24, 0x44, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0x10, 0x90,
++ 0x60, 0x00, 0x88, 0x84, 0x24, 0xe0, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x01, 0x7f, 0x05,
++ 0x19, 0x6f, 0x02, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x70, 0xc0, 0x00, 0xfc, 0x40,
++ 0x30, 0xcc, 0x40, 0x70, 0x10, 0xe0, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x06, 0x38, 0x08, 0x7f,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x08, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0x48, 0x08, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x1f, 0x10, 0x1f,
++ 0x10, 0x1f, 0x11, 0x10, 0x1e, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf8, 0x10, 0xa0, 0x60, 0x1c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x7f, 0x05, 0x1f,
++ 0x69, 0x0f, 0x09, 0x0f, 0x09, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x40, 0xf0,
++ 0x2c, 0xe0, 0x20, 0xe8, 0x08, 0xf8, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x3f, 0x20, 0x4f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xfc, 0x08, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x7f, 0x1f, 0x11, 0x1f, 0x01,
++ 0x3f, 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1f, 0x10, 0x1f, 0x10,
++ 0x1f, 0x10, 0x1e, 0x10, 0x1e, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0x98, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x0e, 0x08, 0x7f,
++ 0x08, 0x2c, 0x2a, 0x2a, 0x48, 0x19, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x48, 0x48,
++ 0x50, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x3f, 0x04, 0x0a,
++ 0x31, 0x01, 0x7f, 0x01, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x20, 0x50,
++ 0x88, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x7e, 0x08,
++ 0x1d, 0x1a, 0x2a, 0x48, 0x0b, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x70, 0x10, 0x90, 0x88,
++ 0x44, 0x40, 0x50, 0x88, 0xfc, 0x04, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x3f, 0x1f, 0x01, 0x7f, 0x01,
++ 0x1f, 0x7f, 0x04, 0x0f, 0x03, 0x3c, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xe0, 0x20, 0xfc, 0x20,
++ 0xe0, 0xfc, 0x40, 0xc0, 0x60, 0x10, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x3f, 0x01, 0x1f, 0x01, 0x7f,
++ 0x1f, 0x11, 0x1f, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xf0, 0x00, 0xfc,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x00, 0x7f, 0x00, 0x0f,
++ 0x3f, 0x21, 0x5f, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xfc, 0x20, 0xe0,
++ 0xfc, 0x08, 0xf0, 0x10, 0x30, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x0f, 0x08, 0x0f,
++ 0x08, 0x7f, 0x09, 0x08, 0x0e, 0x30, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x00, 0xe0, 0x00, 0xe0,
++ 0x00, 0xfc, 0x10, 0xa0, 0x60, 0x1c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x10, 0x0b, 0x4a, 0x22,
++ 0x23, 0x0a, 0x12, 0x12, 0x24, 0x2b, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0xfc, 0x48, 0x50,
++ 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x02, 0x02, 0x3e, 0x02,
++ 0x3e, 0x03, 0x7e, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x80, 0x80, 0xf8, 0x80,
++ 0xf8, 0x80, 0xfc, 0x80, 0x80, 0x80, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x13, 0x09, 0x49, 0x22,
++ 0x20, 0x0f, 0x10, 0x10, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x50, 0x48, 0x48,
++ 0x40, 0xfc, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x11, 0x09, 0x4a, 0x27,
++ 0x20, 0x0b, 0x12, 0x12, 0x22, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x08, 0xc8,
++ 0x48, 0xc8, 0x70, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x1e, 0x12, 0x1a, 0x16,
++ 0x12, 0x1a, 0x16, 0x12, 0x22, 0x47, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x78, 0x48, 0x68, 0x58,
++ 0x48, 0x68, 0x58, 0x48, 0x88, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x01, 0x7f, 0x02, 0x04,
++ 0x1c, 0x64, 0x3f, 0x04, 0x08, 0x30, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x80, 0x40,
++ 0x70, 0x4c, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x05, 0x19, 0x11, 0x1d,
++ 0x11, 0x1d, 0x12, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0x70, 0x10, 0x70,
++ 0x10, 0x70, 0x90, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x10, 0x0b, 0x48, 0x27, 0x21,
++ 0x16, 0x11, 0x23, 0x24, 0x41, 0x4e, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x40, 0xfc, 0x24,
++ 0x9c, 0xf0, 0x20, 0xc0, 0xb0, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x7f, 0x08,
++ 0x1c, 0x1a, 0x2a, 0x49, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x20, 0x20, 0xfc, 0x20,
++ 0x70, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3e, 0x22, 0x3e, 0x20,
++ 0x3e, 0x20, 0x3e, 0x20, 0x20, 0x23, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x08, 0xf8, 0x00,
++ 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x06, 0x38, 0x08, 0x7e,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x48, 0x28, 0x28, 0x88,
++ 0x48, 0x4c, 0x38, 0xc8, 0x08, 0x08, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1e, 0x12, 0x1e, 0x00, 0x1f,
++ 0x00, 0x7f, 0x04, 0x07, 0x08, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x90, 0xf0, 0x00, 0xf0,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xe0, 0x00, 0x00,
++ 0x04, 0x7f, 0x0f, 0x08, 0x0f, 0x3e, 0x22, 0x3e,
++ 0x0f, 0x7f, 0x08, 0x0f, 0x10, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0xe0, 0x20, 0xe0, 0xf8, 0x88, 0xf8,
++ 0xe0, 0xfc, 0x00, 0xf0, 0x10, 0xe0, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3f, 0x20, 0x5e, 0x01,
++ 0x7e, 0x14, 0x14, 0x14, 0x24, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xfc, 0x18, 0x10, 0xfc,
++ 0x90, 0x50, 0x50, 0x14, 0x34, 0xfc, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x21, 0x7f, 0x0f, 0x09,
++ 0x0f, 0x09, 0x0f, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0x08, 0xf8, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x7f, 0x08,
++ 0x08, 0x3e, 0x22, 0x22, 0x3e, 0x23, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0x78, 0x48, 0x48,
++ 0x78, 0x48, 0x78, 0x88, 0x88, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x06, 0x1f, 0x72, 0x1f, 0x0c, 0x34,
++ 0x0f, 0x12, 0x72, 0x1f, 0x0c, 0x70, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xc8, 0x48, 0x30,
++ 0xf8, 0x48, 0x48, 0xc8, 0x48, 0x38, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x06, 0x1c, 0x10, 0x1e, 0x11,
++ 0x1f, 0x10, 0x1e, 0x70, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x94, 0x94, 0x0c,
++ 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x3f, 0x04, 0x3f,
++ 0x21, 0x4f, 0x09, 0x09, 0x09, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x40, 0xfc,
++ 0x08, 0xe0, 0x20, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x11, 0x3d, 0x25,
++ 0x25, 0x3d, 0x25, 0x25, 0x3d, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x48, 0x48,
++ 0xf8, 0x08, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x09, 0x09, 0x11, 0x10,
++ 0x37, 0x50, 0x11, 0x16, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf0, 0x40,
++ 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x09, 0x0f, 0x09, 0x0f,
++ 0x01, 0x3f, 0x21, 0x21, 0x2e, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0x20, 0xe0,
++ 0x00, 0xf8, 0x48, 0xe8, 0x28, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x10, 0x14, 0x64, 0x19,
++ 0x16, 0x7e, 0x2c, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x80, 0x80, 0xf8, 0x08,
++ 0x88, 0x48, 0x48, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x7f, 0x08,
++ 0x0e, 0x13, 0x12, 0x22, 0x42, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x80, 0xfc, 0x20, 0xb8,
++ 0xe8, 0xa8, 0xb8, 0xa4, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x08, 0x09, 0x09, 0x3f,
++ 0x20, 0x27, 0x24, 0x27, 0x24, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0, 0x20, 0xf8,
++ 0x08, 0xc8, 0x48, 0xc8, 0x48, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x05, 0x19, 0x62, 0x1f, 0x00,
++ 0x3e, 0x0a, 0x36, 0x0a, 0x32, 0x06, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xc0, 0x30, 0x4c, 0xe0, 0x00,
++ 0xf8, 0x28, 0xd8, 0x28, 0xc8, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x3f, 0x04, 0x19,
++ 0x60, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x40, 0x30,
++ 0x8c, 0xf0, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x06, 0x0c, 0x7f, 0x1f, 0x02, 0x7f,
++ 0x02, 0x1f, 0x06, 0x1a, 0x62, 0x02, 0x00, 0x00,
++ 0x40, 0xfc, 0x60, 0xc0, 0xfc, 0xf0, 0x90, 0xfc,
++ 0x90, 0xf0, 0xc0, 0xb0, 0x8c, 0x80, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x01, 0x7f, 0x0f, 0x08, 0x0f,
++ 0x3f, 0x20, 0x27, 0x24, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xfc, 0xe0, 0x20, 0xe0,
++ 0xf8, 0x08, 0xc8, 0x48, 0xc8, 0x18, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x08, 0x7f, 0x06,
++ 0x24, 0x14, 0x18, 0x1e, 0x70, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xc0, 0x80, 0xf8, 0x08, 0xe8,
++ 0xa8, 0xa8, 0xe8, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x05, 0x01, 0x3f, 0x25, 0x25,
++ 0x2b, 0x31, 0x2f, 0x21, 0x5f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x20, 0x20,
++ 0x50, 0x88, 0xf0, 0x00, 0xf8, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x1f, 0x01, 0x7f, 0x07, 0x1e,
++ 0x63, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x00, 0x00,
++ 0x40, 0xfc, 0x50, 0xe0, 0x40, 0xfc, 0xe0, 0x08,
++ 0xf8, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3e, 0x02, 0x3e, 0x20,
++ 0x3e, 0x0a, 0x36, 0x0a, 0x32, 0x06, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x08, 0xf8, 0x80,
++ 0xf8, 0x28, 0xd8, 0x28, 0xc8, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0c, 0x08, 0x15, 0x16, 0x34,
++ 0x57, 0x14, 0x14, 0x14, 0x14, 0x11, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xc0, 0xfc, 0x90, 0x60, 0xd0,
++ 0x2c, 0xc0, 0x30, 0xc8, 0x30, 0xc0, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x17, 0x10, 0x1f, 0x12,
++ 0x13, 0x1e, 0x3f, 0x22, 0x41, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0xf0, 0x00, 0xfc, 0x48,
++ 0xb0, 0x2c, 0xfc, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x3f, 0x01, 0x1f, 0x7f, 0x04,
++ 0x1f, 0x6f, 0x03, 0x0d, 0x31, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xf0, 0xfc, 0xc0,
++ 0x30, 0xec, 0xc0, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x22, 0x3f, 0x22, 0x23,
++ 0x20, 0x2f, 0x28, 0x28, 0x48, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0xc0, 0xfc, 0x20, 0xfc, 0x20, 0xe0,
++ 0x80, 0xf8, 0x88, 0x88, 0xb0, 0x80, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x01, 0x1f, 0x12, 0x11, 0x16,
++ 0x1f, 0x10, 0x1e, 0x10, 0x1e, 0x70, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x50, 0x90, 0x50,
++ 0xf0, 0x98, 0xe0, 0x80, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x01, 0x3f, 0x04, 0x3f, 0x21,
++ 0x7f, 0x01, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x40, 0xfc, 0x08,
++ 0xf8, 0x00, 0xf0, 0x10, 0x10, 0x60, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0f, 0x19, 0x66, 0x14, 0x1f,
++ 0x60, 0x1f, 0x01, 0x09, 0x31, 0x03, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x78, 0x90, 0x60, 0x30, 0xcc,
++ 0x00, 0xf0, 0x00, 0x30, 0x08, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x01, 0x3f, 0x28, 0x4f, 0x10,
++ 0x13, 0x32, 0x53, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xfc, 0x08, 0xf8, 0x80,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x7f, 0x1f, 0x11, 0x1f, 0x1f,
++ 0x01, 0x3f, 0x00, 0x7f, 0x04, 0x02, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0xf0, 0x10, 0xf0, 0xf0,
++ 0x10, 0xf8, 0x20, 0xfc, 0x20, 0x60, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x01, 0x1f, 0x12, 0x12, 0x1f,
++ 0x12, 0x12, 0x1f, 0x20, 0x2a, 0x51, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xf8, 0x40, 0x40, 0xf0,
++ 0x40, 0x40, 0xf8, 0x00, 0x48, 0x24, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x02, 0x17, 0x29, 0x7e, 0x04,
++ 0x19, 0x6e, 0x01, 0x0e, 0x01, 0x1e, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x80, 0xd0, 0x28, 0xfc, 0x40,
++ 0xb0, 0x4c, 0x90, 0x60, 0x80, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x00, 0x7f, 0x0a, 0x0c, 0x29,
++ 0x2e, 0x29, 0x29, 0x2d, 0x3a, 0x64, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x20, 0xfc, 0x20, 0x48, 0xfc,
++ 0x00, 0x50, 0x50, 0x54, 0x54, 0x0c, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x08, 0x09, 0x7e, 0x08,
++ 0x0f, 0x13, 0x12, 0x22, 0x42, 0x0d, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xc0, 0x80, 0xfc, 0x80, 0xf8,
++ 0x20, 0xfc, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0a, 0x7f, 0x0a, 0x33, 0x3f,
++ 0x21, 0x5f, 0x11, 0x11, 0x11, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xa0, 0xfc, 0xa4, 0x9c, 0xfc,
++ 0x08, 0xf0, 0x10, 0x10, 0x60, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x14, 0x1f, 0x10, 0x3f, 0x4f, 0x08,
++ 0x0f, 0x1f, 0x1f, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x08, 0xe8, 0x88, 0x88,
++ 0x88, 0xc8, 0xc8, 0x48, 0xc8, 0x30, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3e, 0x0a, 0x36, 0x0b, 0x32,
++ 0x0d, 0x76, 0x01, 0x0e, 0x01, 0x1e, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x28, 0xd8, 0x28, 0xc8,
++ 0x60, 0x5c, 0xa0, 0x40, 0x80, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x08, 0x7f, 0x08, 0x3e, 0x2a,
++ 0x2a, 0x2e, 0x1c, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x20, 0xfc, 0x20, 0xf8, 0xa8,
++ 0xa8, 0xb8, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x12, 0x09, 0x3f, 0x28,
++ 0x4e, 0x12, 0x2a, 0x05, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0xfc, 0x70, 0x90, 0x20, 0x40, 0xfc, 0x28,
++ 0xf8, 0xa0, 0xa0, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x1f, 0x01, 0x7f, 0x08, 0x3e,
++ 0x0e, 0x71, 0x3f, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x00, 0xfc, 0x20, 0xf8,
++ 0x20, 0xfc, 0xf8, 0x80, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x7f, 0x1f, 0x12, 0x1f, 0x0f,
++ 0x0f, 0x08, 0x0f, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0xf0, 0x90, 0xf0, 0xe0,
++ 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x00, 0x7f, 0x1f, 0x3e,
++ 0x08, 0x3e, 0x7f, 0x08, 0x04, 0x00, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xfc, 0xf0, 0xf8,
++ 0x88, 0xf8, 0xfc, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x14, 0x14, 0x23, 0x1a, 0x35,
++ 0x55, 0x0d, 0x7f, 0x05, 0x19, 0x61, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xb0, 0x48, 0xc0, 0x68, 0xd4,
++ 0x54, 0x30, 0xfc, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x09, 0x09, 0x09, 0x3f, 0x08,
++ 0x08, 0x2e, 0x28, 0x2e, 0x39, 0x60, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x00, 0xf0, 0x00, 0xf8, 0x20,
++ 0xa0, 0xb8, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x08, 0x69, 0x13, 0x14, 0x2b,
++ 0x4a, 0x1b, 0x2b, 0x4a, 0x0b, 0x32, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xf8, 0xa4, 0xf8,
++ 0xa8, 0x38, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x13, 0x0a, 0x4a, 0x23, 0x23,
++ 0x10, 0x17, 0x25, 0x25, 0x4f, 0x40, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x90, 0xd0, 0x30, 0xf0,
++ 0x00, 0xf8, 0x28, 0x28, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x7e, 0x10, 0x1f, 0x14,
++ 0x27, 0x58, 0x0b, 0x10, 0x27, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xa0, 0xa0, 0xb8, 0xa0,
++ 0xb8, 0xa0, 0xb8, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x7f, 0x09, 0x06, 0x1f, 0x7f, 0x19, 0x15,
++ 0x1f, 0x0f, 0x08, 0x0f, 0x08, 0x0f, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xc0, 0xf0, 0xfc, 0x30, 0x50,
++ 0xf0, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x7f, 0x1f, 0x1f, 0x11, 0x1f,
++ 0x7f, 0x1f, 0x1f, 0x11, 0x1f, 0x7f, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0xf0, 0xf0, 0x10, 0xf0,
++ 0xfc, 0xf0, 0xf0, 0x10, 0xf0, 0xfc, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x0f, 0x12, 0x3f, 0x55, 0x1f,
++ 0x15, 0x1f, 0x15, 0x2a, 0x2a, 0x40, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x08, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x48, 0xc8, 0x88, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x12, 0x1f, 0x3f, 0x20,
++ 0x7f, 0x1e, 0x72, 0x0c, 0x18, 0x60, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x90, 0xf0, 0xfc, 0x08,
++ 0xf8, 0x98, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x1f, 0x01, 0x7f, 0x1f, 0x15,
++ 0x1d, 0x1f, 0x11, 0x1d, 0x25, 0x45, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x10, 0xfc, 0xf0, 0x50,
++ 0x70, 0xf0, 0x10, 0x70, 0x50, 0x50, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x3f, 0x09, 0x0d, 0x13, 0x7f,
++ 0x1f, 0x17, 0x14, 0x17, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x20, 0x30, 0x48, 0xfc,
++ 0xf0, 0xd0, 0x50, 0xd0, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x0c, 0x10, 0x3d, 0x24, 0x3c,
++ 0x21, 0x3c, 0x25, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x60, 0x20, 0xfc, 0x88, 0x50,
++ 0xfc, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x1f, 0x15, 0x7f, 0x1f, 0x1f,
++ 0x15, 0x1f, 0x7f, 0x1a, 0x06, 0x39, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x20, 0x20, 0xfc, 0x48, 0xc8,
++ 0x28, 0x30, 0x90, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x22, 0x2a, 0x4a, 0x1f, 0x10,
++ 0x2f, 0x60, 0x27, 0x25, 0x29, 0x30, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x20, 0xa0, 0xa0, 0xfc, 0x48,
++ 0xa8, 0x30, 0x10, 0xb0, 0x48, 0x84, 0x00, 0x00,
++ 0x04, 0x04, 0x7f, 0x04, 0x3c, 0x25, 0x24, 0x3c,
++ 0x21, 0x3c, 0x65, 0x24, 0x3c, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x60, 0x20, 0xfc, 0x88, 0x50,
++ 0xfc, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x14, 0x08, 0x7f, 0x0a,
++ 0x0c, 0x08, 0x08, 0x08, 0x08, 0x19, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0x20, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x58, 0x84, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x01, 0x3f, 0x2d, 0x4d,
++ 0x1f, 0x11, 0x1f, 0x11, 0x1f, 0x10, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x00, 0xfc, 0x68, 0x60,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x06, 0x39, 0x08, 0x7f, 0x08,
++ 0x1d, 0x1a, 0x29, 0x48, 0x08, 0x0b, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x40, 0xfc, 0xa4,
++ 0x5c, 0x70, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x0e, 0x78, 0x08, 0x3f, 0x08,
++ 0x7e, 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x50, 0x50, 0xf8, 0x50, 0xfc, 0x00,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x7f, 0x02, 0x7d, 0x15, 0x2d,
++ 0x49, 0x0f, 0x08, 0x0f, 0x10, 0x20, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0x88, 0x70, 0x50, 0xf8,
++ 0x24, 0xe0, 0x20, 0xe0, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x00, 0x2f, 0x28, 0x3f, 0x0d,
++ 0x7f, 0x2c, 0x2f, 0x55, 0x17, 0x24, 0x00, 0x00,
++ 0x40, 0xfc, 0x50, 0x48, 0xfc, 0x40, 0xc8, 0x48,
++ 0xa8, 0xb0, 0x90, 0x34, 0xcc, 0x84, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x3f, 0x1f, 0x08, 0x0f, 0x3f,
++ 0x2f, 0x42, 0x0f, 0x1f, 0x01, 0x3f, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xf0, 0x20, 0xe0, 0xfc,
++ 0xe8, 0x40, 0xf0, 0xf0, 0x00, 0xf8, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x0e, 0x73, 0x55, 0x29, 0x19,
++ 0x6d, 0x14, 0x6c, 0x14, 0x65, 0x1a, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0xa0, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x0b, 0x7c, 0x08, 0x3e, 0x08,
++ 0x7e, 0x1d, 0x1b, 0x2b, 0x49, 0x09, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0x20, 0xfc, 0x34, 0xfc, 0x04, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x3e, 0x7f, 0x2d, 0x5f, 0x0e,
++ 0x39, 0x1f, 0x7f, 0x02, 0x07, 0x38, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0x50, 0xd0, 0x74, 0x94,
++ 0x0c, 0xf0, 0xfc, 0x20, 0xf0, 0x08, 0x00, 0x00,
++ 0x04, 0x7f, 0x15, 0x6b, 0x2a, 0x13, 0x2a, 0x7f,
++ 0x01, 0x7f, 0x03, 0x0d, 0x71, 0x01, 0x00, 0x00,
++ 0x40, 0xfc, 0x50, 0xe8, 0xa8, 0x90, 0xa8, 0xfc,
++ 0x00, 0xfc, 0x80, 0x60, 0x1c, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x06, 0x38, 0x09, 0x7e, 0x1d, 0x6a,
++ 0x0e, 0x19, 0x65, 0x07, 0x39, 0x03, 0x00, 0x00,
++ 0x40, 0xfc, 0xc0, 0xf8, 0x28, 0x48, 0x88, 0xb0,
++ 0x40, 0x30, 0x4c, 0xc0, 0x38, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3c, 0x00, 0x7e, 0x00, 0x3c,
++ 0x3c, 0x01, 0x3f, 0x25, 0x3d, 0x21, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0xfc, 0x44, 0x64, 0x94, 0xf4, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x11, 0x15, 0x65, 0x19, 0x15,
++ 0x7e, 0x09, 0x2d, 0x2b, 0x4b, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0x68, 0x98, 0xf8,
++ 0x00, 0xf8, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x06, 0x38, 0x09, 0x7e, 0x08,
++ 0x1c, 0x1a, 0x2a, 0x49, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0x70, 0xa0, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0x00, 0xa8, 0x54, 0x54, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x09, 0x28, 0x2e, 0x28, 0x7f,
++ 0x28, 0x2a, 0x5a, 0x04, 0x18, 0x63, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xfc, 0x20, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x09, 0x7e, 0x08, 0x3f, 0x2a,
++ 0x3e, 0x1c, 0x1a, 0x2a, 0x48, 0x09, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0x98, 0xf8, 0x88,
++ 0xf8, 0xf8, 0x88, 0xf8, 0x58, 0x84, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3e, 0x22, 0x3e, 0x3e, 0x24,
++ 0x27, 0x2f, 0x37, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x88, 0xf8, 0xf8, 0x88,
++ 0xe8, 0xc8, 0xc8, 0x88, 0xe8, 0x18, 0x00, 0x00,
++ 0x04, 0x7f, 0x05, 0x01, 0x1f, 0x11, 0x1e, 0x17,
++ 0x14, 0x17, 0x17, 0x2f, 0x29, 0x5f, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0xfc, 0xc8, 0xf8, 0xf0,
++ 0x90, 0xf0, 0xf0, 0xf8, 0x48, 0xfc, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x3e, 0x14, 0x7e, 0x00, 0x3c,
++ 0x24, 0x3c, 0x24, 0x3c, 0x24, 0x2c, 0x00, 0x00,
++ 0x40, 0xfc, 0xc0, 0xfc, 0xf8, 0x08, 0xf8, 0x80,
++ 0xf8, 0xf8, 0x80, 0xfc, 0x84, 0x7c, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x0f, 0x12, 0x3f, 0x55, 0x1f,
++ 0x15, 0x1f, 0x16, 0x2b, 0x2b, 0x40, 0x00, 0x00,
++ 0x40, 0xfc, 0xc8, 0x48, 0x50, 0xfc, 0x20, 0xf8,
++ 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x7f, 0x0c, 0x0a, 0x72, 0x14, 0x0d, 0x13,
++ 0x7f, 0x0d, 0x2a, 0x2a, 0x48, 0x0b, 0x00, 0x00,
++ 0x40, 0xfc, 0xf8, 0x88, 0xf8, 0xf8, 0xfc, 0x54,
++ 0xfc, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x04, 0x7f, 0x04, 0x3f, 0x24, 0x3f, 0x14, 0x74,
++ 0x1b, 0x7e, 0x2c, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x90, 0xfc,
++ 0x90, 0xf8, 0xf8, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x11, 0x11, 0x11, 0x11,
++ 0x1f, 0x11, 0x11, 0x21, 0x21, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x08, 0x10, 0x1c, 0xe0,
++ 0x00, 0x00, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x17,
++ 0x14, 0x14, 0x24, 0x24, 0x40, 0x00, 0x00, 0x00,
++ 0x78, 0x80, 0x80, 0xfc, 0x80, 0xfc, 0x80, 0xf8,
++ 0x88, 0x88, 0x88, 0xb0, 0x80, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x1f, 0x11, 0x1f, 0x10, 0x10,
++ 0x1f, 0x12, 0x11, 0x20, 0x23, 0x5c, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0xe8, 0x08, 0xf8, 0x80,
++ 0xfc, 0x20, 0x40, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x3d, 0x01, 0x7f, 0x11,
++ 0x1d, 0x25, 0x05, 0x0a, 0x0a, 0x35, 0x00, 0x00,
++ 0x40, 0x78, 0x40, 0xfc, 0x48, 0x70, 0xc4, 0x3c,
++ 0x50, 0x50, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x08, 0x0f, 0x3f, 0x2f, 0x39, 0x27, 0x2a, 0x2f,
++ 0x3a, 0x2f, 0x2f, 0x2a, 0x4f, 0x08, 0x00, 0x00,
++ 0x00, 0x78, 0xa0, 0x20, 0x20, 0xfc, 0x40, 0xc0,
++ 0x78, 0x48, 0x08, 0x08, 0x88, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x03, 0x3c, 0x04, 0x3f, 0x24,
++ 0x24, 0x3f, 0x25, 0x04, 0x07, 0x78, 0x00, 0x00,
++ 0x00, 0xe0, 0xa0, 0x20, 0x20, 0x20, 0xa0, 0xa0,
++ 0xa0, 0xa0, 0x14, 0x94, 0x4c, 0x44, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x7c, 0x55, 0x55, 0x55, 0x7d,
++ 0x55, 0x18, 0x14, 0x1e, 0x62, 0x01, 0x00, 0x00,
++ 0x08, 0xe8, 0x28, 0x28, 0xe8, 0x08, 0x08, 0xe8,
++ 0x28, 0x28, 0x28, 0x28, 0x28, 0xc8, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2b, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x71, 0x00, 0x00, 0x00,
++ 0x70, 0x10, 0x50, 0x50, 0x88, 0x88, 0x24, 0x20,
++ 0x20, 0x30, 0x48, 0x58, 0xe4, 0x04, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x1f, 0x02, 0x7f, 0x01, 0x1f,
++ 0x11, 0x11, 0x1f, 0x11, 0x01, 0x7e, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0xf0,
++ 0x10, 0x10, 0xf0, 0x10, 0xf8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x71, 0x00, 0x00, 0x00,
++ 0x08, 0x48, 0x28, 0x28, 0x88, 0x48, 0x48, 0x0c,
++ 0x38, 0xc8, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x60, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xd8,
++ 0xd8, 0x88, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0d, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x88, 0x88, 0x88, 0xfc, 0x88, 0x88, 0x88, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0e, 0x71, 0x00, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x71, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x74, 0x00, 0xfc,
++ 0x24, 0x24, 0x24, 0x38, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x3f, 0x2b, 0x2b, 0x2b, 0x3f,
++ 0x29, 0x0d, 0x0b, 0x0f, 0x73, 0x05, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0xfc, 0x34, 0xfc, 0x04, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0e, 0x70, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x88, 0xe8, 0xa8, 0xa8,
++ 0xe8, 0xb0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x3f, 0x2b, 0x2b, 0x2b, 0x3f,
++ 0x29, 0x0d, 0x0b, 0x0f, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xe8, 0xa8, 0xa8, 0xa8,
++ 0xe8, 0xa8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x7d, 0x11, 0x11, 0x11, 0x1e, 0x64, 0x01,
++ 0x1f, 0x11, 0x1f, 0x11, 0x01, 0x7e, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x90, 0x54, 0x54, 0x0c, 0x00,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf8, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x04, 0x7f, 0x05, 0x19, 0x6f,
++ 0x09, 0x09, 0x0f, 0x09, 0x01, 0x3e, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0x40, 0x30, 0xec,
++ 0x20, 0x20, 0xe0, 0x20, 0xf0, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x3e, 0x2a, 0x2a, 0x2b, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x03, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0x48, 0x94, 0x54, 0x50,
++ 0x60, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2b, 0x2b, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x72, 0x00, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xf8, 0xa0, 0x20, 0xfc, 0x70,
++ 0x70, 0xa8, 0xa8, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0b, 0x0e, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x24, 0x28, 0xfc, 0x10, 0x60,
++ 0x4c, 0xf0, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7c, 0x55, 0x55, 0x57, 0x7c,
++ 0x52, 0x1a, 0x15, 0x1d, 0x62, 0x04, 0x00, 0x00,
++ 0x04, 0x88, 0xf0, 0x90, 0x10, 0x5c, 0xd0, 0xd0,
++ 0xd0, 0xd0, 0x3c, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0e, 0x71, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0xe8, 0x60, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0b, 0x0e, 0x70, 0x03, 0x00, 0x00,
++ 0x00, 0x38, 0xa8, 0xa8, 0xa8, 0xb8, 0x80, 0xf8,
++ 0xa8, 0x28, 0xfc, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x08, 0x0f, 0x12, 0x3f,
++ 0x52, 0x1f, 0x12, 0x03, 0x7c, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x00, 0xf8, 0x08, 0xc8,
++ 0x48, 0xc8, 0x48, 0xe8, 0x28, 0x70, 0x00, 0x00,
++ 0x00, 0x1f, 0x17, 0x10, 0x1f, 0x14, 0x27, 0x79,
++ 0x0f, 0x09, 0x0f, 0x09, 0x01, 0x3e, 0x00, 0x00,
++ 0x00, 0xf8, 0xf0, 0x00, 0xfc, 0x90, 0x60, 0x1c,
++ 0xe0, 0x20, 0xe0, 0x20, 0xf0, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0e, 0x71, 0x02, 0x00, 0x00,
++ 0x70, 0x10, 0x50, 0x48, 0x88, 0xfc, 0x88, 0x88,
++ 0xf8, 0x50, 0x50, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x00, 0x7d, 0x08, 0x3d, 0x15, 0x08, 0x1e, 0x61,
++ 0x1f, 0x11, 0x1f, 0x11, 0x01, 0x7e, 0x00, 0x00,
++ 0x0c, 0xf0, 0x20, 0x3c, 0x20, 0xfc, 0x00, 0xfc,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x28, 0x0d, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0xa8, 0xa4, 0x04, 0xf8, 0x10,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3f,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x72, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0xfc, 0x20, 0xfc,
++ 0x20, 0xb0, 0xa8, 0x24, 0x24, 0x60, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x20, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0x98, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x54, 0x57, 0x54, 0x7d,
++ 0x51, 0x1a, 0x14, 0x1c, 0x60, 0x00, 0x00, 0x00,
++ 0x48, 0x88, 0xa8, 0xa8, 0xa8, 0xe8, 0xa8, 0xa8,
++ 0xe8, 0xe8, 0xa8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x29, 0x0e, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x40, 0xfc,
++ 0x54, 0x54, 0x94, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x56, 0x54, 0x54, 0x7d,
++ 0x57, 0x18, 0x14, 0x1e, 0x61, 0x02, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x80, 0xf8, 0xe8, 0x68,
++ 0x68, 0xf8, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x2a, 0x2b, 0x3e,
++ 0x29, 0x0e, 0x0a, 0x0e, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0xa8, 0xa4, 0x24, 0xf8, 0x50, 0xfc, 0x88,
++ 0xf4, 0x90, 0x90, 0xb4, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0xf8,
++ 0xa8, 0xa8, 0xf8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7f, 0x54, 0x55, 0x55, 0x7d,
++ 0x52, 0x1a, 0x14, 0x1c, 0x64, 0x00, 0x00, 0x00,
++ 0x84, 0x88, 0xb0, 0xe0, 0xa0, 0xbc, 0xe8, 0xe8,
++ 0xa8, 0xa8, 0xc8, 0xc8, 0x88, 0x88, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x55, 0x55, 0x55, 0x7d,
++ 0x55, 0x19, 0x15, 0x1e, 0x62, 0x04, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8, 0x48,
++ 0xe8, 0xa8, 0xe8, 0xa8, 0x08, 0x18, 0x00, 0x00,
++ 0x02, 0x3e, 0x02, 0x1e, 0x03, 0x7e, 0x04, 0x09,
++ 0x1f, 0x11, 0x1f, 0x11, 0x01, 0x7e, 0x00, 0x00,
++ 0x40, 0x7c, 0x40, 0x78, 0x40, 0x7c, 0x40, 0x40,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf8, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3f,
++ 0x29, 0x0d, 0x0b, 0x0f, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x90, 0xf0, 0x00, 0xf8,
++ 0x48, 0xf8, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x3f, 0x2b, 0x2b, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x24, 0xfc, 0x24, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2b, 0x3f,
++ 0x29, 0x0d, 0x0b, 0x0f, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0xf0, 0xd0, 0xd0, 0xf8, 0x08,
++ 0xe8, 0xa8, 0xa8, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x54, 0x57, 0x54, 0x7d,
++ 0x51, 0x1a, 0x16, 0x1c, 0x60, 0x00, 0x00, 0x00,
++ 0x48, 0xa8, 0x98, 0x98, 0x88, 0xe8, 0x98, 0x98,
++ 0xcc, 0xb8, 0xa8, 0x88, 0x88, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x29, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x40, 0xfc,
++ 0xa4, 0xb4, 0xcc, 0xfc, 0x84, 0x18, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x57, 0x55, 0x55, 0x7f,
++ 0x52, 0x1a, 0x17, 0x1e, 0x60, 0x01, 0x00, 0x00,
++ 0x00, 0x38, 0x28, 0x28, 0xe8, 0x38, 0x28, 0xa8,
++ 0xb8, 0xa8, 0xc8, 0x48, 0x88, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x29, 0x0c, 0x0a, 0x0e, 0x73, 0x00, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x00,
++ 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x02, 0x3f, 0x02, 0x04, 0x08, 0x3e,
++ 0x2a, 0x2a, 0x3e, 0x2a, 0x0f, 0x71, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe4, 0x14, 0x0c, 0x24, 0xf8,
++ 0xa8, 0xa8, 0xf8, 0xa8, 0x3c, 0xc4, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x0c, 0x0b, 0x0e, 0x70, 0x07, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x40, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x55, 0x55, 0x55, 0x7d,
++ 0x51, 0x19, 0x17, 0x1f, 0x65, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0x68, 0x68, 0xf8, 0x68, 0x68, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x55, 0x56, 0x57, 0x7e,
++ 0x53, 0x1a, 0x17, 0x1e, 0x62, 0x02, 0x00, 0x00,
++ 0xe0, 0x20, 0x50, 0x90, 0xf8, 0x04, 0xa8, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7d, 0x57, 0x55, 0x55, 0x7d,
++ 0x51, 0x19, 0x15, 0x1e, 0x62, 0x05, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x3c, 0xc0, 0x7c, 0x08, 0xd0,
++ 0x50, 0x7c, 0x50, 0x50, 0x50, 0xb0, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3e, 0x2a, 0x2a, 0x2a, 0x3f,
++ 0x28, 0x0d, 0x0a, 0x0e, 0x71, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x00, 0xfc,
++ 0x80, 0xfc, 0x54, 0x94, 0x24, 0x58, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x54, 0x55, 0x56, 0x7f,
++ 0x52, 0x1b, 0x16, 0x1c, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xb8, 0xa0, 0xb8, 0xa8, 0xb8,
++ 0xa8, 0xb8, 0xa8, 0xa0, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x2a, 0x2c, 0x49, 0x14, 0x22, 0x3f, 0x21,
++ 0x5f, 0x11, 0x1f, 0x11, 0x01, 0x7e, 0x00, 0x00,
++ 0x20, 0xa8, 0xb0, 0x30, 0x48, 0x88, 0xfc, 0x08,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf8, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x09, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0d, 0x0a, 0x0f, 0x70, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x20, 0xfc, 0x00, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x13, 0x7e, 0x56, 0x57, 0x56, 0x7f,
++ 0x52, 0x1b, 0x16, 0x1e, 0x63, 0x0c, 0x00, 0x00,
++ 0x00, 0x38, 0xa8, 0xa8, 0xb0, 0xb0, 0xa8, 0xa8,
++ 0x64, 0xa4, 0xb8, 0xe0, 0x60, 0x20, 0x00, 0x00,
++ 0x08, 0x3e, 0x7f, 0x08, 0x7f, 0x0e, 0x12, 0x67,
++ 0x1f, 0x11, 0x1f, 0x11, 0x01, 0x7e, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0x90, 0x50, 0x20, 0x50, 0x8c,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf8, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2b, 0x2a, 0x2a, 0x3f,
++ 0x28, 0x0c, 0x0a, 0x0e, 0x71, 0x00, 0x00, 0x00,
++ 0x18, 0xe8, 0xa8, 0x70, 0xfc, 0x70, 0xa8, 0x24,
++ 0x40, 0x28, 0xc4, 0xd4, 0x50, 0x30, 0x00, 0x00,
++ 0x01, 0x03, 0x1e, 0x01, 0x07, 0x78, 0x03, 0x08,
++ 0x3e, 0x2a, 0x3e, 0x2a, 0x0f, 0x71, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x80, 0x60, 0x9c, 0x80, 0x60,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0x3c, 0xc4, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x2b, 0x0c, 0x0b, 0x0e, 0x70, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xa8, 0x54, 0x20, 0xd8,
++ 0x74, 0x20, 0xfc, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x09, 0x08, 0x09, 0x3f, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x29, 0x0d, 0x0b, 0x0f, 0x71, 0x00, 0x00, 0x00,
++ 0x24, 0xa8, 0xfc, 0x08, 0xf8, 0x88, 0xf8, 0x20,
++ 0xfc, 0x24, 0x24, 0x24, 0x38, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x08, 0x3f, 0x2a, 0x2a,
++ 0x3e, 0x28, 0x0a, 0x0f, 0x71, 0x00, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x04, 0x3f, 0x04, 0x7f, 0x2b, 0x2a, 0x56, 0x21,
++ 0x1f, 0x11, 0x1f, 0x11, 0x01, 0x7e, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xc8, 0x28, 0x90, 0x68, 0x84,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf8, 0x04, 0x00, 0x00,
++ 0x08, 0x3e, 0x09, 0x7f, 0x14, 0x7f, 0x3e, 0x09,
++ 0x1f, 0x11, 0x1f, 0x11, 0x01, 0x3e, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0xd0, 0x74, 0x94, 0x0c,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3f, 0x2b, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0c, 0x0a, 0x0e, 0x73, 0x00, 0x00, 0x00,
++ 0x20, 0x24, 0xa8, 0xfc, 0x08, 0xf8, 0x88, 0xf8,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x7f, 0x0f, 0x08, 0x0f, 0x0f, 0x02, 0x7f,
++ 0x09, 0x1f, 0x69, 0x0f, 0x01, 0x3e, 0x00, 0x00,
++ 0x40, 0xfc, 0xe0, 0x20, 0xe0, 0xe0, 0x00, 0xfc,
++ 0x20, 0xf0, 0x2c, 0xe0, 0xf0, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x3e, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0c, 0x0b, 0x0e, 0x70, 0x03, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x20, 0xfc, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0d, 0x0a, 0x0e, 0x70, 0x03, 0x00, 0x00,
++ 0x20, 0xf8, 0xa8, 0xfc, 0xa8, 0xf8, 0xf8, 0xa8,
++ 0xf8, 0xfc, 0x50, 0xf0, 0x78, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x29, 0x0d, 0x0a, 0x0e, 0x70, 0x03, 0x00, 0x00,
++ 0x20, 0xf8, 0x20, 0xfc, 0x88, 0xdc, 0x88, 0xfc,
++ 0x00, 0xfc, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x01, 0x1f, 0x11, 0x1f, 0x11, 0x01, 0x3e, 0x08,
++ 0x3e, 0x2a, 0x3e, 0x2a, 0x0f, 0x71, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf8, 0x08, 0x20,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0x3c, 0xc4, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2b, 0x2a, 0x2a, 0x3f,
++ 0x28, 0x0c, 0x0a, 0x0f, 0x70, 0x00, 0x00, 0x00,
++ 0x18, 0xe8, 0xa8, 0x70, 0xfc, 0x70, 0xa8, 0x24,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x11, 0x11, 0x12, 0x7c, 0x57, 0x56, 0x56, 0x7f,
++ 0x52, 0x1a, 0x17, 0x1c, 0x64, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x54, 0x94, 0xec, 0xc8, 0xd8, 0xdc,
++ 0xe8, 0xc8, 0xfc, 0x48, 0x48, 0xc8, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x56, 0x57, 0x55, 0x7f,
++ 0x53, 0x1f, 0x16, 0x1f, 0x62, 0x00, 0x00, 0x00,
++ 0x10, 0xd0, 0x50, 0xd0, 0x7c, 0xf4, 0x18, 0xd0,
++ 0x50, 0x50, 0xe8, 0xe8, 0x44, 0xc4, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7f, 0x55, 0x55, 0x55, 0x7d,
++ 0x51, 0x19, 0x16, 0x1e, 0x64, 0x00, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xfc, 0x54, 0x9c, 0x78, 0xfc,
++ 0x70, 0x70, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x13, 0x11, 0x7d, 0x55, 0x55, 0x57, 0x7c,
++ 0x51, 0x18, 0x14, 0x1c, 0x63, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x5c, 0xd4, 0xd4, 0x54, 0xdc, 0x58,
++ 0xe0, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x09, 0x08, 0x09, 0x3f, 0x2a, 0x2a, 0x2a, 0x3e,
++ 0x29, 0x0d, 0x0b, 0x0f, 0x71, 0x01, 0x00, 0x00,
++ 0x24, 0xa8, 0xfc, 0x08, 0xf0, 0x90, 0xf0, 0x00,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2b, 0x2a, 0x2a, 0x3f,
++ 0x28, 0x0c, 0x0b, 0x0e, 0x71, 0x02, 0x00, 0x00,
++ 0x50, 0xfc, 0x50, 0x20, 0xfc, 0x50, 0xa8, 0xfc,
++ 0x20, 0xa8, 0xfc, 0x88, 0x08, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x3e, 0x2a, 0x2b, 0x2a, 0x3e,
++ 0x29, 0x0c, 0x0b, 0x0e, 0x70, 0x01, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x20, 0xfc, 0x50, 0x88,
++ 0x54, 0x50, 0xfc, 0x50, 0x90, 0x10, 0x00, 0x00,
++ 0x10, 0x11, 0x12, 0x7c, 0x55, 0x56, 0x55, 0x7d,
++ 0x52, 0x1b, 0x14, 0x1c, 0x63, 0x00, 0x00, 0x00,
++ 0x90, 0xf4, 0xf8, 0x90, 0x68, 0x44, 0xfc, 0x28,
++ 0x20, 0xfc, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3e, 0x2b, 0x2a, 0x2a, 0x3e,
++ 0x28, 0x0d, 0x0a, 0x0e, 0x70, 0x03, 0x00, 0x00,
++ 0x50, 0xfc, 0x50, 0xfc, 0xa0, 0xf8, 0xf8, 0xa0,
++ 0xfc, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x3f, 0x2b, 0x2b, 0x2b, 0x3f,
++ 0x28, 0x0d, 0x0b, 0x0f, 0x71, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xfc, 0x28, 0xac, 0xac, 0xfc,
++ 0x20, 0xfc, 0x54, 0x54, 0x54, 0x0c, 0x00, 0x00,
++ 0x01, 0x3f, 0x0f, 0x7f, 0x07, 0x1c, 0x67, 0x07,
++ 0x08, 0x3e, 0x2a, 0x3e, 0x0e, 0x71, 0x00, 0x00,
++ 0x00, 0xf8, 0xe0, 0xfc, 0xc0, 0x70, 0xcc, 0xc0,
++ 0x20, 0xf8, 0xa8, 0xf8, 0x38, 0xc4, 0x00, 0x00,
++ 0x04, 0x07, 0x0f, 0x7f, 0x07, 0x3b, 0x1d, 0x3e,
++ 0x0b, 0x3e, 0x2a, 0x3e, 0x0e, 0x71, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0xfc, 0x90, 0xe0, 0xb0, 0x8c,
++ 0x20, 0xf8, 0xa8, 0xf8, 0x38, 0xc4, 0x00, 0x00,
++ 0x01, 0x0f, 0x09, 0x0f, 0x3f, 0x08, 0x3e, 0x3e,
++ 0x0e, 0x71, 0x1f, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xf0, 0xf8, 0x20, 0xf8, 0xf8,
++ 0x38, 0xc4, 0xf0, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x14, 0x7f, 0x1e, 0x6f, 0x0f, 0x08,
++ 0x0f, 0x3e, 0x2a, 0x3e, 0x0e, 0x71, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0xfc, 0x74, 0xec, 0xe0, 0x20,
++ 0xe0, 0xf8, 0xa8, 0xf8, 0x38, 0xc4, 0x00, 0x00,
++ 0x01, 0x7f, 0x0f, 0x0f, 0x3f, 0x2f, 0x47, 0x3a,
++ 0x0b, 0x3e, 0x2a, 0x3e, 0x0e, 0x71, 0x00, 0x00,
++ 0x00, 0xfc, 0xe0, 0xe0, 0xfc, 0xf8, 0xe0, 0x20,
++ 0xe0, 0xf8, 0xa8, 0xf8, 0x38, 0xc4, 0x00, 0x00,
++ 0x01, 0x7f, 0x0f, 0x3f, 0x2f, 0x47, 0x1c, 0x67,
++ 0x08, 0x3e, 0x2a, 0x3e, 0x0e, 0x71, 0x00, 0x00,
++ 0x00, 0xfc, 0xe0, 0xfc, 0xf8, 0xe0, 0x20, 0xe0,
++ 0x20, 0xf8, 0xa8, 0xf8, 0x38, 0xc4, 0x00, 0x00,
++ 0x13, 0x17, 0x6b, 0x17, 0x7c, 0x3b, 0x36, 0x53,
++ 0x1f, 0x11, 0x1f, 0x11, 0x01, 0x3e, 0x00, 0x00,
++ 0x90, 0xd4, 0xa8, 0x98, 0x7c, 0xb8, 0xd4, 0x94,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x10, 0x3f, 0x2d, 0x2d, 0x2d, 0x2d,
++ 0x2d, 0x2d, 0x2f, 0x3c, 0x61, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0xfc, 0x48,
++ 0x48, 0x48, 0xc8, 0x48, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x10, 0x3f, 0x2d, 0x2d, 0x2d, 0x2d,
++ 0x2d, 0x2d, 0x2f, 0x3c, 0x61, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xc8, 0x48, 0x68,
++ 0x58, 0x4c, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x12, 0x12, 0x22, 0x4f, 0x0a, 0x12, 0x1c, 0x35,
++ 0x53, 0x13, 0x14, 0x1f, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x38, 0x00, 0xc0, 0x00, 0xfc, 0x90, 0x10,
++ 0x10, 0x10, 0x90, 0x50, 0x50, 0x30, 0x00, 0x00,
++ 0x10, 0x1f, 0x22, 0x4f, 0x0a, 0x12, 0x1f, 0x30,
++ 0x57, 0x14, 0x14, 0x17, 0x14, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x80, 0x80, 0xbc, 0xd0, 0x10,
++ 0x90, 0x90, 0x90, 0x90, 0x90, 0x30, 0x00, 0x00,
++ 0x11, 0x17, 0x22, 0x4f, 0x0f, 0x14, 0x17, 0x3f,
++ 0x51, 0x17, 0x15, 0x15, 0x15, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xe0, 0xc0, 0x7c, 0xc8, 0xe8,
++ 0x08, 0xc8, 0x48, 0x48, 0xc8, 0x18, 0x00, 0x00,
++ 0x10, 0x1e, 0x2a, 0x4e, 0x1e, 0x1a, 0x2e, 0x27,
++ 0x6c, 0x37, 0x27, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xe0, 0xe0, 0xbc, 0xe8, 0xe8,
++ 0x88, 0xc8, 0xc8, 0x88, 0xe8, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7e, 0x04, 0x05, 0x09, 0x1e,
++ 0x2a, 0x49, 0x08, 0x08, 0x08, 0x09, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x28, 0x48, 0x90, 0x10, 0x24,
++ 0x44, 0x88, 0x08, 0x10, 0x60, 0x80, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x7f, 0x00, 0x0f, 0x08, 0x0f,
++ 0x02, 0x0c, 0x74, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0,
++ 0x88, 0x88, 0x50, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x02, 0x0c, 0x77, 0x00, 0x1f, 0x00, 0x01,
++ 0x7f, 0x03, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0x80, 0x60, 0xdc, 0x00, 0xf0, 0x20, 0x40,
++ 0xfc, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x04, 0x18, 0x6f, 0x08, 0x08,
++ 0x0f, 0x06, 0x7c, 0x04, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x60, 0x18, 0xe4, 0x20, 0x20,
++ 0xe0, 0x88, 0x50, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x0b, 0x13, 0x3d,
++ 0x55, 0x13, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7c, 0x08, 0x0a, 0x13, 0x3c,
++ 0x54, 0x12, 0x10, 0x10, 0x11, 0x10, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x09, 0x0b, 0x13, 0x3d,
++ 0x55, 0x13, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0x8c, 0xf0, 0x10, 0x10, 0x10, 0x10, 0xfc,
++ 0x10, 0x10, 0x10, 0x10, 0x7c, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x09, 0x0b, 0x13, 0x3d,
++ 0x55, 0x13, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xa8,
++ 0xa8, 0x18, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x08, 0x0a, 0x12, 0x3d,
++ 0x54, 0x12, 0x10, 0x10, 0x11, 0x12, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xfc,
++ 0x40, 0x60, 0xa0, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x08, 0x0b, 0x12, 0x3d,
++ 0x54, 0x12, 0x11, 0x10, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0x40, 0x60, 0xa0, 0x90, 0x28, 0x44, 0x90,
++ 0x20, 0x48, 0x90, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x0b, 0x13, 0x3d,
++ 0x55, 0x13, 0x11, 0x10, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10,
++ 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x08, 0x0b, 0x12, 0x3c,
++ 0x54, 0x12, 0x11, 0x12, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0x80, 0xfc, 0x20, 0x20, 0xb0,
++ 0xa8, 0xa8, 0x24, 0x24, 0x20, 0x60, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x09, 0x0b, 0x13, 0x3d,
++ 0x55, 0x13, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x40, 0x40, 0x80, 0xf8, 0x08, 0x08, 0x08, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x08, 0x0a, 0x12, 0x3d,
++ 0x54, 0x12, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x20, 0xa8, 0xa4, 0x24, 0xf8, 0x20, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x09, 0x0b, 0x13, 0x3d,
++ 0x55, 0x13, 0x11, 0x11, 0x11, 0x10, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0xe8, 0x28, 0x28,
++ 0xe8, 0x30, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x01, 0x7f, 0x0f, 0x02, 0x7f, 0x03, 0x0d, 0x73,
++ 0x01, 0x7f, 0x03, 0x7c, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0xe0, 0x80, 0xfc, 0x30, 0x00, 0x00,
++ 0x00, 0xfc, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x07, 0x04, 0x7f, 0x09, 0x08, 0x1f, 0x01,
++ 0x01, 0x7f, 0x03, 0x7c, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0xfc, 0x10, 0x90, 0xfc, 0x60,
++ 0x00, 0xfc, 0x88, 0x50, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7c, 0x08, 0x0b, 0x12, 0x3c,
++ 0x55, 0x12, 0x10, 0x10, 0x13, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x40, 0x40,
++ 0xf8, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x09, 0x0b, 0x15, 0x39,
++ 0x55, 0x15, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0xa0, 0xa8, 0xa4, 0x24, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0x50, 0x50, 0x88, 0x88, 0x04, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7c, 0x08, 0x0b, 0x12, 0x3d,
++ 0x54, 0x12, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x40, 0x40, 0xfc, 0x00, 0xfc,
++ 0x40, 0x70, 0x48, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7e, 0x08, 0x08, 0x15, 0x39,
++ 0x57, 0x15, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0xb8, 0x00, 0x00, 0x80, 0xfc, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x7f, 0x02, 0x0c, 0x74, 0x07, 0x38, 0x3f,
++ 0x24, 0x28, 0x37, 0x24, 0x27, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x50, 0x60, 0x30, 0x0c, 0xf8,
++ 0x98, 0x78, 0xc8, 0x48, 0xc8, 0x18, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x39, 0x07, 0x19, 0x63, 0x01,
++ 0x7f, 0x03, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x10, 0xfc, 0x08, 0xb0, 0x60, 0x18, 0x04, 0x00,
++ 0xfc, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x11, 0x10, 0x7c, 0x0b, 0x08, 0x13, 0x3c,
++ 0x54, 0x13, 0x12, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xfc, 0x48, 0xf8, 0x80,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x24, 0x24, 0x3f, 0x04, 0x7c, 0x25, 0x45, 0x01,
++ 0x7f, 0x03, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x00, 0x00,
++ 0xfc, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x7f, 0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x7f,
++ 0x11, 0x63, 0x0c, 0x74, 0x07, 0x18, 0x00, 0x00,
++ 0x00, 0xfc, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xfc,
++ 0x30, 0x28, 0xc4, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x13, 0x7c, 0x08, 0x0b, 0x14, 0x18,
++ 0x37, 0x54, 0x10, 0x10, 0x13, 0x10, 0x00, 0x00,
++ 0x90, 0x90, 0xf0, 0x90, 0x90, 0xf8, 0x94, 0x94,
++ 0xf0, 0x90, 0x90, 0xf0, 0x90, 0x10, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x0b, 0x12, 0x3c,
++ 0x55, 0x12, 0x14, 0x11, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x80, 0xfc,
++ 0x54, 0x54, 0x94, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x02, 0x7e, 0x02, 0x3e, 0x03, 0x7e, 0x04, 0x09,
++ 0x7f, 0x03, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x40, 0x7c, 0x40, 0x78, 0x40, 0x7c, 0x40, 0x40,
++ 0xfc, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7d, 0x09, 0x0b, 0x13, 0x1d,
++ 0x34, 0x52, 0x13, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8,
++ 0x50, 0x90, 0xfc, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x0a, 0x0b, 0x16, 0x3a,
++ 0x56, 0x17, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0xd8, 0xd8,
++ 0xd8, 0x68, 0x48, 0x48, 0x48, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x08, 0x0b, 0x14, 0x19,
++ 0x34, 0x57, 0x10, 0x11, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8,
++ 0x40, 0xfc, 0x90, 0xe0, 0x70, 0x88, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x08, 0x0b, 0x15, 0x19,
++ 0x35, 0x55, 0x10, 0x13, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x0a, 0x0b, 0x16, 0x1b,
++ 0x36, 0x56, 0x17, 0x1a, 0x12, 0x12, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0xa8, 0xa8, 0xf8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x7d, 0x09, 0x0b, 0x15, 0x39,
++ 0x55, 0x15, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0xf8, 0xc8, 0x48, 0x48, 0x78, 0x20, 0xfc,
++ 0x70, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x7f, 0x04, 0x38, 0x20, 0x3d, 0x20, 0x3d,
++ 0x21, 0x03, 0x0c, 0x74, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x88, 0xf8, 0xfc, 0x70, 0xac,
++ 0x20, 0x10, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7d, 0x09, 0x0b, 0x15, 0x38,
++ 0x57, 0x12, 0x12, 0x12, 0x17, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x50, 0x50, 0xb0, 0x10, 0xf0, 0x00,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x0b, 0x0a, 0x16, 0x3b,
++ 0x56, 0x17, 0x12, 0x14, 0x18, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x00, 0xfc, 0xa8, 0xf0, 0x8c,
++ 0x10, 0xfc, 0x90, 0x50, 0x10, 0x30, 0x00, 0x00,
++ 0x12, 0x11, 0x11, 0x7c, 0x0a, 0x09, 0x15, 0x38,
++ 0x57, 0x15, 0x11, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x78, 0x48, 0x7c, 0x44,
++ 0x58, 0x48, 0x74, 0xc4, 0xc0, 0x3c, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7e, 0x0a, 0x0a, 0x16, 0x1a,
++ 0x36, 0x52, 0x15, 0x15, 0x1a, 0x11, 0x00, 0x00,
++ 0x18, 0xe0, 0x38, 0x20, 0xfc, 0xb8, 0xe4, 0x9c,
++ 0xf0, 0xd0, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x20, 0x27, 0x21, 0x79, 0x17, 0x14, 0x2c, 0x37,
++ 0x6d, 0x29, 0x21, 0x21, 0x21, 0x26, 0x00, 0x00,
++ 0x20, 0x30, 0x48, 0xfc, 0x24, 0xf8, 0xa8, 0xa8,
++ 0xf8, 0xa8, 0x30, 0x28, 0xf4, 0x04, 0x00, 0x00,
++ 0x01, 0x7f, 0x1e, 0x12, 0x1e, 0x04, 0x3f, 0x1f,
++ 0x04, 0x7f, 0x06, 0x7c, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0x90, 0xf0, 0x40, 0xf8, 0xf0,
++ 0x40, 0xfc, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x7f, 0x08, 0x3e, 0x7f, 0x2d, 0x4b, 0x3e,
++ 0x0e, 0x31, 0x06, 0x7c, 0x07, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf0, 0x50, 0xd0, 0x70, 0x54,
++ 0x94, 0x8c, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7d, 0x0a, 0x09, 0x16, 0x18,
++ 0x35, 0x55, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xfc, 0xcc, 0x54, 0xec, 0x54, 0x64, 0x80,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x7f, 0x09, 0x09, 0x15, 0x39,
++ 0x55, 0x17, 0x10, 0x11, 0x10, 0x13, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xfc, 0x48, 0xf8, 0xf8, 0x48,
++ 0xf8, 0xfc, 0x90, 0xe0, 0x70, 0x88, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x08, 0x0b, 0x15, 0x19,
++ 0x35, 0x55, 0x10, 0x17, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0x00, 0xf0, 0x50, 0xf0,
++ 0x50, 0xf0, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x12, 0x11, 0x7d, 0x09, 0x0b, 0x15, 0x19,
++ 0x35, 0x54, 0x17, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0x20, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x12, 0x11, 0x13, 0x7e, 0x09, 0x0b, 0x15, 0x18,
++ 0x37, 0x56, 0x13, 0x12, 0x13, 0x12, 0x00, 0x00,
++ 0x48, 0x50, 0xfc, 0x08, 0xf0, 0x10, 0xf0, 0x00,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x3e, 0x21, 0x3e, 0x53, 0x1e,
++ 0x11, 0x7f, 0x06, 0x7c, 0x07, 0x38, 0x00, 0x00,
++ 0x20, 0xfc, 0x88, 0x50, 0xfc, 0x20, 0xfc, 0x20,
++ 0x20, 0xfc, 0x90, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x0a, 0x0b, 0x17, 0x1b,
++ 0x34, 0x57, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xfc, 0x48, 0x58, 0x58, 0xf8,
++ 0x80, 0xf8, 0xa8, 0xa8, 0xa8, 0xb8, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x7f, 0x0a, 0x0b, 0x16, 0x3b,
++ 0x54, 0x17, 0x12, 0x12, 0x17, 0x10, 0x00, 0x00,
++ 0x10, 0xd0, 0x90, 0xdc, 0x60, 0xc0, 0xb8, 0xc0,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x11, 0x11, 0x11, 0x7f, 0x09, 0x09, 0x17, 0x18,
++ 0x37, 0x56, 0x12, 0x13, 0x12, 0x10, 0x00, 0x00,
++ 0x00, 0x7c, 0x10, 0xe0, 0x38, 0x28, 0xf8, 0x28,
++ 0xb8, 0xa8, 0xb8, 0x98, 0xa4, 0x44, 0x00, 0x00,
++ 0x10, 0x17, 0x10, 0x7f, 0x0a, 0x0b, 0x14, 0x1b,
++ 0x36, 0x57, 0x12, 0x12, 0x14, 0x18, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0x28, 0xfc,
++ 0x28, 0xa8, 0x10, 0x34, 0xcc, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x10, 0x7f, 0x0a, 0x0e, 0x17, 0x19,
++ 0x37, 0x57, 0x13, 0x15, 0x11, 0x11, 0x00, 0x00,
++ 0x00, 0xb8, 0x28, 0xe8, 0xb8, 0xa8, 0xf8, 0x28,
++ 0xf8, 0xb0, 0x70, 0x34, 0x54, 0x8c, 0x00, 0x00,
++ 0x20, 0x27, 0x24, 0x7f, 0x14, 0x17, 0x2c, 0x37,
++ 0x6d, 0x2d, 0x25, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xbc, 0xa4, 0xbc, 0xa4, 0xbc, 0x44, 0xfc,
++ 0xf4, 0xf4, 0xf4, 0xe4, 0x5c, 0x4c, 0x00, 0x00,
++ 0x10, 0x11, 0x12, 0x7f, 0x0b, 0x0a, 0x17, 0x19,
++ 0x36, 0x55, 0x10, 0x13, 0x10, 0x10, 0x00, 0x00,
++ 0x80, 0xf8, 0xe8, 0x38, 0xb8, 0xa8, 0xfc, 0x30,
++ 0xc8, 0xf4, 0x40, 0xf8, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x04, 0x3f, 0x24, 0x24, 0x24,
++ 0x27, 0x24, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0xc8, 0x48, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x3f, 0x24, 0x27, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x7f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xc8, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x3f, 0x27, 0x08, 0x3e, 0x22,
++ 0x3e, 0x3f, 0x7f, 0x1e, 0x22, 0x4d, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0xc8, 0x40, 0x40, 0xfc,
++ 0x90, 0x90, 0x60, 0x20, 0x50, 0x8c, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x3f, 0x27, 0x14, 0x7f, 0x1c,
++ 0x3e, 0x2a, 0x3e, 0x7f, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0xc8, 0xfc, 0xa0, 0xf8,
++ 0xf8, 0xa0, 0xfc, 0xd4, 0x6c, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x11, 0x21, 0x4f, 0x08, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x38, 0xd0, 0x08, 0x04, 0xe4, 0x20, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x10, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x7d, 0x45,
++ 0x45, 0x44, 0x7c, 0x45, 0x02, 0x0c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x10,
++ 0xf0, 0xa0, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x08, 0x2a, 0x2a, 0x2a, 0x2a,
++ 0x3f, 0x5d, 0x48, 0x0e, 0x71, 0x06, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x50, 0x50, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x08, 0x09, 0x3f, 0x0a, 0x0a, 0x7f, 0x0c, 0x12,
++ 0x3e, 0x52, 0x1e, 0x12, 0x1f, 0x12, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x50, 0x50, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x0e, 0x06, 0x09, 0x10, 0x3f, 0x40, 0x3a, 0x2a,
++ 0x3a, 0x2d, 0x3d, 0x2a, 0x2a, 0x2a, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0xc8, 0xf8, 0x48, 0xf8, 0xc8,
++ 0xf8, 0x30, 0x30, 0xb4, 0xd4, 0x8c, 0x00, 0x00,
++ 0x08, 0x2a, 0x2a, 0x3e, 0x00, 0x7f, 0x00, 0x3e,
++ 0x22, 0x3e, 0x22, 0x14, 0x1e, 0x61, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x50, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x3e, 0x14, 0x7f, 0x08, 0x3e,
++ 0x2a, 0x3e, 0x2a, 0x7f, 0x22, 0x27, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x50, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x1c, 0x08, 0x3e, 0x2a, 0x3e,
++ 0x08, 0x3e, 0x08, 0x3e, 0x0c, 0x71, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x50, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x04, 0x1b, 0x12, 0x1a, 0x19, 0x12, 0x3f, 0x2f,
++ 0x48, 0x0f, 0x0f, 0x0f, 0x06, 0x78, 0x00, 0x00,
++ 0x80, 0x70, 0x90, 0xb0, 0x30, 0x90, 0xfc, 0xe8,
++ 0x20, 0xe0, 0xe0, 0xe4, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x7e, 0x49, 0x7e, 0x7d, 0x49, 0x7f, 0x4f,
++ 0x08, 0x0f, 0x0f, 0x0f, 0x06, 0x78, 0x00, 0x00,
++ 0x80, 0xfc, 0x00, 0xf8, 0xfc, 0x54, 0xfc, 0xe0,
++ 0x20, 0xe0, 0xe0, 0xe4, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x7f, 0x57, 0x7f, 0x3e, 0x22,
++ 0x3e, 0x3e, 0x22, 0x3e, 0x14, 0x63, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x30, 0x30, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x77, 0x55, 0x77, 0x14, 0x3f,
++ 0x64, 0x3f, 0x3f, 0x24, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x30, 0x30, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x10, 0x1e, 0x25, 0x49, 0x3f, 0x2b, 0x2b, 0x3f,
++ 0x2b, 0x3f, 0x23, 0x23, 0x23, 0x46, 0x00, 0x00,
++ 0x08, 0x30, 0xd0, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0x50, 0x70, 0x58, 0x78, 0x94, 0x04, 0x00, 0x00,
++ 0x08, 0x2f, 0x28, 0x2f, 0x72, 0x07, 0x18, 0x6f,
++ 0x09, 0x0f, 0x09, 0x0f, 0x10, 0x20, 0x00, 0x00,
++ 0x80, 0x98, 0xe4, 0x84, 0x7c, 0xc0, 0x80, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x30, 0x00, 0x00,
++ 0x10, 0x1e, 0x24, 0x48, 0x3e, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x3e, 0x23, 0x22, 0x23, 0x46, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0xa0, 0xa0, 0xfc, 0xa0, 0xa0,
++ 0x90, 0xf4, 0x8c, 0x0c, 0xf4, 0x04, 0x00, 0x00,
++ 0x10, 0x1e, 0x24, 0x49, 0x3e, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x3f, 0x22, 0x22, 0x22, 0x46, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0xfc, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x1e, 0x24, 0x49, 0x3e, 0x2a, 0x2a, 0x3e,
++ 0x2b, 0x3e, 0x23, 0x22, 0x23, 0x46, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xf0, 0x90, 0xf0, 0x90, 0xf0,
++ 0xfc, 0xf8, 0x68, 0xa8, 0x48, 0x30, 0x00, 0x00,
++ 0x10, 0x1f, 0x25, 0x49, 0x3e, 0x2a, 0x2b, 0x3f,
++ 0x2b, 0x3f, 0x22, 0x22, 0x23, 0x46, 0x00, 0x00,
++ 0x00, 0xf8, 0x68, 0xf8, 0x80, 0xf8, 0x48, 0xf8,
++ 0x58, 0xf8, 0x68, 0x78, 0x88, 0x30, 0x00, 0x00,
++ 0x00, 0x3e, 0x00, 0x7f, 0x00, 0x3e, 0x00, 0x3e,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x30, 0x28, 0x24,
++ 0x24, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3f, 0x00, 0x3c,
++ 0x00, 0x3c, 0x25, 0x25, 0x3d, 0x24, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xfc, 0x00, 0xf8, 0x10, 0x20,
++ 0x40, 0x80, 0x00, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3c, 0x01, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3f, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3d, 0x03, 0x3d,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xa4, 0x24, 0x28, 0x28, 0x30,
++ 0x60, 0x20, 0x24, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x00, 0x3c, 0x03, 0x3c,
++ 0x00, 0x3c, 0x24, 0x25, 0x3e, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x10, 0x90, 0x90, 0x90, 0xfc, 0x30,
++ 0x30, 0x50, 0x90, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0x68,
++ 0xa8, 0x98, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xe8, 0x28, 0x28, 0x28,
++ 0xe8, 0x28, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3f, 0x24, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0xf0, 0x90, 0x90,
++ 0xf0, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3c, 0x03, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x50, 0x48, 0x88, 0xf4, 0x04,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7f, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x27, 0x24, 0x3f, 0x24, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x10, 0xd0, 0x14, 0x0c, 0xec, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3f, 0x0f, 0x00, 0x7f, 0x0f,
++ 0x0f, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0xe0, 0x00, 0xfc, 0xe0,
++ 0xe0, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3c, 0x01, 0x3e,
++ 0x00, 0x3d, 0x24, 0x24, 0x3c, 0x25, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xa0, 0xa4, 0x24, 0xa8,
++ 0xb0, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x26, 0x3e, 0x24, 0x00, 0x00,
++ 0x40, 0x78, 0x90, 0x20, 0xfc, 0x00, 0x78, 0x48,
++ 0x48, 0x70, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x3d, 0x01, 0x7f, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x26, 0x26, 0x3c, 0x24, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3f, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0xe8, 0x28, 0xe8,
++ 0x28, 0xe8, 0x28, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3e, 0x03, 0x3c,
++ 0x00, 0x3c, 0x25, 0x26, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xf8, 0x20, 0x20, 0xfc, 0x70,
++ 0x70, 0xa8, 0x28, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x38, 0x00, 0x7e, 0x01, 0x39, 0x00, 0x39,
++ 0x06, 0x38, 0x29, 0x29, 0x3a, 0x2c, 0x00, 0x00,
++ 0xa0, 0xa0, 0xa0, 0xa8, 0xa8, 0xb0, 0xb0, 0xa8,
++ 0xa4, 0xa4, 0x20, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7c, 0x01, 0x3c, 0x03, 0x3c,
++ 0x00, 0x3d, 0x26, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x40, 0x58, 0xe0, 0x40, 0xf8, 0x40, 0xfc, 0xe0,
++ 0xe0, 0x50, 0x48, 0x44, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x02, 0x3c, 0x00, 0x3f,
++ 0x01, 0x3d, 0x25, 0x27, 0x3c, 0x24, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf8, 0xc8, 0xa8, 0xfc,
++ 0x48, 0x28, 0x28, 0xfc, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x38, 0x00, 0x7f, 0x00, 0x3a, 0x02, 0x3f,
++ 0x02, 0x3a, 0x2a, 0x2a, 0x3c, 0x28, 0x00, 0x00,
++ 0x28, 0x24, 0x24, 0xfc, 0x20, 0xa8, 0xa8, 0xe8,
++ 0xb8, 0x90, 0x94, 0xac, 0x4c, 0x84, 0x00, 0x00,
++ 0x00, 0x38, 0x02, 0x7d, 0x01, 0x3f, 0x00, 0x39,
++ 0x01, 0x3a, 0x2c, 0x28, 0x38, 0x2b, 0x00, 0x00,
++ 0x80, 0xfc, 0x90, 0x10, 0x10, 0x10, 0xfc, 0x90,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x01, 0x3e, 0x03, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xfc, 0x20, 0x20, 0xfc, 0x20,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x20, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x02, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x20, 0xb0, 0xa8, 0x24, 0x24, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3b, 0x00, 0x7d, 0x01, 0x39, 0x01, 0x39,
++ 0x02, 0x3a, 0x2c, 0x28, 0x3f, 0x28, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x50, 0x50, 0x50, 0x50, 0x50,
++ 0xe8, 0xe4, 0x44, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x25, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x00, 0xf8, 0x88, 0xf8, 0x00,
++ 0xf8, 0x10, 0xfc, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x3d, 0x01, 0x7f, 0x02, 0x3d, 0x00, 0x3f,
++ 0x00, 0x3d, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x24, 0x04, 0xf8, 0x48, 0xfc,
++ 0x48, 0xf8, 0x48, 0x40, 0x40, 0xc0, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3d, 0x00, 0x3d,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x88, 0x30, 0x40, 0xb8,
++ 0x08, 0xb8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7f, 0x02, 0x3d, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3d, 0x26, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x00, 0xfc, 0x20, 0xa0,
++ 0xb8, 0xa0, 0xa0, 0xe0, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7c, 0x03, 0x3f, 0x02, 0x3e,
++ 0x03, 0x3c, 0x25, 0x26, 0x3c, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x58, 0xd8, 0xe8,
++ 0xf8, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3c, 0x01, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x48, 0x50, 0xfc, 0x00,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x01, 0x3d, 0x01, 0x7f, 0x01, 0x3d, 0x03, 0x3c,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x20, 0x24, 0xf8, 0x20, 0x24, 0xe4, 0x3c, 0x40,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3d, 0x01, 0x7f, 0x00, 0x3c, 0x00, 0x3d,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0xdc, 0x54, 0xdc, 0x00, 0xf8, 0x00, 0xfc,
++ 0x40, 0x78, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7f, 0x00, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x27, 0x3c, 0x24, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xfc, 0x00, 0xf8, 0x88, 0xf8,
++ 0x10, 0xf8, 0x90, 0xfc, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7f, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x25, 0x26, 0x3e, 0x24, 0x00, 0x00,
++ 0x20, 0x3c, 0x20, 0xfc, 0x38, 0xe4, 0x1c, 0x00,
++ 0x7c, 0x40, 0xfc, 0x40, 0x7c, 0x40, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7f, 0x03, 0x3c, 0x00, 0x3c,
++ 0x00, 0x3c, 0x24, 0x24, 0x3f, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0xfc, 0x00, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3d, 0x01, 0x7f, 0x00, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3d, 0x24, 0x27, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8,
++ 0x48, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3b, 0x02, 0x7f, 0x02, 0x3b, 0x03, 0x3b,
++ 0x03, 0x3a, 0x2a, 0x2c, 0x3f, 0x28, 0x00, 0x00,
++ 0x00, 0xf0, 0x30, 0xd0, 0x90, 0xf0, 0xb0, 0xb0,
++ 0xf0, 0x90, 0xb4, 0xfc, 0x1c, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x7f, 0x02, 0x3b, 0x02, 0x3b,
++ 0x02, 0x3f, 0x2a, 0x2a, 0x3a, 0x2a, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x00, 0x3b, 0x02, 0x7e, 0x03, 0x3a, 0x02, 0x3b,
++ 0x02, 0x38, 0x28, 0x29, 0x3a, 0x2c, 0x00, 0x00,
++ 0xc0, 0x58, 0x48, 0x48, 0x58, 0x48, 0x48, 0xf8,
++ 0x48, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3d, 0x00, 0x7e, 0x00, 0x3c, 0x00, 0x3d,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x24, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0xe8, 0xa8, 0xe8, 0x18, 0xfc,
++ 0x08, 0xe8, 0xa8, 0xe8, 0x08, 0x18, 0x00, 0x00,
++ 0x01, 0x3f, 0x22, 0x5f, 0x0f, 0x7f, 0x04, 0x1f,
++ 0x6f, 0x07, 0x07, 0x0f, 0x08, 0x0f, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0xf8, 0xe0, 0xfc, 0x40, 0xf0,
++ 0xec, 0xc0, 0xc0, 0xe0, 0x20, 0xe0, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7f, 0x00, 0x3c, 0x00, 0x3d,
++ 0x03, 0x3d, 0x25, 0x25, 0x3f, 0x24, 0x00, 0x00,
++ 0xf0, 0x90, 0x08, 0xf4, 0x00, 0xf0, 0x90, 0x08,
++ 0xfc, 0x68, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7d, 0x02, 0x3c, 0x00, 0x3c,
++ 0x01, 0x3d, 0x25, 0x25, 0x3f, 0x24, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0xf8, 0x44, 0xf0, 0x10, 0x60,
++ 0xf8, 0x68, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3d, 0x01, 0x7f, 0x01, 0x3d, 0x00, 0x3d,
++ 0x02, 0x3c, 0x27, 0x24, 0x3c, 0x27, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xa4, 0x5c,
++ 0x40, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x00, 0x38, 0x00, 0x7e, 0x02, 0x3a, 0x04, 0x38,
++ 0x03, 0x3a, 0x2a, 0x2a, 0x3f, 0x28, 0x00, 0x00,
++ 0x40, 0x28, 0xa8, 0x90, 0x98, 0xa4, 0xd4, 0xf0,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x01, 0x7e, 0x00, 0x3d, 0x01, 0x3e,
++ 0x01, 0x3c, 0x24, 0x24, 0x3c, 0x25, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x50, 0xfc, 0x28, 0x20,
++ 0xfc, 0x20, 0x38, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7e, 0x00, 0x3f, 0x00, 0x3d,
++ 0x03, 0x3c, 0x25, 0x25, 0x3d, 0x25, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xb0, 0xe0, 0x80, 0xf8, 0x20,
++ 0xfc, 0x20, 0x28, 0x28, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3b, 0x02, 0x7e, 0x02, 0x3a, 0x02, 0x3b,
++ 0x03, 0x3b, 0x2b, 0x2a, 0x3b, 0x2a, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x90, 0xf0, 0x00, 0xf8,
++ 0x68, 0x68, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x1d, 0x0b, 0x3f, 0x2a, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x80, 0x80, 0xf8, 0x08, 0xe8, 0xf8, 0x08, 0xe8,
++ 0xe8, 0x08, 0xe8, 0xa8, 0xe8, 0x30, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x3f, 0x2a, 0x3e, 0x23, 0x47,
++ 0x3f, 0x07, 0x07, 0x0f, 0x08, 0x0f, 0x00, 0x00,
++ 0x70, 0x50, 0x94, 0xfc, 0x90, 0x60, 0x9c, 0xc0,
++ 0xf8, 0xc0, 0xc0, 0xe0, 0x20, 0xe0, 0x00, 0x00,
++ 0x00, 0x38, 0x07, 0x7d, 0x00, 0x3b, 0x02, 0x3b,
++ 0x02, 0x3a, 0x2a, 0x2a, 0x3a, 0x2a, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x10, 0xa0, 0xf8, 0x48, 0xf8,
++ 0x48, 0xe8, 0xa8, 0xe8, 0xa8, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x00, 0x7e, 0x00, 0x3c, 0x01, 0x3d,
++ 0x01, 0x3d, 0x24, 0x24, 0x3c, 0x27, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc, 0x54,
++ 0xfc, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x00, 0x3c, 0x03, 0x7e, 0x01, 0x3d, 0x01, 0x3d,
++ 0x01, 0x3c, 0x27, 0x24, 0x3d, 0x26, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf8, 0x08, 0xf8, 0x08,
++ 0xf8, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x38, 0x07, 0x7c, 0x03, 0x39, 0x07, 0x39,
++ 0x03, 0x38, 0x2f, 0x28, 0x38, 0x28, 0x00, 0x00,
++ 0xa0, 0xa0, 0xfc, 0xa0, 0xf8, 0x50, 0xfc, 0x50,
++ 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3b, 0x01, 0x7d, 0x03, 0x39, 0x01, 0x39,
++ 0x01, 0x3a, 0x2a, 0x2d, 0x39, 0x2a, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x24, 0xe4, 0x20, 0xf0, 0x10,
++ 0xfc, 0x04, 0xd4, 0x6c, 0x44, 0x18, 0x00, 0x00,
++ 0x01, 0x39, 0x06, 0x7e, 0x01, 0x3a, 0x07, 0x38,
++ 0x03, 0x39, 0x29, 0x2a, 0x3a, 0x2c, 0x00, 0x00,
++ 0x48, 0x48, 0xf4, 0xd4, 0x48, 0xd4, 0xfc, 0x50,
++ 0xfc, 0x28, 0xa8, 0x94, 0x2c, 0xc4, 0x00, 0x00,
++ 0x00, 0x3b, 0x00, 0x7c, 0x07, 0x38, 0x03, 0x38,
++ 0x03, 0x3a, 0x2b, 0x2a, 0x3a, 0x2a, 0x00, 0x00,
++ 0x00, 0xf0, 0xa0, 0x40, 0xfc, 0xc8, 0x50, 0xc0,
++ 0xf8, 0xb8, 0xf8, 0xa8, 0xe8, 0x18, 0x00, 0x00,
++ 0x01, 0x38, 0x02, 0x7d, 0x01, 0x3a, 0x05, 0x39,
++ 0x01, 0x39, 0x29, 0x28, 0x3f, 0x28, 0x00, 0x00,
++ 0xc8, 0x68, 0xb4, 0x94, 0xf8, 0x08, 0xf4, 0x10,
++ 0x10, 0xf0, 0x10, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3b, 0x02, 0x7e, 0x03, 0x39, 0x01, 0x3a,
++ 0x05, 0x39, 0x29, 0x29, 0x39, 0x29, 0x00, 0x00,
++ 0x88, 0xfc, 0xa8, 0xa8, 0xfc, 0xd8, 0xac, 0x4c,
++ 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x01, 0x39, 0x07, 0x79, 0x07, 0x39, 0x02, 0x3c,
++ 0x01, 0x39, 0x29, 0x29, 0x39, 0x29, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x10, 0xfc, 0x10, 0xa8, 0x44,
++ 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x7f, 0x02, 0x3b, 0x01, 0x39,
++ 0x01, 0x39, 0x29, 0x2f, 0x38, 0x28, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x38, 0x03, 0x7f, 0x02, 0x3b, 0x02, 0x3b,
++ 0x02, 0x3a, 0x2a, 0x2a, 0x3c, 0x28, 0x00, 0x00,
++ 0x40, 0xf8, 0x20, 0xfc, 0x54, 0x8c, 0x70, 0xfc,
++ 0x70, 0x70, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x39, 0x01, 0x7d, 0x00, 0x3b, 0x02, 0x3b,
++ 0x00, 0x3f, 0x28, 0x29, 0x3e, 0x28, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xb8, 0xa8, 0xb8,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3f, 0x3e, 0x33, 0x5e, 0x0f,
++ 0x7f, 0x07, 0x07, 0x0f, 0x08, 0x0f, 0x00, 0x00,
++ 0x20, 0xf8, 0x50, 0xfc, 0x20, 0xfc, 0x20, 0xe0,
++ 0xfc, 0xc0, 0xc0, 0xe0, 0x20, 0xe0, 0x00, 0x00,
++ 0x00, 0x3b, 0x02, 0x7f, 0x00, 0x3b, 0x00, 0x3f,
++ 0x01, 0x3f, 0x28, 0x2b, 0x38, 0x28, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x40, 0xf8, 0x40, 0xfc,
++ 0x10, 0xfc, 0x40, 0xf8, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3a, 0x01, 0x79, 0x04, 0x3b, 0x02, 0x38,
++ 0x06, 0x3a, 0x2a, 0x2a, 0x3d, 0x28, 0x00, 0x00,
++ 0x20, 0xf8, 0xa8, 0xf8, 0x20, 0xfc, 0xf0, 0x90,
++ 0xf0, 0xf8, 0x88, 0xf8, 0x80, 0xfc, 0x00, 0x00,
++ 0x06, 0x1b, 0x13, 0x1c, 0x1e, 0x12, 0x7f, 0x17,
++ 0x3f, 0x47, 0x07, 0x0f, 0x08, 0x0f, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0xf0, 0xf0, 0x90, 0xfc, 0xd0,
++ 0xf8, 0xc4, 0xc0, 0xe0, 0x20, 0xe0, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x7f, 0x02, 0x3b, 0x03, 0x39,
++ 0x01, 0x39, 0x29, 0x29, 0x39, 0x2e, 0x00, 0x00,
++ 0x40, 0xfc, 0xf0, 0xf8, 0xa8, 0x38, 0xf8, 0xf0,
++ 0x10, 0xf0, 0xf0, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x00, 0x38, 0x07, 0x7c, 0x01, 0x3f, 0x01, 0x3b,
++ 0x05, 0x39, 0x28, 0x2a, 0x3a, 0x2c, 0x00, 0x00,
++ 0xa0, 0xa0, 0xfc, 0xa0, 0xf0, 0x14, 0xf8, 0xb0,
++ 0xf4, 0xac, 0x00, 0xa8, 0x54, 0x54, 0x00, 0x00,
++ 0x14, 0x17, 0x28, 0x3f, 0x68, 0x2b, 0x3c, 0x2b,
++ 0x28, 0x3f, 0x2a, 0x2b, 0x3e, 0x20, 0x00, 0x00,
++ 0x14, 0x94, 0x28, 0xfc, 0x68, 0xa8, 0x3c, 0xa8,
++ 0x28, 0xbc, 0xa8, 0xa8, 0xbc, 0x20, 0x00, 0x00,
++ 0x00, 0x38, 0x07, 0x7d, 0x01, 0x39, 0x01, 0x3b,
++ 0x00, 0x3b, 0x29, 0x29, 0x38, 0x2f, 0x00, 0x00,
++ 0x40, 0xf8, 0xf0, 0x10, 0xf4, 0xb8, 0xe4, 0x7c,
++ 0xa0, 0xf0, 0x50, 0xf4, 0xac, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x03, 0x7e, 0x03, 0x38, 0x07, 0x3b,
++ 0x00, 0x3f, 0x29, 0x2f, 0x39, 0x2e, 0x00, 0x00,
++ 0x40, 0xfc, 0xb8, 0xa8, 0xb8, 0xa0, 0xfc, 0xf8,
++ 0xa0, 0xfc, 0xa8, 0x30, 0xd0, 0x0c, 0x00, 0x00,
++ 0x02, 0x3a, 0x02, 0x7d, 0x07, 0x3a, 0x06, 0x3a,
++ 0x06, 0x3a, 0x2e, 0x2b, 0x3e, 0x28, 0x00, 0x00,
++ 0xa0, 0xb0, 0xa8, 0x68, 0xfc, 0xa0, 0xe8, 0xa8,
++ 0xe8, 0xd0, 0x94, 0xfc, 0x4c, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x7f, 0x02, 0x3b, 0x00, 0x39,
++ 0x03, 0x3d, 0x29, 0x29, 0x39, 0x29, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xb8, 0xa8, 0xb8, 0x90, 0xfc,
++ 0x20, 0xf8, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x03, 0x3b, 0x05, 0x7f, 0x03, 0x3b, 0x05, 0x39,
++ 0x01, 0x39, 0x29, 0x29, 0x39, 0x2e, 0x00, 0x00,
++ 0x30, 0xb8, 0x50, 0xfc, 0x30, 0xb4, 0x4c, 0xf0,
++ 0x10, 0xf0, 0xf0, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x14, 0x12, 0x22, 0x48, 0x08, 0x14, 0x13, 0x22,
++ 0x7e, 0x22, 0x22, 0x3f, 0x22, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0x90, 0x90, 0x90, 0xfc, 0x30,
++ 0x30, 0x50, 0x90, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x08, 0x3f, 0x2a, 0x7e, 0x09, 0x3e, 0x08, 0x7f,
++ 0x08, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x50, 0x48, 0x88, 0xa0, 0x20, 0x50, 0x50, 0x88,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x02, 0x3e, 0x29, 0x49, 0x0a, 0x32, 0x0c, 0x0a,
++ 0x3f, 0x08, 0x7f, 0x0c, 0x12, 0x60, 0x00, 0x00,
++ 0x50, 0x48, 0x88, 0x20, 0x20, 0x50, 0x50, 0x88,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x01, 0x11, 0x11, 0x1f, 0x00, 0x7f, 0x00, 0x0f,
++ 0x08, 0x0f, 0x04, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0x10, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0xe0,
++ 0x20, 0xe0, 0x40, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7e, 0x01, 0x3d, 0x26, 0x24, 0x24, 0x3d,
++ 0x27, 0x14, 0x18, 0x1c, 0x61, 0x02, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x80, 0xb8, 0xe8, 0x68,
++ 0x68, 0xf8, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3e, 0x3e, 0x24, 0x3f, 0x3f,
++ 0x0f, 0x08, 0x0f, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x50, 0x20, 0xd0, 0x0c, 0xf8,
++ 0xe0, 0x20, 0xe0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x25, 0x2f, 0x25, 0x2f, 0x2f, 0x25, 0x3f, 0x7f,
++ 0x0f, 0x08, 0x0f, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x48, 0xe8, 0x48, 0xe8, 0xe8, 0x48, 0xf8, 0xfc,
++ 0xe0, 0x20, 0xe0, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x02, 0x0e, 0x73, 0x05, 0x19,
++ 0x62, 0x04, 0x18, 0x60, 0x01, 0x06, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x48, 0x48, 0x50, 0xa0,
++ 0xa0, 0x90, 0x88, 0x84, 0x00, 0x00, 0x00, 0x00,
++ 0x09, 0x09, 0x1f, 0x02, 0x7f, 0x04, 0x1f, 0x63,
++ 0x3d, 0x06, 0x39, 0x06, 0x38, 0x03, 0x00, 0x00,
++ 0x20, 0x10, 0xf8, 0x80, 0xfc, 0x40, 0xf0, 0x1c,
++ 0x90, 0xa0, 0xe0, 0x98, 0x84, 0x00, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x10, 0x32, 0x4b, 0x1c, 0x2c,
++ 0x4a, 0x1b, 0x2a, 0x48, 0x08, 0x30, 0x00, 0x00,
++ 0x40, 0x48, 0xf8, 0x50, 0x50, 0xfc, 0x30, 0x48,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x00, 0x03, 0x3c, 0x02, 0x03, 0x7c, 0x01,
++ 0x06, 0x38, 0x01, 0x06, 0x38, 0x01, 0x00, 0x00,
++ 0x40, 0x80, 0x88, 0x50, 0x60, 0x80, 0x80, 0x40,
++ 0x60, 0xa0, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00,
++ 0x04, 0x18, 0x6a, 0x24, 0x1b, 0x70, 0x08, 0x1c,
++ 0x64, 0x0c, 0x15, 0x66, 0x04, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x10, 0xfc, 0x30, 0x30, 0x50,
++ 0x50, 0x90, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x04, 0x19, 0x6a, 0x24, 0x18, 0x68, 0x0d, 0x14,
++ 0x65, 0x0d, 0x15, 0x65, 0x05, 0x19, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x88, 0x30, 0x00,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x18, 0x6a, 0x24, 0x19, 0x6a, 0x0c, 0x15,
++ 0x66, 0x0d, 0x15, 0x65, 0x05, 0x19, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x88, 0x90, 0x60, 0x60, 0x90,
++ 0x0c, 0xf8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x09, 0x11, 0x6d, 0x29, 0x13, 0x72, 0x1e, 0x2a,
++ 0x4a, 0x1a, 0x2b, 0x4a, 0x0a, 0x32, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x70, 0x70,
++ 0xa8, 0xa8, 0x24, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x19, 0x6a, 0x24, 0x18, 0x68, 0x0c, 0x14,
++ 0x64, 0x0c, 0x14, 0x64, 0x04, 0x18, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x40, 0xf8, 0x88, 0x88,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x04, 0x19, 0x6b, 0x25, 0x19, 0x69, 0x0d, 0x15,
++ 0x64, 0x0d, 0x14, 0x64, 0x07, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xf8,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x19, 0x6b, 0x25, 0x19, 0x69, 0x0d, 0x15,
++ 0x64, 0x0c, 0x14, 0x64, 0x05, 0x1a, 0x00, 0x00,
++ 0x40, 0xb8, 0x08, 0x08, 0xb8, 0x08, 0x08, 0xf8,
++ 0xa0, 0xa0, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x04, 0x18, 0x6b, 0x25, 0x19, 0x69, 0x0d, 0x15,
++ 0x65, 0x0d, 0x15, 0x65, 0x05, 0x1e, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x28, 0xe8, 0x58, 0x88, 0xf8,
++ 0x24, 0xf8, 0x20, 0x24, 0xe4, 0x1c, 0x00, 0x00,
++ 0x05, 0x19, 0x6b, 0x25, 0x19, 0x69, 0x0d, 0x15,
++ 0x65, 0x0d, 0x15, 0x65, 0x05, 0x1e, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x24, 0xe8, 0x30, 0x20,
++ 0x20, 0x20, 0x24, 0x64, 0xa4, 0x1c, 0x00, 0x00,
++ 0x04, 0x1b, 0x68, 0x25, 0x19, 0x69, 0x0d, 0x15,
++ 0x64, 0x0f, 0x14, 0x64, 0x05, 0x1e, 0x00, 0x00,
++ 0x90, 0xfc, 0x90, 0xf8, 0x08, 0xf8, 0x08, 0xf8,
++ 0x40, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x23, 0x3e, 0x22,
++ 0x22, 0x3e, 0x14, 0x12, 0x23, 0x42, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0x40, 0x7c, 0xc8, 0x48, 0x50,
++ 0x30, 0x20, 0x54, 0x94, 0x0c, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x17, 0x14, 0x17,
++ 0x14, 0x17, 0x24, 0x27, 0x43, 0x1c, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0xfc, 0x80, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x10, 0xf0, 0x30, 0x0c, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x70, 0x0f, 0x00, 0x0f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0x80, 0xe0, 0x1c, 0xe0, 0x40, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x3f, 0x22,
++ 0x22, 0x3e, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x50, 0x48, 0x88, 0xf4, 0x04,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x2f, 0x28, 0x2e, 0x78, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x80, 0x98, 0xe0, 0x84, 0x7c, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x7f, 0x1f, 0x00, 0x7f, 0x1f, 0x11,
++ 0x1f, 0x1f, 0x11, 0x1f, 0x19, 0x60, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0x40, 0xc0, 0x40, 0x40,
++ 0x20, 0x20, 0x14, 0x14, 0x0c, 0x84, 0x00, 0x00,
++ 0x00, 0x1f, 0x00, 0x7f, 0x00, 0x1f, 0x11, 0x1f,
++ 0x11, 0x1f, 0x11, 0x1f, 0x19, 0x60, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0x40, 0x40, 0x40,
++ 0x20, 0x20, 0x14, 0x14, 0x0c, 0x84, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x3c, 0x27, 0x3c, 0x24,
++ 0x24, 0x3c, 0x19, 0x15, 0x22, 0x44, 0x00, 0x00,
++ 0x08, 0x30, 0xc0, 0x40, 0x40, 0xf8, 0x08, 0x10,
++ 0x10, 0x20, 0x40, 0x80, 0x40, 0x3c, 0x00, 0x00,
++ 0x00, 0x7f, 0x04, 0x3f, 0x24, 0x3f, 0x0f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x1f, 0x05, 0x7f, 0x04, 0x0f, 0x08, 0x0f,
++ 0x08, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xf0, 0x40, 0xfc, 0x40, 0xe0, 0x20, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x3c, 0x24, 0x3d, 0x24,
++ 0x24, 0x3f, 0x18, 0x14, 0x24, 0x43, 0x00, 0x00,
++ 0x50, 0x48, 0x7c, 0xc8, 0x30, 0x74, 0x8c, 0x54,
++ 0x7c, 0xc8, 0x30, 0x34, 0xcc, 0x04, 0x00, 0x00,
++ 0x01, 0x7f, 0x1f, 0x3f, 0x24, 0x3f, 0x0f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0xf0, 0xf8, 0x48, 0xf8, 0xe0, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x7f, 0x09, 0x17, 0x25, 0x19, 0x6f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0xa8, 0x48, 0x30, 0xec, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x7f, 0x1f, 0x04, 0x7f, 0x0f,
++ 0x18, 0x6f, 0x0f, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xfc, 0xf0, 0x40, 0xfc, 0xe0,
++ 0x30, 0xec, 0xe0, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x00, 0x3d, 0x27, 0x24, 0x3f, 0x24, 0x3f, 0x24,
++ 0x27, 0x3d, 0x19, 0x16, 0x24, 0x40, 0x00, 0x00,
++ 0x48, 0xb0, 0xfc, 0xa0, 0xf8, 0xa8, 0xfc, 0xa8,
++ 0xf8, 0xb0, 0xb0, 0xa8, 0xa4, 0xa0, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x25, 0x3d, 0x25, 0x3d, 0x25,
++ 0x25, 0x3c, 0x1b, 0x15, 0x24, 0x40, 0x00, 0x00,
++ 0x50, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48, 0xf8,
++ 0x48, 0x10, 0xfc, 0x10, 0x90, 0x30, 0x00, 0x00,
++ 0x08, 0x3e, 0x7f, 0x14, 0x7f, 0x3e, 0x09, 0x0f,
++ 0x08, 0x0f, 0x0f, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0xd4, 0xb4, 0x0c, 0xe0,
++ 0x20, 0xe0, 0xe0, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x3e, 0x7e, 0x09, 0x7f, 0x1e, 0x27, 0x4f,
++ 0x08, 0x0f, 0x0f, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x90, 0x50, 0x70, 0x8c, 0xe0,
++ 0x20, 0xe0, 0xe0, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x14, 0x1f, 0x25, 0x7f, 0x16, 0x25, 0x4f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0xa0, 0xf8, 0x20, 0xfc, 0x50, 0x94, 0xec, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x08, 0x7f, 0x12, 0x0d, 0x1d, 0x63, 0x0f, 0x08,
++ 0x0f, 0x0f, 0x08, 0x0f, 0x06, 0x38, 0x00, 0x00,
++ 0xd4, 0xfc, 0x70, 0x50, 0x74, 0x8c, 0xe4, 0x20,
++ 0xe0, 0xe0, 0x20, 0xe0, 0x60, 0x18, 0x00, 0x00,
++ 0x01, 0x7f, 0x08, 0x07, 0x1f, 0x10, 0x1f, 0x3b,
++ 0x2a, 0x3b, 0x2b, 0x3b, 0x2b, 0x5c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0xf0, 0x10, 0xf0, 0xb8,
++ 0xa8, 0xb8, 0xb8, 0xac, 0x4c, 0x84, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x25, 0x3d, 0x25, 0x3d, 0x25,
++ 0x25, 0x3d, 0x1a, 0x16, 0x24, 0x40, 0x00, 0x00,
++ 0x40, 0xf0, 0x20, 0xfc, 0x54, 0x8c, 0x70, 0xfc,
++ 0x70, 0x70, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3d, 0x24, 0x27, 0x3d, 0x24, 0x3f, 0x25,
++ 0x26, 0x3d, 0x19, 0x15, 0x27, 0x40, 0x00, 0x00,
++ 0x40, 0xf8, 0x48, 0xfc, 0xf8, 0x40, 0xfc, 0xa8,
++ 0x54, 0xf8, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x3e, 0x15, 0x1d, 0x3f, 0x5f, 0x17,
++ 0x14, 0x17, 0x17, 0x17, 0x22, 0x4c, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x50, 0x78, 0xf4, 0xf0, 0xd0,
++ 0x50, 0xd0, 0xd0, 0xd0, 0x90, 0x50, 0x00, 0x00,
++ 0x00, 0x38, 0x2d, 0x2d, 0x3d, 0x2f, 0x39, 0x2f,
++ 0x2d, 0x3d, 0x15, 0x1a, 0x2a, 0x44, 0x00, 0x00,
++ 0x18, 0x14, 0xfc, 0x10, 0xf4, 0xd4, 0xf4, 0xb8,
++ 0xf8, 0xdc, 0xfc, 0x9c, 0x24, 0x44, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x3d, 0x25, 0x3d, 0x25,
++ 0x25, 0x3d, 0x1a, 0x16, 0x27, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0x20, 0x20, 0xf8, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x0f, 0x08, 0x0f, 0x0f, 0x0f, 0x18, 0x3e,
++ 0x22, 0x3e, 0x3e, 0x3e, 0x14, 0x63, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0xe0, 0xe0, 0x30, 0xf8,
++ 0x88, 0xf8, 0xf8, 0xf8, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x3d, 0x24, 0x25, 0x3d, 0x25, 0x3d, 0x24,
++ 0x24, 0x3c, 0x18, 0x14, 0x24, 0x43, 0x00, 0x00,
++ 0x20, 0xfc, 0xf8, 0xfc, 0x54, 0x9c, 0xfc, 0xf8,
++ 0x88, 0xf8, 0xf8, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x08, 0x08, 0x7f, 0x14, 0x36,
++ 0x36, 0x35, 0x55, 0x14, 0x24, 0x4c, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x80, 0xf8, 0xc8,
++ 0xa8, 0xb0, 0x90, 0xb0, 0xc8, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x08, 0x08, 0x7f, 0x14, 0x36,
++ 0x37, 0x35, 0x55, 0x14, 0x24, 0x4c, 0x00, 0x00,
++ 0x40, 0x48, 0xf8, 0x50, 0x50, 0xfc, 0x50, 0x88,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x01, 0x7f, 0x08, 0x04,
++ 0x04, 0x10, 0x1b, 0x14, 0x23, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x20, 0x20,
++ 0x40, 0x80, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x08, 0x08, 0x7f, 0x08, 0x28,
++ 0x2e, 0x29, 0x38, 0x28, 0x46, 0x41, 0x00, 0x00,
++ 0x10, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x9c,
++ 0xf0, 0x90, 0x10, 0x10, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x08, 0x08, 0x7f, 0x08, 0x28,
++ 0x2e, 0x28, 0x38, 0x28, 0x47, 0x41, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x24, 0x40, 0x90,
++ 0x24, 0xc8, 0x10, 0x60, 0x80, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x3e, 0x09, 0x08, 0x7f, 0x08, 0x28,
++ 0x2e, 0x28, 0x38, 0x28, 0x46, 0x41, 0x00, 0x00,
++ 0x20, 0xa8, 0xa4, 0x24, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0x88, 0x98, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x23, 0x3e, 0x08, 0x29, 0x2e,
++ 0x28, 0x28, 0x2e, 0x38, 0x61, 0x06, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x08, 0x28, 0x2e,
++ 0x28, 0x28, 0x2e, 0x38, 0x63, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xa0, 0xbc, 0xa0, 0xa0,
++ 0xa0, 0xa0, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x08, 0x29, 0x2e,
++ 0x28, 0x28, 0x2e, 0x38, 0x61, 0x06, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x01, 0x3d, 0x25, 0x27, 0x3d, 0x09, 0x29, 0x2d,
++ 0x29, 0x29, 0x2e, 0x3a, 0x64, 0x09, 0x00, 0x00,
++ 0x00, 0x00, 0x1c, 0xd4, 0x54, 0x54, 0x54, 0x54,
++ 0x54, 0x54, 0x54, 0x5c, 0x54, 0x80, 0x00, 0x00,
++ 0x00, 0x7b, 0x4a, 0x4a, 0x7a, 0x12, 0x57, 0x5e,
++ 0x52, 0x52, 0x5e, 0x72, 0x42, 0x02, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0xfc, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x22, 0x3e, 0x08, 0x28, 0x2f,
++ 0x29, 0x2a, 0x28, 0x2e, 0x38, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x80, 0xf8, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x09, 0x2b, 0x2e,
++ 0x28, 0x28, 0x2e, 0x38, 0x61, 0x06, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xf8, 0xa0, 0x20, 0xfc, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x3d, 0x09, 0x29, 0x2f,
++ 0x29, 0x29, 0x2e, 0x3a, 0x65, 0x0e, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x28, 0x20, 0x20, 0xf8, 0x88,
++ 0x50, 0x50, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x23, 0x3e, 0x08, 0x28, 0x2e,
++ 0x28, 0x28, 0x2f, 0x3a, 0x64, 0x0b, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0x48, 0x48, 0xc8,
++ 0xb0, 0xb0, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x27, 0x3d, 0x09, 0x29, 0x2f,
++ 0x29, 0x29, 0x2e, 0x3a, 0x64, 0x08, 0x00, 0x00,
++ 0x40, 0x78, 0x90, 0x20, 0xfc, 0x00, 0x78, 0x48,
++ 0x48, 0x70, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x3f, 0x09, 0x09, 0x0f, 0x71, 0x02, 0x1f,
++ 0x10, 0x1f, 0x09, 0x09, 0x15, 0x63, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x90, 0x54, 0x54, 0x0c, 0xf0,
++ 0x10, 0xf0, 0x00, 0xf0, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x08, 0x28, 0x2e,
++ 0x28, 0x28, 0x28, 0x2e, 0x38, 0x63, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0xa4,
++ 0xa4, 0xa8, 0x90, 0xb0, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x09, 0x29, 0x2e,
++ 0x28, 0x28, 0x2e, 0x38, 0x61, 0x02, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xf8, 0xa0, 0x20, 0xfc, 0x50,
++ 0x50, 0x50, 0x90, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x09, 0x29, 0x2f,
++ 0x29, 0x29, 0x2e, 0x3a, 0x64, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x00, 0xfc, 0x04,
++ 0xf4, 0x94, 0xf4, 0x94, 0x04, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x23, 0x22, 0x3e, 0x08, 0x28, 0x2e,
++ 0x28, 0x28, 0x2e, 0x39, 0x62, 0x00, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0x70, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x28, 0x08, 0x2e,
++ 0x28, 0x28, 0x28, 0x2e, 0x38, 0x63, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8,
++ 0xa4, 0xa8, 0x90, 0xb0, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x09, 0x28, 0x2e,
++ 0x28, 0x28, 0x2f, 0x39, 0x62, 0x04, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20, 0xa0,
++ 0xb8, 0xa0, 0xa0, 0x60, 0x30, 0x0c, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x08, 0x28, 0x2e,
++ 0x29, 0x28, 0x2e, 0x39, 0x62, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8, 0xf8, 0x20,
++ 0xfc, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x09, 0x29, 0x2f,
++ 0x29, 0x29, 0x2e, 0x3a, 0x64, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x28, 0x20, 0xfc,
++ 0x20, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x23, 0x3e, 0x08, 0x29, 0x2e,
++ 0x28, 0x29, 0x2e, 0x38, 0x60, 0x03, 0x00, 0x00,
++ 0x50, 0x48, 0x7c, 0xc8, 0x30, 0x74, 0x8c, 0x54,
++ 0x7c, 0xc8, 0x30, 0x24, 0xdc, 0x04, 0x00, 0x00,
++ 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x0a, 0x28, 0x2f,
++ 0x28, 0x28, 0x2f, 0x39, 0x62, 0x04, 0x00, 0x00,
++ 0x00, 0x00, 0x38, 0xe8, 0xa8, 0xa8, 0xa8, 0xe8,
++ 0xa8, 0xa8, 0x68, 0x78, 0x28, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3f, 0x28, 0x09, 0x2e,
++ 0x28, 0x29, 0x28, 0x2e, 0x39, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x20, 0xfc, 0x68, 0xa0, 0x60,
++ 0x20, 0xfc, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x23, 0x22, 0x3e, 0x08, 0x28, 0x2e,
++ 0x28, 0x28, 0x2e, 0x38, 0x63, 0x00, 0x00, 0x00,
++ 0x18, 0xe0, 0xfc, 0x20, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x3e, 0x28, 0x0b, 0x2e,
++ 0x2b, 0x2a, 0x2b, 0x2e, 0x3a, 0x62, 0x00, 0x00,
++ 0xe0, 0x60, 0x90, 0x08, 0xf4, 0x00, 0xa8, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x22, 0x3e, 0x28, 0x08, 0x2e,
++ 0x28, 0x28, 0x2b, 0x2c, 0x38, 0x63, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x20, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xfc, 0x44, 0x84, 0x18, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3e, 0x09, 0x28, 0x2e,
++ 0x29, 0x28, 0x2f, 0x38, 0x61, 0x06, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x24, 0x54, 0x90, 0x60, 0x50,
++ 0xf8, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x3f, 0x24, 0x7f, 0x1f, 0x04, 0x7f, 0x0f,
++ 0x14, 0x67, 0x09, 0x09, 0x17, 0x61, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xf8, 0xf0, 0x40, 0xfc, 0xe0,
++ 0x50, 0xcc, 0x00, 0xe0, 0x00, 0xfc, 0x00, 0x00,
++ 0x01, 0x3c, 0x27, 0x24, 0x3d, 0x08, 0x2b, 0x2c,
++ 0x28, 0x28, 0x2f, 0x3a, 0x67, 0x00, 0x00, 0x00,
++ 0x10, 0xa0, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x80,
++ 0xf8, 0xa0, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x25, 0x3e, 0x09, 0x29, 0x2f,
++ 0x29, 0x29, 0x2f, 0x3b, 0x65, 0x01, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0xf0, 0x08, 0xf4, 0x10, 0xf0,
++ 0xf0, 0x00, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x27, 0x3c, 0x29, 0x0b, 0x2f,
++ 0x29, 0x29, 0x29, 0x2f, 0x39, 0x61, 0x00, 0x00,
++ 0x40, 0x58, 0x40, 0x58, 0xa0, 0x10, 0xf8, 0x14,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3e, 0x28, 0x09, 0x2f,
++ 0x29, 0x29, 0x29, 0x2f, 0x39, 0x61, 0x00, 0x00,
++ 0x18, 0xf0, 0x48, 0x24, 0x24, 0x40, 0xb8, 0x08,
++ 0x08, 0xb8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x13, 0x1f, 0x17, 0x1a, 0x22,
++ 0x4f, 0x08, 0x0f, 0x09, 0x17, 0x21, 0x00, 0x00,
++ 0x50, 0xfc, 0x48, 0xa8, 0xf0, 0x30, 0xd4, 0x0c,
++ 0xe4, 0x20, 0xe0, 0xf0, 0x00, 0xf8, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x26, 0x3c, 0x08, 0x29, 0x2f,
++ 0x2b, 0x29, 0x29, 0x2f, 0x39, 0x61, 0x00, 0x00,
++ 0xa8, 0xa8, 0x28, 0x54, 0xd4, 0x90, 0x10, 0x50,
++ 0x5c, 0x50, 0x50, 0xb0, 0x90, 0x0c, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x25, 0x3d, 0x09, 0x29, 0x2d,
++ 0x29, 0x29, 0x2e, 0x3b, 0x65, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0x50, 0xfc, 0x50, 0x50,
++ 0x70, 0x50, 0x00, 0xa8, 0x54, 0x54, 0x00, 0x00,
++ 0x00, 0x3e, 0x23, 0x23, 0x3e, 0x28, 0x08, 0x2f,
++ 0x28, 0x28, 0x28, 0x2d, 0x3a, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x00, 0xf8, 0x00, 0xfc,
++ 0x20, 0xb0, 0xa8, 0x24, 0x24, 0x60, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x24, 0x3c, 0x28, 0x0b, 0x2e,
++ 0x2b, 0x2a, 0x2a, 0x2f, 0x3a, 0x62, 0x00, 0x00,
++ 0xa0, 0xa0, 0xfc, 0xa0, 0xe0, 0x40, 0xf8, 0x48,
++ 0xf8, 0xd8, 0xd8, 0x68, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x3f, 0x26, 0x27, 0x3e, 0x2b, 0x09, 0x2f,
++ 0x29, 0x2b, 0x28, 0x2f, 0x38, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x50, 0xfc,
++ 0x50, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3f, 0x27, 0x26, 0x3e, 0x0b, 0x2a, 0x2f,
++ 0x2b, 0x2b, 0x2f, 0x3c, 0x65, 0x0a, 0x00, 0x00,
++ 0x00, 0xfc, 0x30, 0xb0, 0xd0, 0xfc, 0xb4, 0xf8,
++ 0xd0, 0xd0, 0x98, 0xa8, 0x24, 0x44, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x26, 0x3d, 0x29, 0x09, 0x2f,
++ 0x29, 0x28, 0x2b, 0x2c, 0x38, 0x60, 0x00, 0x00,
++ 0xf0, 0x90, 0xf8, 0x64, 0xf8, 0x78, 0x98, 0xf8,
++ 0xf8, 0x10, 0xfc, 0x90, 0x50, 0x30, 0x00, 0x00,
++ 0x00, 0x3e, 0x25, 0x27, 0x3d, 0x08, 0x2b, 0x2c,
++ 0x29, 0x28, 0x2f, 0x38, 0x61, 0x06, 0x00, 0x00,
++ 0xa0, 0xa8, 0xb0, 0xfc, 0x10, 0xa0, 0xf8, 0x40,
++ 0xf0, 0x40, 0xfc, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x09, 0x29, 0x2f,
++ 0x28, 0x29, 0x2e, 0x38, 0x63, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x00, 0xdc, 0x54, 0xdc,
++ 0x20, 0xfc, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x3d, 0x28, 0x0b, 0x2e,
++ 0x28, 0x2b, 0x28, 0x2e, 0x38, 0x60, 0x00, 0x00,
++ 0x90, 0xfc, 0x90, 0x48, 0xf8, 0x50, 0xfc, 0x50,
++ 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3c, 0x09, 0x29, 0x2f,
++ 0x29, 0x29, 0x2e, 0x38, 0x63, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x68, 0xf8, 0x80, 0xfc, 0x44, 0xf4,
++ 0x54, 0xf4, 0x54, 0x7c, 0x8c, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3f, 0x3e, 0x32, 0x5e, 0x1f,
++ 0x08, 0x0f, 0x09, 0x09, 0x17, 0x21, 0x00, 0x00,
++ 0x20, 0xf8, 0x50, 0xfc, 0x20, 0xf8, 0x20, 0xe0,
++ 0x20, 0xe0, 0x00, 0xf0, 0x00, 0xf8, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x27, 0x3e, 0x0b, 0x2c, 0x2f,
++ 0x29, 0x29, 0x2f, 0x39, 0x62, 0x04, 0x00, 0x00,
++ 0x40, 0xfc, 0xa8, 0xf0, 0xe8, 0xf8, 0x64, 0x10,
++ 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x25, 0x3f, 0x29, 0x08, 0x2f,
++ 0x2b, 0x28, 0x2b, 0x2e, 0x3b, 0x62, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0xfc, 0xe8, 0x40, 0xf0,
++ 0xfc, 0x08, 0xfc, 0xc8, 0xa8, 0x18, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x25, 0x3d, 0x2a, 0x09, 0x2f,
++ 0x29, 0x29, 0x2f, 0x39, 0x61, 0x06, 0x00, 0x00,
++ 0x48, 0xb0, 0x20, 0xfc, 0x68, 0x48, 0xf0, 0x10,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x90, 0x08, 0x00, 0x00,
++ 0x02, 0x7a, 0x4f, 0x49, 0x7f, 0x15, 0x56, 0x5f,
++ 0x57, 0x51, 0x5f, 0x72, 0x44, 0x08, 0x00, 0x00,
++ 0x80, 0x78, 0xe8, 0xa8, 0xf0, 0xf0, 0xe8, 0xe8,
++ 0xe4, 0x24, 0xe4, 0xb8, 0x60, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x26, 0x26, 0x3e, 0x0a, 0x2a, 0x2e,
++ 0x2b, 0x2a, 0x2f, 0x3c, 0x6b, 0x00, 0x00, 0x00,
++ 0x20, 0xfc, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0xf8,
++ 0xfc, 0xac, 0xfc, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x26, 0x27, 0x3e, 0x2b, 0x0a, 0x2e,
++ 0x2b, 0x2a, 0x2a, 0x2e, 0x3a, 0x62, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0x68, 0xf8,
++ 0xa8, 0xf8, 0xf8, 0xa8, 0xf8, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x27, 0x3e, 0x2b, 0x0b, 0x2e,
++ 0x2a, 0x2b, 0x2a, 0x2e, 0x3a, 0x62, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xb8, 0xa8, 0xb8, 0xb8, 0x68,
++ 0xf8, 0xf8, 0xf8, 0xa8, 0xf8, 0x18, 0x00, 0x00,
++ 0x00, 0x3d, 0x24, 0x24, 0x3c, 0x09, 0x28, 0x2f,
++ 0x2a, 0x2b, 0x2f, 0x3b, 0x66, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x90, 0xf0, 0xf0, 0xf0, 0x10, 0xfc,
++ 0xa8, 0xb8, 0xb8, 0xb8, 0xe8, 0x88, 0x00, 0x00,
++ 0x08, 0x11, 0x3c, 0x24, 0x3d, 0x25, 0x3d, 0x27,
++ 0x7d, 0x0d, 0x14, 0x64, 0x04, 0x0c, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x10, 0x00, 0xf8,
++ 0x08, 0x08, 0x08, 0x08, 0x10, 0x60, 0x00, 0x00,
++ 0x08, 0x10, 0x3c, 0x27, 0x3c, 0x24, 0x3d, 0x27,
++ 0x7e, 0x0d, 0x14, 0x64, 0x04, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0xe0, 0xe0, 0x50, 0x50,
++ 0x48, 0xf4, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x13, 0x3e, 0x27, 0x3e, 0x27, 0x3c, 0x27,
++ 0x7d, 0x0d, 0x15, 0x64, 0x07, 0x0c, 0x00, 0x00,
++ 0xa0, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x00, 0xfc,
++ 0xf0, 0x10, 0xf0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x11, 0x3c, 0x24, 0x3c, 0x25, 0x3e, 0x26,
++ 0x7f, 0x0c, 0x15, 0x66, 0x04, 0x0c, 0x00, 0x00,
++ 0x00, 0xe0, 0xa0, 0xb8, 0xa8, 0x08, 0x70, 0x40,
++ 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x40, 0x00, 0x00,
++ 0x09, 0x10, 0x3f, 0x24, 0x3d, 0x24, 0x3f, 0x26,
++ 0x7c, 0x0f, 0x14, 0x64, 0x05, 0x0e, 0x00, 0x00,
++ 0x10, 0xa0, 0xf8, 0x40, 0xf0, 0x40, 0xfc, 0x40,
++ 0x40, 0xfc, 0x40, 0xa0, 0x10, 0x0c, 0x00, 0x00,
++ 0x08, 0x13, 0x3a, 0x2a, 0x3a, 0x2b, 0x3b, 0x2f,
++ 0x7b, 0x1b, 0x2d, 0x4d, 0x09, 0x19, 0x00, 0x00,
++ 0x00, 0xfc, 0xa8, 0xa8, 0xb0, 0x7c, 0xd0, 0x78,
++ 0x50, 0x78, 0x50, 0x50, 0x7c, 0x40, 0x00, 0x00,
++ 0x08, 0x13, 0x3a, 0x2a, 0x3b, 0x2b, 0x3b, 0x2f,
++ 0x7b, 0x1a, 0x2d, 0x4d, 0x0a, 0x18, 0x00, 0x00,
++ 0x40, 0xfc, 0xa8, 0xfc, 0xd0, 0x78, 0x78, 0x50,
++ 0x7c, 0x40, 0xa8, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x09, 0x0a, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0xc8, 0xc8, 0xc8,
++ 0xd8, 0xc0, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x01, 0x3f, 0x0f, 0x09, 0x0f, 0x09, 0x0f, 0x7f,
++ 0x01, 0x31, 0x0c, 0x06, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0xe0, 0x20, 0xe0, 0x20, 0xe0, 0xfc,
++ 0x00, 0x18, 0x60, 0xc0, 0x30, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3f, 0x2b,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa0, 0xf8, 0xa0, 0x20, 0xfc,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x08, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x08, 0x08, 0xe8, 0xa8, 0xa8, 0xa8,
++ 0xe8, 0xa8, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7e, 0x08, 0x08, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x24, 0xc0, 0x10,
++ 0x20, 0xc4, 0x08, 0x10, 0x60, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x09, 0x3e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x08, 0x7e, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x28, 0x24, 0x24, 0xfc, 0x20, 0x20, 0xe0, 0xa0,
++ 0x90, 0x90, 0xb4, 0xcc, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x08, 0x3e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x30, 0x48, 0xf4, 0x24, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2b, 0x3e, 0x2a,
++ 0x3f, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0xd0, 0x20, 0x50, 0x88,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x08, 0x3f, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0xa8, 0xa8, 0x50, 0xa8, 0xa8, 0x00,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x0b, 0x7f, 0x09, 0x3d, 0x2d, 0x3d, 0x2d,
++ 0x3d, 0x09, 0x7f, 0x0b, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0x50, 0xd0, 0x50, 0x50, 0xd0,
++ 0x50, 0x50, 0xd4, 0x54, 0x54, 0x4c, 0x00, 0x00,
++ 0x08, 0x0b, 0x7f, 0x09, 0x3f, 0x2b, 0x3f, 0x2b,
++ 0x3f, 0x09, 0x7f, 0x0b, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf8, 0x68, 0x68, 0xe8,
++ 0x50, 0x50, 0xd8, 0x68, 0x44, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x09, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0x78, 0x90, 0x20, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0x50, 0x50, 0x94, 0x14, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x09, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0xa8, 0xa8, 0x50, 0x50, 0xa8, 0xa8, 0x00, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x09, 0x7e, 0x09, 0x3e, 0x2a, 0x3f, 0x2b,
++ 0x3e, 0x09, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x68, 0x90, 0xd8, 0x24, 0xf8,
++ 0x68, 0x68, 0x90, 0x90, 0x68, 0x44, 0x00, 0x00,
++ 0x10, 0x13, 0x7c, 0x10, 0x7f, 0x56, 0x7f, 0x56,
++ 0x7e, 0x13, 0x7e, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf8, 0x48, 0xf8, 0xd8,
++ 0xd8, 0x68, 0x48, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x10, 0x13, 0x7c, 0x10, 0x7f, 0x56, 0x7f, 0x57,
++ 0x7f, 0x13, 0x7f, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf8, 0x48, 0x58, 0x58,
++ 0x58, 0xf8, 0x18, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x3e, 0x08, 0x7f, 0x14, 0x23, 0x5f, 0x0f,
++ 0x09, 0x0f, 0x09, 0x0f, 0x7f, 0x01, 0x00, 0x00,
++ 0x20, 0xf8, 0x20, 0xfc, 0x50, 0x88, 0xf4, 0xe0,
++ 0x20, 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x09, 0x7e, 0x08, 0x08, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x50,
++ 0xf8, 0x24, 0xf8, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x09, 0x7e, 0x08, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x09, 0x7f, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xf0, 0x90, 0x90, 0xf0, 0x00,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x09, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x0b, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0xf0, 0x90, 0xf0, 0x90, 0xf0,
++ 0x40, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x09, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x09, 0x00, 0x00,
++ 0x20, 0xf8, 0x20, 0xfc, 0x00, 0xf8, 0x88, 0xf8,
++ 0x24, 0x64, 0xd8, 0x50, 0x68, 0x84, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x3f, 0x5e, 0x7f, 0x3e,
++ 0x2a, 0x3e, 0x2a, 0x3e, 0x7f, 0x09, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x50, 0x54, 0x94, 0x0c, 0xf8,
++ 0x48, 0x50, 0x30, 0x20, 0x50, 0x8c, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x09, 0x3f, 0x2b, 0x3f, 0x2b,
++ 0x3f, 0x09, 0x7f, 0x0a, 0x0c, 0x09, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xf8, 0x50, 0xf8, 0x50,
++ 0x50, 0xfc, 0xa8, 0x90, 0xe8, 0x84, 0x00, 0x00,
++ 0x08, 0x09, 0x7e, 0x09, 0x3f, 0x2b, 0x3f, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xfc, 0x28, 0xac, 0xac, 0x00,
++ 0xf8, 0x08, 0xfc, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x09, 0x7e, 0x08, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x09, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x28, 0xfc, 0x20, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0x38, 0xe8, 0xfc, 0x90, 0x50, 0x30, 0x00, 0x00,
++ 0x10, 0x10, 0x7f, 0x12, 0x7f, 0x56, 0x7e, 0x57,
++ 0x7f, 0x13, 0x7f, 0x15, 0x15, 0x1a, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0x24, 0xe8, 0x30, 0x64, 0xa4, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x09, 0x3e, 0x2a, 0x3f, 0x2a,
++ 0x3f, 0x09, 0x7f, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0xfc, 0x50, 0xf8, 0x54, 0x70,
++ 0xfc, 0x04, 0x74, 0x54, 0x74, 0x0c, 0x00, 0x00,
++ 0x10, 0x10, 0x7f, 0x12, 0x7f, 0x56, 0x7f, 0x57,
++ 0x7d, 0x10, 0x7e, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x28, 0x24, 0xfc, 0x28, 0xe8, 0x10, 0xd4, 0x6c,
++ 0xc4, 0x40, 0xa8, 0x84, 0x94, 0x70, 0x00, 0x00,
++ 0x10, 0x13, 0x7c, 0x13, 0x7e, 0x57, 0x7f, 0x57,
++ 0x7c, 0x13, 0x7e, 0x12, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xfc, 0x48, 0x58, 0x58, 0xfc,
++ 0x80, 0xf8, 0xa8, 0xa8, 0xa8, 0x18, 0x00, 0x00,
++ 0x12, 0x12, 0x7d, 0x15, 0x7a, 0x5a, 0x7d, 0x5f,
++ 0x78, 0x17, 0x78, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x48, 0x48, 0xf4, 0xb4, 0xe8, 0xa8, 0xf4, 0x5c,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x13, 0x7e, 0x13, 0x7f, 0x56, 0x7f, 0x56,
++ 0x7e, 0x12, 0x7e, 0x14, 0x17, 0x18, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0xb0, 0xfc, 0xd0, 0xb8, 0x94,
++ 0x20, 0xb8, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x7f, 0x12, 0x7f, 0x57, 0x7f, 0x57,
++ 0x7f, 0x13, 0x7f, 0x15, 0x15, 0x1b, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0x68, 0xb8, 0xf0, 0x50, 0xf0,
++ 0x50, 0xf0, 0xf8, 0x68, 0x68, 0xfc, 0x00, 0x00,
++ 0x01, 0x7f, 0x01, 0x1f, 0x10, 0x1f, 0x01, 0x3f,
++ 0x08, 0x7f, 0x01, 0x3f, 0x01, 0x01, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x20, 0xfc, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1e, 0x13, 0x12, 0x12, 0x1e, 0x13, 0x10,
++ 0x3e, 0x33, 0x52, 0x1e, 0x12, 0x10, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x48, 0x50, 0xfc, 0x20,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x24, 0x15, 0x19, 0x7f, 0x09,
++ 0x0e, 0x78, 0x09, 0x12, 0x10, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0xe0, 0xe0, 0x50, 0x48, 0x44, 0x40, 0x00, 0x00,
++ 0x03, 0x3e, 0x29, 0x3f, 0x4a, 0x04, 0x3f, 0x2b,
++ 0x3f, 0x3f, 0x2b, 0x25, 0x3b, 0x23, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x48, 0x28, 0x30, 0xfc, 0x10,
++ 0x10, 0xfc, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x10, 0x13, 0x7c, 0x2f, 0x28, 0x2b, 0x7c, 0x13,
++ 0x1c, 0x73, 0x12, 0x23, 0x22, 0x40, 0x00, 0x00,
++ 0x10, 0x90, 0x7c, 0xe8, 0x28, 0xa8, 0x7c, 0x90,
++ 0x10, 0xfc, 0x90, 0x90, 0x90, 0x10, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x20, 0x10, 0x17, 0x00, 0x70,
++ 0x10, 0x10, 0x10, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x23, 0x12, 0x12, 0x02, 0x73,
++ 0x12, 0x10, 0x10, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48, 0xf8,
++ 0x48, 0x40, 0x40, 0x40, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x22, 0x12, 0x12, 0x02, 0x72,
++ 0x12, 0x12, 0x12, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0x08, 0xe8, 0xa8, 0xa8, 0xe8,
++ 0xa8, 0x08, 0x08, 0x18, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x20, 0x10, 0x11, 0x02, 0x71,
++ 0x11, 0x11, 0x11, 0x11, 0x2c, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x30, 0x00, 0xf8,
++ 0x08, 0x08, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x20, 0x10, 0x13, 0x02, 0x02, 0x73, 0x12,
++ 0x12, 0x13, 0x12, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0xf8, 0x48,
++ 0x48, 0xf8, 0x08, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x22, 0x12, 0x12, 0x43, 0x24, 0x24, 0x0a, 0x71,
++ 0x11, 0x12, 0x14, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xa0, 0xb0, 0xa8, 0xa4, 0x24,
++ 0x20, 0x20, 0x20, 0x20, 0x00, 0xfc, 0x00, 0x00,
++ 0x20, 0x17, 0x11, 0x42, 0x27, 0x22, 0x03, 0x73,
++ 0x12, 0x13, 0x13, 0x12, 0x2a, 0x47, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x44, 0xfc, 0xd8, 0x68, 0xf8,
++ 0xd8, 0x68, 0xf8, 0x48, 0x58, 0xfc, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x22, 0x12, 0x12, 0x02, 0x72,
++ 0x12, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xe8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xe8, 0x08, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x22, 0x13, 0x12, 0x02, 0x73,
++ 0x15, 0x15, 0x19, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x18, 0xe0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf8,
++ 0x08, 0x08, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x27, 0x10, 0x12, 0x02, 0x74,
++ 0x18, 0x11, 0x11, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0xa0, 0xb0, 0xa8, 0xa4,
++ 0xa4, 0x20, 0x20, 0x60, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x20, 0x13, 0x12, 0x02, 0x72,
++ 0x13, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xa0, 0xf8, 0xa8, 0xb8, 0xb8,
++ 0x18, 0x08, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x27, 0x10, 0x12, 0x01, 0x71,
++ 0x11, 0x16, 0x10, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x50, 0x48, 0x48, 0xfc, 0x40, 0x48, 0x48, 0x70,
++ 0xd0, 0x48, 0x48, 0xc0, 0x00, 0xfc, 0x00, 0x00,
++ 0x20, 0x17, 0x12, 0x42, 0x24, 0x22, 0x00, 0x73,
++ 0x10, 0x10, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x48, 0x48, 0x90, 0x48, 0x00, 0xf8,
++ 0x40, 0x40, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x09, 0x27, 0x11, 0x11, 0x02, 0x74,
++ 0x11, 0x12, 0x10, 0x1b, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0xa0, 0x18, 0xe4, 0x20, 0x24, 0x9c, 0xf0,
++ 0x90, 0x60, 0xd0, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x22, 0x15, 0x11, 0x01, 0x71,
++ 0x11, 0x11, 0x11, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0x44, 0xf4, 0x10, 0xf0, 0x10,
++ 0xf0, 0x10, 0x10, 0x30, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x21, 0x11, 0x10, 0x03, 0x70,
++ 0x11, 0x10, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0x10, 0xf0, 0x00, 0xf8, 0x40,
++ 0xf0, 0x40, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x21, 0x11, 0x16, 0x42, 0x26, 0x2b, 0x03, 0x75,
++ 0x19, 0x11, 0x11, 0x1e, 0x26, 0x41, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x28, 0x68, 0x70, 0xa0, 0x20,
++ 0x50, 0x50, 0x88, 0x04, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x20, 0x13, 0x12, 0x03, 0x72,
++ 0x13, 0x12, 0x12, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x48,
++ 0xf8, 0x48, 0x48, 0x58, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x09, 0x22, 0x10, 0x10, 0x01, 0x73,
++ 0x15, 0x11, 0x11, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0xa0, 0x90, 0x08, 0x48, 0x40, 0xa0, 0x10, 0xf8,
++ 0x14, 0x10, 0xf0, 0x10, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x27, 0x10, 0x11, 0x02, 0x77,
++ 0x10, 0x11, 0x10, 0x1b, 0x26, 0x41, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xfc, 0xe0, 0x50, 0x48, 0xfc,
++ 0x90, 0xd0, 0x70, 0x88, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x0b, 0x08, 0x27, 0x11, 0x11, 0x02, 0x74,
++ 0x11, 0x10, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x20, 0x24, 0x5c, 0x40,
++ 0xf0, 0x40, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x0b, 0x20, 0x17, 0x11, 0x00, 0x77,
++ 0x10, 0x13, 0x10, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xa0, 0xfc,
++ 0x40, 0xf8, 0x40, 0x40, 0x00, 0xfc, 0x00, 0x00,
++ 0x22, 0x11, 0x11, 0x47, 0x21, 0x21, 0x0f, 0x71,
++ 0x11, 0x12, 0x14, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x23, 0x12, 0x13, 0x01, 0x73,
++ 0x16, 0x12, 0x13, 0x1b, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x48, 0xa8, 0x28, 0xf8, 0x10, 0xfc, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x22, 0x13, 0x12, 0x03, 0x72,
++ 0x12, 0x13, 0x12, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xb8, 0x88, 0x88, 0xb8, 0x00, 0xf8, 0x28,
++ 0x10, 0x90, 0x28, 0x48, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x21, 0x11, 0x11, 0x00, 0x73,
++ 0x10, 0x11, 0x10, 0x1f, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0xf8,
++ 0x40, 0xf0, 0x40, 0xfc, 0x00, 0xfc, 0x00, 0x00,
++ 0x11, 0x09, 0x0a, 0x27, 0x10, 0x13, 0x02, 0x73,
++ 0x12, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0xf0, 0x10, 0x08, 0xfc, 0xa0, 0xf8, 0xa8, 0x38,
++ 0xe8, 0x08, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x23, 0x12, 0x12, 0x02, 0x73,
++ 0x12, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xa8, 0xb8, 0x18,
++ 0xe8, 0x08, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x08, 0x23, 0x12, 0x13, 0x02, 0x73,
++ 0x12, 0x13, 0x13, 0x1c, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0xf8, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0,
++ 0x10, 0xf0, 0x30, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x11, 0x08, 0x09, 0x23, 0x14, 0x13, 0x02, 0x73,
++ 0x12, 0x13, 0x12, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0xc0, 0xa0, 0x10, 0xf8, 0x04, 0xa8, 0xa8, 0xd0,
++ 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x08, 0x0f, 0x20, 0x13, 0x13, 0x02, 0x73,
++ 0x12, 0x13, 0x12, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x18, 0xa8, 0xf8,
++ 0x48, 0xf8, 0x48, 0x58, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x23, 0x10, 0x17, 0x01, 0x71,
++ 0x11, 0x11, 0x17, 0x19, 0x27, 0x41, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa0, 0xfc, 0xf0, 0x50,
++ 0xf0, 0x50, 0xfc, 0x10, 0x30, 0xfc, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x22, 0x12, 0x12, 0x02, 0x72,
++ 0x15, 0x15, 0x1a, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x18, 0xe0, 0x38, 0xfc, 0xa8, 0xb8, 0xe4, 0x9c,
++ 0x50, 0x54, 0x54, 0x8c, 0x00, 0xfc, 0x00, 0x00,
++ 0x11, 0x0b, 0x09, 0x27, 0x11, 0x17, 0x01, 0x71,
++ 0x12, 0x12, 0x14, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x20, 0xa0, 0x20, 0xfc, 0x48, 0xe8, 0x18, 0x90,
++ 0x98, 0xa8, 0xc4, 0x84, 0x00, 0xfc, 0x00, 0x00,
++ 0x20, 0x17, 0x15, 0x45, 0x27, 0x25, 0x05, 0x77,
++ 0x15, 0x15, 0x19, 0x1b, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x64, 0xb4, 0x38, 0xd8, 0x38,
++ 0xd4, 0x14, 0x10, 0x60, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x09, 0x08, 0x27, 0x11, 0x17, 0x01, 0x76,
++ 0x13, 0x10, 0x11, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf0, 0x40, 0xfc, 0x10, 0xb8, 0x90, 0x3c,
++ 0xf8, 0xa0, 0x24, 0x1c, 0x00, 0xfc, 0x00, 0x00,
++ 0x02, 0x39, 0x29, 0x2c, 0x32, 0x33, 0x28, 0x2f,
++ 0x25, 0x25, 0x25, 0x39, 0x22, 0x24, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x78, 0x90, 0xfc, 0x78, 0x48,
++ 0x78, 0x78, 0x48, 0x58, 0x80, 0x7c, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x23, 0x12, 0x13, 0x03, 0x72,
++ 0x12, 0x15, 0x17, 0x18, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x20, 0xac, 0xac, 0xa0,
++ 0xf8, 0x20, 0xfc, 0x20, 0x20, 0xfc, 0x00, 0x00,
++ 0x22, 0x13, 0x14, 0x49, 0x27, 0x25, 0x07, 0x75,
++ 0x17, 0x14, 0x14, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0x28, 0xd8, 0xb0, 0xb8, 0xd0,
++ 0xfc, 0x90, 0x90, 0x90, 0x00, 0xfc, 0x00, 0x00,
++ 0x20, 0x10, 0x17, 0x44, 0x27, 0x24, 0x07, 0x74,
++ 0x17, 0x14, 0x1b, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x80, 0xf0, 0xfc, 0xe8, 0x90, 0x70, 0xf8, 0xc8,
++ 0x68, 0xb0, 0x68, 0xa4, 0xc0, 0xfc, 0x00, 0x00,
++ 0x10, 0x0f, 0x08, 0x21, 0x11, 0x11, 0x01, 0x71,
++ 0x13, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf0, 0x50, 0xf0, 0x50, 0xf0,
++ 0xf8, 0x68, 0xf8, 0x08, 0x18, 0xfc, 0x00, 0x00,
++ 0x11, 0x0f, 0x0c, 0x27, 0x14, 0x17, 0x02, 0x7f,
++ 0x13, 0x12, 0x14, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xbc, 0xc8, 0xc8, 0x28, 0xd0,
++ 0x98, 0xa8, 0xc4, 0x84, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x21, 0x11, 0x11, 0x03, 0x72,
++ 0x15, 0x17, 0x10, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf0, 0x10, 0xf0, 0xf0, 0xf0, 0xfc, 0xa8,
++ 0x78, 0xfc, 0xf0, 0x10, 0x60, 0xfc, 0x00, 0x00,
++ 0x10, 0x09, 0x09, 0x21, 0x11, 0x11, 0x03, 0x72,
++ 0x15, 0x17, 0x11, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf0, 0x10, 0xd0, 0xd0, 0xf0, 0xfc, 0xe8,
++ 0x10, 0xfc, 0x10, 0xf0, 0x00, 0xfc, 0x00, 0x00,
++ 0x10, 0x0b, 0x0a, 0x23, 0x12, 0x1d, 0x03, 0x72,
++ 0x17, 0x13, 0x15, 0x19, 0x26, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x28, 0x7c, 0x50, 0xfc,
++ 0xd0, 0x7c, 0xd0, 0x7c, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x0f, 0x78, 0x0a, 0x2a, 0x2a, 0x2a,
++ 0x3e, 0x2a, 0x08, 0x0a, 0x0c, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x90, 0x90, 0xa0, 0x90, 0x88,
++ 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x00, 0x00,
++ 0x12, 0x12, 0x12, 0x12, 0x7f, 0x12, 0x12, 0x12,
++ 0x1e, 0x12, 0x12, 0x12, 0x1e, 0x12, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0xd0, 0x60, 0x50, 0x50,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x01, 0x06, 0x38, 0x20, 0x20, 0x3f, 0x24, 0x24,
++ 0x24, 0x24, 0x27, 0x38, 0x60, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x90, 0x90, 0xa0, 0x90, 0x88,
++ 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x7e, 0x12, 0x12, 0x12, 0x22, 0x4c, 0x00,
++ 0x3e, 0x22, 0x22, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x90, 0x90, 0xa0, 0x90, 0x88,
++ 0x88, 0x88, 0x88, 0xf0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x00, 0x7e, 0x08,
++ 0x08, 0x3e, 0x08, 0x08, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x90, 0x90, 0xa0, 0x90, 0x88,
++ 0x88, 0x88, 0xc8, 0xb0, 0x80, 0x80, 0x00, 0x00,
++ 0x14, 0x12, 0x22, 0x48, 0x08, 0x14, 0x12, 0x22,
++ 0x7e, 0x22, 0x22, 0x3e, 0x22, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x90, 0x90, 0xa0, 0x90, 0x88,
++ 0x88, 0x88, 0xc8, 0xb0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x3f, 0x00, 0x1f, 0x10, 0x1f, 0x13, 0x12,
++ 0x13, 0x17, 0x14, 0x27, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x08, 0xf8, 0xe0, 0x20,
++ 0xe0, 0xf0, 0x90, 0xf4, 0x04, 0xfc, 0x00, 0x00,
++ 0x03, 0x3c, 0x32, 0x29, 0x29, 0x40, 0x3e, 0x04,
++ 0x08, 0x0e, 0x78, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x90, 0x90, 0xa0, 0x90, 0x88,
++ 0x88, 0x88, 0xc8, 0xb0, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x77, 0x55, 0x55, 0x77, 0x00, 0x3e, 0x00,
++ 0x7f, 0x10, 0x1e, 0x22, 0x02, 0x0c, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x10, 0x1f, 0x29, 0x6b, 0x3f, 0x29, 0x0e, 0x10,
++ 0x1f, 0x29, 0x6b, 0x3f, 0x29, 0x16, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x3f, 0x7f, 0x08, 0x3f, 0x21,
++ 0x2f, 0x2b, 0x2f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0xd0, 0x60, 0x50, 0x48,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x77, 0x55, 0x77, 0x00, 0x3e, 0x2a, 0x3e,
++ 0x2a, 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x50, 0x50, 0x60, 0x50, 0x48,
++ 0x48, 0x48, 0x48, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x04, 0x25, 0x16, 0x7f, 0x0e, 0x15, 0x75, 0x1f,
++ 0x2d, 0x6d, 0x1f, 0x11, 0x21, 0x41, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0xd0, 0x50, 0x60, 0xd0, 0xc8,
++ 0x48, 0x48, 0xc8, 0x70, 0x40, 0x40, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0x80, 0xfc, 0x10, 0x10, 0x10, 0x10, 0x10,
++ 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x2f,
++ 0x33, 0x31, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0xa0, 0x20, 0x20, 0xfc, 0xa8, 0x20, 0x20,
++ 0x30, 0x30, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xf0, 0x50, 0x50, 0x54, 0x94, 0x0c, 0xf8,
++ 0x48, 0x50, 0x30, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x48, 0xc8, 0x48, 0x48, 0xfc, 0x48, 0x48, 0x48,
++ 0x78, 0x48, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x08, 0xb0, 0xe0, 0x20, 0x20, 0xfc, 0x70, 0x70,
++ 0x70, 0xa8, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0xa0, 0x38, 0x48, 0xd0, 0x30, 0x20, 0x40,
++ 0xf8, 0x48, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0x28, 0xc8, 0x30, 0x28, 0xfc, 0x04, 0x78,
++ 0x48, 0x78, 0x48, 0x78, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x2f,
++ 0x37, 0x33, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x78, 0x08, 0xf0,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x37, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x50, 0xd0, 0x50, 0xf8, 0x50, 0x50, 0xfc, 0x00,
++ 0x78, 0x48, 0x78, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2d, 0x2d, 0x37,
++ 0x33, 0x23, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x48, 0x48, 0x68, 0xb4, 0x24,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3f, 0x2e, 0x2e, 0x37,
++ 0x37, 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x90, 0xd8, 0xf8,
++ 0xb8, 0xd4, 0xd4, 0x90, 0x90, 0x90, 0x00, 0x00,
++ 0x00, 0x7e, 0x18, 0x19, 0x7e, 0x5a, 0x5a, 0x7e,
++ 0x67, 0x47, 0x7f, 0x43, 0x7f, 0x42, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf0, 0x90, 0xf0, 0x00,
++ 0xf8, 0x68, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x2e, 0x35, 0x3f, 0x2a, 0x3f, 0x7f,
++ 0x02, 0x1f, 0x14, 0x1f, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0x70, 0x54, 0x9c, 0xf8, 0x70, 0xd8, 0xfc,
++ 0x80, 0xf0, 0xd0, 0xf0, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0d, 0x3e, 0x2e, 0x2e, 0x36,
++ 0x37, 0x22, 0x3e, 0x22, 0x3f, 0x22, 0x00, 0x00,
++ 0x20, 0xfc, 0x50, 0xf8, 0x00, 0xa8, 0xa8, 0xac,
++ 0x04, 0xf8, 0xe8, 0xe8, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0d, 0x3e, 0x2f, 0x2e, 0x36,
++ 0x37, 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0xd8, 0x68, 0xd8, 0x68, 0x20, 0xd0,
++ 0x2c, 0xd0, 0x20, 0xc8, 0x30, 0xc0, 0x00, 0x00,
++ 0x00, 0x7f, 0x0c, 0x0c, 0x3e, 0x2e, 0x2e, 0x36,
++ 0x36, 0x22, 0x3e, 0x23, 0x3f, 0x22, 0x00, 0x00,
++ 0x20, 0x38, 0xfc, 0xb8, 0xe8, 0x98, 0xfc, 0xa0,
++ 0xf4, 0xb8, 0xd8, 0x34, 0x54, 0x30, 0x00, 0x00,
++ 0x00, 0x7f, 0x0d, 0x0d, 0x3f, 0x2f, 0x2e, 0x37,
++ 0x36, 0x22, 0x3e, 0x22, 0x3f, 0x22, 0x00, 0x00,
++ 0x60, 0xf8, 0x68, 0xf8, 0x68, 0xf8, 0x00, 0xfc,
++ 0xf8, 0x88, 0xf8, 0x50, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x0d, 0x0c, 0x3e, 0x2e, 0x2e, 0x36,
++ 0x36, 0x22, 0x3f, 0x22, 0x3e, 0x23, 0x00, 0x00,
++ 0x18, 0xe0, 0xfc, 0x20, 0xf8, 0xb8, 0xe8, 0xf8,
++ 0x20, 0xf8, 0xfc, 0x00, 0xe8, 0x54, 0x00, 0x00,
++ 0x00, 0x7f, 0x0d, 0x0d, 0x3f, 0x2e, 0x2f, 0x36,
++ 0x36, 0x23, 0x3e, 0x23, 0x3e, 0x23, 0x00, 0x00,
++ 0x20, 0xfc, 0xdc, 0x54, 0xdc, 0x50, 0xfc, 0xf8,
++ 0x50, 0xfc, 0x68, 0xd0, 0x68, 0x84, 0x00, 0x00,
++ 0x1b, 0x12, 0x1b, 0x1b, 0x3f, 0x2f, 0x5f, 0x14,
++ 0x1f, 0x1f, 0x07, 0x0f, 0x72, 0x0c, 0x00, 0x00,
++ 0xb0, 0x90, 0xb0, 0xb0, 0xfc, 0xe8, 0xf0, 0xd0,
++ 0xf0, 0xf0, 0xc0, 0xf0, 0x4c, 0xc0, 0x00, 0x00,
++ 0x03, 0x7d, 0x49, 0x2a, 0x2c, 0x7f, 0x18, 0x1c,
++ 0x1a, 0x29, 0x29, 0x48, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x02, 0x7d, 0x4b, 0x2b, 0x2c, 0x7f, 0x18, 0x1d,
++ 0x1a, 0x2b, 0x28, 0x49, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x68, 0xf8, 0x40, 0xf8, 0x40, 0xfc,
++ 0x90, 0xfc, 0x40, 0xf8, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x3e, 0x7f, 0x1c, 0x2a, 0x5f, 0x17, 0x14,
++ 0x17, 0x17, 0x1f, 0x20, 0x5f, 0x00, 0x00, 0x00,
++ 0x40, 0x7c, 0xd0, 0x30, 0xcc, 0xf8, 0xf0, 0x90,
++ 0xf0, 0xf0, 0xf8, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0f, 0x72, 0x00, 0x00,
++ 0x00, 0x70, 0x10, 0x10, 0x50, 0x50, 0x50, 0x50,
++ 0x90, 0x88, 0x88, 0x08, 0x04, 0x04, 0x00, 0x00,
++ 0x04, 0x04, 0x09, 0x11, 0x02, 0x04, 0x1f, 0x61,
++ 0x1f, 0x09, 0x05, 0x05, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x20, 0x10, 0x10, 0x80, 0x40, 0xf0, 0x0c,
++ 0xf0, 0x20, 0x20, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xc8, 0x48, 0x68,
++ 0x58, 0x4c, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xc8, 0xa8, 0x90, 0x50, 0x50,
++ 0x60, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xa8, 0xb8, 0xe8, 0xa8, 0xa8,
++ 0xa8, 0xb8, 0xa0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x88, 0x08, 0xe8, 0x08,
++ 0x28, 0xc8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1d, 0x19, 0x0e, 0x70, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x80, 0x80, 0xfc, 0x90, 0x90,
++ 0x90, 0x90, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x09, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x73, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xb0, 0xa8, 0xa8, 0x24, 0x2c,
++ 0x68, 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0f, 0x72, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0xa8, 0xa0,
++ 0xa0, 0xa0, 0x90, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x90, 0x90, 0x90, 0xfc, 0x90,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0f, 0x72, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0xc8, 0xc8, 0xa8,
++ 0xb0, 0x90, 0xb0, 0x28, 0x48, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x20, 0x28, 0x24, 0xfc, 0xa0, 0xa8, 0xa8, 0xa8,
++ 0x98, 0x90, 0x94, 0xec, 0xac, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0x90, 0xfc, 0x90, 0x90, 0x90,
++ 0xf0, 0x90, 0x90, 0x90, 0xf0, 0x90, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0x88, 0x88, 0x88,
++ 0xf8, 0x88, 0x80, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x13, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x28, 0xc8, 0x50,
++ 0x30, 0x20, 0x30, 0x48, 0xf4, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x88, 0xe8, 0xa8, 0xa8,
++ 0xe8, 0xa8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x88, 0x40, 0x40, 0x48,
++ 0x70, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x23, 0x5c, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1c, 0x18, 0x0e, 0x71, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x28, 0xf8, 0x20,
++ 0xfc, 0x24, 0x58, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xa8, 0xa8, 0xf8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xf8, 0x88, 0xe8, 0xa8, 0xa8,
++ 0xe8, 0xb0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x40, 0x80, 0xf8, 0x88,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x11, 0x11, 0x22, 0x4a, 0x0f, 0x11, 0x17, 0x31,
++ 0x55, 0x13, 0x13, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x00, 0x3c, 0x80, 0x40, 0xfc, 0x08, 0xc8, 0x08,
++ 0x48, 0x88, 0x08, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xf8, 0xa0, 0x20, 0xfc, 0x70,
++ 0x70, 0xa8, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0xe0, 0x20, 0x50, 0x50, 0x88, 0xfc, 0x20, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x10, 0x1b, 0x2a, 0x26, 0x7a, 0x12, 0x7e,
++ 0x12, 0x57, 0x38, 0x31, 0x1d, 0x62, 0x00, 0x00,
++ 0x40, 0x80, 0x38, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xa8, 0xb8, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x08, 0x7f,
++ 0x09, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xa8, 0xa8, 0xa8, 0x74,
++ 0x24, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x13, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0xfc, 0x70, 0xa8, 0x24, 0xf0,
++ 0x50, 0x5c, 0x94, 0x84, 0x04, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0xa8, 0xa4, 0x24, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0x20, 0x20, 0xfc, 0x80,
++ 0x80, 0x80, 0x80, 0x80, 0x80, 0x78, 0x00, 0x00,
++ 0x10, 0x13, 0x18, 0x24, 0x27, 0x7e, 0x12, 0x7f,
++ 0x12, 0x54, 0x38, 0x30, 0x1f, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xa0, 0xb8, 0x08, 0x08, 0xb8,
++ 0xa8, 0xa0, 0xa0, 0xa0, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x19, 0x25, 0x27, 0x7d, 0x11, 0x7d,
++ 0x12, 0x54, 0x38, 0x31, 0x1e, 0x64, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x00, 0xf8, 0x68, 0x68,
++ 0xe8, 0xb8, 0xa0, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x00, 0xf8, 0x88, 0x88, 0xf8,
++ 0x20, 0xb0, 0xa8, 0x24, 0x24, 0x60, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x13, 0x23, 0x5d, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x71, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0x48, 0xe8,
++ 0xa8, 0xa8, 0xe8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0xa8, 0xa8, 0x50, 0x50, 0xa8, 0xa8, 0x00, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x13, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2b, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x50, 0x48, 0x7c, 0xc8, 0x30, 0x74, 0x8c, 0x50,
++ 0x7c, 0xc8, 0x30, 0x64, 0x9c, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x0c, 0xf0, 0xa8, 0xa4, 0x04, 0xf8, 0x28, 0xfc,
++ 0x28, 0xf8, 0x28, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x13, 0x22, 0x5c, 0x09, 0x7f,
++ 0x08, 0x2b, 0x1c, 0x18, 0x0f, 0x72, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x68, 0x90, 0xd0, 0x28, 0xf8,
++ 0x48, 0x68, 0x90, 0x90, 0x68, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x09, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x71, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x20, 0x20, 0xfc, 0x20,
++ 0x38, 0x28, 0x48, 0x48, 0x88, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x09, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x60, 0x60, 0xa4, 0xa8,
++ 0xb0, 0xa0, 0xa0, 0xa4, 0xa4, 0x9c, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5c, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x70, 0x00, 0x00,
++ 0x10, 0xf8, 0x14, 0x14, 0xfc, 0x50, 0x50, 0x70,
++ 0x50, 0x50, 0x74, 0xcc, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x13, 0x23, 0x5d, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x71, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xd8, 0x48, 0x00, 0xf8,
++ 0x28, 0x28, 0xd0, 0x10, 0x28, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x09, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x00,
++ 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x18, 0x14, 0x27, 0x22, 0x7b, 0x12, 0x7f,
++ 0x13, 0x57, 0x3b, 0x32, 0x1c, 0x64, 0x00, 0x00,
++ 0x28, 0x24, 0x24, 0xfc, 0x20, 0xe8, 0x28, 0xe8,
++ 0x50, 0x50, 0xf4, 0x2c, 0x4c, 0x84, 0x00, 0x00,
++ 0x10, 0x10, 0x18, 0x25, 0x27, 0x78, 0x13, 0x7e,
++ 0x13, 0x56, 0x3b, 0x32, 0x1e, 0x62, 0x00, 0x00,
++ 0xc0, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xa8, 0xa8,
++ 0xa8, 0xd0, 0xd0, 0xa8, 0xa8, 0xa8, 0x00, 0x00,
++ 0x10, 0x10, 0x1b, 0x24, 0x24, 0x78, 0x10, 0x7c,
++ 0x13, 0x55, 0x39, 0x31, 0x1d, 0x61, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xf0, 0x90, 0xf0, 0x90,
++ 0xfc, 0x50, 0x54, 0x8c, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x22, 0x7c, 0x08, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x70, 0x00, 0x00,
++ 0xf0, 0x90, 0x08, 0xfc, 0x00, 0xf0, 0x90, 0x08,
++ 0xfc, 0x68, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x71, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x00, 0xf8, 0x88, 0xf8, 0x00,
++ 0xfc, 0x04, 0x74, 0x54, 0x74, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x23, 0x5d, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0e, 0x73, 0x00, 0x00,
++ 0x98, 0xe0, 0x84, 0x7c, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0xfc, 0xc8, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x22, 0x5c, 0x09, 0x7c,
++ 0x08, 0x2b, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x58, 0x48, 0xa8, 0x20, 0x50,
++ 0x88, 0xfc, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x12, 0x11, 0x19, 0x26, 0x25, 0x7d, 0x10, 0x7c,
++ 0x13, 0x55, 0x39, 0x31, 0x1e, 0x64, 0x00, 0x00,
++ 0x70, 0x10, 0x50, 0x48, 0x84, 0x78, 0x20, 0xfc,
++ 0x20, 0x30, 0x48, 0x88, 0x80, 0x7c, 0x00, 0x00,
++ 0x00, 0x1f, 0x1f, 0x12, 0x1f, 0x17, 0x27, 0x59,
++ 0x0e, 0x77, 0x1f, 0x09, 0x3f, 0x00, 0x00, 0x00,
++ 0x80, 0xfc, 0xf8, 0x48, 0xf8, 0x58, 0xe4, 0x3c,
++ 0xe0, 0xdc, 0xf0, 0x20, 0xf8, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x1a, 0x27, 0x26, 0x7b, 0x12, 0x7f,
++ 0x12, 0x55, 0x38, 0x30, 0x1f, 0x60, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xe8, 0x50, 0xd0, 0xa8, 0xc4,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x3e, 0x2a, 0x3e, 0x7f, 0x09,
++ 0x06, 0x7b, 0x1f, 0x09, 0x3f, 0x00, 0x00, 0x00,
++ 0x18, 0xe0, 0x80, 0xfc, 0x90, 0x90, 0x10, 0x10,
++ 0xc0, 0xbc, 0xf0, 0x20, 0xf8, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x22, 0x5c, 0x09, 0x7f,
++ 0x0b, 0x2b, 0x1d, 0x19, 0x0f, 0x71, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x08, 0x80, 0xfc, 0x20, 0x78,
++ 0x48, 0x78, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x10, 0x12, 0x1a, 0x26, 0x27, 0x7a, 0x10, 0x7c,
++ 0x13, 0x56, 0x3a, 0x32, 0x1c, 0x60, 0x00, 0x00,
++ 0xa0, 0xb8, 0xa8, 0xe8, 0xd0, 0xb0, 0xa8, 0xc8,
++ 0xfc, 0xc8, 0xa8, 0xa8, 0x88, 0x98, 0x00, 0x00,
++ 0x11, 0x11, 0x19, 0x25, 0x27, 0x79, 0x11, 0x7d,
++ 0x11, 0x55, 0x3a, 0x32, 0x1c, 0x61, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x7c, 0xe0, 0x20, 0xbc, 0xd0,
++ 0xfc, 0x90, 0xa8, 0xa8, 0xc4, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x5c, 0x09, 0x7f,
++ 0x09, 0x2b, 0x1c, 0x18, 0x0e, 0x73, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc, 0x54,
++ 0xfc, 0xf8, 0x88, 0x50, 0x70, 0x8c, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x13, 0x22, 0x5d, 0x08, 0x7e,
++ 0x09, 0x2a, 0x1c, 0x18, 0x0e, 0x71, 0x00, 0x00,
++ 0x00, 0xf8, 0xd8, 0x68, 0xd8, 0x68, 0x40, 0xa0,
++ 0x30, 0xcc, 0x20, 0xc8, 0x30, 0xc0, 0x00, 0x00,
++ 0x12, 0x11, 0x19, 0x24, 0x26, 0x79, 0x11, 0x7c,
++ 0x13, 0x55, 0x39, 0x31, 0x1e, 0x64, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0xa8, 0xf8, 0xa8,
++ 0xf8, 0x20, 0xfc, 0x20, 0xa0, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x13, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2b, 0x1c, 0x18, 0x0e, 0x71, 0x00, 0x00,
++ 0x20, 0xf8, 0xa8, 0xfc, 0xa8, 0xf8, 0xf8, 0xa8,
++ 0xf8, 0xfc, 0x50, 0xd0, 0x30, 0xc8, 0x00, 0x00,
++ 0x10, 0x13, 0x18, 0x27, 0x26, 0x7f, 0x12, 0x7c,
++ 0x13, 0x54, 0x3a, 0x32, 0x1c, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xb8, 0x08, 0xb8, 0xa8, 0xa0,
++ 0xfc, 0x40, 0xa8, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x10, 0x17, 0x18, 0x27, 0x26, 0x7b, 0x11, 0x7d,
++ 0x11, 0x55, 0x39, 0x33, 0x1c, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0xf0, 0x10,
++ 0xf0, 0x10, 0xf0, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x11, 0x11, 0x1f, 0x27, 0x26, 0x7a, 0x13, 0x7f,
++ 0x10, 0x55, 0x3b, 0x31, 0x1d, 0x63, 0x00, 0x00,
++ 0x20, 0x20, 0xe0, 0xa0, 0xbc, 0xe8, 0xe8, 0xa8,
++ 0x90, 0xd0, 0x30, 0x28, 0x48, 0x84, 0x00, 0x00,
++ 0x10, 0x11, 0x18, 0x27, 0x25, 0x7b, 0x11, 0x7d,
++ 0x13, 0x57, 0x38, 0x30, 0x1d, 0x62, 0x00, 0x00,
++ 0x40, 0xf8, 0x40, 0xfc, 0x10, 0xb8, 0x10, 0xbc,
++ 0x00, 0xfc, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x23, 0x5c, 0x08, 0x7f,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x70, 0x00, 0x00,
++ 0x18, 0xe8, 0xa8, 0x70, 0xfc, 0x70, 0xa8, 0x24,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0f, 0x70, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x54, 0x88, 0xfc, 0x88, 0xf8,
++ 0x88, 0xf8, 0xa8, 0xa4, 0x24, 0x60, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x13, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0e, 0x71, 0x00, 0x00,
++ 0x00, 0xfc, 0x54, 0xfc, 0x00, 0xfc, 0x00, 0xf8,
++ 0x88, 0xf8, 0x64, 0xd8, 0x68, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x13, 0x23, 0x5d, 0x09, 0x7f,
++ 0x08, 0x2b, 0x1d, 0x19, 0x0f, 0x71, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x20, 0xf8, 0xf8, 0x20, 0xfc,
++ 0x00, 0xdc, 0x54, 0x74, 0x04, 0x0c, 0x00, 0x00,
++ 0x11, 0x13, 0x19, 0x27, 0x24, 0x7b, 0x12, 0x7f,
++ 0x13, 0x55, 0x3b, 0x31, 0x1f, 0x60, 0x00, 0x00,
++ 0x30, 0xe8, 0x28, 0xfc, 0x20, 0xa8, 0xa8, 0xa8,
++ 0xd8, 0x10, 0x94, 0xec, 0x4c, 0x84, 0x00, 0x00,
++ 0x10, 0x10, 0x1b, 0x24, 0x27, 0x78, 0x13, 0x7e,
++ 0x13, 0x56, 0x39, 0x31, 0x1e, 0x60, 0x00, 0x00,
++ 0xa0, 0xb0, 0xe8, 0xa8, 0xfc, 0x20, 0xe8, 0x68,
++ 0xd8, 0x50, 0x94, 0xec, 0x2c, 0x44, 0x00, 0x00,
++ 0x09, 0x08, 0x15, 0x13, 0x22, 0x5c, 0x08, 0x7e,
++ 0x09, 0x2b, 0x1d, 0x19, 0x0f, 0x71, 0x00, 0x00,
++ 0x24, 0xa8, 0xfc, 0x08, 0xf8, 0x88, 0xf8, 0x00,
++ 0xfc, 0x24, 0xfc, 0x24, 0xfc, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x13, 0x23, 0x5d, 0x09, 0x7e,
++ 0x09, 0x2a, 0x1c, 0x19, 0x0c, 0x71, 0x00, 0x00,
++ 0x50, 0x3c, 0xd4, 0xb4, 0x6c, 0x94, 0xfc, 0x54,
++ 0xcc, 0x70, 0xd0, 0x20, 0x50, 0x8c, 0x00, 0x00,
++ 0x00, 0x3e, 0x29, 0x3e, 0x25, 0x3d, 0x29, 0x3f,
++ 0x06, 0x7b, 0x1f, 0x09, 0x3f, 0x00, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0x00, 0xf8, 0x68, 0xf8, 0x00,
++ 0xc0, 0xbc, 0xf0, 0x20, 0xf8, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x18, 0x25, 0x27, 0x79, 0x10, 0x7d,
++ 0x13, 0x54, 0x3b, 0x32, 0x1f, 0x60, 0x00, 0x00,
++ 0x40, 0xfc, 0x40, 0xf0, 0xfc, 0xe8, 0x40, 0xf0,
++ 0xfc, 0x08, 0xfc, 0xc8, 0xa8, 0x18, 0x00, 0x00,
++ 0x10, 0x13, 0x1a, 0x27, 0x26, 0x7a, 0x13, 0x7e,
++ 0x12, 0x56, 0x3a, 0x32, 0x1c, 0x67, 0x00, 0x00,
++ 0x20, 0xfc, 0x50, 0xfc, 0x50, 0x70, 0xfc, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x12, 0x12, 0x15, 0x2d, 0x26, 0x7a, 0x15, 0x7f,
++ 0x10, 0x57, 0x38, 0x31, 0x1e, 0x60, 0x00, 0x00,
++ 0x48, 0x88, 0xf4, 0xb4, 0xe8, 0xa8, 0xf4, 0x5c,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0x1b, 0x26, 0x27, 0x7a, 0x12, 0x7e,
++ 0x12, 0x56, 0x3a, 0x32, 0x1c, 0x65, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0x68, 0xb8, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0x28, 0xd4, 0xcc, 0x38, 0x00, 0x00,
++ 0x11, 0x11, 0x1a, 0x25, 0x27, 0x7a, 0x13, 0x7f,
++ 0x13, 0x56, 0x3b, 0x32, 0x1f, 0x64, 0x00, 0x00,
++ 0x50, 0x50, 0xa0, 0x50, 0xf8, 0xe8, 0x98, 0xf8,
++ 0x68, 0xd8, 0x68, 0xdc, 0x64, 0x84, 0x00, 0x00,
++ 0x10, 0x10, 0x1b, 0x26, 0x27, 0x7a, 0x12, 0x7e,
++ 0x12, 0x56, 0x3b, 0x35, 0x1d, 0x67, 0x00, 0x00,
++ 0x40, 0x78, 0xfc, 0x68, 0xb8, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0xf8, 0x68, 0x68, 0xfc, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x22, 0x5c, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x19, 0x0f, 0x72, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8,
++ 0x88, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x19, 0x27, 0x24, 0x7f, 0x15, 0x7f,
++ 0x13, 0x56, 0x3b, 0x32, 0x1e, 0x62, 0x00, 0x00,
++ 0x40, 0xa0, 0x10, 0xfc, 0x00, 0xfc, 0xb4, 0xfc,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0xa8, 0xb8, 0x00, 0x00,
++ 0x10, 0x17, 0x18, 0x27, 0x26, 0x7b, 0x10, 0x7d,
++ 0x13, 0x55, 0x39, 0x31, 0x1d, 0x61, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xb8, 0xa8, 0xb8, 0x90, 0xfc,
++ 0x20, 0xf8, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x13, 0x18, 0x24, 0x24, 0x7b, 0x10, 0x7f,
++ 0x12, 0x57, 0x3b, 0x32, 0x1f, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x90, 0xf0, 0xf0, 0xf0, 0x10, 0xfc,
++ 0xa8, 0xb8, 0xb8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x11, 0x11, 0x1a, 0x27, 0x25, 0x7a, 0x11, 0x7d,
++ 0x11, 0x55, 0x39, 0x31, 0x1d, 0x66, 0x00, 0x00,
++ 0x98, 0xfc, 0xa8, 0xfc, 0xd8, 0xac, 0xfc, 0x08,
++ 0xf8, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x13, 0x22, 0x5d, 0x08, 0x7e,
++ 0x08, 0x2a, 0x1c, 0x18, 0x0e, 0x73, 0x00, 0x00,
++ 0x90, 0xf8, 0x90, 0xfc, 0xd0, 0x28, 0xfc, 0x88,
++ 0xf8, 0xf8, 0x88, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x1a, 0x27, 0x25, 0x79, 0x16, 0x7d,
++ 0x12, 0x57, 0x39, 0x33, 0x1d, 0x61, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0x28, 0x50, 0xfc, 0x50,
++ 0xf8, 0xd0, 0x78, 0xd0, 0x7c, 0x40, 0x00, 0x00,
++ 0x13, 0x17, 0x6b, 0x17, 0x7f, 0x3a, 0x57, 0x11,
++ 0x06, 0x7b, 0x1f, 0x09, 0x3f, 0x00, 0x00, 0x00,
++ 0x90, 0xd4, 0xe8, 0x98, 0xfc, 0xb8, 0xd4, 0x10,
++ 0xc0, 0xbc, 0xf0, 0x20, 0xf8, 0x00, 0x00, 0x00,
++ 0x13, 0x12, 0x1b, 0x27, 0x27, 0x79, 0x13, 0x7d,
++ 0x11, 0x55, 0x3b, 0x30, 0x1c, 0x63, 0x00, 0x00,
++ 0xb8, 0xa8, 0xb8, 0xb8, 0xb8, 0xfc, 0xf8, 0xf8,
++ 0x20, 0xfc, 0xf8, 0x90, 0x60, 0x9c, 0x00, 0x00,
++ 0x2d, 0x7f, 0x12, 0x3f, 0x7f, 0x2b, 0x3b, 0x3f,
++ 0x06, 0x7b, 0x1f, 0x09, 0x3f, 0x00, 0x00, 0x00,
++ 0x70, 0xd0, 0x54, 0x8c, 0xf8, 0x50, 0xf0, 0x0c,
++ 0xc0, 0xbc, 0xf0, 0x20, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x20,
++ 0x2f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x08,
++ 0xe8, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x2f,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xe8,
++ 0x08, 0x88, 0x48, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x29,
++ 0x29, 0x29, 0x29, 0x2f, 0x28, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x28,
++ 0x28, 0x28, 0x28, 0xe8, 0x28, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x21,
++ 0x2f, 0x22, 0x21, 0x22, 0x2c, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x08,
++ 0xe8, 0x88, 0x08, 0x88, 0x68, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x21,
++ 0x2f, 0x23, 0x25, 0x29, 0x23, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x28,
++ 0xc8, 0x88, 0x48, 0x28, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x27,
++ 0x25, 0x27, 0x25, 0x27, 0x21, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xc8,
++ 0x48, 0xc8, 0x48, 0xc8, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x3f,
++ 0x21, 0x2f, 0x29, 0x29, 0x29, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xf8,
++ 0x08, 0xe8, 0x28, 0x28, 0xc8, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x2f,
++ 0x21, 0x27, 0x21, 0x21, 0x2f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xe8,
++ 0x08, 0xc8, 0x88, 0x48, 0xe8, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x27,
++ 0x21, 0x2f, 0x27, 0x21, 0x2f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xc8,
++ 0x08, 0xe8, 0xc8, 0x08, 0xe8, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x22,
++ 0x2f, 0x22, 0x2f, 0x22, 0x2c, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0x88,
++ 0xe8, 0x88, 0xe8, 0x88, 0x48, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x27, 0x24,
++ 0x27, 0x22, 0x27, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xc8, 0x48,
++ 0xc8, 0x08, 0xc8, 0x48, 0xc8, 0x58, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x24, 0x3f,
++ 0x24, 0x27, 0x25, 0x29, 0x36, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x48, 0x48,
++ 0xa8, 0xd8, 0x28, 0xc8, 0x28, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x23, 0x24,
++ 0x29, 0x26, 0x26, 0x24, 0x27, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xc8, 0x48,
++ 0x88, 0xc8, 0xc8, 0x48, 0xc8, 0x58, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x21, 0x3f,
++ 0x27, 0x2d, 0x37, 0x27, 0x25, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x08, 0xf8,
++ 0xc8, 0x68, 0xd8, 0xc8, 0x28, 0xf8, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x20, 0x3f,
++ 0x2e, 0x2a, 0x2e, 0x26, 0x39, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xc8, 0x68, 0xe8, 0x28, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x28, 0x25,
++ 0x33, 0x28, 0x25, 0x25, 0x29, 0x29, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x68, 0x88,
++ 0xf8, 0x88, 0xe8, 0x28, 0xe8, 0x38, 0x00, 0x00,
++ 0x20, 0x1f, 0x19, 0x4f, 0x29, 0x2f, 0x08, 0x1b,
++ 0x1f, 0x28, 0x2b, 0x4a, 0x4b, 0x4a, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x78, 0x48, 0x78, 0x68, 0x88,
++ 0xf8, 0x88, 0xe8, 0x28, 0xe8, 0x38, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x3e, 0x27, 0x24, 0x27,
++ 0x27, 0x27, 0x21, 0x2f, 0x22, 0x2c, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0xc8, 0x48, 0xc8,
++ 0xc8, 0xc8, 0x48, 0xe8, 0x88, 0x78, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x3e, 0x21, 0x27, 0x2f,
++ 0x21, 0x27, 0x3b, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0x28, 0xc8, 0xe8,
++ 0x48, 0xe8, 0xc8, 0x48, 0xc8, 0x58, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x3e, 0x21, 0x2f, 0x27,
++ 0x25, 0x27, 0x27, 0x23, 0x2d, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0x08, 0xe8, 0xc8,
++ 0x48, 0xc8, 0xc8, 0x88, 0x68, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x29, 0x26,
++ 0x3f, 0x25, 0x2d, 0x2f, 0x24, 0x29, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x88,
++ 0xf8, 0x68, 0x48, 0x48, 0xa8, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x3e, 0x21, 0x27, 0x2f,
++ 0x22, 0x2f, 0x27, 0x27, 0x2f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0x08, 0xc8, 0xe8,
++ 0x48, 0xe8, 0xc8, 0x48, 0xe8, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x3e, 0x27, 0x25, 0x27,
++ 0x27, 0x25, 0x27, 0x2e, 0x2d, 0x30, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0xe8, 0x08, 0xc8,
++ 0xc8, 0x08, 0xe8, 0xa8, 0x68, 0xd8, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x24, 0x3b,
++ 0x26, 0x3f, 0x2a, 0x2e, 0x24, 0x28, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x48, 0xa8,
++ 0x68, 0xf8, 0xa8, 0xe8, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x3e, 0x2e, 0x2a, 0x2e,
++ 0x27, 0x25, 0x27, 0x27, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0xe8, 0xa8, 0xe8,
++ 0xc8, 0x48, 0xc8, 0xc8, 0xf8, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x3e, 0x28, 0x25, 0x2b,
++ 0x25, 0x23, 0x2d, 0x27, 0x24, 0x2b, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0xf8, 0x88, 0xc8, 0xe8,
++ 0x48, 0xe8, 0xc8, 0xe8, 0x88, 0xf8, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x2e, 0x2b,
++ 0x2e, 0x29, 0x2e, 0x3b, 0x2e, 0x28, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x48, 0xf8,
++ 0xa8, 0xf8, 0x48, 0xf8, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x28, 0x30, 0x28, 0x27, 0x24,
++ 0x24, 0x24, 0x38, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x30, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x29, 0x31, 0x29, 0x25, 0x25,
++ 0x25, 0x25, 0x3a, 0x22, 0x24, 0x28, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x00, 0x78, 0x48, 0x48, 0x48,
++ 0x48, 0x70, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x3d, 0x24, 0x28, 0x30, 0x2b, 0x24, 0x24,
++ 0x24, 0x24, 0x39, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0xa0, 0xa0,
++ 0xa0, 0xa0, 0x24, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x29, 0x31, 0x29, 0x25, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0x40, 0x78, 0x40, 0x40,
++ 0x40, 0x40, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x29, 0x31, 0x29, 0x25, 0x25,
++ 0x25, 0x25, 0x3a, 0x22, 0x24, 0x2b, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x28, 0x20, 0xf8, 0x88,
++ 0x50, 0x50, 0x20, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x28, 0x30, 0x29, 0x25, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0x80, 0xf8, 0x08, 0x08,
++ 0xf8, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x2b, 0x30, 0x28, 0x25, 0x26,
++ 0x24, 0x24, 0x38, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x80, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x00, 0x39, 0x28, 0x2a, 0x32, 0x32, 0x2a, 0x2a,
++ 0x2a, 0x2a, 0x3a, 0x22, 0x23, 0x22, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xd8,
++ 0x98, 0x88, 0x98, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x29, 0x31, 0x2a, 0x24, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x80, 0xf8, 0x88, 0x08, 0x08, 0x30, 0x40, 0xb8,
++ 0x08, 0xb8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x2b, 0x31, 0x29, 0x25, 0x26,
++ 0x24, 0x24, 0x38, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x50, 0x50, 0x50, 0xe8,
++ 0x48, 0xa0, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3d, 0x24, 0x28, 0x33, 0x28, 0x25, 0x26,
++ 0x24, 0x27, 0x38, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x30, 0xd0, 0x90, 0x90, 0xfc, 0x90, 0x10, 0x50,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x2b, 0x30, 0x2b, 0x25, 0x25,
++ 0x26, 0x24, 0x38, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0xfc, 0x40, 0x58, 0x48, 0x48,
++ 0xd4, 0xa4, 0xa0, 0x10, 0x08, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x28, 0x30, 0x2b, 0x24, 0x24,
++ 0x24, 0x25, 0x3a, 0x20, 0x20, 0x23, 0x00, 0x00,
++ 0x20, 0x20, 0xb8, 0xa0, 0xa0, 0xfc, 0x20, 0xa4,
++ 0xa4, 0x28, 0x70, 0x20, 0xc0, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x27, 0x28, 0x31, 0x28, 0x27, 0x24,
++ 0x27, 0x39, 0x22, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x90,
++ 0xfc, 0x90, 0x50, 0x50, 0x10, 0x30, 0x00, 0x00,
++ 0x00, 0x3d, 0x24, 0x2b, 0x31, 0x29, 0x27, 0x25,
++ 0x25, 0x27, 0x38, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x18, 0xe0, 0x40, 0xf8, 0x50, 0x50, 0xfc, 0x50,
++ 0x50, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x2a, 0x2a, 0x33, 0x32, 0x2a, 0x2b,
++ 0x2a, 0x2a, 0x3b, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0x80, 0xf8, 0xa8, 0xa8, 0xa8,
++ 0xb0, 0x90, 0xb0, 0xa8, 0xc8, 0x84, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x29, 0x31, 0x29, 0x25, 0x24,
++ 0x27, 0x24, 0x39, 0x20, 0x27, 0x20, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x00,
++ 0xfc, 0x40, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x2a, 0x30, 0x28, 0x24, 0x25,
++ 0x27, 0x25, 0x39, 0x21, 0x23, 0x20, 0x00, 0x00,
++ 0xf0, 0x90, 0x08, 0xf4, 0x00, 0xf0, 0x90, 0x08,
++ 0xfc, 0x68, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x29, 0x30, 0x29, 0x25, 0x25,
++ 0x25, 0x25, 0x39, 0x21, 0x21, 0x26, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x00, 0xf8, 0x08, 0xf8,
++ 0x08, 0xf8, 0x08, 0xf8, 0x98, 0x04, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x29, 0x31, 0x29, 0x25, 0x25,
++ 0x24, 0x24, 0x38, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0x48, 0xf8, 0x48, 0xf8,
++ 0xd0, 0xd0, 0xe8, 0x7c, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x38, 0x28, 0x29, 0x33, 0x34, 0x2b, 0x2a,
++ 0x2a, 0x2b, 0x39, 0x21, 0x22, 0x24, 0x00, 0x00,
++ 0x40, 0x40, 0xa0, 0x10, 0xf8, 0x04, 0xb8, 0xa8,
++ 0xa8, 0xb8, 0x10, 0x98, 0x64, 0x44, 0x00, 0x00,
++ 0x04, 0x3a, 0x2a, 0x29, 0x34, 0x32, 0x2b, 0x28,
++ 0x2f, 0x2a, 0x3b, 0x22, 0x25, 0x28, 0x00, 0x00,
++ 0x70, 0x50, 0x88, 0xfc, 0x20, 0x64, 0xb4, 0x58,
++ 0xb8, 0x54, 0x94, 0x10, 0x60, 0xfc, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x2b, 0x30, 0x29, 0x25, 0x24,
++ 0x27, 0x25, 0x38, 0x22, 0x22, 0x24, 0x00, 0x00,
++ 0x18, 0xe8, 0x24, 0xf4, 0x40, 0xf0, 0xf8, 0x08,
++ 0xfc, 0xf8, 0x48, 0xa4, 0x94, 0x70, 0x00, 0x00,
++ 0x00, 0x3c, 0x25, 0x2a, 0x31, 0x29, 0x25, 0x25,
++ 0x25, 0x25, 0x39, 0x23, 0x22, 0x24, 0x00, 0x00,
++ 0x20, 0xa8, 0x6c, 0x34, 0xc0, 0xfc, 0x20, 0xf8,
++ 0xf8, 0x20, 0xfc, 0x54, 0xac, 0x18, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x29, 0x31, 0x29, 0x24, 0x27,
++ 0x24, 0x25, 0x3b, 0x20, 0x22, 0x24, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xf8, 0x08, 0xf8, 0x88, 0x74,
++ 0x88, 0x54, 0xfc, 0x00, 0xa8, 0x54, 0x00, 0x00,
++ 0x01, 0x39, 0x2f, 0x2a, 0x37, 0x30, 0x2b, 0x2a,
++ 0x2b, 0x3a, 0x23, 0x22, 0x22, 0x22, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0xa0, 0xf8, 0x08, 0xb8, 0xa0,
++ 0xb8, 0xb8, 0xa0, 0xb8, 0xa4, 0x9c, 0x00, 0x00,
++ 0x01, 0x01, 0x1f, 0x01, 0x7f, 0x01, 0x1f, 0x11,
++ 0x09, 0x0b, 0x0d, 0x71, 0x01, 0x03, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x10, 0xfc, 0x10, 0xf0, 0x10,
++ 0x90, 0xa0, 0x40, 0x30, 0x0c, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x1c, 0x1b, 0x2a, 0x48, 0x3e,
++ 0x00, 0x7e, 0x2c, 0x2b, 0x4a, 0x18, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x28, 0xfc, 0x28, 0xf8, 0x28,
++ 0xa4, 0x78, 0x70, 0xa8, 0x24, 0x60, 0x00, 0x00,
++ 0x04, 0x04, 0x04, 0x0f, 0x08, 0x18, 0x2f, 0x48,
++ 0x08, 0x0f, 0x08, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xfc, 0x40, 0x40, 0xf8, 0x40,
++ 0x40, 0xf8, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x25, 0x26, 0x3c,
++ 0x24, 0x24, 0x26, 0x38, 0x60, 0x00, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x04, 0x04, 0x0f, 0x08, 0x1f, 0x28, 0x4f, 0x08,
++ 0x0f, 0x1e, 0x12, 0x13, 0x12, 0x10, 0x00, 0x00,
++ 0x20, 0x40, 0xfc, 0x40, 0xf0, 0x40, 0xf0, 0x40,
++ 0xfc, 0x78, 0x48, 0xc8, 0x48, 0x18, 0x00, 0x00,
++ 0x10, 0x10, 0x10, 0x1e, 0x28, 0x49, 0x7f, 0x08,
++ 0x08, 0x14, 0x12, 0x22, 0x40, 0x00, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x10, 0x14, 0x65, 0x29, 0x1b,
++ 0x15, 0x1d, 0x65, 0x09, 0x11, 0x21, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x90, 0x90, 0xfc, 0x20, 0xf8,
++ 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x10, 0x10, 0x11, 0x7f, 0x09, 0x0b, 0x15, 0x39,
++ 0x54, 0x17, 0x10, 0x11, 0x16, 0x10, 0x00, 0x00,
++ 0x90, 0xa0, 0xfc, 0x20, 0xf8, 0xf8, 0x20, 0xfc,
++ 0x40, 0xfc, 0xe0, 0x50, 0x4c, 0x40, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x12, 0x12, 0x2d, 0x49, 0x08,
++ 0x7f, 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x00, 0x3f, 0x01, 0x3f, 0x3d, 0x5d, 0x05, 0x0f,
++ 0x18, 0x6f, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x00, 0xfc, 0x78, 0x70, 0x40, 0xf8,
++ 0x80, 0xf0, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3f, 0x25, 0x25, 0x3f, 0x25, 0x3f, 0x25,
++ 0x2f, 0x2b, 0x2f, 0x2b, 0x21, 0x43, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0x7c, 0xd0, 0xd0, 0x78, 0x50,
++ 0x50, 0x78, 0x50, 0x50, 0x7c, 0x40, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x02, 0x07,
++ 0x18, 0x6f, 0x08, 0x0f, 0x08, 0x07, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x00, 0xf0,
++ 0x10, 0x90, 0x90, 0xe4, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x05, 0x19,
++ 0x6f, 0x08, 0x0f, 0x0f, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x60, 0x18,
++ 0xe4, 0x20, 0xe0, 0xe0, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x00, 0x3d,
++ 0x08, 0x3f, 0x12, 0x0c, 0x1e, 0x61, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x18, 0xe0,
++ 0x20, 0xfc, 0x20, 0xf8, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x10,
++ 0x4f, 0x20, 0x0b, 0x12, 0x22, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x08, 0x70, 0x70, 0x40,
++ 0xfc, 0x40, 0xf8, 0x48, 0x70, 0x40, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x03, 0x1c,
++ 0x1e, 0x10, 0x1f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x00, 0xf0,
++ 0xf0, 0x10, 0xf0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x01, 0x3f,
++ 0x04, 0x7f, 0x3f, 0x0e, 0x03, 0x3c, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x00, 0xf8,
++ 0x40, 0xfc, 0xf8, 0x40, 0xc0, 0x30, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x10,
++ 0x48, 0x20, 0x0b, 0x12, 0x23, 0x22, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x08, 0x70, 0x70, 0x40,
++ 0x7c, 0x40, 0xf8, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x02,
++ 0x3e, 0x02, 0x3e, 0x02, 0x7c, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x08, 0x70, 0x70, 0x80,
++ 0xf8, 0x80, 0xf8, 0x80, 0xfc, 0x80, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x21, 0x5d, 0x1d, 0x08,
++ 0x7f, 0x1c, 0x1a, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x08, 0x70, 0x70, 0x20,
++ 0xfc, 0x70, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x04, 0x7f,
++ 0x05, 0x0f, 0x09, 0x7f, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x40, 0xfc,
++ 0x40, 0xe0, 0x20, 0xfc, 0xc0, 0x38, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x1e, 0x12,
++ 0x3d, 0x0f, 0x0f, 0x09, 0x0f, 0x08, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0xf8, 0x48,
++ 0x98, 0xe0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x10, 0x0b,
++ 0x46, 0x21, 0x0f, 0x10, 0x23, 0x20, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x18, 0xf0,
++ 0x4c, 0xf0, 0xfc, 0x40, 0xf8, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x3f, 0x14,
++ 0x7f, 0x1f, 0x1e, 0x1e, 0x12, 0x17, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x40, 0x7c,
++ 0x90, 0x50, 0x20, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x1e, 0x12,
++ 0x1e, 0x11, 0x3e, 0x53, 0x1e, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x20, 0xf8,
++ 0x50, 0xfc, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x01, 0x7f,
++ 0x3e, 0x15, 0x6d, 0x07, 0x0f, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0x00, 0xfc,
++ 0xf8, 0x50, 0x7c, 0xe0, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x0d, 0x79,
++ 0x2f, 0x79, 0x35, 0x1c, 0x67, 0x18, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0xf0, 0x50,
++ 0xf0, 0xf0, 0xf8, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x1c, 0x7f,
++ 0x1c, 0x1c, 0x3e, 0x23, 0x3e, 0x22, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0xf8, 0x88,
++ 0xf8, 0xf8, 0x7c, 0xd4, 0xfc, 0x98, 0x00, 0x00,
++ 0x00, 0x3f, 0x08, 0x3e, 0x2a, 0x7f, 0x3e, 0x08,
++ 0x3c, 0x01, 0x7e, 0x14, 0x3e, 0x43, 0x00, 0x00,
++ 0x10, 0x10, 0xf8, 0x98, 0x7c, 0x18, 0xf8, 0xd4,
++ 0x38, 0xb8, 0xd4, 0x94, 0xf0, 0x3c, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x3b, 0x2a,
++ 0x3b, 0x3f, 0x09, 0x35, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0xb8, 0xa8,
++ 0xb8, 0xf8, 0x30, 0x48, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x01, 0x3f, 0x3d, 0x5d, 0x3f, 0x2e,
++ 0x3f, 0x2e, 0x35, 0x24, 0x24, 0x5f, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0x78, 0x70, 0xfc, 0x70,
++ 0xfc, 0x70, 0xa8, 0xf0, 0x80, 0xfc, 0x00, 0x00,
++ 0x00, 0x3e, 0x08, 0x3e, 0x2b, 0x7f, 0x3e, 0x08,
++ 0x3d, 0x00, 0x7e, 0x15, 0x1e, 0x63, 0x00, 0x00,
++ 0x0c, 0xf4, 0xa8, 0x50, 0xfc, 0x28, 0xd8, 0xf4,
++ 0x44, 0x78, 0xc8, 0x30, 0x70, 0x8c, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3f, 0x08, 0x7f, 0x3f,
++ 0x2a, 0x2a, 0x3e, 0x22, 0x22, 0x26, 0x00, 0x00,
++ 0x18, 0xf0, 0xa8, 0xa4, 0x04, 0xf8, 0x28, 0xfc,
++ 0x28, 0xf8, 0x28, 0x20, 0x20, 0x60, 0x00, 0x00,
++ 0x09, 0x0f, 0x11, 0x7f, 0x0f, 0x08, 0x0f, 0x7e,
++ 0x02, 0x3e, 0x03, 0x7c, 0x0c, 0x30, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xfc, 0xe0, 0x20, 0xe0, 0xfc,
++ 0x80, 0xf8, 0x80, 0xfc, 0x80, 0x80, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x10, 0x3f, 0x2b, 0x2b, 0x2f,
++ 0x2b, 0x2f, 0x2b, 0x2b, 0x3f, 0x21, 0x00, 0x00,
++ 0x40, 0xc0, 0x40, 0x78, 0x88, 0xf8, 0x58, 0x58,
++ 0x78, 0x50, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x08, 0x3f, 0x2a, 0x2a, 0x2e,
++ 0x2a, 0x2e, 0x2a, 0x2a, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xf8, 0xc8, 0xf8, 0xc8,
++ 0xf8, 0xb0, 0xb0, 0xd4, 0xd4, 0x8c, 0x00, 0x00,
++ 0x00, 0x1f, 0x17, 0x17, 0x1f, 0x2f, 0x4f, 0x09,
++ 0x7f, 0x1f, 0x13, 0x13, 0x1f, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x18, 0x14, 0xfc, 0x90, 0xa8, 0xc4,
++ 0xfc, 0xf0, 0x90, 0x90, 0xf0, 0x10, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1d, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x48,
++ 0x48, 0x48, 0x88, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x14, 0x15, 0x7e, 0x14, 0x1c, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0xc8, 0xa8, 0xa8, 0x48, 0x50, 0x50,
++ 0x20, 0x20, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x14, 0x15, 0x7e, 0x14, 0x1d, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0xc8, 0x48, 0x68,
++ 0x58, 0x4c, 0xc8, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x15, 0x1d, 0x09, 0x3f, 0x2b,
++ 0x3f, 0x09, 0x7f, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0xc0, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x68, 0x98,
++ 0x98, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1c, 0x08, 0x3e, 0x2b,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xfc,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1c, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x0b, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x88,
++ 0x88, 0xf8, 0x88, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1c, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x09, 0x0a, 0x09, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0xa8, 0xb0, 0xa0, 0xf8, 0xc8,
++ 0xc8, 0xb0, 0x30, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x15, 0x1c, 0x08, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x70,
++ 0x70, 0xa8, 0x24, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x14, 0x15, 0x7e, 0x14, 0x1d, 0x09, 0x3f, 0x2b,
++ 0x3f, 0x09, 0x7f, 0x09, 0x09, 0x09, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0x40, 0xf8, 0x48, 0x48, 0x68,
++ 0x98, 0x98, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1c, 0x09, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x09, 0x08, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x7f, 0x09, 0x09, 0x0f, 0x72, 0x04, 0x7f,
++ 0x07, 0x0f, 0x09, 0x0f, 0x7f, 0x01, 0x00, 0x00,
++ 0x00, 0xf0, 0x90, 0x54, 0x54, 0x0c, 0x40, 0xfc,
++ 0xc0, 0xe0, 0x20, 0xe0, 0xfc, 0x00, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1c, 0x09, 0x3e, 0x2b,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x40, 0x40, 0xfc, 0x00, 0xfc,
++ 0x60, 0x50, 0x50, 0x40, 0x40, 0x40, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1c, 0x09, 0x3e, 0x2a,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x20, 0x24, 0xf8, 0x70, 0xa8, 0x24, 0x60, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x14, 0x14, 0x7e, 0x14, 0x1c, 0x08, 0x3e, 0x2a,
++ 0x3f, 0x08, 0x7e, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x40, 0xfc,
++ 0xa4, 0xb4, 0xcc, 0xfc, 0x84, 0x18, 0x00, 0x00,
++ 0x28, 0x28, 0x7f, 0x28, 0x38, 0x13, 0x7c, 0x55,
++ 0x7d, 0x12, 0x7e, 0x14, 0x10, 0x10, 0x00, 0x00,
++ 0x50, 0x90, 0x90, 0x94, 0xb4, 0xf4, 0xb8, 0xd0,
++ 0xd0, 0xe8, 0xa8, 0xa8, 0xc4, 0x84, 0x00, 0x00,
++ 0x14, 0x15, 0x7e, 0x14, 0x1d, 0x08, 0x3e, 0x2b,
++ 0x3e, 0x09, 0x7f, 0x08, 0x09, 0x08, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x20, 0xfc, 0x68, 0xb0, 0x60,
++ 0x20, 0xfc, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x14, 0x14, 0x7f, 0x14, 0x1c, 0x08, 0x3e, 0x2b,
++ 0x3e, 0x08, 0x7f, 0x08, 0x08, 0x08, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x20, 0x50, 0x88, 0xfc,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x28, 0x28, 0x7f, 0x28, 0x39, 0x11, 0x7d, 0x55,
++ 0x7d, 0x11, 0x7e, 0x12, 0x14, 0x10, 0x00, 0x00,
++ 0x90, 0x90, 0xfc, 0x90, 0xfc, 0x00, 0xf8, 0xa8,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0xa8, 0x98, 0x00, 0x00,
++ 0x2a, 0x29, 0x7d, 0x28, 0x3a, 0x11, 0x7d, 0x54,
++ 0x7f, 0x11, 0x7d, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0xfc, 0x50, 0xfc, 0x20,
++ 0xf8, 0x20, 0xfc, 0x20, 0xa0, 0x7c, 0x00, 0x00,
++ 0x2a, 0x29, 0x7d, 0x28, 0x3a, 0x11, 0x7d, 0x54,
++ 0x7f, 0x11, 0x7d, 0x11, 0x12, 0x14, 0x00, 0x00,
++ 0x00, 0xfc, 0x30, 0xfc, 0xb4, 0xfc, 0x20, 0xfc,
++ 0x78, 0xd4, 0x70, 0x48, 0xb8, 0x7c, 0x00, 0x00,
++ 0x28, 0x2f, 0x7c, 0x2b, 0x3a, 0x13, 0x7c, 0x57,
++ 0x7e, 0x13, 0x7e, 0x12, 0x14, 0x14, 0x00, 0x00,
++ 0xa0, 0xfc, 0xa0, 0xf8, 0xa8, 0xf8, 0x48, 0xfc,
++ 0x48, 0x28, 0xb0, 0x94, 0x2c, 0x44, 0x00, 0x00,
++ 0x01, 0x1f, 0x02, 0x7f, 0x00, 0x0f, 0x08, 0x0f,
++ 0x00, 0x0f, 0x08, 0x7f, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xfc, 0x00, 0xe0, 0x20, 0xe0,
++ 0x40, 0xf8, 0x40, 0xfc, 0x40, 0x40, 0x00, 0x00,
++ 0x08, 0x3e, 0x12, 0x7f, 0x01, 0x3e, 0x22, 0x3e,
++ 0x04, 0x3e, 0x24, 0x7f, 0x04, 0x04, 0x00, 0x00,
++ 0x18, 0xf0, 0xa8, 0xa4, 0x04, 0x20, 0xd8, 0x88,
++ 0x88, 0xd8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x02, 0x02, 0x02, 0x3e, 0x02, 0x02, 0x3e, 0x02,
++ 0x02, 0x3e, 0x02, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x78, 0x40, 0x40, 0x78, 0x40,
++ 0x40, 0x78, 0x40, 0x40, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x7f, 0x3e, 0x15, 0x2d, 0x51, 0x1f, 0x1f,
++ 0x12, 0x16, 0x16, 0x16, 0x2f, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x50, 0x68, 0x14, 0xf0, 0xf0,
++ 0x90, 0xd0, 0xd0, 0xd0, 0xf0, 0x10, 0x00, 0x00,
++ 0x01, 0x7f, 0x02, 0x3d, 0x15, 0x2d, 0x42, 0x3e,
++ 0x02, 0x1e, 0x1e, 0x02, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x70, 0x50, 0xe8, 0x84, 0xf8,
++ 0x80, 0xf0, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x01, 0x3f, 0x04, 0x7f, 0x00, 0x0f, 0x08,
++ 0x0f, 0x08, 0x0f, 0x02, 0x0c, 0x70, 0x00, 0x00,
++ 0x00, 0x00, 0xf8, 0x40, 0xfc, 0x00, 0xe0, 0x20,
++ 0xe0, 0x20, 0xe0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x09, 0x7e, 0x24, 0x14, 0x18, 0x7f, 0x00,
++ 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0x48, 0x88, 0x30, 0x00,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x24, 0x15, 0x19, 0x7e, 0x00,
++ 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x00, 0x00,
++ 0x80, 0x80, 0x80, 0xf8, 0x08, 0x08, 0xe8, 0x08,
++ 0x28, 0xc8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7f, 0x00, 0x1c, 0x14, 0x14,
++ 0x14, 0x15, 0x15, 0x23, 0x20, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x1d, 0x04, 0x14, 0x12, 0x22, 0x49, 0x08,
++ 0x08, 0x14, 0x16, 0x7a, 0x00, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x7f, 0x2a, 0x2a, 0x54, 0x2a, 0x2a, 0x00,
++ 0x7e, 0x08, 0x08, 0x0e, 0x70, 0x03, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x24, 0x2e, 0x2a, 0x2a, 0x2a,
++ 0x2e, 0x24, 0x24, 0x24, 0x3e, 0x23, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x08, 0x7f, 0x08, 0x08, 0x3e, 0x00,
++ 0x3e, 0x22, 0x22, 0x22, 0x3e, 0x23, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x12, 0x3e, 0x40, 0x3e, 0x04,
++ 0x08, 0x3e, 0x22, 0x22, 0x3e, 0x23, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x02, 0x3d, 0x08, 0x7f, 0x1c, 0x2a, 0x4a, 0x1c,
++ 0x14, 0x14, 0x15, 0x16, 0x24, 0x43, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x2a, 0x3e, 0x2a, 0x3e, 0x08, 0x7f,
++ 0x1c, 0x1a, 0x2a, 0x48, 0x08, 0x0b, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x14, 0x0c, 0x12, 0x3f, 0x24,
++ 0x3a, 0x24, 0x39, 0x22, 0x4c, 0x33, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x2a, 0x2a, 0x3e, 0x2a, 0x3e, 0x08,
++ 0x06, 0x35, 0x31, 0x54, 0x54, 0x0f, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x04, 0x7f, 0x3f, 0x2f, 0x2b, 0x2f, 0x3f, 0x1e,
++ 0x12, 0x1e, 0x12, 0x1e, 0x0e, 0x71, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x20, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x21, 0x3f, 0x21, 0x3f, 0x12, 0x6d,
++ 0x2d, 0x1b, 0x7f, 0x35, 0x2a, 0x4a, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x20, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0xf8, 0x30, 0xc8, 0x84, 0x00, 0x00,
++ 0x08, 0x2f, 0x28, 0x7f, 0x2a, 0x5c, 0x1a, 0x6f,
++ 0x09, 0x0f, 0x0f, 0x04, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0xf8, 0x88, 0xf8, 0xf8, 0xf8, 0xec,
++ 0x20, 0xe0, 0xe0, 0x40, 0xfc, 0x40, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x04, 0x07, 0x3f, 0x2d, 0x37, 0x3f, 0x35, 0x3f,
++ 0x3f, 0x20, 0x3f, 0x57, 0x17, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x90, 0x20, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x30, 0xc8, 0x84, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x77, 0x55, 0x77, 0x14, 0x3f,
++ 0x64, 0x3e, 0x3e, 0x24, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x20, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x30, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x09, 0x0f, 0x0f, 0x3f, 0x01, 0x7f,
++ 0x2a, 0x3b, 0x3b, 0x2a, 0x7f, 0x08, 0x00, 0x00,
++ 0x00, 0xfc, 0x10, 0x20, 0x78, 0x48, 0x78, 0xc8,
++ 0xf8, 0xc8, 0xf8, 0xb0, 0xa8, 0xc4, 0x00, 0x00,
++ 0x00, 0x7f, 0x01, 0x01, 0x01, 0x1f, 0x10, 0x1f,
++ 0x17, 0x15, 0x17, 0x11, 0x2f, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0xc0, 0x20, 0x00, 0xf0, 0xd0, 0x10,
++ 0xd0, 0x50, 0xd4, 0x6c, 0x9c, 0x04, 0x00, 0x00,
++ 0x10, 0x13, 0x12, 0x13, 0x7e, 0x0b, 0x4b, 0x2b,
++ 0x2b, 0x32, 0x1c, 0x64, 0x0b, 0x10, 0x00, 0x00,
++ 0x00, 0xf0, 0x30, 0xd0, 0x90, 0xf0, 0xb0, 0xb0,
++ 0xf0, 0xd0, 0xb4, 0xec, 0x1c, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x11, 0x1e, 0x14, 0x1f, 0x1d, 0x1d,
++ 0x1f, 0x16, 0x15, 0x27, 0x38, 0x40, 0x00, 0x00,
++ 0x20, 0xa0, 0xb0, 0xa8, 0xcc, 0xf4, 0x80, 0xf8,
++ 0xc8, 0xc8, 0x78, 0xc4, 0xb4, 0x0c, 0x00, 0x00,
++ 0x00, 0x1f, 0x13, 0x1c, 0x14, 0x1f, 0x1d, 0x1d,
++ 0x1f, 0x16, 0x15, 0x27, 0x38, 0x40, 0x00, 0x00,
++ 0x00, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8,
++ 0xfc, 0x98, 0x64, 0xc4, 0xb4, 0x0c, 0x00, 0x00,
++ 0x00, 0x7f, 0x19, 0x7f, 0x5b, 0x7f, 0x01, 0x3d,
++ 0x01, 0x7f, 0x2d, 0x2a, 0x4b, 0x1c, 0x00, 0x00,
++ 0x00, 0xf8, 0x18, 0xe8, 0x48, 0xf8, 0xd8, 0xd8,
++ 0xf8, 0x6c, 0x5c, 0x74, 0x94, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x23, 0x3d, 0x29, 0x3f, 0x3b, 0x3b,
++ 0x3f, 0x2d, 0x2a, 0x2f, 0x31, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x30, 0xfc, 0xb4, 0xfc, 0x78, 0x00,
++ 0xfc, 0x58, 0x94, 0xb4, 0x64, 0x1c, 0x00, 0x00,
++ 0x0c, 0x0b, 0x3f, 0x09, 0x15, 0x13, 0x35, 0x2f,
++ 0x7f, 0x25, 0x37, 0x2a, 0x4b, 0x54, 0x00, 0x00,
++ 0x00, 0xf8, 0x18, 0xe8, 0x48, 0xf8, 0xd8, 0xd8,
++ 0xf8, 0x6c, 0x5c, 0x74, 0x94, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1f, 0x22, 0x7c, 0x24, 0x3c,
++ 0x24, 0x3c, 0x3c, 0x20, 0x3e, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x3c, 0xe0, 0x20, 0xa8, 0xa8, 0xa8,
++ 0xa8, 0xf8, 0xa8, 0x24, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1e, 0x22, 0x7c, 0x25, 0x3c,
++ 0x24, 0x3c, 0x3e, 0x20, 0x3f, 0x22, 0x00, 0x00,
++ 0x08, 0x10, 0xe0, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x60, 0x50, 0x90, 0x08, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x1e, 0x22, 0x7c, 0x25, 0x3c,
++ 0x24, 0x3c, 0x3e, 0x20, 0x3e, 0x23, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0x48, 0x94, 0x54, 0x50,
++ 0x60, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1f, 0x21, 0x7d, 0x25, 0x3d,
++ 0x25, 0x3d, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0x20, 0x40, 0xf8, 0x08, 0xe8, 0xa8, 0xa8,
++ 0xa8, 0xe8, 0xa8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1e, 0x23, 0x7e, 0x22, 0x3f,
++ 0x22, 0x3e, 0x3e, 0x20, 0x3e, 0x23, 0x00, 0x00,
++ 0x18, 0xf0, 0xa8, 0xa4, 0x04, 0x20, 0x20, 0xfc,
++ 0x48, 0x48, 0xf0, 0x10, 0x68, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x17, 0x1e, 0x23, 0x7d, 0x25, 0x3d,
++ 0x25, 0x3d, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x40, 0xf8, 0x48, 0x48, 0xf8,
++ 0x48, 0x48, 0xf8, 0x48, 0x48, 0x58, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1e, 0x22, 0x7d, 0x24, 0x3d,
++ 0x24, 0x3c, 0x3e, 0x21, 0x3e, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0xfc, 0x20, 0xfc,
++ 0x20, 0xb0, 0xa8, 0x24, 0x24, 0x60, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1e, 0x23, 0x7e, 0x24, 0x3d,
++ 0x25, 0x3d, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x80, 0xf8, 0x88, 0x88, 0x08, 0x30, 0x40, 0x98,
++ 0x08, 0xd8, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x1e, 0x22, 0x7c, 0x25, 0x3c,
++ 0x24, 0x3c, 0x3e, 0x20, 0x3f, 0x22, 0x00, 0x00,
++ 0x50, 0x50, 0xfc, 0x50, 0x20, 0x20, 0xfc, 0x20,
++ 0x38, 0x48, 0x48, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1f, 0x22, 0x7c, 0x25, 0x3c,
++ 0x24, 0x3d, 0x3e, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x50, 0x48, 0x7c, 0xc8, 0x30, 0x74, 0x8c, 0x54,
++ 0x7c, 0xc8, 0x30, 0x74, 0x8c, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1e, 0x23, 0x7c, 0x24, 0x3d,
++ 0x24, 0x3c, 0x3f, 0x20, 0x3e, 0x21, 0x00, 0x00,
++ 0x20, 0x24, 0xa4, 0xa8, 0x70, 0x50, 0x88, 0x24,
++ 0xa4, 0xa8, 0x70, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x1f, 0x22, 0x7c, 0x24, 0x3c,
++ 0x27, 0x3c, 0x3e, 0x21, 0x3f, 0x22, 0x00, 0x00,
++ 0x90, 0x90, 0x20, 0xfc, 0x90, 0x90, 0x90, 0xd0,
++ 0xbc, 0x90, 0x90, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x11, 0x11, 0x19, 0x27, 0x3d, 0x79, 0x2b, 0x3a,
++ 0x2a, 0x3a, 0x3f, 0x22, 0x3c, 0x21, 0x00, 0x00,
++ 0x00, 0x38, 0x28, 0xe8, 0x28, 0x38, 0xa8, 0xa8,
++ 0xb8, 0xa8, 0xc8, 0x48, 0x88, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x09, 0x1e, 0x74, 0x19, 0x62, 0x0f,
++ 0x77, 0x04, 0x07, 0x07, 0x07, 0x3c, 0x00, 0x00,
++ 0x20, 0x50, 0xac, 0xd0, 0x68, 0x70, 0x80, 0xe0,
++ 0xfc, 0x40, 0xc0, 0xd0, 0xe0, 0x38, 0x00, 0x00,
++ 0x08, 0x08, 0x15, 0x1f, 0x23, 0x7d, 0x25, 0x3d,
++ 0x24, 0x3c, 0x3f, 0x21, 0x3e, 0x24, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0xc8,
++ 0xd0, 0xd0, 0x68, 0x7c, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x1f, 0x23, 0x7d, 0x27, 0x3c,
++ 0x25, 0x3d, 0x3f, 0x21, 0x3f, 0x21, 0x00, 0x00,
++ 0x40, 0xbc, 0x14, 0x94, 0x54, 0xd4, 0x2c, 0x40,
++ 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x08, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x1f, 0x23, 0x7d, 0x25, 0x3c,
++ 0x25, 0x3d, 0x3f, 0x21, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x68, 0x98, 0x18, 0xf8, 0x00,
++ 0xf8, 0x68, 0x68, 0x68, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x1e, 0x22, 0x7c, 0x24, 0x3c,
++ 0x25, 0x3c, 0x3e, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x50, 0xfc, 0x50, 0x70, 0xf8, 0xa8, 0xf8, 0x20,
++ 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1e, 0x22, 0x7c, 0x25, 0x3d,
++ 0x25, 0x3c, 0x3e, 0x20, 0x3e, 0x23, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc, 0x54,
++ 0xfc, 0xf8, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x08, 0x09, 0x14, 0x1e, 0x23, 0x7d, 0x27, 0x3c,
++ 0x24, 0x3c, 0x3e, 0x20, 0x3f, 0x20, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0xfc, 0x08, 0xfc, 0xf8,
++ 0x88, 0xf8, 0x88, 0x50, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1e, 0x23, 0x7c, 0x24, 0x3c,
++ 0x24, 0x3c, 0x3e, 0x20, 0x3e, 0x23, 0x00, 0x00,
++ 0x20, 0xf8, 0xa8, 0xf8, 0xfc, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x11, 0x11, 0x1a, 0x25, 0x3d, 0x7a, 0x2b, 0x38,
++ 0x2b, 0x3b, 0x3e, 0x22, 0x3e, 0x24, 0x00, 0x00,
++ 0x48, 0x48, 0xf4, 0xd4, 0x48, 0xd4, 0xfc, 0x48,
++ 0xfc, 0x48, 0xa8, 0x34, 0xcc, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x1e, 0x23, 0x7c, 0x27, 0x3c,
++ 0x24, 0x3f, 0x3f, 0x20, 0x3c, 0x23, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x20, 0xfc, 0x90, 0xfc, 0x90,
++ 0xfc, 0x00, 0xfc, 0x50, 0x94, 0x0c, 0x00, 0x00,
++ 0x08, 0x09, 0x15, 0x1f, 0x23, 0x7d, 0x24, 0x3c,
++ 0x25, 0x3c, 0x3f, 0x20, 0x3e, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x68, 0xf8, 0x20, 0x64, 0xdc, 0x50,
++ 0xf8, 0x50, 0xfc, 0x50, 0x88, 0x08, 0x00, 0x00,
++ 0x1e, 0x12, 0x1e, 0x7f, 0x1e, 0x23, 0x0e, 0x0f,
++ 0x77, 0x04, 0x07, 0x07, 0x06, 0x38, 0x00, 0x00,
++ 0x38, 0xfc, 0xa8, 0xd8, 0xb0, 0x34, 0xcc, 0xe0,
++ 0xdc, 0x40, 0xc0, 0xd0, 0xe0, 0x38, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x08, 0x7e, 0x0a, 0x0a, 0x0a,
++ 0x0a, 0x0a, 0x12, 0x12, 0x22, 0x41, 0x00, 0x00,
++ 0x88, 0x50, 0xfc, 0x40, 0xf8, 0x88, 0xf8, 0x88,
++ 0xf8, 0x88, 0xf8, 0x8c, 0x04, 0xfc, 0x00, 0x00,
++ 0x24, 0x14, 0x18, 0x7f, 0x08, 0x11, 0x3d, 0x25,
++ 0x3d, 0x25, 0x3c, 0x27, 0x3c, 0x24, 0x00, 0x00,
++ 0x30, 0x28, 0x28, 0xfc, 0x20, 0xe8, 0x68, 0x68,
++ 0xd0, 0x10, 0x74, 0xac, 0x4c, 0x84, 0x00, 0x00,
++ 0x06, 0x38, 0x08, 0x7f, 0x1c, 0x1a, 0x2a, 0x48,
++ 0x3e, 0x22, 0x3f, 0x22, 0x3e, 0x23, 0x00, 0x00,
++ 0x80, 0x80, 0xfc, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x40, 0xf8, 0x90, 0x60, 0xf0, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x24, 0x3e, 0x24, 0x3e, 0x24, 0x3f,
++ 0x05, 0x3b, 0x2f, 0x2d, 0x42, 0x0d, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0x88, 0x50, 0x50, 0x70,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x03, 0x22, 0x13, 0x12, 0x03, 0x0a, 0x0b,
++ 0x10, 0x16, 0x25, 0x25, 0x28, 0x00, 0x00, 0x00,
++ 0x00, 0xf8, 0x40, 0xf0, 0x40, 0xf0, 0x40, 0xfc,
++ 0x24, 0x94, 0x54, 0x44, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3f, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x88, 0x88, 0x88, 0x50,
++ 0x50, 0x30, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x3d, 0x29, 0x3d, 0x29, 0x3f,
++ 0x0b, 0x3f, 0x3f, 0x33, 0x45, 0x19, 0x00, 0x00,
++ 0x00, 0xf8, 0x68, 0x68, 0x68, 0x68, 0x68, 0x78,
++ 0xb8, 0x98, 0x08, 0x08, 0xf8, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0b, 0x3e, 0x3e, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0xa0, 0x40, 0x60, 0x98, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3f, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x88, 0x40, 0x40, 0x4c,
++ 0x70, 0x40, 0x40, 0x40, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x29, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x50, 0x48, 0xf4, 0x04,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x7e, 0x12, 0x3a, 0x0c, 0x77, 0x04, 0x07,
++ 0x07, 0x04, 0x07, 0x15, 0x12, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x30, 0xc8, 0xf4, 0x80, 0xe0,
++ 0xe0, 0x80, 0xf8, 0x48, 0xa8, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x3e, 0x28, 0x3f, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x44, 0x1b, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x40, 0x50, 0x90, 0x60, 0x28,
++ 0x48, 0x90, 0x10, 0x28, 0xc4, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x3e, 0x28, 0x3e, 0x29, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x50, 0x48, 0x94, 0x54, 0x50,
++ 0x60, 0x20, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3f, 0x28, 0x3e,
++ 0x0b, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0xd0, 0x20, 0x50, 0x88,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3e, 0x28, 0x3c, 0x28, 0x3c, 0x29, 0x3f,
++ 0x0a, 0x3e, 0x3e, 0x33, 0x45, 0x1a, 0x00, 0x00,
++ 0x08, 0x88, 0xa8, 0xa8, 0xa8, 0xf8, 0xf8, 0xa8,
++ 0xa8, 0xa8, 0xa8, 0x28, 0x28, 0x08, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3f, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x00, 0xf8,
++ 0x20, 0xfc, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x28, 0x3f, 0x28, 0x3e, 0x28, 0x3f,
++ 0x0b, 0x3e, 0x3e, 0x32, 0x44, 0x1b, 0x00, 0x00,
++ 0x00, 0xf8, 0x08, 0xfc, 0x08, 0xf8, 0x00, 0xfc,
++ 0x08, 0xf8, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3f,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x20, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x00, 0xfc,
++ 0x40, 0x78, 0x88, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3f, 0x3e, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x48, 0x48, 0x48, 0xfc, 0x48, 0x78, 0x48, 0x78,
++ 0x48, 0xfc, 0x50, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3f, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x48, 0x48, 0x50, 0xfc, 0x90, 0x90, 0xf8, 0x90,
++ 0x90, 0xf8, 0x90, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3f, 0x28, 0x3e, 0x28, 0x3f,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x45, 0x1a, 0x00, 0x00,
++ 0x88, 0x48, 0x50, 0xfc, 0x50, 0x50, 0x50, 0xfc,
++ 0x50, 0x50, 0x90, 0x90, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3f, 0x3f, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x88, 0xf8, 0x80, 0xfc,
++ 0xb4, 0xfc, 0xb4, 0xb4, 0xb4, 0x8c, 0x00, 0x00,
++ 0x01, 0x3f, 0x22, 0x7f, 0x1f, 0x02, 0x7f, 0x0f,
++ 0x17, 0x67, 0x05, 0x07, 0x1a, 0x25, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0xf8, 0xe0, 0x80, 0xfc, 0xf0,
++ 0xd0, 0xcc, 0x00, 0xf0, 0x90, 0x60, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3f, 0x28, 0x3e, 0x2b, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0x50, 0xa0, 0x70, 0xac, 0xf8,
++ 0xa8, 0xf8, 0xb0, 0x28, 0x3c, 0xc4, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x3d, 0x29, 0x3d, 0x29, 0x3f,
++ 0x0b, 0x3f, 0x3f, 0x33, 0x45, 0x19, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0x78, 0x48, 0x78, 0x00, 0xfc,
++ 0xb4, 0xb4, 0xfc, 0x00, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x3e, 0x29, 0x3c, 0x29, 0x3f, 0x28, 0x3e,
++ 0x0b, 0x3e, 0x3e, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x40, 0x90, 0xf8, 0x90, 0x68, 0xfc, 0x60, 0x90,
++ 0x2c, 0xc0, 0x20, 0xc8, 0x30, 0xc0, 0x00, 0x00,
++ 0x04, 0x7f, 0x0f, 0x08, 0x0f, 0x0f, 0x7f, 0x07,
++ 0x1d, 0x67, 0x07, 0x07, 0x1a, 0x25, 0x00, 0x00,
++ 0x40, 0xfc, 0xe0, 0x20, 0xe0, 0xe0, 0xfc, 0xc0,
++ 0x30, 0xcc, 0xc0, 0xf8, 0x88, 0x70, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3f, 0x29, 0x3f, 0x28, 0x3e,
++ 0x0a, 0x3f, 0x3e, 0x32, 0x43, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0xfc, 0x54, 0xfc, 0x00, 0xf8,
++ 0x00, 0xfc, 0xa8, 0xa4, 0x24, 0x60, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3f, 0x3e, 0x32, 0x43, 0x0c, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x50, 0xd0,
++ 0x28, 0xfc, 0xa8, 0xa4, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3f, 0x28, 0x3e, 0x29, 0x3e,
++ 0x0b, 0x3f, 0x3f, 0x33, 0x45, 0x19, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0xfc, 0x50, 0xf8, 0x54, 0x70,
++ 0xfc, 0x74, 0x54, 0x74, 0x04, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3f, 0x28, 0x3f, 0x28, 0x3e,
++ 0x0b, 0x3f, 0x3e, 0x32, 0x42, 0x0d, 0x00, 0x00,
++ 0x20, 0xf8, 0x20, 0xfc, 0x88, 0xdc, 0x88, 0xdc,
++ 0x00, 0xfc, 0x50, 0x50, 0x94, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x3f, 0x28, 0x3e, 0x28, 0x3f,
++ 0x0a, 0x3f, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x00, 0xfc, 0x54, 0xfc, 0x20, 0xf8, 0x20, 0xfc,
++ 0x50, 0xfc, 0x20, 0xf8, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x28, 0x3f, 0x28, 0x3f,
++ 0x0b, 0x3f, 0x3e, 0x32, 0x45, 0x1a, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0xfc, 0x00, 0xf8,
++ 0x68, 0xf8, 0x90, 0xd8, 0x24, 0x44, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x3d, 0x29, 0x3d, 0x2b, 0x3e,
++ 0x0a, 0x3f, 0x3e, 0x32, 0x43, 0x0c, 0x00, 0x00,
++ 0x00, 0xe0, 0x7c, 0xd4, 0xc8, 0x54, 0xe4, 0x50,
++ 0x64, 0xb8, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x29, 0x3f, 0x29, 0x3f, 0x29, 0x3f,
++ 0x0b, 0x3f, 0x3f, 0x33, 0x46, 0x19, 0x00, 0x00,
++ 0x20, 0x38, 0xfc, 0x28, 0xd8, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0xf8, 0xe8, 0xe8, 0xfc, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3e, 0x29, 0x3e, 0x28, 0x3e,
++ 0x0a, 0x3e, 0x3e, 0x33, 0x42, 0x0d, 0x00, 0x00,
++ 0x50, 0xd4, 0x58, 0xd4, 0x4c, 0xf8, 0xa8, 0xf8,
++ 0xf8, 0x50, 0xf8, 0xfc, 0x48, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x3f, 0x29, 0x3e, 0x29, 0x3e,
++ 0x0a, 0x3f, 0x3e, 0x33, 0x44, 0x19, 0x00, 0x00,
++ 0x20, 0xfc, 0xdc, 0x54, 0xdc, 0x50, 0xfc, 0xf8,
++ 0x50, 0xfc, 0x68, 0x90, 0xe8, 0x84, 0x00, 0x00,
++ 0x00, 0x3f, 0x28, 0x3d, 0x29, 0x3d, 0x28, 0x3e,
++ 0x0b, 0x3e, 0x3e, 0x32, 0x42, 0x0c, 0x00, 0x00,
++ 0x50, 0xfc, 0x50, 0xdc, 0x54, 0xdc, 0x50, 0xfc,
++ 0x90, 0xf8, 0xf8, 0x90, 0xfc, 0x80, 0x00, 0x00,
++ 0x00, 0x07, 0x07, 0x07, 0x07, 0x0e, 0x15, 0x3f,
++ 0x28, 0x3e, 0x3e, 0x3f, 0x3d, 0x57, 0x00, 0x00,
++ 0x00, 0xe0, 0xc0, 0xc0, 0xf0, 0x90, 0x60, 0xfc,
++ 0xa0, 0xf8, 0xf8, 0xfc, 0xf4, 0x58, 0x00, 0x00,
++ 0x00, 0x3f, 0x29, 0x3f, 0x29, 0x3e, 0x29, 0x3f,
++ 0x0b, 0x3f, 0x3f, 0x33, 0x46, 0x19, 0x00, 0x00,
++ 0x00, 0xdc, 0xdc, 0xdc, 0x54, 0x20, 0xfc, 0x50,
++ 0xf8, 0x58, 0xfc, 0xd8, 0xf4, 0x8c, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x2e, 0x2a, 0x7f, 0x42, 0x3e,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x26, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x2e, 0x2a, 0x7e, 0x43, 0x3f,
++ 0x22, 0x3e, 0x22, 0x3e, 0x22, 0x27, 0x00, 0x00,
++ 0x00, 0x70, 0x50, 0x54, 0x54, 0x8c, 0x00, 0xf8,
++ 0x48, 0x50, 0x30, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x2e, 0x2a, 0x7f, 0x42, 0x3e,
++ 0x23, 0x3e, 0x22, 0x3e, 0x22, 0x26, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0xd0, 0x20, 0x50, 0x88,
++ 0xfc, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x2e, 0x2a, 0x7f, 0x42, 0x3e,
++ 0x22, 0x3f, 0x22, 0x3e, 0x22, 0x26, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x50,
++ 0x90, 0xfc, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x2f, 0x2a, 0x7f, 0x42, 0x3e,
++ 0x22, 0x3f, 0x22, 0x3e, 0x22, 0x27, 0x00, 0x00,
++ 0x20, 0xf8, 0xa8, 0xfc, 0xa8, 0xf8, 0xf8, 0xa8,
++ 0xf8, 0xfc, 0x50, 0xd0, 0x30, 0xc8, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x3d, 0x34, 0x7e, 0x45, 0x3f,
++ 0x25, 0x3d, 0x25, 0x3c, 0x27, 0x2c, 0x00, 0x00,
++ 0x00, 0xf8, 0x68, 0xf8, 0x80, 0xf8, 0x48, 0xf8,
++ 0x58, 0xf8, 0x68, 0x78, 0x88, 0x30, 0x00, 0x00,
++ 0x02, 0x3d, 0x25, 0x3c, 0x36, 0x7f, 0x45, 0x3c,
++ 0x27, 0x3d, 0x25, 0x3d, 0x26, 0x2c, 0x00, 0x00,
++ 0x20, 0xfc, 0x40, 0x78, 0x90, 0xfc, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0x48, 0xd8, 0x7c, 0x00, 0x00,
++ 0x00, 0x3d, 0x25, 0x3d, 0x35, 0x7f, 0x42, 0x3f,
++ 0x25, 0x3d, 0x25, 0x3c, 0x27, 0x2c, 0x00, 0x00,
++ 0x60, 0xf8, 0x68, 0xf8, 0x68, 0xf8, 0x00, 0xfc,
++ 0xf8, 0x08, 0xf8, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7e, 0x3c, 0x24, 0x3d, 0x01, 0x7f,
++ 0x42, 0x5f, 0x56, 0x5e, 0x43, 0x46, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x00, 0xdc, 0x54, 0xdc,
++ 0x20, 0xfc, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x10, 0x1e, 0x10, 0x1e, 0x10,
++ 0x7f, 0x14, 0x12, 0x27, 0x79, 0x01, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x28, 0x48, 0x90, 0x10, 0x24,
++ 0x44, 0x08, 0x08, 0x10, 0x60, 0x80, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x09,
++ 0x09, 0x0f, 0x79, 0x09, 0x08, 0x07, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0x00,
++ 0xf0, 0x10, 0x10, 0x64, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x01,
++ 0x7f, 0x01, 0x01, 0x02, 0x0c, 0x30, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0x00,
++ 0xfc, 0x00, 0xf0, 0x10, 0x10, 0xe0, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x00,
++ 0x0f, 0x1f, 0x02, 0x7f, 0x02, 0x01, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0xc0,
++ 0x00, 0xf0, 0x00, 0xfc, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x01,
++ 0x0f, 0x0f, 0x09, 0x7f, 0x08, 0x08, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0x00,
++ 0xe0, 0xe0, 0x20, 0xfc, 0x20, 0x60, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3d, 0x1f,
++ 0x03, 0x0c, 0x7f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0xf0,
++ 0x10, 0x60, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x01,
++ 0x7f, 0x02, 0x05, 0x19, 0x66, 0x18, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xf0, 0x08,
++ 0xfc, 0x20, 0x40, 0x80, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x1f,
++ 0x04, 0x3f, 0x3f, 0x24, 0x18, 0x60, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0xf0,
++ 0x90, 0xf0, 0xfc, 0x84, 0x98, 0x80, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x02,
++ 0x0f, 0x7f, 0x08, 0x0f, 0x08, 0x07, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0x00,
++ 0xf0, 0x90, 0x90, 0xe4, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x02,
++ 0x1f, 0x12, 0x1f, 0x12, 0x1f, 0x10, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0x80,
++ 0xf0, 0x90, 0xf0, 0x90, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x01,
++ 0x7f, 0x1f, 0x0f, 0x08, 0x0f, 0x08, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0x00,
++ 0xfc, 0xf0, 0xe0, 0x20, 0xe0, 0x20, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x08,
++ 0x7e, 0x18, 0x1d, 0x2a, 0x49, 0x08, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0x78,
++ 0x88, 0xa4, 0x30, 0x48, 0xf4, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x16, 0x3f, 0x07,
++ 0x07, 0x1f, 0x1f, 0x0f, 0x03, 0x3c, 0x00, 0x00,
++ 0x10, 0x60, 0x90, 0x64, 0x98, 0x60, 0xc0, 0xc0,
++ 0xc0, 0xf0, 0xf0, 0xe0, 0x80, 0x78, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x12, 0x3f, 0x0f,
++ 0x71, 0x09, 0x31, 0x05, 0x19, 0x67, 0x00, 0x00,
++ 0x10, 0x60, 0x88, 0x30, 0xc4, 0x18, 0xe0, 0xfc,
++ 0xf0, 0x10, 0xf0, 0xf0, 0xf0, 0x1c, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x16, 0x3f, 0x0f,
++ 0x7f, 0x07, 0x07, 0x7c, 0x07, 0x18, 0x00, 0x00,
++ 0x10, 0x60, 0x90, 0x64, 0x98, 0xe0, 0xe0, 0xe0,
++ 0xfc, 0xc0, 0xd8, 0xe0, 0x60, 0x1c, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x16, 0x3f, 0x2f,
++ 0x4b, 0x37, 0x3f, 0x07, 0x07, 0x3c, 0x00, 0x00,
++ 0x10, 0x60, 0x90, 0x64, 0x18, 0xe0, 0xfc, 0xe8,
++ 0x40, 0xe0, 0xe0, 0xe0, 0xe0, 0x38, 0x00, 0x00,
++ 0x00, 0x1f, 0x1e, 0x1e, 0x7f, 0x16, 0x39, 0x04,
++ 0x1f, 0x13, 0x1f, 0x1d, 0x1d, 0x73, 0x00, 0x00,
++ 0x10, 0x60, 0x90, 0x64, 0x18, 0xe8, 0x30, 0x88,
++ 0xf0, 0x90, 0xf0, 0xd4, 0xcc, 0x04, 0x00, 0x00,
++ 0x00, 0x2e, 0x24, 0x2e, 0x24, 0x2e, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x00, 0xe8, 0x48, 0xe8, 0x48, 0xe8, 0x08, 0x08,
++ 0x08, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x00, 0x2e, 0x24, 0x2e, 0x24, 0x2e, 0x21, 0x3f,
++ 0x21, 0x2f, 0x29, 0x29, 0x29, 0x21, 0x00, 0x00,
++ 0x00, 0xe8, 0x48, 0xe8, 0x48, 0xe8, 0x08, 0xf8,
++ 0x08, 0xe8, 0x28, 0x28, 0xc8, 0x18, 0x00, 0x00,
++ 0x00, 0x2e, 0x24, 0x2e, 0x24, 0x2e, 0x20, 0x22,
++ 0x2f, 0x22, 0x3f, 0x22, 0x24, 0x28, 0x00, 0x00,
++ 0x00, 0xe8, 0x48, 0xe8, 0x48, 0xe8, 0x08, 0x88,
++ 0xe8, 0x88, 0xf8, 0x88, 0x48, 0x58, 0x00, 0x00,
++ 0x00, 0x2e, 0x24, 0x2e, 0x24, 0x2e, 0x22, 0x24,
++ 0x26, 0x24, 0x27, 0x22, 0x24, 0x28, 0x00, 0x00,
++ 0x00, 0xe8, 0x48, 0xe8, 0x48, 0xe8, 0x08, 0xc8,
++ 0xc8, 0x48, 0xc8, 0x88, 0xa8, 0x78, 0x00, 0x00,
++ 0x00, 0x2e, 0x24, 0x2e, 0x24, 0x2e, 0x20, 0x3f,
++ 0x2f, 0x29, 0x2f, 0x2a, 0x27, 0x38, 0x00, 0x00,
++ 0x00, 0xe8, 0x48, 0xe8, 0x48, 0xe8, 0x28, 0x28,
++ 0xf8, 0xa8, 0x68, 0x28, 0x28, 0x78, 0x00, 0x00,
++ 0x00, 0x2e, 0x24, 0x2e, 0x2e, 0x23, 0x3f, 0x2e,
++ 0x3a, 0x3e, 0x3a, 0x3a, 0x3e, 0x39, 0x00, 0x00,
++ 0x00, 0xe8, 0x48, 0xe8, 0xe8, 0x88, 0xe8, 0xe8,
++ 0xf8, 0xb8, 0xf8, 0xf8, 0x98, 0xf8, 0x00, 0x00,
++ 0x02, 0x21, 0x2c, 0x33, 0x29, 0x23, 0x2c, 0x3f,
++ 0x28, 0x08, 0x0f, 0x08, 0x08, 0x07, 0x00, 0x00,
++ 0x40, 0x48, 0xa8, 0x98, 0x48, 0x28, 0x88, 0xf8,
++ 0x08, 0x70, 0x80, 0x04, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x7f, 0x00, 0x0f, 0x08, 0x0f, 0x00, 0x3f,
++ 0x22, 0x2c, 0x37, 0x21, 0x21, 0x21, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xe0, 0x20, 0xe0, 0x00, 0xf8,
++ 0x88, 0x98, 0xf8, 0x08, 0x08, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x11, 0x3d, 0x25, 0x25, 0x3d, 0x25,
++ 0x24, 0x24, 0x3d, 0x25, 0x06, 0x18, 0x00, 0x00,
++ 0x40, 0x80, 0xf8, 0x48, 0xf8, 0x48, 0xf8, 0x48,
++ 0xd0, 0xd0, 0x68, 0x78, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x10, 0x3e, 0x2b, 0x3e, 0x2a, 0x3e, 0x18,
++ 0x1a, 0x1a, 0x1d, 0x2f, 0x29, 0x47, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0xfc, 0x40, 0x50, 0x50, 0x50,
++ 0xa0, 0xa0, 0x50, 0x88, 0x04, 0xfc, 0x00, 0x00,
++ 0x06, 0x38, 0x08, 0x7f, 0x1c, 0x1a, 0x2a, 0x48,
++ 0x7e, 0x12, 0x3a, 0x04, 0x1b, 0x62, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0xa0,
++ 0x68, 0x68, 0xb4, 0xbc, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x10, 0x3e, 0x2a, 0x3e, 0x2a, 0x3e, 0x18,
++ 0x1a, 0x1a, 0x1d, 0x2f, 0x28, 0x47, 0x00, 0x00,
++ 0x00, 0xf8, 0xd8, 0xb8, 0xa8, 0xf8, 0xa8, 0xf8,
++ 0xc8, 0xb8, 0x88, 0x9c, 0x04, 0xfc, 0x00, 0x00,
++ 0x08, 0x11, 0x3e, 0x2b, 0x3f, 0x2b, 0x3f, 0x19,
++ 0x1b, 0x1b, 0x1d, 0x2f, 0x28, 0x47, 0x00, 0x00,
++ 0x00, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0xd8, 0xd8,
++ 0xe8, 0x48, 0x48, 0x1c, 0x04, 0xfc, 0x00, 0x00,
++ 0x08, 0x11, 0x3e, 0x2a, 0x3e, 0x2a, 0x3e, 0x19,
++ 0x1d, 0x1d, 0x1b, 0x2f, 0x28, 0x47, 0x00, 0x00,
++ 0x20, 0xfc, 0x98, 0xe8, 0xd8, 0xf8, 0x20, 0xfc,
++ 0x54, 0xfc, 0x04, 0x0c, 0x04, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x17, 0x17, 0x1f, 0x1f, 0x1f, 0x19,
++ 0x17, 0x17, 0x27, 0x21, 0x46, 0x38, 0x00, 0x00,
++ 0x00, 0xfc, 0x18, 0x14, 0xfc, 0x90, 0xa8, 0xc4,
++ 0xf0, 0xf0, 0xf0, 0xa8, 0xfc, 0x7c, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x42, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0x38, 0x28,
++ 0x28, 0x48, 0x48, 0x88, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x7c, 0xa0, 0xa0, 0x3c, 0x20,
++ 0x20, 0x3c, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x1e, 0x24, 0x7e, 0x2b, 0x3e, 0x2b,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xa8, 0xa4, 0x24, 0x20, 0xfc,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x78, 0x88, 0xe8, 0xa8, 0xa8,
++ 0xe8, 0xb0, 0x80, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x08, 0x09, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0x20, 0x40, 0x40, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0x50, 0x20, 0x50, 0xc8,
++ 0x24, 0x20, 0x00, 0xc0, 0x30, 0x08, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x43, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x88, 0x20, 0x20, 0xfc, 0x48,
++ 0x48, 0xf0, 0x90, 0x38, 0xc4, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2f, 0x29, 0x42, 0x00, 0x00,
++ 0x20, 0x20, 0x78, 0x90, 0xfc, 0x80, 0xf8, 0xc8,
++ 0xc8, 0xc8, 0xd8, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x80, 0x98, 0xe0, 0x80, 0x84, 0x7c, 0x00, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x50, 0x50, 0x50, 0x90, 0xfc, 0x90, 0xb8, 0xb8,
++ 0xb8, 0xd4, 0xd4, 0x90, 0x90, 0x90, 0x00, 0x00,
++ 0x08, 0x09, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x0c, 0xf0, 0x20, 0x28, 0xc8, 0x30, 0x30, 0x48,
++ 0xf4, 0x20, 0xa8, 0xa4, 0x24, 0x20, 0x00, 0x00,
++ 0x10, 0x49, 0x21, 0x0a, 0x14, 0x23, 0x27, 0x08,
++ 0x3f, 0x09, 0x0f, 0x0f, 0x14, 0x22, 0x00, 0x00,
++ 0x40, 0x50, 0x48, 0xd4, 0x64, 0x80, 0xc0, 0x80,
++ 0xe0, 0x20, 0xe0, 0xe0, 0x90, 0x48, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xa8, 0xa4, 0x24, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x88, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x28, 0x24, 0xfc, 0x20, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x7e, 0x2b, 0x3e, 0x2a,
++ 0x3f, 0x05, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x48, 0x88, 0xa8, 0xa8, 0xa8, 0xe8, 0xa8, 0xe8,
++ 0xe8, 0xa8, 0xa8, 0x88, 0x88, 0x98, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7e, 0x2b, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x08, 0xd0, 0x70, 0xa8, 0x20, 0xfc, 0x60, 0xa0,
++ 0xf8, 0xa8, 0xa8, 0xa8, 0xb8, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x50, 0x20, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0xb8, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2f, 0x28, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x40, 0xfc,
++ 0x54, 0x54, 0x94, 0x24, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x42, 0x00, 0x00,
++ 0x20, 0x40, 0x98, 0x88, 0xd8, 0x88, 0x88, 0xf8,
++ 0x68, 0x60, 0xa0, 0xa4, 0x24, 0x1c, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x43, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x90,
++ 0x94, 0xf8, 0x90, 0x94, 0xd4, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x25, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0xa8, 0xa8, 0x50, 0x50, 0xa8, 0xa8, 0x00, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x05, 0x3a, 0x2e, 0x29, 0x42, 0x00, 0x00,
++ 0x50, 0x50, 0x50, 0xdc, 0x50, 0x50, 0xdc, 0x50,
++ 0x70, 0xdc, 0x90, 0x90, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2b, 0x3e, 0x2b,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x41, 0x00, 0x00,
++ 0x20, 0x50, 0xf8, 0x90, 0x68, 0xfc, 0x60, 0xb0,
++ 0xcc, 0x20, 0xc8, 0x10, 0x60, 0x80, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3b, 0x2f, 0x2a, 0x41, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0xa8, 0xe8, 0x84, 0x94, 0xc8,
++ 0xc8, 0xc0, 0x50, 0x48, 0x44, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3b, 0x2f, 0x2a, 0x41, 0x00, 0x00,
++ 0x20, 0x38, 0x20, 0xfc, 0xa8, 0xf8, 0xa4, 0x9c,
++ 0xf0, 0xd0, 0x50, 0x54, 0x94, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x88, 0x74, 0x00, 0xf8, 0x10,
++ 0x20, 0x58, 0xd4, 0xc4, 0x50, 0x30, 0x00, 0x00,
++ 0x08, 0x09, 0x1f, 0x25, 0x7f, 0x2b, 0x3f, 0x2b,
++ 0x3f, 0x05, 0x3b, 0x2f, 0x29, 0x41, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x48, 0xd8, 0x48, 0x00, 0xf8,
++ 0x28, 0x28, 0xd0, 0x10, 0x28, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7f, 0x2b, 0x3f, 0x2b,
++ 0x3f, 0x05, 0x3b, 0x2f, 0x2a, 0x42, 0x00, 0x00,
++ 0x28, 0x24, 0x24, 0xfc, 0x20, 0xe8, 0x28, 0xe8,
++ 0xb0, 0xf0, 0x94, 0x2c, 0x4c, 0x84, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0x00,
++ 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2f, 0x29, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8, 0xf8, 0x20,
++ 0x50, 0xd8, 0xc4, 0x54, 0x50, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x70, 0x50, 0x50, 0x88, 0xfc, 0x30, 0xf8, 0xb8,
++ 0xd8, 0x88, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x7e, 0x2a, 0x3f, 0x2a,
++ 0x3e, 0x05, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0x20, 0xfc, 0x50,
++ 0xf8, 0x8c, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0xa8, 0xa8, 0xfc, 0xa8, 0xb8, 0x80, 0xfc, 0x20,
++ 0xfc, 0x70, 0x70, 0xa8, 0x24, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3b, 0x2e, 0x28, 0x43, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0xf8, 0x88, 0xf8, 0x88, 0xf8,
++ 0x40, 0xf8, 0x50, 0x20, 0xd0, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2f, 0x28, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x20, 0xf8, 0xb8, 0xe8, 0xf8,
++ 0x70, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x10, 0x10, 0x1c, 0x2b, 0x7e, 0x2f, 0x3e, 0x2f,
++ 0x3f, 0x0b, 0x3e, 0x3e, 0x35, 0x48, 0x00, 0x00,
++ 0x30, 0x28, 0x28, 0xfc, 0x20, 0xe8, 0xa8, 0xe8,
++ 0x78, 0x50, 0x94, 0xdc, 0x2c, 0x44, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0xa8, 0xa8, 0xd8, 0x88, 0xf8, 0x00,
++ 0xf8, 0xe8, 0xe8, 0xe8, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0x88, 0xf8, 0x88, 0xf8, 0x00,
++ 0xf8, 0xe8, 0xe8, 0xe8, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x09, 0x1f, 0x25, 0x7f, 0x2a, 0x3e, 0x2a,
++ 0x3f, 0x04, 0x3a, 0x2f, 0x28, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x54, 0x54, 0xfc, 0x20, 0xa8, 0xa8,
++ 0x24, 0x70, 0xa8, 0x24, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x25, 0x7f, 0x2b, 0x3f, 0x2b,
++ 0x3f, 0x05, 0x3b, 0x2f, 0x29, 0x40, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xd0, 0x7c, 0x74, 0xf4, 0x34,
++ 0xf4, 0x74, 0x7c, 0xd0, 0x10, 0x10, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x25, 0x7f, 0x2b, 0x3f, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x94, 0x54, 0xf4, 0x2c, 0x40,
++ 0xf8, 0xa8, 0xf8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x10, 0x11, 0x1c, 0x28, 0x7f, 0x2a, 0x3f, 0x2b,
++ 0x3f, 0x05, 0x3f, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x10, 0xd0, 0x10, 0x3c, 0xf4, 0xb4, 0xfc, 0xf4,
++ 0xf4, 0xfc, 0xb4, 0x90, 0x90, 0x90, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2f, 0x29, 0x42, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0xa0, 0xf8, 0xa8, 0xfc, 0xa8,
++ 0xf8, 0xa8, 0xf0, 0x68, 0xa4, 0x60, 0x00, 0x00,
++ 0x08, 0x3e, 0x7f, 0x08, 0x7f, 0x1e, 0x26, 0x47,
++ 0x3f, 0x09, 0x0f, 0x0f, 0x14, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0x7c, 0xc8, 0x28, 0x30, 0xc8, 0x84,
++ 0xe0, 0x20, 0xe0, 0xe0, 0x90, 0x48, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7f, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x04, 0x3a, 0x2f, 0x28, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xf8, 0x50, 0xfc, 0xf8, 0x88, 0xf8,
++ 0x88, 0xf8, 0x20, 0xfc, 0x20, 0x20, 0x00, 0x00,
++ 0x08, 0x09, 0x1e, 0x25, 0x7f, 0x2b, 0x3e, 0x2a,
++ 0x3e, 0x05, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x00, 0xfc, 0x50, 0xfc, 0x54, 0xfc, 0x00, 0xf8,
++ 0x00, 0xfc, 0xa8, 0xa4, 0x24, 0x60, 0x00, 0x00,
++ 0x08, 0x09, 0x1e, 0x24, 0x7e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x05, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x00, 0xf8, 0x88, 0xf8,
++ 0x50, 0xfc, 0xf8, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x25, 0x7f, 0x2b, 0x3f, 0x2b,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x40, 0x00, 0x00,
++ 0x40, 0x60, 0x90, 0xf8, 0xfc, 0xd8, 0x68, 0xf8,
++ 0xf0, 0x90, 0xf0, 0x90, 0xf0, 0x90, 0x00, 0x00,
++ 0x08, 0x09, 0x1f, 0x25, 0x7f, 0x2b, 0x3e, 0x2b,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x29, 0x40, 0x00, 0x00,
++ 0x60, 0xf8, 0x68, 0xf8, 0x68, 0xf8, 0x00, 0xfc,
++ 0xf8, 0x88, 0xf8, 0x50, 0xfc, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x24, 0x7e, 0x2b, 0x3e, 0x2b,
++ 0x3e, 0x04, 0x3a, 0x2e, 0x28, 0x43, 0x00, 0x00,
++ 0x88, 0x50, 0xfc, 0x20, 0xf8, 0xfc, 0xd0, 0xf8,
++ 0x94, 0xf0, 0xf0, 0xa8, 0xd0, 0x0c, 0x00, 0x00,
++ 0x08, 0x08, 0x1f, 0x25, 0x7f, 0x2b, 0x3f, 0x2b,
++ 0x3f, 0x05, 0x3b, 0x2f, 0x2a, 0x41, 0x00, 0x00,
++ 0x20, 0x38, 0xfc, 0x68, 0xd8, 0xf8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0xf8, 0xe8, 0xe8, 0xfc, 0x00, 0x00,
++ 0x01, 0x0f, 0x08, 0x0f, 0x0f, 0x0f, 0x0f, 0x15,
++ 0x12, 0x20, 0x07, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0xe0, 0xfc, 0xf8, 0x48,
++ 0xa8, 0x30, 0xc0, 0x40, 0x44, 0x3c, 0x00, 0x00,
++ 0x02, 0x1f, 0x10, 0x1f, 0x1f, 0x1f, 0x10, 0x1f,
++ 0x10, 0x07, 0x04, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xe0, 0xe0, 0xfc, 0x00, 0xf8,
++ 0x08, 0x88, 0xf0, 0x84, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x00, 0x39, 0x09, 0x09, 0x09, 0x19, 0x15,
++ 0x15, 0x23, 0x20, 0x43, 0x02, 0x04, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xfc, 0xa4, 0x54, 0x84, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x24, 0x24, 0x24, 0x7e, 0x0c, 0x0c,
++ 0x14, 0x14, 0x24, 0x45, 0x05, 0x0e, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x12, 0x12, 0x14, 0x14, 0x1c,
++ 0x14, 0x14, 0x24, 0x25, 0x45, 0x06, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xf8, 0x88, 0xf8, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x1f, 0x10, 0x13, 0x12, 0x13, 0x13, 0x13,
++ 0x12, 0x13, 0x26, 0x25, 0x49, 0x10, 0x00, 0x00,
++ 0x00, 0xfc, 0x80, 0xf0, 0x10, 0xf0, 0xf0, 0xfc,
++ 0x00, 0xfc, 0xa4, 0x54, 0x04, 0x18, 0x00, 0x00,
++ 0x08, 0x10, 0x3e, 0x22, 0x3e, 0x22, 0x3e, 0x3f,
++ 0x20, 0x3f, 0x0d, 0x3d, 0x32, 0x4d, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0x28, 0x28, 0x28, 0xfc,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x08, 0x3f, 0x2a, 0x48, 0x0c,
++ 0x0c, 0x15, 0x16, 0x25, 0x41, 0x02, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x3f, 0x22, 0x40, 0x1c, 0x04, 0x14,
++ 0x14, 0x14, 0x22, 0x23, 0x41, 0x02, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x01, 0x0f, 0x0a, 0x7f, 0x05, 0x1f, 0x64, 0x07,
++ 0x07, 0x07, 0x07, 0x15, 0x12, 0x20, 0x00, 0x00,
++ 0x00, 0xe0, 0x20, 0xfc, 0x40, 0xf0, 0x4c, 0xc0,
++ 0xc0, 0xfc, 0xf8, 0x48, 0xa8, 0x30, 0x00, 0x00,
++ 0x15, 0x0e, 0x19, 0x3f, 0x21, 0x4f, 0x08, 0x0f,
++ 0x0f, 0x0f, 0x0f, 0x2a, 0x25, 0x40, 0x00, 0x00,
++ 0xa8, 0x70, 0xc8, 0xfc, 0x08, 0xe0, 0x20, 0xe0,
++ 0xe0, 0xfc, 0xf8, 0x48, 0x28, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x09, 0x09, 0x7f, 0x09, 0x09, 0x3d,
++ 0x25, 0x25, 0x25, 0x3e, 0x22, 0x04, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xfc, 0x54, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x00, 0x06, 0x38, 0x28, 0x28, 0x3f, 0x28, 0x2a,
++ 0x26, 0x26, 0x3a, 0x63, 0x3d, 0x02, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x7e, 0x11, 0x19, 0x25, 0x7b, 0x09, 0x09,
++ 0x3f, 0x09, 0x09, 0x0e, 0x72, 0x04, 0x00, 0x00,
++ 0x40, 0x80, 0xf0, 0x10, 0xf0, 0x10, 0xf0, 0xfc,
++ 0x00, 0xfc, 0x54, 0xac, 0x84, 0x18, 0x00, 0x00,
++ 0x08, 0x10, 0x3e, 0x22, 0x3e, 0x23, 0x3e, 0x3f,
++ 0x20, 0x3f, 0x0d, 0x3d, 0x31, 0x46, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x88, 0x40, 0x40, 0x4c,
++ 0x70, 0x40, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x7c, 0x00, 0x7e,
++ 0x12, 0x12, 0x12, 0x1d, 0x11, 0x12, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x14, 0x12, 0x22, 0x54,
++ 0x0c, 0x08, 0x0c, 0x15, 0x21, 0x42, 0x00, 0x00,
++ 0x20, 0x40, 0xf0, 0x90, 0xf0, 0x90, 0xf0, 0xfc,
++ 0x80, 0xfc, 0x54, 0xbc, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x14, 0x12, 0x22, 0x7e, 0x00, 0x3e,
++ 0x22, 0x22, 0x3e, 0x23, 0x21, 0x02, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x0c, 0x12, 0x7d, 0x08, 0x28, 0x3e, 0x28,
++ 0x48, 0x7f, 0x08, 0x09, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x11, 0x12, 0x27, 0x4c, 0x0f, 0x14, 0x17, 0x37,
++ 0x54, 0x17, 0x13, 0x1f, 0x1c, 0x11, 0x00, 0x00,
++ 0x00, 0x3c, 0x80, 0x80, 0x80, 0xbc, 0x88, 0xe8,
++ 0x08, 0xc8, 0x48, 0x48, 0x48, 0x98, 0x00, 0x00,
++ 0x00, 0x7e, 0x24, 0x24, 0x3c, 0x24, 0x24, 0x3c,
++ 0x24, 0x24, 0x3c, 0x65, 0x05, 0x06, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x0c, 0x16, 0x75, 0x15, 0x14, 0x7f, 0x15, 0x15,
++ 0x1e, 0x72, 0x17, 0x1b, 0x11, 0x31, 0x00, 0x00,
++ 0x10, 0x20, 0x78, 0x48, 0x78, 0x48, 0x78, 0x7c,
++ 0x40, 0x7c, 0x34, 0xf4, 0xc4, 0x18, 0x00, 0x00,
++ 0x06, 0x38, 0x7f, 0x0c, 0x79, 0x1f, 0x04, 0x07,
++ 0x07, 0x07, 0x07, 0x15, 0x12, 0x20, 0x00, 0x00,
++ 0x50, 0x48, 0xfc, 0x70, 0xb4, 0xec, 0x20, 0xe0,
++ 0xe0, 0xfc, 0xf8, 0x48, 0xa8, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x1e, 0x24, 0x7e, 0x2a, 0x2a, 0x3e,
++ 0x2a, 0x3e, 0x22, 0x23, 0x23, 0x46, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x3e, 0x00, 0x3e, 0x22, 0x3e,
++ 0x22, 0x3e, 0x22, 0x23, 0x23, 0x26, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x7f, 0x08, 0x2a, 0x2a, 0x2a, 0x2a, 0x3d,
++ 0x4d, 0x48, 0x08, 0x0f, 0x71, 0x02, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x22, 0x3e, 0x22, 0x3e, 0x22,
++ 0x22, 0x3e, 0x18, 0x15, 0x25, 0x42, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x14, 0x14, 0x14, 0x7f, 0x14, 0x14, 0x7f, 0x00,
++ 0x3e, 0x22, 0x3e, 0x23, 0x3f, 0x22, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x7f, 0x00, 0x3c, 0x24, 0x3c, 0x00, 0x3e,
++ 0x04, 0x0e, 0x78, 0x09, 0x09, 0x1a, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x2a, 0x3e, 0x2a,
++ 0x3e, 0x1c, 0x1a, 0x29, 0x49, 0x0a, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x7f, 0x6b, 0x5d, 0x7f,
++ 0x18, 0x1c, 0x2a, 0x49, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x10, 0x3e, 0x2a, 0x2a, 0x3e, 0x2a, 0x3e,
++ 0x14, 0x24, 0x7e, 0x05, 0x05, 0x06, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x14, 0x17, 0x29, 0x2e,
++ 0x72, 0x2c, 0x26, 0x2b, 0x31, 0x22, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x77, 0x55, 0x77, 0x00, 0x3c, 0x00, 0x7e,
++ 0x10, 0x1c, 0x24, 0x05, 0x05, 0x1a, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x2a, 0x7f, 0x08, 0x3e, 0x2a, 0x3e,
++ 0x2a, 0x3e, 0x08, 0x7f, 0x09, 0x0a, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x14, 0x7f, 0x1a, 0x29, 0x5f, 0x04,
++ 0x07, 0x07, 0x07, 0x07, 0x15, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0xfc, 0x90, 0x60, 0x9c, 0xe0, 0x20,
++ 0xe0, 0xe0, 0xfc, 0xf8, 0x48, 0xb0, 0x00, 0x00,
++ 0x0c, 0x24, 0x2a, 0x49, 0x14, 0x3e, 0x00, 0x7e,
++ 0x36, 0x5a, 0x36, 0x5b, 0x13, 0x36, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x06, 0x3c, 0x2a, 0x49, 0x14, 0x3c, 0x08, 0x14,
++ 0x3e, 0x08, 0x7e, 0x0d, 0x13, 0x62, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x1c, 0x14, 0x22, 0x3d, 0x40, 0x1c, 0x14, 0x22,
++ 0x7f, 0x2e, 0x2e, 0x2f, 0x71, 0x02, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x3e, 0x22, 0x2e, 0x2a, 0x7f, 0x41, 0x3e,
++ 0x22, 0x3e, 0x22, 0x3f, 0x23, 0x26, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x00, 0x7e, 0x12, 0x12, 0x7e, 0x48, 0x7e, 0x5a,
++ 0x36, 0x5a, 0x36, 0x5b, 0x13, 0x6e, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x6b, 0x08, 0x6f, 0x14, 0x12, 0x3f, 0x52,
++ 0x1e, 0x12, 0x1e, 0x13, 0x13, 0x16, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x13, 0x1c, 0x11, 0x0f, 0x2e, 0x2a, 0x2e, 0x2e,
++ 0x2a, 0x2e, 0x3f, 0x2d, 0x13, 0x62, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x7f, 0x08, 0x3e, 0x22, 0x3e, 0x3e, 0x22,
++ 0x3e, 0x00, 0x7f, 0x0d, 0x13, 0x62, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x10, 0x1e, 0x1a, 0x24, 0x54, 0x18, 0x7e, 0x28,
++ 0x7f, 0x2a, 0x2a, 0x3f, 0x21, 0x22, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x3e, 0x7f, 0x14, 0x7f, 0x3e, 0x09, 0x0f,
++ 0x0f, 0x0f, 0x0f, 0x0f, 0x15, 0x22, 0x00, 0x00,
++ 0x40, 0x40, 0xf0, 0x50, 0xd4, 0xb4, 0x0c, 0xe0,
++ 0xe0, 0xe0, 0xfc, 0xf8, 0x48, 0xb0, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x2a, 0x2a, 0x3f, 0x2a, 0x2e,
++ 0x2a, 0x20, 0x3e, 0x57, 0x57, 0x21, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xec, 0xc4, 0x18, 0x00, 0x00,
++ 0x00, 0x3f, 0x0a, 0x04, 0x7f, 0x1d, 0x64, 0x3f,
++ 0x2d, 0x37, 0x2f, 0x2b, 0x2f, 0x23, 0x00, 0x00,
++ 0x10, 0x20, 0x78, 0x48, 0xf8, 0x48, 0x78, 0x7c,
++ 0x40, 0x7c, 0x34, 0xf4, 0xc4, 0x18, 0x00, 0x00,
++ 0x12, 0x14, 0x3f, 0x68, 0x3e, 0x28, 0x3e, 0x28,
++ 0x3f, 0x04, 0x3e, 0x2f, 0x29, 0x42, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x06, 0x3a, 0x2a, 0x1c, 0x7f, 0x1c, 0x2a, 0x7e,
++ 0x2a, 0x3e, 0x2a, 0x3f, 0x21, 0x22, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x55, 0x32, 0x3f, 0x62, 0x3e,
++ 0x22, 0x3e, 0x2a, 0x29, 0x49, 0x1a, 0x00, 0x00,
++ 0x20, 0x40, 0xf8, 0x88, 0xf8, 0x88, 0xf8, 0xfc,
++ 0x80, 0xfc, 0x54, 0xac, 0x44, 0x18, 0x00, 0x00,
++ 0x0a, 0x11, 0x1a, 0x19, 0x3f, 0x21, 0x4f, 0x0f,
++ 0x08, 0x0f, 0x0f, 0x0f, 0x15, 0x22, 0x00, 0x00,
++ 0xb0, 0x90, 0xb0, 0xb0, 0xfc, 0x08, 0xe0, 0xe0,
++ 0x20, 0xe0, 0xfc, 0xf8, 0x48, 0xb0, 0x00, 0x00,
++ 0x00, 0x3b, 0x2a, 0x3b, 0x3b, 0x2a, 0x3b, 0x1b,
++ 0x24, 0x7f, 0x0a, 0x1e, 0x0d, 0x31, 0x00, 0x00,
++ 0x10, 0xa0, 0xb8, 0xa8, 0xb8, 0xa8, 0xb8, 0x3c,
++ 0xa0, 0xbc, 0x34, 0xf4, 0xc4, 0x18, 0x00, 0x00,
++ 0x14, 0x7f, 0x14, 0x77, 0x55, 0x77, 0x14, 0x3f,
++ 0x68, 0x3e, 0x3e, 0x28, 0x3f, 0x21, 0x00, 0x00,
++ 0x10, 0x20, 0x78, 0x48, 0x78, 0x48, 0x78, 0x7c,
++ 0x40, 0x7c, 0x34, 0xfc, 0xc4, 0x18, 0x00, 0x00,
++ 0x13, 0x17, 0x6b, 0x1b, 0x7f, 0x3a, 0x57, 0x1f,
++ 0x0f, 0x0f, 0x0f, 0x0f, 0x15, 0x22, 0x00, 0x00,
++ 0x90, 0xd4, 0xe8, 0x98, 0xfc, 0xb8, 0xd4, 0xf0,
++ 0xe0, 0xe0, 0xfc, 0xf8, 0x48, 0xb0, 0x00, 0x00,
++ 0x01, 0x01, 0x01, 0x3f, 0x22, 0x21, 0x2c, 0x23,
++ 0x38, 0x25, 0x23, 0x24, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x00, 0xf8, 0x48, 0x48, 0x68, 0x98,
++ 0x98, 0x48, 0x28, 0x88, 0xf8, 0x08, 0x00, 0x00,
++ 0x10, 0x10, 0x1e, 0x11, 0x7f, 0x57, 0x4f, 0x7b,
++ 0x6f, 0x57, 0x73, 0x4b, 0x7e, 0x42, 0x00, 0x00,
++ 0x30, 0x28, 0x28, 0xfc, 0x20, 0xe8, 0x28, 0xe8,
++ 0xb0, 0xf0, 0xb4, 0x2c, 0x4c, 0x04, 0x00, 0x00,
++ 0x01, 0x3d, 0x2a, 0x3f, 0x26, 0x3f, 0x2b, 0x3f,
++ 0x22, 0x1f, 0x12, 0x12, 0x7f, 0x00, 0x00, 0x00,
++ 0x00, 0xfc, 0x7c, 0xf8, 0xd8, 0x78, 0xa8, 0xf8,
++ 0x08, 0xf0, 0x90, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x01, 0x03, 0x0c, 0x71, 0x1f, 0x12, 0x1f, 0x12,
++ 0x1f, 0x14, 0x17, 0x24, 0x27, 0x58, 0x00, 0x00,
++ 0x00, 0xe0, 0x40, 0x80, 0xfc, 0x40, 0xf8, 0x48,
++ 0xf8, 0x4c, 0xf0, 0x40, 0x44, 0x3c, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x12, 0x1f, 0x17, 0x17,
++ 0x1c, 0x2f, 0x27, 0x40, 0x1f, 0x00, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x70, 0x44,
++ 0xbc, 0xf8, 0xf0, 0x80, 0xfc, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x12, 0x1f, 0x27, 0x47,
++ 0x19, 0x09, 0x7f, 0x07, 0x79, 0x01, 0x00, 0x00,
++ 0x80, 0xfc, 0x40, 0xf8, 0x48, 0xf8, 0x70, 0x44,
++ 0x3c, 0x20, 0xfc, 0xc0, 0x3c, 0x00, 0x00, 0x00,
++ 0x00, 0x1f, 0x1f, 0x12, 0x1f, 0x27, 0x5e, 0x07,
++ 0x14, 0x17, 0x1f, 0x7f, 0x06, 0x78, 0x00, 0x00,
++ 0x80, 0xfc, 0xf8, 0x48, 0xf8, 0x74, 0x3c, 0xe0,
++ 0x20, 0xe0, 0xf0, 0xfc, 0x60, 0x1c, 0x00, 0x00,
++ 0x04, 0x04, 0x3f, 0x2a, 0x3f, 0x2b, 0x2b, 0x3f,
++ 0x34, 0x3d, 0x36, 0x54, 0x5d, 0x33, 0x00, 0x00,
++ 0x48, 0x48, 0x48, 0xfc, 0x48, 0x78, 0x48, 0x78,
++ 0x48, 0xfc, 0x50, 0x48, 0x84, 0x04, 0x00, 0x00,
++ 0x00, 0x1f, 0x1f, 0x12, 0x1f, 0x23, 0x4e, 0x1f,
++ 0x17, 0x1f, 0x13, 0x1d, 0x1f, 0x10, 0x00, 0x00,
++ 0x80, 0xfc, 0xf8, 0x48, 0xf8, 0xe4, 0x3c, 0xf0,
++ 0xd0, 0xf0, 0x90, 0x50, 0xf0, 0x10, 0x00, 0x00,
++ 0x00, 0x1f, 0x1f, 0x12, 0x1f, 0x2f, 0x4e, 0x32,
++ 0x1c, 0x1e, 0x10, 0x1f, 0x0c, 0x70, 0x00, 0x00,
++ 0x80, 0xfc, 0xf8, 0x48, 0xf8, 0x70, 0x44, 0x3c,
++ 0xf0, 0xf0, 0x10, 0xf0, 0x84, 0x7c, 0x00, 0x00,
++ 0x00, 0x1f, 0x1f, 0x12, 0x1f, 0x27, 0x4e, 0x1e,
++ 0x13, 0x1e, 0x1e, 0x7e, 0x1a, 0x66, 0x00, 0x00,
++ 0x80, 0xfc, 0xf8, 0x48, 0xf8, 0x74, 0x3c, 0x10,
++ 0xfc, 0x90, 0x50, 0x50, 0x10, 0x30, 0x00, 0x00,
++ 0x01, 0x01, 0x7f, 0x09, 0x19, 0x27, 0x05, 0x19,
++ 0x63, 0x0e, 0x31, 0x01, 0x06, 0x38, 0x00, 0x00,
++ 0x00, 0x00, 0xfc, 0x20, 0x30, 0xc8, 0x40, 0x30,
++ 0xec, 0x20, 0x40, 0xc0, 0x20, 0x00, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x2a, 0x2a, 0x5d, 0x1a, 0x29,
++ 0x4e, 0x12, 0x2c, 0x45, 0x1b, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x50, 0x50, 0x88, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x08, 0x7f, 0x10,
++ 0x1e, 0x32, 0x4c, 0x05, 0x1b, 0x60, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0x20, 0x20, 0xfc, 0x20,
++ 0x50, 0x50, 0x88, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x08, 0x09, 0x7f, 0x2a, 0x2a, 0x5d, 0x1c, 0x2a,
++ 0x4e, 0x12, 0x2c, 0x44, 0x1a, 0x60, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0xa0, 0xb8, 0xa8, 0xa8, 0xa8,
++ 0xf8, 0x88, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x2a, 0x2a, 0x5d, 0x1c, 0x2a,
++ 0x4e, 0x12, 0x2c, 0x44, 0x1b, 0x60, 0x00, 0x00,
++ 0x40, 0x40, 0x78, 0x88, 0xe8, 0xa8, 0xa8, 0xe8,
++ 0xb0, 0x80, 0x84, 0x7c, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x1f, 0x12, 0x1f, 0x17, 0x17, 0x1a, 0x11,
++ 0x1f, 0x1f, 0x21, 0x3f, 0x42, 0x0c, 0x00, 0x00,
++ 0x80, 0xfc, 0x10, 0xfc, 0x38, 0xbc, 0xd4, 0x40,
++ 0x7c, 0x78, 0xc0, 0x7c, 0x40, 0x40, 0x00, 0x00,
++ 0x0a, 0x11, 0x1a, 0x19, 0x3f, 0x24, 0x5f, 0x07,
++ 0x7f, 0x0f, 0x0f, 0x09, 0x0f, 0x38, 0x00, 0x00,
++ 0xb0, 0x90, 0xb0, 0xb0, 0xfc, 0x48, 0xf0, 0xc0,
++ 0xfc, 0xe0, 0xe0, 0x20, 0xe0, 0x38, 0x00, 0x00,
++ 0x06, 0x38, 0x08, 0x7f, 0x1c, 0x2a, 0x49, 0x0a,
++ 0x0d, 0x79, 0x05, 0x07, 0x39, 0x03, 0x00, 0x00,
++ 0x40, 0x40, 0xf8, 0x28, 0x48, 0x88, 0x30, 0x80,
++ 0x60, 0x3c, 0xc0, 0x60, 0x18, 0x00, 0x00, 0x00,
++ 0x06, 0x38, 0x08, 0x7f, 0x1c, 0x2a, 0x4d, 0x1c,
++ 0x6b, 0x2e, 0x1c, 0x6b, 0x08, 0x18, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x20, 0x3c, 0x20, 0x20, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x06, 0x38, 0x09, 0x7f, 0x1c, 0x2a, 0x49, 0x1c,
++ 0x2a, 0x6d, 0x1d, 0x6b, 0x09, 0x19, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x98, 0xe8, 0xb8, 0xc8, 0xf8,
++ 0x20, 0xfc, 0x54, 0xec, 0x04, 0x0c, 0x00, 0x00,
++ 0x00, 0x3f, 0x35, 0x2f, 0x2d, 0x3f, 0x04, 0x3f,
++ 0x06, 0x78, 0x1a, 0x2d, 0x2d, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x50, 0x50, 0x88, 0x74, 0x00,
++ 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00,
++ 0x00, 0x3f, 0x35, 0x2f, 0x2d, 0x3f, 0x04, 0x3f,
++ 0x06, 0x78, 0x1a, 0x2d, 0x2d, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xa8, 0xa8, 0xa8, 0xf8, 0xa8, 0x20,
++ 0xa8, 0xa8, 0xa8, 0xa8, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x35, 0x2f, 0x2d, 0x3f, 0x04, 0x3f,
++ 0x06, 0x78, 0x1a, 0x2d, 0x2d, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0x3c, 0x20, 0x20, 0x20, 0xf8,
++ 0x88, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3e, 0x2a, 0x2e, 0x3b, 0x3f, 0x08, 0x3e,
++ 0x0c, 0x71, 0x1f, 0x2e, 0x2e, 0x40, 0x00, 0x00,
++ 0x90, 0x90, 0x90, 0x90, 0x50, 0x7c, 0xd4, 0x94,
++ 0xd4, 0x54, 0xe4, 0x24, 0x44, 0x98, 0x00, 0x00,
++ 0x00, 0x3f, 0x35, 0x2f, 0x2d, 0x3f, 0x04, 0x3f,
++ 0x06, 0x78, 0x1a, 0x2d, 0x2d, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0x20, 0x20, 0xf8, 0x00,
++ 0xf8, 0x88, 0x88, 0x88, 0xf8, 0x88, 0x00, 0x00,
++ 0x00, 0x3f, 0x35, 0x2f, 0x2d, 0x3f, 0x04, 0x3f,
++ 0x06, 0x78, 0x1a, 0x2d, 0x2d, 0x40, 0x00, 0x00,
++ 0x10, 0x10, 0xfc, 0x00, 0x78, 0x48, 0x48, 0x78,
++ 0x10, 0x58, 0x54, 0x94, 0x10, 0x30, 0x00, 0x00,
++ 0x09, 0x05, 0x3f, 0x27, 0x47, 0x1f, 0x19, 0x15,
++ 0x1f, 0x3f, 0x01, 0x7f, 0x24, 0x42, 0x00, 0x00,
++ 0x20, 0x40, 0xfc, 0xc8, 0xc0, 0xf0, 0x30, 0x50,
++ 0xf0, 0xf8, 0x00, 0xfc, 0x88, 0x44, 0x00, 0x00,
++ 0x00, 0x3f, 0x35, 0x2f, 0x2d, 0x3f, 0x04, 0x3f,
++ 0x06, 0x78, 0x1a, 0x2d, 0x2d, 0x40, 0x00, 0x00,
++ 0x20, 0x20, 0xfc, 0x48, 0x30, 0xfc, 0x00, 0x78,
++ 0x48, 0x78, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x12, 0x1a, 0x2f, 0x5f, 0x1f, 0x1b, 0x2e, 0x6f,
++ 0x2f, 0x22, 0x3f, 0x2f, 0x2b, 0x30, 0x00, 0x00,
++ 0x20, 0xa0, 0xa0, 0xe0, 0xbc, 0xe8, 0xe8, 0xa8,
++ 0x98, 0x10, 0xd8, 0xa8, 0xc4, 0x84, 0x00, 0x00,
++ 0x00, 0x1f, 0x17, 0x17, 0x1f, 0x2f, 0x4f, 0x0f,
++ 0x0d, 0x0f, 0x1f, 0x7f, 0x24, 0x42, 0x00, 0x00,
++ 0x00, 0xfc, 0x14, 0x7c, 0x90, 0xb0, 0xc8, 0xe4,
++ 0x60, 0xe0, 0xf0, 0xfc, 0x88, 0x44, 0x00, 0x00,
++ 0x00, 0x3f, 0x2a, 0x2e, 0x3b, 0x3f, 0x09, 0x3e,
++ 0x0c, 0x70, 0x1e, 0x2e, 0x28, 0x43, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0xfc, 0x5c, 0xfc, 0xf8,
++ 0x88, 0xf8, 0xf8, 0xf8, 0xc8, 0x04, 0x00, 0x00,
++ 0x02, 0x12, 0x0a, 0x7f, 0x11, 0x11, 0x3f, 0x51,
++ 0x15, 0x15, 0x15, 0x19, 0x11, 0x11, 0x00, 0x00,
++ 0x80, 0x90, 0xa0, 0xfc, 0x10, 0x08, 0xf4, 0x14,
++ 0x50, 0x50, 0x50, 0x50, 0x10, 0x30, 0x00, 0x00,
++ 0x14, 0x55, 0x36, 0x7f, 0x0a, 0x29, 0x7f, 0x2a,
++ 0x3e, 0x3e, 0x3e, 0x2b, 0x2a, 0x27, 0x00, 0x00,
++ 0x30, 0x28, 0x28, 0x20, 0xfc, 0x20, 0x28, 0x28,
++ 0x68, 0x70, 0x90, 0x30, 0xc8, 0x04, 0x00, 0x00,
++ 0x14, 0x55, 0x36, 0x7f, 0x0a, 0x29, 0x7f, 0x2a,
++ 0x3e, 0x3e, 0x3e, 0x2a, 0x2a, 0x26, 0x00, 0x00,
++ 0x28, 0x24, 0xfc, 0x20, 0xf8, 0xa8, 0xa8, 0xf8,
++ 0xa8, 0xf8, 0xa8, 0xa8, 0xa8, 0x98, 0x00, 0x00,
++ 0x00, 0x3f, 0x22, 0x3e, 0x02, 0x3e, 0x22, 0x3e,
++ 0x22, 0x22, 0x3e, 0x22, 0x02, 0x01, 0x00, 0x00,
++ 0x00, 0xf8, 0x88, 0xf8, 0x80, 0xf8, 0x88, 0xf8,
++ 0x88, 0x88, 0xf8, 0x88, 0x04, 0xfc, 0x00, 0x00,
++ 0x08, 0x3e, 0x7f, 0x08, 0x7f, 0x1e, 0x26, 0x5f,
++ 0x1e, 0x3e, 0x3e, 0x22, 0x3e, 0x21, 0x00, 0x00,
++ 0x20, 0x20, 0x7c, 0xc8, 0x30, 0x30, 0xcc, 0xf0,
++ 0xf0, 0xf8, 0xf8, 0x88, 0xfc, 0xfc, 0x00, 0x00,
++ 0x2a, 0x49, 0x7f, 0x5d, 0x6b, 0x49, 0x1f, 0x1e,
++ 0x32, 0x22, 0x3a, 0x3a, 0x22, 0x01, 0x00, 0x00,
++ 0x40, 0x7c, 0xc8, 0x28, 0x30, 0xcc, 0xf0, 0xf0,
++ 0xf8, 0x88, 0xf8, 0xf8, 0x84, 0xfc, 0x00, 0x00,
++ 0x08, 0x08, 0x7f, 0x08, 0x3e, 0x00, 0x3e, 0x22,
++ 0x3e, 0x24, 0x15, 0x1f, 0x1a, 0x65, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xfc, 0xa8, 0xa0, 0xf8, 0xc8,
++ 0xd0, 0xb0, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x1e, 0x12, 0x1e, 0x0f, 0x73,
++ 0x06, 0x19, 0x07, 0x79, 0x00, 0x07, 0x00, 0x00,
++ 0x20, 0xfc, 0x20, 0xf8, 0x50, 0x70, 0x8c, 0xe0,
++ 0x40, 0x80, 0xe0, 0x9c, 0xc0, 0x00, 0x00, 0x00,
++ 0x02, 0x11, 0x09, 0x08, 0x1f, 0x11, 0x11, 0x1f,
++ 0x11, 0x11, 0x1f, 0x21, 0x21, 0x41, 0x00, 0x00,
++ 0x10, 0x10, 0x20, 0x40, 0xf0, 0x10, 0x10, 0xf0,
++ 0x10, 0x10, 0xf4, 0x0c, 0x0c, 0x04, 0x00, 0x00,
++ 0x08, 0x36, 0x22, 0x36, 0x22, 0x3e, 0x2a, 0x2a,
++ 0x3e, 0x2a, 0x3d, 0x29, 0x3e, 0x48, 0x00, 0x00,
++ 0x20, 0x20, 0x20, 0xf8, 0xa8, 0xa8, 0xf8, 0xa8,
++ 0xa8, 0xf8, 0x88, 0x04, 0xc4, 0x3c, 0x00, 0x00,
++ 0x08, 0x1e, 0x12, 0x1e, 0x1e, 0x1e, 0x3f, 0x3f,
++ 0x25, 0x3f, 0x7f, 0x12, 0x12, 0x22, 0x00, 0x00,
++ 0x00, 0xf8, 0x20, 0x20, 0x20, 0x20, 0xfc, 0x20,
++ 0x20, 0x20, 0xa0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x7f, 0x02, 0x7d, 0x15, 0x15, 0x2d, 0x48,
++ 0x0f, 0x08, 0x0f, 0x08, 0x10, 0x20, 0x00, 0x00,
++ 0x00, 0xfc, 0x88, 0x70, 0x50, 0x50, 0xe8, 0x24,
++ 0xe0, 0x20, 0xe0, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x01, 0x09, 0x09, 0x09, 0x7f, 0x24, 0x2a, 0x33,
++ 0x3f, 0x24, 0x2a, 0x33, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0x00, 0xf0, 0x00, 0xfc, 0x48, 0xa8, 0x28,
++ 0xf8, 0x48, 0xa8, 0x28, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2a, 0x2a, 0x35,
++ 0x3f, 0x2a, 0x2a, 0x35, 0x3f, 0x20, 0x00, 0x00,
++ 0x20, 0x20, 0xa0, 0x20, 0xe4, 0xa4, 0xa8, 0xb0,
++ 0xa0, 0xa0, 0xa0, 0xa4, 0xa4, 0x9c, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x40, 0x40, 0x40, 0x78, 0x88, 0xe8, 0xa8, 0xa8,
++ 0xe8, 0xa8, 0x08, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0xc8, 0x78, 0x48, 0x48,
++ 0x78, 0x48, 0x48, 0x48, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xf8, 0x28, 0x28, 0xa8, 0x48, 0xb0, 0x00,
++ 0x78, 0x48, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x20, 0x20, 0x50, 0x50, 0x88, 0x74, 0x00, 0xf8,
++ 0x28, 0x28, 0x30, 0x20, 0x20, 0x20, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0xf8, 0x48, 0x48, 0x78,
++ 0x64, 0x68, 0x50, 0x50, 0x68, 0x84, 0x00, 0x00,
++ 0x08, 0x7f, 0x3e, 0x0e, 0x79, 0x09, 0x7f, 0x26,
++ 0x29, 0x3f, 0x26, 0x29, 0x3f, 0x20, 0x00, 0x00,
++ 0x00, 0xf8, 0x48, 0x88, 0x30, 0xf0, 0xfc, 0x48,
++ 0xa8, 0xf8, 0x48, 0xa8, 0xf8, 0x08, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xfc, 0x20, 0x20, 0xf8, 0x48, 0x48, 0xfc,
++ 0x00, 0x78, 0x48, 0x48, 0x78, 0x48, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x48, 0xc8, 0x78, 0x10, 0x50,
++ 0x5c, 0x50, 0x50, 0x70, 0x90, 0x0c, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0x78, 0x48, 0x78, 0xc0, 0x7c, 0x58, 0x54,
++ 0x7c, 0x50, 0x7c, 0x90, 0xfc, 0x00, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x18, 0xe0, 0x20, 0xf8, 0xa8, 0xa8, 0xf8, 0x20,
++ 0xfc, 0xd4, 0xfc, 0x84, 0x84, 0x8c, 0x00, 0x00,
++ 0x04, 0x14, 0x17, 0x14, 0x7f, 0x2b, 0x2b, 0x35,
++ 0x3f, 0x2b, 0x2b, 0x35, 0x3f, 0x21, 0x00, 0x00,
++ 0x00, 0xfc, 0xb4, 0xfc, 0x00, 0x78, 0x00, 0xfc,
++ 0x20, 0x38, 0x48, 0x08, 0x08, 0x30, 0x00, 0x00,
++ 0x01, 0x02, 0x0f, 0x7f, 0x08, 0x0f, 0x3f, 0x12,
++ 0x7f, 0x1e, 0x1e, 0x1e, 0x12, 0x16, 0x00, 0x00,
++ 0x00, 0x80, 0xe0, 0xfc, 0x20, 0xe0, 0xf8, 0xf0,
++ 0x10, 0xf0, 0xf0, 0xf0, 0xf4, 0x7c, 0x00, 0x00,
++ 0x02, 0x07, 0x19, 0x7f, 0x12, 0x1e, 0x3a, 0x7e,
++ 0x3a, 0x3a, 0x7e, 0x0a, 0x3a, 0x01, 0x00, 0x00,
++ 0x00, 0xc0, 0x00, 0xf0, 0x90, 0xf0, 0x80, 0xf8,
++ 0xd8, 0xa8, 0xd8, 0xfc, 0x84, 0xfc, 0x00, 0x00,
++ 0x01, 0x02, 0x04, 0x1f, 0x60, 0x3b, 0x2a, 0x3b,
++ 0x00, 0x1f, 0x12, 0x1f, 0x12, 0x12, 0x00, 0x00,
++ 0x00, 0x80, 0x40, 0xf0, 0x0c, 0xb8, 0xa8, 0xb8,
++ 0x00, 0xf0, 0x90, 0xf0, 0x90, 0xb0, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x01, 0x1f, 0x01, 0x3f, 0x08, 0x3e, 0x08, 0x0f,
++ 0x70, 0x3f, 0x02, 0x04, 0x18, 0x60, 0x00, 0x00,
++ 0x00, 0xf0, 0x00, 0xf8, 0x20, 0xf8, 0x20, 0xfc,
++ 0x00, 0xf8, 0x40, 0x44, 0x44, 0x3c, 0x00, 0x00,
++ 0x08, 0x08, 0x08, 0x7f, 0x09, 0x19, 0x1d, 0x1b,
++ 0x2b, 0x29, 0x49, 0x09, 0x08, 0x0b, 0x00, 0x00,
++ 0x98, 0xe0, 0x84, 0x7c, 0x78, 0x48, 0x78, 0x48,
++ 0x78, 0x48, 0x78, 0xfc, 0xd8, 0x04, 0x00, 0x00,
++ 0x20, 0x10, 0x11, 0x46, 0x21, 0x2f, 0x02, 0x77,
++ 0x12, 0x12, 0x13, 0x1a, 0x26, 0x41, 0x00, 0x00,
++ 0x40, 0xf8, 0x90, 0x60, 0x80, 0xf8, 0x40, 0xfc,
++ 0x48, 0x48, 0xf8, 0x08, 0x00, 0xfc, 0x00, 0x00,
++ 0x00, 0x00, 0x7c, 0x11, 0x16, 0x10, 0x7f, 0x11,
++ 0x12, 0x17, 0x1e, 0x62, 0x03, 0x02, 0x00, 0x00,
++ 0x40, 0x78, 0xc8, 0x30, 0xa0, 0xc0, 0x00, 0xf8,
++ 0x40, 0xfc, 0x48, 0x48, 0xf8, 0x08, 0x00, 0x00
++};
+diff -Nur c3000_pre/linux/include/linux/fb_doublebyte.h c3000_work/linux/include/linux/fb_doublebyte.h
+--- c3000_pre/linux/include/linux/fb_doublebyte.h 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/include/linux/fb_doublebyte.h 2004-12-06 09:25:01.000000000 +0900
+@@ -0,0 +1,43 @@
++/*
++ * linux/include/linux/fb_widechar.h
++ *
++ * Copyright (C) 1999 Christopher Li, Jim Chen
++ * GNU/Linux Research Center
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive
++ * for more details.
++ *
++ *
++ */
++
++#ifndef _LINUX_FB_DOUBLEBYTE_H
++#define _LINUX_FB_DOUBLEbYTE_H
++
++#define DB_VALIDATE 0x8000
++#define DB_RIGHT_MASK 0x4000
++#define DB_HALF_MASK 0x2000
++#define DB_SYMBOL 0x1000
++#define DB_ASCII 0
++
++#define DB_RIGHT (DB_VALIDATE|DB_RIGHT_MASK)
++#define DB_LEFT (DB_VALIDATE)
++#define DB_NUM 8
++
++#define DB_INDEX_ERROR -512
++struct double_byte
++{
++ unsigned int num;
++ char name[16];
++ int (*is_left)(int );
++ int (*is_right)(int );
++ int (*font_index)(int left,int right);
++ unsigned int width,height; /* right now only support 16x16 */
++ int charcount;
++ unsigned char * font_data;
++};
++extern int register_doublebyte(struct double_byte *);
++extern int unregister_doublebyte(struct double_byte *);
++extern struct double_byte * doublebyte_encodeing[DB_NUM];
++extern struct double_byte * doublebyte_default;
++#endif
+diff -Nur c3000_pre/linux/include/linux/tty_flip.h c3000_work/linux/include/linux/tty_flip.h
+--- c3000_pre/linux/include/linux/tty_flip.h 2004-08-21 09:49:13.000000000 +0900
++++ c3000_work/linux/include/linux/tty_flip.h 2004-12-06 10:03:51.000000000 +0900
+@@ -7,9 +7,22 @@
+ #define _INLINE_ static __inline__
+ #endif
+
++#ifdef CONFIG_UNICON
++extern int (*Unicon_fnKeyHook) (struct tty_struct *tty,
++ unsigned char ch, char flag);
++#endif
+ _INLINE_ void tty_insert_flip_char(struct tty_struct *tty,
+- unsigned char ch, char flag)
++ unsigned char ch, char flag)
+ {
++ #ifdef CONFIG_UNICON
++ if (Unicon_fnKeyHook != NULL)
++ {
++ /* return 1 ==> processed by kernel
++ return 0 ==> processed by app */
++ if ((*Unicon_fnKeyHook) (tty, ch, flag) == 1)
++ return;
++ }
++ #endif
+ if (tty->flip.count < TTY_FLIPBUF_SIZE) {
+ tty->flip.count++;
+ *tty->flip.flag_buf_ptr++ = flag;
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P05-C3000-TSPRESSURE_041207.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P05-C3000-TSPRESSURE_041207.patch
new file mode 100644
index 0000000000..c0cde53087
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P05-C3000-TSPRESSURE_041207.patch
@@ -0,0 +1,235 @@
+diff -Nur c3000_pre/linux/drivers/char/Config.in c3000_work/linux/drivers/char/Config.in
+--- c3000_pre/linux/drivers/char/Config.in 2004-08-21 09:48:25.000000000 +0900
++++ c3000_work/linux/drivers/char/Config.in 2004-12-06 15:53:46.000000000 +0900
+@@ -164,6 +164,8 @@
+ if [ "$CONFIG_ARCH_SHARP_SL" = "y" ]; then
+ bool ' SL-series serial port support' CONFIG_SERIAL_SL_SERIES
+ fi
++ bool ' SL-series touchscreen pressure value read (EXPERIMENTAL)' CONFIG_SL_TS_PRESSURE
++ dep_bool ' Boot On touchscreen pressure value read' CONFIG_BOOT_PRESSURE_ON $CONFIG_SL_TS_PRESSURE
+ if [ "$CONFIG_SERIAL_SL_SERIES" = "y" ]; then
+ bool ' SL-series Bluetooth support' CONFIG_BLUETOOTH_SL
+ fi
+diff -Nur c3000_pre/linux/drivers/char/ads7846_ts.c c3000_work/linux/drivers/char/ads7846_ts.c
+--- c3000_pre/linux/drivers/char/ads7846_ts.c 2004-11-16 15:31:06.000000000 +0900
++++ c3000_work/linux/drivers/char/ads7846_ts.c 2004-12-06 15:50:06.000000000 +0900
+@@ -86,7 +86,55 @@
+ static DECLARE_WAIT_QUEUE_HEAD(queue);
+ static int head, tail, sample;
+ static char pendown = 0;
+-unsigned long Pressure;
++static unsigned long Pressure;
++#if defined(CONFIG_SL_TS_PRESSURE)
++#include <linux/proc_fs.h>
++#endif
++
++#if defined(CONFIG_SL_TS_PRESSURE)
++static unsigned long tsPressure;
++#if defined(CONFIG_BOOT_PRESSURE_ON)
++static unsigned int tspressure_mode = 1;
++#else
++static unsigned int tspressure_mode = 0;
++#endif
++
++static ssize_t tspressure_read_params(struct file *file, char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ char outputbuf[32];
++ int count;
++
++ if (*ppos>0) /* Assume reading completed in previous read*/
++ return 0;
++ count = sprintf(outputbuf, "%d\n", (unsigned int)tspressure_mode);
++ count++;
++ *ppos += count;
++ if (count>nbytes) /* Assume output can be read at one time */
++ return -EINVAL;
++ if (copy_to_user(buf, outputbuf, count+1))
++ return -EFAULT;
++ return count;
++}
++
++static ssize_t tspressure_write_params(struct file *file, const char *buf,
++ size_t nbytes, loff_t *ppos)
++{
++ unsigned int param=0;
++
++ sscanf(buf,"%d",&param);
++ if (tspressure_mode != param) {
++ tspressure_mode = param;
++ printk("tspressure = %d\n", tspressure_mode);
++ }
++ return nbytes;
++}
++
++static struct file_operations proc_tspressure_operations = {
++ read: tspressure_read_params,
++ write: tspressure_write_params,
++};
++#endif
+ #if defined(CONFIG_ARCH_PXA_CORGI)
+ static char ispass = 1;
+ #endif
+@@ -370,7 +418,11 @@
+ ((int)((x)-(y))<(int)(d)) && \
+ ((int)((y)-(x))<(int)(d)) )
+ unsigned long cmd;
++#if defined(CONFIG_SL_TS_PRESSURE)
++ unsigned int t,x,y,z[2],z2,dummy;
++#else
+ unsigned int t,x,y,z[2];
++#endif
+ int i,j,k;
+ int d = 8, c = 10;
+ int err = 0;
+@@ -381,7 +433,18 @@
+ (3u << ADSCTRL_ADR_SH) | (1u << ADSCTRL_STS_SH);
+ t = ads7846_rw(cmd);
+ z[i] = ads7846_rw(cmd);
+-
++
++#if defined(CONFIG_SL_TS_PRESSURE)
++ if (tspressure_mode) {
++ /* Z2 */
++ cmd = (1u << ADSCTRL_PD0_SH) | (1u << ADSCTRL_PD1_SH) |
++ (4u << ADSCTRL_ADR_SH) | (1u << ADSCTRL_STS_SH);
++ dummy = ads7846_rw(cmd);
++ udelay(1);
++ z2 = ads7846_rw(cmd);
++ }
++#endif
++
+ if( i ) break;
+
+ /* X-axis */
+@@ -415,6 +478,10 @@
+ }
+ }
+ Pressure = 1;
++#if defined(CONFIG_SL_TS_PRESSURE)
++ if (tspressure_mode)
++ if (z[1]) tsPressure = (15000 - x * (z2 - z[1]) / z[1]) >> 4;
++#endif
+ for(i=0;i<2;i++){
+ if( !z[i] )
+ Pressure = 0;
+@@ -528,12 +595,19 @@
+
+ // printk("x=%d,y=%d\n",tp->xd,tp->yd);
+
+- if (z1 != 0)
++ if (z1 != 0) {
+ Pressure = Rx * (tp->xd) * ((10*z2/z1) - 1*10) >> 10;
+- else
++#if defined(CONFIG_SL_TS_PRESSURE)
++ if (tspressure_mode)
++ tsPressure = (15000 - x[3] * (z2 - z1) / z1) >> 4;
++ }
++#endif
++ else
++#if defined(CONFIG_SL_TS_PRESSURE)
++ tsPressure = Pressure = 0;
++#else
+ Pressure = 0;
+-
+-
++#endif
+ cmd = (1u << ADSCTRL_PD0_SH) | (1u << ADSCTRL_PD1_SH) |
+ (4u << ADSCTRL_ADR_SH) | (1u << ADSCTRL_STS_SH);
+ /* Power-Down Enable */
+@@ -612,11 +686,25 @@
+ // printk("fail %d\n", fail);
+
+ if (fail == TOUCH_PANEL_AVERAGE) {
++#if defined(CONFIG_SL_TS_PRESSURE)
++ tsPressure = Pressure = 0;
++#else
+ Pressure = 0;
++#endif
+ // printk("pen up\n");
+ }
+ else {
++#if defined(CONFIG_SL_TS_PRESSURE)
++ if (tspressure_mode) {
++ if (z1) {
++ tsPressure = Pressure = (15000 - x * (z2 - z1) / z1) >> 4;
++ } else
++ tsPressure = Pressure = 0;
++ } else
++ tsPressure = Pressure = 1;
++#else
+ Pressure = 1;
++#endif
+ tp->xd = tx / (TOUCH_PANEL_AVERAGE - fail);
+ tp->yd = ty / (TOUCH_PANEL_AVERAGE - fail);
+ // printk("pen position (%d,%d)\n", tx, ty);
+@@ -788,7 +876,11 @@
+
+ static void new_data(void)
+ {
++#if !defined(CONFIG_ARCH_PXA_CORGI) && !defined(CONFIG_ARCH_PXA_POODLE)
++#if !defined(CONFIG_POODLE_TR0)
+ int diff0, diff1, diff2, diff3;
++#endif
++#endif
+
+ #ifdef CONFIG_PM
+ if( PowerDownMode != PMPD_MODE_ACTIVE )
+@@ -956,11 +1048,26 @@
+ lock_FCS(POWER_MODE_TOUCH, 1); // not enter FCS mode.
+ #endif
+ if( pos_dt.xd && pos_dt.yd && Pressure ) {
++#if defined(CONFIG_SL_TS_PRESSURE)
++ if (tspressure_mode)
++ tc.pressure = Pressure;
++ else
++ tc.pressure = 500;
++#else
+ tc.pressure = 500;
++#endif
++
+ #else
+ if( pos_dt.xd && pos_dt.yd ){
++#if defined(CONFIG_SL_TS_PRESSURE)
++ if (tspressure_mode)
++ tc.pressure = Pressure;
++ else
++ tc.pressure = 1;
++#else
+ tc.pressure = 1;
+ #endif
++#endif
+ before_data = tc;
+ pendown = 1;
+ new_data();
+@@ -1005,6 +1112,16 @@
+ static void ts_hardware_init(void)
+ {
+ unsigned int dummy;
++
++#if defined(CONFIG_SL_TS_PRESSURE)
++ struct proc_dir_entry *tspressure_proc;
++#endif
++
++#if defined(CONFIG_SL_TS_PRESSURE)
++ tspressure_proc = create_proc_entry("zaurus/tspressure", 0, NULL);
++ if (tspressure_proc)
++ tspressure_proc->proc_fops = &proc_tspressure_operations;
++#endif
+
+ #if defined(CONFIG_ARCH_PXA_POODLE) || defined(CONFIG_ARCH_PXA_CORGI)
+ pxa_ssp_init();
+@@ -1283,6 +1400,13 @@
+ case 17: /* Clear all buffer data */
+ print_par();
+ break;
++#if defined(CONFIG_SL_TS_PRESSURE)
++ case 64: /* read Pressure */
++ if (tspressure_mode) {
++ copy_to_user((void *)arg, &tsPressure, sizeof(tsPressure));
++ break;
++ }
++#endif
+ default:
+ return -EINVAL;
+ }
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P06-C3000-WRITETS_041206.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P06-C3000-WRITETS_041206.patch
new file mode 100644
index 0000000000..25dda93cd1
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P06-C3000-WRITETS_041206.patch
@@ -0,0 +1,107 @@
+diff -Nur c3000_pre/linux/drivers/char/Config.in c3000_work/linux/drivers/char/Config.in
+--- c3000_pre/linux/drivers/char/Config.in 2004-12-06 16:38:50.000000000 +0900
++++ c3000_work/linux/drivers/char/Config.in 2004-12-06 16:41:03.000000000 +0900
+@@ -166,6 +166,7 @@
+ fi
+ bool ' SL-series touchscreen pressure value read (EXPERIMENTAL)' CONFIG_SL_TS_PRESSURE
+ dep_bool ' Boot On touchscreen pressure value read' CONFIG_BOOT_PRESSURE_ON $CONFIG_SL_TS_PRESSURE
++ bool ' SL-series write ts data (EXPERIMENTAL)' CONFIG_SL_WRITE_TS
+ if [ "$CONFIG_SERIAL_SL_SERIES" = "y" ]; then
+ bool ' SL-series Bluetooth support' CONFIG_BLUETOOTH_SL
+ fi
+diff -Nur c3000_pre/linux/drivers/char/ads7846_ts.c c3000_work/linux/drivers/char/ads7846_ts.c
+--- c3000_pre/linux/drivers/char/ads7846_ts.c 2004-12-06 16:38:50.000000000 +0900
++++ c3000_work/linux/drivers/char/ads7846_ts.c 2004-12-06 16:50:50.000000000 +0900
+@@ -87,7 +87,7 @@
+ static int head, tail, sample;
+ static char pendown = 0;
+ static unsigned long Pressure;
+-#if defined(CONFIG_SL_TS_PRESSURE)
++#if defined(CONFIG_SL_TS_PRESSURE) || defined(CONFIG_SL_WRITE_TS)
+ #include <linux/proc_fs.h>
+ #endif
+
+@@ -1000,6 +1000,24 @@
+ }
+ #endif
+
++/// write ts data
++#if defined(CONFIG_SL_WRITE_TS)
++static void write_new_data(TS_EVENT write_data)
++{
++ write_data.millisecs = jiffies;
++ tbuf[head++] = write_data;
++
++ if (head >= BUFSIZE) { head = 0; }
++
++ if (head == tail && ++tail >= BUFSIZE) { tail = 0; }
++
++ if (fasync)
++ kill_fasync(&fasync, SIGIO, POLL_IN);
++
++ wake_up_interruptible(&queue);
++}
++#endif
++
+ static void cotulla_main_ts_timer(unsigned long irq)
+ {
+ // ts_interrupt(irq, NULL, NULL);
+@@ -1346,10 +1364,54 @@
+ static ssize_t ts_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
+ {
+ #if defined(CONFIG_ARCH_PXA_CORGI)
+- unsigned long param;
+- char *endp;
+- wait_after_sync_hs = simple_strtoul(buffer, &endp, 0);
+- return count+endp-buffer;
++ char *endp;
++#if defined(CONFIG_SL_WRITE_TS)
++
++ static TS_EVENT data, raw_data;
++ char tmp[50];
++ int len;
++ len=49;
++ if(len>count) len=count;
++ copy_from_user(tmp,buffer,len);
++ tmp[len]='\0';
++
++ if (sscanf(tmp,"%d %d %d %d",&data.pressure, &data.x, &data.y, &data.millisecs) == 4) {
++// printk("pressure= %d : x= %d : y= %d : millosecs= %d\n", data.pressure, data.x, data.y, data.millisecs);
++
++ if (cal_ok) {
++ raw_data.x = (x_rev) ? raw_max_x - ((raw_max_x - raw_min_x) * data.x) / res_x
++ : raw_min_x + ((raw_max_x - raw_min_x) * data.x) / res_x;
++
++ raw_data.y = (y_rev) ? raw_max_y - ((raw_max_y - raw_min_y) * data.y) / res_y
++ : raw_min_y + ((raw_max_y - raw_min_y) * data.y) / res_y;
++
++ } else {
++ raw_data.x = data.x;
++ raw_data.y = data.y;
++ }
++
++ if (xyswap) {
++ short tmp = raw_data.x;
++ raw_data.x = raw_data.y;
++ raw_data.y = tmp;
++ }
++
++ raw_data.pressure = data.pressure;
++ raw_data.millisecs = data.millisecs;
++
++ write_new_data(raw_data);
++ return count;
++
++ }else {
++#endif
++ wait_after_sync_hs = simple_strtol(buffer, &endp, 0);
++ printk("Wait_after_sync_hs: %d\n",(int) wait_after_sync_hs);
++ return count+endp-buffer;
++
++#if defined(CONFIG_SL_WRITE_TS)
++ }
++#endif
++
+ #else
+ return 0;
+ #endif
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P07-C3000-KBDDEV_041206.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P07-C3000-KBDDEV_041206.patch
new file mode 100644
index 0000000000..b82be1551d
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P07-C3000-KBDDEV_041206.patch
@@ -0,0 +1,115 @@
+diff -Nur c3000_pre/linux/drivers/char/Config.in c3000_work/linux/drivers/char/Config.in
+--- c3000_pre/linux/drivers/char/Config.in 2004-12-06 17:24:32.000000000 +0900
++++ c3000_work/linux/drivers/char/Config.in 2004-12-06 17:25:51.000000000 +0900
+@@ -171,6 +171,7 @@
+ bool ' SL-series Bluetooth support' CONFIG_BLUETOOTH_SL
+ fi
+ fi
++bool 'Use Keyboard device file (EXPERIMENTAL)' CONFIG_KBD_DEV_FILE
+ if [ "$CONFIG_ARCH_DBMX1" = "y" ]; then
+ tristate 'DragonBall MX1 serial port support' CONFIG_SERIAL_DBMX1
+ if [ "$CONFIG_SERIAL_DBMX1" = "y" ]; then
+diff -Nur c3000_pre/linux/drivers/char/keyboard.c c3000_work/linux/drivers/char/keyboard.c
+--- c3000_pre/linux/drivers/char/keyboard.c 2004-08-21 09:48:25.000000000 +0900
++++ c3000_work/linux/drivers/char/keyboard.c 2004-12-06 17:32:08.000000000 +0900
+@@ -35,6 +35,7 @@
+
+ #include <asm/keyboard.h>
+ #include <asm/bitops.h>
++#include <asm/uaccess.h>
+
+ #include <linux/kbd_kern.h>
+ #include <linux/kbd_diacr.h>
+@@ -921,12 +922,35 @@
+
+ pm_callback pm_kbd_request_override = NULL;
+
++#if defined(CONFIG_KBD_DEV_FILE)
++#define KBD_MAJOR 241
++struct fasync_struct *fasync_kbd;
++
++static int kbd_open(struct inode *, struct file *);
++static int kbd_release(struct inode *, struct file *);
++static int kbd_fasync(int fd, struct file *filp, int on);
++static ssize_t kbd_read(struct file *, char *, size_t, loff_t *);
++static ssize_t kbd_write(struct file *, const char *, size_t, loff_t *);
++
++struct file_operations kbd_fops = {
++ open: kbd_open,
++ release: kbd_release,
++ fasync: kbd_fasync,
++ read: kbd_read,
++ write: kbd_write,
++};
++#endif
++
+ int __init kbd_init(void)
+ {
+ int i;
+ struct kbd_struct kbd0;
+ extern struct tty_driver console_driver;
+
++#if defined(CONFIG_KBD_DEV_FILE)
++ if ( register_chrdev(KBD_MAJOR,"kbd",&kbd_fops) )
++ printk("unable to get major %d for keyboard\n", KBD_MAJOR);
++#endif
+ kbd0.ledflagstate = kbd0.default_ledflagstate = KBD_DEFLEDS;
+ kbd0.ledmode = LED_SHOW_FLAGS;
+ kbd0.lockstate = KBD_DEFLOCK;
+@@ -948,3 +972,56 @@
+
+ return 0;
+ }
++
++#if defined(CONFIG_KBD_DEV_FILE)
++static int kbd_open(struct inode *inode, struct file *file)
++{
++ kdev_t dev = inode->i_rdev;
++
++ return 0;
++}
++
++
++static int kbd_release(struct inode *inode, struct file *file)
++{
++ kbd_fasync(-1, file, 0);
++ return 0;
++}
++
++static int kbd_fasync(int fd, struct file *filp, int on)
++{
++ int retval;
++
++ retval = fasync_helper(fd, filp, on, &fasync_kbd);
++ if (retval < 0)
++ return retval;
++ return 0;
++}
++
++static ssize_t kbd_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
++{
++// printk("kbd read\n");
++ return 0;
++}
++
++static ssize_t kbd_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
++{
++ char tmp[50];
++ int len;
++ int kbd_scancode,kbd_down;
++
++ len=49;
++
++ if(len>count) len=count;
++ copy_from_user(tmp,buffer,len);
++ tmp[len]='\0';
++
++ if (sscanf(tmp,"%d %d",&kbd_scancode, &kbd_down) == 2) {
++// printk("kbd write %02x %02x\n",kbd_scancode,kbd_down);
++ handle_scancode(kbd_scancode,kbd_down);
++ }
++
++// printk("kbd write\n");
++ return count;
++}
++#endif
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P08-rtc-mremap-mremap2nd-fix_041213.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P08-rtc-mremap-mremap2nd-fix_041213.patch
new file mode 100644
index 0000000000..fea565a04a
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P08-rtc-mremap-mremap2nd-fix_041213.patch
@@ -0,0 +1,140 @@
+diff -Nur c3000_pre/linux/arch/cris/drivers/ds1302.c c3000_test/linux/arch/cris/drivers/ds1302.c
+--- c3000_pre/linux/arch/cris/drivers/ds1302.c 2004-08-21 09:48:08.000000000 +0900
++++ c3000_test/linux/arch/cris/drivers/ds1302.c 2004-12-13 23:30:00.000000000 +0900
+@@ -315,6 +315,7 @@
+ {
+ struct rtc_time rtc_tm;
+
++ memset(&rtc_tm, 0, sizeof (struct rtc_time));
+ get_rtc_time(&rtc_tm);
+ if (copy_to_user((struct rtc_time*)arg, &rtc_tm, sizeof(struct rtc_time)))
+ return -EFAULT;
+diff -Nur c3000_pre/linux/arch/m68k/bvme6000/rtc.c c3000_test/linux/arch/m68k/bvme6000/rtc.c
+--- c3000_pre/linux/arch/m68k/bvme6000/rtc.c 2004-08-21 09:48:10.000000000 +0900
++++ c3000_test/linux/arch/m68k/bvme6000/rtc.c 2004-12-13 23:30:00.000000000 +0900
+@@ -54,6 +54,7 @@
+ /* Ensure clock and real-time-mode-register are accessible */
+ msr = rtc->msr & 0xc0;
+ rtc->msr = 0x40;
++ memset(&wtime, 0, sizeof(struct rtc_time));
+ do {
+ wtime.tm_sec = BCD2BIN(rtc->bcd_sec);
+ wtime.tm_min = BCD2BIN(rtc->bcd_min);
+diff -Nur c3000_pre/linux/arch/m68k/mvme16x/rtc.c c3000_test/linux/arch/m68k/mvme16x/rtc.c
+--- c3000_pre/linux/arch/m68k/mvme16x/rtc.c 2004-08-21 09:48:11.000000000 +0900
++++ c3000_test/linux/arch/m68k/mvme16x/rtc.c 2004-12-13 23:30:00.000000000 +0900
+@@ -52,6 +52,7 @@
+ cli();
+ /* Ensure clock and real-time-mode-register are accessible */
+ rtc->ctrl = RTC_READ;
++ memset(&wtime, 0, sizeof(struct rtc_time));
+ wtime.tm_sec = BCD2BIN(rtc->bcd_sec);
+ wtime.tm_min = BCD2BIN(rtc->bcd_min);
+ wtime.tm_hour = BCD2BIN(rtc->bcd_hr);
+diff -Nur c3000_pre/linux/drivers/char/efirtc.c c3000_test/linux/drivers/char/efirtc.c
+--- c3000_pre/linux/drivers/char/efirtc.c 2004-08-21 09:48:25.000000000 +0900
++++ c3000_test/linux/drivers/char/efirtc.c 2004-12-13 23:30:00.000000000 +0900
+@@ -118,6 +118,7 @@
+ static void
+ convert_from_efi_time(efi_time_t *eft, struct rtc_time *wtime)
+ {
++ memset(wtime, 0, sizeof(struct rtc_time));
+ wtime->tm_sec = eft->second;
+ wtime->tm_min = eft->minute;
+ wtime->tm_hour = eft->hour;
+diff -Nur c3000_pre/linux/drivers/char/rtc.c c3000_test/linux/drivers/char/rtc.c
+--- c3000_pre/linux/drivers/char/rtc.c 2004-08-21 09:48:25.000000000 +0900
++++ c3000_test/linux/drivers/char/rtc.c 2004-12-13 23:30:00.000000000 +0900
+@@ -375,7 +375,7 @@
+ * means "don't care" or "match all". Only the tm_hour,
+ * tm_min, and tm_sec values are filled in.
+ */
+-
++ memset(&wtime, 0, sizeof(struct rtc_time));
+ get_rtc_alm_time(&wtime);
+ break;
+ }
+@@ -423,6 +423,7 @@
+ }
+ case RTC_RD_TIME: /* Read the time/date from RTC */
+ {
++ memset(&wtime, 0, sizeof(struct rtc_time));
+ get_rtc_time(&wtime);
+ break;
+ }
+diff -Nur c3000_pre/linux/drivers/macintosh/rtc.c c3000_test/linux/drivers/macintosh/rtc.c
+--- c3000_pre/linux/drivers/macintosh/rtc.c 2004-08-21 09:48:35.000000000 +0900
++++ c3000_test/linux/drivers/macintosh/rtc.c 2004-12-13 23:30:00.000000000 +0900
+@@ -64,6 +64,7 @@
+ case RTC_RD_TIME:
+ if (ppc_md.get_rtc_time)
+ {
++ memset(&rtc_tm, 0, sizeof(struct rtc_time));
+ get_rtc_time(&rtc_tm);
+
+ if (copy_to_user((struct rtc_time*)arg, &rtc_tm, sizeof(struct rtc_time)))
+diff -Nur c3000_pre/linux/drivers/sbus/char/rtc.c c3000_test/linux/drivers/sbus/char/rtc.c
+--- c3000_pre/linux/drivers/sbus/char/rtc.c 2004-08-21 09:48:39.000000000 +0900
++++ c3000_test/linux/drivers/sbus/char/rtc.c 2004-12-13 23:30:00.000000000 +0900
+@@ -89,6 +89,7 @@
+ switch (cmd)
+ {
+ case RTCGET:
++ memset(&rtc_tm, 0, sizeof(struct rtc_time));
+ get_rtc_time(&rtc_tm);
+
+ if (copy_to_user((struct rtc_time*)arg, &rtc_tm, sizeof(struct rtc_time)))
+diff -Nur c3000_pre/linux/mm/mmap.c c3000_test/linux/mm/mmap.c
+--- c3000_pre/linux/mm/mmap.c 2004-08-21 09:49:15.000000000 +0900
++++ c3000_test/linux/mm/mmap.c 2004-12-13 23:27:31.000000000 +0900
+@@ -1045,6 +1045,9 @@
+ if (!len)
+ return addr;
+
++ if ((addr + len) > TASK_SIZE || (addr + len) < addr)
++ return -EINVAL;
++
+ /*
+ * mlock MCL_FUTURE?
+ */
+diff -Nur c3000_pre/linux/mm/mremap.c c3000_test/linux/mm/mremap.c
+--- c3000_pre/linux/mm/mremap.c 2004-08-21 09:49:15.000000000 +0900
++++ c3000_test/linux/mm/mremap.c 2004-12-13 23:30:18.000000000 +0900
+@@ -242,6 +242,13 @@
+
+ if (new_len > TASK_SIZE || new_addr > TASK_SIZE - new_len)
+ goto out;
++ /*
++ * Allow new_len == 0 only if new_addr == addr
++ * to preserve truncation in place (that was working
++ * safe and some app may depend on it).
++ */
++ if (unlikely(!new_len && new_addr != addr))
++ goto out;
+
+ /* Check if the location we're moving into overlaps the
+ * old location at all, and fail if it does.
+@@ -252,16 +259,20 @@
+ if ((addr <= new_addr) && (addr+old_len) > new_addr)
+ goto out;
+
+- do_munmap(current->mm, new_addr, new_len);
++ ret = do_munmap(current->mm, new_addr, new_len);
++ if (ret && new_len)
++ goto out;
+ }
+
+ /*
+ * Always allow a shrinking remap: that just unmaps
+ * the unnecessary pages..
+ */
+- ret = addr;
+ if (old_len >= new_len) {
+- do_munmap(current->mm, addr+new_len, old_len - new_len);
++ ret = do_munmap(current->mm, addr+new_len, old_len - new_len);
++ if (ret && old_len != new_len)
++ goto out;
++ ret = addr;
+ if (!(flags & MREMAP_FIXED) || (new_addr == addr))
+ goto out;
+ }
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P09-ext3-isofs-fix_041216.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P09-ext3-isofs-fix_041216.patch
new file mode 100644
index 0000000000..42acf857c6
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P09-ext3-isofs-fix_041216.patch
@@ -0,0 +1,359 @@
+diff -Nur c3000_pre/linux/drivers/char/drm/r128_state.c c3000_work/linux/drivers/char/drm/r128_state.c
+--- c3000_pre/linux/drivers/char/drm/r128_state.c 2004-08-21 09:48:33.000000000 +0900
++++ c3000_work/linux/drivers/char/drm/r128_state.c 2004-12-16 21:11:04.000000000 +0900
+@@ -23,8 +23,22 @@
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * RED HAT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++ * DEALINGS IN THE SOFTWARE.
++ *
++ * THIS SOFTWARE IS NOT INTENDED FOR USE IN SAFETY CRITICAL SYSTEMS
++ *
+ * Authors:
+ * Gareth Hughes <gareth@valinux.com>
++ *
++ * Memory allocation size checks added 14/01/2003, Alan Cox <alan@redhat.com>
++ * Memory allocation size checks enhanced 16/02/2004, Thomas Biege <thomas@suse.de>
++ *
+ */
+
+ #include "r128.h"
+@@ -902,6 +916,9 @@
+ DRM_DEBUG( "%s\n", __FUNCTION__ );
+
+ count = depth->n;
++
++ if( count > 4096 || count <= 0)
++ return -EMSGSIZE;
+ if ( copy_from_user( &x, depth->x, sizeof(x) ) ) {
+ return -EFAULT;
+ }
+@@ -996,6 +1013,9 @@
+
+ count = depth->n;
+
++ if( count > 4096 || count <= 0)
++ return -EMSGSIZE;
++
+ x = kmalloc( count * sizeof(*x), GFP_KERNEL );
+ if ( x == NULL ) {
+ return -ENOMEM;
+@@ -1110,6 +1130,9 @@
+ DRM_DEBUG( "%s\n", __FUNCTION__ );
+
+ count = depth->n;
++
++ if ( count > 4096 || count <= 0)
++ return -EMSGSIZE;
+ if ( copy_from_user( &x, depth->x, sizeof(x) ) ) {
+ return -EFAULT;
+ }
+@@ -1152,9 +1175,14 @@
+ DRM_DEBUG( "%s\n", __FUNCTION__ );
+
+ count = depth->n;
++ if ( count > 4096 || count <= 0)
++ return -EMSGSIZE;
+ if ( count > dev_priv->depth_pitch ) {
+ count = dev_priv->depth_pitch;
+ }
++ if( count * sizeof(int) <= 0 || count * sizeof(*x) <= 0 || count * sizeof(*y) <= 0)
++ return -EMSGSIZE;
++
+
+ x = kmalloc( count * sizeof(*x), GFP_KERNEL );
+ if ( x == NULL ) {
+diff -Nur c3000_pre/linux/drivers/char/drm-4.0/r128_state.c c3000_work/linux/drivers/char/drm-4.0/r128_state.c
+--- c3000_pre/linux/drivers/char/drm-4.0/r128_state.c 2004-08-21 09:48:33.000000000 +0900
++++ c3000_work/linux/drivers/char/drm-4.0/r128_state.c 2004-12-16 21:11:04.000000000 +0900
+@@ -26,6 +26,8 @@
+ * Authors:
+ * Gareth Hughes <gareth@valinux.com>
+ *
++ * Memory allocation size checks added 16/02/2004, Thomas Biege <thomas@suse.de>
++ *
+ */
+
+ #define __NO_VERSION__
+@@ -938,6 +940,9 @@
+ }
+
+ count = depth->n;
++
++ if( count > 4096 || count <= 0)
++ return -EMSGSIZE;
+ if ( copy_from_user( &x, depth->x, sizeof(x) ) ) {
+ return -EFAULT;
+ }
+@@ -1047,6 +1052,9 @@
+ }
+
+ count = depth->n;
++ if( count > 4096 || count <= 0 || count * sizeof(*x) <= 0 ||
++ count * sizeof(*y) <= 0)
++ return -EMSGSIZE;
+
+ x = kmalloc( count * sizeof(*x), 0 );
+ if ( x == NULL ) {
+@@ -1178,6 +1186,9 @@
+ }
+
+ count = depth->n;
++
++ if ( count > 4096 || count <= 0)
++ return -EMSGSIZE;
+ if ( copy_from_user( &x, depth->x, sizeof(x) ) ) {
+ return -EFAULT;
+ }
+@@ -1235,9 +1246,13 @@
+ }
+
+ count = depth->n;
++ if ( count > 4096 || count <= 0)
++ return -EMSGSIZE;
+ if ( count > dev_priv->depth_pitch ) {
+ count = dev_priv->depth_pitch;
+ }
++ if( count * sizeof(int) <= 0 || count * sizeof(*x) <= 0 || count * sizeof(*y) <= 0)
++ return -EMSGSIZE;
+
+ x = kmalloc( count * sizeof(*x), 0 );
+ if ( x == NULL ) {
+diff -Nur c3000_pre/linux/drivers/sound/sb_audio.c c3000_work/linux/drivers/sound/sb_audio.c
+--- c3000_pre/linux/drivers/sound/sb_audio.c 2004-08-21 09:48:54.000000000 +0900
++++ c3000_work/linux/drivers/sound/sb_audio.c 2004-12-16 21:11:04.000000000 +0900
+@@ -879,7 +879,7 @@
+ c -= locallen; p += locallen;
+ }
+ /* used = ( samples * 16 bits size ) */
+- *used = len << 1;
++ *used = (max_in > (max_out << 1)) ? (max_out << 1) : max_in;
+ /* returned = ( samples * 8 bits size ) */
+ *returned = len;
+ }
+diff -Nur c3000_pre/linux/fs/isofs/dir.c c3000_work/linux/fs/isofs/dir.c
+--- c3000_pre/linux/fs/isofs/dir.c 2004-08-21 09:48:59.000000000 +0900
++++ c3000_work/linux/fs/isofs/dir.c 2004-12-16 21:11:04.000000000 +0900
+@@ -63,7 +63,8 @@
+ break;
+
+ /* Convert remaining ';' to '.' */
+- if (c == ';')
++ /* Also '/' to '.' (broken Acorn-generated ISO9660 images) */
++ if (c == ';' || c == '/')
+ c = '.';
+
+ new[i] = c;
+diff -Nur c3000_pre/linux/fs/jbd/journal.c c3000_work/linux/fs/jbd/journal.c
+--- c3000_pre/linux/fs/jbd/journal.c 2004-08-21 09:48:59.000000000 +0900
++++ c3000_work/linux/fs/jbd/journal.c 2004-12-16 21:11:04.000000000 +0900
+@@ -671,6 +671,7 @@
+
+ bh = getblk(journal->j_dev, blocknr, journal->j_blocksize);
+ lock_buffer(bh);
++ memset(bh->b_data, 0, journal->j_blocksize);
+ BUFFER_TRACE(bh, "return this buffer");
+ return journal_add_journal_head(bh);
+ }
+diff -Nur c3000_pre/linux/fs/ncpfs/dir.c c3000_work/linux/fs/ncpfs/dir.c
+--- c3000_pre/linux/fs/ncpfs/dir.c 2004-08-21 09:49:00.000000000 +0900
++++ c3000_work/linux/fs/ncpfs/dir.c 2004-12-16 21:11:04.000000000 +0900
+@@ -266,8 +266,8 @@
+ struct ncp_server *server;
+ struct inode *dir = dentry->d_parent->d_inode;
+ struct ncp_entry_info finfo;
+- int res, val = 0, len = dentry->d_name.len + 1;
+- __u8 __name[len];
++ int res, val = 0, len;
++ __u8 __name[NCP_MAXPATHLEN + 1];
+
+ if (!dentry->d_inode || !dir)
+ goto finished;
+@@ -291,14 +291,15 @@
+ dentry->d_parent->d_name.name, dentry->d_name.name,
+ NCP_GET_AGE(dentry));
+
++ len = sizeof(__name);
+ if (ncp_is_server_root(dir)) {
+ res = ncp_io2vol(server, __name, &len, dentry->d_name.name,
+- len-1, 1);
++ dentry->d_name.len, 1);
+ if (!res)
+ res = ncp_lookup_volume(server, __name, &(finfo.i));
+ } else {
+ res = ncp_io2vol(server, __name, &len, dentry->d_name.name,
+- len-1, !ncp_preserve_case(dir));
++ dentry->d_name.len, !ncp_preserve_case(dir));
+ if (!res)
+ res = ncp_obtain_info(server, dir, __name, &(finfo.i));
+ }
+@@ -548,9 +549,9 @@
+ int valid = 0;
+ int hashed = 0;
+ ino_t ino = 0;
+- __u8 __name[256];
++ __u8 __name[NCP_MAXPATHLEN + 1];
+
+- qname.len = 256;
++ qname.len = sizeof(__name);
+ if (ncp_vol2io(NCP_SERVER(inode), __name, &qname.len,
+ entry->i.entryName, entry->i.nameLen,
+ !ncp_preserve_entry_case(inode, entry->i.NSCreator)))
+@@ -705,16 +706,19 @@
+ {
+ struct ncp_server* server = NCP_SBP(sb);
+ struct nw_info_struct i;
+- int result, len = strlen(server->m.mounted_vol) + 1;
+- __u8 __name[len];
++ int result;
+
+ if (ncp_single_volume(server)) {
++ int len;
+ struct dentry* dent;
++ __u8 __name[NCP_MAXPATHLEN + 1];
+
+- result = -ENOENT;
+- if (ncp_io2vol(server, __name, &len, server->m.mounted_vol,
+- len-1, 1))
++ len = sizeof(__name);
++ result = ncp_io2vol(server, __name, &len, server->m.mounted_vol,
++ strlen(server->m.mounted_vol), 1);
++ if (result)
+ goto out;
++ result = -ENOENT;
+ if (ncp_lookup_volume(server, __name, &i)) {
+ PPRINTK("ncp_conn_logged_in: %s not found\n",
+ server->m.mounted_vol);
+@@ -745,8 +749,8 @@
+ struct ncp_server *server = NCP_SERVER(dir);
+ struct inode *inode = NULL;
+ struct ncp_entry_info finfo;
+- int error, res, len = dentry->d_name.len + 1;
+- __u8 __name[len];
++ int error, res, len;
++ __u8 __name[NCP_MAXPATHLEN + 1];
+
+ error = -EIO;
+ if (!ncp_conn_valid(server))
+@@ -755,14 +759,15 @@
+ PPRINTK("ncp_lookup: server lookup for %s/%s\n",
+ dentry->d_parent->d_name.name, dentry->d_name.name);
+
++ len = sizeof(__name);
+ if (ncp_is_server_root(dir)) {
+ res = ncp_io2vol(server, __name, &len, dentry->d_name.name,
+- len-1, 1);
++ dentry->d_name.len, 1);
+ if (!res)
+ res = ncp_lookup_volume(server, __name, &(finfo.i));
+ } else {
+ res = ncp_io2vol(server, __name, &len, dentry->d_name.name,
+- len-1, !ncp_preserve_case(dir));
++ dentry->d_name.len, !ncp_preserve_case(dir));
+ if (!res)
+ res = ncp_obtain_info(server, dir, __name, &(finfo.i));
+ }
+@@ -825,9 +830,9 @@
+ {
+ struct ncp_server *server = NCP_SERVER(dir);
+ struct ncp_entry_info finfo;
+- int error, result, len = dentry->d_name.len + 1;
++ int error, result, len;
+ int opmode;
+- __u8 __name[len];
++ __u8 __name[NCP_MAXPATHLEN + 1];
+
+ PPRINTK("ncp_create_new: creating %s/%s, mode=%x\n",
+ dentry->d_parent->d_name.name, dentry->d_name.name, mode);
+@@ -836,8 +841,9 @@
+ goto out;
+
+ ncp_age_dentry(server, dentry);
++ len = sizeof(__name);
+ error = ncp_io2vol(server, __name, &len, dentry->d_name.name,
+- len-1, !ncp_preserve_case(dir));
++ dentry->d_name.len, !ncp_preserve_case(dir));
+ if (error)
+ goto out;
+
+@@ -880,8 +886,8 @@
+ {
+ struct ncp_entry_info finfo;
+ struct ncp_server *server = NCP_SERVER(dir);
+- int error, len = dentry->d_name.len + 1;
+- __u8 __name[len];
++ int error, len;
++ __u8 __name[NCP_MAXPATHLEN + 1];
+
+ DPRINTK("ncp_mkdir: making %s/%s\n",
+ dentry->d_parent->d_name.name, dentry->d_name.name);
+@@ -890,8 +896,9 @@
+ goto out;
+
+ ncp_age_dentry(server, dentry);
++ len = sizeof(__name);
+ error = ncp_io2vol(server, __name, &len, dentry->d_name.name,
+- len-1, !ncp_preserve_case(dir));
++ dentry->d_name.len, !ncp_preserve_case(dir));
+ if (error)
+ goto out;
+
+@@ -909,8 +916,8 @@
+ static int ncp_rmdir(struct inode *dir, struct dentry *dentry)
+ {
+ struct ncp_server *server = NCP_SERVER(dir);
+- int error, result, len = dentry->d_name.len + 1;
+- __u8 __name[len];
++ int error, result, len;
++ __u8 __name[NCP_MAXPATHLEN + 1];
+
+ DPRINTK("ncp_rmdir: removing %s/%s\n",
+ dentry->d_parent->d_name.name, dentry->d_name.name);
+@@ -923,8 +930,9 @@
+ if (!d_unhashed(dentry))
+ goto out;
+
++ len = sizeof(__name);
+ error = ncp_io2vol(server, __name, &len, dentry->d_name.name,
+- len-1, !ncp_preserve_case(dir));
++ dentry->d_name.len, !ncp_preserve_case(dir));
+ if (error)
+ goto out;
+
+@@ -1022,9 +1030,8 @@
+ {
+ struct ncp_server *server = NCP_SERVER(old_dir);
+ int error;
+- int old_len = old_dentry->d_name.len + 1;
+- int new_len = new_dentry->d_name.len + 1;
+- __u8 __old_name[old_len], __new_name[new_len];
++ int old_len, new_len;
++ __u8 __old_name[NCP_MAXPATHLEN + 1], __new_name[NCP_MAXPATHLEN + 1];
+
+ DPRINTK("ncp_rename: %s/%s to %s/%s\n",
+ old_dentry->d_parent->d_name.name, old_dentry->d_name.name,
+@@ -1037,14 +1044,16 @@
+ ncp_age_dentry(server, old_dentry);
+ ncp_age_dentry(server, new_dentry);
+
++ old_len = sizeof(__old_name);
+ error = ncp_io2vol(server, __old_name, &old_len,
+- old_dentry->d_name.name, old_len-1,
++ old_dentry->d_name.name, old_dentry->d_name.len,
+ !ncp_preserve_case(old_dir));
+ if (error)
+ goto out;
+
++ new_len = sizeof(__new_name);
+ error = ncp_io2vol(server, __new_name, &new_len,
+- new_dentry->d_name.name, new_len-1,
++ new_dentry->d_name.name, new_dentry->d_name.len,
+ !ncp_preserve_case(new_dir));
+ if (error)
+ goto out;
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P10-ntfs-fix_041216.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P10-ntfs-fix_041216.patch
new file mode 100644
index 0000000000..9c3601aeda
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P10-ntfs-fix_041216.patch
@@ -0,0 +1,25 @@
+diff -Nur c3000_pre/linux/fs/ntfs/attrib.c c3000_work/linux/fs/ntfs/attrib.c
+--- c3000_pre/linux/fs/ntfs/attrib.c 2004-08-21 09:49:00.000000000 +0900
++++ c3000_work/linux/fs/ntfs/attrib.c 2004-12-16 22:58:06.000000000 +0900
+@@ -1223,6 +1223,21 @@
+ *
+ * Return 0 on success or -errno on error.
+ */
++/* ##koko */
++int __cmpdi2( const s64 arg1, const s64 arg2 )
++{
++ u32 low1, low2;
++ s32 hi1, hi2;
++ hi1 = (s32)( arg1>>32 ) & 0xFFFFFFFF;
++ hi2 = (s32)( arg2>>32 ) & 0xFFFFFFFF;
++ if( hi1<hi2 ) return( -1 );
++ else if( hi1>hi2 ) return( 1 );
++ low1 = (u32)arg1 & 0xFFFFFFFF;
++ low2 = (u32)arg2 & 0xFFFFFFFF;
++ if( low1<low2 ) return( -1 );
++ else if( low1>low2 ) return( 1 );
++ return( 0 );
++}
+ int load_attribute_list(ntfs_volume *vol, run_list *run_list, u8 *al,
+ const s64 size, const s64 initialized_size)
+ {
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P11-bluetooth-mh18_041216.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P11-bluetooth-mh18_041216.patch
new file mode 100644
index 0000000000..0a2b7fbde4
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P11-bluetooth-mh18_041216.patch
@@ -0,0 +1,16593 @@
+diff -Nur c3000_pre/linux/CREDITS c3000_work/linux/CREDITS
+--- c3000_pre/linux/CREDITS 2004-08-21 09:48:05.000000000 +0900
++++ c3000_work/linux/CREDITS 2004-12-16 23:01:14.000000000 +0900
+@@ -1344,7 +1344,11 @@
+ N: Marcel Holtmann
+ E: marcel@holtmann.org
+ W: http://www.holtmann.org
+-D: Author of the Linux Bluetooth Subsystem PC Card drivers
++D: Maintainer of the Linux Bluetooth Subsystem
++D: Author and maintainer of the various Bluetooth HCI drivers
++D: Author and maintainer of the CAPI message transport protocol driver
++D: Author and maintainer of the Bluetooth HID protocol driver
++D: Various other Bluetooth related patches, cleanups and fixes
+ S: Germany
+
+ N: Rob W. W. Hooft
+@@ -2592,6 +2596,7 @@
+ N: Aristeu Sergio Rozanski Filho
+ E: aris@conectiva.com.br
+ D: Support for EtherExpress 10 ISA (i82595) in eepro driver
++D: User level driver support for input
+ S: Conectiva S.A.
+ S: R. Tocantins, 89 - Cristo Rei
+ S: 80050-430 - Curitiba - Paraná
+diff -Nur c3000_pre/linux/Documentation/Configure.help c3000_work/linux/Documentation/Configure.help
+--- c3000_pre/linux/Documentation/Configure.help 2004-08-21 09:48:06.000000000 +0900
++++ c3000_work/linux/Documentation/Configure.help 2004-12-16 23:01:14.000000000 +0900
+@@ -12238,6 +12238,12 @@
+
+ If unsure, say N.
+
++Hotplug firmware loading support (EXPERIMENTAL)
++CONFIG_FW_LOADER
++ This option is provided for the case where no in-kernel-tree modules require
++ hotplug firmware loading support, but a module built outside the kernel tree
++ does.
++
+ Use PCI shared memory for NIC registers
+ CONFIG_TULIP_MMIO
+ Use PCI shared memory for the NIC registers, rather than going through
+@@ -14373,6 +14379,15 @@
+ accessible under char device 13:64+ - /dev/input/eventX in a generic
+ way. This is the future ...
+
++CONFIG_INPUT_UINPUT
++ Say Y here if you want to support user level drivers for input
++ subsystem accessible under char device 10:223 - /dev/input/uinput.
++
++ This driver is also available as a module ( = code which can be
++ inserted in and removed from the running kernel whenever you want).
++ The module will be called uinput.o. If you want to compile it as a
++ module, say M here and read <file:Documentation/modules.txt>.
++
+ USB Scanner support
+ CONFIG_USB_SCANNER
+ Say Y here if you want to connect a USB scanner to your computer's
+@@ -21868,19 +21883,21 @@
+
+ Linux Bluetooth subsystem consist of several layers:
+ BlueZ Core (HCI device and connection manager, scheduler)
+- HCI Device drivers (interface to the hardware)
+- L2CAP Module (L2CAP protocol)
+- SCO Module (SCO links)
++ HCI Device drivers (Interface to the hardware)
++ SCO Module (SCO audio links)
++ L2CAP Module (Logical Link Control and Adaptation Protocol)
++ RFCOMM Module (RFCOMM Protocol)
++ BNEP Module (Bluetooth Network Encapsulation Protocol)
++ CMTP Module (CAPI Message Transport Protocol)
++ HIDP Module (Human Interface Device Protocol)
+
+- Say Y here to enable Linux Bluetooth support and to build BlueZ Core
+- layer.
++ Say Y here to compile Bluetooth support into the kernel or say M to
++ compile it as module (bluez.o).
+
+ To use Linux Bluetooth subsystem, you will need several user-space
+ utilities like hciconfig and hcid. These utilities and updates to
+ Bluetooth kernel modules are provided in the BlueZ package.
+- For more information, see <http://bluez.sourceforge.net/>.
+-
+- If you want to compile BlueZ Core as module (bluez.o) say M here.
++ For more information, see <http://www.bluez.org/>.
+
+ L2CAP protocol support
+ CONFIG_BLUEZ_L2CAP
+@@ -21893,25 +21910,60 @@
+
+ SCO links support
+ CONFIG_BLUEZ_SCO
+- SCO link provides voice transport over Bluetooth. SCO support is
++ SCO link provides voice transport over Bluetooth. SCO support is
+ required for voice applications like Headset and Audio.
+
+ Say Y here to compile SCO support into the kernel or say M to
+ compile it as module (sco.o).
+
++RFCOMM protocol support
++CONFIG_BLUEZ_RFCOMM
++ RFCOMM provides connection oriented stream transport. RFCOMM
++ support is required for Dialup Networking, OBEX and other Bluetooth
++ applications.
++
++ Say Y here to compile RFCOMM support into the kernel or say M to
++ compile it as module (rfcomm.o).
++
++RFCOMM TTY emulation support
++CONFIG_BLUEZ_RFCOMM_TTY
++ This option enables TTY emulation support for RFCOMM channels.
++
+ BNEP protocol support
+ CONFIG_BLUEZ_BNEP
+ BNEP (Bluetooth Network Encapsulation Protocol) is Ethernet
+- emulation layer on top of Bluetooth. BNEP is required for Bluetooth
+- PAN (Personal Area Network).
+-
+- To use BNEP, you will need user-space utilities provided in the
+- BlueZ-PAN package.
+- For more information, see <http://bluez.sourceforge.net>.
++ emulation layer on top of Bluetooth. BNEP is required for
++ Bluetooth PAN (Personal Area Network).
+
+ Say Y here to compile BNEP support into the kernel or say M to
+ compile it as module (bnep.o).
+
++BNEP multicast filter support
++CONFIG_BLUEZ_BNEP_MC_FILTER
++ This option enables the multicast filter support for BNEP.
++
++BNEP protocol filter support
++CONFIG_BLUEZ_BNEP_PROTO_FILTER
++ This option enables the protocol filter support for BNEP.
++
++CMTP protocol support
++CONFIG_BLUEZ_CMTP
++ CMTP (CAPI Message Transport Protocol) is a transport layer
++ for CAPI messages. CMTP is required for the Bluetooth Common
++ ISDN Access Profile.
++
++ Say Y here to compile CMTP support into the kernel or say M to
++ compile it as module (cmtp.o).
++
++HIDP protocol support
++CONFIG_BLUEZ_HIDP
++ HIDP (Human Interface Device Protocol) is a transport layer
++ for HID reports. HIDP is required for the Bluetooth Human
++ Interface Device Profile.
++
++ Say Y here to compile HIDP support into the kernel or say M to
++ compile it as module (hidp.o).
++
+ HCI UART driver
+ CONFIG_BLUEZ_HCIUART
+ Bluetooth HCI UART driver.
+@@ -21926,11 +21978,26 @@
+ HCI UART (H4) protocol support
+ CONFIG_BLUEZ_HCIUART_H4
+ UART (H4) is serial protocol for communication between Bluetooth
+- device and host. This protocol is required for most UART based
+- Bluetooth device (including PCMCIA and CF).
++ device and host. This protocol is required for most Bluetooth devices
++ with UART interface, including PCMCIA and CF cards.
+
+ Say Y here to compile support for HCI UART (H4) protocol.
+
++HCI BCSP protocol support
++CONFIG_BLUEZ_HCIUART_BCSP
++ BCSP (BlueCore Serial Protocol) is serial protocol for communication
++ between Bluetooth device and host. This protocol is required for non
++ USB Bluetooth devices based on CSR BlueCore chip, including PCMCIA and
++ CF cards.
++
++ Say Y here to compile support for HCI BCSP protocol.
++
++HCI BCSP transmit CRC with every BCSP packet
++CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ If you say Y here, a 16-bit CRC checksum will be transmitted along with
++ every BCSP (BlueCore Serial Protocol) packet sent to the Bluetooth chip.
++ This increases reliability, but slightly reduces efficiency.
++
+ HCI USB driver
+ CONFIG_BLUEZ_HCIUSB
+ Bluetooth HCI USB driver.
+@@ -21940,14 +22007,15 @@
+ Say Y here to compile support for Bluetooth USB devices into the
+ kernel or say M to compile it as module (hci_usb.o).
+
+-HCI USB zero packet support
+-CONFIG_BLUEZ_USB_ZERO_PACKET
+- Support for USB zero packets.
+- This option is provided only as a work around for buggy Bluetooth USB
+- devices. Do _not_ enable it unless you know for sure that your device
+- requires zero packets.
+- Most people should say N here.
+-
++HCI USB SCO (voice) support
++CONFIG_BLUEZ_HCIUSB_SCO
++ This option enables the SCO support in the HCI USB driver. You need this
++ to transmit voice data with your Bluetooth USB device. And your device
++ must also support sending SCO data over the HCI layer, because some of
++ them sends the SCO data to an internal PCM adapter.
++
++ Say Y here to compile support for HCI SCO data.
++
+ HCI VHCI Virtual HCI device driver
+ CONFIG_BLUEZ_HCIVHCI
+ Bluetooth Virtual HCI device driver.
+@@ -21956,6 +22024,16 @@
+ Say Y here to compile support for virtual HCI devices into the
+ kernel or say M to compile it as module (hci_vhci.o).
+
++HCI BFUSB device driver
++CONFIG_BLUEZ_HCIBFUSB
++ Bluetooth HCI BlueFRITZ! USB driver.
++ This driver provides support for Bluetooth USB devices with AVM
++ interface:
++ AVM BlueFRITZ! USB
++
++ Say Y here to compile support for HCI BFUSB devices into the
++ kernel or say M to compile it as module (bfusb.o).
++
+ HCI DTL1 (PC Card) device driver
+ CONFIG_BLUEZ_HCIDTL1
+ Bluetooth HCI DTL1 (PC Card) driver.
+@@ -21975,9 +22053,6 @@
+ 3Com Bluetooth Card (3CRWB6096)
+ HP Bluetooth Card
+
+- The HCI BT3C driver uses external firmware loader program provided in
+- the BlueFW package. For more information, see <http://bluez.sf.net>.
+-
+ Say Y here to compile support for HCI BT3C devices into the
+ kernel or say M to compile it as module (bt3c_cs.o).
+
+@@ -21992,6 +22067,20 @@
+ Say Y here to compile support for HCI BlueCard devices into the
+ kernel or say M to compile it as module (bluecard_cs.o).
+
++HCI UART (PC Card) device driver
++CONFIG_BLUEZ_HCIBTUART
++ Bluetooth HCI UART (PC Card) driver.
++ This driver provides support for Bluetooth PCMCIA devices with
++ an UART interface:
++ Xircom CreditCard Bluetooth Adapter
++ Xircom RealPort2 Bluetooth Adapter
++ Sphinx PICO Card
++ H-Soft blue+Card
++ Cyber-blue Compact Flash Card
++
++ Say Y here to compile support for HCI UART devices into the
++ kernel or say M to compile it as module (btuart_cs.o).
++
+ # The following options are for Linux when running on the Hitachi
+ # SuperH family of RISC microprocessors.
+
+diff -Nur c3000_pre/linux/Documentation/devices.txt c3000_work/linux/Documentation/devices.txt
+--- c3000_pre/linux/Documentation/devices.txt 2004-08-21 09:48:06.000000000 +0900
++++ c3000_work/linux/Documentation/devices.txt 2004-12-16 23:01:14.000000000 +0900
+@@ -419,6 +419,7 @@
+ 220 = /dev/mptctl Message passing technology (MPT) control
+ 221 = /dev/mvista/hssdsi Montavista PICMG hot swap system driver
+ 222 = /dev/mvista/hasi Montavista PICMG high availability
++ 223 = /dev/input/uinput User level driver support for input
+ 240-255 Reserved for local use
+
+ 11 char Raw keyboard device
+diff -Nur c3000_pre/linux/Documentation/firmware_class/README c3000_work/linux/Documentation/firmware_class/README
+--- c3000_pre/linux/Documentation/firmware_class/README 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/Documentation/firmware_class/README 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,58 @@
++
++ request_firmware() hotplug interface:
++ ------------------------------------
++ Copyright (C) 2003 Manuel Estrada Sainz <ranty@debian.org>
++
++ Why:
++ ---
++
++ Today, the most extended way to use firmware in the Linux kernel is linking
++ it statically in a header file. Which has political and technical issues:
++
++ 1) Some firmware is not legal to redistribute.
++ 2) The firmware occupies memory permanently, even though it often is just
++ used once.
++ 3) Some people, like the Debian crowd, don't consider some firmware free
++ enough and remove entire drivers (e.g.: keyspan).
++
++ about in-kernel persistence:
++ ---------------------------
++ Under some circumstances, as explained below, it would be interesting to keep
++ firmware images in non-swappable kernel memory or even in the kernel image
++ (probably within initramfs).
++
++ Note that this functionality has not been implemented.
++
++ - Why OPTIONAL in-kernel persistence may be a good idea sometimes:
++
++ - If the device that needs the firmware is needed to access the
++ filesystem. When upon some error the device has to be reset and the
++ firmware reloaded, it won't be possible to get it from userspace.
++ e.g.:
++ - A diskless client with a network card that needs firmware.
++ - The filesystem is stored in a disk behind an scsi device
++ that needs firmware.
++ - Replacing buggy DSDT/SSDT ACPI tables on boot.
++ Note: this would require the persistent objects to be included
++ within the kernel image, probably within initramfs.
++
++ And the same device can be needed to access the filesystem or not depending
++ on the setup, so I think that the choice on what firmware to make
++ persistent should be left to userspace.
++
++ - Why register_firmware()+__init can be useful:
++ - For boot devices needing firmware.
++ - To make the transition easier:
++ The firmware can be declared __init and register_firmware()
++ called on module_init. Then the firmware is warranted to be
++ there even if "firmware hotplug userspace" is not there yet or
++ it doesn't yet provide the needed firmware.
++ Once the firmware is widely available in userspace, it can be
++ removed from the kernel. Or made optional (CONFIG_.*_FIRMWARE).
++
++ In either case, if firmware hotplug support is there, it can move the
++ firmware out of kernel memory into the real filesystem for later
++ usage.
++
++ Note: If persistence is implemented on top of initramfs,
++ register_firmware() may not be appropriate.
+diff -Nur c3000_pre/linux/Documentation/firmware_class/firmware_sample_driver.c c3000_work/linux/Documentation/firmware_class/firmware_sample_driver.c
+--- c3000_pre/linux/Documentation/firmware_class/firmware_sample_driver.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/Documentation/firmware_class/firmware_sample_driver.c 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,121 @@
++/*
++ * firmware_sample_driver.c -
++ *
++ * Copyright (c) 2003 Manuel Estrada Sainz <ranty@debian.org>
++ *
++ * Sample code on how to use request_firmware() from drivers.
++ *
++ * Note that register_firmware() is currently useless.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/string.h>
++
++#include "linux/firmware.h"
++
++#define WE_CAN_NEED_FIRMWARE_BEFORE_USERSPACE_IS_AVAILABLE
++#ifdef WE_CAN_NEED_FIRMWARE_BEFORE_USERSPACE_IS_AVAILABLE
++char __init inkernel_firmware[] = "let's say that this is firmware\n";
++#endif
++
++static char ghost_device[] = "ghost0";
++
++static void sample_firmware_load(char *firmware, int size)
++{
++ u8 buf[size+1];
++ memcpy(buf, firmware, size);
++ buf[size] = '\0';
++ printk("firmware_sample_driver: firmware: %s\n", buf);
++}
++
++static void sample_probe_default(void)
++{
++ /* uses the default method to get the firmware */
++ const struct firmware *fw_entry;
++ printk("firmware_sample_driver: a ghost device got inserted :)\n");
++
++ if(request_firmware(&fw_entry, "sample_driver_fw", ghost_device)!=0)
++ {
++ printk(KERN_ERR
++ "firmware_sample_driver: Firmware not available\n");
++ return;
++ }
++
++ sample_firmware_load(fw_entry->data, fw_entry->size);
++
++ release_firmware(fw_entry);
++
++ /* finish setting up the device */
++}
++static void sample_probe_specific(void)
++{
++ /* Uses some specific hotplug support to get the firmware from
++ * userspace directly into the hardware, or via some sysfs file */
++
++ /* NOTE: This currently doesn't work */
++
++ printk("firmware_sample_driver: a ghost device got inserted :)\n");
++
++ if(request_firmware(NULL, "sample_driver_fw", ghost_device)!=0)
++ {
++ printk(KERN_ERR
++ "firmware_sample_driver: Firmware load failed\n");
++ return;
++ }
++
++ /* request_firmware blocks until userspace finished, so at
++ * this point the firmware should be already in the device */
++
++ /* finish setting up the device */
++}
++static void sample_probe_async_cont(const struct firmware *fw, void *context)
++{
++ if(!fw){
++ printk(KERN_ERR
++ "firmware_sample_driver: firmware load failed\n");
++ return;
++ }
++
++ printk("firmware_sample_driver: device pointer \"%s\"\n",
++ (char *)context);
++ sample_firmware_load(fw->data, fw->size);
++}
++static void sample_probe_async(void)
++{
++ /* Let's say that I can't sleep */
++ int error;
++ error = request_firmware_nowait (THIS_MODULE,
++ "sample_driver_fw", ghost_device,
++ "my device pointer",
++ sample_probe_async_cont);
++ if(error){
++ printk(KERN_ERR
++ "firmware_sample_driver:"
++ " request_firmware_nowait failed\n");
++ }
++}
++
++static int sample_init(void)
++{
++#ifdef WE_CAN_NEED_FIRMWARE_BEFORE_USERSPACE_IS_AVAILABLE
++ register_firmware("sample_driver_fw", inkernel_firmware,
++ sizeof(inkernel_firmware));
++#endif
++ /* since there is no real hardware insertion I just call the
++ * sample probe functions here */
++ sample_probe_specific();
++ sample_probe_default();
++ sample_probe_async();
++ return 0;
++}
++static void __exit sample_exit(void)
++{
++}
++
++module_init (sample_init);
++module_exit (sample_exit);
++
++MODULE_LICENSE("GPL");
+diff -Nur c3000_pre/linux/Documentation/firmware_class/hotplug-script c3000_work/linux/Documentation/firmware_class/hotplug-script
+--- c3000_pre/linux/Documentation/firmware_class/hotplug-script 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/Documentation/firmware_class/hotplug-script 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,16 @@
++#!/bin/sh
++
++# Simple hotplug script sample:
++#
++# Both $DEVPATH and $FIRMWARE are already provided in the environment.
++
++HOTPLUG_FW_DIR=/usr/lib/hotplug/firmware/
++
++echo 1 > /sysfs/$DEVPATH/loading
++cat $HOTPLUG_FW_DIR/$FIRMWARE > /sysfs/$DEVPATH/data
++echo 0 > /sysfs/$DEVPATH/loading
++
++# To cancel the load in case of error:
++#
++# echo -1 > /sysfs/$DEVPATH/loading
++#
+diff -Nur c3000_pre/linux/MAINTAINERS c3000_work/linux/MAINTAINERS
+--- c3000_pre/linux/MAINTAINERS 2004-08-21 09:48:05.000000000 +0900
++++ c3000_work/linux/MAINTAINERS 2004-12-16 23:01:14.000000000 +0900
+@@ -267,16 +267,88 @@
+ L: linux-kernel@vger.kernel.org
+ S: Maintained
+
+-BLUETOOTH SUBSYSTEM (BlueZ)
++BLUETOOTH SUBSYSTEM
++P: Marcel Holtmann
++M: marcel@holtmann.org
+ P: Maxim Krasnyansky
+ M: maxk@qualcomm.com
++L: bluez-devel@lists.sf.net
+ W: http://bluez.sf.net
++W: http://www.bluez.org
++W: http://www.holtmann.org/linux/bluetooth/
+ S: Maintained
+
+-BLUETOOTH SUBSYSTEM (PC Card Drivers)
++BLUETOOTH RFCOMM LAYER
+ P: Marcel Holtmann
+ M: marcel@holtmann.org
+-W: http://www.holtmann.org/linux/bluetooth/
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
++S: Maintained
++
++BLUETOOTH BNEP LAYER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
++S: Maintained
++
++BLUETOOTH CMTP LAYER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HIDP LAYER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI UART DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
++S: Maintained
++
++BLUETOOTH HCI USB DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
++S: Maintained
++
++BLUETOOTH HCI BCM203X DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI BFUSB DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI DTL1 DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI BLUECARD DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI BT3C DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI BTUART DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI VHCI DRIVER
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
+ S: Maintained
+
+ BTTV VIDEO4LINUX DRIVER
+diff -Nur c3000_pre/linux/arch/sparc64/kernel/ioctl32.c c3000_work/linux/arch/sparc64/kernel/ioctl32.c
+--- c3000_pre/linux/arch/sparc64/kernel/ioctl32.c 2004-08-21 09:48:22.000000000 +0900
++++ c3000_work/linux/arch/sparc64/kernel/ioctl32.c 2004-12-16 23:01:14.000000000 +0900
+@@ -95,6 +95,7 @@
+
+ #include <net/bluetooth/bluetooth.h>
+ #include <net/bluetooth/hci.h>
++#include <net/bluetooth/rfcomm.h>
+
+ #include <linux/usb.h>
+ #include <linux/usbdevice_fs.h>
+@@ -4286,6 +4287,25 @@
+ return sys_ioctl(fd, BLKGETSIZE64, arg);
+ }
+
++/* Bluetooth ioctls */
++#define HCIUARTSETPROTO _IOW('U', 200, int)
++#define HCIUARTGETPROTO _IOR('U', 201, int)
++
++#define BNEPCONNADD _IOW('B', 200, int)
++#define BNEPCONNDEL _IOW('B', 201, int)
++#define BNEPGETCONNLIST _IOR('B', 210, int)
++#define BNEPGETCONNINFO _IOR('B', 211, int)
++
++#define CMTPCONNADD _IOW('C', 200, int)
++#define CMTPCONNDEL _IOW('C', 201, int)
++#define CMTPGETCONNLIST _IOR('C', 210, int)
++#define CMTPGETCONNINFO _IOR('C', 211, int)
++
++#define HIDPCONNADD _IOW('H', 200, int)
++#define HIDPCONNDEL _IOW('H', 201, int)
++#define HIDPGETCONNLIST _IOR('H', 210, int)
++#define HIDPGETCONNINFO _IOR('H', 211, int)
++
+ struct ioctl_trans {
+ unsigned int cmd;
+ unsigned int handler;
+@@ -4987,6 +5007,25 @@
+ COMPATIBLE_IOCTL(HCISETACLMTU)
+ COMPATIBLE_IOCTL(HCISETSCOMTU)
+ COMPATIBLE_IOCTL(HCIINQUIRY)
++COMPATIBLE_IOCTL(HCIUARTSETPROTO)
++COMPATIBLE_IOCTL(HCIUARTGETPROTO)
++COMPATIBLE_IOCTL(RFCOMMCREATEDEV)
++COMPATIBLE_IOCTL(RFCOMMRELEASEDEV)
++COMPATIBLE_IOCTL(RFCOMMGETDEVLIST)
++COMPATIBLE_IOCTL(RFCOMMGETDEVINFO)
++COMPATIBLE_IOCTL(RFCOMMSTEALDLC)
++COMPATIBLE_IOCTL(BNEPCONNADD)
++COMPATIBLE_IOCTL(BNEPCONNDEL)
++COMPATIBLE_IOCTL(BNEPGETCONNLIST)
++COMPATIBLE_IOCTL(BNEPGETCONNINFO)
++COMPATIBLE_IOCTL(CMTPCONNADD)
++COMPATIBLE_IOCTL(CMTPCONNDEL)
++COMPATIBLE_IOCTL(CMTPGETCONNLIST)
++COMPATIBLE_IOCTL(CMTPGETCONNINFO)
++COMPATIBLE_IOCTL(HIDPCONNADD)
++COMPATIBLE_IOCTL(HIDPCONNDEL)
++COMPATIBLE_IOCTL(HIDPGETCONNLIST)
++COMPATIBLE_IOCTL(HIDPGETCONNINFO)
+ /* Misc. */
+ COMPATIBLE_IOCTL(0x41545900) /* ATYIO_CLKR */
+ COMPATIBLE_IOCTL(0x41545901) /* ATYIO_CLKW */
+diff -Nur c3000_pre/linux/drivers/bluetooth/Config.in c3000_work/linux/drivers/bluetooth/Config.in
+--- c3000_pre/linux/drivers/bluetooth/Config.in 2004-08-21 09:48:24.000000000 +0900
++++ c3000_work/linux/drivers/bluetooth/Config.in 2004-12-16 23:01:14.000000000 +0900
+@@ -1,22 +1,33 @@
++#
++# Bluetooth HCI device drivers configuration
++#
++
+ mainmenu_option next_comment
+ comment 'Bluetooth device drivers'
+
+ dep_tristate 'HCI USB driver' CONFIG_BLUEZ_HCIUSB $CONFIG_BLUEZ $CONFIG_USB
+ if [ "$CONFIG_BLUEZ_HCIUSB" != "n" ]; then
+- bool ' USB zero packet support' CONFIG_BLUEZ_USB_ZERO_PACKET
++ bool ' SCO (voice) support' CONFIG_BLUEZ_HCIUSB_SCO
+ fi
+
+ dep_tristate 'HCI UART driver' CONFIG_BLUEZ_HCIUART $CONFIG_BLUEZ
+ if [ "$CONFIG_BLUEZ_HCIUART" != "n" ]; then
+ bool ' UART (H4) protocol support' CONFIG_BLUEZ_HCIUART_H4
++ bool ' BCSP protocol support' CONFIG_BLUEZ_HCIUART_BCSP
++ dep_bool ' Transmit CRC with every BCSP packet' CONFIG_BLUEZ_HCIUART_BCSP_TXCRC $CONFIG_BLUEZ_HCIUART_BCSP
+ fi
+
++dep_tristate 'HCI BlueFRITZ! USB driver' CONFIG_BLUEZ_HCIBFUSB $CONFIG_BLUEZ $CONFIG_USB
++
+ dep_tristate 'HCI DTL1 (PC Card) driver' CONFIG_BLUEZ_HCIDTL1 $CONFIG_PCMCIA $CONFIG_BLUEZ
+
+ dep_tristate 'HCI BT3C (PC Card) driver' CONFIG_BLUEZ_HCIBT3C $CONFIG_PCMCIA $CONFIG_BLUEZ
+
+ dep_tristate 'HCI BlueCard (PC Card) driver' CONFIG_BLUEZ_HCIBLUECARD $CONFIG_PCMCIA $CONFIG_BLUEZ
+
++dep_tristate 'HCI UART (PC Card) driver' CONFIG_BLUEZ_HCIBTUART $CONFIG_PCMCIA $CONFIG_BLUEZ
++
+ dep_tristate 'HCI VHCI (Virtual HCI device) driver' CONFIG_BLUEZ_HCIVHCI $CONFIG_BLUEZ
+
+ endmenu
++
+diff -Nur c3000_pre/linux/drivers/bluetooth/Makefile c3000_work/linux/drivers/bluetooth/Makefile
+--- c3000_pre/linux/drivers/bluetooth/Makefile 2004-08-21 09:48:24.000000000 +0900
++++ c3000_work/linux/drivers/bluetooth/Makefile 2004-12-16 23:01:14.000000000 +0900
+@@ -1,5 +1,5 @@
+ #
+-# Makefile for Bluetooth HCI device drivers.
++# Makefile for the Linux Bluetooth HCI device drivers
+ #
+
+ O_TARGET := bluetooth.o
+@@ -9,13 +9,17 @@
+ obj-$(CONFIG_BLUEZ_HCIUSB) += hci_usb.o
+ obj-$(CONFIG_BLUEZ_HCIVHCI) += hci_vhci.o
+
+-obj-$(CONFIG_BLUEZ_HCIUART) += hci_uart.o
+-uart-y := hci_ldisc.o
+-uart-$(CONFIG_BLUEZ_HCIUART_H4) += hci_h4.o
++obj-$(CONFIG_BLUEZ_HCIUART) += hci_uart.o
++uart-y := hci_ldisc.o
++uart-$(CONFIG_BLUEZ_HCIUART_H4) += hci_h4.o
++uart-$(CONFIG_BLUEZ_HCIUART_BCSP) += hci_bcsp.o
++
++obj-$(CONFIG_BLUEZ_HCIBFUSB) += bfusb.o
+
+ obj-$(CONFIG_BLUEZ_HCIDTL1) += dtl1_cs.o
+ obj-$(CONFIG_BLUEZ_HCIBT3C) += bt3c_cs.o
+ obj-$(CONFIG_BLUEZ_HCIBLUECARD) += bluecard_cs.o
++obj-$(CONFIG_BLUEZ_HCIBTUART) += btuart_cs.o
+
+ include $(TOPDIR)/Rules.make
+
+diff -Nur c3000_pre/linux/drivers/bluetooth/Makefile.lib c3000_work/linux/drivers/bluetooth/Makefile.lib
+--- c3000_pre/linux/drivers/bluetooth/Makefile.lib 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/drivers/bluetooth/Makefile.lib 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,2 @@
++obj-$(CONFIG_BLUEZ_HCIBFUSB) += firmware_class.o
++obj-$(CONFIG_BLUEZ_HCIBT3C) += firmware_class.o
+diff -Nur c3000_pre/linux/drivers/bluetooth/bfusb.c c3000_work/linux/drivers/bluetooth/bfusb.c
+--- c3000_pre/linux/drivers/bluetooth/bfusb.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/drivers/bluetooth/bfusb.c 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,782 @@
++/*
++ *
++ * AVM BlueFRITZ! USB driver
++ *
++ * Copyright (C) 2003 Marcel Holtmann <marcel@holtmann.org>
++ *
++ *
++ * 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/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/errno.h>
++#include <linux/skbuff.h>
++
++#include <linux/firmware.h>
++#include <linux/usb.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++#ifndef CONFIG_BLUEZ_HCIBFUSB_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define VERSION "1.1"
++
++static struct usb_device_id bfusb_table[] = {
++ /* AVM BlueFRITZ! USB */
++ { USB_DEVICE(0x057c, 0x2200) },
++
++ { } /* Terminating entry */
++};
++
++MODULE_DEVICE_TABLE(usb, bfusb_table);
++
++
++#define BFUSB_MAX_BLOCK_SIZE 256
++
++#define BFUSB_BLOCK_TIMEOUT (HZ * 3)
++
++#define BFUSB_TX_PROCESS 1
++#define BFUSB_TX_WAKEUP 2
++
++#define BFUSB_MAX_BULK_TX 1
++#define BFUSB_MAX_BULK_RX 1
++
++struct bfusb {
++ struct hci_dev hdev;
++
++ unsigned long state;
++
++ struct usb_device *udev;
++
++ unsigned int bulk_in_ep;
++ unsigned int bulk_out_ep;
++ unsigned int bulk_pkt_size;
++
++ rwlock_t lock;
++
++ struct sk_buff_head transmit_q;
++
++ struct sk_buff *reassembly;
++
++ atomic_t pending_tx;
++ struct sk_buff_head pending_q;
++ struct sk_buff_head completed_q;
++};
++
++struct bfusb_scb {
++ struct urb *urb;
++};
++
++static void bfusb_tx_complete(struct urb *urb);
++static void bfusb_rx_complete(struct urb *urb);
++
++static struct urb *bfusb_get_completed(struct bfusb *bfusb)
++{
++ struct sk_buff *skb;
++ struct urb *urb = NULL;
++
++ BT_DBG("bfusb %p", bfusb);
++
++ skb = skb_dequeue(&bfusb->completed_q);
++ if (skb) {
++ urb = ((struct bfusb_scb *) skb->cb)->urb;
++ kfree_skb(skb);
++ }
++
++ return urb;
++}
++
++static inline void bfusb_unlink_urbs(struct bfusb *bfusb)
++{
++ struct sk_buff *skb;
++ struct urb *urb;
++
++ BT_DBG("bfusb %p", bfusb);
++
++ while ((skb = skb_dequeue(&bfusb->pending_q))) {
++ urb = ((struct bfusb_scb *) skb->cb)->urb;
++ usb_unlink_urb(urb);
++ skb_queue_tail(&bfusb->completed_q, skb);
++ }
++
++ while ((urb = bfusb_get_completed(bfusb)))
++ usb_free_urb(urb);
++}
++
++
++static int bfusb_send_bulk(struct bfusb *bfusb, struct sk_buff *skb)
++{
++ struct bfusb_scb *scb = (void *) skb->cb;
++ struct urb *urb = bfusb_get_completed(bfusb);
++ int err, pipe;
++
++ BT_DBG("bfusb %p skb %p len %d", bfusb, skb, skb->len);
++
++ if (!urb && !(urb = usb_alloc_urb(0)))
++ return -ENOMEM;
++
++ pipe = usb_sndbulkpipe(bfusb->udev, bfusb->bulk_out_ep);
++
++ FILL_BULK_URB(urb, bfusb->udev, pipe, skb->data, skb->len,
++ bfusb_tx_complete, skb);
++
++ urb->transfer_flags = USB_QUEUE_BULK;
++
++ scb->urb = urb;
++
++ skb_queue_tail(&bfusb->pending_q, skb);
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s bulk tx submit failed urb %p err %d",
++ bfusb->hdev.name, urb, err);
++ skb_unlink(skb);
++ usb_free_urb(urb);
++ } else
++ atomic_inc(&bfusb->pending_tx);
++
++ return err;
++}
++
++static void bfusb_tx_wakeup(struct bfusb *bfusb)
++{
++ struct sk_buff *skb;
++
++ BT_DBG("bfusb %p", bfusb);
++
++ if (test_and_set_bit(BFUSB_TX_PROCESS, &bfusb->state)) {
++ set_bit(BFUSB_TX_WAKEUP, &bfusb->state);
++ return;
++ }
++
++ do {
++ clear_bit(BFUSB_TX_WAKEUP, &bfusb->state);
++
++ while ((atomic_read(&bfusb->pending_tx) < BFUSB_MAX_BULK_TX) &&
++ (skb = skb_dequeue(&bfusb->transmit_q))) {
++ if (bfusb_send_bulk(bfusb, skb) < 0) {
++ skb_queue_head(&bfusb->transmit_q, skb);
++ break;
++ }
++ }
++
++ } while (test_bit(BFUSB_TX_WAKEUP, &bfusb->state));
++
++ clear_bit(BFUSB_TX_PROCESS, &bfusb->state);
++}
++
++static void bfusb_tx_complete(struct urb *urb)
++{
++ struct sk_buff *skb = (struct sk_buff *) urb->context;
++ struct bfusb *bfusb = (struct bfusb *) skb->dev;
++
++ BT_DBG("bfusb %p urb %p skb %p len %d", bfusb, urb, skb, skb->len);
++
++ atomic_dec(&bfusb->pending_tx);
++
++ if (!test_bit(HCI_RUNNING, &bfusb->hdev.flags))
++ return;
++
++ if (!urb->status)
++ bfusb->hdev.stat.byte_tx += skb->len;
++ else
++ bfusb->hdev.stat.err_tx++;
++
++ read_lock(&bfusb->lock);
++
++ skb_unlink(skb);
++ skb_queue_tail(&bfusb->completed_q, skb);
++
++ bfusb_tx_wakeup(bfusb);
++
++ read_unlock(&bfusb->lock);
++}
++
++
++static int bfusb_rx_submit(struct bfusb *bfusb, struct urb *urb)
++{
++ struct bfusb_scb *scb;
++ struct sk_buff *skb;
++ int err, pipe, size = HCI_MAX_FRAME_SIZE + 32;
++
++ BT_DBG("bfusb %p urb %p", bfusb, urb);
++
++ if (!urb && !(urb = usb_alloc_urb(0)))
++ return -ENOMEM;
++
++ if (!(skb = bluez_skb_alloc(size, GFP_ATOMIC))) {
++ usb_free_urb(urb);
++ return -ENOMEM;
++ }
++
++ skb->dev = (void *) bfusb;
++
++ scb = (struct bfusb_scb *) skb->cb;
++ scb->urb = urb;
++
++ pipe = usb_rcvbulkpipe(bfusb->udev, bfusb->bulk_in_ep);
++
++ FILL_BULK_URB(urb, bfusb->udev, pipe, skb->data, size,
++ bfusb_rx_complete, skb);
++
++ urb->transfer_flags = USB_QUEUE_BULK;
++
++ skb_queue_tail(&bfusb->pending_q, skb);
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s bulk rx submit failed urb %p err %d",
++ bfusb->hdev.name, urb, err);
++ skb_unlink(skb);
++ kfree_skb(skb);
++ usb_free_urb(urb);
++ }
++
++ return err;
++}
++
++static inline int bfusb_recv_block(struct bfusb *bfusb, int hdr, unsigned char *data, int len)
++{
++ BT_DBG("bfusb %p hdr 0x%02x data %p len %d", bfusb, hdr, data, len);
++
++ if (hdr & 0x10) {
++ BT_ERR("%s error in block", bfusb->hdev.name);
++ if (bfusb->reassembly)
++ kfree_skb(bfusb->reassembly);
++ bfusb->reassembly = NULL;
++ return -EIO;
++ }
++
++ if (hdr & 0x04) {
++ struct sk_buff *skb;
++ unsigned char pkt_type;
++ int pkt_len = 0;
++
++ if (bfusb->reassembly) {
++ BT_ERR("%s unexpected start block", bfusb->hdev.name);
++ kfree_skb(bfusb->reassembly);
++ bfusb->reassembly = NULL;
++ }
++
++ if (len < 1) {
++ BT_ERR("%s no packet type found", bfusb->hdev.name);
++ return -EPROTO;
++ }
++
++ pkt_type = *data++; len--;
++
++ switch (pkt_type) {
++ case HCI_EVENT_PKT:
++ if (len >= HCI_EVENT_HDR_SIZE) {
++ hci_event_hdr *hdr = (hci_event_hdr *) data;
++ pkt_len = HCI_EVENT_HDR_SIZE + hdr->plen;
++ } else {
++ BT_ERR("%s event block is too short", bfusb->hdev.name);
++ return -EILSEQ;
++ }
++ break;
++
++ case HCI_ACLDATA_PKT:
++ if (len >= HCI_ACL_HDR_SIZE) {
++ hci_acl_hdr *hdr = (hci_acl_hdr *) data;
++ pkt_len = HCI_ACL_HDR_SIZE + __le16_to_cpu(hdr->dlen);
++ } else {
++ BT_ERR("%s data block is too short", bfusb->hdev.name);
++ return -EILSEQ;
++ }
++ break;
++
++ case HCI_SCODATA_PKT:
++ if (len >= HCI_SCO_HDR_SIZE) {
++ hci_sco_hdr *hdr = (hci_sco_hdr *) data;
++ pkt_len = HCI_SCO_HDR_SIZE + hdr->dlen;
++ } else {
++ BT_ERR("%s audio block is too short", bfusb->hdev.name);
++ return -EILSEQ;
++ }
++ break;
++ }
++
++ skb = bluez_skb_alloc(pkt_len, GFP_ATOMIC);
++ if (!skb) {
++ BT_ERR("%s no memory for the packet", bfusb->hdev.name);
++ return -ENOMEM;
++ }
++
++ skb->dev = (void *) &bfusb->hdev;
++ skb->pkt_type = pkt_type;
++
++ bfusb->reassembly = skb;
++ } else {
++ if (!bfusb->reassembly) {
++ BT_ERR("%s unexpected continuation block", bfusb->hdev.name);
++ return -EIO;
++ }
++ }
++
++ if (len > 0)
++ memcpy(skb_put(bfusb->reassembly, len), data, len);
++
++ if (hdr & 0x08) {
++ hci_recv_frame(bfusb->reassembly);
++ bfusb->reassembly = NULL;
++ }
++
++ return 0;
++}
++
++static void bfusb_rx_complete(struct urb *urb)
++{
++ struct sk_buff *skb = (struct sk_buff *) urb->context;
++ struct bfusb *bfusb = (struct bfusb *) skb->dev;
++ unsigned char *buf = urb->transfer_buffer;
++ int count = urb->actual_length;
++ int err, hdr, len;
++
++ BT_DBG("bfusb %p urb %p skb %p len %d", bfusb, urb, skb, skb->len);
++
++ read_lock(&bfusb->lock);
++
++ if (!test_bit(HCI_RUNNING, &bfusb->hdev.flags))
++ goto unlock;
++
++ if (urb->status || !count)
++ goto resubmit;
++
++ bfusb->hdev.stat.byte_rx += count;
++
++ skb_put(skb, count);
++
++ while (count) {
++ hdr = buf[0] | (buf[1] << 8);
++
++ if (hdr & 0x4000) {
++ len = 0;
++ count -= 2;
++ buf += 2;
++ } else {
++ len = (buf[2] == 0) ? 256 : buf[2];
++ count -= 3;
++ buf += 3;
++ }
++
++ if (count < len) {
++ BT_ERR("%s block extends over URB buffer ranges",
++ bfusb->hdev.name);
++ }
++
++ if ((hdr & 0xe1) == 0xc1)
++ bfusb_recv_block(bfusb, hdr, buf, len);
++
++ count -= len;
++ buf += len;
++ }
++
++ skb_unlink(skb);
++ kfree_skb(skb);
++
++ bfusb_rx_submit(bfusb, urb);
++
++ read_unlock(&bfusb->lock);
++
++ return;
++
++resubmit:
++ urb->dev = bfusb->udev;
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s bulk resubmit failed urb %p err %d",
++ bfusb->hdev.name, urb, err);
++ }
++
++unlock:
++ read_unlock(&bfusb->lock);
++}
++
++
++static int bfusb_open(struct hci_dev *hdev)
++{
++ struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
++ unsigned long flags;
++ int i, err;
++
++ BT_DBG("hdev %p bfusb %p", hdev, bfusb);
++
++ if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
++
++ MOD_INC_USE_COUNT;
++
++ write_lock_irqsave(&bfusb->lock, flags);
++
++ err = bfusb_rx_submit(bfusb, NULL);
++ if (!err) {
++ for (i = 1; i < BFUSB_MAX_BULK_RX; i++)
++ bfusb_rx_submit(bfusb, NULL);
++ } else {
++ clear_bit(HCI_RUNNING, &hdev->flags);
++ MOD_DEC_USE_COUNT;
++ }
++
++ write_unlock_irqrestore(&bfusb->lock, flags);
++
++ return err;
++}
++
++static int bfusb_flush(struct hci_dev *hdev)
++{
++ struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
++
++ BT_DBG("hdev %p bfusb %p", hdev, bfusb);
++
++ skb_queue_purge(&bfusb->transmit_q);
++
++ return 0;
++}
++
++static int bfusb_close(struct hci_dev *hdev)
++{
++ struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
++ unsigned long flags;
++
++ BT_DBG("hdev %p bfusb %p", hdev, bfusb);
++
++ if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
++
++ write_lock_irqsave(&bfusb->lock, flags);
++
++ bfusb_unlink_urbs(bfusb);
++ bfusb_flush(hdev);
++
++ write_unlock_irqrestore(&bfusb->lock, flags);
++
++ MOD_DEC_USE_COUNT;
++
++ return 0;
++}
++
++static int bfusb_send_frame(struct sk_buff *skb)
++{
++ struct hci_dev *hdev = (struct hci_dev *) skb->dev;
++ struct bfusb *bfusb;
++ struct sk_buff *nskb;
++ unsigned char buf[3];
++ int sent = 0, size, count;
++
++ BT_DBG("hdev %p skb %p type %d len %d", hdev, skb, skb->pkt_type, skb->len);
++
++ if (!hdev) {
++ BT_ERR("Frame for unknown HCI device (hdev=NULL)");
++ return -ENODEV;
++ }
++
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
++ return -EBUSY;
++
++ bfusb = (struct bfusb *) hdev->driver_data;
++
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++ };
++
++ /* Prepend skb with frame type */
++ memcpy(skb_push(skb, 1), &(skb->pkt_type), 1);
++
++ count = skb->len;
++
++ /* Max HCI frame size seems to be 1511 + 1 */
++ if (!(nskb = bluez_skb_alloc(count + 32, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for new packet");
++ return -ENOMEM;
++ }
++
++ nskb->dev = (void *) bfusb;
++
++ while (count) {
++ size = min_t(uint, count, BFUSB_MAX_BLOCK_SIZE);
++
++ buf[0] = 0xc1 | ((sent == 0) ? 0x04 : 0) | ((count == size) ? 0x08 : 0);
++ buf[1] = 0x00;
++ buf[2] = (size == BFUSB_MAX_BLOCK_SIZE) ? 0 : size;
++
++ memcpy(skb_put(nskb, 3), buf, 3);
++ memcpy(skb_put(nskb, size), skb->data + sent, size);
++
++ sent += size;
++ count -= size;
++ }
++
++ /* Don't send frame with multiple size of bulk max packet */
++ if ((nskb->len % bfusb->bulk_pkt_size) == 0) {
++ buf[0] = 0xdd;
++ buf[1] = 0x00;
++ memcpy(skb_put(nskb, 2), buf, 2);
++ }
++
++ read_lock(&bfusb->lock);
++
++ skb_queue_tail(&bfusb->transmit_q, nskb);
++ bfusb_tx_wakeup(bfusb);
++
++ read_unlock(&bfusb->lock);
++
++ kfree_skb(skb);
++
++ return 0;
++}
++
++static void bfusb_destruct(struct hci_dev *hdev)
++{
++ struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
++
++ BT_DBG("hdev %p bfusb %p", hdev, bfusb);
++
++ kfree(bfusb);
++}
++
++static int bfusb_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
++{
++ return -ENOIOCTLCMD;
++}
++
++
++static int bfusb_load_firmware(struct bfusb *bfusb, unsigned char *firmware, int count)
++{
++ unsigned char *buf;
++ int err, pipe, len, size, sent = 0;
++
++ BT_DBG("bfusb %p udev %p firmware %p count %d", bfusb, bfusb->udev, firmware, count);
++
++ BT_INFO("BlueFRITZ! USB loading firmware");
++
++ if (usb_set_configuration(bfusb->udev, 1) < 0) {
++ BT_ERR("Can't change to loading configuration");
++ return -EBUSY;
++ }
++
++ buf = kmalloc(BFUSB_MAX_BLOCK_SIZE + 3, GFP_ATOMIC);
++ if (!buf) {
++ BT_ERR("Can't allocate memory chunk for firmware");
++ return -ENOMEM;
++ }
++
++ pipe = usb_sndbulkpipe(bfusb->udev, bfusb->bulk_out_ep);
++
++ while (count) {
++ size = min_t(uint, count, BFUSB_MAX_BLOCK_SIZE + 3);
++
++ memcpy(buf, firmware + sent, size);
++
++ err = usb_bulk_msg(bfusb->udev, pipe, buf, size,
++ &len, BFUSB_BLOCK_TIMEOUT);
++
++ if (err || (len != size)) {
++ BT_ERR("Error in firmware loading");
++ goto error;
++ }
++
++ sent += size;
++ count -= size;
++ }
++
++ if ((err = usb_bulk_msg(bfusb->udev, pipe, NULL, 0,
++ &len, BFUSB_BLOCK_TIMEOUT)) < 0) {
++ BT_ERR("Error in null packet request");
++ goto error;
++ }
++
++ if ((err = usb_set_configuration(bfusb->udev, 2)) < 0) {
++ BT_ERR("Can't change to running configuration");
++ goto error;
++ }
++
++ BT_INFO("BlueFRITZ! USB device ready");
++
++ kfree(buf);
++ return 0;
++
++error:
++ kfree(buf);
++
++ pipe = usb_sndctrlpipe(bfusb->udev, 0);
++
++ usb_control_msg(bfusb->udev, pipe, USB_REQ_SET_CONFIGURATION,
++ 0, 0, 0, NULL, 0, BFUSB_BLOCK_TIMEOUT);
++
++ return err;
++}
++
++static void *bfusb_probe(struct usb_device *udev, unsigned int ifnum, const struct usb_device_id *id)
++{
++ const struct firmware *firmware;
++ char device[16];
++ struct usb_interface *iface;
++ struct usb_interface_descriptor *iface_desc;
++ struct usb_endpoint_descriptor *bulk_out_ep;
++ struct usb_endpoint_descriptor *bulk_in_ep;
++ struct hci_dev *hdev;
++ struct bfusb *bfusb;
++
++ BT_DBG("udev %p ifnum %d id %p", udev, ifnum, id);
++
++ /* Check number of endpoints */
++ iface = &udev->actconfig->interface[0];
++ iface_desc = &iface->altsetting[0];
++
++ if (iface_desc->bNumEndpoints < 2)
++ return NULL;
++
++ bulk_out_ep = &iface_desc->endpoint[0];
++ bulk_in_ep = &iface_desc->endpoint[1];
++
++ if (!bulk_out_ep || !bulk_in_ep) {
++ BT_ERR("Bulk endpoints not found");
++ goto done;
++ }
++
++ /* Initialize control structure and load firmware */
++ if (!(bfusb = kmalloc(sizeof(struct bfusb), GFP_KERNEL))) {
++ BT_ERR("Can't allocate memory for control structure");
++ goto done;
++ }
++
++ memset(bfusb, 0, sizeof(struct bfusb));
++
++ bfusb->udev = udev;
++ bfusb->bulk_in_ep = bulk_in_ep->bEndpointAddress;
++ bfusb->bulk_out_ep = bulk_out_ep->bEndpointAddress;
++ bfusb->bulk_pkt_size = bulk_out_ep->wMaxPacketSize;
++
++ bfusb->lock = RW_LOCK_UNLOCKED;
++
++ bfusb->reassembly = NULL;
++
++ skb_queue_head_init(&bfusb->transmit_q);
++ skb_queue_head_init(&bfusb->pending_q);
++ skb_queue_head_init(&bfusb->completed_q);
++
++ snprintf(device, sizeof(device), "bfusb%3.3d%3.3d", udev->bus->busnum, udev->devnum);
++
++ if (request_firmware(&firmware, "bfubase.frm", device) < 0) {
++ BT_ERR("Firmware request failed");
++ goto error;
++ }
++
++ if (bfusb_load_firmware(bfusb, firmware->data, firmware->size) < 0) {
++ BT_ERR("Firmware loading failed");
++ goto release;
++ }
++
++ release_firmware(firmware);
++
++ /* Initialize and register HCI device */
++ hdev = &bfusb->hdev;
++
++ hdev->type = HCI_USB;
++ hdev->driver_data = bfusb;
++
++ hdev->open = bfusb_open;
++ hdev->close = bfusb_close;
++ hdev->flush = bfusb_flush;
++ hdev->send = bfusb_send_frame;
++ hdev->destruct = bfusb_destruct;
++ hdev->ioctl = bfusb_ioctl;
++
++ if (hci_register_dev(hdev) < 0) {
++ BT_ERR("Can't register HCI device");
++ goto error;
++ }
++
++ return bfusb;
++
++release:
++ release_firmware(firmware);
++
++error:
++ kfree(bfusb);
++
++done:
++ return NULL;
++}
++
++static void bfusb_disconnect(struct usb_device *udev, void *ptr)
++{
++ struct bfusb *bfusb = (struct bfusb *) ptr;
++ struct hci_dev *hdev = &bfusb->hdev;
++
++ BT_DBG("udev %p ptr %p", udev, ptr);
++
++ if (!hdev)
++ return;
++
++ bfusb_close(hdev);
++
++ if (hci_unregister_dev(hdev) < 0)
++ BT_ERR("Can't unregister HCI device %s", hdev->name);
++}
++
++static struct usb_driver bfusb_driver = {
++ name: "bfusb",
++ probe: bfusb_probe,
++ disconnect: bfusb_disconnect,
++ id_table: bfusb_table,
++};
++
++static int __init bfusb_init(void)
++{
++ int err;
++
++ BT_INFO("BlueFRITZ! USB driver ver %s", VERSION);
++ BT_INFO("Copyright (C) 2003 Marcel Holtmann <marcel@holtmann.org>");
++
++ if ((err = usb_register(&bfusb_driver)) < 0)
++ BT_ERR("Failed to register BlueFRITZ! USB driver");
++
++ return err;
++}
++
++static void __exit bfusb_cleanup(void)
++{
++ usb_deregister(&bfusb_driver);
++}
++
++module_init(bfusb_init);
++module_exit(bfusb_cleanup);
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueFRITZ! USB driver ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -Nur c3000_pre/linux/drivers/bluetooth/bluecard_cs.c c3000_work/linux/drivers/bluetooth/bluecard_cs.c
+--- c3000_pre/linux/drivers/bluetooth/bluecard_cs.c 2004-08-21 09:48:24.000000000 +0900
++++ c3000_work/linux/drivers/bluetooth/bluecard_cs.c 2004-12-16 23:01:14.000000000 +0900
+@@ -803,6 +803,9 @@
+ unsigned int iobase = info->link.io.BasePort1;
+ struct hci_dev *hdev = &(info->hdev);
+
++ if (info->link.state & DEV_CONFIG_PENDING)
++ return -ENODEV;
++
+ bluecard_hci_close(hdev);
+
+ clear_bit(CARD_READY, &(info->hw_state));
+diff -Nur c3000_pre/linux/drivers/bluetooth/bt3c_cs.c c3000_work/linux/drivers/bluetooth/bt3c_cs.c
+--- c3000_pre/linux/drivers/bluetooth/bt3c_cs.c 2004-08-21 09:48:24.000000000 +0900
++++ c3000_work/linux/drivers/bluetooth/bt3c_cs.c 2004-12-16 23:01:14.000000000 +0900
+@@ -24,8 +24,6 @@
+ #include <linux/config.h>
+ #include <linux/module.h>
+
+-#define __KERNEL_SYSCALLS__
+-
+ #include <linux/kernel.h>
+ #include <linux/kmod.h>
+ #include <linux/init.h>
+@@ -48,6 +46,8 @@
+ #include <asm/bitops.h>
+ #include <asm/io.h>
+
++#include <linux/firmware.h>
++
+ #include <pcmcia/version.h>
+ #include <pcmcia/cs_types.h>
+ #include <pcmcia/cs.h>
+@@ -485,78 +485,101 @@
+
+
+
+-/* ======================== User mode firmware loader ======================== */
++/* ======================== Card services HCI interaction ======================== */
+
+
+-#define FW_LOADER "/sbin/bluefw"
+-static int errno;
++static int bt3c_load_firmware(bt3c_info_t *info, unsigned char *firmware, int count)
++{
++ char *ptr = (char *) firmware;
++ char b[9];
++ unsigned int iobase, size, addr, fcs, tmp;
++ int i, err = 0;
+
++ iobase = info->link.io.BasePort1;
+
+-static int bt3c_fw_loader_exec(void *dev)
+-{
+- char *argv[] = { FW_LOADER, "pccard", dev, NULL };
+- char *envp[] = { "HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL };
+- int err;
++ /* Reset */
+
+- err = exec_usermodehelper(FW_LOADER, argv, envp);
+- if (err)
+- printk(KERN_WARNING "bt3c_cs: Failed to exec \"%s pccard %s\".\n", FW_LOADER, (char *)dev);
++ bt3c_io_write(iobase, 0x8040, 0x0404);
++ bt3c_io_write(iobase, 0x8040, 0x0400);
+
+- return err;
+-}
++ udelay(1);
+
++ bt3c_io_write(iobase, 0x8040, 0x0404);
+
+-static int bt3c_firmware_load(bt3c_info_t *info)
+-{
+- sigset_t tmpsig;
+- char dev[16];
+- pid_t pid;
+- int result;
++ udelay(17);
+
+- /* Check if root fs is mounted */
+- if (!current->fs->root) {
+- printk(KERN_WARNING "bt3c_cs: Root filesystem is not mounted.\n");
+- return -EPERM;
+- }
++ /* Load */
+
+- sprintf(dev, "%04x", info->link.io.BasePort1);
++ while (count) {
++ if (ptr[0] != 'S') {
++ printk(KERN_WARNING "bt3c_cs: Bad address in firmware.\n");
++ err = -EFAULT;
++ goto error;
++ }
+
+- pid = kernel_thread(bt3c_fw_loader_exec, (void *)dev, 0);
+- if (pid < 0) {
+- printk(KERN_WARNING "bt3c_cs: Forking of kernel thread failed (errno=%d).\n", -pid);
+- return pid;
+- }
++ memset(b, 0, sizeof(b));
++ memcpy(b, ptr + 2, 2);
++ size = simple_strtol(b, NULL, 16);
++
++ memset(b, 0, sizeof(b));
++ memcpy(b, ptr + 4, 8);
++ addr = simple_strtol(b, NULL, 16);
++
++ memset(b, 0, sizeof(b));
++ memcpy(b, ptr + (size * 2) + 2, 2);
++ fcs = simple_strtol(b, NULL, 16);
++
++ memset(b, 0, sizeof(b));
++ for (tmp = 0, i = 0; i < size; i++) {
++ memcpy(b, ptr + (i * 2) + 2, 2);
++ tmp += simple_strtol(b, NULL, 16);
++ }
+
+- /* Block signals, everything but SIGKILL/SIGSTOP */
+- spin_lock_irq(&current->sigmask_lock);
+- tmpsig = current->blocked;
+- siginitsetinv(&current->blocked, sigmask(SIGKILL) | sigmask(SIGSTOP));
+- recalc_sigpending(current);
+- spin_unlock_irq(&current->sigmask_lock);
++ if (((tmp + fcs) & 0xff) != 0xff) {
++ printk(KERN_WARNING "bt3c_cs: Checksum error in firmware.\n");
++ err = -EILSEQ;
++ goto error;
++ }
+
+- result = waitpid(pid, NULL, __WCLONE);
++ if (ptr[1] == '3') {
++ bt3c_address(iobase, addr);
+
+- /* Allow signals again */
+- spin_lock_irq(&current->sigmask_lock);
+- current->blocked = tmpsig;
+- recalc_sigpending(current);
+- spin_unlock_irq(&current->sigmask_lock);
++ memset(b, 0, sizeof(b));
++ for (i = 0; i < (size - 4) / 2; i++) {
++ memcpy(b, ptr + (i * 4) + 12, 4);
++ tmp = simple_strtol(b, NULL, 16);
++ bt3c_put(iobase, tmp);
++ }
++ }
+
+- if (result != pid) {
+- printk(KERN_WARNING "bt3c_cs: Waiting for pid %d failed (errno=%d).\n", pid, -result);
+- return -result;
++ ptr += (size * 2) + 6;
++ count -= (size * 2) + 6;
+ }
+
+- return 0;
+-}
++ udelay(17);
+
++ /* Boot */
+
++ bt3c_address(iobase, 0x3000);
++ outb(inb(iobase + CONTROL) | 0x40, iobase + CONTROL);
+
+-/* ======================== Card services HCI interaction ======================== */
++error:
++ udelay(17);
++
++ /* Clear */
++
++ bt3c_io_write(iobase, 0x7006, 0x0000);
++ bt3c_io_write(iobase, 0x7005, 0x0000);
++ bt3c_io_write(iobase, 0x7001, 0x0000);
++
++ return err;
++}
+
+
+ int bt3c_open(bt3c_info_t *info)
+ {
++ const struct firmware *firmware;
++ char device[16];
+ struct hci_dev *hdev;
+ int err;
+
+@@ -570,8 +593,22 @@
+
+ /* Load firmware */
+
+- if ((err = bt3c_firmware_load(info)) < 0)
++ snprintf(device, sizeof(device), "bt3c%4.4x", info->link.io.BasePort1);
++
++ err = request_firmware(&firmware, "BT3CPCC.bin", device);
++ if (err < 0) {
++ printk(KERN_WARNING "bt3c_cs: Firmware request failed.\n");
+ return err;
++ }
++
++ err = bt3c_load_firmware(info, firmware->data, firmware->size);
++
++ release_firmware(firmware);
++
++ if (err < 0) {
++ printk(KERN_WARNING "bt3c_cs: Firmware loading failed.\n");
++ return err;
++ }
+
+ /* Timeout before it is safe to send the first HCI packet */
+
+@@ -606,6 +643,9 @@
+ {
+ struct hci_dev *hdev = &(info->hdev);
+
++ if (info->link.state & DEV_CONFIG_PENDING)
++ return -ENODEV;
++
+ bt3c_hci_close(hdev);
+
+ if (hci_unregister_dev(hdev) < 0)
+diff -Nur c3000_pre/linux/drivers/bluetooth/btuart_cs.c c3000_work/linux/drivers/bluetooth/btuart_cs.c
+--- c3000_pre/linux/drivers/bluetooth/btuart_cs.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/drivers/bluetooth/btuart_cs.c 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,909 @@
++/*
++ *
++ * Driver for Bluetooth PCMCIA cards with HCI UART interface
++ *
++ * Copyright (C) 2001-2002 Marcel Holtmann <marcel@holtmann.org>
++ *
++ *
++ * 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;
++ *
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ *
++ * The initial developer of the original code is David A. Hinds
++ * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
++ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/timer.h>
++#include <linux/errno.h>
++#include <linux/ptrace.h>
++#include <linux/ioport.h>
++#include <linux/spinlock.h>
++
++#include <linux/skbuff.h>
++#include <linux/string.h>
++#include <linux/serial.h>
++#include <linux/serial_reg.h>
++#include <asm/system.h>
++#include <asm/bitops.h>
++#include <asm/io.h>
++
++#include <pcmcia/version.h>
++#include <pcmcia/cs_types.h>
++#include <pcmcia/cs.h>
++#include <pcmcia/cistpl.h>
++#include <pcmcia/ciscode.h>
++#include <pcmcia/ds.h>
++#include <pcmcia/cisreg.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++
++
++/* ======================== Module parameters ======================== */
++
++
++/* Bit map of interrupts to choose from */
++static u_int irq_mask = 0xffff;
++static int irq_list[4] = { -1 };
++
++MODULE_PARM(irq_mask, "i");
++MODULE_PARM(irq_list, "1-4i");
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueZ driver for Bluetooth PCMCIA cards with HCI UART interface");
++MODULE_LICENSE("GPL");
++
++
++
++/* ======================== Local structures ======================== */
++
++
++typedef struct btuart_info_t {
++ dev_link_t link;
++ dev_node_t node;
++
++ struct hci_dev hdev;
++
++ spinlock_t lock; /* For serializing operations */
++
++ struct sk_buff_head txq;
++ unsigned long tx_state;
++
++ unsigned long rx_state;
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++} btuart_info_t;
++
++
++void btuart_config(dev_link_t *link);
++void btuart_release(u_long arg);
++int btuart_event(event_t event, int priority, event_callback_args_t *args);
++
++static dev_info_t dev_info = "btuart_cs";
++
++dev_link_t *btuart_attach(void);
++void btuart_detach(dev_link_t *);
++
++static dev_link_t *dev_list = NULL;
++
++
++/* Maximum baud rate */
++#define SPEED_MAX 115200
++
++/* Default baud rate: 57600, 115200, 230400 or 460800 */
++#define DEFAULT_BAUD_RATE 115200
++
++
++/* Transmit states */
++#define XMIT_SENDING 1
++#define XMIT_WAKEUP 2
++#define XMIT_WAITING 8
++
++/* Receiver states */
++#define RECV_WAIT_PACKET_TYPE 0
++#define RECV_WAIT_EVENT_HEADER 1
++#define RECV_WAIT_ACL_HEADER 2
++#define RECV_WAIT_SCO_HEADER 3
++#define RECV_WAIT_DATA 4
++
++
++
++/* ======================== Interrupt handling ======================== */
++
++
++static int btuart_write(unsigned int iobase, int fifo_size, __u8 *buf, int len)
++{
++ int actual = 0;
++
++ /* Tx FIFO should be empty */
++ if (!(inb(iobase + UART_LSR) & UART_LSR_THRE))
++ return 0;
++
++ /* Fill FIFO with current frame */
++ while ((fifo_size-- > 0) && (actual < len)) {
++ /* Transmit next byte */
++ outb(buf[actual], iobase + UART_TX);
++ actual++;
++ }
++
++ return actual;
++}
++
++
++static void btuart_write_wakeup(btuart_info_t *info)
++{
++ if (!info) {
++ printk(KERN_WARNING "btuart_cs: Call of write_wakeup for unknown device.\n");
++ return;
++ }
++
++ if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) {
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++ return;
++ }
++
++ do {
++ register unsigned int iobase = info->link.io.BasePort1;
++ register struct sk_buff *skb;
++ register int len;
++
++ clear_bit(XMIT_WAKEUP, &(info->tx_state));
++
++ if (!(info->link.state & DEV_PRESENT))
++ return;
++
++ if (!(skb = skb_dequeue(&(info->txq))))
++ break;
++
++ /* Send frame */
++ len = btuart_write(iobase, 16, skb->data, skb->len);
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++
++ if (len == skb->len) {
++ kfree_skb(skb);
++ } else {
++ skb_pull(skb, len);
++ skb_queue_head(&(info->txq), skb);
++ }
++
++ info->hdev.stat.byte_tx += len;
++
++ } while (test_bit(XMIT_WAKEUP, &(info->tx_state)));
++
++ clear_bit(XMIT_SENDING, &(info->tx_state));
++}
++
++
++static void btuart_receive(btuart_info_t *info)
++{
++ unsigned int iobase;
++ int boguscount = 0;
++
++ if (!info) {
++ printk(KERN_WARNING "btuart_cs: Call of receive for unknown device.\n");
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ do {
++ info->hdev.stat.byte_rx++;
++
++ /* Allocate packet */
++ if (info->rx_skb == NULL) {
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ if (!(info->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
++ printk(KERN_WARNING "btuart_cs: Can't allocate mem for new packet.\n");
++ return;
++ }
++ }
++
++ if (info->rx_state == RECV_WAIT_PACKET_TYPE) {
++
++ info->rx_skb->dev = (void *)&(info->hdev);
++ info->rx_skb->pkt_type = inb(iobase + UART_RX);
++
++ switch (info->rx_skb->pkt_type) {
++
++ case HCI_EVENT_PKT:
++ info->rx_state = RECV_WAIT_EVENT_HEADER;
++ info->rx_count = HCI_EVENT_HDR_SIZE;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ info->rx_state = RECV_WAIT_ACL_HEADER;
++ info->rx_count = HCI_ACL_HDR_SIZE;
++ break;
++
++ case HCI_SCODATA_PKT:
++ info->rx_state = RECV_WAIT_SCO_HEADER;
++ info->rx_count = HCI_SCO_HDR_SIZE;
++ break;
++
++ default:
++ /* Unknown packet */
++ printk(KERN_WARNING "btuart_cs: Unknown HCI packet with type 0x%02x received.\n", info->rx_skb->pkt_type);
++ info->hdev.stat.err_rx++;
++ clear_bit(HCI_RUNNING, &(info->hdev.flags));
++
++ kfree_skb(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ } else {
++
++ *skb_put(info->rx_skb, 1) = inb(iobase + UART_RX);
++ info->rx_count--;
++
++ if (info->rx_count == 0) {
++
++ int dlen;
++ hci_event_hdr *eh;
++ hci_acl_hdr *ah;
++ hci_sco_hdr *sh;
++
++
++ switch (info->rx_state) {
++
++ case RECV_WAIT_EVENT_HEADER:
++ eh = (hci_event_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = eh->plen;
++ break;
++
++ case RECV_WAIT_ACL_HEADER:
++ ah = (hci_acl_hdr *)(info->rx_skb->data);
++ dlen = __le16_to_cpu(ah->dlen);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = dlen;
++ break;
++
++ case RECV_WAIT_SCO_HEADER:
++ sh = (hci_sco_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = sh->dlen;
++ break;
++
++ case RECV_WAIT_DATA:
++ hci_recv_frame(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ }
++
++ }
++
++ /* Make sure we don't stay here to long */
++ if (boguscount++ > 16)
++ break;
++
++ } while (inb(iobase + UART_LSR) & UART_LSR_DR);
++}
++
++
++void btuart_interrupt(int irq, void *dev_inst, struct pt_regs *regs)
++{
++ btuart_info_t *info = dev_inst;
++ unsigned int iobase;
++ int boguscount = 0;
++ int iir, lsr;
++
++ if (!info) {
++ printk(KERN_WARNING "btuart_cs: Call of irq %d for unknown device.\n", irq);
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ spin_lock(&(info->lock));
++
++ iir = inb(iobase + UART_IIR) & UART_IIR_ID;
++ while (iir) {
++
++ /* Clear interrupt */
++ lsr = inb(iobase + UART_LSR);
++
++ switch (iir) {
++ case UART_IIR_RLSI:
++ printk(KERN_NOTICE "btuart_cs: RLSI\n");
++ break;
++ case UART_IIR_RDI:
++ /* Receive interrupt */
++ btuart_receive(info);
++ break;
++ case UART_IIR_THRI:
++ if (lsr & UART_LSR_THRE) {
++ /* Transmitter ready for data */
++ btuart_write_wakeup(info);
++ }
++ break;
++ default:
++ printk(KERN_NOTICE "btuart_cs: Unhandled IIR=%#x\n", iir);
++ break;
++ }
++
++ /* Make sure we don't stay here to long */
++ if (boguscount++ > 100)
++ break;
++
++ iir = inb(iobase + UART_IIR) & UART_IIR_ID;
++
++ }
++
++ spin_unlock(&(info->lock));
++}
++
++
++static void btuart_change_speed(btuart_info_t *info, unsigned int speed)
++{
++ unsigned long flags;
++ unsigned int iobase;
++ int fcr; /* FIFO control reg */
++ int lcr; /* Line control reg */
++ int divisor;
++
++ if (!info) {
++ printk(KERN_WARNING "btuart_cs: Call of change speed for unknown device.\n");
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Turn off interrupts */
++ outb(0, iobase + UART_IER);
++
++ divisor = SPEED_MAX / speed;
++
++ fcr = UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT;
++
++ /*
++ * Use trigger level 1 to avoid 3 ms. timeout delay at 9600 bps, and
++ * almost 1,7 ms at 19200 bps. At speeds above that we can just forget
++ * about this timeout since it will always be fast enough.
++ */
++
++ if (speed < 38400)
++ fcr |= UART_FCR_TRIGGER_1;
++ else
++ fcr |= UART_FCR_TRIGGER_14;
++
++ /* Bluetooth cards use 8N1 */
++ lcr = UART_LCR_WLEN8;
++
++ outb(UART_LCR_DLAB | lcr, iobase + UART_LCR); /* Set DLAB */
++ outb(divisor & 0xff, iobase + UART_DLL); /* Set speed */
++ outb(divisor >> 8, iobase + UART_DLM);
++ outb(lcr, iobase + UART_LCR); /* Set 8N1 */
++ outb(fcr, iobase + UART_FCR); /* Enable FIFO's */
++
++ /* Turn on interrups */
++ outb(UART_IER_RLSI | UART_IER_RDI | UART_IER_THRI, iobase + UART_IER);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++}
++
++
++
++/* ======================== HCI interface ======================== */
++
++
++static int btuart_hci_flush(struct hci_dev *hdev)
++{
++ btuart_info_t *info = (btuart_info_t *)(hdev->driver_data);
++
++ /* Drop TX queue */
++ skb_queue_purge(&(info->txq));
++
++ return 0;
++}
++
++
++static int btuart_hci_open(struct hci_dev *hdev)
++{
++ set_bit(HCI_RUNNING, &(hdev->flags));
++
++ return 0;
++}
++
++
++static int btuart_hci_close(struct hci_dev *hdev)
++{
++ if (!test_and_clear_bit(HCI_RUNNING, &(hdev->flags)))
++ return 0;
++
++ btuart_hci_flush(hdev);
++
++ return 0;
++}
++
++
++static int btuart_hci_send_frame(struct sk_buff *skb)
++{
++ btuart_info_t *info;
++ struct hci_dev *hdev = (struct hci_dev *)(skb->dev);
++
++ if (!hdev) {
++ printk(KERN_WARNING "btuart_cs: Frame for unknown HCI device (hdev=NULL).");
++ return -ENODEV;
++ }
++
++ info = (btuart_info_t *)(hdev->driver_data);
++
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++ };
++
++ /* Prepend skb with frame type */
++ memcpy(skb_push(skb, 1), &(skb->pkt_type), 1);
++ skb_queue_tail(&(info->txq), skb);
++
++ btuart_write_wakeup(info);
++
++ return 0;
++}
++
++
++static void btuart_hci_destruct(struct hci_dev *hdev)
++{
++}
++
++
++static int btuart_hci_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
++{
++ return -ENOIOCTLCMD;
++}
++
++
++
++/* ======================== Card services HCI interaction ======================== */
++
++
++int btuart_open(btuart_info_t *info)
++{
++ unsigned long flags;
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev;
++
++ spin_lock_init(&(info->lock));
++
++ skb_queue_head_init(&(info->txq));
++
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ info->rx_skb = NULL;
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Reset UART */
++ outb(0, iobase + UART_MCR);
++
++ /* Turn off interrupts */
++ outb(0, iobase + UART_IER);
++
++ /* Initialize UART */
++ outb(UART_LCR_WLEN8, iobase + UART_LCR); /* Reset DLAB */
++ outb((UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2), iobase + UART_MCR);
++
++ /* Turn on interrupts */
++ // outb(UART_IER_RLSI | UART_IER_RDI | UART_IER_THRI, iobase + UART_IER);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++
++ btuart_change_speed(info, DEFAULT_BAUD_RATE);
++
++ /* Timeout before it is safe to send the first HCI packet */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ);
++
++
++ /* Initialize and register HCI device */
++
++ hdev = &(info->hdev);
++
++ hdev->type = HCI_PCCARD;
++ hdev->driver_data = info;
++
++ hdev->open = btuart_hci_open;
++ hdev->close = btuart_hci_close;
++ hdev->flush = btuart_hci_flush;
++ hdev->send = btuart_hci_send_frame;
++ hdev->destruct = btuart_hci_destruct;
++ hdev->ioctl = btuart_hci_ioctl;
++
++ if (hci_register_dev(hdev) < 0) {
++ printk(KERN_WARNING "btuart_cs: Can't register HCI device %s.\n", hdev->name);
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++
++int btuart_close(btuart_info_t *info)
++{
++ unsigned long flags;
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev = &(info->hdev);
++
++ if (info->link.state & DEV_CONFIG_PENDING)
++ return -ENODEV;
++
++ btuart_hci_close(hdev);
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Reset UART */
++ outb(0, iobase + UART_MCR);
++
++ /* Turn off interrupts */
++ outb(0, iobase + UART_IER);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++
++ if (hci_unregister_dev(hdev) < 0)
++ printk(KERN_WARNING "btuart_cs: Can't unregister HCI device %s.\n", hdev->name);
++
++ return 0;
++}
++
++
++
++/* ======================== Card services ======================== */
++
++
++static void cs_error(client_handle_t handle, int func, int ret)
++{
++ error_info_t err = { func, ret };
++
++ CardServices(ReportError, handle, &err);
++}
++
++
++dev_link_t *btuart_attach(void)
++{
++ btuart_info_t *info;
++ client_reg_t client_reg;
++ dev_link_t *link;
++ int i, ret;
++
++ /* Create new info device */
++ info = kmalloc(sizeof(*info), GFP_KERNEL);
++ if (!info)
++ return NULL;
++ memset(info, 0, sizeof(*info));
++
++ link = &info->link;
++ link->priv = info;
++
++ link->release.function = &btuart_release;
++ link->release.data = (u_long)link;
++ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
++ link->io.NumPorts1 = 8;
++ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
++ link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID;
++
++ if (irq_list[0] == -1)
++ link->irq.IRQInfo2 = irq_mask;
++ else
++ for (i = 0; i < 4; i++)
++ link->irq.IRQInfo2 |= 1 << irq_list[i];
++
++ link->irq.Handler = btuart_interrupt;
++ link->irq.Instance = info;
++
++ link->conf.Attributes = CONF_ENABLE_IRQ;
++ link->conf.Vcc = 50;
++ link->conf.IntType = INT_MEMORY_AND_IO;
++
++ /* Register with Card Services */
++ link->next = dev_list;
++ dev_list = link;
++ client_reg.dev_info = &dev_info;
++ client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
++ client_reg.EventMask =
++ CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
++ CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
++ CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
++ client_reg.event_handler = &btuart_event;
++ client_reg.Version = 0x0210;
++ client_reg.event_callback_args.client_data = link;
++
++ ret = CardServices(RegisterClient, &link->handle, &client_reg);
++ if (ret != CS_SUCCESS) {
++ cs_error(link->handle, RegisterClient, ret);
++ btuart_detach(link);
++ return NULL;
++ }
++
++ return link;
++}
++
++
++void btuart_detach(dev_link_t *link)
++{
++ btuart_info_t *info = link->priv;
++ dev_link_t **linkp;
++ int ret;
++
++ /* Locate device structure */
++ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
++ if (*linkp == link)
++ break;
++
++ if (*linkp == NULL)
++ return;
++
++ del_timer(&link->release);
++ if (link->state & DEV_CONFIG)
++ btuart_release((u_long)link);
++
++ if (link->handle) {
++ ret = CardServices(DeregisterClient, link->handle);
++ if (ret != CS_SUCCESS)
++ cs_error(link->handle, DeregisterClient, ret);
++ }
++
++ /* Unlink device structure, free bits */
++ *linkp = link->next;
++
++ kfree(info);
++}
++
++
++static int get_tuple(int fn, client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
++{
++ int i;
++
++ i = CardServices(fn, handle, tuple);
++ if (i != CS_SUCCESS)
++ return CS_NO_MORE_ITEMS;
++
++ i = CardServices(GetTupleData, handle, tuple);
++ if (i != CS_SUCCESS)
++ return i;
++
++ return CardServices(ParseTuple, handle, tuple, parse);
++}
++
++
++#define first_tuple(a, b, c) get_tuple(GetFirstTuple, a, b, c)
++#define next_tuple(a, b, c) get_tuple(GetNextTuple, a, b, c)
++
++void btuart_config(dev_link_t *link)
++{
++ static ioaddr_t base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 };
++ client_handle_t handle = link->handle;
++ btuart_info_t *info = link->priv;
++ tuple_t tuple;
++ u_short buf[256];
++ cisparse_t parse;
++ cistpl_cftable_entry_t *cf = &parse.cftable_entry;
++ config_info_t config;
++ int i, j, try, last_ret, last_fn;
++
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++
++ /* Get configuration register information */
++ tuple.DesiredTuple = CISTPL_CONFIG;
++ last_ret = first_tuple(handle, &tuple, &parse);
++ if (last_ret != CS_SUCCESS) {
++ last_fn = ParseTuple;
++ goto cs_failed;
++ }
++ link->conf.ConfigBase = parse.config.base;
++ link->conf.Present = parse.config.rmask[0];
++
++ /* Configure card */
++ link->state |= DEV_CONFIG;
++ i = CardServices(GetConfigurationInfo, handle, &config);
++ link->conf.Vcc = config.Vcc;
++
++ /* First pass: look for a config entry that looks normal. */
++ tuple.TupleData = (cisdata_t *) buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++ tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
++ /* Two tries: without IO aliases, then with aliases */
++ for (try = 0; try < 2; try++) {
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if (i != CS_SUCCESS)
++ goto next_entry;
++ if (cf->vpp1.present & (1 << CISTPL_POWER_VNOM))
++ link->conf.Vpp1 = link->conf.Vpp2 = cf->vpp1.param[CISTPL_POWER_VNOM] / 10000;
++ if ((cf->io.nwin > 0) && (cf->io.win[0].len == 8) && (cf->io.win[0].base != 0)) {
++ link->conf.ConfigIndex = cf->index;
++ link->io.BasePort1 = cf->io.win[0].base;
++ link->io.IOAddrLines = (try == 0) ? 16 : cf->io.flags & CISTPL_IO_LINES_MASK;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ goto found_port;
++ }
++next_entry:
++ i = next_tuple(handle, &tuple, &parse);
++ }
++ }
++
++ /* Second pass: try to find an entry that isn't picky about
++ its base address, then try to grab any standard serial port
++ address, and finally try to get any free port. */
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if ((i == CS_SUCCESS) && (cf->io.nwin > 0)
++ && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) {
++ link->conf.ConfigIndex = cf->index;
++ for (j = 0; j < 5; j++) {
++ link->io.BasePort1 = base[j];
++ link->io.IOAddrLines = base[j] ? 16 : 3;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ goto found_port;
++ }
++ }
++ i = next_tuple(handle, &tuple, &parse);
++ }
++
++found_port:
++ if (i != CS_SUCCESS) {
++ printk(KERN_NOTICE "btuart_cs: No usable port range found. Giving up.\n");
++ cs_error(link->handle, RequestIO, i);
++ goto failed;
++ }
++
++ i = CardServices(RequestIRQ, link->handle, &link->irq);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIRQ, i);
++ link->irq.AssignedIRQ = 0;
++ }
++
++ i = CardServices(RequestConfiguration, link->handle, &link->conf);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestConfiguration, i);
++ goto failed;
++ }
++
++ MOD_INC_USE_COUNT;
++
++ if (btuart_open(info) != 0)
++ goto failed;
++
++ strcpy(info->node.dev_name, info->hdev.name);
++ link->dev = &info->node;
++ link->state &= ~DEV_CONFIG_PENDING;
++
++ return;
++
++cs_failed:
++ cs_error(link->handle, last_fn, last_ret);
++
++failed:
++ btuart_release((u_long) link);
++}
++
++
++void btuart_release(u_long arg)
++{
++ dev_link_t *link = (dev_link_t *)arg;
++ btuart_info_t *info = link->priv;
++
++ if (link->state & DEV_PRESENT)
++ btuart_close(info);
++
++ MOD_DEC_USE_COUNT;
++
++ link->dev = NULL;
++
++ CardServices(ReleaseConfiguration, link->handle);
++ CardServices(ReleaseIO, link->handle, &link->io);
++ CardServices(ReleaseIRQ, link->handle, &link->irq);
++
++ link->state &= ~DEV_CONFIG;
++}
++
++
++int btuart_event(event_t event, int priority, event_callback_args_t *args)
++{
++ dev_link_t *link = args->client_data;
++ btuart_info_t *info = link->priv;
++
++ switch (event) {
++ case CS_EVENT_CARD_REMOVAL:
++ link->state &= ~DEV_PRESENT;
++ if (link->state & DEV_CONFIG) {
++ btuart_close(info);
++ mod_timer(&link->release, jiffies + HZ / 20);
++ }
++ break;
++ case CS_EVENT_CARD_INSERTION:
++ link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
++ btuart_config(link);
++ break;
++ case CS_EVENT_PM_SUSPEND:
++ link->state |= DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_RESET_PHYSICAL:
++ if (link->state & DEV_CONFIG)
++ CardServices(ReleaseConfiguration, link->handle);
++ break;
++ case CS_EVENT_PM_RESUME:
++ link->state &= ~DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_CARD_RESET:
++ if (DEV_OK(link))
++ CardServices(RequestConfiguration, link->handle, &link->conf);
++ break;
++ }
++
++ return 0;
++}
++
++
++
++/* ======================== Module initialization ======================== */
++
++
++int __init init_btuart_cs(void)
++{
++ servinfo_t serv;
++ int err;
++
++ CardServices(GetCardServicesInfo, &serv);
++ if (serv.Revision != CS_RELEASE_CODE) {
++ printk(KERN_NOTICE "btuart_cs: Card Services release does not match!\n");
++ return -1;
++ }
++
++ err = register_pccard_driver(&dev_info, &btuart_attach, &btuart_detach);
++
++ return err;
++}
++
++
++void __exit exit_btuart_cs(void)
++{
++ unregister_pccard_driver(&dev_info);
++
++ while (dev_list != NULL)
++ btuart_detach(dev_list);
++}
++
++
++module_init(init_btuart_cs);
++module_exit(exit_btuart_cs);
++
++EXPORT_NO_SYMBOLS;
+diff -Nur c3000_pre/linux/drivers/bluetooth/dtl1_cs.c c3000_work/linux/drivers/bluetooth/dtl1_cs.c
+--- c3000_pre/linux/drivers/bluetooth/dtl1_cs.c 2004-08-21 09:48:24.000000000 +0900
++++ c3000_work/linux/drivers/bluetooth/dtl1_cs.c 2004-12-16 23:01:14.000000000 +0900
+@@ -535,6 +535,9 @@
+ unsigned int iobase = info->link.io.BasePort1;
+ struct hci_dev *hdev = &(info->hdev);
+
++ if (info->link.state & DEV_CONFIG_PENDING)
++ return -ENODEV;
++
+ dtl1_hci_close(hdev);
+
+ spin_lock_irqsave(&(info->lock), flags);
+diff -Nur c3000_pre/linux/drivers/bluetooth/hci_bcsp.c c3000_work/linux/drivers/bluetooth/hci_bcsp.c
+--- c3000_pre/linux/drivers/bluetooth/hci_bcsp.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/drivers/bluetooth/hci_bcsp.c 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,710 @@
++/*
++ BlueCore Serial Protocol (BCSP) for Linux Bluetooth stack (BlueZ).
++ Copyright 2002 by Fabrizio Gennari <fabrizio.gennari@philips.com>
++
++ Based on
++ hci_h4.c by Maxim Krasnyansky <maxk@qualcomm.com>
++ ABCSP by Carl Orsborn <cjo@csr.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_bcsp.c,v 1.2 2002/09/26 05:05:14 maxk Exp $
++ */
++
++#define VERSION "0.1"
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/version.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/fcntl.h>
++#include <linux/interrupt.h>
++#include <linux/ptrace.h>
++#include <linux/poll.h>
++
++#include <linux/slab.h>
++#include <linux/tty.h>
++#include <linux/errno.h>
++#include <linux/string.h>
++#include <linux/signal.h>
++#include <linux/ioctl.h>
++#include <linux/skbuff.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include "hci_uart.h"
++#include "hci_bcsp.h"
++
++#ifndef HCI_UART_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#undef BT_DMP
++#define BT_DMP( A... )
++#endif
++
++/* ---- BCSP CRC calculation ---- */
++
++/* Table for calculating CRC for polynomial 0x1021, LSB processed first,
++initial value 0xffff, bits shifted in reverse order. */
++
++static const u16 crc_table[] = {
++ 0x0000, 0x1081, 0x2102, 0x3183,
++ 0x4204, 0x5285, 0x6306, 0x7387,
++ 0x8408, 0x9489, 0xa50a, 0xb58b,
++ 0xc60c, 0xd68d, 0xe70e, 0xf78f
++};
++
++/* Initialise the crc calculator */
++#define BCSP_CRC_INIT(x) x = 0xffff
++
++/*
++ Update crc with next data byte
++
++ Implementation note
++ The data byte is treated as two nibbles. The crc is generated
++ in reverse, i.e., bits are fed into the register from the top.
++*/
++static void bcsp_crc_update(u16 *crc, u8 d)
++{
++ u16 reg = *crc;
++
++ reg = (reg >> 4) ^ crc_table[(reg ^ d) & 0x000f];
++ reg = (reg >> 4) ^ crc_table[(reg ^ (d >> 4)) & 0x000f];
++
++ *crc = reg;
++}
++
++/*
++ Get reverse of generated crc
++
++ Implementation note
++ The crc generator (bcsp_crc_init() and bcsp_crc_update())
++ creates a reversed crc, so it needs to be swapped back before
++ being passed on.
++*/
++static u16 bcsp_crc_reverse(u16 crc)
++{
++ u16 b, rev;
++
++ for (b = 0, rev = 0; b < 16; b++) {
++ rev = rev << 1;
++ rev |= (crc & 1);
++ crc = crc >> 1;
++ }
++ return (rev);
++}
++
++/* ---- BCSP core ---- */
++
++static void bcsp_slip_msgdelim(struct sk_buff *skb)
++{
++ const char pkt_delim = 0xc0;
++ memcpy(skb_put(skb, 1), &pkt_delim, 1);
++}
++
++static void bcsp_slip_one_byte(struct sk_buff *skb, u8 c)
++{
++ const char esc_c0[2] = { 0xdb, 0xdc };
++ const char esc_db[2] = { 0xdb, 0xdd };
++
++ switch (c) {
++ case 0xc0:
++ memcpy(skb_put(skb, 2), &esc_c0, 2);
++ break;
++ case 0xdb:
++ memcpy(skb_put(skb, 2), &esc_db, 2);
++ break;
++ default:
++ memcpy(skb_put(skb, 1), &c, 1);
++ }
++}
++
++static int bcsp_enqueue(struct hci_uart *hu, struct sk_buff *skb)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++
++ if (skb->len > 0xFFF) {
++ BT_ERR("Packet too long");
++ kfree_skb(skb);
++ return 0;
++ }
++
++ switch (skb->pkt_type) {
++ case HCI_ACLDATA_PKT:
++ case HCI_COMMAND_PKT:
++ skb_queue_tail(&bcsp->rel, skb);
++ break;
++
++ case HCI_SCODATA_PKT:
++ skb_queue_tail(&bcsp->unrel, skb);
++ break;
++
++ default:
++ BT_ERR("Unknown packet type");
++ kfree_skb(skb);
++ break;
++ }
++ return 0;
++}
++
++static struct sk_buff *bcsp_prepare_pkt(struct bcsp_struct *bcsp, u8 *data,
++ int len, int pkt_type)
++{
++ struct sk_buff *nskb;
++ u8 hdr[4], chan;
++ int rel, i;
++
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ u16 BCSP_CRC_INIT(bcsp_txmsg_crc);
++#endif
++
++ switch (pkt_type) {
++ case HCI_ACLDATA_PKT:
++ chan = 6; /* BCSP ACL channel */
++ rel = 1; /* reliable channel */
++ break;
++ case HCI_COMMAND_PKT:
++ chan = 5; /* BCSP cmd/evt channel */
++ rel = 1; /* reliable channel */
++ break;
++ case HCI_SCODATA_PKT:
++ chan = 7; /* BCSP SCO channel */
++ rel = 0; /* unreliable channel */
++ break;
++ case BCSP_LE_PKT:
++ chan = 1; /* BCSP LE channel */
++ rel = 0; /* unreliable channel */
++ break;
++ case BCSP_ACK_PKT:
++ chan = 0; /* BCSP internal channel */
++ rel = 0; /* unreliable channel */
++ break;
++ default:
++ BT_ERR("Unknown packet type");
++ return NULL;
++ }
++
++ /* Max len of packet: (original len +4(bcsp hdr) +2(crc))*2
++ (because bytes 0xc0 and 0xdb are escaped, worst case is
++ when the packet is all made of 0xc0 and 0xdb :) )
++ + 2 (0xc0 delimiters at start and end). */
++
++ nskb = alloc_skb((len + 6) * 2 + 2, GFP_ATOMIC);
++ if (!nskb)
++ return NULL;
++
++ nskb->pkt_type = pkt_type;
++
++ bcsp_slip_msgdelim(nskb);
++
++ hdr[0] = bcsp->rxseq_txack << 3;
++ bcsp->txack_req = 0;
++ BT_DBG("We request packet no %u to card", bcsp->rxseq_txack);
++
++ if (rel) {
++ hdr[0] |= 0x80 + bcsp->msgq_txseq;
++ BT_DBG("Sending packet with seqno %u", bcsp->msgq_txseq);
++ bcsp->msgq_txseq = ++(bcsp->msgq_txseq) & 0x07;
++ }
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ hdr[0] |= 0x40;
++#endif
++
++ hdr[1] = (len << 4) & 0xFF;
++ hdr[1] |= chan;
++ hdr[2] = len >> 4;
++ hdr[3] = ~(hdr[0] + hdr[1] + hdr[2]);
++
++ /* Put BCSP header */
++ for (i = 0; i < 4; i++) {
++ bcsp_slip_one_byte(nskb, hdr[i]);
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ bcsp_crc_update(&bcsp_txmsg_crc, hdr[i]);
++#endif
++ }
++
++ /* Put payload */
++ for (i = 0; i < len; i++) {
++ bcsp_slip_one_byte(nskb, data[i]);
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ bcsp_crc_update(&bcsp_txmsg_crc, data[i]);
++#endif
++ }
++
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ /* Put CRC */
++ bcsp_txmsg_crc = bcsp_crc_reverse(bcsp_txmsg_crc);
++ bcsp_slip_one_byte(nskb, (u8) ((bcsp_txmsg_crc >> 8) & 0x00ff));
++ bcsp_slip_one_byte(nskb, (u8) (bcsp_txmsg_crc & 0x00ff));
++#endif
++
++ bcsp_slip_msgdelim(nskb);
++ return nskb;
++}
++
++/* This is a rewrite of pkt_avail in ABCSP */
++static struct sk_buff *bcsp_dequeue(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp = (struct bcsp_struct *) hu->priv;
++ unsigned long flags;
++ struct sk_buff *skb;
++
++ /* First of all, check for unreliable messages in the queue,
++ since they have priority */
++
++ if ((skb = skb_dequeue(&bcsp->unrel)) != NULL) {
++ struct sk_buff *nskb = bcsp_prepare_pkt(bcsp, skb->data, skb->len, skb->pkt_type);
++ if (nskb) {
++ kfree_skb(skb);
++ return nskb;
++ } else {
++ skb_queue_head(&bcsp->unrel, skb);
++ BT_ERR("Could not dequeue pkt because alloc_skb failed");
++ }
++ }
++
++ /* Now, try to send a reliable pkt. We can only send a
++ reliable packet if the number of packets sent but not yet ack'ed
++ is < than the winsize */
++
++ spin_lock_irqsave(&bcsp->unack.lock, flags);
++
++ if (bcsp->unack.qlen < BCSP_TXWINSIZE && (skb = skb_dequeue(&bcsp->rel)) != NULL) {
++ struct sk_buff *nskb = bcsp_prepare_pkt(bcsp, skb->data, skb->len, skb->pkt_type);
++ if (nskb) {
++ __skb_queue_tail(&bcsp->unack, skb);
++ mod_timer(&bcsp->tbcsp, jiffies + HZ / 4);
++ spin_unlock_irqrestore(&bcsp->unack.lock, flags);
++ return nskb;
++ } else {
++ skb_queue_head(&bcsp->rel, skb);
++ BT_ERR("Could not dequeue pkt because alloc_skb failed");
++ }
++ }
++
++ spin_unlock_irqrestore(&bcsp->unack.lock, flags);
++
++
++ /* We could not send a reliable packet, either because there are
++ none or because there are too many unack'ed pkts. Did we receive
++ any packets we have not acknowledged yet ? */
++
++ if (bcsp->txack_req) {
++ /* if so, craft an empty ACK pkt and send it on BCSP unreliable
++ channel 0 */
++ struct sk_buff *nskb = bcsp_prepare_pkt(bcsp, NULL, 0, BCSP_ACK_PKT);
++ return nskb;
++ }
++
++ /* We have nothing to send */
++ return NULL;
++}
++
++static int bcsp_flush(struct hci_uart *hu)
++{
++ BT_DBG("hu %p", hu);
++ return 0;
++}
++
++/* Remove ack'ed packets */
++static void bcsp_pkt_cull(struct bcsp_struct *bcsp)
++{
++ unsigned long flags;
++ struct sk_buff *skb;
++ int i, pkts_to_be_removed;
++ u8 seqno;
++
++ spin_lock_irqsave(&bcsp->unack.lock, flags);
++
++ pkts_to_be_removed = bcsp->unack.qlen;
++ seqno = bcsp->msgq_txseq;
++
++ while (pkts_to_be_removed) {
++ if (bcsp->rxack == seqno)
++ break;
++ pkts_to_be_removed--;
++ seqno = (seqno - 1) & 0x07;
++ }
++
++ if (bcsp->rxack != seqno)
++ BT_ERR("Peer acked invalid packet");
++
++ BT_DBG("Removing %u pkts out of %u, up to seqno %u",
++ pkts_to_be_removed, bcsp->unack.qlen, (seqno - 1) & 0x07);
++
++ for (i = 0, skb = ((struct sk_buff *) &bcsp->unack)->next; i < pkts_to_be_removed
++ && skb != (struct sk_buff *) &bcsp->unack; i++) {
++ struct sk_buff *nskb;
++
++ nskb = skb->next;
++ __skb_unlink(skb, &bcsp->unack);
++ kfree_skb(skb);
++ skb = nskb;
++ }
++ if (bcsp->unack.qlen == 0)
++ del_timer(&bcsp->tbcsp);
++ spin_unlock_irqrestore(&bcsp->unack.lock, flags);
++
++ if (i != pkts_to_be_removed)
++ BT_ERR("Removed only %u out of %u pkts", i, pkts_to_be_removed);
++}
++
++/* Handle BCSP link-establishment packets. When we
++ detect a "sync" packet, symptom that the BT module has reset,
++ we do nothing :) (yet) */
++static void bcsp_handle_le_pkt(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++ u8 conf_pkt[4] = { 0xad, 0xef, 0xac, 0xed };
++ u8 conf_rsp_pkt[4] = { 0xde, 0xad, 0xd0, 0xd0 };
++ u8 sync_pkt[4] = { 0xda, 0xdc, 0xed, 0xed };
++
++ /* spot "conf" pkts and reply with a "conf rsp" pkt */
++ if (bcsp->rx_skb->data[1] >> 4 == 4 && bcsp->rx_skb->data[2] == 0 &&
++ !memcmp(&bcsp->rx_skb->data[4], conf_pkt, 4)) {
++ struct sk_buff *nskb = alloc_skb(4, GFP_ATOMIC);
++
++ BT_DBG("Found a LE conf pkt");
++ if (!nskb)
++ return;
++ memcpy(skb_put(nskb, 4), conf_rsp_pkt, 4);
++ nskb->pkt_type = BCSP_LE_PKT;
++
++ skb_queue_head(&bcsp->unrel, nskb);
++ hci_uart_tx_wakeup(hu);
++ }
++ /* Spot "sync" pkts. If we find one...disaster! */
++ else if (bcsp->rx_skb->data[1] >> 4 == 4 && bcsp->rx_skb->data[2] == 0 &&
++ !memcmp(&bcsp->rx_skb->data[4], sync_pkt, 4)) {
++ BT_ERR("Found a LE sync pkt, card has reset");
++ }
++}
++
++static inline void bcsp_unslip_one_byte(struct bcsp_struct *bcsp, unsigned char byte)
++{
++ const u8 c0 = 0xc0, db = 0xdb;
++
++ switch (bcsp->rx_esc_state) {
++ case BCSP_ESCSTATE_NOESC:
++ switch (byte) {
++ case 0xdb:
++ bcsp->rx_esc_state = BCSP_ESCSTATE_ESC;
++ break;
++ default:
++ memcpy(skb_put(bcsp->rx_skb, 1), &byte, 1);
++ if ((bcsp->rx_skb-> data[0] & 0x40) != 0 &&
++ bcsp->rx_state != BCSP_W4_CRC)
++ bcsp_crc_update(&bcsp->message_crc, byte);
++ bcsp->rx_count--;
++ }
++ break;
++
++ case BCSP_ESCSTATE_ESC:
++ switch (byte) {
++ case 0xdc:
++ memcpy(skb_put(bcsp->rx_skb, 1), &c0, 1);
++ if ((bcsp->rx_skb-> data[0] & 0x40) != 0 &&
++ bcsp->rx_state != BCSP_W4_CRC)
++ bcsp_crc_update(&bcsp-> message_crc, 0xc0);
++ bcsp->rx_esc_state = BCSP_ESCSTATE_NOESC;
++ bcsp->rx_count--;
++ break;
++
++ case 0xdd:
++ memcpy(skb_put(bcsp->rx_skb, 1), &db, 1);
++ if ((bcsp->rx_skb-> data[0] & 0x40) != 0 &&
++ bcsp->rx_state != BCSP_W4_CRC)
++ bcsp_crc_update(&bcsp-> message_crc, 0xdb);
++ bcsp->rx_esc_state = BCSP_ESCSTATE_NOESC;
++ bcsp->rx_count--;
++ break;
++
++ default:
++ BT_ERR ("Invalid byte %02x after esc byte", byte);
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_skb = NULL;
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ }
++ }
++}
++
++static inline void bcsp_complete_rx_pkt(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++ int pass_up;
++
++ if (bcsp->rx_skb->data[0] & 0x80) { /* reliable pkt */
++ BT_DBG("Received seqno %u from card", bcsp->rxseq_txack);
++ bcsp->rxseq_txack++;
++ bcsp->rxseq_txack %= 0x8;
++ bcsp->txack_req = 1;
++
++ /* If needed, transmit an ack pkt */
++ hci_uart_tx_wakeup(hu);
++ }
++
++ bcsp->rxack = (bcsp->rx_skb->data[0] >> 3) & 0x07;
++ BT_DBG("Request for pkt %u from card", bcsp->rxack);
++
++ bcsp_pkt_cull(bcsp);
++ if ((bcsp->rx_skb->data[1] & 0x0f) == 6 &&
++ bcsp->rx_skb->data[0] & 0x80) {
++ bcsp->rx_skb->pkt_type = HCI_ACLDATA_PKT;
++ pass_up = 1;
++ } else if ((bcsp->rx_skb->data[1] & 0x0f) == 5 &&
++ bcsp->rx_skb->data[0] & 0x80) {
++ bcsp->rx_skb->pkt_type = HCI_EVENT_PKT;
++ pass_up = 1;
++ } else if ((bcsp->rx_skb->data[1] & 0x0f) == 7) {
++ bcsp->rx_skb->pkt_type = HCI_SCODATA_PKT;
++ pass_up = 1;
++ } else if ((bcsp->rx_skb->data[1] & 0x0f) == 1 &&
++ !(bcsp->rx_skb->data[0] & 0x80)) {
++ bcsp_handle_le_pkt(hu);
++ pass_up = 0;
++ } else
++ pass_up = 0;
++
++ if (!pass_up) {
++ if ((bcsp->rx_skb->data[1] & 0x0f) != 0 &&
++ (bcsp->rx_skb->data[1] & 0x0f) != 1) {
++ BT_ERR ("Packet for unknown channel (%u %s)",
++ bcsp->rx_skb->data[1] & 0x0f,
++ bcsp->rx_skb->data[0] & 0x80 ?
++ "reliable" : "unreliable");
++ }
++ kfree_skb(bcsp->rx_skb);
++ } else {
++ /* Pull out BCSP hdr */
++ skb_pull(bcsp->rx_skb, 4);
++
++ hci_recv_frame(bcsp->rx_skb);
++ }
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_skb = NULL;
++}
++
++/* Recv data */
++static int bcsp_recv(struct hci_uart *hu, void *data, int count)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++ register unsigned char *ptr;
++
++ BT_DBG("hu %p count %d rx_state %ld rx_count %ld",
++ hu, count, bcsp->rx_state, bcsp->rx_count);
++
++ ptr = data;
++ while (count) {
++ if (bcsp->rx_count) {
++ if (*ptr == 0xc0) {
++ BT_ERR("Short BCSP packet");
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_state = BCSP_W4_PKT_START;
++ bcsp->rx_count = 0;
++ } else
++ bcsp_unslip_one_byte(bcsp, *ptr);
++
++ ptr++; count--;
++ continue;
++ }
++
++ switch (bcsp->rx_state) {
++ case BCSP_W4_BCSP_HDR:
++ if ((0xff & (u8) ~ (bcsp->rx_skb->data[0] + bcsp->rx_skb->data[1] +
++ bcsp->rx_skb->data[2])) != bcsp->rx_skb->data[3]) {
++ BT_ERR("Error in BCSP hdr checksum");
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ continue;
++ }
++ if (bcsp->rx_skb->data[0] & 0x80 /* reliable pkt */
++ && (bcsp->rx_skb->data[0] & 0x07) != bcsp->rxseq_txack) {
++ BT_ERR ("Out-of-order packet arrived, got %u expected %u",
++ bcsp->rx_skb->data[0] & 0x07, bcsp->rxseq_txack);
++
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ continue;
++ }
++ bcsp->rx_state = BCSP_W4_DATA;
++ bcsp->rx_count = (bcsp->rx_skb->data[1] >> 4) +
++ (bcsp->rx_skb->data[2] << 4); /* May be 0 */
++ continue;
++
++ case BCSP_W4_DATA:
++ if (bcsp->rx_skb->data[0] & 0x40) { /* pkt with crc */
++ bcsp->rx_state = BCSP_W4_CRC;
++ bcsp->rx_count = 2;
++ } else
++ bcsp_complete_rx_pkt(hu);
++ continue;
++
++ case BCSP_W4_CRC:
++ if (bcsp_crc_reverse(bcsp->message_crc) !=
++ (bcsp->rx_skb->data[bcsp->rx_skb->len - 2] << 8) +
++ bcsp->rx_skb->data[bcsp->rx_skb->len - 1]) {
++
++ BT_ERR ("Checksum failed: computed %04x received %04x",
++ bcsp_crc_reverse(bcsp->message_crc),
++ (bcsp->rx_skb-> data[bcsp->rx_skb->len - 2] << 8) +
++ bcsp->rx_skb->data[bcsp->rx_skb->len - 1]);
++
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ continue;
++ }
++ skb_trim(bcsp->rx_skb, bcsp->rx_skb->len - 2);
++ bcsp_complete_rx_pkt(hu);
++ continue;
++
++ case BCSP_W4_PKT_DELIMITER:
++ switch (*ptr) {
++ case 0xc0:
++ bcsp->rx_state = BCSP_W4_PKT_START;
++ break;
++ default:
++ /*BT_ERR("Ignoring byte %02x", *ptr);*/
++ break;
++ }
++ ptr++; count--;
++ break;
++
++ case BCSP_W4_PKT_START:
++ switch (*ptr) {
++ case 0xc0:
++ ptr++; count--;
++ break;
++
++ default:
++ bcsp->rx_state = BCSP_W4_BCSP_HDR;
++ bcsp->rx_count = 4;
++ bcsp->rx_esc_state = BCSP_ESCSTATE_NOESC;
++ BCSP_CRC_INIT(bcsp->message_crc);
++
++ /* Do not increment ptr or decrement count
++ * Allocate packet. Max len of a BCSP pkt=
++ * 0xFFF (payload) +4 (header) +2 (crc) */
++
++ bcsp->rx_skb = bluez_skb_alloc(0x1005, GFP_ATOMIC);
++ if (!bcsp->rx_skb) {
++ BT_ERR("Can't allocate mem for new packet");
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ return 0;
++ }
++ bcsp->rx_skb->dev = (void *) &hu->hdev;
++ break;
++ }
++ break;
++ }
++ }
++ return count;
++}
++
++ /* Arrange to retransmit all messages in the relq. */
++static void bcsp_timed_event(unsigned long arg)
++{
++ struct hci_uart *hu = (struct hci_uart *) arg;
++ struct bcsp_struct *bcsp = (struct bcsp_struct *) hu->priv;
++ struct sk_buff *skb;
++ unsigned long flags;
++
++ BT_DBG("hu %p retransmitting %u pkts", hu, bcsp->unack.qlen);
++
++ spin_lock_irqsave(&bcsp->unack.lock, flags);
++
++ while ((skb = __skb_dequeue_tail(&bcsp->unack)) != NULL) {
++ bcsp->msgq_txseq = (bcsp->msgq_txseq - 1) & 0x07;
++ skb_queue_head(&bcsp->rel, skb);
++ }
++
++ spin_unlock_irqrestore(&bcsp->unack.lock, flags);
++
++ hci_uart_tx_wakeup(hu);
++}
++
++static int bcsp_open(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp;
++
++ BT_DBG("hu %p", hu);
++
++ bcsp = kmalloc(sizeof(*bcsp), GFP_ATOMIC);
++ if (!bcsp)
++ return -ENOMEM;
++ memset(bcsp, 0, sizeof(*bcsp));
++
++ hu->priv = bcsp;
++ skb_queue_head_init(&bcsp->unack);
++ skb_queue_head_init(&bcsp->rel);
++ skb_queue_head_init(&bcsp->unrel);
++
++ init_timer(&bcsp->tbcsp);
++ bcsp->tbcsp.function = bcsp_timed_event;
++ bcsp->tbcsp.data = (u_long) hu;
++
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++
++ return 0;
++}
++
++static int bcsp_close(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++ hu->priv = NULL;
++
++ BT_DBG("hu %p", hu);
++
++ skb_queue_purge(&bcsp->unack);
++ skb_queue_purge(&bcsp->rel);
++ skb_queue_purge(&bcsp->unrel);
++ del_timer(&bcsp->tbcsp);
++
++ kfree(bcsp);
++ return 0;
++}
++
++static struct hci_uart_proto bcsp = {
++ id: HCI_UART_BCSP,
++ open: bcsp_open,
++ close: bcsp_close,
++ enqueue: bcsp_enqueue,
++ dequeue: bcsp_dequeue,
++ recv: bcsp_recv,
++ flush: bcsp_flush
++};
++
++int bcsp_init(void)
++{
++ return hci_uart_register_proto(&bcsp);
++}
++
++int bcsp_deinit(void)
++{
++ return hci_uart_unregister_proto(&bcsp);
++}
+diff -Nur c3000_pre/linux/drivers/bluetooth/hci_bcsp.h c3000_work/linux/drivers/bluetooth/hci_bcsp.h
+--- c3000_pre/linux/drivers/bluetooth/hci_bcsp.h 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/drivers/bluetooth/hci_bcsp.h 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,70 @@
++/*
++ BlueCore Serial Protocol (BCSP) for Linux Bluetooth stack (BlueZ).
++ Copyright 2002 by Fabrizio Gennari <fabrizio.gennari@philips.com>
++
++ Based on
++ hci_h4.c by Maxim Krasnyansky <maxk@qualcomm.com>
++ ABCSP by Carl Orsborn <cjo@csr.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_bcsp.h,v 1.2 2002/09/26 05:05:14 maxk Exp $
++ */
++
++#ifndef __HCI_BCSP_H__
++#define __HCI_BCSP_H__
++
++#define BCSP_TXWINSIZE 4
++
++#define BCSP_ACK_PKT 0x05
++#define BCSP_LE_PKT 0x06
++
++struct bcsp_struct {
++ struct sk_buff_head unack; /* Unack'ed packets queue */
++ struct sk_buff_head rel; /* Reliable packets queue */
++ struct sk_buff_head unrel; /* Unreliable packets queue */
++
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++ u8 rxseq_txack; /* rxseq == txack. */
++ u8 rxack; /* Last packet sent by us that the peer ack'ed */
++ struct timer_list tbcsp;
++
++ enum {
++ BCSP_W4_PKT_DELIMITER,
++ BCSP_W4_PKT_START,
++ BCSP_W4_BCSP_HDR,
++ BCSP_W4_DATA,
++ BCSP_W4_CRC
++ } rx_state;
++
++ enum {
++ BCSP_ESCSTATE_NOESC,
++ BCSP_ESCSTATE_ESC
++ } rx_esc_state;
++
++ u16 message_crc;
++ u8 txack_req; /* Do we need to send ack's to the peer? */
++
++ /* Reliable packet sequence number - used to assign seq to each rel pkt. */
++ u8 msgq_txseq;
++};
++
++#endif /* __HCI_BCSP_H__ */
+diff -Nur c3000_pre/linux/drivers/bluetooth/hci_h4.c c3000_work/linux/drivers/bluetooth/hci_h4.c
+--- c3000_pre/linux/drivers/bluetooth/hci_h4.c 2004-08-21 09:48:24.000000000 +0900
++++ c3000_work/linux/drivers/bluetooth/hci_h4.c 2004-12-16 23:01:14.000000000 +0900
+@@ -25,15 +25,14 @@
+ /*
+ * BlueZ HCI UART(H4) protocol.
+ *
+- * $Id: hci_h4.c,v 1.2 2002/04/17 17:37:20 maxk Exp $
++ * $Id: hci_h4.c,v 1.3 2002/09/09 01:17:32 maxk Exp $
+ */
+-#define VERSION "1.1"
++#define VERSION "1.2"
+
+ #include <linux/config.h>
+ #include <linux/module.h>
+
+ #include <linux/version.h>
+-#include <linux/config.h>
+ #include <linux/kernel.h>
+ #include <linux/init.h>
+ #include <linux/sched.h>
+@@ -64,63 +63,61 @@
+ #endif
+
+ /* Initialize protocol */
+-static int h4_open(struct n_hci *n_hci)
++static int h4_open(struct hci_uart *hu)
+ {
+ struct h4_struct *h4;
+
+- BT_DBG("n_hci %p", n_hci);
++ BT_DBG("hu %p", hu);
+
+ h4 = kmalloc(sizeof(*h4), GFP_ATOMIC);
+ if (!h4)
+ return -ENOMEM;
+ memset(h4, 0, sizeof(*h4));
+
+- n_hci->priv = h4;
++ skb_queue_head_init(&h4->txq);
++
++ hu->priv = h4;
+ return 0;
+ }
+
+ /* Flush protocol data */
+-static int h4_flush(struct n_hci *n_hci)
++static int h4_flush(struct hci_uart *hu)
+ {
+- BT_DBG("n_hci %p", n_hci);
++ struct h4_struct *h4 = hu->priv;
++
++ BT_DBG("hu %p", hu);
++ skb_queue_purge(&h4->txq);
+ return 0;
+ }
+
+ /* Close protocol */
+-static int h4_close(struct n_hci *n_hci)
++static int h4_close(struct hci_uart *hu)
+ {
+- struct h4_struct *h4 = n_hci->priv;
+- n_hci->priv = NULL;
++ struct h4_struct *h4 = hu->priv;
++ hu->priv = NULL;
+
+- BT_DBG("n_hci %p", n_hci);
++ BT_DBG("hu %p", hu);
+
++ skb_queue_purge(&h4->txq);
+ if (h4->rx_skb)
+ kfree_skb(h4->rx_skb);
+
++ hu->priv = NULL;
+ kfree(h4);
+ return 0;
+ }
+
+-/* Send data */
+-static int h4_send(struct n_hci *n_hci, void *data, int len)
++/* Enqueue frame for transmittion (padding, crc, etc) */
++static int h4_enqueue(struct hci_uart *hu, struct sk_buff *skb)
+ {
+- struct tty_struct *tty = n_hci->tty;
+-
+- BT_DBG("n_hci %p len %d", n_hci, len);
++ struct h4_struct *h4 = hu->priv;
+
+- /* Send frame to TTY driver */
+- tty->flags |= (1 << TTY_DO_WRITE_WAKEUP);
+- return tty->driver.write(tty, 0, data, len);
+-}
+-
+-/* Init frame before queueing (padding, crc, etc) */
+-static struct sk_buff* h4_preq(struct n_hci *n_hci, struct sk_buff *skb)
+-{
+- BT_DBG("n_hci %p skb %p", n_hci, skb);
++ BT_DBG("hu %p skb %p", hu, skb);
+
+ /* Prepend skb with frame type */
+ memcpy(skb_push(skb, 1), &skb->pkt_type, 1);
+- return skb;
++ skb_queue_tail(&h4->txq, skb);
++ return 0;
+ }
+
+ static inline int h4_check_data_len(struct h4_struct *h4, int len)
+@@ -132,7 +129,7 @@
+ BT_DMP(h4->rx_skb->data, h4->rx_skb->len);
+ hci_recv_frame(h4->rx_skb);
+ } else if (len > room) {
+- BT_ERR("Data length is to large");
++ BT_ERR("Data length is too large");
+ kfree_skb(h4->rx_skb);
+ } else {
+ h4->rx_state = H4_W4_DATA;
+@@ -147,16 +144,17 @@
+ }
+
+ /* Recv data */
+-static int h4_recv(struct n_hci *n_hci, void *data, int count)
++static int h4_recv(struct hci_uart *hu, void *data, int count)
+ {
+- struct h4_struct *h4 = n_hci->priv;
++ struct h4_struct *h4 = hu->priv;
+ register char *ptr;
+ hci_event_hdr *eh;
+ hci_acl_hdr *ah;
+ hci_sco_hdr *sh;
+ register int len, type, dlen;
+
+- BT_DBG("n_hci %p count %d rx_state %ld rx_count %ld", n_hci, count, h4->rx_state, h4->rx_count);
++ BT_DBG("hu %p count %d rx_state %ld rx_count %ld",
++ hu, count, h4->rx_state, h4->rx_count);
+
+ ptr = data;
+ while (count) {
+@@ -204,7 +202,7 @@
+
+ h4_check_data_len(h4, sh->dlen);
+ continue;
+- };
++ }
+ }
+
+ /* H4_W4_PACKET_TYPE */
+@@ -232,7 +230,7 @@
+
+ default:
+ BT_ERR("Unknown HCI packet type %2.2x", (__u8)*ptr);
+- n_hci->hdev.stat.err_rx++;
++ hu->hdev.stat.err_rx++;
+ ptr++; count--;
+ continue;
+ };
+@@ -246,20 +244,26 @@
+ h4->rx_count = 0;
+ return 0;
+ }
+- h4->rx_skb->dev = (void *) &n_hci->hdev;
++ h4->rx_skb->dev = (void *) &hu->hdev;
+ h4->rx_skb->pkt_type = type;
+ }
+ return count;
+ }
+
++static struct sk_buff *h4_dequeue(struct hci_uart *hu)
++{
++ struct h4_struct *h4 = hu->priv;
++ return skb_dequeue(&h4->txq);
++}
++
+ static struct hci_uart_proto h4p = {
+- id: HCI_UART_H4,
+- open: h4_open,
+- close: h4_close,
+- send: h4_send,
+- recv: h4_recv,
+- preq: h4_preq,
+- flush: h4_flush,
++ id: HCI_UART_H4,
++ open: h4_open,
++ close: h4_close,
++ recv: h4_recv,
++ enqueue: h4_enqueue,
++ dequeue: h4_dequeue,
++ flush: h4_flush,
+ };
+
+ int h4_init(void)
+diff -Nur c3000_pre/linux/drivers/bluetooth/hci_h4.h c3000_work/linux/drivers/bluetooth/hci_h4.h
+--- c3000_pre/linux/drivers/bluetooth/hci_h4.h 2004-08-21 09:48:24.000000000 +0900
++++ c3000_work/linux/drivers/bluetooth/hci_h4.h 2004-12-16 23:01:14.000000000 +0900
+@@ -23,7 +23,7 @@
+ */
+
+ /*
+- * $Id: hci_h4.h,v 1.1.1.1 2002/03/08 21:03:15 maxk Exp $
++ * $Id: hci_h4.h,v 1.2 2002/09/09 01:17:32 maxk Exp $
+ */
+
+ #ifdef __KERNEL__
+@@ -31,6 +31,7 @@
+ unsigned long rx_state;
+ unsigned long rx_count;
+ struct sk_buff *rx_skb;
++ struct sk_buff_head txq;
+ };
+
+ /* H4 receiver States */
+diff -Nur c3000_pre/linux/drivers/bluetooth/hci_ldisc.c c3000_work/linux/drivers/bluetooth/hci_ldisc.c
+--- c3000_pre/linux/drivers/bluetooth/hci_ldisc.c 2004-08-21 09:48:24.000000000 +0900
++++ c3000_work/linux/drivers/bluetooth/hci_ldisc.c 2004-12-16 23:01:14.000000000 +0900
+@@ -25,9 +25,9 @@
+ /*
+ * BlueZ HCI UART driver.
+ *
+- * $Id: hci_ldisc.c,v 1.2 2002/04/17 17:37:20 maxk Exp $
++ * $Id: hci_ldisc.c,v 1.5 2002/10/02 18:37:20 maxk Exp $
+ */
+-#define VERSION "2.0"
++#define VERSION "2.1"
+
+ #include <linux/config.h>
+ #include <linux/module.h>
+@@ -87,16 +87,86 @@
+ return 0;
+ }
+
+-static struct hci_uart_proto *n_hci_get_proto(unsigned int id)
++static struct hci_uart_proto *hci_uart_get_proto(unsigned int id)
+ {
+ if (id >= HCI_UART_MAX_PROTO)
+ return NULL;
+ return hup[id];
+ }
+
++static inline void hci_uart_tx_complete(struct hci_uart *hu, int pkt_type)
++{
++ struct hci_dev *hdev = &hu->hdev;
++
++ /* Update HCI stat counters */
++ switch (pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++
++ case HCI_SCODATA_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ }
++}
++
++static inline struct sk_buff *hci_uart_dequeue(struct hci_uart *hu)
++{
++ struct sk_buff *skb = hu->tx_skb;
++ if (!skb)
++ skb = hu->proto->dequeue(hu);
++ else
++ hu->tx_skb = NULL;
++ return skb;
++}
++
++int hci_uart_tx_wakeup(struct hci_uart *hu)
++{
++ struct tty_struct *tty = hu->tty;
++ struct hci_dev *hdev = &hu->hdev;
++ struct sk_buff *skb;
++
++ if (test_and_set_bit(HCI_UART_SENDING, &hu->tx_state)) {
++ set_bit(HCI_UART_TX_WAKEUP, &hu->tx_state);
++ return 0;
++ }
++
++ BT_DBG("");
++
++restart:
++ clear_bit(HCI_UART_TX_WAKEUP, &hu->tx_state);
++
++ while ((skb = hci_uart_dequeue(hu))) {
++ int len;
++
++ set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
++ len = tty->driver.write(tty, 0, skb->data, skb->len);
++ hdev->stat.byte_tx += len;
++
++ skb_pull(skb, len);
++ if (skb->len) {
++ hu->tx_skb = skb;
++ break;
++ }
++
++ hci_uart_tx_complete(hu, skb->pkt_type);
++ kfree_skb(skb);
++ }
++
++ if (test_bit(HCI_UART_TX_WAKEUP, &hu->tx_state))
++ goto restart;
++
++ clear_bit(HCI_UART_SENDING, &hu->tx_state);
++ return 0;
++}
++
+ /* ------- Interface to HCI layer ------ */
+ /* Initialize device */
+-static int n_hci_open(struct hci_dev *hdev)
++static int hci_uart_open(struct hci_dev *hdev)
+ {
+ BT_DBG("%s %p", hdev->name, hdev);
+
+@@ -107,15 +177,16 @@
+ }
+
+ /* Reset device */
+-static int n_hci_flush(struct hci_dev *hdev)
++static int hci_uart_flush(struct hci_dev *hdev)
+ {
+- struct n_hci *n_hci = (struct n_hci *) hdev->driver_data;
+- struct tty_struct *tty = n_hci->tty;
++ struct hci_uart *hu = (struct hci_uart *) hdev->driver_data;
++ struct tty_struct *tty = hu->tty;
+
+ BT_DBG("hdev %p tty %p", hdev, tty);
+
+- /* Drop TX queue */
+- skb_queue_purge(&n_hci->txq);
++ if (hu->tx_skb) {
++ kfree_skb(hu->tx_skb); hu->tx_skb = NULL;
++ }
+
+ /* Flush any pending characters in the driver and discipline. */
+ if (tty->ldisc.flush_buffer)
+@@ -124,80 +195,30 @@
+ if (tty->driver.flush_buffer)
+ tty->driver.flush_buffer(tty);
+
+- if (n_hci->proto->flush)
+- n_hci->proto->flush(n_hci);
++ if (test_bit(HCI_UART_PROTO_SET, &hu->flags))
++ hu->proto->flush(hu);
+
+ return 0;
+ }
+
+ /* Close device */
+-static int n_hci_close(struct hci_dev *hdev)
++static int hci_uart_close(struct hci_dev *hdev)
+ {
+ BT_DBG("hdev %p", hdev);
+
+ if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
+ return 0;
+
+- n_hci_flush(hdev);
+- return 0;
+-}
+-
+-static int n_hci_tx_wakeup(struct n_hci *n_hci)
+-{
+- struct hci_dev *hdev = &n_hci->hdev;
+-
+- if (test_and_set_bit(N_HCI_SENDING, &n_hci->tx_state)) {
+- set_bit(N_HCI_TX_WAKEUP, &n_hci->tx_state);
+- return 0;
+- }
+-
+- BT_DBG("");
+- do {
+- register struct sk_buff *skb;
+- register int len;
+-
+- clear_bit(N_HCI_TX_WAKEUP, &n_hci->tx_state);
+-
+- if (!(skb = skb_dequeue(&n_hci->txq)))
+- break;
+-
+- len = n_hci->proto->send(n_hci, skb->data, skb->len);
+- n_hci->hdev.stat.byte_tx += len;
+-
+- if (len == skb->len) {
+- /* Complete frame was sent */
+-
+- switch (skb->pkt_type) {
+- case HCI_COMMAND_PKT:
+- hdev->stat.cmd_tx++;
+- break;
+-
+- case HCI_ACLDATA_PKT:
+- hdev->stat.acl_tx++;
+- break;
+-
+- case HCI_SCODATA_PKT:
+- hdev->stat.cmd_tx++;
+- break;
+- };
+-
+- kfree_skb(skb);
+- } else {
+- /* Subtract sent part and requeue */
+- skb_pull(skb, len);
+- skb_queue_head(&n_hci->txq, skb);
+- }
+- } while (test_bit(N_HCI_TX_WAKEUP, &n_hci->tx_state));
+- clear_bit(N_HCI_SENDING, &n_hci->tx_state);
++ hci_uart_flush(hdev);
+ return 0;
+ }
+
+ /* Send frames from HCI layer */
+-static int n_hci_send_frame(struct sk_buff *skb)
++static int hci_uart_send_frame(struct sk_buff *skb)
+ {
+ struct hci_dev* hdev = (struct hci_dev *) skb->dev;
+ struct tty_struct *tty;
+- struct n_hci *n_hci;
++ struct hci_uart *hu;
+
+ if (!hdev) {
+ BT_ERR("Frame for uknown device (hdev=NULL)");
+@@ -207,66 +228,60 @@
+ if (!test_bit(HCI_RUNNING, &hdev->flags))
+ return -EBUSY;
+
+- n_hci = (struct n_hci *) hdev->driver_data;
+- tty = n_hci->tty;
++ hu = (struct hci_uart *) hdev->driver_data;
++ tty = hu->tty;
+
+ BT_DBG("%s: type %d len %d", hdev->name, skb->pkt_type, skb->len);
+
+- if (n_hci->proto->preq) {
+- skb = n_hci->proto->preq(n_hci, skb);
+- if (!skb)
+- return 0;
+- }
+-
+- skb_queue_tail(&n_hci->txq, skb);
+- n_hci_tx_wakeup(n_hci);
++ hu->proto->enqueue(hu, skb);
++
++ hci_uart_tx_wakeup(hu);
+ return 0;
+ }
+
+-static void n_hci_destruct(struct hci_dev *hdev)
++static void hci_uart_destruct(struct hci_dev *hdev)
+ {
+- struct n_hci *n_hci;
++ struct hci_uart *hu;
+
+ if (!hdev) return;
+
+ BT_DBG("%s", hdev->name);
+
+- n_hci = (struct n_hci *) hdev->driver_data;
+- kfree(n_hci);
++ hu = (struct hci_uart *) hdev->driver_data;
++ kfree(hu);
+
+ MOD_DEC_USE_COUNT;
+ }
+
+ /* ------ LDISC part ------ */
+-/* n_hci_tty_open
++/* hci_uart_tty_open
+ *
+- * Called when line discipline changed to N_HCI.
++ * Called when line discipline changed to HCI_UART.
+ *
+ * Arguments:
+ * tty pointer to tty info structure
+ * Return Value:
+ * 0 if success, otherwise error code
+ */
+-static int n_hci_tty_open(struct tty_struct *tty)
++static int hci_uart_tty_open(struct tty_struct *tty)
+ {
+- struct n_hci *n_hci = (void *)tty->disc_data;
++ struct hci_uart *hu = (void *) tty->disc_data;
+
+ BT_DBG("tty %p", tty);
+
+- if (n_hci)
++ if (hu)
+ return -EEXIST;
+
+- if (!(n_hci = kmalloc(sizeof(struct n_hci), GFP_KERNEL))) {
++ if (!(hu = kmalloc(sizeof(struct hci_uart), GFP_KERNEL))) {
+ BT_ERR("Can't allocate controll structure");
+ return -ENFILE;
+ }
+- memset(n_hci, 0, sizeof(struct n_hci));
++ memset(hu, 0, sizeof(struct hci_uart));
+
+- tty->disc_data = n_hci;
+- n_hci->tty = tty;
++ tty->disc_data = hu;
++ hu->tty = tty;
+
+- spin_lock_init(&n_hci->rx_lock);
+- skb_queue_head_init(&n_hci->txq);
++ spin_lock_init(&hu->rx_lock);
+
+ /* Flush any pending characters in the driver and line discipline */
+ if (tty->ldisc.flush_buffer)
+@@ -279,34 +294,34 @@
+ return 0;
+ }
+
+-/* n_hci_tty_close()
++/* hci_uart_tty_close()
+ *
+ * Called when the line discipline is changed to something
+ * else, the tty is closed, or the tty detects a hangup.
+ */
+-static void n_hci_tty_close(struct tty_struct *tty)
++static void hci_uart_tty_close(struct tty_struct *tty)
+ {
+- struct n_hci *n_hci = (void *)tty->disc_data;
++ struct hci_uart *hu = (void *)tty->disc_data;
+
+ BT_DBG("tty %p", tty);
+
+ /* Detach from the tty */
+ tty->disc_data = NULL;
+
+- if (n_hci) {
+- struct hci_dev *hdev = &n_hci->hdev;
+- n_hci_close(hdev);
++ if (hu) {
++ struct hci_dev *hdev = &hu->hdev;
++ hci_uart_close(hdev);
+
+- if (test_and_clear_bit(N_HCI_PROTO_SET, &n_hci->flags)) {
+- n_hci->proto->close(n_hci);
++ if (test_and_clear_bit(HCI_UART_PROTO_SET, &hu->flags)) {
++ hu->proto->close(hu);
+ hci_unregister_dev(hdev);
+ }
+-
++
+ MOD_DEC_USE_COUNT;
+ }
+ }
+
+-/* n_hci_tty_wakeup()
++/* hci_uart_tty_wakeup()
+ *
+ * Callback for transmit wakeup. Called when low level
+ * device driver can accept more send data.
+@@ -314,24 +329,25 @@
+ * Arguments: tty pointer to associated tty instance data
+ * Return Value: None
+ */
+-static void n_hci_tty_wakeup( struct tty_struct *tty )
++static void hci_uart_tty_wakeup(struct tty_struct *tty)
+ {
+- struct n_hci *n_hci = (void *)tty->disc_data;
++ struct hci_uart *hu = (void *)tty->disc_data;
+
+ BT_DBG("");
+
+- if (!n_hci)
++ if (!hu)
+ return;
+
+- tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP);
++ clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
+
+- if (tty != n_hci->tty)
++ if (tty != hu->tty)
+ return;
+
+- n_hci_tx_wakeup(n_hci);
++ if (test_bit(HCI_UART_PROTO_SET, &hu->flags))
++ hci_uart_tx_wakeup(hu);
+ }
+
+-/* n_hci_tty_room()
++/* hci_uart_tty_room()
+ *
+ * Callback function from tty driver. Return the amount of
+ * space left in the receiver's buffer to decide if remote
+@@ -340,12 +356,12 @@
+ * Arguments: tty pointer to associated tty instance data
+ * Return Value: number of bytes left in receive buffer
+ */
+-static int n_hci_tty_room (struct tty_struct *tty)
++static int hci_uart_tty_room (struct tty_struct *tty)
+ {
+ return 65536;
+ }
+
+-/* n_hci_tty_receive()
++/* hci_uart_tty_receive()
+ *
+ * Called by tty low level driver when receive data is
+ * available.
+@@ -357,42 +373,42 @@
+ *
+ * Return Value: None
+ */
+-static void n_hci_tty_receive(struct tty_struct *tty, const __u8 * data, char *flags, int count)
++static void hci_uart_tty_receive(struct tty_struct *tty, const __u8 *data, char *flags, int count)
+ {
+- struct n_hci *n_hci = (void *)tty->disc_data;
++ struct hci_uart *hu = (void *)tty->disc_data;
+
+- if (!n_hci || tty != n_hci->tty)
++ if (!hu || tty != hu->tty)
+ return;
+
+- if (!test_bit(N_HCI_PROTO_SET, &n_hci->flags))
++ if (!test_bit(HCI_UART_PROTO_SET, &hu->flags))
+ return;
+
+- spin_lock(&n_hci->rx_lock);
+- n_hci->proto->recv(n_hci, (void *) data, count);
+- n_hci->hdev.stat.byte_rx += count;
+- spin_unlock(&n_hci->rx_lock);
++ spin_lock(&hu->rx_lock);
++ hu->proto->recv(hu, (void *) data, count);
++ hu->hdev.stat.byte_rx += count;
++ spin_unlock(&hu->rx_lock);
+
+ if (test_and_clear_bit(TTY_THROTTLED,&tty->flags) && tty->driver.unthrottle)
+ tty->driver.unthrottle(tty);
+ }
+
+-static int n_hci_register_dev(struct n_hci *n_hci)
++static int hci_uart_register_dev(struct hci_uart *hu)
+ {
+ struct hci_dev *hdev;
+
+ BT_DBG("");
+
+ /* Initialize and register HCI device */
+- hdev = &n_hci->hdev;
++ hdev = &hu->hdev;
+
+ hdev->type = HCI_UART;
+- hdev->driver_data = n_hci;
++ hdev->driver_data = hu;
+
+- hdev->open = n_hci_open;
+- hdev->close = n_hci_close;
+- hdev->flush = n_hci_flush;
+- hdev->send = n_hci_send_frame;
+- hdev->destruct = n_hci_destruct;
++ hdev->open = hci_uart_open;
++ hdev->close = hci_uart_close;
++ hdev->flush = hci_uart_flush;
++ hdev->send = hci_uart_send_frame;
++ hdev->destruct = hci_uart_destruct;
+
+ if (hci_register_dev(hdev) < 0) {
+ BT_ERR("Can't register HCI device %s", hdev->name);
+@@ -402,30 +418,30 @@
+ return 0;
+ }
+
+-static int n_hci_set_proto(struct n_hci *n_hci, int id)
++static int hci_uart_set_proto(struct hci_uart *hu, int id)
+ {
+ struct hci_uart_proto *p;
+ int err;
+
+- p = n_hci_get_proto(id);
++ p = hci_uart_get_proto(id);
+ if (!p)
+ return -EPROTONOSUPPORT;
+
+- err = p->open(n_hci);
++ err = p->open(hu);
+ if (err)
+ return err;
+
+- n_hci->proto = p;
++ hu->proto = p;
+
+- err = n_hci_register_dev(n_hci);
++ err = hci_uart_register_dev(hu);
+ if (err) {
+- p->close(n_hci);
++ p->close(hu);
+ return err;
+ }
+ return 0;
+ }
+
+-/* n_hci_tty_ioctl()
++/* hci_uart_tty_ioctl()
+ *
+ * Process IOCTL system call for the tty device.
+ *
+@@ -438,24 +454,24 @@
+ *
+ * Return Value: Command dependent
+ */
+-static int n_hci_tty_ioctl(struct tty_struct *tty, struct file * file,
++static int hci_uart_tty_ioctl(struct tty_struct *tty, struct file * file,
+ unsigned int cmd, unsigned long arg)
+ {
+- struct n_hci *n_hci = (void *)tty->disc_data;
++ struct hci_uart *hu = (void *)tty->disc_data;
+ int err = 0;
+
+ BT_DBG("");
+
+ /* Verify the status of the device */
+- if (!n_hci)
++ if (!hu)
+ return -EBADF;
+
+ switch (cmd) {
+ case HCIUARTSETPROTO:
+- if (!test_and_set_bit(N_HCI_PROTO_SET, &n_hci->flags)) {
+- err = n_hci_set_proto(n_hci, arg);
++ if (!test_and_set_bit(HCI_UART_PROTO_SET, &hu->flags)) {
++ err = hci_uart_set_proto(hu, arg);
+ if (err) {
+- clear_bit(N_HCI_PROTO_SET, &n_hci->flags);
++ clear_bit(HCI_UART_PROTO_SET, &hu->flags);
+ return err;
+ }
+ tty->low_latency = 1;
+@@ -463,8 +479,8 @@
+ return -EBUSY;
+
+ case HCIUARTGETPROTO:
+- if (test_bit(N_HCI_PROTO_SET, &n_hci->flags))
+- return n_hci->proto->id;
++ if (test_bit(HCI_UART_PROTO_SET, &hu->flags))
++ return hu->proto->id;
+ return -EUNATCH;
+
+ default:
+@@ -478,15 +494,15 @@
+ /*
+ * We don't provide read/write/poll interface for user space.
+ */
+-static ssize_t n_hci_tty_read(struct tty_struct *tty, struct file *file, unsigned char *buf, size_t nr)
++static ssize_t hci_uart_tty_read(struct tty_struct *tty, struct file *file, unsigned char *buf, size_t nr)
+ {
+ return 0;
+ }
+-static ssize_t n_hci_tty_write(struct tty_struct *tty, struct file *file, const unsigned char *data, size_t count)
++static ssize_t hci_uart_tty_write(struct tty_struct *tty, struct file *file, const unsigned char *data, size_t count)
+ {
+ return 0;
+ }
+-static unsigned int n_hci_tty_poll(struct tty_struct *tty, struct file *filp, poll_table *wait)
++static unsigned int hci_uart_tty_poll(struct tty_struct *tty, struct file *filp, poll_table *wait)
+ {
+ return 0;
+ }
+@@ -495,10 +511,14 @@
+ int h4_init(void);
+ int h4_deinit(void);
+ #endif
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP
++int bcsp_init(void);
++int bcsp_deinit(void);
++#endif
+
+-int __init n_hci_init(void)
++int __init hci_uart_init(void)
+ {
+- static struct tty_ldisc n_hci_ldisc;
++ static struct tty_ldisc hci_uart_ldisc;
+ int err;
+
+ BT_INFO("BlueZ HCI UART driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
+@@ -507,20 +527,20 @@
+
+ /* Register the tty discipline */
+
+- memset(&n_hci_ldisc, 0, sizeof (n_hci_ldisc));
+- n_hci_ldisc.magic = TTY_LDISC_MAGIC;
+- n_hci_ldisc.name = "n_hci";
+- n_hci_ldisc.open = n_hci_tty_open;
+- n_hci_ldisc.close = n_hci_tty_close;
+- n_hci_ldisc.read = n_hci_tty_read;
+- n_hci_ldisc.write = n_hci_tty_write;
+- n_hci_ldisc.ioctl = n_hci_tty_ioctl;
+- n_hci_ldisc.poll = n_hci_tty_poll;
+- n_hci_ldisc.receive_room= n_hci_tty_room;
+- n_hci_ldisc.receive_buf = n_hci_tty_receive;
+- n_hci_ldisc.write_wakeup= n_hci_tty_wakeup;
++ memset(&hci_uart_ldisc, 0, sizeof (hci_uart_ldisc));
++ hci_uart_ldisc.magic = TTY_LDISC_MAGIC;
++ hci_uart_ldisc.name = "n_hci";
++ hci_uart_ldisc.open = hci_uart_tty_open;
++ hci_uart_ldisc.close = hci_uart_tty_close;
++ hci_uart_ldisc.read = hci_uart_tty_read;
++ hci_uart_ldisc.write = hci_uart_tty_write;
++ hci_uart_ldisc.ioctl = hci_uart_tty_ioctl;
++ hci_uart_ldisc.poll = hci_uart_tty_poll;
++ hci_uart_ldisc.receive_room= hci_uart_tty_room;
++ hci_uart_ldisc.receive_buf = hci_uart_tty_receive;
++ hci_uart_ldisc.write_wakeup= hci_uart_tty_wakeup;
+
+- if ((err = tty_register_ldisc(N_HCI, &n_hci_ldisc))) {
++ if ((err = tty_register_ldisc(N_HCI, &hci_uart_ldisc))) {
+ BT_ERR("Can't register HCI line discipline (%d)", err);
+ return err;
+ }
+@@ -528,25 +548,31 @@
+ #ifdef CONFIG_BLUEZ_HCIUART_H4
+ h4_init();
+ #endif
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP
++ bcsp_init();
++#endif
+
+ return 0;
+ }
+
+-void n_hci_cleanup(void)
++void hci_uart_cleanup(void)
+ {
+ int err;
+
+ #ifdef CONFIG_BLUEZ_HCIUART_H4
+ h4_deinit();
+ #endif
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP
++ bcsp_deinit();
++#endif
+
+ /* Release tty registration of line discipline */
+ if ((err = tty_register_ldisc(N_HCI, NULL)))
+ BT_ERR("Can't unregister HCI line discipline (%d)", err);
+ }
+
+-module_init(n_hci_init);
+-module_exit(n_hci_cleanup);
++module_init(hci_uart_init);
++module_exit(hci_uart_cleanup);
+
+ MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
+ MODULE_DESCRIPTION("BlueZ HCI UART driver ver " VERSION);
+diff -Nur c3000_pre/linux/drivers/bluetooth/hci_uart.h c3000_work/linux/drivers/bluetooth/hci_uart.h
+--- c3000_pre/linux/drivers/bluetooth/hci_uart.h 2004-08-21 09:48:24.000000000 +0900
++++ c3000_work/linux/drivers/bluetooth/hci_uart.h 2004-12-16 23:01:14.000000000 +0900
+@@ -23,10 +23,10 @@
+ */
+
+ /*
+- * $Id: hci_uart.h,v 1.1.1.1 2002/03/08 21:03:15 maxk Exp $
++ * $Id: hci_uart.h,v 1.2 2002/09/09 01:17:32 maxk Exp $
+ */
+
+-#ifndef N_HCI
++#ifndef N_HCI
+ #define N_HCI 15
+ #endif
+
+@@ -35,26 +35,27 @@
+ #define HCIUARTGETPROTO _IOR('U', 201, int)
+
+ /* UART protocols */
+-#define HCI_UART_MAX_PROTO 3
++#define HCI_UART_MAX_PROTO 4
+
+ #define HCI_UART_H4 0
+ #define HCI_UART_BCSP 1
+-#define HCI_UART_NCSP 2
++#define HCI_UART_3WIRE 2
++#define HCI_UART_H4DS 3
+
+ #ifdef __KERNEL__
+-struct n_hci;
++struct hci_uart;
+
+ struct hci_uart_proto {
+ unsigned int id;
+- int (*open)(struct n_hci *n_hci);
+- int (*recv)(struct n_hci *n_hci, void *data, int len);
+- int (*send)(struct n_hci *n_hci, void *data, int len);
+- int (*close)(struct n_hci *n_hci);
+- int (*flush)(struct n_hci *n_hci);
+- struct sk_buff* (*preq)(struct n_hci *n_hci, struct sk_buff *skb);
++ int (*open)(struct hci_uart *hu);
++ int (*close)(struct hci_uart *hu);
++ int (*flush)(struct hci_uart *hu);
++ int (*recv)(struct hci_uart *hu, void *data, int len);
++ int (*enqueue)(struct hci_uart *hu, struct sk_buff *skb);
++ struct sk_buff *(*dequeue)(struct hci_uart *hu);
+ };
+
+-struct n_hci {
++struct hci_uart {
+ struct tty_struct *tty;
+ struct hci_dev hdev;
+ unsigned long flags;
+@@ -62,19 +63,20 @@
+ struct hci_uart_proto *proto;
+ void *priv;
+
+- struct sk_buff_head txq;
+- unsigned long tx_state;
+- spinlock_t rx_lock;
++ struct sk_buff *tx_skb;
++ unsigned long tx_state;
++ spinlock_t rx_lock;
+ };
+
+-/* N_HCI flag bits */
+-#define N_HCI_PROTO_SET 0x00
++/* HCI_UART flag bits */
++#define HCI_UART_PROTO_SET 0
+
+ /* TX states */
+-#define N_HCI_SENDING 1
+-#define N_HCI_TX_WAKEUP 2
++#define HCI_UART_SENDING 1
++#define HCI_UART_TX_WAKEUP 2
+
+ int hci_uart_register_proto(struct hci_uart_proto *p);
+ int hci_uart_unregister_proto(struct hci_uart_proto *p);
++int hci_uart_tx_wakeup(struct hci_uart *hu);
+
+ #endif /* __KERNEL__ */
+diff -Nur c3000_pre/linux/drivers/bluetooth/hci_usb.c c3000_work/linux/drivers/bluetooth/hci_usb.c
+--- c3000_pre/linux/drivers/bluetooth/hci_usb.c 2004-08-21 09:48:24.000000000 +0900
++++ c3000_work/linux/drivers/bluetooth/hci_usb.c 2004-12-16 23:01:14.000000000 +0900
+@@ -1,9 +1,10 @@
+ /*
+- BlueZ - Bluetooth protocol stack for Linux
++ HCI USB driver for Linux Bluetooth protocol stack (BlueZ)
+ Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+
++ Copyright (C) 2003 Maxim Krasnyansky <maxk@qualcomm.com>
++
+ 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;
+@@ -23,20 +24,17 @@
+ */
+
+ /*
+- * BlueZ HCI USB driver.
+ * Based on original USB Bluetooth driver for Linux kernel
+ * Copyright (c) 2000 Greg Kroah-Hartman <greg@kroah.com>
+ * Copyright (c) 2000 Mark Douglas Corner <mcorner@umich.edu>
+ *
+ * $Id: hci_usb.c,v 1.8 2002/07/18 17:23:09 maxk Exp $
+ */
+-#define VERSION "2.1"
++#define VERSION "2.7"
+
+ #include <linux/config.h>
+ #include <linux/module.h>
+
+-#define __KERNEL_SYSCALLS__
+-
+ #include <linux/version.h>
+ #include <linux/kernel.h>
+ #include <linux/init.h>
+@@ -49,15 +47,13 @@
+ #include <linux/errno.h>
+ #include <linux/string.h>
+ #include <linux/skbuff.h>
+-#include <linux/kmod.h>
+
+ #include <linux/usb.h>
+
+ #include <net/bluetooth/bluetooth.h>
+ #include <net/bluetooth/hci_core.h>
+-#include "hci_usb.h"
+
+-#define HCI_MAX_PENDING (HCI_MAX_BULK_RX + HCI_MAX_BULK_TX + 1)
++#include "hci_usb.h"
+
+ #ifndef HCI_USB_DEBUG
+ #undef BT_DBG
+@@ -66,7 +62,7 @@
+ #define BT_DMP( A... )
+ #endif
+
+-#ifndef CONFIG_BLUEZ_USB_ZERO_PACKET
++#ifndef CONFIG_BLUEZ_HCIUSB_ZERO_PACKET
+ #undef USB_ZERO_PACKET
+ #define USB_ZERO_PACKET 0
+ #endif
+@@ -77,6 +73,16 @@
+ /* Generic Bluetooth USB device */
+ { USB_DEVICE_INFO(HCI_DEV_CLASS, HCI_DEV_SUBCLASS, HCI_DEV_PROTOCOL) },
+
++ /* AVM BlueFRITZ! USB v2.0 */
++ { USB_DEVICE(0x057c, 0x3800) },
++
++ /* Bluetooth Ultraport Module from IBM */
++ { USB_DEVICE(0x04bf, 0x030a) },
++
++ /* ALPS Modules with non-standard id */
++ { USB_DEVICE(0x044e, 0x3001) },
++ { USB_DEVICE(0x044e, 0x3002) },
++
+ /* Ericsson with non-standard id */
+ { USB_DEVICE(0x0bdb, 0x1002) },
+
+@@ -85,116 +91,214 @@
+
+ MODULE_DEVICE_TABLE (usb, bluetooth_ids);
+
+-static struct usb_device_id ignore_ids[] = {
++static struct usb_device_id blacklist_ids[] = {
+ /* Broadcom BCM2033 without firmware */
+- { USB_DEVICE(0x0a5c, 0x2033) },
++ { USB_DEVICE(0x0a5c, 0x2033), driver_info: HCI_IGNORE },
++
++ /* Broadcom BCM2035 */
++ { USB_DEVICE(0x0a5c, 0x200a), driver_info: HCI_RESET },
++
++ /* ISSC Bluetooth Adapter v3.1 */
++ { USB_DEVICE(0x1131, 0x1001), driver_info: HCI_RESET },
++
++ /* Digianswer device */
++ { USB_DEVICE(0x08fd, 0x0001), driver_info: HCI_DIGIANSWER },
++
++ /* RTX Telecom based adapter with buggy SCO support */
++ { USB_DEVICE(0x0400, 0x0807), driver_info: HCI_BROKEN_ISOC },
+
+ { } /* Terminating entry */
+ };
+
+-static void hci_usb_interrupt(struct urb *urb);
++struct _urb *_urb_alloc(int isoc, int gfp)
++{
++ struct _urb *_urb = kmalloc(sizeof(struct _urb) +
++ sizeof(struct iso_packet_descriptor) * isoc, gfp);
++ if (_urb) {
++ memset(_urb, 0, sizeof(*_urb));
++ spin_lock_init(&_urb->urb.lock);
++ }
++ return _urb;
++}
++
++struct _urb *_urb_dequeue(struct _urb_queue *q)
++{
++ struct _urb *_urb = NULL;
++ unsigned long flags;
++ spin_lock_irqsave(&q->lock, flags);
++ {
++ struct list_head *head = &q->head;
++ struct list_head *next = head->next;
++ if (next != head) {
++ _urb = list_entry(next, struct _urb, list);
++ list_del(next); _urb->queue = NULL;
++ }
++ }
++ spin_unlock_irqrestore(&q->lock, flags);
++ return _urb;
++}
++
+ static void hci_usb_rx_complete(struct urb *urb);
+ static void hci_usb_tx_complete(struct urb *urb);
+
+-static struct urb *hci_usb_get_completed(struct hci_usb *husb)
++#define __pending_tx(husb, type) (&husb->pending_tx[type-1])
++#define __pending_q(husb, type) (&husb->pending_q[type-1])
++#define __completed_q(husb, type) (&husb->completed_q[type-1])
++#define __transmit_q(husb, type) (&husb->transmit_q[type-1])
++#define __reassembly(husb, type) (husb->reassembly[type-1])
++
++static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
+ {
+- struct sk_buff *skb;
+- struct urb *urb = NULL;
++ return _urb_dequeue(__completed_q(husb, type));
++}
+
+- skb = skb_dequeue(&husb->completed_q);
+- if (skb) {
+- urb = ((struct hci_usb_scb *) skb->cb)->urb;
+- kfree_skb(skb);
+- }
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
++{
++ int offset = 0, i;
+
+- BT_DBG("%s urb %p", husb->hdev.name, urb);
+- return urb;
++ BT_DBG("len %d mtu %d", len, mtu);
++
++ for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
++ urb->iso_frame_desc[i].offset = offset;
++ urb->iso_frame_desc[i].length = mtu;
++ BT_DBG("desc %d offset %d len %d", i, offset, mtu);
++ }
++ if (len && i < HCI_MAX_ISOC_FRAMES) {
++ urb->iso_frame_desc[i].offset = offset;
++ urb->iso_frame_desc[i].length = len;
++ BT_DBG("desc %d offset %d len %d", i, offset, len);
++ i++;
++ }
++ urb->number_of_packets = i;
+ }
++#endif
+
+-static int hci_usb_enable_intr(struct hci_usb *husb)
++static int hci_usb_intr_rx_submit(struct hci_usb *husb)
+ {
++ struct _urb *_urb;
+ struct urb *urb;
+- int pipe, size;
++ int err, pipe, interval, size;
+ void *buf;
+
+ BT_DBG("%s", husb->hdev.name);
+
+- if (!(urb = usb_alloc_urb(0)))
++ size = husb->intr_in_ep->wMaxPacketSize;
++
++ buf = kmalloc(size, GFP_ATOMIC);
++ if (!buf)
+ return -ENOMEM;
+
+- if (!(buf = kmalloc(HCI_MAX_EVENT_SIZE, GFP_KERNEL))) {
+- usb_free_urb(urb);
++ _urb = _urb_alloc(0, GFP_ATOMIC);
++ if (!_urb) {
++ kfree(buf);
+ return -ENOMEM;
+ }
++ _urb->type = HCI_EVENT_PKT;
++ _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
+
+- husb->intr_urb = urb;
+-
+- pipe = usb_rcvintpipe(husb->udev, husb->intr_ep);
+- size = usb_maxpacket(husb->udev, pipe, usb_pipeout(pipe));
+- FILL_INT_URB(urb, husb->udev, pipe, buf, size,
+- hci_usb_interrupt, husb, husb->intr_interval);
++ urb = &_urb->urb;
++ pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->bEndpointAddress);
++ interval = husb->intr_in_ep->bInterval;
++ FILL_INT_URB(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
+
+- return usb_submit_urb(urb);
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s intr rx submit failed urb %p err %d",
++ husb->hdev.name, urb, err);
++ _urb_unlink(_urb);
++ _urb_free(_urb);
++ kfree(buf);
++ }
++ return err;
+ }
+
+-static int hci_usb_disable_intr(struct hci_usb *husb)
++static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
+ {
+- struct urb *urb = husb->intr_urb;
+- struct sk_buff *skb;
+-
+- BT_DBG("%s", husb->hdev.name);
++ struct _urb *_urb;
++ struct urb *urb;
++ int err, pipe, size = HCI_MAX_FRAME_SIZE;
++ void *buf;
+
+- usb_unlink_urb(urb); usb_free_urb(urb);
+- husb->intr_urb = NULL;
++ buf = kmalloc(size, GFP_ATOMIC);
++ if (!buf)
++ return -ENOMEM;
+
+- skb = husb->intr_skb;
+- if (skb) {
+- husb->intr_skb = NULL;
+- kfree_skb(skb);
++ _urb = _urb_alloc(0, GFP_ATOMIC);
++ if (!_urb) {
++ kfree(buf);
++ return -ENOMEM;
+ }
++ _urb->type = HCI_ACLDATA_PKT;
++ _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
+
+- return 0;
++ urb = &_urb->urb;
++ pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->bEndpointAddress);
++ FILL_BULK_URB(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
++ urb->transfer_flags = USB_QUEUE_BULK;
++
++ BT_DBG("%s urb %p", husb->hdev.name, urb);
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s bulk rx submit failed urb %p err %d",
++ husb->hdev.name, urb, err);
++ _urb_unlink(_urb);
++ _urb_free(_urb);
++ kfree(buf);
++ }
++ return err;
+ }
+
+-static int hci_usb_rx_submit(struct hci_usb *husb, struct urb *urb)
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
+ {
+- struct hci_usb_scb *scb;
+- struct sk_buff *skb;
+- int pipe, size, err;
++ struct _urb *_urb;
++ struct urb *urb;
++ int err, mtu, size;
++ void *buf;
+
+- if (!urb && !(urb = usb_alloc_urb(0)))
+- return -ENOMEM;
++ mtu = husb->isoc_in_ep->wMaxPacketSize;
++ size = mtu * HCI_MAX_ISOC_FRAMES;
+
+- size = HCI_MAX_FRAME_SIZE;
++ buf = kmalloc(size, GFP_ATOMIC);
++ if (!buf)
++ return -ENOMEM;
+
+- if (!(skb = bluez_skb_alloc(size, GFP_ATOMIC))) {
+- usb_free_urb(urb);
++ _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
++ if (!_urb) {
++ kfree(buf);
+ return -ENOMEM;
+ }
+-
+- BT_DBG("%s urb %p", husb->hdev.name, urb);
++ _urb->type = HCI_SCODATA_PKT;
++ _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
+
+- skb->dev = (void *) &husb->hdev;
+- skb->pkt_type = HCI_ACLDATA_PKT;
++ urb = &_urb->urb;
+
+- scb = (struct hci_usb_scb *) skb->cb;
+- scb->urb = urb;
++ urb->context = husb;
++ urb->dev = husb->udev;
++ urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->bEndpointAddress);
++ urb->complete = hci_usb_rx_complete;
+
+- pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep);
++ urb->transfer_buffer_length = size;
++ urb->transfer_buffer = buf;
++ urb->transfer_flags = USB_ISO_ASAP;
+
+- FILL_BULK_URB(urb, husb->udev, pipe, skb->data, size, hci_usb_rx_complete, skb);
+- urb->transfer_flags = USB_QUEUE_BULK;
++ __fill_isoc_desc(urb, size, mtu);
++
++ BT_DBG("%s urb %p", husb->hdev.name, urb);
+
+- skb_queue_tail(&husb->pending_q, skb);
+ err = usb_submit_urb(urb);
+ if (err) {
+- BT_ERR("%s bulk rx submit failed urb %p err %d",
++ BT_ERR("%s isoc rx submit failed urb %p err %d",
+ husb->hdev.name, urb, err);
+- skb_unlink(skb);
+- usb_free_urb(urb);
++ _urb_unlink(_urb);
++ _urb_free(_urb);
++ kfree(buf);
+ }
+ return err;
+ }
++#endif
+
+ /* Initialize device */
+ static int hci_usb_open(struct hci_dev *hdev)
+@@ -212,10 +316,16 @@
+
+ write_lock_irqsave(&husb->completion_lock, flags);
+
+- err = hci_usb_enable_intr(husb);
++ err = hci_usb_intr_rx_submit(husb);
+ if (!err) {
+- for (i = 0; i < HCI_MAX_BULK_TX; i++)
+- hci_usb_rx_submit(husb, NULL);
++ for (i = 0; i < HCI_MAX_BULK_RX; i++)
++ hci_usb_bulk_rx_submit(husb);
++
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ if (husb->isoc_iface)
++ for (i = 0; i < HCI_MAX_ISOC_RX; i++)
++ hci_usb_isoc_rx_submit(husb);
++#endif
+ } else {
+ clear_bit(HCI_RUNNING, &hdev->flags);
+ MOD_DEC_USE_COUNT;
+@@ -229,29 +339,52 @@
+ static int hci_usb_flush(struct hci_dev *hdev)
+ {
+ struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
++ int i;
+
+ BT_DBG("%s", hdev->name);
+
+- skb_queue_purge(&husb->cmd_q);
+- skb_queue_purge(&husb->acl_q);
++ for (i=0; i < 4; i++)
++ skb_queue_purge(&husb->transmit_q[i]);
+ return 0;
+ }
+
+-static inline void hci_usb_unlink_urbs(struct hci_usb *husb)
++static void hci_usb_unlink_urbs(struct hci_usb *husb)
+ {
+- struct sk_buff *skb;
+- struct urb *urb;
++ int i;
+
+ BT_DBG("%s", husb->hdev.name);
+
+- while ((skb = skb_dequeue(&husb->pending_q))) {
+- urb = ((struct hci_usb_scb *) skb->cb)->urb;
+- usb_unlink_urb(urb);
+- kfree_skb(skb);
+- }
++ for (i=0; i < 4; i++) {
++ struct _urb *_urb;
++ struct urb *urb;
++
++ /* Kill pending requests */
++ while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
++ urb = &_urb->urb;
++ BT_DBG("%s unlinking _urb %p type %d urb %p",
++ husb->hdev.name, _urb, _urb->type, urb);
++ usb_unlink_urb(urb);
++ _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
++ }
++
++ /* Release completed requests */
++ while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
++ urb = &_urb->urb;
++ BT_DBG("%s freeing _urb %p type %d urb %p",
++ husb->hdev.name, _urb, _urb->type, urb);
++ if (urb->setup_packet)
++ kfree(urb->setup_packet);
++ if (urb->transfer_buffer)
++ kfree(urb->transfer_buffer);
++ _urb_free(_urb);
++ }
+
+- while ((urb = hci_usb_get_completed(husb)))
+- usb_free_urb(urb);
++ /* Release reassembly buffers */
++ if (husb->reassembly[i]) {
++ kfree_skb(husb->reassembly[i]);
++ husb->reassembly[i] = NULL;
++ }
++ }
+ }
+
+ /* Close device */
+@@ -267,7 +400,6 @@
+
+ write_lock_irqsave(&husb->completion_lock, flags);
+
+- hci_usb_disable_intr(husb);
+ hci_usb_unlink_urbs(husb);
+ hci_usb_flush(hdev);
+
+@@ -277,104 +409,157 @@
+ return 0;
+ }
+
++static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
++{
++ struct urb *urb = &_urb->urb;
++ int err;
++
++ BT_DBG("%s urb %p type %d", husb->hdev.name, urb, _urb->type);
++
++ _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s tx submit failed urb %p type %d err %d",
++ husb->hdev.name, urb, _urb->type, err);
++ _urb_unlink(_urb);
++ _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
++ } else
++ atomic_inc(__pending_tx(husb, _urb->type));
++
++ return err;
++}
++
+ static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
+ {
+- struct hci_usb_scb *scb = (void *) skb->cb;
+- struct urb *urb = hci_usb_get_completed(husb);
++ struct _urb *_urb = __get_completed(husb, skb->pkt_type);
+ struct usb_ctrlrequest *dr;
+- int pipe, err;
+-
+- if (!urb && !(urb = usb_alloc_urb(0)))
+- return -ENOMEM;
++ struct urb *urb;
+
+- if (!(dr = kmalloc(sizeof(*dr), GFP_ATOMIC))) {
+- usb_free_urb(urb);
+- return -ENOMEM;
+- }
+-
+- pipe = usb_sndctrlpipe(husb->udev, 0);
++ if (!_urb) {
++ _urb = _urb_alloc(0, GFP_ATOMIC);
++ if (!_urb)
++ return -ENOMEM;
++ _urb->type = skb->pkt_type;
++
++ dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
++ if (!dr) {
++ _urb_free(_urb);
++ return -ENOMEM;
++ }
++ } else
++ dr = (void *) _urb->urb.setup_packet;
+
+- dr->bRequestType = HCI_CTRL_REQ;
++ dr->bRequestType = husb->ctrl_req;
+ dr->bRequest = 0;
+ dr->wIndex = 0;
+ dr->wValue = 0;
+ dr->wLength = __cpu_to_le16(skb->len);
+
+- FILL_CONTROL_URB(urb, husb->udev, pipe, (void *) dr,
+- skb->data, skb->len, hci_usb_tx_complete, skb);
+-
+- BT_DBG("%s urb %p len %d", husb->hdev.name, urb, skb->len);
+-
+- scb->urb = urb;
++ urb = &_urb->urb;
++ FILL_CONTROL_URB(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
++ (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
+
+- skb_queue_tail(&husb->pending_q, skb);
+- err = usb_submit_urb(urb);
+- if (err) {
+- BT_ERR("%s ctrl tx submit failed urb %p err %d",
+- husb->hdev.name, urb, err);
+- skb_unlink(skb);
+- usb_free_urb(urb); kfree(dr);
+- }
+- return err;
++ BT_DBG("%s skb %p len %d", husb->hdev.name, skb, skb->len);
++
++ _urb->priv = skb;
++ return __tx_submit(husb, _urb);
+ }
+
+ static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
+ {
+- struct hci_usb_scb *scb = (void *) skb->cb;
+- struct urb *urb = hci_usb_get_completed(husb);
+- int pipe, err;
++ struct _urb *_urb = __get_completed(husb, skb->pkt_type);
++ struct urb *urb;
++ int pipe;
+
+- if (!urb && !(urb = usb_alloc_urb(0)))
+- return -ENOMEM;
++ if (!_urb) {
++ _urb = _urb_alloc(0, GFP_ATOMIC);
++ if (!_urb)
++ return -ENOMEM;
++ _urb->type = skb->pkt_type;
++ }
+
+- pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep);
+-
+- FILL_BULK_URB(urb, husb->udev, pipe, skb->data, skb->len,
+- hci_usb_tx_complete, skb);
++ urb = &_urb->urb;
++ pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->bEndpointAddress);
++ FILL_BULK_URB(urb, husb->udev, pipe, skb->data, skb->len,
++ hci_usb_tx_complete, husb);
+ urb->transfer_flags = USB_QUEUE_BULK | USB_ZERO_PACKET;
+
+- BT_DBG("%s urb %p len %d", husb->hdev.name, urb, skb->len);
++ BT_DBG("%s skb %p len %d", husb->hdev.name, skb, skb->len);
+
+- scb->urb = urb;
++ _urb->priv = skb;
++ return __tx_submit(husb, _urb);
++}
+
+- skb_queue_tail(&husb->pending_q, skb);
+- err = usb_submit_urb(urb);
+- if (err) {
+- BT_ERR("%s bulk tx submit failed urb %p err %d",
+- husb->hdev.name, urb, err);
+- skb_unlink(skb);
+- usb_free_urb(urb);
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
++{
++ struct _urb *_urb = __get_completed(husb, skb->pkt_type);
++ struct urb *urb;
++
++ if (!_urb) {
++ _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
++ if (!_urb)
++ return -ENOMEM;
++ _urb->type = skb->pkt_type;
+ }
+- return err;
++
++ BT_DBG("%s skb %p len %d", husb->hdev.name, skb, skb->len);
++
++ urb = &_urb->urb;
++
++ urb->context = husb;
++ urb->dev = husb->udev;
++ urb->pipe = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->bEndpointAddress);
++ urb->complete = hci_usb_tx_complete;
++ urb->transfer_flags = USB_ISO_ASAP;
++
++ urb->transfer_buffer = skb->data;
++ urb->transfer_buffer_length = skb->len;
++
++ __fill_isoc_desc(urb, skb->len, husb->isoc_out_ep->wMaxPacketSize);
++
++ _urb->priv = skb;
++ return __tx_submit(husb, _urb);
+ }
++#endif
+
+ static void hci_usb_tx_process(struct hci_usb *husb)
+ {
++ struct sk_buff_head *q;
+ struct sk_buff *skb;
+
+ BT_DBG("%s", husb->hdev.name);
+
+ do {
+ clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
++
++ /* Process command queue */
++ q = __transmit_q(husb, HCI_COMMAND_PKT);
++ if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
++ (skb = skb_dequeue(q))) {
++ if (hci_usb_send_ctrl(husb, skb) < 0)
++ skb_queue_head(q, skb);
++ }
++
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ /* Process SCO queue */
++ q = __transmit_q(husb, HCI_SCODATA_PKT);
++ if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
++ (skb = skb_dequeue(q))) {
++ if (hci_usb_send_isoc(husb, skb) < 0)
++ skb_queue_head(q, skb);
++ }
++#endif
+
+ /* Process ACL queue */
+- while (skb_queue_len(&husb->pending_q) < HCI_MAX_PENDING &&
+- (skb = skb_dequeue(&husb->acl_q))) {
++ q = __transmit_q(husb, HCI_ACLDATA_PKT);
++ while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
++ (skb = skb_dequeue(q))) {
+ if (hci_usb_send_bulk(husb, skb) < 0) {
+- skb_queue_head(&husb->acl_q, skb);
++ skb_queue_head(q, skb);
+ break;
+ }
+ }
+-
+- /* Process command queue */
+- if (!test_bit(HCI_USB_CTRL_TX, &husb->state) &&
+- (skb = skb_dequeue(&husb->cmd_q)) != NULL) {
+- set_bit(HCI_USB_CTRL_TX, &husb->state);
+- if (hci_usb_send_ctrl(husb, skb) < 0) {
+- skb_queue_head(&husb->cmd_q, skb);
+- clear_bit(HCI_USB_CTRL_TX, &husb->state);
+- }
+- }
+ } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
+ }
+
+@@ -389,7 +574,7 @@
+ }
+
+ /* Send frames from HCI layer */
+-int hci_usb_send_frame(struct sk_buff *skb)
++static int hci_usb_send_frame(struct sk_buff *skb)
+ {
+ struct hci_dev *hdev = (struct hci_dev *) skb->dev;
+ struct hci_usb *husb;
+@@ -402,204 +587,209 @@
+ if (!test_bit(HCI_RUNNING, &hdev->flags))
+ return -EBUSY;
+
+- husb = (struct hci_usb *) hdev->driver_data;
+-
+ BT_DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
+
+- read_lock(&husb->completion_lock);
++ husb = (struct hci_usb *) hdev->driver_data;
+
+ switch (skb->pkt_type) {
+ case HCI_COMMAND_PKT:
+- skb_queue_tail(&husb->cmd_q, skb);
+ hdev->stat.cmd_tx++;
+ break;
+
+ case HCI_ACLDATA_PKT:
+- skb_queue_tail(&husb->acl_q, skb);
+ hdev->stat.acl_tx++;
+ break;
+
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
+ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++#endif
++
+ default:
+ kfree_skb(skb);
+- break;
++ return 0;
+ }
++
++ read_lock(&husb->completion_lock);
++
++ skb_queue_tail(__transmit_q(husb, skb->pkt_type), skb);
+ hci_usb_tx_wakeup(husb);
+
+ read_unlock(&husb->completion_lock);
+ return 0;
+ }
+
+-static void hci_usb_interrupt(struct urb *urb)
++static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count)
+ {
+- struct hci_usb *husb = (void *) urb->context;
+- struct hci_usb_scb *scb;
+- struct sk_buff *skb;
+- hci_event_hdr *eh;
+- __u8 *data = urb->transfer_buffer;
+- int count = urb->actual_length;
+- int len = HCI_EVENT_HDR_SIZE;
++ BT_DBG("%s type %d data %p count %d", husb->hdev.name, type, data, count);
+
+- BT_DBG("%s urb %p count %d", husb->hdev.name, urb, count);
++ husb->hdev.stat.byte_rx += count;
+
+- if (!test_bit(HCI_RUNNING, &husb->hdev.flags))
+- return;
++ while (count) {
++ struct sk_buff *skb = __reassembly(husb, type);
++ struct { int expect; } *scb;
++ int len = 0;
++
++ if (!skb) {
++ /* Start of the frame */
+
+- if (urb->status || !count) {
+- BT_DBG("%s intr status %d, count %d",
+- husb->hdev.name, urb->status, count);
+- return;
+- }
++ switch (type) {
++ case HCI_EVENT_PKT:
++ if (count >= HCI_EVENT_HDR_SIZE) {
++ hci_event_hdr *h = data;
++ len = HCI_EVENT_HDR_SIZE + h->plen;
++ } else
++ return -EILSEQ;
++ break;
+
+- read_lock(&husb->completion_lock);
+-
+- husb->hdev.stat.byte_rx += count;
++ case HCI_ACLDATA_PKT:
++ if (count >= HCI_ACL_HDR_SIZE) {
++ hci_acl_hdr *h = data;
++ len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);
++ } else
++ return -EILSEQ;
++ break;
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ case HCI_SCODATA_PKT:
++ if (count >= HCI_SCO_HDR_SIZE) {
++ hci_sco_hdr *h = data;
++ len = HCI_SCO_HDR_SIZE + h->dlen;
++ } else
++ return -EILSEQ;
++ break;
++#endif
++ }
++ BT_DBG("new packet len %d", len);
+
+- if (!(skb = husb->intr_skb)) {
+- /* Start of the frame */
+- if (count < HCI_EVENT_HDR_SIZE)
+- goto bad_len;
++ skb = bluez_skb_alloc(len, GFP_ATOMIC);
++ if (!skb) {
++ BT_ERR("%s no memory for the packet", husb->hdev.name);
++ return -ENOMEM;
++ }
++ skb->dev = (void *) &husb->hdev;
++ skb->pkt_type = type;
++
++ __reassembly(husb, type) = skb;
+
+- eh = (hci_event_hdr *) data;
+- len = eh->plen + HCI_EVENT_HDR_SIZE;
++ scb = (void *) skb->cb;
++ scb->expect = len;
++ } else {
++ /* Continuation */
++ scb = (void *) skb->cb;
++ len = scb->expect;
++ }
+
+- if (count > len)
+- goto bad_len;
++ len = min(len, count);
++
++ memcpy(skb_put(skb, len), data, len);
+
+- skb = bluez_skb_alloc(len, GFP_ATOMIC);
+- if (!skb) {
+- BT_ERR("%s no memory for event packet", husb->hdev.name);
+- goto done;
++ scb->expect -= len;
++ if (!scb->expect) {
++ /* Complete frame */
++ __reassembly(husb, type) = NULL;
++ hci_recv_frame(skb);
+ }
+- scb = (void *) skb->cb;
+
+- skb->dev = (void *) &husb->hdev;
+- skb->pkt_type = HCI_EVENT_PKT;
++ count -= len; data += len;
++ }
++ return 0;
++}
++
++static void hci_usb_rx_complete(struct urb *urb)
++{
++ struct _urb *_urb = container_of(urb, struct _urb, urb);
++ struct hci_usb *husb = (void *) urb->context;
++ struct hci_dev *hdev = &husb->hdev;
++ int err, count = urb->actual_length;
++
++ BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
++ _urb->type, urb->status, count, urb->transfer_flags);
++
++ read_lock(&husb->completion_lock);
++
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
++ goto unlock;
++
++ if (urb->status || !count)
++ goto resubmit;
+
+- husb->intr_skb = skb;
+- scb->intr_len = len;
++ if (_urb->type == HCI_SCODATA_PKT) {
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ int i;
++ for (i=0; i < urb->number_of_packets; i++) {
++ BT_DBG("desc %d status %d offset %d len %d", i,
++ urb->iso_frame_desc[i].status,
++ urb->iso_frame_desc[i].offset,
++ urb->iso_frame_desc[i].actual_length);
++
++ if (!urb->iso_frame_desc[i].status)
++ __recv_frame(husb, _urb->type,
++ urb->transfer_buffer + urb->iso_frame_desc[i].offset,
++ urb->iso_frame_desc[i].actual_length);
++ }
++#else
++ ;
++#endif
+ } else {
+- /* Continuation */
+- scb = (void *) skb->cb;
+- len = scb->intr_len;
+- if (count > len) {
+- husb->intr_skb = NULL;
+- kfree_skb(skb);
+- goto bad_len;
++ err = __recv_frame(husb, _urb->type, urb->transfer_buffer, count);
++ if (err < 0) {
++ BT_ERR("%s corrupted packet: type %d count %d",
++ husb->hdev.name, _urb->type, count);
++ hdev->stat.err_rx++;
+ }
+ }
+
+- memcpy(skb_put(skb, count), data, count);
+- scb->intr_len -= count;
+-
+- if (!scb->intr_len) {
+- /* Complete frame */
+- husb->intr_skb = NULL;
+- hci_recv_frame(skb);
++resubmit:
++ if (_urb->type != HCI_EVENT_PKT) {
++ urb->dev = husb->udev;
++ err = usb_submit_urb(urb);
++ BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
++ _urb->type, err);
+ }
+
+-done:
+- read_unlock(&husb->completion_lock);
+- return;
+-
+-bad_len:
+- BT_ERR("%s bad frame len %d expected %d", husb->hdev.name, count, len);
+- husb->hdev.stat.err_rx++;
++unlock:
+ read_unlock(&husb->completion_lock);
+ }
+
+ static void hci_usb_tx_complete(struct urb *urb)
+ {
+- struct sk_buff *skb = (struct sk_buff *) urb->context;
+- struct hci_dev *hdev = (struct hci_dev *) skb->dev;
+- struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
++ struct _urb *_urb = container_of(urb, struct _urb, urb);
++ struct hci_usb *husb = (void *) urb->context;
++ struct hci_dev *hdev = &husb->hdev;
+
+- BT_DBG("%s urb %p status %d flags %x", husb->hdev.name, urb,
++ BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
+ urb->status, urb->transfer_flags);
+
+- if (urb->pipe == usb_sndctrlpipe(husb->udev, 0)) {
+- kfree(urb->setup_packet);
+- clear_bit(HCI_USB_CTRL_TX, &husb->state);
+- }
++ atomic_dec(__pending_tx(husb, _urb->type));
++
++ urb->transfer_buffer = NULL;
++ kfree_skb((struct sk_buff *) _urb->priv);
+
+ if (!test_bit(HCI_RUNNING, &hdev->flags))
+ return;
+
+- read_lock(&husb->completion_lock);
+-
+ if (!urb->status)
+- husb->hdev.stat.byte_tx += skb->len;
++ hdev->stat.byte_tx += urb->transfer_buffer_length;
+ else
+- husb->hdev.stat.err_tx++;
+-
+- skb_unlink(skb);
+- skb_queue_tail(&husb->completed_q, skb);
+- hci_usb_tx_wakeup(husb);
+-
+- read_unlock(&husb->completion_lock);
+- return;
+-}
+-
+-static void hci_usb_rx_complete(struct urb *urb)
+-{
+- struct sk_buff *skb = (struct sk_buff *) urb->context;
+- struct hci_dev *hdev = (struct hci_dev *) skb->dev;
+- struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
+- int status, count = urb->actual_length;
+- hci_acl_hdr *ah;
+- int dlen, size;
+-
+- BT_DBG("%s urb %p status %d count %d flags %x", husb->hdev.name, urb,
+- urb->status, count, urb->transfer_flags);
+-
+- if (!test_bit(HCI_RUNNING, &hdev->flags))
+- return;
++ hdev->stat.err_tx++;
+
+ read_lock(&husb->completion_lock);
+
+- if (urb->status || !count)
+- goto resubmit;
+-
+- husb->hdev.stat.byte_rx += count;
+-
+- ah = (hci_acl_hdr *) skb->data;
+- dlen = __le16_to_cpu(ah->dlen);
+- size = HCI_ACL_HDR_SIZE + dlen;
+-
+- /* Verify frame len and completeness */
+- if (count != size) {
+- BT_ERR("%s corrupted ACL packet: count %d, dlen %d",
+- husb->hdev.name, count, dlen);
+- bluez_dump("hci_usb", skb->data, count);
+- husb->hdev.stat.err_rx++;
+- goto resubmit;
+- }
+-
+- skb_unlink(skb);
+- skb_put(skb, count);
+- hci_recv_frame(skb);
+-
+- hci_usb_rx_submit(husb, urb);
++ _urb_unlink(_urb);
++ _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
+
+- read_unlock(&husb->completion_lock);
+- return;
+-
+-resubmit:
+- urb->dev = husb->udev;
+- status = usb_submit_urb(urb);
+- BT_DBG("%s URB resubmit status %d", husb->hdev.name, status);
++ hci_usb_tx_wakeup(husb);
++
+ read_unlock(&husb->completion_lock);
+ }
+
+ static void hci_usb_destruct(struct hci_dev *hdev)
+ {
+- struct hci_usb *husb;
+-
+- if (!hdev) return;
++ struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
+
+ BT_DBG("%s", hdev->name);
+
+- husb = (struct hci_usb *) hdev->driver_data;
+ kfree(husb);
+ }
+
+@@ -621,8 +811,14 @@
+
+ iface = &udev->actconfig->interface[0];
+
+- /* Check our black list */
+- if (usb_match_id(udev, iface, ignore_ids))
++ if (!id->driver_info) {
++ const struct usb_device_id *match;
++ match = usb_match_id(udev, iface, blacklist_ids);
++ if (match)
++ id = match;
++ }
++
++ if (id->driver_info & HCI_IGNORE)
+ return NULL;
+
+ /* Check number of endpoints */
+@@ -662,8 +858,9 @@
+ bulk_out_ep[i] = ep;
+ break;
+
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
+ case USB_ENDPOINT_XFER_ISOC:
+- if (ep->wMaxPacketSize < size)
++ if (ep->wMaxPacketSize < size || a > 2)
+ break;
+ size = ep->wMaxPacketSize;
+
+@@ -676,6 +873,7 @@
+ else
+ isoc_out_ep[i] = ep;
+ break;
++#endif
+ }
+ }
+ }
+@@ -686,10 +884,12 @@
+ goto done;
+ }
+
+- if (!isoc_in_ep[1] || !isoc_out_ep[1]) {
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ if (id->driver_info & HCI_BROKEN_ISOC || !isoc_in_ep[1] || !isoc_out_ep[1]) {
+ BT_DBG("Isoc endpoints not found");
+ isoc_iface = NULL;
+ }
++#endif
+
+ if (!(husb = kmalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
+ BT_ERR("Can't allocate: control structure");
+@@ -699,35 +899,41 @@
+ memset(husb, 0, sizeof(struct hci_usb));
+
+ husb->udev = udev;
+- husb->bulk_out_ep = bulk_out_ep[0]->bEndpointAddress;
+- husb->bulk_in_ep = bulk_in_ep[0]->bEndpointAddress;
++ husb->bulk_out_ep = bulk_out_ep[0];
++ husb->bulk_in_ep = bulk_in_ep[0];
++ husb->intr_in_ep = intr_in_ep[0];
+
+- husb->intr_ep = intr_in_ep[0]->bEndpointAddress;
+- husb->intr_interval = intr_in_ep[0]->bInterval;
++ if (id->driver_info & HCI_DIGIANSWER)
++ husb->ctrl_req = HCI_DIGI_REQ;
++ else
++ husb->ctrl_req = HCI_CTRL_REQ;
+
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
+ if (isoc_iface) {
++ BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
+ if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
+ BT_ERR("Can't set isoc interface settings");
+ isoc_iface = NULL;
+ }
+ usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb);
+ husb->isoc_iface = isoc_iface;
+-
+- husb->isoc_in_ep = isoc_in_ep[1]->bEndpointAddress;
+- husb->isoc_out_ep = isoc_in_ep[1]->bEndpointAddress;
++ husb->isoc_in_ep = isoc_in_ep[isoc_ifnum];
++ husb->isoc_out_ep = isoc_out_ep[isoc_ifnum];
+ }
+-
+- husb->completion_lock = RW_LOCK_UNLOCKED;
++#endif
+
+- skb_queue_head_init(&husb->acl_q);
+- skb_queue_head_init(&husb->cmd_q);
+- skb_queue_head_init(&husb->pending_q);
+- skb_queue_head_init(&husb->completed_q);
++ husb->completion_lock = RW_LOCK_UNLOCKED;
++
++ for (i = 0; i < 4; i++) {
++ skb_queue_head_init(&husb->transmit_q[i]);
++ _urb_queue_init(&husb->pending_q[i]);
++ _urb_queue_init(&husb->completed_q[i]);
++ }
+
+ /* Initialize and register HCI device */
+ hdev = &husb->hdev;
+
+- hdev->type = HCI_USB;
++ hdev->type = HCI_USB;
+ hdev->driver_data = husb;
+
+ hdev->open = hci_usb_open;
+@@ -736,6 +942,9 @@
+ hdev->send = hci_usb_send_frame;
+ hdev->destruct = hci_usb_destruct;
+
++ if (id->driver_info & HCI_RESET)
++ set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
++
+ if (hci_register_dev(hdev) < 0) {
+ BT_ERR("Can't register HCI device");
+ goto probe_error;
+@@ -798,6 +1007,6 @@
+ module_init(hci_usb_init);
+ module_exit(hci_usb_cleanup);
+
+-MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
++MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
+ MODULE_DESCRIPTION("BlueZ HCI USB driver ver " VERSION);
+ MODULE_LICENSE("GPL");
+diff -Nur c3000_pre/linux/drivers/bluetooth/hci_usb.h c3000_work/linux/drivers/bluetooth/hci_usb.h
+--- c3000_pre/linux/drivers/bluetooth/hci_usb.h 2004-08-21 09:48:24.000000000 +0900
++++ c3000_work/linux/drivers/bluetooth/hci_usb.h 2004-12-16 23:01:14.000000000 +0900
+@@ -1,9 +1,10 @@
+ /*
+- BlueZ - Bluetooth protocol stack for Linux
++ HCI USB driver for Linux Bluetooth protocol stack (BlueZ)
+ Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+
++ Copyright (C) 2003 Maxim Krasnyansky <maxk@qualcomm.com>
++
+ 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;
+@@ -34,46 +35,113 @@
+ #define HCI_DEV_PROTOCOL 0x01 /* Bluetooth programming protocol */
+
+ #define HCI_CTRL_REQ 0x20
++#define HCI_DIGI_REQ 0x40
++
++#define HCI_IGNORE 0x01
++#define HCI_RESET 0x02
++#define HCI_DIGIANSWER 0x04
++#define HCI_BROKEN_ISOC 0x08
+
+ #define HCI_MAX_IFACE_NUM 3
+
+ #define HCI_MAX_BULK_TX 4
+ #define HCI_MAX_BULK_RX 1
+
++#define HCI_MAX_ISOC_RX 2
++#define HCI_MAX_ISOC_TX 2
++
++#define HCI_MAX_ISOC_FRAMES 10
++
++struct _urb_queue {
++ struct list_head head;
++ spinlock_t lock;
++};
++
++struct _urb {
++ struct list_head list;
++ struct _urb_queue *queue;
++ int type;
++ void *priv;
++ struct urb urb;
++};
++
++struct _urb *_urb_alloc(int isoc, int gfp);
++
++static inline void _urb_free(struct _urb *_urb)
++{
++ kfree(_urb);
++}
++
++static inline void _urb_queue_init(struct _urb_queue *q)
++{
++ INIT_LIST_HEAD(&q->head);
++ spin_lock_init(&q->lock);
++}
++
++static inline void _urb_queue_head(struct _urb_queue *q, struct _urb *_urb)
++{
++ unsigned long flags;
++ spin_lock_irqsave(&q->lock, flags);
++ list_add(&_urb->list, &q->head); _urb->queue = q;
++ spin_unlock_irqrestore(&q->lock, flags);
++}
++
++static inline void _urb_queue_tail(struct _urb_queue *q, struct _urb *_urb)
++{
++ unsigned long flags;
++ spin_lock_irqsave(&q->lock, flags);
++ list_add_tail(&_urb->list, &q->head); _urb->queue = q;
++ spin_unlock_irqrestore(&q->lock, flags);
++}
++
++static inline void _urb_unlink(struct _urb *_urb)
++{
++ struct _urb_queue *q = _urb->queue;
++ unsigned long flags;
++ if (q) {
++ spin_lock_irqsave(&q->lock, flags);
++ list_del(&_urb->list); _urb->queue = NULL;
++ spin_unlock_irqrestore(&q->lock, flags);
++ }
++}
++
++struct _urb *_urb_dequeue(struct _urb_queue *q);
++
++#ifndef container_of
++#define container_of(ptr, type, member) ({ \
++ const typeof( ((type *)0)->member ) *__mptr = (ptr); \
++ (type *)( (char *)__mptr - offsetof(type,member) );})
++#endif
++
+ struct hci_usb {
+ struct hci_dev hdev;
+
+ unsigned long state;
+
+ struct usb_device *udev;
+- struct usb_interface *isoc_iface;
+
+- __u8 bulk_out_ep;
+- __u8 bulk_in_ep;
+- __u8 isoc_out_ep;
+- __u8 isoc_in_ep;
+-
+- __u8 intr_ep;
+- __u8 intr_interval;
+- struct urb *intr_urb;
+- struct sk_buff * intr_skb;
++ struct usb_endpoint_descriptor *bulk_in_ep;
++ struct usb_endpoint_descriptor *bulk_out_ep;
++ struct usb_endpoint_descriptor *intr_in_ep;
++
++ struct usb_interface *isoc_iface;
++ struct usb_endpoint_descriptor *isoc_out_ep;
++ struct usb_endpoint_descriptor *isoc_in_ep;
++
++ __u8 ctrl_req;
++
++ struct sk_buff_head transmit_q[4];
++ struct sk_buff *reassembly[4]; // Reassembly buffers
+
+ rwlock_t completion_lock;
+-
+- struct sk_buff_head cmd_q; // TX Commands
+- struct sk_buff_head acl_q; // TX ACLs
+- struct sk_buff_head pending_q; // Pending requests
+- struct sk_buff_head completed_q; // Completed requests
+-};
+
+-struct hci_usb_scb {
+- struct urb *urb;
+- int intr_len;
++ atomic_t pending_tx[4]; // Number of pending requests
++ struct _urb_queue pending_q[4]; // Pending requests
++ struct _urb_queue completed_q[4]; // Completed requests
+ };
+
+ /* States */
+ #define HCI_USB_TX_PROCESS 1
+ #define HCI_USB_TX_WAKEUP 2
+-#define HCI_USB_CTRL_TX 3
+
+ #endif /* __KERNEL__ */
+diff -Nur c3000_pre/linux/drivers/char/pcmcia/serial_cs.c c3000_work/linux/drivers/char/pcmcia/serial_cs.c
+--- c3000_pre/linux/drivers/char/pcmcia/serial_cs.c 2004-08-21 09:48:33.000000000 +0900
++++ c3000_work/linux/drivers/char/pcmcia/serial_cs.c 2004-12-16 23:01:14.000000000 +0900
+@@ -2,7 +2,7 @@
+
+ A driver for PCMCIA serial devices
+
+- serial_cs.c 1.128 2001/10/18 12:18:35
++ serial_cs.c 1.138 2002/10/25 06:24:52
+
+ The contents of this file are subject to the Mozilla Public
+ License Version 1.1 (the "License"); you may not use this file
+@@ -72,14 +72,14 @@
+ static int irq_list[4] = { -1 };
+ MODULE_PARM(irq_list, "1-4i");
+
+-/* Enable the speaker? */
+-INT_MODULE_PARM(do_sound, 1);
++INT_MODULE_PARM(do_sound, 1); /* Enable the speaker? */
++INT_MODULE_PARM(buggy_uart, 0); /* Skip strict UART tests? */
+
+ #ifdef PCMCIA_DEBUG
+ INT_MODULE_PARM(pc_debug, PCMCIA_DEBUG);
+ #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
+ static char *version =
+-"serial_cs.c 1.128 2001/10/18 12:18:35 (David Hinds)";
++"serial_cs.c 1.138 2002/10/25 06:24:52 (David Hinds)";
+ #else
+ #define DEBUG(n, args...)
+ #endif
+@@ -98,6 +98,7 @@
+ { MANFID_OMEGA, PRODID_OMEGA_QSP_100, 4 },
+ { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS232, 2 },
+ { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS232_D1, 2 },
++ { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS232_D2, 2 },
+ { MANFID_QUATECH, PRODID_QUATECH_QUAD_RS232, 4 },
+ { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS422, 2 },
+ { MANFID_QUATECH, PRODID_QUATECH_QUAD_RS422, 4 },
+@@ -151,7 +152,7 @@
+ client_reg_t client_reg;
+ dev_link_t *link;
+ int i, ret;
+-
++
+ DEBUG(0, "serial_attach()\n");
+
+ /* Create new serial device */
+@@ -163,7 +164,7 @@
+ link->release.function = &serial_release;
+ link->release.data = (u_long)link;
+ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
+- link->io.NumPorts1 = 8;
++ link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
+ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
+ link->irq.IRQInfo1 = IRQ_INFO2_VALID|IRQ_LEVEL_ID;
+ if (irq_list[0] == -1)
+@@ -172,13 +173,12 @@
+ for (i = 0; i < 4; i++)
+ link->irq.IRQInfo2 |= 1 << irq_list[i];
+ link->conf.Attributes = CONF_ENABLE_IRQ;
+- link->conf.Vcc = 50;
+ if (do_sound) {
+ link->conf.Attributes |= CONF_ENABLE_SPKR;
+ link->conf.Status = CCSR_AUDIO_ENA;
+ }
+ link->conf.IntType = INT_MEMORY_AND_IO;
+-
++
+ /* Register with Card Services */
+ link->next = dev_list;
+ dev_list = link;
+@@ -197,7 +197,7 @@
+ serial_detach(link);
+ return NULL;
+ }
+-
++
+ return link;
+ } /* serial_attach */
+
+@@ -217,7 +217,7 @@
+ int ret;
+
+ DEBUG(0, "serial_detach(0x%p)\n", link);
+-
++
+ /* Locate device structure */
+ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
+ if (*linkp == link) break;
+@@ -227,17 +227,17 @@
+ del_timer(&link->release);
+ if (link->state & DEV_CONFIG)
+ serial_release((u_long)link);
+-
++
+ if (link->handle) {
+ ret = CardServices(DeregisterClient, link->handle);
+ if (ret != CS_SUCCESS)
+ cs_error(link->handle, DeregisterClient, ret);
+ }
+-
++
+ /* Unlink device structure, free bits */
+ *linkp = link->next;
+ kfree(info);
+-
++
+ } /* serial_detach */
+
+ /*====================================================================*/
+@@ -257,6 +257,8 @@
+ #endif
+ serial.irq = irq;
+ serial.flags = ASYNC_SKIP_TEST | ASYNC_SHARE_IRQ;
++ if (buggy_uart)
++ serial.flags |= ASYNC_BUGGY_UART;
+ line = register_serial(&serial);
+ if (line < 0) {
+ printk(KERN_NOTICE "serial_cs: register_serial() at 0x%04lx,"
+@@ -271,7 +273,7 @@
+ if (info->ndev > 0)
+ info->node[info->ndev-1].next = &info->node[info->ndev];
+ info->ndev++;
+-
++
+ return 0;
+ }
+
+@@ -322,7 +324,10 @@
+ return setup_serial(info, port, config.AssignedIRQ);
+ }
+ link->conf.Vcc = config.Vcc;
+-
++
++ link->io.NumPorts1 = 8;
++ link->io.NumPorts2 = 0;
++
+ /* First pass: look for a config entry that looks normal. */
+ tuple.TupleData = (cisdata_t *)buf;
+ tuple.TupleOffset = 0; tuple.TupleDataMax = 255;
+@@ -349,7 +354,7 @@
+ i = next_tuple(handle, &tuple, &parse);
+ }
+ }
+-
++
+ /* Second pass: try to find an entry that isn't picky about
+ its base address, then try to grab any standard serial port
+ address, and finally try to get any free port. */
+@@ -361,8 +366,7 @@
+ for (j = 0; j < 5; j++) {
+ link->io.BasePort1 = base[j];
+ link->io.IOAddrLines = base[j] ? 16 : 3;
+- i = CardServices(RequestIO, link->handle,
+- &link->io);
++ i = CardServices(RequestIO, link->handle, &link->io);
+ if (i == CS_SUCCESS) goto found_port;
+ }
+ }
+@@ -374,7 +378,7 @@
+ cs_error(link->handle, RequestIO, i);
+ return -1;
+ }
+-
++
+ i = CardServices(RequestIRQ, link->handle, &link->irq);
+ if (i != CS_SUCCESS) {
+ cs_error(link->handle, RequestIRQ, i);
+@@ -399,8 +403,12 @@
+ u_char buf[256];
+ cisparse_t parse;
+ cistpl_cftable_entry_t *cf = &parse.cftable_entry;
++ config_info_t config;
+ int i, base2 = 0;
+
++ CardServices(GetConfigurationInfo, handle, &config);
++ link->conf.Vcc = config.Vcc;
++
+ tuple.TupleData = (cisdata_t *)buf;
+ tuple.TupleOffset = 0; tuple.TupleDataMax = 255;
+ tuple.Attributes = 0;
+@@ -442,12 +450,12 @@
+ i = next_tuple(handle, &tuple, &parse);
+ }
+ }
+-
++
+ if (i != CS_SUCCESS) {
+- cs_error(link->handle, RequestIO, i);
+- return -1;
++ /* At worst, try to configure as a single port */
++ return simple_config(link);
+ }
+-
++
+ i = CardServices(RequestIRQ, link->handle, &link->irq);
+ if (i != CS_SUCCESS) {
+ cs_error(link->handle, RequestIRQ, i);
+@@ -463,14 +471,27 @@
+ cs_error(link->handle, RequestConfiguration, i);
+ return -1;
+ }
+-
++
++ /* The Oxford Semiconductor OXCF950 cards are in fact single-port:
++ 8 registers are for the UART, the others are extra registers */
++ if (info->manfid == MANFID_OXSEMI) {
++ if (cf->index == 1 || cf->index == 3) {
++ setup_serial(info, base2, link->irq.AssignedIRQ);
++ outb(12,link->io.BasePort1+1);
++ } else {
++ setup_serial(info, link->io.BasePort1, link->irq.AssignedIRQ);
++ outb(12,base2+1);
++ }
++ return 0;
++ }
++
+ setup_serial(info, link->io.BasePort1, link->irq.AssignedIRQ);
+ /* The Nokia cards are not really multiport cards */
+ if (info->manfid == MANFID_NOKIA)
+ return 0;
+ for (i = 0; i < info->multi-1; i++)
+ setup_serial(info, base2+(8*i), link->irq.AssignedIRQ);
+-
++
+ return 0;
+ }
+
+@@ -531,7 +552,7 @@
+ }
+ link->conf.ConfigBase = parse.config.base;
+ link->conf.Present = parse.config.rmask[0];
+-
++
+ /* Configure card */
+ link->state |= DEV_CONFIG;
+
+@@ -539,8 +560,8 @@
+ tuple.DesiredTuple = CISTPL_LONGLINK_MFC;
+ tuple.Attributes = TUPLE_RETURN_COMMON | TUPLE_RETURN_LINK;
+ info->multi = (first_tuple(handle, &tuple, &parse) == CS_SUCCESS);
+-
+- /* Is this a multiport card? */
++
++ /* Scan list of known multiport card ID's */
+ tuple.DesiredTuple = CISTPL_MANFID;
+ if (first_tuple(handle, &tuple, &parse) == CS_SUCCESS) {
+ info->manfid = le16_to_cpu(buf[0]);
+@@ -595,15 +616,15 @@
+ }
+ #endif
+ }
+-
++
+ if (info->multi > 1)
+ multi_config(link);
+ else
+ simple_config(link);
+-
++
+ if (info->ndev == 0)
+ goto failed;
+-
++
+ if (info->manfid == MANFID_IBM) {
+ conf_reg_t reg = { 0, CS_READ, 0x800, 0 };
+ CS_CHECK(AccessConfigurationRegister, link->handle, &reg);
+@@ -620,6 +641,7 @@
+ cs_error(link->handle, last_fn, last_ret);
+ failed:
+ serial_release((u_long)link);
++ link->state &= ~DEV_CONFIG_PENDING;
+
+ } /* serial_config */
+
+@@ -627,7 +649,7 @@
+
+ After a card is removed, serial_release() will unregister the net
+ device, and release the PCMCIA configuration.
+-
++
+ ======================================================================*/
+
+ void serial_release(u_long arg)
+@@ -635,7 +657,7 @@
+ dev_link_t *link = (dev_link_t *)arg;
+ serial_info_t *info = link->priv;
+ int i;
+-
++
+ DEBUG(0, "serial_release(0x%p)\n", link);
+
+ for (i = 0; i < info->ndev; i++) {
+@@ -648,7 +670,7 @@
+ CardServices(ReleaseIO, link->handle, &link->io);
+ CardServices(ReleaseIRQ, link->handle, &link->irq);
+ }
+-
++
+ link->state &= ~DEV_CONFIG;
+
+ } /* serial_release */
+@@ -659,7 +681,7 @@
+ stuff to run after an event is received. A CARD_REMOVAL event
+ also sets some flags to discourage the serial drivers from
+ talking to the ports.
+-
++
+ ======================================================================*/
+
+ static int serial_event(event_t event, int priority,
+@@ -667,9 +689,9 @@
+ {
+ dev_link_t *link = args->client_data;
+ serial_info_t *info = link->priv;
+-
++
+ DEBUG(1, "serial_event(0x%06x)\n", event);
+-
++
+ switch (event) {
+ case CS_EVENT_CARD_REMOVAL:
+ link->state &= ~DEV_PRESENT;
+@@ -714,7 +736,7 @@
+ if (serv.Revision != CS_RELEASE_CODE) {
+ printk(KERN_NOTICE "serial_cs: Card Services release "
+ "does not match!\n");
+- return -1;
++ return -EINVAL;
+ }
+ register_pccard_driver(&dev_info, &serial_attach, &serial_detach);
+ return 0;
+diff -Nur c3000_pre/linux/drivers/char/serial.c c3000_work/linux/drivers/char/serial.c
+--- c3000_pre/linux/drivers/char/serial.c 2004-08-21 09:48:26.000000000 +0900
++++ c3000_work/linux/drivers/char/serial.c 2004-12-16 23:01:14.000000000 +0900
+@@ -961,10 +961,15 @@
+ if (status & UART_LSR_DR)
+ receive_chars(info, &status, regs);
+ check_modem_status(info);
++#ifdef CONFIG_MELAN
+ if ((status & UART_LSR_THRE) ||
+ /* for buggy ELAN processors */
+ ((iir & UART_IIR_ID) == UART_IIR_THRI))
+ transmit_chars(info, 0);
++#else
++ if (status & UART_LSR_THRE)
++ transmit_chars(info, 0);
++#endif
+
+ next:
+ info = info->next_port;
+diff -Nur c3000_pre/linux/drivers/input/Config.in c3000_work/linux/drivers/input/Config.in
+--- c3000_pre/linux/drivers/input/Config.in 2004-08-21 09:48:34.000000000 +0900
++++ c3000_work/linux/drivers/input/Config.in 2004-12-16 23:01:14.000000000 +0900
+@@ -14,5 +14,6 @@
+ fi
+ dep_tristate ' Joystick support' CONFIG_INPUT_JOYDEV $CONFIG_INPUT
+ dep_tristate ' Event interface support' CONFIG_INPUT_EVDEV $CONFIG_INPUT
++dep_tristate ' User level driver support' CONFIG_INPUT_UINPUT $CONFIG_INPUT
+
+ endmenu
+diff -Nur c3000_pre/linux/drivers/input/Makefile c3000_work/linux/drivers/input/Makefile
+--- c3000_pre/linux/drivers/input/Makefile 2004-08-21 09:48:34.000000000 +0900
++++ c3000_work/linux/drivers/input/Makefile 2004-12-16 23:01:14.000000000 +0900
+@@ -24,6 +24,7 @@
+ obj-$(CONFIG_INPUT_MOUSEDEV) += mousedev.o
+ obj-$(CONFIG_INPUT_JOYDEV) += joydev.o
+ obj-$(CONFIG_INPUT_EVDEV) += evdev.o
++obj-$(CONFIG_INPUT_UINPUT) += uinput.o
+
+ # The global Rules.make.
+
+diff -Nur c3000_pre/linux/drivers/input/keybdev.c c3000_work/linux/drivers/input/keybdev.c
+--- c3000_pre/linux/drivers/input/keybdev.c 2004-08-21 09:48:34.000000000 +0900
++++ c3000_work/linux/drivers/input/keybdev.c 2004-12-16 23:01:14.000000000 +0900
+@@ -166,16 +166,18 @@
+
+ static struct input_handler keybdev_handler;
+
++static unsigned int ledstate = 0xff;
++
+ void keybdev_ledfunc(unsigned int led)
+ {
+ struct input_handle *handle;
+
+- for (handle = keybdev_handler.handle; handle; handle = handle->hnext) {
++ ledstate = led;
+
++ for (handle = keybdev_handler.handle; handle; handle = handle->hnext) {
+ input_event(handle->dev, EV_LED, LED_SCROLLL, !!(led & 0x01));
+ input_event(handle->dev, EV_LED, LED_NUML, !!(led & 0x02));
+ input_event(handle->dev, EV_LED, LED_CAPSL, !!(led & 0x04));
+-
+ }
+ }
+
+@@ -214,6 +216,12 @@
+
+ // printk(KERN_INFO "keybdev.c: Adding keyboard: input%d\n", dev->number);
+
++ if (ledstate != 0xff) {
++ input_event(dev, EV_LED, LED_SCROLLL, !!(ledstate & 0x01));
++ input_event(dev, EV_LED, LED_NUML, !!(ledstate & 0x02));
++ input_event(dev, EV_LED, LED_CAPSL, !!(ledstate & 0x04));
++ }
++
+ return handle;
+ }
+
+diff -Nur c3000_pre/linux/drivers/input/uinput.c c3000_work/linux/drivers/input/uinput.c
+--- c3000_pre/linux/drivers/input/uinput.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/drivers/input/uinput.c 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,428 @@
++/*
++ * User level driver support for input subsystem
++ *
++ * Heavily based on evdev.c by Vojtech Pavlik
++ *
++ * 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
++ *
++ * Author: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>
++ *
++ * Changes/Revisions:
++ * 0.1 20/06/2002
++ * - first public version
++ */
++
++#include <linux/poll.h>
++#include <linux/slab.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/input.h>
++#include <linux/smp_lock.h>
++#include <linux/fs.h>
++#include <linux/miscdevice.h>
++#include <linux/uinput.h>
++
++static int uinput_dev_open(struct input_dev *dev)
++{
++ return 0;
++}
++
++static void uinput_dev_close(struct input_dev *dev)
++{
++}
++
++static int uinput_dev_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
++{
++ struct uinput_device *udev;
++
++ udev = (struct uinput_device *)dev->private;
++
++ udev->buff[udev->head].type = type;
++ udev->buff[udev->head].code = code;
++ udev->buff[udev->head].value = value;
++ do_gettimeofday(&udev->buff[udev->head].time);
++ udev->head = (udev->head + 1) % UINPUT_BUFFER_SIZE;
++
++ wake_up_interruptible(&udev->waitq);
++
++ return 0;
++}
++
++static int uinput_dev_upload_effect(struct input_dev *dev, struct ff_effect *effect)
++{
++ return 0;
++}
++
++static int uinput_dev_erase_effect(struct input_dev *dev, int effect_id)
++{
++ return 0;
++}
++
++static int uinput_create_device(struct uinput_device *udev)
++{
++ if (!udev->dev->name) {
++ printk(KERN_DEBUG "%s: write device info first\n", UINPUT_NAME);
++ return -EINVAL;
++ }
++
++ udev->dev->open = uinput_dev_open;
++ udev->dev->close = uinput_dev_close;
++ udev->dev->event = uinput_dev_event;
++ udev->dev->upload_effect = uinput_dev_upload_effect;
++ udev->dev->erase_effect = uinput_dev_erase_effect;
++ udev->dev->private = udev;
++
++ init_waitqueue_head(&(udev->waitq));
++
++ input_register_device(udev->dev);
++
++ set_bit(UIST_CREATED, &(udev->state));
++
++ return 0;
++}
++
++static int uinput_destroy_device(struct uinput_device *udev)
++{
++ if (!test_bit(UIST_CREATED, &(udev->state))) {
++ printk(KERN_WARNING "%s: create the device first\n", UINPUT_NAME);
++ return -EINVAL;
++ }
++
++ input_unregister_device(udev->dev);
++
++ clear_bit(UIST_CREATED, &(udev->state));
++
++ return 0;
++}
++
++static int uinput_open(struct inode *inode, struct file *file)
++{
++ struct uinput_device *newdev;
++ struct input_dev *newinput;
++
++ newdev = kmalloc(sizeof(struct uinput_device), GFP_KERNEL);
++ if (!newdev)
++ goto error;
++ memset(newdev, 0, sizeof(struct uinput_device));
++
++ newinput = kmalloc(sizeof(struct input_dev), GFP_KERNEL);
++ if (!newinput)
++ goto cleanup;
++ memset(newinput, 0, sizeof(struct input_dev));
++
++ newdev->dev = newinput;
++
++ file->private_data = newdev;
++
++ return 0;
++cleanup:
++ kfree(newdev);
++error:
++ return -ENOMEM;
++}
++
++static int uinput_validate_absbits(struct input_dev *dev)
++{
++ unsigned int cnt;
++ int retval = 0;
++
++ for (cnt = 0; cnt < ABS_MAX; cnt++) {
++ if (!test_bit(cnt, dev->absbit))
++ continue;
++
++ if (/*!dev->absmin[cnt] || !dev->absmax[cnt] || */
++ (dev->absmax[cnt] <= dev->absmin[cnt])) {
++ printk(KERN_DEBUG
++ "%s: invalid abs[%02x] min:%d max:%d\n",
++ UINPUT_NAME, cnt,
++ dev->absmin[cnt], dev->absmax[cnt]);
++ retval = -EINVAL;
++ break;
++ }
++
++ if ((dev->absflat[cnt] < dev->absmin[cnt]) ||
++ (dev->absflat[cnt] > dev->absmax[cnt])) {
++ printk(KERN_DEBUG
++ "%s: absflat[%02x] out of range: %d "
++ "(min:%d/max:%d)\n",
++ UINPUT_NAME, cnt, dev->absflat[cnt],
++ dev->absmin[cnt], dev->absmax[cnt]);
++ retval = -EINVAL;
++ break;
++ }
++ }
++ return retval;
++}
++
++static int uinput_alloc_device(struct file *file, const char *buffer, size_t count)
++{
++ struct uinput_user_dev *user_dev;
++ struct input_dev *dev;
++ struct uinput_device *udev;
++ int size,
++ retval;
++
++ retval = count;
++
++ udev = (struct uinput_device *)file->private_data;
++ dev = udev->dev;
++
++ user_dev = kmalloc(sizeof(*user_dev), GFP_KERNEL);
++ if (!user_dev) {
++ retval = -ENOMEM;
++ goto exit;
++ }
++
++ if (copy_from_user(user_dev, buffer, sizeof(struct uinput_user_dev))) {
++ retval = -EFAULT;
++ goto exit;
++ }
++
++ if (NULL != dev->name)
++ kfree(dev->name);
++
++ size = strnlen(user_dev->name, UINPUT_MAX_NAME_SIZE) + 1;
++ dev->name = kmalloc(size, GFP_KERNEL);
++ if (!dev->name) {
++ retval = -ENOMEM;
++ goto exit;
++ }
++
++ strncpy(dev->name, user_dev->name, size);
++ dev->idbus = user_dev->idbus;
++ dev->idvendor = user_dev->idvendor;
++ dev->idproduct = user_dev->idproduct;
++ dev->idversion = user_dev->idversion;
++ dev->ff_effects_max = user_dev->ff_effects_max;
++
++ size = sizeof(int) * (ABS_MAX + 1);
++ memcpy(dev->absmax, user_dev->absmax, size);
++ memcpy(dev->absmin, user_dev->absmin, size);
++ memcpy(dev->absfuzz, user_dev->absfuzz, size);
++ memcpy(dev->absflat, user_dev->absflat, size);
++
++ /* check if absmin/absmax/absfuzz/absflat are filled as
++ * told in Documentation/input/input-programming.txt */
++ if (test_bit(EV_ABS, dev->evbit)) {
++ retval = uinput_validate_absbits(dev);
++ if (retval < 0)
++ kfree(dev->name);
++ }
++
++exit:
++ kfree(user_dev);
++ return retval;
++}
++
++static ssize_t uinput_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
++{
++ struct uinput_device *udev = file->private_data;
++
++ if (test_bit(UIST_CREATED, &(udev->state))) {
++ struct input_event ev;
++
++ if (copy_from_user(&ev, buffer, sizeof(struct input_event)))
++ return -EFAULT;
++ input_event(udev->dev, ev.type, ev.code, ev.value);
++ }
++ else
++ count = uinput_alloc_device(file, buffer, count);
++
++ return count;
++}
++
++static ssize_t uinput_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
++{
++ struct uinput_device *udev = file->private_data;
++ int retval = 0;
++
++ if (!test_bit(UIST_CREATED, &(udev->state)))
++ return -ENODEV;
++
++ if ((udev->head == udev->tail) && (file->f_flags & O_NONBLOCK))
++ return -EAGAIN;
++
++ retval = wait_event_interruptible(udev->waitq,
++ (udev->head != udev->tail) ||
++ !test_bit(UIST_CREATED, &(udev->state)));
++
++ if (retval)
++ return retval;
++
++ if (!test_bit(UIST_CREATED, &(udev->state)))
++ return -ENODEV;
++
++ while ((udev->head != udev->tail) &&
++ (retval + sizeof(struct input_event) <= count)) {
++ if (copy_to_user(buffer + retval, &(udev->buff[udev->tail]),
++ sizeof(struct input_event))) return -EFAULT;
++ udev->tail = (udev->tail + 1) % UINPUT_BUFFER_SIZE;
++ retval += sizeof(struct input_event);
++ }
++
++ return retval;
++}
++
++static unsigned int uinput_poll(struct file *file, poll_table *wait)
++{
++ struct uinput_device *udev = file->private_data;
++
++ poll_wait(file, &udev->waitq, wait);
++
++ if (udev->head != udev->tail)
++ return POLLIN | POLLRDNORM;
++
++ return 0;
++}
++
++static int uinput_burn_device(struct uinput_device *udev)
++{
++ if (test_bit(UIST_CREATED, &(udev->state)))
++ uinput_destroy_device(udev);
++
++ kfree(udev->dev);
++ kfree(udev);
++
++ return 0;
++}
++
++static int uinput_close(struct inode *inode, struct file *file)
++{
++ return uinput_burn_device((struct uinput_device *)file->private_data);
++}
++
++static int uinput_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
++{
++ int retval = 0;
++ struct uinput_device *udev;
++
++ udev = (struct uinput_device *)file->private_data;
++
++ /* device attributes can not be changed after the device is created */
++ if (cmd >= UI_SET_EVBIT && test_bit(UIST_CREATED, &(udev->state)))
++ return -EINVAL;
++
++ switch (cmd) {
++ case UI_DEV_CREATE:
++ retval = uinput_create_device(udev);
++ break;
++
++ case UI_DEV_DESTROY:
++ retval = uinput_destroy_device(udev);
++ break;
++
++ case UI_SET_EVBIT:
++ if (arg > EV_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->evbit);
++ break;
++
++ case UI_SET_KEYBIT:
++ if (arg > KEY_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->keybit);
++ break;
++
++ case UI_SET_RELBIT:
++ if (arg > REL_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->relbit);
++ break;
++
++ case UI_SET_ABSBIT:
++ if (arg > ABS_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->absbit);
++ break;
++
++ case UI_SET_MSCBIT:
++ if (arg > MSC_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->mscbit);
++ break;
++
++ case UI_SET_LEDBIT:
++ if (arg > LED_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->ledbit);
++ break;
++
++ case UI_SET_SNDBIT:
++ if (arg > SND_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->sndbit);
++ break;
++
++ case UI_SET_FFBIT:
++ if (arg > FF_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->ffbit);
++ break;
++
++ default:
++ retval = -EFAULT;
++ }
++ return retval;
++}
++
++struct file_operations uinput_fops = {
++ owner: THIS_MODULE,
++ open: uinput_open,
++ release: uinput_close,
++ read: uinput_read,
++ write: uinput_write,
++ poll: uinput_poll,
++ ioctl: uinput_ioctl,
++};
++
++static struct miscdevice uinput_misc = {
++ fops: &uinput_fops,
++ minor: UINPUT_MINOR,
++ name: UINPUT_NAME,
++};
++
++static int __init uinput_init(void)
++{
++ return misc_register(&uinput_misc);
++}
++
++static void __exit uinput_exit(void)
++{
++ misc_deregister(&uinput_misc);
++}
++
++MODULE_AUTHOR("Aristeu Sergio Rozanski Filho");
++MODULE_DESCRIPTION("User level driver support for input subsystem");
++MODULE_LICENSE("GPL");
++
++module_init(uinput_init);
++module_exit(uinput_exit);
++
+diff -Nur c3000_pre/linux/drivers/isdn/avmb1/capidrv.c c3000_work/linux/drivers/isdn/avmb1/capidrv.c
+--- c3000_pre/linux/drivers/isdn/avmb1/capidrv.c 2004-08-21 09:48:34.000000000 +0900
++++ c3000_work/linux/drivers/isdn/avmb1/capidrv.c 2004-12-16 23:01:14.000000000 +0900
+@@ -514,13 +514,25 @@
+
+ static void send_message(capidrv_contr * card, _cmsg * cmsg)
+ {
+- struct sk_buff *skb;
+- size_t len;
++ struct sk_buff *skb;
++ size_t len;
++ u16 err;
++
+ capi_cmsg2message(cmsg, cmsg->buf);
+ len = CAPIMSG_LEN(cmsg->buf);
+ skb = alloc_skb(len, GFP_ATOMIC);
++ if(!skb) {
++ printk(KERN_ERR "no skb len(%d) memory\n", len);
++ return;
++ }
+ memcpy(skb_put(skb, len), cmsg->buf, len);
+- (*capifuncs->capi_put_message) (global.appid, skb);
++ err = (*capifuncs->capi_put_message) (global.appid, skb);
++ if (err) {
++ printk(KERN_WARNING "%s: capi_put_message error: %04x\n",
++ __FUNCTION__, err);
++ kfree_skb(skb);
++ return;
++ }
+ global.nsentctlpkt++;
+ }
+
+@@ -2179,10 +2191,10 @@
+ free_ncci(card, card->bchans[card->nbchan-1].nccip);
+ if (card->bchans[card->nbchan-1].plcip)
+ free_plci(card, card->bchans[card->nbchan-1].plcip);
+- if (card->plci_list)
+- printk(KERN_ERR "capidrv: bug in free_plci()\n");
+ card->nbchan--;
+ }
++ if (card->plci_list)
++ printk(KERN_ERR "capidrv: bug in free_plci()\n");
+ kfree(card->bchans);
+ card->bchans = 0;
+
+diff -Nur c3000_pre/linux/drivers/isdn/avmb1/kcapi.c c3000_work/linux/drivers/isdn/avmb1/kcapi.c
+--- c3000_pre/linux/drivers/isdn/avmb1/kcapi.c 2004-08-21 09:48:34.000000000 +0900
++++ c3000_work/linux/drivers/isdn/avmb1/kcapi.c 2004-12-16 23:01:14.000000000 +0900
+@@ -545,7 +545,13 @@
+ static void notify_up(__u32 contr)
+ {
+ struct capi_interface_user *p;
++ __u16 appl;
+
++ for (appl = 1; appl <= CAPI_MAXAPPL; appl++) {
++ if (!VALID_APPLID(appl)) continue;
++ if (APPL(appl)->releasing) continue;
++ CARD(contr)->driver->register_appl(CARD(contr), appl, &APPL(appl)->rparam);
++ }
+ printk(KERN_NOTICE "kcapi: notify up contr %d\n", contr);
+ spin_lock(&capi_users_lock);
+ for (p = capi_users; p; p = p->next) {
+@@ -705,12 +711,16 @@
+ nextpp = &(*pp)->next;
+ }
+ }
+- APPL(appl)->releasing--;
+- if (APPL(appl)->releasing <= 0) {
+- APPL(appl)->signal = 0;
+- APPL_MARK_FREE(appl);
+- printk(KERN_INFO "kcapi: appl %d down\n", appl);
+- }
++ if (APPL(appl)->releasing) { /* only release if the application was marked for release */
++ printk(KERN_DEBUG "kcapi: appl %d releasing(%d)\n", appl, APPL(appl)->releasing);
++ APPL(appl)->releasing--;
++ if (APPL(appl)->releasing <= 0) {
++ APPL(appl)->signal = 0;
++ APPL_MARK_FREE(appl);
++ printk(KERN_INFO "kcapi: appl %d down\n", appl);
++ }
++ } else
++ printk(KERN_WARNING "kcapi: appl %d card%d released without request\n", appl, card->cnr);
+ }
+ /*
+ * ncci management
+@@ -863,16 +873,7 @@
+
+ static void controllercb_ready(struct capi_ctr * card)
+ {
+- __u16 appl;
+-
+ card->cardstate = CARD_RUNNING;
+-
+- for (appl = 1; appl <= CAPI_MAXAPPL; appl++) {
+- if (!VALID_APPLID(appl)) continue;
+- if (APPL(appl)->releasing) continue;
+- card->driver->register_appl(card, appl, &APPL(appl)->rparam);
+- }
+-
+ printk(KERN_NOTICE "kcapi: card %d \"%s\" ready.\n",
+ CARDNR(card), card->name);
+
+diff -Nur c3000_pre/linux/drivers/usb/Config.in c3000_work/linux/drivers/usb/Config.in
+--- c3000_pre/linux/drivers/usb/Config.in 2004-08-21 09:48:56.000000000 +0900
++++ c3000_work/linux/drivers/usb/Config.in 2004-12-16 23:01:14.000000000 +0900
+@@ -63,7 +63,13 @@
+ comment 'USB Device Class drivers'
+ dep_tristate ' USB Audio support' CONFIG_USB_AUDIO $CONFIG_USB $CONFIG_SOUND
+ dep_tristate ' EMI 2|6 USB Audio interface support' CONFIG_USB_EMI26 $CONFIG_USB_AUDIO
+- dep_tristate ' USB Bluetooth support (EXPERIMENTAL)' CONFIG_USB_BLUETOOTH $CONFIG_USB $CONFIG_EXPERIMENTAL
++ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
++ if [ "$CONFIG_BLUEZ" = "n" ]; then
++ dep_tristate ' USB Bluetooth support (EXPERIMENTAL)' CONFIG_USB_BLUETOOTH $CONFIG_USB
++ else
++ comment ' USB Bluetooth can only be used with disabled Bluetooth subsystem'
++ fi
++ fi
+ dep_tristate ' USB MIDI support' CONFIG_USB_MIDI $CONFIG_USB
+ if [ "$CONFIG_SCSI" = "n" ]; then
+ comment ' SCSI support is needed for USB Storage'
+diff -Nur c3000_pre/linux/drivers/usb/hid-core.c c3000_work/linux/drivers/usb/hid-core.c
+--- c3000_pre/linux/drivers/usb/hid-core.c 2004-08-21 09:48:57.000000000 +0900
++++ c3000_work/linux/drivers/usb/hid-core.c 2004-12-16 23:01:14.000000000 +0900
+@@ -211,6 +211,8 @@
+
+ offset = report->size;
+ report->size += parser->global.report_size * parser->global.report_count;
++ if (usages < parser->global.report_count)
++ usages = parser->global.report_count;
+
+ if (usages == 0)
+ return 0; /* ignore padding fields */
+diff -Nur c3000_pre/linux/include/linux/firmware.h c3000_work/linux/include/linux/firmware.h
+--- c3000_pre/linux/include/linux/firmware.h 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/include/linux/firmware.h 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,20 @@
++#ifndef _LINUX_FIRMWARE_H
++#define _LINUX_FIRMWARE_H
++#include <linux/module.h>
++#include <linux/types.h>
++#define FIRMWARE_NAME_MAX 30
++struct firmware {
++ size_t size;
++ u8 *data;
++};
++int request_firmware (const struct firmware **fw, const char *name,
++ const char *device);
++int request_firmware_nowait (
++ struct module *module,
++ const char *name, const char *device, void *context,
++ void (*cont)(const struct firmware *fw, void *context));
++/* On 2.5 'device' is 'struct device *' */
++
++void release_firmware (const struct firmware *fw);
++void register_firmware (const char *name, const u8 *data, size_t size);
++#endif
+diff -Nur c3000_pre/linux/include/linux/input.h c3000_work/linux/include/linux/input.h
+--- c3000_pre/linux/include/linux/input.h 2004-08-21 09:49:13.000000000 +0900
++++ c3000_work/linux/include/linux/input.h 2004-12-16 23:01:14.000000000 +0900
+@@ -471,7 +471,8 @@
+ #define BUS_PCI 0x01
+ #define BUS_ISAPNP 0x02
+ #define BUS_USB 0x03
+-#define BUS_HIL 0x04
++#define BUS_HIL 0x04
++#define BUS_BLUETOOTH 0x05
+
+ #define BUS_ISA 0x10
+ #define BUS_I8042 0x11
+diff -Nur c3000_pre/linux/include/linux/net.h c3000_work/linux/include/linux/net.h
+--- c3000_pre/linux/include/linux/net.h 2004-08-21 09:49:13.000000000 +0900
++++ c3000_work/linux/include/linux/net.h 2004-12-16 23:01:14.000000000 +0900
+@@ -139,6 +139,7 @@
+ extern int sock_recvmsg(struct socket *, struct msghdr *m, int len, int flags);
+ extern int sock_readv_writev(int type, struct inode * inode, struct file * file,
+ const struct iovec * iov, long count, long size);
++extern struct socket *sockfd_lookup(int fd, int *err);
+
+ extern int net_ratelimit(void);
+ extern unsigned long net_random(void);
+diff -Nur c3000_pre/linux/include/linux/uinput.h c3000_work/linux/include/linux/uinput.h
+--- c3000_pre/linux/include/linux/uinput.h 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/include/linux/uinput.h 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,79 @@
++/*
++ * User level driver support for input subsystem
++ *
++ * Heavily based on evdev.c by Vojtech Pavlik
++ *
++ * 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
++ *
++ * Author: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>
++ *
++ * Changes/Revisions:
++ * 0.1 20/06/2002
++ * - first public version
++ */
++
++#ifndef __UINPUT_H_
++#define __UINPUT_H_
++
++#ifdef __KERNEL__
++#define UINPUT_MINOR 223
++#define UINPUT_NAME "uinput"
++#define UINPUT_BUFFER_SIZE 16
++
++/* state flags => bit index for {set|clear|test}_bit ops */
++#define UIST_CREATED 0
++
++struct uinput_device {
++ struct input_dev *dev;
++ unsigned long state;
++ wait_queue_head_t waitq;
++ unsigned char ready,
++ head,
++ tail;
++ struct input_event buff[UINPUT_BUFFER_SIZE];
++};
++#endif /* __KERNEL__ */
++
++/* ioctl */
++#define UINPUT_IOCTL_BASE 'U'
++#define UI_DEV_CREATE _IO(UINPUT_IOCTL_BASE, 1)
++#define UI_DEV_DESTROY _IO(UINPUT_IOCTL_BASE, 2)
++#define UI_SET_EVBIT _IOW(UINPUT_IOCTL_BASE, 100, int)
++#define UI_SET_KEYBIT _IOW(UINPUT_IOCTL_BASE, 101, int)
++#define UI_SET_RELBIT _IOW(UINPUT_IOCTL_BASE, 102, int)
++#define UI_SET_ABSBIT _IOW(UINPUT_IOCTL_BASE, 103, int)
++#define UI_SET_MSCBIT _IOW(UINPUT_IOCTL_BASE, 104, int)
++#define UI_SET_LEDBIT _IOW(UINPUT_IOCTL_BASE, 105, int)
++#define UI_SET_SNDBIT _IOW(UINPUT_IOCTL_BASE, 106, int)
++#define UI_SET_FFBIT _IOW(UINPUT_IOCTL_BASE, 107, int)
++
++#ifndef NBITS
++#define NBITS(x) ((((x)-1)/(sizeof(long)*8))+1)
++#endif /* NBITS */
++
++#define UINPUT_MAX_NAME_SIZE 80
++struct uinput_user_dev {
++ char name[UINPUT_MAX_NAME_SIZE];
++ unsigned short idbus;
++ unsigned short idvendor;
++ unsigned short idproduct;
++ unsigned short idversion;
++ int ff_effects_max;
++ int absmax[ABS_MAX + 1];
++ int absmin[ABS_MAX + 1];
++ int absfuzz[ABS_MAX + 1];
++ int absflat[ABS_MAX + 1];
++};
++#endif /* __UINPUT_H_ */
+diff -Nur c3000_pre/linux/include/net/bluetooth/bluetooth.h c3000_work/linux/include/net/bluetooth/bluetooth.h
+--- c3000_pre/linux/include/net/bluetooth/bluetooth.h 2004-08-21 09:49:13.000000000 +0900
++++ c3000_work/linux/include/net/bluetooth/bluetooth.h 2004-12-16 23:01:14.000000000 +0900
+@@ -51,6 +51,8 @@
+ #define BTPROTO_SCO 2
+ #define BTPROTO_RFCOMM 3
+ #define BTPROTO_BNEP 4
++#define BTPROTO_CMTP 5
++#define BTPROTO_HIDP 6
+
+ #define SOL_HCI 0
+ #define SOL_L2CAP 6
+@@ -155,7 +157,7 @@
+ void bluez_sock_unlink(struct bluez_sock_list *l, struct sock *s);
+ int bluez_sock_recvmsg(struct socket *sock, struct msghdr *msg, int len, int flags, struct scm_cookie *scm);
+ uint bluez_sock_poll(struct file * file, struct socket *sock, poll_table *wait);
+-int bluez_sock_w4_connect(struct sock *sk, int flags);
++int bluez_sock_wait_state(struct sock *sk, int state, unsigned long timeo);
+
+ void bluez_accept_enqueue(struct sock *parent, struct sock *sk);
+ struct sock * bluez_accept_dequeue(struct sock *parent, struct socket *newsock);
+diff -Nur c3000_pre/linux/include/net/bluetooth/hci.h c3000_work/linux/include/net/bluetooth/hci.h
+--- c3000_pre/linux/include/net/bluetooth/hci.h 2004-08-21 09:49:13.000000000 +0900
++++ c3000_work/linux/include/net/bluetooth/hci.h 2004-12-16 23:01:14.000000000 +0900
+@@ -39,6 +39,8 @@
+ #define HCI_DEV_UNREG 2
+ #define HCI_DEV_UP 3
+ #define HCI_DEV_DOWN 4
++#define HCI_DEV_SUSPEND 5
++#define HCI_DEV_RESUME 6
+
+ /* HCI device types */
+ #define HCI_VHCI 0
+@@ -46,6 +48,12 @@
+ #define HCI_PCCARD 2
+ #define HCI_UART 3
+ #define HCI_RS232 4
++#define HCI_PCI 5
++
++/* HCI device quirks */
++enum {
++ HCI_QUIRK_RESET_ON_INIT
++};
+
+ /* HCI device flags */
+ enum {
+@@ -157,6 +165,7 @@
+ #define HCI_LM_AUTH 0x0002
+ #define HCI_LM_ENCRYPT 0x0004
+ #define HCI_LM_TRUSTED 0x0008
++#define HCI_LM_RELIABLE 0x0010
+
+ /* ----- HCI Commands ----- */
+ /* OGF & OCF values */
+@@ -330,6 +339,8 @@
+ } __attribute__ ((packed)) status_bdaddr_rp;
+ #define STATUS_BDADDR_RP_SIZE 7
+
++#define OCF_INQUIRY_CANCEL 0x0002
++
+ #define OCF_LINK_KEY_REPLY 0x000B
+ #define OCF_LINK_KEY_NEG_REPLY 0x000C
+ typedef struct {
+@@ -436,6 +447,12 @@
+ /* Status params */
+ #define OGF_STATUS_PARAM 0x05
+
++/* Testing commands */
++#define OGF_TESTING_CMD 0x3e
++
++/* Vendor specific commands */
++#define OGF_VENDOR_CMD 0x3f
++
+ /* ---- HCI Events ---- */
+ #define EVT_INQUIRY_COMPLETE 0x01
+
+@@ -450,6 +467,17 @@
+ } __attribute__ ((packed)) inquiry_info;
+ #define INQUIRY_INFO_SIZE 14
+
++#define EVT_INQUIRY_RESULT_WITH_RSSI 0x22
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 pscan_rep_mode;
++ __u8 pscan_period_mode;
++ __u8 dev_class[3];
++ __u16 clock_offset;
++ __s8 rssi;
++} __attribute__ ((packed)) inquiry_info_with_rssi;
++#define INQUIRY_INFO_WITH_RSSI_SIZE 14
++
+ #define EVT_CONN_COMPLETE 0x03
+ typedef struct {
+ __u8 status;
+@@ -542,7 +570,7 @@
+ bdaddr_t bdaddr;
+ __u8 role;
+ } __attribute__ ((packed)) evt_role_change;
+-#define EVT_ROLE_CHANGE_SIZE 1
++#define EVT_ROLE_CHANGE_SIZE 8
+
+ #define EVT_PIN_CODE_REQ 0x16
+ typedef struct {
+diff -Nur c3000_pre/linux/include/net/bluetooth/hci_core.h c3000_work/linux/include/net/bluetooth/hci_core.h
+--- c3000_pre/linux/include/net/bluetooth/hci_core.h 2004-08-21 09:49:13.000000000 +0900
++++ c3000_work/linux/include/net/bluetooth/hci_core.h 2004-12-16 23:01:14.000000000 +0900
+@@ -72,7 +72,9 @@
+ __u16 pkt_type;
+ __u16 link_policy;
+ __u16 link_mode;
+-
++
++ unsigned long quirks;
++
+ atomic_t cmd_cnt;
+ unsigned int acl_cnt;
+ unsigned int sco_cnt;
+@@ -167,6 +169,12 @@
+ c->list = NULL;
+ }
+
++static inline int inquiry_cache_empty(struct hci_dev *hdev)
++{
++ struct inquiry_cache *c = &hdev->inq_cache;
++ return (c->list == NULL);
++}
++
+ static inline long inquiry_cache_age(struct hci_dev *hdev)
+ {
+ struct inquiry_cache *c = &hdev->inq_cache;
+@@ -281,8 +289,14 @@
+
+ static inline void hci_conn_put(struct hci_conn *conn)
+ {
+- if (atomic_dec_and_test(&conn->refcnt) && conn->out)
+- hci_conn_set_timer(conn, HCI_DISCONN_TIMEOUT);
++ if (atomic_dec_and_test(&conn->refcnt)) {
++ if (conn->type == ACL_LINK) {
++ unsigned long timeo = (conn->out) ?
++ HCI_DISCONN_TIMEOUT : HCI_DISCONN_TIMEOUT * 2;
++ hci_conn_set_timer(conn, timeo);
++ } else
++ hci_conn_set_timer(conn, HZ / 100);
++ }
+ }
+
+ /* ----- HCI Devices ----- */
+@@ -302,6 +316,8 @@
+ struct hci_dev *hci_get_route(bdaddr_t *src, bdaddr_t *dst);
+ int hci_register_dev(struct hci_dev *hdev);
+ int hci_unregister_dev(struct hci_dev *hdev);
++int hci_suspend_dev(struct hci_dev *hdev);
++int hci_resume_dev(struct hci_dev *hdev);
+ int hci_dev_open(__u16 dev);
+ int hci_dev_close(__u16 dev);
+ int hci_dev_reset(__u16 dev);
+@@ -429,7 +445,6 @@
+ int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void *param);
+ int hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags);
+ int hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);
+-int hci_send_raw(struct sk_buff *skb);
+
+ void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 ogf, __u16 ocf);
+
+@@ -447,7 +462,7 @@
+ };
+
+ /* HCI security filter */
+-#define HCI_SFLT_MAX_OGF 4
++#define HCI_SFLT_MAX_OGF 5
+
+ struct hci_sec_filter {
+ __u32 type_mask;
+@@ -455,7 +470,6 @@
+ __u32 ocf_mask[HCI_SFLT_MAX_OGF + 1][4];
+ };
+
+-
+ /* ----- HCI requests ----- */
+ #define HCI_REQ_DONE 0
+ #define HCI_REQ_PEND 1
+diff -Nur c3000_pre/linux/include/net/bluetooth/l2cap.h c3000_work/linux/include/net/bluetooth/l2cap.h
+--- c3000_pre/linux/include/net/bluetooth/l2cap.h 2004-08-21 09:49:13.000000000 +0900
++++ c3000_work/linux/include/net/bluetooth/l2cap.h 2004-12-16 23:01:14.000000000 +0900
+@@ -60,6 +60,7 @@
+ #define L2CAP_LM_AUTH 0x0002
+ #define L2CAP_LM_ENCRYPT 0x0004
+ #define L2CAP_LM_TRUSTED 0x0008
++#define L2CAP_LM_RELIABLE 0x0010
+
+ #define L2CAP_QOS 0x04
+ struct l2cap_qos {
+@@ -189,6 +190,14 @@
+ } __attribute__ ((packed)) l2cap_info_rsp;
+ #define L2CAP_INFO_RSP_SIZE 4
+
++/* info type */
++#define L2CAP_IT_CL_MTU 0x0001
++#define L2CAP_IT_FEAT_MASK 0x0002
++
++/* info result */
++#define L2CAP_IR_SUCCESS 0x0000
++#define L2CAP_IR_NOTSUPP 0x0001
++
+ /* ----- L2CAP connections ----- */
+ struct l2cap_chan_list {
+ struct sock *head;
+@@ -229,6 +238,7 @@
+ __u32 link_mode;
+
+ __u8 conf_state;
++ __u8 conf_retry;
+ __u16 conf_mtu;
+
+ __u8 ident;
+@@ -238,8 +248,11 @@
+ struct sock *prev_c;
+ };
+
+-#define CONF_REQ_SENT 0x01
+-#define CONF_INPUT_DONE 0x02
+-#define CONF_OUTPUT_DONE 0x04
++#define L2CAP_CONF_REQ_SENT 0x01
++#define L2CAP_CONF_INPUT_DONE 0x02
++#define L2CAP_CONF_OUTPUT_DONE 0x04
++#define L2CAP_CONF_MAX_RETRIES 2
++
++void l2cap_load(void);
+
+ #endif /* __L2CAP_H */
+diff -Nur c3000_pre/linux/include/net/bluetooth/rfcomm.h c3000_work/linux/include/net/bluetooth/rfcomm.h
+--- c3000_pre/linux/include/net/bluetooth/rfcomm.h 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/include/net/bluetooth/rfcomm.h 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,361 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ RPN support - Dirk Husemann <hud@zurich.ibm.com>
++*/
++
++/*
++ * $Id: rfcomm.h,v 1.31 2002/10/18 20:12:11 maxk Exp $
++ */
++
++#ifndef __RFCOMM_H
++#define __RFCOMM_H
++
++#define RFCOMM_PSM 3
++
++#define RFCOMM_CONN_TIMEOUT (HZ * 30)
++#define RFCOMM_DISC_TIMEOUT (HZ * 20)
++
++#define RFCOMM_DEFAULT_MTU 127
++#define RFCOMM_DEFAULT_CREDITS 7
++
++#define RFCOMM_MAX_L2CAP_MTU 1024
++#define RFCOMM_MAX_CREDITS 40
++
++#define RFCOMM_SKB_HEAD_RESERVE 8
++#define RFCOMM_SKB_TAIL_RESERVE 2
++#define RFCOMM_SKB_RESERVE (RFCOMM_SKB_HEAD_RESERVE + RFCOMM_SKB_TAIL_RESERVE)
++
++#define RFCOMM_SABM 0x2f
++#define RFCOMM_DISC 0x43
++#define RFCOMM_UA 0x63
++#define RFCOMM_DM 0x0f
++#define RFCOMM_UIH 0xef
++
++#define RFCOMM_TEST 0x08
++#define RFCOMM_FCON 0x28
++#define RFCOMM_FCOFF 0x18
++#define RFCOMM_MSC 0x38
++#define RFCOMM_RPN 0x24
++#define RFCOMM_RLS 0x14
++#define RFCOMM_PN 0x20
++#define RFCOMM_NSC 0x04
++
++#define RFCOMM_V24_FC 0x02
++#define RFCOMM_V24_RTC 0x04
++#define RFCOMM_V24_RTR 0x08
++#define RFCOMM_V24_IC 0x40
++#define RFCOMM_V24_DV 0x80
++
++#define RFCOMM_RPN_BR_2400 0x0
++#define RFCOMM_RPN_BR_4800 0x1
++#define RFCOMM_RPN_BR_7200 0x2
++#define RFCOMM_RPN_BR_9600 0x3
++#define RFCOMM_RPN_BR_19200 0x4
++#define RFCOMM_RPN_BR_38400 0x5
++#define RFCOMM_RPN_BR_57600 0x6
++#define RFCOMM_RPN_BR_115200 0x7
++#define RFCOMM_RPN_BR_230400 0x8
++
++#define RFCOMM_RPN_DATA_5 0x0
++#define RFCOMM_RPN_DATA_6 0x1
++#define RFCOMM_RPN_DATA_7 0x2
++#define RFCOMM_RPN_DATA_8 0x3
++
++#define RFCOMM_RPN_STOP_1 0
++#define RFCOMM_RPN_STOP_15 1
++
++#define RFCOMM_RPN_PARITY_NONE 0x0
++#define RFCOMM_RPN_PARITY_ODD 0x4
++#define RFCOMM_RPN_PARITY_EVEN 0x5
++#define RFCOMM_RPN_PARITY_MARK 0x6
++#define RFCOMM_RPN_PARITY_SPACE 0x7
++
++#define RFCOMM_RPN_FLOW_NONE 0x00
++
++#define RFCOMM_RPN_XON_CHAR 0x11
++#define RFCOMM_RPN_XOFF_CHAR 0x13
++
++#define RFCOMM_RPN_PM_BITRATE 0x0001
++#define RFCOMM_RPN_PM_DATA 0x0002
++#define RFCOMM_RPN_PM_STOP 0x0004
++#define RFCOMM_RPN_PM_PARITY 0x0008
++#define RFCOMM_RPN_PM_PARITY_TYPE 0x0010
++#define RFCOMM_RPN_PM_XON 0x0020
++#define RFCOMM_RPN_PM_XOFF 0x0040
++#define RFCOMM_RPN_PM_FLOW 0x3F00
++
++#define RFCOMM_RPN_PM_ALL 0x3F7F
++
++struct rfcomm_hdr {
++ u8 addr;
++ u8 ctrl;
++ u8 len; // Actual size can be 2 bytes
++} __attribute__ ((packed));
++
++struct rfcomm_cmd {
++ u8 addr;
++ u8 ctrl;
++ u8 len;
++ u8 fcs;
++} __attribute__ ((packed));
++
++struct rfcomm_mcc {
++ u8 type;
++ u8 len;
++} __attribute__ ((packed));
++
++struct rfcomm_pn {
++ u8 dlci;
++ u8 flow_ctrl;
++ u8 priority;
++ u8 ack_timer;
++ u16 mtu;
++ u8 max_retrans;
++ u8 credits;
++} __attribute__ ((packed));
++
++struct rfcomm_rpn {
++ u8 dlci;
++ u8 bit_rate;
++ u8 line_settings;
++ u8 flow_ctrl;
++ u8 xon_char;
++ u8 xoff_char;
++ u16 param_mask;
++} __attribute__ ((packed));
++
++struct rfcomm_rls {
++ u8 dlci;
++ u8 status;
++} __attribute__ ((packed));
++
++struct rfcomm_msc {
++ u8 dlci;
++ u8 v24_sig;
++} __attribute__ ((packed));
++
++/* ---- Core structures, flags etc ---- */
++
++struct rfcomm_session {
++ struct list_head list;
++ struct socket *sock;
++ unsigned long state;
++ unsigned long flags;
++ atomic_t refcnt;
++ int initiator;
++
++ /* Default DLC parameters */
++ int cfc;
++ uint mtu;
++
++ struct list_head dlcs;
++};
++
++struct rfcomm_dlc {
++ struct list_head list;
++ struct rfcomm_session *session;
++ struct sk_buff_head tx_queue;
++ struct timer_list timer;
++
++ spinlock_t lock;
++ unsigned long state;
++ unsigned long flags;
++ atomic_t refcnt;
++ u8 dlci;
++ u8 addr;
++ u8 priority;
++ u8 v24_sig;
++ u8 mscex;
++
++ uint mtu;
++ uint cfc;
++ uint rx_credits;
++ uint tx_credits;
++
++ void *owner;
++
++ void (*data_ready)(struct rfcomm_dlc *d, struct sk_buff *skb);
++ void (*state_change)(struct rfcomm_dlc *d, int err);
++ void (*modem_status)(struct rfcomm_dlc *d, u8 v24_sig);
++};
++
++/* DLC and session flags */
++#define RFCOMM_RX_THROTTLED 0
++#define RFCOMM_TX_THROTTLED 1
++#define RFCOMM_MSC_PENDING 2
++#define RFCOMM_TIMED_OUT 3
++
++/* Scheduling flags and events */
++#define RFCOMM_SCHED_STATE 0
++#define RFCOMM_SCHED_RX 1
++#define RFCOMM_SCHED_TX 2
++#define RFCOMM_SCHED_TIMEO 3
++#define RFCOMM_SCHED_WAKEUP 31
++
++/* MSC exchange flags */
++#define RFCOMM_MSCEX_TX 1
++#define RFCOMM_MSCEX_RX 2
++#define RFCOMM_MSCEX_OK (RFCOMM_MSCEX_TX + RFCOMM_MSCEX_RX)
++
++/* CFC states */
++#define RFCOMM_CFC_UNKNOWN -1
++#define RFCOMM_CFC_DISABLED 0
++#define RFCOMM_CFC_ENABLED RFCOMM_MAX_CREDITS
++
++extern struct task_struct *rfcomm_thread;
++extern unsigned long rfcomm_event;
++
++static inline void rfcomm_schedule(uint event)
++{
++ if (!rfcomm_thread)
++ return;
++ set_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event);
++ wake_up_process(rfcomm_thread);
++}
++
++extern struct semaphore rfcomm_sem;
++#define rfcomm_lock() down(&rfcomm_sem);
++#define rfcomm_unlock() up(&rfcomm_sem);
++
++/* ---- RFCOMM DLCs (channels) ---- */
++struct rfcomm_dlc *rfcomm_dlc_alloc(int prio);
++void rfcomm_dlc_free(struct rfcomm_dlc *d);
++int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel);
++int rfcomm_dlc_close(struct rfcomm_dlc *d, int reason);
++int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb);
++int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig);
++int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig);
++
++#define rfcomm_dlc_lock(d) spin_lock(&d->lock)
++#define rfcomm_dlc_unlock(d) spin_unlock(&d->lock)
++
++static inline void rfcomm_dlc_hold(struct rfcomm_dlc *d)
++{
++ atomic_inc(&d->refcnt);
++}
++
++static inline void rfcomm_dlc_put(struct rfcomm_dlc *d)
++{
++ if (atomic_dec_and_test(&d->refcnt))
++ rfcomm_dlc_free(d);
++}
++
++extern void FASTCALL(__rfcomm_dlc_throttle(struct rfcomm_dlc *d));
++extern void FASTCALL(__rfcomm_dlc_unthrottle(struct rfcomm_dlc *d));
++
++static inline void rfcomm_dlc_throttle(struct rfcomm_dlc *d)
++{
++ if (!test_and_set_bit(RFCOMM_RX_THROTTLED, &d->flags))
++ __rfcomm_dlc_throttle(d);
++}
++
++static inline void rfcomm_dlc_unthrottle(struct rfcomm_dlc *d)
++{
++ if (test_and_clear_bit(RFCOMM_RX_THROTTLED, &d->flags))
++ __rfcomm_dlc_unthrottle(d);
++}
++
++/* ---- RFCOMM sessions ---- */
++struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state);
++struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst);
++struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst, int *err);
++void rfcomm_session_del(struct rfcomm_session *s);
++void rfcomm_session_close(struct rfcomm_session *s, int err);
++void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst);
++
++static inline void rfcomm_session_hold(struct rfcomm_session *s)
++{
++ atomic_inc(&s->refcnt);
++}
++
++static inline void rfcomm_session_put(struct rfcomm_session *s)
++{
++ if (atomic_dec_and_test(&s->refcnt))
++ rfcomm_session_del(s);
++}
++
++/* ---- RFCOMM chechsum ---- */
++extern u8 rfcomm_crc_table[];
++
++/* ---- RFCOMM sockets ---- */
++struct sockaddr_rc {
++ sa_family_t rc_family;
++ bdaddr_t rc_bdaddr;
++ u8 rc_channel;
++};
++
++#define rfcomm_pi(sk) ((struct rfcomm_pinfo *) &sk->tp_pinfo)
++
++struct rfcomm_pinfo {
++ struct rfcomm_dlc *dlc;
++ u8 channel;
++};
++
++int rfcomm_init_sockets(void);
++void rfcomm_cleanup_sockets(void);
++
++int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc **d);
++
++/* ---- RFCOMM TTY ---- */
++#define RFCOMM_MAX_DEV 256
++
++#define RFCOMMCREATEDEV _IOW('R', 200, int)
++#define RFCOMMRELEASEDEV _IOW('R', 201, int)
++#define RFCOMMGETDEVLIST _IOR('R', 210, int)
++#define RFCOMMGETDEVINFO _IOR('R', 211, int)
++#define RFCOMMSTEALDLC _IOW('R', 220, int)
++
++#define RFCOMM_REUSE_DLC 0
++#define RFCOMM_RELEASE_ONHUP 1
++#define RFCOMM_HANGUP_NOW 2
++#define RFCOMM_TTY_ATTACHED 3
++
++struct rfcomm_dev_req {
++ s16 dev_id;
++ u32 flags;
++ bdaddr_t src;
++ bdaddr_t dst;
++ u8 channel;
++};
++
++struct rfcomm_dev_info {
++ s16 id;
++ u32 flags;
++ u16 state;
++ bdaddr_t src;
++ bdaddr_t dst;
++ u8 channel;
++};
++
++struct rfcomm_dev_list_req {
++ u16 dev_num;
++ struct rfcomm_dev_info dev_info[0];
++};
++
++int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, unsigned long arg);
++int rfcomm_init_ttys(void);
++void rfcomm_cleanup_ttys(void);
++
++#endif /* __RFCOMM_H */
+diff -Nur c3000_pre/linux/include/pcmcia/ciscode.h c3000_work/linux/include/pcmcia/ciscode.h
+--- c3000_pre/linux/include/pcmcia/ciscode.h 2004-08-21 09:49:13.000000000 +0900
++++ c3000_work/linux/include/pcmcia/ciscode.h 2004-12-16 23:01:14.000000000 +0900
+@@ -1,5 +1,5 @@
+ /*
+- * ciscode.h 1.48 2001/08/24 12:16:12
++ * ciscode.h 1.57 2002/11/03 20:38:14
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+@@ -60,6 +60,10 @@
+ #define PRODID_INTEL_DUAL_RS232 0x0301
+ #define PRODID_INTEL_2PLUS 0x8422
+
++#define MANFID_KME 0x0032
++#define PRODID_KME_KXLC005_A 0x0704
++#define PRODID_KME_KXLC005_B 0x2904
++
+ #define MANFID_LINKSYS 0x0143
+ #define PRODID_LINKSYS_PCMLM28 0xc0ab
+ #define PRODID_LINKSYS_3400 0x3341
+@@ -94,6 +98,8 @@
+ #define PRODID_OSITECH_JACK_336 0x0007
+ #define PRODID_OSITECH_SEVEN 0x0008
+
++#define MANFID_OXSEMI 0x0279
++
+ #define MANFID_PIONEER 0x000b
+
+ #define MANFID_PSION 0x016c
+@@ -103,6 +109,7 @@
+ #define PRODID_QUATECH_SPP100 0x0003
+ #define PRODID_QUATECH_DUAL_RS232 0x0012
+ #define PRODID_QUATECH_DUAL_RS232_D1 0x0007
++#define PRODID_QUATECH_DUAL_RS232_D2 0x0052
+ #define PRODID_QUATECH_QUAD_RS232 0x001b
+ #define PRODID_QUATECH_DUAL_RS422 0x000e
+ #define PRODID_QUATECH_QUAD_RS422 0x0045
+@@ -120,9 +127,12 @@
+
+ #define MANFID_TDK 0x0105
+ #define PRODID_TDK_CF010 0x0900
++#define PRODID_TDK_GN3410 0x4815
+
+ #define MANFID_TOSHIBA 0x0098
+
++#define MANFID_UNGERMANN 0x02c0
++
+ #define MANFID_XIRCOM 0x0105
+
+ #endif /* _LINUX_CISCODE_H */
+diff -Nur c3000_pre/linux/kernel/ksyms.c c3000_work/linux/kernel/ksyms.c
+--- c3000_pre/linux/kernel/ksyms.c 2004-08-21 09:49:14.000000000 +0900
++++ c3000_work/linux/kernel/ksyms.c 2004-12-16 23:01:14.000000000 +0900
+@@ -51,6 +51,7 @@
+ #include <linux/completion.h>
+ #include <linux/seq_file.h>
+ #include <linux/dnotify.h>
++#include <linux/firmware.h>
+ #include <asm/checksum.h>
+
+ #if defined(CONFIG_PROC_FS)
+@@ -587,6 +588,13 @@
+ EXPORT_SYMBOL(md5_pad);
+ EXPORT_SYMBOL(md5_result);
+
++#ifdef CONFIG_FW_LOADER
++EXPORT_SYMBOL(release_firmware);
++EXPORT_SYMBOL(request_firmware);
++EXPORT_SYMBOL(request_firmware_nowait);
++EXPORT_SYMBOL(register_firmware);
++#endif
++
+ /* software interrupts */
+ EXPORT_SYMBOL(tasklet_hi_vec);
+ EXPORT_SYMBOL(tasklet_vec);
+diff -Nur c3000_pre/linux/lib/Config.in c3000_work/linux/lib/Config.in
+--- c3000_pre/linux/lib/Config.in 2004-08-21 09:49:14.000000000 +0900
++++ c3000_work/linux/lib/Config.in 2004-12-16 23:01:14.000000000 +0900
+@@ -9,4 +9,9 @@
+
+ source crypto/Config.in
+
++if [ "$CONFIG_EXPERIMENTAL" = "y" -a \
++ "$CONFIG_HOTPLUG" = "y" ]; then
++ tristate 'Hotplug firmware loading support (EXPERIMENTAL)' CONFIG_FW_LOADER
++fi
++
+ endmenu
+diff -Nur c3000_pre/linux/lib/Makefile c3000_work/linux/lib/Makefile
+--- c3000_pre/linux/lib/Makefile 2004-08-21 09:49:14.000000000 +0900
++++ c3000_work/linux/lib/Makefile 2004-12-16 23:01:14.000000000 +0900
+@@ -9,10 +9,12 @@
+
+ L_TARGET := lib.a
+
+-export-objs := cmdline.o dec_and_lock.o rwsem-spinlock.o rwsem.o rbtree.o
++export-objs := cmdline.o dec_and_lock.o rwsem-spinlock.o rwsem.o \
++ rbtree.o firmware_class.o
+
+ obj-y := errno.o ctype.o string.o vsprintf.o brlock.o cmdline.o bust_spinlocks.o rbtree.o md5.o
+
++obj-$(CONFIG_FW_LOADER) += firmware_class.o
+ obj-$(CONFIG_RWSEM_GENERIC_SPINLOCK) += rwsem-spinlock.o
+ obj-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o
+
+@@ -23,6 +25,8 @@
+ subdir-$(CONFIG_ZLIB_INFLATE) += zlib_inflate
+ subdir-$(CONFIG_ZLIB_DEFLATE) += zlib_deflate
+
++include $(TOPDIR)/drivers/bluetooth/Makefile.lib
++
+ # Include the subdirs, if necessary.
+ obj-y += $(join $(subdir-y),$(subdir-y:%=/%.o))
+
+diff -Nur c3000_pre/linux/lib/firmware_class.c c3000_work/linux/lib/firmware_class.c
+--- c3000_pre/linux/lib/firmware_class.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/lib/firmware_class.c 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,573 @@
++/*
++ * firmware_class.c - Multi purpose firmware loading support
++ *
++ * Copyright (c) 2003 Manuel Estrada Sainz <ranty@debian.org>
++ *
++ * Please see Documentation/firmware_class/ for more information.
++ *
++ */
++/*
++ * Based on kernel/kmod.c and drivers/usb/usb.c
++ */
++/*
++ kernel/kmod.c
++ Kirk Petersen
++
++ Reorganized not to be a daemon by Adam Richter, with guidance
++ from Greg Zornetzer.
++
++ Modified to avoid chroot and file sharing problems.
++ Mikael Pettersson
++
++ Limit the concurrent number of kmod modprobes to catch loops from
++ "modprobe needs a service that is in a module".
++ Keith Owens <kaos@ocs.com.au> December 1999
++
++ Unblock all signals when we exec a usermode process.
++ Shuu Yamaguchi <shuu@wondernetworkresources.com> December 2000
++*/
++/*
++ * drivers/usb/usb.c
++ *
++ * (C) Copyright Linus Torvalds 1999
++ * (C) Copyright Johannes Erdfelt 1999-2001
++ * (C) Copyright Andreas Gal 1999
++ * (C) Copyright Gregory P. Smith 1999
++ * (C) Copyright Deti Fliegl 1999 (new USB architecture)
++ * (C) Copyright Randy Dunlap 2000
++ * (C) Copyright David Brownell 2000 (kernel hotplug, usb_device_id)
++ * (C) Copyright Yggdrasil Computing, Inc. 2000
++ * (usb_device_id matching changes by Adam J. Richter)
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/string.h>
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/kmod.h>
++#include <linux/proc_fs.h>
++#include <linux/vmalloc.h>
++#include <asm/hardirq.h>
++
++#include "linux/firmware.h"
++
++MODULE_AUTHOR("Manuel Estrada Sainz <ranty@debian.org>");
++MODULE_DESCRIPTION("Multi purpose firmware loading support");
++MODULE_LICENSE("GPL");
++
++#define err(format, arg...) \
++ printk(KERN_ERR "%s:%s: " format "\n",__FILE__, __FUNCTION__ , ## arg)
++#define warn(format, arg...) \
++ printk(KERN_WARNING "%s:%s: " format "\n",__FILE__, __FUNCTION__ , ## arg)
++#define dbg(format, arg...) \
++ printk(KERN_DEBUG "%s:%s: " format "\n",__FILE__, __FUNCTION__ , ## arg)
++
++static int loading_timeout = 10; /* In seconds */
++static struct proc_dir_entry *proc_dir_timeout;
++static struct proc_dir_entry *proc_dir;
++
++#ifdef CONFIG_HOTPLUG
++
++static int
++call_helper(char *verb, const char *name, const char *device)
++{
++ char *argv[3], **envp, *buf, *scratch;
++ int i = 0;
++
++ int retval = 0;
++
++ if (!hotplug_path[0])
++ return -ENOENT;
++ if (in_interrupt()) {
++ err("in_interrupt");
++ return -EFAULT;
++ }
++ if (!current->fs->root) {
++ warn("call_policy %s -- no FS yet", verb);
++ return -EPERM;
++ }
++
++ if (!(envp = (char **) kmalloc(20 * sizeof (char *), GFP_KERNEL))) {
++ err("unable to allocate envp");
++ return -ENOMEM;
++ }
++ if (!(buf = kmalloc(256, GFP_KERNEL))) {
++ kfree(envp);
++ err("unable to allocate buf");
++ return -ENOMEM;
++ }
++
++ /* only one standardized param to hotplug command: type */
++ argv[0] = hotplug_path;
++ argv[1] = "firmware";
++ argv[2] = 0;
++
++ /* minimal command environment */
++ envp[i++] = "HOME=/";
++ envp[i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";
++
++#ifdef DEBUG
++ /* hint that policy agent should enter no-stdout debug mode */
++ envp[i++] = "DEBUG=kernel";
++#endif
++ scratch = buf;
++
++ if (device) {
++ envp[i++] = scratch;
++ scratch += snprintf(scratch, FIRMWARE_NAME_MAX+25,
++ "DEVPATH=/driver/firmware/%s", device) + 1;
++ }
++
++ envp[i++] = scratch;
++ scratch += sprintf(scratch, "ACTION=%s", verb) + 1;
++
++ envp[i++] = scratch;
++ scratch += snprintf(scratch, FIRMWARE_NAME_MAX,
++ "FIRMWARE=%s", name) + 1;
++
++ envp[i++] = 0;
++
++#ifdef DEBUG
++ dbg("firmware: %s %s %s", argv[0], argv[1], verb);
++#endif
++
++ retval = call_usermodehelper(argv[0], argv, envp);
++ if (retval) {
++ printk("call_usermodehelper return %d\n", retval);
++ }
++
++ kfree(buf);
++ kfree(envp);
++ return retval;
++}
++#else
++
++static inline int
++call_helper(char *verb, const char *name, const char *device)
++{
++ return -ENOENT;
++}
++
++#endif /* CONFIG_HOTPLUG */
++
++struct firmware_priv {
++ struct completion completion;
++ struct proc_dir_entry *proc_dir;
++ struct proc_dir_entry *attr_data;
++ struct proc_dir_entry *attr_loading;
++ struct firmware *fw;
++ int loading;
++ int abort;
++ int alloc_size;
++ struct timer_list timeout;
++};
++
++static int
++firmware_timeout_show(char *buf, char **start, off_t off,
++ int count, int *eof, void *data)
++{
++ return sprintf(buf, "%d\n", loading_timeout);
++}
++
++/**
++ * firmware_timeout_store:
++ * Description:
++ * Sets the number of seconds to wait for the firmware. Once
++ * this expires an error will be return to the driver and no
++ * firmware will be provided.
++ *
++ * Note: zero means 'wait for ever'
++ *
++ **/
++static int
++firmware_timeout_store(struct file *file, const char *buf,
++ unsigned long count, void *data)
++{
++ loading_timeout = simple_strtol(buf, NULL, 10);
++ return count;
++}
++
++static int
++firmware_loading_show(char *buf, char **start, off_t off,
++ int count, int *eof, void *data)
++{
++ struct firmware_priv *fw_priv = data;
++ return sprintf(buf, "%d\n", fw_priv->loading);
++}
++
++/**
++ * firmware_loading_store: - loading control file
++ * Description:
++ * The relevant values are:
++ *
++ * 1: Start a load, discarding any previous partial load.
++ * 0: Conclude the load and handle the data to the driver code.
++ * -1: Conclude the load with an error and discard any written data.
++ **/
++static int
++firmware_loading_store(struct file *file, const char *buf,
++ unsigned long count, void *data)
++{
++ struct firmware_priv *fw_priv = data;
++ int prev_loading = fw_priv->loading;
++
++ fw_priv->loading = simple_strtol(buf, NULL, 10);
++
++ switch (fw_priv->loading) {
++ case -1:
++ fw_priv->abort = 1;
++ wmb();
++ complete(&fw_priv->completion);
++ break;
++ case 1:
++ kfree(fw_priv->fw->data);
++ fw_priv->fw->data = NULL;
++ fw_priv->fw->size = 0;
++ fw_priv->alloc_size = 0;
++ break;
++ case 0:
++ if (prev_loading == 1)
++ complete(&fw_priv->completion);
++ break;
++ }
++
++ return count;
++}
++
++static int
++firmware_data_read(char *buffer, char **start, off_t offset,
++ int count, int *eof, void *data)
++{
++ struct firmware_priv *fw_priv = data;
++ struct firmware *fw = fw_priv->fw;
++
++ if (offset > fw->size)
++ return 0;
++ if (offset + count > fw->size)
++ count = fw->size - offset;
++
++ memcpy(buffer, fw->data + offset, count);
++ *start = (void *) ((long) count);
++ return count;
++}
++static int
++fw_realloc_buffer(struct firmware_priv *fw_priv, int min_size)
++{
++ u8 *new_data;
++ int new_size;
++
++ if (min_size <= fw_priv->alloc_size)
++ return 0;
++ if((min_size % PAGE_SIZE) == 0)
++ new_size = min_size;
++ else
++ new_size = (min_size + PAGE_SIZE) & PAGE_MASK;
++ new_data = vmalloc(new_size);
++ if (!new_data) {
++ printk(KERN_ERR "%s: unable to alloc buffer\n", __FUNCTION__);
++ /* Make sure that we don't keep incomplete data */
++ fw_priv->abort = 1;
++ return -ENOMEM;
++ }
++ fw_priv->alloc_size = new_size;
++ if (fw_priv->fw->data) {
++ memcpy(new_data, fw_priv->fw->data, fw_priv->fw->size);
++ vfree(fw_priv->fw->data);
++ }
++ fw_priv->fw->data = new_data;
++ BUG_ON(min_size > fw_priv->alloc_size);
++ return 0;
++}
++
++/**
++ * firmware_data_write:
++ *
++ * Description:
++ *
++ * Data written to the 'data' attribute will be later handled to
++ * the driver as a firmware image.
++ **/
++static int
++firmware_data_write(struct file *file, const char *buffer,
++ unsigned long count, void *data)
++{
++ struct firmware_priv *fw_priv = data;
++ struct firmware *fw = fw_priv->fw;
++ int offset = file->f_pos;
++ int retval;
++
++ retval = fw_realloc_buffer(fw_priv, offset + count);
++ if (retval) {
++ printk("%s: retval:%d\n", __FUNCTION__, retval);
++ return retval;
++ }
++
++ memcpy(fw->data + offset, buffer, count);
++
++ fw->size = max_t(size_t, offset + count, fw->size);
++ file->f_pos += count;
++ return count;
++}
++
++static void
++firmware_class_timeout(u_long data)
++{
++ struct firmware_priv *fw_priv = (struct firmware_priv *) data;
++ fw_priv->abort = 1;
++ wmb();
++ complete(&fw_priv->completion);
++}
++static int
++fw_setup_class_device(struct firmware_priv **fw_priv_p,
++ const char *fw_name, const char *device)
++{
++ int retval;
++ struct firmware_priv *fw_priv = kmalloc(sizeof (struct firmware_priv),
++ GFP_KERNEL);
++ *fw_priv_p = fw_priv;
++ if (!fw_priv) {
++ retval = -ENOMEM;
++ goto out;
++ }
++ memset(fw_priv, 0, sizeof (*fw_priv));
++
++ init_completion(&fw_priv->completion);
++
++ fw_priv->timeout.function = firmware_class_timeout;
++ fw_priv->timeout.data = (u_long) fw_priv;
++ init_timer(&fw_priv->timeout);
++
++ retval = -EAGAIN;
++ fw_priv->proc_dir = create_proc_entry(device, 0644 | S_IFDIR, proc_dir);
++ if (!fw_priv->proc_dir)
++ goto err_free_fw_priv;
++
++ fw_priv->attr_data = create_proc_entry("data", 0644 | S_IFREG,
++ fw_priv->proc_dir);
++ if (!fw_priv->attr_data)
++ goto err_remove_dir;
++
++ fw_priv->attr_data->read_proc = firmware_data_read;
++ fw_priv->attr_data->write_proc = firmware_data_write;
++ fw_priv->attr_data->data = fw_priv;
++
++ fw_priv->attr_loading = create_proc_entry("loading", 0644 | S_IFREG,
++ fw_priv->proc_dir);
++ if (!fw_priv->attr_loading)
++ goto err_remove_data;
++
++ fw_priv->attr_loading->read_proc = firmware_loading_show;
++ fw_priv->attr_loading->write_proc = firmware_loading_store;
++ fw_priv->attr_loading->data = fw_priv;
++
++ retval = 0;
++ fw_priv->fw = kmalloc(sizeof (struct firmware), GFP_KERNEL);
++ if (!fw_priv->fw) {
++ printk(KERN_ERR "%s: kmalloc(struct firmware) failed\n",
++ __FUNCTION__);
++ retval = -ENOMEM;
++ goto err_remove_loading;
++ }
++ memset(fw_priv->fw, 0, sizeof (*fw_priv->fw));
++
++ goto out;
++
++err_remove_loading:
++ remove_proc_entry("loading", fw_priv->proc_dir);
++err_remove_data:
++ remove_proc_entry("data", fw_priv->proc_dir);
++err_remove_dir:
++ remove_proc_entry(device, proc_dir);
++err_free_fw_priv:
++ kfree(fw_priv);
++out:
++ return retval;
++}
++static void
++fw_remove_class_device(struct firmware_priv *fw_priv)
++{
++ remove_proc_entry("loading", fw_priv->proc_dir);
++ remove_proc_entry("data", fw_priv->proc_dir);
++ remove_proc_entry(fw_priv->proc_dir->name, proc_dir);
++}
++
++/**
++ * request_firmware: - request firmware to hotplug and wait for it
++ * Description:
++ * @firmware will be used to return a firmware image by the name
++ * of @name for device @device.
++ *
++ * Should be called from user context where sleeping is allowed.
++ *
++ * @name will be use as $FIRMWARE in the hotplug environment and
++ * should be distinctive enough not to be confused with any other
++ * firmware image for this or any other device.
++ **/
++int
++request_firmware(const struct firmware **firmware, const char *name,
++ const char *device)
++{
++ struct firmware_priv *fw_priv;
++ int retval;
++
++ if (!firmware) {
++ retval = -EINVAL;
++ goto out;
++ }
++ *firmware = NULL;
++
++ retval = fw_setup_class_device(&fw_priv, name, device);
++ if (retval)
++ goto out;
++
++ retval = call_helper("add", name, device);
++ if (retval)
++ goto out;
++ if (loading_timeout) {
++ fw_priv->timeout.expires = jiffies + loading_timeout * HZ;
++ add_timer(&fw_priv->timeout);
++ }
++
++ wait_for_completion(&fw_priv->completion);
++
++ del_timer(&fw_priv->timeout);
++ fw_remove_class_device(fw_priv);
++
++ if (fw_priv->fw->size && !fw_priv->abort) {
++ *firmware = fw_priv->fw;
++ } else {
++ retval = -ENOENT;
++ vfree(fw_priv->fw->data);
++ kfree(fw_priv->fw);
++ }
++out:
++ kfree(fw_priv);
++ return retval;
++}
++
++void
++release_firmware(const struct firmware *fw)
++{
++ if (fw) {
++ vfree(fw->data);
++ kfree(fw);
++ }
++}
++
++/**
++ * register_firmware: - provide a firmware image for later usage
++ *
++ * Description:
++ * Make sure that @data will be available by requesting firmware @name.
++ *
++ * Note: This will not be possible until some kind of persistence
++ * is available.
++ **/
++void
++register_firmware(const char *name, const u8 *data, size_t size)
++{
++ /* This is meaningless without firmware caching, so until we
++ * decide if firmware caching is reasonable just leave it as a
++ * noop */
++}
++
++/* Async support */
++struct firmware_work {
++ struct tq_struct work;
++ struct module *module;
++ const char *name;
++ const char *device;
++ void *context;
++ void (*cont)(const struct firmware *fw, void *context);
++};
++
++static void
++request_firmware_work_func(void *arg)
++{
++ struct firmware_work *fw_work = arg;
++ const struct firmware *fw;
++ if (!arg)
++ return;
++ request_firmware(&fw, fw_work->name, fw_work->device);
++ fw_work->cont(fw, fw_work->context);
++ release_firmware(fw);
++ __MOD_DEC_USE_COUNT(fw_work->module);
++ kfree(fw_work);
++}
++
++/**
++ * request_firmware_nowait:
++ *
++ * Description:
++ * Asynchronous variant of request_firmware() for contexts where
++ * it is not possible to sleep.
++ *
++ * @cont will be called asynchronously when the firmware request is over.
++ *
++ * @context will be passed over to @cont.
++ *
++ * @fw may be %NULL if firmware request fails.
++ *
++ **/
++int
++request_firmware_nowait(
++ struct module *module,
++ const char *name, const char *device, void *context,
++ void (*cont)(const struct firmware *fw, void *context))
++{
++ struct firmware_work *fw_work = kmalloc(sizeof (struct firmware_work),
++ GFP_ATOMIC);
++ if (!fw_work)
++ return -ENOMEM;
++ if (!try_inc_mod_count(module)) {
++ kfree(fw_work);
++ return -EFAULT;
++ }
++
++ *fw_work = (struct firmware_work) {
++ .module = module,
++ .name = name,
++ .device = device,
++ .context = context,
++ .cont = cont,
++ };
++ INIT_TQUEUE(&fw_work->work, request_firmware_work_func, fw_work);
++
++ schedule_task(&fw_work->work);
++ return 0;
++}
++
++static int __init
++firmware_class_init(void)
++{
++ proc_dir = create_proc_entry("driver/firmware", 0755 | S_IFDIR, NULL);
++ if (!proc_dir)
++ return -EAGAIN;
++ proc_dir_timeout = create_proc_entry("timeout",
++ 0644 | S_IFREG, proc_dir);
++ if (!proc_dir_timeout) {
++ remove_proc_entry("driver/firmware", NULL);
++ return -EAGAIN;
++ }
++ proc_dir_timeout->read_proc = firmware_timeout_show;
++ proc_dir_timeout->write_proc = firmware_timeout_store;
++ return 0;
++}
++static void __exit
++firmware_class_exit(void)
++{
++ remove_proc_entry("timeout", proc_dir);
++ remove_proc_entry("driver/firmware", NULL);
++}
++
++module_init(firmware_class_init);
++module_exit(firmware_class_exit);
++
++#ifndef CONFIG_FW_LOADER
++EXPORT_SYMBOL(release_firmware);
++EXPORT_SYMBOL(request_firmware);
++EXPORT_SYMBOL(request_firmware_nowait);
++EXPORT_SYMBOL(register_firmware);
++#endif
+diff -Nur c3000_pre/linux/net/bluetooth/Config.in c3000_work/linux/net/bluetooth/Config.in
+--- c3000_pre/linux/net/bluetooth/Config.in 2004-08-21 09:49:19.000000000 +0900
++++ c3000_work/linux/net/bluetooth/Config.in 2004-12-16 23:01:14.000000000 +0900
+@@ -1,8 +1,9 @@
+ #
+-# Bluetooth configuration
++# Bluetooth subsystem configuration
+ #
+
+ if [ "$CONFIG_NET" != "n" ]; then
++
+ mainmenu_option next_comment
+ comment 'Bluetooth support'
+ dep_tristate 'Bluetooth subsystem support' CONFIG_BLUEZ $CONFIG_NET
+@@ -10,9 +11,13 @@
+ if [ "$CONFIG_BLUEZ" != "n" ]; then
+ dep_tristate 'L2CAP protocol support' CONFIG_BLUEZ_L2CAP $CONFIG_BLUEZ
+ dep_tristate 'SCO links support' CONFIG_BLUEZ_SCO $CONFIG_BLUEZ
++ source net/bluetooth/rfcomm/Config.in
+ source net/bluetooth/bnep/Config.in
++ source net/bluetooth/cmtp/Config.in
++ source net/bluetooth/hidp/Config.in
+ source drivers/bluetooth/Config.in
+ fi
++
+ endmenu
+ fi
+
+diff -Nur c3000_pre/linux/net/bluetooth/Makefile c3000_work/linux/net/bluetooth/Makefile
+--- c3000_pre/linux/net/bluetooth/Makefile 2004-08-21 09:49:19.000000000 +0900
++++ c3000_work/linux/net/bluetooth/Makefile 2004-12-16 23:01:14.000000000 +0900
+@@ -1,10 +1,11 @@
+ #
+-# Makefile for the Bluetooth subsystem
++# Makefile for the Linux Bluetooth subsystem
+ #
++
+ O_TARGET := bluetooth.o
+
+ list-multi := bluez.o
+-export-objs := syms.o
++export-objs := syms.o l2cap.o
+
+ bluez-objs := af_bluetooth.o hci_core.o hci_conn.o hci_event.o hci_sock.o lib.o syms.o
+
+@@ -12,12 +13,27 @@
+ obj-$(CONFIG_BLUEZ_L2CAP) += l2cap.o
+ obj-$(CONFIG_BLUEZ_SCO) += sco.o
+
++subdir-$(CONFIG_BLUEZ_RFCOMM) += rfcomm
+ subdir-$(CONFIG_BLUEZ_BNEP) += bnep
++subdir-$(CONFIG_BLUEZ_CMTP) += cmtp
++subdir-$(CONFIG_BLUEZ_HIDP) += hidp
++
++ifeq ($(CONFIG_BLUEZ_RFCOMM),y)
++obj-y += rfcomm/rfcomm.o
++endif
+
+ ifeq ($(CONFIG_BLUEZ_BNEP),y)
+ obj-y += bnep/bnep.o
+ endif
+
++ifeq ($(CONFIG_BLUEZ_CMTP),y)
++obj-y += cmtp/cmtp.o
++endif
++
++ifeq ($(CONFIG_BLUEZ_HIDP),y)
++obj-y += hidp/hidp.o
++endif
++
+ include $(TOPDIR)/Rules.make
+
+ bluez.o: $(bluez-objs)
+diff -Nur c3000_pre/linux/net/bluetooth/af_bluetooth.c c3000_work/linux/net/bluetooth/af_bluetooth.c
+--- c3000_pre/linux/net/bluetooth/af_bluetooth.c 2004-08-21 09:49:19.000000000 +0900
++++ c3000_work/linux/net/bluetooth/af_bluetooth.c 2004-12-16 23:01:14.000000000 +0900
+@@ -27,7 +27,7 @@
+ *
+ * $Id: af_bluetooth.c,v 1.8 2002/07/22 20:32:54 maxk Exp $
+ */
+-#define VERSION "2.2"
++#define VERSION "2.4"
+
+ #include <linux/config.h>
+ #include <linux/module.h>
+@@ -57,7 +57,7 @@
+ #endif
+
+ /* Bluetooth sockets */
+-#define BLUEZ_MAX_PROTO 5
++#define BLUEZ_MAX_PROTO 7
+ static struct net_proto_family *bluez_proto[BLUEZ_MAX_PROTO];
+
+ int bluez_sock_register(int proto, struct net_proto_family *ops)
+@@ -221,12 +221,11 @@
+ unsigned int bluez_sock_poll(struct file * file, struct socket *sock, poll_table *wait)
+ {
+ struct sock *sk = sock->sk;
+- unsigned int mask;
++ unsigned int mask = 0;
+
+ BT_DBG("sock %p, sk %p", sock, sk);
+
+ poll_wait(file, sk->sleep, wait);
+- mask = 0;
+
+ if (sk->err || !skb_queue_empty(&sk->error_queue))
+ mask |= POLLERR;
+@@ -242,9 +241,11 @@
+ if (sk->state == BT_CLOSED)
+ mask |= POLLHUP;
+
+- if (sk->state == BT_CONNECT || sk->state == BT_CONNECT2)
++ if (sk->state == BT_CONNECT ||
++ sk->state == BT_CONNECT2 ||
++ sk->state == BT_CONFIG)
+ return mask;
+-
++
+ if (sock_writeable(sk))
+ mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
+ else
+@@ -253,39 +254,35 @@
+ return mask;
+ }
+
+-int bluez_sock_w4_connect(struct sock *sk, int flags)
++int bluez_sock_wait_state(struct sock *sk, int state, unsigned long timeo)
+ {
+ DECLARE_WAITQUEUE(wait, current);
+- long timeo = sock_sndtimeo(sk, flags & O_NONBLOCK);
+ int err = 0;
+
+ BT_DBG("sk %p", sk);
+
+ add_wait_queue(sk->sleep, &wait);
+- while (sk->state != BT_CONNECTED) {
++ while (sk->state != state) {
+ set_current_state(TASK_INTERRUPTIBLE);
++
+ if (!timeo) {
+ err = -EAGAIN;
+ break;
+ }
+
++ if (signal_pending(current)) {
++ err = sock_intr_errno(timeo);
++ break;
++ }
++
+ release_sock(sk);
+ timeo = schedule_timeout(timeo);
+ lock_sock(sk);
+
+- err = 0;
+- if (sk->state == BT_CONNECTED)
+- break;
+-
+ if (sk->err) {
+ err = sock_error(sk);
+ break;
+ }
+-
+- if (signal_pending(current)) {
+- err = sock_intr_errno(timeo);
+- break;
+- }
+ }
+ set_current_state(TASK_RUNNING);
+ remove_wait_queue(sk->sleep, &wait);
+diff -Nur c3000_pre/linux/net/bluetooth/bnep/Config.in c3000_work/linux/net/bluetooth/bnep/Config.in
+--- c3000_pre/linux/net/bluetooth/bnep/Config.in 2004-08-21 09:49:19.000000000 +0900
++++ c3000_work/linux/net/bluetooth/bnep/Config.in 2004-12-16 23:01:14.000000000 +0900
+@@ -1,6 +1,11 @@
++#
++# Bluetooth BNEP layer configuration
++#
+
+ dep_tristate 'BNEP protocol support' CONFIG_BLUEZ_BNEP $CONFIG_BLUEZ_L2CAP
++
+ if [ "$CONFIG_BLUEZ_BNEP" != "n" ]; then
+- bool ' Multicast filter support' CONFIG_BNEP_MC_FILTER
+- bool ' Protocol filter support' CONFIG_BNEP_PROTO_FILTER
++ bool ' Multicast filter support' CONFIG_BLUEZ_BNEP_MC_FILTER
++ bool ' Protocol filter support' CONFIG_BLUEZ_BNEP_PROTO_FILTER
+ fi
++
+diff -Nur c3000_pre/linux/net/bluetooth/bnep/Makefile c3000_work/linux/net/bluetooth/bnep/Makefile
+--- c3000_pre/linux/net/bluetooth/bnep/Makefile 2004-08-21 09:49:19.000000000 +0900
++++ c3000_work/linux/net/bluetooth/bnep/Makefile 2004-12-16 23:01:14.000000000 +0900
+@@ -1,5 +1,5 @@
+ #
+-# Makefile for BNEP protocol
++# Makefile for the Linux Bluetooth BNEP layer
+ #
+
+ O_TARGET := bnep.o
+diff -Nur c3000_pre/linux/net/bluetooth/bnep/bnep.h c3000_work/linux/net/bluetooth/bnep/bnep.h
+--- c3000_pre/linux/net/bluetooth/bnep/bnep.h 2004-08-21 09:49:19.000000000 +0900
++++ c3000_work/linux/net/bluetooth/bnep/bnep.h 2004-12-16 23:01:14.000000000 +0900
+@@ -112,25 +112,25 @@
+ __u8 data[0];
+ } __attribute__((packed));
+
+-// Ioctl interface
+-#define BNEPCONADD 1
+-#define BNEPCONDEL 2
+-#define BNEPGETCONLIST 3
+-#define BNEPGETCONINFO 4
++/* BNEP ioctl defines */
++#define BNEPCONNADD _IOW('B', 200, int)
++#define BNEPCONNDEL _IOW('B', 201, int)
++#define BNEPGETCONNLIST _IOR('B', 210, int)
++#define BNEPGETCONNINFO _IOR('B', 211, int)
+
+-struct bnep_conadd_req {
++struct bnep_connadd_req {
+ int sock; // Connected socket
+ __u32 flags;
+ __u16 role;
+ char device[16]; // Name of the Ethernet device
+ };
+
+-struct bnep_condel_req {
++struct bnep_conndel_req {
+ __u32 flags;
+ __u8 dst[ETH_ALEN];
+ };
+
+-struct bnep_coninfo {
++struct bnep_conninfo {
+ __u32 flags;
+ __u16 role;
+ __u16 state;
+@@ -138,9 +138,9 @@
+ char device[16];
+ };
+
+-struct bnep_conlist_req {
++struct bnep_connlist_req {
+ __u32 cnum;
+- struct bnep_coninfo *ci;
++ struct bnep_conninfo *ci;
+ };
+
+ struct bnep_proto_filter {
+@@ -148,10 +148,10 @@
+ __u16 end;
+ };
+
+-int bnep_add_connection(struct bnep_conadd_req *req, struct socket *sock);
+-int bnep_del_connection(struct bnep_condel_req *req);
+-int bnep_get_conlist(struct bnep_conlist_req *req);
+-int bnep_get_coninfo(struct bnep_coninfo *ci);
++int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock);
++int bnep_del_connection(struct bnep_conndel_req *req);
++int bnep_get_connlist(struct bnep_connlist_req *req);
++int bnep_get_conninfo(struct bnep_conninfo *ci);
+
+ // BNEP sessions
+ struct bnep_session {
+diff -Nur c3000_pre/linux/net/bluetooth/bnep/core.c c3000_work/linux/net/bluetooth/bnep/core.c
+--- c3000_pre/linux/net/bluetooth/bnep/core.c 2004-08-21 09:49:19.000000000 +0900
++++ c3000_work/linux/net/bluetooth/bnep/core.c 2004-12-16 23:01:14.000000000 +0900
+@@ -58,17 +58,17 @@
+
+ #include "bnep.h"
+
+-#ifndef CONFIG_BNEP_DEBUG
++#ifndef CONFIG_BLUEZ_BNEP_DEBUG
+ #undef BT_DBG
+ #define BT_DBG(D...)
+ #endif
+
+-#define VERSION "1.0"
++#define VERSION "1.2"
+
+ static LIST_HEAD(bnep_session_list);
+ static DECLARE_RWSEM(bnep_session_sem);
+
+-static struct bnep_session *__bnep_get_session(__u8 *dst)
++static struct bnep_session *__bnep_get_session(u8 *dst)
+ {
+ struct bnep_session *s;
+ struct list_head *p;
+@@ -104,7 +104,7 @@
+ return sock->ops->sendmsg(sock, &s->msg, len, NULL);
+ }
+
+-static int bnep_send_rsp(struct bnep_session *s, __u8 ctrl, __u16 resp)
++static int bnep_send_rsp(struct bnep_session *s, u8 ctrl, u16 resp)
+ {
+ struct bnep_control_rsp rsp;
+ rsp.type = BNEP_CONTROL;
+@@ -113,23 +113,37 @@
+ return bnep_send(s, &rsp, sizeof(rsp));
+ }
+
+-static int bnep_ctrl_set_netfilter(struct bnep_session *s, struct sk_buff *skb)
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
++static inline void bnep_set_default_proto_filter(struct bnep_session *s)
++{
++ /* (IPv4, ARP) */
++ s->proto_filter[0].start = htons(0x0800);
++ s->proto_filter[0].end = htons(0x0806);
++ /* (RARP, AppleTalk) */
++ s->proto_filter[1].start = htons(0x8035);
++ s->proto_filter[1].end = htons(0x80F3);
++ /* (IPX, IPv6) */
++ s->proto_filter[2].start = htons(0x8137);
++ s->proto_filter[2].end = htons(0x86DD);
++}
++#endif
++
++static int bnep_ctrl_set_netfilter(struct bnep_session *s, u16 *data, int len)
+ {
+- __u16 *data;
+ int n;
+-
+- data = (void *) skb->data;
+- if (!skb_pull(skb, 2))
++
++ if (len < 2)
+ return -EILSEQ;
++
+ n = ntohs(get_unaligned(data));
++ data++; len -= 2;
+
+- data = (void *) skb->data;
+- if (!skb_pull(skb, n))
++ if (len < n)
+ return -EILSEQ;
+
+ BT_DBG("filter len %d", n);
+
+-#ifdef CONFIG_BNEP_PROTO_FILTER
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
+ n /= 4;
+ if (n <= BNEP_MAX_PROTO_FILTERS) {
+ struct bnep_proto_filter *f = s->proto_filter;
+@@ -142,9 +156,13 @@
+ BT_DBG("proto filter start %d end %d",
+ f[i].start, f[i].end);
+ }
++
+ if (i < BNEP_MAX_PROTO_FILTERS)
+ memset(f + i, 0, sizeof(*f));
+
++ if (n == 0)
++ bnep_set_default_proto_filter(s);
++
+ bnep_send_rsp(s, BNEP_FILTER_NET_TYPE_RSP, BNEP_SUCCESS);
+ } else {
+ bnep_send_rsp(s, BNEP_FILTER_NET_TYPE_RSP, BNEP_FILTER_LIMIT_REACHED);
+@@ -155,23 +173,22 @@
+ return 0;
+ }
+
+-static int bnep_ctrl_set_mcfilter(struct bnep_session *s, struct sk_buff *skb)
++static int bnep_ctrl_set_mcfilter(struct bnep_session *s, u8 *data, int len)
+ {
+- u8 *data;
+ int n;
+-
+- data = (void *) skb->data;
+- if (!skb_pull(skb, 2))
++
++ if (len < 2)
+ return -EILSEQ;
+- n = ntohs(get_unaligned((u16 *) data));
+
+- data = (void *) skb->data;
+- if (!skb_pull(skb, n))
++ n = ntohs(get_unaligned((u16 *) data));
++ data += 2; len -= 2;
++
++ if (len < n)
+ return -EILSEQ;
+
+ BT_DBG("filter len %d", n);
+
+-#ifdef CONFIG_BNEP_MC_FILTER
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
+ n /= (ETH_ALEN * 2);
+
+ if (n > 0) {
+@@ -210,12 +227,13 @@
+ return 0;
+ }
+
+-static int bnep_rx_control(struct bnep_session *s, struct sk_buff *skb)
++static int bnep_rx_control(struct bnep_session *s, void *data, int len)
+ {
++ u8 cmd = *(u8 *)data;
+ int err = 0;
+- __u8 cmd = *(__u8 *) skb->data;
+- skb_pull(skb, 1);
+-
++
++ data++; len--;
++
+ switch (cmd) {
+ case BNEP_CMD_NOT_UNDERSTOOD:
+ case BNEP_SETUP_CONN_REQ:
+@@ -226,15 +244,15 @@
+ break;
+
+ case BNEP_FILTER_NET_TYPE_SET:
+- err = bnep_ctrl_set_netfilter(s, skb);
++ err = bnep_ctrl_set_netfilter(s, data, len);
+ break;
+
+ case BNEP_FILTER_MULTI_ADDR_SET:
+- err = bnep_ctrl_set_mcfilter(s, skb);
++ err = bnep_ctrl_set_mcfilter(s, data, len);
+ break;
+
+ default: {
+- __u8 pkt[3];
++ u8 pkt[3];
+ pkt[0] = BNEP_CONTROL;
+ pkt[1] = BNEP_CMD_NOT_UNDERSTOOD;
+ pkt[2] = cmd;
+@@ -262,21 +280,24 @@
+
+ switch (h->type & BNEP_TYPE_MASK) {
+ case BNEP_EXT_CONTROL:
+- err = bnep_rx_control(s, skb);
++ bnep_rx_control(s, skb->data, skb->len);
+ break;
+
+ default:
+- /* Unknown extension */
+- if (!skb_pull(skb, h->len))
+- err = -EILSEQ;
++ /* Unknown extension, skip it. */
++ break;
++ }
++
++ if (!skb_pull(skb, h->len)) {
++ err = -EILSEQ;
+ break;
+ }
+ } while (!err && (h->type & BNEP_EXT_HEADER));
+-
++
+ return err;
+ }
+
+-static __u8 __bnep_rx_hlen[] = {
++static u8 __bnep_rx_hlen[] = {
+ ETH_HLEN, /* BNEP_GENERAL */
+ 0, /* BNEP_CONTROL */
+ 2, /* BNEP_COMPRESSED */
+@@ -289,18 +310,18 @@
+ {
+ struct net_device *dev = &s->dev;
+ struct sk_buff *nskb;
+- __u8 type;
++ u8 type;
+
+ dev->last_rx = jiffies;
+ s->stats.rx_bytes += skb->len;
+
+- type = *(__u8 *) skb->data; skb_pull(skb, 1);
++ type = *(u8 *) skb->data; skb_pull(skb, 1);
+
+ if ((type & BNEP_TYPE_MASK) > BNEP_RX_TYPES)
+ goto badframe;
+-
++
+ if ((type & BNEP_TYPE_MASK) == BNEP_CONTROL) {
+- bnep_rx_control(s, skb);
++ bnep_rx_control(s, skb->data, skb->len);
+ kfree_skb(skb);
+ return 0;
+ }
+@@ -311,7 +332,7 @@
+ if (!skb_pull(skb, __bnep_rx_hlen[type & BNEP_TYPE_MASK]))
+ goto badframe;
+
+- s->eh.h_proto = get_unaligned((__u16 *) (skb->data - 2));
++ s->eh.h_proto = get_unaligned((u16 *) (skb->data - 2));
+
+ if (type & BNEP_EXT_HEADER) {
+ if (bnep_rx_extension(s, skb) < 0)
+@@ -322,9 +343,9 @@
+ if (ntohs(s->eh.h_proto) == 0x8100) {
+ if (!skb_pull(skb, 4))
+ goto badframe;
+- s->eh.h_proto = get_unaligned((__u16 *) (skb->data - 2));
++ s->eh.h_proto = get_unaligned((u16 *) (skb->data - 2));
+ }
+-
++
+ /* We have to alloc new skb and copy data here :(. Because original skb
+ * may not be modified and because of the alignment requirements. */
+ nskb = alloc_skb(2 + ETH_HLEN + skb->len, GFP_KERNEL);
+@@ -340,11 +361,11 @@
+ case BNEP_COMPRESSED:
+ memcpy(__skb_put(nskb, ETH_HLEN), &s->eh, ETH_HLEN);
+ break;
+-
++
+ case BNEP_COMPRESSED_SRC_ONLY:
+ memcpy(__skb_put(nskb, ETH_ALEN), s->eh.h_dest, ETH_ALEN);
+ memcpy(__skb_put(nskb, ETH_ALEN), skb->mac.raw, ETH_ALEN);
+- put_unaligned(s->eh.h_proto, (__u16 *) __skb_put(nskb, 2));
++ put_unaligned(s->eh.h_proto, (u16 *) __skb_put(nskb, 2));
+ break;
+
+ case BNEP_COMPRESSED_DST_ONLY:
+@@ -354,13 +375,13 @@
+
+ case BNEP_GENERAL:
+ memcpy(__skb_put(nskb, ETH_ALEN * 2), skb->mac.raw, ETH_ALEN * 2);
+- put_unaligned(s->eh.h_proto, (__u16 *) __skb_put(nskb, 2));
++ put_unaligned(s->eh.h_proto, (u16 *) __skb_put(nskb, 2));
+ break;
+ }
+
+ memcpy(__skb_put(nskb, skb->len), skb->data, skb->len);
+ kfree_skb(skb);
+-
++
+ s->stats.rx_packets++;
+ nskb->dev = dev;
+ nskb->ip_summed = CHECKSUM_UNNECESSARY;
+@@ -374,7 +395,7 @@
+ return 0;
+ }
+
+-static __u8 __bnep_tx_types[] = {
++static u8 __bnep_tx_types[] = {
+ BNEP_GENERAL,
+ BNEP_COMPRESSED_SRC_ONLY,
+ BNEP_COMPRESSED_DST_ONLY,
+@@ -387,7 +408,7 @@
+ struct socket *sock = s->sock;
+ struct iovec iv[3];
+ int len = 0, il = 0;
+- __u8 type = 0;
++ u8 type = 0;
+
+ BT_DBG("skb %p dev %p type %d", skb, skb->dev, skb->pkt_type);
+
+@@ -424,9 +445,9 @@
+ send:
+ iv[il++] = (struct iovec) { skb->data, skb->len };
+ len += skb->len;
+-
++
+ /* FIXME: linearize skb */
+-
++
+ s->msg.msg_iov = iv;
+ s->msg.msg_iovlen = il;
+ len = sock->ops->sendmsg(sock, &s->msg, len, NULL);
+@@ -451,16 +472,16 @@
+
+ BT_DBG("");
+
+- daemonize(); reparent_to_init();
++ daemonize(); reparent_to_init();
+
+- sprintf(current->comm, "kbnepd %s", dev->name);
+-
+- sigfillset(&current->blocked);
++ sprintf(current->comm, "kbnepd %s", dev->name);
++
++ sigfillset(&current->blocked);
+ flush_signals(current);
+
+ current->nice = -15;
+
+- set_fs(KERNEL_DS);
++ set_fs(KERNEL_DS);
+
+ init_waitqueue_entry(&wait, current);
+ add_wait_queue(sk->sleep, &wait);
+@@ -475,13 +496,13 @@
+
+ if (sk->state != BT_CONNECTED)
+ break;
+-
++
+ // TX
+ while ((skb = skb_dequeue(&sk->write_queue)))
+ if (bnep_tx_frame(s, skb))
+ break;
+ netif_wake_queue(dev);
+-
++
+ schedule();
+ }
+ set_current_state(TASK_RUNNING);
+@@ -503,11 +524,11 @@
+ return 0;
+ }
+
+-int bnep_add_connection(struct bnep_conadd_req *req, struct socket *sock)
++int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock)
+ {
+ struct net_device *dev;
+ struct bnep_session *s, *ss;
+- __u8 dst[ETH_ALEN], src[ETH_ALEN];
++ u8 dst[ETH_ALEN], src[ETH_ALEN];
+ int err;
+
+ BT_DBG("");
+@@ -535,6 +556,8 @@
+ else
+ strcpy(dev->name, "bnep%d");
+
++ memset(dev->broadcast, 0xff, ETH_ALEN);
++
+ /* This is rx header therefor addresses are swaped.
+ * ie eh.h_dest is our local address. */
+ memcpy(s->eh.h_dest, &src, ETH_ALEN);
+@@ -543,28 +566,19 @@
+ s->sock = sock;
+ s->role = req->role;
+ s->state = BT_CONNECTED;
+-
++
+ s->msg.msg_flags = MSG_NOSIGNAL;
+
+-#ifdef CONFIG_BNEP_MC_FILTER
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
+ /* Set default mc filter */
+ set_bit(bnep_mc_hash(dev->broadcast), &s->mc_filter);
+ #endif
+-
+-#ifdef CONFIG_BNEP_PROTO_FILTER
+- /* Set default protocol filter */
+
+- /* (IPv4, ARP) */
+- s->proto_filter[0].start = htons(0x0800);
+- s->proto_filter[0].end = htons(0x0806);
+- /* (RARP, AppleTalk) */
+- s->proto_filter[1].start = htons(0x8035);
+- s->proto_filter[1].end = htons(0x80F3);
+- /* (IPX, IPv6) */
+- s->proto_filter[2].start = htons(0x8137);
+- s->proto_filter[2].end = htons(0x86DD);
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
++ /* Set default protocol filter */
++ bnep_set_default_proto_filter(s);
+ #endif
+-
++
+ dev->init = bnep_net_init;
+ dev->priv = s;
+ err = register_netdev(dev);
+@@ -573,7 +587,7 @@
+ }
+
+ __bnep_link_session(s);
+-
++
+ err = kernel_thread(bnep_session, s, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
+ if (err < 0) {
+ /* Session thread start failed, gotta cleanup. */
+@@ -592,7 +606,7 @@
+ return err;
+ }
+
+-int bnep_del_connection(struct bnep_condel_req *req)
++int bnep_del_connection(struct bnep_conndel_req *req)
+ {
+ struct bnep_session *s;
+ int err = 0;
+@@ -617,7 +631,7 @@
+ return err;
+ }
+
+-static void __bnep_copy_ci(struct bnep_coninfo *ci, struct bnep_session *s)
++static void __bnep_copy_ci(struct bnep_conninfo *ci, struct bnep_session *s)
+ {
+ memcpy(ci->dst, s->eh.h_source, ETH_ALEN);
+ strcpy(ci->device, s->dev.name);
+@@ -626,7 +640,7 @@
+ ci->role = s->role;
+ }
+
+-int bnep_get_conlist(struct bnep_conlist_req *req)
++int bnep_get_connlist(struct bnep_connlist_req *req)
+ {
+ struct list_head *p;
+ int err = 0, n = 0;
+@@ -635,7 +649,7 @@
+
+ list_for_each(p, &bnep_session_list) {
+ struct bnep_session *s;
+- struct bnep_coninfo ci;
++ struct bnep_conninfo ci;
+
+ s = list_entry(p, struct bnep_session, list);
+
+@@ -657,7 +671,7 @@
+ return err;
+ }
+
+-int bnep_get_coninfo(struct bnep_coninfo *ci)
++int bnep_get_conninfo(struct bnep_conninfo *ci)
+ {
+ struct bnep_session *s;
+ int err = 0;
+@@ -676,17 +690,16 @@
+
+ static int __init bnep_init_module(void)
+ {
+- BT_INFO("BNEP: BNEP2 ver %s\n"
+- "BNEP: Copyright (C) 2002 Inventel\n"
+- "BNEP: Written 2001,2002 by\n"
+- "BNEP: \tClement Moreau <clement.moreau@inventel.fr> "
+- "David Libault <david.libault@inventel.fr>\n"
+- "BNEP: Copyright (C) 2002 Maxim Krasnyanskiy <maxk@qualcomm.com>",
+- VERSION);
++ l2cap_load();
+
++ bnep_crc32_init();
+ bnep_sock_init();
+
+- bnep_crc32_init();
++ BT_INFO("BlueZ BNEP ver %s", VERSION);
++ BT_INFO("Copyright (C) 2001,2002 Inventel Systemes");
++ BT_INFO("Written 2001,2002 by Clement Moreau <clement.moreau@inventel.fr>");
++ BT_INFO("Written 2001,2002 by David Libault <david.libault@inventel.fr>");
++ BT_INFO("Copyright (C) 2002 Maxim Krasnyanskiy <maxk@qualcomm.com>");
+
+ return 0;
+ }
+@@ -694,13 +707,12 @@
+ static void __exit bnep_cleanup_module(void)
+ {
+ bnep_sock_cleanup();
+-
+ bnep_crc32_cleanup();
+ }
+
+ module_init(bnep_init_module);
+ module_exit(bnep_cleanup_module);
+
+-MODULE_DESCRIPTION("BNEP2 ver " VERSION);
+-MODULE_AUTHOR("David Libault <david.libault@inventel.fr> Maxim Krasnyanskiy <maxk@qualcomm.com>");
++MODULE_DESCRIPTION("BlueZ BNEP ver " VERSION);
++MODULE_AUTHOR("David Libault <david.libault@inventel.fr>, Maxim Krasnyanskiy <maxk@qualcomm.com>");
+ MODULE_LICENSE("GPL");
+diff -Nur c3000_pre/linux/net/bluetooth/bnep/netdev.c c3000_work/linux/net/bluetooth/bnep/netdev.c
+--- c3000_pre/linux/net/bluetooth/bnep/netdev.c 2004-08-21 09:49:19.000000000 +0900
++++ c3000_work/linux/net/bluetooth/bnep/netdev.c 2004-12-16 23:01:14.000000000 +0900
+@@ -46,7 +46,7 @@
+
+ #include "bnep.h"
+
+-#ifndef CONFIG_BNEP_DEBUG
++#ifndef CONFIG_BLUEZ_BNEP_DEBUG
+ #undef BT_DBG
+ #define BT_DBG( A... )
+ #endif
+@@ -73,7 +73,7 @@
+
+ static void bnep_net_set_mc_list(struct net_device *dev)
+ {
+-#ifdef CONFIG_BNEP_MC_FILTER
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
+ struct bnep_session *s = dev->priv;
+ struct sock *sk = s->sock->sk;
+ struct bnep_set_filter_req *r;
+@@ -143,27 +143,31 @@
+ return -EINVAL;
+ }
+
+-#ifdef CONFIG_BNEP_MC_FILTER
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
+ static inline int bnep_net_mc_filter(struct sk_buff *skb, struct bnep_session *s)
+ {
+ struct ethhdr *eh = (void *) skb->data;
+
+- if ((eh->h_dest[0] & 1) && !test_bit(bnep_mc_hash(eh->h_dest), &s->mc_filter))
++ if ((eh->h_dest[0] & 1) && !test_bit(bnep_mc_hash(eh->h_dest), &s->mc_filter)) {
++ BT_DBG("BNEP: filtered skb %p, dst %.2x:%.2x:%.2x:%.2x:%.2x:%.2x", skb,
++ eh->h_dest[0], eh->h_dest[1], eh->h_dest[2],
++ eh->h_dest[3], eh->h_dest[4], eh->h_dest[5]);
+ return 1;
++ }
+ return 0;
+ }
+ #endif
+
+-#ifdef CONFIG_BNEP_PROTO_FILTER
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
+ /* Determine ether protocol. Based on eth_type_trans. */
+-static inline __u16 bnep_net_eth_proto(struct sk_buff *skb)
++static inline u16 bnep_net_eth_proto(struct sk_buff *skb)
+ {
+ struct ethhdr *eh = (void *) skb->data;
+
+ if (ntohs(eh->h_proto) >= 1536)
+ return eh->h_proto;
+
+- if (get_unaligned((__u16 *) skb->data) == 0xFFFF)
++ if (get_unaligned((u16 *) skb->data) == 0xFFFF)
+ return htons(ETH_P_802_3);
+
+ return htons(ETH_P_802_2);
+@@ -171,7 +175,7 @@
+
+ static inline int bnep_net_proto_filter(struct sk_buff *skb, struct bnep_session *s)
+ {
+- __u16 proto = bnep_net_eth_proto(skb);
++ u16 proto = bnep_net_eth_proto(skb);
+ struct bnep_proto_filter *f = s->proto_filter;
+ int i;
+
+@@ -192,14 +196,14 @@
+
+ BT_DBG("skb %p, dev %p", skb, dev);
+
+-#ifdef CONFIG_BNEP_MC_FILTER
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
+ if (bnep_net_mc_filter(skb, s)) {
+ kfree_skb(skb);
+ return 0;
+ }
+ #endif
+
+-#ifdef CONFIG_BNEP_PROTO_FILTER
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
+ if (bnep_net_proto_filter(skb, s)) {
+ kfree_skb(skb);
+ return 0;
+diff -Nur c3000_pre/linux/net/bluetooth/bnep/sock.c c3000_work/linux/net/bluetooth/bnep/sock.c
+--- c3000_pre/linux/net/bluetooth/bnep/sock.c 2004-08-21 09:49:19.000000000 +0900
++++ c3000_work/linux/net/bluetooth/bnep/sock.c 2004-12-16 23:01:14.000000000 +0900
+@@ -50,41 +50,11 @@
+
+ #include "bnep.h"
+
+-#ifndef CONFIG_BNEP_DEBUG
++#ifndef CONFIG_BLUEZ_BNEP_DEBUG
+ #undef BT_DBG
+ #define BT_DBG( A... )
+ #endif
+
+-static inline struct socket *socki_lookup(struct inode *inode)
+-{
+- return &inode->u.socket_i;
+-}
+-
+-static struct socket *sockfd_lookup(int fd, int *err)
+-{
+- struct file *file;
+- struct inode *inode;
+- struct socket *sock;
+-
+- if (!(file = fget(fd))) {
+- *err = -EBADF;
+- return NULL;
+- }
+-
+- inode = file->f_dentry->d_inode;
+- if (!inode->i_sock || !(sock = socki_lookup(inode))) {
+- *err = -ENOTSOCK;
+- fput(file);
+- return NULL;
+- }
+-
+- if (sock->file != file) {
+- printk(KERN_ERR "socki_lookup: socket file changed!\n");
+- sock->file = file;
+- }
+- return sock;
+-}
+-
+ static int bnep_sock_release(struct socket *sock)
+ {
+ struct sock *sk = sock->sk;
+@@ -103,17 +73,17 @@
+
+ static int bnep_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
+ {
+- struct bnep_conlist_req cl;
+- struct bnep_conadd_req ca;
+- struct bnep_condel_req cd;
+- struct bnep_coninfo ci;
++ struct bnep_connlist_req cl;
++ struct bnep_connadd_req ca;
++ struct bnep_conndel_req cd;
++ struct bnep_conninfo ci;
+ struct socket *nsock;
+ int err;
+
+ BT_DBG("cmd %x arg %lx", cmd, arg);
+
+ switch (cmd) {
+- case BNEPCONADD:
++ case BNEPCONNADD:
+ if (!capable(CAP_NET_ADMIN))
+ return -EACCES;
+
+@@ -124,8 +94,10 @@
+ if (!nsock)
+ return err;
+
+- if (nsock->sk->state != BT_CONNECTED)
++ if (nsock->sk->state != BT_CONNECTED) {
++ fput(nsock->file);
+ return -EBADFD;
++ }
+
+ err = bnep_add_connection(&ca, nsock);
+ if (!err) {
+@@ -136,7 +108,7 @@
+
+ return err;
+
+- case BNEPCONDEL:
++ case BNEPCONNDEL:
+ if (!capable(CAP_NET_ADMIN))
+ return -EACCES;
+
+@@ -145,24 +117,24 @@
+
+ return bnep_del_connection(&cd);
+
+- case BNEPGETCONLIST:
++ case BNEPGETCONNLIST:
+ if (copy_from_user(&cl, (void *) arg, sizeof(cl)))
+ return -EFAULT;
+
+ if (cl.cnum <= 0)
+ return -EINVAL;
+
+- err = bnep_get_conlist(&cl);
++ err = bnep_get_connlist(&cl);
+ if (!err && copy_to_user((void *) arg, &cl, sizeof(cl)))
+ return -EFAULT;
+
+ return err;
+
+- case BNEPGETCONINFO:
++ case BNEPGETCONNINFO:
+ if (copy_from_user(&ci, (void *) arg, sizeof(ci)))
+ return -EFAULT;
+
+- err = bnep_get_coninfo(&ci);
++ err = bnep_get_conninfo(&ci);
+ if (!err && copy_to_user((void *) arg, &ci, sizeof(ci)))
+ return -EFAULT;
+
+diff -Nur c3000_pre/linux/net/bluetooth/cmtp/Config.in c3000_work/linux/net/bluetooth/cmtp/Config.in
+--- c3000_pre/linux/net/bluetooth/cmtp/Config.in 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/net/bluetooth/cmtp/Config.in 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,7 @@
++#
++# Bluetooth CMTP layer configuration
++#
++
++if [ "$CONFIG_ISDN" = "y" -o "$CONFIG_ISDN" = "m" ]; then
++ dep_tristate 'CMTP protocol support' CONFIG_BLUEZ_CMTP $CONFIG_ISDN_CAPI $CONFIG_BLUEZ_L2CAP
++fi
+diff -Nur c3000_pre/linux/net/bluetooth/cmtp/Makefile c3000_work/linux/net/bluetooth/cmtp/Makefile
+--- c3000_pre/linux/net/bluetooth/cmtp/Makefile 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/net/bluetooth/cmtp/Makefile 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,10 @@
++#
++# Makefile for the Linux Bluetooth CMTP layer
++#
++
++O_TARGET := cmtp.o
++
++obj-y := core.o sock.o capi.o
++obj-m += $(O_TARGET)
++
++include $(TOPDIR)/Rules.make
+diff -Nur c3000_pre/linux/net/bluetooth/cmtp/capi.c c3000_work/linux/net/bluetooth/cmtp/capi.c
+--- c3000_pre/linux/net/bluetooth/cmtp/capi.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/net/bluetooth/cmtp/capi.c 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,707 @@
++/*
++ CMTP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <net/sock.h>
++
++#include <linux/capi.h>
++
++#include "../drivers/isdn/avmb1/capilli.h"
++#include "../drivers/isdn/avmb1/capicmd.h"
++#include "../drivers/isdn/avmb1/capiutil.h"
++
++#include "cmtp.h"
++
++#ifndef CONFIG_BLUEZ_CMTP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define REVISION "1.0"
++
++#define CAPI_INTEROPERABILITY 0x20
++
++#define CAPI_INTEROPERABILITY_REQ CAPICMD(CAPI_INTEROPERABILITY, CAPI_REQ)
++#define CAPI_INTEROPERABILITY_CONF CAPICMD(CAPI_INTEROPERABILITY, CAPI_CONF)
++#define CAPI_INTEROPERABILITY_IND CAPICMD(CAPI_INTEROPERABILITY, CAPI_IND)
++#define CAPI_INTEROPERABILITY_RESP CAPICMD(CAPI_INTEROPERABILITY, CAPI_RESP)
++
++#define CAPI_INTEROPERABILITY_REQ_LEN (CAPI_MSG_BASELEN + 2)
++#define CAPI_INTEROPERABILITY_CONF_LEN (CAPI_MSG_BASELEN + 4)
++#define CAPI_INTEROPERABILITY_IND_LEN (CAPI_MSG_BASELEN + 2)
++#define CAPI_INTEROPERABILITY_RESP_LEN (CAPI_MSG_BASELEN + 2)
++
++#define CAPI_FUNCTION_REGISTER 0
++#define CAPI_FUNCTION_RELEASE 1
++#define CAPI_FUNCTION_GET_PROFILE 2
++#define CAPI_FUNCTION_GET_MANUFACTURER 3
++#define CAPI_FUNCTION_GET_VERSION 4
++#define CAPI_FUNCTION_GET_SERIAL_NUMBER 5
++#define CAPI_FUNCTION_MANUFACTURER 6
++#define CAPI_FUNCTION_LOOPBACK 7
++
++static struct capi_driver_interface *di;
++
++
++#define CMTP_MSGNUM 1
++#define CMTP_APPLID 2
++#define CMTP_MAPPING 3
++
++static struct cmtp_application *cmtp_application_add(struct cmtp_session *session, __u16 appl)
++{
++ struct cmtp_application *app = kmalloc(sizeof(*app), GFP_KERNEL);
++
++ BT_DBG("session %p application %p appl %d", session, app, appl);
++
++ if (!app)
++ return NULL;
++
++ memset(app, 0, sizeof(*app));
++
++ app->state = BT_OPEN;
++ app->appl = appl;
++
++ list_add_tail(&app->list, &session->applications);
++
++ return app;
++}
++
++static void cmtp_application_del(struct cmtp_session *session, struct cmtp_application *app)
++{
++ BT_DBG("session %p application %p", session, app);
++
++ if (app) {
++ list_del(&app->list);
++ kfree(app);
++ }
++}
++
++static struct cmtp_application *cmtp_application_get(struct cmtp_session *session, int pattern, __u16 value)
++{
++ struct cmtp_application *app;
++ struct list_head *p, *n;
++
++ list_for_each_safe(p, n, &session->applications) {
++ app = list_entry(p, struct cmtp_application, list);
++ switch (pattern) {
++ case CMTP_MSGNUM:
++ if (app->msgnum == value)
++ return app;
++ break;
++ case CMTP_APPLID:
++ if (app->appl == value)
++ return app;
++ break;
++ case CMTP_MAPPING:
++ if (app->mapping == value)
++ return app;
++ break;
++ }
++ }
++
++ return NULL;
++}
++
++static int cmtp_msgnum_get(struct cmtp_session *session)
++{
++ session->msgnum++;
++
++ if ((session->msgnum & 0xff) > 200)
++ session->msgnum = CMTP_INITIAL_MSGNUM + 1;
++
++ return session->msgnum;
++}
++
++
++static void cmtp_send_interopmsg(struct cmtp_session *session,
++ __u8 subcmd, __u16 appl, __u16 msgnum,
++ __u16 function, unsigned char *buf, int len)
++{
++ struct sk_buff *skb;
++ unsigned char *s;
++
++ BT_DBG("session %p subcmd 0x%02x appl %d msgnum %d", session, subcmd, appl, msgnum);
++
++ if (!(skb = alloc_skb(CAPI_MSG_BASELEN + 6 + len, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for interoperability packet");
++ return;
++ }
++
++ s = skb_put(skb, CAPI_MSG_BASELEN + 6 + len);
++
++ capimsg_setu16(s, 0, CAPI_MSG_BASELEN + 6 + len);
++ capimsg_setu16(s, 2, appl);
++ capimsg_setu8 (s, 4, CAPI_INTEROPERABILITY);
++ capimsg_setu8 (s, 5, subcmd);
++ capimsg_setu16(s, 6, msgnum);
++
++ /* Interoperability selector (Bluetooth Device Management) */
++ capimsg_setu16(s, 8, 0x0001);
++
++ capimsg_setu8 (s, 10, 3 + len);
++ capimsg_setu16(s, 11, function);
++ capimsg_setu8 (s, 13, len);
++
++ if (len > 0)
++ memcpy(s + 14, buf, len);
++
++ cmtp_send_capimsg(session, skb);
++}
++
++static void cmtp_recv_interopmsg(struct cmtp_session *session, struct sk_buff *skb)
++{
++ struct capi_ctr *ctrl = session->ctrl;
++ struct cmtp_application *application;
++ __u16 appl, msgnum, func, info;
++ __u32 controller;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ switch (CAPIMSG_SUBCOMMAND(skb->data)) {
++ case CAPI_CONF:
++ func = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 5);
++ info = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 8);
++
++ switch (func) {
++ case CAPI_FUNCTION_REGISTER:
++ msgnum = CAPIMSG_MSGID(skb->data);
++
++ application = cmtp_application_get(session, CMTP_MSGNUM, msgnum);
++ if (application) {
++ application->state = BT_CONNECTED;
++ application->msgnum = 0;
++ application->mapping = CAPIMSG_APPID(skb->data);
++ wake_up_interruptible(&session->wait);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_RELEASE:
++ appl = CAPIMSG_APPID(skb->data);
++
++ application = cmtp_application_get(session, CMTP_MAPPING, appl);
++ if (application) {
++ application->state = BT_CLOSED;
++ application->msgnum = 0;
++ wake_up_interruptible(&session->wait);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_GET_PROFILE:
++ controller = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 11);
++ msgnum = CAPIMSG_MSGID(skb->data);
++
++ if (!info && (msgnum == CMTP_INITIAL_MSGNUM)) {
++ session->ncontroller = controller;
++ wake_up_interruptible(&session->wait);
++ break;
++ }
++
++ if (!info && ctrl) {
++ memcpy(&ctrl->profile,
++ skb->data + CAPI_MSG_BASELEN + 11,
++ sizeof(capi_profile));
++ session->state = BT_CONNECTED;
++ ctrl->ready(ctrl);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_GET_MANUFACTURER:
++ controller = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 10);
++
++ if (!info && ctrl) {
++ strncpy(ctrl->manu,
++ skb->data + CAPI_MSG_BASELEN + 15,
++ skb->data[CAPI_MSG_BASELEN + 14]);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_GET_VERSION:
++ controller = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 12);
++
++ if (!info && ctrl) {
++ ctrl->version.majorversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 16);
++ ctrl->version.minorversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 20);
++ ctrl->version.majormanuversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 24);
++ ctrl->version.minormanuversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 28);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_GET_SERIAL_NUMBER:
++ controller = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 12);
++
++ if (!info && ctrl) {
++ memset(ctrl->serial, 0, CAPI_SERIAL_LEN);
++ strncpy(ctrl->serial,
++ skb->data + CAPI_MSG_BASELEN + 17,
++ skb->data[CAPI_MSG_BASELEN + 16]);
++ }
++
++ break;
++ }
++
++ break;
++
++ case CAPI_IND:
++ func = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 3);
++
++ if (func == CAPI_FUNCTION_LOOPBACK) {
++ appl = CAPIMSG_APPID(skb->data);
++ msgnum = CAPIMSG_MSGID(skb->data);
++ cmtp_send_interopmsg(session, CAPI_RESP, appl, msgnum, func,
++ skb->data + CAPI_MSG_BASELEN + 6,
++ skb->data[CAPI_MSG_BASELEN + 5]);
++ }
++
++ break;
++ }
++
++ kfree_skb(skb);
++}
++
++void cmtp_recv_capimsg(struct cmtp_session *session, struct sk_buff *skb)
++{
++ struct capi_ctr *ctrl = session->ctrl;
++ struct cmtp_application *application;
++ __u16 cmd, appl, info;
++ __u32 ncci, contr;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ if (CAPIMSG_COMMAND(skb->data) == CAPI_INTEROPERABILITY) {
++ cmtp_recv_interopmsg(session, skb);
++ return;
++ }
++
++ if (session->flags & (1 << CMTP_LOOPBACK)) {
++ kfree_skb(skb);
++ return;
++ }
++
++ cmd = CAPICMD(CAPIMSG_COMMAND(skb->data), CAPIMSG_SUBCOMMAND(skb->data));
++ appl = CAPIMSG_APPID(skb->data);
++ contr = CAPIMSG_CONTROL(skb->data);
++
++ application = cmtp_application_get(session, CMTP_MAPPING, appl);
++ if (application) {
++ appl = application->appl;
++ CAPIMSG_SETAPPID(skb->data, appl);
++ } else {
++ BT_ERR("Can't find application with id %d", appl);
++ kfree_skb(skb);
++ return;
++ }
++
++ if ((contr & 0x7f) == 0x01) {
++ contr = (contr & 0xffffff80) | session->num;
++ CAPIMSG_SETCONTROL(skb->data, contr);
++ }
++
++ if (!ctrl) {
++ BT_ERR("Can't find controller %d for message", session->num);
++ kfree_skb(skb);
++ return;
++ }
++
++ switch (cmd) {
++ case CAPI_CONNECT_B3_CONF:
++ ncci = CAPIMSG_NCCI(skb->data);
++ info = CAPIMSG_U16(skb->data, 12);
++
++ BT_DBG("CONNECT_B3_CONF ncci 0x%02x info 0x%02x", ncci, info);
++
++ if (info == 0)
++ ctrl->new_ncci(ctrl, appl, ncci, 8);
++
++ ctrl->handle_capimsg(ctrl, appl, skb);
++ break;
++
++ case CAPI_CONNECT_B3_IND:
++ ncci = CAPIMSG_NCCI(skb->data);
++
++ BT_DBG("CONNECT_B3_IND ncci 0x%02x", ncci);
++
++ ctrl->new_ncci(ctrl, appl, ncci, 8);
++ ctrl->handle_capimsg(ctrl, appl, skb);
++ break;
++
++ case CAPI_DISCONNECT_B3_IND:
++ ncci = CAPIMSG_NCCI(skb->data);
++
++ BT_DBG("DISCONNECT_B3_IND ncci 0x%02x", ncci);
++
++ if (ncci == 0xffffffff)
++ BT_ERR("DISCONNECT_B3_IND with ncci 0xffffffff");
++
++ ctrl->handle_capimsg(ctrl, appl, skb);
++ ctrl->free_ncci(ctrl, appl, ncci);
++ break;
++
++ default:
++ ctrl->handle_capimsg(ctrl, appl, skb);
++ break;
++ }
++}
++
++void cmtp_send_capimsg(struct cmtp_session *session, struct sk_buff *skb)
++{
++ struct cmtp_scb *scb = (void *) skb->cb;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ scb->id = -1;
++ scb->data = (CAPIMSG_COMMAND(skb->data) == CAPI_DATA_B3);
++
++ skb_queue_tail(&session->transmit, skb);
++
++ cmtp_schedule(session);
++}
++
++
++static int cmtp_load_firmware(struct capi_ctr *ctrl, capiloaddata *data)
++{
++ BT_DBG("ctrl %p data %p", ctrl, data);
++
++ return -EIO;
++}
++
++static void cmtp_reset_ctr(struct capi_ctr *ctrl)
++{
++ BT_DBG("ctrl %p", ctrl);
++
++ ctrl->reseted(ctrl);
++}
++
++static void cmtp_remove_ctr(struct capi_ctr *ctrl)
++{
++ struct cmtp_session *session = ctrl->driverdata;
++
++ BT_DBG("ctrl %p", ctrl);
++
++ ctrl->suspend_output(ctrl);
++
++ atomic_inc(&session->terminate);
++ cmtp_schedule(session);
++}
++
++static void cmtp_register_appl(struct capi_ctr *ctrl, __u16 appl, capi_register_params *rp)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct cmtp_session *session = ctrl->driverdata;
++ struct cmtp_application *application;
++ unsigned long timeo = CMTP_INTEROP_TIMEOUT;
++ unsigned char buf[8];
++ int err = 0, nconn, want = rp->level3cnt;
++
++ BT_DBG("ctrl %p appl %d level3cnt %d datablkcnt %d datablklen %d",
++ ctrl, appl, rp->level3cnt, rp->datablkcnt, rp->datablklen);
++
++ application = cmtp_application_add(session, appl);
++ if (!application) {
++ BT_ERR("Can't allocate memory for new application");
++ ctrl->appl_released(ctrl, appl);
++ return;
++ }
++
++ if (want < 0)
++ nconn = ctrl->profile.nbchannel * -want;
++ else
++ nconn = want;
++
++ if (nconn == 0)
++ nconn = ctrl->profile.nbchannel;
++
++ capimsg_setu16(buf, 0, nconn);
++ capimsg_setu16(buf, 2, rp->datablkcnt);
++ capimsg_setu16(buf, 4, rp->datablklen);
++
++ application->state = BT_CONFIG;
++ application->msgnum = cmtp_msgnum_get(session);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0x0000, application->msgnum,
++ CAPI_FUNCTION_REGISTER, buf, 6);
++
++ add_wait_queue(&session->wait, &wait);
++ while (1) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (!timeo) {
++ err = -EAGAIN;
++ break;
++ }
++
++ if (application->state == BT_CLOSED) {
++ err = -application->err;
++ break;
++ }
++
++ if (application->state == BT_CONNECTED)
++ break;
++
++ if (signal_pending(current)) {
++ err = -EINTR;
++ break;
++ }
++
++ timeo = schedule_timeout(timeo);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&session->wait, &wait);
++
++ if (err) {
++ ctrl->appl_released(ctrl, appl);
++ cmtp_application_del(session, application);
++ return;
++ }
++
++ ctrl->appl_registered(ctrl, appl);
++}
++
++static void cmtp_release_appl(struct capi_ctr *ctrl, __u16 appl)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct cmtp_session *session = ctrl->driverdata;
++ struct cmtp_application *application;
++ unsigned long timeo = CMTP_INTEROP_TIMEOUT;
++
++ BT_DBG("ctrl %p appl %d", ctrl, appl);
++
++ application = cmtp_application_get(session, CMTP_APPLID, appl);
++ if (!application) {
++ BT_ERR("Can't find application");
++ return;
++ }
++
++ application->msgnum = cmtp_msgnum_get(session);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, application->mapping, application->msgnum,
++ CAPI_FUNCTION_RELEASE, NULL, 0);
++
++ add_wait_queue(&session->wait, &wait);
++ while (timeo) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (application->state == BT_CLOSED)
++ break;
++
++ if (signal_pending(current))
++ break;
++
++ timeo = schedule_timeout(timeo);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&session->wait, &wait);
++
++ cmtp_application_del(session, application);
++ ctrl->appl_released(ctrl, appl);
++}
++
++static void cmtp_send_message(struct capi_ctr *ctrl, struct sk_buff *skb)
++{
++ struct cmtp_session *session = ctrl->driverdata;
++ struct cmtp_application *application;
++ __u16 appl;
++ __u32 contr;
++
++ BT_DBG("ctrl %p skb %p", ctrl, skb);
++
++ appl = CAPIMSG_APPID(skb->data);
++ contr = CAPIMSG_CONTROL(skb->data);
++
++ application = cmtp_application_get(session, CMTP_APPLID, appl);
++ if ((!application) || (application->state != BT_CONNECTED)) {
++ BT_ERR("Can't find application with id %d", appl);
++ kfree_skb(skb);
++ return;
++ }
++
++ CAPIMSG_SETAPPID(skb->data, application->mapping);
++
++ if ((contr & 0x7f) == session->num) {
++ contr = (contr & 0xffffff80) | 0x01;
++ CAPIMSG_SETCONTROL(skb->data, contr);
++ }
++
++ cmtp_send_capimsg(session, skb);
++}
++
++static char *cmtp_procinfo(struct capi_ctr *ctrl)
++{
++ return "CAPI Message Transport Protocol";
++}
++
++static int cmtp_ctr_read_proc(char *page, char **start, off_t off, int count, int *eof, struct capi_ctr *ctrl)
++{
++ struct cmtp_session *session = ctrl->driverdata;
++ struct cmtp_application *app;
++ struct list_head *p, *n;
++ int len = 0;
++
++ len += sprintf(page + len, "%s (Revision %s)\n\n", cmtp_procinfo(ctrl), REVISION);
++ len += sprintf(page + len, "addr %s\n", session->name);
++ len += sprintf(page + len, "ctrl %d\n", session->num);
++
++ list_for_each_safe(p, n, &session->applications) {
++ app = list_entry(p, struct cmtp_application, list);
++ len += sprintf(page + len, "appl %d -> %d\n", app->appl, app->mapping);
++ }
++
++ if (off + count >= len)
++ *eof = 1;
++
++ if (len < off)
++ return 0;
++
++ *start = page + off;
++
++ return ((count < len - off) ? count : len - off);
++}
++
++static struct capi_driver cmtp_driver = {
++ name: "cmtp",
++ revision: REVISION,
++ load_firmware: cmtp_load_firmware,
++ reset_ctr: cmtp_reset_ctr,
++ remove_ctr: cmtp_remove_ctr,
++ register_appl: cmtp_register_appl,
++ release_appl: cmtp_release_appl,
++ send_message: cmtp_send_message,
++ procinfo: cmtp_procinfo,
++ ctr_read_proc: cmtp_ctr_read_proc,
++
++ driver_read_proc: 0,
++ add_card: 0,
++};
++
++
++int cmtp_attach_device(struct cmtp_session *session)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ unsigned long timeo = CMTP_INTEROP_TIMEOUT;
++ unsigned char buf[4];
++
++ BT_DBG("session %p", session);
++
++ capimsg_setu32(buf, 0, 0);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, CMTP_INITIAL_MSGNUM,
++ CAPI_FUNCTION_GET_PROFILE, buf, 4);
++
++ add_wait_queue(&session->wait, &wait);
++ while (timeo) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (session->ncontroller)
++ break;
++
++ if (signal_pending(current))
++ break;
++
++ timeo = schedule_timeout(timeo);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&session->wait, &wait);
++
++ BT_INFO("Found %d CAPI controller(s) on device %s", session->ncontroller, session->name);
++
++ if (!timeo)
++ return -ETIMEDOUT;
++
++ if (!session->ncontroller)
++ return -ENODEV;
++
++
++ if (session->ncontroller > 1)
++ BT_INFO("Setting up only CAPI controller 1");
++
++ if (!(session->ctrl = di->attach_ctr(&cmtp_driver, session->name, session))) {
++ BT_ERR("Can't attach new controller");
++ return -EBUSY;
++ }
++
++ session->num = session->ctrl->cnr;
++
++ BT_DBG("session %p ctrl %p num %d", session, session->ctrl, session->num);
++
++ capimsg_setu32(buf, 0, 1);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, cmtp_msgnum_get(session),
++ CAPI_FUNCTION_GET_MANUFACTURER, buf, 4);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, cmtp_msgnum_get(session),
++ CAPI_FUNCTION_GET_VERSION, buf, 4);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, cmtp_msgnum_get(session),
++ CAPI_FUNCTION_GET_SERIAL_NUMBER, buf, 4);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, cmtp_msgnum_get(session),
++ CAPI_FUNCTION_GET_PROFILE, buf, 4);
++
++ return 0;
++}
++
++void cmtp_detach_device(struct cmtp_session *session)
++{
++ struct capi_ctr *ctrl = session->ctrl;
++
++ BT_DBG("session %p ctrl %p", session, ctrl);
++
++ if (!ctrl)
++ return;
++
++ ctrl->reseted(ctrl);
++
++ di->detach_ctr(ctrl);
++}
++
++int cmtp_init_capi(void)
++{
++ if (!(di = attach_capi_driver(&cmtp_driver))) {
++ BT_ERR("Can't attach CAPI driver");
++ return -EIO;
++ }
++
++ return 0;
++}
++
++void cmtp_cleanup_capi(void)
++{
++ detach_capi_driver(&cmtp_driver);
++}
+diff -Nur c3000_pre/linux/net/bluetooth/cmtp/cmtp.h c3000_work/linux/net/bluetooth/cmtp/cmtp.h
+--- c3000_pre/linux/net/bluetooth/cmtp/cmtp.h 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/net/bluetooth/cmtp/cmtp.h 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,138 @@
++/*
++ CMTP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#ifndef __CMTP_H
++#define __CMTP_H
++
++#include <linux/types.h>
++#include <net/bluetooth/bluetooth.h>
++
++#define BTNAMSIZ 18
++
++/* CMTP ioctl defines */
++#define CMTPCONNADD _IOW('C', 200, int)
++#define CMTPCONNDEL _IOW('C', 201, int)
++#define CMTPGETCONNLIST _IOR('C', 210, int)
++#define CMTPGETCONNINFO _IOR('C', 211, int)
++
++#define CMTP_LOOPBACK 0
++
++struct cmtp_connadd_req {
++ int sock; // Connected socket
++ __u32 flags;
++};
++
++struct cmtp_conndel_req {
++ bdaddr_t bdaddr;
++ __u32 flags;
++};
++
++struct cmtp_conninfo {
++ bdaddr_t bdaddr;
++ __u32 flags;
++ __u16 state;
++ int num;
++};
++
++struct cmtp_connlist_req {
++ __u32 cnum;
++ struct cmtp_conninfo *ci;
++};
++
++int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock);
++int cmtp_del_connection(struct cmtp_conndel_req *req);
++int cmtp_get_connlist(struct cmtp_connlist_req *req);
++int cmtp_get_conninfo(struct cmtp_conninfo *ci);
++
++/* CMTP session defines */
++#define CMTP_INTEROP_TIMEOUT (HZ * 5)
++#define CMTP_INITIAL_MSGNUM 0xff00
++
++struct cmtp_session {
++ struct list_head list;
++
++ struct socket *sock;
++
++ bdaddr_t bdaddr;
++
++ unsigned long state;
++ unsigned long flags;
++
++ uint mtu;
++
++ char name[BTNAMSIZ];
++
++ atomic_t terminate;
++
++ wait_queue_head_t wait;
++
++ int ncontroller;
++ int num;
++ struct capi_ctr *ctrl;
++
++ struct list_head applications;
++
++ unsigned long blockids;
++ int msgnum;
++
++ struct sk_buff_head transmit;
++
++ struct sk_buff *reassembly[16];
++};
++
++struct cmtp_application {
++ struct list_head list;
++
++ unsigned long state;
++ int err;
++
++ __u16 appl;
++ __u16 mapping;
++
++ __u16 msgnum;
++};
++
++struct cmtp_scb {
++ int id;
++ int data;
++};
++
++int cmtp_attach_device(struct cmtp_session *session);
++void cmtp_detach_device(struct cmtp_session *session);
++
++void cmtp_recv_capimsg(struct cmtp_session *session, struct sk_buff *skb);
++void cmtp_send_capimsg(struct cmtp_session *session, struct sk_buff *skb);
++
++static inline void cmtp_schedule(struct cmtp_session *session)
++{
++ struct sock *sk = session->sock->sk;
++
++ wake_up_interruptible(sk->sleep);
++}
++
++/* CMTP init defines */
++int cmtp_init_capi(void);
++int cmtp_init_sockets(void);
++void cmtp_cleanup_capi(void);
++void cmtp_cleanup_sockets(void);
++
++#endif /* __CMTP_H */
+diff -Nur c3000_pre/linux/net/bluetooth/cmtp/core.c c3000_work/linux/net/bluetooth/cmtp/core.c
+--- c3000_pre/linux/net/bluetooth/cmtp/core.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/net/bluetooth/cmtp/core.c 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,515 @@
++/*
++ CMTP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <linux/init.h>
++#include <net/sock.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/l2cap.h>
++
++#include "cmtp.h"
++
++#ifndef CONFIG_BLUEZ_CMTP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define VERSION "1.0"
++
++static DECLARE_RWSEM(cmtp_session_sem);
++static LIST_HEAD(cmtp_session_list);
++
++static struct cmtp_session *__cmtp_get_session(bdaddr_t *bdaddr)
++{
++ struct cmtp_session *session;
++ struct list_head *p;
++
++ BT_DBG("");
++
++ list_for_each(p, &cmtp_session_list) {
++ session = list_entry(p, struct cmtp_session, list);
++ if (!bacmp(bdaddr, &session->bdaddr))
++ return session;
++ }
++ return NULL;
++}
++
++static void __cmtp_link_session(struct cmtp_session *session)
++{
++ MOD_INC_USE_COUNT;
++ list_add(&session->list, &cmtp_session_list);
++}
++
++static void __cmtp_unlink_session(struct cmtp_session *session)
++{
++ list_del(&session->list);
++ MOD_DEC_USE_COUNT;
++}
++
++static void __cmtp_copy_session(struct cmtp_session *session, struct cmtp_conninfo *ci)
++{
++ bacpy(&ci->bdaddr, &session->bdaddr);
++
++ ci->flags = session->flags;
++ ci->state = session->state;
++
++ ci->num = session->num;
++}
++
++
++static inline int cmtp_alloc_block_id(struct cmtp_session *session)
++{
++ int i, id = -1;
++
++ for (i = 0; i < 16; i++)
++ if (!test_and_set_bit(i, &session->blockids)) {
++ id = i;
++ break;
++ }
++
++ return id;
++}
++
++static inline void cmtp_free_block_id(struct cmtp_session *session, int id)
++{
++ clear_bit(id, &session->blockids);
++}
++
++static inline void cmtp_add_msgpart(struct cmtp_session *session, int id, const unsigned char *buf, int count)
++{
++ struct sk_buff *skb = session->reassembly[id], *nskb;
++ int size;
++
++ BT_DBG("session %p buf %p count %d", session, buf, count);
++
++ size = (skb) ? skb->len + count : count;
++
++ if (!(nskb = alloc_skb(size, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for CAPI message");
++ return;
++ }
++
++ if (skb && (skb->len > 0))
++ memcpy(skb_put(nskb, skb->len), skb->data, skb->len);
++
++ memcpy(skb_put(nskb, count), buf, count);
++
++ session->reassembly[id] = nskb;
++
++ if (skb)
++ kfree_skb(skb);
++}
++
++static inline int cmtp_recv_frame(struct cmtp_session *session, struct sk_buff *skb)
++{
++ __u8 hdr, hdrlen, id;
++ __u16 len;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ while (skb->len > 0) {
++ hdr = skb->data[0];
++
++ switch (hdr & 0xc0) {
++ case 0x40:
++ hdrlen = 2;
++ len = skb->data[1];
++ break;
++ case 0x80:
++ hdrlen = 3;
++ len = skb->data[1] | (skb->data[2] << 8);
++ break;
++ default:
++ hdrlen = 1;
++ len = 0;
++ break;
++ }
++
++ id = (hdr & 0x3c) >> 2;
++
++ BT_DBG("hdr 0x%02x hdrlen %d len %d id %d", hdr, hdrlen, len, id);
++
++ if (hdrlen + len > skb->len) {
++ BT_ERR("Wrong size or header information in CMTP frame");
++ break;
++ }
++
++ if (len == 0) {
++ skb_pull(skb, hdrlen);
++ continue;
++ }
++
++ switch (hdr & 0x03) {
++ case 0x00:
++ cmtp_add_msgpart(session, id, skb->data + hdrlen, len);
++ cmtp_recv_capimsg(session, session->reassembly[id]);
++ session->reassembly[id] = NULL;
++ break;
++ case 0x01:
++ cmtp_add_msgpart(session, id, skb->data + hdrlen, len);
++ break;
++ default:
++ if (session->reassembly[id] != NULL)
++ kfree_skb(session->reassembly[id]);
++ session->reassembly[id] = NULL;
++ break;
++ }
++
++ skb_pull(skb, hdrlen + len);
++ }
++
++ kfree_skb(skb);
++ return 0;
++}
++
++static int cmtp_send_frame(struct cmtp_session *session, unsigned char *data, int len)
++{
++ struct socket *sock = session->sock;
++ struct iovec iv = { data, len };
++ struct msghdr msg;
++ int err;
++
++ BT_DBG("session %p data %p len %d", session, data, len);
++
++ if (!len)
++ return 0;
++
++ memset(&msg, 0, sizeof(msg));
++ msg.msg_iovlen = 1;
++ msg.msg_iov = &iv;
++
++ err = sock->ops->sendmsg(sock, &msg, len, 0);
++ return err;
++}
++
++static int cmtp_process_transmit(struct cmtp_session *session)
++{
++ struct sk_buff *skb, *nskb;
++ unsigned char *hdr;
++ unsigned int size, tail;
++
++ BT_DBG("session %p", session);
++
++ if (!(nskb = alloc_skb(session->mtu, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for new frame");
++ return -ENOMEM;
++ }
++
++ while ((skb = skb_dequeue(&session->transmit))) {
++ struct cmtp_scb *scb = (void *) skb->cb;
++
++ if ((tail = (session->mtu - nskb->len)) < 5) {
++ cmtp_send_frame(session, nskb->data, nskb->len);
++ skb_trim(nskb, 0);
++ tail = session->mtu;
++ }
++
++ size = min_t(uint, ((tail < 258) ? (tail - 2) : (tail - 3)), skb->len);
++
++ if ((scb->id < 0) && ((scb->id = cmtp_alloc_block_id(session)) < 0)) {
++ skb_queue_head(&session->transmit, skb);
++ break;
++ }
++
++ if (size < 256) {
++ hdr = skb_put(nskb, 2);
++ hdr[0] = 0x40
++ | ((scb->id << 2) & 0x3c)
++ | ((skb->len == size) ? 0x00 : 0x01);
++ hdr[1] = size;
++ } else {
++ hdr = skb_put(nskb, 3);
++ hdr[0] = 0x80
++ | ((scb->id << 2) & 0x3c)
++ | ((skb->len == size) ? 0x00 : 0x01);
++ hdr[1] = size & 0xff;
++ hdr[2] = size >> 8;
++ }
++
++ memcpy(skb_put(nskb, size), skb->data, size);
++ skb_pull(skb, size);
++
++ if (skb->len > 0) {
++ skb_queue_head(&session->transmit, skb);
++ } else {
++ cmtp_free_block_id(session, scb->id);
++ if (scb->data) {
++ cmtp_send_frame(session, nskb->data, nskb->len);
++ skb_trim(nskb, 0);
++ }
++ kfree_skb(skb);
++ }
++ }
++
++ cmtp_send_frame(session, nskb->data, nskb->len);
++
++ kfree_skb(nskb);
++
++ return skb_queue_len(&session->transmit);
++}
++
++static int cmtp_session(void *arg)
++{
++ struct cmtp_session *session = arg;
++ struct sock *sk = session->sock->sk;
++ struct sk_buff *skb;
++ wait_queue_t wait;
++
++ BT_DBG("session %p", session);
++
++ daemonize(); reparent_to_init();
++
++ sprintf(current->comm, "kcmtpd_ctr_%d", session->num);
++
++ sigfillset(&current->blocked);
++ flush_signals(current);
++
++ current->nice = -15;
++
++ set_fs(KERNEL_DS);
++
++ init_waitqueue_entry(&wait, current);
++ add_wait_queue(sk->sleep, &wait);
++ while (!atomic_read(&session->terminate)) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (sk->state != BT_CONNECTED)
++ break;
++
++ while ((skb = skb_dequeue(&sk->receive_queue))) {
++ skb_orphan(skb);
++ cmtp_recv_frame(session, skb);
++ }
++
++ cmtp_process_transmit(session);
++
++ schedule();
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++
++ down_write(&cmtp_session_sem);
++
++ if (!(session->flags & (1 << CMTP_LOOPBACK)))
++ cmtp_detach_device(session);
++
++ fput(session->sock->file);
++
++ __cmtp_unlink_session(session);
++
++ up_write(&cmtp_session_sem);
++
++ kfree(session);
++ return 0;
++}
++
++int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock)
++{
++ struct cmtp_session *session, *s;
++ bdaddr_t src, dst;
++ int i, err;
++
++ BT_DBG("");
++
++ baswap(&src, &bluez_pi(sock->sk)->src);
++ baswap(&dst, &bluez_pi(sock->sk)->dst);
++
++ session = kmalloc(sizeof(struct cmtp_session), GFP_KERNEL);
++ if (!session)
++ return -ENOMEM;
++ memset(session, 0, sizeof(struct cmtp_session));
++
++ down_write(&cmtp_session_sem);
++
++ s = __cmtp_get_session(&bluez_pi(sock->sk)->dst);
++ if (s && s->state == BT_CONNECTED) {
++ err = -EEXIST;
++ goto failed;
++ }
++
++ bacpy(&session->bdaddr, &bluez_pi(sock->sk)->dst);
++
++ session->mtu = min_t(uint, l2cap_pi(sock->sk)->omtu, l2cap_pi(sock->sk)->imtu);
++
++ BT_DBG("mtu %d", session->mtu);
++
++ sprintf(session->name, "%s", batostr(&dst));
++
++ session->sock = sock;
++ session->state = BT_CONFIG;
++
++ init_waitqueue_head(&session->wait);
++
++ session->ctrl = NULL;
++ session->msgnum = CMTP_INITIAL_MSGNUM;
++
++ INIT_LIST_HEAD(&session->applications);
++
++ skb_queue_head_init(&session->transmit);
++
++ for (i = 0; i < 16; i++)
++ session->reassembly[i] = NULL;
++
++ session->flags = req->flags;
++
++ __cmtp_link_session(session);
++
++ err = kernel_thread(cmtp_session, session, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
++ if (err < 0)
++ goto unlink;
++
++ if (!(session->flags & (1 << CMTP_LOOPBACK))) {
++ err = cmtp_attach_device(session);
++ if (err < 0)
++ goto detach;
++ }
++
++ up_write(&cmtp_session_sem);
++ return 0;
++
++detach:
++ cmtp_detach_device(session);
++
++unlink:
++ __cmtp_unlink_session(session);
++
++failed:
++ up_write(&cmtp_session_sem);
++ kfree(session);
++ return err;
++}
++
++int cmtp_del_connection(struct cmtp_conndel_req *req)
++{
++ struct cmtp_session *session;
++ int err = 0;
++
++ BT_DBG("");
++
++ down_read(&cmtp_session_sem);
++
++ session = __cmtp_get_session(&req->bdaddr);
++ if (session) {
++ /* Flush the transmit queue */
++ skb_queue_purge(&session->transmit);
++
++ /* Kill session thread */
++ atomic_inc(&session->terminate);
++ cmtp_schedule(session);
++ } else
++ err = -ENOENT;
++
++ up_read(&cmtp_session_sem);
++ return err;
++}
++
++int cmtp_get_connlist(struct cmtp_connlist_req *req)
++{
++ struct list_head *p;
++ int err = 0, n = 0;
++
++ BT_DBG("");
++
++ down_read(&cmtp_session_sem);
++
++ list_for_each(p, &cmtp_session_list) {
++ struct cmtp_session *session;
++ struct cmtp_conninfo ci;
++
++ session = list_entry(p, struct cmtp_session, list);
++
++ __cmtp_copy_session(session, &ci);
++
++ if (copy_to_user(req->ci, &ci, sizeof(ci))) {
++ err = -EFAULT;
++ break;
++ }
++
++ if (++n >= req->cnum)
++ break;
++
++ req->ci++;
++ }
++ req->cnum = n;
++
++ up_read(&cmtp_session_sem);
++ return err;
++}
++
++int cmtp_get_conninfo(struct cmtp_conninfo *ci)
++{
++ struct cmtp_session *session;
++ int err = 0;
++
++ down_read(&cmtp_session_sem);
++
++ session = __cmtp_get_session(&ci->bdaddr);
++ if (session)
++ __cmtp_copy_session(session, ci);
++ else
++ err = -ENOENT;
++
++ up_read(&cmtp_session_sem);
++ return err;
++}
++
++
++int __init init_cmtp(void)
++{
++ l2cap_load();
++
++ cmtp_init_capi();
++ cmtp_init_sockets();
++
++ BT_INFO("BlueZ CMTP ver %s", VERSION);
++ BT_INFO("Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>");
++
++ return 0;
++}
++
++void __exit exit_cmtp(void)
++{
++ cmtp_cleanup_sockets();
++ cmtp_cleanup_capi();
++}
++
++module_init(init_cmtp);
++module_exit(exit_cmtp);
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueZ CMTP ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -Nur c3000_pre/linux/net/bluetooth/cmtp/sock.c c3000_work/linux/net/bluetooth/cmtp/sock.c
+--- c3000_pre/linux/net/bluetooth/cmtp/sock.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/net/bluetooth/cmtp/sock.c 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,208 @@
++/*
++ CMTP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++
++#include "cmtp.h"
++
++#ifndef CONFIG_BLUEZ_CMTP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++static int cmtp_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p sk %p", sock, sk);
++
++ if (!sk)
++ return 0;
++
++ sock_orphan(sk);
++ sock_put(sk);
++
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++static int cmtp_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++{
++ struct cmtp_connadd_req ca;
++ struct cmtp_conndel_req cd;
++ struct cmtp_connlist_req cl;
++ struct cmtp_conninfo ci;
++ struct socket *nsock;
++ int err;
++
++ BT_DBG("cmd %x arg %lx", cmd, arg);
++
++ switch (cmd) {
++ case CMTPCONNADD:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&ca, (void *) arg, sizeof(ca)))
++ return -EFAULT;
++
++ nsock = sockfd_lookup(ca.sock, &err);
++ if (!nsock)
++ return err;
++
++ if (nsock->sk->state != BT_CONNECTED) {
++ fput(nsock->file);
++ return -EBADFD;
++ }
++
++ err = cmtp_add_connection(&ca, nsock);
++ if (!err) {
++ if (copy_to_user((void *) arg, &ca, sizeof(ca)))
++ err = -EFAULT;
++ } else
++ fput(nsock->file);
++
++ return err;
++
++ case CMTPCONNDEL:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&cd, (void *) arg, sizeof(cd)))
++ return -EFAULT;
++
++ return cmtp_del_connection(&cd);
++
++ case CMTPGETCONNLIST:
++ if (copy_from_user(&cl, (void *) arg, sizeof(cl)))
++ return -EFAULT;
++
++ if (cl.cnum <= 0)
++ return -EINVAL;
++
++ err = cmtp_get_connlist(&cl);
++ if (!err && copy_to_user((void *) arg, &cl, sizeof(cl)))
++ return -EFAULT;
++
++ return err;
++
++ case CMTPGETCONNINFO:
++ if (copy_from_user(&ci, (void *) arg, sizeof(ci)))
++ return -EFAULT;
++
++ err = cmtp_get_conninfo(&ci);
++ if (!err && copy_to_user((void *) arg, &ci, sizeof(ci)))
++ return -EFAULT;
++
++ return err;
++ }
++
++ return -EINVAL;
++}
++
++static struct proto_ops cmtp_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: cmtp_sock_release,
++ ioctl: cmtp_sock_ioctl,
++ bind: sock_no_bind,
++ getname: sock_no_getname,
++ sendmsg: sock_no_sendmsg,
++ recvmsg: sock_no_recvmsg,
++ poll: sock_no_poll,
++ listen: sock_no_listen,
++ shutdown: sock_no_shutdown,
++ setsockopt: sock_no_setsockopt,
++ getsockopt: sock_no_getsockopt,
++ connect: sock_no_connect,
++ socketpair: sock_no_socketpair,
++ accept: sock_no_accept,
++ mmap: sock_no_mmap
++};
++
++static int cmtp_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ if (sock->type != SOCK_RAW)
++ return -ESOCKTNOSUPPORT;
++
++ sock->ops = &cmtp_sock_ops;
++
++ if (!(sk = sk_alloc(PF_BLUETOOTH, GFP_KERNEL, 1)))
++ return -ENOMEM;
++
++ MOD_INC_USE_COUNT;
++
++ sock->state = SS_UNCONNECTED;
++ sock_init_data(sock, sk);
++
++ sk->destruct = NULL;
++ sk->protocol = protocol;
++
++ return 0;
++}
++
++static struct net_proto_family cmtp_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: cmtp_sock_create
++};
++
++int cmtp_init_sockets(void)
++{
++ int err;
++
++ if ((err = bluez_sock_register(BTPROTO_CMTP, &cmtp_sock_family_ops))) {
++ BT_ERR("Can't register CMTP socket layer (%d)", err);
++ return err;
++ }
++
++ return 0;
++}
++
++void cmtp_cleanup_sockets(void)
++{
++ int err;
++
++ if ((err = bluez_sock_unregister(BTPROTO_CMTP)))
++ BT_ERR("Can't unregister CMTP socket layer (%d)", err);
++
++ return;
++}
+diff -Nur c3000_pre/linux/net/bluetooth/hci_conn.c c3000_work/linux/net/bluetooth/hci_conn.c
+--- c3000_pre/linux/net/bluetooth/hci_conn.c 2004-08-21 09:49:19.000000000 +0900
++++ c3000_work/linux/net/bluetooth/hci_conn.c 2004-12-16 23:01:14.000000000 +0900
+@@ -71,6 +71,7 @@
+
+ memset(&cp, 0, sizeof(cp));
+ bacpy(&cp.bdaddr, &conn->dst);
++ cp.pscan_rep_mode = 0x02;
+
+ if ((ie = inquiry_cache_lookup(hdev, &conn->dst)) &&
+ inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
+@@ -357,21 +358,24 @@
+ struct hci_conn_info *ci;
+ struct hci_dev *hdev;
+ struct list_head *p;
+- int n = 0, size;
++ int n = 0, size, err;
+
+ if (copy_from_user(&req, (void *) arg, sizeof(req)))
+ return -EFAULT;
+
+- if (!(hdev = hci_dev_get(req.dev_id)))
+- return -ENODEV;
+-
+- size = req.conn_num * sizeof(struct hci_conn_info) + sizeof(req);
++ if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
++ return -EINVAL;
+
+- if (verify_area(VERIFY_WRITE, (void *)arg, size))
+- return -EFAULT;
++ size = sizeof(req) + req.conn_num * sizeof(*ci);
+
+ if (!(cl = (void *) kmalloc(size, GFP_KERNEL)))
+ return -ENOMEM;
++
++ if (!(hdev = hci_dev_get(req.dev_id))) {
++ kfree(cl);
++ return -ENODEV;
++ }
++
+ ci = cl->conn_info;
+
+ hci_dev_lock_bh(hdev);
+@@ -385,20 +389,21 @@
+ (ci + n)->out = c->out;
+ (ci + n)->state = c->state;
+ (ci + n)->link_mode = c->link_mode;
+- n++;
++ if (++n >= req.conn_num)
++ break;
+ }
+ hci_dev_unlock_bh(hdev);
+
+ cl->dev_id = hdev->id;
+ cl->conn_num = n;
+- size = n * sizeof(struct hci_conn_info) + sizeof(req);
++ size = sizeof(req) + n * sizeof(*ci);
+
+ hci_dev_put(hdev);
+
+- copy_to_user((void *) arg, cl, size);
++ err = copy_to_user((void *) arg, cl, size);
+ kfree(cl);
+
+- return 0;
++ return err ? -EFAULT : 0;
+ }
+
+ int hci_get_conn_info(struct hci_dev *hdev, unsigned long arg)
+@@ -411,9 +416,6 @@
+ if (copy_from_user(&req, (void *) arg, sizeof(req)))
+ return -EFAULT;
+
+- if (verify_area(VERIFY_WRITE, ptr, sizeof(ci)))
+- return -EFAULT;
+-
+ hci_dev_lock_bh(hdev);
+ conn = conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
+ if (conn) {
+@@ -429,6 +431,5 @@
+ if (!conn)
+ return -ENOENT;
+
+- copy_to_user(ptr, &ci, sizeof(ci));
+- return 0;
++ return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
+ }
+diff -Nur c3000_pre/linux/net/bluetooth/hci_core.c c3000_work/linux/net/bluetooth/hci_core.c
+--- c3000_pre/linux/net/bluetooth/hci_core.c 2004-08-21 09:49:19.000000000 +0900
++++ c3000_work/linux/net/bluetooth/hci_core.c 2004-12-16 23:01:14.000000000 +0900
+@@ -218,6 +218,10 @@
+
+ /* Mandatory initialization */
+
++ /* Reset */
++ if (test_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks))
++ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_RESET, 0, NULL);
++
+ /* Read Local Supported Features */
+ hci_send_cmd(hdev, OGF_INFO_PARAM, OCF_READ_LOCAL_FEATURES, 0, NULL);
+
+@@ -395,7 +399,7 @@
+ {
+ struct hci_inquiry_req ir;
+ struct hci_dev *hdev;
+- int err = 0, do_inquiry = 0;
++ int err = 0, do_inquiry = 0, max_rsp;
+ long timeo;
+ __u8 *buf, *ptr;
+
+@@ -408,6 +412,7 @@
+
+ hci_dev_lock_bh(hdev);
+ if (inquiry_cache_age(hdev) > INQUIRY_CACHE_AGE_MAX ||
++ inquiry_cache_empty(hdev) ||
+ ir.flags & IREQ_CACHE_FLUSH) {
+ inquiry_cache_flush(hdev);
+ do_inquiry = 1;
+@@ -418,16 +423,19 @@
+ if (do_inquiry && (err = hci_request(hdev, hci_inq_req, (unsigned long)&ir, timeo)) < 0)
+ goto done;
+
++ /* for unlimited number of responses we will use buffer with 255 entries */
++ max_rsp = (ir.num_rsp == 0) ? 255 : ir.num_rsp;
++
+ /* cache_dump can't sleep. Therefore we allocate temp buffer and then
+ * copy it to the user space.
+ */
+- if (!(buf = kmalloc(sizeof(inquiry_info) * ir.num_rsp, GFP_KERNEL))) {
++ if (!(buf = kmalloc(sizeof(inquiry_info) * max_rsp, GFP_KERNEL))) {
+ err = -ENOMEM;
+ goto done;
+ }
+
+ hci_dev_lock_bh(hdev);
+- ir.num_rsp = inquiry_cache_dump(hdev, ir.num_rsp, buf);
++ ir.num_rsp = inquiry_cache_dump(hdev, max_rsp, buf);
+ hci_dev_unlock_bh(hdev);
+
+ BT_DBG("num_rsp %d", ir.num_rsp);
+@@ -708,22 +716,20 @@
+ struct hci_dev_list_req *dl;
+ struct hci_dev_req *dr;
+ struct list_head *p;
+- int n = 0, size;
++ int n = 0, size, err;
+ __u16 dev_num;
+
+ if (get_user(dev_num, (__u16 *) arg))
+ return -EFAULT;
+
+- if (!dev_num)
++ if (!dev_num || dev_num > (PAGE_SIZE * 2) / sizeof(*dr))
+ return -EINVAL;
+-
+- size = dev_num * sizeof(struct hci_dev_req) + sizeof(__u16);
+
+- if (verify_area(VERIFY_WRITE, (void *) arg, size))
+- return -EFAULT;
++ size = sizeof(*dl) + dev_num * sizeof(*dr);
+
+ if (!(dl = kmalloc(size, GFP_KERNEL)))
+ return -ENOMEM;
++
+ dr = dl->dev_req;
+
+ read_lock_bh(&hdev_list_lock);
+@@ -738,12 +744,12 @@
+ read_unlock_bh(&hdev_list_lock);
+
+ dl->dev_num = n;
+- size = n * sizeof(struct hci_dev_req) + sizeof(__u16);
++ size = sizeof(*dl) + n * sizeof(*dr);
+
+- copy_to_user((void *) arg, dl, size);
++ err = copy_to_user((void *) arg, dl, size);
+ kfree(dl);
+
+- return 0;
++ return err ? -EFAULT : 0;
+ }
+
+ int hci_get_dev_info(unsigned long arg)
+@@ -864,6 +870,22 @@
+ return 0;
+ }
+
++/* Suspend HCI device */
++int hci_suspend_dev(struct hci_dev *hdev)
++{
++ hci_notify(hdev, HCI_DEV_SUSPEND);
++ hci_run_hotplug(hdev->name, "suspend");
++ return 0;
++}
++
++/* Resume HCI device */
++int hci_resume_dev(struct hci_dev *hdev)
++{
++ hci_notify(hdev, HCI_DEV_RESUME);
++ hci_run_hotplug(hdev->name, "resume");
++ return 0;
++}
++
+ /* Receive frame from HCI drivers */
+ int hci_recv_frame(struct sk_buff *skb)
+ {
+@@ -959,40 +981,6 @@
+ return hdev->send(skb);
+ }
+
+-/* Send raw HCI frame */
+-int hci_send_raw(struct sk_buff *skb)
+-{
+- struct hci_dev *hdev = (struct hci_dev *) skb->dev;
+-
+- if (!hdev) {
+- kfree_skb(skb);
+- return -ENODEV;
+- }
+-
+- BT_DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
+-
+- if (!test_bit(HCI_RAW, &hdev->flags)) {
+- /* Queue frame according it's type */
+- switch (skb->pkt_type) {
+- case HCI_COMMAND_PKT:
+- skb_queue_tail(&hdev->cmd_q, skb);
+- hci_sched_cmd(hdev);
+- return 0;
+-
+- case HCI_ACLDATA_PKT:
+- case HCI_SCODATA_PKT:
+- /* FIXME:
+- * Check header here and queue to apropriate connection.
+- */
+- break;
+- }
+- }
+-
+- skb_queue_tail(&hdev->raw_q, skb);
+- hci_sched_tx(hdev);
+- return 0;
+-}
+-
+ /* Send HCI command */
+ int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void *param)
+ {
+diff -Nur c3000_pre/linux/net/bluetooth/hci_event.c c3000_work/linux/net/bluetooth/hci_event.c
+--- c3000_pre/linux/net/bluetooth/hci_event.c 2004-08-21 09:49:19.000000000 +0900
++++ c3000_work/linux/net/bluetooth/hci_event.c 2004-12-16 23:01:14.000000000 +0900
+@@ -62,9 +62,22 @@
+ /* Command Complete OGF LINK_CTL */
+ static void hci_cc_link_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
+ {
++ __u8 status;
++
+ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
+
+ switch (ocf) {
++ case OCF_INQUIRY_CANCEL:
++ status = *((__u8 *) skb->data);
++
++ if (status) {
++ BT_DBG("%s Inquiry cancel error: status 0x%x", hdev->name, status);
++ } else {
++ clear_bit(HCI_INQUIRY, &hdev->flags);
++ hci_req_complete(hdev, status);
++ }
++ break;
++
+ default:
+ BT_DBG("%s Command complete: ogf LINK_CTL ocf %x", hdev->name, ocf);
+ break;
+@@ -307,7 +320,7 @@
+ status, batostr(&cc->bdaddr), conn);
+
+ if (status) {
+- if (conn) {
++ if (conn && conn->state == BT_CONNECT) {
+ conn->state = BT_CLOSED;
+ hci_proto_connect_cfm(conn, status);
+ hci_conn_del(conn);
+@@ -439,6 +452,29 @@
+ hci_dev_unlock(hdev);
+ }
+
++/* Inquiry Result With RSSI */
++static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ inquiry_info_with_rssi *info = (inquiry_info_with_rssi *) (skb->data + 1);
++ int num_rsp = *((__u8 *) skb->data);
++
++ BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
++
++ hci_dev_lock(hdev);
++ for (; num_rsp; num_rsp--) {
++ inquiry_info tmp;
++ bacpy(&tmp.bdaddr, &info->bdaddr);
++ tmp.pscan_rep_mode = info->pscan_rep_mode;
++ tmp.pscan_period_mode = info->pscan_period_mode;
++ tmp.pscan_mode = 0x00;
++ memcpy(tmp.dev_class, &info->dev_class, 3);
++ tmp.clock_offset = info->clock_offset;
++ info++;
++ inquiry_cache_update(hdev, &tmp);
++ }
++ hci_dev_unlock(hdev);
++}
++
+ /* Connect Request */
+ static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
+ {
+@@ -735,6 +771,10 @@
+ hci_inquiry_result_evt(hdev, skb);
+ break;
+
++ case EVT_INQUIRY_RESULT_WITH_RSSI:
++ hci_inquiry_result_with_rssi_evt(hdev, skb);
++ break;
++
+ case EVT_CONN_REQUEST:
+ hci_conn_request_evt(hdev, skb);
+ break;
+diff -Nur c3000_pre/linux/net/bluetooth/hci_sock.c c3000_work/linux/net/bluetooth/hci_sock.c
+--- c3000_pre/linux/net/bluetooth/hci_sock.c 2004-08-21 09:49:19.000000000 +0900
++++ c3000_work/linux/net/bluetooth/hci_sock.c 2004-12-16 23:01:14.000000000 +0900
+@@ -49,6 +49,7 @@
+
+ #include <asm/system.h>
+ #include <asm/uaccess.h>
++#include <asm/unaligned.h>
+
+ #include <net/bluetooth/bluetooth.h>
+ #include <net/bluetooth/hci_core.h>
+@@ -65,17 +66,20 @@
+ /* Packet types */
+ 0x10,
+ /* Events */
+- { 0xd9fe, 0x0 },
++ { 0x1000d9fe, 0x0000300c },
+ /* Commands */
+ {
++ { 0x0 },
+ /* OGF_LINK_CTL */
+- { 0x2a000002, 0x0, 0x0, 0x0 },
++ { 0xbe000006, 0x00000001, 0x0000, 0x00 },
+ /* OGF_LINK_POLICY */
+- { 0x1200, 0x0, 0x0, 0x0 },
++ { 0x00005200, 0x00000000, 0x0000, 0x00 },
+ /* OGF_HOST_CTL */
+- { 0x80100000, 0xa, 0x0, 0x0 },
++ { 0xaab00200, 0x2b402aaa, 0x0154, 0x00 },
+ /* OGF_INFO_PARAM */
+- { 0x22a, 0x0, 0x0, 0x0 }
++ { 0x000002be, 0x00000000, 0x0000, 0x00 },
++ /* OGF_STATUS_PARAM */
++ { 0x000000ea, 0x00000000, 0x0000, 0x00 }
+ }
+ };
+
+@@ -387,25 +391,37 @@
+
+ skb->pkt_type = *((unsigned char *) skb->data);
+ skb_pull(skb, 1);
++ skb->dev = (void *) hdev;
+
+- if (!capable(CAP_NET_RAW)) {
+- err = -EPERM;
++ if (skb->pkt_type == HCI_COMMAND_PKT) {
++ u16 opcode = __le16_to_cpu(get_unaligned((u16 *)skb->data));
++ u16 ogf = cmd_opcode_ogf(opcode);
++ u16 ocf = cmd_opcode_ocf(opcode);
++
++ if (((ogf > HCI_SFLT_MAX_OGF) ||
++ !hci_test_bit(ocf & HCI_FLT_OCF_BITS, &hci_sec_filter.ocf_mask[ogf])) &&
++ !capable(CAP_NET_RAW)) {
++ err = -EPERM;
++ goto drop;
++ }
+
+- if (skb->pkt_type == HCI_COMMAND_PKT) {
+- __u16 opcode = __le16_to_cpu(*(__u16 *)skb->data);
+- __u16 ogf = cmd_opcode_ogf(opcode) - 1;
+- __u16 ocf = cmd_opcode_ocf(opcode) & HCI_FLT_OCF_BITS;
+-
+- if (ogf > HCI_SFLT_MAX_OGF ||
+- !hci_test_bit(ocf, &hci_sec_filter.ocf_mask[ogf]))
+- goto drop;
+- } else
++ if (test_bit(HCI_RAW, &hdev->flags) || (ogf == OGF_VENDOR_CMD)) {
++ skb_queue_tail(&hdev->raw_q, skb);
++ hci_sched_tx(hdev);
++ } else {
++ skb_queue_tail(&hdev->cmd_q, skb);
++ hci_sched_cmd(hdev);
++ }
++ } else {
++ if (!capable(CAP_NET_RAW)) {
++ err = -EPERM;
+ goto drop;
++ }
++
++ skb_queue_tail(&hdev->raw_q, skb);
++ hci_sched_tx(hdev);
+ }
+-
+- /* Send frame to HCI core */
+- skb->dev = (void *) hdev;
+- hci_send_raw(skb);
++
+ err = len;
+
+ done:
+diff -Nur c3000_pre/linux/net/bluetooth/hidp/Config.in c3000_work/linux/net/bluetooth/hidp/Config.in
+--- c3000_pre/linux/net/bluetooth/hidp/Config.in 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/net/bluetooth/hidp/Config.in 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,5 @@
++#
++# Bluetooth HIDP layer configuration
++#
++
++dep_tristate 'HIDP protocol support' CONFIG_BLUEZ_HIDP $CONFIG_INPUT $CONFIG_BLUEZ_L2CAP
+diff -Nur c3000_pre/linux/net/bluetooth/hidp/Makefile c3000_work/linux/net/bluetooth/hidp/Makefile
+--- c3000_pre/linux/net/bluetooth/hidp/Makefile 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/net/bluetooth/hidp/Makefile 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,10 @@
++#
++# Makefile for the Linux Bluetooth HIDP layer
++#
++
++O_TARGET := hidp.o
++
++obj-y := core.o sock.o
++obj-m += $(O_TARGET)
++
++include $(TOPDIR)/Rules.make
+diff -Nur c3000_pre/linux/net/bluetooth/hidp/core.c c3000_work/linux/net/bluetooth/hidp/core.c
+--- c3000_pre/linux/net/bluetooth/hidp/core.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/net/bluetooth/hidp/core.c 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,655 @@
++/*
++ HIDP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2003-2004 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <linux/init.h>
++#include <net/sock.h>
++
++#include <linux/input.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/l2cap.h>
++
++#include "hidp.h"
++
++#ifndef CONFIG_BT_HIDP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define VERSION "1.0"
++
++static DECLARE_RWSEM(hidp_session_sem);
++static LIST_HEAD(hidp_session_list);
++
++static unsigned char hidp_keycode[256] = {
++ 0, 0, 0, 0, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38,
++ 50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44, 2, 3,
++ 4, 5, 6, 7, 8, 9, 10, 11, 28, 1, 14, 15, 57, 12, 13, 26,
++ 27, 43, 43, 39, 40, 41, 51, 52, 53, 58, 59, 60, 61, 62, 63, 64,
++ 65, 66, 67, 68, 87, 88, 99, 70,119,110,102,104,111,107,109,106,
++ 105,108,103, 69, 98, 55, 74, 78, 96, 79, 80, 81, 75, 76, 77, 71,
++ 72, 73, 82, 83, 86,127,116,117,183,184,185,186,187,188,189,190,
++ 191,192,193,194,134,138,130,132,128,129,131,137,133,135,136,113,
++ 115,114, 0, 0, 0,121, 0, 89, 93,124, 92, 94, 95, 0, 0, 0,
++ 122,123, 90, 91, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 29, 42, 56,125, 97, 54,100,126,164,166,165,163,161,115,114,113,
++ 150,158,159,128,136,177,178,176,142,152,173,140
++};
++
++static struct hidp_session *__hidp_get_session(bdaddr_t *bdaddr)
++{
++ struct hidp_session *session;
++ struct list_head *p;
++
++ BT_DBG("");
++
++ list_for_each(p, &hidp_session_list) {
++ session = list_entry(p, struct hidp_session, list);
++ if (!bacmp(bdaddr, &session->bdaddr))
++ return session;
++ }
++ return NULL;
++}
++
++static void __hidp_link_session(struct hidp_session *session)
++{
++ MOD_INC_USE_COUNT;
++ list_add(&session->list, &hidp_session_list);
++}
++
++static void __hidp_unlink_session(struct hidp_session *session)
++{
++ list_del(&session->list);
++ MOD_DEC_USE_COUNT;
++}
++
++static void __hidp_copy_session(struct hidp_session *session, struct hidp_conninfo *ci)
++{
++ bacpy(&ci->bdaddr, &session->bdaddr);
++
++ ci->flags = session->flags;
++ ci->state = session->state;
++
++ ci->vendor = 0x0000;
++ ci->product = 0x0000;
++ ci->version = 0x0000;
++ memset(ci->name, 0, 128);
++
++ if (session->input) {
++ ci->vendor = session->input->idvendor;
++ ci->product = session->input->idproduct;
++ ci->version = session->input->idversion;
++ if (session->input->name)
++ strncpy(ci->name, session->input->name, 128);
++ else
++ strncpy(ci->name, "HID Boot Device", 128);
++ }
++}
++
++static int hidp_input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
++{
++ struct hidp_session *session = dev->private;
++ struct sk_buff *skb;
++ unsigned char newleds;
++
++ BT_DBG("session %p hid %p data %p size %d", session, device, data, size);
++
++ if (type != EV_LED)
++ return -1;
++
++ newleds = (!!test_bit(LED_KANA, dev->led) << 3) |
++ (!!test_bit(LED_COMPOSE, dev->led) << 3) |
++ (!!test_bit(LED_SCROLLL, dev->led) << 2) |
++ (!!test_bit(LED_CAPSL, dev->led) << 1) |
++ (!!test_bit(LED_NUML, dev->led));
++
++ if (session->leds == newleds)
++ return 0;
++
++ session->leds = newleds;
++
++ if (!(skb = alloc_skb(3, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for new frame");
++ return -ENOMEM;
++ }
++
++ *skb_put(skb, 1) = 0xa2;
++ *skb_put(skb, 1) = 0x01;
++ *skb_put(skb, 1) = newleds;
++
++ skb_queue_tail(&session->intr_transmit, skb);
++
++ hidp_schedule(session);
++
++ return 0;
++}
++
++static void hidp_input_report(struct hidp_session *session, struct sk_buff *skb)
++{
++ struct input_dev *dev = session->input;
++ unsigned char *keys = session->keys;
++ unsigned char *udata = skb->data + 1;
++ signed char *sdata = skb->data + 1;
++ int i, size = skb->len - 1;
++
++ switch (skb->data[0]) {
++ case 0x01: /* Keyboard report */
++ for (i = 0; i < 8; i++)
++ input_report_key(dev, hidp_keycode[i + 224], (udata[0] >> i) & 1);
++
++ for (i = 2; i < 8; i++) {
++ if (keys[i] > 3 && memscan(udata + 2, keys[i], 6) == udata + 8) {
++ if (hidp_keycode[keys[i]])
++ input_report_key(dev, hidp_keycode[keys[i]], 0);
++ else
++ BT_ERR("Unknown key (scancode %#x) released.", keys[i]);
++ }
++
++ if (udata[i] > 3 && memscan(keys + 2, udata[i], 6) == keys + 8) {
++ if (hidp_keycode[udata[i]])
++ input_report_key(dev, hidp_keycode[udata[i]], 1);
++ else
++ BT_ERR("Unknown key (scancode %#x) pressed.", udata[i]);
++ }
++ }
++
++ memcpy(keys, udata, 8);
++ break;
++
++ case 0x02: /* Mouse report */
++ input_report_key(dev, BTN_LEFT, sdata[0] & 0x01);
++ input_report_key(dev, BTN_RIGHT, sdata[0] & 0x02);
++ input_report_key(dev, BTN_MIDDLE, sdata[0] & 0x04);
++ input_report_key(dev, BTN_SIDE, sdata[0] & 0x08);
++ input_report_key(dev, BTN_EXTRA, sdata[0] & 0x10);
++
++ input_report_rel(dev, REL_X, sdata[1]);
++ input_report_rel(dev, REL_Y, sdata[2]);
++
++ if (size > 3)
++ input_report_rel(dev, REL_WHEEL, sdata[3]);
++ break;
++ }
++
++ input_event(dev, EV_RST, 0, 0);
++}
++
++static void hidp_idle_timeout(unsigned long arg)
++{
++ struct hidp_session *session = (struct hidp_session *) arg;
++
++ atomic_inc(&session->terminate);
++ hidp_schedule(session);
++}
++
++static inline void hidp_set_timer(struct hidp_session *session)
++{
++ if (session->idle_to > 0)
++ mod_timer(&session->timer, jiffies + HZ * session->idle_to);
++}
++
++static inline void hidp_del_timer(struct hidp_session *session)
++{
++ if (session->idle_to > 0)
++ del_timer(&session->timer);
++}
++
++static inline void hidp_send_message(struct hidp_session *session, unsigned char hdr)
++{
++ struct sk_buff *skb;
++
++ BT_DBG("session %p", session);
++
++ if (!(skb = alloc_skb(1, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for message");
++ return;
++ }
++
++ *skb_put(skb, 1) = hdr;
++
++ skb_queue_tail(&session->ctrl_transmit, skb);
++
++ hidp_schedule(session);
++}
++
++static inline int hidp_recv_frame(struct hidp_session *session, struct sk_buff *skb)
++{
++ __u8 hdr;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ hdr = skb->data[0];
++ skb_pull(skb, 1);
++
++ if (hdr == 0xa1) {
++ hidp_set_timer(session);
++
++ if (session->input)
++ hidp_input_report(session, skb);
++ } else {
++ BT_DBG("Unsupported protocol header 0x%02x", hdr);
++ }
++
++ kfree_skb(skb);
++ return 0;
++}
++
++static int hidp_send_frame(struct socket *sock, unsigned char *data, int len)
++{
++ struct iovec iv = { data, len };
++ struct msghdr msg;
++
++ BT_DBG("sock %p data %p len %d", sock, data, len);
++
++ if (!len)
++ return 0;
++
++ memset(&msg, 0, sizeof(msg));
++ msg.msg_iovlen = 1;
++ msg.msg_iov = &iv;
++
++ return sock_sendmsg(sock, &msg, len);
++}
++
++static int hidp_process_transmit(struct hidp_session *session)
++{
++ struct sk_buff *skb;
++
++ BT_DBG("session %p", session);
++
++ while ((skb = skb_dequeue(&session->ctrl_transmit))) {
++ if (hidp_send_frame(session->ctrl_sock, skb->data, skb->len) < 0) {
++ skb_queue_head(&session->ctrl_transmit, skb);
++ break;
++ }
++
++ hidp_set_timer(session);
++ kfree_skb(skb);
++ }
++
++ while ((skb = skb_dequeue(&session->intr_transmit))) {
++ if (hidp_send_frame(session->intr_sock, skb->data, skb->len) < 0) {
++ skb_queue_head(&session->intr_transmit, skb);
++ break;
++ }
++
++ hidp_set_timer(session);
++ kfree_skb(skb);
++ }
++
++ return skb_queue_len(&session->ctrl_transmit) +
++ skb_queue_len(&session->intr_transmit);
++}
++
++static int hidp_session(void *arg)
++{
++ struct hidp_session *session = arg;
++ struct sock *ctrl_sk = session->ctrl_sock->sk;
++ struct sock *intr_sk = session->intr_sock->sk;
++ struct sk_buff *skb;
++ int vendor = 0x0000, product = 0x0000;
++ wait_queue_t ctrl_wait, intr_wait;
++ unsigned long timeo = HZ;
++
++ BT_DBG("session %p", session);
++
++ if (session->input) {
++ vendor = session->input->idvendor;
++ product = session->input->idproduct;
++ }
++
++ daemonize(); reparent_to_init();
++
++ sprintf(current->comm, "khidpd_%04x%04x", vendor, product);
++
++ sigfillset(&current->blocked);
++ flush_signals(current);
++
++ current->nice = -15;
++
++ set_fs(KERNEL_DS);
++
++ init_waitqueue_entry(&ctrl_wait, current);
++ init_waitqueue_entry(&intr_wait, current);
++ add_wait_queue(ctrl_sk->sleep, &ctrl_wait);
++ add_wait_queue(intr_sk->sleep, &intr_wait);
++ while (!atomic_read(&session->terminate)) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (ctrl_sk->state != BT_CONNECTED || intr_sk->state != BT_CONNECTED)
++ break;
++
++ while ((skb = skb_dequeue(&ctrl_sk->receive_queue))) {
++ skb_orphan(skb);
++ hidp_recv_frame(session, skb);
++ }
++
++ while ((skb = skb_dequeue(&intr_sk->receive_queue))) {
++ skb_orphan(skb);
++ hidp_recv_frame(session, skb);
++ }
++
++ hidp_process_transmit(session);
++
++ schedule();
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(intr_sk->sleep, &intr_wait);
++ remove_wait_queue(ctrl_sk->sleep, &ctrl_wait);
++
++ down_write(&hidp_session_sem);
++
++ hidp_del_timer(session);
++
++ if (intr_sk->state != BT_CONNECTED) {
++ init_waitqueue_entry(&ctrl_wait, current);
++ add_wait_queue(ctrl_sk->sleep, &ctrl_wait);
++ while (timeo && ctrl_sk->state != BT_CLOSED) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ timeo = schedule_timeout(timeo);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(ctrl_sk->sleep, &ctrl_wait);
++ timeo = HZ;
++ }
++
++ fput(session->ctrl_sock->file);
++
++ init_waitqueue_entry(&intr_wait, current);
++ add_wait_queue(intr_sk->sleep, &intr_wait);
++ while (timeo && intr_sk->state != BT_CLOSED) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ timeo = schedule_timeout(timeo);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(intr_sk->sleep, &intr_wait);
++
++ fput(session->intr_sock->file);
++
++ __hidp_unlink_session(session);
++
++ if (session->input) {
++ input_unregister_device(session->input);
++ kfree(session->input);
++ }
++
++ up_write(&hidp_session_sem);
++
++ kfree(session);
++ return 0;
++}
++
++static inline void hidp_setup_input(struct hidp_session *session, struct hidp_connadd_req *req)
++{
++ struct input_dev *input = session->input;
++ int i;
++
++ input->private = session;
++
++ input->idbus = BUS_BLUETOOTH;
++ input->idvendor = req->vendor;
++ input->idproduct = req->product;
++ input->idversion = req->version;
++
++ if (req->subclass & 0x40) {
++ set_bit(EV_KEY, input->evbit);
++ set_bit(EV_LED, input->evbit);
++ set_bit(EV_REP, input->evbit);
++
++ set_bit(LED_NUML, input->ledbit);
++ set_bit(LED_CAPSL, input->ledbit);
++ set_bit(LED_SCROLLL, input->ledbit);
++ set_bit(LED_COMPOSE, input->ledbit);
++ set_bit(LED_KANA, input->ledbit);
++
++ for (i = 0; i < sizeof(hidp_keycode); i++)
++ set_bit(hidp_keycode[i], input->keybit);
++ clear_bit(0, input->keybit);
++ }
++
++ if (req->subclass & 0x80) {
++ input->evbit[0] = BIT(EV_KEY) | BIT(EV_REL);
++ input->keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_RIGHT) | BIT(BTN_MIDDLE);
++ input->relbit[0] = BIT(REL_X) | BIT(REL_Y);
++ input->keybit[LONG(BTN_MOUSE)] |= BIT(BTN_SIDE) | BIT(BTN_EXTRA);
++ input->relbit[0] |= BIT(REL_WHEEL);
++ }
++
++ input->event = hidp_input_event;
++
++ input_register_device(input);
++}
++
++int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock, struct socket *intr_sock)
++{
++ struct hidp_session *session, *s;
++ int err;
++
++ BT_DBG("");
++
++ if (bacmp(&bluez_pi(ctrl_sock->sk)->src, &bluez_pi(intr_sock->sk)->src) ||
++ bacmp(&bluez_pi(ctrl_sock->sk)->dst, &bluez_pi(intr_sock->sk)->dst))
++ return -ENOTUNIQ;
++
++ session = kmalloc(sizeof(struct hidp_session), GFP_KERNEL);
++ if (!session)
++ return -ENOMEM;
++ memset(session, 0, sizeof(struct hidp_session));
++
++ session->input = kmalloc(sizeof(struct input_dev), GFP_KERNEL);
++ if (!session->input) {
++ kfree(session);
++ return -ENOMEM;
++ }
++ memset(session->input, 0, sizeof(struct input_dev));
++
++ down_write(&hidp_session_sem);
++
++ s = __hidp_get_session(&bluez_pi(ctrl_sock->sk)->dst);
++ if (s && s->state == BT_CONNECTED) {
++ err = -EEXIST;
++ goto failed;
++ }
++
++ bacpy(&session->bdaddr, &bluez_pi(ctrl_sock->sk)->dst);
++
++ session->ctrl_mtu = min_t(uint, l2cap_pi(ctrl_sock->sk)->omtu, l2cap_pi(ctrl_sock->sk)->imtu);
++ session->intr_mtu = min_t(uint, l2cap_pi(intr_sock->sk)->omtu, l2cap_pi(intr_sock->sk)->imtu);
++
++ BT_DBG("ctrl mtu %d intr mtu %d", session->ctrl_mtu, session->intr_mtu);
++
++ session->ctrl_sock = ctrl_sock;
++ session->intr_sock = intr_sock;
++ session->state = BT_CONNECTED;
++
++ init_timer(&session->timer);
++
++ session->timer.function = hidp_idle_timeout;
++ session->timer.data = (unsigned long) session;
++
++ skb_queue_head_init(&session->ctrl_transmit);
++ skb_queue_head_init(&session->intr_transmit);
++
++ session->flags = req->flags & (1 << HIDP_BLUETOOTH_VENDOR_ID);
++ session->idle_to = req->idle_to;
++
++ if (session->input)
++ hidp_setup_input(session, req);
++
++ __hidp_link_session(session);
++
++ hidp_set_timer(session);
++
++ err = kernel_thread(hidp_session, session, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
++ if (err < 0)
++ goto unlink;
++
++ if (session->input) {
++ hidp_send_message(session, 0x70);
++ session->flags |= (1 << HIDP_BOOT_PROTOCOL_MODE);
++
++ session->leds = 0xff;
++ hidp_input_event(session->input, EV_LED, 0, 0);
++ }
++
++ up_write(&hidp_session_sem);
++ return 0;
++
++unlink:
++ hidp_del_timer(session);
++
++ __hidp_unlink_session(session);
++
++ if (session->input)
++ input_unregister_device(session->input);
++
++failed:
++ up_write(&hidp_session_sem);
++
++ if (session->input)
++ kfree(session->input);
++
++ kfree(session);
++ return err;
++}
++
++int hidp_del_connection(struct hidp_conndel_req *req)
++{
++ struct hidp_session *session;
++ int err = 0;
++
++ BT_DBG("");
++
++ down_read(&hidp_session_sem);
++
++ session = __hidp_get_session(&req->bdaddr);
++ if (session) {
++ if (req->flags & (1 << HIDP_VIRTUAL_CABLE_UNPLUG)) {
++ hidp_send_message(session, 0x15);
++ } else {
++ /* Flush the transmit queues */
++ skb_queue_purge(&session->ctrl_transmit);
++ skb_queue_purge(&session->intr_transmit);
++
++ /* Kill session thread */
++ atomic_inc(&session->terminate);
++ hidp_schedule(session);
++ }
++ } else
++ err = -ENOENT;
++
++ up_read(&hidp_session_sem);
++ return err;
++}
++
++int hidp_get_connlist(struct hidp_connlist_req *req)
++{
++ struct list_head *p;
++ int err = 0, n = 0;
++
++ BT_DBG("");
++
++ down_read(&hidp_session_sem);
++
++ list_for_each(p, &hidp_session_list) {
++ struct hidp_session *session;
++ struct hidp_conninfo ci;
++
++ session = list_entry(p, struct hidp_session, list);
++
++ __hidp_copy_session(session, &ci);
++
++ if (copy_to_user(req->ci, &ci, sizeof(ci))) {
++ err = -EFAULT;
++ break;
++ }
++
++ if (++n >= req->cnum)
++ break;
++
++ req->ci++;
++ }
++ req->cnum = n;
++
++ up_read(&hidp_session_sem);
++ return err;
++}
++
++int hidp_get_conninfo(struct hidp_conninfo *ci)
++{
++ struct hidp_session *session;
++ int err = 0;
++
++ down_read(&hidp_session_sem);
++
++ session = __hidp_get_session(&ci->bdaddr);
++ if (session)
++ __hidp_copy_session(session, ci);
++ else
++ err = -ENOENT;
++
++ up_read(&hidp_session_sem);
++ return err;
++}
++
++static int __init hidp_init(void)
++{
++ l2cap_load();
++
++ hidp_init_sockets();
++
++ BT_INFO("BlueZ HIDP ver %s", VERSION);
++ BT_INFO("Copyright (C) 2003-2004 Marcel Holtmann <marcel@holtmann.org>");
++
++ return 0;
++}
++
++static void __exit hidp_exit(void)
++{
++ hidp_cleanup_sockets();
++}
++
++module_init(hidp_init);
++module_exit(hidp_exit);
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("Bluetooth HIDP ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -Nur c3000_pre/linux/net/bluetooth/hidp/hidp.h c3000_work/linux/net/bluetooth/hidp/hidp.h
+--- c3000_pre/linux/net/bluetooth/hidp/hidp.h 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/net/bluetooth/hidp/hidp.h 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,122 @@
++/*
++ HIDP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2003-2004 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#ifndef __HIDP_H
++#define __HIDP_H
++
++#include <linux/types.h>
++#include <net/bluetooth/bluetooth.h>
++
++/* HIDP ioctl defines */
++#define HIDPCONNADD _IOW('H', 200, int)
++#define HIDPCONNDEL _IOW('H', 201, int)
++#define HIDPGETCONNLIST _IOR('H', 210, int)
++#define HIDPGETCONNINFO _IOR('H', 211, int)
++
++#define HIDP_VIRTUAL_CABLE_UNPLUG 0
++#define HIDP_BOOT_PROTOCOL_MODE 1
++#define HIDP_BLUETOOTH_VENDOR_ID 9
++
++struct hidp_connadd_req {
++ int ctrl_sock; // Connected control socket
++ int intr_sock; // Connteted interrupt socket
++ __u16 parser;
++ __u16 rd_size;
++ __u8 *rd_data;
++ __u8 country;
++ __u8 subclass;
++ __u16 vendor;
++ __u16 product;
++ __u16 version;
++ __u32 flags;
++ __u32 idle_to;
++ char name[128];
++};
++
++struct hidp_conndel_req {
++ bdaddr_t bdaddr;
++ __u32 flags;
++};
++
++struct hidp_conninfo {
++ bdaddr_t bdaddr;
++ __u32 flags;
++ __u16 state;
++ __u16 vendor;
++ __u16 product;
++ __u16 version;
++ char name[128];
++};
++
++struct hidp_connlist_req {
++ __u32 cnum;
++ struct hidp_conninfo *ci;
++};
++
++int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock, struct socket *intr_sock);
++int hidp_del_connection(struct hidp_conndel_req *req);
++int hidp_get_connlist(struct hidp_connlist_req *req);
++int hidp_get_conninfo(struct hidp_conninfo *ci);
++
++/* HIDP session defines */
++struct hidp_session {
++ struct list_head list;
++
++ struct socket *ctrl_sock;
++ struct socket *intr_sock;
++
++ bdaddr_t bdaddr;
++
++ unsigned long state;
++ unsigned long flags;
++ unsigned long idle_to;
++
++ uint ctrl_mtu;
++ uint intr_mtu;
++
++ atomic_t terminate;
++
++ unsigned char keys[8];
++ unsigned char leds;
++
++ struct input_dev *input;
++
++ struct timer_list timer;
++
++ struct sk_buff_head ctrl_transmit;
++ struct sk_buff_head intr_transmit;
++};
++
++static inline void hidp_schedule(struct hidp_session *session)
++{
++ struct sock *ctrl_sk = session->ctrl_sock->sk;
++ struct sock *intr_sk = session->intr_sock->sk;
++
++ wake_up_interruptible(ctrl_sk->sleep);
++ wake_up_interruptible(intr_sk->sleep);
++}
++
++/* HIDP init defines */
++extern int __init hidp_init_sockets(void);
++extern void __exit hidp_cleanup_sockets(void);
++
++#endif /* __HIDP_H */
+diff -Nur c3000_pre/linux/net/bluetooth/hidp/sock.c c3000_work/linux/net/bluetooth/hidp/sock.c
+--- c3000_pre/linux/net/bluetooth/hidp/sock.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/net/bluetooth/hidp/sock.c 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,212 @@
++/*
++ HIDP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2003-2004 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <linux/init.h>
++#include <net/sock.h>
++
++#include "hidp.h"
++
++#ifndef CONFIG_BT_HIDP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++static int hidp_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p sk %p", sock, sk);
++
++ if (!sk)
++ return 0;
++
++ sock_orphan(sk);
++ sock_put(sk);
++
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++static int hidp_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++{
++ struct hidp_connadd_req ca;
++ struct hidp_conndel_req cd;
++ struct hidp_connlist_req cl;
++ struct hidp_conninfo ci;
++ struct socket *csock;
++ struct socket *isock;
++ int err;
++
++ BT_DBG("cmd %x arg %lx", cmd, arg);
++
++ switch (cmd) {
++ case HIDPCONNADD:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&ca, (void *) arg, sizeof(ca)))
++ return -EFAULT;
++
++ csock = sockfd_lookup(ca.ctrl_sock, &err);
++ if (!csock)
++ return err;
++
++ isock = sockfd_lookup(ca.intr_sock, &err);
++ if (!isock) {
++ fput(csock->file);
++ return err;
++ }
++
++ if (csock->sk->state != BT_CONNECTED || isock->sk->state != BT_CONNECTED) {
++ fput(csock->file);
++ fput(isock->file);
++ return -EBADFD;
++ }
++
++ err = hidp_add_connection(&ca, csock, isock);
++ if (!err) {
++ if (copy_to_user((void *) arg, &ca, sizeof(ca)))
++ err = -EFAULT;
++ } else {
++ fput(csock->file);
++ fput(isock->file);
++ }
++
++ return err;
++
++ case HIDPCONNDEL:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&cd, (void *) arg, sizeof(cd)))
++ return -EFAULT;
++
++ return hidp_del_connection(&cd);
++
++ case HIDPGETCONNLIST:
++ if (copy_from_user(&cl, (void *) arg, sizeof(cl)))
++ return -EFAULT;
++
++ if (cl.cnum <= 0)
++ return -EINVAL;
++
++ err = hidp_get_connlist(&cl);
++ if (!err && copy_to_user((void *) arg, &cl, sizeof(cl)))
++ return -EFAULT;
++
++ return err;
++
++ case HIDPGETCONNINFO:
++ if (copy_from_user(&ci, (void *) arg, sizeof(ci)))
++ return -EFAULT;
++
++ err = hidp_get_conninfo(&ci);
++ if (!err && copy_to_user((void *) arg, &ci, sizeof(ci)))
++ return -EFAULT;
++
++ return err;
++ }
++
++ return -EINVAL;
++}
++
++static struct proto_ops hidp_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: hidp_sock_release,
++ ioctl: hidp_sock_ioctl,
++ bind: sock_no_bind,
++ getname: sock_no_getname,
++ sendmsg: sock_no_sendmsg,
++ recvmsg: sock_no_recvmsg,
++ poll: sock_no_poll,
++ listen: sock_no_listen,
++ shutdown: sock_no_shutdown,
++ setsockopt: sock_no_setsockopt,
++ getsockopt: sock_no_getsockopt,
++ connect: sock_no_connect,
++ socketpair: sock_no_socketpair,
++ accept: sock_no_accept,
++ mmap: sock_no_mmap
++};
++
++static int hidp_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ if (sock->type != SOCK_RAW)
++ return -ESOCKTNOSUPPORT;
++
++ sock->ops = &hidp_sock_ops;
++
++ if (!(sk = sk_alloc(PF_BLUETOOTH, GFP_KERNEL, 1)))
++ return -ENOMEM;
++
++ MOD_INC_USE_COUNT;
++
++ sock->state = SS_UNCONNECTED;
++ sock_init_data(sock, sk);
++
++ sk->destruct = NULL;
++ sk->protocol = protocol;
++
++ return 0;
++}
++
++static struct net_proto_family hidp_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: hidp_sock_create
++};
++
++int __init hidp_init_sockets(void)
++{
++ int err;
++
++ if ((err = bluez_sock_register(BTPROTO_HIDP, &hidp_sock_family_ops)))
++ BT_ERR("Can't register HIDP socket layer (%d)", err);
++
++ return err;
++}
++
++void __exit hidp_cleanup_sockets(void)
++{
++ int err;
++
++ if ((err = bluez_sock_unregister(BTPROTO_HIDP)))
++ BT_ERR("Can't unregister HIDP socket layer (%d)", err);
++}
+diff -Nur c3000_pre/linux/net/bluetooth/l2cap.c c3000_work/linux/net/bluetooth/l2cap.c
+--- c3000_pre/linux/net/bluetooth/l2cap.c 2004-08-21 09:49:19.000000000 +0900
++++ c3000_work/linux/net/bluetooth/l2cap.c 2004-12-16 23:01:14.000000000 +0900
+@@ -27,7 +27,7 @@
+ *
+ * $Id: l2cap.c,v 1.15 2002/09/09 01:14:52 maxk Exp $
+ */
+-#define VERSION "2.1"
++#define VERSION "2.3"
+
+ #include <linux/config.h>
+ #include <linux/module.h>
+@@ -178,69 +178,12 @@
+ return 0;
+ }
+
+-int l2cap_connect(struct sock *sk)
+-{
+- bdaddr_t *src = &bluez_pi(sk)->src;
+- bdaddr_t *dst = &bluez_pi(sk)->dst;
+- struct l2cap_conn *conn;
+- struct hci_conn *hcon;
+- struct hci_dev *hdev;
+- int err = 0;
+-
+- BT_DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst), l2cap_pi(sk)->psm);
+-
+- if (!(hdev = hci_get_route(dst, src)))
+- return -EHOSTUNREACH;
+-
+- hci_dev_lock_bh(hdev);
+-
+- err = -ENOMEM;
+-
+- hcon = hci_connect(hdev, ACL_LINK, dst);
+- if (!hcon)
+- goto done;
+-
+- conn = l2cap_conn_add(hcon, 0);
+- if (!conn) {
+- hci_conn_put(hcon);
+- goto done;
+- }
+-
+- err = 0;
+-
+- /* Update source addr of the socket */
+- bacpy(src, conn->src);
+-
+- l2cap_chan_add(conn, sk, NULL);
+-
+- sk->state = BT_CONNECT;
+- l2cap_sock_set_timer(sk, sk->sndtimeo);
+-
+- if (hcon->state == BT_CONNECTED) {
+- if (sk->type == SOCK_SEQPACKET) {
+- l2cap_conn_req req;
+- req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- req.psm = l2cap_pi(sk)->psm;
+- l2cap_send_req(conn, L2CAP_CONN_REQ, L2CAP_CONN_REQ_SIZE, &req);
+- } else {
+- l2cap_sock_clear_timer(sk);
+- sk->state = BT_CONNECTED;
+- }
+- }
+-
+-done:
+- hci_dev_unlock_bh(hdev);
+- hci_dev_put(hdev);
+- return err;
+-}
+-
+ /* -------- Socket interface ---------- */
+ static struct sock *__l2cap_get_sock_by_addr(__u16 psm, bdaddr_t *src)
+ {
+ struct sock *sk;
+ for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
+- if (l2cap_pi(sk)->psm == psm &&
+- !bacmp(&bluez_pi(sk)->src, src))
++ if (sk->sport == psm && !bacmp(&bluez_pi(sk)->src, src))
+ break;
+ }
+ return sk;
+@@ -341,7 +284,7 @@
+ l2cap_disconn_req req;
+
+ sk->state = BT_DISCONN;
+- l2cap_sock_set_timer(sk, HZ * 5);
++ l2cap_sock_set_timer(sk, sk->sndtimeo);
+
+ req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+ req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
+@@ -366,11 +309,9 @@
+ static void l2cap_sock_close(struct sock *sk)
+ {
+ l2cap_sock_clear_timer(sk);
+-
+ lock_sock(sk);
+ __l2cap_sock_close(sk, ECONNRESET);
+ release_sock(sk);
+-
+ l2cap_sock_kill(sk);
+ }
+
+@@ -432,6 +373,9 @@
+ if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
+ return -ESOCKTNOSUPPORT;
+
++ if (sock->type == SOCK_RAW && !capable(CAP_NET_RAW))
++ return -EPERM;
++
+ sock->ops = &l2cap_sock_ops;
+
+ if (!(sk = l2cap_sock_alloc(sock, protocol, GFP_KERNEL)))
+@@ -466,9 +410,9 @@
+ /* Save source address */
+ bacpy(&bluez_pi(sk)->src, &la->l2_bdaddr);
+ l2cap_pi(sk)->psm = la->l2_psm;
++ sk->sport = la->l2_psm;
+ sk->state = BT_BOUND;
+ }
+-
+ write_unlock_bh(&l2cap_sk_list.lock);
+
+ done:
+@@ -476,6 +420,62 @@
+ return err;
+ }
+
++static int l2cap_do_connect(struct sock *sk)
++{
++ bdaddr_t *src = &bluez_pi(sk)->src;
++ bdaddr_t *dst = &bluez_pi(sk)->dst;
++ struct l2cap_conn *conn;
++ struct hci_conn *hcon;
++ struct hci_dev *hdev;
++ int err = 0;
++
++ BT_DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst), l2cap_pi(sk)->psm);
++
++ if (!(hdev = hci_get_route(dst, src)))
++ return -EHOSTUNREACH;
++
++ hci_dev_lock_bh(hdev);
++
++ err = -ENOMEM;
++
++ hcon = hci_connect(hdev, ACL_LINK, dst);
++ if (!hcon)
++ goto done;
++
++ conn = l2cap_conn_add(hcon, 0);
++ if (!conn) {
++ hci_conn_put(hcon);
++ goto done;
++ }
++
++ err = 0;
++
++ /* Update source addr of the socket */
++ bacpy(src, conn->src);
++
++ l2cap_chan_add(conn, sk, NULL);
++
++ sk->state = BT_CONNECT;
++ l2cap_sock_set_timer(sk, sk->sndtimeo);
++
++ if (hcon->state == BT_CONNECTED) {
++ if (sk->type == SOCK_SEQPACKET) {
++ l2cap_conn_req req;
++ req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ req.psm = l2cap_pi(sk)->psm;
++ l2cap_send_req(conn, L2CAP_CONN_REQ, L2CAP_CONN_REQ_SIZE, &req);
++ } else {
++ l2cap_sock_clear_timer(sk);
++ sk->state = BT_CONNECTED;
++ }
++ }
++
++done:
++ hci_dev_unlock_bh(hdev);
++ hci_dev_put(hdev);
++ return err;
++}
++
+ static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
+ {
+ struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
+@@ -521,11 +521,12 @@
+ bacpy(&bluez_pi(sk)->dst, &la->l2_bdaddr);
+ l2cap_pi(sk)->psm = la->l2_psm;
+
+- if ((err = l2cap_connect(sk)))
++ if ((err = l2cap_do_connect(sk)))
+ goto done;
+
+ wait:
+- err = bluez_sock_w4_connect(sk, flags);
++ err = bluez_sock_wait_state(sk, BT_CONNECTED,
++ sock_sndtimeo(sk, flags & O_NONBLOCK));
+
+ done:
+ release_sock(sk);
+@@ -758,32 +759,39 @@
+ static int l2cap_sock_shutdown(struct socket *sock, int how)
+ {
+ struct sock *sk = sock->sk;
++ int err = 0;
+
+ BT_DBG("sock %p, sk %p", sock, sk);
+
+ if (!sk) return 0;
+
+- l2cap_sock_clear_timer(sk);
+-
+ lock_sock(sk);
+- sk->shutdown = SHUTDOWN_MASK;
+- __l2cap_sock_close(sk, ECONNRESET);
+- release_sock(sk);
++ if (!sk->shutdown) {
++ sk->shutdown = SHUTDOWN_MASK;
++ l2cap_sock_clear_timer(sk);
++ __l2cap_sock_close(sk, 0);
+
+- return 0;
++ if (sk->linger)
++ err = bluez_sock_wait_state(sk, BT_CLOSED, sk->lingertime);
++ }
++ release_sock(sk);
++ return err;
+ }
+
+ static int l2cap_sock_release(struct socket *sock)
+ {
+ struct sock *sk = sock->sk;
++ int err;
+
+ BT_DBG("sock %p, sk %p", sock, sk);
+
+ if (!sk) return 0;
+
++ err = l2cap_sock_shutdown(sock, 2);
++
+ sock_orphan(sk);
+- l2cap_sock_close(sk);
+- return 0;
++ l2cap_sock_kill(sk);
++ return err;
+ }
+
+ /* --------- L2CAP channels --------- */
+@@ -915,10 +923,12 @@
+ hci_conn_put(conn->hcon);
+ }
+
+- sk->state = BT_CLOSED;
+- sk->err = err;
++ sk->state = BT_CLOSED;
+ sk->zapped = 1;
+
++ if (err)
++ sk->err = err;
++
+ if (parent)
+ parent->data_ready(parent, 0);
+ else
+@@ -954,6 +964,22 @@
+ read_unlock(&l->lock);
+ }
+
++/* Notify sockets that we cannot guaranty reliability anymore */
++static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
++{
++ struct l2cap_chan_list *l = &conn->chan_list;
++ struct sock *sk;
++
++ BT_DBG("conn %p", conn);
++
++ read_lock(&l->lock);
++ for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
++ if (l2cap_pi(sk)->link_mode & L2CAP_LM_RELIABLE)
++ sk->err = err;
++ }
++ read_unlock(&l->lock);
++}
++
+ static void l2cap_chan_ready(struct sock *sk)
+ {
+ struct sock *parent = bluez_pi(sk)->parent;
+@@ -1318,15 +1344,18 @@
+ {
+ l2cap_conf_rsp *rsp = (l2cap_conf_rsp *) data;
+ void *ptr = rsp->data;
++ u16 flags = 0;
+
+ BT_DBG("sk %p complete %d", sk, result ? 1 : 0);
+
+ if (result)
+ *result = l2cap_conf_output(sk, &ptr);
++ else
++ flags |= 0x0001;
+
+ rsp->scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+ rsp->result = __cpu_to_le16(result ? *result : 0);
+- rsp->flags = __cpu_to_le16(0);
++ rsp->flags = __cpu_to_le16(flags);
+
+ return ptr - data;
+ }
+@@ -1439,7 +1468,7 @@
+ case L2CAP_CR_SUCCESS:
+ sk->state = BT_CONFIG;
+ l2cap_pi(sk)->dcid = dcid;
+- l2cap_pi(sk)->conf_state |= CONF_REQ_SENT;
++ l2cap_pi(sk)->conf_state |= L2CAP_CONF_REQ_SENT;
+
+ l2cap_send_req(conn, L2CAP_CONF_REQ, l2cap_build_conf_req(sk, req), req);
+ break;
+@@ -1474,7 +1503,7 @@
+
+ l2cap_parse_conf_req(sk, req->data, cmd->len - L2CAP_CONF_REQ_SIZE);
+
+- if (flags & 0x01) {
++ if (flags & 0x0001) {
+ /* Incomplete config. Send empty response. */
+ l2cap_send_rsp(conn, cmd->ident, L2CAP_CONF_RSP, l2cap_build_conf_rsp(sk, rsp, NULL), rsp);
+ goto unlock;
+@@ -1487,12 +1516,12 @@
+ goto unlock;
+
+ /* Output config done */
+- l2cap_pi(sk)->conf_state |= CONF_OUTPUT_DONE;
++ l2cap_pi(sk)->conf_state |= L2CAP_CONF_OUTPUT_DONE;
+
+- if (l2cap_pi(sk)->conf_state & CONF_INPUT_DONE) {
++ if (l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE) {
+ sk->state = BT_CONNECTED;
+ l2cap_chan_ready(sk);
+- } else if (!(l2cap_pi(sk)->conf_state & CONF_REQ_SENT)) {
++ } else if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT)) {
+ char req[64];
+ l2cap_send_req(conn, L2CAP_CONF_REQ, l2cap_build_conf_req(sk, req), req);
+ }
+@@ -1518,18 +1547,34 @@
+ if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
+ return -ENOENT;
+
+- if (result) {
+- l2cap_disconn_req req;
++ switch (result) {
++ case L2CAP_CONF_SUCCESS:
++ break;
+
+- /* They didn't like our options. Well... we do not negotiate.
+- * Close channel.
+- */
++ case L2CAP_CONF_UNACCEPT:
++ if (++l2cap_pi(sk)->conf_retry < L2CAP_CONF_MAX_RETRIES) {
++ char req[128];
++ /*
++ It does not make sense to adjust L2CAP parameters
++ that are currently defined in the spec. We simply
++ resend config request that we sent earlier. It is
++ stupid :) but it helps qualification testing
++ which expects at least some response from us.
++ */
++ l2cap_send_req(conn, L2CAP_CONF_REQ,
++ l2cap_build_conf_req(sk, req), req);
++ goto done;
++ }
++ default:
+ sk->state = BT_DISCONN;
++ sk->err = ECONNRESET;
+ l2cap_sock_set_timer(sk, HZ * 5);
+-
+- req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+- req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- l2cap_send_req(conn, L2CAP_DISCONN_REQ, L2CAP_DISCONN_REQ_SIZE, &req);
++ {
++ l2cap_disconn_req req;
++ req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ l2cap_send_req(conn, L2CAP_DISCONN_REQ, L2CAP_DISCONN_REQ_SIZE, &req);
++ }
+ goto done;
+ }
+
+@@ -1537,9 +1582,9 @@
+ goto done;
+
+ /* Input config done */
+- l2cap_pi(sk)->conf_state |= CONF_INPUT_DONE;
++ l2cap_pi(sk)->conf_state |= L2CAP_CONF_INPUT_DONE;
+
+- if (l2cap_pi(sk)->conf_state & CONF_OUTPUT_DONE) {
++ if (l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE) {
+ sk->state = BT_CONNECTED;
+ l2cap_chan_ready(sk);
+ }
+@@ -1590,13 +1635,42 @@
+
+ if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
+ return 0;
+- l2cap_chan_del(sk, ECONNABORTED);
++ l2cap_chan_del(sk, 0);
+ bh_unlock_sock(sk);
+
+ l2cap_sock_kill(sk);
+ return 0;
+ }
+
++static inline int l2cap_information_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, u8 *data)
++{
++ l2cap_info_req *req = (l2cap_info_req *) data;
++ l2cap_info_rsp rsp;
++ u16 type;
++
++ type = __le16_to_cpu(req->type);
++
++ BT_DBG("type 0x%4.4x", type);
++
++ rsp.type = __cpu_to_le16(type);
++ rsp.result = __cpu_to_le16(L2CAP_IR_NOTSUPP);
++ l2cap_send_rsp(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(rsp), &rsp);
++ return 0;
++}
++
++static inline int l2cap_information_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, u8 *data)
++{
++ l2cap_info_rsp *rsp = (l2cap_info_rsp *) data;
++ u16 type, result;
++
++ type = __le16_to_cpu(rsp->type);
++ result = __le16_to_cpu(rsp->result);
++
++ BT_DBG("type 0x%4.4x result 0x%2.2x", type, result);
++
++ return 0;
++}
++
+ static inline void l2cap_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
+ {
+ __u8 *data = skb->data;
+@@ -1604,6 +1678,8 @@
+ l2cap_cmd_hdr cmd;
+ int err = 0;
+
++ l2cap_raw_recv(conn, skb);
++
+ while (len >= L2CAP_CMD_HDR_SIZE) {
+ memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
+ data += L2CAP_CMD_HDR_SIZE;
+@@ -1619,6 +1695,10 @@
+ }
+
+ switch (cmd.code) {
++ case L2CAP_COMMAND_REJ:
++ /* FIXME: We should process this */
++ break;
++
+ case L2CAP_CONN_REQ:
+ err = l2cap_connect_req(conn, &cmd, data);
+ break;
+@@ -1643,23 +1723,23 @@
+ err = l2cap_disconnect_rsp(conn, &cmd, data);
+ break;
+
+- case L2CAP_COMMAND_REJ:
+- /* FIXME: We should process this */
+- l2cap_raw_recv(conn, skb);
+- break;
+-
+ case L2CAP_ECHO_REQ:
+ l2cap_send_rsp(conn, cmd.ident, L2CAP_ECHO_RSP, cmd.len, data);
+ break;
+
+ case L2CAP_ECHO_RSP:
++ break;
++
+ case L2CAP_INFO_REQ:
++ err = l2cap_information_req(conn, &cmd, data);
++ break;
++
+ case L2CAP_INFO_RSP:
+- l2cap_raw_recv(conn, skb);
++ err = l2cap_information_rsp(conn, &cmd, data);
+ break;
+
+ default:
+- BT_ERR("Uknown signaling command 0x%2.2x", cmd.code);
++ BT_ERR("Unknown signaling command 0x%2.2x", cmd.code);
+ err = -EINVAL;
+ break;
+ };
+@@ -1668,7 +1748,7 @@
+ l2cap_cmd_rej rej;
+ BT_DBG("error %d", err);
+
+- /* FIXME: Map err to a valid reason. */
++ /* FIXME: Map err to a valid reason */
+ rej.reason = __cpu_to_le16(0);
+ l2cap_send_rsp(conn, cmd.ident, L2CAP_COMMAND_REJ, L2CAP_CMD_REJ_SIZE, &rej);
+ }
+@@ -1787,7 +1867,7 @@
+ if (sk->state != BT_LISTEN)
+ continue;
+
+- if (!bacmp(&bluez_pi(sk)->src, bdaddr)) {
++ if (!bacmp(&bluez_pi(sk)->src, &hdev->bdaddr)) {
+ lm1 |= (HCI_LM_ACCEPT | l2cap_pi(sk)->link_mode);
+ exact++;
+ } else if (!bacmp(&bluez_pi(sk)->src, BDADDR_ANY))
+@@ -1941,26 +2021,36 @@
+ kfree_skb(conn->rx_skb);
+ conn->rx_skb = NULL;
+ conn->rx_len = 0;
++ l2cap_conn_unreliable(conn, ECOMM);
+ }
+
+ if (skb->len < 2) {
+- BT_ERR("Frame is too small (len %d)", skb->len);
++ BT_ERR("Frame is too short (len %d)", skb->len);
++ l2cap_conn_unreliable(conn, ECOMM);
+ goto drop;
+ }
+
+ hdr = (l2cap_hdr *) skb->data;
+ len = __le16_to_cpu(hdr->len) + L2CAP_HDR_SIZE;
+
+- BT_DBG("Start: total len %d, frag len %d", len, skb->len);
+-
+ if (len == skb->len) {
+ /* Complete frame received */
+ l2cap_recv_frame(conn, skb);
+ return 0;
+ }
+
+- /* Allocate skb for the complete frame (with header) */
+- if (!(conn->rx_skb = bluez_skb_alloc(len, GFP_ATOMIC)))
++ BT_DBG("Start: total len %d, frag len %d", len, skb->len);
++
++ if (skb->len > len) {
++ BT_ERR("Frame is too long (len %d, expected len %d)",
++ skb->len, len);
++ l2cap_conn_unreliable(conn, ECOMM);
++ goto drop;
++ }
++
++ /* Allocate skb for the complete frame including header */
++ conn->rx_skb = bluez_skb_alloc(len, GFP_ATOMIC);
++ if (!conn->rx_skb)
+ goto drop;
+
+ memcpy(skb_put(conn->rx_skb, skb->len), skb->data, skb->len);
+@@ -1970,15 +2060,17 @@
+
+ if (!conn->rx_len) {
+ BT_ERR("Unexpected continuation frame (len %d)", skb->len);
++ l2cap_conn_unreliable(conn, ECOMM);
+ goto drop;
+ }
+
+ if (skb->len > conn->rx_len) {
+- BT_ERR("Fragment is too large (len %d, expect %d)",
++ BT_ERR("Fragment is too long (len %d, expected %d)",
+ skb->len, conn->rx_len);
+ kfree_skb(conn->rx_skb);
+ conn->rx_skb = NULL;
+ conn->rx_len = 0;
++ l2cap_conn_unreliable(conn, ECOMM);
+ goto drop;
+ }
+
+@@ -2112,6 +2204,16 @@
+ BT_ERR("Can't unregister L2CAP protocol");
+ }
+
++void l2cap_load(void)
++{
++ /* Dummy function to trigger automatic L2CAP module loading by
++ other modules that use L2CAP sockets but do not use any other
++ symbols from it. */
++ return;
++}
++
++EXPORT_SYMBOL(l2cap_load);
++
+ module_init(l2cap_init);
+ module_exit(l2cap_cleanup);
+
+diff -Nur c3000_pre/linux/net/bluetooth/rfcomm/Config.in c3000_work/linux/net/bluetooth/rfcomm/Config.in
+--- c3000_pre/linux/net/bluetooth/rfcomm/Config.in 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/net/bluetooth/rfcomm/Config.in 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,10 @@
++#
++# Bluetooth RFCOMM layer configuration
++#
++
++dep_tristate 'RFCOMM protocol support' CONFIG_BLUEZ_RFCOMM $CONFIG_BLUEZ_L2CAP
++
++if [ "$CONFIG_BLUEZ_RFCOMM" != "n" ]; then
++ bool ' RFCOMM TTY support' CONFIG_BLUEZ_RFCOMM_TTY
++fi
++
+diff -Nur c3000_pre/linux/net/bluetooth/rfcomm/Makefile c3000_work/linux/net/bluetooth/rfcomm/Makefile
+--- c3000_pre/linux/net/bluetooth/rfcomm/Makefile 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/net/bluetooth/rfcomm/Makefile 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,11 @@
++#
++# Makefile for the Linux Bluetooth RFCOMM layer
++#
++
++O_TARGET := rfcomm.o
++
++obj-y := core.o sock.o crc.o
++obj-$(CONFIG_BLUEZ_RFCOMM_TTY) += tty.o
++obj-m += $(O_TARGET)
++
++include $(TOPDIR)/Rules.make
+diff -Nur c3000_pre/linux/net/bluetooth/rfcomm/core.c c3000_work/linux/net/bluetooth/rfcomm/core.c
+--- c3000_pre/linux/net/bluetooth/rfcomm/core.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/net/bluetooth/rfcomm/core.c 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,1940 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ RPN support - Dirk Husemann <hud@zurich.ibm.com>
++*/
++
++/*
++ * RFCOMM core.
++ *
++ * $Id: core.c,v 1.46 2002/10/18 20:12:12 maxk Exp $
++ */
++
++#define __KERNEL_SYSCALLS__
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/signal.h>
++#include <linux/init.h>
++#include <linux/wait.h>
++#include <linux/net.h>
++#include <linux/proc_fs.h>
++#include <net/sock.h>
++#include <asm/uaccess.h>
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/l2cap.h>
++#include <net/bluetooth/rfcomm.h>
++
++#define VERSION "1.1"
++
++#ifndef CONFIG_BLUEZ_RFCOMM_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++struct task_struct *rfcomm_thread;
++DECLARE_MUTEX(rfcomm_sem);
++unsigned long rfcomm_event;
++
++static LIST_HEAD(session_list);
++static atomic_t terminate, running;
++
++static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len);
++static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci);
++static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci);
++static int rfcomm_queue_disc(struct rfcomm_dlc *d);
++static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type);
++static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d);
++static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig);
++static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len);
++static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits);
++static void rfcomm_make_uih(struct sk_buff *skb, u8 addr);
++
++static void rfcomm_process_connect(struct rfcomm_session *s);
++
++/* ---- RFCOMM frame parsing macros ---- */
++#define __get_dlci(b) ((b & 0xfc) >> 2)
++#define __get_channel(b) ((b & 0xf8) >> 3)
++#define __get_dir(b) ((b & 0x04) >> 2)
++#define __get_type(b) ((b & 0xef))
++
++#define __test_ea(b) ((b & 0x01))
++#define __test_cr(b) ((b & 0x02))
++#define __test_pf(b) ((b & 0x10))
++
++#define __addr(cr, dlci) (((dlci & 0x3f) << 2) | (cr << 1) | 0x01)
++#define __ctrl(type, pf) (((type & 0xef) | (pf << 4)))
++#define __dlci(dir, chn) (((chn & 0x1f) << 1) | dir)
++#define __srv_channel(dlci) (dlci >> 1)
++#define __dir(dlci) (dlci & 0x01)
++
++#define __len8(len) (((len) << 1) | 1)
++#define __len16(len) ((len) << 1)
++
++/* MCC macros */
++#define __mcc_type(cr, type) (((type << 2) | (cr << 1) | 0x01))
++#define __get_mcc_type(b) ((b & 0xfc) >> 2)
++#define __get_mcc_len(b) ((b & 0xfe) >> 1)
++
++/* RPN macros */
++#define __rpn_line_settings(data, stop, parity) ((data & 0x3) | ((stop & 0x1) << 2) | ((parity & 0x3) << 3))
++#define __get_rpn_data_bits(line) ((line) & 0x3)
++#define __get_rpn_stop_bits(line) (((line) >> 2) & 0x1)
++#define __get_rpn_parity(line) (((line) >> 3) & 0x3)
++
++/* ---- RFCOMM FCS computation ---- */
++
++/* CRC on 2 bytes */
++#define __crc(data) (rfcomm_crc_table[rfcomm_crc_table[0xff ^ data[0]] ^ data[1]])
++
++/* FCS on 2 bytes */
++static inline u8 __fcs(u8 *data)
++{
++ return (0xff - __crc(data));
++}
++
++/* FCS on 3 bytes */
++static inline u8 __fcs2(u8 *data)
++{
++ return (0xff - rfcomm_crc_table[__crc(data) ^ data[2]]);
++}
++
++/* Check FCS */
++static inline int __check_fcs(u8 *data, int type, u8 fcs)
++{
++ u8 f = __crc(data);
++
++ if (type != RFCOMM_UIH)
++ f = rfcomm_crc_table[f ^ data[2]];
++
++ return rfcomm_crc_table[f ^ fcs] != 0xcf;
++}
++
++/* ---- L2CAP callbacks ---- */
++static void rfcomm_l2state_change(struct sock *sk)
++{
++ BT_DBG("%p state %d", sk, sk->state);
++ rfcomm_schedule(RFCOMM_SCHED_STATE);
++}
++
++static void rfcomm_l2data_ready(struct sock *sk, int bytes)
++{
++ BT_DBG("%p bytes %d", sk, bytes);
++ rfcomm_schedule(RFCOMM_SCHED_RX);
++}
++
++static int rfcomm_l2sock_create(struct socket **sock)
++{
++ int err;
++
++ BT_DBG("");
++
++ err = sock_create(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP, sock);
++ if (!err) {
++ struct sock *sk = (*sock)->sk;
++ sk->data_ready = rfcomm_l2data_ready;
++ sk->state_change = rfcomm_l2state_change;
++ }
++ return err;
++}
++
++/* ---- RFCOMM DLCs ---- */
++static void rfcomm_dlc_timeout(unsigned long arg)
++{
++ struct rfcomm_dlc *d = (void *) arg;
++
++ BT_DBG("dlc %p state %ld", d, d->state);
++
++ set_bit(RFCOMM_TIMED_OUT, &d->flags);
++ rfcomm_dlc_put(d);
++ rfcomm_schedule(RFCOMM_SCHED_TIMEO);
++}
++
++static void rfcomm_dlc_set_timer(struct rfcomm_dlc *d, long timeout)
++{
++ BT_DBG("dlc %p state %ld timeout %ld", d, d->state, timeout);
++
++ if (!mod_timer(&d->timer, jiffies + timeout))
++ rfcomm_dlc_hold(d);
++}
++
++static void rfcomm_dlc_clear_timer(struct rfcomm_dlc *d)
++{
++ BT_DBG("dlc %p state %ld", d, d->state);
++
++ if (timer_pending(&d->timer) && del_timer(&d->timer))
++ rfcomm_dlc_put(d);
++}
++
++static void rfcomm_dlc_clear_state(struct rfcomm_dlc *d)
++{
++ BT_DBG("%p", d);
++
++ d->state = BT_OPEN;
++ d->flags = 0;
++ d->mscex = 0;
++ d->mtu = RFCOMM_DEFAULT_MTU;
++ d->v24_sig = RFCOMM_V24_RTC | RFCOMM_V24_RTR | RFCOMM_V24_DV;
++
++ d->cfc = RFCOMM_CFC_DISABLED;
++ d->rx_credits = RFCOMM_DEFAULT_CREDITS;
++}
++
++struct rfcomm_dlc *rfcomm_dlc_alloc(int prio)
++{
++ struct rfcomm_dlc *d = kmalloc(sizeof(*d), prio);
++ if (!d)
++ return NULL;
++ memset(d, 0, sizeof(*d));
++
++ init_timer(&d->timer);
++ d->timer.function = rfcomm_dlc_timeout;
++ d->timer.data = (unsigned long) d;
++
++ skb_queue_head_init(&d->tx_queue);
++ spin_lock_init(&d->lock);
++ atomic_set(&d->refcnt, 1);
++
++ rfcomm_dlc_clear_state(d);
++
++ BT_DBG("%p", d);
++ return d;
++}
++
++void rfcomm_dlc_free(struct rfcomm_dlc *d)
++{
++ BT_DBG("%p", d);
++
++ skb_queue_purge(&d->tx_queue);
++ kfree(d);
++}
++
++static void rfcomm_dlc_link(struct rfcomm_session *s, struct rfcomm_dlc *d)
++{
++ BT_DBG("dlc %p session %p", d, s);
++
++ rfcomm_session_hold(s);
++
++ rfcomm_dlc_hold(d);
++ list_add(&d->list, &s->dlcs);
++ d->session = s;
++}
++
++static void rfcomm_dlc_unlink(struct rfcomm_dlc *d)
++{
++ struct rfcomm_session *s = d->session;
++
++ BT_DBG("dlc %p refcnt %d session %p", d, atomic_read(&d->refcnt), s);
++
++ list_del(&d->list);
++ d->session = NULL;
++ rfcomm_dlc_put(d);
++
++ rfcomm_session_put(s);
++}
++
++static struct rfcomm_dlc *rfcomm_dlc_get(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_dlc *d;
++ struct list_head *p;
++
++ list_for_each(p, &s->dlcs) {
++ d = list_entry(p, struct rfcomm_dlc, list);
++ if (d->dlci == dlci)
++ return d;
++ }
++ return NULL;
++}
++
++static int __rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
++{
++ struct rfcomm_session *s;
++ int err = 0;
++ u8 dlci;
++
++ BT_DBG("dlc %p state %ld %s %s channel %d",
++ d, d->state, batostr(src), batostr(dst), channel);
++
++ if (channel < 1 || channel > 30)
++ return -EINVAL;
++
++ if (d->state != BT_OPEN && d->state != BT_CLOSED)
++ return 0;
++
++ s = rfcomm_session_get(src, dst);
++ if (!s) {
++ s = rfcomm_session_create(src, dst, &err);
++ if (!s)
++ return err;
++ }
++
++ dlci = __dlci(!s->initiator, channel);
++
++ /* Check if DLCI already exists */
++ if (rfcomm_dlc_get(s, dlci))
++ return -EBUSY;
++
++ rfcomm_dlc_clear_state(d);
++
++ d->dlci = dlci;
++ d->addr = __addr(s->initiator, dlci);
++ d->priority = 7;
++
++ d->state = BT_CONFIG;
++ rfcomm_dlc_link(s, d);
++
++ d->mtu = s->mtu;
++ d->cfc = (s->cfc == RFCOMM_CFC_UNKNOWN) ? 0 : s->cfc;
++
++ if (s->state == BT_CONNECTED)
++ rfcomm_send_pn(s, 1, d);
++ rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT);
++ return 0;
++}
++
++int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
++{
++ mm_segment_t fs;
++ int r;
++
++ rfcomm_lock();
++
++ fs = get_fs(); set_fs(KERNEL_DS);
++ r = __rfcomm_dlc_open(d, src, dst, channel);
++ set_fs(fs);
++
++ rfcomm_unlock();
++ return r;
++}
++
++static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
++{
++ struct rfcomm_session *s = d->session;
++ if (!s)
++ return 0;
++
++ BT_DBG("dlc %p state %ld dlci %d err %d session %p",
++ d, d->state, d->dlci, err, s);
++
++ switch (d->state) {
++ case BT_CONNECTED:
++ case BT_CONFIG:
++ case BT_CONNECT:
++ d->state = BT_DISCONN;
++ if (skb_queue_empty(&d->tx_queue)) {
++ rfcomm_send_disc(s, d->dlci);
++ rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT);
++ } else {
++ rfcomm_queue_disc(d);
++ rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT * 2);
++ }
++ break;
++
++ default:
++ rfcomm_dlc_clear_timer(d);
++
++ rfcomm_dlc_lock(d);
++ d->state = BT_CLOSED;
++ d->state_change(d, err);
++ rfcomm_dlc_unlock(d);
++
++ skb_queue_purge(&d->tx_queue);
++ rfcomm_dlc_unlink(d);
++ }
++
++ return 0;
++}
++
++int rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
++{
++ mm_segment_t fs;
++ int r;
++
++ rfcomm_lock();
++
++ fs = get_fs(); set_fs(KERNEL_DS);
++ r = __rfcomm_dlc_close(d, err);
++ set_fs(fs);
++
++ rfcomm_unlock();
++ return r;
++}
++
++int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb)
++{
++ int len = skb->len;
++
++ if (d->state != BT_CONNECTED)
++ return -ENOTCONN;
++
++ BT_DBG("dlc %p mtu %d len %d", d, d->mtu, len);
++
++ if (len > d->mtu)
++ return -EINVAL;
++
++ rfcomm_make_uih(skb, d->addr);
++ skb_queue_tail(&d->tx_queue, skb);
++
++ if (!test_bit(RFCOMM_TX_THROTTLED, &d->flags))
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++ return len;
++}
++
++void __rfcomm_dlc_throttle(struct rfcomm_dlc *d)
++{
++ BT_DBG("dlc %p state %ld", d, d->state);
++
++ if (!d->cfc) {
++ d->v24_sig |= RFCOMM_V24_FC;
++ set_bit(RFCOMM_MSC_PENDING, &d->flags);
++ }
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++}
++
++void __rfcomm_dlc_unthrottle(struct rfcomm_dlc *d)
++{
++ BT_DBG("dlc %p state %ld", d, d->state);
++
++ if (!d->cfc) {
++ d->v24_sig &= ~RFCOMM_V24_FC;
++ set_bit(RFCOMM_MSC_PENDING, &d->flags);
++ }
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++}
++
++/*
++ Set/get modem status functions use _local_ status i.e. what we report
++ to the other side.
++ Remote status is provided by dlc->modem_status() callback.
++ */
++int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig)
++{
++ BT_DBG("dlc %p state %ld v24_sig 0x%x",
++ d, d->state, v24_sig);
++
++ if (test_bit(RFCOMM_RX_THROTTLED, &d->flags))
++ v24_sig |= RFCOMM_V24_FC;
++ else
++ v24_sig &= ~RFCOMM_V24_FC;
++
++ d->v24_sig = v24_sig;
++
++ if (!test_and_set_bit(RFCOMM_MSC_PENDING, &d->flags))
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++
++ return 0;
++}
++
++int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig)
++{
++ BT_DBG("dlc %p state %ld v24_sig 0x%x",
++ d, d->state, d->v24_sig);
++
++ *v24_sig = d->v24_sig;
++ return 0;
++}
++
++/* ---- RFCOMM sessions ---- */
++struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state)
++{
++ struct rfcomm_session *s = kmalloc(sizeof(*s), GFP_KERNEL);
++ if (!s)
++ return NULL;
++ memset(s, 0, sizeof(*s));
++
++ BT_DBG("session %p sock %p", s, sock);
++
++ INIT_LIST_HEAD(&s->dlcs);
++ s->state = state;
++ s->sock = sock;
++
++ s->mtu = RFCOMM_DEFAULT_MTU;
++ s->cfc = RFCOMM_CFC_UNKNOWN;
++
++ list_add(&s->list, &session_list);
++
++ /* Do not increment module usage count for listeting sessions.
++ * Otherwise we won't be able to unload the module. */
++ if (state != BT_LISTEN)
++ MOD_INC_USE_COUNT;
++ return s;
++}
++
++void rfcomm_session_del(struct rfcomm_session *s)
++{
++ int state = s->state;
++
++ BT_DBG("session %p state %ld", s, s->state);
++
++ list_del(&s->list);
++
++ if (state == BT_CONNECTED)
++ rfcomm_send_disc(s, 0);
++
++ sock_release(s->sock);
++ kfree(s);
++
++ if (state != BT_LISTEN)
++ MOD_DEC_USE_COUNT;
++}
++
++struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst)
++{
++ struct rfcomm_session *s;
++ struct list_head *p, *n;
++ struct bluez_pinfo *pi;
++ list_for_each_safe(p, n, &session_list) {
++ s = list_entry(p, struct rfcomm_session, list);
++ pi = bluez_pi(s->sock->sk);
++
++ if ((!bacmp(src, BDADDR_ANY) || !bacmp(&pi->src, src)) &&
++ !bacmp(&pi->dst, dst))
++ return s;
++ }
++ return NULL;
++}
++
++void rfcomm_session_close(struct rfcomm_session *s, int err)
++{
++ struct rfcomm_dlc *d;
++ struct list_head *p, *n;
++
++ BT_DBG("session %p state %ld err %d", s, s->state, err);
++
++ rfcomm_session_hold(s);
++
++ s->state = BT_CLOSED;
++
++ /* Close all dlcs */
++ list_for_each_safe(p, n, &s->dlcs) {
++ d = list_entry(p, struct rfcomm_dlc, list);
++ d->state = BT_CLOSED;
++ __rfcomm_dlc_close(d, err);
++ }
++
++ rfcomm_session_put(s);
++}
++
++struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst, int *err)
++{
++ struct rfcomm_session *s = NULL;
++ struct sockaddr_l2 addr;
++ struct l2cap_options opts;
++ struct socket *sock;
++ int size;
++
++ BT_DBG("%s %s", batostr(src), batostr(dst));
++
++ *err = rfcomm_l2sock_create(&sock);
++ if (*err < 0)
++ return NULL;
++
++ bacpy(&addr.l2_bdaddr, src);
++ addr.l2_family = AF_BLUETOOTH;
++ addr.l2_psm = 0;
++ *err = sock->ops->bind(sock, (struct sockaddr *) &addr, sizeof(addr));
++ if (*err < 0)
++ goto failed;
++
++ /* Set L2CAP options */
++ size = sizeof(opts);
++ sock->ops->getsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, &size);
++
++ opts.imtu = RFCOMM_MAX_L2CAP_MTU;
++ sock->ops->setsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, size);
++
++ s = rfcomm_session_add(sock, BT_BOUND);
++ if (!s) {
++ *err = -ENOMEM;
++ goto failed;
++ }
++
++ s->initiator = 1;
++
++ bacpy(&addr.l2_bdaddr, dst);
++ addr.l2_family = AF_BLUETOOTH;
++ addr.l2_psm = htobs(RFCOMM_PSM);
++ *err = sock->ops->connect(sock, (struct sockaddr *) &addr, sizeof(addr), O_NONBLOCK);
++ if (*err == 0 || *err == -EAGAIN)
++ return s;
++
++ rfcomm_session_del(s);
++ return NULL;
++
++failed:
++ sock_release(sock);
++ return NULL;
++}
++
++void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst)
++{
++ struct sock *sk = s->sock->sk;
++ if (src)
++ bacpy(src, &bluez_pi(sk)->src);
++ if (dst)
++ bacpy(dst, &bluez_pi(sk)->dst);
++}
++
++/* ---- RFCOMM frame sending ---- */
++static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len)
++{
++ struct socket *sock = s->sock;
++ struct iovec iv = { data, len };
++ struct msghdr msg;
++ int err;
++
++ BT_DBG("session %p len %d", s, len);
++
++ memset(&msg, 0, sizeof(msg));
++ msg.msg_iovlen = 1;
++ msg.msg_iov = &iv;
++
++ err = sock->ops->sendmsg(sock, &msg, len, 0);
++ return err;
++}
++
++static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_cmd cmd;
++
++ BT_DBG("%p dlci %d", s, dlci);
++
++ cmd.addr = __addr(s->initiator, dlci);
++ cmd.ctrl = __ctrl(RFCOMM_SABM, 1);
++ cmd.len = __len8(0);
++ cmd.fcs = __fcs2((u8 *) &cmd);
++
++ return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
++}
++
++static int rfcomm_send_ua(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_cmd cmd;
++
++ BT_DBG("%p dlci %d", s, dlci);
++
++ cmd.addr = __addr(!s->initiator, dlci);
++ cmd.ctrl = __ctrl(RFCOMM_UA, 1);
++ cmd.len = __len8(0);
++ cmd.fcs = __fcs2((u8 *) &cmd);
++
++ return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
++}
++
++static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_cmd cmd;
++
++ BT_DBG("%p dlci %d", s, dlci);
++
++ cmd.addr = __addr(s->initiator, dlci);
++ cmd.ctrl = __ctrl(RFCOMM_DISC, 1);
++ cmd.len = __len8(0);
++ cmd.fcs = __fcs2((u8 *) &cmd);
++
++ return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
++}
++
++static int rfcomm_queue_disc(struct rfcomm_dlc *d)
++{
++ struct rfcomm_cmd *cmd;
++ struct sk_buff *skb;
++
++ BT_DBG("dlc %p dlci %d", d, d->dlci);
++
++ skb = alloc_skb(sizeof(*cmd), GFP_KERNEL);
++ if (!skb)
++ return -ENOMEM;
++
++ cmd = (void *) __skb_put(skb, sizeof(*cmd));
++ cmd->addr = d->addr;
++ cmd->ctrl = __ctrl(RFCOMM_DISC, 1);
++ cmd->len = __len8(0);
++ cmd->fcs = __fcs2((u8 *) cmd);
++
++ skb_queue_tail(&d->tx_queue, skb);
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++ return 0;
++}
++
++static int rfcomm_send_dm(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_cmd cmd;
++
++ BT_DBG("%p dlci %d", s, dlci);
++
++ cmd.addr = __addr(!s->initiator, dlci);
++ cmd.ctrl = __ctrl(RFCOMM_DM, 1);
++ cmd.len = __len8(0);
++ cmd.fcs = __fcs2((u8 *) &cmd);
++
++ return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
++}
++
++static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d type %d", s, cr, type);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + 1);
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_NSC);
++ mcc->len = __len8(1);
++
++ /* Type that we didn't like */
++ *ptr = __mcc_type(cr, type); ptr++;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ struct rfcomm_pn *pn;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d dlci %d mtu %d", s, cr, d->dlci, d->mtu);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + sizeof(*pn));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_PN);
++ mcc->len = __len8(sizeof(*pn));
++
++ pn = (void *) ptr; ptr += sizeof(*pn);
++ pn->dlci = d->dlci;
++ pn->priority = d->priority;
++ pn->ack_timer = 0;
++ pn->max_retrans = 0;
++
++ if (s->cfc) {
++ pn->flow_ctrl = cr ? 0xf0 : 0xe0;
++ pn->credits = RFCOMM_DEFAULT_CREDITS;
++ } else {
++ pn->flow_ctrl = 0;
++ pn->credits = 0;
++ }
++
++ pn->mtu = htobs(d->mtu);
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_rpn(struct rfcomm_session *s, int cr, u8 dlci,
++ u8 bit_rate, u8 data_bits, u8 stop_bits,
++ u8 parity, u8 flow_ctrl_settings,
++ u8 xon_char, u8 xoff_char, u16 param_mask)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ struct rfcomm_rpn *rpn;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d dlci %d bit_r 0x%x data_b 0x%x stop_b 0x%x parity 0x%x"
++ "flwc_s 0x%x xon_c 0x%x xoff_c 0x%x p_mask 0x%x",
++ s, cr, dlci, bit_rate, data_bits, stop_bits, parity,
++ flow_ctrl_settings, xon_char, xoff_char, param_mask);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + sizeof(*rpn));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_RPN);
++ mcc->len = __len8(sizeof(*rpn));
++
++ rpn = (void *) ptr; ptr += sizeof(*rpn);
++ rpn->dlci = __addr(1, dlci);
++ rpn->bit_rate = bit_rate;
++ rpn->line_settings = __rpn_line_settings(data_bits, stop_bits, parity);
++ rpn->flow_ctrl = flow_ctrl_settings;
++ rpn->xon_char = xon_char;
++ rpn->xoff_char = xoff_char;
++ rpn->param_mask = param_mask;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_rls(struct rfcomm_session *s, int cr, u8 dlci, u8 status)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ struct rfcomm_rls *rls;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d status 0x%x", s, cr, status);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + sizeof(*rls));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_RLS);
++ mcc->len = __len8(sizeof(*rls));
++
++ rls = (void *) ptr; ptr += sizeof(*rls);
++ rls->dlci = __addr(1, dlci);
++ rls->status = status;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ struct rfcomm_msc *msc;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d v24 0x%x", s, cr, v24_sig);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + sizeof(*msc));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_MSC);
++ mcc->len = __len8(sizeof(*msc));
++
++ msc = (void *) ptr; ptr += sizeof(*msc);
++ msc->dlci = __addr(1, dlci);
++ msc->v24_sig = v24_sig | 0x01;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_fcoff(struct rfcomm_session *s, int cr)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d", s, cr);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_FCOFF);
++ mcc->len = __len8(0);
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_fcon(struct rfcomm_session *s, int cr)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d", s, cr);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_FCON);
++ mcc->len = __len8(0);
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len)
++{
++ struct socket *sock = s->sock;
++ struct iovec iv[3];
++ struct msghdr msg;
++ unsigned char hdr[5], crc[1];
++
++ if (len > 125)
++ return -EINVAL;
++
++ BT_DBG("%p cr %d", s, cr);
++
++ hdr[0] = __addr(s->initiator, 0);
++ hdr[1] = __ctrl(RFCOMM_UIH, 0);
++ hdr[2] = 0x01 | ((len + 2) << 1);
++ hdr[3] = 0x01 | ((cr & 0x01) << 1) | (RFCOMM_TEST << 2);
++ hdr[4] = 0x01 | (len << 1);
++
++ crc[0] = __fcs(hdr);
++
++ iv[0].iov_base = hdr;
++ iv[0].iov_len = 5;
++ iv[1].iov_base = pattern;
++ iv[1].iov_len = len;
++ iv[2].iov_base = crc;
++ iv[2].iov_len = 1;
++
++ memset(&msg, 0, sizeof(msg));
++ msg.msg_iovlen = 3;
++ msg.msg_iov = iv;
++ return sock->ops->sendmsg(sock, &msg, 6 + len, 0);
++}
++
++static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits)
++{
++ struct rfcomm_hdr *hdr;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p addr %d credits %d", s, addr, credits);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = addr;
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 1);
++ hdr->len = __len8(0);
++
++ *ptr = credits; ptr++;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static void rfcomm_make_uih(struct sk_buff *skb, u8 addr)
++{
++ struct rfcomm_hdr *hdr;
++ int len = skb->len;
++ u8 *crc;
++
++ if (len > 127) {
++ hdr = (void *) skb_push(skb, 4);
++ put_unaligned(htobs(__len16(len)), (u16 *) &hdr->len);
++ } else {
++ hdr = (void *) skb_push(skb, 3);
++ hdr->len = __len8(len);
++ }
++ hdr->addr = addr;
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++
++ crc = skb_put(skb, 1);
++ *crc = __fcs((void *) hdr);
++}
++
++/* ---- RFCOMM frame reception ---- */
++static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci)
++{
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (dlci) {
++ /* Data channel */
++ struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
++ if (!d) {
++ rfcomm_send_dm(s, dlci);
++ return 0;
++ }
++
++ switch (d->state) {
++ case BT_CONNECT:
++ rfcomm_dlc_clear_timer(d);
++
++ rfcomm_dlc_lock(d);
++ d->state = BT_CONNECTED;
++ d->state_change(d, 0);
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_send_msc(s, 1, dlci, d->v24_sig);
++ break;
++
++ case BT_DISCONN:
++ d->state = BT_CLOSED;
++ __rfcomm_dlc_close(d, 0);
++ break;
++ }
++ } else {
++ /* Control channel */
++ switch (s->state) {
++ case BT_CONNECT:
++ s->state = BT_CONNECTED;
++ rfcomm_process_connect(s);
++ break;
++ }
++ }
++ return 0;
++}
++
++static int rfcomm_recv_dm(struct rfcomm_session *s, u8 dlci)
++{
++ int err = 0;
++
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (dlci) {
++ /* Data DLC */
++ struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
++ if (d) {
++ if (d->state == BT_CONNECT || d->state == BT_CONFIG)
++ err = ECONNREFUSED;
++ else
++ err = ECONNRESET;
++
++ d->state = BT_CLOSED;
++ __rfcomm_dlc_close(d, err);
++ }
++ } else {
++ if (s->state == BT_CONNECT)
++ err = ECONNREFUSED;
++ else
++ err = ECONNRESET;
++
++ s->state = BT_CLOSED;
++ rfcomm_session_close(s, err);
++ }
++ return 0;
++}
++
++static int rfcomm_recv_disc(struct rfcomm_session *s, u8 dlci)
++{
++ int err = 0;
++
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (dlci) {
++ struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
++ if (d) {
++ rfcomm_send_ua(s, dlci);
++
++ if (d->state == BT_CONNECT || d->state == BT_CONFIG)
++ err = ECONNREFUSED;
++ else
++ err = ECONNRESET;
++
++ d->state = BT_CLOSED;
++ __rfcomm_dlc_close(d, err);
++ } else
++ rfcomm_send_dm(s, dlci);
++
++ } else {
++ rfcomm_send_ua(s, 0);
++
++ if (s->state == BT_CONNECT)
++ err = ECONNREFUSED;
++ else
++ err = ECONNRESET;
++
++ s->state = BT_CLOSED;
++ rfcomm_session_close(s, err);
++ }
++
++ return 0;
++}
++
++static int rfcomm_recv_sabm(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_dlc *d;
++ u8 channel;
++
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (!dlci) {
++ rfcomm_send_ua(s, 0);
++
++ if (s->state == BT_OPEN) {
++ s->state = BT_CONNECTED;
++ rfcomm_process_connect(s);
++ }
++ return 0;
++ }
++
++ /* Check if DLC exists */
++ d = rfcomm_dlc_get(s, dlci);
++ if (d) {
++ if (d->state == BT_OPEN) {
++ /* DLC was previously opened by PN request */
++ rfcomm_send_ua(s, dlci);
++
++ rfcomm_dlc_lock(d);
++ d->state = BT_CONNECTED;
++ d->state_change(d, 0);
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_send_msc(s, 1, dlci, d->v24_sig);
++ }
++ return 0;
++ }
++
++ /* Notify socket layer about incomming connection */
++ channel = __srv_channel(dlci);
++ if (rfcomm_connect_ind(s, channel, &d)) {
++ d->dlci = dlci;
++ d->addr = __addr(s->initiator, dlci);
++ rfcomm_dlc_link(s, d);
++
++ rfcomm_send_ua(s, dlci);
++
++ rfcomm_dlc_lock(d);
++ d->state = BT_CONNECTED;
++ d->state_change(d, 0);
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_send_msc(s, 1, dlci, d->v24_sig);
++ } else {
++ rfcomm_send_dm(s, dlci);
++ }
++
++ return 0;
++}
++
++static int rfcomm_apply_pn(struct rfcomm_dlc *d, int cr, struct rfcomm_pn *pn)
++{
++ struct rfcomm_session *s = d->session;
++
++ BT_DBG("dlc %p state %ld dlci %d mtu %d fc 0x%x credits %d",
++ d, d->state, d->dlci, pn->mtu, pn->flow_ctrl, pn->credits);
++
++ if (pn->flow_ctrl == 0xf0 || pn->flow_ctrl == 0xe0) {
++ d->cfc = s->cfc = RFCOMM_CFC_ENABLED;
++ d->tx_credits = pn->credits;
++ } else {
++ d->cfc = s->cfc = RFCOMM_CFC_DISABLED;
++ set_bit(RFCOMM_TX_THROTTLED, &d->flags);
++ }
++
++ d->priority = pn->priority;
++
++ d->mtu = s->mtu = btohs(pn->mtu);
++
++ return 0;
++}
++
++static int rfcomm_recv_pn(struct rfcomm_session *s, int cr, struct sk_buff *skb)
++{
++ struct rfcomm_pn *pn = (void *) skb->data;
++ struct rfcomm_dlc *d;
++ u8 dlci = pn->dlci;
++
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (!dlci)
++ return 0;
++
++ d = rfcomm_dlc_get(s, dlci);
++ if (d) {
++ if (cr) {
++ /* PN request */
++ rfcomm_apply_pn(d, cr, pn);
++ rfcomm_send_pn(s, 0, d);
++ } else {
++ /* PN response */
++ switch (d->state) {
++ case BT_CONFIG:
++ rfcomm_apply_pn(d, cr, pn);
++
++ d->state = BT_CONNECT;
++ rfcomm_send_sabm(s, d->dlci);
++ break;
++ }
++ }
++ } else {
++ u8 channel = __srv_channel(dlci);
++
++ if (!cr)
++ return 0;
++
++ /* PN request for non existing DLC.
++ * Assume incomming connection. */
++ if (rfcomm_connect_ind(s, channel, &d)) {
++ d->dlci = dlci;
++ d->addr = __addr(s->initiator, dlci);
++ rfcomm_dlc_link(s, d);
++
++ rfcomm_apply_pn(d, cr, pn);
++
++ d->state = BT_OPEN;
++ rfcomm_send_pn(s, 0, d);
++ } else {
++ rfcomm_send_dm(s, dlci);
++ }
++ }
++ return 0;
++}
++
++static int rfcomm_recv_rpn(struct rfcomm_session *s, int cr, int len, struct sk_buff *skb)
++{
++ struct rfcomm_rpn *rpn = (void *) skb->data;
++ u8 dlci = __get_dlci(rpn->dlci);
++
++ u8 bit_rate = 0;
++ u8 data_bits = 0;
++ u8 stop_bits = 0;
++ u8 parity = 0;
++ u8 flow_ctrl = 0;
++ u8 xon_char = 0;
++ u8 xoff_char = 0;
++ u16 rpn_mask = RFCOMM_RPN_PM_ALL;
++
++ BT_DBG("dlci %d cr %d len 0x%x bitr 0x%x line 0x%x flow 0x%x xonc 0x%x xoffc 0x%x pm 0x%x",
++ dlci, cr, len, rpn->bit_rate, rpn->line_settings, rpn->flow_ctrl,
++ rpn->xon_char, rpn->xoff_char, rpn->param_mask);
++
++ if (!cr)
++ return 0;
++
++ if (len == 1) {
++ /* request: return default setting */
++ bit_rate = RFCOMM_RPN_BR_115200;
++ data_bits = RFCOMM_RPN_DATA_8;
++ stop_bits = RFCOMM_RPN_STOP_1;
++ parity = RFCOMM_RPN_PARITY_NONE;
++ flow_ctrl = RFCOMM_RPN_FLOW_NONE;
++ xon_char = RFCOMM_RPN_XON_CHAR;
++ xoff_char = RFCOMM_RPN_XOFF_CHAR;
++
++ goto rpn_out;
++ }
++ /* check for sane values: ignore/accept bit_rate, 8 bits, 1 stop bit, no parity,
++ no flow control lines, normal XON/XOFF chars */
++ if (rpn->param_mask & RFCOMM_RPN_PM_BITRATE) {
++ bit_rate = rpn->bit_rate;
++ if (bit_rate != RFCOMM_RPN_BR_115200) {
++ BT_DBG("RPN bit rate mismatch 0x%x", bit_rate);
++ bit_rate = RFCOMM_RPN_BR_115200;
++ rpn_mask ^= RFCOMM_RPN_PM_BITRATE;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_DATA) {
++ data_bits = __get_rpn_data_bits(rpn->line_settings);
++ if (data_bits != RFCOMM_RPN_DATA_8) {
++ BT_DBG("RPN data bits mismatch 0x%x", data_bits);
++ data_bits = RFCOMM_RPN_DATA_8;
++ rpn_mask ^= RFCOMM_RPN_PM_DATA;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_STOP) {
++ stop_bits = __get_rpn_stop_bits(rpn->line_settings);
++ if (stop_bits != RFCOMM_RPN_STOP_1) {
++ BT_DBG("RPN stop bits mismatch 0x%x", stop_bits);
++ stop_bits = RFCOMM_RPN_STOP_1;
++ rpn_mask ^= RFCOMM_RPN_PM_STOP;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_PARITY) {
++ parity = __get_rpn_parity(rpn->line_settings);
++ if (parity != RFCOMM_RPN_PARITY_NONE) {
++ BT_DBG("RPN parity mismatch 0x%x", parity);
++ parity = RFCOMM_RPN_PARITY_NONE;
++ rpn_mask ^= RFCOMM_RPN_PM_PARITY;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_FLOW) {
++ flow_ctrl = rpn->flow_ctrl;
++ if (flow_ctrl != RFCOMM_RPN_FLOW_NONE) {
++ BT_DBG("RPN flow ctrl mismatch 0x%x", flow_ctrl);
++ flow_ctrl = RFCOMM_RPN_FLOW_NONE;
++ rpn_mask ^= RFCOMM_RPN_PM_FLOW;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_XON) {
++ xon_char = rpn->xon_char;
++ if (xon_char != RFCOMM_RPN_XON_CHAR) {
++ BT_DBG("RPN XON char mismatch 0x%x", xon_char);
++ xon_char = RFCOMM_RPN_XON_CHAR;
++ rpn_mask ^= RFCOMM_RPN_PM_XON;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_XOFF) {
++ xoff_char = rpn->xoff_char;
++ if (xoff_char != RFCOMM_RPN_XOFF_CHAR) {
++ BT_DBG("RPN XOFF char mismatch 0x%x", xoff_char);
++ xoff_char = RFCOMM_RPN_XOFF_CHAR;
++ rpn_mask ^= RFCOMM_RPN_PM_XOFF;
++ }
++ }
++
++rpn_out:
++ rfcomm_send_rpn(s, 0, dlci,
++ bit_rate, data_bits, stop_bits, parity, flow_ctrl,
++ xon_char, xoff_char, rpn_mask);
++
++ return 0;
++}
++
++static int rfcomm_recv_rls(struct rfcomm_session *s, int cr, struct sk_buff *skb)
++{
++ struct rfcomm_rls *rls = (void *) skb->data;
++ u8 dlci = __get_dlci(rls->dlci);
++
++ BT_DBG("dlci %d cr %d status 0x%x", dlci, cr, rls->status);
++
++ if (!cr)
++ return 0;
++
++ /* FIXME: We should probably do something with this
++ information here. But for now it's sufficient just
++ to reply -- Bluetooth 1.1 says it's mandatory to
++ recognise and respond to RLS */
++
++ rfcomm_send_rls(s, 0, dlci, rls->status);
++
++ return 0;
++}
++
++static int rfcomm_recv_msc(struct rfcomm_session *s, int cr, struct sk_buff *skb)
++{
++ struct rfcomm_msc *msc = (void *) skb->data;
++ struct rfcomm_dlc *d;
++ u8 dlci = __get_dlci(msc->dlci);
++
++ BT_DBG("dlci %d cr %d v24 0x%x", dlci, cr, msc->v24_sig);
++
++ d = rfcomm_dlc_get(s, dlci);
++ if (!d)
++ return 0;
++
++ if (cr) {
++ if (msc->v24_sig & RFCOMM_V24_FC && !d->cfc)
++ set_bit(RFCOMM_TX_THROTTLED, &d->flags);
++ else
++ clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
++
++ rfcomm_dlc_lock(d);
++ if (d->modem_status)
++ d->modem_status(d, msc->v24_sig);
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_send_msc(s, 0, dlci, msc->v24_sig);
++
++ d->mscex |= RFCOMM_MSCEX_RX;
++ } else
++ d->mscex |= RFCOMM_MSCEX_TX;
++
++ return 0;
++}
++
++static int rfcomm_recv_mcc(struct rfcomm_session *s, struct sk_buff *skb)
++{
++ struct rfcomm_mcc *mcc = (void *) skb->data;
++ u8 type, cr, len;
++
++ cr = __test_cr(mcc->type);
++ type = __get_mcc_type(mcc->type);
++ len = __get_mcc_len(mcc->len);
++
++ BT_DBG("%p type 0x%x cr %d", s, type, cr);
++
++ skb_pull(skb, 2);
++
++ switch (type) {
++ case RFCOMM_PN:
++ rfcomm_recv_pn(s, cr, skb);
++ break;
++
++ case RFCOMM_RPN:
++ rfcomm_recv_rpn(s, cr, len, skb);
++ break;
++
++ case RFCOMM_RLS:
++ rfcomm_recv_rls(s, cr, skb);
++ break;
++
++ case RFCOMM_MSC:
++ rfcomm_recv_msc(s, cr, skb);
++ break;
++
++ case RFCOMM_FCOFF:
++ if (cr) {
++ set_bit(RFCOMM_TX_THROTTLED, &s->flags);
++ rfcomm_send_fcoff(s, 0);
++ }
++ break;
++
++ case RFCOMM_FCON:
++ if (cr) {
++ clear_bit(RFCOMM_TX_THROTTLED, &s->flags);
++ rfcomm_send_fcon(s, 0);
++ }
++ break;
++
++ case RFCOMM_TEST:
++ if (cr)
++ rfcomm_send_test(s, 0, skb->data, skb->len);
++ break;
++
++ case RFCOMM_NSC:
++ break;
++
++ default:
++ BT_ERR("Unknown control type 0x%02x", type);
++ rfcomm_send_nsc(s, cr, type);
++ break;
++ }
++ return 0;
++}
++
++static int rfcomm_recv_data(struct rfcomm_session *s, u8 dlci, int pf, struct sk_buff *skb)
++{
++ struct rfcomm_dlc *d;
++
++ BT_DBG("session %p state %ld dlci %d pf %d", s, s->state, dlci, pf);
++
++ d = rfcomm_dlc_get(s, dlci);
++ if (!d) {
++ rfcomm_send_dm(s, dlci);
++ goto drop;
++ }
++
++ if (pf && d->cfc) {
++ u8 credits = *(u8 *) skb->data; skb_pull(skb, 1);
++
++ d->tx_credits += credits;
++ if (d->tx_credits)
++ clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
++ }
++
++ if (skb->len && d->state == BT_CONNECTED) {
++ rfcomm_dlc_lock(d);
++ d->rx_credits--;
++ d->data_ready(d, skb);
++ rfcomm_dlc_unlock(d);
++ return 0;
++ }
++
++drop:
++ kfree_skb(skb);
++ return 0;
++}
++
++static int rfcomm_recv_frame(struct rfcomm_session *s, struct sk_buff *skb)
++{
++ struct rfcomm_hdr *hdr = (void *) skb->data;
++ u8 type, dlci, fcs;
++
++ dlci = __get_dlci(hdr->addr);
++ type = __get_type(hdr->ctrl);
++
++ /* Trim FCS */
++ skb->len--; skb->tail--;
++ fcs = *(u8 *) skb->tail;
++
++ if (__check_fcs(skb->data, type, fcs)) {
++ BT_ERR("bad checksum in packet");
++ kfree_skb(skb);
++ return -EILSEQ;
++ }
++
++ if (__test_ea(hdr->len))
++ skb_pull(skb, 3);
++ else
++ skb_pull(skb, 4);
++
++ switch (type) {
++ case RFCOMM_SABM:
++ if (__test_pf(hdr->ctrl))
++ rfcomm_recv_sabm(s, dlci);
++ break;
++
++ case RFCOMM_DISC:
++ if (__test_pf(hdr->ctrl))
++ rfcomm_recv_disc(s, dlci);
++ break;
++
++ case RFCOMM_UA:
++ if (__test_pf(hdr->ctrl))
++ rfcomm_recv_ua(s, dlci);
++ break;
++
++ case RFCOMM_DM:
++ rfcomm_recv_dm(s, dlci);
++ break;
++
++ case RFCOMM_UIH:
++ if (dlci)
++ return rfcomm_recv_data(s, dlci, __test_pf(hdr->ctrl), skb);
++
++ rfcomm_recv_mcc(s, skb);
++ break;
++
++ default:
++ BT_ERR("Unknown packet type 0x%02x\n", type);
++ break;
++ }
++ kfree_skb(skb);
++ return 0;
++}
++
++/* ---- Connection and data processing ---- */
++
++static void rfcomm_process_connect(struct rfcomm_session *s)
++{
++ struct rfcomm_dlc *d;
++ struct list_head *p, *n;
++
++ BT_DBG("session %p state %ld", s, s->state);
++
++ list_for_each_safe(p, n, &s->dlcs) {
++ d = list_entry(p, struct rfcomm_dlc, list);
++ if (d->state == BT_CONFIG) {
++ d->mtu = s->mtu;
++ rfcomm_send_pn(s, 1, d);
++ }
++ }
++}
++
++/* Send data queued for the DLC.
++ * Return number of frames left in the queue.
++ */
++static inline int rfcomm_process_tx(struct rfcomm_dlc *d)
++{
++ struct sk_buff *skb;
++ int err;
++
++ BT_DBG("dlc %p state %ld cfc %d rx_credits %d tx_credits %d",
++ d, d->state, d->cfc, d->rx_credits, d->tx_credits);
++
++ /* Send pending MSC */
++ if (test_and_clear_bit(RFCOMM_MSC_PENDING, &d->flags))
++ rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
++
++ if (d->cfc) {
++ /* CFC enabled.
++ * Give them some credits */
++ if (!test_bit(RFCOMM_RX_THROTTLED, &d->flags) &&
++ d->rx_credits <= (d->cfc >> 2)) {
++ rfcomm_send_credits(d->session, d->addr, d->cfc - d->rx_credits);
++ d->rx_credits = d->cfc;
++ }
++ } else {
++ /* CFC disabled.
++ * Give ourselves some credits */
++ d->tx_credits = 5;
++ }
++
++ if (test_bit(RFCOMM_TX_THROTTLED, &d->flags))
++ return skb_queue_len(&d->tx_queue);
++
++ while (d->tx_credits && (skb = skb_dequeue(&d->tx_queue))) {
++ err = rfcomm_send_frame(d->session, skb->data, skb->len);
++ if (err < 0) {
++ skb_queue_head(&d->tx_queue, skb);
++ break;
++ }
++ kfree_skb(skb);
++ d->tx_credits--;
++ }
++
++ if (d->cfc && !d->tx_credits) {
++ /* We're out of TX credits.
++ * Set TX_THROTTLED flag to avoid unnesary wakeups by dlc_send. */
++ set_bit(RFCOMM_TX_THROTTLED, &d->flags);
++ }
++
++ return skb_queue_len(&d->tx_queue);
++}
++
++static inline void rfcomm_process_dlcs(struct rfcomm_session *s)
++{
++ struct rfcomm_dlc *d;
++ struct list_head *p, *n;
++
++ BT_DBG("session %p state %ld", s, s->state);
++
++ list_for_each_safe(p, n, &s->dlcs) {
++ d = list_entry(p, struct rfcomm_dlc, list);
++ if (test_bit(RFCOMM_TIMED_OUT, &d->flags)) {
++ __rfcomm_dlc_close(d, ETIMEDOUT);
++ continue;
++ }
++
++ if (test_bit(RFCOMM_TX_THROTTLED, &s->flags))
++ continue;
++
++ if ((d->state == BT_CONNECTED || d->state == BT_DISCONN) &&
++ d->mscex == RFCOMM_MSCEX_OK)
++ rfcomm_process_tx(d);
++ }
++}
++
++static inline void rfcomm_process_rx(struct rfcomm_session *s)
++{
++ struct socket *sock = s->sock;
++ struct sock *sk = sock->sk;
++ struct sk_buff *skb;
++
++ BT_DBG("session %p state %ld qlen %d", s, s->state, skb_queue_len(&sk->receive_queue));
++
++ /* Get data directly from socket receive queue without copying it. */
++ while ((skb = skb_dequeue(&sk->receive_queue))) {
++ skb_orphan(skb);
++ rfcomm_recv_frame(s, skb);
++ }
++
++ if (sk->state == BT_CLOSED) {
++ if (!s->initiator)
++ rfcomm_session_put(s);
++
++ rfcomm_session_close(s, sk->err);
++ }
++}
++
++static inline void rfcomm_accept_connection(struct rfcomm_session *s)
++{
++ struct socket *sock = s->sock, *nsock;
++ int err;
++
++ /* Fast check for a new connection.
++ * Avoids unnesesary socket allocations. */
++ if (list_empty(&bluez_pi(sock->sk)->accept_q))
++ return;
++
++ BT_DBG("session %p", s);
++
++ nsock = sock_alloc();
++ if (!nsock)
++ return;
++
++ nsock->type = sock->type;
++ nsock->ops = sock->ops;
++
++ err = sock->ops->accept(sock, nsock, O_NONBLOCK);
++ if (err < 0) {
++ sock_release(nsock);
++ return;
++ }
++
++ /* Set our callbacks */
++ nsock->sk->data_ready = rfcomm_l2data_ready;
++ nsock->sk->state_change = rfcomm_l2state_change;
++
++ s = rfcomm_session_add(nsock, BT_OPEN);
++ if (s) {
++ rfcomm_session_hold(s);
++ rfcomm_schedule(RFCOMM_SCHED_RX);
++ } else
++ sock_release(nsock);
++}
++
++static inline void rfcomm_check_connection(struct rfcomm_session *s)
++{
++ struct sock *sk = s->sock->sk;
++
++ BT_DBG("%p state %ld", s, s->state);
++
++ switch(sk->state) {
++ case BT_CONNECTED:
++ s->state = BT_CONNECT;
++
++ /* We can adjust MTU on outgoing sessions.
++ * L2CAP MTU minus UIH header and FCS. */
++ s->mtu = min(l2cap_pi(sk)->omtu, l2cap_pi(sk)->imtu) - 5;
++
++ rfcomm_send_sabm(s, 0);
++ break;
++
++ case BT_CLOSED:
++ s->state = BT_CLOSED;
++ rfcomm_session_close(s, sk->err);
++ break;
++ }
++}
++
++static inline void rfcomm_process_sessions(void)
++{
++ struct list_head *p, *n;
++
++ rfcomm_lock();
++
++ list_for_each_safe(p, n, &session_list) {
++ struct rfcomm_session *s;
++ s = list_entry(p, struct rfcomm_session, list);
++
++ if (s->state == BT_LISTEN) {
++ rfcomm_accept_connection(s);
++ continue;
++ }
++
++ rfcomm_session_hold(s);
++
++ switch (s->state) {
++ case BT_BOUND:
++ rfcomm_check_connection(s);
++ break;
++
++ default:
++ rfcomm_process_rx(s);
++ break;
++ }
++
++ rfcomm_process_dlcs(s);
++
++ rfcomm_session_put(s);
++ }
++
++ rfcomm_unlock();
++}
++
++static void rfcomm_worker(void)
++{
++ BT_DBG("");
++
++ daemonize(); reparent_to_init();
++ set_fs(KERNEL_DS);
++
++ while (!atomic_read(&terminate)) {
++ BT_DBG("worker loop event 0x%lx", rfcomm_event);
++
++ if (!test_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event)) {
++ /* No pending events. Let's sleep.
++ * Incomming connections and data will wake us up. */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule();
++ }
++
++ /* Process stuff */
++ clear_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event);
++ rfcomm_process_sessions();
++ }
++ set_current_state(TASK_RUNNING);
++ return;
++}
++
++static int rfcomm_add_listener(bdaddr_t *ba)
++{
++ struct sockaddr_l2 addr;
++ struct l2cap_options opts;
++ struct socket *sock;
++ struct rfcomm_session *s;
++ int size, err = 0;
++
++ /* Create socket */
++ err = rfcomm_l2sock_create(&sock);
++ if (err < 0) {
++ BT_ERR("Create socket failed %d", err);
++ return err;
++ }
++
++ /* Bind socket */
++ bacpy(&addr.l2_bdaddr, ba);
++ addr.l2_family = AF_BLUETOOTH;
++ addr.l2_psm = htobs(RFCOMM_PSM);
++ err = sock->ops->bind(sock, (struct sockaddr *) &addr, sizeof(addr));
++ if (err < 0) {
++ BT_ERR("Bind failed %d", err);
++ goto failed;
++ }
++
++ /* Set L2CAP options */
++ size = sizeof(opts);
++ sock->ops->getsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, &size);
++
++ opts.imtu = RFCOMM_MAX_L2CAP_MTU;
++ sock->ops->setsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, size);
++
++ /* Start listening on the socket */
++ err = sock->ops->listen(sock, 10);
++ if (err) {
++ BT_ERR("Listen failed %d", err);
++ goto failed;
++ }
++
++ /* Add listening session */
++ s = rfcomm_session_add(sock, BT_LISTEN);
++ if (!s)
++ goto failed;
++
++ rfcomm_session_hold(s);
++ return 0;
++failed:
++ sock_release(sock);
++ return err;
++}
++
++static void rfcomm_kill_listener(void)
++{
++ struct rfcomm_session *s;
++ struct list_head *p, *n;
++
++ BT_DBG("");
++
++ list_for_each_safe(p, n, &session_list) {
++ s = list_entry(p, struct rfcomm_session, list);
++ rfcomm_session_del(s);
++ }
++}
++
++static int rfcomm_run(void *unused)
++{
++ rfcomm_thread = current;
++
++ atomic_inc(&running);
++
++ daemonize(); reparent_to_init();
++
++ sigfillset(&current->blocked);
++ set_fs(KERNEL_DS);
++
++ sprintf(current->comm, "krfcommd");
++
++ BT_DBG("");
++
++ rfcomm_add_listener(BDADDR_ANY);
++
++ rfcomm_worker();
++
++ rfcomm_kill_listener();
++
++ atomic_dec(&running);
++ return 0;
++}
++
++/* ---- Proc fs support ---- */
++static int rfcomm_dlc_dump(char *buf)
++{
++ struct rfcomm_session *s;
++ struct sock *sk;
++ struct list_head *p, *pp;
++ char *ptr = buf;
++
++ rfcomm_lock();
++
++ list_for_each(p, &session_list) {
++ s = list_entry(p, struct rfcomm_session, list);
++ sk = s->sock->sk;
++
++ list_for_each(pp, &s->dlcs) {
++ struct rfcomm_dlc *d;
++ d = list_entry(pp, struct rfcomm_dlc, list);
++
++ ptr += sprintf(ptr, "dlc %s %s %ld %d %d %d %d\n",
++ batostr(&bluez_pi(sk)->src), batostr(&bluez_pi(sk)->dst),
++ d->state, d->dlci, d->mtu, d->rx_credits, d->tx_credits);
++ }
++ }
++
++ rfcomm_unlock();
++
++ return ptr - buf;
++}
++
++extern int rfcomm_sock_dump(char *buf);
++
++static int rfcomm_read_proc(char *buf, char **start, off_t offset, int count, int *eof, void *priv)
++{
++ char *ptr = buf;
++ int len;
++
++ BT_DBG("count %d, offset %ld", count, offset);
++
++ ptr += rfcomm_dlc_dump(ptr);
++ ptr += rfcomm_sock_dump(ptr);
++ len = ptr - buf;
++
++ if (len <= count + offset)
++ *eof = 1;
++
++ *start = buf + offset;
++ len -= offset;
++
++ if (len > count)
++ len = count;
++ if (len < 0)
++ len = 0;
++
++ return len;
++}
++
++/* ---- Initialization ---- */
++int __init rfcomm_init(void)
++{
++ l2cap_load();
++
++ kernel_thread(rfcomm_run, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
++
++ rfcomm_init_sockets();
++
++#ifdef CONFIG_BLUEZ_RFCOMM_TTY
++ rfcomm_init_ttys();
++#endif
++
++ create_proc_read_entry("bluetooth/rfcomm", 0, 0, rfcomm_read_proc, NULL);
++
++ BT_INFO("BlueZ RFCOMM ver %s", VERSION);
++ BT_INFO("Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>");
++ BT_INFO("Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>");
++ return 0;
++}
++
++void rfcomm_cleanup(void)
++{
++ /* Terminate working thread.
++ * ie. Set terminate flag and wake it up */
++ atomic_inc(&terminate);
++ rfcomm_schedule(RFCOMM_SCHED_STATE);
++
++ /* Wait until thread is running */
++ while (atomic_read(&running))
++ schedule();
++
++ remove_proc_entry("bluetooth/rfcomm", NULL);
++
++#ifdef CONFIG_BLUEZ_RFCOMM_TTY
++ rfcomm_cleanup_ttys();
++#endif
++
++ rfcomm_cleanup_sockets();
++ return;
++}
++
++module_init(rfcomm_init);
++module_exit(rfcomm_cleanup);
++
++MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueZ RFCOMM ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -Nur c3000_pre/linux/net/bluetooth/rfcomm/crc.c c3000_work/linux/net/bluetooth/rfcomm/crc.c
+--- c3000_pre/linux/net/bluetooth/rfcomm/crc.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/net/bluetooth/rfcomm/crc.c 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,71 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * RFCOMM FCS calculation.
++ *
++ * $Id: crc.c,v 1.2 2002/09/21 09:54:32 holtmann Exp $
++ */
++
++/* reversed, 8-bit, poly=0x07 */
++unsigned char rfcomm_crc_table[256] = {
++ 0x00, 0x91, 0xe3, 0x72, 0x07, 0x96, 0xe4, 0x75,
++ 0x0e, 0x9f, 0xed, 0x7c, 0x09, 0x98, 0xea, 0x7b,
++ 0x1c, 0x8d, 0xff, 0x6e, 0x1b, 0x8a, 0xf8, 0x69,
++ 0x12, 0x83, 0xf1, 0x60, 0x15, 0x84, 0xf6, 0x67,
++
++ 0x38, 0xa9, 0xdb, 0x4a, 0x3f, 0xae, 0xdc, 0x4d,
++ 0x36, 0xa7, 0xd5, 0x44, 0x31, 0xa0, 0xd2, 0x43,
++ 0x24, 0xb5, 0xc7, 0x56, 0x23, 0xb2, 0xc0, 0x51,
++ 0x2a, 0xbb, 0xc9, 0x58, 0x2d, 0xbc, 0xce, 0x5f,
++
++ 0x70, 0xe1, 0x93, 0x02, 0x77, 0xe6, 0x94, 0x05,
++ 0x7e, 0xef, 0x9d, 0x0c, 0x79, 0xe8, 0x9a, 0x0b,
++ 0x6c, 0xfd, 0x8f, 0x1e, 0x6b, 0xfa, 0x88, 0x19,
++ 0x62, 0xf3, 0x81, 0x10, 0x65, 0xf4, 0x86, 0x17,
++
++ 0x48, 0xd9, 0xab, 0x3a, 0x4f, 0xde, 0xac, 0x3d,
++ 0x46, 0xd7, 0xa5, 0x34, 0x41, 0xd0, 0xa2, 0x33,
++ 0x54, 0xc5, 0xb7, 0x26, 0x53, 0xc2, 0xb0, 0x21,
++ 0x5a, 0xcb, 0xb9, 0x28, 0x5d, 0xcc, 0xbe, 0x2f,
++
++ 0xe0, 0x71, 0x03, 0x92, 0xe7, 0x76, 0x04, 0x95,
++ 0xee, 0x7f, 0x0d, 0x9c, 0xe9, 0x78, 0x0a, 0x9b,
++ 0xfc, 0x6d, 0x1f, 0x8e, 0xfb, 0x6a, 0x18, 0x89,
++ 0xf2, 0x63, 0x11, 0x80, 0xf5, 0x64, 0x16, 0x87,
++
++ 0xd8, 0x49, 0x3b, 0xaa, 0xdf, 0x4e, 0x3c, 0xad,
++ 0xd6, 0x47, 0x35, 0xa4, 0xd1, 0x40, 0x32, 0xa3,
++ 0xc4, 0x55, 0x27, 0xb6, 0xc3, 0x52, 0x20, 0xb1,
++ 0xca, 0x5b, 0x29, 0xb8, 0xcd, 0x5c, 0x2e, 0xbf,
++
++ 0x90, 0x01, 0x73, 0xe2, 0x97, 0x06, 0x74, 0xe5,
++ 0x9e, 0x0f, 0x7d, 0xec, 0x99, 0x08, 0x7a, 0xeb,
++ 0x8c, 0x1d, 0x6f, 0xfe, 0x8b, 0x1a, 0x68, 0xf9,
++ 0x82, 0x13, 0x61, 0xf0, 0x85, 0x14, 0x66, 0xf7,
++
++ 0xa8, 0x39, 0x4b, 0xda, 0xaf, 0x3e, 0x4c, 0xdd,
++ 0xa6, 0x37, 0x45, 0xd4, 0xa1, 0x30, 0x42, 0xd3,
++ 0xb4, 0x25, 0x57, 0xc6, 0xb3, 0x22, 0x50, 0xc1,
++ 0xba, 0x2b, 0x59, 0xc8, 0xbd, 0x2c, 0x5e, 0xcf
++};
+diff -Nur c3000_pre/linux/net/bluetooth/rfcomm/sock.c c3000_work/linux/net/bluetooth/rfcomm/sock.c
+--- c3000_pre/linux/net/bluetooth/rfcomm/sock.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/net/bluetooth/rfcomm/sock.c 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,847 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * RFCOMM sockets.
++ *
++ * $Id: sock.c,v 1.30 2002/10/18 20:12:12 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/init.h>
++#include <linux/skbuff.h>
++#include <linux/interrupt.h>
++#include <linux/socket.h>
++#include <linux/skbuff.h>
++#include <linux/list.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/rfcomm.h>
++
++#ifndef CONFIG_BLUEZ_RFCOMM_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++static struct proto_ops rfcomm_sock_ops;
++
++static struct bluez_sock_list rfcomm_sk_list = {
++ lock: RW_LOCK_UNLOCKED
++};
++
++static void rfcomm_sock_close(struct sock *sk);
++static void rfcomm_sock_kill(struct sock *sk);
++
++/* ---- DLC callbacks ----
++ *
++ * called under rfcomm_dlc_lock()
++ */
++static void rfcomm_sk_data_ready(struct rfcomm_dlc *d, struct sk_buff *skb)
++{
++ struct sock *sk = d->owner;
++ if (!sk)
++ return;
++
++ atomic_add(skb->len, &sk->rmem_alloc);
++ skb_queue_tail(&sk->receive_queue, skb);
++ sk->data_ready(sk, skb->len);
++
++ if (atomic_read(&sk->rmem_alloc) >= sk->rcvbuf)
++ rfcomm_dlc_throttle(d);
++}
++
++static void rfcomm_sk_state_change(struct rfcomm_dlc *d, int err)
++{
++ struct sock *sk = d->owner, *parent;
++ if (!sk)
++ return;
++
++ BT_DBG("dlc %p state %ld err %d", d, d->state, err);
++
++ bh_lock_sock(sk);
++
++ if (err)
++ sk->err = err;
++ sk->state = d->state;
++
++ parent = bluez_pi(sk)->parent;
++ if (!parent) {
++ if (d->state == BT_CONNECTED)
++ rfcomm_session_getaddr(d->session, &bluez_pi(sk)->src, NULL);
++ sk->state_change(sk);
++ } else
++ parent->data_ready(parent, 0);
++
++ bh_unlock_sock(sk);
++}
++
++/* ---- Socket functions ---- */
++static struct sock *__rfcomm_get_sock_by_addr(u8 channel, bdaddr_t *src)
++{
++ struct sock *sk;
++
++ for (sk = rfcomm_sk_list.head; sk; sk = sk->next) {
++ if (rfcomm_pi(sk)->channel == channel &&
++ !bacmp(&bluez_pi(sk)->src, src))
++ break;
++ }
++
++ return sk;
++}
++
++/* Find socket with channel and source bdaddr.
++ * Returns closest match.
++ */
++static struct sock *__rfcomm_get_sock_by_channel(int state, u8 channel, bdaddr_t *src)
++{
++ struct sock *sk, *sk1 = NULL;
++
++ for (sk = rfcomm_sk_list.head; sk; sk = sk->next) {
++ if (state && sk->state != state)
++ continue;
++
++ if (rfcomm_pi(sk)->channel == channel) {
++ /* Exact match. */
++ if (!bacmp(&bluez_pi(sk)->src, src))
++ break;
++
++ /* Closest match */
++ if (!bacmp(&bluez_pi(sk)->src, BDADDR_ANY))
++ sk1 = sk;
++ }
++ }
++ return sk ? sk : sk1;
++}
++
++/* Find socket with given address (channel, src).
++ * Returns locked socket */
++static inline struct sock *rfcomm_get_sock_by_channel(int state, u8 channel, bdaddr_t *src)
++{
++ struct sock *s;
++ read_lock(&rfcomm_sk_list.lock);
++ s = __rfcomm_get_sock_by_channel(state, channel, src);
++ if (s) bh_lock_sock(s);
++ read_unlock(&rfcomm_sk_list.lock);
++ return s;
++}
++
++static void rfcomm_sock_destruct(struct sock *sk)
++{
++ struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
++
++ BT_DBG("sk %p dlc %p", sk, d);
++
++ skb_queue_purge(&sk->receive_queue);
++ skb_queue_purge(&sk->write_queue);
++
++ rfcomm_dlc_lock(d);
++ rfcomm_pi(sk)->dlc = NULL;
++
++ /* Detach DLC if it's owned by this socket */
++ if (d->owner == sk)
++ d->owner = NULL;
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_dlc_put(d);
++
++ MOD_DEC_USE_COUNT;
++}
++
++static void rfcomm_sock_cleanup_listen(struct sock *parent)
++{
++ struct sock *sk;
++
++ BT_DBG("parent %p", parent);
++
++ /* Close not yet accepted dlcs */
++ while ((sk = bluez_accept_dequeue(parent, NULL))) {
++ rfcomm_sock_close(sk);
++ rfcomm_sock_kill(sk);
++ }
++
++ parent->state = BT_CLOSED;
++ parent->zapped = 1;
++}
++
++/* Kill socket (only if zapped and orphan)
++ * Must be called on unlocked socket.
++ */
++static void rfcomm_sock_kill(struct sock *sk)
++{
++ if (!sk->zapped || sk->socket)
++ return;
++
++ BT_DBG("sk %p state %d refcnt %d", sk, sk->state, atomic_read(&sk->refcnt));
++
++ /* Kill poor orphan */
++ bluez_sock_unlink(&rfcomm_sk_list, sk);
++ sk->dead = 1;
++ sock_put(sk);
++}
++
++static void __rfcomm_sock_close(struct sock *sk)
++{
++ struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
++
++ BT_DBG("sk %p state %d socket %p", sk, sk->state, sk->socket);
++
++ switch (sk->state) {
++ case BT_LISTEN:
++ rfcomm_sock_cleanup_listen(sk);
++ break;
++
++ case BT_CONNECT:
++ case BT_CONNECT2:
++ case BT_CONFIG:
++ case BT_CONNECTED:
++ rfcomm_dlc_close(d, 0);
++
++ default:
++ sk->zapped = 1;
++ break;
++ }
++}
++
++/* Close socket.
++ * Must be called on unlocked socket.
++ */
++static void rfcomm_sock_close(struct sock *sk)
++{
++ lock_sock(sk);
++ __rfcomm_sock_close(sk);
++ release_sock(sk);
++}
++
++static void rfcomm_sock_init(struct sock *sk, struct sock *parent)
++{
++ BT_DBG("sk %p", sk);
++
++ if (parent)
++ sk->type = parent->type;
++}
++
++static struct sock *rfcomm_sock_alloc(struct socket *sock, int proto, int prio)
++{
++ struct rfcomm_dlc *d;
++ struct sock *sk;
++
++ sk = sk_alloc(PF_BLUETOOTH, prio, 1);
++ if (!sk)
++ return NULL;
++
++ d = rfcomm_dlc_alloc(prio);
++ if (!d) {
++ sk_free(sk);
++ return NULL;
++ }
++ d->data_ready = rfcomm_sk_data_ready;
++ d->state_change = rfcomm_sk_state_change;
++
++ rfcomm_pi(sk)->dlc = d;
++ d->owner = sk;
++
++ bluez_sock_init(sock, sk);
++
++ sk->zapped = 0;
++
++ sk->destruct = rfcomm_sock_destruct;
++ sk->sndtimeo = RFCOMM_CONN_TIMEOUT;
++
++ sk->sndbuf = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
++ sk->rcvbuf = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
++
++ sk->protocol = proto;
++ sk->state = BT_OPEN;
++
++ bluez_sock_link(&rfcomm_sk_list, sk);
++
++ BT_DBG("sk %p", sk);
++
++ MOD_INC_USE_COUNT;
++ return sk;
++}
++
++static int rfcomm_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ sock->state = SS_UNCONNECTED;
++
++ if (sock->type != SOCK_STREAM && sock->type != SOCK_RAW)
++ return -ESOCKTNOSUPPORT;
++
++ sock->ops = &rfcomm_sock_ops;
++
++ if (!(sk = rfcomm_sock_alloc(sock, protocol, GFP_KERNEL)))
++ return -ENOMEM;
++
++ rfcomm_sock_init(sk, NULL);
++ return 0;
++}
++
++static int rfcomm_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
++{
++ struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p %s", sk, batostr(&sa->rc_bdaddr));
++
++ if (!addr || addr->sa_family != AF_BLUETOOTH)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_OPEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ write_lock_bh(&rfcomm_sk_list.lock);
++
++ if (sa->rc_channel && __rfcomm_get_sock_by_addr(sa->rc_channel, &sa->rc_bdaddr)) {
++ err = -EADDRINUSE;
++ } else {
++ /* Save source address */
++ bacpy(&bluez_pi(sk)->src, &sa->rc_bdaddr);
++ rfcomm_pi(sk)->channel = sa->rc_channel;
++ sk->state = BT_BOUND;
++ }
++
++ write_unlock_bh(&rfcomm_sk_list.lock);
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
++{
++ struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
++ struct sock *sk = sock->sk;
++ struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
++ int err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_rc))
++ return -EINVAL;
++
++ if (sk->state != BT_OPEN && sk->state != BT_BOUND)
++ return -EBADFD;
++
++ if (sk->type != SOCK_STREAM)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ sk->state = BT_CONNECT;
++ bacpy(&bluez_pi(sk)->dst, &sa->rc_bdaddr);
++ rfcomm_pi(sk)->channel = sa->rc_channel;
++
++ err = rfcomm_dlc_open(d, &bluez_pi(sk)->src, &sa->rc_bdaddr, sa->rc_channel);
++ if (!err)
++ err = bluez_sock_wait_state(sk, BT_CONNECTED,
++ sock_sndtimeo(sk, flags & O_NONBLOCK));
++
++ release_sock(sk);
++ return err;
++}
++
++int rfcomm_sock_listen(struct socket *sock, int backlog)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p backlog %d", sk, backlog);
++
++ lock_sock(sk);
++
++ if (sk->state != BT_BOUND) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ sk->max_ack_backlog = backlog;
++ sk->ack_backlog = 0;
++ sk->state = BT_LISTEN;
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++int rfcomm_sock_accept(struct socket *sock, struct socket *newsock, int flags)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct sock *sk = sock->sk, *nsk;
++ long timeo;
++ int err = 0;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
++
++ BT_DBG("sk %p timeo %ld", sk, timeo);
++
++ /* Wait for an incoming connection. (wake-one). */
++ add_wait_queue_exclusive(sk->sleep, &wait);
++ while (!(nsk = bluez_accept_dequeue(sk, newsock))) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ if (!timeo) {
++ err = -EAGAIN;
++ break;
++ }
++
++ release_sock(sk);
++ timeo = schedule_timeout(timeo);
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ break;
++ }
++
++ if (signal_pending(current)) {
++ err = sock_intr_errno(timeo);
++ break;
++ }
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++
++ if (err)
++ goto done;
++
++ newsock->state = SS_CONNECTED;
++
++ BT_DBG("new socket %p", nsk);
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
++{
++ struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ sa->rc_family = AF_BLUETOOTH;
++ sa->rc_channel = rfcomm_pi(sk)->channel;
++ if (peer)
++ bacpy(&sa->rc_bdaddr, &bluez_pi(sk)->dst);
++ else
++ bacpy(&sa->rc_bdaddr, &bluez_pi(sk)->src);
++
++ *len = sizeof(struct sockaddr_rc);
++ return 0;
++}
++
++static int rfcomm_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len,
++ struct scm_cookie *scm)
++{
++ struct sock *sk = sock->sk;
++ struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
++ struct sk_buff *skb;
++ int err, size;
++ int sent = 0;
++
++ if (msg->msg_flags & MSG_OOB)
++ return -EOPNOTSUPP;
++
++ if (sk->shutdown & SEND_SHUTDOWN)
++ return -EPIPE;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ lock_sock(sk);
++
++ while (len) {
++ size = min_t(uint, len, d->mtu);
++
++ skb = sock_alloc_send_skb(sk, size + RFCOMM_SKB_RESERVE,
++ msg->msg_flags & MSG_DONTWAIT, &err);
++ if (!skb)
++ break;
++ skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
++
++ err = memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size);
++ if (err) {
++ kfree_skb(skb);
++ sent = err;
++ break;
++ }
++
++ err = rfcomm_dlc_send(d, skb);
++ if (err < 0) {
++ kfree_skb(skb);
++ break;
++ }
++
++ sent += size;
++ len -= size;
++ }
++
++ release_sock(sk);
++
++ return sent ? sent : err;
++}
++
++static long rfcomm_sock_data_wait(struct sock *sk, long timeo)
++{
++ DECLARE_WAITQUEUE(wait, current);
++
++ add_wait_queue(sk->sleep, &wait);
++ for (;;) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (skb_queue_len(&sk->receive_queue) || sk->err || (sk->shutdown & RCV_SHUTDOWN) ||
++ signal_pending(current) || !timeo)
++ break;
++
++ set_bit(SOCK_ASYNC_WAITDATA, &sk->socket->flags);
++ release_sock(sk);
++ timeo = schedule_timeout(timeo);
++ lock_sock(sk);
++ clear_bit(SOCK_ASYNC_WAITDATA, &sk->socket->flags);
++ }
++
++ __set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++ return timeo;
++}
++
++static int rfcomm_sock_recvmsg(struct socket *sock, struct msghdr *msg, int size,
++ int flags, struct scm_cookie *scm)
++{
++ struct sock *sk = sock->sk;
++ int target, err = 0, copied = 0;
++ long timeo;
++
++ if (flags & MSG_OOB)
++ return -EOPNOTSUPP;
++
++ msg->msg_namelen = 0;
++
++ BT_DBG("sk %p size %d", sk, size);
++
++ lock_sock(sk);
++
++ target = sock_rcvlowat(sk, flags & MSG_WAITALL, size);
++ timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
++
++ do {
++ struct sk_buff *skb;
++ int chunk;
++
++ skb = skb_dequeue(&sk->receive_queue);
++ if (!skb) {
++ if (copied >= target)
++ break;
++
++ if ((err = sock_error(sk)) != 0)
++ break;
++ if (sk->shutdown & RCV_SHUTDOWN)
++ break;
++
++ err = -EAGAIN;
++ if (!timeo)
++ break;
++
++ timeo = rfcomm_sock_data_wait(sk, timeo);
++
++ if (signal_pending(current)) {
++ err = sock_intr_errno(timeo);
++ goto out;
++ }
++ continue;
++ }
++
++ chunk = min_t(unsigned int, skb->len, size);
++ if (memcpy_toiovec(msg->msg_iov, skb->data, chunk)) {
++ skb_queue_head(&sk->receive_queue, skb);
++ if (!copied)
++ copied = -EFAULT;
++ break;
++ }
++ copied += chunk;
++ size -= chunk;
++
++ if (!(flags & MSG_PEEK)) {
++ atomic_sub(chunk, &sk->rmem_alloc);
++
++ skb_pull(skb, chunk);
++ if (skb->len) {
++ skb_queue_head(&sk->receive_queue, skb);
++ break;
++ }
++ kfree_skb(skb);
++
++ } else {
++ /* put message back and return */
++ skb_queue_head(&sk->receive_queue, skb);
++ break;
++ }
++ } while (size);
++
++out:
++ if (atomic_read(&sk->rmem_alloc) <= (sk->rcvbuf >> 2))
++ rfcomm_dlc_unthrottle(rfcomm_pi(sk)->dlc);
++
++ release_sock(sk);
++ return copied ? : err;
++}
++
++static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, int optlen)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ lock_sock(sk);
++
++ switch (optname) {
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ };
++
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_getsockopt(struct socket *sock, int level, int optname, char *optval, int *optlen)
++{
++ struct sock *sk = sock->sk;
++ int len, err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ if (get_user(len, optlen))
++ return -EFAULT;
++
++ lock_sock(sk);
++
++ switch (optname) {
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ };
++
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++{
++ struct sock *sk = sock->sk;
++ int err;
++
++ lock_sock(sk);
++
++#ifdef CONFIG_BLUEZ_RFCOMM_TTY
++ err = rfcomm_dev_ioctl(sk, cmd, arg);
++#else
++ err = -EOPNOTSUPP;
++#endif
++
++ release_sock(sk);
++
++ return err;
++}
++
++static int rfcomm_sock_shutdown(struct socket *sock, int how)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (!sk) return 0;
++
++ lock_sock(sk);
++ if (!sk->shutdown) {
++ sk->shutdown = SHUTDOWN_MASK;
++ __rfcomm_sock_close(sk);
++
++ if (sk->linger)
++ err = bluez_sock_wait_state(sk, BT_CLOSED, sk->lingertime);
++ }
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (!sk)
++ return 0;
++
++ err = rfcomm_sock_shutdown(sock, 2);
++
++ sock_orphan(sk);
++ rfcomm_sock_kill(sk);
++ return err;
++}
++
++/* ---- RFCOMM core layer callbacks ----
++ *
++ * called under rfcomm_lock()
++ */
++int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc **d)
++{
++ struct sock *sk, *parent;
++ bdaddr_t src, dst;
++ int result = 0;
++
++ BT_DBG("session %p channel %d", s, channel);
++
++ rfcomm_session_getaddr(s, &src, &dst);
++
++ /* Check if we have socket listening on this channel */
++ parent = rfcomm_get_sock_by_channel(BT_LISTEN, channel, &src);
++ if (!parent)
++ return 0;
++
++ /* Check for backlog size */
++ if (parent->ack_backlog > parent->max_ack_backlog) {
++ BT_DBG("backlog full %d", parent->ack_backlog);
++ goto done;
++ }
++
++ sk = rfcomm_sock_alloc(NULL, BTPROTO_RFCOMM, GFP_ATOMIC);
++ if (!sk)
++ goto done;
++
++ rfcomm_sock_init(sk, parent);
++ bacpy(&bluez_pi(sk)->src, &src);
++ bacpy(&bluez_pi(sk)->dst, &dst);
++ rfcomm_pi(sk)->channel = channel;
++
++ sk->state = BT_CONFIG;
++ bluez_accept_enqueue(parent, sk);
++
++ /* Accept connection and return socket DLC */
++ *d = rfcomm_pi(sk)->dlc;
++ result = 1;
++
++done:
++ bh_unlock_sock(parent);
++ return result;
++}
++
++/* ---- Proc fs support ---- */
++int rfcomm_sock_dump(char *buf)
++{
++ struct bluez_sock_list *list = &rfcomm_sk_list;
++ struct rfcomm_pinfo *pi;
++ struct sock *sk;
++ char *ptr = buf;
++
++ write_lock_bh(&list->lock);
++
++ for (sk = list->head; sk; sk = sk->next) {
++ pi = rfcomm_pi(sk);
++ ptr += sprintf(ptr, "sk %s %s %d %d\n",
++ batostr(&bluez_pi(sk)->src), batostr(&bluez_pi(sk)->dst),
++ sk->state, rfcomm_pi(sk)->channel);
++ }
++
++ write_unlock_bh(&list->lock);
++
++ return ptr - buf;
++}
++
++static struct proto_ops rfcomm_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: rfcomm_sock_release,
++ bind: rfcomm_sock_bind,
++ connect: rfcomm_sock_connect,
++ listen: rfcomm_sock_listen,
++ accept: rfcomm_sock_accept,
++ getname: rfcomm_sock_getname,
++ sendmsg: rfcomm_sock_sendmsg,
++ recvmsg: rfcomm_sock_recvmsg,
++ shutdown: rfcomm_sock_shutdown,
++ setsockopt: rfcomm_sock_setsockopt,
++ getsockopt: rfcomm_sock_getsockopt,
++ ioctl: rfcomm_sock_ioctl,
++ poll: bluez_sock_poll,
++ socketpair: sock_no_socketpair,
++ mmap: sock_no_mmap
++};
++
++static struct net_proto_family rfcomm_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: rfcomm_sock_create
++};
++
++int rfcomm_init_sockets(void)
++{
++ int err;
++
++ if ((err = bluez_sock_register(BTPROTO_RFCOMM, &rfcomm_sock_family_ops))) {
++ BT_ERR("Can't register RFCOMM socket layer");
++ return err;
++ }
++
++ return 0;
++}
++
++void rfcomm_cleanup_sockets(void)
++{
++ int err;
++
++ /* Unregister socket, protocol and notifier */
++ if ((err = bluez_sock_unregister(BTPROTO_RFCOMM)))
++ BT_ERR("Can't unregister RFCOMM socket layer %d", err);
++}
+diff -Nur c3000_pre/linux/net/bluetooth/rfcomm/tty.c c3000_work/linux/net/bluetooth/rfcomm/tty.c
+--- c3000_pre/linux/net/bluetooth/rfcomm/tty.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/net/bluetooth/rfcomm/tty.c 2004-12-16 23:01:14.000000000 +0900
+@@ -0,0 +1,960 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * RFCOMM TTY.
++ *
++ * $Id: tty.c,v 1.26 2002/10/18 20:12:12 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/tty.h>
++#include <linux/tty_driver.h>
++#include <linux/tty_flip.h>
++
++#include <linux/slab.h>
++#include <linux/skbuff.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/rfcomm.h>
++
++#ifndef CONFIG_BLUEZ_RFCOMM_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define RFCOMM_TTY_MAGIC 0x6d02 /* magic number for rfcomm struct */
++#define RFCOMM_TTY_PORTS RFCOMM_MAX_DEV /* whole lotta rfcomm devices */
++#define RFCOMM_TTY_MAJOR 216 /* device node major id of the usb/bluetooth.c driver */
++#define RFCOMM_TTY_MINOR 0
++
++struct rfcomm_dev {
++ struct list_head list;
++ atomic_t refcnt;
++
++ char name[12];
++ int id;
++ unsigned long flags;
++ int opened;
++ int err;
++
++ bdaddr_t src;
++ bdaddr_t dst;
++ u8 channel;
++
++ uint modem_status;
++
++ struct rfcomm_dlc *dlc;
++ struct tty_struct *tty;
++ wait_queue_head_t wait;
++ struct tasklet_struct wakeup_task;
++
++ atomic_t wmem_alloc;
++};
++
++static LIST_HEAD(rfcomm_dev_list);
++static rwlock_t rfcomm_dev_lock = RW_LOCK_UNLOCKED;
++
++static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb);
++static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err);
++static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig);
++
++static void rfcomm_tty_wakeup(unsigned long arg);
++
++/* ---- Device functions ---- */
++static void rfcomm_dev_destruct(struct rfcomm_dev *dev)
++{
++ struct rfcomm_dlc *dlc = dev->dlc;
++
++ BT_DBG("dev %p dlc %p", dev, dlc);
++
++ rfcomm_dlc_lock(dlc);
++ /* Detach DLC if it's owned by this dev */
++ if (dlc->owner == dev)
++ dlc->owner = NULL;
++ rfcomm_dlc_unlock(dlc);
++
++ rfcomm_dlc_put(dlc);
++ kfree(dev);
++
++ MOD_DEC_USE_COUNT;
++}
++
++static inline void rfcomm_dev_hold(struct rfcomm_dev *dev)
++{
++ atomic_inc(&dev->refcnt);
++}
++
++static inline void rfcomm_dev_put(struct rfcomm_dev *dev)
++{
++ /* The reason this isn't actually a race, as you no
++ doubt have a little voice screaming at you in your
++ head, is that the refcount should never actually
++ reach zero unless the device has already been taken
++ off the list, in rfcomm_dev_del(). And if that's not
++ true, we'll hit the BUG() in rfcomm_dev_destruct()
++ anyway. */
++ if (atomic_dec_and_test(&dev->refcnt))
++ rfcomm_dev_destruct(dev);
++}
++
++static struct rfcomm_dev *__rfcomm_dev_get(int id)
++{
++ struct rfcomm_dev *dev;
++ struct list_head *p;
++
++ list_for_each(p, &rfcomm_dev_list) {
++ dev = list_entry(p, struct rfcomm_dev, list);
++ if (dev->id == id)
++ return dev;
++ }
++
++ return NULL;
++}
++
++static inline struct rfcomm_dev *rfcomm_dev_get(int id)
++{
++ struct rfcomm_dev *dev;
++
++ read_lock(&rfcomm_dev_lock);
++
++ dev = __rfcomm_dev_get(id);
++ if (dev)
++ rfcomm_dev_hold(dev);
++
++ read_unlock(&rfcomm_dev_lock);
++
++ return dev;
++}
++
++static int rfcomm_dev_add(struct rfcomm_dev_req *req, struct rfcomm_dlc *dlc)
++{
++ struct rfcomm_dev *dev;
++ struct list_head *head = &rfcomm_dev_list, *p;
++ int err = 0;
++
++ BT_DBG("id %d channel %d", req->dev_id, req->channel);
++
++ dev = kmalloc(sizeof(struct rfcomm_dev), GFP_KERNEL);
++ if (!dev)
++ return -ENOMEM;
++ memset(dev, 0, sizeof(struct rfcomm_dev));
++
++ write_lock_bh(&rfcomm_dev_lock);
++
++ if (req->dev_id < 0) {
++ dev->id = 0;
++
++ list_for_each(p, &rfcomm_dev_list) {
++ if (list_entry(p, struct rfcomm_dev, list)->id != dev->id)
++ break;
++
++ dev->id++;
++ head = p;
++ }
++ } else {
++ dev->id = req->dev_id;
++
++ list_for_each(p, &rfcomm_dev_list) {
++ struct rfcomm_dev *entry = list_entry(p, struct rfcomm_dev, list);
++
++ if (entry->id == dev->id) {
++ err = -EADDRINUSE;
++ goto out;
++ }
++
++ if (entry->id > dev->id - 1)
++ break;
++
++ head = p;
++ }
++ }
++
++ if ((dev->id < 0) || (dev->id > RFCOMM_MAX_DEV - 1)) {
++ err = -ENFILE;
++ goto out;
++ }
++
++ sprintf(dev->name, "rfcomm%d", dev->id);
++
++ list_add(&dev->list, head);
++ atomic_set(&dev->refcnt, 1);
++
++ bacpy(&dev->src, &req->src);
++ bacpy(&dev->dst, &req->dst);
++ dev->channel = req->channel;
++
++ dev->flags = req->flags &
++ ((1 << RFCOMM_RELEASE_ONHUP) | (1 << RFCOMM_REUSE_DLC));
++
++ init_waitqueue_head(&dev->wait);
++ tasklet_init(&dev->wakeup_task, rfcomm_tty_wakeup, (unsigned long) dev);
++
++ rfcomm_dlc_lock(dlc);
++ dlc->data_ready = rfcomm_dev_data_ready;
++ dlc->state_change = rfcomm_dev_state_change;
++ dlc->modem_status = rfcomm_dev_modem_status;
++
++ dlc->owner = dev;
++ dev->dlc = dlc;
++ rfcomm_dlc_unlock(dlc);
++
++ MOD_INC_USE_COUNT;
++
++out:
++ write_unlock_bh(&rfcomm_dev_lock);
++
++ if (err) {
++ kfree(dev);
++ return err;
++ } else
++ return dev->id;
++}
++
++static void rfcomm_dev_del(struct rfcomm_dev *dev)
++{
++ BT_DBG("dev %p", dev);
++
++ write_lock_bh(&rfcomm_dev_lock);
++ list_del_init(&dev->list);
++ write_unlock_bh(&rfcomm_dev_lock);
++
++ rfcomm_dev_put(dev);
++}
++
++/* ---- Send buffer ---- */
++
++static inline unsigned int rfcomm_room(struct rfcomm_dlc *dlc)
++{
++ /* We can't let it be zero, because we don't get a callback
++ when tx_credits becomes nonzero, hence we'd never wake up */
++ return dlc->mtu * (dlc->tx_credits?:1);
++}
++
++static void rfcomm_wfree(struct sk_buff *skb)
++{
++ struct rfcomm_dev *dev = (void *) skb->sk;
++ atomic_sub(skb->truesize, &dev->wmem_alloc);
++ if (test_bit(RFCOMM_TTY_ATTACHED, &dev->flags))
++ tasklet_schedule(&dev->wakeup_task);
++ rfcomm_dev_put(dev);
++}
++
++static inline void rfcomm_set_owner_w(struct sk_buff *skb, struct rfcomm_dev *dev)
++{
++ rfcomm_dev_hold(dev);
++ atomic_add(skb->truesize, &dev->wmem_alloc);
++ skb->sk = (void *) dev;
++ skb->destructor = rfcomm_wfree;
++}
++
++static struct sk_buff *rfcomm_wmalloc(struct rfcomm_dev *dev, unsigned long size, int force, int priority)
++{
++ if (force || atomic_read(&dev->wmem_alloc) < rfcomm_room(dev->dlc)) {
++ struct sk_buff *skb = alloc_skb(size, priority);
++ if (skb) {
++ rfcomm_set_owner_w(skb, dev);
++ return skb;
++ }
++ }
++ return NULL;
++}
++
++/* ---- Device IOCTLs ---- */
++
++#define NOCAP_FLAGS ((1 << RFCOMM_REUSE_DLC) | (1 << RFCOMM_RELEASE_ONHUP))
++
++static int rfcomm_create_dev(struct sock *sk, unsigned long arg)
++{
++ struct rfcomm_dev_req req;
++ struct rfcomm_dlc *dlc;
++ int id;
++
++ if (copy_from_user(&req, (void *) arg, sizeof(req)))
++ return -EFAULT;
++
++ BT_DBG("sk %p dev_id %id flags 0x%x", sk, req.dev_id, req.flags);
++
++ if (req.flags != NOCAP_FLAGS && !capable(CAP_NET_ADMIN))
++ return -EPERM;
++
++ if (req.flags & (1 << RFCOMM_REUSE_DLC)) {
++ /* Socket must be connected */
++ if (sk->state != BT_CONNECTED)
++ return -EBADFD;
++
++ dlc = rfcomm_pi(sk)->dlc;
++ rfcomm_dlc_hold(dlc);
++ } else {
++ dlc = rfcomm_dlc_alloc(GFP_KERNEL);
++ if (!dlc)
++ return -ENOMEM;
++ }
++
++ id = rfcomm_dev_add(&req, dlc);
++ if (id < 0) {
++ rfcomm_dlc_put(dlc);
++ return id;
++ }
++
++ if (req.flags & (1 << RFCOMM_REUSE_DLC)) {
++ /* DLC is now used by device.
++ * Socket must be disconnected */
++ sk->state = BT_CLOSED;
++ }
++
++ return id;
++}
++
++static int rfcomm_release_dev(unsigned long arg)
++{
++ struct rfcomm_dev_req req;
++ struct rfcomm_dev *dev;
++
++ if (copy_from_user(&req, (void *) arg, sizeof(req)))
++ return -EFAULT;
++
++ BT_DBG("dev_id %id flags 0x%x", req.dev_id, req.flags);
++
++ if (!(dev = rfcomm_dev_get(req.dev_id)))
++ return -ENODEV;
++
++ if (dev->flags != NOCAP_FLAGS && !capable(CAP_NET_ADMIN)) {
++ rfcomm_dev_put(dev);
++ return -EPERM;
++ }
++
++ if (req.flags & (1 << RFCOMM_HANGUP_NOW))
++ rfcomm_dlc_close(dev->dlc, 0);
++
++ rfcomm_dev_del(dev);
++ rfcomm_dev_put(dev);
++ return 0;
++}
++
++static int rfcomm_get_dev_list(unsigned long arg)
++{
++ struct rfcomm_dev_list_req *dl;
++ struct rfcomm_dev_info *di;
++ struct list_head *p;
++ int n = 0, size, err;
++ u16 dev_num;
++
++ BT_DBG("");
++
++ if (get_user(dev_num, (u16 *) arg))
++ return -EFAULT;
++
++ if (!dev_num || dev_num > (PAGE_SIZE * 4) / sizeof(*di))
++ return -EINVAL;
++
++ size = sizeof(*dl) + dev_num * sizeof(*di);
++
++ if (!(dl = kmalloc(size, GFP_KERNEL)))
++ return -ENOMEM;
++
++ di = dl->dev_info;
++
++ read_lock_bh(&rfcomm_dev_lock);
++
++ list_for_each(p, &rfcomm_dev_list) {
++ struct rfcomm_dev *dev = list_entry(p, struct rfcomm_dev, list);
++ (di + n)->id = dev->id;
++ (di + n)->flags = dev->flags;
++ (di + n)->state = dev->dlc->state;
++ (di + n)->channel = dev->channel;
++ bacpy(&(di + n)->src, &dev->src);
++ bacpy(&(di + n)->dst, &dev->dst);
++ if (++n >= dev_num)
++ break;
++ }
++
++ read_unlock_bh(&rfcomm_dev_lock);
++
++ dl->dev_num = n;
++ size = sizeof(*dl) + n * sizeof(*di);
++
++ err = copy_to_user((void *) arg, dl, size);
++ kfree(dl);
++
++ return err ? -EFAULT : 0;
++}
++
++static int rfcomm_get_dev_info(unsigned long arg)
++{
++ struct rfcomm_dev *dev;
++ struct rfcomm_dev_info di;
++ int err = 0;
++
++ BT_DBG("");
++
++ if (copy_from_user(&di, (void *)arg, sizeof(di)))
++ return -EFAULT;
++
++ if (!(dev = rfcomm_dev_get(di.id)))
++ return -ENODEV;
++
++ di.flags = dev->flags;
++ di.channel = dev->channel;
++ di.state = dev->dlc->state;
++ bacpy(&di.src, &dev->src);
++ bacpy(&di.dst, &dev->dst);
++
++ if (copy_to_user((void *)arg, &di, sizeof(di)))
++ err = -EFAULT;
++
++ rfcomm_dev_put(dev);
++ return err;
++}
++
++int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, unsigned long arg)
++{
++ BT_DBG("cmd %d arg %ld", cmd, arg);
++
++ switch (cmd) {
++ case RFCOMMCREATEDEV:
++ return rfcomm_create_dev(sk, arg);
++
++ case RFCOMMRELEASEDEV:
++ return rfcomm_release_dev(arg);
++
++ case RFCOMMGETDEVLIST:
++ return rfcomm_get_dev_list(arg);
++
++ case RFCOMMGETDEVINFO:
++ return rfcomm_get_dev_info(arg);
++ }
++
++ return -EINVAL;
++}
++
++/* ---- DLC callbacks ---- */
++static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb)
++{
++ struct rfcomm_dev *dev = dlc->owner;
++ struct tty_struct *tty;
++
++ if (!dev || !(tty = dev->tty)) {
++ kfree_skb(skb);
++ return;
++ }
++
++ BT_DBG("dlc %p tty %p len %d", dlc, tty, skb->len);
++
++ if (test_bit(TTY_DONT_FLIP, &tty->flags)) {
++ register int i;
++ for (i = 0; i < skb->len; i++) {
++ if (tty->flip.count >= TTY_FLIPBUF_SIZE)
++ tty_flip_buffer_push(tty);
++
++ tty_insert_flip_char(tty, skb->data[i], 0);
++ }
++ tty_flip_buffer_push(tty);
++ } else
++ tty->ldisc.receive_buf(tty, skb->data, NULL, skb->len);
++
++ kfree_skb(skb);
++}
++
++static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err)
++{
++ struct rfcomm_dev *dev = dlc->owner;
++ if (!dev)
++ return;
++
++ BT_DBG("dlc %p dev %p err %d", dlc, dev, err);
++
++ dev->err = err;
++ wake_up_interruptible(&dev->wait);
++
++ if (dlc->state == BT_CLOSED) {
++ if (!dev->tty) {
++ if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags)) {
++ rfcomm_dev_hold(dev);
++ rfcomm_dev_del(dev);
++
++ /* We have to drop DLC lock here, otherwise
++ rfcomm_dev_put() will dead lock if it's
++ the last reference. */
++ rfcomm_dlc_unlock(dlc);
++ rfcomm_dev_put(dev);
++ rfcomm_dlc_lock(dlc);
++ }
++ } else
++ tty_hangup(dev->tty);
++ }
++}
++
++static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig)
++{
++ struct rfcomm_dev *dev = dlc->owner;
++ if (!dev)
++ return;
++
++ BT_DBG("dlc %p dev %p v24_sig 0x%02x", dlc, dev, v24_sig);
++
++ dev->modem_status =
++ ((v24_sig & RFCOMM_V24_RTC) ? (TIOCM_DSR | TIOCM_DTR) : 0) |
++ ((v24_sig & RFCOMM_V24_RTR) ? (TIOCM_RTS | TIOCM_CTS) : 0) |
++ ((v24_sig & RFCOMM_V24_IC) ? TIOCM_RI : 0) |
++ ((v24_sig & RFCOMM_V24_DV) ? TIOCM_CD : 0);
++}
++
++/* ---- TTY functions ---- */
++static void rfcomm_tty_wakeup(unsigned long arg)
++{
++ struct rfcomm_dev *dev = (void *) arg;
++ struct tty_struct *tty = dev->tty;
++ if (!tty)
++ return;
++
++ BT_DBG("dev %p tty %p", dev, tty);
++
++ if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags) && tty->ldisc.write_wakeup)
++ (tty->ldisc.write_wakeup)(tty);
++
++ wake_up_interruptible(&tty->write_wait);
++#ifdef SERIAL_HAVE_POLL_WAIT
++ wake_up_interruptible(&tty->poll_wait);
++#endif
++}
++
++static int rfcomm_tty_open(struct tty_struct *tty, struct file *filp)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct rfcomm_dev *dev;
++ struct rfcomm_dlc *dlc;
++ int err, id;
++
++ id = MINOR(tty->device) - tty->driver.minor_start;
++
++ BT_DBG("tty %p id %d", tty, id);
++
++ /* We don't leak this refcount. For reasons which are not entirely
++ clear, the TTY layer will call our ->close() method even if the
++ open fails. We decrease the refcount there, and decreasing it
++ here too would cause breakage. */
++ dev = rfcomm_dev_get(id);
++ if (!dev)
++ return -ENODEV;
++
++ BT_DBG("dev %p dst %s channel %d opened %d", dev, batostr(&dev->dst), dev->channel, dev->opened);
++
++ if (dev->opened++ != 0)
++ return 0;
++
++ dlc = dev->dlc;
++
++ /* Attach TTY and open DLC */
++
++ rfcomm_dlc_lock(dlc);
++ tty->driver_data = dev;
++ dev->tty = tty;
++ rfcomm_dlc_unlock(dlc);
++ set_bit(RFCOMM_TTY_ATTACHED, &dev->flags);
++
++ err = rfcomm_dlc_open(dlc, &dev->src, &dev->dst, dev->channel);
++ if (err < 0)
++ return err;
++
++ /* Wait for DLC to connect */
++ add_wait_queue(&dev->wait, &wait);
++ while (1) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (dlc->state == BT_CLOSED) {
++ err = -dev->err;
++ break;
++ }
++
++ if (dlc->state == BT_CONNECTED)
++ break;
++
++ if (signal_pending(current)) {
++ err = -EINTR;
++ break;
++ }
++
++ schedule();
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&dev->wait, &wait);
++
++ return err;
++}
++
++static void rfcomm_tty_close(struct tty_struct *tty, struct file *filp)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ if (!dev)
++ return;
++
++ BT_DBG("tty %p dev %p dlc %p opened %d", tty, dev, dev->dlc, dev->opened);
++
++ if (--dev->opened == 0) {
++ /* Close DLC and dettach TTY */
++ rfcomm_dlc_close(dev->dlc, 0);
++
++ clear_bit(RFCOMM_TTY_ATTACHED, &dev->flags);
++ tasklet_kill(&dev->wakeup_task);
++
++ rfcomm_dlc_lock(dev->dlc);
++ tty->driver_data = NULL;
++ dev->tty = NULL;
++ rfcomm_dlc_unlock(dev->dlc);
++ }
++
++ rfcomm_dev_put(dev);
++}
++
++static int rfcomm_tty_write(struct tty_struct *tty, int from_user, const unsigned char *buf, int count)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ struct rfcomm_dlc *dlc = dev->dlc;
++ struct sk_buff *skb;
++ int err = 0, sent = 0, size;
++
++ BT_DBG("tty %p from_user %d count %d", tty, from_user, count);
++
++ while (count) {
++ size = min_t(uint, count, dlc->mtu);
++
++ if (from_user)
++ skb = rfcomm_wmalloc(dev, size + RFCOMM_SKB_RESERVE, 0, GFP_KERNEL);
++ else
++ skb = rfcomm_wmalloc(dev, size + RFCOMM_SKB_RESERVE, 0, GFP_ATOMIC);
++
++ if (!skb)
++ break;
++
++ skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
++
++ if (from_user)
++ copy_from_user(skb_put(skb, size), buf + sent, size);
++ else
++ memcpy(skb_put(skb, size), buf + sent, size);
++
++ if ((err = rfcomm_dlc_send(dlc, skb)) < 0) {
++ kfree_skb(skb);
++ break;
++ }
++
++ sent += size;
++ count -= size;
++ }
++
++ return sent ? sent : err;
++}
++
++static void rfcomm_tty_put_char(struct tty_struct *tty, unsigned char ch)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ struct rfcomm_dlc *dlc = dev->dlc;
++ struct sk_buff *skb;
++
++ BT_DBG("tty %p char %x", tty, ch);
++
++ skb = rfcomm_wmalloc(dev, 1 + RFCOMM_SKB_RESERVE, 1, GFP_ATOMIC);
++
++ if (!skb)
++ return;
++
++ skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
++
++ *(char *)skb_put(skb, 1) = ch;
++
++ if ((rfcomm_dlc_send(dlc, skb)) < 0)
++ kfree_skb(skb);
++}
++
++static int rfcomm_tty_write_room(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ int room;
++
++ BT_DBG("tty %p", tty);
++
++ room = rfcomm_room(dev->dlc) - atomic_read(&dev->wmem_alloc);
++ if (room < 0)
++ room = 0;
++
++ return room;
++}
++
++static int rfcomm_tty_set_modem_status(uint cmd, struct rfcomm_dlc *dlc, uint status)
++{
++ u8 v24_sig, mask;
++
++ BT_DBG("dlc %p cmd 0x%02x", dlc, cmd);
++
++ if (cmd == TIOCMSET)
++ v24_sig = 0;
++ else
++ rfcomm_dlc_get_modem_status(dlc, &v24_sig);
++
++ mask = ((status & TIOCM_DSR) ? RFCOMM_V24_RTC : 0) |
++ ((status & TIOCM_DTR) ? RFCOMM_V24_RTC : 0) |
++ ((status & TIOCM_RTS) ? RFCOMM_V24_RTR : 0) |
++ ((status & TIOCM_CTS) ? RFCOMM_V24_RTR : 0) |
++ ((status & TIOCM_RI) ? RFCOMM_V24_IC : 0) |
++ ((status & TIOCM_CD) ? RFCOMM_V24_DV : 0);
++
++ if (cmd == TIOCMBIC)
++ v24_sig &= ~mask;
++ else
++ v24_sig |= mask;
++
++ rfcomm_dlc_set_modem_status(dlc, v24_sig);
++ return 0;
++}
++
++static int rfcomm_tty_ioctl(struct tty_struct *tty, struct file *filp, unsigned int cmd, unsigned long arg)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ struct rfcomm_dlc *dlc = dev->dlc;
++ uint status;
++ int err;
++
++ BT_DBG("tty %p cmd 0x%02x", tty, cmd);
++
++ switch (cmd) {
++ case TCGETS:
++ BT_DBG("TCGETS is not supported");
++ return -ENOIOCTLCMD;
++
++ case TCSETS:
++ BT_DBG("TCSETS is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCMGET:
++ BT_DBG("TIOCMGET");
++
++ return put_user(dev->modem_status, (unsigned int *)arg);
++
++ case TIOCMSET: /* Turns on and off the lines as specified by the mask */
++ case TIOCMBIS: /* Turns on the lines as specified by the mask */
++ case TIOCMBIC: /* Turns off the lines as specified by the mask */
++ if ((err = get_user(status, (unsigned int *)arg)))
++ return err;
++ return rfcomm_tty_set_modem_status(cmd, dlc, status);
++
++ case TIOCMIWAIT:
++ BT_DBG("TIOCMIWAIT");
++ break;
++
++ case TIOCGICOUNT:
++ BT_DBG("TIOCGICOUNT");
++ break;
++
++ case TIOCGSERIAL:
++ BT_ERR("TIOCGSERIAL is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCSSERIAL:
++ BT_ERR("TIOCSSERIAL is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCSERGSTRUCT:
++ BT_ERR("TIOCSERGSTRUCT is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCSERGETLSR:
++ BT_ERR("TIOCSERGETLSR is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCSERCONFIG:
++ BT_ERR("TIOCSERCONFIG is not supported");
++ return -ENOIOCTLCMD;
++
++ default:
++ return -ENOIOCTLCMD; /* ioctls which we must ignore */
++
++ }
++
++ return -ENOIOCTLCMD;
++}
++
++#define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
++
++static void rfcomm_tty_set_termios(struct tty_struct *tty, struct termios *old)
++{
++ BT_DBG("tty %p", tty);
++
++ if ((tty->termios->c_cflag == old->c_cflag) &&
++ (RELEVANT_IFLAG(tty->termios->c_iflag) == RELEVANT_IFLAG(old->c_iflag)))
++ return;
++
++ /* handle turning off CRTSCTS */
++ if ((old->c_cflag & CRTSCTS) && !(tty->termios->c_cflag & CRTSCTS)) {
++ BT_DBG("turning off CRTSCTS");
++ }
++}
++
++static void rfcomm_tty_throttle(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ rfcomm_dlc_throttle(dev->dlc);
++}
++
++static void rfcomm_tty_unthrottle(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ rfcomm_dlc_unthrottle(dev->dlc);
++}
++
++static int rfcomm_tty_chars_in_buffer(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ struct rfcomm_dlc *dlc = dev->dlc;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ if (skb_queue_len(&dlc->tx_queue))
++ return dlc->mtu;
++
++ return 0;
++}
++
++static void rfcomm_tty_flush_buffer(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ if (!dev)
++ return;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ skb_queue_purge(&dev->dlc->tx_queue);
++
++ if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags) && tty->ldisc.write_wakeup)
++ tty->ldisc.write_wakeup(tty);
++}
++
++static void rfcomm_tty_send_xchar(struct tty_struct *tty, char ch)
++{
++ BT_DBG("tty %p ch %c", tty, ch);
++}
++
++static void rfcomm_tty_wait_until_sent(struct tty_struct *tty, int timeout)
++{
++ BT_DBG("tty %p timeout %d", tty, timeout);
++}
++
++static void rfcomm_tty_hangup(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ if (!dev)
++ return;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ rfcomm_tty_flush_buffer(tty);
++
++ if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags))
++ rfcomm_dev_del(dev);
++}
++
++static int rfcomm_tty_read_proc(char *buf, char **start, off_t offset, int len, int *eof, void *unused)
++{
++ return 0;
++}
++
++/* ---- TTY structure ---- */
++static int rfcomm_tty_refcount; /* If we manage several devices */
++
++static struct tty_struct *rfcomm_tty_table[RFCOMM_TTY_PORTS];
++static struct termios *rfcomm_tty_termios[RFCOMM_TTY_PORTS];
++static struct termios *rfcomm_tty_termios_locked[RFCOMM_TTY_PORTS];
++
++static struct tty_driver rfcomm_tty_driver = {
++ magic: TTY_DRIVER_MAGIC,
++ driver_name: "rfcomm",
++#ifdef CONFIG_DEVFS_FS
++ name: "bluetooth/rfcomm/%d",
++#else
++ name: "rfcomm",
++#endif
++ major: RFCOMM_TTY_MAJOR,
++ minor_start: RFCOMM_TTY_MINOR,
++ num: RFCOMM_TTY_PORTS,
++ type: TTY_DRIVER_TYPE_SERIAL,
++ subtype: SERIAL_TYPE_NORMAL,
++ flags: TTY_DRIVER_REAL_RAW,
++
++ refcount: &rfcomm_tty_refcount,
++ table: rfcomm_tty_table,
++ termios: rfcomm_tty_termios,
++ termios_locked: rfcomm_tty_termios_locked,
++
++ open: rfcomm_tty_open,
++ close: rfcomm_tty_close,
++ put_char: rfcomm_tty_put_char,
++ write: rfcomm_tty_write,
++ write_room: rfcomm_tty_write_room,
++ chars_in_buffer: rfcomm_tty_chars_in_buffer,
++ flush_buffer: rfcomm_tty_flush_buffer,
++ ioctl: rfcomm_tty_ioctl,
++ throttle: rfcomm_tty_throttle,
++ unthrottle: rfcomm_tty_unthrottle,
++ set_termios: rfcomm_tty_set_termios,
++ send_xchar: rfcomm_tty_send_xchar,
++ stop: NULL,
++ start: NULL,
++ hangup: rfcomm_tty_hangup,
++ wait_until_sent: rfcomm_tty_wait_until_sent,
++ read_proc: rfcomm_tty_read_proc,
++};
++
++int rfcomm_init_ttys(void)
++{
++ int i;
++
++ /* Initalize our global data */
++ for (i = 0; i < RFCOMM_TTY_PORTS; i++)
++ rfcomm_tty_table[i] = NULL;
++
++ /* Register the TTY driver */
++ rfcomm_tty_driver.init_termios = tty_std_termios;
++ rfcomm_tty_driver.init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
++ rfcomm_tty_driver.flags = TTY_DRIVER_REAL_RAW;
++
++ if (tty_register_driver(&rfcomm_tty_driver)) {
++ BT_ERR("Can't register RFCOMM TTY driver");
++ return -1;
++ }
++
++ return 0;
++}
++
++void rfcomm_cleanup_ttys(void)
++{
++ tty_unregister_driver(&rfcomm_tty_driver);
++ return;
++}
+diff -Nur c3000_pre/linux/net/bluetooth/sco.c c3000_work/linux/net/bluetooth/sco.c
+--- c3000_pre/linux/net/bluetooth/sco.c 2004-08-21 09:49:19.000000000 +0900
++++ c3000_work/linux/net/bluetooth/sco.c 2004-12-16 23:01:14.000000000 +0900
+@@ -332,8 +332,10 @@
+ BT_DBG("parent %p", parent);
+
+ /* Close not yet accepted channels */
+- while ((sk = bluez_accept_dequeue(parent, NULL)))
++ while ((sk = bluez_accept_dequeue(parent, NULL))) {
+ sco_sock_close(sk);
++ sco_sock_kill(sk);
++ }
+
+ parent->state = BT_CLOSED;
+ parent->zapped = 1;
+@@ -388,8 +390,6 @@
+ };
+
+ release_sock(sk);
+-
+- sco_sock_kill(sk);
+ }
+
+ static void sco_sock_init(struct sock *sk, struct sock *parent)
+@@ -508,7 +508,8 @@
+ if ((err = sco_connect(sk)))
+ goto done;
+
+- err = bluez_sock_w4_connect(sk, flags);
++ err = bluez_sock_wait_state(sk, BT_CONNECTED,
++ sock_sndtimeo(sk, flags & O_NONBLOCK));
+
+ done:
+ release_sock(sk);
+@@ -678,7 +679,7 @@
+
+ opts.mtu = sco_pi(sk)->conn->mtu;
+
+- BT_INFO("mtu %d", opts.mtu);
++ BT_DBG("mtu %d", opts.mtu);
+
+ len = MIN(len, sizeof(opts));
+ if (copy_to_user(optval, (char *)&opts, len))
+@@ -712,16 +713,23 @@
+ static int sco_sock_release(struct socket *sock)
+ {
+ struct sock *sk = sock->sk;
++ int err = 0;
+
+ BT_DBG("sock %p, sk %p", sock, sk);
+
+ if (!sk)
+ return 0;
+
+- sock_orphan(sk);
+ sco_sock_close(sk);
++ if (sk->linger) {
++ lock_sock(sk);
++ err = bluez_sock_wait_state(sk, BT_CLOSED, sk->lingertime);
++ release_sock(sk);
++ }
+
+- return 0;
++ sock_orphan(sk);
++ sco_sock_kill(sk);
++ return err;
+ }
+
+ static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
+diff -Nur c3000_pre/linux/net/bluetooth/syms.c c3000_work/linux/net/bluetooth/syms.c
+--- c3000_pre/linux/net/bluetooth/syms.c 2004-08-21 09:49:19.000000000 +0900
++++ c3000_work/linux/net/bluetooth/syms.c 2004-12-16 23:01:14.000000000 +0900
+@@ -44,6 +44,9 @@
+ /* HCI Core */
+ EXPORT_SYMBOL(hci_register_dev);
+ EXPORT_SYMBOL(hci_unregister_dev);
++EXPORT_SYMBOL(hci_suspend_dev);
++EXPORT_SYMBOL(hci_resume_dev);
++
+ EXPORT_SYMBOL(hci_register_proto);
+ EXPORT_SYMBOL(hci_unregister_proto);
+
+@@ -56,7 +59,7 @@
+ EXPORT_SYMBOL(hci_recv_frame);
+ EXPORT_SYMBOL(hci_send_acl);
+ EXPORT_SYMBOL(hci_send_sco);
+-EXPORT_SYMBOL(hci_send_raw);
++EXPORT_SYMBOL(hci_send_cmd);
+ EXPORT_SYMBOL(hci_si_event);
+
+ /* BlueZ lib */
+@@ -75,4 +78,4 @@
+ EXPORT_SYMBOL(bluez_sock_poll);
+ EXPORT_SYMBOL(bluez_accept_enqueue);
+ EXPORT_SYMBOL(bluez_accept_dequeue);
+-EXPORT_SYMBOL(bluez_sock_w4_connect);
++EXPORT_SYMBOL(bluez_sock_wait_state);
+diff -Nur c3000_pre/linux/net/netsyms.c c3000_work/linux/net/netsyms.c
+--- c3000_pre/linux/net/netsyms.c 2004-08-21 09:49:17.000000000 +0900
++++ c3000_work/linux/net/netsyms.c 2004-12-16 23:01:14.000000000 +0900
+@@ -168,6 +168,7 @@
+ EXPORT_SYMBOL(put_cmsg);
+ EXPORT_SYMBOL(sock_kmalloc);
+ EXPORT_SYMBOL(sock_kfree_s);
++EXPORT_SYMBOL(sockfd_lookup);
+
+ #ifdef CONFIG_FILTER
+ EXPORT_SYMBOL(sk_run_filter);
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P12-fbcon-fix_041219.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P12-fbcon-fix_041219.patch
new file mode 100644
index 0000000000..37ca13e9a5
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P12-fbcon-fix_041219.patch
@@ -0,0 +1,51 @@
+diff -Nur c3000_pre/linux/drivers/video/fbcon-cfb16.c c3000_work/linux/drivers/video/fbcon-cfb16.c
+--- c3000_pre/linux/drivers/video/fbcon-cfb16.c 2004-12-16 22:55:38.000000000 +0900
++++ c3000_work/linux/drivers/video/fbcon-cfb16.c 2004-12-19 00:11:24.000000000 +0900
+@@ -219,7 +219,7 @@
+
+ width *= fontwidth(p)/4;
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+- if (width * 8 == bytes)
++ if (height * 8 == bytes)
+ rectfill(dest, 1, lines * width * 4, bgx, bytes);
+ else
+ rectfill(dest, lines, width * 4, bgx, bytes);
+diff -Nur c3000_pre/linux/drivers/video/fbcon.c c3000_work/linux/drivers/video/fbcon.c
+--- c3000_pre/linux/drivers/video/fbcon.c 2004-12-16 22:55:38.000000000 +0900
++++ c3000_work/linux/drivers/video/fbcon.c 2004-12-19 00:28:12.000000000 +0900
+@@ -247,7 +247,7 @@
+
+ static void fbcon_setup(int con, int init, int logo);
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+-static __inline__ int real_x(struct display *p, int ypos);
++static __inline__ int real_x(struct display *p, int xpos);
+ #else
+ static __inline__ int real_y(struct display *p, int ypos);
+ #endif
+@@ -263,7 +263,7 @@
+ static __inline__ void xpan_down(int unit, struct vc_data *conp,
+ struct display *p, int count);
+ static void fbcon_bmove_rec(struct display *p, int sx, int sy, int dx, int dy,
+- int height, int width, u_int y_break);
++ int height, int width, u_int x_break);
+ #else
+ static __inline__ void ywrap_up(int unit, struct vc_data *conp,
+ struct display *p, int count);
+@@ -1011,7 +1010,7 @@
+
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ if ((sx <= p->cursor_x) && (p->cursor_x < sx+height) &&
+- (sx <= p->cursor_y) && (p->cursor_y < sy+width)) {
++ (sy <= p->cursor_y) && (p->cursor_y < sy+width)) {
+ #else
+ if ((sy <= p->cursor_y) && (p->cursor_y < sy+height) &&
+ (sx <= p->cursor_x) && (p->cursor_x < sx+width)) {
+@@ -1235,7 +1234,7 @@
+ if (p->dispsw->cursor) {
+ #if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
+ p->cursor_y = conp->vc_y;
+- p->cursor_y = x;
++ p->cursor_x = x;
+ p->dispsw->cursor(p, mode, p->cursor_y, real_x(p, p->cursor_x));
+ #else
+ p->cursor_x = conp->vc_x;
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P14-lowlatency_041221.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P14-lowlatency_041221.patch
new file mode 100644
index 0000000000..edd63fb13b
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P14-lowlatency_041221.patch
@@ -0,0 +1,1677 @@
+diff -Nur c3000_pre/linux/arch/arm/config.in c3000_test/linux/arch/arm/config.in
+--- c3000_pre/linux/arch/arm/config.in 2004-12-16 22:55:34.000000000 +0900
++++ c3000_test/linux/arch/arm/config.in 2004-12-20 23:23:28.000000000 +0900
+@@ -574,6 +574,8 @@
+ fi
+ fi
+ dep_bool 'Preemptible Kernel support' CONFIG_PREEMPT $CONFIG_CPU_32
++bool 'Low latency scheduling' CONFIG_LOLAT
++dep_bool 'Control low latency with sysctl' CONFIG_LOLAT_SYSCTL $CONFIG_LOLAT
+
+ endmenu
+
+diff -Nur c3000_pre/linux/arch/i386/config.in c3000_test/linux/arch/i386/config.in
+--- c3000_pre/linux/arch/i386/config.in 2004-08-21 09:48:09.000000000 +0900
++++ c3000_test/linux/arch/i386/config.in 2004-12-20 22:56:21.000000000 +0900
+@@ -25,6 +25,9 @@
+
+ mainmenu_option next_comment
+ comment 'Processor type and features'
++bool 'Low latency scheduling' CONFIG_LOLAT
++dep_bool 'Control low latency with sysctl' CONFIG_LOLAT_SYSCTL $CONFIG_LOLAT
++
+ choice 'Processor family' \
+ "386 CONFIG_M386 \
+ 486 CONFIG_M486 \
+diff -Nur c3000_pre/linux/drivers/block/ll_rw_blk.c c3000_test/linux/drivers/block/ll_rw_blk.c
+--- c3000_pre/linux/drivers/block/ll_rw_blk.c 2004-08-21 09:48:24.000000000 +0900
++++ c3000_test/linux/drivers/block/ll_rw_blk.c 2004-12-20 22:56:21.000000000 +0900
+@@ -1211,6 +1211,7 @@
+ kstat.pgpgin += count;
+ break;
+ }
++ conditional_schedule();
+ }
+
+ /**
+diff -Nur c3000_pre/linux/drivers/char/mem.c c3000_test/linux/drivers/char/mem.c
+--- c3000_pre/linux/drivers/char/mem.c 2004-08-21 09:48:25.000000000 +0900
++++ c3000_test/linux/drivers/char/mem.c 2004-12-20 22:56:21.000000000 +0900
+@@ -422,7 +422,7 @@
+ if (count > size)
+ count = size;
+
+- zap_page_range(mm, addr, count);
++ zap_page_range(mm, addr, count, 0);
+ zeromap_page_range(addr, count, PAGE_COPY);
+
+ size -= count;
+diff -Nur c3000_pre/linux/drivers/char/random.c c3000_test/linux/drivers/char/random.c
+--- c3000_pre/linux/drivers/char/random.c 2004-08-21 09:48:25.000000000 +0900
++++ c3000_test/linux/drivers/char/random.c 2004-12-20 22:56:21.000000000 +0900
+@@ -1374,6 +1374,11 @@
+ buf += i;
+ ret += i;
+ add_timer_randomness(&extract_timer_state, nbytes);
++#if LOWLATENCY_NEEDED
++ /* This can happen in softirq's, but that's what we want */
++ if (conditional_schedule_needed())
++ break;
++#endif
+ }
+
+ /* Wipe data just returned from memory */
+diff -Nur c3000_pre/linux/drivers/i2c/i2c-core.c c3000_test/linux/drivers/i2c/i2c-core.c
+--- c3000_pre/linux/drivers/i2c/i2c-core.c 2004-08-21 09:48:34.000000000 +0900
++++ c3000_test/linux/drivers/i2c/i2c-core.c 2004-12-20 22:56:21.000000000 +0900
+@@ -761,6 +761,8 @@
+ {
+ int ret;
+
++ conditional_schedule();
++
+ if (adap->algo->master_xfer) {
+ DEB2(printk("i2c-core.o: master_xfer: %s with %d msgs.\n",
+ adap->name,num));
+@@ -783,6 +785,8 @@
+ struct i2c_adapter *adap=client->adapter;
+ struct i2c_msg msg;
+
++ conditional_schedule();
++
+ if (client->adapter->algo->master_xfer) {
+ msg.addr = client->addr;
+ msg.flags = client->flags & I2C_M_TEN;
+@@ -812,6 +816,9 @@
+ struct i2c_adapter *adap=client->adapter;
+ struct i2c_msg msg;
+ int ret;
++
++ conditional_schedule();
++
+ if (client->adapter->algo->master_xfer) {
+ msg.addr = client->addr;
+ msg.flags = client->flags & I2C_M_TEN;
+diff -Nur c3000_pre/linux/fs/buffer.c c3000_test/linux/fs/buffer.c
+--- c3000_pre/linux/fs/buffer.c 2004-08-21 09:48:58.000000000 +0900
++++ c3000_test/linux/fs/buffer.c 2004-12-20 22:56:21.000000000 +0900
+@@ -216,8 +216,10 @@
+
+ if (dev != NODEV && bh->b_dev != dev)
+ continue;
+- if (test_and_set_bit(BH_Lock, &bh->b_state))
++ if (test_and_set_bit(BH_Lock, &bh->b_state)) {
++ __refile_buffer(bh);
+ continue;
++ }
+ if (atomic_set_buffer_clean(bh)) {
+ __refile_buffer(bh);
+ get_bh(bh);
+@@ -227,6 +229,7 @@
+
+ spin_unlock(&lru_list_lock);
+ write_locked_buffers(array, count);
++ conditional_schedule();
+ return -EAGAIN;
+ }
+ unlock_buffer(bh);
+@@ -260,12 +263,19 @@
+ struct buffer_head * next;
+ int nr;
+
+- next = lru_list[index];
+ nr = nr_buffers_type[index];
++repeat:
++ next = lru_list[index];
+ while (next && --nr >= 0) {
+ struct buffer_head *bh = next;
+ next = bh->b_next_free;
+
++ if (conditional_schedule_needed()) {
++ spin_unlock(&lru_list_lock);
++ unconditional_schedule();
++ spin_lock(&lru_list_lock);
++ goto repeat;
++ }
+ if (!buffer_locked(bh)) {
+ if (refile)
+ __refile_buffer(bh);
+@@ -273,7 +283,6 @@
+ }
+ if (dev != NODEV && bh->b_dev != dev)
+ continue;
+-
+ get_bh(bh);
+ spin_unlock(&lru_list_lock);
+ wait_on_buffer (bh);
+@@ -306,6 +315,15 @@
+ {
+ int err = 0;
+
++#if LOWLATENCY_NEEDED
++ /*
++ * syncing devA when there are lots of buffers dirty against
++ * devB is expensive.
++ */
++ if (enable_lowlatency)
++ dev = NODEV;
++#endif
++
+ /* One pass for no-wait, three for wait:
+ * 0) write out all dirty, unlocked buffers;
+ * 1) wait for all dirty locked buffers;
+@@ -697,6 +715,16 @@
+ /* Not hashed? */
+ if (!bh->b_pprev)
+ continue;
++
++ if (conditional_schedule_needed()) {
++ get_bh(bh);
++ spin_unlock(&lru_list_lock);
++ unconditional_schedule();
++ spin_lock(&lru_list_lock);
++ put_bh(bh);
++ slept = 1;
++ }
++
+ if (buffer_locked(bh)) {
+ get_bh(bh);
+ spin_unlock(&lru_list_lock);
+@@ -848,12 +876,19 @@
+ struct buffer_head *bh;
+ struct inode tmp;
+ int err = 0, err2;
+-
++ DEFINE_RESCHED_COUNT;
++
+ INIT_LIST_HEAD(&tmp.i_dirty_buffers);
+-
++
++repeat:
+ spin_lock(&lru_list_lock);
+
+ while (!list_empty(list)) {
++ if (conditional_schedule_needed()) {
++ spin_unlock(&lru_list_lock);
++ unconditional_schedule();
++ goto repeat;
++ }
+ bh = BH_ENTRY(list->next);
+ list_del(&bh->b_inode_buffers);
+ if (!buffer_dirty(bh) && !buffer_locked(bh))
+@@ -878,8 +913,18 @@
+ spin_lock(&lru_list_lock);
+ }
+ }
++ if (TEST_RESCHED_COUNT(32)) {
++ RESET_RESCHED_COUNT();
++ if (conditional_schedule_needed()) {
++ spin_unlock(&lru_list_lock);
++ unconditional_schedule(); /* Syncing many dirty buffers */
++ spin_lock(&lru_list_lock);
++ }
++ }
+ }
+
++ RESET_RESCHED_COUNT();
++
+ while (!list_empty(&tmp.i_dirty_buffers)) {
+ bh = BH_ENTRY(tmp.i_dirty_buffers.prev);
+ remove_inode_queue(bh);
+@@ -889,6 +934,7 @@
+ if (!buffer_uptodate(bh))
+ err = -EIO;
+ brelse(bh);
++ conditional_schedule();
+ spin_lock(&lru_list_lock);
+ }
+
+@@ -916,11 +962,20 @@
+ struct buffer_head *bh;
+ struct list_head *p;
+ int err = 0;
++ DEFINE_RESCHED_COUNT;
+
++repeat:
++ conditional_schedule();
+ spin_lock(&lru_list_lock);
+
+- repeat:
+ list_for_each_prev(p, list) {
++ if (TEST_RESCHED_COUNT(32)) {
++ RESET_RESCHED_COUNT();
++ if (conditional_schedule_needed()) {
++ spin_unlock(&lru_list_lock);
++ goto repeat;
++ }
++ }
+ bh = BH_ENTRY(p);
+ if (buffer_locked(bh)) {
+ get_bh(bh);
+@@ -929,7 +984,6 @@
+ if (!buffer_uptodate(bh))
+ err = -EIO;
+ brelse(bh);
+- spin_lock(&lru_list_lock);
+ goto repeat;
+ }
+ }
+@@ -946,12 +1000,24 @@
+ void invalidate_inode_buffers(struct inode *inode)
+ {
+ struct list_head * entry;
+-
++
++repeat:
++ conditional_schedule();
+ spin_lock(&lru_list_lock);
+- while ((entry = inode->i_dirty_buffers.next) != &inode->i_dirty_buffers)
++ while ((entry = inode->i_dirty_buffers.next) != &inode->i_dirty_buffers) {
++ if (conditional_schedule_needed()) {
++ spin_unlock(&lru_list_lock);
++ goto repeat;
++ }
+ remove_inode_queue(BH_ENTRY(entry));
+- while ((entry = inode->i_dirty_data_buffers.next) != &inode->i_dirty_data_buffers)
++ }
++ while ((entry = inode->i_dirty_data_buffers.next) != &inode->i_dirty_data_buffers) {
++ if (conditional_schedule_needed()) {
++ spin_unlock(&lru_list_lock);
++ goto repeat;
++ }
+ remove_inode_queue(BH_ENTRY(entry));
++ }
+ spin_unlock(&lru_list_lock);
+ }
+
+@@ -974,6 +1040,7 @@
+ bh = get_hash_table(dev, block, size);
+ if (bh) {
+ touch_buffer(bh);
++ conditional_schedule();
+ return bh;
+ }
+
+@@ -2831,7 +2898,7 @@
+
+ DECLARE_WAIT_QUEUE_HEAD(bdflush_wait);
+
+-void wakeup_bdflush(void)
++void wakeup_bdflush(void)
+ {
+ wake_up_interruptible(&bdflush_wait);
+ }
+diff -Nur c3000_pre/linux/fs/dcache.c c3000_test/linux/fs/dcache.c
+--- c3000_pre/linux/fs/dcache.c 2004-08-21 09:48:58.000000000 +0900
++++ c3000_test/linux/fs/dcache.c 2004-12-20 22:56:21.000000000 +0900
+@@ -320,11 +320,23 @@
+
+ void prune_dcache(int count)
+ {
++ DEFINE_RESCHED_COUNT;
++
++redo:
+ spin_lock(&dcache_lock);
+ for (;;) {
+ struct dentry *dentry;
+ struct list_head *tmp;
+
++ if (TEST_RESCHED_COUNT(100)) {
++ RESET_RESCHED_COUNT();
++ if (conditional_schedule_needed()) {
++ spin_unlock(&dcache_lock);
++ unconditional_schedule();
++ goto redo;
++ }
++ }
++
+ tmp = dentry_unused.prev;
+
+ if (tmp == &dentry_unused)
+@@ -479,6 +491,7 @@
+ struct dentry *this_parent = parent;
+ struct list_head *next;
+ int found = 0;
++ DEFINE_RESCHED_COUNT;
+
+ spin_lock(&dcache_lock);
+ repeat:
+@@ -493,6 +506,13 @@
+ list_add(&dentry->d_lru, dentry_unused.prev);
+ found++;
+ }
++
++ if (TEST_RESCHED_COUNT(500) && found > 10) {
++ if (conditional_schedule_needed()) /* Typically sys_rmdir() */
++ goto out;
++ RESET_RESCHED_COUNT();
++ }
++
+ /*
+ * Descend a level if the d_subdirs list is non-empty.
+ */
+@@ -517,6 +537,7 @@
+ #endif
+ goto resume;
+ }
++out:
+ spin_unlock(&dcache_lock);
+ return found;
+ }
+@@ -532,8 +553,10 @@
+ {
+ int found;
+
+- while ((found = select_parent(parent)) != 0)
++ while ((found = select_parent(parent)) != 0) {
+ prune_dcache(found);
++ conditional_schedule(); /* Typically sys_rmdir() */
++ }
+ }
+
+ /*
+diff -Nur c3000_pre/linux/fs/exec.c c3000_test/linux/fs/exec.c
+--- c3000_pre/linux/fs/exec.c 2004-08-21 09:48:58.000000000 +0900
++++ c3000_test/linux/fs/exec.c 2004-12-20 22:56:21.000000000 +0900
+@@ -249,7 +249,7 @@
+ memset(kaddr+offset+len, 0,
+ PAGE_SIZE-offset-len);
+ }
+- err = copy_from_user(kaddr+offset, str, bytes_to_copy);
++ err = ll_copy_from_user(kaddr+offset, str, bytes_to_copy);
+ if (err) {
+ ret = -EFAULT;
+ goto out;
+diff -Nur c3000_pre/linux/fs/ext2/dir.c c3000_test/linux/fs/ext2/dir.c
+--- c3000_pre/linux/fs/ext2/dir.c 2004-08-21 09:48:59.000000000 +0900
++++ c3000_test/linux/fs/ext2/dir.c 2004-12-20 22:56:21.000000000 +0900
+@@ -153,6 +153,7 @@
+ struct address_space *mapping = dir->i_mapping;
+ struct page *page = read_cache_page(mapping, n,
+ (filler_t*)mapping->a_ops->readpage, NULL);
++ conditional_schedule(); /* Scanning large directories */
+ if (!IS_ERR(page)) {
+ wait_on_page(page);
+ kmap(page);
+diff -Nur c3000_pre/linux/fs/ext2/inode.c c3000_test/linux/fs/ext2/inode.c
+--- c3000_pre/linux/fs/ext2/inode.c 2004-08-21 09:48:59.000000000 +0900
++++ c3000_test/linux/fs/ext2/inode.c 2004-12-20 22:56:21.000000000 +0900
+@@ -715,8 +715,13 @@
+ {
+ unsigned long block_to_free = 0, count = 0;
+ unsigned long nr;
++ DEFINE_RESCHED_COUNT;
+
+ for ( ; p < q ; p++) {
++ if (TEST_RESCHED_COUNT(32)) {
++ RESET_RESCHED_COUNT();
++ conditional_schedule();
++ }
+ nr = le32_to_cpu(*p);
+ if (nr) {
+ *p = 0;
+@@ -759,6 +764,7 @@
+ if (depth--) {
+ int addr_per_block = EXT2_ADDR_PER_BLOCK(inode->i_sb);
+ for ( ; p < q ; p++) {
++ conditional_schedule(); /* Deleting large files */
+ nr = le32_to_cpu(*p);
+ if (!nr)
+ continue;
+diff -Nur c3000_pre/linux/fs/ext3/balloc.c c3000_test/linux/fs/ext3/balloc.c
+--- c3000_pre/linux/fs/ext3/balloc.c 2004-08-21 09:48:59.000000000 +0900
++++ c3000_test/linux/fs/ext3/balloc.c 2004-12-20 22:56:21.000000000 +0900
+@@ -363,6 +363,9 @@
+ }
+ }
+ #endif
++ /* superblock lock is held, so this is safe */
++ conditional_schedule();
++
+ BUFFER_TRACE(bitmap_bh, "clear bit");
+ if (!ext3_clear_bit (bit + i, bitmap_bh->b_data)) {
+ ext3_error (sb, __FUNCTION__,
+diff -Nur c3000_pre/linux/fs/ext3/inode.c c3000_test/linux/fs/ext3/inode.c
+--- c3000_pre/linux/fs/ext3/inode.c 2004-08-21 09:48:59.000000000 +0900
++++ c3000_test/linux/fs/ext3/inode.c 2004-12-20 22:56:21.000000000 +0900
+@@ -902,6 +902,8 @@
+
+ prev_blocks = inode->i_blocks;
+
++ conditional_schedule(); /* Reading large directories */
++
+ bh = ext3_getblk (handle, inode, block, create, err);
+ if (!bh)
+ return bh;
+@@ -1605,6 +1607,7 @@
+ */
+ for (p = first; p < last; p++) {
+ u32 nr = le32_to_cpu(*p);
++ conditional_schedule();
+ if (nr) {
+ struct buffer_head *bh;
+
+@@ -1659,6 +1662,7 @@
+ }
+
+ for (p = first; p < last; p++) {
++ conditional_schedule();
+ nr = le32_to_cpu(*p);
+ if (nr) {
+ /* accumulate blocks to free if they're contiguous */
+diff -Nur c3000_pre/linux/fs/ext3/namei.c c3000_test/linux/fs/ext3/namei.c
+--- c3000_pre/linux/fs/ext3/namei.c 2004-08-21 09:48:59.000000000 +0900
++++ c3000_test/linux/fs/ext3/namei.c 2004-12-20 22:56:21.000000000 +0900
+@@ -157,6 +157,7 @@
+ if ((bh = bh_use[ra_ptr++]) == NULL)
+ goto next;
+ wait_on_buffer(bh);
++ conditional_schedule();
+ if (!buffer_uptodate(bh)) {
+ /* read error, skip block & hope for the best */
+ brelse(bh);
+diff -Nur c3000_pre/linux/fs/inode.c c3000_test/linux/fs/inode.c
+--- c3000_pre/linux/fs/inode.c 2004-08-21 09:48:58.000000000 +0900
++++ c3000_test/linux/fs/inode.c 2004-12-20 23:00:06.000000000 +0900
+@@ -251,6 +251,8 @@
+
+ filemap_fdatawait(inode->i_mapping);
+
++ conditional_schedule();
++
+ spin_lock(&inode_lock);
+ inode->i_state &= ~I_LOCK;
+ if (!(inode->i_state & I_FREEING)) {
+@@ -561,6 +563,7 @@
+
+ while ((inode_entry = head->next) != head)
+ {
++ conditional_schedule();
+ list_del(inode_entry);
+
+ inode = list_entry(inode_entry, struct inode, i_list);
+@@ -589,9 +592,22 @@
+ if (tmp == head)
+ break;
+ inode = list_entry(tmp, struct inode, i_list);
++
++ if (conditional_schedule_needed()) {
++ atomic_inc(&inode->i_count);
++ spin_unlock(&inode_lock);
++ unconditional_schedule();
++ spin_lock(&inode_lock);
++ atomic_dec(&inode->i_count);
++ }
++
+ if (inode->i_sb != sb)
+ continue;
++ atomic_inc(&inode->i_count);
++ spin_unlock(&inode_lock);
+ invalidate_inode_buffers(inode);
++ spin_lock(&inode_lock);
++ atomic_dec(&inode->i_count);
+ if (!atomic_read(&inode->i_count)) {
+ list_del_init(&inode->i_hash);
+ list_del(&inode->i_list);
+@@ -896,6 +912,8 @@
+ if (inode) {
+ struct inode * old;
+
++ conditional_schedule(); /* sync_old_buffers */
++
+ spin_lock(&inode_lock);
+ /* We released the lock, so.. */
+ old = find_inode(sb, ino, head, find_actor, opaque);
+@@ -1313,18 +1331,32 @@
+ int request=goal;
+ int loop=0;
+ #endif
++ int nr_to_scan = inodes_stat.nr_unused;
+
++resume:
+ spin_lock(&inode_lock);
+
+ count = 0;
+ entry = inode_unused.prev;
+- while (entry != &inode_unused)
+- {
++ while (entry != &inode_unused && nr_to_scan--) {
+ struct list_head *tmp = entry;
+
+ #ifdef JFFS2_INODE_DEBUG
+ loop++;
+ #endif
++ if (conditional_schedule_needed()) {
++ /*
++ * Need to drop the lock. Reposition
++ * the list head so we start here next time.
++ * This can corrupt the LRU nature of the
++ * unused list, but this isn't very important.
++ */
++ list_del(&inode_unused);
++ list_add(&inode_unused, entry);
++ spin_unlock(&inode_lock);
++ unconditional_schedule();
++ goto resume;
++ }
+ entry = entry->prev;
+ inode = INODE(tmp);
+ if (inode->i_state & (I_FREEING|I_CLEAR|I_LOCK))
+diff -Nur c3000_pre/linux/fs/jbd/checkpoint.c c3000_test/linux/fs/jbd/checkpoint.c
+--- c3000_pre/linux/fs/jbd/checkpoint.c 2004-08-21 09:48:59.000000000 +0900
++++ c3000_test/linux/fs/jbd/checkpoint.c 2004-12-20 22:56:21.000000000 +0900
+@@ -431,7 +431,11 @@
+ {
+ transaction_t *transaction, *last_transaction, *next_transaction;
+ int ret = 0;
++ int ll_retries = 4; /* lowlatency addition */
+
++restart:
++ if (ll_retries-- == 0)
++ goto out;
+ transaction = journal->j_checkpoint_transactions;
+ if (transaction == 0)
+ goto out;
+@@ -451,6 +455,12 @@
+ jh = next_jh;
+ next_jh = jh->b_cpnext;
+ ret += __try_to_free_cp_buf(jh);
++ if (conditional_schedule_needed()) {
++ spin_unlock(&journal_datalist_lock);
++ unconditional_schedule();
++ spin_lock(&journal_datalist_lock);
++ goto restart;
++ }
+ } while (jh != last_jh);
+ }
+ } while (transaction != last_transaction);
+diff -Nur c3000_pre/linux/fs/jbd/commit.c c3000_test/linux/fs/jbd/commit.c
+--- c3000_pre/linux/fs/jbd/commit.c 2004-08-21 09:48:59.000000000 +0900
++++ c3000_test/linux/fs/jbd/commit.c 2004-12-20 22:56:21.000000000 +0900
+@@ -212,6 +212,16 @@
+ __journal_remove_journal_head(bh);
+ refile_buffer(bh);
+ __brelse(bh);
++ if (conditional_schedule_needed()) {
++ if (commit_transaction->t_sync_datalist)
++ commit_transaction->t_sync_datalist =
++ next_jh;
++ if (bufs)
++ break;
++ spin_unlock(&journal_datalist_lock);
++ unconditional_schedule();
++ goto write_out_data;
++ }
+ }
+ }
+ if (bufs == ARRAY_SIZE(wbuf)) {
+@@ -235,8 +245,7 @@
+ journal_brelse_array(wbuf, bufs);
+ lock_journal(journal);
+ spin_lock(&journal_datalist_lock);
+- if (bufs)
+- goto write_out_data_locked;
++ goto write_out_data_locked;
+ }
+
+ /*
+@@ -272,6 +281,14 @@
+ */
+ while ((jh = commit_transaction->t_async_datalist)) {
+ struct buffer_head *bh = jh2bh(jh);
++ if (conditional_schedule_needed()) {
++ spin_unlock(&journal_datalist_lock);
++ unlock_journal(journal);
++ unconditional_schedule();
++ lock_journal(journal);
++ spin_lock(&journal_datalist_lock);
++ continue; /* List may have changed */
++ }
+ if (buffer_locked(bh)) {
+ spin_unlock(&journal_datalist_lock);
+ unlock_journal(journal);
+@@ -486,6 +503,8 @@
+ wait_for_iobuf:
+ while (commit_transaction->t_iobuf_list != NULL) {
+ struct buffer_head *bh;
++
++ conditional_schedule();
+ jh = commit_transaction->t_iobuf_list->b_tprev;
+ bh = jh2bh(jh);
+ if (buffer_locked(bh)) {
+@@ -644,6 +663,8 @@
+ transaction_t *cp_transaction;
+ struct buffer_head *bh;
+
++ conditional_schedule(); /* journal is locked */
++
+ jh = commit_transaction->t_forget;
+ J_ASSERT_JH(jh, jh->b_transaction == commit_transaction ||
+ jh->b_transaction == journal->j_running_transaction);
+diff -Nur c3000_pre/linux/fs/proc/array.c c3000_test/linux/fs/proc/array.c
+--- c3000_pre/linux/fs/proc/array.c 2004-08-21 09:49:01.000000000 +0900
++++ c3000_test/linux/fs/proc/array.c 2004-12-20 22:56:21.000000000 +0900
+@@ -498,9 +498,11 @@
+ if (end > PMD_SIZE)
+ end = PMD_SIZE;
+ do {
+- pte_t page = *pte;
++ pte_t page;
+ struct page *ptpage;
+
++ conditional_schedule(); /* For `top' and `ps' */
++ page = *pte;
+ address += PAGE_SIZE;
+ pte++;
+ if (pte_none(page))
+diff -Nur c3000_pre/linux/fs/proc/generic.c c3000_test/linux/fs/proc/generic.c
+--- c3000_pre/linux/fs/proc/generic.c 2004-08-21 09:49:01.000000000 +0900
++++ c3000_test/linux/fs/proc/generic.c 2004-12-20 22:56:21.000000000 +0900
+@@ -98,6 +98,8 @@
+ retval = n;
+ break;
+ }
++
++ conditional_schedule(); /* Some /proc files are large */
+
+ /* This is a hack to allow mangling of file pos independent
+ * of actual bytes read. Simply place the data at page,
+diff -Nur c3000_pre/linux/fs/reiserfs/buffer2.c c3000_test/linux/fs/reiserfs/buffer2.c
+--- c3000_pre/linux/fs/reiserfs/buffer2.c 2004-08-21 09:49:01.000000000 +0900
++++ c3000_test/linux/fs/reiserfs/buffer2.c 2004-12-20 22:56:21.000000000 +0900
+@@ -54,6 +54,7 @@
+ PROC_EXP( unsigned int ctx_switches = kstat.context_swtch );
+
+ result = bread (super -> s_dev, n_block, n_size);
++ conditional_schedule();
+ PROC_INFO_INC( super, breads );
+ PROC_EXP( if( kstat.context_swtch != ctx_switches )
+ PROC_INFO_INC( super, bread_miss ) );
+diff -Nur c3000_pre/linux/fs/reiserfs/journal.c c3000_test/linux/fs/reiserfs/journal.c
+--- c3000_pre/linux/fs/reiserfs/journal.c 2004-08-21 09:49:01.000000000 +0900
++++ c3000_test/linux/fs/reiserfs/journal.c 2004-12-20 22:56:21.000000000 +0900
+@@ -573,6 +573,7 @@
+ /* lock the current transaction */
+ inline static void lock_journal(struct super_block *p_s_sb) {
+ PROC_INFO_INC( p_s_sb, journal.lock_journal );
++ conditional_schedule();
+ while(atomic_read(&(SB_JOURNAL(p_s_sb)->j_wlock)) > 0) {
+ PROC_INFO_INC( p_s_sb, journal.lock_journal_wait );
+ sleep_on(&(SB_JOURNAL(p_s_sb)->j_wait)) ;
+@@ -703,6 +704,7 @@
+ mark_buffer_dirty(tbh) ;
+ }
+ ll_rw_block(WRITE, 1, &tbh) ;
++ conditional_schedule();
+ count++ ;
+ put_bh(tbh) ; /* once for our get_hash */
+ }
+@@ -832,6 +834,7 @@
+ set_bit(BH_Dirty, &(SB_JOURNAL(p_s_sb)->j_header_bh->b_state)) ;
+ ll_rw_block(WRITE, 1, &(SB_JOURNAL(p_s_sb)->j_header_bh)) ;
+ wait_on_buffer((SB_JOURNAL(p_s_sb)->j_header_bh)) ;
++ conditional_schedule();
+ if (!buffer_uptodate(SB_JOURNAL(p_s_sb)->j_header_bh)) {
+ printk( "reiserfs: journal-837: IO error during journal replay\n" );
+ return -EIO ;
+@@ -2125,6 +2128,7 @@
+ }
+
+ int journal_begin(struct reiserfs_transaction_handle *th, struct super_block * p_s_sb, unsigned long nblocks) {
++ conditional_schedule();
+ return do_journal_begin_r(th, p_s_sb, nblocks, 0) ;
+ }
+
+@@ -2265,6 +2269,7 @@
+ }
+
+ int journal_end(struct reiserfs_transaction_handle *th, struct super_block *p_s_sb, unsigned long nblocks) {
++ conditional_schedule();
+ return do_journal_end(th, p_s_sb, nblocks, 0) ;
+ }
+
+@@ -2716,6 +2721,7 @@
+ RFALSE( buffer_locked(bh) && cur_tb != NULL,
+ "waiting while do_balance was running\n") ;
+ wait_on_buffer(bh) ;
++ conditional_schedule();
+ }
+ PROC_INFO_INC( p_s_sb, journal.prepare_retry );
+ retry_count++ ;
+@@ -2888,6 +2894,7 @@
+ /* copy all the real blocks into log area. dirty log blocks */
+ if (test_bit(BH_JDirty, &cn->bh->b_state)) {
+ struct buffer_head *tmp_bh ;
++ conditional_schedule();
+ tmp_bh = sb_getblk(p_s_sb, reiserfs_get_journal_block(p_s_sb) +
+ ((cur_write_start + jindex) % JOURNAL_BLOCK_COUNT)) ;
+ mark_buffer_uptodate(tmp_bh, 1) ;
+diff -Nur c3000_pre/linux/fs/reiserfs/stree.c c3000_test/linux/fs/reiserfs/stree.c
+--- c3000_pre/linux/fs/reiserfs/stree.c 2004-08-21 09:49:01.000000000 +0900
++++ c3000_test/linux/fs/reiserfs/stree.c 2004-12-20 22:56:21.000000000 +0900
+@@ -652,9 +652,8 @@
+ stop at leaf level - set to
+ DISK_LEAF_NODE_LEVEL */
+ ) {
+- int n_block_number = SB_ROOT_BLOCK (p_s_sb),
+- expected_level = SB_TREE_HEIGHT (p_s_sb),
+- n_block_size = p_s_sb->s_blocksize;
++ int n_block_number, expected_level;
++ int n_block_size = p_s_sb->s_blocksize;
+ struct buffer_head * p_s_bh;
+ struct path_element * p_s_last_element;
+ int n_node_level, n_retval;
+@@ -666,7 +665,8 @@
+ #endif
+
+ PROC_INFO_INC( p_s_sb, search_by_key );
+-
++ conditional_schedule();
++
+ /* As we add each node to a path we increase its count. This means that
+ we must be careful to release all nodes in a path before we either
+ discard the path struct or re-use the path struct, as we do here. */
+@@ -678,6 +678,8 @@
+ /* With each iteration of this loop we search through the items in the
+ current node, and calculate the next current node(next path element)
+ for the next iteration of this loop.. */
++ n_block_number = SB_ROOT_BLOCK (p_s_sb);
++ expected_level = SB_TREE_HEIGHT (p_s_sb);
+ while ( 1 ) {
+
+ #ifdef CONFIG_REISERFS_CHECK
+@@ -1104,6 +1106,8 @@
+ for (n_counter = *p_n_removed;
+ n_counter < n_unfm_number; n_counter++, p_n_unfm_pointer-- ) {
+
++ conditional_schedule();
++
+ if (item_moved (&s_ih, p_s_path)) {
+ need_research = 1 ;
+ break;
+diff -Nur c3000_pre/linux/include/linux/low-latency.h c3000_test/linux/include/linux/low-latency.h
+--- c3000_pre/linux/include/linux/low-latency.h 1970-01-01 09:00:00.000000000 +0900
++++ c3000_test/linux/include/linux/low-latency.h 2004-12-20 22:56:21.000000000 +0900
+@@ -0,0 +1,109 @@
++/*
++ * include/linux/low-latency.h
++ *
++ * Andrew Morton <akpm@zip.com.au>
++ */
++
++#ifndef LOW_LATENCY_H_INCLUDED
++#define LOW_LATENCY_H_INCLUDED
++
++#if defined(CONFIG_LOLAT)
++#define LOWLATENCY_NEEDED 1
++#else
++#define LOWLATENCY_NEEDED 0
++#endif
++
++#if LOWLATENCY_NEEDED
++
++#include <linux/cache.h> /* For ____cacheline_aligned */
++
++#ifdef CONFIG_LOLAT_SYSCTL
++extern struct low_latency_enable_struct {
++ int yep;
++} ____cacheline_aligned __enable_lowlatency;
++#define enable_lowlatency __enable_lowlatency.yep
++
++#else
++#define enable_lowlatency 1
++#endif
++
++/*
++ * Set this non-zero to generate low-latency instrumentation
++ */
++#define LOWLATENCY_DEBUG 0
++
++/*
++ * Set this non-zero for robustness testing
++ */
++#define LOWLATENCY_ALWAYS_SCHEDULE 0
++
++#if LOWLATENCY_DEBUG
++
++#if LOWLATENCY_ALWAYS_SCHEDULE
++#define conditional_schedule_needed() ((enable_lowlatency == 2) || (enable_lowlatency && current->need_resched))
++#else
++#define conditional_schedule_needed() (enable_lowlatency && current->need_resched)
++#endif
++
++struct lolat_stats_t {
++ unsigned long count;
++ int visited;
++ const char *file;
++ int line;
++ struct lolat_stats_t *next;
++};
++
++void set_running_and_schedule(struct lolat_stats_t *stats);
++
++#define unconditional_schedule() \
++ do { \
++ static struct lolat_stats_t stats = { \
++ file: __FILE__, \
++ line: __LINE__, \
++ }; \
++ set_running_and_schedule(&stats); \
++ } while (0)
++
++extern void show_lolat_stats(void);
++
++#else /* LOWLATENCY_DEBUG */
++
++#if LOWLATENCY_ALWAYS_SCHEDULE
++#define conditional_schedule_needed() 1
++#else
++#define conditional_schedule_needed() (current->need_resched)
++#endif
++
++void set_running_and_schedule(void);
++#define unconditional_schedule() set_running_and_schedule()
++
++#endif /* LOWLATENCY_DEBUG */
++
++#define conditional_schedule() \
++ do { \
++ if (conditional_schedule_needed()) \
++ unconditional_schedule(); \
++ } while (0)
++
++#define DEFINE_RESCHED_COUNT int resched_count = 0
++#define TEST_RESCHED_COUNT(n) (enable_lowlatency && (++resched_count > (n)))
++#define RESET_RESCHED_COUNT() resched_count = 0
++extern int ll_copy_to_user(void *to_user, const void *from, unsigned long len);
++extern int ll_copy_from_user(void *to, const void *from_user, unsigned long len);
++
++#else /* LOWLATENCY_NEEDED */
++
++#define conditional_schedule_needed() 0
++#define conditional_schedule()
++#define unconditional_schedule()
++
++#define DEFINE_RESCHED_COUNT
++#define TEST_RESCHED_COUNT(n) 0
++#define RESET_RESCHED_COUNT()
++#define ll_copy_to_user(to_user, from, len) copy_to_user((to_user), (from), (len))
++#define ll_copy_from_user(to, from_user, len) copy_from_user((to), (from_user), (len))
++
++#endif /* LOWLATENCY_NEEDED */
++
++#endif /* LOW_LATENCY_H_INCLUDED */
++
+diff -Nur c3000_pre/linux/include/linux/mm.h c3000_test/linux/include/linux/mm.h
+--- c3000_pre/linux/include/linux/mm.h 2004-08-21 09:49:13.000000000 +0900
++++ c3000_test/linux/include/linux/mm.h 2004-12-20 22:56:21.000000000 +0900
+@@ -149,6 +149,8 @@
+ */
+ extern pgprot_t protection_map[16];
+
++/* Actions for zap_page_range() */
++#define ZPR_COND_RESCHED 1 /* Do a conditional_schedule() occasionally */
+
+ /*
+ * These are the virtual MM functions - opening of an area, closing and
+@@ -500,7 +502,7 @@
+ extern void shmem_lock(struct file * file, int lock);
+ extern int shmem_zero_setup(struct vm_area_struct *);
+
+-extern void zap_page_range(struct mm_struct *mm, unsigned long address, unsigned long size);
++extern void zap_page_range(struct mm_struct *mm, unsigned long address, unsigned long size, int actions);
+ extern int copy_page_range(struct mm_struct *dst, struct mm_struct *src, struct vm_area_struct *vma);
+ extern int remap_page_range(unsigned long from, unsigned long to, unsigned long size, pgprot_t prot);
+ extern int zeromap_page_range(unsigned long from, unsigned long size, pgprot_t prot);
+diff -Nur c3000_pre/linux/include/linux/reiserfs_fs.h c3000_test/linux/include/linux/reiserfs_fs.h
+--- c3000_pre/linux/include/linux/reiserfs_fs.h 2004-08-21 09:49:13.000000000 +0900
++++ c3000_test/linux/include/linux/reiserfs_fs.h 2004-12-20 22:56:21.000000000 +0900
+@@ -1197,8 +1197,8 @@
+ #define fs_generation(s) ((s)->u.reiserfs_sb.s_generation_counter)
+ #define get_generation(s) atomic_read (&fs_generation(s))
+ #define FILESYSTEM_CHANGED_TB(tb) (get_generation((tb)->tb_sb) != (tb)->fs_gen)
+-#define fs_changed(gen,s) (gen != get_generation (s))
+-
++#define __fs_changed(gen,s) (gen != get_generation (s))
++#define fs_changed(gen,s) ({conditional_schedule(); __fs_changed(gen,s);})
+
+ /***************************************************************************/
+ /* FIXATE NODES */
+diff -Nur c3000_pre/linux/include/linux/sched.h c3000_test/linux/include/linux/sched.h
+--- c3000_pre/linux/include/linux/sched.h 2004-08-21 09:49:13.000000000 +0900
++++ c3000_test/linux/include/linux/sched.h 2004-12-20 22:56:21.000000000 +0900
+@@ -1092,6 +1092,7 @@
+ #include <linux/dcache.h>
+ #include <linux/tqueue.h>
+ #include <linux/fs_struct.h>
++#include <linux/low-latency.h>
+
+ #endif /* __KERNEL__ */
+ #endif
+diff -Nur c3000_pre/linux/include/linux/sysctl.h c3000_test/linux/include/linux/sysctl.h
+--- c3000_pre/linux/include/linux/sysctl.h 2004-08-21 09:49:13.000000000 +0900
++++ c3000_test/linux/include/linux/sysctl.h 2004-12-20 22:56:21.000000000 +0900
+@@ -131,6 +131,7 @@
+ KERN_CORE_USES_PID=52, /* int: use core or core.%pid */
+ KERN_TAINTED=53, /* int: various kernel tainted flags */
+ KERN_CADPID=54, /* int: PID of the process to notify on CAD */
++ KERN_LOWLATENCY=55, /* int: enable low latency scheduling */
+ };
+
+
+diff -Nur c3000_pre/linux/kernel/exit.c c3000_test/linux/kernel/exit.c
+--- c3000_pre/linux/kernel/exit.c 2004-08-21 09:49:14.000000000 +0900
++++ c3000_test/linux/kernel/exit.c 2004-12-20 22:56:21.000000000 +0900
+@@ -196,6 +196,7 @@
+ }
+ i++;
+ set >>= 1;
++ conditional_schedule(); /* sys_exit, many files open */
+ }
+ }
+ }
+diff -Nur c3000_pre/linux/kernel/ksyms.c c3000_test/linux/kernel/ksyms.c
+--- c3000_pre/linux/kernel/ksyms.c 2004-12-19 00:35:59.000000000 +0900
++++ c3000_test/linux/kernel/ksyms.c 2004-12-20 23:07:26.000000000 +0900
+@@ -481,6 +481,13 @@
+ EXPORT_SYMBOL(do_gettimeofday);
+ EXPORT_SYMBOL(do_settimeofday);
+
++#if LOWLATENCY_NEEDED
++EXPORT_SYMBOL(set_running_and_schedule);
++#ifdef CONFIG_LOLAT_SYSCTL
++EXPORT_SYMBOL(__enable_lowlatency);
++#endif
++#endif
++
+ #if !defined(__ia64__)
+ EXPORT_SYMBOL(loops_per_jiffy);
+ #endif
+diff -Nur c3000_pre/linux/kernel/module.c c3000_test/linux/kernel/module.c
+--- c3000_pre/linux/kernel/module.c 2004-08-21 09:49:14.000000000 +0900
++++ c3000_test/linux/kernel/module.c 2004-12-20 22:56:21.000000000 +0900
+@@ -1174,6 +1174,11 @@
+ return ERR_PTR(-ENOMEM);
+ lock_kernel();
+ for (v = module_list, n = *pos; v; n -= v->nsyms, v = v->next) {
++#if 0
++ /* We can't actually do this, because we'd create a
++ * race against module unload. Need a semaphore. */
++ conditional_schedule();
++#endif
+ if (n < v->nsyms) {
+ p->mod = v;
+ p->index = n;
+diff -Nur c3000_pre/linux/kernel/sched.c c3000_test/linux/kernel/sched.c
+--- c3000_pre/linux/kernel/sched.c 2004-08-21 09:49:14.000000000 +0900
++++ c3000_test/linux/kernel/sched.c 2004-12-20 22:56:21.000000000 +0900
+@@ -302,6 +302,17 @@
+ if (tsk->processor != this_cpu)
+ smp_send_reschedule(tsk->processor);
+ }
++#if LOWLATENCY_NEEDED
++ if (enable_lowlatency && (p->policy != SCHED_OTHER)) {
++ struct task_struct *t;
++ for (i = 0; i < smp_num_cpus; i++) {
++ cpu = cpu_logical_map(i);
++ t = cpu_curr(cpu);
++ if (t != tsk)
++ t->need_resched = 1;
++ }
++ }
++#endif
+ return;
+
+
+@@ -1429,3 +1440,93 @@
+ atomic_inc(&init_mm.mm_count);
+ enter_lazy_tlb(&init_mm, current, cpu);
+ }
++
++#if LOWLATENCY_NEEDED
++#if LOWLATENCY_DEBUG
++
++static struct lolat_stats_t *lolat_stats_head;
++static spinlock_t lolat_stats_lock = SPIN_LOCK_UNLOCKED;
++
++void set_running_and_schedule(struct lolat_stats_t *stats)
++{
++ spin_lock(&lolat_stats_lock);
++ if (stats->visited == 0) {
++ stats->visited = 1;
++ stats->next = lolat_stats_head;
++ lolat_stats_head = stats;
++ }
++ stats->count++;
++ spin_unlock(&lolat_stats_lock);
++
++ if (current->state != TASK_RUNNING)
++ set_current_state(TASK_RUNNING);
++ schedule();
++}
++
++void show_lolat_stats(void)
++{
++ struct lolat_stats_t *stats = lolat_stats_head;
++
++ printk("Low latency scheduling stats:\n");
++ while (stats) {
++ printk("%s:%d: %lu\n", stats->file, stats->line, stats->count);
++ stats->count = 0;
++ stats = stats->next;
++ }
++}
++
++#else /* LOWLATENCY_DEBUG */
++
++void set_running_and_schedule()
++{
++ if (current->state != TASK_RUNNING)
++ __set_current_state(TASK_RUNNING);
++ schedule();
++}
++
++#endif /* LOWLATENCY_DEBUG */
++
++int ll_copy_to_user(void *to_user, const void *from, unsigned long len)
++{
++ while (len) {
++ unsigned long n_to_copy = len;
++ unsigned long remainder;
++
++ if (n_to_copy > 4096)
++ n_to_copy = 4096;
++ remainder = copy_to_user(to_user, from, n_to_copy);
++ if (remainder)
++ return remainder + len;
++ to_user = ((char *)to_user) + n_to_copy;
++ from = ((char *)from) + n_to_copy;
++ len -= n_to_copy;
++ conditional_schedule();
++ }
++ return 0;
++}
++
++int ll_copy_from_user(void *to, const void *from_user, unsigned long len)
++{
++ while (len) {
++ unsigned long n_to_copy = len;
++ unsigned long remainder;
++
++ if (n_to_copy > 4096)
++ n_to_copy = 4096;
++ remainder = copy_from_user(to, from_user, n_to_copy);
++ if (remainder)
++ return remainder + len;
++ to = ((char *)to) + n_to_copy;
++ from_user = ((char *)from_user) + n_to_copy;
++ len -= n_to_copy;
++ conditional_schedule();
++ }
++ return 0;
++}
++
++#ifdef CONFIG_LOLAT_SYSCTL
++struct low_latency_enable_struct __enable_lowlatency = { 0, };
++#endif
++
++#endif /* LOWLATENCY_NEEDED */
++
+diff -Nur c3000_pre/linux/kernel/sysctl.c c3000_test/linux/kernel/sysctl.c
+--- c3000_pre/linux/kernel/sysctl.c 2004-08-21 09:49:14.000000000 +0900
++++ c3000_test/linux/kernel/sysctl.c 2004-12-20 22:56:21.000000000 +0900
+@@ -271,6 +271,10 @@
+ {KERN_S390_USER_DEBUG_LOGGING,"userprocess_debug",
+ &sysctl_userprocess_debug,sizeof(int),0644,NULL,&proc_dointvec},
+ #endif
++#ifdef CONFIG_LOLAT_SYSCTL
++ {KERN_LOWLATENCY, "lowlatency", &enable_lowlatency, sizeof (int),
++ 0644, NULL, &proc_dointvec},
++#endif
+ {0}
+ };
+
+diff -Nur c3000_pre/linux/mm/filemap.c c3000_test/linux/mm/filemap.c
+--- c3000_pre/linux/mm/filemap.c 2004-08-21 09:49:15.000000000 +0900
++++ c3000_test/linux/mm/filemap.c 2004-12-20 22:56:21.000000000 +0900
+@@ -179,7 +179,9 @@
+ {
+ struct list_head *head, *curr;
+ struct page * page;
++ int ll_count = 100;
+
++restart:
+ head = &inode->i_mapping->clean_pages;
+
+ spin_lock(&pagemap_lru_lock);
+@@ -190,6 +192,14 @@
+ page = list_entry(curr, struct page, list);
+ curr = curr->next;
+
++ if (conditional_schedule_needed() && ll_count) {
++ spin_unlock(&pagecache_lock);
++ spin_unlock(&pagemap_lru_lock);
++ unconditional_schedule();
++ ll_count--;
++ goto restart;
++ }
++
+ /* We cannot invalidate something in dirty.. */
+ if (PageDirty(page))
+ continue;
+@@ -253,8 +263,7 @@
+ page_cache_release(page);
+ }
+
+-static int FASTCALL(truncate_list_pages(struct list_head *, unsigned long, unsigned *));
+-static int truncate_list_pages(struct list_head *head, unsigned long start, unsigned *partial)
++static int truncate_list_pages(struct list_head *head, unsigned long start, unsigned *partial, int *restart_count)
+ {
+ struct list_head *curr;
+ struct page * page;
+@@ -265,6 +274,17 @@
+ while (curr != head) {
+ unsigned long offset;
+
++ if (conditional_schedule_needed() && *restart_count) {
++ (*restart_count)--;
++ list_del(head);
++ list_add(head, curr); /* Restart on this page */
++ spin_unlock(&pagecache_lock);
++ unconditional_schedule();
++ spin_lock(&pagecache_lock);
++ unlocked = 1;
++ goto restart;
++ }
++
+ page = list_entry(curr, struct page, list);
+ offset = page->index;
+
+@@ -297,13 +317,11 @@
+ } else
+ wait_on_page(page);
+
+- page_cache_release(page);
+-
+- if (current->need_resched) {
+- __set_current_state(TASK_RUNNING);
+- schedule();
++ if (LOWLATENCY_NEEDED) {
++ *restart_count = 4; /* We made progress */
+ }
+
++ page_cache_release(page);
+ spin_lock(&pagecache_lock);
+ goto restart;
+ }
+@@ -326,13 +344,14 @@
+ {
+ unsigned long start = (lstart + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
+ unsigned partial = lstart & (PAGE_CACHE_SIZE - 1);
++ int restart_count = 4;
+ int unlocked;
+
+ spin_lock(&pagecache_lock);
+ do {
+- unlocked = truncate_list_pages(&mapping->clean_pages, start, &partial);
+- unlocked |= truncate_list_pages(&mapping->dirty_pages, start, &partial);
+- unlocked |= truncate_list_pages(&mapping->locked_pages, start, &partial);
++ unlocked = truncate_list_pages(&mapping->clean_pages, start, &partial, &restart_count);
++ unlocked |= truncate_list_pages(&mapping->dirty_pages, start, &partial, &restart_count);
++ unlocked |= truncate_list_pages(&mapping->locked_pages, start, &partial, &restart_count);
+ } while (unlocked);
+ /* Traversed all three lists without dropping the lock */
+ spin_unlock(&pagecache_lock);
+@@ -477,6 +496,7 @@
+
+ page_cache_get(page);
+ spin_unlock(&pagecache_lock);
++ conditional_schedule(); /* sys_msync() (only used by minixfs, udf) */
+ lock_page(page);
+
+ /* The buffers could have been free'd while we waited for the page lock */
+@@ -563,12 +583,14 @@
+ list_del(&page->list);
+ list_add(&page->list, &mapping->locked_pages);
+
+- if (!PageDirty(page))
+- continue;
+-
+ page_cache_get(page);
+ spin_unlock(&pagecache_lock);
+
++ conditional_schedule(); /* sys_msync() */
++
++ if (!PageDirty(page))
++ goto clean;
++
+ lock_page(page);
+
+ if (PageDirty(page)) {
+@@ -579,7 +601,7 @@
+ ret = err;
+ } else
+ UnlockPage(page);
+-
++clean:
+ page_cache_release(page);
+ spin_lock(&pagecache_lock);
+ }
+@@ -597,7 +619,8 @@
+ int filemap_fdatawait(struct address_space * mapping)
+ {
+ int ret = 0;
+-
++ DEFINE_RESCHED_COUNT;
++restart:
+ spin_lock(&pagecache_lock);
+
+ while (!list_empty(&mapping->locked_pages)) {
+@@ -606,6 +629,17 @@
+ list_del(&page->list);
+ list_add(&page->list, &mapping->clean_pages);
+
++ if (TEST_RESCHED_COUNT(32)) {
++ RESET_RESCHED_COUNT();
++ if (conditional_schedule_needed()) {
++ page_cache_get(page);
++ spin_unlock(&pagecache_lock);
++ unconditional_schedule();
++ page_cache_release(page);
++ goto restart;
++ }
++ }
++
+ if (!PageLocked(page))
+ continue;
+
+@@ -706,8 +740,10 @@
+ spin_lock(&pagecache_lock);
+ page = __find_page_nolock(mapping, offset, *hash);
+ spin_unlock(&pagecache_lock);
+- if (page)
++ if (page) {
++ conditional_schedule();
+ return 0;
++ }
+
+ page = page_cache_alloc(mapping);
+ if (!page)
+@@ -963,6 +999,11 @@
+ * the hash-list needs a held write-lock.
+ */
+ repeat:
++ if (conditional_schedule_needed()) {
++ spin_unlock(&pagecache_lock);
++ unconditional_schedule();
++ spin_lock(&pagecache_lock);
++ }
+ page = __find_page_nolock(mapping, offset, hash);
+ if (page) {
+ page_cache_get(page);
+@@ -1413,6 +1454,8 @@
+ page_cache_get(page);
+ spin_unlock(&pagecache_lock);
+
++ conditional_schedule(); /* sys_read() */
++
+ if (!Page_Uptodate(page))
+ goto page_not_up_to_date;
+ generic_file_readahead(reada_ok, filp, inode, page);
+@@ -2114,6 +2157,12 @@
+ address += PAGE_SIZE;
+ pte++;
+ } while (address && (address < end));
++
++ if (conditional_schedule_needed()) {
++ spin_unlock(&vma->vm_mm->page_table_lock);
++ unconditional_schedule(); /* syncing large mapped files */
++ spin_lock(&vma->vm_mm->page_table_lock);
++ }
+ return error;
+ }
+
+@@ -2530,7 +2579,9 @@
+ if (vma->vm_flags & VM_LOCKED)
+ return -EINVAL;
+
+- zap_page_range(vma->vm_mm, start, end - start);
++ zap_page_range(vma->vm_mm, start, end - start,
++ ZPR_COND_RESCHED); /* sys_madvise(MADV_DONTNEED) */
++
+ return 0;
+ }
+
+@@ -3095,6 +3146,9 @@
+ goto sync_failure;
+ page_fault = __copy_from_user(kaddr+offset, buf, bytes);
+ flush_dcache_page(page);
++
++ conditional_schedule();
++
+ status = mapping->a_ops->commit_write(file, page, offset, offset+bytes);
+ if (page_fault)
+ goto fail_write;
+diff -Nur c3000_pre/linux/mm/memory.c c3000_test/linux/mm/memory.c
+--- c3000_pre/linux/mm/memory.c 2004-08-21 09:49:15.000000000 +0900
++++ c3000_test/linux/mm/memory.c 2004-12-20 22:56:21.000000000 +0900
+@@ -370,7 +370,7 @@
+ /*
+ * remove user pages in a given range.
+ */
+-void zap_page_range(struct mm_struct *mm, unsigned long address, unsigned long size)
++static void do_zap_page_range(struct mm_struct *mm, unsigned long address, unsigned long size)
+ {
+ mmu_gather_t *tlb;
+ pgd_t * dir;
+@@ -494,6 +494,10 @@
+ struct page *map;
+ while (!(map = follow_page(mm, start, write))) {
+ spin_unlock(&mm->page_table_lock);
++
++ /* Pinning down many physical pages (kiobufs, mlockall) */
++ conditional_schedule();
++
+ switch (handle_mm_fault(mm, vma, start, write)) {
+ case 1:
+ tsk->min_flt++;
+@@ -655,6 +659,21 @@
+ iobuf->locked = 0;
+ }
+
++#define MAX_ZAP_BYTES 256*PAGE_SIZE
++
++void zap_page_range(struct mm_struct *mm, unsigned long address, unsigned long size, int actions)
++{
++ while (size) {
++ unsigned long chunk = size;
++ if (actions & ZPR_COND_RESCHED && chunk > MAX_ZAP_BYTES)
++ chunk = MAX_ZAP_BYTES;
++ do_zap_page_range(mm, address, chunk);
++ if (actions & ZPR_COND_RESCHED)
++ conditional_schedule();
++ address += chunk;
++ size -= chunk;
++ }
++}
+
+ /*
+ * Lock down all of the pages of a kiovec for IO.
+@@ -764,11 +783,18 @@
+ return 0;
+ }
+
+-static inline void zeromap_pte_range(pte_t * pte, unsigned long address,
+- unsigned long size, pgprot_t prot)
++static inline void zeromap_pte_range(struct mm_struct *mm, pte_t * pte,
++ unsigned long address, unsigned long size,
++ pgprot_t prot)
+ {
+ unsigned long end;
+
++ if (conditional_schedule_needed()) {
++ spin_unlock(&mm->page_table_lock);
++ unconditional_schedule(); /* mmap(/dev/zero) */
++ spin_lock(&mm->page_table_lock);
++ }
++
+ address &= ~PMD_MASK;
+ end = address + size;
+ if (end > PMD_SIZE)
+@@ -796,7 +822,7 @@
+ pte_t * pte = pte_alloc(mm, pmd, address);
+ if (!pte)
+ return -ENOMEM;
+- zeromap_pte_range(pte, address, end - address, prot);
++ zeromap_pte_range(mm, pte, address, end - address, prot);
+ address = (address + PMD_SIZE) & PMD_MASK;
+ pmd++;
+ } while (address && (address < end));
+@@ -1044,7 +1070,7 @@
+
+ /* mapping wholly truncated? */
+ if (mpnt->vm_pgoff >= pgoff) {
+- zap_page_range(mm, start, len);
++ zap_page_range(mm, start, len, 0);
+ continue;
+ }
+
+@@ -1057,7 +1083,7 @@
+ /* Ok, partially affected.. */
+ start += diff << PAGE_SHIFT;
+ len = (len - diff) << PAGE_SHIFT;
+- zap_page_range(mm, start, len);
++ zap_page_range(mm, start, len, 0);
+ } while ((mpnt = mpnt->vm_next_share) != NULL);
+ }
+
+diff -Nur c3000_pre/linux/mm/mmap.c c3000_test/linux/mm/mmap.c
+--- c3000_pre/linux/mm/mmap.c 2004-12-16 22:55:54.000000000 +0900
++++ c3000_test/linux/mm/mmap.c 2004-12-20 23:07:25.000000000 +0900
+@@ -598,7 +598,7 @@
+ fput(file);
+
+ /* Undo any partial mapping done by a device driver. */
+- zap_page_range(mm, vma->vm_start, vma->vm_end - vma->vm_start);
++ zap_page_range(mm, vma->vm_start, vma->vm_end - vma->vm_start, 0);
+ free_vma:
+ kmem_cache_free(vm_area_cachep, vma);
+ return error;
+@@ -998,7 +998,7 @@
+ remove_shared_vm_struct(mpnt);
+ mm->map_count--;
+
+- zap_page_range(mm, st, size);
++ zap_page_range(mm, st, size, ZPR_COND_RESCHED); /* sys_munmap() */
+
+ /*
+ * Fix the mapping, and free the old area if it wasn't reused.
+@@ -1158,7 +1158,7 @@
+ }
+ mm->map_count--;
+ remove_shared_vm_struct(mpnt);
+- zap_page_range(mm, start, size);
++ zap_page_range(mm, start, size, ZPR_COND_RESCHED); /* sys_exit() */
+ if (mpnt->vm_file)
+ fput(mpnt->vm_file);
+ kmem_cache_free(vm_area_cachep, mpnt);
+diff -Nur c3000_pre/linux/mm/mremap.c c3000_test/linux/mm/mremap.c
+--- c3000_pre/linux/mm/mremap.c 2004-12-16 22:55:54.000000000 +0900
++++ c3000_test/linux/mm/mremap.c 2004-12-20 23:07:25.000000000 +0900
+@@ -121,7 +121,7 @@
+ flush_cache_range(mm, new_addr, new_addr + len);
+ while ((offset += PAGE_SIZE) < len)
+ move_one_page(mm, new_addr + offset, old_addr + offset);
+- zap_page_range(mm, new_addr, len);
++ zap_page_range(mm, new_addr, len, 0);
+ #ifdef __arm__
+ memc_update_mm(mm);
+ #endif
+diff -Nur c3000_pre/linux/mm/slab.c c3000_test/linux/mm/slab.c
+--- c3000_pre/linux/mm/slab.c 2004-11-16 15:31:09.000000000 +0900
++++ c3000_test/linux/mm/slab.c 2004-12-20 22:56:21.000000000 +0900
+@@ -940,6 +940,7 @@
+ list_del(&slabp->list);
+
+ spin_unlock_irq(&cachep->spinlock);
++ conditional_schedule();
+ kmem_slab_destroy(cachep, slabp);
+ ret++;
+ spin_lock_irq(&cachep->spinlock);
+@@ -1853,6 +1854,7 @@
+ */
+ spin_unlock_irq(&best_cachep->spinlock);
+ kmem_slab_destroy(best_cachep, slabp);
++ conditional_schedule(); /* try_to_free_pages() */
+ spin_lock_irq(&best_cachep->spinlock);
+ }
+ spin_unlock_irq(&best_cachep->spinlock);
+diff -Nur c3000_pre/linux/mm/swapfile.c c3000_test/linux/mm/swapfile.c
+--- c3000_pre/linux/mm/swapfile.c 2004-08-21 09:49:16.000000000 +0900
++++ c3000_test/linux/mm/swapfile.c 2004-12-20 22:56:21.000000000 +0900
+@@ -819,7 +819,7 @@
+ len += sprintf(buf + len, "partition\t");
+
+ usedswap = 0;
+- for (j = 0; j < ptr->max; ++j)
++ for (j = 0; j < ptr->max; ++j) {
+ switch (ptr->swap_map[j]) {
+ case SWAP_MAP_BAD:
+ case 0:
+@@ -827,6 +827,8 @@
+ default:
+ usedswap++;
+ }
++ conditional_schedule();
++ }
+ len += sprintf(buf + len, "%d\t%d\t%d\n", ptr->pages << (PAGE_SHIFT - 10),
+ usedswap << (PAGE_SHIFT - 10), ptr->prio);
+ }
+@@ -1120,6 +1122,11 @@
+ if (swap_info[i].flags != SWP_USED)
+ continue;
+ for (j = 0; j < swap_info[i].max; ++j) {
++ if (conditional_schedule_needed()) {
++ swap_list_unlock();
++ conditional_schedule();
++ swap_list_lock();
++ }
+ switch (swap_info[i].swap_map[j]) {
+ case 0:
+ case SWAP_MAP_BAD:
+diff -Nur c3000_pre/linux/mm/vmscan.c c3000_test/linux/mm/vmscan.c
+--- c3000_pre/linux/mm/vmscan.c 2004-08-21 09:49:16.000000000 +0900
++++ c3000_test/linux/mm/vmscan.c 2004-12-20 22:56:21.000000000 +0900
+@@ -173,6 +173,7 @@
+ {
+ pte_t * pte;
+ unsigned long pmd_end;
++ DEFINE_RESCHED_COUNT;
+
+ if (pmd_none(*dir))
+ return count;
+@@ -198,11 +199,17 @@
+ address += PAGE_SIZE;
+ break;
+ }
++ if (TEST_RESCHED_COUNT(4)) {
++ if (conditional_schedule_needed())
++ goto out;
++ RESET_RESCHED_COUNT();
++ }
+ }
+ }
+ address += PAGE_SIZE;
+ pte++;
+ } while (address && (address < end));
++out:
+ mm->swap_address = address;
+ return count;
+ }
+@@ -231,6 +238,8 @@
+ count = swap_out_pmd(mm, vma, pmd, address, end, count, classzone);
+ if (!count)
+ break;
++ if (conditional_schedule_needed())
++ return count;
+ address = (address + PMD_SIZE) & PMD_MASK;
+ pmd++;
+ } while (address && (address < end));
+@@ -255,6 +264,8 @@
+ count = swap_out_pgd(mm, vma, pgdir, address, end, count, classzone);
+ if (!count)
+ break;
++ if (conditional_schedule_needed())
++ return count;
+ address = (address + PGDIR_SIZE) & PGDIR_MASK;
+ pgdir++;
+ } while (address && (address < end));
+@@ -276,6 +287,7 @@
+ * Find the proper vm-area after freezing the vma chain
+ * and ptes.
+ */
++continue_scan:
+ spin_lock(&mm->page_table_lock);
+ address = mm->swap_address;
+ if (address == TASK_SIZE || swap_mm != mm) {
+@@ -293,6 +305,12 @@
+ vma = vma->vm_next;
+ if (!vma)
+ break;
++ if (conditional_schedule_needed()) { /* Scanning a large vma */
++ spin_unlock(&mm->page_table_lock);
++ unconditional_schedule();
++ /* Continue from where we left off */
++ goto continue_scan;
++ }
+ if (!count)
+ goto out_unlock;
+ address = vma->vm_start;
+diff -Nur c3000_pre/linux/net/core/iovec.c c3000_test/linux/net/core/iovec.c
+--- c3000_pre/linux/net/core/iovec.c 2004-08-21 11:23:13.000000000 +0900
++++ c3000_test/linux/net/core/iovec.c 2004-12-20 22:56:21.000000000 +0900
+@@ -88,7 +88,7 @@
+ if(iov->iov_len)
+ {
+ int copy = min_t(unsigned int, iov->iov_len, len);
+- if (copy_to_user(iov->iov_base, kdata, copy))
++ if (ll_copy_to_user(iov->iov_base, kdata, copy))
+ goto out;
+ kdata+=copy;
+ len-=copy;
+diff -Nur c3000_pre/linux/net/ipv4/tcp_minisocks.c c3000_test/linux/net/ipv4/tcp_minisocks.c
+--- c3000_pre/linux/net/ipv4/tcp_minisocks.c 2004-08-21 09:49:22.000000000 +0900
++++ c3000_test/linux/net/ipv4/tcp_minisocks.c 2004-12-20 22:56:21.000000000 +0900
+@@ -440,6 +440,9 @@
+ {
+ struct tcp_tw_bucket *tw;
+ int killed = 0;
++#if LOWLATENCY_NEEDED
++ int max_killed = 0;
++#endif
+
+ /* NOTE: compare this to previous version where lock
+ * was released after detaching chain. It was racy,
+@@ -453,6 +456,13 @@
+ goto out;
+
+ while((tw = tcp_tw_death_row[tcp_tw_death_row_slot]) != NULL) {
++#if LOWLATENCY_NEEDED
++ /* This loop takes ~6 usecs per iteration. */
++ if (killed > 100) {
++ max_killed = 1;
++ break;
++ }
++#endif
+ tcp_tw_death_row[tcp_tw_death_row_slot] = tw->next_death;
+ tw->pprev_death = NULL;
+ spin_unlock(&tw_death_lock);
+@@ -463,12 +473,24 @@
+ killed++;
+
+ spin_lock(&tw_death_lock);
++
++ }
++
++#if LOWLATENCY_NEEDED
++ if (max_killed) { /* More to do: do it soon */
++ mod_timer(&tcp_tw_timer, jiffies+2);
++ tcp_tw_count -= killed;
++ }
++ else
++#endif
++ {
++ tcp_tw_death_row_slot =
++ ((tcp_tw_death_row_slot + 1) & (TCP_TWKILL_SLOTS - 1));
++
++ if ((tcp_tw_count -= killed) != 0)
++ mod_timer(&tcp_tw_timer, jiffies+TCP_TWKILL_PERIOD);
+ }
+- tcp_tw_death_row_slot =
+- ((tcp_tw_death_row_slot + 1) & (TCP_TWKILL_SLOTS - 1));
+
+- if ((tcp_tw_count -= killed) != 0)
+- mod_timer(&tcp_tw_timer, jiffies+TCP_TWKILL_PERIOD);
+ net_statistics[smp_processor_id()*2].TimeWaited += killed;
+ out:
+ spin_unlock(&tw_death_lock);
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P17-bvdd_050222.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P17-bvdd_050222.patch
new file mode 100644
index 0000000000..785470a6aa
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P17-bvdd_050222.patch
@@ -0,0 +1,1506 @@
+diff -Nur c3000_pre/linux/drivers/video/Config.in c3000_work/linux/drivers/video/Config.in
+--- c3000_pre/linux/drivers/video/Config.in 2005-02-22 00:14:45.000000000 +0900
++++ c3000_work/linux/drivers/video/Config.in 2005-02-21 23:36:35.000000000 +0900
+@@ -86,6 +86,7 @@
+ dep_bool ' Sharp SL-Series PXA LCD support' CONFIG_FB_SHARPSL_PXA $CONFIG_ARCH_SHARP_SL
+ if [ "$CONFIG_FB_SHARPSL_PXA" = "y" ]; then
+ dep_bool ' Cached FB support for Sharp SL PXA LCDC' CONFIG_SHARPSL_PXA_CONSISTENT_ALLOC $CONFIG_FB_SHARPSL_PXA
++ dep_tristate ' PXA270 overlay(bvdd) support(EXPERIMENTAL)' CONFIG_FB_SHARPSL_PXA_BVDD $CONFIG_FB_SHARPSL_PXA
+ fi
+ dep_bool ' SHARP LOGO screen support' CONFIG_SHARP_LOGO_SCREEN $CONFIG_ARCH_SHARP_SL
+ if [ "$CONFIG_FB_PXA" != "n" -a "$CONFIG_ARCH_LUBBOCK" = "y" ]; then
+diff -Nur c3000_pre/linux/drivers/video/Makefile c3000_work/linux/drivers/video/Makefile
+--- c3000_pre/linux/drivers/video/Makefile 2005-02-22 00:14:45.000000000 +0900
++++ c3000_work/linux/drivers/video/Makefile 2005-02-21 23:40:57.000000000 +0900
+@@ -160,6 +160,7 @@
+ obj-$(CONFIG_FB_CORGI) += w100fb.o fbgen.o corgi_backlight.o
+ obj-$(CONFIG_FB_TOSA) += tc6393fb.o fbgen.o tosa_backlight.o
+ obj-$(CONFIG_FB_SHARPSL_PXA) += sharpsl_pxafb.o fbgen.o corgi_backlight.o
++obj-$(CONFIG_FB_SHARPSL_PXA_BVDD) += bvdd.o
+
+ # Generic Low Level Drivers
+
+diff -Nur c3000_pre/linux/drivers/video/bvdd.c c3000_work/linux/drivers/video/bvdd.c
+--- c3000_pre/linux/drivers/video/bvdd.c 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/drivers/video/bvdd.c 2005-02-22 00:05:24.000000000 +0900
+@@ -0,0 +1,1124 @@
++/* bvdd.c - Create an input/output character device
++ */
++
++#include <linux/kernel.h> /* We're doing kernel work */
++#include <linux/module.h> /* Specifically, a module */
++
++#if CONFIG_MODVERSIONS==1
++#define MODVERSIONS
++#include <linux/modversions.h>
++#endif
++
++#include <linux/fs.h> /* The character device definitions are here */
++#include <linux/wrapper.h>
++#include <linux/mm.h>
++#include <linux/sched.h>
++#include <asm/system.h>
++#include <asm/hardware.h>
++#include <asm/uaccess.h> /* for get_user and put_user */
++#include <asm/io.h>
++
++/* Our own ioctl numbers */
++#include "bvdd.h"
++#include "bvdd_p.h"
++
++#define SUCCESS 0
++
++#define DEVICE_NAME "bvdd" /* The name for our device */
++
++#ifdef DEBUG
++# define PRINT_DEBUG(x...) printk(KERN_WARNING DEVICE_NAME ": " x)
++# define PRINT_INFO(x...) printk(KERN_WARNING DEVICE_NAME ": " x)
++# define PRINT_WARN(x...) printk(KERN_WARNING DEVICE_NAME ": " x)
++# define PRINT_ERROR(x...) printk(KERN_ERROR DEVICE_NAME ": " x)
++# define PRINT_FATAL(x...) printk(KERN_FATAL DEVICE_NAME ": " x)
++#else
++# define PRINT_DEBUG(x...)
++# define PRINT_INFO(x...)
++# define PRINT_WARN(x...) printk(KERN_WARNING DEVICE_NAME ": " x)
++# define PRINT_ERROR(x...) printk(KERN_ERROR DEVICE_NAME ": " x)
++# define PRINT_FATAL(x...) printk(KERN_FATAL DEVICE_NAME ": " x)
++#endif
++
++/* Is the device open right now? Used to prevent concurent access into the same device */
++static int device_open = 0;
++
++static dma_addr_t vram_sharpsl_pxafb_phys;
++static void *vram_virt = NULL; /* virtual address of VRAM (if NULL, VRAM is not allocated) */
++static dma_addr_t vram_phys = 0; /* physical address of VRAM */
++static u32 vram_size = 0; /* VRAM size */
++
++#undef FDADR
++// ----------------------------------------------------------------
++// ¥Ç¥£¥¹¥¯¥ê¥×¥¿
++// aligned on a 16-byte boundary
++
++typedef struct {
++ unsigned long FDADR; /* frame descriptor address */
++ unsigned long FSADR; /* DMA Frame Source Address Registers */
++ unsigned long FIDR; /* frame id reg */
++ unsigned long LDCMD; /* LCD command reg */
++} descriptor_t;
++
++static descriptor_t *descriptors = NULL;
++#ifndef USE_PXAFB_DESCRIPTOR_AREA
++# define MAX_DESCRIPTORS (PAGE_SIZE / 16)
++static descriptor_t *descriptor_virt; /* ¥Ç¥£¥¹¥¯¥ê¥×¥¿ÇÛÎó¤Î²¾ÁÛ¥¢¥É¥ì¥¹ */
++static dma_addr_t descriptor_phys; /* ¥Ç¥£¥¹¥¯¥ê¥×¥¿ÇÛÎó¤ÎʪÍý¥¢¥É¥ì¥¹ */
++static u32 descriptor_size; /* ¥Ç¥£¥¹¥¯¥ê¥×¥¿ÇÛÎó¤Î¥µ¥¤¥º */
++#else
++# define MAX_DESCRIPTORS ((PAGE_SIZE - 16) / 16)
++#endif
++
++// Physical addresses, offsets & lengths
++#define SRAM_BASE 0xfe100000
++#define SRAM_BASE_PHYS 0x5c000000
++#define MAX_VRAM_SIZE (1024 * 4)
++static unsigned long offset2phys_map[MAX_VRAM_SIZE >> PAGE_SHIFT];
++#define OFFSET2PHYS_MAP_SRAM_INDEX 0
++
++// vram manager
++typedef struct {
++ unsigned long start_phys;
++ void *start_virt;
++ unsigned long end_phys;
++ unsigned long offset;
++} vram_area_t;
++#define MAX_VRAM_AREAS 128
++static vram_area_t vram_areas[MAX_VRAM_AREAS];
++
++// test
++static volatile unsigned int next_fbr2 = 0;
++static volatile unsigned int next_fbr3 = 0;
++static volatile unsigned int next_fbr4 = 0;
++static wait_queue_head_t fbr2_wait;
++static wait_queue_head_t fbr3_wait;
++static wait_queue_head_t fbr4_wait;
++static wait_queue_head_t wq_lcd_quick_disable_done;
++static wait_queue_head_t wq_lcd_disable_done;
++
++
++#if defined(CONFIG_SL_CCCR_CHANGE)
++extern int read_cccr(void);
++extern void write_cccr(int);
++#endif
++#if defined(CONFIG_CHANGE_CORE_VOLT)
++extern int read_vcore(void);
++extern void write_vcore(int);
++#endif
++
++// ----------------------------------------------------------------
++static void bvdd_vsync();
++
++// ----------------------------------------------------------------
++#if 1
++static void *consistent_alloc(int gfp, size_t size, dma_addr_t *dma_handle);
++static void *l_consistent_alloc2(int gfp, size_t size, dma_addr_t *dma_handle, int pte);
++static void consistent_free(void *vaddr, size_t size, dma_addr_t handle);
++#endif
++
++
++static void inttest(int irq, void *dev_id, struct pt_regs *regs)
++{
++ static int count = 0;
++ static int start = 0;
++ LCSR0_u lcsr0;
++ LCSR1_u lcsr1;
++ int st = 0;
++
++ lcsr1.val = REG_LCSR1;
++ if (lcsr1.f.EOF2 == 1) {
++ LCSR1_u v;
++/* if ((next_fbr2 != 0) && ((REG_FBR2 & 1) == 0)) { */
++ if ((next_fbr2 != 0)) {
++ REG_FBR2 = next_fbr2 | 3;
++/* REG_FDADR2 = next_fbr2; */
++/* wake_up_interruptible(&fbr2_wait); */
++ }
++ v.val = 0;
++ v.f.EOF2 = 1;
++ REG_LCSR1 = v.val;
++ }
++ else if (lcsr1.f.EOF3 == 1) {
++ LCSR1_u v;
++/* if ((next_fbr3 != 0) && ((REG_FBR3 & 1) == 0)) { */
++ if ((next_fbr3 != 0)) {
++ REG_FBR3 = next_fbr3 | 3;
++/* REG_FDADR3 = next_fbr3; */
++/* next_fbr3 = 0; */
++/* wake_up_interruptible(&fbr3_wait); */
++ }
++ v.val = 0;
++ v.f.EOF3 = 1;
++ REG_LCSR1 = v.val;
++ }
++ else if (lcsr1.f.EOF4 == 1) {
++ LCSR1_u v;
++/* if ((next_fbr4 != 0) && ((REG_FBR4 & 1) == 0)) { */
++ if ((next_fbr4 != 0)) {
++ REG_FBR4 = next_fbr4 | 3;
++/* REG_FDADR4 = next_fbr4; */
++/* next_fbr4 = 0; */
++/* wake_up_interruptible(&fbr4_wait); */
++ }
++ v.val = 0;
++ v.f.EOF4 = 1;
++ REG_LCSR1 = v.val;
++ }
++ if (REG_LCSR1 & 0x20000) { /* BS2 */
++ next_fbr2 = 0;
++ wake_up_interruptible(&fbr2_wait);
++ REG_LCSR1 = 0x20000;
++ }
++ if (REG_LCSR1 & 0x40000) { /* BS3 */
++ next_fbr3 = 0;
++ wake_up_interruptible(&fbr3_wait);
++ REG_LCSR1 = 0x40000;
++ }
++ if (REG_LCSR1 & 0x80000) { /* BS4 */
++ next_fbr4 = 0;
++ wake_up_interruptible(&fbr4_wait);
++ REG_LCSR1 = 0x80000;
++ }
++
++#if 0
++ lcsr0.val = REG_LCSR0;
++ if (lcsr0.f.QD == 1) {
++ LCSR0_u v;
++ v.val = 0;
++ v.f.QD = 1;
++ REG_LCSR0 = v.val;
++ wake_up_interruptible(&wq_lcd_quick_disable_done);
++ }
++ if (lcsr0.f.LDD == 1) {
++ LCSR0_u v;
++ v.val = 0;
++ v.f.LDD = 1;
++ REG_LCSR0 = v.val;
++ wake_up_interruptible(&wq_lcd_disable_done);
++ }
++#endif
++}
++
++static int setup_vram(int size)
++{
++ int order, i;
++ unsigned int offset = BVDD_VRAM_OFFSET_USER;
++
++ size = PAGE_ALIGN(size);
++ order = get_order(size);
++ PRINT_DEBUG("setup_vram(size=%d)\n", size);
++
++ for (i = 2; i < MAX_VRAM_AREAS - 2; ++i) {
++ vram_area_t *va = &vram_areas[i];
++ va->start_virt = NULL;
++ do {
++/* if (order > 3) { */
++/* order --; */
++/* continue; */
++/* } */
++ va->start_virt = consistent_alloc(GFP_KERNEL|GFP_DMA, PAGE_SIZE << order, (dma_addr_t *)&va->start_phys);
++ if (va->start_virt == NULL) {
++ order --;
++ if (order < 1)
++ return -1;
++ }
++ } while (va->start_virt == NULL);
++ va->end_phys = va->start_phys + (PAGE_SIZE << order);
++ va->offset = offset;
++ offset += PAGE_SIZE << order;
++ size -= PAGE_SIZE << order;
++ PRINT_DEBUG(" vram_area[%2d] : 0x%p, %d, 0x%p\n", i, va->start_phys, PAGE_SIZE << order, va->offset);
++ if (size <= 0)
++ break;
++ }
++
++ if (size > 0)
++ return -1;
++ else
++ return 0;
++}
++
++static int free_vram(void)
++{
++ int i;
++ for (i = 2; i < MAX_VRAM_AREAS - 2; ++i) {
++ vram_area_t *va = &vram_areas[i];
++ if (va->start_virt != NULL) {
++ consistent_free(va->start_virt, va->end_phys - va->start_phys, va->start_phys);
++ memset(va, 0, sizeof(vram_area_t));
++ }
++ }
++}
++
++// ----------------------------------------------------------------
++static lcdc_state_t lcdc_state_orig;
++static lcdc_state_t lcdc_state;
++
++static void lcdc_state_read(lcdc_state_t *ls)
++{
++ ls->cken20_intmem = (CKEN & CKEN20_INTMEM) ? 1 : 0;
++ ls->lccr0.val = REG_LCCR0;
++ ls->lccr0.f.reserved1 = 0;
++ ls->lccr0.f.reserved2 = 0;
++ ls->lccr1.val = REG_LCCR1;
++ ls->lccr2.val = REG_LCCR2;
++ ls->lccr3.val = REG_LCCR3;
++ ls->lccr3.f.reserved1 = 0;
++ ls->lccr4.val = REG_LCCR4;
++ ls->lccr4.f.reserved1 = 0;
++ ls->lccr4.f.reserved2 = 0;
++ ls->ovl1c1.val = REG_OVL1C1;
++ ls->ovl1c1.f.reserved1 = 0;
++ ls->ovl1c2.val = REG_OVL1C2;
++ ls->ovl1c2.f.reserved1 = 0;
++ ls->ovl2c1.val = REG_OVL2C1;
++ ls->ovl2c1.f.reserved1 = 0;
++ ls->ovl2c2.val = REG_OVL2C2;
++ ls->ovl2c2.f.reserved1 = 0;
++ ls->fdadr0 = REG_FDADR0;
++ ls->fdadr1 = REG_FDADR1;
++ ls->fdadr2 = REG_FDADR2;
++ ls->fdadr3 = REG_FDADR3;
++ ls->fdadr4 = REG_FDADR4;
++ ls->fdadr5 = REG_FDADR5;
++ ls->fdadr6 = REG_FDADR6;
++}
++
++static void lcdc_state_write(lcdc_state_t *ls)
++{
++ int i;
++
++ ls->cken20_intmem = (CKEN & CKEN20_INTMEM) ? 1 : 0;
++ if (ls->cken20_intmem)
++ CKEN |= CKEN20_INTMEM;
++ else
++ CKEN &= ~CKEN20_INTMEM;
++
++/* { */
++/* LCCR0_u v; */
++/* v.val = 0; */
++/* v.f.QDM = 1; */
++/* v.f.LDM = 1; */
++/* REG_LCCR0 &= ~v.val; */
++/* } */
++
++ ls->lccr2.f.EFW = 64;
++ ls->lccr2.f.VSW = 64;
++ for (i = 0; i < 2; ++i) {
++ bvdd_vsync();
++ REG_LCCR0 |= 0x400; /* Disable LCD controller */
++/* interruptible_sleep_on(&wq_lcd_disable_done); */
++
++ bvdd_vsync(); /* Wait for disabled */
++ REG_LCCR0 &= ~1; /* Do a quick disable */
++
++ REG_OVL2C1 = ls->ovl2c1.val;
++ REG_OVL2C2 = ls->ovl2c2.val;
++ REG_OVL1C1 = ls->ovl1c1.val;
++ REG_OVL1C2 = ls->ovl1c2.val;
++ REG_LCCR1 = ls->lccr1.val;
++ REG_LCCR2 = ls->lccr2.val;
++ REG_LCCR3 = ls->lccr3.val;
++ REG_LCCR4 = ls->lccr4.val;
++/* REG_LCCR5 = 0x3F3F3F31; */
++/* REG_LCCR5 = 0x3F3F313F; /\* EOF *\/ */
++ REG_LCCR5 = 0x3F31313F; /* BSM/EOF */
++
++ REG_LCDBSCNTR = 5;
++
++ REG_LCSR0 = 0x00001FFF;
++ REG_LCSR1 = 0x3E3F3F3F;
++
++ ls->lccr0.f.ENB = 1;
++ REG_LCCR0 = ls->lccr0.val; /* Enable LCD controller */
++
++ REG_LCCR0 &= ~1; /* Do a quick disable */
++/* interruptible_sleep_on(&wq_lcd_quick_disable_done); */
++
++ REG_FDADR0 = ls->fdadr0;
++ REG_FDADR1 = ls->fdadr1;
++ REG_FDADR2 = ls->fdadr2;
++ REG_FDADR3 = ls->fdadr3;
++ REG_FDADR4 = ls->fdadr4;
++ REG_FDADR5 = ls->fdadr5;
++ REG_FDADR6 = ls->fdadr6;
++
++ REG_LCCR0 = ls->lccr0.val;
++ }
++}
++
++static void lcdc_state_print_descriptor(int n, unsigned long addr)
++{
++ PRINT_DEBUG(" FDADR%d : 0x%08x FDADR FSADR FIDR LDCMD\n", n, addr);
++ if (addr == 0)
++ PRINT_DEBUG(" ---------- ---------- ---------- ----------\n");
++ else {
++ PRINT_DEBUG(" 0x%08x 0x%08x 0x%08x 0x%08x\n",
++ ((unsigned long *)__phys_to_virt(addr))[0],
++ ((unsigned long *)__phys_to_virt(addr))[1],
++ ((unsigned long *)__phys_to_virt(addr))[2],
++ ((unsigned long *)__phys_to_virt(addr))[3]);
++ }
++}
++
++static void lcdc_state_print(lcdc_state_t *ls)
++{
++ PRINT_DEBUG("lcdc_state_print(lcdc_state_t * = 0x%p)\n", ls);
++ PRINT_DEBUG(" CKEN20_INTMEM : %d\n", ls->cken20_intmem);
++ PRINT_DEBUG(" LCCR0 : 0x%08x\n", ls->lccr0.val);
++ PRINT_DEBUG(" ENB CMS SDS LDM SOFM0 IUM EOFM0 PAS DPD DIS QDM PDD BSM0 OUM LCDT\n");
++ PRINT_DEBUG(" %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
++ ls->lccr0.f.ENB, ls->lccr0.f.CMS, ls->lccr0.f.SDS, ls->lccr0.f.LDM, ls->lccr0.f.SOFM0,
++ ls->lccr0.f.IUM, ls->lccr0.f.EOFM0, ls->lccr0.f.PAS, ls->lccr0.f.DPD, ls->lccr0.f.DIS,
++ ls->lccr0.f.QDM, ls->lccr0.f.PDD, ls->lccr0.f.BSM0, ls->lccr0.f.OUM, ls->lccr0.f.LCDT);
++ PRINT_DEBUG(" RDSTM CMDIM OUC LDDALT\n");
++ PRINT_DEBUG(" %3d %3d %3d %3d\n",
++ ls->lccr0.f.RDSTM, ls->lccr0.f.CMDIM, ls->lccr0.f.OUC, ls->lccr0.f.LDDALT);
++ PRINT_DEBUG(" LCCR1 : 0x%08x\n", ls->lccr1.val);
++ PRINT_DEBUG(" PPL HSW ELW BLW\n");
++ PRINT_DEBUG(" %4d %3d %3d %3d\n",
++ ls->lccr1.f.PPL, ls->lccr1.f.HSW, ls->lccr1.f.ELW, ls->lccr1.f.BLW);
++ PRINT_DEBUG(" LCCR2 : 0x%08x\n", ls->lccr2.val);
++ PRINT_DEBUG(" LPP VSW EFW BFW\n");
++ PRINT_DEBUG(" %4d %3d %3d %3d\n",
++ ls->lccr2.f.LPP, ls->lccr2.f.VSW, ls->lccr2.f.EFW, ls->lccr2.f.BFW);
++ PRINT_DEBUG(" LCCR3 : 0x%08x\n", ls->lccr3.val);
++ PRINT_DEBUG(" PCD ACB API VSP HSP PCP OEP BPP DPC BPP3 PDFOR\n");
++ PRINT_DEBUG(" %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d\n",
++ ls->lccr3.f.PCD, ls->lccr3.f.ACB, ls->lccr3.f.API, ls->lccr3.f.VSP,
++ ls->lccr3.f.HSP, ls->lccr3.f.PCP, ls->lccr3.f.OEP, ls->lccr3.f.BPP,
++ ls->lccr3.f.DPC, ls->lccr3.f.BPP3, ls->lccr3.f.PDFOR);
++ PRINT_DEBUG(" LCCR4 : 0x%08x\n", ls->lccr4.val);
++ PRINT_DEBUG(" K1 K2 K3 PAL_FOR PCDDIV\n");
++ PRINT_DEBUG(" %2d %2d %2d %3d %3d\n",
++ ls->lccr4.f.K1, ls->lccr4.f.K2, ls->lccr4.f.K3, ls->lccr4.f.PAL_FOR,
++ ls->lccr4.f.PCDDIV);
++ PRINT_DEBUG(" OVL1C1 : 0x%08x\n", ls->ovl1c1.val);
++ PRINT_DEBUG(" PPL1 LPO1 BPP1 O1EN\n");
++ PRINT_DEBUG(" %3d %3d %3d %3d\n",
++ ls->ovl1c1.f.PPL1, ls->ovl1c1.f.LPO1, ls->ovl1c1.f.BPP1, ls->ovl1c1.f.O1EN);
++ PRINT_DEBUG(" OVL1C2 : 0x%08x\n", ls->ovl1c2.val);
++ PRINT_DEBUG(" O1XPOS O1YPOS\n");
++ PRINT_DEBUG(" %4d %4d\n",
++ ls->ovl1c2.f.O1XPOS, ls->ovl1c2.f.O1YPOS);
++ PRINT_DEBUG(" OVL2C1 : 0x%08x\n", ls->ovl2c1.val);
++ PRINT_DEBUG(" PPL2 LPO2 BPP2 O2EN\n");
++ PRINT_DEBUG(" %3d %3d %3d %3d\n",
++ ls->ovl2c1.f.PPL2, ls->ovl2c1.f.LPO2, ls->ovl2c1.f.BPP2, ls->ovl2c1.f.O2EN);
++ PRINT_DEBUG(" OVL2C2 : 0x%08x\n", ls->ovl2c2.val);
++ PRINT_DEBUG(" O2XPOS O2YPOS FOR\n");
++ PRINT_DEBUG(" %4d %4d %3d\n",
++ ls->ovl2c2.f.O2XPOS, ls->ovl2c2.f.O2YPOS, ls->ovl2c2.f.FOR);
++ lcdc_state_print_descriptor(0, ls->fdadr0);
++ lcdc_state_print_descriptor(1, ls->fdadr1);
++ lcdc_state_print_descriptor(2, ls->fdadr2);
++ lcdc_state_print_descriptor(3, ls->fdadr3);
++ lcdc_state_print_descriptor(4, ls->fdadr4);
++ lcdc_state_print_descriptor(5, ls->fdadr5);
++ lcdc_state_print_descriptor(6, ls->fdadr6);
++}
++
++typedef struct {
++ unsigned int offset;
++ int size;
++ unsigned int desc_phys;
++} desc_cache_t;
++
++#define MAX_DESC_CACHE 256
++desc_cache_t desc_cache[MAX_DESC_CACHE];
++int desc_cache_index = 0;
++
++static unsigned int lcdc_set_descriptor(unsigned long offset, int size)
++{
++ descriptor_t *desc, *desc_prev = NULL, *desc_prev2, *desc_first = NULL;
++ int i, count = 0, is_first_desc = 1;
++ unsigned int desc_phys, desc_first_phys;
++ unsigned int offset_orig = offset, size_orig = size;
++
++ PRINT_DEBUG("lcdc_set_descriptor(offset=0x%08x, size=0x%08x)\n", offset, size);
++
++ for (i = 0; i < desc_cache_index; ++i) {
++ if (desc_cache[i].offset == offset && desc_cache[i].size == size)
++ return desc_cache[i].desc_phys;
++ }
++
++ /* build descriptor */
++ while (size > 0) {
++ vram_area_t *va = NULL;
++ unsigned int alen, aoff;
++
++ desc = NULL;
++ for (i = 0; i < MAX_DESCRIPTORS; ++i) {
++ unsigned int fdadr = *(unsigned int *)(&descriptors[i]);
++ if (fdadr == 0) {
++ desc = &descriptors[i];
++ desc_phys = descriptor_phys + (sizeof(descriptor_t) * i);
++ break;
++ }
++ }
++ if (desc == NULL) {
++ // empty
++ return 0;
++ }
++
++ for (i = 0; i < MAX_VRAM_AREAS; ++i) {
++ va = &vram_areas[i];
++ if (va->offset <= offset && offset < (va->offset + (va->end_phys - va->start_phys)))
++ break;
++ }
++ if (i == MAX_VRAM_AREAS) {
++ return 0;
++ }
++
++ aoff = offset - va->offset;
++ if (is_first_desc) {
++ alen = 4 * 1024;
++ is_first_desc = 0;
++ } else {
++ alen = va->end_phys - va->start_phys - aoff;
++ if (alen > size)
++ alen = size;
++ }
++
++ desc->FDADR = desc_phys;
++ desc->FSADR = va->start_phys + aoff;
++ desc->FIDR = 0;
++ desc->LDCMD = alen;
++
++ if (desc_prev != NULL)
++ desc_prev->FDADR = desc_phys;
++ desc_prev2 = desc_prev;
++ desc_prev = desc;
++
++ if (desc_first == NULL) {
++ desc_first = desc;
++ desc_first_phys = desc_phys;
++ }
++
++ size -= alen;
++ offset += alen;
++ }
++
++ /* ÀèƬ¤Î¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Ø¥ê¥ó¥¯¤µ¤»¤ë */
++ desc->FDADR = desc_first_phys;
++
++ /* ËöÈø¤Î¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ÏSOF/EOF³ä¤ê¹þ¤ß¤òȯÀ¸¤µ¤»¤ë */
++/* desc->LDCMD = desc->LDCMD | 0x400000; */
++/* desc->LDCMD = desc->LDCMD | 0x200000; */
++ desc_prev2->LDCMD |= 0x200000;
++
++ desc_cache[desc_cache_index].offset = offset_orig;
++ desc_cache[desc_cache_index].size = size_orig;
++ desc_cache[desc_cache_index].desc_phys = desc_first_phys;
++ ++ desc_cache_index; /* FIXME: buffer overflow */
++
++#if 0
++ desc = desc_first;
++ desc_phys = desc_first_phys;
++ do {
++ lcdc_state_print_descriptor(count++, desc_phys);
++ if (count >= MAX_DESCRIPTORS)
++ break;
++ desc_prev = desc;
++ desc_phys = desc->FDADR;
++ } while (desc_prev->FDADR != desc_first_phys);
++#endif
++
++ return desc_first_phys;
++}
++
++// ----------------------------------------------------------------
++
++static int bvdd_open(struct inode *inode,
++ struct file *file)
++{
++ int i;
++ printk(DEVICE_NAME ": bvdd_open(0x%p, 0x%p)\n", inode, file);
++
++ if (device_open)
++ return -EBUSY;
++
++ lcdc_state_read(&lcdc_state_orig);
++ lcdc_state_orig.fdadr1 = 0;
++ lcdc_state_orig.fdadr2 = 0;
++ lcdc_state_orig.fdadr3 = 0;
++ lcdc_state_orig.fdadr4 = 0;
++ lcdc_state_orig.fdadr5 = 0;
++ lcdc_state_orig.fdadr6 = 0;
++/* lcdc_state_print(&lcdc_state_orig); */
++
++ memcpy(&lcdc_state, &lcdc_state_orig, sizeof(lcdc_state));
++ lcdc_state.cken20_intmem = 1;
++
++#ifndef USE_PXAFB_DESCRIPTOR_AREA
++ descriptor_size = PAGE_ALIGN(sizeof(descriptor_t) * MAX_DESCRIPTORS);
++ descriptors = consistent_alloc(GFP_KERNEL|GFP_DMA, descriptor_size, &descriptor_phys);
++ memset(descriptors, 0, sizeof(descriptor_t) * MAX_DESCRIPTORS);
++ printk(DEVICE_NAME ": descriptor: virt=0x%p, phys=0x%p, size=%d\n",
++ descriptors, descriptor_phys, descriptor_size);
++#else
++ // SHARPSL_PXAFB¤¬³ÎÊݤ·¤Æ¤¤¤ëÎΰè¤ò¼ÚÍѤ¹¤ë¡£
++ // Ƭ¤Î16¥Ð¥¤¥È¤ÏSLARPSL_PXAFB¤¬»È¤Ã¤Æ¤¤¤ë¤Î¤Ç¥¹¥­¥Ã¥×¤¹¤ë¡£
++ descriptors = (descriptor_t *)__phys_to_virt((lcdc_state_orig.fdadr0 + 16));
++ PRINT_DEBUG(" descriptors : phys=0x%p, virt=0x%p\n", lcdc_state_orig.fdadr0 + 16, descriptors);
++ memset(descriptors, 0, sizeof(descriptor_t) * MAX_DESCRIPTORS);
++ PRINT_DEBUG(" descriptors : 0x%p, 0x%p\n", &descriptors[0], &descriptors[1]);
++#endif
++
++ init_waitqueue_head(&fbr2_wait);
++ init_waitqueue_head(&fbr3_wait);
++ init_waitqueue_head(&fbr4_wait);
++ init_waitqueue_head(&wq_lcd_quick_disable_done);
++ init_waitqueue_head(&wq_lcd_disable_done);
++
++ next_fbr2 = 0;
++ next_fbr3 = 0;
++ next_fbr4 = 0;
++
++ request_irq(17, inttest, SA_INTERRUPT|SA_SHIRQ, "bvdd", (void *)0xDEADBEAF);
++
++ device_open++;
++
++ MOD_INC_USE_COUNT;
++
++ return 0;
++}
++
++
++static int bvdd_release(struct inode *inode,
++ struct file *file)
++{
++ PRINT_DEBUG("bvdd_release(0x%p, 0x%p)\n", inode, file);
++ PRINT_DEBUG(" ***** %d\n", REG_LCSR1 & 0x200);
++
++ free_irq(17, (void *)0xDEADBEAF);
++
++ /* restore lcdc state */
++ lcdc_state_write(&lcdc_state_orig);
++ lcdc_state_write(&lcdc_state_orig);
++
++ // free vram
++ if (vram_virt != NULL) {
++ printk(DEVICE_NAME ": Now freeing vram.\n");
++ consistent_free(vram_virt, vram_size, vram_phys);
++ vram_virt = NULL;
++ } else {
++ printk(DEVICE_NAME ": vram is not allocated.\n");
++ }
++ free_vram();
++
++#ifndef USE_PXAFB_DESCRIPTOR_AREA
++ // free descriptor
++ consistent_free(descriptors, descriptor_size, descriptor_phys);
++ descriptors = NULL;
++ descriptor_size = 0;
++ descriptor_phys = 0;
++#else
++ descriptors = NULL;
++#endif
++
++ // free descriptor cache
++ desc_cache_index = 0;
++
++ __asm__ __volatile__ ("mcr p15, 0, %0, c15, c1, 0" : :"r"(0));
++
++ /* We're now ready for our next caller */
++ device_open --;
++
++ MOD_DEC_USE_COUNT;
++
++ return 0;
++}
++
++#define SHARPSL_PXA_VSYNC_TIMEOUT 30000 // timeout = 30[ms] > 16.8[ms]
++//
++static void bvdd_vsync()
++{
++ int timeout = SHARPSL_PXA_VSYNC_TIMEOUT;
++
++ while(timeout > 0)
++ {
++ if ((GPLR(GPIO74_LCD_FCLK) & GPIO_bit(GPIO74_LCD_FCLK)))
++ break;
++ udelay(1);
++ timeout--;
++ }
++ while(timeout > 0)
++ {
++ if (!(GPLR(GPIO74_LCD_FCLK) & GPIO_bit(GPIO74_LCD_FCLK)))
++ break;
++ udelay(1);
++ timeout--;
++ }
++}
++
++static int bvdd_setup_frame(int type, bvdd_frame_t *frame_user, int is_branch)
++{
++ bvdd_frame_t frame;
++ int i;
++
++ copy_from_user(&frame, (void *)frame_user, sizeof(frame));
++
++#if 0
++ PRINT_DEBUG("bvdd_setup_frame(type=%d,bvdd_frame_t*=0x%p)\n", type, frame_user);
++ printk(DEVICE_NAME ": bvdd_frame_t {\n");
++ printk(DEVICE_NAME ": format=%d\n", frame.format);
++ printk(DEVICE_NAME ": width=%d\n", frame.width);
++ printk(DEVICE_NAME ": height=%d\n", frame.height);
++ printk(DEVICE_NAME ": x=%d\n", frame.x);
++ printk(DEVICE_NAME ": y=%d\n", frame.y);
++ printk(DEVICE_NAME ": offset=0x%p\n", frame.offset);
++ printk(DEVICE_NAME ": u_offset=0x%p\n", frame.u_offset);
++ printk(DEVICE_NAME ": v_offset=0x%p\n", frame.v_offset);
++ printk(DEVICE_NAME ": }\n");
++#endif
++
++ if (frame.format > 16) {
++ unsigned int desc, y_stride, uv_stride;
++
++ y_stride = (frame.width + 15) & ~15;
++ uv_stride = y_stride / 2;
++
++/* lcdc_state.lccr3.f.PDFOR = 3; */
++
++ lcdc_state.ovl2c1.f.O2EN = 1;
++ lcdc_state.ovl2c1.f.LPO2 = frame.height - 1;
++ lcdc_state.ovl2c1.f.PPL2 = y_stride - 1;
++ lcdc_state.ovl2c1.f.BPP2 = 0;
++ lcdc_state.ovl2c2.f.FOR = frame.format - 16;
++/* lcdc_state.ovl2c2.f.FOR = 4; */
++ lcdc_state.ovl2c2.f.O2XPOS = frame.x;
++ lcdc_state.ovl2c2.f.O2YPOS = frame.y;
++
++ desc = lcdc_set_descriptor(frame.offset, y_stride * frame.height);
++ if (desc == 0) {
++ PRINT_DEBUG(" couldn't set descriptors.\n");
++ return -1;
++ }
++ lcdc_state.fdadr2 = desc;
++
++ desc = lcdc_set_descriptor(frame.u_offset, uv_stride * (frame.height / 2));
++ if (desc == 0) {
++ PRINT_DEBUG(" couldn't set descriptors.\n");
++ lcdc_state.fdadr2 = 0;
++ return -1;
++ }
++ lcdc_state.fdadr3 = desc;
++
++ desc = lcdc_set_descriptor(frame.v_offset, uv_stride * (frame.height / 2));
++ if (desc == 0) {
++ PRINT_DEBUG(" couldn't set descriptors.\n");
++ lcdc_state.fdadr2 = 0;
++ lcdc_state.fdadr3 = 0;
++ return -1;
++ }
++ lcdc_state.fdadr4 = desc;
++
++ if (is_branch) {
++/* interruptible_sleep_on(&fbr2_wait); */
++/* interruptible_sleep_on(&fbr3_wait); */
++/* interruptible_sleep_on(&fbr4_wait); */
++ wait_event_interruptible(fbr2_wait, (next_fbr2 == 0));
++ wait_event_interruptible(fbr3_wait, (next_fbr3 == 0));
++ wait_event_interruptible(fbr4_wait, (next_fbr4 == 0));
++ disable_irq(17);
++ next_fbr2 = lcdc_state.fdadr2;
++ next_fbr3 = lcdc_state.fdadr3;
++ next_fbr4 = lcdc_state.fdadr4;
++ enable_irq(17);
++ } else {
++ lcdc_state_print(&lcdc_state);
++ lcdc_state_write(&lcdc_state);
++ }
++ }
++}
++
++static int bvdd_ioctl(struct inode *inode, struct file *file,
++ unsigned int ioctl_num, unsigned long ioctl_param)
++{
++ int i;
++ char *temp;
++ char ch;
++
++ switch (ioctl_num) {
++ case BVDD_IOCTL_SETUP_VRAM: {
++ printk(DEVICE_NAME ": BVDD_IOCTL_SETUP_VRAM(0x%08x)\n", ioctl_param);
++#if 0
++ // ´û¤ËVRAM¤¬³ÎÊݤµ¤ì¤Æ¤¤¤ì¤Ð²òÊü¤¹¤ë
++ if (vram_virt != NULL) {
++ printk(DEVICE_NAME ": now freeing allocated vram\n");
++ consistent_free(vram_virt, vram_size, vram_phys);
++ }
++
++ vram_size = PAGE_ALIGN(ioctl_param + PAGE_SIZE);
++ vram_virt = consistent_alloc(GFP_KERNEL /* | GFP_DMA */, vram_size, &vram_phys);
++ if (vram_virt == NULL) {
++ printk(DEVICE_NAME ": consistent_alloc failed\n");
++ return -EINVAL;
++ }
++
++ printk(DEVICE_NAME ": vram_virt=0x%p\n", vram_virt);
++ printk(DEVICE_NAME ": vram_phys=0x%p\n", vram_phys);
++ printk(DEVICE_NAME ": vram_size=%d\n", vram_size);
++ vram_areas[2].start_virt = vram_virt;
++ vram_areas[2].start_phys = vram_phys;
++ vram_areas[2].end_phys = vram_phys + vram_size;
++ vram_areas[2].offset = BVDD_VRAM_OFFSET_USER;
++#endif
++ free_vram();
++ if (setup_vram(ioctl_param) < 0)
++ return -EINVAL;
++
++ break;
++ }
++
++ case BVDD_IOCTL_SETUP_BASE_FRAME: {
++ printk(DEVICE_NAME ": BVDD_IOCTL_SETUP_BASE_FRAME(0x%08x)\n", ioctl_param);
++ break;
++ }
++ case BVDD_IOCTL_SETUP_OVERLAY1_FRAME: {
++ break;
++ }
++ case BVDD_IOCTL_SETUP_OVERLAY2_FRAME: {
++ bvdd_frame_t frame;
++ printk(DEVICE_NAME ": BVDD_IOCTL_SETUP_OVERLAY2_FRAME(0x%08x)\n", ioctl_param);
++ bvdd_setup_frame(2, (bvdd_frame_t *)ioctl_param, 0);
++ break;
++ }
++
++ case BVDD_IOCTL_BRANCH_OVERLAY2_FRAME: {
++ bvdd_frame_t frame;
++/* PRINT_DEBUG("BVDD_IOCTL_BRANCH_OVERLAY2_FRAME(0x%08x)\n", ioctl_param); */
++ bvdd_setup_frame(2, (bvdd_frame_t *)ioctl_param, 1);
++ break;
++ }
++
++ case BVDD_IOCTL_SET_IWMMXT_STATE: {
++ __asm__ __volatile__ ("mcr p15, 0, %0, c15, c1, 0" : :"r"(ioctl_param ? 3 : 0));
++ break;
++ }
++
++#if defined(CONFIG_SL_CCCR_CHANGE)
++ case BVDD_IOCTL_GET_CCCR: {
++ *((int *)ioctl_param) = read_cccr();
++ printk(DEVICE_NAME ": Read CCCR = %x.\n", *((int *)ioctl_param));
++ break;
++ }
++ case BVDD_IOCTL_SET_CCCR: {
++ write_cccr((int)ioctl_param);
++ printk(DEVICE_NAME ": Change CCCR = %x.\n", (int)ioctl_param);
++ break;
++ }
++#endif
++#if defined(CONFIG_CHANGE_CORE_VOLT)
++ case BVDD_IOCTL_GET_VCORE: {
++ *((int *)ioctl_param) = read_vcore();
++ printk(DEVICE_NAME ": Read VCORE = %x.\n", *((int *)ioctl_param));
++ break;
++ }
++ case BVDD_IOCTL_SET_VCORE: {
++ write_vcore((int)ioctl_param);
++ printk(DEVICE_NAME ": Change VCORE = %x.\n", (int)ioctl_param);
++ break;
++ }
++#endif
++
++ case BVDD_IOCTL_DEBUG: {
++ printk(DEVICE_NAME ": BVDD_IOCTL_DEBUG\n");
++ break;
++ }
++ }
++
++ return 0;
++}
++
++/*
++ vma->vm_start, vma->vm_end ¤Ï¡¢mmap°ú¿ô¤¬¥Ú¡¼¥¸¶­³¦¤Ç¤Ê¤¯¤È¤â¥¢¥é¥¤¥ó¤µ¤ì¤¿¤â¤Î¤¬¤³¤Î´Ø¿ô¤ËÅϤ롣
++ vma->vm_pgoff ¤Ï¡¢mmap°ú¿ô¤¬¥Ú¡¼¥¸¶­³¦¤Ç¤Ê¤±¤ì¤Ð¥¨¥é¡¼¤Ë¤Ê¤ë¡£
++*/
++static int bvdd_mmap(struct file *file, struct vm_area_struct *vma)
++{
++ unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
++ struct page *map, *mapend;
++ int i, size;
++ unsigned long vma_start;
++
++ PRINT_DEBUG("bvdd_mmap(file=0x%p, vma=0x%p)\n", file, vma);
++
++/* if (vram_virt == NULL) { */
++/* printk(DEVICE_NAME ": vram is not allocated.\n"); */
++/* return -EINVAL; */
++/* } */
++
++ printk(DEVICE_NAME ": vm_start = 0x%p\n", (uint32_t)vma->vm_start);
++ printk(DEVICE_NAME ": vm_end = 0x%p\n", (uint32_t)vma->vm_end);
++ printk(DEVICE_NAME ": vm_pgoff = 0x%p\n", (uint32_t)vma->vm_pgoff);
++ printk(DEVICE_NAME ": vm_page_prot.pgprot = 0x%08u\n", (uint32_t)vma->vm_page_prot.pgprot);
++ printk(DEVICE_NAME ": PAGE_OFFSET = %x\n", (int)PAGE_OFFSET);
++ printk(DEVICE_NAME ": offset = %x\n", (int)offset);
++ printk(DEVICE_NAME ": vram_phys = 0x%p\n", vram_phys);
++
++ if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT))
++ return -EINVAL;
++
++#if 0
++ if ((vma->vm_end - vma->vm_start + offset) > vram_size) {
++ printk(DEVICE_NAME ": mmap length is too large (vram_size=%d, len=%d\n",
++ vram_size, vma->vm_end - vma->vm_start + offset);
++ return -EINVAL;
++ }
++#endif
++
++ // from fbmem.c
++ vma->vm_flags |= VM_IO;
++ vma->vm_page_prot = __pgprot(pgprot_val(vma->vm_page_prot) | L_PTE_CACHEABLE);
++
++#if 0
++ for (i = vma->vm_pgoff; i < vma->vm_pgoff + ((vma->vm_end - vma->vm_start) >> PAGE_SHIFT); ++i) {
++ if (offset2phys_map[i] == 0) {
++ printk(DEVICE_NAME ": io_remap_page_range failed.\n");
++ return -EAGAIN;
++ }
++ if (io_remap_page_range(vma->vm_start + (i << PAGE_SHIFT),
++ offset2phys_map[i],
++ PAGE_SIZE, vma->vm_page_prot)) {
++ printk(DEVICE_NAME ": io_remap_page_range failed.\n");
++ return -EAGAIN;
++ }
++ }
++#endif
++
++#if 1
++ vma_start = vma->vm_start;
++ size = vma->vm_end - vma->vm_start;
++ while (size > 0) {
++ vram_area_t *va = NULL;
++ int aoff, alen;
++
++ for (i = 0; i < MAX_VRAM_AREAS; ++i) {
++ va = &vram_areas[i];
++ if (va->offset <= offset && offset < va->offset + (va->end_phys - va->start_phys))
++ break;
++ }
++ if (i == MAX_VRAM_AREAS) {
++ return -EAGAIN;
++ }
++
++ aoff = offset - va->offset;
++ alen = va->end_phys - va->start_phys - aoff;
++ if (alen > size)
++ alen = size;
++ PRINT_DEBUG("io_remap_page_range(0x%p, 0x%p, %d)\n", vma_start, va->start_phys + aoff, alen);
++ if (io_remap_page_range(vma_start, va->start_phys + aoff, alen, vma->vm_page_prot)) {
++ printk(DEVICE_NAME ": io_remap_page_range failed.\n");
++ return -EAGAIN;
++ }
++ vma_start += alen;
++ size -= alen;
++ offset += alen;
++ }
++
++ printk(DEVICE_NAME ": successed.\n");
++ return 0;
++#endif
++}
++
++/* Module Declarations *************************** */
++
++
++/* This structure will hold the functions to be called
++ * when a process does something to the device we
++ * created. Since a pointer to this structure is kept in
++ * the devices table, it can't be local to
++ * init_module. NULL is for unimplemented functions. */
++struct file_operations fops = {
++ ioctl : bvdd_ioctl,
++ mmap : bvdd_mmap,
++ open : bvdd_open,
++ release : bvdd_release,
++};
++
++
++/* Initialize the module - Register the character device */
++int init_module()
++{
++ int i, ret;
++ unsigned long *p;
++
++ /* Register the character device (atleast try) */
++ ret = register_chrdev(BVDD_MAJOR_NUM, DEVICE_NAME, &fops);
++
++ /* Negative values signify an error */
++ if (ret < 0) {
++ printk (DEVICE_NAME ": Registering the device failed with %d\n", ret);
++ return ret;
++ }
++
++ printk (DEVICE_NAME ": Registeration is a success. \n");
++
++ /* TODO */
++/* vram_sharpsl_pxafb_phys = ((descriptor_t *)__phys_to_virt(FDADR0))->FSADR; */
++ vram_sharpsl_pxafb_phys = (dma_addr_t)0xA3E00000UL;
++
++#if 0
++ p = offset2phys_map;
++ for (i = 0; i < ((256 * 1024) >> PAGE_SHIFT); ++i) {
++ *p++ = SRAM_BASE_PHYS + (i << PAGE_SHIFT);
++ }
++ for (i = 0; i < ((PAGE_ALIGN(640 * 480 * 2)) >> PAGE_SHIFT); ++i) {
++ *p++ = vram_sharpsl_pxafb_phys + (i << PAGE_SHIFT);
++ }
++#endif
++
++ memset(vram_areas, 0, sizeof(vram_areas));
++ vram_areas[0].start_phys = vram_sharpsl_pxafb_phys;
++ vram_areas[0].start_virt = (void *)__phys_to_virt(vram_sharpsl_pxafb_phys);
++ vram_areas[0].end_phys = vram_areas[0].start_phys + PAGE_ALIGN(480 * 640 * 2);
++ vram_areas[0].offset = 0;
++ vram_areas[1].start_phys = SRAM_BASE_PHYS;
++ vram_areas[1].start_virt = (void *)SRAM_BASE;
++ vram_areas[1].end_phys = vram_areas[1].start_phys + 256 * 1024;
++ vram_areas[1].offset = PAGE_ALIGN(480 * 640 * 2);
++
++ return 0;
++}
++
++
++/* Cleanup - unregister the appropriate file from /proc */
++void cleanup_module()
++{
++ int ret;
++
++ /* Unregister the device */
++ ret = unregister_chrdev(BVDD_MAJOR_NUM, DEVICE_NAME);
++
++ /* If there's an error, report it */
++ if (ret < 0)
++ printk(DEVICE_NAME ": Error in unregister_chrdev: %d\n", ret);
++ printk (DEVICE_NAME ": Unregisteration is a success. \n");
++}
++
++#if 1
++//////////////////////////////////////////////
++#include <linux/interrupt.h>
++
++/*
++ * This allocates one page of cache-coherent memory space and returns
++ * both the virtual and a "dma" address to that space. It is not clear
++ * whether this could be called from an interrupt context or not. For
++ * now, we expressly forbid it, especially as some of the stuff we do
++ * here is not interrupt context safe.
++ *
++ * We should allow this function to be called from interrupt context.
++ * However, we call ioremap, which needs to fiddle around with various
++ * things (like the vmlist_lock, and allocating page tables). These
++ * things aren't interrupt safe (yet).
++ *
++ * Note that this does *not* zero the allocated area!
++ */
++static void *consistent_alloc(int gfp, size_t size, dma_addr_t *dma_handle)
++{
++ return l_consistent_alloc2(gfp, size, dma_handle, L_PTE_CACHEABLE);
++}
++
++static void *l_consistent_alloc2(int gfp, size_t size, dma_addr_t *dma_handle, int pte)
++{
++ struct page *page, *end, *free;
++ unsigned long order;
++ void *ret;
++
++ /* FIXME */
++ if (in_interrupt())
++ BUG();
++
++ size = PAGE_ALIGN(size);
++ order = get_order(size);
++
++ page = alloc_pages(gfp, order);
++ if (!page) {
++ printk("size:%d, order:%d\n", size, order);
++ goto no_page;
++ }
++
++ *dma_handle = page_to_bus(page);
++ //ret = __ioremap(page_to_pfn(page) << PAGE_SHIFT, size, 0);
++ ret = __ioremap(page_to_pfn(page) << PAGE_SHIFT, size, pte);
++ if (!ret) {
++ goto no_remap;
++ }
++
++#if 0 /* ioremap_does_flush_cache_all */
++ {
++ void *virt = page_address(page);
++
++ /*
++ * we need to ensure that there are no cachelines in use, or
++ * worse dirty in this area. Really, we don't need to do
++ * this since __ioremap does a flush_cache_all() anyway. --rmk
++ */
++ invalidate_dcache_range(virt, virt + size);
++ }
++#endif
++
++ /*
++ * free wasted pages. We skip the first page since we know
++ * that it will have count = 1 and won't require freeing.
++ * We also mark the pages in use as reserved so that
++ * remap_page_range works.
++ */
++ free = page + (size >> PAGE_SHIFT);
++ end = page + (1 << order);
++
++ for (; page < end; page++) {
++ set_page_count(page, 1);
++ if (page >= free)
++ __free_page(page);
++ else
++ SetPageReserved(page);
++ }
++ return ret;
++
++ no_remap:
++ __free_pages(page, order);
++ no_page:
++ return NULL;
++}
++
++/*
++ * free a page as defined by the above mapping. We expressly forbid
++ * calling this from interrupt context.
++ */
++static void consistent_free(void *vaddr, size_t size, dma_addr_t handle)
++{
++ struct page *page, *end;
++
++ if (in_interrupt())
++ BUG();
++
++ /*
++ * More messing around with the MM internals. This is
++ * sick, but then so is remap_page_range().
++ */
++ size = PAGE_ALIGN(size);
++ page = virt_to_page(bus_to_virt(handle));
++ end = page + (size >> PAGE_SHIFT);
++
++ for (; page < end; page++)
++ ClearPageReserved(page);
++
++ __iounmap(vaddr);
++}
++
++#endif
++
++/*
++
++document
++
++- Do not change resolution (VGA, QVGA) while bvdd device opened. (TODO)
++- open()¤¹¤ë¤È¤­¤Èclose()¤¹¤ë¤È¤­¤Î²òÁüÅÙ¤¬Æ±¤¸¤Ç¤Ê¤¤¤È¤¤¤±¤Þ¤»¤ó¡£
++ ¾õÂÖ¤¬°ã¤Ã¤¿¤È¤­¤ÎÆ°ºî¤Ï̤ÊݾڤǤ¹¡£
++
++
++*/
+diff -Nur c3000_pre/linux/drivers/video/bvdd.h c3000_work/linux/drivers/video/bvdd.h
+--- c3000_pre/linux/drivers/video/bvdd.h 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/drivers/video/bvdd.h 2005-02-21 23:48:01.000000000 +0900
+@@ -0,0 +1,64 @@
++/* bulverded.h - bulverde(PXA27x) display driver
++BulVerDD
++ */
++
++#ifndef CHARDEV_H
++#define CHARDEV_H
++
++#include <linux/ioctl.h>
++
++#define BVDD_VRAM_OFFSET_PXAFB (0)
++#define BVDD_VRAM_OFFSET_SRAM (480 * 640 * 2)
++#define BVDD_VRAM_OFFSET_USER (BVDD_VRAM_OFFSET_SRAM + (256 * 1024))
++
++#define BVDD_FORMAT_RGB2 1 /* 2-bits/pixel [4 entry palette] */
++#define BVDD_FORMAT_RGB4 2 /* 4-bits/pixel [16 entry palette] */
++#define BVDD_FORMAT_RGB8 3 /* 8-bits/pixel [256 entry palette] */
++#define BVDD_FORMAT_RGB16 4 /* 16-bits/pixel */
++#define BVDD_FORMAT_RGB18 5 /* 18-bits/pixel, unpacked */
++#define BVDD_FORMAT_RGB18P 6 /* 18-bits/pixel, packed */
++#define BVDD_FORMAT_RGB19 7 /* 19-bits/pixel, unpacked */
++#define BVDD_FORMAT_RGB19P 8 /* 19-bits/pixel, packed */
++#define BVDD_FORMAT_RGB24 9 /* 24-bits/pixel */
++#define BVDD_FORMAT_RGB25 10 /* 25-bits/pixel */
++#define BVDD_FORMAT_YUV444P 17 /* YCbCr4:4:4 Packed */
++#define BVDD_FORMAT_YUV444 18 /* YCbCr4:4:4 Planar */
++#define BVDD_FORMAT_YUV422 19 /* YCbCr4:2:2 Planar */
++#define BVDD_FORMAT_YUV420 20 /* YCbCr4:2:0 Planar */
++
++
++typedef struct {
++ unsigned char format;
++ unsigned short width;
++ unsigned short height;
++ unsigned short x;
++ unsigned short y;
++ unsigned long offset; /* aligned on a 16-byte boundary */
++ unsigned long u_offset; /* aligned on a 16-byte boundary */
++ unsigned long v_offset; /* aligned on a 16-byte boundary */
++} bvdd_frame_t;
++
++/* The major device number. We can't rely on dynamic
++ * registration any more, because ioctls need to know
++ * it. */
++#define BVDD_MAJOR_NUM 240
++
++/* Set the message of the device driver */
++#define BVDD_IOCTL_SETUP_VRAM _IOR(BVDD_MAJOR_NUM, 0, uint32_t)
++#define BVDD_IOCTL_SETUP_BASE_FRAME _IOR(BVDD_MAJOR_NUM, 1, bvdd_frame_t *)
++#define BVDD_IOCTL_SETUP_OVERLAY1_FRAME _IOR(BVDD_MAJOR_NUM, 2, bvdd_frame_t *)
++#define BVDD_IOCTL_SETUP_OVERLAY2_FRAME _IOR(BVDD_MAJOR_NUM, 3, bvdd_frame_t *)
++#define BVDD_IOCTL_BRANCH_OVERLAY2_FRAME _IOR(BVDD_MAJOR_NUM, 6, bvdd_frame_t *)
++#define BVDD_IOCTL_SET_IWMMXT_STATE _IOR(BVDD_MAJOR_NUM, 7, int)
++#define BVDD_IOCTL_GET_CCCR _IOR(BVDD_MAJOR_NUM, 11, int *)
++#define BVDD_IOCTL_SET_CCCR _IOR(BVDD_MAJOR_NUM, 12, int)
++#define BVDD_IOCTL_GET_VCORE _IOR(BVDD_MAJOR_NUM, 13, int *)
++#define BVDD_IOCTL_SET_VCORE _IOR(BVDD_MAJOR_NUM, 14, int)
++
++#define BVDD_IOCTL_DEBUG _IO(BVDD_MAJOR_NUM, 10)
++
++/* The name of the device file */
++#define BVDD_DEVICE_FILE_NAME "bvdd"
++
++
++#endif
+diff -Nur c3000_pre/linux/drivers/video/bvdd_p.h c3000_work/linux/drivers/video/bvdd_p.h
+--- c3000_pre/linux/drivers/video/bvdd_p.h 1970-01-01 09:00:00.000000000 +0900
++++ c3000_work/linux/drivers/video/bvdd_p.h 2005-02-21 23:41:29.000000000 +0900
+@@ -0,0 +1,284 @@
++#ifndef BVDD_P_INCLUDED
++#define BVDD_P_INCLUDED
++
++#include <asm/hardware.h>
++
++#define REG_LCCR0 __REG(0x44000000) /* LCD Controller Control register 0 */
++#define REG_LCCR1 __REG(0x44000004) /* LCD Controller Control register 1 */
++#define REG_LCCR2 __REG(0x44000008) /* LCD Controller Control register 2 */
++#define REG_LCCR3 __REG(0x4400000C) /* LCD Controller Control register 3 */
++#define REG_LCCR4 __REG(0x44000010) /* LCD Controller Control register 4 */
++#define REG_LCCR5 __REG(0x44000014) /* LCD Controller Control register 5 */
++#define REG_FBR0 __REG(0x44000020)
++#define REG_FBR1 __REG(0x44000024)
++#define REG_FBR2 __REG(0x44000028)
++#define REG_FBR3 __REG(0x4400002C)
++#define REG_FBR4 __REG(0x44000030)
++#define REG_LCSR1 __REG(0x44000034)
++#define REG_LCSR0 __REG(0x44000038)
++#define REG_LIIDR __REG(0x4400003C)
++#define REG_TRGBR __REG(0x44000040)
++#define REG_TCR __REG(0x44000044)
++#define REG_OVL1C1 __REG(0x44000050)
++#define REG_OVL1C2 __REG(0x44000060)
++#define REG_OVL2C1 __REG(0x44000070)
++#define REG_OVL2C2 __REG(0x44000080)
++#define REG_CCR __REG(0x44000090)
++#define REG_CMDCR __REG(0x44000100)
++#define REG_PRSR __REG(0x44000104)
++#define REG_FBR5 __REG(0x44000110)
++#define REG_FBR6 __REG(0x44000114)
++#define REG_FDADR0 __REG(0x44000200)
++#define REG_FSADR0 __REG(0x44000204)
++#define REG_FIDR0 __REG(0x44000208)
++#define REG_LDCMD0 __REG(0x4400020C)
++#define REG_FDADR1 __REG(0x44000210)
++#define REG_FSADR1 __REG(0x44000214)
++#define REG_FIDR1 __REG(0x44000218)
++#define REG_LDCMD1 __REG(0x4400021C)
++#define REG_FDADR2 __REG(0x44000220)
++#define REG_FSADR2 __REG(0x44000224)
++#define REG_FIDR2 __REG(0x44000228)
++#define REG_LDCMD2 __REG(0x4400022C)
++#define REG_FDADR3 __REG(0x44000230)
++#define REG_FSADR3 __REG(0x44000234)
++#define REG_FIDR3 __REG(0x44000238)
++#define REG_LDCMD3 __REG(0x4400023C)
++#define REG_FDADR4 __REG(0x44000240)
++#define REG_FSADR4 __REG(0x44000244)
++#define REG_FIDR4 __REG(0x44000248)
++#define REG_LDCMD4 __REG(0x4400024C)
++#define REG_FDADR5 __REG(0x44000250)
++#define REG_FSADR5 __REG(0x44000254)
++#define REG_FIDR5 __REG(0x44000258)
++#define REG_LDCMD5 __REG(0x4400025C)
++#define REG_FDADR6 __REG(0x44000260)
++#define REG_FSADR6 __REG(0x44000264)
++#define REG_FIDR6 __REG(0x44000268)
++#define REG_LDCMD6 __REG(0x4400026C)
++#define REG_LCDBSCNTR __REG(0x48000054)
++
++typedef struct {
++ unsigned long ENB : 1; /* LCD Controller Enable */
++ unsigned long CMS : 1; /* Color/Monochrome Select */
++ unsigned long SDS : 1; /* Single-Scan/dual-scan Display Select */
++ unsigned long LDM : 1; /* LCD Disable Done Mask */
++ unsigned long SOFM0 : 1; /* Start of Frame Mask for Channel 0 and Channel 1 (Dual Scan) */
++ unsigned long IUM : 1; /* Input FIFO Underrun Mask */
++ unsigned long EOFM0 : 1; /* End of Frame Mask for Channel 0 and for Channel 1 (Dual Scan) */
++ unsigned long PAS : 1; /* Passive/Active Display Select */
++ unsigned long reserved2 : 1;
++ unsigned long DPD : 1; /* Double-Pixel Data (DPD) Pin Mode */
++ unsigned long DIS : 1; /* LCD Disable */
++ unsigned long QDM : 1; /* LCD Quick Disable Mask */
++ unsigned long PDD : 8; /* Palette DMA Request Delay */
++ unsigned long BSM0 : 1; /* Branch Status Mask */
++ unsigned long OUM : 1; /* Output FIFO Underrun Mask */
++ unsigned long LCDT : 1; /* LCD Panel Type */
++ unsigned long RDSTM : 1; /* LCD Read Status Interrupt Mask */
++ unsigned long CMDIM : 1; /* LCD Command Interrupt Mask */
++ unsigned long OUC : 1; /* Overlay Underlay Control Bit */
++ unsigned long LDDALT : 1; /* LDD Alternate Mapping Control Bit */
++ unsigned long reserved1 : 5;
++} LCCR0_t;
++typedef union {
++ LCCR0_t f;
++ unsigned long val;
++} LCCR0_u;
++
++typedef struct {
++ unsigned long PPL :10; /* Pixels per Line for the Base Frame */
++ unsigned long HSW : 6; /* Horizontal Sync Pulse Width */
++ unsigned long ELW : 8; /* End-of-Line Pixel Clock Wait Count */
++ unsigned long BLW : 8; /* Beginning-of-Line Pixel Clock Wait Count */
++} LCCR1_t;
++typedef union {
++ LCCR1_t f;
++ unsigned long val;
++} LCCR1_u;
++
++typedef struct {
++ unsigned long LPP :10; /* Lines per Panel for the Base Frame */
++ unsigned long VSW : 6; /* Vertical Sync Pulse Width */
++ unsigned long EFW : 8; /* End-of-Frame Line Clock Wait Count */
++ unsigned long BFW : 8; /* Beginning-of-Frame Line Clock Wait Count */
++} LCCR2_t;
++typedef union {
++ LCCR2_t f;
++ unsigned long val;
++} LCCR2_u;
++
++typedef struct {
++ unsigned long PCD : 8; /* Pixel Clock Divisor */
++ unsigned long ACB : 8; /* AC Bias Pin Frequency */
++ unsigned long API : 4; /* AC Bias Pin Transitions per Interrupt */
++ unsigned long VSP : 1; /* Vertical Sync Polarity */
++ unsigned long HSP : 1; /* Horizontal Sync Polarity */
++ unsigned long PCP : 1; /* Pixel Clock Polarity */
++ unsigned long OEP : 1; /* Output Enable Polarity */
++ unsigned long BPP : 3; /* Bits per Pixel */
++ unsigned long DPC : 1; /* Double Pixel Clock Mode */
++ unsigned long reserved1 : 1;
++ unsigned long BPP3 : 1; /* Bits per Pixel */
++ unsigned long PDFOR : 2; /* Pixel Data Format */
++} LCCR3_t;
++typedef union {
++ LCCR3_t f;
++ unsigned long val;
++} LCCR3_u;
++
++typedef struct {
++ unsigned long K1 : 3; /* Multiplication Constant for Red for Half Transparency */
++ unsigned long K2 : 3; /* Multiplication Constant for Blue for Half Transparency */
++ unsigned long K3 : 3; /* Multiplication Constant for Green for Half Transparency */
++ unsigned long reserved2 : 6;
++ unsigned long PAL_FOR : 2; /* Palette Data Format */
++ unsigned long reserved1 :12;
++ unsigned long PCDDIV : 1; /* PCD Divisor Selection */
++} LCCR4_t;
++typedef union {
++ LCCR4_t f;
++ unsigned long val;
++} LCCR4_u;
++
++/* LCCR5 unused */
++
++typedef struct {
++ unsigned long PPL1 :10; /* Pixels per Line for Overlay 1 Frame */
++ unsigned long LPO1 :10; /* Number of Lines for Overlay 1 */
++ unsigned long BPP1 : 4; /* Bits per Pixel for Overlay 1 */
++ unsigned long reserved1 : 7;
++ unsigned long O1EN : 1; /* Enable bit for Overlay 1 */
++} OVL1C1_t;
++typedef union {
++ OVL1C1_t f;
++ unsigned long val;
++} OVL1C1_u;
++
++typedef struct {
++ unsigned long O1XPOS :10; /* Horizontal Position of the Upper Left-Most Pixel of Overlay 1 Window */
++ unsigned long O1YPOS :10; /* Vertical Position of the Upper Left-Most Pixel of Overlay 1 Window */
++ unsigned long reserved1 :12;
++} OVL1C2_t;
++typedef union {
++ OVL1C2_t f;
++ unsigned long val;
++} OVL1C2_u;
++
++typedef struct {
++ unsigned long PPL2 :10; /* Pixels per Line for Overlay 2 Frame */
++ unsigned long LPO2 :10; /* Number of Lines for Overlay 2 Frame */
++ unsigned long BPP2 : 4; /* Bits per Pixel for Overlay 2 */
++ unsigned long reserved1 : 7;
++ unsigned long O2EN : 1; /* Overlay 2 Enable */
++} OVL2C1_t;
++typedef union {
++ OVL2C1_t f;
++ unsigned long val;
++} OVL2C1_u;
++
++typedef struct {
++ unsigned long O2XPOS :10; /* Horizontal Position of the Upper Left Most Pixel of Overlay 2 */
++ unsigned long O2YPOS :10; /* Vertical Position of the Upper Left Most Pixel of Overlay 2 */
++ unsigned long FOR : 3; /* Format */
++ unsigned long reserved1 : 9;
++} OVL2C2_t;
++typedef union {
++ OVL2C2_t f;
++ unsigned long val;
++} OVL2C2_u;
++
++#undef BS0
++typedef struct {
++ unsigned long LDD : 1; /* LCD Disable Done Flag */
++ unsigned long SOF0 : 1; /* Start of Frame Status for Base */
++ unsigned long BER : 1; /* Bus Error Status */
++ unsigned long ABC : 1; /* AC Bias Count Status */
++ unsigned long IU0 : 1; /* Input FIFO Underrun for Channel 0 */
++ unsigned long IU1 : 1; /* Input FIFO Underrun for Channel 1 */
++ unsigned long OU : 1; /* Output FIFO Underrun */
++ unsigned long QD : 1; /* LCD Quick Disable Status */
++ unsigned long EOF0 : 1; /* End of Frame Status for Base (Channel 0) */
++ unsigned long BS0 : 1; /* Branch Status for Base */
++ unsigned long SINT : 1; /* Subsequent Interrupt Status */
++ unsigned long RD_ST : 1; /* Read Status */
++ unsigned long CMD_INT : 1; /* Command Interrupt Status */
++ unsigned long reserved2 :15;
++ unsigned long BER_CH : 3; /* Bus Error Channel Number */
++ unsigned long reserved1 : 1;
++} LCSR0_t;
++typedef union {
++ LCSR0_t f;
++ unsigned long val;
++} LCSR0_u;
++
++#undef BS1
++typedef struct {
++ unsigned long SOF1 : 1; /* Start of Frame Status for Channel 1 */
++ unsigned long SOF2 : 1; /* Start of Frame Status for Channel 2 */
++ unsigned long SOF3 : 1; /* Start of Frame Status for Channel 3 */
++ unsigned long SOF4 : 1; /* Start of Frame Status for Channel 4 */
++ unsigned long SOF5 : 1; /* Start of Frame Status for Channel 5 */
++ unsigned long SOF6 : 1; /* Start of Frame Status for Channel 6 */
++ unsigned long reserved4 : 2;
++ unsigned long EOF1 : 1; /* End of Frame Status for Channel 1 */
++ unsigned long EOF2 : 1; /* End of Frame Status for Channel 2 */
++ unsigned long EOF3 : 1; /* End of Frame Status for Channel 3 */
++ unsigned long EOF4 : 1; /* End of Frame Status for Channel 4 */
++ unsigned long EOF5 : 1; /* End of Frame Status for Channel 5 */
++ unsigned long EOF6 : 1; /* End of Frame Status for Channel 6 */
++ unsigned long reserved3 : 2;
++ unsigned long BS1 : 1; /* Branch Status for Channel 1 (Command Register) */
++ unsigned long BS2 : 1; /* Branch Status for Channel 2 (Command Register) */
++ unsigned long BS3 : 1; /* Branch Status for Channel 3 (Command Register) */
++ unsigned long BS4 : 1; /* Branch Status for Channel 4 (Command Register) */
++ unsigned long BS5 : 1; /* Branch Status for Channel 5 (Command Register) */
++ unsigned long BS6 : 1; /* Branch Status for Channel 6 (Command Register) */
++ unsigned long reserved2 : 3;
++ unsigned long IU2 : 1; /* Input FIFO Underrun for Channel 2 */
++ unsigned long IU3 : 1; /* Input FIFO Underrun for Channel 3 */
++ unsigned long IU4 : 1; /* Input FIFO Underrun for Channel 4 */
++ unsigned long IU5 : 1; /* Input FIFO Underrun for Channel 5 */
++ unsigned long IU6 : 1; /* Input FIFO Underrun for Channel 6 */
++ unsigned long reserved1 : 2;
++} LCSR1_t;
++typedef union {
++ LCSR1_t f;
++ unsigned long val;
++} LCSR1_u;
++
++/* CCR unused */
++/* CMDCR unused */
++/* TRGBR unused */
++/* TCR unused */
++
++typedef struct {
++ unsigned long LCDBS : 4; /* LCD Buffer Strength */
++ unsigned long reserved1 :28;
++} LCDBSCNTR_t;
++typedef union {
++ LCDBSCNTR_t f;
++ unsigned long val;
++} LCDBSCNTR_u;
++
++typedef struct {
++ LCCR0_u lccr0;
++ LCCR1_u lccr1;
++ LCCR2_u lccr2;
++ LCCR3_u lccr3;
++ LCCR4_u lccr4;
++ OVL1C1_u ovl1c1;
++ OVL1C2_u ovl1c2;
++ OVL2C1_u ovl2c1;
++ OVL2C2_u ovl2c2;
++ unsigned long fdadr0;
++ unsigned long fdadr1;
++ unsigned long fdadr2;
++ unsigned long fdadr3;
++ unsigned long fdadr4;
++ unsigned long fdadr5;
++ unsigned long fdadr6;
++ char cken20_intmem;
++} lcdc_state_t;
++
++#endif /* BVDD_P_INCLUDED */
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P18-detailed_battery_050309.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P18-detailed_battery_050309.patch
new file mode 100644
index 0000000000..1dd6db199b
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P18-detailed_battery_050309.patch
@@ -0,0 +1,102 @@
+diff -Nur c3000_pre/linux/arch/arm/mach-pxa/sharpsl_battery.c c3000_work/linux/arch/arm/mach-pxa/sharpsl_battery.c
+--- c3000_pre/linux/arch/arm/mach-pxa/sharpsl_battery.c 2004-11-16 15:31:06.000000000 +0900
++++ c3000_work/linux/arch/arm/mach-pxa/sharpsl_battery.c 2005-03-08 23:05:29.000000000 +0900
+@@ -337,20 +337,88 @@
+
+ #if defined(CONFIG_ARCH_PXA_SPITZ)
+ BATTERY_THRESH sharpsl_main_battery_thresh_temp_h[] = {
+- { 194, 100, SHARPSL_BATTERY_STATUS_HIGH},
+- { 188, 75, SHARPSL_BATTERY_STATUS_HIGH},
+- { 184, 50, SHARPSL_BATTERY_STATUS_HIGH},
+- { 180, 25, SHARPSL_BATTERY_STATUS_LOW},
+- { 176, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
++ { 212, 100, SHARPSL_BATTERY_STATUS_HIGH},
++ { 212, 98, SHARPSL_BATTERY_STATUS_HIGH},
++ { 211, 95, SHARPSL_BATTERY_STATUS_HIGH},
++ { 210, 93, SHARPSL_BATTERY_STATUS_HIGH},
++ { 209, 90, SHARPSL_BATTERY_STATUS_HIGH},
++ { 208, 88, SHARPSL_BATTERY_STATUS_HIGH},
++ { 207, 85, SHARPSL_BATTERY_STATUS_HIGH},
++ { 206, 83, SHARPSL_BATTERY_STATUS_HIGH},
++ { 205, 80, SHARPSL_BATTERY_STATUS_HIGH},
++ { 204, 78, SHARPSL_BATTERY_STATUS_HIGH},
++ { 203, 75, SHARPSL_BATTERY_STATUS_HIGH},
++ { 202, 73, SHARPSL_BATTERY_STATUS_HIGH},
++ { 201, 70, SHARPSL_BATTERY_STATUS_HIGH},
++ { 200, 68, SHARPSL_BATTERY_STATUS_HIGH},
++ { 199, 65, SHARPSL_BATTERY_STATUS_HIGH},
++ { 198, 63, SHARPSL_BATTERY_STATUS_HIGH},
++ { 197, 60, SHARPSL_BATTERY_STATUS_HIGH},
++ { 196, 58, SHARPSL_BATTERY_STATUS_HIGH},
++ { 195, 55, SHARPSL_BATTERY_STATUS_HIGH},
++ { 194, 53, SHARPSL_BATTERY_STATUS_HIGH},
++ { 193, 50, SHARPSL_BATTERY_STATUS_HIGH},
++ { 192, 48, SHARPSL_BATTERY_STATUS_HIGH},
++ { 192, 45, SHARPSL_BATTERY_STATUS_HIGH},
++ { 191, 43, SHARPSL_BATTERY_STATUS_HIGH},
++ { 191, 40, SHARPSL_BATTERY_STATUS_HIGH},
++ { 190, 38, SHARPSL_BATTERY_STATUS_HIGH},
++ { 190, 35, SHARPSL_BATTERY_STATUS_HIGH},
++ { 189, 33, SHARPSL_BATTERY_STATUS_HIGH},
++ { 188, 30, SHARPSL_BATTERY_STATUS_HIGH},
++ { 187, 28, SHARPSL_BATTERY_STATUS_LOW},
++ { 186, 25, SHARPSL_BATTERY_STATUS_LOW},
++ { 185, 23, SHARPSL_BATTERY_STATUS_LOW},
++ { 184, 20, SHARPSL_BATTERY_STATUS_LOW},
++ { 183, 18, SHARPSL_BATTERY_STATUS_LOW},
++ { 182, 15, SHARPSL_BATTERY_STATUS_LOW},
++ { 181, 13, SHARPSL_BATTERY_STATUS_LOW},
++ { 180, 10, SHARPSL_BATTERY_STATUS_LOW},
++ { 179, 8, SHARPSL_BATTERY_STATUS_LOW},
++ { 178, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
+ { 0, 0, SHARPSL_BATTERY_STATUS_CRITICAL},
+ };
+
+ BATTERY_THRESH sharpsl_main_battery_thresh_temp_l[] = {
+- { 194, 100, SHARPSL_BATTERY_STATUS_HIGH},
+- { 188, 75, SHARPSL_BATTERY_STATUS_HIGH},
+- { 184, 50, SHARPSL_BATTERY_STATUS_HIGH},
+- { 180, 25, SHARPSL_BATTERY_STATUS_LOW},
+- { 176, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
++ { 212, 100, SHARPSL_BATTERY_STATUS_HIGH},
++ { 212, 98, SHARPSL_BATTERY_STATUS_HIGH},
++ { 211, 95, SHARPSL_BATTERY_STATUS_HIGH},
++ { 210, 93, SHARPSL_BATTERY_STATUS_HIGH},
++ { 209, 90, SHARPSL_BATTERY_STATUS_HIGH},
++ { 208, 88, SHARPSL_BATTERY_STATUS_HIGH},
++ { 207, 85, SHARPSL_BATTERY_STATUS_HIGH},
++ { 206, 83, SHARPSL_BATTERY_STATUS_HIGH},
++ { 205, 80, SHARPSL_BATTERY_STATUS_HIGH},
++ { 204, 78, SHARPSL_BATTERY_STATUS_HIGH},
++ { 203, 75, SHARPSL_BATTERY_STATUS_HIGH},
++ { 202, 73, SHARPSL_BATTERY_STATUS_HIGH},
++ { 201, 70, SHARPSL_BATTERY_STATUS_HIGH},
++ { 200, 68, SHARPSL_BATTERY_STATUS_HIGH},
++ { 199, 65, SHARPSL_BATTERY_STATUS_HIGH},
++ { 198, 63, SHARPSL_BATTERY_STATUS_HIGH},
++ { 197, 60, SHARPSL_BATTERY_STATUS_HIGH},
++ { 196, 58, SHARPSL_BATTERY_STATUS_HIGH},
++ { 195, 55, SHARPSL_BATTERY_STATUS_HIGH},
++ { 194, 53, SHARPSL_BATTERY_STATUS_HIGH},
++ { 193, 50, SHARPSL_BATTERY_STATUS_HIGH},
++ { 192, 48, SHARPSL_BATTERY_STATUS_HIGH},
++ { 191, 45, SHARPSL_BATTERY_STATUS_HIGH},
++ { 190, 43, SHARPSL_BATTERY_STATUS_HIGH},
++ { 189, 40, SHARPSL_BATTERY_STATUS_HIGH},
++ { 188, 38, SHARPSL_BATTERY_STATUS_HIGH},
++ { 187, 35, SHARPSL_BATTERY_STATUS_HIGH},
++ { 186, 33, SHARPSL_BATTERY_STATUS_HIGH},
++ { 185, 30, SHARPSL_BATTERY_STATUS_HIGH},
++ { 184, 28, SHARPSL_BATTERY_STATUS_LOW},
++ { 183, 25, SHARPSL_BATTERY_STATUS_LOW},
++ { 182, 23, SHARPSL_BATTERY_STATUS_LOW},
++ { 181, 20, SHARPSL_BATTERY_STATUS_LOW},
++ { 180, 18, SHARPSL_BATTERY_STATUS_LOW},
++ { 179, 15, SHARPSL_BATTERY_STATUS_LOW},
++ { 178, 13, SHARPSL_BATTERY_STATUS_LOW},
++ { 177, 10, SHARPSL_BATTERY_STATUS_LOW},
++ { 176, 8, SHARPSL_BATTERY_STATUS_LOW},
++ { 175, 5, SHARPSL_BATTERY_STATUS_VERYLOW},
+ { 0, 0, SHARPSL_BATTERY_STATUS_CRITICAL},
+ };
+ #else
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/add-oz-release-string.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/add-oz-release-string.patch
new file mode 100644
index 0000000000..1674ed18ff
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/add-oz-release-string.patch
@@ -0,0 +1,24 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- linux_n1/Makefile~add-oz-release-string
++++ linux_n1/Makefile
+@@ -394,6 +394,7 @@
+ @echo \#define UTS_RELEASE \"$(KERNELRELEASE)\" > .ver
+ @echo \#define LINUX_VERSION_CODE `expr $(VERSION) \\* 65536 + $(PATCHLEVEL) \\* 256 + $(SUBLEVEL)` >> .ver
+ @echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))' >>.ver
++ @echo \#define OPENZAURUS_RELEASE \"$(OPENZAURUS_RELEASE)\" >> .ver
+ @mv -f .ver $@
+
+ comma := ,
+--- linux_n1/init/version.c~add-oz-release-string
++++ linux_n1/init/version.c
+@@ -22,5 +22,5 @@
+ };
+
+ const char *linux_banner =
+- "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
++ "Linux version " UTS_RELEASE OPENZAURUS_RELEASE " (" LINUX_COMPILE_BY "@"
+ LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/armdeffix.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/armdeffix.patch
new file mode 100644
index 0000000000..4a7a8d8f20
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/armdeffix.patch
@@ -0,0 +1,13 @@
+--- linux/include/asm-arm/processor.h.orig 2005-04-22 16:17:14.240797608 +0100
++++ linux/include/asm-arm/processor.h 2005-04-22 16:18:16.671306728 +0100
+@@ -46,6 +46,10 @@
+ #include <asm/proc/processor.h>
+ #include <asm/types.h>
+
++/*
++ * Evil hack because the Embedix 2.95 defines this which breaks things. JMD.
++ */
++#undef arm
+ union debug_insn {
+ u32 arm;
+ u16 thumb;
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/bluecard_cs.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/bluecard_cs.patch
new file mode 100644
index 0000000000..eacada33f5
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/bluecard_cs.patch
@@ -0,0 +1,11 @@
+--- linux-orig/drivers/bluetooth/bluecard_cs.c 2004-02-16 10:51:46.000000000 +0300
++++ linux/drivers/bluetooth/bluecard_cs.c 2004-02-17 03:45:31.000000000 +0300
+@@ -102,7 +102,7 @@
+
+
+ /* Default baud rate: 57600, 115200, 230400 or 460800 */
+-#define DEFAULT_BAUD_RATE 230400
++#define DEFAULT_BAUD_RATE 460800
+
+
+ /* Hardware states */
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/compile.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/compile.patch
new file mode 100644
index 0000000000..1a19b85daa
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/compile.patch
@@ -0,0 +1,14 @@
+--- linux/include/linux/jffs2_fs_i.h.old 2003-02-01 00:24:48.000000000 -0600
++++ linux/include/linux/jffs2_fs_i.h 2003-02-01 00:25:14.000000000 -0600
+@@ -48,9 +48,11 @@
+ uint32_t nr_frags;
+ #endif
+
++#ifdef KERNEL_VERSION
+ #if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,2)
+ struct inode vfs_inode;
+ #endif
++#endif
+ };
+
+ #endif /* _JFFS2_FS_I */
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/corgi-default-brightness.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/corgi-default-brightness.patch
new file mode 100644
index 0000000000..97070991c6
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/corgi-default-brightness.patch
@@ -0,0 +1,19 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- linux/drivers/video/corgi_backlight.c~corgi-default-brightness
++++ linux/drivers/video/corgi_backlight.c
+@@ -67,11 +67,7 @@
+ static int is_corgibl_pm = 0;
+
+ #define CORGI_LIGHT_SETTING 7 // range setting : 0(OFF) dim 1 2 3 4 5(MAX)
+-#if defined(CONFIG_ARCH_PXA_SPITZ)
+ #define CORGI_LIGHT_DEFAULT 1
+-#else
+-#define CORGI_LIGHT_DEFAULT 6
+-#endif
+ static int is_corgibl_blank = 0;
+ int counter_step_contrast = CORGI_LIGHT_DEFAULT;
+ static corgibl_limit = CORGI_LIGHT_SETTING - 1;
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/corgi-fbcon-logo.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/corgi-fbcon-logo.patch
new file mode 100644
index 0000000000..4d3b42445b
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/corgi-fbcon-logo.patch
@@ -0,0 +1,281 @@
+--- linux/drivers/video/w100fb.c 2004-11-04 12:44:29.000000000 -0600
++++ linux/drivers/video/w100fb.c~corgi.patch 2004-11-04 12:50:27.000000000 -0600
+@@ -982,6 +982,17 @@
+ #endif
+ #endif
+
++#ifdef CONFIG_ARCH_SHARP_SL_E // English message
++#include "corgiLogoMsg.c"
++#if defined(CONFIG_FBCON_ROTATE_R) || defined(CONFIG_FBCON_ROTATE_L)
++static int logo_msg_xoff __initdata = 400;
++static int logo_msg_yoff __initdata = 100;
++#else
++static int logo_msg_xoff __initdata = 120;
++static int logo_msg_yoff __initdata = 500;
++#endif
++#endif
++
+ #endif // CONFIG_ARCH_PXA_SHEPHERD
+
+ #endif
+--- /dev/null 2004-06-13 02:32:19.000000000 +0100
++++ linux/drivers/video/corgiLogoMsg.c 2004-11-12 19:57:23.000000000 +0000
+@@ -0,0 +1,258 @@
++/* Logo Screen 16bits RGB(565) data*/
++#ifndef __initdata
++#define __initdata
++#endif
++
++static int logo_msg_width __initdata = 30;
++static int logo_msg_height __initdata = 250;
++static unsigned short logo_msg_data[] __initdata ={
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0xad55,0x7bef,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0xc638,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x738e,0x0020,0x0000,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0x5aeb,0x0000,0x0020,0x528a,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0x18c3,0x738e,0x9cf3,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xa514,0x52aa,0x2104,0x0000,0x2104,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffbf,0x1082,0x18e3,0xef3d,0xffff,0xffff,0xffff,0xffff,0xe73c,0xbdf7,0xdebb,0xffdf,0xffff,0xffff,0xffdf,0x6b6d,0x0000,0x9cf3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xdebd,0xad17,0x0000,0x5a8c,0xef3e,0xffff,0xffff,0xffff,0xffff,0xa514,0x0000,0x7bb1,0xc5da,0xd67c,0xffbf,0xffff,0xef7d,0x0000,0x632c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xb558,0x0000,0x6b4e,0xf7bf,0xffff,0xffff,0xffff,0xffff,0x9492,0x0000,0x62ec,0xce1b,0xc5ba,0xce1b,0xffff,0xf7be,0x0000,0x630c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xc5fb,0xce1b,0xffff,0x18e3,0x2124,0xf79e,0xffff,0xffdf,0xf77e,0xef7d,0x2945,0x0000,0x10a2,0xe71c,0xdebd,0xc5ba,0xef1e,0x94b2,0x0000,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffbf,0xc5ba,0xdebd,0xffff,0x8c71,0x0000,0x2945,0x8430,0x9493,0x6b0e,0x2125,0x0000,0x94b2,0x0020,0x0841,0x526a,0x4209,0x3166,0x0000,0x2104,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffbf,0xc5ba,0xdedd,0xffff,0xffff,0x8430,0x0020,0x0000,0x0000,0x0000,0x0000,0x8410,0xffff,0xb596,0x18e3,0x0000,0x0000,0x0000,0x3186,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xcdfb,0xce1b,0xffff,0xffff,0xffff,0xe71c,0x9cd3,0x630d,0x6b4f,0xa4f6,0xffbf,0xffff,0xffff,0xffff,0xbdd8,0x9474,0xc5f9,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe6fd,0xc5ba,0xce1b,0xe6fd,0xef3e,0xe6fd,0xce1b,0xc5ba,0xe71d,0xc5da,0xc5db,0xd67c,0xde9c,0xd63c,0xc5ba,0xce1b,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe6fd,0xc5da,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xe6dd,0xffff,0xef5e,0xcdfb,0xc5ba,0xc5ba,0xc5ba,0xce3b,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffbf,0xef1e,0xe6dd,0xe71d,0xf79f,0xffff,0xffff,0xffff,0xffff,0xf79f,0xf77e,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x2124,0x2104,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8c71,0x0000,0x4a69,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0x6b6d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xf79f,0xffff,0xffff,0x4a69,0x0000,0x738e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x52aa,0x0000,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xce1b,0xce1b,0xffff,0x4208,0x632c,0x2945,0x0000,0x630c,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0x1082,0x0841,0xc618,0xffff,0xffff,0xffff,0xe6fd,0xc5ba,0xd67c,0x2104,0x5aeb,0xe73c,0x2965,0x0000,0x39c7,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf7bf,0xdebd,0xffff,0xffff,0xc618,0x0861,0x0861,0x94b2,0xffdf,0xffff,0xffff,0xd67c,0xc5ba,0x18e3,0x5aeb,0xffff,0xf79e,0x5aeb,0x0000,0x0861,0x8c71,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xd67c,0xc5ba,0xe71d,0xffff,0xffff,0xc638,0x18e3,0x0000,0x18c3,0x6b6d,0x9494,0xc5fa,0xce1b,0x18c3,0x526a,0xffff,0xffff,0xffff,0xad55,0x10a2,0x0000,0x2124,0xef7d,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffbf,0xc5fb,0xc5db,0xf77e,0xffff,0xffff,0xf79e,0x8410,0x18e3,0x0000,0x0000,0x0000,0x0861,0x0000,0x4209,0xd63c,0xffbf,0xffff,0xffff,0xef7d,0x738e,0x39c7,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf77e,0xc5db,0xc5db,0xe71d,0xffff,0xffff,0xffff,0xffff,0xc618,0x6b0e,0x4209,0x2945,0x0000,0x4a6a,0xc5ba,0xc5db,0xe6fd,0xffff,0xffff,0xffff,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0x9cb5,0x8c13,0xcdfb,0xdebd,0xef5e,0xffdf,0xffff,0xce1b,0xde9c,0xffff,0x2104,0x5aeb,0xef3e,0xc5fb,0xc5ba,0xce1b,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x528a,0xcdfb,0xc5ba,0xc5ba,0xc5ba,0xc5db,0xc5da,0xde9c,0xffff,0x2104,0x5aeb,0xffff,0xffdf,0xdebd,0xd65c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x5aeb,0xffff,0xf77e,0xe6fd,0xd67c,0xce1b,0xc5ba,0xde9c,0xffff,0x2104,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xf7be,0x9492,0x630c,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf79e,0xef5e,0xffff,0x2104,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0x2104,0x5aeb,0xffff,0xffff,0xffff,0xbdf7,0x2124,0x0000,0x0841,0xef7d,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0x2104,0x528a,0xdefb,0xdefb,0xdefb,0xffdf,0xffff,0xce1b,0xde9c,0xffff,0x2104,0x5aeb,0xffff,0xffff,0x8410,0x0020,0x0020,0x6b4d,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0x4a49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5aeb,0xffdf,0x5acb,0x0000,0x18e3,0xce59,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0xdefb,0x5aeb,0x4228,0x4228,0x4228,0x4228,0x4228,0x31a7,0x20e4,0x2104,0x2104,0x73ae,0x4a6a,0x0000,0x2946,0xbd79,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xd67c,0xf7bf,0xf7bf,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0xffff,0x6b4e,0x0000,0x3187,0xd65b,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xd65c,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xde9c,0xffff,0x9473,0x0000,0x2105,0xe73d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf7bf,0xde9c,0xd65c,0xd65c,0xd65c,0xd65c,0xd65c,0xd65c,0xce1b,0xce1b,0xce1b,0xdebd,0xd67c,0x3166,0x0861,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xce1a,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0xd69a,0xffff,0xffff,0xffff,0xef5e,0xc5ba,0xce3b,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x0000,0x4228,0xad55,0xffdf,0xd65c,0xc5fb,0xffbf,0xffff,0xffff,0x2104,0x5aeb,0xffff,0xffff,0xce59,0x2945,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0x6b6d,0x2104,0x0000,0x10a2,0x630c,0xad55,0xf79e,0xffff,0xffff,0x2104,0x5aeb,0xffff,0xffff,0xce79,0x0000,0xb5b6,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xdebb,0xdefb,0xdefb,0xdefb,0xdefb,0xb5b6,0x6b6d,0x31a6,0x0000,0x0841,0x39c7,0x6b6d,0x1082,0x528a,0xdefb,0xdefb,0xce59,0x0000,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6b6d,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0x9493,0x83d1,0x7bb1,0x7bb1,0x8c32,0x94b3,0xa514,0x8430,0x2945,0x0000,0x18e3,0x9492,0x10a2,0x39c7,0x7bb1,0x94b3,0xa514,0x2945,0x4208,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffbf,0xf7bf,0xf7bf,0xf7bf,0xf7bf,0xef5e,0xdebd,0xbdb9,0x7b90,0x3187,0x0000,0x10a2,0x734f,0xce3b,0xf7bf,0x2104,0x5acb,0xc5ba,0xe71d,0xffff,0x7bcf,0x0841,0xf79e,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0x62ee,0x0000,0x0000,0x20e4,0x7370,0xbd9a,0xc5ba,0xc5ba,0xc5ba,0x18c3,0x4209,0xc5ba,0xdebd,0xffff,0xbdd7,0x3186,0xe73c,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xef5e,0xef3e,0xef3e,0x8411,0x18e4,0xef3e,0xb577,0x526a,0x9c94,0xc5ba,0xce1b,0xe71d,0x8c33,0x9494,0xef3e,0xce3a,0xb5b7,0xb558,0xb578,0xdefb,0xdedb,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0xef1e,0xd65c,0xc5ba,0x0000,0x738e,0xffff,0xffff,0x31a7,0x39c7,0xffff,0xdefb,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x736e,0x0000,0xc5ba,0xce1b,0xe71d,0x0000,0x7bef,0xffff,0xffff,0x31a7,0x39c7,0xffff,0xdefb,0x0000,0x62ec,0x83f1,0x9cf3,0x39c7,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe71d,0xce1b,0xffff,0x7baf,0x0000,0xf77e,0xffff,0xffff,0x0000,0x73af,0xef5e,0xffff,0x4208,0x4208,0xf7bf,0xd6bb,0x0000,0x9cd3,0xf7bf,0xffff,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0x7bef,0x0000,0xc5ba,0xe6dd,0xffff,0x0000,0x6b2e,0xd65c,0xffff,0x4208,0x3187,0xc5ba,0xacf7,0x0000,0x7bb1,0xce1b,0xffff,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0x7bef,0x0000,0x62cd,0x736e,0x7bef,0x0000,0x3187,0x6b2e,0x7bef,0x2104,0x3187,0xdebc,0xce3a,0x0000,0x83f1,0xce1b,0xffff,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0x7bef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3187,0xef3e,0xdefb,0x0000,0x8c32,0xce1b,0xffff,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0x7bef,0x0000,0xc5ba,0xe6dd,0xffff,0x0000,0x6b2e,0xd65c,0xffff,0x4208,0x3187,0xef3e,0xdefb,0x0000,0x8c32,0xce1b,0xffff,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xe6dd,0x736e,0x0000,0xc5ba,0xd65c,0xe6dd,0x0000,0x630d,0xd65c,0xffff,0x4208,0x3187,0xef3e,0xdefb,0x0000,0x8c32,0xce1b,0xffff,0x5aeb,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xc5ba,0x62cd,0x0000,0xc5ba,0xc5ba,0xc5ba,0x0000,0x62cd,0xd65c,0xffff,0x4208,0x3187,0xef3e,0xdefb,0x0000,0x738f,0xb537,0xdefb,0x528a,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0x7bef,0x0000,0xc5ba,0xe6dd,0xffff,0x0000,0x6b2e,0xd65c,0xffff,0x4208,0x3187,0xef3e,0xdefb,0x0000,0x0000,0x0000,0x0000,0x0000,0x2104,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0x7bef,0x0000,0xc5ba,0xe6dd,0xffff,0xc638,0xbd98,0xd65c,0xffff,0x736e,0x5a8c,0xef3e,0xf79e,0xa514,0x8c32,0x83d1,0xa514,0xa514,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0xe71c,0xc638,0xc5ba,0xe6dd,0xffff,0xffff,0xd65c,0xd65c,0xffff,0xf7bf,0xc5ba,0xe6fd,0xf7bf,0xf7bf,0xd67c,0xce1b,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0xffff,0xffff,0xc5ba,0xe6dd,0xffff,0xffff,0xd65c,0xd65c,0xffff,0xf7bf,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xce1b,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0xffff,0xdefb,0xdedb,0xf77e,0xffbf,0xffff,0xffff,0xdebd,0xdebd,0xffff,0xffff,0xef3e,0xef3e,0xef3e,0xef3e,0xef3e,0xef5e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffbf,0xf77e,0xffff,0x5aeb,0x0000,0x39e7,0x8c71,0xbdf7,0xdefb,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cd3,0x2965,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf7bf,0xf7bf,0xffff,0xffff,0xffff,0xe73c,0xb5b6,0x9492,0x7bef,0x630c,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x5aeb,0x528a,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xd65c,0xbdd8,0x9493,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc638,0xad75,0xffff,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xe71d,0xce3b,0xc5ba,0x2945,0x1082,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0x4209,0x18c3,0xef3e,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x736e,0x0000,0xb577,0xde9c,0xde9c,0xd67c,0x9473,0x18e3,0xbdd9,0xde9c,0xde9c,0xde9c,0x4a4a,0x18c3,0xef3e,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf79f,0xef1e,0xffff,0xc618,0x0000,0x8430,0xffff,0xf7be,0x2965,0x528a,0x0000,0xdefb,0xa514,0x73af,0x7bef,0x2965,0x0861,0x738f,0xad75,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xd63c,0xcdfb,0xffff,0xffff,0x18e3,0x39e7,0xffff,0x7bcf,0x0000,0x5aeb,0x0000,0xdefb,0x4a6a,0x0000,0x0000,0x0000,0x0000,0x0000,0x8410,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xdedd,0xc5ba,0xf79e,0xffff,0x73ae,0x0000,0xbdb7,0x0020,0x4a69,0xa514,0x0000,0xdefb,0x4a6a,0x10a3,0xdefb,0x4a69,0x10a3,0xce3a,0xd69a,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xf77e,0xc5ba,0xe6fd,0xffff,0xdefb,0x0000,0x10a2,0x0000,0xce59,0x9493,0x0000,0xc5f9,0x4a2a,0x18c3,0xe6dd,0x52ab,0x18c3,0xef3e,0xdefb,0x0000,0x39c7,0x5aeb,0xdedb,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xcdfb,0xd65c,0xffff,0xe6dd,0x39c8,0x0000,0x3187,0xf7bf,0x8c32,0x0000,0xacf7,0x4209,0x18c3,0xc5ba,0x528a,0x18c3,0xef3e,0xdefb,0x0000,0x0000,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdedd,0xc5ba,0xf79e,0xc5db,0x630d,0x0000,0x62ed,0xf7bf,0x8c32,0x0000,0xd6bb,0x4a4a,0x18c3,0xf7bf,0x5acb,0x18c3,0xef3e,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf7bf,0xc5ba,0xcdfb,0xbd9a,0x1082,0x0000,0x1082,0xef7e,0x8c32,0x0000,0xdefb,0x4a6a,0x18c3,0xffff,0x5acb,0x18c3,0xd65c,0xbdb8,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xd67c,0xc5ba,0x8411,0x0000,0x6b4d,0x0000,0x8410,0x8c32,0x0000,0xdefb,0x4a6a,0x18c3,0xffff,0x5acb,0x18c3,0xc5ba,0xacf7,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe6dd,0xc5ba,0x39a7,0x1082,0xe6fd,0x4a2a,0x0861,0x736e,0x0000,0xdefb,0x4a6a,0x0020,0x4228,0x18c3,0x0020,0x39e8,0x94b2,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xc5fb,0xb558,0x0000,0x5acb,0xef3e,0xb559,0x2104,0x0020,0x0000,0xdefb,0x62ed,0x18c3,0x2104,0x0861,0x0000,0x18e4,0x8c71,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0x9452,0x0000,0x9493,0xef3e,0xc5ba,0xce59,0x0841,0x0000,0xdefb,0xde9c,0xce1b,0xffff,0x5acb,0x18c3,0xef3e,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xc5fb,0x5aeb,0x0000,0xb558,0xe6fd,0xc5ba,0xf7bf,0xa515,0x62ed,0xc5fa,0xcdfb,0xc5db,0xd65c,0x528a,0x18c3,0xef3e,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffdf,0xc5da,0xde9c,0x5aeb,0x2124,0xce1b,0xc5db,0xc5ba,0xf7bf,0xdebd,0xce1b,0xce1b,0xc5db,0xc5da,0xce1b,0x7bcf,0x4209,0xef3e,0xdefb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xef3e,0xc5ba,0xef3e,0xffff,0xef7d,0xf79f,0xc5db,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xde9c,0xce1b,0xffff,0xf7bf,0xc5ba,0xef3e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffdf,0xffff,0xffff,0xffff,0xf77e,0xe6dd,0xffdf,0xffff,0xffff,0xffff,0xde9c,0xce1b,0xffff,0xf7bf,0xc5ba,0xef3e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xde9c,0xce1b,0xffff,0xffff,0xffff,0xffff,0xef5d,0x9cd3,0x7bef,0xa534,0xef7d,0xffff,0xe6fd,0xde9c,0xffff,0xf7bf,0xc5ba,0xef3e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffdf,0xffff,0xffff,0xffff,0xad55,0x0861,0x0000,0x0000,0x0000,0x1082,0x9cf3,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x2104,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x0841,0x1082,0xa534,0xdefb,0xad75,0x2965,0x0000,0x94b2,0xffff,0xffff,0xffff,0xffff,0x7bef,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x6b4e,0x0000,0xa535,0xffdf,0xffff,0xffff,0xf79e,0x2965,0x0841,0xdefb,0xffff,0xffff,0xffff,0x7bef,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5db,0x4209,0x0000,0xbd9a,0xc5fb,0xef1e,0xffff,0xffff,0xd69a,0x0000,0x630c,0xe71d,0xce1b,0xffbf,0x7bef,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf7bf,0xc5db,0xc5fb,0x83f0,0x0000,0x4a6a,0x8c32,0x9474,0xb576,0xc638,0xc638,0x3186,0x0861,0xad56,0x9474,0xbdf8,0x630c,0x0000,0xad55,0xc638,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdedd,0xc5ba,0xef5e,0xf79e,0x4a49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffff,0xffff,0xffff,0xd6ba,0xad75,0x9cd3,0x7bb1,0x8c32,0xa514,0x8430,0x0000,0x528a,0x7bb1,0x9cf3,0x528a,0x0000,0x8c71,0xa514,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe6fd,0xc5ba,0xd67c,0xef5e,0xef3d,0xf77e,0xf77e,0xf77e,0xce3b,0xc5db,0xf77e,0xef5e,0x0000,0x5aac,0xc5ba,0xef3e,0x7baf,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xd65c,0xc5ba,0x4a2a,0x20e4,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0x18c3,0x3187,0xc5ba,0xc5ba,0x62cd,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0x41e8,0x0841,0xef3e,0xef3e,0xef3e,0xe6fd,0xc5ba,0xde9c,0xef3e,0x18e4,0x39a7,0xc5ba,0xe6fd,0x738f,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x5acb,0x0000,0xef5d,0xffff,0xffff,0xffff,0xc5ba,0xdebc,0xffff,0x1082,0x4229,0xc5ba,0xf7bf,0x7bef,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xce1b,0xffff,0x8c71,0x0000,0xb596,0xffff,0xffff,0xffff,0xce1b,0xd65c,0xdefb,0x0000,0x630d,0xc5ba,0xf7bf,0xe71c,0xc638,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xc5db,0xffff,0xd69a,0x0000,0x5acb,0xffff,0xffff,0xffff,0xce1b,0xd65c,0x8410,0x0000,0xa515,0xc5ba,0xf7bf,0xffff,0x94b2,0xc638,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffdf,0xffff,0x2965,0x0020,0xc618,0xffff,0xffff,0xc5fb,0xad57,0x0861,0x2124,0xdebc,0xc5ba,0xf7bf,0x8c71,0x0000,0x39e7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe6fd,0xc5ba,0xef5e,0xffff,0xce59,0x0020,0x0861,0x73ae,0x9cf3,0x526b,0x0020,0x0861,0xc638,0xffbf,0xf77e,0x7bef,0x0000,0x2124,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf79f,0xc5ba,0xde9c,0xffff,0xffff,0xb5b6,0x2104,0x0000,0x0000,0x0000,0x3186,0xd69a,0xffff,0xffff,0xce5a,0x18a3,0x39e7,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xce3b,0xc5da,0xf77e,0xffff,0xffff,0xffff,0xce39,0x9474,0xb578,0xffff,0xffff,0xffff,0xe6fd,0xc5ba,0xbd98,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xc5da,0xc5db,0xdedd,0xef3e,0xdebc,0xc5db,0xc5db,0xf77e,0xffff,0xffff,0xe6dd,0xc5ba,0xce1b,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5e,0xce1b,0xc5ba,0xc5ba,0xc5ba,0xd63b,0xf79f,0xd6ba,0xffff,0xffdf,0xcdfb,0xd65c,0xffdf,0xef5d,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79f,0xf77e,0xffbf,0xffff,0x9cd3,0x0020,0xad55,0xffff,0xffbf,0xffff,0xffdf,0x39e7,0x4a69,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc618,0x18c3,0x0000,0x8430,0xffff,0xffff,0xffdf,0x52aa,0x0000,0x3186,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x73ae,0x5aeb,0x5aeb,0x5aeb,0x5acb,0x5aeb,0x5aeb,0x4228,0x0000,0x0000,0x4228,0xe71c,0xffff,0xffdf,0x7bef,0x0000,0x1082,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0020,0x7bef,0xef7d,0xffff,0xbdf7,0x2104,0x0000,0x2965,0xd69a,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0xcdfb,0xc5ba,0xe6fd,0xffff,0xffff,0xffff,0xad57,0x2925,0x0000,0x1082,0xd69a,0xffff,0xf7be,0x8410,0x0841,0xdedb,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xdebd,0xde9c,0xde9c,0xde9c,0xde9c,0xde9c,0xde9c,0xd65c,0xc5ba,0xc5ba,0xd65c,0xffbf,0xffff,0xffff,0xe6dd,0x83d1,0x39a7,0xe6fd,0xffff,0xffff,0xffff,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0x3187,0x7bb1,0xe6dd,0xffdf,0x5aeb,0x2104,0xce1b,0xc5ba,0xa516,0x7bcf,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x0000,0x6b0d,0xc5ba,0xc5fb,0x5acb,0x2104,0xffff,0xe6dd,0x7bb1,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xa534,0x4228,0xffdf,0x0000,0x7bef,0xef3e,0xd65c,0x5aeb,0x2104,0xffff,0xffff,0x9cf4,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5d,0x5aeb,0x0000,0x10a3,0xd6ba,0x0000,0x6b4e,0xce1b,0xffff,0x5aeb,0x2104,0xe6dd,0xffdf,0xa514,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4208,0x0000,0x39a8,0xc61a,0xffff,0x0000,0x6b4e,0xce1b,0xffff,0x5aeb,0x18e4,0xc5ba,0xf7bf,0xa514,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef3e,0xb577,0xa514,0xc5ba,0xe6dd,0xffff,0x0000,0x6b4e,0xce1b,0xffff,0x5aeb,0x10a3,0x9474,0xbdf8,0x7bef,0x0000,0xad55,0xc638,0xef7d,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xd67c,0xacf7,0xcdfb,0xf79f,0xc5ba,0xe6dd,0xffff,0x0000,0x6b4e,0xce1b,0xffff,0x5aeb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc638,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xd65c,0x20e4,0x4a4a,0xffbf,0xffff,0xc5ba,0xe6dd,0xffff,0x0000,0x6b4e,0xce1b,0xffff,0x5aeb,0x1082,0x7bb1,0x9cf3,0x632c,0x0000,0x8c71,0xa514,0xe73c,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0x18e4,0x5aeb,0xffff,0xffff,0xc5ba,0xe6dd,0xffff,0x0000,0x6b4e,0xcdfb,0xf77e,0x5aab,0x18e3,0xc5ba,0xef3e,0x9cb3,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf7bf,0xffff,0x2104,0x4228,0xc638,0xc638,0x9474,0xad56,0xc638,0x0000,0x528b,0x9474,0x9474,0x31a7,0x18c3,0xc5ba,0xc5ba,0x7bb1,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0x4a69,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18e3,0xc5ba,0xe6fd,0x9493,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xde9c,0xffff,0xf79e,0xa534,0xa514,0xa514,0x7bb1,0x8c52,0xa514,0x0000,0x4209,0x83d1,0xa514,0x39c7,0x18e4,0xc5ba,0xf7bf,0xa514,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xce1b,0xd65c,0xf77e,0xf77e,0xf77e,0xf77e,0xf77e,0xc5ba,0xde9c,0xf77e,0x0000,0x6b2e,0xce1b,0xffff,0x5aeb,0x18e4,0xc5ba,0xf7bf,0xb5b6,0x4228,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xd67c,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xce1b,0xffff,0xdedb,0xb5b7,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef3e,0xef3e,0xef3e,0xef3e,0xef3e,0xef3e,0xc5ba,0xd67c,0xef3e,0xef3e,0xd65c,0xce1b,0xffff,0xffff,0xef3e,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc5ba,0xe6dd,0xffff,0xffff,0xde9c,0xce1b,0xffff,0xffff,0xef5e,0xa4d5,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc638,0xad75,0xef5d,0xf79e,0xffff,0xffff,0xffff,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x632c,0x0000,0x0841,0x4a69,0x9cf3,0xe73c,0xffff,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x632c,0x0000,0x18c3,0x1082,0x0000,0x0000,0x3186,0x5aeb,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xbdf7,0x7bef,0xd6bb,0xef5e,0xffff,0xf79e,0x3186,0x0020,0xce79,0xa4f4,0x41e9,0x0841,0x0000,0x0000,0x0861,0x528a,0x9492,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x6b6d,0x0000,0xbdb8,0xc5ba,0xc5db,0xd67c,0xce5a,0x0861,0x4208,0xf77e,0xc5ba,0xe6fd,0x94b2,0x0000,0x18e3,0x0000,0x0000,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4a49,0x0861,0xdebc,0xc5ba,0xcdfb,0xc5fb,0xc5ba,0x62ed,0x0000,0xa4f5,0xc5ba,0xef3e,0xc638,0x0000,0xa514,0xef5d,0xa534,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf77e,0xe6dd,0xffbf,0x2965,0x31a6,0xffff,0xce3b,0xc5da,0xf79e,0xef3e,0xce1a,0x0020,0x4209,0xc5ba,0xc5db,0xa4f5,0x0000,0x9cf4,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdebd,0xc5ba,0xf7bf,0x2104,0x4228,0xffff,0xffbf,0xc5db,0xd65c,0xffff,0xffff,0x4229,0x10a2,0xc5ba,0xcdfb,0x9474,0x0000,0x9cf3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xc5db,0xffff,0x2104,0x4228,0xffff,0xffff,0xe6dd,0xc5ba,0xf77e,0xffff,0x738e,0x0000,0xb558,0xef3e,0xc5f8,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce3b,0xce3b,0xffff,0x4208,0x18e3,0xffff,0xffff,0xffdf,0xc5db,0xde9c,0xffff,0x7bef,0x0000,0xacf7,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xd65c,0xffff,0x632c,0x0000,0xef5d,0xffff,0xffff,0xd65c,0xcdfb,0xffff,0x6b4d,0x0000,0xb559,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xd65c,0xffff,0xad55,0x0000,0x9cd3,0xffff,0xffff,0xdebd,0xc5ba,0xffdf,0x2124,0x2104,0xc5ba,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xcdfb,0xffff,0xf7be,0x10a2,0x2104,0xf79e,0xffff,0xe6dd,0xc5ba,0xa4f4,0x0000,0x6b4d,0xc5ba,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdebc,0xc5ba,0xffdf,0xffff,0x9492,0x0000,0x4228,0xdedb,0xde9c,0x83d1,0x0861,0x10a2,0xdedc,0xc5ba,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0xe71d,0xffff,0xffff,0x5aeb,0x0000,0x0000,0x0000,0x0000,0x1082,0xc618,0xf77e,0xc5ba,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xc5fb,0xce1b,0xffff,0xffff,0xffff,0xbdd7,0x630d,0x4209,0x7bd0,0xef5d,0xffff,0xf77e,0xc5ba,0xef3e,0xe71c,0x7bef,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0xd65c,0xf7bf,0xffff,0xef3e,0xc5db,0xc5fb,0xffdf,0xffff,0xffff,0xf77e,0xc5ba,0xef3e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5fb,0xf77e,0xffff,0xe71c,0x8430,0xbdd8,0xc5ba,0xef3e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef7e,0xdebd,0xde9c,0xe71d,0xffdf,0xffff,0xe73c,0x18c3,0x0000,0x0020,0xb557,0xf79f,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x6b4d,0x0000,0x73ae,0x0020,0x3186,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffbf,0xc619,0x0020,0x528a,0xffff,0x7bcf,0x0000,0x94b2,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xcdfb,0x41e9,0x0000,0xc639,0xffff,0xf7be,0x2104,0x1082,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdebc,0x9474,0x0000,0x39c8,0xce3b,0xffff,0xffff,0xb596,0x0000,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0xc5ba,0x2104,0x0020,0xc5f9,0xc5ba,0xe71d,0xffff,0xffff,0x52aa,0x0000,0xad55,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd67c,0x62cd,0x0000,0x6b6d,0xffff,0xce1b,0xc5fb,0xffbf,0xffff,0xe71c,0x1082,0x10a2,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0x9cb5,0x0000,0x18c3,0xef7d,0xffff,0xef5e,0xc5ba,0xd67c,0xffff,0xffff,0x94b2,0x0000,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc5fa,0x2105,0x0000,0xad55,0xffff,0xffff,0xffff,0xd67c,0xc5ba,0xef3e,0xffff,0xffff,0x39c7,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe6dd,0x524b,0x0000,0x52aa,0xffff,0xffff,0xffff,0xffff,0xffbf,0xc5fb,0xc5fb,0xffdf,0xffff,0xdedb,0x0841,0x0861,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79f,0x7bb1,0x0000,0x18c3,0xef5d,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0xd67c,0xffff,0xffff,0x9492,0x0000,0x4208,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce3b,0x5acd,0x0020,0xbdd7,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd65c,0xc5ba,0xef3e,0xffff,0xffff,0x5aeb,0xdedb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xdebc,0xc5ba,0xd67c,0xc618,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0xc5db,0xc5db,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0xcdfb,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0xd65c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe6dd,0xc5da,0xef7e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xde9c,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce79,0x528a,0xd69a,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x73ae,0x0000,0x0000,0x39e7,0xa534,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xce59,0x5aeb,0x0861,0x0000,0x0861,0x52aa,0xa514,0xe73c,0xffff,0xffff,0xffff,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf79e,0xd67c,0xf79f,0xffff,0xffff,0xffff,0xf79e,0xa534,0x52aa,0x0861,0x0000,0x0000,0x2104,0x39c8,0x7bd0,0x8410,0x0000,0x8c71,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdebd,0xc5ba,0xc5ba,0xd65c,0xef3e,0xffff,0xffff,0xffff,0xffff,0xf7be,0xbdd7,0x7bcf,0x39c7,0x0841,0x0000,0x0000,0x0000,0x0000,0x0000,0x18e3,0xb596,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xde9c,0xc5db,0xc5ba,0xc5db,0xd67c,0xef3e,0xffdf,0xffff,0xffff,0xffff,0xf77e,0xc5ba,0xbdf8,0x8c51,0x0000,0x4208,0x4a69,0x2945,0xb596,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cd4,0x1082,0x0841,0x528c,0xbd79,0xce1b,0xd67c,0xe6fd,0xe6dd,0xc5ba,0xe6fd,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0x0841,0x0020,0x10a2,0x1082,0xd65b,0xd65c,0xc5db,0x9474,0x62cd,0xb559,0xc5ba,0x9474,0x0000,0x94b3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x0000,0x9cf3,0xffdf,0xbdf7,0xffff,0xffff,0xffff,0x7bf0,0x0000,0x9454,0xd65c,0xa4f5,0x0000,0x94b3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5fb,0x4a29,0x0000,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xad75,0x0000,0x7bb1,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffbf,0xc5db,0xc5da,0x3187,0x10a3,0xffdf,0xffff,0xffff,0xf77e,0xe6dd,0xffdf,0xce79,0x0000,0x62ed,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0xef1e,0x4228,0x2104,0xffff,0xffff,0xffff,0xe6fd,0xc5ba,0xf77e,0xdefb,0x0000,0x62cd,0xef3e,0xc638,0x0000,0xa514,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffff,0x4228,0x18e3,0xffff,0xffff,0xffff,0xef5e,0xc5ba,0xef3e,0xdefb,0x0000,0x62cd,0xef3e,0xe71c,0x7bef,0xd69a,0xf7be,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xcdfb,0xffff,0x5acb,0x0000,0xffdf,0xffff,0xffff,0xf79e,0xc5ba,0xe6fd,0xc638,0x0000,0x7370,0xef3e,0xffff,0xe71c,0x630c,0x10a2,0x4a69,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xce1b,0xffff,0x738e,0x0000,0xd69a,0xffff,0xffff,0xf7bf,0xc5ba,0xe6dd,0xad55,0x0000,0x8c12,0xef3e,0xffff,0xf79e,0x1082,0x528a,0xb5b6,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xd65c,0xcdfb,0xffff,0xa534,0x0000,0x94b2,0xffff,0xffff,0xf7bf,0xc5ba,0xe6dd,0x9cf3,0x2104,0xbdd9,0xf79f,0xffff,0xffdf,0xf7be,0xffff,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffff,0xdedb,0x5aeb,0xbdf7,0xffff,0xffff,0xf77e,0xc5ba,0xe71d,0xffff,0xffff,0xffbf,0xde9c,0xc5fb,0xd67c,0xbdf7,0x4a69,0x0020,0xbdf7,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdebd,0xc5ba,0xf79f,0xffff,0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0xef5e,0xffff,0xffff,0xffff,0xc5fb,0xd67c,0xef5e,0xa534,0x18e3,0x73ae,0xe73c,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0xe71d,0xffff,0xffff,0xffff,0xffff,0xffff,0xef1e,0xce1b,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffbf,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf7bf,0xde9c,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0xd67c,0xc5da,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xa534,0x528a,0x4228,0x738e,0xe71c,0xffff,0xffff,0xffff,0xef3e,0xcdfb,0x0000,0x5acb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0x52aa,0x0000,0x0861,0x18c3,0x0000,0x18c3,0xdedb,0xffff,0xffff,0xffff,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9492,0x0000,0x632c,0xf7be,0xffff,0xb5b6,0x0841,0x3186,0xffff,0xffff,0xffff,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0x10a2,0x20e4,0xdebc,0xffbf,0xffff,0xffff,0x73ae,0x0000,0xbdd7,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd67c,0x9474,0x0000,0x7370,0xc5ba,0xcdfb,0xf7bf,0xffff,0xd6ba,0x0000,0x6b6d,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0x7bd0,0x0000,0xd69a,0xef5e,0xc5db,0xce3b,0xffff,0xffff,0x1082,0x4a49,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xcdfb,0xce1b,0x6b6d,0x0000,0xf79e,0xffff,0xdedd,0xc5ba,0xef7e,0xffff,0x2104,0x4228,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf77e,0xc5ba,0xe71d,0x5aeb,0x0000,0xffff,0xffff,0xf7bf,0xc5ba,0xdebd,0xffff,0x10a2,0x4a69,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0xf79f,0x5aeb,0x0000,0xffff,0xffff,0xffff,0xc5fb,0xd65c,0xe71c,0x0000,0x6b6d,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdebd,0xc5ba,0xffff,0x6b6d,0x0000,0xe73c,0xffff,0xffff,0xce1b,0xd65c,0x9cd3,0x0000,0xb596,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xdedb,0x9cd3,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffff,0x9492,0x0000,0xbdf7,0xffff,0xffff,0xc5fb,0xd67c,0x2965,0x1082,0xf7be,0xc5ba,0xde9c,0xd69a,0x0000,0x0841,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xde9c,0xc5ba,0xffff,0xbdf7,0x0000,0x8430,0xffff,0xffbf,0xc5ba,0x8c52,0x0000,0x8410,0xf7be,0x7370,0x2945,0x0000,0x0000,0x18c3,0x6b6d,0xb596,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xdebd,0xc5ba,0xffdf,0xf7be,0x4228,0x6b4d,0xffff,0xe71d,0xbd79,0x18c3,0x1082,0x6b6d,0x10a2,0x0000,0x0861,0x632d,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5ba,0xf77e,0xffff,0xffff,0xffff,0xffff,0xce3b,0x5aac,0x0000,0x0000,0x0000,0x2124,0x7370,0xbd9a,0xc5ba,0x0000,0x5acb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf77e,0xc5ba,0xe6fd,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0x9cb4,0x0000,0x2945,0x8c33,0xc5ba,0xc5ba,0xcdfb,0xdebd,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xd65c,0xdebc,0xffff,0xffff,0xffff,0xcdfb,0xc5fb,0xdebd,0x9474,0xc5ba,0xc5fb,0xdebc,0xc5ba,0xde9c,0xffff,0x0000,0x5aeb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedd,0xc5ba,0xc5ba,0xc5ba,0xce1b,0xe71d,0xffff,0xffff,0xc5ba,0xde9c,0xffff,0x7bef,0xad75,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xef5e,0xc5ba,0xce3b,0xef5e,0xffff,0xffff,0xffff,0xffff,0xc5ba,0xde9c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xc5ba,0xde9c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdedb,0xb596,0x9cf3,0x7bef,0x7bef,0x736e,0x73af,0xa514,0xad55,0xc638,0xe71c,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x632c,0x18c3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x31a6,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x9cd3,0x0020,0x0000,0x18e3,0x632c,0xa514,0xc638,0xdefb,0xdefb,0xdefb,0xd69a,0xc638,0x9cf3,0x738e,0x8c51,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xdefb,0x0020,0x18c3,0x9cd4,0xe6fd,0xe6dd,0xe6dd,0xe6dd,0xe6dd,0xef3e,0xef3e,0xf77e,0xffbf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7bf,0x8c32,0x0000,0x4a2a,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xce3b,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5da,0xa4d6,0x0000,0x0000,0x4a49,0xb576,0xef7e,0xf7bf,0xf7bf,0xf79f,0xf77e,0xef1e,0xdebd,0xe6fd,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf7bf,0xc5da,0xcdfb,0xef3e,0x94b2,0x1082,0x0000,0x0000,0x2104,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xef3e,0xc5ba,0xde9c,0xffff,0xffff,0xef7d,0x94b2,0x4208,0x7bcf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xf79f,0xc5ba,0xc5ba,0xd67c,0xef7e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xe71d,0xc5fb,0xc5ba,0xc5ba,0xce1b,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffdf,0xe71d,0xd65c,0xe6dd,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf7be,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe73c,0x8410,0x18e3,0xf79e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xf79e,0xad55,0x52aa,0x0841,0x0000,0x0841,0xc618,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe71c,0xd69a,0xbdd7,0x94b2,0x6b4d,0x39c7,0x0020,0x0000,0x0000,0x2104,0x8c51,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x4208,0x0000,0x0000,0x0000,0x0000,0x0000,0x2945,0x630d,0x9c94,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8410,0x4228,0x630c,0x8430,0xad35,0xc5fa,0xc5db,0xc5ba,0xc5db,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffbf,0xf79f,0xef7e,0xe71d,0xdebc,0xd63c,0xc5da,0xc5ba,0xc5ba,0xce1b,0xe6fd,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xd65c,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xc5ba,0xce1b,0xdebd,0xf77e,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xe6dd,0xd65c,0xde9c,0xe6fd,0xef5e,0xffdf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0x8c51,0x7bef,0x7bef,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe71d,0xe6dd,0xe6dd,0x8c71,0x7bef,0x7bef,0xef7d,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xe71d,0xe6dd,0xe6dd,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0x2104,0x0000,0x0000,0xdefb,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xce1b,0xc5ba,0xc5ba,0xf7bf,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,
++ 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff};
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/defconfig-akita b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/defconfig-akita
new file mode 100644
index 0000000000..3c6d3478b2
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/defconfig-akita
@@ -0,0 +1,1365 @@
+#
+# Automatically generated by make menuconfig: don't edit
+#
+CONFIG_ARM=y
+# CONFIG_EISA is not set
+# CONFIG_SBUS is not set
+# CONFIG_MCA is not set
+CONFIG_UID16=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+# CONFIG_GENERIC_BUST_SPINLOCK is not set
+# CONFIG_GENERIC_ISA_DMA is not set
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+# CONFIG_OBSOLETE is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+CONFIG_KMOD=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_ANAKIN is not set
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_CAMELOT is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_OMAHA is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_MX1ADS is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_RISCSTATION is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_AT91RM9200DK is not set
+# CONFIG_ARCH_KATANA is not set
+# CONFIG_ARCH_S1C38000 is not set
+# CONFIG_ARCH_DBMX1 is not set
+# CONFIG_ARCH_DBMX2 is not set
+
+#
+# Archimedes/A5000 Implementations
+#
+# CONFIG_ARCH_ARC is not set
+# CONFIG_ARCH_A5K is not set
+
+#
+# Footbridge Implementations
+#
+# CONFIG_ARCH_CATS is not set
+# CONFIG_ARCH_PERSONAL_SERVER is not set
+# CONFIG_ARCH_EBSA285_ADDIN is not set
+# CONFIG_ARCH_EBSA285_HOST is not set
+# CONFIG_ARCH_NETWINDER is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ACCELENT is not set
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_ASSABET_NEPONSET is not set
+# CONFIG_SA1100_ADSAGC is not set
+# CONFIG_SA1100_ADSBITSY is not set
+# CONFIG_SA1100_ADSBITSYPLUS is not set
+# CONFIG_SA1100_BRUTUS is not set
+# CONFIG_SA1100_CEP is not set
+# CONFIG_SA1100_CERF is not set
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+# CONFIG_SA1100_H3XXX is not set
+# CONFIG_H3600_SLEEVE is not set
+# CONFIG_SA1100_EXTENEX1 is not set
+# CONFIG_SA1100_FLEXANET is not set
+# CONFIG_SA1100_FREEBIRD is not set
+# CONFIG_SA1100_FRODO is not set
+# CONFIG_SA1100_GRAPHICSCLIENT is not set
+# CONFIG_SA1100_GRAPHICSMASTER is not set
+# CONFIG_SA1100_HACKKIT is not set
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_HUW_WEBPANEL is not set
+# CONFIG_SA1100_ITSY is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_NANOENGINE is not set
+# CONFIG_SA1100_OMNIMETER is not set
+# CONFIG_SA1100_PANGOLIN is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_PT_SYSTEM3 is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SHERMAN is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_SIMPUTER is not set
+# CONFIG_SA1100_PFS168 is not set
+# CONFIG_SA1100_VICTOR is not set
+# CONFIG_SA1100_XP860 is not set
+# CONFIG_SA1100_YOPY is not set
+# CONFIG_SA1100_USB is not set
+# CONFIG_SA1100_USB_NETLINK is not set
+# CONFIG_SA1100_USB_CHAR is not set
+# CONFIG_SA1100_SSP is not set
+
+#
+# Intel PXA250/210 Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_ARCH_PXA_CERF is not set
+# CONFIG_COTULLA_DMA is not set
+# CONFIG_SABINAL_DISCOVERY is not set
+# CONFIG_ARCH_SABINAL is not set
+# CONFIG_ARCH_PXA_POODLE is not set
+# CONFIG_POODLE_TR0 is not set
+CONFIG_ARCH_PXA_CORGI=y
+# CONFIG_CORGI_TR0 is not set
+CONFIG_ARCH_PXA_SHEPHERD=y
+CONFIG_ARCH_PXA_HUSKY=y
+CONFIG_ARCH_PXA_BOXER=y
+CONFIG_ARCH_PXA_SPITZ=y
+CONFIG_ARCH_PXA_AKITA=y
+# CONFIG_ARCH_PXA_BORZOI is not set
+# CONFIG_SPITZ_TR0 is not set
+# CONFIG_SPITZ_TR0_5 is not set
+# CONFIG_ARCH_PXA_TOSA is not set
+# CONFIG_ARCH_PXA_TOSA_SKIP is not set
+CONFIG_ARCH_SHARP_SL=y
+CONFIG_ARCH_SHARP_SL_E=y
+# CONFIG_ARCH_SHARP_SL_V is not set
+# CONFIG_ARCH_SHARP_SL_G is not set
+# CONFIG_ARCH_SHARP_SL_J is not set
+# CONFIG_ARCH_SHARP_SL_S is not set
+# CONFIG_ARCH_SHARP_SL_I is not set
+# CONFIG_PXA_USB is not set
+# CONFIG_PXA_USB_NETLINK is not set
+# CONFIG_PXA_USB_CHAR is not set
+
+#
+# CLPS711X/EP721X Implementations
+#
+# CONFIG_ARCH_AUTCPU12 is not set
+# CONFIG_ARCH_CDB89712 is not set
+# CONFIG_ARCH_CLEP7312 is not set
+# CONFIG_ARCH_EDB7211 is not set
+# CONFIG_ARCH_FORTUNET is not set
+# CONFIG_ARCH_GUIDEA07 is not set
+# CONFIG_ARCH_P720T is not set
+# CONFIG_ARCH_EP7211 is not set
+# CONFIG_ARCH_EP7212 is not set
+# CONFIG_ARCH_ACORN is not set
+
+#
+# S1C38000 Implementations
+#
+# CONFIG_S1C38000_TTE301 is not set
+
+#
+# DBMX1 Implementations
+#
+# CONFIG_DBMX1_TPM102 is not set
+
+#
+# DBMX2 Implementations
+#
+# CONFIG_ARCH_MX2ADS is not set
+# CONFIG_ARCH_APLAT is not set
+# CONFIG_FOOTBRIDGE is not set
+# CONFIG_FOOTBRIDGE_HOST is not set
+# CONFIG_FOOTBRIDGE_ADDIN is not set
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
+# CONFIG_CPU_ARM610 is not set
+# CONFIG_CPU_ARM710 is not set
+# CONFIG_CPU_ARM720T is not set
+# CONFIG_CPU_ARM920T is not set
+# CONFIG_CPU_ARM922T is not set
+# CONFIG_PLD is not set
+# CONFIG_CPU_ARM926T is not set
+# CONFIG_CPU_ARM1020 is not set
+# CONFIG_CPU_ARM1026 is not set
+# CONFIG_CPU_SA110 is not set
+# CONFIG_CPU_SA1100 is not set
+CONFIG_CPU_32v5=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_PXA27X=y
+CONFIG_SL_CCCR_CHANGE=y
+CONFIG_CHANGE_CORE_VOLT=y
+CONFIG_SL_SIGSTOP_FIX=y
+CONFIG_BATT=y
+# CONFIG_XSCALE_CACHE_ERRATA is not set
+# CONFIG_CPU_32v3 is not set
+# CONFIG_CPU_32v4 is not set
+CONFIG_ARM_FCSE=y
+# CONFIG_DISCONTIGMEM is not set
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_RTHAL is not set
+# CONFIG_PREEMPT is not set
+CONFIG_LOLAT=y
+CONFIG_LOLAT_SYSCTL=y
+
+#
+# General setup
+#
+# CONFIG_PCI is not set
+# CONFIG_ISA is not set
+# CONFIG_ISA_DMA is not set
+# CONFIG_ZBOOT_ROM is not set
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_CPU_FREQ=y
+CONFIG_HOTPLUG=y
+
+#
+# PCMCIA/CardBus support
+#
+CONFIG_PCMCIA=y
+# CONFIG_I82092 is not set
+# CONFIG_I82365 is not set
+# CONFIG_TCIC is not set
+# CONFIG_PCMCIA_CLPS6700 is not set
+# CONFIG_PCMCIA_SA1100 is not set
+CONFIG_PCMCIA_PXA=y
+# CONFIG_PCMCIA_SHARP_SL_2SLOT is not set
+
+#
+# MMC device drivers
+#
+# CONFIG_MMC is not set
+CONFIG_NET=y
+CONFIG_SYSVIPC=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_KCORE_ELF=y
+# CONFIG_KCORE_AOUT is not set
+CONFIG_BINFMT_AOUT=y
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+CONFIG_PM=y
+CONFIG_APM=y
+# CONFIG_APM_IGNORE_USER_SUSPEND is not set
+CONFIG_APM_CPU_IDLE=y
+CONFIG_APM_DISPLAY_BLANK=y
+CONFIG_APM_RTC_IS_GMT=y
+# CONFIG_ARTHUR is not set
+CONFIG_CMDLINE="<see .bb file>"
+# CONFIG_SHARPSL_BOOTLDR_PARAMS is not set
+CONFIG_ALIGNMENT_TRAP=y
+CONFIG_FREEPG_SIGNAL=y
+CONFIG_OOM_KILL_SURVIVAL=y
+CONFIG_DEVICEINFO=y
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+# CONFIG_MTD_GEN_PROBE is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_AMDSTD is not set
+# CONFIG_MTD_SHARP is not set
+# CONFIG_MTD_JEDEC is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_UCLINUX is not set
+# CONFIG_MTD_DRAGONIX is not set
+# CONFIG_MTD_NETtel is not set
+# CONFIG_MTD_NETteluC is not set
+# CONFIG_MTD_KEYTECHNOLOGY is not set
+# CONFIG_MTD_LUBBOCK is not set
+# CONFIG_MTD_NORA is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_CDB89712 is not set
+# CONFIG_MTD_MX2ADS is not set
+# CONFIG_MTD_SA1100 is not set
+# CONFIG_MTD_DC21285 is not set
+# CONFIG_MTD_IQ80310 is not set
+# CONFIG_MTD_FORTUNET is not set
+# CONFIG_MTD_PXA_CERF is not set
+# CONFIG_MTD_EPXA10DB is not set
+# CONFIG_MTD_AUTCPU12 is not set
+# CONFIG_MTD_EDB7312 is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_DISCOVERY is not set
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_KATANA is not set
+# CONFIG_MTD_TPM102 is not set
+# CONFIG_MTD_PCI is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_MTDROM_SA1100 is not set
+# CONFIG_MTD_MTDRAM_SA1100 is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_MTDRAM_SHARP_SL is not set
+# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_DOC1000 is not set
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOCPROBE is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_ECC=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+CONFIG_MTD_NAND_POST_BADBLOCK=y
+CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS=y
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_SHARP_SL=y
+
+#
+# Plug and Play configuration
+#
+# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_CISS_SCSI_TAPE is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_BLK_DEV_RAMDISK_DATA is not set
+# CONFIG_BLK_DEV_BLKMEM is not set
+# CONFIG_BLK_STATS is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_MD_RAID1 is not set
+# CONFIG_MD_RAID5 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_BLK_DEV_LVM is not set
+
+#
+# Cryptography support (CryptoAPI)
+#
+# CONFIG_CRYPTO is not set
+# CONFIG_CIPHERS is not set
+# CONFIG_DIGESTS is not set
+# CONFIG_CRYPTODEV is not set
+# CONFIG_CRYPTOLOOP is not set
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+# CONFIG_FILTER is not set
+# CONFIG_NET_NEIGH_DEBUG is not set
+# CONFIG_NET_RESTRICTED_REUSE is not set
+CONFIG_UNIX=y
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_INET_ECN is not set
+# CONFIG_SYN_COOKIES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_LIMIT=m
+CONFIG_IP_NF_MATCH_MAC=m
+CONFIG_IP_NF_MATCH_PKTTYPE=m
+CONFIG_IP_NF_MATCH_MARK=m
+CONFIG_IP_NF_MATCH_MULTIPORT=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_DSCP=m
+CONFIG_IP_NF_MATCH_AH_ESP=m
+CONFIG_IP_NF_MATCH_LENGTH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_TCPMSS=m
+CONFIG_IP_NF_MATCH_HELPER=m
+CONFIG_IP_NF_MATCH_STATE=m
+CONFIG_IP_NF_MATCH_CONNTRACK=m
+CONFIG_IP_NF_MATCH_UNCLEAN=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_MIRROR=m
+# CONFIG_IP_NF_NAT is not set
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_DSCP=m
+CONFIG_IP_NF_TARGET_MARK=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=m
+# CONFIG_IP_NF_ARPTABLES is not set
+# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
+# CONFIG_IP_NF_COMPAT_IPFWADM is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_DEBUG is not set
+CONFIG_IPV6_IM=y
+# CONFIG_IPV6_DROP_FAKE_V4MAPPED is not set
+# CONFIG_IPV6_RESTRICTED_DOUBLE_BIND is not set
+CONFIG_IPV6_6TO4_NEXTHOP=y
+CONFIG_IPV6_PRIVACY=y
+CONFIG_IPV6_ANYCAST=y
+CONFIG_IPV6_ANYCAST_GROUP=y
+# CONFIG_IPV6_ISATAP is not set
+# CONFIG_IPV6_SUBTREES is not set
+# CONFIG_IPV6_MLD6_ALL_DONE is not set
+# CONFIG_IPV6_NODEINFO is not set
+
+#
+# IPv6: Netfilter Configuration
+#
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES is not set
+CONFIG_IPV6_IPSEC_TUNNEL=y
+CONFIG_IPV6_IPV6_TUNNEL=m
+# CONFIG_KHTTPD is not set
+# CONFIG_ATM is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+
+#
+# Appletalk devices
+#
+# CONFIG_DEV_APPLETALK is not set
+# CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_LLC is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_ETHERTAP is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_ARM_AM79C961A is not set
+# CONFIG_SUNLANCE is not set
+# CONFIG_SUNBMAC is not set
+# CONFIG_SUNQE is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_LANCE is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_NET_POCKET is not set
+# CONFIG_FEC is not set
+# CONFIG_CS89x0 is not set
+# CONFIG_UCCS8900 is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_MYRI_SBUS is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=y
+# CONFIG_PPP_SYNC_TTY is not set
+# CONFIG_PPP_DEFLATE is not set
+CONFIG_PPP_BSDCOMP=y
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_STRIP is not set
+# CONFIG_WAVELAN is not set
+# CONFIG_ARLAN is not set
+# CONFIG_AIRONET4500 is not set
+# CONFIG_AIRONET4500_NONCS is not set
+# CONFIG_AIRONET4500_PROC is not set
+# CONFIG_HERMES is not set
+# CONFIG_PCMCIA_HERMES is not set
+# CONFIG_AIRO_CS is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_NET_FC is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=y
+# CONFIG_PCMCIA_AXNET is not set
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_ARCNET_COM20020_CS is not set
+# CONFIG_PCMCIA_IBMTR is not set
+# CONFIG_NET_PCMCIA_RADIO is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+CONFIG_IRDA=y
+# CONFIG_IRLAN is not set
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+CONFIG_IRTTY_SIR=y
+# CONFIG_IRPORT_SIR is not set
+# CONFIG_DONGLE is not set
+# CONFIG_USB_IRDA is not set
+# CONFIG_NSC_FIR is not set
+# CONFIG_WINBOND_FIR is not set
+# CONFIG_TOSHIBA_OLD is not set
+# CONFIG_TOSHIBA_FIR is not set
+# CONFIG_SMC_IRCC_FIR is not set
+# CONFIG_ALI_FIR is not set
+# CONFIG_VLSI_FIR is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+
+#
+# IDE, ATA and ATAPI Block devices
+#
+CONFIG_BLK_DEV_IDE=y
+# CONFIG_BLK_DEV_HD_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_IDEDISK_STROKE is not set
+# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
+# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
+# CONFIG_BLK_DEV_IDEDISK_IBM is not set
+# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
+# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
+# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
+# CONFIG_BLK_DEV_IDEDISK_WD is not set
+# CONFIG_BLK_DEV_COMMERIAL is not set
+# CONFIG_BLK_DEV_TIVO is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_DMA_NONPCI is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
+# CONFIG_BLK_DEV_ATARAID is not set
+# CONFIG_BLK_DEV_ATARAID_PDC is not set
+# CONFIG_BLK_DEV_ATARAID_HPT is not set
+
+#
+# SCSI support
+#
+CONFIG_SCSI=y
+CONFIG_BLK_DEV_SD=y
+CONFIG_SD_EXTRA_DEVS=40
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+CONFIG_BLK_DEV_SR_VENDOR=y
+CONFIG_SR_EXTRA_DEVS=2
+CONFIG_CHR_DEV_SG=y
+# CONFIG_SCSI_DEBUG_QUEUES is not set
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_SCSI_7000FASST is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AHA1542 is not set
+# CONFIG_SCSI_AHA1740 is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_AM53C974 is not set
+# CONFIG_SCSI_MEGARAID is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_EATA_DMA is not set
+# CONFIG_SCSI_EATA_PIO is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_NCR53C7xx is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PCI2000 is not set
+# CONFIG_SCSI_PCI2220I is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_SIM710 is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_U14_34F is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_SCSI_PCMCIA is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input core support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_KEYBDEV=y
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_UINPUT is not set
+
+#
+# Character devices
+#
+# CONFIG_LEDMAN is not set
+# CONFIG_DS1302 is not set
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_SERIAL=y
+# CONFIG_SERIAL_CONSOLE is not set
+CONFIG_SERIAL_SL_SERIES=y
+# CONFIG_SL_TS_PRESSURE is not set
+# CONFIG_BOOT_PRESSURE_ON is not set
+# CONFIG_SL_WRITE_TS is not set
+# CONFIG_BLUETOOTH_SL is not set
+CONFIG_KBD_DEV_FILE=y
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_ANAKIN is not set
+# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
+# CONFIG_SERIAL_AMBA is not set
+# CONFIG_SERIAL_AMBA_CONSOLE is not set
+# CONFIG_SERIAL_KATANA is not set
+# CONFIG_SERIAL_KATANA_CONSOLE is not set
+# CONFIG_SERIAL_CLPS711X is not set
+# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
+# CONFIG_SERIAL_21285 is not set
+# CONFIG_SERIAL_21285_OLD is not set
+# CONFIG_SERIAL_21285_CONSOLE is not set
+# CONFIG_SERIAL_UART00 is not set
+# CONFIG_SERIAL_UART00_CONSOLE is not set
+# CONFIG_SERIAL_SA1100 is not set
+# CONFIG_SERIAL_SA1100_CONSOLE is not set
+# CONFIG_SERIAL_OMAHA is not set
+# CONFIG_SERIAL_OMAHA_CONSOLE is not set
+# CONFIG_SERIAL_AT91US3 is not set
+# CONFIG_SERIAL_AT91US3_CONSOLE is not set
+# CONFIG_SERIAL_8250 is not set
+# CONFIG_SERIAL_8250_CONSOLE is not set
+# CONFIG_SERIAL_8250_EXTENDED is not set
+# CONFIG_SERIAL_8250_MANY_PORTS is not set
+# CONFIG_SERIAL_8250_SHARE_IRQ is not set
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_MULTIPORT is not set
+# CONFIG_SERIAL_8250_HUB6 is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+CONFIG_MOUSE=y
+CONFIG_PSMOUSE=y
+# CONFIG_82C710_MOUSE is not set
+# CONFIG_PC110_PAD is not set
+# CONFIG_MK712_MOUSE is not set
+
+#
+# Joysticks
+#
+# CONFIG_INPUT_GAMEPORT is not set
+# CONFIG_INPUT_NS558 is not set
+# CONFIG_INPUT_LIGHTNING is not set
+# CONFIG_INPUT_PCIGAME is not set
+# CONFIG_INPUT_CS461X is not set
+# CONFIG_INPUT_EMU10K1 is not set
+# CONFIG_INPUT_SERIO is not set
+# CONFIG_INPUT_SERPORT is not set
+# CONFIG_INPUT_ANALOG is not set
+# CONFIG_INPUT_A3D is not set
+# CONFIG_INPUT_ADI is not set
+# CONFIG_INPUT_COBRA is not set
+# CONFIG_INPUT_GF2K is not set
+# CONFIG_INPUT_GRIP is not set
+# CONFIG_INPUT_INTERACT is not set
+# CONFIG_INPUT_TMDC is not set
+# CONFIG_INPUT_SIDEWINDER is not set
+# CONFIG_INPUT_IFORCE_USB is not set
+# CONFIG_INPUT_IFORCE_232 is not set
+# CONFIG_INPUT_WARRIOR is not set
+# CONFIG_INPUT_MAGELLAN is not set
+# CONFIG_INPUT_SPACEORB is not set
+# CONFIG_INPUT_SPACEBALL is not set
+# CONFIG_INPUT_STINGER is not set
+# CONFIG_INPUT_DB9 is not set
+# CONFIG_INPUT_GAMECON is not set
+# CONFIG_INPUT_TURBOGRAFX is not set
+# CONFIG_QIC02_TAPE is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_AMD_PM768 is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_PXA_RTC is not set
+CONFIG_COTULLA_RTC=y
+CONFIG_ADS7846_TS=y
+# CONFIG_TOSA_TS is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+CONFIG_PCMCIA_SERIAL_CS=y
+CONFIG_PCMCIA_CHRDEV=y
+# CONFIG_SYNCLINK_CS is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# File systems
+#
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FS_SYNC=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_ADFS_FS_RW is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BEFS_DEBUG is not set
+# CONFIG_BFS_FS is not set
+CONFIG_EXT3_FS=y
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+# CONFIG_UMSDOS_FS is not set
+CONFIG_VFAT_FS=y
+# CONFIG_VFAT_SHORTCUT_SYMLINK is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_NAND=y
+CONFIG_JFFS2_LARGE_PARTITION=y
+CONFIG_JFFS2_PROC_FS=y
+CONFIG_JFFS2_NODEMERGE=y
+CONFIG_JFFS2_DYNFRAGTREE=y
+CONFIG_JFFS2_RESERVED_BLOCKS_BAD=20
+CONFIG_CRAMFS=y
+CONFIG_TMPFS=y
+CONFIG_RAMFS=y
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+# CONFIG_JFS_FS is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_MINIX_FS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+# CONFIG_HPFS_FS is not set
+CONFIG_PROC_FS=y
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+CONFIG_DEVPTS_FS=y
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_EXT2_FS=y
+# CONFIG_SYSV_FS is not set
+# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
+
+#
+# Network File Systems
+#
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_ROOT_NFS is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_TCP=y
+CONFIG_SUNRPC=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_SMB_FS=y
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+CONFIG_ZISOFS_FS=y
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+CONFIG_SMB_NLS=y
+CONFIG_NLS=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+CONFIG_NLS_CODEPAGE_932=y
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Console drivers
+#
+CONFIG_PC_KEYMAP=y
+# CONFIG_VGA_CONSOLE is not set
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_UNICON is not set
+# CONFIG_FB_ACORN is not set
+# CONFIG_FB_ANAKIN is not set
+# CONFIG_FB_CLPS711X is not set
+# CONFIG_FB_SA1100 is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_COTULLA is not set
+# CONFIG_FB_POODLE is not set
+# CONFIG_FB_CORGI is not set
+# CONFIG_FB_TOSA is not set
+CONFIG_FB_SHARPSL_PXA=y
+CONFIG_SHARPSL_PXA_CONSISTENT_ALLOC=y
+CONFIG_FB_SHARPSL_PXA_BVDD=y
+# CONFIG_SHARP_LOGO_SCREEN is not set
+# CONFIG_FB_KATANA is not set
+# CONFIG_FB_DBMX1 is not set
+# CONFIG_FB_DBMX21 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_FBCON_ADVANCED=y
+# CONFIG_FBCON_MFB is not set
+# CONFIG_FBCON_CFB2 is not set
+# CONFIG_FBCON_CFB4 is not set
+# CONFIG_FBCON_CFB8 is not set
+CONFIG_FBCON_CFB16=y
+# CONFIG_FBCON_CFB24 is not set
+# CONFIG_FBCON_CFB32 is not set
+# CONFIG_FBCON_AFB is not set
+# CONFIG_FBCON_ILBM is not set
+# CONFIG_FBCON_IPLAN2P2 is not set
+# CONFIG_FBCON_IPLAN2P4 is not set
+# CONFIG_FBCON_IPLAN2P8 is not set
+# CONFIG_FBCON_MAC is not set
+# CONFIG_FBCON_VGA_PLANES is not set
+# CONFIG_FBCON_VGA is not set
+# CONFIG_FBCON_HGA is not set
+CONFIG_FBCON_ROTATE_R=y
+# CONFIG_FBCON_ROTATE_L is not set
+# CONFIG_FBCON_LOGO_CENTER is not set
+# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
+CONFIG_FBCON_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+# CONFIG_SOUND_ALI5455 is not set
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_MIDI_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_FORTE is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+# CONFIG_MIDI_VIA82CXXX is not set
+# CONFIG_SOUND_OSS is not set
+# CONFIG_SOUND_VIDC is not set
+# CONFIG_SOUND_WAVEARTIST is not set
+# CONFIG_SOUND_PXA_AC97 is not set
+# CONFIG_SOUND_POODLE is not set
+# CONFIG_SOUND_CORGI is not set
+# CONFIG_SOUND_TOSA is not set
+# CONFIG_BUZZER_TOSA is not set
+CONFIG_SOUND_SPITZ=y
+# CONFIG_SOUND_TVMIXER is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+# CONFIG_MCP_SA1100 is not set
+# CONFIG_MCP_UCB1200 is not set
+# CONFIG_MCP_UCB1200_AUDIO is not set
+# CONFIG_MCP_UCB1200_TS is not set
+# CONFIG_MCP_UCB1400_TS is not set
+
+#
+# USB support
+#
+CONFIG_USB=m
+CONFIG_USB_DEBUG=y
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_LONG_TIMEOUT is not set
+# CONFIG_USB_EHCI_HCD is not set
+# CONFIG_USB_UHCI is not set
+# CONFIG_USB_UHCI_ALT is not set
+# CONFIG_USB_OHCI is not set
+# CONFIG_USB_OHCI_SH7727 is not set
+# CONFIG_USB_OHCI_SH is not set
+# CONFIG_USB_OHCI_VOYAGERGX is not set
+# CONFIG_USB_OHCI_TC6393 is not set
+# CONFIG_USB_USE_INTERNAL_MEMORY is not set
+CONFIG_USB_OHCI_PXA27X=m
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_MIDI is not set
+CONFIG_USB_STORAGE=m
+CONFIG_USB_STORAGE_DEBUG=y
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_ISD200=y
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_HP8200e=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_ACM=m
+# CONFIG_USB_PRINTER is not set
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_DC2XX is not set
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_SCANNER is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_CDCETHER is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_TIGL is not set
+# CONFIG_USB_BRLVGER is not set
+# CONFIG_USB_LCD is not set
+
+#
+# USB Device Support
+#
+CONFIG_USBD=m
+CONFIG_USBD_VENDORID=04DD
+CONFIG_USBD_PRODUCTID=8007
+CONFIG_USBD_PRODUCT_NAME="SL-AV200"
+CONFIG_USBD_MANUFACTURER="Sharp"
+# CONFIG_USBD_USE_SERIAL_NUMBER is not set
+CONFIG_USBD_SELFPOWERED=y
+CONFIG_USBD_MONITOR=m
+CONFIG_USBD_PROCFS=y
+
+#
+# Network Function
+#
+CONFIG_USBD_NET=m
+CONFIG_USBD_NET_VENDORID=04DD
+CONFIG_USBD_NET_PRODUCTID=8007
+CONFIG_USBD_NET_IFNAME="usbd"
+CONFIG_USBD_NET_OUT_ENDPOINT=2
+CONFIG_USBD_NET_OUT_PKTSIZE=64
+CONFIG_USBD_NET_IN_ENDPOINT=1
+CONFIG_USBD_NET_IN_PKTSIZE=64
+CONFIG_USBD_NET_INT_ENDPOINT=5
+CONFIG_USBD_NET_INT_PKTSIZE=8
+# CONFIG_USBD_NET_ALWAYSUP is not set
+# CONFIG_USBD_NET_SAFE is not set
+CONFIG_USBD_NET_MDLM=y
+# CONFIG_USBD_NET_CDC is not set
+CONFIG_USBD_NET_REMOTE_MACADDR=""
+CONFIG_USBD_NET_REMOTE_OUI=400002
+CONFIG_USBD_MAC_AS_SERIAL_NUMBER=y
+CONFIG_USBD_NET_LOCAL_MACADDR="400001000001"
+CONFIG_USBD_NET_LOCAL_OUI=400001
+
+#
+# Serial Function
+#
+# CONFIG_USBD_SERIAL is not set
+
+#
+# Mass Storage Function
+#
+CONFIG_USBD_STORAGE=m
+CONFIG_USBD_STORAGE_VENDORID=04DD
+CONFIG_USBD_STORAGE_PRODUCTID=9050
+CONFIG_USBD_STORAGE_OUT_ENDPOINT=2
+CONFIG_USBD_STORAGE_OUT_PKTSIZE=64
+CONFIG_USBD_STORAGE_IN_ENDPOINT=1
+CONFIG_USBD_STORAGE_IN_PKTSIZE=64
+CONFIG_USBD_STORAGE_INT_ENDPOINT=5
+CONFIG_USBD_STORAGE_INT_PKTSIZE=8
+CONFIG_USBD_STORAGE_DEF_DEVICE_NAME="/dev/hda1"
+
+#
+# USB Device Bus Interface Support
+#
+CONFIG_USBD_PXA27X_BUS=m
+# CONFIG_USBD_GENERIC_BUS is not set
+
+#
+# Bluetooth support
+#
+CONFIG_BLUEZ=m
+CONFIG_BLUEZ_L2CAP=m
+CONFIG_BLUEZ_SCO=m
+CONFIG_BLUEZ_RFCOMM=m
+CONFIG_BLUEZ_RFCOMM_TTY=y
+CONFIG_BLUEZ_BNEP=m
+CONFIG_BLUEZ_BNEP_MC_FILTER=y
+CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
+CONFIG_BLUEZ_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BLUEZ_HCIUSB=m
+CONFIG_BLUEZ_HCIUSB_SCO=y
+CONFIG_BLUEZ_HCIUART=m
+CONFIG_BLUEZ_HCIUART_H4=y
+CONFIG_BLUEZ_HCIUART_BCSP=y
+# CONFIG_BLUEZ_HCIUART_BCSP_TXCRC is not set
+CONFIG_BLUEZ_HCIBFUSB=m
+CONFIG_BLUEZ_HCIDTL1=m
+CONFIG_BLUEZ_HCIBT3C=m
+CONFIG_BLUEZ_HCIBLUECARD=m
+CONFIG_BLUEZ_HCIBTUART=m
+CONFIG_BLUEZ_HCIVHCI=m
+
+#
+# Kernel hacking
+#
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_COREDUMP_SIGNAL is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_INFO_YDC is not set
+# CONFIG_NO_PGT_CACHE is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_KGDB is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_WAITQ is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_LL is not set
+# CONFIG_DEBUG_DC21285_PORT is not set
+# CONFIG_DEBUG_CLPS711X_UART2 is not set
+
+#
+# Library routines
+#
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+
+#
+# Cryptography support (CryptoAPI)
+#
+# CONFIG_CRYPTO is not set
+# CONFIG_CIPHERS is not set
+# CONFIG_DIGESTS is not set
+# CONFIG_CRYPTODEV is not set
+# CONFIG_CRYPTOLOOP is not set
+# CONFIG_FW_LOADER is not set
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/defconfig-borzoi b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/defconfig-borzoi
new file mode 100644
index 0000000000..d0b1ffa1bf
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/defconfig-borzoi
@@ -0,0 +1,1364 @@
+#
+# Automatically generated by make menuconfig: don't edit
+#
+CONFIG_ARM=y
+# CONFIG_EISA is not set
+# CONFIG_SBUS is not set
+# CONFIG_MCA is not set
+CONFIG_UID16=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+# CONFIG_GENERIC_BUST_SPINLOCK is not set
+# CONFIG_GENERIC_ISA_DMA is not set
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+# CONFIG_OBSOLETE is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+CONFIG_KMOD=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_ANAKIN is not set
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_CAMELOT is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_OMAHA is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_MX1ADS is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_RISCSTATION is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_AT91RM9200DK is not set
+# CONFIG_ARCH_KATANA is not set
+# CONFIG_ARCH_S1C38000 is not set
+# CONFIG_ARCH_DBMX1 is not set
+# CONFIG_ARCH_DBMX2 is not set
+
+#
+# Archimedes/A5000 Implementations
+#
+# CONFIG_ARCH_ARC is not set
+# CONFIG_ARCH_A5K is not set
+
+#
+# Footbridge Implementations
+#
+# CONFIG_ARCH_CATS is not set
+# CONFIG_ARCH_PERSONAL_SERVER is not set
+# CONFIG_ARCH_EBSA285_ADDIN is not set
+# CONFIG_ARCH_EBSA285_HOST is not set
+# CONFIG_ARCH_NETWINDER is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ACCELENT is not set
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_ASSABET_NEPONSET is not set
+# CONFIG_SA1100_ADSAGC is not set
+# CONFIG_SA1100_ADSBITSY is not set
+# CONFIG_SA1100_ADSBITSYPLUS is not set
+# CONFIG_SA1100_BRUTUS is not set
+# CONFIG_SA1100_CEP is not set
+# CONFIG_SA1100_CERF is not set
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+# CONFIG_SA1100_H3XXX is not set
+# CONFIG_H3600_SLEEVE is not set
+# CONFIG_SA1100_EXTENEX1 is not set
+# CONFIG_SA1100_FLEXANET is not set
+# CONFIG_SA1100_FREEBIRD is not set
+# CONFIG_SA1100_FRODO is not set
+# CONFIG_SA1100_GRAPHICSCLIENT is not set
+# CONFIG_SA1100_GRAPHICSMASTER is not set
+# CONFIG_SA1100_HACKKIT is not set
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_HUW_WEBPANEL is not set
+# CONFIG_SA1100_ITSY is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_NANOENGINE is not set
+# CONFIG_SA1100_OMNIMETER is not set
+# CONFIG_SA1100_PANGOLIN is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_PT_SYSTEM3 is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SHERMAN is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_SIMPUTER is not set
+# CONFIG_SA1100_PFS168 is not set
+# CONFIG_SA1100_VICTOR is not set
+# CONFIG_SA1100_XP860 is not set
+# CONFIG_SA1100_YOPY is not set
+# CONFIG_SA1100_USB is not set
+# CONFIG_SA1100_USB_NETLINK is not set
+# CONFIG_SA1100_USB_CHAR is not set
+# CONFIG_SA1100_SSP is not set
+
+#
+# Intel PXA250/210 Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_ARCH_PXA_CERF is not set
+# CONFIG_COTULLA_DMA is not set
+# CONFIG_SABINAL_DISCOVERY is not set
+# CONFIG_ARCH_SABINAL is not set
+# CONFIG_ARCH_PXA_POODLE is not set
+# CONFIG_POODLE_TR0 is not set
+CONFIG_ARCH_PXA_CORGI=y
+# CONFIG_CORGI_TR0 is not set
+CONFIG_ARCH_PXA_SHEPHERD=y
+CONFIG_ARCH_PXA_HUSKY=y
+CONFIG_ARCH_PXA_BOXER=y
+CONFIG_ARCH_PXA_SPITZ=y
+CONFIG_ARCH_PXA_BORZOI=y
+# CONFIG_SPITZ_TR0 is not set
+# CONFIG_SPITZ_TR0_5 is not set
+# CONFIG_ARCH_PXA_TOSA is not set
+# CONFIG_ARCH_PXA_TOSA_SKIP is not set
+CONFIG_ARCH_SHARP_SL=y
+CONFIG_ARCH_SHARP_SL_E=y
+# CONFIG_ARCH_SHARP_SL_V is not set
+# CONFIG_ARCH_SHARP_SL_G is not set
+# CONFIG_ARCH_SHARP_SL_J is not set
+# CONFIG_ARCH_SHARP_SL_S is not set
+# CONFIG_ARCH_SHARP_SL_I is not set
+# CONFIG_PXA_USB is not set
+# CONFIG_PXA_USB_NETLINK is not set
+# CONFIG_PXA_USB_CHAR is not set
+
+#
+# CLPS711X/EP721X Implementations
+#
+# CONFIG_ARCH_AUTCPU12 is not set
+# CONFIG_ARCH_CDB89712 is not set
+# CONFIG_ARCH_CLEP7312 is not set
+# CONFIG_ARCH_EDB7211 is not set
+# CONFIG_ARCH_FORTUNET is not set
+# CONFIG_ARCH_GUIDEA07 is not set
+# CONFIG_ARCH_P720T is not set
+# CONFIG_ARCH_EP7211 is not set
+# CONFIG_ARCH_EP7212 is not set
+# CONFIG_ARCH_ACORN is not set
+
+#
+# S1C38000 Implementations
+#
+# CONFIG_S1C38000_TTE301 is not set
+
+#
+# DBMX1 Implementations
+#
+# CONFIG_DBMX1_TPM102 is not set
+
+#
+# DBMX2 Implementations
+#
+# CONFIG_ARCH_MX2ADS is not set
+# CONFIG_ARCH_APLAT is not set
+# CONFIG_FOOTBRIDGE is not set
+# CONFIG_FOOTBRIDGE_HOST is not set
+# CONFIG_FOOTBRIDGE_ADDIN is not set
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
+# CONFIG_CPU_ARM610 is not set
+# CONFIG_CPU_ARM710 is not set
+# CONFIG_CPU_ARM720T is not set
+# CONFIG_CPU_ARM920T is not set
+# CONFIG_CPU_ARM922T is not set
+# CONFIG_PLD is not set
+# CONFIG_CPU_ARM926T is not set
+# CONFIG_CPU_ARM1020 is not set
+# CONFIG_CPU_ARM1026 is not set
+# CONFIG_CPU_SA110 is not set
+# CONFIG_CPU_SA1100 is not set
+CONFIG_CPU_32v5=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_PXA27X=y
+CONFIG_SL_CCCR_CHANGE=y
+CONFIG_CHANGE_CORE_VOLT=y
+CONFIG_SL_SIGSTOP_FIX=y
+CONFIG_BATT=y
+# CONFIG_XSCALE_CACHE_ERRATA is not set
+# CONFIG_CPU_32v3 is not set
+# CONFIG_CPU_32v4 is not set
+CONFIG_ARM_FCSE=y
+# CONFIG_DISCONTIGMEM is not set
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_RTHAL is not set
+# CONFIG_PREEMPT is not set
+CONFIG_LOLAT=y
+CONFIG_LOLAT_SYSCTL=y
+
+#
+# General setup
+#
+# CONFIG_PCI is not set
+# CONFIG_ISA is not set
+# CONFIG_ISA_DMA is not set
+# CONFIG_ZBOOT_ROM is not set
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_CPU_FREQ=y
+CONFIG_HOTPLUG=y
+
+#
+# PCMCIA/CardBus support
+#
+CONFIG_PCMCIA=y
+# CONFIG_I82092 is not set
+# CONFIG_I82365 is not set
+# CONFIG_TCIC is not set
+# CONFIG_PCMCIA_CLPS6700 is not set
+# CONFIG_PCMCIA_SA1100 is not set
+CONFIG_PCMCIA_PXA=y
+CONFIG_PCMCIA_SHARP_SL_2SLOT=y
+
+#
+# MMC device drivers
+#
+# CONFIG_MMC is not set
+CONFIG_NET=y
+CONFIG_SYSVIPC=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_KCORE_ELF=y
+# CONFIG_KCORE_AOUT is not set
+CONFIG_BINFMT_AOUT=y
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+CONFIG_PM=y
+CONFIG_APM=y
+# CONFIG_APM_IGNORE_USER_SUSPEND is not set
+CONFIG_APM_CPU_IDLE=y
+CONFIG_APM_DISPLAY_BLANK=y
+CONFIG_APM_RTC_IS_GMT=y
+# CONFIG_ARTHUR is not set
+CONFIG_CMDLINE="<see .bb file>"
+# CONFIG_SHARPSL_BOOTLDR_PARAMS is not set
+CONFIG_ALIGNMENT_TRAP=y
+CONFIG_FREEPG_SIGNAL=y
+CONFIG_OOM_KILL_SURVIVAL=y
+CONFIG_DEVICEINFO=y
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+# CONFIG_MTD_GEN_PROBE is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_AMDSTD is not set
+# CONFIG_MTD_SHARP is not set
+# CONFIG_MTD_JEDEC is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_UCLINUX is not set
+# CONFIG_MTD_DRAGONIX is not set
+# CONFIG_MTD_NETtel is not set
+# CONFIG_MTD_NETteluC is not set
+# CONFIG_MTD_KEYTECHNOLOGY is not set
+# CONFIG_MTD_LUBBOCK is not set
+# CONFIG_MTD_NORA is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_CDB89712 is not set
+# CONFIG_MTD_MX2ADS is not set
+# CONFIG_MTD_SA1100 is not set
+# CONFIG_MTD_DC21285 is not set
+# CONFIG_MTD_IQ80310 is not set
+# CONFIG_MTD_FORTUNET is not set
+# CONFIG_MTD_PXA_CERF is not set
+# CONFIG_MTD_EPXA10DB is not set
+# CONFIG_MTD_AUTCPU12 is not set
+# CONFIG_MTD_EDB7312 is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_DISCOVERY is not set
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_KATANA is not set
+# CONFIG_MTD_TPM102 is not set
+# CONFIG_MTD_PCI is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_MTDROM_SA1100 is not set
+# CONFIG_MTD_MTDRAM_SA1100 is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_MTDRAM_SHARP_SL is not set
+# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_DOC1000 is not set
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOCPROBE is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_ECC=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+CONFIG_MTD_NAND_POST_BADBLOCK=y
+CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS=y
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_SHARP_SL=y
+
+#
+# Plug and Play configuration
+#
+# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_CISS_SCSI_TAPE is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_BLK_DEV_RAMDISK_DATA is not set
+# CONFIG_BLK_DEV_BLKMEM is not set
+# CONFIG_BLK_STATS is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_MD_RAID1 is not set
+# CONFIG_MD_RAID5 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_BLK_DEV_LVM is not set
+
+#
+# Cryptography support (CryptoAPI)
+#
+# CONFIG_CRYPTO is not set
+# CONFIG_CIPHERS is not set
+# CONFIG_DIGESTS is not set
+# CONFIG_CRYPTODEV is not set
+# CONFIG_CRYPTOLOOP is not set
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+# CONFIG_FILTER is not set
+# CONFIG_NET_NEIGH_DEBUG is not set
+# CONFIG_NET_RESTRICTED_REUSE is not set
+CONFIG_UNIX=y
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_INET_ECN is not set
+# CONFIG_SYN_COOKIES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_LIMIT=m
+CONFIG_IP_NF_MATCH_MAC=m
+CONFIG_IP_NF_MATCH_PKTTYPE=m
+CONFIG_IP_NF_MATCH_MARK=m
+CONFIG_IP_NF_MATCH_MULTIPORT=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_DSCP=m
+CONFIG_IP_NF_MATCH_AH_ESP=m
+CONFIG_IP_NF_MATCH_LENGTH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_TCPMSS=m
+CONFIG_IP_NF_MATCH_HELPER=m
+CONFIG_IP_NF_MATCH_STATE=m
+CONFIG_IP_NF_MATCH_CONNTRACK=m
+CONFIG_IP_NF_MATCH_UNCLEAN=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_MIRROR=m
+# CONFIG_IP_NF_NAT is not set
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_DSCP=m
+CONFIG_IP_NF_TARGET_MARK=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=m
+# CONFIG_IP_NF_ARPTABLES is not set
+# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
+# CONFIG_IP_NF_COMPAT_IPFWADM is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_DEBUG is not set
+CONFIG_IPV6_IM=y
+# CONFIG_IPV6_DROP_FAKE_V4MAPPED is not set
+# CONFIG_IPV6_RESTRICTED_DOUBLE_BIND is not set
+CONFIG_IPV6_6TO4_NEXTHOP=y
+CONFIG_IPV6_PRIVACY=y
+CONFIG_IPV6_ANYCAST=y
+CONFIG_IPV6_ANYCAST_GROUP=y
+# CONFIG_IPV6_ISATAP is not set
+# CONFIG_IPV6_SUBTREES is not set
+# CONFIG_IPV6_MLD6_ALL_DONE is not set
+# CONFIG_IPV6_NODEINFO is not set
+
+#
+# IPv6: Netfilter Configuration
+#
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES is not set
+CONFIG_IPV6_IPSEC_TUNNEL=y
+CONFIG_IPV6_IPV6_TUNNEL=m
+# CONFIG_KHTTPD is not set
+# CONFIG_ATM is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+
+#
+# Appletalk devices
+#
+# CONFIG_DEV_APPLETALK is not set
+# CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_LLC is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_ETHERTAP is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_ARM_AM79C961A is not set
+# CONFIG_SUNLANCE is not set
+# CONFIG_SUNBMAC is not set
+# CONFIG_SUNQE is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_LANCE is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_NET_POCKET is not set
+# CONFIG_FEC is not set
+# CONFIG_CS89x0 is not set
+# CONFIG_UCCS8900 is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_MYRI_SBUS is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=y
+# CONFIG_PPP_SYNC_TTY is not set
+# CONFIG_PPP_DEFLATE is not set
+CONFIG_PPP_BSDCOMP=y
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_STRIP is not set
+# CONFIG_WAVELAN is not set
+# CONFIG_ARLAN is not set
+# CONFIG_AIRONET4500 is not set
+# CONFIG_AIRONET4500_NONCS is not set
+# CONFIG_AIRONET4500_PROC is not set
+# CONFIG_HERMES is not set
+# CONFIG_PCMCIA_HERMES is not set
+# CONFIG_AIRO_CS is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_NET_FC is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=y
+# CONFIG_PCMCIA_AXNET is not set
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_ARCNET_COM20020_CS is not set
+# CONFIG_PCMCIA_IBMTR is not set
+# CONFIG_NET_PCMCIA_RADIO is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+CONFIG_IRDA=y
+# CONFIG_IRLAN is not set
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+CONFIG_IRTTY_SIR=y
+# CONFIG_IRPORT_SIR is not set
+# CONFIG_DONGLE is not set
+# CONFIG_USB_IRDA is not set
+# CONFIG_NSC_FIR is not set
+# CONFIG_WINBOND_FIR is not set
+# CONFIG_TOSHIBA_OLD is not set
+# CONFIG_TOSHIBA_FIR is not set
+# CONFIG_SMC_IRCC_FIR is not set
+# CONFIG_ALI_FIR is not set
+# CONFIG_VLSI_FIR is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+
+#
+# IDE, ATA and ATAPI Block devices
+#
+CONFIG_BLK_DEV_IDE=y
+# CONFIG_BLK_DEV_HD_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_IDEDISK_STROKE is not set
+# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
+# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
+# CONFIG_BLK_DEV_IDEDISK_IBM is not set
+# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
+# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
+# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
+# CONFIG_BLK_DEV_IDEDISK_WD is not set
+# CONFIG_BLK_DEV_COMMERIAL is not set
+# CONFIG_BLK_DEV_TIVO is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_DMA_NONPCI is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
+# CONFIG_BLK_DEV_ATARAID is not set
+# CONFIG_BLK_DEV_ATARAID_PDC is not set
+# CONFIG_BLK_DEV_ATARAID_HPT is not set
+
+#
+# SCSI support
+#
+CONFIG_SCSI=y
+CONFIG_BLK_DEV_SD=y
+CONFIG_SD_EXTRA_DEVS=40
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+CONFIG_BLK_DEV_SR_VENDOR=y
+CONFIG_SR_EXTRA_DEVS=2
+CONFIG_CHR_DEV_SG=y
+# CONFIG_SCSI_DEBUG_QUEUES is not set
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_SCSI_7000FASST is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AHA1542 is not set
+# CONFIG_SCSI_AHA1740 is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_AM53C974 is not set
+# CONFIG_SCSI_MEGARAID is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_EATA_DMA is not set
+# CONFIG_SCSI_EATA_PIO is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_NCR53C7xx is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PCI2000 is not set
+# CONFIG_SCSI_PCI2220I is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_SIM710 is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_U14_34F is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_SCSI_PCMCIA is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input core support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_KEYBDEV=y
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_UINPUT is not set
+
+#
+# Character devices
+#
+# CONFIG_LEDMAN is not set
+# CONFIG_DS1302 is not set
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_SERIAL=y
+# CONFIG_SERIAL_CONSOLE is not set
+CONFIG_SERIAL_SL_SERIES=y
+# CONFIG_SL_TS_PRESSURE is not set
+# CONFIG_BOOT_PRESSURE_ON is not set
+# CONFIG_SL_WRITE_TS is not set
+# CONFIG_BLUETOOTH_SL is not set
+CONFIG_KBD_DEV_FILE=y
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_ANAKIN is not set
+# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
+# CONFIG_SERIAL_AMBA is not set
+# CONFIG_SERIAL_AMBA_CONSOLE is not set
+# CONFIG_SERIAL_KATANA is not set
+# CONFIG_SERIAL_KATANA_CONSOLE is not set
+# CONFIG_SERIAL_CLPS711X is not set
+# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
+# CONFIG_SERIAL_21285 is not set
+# CONFIG_SERIAL_21285_OLD is not set
+# CONFIG_SERIAL_21285_CONSOLE is not set
+# CONFIG_SERIAL_UART00 is not set
+# CONFIG_SERIAL_UART00_CONSOLE is not set
+# CONFIG_SERIAL_SA1100 is not set
+# CONFIG_SERIAL_SA1100_CONSOLE is not set
+# CONFIG_SERIAL_OMAHA is not set
+# CONFIG_SERIAL_OMAHA_CONSOLE is not set
+# CONFIG_SERIAL_AT91US3 is not set
+# CONFIG_SERIAL_AT91US3_CONSOLE is not set
+# CONFIG_SERIAL_8250 is not set
+# CONFIG_SERIAL_8250_CONSOLE is not set
+# CONFIG_SERIAL_8250_EXTENDED is not set
+# CONFIG_SERIAL_8250_MANY_PORTS is not set
+# CONFIG_SERIAL_8250_SHARE_IRQ is not set
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_MULTIPORT is not set
+# CONFIG_SERIAL_8250_HUB6 is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+CONFIG_MOUSE=y
+CONFIG_PSMOUSE=y
+# CONFIG_82C710_MOUSE is not set
+# CONFIG_PC110_PAD is not set
+# CONFIG_MK712_MOUSE is not set
+
+#
+# Joysticks
+#
+# CONFIG_INPUT_GAMEPORT is not set
+# CONFIG_INPUT_NS558 is not set
+# CONFIG_INPUT_LIGHTNING is not set
+# CONFIG_INPUT_PCIGAME is not set
+# CONFIG_INPUT_CS461X is not set
+# CONFIG_INPUT_EMU10K1 is not set
+# CONFIG_INPUT_SERIO is not set
+# CONFIG_INPUT_SERPORT is not set
+# CONFIG_INPUT_ANALOG is not set
+# CONFIG_INPUT_A3D is not set
+# CONFIG_INPUT_ADI is not set
+# CONFIG_INPUT_COBRA is not set
+# CONFIG_INPUT_GF2K is not set
+# CONFIG_INPUT_GRIP is not set
+# CONFIG_INPUT_INTERACT is not set
+# CONFIG_INPUT_TMDC is not set
+# CONFIG_INPUT_SIDEWINDER is not set
+# CONFIG_INPUT_IFORCE_USB is not set
+# CONFIG_INPUT_IFORCE_232 is not set
+# CONFIG_INPUT_WARRIOR is not set
+# CONFIG_INPUT_MAGELLAN is not set
+# CONFIG_INPUT_SPACEORB is not set
+# CONFIG_INPUT_SPACEBALL is not set
+# CONFIG_INPUT_STINGER is not set
+# CONFIG_INPUT_DB9 is not set
+# CONFIG_INPUT_GAMECON is not set
+# CONFIG_INPUT_TURBOGRAFX is not set
+# CONFIG_QIC02_TAPE is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_AMD_PM768 is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_PXA_RTC is not set
+CONFIG_COTULLA_RTC=y
+CONFIG_ADS7846_TS=y
+# CONFIG_TOSA_TS is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+CONFIG_PCMCIA_SERIAL_CS=y
+CONFIG_PCMCIA_CHRDEV=y
+# CONFIG_SYNCLINK_CS is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# File systems
+#
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FS_SYNC=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_ADFS_FS_RW is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BEFS_DEBUG is not set
+# CONFIG_BFS_FS is not set
+CONFIG_EXT3_FS=y
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+# CONFIG_UMSDOS_FS is not set
+CONFIG_VFAT_FS=y
+# CONFIG_VFAT_SHORTCUT_SYMLINK is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_NAND=y
+CONFIG_JFFS2_LARGE_PARTITION=y
+CONFIG_JFFS2_PROC_FS=y
+CONFIG_JFFS2_NODEMERGE=y
+CONFIG_JFFS2_DYNFRAGTREE=y
+CONFIG_JFFS2_RESERVED_BLOCKS_BAD=28
+CONFIG_CRAMFS=y
+CONFIG_TMPFS=y
+CONFIG_RAMFS=y
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+# CONFIG_JFS_FS is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_MINIX_FS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+# CONFIG_HPFS_FS is not set
+CONFIG_PROC_FS=y
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+CONFIG_DEVPTS_FS=y
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_EXT2_FS=y
+# CONFIG_SYSV_FS is not set
+# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
+
+#
+# Network File Systems
+#
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_ROOT_NFS is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_TCP=y
+CONFIG_SUNRPC=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_SMB_FS=y
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+CONFIG_ZISOFS_FS=y
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+CONFIG_SMB_NLS=y
+CONFIG_NLS=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+CONFIG_NLS_CODEPAGE_932=y
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Console drivers
+#
+CONFIG_PC_KEYMAP=y
+# CONFIG_VGA_CONSOLE is not set
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_UNICON is not set
+# CONFIG_FB_ACORN is not set
+# CONFIG_FB_ANAKIN is not set
+# CONFIG_FB_CLPS711X is not set
+# CONFIG_FB_SA1100 is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_COTULLA is not set
+# CONFIG_FB_POODLE is not set
+# CONFIG_FB_CORGI is not set
+# CONFIG_FB_TOSA is not set
+CONFIG_FB_SHARPSL_PXA=y
+CONFIG_SHARPSL_PXA_CONSISTENT_ALLOC=y
+CONFIG_FB_SHARPSL_PXA_BVDD=y
+# CONFIG_SHARP_LOGO_SCREEN is not set
+# CONFIG_FB_KATANA is not set
+# CONFIG_FB_DBMX1 is not set
+# CONFIG_FB_DBMX21 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_FBCON_ADVANCED=y
+# CONFIG_FBCON_MFB is not set
+# CONFIG_FBCON_CFB2 is not set
+# CONFIG_FBCON_CFB4 is not set
+# CONFIG_FBCON_CFB8 is not set
+CONFIG_FBCON_CFB16=y
+# CONFIG_FBCON_CFB24 is not set
+# CONFIG_FBCON_CFB32 is not set
+# CONFIG_FBCON_AFB is not set
+# CONFIG_FBCON_ILBM is not set
+# CONFIG_FBCON_IPLAN2P2 is not set
+# CONFIG_FBCON_IPLAN2P4 is not set
+# CONFIG_FBCON_IPLAN2P8 is not set
+# CONFIG_FBCON_MAC is not set
+# CONFIG_FBCON_VGA_PLANES is not set
+# CONFIG_FBCON_VGA is not set
+# CONFIG_FBCON_HGA is not set
+CONFIG_FBCON_ROTATE_R=y
+# CONFIG_FBCON_ROTATE_L is not set
+# CONFIG_FBCON_LOGO_CENTER is not set
+# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
+CONFIG_FBCON_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+# CONFIG_SOUND_ALI5455 is not set
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_MIDI_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_FORTE is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+# CONFIG_MIDI_VIA82CXXX is not set
+# CONFIG_SOUND_OSS is not set
+# CONFIG_SOUND_VIDC is not set
+# CONFIG_SOUND_WAVEARTIST is not set
+# CONFIG_SOUND_PXA_AC97 is not set
+# CONFIG_SOUND_POODLE is not set
+# CONFIG_SOUND_CORGI is not set
+# CONFIG_SOUND_TOSA is not set
+# CONFIG_BUZZER_TOSA is not set
+CONFIG_SOUND_SPITZ=y
+# CONFIG_SOUND_TVMIXER is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+# CONFIG_MCP_SA1100 is not set
+# CONFIG_MCP_UCB1200 is not set
+# CONFIG_MCP_UCB1200_AUDIO is not set
+# CONFIG_MCP_UCB1200_TS is not set
+# CONFIG_MCP_UCB1400_TS is not set
+
+#
+# USB support
+#
+CONFIG_USB=m
+CONFIG_USB_DEBUG=y
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_LONG_TIMEOUT is not set
+# CONFIG_USB_EHCI_HCD is not set
+# CONFIG_USB_UHCI is not set
+# CONFIG_USB_UHCI_ALT is not set
+# CONFIG_USB_OHCI is not set
+# CONFIG_USB_OHCI_SH7727 is not set
+# CONFIG_USB_OHCI_SH is not set
+# CONFIG_USB_OHCI_VOYAGERGX is not set
+# CONFIG_USB_OHCI_TC6393 is not set
+# CONFIG_USB_USE_INTERNAL_MEMORY is not set
+CONFIG_USB_OHCI_PXA27X=m
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_MIDI is not set
+CONFIG_USB_STORAGE=m
+CONFIG_USB_STORAGE_DEBUG=y
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_ISD200=y
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_HP8200e=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_ACM=m
+# CONFIG_USB_PRINTER is not set
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_DC2XX is not set
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_SCANNER is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_CDCETHER is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_TIGL is not set
+# CONFIG_USB_BRLVGER is not set
+# CONFIG_USB_LCD is not set
+
+#
+# USB Device Support
+#
+CONFIG_USBD=m
+CONFIG_USBD_VENDORID=04DD
+CONFIG_USBD_PRODUCTID=8007
+CONFIG_USBD_PRODUCT_NAME="SL-AV200"
+CONFIG_USBD_MANUFACTURER="Sharp"
+# CONFIG_USBD_USE_SERIAL_NUMBER is not set
+CONFIG_USBD_SELFPOWERED=y
+CONFIG_USBD_MONITOR=m
+CONFIG_USBD_PROCFS=y
+
+#
+# Network Function
+#
+CONFIG_USBD_NET=m
+CONFIG_USBD_NET_VENDORID=04DD
+CONFIG_USBD_NET_PRODUCTID=8007
+CONFIG_USBD_NET_IFNAME="usbd"
+CONFIG_USBD_NET_OUT_ENDPOINT=2
+CONFIG_USBD_NET_OUT_PKTSIZE=64
+CONFIG_USBD_NET_IN_ENDPOINT=1
+CONFIG_USBD_NET_IN_PKTSIZE=64
+CONFIG_USBD_NET_INT_ENDPOINT=5
+CONFIG_USBD_NET_INT_PKTSIZE=8
+# CONFIG_USBD_NET_ALWAYSUP is not set
+# CONFIG_USBD_NET_SAFE is not set
+CONFIG_USBD_NET_MDLM=y
+# CONFIG_USBD_NET_CDC is not set
+CONFIG_USBD_NET_REMOTE_MACADDR=""
+CONFIG_USBD_NET_REMOTE_OUI=400002
+CONFIG_USBD_MAC_AS_SERIAL_NUMBER=y
+CONFIG_USBD_NET_LOCAL_MACADDR="400001000001"
+CONFIG_USBD_NET_LOCAL_OUI=400001
+
+#
+# Serial Function
+#
+# CONFIG_USBD_SERIAL is not set
+
+#
+# Mass Storage Function
+#
+CONFIG_USBD_STORAGE=m
+CONFIG_USBD_STORAGE_VENDORID=04DD
+CONFIG_USBD_STORAGE_PRODUCTID=9050
+CONFIG_USBD_STORAGE_OUT_ENDPOINT=2
+CONFIG_USBD_STORAGE_OUT_PKTSIZE=64
+CONFIG_USBD_STORAGE_IN_ENDPOINT=1
+CONFIG_USBD_STORAGE_IN_PKTSIZE=64
+CONFIG_USBD_STORAGE_INT_ENDPOINT=5
+CONFIG_USBD_STORAGE_INT_PKTSIZE=8
+CONFIG_USBD_STORAGE_DEF_DEVICE_NAME="/dev/hda1"
+
+#
+# USB Device Bus Interface Support
+#
+CONFIG_USBD_PXA27X_BUS=m
+# CONFIG_USBD_GENERIC_BUS is not set
+
+#
+# Bluetooth support
+#
+CONFIG_BLUEZ=m
+CONFIG_BLUEZ_L2CAP=m
+CONFIG_BLUEZ_SCO=m
+CONFIG_BLUEZ_RFCOMM=m
+CONFIG_BLUEZ_RFCOMM_TTY=y
+CONFIG_BLUEZ_BNEP=m
+CONFIG_BLUEZ_BNEP_MC_FILTER=y
+CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
+CONFIG_BLUEZ_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BLUEZ_HCIUSB=m
+CONFIG_BLUEZ_HCIUSB_SCO=y
+CONFIG_BLUEZ_HCIUART=m
+CONFIG_BLUEZ_HCIUART_H4=y
+CONFIG_BLUEZ_HCIUART_BCSP=y
+# CONFIG_BLUEZ_HCIUART_BCSP_TXCRC is not set
+CONFIG_BLUEZ_HCIBFUSB=m
+CONFIG_BLUEZ_HCIDTL1=m
+CONFIG_BLUEZ_HCIBT3C=m
+CONFIG_BLUEZ_HCIBLUECARD=m
+CONFIG_BLUEZ_HCIBTUART=m
+CONFIG_BLUEZ_HCIVHCI=m
+
+#
+# Kernel hacking
+#
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_COREDUMP_SIGNAL is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_INFO_YDC is not set
+# CONFIG_NO_PGT_CACHE is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_KGDB is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_WAITQ is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_LL is not set
+# CONFIG_DEBUG_DC21285_PORT is not set
+# CONFIG_DEBUG_CLPS711X_UART2 is not set
+
+#
+# Library routines
+#
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+
+#
+# Cryptography support (CryptoAPI)
+#
+# CONFIG_CRYPTO is not set
+# CONFIG_CIPHERS is not set
+# CONFIG_DIGESTS is not set
+# CONFIG_CRYPTODEV is not set
+# CONFIG_CRYPTOLOOP is not set
+# CONFIG_FW_LOADER is not set
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/defconfig-spitz b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/defconfig-spitz
new file mode 100644
index 0000000000..64e2610c12
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/defconfig-spitz
@@ -0,0 +1,1364 @@
+#
+# Automatically generated by make menuconfig: don't edit
+#
+CONFIG_ARM=y
+# CONFIG_EISA is not set
+# CONFIG_SBUS is not set
+# CONFIG_MCA is not set
+CONFIG_UID16=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+# CONFIG_GENERIC_BUST_SPINLOCK is not set
+# CONFIG_GENERIC_ISA_DMA is not set
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+# CONFIG_OBSOLETE is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+CONFIG_KMOD=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_ANAKIN is not set
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_CAMELOT is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_OMAHA is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_MX1ADS is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_RISCSTATION is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_AT91RM9200DK is not set
+# CONFIG_ARCH_KATANA is not set
+# CONFIG_ARCH_S1C38000 is not set
+# CONFIG_ARCH_DBMX1 is not set
+# CONFIG_ARCH_DBMX2 is not set
+
+#
+# Archimedes/A5000 Implementations
+#
+# CONFIG_ARCH_ARC is not set
+# CONFIG_ARCH_A5K is not set
+
+#
+# Footbridge Implementations
+#
+# CONFIG_ARCH_CATS is not set
+# CONFIG_ARCH_PERSONAL_SERVER is not set
+# CONFIG_ARCH_EBSA285_ADDIN is not set
+# CONFIG_ARCH_EBSA285_HOST is not set
+# CONFIG_ARCH_NETWINDER is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ACCELENT is not set
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_ASSABET_NEPONSET is not set
+# CONFIG_SA1100_ADSAGC is not set
+# CONFIG_SA1100_ADSBITSY is not set
+# CONFIG_SA1100_ADSBITSYPLUS is not set
+# CONFIG_SA1100_BRUTUS is not set
+# CONFIG_SA1100_CEP is not set
+# CONFIG_SA1100_CERF is not set
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+# CONFIG_SA1100_H3XXX is not set
+# CONFIG_H3600_SLEEVE is not set
+# CONFIG_SA1100_EXTENEX1 is not set
+# CONFIG_SA1100_FLEXANET is not set
+# CONFIG_SA1100_FREEBIRD is not set
+# CONFIG_SA1100_FRODO is not set
+# CONFIG_SA1100_GRAPHICSCLIENT is not set
+# CONFIG_SA1100_GRAPHICSMASTER is not set
+# CONFIG_SA1100_HACKKIT is not set
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_HUW_WEBPANEL is not set
+# CONFIG_SA1100_ITSY is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_NANOENGINE is not set
+# CONFIG_SA1100_OMNIMETER is not set
+# CONFIG_SA1100_PANGOLIN is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_PT_SYSTEM3 is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SHERMAN is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_SIMPUTER is not set
+# CONFIG_SA1100_PFS168 is not set
+# CONFIG_SA1100_VICTOR is not set
+# CONFIG_SA1100_XP860 is not set
+# CONFIG_SA1100_YOPY is not set
+# CONFIG_SA1100_USB is not set
+# CONFIG_SA1100_USB_NETLINK is not set
+# CONFIG_SA1100_USB_CHAR is not set
+# CONFIG_SA1100_SSP is not set
+
+#
+# Intel PXA250/210 Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_ARCH_PXA_CERF is not set
+# CONFIG_COTULLA_DMA is not set
+# CONFIG_SABINAL_DISCOVERY is not set
+# CONFIG_ARCH_SABINAL is not set
+# CONFIG_ARCH_PXA_POODLE is not set
+# CONFIG_POODLE_TR0 is not set
+CONFIG_ARCH_PXA_CORGI=y
+# CONFIG_CORGI_TR0 is not set
+CONFIG_ARCH_PXA_SHEPHERD=y
+CONFIG_ARCH_PXA_HUSKY=y
+CONFIG_ARCH_PXA_BOXER=y
+CONFIG_ARCH_PXA_SPITZ=y
+# CONFIG_ARCH_PXA_BORZOI is not set
+# CONFIG_SPITZ_TR0 is not set
+# CONFIG_SPITZ_TR0_5 is not set
+# CONFIG_ARCH_PXA_TOSA is not set
+# CONFIG_ARCH_PXA_TOSA_SKIP is not set
+CONFIG_ARCH_SHARP_SL=y
+CONFIG_ARCH_SHARP_SL_E=y
+# CONFIG_ARCH_SHARP_SL_V is not set
+# CONFIG_ARCH_SHARP_SL_G is not set
+# CONFIG_ARCH_SHARP_SL_J is not set
+# CONFIG_ARCH_SHARP_SL_S is not set
+# CONFIG_ARCH_SHARP_SL_I is not set
+# CONFIG_PXA_USB is not set
+# CONFIG_PXA_USB_NETLINK is not set
+# CONFIG_PXA_USB_CHAR is not set
+
+#
+# CLPS711X/EP721X Implementations
+#
+# CONFIG_ARCH_AUTCPU12 is not set
+# CONFIG_ARCH_CDB89712 is not set
+# CONFIG_ARCH_CLEP7312 is not set
+# CONFIG_ARCH_EDB7211 is not set
+# CONFIG_ARCH_FORTUNET is not set
+# CONFIG_ARCH_GUIDEA07 is not set
+# CONFIG_ARCH_P720T is not set
+# CONFIG_ARCH_EP7211 is not set
+# CONFIG_ARCH_EP7212 is not set
+# CONFIG_ARCH_ACORN is not set
+
+#
+# S1C38000 Implementations
+#
+# CONFIG_S1C38000_TTE301 is not set
+
+#
+# DBMX1 Implementations
+#
+# CONFIG_DBMX1_TPM102 is not set
+
+#
+# DBMX2 Implementations
+#
+# CONFIG_ARCH_MX2ADS is not set
+# CONFIG_ARCH_APLAT is not set
+# CONFIG_FOOTBRIDGE is not set
+# CONFIG_FOOTBRIDGE_HOST is not set
+# CONFIG_FOOTBRIDGE_ADDIN is not set
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
+# CONFIG_CPU_ARM610 is not set
+# CONFIG_CPU_ARM710 is not set
+# CONFIG_CPU_ARM720T is not set
+# CONFIG_CPU_ARM920T is not set
+# CONFIG_CPU_ARM922T is not set
+# CONFIG_PLD is not set
+# CONFIG_CPU_ARM926T is not set
+# CONFIG_CPU_ARM1020 is not set
+# CONFIG_CPU_ARM1026 is not set
+# CONFIG_CPU_SA110 is not set
+# CONFIG_CPU_SA1100 is not set
+CONFIG_CPU_32v5=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_PXA27X=y
+CONFIG_SL_CCCR_CHANGE=y
+CONFIG_CHANGE_CORE_VOLT=y
+CONFIG_SL_SIGSTOP_FIX=y
+CONFIG_BATT=y
+# CONFIG_XSCALE_CACHE_ERRATA is not set
+# CONFIG_CPU_32v3 is not set
+# CONFIG_CPU_32v4 is not set
+CONFIG_ARM_FCSE=y
+# CONFIG_DISCONTIGMEM is not set
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_RTHAL is not set
+# CONFIG_PREEMPT is not set
+CONFIG_LOLAT=y
+CONFIG_LOLAT_SYSCTL=y
+
+#
+# General setup
+#
+# CONFIG_PCI is not set
+# CONFIG_ISA is not set
+# CONFIG_ISA_DMA is not set
+# CONFIG_ZBOOT_ROM is not set
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_CPU_FREQ=y
+CONFIG_HOTPLUG=y
+
+#
+# PCMCIA/CardBus support
+#
+CONFIG_PCMCIA=y
+# CONFIG_I82092 is not set
+# CONFIG_I82365 is not set
+# CONFIG_TCIC is not set
+# CONFIG_PCMCIA_CLPS6700 is not set
+# CONFIG_PCMCIA_SA1100 is not set
+CONFIG_PCMCIA_PXA=y
+CONFIG_PCMCIA_SHARP_SL_2SLOT=y
+
+#
+# MMC device drivers
+#
+# CONFIG_MMC is not set
+CONFIG_NET=y
+CONFIG_SYSVIPC=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_KCORE_ELF=y
+# CONFIG_KCORE_AOUT is not set
+CONFIG_BINFMT_AOUT=y
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+CONFIG_PM=y
+CONFIG_APM=y
+# CONFIG_APM_IGNORE_USER_SUSPEND is not set
+CONFIG_APM_CPU_IDLE=y
+CONFIG_APM_DISPLAY_BLANK=y
+CONFIG_APM_RTC_IS_GMT=y
+# CONFIG_ARTHUR is not set
+CONFIG_CMDLINE="<see .bb file>"
+# CONFIG_SHARPSL_BOOTLDR_PARAMS is not set
+CONFIG_ALIGNMENT_TRAP=y
+CONFIG_FREEPG_SIGNAL=y
+CONFIG_OOM_KILL_SURVIVAL=y
+CONFIG_DEVICEINFO=y
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+# CONFIG_MTD_GEN_PROBE is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_AMDSTD is not set
+# CONFIG_MTD_SHARP is not set
+# CONFIG_MTD_JEDEC is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_UCLINUX is not set
+# CONFIG_MTD_DRAGONIX is not set
+# CONFIG_MTD_NETtel is not set
+# CONFIG_MTD_NETteluC is not set
+# CONFIG_MTD_KEYTECHNOLOGY is not set
+# CONFIG_MTD_LUBBOCK is not set
+# CONFIG_MTD_NORA is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_CDB89712 is not set
+# CONFIG_MTD_MX2ADS is not set
+# CONFIG_MTD_SA1100 is not set
+# CONFIG_MTD_DC21285 is not set
+# CONFIG_MTD_IQ80310 is not set
+# CONFIG_MTD_FORTUNET is not set
+# CONFIG_MTD_PXA_CERF is not set
+# CONFIG_MTD_EPXA10DB is not set
+# CONFIG_MTD_AUTCPU12 is not set
+# CONFIG_MTD_EDB7312 is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_DISCOVERY is not set
+CONFIG_MTD_SHARP_SL=y
+# CONFIG_MTD_KATANA is not set
+# CONFIG_MTD_TPM102 is not set
+# CONFIG_MTD_PCI is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_MTDROM_SA1100 is not set
+# CONFIG_MTD_MTDRAM_SA1100 is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_MTDRAM_SHARP_SL is not set
+# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_DOC1000 is not set
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOCPROBE is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_ECC=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ERASE_BY_FORCE is not set
+CONFIG_MTD_NAND_POST_BADBLOCK=y
+CONFIG_MTD_NAND_LOGICAL_ADDRESS_ACCESS=y
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_SHARP_SL=y
+
+#
+# Plug and Play configuration
+#
+# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_CISS_SCSI_TAPE is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=8192
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_BLK_DEV_RAMDISK_DATA is not set
+# CONFIG_BLK_DEV_BLKMEM is not set
+# CONFIG_BLK_STATS is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_MD_RAID1 is not set
+# CONFIG_MD_RAID5 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_BLK_DEV_LVM is not set
+
+#
+# Cryptography support (CryptoAPI)
+#
+# CONFIG_CRYPTO is not set
+# CONFIG_CIPHERS is not set
+# CONFIG_DIGESTS is not set
+# CONFIG_CRYPTODEV is not set
+# CONFIG_CRYPTOLOOP is not set
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+# CONFIG_FILTER is not set
+# CONFIG_NET_NEIGH_DEBUG is not set
+# CONFIG_NET_RESTRICTED_REUSE is not set
+CONFIG_UNIX=y
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_INET_ECN is not set
+# CONFIG_SYN_COOKIES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_LIMIT=m
+CONFIG_IP_NF_MATCH_MAC=m
+CONFIG_IP_NF_MATCH_PKTTYPE=m
+CONFIG_IP_NF_MATCH_MARK=m
+CONFIG_IP_NF_MATCH_MULTIPORT=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_DSCP=m
+CONFIG_IP_NF_MATCH_AH_ESP=m
+CONFIG_IP_NF_MATCH_LENGTH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_TCPMSS=m
+CONFIG_IP_NF_MATCH_HELPER=m
+CONFIG_IP_NF_MATCH_STATE=m
+CONFIG_IP_NF_MATCH_CONNTRACK=m
+CONFIG_IP_NF_MATCH_UNCLEAN=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_MIRROR=m
+# CONFIG_IP_NF_NAT is not set
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_DSCP=m
+CONFIG_IP_NF_TARGET_MARK=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=m
+# CONFIG_IP_NF_ARPTABLES is not set
+# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
+# CONFIG_IP_NF_COMPAT_IPFWADM is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_DEBUG is not set
+CONFIG_IPV6_IM=y
+# CONFIG_IPV6_DROP_FAKE_V4MAPPED is not set
+# CONFIG_IPV6_RESTRICTED_DOUBLE_BIND is not set
+CONFIG_IPV6_6TO4_NEXTHOP=y
+CONFIG_IPV6_PRIVACY=y
+CONFIG_IPV6_ANYCAST=y
+CONFIG_IPV6_ANYCAST_GROUP=y
+# CONFIG_IPV6_ISATAP is not set
+# CONFIG_IPV6_SUBTREES is not set
+# CONFIG_IPV6_MLD6_ALL_DONE is not set
+# CONFIG_IPV6_NODEINFO is not set
+
+#
+# IPv6: Netfilter Configuration
+#
+# CONFIG_IP6_NF_QUEUE is not set
+# CONFIG_IP6_NF_IPTABLES is not set
+CONFIG_IPV6_IPSEC_TUNNEL=y
+CONFIG_IPV6_IPV6_TUNNEL=m
+# CONFIG_KHTTPD is not set
+# CONFIG_ATM is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+
+#
+# Appletalk devices
+#
+# CONFIG_DEV_APPLETALK is not set
+# CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_LLC is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_ETHERTAP is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_ARM_AM79C961A is not set
+# CONFIG_SUNLANCE is not set
+# CONFIG_SUNBMAC is not set
+# CONFIG_SUNQE is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_LANCE is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_NET_POCKET is not set
+# CONFIG_FEC is not set
+# CONFIG_CS89x0 is not set
+# CONFIG_UCCS8900 is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_MYRI_SBUS is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=y
+# CONFIG_PPP_SYNC_TTY is not set
+# CONFIG_PPP_DEFLATE is not set
+CONFIG_PPP_BSDCOMP=y
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_STRIP is not set
+# CONFIG_WAVELAN is not set
+# CONFIG_ARLAN is not set
+# CONFIG_AIRONET4500 is not set
+# CONFIG_AIRONET4500_NONCS is not set
+# CONFIG_AIRONET4500_PROC is not set
+# CONFIG_HERMES is not set
+# CONFIG_PCMCIA_HERMES is not set
+# CONFIG_AIRO_CS is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_NET_FC is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=y
+# CONFIG_PCMCIA_AXNET is not set
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_ARCNET_COM20020_CS is not set
+# CONFIG_PCMCIA_IBMTR is not set
+# CONFIG_NET_PCMCIA_RADIO is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+CONFIG_IRDA=y
+# CONFIG_IRLAN is not set
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=y
+# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+CONFIG_IRTTY_SIR=y
+# CONFIG_IRPORT_SIR is not set
+# CONFIG_DONGLE is not set
+# CONFIG_USB_IRDA is not set
+# CONFIG_NSC_FIR is not set
+# CONFIG_WINBOND_FIR is not set
+# CONFIG_TOSHIBA_OLD is not set
+# CONFIG_TOSHIBA_FIR is not set
+# CONFIG_SMC_IRCC_FIR is not set
+# CONFIG_ALI_FIR is not set
+# CONFIG_VLSI_FIR is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+
+#
+# IDE, ATA and ATAPI Block devices
+#
+CONFIG_BLK_DEV_IDE=y
+# CONFIG_BLK_DEV_HD_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_IDEDISK_STROKE is not set
+# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
+# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
+# CONFIG_BLK_DEV_IDEDISK_IBM is not set
+# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
+# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
+# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
+# CONFIG_BLK_DEV_IDEDISK_WD is not set
+# CONFIG_BLK_DEV_COMMERIAL is not set
+# CONFIG_BLK_DEV_TIVO is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_DMA_NONPCI is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
+# CONFIG_BLK_DEV_ATARAID is not set
+# CONFIG_BLK_DEV_ATARAID_PDC is not set
+# CONFIG_BLK_DEV_ATARAID_HPT is not set
+
+#
+# SCSI support
+#
+CONFIG_SCSI=y
+CONFIG_BLK_DEV_SD=y
+CONFIG_SD_EXTRA_DEVS=40
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+CONFIG_BLK_DEV_SR_VENDOR=y
+CONFIG_SR_EXTRA_DEVS=2
+CONFIG_CHR_DEV_SG=y
+# CONFIG_SCSI_DEBUG_QUEUES is not set
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_SCSI_7000FASST is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AHA1542 is not set
+# CONFIG_SCSI_AHA1740 is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_AM53C974 is not set
+# CONFIG_SCSI_MEGARAID is not set
+# CONFIG_SCSI_BUSLOGIC is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_EATA is not set
+# CONFIG_SCSI_EATA_DMA is not set
+# CONFIG_SCSI_EATA_PIO is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GDTH is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_NCR53C7xx is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PCI2000 is not set
+# CONFIG_SCSI_PCI2220I is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_SIM710 is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_U14_34F is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_SCSI_PCMCIA is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input core support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_KEYBDEV=y
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_UINPUT is not set
+
+#
+# Character devices
+#
+# CONFIG_LEDMAN is not set
+# CONFIG_DS1302 is not set
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_SERIAL=y
+# CONFIG_SERIAL_CONSOLE is not set
+CONFIG_SERIAL_SL_SERIES=y
+# CONFIG_SL_TS_PRESSURE is not set
+# CONFIG_BOOT_PRESSURE_ON is not set
+# CONFIG_SL_WRITE_TS is not set
+# CONFIG_BLUETOOTH_SL is not set
+CONFIG_KBD_DEV_FILE=y
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_ANAKIN is not set
+# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
+# CONFIG_SERIAL_AMBA is not set
+# CONFIG_SERIAL_AMBA_CONSOLE is not set
+# CONFIG_SERIAL_KATANA is not set
+# CONFIG_SERIAL_KATANA_CONSOLE is not set
+# CONFIG_SERIAL_CLPS711X is not set
+# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
+# CONFIG_SERIAL_21285 is not set
+# CONFIG_SERIAL_21285_OLD is not set
+# CONFIG_SERIAL_21285_CONSOLE is not set
+# CONFIG_SERIAL_UART00 is not set
+# CONFIG_SERIAL_UART00_CONSOLE is not set
+# CONFIG_SERIAL_SA1100 is not set
+# CONFIG_SERIAL_SA1100_CONSOLE is not set
+# CONFIG_SERIAL_OMAHA is not set
+# CONFIG_SERIAL_OMAHA_CONSOLE is not set
+# CONFIG_SERIAL_AT91US3 is not set
+# CONFIG_SERIAL_AT91US3_CONSOLE is not set
+# CONFIG_SERIAL_8250 is not set
+# CONFIG_SERIAL_8250_CONSOLE is not set
+# CONFIG_SERIAL_8250_EXTENDED is not set
+# CONFIG_SERIAL_8250_MANY_PORTS is not set
+# CONFIG_SERIAL_8250_SHARE_IRQ is not set
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_MULTIPORT is not set
+# CONFIG_SERIAL_8250_HUB6 is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+CONFIG_MOUSE=y
+CONFIG_PSMOUSE=y
+# CONFIG_82C710_MOUSE is not set
+# CONFIG_PC110_PAD is not set
+# CONFIG_MK712_MOUSE is not set
+
+#
+# Joysticks
+#
+# CONFIG_INPUT_GAMEPORT is not set
+# CONFIG_INPUT_NS558 is not set
+# CONFIG_INPUT_LIGHTNING is not set
+# CONFIG_INPUT_PCIGAME is not set
+# CONFIG_INPUT_CS461X is not set
+# CONFIG_INPUT_EMU10K1 is not set
+# CONFIG_INPUT_SERIO is not set
+# CONFIG_INPUT_SERPORT is not set
+# CONFIG_INPUT_ANALOG is not set
+# CONFIG_INPUT_A3D is not set
+# CONFIG_INPUT_ADI is not set
+# CONFIG_INPUT_COBRA is not set
+# CONFIG_INPUT_GF2K is not set
+# CONFIG_INPUT_GRIP is not set
+# CONFIG_INPUT_INTERACT is not set
+# CONFIG_INPUT_TMDC is not set
+# CONFIG_INPUT_SIDEWINDER is not set
+# CONFIG_INPUT_IFORCE_USB is not set
+# CONFIG_INPUT_IFORCE_232 is not set
+# CONFIG_INPUT_WARRIOR is not set
+# CONFIG_INPUT_MAGELLAN is not set
+# CONFIG_INPUT_SPACEORB is not set
+# CONFIG_INPUT_SPACEBALL is not set
+# CONFIG_INPUT_STINGER is not set
+# CONFIG_INPUT_DB9 is not set
+# CONFIG_INPUT_GAMECON is not set
+# CONFIG_INPUT_TURBOGRAFX is not set
+# CONFIG_QIC02_TAPE is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_AMD_PM768 is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_PXA_RTC is not set
+CONFIG_COTULLA_RTC=y
+CONFIG_ADS7846_TS=y
+# CONFIG_TOSA_TS is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+CONFIG_PCMCIA_SERIAL_CS=y
+CONFIG_PCMCIA_CHRDEV=y
+# CONFIG_SYNCLINK_CS is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# File systems
+#
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FS_SYNC=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_ADFS_FS_RW is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BEFS_DEBUG is not set
+# CONFIG_BFS_FS is not set
+CONFIG_EXT3_FS=y
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+# CONFIG_UMSDOS_FS is not set
+CONFIG_VFAT_FS=y
+# CONFIG_VFAT_SHORTCUT_SYMLINK is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_NAND=y
+CONFIG_JFFS2_LARGE_PARTITION=y
+CONFIG_JFFS2_PROC_FS=y
+CONFIG_JFFS2_NODEMERGE=y
+CONFIG_JFFS2_DYNFRAGTREE=y
+CONFIG_JFFS2_RESERVED_BLOCKS_BAD=80
+CONFIG_CRAMFS=y
+CONFIG_TMPFS=y
+CONFIG_RAMFS=y
+CONFIG_ISO9660_FS=y
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+# CONFIG_JFS_FS is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_MINIX_FS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+# CONFIG_HPFS_FS is not set
+CONFIG_PROC_FS=y
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+CONFIG_DEVPTS_FS=y
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_EXT2_FS=y
+# CONFIG_SYSV_FS is not set
+# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
+
+#
+# Network File Systems
+#
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_ROOT_NFS is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_TCP=y
+CONFIG_SUNRPC=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_SMB_FS=y
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+CONFIG_ZISOFS_FS=y
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+CONFIG_SMB_NLS=y
+CONFIG_NLS=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+CONFIG_NLS_CODEPAGE_932=y
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Console drivers
+#
+CONFIG_PC_KEYMAP=y
+# CONFIG_VGA_CONSOLE is not set
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_UNICON is not set
+# CONFIG_FB_ACORN is not set
+# CONFIG_FB_ANAKIN is not set
+# CONFIG_FB_CLPS711X is not set
+# CONFIG_FB_SA1100 is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_COTULLA is not set
+# CONFIG_FB_POODLE is not set
+# CONFIG_FB_CORGI is not set
+# CONFIG_FB_TOSA is not set
+CONFIG_FB_SHARPSL_PXA=y
+CONFIG_SHARPSL_PXA_CONSISTENT_ALLOC=y
+CONFIG_FB_SHARPSL_PXA_BVDD=y
+# CONFIG_SHARP_LOGO_SCREEN is not set
+# CONFIG_FB_KATANA is not set
+# CONFIG_FB_DBMX1 is not set
+# CONFIG_FB_DBMX21 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_FBCON_ADVANCED=y
+# CONFIG_FBCON_MFB is not set
+# CONFIG_FBCON_CFB2 is not set
+# CONFIG_FBCON_CFB4 is not set
+# CONFIG_FBCON_CFB8 is not set
+CONFIG_FBCON_CFB16=y
+# CONFIG_FBCON_CFB24 is not set
+# CONFIG_FBCON_CFB32 is not set
+# CONFIG_FBCON_AFB is not set
+# CONFIG_FBCON_ILBM is not set
+# CONFIG_FBCON_IPLAN2P2 is not set
+# CONFIG_FBCON_IPLAN2P4 is not set
+# CONFIG_FBCON_IPLAN2P8 is not set
+# CONFIG_FBCON_MAC is not set
+# CONFIG_FBCON_VGA_PLANES is not set
+# CONFIG_FBCON_VGA is not set
+# CONFIG_FBCON_HGA is not set
+CONFIG_FBCON_ROTATE_R=y
+# CONFIG_FBCON_ROTATE_L is not set
+# CONFIG_FBCON_LOGO_CENTER is not set
+# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
+CONFIG_FBCON_FONTS=y
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+# CONFIG_SOUND_ALI5455 is not set
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_MIDI_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_FORTE is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+# CONFIG_MIDI_VIA82CXXX is not set
+# CONFIG_SOUND_OSS is not set
+# CONFIG_SOUND_VIDC is not set
+# CONFIG_SOUND_WAVEARTIST is not set
+# CONFIG_SOUND_PXA_AC97 is not set
+# CONFIG_SOUND_POODLE is not set
+# CONFIG_SOUND_CORGI is not set
+# CONFIG_SOUND_TOSA is not set
+# CONFIG_BUZZER_TOSA is not set
+CONFIG_SOUND_SPITZ=y
+# CONFIG_SOUND_TVMIXER is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+# CONFIG_MCP_SA1100 is not set
+# CONFIG_MCP_UCB1200 is not set
+# CONFIG_MCP_UCB1200_AUDIO is not set
+# CONFIG_MCP_UCB1200_TS is not set
+# CONFIG_MCP_UCB1400_TS is not set
+
+#
+# USB support
+#
+CONFIG_USB=m
+CONFIG_USB_DEBUG=y
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_LONG_TIMEOUT is not set
+# CONFIG_USB_EHCI_HCD is not set
+# CONFIG_USB_UHCI is not set
+# CONFIG_USB_UHCI_ALT is not set
+# CONFIG_USB_OHCI is not set
+# CONFIG_USB_OHCI_SH7727 is not set
+# CONFIG_USB_OHCI_SH is not set
+# CONFIG_USB_OHCI_VOYAGERGX is not set
+# CONFIG_USB_OHCI_TC6393 is not set
+# CONFIG_USB_USE_INTERNAL_MEMORY is not set
+CONFIG_USB_OHCI_PXA27X=m
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_MIDI is not set
+CONFIG_USB_STORAGE=m
+CONFIG_USB_STORAGE_DEBUG=y
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_ISD200=y
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_HP8200e=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_ACM=m
+# CONFIG_USB_PRINTER is not set
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_DC2XX is not set
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_SCANNER is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_CDCETHER is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_TIGL is not set
+# CONFIG_USB_BRLVGER is not set
+# CONFIG_USB_LCD is not set
+
+#
+# USB Device Support
+#
+CONFIG_USBD=m
+CONFIG_USBD_VENDORID=04DD
+CONFIG_USBD_PRODUCTID=8007
+CONFIG_USBD_PRODUCT_NAME="SL-AV200"
+CONFIG_USBD_MANUFACTURER="Sharp"
+# CONFIG_USBD_USE_SERIAL_NUMBER is not set
+CONFIG_USBD_SELFPOWERED=y
+CONFIG_USBD_MONITOR=m
+CONFIG_USBD_PROCFS=y
+
+#
+# Network Function
+#
+CONFIG_USBD_NET=m
+CONFIG_USBD_NET_VENDORID=04DD
+CONFIG_USBD_NET_PRODUCTID=8007
+CONFIG_USBD_NET_IFNAME="usbd"
+CONFIG_USBD_NET_OUT_ENDPOINT=2
+CONFIG_USBD_NET_OUT_PKTSIZE=64
+CONFIG_USBD_NET_IN_ENDPOINT=1
+CONFIG_USBD_NET_IN_PKTSIZE=64
+CONFIG_USBD_NET_INT_ENDPOINT=5
+CONFIG_USBD_NET_INT_PKTSIZE=8
+# CONFIG_USBD_NET_ALWAYSUP is not set
+# CONFIG_USBD_NET_SAFE is not set
+CONFIG_USBD_NET_MDLM=y
+# CONFIG_USBD_NET_CDC is not set
+CONFIG_USBD_NET_REMOTE_MACADDR=""
+CONFIG_USBD_NET_REMOTE_OUI=400002
+CONFIG_USBD_MAC_AS_SERIAL_NUMBER=y
+CONFIG_USBD_NET_LOCAL_MACADDR="400001000001"
+CONFIG_USBD_NET_LOCAL_OUI=400001
+
+#
+# Serial Function
+#
+# CONFIG_USBD_SERIAL is not set
+
+#
+# Mass Storage Function
+#
+CONFIG_USBD_STORAGE=m
+CONFIG_USBD_STORAGE_VENDORID=04DD
+CONFIG_USBD_STORAGE_PRODUCTID=9050
+CONFIG_USBD_STORAGE_OUT_ENDPOINT=2
+CONFIG_USBD_STORAGE_OUT_PKTSIZE=64
+CONFIG_USBD_STORAGE_IN_ENDPOINT=1
+CONFIG_USBD_STORAGE_IN_PKTSIZE=64
+CONFIG_USBD_STORAGE_INT_ENDPOINT=5
+CONFIG_USBD_STORAGE_INT_PKTSIZE=8
+CONFIG_USBD_STORAGE_DEF_DEVICE_NAME="/dev/hda1"
+
+#
+# USB Device Bus Interface Support
+#
+CONFIG_USBD_PXA27X_BUS=m
+# CONFIG_USBD_GENERIC_BUS is not set
+
+#
+# Bluetooth support
+#
+CONFIG_BLUEZ=m
+CONFIG_BLUEZ_L2CAP=m
+CONFIG_BLUEZ_SCO=m
+CONFIG_BLUEZ_RFCOMM=m
+CONFIG_BLUEZ_RFCOMM_TTY=y
+CONFIG_BLUEZ_BNEP=m
+CONFIG_BLUEZ_BNEP_MC_FILTER=y
+CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
+CONFIG_BLUEZ_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BLUEZ_HCIUSB=m
+CONFIG_BLUEZ_HCIUSB_SCO=y
+CONFIG_BLUEZ_HCIUART=m
+CONFIG_BLUEZ_HCIUART_H4=y
+CONFIG_BLUEZ_HCIUART_BCSP=y
+# CONFIG_BLUEZ_HCIUART_BCSP_TXCRC is not set
+CONFIG_BLUEZ_HCIBFUSB=m
+CONFIG_BLUEZ_HCIDTL1=m
+CONFIG_BLUEZ_HCIBT3C=m
+CONFIG_BLUEZ_HCIBLUECARD=m
+CONFIG_BLUEZ_HCIBTUART=m
+CONFIG_BLUEZ_HCIVHCI=m
+
+#
+# Kernel hacking
+#
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_COREDUMP_SIGNAL is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_INFO_YDC is not set
+# CONFIG_NO_PGT_CACHE is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_KGDB is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_WAITQ is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_LL is not set
+# CONFIG_DEBUG_DC21285_PORT is not set
+# CONFIG_DEBUG_CLPS711X_UART2 is not set
+
+#
+# Library routines
+#
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+
+#
+# Cryptography support (CryptoAPI)
+#
+# CONFIG_CRYPTO is not set
+# CONFIG_CIPHERS is not set
+# CONFIG_DIGESTS is not set
+# CONFIG_CRYPTODEV is not set
+# CONFIG_CRYPTOLOOP is not set
+# CONFIG_FW_LOADER is not set
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/deviceinfo.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/deviceinfo.patch
new file mode 100644
index 0000000000..58343c5b55
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/deviceinfo.patch
@@ -0,0 +1,26 @@
+--- linux/arch/arm/mach-pxa/Makefile.old 2004-09-24 20:49:09.000000000 +0930
++++ linux/arch/arm/mach-pxa/Makefile 2004-09-24 20:49:11.000000000 +0930
+@@ -94,6 +94,23 @@
+ endif
+ endif
+
++ifeq ($(CONFIG_DEVICEINFO),m)
++ obj-$(CONFIG_DEVICEINFO) += devinfo.o
++ ifeq ($(CONFIG_SABINAL_DISCOVERY),y)
++ devinfo-objs-m += deviceinfo.o
++ devinfo-objs-$(CONFIG_DISCOVERY_DEVICEINFO) += discovery_deviceinfo.o
++ endif
++ ifeq ($(CONFIG_ARCH_PXA_POODLE),y)
++ devinfo-objs-m += sharpsl_deviceinfo.o
++ endif
++ ifeq ($(CONFIG_ARCH_PXA_CORGI),y)
++ devinfo-objs-m += sharpsl_deviceinfo.o
++ endif
++ ifeq ($(CONFIG_ARCH_PXA_TOSA),y)
++ devinfo-objs-m += sharpsl_deviceinfo.o
++ endif
++endif
++
+ obj-m += registers.o
+
+ include $(TOPDIR)/Rules.make
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/disable-pcmcia-probe.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/disable-pcmcia-probe.patch
new file mode 100644
index 0000000000..79ba036323
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/disable-pcmcia-probe.patch
@@ -0,0 +1,17 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- linux/drivers/pcmcia/Config.in~disable-pcmcia-probe 2003-05-13 11:18:23.000000000 +0200
++++ linux/drivers/pcmcia/Config.in 2004-05-27 13:59:50.000000000 +0200
+@@ -15,9 +15,6 @@
+ tristate 'PCMCIA/CardBus support' CONFIG_PCMCIA
+ if [ "$CONFIG_PCMCIA" != "n" ]; then
+ # yes, I really mean the following...
+- if [ "$CONFIG_ISA" = "y" -o "$CONFIG_ARCH_SA1100" = "y" ]; then
+- define_bool CONFIG_PCMCIA_PROBE y
+- fi
+ if [ "$CONFIG_PCI" != "n" ]; then
+ bool ' CardBus support' CONFIG_CARDBUS
+ fi
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/idecs.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/idecs.patch
new file mode 100644
index 0000000000..73d0f1c51c
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/idecs.patch
@@ -0,0 +1,78 @@
+--- linux/drivers/ide/ide-cs.c 2004-11-15 22:31:07.000000000 -0800
++++ linux/drivers/ide/ide-cs.c.new 2005-03-01 22:07:52.334266784 -0800
+@@ -2,7 +2,7 @@
+
+ A driver for PCMCIA IDE/ATA disk cards
+
+- ide_cs.c 1.26 1999/11/16 02:10:49
++ ide-cs.c 1.26 1999/11/16 02:10:49
+
+ The contents of this file are subject to the Mozilla Public
+ License Version 1.1 (the "License"); you may not use this file
+@@ -68,7 +68,7 @@
+ MODULE_PARM(pc_debug, "i");
+ #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
+ static char *version =
+-"ide_cs.c 1.26 1999/11/16 02:10:49 (David Hinds)";
++"ide-cs.c 1.26 1999/11/16 02:10:49 (David Hinds)";
+ #else
+ #define DEBUG(n, args...)
+ #endif
+@@ -113,7 +113,7 @@
+ event_callback_args_t *args);
+
+ #ifdef CONFIG_ARCH_SHARP_SL
+-static dev_info_t dev_info = "ide_cs";
++static dev_info_t dev_info = "ide-cs";
+ #else
+ static dev_info_t dev_info = "ide-cs";
+ #endif
+@@ -379,7 +379,7 @@
+ }
+
+ if (hd < 0) {
+- printk(KERN_NOTICE "ide_cs: ide_register() at 0x%03x & 0x%03x"
++ printk(KERN_NOTICE "ide-cs: ide_register() at 0x%03x & 0x%03x"
+ ", irq %u failed\n", io_base, ctl_base,
+ link->irq.AssignedIRQ);
+ goto failed;
+@@ -392,7 +392,7 @@
+ info->node.minor = 0;
+ info->hd = hd;
+ link->dev = &info->node;
+- printk(KERN_INFO "ide_cs: %s: Vcc = %d.%d, Vpp = %d.%d\n",
++ printk(KERN_INFO "ide-cs: %s: Vcc = %d.%d, Vpp = %d.%d\n",
+ info->node.dev_name, link->conf.Vcc/10, link->conf.Vcc%10,
+ link->conf.Vpp1/10, link->conf.Vpp1%10);
+
+@@ -434,10 +434,10 @@
+
+ #ifdef CONFIG_ARCH_SHARP_SL
+ request_region(link->io.BasePort1,
+- link->io.NumPorts1 << PCMCIA_ADDRESS_SHIFT,"ide_cs");
++ link->io.NumPorts1 << PCMCIA_ADDRESS_SHIFT,"ide-cs");
+ if (link->io.NumPorts2)
+ request_region(link->io.BasePort2,
+- link->io.NumPorts2 << PCMCIA_ADDRESS_SHIFT,"ide_cs");
++ link->io.NumPorts2 << PCMCIA_ADDRESS_SHIFT,"ide-cs");
+ #else
+ request_region(link->io.BasePort1,
+ link->io.NumPorts1 << PCMCIA_ADDRESS_SHIFT,"ide-cs");
+@@ -556,7 +556,7 @@
+ DEBUG(0, "%s\n", version);
+ CardServices(GetCardServicesInfo, &serv);
+ if (serv.Revision != CS_RELEASE_CODE) {
+- printk(KERN_NOTICE "ide_cs: Card Services release "
++ printk(KERN_NOTICE "ide-cs: Card Services release "
+ "does not match!\n");
+ return -1;
+ }
+@@ -566,7 +566,7 @@
+
+ static void __exit exit_ide_cs(void)
+ {
+- DEBUG(0, "ide_cs: unloading\n");
++ DEBUG(0, "ide-cs: unloading\n");
+ unregister_pccard_driver(&dev_info);
+ while (dev_list != NULL)
+ ide_detach(dev_list);
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/initsh.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/initsh.patch
new file mode 100644
index 0000000000..a672631194
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/initsh.patch
@@ -0,0 +1,14 @@
+--- linux/init/main.c 2002-02-25 13:38:13.000000000 -0600
++++ linux.new/init/main.c 2003-03-16 11:49:45.000000000 -0600
+@@ -830,8 +830,10 @@
+ * trying to recover a really broken machine.
+ */
+
+- if (execute_command)
++ if (execute_command) {
++ argv_init[0] = execute_command;
+ execve(execute_command,argv_init,envp_init);
++ }
+ execve("/sbin/init",argv_init,envp_init);
+ execve("/etc/init",argv_init,envp_init);
+ execve("/bin/init",argv_init,envp_init);
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/logo.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/logo.patch
new file mode 100644
index 0000000000..fd8084254c
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/logo.patch
@@ -0,0 +1,2598 @@
+--- linux/drivers/video/fbcon.c 2003-02-27 21:47:36.000000000 -0600
++++ linux.new/drivers/video/fbcon.c 2003-02-27 18:39:39.000000000 -0600
+@@ -126,8 +126,8 @@
+ #define LOGO_H (320-16)
+ #define LOGO_W 240
+ #else
+-#define LOGO_H 80
+-#define LOGO_W 80
++#define LOGO_H 52
++#define LOGO_W 240
+ #endif
+ #define LOGO_LINE (LOGO_W/8)
+ #if defined(CONFIG_SHARP_LOGO_SCREEN)
+--- linux/include/linux/linux_logo.h 2001-06-11 21:15:27.000000000 -0500
++++ linux.new/include/linux/linux_logo.h 2003-02-27 15:58:15.000000000 -0600
+@@ -1,4 +1,4 @@
+-/* $Id: linux_logo.h,v 1.5 1998/07/30 16:30:58 jj Exp $
++/* linux_logo.h created with fblogo, 2002/12/29 02:43:36
+ * include/linux/linux_logo.h: This is a linux logo
+ * to be displayed on boot.
+ *
+@@ -7,907 +7,1673 @@
+ *
+ * You can put anything here, but:
+ * LINUX_LOGO_COLORS has to be less than 224
+- * image size has to be 80x80
+- * values have to start from 0x20
+- * (i.e. RGB(linux_logo_red[0],
+- * linux_logo_green[0],
+- * linux_logo_blue[0]) is color 0x20)
+- * BW image has to be 80x80 as well, with MS bit
+- * on the left
+- * Serial_console ascii image can be any size,
+- * but should contain %s to display the version
++ * Generated by fblogo version 0.5.0
++ *
++ *
++ * Remember to modify drivers/video/fbcon.c:
++ * Change "#define LOGO_H 80" to "#define LOGO_H 52"
++ * Change "#define LOGO_W 80" to "#define LOGO_W 240"
+ */
+
+ #ifndef __HAVE_ARCH_LINUX_LOGO
+-#define LINUX_LOGO_COLORS 187
++#define LINUX_LOGO_COLORS 223
+ #endif
+-
+ #ifdef INCLUDE_LINUX_LOGO_DATA
+-
+ #ifndef __HAVE_ARCH_LINUX_LOGO
+-
+ unsigned char linux_logo_red[] __initdata = {
+- 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22,
+- 0x12, 0x00, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56,
+- 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x02, 0x65,
+- 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6,
+- 0xc3, 0x65, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6,
+- 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7,
+- 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x76, 0x79,
+- 0x62, 0x36, 0x9a, 0xe2, 0xec, 0xe1, 0xb8, 0xd7,
+- 0xaf, 0x25, 0xbc, 0xc0, 0xef, 0xea, 0xe8, 0xe8,
+- 0xf5, 0xf1, 0xda, 0xd3, 0x79, 0xdb, 0xf4, 0xf6,
+- 0xf6, 0xf6, 0xe2, 0x3d, 0xb4, 0xce, 0xe6, 0xee,
+- 0xf6, 0x68, 0xd8, 0xec, 0xf5, 0xc6, 0xc8, 0x9c,
+- 0x89, 0xd2, 0xee, 0xcb, 0xb9, 0xd2, 0x66, 0x5e,
+- 0x8b, 0xbe, 0xa8, 0xd5, 0xca, 0xb6, 0xae, 0x9c,
+- 0xc5, 0xbe, 0xbe, 0xca, 0x90, 0xb2, 0x9a, 0xa8,
+- 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0x12,
+- 0x4a, 0x8e, 0xf2, 0xf6, 0xf6, 0xee, 0xb5, 0xe4,
+- 0xf1, 0x26, 0x9a, 0xea, 0xf6, 0xe0, 0xd2, 0x16,
+- 0x9a, 0x2e, 0x70, 0xd6, 0x46, 0x7c, 0xb4, 0x62,
+- 0xd6, 0xa3, 0x74, 0xa7, 0xa2, 0xca, 0xe0, 0xae,
+- 0xbe, 0xce, 0xa3, 0x8e, 0x6d, 0x8e, 0x32, 0xaf,
+- 0x50, 0x9e, 0x5b, 0x8a, 0x98, 0x82, 0x7a, 0x82,
+- 0x56, 0x7c, 0x8a, 0x56, 0x5e, 0x86, 0x6a, 0x52,
+- 0x59, 0x64, 0x5e,
++ 0x00, 0x02, 0x06, 0x0A, 0x56, 0xA6, 0xBE, 0xBA,
++ 0xB6, 0x92, 0x3E, 0x1A, 0x8A, 0xF3, 0xFB, 0xEE,
++ 0xC6, 0x62, 0x4A, 0x12, 0x26, 0x0E, 0x76, 0xDA,
++ 0x6E, 0x32, 0x8E, 0x1E, 0x2A, 0xCE, 0xE2, 0x36,
++ 0x66, 0xA2, 0x2E, 0x9E, 0xCA, 0x6A, 0x5A, 0x82,
++ 0x7E, 0xE9, 0xD2, 0xDE, 0x22, 0x72, 0xAE, 0xD6,
++ 0x86, 0x3A, 0x52, 0x9A, 0xAA, 0x16, 0x46, 0x4E,
++ 0x42, 0xC2, 0x96, 0x7A, 0x5E, 0xB2, 0x32, 0x7E,
++ 0x3A, 0x16, 0x02, 0x02, 0x06, 0x1F, 0x02, 0x02,
++ 0x06, 0x02, 0x22, 0x3A, 0x35, 0x16, 0x0A, 0x02,
++ 0x2A, 0x3E, 0x39, 0x32, 0x2A, 0x1E, 0x16, 0x06,
++ 0x22, 0x22, 0x1E, 0x16, 0x6E, 0x82, 0x6E, 0x2E,
++ 0x1E, 0x2E, 0x1E, 0x0A, 0x3A, 0xDA, 0xFE, 0xFA,
++ 0xFA, 0xE2, 0x6A, 0x3A, 0x1A, 0xFA, 0xF6, 0x9E,
++ 0x02, 0x6E, 0xFE, 0xF6, 0x3E, 0x66, 0x52, 0x1B,
++ 0xD6, 0x5A, 0xEE, 0xC6, 0x72, 0x36, 0x22, 0x1E,
++ 0x02, 0x96, 0xF6, 0xDE, 0xA2, 0xD6, 0x39, 0x0E,
++ 0xAA, 0x52, 0x5A, 0xD2, 0xDE, 0x61, 0x46, 0xDE,
++ 0x7A, 0x57, 0x9E, 0xBA, 0xB6, 0x4A, 0x5A, 0xA6,
++ 0x96, 0x23, 0x1E, 0x12, 0x9A, 0x4E, 0x76, 0xAE,
++ 0x2E, 0xBE, 0x86, 0x48, 0xA6, 0x52, 0x06, 0x2E,
++ 0x56, 0x13, 0x2A, 0x4A, 0x36, 0x56, 0x2E, 0x1E,
++ 0x46, 0x3A, 0x66, 0x02, 0x3D, 0x3E, 0x2E, 0x3E,
++ 0x4A, 0x32, 0x52, 0x72, 0x76, 0x67, 0x68, 0x5A,
++ 0x3A, 0x1A, 0x0E, 0x2E, 0x4E, 0x02, 0x3E, 0x0A,
++ 0x28, 0x42, 0x10, 0x26, 0x8E, 0x0A, 0x86, 0xC2,
++ 0x02, 0x6E, 0x92, 0x02, 0x42, 0x02, 0xBE, 0x4E,
++ 0x02, 0x22, 0x02, 0x3E, 0x3A, 0x32
+ };
+
+ unsigned char linux_logo_green[] __initdata = {
+- 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22,
+- 0x12, 0x00, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56,
+- 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x02, 0x65,
+- 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6,
+- 0xc3, 0x62, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6,
+- 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7,
+- 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x62, 0x5c,
+- 0x4e, 0x26, 0x72, 0xaa, 0xba, 0xaf, 0x90, 0xae,
+- 0x92, 0x1a, 0xa4, 0x85, 0xb6, 0xbe, 0xc3, 0xc8,
+- 0xcf, 0xd0, 0xc2, 0xce, 0x57, 0xa2, 0xd6, 0xda,
+- 0xda, 0xd7, 0xb8, 0x2a, 0x7b, 0x91, 0xae, 0xca,
+- 0xda, 0x45, 0x9e, 0xb2, 0xd7, 0x9b, 0x90, 0x76,
+- 0x5c, 0xa2, 0xbe, 0xa6, 0x85, 0x96, 0x4e, 0x46,
+- 0x66, 0x92, 0x7a, 0x9a, 0x96, 0x9d, 0x9a, 0x6b,
+- 0x8a, 0x8e, 0xb2, 0xca, 0x90, 0xa6, 0x79, 0x7c,
+- 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0x0e,
+- 0x36, 0x86, 0xba, 0xbe, 0xe6, 0xcc, 0x8e, 0xb8,
+- 0xc4, 0x1e, 0x8e, 0xae, 0xba, 0xb2, 0xa6, 0x12,
+- 0x7a, 0x20, 0x64, 0xaa, 0x2f, 0x70, 0x85, 0x46,
+- 0xa6, 0x6e, 0x51, 0x72, 0x92, 0xa2, 0xa6, 0x87,
+- 0x96, 0xa2, 0x85, 0x7a, 0x6a, 0x6e, 0x22, 0x76,
+- 0x36, 0x76, 0x3c, 0x6e, 0x63, 0x53, 0x66, 0x62,
+- 0x42, 0x50, 0x56, 0x42, 0x56, 0x56, 0x56, 0x3e,
+- 0x51, 0x52, 0x56,
++ 0x00, 0x02, 0x06, 0x0A, 0x56, 0xA6, 0xBE, 0xBA,
++ 0xB6, 0x92, 0x3E, 0x1A, 0x8A, 0xF3, 0xFB, 0xEE,
++ 0xC6, 0x62, 0x4A, 0x12, 0x26, 0x0E, 0x76, 0xDA,
++ 0x6E, 0x32, 0x8E, 0x1E, 0x2A, 0xCE, 0xE2, 0x36,
++ 0x66, 0xA2, 0x2E, 0x9E, 0xCA, 0x6A, 0x5A, 0x82,
++ 0x7E, 0xE9, 0xD2, 0xDE, 0x22, 0x72, 0xAE, 0xD6,
++ 0x86, 0x3A, 0x52, 0x9A, 0xAA, 0x16, 0x46, 0x4E,
++ 0x42, 0xC2, 0x96, 0x7A, 0x5E, 0xB2, 0x2E, 0x7E,
++ 0x3A, 0x3E, 0x6A, 0xA2, 0x92, 0x30, 0x95, 0x76,
++ 0x4E, 0x86, 0x36, 0x7E, 0x9A, 0x6E, 0x42, 0x56,
++ 0x5A, 0xC2, 0xBE, 0xB2, 0xAA, 0x9A, 0x63, 0x1E,
++ 0xA2, 0x9E, 0x96, 0x5A, 0x3A, 0x42, 0x4A, 0x52,
++ 0x91, 0x46, 0x4E, 0x62, 0x22, 0x4A, 0x6E, 0x86,
++ 0x92, 0x9A, 0x52, 0x4A, 0x76, 0x7A, 0x9E, 0x76,
++ 0x62, 0x32, 0x5E, 0xAE, 0x3E, 0x66, 0x52, 0x81,
++ 0xA6, 0x5A, 0xEE, 0xC6, 0x72, 0x5C, 0x6A, 0x8A,
++ 0x36, 0x3E, 0xBA, 0xBA, 0xA2, 0xD6, 0xAA, 0x4E,
++ 0x8A, 0x4E, 0x5A, 0xD2, 0xDE, 0x64, 0x32, 0x9A,
++ 0x5E, 0x57, 0x9E, 0xBA, 0xB6, 0x52, 0x62, 0xA6,
++ 0x9A, 0x47, 0x3E, 0x56, 0x02, 0x1A, 0x76, 0xAE,
++ 0x4A, 0x02, 0x02, 0x38, 0x02, 0x4A, 0x46, 0x86,
++ 0x1E, 0x2E, 0x7A, 0xD2, 0x5E, 0x26, 0x92, 0x62,
++ 0xCA, 0x42, 0x66, 0x26, 0x67, 0xB6, 0x62, 0x92,
++ 0x9E, 0x72, 0xB2, 0xF2, 0xFE, 0xDE, 0xFE, 0xFE,
++ 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x8A, 0x2A,
++ 0x42, 0x52, 0x6A, 0x26, 0x8E, 0x26, 0x86, 0xC2,
++ 0xE2, 0x6E, 0x92, 0xBE, 0x42, 0xC6, 0xBE, 0x4E,
++ 0xEE, 0x5A, 0xEA, 0x3E, 0x4A, 0x32
+ };
+
+ unsigned char linux_logo_blue[] __initdata = {
+- 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22,
+- 0x12, 0x01, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56,
+- 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x06, 0x65,
+- 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6,
+- 0xc3, 0x59, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6,
+- 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7,
+- 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x2e, 0x08,
+- 0x0a, 0x06, 0x0a, 0x0b, 0x0b, 0x0f, 0x0c, 0x0f,
+- 0x3d, 0x09, 0x73, 0x09, 0x0d, 0x0a, 0x10, 0x1e,
+- 0x2d, 0x13, 0x86, 0xba, 0x19, 0x0a, 0x36, 0x3c,
+- 0x26, 0x14, 0x0d, 0x06, 0x07, 0x0a, 0x0b, 0x0f,
+- 0x4a, 0x06, 0x0a, 0x0c, 0x2b, 0x0a, 0x0b, 0x0a,
+- 0x06, 0x0a, 0x0a, 0x11, 0x0b, 0x0a, 0x0a, 0x1e,
+- 0x0f, 0x0d, 0x0a, 0x0b, 0x22, 0x6a, 0x72, 0x0b,
+- 0x0b, 0x22, 0x90, 0xca, 0x90, 0x92, 0x3c, 0x2c,
+- 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0x06,
+- 0x0e, 0x6a, 0x0e, 0x0e, 0xbe, 0x5b, 0x2c, 0x3e,
+- 0x0e, 0x0a, 0x5a, 0x0d, 0x0e, 0x3e, 0x0a, 0x06,
+- 0x2e, 0x06, 0x4e, 0x36, 0x06, 0x58, 0x24, 0x06,
+- 0x3a, 0x08, 0x08, 0x07, 0x5e, 0x45, 0x0a, 0x32,
+- 0x2e, 0x2a, 0x43, 0x48, 0x5f, 0x2e, 0x06, 0x06,
+- 0x07, 0x24, 0x06, 0x32, 0x06, 0x06, 0x46, 0x2e,
+- 0x22, 0x06, 0x06, 0x1e, 0x4c, 0x06, 0x3a, 0x22,
+- 0x42, 0x34, 0x42,
++ 0x00, 0x02, 0x06, 0x0A, 0x56, 0xA6, 0xBE, 0xBA,
++ 0xB6, 0x92, 0x3E, 0x1A, 0x8A, 0xF3, 0xFB, 0xEE,
++ 0xC6, 0x62, 0x4A, 0x12, 0x26, 0x0E, 0x76, 0xDA,
++ 0x6E, 0x32, 0x8E, 0x1E, 0x2A, 0xCE, 0xE2, 0x36,
++ 0x66, 0xA2, 0x2E, 0x9E, 0xCA, 0x6A, 0x5A, 0x82,
++ 0x7E, 0xE9, 0xD2, 0xDE, 0x22, 0x72, 0xAE, 0xD6,
++ 0x86, 0x3A, 0x52, 0x9A, 0xAA, 0x16, 0x46, 0x4E,
++ 0x42, 0xC2, 0x96, 0x7A, 0x5E, 0xB2, 0x1A, 0x06,
++ 0x1A, 0x2A, 0x36, 0x52, 0x46, 0x23, 0x4D, 0x3E,
++ 0x2A, 0x42, 0x2A, 0x5A, 0x69, 0x42, 0x26, 0x2E,
++ 0x42, 0x7E, 0x7C, 0x72, 0x6A, 0x5E, 0x3B, 0x12,
++ 0x62, 0x5E, 0x5A, 0x36, 0x26, 0x1E, 0x26, 0x42,
++ 0x56, 0x3A, 0x36, 0x36, 0x1E, 0x2E, 0x2A, 0x22,
++ 0x22, 0x1A, 0x16, 0x42, 0x46, 0x26, 0x1E, 0x12,
++ 0x32, 0x2A, 0x2E, 0x16, 0x2A, 0x1A, 0x2E, 0x4E,
++ 0x12, 0x22, 0x02, 0x02, 0x12, 0x4A, 0x46, 0x52,
++ 0x1E, 0x1E, 0x16, 0x0E, 0x02, 0x02, 0x6F, 0x2E,
++ 0x0E, 0x1A, 0x06, 0x02, 0x02, 0x04, 0x22, 0x16,
++ 0x0E, 0x12, 0x02, 0x02, 0x02, 0x0A, 0x5A, 0x02,
++ 0x02, 0x1B, 0x2E, 0x32, 0x02, 0x02, 0x02, 0x02,
++ 0x16, 0x02, 0x02, 0x10, 0x02, 0x02, 0x26, 0x5A,
++ 0x02, 0x1F, 0x52, 0x8E, 0x22, 0x02, 0x5E, 0x3E,
++ 0x86, 0x0E, 0x16, 0x16, 0x52, 0x7A, 0x4A, 0x66,
++ 0x72, 0x52, 0x82, 0xB2, 0xBA, 0xA4, 0xB2, 0xAA,
++ 0x9E, 0x8E, 0x88, 0x96, 0xA6, 0x82, 0x62, 0x1A,
++ 0x34, 0x4A, 0x31, 0x16, 0x02, 0x1A, 0x02, 0x02,
++ 0x72, 0x02, 0x02, 0x5E, 0x1A, 0x62, 0x02, 0x0E,
++ 0x76, 0x1E, 0x76, 0x1E, 0x0A, 0x02
+ };
+
+ unsigned char linux_logo[] __initdata = {
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22, 0x22,
+- 0x22, 0x21, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+- 0x26, 0x26, 0x25, 0x28, 0x23, 0x22, 0x21, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x21, 0x23, 0x25, 0x2a, 0x2b, 0x2c, 0x2d, 0x2d,
+- 0x2d, 0x2e, 0x2c, 0x2b, 0x2a, 0x25, 0x28, 0x22,
+- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x24, 0x2a, 0x2c, 0x2f, 0x2c, 0x30, 0x30, 0x24,
+- 0x25, 0x27, 0x2b, 0x2c, 0x2f, 0x31, 0x32, 0x25,
+- 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x25,
+- 0x33, 0x34, 0x35, 0x21, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x21, 0x2b, 0x2f, 0x2c,
+- 0x30, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, 0x33,
+- 0x2d, 0x27, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x31,
+- 0x2d, 0x32, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x21, 0x28, 0x2a, 0x34,
+- 0x25, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x23, 0x32, 0x27, 0x21, 0x36,
+- 0x2a, 0x2d, 0x2a, 0x28, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x2c, 0x35,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x25, 0x2f, 0x37, 0x32, 0x22,
+- 0x36, 0x35, 0x31, 0x27, 0x22, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x23, 0x2a, 0x2f, 0x22,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x26, 0x38, 0x38, 0x35, 0x25,
+- 0x36, 0x21, 0x2d, 0x2b, 0x24, 0x21, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x21, 0x24, 0x39, 0x39, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x25, 0x2b, 0x30, 0x28, 0x22,
+- 0x36, 0x36, 0x27, 0x34, 0x30, 0x23, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x21, 0x26, 0x2d, 0x26, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x22, 0x22, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x2d, 0x33, 0x28, 0x21, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x23, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x2b, 0x2c, 0x25, 0x21, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x2a, 0x34, 0x36, 0x36,
+- 0x36, 0x21, 0x22, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x21, 0x23, 0x22, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x28, 0x34, 0x27, 0x22, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x36,
+- 0x21, 0x21, 0x24, 0x27, 0x21, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x28, 0x27, 0x22, 0x33, 0x24, 0x36,
+- 0x36, 0x36, 0x36, 0x22, 0x2f, 0x2a, 0x23, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x36,
+- 0x30, 0x3a, 0x38, 0x24, 0x24, 0x36, 0x36, 0x36,
+- 0x23, 0x2f, 0x3b, 0x3c, 0x3d, 0x30, 0x25, 0x21,
+- 0x36, 0x36, 0x36, 0x36, 0x2f, 0x32, 0x23, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x23,
+- 0x3e, 0x3f, 0x40, 0x3a, 0x22, 0x36, 0x36, 0x21,
+- 0x41, 0x42, 0x43, 0x44, 0x45, 0x3e, 0x23, 0x21,
+- 0x36, 0x36, 0x36, 0x36, 0x2f, 0x33, 0x28, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x29, 0x20, 0x29, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x2b,
+- 0x44, 0x40, 0x46, 0x47, 0x35, 0x36, 0x36, 0x26,
+- 0x43, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x2e, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x31, 0x35, 0x24, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x32, 0x34, 0x36, 0x4d,
+- 0x4e, 0x25, 0x2f, 0x46, 0x4a, 0x22, 0x23, 0x32,
+- 0x4f, 0x50, 0x21, 0x31, 0x51, 0x52, 0x53, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x31, 0x35, 0x24, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x29, 0x20, 0x29, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x2a, 0x2f, 0x21, 0x3a,
+- 0x4d, 0x21, 0x31, 0x54, 0x55, 0x28, 0x30, 0x2b,
+- 0x4b, 0x4d, 0x36, 0x23, 0x32, 0x50, 0x3f, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x2e, 0x39, 0x24, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x29, 0x20, 0x29, 0x20, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x2a, 0x38, 0x23, 0x37,
+- 0x55, 0x36, 0x28, 0x3a, 0x56, 0x57, 0x57, 0x58,
+- 0x3c, 0x4d, 0x36, 0x36, 0x36, 0x40, 0x40, 0x21,
+- 0x36, 0x36, 0x36, 0x36, 0x2e, 0x39, 0x24, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x29, 0x29, 0x29, 0x20, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x30, 0x51, 0x23, 0x35,
+- 0x43, 0x25, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e,
+- 0x5f, 0x60, 0x61, 0x36, 0x31, 0x47, 0x3b, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x31, 0x2c, 0x25, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x23, 0x22,
+- 0x40, 0x62, 0x63, 0x5d, 0x64, 0x65, 0x66, 0x67,
+- 0x68, 0x69, 0x66, 0x5e, 0x6a, 0x6b, 0x2a, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x33, 0x2e, 0x26, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x27, 0x2f, 0x23, 0x36,
+- 0x6c, 0x63, 0x6d, 0x64, 0x5c, 0x66, 0x69, 0x6e,
+- 0x6f, 0x70, 0x71, 0x69, 0x69, 0x72, 0x6c, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x33, 0x34, 0x27, 0x22,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x27, 0x34, 0x26, 0x73,
+- 0x74, 0x75, 0x76, 0x64, 0x65, 0x77, 0x69, 0x78,
+- 0x70, 0x71, 0x71, 0x71, 0x72, 0x5f, 0x5e, 0x21,
+- 0x36, 0x36, 0x36, 0x36, 0x25, 0x38, 0x2a, 0x23,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x26, 0x2d, 0x33, 0x79,
+- 0x63, 0x7a, 0x7b, 0x5c, 0x66, 0x69, 0x6e, 0x7c,
+- 0x71, 0x71, 0x69, 0x7d, 0x7e, 0x7a, 0x7f, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x21, 0x51, 0x2b, 0x28,
+- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x26, 0x2d, 0x32, 0x24,
+- 0x80, 0x81, 0x64, 0x82, 0x77, 0x69, 0x71, 0x71,
+- 0x69, 0x83, 0x84, 0x85, 0x7a, 0x85, 0x86, 0x36,
+- 0x21, 0x2b, 0x23, 0x36, 0x36, 0x39, 0x2e, 0x26,
+- 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x27, 0x2d, 0x33, 0x21,
+- 0x87, 0x88, 0x89, 0x72, 0x67, 0x66, 0x5f, 0x89,
+- 0x8a, 0x63, 0x85, 0x8b, 0x8c, 0x8d, 0x41, 0x36,
+- 0x36, 0x2d, 0x3a, 0x35, 0x36, 0x24, 0x51, 0x32,
+- 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x33, 0x21,
+- 0x55, 0x8e, 0x8f, 0x8a, 0x7d, 0x5e, 0x90, 0x7e,
+- 0x75, 0x75, 0x90, 0x62, 0x40, 0x3f, 0x49, 0x23,
+- 0x36, 0x24, 0x3a, 0x3a, 0x24, 0x36, 0x2e, 0x31,
+- 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x21, 0x28, 0x33, 0x37, 0x25, 0x22,
+- 0x3b, 0x50, 0x8e, 0x8f, 0x90, 0x7e, 0x90, 0x63,
+- 0x74, 0x91, 0x92, 0x42, 0x93, 0x4b, 0x45, 0x2c,
+- 0x36, 0x36, 0x33, 0x39, 0x21, 0x36, 0x22, 0x51,
+- 0x33, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x22, 0x27, 0x2e, 0x2e, 0x36, 0x21,
+- 0x94, 0x3f, 0x50, 0x95, 0x96, 0x8f, 0x8f, 0x97,
+- 0x8e, 0x42, 0x50, 0x43, 0x47, 0x48, 0x48, 0x98,
+- 0x21, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x39,
+- 0x2e, 0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x22, 0x24, 0x2b, 0x38, 0x28, 0x36, 0x32,
+- 0x4c, 0x4b, 0x50, 0x50, 0x50, 0x42, 0x42, 0x50,
+- 0x50, 0x40, 0x45, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x34, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x23,
+- 0x2f, 0x2b, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x21, 0x28, 0x32, 0x51, 0x32, 0x28, 0x21, 0x98,
+- 0x48, 0x47, 0x9a, 0x50, 0x50, 0x50, 0x50, 0x50,
+- 0x9a, 0x4f, 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x93, 0x23, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x2a, 0x2f, 0x2a, 0x28, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x23, 0x30, 0x2e, 0x2c, 0x36, 0x21, 0x51, 0x9b,
+- 0x48, 0x48, 0x52, 0x3f, 0x50, 0x50, 0x40, 0x4b,
+- 0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x34, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x2d, 0x31, 0x27, 0x23, 0x21, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23,
+- 0x27, 0x2c, 0x2d, 0x21, 0x36, 0x28, 0x44, 0x48,
+- 0x48, 0x48, 0x48, 0x47, 0x46, 0x4f, 0x47, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x9c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x28, 0x51, 0x39, 0x26, 0x22, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x25,
+- 0x35, 0x51, 0x28, 0x36, 0x36, 0x9d, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x9b, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x4f, 0x28, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x28, 0x38, 0x2b, 0x25, 0x22, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, 0x33,
+- 0x51, 0x25, 0x36, 0x36, 0x23, 0x40, 0x9b, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x9b, 0x99, 0x2b, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x30, 0x2f, 0x33, 0x24, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x21, 0x23, 0x30, 0x34,
+- 0x27, 0x36, 0x36, 0x36, 0x2a, 0x40, 0x47, 0x48,
+- 0x48, 0x48, 0x48, 0x9b, 0x99, 0x99, 0x9b, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x9b, 0x47, 0x52,
+- 0x46, 0x4f, 0x37, 0x21, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x30, 0x34, 0x2a, 0x23,
+- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x22, 0x25, 0x39, 0x2c,
+- 0x36, 0x36, 0x36, 0x21, 0x31, 0x4e, 0x9a, 0x4c,
+- 0x47, 0x9b, 0x9b, 0x52, 0x46, 0x4f, 0x52, 0x9b,
+- 0x9b, 0x9b, 0x47, 0x4f, 0x45, 0x9a, 0x93, 0x93,
+- 0x3f, 0x93, 0x98, 0x28, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x39, 0x2c, 0x26,
+- 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x23, 0x2a, 0x34, 0x28,
+- 0x36, 0x36, 0x36, 0x22, 0x38, 0x98, 0x44, 0x99,
+- 0x9b, 0x48, 0x48, 0x9b, 0x4c, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x47, 0x52, 0x46, 0x43, 0x93,
+- 0x40, 0x40, 0x43, 0x53, 0x21, 0x23, 0x33, 0x23,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x2f, 0x32,
+- 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x21, 0x24, 0x2b, 0x31, 0x36,
+- 0x36, 0x22, 0x36, 0x24, 0x9e, 0x4f, 0x9b, 0x48,
+- 0x48, 0x48, 0x48, 0x9b, 0x99, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x47,
+- 0x4f, 0x9a, 0x3f, 0x46, 0x38, 0x36, 0x21, 0x30,
+- 0x26, 0x36, 0x36, 0x36, 0x36, 0x36, 0x39, 0x2c,
+- 0x25, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x26, 0x2e, 0x33, 0x36,
+- 0x25, 0x25, 0x36, 0x4d, 0x52, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x47, 0x44, 0x93, 0x43, 0x23, 0x36, 0x36,
+- 0x26, 0x24, 0x36, 0x36, 0x36, 0x36, 0x28, 0x2f,
+- 0x2a, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x2a, 0x51, 0x24, 0x36,
+- 0x2a, 0x36, 0x28, 0x44, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x9b, 0x4b, 0x44, 0x37, 0x36, 0x23,
+- 0x28, 0x30, 0x22, 0x36, 0x36, 0x36, 0x36, 0x2d,
+- 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x21, 0x28, 0x2b, 0x34, 0x36, 0x25,
+- 0x24, 0x36, 0x4a, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x9b, 0x52, 0x3f, 0x21, 0x30,
+- 0x35, 0x25, 0x30, 0x36, 0x36, 0x36, 0x36, 0x32,
+- 0x2d, 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x22, 0x26, 0x2e, 0x35, 0x36, 0x2a,
+- 0x36, 0x24, 0x4f, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x9b, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x47, 0x32, 0x30,
+- 0x2a, 0x23, 0x30, 0x23, 0x36, 0x36, 0x36, 0x21,
+- 0x2f, 0x32, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x21, 0x23, 0x2a, 0x51, 0x28, 0x28, 0x25,
+- 0x36, 0x3a, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x9b, 0x52, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x38, 0x21,
+- 0x36, 0x36, 0x22, 0x27, 0x36, 0x36, 0x36, 0x36,
+- 0x2e, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x22, 0x25, 0x2c, 0x34, 0x36, 0x30, 0x21,
+- 0x23, 0x43, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x47, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x94, 0x36,
+- 0x36, 0x36, 0x36, 0x32, 0x36, 0x36, 0x36, 0x36,
+- 0x2a, 0x2e, 0x26, 0x22, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x21, 0x23, 0x2a, 0x51, 0x25, 0x21, 0x2a, 0x36,
+- 0x2e, 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x99, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x98, 0x36,
+- 0x36, 0x36, 0x36, 0x32, 0x36, 0x36, 0x36, 0x36,
+- 0x22, 0x2f, 0x30, 0x22, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x22, 0x25, 0x2c, 0x34, 0x36, 0x24, 0x28, 0x36,
+- 0x54, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4c, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x9a, 0x36,
+- 0x36, 0x36, 0x36, 0x30, 0x36, 0x36, 0x36, 0x36,
+- 0x21, 0x2f, 0x32, 0x23, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x28, 0x32, 0x2f, 0x28, 0x36, 0x27, 0x22, 0x21,
+- 0x43, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4c, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4b, 0x21,
+- 0x36, 0x36, 0x21, 0x26, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x34, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x25, 0x2c, 0x39, 0x36, 0x36, 0x30, 0x22, 0x25,
+- 0x52, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x52, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4f, 0x21,
+- 0x36, 0x36, 0x22, 0x26, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x2c, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x30, 0x2d, 0x21, 0x36, 0x36, 0x32, 0x23, 0x2a,
+- 0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4c, 0x22,
+- 0x36, 0x36, 0x24, 0x23, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x2c, 0x39, 0x24, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
+- 0x33, 0x2e, 0x36, 0x36, 0x23, 0x31, 0x27, 0x39,
+- 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x47, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4c, 0x23,
+- 0x36, 0x36, 0x26, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x2c, 0x39, 0x24, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
+- 0x2b, 0x39, 0x36, 0x36, 0x36, 0x26, 0x32, 0x31,
+- 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x47, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x46, 0x22,
+- 0x36, 0x21, 0x26, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x2c, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24,
+- 0x35, 0x39, 0x36, 0x36, 0x36, 0x36, 0x26, 0x2d,
+- 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x47, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x9a, 0x36,
+- 0x24, 0x27, 0x9f, 0x24, 0x25, 0x28, 0x21, 0x36,
+- 0x36, 0x34, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x25,
+- 0x39, 0x4d, 0xa0, 0x84, 0x81, 0x57, 0x21, 0x39,
+- 0x52, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x47, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x53, 0x28,
+- 0x23, 0x36, 0x36, 0x36, 0x21, 0x28, 0x2c, 0x30,
+- 0x21, 0x38, 0x33, 0x28, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x21, 0x22, 0x22, 0x28, 0x30,
+- 0x2d, 0xa1, 0x7a, 0xa2, 0xa3, 0xa3, 0x7f, 0x22,
+- 0x51, 0x52, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x9b, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0xa4, 0xa5, 0xa5, 0xa6, 0x61,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x30, 0x32,
+- 0x25, 0x4d, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x21, 0x23, 0x24, 0x26, 0x30, 0x33, 0x31,
+- 0x4d, 0x91, 0x5b, 0xa2, 0xa3, 0xa3, 0xa3, 0x5a,
+- 0x21, 0x2e, 0x46, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x9b, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0xa7, 0xa8, 0x69, 0x66, 0xa9,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x26, 0x25,
+- 0x83, 0xaa, 0x2c, 0x25, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x21, 0x28, 0x30, 0x35, 0x2d, 0x2f, 0x37, 0x4a,
+- 0x60, 0x85, 0xab, 0xac, 0xa3, 0xa3, 0xa3, 0x82,
+- 0x86, 0x36, 0x32, 0x3f, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4c, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0xad, 0xa2, 0xa8, 0xae, 0xaf,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x57,
+- 0x77, 0x66, 0x34, 0x27, 0x22, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x23, 0x30, 0x31, 0xb0, 0x91, 0x7e, 0x90, 0x90,
+- 0x8b, 0x5b, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0x5d, 0xb1, 0x36, 0x24, 0x53, 0x9b, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x9b, 0x99, 0xad, 0x64, 0x5c, 0x8b, 0xb1,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x73, 0x5d,
+- 0x82, 0x5c, 0xb2, 0x2a, 0x23, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x24, 0x2b, 0xb0, 0x8b, 0x5b, 0x76, 0x5b, 0x5b,
+- 0x7b, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa8, 0x5e, 0x22, 0x36, 0x21, 0x3a, 0x99, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x4f, 0x3f, 0xb3, 0x7b, 0x7b, 0x85, 0x80,
+- 0x9f, 0x36, 0x36, 0x36, 0x21, 0xb4, 0x7e, 0x7b,
+- 0x64, 0x64, 0xb5, 0x35, 0x24, 0x21, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x26, 0x31, 0xb6, 0x5b, 0x64, 0xa2, 0xa2, 0xac,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0x66, 0xb7, 0x36, 0x36, 0x36, 0x2c, 0x4b,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x9a, 0x3f, 0xb8, 0x76, 0x76, 0x7a, 0x63,
+- 0xb9, 0xba, 0x86, 0xba, 0xbb, 0x90, 0x5b, 0x64,
+- 0xa2, 0xa2, 0xbc, 0x2d, 0x27, 0x23, 0x21, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x26, 0x2d, 0x91, 0x5b, 0x64, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa8, 0x83, 0xaf, 0x36, 0x36, 0x36, 0x30,
+- 0x44, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x9b, 0x9a, 0x3f, 0xbd, 0x5b, 0x7b, 0xbe, 0x85,
+- 0x7e, 0x90, 0x63, 0x90, 0x85, 0x5b, 0xa2, 0xa3,
+- 0xa3, 0xac, 0x5d, 0xb5, 0x39, 0x26, 0x23, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x26, 0x2d, 0xbf, 0xbe, 0x64, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa8, 0x88, 0x36, 0x36, 0x36, 0x36,
+- 0x2d, 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x9b, 0x45, 0x3f, 0xc0, 0x6d, 0x7b, 0xab, 0xbe,
+- 0x7a, 0x8b, 0x8b, 0x7a, 0x5b, 0x64, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa2, 0xc1, 0x37, 0x35, 0x26, 0x23,
+- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x26, 0x2e, 0xbf, 0x7a, 0x7b, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa8, 0x72, 0x73, 0x36, 0x36, 0x36,
+- 0x24, 0x52, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x46, 0x42, 0xb6, 0x7a, 0x7b, 0x64, 0x7b,
+- 0x76, 0x5b, 0x5b, 0x76, 0x7b, 0xa2, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xac, 0x64, 0xc1, 0x4d, 0x2c, 0x27,
+- 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x25, 0x31, 0xc2, 0x8b, 0x7b, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa8, 0x89, 0x9f, 0x36, 0x36,
+- 0x32, 0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x4b, 0x2f, 0x8f, 0x7a, 0x7b, 0xa2, 0xac,
+- 0xa2, 0x64, 0x64, 0xa2, 0xa2, 0xac, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0x5d, 0xc3, 0x2c,
+- 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x25, 0x31, 0xc2, 0x85, 0x7b, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0x66, 0x57, 0x27, 0x4d,
+- 0x4b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x99, 0x34, 0x9f, 0xb9, 0x7a, 0x7b, 0xa2, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0xc2,
+- 0x32, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x26, 0x2d, 0xc2, 0x85, 0x7b, 0xac, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa8, 0x5f, 0x92, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x44,
+- 0x35, 0x36, 0xaf, 0xbb, 0x7a, 0x7b, 0xac, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xac, 0xa2, 0xc0,
+- 0x2b, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23,
+- 0x30, 0x2f, 0xb6, 0x8b, 0x7b, 0xac, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0x66, 0x89, 0x45,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x9b, 0x4e, 0x25,
+- 0x36, 0x36, 0x61, 0xb9, 0x6d, 0x64, 0xac, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xac, 0x7b, 0xbe, 0xc3,
+- 0x32, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
+- 0x33, 0xc4, 0x63, 0xbe, 0xa2, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0x72, 0x81, 0xc5,
+- 0x46, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x3f, 0x2c, 0x36, 0x36,
+- 0x36, 0x36, 0xc6, 0x8f, 0x6d, 0x64, 0xac, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa2, 0xab, 0x8b, 0xb0, 0x2c,
+- 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24,
+- 0x35, 0x96, 0x75, 0xab, 0xa2, 0xac, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xac, 0x7b, 0x81, 0xb9,
+- 0x73, 0x3b, 0x44, 0x9b, 0x48, 0x48, 0x48, 0x9b,
+- 0x99, 0x43, 0x94, 0x2c, 0x21, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x73, 0xb9, 0x7a, 0x7b, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0x64, 0x76, 0x7a, 0x91, 0xb5, 0x31, 0x30,
+- 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24,
+- 0x39, 0x97, 0x75, 0xbe, 0x7b, 0x64, 0xa2, 0xa2,
+- 0xac, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0x7b, 0x7a, 0xc7,
+- 0xc8, 0x36, 0x21, 0x26, 0x2b, 0x39, 0x33, 0x30,
+- 0x23, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x21, 0xc8, 0xbb, 0x8b, 0x7b, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0x64, 0x64,
+- 0x76, 0x85, 0xbf, 0xb5, 0x34, 0x2b, 0x27, 0x28,
+- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
+- 0x33, 0xc9, 0x63, 0x7e, 0x7a, 0x6d, 0xbe, 0x5b,
+- 0x76, 0x7b, 0x64, 0x64, 0xa2, 0xac, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xac, 0x76, 0x85, 0xb9,
+- 0x79, 0x22, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x21, 0xca, 0xbb, 0x75, 0x76, 0xa2, 0xa3,
+- 0xa3, 0xa3, 0xac, 0xa2, 0x64, 0x76, 0xbe, 0x8b,
+- 0xb6, 0xb5, 0x2f, 0x35, 0x30, 0x24, 0x22, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23,
+- 0x27, 0x31, 0xcb, 0xc9, 0xbb, 0x74, 0x63, 0x90,
+- 0x7e, 0x75, 0x8b, 0x6d, 0xbe, 0x76, 0x64, 0xa2,
+- 0xac, 0xac, 0xac, 0xac, 0x64, 0x7a, 0x84, 0xcc,
+- 0x79, 0x9f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x21, 0xc8, 0xcc, 0x63, 0x6d, 0x7b, 0x64,
+- 0xac, 0xa2, 0x64, 0x7b, 0xbe, 0x75, 0x63, 0x96,
+- 0x38, 0x39, 0x2a, 0x24, 0x23, 0x21, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x28, 0x27, 0x35, 0x2d, 0x41, 0xb5, 0xc5, 0x8f,
+- 0xb9, 0xbb, 0xc7, 0x74, 0x84, 0x90, 0x85, 0x6d,
+- 0x5b, 0x7b, 0x7b, 0xab, 0x6d, 0x90, 0xb9, 0xcd,
+- 0xca, 0x22, 0x36, 0x36, 0x28, 0x30, 0x30, 0x30,
+- 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x25, 0x36,
+- 0x36, 0x21, 0xb4, 0x80, 0xc7, 0x7e, 0x6d, 0x76,
+- 0xab, 0x76, 0x6d, 0x85, 0x63, 0xb9, 0xb5, 0x34,
+- 0x33, 0x26, 0x23, 0x21, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x21, 0x23, 0x24, 0x27, 0x2a, 0x35, 0x2e, 0x2f,
+- 0x41, 0xce, 0xcf, 0x6c, 0x80, 0xcc, 0xb9, 0x74,
+- 0x84, 0x90, 0x75, 0x7e, 0x74, 0x8f, 0xcd, 0x79,
+- 0xc6, 0x2b, 0x9d, 0x41, 0x2f, 0x34, 0x2d, 0x2d,
+- 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x34, 0x2f, 0x38,
+- 0x4d, 0x37, 0xd0, 0xd1, 0x8f, 0x74, 0x63, 0x7e,
+- 0x75, 0x7e, 0x63, 0xc7, 0x88, 0xc4, 0x31, 0x2a,
+- 0x24, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x21, 0x22, 0x23, 0x24, 0x26, 0x30,
+- 0x33, 0x39, 0x2e, 0x51, 0x41, 0xb2, 0x6c, 0xd1,
+- 0x80, 0xcc, 0xcc, 0xcc, 0xd2, 0xd1, 0xb7, 0xd3,
+- 0x41, 0x34, 0x35, 0x32, 0x30, 0x27, 0x27, 0x27,
+- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x30, 0x2a,
+- 0x2b, 0x34, 0xd4, 0xca, 0xd5, 0x8f, 0xbb, 0xc7,
+- 0xc7, 0xbb, 0xcc, 0x6c, 0x41, 0x39, 0x27, 0x28,
+- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22,
+- 0x28, 0x24, 0x26, 0x2a, 0x33, 0x2c, 0x2f, 0x41,
+- 0xd6, 0xb7, 0x79, 0x79, 0x79, 0xca, 0xd7, 0x51,
+- 0x39, 0x30, 0x24, 0x23, 0x22, 0x22, 0x22, 0x22,
+- 0x22, 0x22, 0x21, 0x22, 0x22, 0x22, 0x22, 0x23,
+- 0x24, 0x2a, 0x31, 0xd8, 0xc8, 0x79, 0xd1, 0x80,
+- 0xd5, 0xba, 0xd9, 0x2f, 0x35, 0x26, 0x23, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x21, 0x22, 0x23, 0x28, 0x25, 0x30, 0x2b,
+- 0x31, 0x2f, 0xd4, 0xd8, 0xd8, 0x2f, 0x2e, 0x33,
+- 0x26, 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x21, 0x28, 0x27, 0x35, 0x34, 0xd8, 0xd8, 0xd8,
+- 0xda, 0xd4, 0x2e, 0x33, 0x25, 0x23, 0x21, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x23, 0x28,
+- 0x26, 0x30, 0x32, 0x2b, 0x33, 0x2a, 0x26, 0x28,
+- 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x21, 0x23, 0x25, 0x30, 0x33, 0x35, 0x35,
+- 0x2b, 0x2a, 0x26, 0x28, 0x22, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x21, 0x22, 0x23, 0x28, 0x28, 0x23, 0x22, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x21, 0x23, 0x28, 0x24, 0x24,
+- 0x28, 0x23, 0x22, 0x21, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x23, 0x33, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x23, 0x61, 0x62, 0x2B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x35, 0x61, 0x63, 0x64, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x65, 0x66, 0x66, 0x67, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3B,
++ 0x3B, 0x68, 0x64, 0x69, 0x62, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x22, 0x23, 0x23, 0x55, 0x6A, 0x6B,
++ 0x6C, 0x6D, 0x6E, 0x6F, 0x6F, 0x33, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23,
++ 0x22, 0x23, 0x35, 0x33, 0x3B, 0x70, 0x71, 0x72,
++ 0x73, 0x74, 0x75, 0x76, 0x77, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x23, 0x23, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x23, 0x55,
++ 0x2B, 0x34, 0x34, 0x42, 0x70, 0x71, 0x73, 0x78,
++ 0x78, 0x78, 0x79, 0x7A, 0x7B, 0x34, 0x22, 0x21,
++ 0x55, 0x33, 0x23, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x22, 0x3B, 0x7C, 0x7D, 0x7E, 0x34, 0x35,
++ 0x21, 0x21, 0x21, 0x21, 0x35, 0x3B, 0x4C, 0x3C,
++ 0x42, 0x3F, 0x56, 0x7F, 0x71, 0x74, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x79, 0x80, 0x81, 0x3C, 0x82,
++ 0x83, 0x62, 0x61, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x23, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A,
++ 0x3B, 0x21, 0x55, 0x55, 0x2B, 0x34, 0x39, 0x3F,
++ 0x2A, 0x57, 0x8B, 0x72, 0x74, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x75, 0x8C, 0x6F, 0x63,
++ 0x63, 0x66, 0x61, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x84, 0x85, 0x86, 0x8D, 0x88, 0x8E, 0x8F, 0x5E,
++ 0x3C, 0x34, 0x3B, 0x34, 0x3F, 0x2A, 0x58, 0x57,
++ 0x52, 0x46, 0x6C, 0x73, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x79, 0x7A, 0x6E, 0x69,
++ 0x69, 0x90, 0x34, 0x33, 0x22, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23,
++ 0x91, 0x92, 0x8D, 0x87, 0x8E, 0x93, 0x8A, 0x35,
++ 0x94, 0x95, 0x96, 0x56, 0x32, 0x32, 0x52, 0x5C,
++ 0x4D, 0x82, 0x72, 0x78, 0x78, 0x78, 0x78, 0x79,
++ 0x97, 0x78, 0x78, 0x78, 0x78, 0x75, 0x6D, 0x6F,
++ 0x62, 0x65, 0x34, 0x4C, 0x33, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x2B,
++ 0x91, 0x86, 0x87, 0x88, 0x93, 0x98, 0x60, 0x3F,
++ 0x99, 0x9A, 0x9A, 0x9B, 0x9C, 0x57, 0x5C, 0x36,
++ 0x9D, 0x9E, 0x6D, 0x78, 0x78, 0x78, 0x97, 0x6E,
++ 0x9F, 0x78, 0x78, 0x78, 0x78, 0x79, 0x80, 0xA0,
++ 0x61, 0x51, 0x51, 0x3C, 0x4C, 0x55, 0x35, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x3B, 0x22,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x4C,
++ 0xA1, 0x8D, 0x88, 0x8E, 0xA2, 0xA3, 0x94, 0x42,
++ 0x51, 0xA4, 0x9A, 0x9A, 0x9A, 0xA5, 0x9C, 0x2A,
++ 0xA6, 0x74, 0x8C, 0x75, 0x97, 0xA7, 0x76, 0x75,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x75, 0x6E,
++ 0x46, 0x52, 0x56, 0x3F, 0x42, 0x34, 0x33, 0x35,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x22, 0x21, 0x21, 0x22,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x52, 0x3A,
++ 0x5A, 0x53, 0x53, 0x29, 0x43, 0x50, 0x53, 0x5A,
++ 0x5A, 0x29, 0x5A, 0x43, 0x53, 0x5D, 0x44, 0x2A,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x55,
++ 0x7D, 0x87, 0x8E, 0x93, 0xA8, 0xA9, 0xAA, 0x2A,
++ 0x57, 0x94, 0xA4, 0x9B, 0xAB, 0xAC, 0x9A, 0x9B,
++ 0xAD, 0x76, 0x79, 0x78, 0x75, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x75, 0x6D,
++ 0x46, 0x5C, 0x57, 0x56, 0x51, 0x42, 0x4C, 0x55,
++ 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x23, 0x24, 0x25, 0x26, 0x26, 0x27, 0x28, 0x27,
++ 0x29, 0x2A, 0x2B, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x38, 0x30,
++ 0x59, 0x3D, 0x3D, 0x3D, 0x27, 0x27, 0x26, 0x5D,
++ 0x27, 0x27, 0x54, 0x37, 0x2E, 0x4A, 0x36, 0x2B,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0xAE, 0x88, 0xAF, 0xB0, 0xAA, 0x2A, 0x39, 0x34,
++ 0x4C, 0x5C, 0x58, 0xB1, 0xB2, 0xB3, 0xAB, 0xA5,
++ 0x9A, 0xB4, 0xB5, 0x8C, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x79, 0x80,
++ 0xB6, 0x38, 0x5C, 0x57, 0x56, 0x3F, 0x42, 0x3B,
++ 0x55, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23,
++ 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x32,
++ 0x31, 0x2C, 0x26, 0x2C, 0x33, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x34,
++ 0x32, 0x2B, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x33,
++ 0x33, 0x55, 0x55, 0x55, 0x23, 0x23, 0x35, 0x23,
++ 0x23, 0x35, 0x2B, 0x4E, 0x4F, 0x2A, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x55, 0x38, 0x25,
++ 0x2C, 0x52, 0x34, 0x22, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x22, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x55, 0x8A, 0x8F, 0x39, 0x34, 0x3C, 0x57, 0x32,
++ 0x46, 0x42, 0x52, 0x4A, 0x51, 0xAA, 0xB7, 0xB3,
++ 0xAB, 0xAC, 0xAC, 0xB8, 0xB9, 0x79, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x79, 0x7A,
++ 0xBA, 0x70, 0x7B, 0xBB, 0x82, 0x56, 0x3F, 0x34,
++ 0x4C, 0x55, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35, 0x36,
++ 0x2D, 0x37, 0x38, 0x2A, 0x2B, 0x21, 0x21, 0x21,
++ 0x21, 0x22, 0x39, 0x3A, 0x2C, 0x3B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x33, 0x3C, 0x22, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x24, 0x3D,
++ 0x3E, 0x25, 0x3C, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x33, 0x29, 0x26, 0x2A, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x54, 0x3E, 0x28,
++ 0x28, 0x59, 0x59, 0x48, 0x51, 0x3F, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x2B, 0x56, 0x4D, 0x29, 0x5B, 0x34,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x55, 0x60, 0x3F, 0x42, 0x51, 0x32, 0x52,
++ 0x40, 0x38, 0x40, 0x46, 0x42, 0xBC, 0xBD, 0xBE,
++ 0xBF, 0x9B, 0xAB, 0x9B, 0xC0, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x75,
++ 0xA7, 0x63, 0x63, 0x66, 0x6F, 0x58, 0x56, 0x39,
++ 0x34, 0x2B, 0x23, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x24, 0x2F,
++ 0x3D, 0x3F, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x40, 0x41, 0x3B, 0x21,
++ 0x21, 0x22, 0x42, 0x38, 0x43, 0x44, 0x3A, 0x45,
++ 0x34, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x46, 0x30, 0x47,
++ 0x2A, 0x48, 0x48, 0x21, 0x21, 0x21, 0x21, 0x22,
++ 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x22, 0x34, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x22, 0x4D, 0x44, 0x2A, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x50, 0x4A, 0x57, 0x35,
++ 0x35, 0x2B, 0x56, 0x27, 0x4B, 0x5D, 0x35, 0x21,
++ 0x21, 0x21, 0x21, 0x3B, 0x52, 0x23, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x2B,
++ 0x55, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3B, 0x38,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x33,
++ 0x3C, 0x42, 0x21, 0x33, 0x24, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x33,
++ 0x2B, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x33, 0x38, 0x59, 0x37, 0x27, 0x27, 0x4A, 0x47,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x23, 0x4C, 0x4C, 0x2A, 0x56, 0x46, 0x31,
++ 0x4D, 0x36, 0x50, 0x5A, 0x35, 0xC1, 0xC1, 0xC2,
++ 0xC3, 0xB7, 0xB3, 0xBE, 0x76, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x75,
++ 0x6D, 0x62, 0x69, 0x6F, 0x58, 0x46, 0x32, 0x2A,
++ 0x39, 0x34, 0x35, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x3B, 0x44, 0x49,
++ 0x31, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x23, 0x29, 0x48, 0x22,
++ 0x42, 0x3A, 0x4A, 0x49, 0x4B, 0x2E, 0x4B, 0x3E,
++ 0x4A, 0x2C, 0x34, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x30, 0x40, 0x22,
++ 0x21, 0x32, 0x3A, 0x22, 0x21, 0x21, 0x21, 0x39,
++ 0x36, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22,
++ 0x31, 0x4F, 0x2A, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x31, 0x59, 0x2A, 0x22, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x55, 0x27, 0x24, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x4C, 0x44, 0x27, 0x35, 0x21,
++ 0x21, 0x21, 0x21, 0x2A, 0x26, 0x2B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3A,
++ 0x40, 0x21, 0x21, 0x21, 0x21, 0x21, 0x51, 0x49,
++ 0x35, 0x21, 0x21, 0x21, 0x21, 0x22, 0x58, 0x25,
++ 0x5A, 0x57, 0x21, 0x4C, 0x3D, 0x34, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x38,
++ 0x47, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x3A, 0x4B, 0x53, 0x56, 0x55, 0x33, 0x42, 0x56,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x55, 0x4C, 0x42, 0x2A, 0x57, 0x5C, 0x38,
++ 0x36, 0x47, 0x5A, 0xB6, 0x77, 0xC4, 0xC1, 0xC1,
++ 0xC4, 0xC5, 0xB7, 0xB9, 0x79, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x75,
++ 0x97, 0xC6, 0x68, 0x57, 0x4D, 0x38, 0x46, 0x32,
++ 0x51, 0x42, 0x2B, 0x35, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x4D, 0x2D, 0x38,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x4C, 0x4E, 0x3C,
++ 0x47, 0x4F, 0x50, 0x51, 0x3F, 0x44, 0x42, 0x34,
++ 0x52, 0x53, 0x28, 0x2A, 0x22, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x48, 0x54, 0x33, 0x21,
++ 0x23, 0x3A, 0x3A, 0x22, 0x21, 0x21, 0x21, 0x2A,
++ 0x26, 0x33, 0x21, 0x21, 0x21, 0x21, 0x23, 0x45,
++ 0x37, 0x3D, 0x41, 0x22, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x31,
++ 0x59, 0x3F, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3C, 0x28, 0x33, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x23, 0x27, 0x5B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3C, 0x54, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x4C, 0x4B,
++ 0x46, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3B, 0x49,
++ 0x2B, 0x21, 0x21, 0x21, 0x23, 0x40, 0x43, 0x32,
++ 0x35, 0x21, 0x21, 0x33, 0x28, 0x4C, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x4F,
++ 0x5B, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x50,
++ 0x44, 0x39, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x23, 0x3B, 0x34, 0x3F, 0x58, 0x46, 0x40, 0x36,
++ 0x50, 0x41, 0x4D, 0xC7, 0x65, 0xC2, 0xC1, 0xC1,
++ 0xC8, 0xBF, 0xB1, 0x97, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x79,
++ 0x80, 0xC9, 0x36, 0x50, 0x36, 0x38, 0x31, 0x32,
++ 0x56, 0x39, 0x34, 0x33, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x2B, 0x3D, 0x28, 0x35,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x40, 0x4D,
++ 0x55, 0x2B, 0x21, 0x21, 0x2B, 0x28, 0x3B, 0x21,
++ 0x21, 0x22, 0x52, 0x27, 0x56, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x23, 0x2A, 0x30, 0x3F, 0x21, 0x22,
++ 0x57, 0x44, 0x58, 0x21, 0x21, 0x21, 0x21, 0x56,
++ 0x37, 0x2B, 0x21, 0x21, 0x21, 0x21, 0x56, 0x3E,
++ 0x36, 0x2A, 0x59, 0x23, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x33, 0x50, 0x3D,
++ 0x42, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x40, 0x5A, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x56, 0x49, 0x24, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x42, 0x54, 0x33, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x4D, 0x59,
++ 0x55, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35, 0x4A,
++ 0x51, 0x21, 0x21, 0x33, 0x47, 0x47, 0x33, 0x21,
++ 0x21, 0x21, 0x21, 0x55, 0x27, 0x3B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x32, 0x4B,
++ 0x4C, 0x21, 0x21, 0x21, 0x21, 0x21, 0x34, 0x44,
++ 0x3F, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x33, 0x4C, 0x3C, 0x51, 0x57, 0x5C, 0x38, 0x38,
++ 0x9D, 0xCA, 0x61, 0xCB, 0xCC, 0xCD, 0xC4, 0xC8,
++ 0xA4, 0x9C, 0x76, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x79,
++ 0x7A, 0x7F, 0x41, 0x29, 0x47, 0x38, 0x40, 0x57,
++ 0x32, 0x51, 0x42, 0x2B, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x57, 0x49, 0x32, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x57, 0x27,
++ 0x35, 0x21, 0x21, 0x21, 0x2B, 0x59, 0x2A, 0x21,
++ 0x21, 0x21, 0x21, 0x56, 0x54, 0x2B, 0x21, 0x21,
++ 0x21, 0x21, 0x4C, 0x2E, 0x5A, 0x23, 0x55, 0x5B,
++ 0x49, 0x3A, 0x22, 0x21, 0x21, 0x21, 0x21, 0x32,
++ 0x3E, 0x3B, 0x21, 0x21, 0x21, 0x35, 0x54, 0x53,
++ 0x23, 0x55, 0x4F, 0x55, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x25, 0x44, 0x42,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x23, 0x41, 0x46, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x23, 0x53, 0x2F, 0x2A, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x32, 0x28, 0x33, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x35, 0x59, 0x5B,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x54,
++ 0x57, 0x21, 0x35, 0x53, 0x47, 0x23, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3C, 0x44, 0x3B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x41, 0x43,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3F, 0x29,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x55, 0x4C, 0x3F, 0x2A, 0x46, 0x31, 0x36, 0x46,
++ 0x71, 0x97, 0xCE, 0xCB, 0xCF, 0xA4, 0x9C, 0xA4,
++ 0xAD, 0x76, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x80, 0x8C,
++ 0x7A, 0xA7, 0x36, 0x50, 0x3A, 0x36, 0x38, 0x52,
++ 0x32, 0x2A, 0x3F, 0x2B, 0x22, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x22, 0x5A, 0x5A, 0x23, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x52, 0x28,
++ 0x35, 0x21, 0x21, 0x21, 0x55, 0x30, 0x56, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x5B, 0x45, 0x21, 0x21,
++ 0x21, 0x21, 0x2B, 0x2E, 0x25, 0x47, 0x3D, 0x2D,
++ 0x25, 0x4C, 0x21, 0x21, 0x21, 0x21, 0x21, 0x39,
++ 0x44, 0x55, 0x21, 0x21, 0x21, 0x46, 0x59, 0x3B,
++ 0x21, 0x23, 0x30, 0x34, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x2A, 0x28, 0x4E, 0x42, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x3C, 0x3D, 0x42, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x51, 0x4B, 0x49, 0x39, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x5C, 0x25, 0x23, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x38, 0x4B, 0x3B,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x54,
++ 0x56, 0x21, 0x5B, 0x3A, 0x35, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x51, 0x59, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x32, 0x2D, 0x42,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x4C, 0x3A,
++ 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x2B, 0x3C, 0x39, 0x56, 0x46, 0x40, 0x36, 0xB6,
++ 0x73, 0x82, 0xCB, 0xD0, 0x75, 0xD1, 0xD2, 0xD1,
++ 0x8C, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x74, 0xCE,
++ 0x9E, 0x6E, 0xD3, 0xC6, 0x6F, 0x81, 0x38, 0x5C,
++ 0x52, 0x58, 0x39, 0x4C, 0x35, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x4C, 0x4A, 0x40, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x36, 0x3A,
++ 0x21, 0x21, 0x21, 0x21, 0x55, 0x27, 0x3F, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x25, 0x3B, 0x21,
++ 0x21, 0x21, 0x42, 0x2E, 0x2D, 0x2D, 0x26, 0x46,
++ 0x35, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x51,
++ 0x44, 0x55, 0x21, 0x21, 0x35, 0x25, 0x40, 0x21,
++ 0x21, 0x22, 0x4E, 0x58, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x39, 0x59, 0x38, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x56, 0x59, 0x23, 0x21, 0x21, 0x21,
++ 0x21, 0x4C, 0x54, 0x5B, 0x59, 0x4C, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x57, 0x3A, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x4D, 0x49, 0x26, 0x23,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x53,
++ 0x32, 0x51, 0x27, 0x42, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x42, 0x25, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x24, 0x37, 0x3E, 0x35,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x48,
++ 0x48, 0x33, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x33,
++ 0x3B, 0x39, 0x3F, 0x32, 0x5C, 0x38, 0x47, 0xD4,
++ 0x7A, 0xC7, 0xCB, 0xD0, 0x74, 0x80, 0x8C, 0x9F,
++ 0x80, 0x79, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x73, 0x72, 0xD5, 0xCA, 0x61, 0xD3, 0x40, 0x5C,
++ 0x46, 0x58, 0x51, 0x42, 0x33, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x39, 0x4B, 0x58, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x2A, 0x3D, 0x51,
++ 0x21, 0x21, 0x21, 0x21, 0x55, 0x28, 0x42, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x47, 0x52, 0x21,
++ 0x21, 0x21, 0x58, 0x59, 0x42, 0x3C, 0x35, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x57,
++ 0x4E, 0x23, 0x21, 0x22, 0x4D, 0x54, 0x35, 0x21,
++ 0x21, 0x21, 0x5A, 0x46, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x22, 0x56, 0x59, 0x36, 0x35, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x36, 0x5B, 0x21, 0x21, 0x21, 0x21,
++ 0x23, 0x53, 0x48, 0x3F, 0x27, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x24, 0x47, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x22, 0x40, 0x27, 0x29, 0x29, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x47,
++ 0x40, 0x41, 0x5C, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x39, 0x41, 0x23, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x32, 0x26, 0x47, 0x28, 0x22,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x2B,
++ 0x53, 0x28, 0x36, 0x42, 0x23, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x4C, 0x39, 0x58, 0x32, 0x31, 0x38, 0x47, 0xD4,
++ 0xCF, 0xD0, 0x6C, 0x9E, 0xD6, 0x6B, 0xD7, 0xD8,
++ 0xD7, 0x6B, 0xCF, 0x7B, 0x80, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x74, 0x72, 0xD0, 0xA6, 0x70, 0x51,
++ 0x46, 0x56, 0x51, 0x42, 0x55, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x5C, 0x27, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x32, 0x37, 0x54, 0x33,
++ 0x21, 0x21, 0x21, 0x21, 0x2B, 0x44, 0x2A, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x52, 0x2C, 0x21,
++ 0x21, 0x21, 0x47, 0x36, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x52,
++ 0x54, 0x23, 0x21, 0x24, 0x4F, 0x46, 0x21, 0x21,
++ 0x21, 0x21, 0x38, 0x2C, 0x22, 0x21, 0x21, 0x21,
++ 0x21, 0x42, 0x55, 0x21, 0x21, 0x21, 0x21, 0x33,
++ 0x45, 0x54, 0x56, 0x22, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x22, 0x53, 0x24, 0x21, 0x21, 0x21, 0x21,
++ 0x46, 0x5D, 0x4C, 0x52, 0x4E, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x31, 0x48, 0x22, 0x21, 0x21,
++ 0x21, 0x22, 0x46, 0x54, 0x3B, 0x45, 0x29, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x47,
++ 0x28, 0x28, 0x55, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x51, 0x41, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x56, 0x54, 0x39, 0x56, 0x28, 0x22,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x23, 0x34, 0x50, 0x30, 0x4E, 0x40, 0x34, 0x22,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x4C, 0x39, 0x58, 0x52, 0x5C, 0x38, 0x47, 0x9D,
++ 0xC9, 0xD9, 0xDA, 0xDB, 0xDC, 0xDC, 0xDC, 0xDC,
++ 0xDC, 0xDC, 0xDC, 0xDD, 0x6B, 0x7B, 0x75, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x74, 0x71, 0xD0, 0x3F,
++ 0x52, 0x57, 0x2A, 0x42, 0x2B, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x47, 0x3A, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x35, 0x45, 0x4A, 0x2C, 0x3B, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x2B, 0x30, 0x56, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x58, 0x29, 0x21,
++ 0x21, 0x21, 0x53, 0x3F, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x31,
++ 0x43, 0x22, 0x3B, 0x28, 0x48, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x56, 0x25, 0x35, 0x21, 0x21, 0x21,
++ 0x39, 0x54, 0x34, 0x21, 0x21, 0x21, 0x35, 0x3A,
++ 0x30, 0x57, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x33, 0x39, 0x21, 0x21,
++ 0x21, 0x35, 0x25, 0x3F, 0x21, 0x21, 0x21, 0x56,
++ 0x30, 0x58, 0x21, 0x24, 0x43, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x4D, 0x29, 0x22, 0x21, 0x21,
++ 0x22, 0x32, 0x26, 0x42, 0x21, 0x46, 0x2C, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x48,
++ 0x2E, 0x36, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x56, 0x28, 0x35, 0x21, 0x21,
++ 0x21, 0x3F, 0x27, 0x32, 0x21, 0x51, 0x25, 0x22,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x22, 0x39, 0x38, 0x25, 0x54, 0x50,
++ 0x58, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x33,
++ 0x4C, 0x3F, 0x56, 0x52, 0x31, 0x4D, 0x47, 0x39,
++ 0xD8, 0xDC, 0xDC, 0xDC, 0xDE, 0xDF, 0xDF, 0xDF,
++ 0xDF, 0xDF, 0xDE, 0xDE, 0xDC, 0xDD, 0xD6, 0x97,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x75, 0x97, 0x56,
++ 0x46, 0x57, 0x2A, 0x42, 0x2B, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x38, 0x29, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x35, 0x5B, 0x3D, 0x40, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x2B, 0x59, 0x3F, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x40, 0x5A, 0x21,
++ 0x21, 0x22, 0x5D, 0x34, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x5B,
++ 0x2C, 0x33, 0x29, 0x28, 0x3B, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x34, 0x59, 0x3C, 0x21, 0x21, 0x2B,
++ 0x53, 0x36, 0x22, 0x21, 0x21, 0x34, 0x5A, 0x28,
++ 0x3F, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x40, 0x41, 0x23, 0x21,
++ 0x21, 0x3B, 0x28, 0x2B, 0x21, 0x21, 0x2A, 0x44,
++ 0x38, 0x22, 0x21, 0x24, 0x50, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x50, 0x25, 0x23, 0x21, 0x23,
++ 0x45, 0x5D, 0x52, 0x21, 0x21, 0x40, 0x50, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x50,
++ 0x2D, 0x39, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x46, 0x30, 0x33, 0x21, 0x22,
++ 0x24, 0x4E, 0x45, 0x22, 0x21, 0x58, 0x25, 0x22,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x33, 0x3C, 0x48,
++ 0x27, 0x39, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x34, 0x3F, 0x58, 0x57, 0x31, 0x4D, 0x47, 0x56,
++ 0xDB, 0xDC, 0xDE, 0xE0, 0xE1, 0xE2, 0xE2, 0xE2,
++ 0xE2, 0xE2, 0xE1, 0xE3, 0xE4, 0xDE, 0xDC, 0x6B,
++ 0x8C, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x80, 0xA7, 0x38,
++ 0x46, 0x56, 0x2A, 0x39, 0x3B, 0x23, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x32, 0x44, 0x34, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x3F,
++ 0x4D, 0x41, 0x29, 0x42, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x2B, 0x44, 0x46, 0x34,
++ 0x2B, 0x55, 0x55, 0x2B, 0x56, 0x59, 0x36, 0x21,
++ 0x21, 0x22, 0x59, 0x2B, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x55, 0x5C, 0x21, 0x21, 0x21, 0x40,
++ 0x50, 0x4D, 0x4F, 0x32, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x55, 0x44, 0x31, 0x22, 0x3B, 0x5A,
++ 0x41, 0x55, 0x21, 0x35, 0x57, 0x4A, 0x2E, 0x48,
++ 0x57, 0x32, 0x3F, 0x55, 0x35, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x25, 0x47, 0x22, 0x21,
++ 0x21, 0x4C, 0x28, 0x35, 0x21, 0x34, 0x30, 0x3A,
++ 0x23, 0x21, 0x21, 0x58, 0x3A, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x4D, 0x4E, 0x35, 0x33, 0x48,
++ 0x44, 0x56, 0x21, 0x21, 0x21, 0x58, 0x41, 0x23,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x29,
++ 0x4A, 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x32, 0x44, 0x2B, 0x23, 0x45,
++ 0x3D, 0x31, 0x22, 0x21, 0x21, 0x4C, 0x27, 0x35,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x53, 0x53, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x34, 0x3F, 0x58, 0x57, 0x40, 0x38, 0x47, 0xD4,
++ 0xDC, 0xDE, 0xE0, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE2, 0xE1, 0xDF, 0xDC,
++ 0xE6, 0x8C, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x80, 0x2A, 0x40,
++ 0x46, 0x58, 0x2A, 0x42, 0x34, 0x34, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x2B, 0x54, 0x5A, 0x34, 0x23,
++ 0x35, 0x23, 0x35, 0x33, 0x2B, 0x24, 0x54, 0x4B,
++ 0x59, 0x5C, 0x23, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x4B, 0x44, 0x59,
++ 0x27, 0x26, 0x26, 0x4A, 0x3E, 0x41, 0x55, 0x21,
++ 0x21, 0x22, 0x41, 0x39, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x34, 0x53, 0x4D, 0x21, 0x21, 0x21, 0x5C,
++ 0x4B, 0x4F, 0x40, 0x22, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x48, 0x30, 0x50, 0x26, 0x54,
++ 0x34, 0x21, 0x55, 0x4E, 0x2D, 0x2F, 0x4F, 0x37,
++ 0x3E, 0x4B, 0x4B, 0x30, 0x27, 0x53, 0x2C, 0x57,
++ 0x42, 0x4C, 0x55, 0x22, 0x22, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x39, 0x4A, 0x3F, 0x21, 0x21,
++ 0x21, 0x55, 0x53, 0x55, 0x2A, 0x26, 0x54, 0x33,
++ 0x21, 0x21, 0x21, 0x51, 0x54, 0x3B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x51, 0x3D, 0x46, 0x5A, 0x4F,
++ 0x52, 0x21, 0x21, 0x21, 0x21, 0x22, 0x27, 0x31,
++ 0x33, 0x23, 0x42, 0x4C, 0x21, 0x21, 0x21, 0x5B,
++ 0x54, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3B, 0x44, 0x45, 0x48, 0x4B,
++ 0x38, 0x22, 0x21, 0x21, 0x21, 0x21, 0x53, 0x48,
++ 0x33, 0x23, 0x34, 0x3C, 0x22, 0x57, 0x4D, 0x33,
++ 0x21, 0x21, 0x21, 0x21, 0x22, 0x23, 0x34, 0x40,
++ 0x44, 0x31, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x3B, 0x42, 0x2A, 0x57, 0x31, 0x38, 0x5C, 0xD8,
++ 0xDC, 0xE4, 0xE2, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE2, 0xE0,
++ 0xDE, 0xCA, 0x9F, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x80, 0x76, 0x57, 0x5C,
++ 0x31, 0x6E, 0x34, 0x3C, 0xC9, 0x3B, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x33, 0x5B, 0x30, 0x25,
++ 0x5D, 0x5A, 0x53, 0x27, 0x26, 0x59, 0x36, 0x56,
++ 0x55, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x3D, 0x2A, 0x55,
++ 0x42, 0x51, 0x56, 0x24, 0x2A, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x45, 0x53, 0x3B, 0x22, 0x22, 0x35,
++ 0x46, 0x59, 0x54, 0x55, 0x21, 0x21, 0x21, 0x31,
++ 0x2D, 0x47, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x33, 0x50, 0x5D, 0x45, 0x55,
++ 0x21, 0x21, 0x34, 0x4F, 0x29, 0x58, 0x33, 0x4C,
++ 0x39, 0x3C, 0x2A, 0x40, 0x48, 0x54, 0x3D, 0x3D,
++ 0x37, 0x4A, 0x59, 0x29, 0x5B, 0x36, 0x52, 0x2A,
++ 0x42, 0x3C, 0x32, 0x30, 0x41, 0x35, 0x21, 0x21,
++ 0x21, 0x33, 0x41, 0x26, 0x4B, 0x5A, 0x35, 0x21,
++ 0x21, 0x21, 0x21, 0x3C, 0x3E, 0x41, 0x23, 0x21,
++ 0x21, 0x21, 0x21, 0x23, 0x41, 0x49, 0x30, 0x32,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x52, 0x4F,
++ 0x5D, 0x41, 0x27, 0x58, 0x21, 0x21, 0x21, 0x5B,
++ 0x41, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x47, 0x49, 0x4F, 0x5C,
++ 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x39, 0x4A,
++ 0x28, 0x43, 0x27, 0x5C, 0x35, 0x25, 0x49, 0x5B,
++ 0x58, 0x52, 0x5C, 0x38, 0x48, 0x41, 0x4A, 0x4B,
++ 0x50, 0x33, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x3B, 0x3C, 0x2A, 0x32, 0x5C, 0x40, 0x32, 0xDD,
++ 0xDC, 0xE3, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE1, 0xE0, 0xBB, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x80, 0xE7, 0x58, 0x52,
++ 0x5C, 0x67, 0xE7, 0x6C, 0xE8, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x23, 0x39, 0x5C,
++ 0x29, 0x5A, 0x4D, 0x5C, 0x2A, 0x2B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x44, 0x42, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x33, 0x27, 0x30, 0x5A, 0x2C, 0x25,
++ 0x4B, 0x50, 0x3B, 0x21, 0x21, 0x21, 0x21, 0x33,
++ 0x2C, 0x3B, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x4C, 0x22, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x55, 0x2B,
++ 0x39, 0x32, 0x4D, 0x29, 0x26, 0x3D, 0x2D, 0x2D,
++ 0x4B, 0x4B, 0x2F, 0x30, 0x42, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x3B, 0x29, 0x2C, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x23, 0x50, 0x4D, 0x22, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x2B, 0x32, 0x3B, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x51,
++ 0x48, 0x45, 0x34, 0x21, 0x21, 0x21, 0x21, 0x38,
++ 0x44, 0x35, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x33, 0x32, 0x34, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3C,
++ 0x5B, 0x4D, 0x42, 0x21, 0x21, 0x34, 0x4D, 0x47,
++ 0x5A, 0x5D, 0x27, 0x4E, 0x25, 0x3A, 0x5C, 0x42,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23,
++ 0x2B, 0x34, 0x51, 0x56, 0x46, 0x40, 0xE9, 0xDA,
++ 0xDD, 0xE1, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE2, 0xEA, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x76, 0xD3, 0x67, 0x39,
++ 0x3C, 0xCF, 0xD5, 0x9F, 0x3B, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x28, 0x2B, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3C, 0x53, 0x44, 0x3D, 0x43,
++ 0x57, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x35, 0x55, 0x3F, 0x2A,
++ 0x57, 0x24, 0x3F, 0x3B, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x22, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x55,
++ 0x3C, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x22, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x55, 0x4C, 0x3F, 0x58, 0x46, 0x31, 0x8B, 0xAD,
++ 0xCC, 0xE2, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xEA, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x97, 0x35, 0x6E, 0xC6, 0x82,
++ 0xA6, 0x73, 0x75, 0xBA, 0x2B, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x34, 0x44, 0x3B, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x23, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x33, 0x34, 0xEB, 0x34, 0x57, 0x5C, 0x4C, 0xA4,
++ 0xEC, 0x64, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0x83, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x80, 0xED, 0xCF, 0xCE, 0x78, 0x78,
++ 0x78, 0x7A, 0x6D, 0x34, 0x22, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x55, 0x25, 0x55, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x23, 0x34, 0xEE, 0xEF, 0x5F, 0x96, 0x23, 0xB3,
++ 0xBF, 0xB5, 0xF0, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xBB, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x9F, 0x78, 0x78, 0x78, 0x78,
++ 0x80, 0x9F, 0x65, 0x33, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x28, 0x55, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x22, 0x4C, 0xF1, 0xA5, 0xAC, 0xAB, 0x60, 0xB3,
++ 0xB3, 0xF2, 0xEA, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xF3, 0x6D, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x80, 0x61, 0x34, 0x23, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x25, 0x22, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x2B, 0x5E,
++ 0x4C, 0x3B, 0xF4, 0xA5, 0x9B, 0x9B, 0xB4, 0xEF,
++ 0xEF, 0xBF, 0xAD, 0xF5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0x67, 0x75, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x80,
++ 0xA7, 0x3F, 0x55, 0x22, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x4E, 0x23, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x2B, 0x5F,
++ 0x9B, 0xD2, 0x3C, 0xB7, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xB3, 0xB8, 0xEA, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xF0, 0xBB, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x80, 0x82,
++ 0x34, 0x3B, 0x33, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x5D, 0x23, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x60,
++ 0xAB, 0xA5, 0xB8, 0xB1, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xF6, 0xB7, 0xB5, 0xF0, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0x67, 0x80, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x80, 0x9F, 0xBA, 0x42,
++ 0x4C, 0x2B, 0x22, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x3A, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x55,
++ 0xF2, 0x9B, 0x9B, 0xB4, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xEF, 0xB4, 0x5F, 0x63, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xF5,
++ 0x76, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x80, 0x6D, 0x65, 0x3C, 0x34,
++ 0x3B, 0x35, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x2A, 0x29, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23,
++ 0xF7, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xEF, 0xB3, 0xB8, 0xEA, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xF8, 0x68,
++ 0x7A, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x80, 0x97, 0x82, 0x39, 0x39, 0x34, 0x3B,
++ 0x33, 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x2A, 0x29, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x3B, 0xB8, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xEF, 0xF6, 0xB2, 0xF9, 0xFA, 0xFA, 0xFA,
++ 0xFA, 0xF8, 0xF8, 0xF8, 0xF0, 0xF0, 0x6F, 0x97,
++ 0x80, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x8C, 0x61, 0x39, 0x2A, 0x3F, 0x3C, 0x4C, 0x55,
++ 0x33, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x31, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x22, 0xFB, 0xF6, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xEF, 0xB3, 0xB2, 0xF9, 0xF3, 0xF3, 0xF3,
++ 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x90, 0x6D, 0x97,
++ 0x8C, 0x6D, 0x76, 0xBB, 0xC6, 0xB9, 0xC0, 0xFC,
++ 0xAD, 0xFB, 0x2A, 0x58, 0x42, 0x4C, 0x55, 0x33,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x33, 0xD2, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xEF, 0xB4, 0xB8, 0xEB, 0xE8, 0x7F, 0xD6,
++ 0xD6, 0xD6, 0xD6, 0x9D, 0x9D, 0x52, 0xEB, 0x5F,
++ 0x5F, 0x5F, 0xF2, 0xA4, 0xBF, 0xBF, 0xB4, 0xBF,
++ 0xEE, 0x56, 0x2A, 0x42, 0x4C, 0x2B, 0x33, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x4C, 0xBE, 0xF6, 0xEF, 0xEF, 0xEF,
++ 0xF6, 0xB4, 0xB2, 0xF1, 0x3C, 0x56, 0x46, 0x5C,
++ 0x31, 0x38, 0x40, 0x40, 0x4D, 0x4D, 0xB8, 0xAC,
++ 0xBF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xB4,
++ 0xB1, 0x39, 0x39, 0x3B, 0x2B, 0x23, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3B, 0xAD, 0xA4, 0xBF, 0xBF,
++ 0xB7, 0xB2, 0xEE, 0x5E, 0x39, 0x51, 0x2A, 0x32,
++ 0x52, 0x46, 0x5C, 0x31, 0x31, 0x2A, 0xA5, 0xEF,
++ 0xFD, 0xB4, 0xEF, 0xF6, 0xF6, 0xEF, 0xF6, 0xB2,
++ 0x3F, 0x34, 0x2B, 0x55, 0x23, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x33, 0xEB, 0xF7, 0xAA,
++ 0xAA, 0xF7, 0xEB, 0x55, 0x3B, 0x3C, 0x39, 0x51,
++ 0x2A, 0x56, 0x32, 0x57, 0x57, 0x2A, 0x96, 0x3C,
++ 0x2A, 0xEE, 0xEF, 0x5F, 0xD2, 0xEF, 0xB4, 0xAA,
++ 0x42, 0x55, 0x35, 0x22, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x3B,
++ 0x3B, 0x35, 0x21, 0x23, 0x33, 0x3B, 0x4C, 0x3C,
++ 0x39, 0x3F, 0x51, 0x2A, 0x51, 0x51, 0x58, 0x32,
++ 0x56, 0xF4, 0xB1, 0x42, 0x3C, 0xF2, 0x9C, 0x3F,
++ 0x33, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x33, 0x55,
++ 0x3B, 0x4C, 0x4C, 0x3C, 0x42, 0x42, 0x3C, 0x34,
++ 0x34, 0x3F, 0x4C, 0x3B, 0x4C, 0x3B, 0x3C, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x35, 0x33, 0x55, 0x33, 0x33, 0x33, 0x55, 0x2B,
++ 0x2B, 0x35, 0x35, 0x35, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20
+ };
+
+ #endif /* !__HAVE_ARCH_LINUX_LOGO */
+@@ -994,7 +1760,7 @@
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+ };
+
+ #endif /* !__HAVE_ARCH_LINUX_LOGOBW */
+@@ -1401,7 +2167,7 @@
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+
+ #endif /* !__HAVE_ARCH_LINUX_LOGO16 */
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/saner-spitz-keymap.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/saner-spitz-keymap.patch
new file mode 100644
index 0000000000..59021882fc
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/saner-spitz-keymap.patch
@@ -0,0 +1,225 @@
+--- linux_n1/drivers/char/spitz_keymap.c~saner-spitz-keymap 2005-05-04 09:24:39.039602352 +0100
++++ linux_n1/drivers/char/spitz_keymap.c 2005-05-04 09:45:48.879557336 +0100
+@@ -10,7 +10,7 @@
+ 0xf200, 0xfb61, 0xfb62, 0xfb63, 0xfb64, 0xfb65, 0xfb66, 0xfb67,
+ 0xfb68, 0xfb69, 0xfb6a, 0xfb6b, 0xfb6c, 0xfb6d, 0xfb6e, 0xfb6f,
+ 0xfb70, 0xfb71, 0xfb72, 0xfb73, 0xfb74, 0xfb75, 0xfb76, 0xfb77,
+- 0xfb78, 0xfb79, 0xfb7a, 0xf700, 0xf201, 0xf101, 0xf703, 0xf008,
++ 0xfb78, 0xfb79, 0xfb7a, 0xf700, 0xf201, 0xf10a, 0xf701, 0xf008,
+ 0xf208, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf201,
+ 0xf200, 0xf031, 0xf032, 0xf033, 0xf034, 0xf035, 0xf036, 0xf037,
+ 0xf038, 0xf039, 0xf030, 0xf02d, 0xf05e, 0xf05c, 0xf05b, 0xf040,
+@@ -18,7 +18,7 @@
+ 0xf200, 0xf009, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf301,
+ 0xf302, 0xf303, 0xf304, 0xf305, 0xf306, 0xf307, 0xf308, 0xf309,
+ 0xf300, 0xf07f, 0xf30d, 0xf30c, 0xf201, 0xf30b, 0xf30a, 0xf30e,
+- 0xf702, 0xf703, 0xf01b, 0xf200, 0xf020, 0xf310, 0xf200, 0xf03b,
++ 0xf108, 0xf109, 0xf10c, 0xf200, 0xf020, 0xf310, 0xf200, 0xf03b,
+ 0xf03a, 0xf05d, 0xf02c, 0xf02e, 0xf02f, 0xf05f, 0xf200, 0xf02e,
+ 0xf114, 0xf117, 0xf118, 0xf119, 0xf200, 0xf200, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf702, 0xf200, 0xf200,
+@@ -29,7 +29,7 @@
+ 0xf200, 0xfb41, 0xfb42, 0xfb43, 0xfb44, 0xfb45, 0xfb46, 0xfb47,
+ 0xfb48, 0xfb49, 0xfb4a, 0xfb4b, 0xfb4c, 0xfb4d, 0xfb4e, 0xfb4f,
+ 0xfb50, 0xfb51, 0xfb52, 0xfb53, 0xfb54, 0xfb55, 0xfb56, 0xfb57,
+- 0xfb58, 0xfb59, 0xfb5a, 0xf700, 0xf201, 0xf101, 0xf703, 0xf008,
++ 0xfb58, 0xfb59, 0xfb5a, 0xf700, 0xf201, 0xf10a, 0xf701, 0xf008,
+ 0xf208, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf201,
+ 0xf200, 0xf021, 0xf022, 0xf023, 0xf024, 0xf025, 0xf026, 0xf027,
+ 0xf028, 0xf029, 0xf07e, 0xf03d, 0xf07e, 0xf07c, 0xf07b, 0xf060,
+@@ -37,7 +37,7 @@
+ 0xf200, 0xf009, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf301,
+ 0xf302, 0xf303, 0xf304, 0xf305, 0xf306, 0xf307, 0xf308, 0xf309,
+ 0xf300, 0xf07f, 0xf30d, 0xf30c, 0xf201, 0xf30b, 0xf30a, 0xf30e,
+- 0xf702, 0xf703, 0xf01b, 0xf200, 0xf020, 0xf310, 0xf200, 0xf02b,
++ 0xf108, 0xf109, 0xf10c, 0xf200, 0xf020, 0xf310, 0xf200, 0xf02b,
+ 0xf02a, 0xf07d, 0xf03c, 0xf03e, 0xf03f, 0xf05f, 0xf200, 0xf03f,
+ 0xf114, 0xf117, 0xf20b, 0xf20a, 0xf200, 0xf200, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf702, 0xf200, 0xf200,
+@@ -48,7 +48,7 @@
+ 0xf200, 0xf001, 0xf002, 0xf003, 0xf004, 0xf005, 0xf006, 0xf007,
+ 0xf008, 0xf009, 0xf00a, 0xf00b, 0xf00c, 0xf00d, 0xf00e, 0xf00f,
+ 0xf010, 0xf011, 0xf012, 0xf013, 0xf014, 0xf015, 0xf016, 0xf017,
+- 0xf018, 0xf019, 0xf01a, 0xf700, 0xf201, 0xf101, 0xf703, 0xf008,
++ 0xf018, 0xf019, 0xf01a, 0xf700, 0xf201, 0xf10a, 0xf701, 0xf008,
+ 0xf208, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf201,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+@@ -56,7 +56,7 @@
+ 0xf200, 0xf009, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf301,
+ 0xf302, 0xf303, 0xf304, 0xf305, 0xf306, 0xf307, 0xf308, 0xf309,
+ 0xf300, 0xf07f, 0xf30d, 0xf30c, 0xf201, 0xf30b, 0xf30a, 0xf30e,
+- 0xf702, 0xf703, 0xf01b, 0xf200, 0xf020, 0xf310, 0xf200, 0xf200,
++ 0xf108, 0xf109, 0xf10c, 0xf200, 0xf020, 0xf310, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+ 0xf114, 0xf117, 0xf118, 0xf119, 0xf200, 0xf200, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf702, 0xf200, 0xf200,
+@@ -67,7 +67,7 @@
+ 0xf200, 0xf001, 0xf002, 0xf003, 0xf004, 0xf005, 0xf006, 0xf007,
+ 0xf008, 0xf009, 0xf00a, 0xf00b, 0xf00c, 0xf00d, 0xf00e, 0xf00f,
+ 0xf010, 0xf011, 0xf012, 0xf013, 0xf014, 0xf015, 0xf016, 0xf017,
+- 0xf018, 0xf019, 0xf01a, 0xf700, 0xf201, 0xf101, 0xf703, 0xf008,
++ 0xf018, 0xf019, 0xf01a, 0xf700, 0xf201, 0xf10a, 0xf701, 0xf008,
+ 0xf208, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf201,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+@@ -75,18 +75,18 @@
+ 0xf200, 0xf009, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf301,
+ 0xf302, 0xf303, 0xf304, 0xf305, 0xf306, 0xf307, 0xf308, 0xf309,
+ 0xf300, 0xf07f, 0xf30d, 0xf30c, 0xf201, 0xf30b, 0xf30a, 0xf30e,
+- 0xf702, 0xf703, 0xf01b, 0xf200, 0xf020, 0xf310, 0xf200, 0xf200,
++ 0xf108, 0xf109, 0xf10c, 0xf200, 0xf020, 0xf310, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+ 0xf114, 0xf117, 0xf118, 0xf119, 0xf200, 0xf200, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf702, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+ };
+
+-u_short alt_map[NR_KEYS] = {
+- 0xf200, 0xf861, 0xf05f, 0xf863, 0xf864, 0xf03d, 0xf05c, 0xf03b,
+- 0xf03a, 0xf869, 0xf02a, 0xf05c, 0xf07c, 0xf86d, 0xf86e, 0xf86f,
+- 0xf870, 0xf871, 0xf02b, 0xf873, 0xf05b, 0xf875, 0xf876, 0xf05e,
+- 0xf878, 0xf05d, 0xf87a, 0xf700, 0xf201, 0xf101, 0xf703, 0xf07f,
++u_short altgr_map[NR_KEYS] = {
++ 0xf200, 0xfb61, 0xf05f, 0xfb63, 0xfb64, 0xf03d, 0xf05c, 0xf03b,
++ 0xf03a, 0xfb69, 0xf02a, 0xf05c, 0xf07c, 0xfb6d, 0xfb6e, 0xfb6f,
++ 0xfb70, 0xfb71, 0xf02b, 0xfb73, 0xf05b, 0xfb75, 0xfb76, 0xf05e,
++ 0xfb78, 0xf05d, 0xfb7a, 0xf700, 0xf201, 0xf10a, 0xf701, 0xf07f,
+ 0xf208, 0xf200, 0xf01b, 0xf601, 0xf603, 0xf600, 0xf602, 0xf201,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
+@@ -94,7 +94,7 @@
+ 0xf200, 0xf207, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf301,
+ 0xf302, 0xf303, 0xf304, 0xf305, 0xf306, 0xf307, 0xf308, 0xf309,
+ 0xf300, 0xf07f, 0xf30d, 0xf30c, 0xf201, 0xf30b, 0xf30a, 0xf30e,
+- 0xf702, 0xf703, 0xf01b, 0xf200, 0xf020, 0xf310, 0xf200, 0xf200,
++ 0xf108, 0xf109, 0xf10c, 0xf200, 0xf020, 0xf310, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf03e,
+ 0xf114, 0xf117, 0xf118, 0xf119, 0xf200, 0xf200, 0xf200, 0xf200,
+ 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf702, 0xf200, 0xf200,
+@@ -102,9 +102,8 @@
+ };
+
+ ushort *key_maps[MAX_NR_KEYMAPS] = {
+- plain_map, shift_map, 0, 0,
+- ctrl_map, shift_ctrl_map, 0, 0,
+- alt_map, 0
++ plain_map, shift_map, altgr_map, 0,
++ ctrl_map, shift_ctrl_map, 0
+ };
+
+ unsigned int keymap_count = 5;
+--- linux_n1/drivers/char/spitz_keymap.map~saner-spitz-keymap 2005-05-04 09:24:57.100856624 +0100
++++ linux_n1/drivers/char/spitz_keymap.map 2005-05-04 09:42:32.880353744 +0100
+@@ -10,7 +10,7 @@
+ # 5 for [CTRL] [SHIFT] , to symbol input for debug
+ # 8 for [ALT]
+ #
+-keymaps 0,1,4,5,8
++keymaps 0,1,2,4,5
+ #
+ # loadkeys --mktable iris_keymap.map
+ #
+@@ -21,48 +21,48 @@
+ #
+ keycode 1 = a
+ keycode 2 = b
+- alt keycode 2 = underscore
++ altgr keycode 2 = underscore
+ keycode 3 = c
+ keycode 4 = d
+ keycode 5 = e
+- alt keycode 5 = equal
++ altgr keycode 5 = equal
+ keycode 6 = f
+- alt keycode 6 = backslash
++ altgr keycode 6 = backslash
+ keycode 7 = g
+- alt keycode 7 = semicolon
++ altgr keycode 7 = semicolon
+ keycode 8 = h
+- alt keycode 8 = colon
++ altgr keycode 8 = colon
+ keycode 9 = i
+ keycode 10 = j
+- alt keycode 10 = asterisk
++ altgr keycode 10 = asterisk
+ keycode 11 = k
+- alt keycode 11 = backslash
++ altgr keycode 11 = backslash
+ keycode 12 = l
+- alt keycode 12 = bar
++ altgr keycode 12 = bar
+ keycode 13 = m
+ keycode 14 = n
+ keycode 15 = o
+ keycode 16 = p
+ keycode 17 = q
+ keycode 18 = r
+- alt keycode 18 = plus
++ altgr keycode 18 = plus
+ keycode 19 = s
+ keycode 20 = t
+- alt keycode 20 = bracketleft
++ altgr keycode 20 = bracketleft
+ keycode 21 = u
+ keycode 22 = v
+ keycode 23 = w
+- alt keycode 23 = asciicircum
++ altgr keycode 23 = asciicircum
+ keycode 24 = x
+ keycode 25 = y
+- alt keycode 25 = bracketright
++ altgr keycode 25 = bracketright
+ keycode 26 = z
+ keycode 27 = Shift
+ keycode 28 = Return
+-keycode 29 = F2
+-keycode 30 = Alt
++keycode 29 = F11
++keycode 30 = AltGr
+ keycode 31 = BackSpace
+- alt keycode 31 = Delete
++ altgr keycode 31 = Delete
+ keycode 32 = Num_Lock
+ keycode 34 = Escape
+ keycode 35 = Left
+@@ -93,9 +93,9 @@
+ keycode 59 = minus at
+ keycode 60 = Shift_Lock
+ keycode 63 = comma slash
+- alt keycode 63 = less
++ altgr keycode 63 = less
+ keycode 65 = Tab
+- alt keycode 65 = Caps_Lock
++ altgr keycode 65 = Caps_Lock
+ keycode 71 = KP_1
+ keycode 72 = KP_2
+ keycode 73 = KP_3
+@@ -113,11 +113,12 @@
+ keycode 85 = KP_Subtract
+ keycode 86 = KP_Add
+ keycode 87 = KP_Enter
+-# (Activity:88) -> Ctrl
+-keycode 88 = Control
+-# (Contacts:89) -> Alt
+-keycode 89 = Alt
+-keycode 90 = Escape
++# (Activity:88) -> F9
++keycode 88 = F9
++# (Contacts:89) -> F10
++keycode 89 = F10
++# (Mail:90) -> F13
++keycode 90 = F13
+ keycode 92 = space
+ keycode 93 = KP_Period
+ keycode 94 =
+@@ -130,7 +131,7 @@
+ keycode 101 = underscore underscore
+ keycode 102 =
+ keycode 103 = period question
+- alt keycode 103 = greater
++ altgr keycode 103 = greater
+ keycode 104 = Find
+ keycode 105 = Select
+ keycode 106 = Prior
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/swap-performance.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/swap-performance.patch
new file mode 100644
index 0000000000..1cde717bb4
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/swap-performance.patch
@@ -0,0 +1,19 @@
+*** ../linux/mm/swap.c Tue Jan 14 14:54:41 2003
+--- linux/mm/swap.c Sun Sep 28 21:34:25 2003
+***************
+*** 32,38 ****
+ int page_cluster;
+
+ pager_daemon_t pager_daemon = {
+! 512, /* base number for calculating the number of tries */
+ SWAP_CLUSTER_MAX, /* minimum number of tries */
+ 8, /* do swap I/O in clusters of this size */
+ };
+--- 32,38 ----
+ int page_cluster;
+
+ pager_daemon_t pager_daemon = {
+! 128, /* base number for calculating the number of tries */
+ SWAP_CLUSTER_MAX, /* minimum number of tries */
+ 8, /* do swap I/O in clusters of this size */
+ };
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/tosa_ts.patch b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/tosa_ts.patch
new file mode 100644
index 0000000000..678cb2e25b
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/tosa_ts.patch
@@ -0,0 +1,207 @@
+
+#
+# Patch managed by http://www.holgerschurig.de/patcher.html
+#
+
+--- linux/drivers/char/tosa_ts.c~tosa_ts.patch
++++ linux/drivers/char/tosa_ts.c
+@@ -102,6 +102,8 @@
+ static int head = 0, tail = 0;
+
+ #ifdef CONFIG_PM
++#include <linux/pm.h>
++static struct pm_dev* tosa_ts_pm_dev;
+ static int tp_suspend = 0;
+ #endif /* CONFIG_PM */
+
+@@ -495,25 +497,6 @@
+ ioctl: ts_ioctl,
+ };
+
+-static void ts_exit(void)
+-{
+- ts_timer_clear();
+- ts_clear();
+- free_irq(IRQ_GPIO_TP_INT, NULL);
+- wm9712_power_mode_ts(WM9712_PWR_OFF);
+-
+- pxa_ac97_put(&ac97_on);
+-}
+-
+-#ifdef MODULE
+-static void __exit ac97_ts_cleanup(void)
+-{
+- ts_exit();
+- unregister_chrdev(TS_MAJOR, "ts");
+-}
+-module_exit(ac97_ts_cleanup);
+-#endif /* MODULE */
+-
+ extern int tc6393fb_lcdMode;
+
+ int ac97_ad_input(int ch, unsigned short *dat)
+@@ -608,7 +591,7 @@
+ #endif
+ }
+
+-static int ts_init(void)
++static int tosa_ts_hardware_start(void)
+ {
+ pxa_ac97_get(&codec, &ac97_on);
+
+@@ -625,7 +608,6 @@
+ /* GPIO3/PENDOWN wakeup */
+ ac97_bit_set(AC97_GPIO_WAKE_UP, CODEC_PENDOWN);
+
+- ts_clear();
+
+ /* Init queue */
+ //X kernel_thread(ts_pendown, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
+@@ -639,12 +621,39 @@
+ return -EBUSY;
+ }
+
+- // printk(KERN_INFO "Tosa Touch Screen driver initialized\n");
+-
+ return 0;
+ }
+
+-static int __init ac97_ts_init(void)
++static void tosa_ts_hardware_stop(void)
++{
++ ts_timer_clear();
++ ts_clear();
++ free_irq(IRQ_GPIO_TP_INT, NULL);
++ wm9712_power_mode_ts(WM9712_PWR_OFF);
++
++ pxa_ac97_put(&ac97_on);
++}
++
++#ifdef CONFIG_PM
++static int tosa_ts_pm_callback(struct pm_dev *pm_dev,
++ pm_request_t req, void *data)
++{
++ switch (req) {
++ case PM_SUSPEND:
++ tp_suspend = 1;
++ tosa_ts_hardware_stop();
++ break;
++ case PM_RESUME:
++ tp_suspend = 0;
++ tosa_ts_hardware_start();
++ break;
++ }
++ return 0;
++}
++#endif
++
++
++static int __init tosa_ts_init(void)
+ {
+ ac97_on = 0;
+
+@@ -663,28 +672,37 @@
+
+ if( register_chrdev(TS_MAJOR,DEV_NAME, &ts_fops) ) {
+ printk("unable to get major %d for touch screen\n", TS_MAJOR);
+- ts_exit();
+ }
+
+ init_procinfo();
+
++ tosa_ts_hardware_start();
++
++#ifdef CONFIG_PM
++ tosa_ts_pm_dev = pm_register(PM_SYS_DEV, 0, tosa_ts_pm_callback);
++#endif
++
+ kernel_thread(ts_pendown, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
+
+ return 0;
+ }
+
+-module_init(ac97_ts_init);
++static int __exit tosa_ts_cleanup()
++{
++ tosa_hardware_stop();
++ pm_unregister(tosa_ts_pm_dev);
++ unregister_chrdev(TS_MAJOR, "ts");
++}
++
++module_init(tosa_ts_init);
++module_exit(tosa_ts_cleanup);
+
+ /*
+ * Driver functions
+ */
+ static int ts_open(struct inode *inode, struct file *file)
+ {
+- if( ts_init() < 0 ) {
+- ts_exit();
+- return -EINVAL;
+- }
+-
++ ts_clear();
+ MOD_INC_USE_COUNT;
+ return 0;
+ }
+@@ -692,7 +710,6 @@
+
+ static int ts_release(struct inode *inode, struct file *file)
+ {
+- ts_exit();
+
+ MOD_DEC_USE_COUNT;
+ return 0;
+@@ -788,20 +805,3 @@
+ return 0;
+ }
+
+-#ifdef CONFIG_PM
+-void tosa_ts_suspend(void)
+-{
+- DEBUG(DBG_L1, "in\n");
+- tp_suspend = 1;
+- ts_exit();
+- DEBUG(DBG_L1, "out\n");
+-}
+-
+-void tosa_ts_resume(void)
+-{
+- DEBUG(DBG_L1, "in\n");
+- tp_suspend = 0;
+- ts_init();
+- DEBUG(DBG_L1, "out\n");
+-}
+-#endif /* CONFIG_PM */
+--- linux/drivers/sound/pxa-ac97_tosa.c~tosa_ts.patch
++++ linux/drivers/sound/pxa-ac97_tosa.c
+@@ -90,8 +90,6 @@
+ #include <linux/pm.h>
+ static struct pm_dev* pxa_sound_pm_dev;
+ static int tosa_pm_callback(struct pm_dev *,pm_request_t, void *);
+-extern void tosa_ts_suspend(void);
+-extern void tosa_ts_resume(void);
+ #endif /* CONFIG_PM */
+
+ /************************************************************
+@@ -2195,9 +2193,6 @@
+ case PM_SUSPEND:
+ DEBUG(DBG_L1, "PM_SUSPEND: start\n");
+ wm9712_suspend();
+-#ifdef CONFIG_TOSA_TS
+- tosa_ts_suspend();
+-#endif /* CONFIG_TOSA_TS */
+ if ( ac97_audio_state.rd_ref != 0 ) {
+ audio_clear_buf(ac97_audio_state.input_stream);
+ *ac97_audio_state.input_stream->drcmr = 0;
+@@ -2239,9 +2234,6 @@
+ ac97_audio_state.input_stream->dma_ch = err;
+ }
+ wm9712_resume();
+-#ifdef CONFIG_TOSA_TS
+- tosa_ts_resume();
+-#endif /* CONFIG_TOSA_TS */
+ DEBUG(DBG_L1, "PM_RESUME: done\n");
+ break;
+ }
diff --git a/recipes/obsolete/linux/openzaurus-pxa27x_2.4.20-rmk2-embedix20050602.bb b/recipes/obsolete/linux/openzaurus-pxa27x_2.4.20-rmk2-embedix20050602.bb
new file mode 100644
index 0000000000..a8e1cca561
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa27x_2.4.20-rmk2-embedix20050602.bb
@@ -0,0 +1,99 @@
+DESCRIPTION = "Linux kernel 2.4.20-embedix for Sharp Zaurus SL-C1000 and SL-C3000 devices."
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602"
+SECTION = "kernel"
+PV = "2.4.20-rmk2-embedix"
+LICENSE = "GPLv2"
+KV = "2.4.20"
+PR = "r18"
+
+SRC_URI = "http://developer.ezaurus.com/sl_j/source/c3100/20050602/linux-c3100-20050602-rom1_01.tar.bz2;name=kernel \
+ file://P01-C3000-clockup_050221.patch;striplevel=2 \
+ file://P02-C3000-voltage_050221.patch;striplevel=2 \
+ file://P03-C3000-SIGSTOP_FIX_041207.patch;striplevel=2 \
+ file://P04-C3000-UNICON_041206.patch;striplevel=2 \
+ file://P05-C3000-TSPRESSURE_041207.patch;striplevel=2 \
+ file://P06-C3000-WRITETS_041206.patch;striplevel=2 \
+ file://P07-C3000-KBDDEV_041206.patch;striplevel=2 \
+ file://P08-rtc-mremap-mremap2nd-fix_041213.patch;striplevel=2 \
+ file://P09-ext3-isofs-fix_041216.patch;striplevel=2 \
+ file://P10-ntfs-fix_041216.patch;striplevel=2 \
+ file://P11-bluetooth-mh18_041216.patch;striplevel=2 \
+ file://P12-fbcon-fix_041219.patch;striplevel=2 \
+ file://P14-lowlatency_041221.patch;striplevel=2 \
+ file://P17-bvdd_050222.patch;striplevel=2 \
+ file://P18-detailed_battery_050309.patch;striplevel=2 \
+ file://P02++050226.patch \
+ \
+ file://swap-performance.patch \
+ file://iw240_we15-6.diff \
+ file://iw241_we16-6.diff \
+ file://iw249_we17-13.diff \
+ file://iw240_we18-5.diff \
+ file://bluecard_cs.patch \
+ file://compile.patch \
+ file://idecs.patch \
+ file://logo.patch \
+ file://initsh.patch \
+ file://disable-pcmcia-probe.patch \
+ file://deviceinfo.patch \
+ file://corgi-fbcon-logo.patch \
+ file://corgi-default-brightness.patch \
+ file://1764-1.patch \
+ file://armdeffix.patch \
+ file://add-oz-release-string.patch \
+ file://saner-spitz-keymap.patch \
+ file://defconfig-${MACHINE} "
+# Breaks compilation for now, needs to be fixed
+# SRC_URI += "file://CPAR050218.patch"
+
+S = "${WORKDIR}/linux"
+
+inherit kernel
+
+#
+# Create the kernel command line. CMDLINE_CONSOLE is set through kernel.oeclass.
+#
+CMDLINE_MTDPARTS_spitz = "mtdparts=sharpsl-nand:7168k@0k(smf),5120k@7168k(root),-(home) jffs2_orphaned_inodes=delete"
+CMDLINE_MTDPARTS_akita = "mtdparts=sharpsl-nand:7168k@0k(smf),59392k@7168k(root),-(home) jffs2_orphaned_inodes=delete"
+CMDLINE_MTDPARTS_borzoi = "mtdparts=sharpsl-nand:7168k@0k(smf),32768k@7168k(root),-(home) jffs2_orphaned_inodes=delete"
+# CMDLINE_INIT = "init=bin/busybox ash"
+CMDLINE_INIT = ""
+CMDLINE_SHARP_spitz = "RTC_RESET=1 EQUIPMENT=4 LOGOLANG=1 DEFYEAR=2005 LOGO=1 LAUNCH=q"
+CMDLINE_SHARP_akita = "EQUIPMENT=0 LOGOLANG=1 DEFYEAR=2006 LOGO=1 LAUNCH=q"
+CMDLINE_SHARP_borzoi = "EQUIPMENT=4 LOGOLANG=1 DEFYEAR=2006 LOGO=1 LAUNCH=q"
+CMDLINE_ROOT = "root=/dev/mtdblock2"
+# Caution: ttyS0 doesn't seem to work for 2.4.20, so it's either NULL or tty1
+CMDLINE_CONSOLE = "quiet tty1"
+CMDLINE = "${CMDLINE_CONSOLE} ${CMDLINE_ROOT} ${CMDLINE_MTDPARTS} ${CMDLINE_SHARP} ${CMDLINE_INIT}"
+
+#
+# Compensate for sucky bootloader on all Sharp Zaurus models
+#
+ALLOW_EMPTY = "1"
+FILES_kernel-image = ""
+EXTRA_OEMAKE = "OPENZAURUS_RELEASE=-${DISTRO_VERSION}"
+KERNEL_CCSUFFIX = "-2.95"
+KERNEL_LDSUFFIX = "-2.11.2"
+COMPATIBLE_HOST = "arm.*-linux"
+
+# For these old 2.4 kernels we override in sharprom-compatible.conf
+#COMPATIBLE_MACHINE = "(akita|spitz|borzoi)"
+COMPATIBLE_MACHINE = "none"
+
+PARALLEL_MAKE = ""
+
+#
+# autoload modules
+#
+module_conf_usbdmonitor = "alias usbd0 usbdmonitor"
+module_conf_pxa27x_bi = "below pxa27x_bi net_fd usbdcore "
+module_autoload_pxa27x_bi = "pxa27x_bi"
+module_autoload_usb_ohci_pxa27x = "usb_ohci_pxa27x"
+
+do_configure_prepend() {
+ install -m 0644 ${WORKDIR}/defconfig-${MACHINE} ${S}/.config || die "No default configuration for ${MACHINE} available."
+ echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >> ${S}/.config
+}
+
+SRC_URI[kernel.md5sum] = "cdd92f6ecffc4ecce4ea6194b789716e"
+SRC_URI[kernel.sha256sum] = "224a81da20b793c003f3d8e9abae7d4abc92320c956f0b5ed346430369772fed"
diff --git a/recipes/obsolete/linux/openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.bb b/recipes/obsolete/linux/openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.bb
new file mode 100644
index 0000000000..e94183aa57
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.bb
@@ -0,0 +1,2 @@
+require openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc
+
diff --git a/recipes/obsolete/linux/openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc b/recipes/obsolete/linux/openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc
new file mode 100644
index 0000000000..9e382e2e64
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc
@@ -0,0 +1,124 @@
+DESCRIPTION = "Linux kernel for OpenZaurus PXA processor based devices."
+SECTION = "kernel"
+LICENSE = "GPLv2"
+PV = "2.4.18-rmk7-pxa3-embedix"
+PR = "r46"
+KV = "2.4.18"
+RMKV = "7"
+PXAV = "3"
+SHARPV = "20031107"
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/openzaurus-pxa-${KV}-rmk${RMKV}-pxa${PXAV}-embedix${SHARPV}"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.4/linux-${KV}.tar.bz2;name=kernel \
+ ftp://ftp.linux.org.uk/pub/armlinux/source/kernel-patches/v2.4/patch-${KV}-rmk${RMKV}.gz;apply=yes;name=patch1 \
+ ftp://source.mvista.com/pub/xscale/pxa/diff-${KV}-rmk${RMKV}-pxa${PXAV}.gz;apply=yes;name=patch2 \
+ http://openzaurus.org/mirror/linux-${PV}-slc860-${SHARPV}-rom1_10.bz2;apply=yes;name=patch3 \
+ file://piro.patch \
+ file://swap-performance.patch \
+ file://bluetooth-2.4.18-mh15.patch \
+ file://iw_handlers.w13-5.diff \
+ file://iw_handlers.w14-5.diff \
+ file://iw240_we15-6.diff \
+ file://iw249_we16-6.diff \
+ file://iw249_we17-13.diff \
+ file://iw240_we18-5.diff \
+ file://bt950_cs.patch \
+ file://bluecard_cs.patch \
+ file://sharpsl_battery.patch \
+ file://buffered-fbmem.patch \
+ file://enable-sysrq.patch \
+ file://compile.patch \
+ file://idecs.patch \
+ file://logo.patch \
+ file://initsh.patch \
+ file://keyboard-ctrl+alt.patch \
+ file://keymap-more-sane.patch \
+ file://mkdep.patch \
+ file://disable-pcmcia-probe.patch \
+ file://deviceinfo.patch \
+ file://linux-2.4.18-list_move.patch \
+ file://tosa_map.patch \
+ file://tosa_ts.patch \
+ file://corgi-fbcon-logo.patch \
+ file://corgi-default-brightness.patch \
+ http://www.openswan.org/download/old/openswan-2.2.0-kernel-2.4-klips.patch.gz;name=patch4 \
+ file://1764-1.patch \
+ file://module_licence.patch \
+ file://ir240_sys_max_tx-2.diff \
+ file://ir241_qos_param-2.diff \
+ http://us1.samba.org/samba/ftp/cifs-cvs/cifs-1.20c-2.4.tar.gz;name=patch5 \
+ file://fix_tosa_apm.patch \
+ file://dumb-hack-for-wlan-ng.patch \
+ file://unb0rk-apm.patch \
+ file://apm_arrowkey.patch \
+ file://defconfig-${MACHINE} "
+
+SRC_URI_append_poodle += " file://smallfonts.diff"
+SRC_URI_append_poodle255 += " file://smallfonts.diff"
+SRC_URI_append_tosa = " file://tosa-power-key-off.patch"
+
+S = "${WORKDIR}/linux"
+
+inherit kernel
+
+#
+# Create the kernel command line. CMDLINE_CONSOLE is set through kernel.oeclass.
+#
+CMDLINE_MTDPARTS_poodle = "mtdparts=sharpsl-nand:7168k@0k(smf),22528k@7168k(root),-(home)"
+CMDLINE_MTDPARTS_poodle255 = "mtdparts=sharpsl-nand:7168k@0k(smf),22528k@7168k(root),-(home)"
+CMDLINE_MTDPARTS_corgi = "mtdparts=sharpsl-nand:7168k@0k(smf),25600k@7168k(root),-(home)"
+CMDLINE_MTDPARTS_shepherd = "mtdparts=sharpsl-nand:7168k@0k(smf),25600k@7168k(root),-(home)"
+CMDLINE_MTDPARTS_husky = "mtdparts=sharpsl-nand:7168k@0k(smf),54272k@7168k(root),-(home)"
+CMDLINE_MTDPARTS_tosa = "mtdparts=sharpsl-nand:7168k@0k(smf),28672k@7168k(root),-(home) EQUIPMENT=2"
+
+CMDLINE_ROOT = "root=/dev/mtdblock2 rootfstype=jffs2 jffs2_orphaned_inodes=delete"
+# CMDLINE_INIT = "init=/bin/busybox ash"
+CMDLINE_INIT = " "
+CMDLINE = "${CMDLINE_MTDPARTS} ${CMDLINE_ROOT} ${CMDLINE_CONSOLE} ${CMDLINE_INIT}"
+
+#
+# Compensate for sucky bootloader on all Sharp Zaurus models
+#
+ALLOW_EMPTY = "1"
+FILES_kernel-image = ""
+EXTRA_OEMAKE = " EMBEDIXRELEASE=-${DISTRO_VERSION}"
+KERNEL_CCSUFFIX = "-2.95"
+KERNEL_LDSUFFIX = "-2.11.2"
+COMPATIBLE_HOST = "arm.*-linux"
+
+# For these old 2.4 kernels we override in sharprom-compatible.conf
+#COMPATIBLE_MACHINE = "(poodle|corgi|shepherd|husky|poodle255|tosa)"
+COMPATIBLE_MACHINE = "none"
+
+PARALLEL_MAKE = ""
+
+#
+# autoload modules
+#
+module_conf_usbdmonitor = "alias usbd0 usbdmonitor"
+module_conf_pxa_bi = "below pxa_bi net_fd usbdcore "
+module_autoload_pxa_bi = "pxa_bi"
+
+do_configure_prepend() {
+ patch -p1 < cifs_24.patch
+ install -m 0644 ${WORKDIR}/defconfig-${MACHINE} ${S}/.config || die "No default configuration for ${MACHINE} available."
+ echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >> ${S}/.config
+}
+
+PACKAGE_ARCH_corgi = "c7x0"
+PACKAGE_ARCH_shepherd = "c7x0"
+PACKAGE_ARCH_husky = "c7x0"
+
+SRC_URI[kernel.md5sum] = "ad92859baaa837847b34d842b9f39d38"
+SRC_URI[kernel.sha256sum] = "90d9a45ba395f742050f791b6944f6263d0ab03c84aad8a32967ca866906490e"
+SRC_URI[patch1.md5sum] = "90c1cfbc47c7069a14a5cb584a5ada9a"
+SRC_URI[patch1.sha256sum] = "8cbde563f5b77a7cf5ab900e7e627c493c1e36948b2c021b4738de82ca686d00"
+SRC_URI[patch2.md5sum] = "249c7a63a506d302c96be26517a70298"
+SRC_URI[patch2.sha256sum] = "ca569dfa1e5cfd2f4134f3f61f667bcfab5e15c7d43c8a6e835d384ac5b31a07"
+SRC_URI[patch3.md5sum] = "c90b4f5cabe9c0dfd3a25d9228c97b43"
+SRC_URI[patch3.sha256sum] = "b0d64fb17e52fb0df38c7dcbe14e21e1f6601ba21f805e17dd6eea636d6fd28b"
+SRC_URI[patch4.md5sum] = "5c54040bba6fea2bfb47df01056e953f"
+SRC_URI[patch4.sha256sum] = "d35213dc854f1e1a08512154c7a92fb94d9f0506cc5107f8b2f248412679fb53"
+SRC_URI[patch5.md5sum] = "f3b96692f679239488de30f2bd896825"
+SRC_URI[patch5.sha256sum] = "885eda0bbe68018b5770437e542473508f88205bb09cbfde7fc6e0c31f5a6f83"
diff --git a/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/1764-1.patch b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/1764-1.patch
new file mode 100644
index 0000000000..0b660f3521
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/1764-1.patch
@@ -0,0 +1,16 @@
+__arch_strncpy_from_user needs to be exported if you build the framebuffer console driver as a module.
+
+Cheers,
+
+Ian.
+
+--- linux-2.6-bkpxa.orig/arch/arm/kernel/armksyms.c 2004-02-27 10:35:29.000000000 +0000
++++ linux-2.6-bkpxa/arch/arm/kernel/armksyms.c 2004-02-27 14:55:02.000000000 +0000
+@@ -187,6 +187,7 @@
+ EXPORT_SYMBOL(__arch_copy_to_user);
+ EXPORT_SYMBOL(__arch_clear_user);
+ EXPORT_SYMBOL(__arch_strnlen_user);
++EXPORT_SYMBOL(__arch_strncpy_from_user);
+
+ /* consistent area handling */
+ EXPORT_SYMBOL(consistent_alloc);
diff --git a/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/battery.patch b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/battery.patch
new file mode 100644
index 0000000000..1912b33328
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/battery.patch
@@ -0,0 +1,326 @@
+
+--- linux/arch/arm/mach-sa1100/collie_battery.c Tue Jul 22 02:24:32 2003
++++ linux/arch/arm/mach-sa1100/collie_battery.c Tue Jul 22 03:07:56 2003
+@@ -14,10 +14,11 @@
+ * 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.
+ *
+ * ChangeLog:
++ * Nov 2002 Dietz Proepper: improved battery status.
+ * 12-Nov-2001 Lineo Japan, Inc.
+ * 30-Jul-2002 Lineo Japan, Inc. for 2.4.18
+ * 29-Jan-2003 Sharp Corporation modify for new QT I/F
+ *
+ */
+@@ -79,10 +80,11 @@ int collie_read_BackBattery(void);
+ int collie_read_Temp(void);
+ int collie_check_temp(void);
+ int collie_check_voltage(void);
+ static void collie_charge_on(void);
+ static void collie_charge_off(void);
++static void do_main_battery(void);
+ int set_led_status(int which,int status);
+ int GetMainLevel( int Volt );
+ int GetBackLevel( int Volt );
+ int collie_get_main_battery(void);
+ unsigned short GetBackupBatteryAD(void);
+@@ -91,40 +93,35 @@ int suspend_collie_read_Temp(void);
+ /*** extern ***********************************************************************/
+ extern u32 apm_wakeup_src_mask;
+ extern int counter_step_contrast;
+
+
+-/*** gloabal variables ************************************************************/
+-int charge_status = 0; /* charge status 1 : charge 0: not charge */
+-
+-typedef struct BatteryThresh {
+- int high;
+- int low;
+- int verylow;
+-} BATTERY_THRESH;
++/* defines */
++#define COLLIE_BATTERY_STATUS_HIGH APM_BATTERY_STATUS_HIGH
++#define COLLIE_BATTERY_STATUS_LOW APM_BATTERY_STATUS_LOW
++#define COLLIE_BATTERY_STATUS_VERYLOW APM_BATTERY_STATUS_VERY_LOW
++#define COLLIE_BATTERY_STATUS_CRITICAL APM_BATTERY_STATUS_CRITICAL
+
++/*** gloabal variables ************************************************************/
++int charge_status = 0; /* charge status 1 : charge 0: not charge */
+
+-#if defined(CONFIG_COLLIE_TS) || defined(CONFIG_COLLIE_TR0) || \
+- defined(CONFIG_COLLIE_TR1) || defined(CONFIG_COLLIE_DEV)
+-BATTERY_THRESH collie_main_battery_thresh_fl = {
+- 368, 358, 356
+-};
+-
+-BATTERY_THRESH collie_main_battery_thresh_nofl = {
+- 378, 364, 362
+-};
+-#else
+-BATTERY_THRESH collie_main_battery_thresh_fl = {
+- 368, 358, 356
+-};
+-
+-BATTERY_THRESH collie_main_battery_thresh_nofl = {
+- 378, 365, 363
++typedef struct {
++ int voltage_thres[2]; /* 0: nofl 1: fl */
++ int percent;
++ int state;
++} main_battery_thres;
++
++#define MAIN_BATTERY_THRES 4
++
++main_battery_thres main_batt_thres[MAIN_BATTERY_THRES+2] = {
++ {{5000, 5000}, 100, COLLIE_BATTERY_STATUS_HIGH }, /* do not remove! */
++ {{412,408}, 100, COLLIE_BATTERY_STATUS_HIGH},
++ {{378,368}, 40, COLLIE_BATTERY_STATUS_HIGH},
++ {{364,358}, 5, COLLIE_BATTERY_STATUS_LOW},
++ {{362,356}, 1, COLLIE_BATTERY_STATUS_CRITICAL},
++ {{0, 0}, 1, COLLIE_BATTERY_STATUS_CRITICAL } /* do not remove, too! */
+ };
+-#endif
+-
+-
+
+ typedef struct ChargeThresh {
+ int bar1;
+ int bar2;
+ int bar3;
+@@ -180,24 +177,18 @@ static struct miscdevice battery_device
+ #define GetBackADCtoPower(x) (( 330 * x * 2 ) / 1024 ) // MAX 3.3V
+ #define ConvRevise(x) ( ( ad_revise * x ) / 652 )
+ #define MAIN_DIFF 50 // 0.5V
+ #define DIFF_CNT ( 3 - 1 )
+
+-#define COLLIE_BATTERY_STATUS_HIGH APM_BATTERY_STATUS_HIGH
+-#define COLLIE_BATTERY_STATUS_LOW APM_BATTERY_STATUS_LOW
+-#define COLLIE_BATTERY_STATUS_VERYLOW APM_BATTERY_STATUS_VERY_LOW
+-#define COLLIE_BATTERY_STATUS_CRITICAL APM_BATTERY_STATUS_CRITICAL
+-
+ #define COLLIE_AC_LINE_STATUS (!( GPLR & GPIO_AC_IN ) ? APM_AC_OFFLINE : APM_AC_ONLINE)
+
+-
+ #define COLLIE_PM_TICK ( 1000 / 10 ) // 1sec
+ #define COLLIE_APO_TICKTIME ( 5 * COLLIE_PM_TICK ) // 5sec
+ #define COLLIE_LPO_TICKTIME COLLIE_APO_TICKTIME
+ #define COLLIE_APO_DEFAULT ( ( 3 * 60 ) * COLLIE_PM_TICK ) // 3 min
+ #define COLLIE_LPO_DEFAULT ( 20 * COLLIE_PM_TICK ) // 20 sec
+-#define COLLIE_MAIN_GOOD_COUNT ( 10*60 / ( COLLIE_APO_TICKTIME / COLLIE_PM_TICK ) )
++#define COLLIE_MAIN_GOOD_COUNT ( 1*60 / ( COLLIE_APO_TICKTIME / COLLIE_PM_TICK ) )
+ #define COLLIE_MAIN_NOGOOD_COUNT ( 1*60 / ( COLLIE_APO_TICKTIME / COLLIE_PM_TICK ) )
+
+ #define COLLIE_BACKUP_BATTERY_CK_TIME ( 10*60*1*100 ) // 10min
+ #define COLLIE_BACKUP_BATTERY_LOW ( 190 )
+
+@@ -212,10 +203,11 @@ unsigned int LPOCntWk = 0;
+ static DECLARE_WAIT_QUEUE_HEAD(queue);
+ static int msglevel;
+
+ int collie_backup_battery = COLLIE_BATTERY_STATUS_HIGH;
+ int collie_main_battery = COLLIE_BATTERY_STATUS_HIGH;
++int collie_main_battery_percent = 100;
+ int collie_main_charge_battery = 100;
+ int collie_ac_status = APM_AC_OFFLINE;
+ int ad_revise = 0;
+
+ static int MainCntWk = COLLIE_MAIN_GOOD_COUNT;
+@@ -229,10 +221,11 @@ static struct pm_dev *battery_pm_dev; /
+
+ static int battery_off_flag = 0; /* charge : suspend while get adc */
+ static int collie_charge_temp = 973;
+ static int collie_charge_volt = 465; /* charge : check charge 3.0V */
+ static int charge_off_mode = 0; /* charge : check volt or non */
++static int collie_main_battery_voltage = 400;
+
+ static DECLARE_WAIT_QUEUE_HEAD(wq_on);
+ static DECLARE_WAIT_QUEUE_HEAD(wq_off);
+ #if 1 // 2003.1.29
+ static DECLARE_WAIT_QUEUE_HEAD(battery_waitqueue);
+@@ -276,28 +269,11 @@ int collie_apm_get_power_status(u_char *
+ }
+ collie_battery_status = *battery_status;
+ #endif
+
+ // main battery status to percentage
+- switch (*battery_status)
+- {
+- case COLLIE_BATTERY_STATUS_HIGH:
+- *battery_percentage = 100;
+- break;
+- case COLLIE_BATTERY_STATUS_LOW:
+- *battery_percentage = 40;
+- break;
+- case COLLIE_BATTERY_STATUS_VERYLOW:
+- *battery_percentage = 5;
+- break;
+- case COLLIE_BATTERY_STATUS_CRITICAL:
+- *battery_percentage = 1;
+- break;
+- default:
+- *battery_percentage = 100;
+- break;
+- }
++ *battery_percentage = collie_main_battery_percent;
+
+ if ( *ac_line_status == APM_AC_ONLINE )
+ *battery_percentage = 100;
+
+ // good or ac in --> GOOD_COUNT
+@@ -529,12 +505,13 @@ int collie_get_main_battery(void)
+ voltage = collie_read_MainBattery();
+ if ( voltage > 0 ) break;
+ if ( i++ > 5 ) { voltage = 380; break; }
+ }
+
+- collie_main_battery = GetMainLevel(GetMainADCtoPower(voltage));
+- collie_main_charge_battery = GetMainChargePercent(GetMainADCtoPower(voltage));
++ collie_main_battery_voltage = GetMainADCtoPower(voltage);
++ do_main_battery();
++ collie_main_charge_battery = GetMainChargePercent(collie_main_battery_voltage);
+
+ DPRINTK2("charge percent = %d ( at %d ) \n",collie_main_charge_battery,jiffies);
+
+ DPRINTK(" get Main battery status %d\n",collie_main_battery);
+
+@@ -562,36 +539,36 @@ int GetMainChargePercent( int Volt )
+ } else {
+ return 5;
+ }
+ }
+
+-int GetMainLevel( int Volt )
++static void do_main_battery()
+ {
+-
+- DPRINTK(" volt = %d \n",Volt);
+-
+-
+- if ( counter_step_contrast ) {
+- if ( Volt > collie_main_battery_thresh_fl.high )
+- return COLLIE_BATTERY_STATUS_HIGH;
+- else if ( Volt > collie_main_battery_thresh_fl.low )
+- return COLLIE_BATTERY_STATUS_LOW;
+- else if ( Volt > collie_main_battery_thresh_fl.verylow )
+- return COLLIE_BATTERY_STATUS_VERYLOW;
+- else
+- return COLLIE_BATTERY_STATUS_CRITICAL;
+- } else {
+- if ( Volt > collie_main_battery_thresh_nofl.high )
+- return COLLIE_BATTERY_STATUS_HIGH;
+- else if ( Volt > collie_main_battery_thresh_nofl.low )
+- return COLLIE_BATTERY_STATUS_LOW;
+- else if ( Volt > collie_main_battery_thresh_nofl.verylow )
+- return COLLIE_BATTERY_STATUS_VERYLOW;
+- else
+- return COLLIE_BATTERY_STATUS_CRITICAL;
+- }
+-
++ int i = MAIN_BATTERY_THRES;
++ int fl = (counter_step_contrast)? 1 : 0;
++
++ while ( i > 0 &&
++ ( collie_main_battery_voltage > main_batt_thres[i].voltage_thres[fl] ) )
++ i--;
++ /* i is now between 0 and MAIN_BATTERY_THRES. That means
++ * we can safely access main_batt_thres[i] and
++ * main_batt_thres[i+1] */
++
++ collie_main_battery = main_batt_thres[i].state;
++ { /* perhaps we should put that deltas to our table, too? */
++ long deltav = main_batt_thres[i].voltage_thres[fl] -
++ main_batt_thres[i+1].voltage_thres[fl];
++ long deltap = main_batt_thres[i].percent -
++ main_batt_thres[i+1].percent;
++
++ collie_main_battery_percent = /* (1) */
++ main_batt_thres[i+1].percent +
++ deltap * (collie_main_battery_voltage -
++ main_batt_thres[i+1].voltage_thres[fl]) /
++ deltav;
++ DPRINTK("Battery stuff: v=%i i=%i , dv=%li , dp=%li , p=%i",collie_main_battery_voltage , i, deltav, deltap, collie_main_battery_percent );
++ }
+ }
+
+
+ int GetBackLevel( int Volt )
+ {
+@@ -834,20 +811,18 @@ unsigned short chkFatalBatt(void)
+ GEDR = GPIO_CO;
+ // printk("CO = %x\n",GEDR&GPIO_CO);
+ }
+
+
+- if ( volt < collie_main_battery_thresh_nofl.verylow )
++ if ( volt < main_batt_thres[MAIN_BATTERY_THRES].voltage_thres[0] )
+ return 0;
+ else
+ return 1;
+ #endif
+ }
+
+
+-
+-
+ int suspend_collie_check_temp(void)
+ {
+ unsigned short temp , i = 0;
+
+ while(1) {
+@@ -1032,10 +1007,11 @@ struct proc_dir_entry *proc_batt;
+ typedef struct collie_battery_entry {
+ int* addr;
+ int def_value;
+ char* name;
+ char* description;
++ char readonly;
+ unsigned short low_ino;
+ } collie_battery_entry_t;
+
+ #if 1 // 2003.1.29
+ static collie_battery_entry_t collie_battery_params[] = {
+@@ -1044,11 +1020,13 @@ static collie_battery_entry_t collie_bat
+ { &collie_change_battery_status , 0 , "chg_status", "Change status" }
+ };
+ #else
+ static collie_battery_entry_t collie_battery_params[] = {
+ /* { addr, def_value, name, description }*/
+- { &msglevel, 0, "msglevel", "debug message output level" }
++/* { &msglevel, 0, "msglevel", "debug message output level" } */
++ { &msglevel, 0, "msglevel", "debug message output level", 0 },
++ { &collie_main_battery_voltage, -1, "main_voltage", "main battery voltage", 1 }
+ };
+ #endif
+ #define NUM_OF_BATTERY_ENTRY (sizeof(collie_battery_params)/sizeof(collie_battery_entry_t))
+
+ static ssize_t collie_battery_read_params(struct file *file, char *buf,
+@@ -1069,11 +1047,12 @@ static ssize_t collie_battery_read_param
+ }
+ }
+ if (current_param==NULL) {
+ return -EINVAL;
+ }
+- count = sprintf(outputbuf, "0x%08X\n",
++// count = sprintf(outputbuf, "0x%08X\n",
++ count = sprintf(outputbuf, "%04i\n",
+ *((volatile Word *) current_param->addr));
+ *ppos += count;
+ if (count>nbytes) /* Assume output can be read at one time */
+ return -EINVAL;
+ if (copy_to_user(buf, outputbuf, count))
+@@ -1094,11 +1073,12 @@ static ssize_t collie_battery_write_para
+ if(collie_battery_params[i].low_ino==i_ino) {
+ current_param = &collie_battery_params[i];
+ break;
+ }
+ }
+- if (current_param==NULL) {
++// if (current_param==NULL) {
++ if (current_param==NULL || current_param->readonly) {
+ return -EINVAL;
+ }
+
+ param = simple_strtoul(buf,&endp,0);
+ if (param == -1) {
+
diff --git a/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/bluetooth-2.4.18-mh15.patch b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/bluetooth-2.4.18-mh15.patch
new file mode 100644
index 0000000000..d6575dd604
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/bluetooth-2.4.18-mh15.patch
@@ -0,0 +1,32759 @@
+diff -urN linux-2.4.18/arch/alpha/config.in linux-2.4.18-mh15/arch/alpha/config.in
+--- linux-2.4.18/arch/alpha/config.in 2001-11-21 00:49:31.000000000 +0100
++++ linux-2.4.18-mh15/arch/alpha/config.in 2004-08-01 16:26:22.000000000 +0200
+@@ -371,9 +371,7 @@
+ source drivers/usb/Config.in
+ source drivers/input/Config.in
+
+-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+- source net/bluetooth/Config.in
+-fi
++source net/bluetooth/Config.in
+
+ mainmenu_option next_comment
+ comment 'Kernel hacking'
+diff -urN linux-2.4.18/arch/arm/config.in linux-2.4.18-mh15/arch/arm/config.in
+--- linux-2.4.18/arch/arm/config.in 2001-11-09 22:58:02.000000000 +0100
++++ linux-2.4.18-mh15/arch/arm/config.in 2004-08-01 16:26:22.000000000 +0200
+@@ -584,9 +584,7 @@
+
+ source drivers/usb/Config.in
+
+-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+- source net/bluetooth/Config.in
+-fi
++source net/bluetooth/Config.in
+
+ mainmenu_option next_comment
+ comment 'Kernel hacking'
+diff -urN linux-2.4.18/arch/i386/config.in linux-2.4.18-mh15/arch/i386/config.in
+--- linux-2.4.18/arch/i386/config.in 2002-02-25 20:37:52.000000000 +0100
++++ linux-2.4.18-mh15/arch/i386/config.in 2004-08-01 16:26:22.000000000 +0200
+@@ -407,9 +407,7 @@
+
+ source drivers/usb/Config.in
+
+-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+- source net/bluetooth/Config.in
+-fi
++source net/bluetooth/Config.in
+
+ mainmenu_option next_comment
+ comment 'Kernel hacking'
+diff -urN linux-2.4.18/arch/ppc/config.in linux-2.4.18-mh15/arch/ppc/config.in
+--- linux-2.4.18/arch/ppc/config.in 2002-02-25 20:37:55.000000000 +0100
++++ linux-2.4.18-mh15/arch/ppc/config.in 2004-08-01 16:26:22.000000000 +0200
+@@ -389,9 +389,7 @@
+
+ source drivers/usb/Config.in
+
+-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+- source net/bluetooth/Config.in
+-fi
++source net/bluetooth/Config.in
+
+ mainmenu_option next_comment
+ comment 'Kernel hacking'
+diff -urN linux-2.4.18/arch/sparc/config.in linux-2.4.18-mh15/arch/sparc/config.in
+--- linux-2.4.18/arch/sparc/config.in 2001-06-12 04:15:27.000000000 +0200
++++ linux-2.4.18-mh15/arch/sparc/config.in 2004-08-01 16:26:22.000000000 +0200
+@@ -251,9 +251,7 @@
+
+ source fs/Config.in
+
+-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+- source net/bluetooth/Config.in
+-fi
++source net/bluetooth/Config.in
+
+ mainmenu_option next_comment
+ comment 'Watchdog'
+diff -urN linux-2.4.18/arch/sparc64/config.in linux-2.4.18-mh15/arch/sparc64/config.in
+--- linux-2.4.18/arch/sparc64/config.in 2001-12-21 18:41:53.000000000 +0100
++++ linux-2.4.18-mh15/arch/sparc64/config.in 2004-08-01 16:26:22.000000000 +0200
+@@ -283,9 +283,7 @@
+
+ source drivers/usb/Config.in
+
+-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+- source net/bluetooth/Config.in
+-fi
++source net/bluetooth/Config.in
+
+ mainmenu_option next_comment
+ comment 'Watchdog'
+diff -urN linux-2.4.18/arch/sparc64/kernel/ioctl32.c linux-2.4.18-mh15/arch/sparc64/kernel/ioctl32.c
+--- linux-2.4.18/arch/sparc64/kernel/ioctl32.c 2002-02-25 20:37:56.000000000 +0100
++++ linux-2.4.18-mh15/arch/sparc64/kernel/ioctl32.c 2004-08-01 16:26:23.000000000 +0200
+@@ -92,6 +92,7 @@
+
+ #include <net/bluetooth/bluetooth.h>
+ #include <net/bluetooth/hci.h>
++#include <net/bluetooth/rfcomm.h>
+
+ #include <linux/usb.h>
+ #include <linux/usbdevice_fs.h>
+@@ -3822,6 +3823,15 @@
+ return err;
+ }
+
++/* Bluetooth ioctls */
++#define HCIUARTSETPROTO _IOW('U', 200, int)
++#define HCIUARTGETPROTO _IOR('U', 201, int)
++
++#define BNEPCONNADD _IOW('B', 200, int)
++#define BNEPCONNDEL _IOW('B', 201, int)
++#define BNEPGETCONNLIST _IOR('B', 210, int)
++#define BNEPGETCONNINFO _IOR('B', 211, int)
++
+ struct mtd_oob_buf32 {
+ u32 start;
+ u32 length;
+@@ -3878,6 +3888,16 @@
+ return ((0 == ret) ? 0 : -EFAULT);
+ }
+
++#define CMTPCONNADD _IOW('C', 200, int)
++#define CMTPCONNDEL _IOW('C', 201, int)
++#define CMTPGETCONNLIST _IOR('C', 210, int)
++#define CMTPGETCONNINFO _IOR('C', 211, int)
++
++#define HIDPCONNADD _IOW('H', 200, int)
++#define HIDPCONNDEL _IOW('H', 201, int)
++#define HIDPGETCONNLIST _IOR('H', 210, int)
++#define HIDPGETCONNINFO _IOR('H', 211, int)
++
+ struct ioctl_trans {
+ unsigned int cmd;
+ unsigned int handler;
+@@ -4540,6 +4560,25 @@
+ COMPATIBLE_IOCTL(HCISETSCAN)
+ COMPATIBLE_IOCTL(HCISETAUTH)
+ COMPATIBLE_IOCTL(HCIINQUIRY)
++COMPATIBLE_IOCTL(HCIUARTSETPROTO)
++COMPATIBLE_IOCTL(HCIUARTGETPROTO)
++COMPATIBLE_IOCTL(RFCOMMCREATEDEV)
++COMPATIBLE_IOCTL(RFCOMMRELEASEDEV)
++COMPATIBLE_IOCTL(RFCOMMGETDEVLIST)
++COMPATIBLE_IOCTL(RFCOMMGETDEVINFO)
++COMPATIBLE_IOCTL(RFCOMMSTEALDLC)
++COMPATIBLE_IOCTL(BNEPCONNADD)
++COMPATIBLE_IOCTL(BNEPCONNDEL)
++COMPATIBLE_IOCTL(BNEPGETCONNLIST)
++COMPATIBLE_IOCTL(BNEPGETCONNINFO)
++COMPATIBLE_IOCTL(CMTPCONNADD)
++COMPATIBLE_IOCTL(CMTPCONNDEL)
++COMPATIBLE_IOCTL(CMTPGETCONNLIST)
++COMPATIBLE_IOCTL(CMTPGETCONNINFO)
++COMPATIBLE_IOCTL(HIDPCONNADD)
++COMPATIBLE_IOCTL(HIDPCONNDEL)
++COMPATIBLE_IOCTL(HIDPGETCONNLIST)
++COMPATIBLE_IOCTL(HIDPGETCONNINFO)
+ /* Misc. */
+ COMPATIBLE_IOCTL(0x41545900) /* ATYIO_CLKR */
+ COMPATIBLE_IOCTL(0x41545901) /* ATYIO_CLKW */
+diff -urN linux-2.4.18/CREDITS linux-2.4.18-mh15/CREDITS
+--- linux-2.4.18/CREDITS 2002-02-25 20:37:50.000000000 +0100
++++ linux-2.4.18-mh15/CREDITS 2004-08-01 16:26:23.000000000 +0200
+@@ -1317,6 +1317,16 @@
+ S: Provo, Utah 84606-5607
+ S: USA
+
++N: Marcel Holtmann
++E: marcel@holtmann.org
++W: http://www.holtmann.org
++D: Maintainer of the Linux Bluetooth Subsystem
++D: Author and maintainer of the various Bluetooth HCI drivers
++D: Author and maintainer of the CAPI message transport protocol driver
++D: Author and maintainer of the Bluetooth HID protocol driver
++D: Various other Bluetooth related patches, cleanups and fixes
++S: Germany
++
+ N: Rob W. W. Hooft
+ E: hooft@EMBL-Heidelberg.DE
+ D: Shared libs for graphics-tools and for the f2c compiler
+@@ -2546,6 +2556,7 @@
+ N: Aristeu Sergio Rozanski Filho
+ E: aris@conectiva.com.br
+ D: Support for EtherExpress 10 ISA (i82595) in eepro driver
++D: User level driver support for input
+ S: Conectiva S.A.
+ S: R. Tocantins, 89 - Cristo Rei
+ S: 80050-430 - Curitiba - Paraná
+diff -urN linux-2.4.18/Documentation/Configure.help linux-2.4.18-mh15/Documentation/Configure.help
+--- linux-2.4.18/Documentation/Configure.help 2002-02-25 20:37:51.000000000 +0100
++++ linux-2.4.18-mh15/Documentation/Configure.help 2004-08-01 16:26:23.000000000 +0200
+@@ -2824,14 +2824,6 @@
+
+ If unsure, say N.
+
+-HCI EMU (virtual device) driver
+-CONFIG_BLUEZ_HCIEMU
+- Bluetooth Virtual HCI device driver.
+- This driver is required if you want to use HCI Emulation software.
+-
+- Say Y here to compile support for Virtual HCI devices into the
+- kernel or say M to compile it as module (hci_usb.o).
+-
+ # Choice: alphatype
+ Alpha system type
+ CONFIG_ALPHA_GENERIC
+@@ -11037,6 +11029,12 @@
+
+ If unsure, say N.
+
++Hotplug firmware loading support (EXPERIMENTAL)
++CONFIG_FW_LOADER
++ This option is provided for the case where no in-kernel-tree modules require
++ hotplug firmware loading support, but a module built outside the kernel tree
++ does.
++
+ Use PCI shared memory for NIC registers
+ CONFIG_TULIP_MMIO
+ Use PCI shared memory for the NIC registers, rather than going through
+@@ -12896,6 +12894,15 @@
+ accessible under char device 13:64+ - /dev/input/eventX in a generic
+ way. This is the future ...
+
++CONFIG_INPUT_UINPUT
++ Say Y here if you want to support user level drivers for input
++ subsystem accessible under char device 10:223 - /dev/input/uinput.
++
++ This driver is also available as a module ( = code which can be
++ inserted in and removed from the running kernel whenever you want).
++ The module will be called uinput.o. If you want to compile it as a
++ module, say M here and read <file:Documentation/modules.txt>.
++
+ USB Scanner support
+ CONFIG_USB_SCANNER
+ Say Y here if you want to connect a USB scanner to your computer's
+@@ -19870,19 +19877,22 @@
+ Bluetooth can be found at <http://www.bluetooth.com/>.
+
+ Linux Bluetooth subsystem consist of several layers:
+- HCI Core (device and connection manager, scheduler)
+- HCI Device drivers (interface to the hardware)
+- L2CAP Module (L2CAP protocol)
++ BlueZ Core (HCI device and connection manager, scheduler)
++ HCI Device drivers (Interface to the hardware)
++ SCO Module (SCO audio links)
++ L2CAP Module (Logical Link Control and Adaptation Protocol)
++ RFCOMM Module (RFCOMM Protocol)
++ BNEP Module (Bluetooth Network Encapsulation Protocol)
++ CMTP Module (CAPI Message Transport Protocol)
++ HIDP Module (Human Interface Device Protocol)
+
+- Say Y here to enable Linux Bluetooth support and to build HCI Core
+- layer.
++ Say Y here to compile Bluetooth support into the kernel or say M to
++ compile it as module (bluez.o).
+
+ To use Linux Bluetooth subsystem, you will need several user-space
+ utilities like hciconfig and hcid. These utilities and updates to
+ Bluetooth kernel modules are provided in the BlueZ package.
+- For more information, see <http://bluez.sourceforge.net/>.
+-
+- If you want to compile HCI Core as module (hci.o) say M here.
++ For more information, see <http://www.bluez.org/>.
+
+ L2CAP protocol support
+ CONFIG_BLUEZ_L2CAP
+@@ -19893,15 +19903,96 @@
+ Say Y here to compile L2CAP support into the kernel or say M to
+ compile it as module (l2cap.o).
+
++SCO links support
++CONFIG_BLUEZ_SCO
++ SCO link provides voice transport over Bluetooth. SCO support is
++ required for voice applications like Headset and Audio.
++
++ Say Y here to compile SCO support into the kernel or say M to
++ compile it as module (sco.o).
++
++RFCOMM protocol support
++CONFIG_BLUEZ_RFCOMM
++ RFCOMM provides connection oriented stream transport. RFCOMM
++ support is required for Dialup Networking, OBEX and other Bluetooth
++ applications.
++
++ Say Y here to compile RFCOMM support into the kernel or say M to
++ compile it as module (rfcomm.o).
++
++RFCOMM TTY emulation support
++CONFIG_BLUEZ_RFCOMM_TTY
++ This option enables TTY emulation support for RFCOMM channels.
++
++BNEP protocol support
++CONFIG_BLUEZ_BNEP
++ BNEP (Bluetooth Network Encapsulation Protocol) is Ethernet
++ emulation layer on top of Bluetooth. BNEP is required for
++ Bluetooth PAN (Personal Area Network).
++
++ Say Y here to compile BNEP support into the kernel or say M to
++ compile it as module (bnep.o).
++
++BNEP multicast filter support
++CONFIG_BLUEZ_BNEP_MC_FILTER
++ This option enables the multicast filter support for BNEP.
++
++BNEP protocol filter support
++CONFIG_BLUEZ_BNEP_PROTO_FILTER
++ This option enables the protocol filter support for BNEP.
++
++CMTP protocol support
++CONFIG_BLUEZ_CMTP
++ CMTP (CAPI Message Transport Protocol) is a transport layer
++ for CAPI messages. CMTP is required for the Bluetooth Common
++ ISDN Access Profile.
++
++ Say Y here to compile CMTP support into the kernel or say M to
++ compile it as module (cmtp.o).
++
++HIDP protocol support
++CONFIG_BLUEZ_HIDP
++ HIDP (Human Interface Device Protocol) is a transport layer
++ for HID reports. HIDP is required for the Bluetooth Human
++ Interface Device Profile.
++
++ Say Y here to compile HIDP support into the kernel or say M to
++ compile it as module (hidp.o).
++
+ HCI UART driver
+ CONFIG_BLUEZ_HCIUART
+ Bluetooth HCI UART driver.
+ This driver is required if you want to use Bluetooth devices with
+- serial port interface.
++ serial port interface. You will also need this driver if you have
++ UART based Bluetooth PCMCIA and CF devices like Xircom Credit Card
++ adapter and BrainBoxes Bluetooth PC Card.
+
+ Say Y here to compile support for Bluetooth UART devices into the
+ kernel or say M to compile it as module (hci_uart.o).
+
++HCI UART (H4) protocol support
++CONFIG_BLUEZ_HCIUART_H4
++ UART (H4) is serial protocol for communication between Bluetooth
++ device and host. This protocol is required for most Bluetooth devices
++ with UART interface, including PCMCIA and CF cards.
++
++ Say Y here to compile support for HCI UART (H4) protocol.
++
++HCI BCSP protocol support
++CONFIG_BLUEZ_HCIUART_BCSP
++ BCSP (BlueCore Serial Protocol) is serial protocol for communication
++ between Bluetooth device and host. This protocol is required for non
++ USB Bluetooth devices based on CSR BlueCore chip, including PCMCIA and
++ CF cards.
++
++ Say Y here to compile support for HCI BCSP protocol.
++
++HCI BCSP transmit CRC with every BCSP packet
++CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ If you say Y here, a 16-bit CRC checksum will be transmitted along with
++ every BCSP (BlueCore Serial Protocol) packet sent to the Bluetooth chip.
++ This increases reliability, but slightly reduces efficiency.
++
+ HCI USB driver
+ CONFIG_BLUEZ_HCIUSB
+ Bluetooth HCI USB driver.
+@@ -19911,7 +20002,16 @@
+ Say Y here to compile support for Bluetooth USB devices into the
+ kernel or say M to compile it as module (hci_usb.o).
+
+-HCI VHCI virtual HCI device driver
++HCI USB SCO (voice) support
++CONFIG_BLUEZ_HCIUSB_SCO
++ This option enables the SCO support in the HCI USB driver. You need this
++ to transmit voice data with your Bluetooth USB device. And your device
++ must also support sending SCO data over the HCI layer, because some of
++ them sends the SCO data to an internal PCM adapter.
++
++ Say Y here to compile support for HCI SCO data.
++
++HCI VHCI Virtual HCI device driver
+ CONFIG_BLUEZ_HCIVHCI
+ Bluetooth Virtual HCI device driver.
+ This driver is required if you want to use HCI Emulation software.
+@@ -19919,6 +20019,63 @@
+ Say Y here to compile support for virtual HCI devices into the
+ kernel or say M to compile it as module (hci_vhci.o).
+
++HCI BFUSB device driver
++CONFIG_BLUEZ_HCIBFUSB
++ Bluetooth HCI BlueFRITZ! USB driver.
++ This driver provides support for Bluetooth USB devices with AVM
++ interface:
++ AVM BlueFRITZ! USB
++
++ Say Y here to compile support for HCI BFUSB devices into the
++ kernel or say M to compile it as module (bfusb.o).
++
++HCI DTL1 (PC Card) device driver
++CONFIG_BLUEZ_HCIDTL1
++ Bluetooth HCI DTL1 (PC Card) driver.
++ This driver provides support for Bluetooth PCMCIA devices with
++ Nokia DTL1 interface:
++ Nokia Bluetooth Card
++ Socket Bluetooth CF Card
++
++ Say Y here to compile support for HCI DTL1 devices into the
++ kernel or say M to compile it as module (dtl1_cs.o).
++
++HCI BT3C (PC Card) device driver
++CONFIG_BLUEZ_HCIBT3C
++ Bluetooth HCI BT3C (PC Card) driver.
++ This driver provides support for Bluetooth PCMCIA devices with
++ 3Com BT3C interface:
++ 3Com Bluetooth Card (3CRWB6096)
++ HP Bluetooth Card
++
++ Say Y here to compile support for HCI BT3C devices into the
++ kernel or say M to compile it as module (bt3c_cs.o).
++
++HCI BlueCard (PC Card) device driver
++CONFIG_BLUEZ_HCIBLUECARD
++ Bluetooth HCI BlueCard (PC Card) driver.
++ This driver provides support for Bluetooth PCMCIA devices with
++ Anycom BlueCard interface:
++ Anycom Bluetooth PC Card
++ Anycom Bluetooth CF Card
++
++ Say Y here to compile support for HCI BlueCard devices into the
++ kernel or say M to compile it as module (bluecard_cs.o).
++
++HCI UART (PC Card) device driver
++CONFIG_BLUEZ_HCIBTUART
++ Bluetooth HCI UART (PC Card) driver.
++ This driver provides support for Bluetooth PCMCIA devices with
++ an UART interface:
++ Xircom CreditCard Bluetooth Adapter
++ Xircom RealPort2 Bluetooth Adapter
++ Sphinx PICO Card
++ H-Soft blue+Card
++ Cyber-blue Compact Flash Card
++
++ Say Y here to compile support for HCI UART devices into the
++ kernel or say M to compile it as module (btuart_cs.o).
++
+ # The following options are for Linux when running on the Hitachi
+ # SuperH family of RISC microprocessors.
+
+diff -urN linux-2.4.18/Documentation/devices.txt linux-2.4.18-mh15/Documentation/devices.txt
+--- linux-2.4.18/Documentation/devices.txt 2001-11-07 23:46:01.000000000 +0100
++++ linux-2.4.18-mh15/Documentation/devices.txt 2004-08-01 16:26:23.000000000 +0200
+@@ -419,6 +419,7 @@
+ 220 = /dev/mptctl Message passing technology (MPT) control
+ 221 = /dev/mvista/hssdsi Montavista PICMG hot swap system driver
+ 222 = /dev/mvista/hasi Montavista PICMG high availability
++ 223 = /dev/input/uinput User level driver support for input
+ 240-255 Reserved for local use
+
+ 11 char Raw keyboard device
+diff -urN linux-2.4.18/Documentation/firmware_class/firmware_sample_driver.c linux-2.4.18-mh15/Documentation/firmware_class/firmware_sample_driver.c
+--- linux-2.4.18/Documentation/firmware_class/firmware_sample_driver.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/Documentation/firmware_class/firmware_sample_driver.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,121 @@
++/*
++ * firmware_sample_driver.c -
++ *
++ * Copyright (c) 2003 Manuel Estrada Sainz <ranty@debian.org>
++ *
++ * Sample code on how to use request_firmware() from drivers.
++ *
++ * Note that register_firmware() is currently useless.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/string.h>
++
++#include "linux/firmware.h"
++
++#define WE_CAN_NEED_FIRMWARE_BEFORE_USERSPACE_IS_AVAILABLE
++#ifdef WE_CAN_NEED_FIRMWARE_BEFORE_USERSPACE_IS_AVAILABLE
++char __init inkernel_firmware[] = "let's say that this is firmware\n";
++#endif
++
++static char ghost_device[] = "ghost0";
++
++static void sample_firmware_load(char *firmware, int size)
++{
++ u8 buf[size+1];
++ memcpy(buf, firmware, size);
++ buf[size] = '\0';
++ printk("firmware_sample_driver: firmware: %s\n", buf);
++}
++
++static void sample_probe_default(void)
++{
++ /* uses the default method to get the firmware */
++ const struct firmware *fw_entry;
++ printk("firmware_sample_driver: a ghost device got inserted :)\n");
++
++ if(request_firmware(&fw_entry, "sample_driver_fw", ghost_device)!=0)
++ {
++ printk(KERN_ERR
++ "firmware_sample_driver: Firmware not available\n");
++ return;
++ }
++
++ sample_firmware_load(fw_entry->data, fw_entry->size);
++
++ release_firmware(fw_entry);
++
++ /* finish setting up the device */
++}
++static void sample_probe_specific(void)
++{
++ /* Uses some specific hotplug support to get the firmware from
++ * userspace directly into the hardware, or via some sysfs file */
++
++ /* NOTE: This currently doesn't work */
++
++ printk("firmware_sample_driver: a ghost device got inserted :)\n");
++
++ if(request_firmware(NULL, "sample_driver_fw", ghost_device)!=0)
++ {
++ printk(KERN_ERR
++ "firmware_sample_driver: Firmware load failed\n");
++ return;
++ }
++
++ /* request_firmware blocks until userspace finished, so at
++ * this point the firmware should be already in the device */
++
++ /* finish setting up the device */
++}
++static void sample_probe_async_cont(const struct firmware *fw, void *context)
++{
++ if(!fw){
++ printk(KERN_ERR
++ "firmware_sample_driver: firmware load failed\n");
++ return;
++ }
++
++ printk("firmware_sample_driver: device pointer \"%s\"\n",
++ (char *)context);
++ sample_firmware_load(fw->data, fw->size);
++}
++static void sample_probe_async(void)
++{
++ /* Let's say that I can't sleep */
++ int error;
++ error = request_firmware_nowait (THIS_MODULE,
++ "sample_driver_fw", ghost_device,
++ "my device pointer",
++ sample_probe_async_cont);
++ if(error){
++ printk(KERN_ERR
++ "firmware_sample_driver:"
++ " request_firmware_nowait failed\n");
++ }
++}
++
++static int sample_init(void)
++{
++#ifdef WE_CAN_NEED_FIRMWARE_BEFORE_USERSPACE_IS_AVAILABLE
++ register_firmware("sample_driver_fw", inkernel_firmware,
++ sizeof(inkernel_firmware));
++#endif
++ /* since there is no real hardware insertion I just call the
++ * sample probe functions here */
++ sample_probe_specific();
++ sample_probe_default();
++ sample_probe_async();
++ return 0;
++}
++static void __exit sample_exit(void)
++{
++}
++
++module_init (sample_init);
++module_exit (sample_exit);
++
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/Documentation/firmware_class/hotplug-script linux-2.4.18-mh15/Documentation/firmware_class/hotplug-script
+--- linux-2.4.18/Documentation/firmware_class/hotplug-script 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/Documentation/firmware_class/hotplug-script 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,16 @@
++#!/bin/sh
++
++# Simple hotplug script sample:
++#
++# Both $DEVPATH and $FIRMWARE are already provided in the environment.
++
++HOTPLUG_FW_DIR=/usr/lib/hotplug/firmware/
++
++echo 1 > /sysfs/$DEVPATH/loading
++cat $HOTPLUG_FW_DIR/$FIRMWARE > /sysfs/$DEVPATH/data
++echo 0 > /sysfs/$DEVPATH/loading
++
++# To cancel the load in case of error:
++#
++# echo -1 > /sysfs/$DEVPATH/loading
++#
+diff -urN linux-2.4.18/Documentation/firmware_class/README linux-2.4.18-mh15/Documentation/firmware_class/README
+--- linux-2.4.18/Documentation/firmware_class/README 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/Documentation/firmware_class/README 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,58 @@
++
++ request_firmware() hotplug interface:
++ ------------------------------------
++ Copyright (C) 2003 Manuel Estrada Sainz <ranty@debian.org>
++
++ Why:
++ ---
++
++ Today, the most extended way to use firmware in the Linux kernel is linking
++ it statically in a header file. Which has political and technical issues:
++
++ 1) Some firmware is not legal to redistribute.
++ 2) The firmware occupies memory permanently, even though it often is just
++ used once.
++ 3) Some people, like the Debian crowd, don't consider some firmware free
++ enough and remove entire drivers (e.g.: keyspan).
++
++ about in-kernel persistence:
++ ---------------------------
++ Under some circumstances, as explained below, it would be interesting to keep
++ firmware images in non-swappable kernel memory or even in the kernel image
++ (probably within initramfs).
++
++ Note that this functionality has not been implemented.
++
++ - Why OPTIONAL in-kernel persistence may be a good idea sometimes:
++
++ - If the device that needs the firmware is needed to access the
++ filesystem. When upon some error the device has to be reset and the
++ firmware reloaded, it won't be possible to get it from userspace.
++ e.g.:
++ - A diskless client with a network card that needs firmware.
++ - The filesystem is stored in a disk behind an scsi device
++ that needs firmware.
++ - Replacing buggy DSDT/SSDT ACPI tables on boot.
++ Note: this would require the persistent objects to be included
++ within the kernel image, probably within initramfs.
++
++ And the same device can be needed to access the filesystem or not depending
++ on the setup, so I think that the choice on what firmware to make
++ persistent should be left to userspace.
++
++ - Why register_firmware()+__init can be useful:
++ - For boot devices needing firmware.
++ - To make the transition easier:
++ The firmware can be declared __init and register_firmware()
++ called on module_init. Then the firmware is warranted to be
++ there even if "firmware hotplug userspace" is not there yet or
++ it doesn't yet provide the needed firmware.
++ Once the firmware is widely available in userspace, it can be
++ removed from the kernel. Or made optional (CONFIG_.*_FIRMWARE).
++
++ In either case, if firmware hotplug support is there, it can move the
++ firmware out of kernel memory into the real filesystem for later
++ usage.
++
++ Note: If persistence is implemented on top of initramfs,
++ register_firmware() may not be appropriate.
+diff -urN linux-2.4.18/drivers/bluetooth/bfusb.c linux-2.4.18-mh15/drivers/bluetooth/bfusb.c
+--- linux-2.4.18/drivers/bluetooth/bfusb.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/bfusb.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,782 @@
++/*
++ *
++ * AVM BlueFRITZ! USB driver
++ *
++ * Copyright (C) 2003 Marcel Holtmann <marcel@holtmann.org>
++ *
++ *
++ * 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/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/errno.h>
++#include <linux/skbuff.h>
++
++#include <linux/firmware.h>
++#include <linux/usb.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++#ifndef CONFIG_BLUEZ_HCIBFUSB_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define VERSION "1.1"
++
++static struct usb_device_id bfusb_table[] = {
++ /* AVM BlueFRITZ! USB */
++ { USB_DEVICE(0x057c, 0x2200) },
++
++ { } /* Terminating entry */
++};
++
++MODULE_DEVICE_TABLE(usb, bfusb_table);
++
++
++#define BFUSB_MAX_BLOCK_SIZE 256
++
++#define BFUSB_BLOCK_TIMEOUT (HZ * 3)
++
++#define BFUSB_TX_PROCESS 1
++#define BFUSB_TX_WAKEUP 2
++
++#define BFUSB_MAX_BULK_TX 1
++#define BFUSB_MAX_BULK_RX 1
++
++struct bfusb {
++ struct hci_dev hdev;
++
++ unsigned long state;
++
++ struct usb_device *udev;
++
++ unsigned int bulk_in_ep;
++ unsigned int bulk_out_ep;
++ unsigned int bulk_pkt_size;
++
++ rwlock_t lock;
++
++ struct sk_buff_head transmit_q;
++
++ struct sk_buff *reassembly;
++
++ atomic_t pending_tx;
++ struct sk_buff_head pending_q;
++ struct sk_buff_head completed_q;
++};
++
++struct bfusb_scb {
++ struct urb *urb;
++};
++
++static void bfusb_tx_complete(struct urb *urb);
++static void bfusb_rx_complete(struct urb *urb);
++
++static struct urb *bfusb_get_completed(struct bfusb *bfusb)
++{
++ struct sk_buff *skb;
++ struct urb *urb = NULL;
++
++ BT_DBG("bfusb %p", bfusb);
++
++ skb = skb_dequeue(&bfusb->completed_q);
++ if (skb) {
++ urb = ((struct bfusb_scb *) skb->cb)->urb;
++ kfree_skb(skb);
++ }
++
++ return urb;
++}
++
++static inline void bfusb_unlink_urbs(struct bfusb *bfusb)
++{
++ struct sk_buff *skb;
++ struct urb *urb;
++
++ BT_DBG("bfusb %p", bfusb);
++
++ while ((skb = skb_dequeue(&bfusb->pending_q))) {
++ urb = ((struct bfusb_scb *) skb->cb)->urb;
++ usb_unlink_urb(urb);
++ skb_queue_tail(&bfusb->completed_q, skb);
++ }
++
++ while ((urb = bfusb_get_completed(bfusb)))
++ usb_free_urb(urb);
++}
++
++
++static int bfusb_send_bulk(struct bfusb *bfusb, struct sk_buff *skb)
++{
++ struct bfusb_scb *scb = (void *) skb->cb;
++ struct urb *urb = bfusb_get_completed(bfusb);
++ int err, pipe;
++
++ BT_DBG("bfusb %p skb %p len %d", bfusb, skb, skb->len);
++
++ if (!urb && !(urb = usb_alloc_urb(0)))
++ return -ENOMEM;
++
++ pipe = usb_sndbulkpipe(bfusb->udev, bfusb->bulk_out_ep);
++
++ FILL_BULK_URB(urb, bfusb->udev, pipe, skb->data, skb->len,
++ bfusb_tx_complete, skb);
++
++ urb->transfer_flags = USB_QUEUE_BULK;
++
++ scb->urb = urb;
++
++ skb_queue_tail(&bfusb->pending_q, skb);
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s bulk tx submit failed urb %p err %d",
++ bfusb->hdev.name, urb, err);
++ skb_unlink(skb);
++ usb_free_urb(urb);
++ } else
++ atomic_inc(&bfusb->pending_tx);
++
++ return err;
++}
++
++static void bfusb_tx_wakeup(struct bfusb *bfusb)
++{
++ struct sk_buff *skb;
++
++ BT_DBG("bfusb %p", bfusb);
++
++ if (test_and_set_bit(BFUSB_TX_PROCESS, &bfusb->state)) {
++ set_bit(BFUSB_TX_WAKEUP, &bfusb->state);
++ return;
++ }
++
++ do {
++ clear_bit(BFUSB_TX_WAKEUP, &bfusb->state);
++
++ while ((atomic_read(&bfusb->pending_tx) < BFUSB_MAX_BULK_TX) &&
++ (skb = skb_dequeue(&bfusb->transmit_q))) {
++ if (bfusb_send_bulk(bfusb, skb) < 0) {
++ skb_queue_head(&bfusb->transmit_q, skb);
++ break;
++ }
++ }
++
++ } while (test_bit(BFUSB_TX_WAKEUP, &bfusb->state));
++
++ clear_bit(BFUSB_TX_PROCESS, &bfusb->state);
++}
++
++static void bfusb_tx_complete(struct urb *urb)
++{
++ struct sk_buff *skb = (struct sk_buff *) urb->context;
++ struct bfusb *bfusb = (struct bfusb *) skb->dev;
++
++ BT_DBG("bfusb %p urb %p skb %p len %d", bfusb, urb, skb, skb->len);
++
++ atomic_dec(&bfusb->pending_tx);
++
++ if (!test_bit(HCI_RUNNING, &bfusb->hdev.flags))
++ return;
++
++ if (!urb->status)
++ bfusb->hdev.stat.byte_tx += skb->len;
++ else
++ bfusb->hdev.stat.err_tx++;
++
++ read_lock(&bfusb->lock);
++
++ skb_unlink(skb);
++ skb_queue_tail(&bfusb->completed_q, skb);
++
++ bfusb_tx_wakeup(bfusb);
++
++ read_unlock(&bfusb->lock);
++}
++
++
++static int bfusb_rx_submit(struct bfusb *bfusb, struct urb *urb)
++{
++ struct bfusb_scb *scb;
++ struct sk_buff *skb;
++ int err, pipe, size = HCI_MAX_FRAME_SIZE + 32;
++
++ BT_DBG("bfusb %p urb %p", bfusb, urb);
++
++ if (!urb && !(urb = usb_alloc_urb(0)))
++ return -ENOMEM;
++
++ if (!(skb = bluez_skb_alloc(size, GFP_ATOMIC))) {
++ usb_free_urb(urb);
++ return -ENOMEM;
++ }
++
++ skb->dev = (void *) bfusb;
++
++ scb = (struct bfusb_scb *) skb->cb;
++ scb->urb = urb;
++
++ pipe = usb_rcvbulkpipe(bfusb->udev, bfusb->bulk_in_ep);
++
++ FILL_BULK_URB(urb, bfusb->udev, pipe, skb->data, size,
++ bfusb_rx_complete, skb);
++
++ urb->transfer_flags = USB_QUEUE_BULK;
++
++ skb_queue_tail(&bfusb->pending_q, skb);
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s bulk rx submit failed urb %p err %d",
++ bfusb->hdev.name, urb, err);
++ skb_unlink(skb);
++ kfree_skb(skb);
++ usb_free_urb(urb);
++ }
++
++ return err;
++}
++
++static inline int bfusb_recv_block(struct bfusb *bfusb, int hdr, unsigned char *data, int len)
++{
++ BT_DBG("bfusb %p hdr 0x%02x data %p len %d", bfusb, hdr, data, len);
++
++ if (hdr & 0x10) {
++ BT_ERR("%s error in block", bfusb->hdev.name);
++ if (bfusb->reassembly)
++ kfree_skb(bfusb->reassembly);
++ bfusb->reassembly = NULL;
++ return -EIO;
++ }
++
++ if (hdr & 0x04) {
++ struct sk_buff *skb;
++ unsigned char pkt_type;
++ int pkt_len = 0;
++
++ if (bfusb->reassembly) {
++ BT_ERR("%s unexpected start block", bfusb->hdev.name);
++ kfree_skb(bfusb->reassembly);
++ bfusb->reassembly = NULL;
++ }
++
++ if (len < 1) {
++ BT_ERR("%s no packet type found", bfusb->hdev.name);
++ return -EPROTO;
++ }
++
++ pkt_type = *data++; len--;
++
++ switch (pkt_type) {
++ case HCI_EVENT_PKT:
++ if (len >= HCI_EVENT_HDR_SIZE) {
++ hci_event_hdr *hdr = (hci_event_hdr *) data;
++ pkt_len = HCI_EVENT_HDR_SIZE + hdr->plen;
++ } else {
++ BT_ERR("%s event block is too short", bfusb->hdev.name);
++ return -EILSEQ;
++ }
++ break;
++
++ case HCI_ACLDATA_PKT:
++ if (len >= HCI_ACL_HDR_SIZE) {
++ hci_acl_hdr *hdr = (hci_acl_hdr *) data;
++ pkt_len = HCI_ACL_HDR_SIZE + __le16_to_cpu(hdr->dlen);
++ } else {
++ BT_ERR("%s data block is too short", bfusb->hdev.name);
++ return -EILSEQ;
++ }
++ break;
++
++ case HCI_SCODATA_PKT:
++ if (len >= HCI_SCO_HDR_SIZE) {
++ hci_sco_hdr *hdr = (hci_sco_hdr *) data;
++ pkt_len = HCI_SCO_HDR_SIZE + hdr->dlen;
++ } else {
++ BT_ERR("%s audio block is too short", bfusb->hdev.name);
++ return -EILSEQ;
++ }
++ break;
++ }
++
++ skb = bluez_skb_alloc(pkt_len, GFP_ATOMIC);
++ if (!skb) {
++ BT_ERR("%s no memory for the packet", bfusb->hdev.name);
++ return -ENOMEM;
++ }
++
++ skb->dev = (void *) &bfusb->hdev;
++ skb->pkt_type = pkt_type;
++
++ bfusb->reassembly = skb;
++ } else {
++ if (!bfusb->reassembly) {
++ BT_ERR("%s unexpected continuation block", bfusb->hdev.name);
++ return -EIO;
++ }
++ }
++
++ if (len > 0)
++ memcpy(skb_put(bfusb->reassembly, len), data, len);
++
++ if (hdr & 0x08) {
++ hci_recv_frame(bfusb->reassembly);
++ bfusb->reassembly = NULL;
++ }
++
++ return 0;
++}
++
++static void bfusb_rx_complete(struct urb *urb)
++{
++ struct sk_buff *skb = (struct sk_buff *) urb->context;
++ struct bfusb *bfusb = (struct bfusb *) skb->dev;
++ unsigned char *buf = urb->transfer_buffer;
++ int count = urb->actual_length;
++ int err, hdr, len;
++
++ BT_DBG("bfusb %p urb %p skb %p len %d", bfusb, urb, skb, skb->len);
++
++ read_lock(&bfusb->lock);
++
++ if (!test_bit(HCI_RUNNING, &bfusb->hdev.flags))
++ goto unlock;
++
++ if (urb->status || !count)
++ goto resubmit;
++
++ bfusb->hdev.stat.byte_rx += count;
++
++ skb_put(skb, count);
++
++ while (count) {
++ hdr = buf[0] | (buf[1] << 8);
++
++ if (hdr & 0x4000) {
++ len = 0;
++ count -= 2;
++ buf += 2;
++ } else {
++ len = (buf[2] == 0) ? 256 : buf[2];
++ count -= 3;
++ buf += 3;
++ }
++
++ if (count < len) {
++ BT_ERR("%s block extends over URB buffer ranges",
++ bfusb->hdev.name);
++ }
++
++ if ((hdr & 0xe1) == 0xc1)
++ bfusb_recv_block(bfusb, hdr, buf, len);
++
++ count -= len;
++ buf += len;
++ }
++
++ skb_unlink(skb);
++ kfree_skb(skb);
++
++ bfusb_rx_submit(bfusb, urb);
++
++ read_unlock(&bfusb->lock);
++
++ return;
++
++resubmit:
++ urb->dev = bfusb->udev;
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s bulk resubmit failed urb %p err %d",
++ bfusb->hdev.name, urb, err);
++ }
++
++unlock:
++ read_unlock(&bfusb->lock);
++}
++
++
++static int bfusb_open(struct hci_dev *hdev)
++{
++ struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
++ unsigned long flags;
++ int i, err;
++
++ BT_DBG("hdev %p bfusb %p", hdev, bfusb);
++
++ if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
++
++ MOD_INC_USE_COUNT;
++
++ write_lock_irqsave(&bfusb->lock, flags);
++
++ err = bfusb_rx_submit(bfusb, NULL);
++ if (!err) {
++ for (i = 1; i < BFUSB_MAX_BULK_RX; i++)
++ bfusb_rx_submit(bfusb, NULL);
++ } else {
++ clear_bit(HCI_RUNNING, &hdev->flags);
++ MOD_DEC_USE_COUNT;
++ }
++
++ write_unlock_irqrestore(&bfusb->lock, flags);
++
++ return err;
++}
++
++static int bfusb_flush(struct hci_dev *hdev)
++{
++ struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
++
++ BT_DBG("hdev %p bfusb %p", hdev, bfusb);
++
++ skb_queue_purge(&bfusb->transmit_q);
++
++ return 0;
++}
++
++static int bfusb_close(struct hci_dev *hdev)
++{
++ struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
++ unsigned long flags;
++
++ BT_DBG("hdev %p bfusb %p", hdev, bfusb);
++
++ if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
++
++ write_lock_irqsave(&bfusb->lock, flags);
++
++ bfusb_unlink_urbs(bfusb);
++ bfusb_flush(hdev);
++
++ write_unlock_irqrestore(&bfusb->lock, flags);
++
++ MOD_DEC_USE_COUNT;
++
++ return 0;
++}
++
++static int bfusb_send_frame(struct sk_buff *skb)
++{
++ struct hci_dev *hdev = (struct hci_dev *) skb->dev;
++ struct bfusb *bfusb;
++ struct sk_buff *nskb;
++ unsigned char buf[3];
++ int sent = 0, size, count;
++
++ BT_DBG("hdev %p skb %p type %d len %d", hdev, skb, skb->pkt_type, skb->len);
++
++ if (!hdev) {
++ BT_ERR("Frame for unknown HCI device (hdev=NULL)");
++ return -ENODEV;
++ }
++
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
++ return -EBUSY;
++
++ bfusb = (struct bfusb *) hdev->driver_data;
++
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++ };
++
++ /* Prepend skb with frame type */
++ memcpy(skb_push(skb, 1), &(skb->pkt_type), 1);
++
++ count = skb->len;
++
++ /* Max HCI frame size seems to be 1511 + 1 */
++ if (!(nskb = bluez_skb_alloc(count + 32, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for new packet");
++ return -ENOMEM;
++ }
++
++ nskb->dev = (void *) bfusb;
++
++ while (count) {
++ size = min_t(uint, count, BFUSB_MAX_BLOCK_SIZE);
++
++ buf[0] = 0xc1 | ((sent == 0) ? 0x04 : 0) | ((count == size) ? 0x08 : 0);
++ buf[1] = 0x00;
++ buf[2] = (size == BFUSB_MAX_BLOCK_SIZE) ? 0 : size;
++
++ memcpy(skb_put(nskb, 3), buf, 3);
++ memcpy(skb_put(nskb, size), skb->data + sent, size);
++
++ sent += size;
++ count -= size;
++ }
++
++ /* Don't send frame with multiple size of bulk max packet */
++ if ((nskb->len % bfusb->bulk_pkt_size) == 0) {
++ buf[0] = 0xdd;
++ buf[1] = 0x00;
++ memcpy(skb_put(nskb, 2), buf, 2);
++ }
++
++ read_lock(&bfusb->lock);
++
++ skb_queue_tail(&bfusb->transmit_q, nskb);
++ bfusb_tx_wakeup(bfusb);
++
++ read_unlock(&bfusb->lock);
++
++ kfree_skb(skb);
++
++ return 0;
++}
++
++static void bfusb_destruct(struct hci_dev *hdev)
++{
++ struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
++
++ BT_DBG("hdev %p bfusb %p", hdev, bfusb);
++
++ kfree(bfusb);
++}
++
++static int bfusb_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
++{
++ return -ENOIOCTLCMD;
++}
++
++
++static int bfusb_load_firmware(struct bfusb *bfusb, unsigned char *firmware, int count)
++{
++ unsigned char *buf;
++ int err, pipe, len, size, sent = 0;
++
++ BT_DBG("bfusb %p udev %p firmware %p count %d", bfusb, bfusb->udev, firmware, count);
++
++ BT_INFO("BlueFRITZ! USB loading firmware");
++
++ if (usb_set_configuration(bfusb->udev, 1) < 0) {
++ BT_ERR("Can't change to loading configuration");
++ return -EBUSY;
++ }
++
++ buf = kmalloc(BFUSB_MAX_BLOCK_SIZE + 3, GFP_ATOMIC);
++ if (!buf) {
++ BT_ERR("Can't allocate memory chunk for firmware");
++ return -ENOMEM;
++ }
++
++ pipe = usb_sndbulkpipe(bfusb->udev, bfusb->bulk_out_ep);
++
++ while (count) {
++ size = min_t(uint, count, BFUSB_MAX_BLOCK_SIZE + 3);
++
++ memcpy(buf, firmware + sent, size);
++
++ err = usb_bulk_msg(bfusb->udev, pipe, buf, size,
++ &len, BFUSB_BLOCK_TIMEOUT);
++
++ if (err || (len != size)) {
++ BT_ERR("Error in firmware loading");
++ goto error;
++ }
++
++ sent += size;
++ count -= size;
++ }
++
++ if ((err = usb_bulk_msg(bfusb->udev, pipe, NULL, 0,
++ &len, BFUSB_BLOCK_TIMEOUT)) < 0) {
++ BT_ERR("Error in null packet request");
++ goto error;
++ }
++
++ if ((err = usb_set_configuration(bfusb->udev, 2)) < 0) {
++ BT_ERR("Can't change to running configuration");
++ goto error;
++ }
++
++ BT_INFO("BlueFRITZ! USB device ready");
++
++ kfree(buf);
++ return 0;
++
++error:
++ kfree(buf);
++
++ pipe = usb_sndctrlpipe(bfusb->udev, 0);
++
++ usb_control_msg(bfusb->udev, pipe, USB_REQ_SET_CONFIGURATION,
++ 0, 0, 0, NULL, 0, BFUSB_BLOCK_TIMEOUT);
++
++ return err;
++}
++
++static void *bfusb_probe(struct usb_device *udev, unsigned int ifnum, const struct usb_device_id *id)
++{
++ const struct firmware *firmware;
++ char device[16];
++ struct usb_interface *iface;
++ struct usb_interface_descriptor *iface_desc;
++ struct usb_endpoint_descriptor *bulk_out_ep;
++ struct usb_endpoint_descriptor *bulk_in_ep;
++ struct hci_dev *hdev;
++ struct bfusb *bfusb;
++
++ BT_DBG("udev %p ifnum %d id %p", udev, ifnum, id);
++
++ /* Check number of endpoints */
++ iface = &udev->actconfig->interface[0];
++ iface_desc = &iface->altsetting[0];
++
++ if (iface_desc->bNumEndpoints < 2)
++ return NULL;
++
++ bulk_out_ep = &iface_desc->endpoint[0];
++ bulk_in_ep = &iface_desc->endpoint[1];
++
++ if (!bulk_out_ep || !bulk_in_ep) {
++ BT_ERR("Bulk endpoints not found");
++ goto done;
++ }
++
++ /* Initialize control structure and load firmware */
++ if (!(bfusb = kmalloc(sizeof(struct bfusb), GFP_KERNEL))) {
++ BT_ERR("Can't allocate memory for control structure");
++ goto done;
++ }
++
++ memset(bfusb, 0, sizeof(struct bfusb));
++
++ bfusb->udev = udev;
++ bfusb->bulk_in_ep = bulk_in_ep->bEndpointAddress;
++ bfusb->bulk_out_ep = bulk_out_ep->bEndpointAddress;
++ bfusb->bulk_pkt_size = bulk_out_ep->wMaxPacketSize;
++
++ bfusb->lock = RW_LOCK_UNLOCKED;
++
++ bfusb->reassembly = NULL;
++
++ skb_queue_head_init(&bfusb->transmit_q);
++ skb_queue_head_init(&bfusb->pending_q);
++ skb_queue_head_init(&bfusb->completed_q);
++
++ snprintf(device, sizeof(device), "bfusb%3.3d%3.3d", udev->bus->busnum, udev->devnum);
++
++ if (request_firmware(&firmware, "bfubase.frm", device) < 0) {
++ BT_ERR("Firmware request failed");
++ goto error;
++ }
++
++ if (bfusb_load_firmware(bfusb, firmware->data, firmware->size) < 0) {
++ BT_ERR("Firmware loading failed");
++ goto release;
++ }
++
++ release_firmware(firmware);
++
++ /* Initialize and register HCI device */
++ hdev = &bfusb->hdev;
++
++ hdev->type = HCI_USB;
++ hdev->driver_data = bfusb;
++
++ hdev->open = bfusb_open;
++ hdev->close = bfusb_close;
++ hdev->flush = bfusb_flush;
++ hdev->send = bfusb_send_frame;
++ hdev->destruct = bfusb_destruct;
++ hdev->ioctl = bfusb_ioctl;
++
++ if (hci_register_dev(hdev) < 0) {
++ BT_ERR("Can't register HCI device");
++ goto error;
++ }
++
++ return bfusb;
++
++release:
++ release_firmware(firmware);
++
++error:
++ kfree(bfusb);
++
++done:
++ return NULL;
++}
++
++static void bfusb_disconnect(struct usb_device *udev, void *ptr)
++{
++ struct bfusb *bfusb = (struct bfusb *) ptr;
++ struct hci_dev *hdev = &bfusb->hdev;
++
++ BT_DBG("udev %p ptr %p", udev, ptr);
++
++ if (!hdev)
++ return;
++
++ bfusb_close(hdev);
++
++ if (hci_unregister_dev(hdev) < 0)
++ BT_ERR("Can't unregister HCI device %s", hdev->name);
++}
++
++static struct usb_driver bfusb_driver = {
++ name: "bfusb",
++ probe: bfusb_probe,
++ disconnect: bfusb_disconnect,
++ id_table: bfusb_table,
++};
++
++static int __init bfusb_init(void)
++{
++ int err;
++
++ BT_INFO("BlueFRITZ! USB driver ver %s", VERSION);
++ BT_INFO("Copyright (C) 2003 Marcel Holtmann <marcel@holtmann.org>");
++
++ if ((err = usb_register(&bfusb_driver)) < 0)
++ BT_ERR("Failed to register BlueFRITZ! USB driver");
++
++ return err;
++}
++
++static void __exit bfusb_cleanup(void)
++{
++ usb_deregister(&bfusb_driver);
++}
++
++module_init(bfusb_init);
++module_exit(bfusb_cleanup);
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueFRITZ! USB driver ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/drivers/bluetooth/bluecard_cs.c linux-2.4.18-mh15/drivers/bluetooth/bluecard_cs.c
+--- linux-2.4.18/drivers/bluetooth/bluecard_cs.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/bluecard_cs.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,1116 @@
++/*
++ *
++ * Bluetooth driver for the Anycom BlueCard (LSE039/LSE041)
++ *
++ * Copyright (C) 2001-2002 Marcel Holtmann <marcel@holtmann.org>
++ *
++ *
++ * 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;
++ *
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ *
++ * The initial developer of the original code is David A. Hinds
++ * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
++ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/timer.h>
++#include <linux/errno.h>
++#include <linux/ptrace.h>
++#include <linux/ioport.h>
++#include <linux/spinlock.h>
++#include <linux/skbuff.h>
++#include <asm/io.h>
++
++#include <pcmcia/version.h>
++#include <pcmcia/cs_types.h>
++#include <pcmcia/cs.h>
++#include <pcmcia/cistpl.h>
++#include <pcmcia/ciscode.h>
++#include <pcmcia/ds.h>
++#include <pcmcia/cisreg.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++
++
++/* ======================== Module parameters ======================== */
++
++
++/* Bit map of interrupts to choose from */
++static u_int irq_mask = 0x86bc;
++static int irq_list[4] = { -1 };
++
++MODULE_PARM(irq_mask, "i");
++MODULE_PARM(irq_list, "1-4i");
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueZ driver for the Anycom BlueCard (LSE039/LSE041)");
++MODULE_LICENSE("GPL");
++
++
++
++/* ======================== Local structures ======================== */
++
++
++typedef struct bluecard_info_t {
++ dev_link_t link;
++ dev_node_t node;
++
++ struct hci_dev hdev;
++
++ spinlock_t lock; /* For serializing operations */
++ struct timer_list timer; /* For LED control */
++
++ struct sk_buff_head txq;
++ unsigned long tx_state;
++
++ unsigned long rx_state;
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++
++ unsigned char ctrl_reg;
++ unsigned long hw_state; /* Status of the hardware and LED control */
++} bluecard_info_t;
++
++
++void bluecard_config(dev_link_t *link);
++void bluecard_release(u_long arg);
++int bluecard_event(event_t event, int priority, event_callback_args_t *args);
++
++static dev_info_t dev_info = "bluecard_cs";
++
++dev_link_t *bluecard_attach(void);
++void bluecard_detach(dev_link_t *);
++
++static dev_link_t *dev_list = NULL;
++
++
++/* Default baud rate: 57600, 115200, 230400 or 460800 */
++#define DEFAULT_BAUD_RATE 230400
++
++
++/* Hardware states */
++#define CARD_READY 1
++#define CARD_HAS_PCCARD_ID 4
++#define CARD_HAS_POWER_LED 5
++#define CARD_HAS_ACTIVITY_LED 6
++
++/* Transmit states */
++#define XMIT_SENDING 1
++#define XMIT_WAKEUP 2
++#define XMIT_BUFFER_NUMBER 5 /* unset = buffer one, set = buffer two */
++#define XMIT_BUF_ONE_READY 6
++#define XMIT_BUF_TWO_READY 7
++#define XMIT_SENDING_READY 8
++
++/* Receiver states */
++#define RECV_WAIT_PACKET_TYPE 0
++#define RECV_WAIT_EVENT_HEADER 1
++#define RECV_WAIT_ACL_HEADER 2
++#define RECV_WAIT_SCO_HEADER 3
++#define RECV_WAIT_DATA 4
++
++/* Special packet types */
++#define PKT_BAUD_RATE_57600 0x80
++#define PKT_BAUD_RATE_115200 0x81
++#define PKT_BAUD_RATE_230400 0x82
++#define PKT_BAUD_RATE_460800 0x83
++
++
++/* These are the register offsets */
++#define REG_COMMAND 0x20
++#define REG_INTERRUPT 0x21
++#define REG_CONTROL 0x22
++#define REG_RX_CONTROL 0x24
++#define REG_CARD_RESET 0x30
++#define REG_LED_CTRL 0x30
++
++/* REG_COMMAND */
++#define REG_COMMAND_TX_BUF_ONE 0x01
++#define REG_COMMAND_TX_BUF_TWO 0x02
++#define REG_COMMAND_RX_BUF_ONE 0x04
++#define REG_COMMAND_RX_BUF_TWO 0x08
++#define REG_COMMAND_RX_WIN_ONE 0x00
++#define REG_COMMAND_RX_WIN_TWO 0x10
++
++/* REG_CONTROL */
++#define REG_CONTROL_BAUD_RATE_57600 0x00
++#define REG_CONTROL_BAUD_RATE_115200 0x01
++#define REG_CONTROL_BAUD_RATE_230400 0x02
++#define REG_CONTROL_BAUD_RATE_460800 0x03
++#define REG_CONTROL_RTS 0x04
++#define REG_CONTROL_BT_ON 0x08
++#define REG_CONTROL_BT_RESET 0x10
++#define REG_CONTROL_BT_RES_PU 0x20
++#define REG_CONTROL_INTERRUPT 0x40
++#define REG_CONTROL_CARD_RESET 0x80
++
++/* REG_RX_CONTROL */
++#define RTS_LEVEL_SHIFT_BITS 0x02
++
++
++
++/* ======================== LED handling routines ======================== */
++
++
++void bluecard_activity_led_timeout(u_long arg)
++{
++ bluecard_info_t *info = (bluecard_info_t *)arg;
++ unsigned int iobase = info->link.io.BasePort1;
++
++ if (test_bit(CARD_HAS_ACTIVITY_LED, &(info->hw_state))) {
++ /* Disable activity LED */
++ outb(0x08 | 0x20, iobase + 0x30);
++ } else {
++ /* Disable power LED */
++ outb(0x00, iobase + 0x30);
++ }
++}
++
++
++static void bluecard_enable_activity_led(bluecard_info_t *info)
++{
++ unsigned int iobase = info->link.io.BasePort1;
++
++ if (test_bit(CARD_HAS_ACTIVITY_LED, &(info->hw_state))) {
++ /* Enable activity LED */
++ outb(0x10 | 0x40, iobase + 0x30);
++
++ /* Stop the LED after HZ/4 */
++ mod_timer(&(info->timer), jiffies + HZ / 4);
++ } else {
++ /* Enable power LED */
++ outb(0x08 | 0x20, iobase + 0x30);
++
++ /* Stop the LED after HZ/2 */
++ mod_timer(&(info->timer), jiffies + HZ / 2);
++ }
++}
++
++
++
++/* ======================== Interrupt handling ======================== */
++
++
++static int bluecard_write(unsigned int iobase, unsigned int offset, __u8 *buf, int len)
++{
++ int i, actual;
++
++ actual = (len > 15) ? 15 : len;
++
++ outb_p(actual, iobase + offset);
++
++ for (i = 0; i < actual; i++)
++ outb_p(buf[i], iobase + offset + i + 1);
++
++ return actual;
++}
++
++
++static void bluecard_write_wakeup(bluecard_info_t *info)
++{
++ if (!info) {
++ printk(KERN_WARNING "bluecard_cs: Call of write_wakeup for unknown device.\n");
++ return;
++ }
++
++ if (!test_bit(XMIT_SENDING_READY, &(info->tx_state)))
++ return;
++
++ if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) {
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++ return;
++ }
++
++ do {
++ register unsigned int iobase = info->link.io.BasePort1;
++ register unsigned int offset;
++ register unsigned char command;
++ register unsigned long ready_bit;
++ register struct sk_buff *skb;
++ register int len;
++
++ clear_bit(XMIT_WAKEUP, &(info->tx_state));
++
++ if (!(info->link.state & DEV_PRESENT))
++ return;
++
++ if (test_bit(XMIT_BUFFER_NUMBER, &(info->tx_state))) {
++ if (!test_bit(XMIT_BUF_TWO_READY, &(info->tx_state)))
++ break;
++ offset = 0x10;
++ command = REG_COMMAND_TX_BUF_TWO;
++ ready_bit = XMIT_BUF_TWO_READY;
++ } else {
++ if (!test_bit(XMIT_BUF_ONE_READY, &(info->tx_state)))
++ break;
++ offset = 0x00;
++ command = REG_COMMAND_TX_BUF_ONE;
++ ready_bit = XMIT_BUF_ONE_READY;
++ }
++
++ if (!(skb = skb_dequeue(&(info->txq))))
++ break;
++
++ if (skb->pkt_type & 0x80) {
++ /* Disable RTS */
++ info->ctrl_reg |= REG_CONTROL_RTS;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++ }
++
++ /* Activate LED */
++ bluecard_enable_activity_led(info);
++
++ /* Send frame */
++ len = bluecard_write(iobase, offset, skb->data, skb->len);
++
++ /* Tell the FPGA to send the data */
++ outb_p(command, iobase + REG_COMMAND);
++
++ /* Mark the buffer as dirty */
++ clear_bit(ready_bit, &(info->tx_state));
++
++ if (skb->pkt_type & 0x80) {
++
++ wait_queue_head_t wait;
++ unsigned char baud_reg;
++
++ switch (skb->pkt_type) {
++ case PKT_BAUD_RATE_460800:
++ baud_reg = REG_CONTROL_BAUD_RATE_460800;
++ break;
++ case PKT_BAUD_RATE_230400:
++ baud_reg = REG_CONTROL_BAUD_RATE_230400;
++ break;
++ case PKT_BAUD_RATE_115200:
++ baud_reg = REG_CONTROL_BAUD_RATE_115200;
++ break;
++ case PKT_BAUD_RATE_57600:
++ /* Fall through... */
++ default:
++ baud_reg = REG_CONTROL_BAUD_RATE_57600;
++ break;
++ }
++
++ /* Wait until the command reaches the baseband */
++ init_waitqueue_head(&wait);
++ interruptible_sleep_on_timeout(&wait, HZ / 10);
++
++ /* Set baud on baseband */
++ info->ctrl_reg &= ~0x03;
++ info->ctrl_reg |= baud_reg;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ /* Enable RTS */
++ info->ctrl_reg &= ~REG_CONTROL_RTS;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ /* Wait before the next HCI packet can be send */
++ interruptible_sleep_on_timeout(&wait, HZ);
++
++ }
++
++ if (len == skb->len) {
++ kfree_skb(skb);
++ } else {
++ skb_pull(skb, len);
++ skb_queue_head(&(info->txq), skb);
++ }
++
++ info->hdev.stat.byte_tx += len;
++
++ /* Change buffer */
++ change_bit(XMIT_BUFFER_NUMBER, &(info->tx_state));
++
++ } while (test_bit(XMIT_WAKEUP, &(info->tx_state)));
++
++ clear_bit(XMIT_SENDING, &(info->tx_state));
++}
++
++
++static int bluecard_read(unsigned int iobase, unsigned int offset, __u8 *buf, int size)
++{
++ int i, n, len;
++
++ outb(REG_COMMAND_RX_WIN_ONE, iobase + REG_COMMAND);
++
++ len = inb(iobase + offset);
++ n = 0;
++ i = 1;
++
++ while (n < len) {
++
++ if (i == 16) {
++ outb(REG_COMMAND_RX_WIN_TWO, iobase + REG_COMMAND);
++ i = 0;
++ }
++
++ buf[n] = inb(iobase + offset + i);
++
++ n++;
++ i++;
++
++ }
++
++ return len;
++}
++
++
++static void bluecard_receive(bluecard_info_t *info, unsigned int offset)
++{
++ unsigned int iobase;
++ unsigned char buf[31];
++ int i, len;
++
++ if (!info) {
++ printk(KERN_WARNING "bluecard_cs: Call of receive for unknown device.\n");
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ if (test_bit(XMIT_SENDING_READY, &(info->tx_state)))
++ bluecard_enable_activity_led(info);
++
++ len = bluecard_read(iobase, offset, buf, sizeof(buf));
++
++ for (i = 0; i < len; i++) {
++
++ /* Allocate packet */
++ if (info->rx_skb == NULL) {
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ if (!(info->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
++ printk(KERN_WARNING "bluecard_cs: Can't allocate mem for new packet.\n");
++ return;
++ }
++ }
++
++ if (info->rx_state == RECV_WAIT_PACKET_TYPE) {
++
++ info->rx_skb->dev = (void *)&(info->hdev);
++ info->rx_skb->pkt_type = buf[i];
++
++ switch (info->rx_skb->pkt_type) {
++
++ case 0x00:
++ /* init packet */
++ if (offset != 0x00) {
++ set_bit(XMIT_BUF_ONE_READY, &(info->tx_state));
++ set_bit(XMIT_BUF_TWO_READY, &(info->tx_state));
++ set_bit(XMIT_SENDING_READY, &(info->tx_state));
++ bluecard_write_wakeup(info);
++ }
++
++ kfree_skb(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ case HCI_EVENT_PKT:
++ info->rx_state = RECV_WAIT_EVENT_HEADER;
++ info->rx_count = HCI_EVENT_HDR_SIZE;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ info->rx_state = RECV_WAIT_ACL_HEADER;
++ info->rx_count = HCI_ACL_HDR_SIZE;
++ break;
++
++ case HCI_SCODATA_PKT:
++ info->rx_state = RECV_WAIT_SCO_HEADER;
++ info->rx_count = HCI_SCO_HDR_SIZE;
++ break;
++
++ default:
++ /* unknown packet */
++ printk(KERN_WARNING "bluecard_cs: Unknown HCI packet with type 0x%02x received.\n", info->rx_skb->pkt_type);
++ info->hdev.stat.err_rx++;
++
++ kfree_skb(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ } else {
++
++ *skb_put(info->rx_skb, 1) = buf[i];
++ info->rx_count--;
++
++ if (info->rx_count == 0) {
++
++ int dlen;
++ hci_event_hdr *eh;
++ hci_acl_hdr *ah;
++ hci_sco_hdr *sh;
++
++ switch (info->rx_state) {
++
++ case RECV_WAIT_EVENT_HEADER:
++ eh = (hci_event_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = eh->plen;
++ break;
++
++ case RECV_WAIT_ACL_HEADER:
++ ah = (hci_acl_hdr *)(info->rx_skb->data);
++ dlen = __le16_to_cpu(ah->dlen);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = dlen;
++ break;
++
++ case RECV_WAIT_SCO_HEADER:
++ sh = (hci_sco_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = sh->dlen;
++ break;
++
++ case RECV_WAIT_DATA:
++ hci_recv_frame(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ }
++
++ }
++
++
++ }
++
++ info->hdev.stat.byte_rx += len;
++}
++
++
++void bluecard_interrupt(int irq, void *dev_inst, struct pt_regs *regs)
++{
++ bluecard_info_t *info = dev_inst;
++ unsigned int iobase;
++ unsigned char reg;
++
++ if (!info) {
++ printk(KERN_WARNING "bluecard_cs: Call of irq %d for unknown device.\n", irq);
++ return;
++ }
++
++ if (!test_bit(CARD_READY, &(info->hw_state)))
++ return;
++
++ iobase = info->link.io.BasePort1;
++
++ spin_lock(&(info->lock));
++
++ /* Disable interrupt */
++ info->ctrl_reg &= ~REG_CONTROL_INTERRUPT;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ reg = inb(iobase + REG_INTERRUPT);
++
++ if ((reg != 0x00) && (reg != 0xff)) {
++
++ if (reg & 0x04) {
++ bluecard_receive(info, 0x00);
++ outb(0x04, iobase + REG_INTERRUPT);
++ outb(REG_COMMAND_RX_BUF_ONE, iobase + REG_COMMAND);
++ }
++
++ if (reg & 0x08) {
++ bluecard_receive(info, 0x10);
++ outb(0x08, iobase + REG_INTERRUPT);
++ outb(REG_COMMAND_RX_BUF_TWO, iobase + REG_COMMAND);
++ }
++
++ if (reg & 0x01) {
++ set_bit(XMIT_BUF_ONE_READY, &(info->tx_state));
++ outb(0x01, iobase + REG_INTERRUPT);
++ bluecard_write_wakeup(info);
++ }
++
++ if (reg & 0x02) {
++ set_bit(XMIT_BUF_TWO_READY, &(info->tx_state));
++ outb(0x02, iobase + REG_INTERRUPT);
++ bluecard_write_wakeup(info);
++ }
++
++ }
++
++ /* Enable interrupt */
++ info->ctrl_reg |= REG_CONTROL_INTERRUPT;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ spin_unlock(&(info->lock));
++}
++
++
++
++/* ======================== Device specific HCI commands ======================== */
++
++
++static int bluecard_hci_set_baud_rate(struct hci_dev *hdev, int baud)
++{
++ bluecard_info_t *info = (bluecard_info_t *)(hdev->driver_data);
++ struct sk_buff *skb;
++
++ /* Ericsson baud rate command */
++ unsigned char cmd[] = { HCI_COMMAND_PKT, 0x09, 0xfc, 0x01, 0x03 };
++
++ if (!(skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
++ printk(KERN_WARNING "bluecard_cs: Can't allocate mem for new packet.\n");
++ return -1;
++ }
++
++ switch (baud) {
++ case 460800:
++ cmd[4] = 0x00;
++ skb->pkt_type = PKT_BAUD_RATE_460800;
++ break;
++ case 230400:
++ cmd[4] = 0x01;
++ skb->pkt_type = PKT_BAUD_RATE_230400;
++ break;
++ case 115200:
++ cmd[4] = 0x02;
++ skb->pkt_type = PKT_BAUD_RATE_115200;
++ break;
++ case 57600:
++ /* Fall through... */
++ default:
++ cmd[4] = 0x03;
++ skb->pkt_type = PKT_BAUD_RATE_57600;
++ break;
++ }
++
++ memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
++
++ skb_queue_tail(&(info->txq), skb);
++
++ bluecard_write_wakeup(info);
++
++ return 0;
++}
++
++
++
++/* ======================== HCI interface ======================== */
++
++
++static int bluecard_hci_flush(struct hci_dev *hdev)
++{
++ bluecard_info_t *info = (bluecard_info_t *)(hdev->driver_data);
++
++ /* Drop TX queue */
++ skb_queue_purge(&(info->txq));
++
++ return 0;
++}
++
++
++static int bluecard_hci_open(struct hci_dev *hdev)
++{
++ bluecard_info_t *info = (bluecard_info_t *)(hdev->driver_data);
++ unsigned int iobase = info->link.io.BasePort1;
++
++ bluecard_hci_set_baud_rate(hdev, DEFAULT_BAUD_RATE);
++
++ if (test_and_set_bit(HCI_RUNNING, &(hdev->flags)))
++ return 0;
++
++ /* Enable LED */
++ outb(0x08 | 0x20, iobase + 0x30);
++
++ return 0;
++}
++
++
++static int bluecard_hci_close(struct hci_dev *hdev)
++{
++ bluecard_info_t *info = (bluecard_info_t *)(hdev->driver_data);
++ unsigned int iobase = info->link.io.BasePort1;
++
++ if (!test_and_clear_bit(HCI_RUNNING, &(hdev->flags)))
++ return 0;
++
++ bluecard_hci_flush(hdev);
++
++ /* Disable LED */
++ outb(0x00, iobase + 0x30);
++
++ return 0;
++}
++
++
++static int bluecard_hci_send_frame(struct sk_buff *skb)
++{
++ bluecard_info_t *info;
++ struct hci_dev *hdev = (struct hci_dev *)(skb->dev);
++
++ if (!hdev) {
++ printk(KERN_WARNING "bluecard_cs: Frame for unknown HCI device (hdev=NULL).");
++ return -ENODEV;
++ }
++
++ info = (bluecard_info_t *)(hdev->driver_data);
++
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++ };
++
++ /* Prepend skb with frame type */
++ memcpy(skb_push(skb, 1), &(skb->pkt_type), 1);
++ skb_queue_tail(&(info->txq), skb);
++
++ bluecard_write_wakeup(info);
++
++ return 0;
++}
++
++
++static void bluecard_hci_destruct(struct hci_dev *hdev)
++{
++}
++
++
++static int bluecard_hci_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
++{
++ return -ENOIOCTLCMD;
++}
++
++
++
++/* ======================== Card services HCI interaction ======================== */
++
++
++int bluecard_open(bluecard_info_t *info)
++{
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev;
++ unsigned char id;
++
++ spin_lock_init(&(info->lock));
++
++ init_timer(&(info->timer));
++ info->timer.function = &bluecard_activity_led_timeout;
++ info->timer.data = (u_long)info;
++
++ skb_queue_head_init(&(info->txq));
++
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ info->rx_skb = NULL;
++
++ id = inb(iobase + 0x30);
++
++ if ((id & 0x0f) == 0x02)
++ set_bit(CARD_HAS_PCCARD_ID, &(info->hw_state));
++
++ if (id & 0x10)
++ set_bit(CARD_HAS_POWER_LED, &(info->hw_state));
++
++ if (id & 0x20)
++ set_bit(CARD_HAS_ACTIVITY_LED, &(info->hw_state));
++
++ /* Reset card */
++ info->ctrl_reg = REG_CONTROL_BT_RESET | REG_CONTROL_CARD_RESET;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ /* Turn FPGA off */
++ outb(0x80, iobase + 0x30);
++
++ /* Wait some time */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ / 100);
++
++ /* Turn FPGA on */
++ outb(0x00, iobase + 0x30);
++
++ /* Activate card */
++ info->ctrl_reg = REG_CONTROL_BT_ON | REG_CONTROL_BT_RES_PU;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ /* Enable interrupt */
++ outb(0xff, iobase + REG_INTERRUPT);
++ info->ctrl_reg |= REG_CONTROL_INTERRUPT;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ /* Start the RX buffers */
++ outb(REG_COMMAND_RX_BUF_ONE, iobase + REG_COMMAND);
++ outb(REG_COMMAND_RX_BUF_TWO, iobase + REG_COMMAND);
++
++ /* Signal that the hardware is ready */
++ set_bit(CARD_READY, &(info->hw_state));
++
++ /* Drop TX queue */
++ skb_queue_purge(&(info->txq));
++
++ /* Control the point at which RTS is enabled */
++ outb((0x0f << RTS_LEVEL_SHIFT_BITS) | 1, iobase + REG_RX_CONTROL);
++
++ /* Timeout before it is safe to send the first HCI packet */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout((HZ * 5) / 4); // or set it to 3/2
++
++
++ /* Initialize and register HCI device */
++
++ hdev = &(info->hdev);
++
++ hdev->type = HCI_PCCARD;
++ hdev->driver_data = info;
++
++ hdev->open = bluecard_hci_open;
++ hdev->close = bluecard_hci_close;
++ hdev->flush = bluecard_hci_flush;
++ hdev->send = bluecard_hci_send_frame;
++ hdev->destruct = bluecard_hci_destruct;
++ hdev->ioctl = bluecard_hci_ioctl;
++
++ if (hci_register_dev(hdev) < 0) {
++ printk(KERN_WARNING "bluecard_cs: Can't register HCI device %s.\n", hdev->name);
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++
++int bluecard_close(bluecard_info_t *info)
++{
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev = &(info->hdev);
++
++ if (info->link.state & DEV_CONFIG_PENDING)
++ return -ENODEV;
++
++ bluecard_hci_close(hdev);
++
++ clear_bit(CARD_READY, &(info->hw_state));
++
++ /* Reset card */
++ info->ctrl_reg = REG_CONTROL_BT_RESET | REG_CONTROL_CARD_RESET;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ /* Turn FPGA off */
++ outb(0x80, iobase + 0x30);
++
++ if (hci_unregister_dev(hdev) < 0)
++ printk(KERN_WARNING "bluecard_cs: Can't unregister HCI device %s.\n", hdev->name);
++
++ return 0;
++}
++
++
++
++/* ======================== Card services ======================== */
++
++
++static void cs_error(client_handle_t handle, int func, int ret)
++{
++ error_info_t err = { func, ret };
++
++ CardServices(ReportError, handle, &err);
++}
++
++
++dev_link_t *bluecard_attach(void)
++{
++ bluecard_info_t *info;
++ client_reg_t client_reg;
++ dev_link_t *link;
++ int i, ret;
++
++ /* Create new info device */
++ info = kmalloc(sizeof(*info), GFP_KERNEL);
++ if (!info)
++ return NULL;
++ memset(info, 0, sizeof(*info));
++
++ link = &info->link;
++ link->priv = info;
++
++ link->release.function = &bluecard_release;
++ link->release.data = (u_long)link;
++ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
++ link->io.NumPorts1 = 8;
++ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
++ link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID;
++
++ if (irq_list[0] == -1)
++ link->irq.IRQInfo2 = irq_mask;
++ else
++ for (i = 0; i < 4; i++)
++ link->irq.IRQInfo2 |= 1 << irq_list[i];
++
++ link->irq.Handler = bluecard_interrupt;
++ link->irq.Instance = info;
++
++ link->conf.Attributes = CONF_ENABLE_IRQ;
++ link->conf.Vcc = 50;
++ link->conf.IntType = INT_MEMORY_AND_IO;
++
++ /* Register with Card Services */
++ link->next = dev_list;
++ dev_list = link;
++ client_reg.dev_info = &dev_info;
++ client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
++ client_reg.EventMask =
++ CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
++ CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
++ CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
++ client_reg.event_handler = &bluecard_event;
++ client_reg.Version = 0x0210;
++ client_reg.event_callback_args.client_data = link;
++
++ ret = CardServices(RegisterClient, &link->handle, &client_reg);
++ if (ret != CS_SUCCESS) {
++ cs_error(link->handle, RegisterClient, ret);
++ bluecard_detach(link);
++ return NULL;
++ }
++
++ return link;
++}
++
++
++void bluecard_detach(dev_link_t *link)
++{
++ bluecard_info_t *info = link->priv;
++ dev_link_t **linkp;
++ int ret;
++
++ /* Locate device structure */
++ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
++ if (*linkp == link)
++ break;
++
++ if (*linkp == NULL)
++ return;
++
++ del_timer(&link->release);
++ if (link->state & DEV_CONFIG)
++ bluecard_release((u_long)link);
++
++ if (link->handle) {
++ ret = CardServices(DeregisterClient, link->handle);
++ if (ret != CS_SUCCESS)
++ cs_error(link->handle, DeregisterClient, ret);
++ }
++
++ /* Unlink device structure, free bits */
++ *linkp = link->next;
++
++ kfree(info);
++}
++
++
++static int get_tuple(int fn, client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
++{
++ int i;
++
++ i = CardServices(fn, handle, tuple);
++ if (i != CS_SUCCESS)
++ return CS_NO_MORE_ITEMS;
++
++ i = CardServices(GetTupleData, handle, tuple);
++ if (i != CS_SUCCESS)
++ return i;
++
++ return CardServices(ParseTuple, handle, tuple, parse);
++}
++
++
++#define first_tuple(a, b, c) get_tuple(GetFirstTuple, a, b, c)
++#define next_tuple(a, b, c) get_tuple(GetNextTuple, a, b, c)
++
++void bluecard_config(dev_link_t *link)
++{
++ client_handle_t handle = link->handle;
++ bluecard_info_t *info = link->priv;
++ tuple_t tuple;
++ u_short buf[256];
++ cisparse_t parse;
++ config_info_t config;
++ int i, n, last_ret, last_fn;
++
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++
++ /* Get configuration register information */
++ tuple.DesiredTuple = CISTPL_CONFIG;
++ last_ret = first_tuple(handle, &tuple, &parse);
++ if (last_ret != CS_SUCCESS) {
++ last_fn = ParseTuple;
++ goto cs_failed;
++ }
++ link->conf.ConfigBase = parse.config.base;
++ link->conf.Present = parse.config.rmask[0];
++
++ /* Configure card */
++ link->state |= DEV_CONFIG;
++ i = CardServices(GetConfigurationInfo, handle, &config);
++ link->conf.Vcc = config.Vcc;
++
++ link->conf.ConfigIndex = 0x20;
++ link->io.NumPorts1 = 64;
++ link->io.IOAddrLines = 6;
++
++ for (n = 0; n < 0x400; n += 0x40) {
++ link->io.BasePort1 = n ^ 0x300;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ break;
++ }
++
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIO, i);
++ goto failed;
++ }
++
++ i = CardServices(RequestIRQ, link->handle, &link->irq);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIRQ, i);
++ link->irq.AssignedIRQ = 0;
++ }
++
++ i = CardServices(RequestConfiguration, link->handle, &link->conf);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestConfiguration, i);
++ goto failed;
++ }
++
++ MOD_INC_USE_COUNT;
++
++ if (bluecard_open(info) != 0)
++ goto failed;
++
++ strcpy(info->node.dev_name, info->hdev.name);
++ link->dev = &info->node;
++ link->state &= ~DEV_CONFIG_PENDING;
++
++ return;
++
++cs_failed:
++ cs_error(link->handle, last_fn, last_ret);
++
++failed:
++ bluecard_release((u_long)link);
++}
++
++
++void bluecard_release(u_long arg)
++{
++ dev_link_t *link = (dev_link_t *)arg;
++ bluecard_info_t *info = link->priv;
++
++ if (link->state & DEV_PRESENT)
++ bluecard_close(info);
++
++ MOD_DEC_USE_COUNT;
++
++ link->dev = NULL;
++
++ CardServices(ReleaseConfiguration, link->handle);
++ CardServices(ReleaseIO, link->handle, &link->io);
++ CardServices(ReleaseIRQ, link->handle, &link->irq);
++
++ link->state &= ~DEV_CONFIG;
++}
++
++
++int bluecard_event(event_t event, int priority, event_callback_args_t *args)
++{
++ dev_link_t *link = args->client_data;
++ bluecard_info_t *info = link->priv;
++
++ switch (event) {
++ case CS_EVENT_CARD_REMOVAL:
++ link->state &= ~DEV_PRESENT;
++ if (link->state & DEV_CONFIG) {
++ bluecard_close(info);
++ mod_timer(&link->release, jiffies + HZ / 20);
++ }
++ break;
++ case CS_EVENT_CARD_INSERTION:
++ link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
++ bluecard_config(link);
++ break;
++ case CS_EVENT_PM_SUSPEND:
++ link->state |= DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_RESET_PHYSICAL:
++ if (link->state & DEV_CONFIG)
++ CardServices(ReleaseConfiguration, link->handle);
++ break;
++ case CS_EVENT_PM_RESUME:
++ link->state &= ~DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_CARD_RESET:
++ if (DEV_OK(link))
++ CardServices(RequestConfiguration, link->handle, &link->conf);
++ break;
++ }
++
++ return 0;
++}
++
++
++
++/* ======================== Module initialization ======================== */
++
++
++int __init init_bluecard_cs(void)
++{
++ servinfo_t serv;
++ int err;
++
++ CardServices(GetCardServicesInfo, &serv);
++ if (serv.Revision != CS_RELEASE_CODE) {
++ printk(KERN_NOTICE "bluecard_cs: Card Services release does not match!\n");
++ return -1;
++ }
++
++ err = register_pccard_driver(&dev_info, &bluecard_attach, &bluecard_detach);
++
++ return err;
++}
++
++
++void __exit exit_bluecard_cs(void)
++{
++ unregister_pccard_driver(&dev_info);
++
++ while (dev_list != NULL)
++ bluecard_detach(dev_list);
++}
++
++
++module_init(init_bluecard_cs);
++module_exit(exit_bluecard_cs);
++
++EXPORT_NO_SYMBOLS;
+diff -urN linux-2.4.18/drivers/bluetooth/bt3c_cs.c linux-2.4.18-mh15/drivers/bluetooth/bt3c_cs.c
+--- linux-2.4.18/drivers/bluetooth/bt3c_cs.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/bt3c_cs.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,986 @@
++/*
++ *
++ * Driver for the 3Com Bluetooth PCMCIA card
++ *
++ * Copyright (C) 2001-2002 Marcel Holtmann <marcel@holtmann.org>
++ * Jose Orlando Pereira <jop@di.uminho.pt>
++ *
++ *
++ * 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;
++ *
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ *
++ * The initial developer of the original code is David A. Hinds
++ * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
++ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/kmod.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/delay.h>
++#include <linux/timer.h>
++#include <linux/errno.h>
++#include <linux/unistd.h>
++#include <linux/ptrace.h>
++#include <linux/ioport.h>
++#include <linux/spinlock.h>
++
++#include <linux/skbuff.h>
++#include <linux/string.h>
++#include <linux/serial.h>
++#include <linux/serial_reg.h>
++#include <asm/system.h>
++#include <asm/bitops.h>
++#include <asm/io.h>
++
++#include <linux/firmware.h>
++
++#include <pcmcia/version.h>
++#include <pcmcia/cs_types.h>
++#include <pcmcia/cs.h>
++#include <pcmcia/cistpl.h>
++#include <pcmcia/ciscode.h>
++#include <pcmcia/ds.h>
++#include <pcmcia/cisreg.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++
++
++/* ======================== Module parameters ======================== */
++
++
++/* Bit map of interrupts to choose from */
++static u_int irq_mask = 0xffff;
++static int irq_list[4] = { -1 };
++
++MODULE_PARM(irq_mask, "i");
++MODULE_PARM(irq_list, "1-4i");
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>, Jose Orlando Pereira <jop@di.uminho.pt>");
++MODULE_DESCRIPTION("BlueZ driver for the 3Com Bluetooth PCMCIA card");
++MODULE_LICENSE("GPL");
++
++
++
++/* ======================== Local structures ======================== */
++
++
++typedef struct bt3c_info_t {
++ dev_link_t link;
++ dev_node_t node;
++
++ struct hci_dev hdev;
++
++ spinlock_t lock; /* For serializing operations */
++
++ struct sk_buff_head txq;
++ unsigned long tx_state;
++
++ unsigned long rx_state;
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++} bt3c_info_t;
++
++
++void bt3c_config(dev_link_t *link);
++void bt3c_release(u_long arg);
++int bt3c_event(event_t event, int priority, event_callback_args_t *args);
++
++static dev_info_t dev_info = "bt3c_cs";
++
++dev_link_t *bt3c_attach(void);
++void bt3c_detach(dev_link_t *);
++
++static dev_link_t *dev_list = NULL;
++
++
++/* Transmit states */
++#define XMIT_SENDING 1
++#define XMIT_WAKEUP 2
++#define XMIT_WAITING 8
++
++/* Receiver states */
++#define RECV_WAIT_PACKET_TYPE 0
++#define RECV_WAIT_EVENT_HEADER 1
++#define RECV_WAIT_ACL_HEADER 2
++#define RECV_WAIT_SCO_HEADER 3
++#define RECV_WAIT_DATA 4
++
++
++
++/* ======================== Special I/O functions ======================== */
++
++
++#define DATA_L 0
++#define DATA_H 1
++#define ADDR_L 2
++#define ADDR_H 3
++#define CONTROL 4
++
++
++inline void bt3c_address(unsigned int iobase, unsigned short addr)
++{
++ outb(addr & 0xff, iobase + ADDR_L);
++ outb((addr >> 8) & 0xff, iobase + ADDR_H);
++}
++
++
++inline void bt3c_put(unsigned int iobase, unsigned short value)
++{
++ outb(value & 0xff, iobase + DATA_L);
++ outb((value >> 8) & 0xff, iobase + DATA_H);
++}
++
++
++inline void bt3c_io_write(unsigned int iobase, unsigned short addr, unsigned short value)
++{
++ bt3c_address(iobase, addr);
++ bt3c_put(iobase, value);
++}
++
++
++inline unsigned short bt3c_get(unsigned int iobase)
++{
++ unsigned short value = inb(iobase + DATA_L);
++
++ value |= inb(iobase + DATA_H) << 8;
++
++ return value;
++}
++
++
++inline unsigned short bt3c_read(unsigned int iobase, unsigned short addr)
++{
++ bt3c_address(iobase, addr);
++
++ return bt3c_get(iobase);
++}
++
++
++
++/* ======================== Interrupt handling ======================== */
++
++
++static int bt3c_write(unsigned int iobase, int fifo_size, __u8 *buf, int len)
++{
++ int actual = 0;
++
++ bt3c_address(iobase, 0x7080);
++
++ /* Fill FIFO with current frame */
++ while (actual < len) {
++ /* Transmit next byte */
++ bt3c_put(iobase, buf[actual]);
++ actual++;
++ }
++
++ bt3c_io_write(iobase, 0x7005, actual);
++
++ return actual;
++}
++
++
++static void bt3c_write_wakeup(bt3c_info_t *info, int from)
++{
++ unsigned long flags;
++
++ if (!info) {
++ printk(KERN_WARNING "bt3c_cs: Call of write_wakeup for unknown device.\n");
++ return;
++ }
++
++ if (test_and_set_bit(XMIT_SENDING, &(info->tx_state)))
++ return;
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ do {
++ register unsigned int iobase = info->link.io.BasePort1;
++ register struct sk_buff *skb;
++ register int len;
++
++ if (!(info->link.state & DEV_PRESENT))
++ break;
++
++
++ if (!(skb = skb_dequeue(&(info->txq)))) {
++ clear_bit(XMIT_SENDING, &(info->tx_state));
++ break;
++ }
++
++ /* Send frame */
++ len = bt3c_write(iobase, 256, skb->data, skb->len);
++
++ if (len != skb->len) {
++ printk(KERN_WARNING "bt3c_cs: very strange\n");
++ }
++
++ kfree_skb(skb);
++
++ info->hdev.stat.byte_tx += len;
++
++ } while (0);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++}
++
++
++static void bt3c_receive(bt3c_info_t *info)
++{
++ unsigned int iobase;
++ int size = 0, avail;
++
++ if (!info) {
++ printk(KERN_WARNING "bt3c_cs: Call of receive for unknown device.\n");
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ avail = bt3c_read(iobase, 0x7006);
++ //printk("bt3c_cs: receiving %d bytes\n", avail);
++
++ bt3c_address(iobase, 0x7480);
++ while (size < avail) {
++ size++;
++ info->hdev.stat.byte_rx++;
++
++ /* Allocate packet */
++ if (info->rx_skb == NULL) {
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ if (!(info->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
++ printk(KERN_WARNING "bt3c_cs: Can't allocate mem for new packet.\n");
++ return;
++ }
++ }
++
++
++ if (info->rx_state == RECV_WAIT_PACKET_TYPE) {
++
++ info->rx_skb->dev = (void *)&(info->hdev);
++ info->rx_skb->pkt_type = inb(iobase + DATA_L);
++ inb(iobase + DATA_H);
++ //printk("bt3c: PACKET_TYPE=%02x\n", info->rx_skb->pkt_type);
++
++ switch (info->rx_skb->pkt_type) {
++
++ case HCI_EVENT_PKT:
++ info->rx_state = RECV_WAIT_EVENT_HEADER;
++ info->rx_count = HCI_EVENT_HDR_SIZE;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ info->rx_state = RECV_WAIT_ACL_HEADER;
++ info->rx_count = HCI_ACL_HDR_SIZE;
++ break;
++
++ case HCI_SCODATA_PKT:
++ info->rx_state = RECV_WAIT_SCO_HEADER;
++ info->rx_count = HCI_SCO_HDR_SIZE;
++ break;
++
++ default:
++ /* Unknown packet */
++ printk(KERN_WARNING "bt3c_cs: Unknown HCI packet with type 0x%02x received.\n", info->rx_skb->pkt_type);
++ info->hdev.stat.err_rx++;
++ clear_bit(HCI_RUNNING, &(info->hdev.flags));
++
++ kfree_skb(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ } else {
++
++ __u8 x = inb(iobase + DATA_L);
++
++ *skb_put(info->rx_skb, 1) = x;
++ inb(iobase + DATA_H);
++ info->rx_count--;
++
++ if (info->rx_count == 0) {
++
++ int dlen;
++ hci_event_hdr *eh;
++ hci_acl_hdr *ah;
++ hci_sco_hdr *sh;
++
++ switch (info->rx_state) {
++
++ case RECV_WAIT_EVENT_HEADER:
++ eh = (hci_event_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = eh->plen;
++ break;
++
++ case RECV_WAIT_ACL_HEADER:
++ ah = (hci_acl_hdr *)(info->rx_skb->data);
++ dlen = __le16_to_cpu(ah->dlen);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = dlen;
++ break;
++
++ case RECV_WAIT_SCO_HEADER:
++ sh = (hci_sco_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = sh->dlen;
++ break;
++
++ case RECV_WAIT_DATA:
++ hci_recv_frame(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ }
++
++ }
++
++ }
++
++ bt3c_io_write(iobase, 0x7006, 0x0000);
++}
++
++
++void bt3c_interrupt(int irq, void *dev_inst, struct pt_regs *regs)
++{
++ bt3c_info_t *info = dev_inst;
++ unsigned int iobase;
++ int iir;
++
++ if (!info) {
++ printk(KERN_WARNING "bt3c_cs: Call of irq %d for unknown device.\n", irq);
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ spin_lock(&(info->lock));
++
++ iir = inb(iobase + CONTROL);
++ if (iir & 0x80) {
++ int stat = bt3c_read(iobase, 0x7001);
++
++ if ((stat & 0xff) == 0x7f) {
++ printk(KERN_WARNING "bt3c_cs: STRANGE stat=%04x\n", stat);
++ } else if ((stat & 0xff) != 0xff) {
++ if (stat & 0x0020) {
++ int stat = bt3c_read(iobase, 0x7002) & 0x10;
++ printk(KERN_WARNING "bt3c_cs: antena %s\n", stat ? "OUT" : "IN");
++ }
++ if (stat & 0x0001)
++ bt3c_receive(info);
++ if (stat & 0x0002) {
++ //printk("bt3c_cs: ACK %04x\n", stat);
++ clear_bit(XMIT_SENDING, &(info->tx_state));
++ bt3c_write_wakeup(info, 1);
++ }
++
++ bt3c_io_write(iobase, 0x7001, 0x0000);
++
++ outb(iir, iobase + CONTROL);
++ }
++ }
++
++ spin_unlock(&(info->lock));
++}
++
++
++
++
++/* ======================== HCI interface ======================== */
++
++
++static int bt3c_hci_flush(struct hci_dev *hdev)
++{
++ bt3c_info_t *info = (bt3c_info_t *)(hdev->driver_data);
++
++ /* Drop TX queue */
++ skb_queue_purge(&(info->txq));
++
++ return 0;
++}
++
++
++static int bt3c_hci_open(struct hci_dev *hdev)
++{
++ set_bit(HCI_RUNNING, &(hdev->flags));
++
++ return 0;
++}
++
++
++static int bt3c_hci_close(struct hci_dev *hdev)
++{
++ if (!test_and_clear_bit(HCI_RUNNING, &(hdev->flags)))
++ return 0;
++
++ bt3c_hci_flush(hdev);
++
++ return 0;
++}
++
++
++static int bt3c_hci_send_frame(struct sk_buff *skb)
++{
++ bt3c_info_t *info;
++ struct hci_dev *hdev = (struct hci_dev *)(skb->dev);
++
++ if (!hdev) {
++ printk(KERN_WARNING "bt3c_cs: Frame for unknown HCI device (hdev=NULL).");
++ return -ENODEV;
++ }
++
++ info = (bt3c_info_t *) (hdev->driver_data);
++
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++ };
++
++ /* Prepend skb with frame type */
++ memcpy(skb_push(skb, 1), &(skb->pkt_type), 1);
++ skb_queue_tail(&(info->txq), skb);
++
++ bt3c_write_wakeup(info, 0);
++
++ return 0;
++}
++
++
++static void bt3c_hci_destruct(struct hci_dev *hdev)
++{
++}
++
++
++static int bt3c_hci_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
++{
++ return -ENOIOCTLCMD;
++}
++
++
++
++/* ======================== Card services HCI interaction ======================== */
++
++
++static int bt3c_load_firmware(bt3c_info_t *info, unsigned char *firmware, int count)
++{
++ char *ptr = (char *) firmware;
++ char b[9];
++ unsigned int iobase, size, addr, fcs, tmp;
++ int i, err = 0;
++
++ iobase = info->link.io.BasePort1;
++
++ /* Reset */
++
++ bt3c_io_write(iobase, 0x8040, 0x0404);
++ bt3c_io_write(iobase, 0x8040, 0x0400);
++
++ udelay(1);
++
++ bt3c_io_write(iobase, 0x8040, 0x0404);
++
++ udelay(17);
++
++ /* Load */
++
++ while (count) {
++ if (ptr[0] != 'S') {
++ printk(KERN_WARNING "bt3c_cs: Bad address in firmware.\n");
++ err = -EFAULT;
++ goto error;
++ }
++
++ memset(b, 0, sizeof(b));
++ memcpy(b, ptr + 2, 2);
++ size = simple_strtol(b, NULL, 16);
++
++ memset(b, 0, sizeof(b));
++ memcpy(b, ptr + 4, 8);
++ addr = simple_strtol(b, NULL, 16);
++
++ memset(b, 0, sizeof(b));
++ memcpy(b, ptr + (size * 2) + 2, 2);
++ fcs = simple_strtol(b, NULL, 16);
++
++ memset(b, 0, sizeof(b));
++ for (tmp = 0, i = 0; i < size; i++) {
++ memcpy(b, ptr + (i * 2) + 2, 2);
++ tmp += simple_strtol(b, NULL, 16);
++ }
++
++ if (((tmp + fcs) & 0xff) != 0xff) {
++ printk(KERN_WARNING "bt3c_cs: Checksum error in firmware.\n");
++ err = -EILSEQ;
++ goto error;
++ }
++
++ if (ptr[1] == '3') {
++ bt3c_address(iobase, addr);
++
++ memset(b, 0, sizeof(b));
++ for (i = 0; i < (size - 4) / 2; i++) {
++ memcpy(b, ptr + (i * 4) + 12, 4);
++ tmp = simple_strtol(b, NULL, 16);
++ bt3c_put(iobase, tmp);
++ }
++ }
++
++ ptr += (size * 2) + 6;
++ count -= (size * 2) + 6;
++ }
++
++ udelay(17);
++
++ /* Boot */
++
++ bt3c_address(iobase, 0x3000);
++ outb(inb(iobase + CONTROL) | 0x40, iobase + CONTROL);
++
++error:
++ udelay(17);
++
++ /* Clear */
++
++ bt3c_io_write(iobase, 0x7006, 0x0000);
++ bt3c_io_write(iobase, 0x7005, 0x0000);
++ bt3c_io_write(iobase, 0x7001, 0x0000);
++
++ return err;
++}
++
++
++int bt3c_open(bt3c_info_t *info)
++{
++ const struct firmware *firmware;
++ char device[16];
++ struct hci_dev *hdev;
++ int err;
++
++ spin_lock_init(&(info->lock));
++
++ skb_queue_head_init(&(info->txq));
++
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ info->rx_skb = NULL;
++
++ /* Load firmware */
++
++ snprintf(device, sizeof(device), "bt3c%4.4x", info->link.io.BasePort1);
++
++ err = request_firmware(&firmware, "BT3CPCC.bin", device);
++ if (err < 0) {
++ printk(KERN_WARNING "bt3c_cs: Firmware request failed.\n");
++ return err;
++ }
++
++ err = bt3c_load_firmware(info, firmware->data, firmware->size);
++
++ release_firmware(firmware);
++
++ if (err < 0) {
++ printk(KERN_WARNING "bt3c_cs: Firmware loading failed.\n");
++ return err;
++ }
++
++ /* Timeout before it is safe to send the first HCI packet */
++
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ);
++
++
++ /* Initialize and register HCI device */
++
++ hdev = &(info->hdev);
++
++ hdev->type = HCI_PCCARD;
++ hdev->driver_data = info;
++
++ hdev->open = bt3c_hci_open;
++ hdev->close = bt3c_hci_close;
++ hdev->flush = bt3c_hci_flush;
++ hdev->send = bt3c_hci_send_frame;
++ hdev->destruct = bt3c_hci_destruct;
++ hdev->ioctl = bt3c_hci_ioctl;
++
++ if (hci_register_dev(hdev) < 0) {
++ printk(KERN_WARNING "bt3c_cs: Can't register HCI device %s.\n", hdev->name);
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++
++int bt3c_close(bt3c_info_t *info)
++{
++ struct hci_dev *hdev = &(info->hdev);
++
++ if (info->link.state & DEV_CONFIG_PENDING)
++ return -ENODEV;
++
++ bt3c_hci_close(hdev);
++
++ if (hci_unregister_dev(hdev) < 0)
++ printk(KERN_WARNING "bt3c_cs: Can't unregister HCI device %s.\n", hdev->name);
++
++ return 0;
++}
++
++
++
++/* ======================== Card services ======================== */
++
++
++static void cs_error(client_handle_t handle, int func, int ret)
++{
++ error_info_t err = { func, ret };
++
++ CardServices(ReportError, handle, &err);
++}
++
++
++dev_link_t *bt3c_attach(void)
++{
++ bt3c_info_t *info;
++ client_reg_t client_reg;
++ dev_link_t *link;
++ int i, ret;
++
++ /* Create new info device */
++ info = kmalloc(sizeof(*info), GFP_KERNEL);
++ if (!info)
++ return NULL;
++ memset(info, 0, sizeof(*info));
++
++ link = &info->link;
++ link->priv = info;
++
++ link->release.function = &bt3c_release;
++ link->release.data = (u_long)link;
++ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
++ link->io.NumPorts1 = 8;
++ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
++ link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID;
++
++ if (irq_list[0] == -1)
++ link->irq.IRQInfo2 = irq_mask;
++ else
++ for (i = 0; i < 4; i++)
++ link->irq.IRQInfo2 |= 1 << irq_list[i];
++
++ link->irq.Handler = bt3c_interrupt;
++ link->irq.Instance = info;
++
++ link->conf.Attributes = CONF_ENABLE_IRQ;
++ link->conf.Vcc = 50;
++ link->conf.IntType = INT_MEMORY_AND_IO;
++
++ /* Register with Card Services */
++ link->next = dev_list;
++ dev_list = link;
++ client_reg.dev_info = &dev_info;
++ client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
++ client_reg.EventMask =
++ CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
++ CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
++ CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
++ client_reg.event_handler = &bt3c_event;
++ client_reg.Version = 0x0210;
++ client_reg.event_callback_args.client_data = link;
++
++ ret = CardServices(RegisterClient, &link->handle, &client_reg);
++ if (ret != CS_SUCCESS) {
++ cs_error(link->handle, RegisterClient, ret);
++ bt3c_detach(link);
++ return NULL;
++ }
++
++ return link;
++}
++
++
++void bt3c_detach(dev_link_t *link)
++{
++ bt3c_info_t *info = link->priv;
++ dev_link_t **linkp;
++ int ret;
++
++ /* Locate device structure */
++ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
++ if (*linkp == link)
++ break;
++
++ if (*linkp == NULL)
++ return;
++
++ del_timer(&link->release);
++
++ if (link->state & DEV_CONFIG)
++ bt3c_release((u_long)link);
++
++ if (link->handle) {
++ ret = CardServices(DeregisterClient, link->handle);
++ if (ret != CS_SUCCESS)
++ cs_error(link->handle, DeregisterClient, ret);
++ }
++
++ /* Unlink device structure, free bits */
++ *linkp = link->next;
++
++ kfree(info);
++}
++
++
++static int get_tuple(int fn, client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
++{
++ int i;
++
++ i = CardServices(fn, handle, tuple);
++ if (i != CS_SUCCESS)
++ return CS_NO_MORE_ITEMS;
++
++ i = CardServices(GetTupleData, handle, tuple);
++ if (i != CS_SUCCESS)
++ return i;
++
++ return CardServices(ParseTuple, handle, tuple, parse);
++}
++
++
++#define first_tuple(a, b, c) get_tuple(GetFirstTuple, a, b, c)
++#define next_tuple(a, b, c) get_tuple(GetNextTuple, a, b, c)
++
++void bt3c_config(dev_link_t *link)
++{
++ static ioaddr_t base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 };
++ client_handle_t handle = link->handle;
++ bt3c_info_t *info = link->priv;
++ tuple_t tuple;
++ u_short buf[256];
++ cisparse_t parse;
++ cistpl_cftable_entry_t *cf = &parse.cftable_entry;
++ config_info_t config;
++ int i, j, try, last_ret, last_fn;
++
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++
++ /* Get configuration register information */
++ tuple.DesiredTuple = CISTPL_CONFIG;
++ last_ret = first_tuple(handle, &tuple, &parse);
++ if (last_ret != CS_SUCCESS) {
++ last_fn = ParseTuple;
++ goto cs_failed;
++ }
++ link->conf.ConfigBase = parse.config.base;
++ link->conf.Present = parse.config.rmask[0];
++
++ /* Configure card */
++ link->state |= DEV_CONFIG;
++ i = CardServices(GetConfigurationInfo, handle, &config);
++ link->conf.Vcc = config.Vcc;
++
++ /* First pass: look for a config entry that looks normal. */
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++ tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
++ /* Two tries: without IO aliases, then with aliases */
++ for (try = 0; try < 2; try++) {
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if (i != CS_SUCCESS)
++ goto next_entry;
++ if (cf->vpp1.present & (1 << CISTPL_POWER_VNOM))
++ link->conf.Vpp1 = link->conf.Vpp2 = cf->vpp1.param[CISTPL_POWER_VNOM] / 10000;
++ if ((cf->io.nwin > 0) && (cf->io.win[0].len == 8) && (cf->io.win[0].base != 0)) {
++ link->conf.ConfigIndex = cf->index;
++ link->io.BasePort1 = cf->io.win[0].base;
++ link->io.IOAddrLines = (try == 0) ? 16 : cf->io.flags & CISTPL_IO_LINES_MASK;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ goto found_port;
++ }
++next_entry:
++ i = next_tuple(handle, &tuple, &parse);
++ }
++ }
++
++ /* Second pass: try to find an entry that isn't picky about
++ its base address, then try to grab any standard serial port
++ address, and finally try to get any free port. */
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if ((i == CS_SUCCESS) && (cf->io.nwin > 0) && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) {
++ link->conf.ConfigIndex = cf->index;
++ for (j = 0; j < 5; j++) {
++ link->io.BasePort1 = base[j];
++ link->io.IOAddrLines = base[j] ? 16 : 3;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ goto found_port;
++ }
++ }
++ i = next_tuple(handle, &tuple, &parse);
++ }
++
++found_port:
++ if (i != CS_SUCCESS) {
++ printk(KERN_NOTICE "bt3c_cs: No usable port range found. Giving up.\n");
++ cs_error(link->handle, RequestIO, i);
++ goto failed;
++ }
++
++ i = CardServices(RequestIRQ, link->handle, &link->irq);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIRQ, i);
++ link->irq.AssignedIRQ = 0;
++ }
++
++ i = CardServices(RequestConfiguration, link->handle, &link->conf);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestConfiguration, i);
++ goto failed;
++ }
++
++ MOD_INC_USE_COUNT;
++
++ if (bt3c_open(info) != 0)
++ goto failed;
++
++ strcpy(info->node.dev_name, info->hdev.name);
++ link->dev = &info->node;
++ link->state &= ~DEV_CONFIG_PENDING;
++
++ return;
++
++cs_failed:
++ cs_error(link->handle, last_fn, last_ret);
++
++failed:
++ bt3c_release((u_long)link);
++}
++
++
++void bt3c_release(u_long arg)
++{
++ dev_link_t *link = (dev_link_t *)arg;
++ bt3c_info_t *info = link->priv;
++
++ if (link->state & DEV_PRESENT)
++ bt3c_close(info);
++
++ MOD_DEC_USE_COUNT;
++
++ link->dev = NULL;
++
++ CardServices(ReleaseConfiguration, link->handle);
++ CardServices(ReleaseIO, link->handle, &link->io);
++ CardServices(ReleaseIRQ, link->handle, &link->irq);
++
++ link->state &= ~DEV_CONFIG;
++}
++
++
++int bt3c_event(event_t event, int priority, event_callback_args_t *args)
++{
++ dev_link_t *link = args->client_data;
++ bt3c_info_t *info = link->priv;
++
++ switch (event) {
++ case CS_EVENT_CARD_REMOVAL:
++ link->state &= ~DEV_PRESENT;
++ if (link->state & DEV_CONFIG) {
++ bt3c_close(info);
++ mod_timer(&link->release, jiffies + HZ / 20);
++ }
++ break;
++ case CS_EVENT_CARD_INSERTION:
++ link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
++ bt3c_config(link);
++ break;
++ case CS_EVENT_PM_SUSPEND:
++ link->state |= DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_RESET_PHYSICAL:
++ if (link->state & DEV_CONFIG)
++ CardServices(ReleaseConfiguration, link->handle);
++ break;
++ case CS_EVENT_PM_RESUME:
++ link->state &= ~DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_CARD_RESET:
++ if (DEV_OK(link))
++ CardServices(RequestConfiguration, link->handle, &link->conf);
++ break;
++ }
++
++ return 0;
++}
++
++
++
++/* ======================== Module initialization ======================== */
++
++
++int __init init_bt3c_cs(void)
++{
++ servinfo_t serv;
++ int err;
++
++ CardServices(GetCardServicesInfo, &serv);
++ if (serv.Revision != CS_RELEASE_CODE) {
++ printk(KERN_NOTICE "bt3c_cs: Card Services release does not match!\n");
++ return -1;
++ }
++
++ err = register_pccard_driver(&dev_info, &bt3c_attach, &bt3c_detach);
++
++ return err;
++}
++
++
++void __exit exit_bt3c_cs(void)
++{
++ unregister_pccard_driver(&dev_info);
++
++ while (dev_list != NULL)
++ bt3c_detach(dev_list);
++}
++
++
++module_init(init_bt3c_cs);
++module_exit(exit_bt3c_cs);
++
++EXPORT_NO_SYMBOLS;
+diff -urN linux-2.4.18/drivers/bluetooth/btuart_cs.c linux-2.4.18-mh15/drivers/bluetooth/btuart_cs.c
+--- linux-2.4.18/drivers/bluetooth/btuart_cs.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/btuart_cs.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,909 @@
++/*
++ *
++ * Driver for Bluetooth PCMCIA cards with HCI UART interface
++ *
++ * Copyright (C) 2001-2002 Marcel Holtmann <marcel@holtmann.org>
++ *
++ *
++ * 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;
++ *
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ *
++ * The initial developer of the original code is David A. Hinds
++ * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
++ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/timer.h>
++#include <linux/errno.h>
++#include <linux/ptrace.h>
++#include <linux/ioport.h>
++#include <linux/spinlock.h>
++
++#include <linux/skbuff.h>
++#include <linux/string.h>
++#include <linux/serial.h>
++#include <linux/serial_reg.h>
++#include <asm/system.h>
++#include <asm/bitops.h>
++#include <asm/io.h>
++
++#include <pcmcia/version.h>
++#include <pcmcia/cs_types.h>
++#include <pcmcia/cs.h>
++#include <pcmcia/cistpl.h>
++#include <pcmcia/ciscode.h>
++#include <pcmcia/ds.h>
++#include <pcmcia/cisreg.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++
++
++/* ======================== Module parameters ======================== */
++
++
++/* Bit map of interrupts to choose from */
++static u_int irq_mask = 0xffff;
++static int irq_list[4] = { -1 };
++
++MODULE_PARM(irq_mask, "i");
++MODULE_PARM(irq_list, "1-4i");
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueZ driver for Bluetooth PCMCIA cards with HCI UART interface");
++MODULE_LICENSE("GPL");
++
++
++
++/* ======================== Local structures ======================== */
++
++
++typedef struct btuart_info_t {
++ dev_link_t link;
++ dev_node_t node;
++
++ struct hci_dev hdev;
++
++ spinlock_t lock; /* For serializing operations */
++
++ struct sk_buff_head txq;
++ unsigned long tx_state;
++
++ unsigned long rx_state;
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++} btuart_info_t;
++
++
++void btuart_config(dev_link_t *link);
++void btuart_release(u_long arg);
++int btuart_event(event_t event, int priority, event_callback_args_t *args);
++
++static dev_info_t dev_info = "btuart_cs";
++
++dev_link_t *btuart_attach(void);
++void btuart_detach(dev_link_t *);
++
++static dev_link_t *dev_list = NULL;
++
++
++/* Maximum baud rate */
++#define SPEED_MAX 115200
++
++/* Default baud rate: 57600, 115200, 230400 or 460800 */
++#define DEFAULT_BAUD_RATE 115200
++
++
++/* Transmit states */
++#define XMIT_SENDING 1
++#define XMIT_WAKEUP 2
++#define XMIT_WAITING 8
++
++/* Receiver states */
++#define RECV_WAIT_PACKET_TYPE 0
++#define RECV_WAIT_EVENT_HEADER 1
++#define RECV_WAIT_ACL_HEADER 2
++#define RECV_WAIT_SCO_HEADER 3
++#define RECV_WAIT_DATA 4
++
++
++
++/* ======================== Interrupt handling ======================== */
++
++
++static int btuart_write(unsigned int iobase, int fifo_size, __u8 *buf, int len)
++{
++ int actual = 0;
++
++ /* Tx FIFO should be empty */
++ if (!(inb(iobase + UART_LSR) & UART_LSR_THRE))
++ return 0;
++
++ /* Fill FIFO with current frame */
++ while ((fifo_size-- > 0) && (actual < len)) {
++ /* Transmit next byte */
++ outb(buf[actual], iobase + UART_TX);
++ actual++;
++ }
++
++ return actual;
++}
++
++
++static void btuart_write_wakeup(btuart_info_t *info)
++{
++ if (!info) {
++ printk(KERN_WARNING "btuart_cs: Call of write_wakeup for unknown device.\n");
++ return;
++ }
++
++ if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) {
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++ return;
++ }
++
++ do {
++ register unsigned int iobase = info->link.io.BasePort1;
++ register struct sk_buff *skb;
++ register int len;
++
++ clear_bit(XMIT_WAKEUP, &(info->tx_state));
++
++ if (!(info->link.state & DEV_PRESENT))
++ return;
++
++ if (!(skb = skb_dequeue(&(info->txq))))
++ break;
++
++ /* Send frame */
++ len = btuart_write(iobase, 16, skb->data, skb->len);
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++
++ if (len == skb->len) {
++ kfree_skb(skb);
++ } else {
++ skb_pull(skb, len);
++ skb_queue_head(&(info->txq), skb);
++ }
++
++ info->hdev.stat.byte_tx += len;
++
++ } while (test_bit(XMIT_WAKEUP, &(info->tx_state)));
++
++ clear_bit(XMIT_SENDING, &(info->tx_state));
++}
++
++
++static void btuart_receive(btuart_info_t *info)
++{
++ unsigned int iobase;
++ int boguscount = 0;
++
++ if (!info) {
++ printk(KERN_WARNING "btuart_cs: Call of receive for unknown device.\n");
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ do {
++ info->hdev.stat.byte_rx++;
++
++ /* Allocate packet */
++ if (info->rx_skb == NULL) {
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ if (!(info->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
++ printk(KERN_WARNING "btuart_cs: Can't allocate mem for new packet.\n");
++ return;
++ }
++ }
++
++ if (info->rx_state == RECV_WAIT_PACKET_TYPE) {
++
++ info->rx_skb->dev = (void *)&(info->hdev);
++ info->rx_skb->pkt_type = inb(iobase + UART_RX);
++
++ switch (info->rx_skb->pkt_type) {
++
++ case HCI_EVENT_PKT:
++ info->rx_state = RECV_WAIT_EVENT_HEADER;
++ info->rx_count = HCI_EVENT_HDR_SIZE;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ info->rx_state = RECV_WAIT_ACL_HEADER;
++ info->rx_count = HCI_ACL_HDR_SIZE;
++ break;
++
++ case HCI_SCODATA_PKT:
++ info->rx_state = RECV_WAIT_SCO_HEADER;
++ info->rx_count = HCI_SCO_HDR_SIZE;
++ break;
++
++ default:
++ /* Unknown packet */
++ printk(KERN_WARNING "btuart_cs: Unknown HCI packet with type 0x%02x received.\n", info->rx_skb->pkt_type);
++ info->hdev.stat.err_rx++;
++ clear_bit(HCI_RUNNING, &(info->hdev.flags));
++
++ kfree_skb(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ } else {
++
++ *skb_put(info->rx_skb, 1) = inb(iobase + UART_RX);
++ info->rx_count--;
++
++ if (info->rx_count == 0) {
++
++ int dlen;
++ hci_event_hdr *eh;
++ hci_acl_hdr *ah;
++ hci_sco_hdr *sh;
++
++
++ switch (info->rx_state) {
++
++ case RECV_WAIT_EVENT_HEADER:
++ eh = (hci_event_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = eh->plen;
++ break;
++
++ case RECV_WAIT_ACL_HEADER:
++ ah = (hci_acl_hdr *)(info->rx_skb->data);
++ dlen = __le16_to_cpu(ah->dlen);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = dlen;
++ break;
++
++ case RECV_WAIT_SCO_HEADER:
++ sh = (hci_sco_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = sh->dlen;
++ break;
++
++ case RECV_WAIT_DATA:
++ hci_recv_frame(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ }
++
++ }
++
++ /* Make sure we don't stay here to long */
++ if (boguscount++ > 16)
++ break;
++
++ } while (inb(iobase + UART_LSR) & UART_LSR_DR);
++}
++
++
++void btuart_interrupt(int irq, void *dev_inst, struct pt_regs *regs)
++{
++ btuart_info_t *info = dev_inst;
++ unsigned int iobase;
++ int boguscount = 0;
++ int iir, lsr;
++
++ if (!info) {
++ printk(KERN_WARNING "btuart_cs: Call of irq %d for unknown device.\n", irq);
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ spin_lock(&(info->lock));
++
++ iir = inb(iobase + UART_IIR) & UART_IIR_ID;
++ while (iir) {
++
++ /* Clear interrupt */
++ lsr = inb(iobase + UART_LSR);
++
++ switch (iir) {
++ case UART_IIR_RLSI:
++ printk(KERN_NOTICE "btuart_cs: RLSI\n");
++ break;
++ case UART_IIR_RDI:
++ /* Receive interrupt */
++ btuart_receive(info);
++ break;
++ case UART_IIR_THRI:
++ if (lsr & UART_LSR_THRE) {
++ /* Transmitter ready for data */
++ btuart_write_wakeup(info);
++ }
++ break;
++ default:
++ printk(KERN_NOTICE "btuart_cs: Unhandled IIR=%#x\n", iir);
++ break;
++ }
++
++ /* Make sure we don't stay here to long */
++ if (boguscount++ > 100)
++ break;
++
++ iir = inb(iobase + UART_IIR) & UART_IIR_ID;
++
++ }
++
++ spin_unlock(&(info->lock));
++}
++
++
++static void btuart_change_speed(btuart_info_t *info, unsigned int speed)
++{
++ unsigned long flags;
++ unsigned int iobase;
++ int fcr; /* FIFO control reg */
++ int lcr; /* Line control reg */
++ int divisor;
++
++ if (!info) {
++ printk(KERN_WARNING "btuart_cs: Call of change speed for unknown device.\n");
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Turn off interrupts */
++ outb(0, iobase + UART_IER);
++
++ divisor = SPEED_MAX / speed;
++
++ fcr = UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT;
++
++ /*
++ * Use trigger level 1 to avoid 3 ms. timeout delay at 9600 bps, and
++ * almost 1,7 ms at 19200 bps. At speeds above that we can just forget
++ * about this timeout since it will always be fast enough.
++ */
++
++ if (speed < 38400)
++ fcr |= UART_FCR_TRIGGER_1;
++ else
++ fcr |= UART_FCR_TRIGGER_14;
++
++ /* Bluetooth cards use 8N1 */
++ lcr = UART_LCR_WLEN8;
++
++ outb(UART_LCR_DLAB | lcr, iobase + UART_LCR); /* Set DLAB */
++ outb(divisor & 0xff, iobase + UART_DLL); /* Set speed */
++ outb(divisor >> 8, iobase + UART_DLM);
++ outb(lcr, iobase + UART_LCR); /* Set 8N1 */
++ outb(fcr, iobase + UART_FCR); /* Enable FIFO's */
++
++ /* Turn on interrups */
++ outb(UART_IER_RLSI | UART_IER_RDI | UART_IER_THRI, iobase + UART_IER);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++}
++
++
++
++/* ======================== HCI interface ======================== */
++
++
++static int btuart_hci_flush(struct hci_dev *hdev)
++{
++ btuart_info_t *info = (btuart_info_t *)(hdev->driver_data);
++
++ /* Drop TX queue */
++ skb_queue_purge(&(info->txq));
++
++ return 0;
++}
++
++
++static int btuart_hci_open(struct hci_dev *hdev)
++{
++ set_bit(HCI_RUNNING, &(hdev->flags));
++
++ return 0;
++}
++
++
++static int btuart_hci_close(struct hci_dev *hdev)
++{
++ if (!test_and_clear_bit(HCI_RUNNING, &(hdev->flags)))
++ return 0;
++
++ btuart_hci_flush(hdev);
++
++ return 0;
++}
++
++
++static int btuart_hci_send_frame(struct sk_buff *skb)
++{
++ btuart_info_t *info;
++ struct hci_dev *hdev = (struct hci_dev *)(skb->dev);
++
++ if (!hdev) {
++ printk(KERN_WARNING "btuart_cs: Frame for unknown HCI device (hdev=NULL).");
++ return -ENODEV;
++ }
++
++ info = (btuart_info_t *)(hdev->driver_data);
++
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++ };
++
++ /* Prepend skb with frame type */
++ memcpy(skb_push(skb, 1), &(skb->pkt_type), 1);
++ skb_queue_tail(&(info->txq), skb);
++
++ btuart_write_wakeup(info);
++
++ return 0;
++}
++
++
++static void btuart_hci_destruct(struct hci_dev *hdev)
++{
++}
++
++
++static int btuart_hci_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
++{
++ return -ENOIOCTLCMD;
++}
++
++
++
++/* ======================== Card services HCI interaction ======================== */
++
++
++int btuart_open(btuart_info_t *info)
++{
++ unsigned long flags;
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev;
++
++ spin_lock_init(&(info->lock));
++
++ skb_queue_head_init(&(info->txq));
++
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ info->rx_skb = NULL;
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Reset UART */
++ outb(0, iobase + UART_MCR);
++
++ /* Turn off interrupts */
++ outb(0, iobase + UART_IER);
++
++ /* Initialize UART */
++ outb(UART_LCR_WLEN8, iobase + UART_LCR); /* Reset DLAB */
++ outb((UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2), iobase + UART_MCR);
++
++ /* Turn on interrupts */
++ // outb(UART_IER_RLSI | UART_IER_RDI | UART_IER_THRI, iobase + UART_IER);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++
++ btuart_change_speed(info, DEFAULT_BAUD_RATE);
++
++ /* Timeout before it is safe to send the first HCI packet */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ);
++
++
++ /* Initialize and register HCI device */
++
++ hdev = &(info->hdev);
++
++ hdev->type = HCI_PCCARD;
++ hdev->driver_data = info;
++
++ hdev->open = btuart_hci_open;
++ hdev->close = btuart_hci_close;
++ hdev->flush = btuart_hci_flush;
++ hdev->send = btuart_hci_send_frame;
++ hdev->destruct = btuart_hci_destruct;
++ hdev->ioctl = btuart_hci_ioctl;
++
++ if (hci_register_dev(hdev) < 0) {
++ printk(KERN_WARNING "btuart_cs: Can't register HCI device %s.\n", hdev->name);
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++
++int btuart_close(btuart_info_t *info)
++{
++ unsigned long flags;
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev = &(info->hdev);
++
++ if (info->link.state & DEV_CONFIG_PENDING)
++ return -ENODEV;
++
++ btuart_hci_close(hdev);
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Reset UART */
++ outb(0, iobase + UART_MCR);
++
++ /* Turn off interrupts */
++ outb(0, iobase + UART_IER);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++
++ if (hci_unregister_dev(hdev) < 0)
++ printk(KERN_WARNING "btuart_cs: Can't unregister HCI device %s.\n", hdev->name);
++
++ return 0;
++}
++
++
++
++/* ======================== Card services ======================== */
++
++
++static void cs_error(client_handle_t handle, int func, int ret)
++{
++ error_info_t err = { func, ret };
++
++ CardServices(ReportError, handle, &err);
++}
++
++
++dev_link_t *btuart_attach(void)
++{
++ btuart_info_t *info;
++ client_reg_t client_reg;
++ dev_link_t *link;
++ int i, ret;
++
++ /* Create new info device */
++ info = kmalloc(sizeof(*info), GFP_KERNEL);
++ if (!info)
++ return NULL;
++ memset(info, 0, sizeof(*info));
++
++ link = &info->link;
++ link->priv = info;
++
++ link->release.function = &btuart_release;
++ link->release.data = (u_long)link;
++ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
++ link->io.NumPorts1 = 8;
++ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
++ link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID;
++
++ if (irq_list[0] == -1)
++ link->irq.IRQInfo2 = irq_mask;
++ else
++ for (i = 0; i < 4; i++)
++ link->irq.IRQInfo2 |= 1 << irq_list[i];
++
++ link->irq.Handler = btuart_interrupt;
++ link->irq.Instance = info;
++
++ link->conf.Attributes = CONF_ENABLE_IRQ;
++ link->conf.Vcc = 50;
++ link->conf.IntType = INT_MEMORY_AND_IO;
++
++ /* Register with Card Services */
++ link->next = dev_list;
++ dev_list = link;
++ client_reg.dev_info = &dev_info;
++ client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
++ client_reg.EventMask =
++ CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
++ CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
++ CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
++ client_reg.event_handler = &btuart_event;
++ client_reg.Version = 0x0210;
++ client_reg.event_callback_args.client_data = link;
++
++ ret = CardServices(RegisterClient, &link->handle, &client_reg);
++ if (ret != CS_SUCCESS) {
++ cs_error(link->handle, RegisterClient, ret);
++ btuart_detach(link);
++ return NULL;
++ }
++
++ return link;
++}
++
++
++void btuart_detach(dev_link_t *link)
++{
++ btuart_info_t *info = link->priv;
++ dev_link_t **linkp;
++ int ret;
++
++ /* Locate device structure */
++ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
++ if (*linkp == link)
++ break;
++
++ if (*linkp == NULL)
++ return;
++
++ del_timer(&link->release);
++ if (link->state & DEV_CONFIG)
++ btuart_release((u_long)link);
++
++ if (link->handle) {
++ ret = CardServices(DeregisterClient, link->handle);
++ if (ret != CS_SUCCESS)
++ cs_error(link->handle, DeregisterClient, ret);
++ }
++
++ /* Unlink device structure, free bits */
++ *linkp = link->next;
++
++ kfree(info);
++}
++
++
++static int get_tuple(int fn, client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
++{
++ int i;
++
++ i = CardServices(fn, handle, tuple);
++ if (i != CS_SUCCESS)
++ return CS_NO_MORE_ITEMS;
++
++ i = CardServices(GetTupleData, handle, tuple);
++ if (i != CS_SUCCESS)
++ return i;
++
++ return CardServices(ParseTuple, handle, tuple, parse);
++}
++
++
++#define first_tuple(a, b, c) get_tuple(GetFirstTuple, a, b, c)
++#define next_tuple(a, b, c) get_tuple(GetNextTuple, a, b, c)
++
++void btuart_config(dev_link_t *link)
++{
++ static ioaddr_t base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 };
++ client_handle_t handle = link->handle;
++ btuart_info_t *info = link->priv;
++ tuple_t tuple;
++ u_short buf[256];
++ cisparse_t parse;
++ cistpl_cftable_entry_t *cf = &parse.cftable_entry;
++ config_info_t config;
++ int i, j, try, last_ret, last_fn;
++
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++
++ /* Get configuration register information */
++ tuple.DesiredTuple = CISTPL_CONFIG;
++ last_ret = first_tuple(handle, &tuple, &parse);
++ if (last_ret != CS_SUCCESS) {
++ last_fn = ParseTuple;
++ goto cs_failed;
++ }
++ link->conf.ConfigBase = parse.config.base;
++ link->conf.Present = parse.config.rmask[0];
++
++ /* Configure card */
++ link->state |= DEV_CONFIG;
++ i = CardServices(GetConfigurationInfo, handle, &config);
++ link->conf.Vcc = config.Vcc;
++
++ /* First pass: look for a config entry that looks normal. */
++ tuple.TupleData = (cisdata_t *) buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++ tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
++ /* Two tries: without IO aliases, then with aliases */
++ for (try = 0; try < 2; try++) {
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if (i != CS_SUCCESS)
++ goto next_entry;
++ if (cf->vpp1.present & (1 << CISTPL_POWER_VNOM))
++ link->conf.Vpp1 = link->conf.Vpp2 = cf->vpp1.param[CISTPL_POWER_VNOM] / 10000;
++ if ((cf->io.nwin > 0) && (cf->io.win[0].len == 8) && (cf->io.win[0].base != 0)) {
++ link->conf.ConfigIndex = cf->index;
++ link->io.BasePort1 = cf->io.win[0].base;
++ link->io.IOAddrLines = (try == 0) ? 16 : cf->io.flags & CISTPL_IO_LINES_MASK;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ goto found_port;
++ }
++next_entry:
++ i = next_tuple(handle, &tuple, &parse);
++ }
++ }
++
++ /* Second pass: try to find an entry that isn't picky about
++ its base address, then try to grab any standard serial port
++ address, and finally try to get any free port. */
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if ((i == CS_SUCCESS) && (cf->io.nwin > 0)
++ && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) {
++ link->conf.ConfigIndex = cf->index;
++ for (j = 0; j < 5; j++) {
++ link->io.BasePort1 = base[j];
++ link->io.IOAddrLines = base[j] ? 16 : 3;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ goto found_port;
++ }
++ }
++ i = next_tuple(handle, &tuple, &parse);
++ }
++
++found_port:
++ if (i != CS_SUCCESS) {
++ printk(KERN_NOTICE "btuart_cs: No usable port range found. Giving up.\n");
++ cs_error(link->handle, RequestIO, i);
++ goto failed;
++ }
++
++ i = CardServices(RequestIRQ, link->handle, &link->irq);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIRQ, i);
++ link->irq.AssignedIRQ = 0;
++ }
++
++ i = CardServices(RequestConfiguration, link->handle, &link->conf);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestConfiguration, i);
++ goto failed;
++ }
++
++ MOD_INC_USE_COUNT;
++
++ if (btuart_open(info) != 0)
++ goto failed;
++
++ strcpy(info->node.dev_name, info->hdev.name);
++ link->dev = &info->node;
++ link->state &= ~DEV_CONFIG_PENDING;
++
++ return;
++
++cs_failed:
++ cs_error(link->handle, last_fn, last_ret);
++
++failed:
++ btuart_release((u_long) link);
++}
++
++
++void btuart_release(u_long arg)
++{
++ dev_link_t *link = (dev_link_t *)arg;
++ btuart_info_t *info = link->priv;
++
++ if (link->state & DEV_PRESENT)
++ btuart_close(info);
++
++ MOD_DEC_USE_COUNT;
++
++ link->dev = NULL;
++
++ CardServices(ReleaseConfiguration, link->handle);
++ CardServices(ReleaseIO, link->handle, &link->io);
++ CardServices(ReleaseIRQ, link->handle, &link->irq);
++
++ link->state &= ~DEV_CONFIG;
++}
++
++
++int btuart_event(event_t event, int priority, event_callback_args_t *args)
++{
++ dev_link_t *link = args->client_data;
++ btuart_info_t *info = link->priv;
++
++ switch (event) {
++ case CS_EVENT_CARD_REMOVAL:
++ link->state &= ~DEV_PRESENT;
++ if (link->state & DEV_CONFIG) {
++ btuart_close(info);
++ mod_timer(&link->release, jiffies + HZ / 20);
++ }
++ break;
++ case CS_EVENT_CARD_INSERTION:
++ link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
++ btuart_config(link);
++ break;
++ case CS_EVENT_PM_SUSPEND:
++ link->state |= DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_RESET_PHYSICAL:
++ if (link->state & DEV_CONFIG)
++ CardServices(ReleaseConfiguration, link->handle);
++ break;
++ case CS_EVENT_PM_RESUME:
++ link->state &= ~DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_CARD_RESET:
++ if (DEV_OK(link))
++ CardServices(RequestConfiguration, link->handle, &link->conf);
++ break;
++ }
++
++ return 0;
++}
++
++
++
++/* ======================== Module initialization ======================== */
++
++
++int __init init_btuart_cs(void)
++{
++ servinfo_t serv;
++ int err;
++
++ CardServices(GetCardServicesInfo, &serv);
++ if (serv.Revision != CS_RELEASE_CODE) {
++ printk(KERN_NOTICE "btuart_cs: Card Services release does not match!\n");
++ return -1;
++ }
++
++ err = register_pccard_driver(&dev_info, &btuart_attach, &btuart_detach);
++
++ return err;
++}
++
++
++void __exit exit_btuart_cs(void)
++{
++ unregister_pccard_driver(&dev_info);
++
++ while (dev_list != NULL)
++ btuart_detach(dev_list);
++}
++
++
++module_init(init_btuart_cs);
++module_exit(exit_btuart_cs);
++
++EXPORT_NO_SYMBOLS;
+diff -urN linux-2.4.18/drivers/bluetooth/Config.in linux-2.4.18-mh15/drivers/bluetooth/Config.in
+--- linux-2.4.18/drivers/bluetooth/Config.in 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/drivers/bluetooth/Config.in 2004-08-01 16:26:23.000000000 +0200
+@@ -1,8 +1,33 @@
++#
++# Bluetooth HCI device drivers configuration
++#
++
+ mainmenu_option next_comment
+ comment 'Bluetooth device drivers'
+
+ dep_tristate 'HCI USB driver' CONFIG_BLUEZ_HCIUSB $CONFIG_BLUEZ $CONFIG_USB
++if [ "$CONFIG_BLUEZ_HCIUSB" != "n" ]; then
++ bool ' SCO (voice) support' CONFIG_BLUEZ_HCIUSB_SCO
++fi
++
+ dep_tristate 'HCI UART driver' CONFIG_BLUEZ_HCIUART $CONFIG_BLUEZ
+-dep_tristate 'HCI VHCI virtual HCI device driver' CONFIG_BLUEZ_HCIVHCI $CONFIG_BLUEZ
++if [ "$CONFIG_BLUEZ_HCIUART" != "n" ]; then
++ bool ' UART (H4) protocol support' CONFIG_BLUEZ_HCIUART_H4
++ bool ' BCSP protocol support' CONFIG_BLUEZ_HCIUART_BCSP
++ dep_bool ' Transmit CRC with every BCSP packet' CONFIG_BLUEZ_HCIUART_BCSP_TXCRC $CONFIG_BLUEZ_HCIUART_BCSP
++fi
++
++dep_tristate 'HCI BlueFRITZ! USB driver' CONFIG_BLUEZ_HCIBFUSB $CONFIG_BLUEZ $CONFIG_USB
++
++dep_tristate 'HCI DTL1 (PC Card) driver' CONFIG_BLUEZ_HCIDTL1 $CONFIG_PCMCIA $CONFIG_BLUEZ
++
++dep_tristate 'HCI BT3C (PC Card) driver' CONFIG_BLUEZ_HCIBT3C $CONFIG_PCMCIA $CONFIG_BLUEZ
++
++dep_tristate 'HCI BlueCard (PC Card) driver' CONFIG_BLUEZ_HCIBLUECARD $CONFIG_PCMCIA $CONFIG_BLUEZ
++
++dep_tristate 'HCI UART (PC Card) driver' CONFIG_BLUEZ_HCIBTUART $CONFIG_PCMCIA $CONFIG_BLUEZ
++
++dep_tristate 'HCI VHCI (Virtual HCI device) driver' CONFIG_BLUEZ_HCIVHCI $CONFIG_BLUEZ
+
+ endmenu
++
+diff -urN linux-2.4.18/drivers/bluetooth/dtl1_cs.c linux-2.4.18-mh15/drivers/bluetooth/dtl1_cs.c
+--- linux-2.4.18/drivers/bluetooth/dtl1_cs.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/dtl1_cs.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,861 @@
++/*
++ *
++ * A driver for Nokia Connectivity Card DTL-1 devices
++ *
++ * Copyright (C) 2001-2002 Marcel Holtmann <marcel@holtmann.org>
++ *
++ *
++ * 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;
++ *
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ *
++ * The initial developer of the original code is David A. Hinds
++ * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
++ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/timer.h>
++#include <linux/errno.h>
++#include <linux/ptrace.h>
++#include <linux/ioport.h>
++#include <linux/spinlock.h>
++
++#include <linux/skbuff.h>
++#include <linux/string.h>
++#include <linux/serial.h>
++#include <linux/serial_reg.h>
++#include <asm/system.h>
++#include <asm/bitops.h>
++#include <asm/io.h>
++
++#include <pcmcia/version.h>
++#include <pcmcia/cs_types.h>
++#include <pcmcia/cs.h>
++#include <pcmcia/cistpl.h>
++#include <pcmcia/ciscode.h>
++#include <pcmcia/ds.h>
++#include <pcmcia/cisreg.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++
++
++/* ======================== Module parameters ======================== */
++
++
++/* Bit map of interrupts to choose from */
++static u_int irq_mask = 0xffff;
++static int irq_list[4] = { -1 };
++
++MODULE_PARM(irq_mask, "i");
++MODULE_PARM(irq_list, "1-4i");
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueZ driver for Nokia Connectivity Card DTL-1");
++MODULE_LICENSE("GPL");
++
++
++
++/* ======================== Local structures ======================== */
++
++
++typedef struct dtl1_info_t {
++ dev_link_t link;
++ dev_node_t node;
++
++ struct hci_dev hdev;
++
++ spinlock_t lock; /* For serializing operations */
++
++ unsigned long flowmask; /* HCI flow mask */
++ int ri_latch;
++
++ struct sk_buff_head txq;
++ unsigned long tx_state;
++
++ unsigned long rx_state;
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++} dtl1_info_t;
++
++
++void dtl1_config(dev_link_t *link);
++void dtl1_release(u_long arg);
++int dtl1_event(event_t event, int priority, event_callback_args_t *args);
++
++static dev_info_t dev_info = "dtl1_cs";
++
++dev_link_t *dtl1_attach(void);
++void dtl1_detach(dev_link_t *);
++
++static dev_link_t *dev_list = NULL;
++
++
++/* Transmit states */
++#define XMIT_SENDING 1
++#define XMIT_WAKEUP 2
++#define XMIT_WAITING 8
++
++/* Receiver States */
++#define RECV_WAIT_NSH 0
++#define RECV_WAIT_DATA 1
++
++
++typedef struct {
++ u8 type;
++ u8 zero;
++ u16 len;
++} __attribute__ ((packed)) nsh_t; /* Nokia Specific Header */
++
++#define NSHL 4 /* Nokia Specific Header Length */
++
++
++
++/* ======================== Interrupt handling ======================== */
++
++
++static int dtl1_write(unsigned int iobase, int fifo_size, __u8 *buf, int len)
++{
++ int actual = 0;
++
++ /* Tx FIFO should be empty */
++ if (!(inb(iobase + UART_LSR) & UART_LSR_THRE))
++ return 0;
++
++ /* Fill FIFO with current frame */
++ while ((fifo_size-- > 0) && (actual < len)) {
++ /* Transmit next byte */
++ outb(buf[actual], iobase + UART_TX);
++ actual++;
++ }
++
++ return actual;
++}
++
++
++static void dtl1_write_wakeup(dtl1_info_t *info)
++{
++ if (!info) {
++ printk(KERN_WARNING "dtl1_cs: Call of write_wakeup for unknown device.\n");
++ return;
++ }
++
++ if (test_bit(XMIT_WAITING, &(info->tx_state))) {
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++ return;
++ }
++
++ if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) {
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++ return;
++ }
++
++ do {
++ register unsigned int iobase = info->link.io.BasePort1;
++ register struct sk_buff *skb;
++ register int len;
++
++ clear_bit(XMIT_WAKEUP, &(info->tx_state));
++
++ if (!(info->link.state & DEV_PRESENT))
++ return;
++
++ if (!(skb = skb_dequeue(&(info->txq))))
++ break;
++
++ /* Send frame */
++ len = dtl1_write(iobase, 32, skb->data, skb->len);
++
++ if (len == skb->len) {
++ set_bit(XMIT_WAITING, &(info->tx_state));
++ kfree_skb(skb);
++ } else {
++ skb_pull(skb, len);
++ skb_queue_head(&(info->txq), skb);
++ }
++
++ info->hdev.stat.byte_tx += len;
++
++ } while (test_bit(XMIT_WAKEUP, &(info->tx_state)));
++
++ clear_bit(XMIT_SENDING, &(info->tx_state));
++}
++
++
++static void dtl1_control(dtl1_info_t *info, struct sk_buff *skb)
++{
++ u8 flowmask = *(u8 *)skb->data;
++ int i;
++
++ printk(KERN_INFO "dtl1_cs: Nokia control data = ");
++ for (i = 0; i < skb->len; i++) {
++ printk("%02x ", skb->data[i]);
++ }
++ printk("\n");
++
++ /* transition to active state */
++ if (((info->flowmask & 0x07) == 0) && ((flowmask & 0x07) != 0)) {
++ clear_bit(XMIT_WAITING, &(info->tx_state));
++ dtl1_write_wakeup(info);
++ }
++
++ info->flowmask = flowmask;
++
++ kfree_skb(skb);
++}
++
++
++static void dtl1_receive(dtl1_info_t *info)
++{
++ unsigned int iobase;
++ nsh_t *nsh;
++ int boguscount = 0;
++
++ if (!info) {
++ printk(KERN_WARNING "dtl1_cs: Call of receive for unknown device.\n");
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ do {
++ info->hdev.stat.byte_rx++;
++
++ /* Allocate packet */
++ if (info->rx_skb == NULL)
++ if (!(info->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
++ printk(KERN_WARNING "dtl1_cs: Can't allocate mem for new packet.\n");
++ info->rx_state = RECV_WAIT_NSH;
++ info->rx_count = NSHL;
++ return;
++ }
++
++ *skb_put(info->rx_skb, 1) = inb(iobase + UART_RX);
++ nsh = (nsh_t *)info->rx_skb->data;
++
++ info->rx_count--;
++
++ if (info->rx_count == 0) {
++
++ switch (info->rx_state) {
++ case RECV_WAIT_NSH:
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = nsh->len + (nsh->len & 0x0001);
++ break;
++ case RECV_WAIT_DATA:
++ info->rx_skb->pkt_type = nsh->type;
++
++ /* remove PAD byte if it exists */
++ if (nsh->len & 0x0001) {
++ info->rx_skb->tail--;
++ info->rx_skb->len--;
++ }
++
++ /* remove NSH */
++ skb_pull(info->rx_skb, NSHL);
++
++ switch (info->rx_skb->pkt_type) {
++ case 0x80:
++ /* control data for the Nokia Card */
++ dtl1_control(info, info->rx_skb);
++ break;
++ case 0x82:
++ case 0x83:
++ case 0x84:
++ /* send frame to the HCI layer */
++ info->rx_skb->dev = (void *)&(info->hdev);
++ info->rx_skb->pkt_type &= 0x0f;
++ hci_recv_frame(info->rx_skb);
++ break;
++ default:
++ /* unknown packet */
++ printk(KERN_WARNING "dtl1_cs: Unknown HCI packet with type 0x%02x received.\n", info->rx_skb->pkt_type);
++ kfree_skb(info->rx_skb);
++ break;
++ }
++
++ info->rx_state = RECV_WAIT_NSH;
++ info->rx_count = NSHL;
++ info->rx_skb = NULL;
++ break;
++ }
++
++ }
++
++ /* Make sure we don't stay here to long */
++ if (boguscount++ > 32)
++ break;
++
++ } while (inb(iobase + UART_LSR) & UART_LSR_DR);
++}
++
++
++void dtl1_interrupt(int irq, void *dev_inst, struct pt_regs *regs)
++{
++ dtl1_info_t *info = dev_inst;
++ unsigned int iobase;
++ unsigned char msr;
++ int boguscount = 0;
++ int iir, lsr;
++
++ if (!info) {
++ printk(KERN_WARNING "dtl1_cs: Call of irq %d for unknown device.\n", irq);
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ spin_lock(&(info->lock));
++
++ iir = inb(iobase + UART_IIR) & UART_IIR_ID;
++ while (iir) {
++
++ /* Clear interrupt */
++ lsr = inb(iobase + UART_LSR);
++
++ switch (iir) {
++ case UART_IIR_RLSI:
++ printk(KERN_NOTICE "dtl1_cs: RLSI\n");
++ break;
++ case UART_IIR_RDI:
++ /* Receive interrupt */
++ dtl1_receive(info);
++ break;
++ case UART_IIR_THRI:
++ if (lsr & UART_LSR_THRE) {
++ /* Transmitter ready for data */
++ dtl1_write_wakeup(info);
++ }
++ break;
++ default:
++ printk(KERN_NOTICE "dtl1_cs: Unhandled IIR=%#x\n", iir);
++ break;
++ }
++
++ /* Make sure we don't stay here to long */
++ if (boguscount++ > 100)
++ break;
++
++ iir = inb(iobase + UART_IIR) & UART_IIR_ID;
++
++ }
++
++ msr = inb(iobase + UART_MSR);
++
++ if (info->ri_latch ^ (msr & UART_MSR_RI)) {
++ info->ri_latch = msr & UART_MSR_RI;
++ clear_bit(XMIT_WAITING, &(info->tx_state));
++ dtl1_write_wakeup(info);
++ }
++
++ spin_unlock(&(info->lock));
++}
++
++
++
++/* ======================== HCI interface ======================== */
++
++
++static int dtl1_hci_open(struct hci_dev *hdev)
++{
++ set_bit(HCI_RUNNING, &(hdev->flags));
++
++ return 0;
++}
++
++
++static int dtl1_hci_flush(struct hci_dev *hdev)
++{
++ dtl1_info_t *info = (dtl1_info_t *)(hdev->driver_data);
++
++ /* Drop TX queue */
++ skb_queue_purge(&(info->txq));
++
++ return 0;
++}
++
++
++static int dtl1_hci_close(struct hci_dev *hdev)
++{
++ if (!test_and_clear_bit(HCI_RUNNING, &(hdev->flags)))
++ return 0;
++
++ dtl1_hci_flush(hdev);
++
++ return 0;
++}
++
++
++static int dtl1_hci_send_frame(struct sk_buff *skb)
++{
++ dtl1_info_t *info;
++ struct hci_dev *hdev = (struct hci_dev *)(skb->dev);
++ struct sk_buff *s;
++ nsh_t nsh;
++
++ if (!hdev) {
++ printk(KERN_WARNING "dtl1_cs: Frame for unknown HCI device (hdev=NULL).");
++ return -ENODEV;
++ }
++
++ info = (dtl1_info_t *)(hdev->driver_data);
++
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ nsh.type = 0x81;
++ break;
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ nsh.type = 0x82;
++ break;
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ nsh.type = 0x83;
++ break;
++ };
++
++ nsh.zero = 0;
++ nsh.len = skb->len;
++
++ s = bluez_skb_alloc(NSHL + skb->len + 1, GFP_ATOMIC);
++ skb_reserve(s, NSHL);
++ memcpy(skb_put(s, skb->len), skb->data, skb->len);
++ if (skb->len & 0x0001)
++ *skb_put(s, 1) = 0; /* PAD */
++
++ /* Prepend skb with Nokia frame header and queue */
++ memcpy(skb_push(s, NSHL), &nsh, NSHL);
++ skb_queue_tail(&(info->txq), s);
++
++ dtl1_write_wakeup(info);
++
++ kfree_skb(skb);
++
++ return 0;
++}
++
++
++static void dtl1_hci_destruct(struct hci_dev *hdev)
++{
++}
++
++
++static int dtl1_hci_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
++{
++ return -ENOIOCTLCMD;
++}
++
++
++
++/* ======================== Card services HCI interaction ======================== */
++
++
++int dtl1_open(dtl1_info_t *info)
++{
++ unsigned long flags;
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev;
++
++ spin_lock_init(&(info->lock));
++
++ skb_queue_head_init(&(info->txq));
++
++ info->rx_state = RECV_WAIT_NSH;
++ info->rx_count = NSHL;
++ info->rx_skb = NULL;
++
++ set_bit(XMIT_WAITING, &(info->tx_state));
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Reset UART */
++ outb(0, iobase + UART_MCR);
++
++ /* Turn off interrupts */
++ outb(0, iobase + UART_IER);
++
++ /* Initialize UART */
++ outb(UART_LCR_WLEN8, iobase + UART_LCR); /* Reset DLAB */
++ outb((UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2), iobase + UART_MCR);
++
++ info->ri_latch = inb(info->link.io.BasePort1 + UART_MSR) & UART_MSR_RI;
++
++ /* Turn on interrupts */
++ outb(UART_IER_RLSI | UART_IER_RDI | UART_IER_THRI, iobase + UART_IER);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++
++ /* Timeout before it is safe to send the first HCI packet */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ * 2);
++
++
++ /* Initialize and register HCI device */
++
++ hdev = &(info->hdev);
++
++ hdev->type = HCI_PCCARD;
++ hdev->driver_data = info;
++
++ hdev->open = dtl1_hci_open;
++ hdev->close = dtl1_hci_close;
++ hdev->flush = dtl1_hci_flush;
++ hdev->send = dtl1_hci_send_frame;
++ hdev->destruct = dtl1_hci_destruct;
++ hdev->ioctl = dtl1_hci_ioctl;
++
++ if (hci_register_dev(hdev) < 0) {
++ printk(KERN_WARNING "dtl1_cs: Can't register HCI device %s.\n", hdev->name);
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++
++int dtl1_close(dtl1_info_t *info)
++{
++ unsigned long flags;
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev = &(info->hdev);
++
++ if (info->link.state & DEV_CONFIG_PENDING)
++ return -ENODEV;
++
++ dtl1_hci_close(hdev);
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Reset UART */
++ outb(0, iobase + UART_MCR);
++
++ /* Turn off interrupts */
++ outb(0, iobase + UART_IER);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++
++ if (hci_unregister_dev(hdev) < 0)
++ printk(KERN_WARNING "dtl1_cs: Can't unregister HCI device %s.\n", hdev->name);
++
++ return 0;
++}
++
++
++
++/* ======================== Card services ======================== */
++
++
++static void cs_error(client_handle_t handle, int func, int ret)
++{
++ error_info_t err = { func, ret };
++
++ CardServices(ReportError, handle, &err);
++}
++
++
++dev_link_t *dtl1_attach(void)
++{
++ dtl1_info_t *info;
++ client_reg_t client_reg;
++ dev_link_t *link;
++ int i, ret;
++
++ /* Create new info device */
++ info = kmalloc(sizeof(*info), GFP_KERNEL);
++ if (!info)
++ return NULL;
++ memset(info, 0, sizeof(*info));
++
++ link = &info->link;
++ link->priv = info;
++
++ link->release.function = &dtl1_release;
++ link->release.data = (u_long)link;
++ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
++ link->io.NumPorts1 = 8;
++ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
++ link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID;
++
++ if (irq_list[0] == -1)
++ link->irq.IRQInfo2 = irq_mask;
++ else
++ for (i = 0; i < 4; i++)
++ link->irq.IRQInfo2 |= 1 << irq_list[i];
++
++ link->irq.Handler = dtl1_interrupt;
++ link->irq.Instance = info;
++
++ link->conf.Attributes = CONF_ENABLE_IRQ;
++ link->conf.Vcc = 50;
++ link->conf.IntType = INT_MEMORY_AND_IO;
++
++ /* Register with Card Services */
++ link->next = dev_list;
++ dev_list = link;
++ client_reg.dev_info = &dev_info;
++ client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
++ client_reg.EventMask =
++ CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
++ CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
++ CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
++ client_reg.event_handler = &dtl1_event;
++ client_reg.Version = 0x0210;
++ client_reg.event_callback_args.client_data = link;
++
++ ret = CardServices(RegisterClient, &link->handle, &client_reg);
++ if (ret != CS_SUCCESS) {
++ cs_error(link->handle, RegisterClient, ret);
++ dtl1_detach(link);
++ return NULL;
++ }
++
++ return link;
++}
++
++
++void dtl1_detach(dev_link_t *link)
++{
++ dtl1_info_t *info = link->priv;
++ dev_link_t **linkp;
++ int ret;
++
++ /* Locate device structure */
++ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
++ if (*linkp == link)
++ break;
++
++ if (*linkp == NULL)
++ return;
++
++ del_timer(&link->release);
++ if (link->state & DEV_CONFIG)
++ dtl1_release((u_long)link);
++
++ if (link->handle) {
++ ret = CardServices(DeregisterClient, link->handle);
++ if (ret != CS_SUCCESS)
++ cs_error(link->handle, DeregisterClient, ret);
++ }
++
++ /* Unlink device structure, free bits */
++ *linkp = link->next;
++
++ kfree(info);
++}
++
++
++static int get_tuple(int fn, client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
++{
++ int i;
++
++ i = CardServices(fn, handle, tuple);
++ if (i != CS_SUCCESS)
++ return CS_NO_MORE_ITEMS;
++
++ i = CardServices(GetTupleData, handle, tuple);
++ if (i != CS_SUCCESS)
++ return i;
++
++ return CardServices(ParseTuple, handle, tuple, parse);
++}
++
++
++#define first_tuple(a, b, c) get_tuple(GetFirstTuple, a, b, c)
++#define next_tuple(a, b, c) get_tuple(GetNextTuple, a, b, c)
++
++void dtl1_config(dev_link_t *link)
++{
++ client_handle_t handle = link->handle;
++ dtl1_info_t *info = link->priv;
++ tuple_t tuple;
++ u_short buf[256];
++ cisparse_t parse;
++ cistpl_cftable_entry_t *cf = &parse.cftable_entry;
++ config_info_t config;
++ int i, last_ret, last_fn;
++
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++
++ /* Get configuration register information */
++ tuple.DesiredTuple = CISTPL_CONFIG;
++ last_ret = first_tuple(handle, &tuple, &parse);
++ if (last_ret != CS_SUCCESS) {
++ last_fn = ParseTuple;
++ goto cs_failed;
++ }
++ link->conf.ConfigBase = parse.config.base;
++ link->conf.Present = parse.config.rmask[0];
++
++ /* Configure card */
++ link->state |= DEV_CONFIG;
++ i = CardServices(GetConfigurationInfo, handle, &config);
++ link->conf.Vcc = config.Vcc;
++
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++ tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
++
++ /* Look for a generic full-sized window */
++ link->io.NumPorts1 = 8;
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if ((i == CS_SUCCESS) && (cf->io.nwin == 1) && (cf->io.win[0].len > 8)) {
++ link->conf.ConfigIndex = cf->index;
++ link->io.BasePort1 = cf->io.win[0].base;
++ link->io.NumPorts1 = cf->io.win[0].len; /*yo */
++ link->io.IOAddrLines = cf->io.flags & CISTPL_IO_LINES_MASK;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ break;
++ }
++ i = next_tuple(handle, &tuple, &parse);
++ }
++
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIO, i);
++ goto failed;
++ }
++
++ i = CardServices(RequestIRQ, link->handle, &link->irq);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIRQ, i);
++ link->irq.AssignedIRQ = 0;
++ }
++
++ i = CardServices(RequestConfiguration, link->handle, &link->conf);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestConfiguration, i);
++ goto failed;
++ }
++
++ MOD_INC_USE_COUNT;
++
++ if (dtl1_open(info) != 0)
++ goto failed;
++
++ strcpy(info->node.dev_name, info->hdev.name);
++ link->dev = &info->node;
++ link->state &= ~DEV_CONFIG_PENDING;
++
++ return;
++
++cs_failed:
++ cs_error(link->handle, last_fn, last_ret);
++
++failed:
++ dtl1_release((u_long)link);
++}
++
++
++void dtl1_release(u_long arg)
++{
++ dev_link_t *link = (dev_link_t *)arg;
++ dtl1_info_t *info = link->priv;
++
++ if (link->state & DEV_PRESENT)
++ dtl1_close(info);
++
++ MOD_DEC_USE_COUNT;
++
++ link->dev = NULL;
++
++ CardServices(ReleaseConfiguration, link->handle);
++ CardServices(ReleaseIO, link->handle, &link->io);
++ CardServices(ReleaseIRQ, link->handle, &link->irq);
++
++ link->state &= ~DEV_CONFIG;
++}
++
++
++int dtl1_event(event_t event, int priority, event_callback_args_t *args)
++{
++ dev_link_t *link = args->client_data;
++ dtl1_info_t *info = link->priv;
++
++ switch (event) {
++ case CS_EVENT_CARD_REMOVAL:
++ link->state &= ~DEV_PRESENT;
++ if (link->state & DEV_CONFIG) {
++ dtl1_close(info);
++ mod_timer(&link->release, jiffies + HZ / 20);
++ }
++ break;
++ case CS_EVENT_CARD_INSERTION:
++ link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
++ dtl1_config(link);
++ break;
++ case CS_EVENT_PM_SUSPEND:
++ link->state |= DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_RESET_PHYSICAL:
++ if (link->state & DEV_CONFIG)
++ CardServices(ReleaseConfiguration, link->handle);
++ break;
++ case CS_EVENT_PM_RESUME:
++ link->state &= ~DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_CARD_RESET:
++ if (DEV_OK(link))
++ CardServices(RequestConfiguration, link->handle, &link->conf);
++ break;
++ }
++
++ return 0;
++}
++
++
++
++/* ======================== Module initialization ======================== */
++
++
++int __init init_dtl1_cs(void)
++{
++ servinfo_t serv;
++ int err;
++
++ CardServices(GetCardServicesInfo, &serv);
++ if (serv.Revision != CS_RELEASE_CODE) {
++ printk(KERN_NOTICE "dtl1_cs: Card Services release does not match!\n");
++ return -1;
++ }
++
++ err = register_pccard_driver(&dev_info, &dtl1_attach, &dtl1_detach);
++
++ return err;
++}
++
++
++void __exit exit_dtl1_cs(void)
++{
++ unregister_pccard_driver(&dev_info);
++
++ while (dev_list != NULL)
++ dtl1_detach(dev_list);
++}
++
++
++module_init(init_dtl1_cs);
++module_exit(exit_dtl1_cs);
++
++EXPORT_NO_SYMBOLS;
+diff -urN linux-2.4.18/drivers/bluetooth/hci_bcsp.c linux-2.4.18-mh15/drivers/bluetooth/hci_bcsp.c
+--- linux-2.4.18/drivers/bluetooth/hci_bcsp.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_bcsp.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,710 @@
++/*
++ BlueCore Serial Protocol (BCSP) for Linux Bluetooth stack (BlueZ).
++ Copyright 2002 by Fabrizio Gennari <fabrizio.gennari@philips.com>
++
++ Based on
++ hci_h4.c by Maxim Krasnyansky <maxk@qualcomm.com>
++ ABCSP by Carl Orsborn <cjo@csr.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_bcsp.c,v 1.2 2002/09/26 05:05:14 maxk Exp $
++ */
++
++#define VERSION "0.1"
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/version.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/fcntl.h>
++#include <linux/interrupt.h>
++#include <linux/ptrace.h>
++#include <linux/poll.h>
++
++#include <linux/slab.h>
++#include <linux/tty.h>
++#include <linux/errno.h>
++#include <linux/string.h>
++#include <linux/signal.h>
++#include <linux/ioctl.h>
++#include <linux/skbuff.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include "hci_uart.h"
++#include "hci_bcsp.h"
++
++#ifndef HCI_UART_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#undef BT_DMP
++#define BT_DMP( A... )
++#endif
++
++/* ---- BCSP CRC calculation ---- */
++
++/* Table for calculating CRC for polynomial 0x1021, LSB processed first,
++initial value 0xffff, bits shifted in reverse order. */
++
++static const u16 crc_table[] = {
++ 0x0000, 0x1081, 0x2102, 0x3183,
++ 0x4204, 0x5285, 0x6306, 0x7387,
++ 0x8408, 0x9489, 0xa50a, 0xb58b,
++ 0xc60c, 0xd68d, 0xe70e, 0xf78f
++};
++
++/* Initialise the crc calculator */
++#define BCSP_CRC_INIT(x) x = 0xffff
++
++/*
++ Update crc with next data byte
++
++ Implementation note
++ The data byte is treated as two nibbles. The crc is generated
++ in reverse, i.e., bits are fed into the register from the top.
++*/
++static void bcsp_crc_update(u16 *crc, u8 d)
++{
++ u16 reg = *crc;
++
++ reg = (reg >> 4) ^ crc_table[(reg ^ d) & 0x000f];
++ reg = (reg >> 4) ^ crc_table[(reg ^ (d >> 4)) & 0x000f];
++
++ *crc = reg;
++}
++
++/*
++ Get reverse of generated crc
++
++ Implementation note
++ The crc generator (bcsp_crc_init() and bcsp_crc_update())
++ creates a reversed crc, so it needs to be swapped back before
++ being passed on.
++*/
++static u16 bcsp_crc_reverse(u16 crc)
++{
++ u16 b, rev;
++
++ for (b = 0, rev = 0; b < 16; b++) {
++ rev = rev << 1;
++ rev |= (crc & 1);
++ crc = crc >> 1;
++ }
++ return (rev);
++}
++
++/* ---- BCSP core ---- */
++
++static void bcsp_slip_msgdelim(struct sk_buff *skb)
++{
++ const char pkt_delim = 0xc0;
++ memcpy(skb_put(skb, 1), &pkt_delim, 1);
++}
++
++static void bcsp_slip_one_byte(struct sk_buff *skb, u8 c)
++{
++ const char esc_c0[2] = { 0xdb, 0xdc };
++ const char esc_db[2] = { 0xdb, 0xdd };
++
++ switch (c) {
++ case 0xc0:
++ memcpy(skb_put(skb, 2), &esc_c0, 2);
++ break;
++ case 0xdb:
++ memcpy(skb_put(skb, 2), &esc_db, 2);
++ break;
++ default:
++ memcpy(skb_put(skb, 1), &c, 1);
++ }
++}
++
++static int bcsp_enqueue(struct hci_uart *hu, struct sk_buff *skb)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++
++ if (skb->len > 0xFFF) {
++ BT_ERR("Packet too long");
++ kfree_skb(skb);
++ return 0;
++ }
++
++ switch (skb->pkt_type) {
++ case HCI_ACLDATA_PKT:
++ case HCI_COMMAND_PKT:
++ skb_queue_tail(&bcsp->rel, skb);
++ break;
++
++ case HCI_SCODATA_PKT:
++ skb_queue_tail(&bcsp->unrel, skb);
++ break;
++
++ default:
++ BT_ERR("Unknown packet type");
++ kfree_skb(skb);
++ break;
++ }
++ return 0;
++}
++
++static struct sk_buff *bcsp_prepare_pkt(struct bcsp_struct *bcsp, u8 *data,
++ int len, int pkt_type)
++{
++ struct sk_buff *nskb;
++ u8 hdr[4], chan;
++ int rel, i;
++
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ u16 BCSP_CRC_INIT(bcsp_txmsg_crc);
++#endif
++
++ switch (pkt_type) {
++ case HCI_ACLDATA_PKT:
++ chan = 6; /* BCSP ACL channel */
++ rel = 1; /* reliable channel */
++ break;
++ case HCI_COMMAND_PKT:
++ chan = 5; /* BCSP cmd/evt channel */
++ rel = 1; /* reliable channel */
++ break;
++ case HCI_SCODATA_PKT:
++ chan = 7; /* BCSP SCO channel */
++ rel = 0; /* unreliable channel */
++ break;
++ case BCSP_LE_PKT:
++ chan = 1; /* BCSP LE channel */
++ rel = 0; /* unreliable channel */
++ break;
++ case BCSP_ACK_PKT:
++ chan = 0; /* BCSP internal channel */
++ rel = 0; /* unreliable channel */
++ break;
++ default:
++ BT_ERR("Unknown packet type");
++ return NULL;
++ }
++
++ /* Max len of packet: (original len +4(bcsp hdr) +2(crc))*2
++ (because bytes 0xc0 and 0xdb are escaped, worst case is
++ when the packet is all made of 0xc0 and 0xdb :) )
++ + 2 (0xc0 delimiters at start and end). */
++
++ nskb = alloc_skb((len + 6) * 2 + 2, GFP_ATOMIC);
++ if (!nskb)
++ return NULL;
++
++ nskb->pkt_type = pkt_type;
++
++ bcsp_slip_msgdelim(nskb);
++
++ hdr[0] = bcsp->rxseq_txack << 3;
++ bcsp->txack_req = 0;
++ BT_DBG("We request packet no %u to card", bcsp->rxseq_txack);
++
++ if (rel) {
++ hdr[0] |= 0x80 + bcsp->msgq_txseq;
++ BT_DBG("Sending packet with seqno %u", bcsp->msgq_txseq);
++ bcsp->msgq_txseq = ++(bcsp->msgq_txseq) & 0x07;
++ }
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ hdr[0] |= 0x40;
++#endif
++
++ hdr[1] = (len << 4) & 0xFF;
++ hdr[1] |= chan;
++ hdr[2] = len >> 4;
++ hdr[3] = ~(hdr[0] + hdr[1] + hdr[2]);
++
++ /* Put BCSP header */
++ for (i = 0; i < 4; i++) {
++ bcsp_slip_one_byte(nskb, hdr[i]);
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ bcsp_crc_update(&bcsp_txmsg_crc, hdr[i]);
++#endif
++ }
++
++ /* Put payload */
++ for (i = 0; i < len; i++) {
++ bcsp_slip_one_byte(nskb, data[i]);
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ bcsp_crc_update(&bcsp_txmsg_crc, data[i]);
++#endif
++ }
++
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ /* Put CRC */
++ bcsp_txmsg_crc = bcsp_crc_reverse(bcsp_txmsg_crc);
++ bcsp_slip_one_byte(nskb, (u8) ((bcsp_txmsg_crc >> 8) & 0x00ff));
++ bcsp_slip_one_byte(nskb, (u8) (bcsp_txmsg_crc & 0x00ff));
++#endif
++
++ bcsp_slip_msgdelim(nskb);
++ return nskb;
++}
++
++/* This is a rewrite of pkt_avail in ABCSP */
++static struct sk_buff *bcsp_dequeue(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp = (struct bcsp_struct *) hu->priv;
++ unsigned long flags;
++ struct sk_buff *skb;
++
++ /* First of all, check for unreliable messages in the queue,
++ since they have priority */
++
++ if ((skb = skb_dequeue(&bcsp->unrel)) != NULL) {
++ struct sk_buff *nskb = bcsp_prepare_pkt(bcsp, skb->data, skb->len, skb->pkt_type);
++ if (nskb) {
++ kfree_skb(skb);
++ return nskb;
++ } else {
++ skb_queue_head(&bcsp->unrel, skb);
++ BT_ERR("Could not dequeue pkt because alloc_skb failed");
++ }
++ }
++
++ /* Now, try to send a reliable pkt. We can only send a
++ reliable packet if the number of packets sent but not yet ack'ed
++ is < than the winsize */
++
++ spin_lock_irqsave(&bcsp->unack.lock, flags);
++
++ if (bcsp->unack.qlen < BCSP_TXWINSIZE && (skb = skb_dequeue(&bcsp->rel)) != NULL) {
++ struct sk_buff *nskb = bcsp_prepare_pkt(bcsp, skb->data, skb->len, skb->pkt_type);
++ if (nskb) {
++ __skb_queue_tail(&bcsp->unack, skb);
++ mod_timer(&bcsp->tbcsp, jiffies + HZ / 4);
++ spin_unlock_irqrestore(&bcsp->unack.lock, flags);
++ return nskb;
++ } else {
++ skb_queue_head(&bcsp->rel, skb);
++ BT_ERR("Could not dequeue pkt because alloc_skb failed");
++ }
++ }
++
++ spin_unlock_irqrestore(&bcsp->unack.lock, flags);
++
++
++ /* We could not send a reliable packet, either because there are
++ none or because there are too many unack'ed pkts. Did we receive
++ any packets we have not acknowledged yet ? */
++
++ if (bcsp->txack_req) {
++ /* if so, craft an empty ACK pkt and send it on BCSP unreliable
++ channel 0 */
++ struct sk_buff *nskb = bcsp_prepare_pkt(bcsp, NULL, 0, BCSP_ACK_PKT);
++ return nskb;
++ }
++
++ /* We have nothing to send */
++ return NULL;
++}
++
++static int bcsp_flush(struct hci_uart *hu)
++{
++ BT_DBG("hu %p", hu);
++ return 0;
++}
++
++/* Remove ack'ed packets */
++static void bcsp_pkt_cull(struct bcsp_struct *bcsp)
++{
++ unsigned long flags;
++ struct sk_buff *skb;
++ int i, pkts_to_be_removed;
++ u8 seqno;
++
++ spin_lock_irqsave(&bcsp->unack.lock, flags);
++
++ pkts_to_be_removed = bcsp->unack.qlen;
++ seqno = bcsp->msgq_txseq;
++
++ while (pkts_to_be_removed) {
++ if (bcsp->rxack == seqno)
++ break;
++ pkts_to_be_removed--;
++ seqno = (seqno - 1) & 0x07;
++ }
++
++ if (bcsp->rxack != seqno)
++ BT_ERR("Peer acked invalid packet");
++
++ BT_DBG("Removing %u pkts out of %u, up to seqno %u",
++ pkts_to_be_removed, bcsp->unack.qlen, (seqno - 1) & 0x07);
++
++ for (i = 0, skb = ((struct sk_buff *) &bcsp->unack)->next; i < pkts_to_be_removed
++ && skb != (struct sk_buff *) &bcsp->unack; i++) {
++ struct sk_buff *nskb;
++
++ nskb = skb->next;
++ __skb_unlink(skb, &bcsp->unack);
++ kfree_skb(skb);
++ skb = nskb;
++ }
++ if (bcsp->unack.qlen == 0)
++ del_timer(&bcsp->tbcsp);
++ spin_unlock_irqrestore(&bcsp->unack.lock, flags);
++
++ if (i != pkts_to_be_removed)
++ BT_ERR("Removed only %u out of %u pkts", i, pkts_to_be_removed);
++}
++
++/* Handle BCSP link-establishment packets. When we
++ detect a "sync" packet, symptom that the BT module has reset,
++ we do nothing :) (yet) */
++static void bcsp_handle_le_pkt(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++ u8 conf_pkt[4] = { 0xad, 0xef, 0xac, 0xed };
++ u8 conf_rsp_pkt[4] = { 0xde, 0xad, 0xd0, 0xd0 };
++ u8 sync_pkt[4] = { 0xda, 0xdc, 0xed, 0xed };
++
++ /* spot "conf" pkts and reply with a "conf rsp" pkt */
++ if (bcsp->rx_skb->data[1] >> 4 == 4 && bcsp->rx_skb->data[2] == 0 &&
++ !memcmp(&bcsp->rx_skb->data[4], conf_pkt, 4)) {
++ struct sk_buff *nskb = alloc_skb(4, GFP_ATOMIC);
++
++ BT_DBG("Found a LE conf pkt");
++ if (!nskb)
++ return;
++ memcpy(skb_put(nskb, 4), conf_rsp_pkt, 4);
++ nskb->pkt_type = BCSP_LE_PKT;
++
++ skb_queue_head(&bcsp->unrel, nskb);
++ hci_uart_tx_wakeup(hu);
++ }
++ /* Spot "sync" pkts. If we find one...disaster! */
++ else if (bcsp->rx_skb->data[1] >> 4 == 4 && bcsp->rx_skb->data[2] == 0 &&
++ !memcmp(&bcsp->rx_skb->data[4], sync_pkt, 4)) {
++ BT_ERR("Found a LE sync pkt, card has reset");
++ }
++}
++
++static inline void bcsp_unslip_one_byte(struct bcsp_struct *bcsp, unsigned char byte)
++{
++ const u8 c0 = 0xc0, db = 0xdb;
++
++ switch (bcsp->rx_esc_state) {
++ case BCSP_ESCSTATE_NOESC:
++ switch (byte) {
++ case 0xdb:
++ bcsp->rx_esc_state = BCSP_ESCSTATE_ESC;
++ break;
++ default:
++ memcpy(skb_put(bcsp->rx_skb, 1), &byte, 1);
++ if ((bcsp->rx_skb-> data[0] & 0x40) != 0 &&
++ bcsp->rx_state != BCSP_W4_CRC)
++ bcsp_crc_update(&bcsp->message_crc, byte);
++ bcsp->rx_count--;
++ }
++ break;
++
++ case BCSP_ESCSTATE_ESC:
++ switch (byte) {
++ case 0xdc:
++ memcpy(skb_put(bcsp->rx_skb, 1), &c0, 1);
++ if ((bcsp->rx_skb-> data[0] & 0x40) != 0 &&
++ bcsp->rx_state != BCSP_W4_CRC)
++ bcsp_crc_update(&bcsp-> message_crc, 0xc0);
++ bcsp->rx_esc_state = BCSP_ESCSTATE_NOESC;
++ bcsp->rx_count--;
++ break;
++
++ case 0xdd:
++ memcpy(skb_put(bcsp->rx_skb, 1), &db, 1);
++ if ((bcsp->rx_skb-> data[0] & 0x40) != 0 &&
++ bcsp->rx_state != BCSP_W4_CRC)
++ bcsp_crc_update(&bcsp-> message_crc, 0xdb);
++ bcsp->rx_esc_state = BCSP_ESCSTATE_NOESC;
++ bcsp->rx_count--;
++ break;
++
++ default:
++ BT_ERR ("Invalid byte %02x after esc byte", byte);
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_skb = NULL;
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ }
++ }
++}
++
++static inline void bcsp_complete_rx_pkt(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++ int pass_up;
++
++ if (bcsp->rx_skb->data[0] & 0x80) { /* reliable pkt */
++ BT_DBG("Received seqno %u from card", bcsp->rxseq_txack);
++ bcsp->rxseq_txack++;
++ bcsp->rxseq_txack %= 0x8;
++ bcsp->txack_req = 1;
++
++ /* If needed, transmit an ack pkt */
++ hci_uart_tx_wakeup(hu);
++ }
++
++ bcsp->rxack = (bcsp->rx_skb->data[0] >> 3) & 0x07;
++ BT_DBG("Request for pkt %u from card", bcsp->rxack);
++
++ bcsp_pkt_cull(bcsp);
++ if ((bcsp->rx_skb->data[1] & 0x0f) == 6 &&
++ bcsp->rx_skb->data[0] & 0x80) {
++ bcsp->rx_skb->pkt_type = HCI_ACLDATA_PKT;
++ pass_up = 1;
++ } else if ((bcsp->rx_skb->data[1] & 0x0f) == 5 &&
++ bcsp->rx_skb->data[0] & 0x80) {
++ bcsp->rx_skb->pkt_type = HCI_EVENT_PKT;
++ pass_up = 1;
++ } else if ((bcsp->rx_skb->data[1] & 0x0f) == 7) {
++ bcsp->rx_skb->pkt_type = HCI_SCODATA_PKT;
++ pass_up = 1;
++ } else if ((bcsp->rx_skb->data[1] & 0x0f) == 1 &&
++ !(bcsp->rx_skb->data[0] & 0x80)) {
++ bcsp_handle_le_pkt(hu);
++ pass_up = 0;
++ } else
++ pass_up = 0;
++
++ if (!pass_up) {
++ if ((bcsp->rx_skb->data[1] & 0x0f) != 0 &&
++ (bcsp->rx_skb->data[1] & 0x0f) != 1) {
++ BT_ERR ("Packet for unknown channel (%u %s)",
++ bcsp->rx_skb->data[1] & 0x0f,
++ bcsp->rx_skb->data[0] & 0x80 ?
++ "reliable" : "unreliable");
++ }
++ kfree_skb(bcsp->rx_skb);
++ } else {
++ /* Pull out BCSP hdr */
++ skb_pull(bcsp->rx_skb, 4);
++
++ hci_recv_frame(bcsp->rx_skb);
++ }
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_skb = NULL;
++}
++
++/* Recv data */
++static int bcsp_recv(struct hci_uart *hu, void *data, int count)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++ register unsigned char *ptr;
++
++ BT_DBG("hu %p count %d rx_state %ld rx_count %ld",
++ hu, count, bcsp->rx_state, bcsp->rx_count);
++
++ ptr = data;
++ while (count) {
++ if (bcsp->rx_count) {
++ if (*ptr == 0xc0) {
++ BT_ERR("Short BCSP packet");
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_state = BCSP_W4_PKT_START;
++ bcsp->rx_count = 0;
++ } else
++ bcsp_unslip_one_byte(bcsp, *ptr);
++
++ ptr++; count--;
++ continue;
++ }
++
++ switch (bcsp->rx_state) {
++ case BCSP_W4_BCSP_HDR:
++ if ((0xff & (u8) ~ (bcsp->rx_skb->data[0] + bcsp->rx_skb->data[1] +
++ bcsp->rx_skb->data[2])) != bcsp->rx_skb->data[3]) {
++ BT_ERR("Error in BCSP hdr checksum");
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ continue;
++ }
++ if (bcsp->rx_skb->data[0] & 0x80 /* reliable pkt */
++ && (bcsp->rx_skb->data[0] & 0x07) != bcsp->rxseq_txack) {
++ BT_ERR ("Out-of-order packet arrived, got %u expected %u",
++ bcsp->rx_skb->data[0] & 0x07, bcsp->rxseq_txack);
++
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ continue;
++ }
++ bcsp->rx_state = BCSP_W4_DATA;
++ bcsp->rx_count = (bcsp->rx_skb->data[1] >> 4) +
++ (bcsp->rx_skb->data[2] << 4); /* May be 0 */
++ continue;
++
++ case BCSP_W4_DATA:
++ if (bcsp->rx_skb->data[0] & 0x40) { /* pkt with crc */
++ bcsp->rx_state = BCSP_W4_CRC;
++ bcsp->rx_count = 2;
++ } else
++ bcsp_complete_rx_pkt(hu);
++ continue;
++
++ case BCSP_W4_CRC:
++ if (bcsp_crc_reverse(bcsp->message_crc) !=
++ (bcsp->rx_skb->data[bcsp->rx_skb->len - 2] << 8) +
++ bcsp->rx_skb->data[bcsp->rx_skb->len - 1]) {
++
++ BT_ERR ("Checksum failed: computed %04x received %04x",
++ bcsp_crc_reverse(bcsp->message_crc),
++ (bcsp->rx_skb-> data[bcsp->rx_skb->len - 2] << 8) +
++ bcsp->rx_skb->data[bcsp->rx_skb->len - 1]);
++
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ continue;
++ }
++ skb_trim(bcsp->rx_skb, bcsp->rx_skb->len - 2);
++ bcsp_complete_rx_pkt(hu);
++ continue;
++
++ case BCSP_W4_PKT_DELIMITER:
++ switch (*ptr) {
++ case 0xc0:
++ bcsp->rx_state = BCSP_W4_PKT_START;
++ break;
++ default:
++ /*BT_ERR("Ignoring byte %02x", *ptr);*/
++ break;
++ }
++ ptr++; count--;
++ break;
++
++ case BCSP_W4_PKT_START:
++ switch (*ptr) {
++ case 0xc0:
++ ptr++; count--;
++ break;
++
++ default:
++ bcsp->rx_state = BCSP_W4_BCSP_HDR;
++ bcsp->rx_count = 4;
++ bcsp->rx_esc_state = BCSP_ESCSTATE_NOESC;
++ BCSP_CRC_INIT(bcsp->message_crc);
++
++ /* Do not increment ptr or decrement count
++ * Allocate packet. Max len of a BCSP pkt=
++ * 0xFFF (payload) +4 (header) +2 (crc) */
++
++ bcsp->rx_skb = bluez_skb_alloc(0x1005, GFP_ATOMIC);
++ if (!bcsp->rx_skb) {
++ BT_ERR("Can't allocate mem for new packet");
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ return 0;
++ }
++ bcsp->rx_skb->dev = (void *) &hu->hdev;
++ break;
++ }
++ break;
++ }
++ }
++ return count;
++}
++
++ /* Arrange to retransmit all messages in the relq. */
++static void bcsp_timed_event(unsigned long arg)
++{
++ struct hci_uart *hu = (struct hci_uart *) arg;
++ struct bcsp_struct *bcsp = (struct bcsp_struct *) hu->priv;
++ struct sk_buff *skb;
++ unsigned long flags;
++
++ BT_DBG("hu %p retransmitting %u pkts", hu, bcsp->unack.qlen);
++
++ spin_lock_irqsave(&bcsp->unack.lock, flags);
++
++ while ((skb = __skb_dequeue_tail(&bcsp->unack)) != NULL) {
++ bcsp->msgq_txseq = (bcsp->msgq_txseq - 1) & 0x07;
++ skb_queue_head(&bcsp->rel, skb);
++ }
++
++ spin_unlock_irqrestore(&bcsp->unack.lock, flags);
++
++ hci_uart_tx_wakeup(hu);
++}
++
++static int bcsp_open(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp;
++
++ BT_DBG("hu %p", hu);
++
++ bcsp = kmalloc(sizeof(*bcsp), GFP_ATOMIC);
++ if (!bcsp)
++ return -ENOMEM;
++ memset(bcsp, 0, sizeof(*bcsp));
++
++ hu->priv = bcsp;
++ skb_queue_head_init(&bcsp->unack);
++ skb_queue_head_init(&bcsp->rel);
++ skb_queue_head_init(&bcsp->unrel);
++
++ init_timer(&bcsp->tbcsp);
++ bcsp->tbcsp.function = bcsp_timed_event;
++ bcsp->tbcsp.data = (u_long) hu;
++
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++
++ return 0;
++}
++
++static int bcsp_close(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++ hu->priv = NULL;
++
++ BT_DBG("hu %p", hu);
++
++ skb_queue_purge(&bcsp->unack);
++ skb_queue_purge(&bcsp->rel);
++ skb_queue_purge(&bcsp->unrel);
++ del_timer(&bcsp->tbcsp);
++
++ kfree(bcsp);
++ return 0;
++}
++
++static struct hci_uart_proto bcsp = {
++ id: HCI_UART_BCSP,
++ open: bcsp_open,
++ close: bcsp_close,
++ enqueue: bcsp_enqueue,
++ dequeue: bcsp_dequeue,
++ recv: bcsp_recv,
++ flush: bcsp_flush
++};
++
++int bcsp_init(void)
++{
++ return hci_uart_register_proto(&bcsp);
++}
++
++int bcsp_deinit(void)
++{
++ return hci_uart_unregister_proto(&bcsp);
++}
+diff -urN linux-2.4.18/drivers/bluetooth/hci_bcsp.h linux-2.4.18-mh15/drivers/bluetooth/hci_bcsp.h
+--- linux-2.4.18/drivers/bluetooth/hci_bcsp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_bcsp.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,70 @@
++/*
++ BlueCore Serial Protocol (BCSP) for Linux Bluetooth stack (BlueZ).
++ Copyright 2002 by Fabrizio Gennari <fabrizio.gennari@philips.com>
++
++ Based on
++ hci_h4.c by Maxim Krasnyansky <maxk@qualcomm.com>
++ ABCSP by Carl Orsborn <cjo@csr.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_bcsp.h,v 1.2 2002/09/26 05:05:14 maxk Exp $
++ */
++
++#ifndef __HCI_BCSP_H__
++#define __HCI_BCSP_H__
++
++#define BCSP_TXWINSIZE 4
++
++#define BCSP_ACK_PKT 0x05
++#define BCSP_LE_PKT 0x06
++
++struct bcsp_struct {
++ struct sk_buff_head unack; /* Unack'ed packets queue */
++ struct sk_buff_head rel; /* Reliable packets queue */
++ struct sk_buff_head unrel; /* Unreliable packets queue */
++
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++ u8 rxseq_txack; /* rxseq == txack. */
++ u8 rxack; /* Last packet sent by us that the peer ack'ed */
++ struct timer_list tbcsp;
++
++ enum {
++ BCSP_W4_PKT_DELIMITER,
++ BCSP_W4_PKT_START,
++ BCSP_W4_BCSP_HDR,
++ BCSP_W4_DATA,
++ BCSP_W4_CRC
++ } rx_state;
++
++ enum {
++ BCSP_ESCSTATE_NOESC,
++ BCSP_ESCSTATE_ESC
++ } rx_esc_state;
++
++ u16 message_crc;
++ u8 txack_req; /* Do we need to send ack's to the peer? */
++
++ /* Reliable packet sequence number - used to assign seq to each rel pkt. */
++ u8 msgq_txseq;
++};
++
++#endif /* __HCI_BCSP_H__ */
+diff -urN linux-2.4.18/drivers/bluetooth/hci_h4.c linux-2.4.18-mh15/drivers/bluetooth/hci_h4.c
+--- linux-2.4.18/drivers/bluetooth/hci_h4.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_h4.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,277 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * BlueZ HCI UART(H4) protocol.
++ *
++ * $Id: hci_h4.c,v 1.3 2002/09/09 01:17:32 maxk Exp $
++ */
++#define VERSION "1.2"
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/version.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/fcntl.h>
++#include <linux/interrupt.h>
++#include <linux/ptrace.h>
++#include <linux/poll.h>
++
++#include <linux/slab.h>
++#include <linux/tty.h>
++#include <linux/errno.h>
++#include <linux/string.h>
++#include <linux/signal.h>
++#include <linux/ioctl.h>
++#include <linux/skbuff.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include "hci_uart.h"
++#include "hci_h4.h"
++
++#ifndef HCI_UART_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#undef BT_DMP
++#define BT_DMP( A... )
++#endif
++
++/* Initialize protocol */
++static int h4_open(struct hci_uart *hu)
++{
++ struct h4_struct *h4;
++
++ BT_DBG("hu %p", hu);
++
++ h4 = kmalloc(sizeof(*h4), GFP_ATOMIC);
++ if (!h4)
++ return -ENOMEM;
++ memset(h4, 0, sizeof(*h4));
++
++ skb_queue_head_init(&h4->txq);
++
++ hu->priv = h4;
++ return 0;
++}
++
++/* Flush protocol data */
++static int h4_flush(struct hci_uart *hu)
++{
++ struct h4_struct *h4 = hu->priv;
++
++ BT_DBG("hu %p", hu);
++ skb_queue_purge(&h4->txq);
++ return 0;
++}
++
++/* Close protocol */
++static int h4_close(struct hci_uart *hu)
++{
++ struct h4_struct *h4 = hu->priv;
++ hu->priv = NULL;
++
++ BT_DBG("hu %p", hu);
++
++ skb_queue_purge(&h4->txq);
++ if (h4->rx_skb)
++ kfree_skb(h4->rx_skb);
++
++ hu->priv = NULL;
++ kfree(h4);
++ return 0;
++}
++
++/* Enqueue frame for transmittion (padding, crc, etc) */
++static int h4_enqueue(struct hci_uart *hu, struct sk_buff *skb)
++{
++ struct h4_struct *h4 = hu->priv;
++
++ BT_DBG("hu %p skb %p", hu, skb);
++
++ /* Prepend skb with frame type */
++ memcpy(skb_push(skb, 1), &skb->pkt_type, 1);
++ skb_queue_tail(&h4->txq, skb);
++ return 0;
++}
++
++static inline int h4_check_data_len(struct h4_struct *h4, int len)
++{
++ register int room = skb_tailroom(h4->rx_skb);
++
++ BT_DBG("len %d room %d", len, room);
++ if (!len) {
++ BT_DMP(h4->rx_skb->data, h4->rx_skb->len);
++ hci_recv_frame(h4->rx_skb);
++ } else if (len > room) {
++ BT_ERR("Data length is too large");
++ kfree_skb(h4->rx_skb);
++ } else {
++ h4->rx_state = H4_W4_DATA;
++ h4->rx_count = len;
++ return len;
++ }
++
++ h4->rx_state = H4_W4_PACKET_TYPE;
++ h4->rx_skb = NULL;
++ h4->rx_count = 0;
++ return 0;
++}
++
++/* Recv data */
++static int h4_recv(struct hci_uart *hu, void *data, int count)
++{
++ struct h4_struct *h4 = hu->priv;
++ register char *ptr;
++ hci_event_hdr *eh;
++ hci_acl_hdr *ah;
++ hci_sco_hdr *sh;
++ register int len, type, dlen;
++
++ BT_DBG("hu %p count %d rx_state %ld rx_count %ld",
++ hu, count, h4->rx_state, h4->rx_count);
++
++ ptr = data;
++ while (count) {
++ if (h4->rx_count) {
++ len = MIN(h4->rx_count, count);
++ memcpy(skb_put(h4->rx_skb, len), ptr, len);
++ h4->rx_count -= len; count -= len; ptr += len;
++
++ if (h4->rx_count)
++ continue;
++
++ switch (h4->rx_state) {
++ case H4_W4_DATA:
++ BT_DBG("Complete data");
++
++ BT_DMP(h4->rx_skb->data, h4->rx_skb->len);
++
++ hci_recv_frame(h4->rx_skb);
++
++ h4->rx_state = H4_W4_PACKET_TYPE;
++ h4->rx_skb = NULL;
++ continue;
++
++ case H4_W4_EVENT_HDR:
++ eh = (hci_event_hdr *) h4->rx_skb->data;
++
++ BT_DBG("Event header: evt 0x%2.2x plen %d", eh->evt, eh->plen);
++
++ h4_check_data_len(h4, eh->plen);
++ continue;
++
++ case H4_W4_ACL_HDR:
++ ah = (hci_acl_hdr *) h4->rx_skb->data;
++ dlen = __le16_to_cpu(ah->dlen);
++
++ BT_DBG("ACL header: dlen %d", dlen);
++
++ h4_check_data_len(h4, dlen);
++ continue;
++
++ case H4_W4_SCO_HDR:
++ sh = (hci_sco_hdr *) h4->rx_skb->data;
++
++ BT_DBG("SCO header: dlen %d", sh->dlen);
++
++ h4_check_data_len(h4, sh->dlen);
++ continue;
++ }
++ }
++
++ /* H4_W4_PACKET_TYPE */
++ switch (*ptr) {
++ case HCI_EVENT_PKT:
++ BT_DBG("Event packet");
++ h4->rx_state = H4_W4_EVENT_HDR;
++ h4->rx_count = HCI_EVENT_HDR_SIZE;
++ type = HCI_EVENT_PKT;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ BT_DBG("ACL packet");
++ h4->rx_state = H4_W4_ACL_HDR;
++ h4->rx_count = HCI_ACL_HDR_SIZE;
++ type = HCI_ACLDATA_PKT;
++ break;
++
++ case HCI_SCODATA_PKT:
++ BT_DBG("SCO packet");
++ h4->rx_state = H4_W4_SCO_HDR;
++ h4->rx_count = HCI_SCO_HDR_SIZE;
++ type = HCI_SCODATA_PKT;
++ break;
++
++ default:
++ BT_ERR("Unknown HCI packet type %2.2x", (__u8)*ptr);
++ hu->hdev.stat.err_rx++;
++ ptr++; count--;
++ continue;
++ };
++ ptr++; count--;
++
++ /* Allocate packet */
++ h4->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC);
++ if (!h4->rx_skb) {
++ BT_ERR("Can't allocate mem for new packet");
++ h4->rx_state = H4_W4_PACKET_TYPE;
++ h4->rx_count = 0;
++ return 0;
++ }
++ h4->rx_skb->dev = (void *) &hu->hdev;
++ h4->rx_skb->pkt_type = type;
++ }
++ return count;
++}
++
++static struct sk_buff *h4_dequeue(struct hci_uart *hu)
++{
++ struct h4_struct *h4 = hu->priv;
++ return skb_dequeue(&h4->txq);
++}
++
++static struct hci_uart_proto h4p = {
++ id: HCI_UART_H4,
++ open: h4_open,
++ close: h4_close,
++ recv: h4_recv,
++ enqueue: h4_enqueue,
++ dequeue: h4_dequeue,
++ flush: h4_flush,
++};
++
++int h4_init(void)
++{
++ return hci_uart_register_proto(&h4p);
++}
++
++int h4_deinit(void)
++{
++ return hci_uart_unregister_proto(&h4p);
++}
+diff -urN linux-2.4.18/drivers/bluetooth/hci_h4.h linux-2.4.18-mh15/drivers/bluetooth/hci_h4.h
+--- linux-2.4.18/drivers/bluetooth/hci_h4.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_h4.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,44 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_h4.h,v 1.2 2002/09/09 01:17:32 maxk Exp $
++ */
++
++#ifdef __KERNEL__
++struct h4_struct {
++ unsigned long rx_state;
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++ struct sk_buff_head txq;
++};
++
++/* H4 receiver States */
++#define H4_W4_PACKET_TYPE 0
++#define H4_W4_EVENT_HDR 1
++#define H4_W4_ACL_HDR 2
++#define H4_W4_SCO_HDR 3
++#define H4_W4_DATA 4
++
++#endif /* __KERNEL__ */
+diff -urN linux-2.4.18/drivers/bluetooth/hci_ldisc.c linux-2.4.18-mh15/drivers/bluetooth/hci_ldisc.c
+--- linux-2.4.18/drivers/bluetooth/hci_ldisc.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_ldisc.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,579 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * BlueZ HCI UART driver.
++ *
++ * $Id: hci_ldisc.c,v 1.5 2002/10/02 18:37:20 maxk Exp $
++ */
++#define VERSION "2.1"
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/version.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/fcntl.h>
++#include <linux/interrupt.h>
++#include <linux/ptrace.h>
++#include <linux/poll.h>
++
++#include <linux/slab.h>
++#include <linux/tty.h>
++#include <linux/errno.h>
++#include <linux/string.h>
++#include <linux/signal.h>
++#include <linux/ioctl.h>
++#include <linux/skbuff.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include "hci_uart.h"
++
++#ifndef HCI_UART_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#undef BT_DMP
++#define BT_DMP( A... )
++#endif
++
++static struct hci_uart_proto *hup[HCI_UART_MAX_PROTO];
++
++int hci_uart_register_proto(struct hci_uart_proto *p)
++{
++ if (p->id >= HCI_UART_MAX_PROTO)
++ return -EINVAL;
++
++ if (hup[p->id])
++ return -EEXIST;
++
++ hup[p->id] = p;
++ return 0;
++}
++
++int hci_uart_unregister_proto(struct hci_uart_proto *p)
++{
++ if (p->id >= HCI_UART_MAX_PROTO)
++ return -EINVAL;
++
++ if (!hup[p->id])
++ return -EINVAL;
++
++ hup[p->id] = NULL;
++ return 0;
++}
++
++static struct hci_uart_proto *hci_uart_get_proto(unsigned int id)
++{
++ if (id >= HCI_UART_MAX_PROTO)
++ return NULL;
++ return hup[id];
++}
++
++static inline void hci_uart_tx_complete(struct hci_uart *hu, int pkt_type)
++{
++ struct hci_dev *hdev = &hu->hdev;
++
++ /* Update HCI stat counters */
++ switch (pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++
++ case HCI_SCODATA_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ }
++}
++
++static inline struct sk_buff *hci_uart_dequeue(struct hci_uart *hu)
++{
++ struct sk_buff *skb = hu->tx_skb;
++ if (!skb)
++ skb = hu->proto->dequeue(hu);
++ else
++ hu->tx_skb = NULL;
++ return skb;
++}
++
++int hci_uart_tx_wakeup(struct hci_uart *hu)
++{
++ struct tty_struct *tty = hu->tty;
++ struct hci_dev *hdev = &hu->hdev;
++ struct sk_buff *skb;
++
++ if (test_and_set_bit(HCI_UART_SENDING, &hu->tx_state)) {
++ set_bit(HCI_UART_TX_WAKEUP, &hu->tx_state);
++ return 0;
++ }
++
++ BT_DBG("");
++
++restart:
++ clear_bit(HCI_UART_TX_WAKEUP, &hu->tx_state);
++
++ while ((skb = hci_uart_dequeue(hu))) {
++ int len;
++
++ set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
++ len = tty->driver.write(tty, 0, skb->data, skb->len);
++ hdev->stat.byte_tx += len;
++
++ skb_pull(skb, len);
++ if (skb->len) {
++ hu->tx_skb = skb;
++ break;
++ }
++
++ hci_uart_tx_complete(hu, skb->pkt_type);
++ kfree_skb(skb);
++ }
++
++ if (test_bit(HCI_UART_TX_WAKEUP, &hu->tx_state))
++ goto restart;
++
++ clear_bit(HCI_UART_SENDING, &hu->tx_state);
++ return 0;
++}
++
++/* ------- Interface to HCI layer ------ */
++/* Initialize device */
++static int hci_uart_open(struct hci_dev *hdev)
++{
++ BT_DBG("%s %p", hdev->name, hdev);
++
++ /* Nothing to do for UART driver */
++
++ set_bit(HCI_RUNNING, &hdev->flags);
++ return 0;
++}
++
++/* Reset device */
++static int hci_uart_flush(struct hci_dev *hdev)
++{
++ struct hci_uart *hu = (struct hci_uart *) hdev->driver_data;
++ struct tty_struct *tty = hu->tty;
++
++ BT_DBG("hdev %p tty %p", hdev, tty);
++
++ if (hu->tx_skb) {
++ kfree_skb(hu->tx_skb); hu->tx_skb = NULL;
++ }
++
++ /* Flush any pending characters in the driver and discipline. */
++ if (tty->ldisc.flush_buffer)
++ tty->ldisc.flush_buffer(tty);
++
++ if (tty->driver.flush_buffer)
++ tty->driver.flush_buffer(tty);
++
++ if (test_bit(HCI_UART_PROTO_SET, &hu->flags))
++ hu->proto->flush(hu);
++
++ return 0;
++}
++
++/* Close device */
++static int hci_uart_close(struct hci_dev *hdev)
++{
++ BT_DBG("hdev %p", hdev);
++
++ if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
++
++ hci_uart_flush(hdev);
++ return 0;
++}
++
++/* Send frames from HCI layer */
++static int hci_uart_send_frame(struct sk_buff *skb)
++{
++ struct hci_dev* hdev = (struct hci_dev *) skb->dev;
++ struct tty_struct *tty;
++ struct hci_uart *hu;
++
++ if (!hdev) {
++ BT_ERR("Frame for uknown device (hdev=NULL)");
++ return -ENODEV;
++ }
++
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
++ return -EBUSY;
++
++ hu = (struct hci_uart *) hdev->driver_data;
++ tty = hu->tty;
++
++ BT_DBG("%s: type %d len %d", hdev->name, skb->pkt_type, skb->len);
++
++ hu->proto->enqueue(hu, skb);
++
++ hci_uart_tx_wakeup(hu);
++ return 0;
++}
++
++static void hci_uart_destruct(struct hci_dev *hdev)
++{
++ struct hci_uart *hu;
++
++ if (!hdev) return;
++
++ BT_DBG("%s", hdev->name);
++
++ hu = (struct hci_uart *) hdev->driver_data;
++ kfree(hu);
++
++ MOD_DEC_USE_COUNT;
++}
++
++/* ------ LDISC part ------ */
++/* hci_uart_tty_open
++ *
++ * Called when line discipline changed to HCI_UART.
++ *
++ * Arguments:
++ * tty pointer to tty info structure
++ * Return Value:
++ * 0 if success, otherwise error code
++ */
++static int hci_uart_tty_open(struct tty_struct *tty)
++{
++ struct hci_uart *hu = (void *) tty->disc_data;
++
++ BT_DBG("tty %p", tty);
++
++ if (hu)
++ return -EEXIST;
++
++ if (!(hu = kmalloc(sizeof(struct hci_uart), GFP_KERNEL))) {
++ BT_ERR("Can't allocate controll structure");
++ return -ENFILE;
++ }
++ memset(hu, 0, sizeof(struct hci_uart));
++
++ tty->disc_data = hu;
++ hu->tty = tty;
++
++ spin_lock_init(&hu->rx_lock);
++
++ /* Flush any pending characters in the driver and line discipline */
++ if (tty->ldisc.flush_buffer)
++ tty->ldisc.flush_buffer(tty);
++
++ if (tty->driver.flush_buffer)
++ tty->driver.flush_buffer(tty);
++
++ MOD_INC_USE_COUNT;
++ return 0;
++}
++
++/* hci_uart_tty_close()
++ *
++ * Called when the line discipline is changed to something
++ * else, the tty is closed, or the tty detects a hangup.
++ */
++static void hci_uart_tty_close(struct tty_struct *tty)
++{
++ struct hci_uart *hu = (void *)tty->disc_data;
++
++ BT_DBG("tty %p", tty);
++
++ /* Detach from the tty */
++ tty->disc_data = NULL;
++
++ if (hu) {
++ struct hci_dev *hdev = &hu->hdev;
++ hci_uart_close(hdev);
++
++ if (test_and_clear_bit(HCI_UART_PROTO_SET, &hu->flags)) {
++ hu->proto->close(hu);
++ hci_unregister_dev(hdev);
++ }
++
++ MOD_DEC_USE_COUNT;
++ }
++}
++
++/* hci_uart_tty_wakeup()
++ *
++ * Callback for transmit wakeup. Called when low level
++ * device driver can accept more send data.
++ *
++ * Arguments: tty pointer to associated tty instance data
++ * Return Value: None
++ */
++static void hci_uart_tty_wakeup(struct tty_struct *tty)
++{
++ struct hci_uart *hu = (void *)tty->disc_data;
++
++ BT_DBG("");
++
++ if (!hu)
++ return;
++
++ clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
++
++ if (tty != hu->tty)
++ return;
++
++ if (test_bit(HCI_UART_PROTO_SET, &hu->flags))
++ hci_uart_tx_wakeup(hu);
++}
++
++/* hci_uart_tty_room()
++ *
++ * Callback function from tty driver. Return the amount of
++ * space left in the receiver's buffer to decide if remote
++ * transmitter is to be throttled.
++ *
++ * Arguments: tty pointer to associated tty instance data
++ * Return Value: number of bytes left in receive buffer
++ */
++static int hci_uart_tty_room (struct tty_struct *tty)
++{
++ return 65536;
++}
++
++/* hci_uart_tty_receive()
++ *
++ * Called by tty low level driver when receive data is
++ * available.
++ *
++ * Arguments: tty pointer to tty isntance data
++ * data pointer to received data
++ * flags pointer to flags for data
++ * count count of received data in bytes
++ *
++ * Return Value: None
++ */
++static void hci_uart_tty_receive(struct tty_struct *tty, const __u8 *data, char *flags, int count)
++{
++ struct hci_uart *hu = (void *)tty->disc_data;
++
++ if (!hu || tty != hu->tty)
++ return;
++
++ if (!test_bit(HCI_UART_PROTO_SET, &hu->flags))
++ return;
++
++ spin_lock(&hu->rx_lock);
++ hu->proto->recv(hu, (void *) data, count);
++ hu->hdev.stat.byte_rx += count;
++ spin_unlock(&hu->rx_lock);
++
++ if (test_and_clear_bit(TTY_THROTTLED,&tty->flags) && tty->driver.unthrottle)
++ tty->driver.unthrottle(tty);
++}
++
++static int hci_uart_register_dev(struct hci_uart *hu)
++{
++ struct hci_dev *hdev;
++
++ BT_DBG("");
++
++ /* Initialize and register HCI device */
++ hdev = &hu->hdev;
++
++ hdev->type = HCI_UART;
++ hdev->driver_data = hu;
++
++ hdev->open = hci_uart_open;
++ hdev->close = hci_uart_close;
++ hdev->flush = hci_uart_flush;
++ hdev->send = hci_uart_send_frame;
++ hdev->destruct = hci_uart_destruct;
++
++ if (hci_register_dev(hdev) < 0) {
++ BT_ERR("Can't register HCI device %s", hdev->name);
++ return -ENODEV;
++ }
++ MOD_INC_USE_COUNT;
++ return 0;
++}
++
++static int hci_uart_set_proto(struct hci_uart *hu, int id)
++{
++ struct hci_uart_proto *p;
++ int err;
++
++ p = hci_uart_get_proto(id);
++ if (!p)
++ return -EPROTONOSUPPORT;
++
++ err = p->open(hu);
++ if (err)
++ return err;
++
++ hu->proto = p;
++
++ err = hci_uart_register_dev(hu);
++ if (err) {
++ p->close(hu);
++ return err;
++ }
++ return 0;
++}
++
++/* hci_uart_tty_ioctl()
++ *
++ * Process IOCTL system call for the tty device.
++ *
++ * Arguments:
++ *
++ * tty pointer to tty instance data
++ * file pointer to open file object for device
++ * cmd IOCTL command code
++ * arg argument for IOCTL call (cmd dependent)
++ *
++ * Return Value: Command dependent
++ */
++static int hci_uart_tty_ioctl(struct tty_struct *tty, struct file * file,
++ unsigned int cmd, unsigned long arg)
++{
++ struct hci_uart *hu = (void *)tty->disc_data;
++ int err = 0;
++
++ BT_DBG("");
++
++ /* Verify the status of the device */
++ if (!hu)
++ return -EBADF;
++
++ switch (cmd) {
++ case HCIUARTSETPROTO:
++ if (!test_and_set_bit(HCI_UART_PROTO_SET, &hu->flags)) {
++ err = hci_uart_set_proto(hu, arg);
++ if (err) {
++ clear_bit(HCI_UART_PROTO_SET, &hu->flags);
++ return err;
++ }
++ tty->low_latency = 1;
++ } else
++ return -EBUSY;
++
++ case HCIUARTGETPROTO:
++ if (test_bit(HCI_UART_PROTO_SET, &hu->flags))
++ return hu->proto->id;
++ return -EUNATCH;
++
++ default:
++ err = n_tty_ioctl(tty, file, cmd, arg);
++ break;
++ };
++
++ return err;
++}
++
++/*
++ * We don't provide read/write/poll interface for user space.
++ */
++static ssize_t hci_uart_tty_read(struct tty_struct *tty, struct file *file, unsigned char *buf, size_t nr)
++{
++ return 0;
++}
++static ssize_t hci_uart_tty_write(struct tty_struct *tty, struct file *file, const unsigned char *data, size_t count)
++{
++ return 0;
++}
++static unsigned int hci_uart_tty_poll(struct tty_struct *tty, struct file *filp, poll_table *wait)
++{
++ return 0;
++}
++
++#ifdef CONFIG_BLUEZ_HCIUART_H4
++int h4_init(void);
++int h4_deinit(void);
++#endif
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP
++int bcsp_init(void);
++int bcsp_deinit(void);
++#endif
++
++int __init hci_uart_init(void)
++{
++ static struct tty_ldisc hci_uart_ldisc;
++ int err;
++
++ BT_INFO("BlueZ HCI UART driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
++ VERSION);
++ BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
++
++ /* Register the tty discipline */
++
++ memset(&hci_uart_ldisc, 0, sizeof (hci_uart_ldisc));
++ hci_uart_ldisc.magic = TTY_LDISC_MAGIC;
++ hci_uart_ldisc.name = "n_hci";
++ hci_uart_ldisc.open = hci_uart_tty_open;
++ hci_uart_ldisc.close = hci_uart_tty_close;
++ hci_uart_ldisc.read = hci_uart_tty_read;
++ hci_uart_ldisc.write = hci_uart_tty_write;
++ hci_uart_ldisc.ioctl = hci_uart_tty_ioctl;
++ hci_uart_ldisc.poll = hci_uart_tty_poll;
++ hci_uart_ldisc.receive_room= hci_uart_tty_room;
++ hci_uart_ldisc.receive_buf = hci_uart_tty_receive;
++ hci_uart_ldisc.write_wakeup= hci_uart_tty_wakeup;
++
++ if ((err = tty_register_ldisc(N_HCI, &hci_uart_ldisc))) {
++ BT_ERR("Can't register HCI line discipline (%d)", err);
++ return err;
++ }
++
++#ifdef CONFIG_BLUEZ_HCIUART_H4
++ h4_init();
++#endif
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP
++ bcsp_init();
++#endif
++
++ return 0;
++}
++
++void hci_uart_cleanup(void)
++{
++ int err;
++
++#ifdef CONFIG_BLUEZ_HCIUART_H4
++ h4_deinit();
++#endif
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP
++ bcsp_deinit();
++#endif
++
++ /* Release tty registration of line discipline */
++ if ((err = tty_register_ldisc(N_HCI, NULL)))
++ BT_ERR("Can't unregister HCI line discipline (%d)", err);
++}
++
++module_init(hci_uart_init);
++module_exit(hci_uart_cleanup);
++
++MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
++MODULE_DESCRIPTION("BlueZ HCI UART driver ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/drivers/bluetooth/hci_uart.c linux-2.4.18-mh15/drivers/bluetooth/hci_uart.c
+--- linux-2.4.18/drivers/bluetooth/hci_uart.c 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_uart.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,580 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * BlueZ HCI UART driver.
+- *
+- * $Id: hci_uart.c,v 1.5 2001/07/05 18:42:44 maxk Exp $
+- */
+-#define VERSION "1.0"
+-
+-#include <linux/config.h>
+-#include <linux/module.h>
+-
+-#include <linux/version.h>
+-#include <linux/config.h>
+-#include <linux/kernel.h>
+-#include <linux/init.h>
+-#include <linux/sched.h>
+-#include <linux/types.h>
+-#include <linux/fcntl.h>
+-#include <linux/interrupt.h>
+-#include <linux/ptrace.h>
+-#include <linux/poll.h>
+-
+-#include <linux/slab.h>
+-#include <linux/tty.h>
+-#include <linux/errno.h>
+-#include <linux/string.h>
+-#include <linux/signal.h>
+-#include <linux/ioctl.h>
+-#include <linux/skbuff.h>
+-
+-#include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+-#include <net/bluetooth/hci_core.h>
+-#include <net/bluetooth/hci_uart.h>
+-
+-#ifndef HCI_UART_DEBUG
+-#undef DBG
+-#define DBG( A... )
+-#undef DMP
+-#define DMP( A... )
+-#endif
+-
+-/* ------- Interface to HCI layer ------ */
+-/* Initialize device */
+-int n_hci_open(struct hci_dev *hdev)
+-{
+- DBG("%s %p", hdev->name, hdev);
+-
+- /* Nothing to do for UART driver */
+-
+- hdev->flags |= HCI_RUNNING;
+-
+- return 0;
+-}
+-
+-/* Reset device */
+-int n_hci_flush(struct hci_dev *hdev)
+-{
+- struct n_hci *n_hci = (struct n_hci *) hdev->driver_data;
+- struct tty_struct *tty = n_hci->tty;
+-
+- DBG("hdev %p tty %p", hdev, tty);
+-
+- /* Drop TX queue */
+- skb_queue_purge(&n_hci->txq);
+-
+- /* Flush any pending characters in the driver and discipline. */
+- if (tty->ldisc.flush_buffer)
+- tty->ldisc.flush_buffer(tty);
+-
+- if (tty->driver.flush_buffer)
+- tty->driver.flush_buffer(tty);
+-
+- return 0;
+-}
+-
+-/* Close device */
+-int n_hci_close(struct hci_dev *hdev)
+-{
+- DBG("hdev %p", hdev);
+-
+- hdev->flags &= ~HCI_RUNNING;
+-
+- n_hci_flush(hdev);
+-
+- return 0;
+-}
+-
+-int n_hci_tx_wakeup(struct n_hci *n_hci)
+-{
+- register struct tty_struct *tty = n_hci->tty;
+-
+- if (test_and_set_bit(TRANS_SENDING, &n_hci->tx_state)) {
+- set_bit(TRANS_WAKEUP, &n_hci->tx_state);
+- return 0;
+- }
+-
+- DBG("");
+- do {
+- register struct sk_buff *skb;
+- register int len;
+-
+- clear_bit(TRANS_WAKEUP, &n_hci->tx_state);
+-
+- if (!(skb = skb_dequeue(&n_hci->txq)))
+- break;
+-
+- DMP(skb->data, skb->len);
+-
+- /* Send frame to TTY driver */
+- tty->flags |= (1 << TTY_DO_WRITE_WAKEUP);
+- len = tty->driver.write(tty, 0, skb->data, skb->len);
+-
+- n_hci->hdev.stat.byte_tx += len;
+-
+- DBG("sent %d", len);
+-
+- if (len == skb->len) {
+- /* Full frame was sent */
+- kfree_skb(skb);
+- } else {
+- /* Subtract sent part and requeue */
+- skb_pull(skb, len);
+- skb_queue_head(&n_hci->txq, skb);
+- }
+- } while (test_bit(TRANS_WAKEUP, &n_hci->tx_state));
+- clear_bit(TRANS_SENDING, &n_hci->tx_state);
+-
+- return 0;
+-}
+-
+-/* Send frames from HCI layer */
+-int n_hci_send_frame(struct sk_buff *skb)
+-{
+- struct hci_dev* hdev = (struct hci_dev *) skb->dev;
+- struct tty_struct *tty;
+- struct n_hci *n_hci;
+-
+- if (!hdev) {
+- ERR("Frame for uknown device (hdev=NULL)");
+- return -ENODEV;
+- }
+-
+- if (!(hdev->flags & HCI_RUNNING))
+- return -EBUSY;
+-
+- n_hci = (struct n_hci *) hdev->driver_data;
+- tty = n_hci2tty(n_hci);
+-
+- DBG("%s: type %d len %d", hdev->name, skb->pkt_type, skb->len);
+-
+- switch (skb->pkt_type) {
+- case HCI_COMMAND_PKT:
+- hdev->stat.cmd_tx++;
+- break;
+-
+- case HCI_ACLDATA_PKT:
+- hdev->stat.acl_tx++;
+- break;
+-
+- case HCI_SCODATA_PKT:
+- hdev->stat.cmd_tx++;
+- break;
+- };
+-
+- /* Prepend skb with frame type and queue */
+- memcpy(skb_push(skb, 1), &skb->pkt_type, 1);
+- skb_queue_tail(&n_hci->txq, skb);
+-
+- n_hci_tx_wakeup(n_hci);
+-
+- return 0;
+-}
+-
+-/* ------ LDISC part ------ */
+-
+-/* n_hci_tty_open
+- *
+- * Called when line discipline changed to N_HCI.
+- *
+- * Arguments:
+- * tty pointer to tty info structure
+- * Return Value:
+- * 0 if success, otherwise error code
+- */
+-static int n_hci_tty_open(struct tty_struct *tty)
+-{
+- struct n_hci *n_hci = tty2n_hci(tty);
+- struct hci_dev *hdev;
+-
+- DBG("tty %p", tty);
+-
+- if (n_hci)
+- return -EEXIST;
+-
+- if (!(n_hci = kmalloc(sizeof(struct n_hci), GFP_KERNEL))) {
+- ERR("Can't allocate controll structure");
+- return -ENFILE;
+- }
+- memset(n_hci, 0, sizeof(struct n_hci));
+-
+- /* Initialize and register HCI device */
+- hdev = &n_hci->hdev;
+-
+- hdev->type = HCI_UART;
+- hdev->driver_data = n_hci;
+-
+- hdev->open = n_hci_open;
+- hdev->close = n_hci_close;
+- hdev->flush = n_hci_flush;
+- hdev->send = n_hci_send_frame;
+-
+- if (hci_register_dev(hdev) < 0) {
+- ERR("Can't register HCI device %s", hdev->name);
+- kfree(n_hci);
+- return -ENODEV;
+- }
+-
+- tty->disc_data = n_hci;
+- n_hci->tty = tty;
+-
+- spin_lock_init(&n_hci->rx_lock);
+- n_hci->rx_state = WAIT_PACKET_TYPE;
+-
+- skb_queue_head_init(&n_hci->txq);
+-
+- MOD_INC_USE_COUNT;
+-
+- /* Flush any pending characters in the driver and discipline. */
+- if (tty->ldisc.flush_buffer)
+- tty->ldisc.flush_buffer(tty);
+-
+- if (tty->driver.flush_buffer)
+- tty->driver.flush_buffer(tty);
+-
+- return 0;
+-}
+-
+-/* n_hci_tty_close()
+- *
+- * Called when the line discipline is changed to something
+- * else, the tty is closed, or the tty detects a hangup.
+- */
+-static void n_hci_tty_close(struct tty_struct *tty)
+-{
+- struct n_hci *n_hci = tty2n_hci(tty);
+- struct hci_dev *hdev = &n_hci->hdev;
+-
+- DBG("tty %p hdev %p", tty, hdev);
+-
+- if (n_hci != NULL) {
+- n_hci_close(hdev);
+-
+- if (hci_unregister_dev(hdev) < 0) {
+- ERR("Can't unregister HCI device %s",hdev->name);
+- }
+-
+- hdev->driver_data = NULL;
+- tty->disc_data = NULL;
+- kfree(n_hci);
+-
+- MOD_DEC_USE_COUNT;
+- }
+-}
+-
+-/* n_hci_tty_wakeup()
+- *
+- * Callback for transmit wakeup. Called when low level
+- * device driver can accept more send data.
+- *
+- * Arguments: tty pointer to associated tty instance data
+- * Return Value: None
+- */
+-static void n_hci_tty_wakeup( struct tty_struct *tty )
+-{
+- struct n_hci *n_hci = tty2n_hci(tty);
+-
+- DBG("");
+-
+- if (!n_hci)
+- return;
+-
+- tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP);
+-
+- if (tty != n_hci->tty)
+- return;
+-
+- n_hci_tx_wakeup(n_hci);
+-}
+-
+-/* n_hci_tty_room()
+- *
+- * Callback function from tty driver. Return the amount of
+- * space left in the receiver's buffer to decide if remote
+- * transmitter is to be throttled.
+- *
+- * Arguments: tty pointer to associated tty instance data
+- * Return Value: number of bytes left in receive buffer
+- */
+-static int n_hci_tty_room (struct tty_struct *tty)
+-{
+- return 65536;
+-}
+-
+-static inline int n_hci_check_data_len(struct n_hci *n_hci, int len)
+-{
+- register int room = skb_tailroom(n_hci->rx_skb);
+-
+- DBG("len %d room %d", len, room);
+- if (!len) {
+- DMP(n_hci->rx_skb->data, n_hci->rx_skb->len);
+- hci_recv_frame(n_hci->rx_skb);
+- } else if (len > room) {
+- ERR("Data length is to large");
+- kfree_skb(n_hci->rx_skb);
+- n_hci->hdev.stat.err_rx++;
+- } else {
+- n_hci->rx_state = WAIT_DATA;
+- n_hci->rx_count = len;
+- return len;
+- }
+-
+- n_hci->rx_state = WAIT_PACKET_TYPE;
+- n_hci->rx_skb = NULL;
+- n_hci->rx_count = 0;
+- return 0;
+-}
+-
+-static inline void n_hci_rx(struct n_hci *n_hci, const __u8 * data, char *flags, int count)
+-{
+- register const char *ptr;
+- hci_event_hdr *eh;
+- hci_acl_hdr *ah;
+- hci_sco_hdr *sh;
+- register int len, type, dlen;
+-
+- DBG("count %d state %ld rx_count %ld", count, n_hci->rx_state, n_hci->rx_count);
+-
+- n_hci->hdev.stat.byte_rx += count;
+-
+- ptr = data;
+- while (count) {
+- if (n_hci->rx_count) {
+- len = MIN(n_hci->rx_count, count);
+- memcpy(skb_put(n_hci->rx_skb, len), ptr, len);
+- n_hci->rx_count -= len; count -= len; ptr += len;
+-
+- if (n_hci->rx_count)
+- continue;
+-
+- switch (n_hci->rx_state) {
+- case WAIT_DATA:
+- DBG("Complete data");
+-
+- DMP(n_hci->rx_skb->data, n_hci->rx_skb->len);
+-
+- hci_recv_frame(n_hci->rx_skb);
+-
+- n_hci->rx_state = WAIT_PACKET_TYPE;
+- n_hci->rx_skb = NULL;
+- continue;
+-
+- case WAIT_EVENT_HDR:
+- eh = (hci_event_hdr *) n_hci->rx_skb->data;
+-
+- DBG("Event header: evt 0x%2.2x plen %d", eh->evt, eh->plen);
+-
+- n_hci_check_data_len(n_hci, eh->plen);
+- continue;
+-
+- case WAIT_ACL_HDR:
+- ah = (hci_acl_hdr *) n_hci->rx_skb->data;
+- dlen = __le16_to_cpu(ah->dlen);
+-
+- DBG("ACL header: dlen %d", dlen);
+-
+- n_hci_check_data_len(n_hci, dlen);
+- continue;
+-
+- case WAIT_SCO_HDR:
+- sh = (hci_sco_hdr *) n_hci->rx_skb->data;
+-
+- DBG("SCO header: dlen %d", sh->dlen);
+-
+- n_hci_check_data_len(n_hci, sh->dlen);
+- continue;
+- };
+- }
+-
+- /* WAIT_PACKET_TYPE */
+- switch (*ptr) {
+- case HCI_EVENT_PKT:
+- DBG("Event packet");
+- n_hci->rx_state = WAIT_EVENT_HDR;
+- n_hci->rx_count = HCI_EVENT_HDR_SIZE;
+- type = HCI_EVENT_PKT;
+- break;
+-
+- case HCI_ACLDATA_PKT:
+- DBG("ACL packet");
+- n_hci->rx_state = WAIT_ACL_HDR;
+- n_hci->rx_count = HCI_ACL_HDR_SIZE;
+- type = HCI_ACLDATA_PKT;
+- break;
+-
+- case HCI_SCODATA_PKT:
+- DBG("SCO packet");
+- n_hci->rx_state = WAIT_SCO_HDR;
+- n_hci->rx_count = HCI_SCO_HDR_SIZE;
+- type = HCI_SCODATA_PKT;
+- break;
+-
+- default:
+- ERR("Unknown HCI packet type %2.2x", (__u8)*ptr);
+- n_hci->hdev.stat.err_rx++;
+- ptr++; count--;
+- continue;
+- };
+- ptr++; count--;
+-
+- /* Allocate packet */
+- if (!(n_hci->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
+- ERR("Can't allocate mem for new packet");
+-
+- n_hci->rx_state = WAIT_PACKET_TYPE;
+- n_hci->rx_count = 0;
+- return;
+- }
+- n_hci->rx_skb->dev = (void *) &n_hci->hdev;
+- n_hci->rx_skb->pkt_type = type;
+- }
+-}
+-
+-/* n_hci_tty_receive()
+- *
+- * Called by tty low level driver when receive data is
+- * available.
+- *
+- * Arguments: tty pointer to tty isntance data
+- * data pointer to received data
+- * flags pointer to flags for data
+- * count count of received data in bytes
+- *
+- * Return Value: None
+- */
+-static void n_hci_tty_receive(struct tty_struct *tty, const __u8 * data, char *flags, int count)
+-{
+- struct n_hci *n_hci = tty2n_hci(tty);
+-
+- if (!n_hci || tty != n_hci->tty)
+- return;
+-
+- spin_lock(&n_hci->rx_lock);
+- n_hci_rx(n_hci, data, flags, count);
+- spin_unlock(&n_hci->rx_lock);
+-
+- if (test_and_clear_bit(TTY_THROTTLED,&tty->flags) && tty->driver.unthrottle)
+- tty->driver.unthrottle(tty);
+-}
+-
+-/* n_hci_tty_ioctl()
+- *
+- * Process IOCTL system call for the tty device.
+- *
+- * Arguments:
+- *
+- * tty pointer to tty instance data
+- * file pointer to open file object for device
+- * cmd IOCTL command code
+- * arg argument for IOCTL call (cmd dependent)
+- *
+- * Return Value: Command dependent
+- */
+-static int n_hci_tty_ioctl (struct tty_struct *tty, struct file * file,
+- unsigned int cmd, unsigned long arg)
+-{
+- struct n_hci *n_hci = tty2n_hci(tty);
+- int error = 0;
+-
+- DBG("");
+-
+- /* Verify the status of the device */
+- if (!n_hci)
+- return -EBADF;
+-
+- switch (cmd) {
+- default:
+- error = n_tty_ioctl(tty, file, cmd, arg);
+- break;
+- };
+-
+- return error;
+-}
+-
+-/*
+- * We don't provide read/write/poll interface for user space.
+- */
+-static ssize_t n_hci_tty_read(struct tty_struct *tty, struct file *file, unsigned char *buf, size_t nr)
+-{
+- return 0;
+-}
+-static ssize_t n_hci_tty_write(struct tty_struct *tty, struct file *file, const unsigned char *data, size_t count)
+-{
+- return 0;
+-}
+-static unsigned int n_hci_tty_poll(struct tty_struct *tty, struct file *filp, poll_table *wait)
+-{
+- return 0;
+-}
+-
+-int __init n_hci_init(void)
+-{
+- static struct tty_ldisc n_hci_ldisc;
+- int err;
+-
+- INF("BlueZ HCI UART driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
+- VERSION);
+- INF("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
+-
+- /* Register the tty discipline */
+-
+- memset(&n_hci_ldisc, 0, sizeof (n_hci_ldisc));
+- n_hci_ldisc.magic = TTY_LDISC_MAGIC;
+- n_hci_ldisc.name = "n_hci";
+- n_hci_ldisc.open = n_hci_tty_open;
+- n_hci_ldisc.close = n_hci_tty_close;
+- n_hci_ldisc.read = n_hci_tty_read;
+- n_hci_ldisc.write = n_hci_tty_write;
+- n_hci_ldisc.ioctl = n_hci_tty_ioctl;
+- n_hci_ldisc.poll = n_hci_tty_poll;
+- n_hci_ldisc.receive_room= n_hci_tty_room;
+- n_hci_ldisc.receive_buf = n_hci_tty_receive;
+- n_hci_ldisc.write_wakeup= n_hci_tty_wakeup;
+-
+- if ((err = tty_register_ldisc(N_HCI, &n_hci_ldisc))) {
+- ERR("Can't register HCI line discipline (%d)", err);
+- return err;
+- }
+-
+- return 0;
+-}
+-
+-void n_hci_cleanup(void)
+-{
+- int err;
+-
+- /* Release tty registration of line discipline */
+- if ((err = tty_register_ldisc(N_HCI, NULL)))
+- ERR("Can't unregister HCI line discipline (%d)", err);
+-}
+-
+-module_init(n_hci_init);
+-module_exit(n_hci_cleanup);
+-
+-MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
+-MODULE_DESCRIPTION("BlueZ HCI UART driver ver " VERSION);
+-MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/drivers/bluetooth/hci_uart.h linux-2.4.18-mh15/drivers/bluetooth/hci_uart.h
+--- linux-2.4.18/drivers/bluetooth/hci_uart.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_uart.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,82 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_uart.h,v 1.2 2002/09/09 01:17:32 maxk Exp $
++ */
++
++#ifndef N_HCI
++#define N_HCI 15
++#endif
++
++/* Ioctls */
++#define HCIUARTSETPROTO _IOW('U', 200, int)
++#define HCIUARTGETPROTO _IOR('U', 201, int)
++
++/* UART protocols */
++#define HCI_UART_MAX_PROTO 4
++
++#define HCI_UART_H4 0
++#define HCI_UART_BCSP 1
++#define HCI_UART_3WIRE 2
++#define HCI_UART_H4DS 3
++
++#ifdef __KERNEL__
++struct hci_uart;
++
++struct hci_uart_proto {
++ unsigned int id;
++ int (*open)(struct hci_uart *hu);
++ int (*close)(struct hci_uart *hu);
++ int (*flush)(struct hci_uart *hu);
++ int (*recv)(struct hci_uart *hu, void *data, int len);
++ int (*enqueue)(struct hci_uart *hu, struct sk_buff *skb);
++ struct sk_buff *(*dequeue)(struct hci_uart *hu);
++};
++
++struct hci_uart {
++ struct tty_struct *tty;
++ struct hci_dev hdev;
++ unsigned long flags;
++
++ struct hci_uart_proto *proto;
++ void *priv;
++
++ struct sk_buff *tx_skb;
++ unsigned long tx_state;
++ spinlock_t rx_lock;
++};
++
++/* HCI_UART flag bits */
++#define HCI_UART_PROTO_SET 0
++
++/* TX states */
++#define HCI_UART_SENDING 1
++#define HCI_UART_TX_WAKEUP 2
++
++int hci_uart_register_proto(struct hci_uart_proto *p);
++int hci_uart_unregister_proto(struct hci_uart_proto *p);
++int hci_uart_tx_wakeup(struct hci_uart *hu);
++
++#endif /* __KERNEL__ */
+diff -urN linux-2.4.18/drivers/bluetooth/hci_usb.c linux-2.4.18-mh15/drivers/bluetooth/hci_usb.c
+--- linux-2.4.18/drivers/bluetooth/hci_usb.c 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_usb.c 2004-08-01 16:26:23.000000000 +0200
+@@ -1,9 +1,10 @@
+ /*
+- BlueZ - Bluetooth protocol stack for Linux
++ HCI USB driver for Linux Bluetooth protocol stack (BlueZ)
+ Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+
++ Copyright (C) 2003 Maxim Krasnyansky <maxk@qualcomm.com>
++
+ 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;
+@@ -23,598 +24,938 @@
+ */
+
+ /*
+- * BlueZ HCI USB driver.
+ * Based on original USB Bluetooth driver for Linux kernel
+ * Copyright (c) 2000 Greg Kroah-Hartman <greg@kroah.com>
+ * Copyright (c) 2000 Mark Douglas Corner <mcorner@umich.edu>
+ *
+- * $Id: hci_usb.c,v 1.5 2001/07/05 18:42:44 maxk Exp $
++ * $Id: hci_usb.c,v 1.8 2002/07/18 17:23:09 maxk Exp $
+ */
+-#define VERSION "1.0"
++#define VERSION "2.7"
+
+ #include <linux/config.h>
+ #include <linux/module.h>
+
+ #include <linux/version.h>
+-#include <linux/config.h>
+ #include <linux/kernel.h>
+ #include <linux/init.h>
+ #include <linux/sched.h>
++#include <linux/unistd.h>
+ #include <linux/types.h>
+-#include <linux/fcntl.h>
+ #include <linux/interrupt.h>
+-#include <linux/ptrace.h>
+-#include <linux/poll.h>
+
+ #include <linux/slab.h>
+-#include <linux/tty.h>
+ #include <linux/errno.h>
+ #include <linux/string.h>
+-#include <linux/signal.h>
+-#include <linux/ioctl.h>
+ #include <linux/skbuff.h>
+
+ #include <linux/usb.h>
+
+ #include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+ #include <net/bluetooth/hci_core.h>
+-#include <net/bluetooth/hci_usb.h>
++
++#include "hci_usb.h"
+
+ #ifndef HCI_USB_DEBUG
+-#undef DBG
+-#define DBG( A... )
+-#undef DMP
+-#define DMP( A... )
++#undef BT_DBG
++#define BT_DBG( A... )
++#undef BT_DMP
++#define BT_DMP( A... )
+ #endif
+
+-static struct usb_device_id usb_bluetooth_ids [] = {
++#ifndef CONFIG_BLUEZ_HCIUSB_ZERO_PACKET
++#undef USB_ZERO_PACKET
++#define USB_ZERO_PACKET 0
++#endif
++
++static struct usb_driver hci_usb_driver;
++
++static struct usb_device_id bluetooth_ids[] = {
++ /* Generic Bluetooth USB device */
+ { USB_DEVICE_INFO(HCI_DEV_CLASS, HCI_DEV_SUBCLASS, HCI_DEV_PROTOCOL) },
++
++ /* AVM BlueFRITZ! USB v2.0 */
++ { USB_DEVICE(0x057c, 0x3800) },
++
++ /* Bluetooth Ultraport Module from IBM */
++ { USB_DEVICE(0x04bf, 0x030a) },
++
++ /* ALPS Modules with non-standard id */
++ { USB_DEVICE(0x044e, 0x3001) },
++ { USB_DEVICE(0x044e, 0x3002) },
++
++ /* Ericsson with non-standard id */
++ { USB_DEVICE(0x0bdb, 0x1002) },
++
+ { } /* Terminating entry */
+ };
+
+-MODULE_DEVICE_TABLE (usb, usb_bluetooth_ids);
++MODULE_DEVICE_TABLE (usb, bluetooth_ids);
+
+-static int hci_usb_ctrl_msg(struct hci_usb *husb, struct sk_buff *skb);
+-static int hci_usb_write_msg(struct hci_usb *husb, struct sk_buff *skb);
++static struct usb_device_id blacklist_ids[] = {
++ /* Broadcom BCM2033 without firmware */
++ { USB_DEVICE(0x0a5c, 0x2033), driver_info: HCI_IGNORE },
+
+-static void hci_usb_unlink_urbs(struct hci_usb *husb)
++ /* Broadcom BCM2035 */
++ { USB_DEVICE(0x0a5c, 0x200a), driver_info: HCI_RESET },
++
++ /* ISSC Bluetooth Adapter v3.1 */
++ { USB_DEVICE(0x1131, 0x1001), driver_info: HCI_RESET },
++
++ /* Digianswer device */
++ { USB_DEVICE(0x08fd, 0x0001), driver_info: HCI_DIGIANSWER },
++
++ /* RTX Telecom based adapter with buggy SCO support */
++ { USB_DEVICE(0x0400, 0x0807), driver_info: HCI_BROKEN_ISOC },
++
++ { } /* Terminating entry */
++};
++
++struct _urb *_urb_alloc(int isoc, int gfp)
+ {
+- usb_unlink_urb(husb->read_urb);
+- usb_unlink_urb(husb->intr_urb);
+- usb_unlink_urb(husb->ctrl_urb);
+- usb_unlink_urb(husb->write_urb);
++ struct _urb *_urb = kmalloc(sizeof(struct _urb) +
++ sizeof(iso_packet_descriptor_t) * isoc, gfp);
++ if (_urb) {
++ memset(_urb, 0, sizeof(*_urb));
++ spin_lock_init(&_urb->urb.lock);
++ }
++ return _urb;
++}
++
++struct _urb *_urb_dequeue(struct _urb_queue *q)
++{
++ struct _urb *_urb = NULL;
++ unsigned long flags;
++ spin_lock_irqsave(&q->lock, flags);
++ {
++ struct list_head *head = &q->head;
++ struct list_head *next = head->next;
++ if (next != head) {
++ _urb = list_entry(next, struct _urb, list);
++ list_del(next); _urb->queue = NULL;
++ }
++ }
++ spin_unlock_irqrestore(&q->lock, flags);
++ return _urb;
+ }
+
+-static void hci_usb_free_bufs(struct hci_usb *husb)
++static void hci_usb_rx_complete(struct urb *urb);
++static void hci_usb_tx_complete(struct urb *urb);
++
++#define __pending_tx(husb, type) (&husb->pending_tx[type-1])
++#define __pending_q(husb, type) (&husb->pending_q[type-1])
++#define __completed_q(husb, type) (&husb->completed_q[type-1])
++#define __transmit_q(husb, type) (&husb->transmit_q[type-1])
++#define __reassembly(husb, type) (husb->reassembly[type-1])
++
++static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
+ {
+- if (husb->read_urb) {
+- if (husb->read_urb->transfer_buffer)
+- kfree(husb->read_urb->transfer_buffer);
+- usb_free_urb(husb->read_urb);
+- }
++ return _urb_dequeue(__completed_q(husb, type));
++}
+
+- if (husb->intr_urb) {
+- if (husb->intr_urb->transfer_buffer)
+- kfree(husb->intr_urb->transfer_buffer);
+- usb_free_urb(husb->intr_urb);
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
++{
++ int offset = 0, i;
++
++ BT_DBG("len %d mtu %d", len, mtu);
++
++ for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
++ urb->iso_frame_desc[i].offset = offset;
++ urb->iso_frame_desc[i].length = mtu;
++ BT_DBG("desc %d offset %d len %d", i, offset, mtu);
++ }
++ if (len && i < HCI_MAX_ISOC_FRAMES) {
++ urb->iso_frame_desc[i].offset = offset;
++ urb->iso_frame_desc[i].length = len;
++ BT_DBG("desc %d offset %d len %d", i, offset, len);
++ i++;
+ }
++ urb->number_of_packets = i;
++}
++#endif
+
+- if (husb->ctrl_urb)
+- usb_free_urb(husb->ctrl_urb);
++static int hci_usb_intr_rx_submit(struct hci_usb *husb)
++{
++ struct _urb *_urb;
++ struct urb *urb;
++ int err, pipe, interval, size;
++ void *buf;
++
++ BT_DBG("%s", husb->hdev.name);
++
++ size = husb->intr_in_ep->wMaxPacketSize;
++
++ buf = kmalloc(size, GFP_ATOMIC);
++ if (!buf)
++ return -ENOMEM;
++
++ _urb = _urb_alloc(0, GFP_ATOMIC);
++ if (!_urb) {
++ kfree(buf);
++ return -ENOMEM;
++ }
++ _urb->type = HCI_EVENT_PKT;
++ _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
++
++ urb = &_urb->urb;
++ pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->bEndpointAddress);
++ interval = husb->intr_in_ep->bInterval;
++ FILL_INT_URB(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s intr rx submit failed urb %p err %d",
++ husb->hdev.name, urb, err);
++ _urb_unlink(_urb);
++ _urb_free(_urb);
++ kfree(buf);
++ }
++ return err;
++}
+
+- if (husb->write_urb)
+- usb_free_urb(husb->write_urb);
++static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
++{
++ struct _urb *_urb;
++ struct urb *urb;
++ int err, pipe, size = HCI_MAX_FRAME_SIZE;
++ void *buf;
++
++ buf = kmalloc(size, GFP_ATOMIC);
++ if (!buf)
++ return -ENOMEM;
++
++ _urb = _urb_alloc(0, GFP_ATOMIC);
++ if (!_urb) {
++ kfree(buf);
++ return -ENOMEM;
++ }
++ _urb->type = HCI_ACLDATA_PKT;
++ _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
++
++ urb = &_urb->urb;
++ pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->bEndpointAddress);
++ FILL_BULK_URB(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
++ urb->transfer_flags = USB_QUEUE_BULK;
++
++ BT_DBG("%s urb %p", husb->hdev.name, urb);
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s bulk rx submit failed urb %p err %d",
++ husb->hdev.name, urb, err);
++ _urb_unlink(_urb);
++ _urb_free(_urb);
++ kfree(buf);
++ }
++ return err;
++}
+
+- if (husb->intr_skb)
+- kfree_skb(husb->intr_skb);
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
++{
++ struct _urb *_urb;
++ struct urb *urb;
++ int err, mtu, size;
++ void *buf;
++
++ mtu = husb->isoc_in_ep->wMaxPacketSize;
++ size = mtu * HCI_MAX_ISOC_FRAMES;
++
++ buf = kmalloc(size, GFP_ATOMIC);
++ if (!buf)
++ return -ENOMEM;
++
++ _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
++ if (!_urb) {
++ kfree(buf);
++ return -ENOMEM;
++ }
++ _urb->type = HCI_SCODATA_PKT;
++ _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
++
++ urb = &_urb->urb;
++
++ urb->context = husb;
++ urb->dev = husb->udev;
++ urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->bEndpointAddress);
++ urb->complete = hci_usb_rx_complete;
++
++ urb->transfer_buffer_length = size;
++ urb->transfer_buffer = buf;
++ urb->transfer_flags = USB_ISO_ASAP;
++
++ __fill_isoc_desc(urb, size, mtu);
++
++ BT_DBG("%s urb %p", husb->hdev.name, urb);
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s isoc rx submit failed urb %p err %d",
++ husb->hdev.name, urb, err);
++ _urb_unlink(_urb);
++ _urb_free(_urb);
++ kfree(buf);
++ }
++ return err;
+ }
++#endif
+
+-/* ------- Interface to HCI layer ------ */
+ /* Initialize device */
+-int hci_usb_open(struct hci_dev *hdev)
++static int hci_usb_open(struct hci_dev *hdev)
+ {
+ struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
+- int status;
++ int i, err;
++ unsigned long flags;
++
++ BT_DBG("%s", hdev->name);
+
+- DBG("%s", hdev->name);
++ if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
+
+- husb->read_urb->dev = husb->udev;
+- if ((status = usb_submit_urb(husb->read_urb)))
+- DBG("read submit failed. %d", status);
++ MOD_INC_USE_COUNT;
+
+- husb->intr_urb->dev = husb->udev;
+- if ((status = usb_submit_urb(husb->intr_urb)))
+- DBG("interrupt submit failed. %d", status);
++ write_lock_irqsave(&husb->completion_lock, flags);
+
+- hdev->flags |= HCI_RUNNING;
++ err = hci_usb_intr_rx_submit(husb);
++ if (!err) {
++ for (i = 0; i < HCI_MAX_BULK_RX; i++)
++ hci_usb_bulk_rx_submit(husb);
++
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ if (husb->isoc_iface)
++ for (i = 0; i < HCI_MAX_ISOC_RX; i++)
++ hci_usb_isoc_rx_submit(husb);
++#endif
++ } else {
++ clear_bit(HCI_RUNNING, &hdev->flags);
++ MOD_DEC_USE_COUNT;
++ }
+
+- return 0;
++ write_unlock_irqrestore(&husb->completion_lock, flags);
++ return err;
+ }
+
+ /* Reset device */
+-int hci_usb_flush(struct hci_dev *hdev)
++static int hci_usb_flush(struct hci_dev *hdev)
+ {
+ struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
++ int i;
+
+- DBG("%s", hdev->name);
+-
+- /* Drop TX queues */
+- skb_queue_purge(&husb->tx_ctrl_q);
+- skb_queue_purge(&husb->tx_write_q);
++ BT_DBG("%s", hdev->name);
+
++ for (i=0; i < 4; i++)
++ skb_queue_purge(&husb->transmit_q[i]);
+ return 0;
+ }
+
+-/* Close device */
+-int hci_usb_close(struct hci_dev *hdev)
++static void hci_usb_unlink_urbs(struct hci_usb *husb)
+ {
+- struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
++ int i;
+
+- DBG("%s", hdev->name);
++ BT_DBG("%s", husb->hdev.name);
+
+- hdev->flags &= ~HCI_RUNNING;
+- hci_usb_unlink_urbs(husb);
++ for (i=0; i < 4; i++) {
++ struct _urb *_urb;
++ struct urb *urb;
++
++ /* Kill pending requests */
++ while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
++ urb = &_urb->urb;
++ BT_DBG("%s unlinking _urb %p type %d urb %p",
++ husb->hdev.name, _urb, _urb->type, urb);
++ usb_unlink_urb(urb);
++ _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
++ }
+
+- hci_usb_flush(hdev);
++ /* Release completed requests */
++ while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
++ urb = &_urb->urb;
++ BT_DBG("%s freeing _urb %p type %d urb %p",
++ husb->hdev.name, _urb, _urb->type, urb);
++ if (urb->setup_packet)
++ kfree(urb->setup_packet);
++ if (urb->transfer_buffer)
++ kfree(urb->transfer_buffer);
++ _urb_free(_urb);
++ }
+
+- return 0;
++ /* Release reassembly buffers */
++ if (husb->reassembly[i]) {
++ kfree_skb(husb->reassembly[i]);
++ husb->reassembly[i] = NULL;
++ }
++ }
+ }
+
+-void hci_usb_ctrl_wakeup(struct hci_usb *husb)
++/* Close device */
++static int hci_usb_close(struct hci_dev *hdev)
+ {
+- struct sk_buff *skb;
++ struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
++ unsigned long flags;
++
++ if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
+
+- if (test_and_set_bit(HCI_TX_CTRL, &husb->tx_state))
+- return;
++ BT_DBG("%s", hdev->name);
+
+- DBG("%s", husb->hdev.name);
++ write_lock_irqsave(&husb->completion_lock, flags);
++
++ hci_usb_unlink_urbs(husb);
++ hci_usb_flush(hdev);
+
+- if (!(skb = skb_dequeue(&husb->tx_ctrl_q)))
+- goto done;
++ write_unlock_irqrestore(&husb->completion_lock, flags);
+
+- if (hci_usb_ctrl_msg(husb, skb)){
+- kfree_skb(skb);
+- goto done;
+- }
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
+
+- DMP(skb->data, skb->len);
++static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
++{
++ struct urb *urb = &_urb->urb;
++ int err;
+
+- husb->hdev.stat.byte_tx += skb->len;
+- return;
++ BT_DBG("%s urb %p type %d", husb->hdev.name, urb, _urb->type);
++
++ _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s tx submit failed urb %p type %d err %d",
++ husb->hdev.name, urb, _urb->type, err);
++ _urb_unlink(_urb);
++ _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
++ } else
++ atomic_inc(__pending_tx(husb, _urb->type));
+
+-done:
+- clear_bit(HCI_TX_CTRL, &husb->tx_state);
+- return;
++ return err;
+ }
+
+-void hci_usb_write_wakeup(struct hci_usb *husb)
++static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
+ {
+- struct sk_buff *skb;
++ struct _urb *_urb = __get_completed(husb, skb->pkt_type);
++ devrequest *dr;
++ struct urb *urb;
++
++ if (!_urb) {
++ _urb = _urb_alloc(0, GFP_ATOMIC);
++ if (!_urb)
++ return -ENOMEM;
++ _urb->type = skb->pkt_type;
++
++ dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
++ if (!dr) {
++ _urb_free(_urb);
++ return -ENOMEM;
++ }
++ } else
++ dr = (void *) _urb->urb.setup_packet;
+
+- if (test_and_set_bit(HCI_TX_WRITE, &husb->tx_state))
+- return;
++ dr->requesttype = husb->ctrl_req;
++ dr->request = 0;
++ dr->index = 0;
++ dr->value = 0;
++ dr->length = __cpu_to_le16(skb->len);
+
+- DBG("%s", husb->hdev.name);
++ urb = &_urb->urb;
++ FILL_CONTROL_URB(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
++ (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
+
+- if (!(skb = skb_dequeue(&husb->tx_write_q)))
+- goto done;
++ BT_DBG("%s skb %p len %d", husb->hdev.name, skb, skb->len);
++
++ _urb->priv = skb;
++ return __tx_submit(husb, _urb);
++}
+
+- if (hci_usb_write_msg(husb, skb)) {
+- skb_queue_head(&husb->tx_write_q, skb);
+- goto done;
++static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
++{
++ struct _urb *_urb = __get_completed(husb, skb->pkt_type);
++ struct urb *urb;
++ int pipe;
++
++ if (!_urb) {
++ _urb = _urb_alloc(0, GFP_ATOMIC);
++ if (!_urb)
++ return -ENOMEM;
++ _urb->type = skb->pkt_type;
+ }
+
+- DMP(skb->data, skb->len);
++ urb = &_urb->urb;
++ pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->bEndpointAddress);
++ FILL_BULK_URB(urb, husb->udev, pipe, skb->data, skb->len,
++ hci_usb_tx_complete, husb);
++ urb->transfer_flags = USB_QUEUE_BULK | USB_ZERO_PACKET;
+
+- husb->hdev.stat.byte_tx += skb->len;
+- return;
++ BT_DBG("%s skb %p len %d", husb->hdev.name, skb, skb->len);
+
+-done:
+- clear_bit(HCI_TX_WRITE, &husb->tx_state);
+- return;
++ _urb->priv = skb;
++ return __tx_submit(husb, _urb);
+ }
+
+-/* Send frames from HCI layer */
+-int hci_usb_send_frame(struct sk_buff *skb)
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
+ {
+- struct hci_dev *hdev = (struct hci_dev *) skb->dev;
+- struct hci_usb *husb;
+-
+- if (!hdev) {
+- ERR("frame for uknown device (hdev=NULL)");
+- return -ENODEV;
++ struct _urb *_urb = __get_completed(husb, skb->pkt_type);
++ struct urb *urb;
++
++ if (!_urb) {
++ _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
++ if (!_urb)
++ return -ENOMEM;
++ _urb->type = skb->pkt_type;
+ }
+
+- if (!(hdev->flags & HCI_RUNNING))
+- return 0;
++ BT_DBG("%s skb %p len %d", husb->hdev.name, skb, skb->len);
+
+- husb = (struct hci_usb *) hdev->driver_data;
++ urb = &_urb->urb;
++
++ urb->context = husb;
++ urb->dev = husb->udev;
++ urb->pipe = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->bEndpointAddress);
++ urb->complete = hci_usb_tx_complete;
++ urb->transfer_flags = USB_ISO_ASAP;
+
+- DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
++ urb->transfer_buffer = skb->data;
++ urb->transfer_buffer_length = skb->len;
++
++ __fill_isoc_desc(urb, skb->len, husb->isoc_out_ep->wMaxPacketSize);
+
+- switch (skb->pkt_type) {
+- case HCI_COMMAND_PKT:
+- skb_queue_tail(&husb->tx_ctrl_q, skb);
+- hci_usb_ctrl_wakeup(husb);
+- hdev->stat.cmd_tx++;
+- return 0;
+-
+- case HCI_ACLDATA_PKT:
+- skb_queue_tail(&husb->tx_write_q, skb);
+- hci_usb_write_wakeup(husb);
+- hdev->stat.acl_tx++;
+- return 0;
+-
+- case HCI_SCODATA_PKT:
+- return -EOPNOTSUPP;
+- };
+-
+- return 0;
++ _urb->priv = skb;
++ return __tx_submit(husb, _urb);
+ }
++#endif
+
+-/* ---------- USB ------------- */
+-
+-static void hci_usb_ctrl(struct urb *urb)
++static void hci_usb_tx_process(struct hci_usb *husb)
+ {
+- struct sk_buff *skb = (struct sk_buff *) urb->context;
+- struct hci_dev *hdev;
+- struct hci_usb *husb;
++ struct sk_buff_head *q;
++ struct sk_buff *skb;
+
+- if (!skb)
+- return;
+- hdev = (struct hci_dev *) skb->dev;
+- husb = (struct hci_usb *) hdev->driver_data;
++ BT_DBG("%s", husb->hdev.name);
+
+- DBG("%s", hdev->name);
++ do {
++ clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
+
+- if (urb->status)
+- DBG("%s ctrl status: %d", hdev->name, urb->status);
++ /* Process command queue */
++ q = __transmit_q(husb, HCI_COMMAND_PKT);
++ if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
++ (skb = skb_dequeue(q))) {
++ if (hci_usb_send_ctrl(husb, skb) < 0)
++ skb_queue_head(q, skb);
++ }
+
+- clear_bit(HCI_TX_CTRL, &husb->tx_state);
+- kfree_skb(skb);
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ /* Process SCO queue */
++ q = __transmit_q(husb, HCI_SCODATA_PKT);
++ if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
++ (skb = skb_dequeue(q))) {
++ if (hci_usb_send_isoc(husb, skb) < 0)
++ skb_queue_head(q, skb);
++ }
++#endif
++
++ /* Process ACL queue */
++ q = __transmit_q(husb, HCI_ACLDATA_PKT);
++ while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
++ (skb = skb_dequeue(q))) {
++ if (hci_usb_send_bulk(husb, skb) < 0) {
++ skb_queue_head(q, skb);
++ break;
++ }
++ }
++ } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
++}
+
+- /* Wake up device */
+- hci_usb_ctrl_wakeup(husb);
++static inline void hci_usb_tx_wakeup(struct hci_usb *husb)
++{
++ /* Serialize TX queue processing to avoid data reordering */
++ if (!test_and_set_bit(HCI_USB_TX_PROCESS, &husb->state)) {
++ hci_usb_tx_process(husb);
++ clear_bit(HCI_USB_TX_PROCESS, &husb->state);
++ } else
++ set_bit(HCI_USB_TX_WAKEUP, &husb->state);
+ }
+
+-static void hci_usb_bulk_write(struct urb *urb)
++/* Send frames from HCI layer */
++static int hci_usb_send_frame(struct sk_buff *skb)
+ {
+- struct sk_buff *skb = (struct sk_buff *) urb->context;
+- struct hci_dev *hdev;
++ struct hci_dev *hdev = (struct hci_dev *) skb->dev;
+ struct hci_usb *husb;
+
+- if (!skb)
+- return;
+- hdev = (struct hci_dev *) skb->dev;
+- husb = (struct hci_usb *) hdev->driver_data;
++ if (!hdev) {
++ BT_ERR("frame for uknown device (hdev=NULL)");
++ return -ENODEV;
++ }
+
+- DBG("%s", hdev->name);
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
++ return -EBUSY;
+
+- if (urb->status)
+- DBG("%s bulk write status: %d", hdev->name, urb->status);
++ BT_DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
+
+- clear_bit(HCI_TX_WRITE, &husb->tx_state);
+- kfree_skb(skb);
++ husb = (struct hci_usb *) hdev->driver_data;
+
+- /* Wake up device */
+- hci_usb_write_wakeup(husb);
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++#endif
+
+- return;
+-}
++ default:
++ kfree_skb(skb);
++ return 0;
++ }
+
+-static void hci_usb_intr(struct urb *urb)
+-{
+- struct hci_usb *husb = (struct hci_usb *) urb->context;
+- unsigned char *data = urb->transfer_buffer;
+- register int count = urb->actual_length;
+- register struct sk_buff *skb = husb->intr_skb;
+- hci_event_hdr *eh;
+- register int len;
++ read_lock(&husb->completion_lock);
+
+- if (!husb)
+- return;
++ skb_queue_tail(__transmit_q(husb, skb->pkt_type), skb);
++ hci_usb_tx_wakeup(husb);
+
+- DBG("%s count %d", husb->hdev.name, count);
++ read_unlock(&husb->completion_lock);
++ return 0;
++}
+
+- if (urb->status || !count) {
+- DBG("%s intr status %d, count %d", husb->hdev.name, urb->status, count);
+- return;
+- }
++static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count)
++{
++ BT_DBG("%s type %d data %p count %d", husb->hdev.name, type, data, count);
+
+- /* Do we really have to handle continuations here ? */
+- if (!skb) {
+- /* New frame */
+- if (count < HCI_EVENT_HDR_SIZE) {
+- DBG("%s bad frame len %d", husb->hdev.name, count);
+- return;
+- }
++ husb->hdev.stat.byte_rx += count;
+
+- eh = (hci_event_hdr *) data;
+- len = eh->plen + HCI_EVENT_HDR_SIZE;
++ while (count) {
++ struct sk_buff *skb = __reassembly(husb, type);
++ struct { int expect; } *scb;
++ int len = 0;
++
++ if (!skb) {
++ /* Start of the frame */
++
++ switch (type) {
++ case HCI_EVENT_PKT:
++ if (count >= HCI_EVENT_HDR_SIZE) {
++ hci_event_hdr *h = data;
++ len = HCI_EVENT_HDR_SIZE + h->plen;
++ } else
++ return -EILSEQ;
++ break;
+
+- if (count > len) {
+- DBG("%s corrupted frame, len %d", husb->hdev.name, count);
+- return;
+- }
++ case HCI_ACLDATA_PKT:
++ if (count >= HCI_ACL_HDR_SIZE) {
++ hci_acl_hdr *h = data;
++ len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);
++ } else
++ return -EILSEQ;
++ break;
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ case HCI_SCODATA_PKT:
++ if (count >= HCI_SCO_HDR_SIZE) {
++ hci_sco_hdr *h = data;
++ len = HCI_SCO_HDR_SIZE + h->dlen;
++ } else
++ return -EILSEQ;
++ break;
++#endif
++ }
++ BT_DBG("new packet len %d", len);
+
+- /* Allocate skb */
+- if (!(skb = bluez_skb_alloc(len, GFP_ATOMIC))) {
+- ERR("Can't allocate mem for new packet");
+- return;
++ skb = bluez_skb_alloc(len, GFP_ATOMIC);
++ if (!skb) {
++ BT_ERR("%s no memory for the packet", husb->hdev.name);
++ return -ENOMEM;
++ }
++ skb->dev = (void *) &husb->hdev;
++ skb->pkt_type = type;
++
++ __reassembly(husb, type) = skb;
++
++ scb = (void *) skb->cb;
++ scb->expect = len;
++ } else {
++ /* Continuation */
++ scb = (void *) skb->cb;
++ len = scb->expect;
+ }
+- skb->dev = (void *) &husb->hdev;
+- skb->pkt_type = HCI_EVENT_PKT;
+-
+- husb->intr_skb = skb;
+- husb->intr_count = len;
+- } else {
+- /* Continuation */
+- if (count > husb->intr_count) {
+- ERR("%s bad frame len %d (expected %d)", husb->hdev.name, count, husb->intr_count);
+
+- kfree_skb(skb);
+- husb->intr_skb = NULL;
+- husb->intr_count = 0;
+- return;
++ len = min(len, count);
++
++ memcpy(skb_put(skb, len), data, len);
++
++ scb->expect -= len;
++ if (!scb->expect) {
++ /* Complete frame */
++ __reassembly(husb, type) = NULL;
++ hci_recv_frame(skb);
+ }
+- }
+-
+- memcpy(skb_put(skb, count), data, count);
+- husb->intr_count -= count;
+-
+- DMP(data, count);
+-
+- if (!husb->intr_count) {
+- /* Got complete frame */
+
+- husb->hdev.stat.byte_rx += skb->len;
+- hci_recv_frame(skb);
+-
+- husb->intr_skb = NULL;
++ count -= len; data += len;
+ }
++ return 0;
+ }
+
+-static void hci_usb_bulk_read(struct urb *urb)
++static void hci_usb_rx_complete(struct urb *urb)
+ {
+- struct hci_usb *husb = (struct hci_usb *) urb->context;
+- unsigned char *data = urb->transfer_buffer;
+- int count = urb->actual_length, status;
+- struct sk_buff *skb;
+- hci_acl_hdr *ah;
+- register __u16 dlen;
+-
+- if (!husb)
+- return;
++ struct _urb *_urb = container_of(urb, struct _urb, urb);
++ struct hci_usb *husb = (void *) urb->context;
++ struct hci_dev *hdev = &husb->hdev;
++ int err, count = urb->actual_length;
+
+- DBG("%s status %d, count %d, flags %x", husb->hdev.name, urb->status, count, urb->transfer_flags);
++ BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
++ _urb->type, urb->status, count, urb->transfer_flags);
+
+- if (urb->status) {
+- /* Do not re-submit URB on critical errors */
+- switch (urb->status) {
+- case -ENOENT:
+- return;
+- default:
+- goto resubmit;
+- };
+- }
+- if (!count)
+- goto resubmit;
+-
+- DMP(data, count);
++ read_lock(&husb->completion_lock);
+
+- ah = (hci_acl_hdr *) data;
+- dlen = le16_to_cpu(ah->dlen);
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
++ goto unlock;
+
+- /* Verify frame len and completeness */
+- if ((count - HCI_ACL_HDR_SIZE) != dlen) {
+- ERR("%s corrupted ACL packet: count %d, plen %d", husb->hdev.name, count, dlen);
++ if (urb->status || !count)
+ goto resubmit;
+- }
+
+- /* Allocate packet */
+- if (!(skb = bluez_skb_alloc(count, GFP_ATOMIC))) {
+- ERR("Can't allocate mem for new packet");
+- goto resubmit;
++ if (_urb->type == HCI_SCODATA_PKT) {
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ int i;
++ for (i=0; i < urb->number_of_packets; i++) {
++ BT_DBG("desc %d status %d offset %d len %d", i,
++ urb->iso_frame_desc[i].status,
++ urb->iso_frame_desc[i].offset,
++ urb->iso_frame_desc[i].actual_length);
++
++ if (!urb->iso_frame_desc[i].status)
++ __recv_frame(husb, _urb->type,
++ urb->transfer_buffer + urb->iso_frame_desc[i].offset,
++ urb->iso_frame_desc[i].actual_length);
++ }
++#else
++ ;
++#endif
++ } else {
++ err = __recv_frame(husb, _urb->type, urb->transfer_buffer, count);
++ if (err < 0) {
++ BT_ERR("%s corrupted packet: type %d count %d",
++ husb->hdev.name, _urb->type, count);
++ hdev->stat.err_rx++;
++ }
+ }
+
+- memcpy(skb_put(skb, count), data, count);
+- skb->dev = (void *) &husb->hdev;
+- skb->pkt_type = HCI_ACLDATA_PKT;
+-
+- husb->hdev.stat.byte_rx += skb->len;
+-
+- hci_recv_frame(skb);
+-
+ resubmit:
+- husb->read_urb->dev = husb->udev;
+- if ((status = usb_submit_urb(husb->read_urb)))
+- DBG("%s read URB submit failed %d", husb->hdev.name, status);
++ if (_urb->type != HCI_EVENT_PKT) {
++ urb->dev = husb->udev;
++ err = usb_submit_urb(urb);
++ BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
++ _urb->type, err);
++ }
+
+- DBG("%s read URB re-submited", husb->hdev.name);
++unlock:
++ read_unlock(&husb->completion_lock);
+ }
+
+-static int hci_usb_ctrl_msg(struct hci_usb *husb, struct sk_buff *skb)
++static void hci_usb_tx_complete(struct urb *urb)
+ {
+- struct urb *urb = husb->ctrl_urb;
+- devrequest *dr = &husb->dev_req;
+- int pipe, status;
++ struct _urb *_urb = container_of(urb, struct _urb, urb);
++ struct hci_usb *husb = (void *) urb->context;
++ struct hci_dev *hdev = &husb->hdev;
+
+- DBG("%s len %d", husb->hdev.name, skb->len);
++ BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
++ urb->status, urb->transfer_flags);
+
+- pipe = usb_sndctrlpipe(husb->udev, 0);
++ atomic_dec(__pending_tx(husb, _urb->type));
+
+- dr->requesttype = HCI_CTRL_REQ;
+- dr->request = 0;
+- dr->index = 0;
+- dr->value = 0;
+- dr->length = cpu_to_le16(skb->len);
+-
+- FILL_CONTROL_URB(urb, husb->udev, pipe, (void*)dr, skb->data, skb->len,
+- hci_usb_ctrl, skb);
++ urb->transfer_buffer = NULL;
++ kfree_skb((struct sk_buff *) _urb->priv);
+
+- if ((status = usb_submit_urb(urb))) {
+- DBG("%s control URB submit failed %d", husb->hdev.name, status);
+- return status;
+- }
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
++ return;
+
+- return 0;
+-}
++ if (!urb->status)
++ hdev->stat.byte_tx += urb->transfer_buffer_length;
++ else
++ hdev->stat.err_tx++;
+
+-static int hci_usb_write_msg(struct hci_usb *husb, struct sk_buff *skb)
+-{
+- struct urb *urb = husb->write_urb;
+- int pipe, status;
++ read_lock(&husb->completion_lock);
+
+- DBG("%s len %d", husb->hdev.name, skb->len);
++ _urb_unlink(_urb);
++ _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
+
+- pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep_addr);
++ hci_usb_tx_wakeup(husb);
++
++ read_unlock(&husb->completion_lock);
++}
+
+- FILL_BULK_URB(urb, husb->udev, pipe, skb->data, skb->len,
+- hci_usb_bulk_write, skb);
+- urb->transfer_flags |= USB_QUEUE_BULK;
++static void hci_usb_destruct(struct hci_dev *hdev)
++{
++ struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
+
+- if ((status = usb_submit_urb(urb))) {
+- DBG("%s write URB submit failed %d", husb->hdev.name, status);
+- return status;
+- }
++ BT_DBG("%s", hdev->name);
+
+- return 0;
++ kfree(husb);
+ }
+
+-static void * hci_usb_probe(struct usb_device *udev, unsigned int ifnum, const struct usb_device_id *id)
++static void *hci_usb_probe(struct usb_device *udev, unsigned int ifnum, const struct usb_device_id *id)
+ {
+- struct usb_endpoint_descriptor *bulk_out_ep, *intr_in_ep, *bulk_in_ep;
++ struct usb_endpoint_descriptor *bulk_out_ep[HCI_MAX_IFACE_NUM];
++ struct usb_endpoint_descriptor *isoc_out_ep[HCI_MAX_IFACE_NUM];
++ struct usb_endpoint_descriptor *bulk_in_ep[HCI_MAX_IFACE_NUM];
++ struct usb_endpoint_descriptor *isoc_in_ep[HCI_MAX_IFACE_NUM];
++ struct usb_endpoint_descriptor *intr_in_ep[HCI_MAX_IFACE_NUM];
+ struct usb_interface_descriptor *uif;
+ struct usb_endpoint_descriptor *ep;
++ struct usb_interface *iface, *isoc_iface;
+ struct hci_usb *husb;
+ struct hci_dev *hdev;
+- int i, size, pipe;
+- __u8 * buf;
++ int i, a, e, size, ifn, isoc_ifnum, isoc_alts;
+
+- DBG("udev %p ifnum %d", udev, ifnum);
++ BT_DBG("udev %p ifnum %d", udev, ifnum);
+
+- /* Check device signature */
+- if ((udev->descriptor.bDeviceClass != HCI_DEV_CLASS) ||
+- (udev->descriptor.bDeviceSubClass != HCI_DEV_SUBCLASS)||
+- (udev->descriptor.bDeviceProtocol != HCI_DEV_PROTOCOL) )
+- return NULL;
++ iface = &udev->actconfig->interface[0];
+
+- MOD_INC_USE_COUNT;
+-
+- uif = &udev->actconfig->interface[ifnum].altsetting[0];
++ if (!id->driver_info) {
++ const struct usb_device_id *match;
++ match = usb_match_id(udev, iface, blacklist_ids);
++ if (match)
++ id = match;
++ }
+
+- if (uif->bNumEndpoints != 3) {
+- DBG("Wrong number of endpoints %d", uif->bNumEndpoints);
+- MOD_DEC_USE_COUNT;
++ if (id->driver_info & HCI_IGNORE)
+ return NULL;
+- }
+
+- bulk_out_ep = intr_in_ep = bulk_in_ep = NULL;
++ /* Check number of endpoints */
++ if (udev->actconfig->interface[ifnum].altsetting[0].bNumEndpoints < 3)
++ return NULL;
+
++ memset(bulk_out_ep, 0, sizeof(bulk_out_ep));
++ memset(isoc_out_ep, 0, sizeof(isoc_out_ep));
++ memset(bulk_in_ep, 0, sizeof(bulk_in_ep));
++ memset(isoc_in_ep, 0, sizeof(isoc_in_ep));
++ memset(intr_in_ep, 0, sizeof(intr_in_ep));
++
++ size = 0;
++ isoc_iface = NULL;
++ isoc_alts = isoc_ifnum = 0;
++
+ /* Find endpoints that we need */
+- for ( i = 0; i < uif->bNumEndpoints; ++i) {
+- ep = &uif->endpoint[i];
+
+- switch (ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
+- case USB_ENDPOINT_XFER_BULK:
+- if (ep->bEndpointAddress & USB_DIR_IN)
+- bulk_in_ep = ep;
+- else
+- bulk_out_ep = ep;
+- break;
++ ifn = MIN(udev->actconfig->bNumInterfaces, HCI_MAX_IFACE_NUM);
++ for (i = 0; i < ifn; i++) {
++ iface = &udev->actconfig->interface[i];
++ for (a = 0; a < iface->num_altsetting; a++) {
++ uif = &iface->altsetting[a];
++ for (e = 0; e < uif->bNumEndpoints; e++) {
++ ep = &uif->endpoint[e];
++
++ switch (ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
++ case USB_ENDPOINT_XFER_INT:
++ if (ep->bEndpointAddress & USB_DIR_IN)
++ intr_in_ep[i] = ep;
++ break;
++
++ case USB_ENDPOINT_XFER_BULK:
++ if (ep->bEndpointAddress & USB_DIR_IN)
++ bulk_in_ep[i] = ep;
++ else
++ bulk_out_ep[i] = ep;
++ break;
++
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ case USB_ENDPOINT_XFER_ISOC:
++ if (ep->wMaxPacketSize < size || a > 2)
++ break;
++ size = ep->wMaxPacketSize;
++
++ isoc_iface = iface;
++ isoc_alts = a;
++ isoc_ifnum = i;
++
++ if (ep->bEndpointAddress & USB_DIR_IN)
++ isoc_in_ep[i] = ep;
++ else
++ isoc_out_ep[i] = ep;
++ break;
++#endif
++ }
++ }
++ }
++ }
+
+- case USB_ENDPOINT_XFER_INT:
+- intr_in_ep = ep;
+- break;
+- };
++ if (!bulk_in_ep[0] || !bulk_out_ep[0] || !intr_in_ep[0]) {
++ BT_DBG("Bulk endpoints not found");
++ goto done;
+ }
+
+- if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) {
+- DBG("Endpoints not found: %p %p %p", bulk_in_ep, bulk_out_ep, intr_in_ep);
+- MOD_DEC_USE_COUNT;
+- return NULL;
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ if (id->driver_info & HCI_BROKEN_ISOC || !isoc_in_ep[1] || !isoc_out_ep[1]) {
++ BT_DBG("Isoc endpoints not found");
++ isoc_iface = NULL;
+ }
++#endif
+
+ if (!(husb = kmalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
+- ERR("Can't allocate: control structure");
+- MOD_DEC_USE_COUNT;
+- return NULL;
++ BT_ERR("Can't allocate: control structure");
++ goto done;
+ }
+
+ memset(husb, 0, sizeof(struct hci_usb));
+
+ husb->udev = udev;
+- husb->bulk_out_ep_addr = bulk_out_ep->bEndpointAddress;
+-
+- if (!(husb->ctrl_urb = usb_alloc_urb(0))) {
+- ERR("Can't allocate: control URB");
+- goto probe_error;
+- }
+-
+- if (!(husb->write_urb = usb_alloc_urb(0))) {
+- ERR("Can't allocate: write URB");
+- goto probe_error;
+- }
+-
+- if (!(husb->read_urb = usb_alloc_urb(0))) {
+- ERR("Can't allocate: read URB");
+- goto probe_error;
+- }
+-
+- ep = bulk_in_ep;
+- pipe = usb_rcvbulkpipe(udev, ep->bEndpointAddress);
+- size = HCI_MAX_FRAME_SIZE;
+-
+- if (!(buf = kmalloc(size, GFP_KERNEL))) {
+- ERR("Can't allocate: read buffer");
+- goto probe_error;
+- }
+-
+- FILL_BULK_URB(husb->read_urb, udev, pipe, buf, size, hci_usb_bulk_read, husb);
+- husb->read_urb->transfer_flags |= USB_QUEUE_BULK;
+-
+- ep = intr_in_ep;
+- pipe = usb_rcvintpipe(udev, ep->bEndpointAddress);
+- size = usb_maxpacket(udev, pipe, usb_pipeout(pipe));
+-
+- if (!(husb->intr_urb = usb_alloc_urb(0))) {
+- ERR("Can't allocate: interrupt URB");
+- goto probe_error;
++ husb->bulk_out_ep = bulk_out_ep[0];
++ husb->bulk_in_ep = bulk_in_ep[0];
++ husb->intr_in_ep = intr_in_ep[0];
++
++ if (id->driver_info & HCI_DIGIANSWER)
++ husb->ctrl_req = HCI_DIGI_REQ;
++ else
++ husb->ctrl_req = HCI_CTRL_REQ;
++
++#ifdef CONFIG_BLUEZ_HCIUSB_SCO
++ if (isoc_iface) {
++ BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
++ if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
++ BT_ERR("Can't set isoc interface settings");
++ isoc_iface = NULL;
++ }
++ usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb);
++ husb->isoc_iface = isoc_iface;
++ husb->isoc_in_ep = isoc_in_ep[isoc_ifnum];
++ husb->isoc_out_ep = isoc_out_ep[isoc_ifnum];
+ }
++#endif
++
++ husb->completion_lock = RW_LOCK_UNLOCKED;
+
+- if (!(buf = kmalloc(size, GFP_KERNEL))) {
+- ERR("Can't allocate: interrupt buffer");
+- goto probe_error;
++ for (i = 0; i < 4; i++) {
++ skb_queue_head_init(&husb->transmit_q[i]);
++ _urb_queue_init(&husb->pending_q[i]);
++ _urb_queue_init(&husb->completed_q[i]);
+ }
+
+- FILL_INT_URB(husb->intr_urb, udev, pipe, buf, size, hci_usb_intr, husb, ep->bInterval);
+-
+- skb_queue_head_init(&husb->tx_ctrl_q);
+- skb_queue_head_init(&husb->tx_write_q);
+-
+ /* Initialize and register HCI device */
+ hdev = &husb->hdev;
+
+- hdev->type = HCI_USB;
++ hdev->type = HCI_USB;
+ hdev->driver_data = husb;
+
+ hdev->open = hci_usb_open;
+ hdev->close = hci_usb_close;
+ hdev->flush = hci_usb_flush;
+- hdev->send = hci_usb_send_frame;
++ hdev->send = hci_usb_send_frame;
++ hdev->destruct = hci_usb_destruct;
++
++ if (id->driver_info & HCI_RESET)
++ set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
+
+ if (hci_register_dev(hdev) < 0) {
+- ERR("Can't register HCI device %s", hdev->name);
++ BT_ERR("Can't register HCI device");
+ goto probe_error;
+ }
+
+ return husb;
+
+ probe_error:
+- hci_usb_free_bufs(husb);
+ kfree(husb);
+- MOD_DEC_USE_COUNT;
++
++done:
+ return NULL;
+ }
+
+@@ -626,38 +967,34 @@
+ if (!husb)
+ return;
+
+- DBG("%s", hdev->name);
++ BT_DBG("%s", hdev->name);
+
+ hci_usb_close(hdev);
+
+- if (hci_unregister_dev(hdev) < 0) {
+- ERR("Can't unregister HCI device %s", hdev->name);
+- }
++ if (husb->isoc_iface)
++ usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
+
+- hci_usb_free_bufs(husb);
+- kfree(husb);
+-
+- MOD_DEC_USE_COUNT;
++ if (hci_unregister_dev(hdev) < 0)
++ BT_ERR("Can't unregister HCI device %s", hdev->name);
+ }
+
+-static struct usb_driver hci_usb_driver =
+-{
++static struct usb_driver hci_usb_driver = {
+ name: "hci_usb",
+ probe: hci_usb_probe,
+ disconnect: hci_usb_disconnect,
+- id_table: usb_bluetooth_ids,
++ id_table: bluetooth_ids,
+ };
+
+ int hci_usb_init(void)
+ {
+ int err;
+
+- INF("BlueZ HCI USB driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
++ BT_INFO("BlueZ HCI USB driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
+ VERSION);
+- INF("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
++ BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
+
+ if ((err = usb_register(&hci_usb_driver)) < 0)
+- ERR("Failed to register HCI USB driver");
++ BT_ERR("Failed to register HCI USB driver");
+
+ return err;
+ }
+@@ -670,6 +1007,6 @@
+ module_init(hci_usb_init);
+ module_exit(hci_usb_cleanup);
+
+-MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
++MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
+ MODULE_DESCRIPTION("BlueZ HCI USB driver ver " VERSION);
+ MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/drivers/bluetooth/hci_usb.h linux-2.4.18-mh15/drivers/bluetooth/hci_usb.h
+--- linux-2.4.18/drivers/bluetooth/hci_usb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_usb.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,147 @@
++/*
++ HCI USB driver for Linux Bluetooth protocol stack (BlueZ)
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ Copyright (C) 2003 Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_usb.h,v 1.2 2002/03/18 19:10:04 maxk Exp $
++ */
++
++#ifdef __KERNEL__
++
++/* Class, SubClass, and Protocol codes that describe a Bluetooth device */
++#define HCI_DEV_CLASS 0xe0 /* Wireless class */
++#define HCI_DEV_SUBCLASS 0x01 /* RF subclass */
++#define HCI_DEV_PROTOCOL 0x01 /* Bluetooth programming protocol */
++
++#define HCI_CTRL_REQ 0x20
++#define HCI_DIGI_REQ 0x40
++
++#define HCI_IGNORE 0x01
++#define HCI_RESET 0x02
++#define HCI_DIGIANSWER 0x04
++#define HCI_BROKEN_ISOC 0x08
++
++#define HCI_MAX_IFACE_NUM 3
++
++#define HCI_MAX_BULK_TX 4
++#define HCI_MAX_BULK_RX 1
++
++#define HCI_MAX_ISOC_RX 2
++#define HCI_MAX_ISOC_TX 2
++
++#define HCI_MAX_ISOC_FRAMES 10
++
++struct _urb_queue {
++ struct list_head head;
++ spinlock_t lock;
++};
++
++struct _urb {
++ struct list_head list;
++ struct _urb_queue *queue;
++ int type;
++ void *priv;
++ struct urb urb;
++};
++
++struct _urb *_urb_alloc(int isoc, int gfp);
++
++static inline void _urb_free(struct _urb *_urb)
++{
++ kfree(_urb);
++}
++
++static inline void _urb_queue_init(struct _urb_queue *q)
++{
++ INIT_LIST_HEAD(&q->head);
++ spin_lock_init(&q->lock);
++}
++
++static inline void _urb_queue_head(struct _urb_queue *q, struct _urb *_urb)
++{
++ unsigned long flags;
++ spin_lock_irqsave(&q->lock, flags);
++ list_add(&_urb->list, &q->head); _urb->queue = q;
++ spin_unlock_irqrestore(&q->lock, flags);
++}
++
++static inline void _urb_queue_tail(struct _urb_queue *q, struct _urb *_urb)
++{
++ unsigned long flags;
++ spin_lock_irqsave(&q->lock, flags);
++ list_add_tail(&_urb->list, &q->head); _urb->queue = q;
++ spin_unlock_irqrestore(&q->lock, flags);
++}
++
++static inline void _urb_unlink(struct _urb *_urb)
++{
++ struct _urb_queue *q = _urb->queue;
++ unsigned long flags;
++ if (q) {
++ spin_lock_irqsave(&q->lock, flags);
++ list_del(&_urb->list); _urb->queue = NULL;
++ spin_unlock_irqrestore(&q->lock, flags);
++ }
++}
++
++struct _urb *_urb_dequeue(struct _urb_queue *q);
++
++#ifndef container_of
++#define container_of(ptr, type, member) ({ \
++ const typeof( ((type *)0)->member ) *__mptr = (ptr); \
++ (type *)( (char *)__mptr - offsetof(type,member) );})
++#endif
++
++struct hci_usb {
++ struct hci_dev hdev;
++
++ unsigned long state;
++
++ struct usb_device *udev;
++
++ struct usb_endpoint_descriptor *bulk_in_ep;
++ struct usb_endpoint_descriptor *bulk_out_ep;
++ struct usb_endpoint_descriptor *intr_in_ep;
++
++ struct usb_interface *isoc_iface;
++ struct usb_endpoint_descriptor *isoc_out_ep;
++ struct usb_endpoint_descriptor *isoc_in_ep;
++
++ __u8 ctrl_req;
++
++ struct sk_buff_head transmit_q[4];
++ struct sk_buff *reassembly[4]; // Reassembly buffers
++
++ rwlock_t completion_lock;
++
++ atomic_t pending_tx[4]; // Number of pending requests
++ struct _urb_queue pending_q[4]; // Pending requests
++ struct _urb_queue completed_q[4]; // Completed requests
++};
++
++/* States */
++#define HCI_USB_TX_PROCESS 1
++#define HCI_USB_TX_WAKEUP 2
++
++#endif /* __KERNEL__ */
+diff -urN linux-2.4.18/drivers/bluetooth/hci_vhci.c linux-2.4.18-mh15/drivers/bluetooth/hci_vhci.c
+--- linux-2.4.18/drivers/bluetooth/hci_vhci.c 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_vhci.c 2004-08-01 16:26:23.000000000 +0200
+@@ -25,9 +25,9 @@
+ /*
+ * BlueZ HCI virtual device driver.
+ *
+- * $Id: hci_vhci.c,v 1.3 2001/08/03 04:19:50 maxk Exp $
++ * $Id: hci_vhci.c,v 1.3 2002/04/17 17:37:20 maxk Exp $
+ */
+-#define VERSION "1.0"
++#define VERSION "1.1"
+
+ #include <linux/config.h>
+ #include <linux/module.h>
+@@ -49,43 +49,56 @@
+ #include <asm/uaccess.h>
+
+ #include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+ #include <net/bluetooth/hci_core.h>
+-#include <net/bluetooth/hci_vhci.h>
++#include "hci_vhci.h"
+
+ /* HCI device part */
+
+-int hci_vhci_open(struct hci_dev *hdev)
++static int hci_vhci_open(struct hci_dev *hdev)
+ {
+- hdev->flags |= HCI_RUNNING;
++ set_bit(HCI_RUNNING, &hdev->flags);
+ return 0;
+ }
+
+-int hci_vhci_flush(struct hci_dev *hdev)
++static int hci_vhci_flush(struct hci_dev *hdev)
+ {
+ struct hci_vhci_struct *hci_vhci = (struct hci_vhci_struct *) hdev->driver_data;
+ skb_queue_purge(&hci_vhci->readq);
+ return 0;
+ }
+
+-int hci_vhci_close(struct hci_dev *hdev)
++static int hci_vhci_close(struct hci_dev *hdev)
+ {
+- hdev->flags &= ~HCI_RUNNING;
++ if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
++
+ hci_vhci_flush(hdev);
+ return 0;
+ }
+
+-int hci_vhci_send_frame(struct sk_buff *skb)
++static void hci_vhci_destruct(struct hci_dev *hdev)
++{
++ struct hci_vhci_struct *vhci;
++
++ if (!hdev) return;
++
++ vhci = (struct hci_vhci_struct *) hdev->driver_data;
++ kfree(vhci);
++
++ MOD_DEC_USE_COUNT;
++}
++
++static int hci_vhci_send_frame(struct sk_buff *skb)
+ {
+ struct hci_dev* hdev = (struct hci_dev *) skb->dev;
+ struct hci_vhci_struct *hci_vhci;
+
+ if (!hdev) {
+- ERR("Frame for uknown device (hdev=NULL)");
++ BT_ERR("Frame for uknown device (hdev=NULL)");
+ return -ENODEV;
+ }
+
+- if (!(hdev->flags & HCI_RUNNING))
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
+ return -EBUSY;
+
+ hci_vhci = (struct hci_vhci_struct *) hdev->driver_data;
+@@ -188,7 +201,7 @@
+
+ add_wait_queue(&hci_vhci->read_wait, &wait);
+ while (count) {
+- current->state = TASK_INTERRUPTIBLE;
++ set_current_state(TASK_INTERRUPTIBLE);
+
+ /* Read frames from device queue */
+ if (!(skb = skb_dequeue(&hci_vhci->readq))) {
+@@ -214,8 +227,7 @@
+ kfree_skb(skb);
+ break;
+ }
+-
+- current->state = TASK_RUNNING;
++ set_current_state(TASK_RUNNING);
+ remove_wait_queue(&hci_vhci->read_wait, &wait);
+
+ return ret;
+@@ -270,11 +282,13 @@
+ hdev->close = hci_vhci_close;
+ hdev->flush = hci_vhci_flush;
+ hdev->send = hci_vhci_send_frame;
++ hdev->destruct = hci_vhci_destruct;
+
+ if (hci_register_dev(hdev) < 0) {
+ kfree(hci_vhci);
+ return -EBUSY;
+ }
++ MOD_INC_USE_COUNT;
+
+ file->private_data = hci_vhci;
+ return 0;
+@@ -285,12 +299,10 @@
+ struct hci_vhci_struct *hci_vhci = (struct hci_vhci_struct *) file->private_data;
+
+ if (hci_unregister_dev(&hci_vhci->hdev) < 0) {
+- ERR("Can't unregister HCI device %s", hci_vhci->hdev.name);
++ BT_ERR("Can't unregister HCI device %s", hci_vhci->hdev.name);
+ }
+
+- kfree(hci_vhci);
+ file->private_data = NULL;
+-
+ return 0;
+ }
+
+@@ -315,12 +327,12 @@
+
+ int __init hci_vhci_init(void)
+ {
+- INF("BlueZ VHCI driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
++ BT_INFO("BlueZ VHCI driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
+ VERSION);
+- INF("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
++ BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
+
+ if (misc_register(&hci_vhci_miscdev)) {
+- ERR("Can't register misc device %d\n", VHCI_MINOR);
++ BT_ERR("Can't register misc device %d\n", VHCI_MINOR);
+ return -EIO;
+ }
+
+@@ -337,4 +349,4 @@
+
+ MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
+ MODULE_DESCRIPTION("BlueZ VHCI driver ver " VERSION);
+-MODULE_LICENSE("GPL");
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/drivers/bluetooth/hci_vhci.h linux-2.4.18-mh15/drivers/bluetooth/hci_vhci.h
+--- linux-2.4.18/drivers/bluetooth/hci_vhci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/hci_vhci.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,50 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_vhci.h,v 1.1.1.1 2002/03/08 21:03:15 maxk Exp $
++ */
++
++#ifndef __HCI_VHCI_H
++#define __HCI_VHCI_H
++
++#ifdef __KERNEL__
++
++struct hci_vhci_struct {
++ struct hci_dev hdev;
++ __u32 flags;
++ wait_queue_head_t read_wait;
++ struct sk_buff_head readq;
++ struct fasync_struct *fasync;
++};
++
++/* VHCI device flags */
++#define VHCI_FASYNC 0x0010
++
++#endif /* __KERNEL__ */
++
++#define VHCI_DEV "/dev/vhci"
++#define VHCI_MINOR 250
++
++#endif /* __HCI_VHCI_H */
+diff -urN linux-2.4.18/drivers/bluetooth/Makefile linux-2.4.18-mh15/drivers/bluetooth/Makefile
+--- linux-2.4.18/drivers/bluetooth/Makefile 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/drivers/bluetooth/Makefile 2004-08-01 16:26:23.000000000 +0200
+@@ -1,11 +1,27 @@
+ #
+-# Makefile for Bluetooth HCI device drivers.
++# Makefile for the Linux Bluetooth HCI device drivers
+ #
+
+ O_TARGET := bluetooth.o
+
++list-multi := hci_uart.o
++
+ obj-$(CONFIG_BLUEZ_HCIUSB) += hci_usb.o
+-obj-$(CONFIG_BLUEZ_HCIUART) += hci_uart.o
+ obj-$(CONFIG_BLUEZ_HCIVHCI) += hci_vhci.o
+
++obj-$(CONFIG_BLUEZ_HCIUART) += hci_uart.o
++uart-y := hci_ldisc.o
++uart-$(CONFIG_BLUEZ_HCIUART_H4) += hci_h4.o
++uart-$(CONFIG_BLUEZ_HCIUART_BCSP) += hci_bcsp.o
++
++obj-$(CONFIG_BLUEZ_HCIBFUSB) += bfusb.o
++
++obj-$(CONFIG_BLUEZ_HCIDTL1) += dtl1_cs.o
++obj-$(CONFIG_BLUEZ_HCIBT3C) += bt3c_cs.o
++obj-$(CONFIG_BLUEZ_HCIBLUECARD) += bluecard_cs.o
++obj-$(CONFIG_BLUEZ_HCIBTUART) += btuart_cs.o
++
+ include $(TOPDIR)/Rules.make
++
++hci_uart.o: $(uart-y)
++ $(LD) -r -o $@ $(uart-y)
+diff -urN linux-2.4.18/drivers/bluetooth/Makefile.lib linux-2.4.18-mh15/drivers/bluetooth/Makefile.lib
+--- linux-2.4.18/drivers/bluetooth/Makefile.lib 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/bluetooth/Makefile.lib 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,2 @@
++obj-$(CONFIG_BLUEZ_HCIBFUSB) += firmware_class.o
++obj-$(CONFIG_BLUEZ_HCIBT3C) += firmware_class.o
+diff -urN linux-2.4.18/drivers/char/pcmcia/serial_cs.c linux-2.4.18-mh15/drivers/char/pcmcia/serial_cs.c
+--- linux-2.4.18/drivers/char/pcmcia/serial_cs.c 2001-12-21 18:41:54.000000000 +0100
++++ linux-2.4.18-mh15/drivers/char/pcmcia/serial_cs.c 2004-08-01 16:26:23.000000000 +0200
+@@ -2,7 +2,7 @@
+
+ A driver for PCMCIA serial devices
+
+- serial_cs.c 1.128 2001/10/18 12:18:35
++ serial_cs.c 1.138 2002/10/25 06:24:52
+
+ The contents of this file are subject to the Mozilla Public
+ License Version 1.1 (the "License"); you may not use this file
+@@ -69,14 +69,14 @@
+ static int irq_list[4] = { -1 };
+ MODULE_PARM(irq_list, "1-4i");
+
+-/* Enable the speaker? */
+-INT_MODULE_PARM(do_sound, 1);
++INT_MODULE_PARM(do_sound, 1); /* Enable the speaker? */
++INT_MODULE_PARM(buggy_uart, 0); /* Skip strict UART tests? */
+
+ #ifdef PCMCIA_DEBUG
+ INT_MODULE_PARM(pc_debug, PCMCIA_DEBUG);
+ #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
+ static char *version =
+-"serial_cs.c 1.128 2001/10/18 12:18:35 (David Hinds)";
++"serial_cs.c 1.138 2002/10/25 06:24:52 (David Hinds)";
+ #else
+ #define DEBUG(n, args...)
+ #endif
+@@ -95,6 +95,7 @@
+ { MANFID_OMEGA, PRODID_OMEGA_QSP_100, 4 },
+ { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS232, 2 },
+ { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS232_D1, 2 },
++ { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS232_D2, 2 },
+ { MANFID_QUATECH, PRODID_QUATECH_QUAD_RS232, 4 },
+ { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS422, 2 },
+ { MANFID_QUATECH, PRODID_QUATECH_QUAD_RS422, 4 },
+@@ -148,7 +149,7 @@
+ client_reg_t client_reg;
+ dev_link_t *link;
+ int i, ret;
+-
++
+ DEBUG(0, "serial_attach()\n");
+
+ /* Create new serial device */
+@@ -160,7 +161,7 @@
+ link->release.function = &serial_release;
+ link->release.data = (u_long)link;
+ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
+- link->io.NumPorts1 = 8;
++ link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
+ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
+ link->irq.IRQInfo1 = IRQ_INFO2_VALID|IRQ_LEVEL_ID;
+ if (irq_list[0] == -1)
+@@ -169,13 +170,12 @@
+ for (i = 0; i < 4; i++)
+ link->irq.IRQInfo2 |= 1 << irq_list[i];
+ link->conf.Attributes = CONF_ENABLE_IRQ;
+- link->conf.Vcc = 50;
+ if (do_sound) {
+ link->conf.Attributes |= CONF_ENABLE_SPKR;
+ link->conf.Status = CCSR_AUDIO_ENA;
+ }
+ link->conf.IntType = INT_MEMORY_AND_IO;
+-
++
+ /* Register with Card Services */
+ link->next = dev_list;
+ dev_list = link;
+@@ -194,7 +194,7 @@
+ serial_detach(link);
+ return NULL;
+ }
+-
++
+ return link;
+ } /* serial_attach */
+
+@@ -214,7 +214,7 @@
+ int ret;
+
+ DEBUG(0, "serial_detach(0x%p)\n", link);
+-
++
+ /* Locate device structure */
+ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
+ if (*linkp == link) break;
+@@ -224,17 +224,17 @@
+ del_timer(&link->release);
+ if (link->state & DEV_CONFIG)
+ serial_release((u_long)link);
+-
++
+ if (link->handle) {
+ ret = CardServices(DeregisterClient, link->handle);
+ if (ret != CS_SUCCESS)
+ cs_error(link->handle, DeregisterClient, ret);
+ }
+-
++
+ /* Unlink device structure, free bits */
+ *linkp = link->next;
+ kfree(info);
+-
++
+ } /* serial_detach */
+
+ /*====================================================================*/
+@@ -243,18 +243,20 @@
+ {
+ struct serial_struct serial;
+ int line;
+-
++
+ memset(&serial, 0, sizeof(serial));
+ serial.port = port;
+ serial.irq = irq;
+ serial.flags = ASYNC_SKIP_TEST | ASYNC_SHARE_IRQ;
++ if (buggy_uart)
++ serial.flags |= ASYNC_BUGGY_UART;
+ line = register_serial(&serial);
+ if (line < 0) {
+ printk(KERN_NOTICE "serial_cs: register_serial() at 0x%04lx,"
+ " irq %d failed\n", (u_long)serial.port, serial.irq);
+ return -1;
+ }
+-
++
+ info->line[info->ndev] = line;
+ sprintf(info->node[info->ndev].dev_name, "ttyS%d", line);
+ info->node[info->ndev].major = TTY_MAJOR;
+@@ -262,7 +264,7 @@
+ if (info->ndev > 0)
+ info->node[info->ndev-1].next = &info->node[info->ndev];
+ info->ndev++;
+-
++
+ return 0;
+ }
+
+@@ -313,7 +315,10 @@
+ return setup_serial(info, port, config.AssignedIRQ);
+ }
+ link->conf.Vcc = config.Vcc;
+-
++
++ link->io.NumPorts1 = 8;
++ link->io.NumPorts2 = 0;
++
+ /* First pass: look for a config entry that looks normal. */
+ tuple.TupleData = (cisdata_t *)buf;
+ tuple.TupleOffset = 0; tuple.TupleDataMax = 255;
+@@ -340,7 +345,7 @@
+ i = next_tuple(handle, &tuple, &parse);
+ }
+ }
+-
++
+ /* Second pass: try to find an entry that isn't picky about
+ its base address, then try to grab any standard serial port
+ address, and finally try to get any free port. */
+@@ -352,8 +357,7 @@
+ for (j = 0; j < 5; j++) {
+ link->io.BasePort1 = base[j];
+ link->io.IOAddrLines = base[j] ? 16 : 3;
+- i = CardServices(RequestIO, link->handle,
+- &link->io);
++ i = CardServices(RequestIO, link->handle, &link->io);
+ if (i == CS_SUCCESS) goto found_port;
+ }
+ }
+@@ -365,7 +369,7 @@
+ cs_error(link->handle, RequestIO, i);
+ return -1;
+ }
+-
++
+ i = CardServices(RequestIRQ, link->handle, &link->irq);
+ if (i != CS_SUCCESS) {
+ cs_error(link->handle, RequestIRQ, i);
+@@ -390,8 +394,12 @@
+ u_char buf[256];
+ cisparse_t parse;
+ cistpl_cftable_entry_t *cf = &parse.cftable_entry;
++ config_info_t config;
+ int i, base2 = 0;
+
++ CardServices(GetConfigurationInfo, handle, &config);
++ link->conf.Vcc = config.Vcc;
++
+ tuple.TupleData = (cisdata_t *)buf;
+ tuple.TupleOffset = 0; tuple.TupleDataMax = 255;
+ tuple.Attributes = 0;
+@@ -433,12 +441,12 @@
+ i = next_tuple(handle, &tuple, &parse);
+ }
+ }
+-
++
+ if (i != CS_SUCCESS) {
+- cs_error(link->handle, RequestIO, i);
+- return -1;
++ /* At worst, try to configure as a single port */
++ return simple_config(link);
+ }
+-
++
+ i = CardServices(RequestIRQ, link->handle, &link->irq);
+ if (i != CS_SUCCESS) {
+ cs_error(link->handle, RequestIRQ, i);
+@@ -454,14 +462,27 @@
+ cs_error(link->handle, RequestConfiguration, i);
+ return -1;
+ }
+-
++
++ /* The Oxford Semiconductor OXCF950 cards are in fact single-port:
++ 8 registers are for the UART, the others are extra registers */
++ if (info->manfid == MANFID_OXSEMI) {
++ if (cf->index == 1 || cf->index == 3) {
++ setup_serial(info, base2, link->irq.AssignedIRQ);
++ outb(12,link->io.BasePort1+1);
++ } else {
++ setup_serial(info, link->io.BasePort1, link->irq.AssignedIRQ);
++ outb(12,base2+1);
++ }
++ return 0;
++ }
++
+ setup_serial(info, link->io.BasePort1, link->irq.AssignedIRQ);
+ /* The Nokia cards are not really multiport cards */
+ if (info->manfid == MANFID_NOKIA)
+ return 0;
+ for (i = 0; i < info->multi-1; i++)
+ setup_serial(info, base2+(8*i), link->irq.AssignedIRQ);
+-
++
+ return 0;
+ }
+
+@@ -500,7 +521,7 @@
+ }
+ link->conf.ConfigBase = parse.config.base;
+ link->conf.Present = parse.config.rmask[0];
+-
++
+ /* Configure card */
+ link->state |= DEV_CONFIG;
+
+@@ -508,8 +529,8 @@
+ tuple.DesiredTuple = CISTPL_LONGLINK_MFC;
+ tuple.Attributes = TUPLE_RETURN_COMMON | TUPLE_RETURN_LINK;
+ info->multi = (first_tuple(handle, &tuple, &parse) == CS_SUCCESS);
+-
+- /* Is this a multiport card? */
++
++ /* Scan list of known multiport card ID's */
+ tuple.DesiredTuple = CISTPL_MANFID;
+ if (first_tuple(handle, &tuple, &parse) == CS_SUCCESS) {
+ info->manfid = le16_to_cpu(buf[0]);
+@@ -537,15 +558,15 @@
+ info->multi = 2;
+ }
+ }
+-
++
+ if (info->multi > 1)
+ multi_config(link);
+ else
+ simple_config(link);
+-
++
+ if (info->ndev == 0)
+ goto failed;
+-
++
+ if (info->manfid == MANFID_IBM) {
+ conf_reg_t reg = { 0, CS_READ, 0x800, 0 };
+ CS_CHECK(AccessConfigurationRegister, link->handle, &reg);
+@@ -562,6 +583,7 @@
+ cs_error(link->handle, last_fn, last_ret);
+ failed:
+ serial_release((u_long)link);
++ link->state &= ~DEV_CONFIG_PENDING;
+
+ } /* serial_config */
+
+@@ -569,7 +591,7 @@
+
+ After a card is removed, serial_release() will unregister the net
+ device, and release the PCMCIA configuration.
+-
++
+ ======================================================================*/
+
+ void serial_release(u_long arg)
+@@ -577,7 +599,7 @@
+ dev_link_t *link = (dev_link_t *)arg;
+ serial_info_t *info = link->priv;
+ int i;
+-
++
+ DEBUG(0, "serial_release(0x%p)\n", link);
+
+ for (i = 0; i < info->ndev; i++) {
+@@ -590,7 +612,7 @@
+ CardServices(ReleaseIO, link->handle, &link->io);
+ CardServices(ReleaseIRQ, link->handle, &link->irq);
+ }
+-
++
+ link->state &= ~DEV_CONFIG;
+
+ } /* serial_release */
+@@ -601,7 +623,7 @@
+ stuff to run after an event is received. A CARD_REMOVAL event
+ also sets some flags to discourage the serial drivers from
+ talking to the ports.
+-
++
+ ======================================================================*/
+
+ static int serial_event(event_t event, int priority,
+@@ -609,9 +631,9 @@
+ {
+ dev_link_t *link = args->client_data;
+ serial_info_t *info = link->priv;
+-
++
+ DEBUG(1, "serial_event(0x%06x)\n", event);
+-
++
+ switch (event) {
+ case CS_EVENT_CARD_REMOVAL:
+ link->state &= ~DEV_PRESENT;
+@@ -650,7 +672,7 @@
+ if (serv.Revision != CS_RELEASE_CODE) {
+ printk(KERN_NOTICE "serial_cs: Card Services release "
+ "does not match!\n");
+- return -1;
++ return -EINVAL;
+ }
+ register_pccard_driver(&dev_info, &serial_attach, &serial_detach);
+ return 0;
+diff -urN linux-2.4.18/drivers/input/Config.in linux-2.4.18-mh15/drivers/input/Config.in
+--- linux-2.4.18/drivers/input/Config.in 2001-09-13 00:34:06.000000000 +0200
++++ linux-2.4.18-mh15/drivers/input/Config.in 2004-08-01 16:26:23.000000000 +0200
+@@ -14,5 +14,6 @@
+ fi
+ dep_tristate ' Joystick support' CONFIG_INPUT_JOYDEV $CONFIG_INPUT
+ dep_tristate ' Event interface support' CONFIG_INPUT_EVDEV $CONFIG_INPUT
++dep_tristate ' User level driver support' CONFIG_INPUT_UINPUT $CONFIG_INPUT
+
+ endmenu
+diff -urN linux-2.4.18/drivers/input/keybdev.c linux-2.4.18-mh15/drivers/input/keybdev.c
+--- linux-2.4.18/drivers/input/keybdev.c 2001-10-11 18:14:32.000000000 +0200
++++ linux-2.4.18-mh15/drivers/input/keybdev.c 2004-08-01 16:26:23.000000000 +0200
+@@ -154,16 +154,18 @@
+
+ static struct input_handler keybdev_handler;
+
++static unsigned int ledstate = 0xff;
++
+ void keybdev_ledfunc(unsigned int led)
+ {
+ struct input_handle *handle;
+
+- for (handle = keybdev_handler.handle; handle; handle = handle->hnext) {
++ ledstate = led;
+
++ for (handle = keybdev_handler.handle; handle; handle = handle->hnext) {
+ input_event(handle->dev, EV_LED, LED_SCROLLL, !!(led & 0x01));
+ input_event(handle->dev, EV_LED, LED_NUML, !!(led & 0x02));
+ input_event(handle->dev, EV_LED, LED_CAPSL, !!(led & 0x04));
+-
+ }
+ }
+
+@@ -202,6 +204,12 @@
+
+ // printk(KERN_INFO "keybdev.c: Adding keyboard: input%d\n", dev->number);
+
++ if (ledstate != 0xff) {
++ input_event(dev, EV_LED, LED_SCROLLL, !!(ledstate & 0x01));
++ input_event(dev, EV_LED, LED_NUML, !!(ledstate & 0x02));
++ input_event(dev, EV_LED, LED_CAPSL, !!(ledstate & 0x04));
++ }
++
+ return handle;
+ }
+
+diff -urN linux-2.4.18/drivers/input/Makefile linux-2.4.18-mh15/drivers/input/Makefile
+--- linux-2.4.18/drivers/input/Makefile 2000-12-29 23:07:22.000000000 +0100
++++ linux-2.4.18-mh15/drivers/input/Makefile 2004-08-01 16:26:23.000000000 +0200
+@@ -24,6 +24,7 @@
+ obj-$(CONFIG_INPUT_MOUSEDEV) += mousedev.o
+ obj-$(CONFIG_INPUT_JOYDEV) += joydev.o
+ obj-$(CONFIG_INPUT_EVDEV) += evdev.o
++obj-$(CONFIG_INPUT_UINPUT) += uinput.o
+
+ # The global Rules.make.
+
+diff -urN linux-2.4.18/drivers/input/uinput.c linux-2.4.18-mh15/drivers/input/uinput.c
+--- linux-2.4.18/drivers/input/uinput.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/drivers/input/uinput.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,428 @@
++/*
++ * User level driver support for input subsystem
++ *
++ * Heavily based on evdev.c by Vojtech Pavlik
++ *
++ * 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
++ *
++ * Author: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>
++ *
++ * Changes/Revisions:
++ * 0.1 20/06/2002
++ * - first public version
++ */
++
++#include <linux/poll.h>
++#include <linux/slab.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/input.h>
++#include <linux/smp_lock.h>
++#include <linux/fs.h>
++#include <linux/miscdevice.h>
++#include <linux/uinput.h>
++
++static int uinput_dev_open(struct input_dev *dev)
++{
++ return 0;
++}
++
++static void uinput_dev_close(struct input_dev *dev)
++{
++}
++
++static int uinput_dev_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
++{
++ struct uinput_device *udev;
++
++ udev = (struct uinput_device *)dev->private;
++
++ udev->buff[udev->head].type = type;
++ udev->buff[udev->head].code = code;
++ udev->buff[udev->head].value = value;
++ do_gettimeofday(&udev->buff[udev->head].time);
++ udev->head = (udev->head + 1) % UINPUT_BUFFER_SIZE;
++
++ wake_up_interruptible(&udev->waitq);
++
++ return 0;
++}
++
++static int uinput_dev_upload_effect(struct input_dev *dev, struct ff_effect *effect)
++{
++ return 0;
++}
++
++static int uinput_dev_erase_effect(struct input_dev *dev, int effect_id)
++{
++ return 0;
++}
++
++static int uinput_create_device(struct uinput_device *udev)
++{
++ if (!udev->dev->name) {
++ printk(KERN_DEBUG "%s: write device info first\n", UINPUT_NAME);
++ return -EINVAL;
++ }
++
++ udev->dev->open = uinput_dev_open;
++ udev->dev->close = uinput_dev_close;
++ udev->dev->event = uinput_dev_event;
++ udev->dev->upload_effect = uinput_dev_upload_effect;
++ udev->dev->erase_effect = uinput_dev_erase_effect;
++ udev->dev->private = udev;
++
++ init_waitqueue_head(&(udev->waitq));
++
++ input_register_device(udev->dev);
++
++ set_bit(UIST_CREATED, &(udev->state));
++
++ return 0;
++}
++
++static int uinput_destroy_device(struct uinput_device *udev)
++{
++ if (!test_bit(UIST_CREATED, &(udev->state))) {
++ printk(KERN_WARNING "%s: create the device first\n", UINPUT_NAME);
++ return -EINVAL;
++ }
++
++ input_unregister_device(udev->dev);
++
++ clear_bit(UIST_CREATED, &(udev->state));
++
++ return 0;
++}
++
++static int uinput_open(struct inode *inode, struct file *file)
++{
++ struct uinput_device *newdev;
++ struct input_dev *newinput;
++
++ newdev = kmalloc(sizeof(struct uinput_device), GFP_KERNEL);
++ if (!newdev)
++ goto error;
++ memset(newdev, 0, sizeof(struct uinput_device));
++
++ newinput = kmalloc(sizeof(struct input_dev), GFP_KERNEL);
++ if (!newinput)
++ goto cleanup;
++ memset(newinput, 0, sizeof(struct input_dev));
++
++ newdev->dev = newinput;
++
++ file->private_data = newdev;
++
++ return 0;
++cleanup:
++ kfree(newdev);
++error:
++ return -ENOMEM;
++}
++
++static int uinput_validate_absbits(struct input_dev *dev)
++{
++ unsigned int cnt;
++ int retval = 0;
++
++ for (cnt = 0; cnt < ABS_MAX; cnt++) {
++ if (!test_bit(cnt, dev->absbit))
++ continue;
++
++ if (/*!dev->absmin[cnt] || !dev->absmax[cnt] || */
++ (dev->absmax[cnt] <= dev->absmin[cnt])) {
++ printk(KERN_DEBUG
++ "%s: invalid abs[%02x] min:%d max:%d\n",
++ UINPUT_NAME, cnt,
++ dev->absmin[cnt], dev->absmax[cnt]);
++ retval = -EINVAL;
++ break;
++ }
++
++ if ((dev->absflat[cnt] < dev->absmin[cnt]) ||
++ (dev->absflat[cnt] > dev->absmax[cnt])) {
++ printk(KERN_DEBUG
++ "%s: absflat[%02x] out of range: %d "
++ "(min:%d/max:%d)\n",
++ UINPUT_NAME, cnt, dev->absflat[cnt],
++ dev->absmin[cnt], dev->absmax[cnt]);
++ retval = -EINVAL;
++ break;
++ }
++ }
++ return retval;
++}
++
++static int uinput_alloc_device(struct file *file, const char *buffer, size_t count)
++{
++ struct uinput_user_dev *user_dev;
++ struct input_dev *dev;
++ struct uinput_device *udev;
++ int size,
++ retval;
++
++ retval = count;
++
++ udev = (struct uinput_device *)file->private_data;
++ dev = udev->dev;
++
++ user_dev = kmalloc(sizeof(*user_dev), GFP_KERNEL);
++ if (!user_dev) {
++ retval = -ENOMEM;
++ goto exit;
++ }
++
++ if (copy_from_user(user_dev, buffer, sizeof(struct uinput_user_dev))) {
++ retval = -EFAULT;
++ goto exit;
++ }
++
++ if (NULL != dev->name)
++ kfree(dev->name);
++
++ size = strnlen(user_dev->name, UINPUT_MAX_NAME_SIZE) + 1;
++ dev->name = kmalloc(size, GFP_KERNEL);
++ if (!dev->name) {
++ retval = -ENOMEM;
++ goto exit;
++ }
++
++ strncpy(dev->name, user_dev->name, size);
++ dev->idbus = user_dev->idbus;
++ dev->idvendor = user_dev->idvendor;
++ dev->idproduct = user_dev->idproduct;
++ dev->idversion = user_dev->idversion;
++ dev->ff_effects_max = user_dev->ff_effects_max;
++
++ size = sizeof(int) * (ABS_MAX + 1);
++ memcpy(dev->absmax, user_dev->absmax, size);
++ memcpy(dev->absmin, user_dev->absmin, size);
++ memcpy(dev->absfuzz, user_dev->absfuzz, size);
++ memcpy(dev->absflat, user_dev->absflat, size);
++
++ /* check if absmin/absmax/absfuzz/absflat are filled as
++ * told in Documentation/input/input-programming.txt */
++ if (test_bit(EV_ABS, dev->evbit)) {
++ retval = uinput_validate_absbits(dev);
++ if (retval < 0)
++ kfree(dev->name);
++ }
++
++exit:
++ kfree(user_dev);
++ return retval;
++}
++
++static ssize_t uinput_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
++{
++ struct uinput_device *udev = file->private_data;
++
++ if (test_bit(UIST_CREATED, &(udev->state))) {
++ struct input_event ev;
++
++ if (copy_from_user(&ev, buffer, sizeof(struct input_event)))
++ return -EFAULT;
++ input_event(udev->dev, ev.type, ev.code, ev.value);
++ }
++ else
++ count = uinput_alloc_device(file, buffer, count);
++
++ return count;
++}
++
++static ssize_t uinput_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
++{
++ struct uinput_device *udev = file->private_data;
++ int retval = 0;
++
++ if (!test_bit(UIST_CREATED, &(udev->state)))
++ return -ENODEV;
++
++ if ((udev->head == udev->tail) && (file->f_flags & O_NONBLOCK))
++ return -EAGAIN;
++
++ retval = wait_event_interruptible(udev->waitq,
++ (udev->head != udev->tail) ||
++ !test_bit(UIST_CREATED, &(udev->state)));
++
++ if (retval)
++ return retval;
++
++ if (!test_bit(UIST_CREATED, &(udev->state)))
++ return -ENODEV;
++
++ while ((udev->head != udev->tail) &&
++ (retval + sizeof(struct input_event) <= count)) {
++ if (copy_to_user(buffer + retval, &(udev->buff[udev->tail]),
++ sizeof(struct input_event))) return -EFAULT;
++ udev->tail = (udev->tail + 1) % UINPUT_BUFFER_SIZE;
++ retval += sizeof(struct input_event);
++ }
++
++ return retval;
++}
++
++static unsigned int uinput_poll(struct file *file, poll_table *wait)
++{
++ struct uinput_device *udev = file->private_data;
++
++ poll_wait(file, &udev->waitq, wait);
++
++ if (udev->head != udev->tail)
++ return POLLIN | POLLRDNORM;
++
++ return 0;
++}
++
++static int uinput_burn_device(struct uinput_device *udev)
++{
++ if (test_bit(UIST_CREATED, &(udev->state)))
++ uinput_destroy_device(udev);
++
++ kfree(udev->dev);
++ kfree(udev);
++
++ return 0;
++}
++
++static int uinput_close(struct inode *inode, struct file *file)
++{
++ return uinput_burn_device((struct uinput_device *)file->private_data);
++}
++
++static int uinput_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
++{
++ int retval = 0;
++ struct uinput_device *udev;
++
++ udev = (struct uinput_device *)file->private_data;
++
++ /* device attributes can not be changed after the device is created */
++ if (cmd >= UI_SET_EVBIT && test_bit(UIST_CREATED, &(udev->state)))
++ return -EINVAL;
++
++ switch (cmd) {
++ case UI_DEV_CREATE:
++ retval = uinput_create_device(udev);
++ break;
++
++ case UI_DEV_DESTROY:
++ retval = uinput_destroy_device(udev);
++ break;
++
++ case UI_SET_EVBIT:
++ if (arg > EV_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->evbit);
++ break;
++
++ case UI_SET_KEYBIT:
++ if (arg > KEY_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->keybit);
++ break;
++
++ case UI_SET_RELBIT:
++ if (arg > REL_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->relbit);
++ break;
++
++ case UI_SET_ABSBIT:
++ if (arg > ABS_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->absbit);
++ break;
++
++ case UI_SET_MSCBIT:
++ if (arg > MSC_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->mscbit);
++ break;
++
++ case UI_SET_LEDBIT:
++ if (arg > LED_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->ledbit);
++ break;
++
++ case UI_SET_SNDBIT:
++ if (arg > SND_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->sndbit);
++ break;
++
++ case UI_SET_FFBIT:
++ if (arg > FF_MAX) {
++ retval = -EINVAL;
++ break;
++ }
++ set_bit(arg, udev->dev->ffbit);
++ break;
++
++ default:
++ retval = -EFAULT;
++ }
++ return retval;
++}
++
++struct file_operations uinput_fops = {
++ owner: THIS_MODULE,
++ open: uinput_open,
++ release: uinput_close,
++ read: uinput_read,
++ write: uinput_write,
++ poll: uinput_poll,
++ ioctl: uinput_ioctl,
++};
++
++static struct miscdevice uinput_misc = {
++ fops: &uinput_fops,
++ minor: UINPUT_MINOR,
++ name: UINPUT_NAME,
++};
++
++static int __init uinput_init(void)
++{
++ return misc_register(&uinput_misc);
++}
++
++static void __exit uinput_exit(void)
++{
++ misc_deregister(&uinput_misc);
++}
++
++MODULE_AUTHOR("Aristeu Sergio Rozanski Filho");
++MODULE_DESCRIPTION("User level driver support for input subsystem");
++MODULE_LICENSE("GPL");
++
++module_init(uinput_init);
++module_exit(uinput_exit);
++
+diff -urN linux-2.4.18/drivers/isdn/avmb1/capidrv.c linux-2.4.18-mh15/drivers/isdn/avmb1/capidrv.c
+--- linux-2.4.18/drivers/isdn/avmb1/capidrv.c 2001-12-21 18:41:54.000000000 +0100
++++ linux-2.4.18-mh15/drivers/isdn/avmb1/capidrv.c 2004-08-01 16:26:23.000000000 +0200
+@@ -514,13 +514,25 @@
+
+ static void send_message(capidrv_contr * card, _cmsg * cmsg)
+ {
+- struct sk_buff *skb;
+- size_t len;
++ struct sk_buff *skb;
++ size_t len;
++ u16 err;
++
+ capi_cmsg2message(cmsg, cmsg->buf);
+ len = CAPIMSG_LEN(cmsg->buf);
+ skb = alloc_skb(len, GFP_ATOMIC);
++ if(!skb) {
++ printk(KERN_ERR "no skb len(%d) memory\n", len);
++ return;
++ }
+ memcpy(skb_put(skb, len), cmsg->buf, len);
+- (*capifuncs->capi_put_message) (global.appid, skb);
++ err = (*capifuncs->capi_put_message) (global.appid, skb);
++ if (err) {
++ printk(KERN_WARNING "%s: capi_put_message error: %04x\n",
++ __FUNCTION__, err);
++ kfree_skb(skb);
++ return;
++ }
+ global.nsentctlpkt++;
+ }
+
+@@ -2179,10 +2191,10 @@
+ free_ncci(card, card->bchans[card->nbchan-1].nccip);
+ if (card->bchans[card->nbchan-1].plcip)
+ free_plci(card, card->bchans[card->nbchan-1].plcip);
+- if (card->plci_list)
+- printk(KERN_ERR "capidrv: bug in free_plci()\n");
+ card->nbchan--;
+ }
++ if (card->plci_list)
++ printk(KERN_ERR "capidrv: bug in free_plci()\n");
+ kfree(card->bchans);
+ card->bchans = 0;
+
+diff -urN linux-2.4.18/drivers/isdn/avmb1/kcapi.c linux-2.4.18-mh15/drivers/isdn/avmb1/kcapi.c
+--- linux-2.4.18/drivers/isdn/avmb1/kcapi.c 2001-12-21 18:41:54.000000000 +0100
++++ linux-2.4.18-mh15/drivers/isdn/avmb1/kcapi.c 2004-08-01 16:26:23.000000000 +0200
+@@ -545,7 +545,13 @@
+ static void notify_up(__u32 contr)
+ {
+ struct capi_interface_user *p;
++ __u16 appl;
+
++ for (appl = 1; appl <= CAPI_MAXAPPL; appl++) {
++ if (!VALID_APPLID(appl)) continue;
++ if (APPL(appl)->releasing) continue;
++ CARD(contr)->driver->register_appl(CARD(contr), appl, &APPL(appl)->rparam);
++ }
+ printk(KERN_NOTICE "kcapi: notify up contr %d\n", contr);
+ spin_lock(&capi_users_lock);
+ for (p = capi_users; p; p = p->next) {
+@@ -705,12 +711,16 @@
+ nextpp = &(*pp)->next;
+ }
+ }
+- APPL(appl)->releasing--;
+- if (APPL(appl)->releasing <= 0) {
+- APPL(appl)->signal = 0;
+- APPL_MARK_FREE(appl);
+- printk(KERN_INFO "kcapi: appl %d down\n", appl);
+- }
++ if (APPL(appl)->releasing) { /* only release if the application was marked for release */
++ printk(KERN_DEBUG "kcapi: appl %d releasing(%d)\n", appl, APPL(appl)->releasing);
++ APPL(appl)->releasing--;
++ if (APPL(appl)->releasing <= 0) {
++ APPL(appl)->signal = 0;
++ APPL_MARK_FREE(appl);
++ printk(KERN_INFO "kcapi: appl %d down\n", appl);
++ }
++ } else
++ printk(KERN_WARNING "kcapi: appl %d card%d released without request\n", appl, card->cnr);
+ }
+ /*
+ * ncci management
+@@ -863,16 +873,7 @@
+
+ static void controllercb_ready(struct capi_ctr * card)
+ {
+- __u16 appl;
+-
+ card->cardstate = CARD_RUNNING;
+-
+- for (appl = 1; appl <= CAPI_MAXAPPL; appl++) {
+- if (!VALID_APPLID(appl)) continue;
+- if (APPL(appl)->releasing) continue;
+- card->driver->register_appl(card, appl, &APPL(appl)->rparam);
+- }
+-
+ printk(KERN_NOTICE "kcapi: card %d \"%s\" ready.\n",
+ CARDNR(card), card->name);
+
+diff -urN linux-2.4.18/drivers/usb/Config.in linux-2.4.18-mh15/drivers/usb/Config.in
+--- linux-2.4.18/drivers/usb/Config.in 2002-02-25 20:38:07.000000000 +0100
++++ linux-2.4.18-mh15/drivers/usb/Config.in 2004-08-01 16:26:23.000000000 +0200
+@@ -31,7 +31,13 @@
+
+ comment 'USB Device Class drivers'
+ dep_tristate ' USB Audio support' CONFIG_USB_AUDIO $CONFIG_USB $CONFIG_SOUND
+-dep_tristate ' USB Bluetooth support (EXPERIMENTAL)' CONFIG_USB_BLUETOOTH $CONFIG_USB $CONFIG_EXPERIMENTAL
++if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
++ if [ "$CONFIG_BLUEZ" = "n" ]; then
++ dep_tristate ' USB Bluetooth support (EXPERIMENTAL)' CONFIG_USB_BLUETOOTH $CONFIG_USB
++ else
++ comment ' USB Bluetooth can only be used with disabled Bluetooth subsystem'
++ fi
++fi
+ if [ "$CONFIG_SCSI" = "n" ]; then
+ comment ' SCSI support is needed for USB Storage'
+ fi
+diff -urN linux-2.4.18/drivers/usb/hid-core.c linux-2.4.18-mh15/drivers/usb/hid-core.c
+--- linux-2.4.18/drivers/usb/hid-core.c 2001-12-21 18:41:55.000000000 +0100
++++ linux-2.4.18-mh15/drivers/usb/hid-core.c 2004-08-01 16:26:23.000000000 +0200
+@@ -217,6 +217,8 @@
+
+ offset = report->size;
+ report->size += parser->global.report_size * parser->global.report_count;
++ if (usages < parser->global.report_count)
++ usages = parser->global.report_count;
+
+ if (usages == 0)
+ return 0; /* ignore padding fields */
+diff -urN linux-2.4.18/include/linux/firmware.h linux-2.4.18-mh15/include/linux/firmware.h
+--- linux-2.4.18/include/linux/firmware.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/include/linux/firmware.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,20 @@
++#ifndef _LINUX_FIRMWARE_H
++#define _LINUX_FIRMWARE_H
++#include <linux/module.h>
++#include <linux/types.h>
++#define FIRMWARE_NAME_MAX 30
++struct firmware {
++ size_t size;
++ u8 *data;
++};
++int request_firmware (const struct firmware **fw, const char *name,
++ const char *device);
++int request_firmware_nowait (
++ struct module *module,
++ const char *name, const char *device, void *context,
++ void (*cont)(const struct firmware *fw, void *context));
++/* On 2.5 'device' is 'struct device *' */
++
++void release_firmware (const struct firmware *fw);
++void register_firmware (const char *name, const u8 *data, size_t size);
++#endif
+diff -urN linux-2.4.18/include/linux/input.h linux-2.4.18-mh15/include/linux/input.h
+--- linux-2.4.18/include/linux/input.h 2001-09-13 00:34:06.000000000 +0200
++++ linux-2.4.18-mh15/include/linux/input.h 2004-08-01 16:26:23.000000000 +0200
+@@ -468,6 +468,8 @@
+ #define BUS_PCI 0x01
+ #define BUS_ISAPNP 0x02
+ #define BUS_USB 0x03
++#define BUS_HIL 0x04
++#define BUS_BLUETOOTH 0x05
+
+ #define BUS_ISA 0x10
+ #define BUS_I8042 0x11
+diff -urN linux-2.4.18/include/linux/kernel.h linux-2.4.18-mh15/include/linux/kernel.h
+--- linux-2.4.18/include/linux/kernel.h 2002-02-25 20:38:13.000000000 +0100
++++ linux-2.4.18-mh15/include/linux/kernel.h 2004-08-01 16:26:23.000000000 +0200
+@@ -11,6 +11,7 @@
+ #include <linux/linkage.h>
+ #include <linux/stddef.h>
+ #include <linux/types.h>
++#include <linux/compiler.h>
+
+ /* Optimization barrier */
+ /* The "volatile" is due to gcc bugs */
+@@ -181,4 +182,6 @@
+ char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding: libc5 uses this.. */
+ };
+
+-#endif
++#define BUG_ON(condition) do { if (unlikely((condition)!=0)) BUG(); } while(0)
++
++#endif /* _LINUX_KERNEL_H */
+diff -urN linux-2.4.18/include/linux/net.h linux-2.4.18-mh15/include/linux/net.h
+--- linux-2.4.18/include/linux/net.h 2001-11-22 20:46:19.000000000 +0100
++++ linux-2.4.18-mh15/include/linux/net.h 2004-08-01 16:26:23.000000000 +0200
+@@ -139,6 +139,7 @@
+ extern int sock_recvmsg(struct socket *, struct msghdr *m, int len, int flags);
+ extern int sock_readv_writev(int type, struct inode * inode, struct file * file,
+ const struct iovec * iov, long count, long size);
++extern struct socket *sockfd_lookup(int fd, int *err);
+
+ extern int net_ratelimit(void);
+ extern unsigned long net_random(void);
+diff -urN linux-2.4.18/include/linux/uinput.h linux-2.4.18-mh15/include/linux/uinput.h
+--- linux-2.4.18/include/linux/uinput.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/include/linux/uinput.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,79 @@
++/*
++ * User level driver support for input subsystem
++ *
++ * Heavily based on evdev.c by Vojtech Pavlik
++ *
++ * 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
++ *
++ * Author: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>
++ *
++ * Changes/Revisions:
++ * 0.1 20/06/2002
++ * - first public version
++ */
++
++#ifndef __UINPUT_H_
++#define __UINPUT_H_
++
++#ifdef __KERNEL__
++#define UINPUT_MINOR 223
++#define UINPUT_NAME "uinput"
++#define UINPUT_BUFFER_SIZE 16
++
++/* state flags => bit index for {set|clear|test}_bit ops */
++#define UIST_CREATED 0
++
++struct uinput_device {
++ struct input_dev *dev;
++ unsigned long state;
++ wait_queue_head_t waitq;
++ unsigned char ready,
++ head,
++ tail;
++ struct input_event buff[UINPUT_BUFFER_SIZE];
++};
++#endif /* __KERNEL__ */
++
++/* ioctl */
++#define UINPUT_IOCTL_BASE 'U'
++#define UI_DEV_CREATE _IO(UINPUT_IOCTL_BASE, 1)
++#define UI_DEV_DESTROY _IO(UINPUT_IOCTL_BASE, 2)
++#define UI_SET_EVBIT _IOW(UINPUT_IOCTL_BASE, 100, int)
++#define UI_SET_KEYBIT _IOW(UINPUT_IOCTL_BASE, 101, int)
++#define UI_SET_RELBIT _IOW(UINPUT_IOCTL_BASE, 102, int)
++#define UI_SET_ABSBIT _IOW(UINPUT_IOCTL_BASE, 103, int)
++#define UI_SET_MSCBIT _IOW(UINPUT_IOCTL_BASE, 104, int)
++#define UI_SET_LEDBIT _IOW(UINPUT_IOCTL_BASE, 105, int)
++#define UI_SET_SNDBIT _IOW(UINPUT_IOCTL_BASE, 106, int)
++#define UI_SET_FFBIT _IOW(UINPUT_IOCTL_BASE, 107, int)
++
++#ifndef NBITS
++#define NBITS(x) ((((x)-1)/(sizeof(long)*8))+1)
++#endif /* NBITS */
++
++#define UINPUT_MAX_NAME_SIZE 80
++struct uinput_user_dev {
++ char name[UINPUT_MAX_NAME_SIZE];
++ unsigned short idbus;
++ unsigned short idvendor;
++ unsigned short idproduct;
++ unsigned short idversion;
++ int ff_effects_max;
++ int absmax[ABS_MAX + 1];
++ int absmin[ABS_MAX + 1];
++ int absfuzz[ABS_MAX + 1];
++ int absflat[ABS_MAX + 1];
++};
++#endif /* __UINPUT_H_ */
+diff -urN linux-2.4.18/include/net/bluetooth/bluetooth.h linux-2.4.18-mh15/include/net/bluetooth/bluetooth.h
+--- linux-2.4.18/include/net/bluetooth/bluetooth.h 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/include/net/bluetooth/bluetooth.h 2004-08-01 16:26:23.000000000 +0200
+@@ -23,7 +23,7 @@
+ */
+
+ /*
+- * $Id: bluetooth.h,v 1.6 2001/08/03 04:19:49 maxk Exp $
++ * $Id: bluetooth.h,v 1.9 2002/05/06 21:11:55 maxk Exp $
+ */
+
+ #ifndef __BLUETOOTH_H
+@@ -31,17 +31,64 @@
+
+ #include <asm/types.h>
+ #include <asm/byteorder.h>
++#include <linux/poll.h>
++#include <net/sock.h>
+
+ #ifndef AF_BLUETOOTH
+ #define AF_BLUETOOTH 31
+ #define PF_BLUETOOTH AF_BLUETOOTH
+ #endif
+
++/* Reserv for core and drivers use */
++#define BLUEZ_SKB_RESERVE 8
++
++#ifndef MIN
++#define MIN(a,b) ((a) < (b) ? (a) : (b))
++#endif
++
+ #define BTPROTO_L2CAP 0
+ #define BTPROTO_HCI 1
++#define BTPROTO_SCO 2
++#define BTPROTO_RFCOMM 3
++#define BTPROTO_BNEP 4
++#define BTPROTO_CMTP 5
++#define BTPROTO_HIDP 6
+
+ #define SOL_HCI 0
+ #define SOL_L2CAP 6
++#define SOL_SCO 17
++#define SOL_RFCOMM 18
++
++/* Debugging */
++#ifdef CONFIG_BLUEZ_DEBUG
++
++#define HCI_CORE_DEBUG 1
++#define HCI_SOCK_DEBUG 1
++#define HCI_UART_DEBUG 1
++#define HCI_USB_DEBUG 1
++//#define HCI_DATA_DUMP 1
++
++#define L2CAP_DEBUG 1
++#define SCO_DEBUG 1
++#define AF_BLUETOOTH_DEBUG 1
++
++#endif /* CONFIG_BLUEZ_DEBUG */
++
++extern void bluez_dump(char *pref, __u8 *buf, int count);
++
++#if __GNUC__ <= 2 && __GNUC_MINOR__ < 95
++#define __func__ __FUNCTION__
++#endif
++
++#define BT_INFO(fmt, arg...) printk(KERN_INFO fmt "\n" , ## arg)
++#define BT_DBG(fmt, arg...) printk(KERN_INFO "%s: " fmt "\n" , __func__ , ## arg)
++#define BT_ERR(fmt, arg...) printk(KERN_ERR "%s: " fmt "\n" , __func__ , ## arg)
++
++#ifdef HCI_DATA_DUMP
++#define BT_DMP(buf, len) bluez_dump(__func__, buf, len)
++#else
++#define BT_DMP(D...)
++#endif
+
+ /* Connection and socket states */
+ enum {
+@@ -50,6 +97,7 @@
+ BT_BOUND,
+ BT_LISTEN,
+ BT_CONNECT,
++ BT_CONNECT2,
+ BT_CONFIG,
+ BT_DISCONN,
+ BT_CLOSED
+@@ -66,7 +114,8 @@
+ __u8 b[6];
+ } __attribute__((packed)) bdaddr_t;
+
+-#define BDADDR_ANY ((bdaddr_t *)"\000\000\000\000\000")
++#define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})
++#define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}})
+
+ /* Copy, swap, convert BD Address */
+ static inline int bacmp(bdaddr_t *ba1, bdaddr_t *ba2)
+@@ -82,6 +131,91 @@
+ char *batostr(bdaddr_t *ba);
+ bdaddr_t *strtoba(char *str);
+
++/* Common socket structures and functions */
++
++#define bluez_pi(sk) ((struct bluez_pinfo *) &sk->protinfo)
++#define bluez_sk(pi) ((struct sock *) \
++ ((void *)pi - (unsigned long)(&((struct sock *)0)->protinfo)))
++
++struct bluez_pinfo {
++ bdaddr_t src;
++ bdaddr_t dst;
++
++ struct list_head accept_q;
++ struct sock *parent;
++};
++
++struct bluez_sock_list {
++ struct sock *head;
++ rwlock_t lock;
++};
++
++int bluez_sock_register(int proto, struct net_proto_family *ops);
++int bluez_sock_unregister(int proto);
++void bluez_sock_init(struct socket *sock, struct sock *sk);
++void bluez_sock_link(struct bluez_sock_list *l, struct sock *s);
++void bluez_sock_unlink(struct bluez_sock_list *l, struct sock *s);
++int bluez_sock_recvmsg(struct socket *sock, struct msghdr *msg, int len, int flags, struct scm_cookie *scm);
++uint bluez_sock_poll(struct file * file, struct socket *sock, poll_table *wait);
++int bluez_sock_wait_state(struct sock *sk, int state, unsigned long timeo);
++
++void bluez_accept_enqueue(struct sock *parent, struct sock *sk);
++struct sock * bluez_accept_dequeue(struct sock *parent, struct socket *newsock);
++
++/* Skb helpers */
++struct bluez_skb_cb {
++ int incomming;
++};
++#define bluez_cb(skb) ((struct bluez_skb_cb *)(skb->cb))
++
++static inline struct sk_buff *bluez_skb_alloc(unsigned int len, int how)
++{
++ struct sk_buff *skb;
++
++ if ((skb = alloc_skb(len + BLUEZ_SKB_RESERVE, how))) {
++ skb_reserve(skb, BLUEZ_SKB_RESERVE);
++ bluez_cb(skb)->incomming = 0;
++ }
++ return skb;
++}
++
++static inline struct sk_buff *bluez_skb_send_alloc(struct sock *sk, unsigned long len,
++ int nb, int *err)
++{
++ struct sk_buff *skb;
++
++ if ((skb = sock_alloc_send_skb(sk, len + BLUEZ_SKB_RESERVE, nb, err))) {
++ skb_reserve(skb, BLUEZ_SKB_RESERVE);
++ bluez_cb(skb)->incomming = 0;
++ }
++
++ return skb;
++}
++
++static inline int skb_frags_no(struct sk_buff *skb)
++{
++ register struct sk_buff *frag = skb_shinfo(skb)->frag_list;
++ register int n = 1;
++
++ for (; frag; frag=frag->next, n++);
++ return n;
++}
++
++int hci_core_init(void);
++int hci_core_cleanup(void);
++int hci_sock_init(void);
++int hci_sock_cleanup(void);
++
+ int bterr(__u16 code);
+
++#ifndef MODULE_LICENSE
++#define MODULE_LICENSE(x)
++#endif
++
++#ifndef list_for_each_safe
++#define list_for_each_safe(pos, n, head) \
++ for (pos = (head)->next, n = pos->next; pos != (head); \
++ pos = n, n = pos->next)
++#endif
++
+ #endif /* __BLUETOOTH_H */
+diff -urN linux-2.4.18/include/net/bluetooth/bluez.h linux-2.4.18-mh15/include/net/bluetooth/bluez.h
+--- linux-2.4.18/include/net/bluetooth/bluez.h 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/include/net/bluetooth/bluez.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,124 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * $Id: bluez.h,v 1.4 2001/08/03 04:19:49 maxk Exp $
+- */
+-
+-#ifndef __IF_BLUEZ_H
+-#define __IF_BLUEZ_H
+-
+-#include <net/sock.h>
+-
+-#define BLUEZ_MAX_PROTO 2
+-
+-/* Reserv for core and drivers use */
+-#define BLUEZ_SKB_RESERVE 8
+-
+-#ifndef MIN
+-#define MIN(a,b) ((a) < (b) ? (a) : (b))
+-#endif
+-
+-/* Debugging */
+-#ifdef BLUEZ_DEBUG
+-
+-#define HCI_CORE_DEBUG 1
+-#define HCI_SOCK_DEBUG 1
+-#define HCI_UART_DEBUG 1
+-#define HCI_USB_DEBUG 1
+-//#define HCI_DATA_DUMP 1
+-
+-#define L2CAP_DEBUG 1
+-
+-#endif /* BLUEZ_DEBUG */
+-
+-extern void bluez_dump(char *pref, __u8 *buf, int count);
+-
+-#define INF(fmt, arg...) printk(KERN_INFO fmt "\n" , ## arg)
+-#define DBG(fmt, arg...) printk(KERN_INFO __FUNCTION__ ": " fmt "\n" , ## arg)
+-#define ERR(fmt, arg...) printk(KERN_ERR __FUNCTION__ ": " fmt "\n" , ## arg)
+-
+-#ifdef HCI_DATA_DUMP
+-#define DMP(buf, len) bluez_dump(__FUNCTION__, buf, len)
+-#else
+-#define DMP(D...)
+-#endif
+-
+-/* ----- Sockets ------ */
+-struct bluez_sock_list {
+- struct sock *head;
+- rwlock_t lock;
+-};
+-
+-extern int bluez_sock_register(int proto, struct net_proto_family *ops);
+-extern int bluez_sock_unregister(int proto);
+-
+-extern void bluez_sock_link(struct bluez_sock_list *l, struct sock *s);
+-extern void bluez_sock_unlink(struct bluez_sock_list *l, struct sock *s);
+-
+-/* ----- SKB helpers ----- */
+-struct bluez_skb_cb {
+- int incomming;
+-};
+-#define bluez_cb(skb) ((struct bluez_skb_cb *)(skb->cb))
+-
+-static inline struct sk_buff *bluez_skb_alloc(unsigned int len, int how)
+-{
+- struct sk_buff *skb;
+-
+- if ((skb = alloc_skb(len + BLUEZ_SKB_RESERVE, how))) {
+- skb_reserve(skb, BLUEZ_SKB_RESERVE);
+- bluez_cb(skb)->incomming = 0;
+- }
+- return skb;
+-}
+-
+-static inline struct sk_buff *bluez_skb_send_alloc(struct sock *sk, unsigned long len,
+- int nb, int *err)
+-{
+- struct sk_buff *skb;
+-
+- if ((skb = sock_alloc_send_skb(sk, len + BLUEZ_SKB_RESERVE, nb, err))) {
+- skb_reserve(skb, BLUEZ_SKB_RESERVE);
+- bluez_cb(skb)->incomming = 0;
+- }
+-
+- return skb;
+-}
+-
+-static inline int skb_frags_no(struct sk_buff *skb)
+-{
+- register struct sk_buff *frag = skb_shinfo(skb)->frag_list;
+- register int n = 1;
+-
+- for (; frag; frag=frag->next, n++);
+- return n;
+-}
+-
+-extern int hci_core_init(void);
+-extern int hci_core_cleanup(void);
+-extern int hci_sock_init(void);
+-extern int hci_sock_cleanup(void);
+-
+-#endif /* __IF_BLUEZ_H */
+diff -urN linux-2.4.18/include/net/bluetooth/hci_core.h linux-2.4.18-mh15/include/net/bluetooth/hci_core.h
+--- linux-2.4.18/include/net/bluetooth/hci_core.h 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/include/net/bluetooth/hci_core.h 2004-08-01 16:26:23.000000000 +0200
+@@ -23,7 +23,7 @@
+ */
+
+ /*
+- * $Id: hci_core.h,v 1.11 2001/08/05 06:02:15 maxk Exp $
++ * $Id: hci_core.h,v 1.5 2002/06/27 04:56:30 maxk Exp $
+ */
+
+ #ifndef __HCI_CORE_H
+@@ -32,14 +32,12 @@
+ #include <net/bluetooth/hci.h>
+
+ /* HCI upper protocols */
+-#define HCI_MAX_PROTO 1
+ #define HCI_PROTO_L2CAP 0
++#define HCI_PROTO_SCO 1
+
+ #define HCI_INIT_TIMEOUT (HZ * 10)
+
+-/* ----- Inquiry cache ----- */
+-#define INQUIRY_CACHE_AGE_MAX (HZ*5) // 5 seconds
+-#define INQUIRY_ENTRY_AGE_MAX (HZ*60) // 60 seconds
++/* HCI Core structures */
+
+ struct inquiry_entry {
+ struct inquiry_entry *next;
+@@ -53,111 +51,188 @@
+ struct inquiry_entry *list;
+ };
+
+-static inline void inquiry_cache_init(struct inquiry_cache *cache)
+-{
+- spin_lock_init(&cache->lock);
+- cache->list = NULL;
+-}
++struct conn_hash {
++ struct list_head list;
++ spinlock_t lock;
++ unsigned int num;
++};
+
+-static inline void inquiry_cache_lock(struct inquiry_cache *cache)
+-{
+- spin_lock(&cache->lock);
+-}
++struct hci_dev {
++ struct list_head list;
++ spinlock_t lock;
++ atomic_t refcnt;
+
+-static inline void inquiry_cache_unlock(struct inquiry_cache *cache)
+-{
+- spin_unlock(&cache->lock);
+-}
++ char name[8];
++ unsigned long flags;
++ __u16 id;
++ __u8 type;
++ bdaddr_t bdaddr;
++ __u8 features[8];
+
+-static inline void inquiry_cache_lock_bh(struct inquiry_cache *cache)
+-{
+- spin_lock_bh(&cache->lock);
+-}
++ __u16 pkt_type;
++ __u16 link_policy;
++ __u16 link_mode;
+
+-static inline void inquiry_cache_unlock_bh(struct inquiry_cache *cache)
+-{
+- spin_unlock_bh(&cache->lock);
+-}
++ unsigned long quirks;
+
+-static inline long inquiry_cache_age(struct inquiry_cache *cache)
+-{
+- return jiffies - cache->timestamp;
+-}
++ atomic_t cmd_cnt;
++ unsigned int acl_cnt;
++ unsigned int sco_cnt;
+
+-static inline long inquiry_entry_age(struct inquiry_entry *e)
+-{
+- return jiffies - e->timestamp;
+-}
+-extern void inquiry_cache_flush(struct inquiry_cache *cache);
++ unsigned int acl_mtu;
++ unsigned int sco_mtu;
++ unsigned int acl_pkts;
++ unsigned int sco_pkts;
+
+-struct hci_dev;
++ unsigned long cmd_last_tx;
++ unsigned long acl_last_tx;
++ unsigned long sco_last_tx;
++
++ struct tasklet_struct cmd_task;
++ struct tasklet_struct rx_task;
++ struct tasklet_struct tx_task;
++
++ struct sk_buff_head rx_q;
++ struct sk_buff_head raw_q;
++ struct sk_buff_head cmd_q;
++
++ struct sk_buff *sent_cmd;
++
++ struct semaphore req_lock;
++ wait_queue_head_t req_wait_q;
++ __u32 req_status;
++ __u32 req_result;
++
++ struct inquiry_cache inq_cache;
++ struct conn_hash conn_hash;
++
++ struct hci_dev_stats stat;
++
++ void *driver_data;
++ void *core_data;
++
++ atomic_t promisc;
++
++ int (*open)(struct hci_dev *hdev);
++ int (*close)(struct hci_dev *hdev);
++ int (*flush)(struct hci_dev *hdev);
++ int (*send)(struct sk_buff *skb);
++ void (*destruct)(struct hci_dev *hdev);
++ int (*ioctl)(struct hci_dev *hdev, unsigned int cmd, unsigned long arg);
++};
+
+-/* ----- HCI Connections ----- */
+ struct hci_conn {
+ struct list_head list;
++
++ atomic_t refcnt;
++ spinlock_t lock;
++
+ bdaddr_t dst;
+ __u16 handle;
++ __u16 state;
+ __u8 type;
+- unsigned int sent;
++ __u8 out;
++ __u32 link_mode;
++ unsigned long pend;
++
++ unsigned int sent;
++
++ struct sk_buff_head data_q;
+
++ struct timer_list timer;
++
+ struct hci_dev *hdev;
+ void *l2cap_data;
++ void *sco_data;
+ void *priv;
+
+- struct sk_buff_head data_q;
++ struct hci_conn *link;
+ };
+
+-struct conn_hash {
+- struct list_head list;
+- spinlock_t lock;
+- unsigned int num;
+-};
++extern struct hci_proto *hci_proto[];
++extern struct list_head hdev_list;
++extern rwlock_t hdev_list_lock;
++
++/* ----- Inquiry cache ----- */
++#define INQUIRY_CACHE_AGE_MAX (HZ*30) // 30 seconds
++#define INQUIRY_ENTRY_AGE_MAX (HZ*60) // 60 seconds
++
++#define inquiry_cache_lock(c) spin_lock(&c->lock)
++#define inquiry_cache_unlock(c) spin_unlock(&c->lock)
++#define inquiry_cache_lock_bh(c) spin_lock_bh(&c->lock)
++#define inquiry_cache_unlock_bh(c) spin_unlock_bh(&c->lock)
+
+-static inline void conn_hash_init(struct conn_hash *h)
++static inline void inquiry_cache_init(struct hci_dev *hdev)
+ {
+- INIT_LIST_HEAD(&h->list);
+- spin_lock_init(&h->lock);
+- h->num = 0;
++ struct inquiry_cache *c = &hdev->inq_cache;
++ spin_lock_init(&c->lock);
++ c->list = NULL;
+ }
+
+-static inline void conn_hash_lock(struct conn_hash *h)
++static inline int inquiry_cache_empty(struct hci_dev *hdev)
+ {
+- spin_lock(&h->lock);
++ struct inquiry_cache *c = &hdev->inq_cache;
++ return (c->list == NULL);
+ }
+
+-static inline void conn_hash_unlock(struct conn_hash *h)
++static inline long inquiry_cache_age(struct hci_dev *hdev)
+ {
+- spin_unlock(&h->lock);
++ struct inquiry_cache *c = &hdev->inq_cache;
++ return jiffies - c->timestamp;
+ }
+
+-static inline void __conn_hash_add(struct conn_hash *h, __u16 handle, struct hci_conn *c)
++static inline long inquiry_entry_age(struct inquiry_entry *e)
+ {
+- list_add(&c->list, &h->list);
+- h->num++;
++ return jiffies - e->timestamp;
+ }
+
+-static inline void conn_hash_add(struct conn_hash *h, __u16 handle, struct hci_conn *c)
++struct inquiry_entry *inquiry_cache_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr);
++void inquiry_cache_update(struct hci_dev *hdev, inquiry_info *info);
++void inquiry_cache_flush(struct hci_dev *hdev);
++int inquiry_cache_dump(struct hci_dev *hdev, int num, __u8 *buf);
++
++/* ----- HCI Connections ----- */
++enum {
++ HCI_CONN_AUTH_PEND,
++ HCI_CONN_ENCRYPT_PEND
++};
++
++#define hci_conn_lock(c) spin_lock(&c->lock)
++#define hci_conn_unlock(c) spin_unlock(&c->lock)
++#define hci_conn_lock_bh(c) spin_lock_bh(&c->lock)
++#define hci_conn_unlock_bh(c) spin_unlock_bh(&c->lock)
++
++#define conn_hash_lock(d) spin_lock(&d->conn_hash->lock)
++#define conn_hash_unlock(d) spin_unlock(&d->conn_hash->lock)
++#define conn_hash_lock_bh(d) spin_lock_bh(&d->conn_hash->lock)
++#define conn_hash_unlock_bh(d) spin_unlock_bh(&d->conn_hash->lock)
++
++static inline void conn_hash_init(struct hci_dev *hdev)
+ {
+- conn_hash_lock(h);
+- __conn_hash_add(h, handle, c);
+- conn_hash_unlock(h);
++ struct conn_hash *h = &hdev->conn_hash;
++ INIT_LIST_HEAD(&h->list);
++ spin_lock_init(&h->lock);
++ h->num = 0;
+ }
+
+-static inline void __conn_hash_del(struct conn_hash *h, struct hci_conn *c)
++static inline void conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
+ {
+- list_del(&c->list);
+- h->num--;
++ struct conn_hash *h = &hdev->conn_hash;
++ list_add(&c->list, &h->list);
++ h->num++;
+ }
+
+-static inline void conn_hash_del(struct conn_hash *h, struct hci_conn *c)
++static inline void conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
+ {
+- conn_hash_lock(h);
+- __conn_hash_del(h, c);
+- conn_hash_unlock(h);
++ struct conn_hash *h = &hdev->conn_hash;
++ list_del(&c->list);
++ h->num--;
+ }
+
+-static inline struct hci_conn *__conn_hash_lookup(struct conn_hash *h, __u16 handle)
++static inline struct hci_conn *conn_hash_lookup_handle(struct hci_dev *hdev,
++ __u16 handle)
+ {
++ register struct conn_hash *h = &hdev->conn_hash;
+ register struct list_head *p;
+ register struct hci_conn *c;
+
+@@ -169,101 +244,97 @@
+ return NULL;
+ }
+
+-static inline struct hci_conn *conn_hash_lookup(struct conn_hash *h, __u16 handle)
++static inline struct hci_conn *conn_hash_lookup_ba(struct hci_dev *hdev,
++ __u8 type, bdaddr_t *ba)
+ {
+- struct hci_conn *conn;
++ register struct conn_hash *h = &hdev->conn_hash;
++ register struct list_head *p;
++ register struct hci_conn *c;
+
+- conn_hash_lock(h);
+- conn = __conn_hash_lookup(h, handle);
+- conn_hash_unlock(h);
+- return conn;
++ list_for_each(p, &h->list) {
++ c = list_entry(p, struct hci_conn, list);
++ if (c->type == type && !bacmp(&c->dst, ba))
++ return c;
++ }
++ return NULL;
+ }
+
+-/* ----- HCI Devices ----- */
+-struct hci_dev {
+- atomic_t refcnt;
+-
+- char name[8];
+- __u32 flags;
+- __u16 id;
+- __u8 type;
+- bdaddr_t bdaddr;
+- __u8 features[8];
+-
+- __u16 pkt_type;
+-
+- atomic_t cmd_cnt;
+- unsigned int acl_cnt;
+- unsigned int sco_cnt;
+-
+- unsigned int acl_mtu;
+- unsigned int sco_mtu;
+- unsigned int acl_max;
+- unsigned int sco_max;
+-
+- void *driver_data;
+- void *l2cap_data;
+- void *priv;
+-
+- struct tasklet_struct cmd_task;
+- struct tasklet_struct rx_task;
+- struct tasklet_struct tx_task;
+-
+- struct sk_buff_head rx_q;
+- struct sk_buff_head raw_q;
+- struct sk_buff_head cmd_q;
+-
+- struct sk_buff *sent_cmd;
++void hci_acl_connect(struct hci_conn *conn);
++void hci_acl_disconn(struct hci_conn *conn, __u8 reason);
++void hci_add_sco(struct hci_conn *conn, __u16 handle);
+
+- struct semaphore req_lock;
+- wait_queue_head_t req_wait_q;
+- __u32 req_status;
+- __u32 req_result;
++struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst);
++int hci_conn_del(struct hci_conn *conn);
++void hci_conn_hash_flush(struct hci_dev *hdev);
+
+- struct inquiry_cache inq_cache;
++struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *src);
++int hci_conn_auth(struct hci_conn *conn);
++int hci_conn_encrypt(struct hci_conn *conn);
+
+- struct conn_hash conn_hash;
+-
+- struct hci_dev_stats stat;
+-
+- int (*open)(struct hci_dev *hdev);
+- int (*close)(struct hci_dev *hdev);
+- int (*flush)(struct hci_dev *hdev);
+- int (*send)(struct sk_buff *skb);
+-};
++static inline void hci_conn_set_timer(struct hci_conn *conn, long timeout)
++{
++ mod_timer(&conn->timer, jiffies + timeout);
++}
+
+-static inline void hci_dev_hold(struct hci_dev *hdev)
++static inline void hci_conn_del_timer(struct hci_conn *conn)
+ {
+- atomic_inc(&hdev->refcnt);
++ del_timer(&conn->timer);
+ }
+
+-static inline void hci_dev_put(struct hci_dev *hdev)
++static inline void hci_conn_hold(struct hci_conn *conn)
+ {
+- atomic_dec(&hdev->refcnt);
++ atomic_inc(&conn->refcnt);
++ hci_conn_del_timer(conn);
+ }
+
+-extern struct hci_dev *hci_dev_get(int index);
+-extern int hci_register_dev(struct hci_dev *hdev);
+-extern int hci_unregister_dev(struct hci_dev *hdev);
+-extern int hci_dev_open(__u16 dev);
+-extern int hci_dev_close(__u16 dev);
+-extern int hci_dev_reset(__u16 dev);
+-extern int hci_dev_reset_stat(__u16 dev);
+-extern int hci_dev_info(unsigned long arg);
+-extern int hci_dev_list(unsigned long arg);
+-extern int hci_dev_setscan(unsigned long arg);
+-extern int hci_dev_setauth(unsigned long arg);
+-extern int hci_dev_setptype(unsigned long arg);
+-extern int hci_conn_list(unsigned long arg);
+-extern int hci_inquiry(unsigned long arg);
++static inline void hci_conn_put(struct hci_conn *conn)
++{
++ if (atomic_dec_and_test(&conn->refcnt)) {
++ if (conn->type == ACL_LINK) {
++ unsigned long timeo = (conn->out) ?
++ HCI_DISCONN_TIMEOUT : HCI_DISCONN_TIMEOUT * 2;
++ hci_conn_set_timer(conn, timeo);
++ } else
++ hci_conn_set_timer(conn, HZ / 100);
++ }
++}
+
+-extern __u32 hci_dev_setmode(struct hci_dev *hdev, __u32 mode);
+-extern __u32 hci_dev_getmode(struct hci_dev *hdev);
++/* ----- HCI Devices ----- */
++static inline void hci_dev_put(struct hci_dev *d)
++{
++ if (atomic_dec_and_test(&d->refcnt))
++ d->destruct(d);
++}
++#define hci_dev_hold(d) atomic_inc(&d->refcnt)
++
++#define hci_dev_lock(d) spin_lock(&d->lock)
++#define hci_dev_unlock(d) spin_unlock(&d->lock)
++#define hci_dev_lock_bh(d) spin_lock_bh(&d->lock)
++#define hci_dev_unlock_bh(d) spin_unlock_bh(&d->lock)
++
++struct hci_dev *hci_dev_get(int index);
++struct hci_dev *hci_get_route(bdaddr_t *src, bdaddr_t *dst);
++int hci_register_dev(struct hci_dev *hdev);
++int hci_unregister_dev(struct hci_dev *hdev);
++int hci_suspend_dev(struct hci_dev *hdev);
++int hci_resume_dev(struct hci_dev *hdev);
++int hci_dev_open(__u16 dev);
++int hci_dev_close(__u16 dev);
++int hci_dev_reset(__u16 dev);
++int hci_dev_reset_stat(__u16 dev);
++int hci_dev_cmd(unsigned int cmd, unsigned long arg);
++int hci_get_dev_list(unsigned long arg);
++int hci_get_dev_info(unsigned long arg);
++int hci_get_conn_list(unsigned long arg);
++int hci_get_conn_info(struct hci_dev *hdev, unsigned long arg);
++int hci_inquiry(unsigned long arg);
+
+-extern int hci_recv_frame(struct sk_buff *skb);
++int hci_recv_frame(struct sk_buff *skb);
++void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
+
+ /* ----- LMP capabilities ----- */
+ #define lmp_rswitch_capable(dev) (dev->features[0] & LMP_RSWITCH)
++#define lmp_encrypt_capable(dev) (dev->features[0] & LMP_ENCRYPT)
+
+ /* ----- HCI tasks ----- */
+ static inline void hci_sched_cmd(struct hci_dev *hdev)
+@@ -284,43 +355,130 @@
+ /* ----- HCI protocols ----- */
+ struct hci_proto {
+ char *name;
+- __u32 id;
+- __u32 flags;
++ unsigned int id;
++ unsigned long flags;
+
+ void *priv;
+
+- int (*connect_ind) (struct hci_dev *hdev, bdaddr_t *bdaddr);
+- int (*connect_cfm) (struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 status, struct hci_conn *conn);
++ int (*connect_ind) (struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type);
++ int (*connect_cfm) (struct hci_conn *conn, __u8 status);
+ int (*disconn_ind) (struct hci_conn *conn, __u8 reason);
+- int (*recv_acldata) (struct hci_conn *conn, struct sk_buff *skb , __u16 flags);
++ int (*recv_acldata) (struct hci_conn *conn, struct sk_buff *skb, __u16 flags);
+ int (*recv_scodata) (struct hci_conn *conn, struct sk_buff *skb);
++ int (*auth_cfm) (struct hci_conn *conn, __u8 status);
++ int (*encrypt_cfm) (struct hci_conn *conn, __u8 status);
+ };
+
+-extern int hci_register_proto(struct hci_proto *hproto);
+-extern int hci_unregister_proto(struct hci_proto *hproto);
+-extern int hci_register_notifier(struct notifier_block *nb);
+-extern int hci_unregister_notifier(struct notifier_block *nb);
+-extern int hci_connect(struct hci_dev * hdev, bdaddr_t * bdaddr);
+-extern int hci_disconnect(struct hci_conn *conn, __u8 reason);
+-extern int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void * param);
+-extern int hci_send_raw(struct sk_buff *skb);
+-extern int hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags);
+-extern int hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);
++static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
++{
++ register struct hci_proto *hp;
++ int mask = 0;
++
++ hp = hci_proto[HCI_PROTO_L2CAP];
++ if (hp && hp->connect_ind)
++ mask |= hp->connect_ind(hdev, bdaddr, type);
++
++ hp = hci_proto[HCI_PROTO_SCO];
++ if (hp && hp->connect_ind)
++ mask |= hp->connect_ind(hdev, bdaddr, type);
++
++ return mask;
++}
++
++static inline void hci_proto_connect_cfm(struct hci_conn *conn, __u8 status)
++{
++ register struct hci_proto *hp;
++
++ hp = hci_proto[HCI_PROTO_L2CAP];
++ if (hp && hp->connect_cfm)
++ hp->connect_cfm(conn, status);
++
++ hp = hci_proto[HCI_PROTO_SCO];
++ if (hp && hp->connect_cfm)
++ hp->connect_cfm(conn, status);
++}
++
++static inline void hci_proto_disconn_ind(struct hci_conn *conn, __u8 reason)
++{
++ register struct hci_proto *hp;
++
++ hp = hci_proto[HCI_PROTO_L2CAP];
++ if (hp && hp->disconn_ind)
++ hp->disconn_ind(conn, reason);
++
++ hp = hci_proto[HCI_PROTO_SCO];
++ if (hp && hp->disconn_ind)
++ hp->disconn_ind(conn, reason);
++}
++
++static inline void hci_proto_auth_cfm(struct hci_conn *conn, __u8 status)
++{
++ register struct hci_proto *hp;
++
++ hp = hci_proto[HCI_PROTO_L2CAP];
++ if (hp && hp->auth_cfm)
++ hp->auth_cfm(conn, status);
++
++ hp = hci_proto[HCI_PROTO_SCO];
++ if (hp && hp->auth_cfm)
++ hp->auth_cfm(conn, status);
++}
++
++static inline void hci_proto_encrypt_cfm(struct hci_conn *conn, __u8 status)
++{
++ register struct hci_proto *hp;
++
++ hp = hci_proto[HCI_PROTO_L2CAP];
++ if (hp && hp->encrypt_cfm)
++ hp->encrypt_cfm(conn, status);
++
++ hp = hci_proto[HCI_PROTO_SCO];
++ if (hp && hp->encrypt_cfm)
++ hp->encrypt_cfm(conn, status);
++}
++
++int hci_register_proto(struct hci_proto *hproto);
++int hci_unregister_proto(struct hci_proto *hproto);
++int hci_register_notifier(struct notifier_block *nb);
++int hci_unregister_notifier(struct notifier_block *nb);
++
++int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void *param);
++int hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags);
++int hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);
++
++void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 ogf, __u16 ocf);
++
++void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data);
+
+ /* ----- HCI Sockets ----- */
+-extern void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);
++void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);
+
+ /* HCI info for socket */
+-#define hci_pi(sk) ((struct hci_pinfo *) &sk->protinfo)
++#define hci_pi(sk) ((struct hci_pinfo *) &sk->tp_pinfo)
+ struct hci_pinfo {
+ struct hci_dev *hdev;
+ struct hci_filter filter;
+ __u32 cmsg_mask;
+ };
+
++/* HCI security filter */
++#define HCI_SFLT_MAX_OGF 5
++
++struct hci_sec_filter {
++ __u32 type_mask;
++ __u32 event_mask[2];
++ __u32 ocf_mask[HCI_SFLT_MAX_OGF + 1][4];
++};
++
+ /* ----- HCI requests ----- */
+ #define HCI_REQ_DONE 0
+ #define HCI_REQ_PEND 1
+ #define HCI_REQ_CANCELED 2
+
++#define hci_req_lock(d) down(&d->req_lock)
++#define hci_req_unlock(d) up(&d->req_lock)
++
++void hci_req_complete(struct hci_dev *hdev, int result);
++void hci_req_cancel(struct hci_dev *hdev, int err);
++
+ #endif /* __HCI_CORE_H */
+diff -urN linux-2.4.18/include/net/bluetooth/hci.h linux-2.4.18-mh15/include/net/bluetooth/hci.h
+--- linux-2.4.18/include/net/bluetooth/hci.h 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/include/net/bluetooth/hci.h 2004-08-01 16:26:23.000000000 +0200
+@@ -23,59 +23,80 @@
+ */
+
+ /*
+- * $Id: hci.h,v 1.15 2001/08/05 06:02:15 maxk Exp $
++ * $Id: hci.h,v 1.5 2002/06/27 17:29:30 maxk Exp $
+ */
+
+ #ifndef __HCI_H
+ #define __HCI_H
+
+-#include <asm/byteorder.h>
+-
+-#define HCI_MAX_DEV 8
+-#define HCI_MAX_FRAME_SIZE 2048
++#define HCI_MAX_ACL_SIZE 1024
++#define HCI_MAX_SCO_SIZE 255
++#define HCI_MAX_EVENT_SIZE 260
++#define HCI_MAX_FRAME_SIZE (HCI_MAX_ACL_SIZE + 4)
+
+ /* HCI dev events */
+ #define HCI_DEV_REG 1
+ #define HCI_DEV_UNREG 2
+ #define HCI_DEV_UP 3
+ #define HCI_DEV_DOWN 4
++#define HCI_DEV_SUSPEND 5
++#define HCI_DEV_RESUME 6
+
+ /* HCI device types */
+-#define HCI_UART 0
++#define HCI_VHCI 0
+ #define HCI_USB 1
+-#define HCI_VHCI 2
+-
+-/* HCI device modes */
+-#define HCI_NORMAL 0x0001
+-#define HCI_RAW 0x0002
+-#define HCI_MODE_MASK (HCI_NORMAL | HCI_RAW)
+-#define HCI_SOCK 0x1000
+-
+-/* HCI device states */
+-#define HCI_INIT 0x0010
+-#define HCI_UP 0x0020
+-#define HCI_RUNNING 0x0040
++#define HCI_PCCARD 2
++#define HCI_UART 3
++#define HCI_RS232 4
++#define HCI_PCI 5
++
++/* HCI device quirks */
++enum {
++ HCI_QUIRK_RESET_ON_INIT
++};
+
+ /* HCI device flags */
+-#define HCI_PSCAN 0x0100
+-#define HCI_ISCAN 0x0200
+-#define HCI_AUTH 0x0400
++enum {
++ HCI_UP,
++ HCI_INIT,
++ HCI_RUNNING,
++
++ HCI_PSCAN,
++ HCI_ISCAN,
++ HCI_AUTH,
++ HCI_ENCRYPT,
++ HCI_INQUIRY,
++
++ HCI_RAW
++};
+
+-/* HCI Ioctl defines */
++/* HCI ioctl defines */
+ #define HCIDEVUP _IOW('H', 201, int)
+ #define HCIDEVDOWN _IOW('H', 202, int)
+ #define HCIDEVRESET _IOW('H', 203, int)
+-#define HCIRESETSTAT _IOW('H', 204, int)
+-#define HCIGETINFO _IOR('H', 205, int)
+-#define HCIGETDEVLIST _IOR('H', 206, int)
+-#define HCISETRAW _IOW('H', 207, int)
+-#define HCISETSCAN _IOW('H', 208, int)
+-#define HCISETAUTH _IOW('H', 209, int)
+-#define HCIINQUIRY _IOR('H', 210, int)
+-#define HCISETPTYPE _IOW('H', 211, int)
++#define HCIDEVRESTAT _IOW('H', 204, int)
++
++#define HCIGETDEVLIST _IOR('H', 210, int)
++#define HCIGETDEVINFO _IOR('H', 211, int)
+ #define HCIGETCONNLIST _IOR('H', 212, int)
++#define HCIGETCONNINFO _IOR('H', 213, int)
+
+-#ifndef __NO_HCI_DEFS
++#define HCISETRAW _IOW('H', 220, int)
++#define HCISETSCAN _IOW('H', 221, int)
++#define HCISETAUTH _IOW('H', 222, int)
++#define HCISETENCRYPT _IOW('H', 223, int)
++#define HCISETPTYPE _IOW('H', 224, int)
++#define HCISETLINKPOL _IOW('H', 225, int)
++#define HCISETLINKMODE _IOW('H', 226, int)
++#define HCISETACLMTU _IOW('H', 227, int)
++#define HCISETSCOMTU _IOW('H', 228, int)
++
++#define HCIINQUIRY _IOR('H', 240, int)
++
++/* HCI timeouts */
++#define HCI_CONN_TIMEOUT (HZ * 40)
++#define HCI_DISCONN_TIMEOUT (HZ * 2)
++#define HCI_CONN_IDLE_TIMEOUT (HZ * 60)
+
+ /* HCI Packet types */
+ #define HCI_COMMAND_PKT 0x01
+@@ -92,11 +113,18 @@
+ #define HCI_DH3 0x0800
+ #define HCI_DH5 0x8000
+
++#define HCI_HV1 0x0020
++#define HCI_HV2 0x0040
++#define HCI_HV3 0x0080
++
++#define SCO_PTYPE_MASK (HCI_HV1 | HCI_HV2 | HCI_HV3)
++#define ACL_PTYPE_MASK (~SCO_PTYPE_MASK)
++
+ /* ACL flags */
+-#define ACL_CONT 0x0001
+-#define ACL_START 0x0002
+-#define ACL_ACTIVE_BCAST 0x0010
+-#define ACL_PICO_BCAST 0x0020
++#define ACL_CONT 0x01
++#define ACL_START 0x02
++#define ACL_ACTIVE_BCAST 0x04
++#define ACL_PICO_BCAST 0x08
+
+ /* Baseband links */
+ #define SCO_LINK 0x00
+@@ -125,6 +153,20 @@
+ #define LMP_PSCHEME 0x02
+ #define LMP_PCONTROL 0x04
+
++/* Link policies */
++#define HCI_LP_RSWITCH 0x0001
++#define HCI_LP_HOLD 0x0002
++#define HCI_LP_SNIFF 0x0004
++#define HCI_LP_PARK 0x0008
++
++/* Link mode */
++#define HCI_LM_ACCEPT 0x8000
++#define HCI_LM_MASTER 0x0001
++#define HCI_LM_AUTH 0x0002
++#define HCI_LM_ENCRYPT 0x0004
++#define HCI_LM_TRUSTED 0x0008
++#define HCI_LM_RELIABLE 0x0010
++
+ /* ----- HCI Commands ----- */
+ /* OGF & OCF values */
+
+@@ -137,9 +179,10 @@
+ __u8 hci_ver;
+ __u16 hci_rev;
+ __u8 lmp_ver;
+- __u16 man_name;
+- __u16 lmp_sub;
++ __u16 manufacturer;
++ __u16 lmp_subver;
+ } __attribute__ ((packed)) read_local_version_rp;
++#define READ_LOCAL_VERSION_RP_SIZE 9
+
+ #define OCF_READ_LOCAL_FEATURES 0x0003
+ typedef struct {
+@@ -165,18 +208,24 @@
+ /* Host Controller and Baseband */
+ #define OGF_HOST_CTL 0x03
+ #define OCF_RESET 0x0003
++#define OCF_READ_AUTH_ENABLE 0x001F
+ #define OCF_WRITE_AUTH_ENABLE 0x0020
+- #define AUTH_DISABLED 0x00
+- #define AUTH_ENABLED 0x01
++ #define AUTH_DISABLED 0x00
++ #define AUTH_ENABLED 0x01
++
++#define OCF_READ_ENCRYPT_MODE 0x0021
++#define OCF_WRITE_ENCRYPT_MODE 0x0022
++ #define ENCRYPT_DISABLED 0x00
++ #define ENCRYPT_P2P 0x01
++ #define ENCRYPT_BOTH 0x02
+
+ #define OCF_WRITE_CA_TIMEOUT 0x0016
+ #define OCF_WRITE_PG_TIMEOUT 0x0018
+
+ #define OCF_WRITE_SCAN_ENABLE 0x001A
+- #define SCANS_DISABLED 0x00
+- #define IS_ENA_PS_DIS 0x01
+- #define IS_DIS_PS_ENA 0x02
+- #define IS_ENA_PS_ENA 0x03
++ #define SCAN_DISABLED 0x00
++ #define SCAN_INQUIRY 0x01
++ #define SCAN_PAGE 0x02
+
+ #define OCF_SET_EVENT_FLT 0x0005
+ typedef struct {
+@@ -226,9 +275,18 @@
+ } __attribute__ ((packed)) write_class_of_dev_cp;
+ #define WRITE_CLASS_OF_DEV_CP_SIZE 3
+
++#define OCF_HOST_BUFFER_SIZE 0x0033
++typedef struct {
++ __u16 acl_mtu;
++ __u8 sco_mtu;
++ __u16 acl_max_pkt;
++ __u16 sco_max_pkt;
++} __attribute__ ((packed)) host_buffer_size_cp;
++#define HOST_BUFFER_SIZE_CP_SIZE 7
++
+ /* Link Control */
+ #define OGF_LINK_CTL 0x01
+-#define OCF_CREATE_CONN 0x0005
++#define OCF_CREATE_CONN 0x0005
+ typedef struct {
+ bdaddr_t bdaddr;
+ __u16 pkt_type;
+@@ -246,6 +304,13 @@
+ } __attribute__ ((packed)) accept_conn_req_cp;
+ #define ACCEPT_CONN_REQ_CP_SIZE 7
+
++#define OCF_REJECT_CONN_REQ 0x000a
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 reason;
++} __attribute__ ((packed)) reject_conn_req_cp;
++#define REJECT_CONN_REQ_CP_SIZE 7
++
+ #define OCF_DISCONNECT 0x0006
+ typedef struct {
+ __u16 handle;
+@@ -253,17 +318,142 @@
+ } __attribute__ ((packed)) disconnect_cp;
+ #define DISCONNECT_CP_SIZE 3
+
++#define OCF_ADD_SCO 0x0007
++typedef struct {
++ __u16 handle;
++ __u16 pkt_type;
++} __attribute__ ((packed)) add_sco_cp;
++#define ADD_SCO_CP_SIZE 4
++
+ #define OCF_INQUIRY 0x0001
+ typedef struct {
+ __u8 lap[3];
+- __u8 lenght;
++ __u8 length;
+ __u8 num_rsp;
+ } __attribute__ ((packed)) inquiry_cp;
+ #define INQUIRY_CP_SIZE 5
+
+-#define OGF_LINK_POLICY 0x02 /* Link Policy */
++typedef struct {
++ __u8 status;
++ bdaddr_t bdaddr;
++} __attribute__ ((packed)) status_bdaddr_rp;
++#define STATUS_BDADDR_RP_SIZE 7
++
++#define OCF_INQUIRY_CANCEL 0x0002
++
++#define OCF_LINK_KEY_REPLY 0x000B
++#define OCF_LINK_KEY_NEG_REPLY 0x000C
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 link_key[16];
++} __attribute__ ((packed)) link_key_reply_cp;
++#define LINK_KEY_REPLY_CP_SIZE 22
++
++#define OCF_PIN_CODE_REPLY 0x000D
++#define OCF_PIN_CODE_NEG_REPLY 0x000E
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 pin_len;
++ __u8 pin_code[16];
++} __attribute__ ((packed)) pin_code_reply_cp;
++#define PIN_CODE_REPLY_CP_SIZE 23
++
++#define OCF_CHANGE_CONN_PTYPE 0x000F
++typedef struct {
++ __u16 handle;
++ __u16 pkt_type;
++} __attribute__ ((packed)) change_conn_ptype_cp;
++#define CHANGE_CONN_PTYPE_CP_SIZE 4
++
++#define OCF_AUTH_REQUESTED 0x0011
++typedef struct {
++ __u16 handle;
++} __attribute__ ((packed)) auth_requested_cp;
++#define AUTH_REQUESTED_CP_SIZE 2
++
++#define OCF_SET_CONN_ENCRYPT 0x0013
++typedef struct {
++ __u16 handle;
++ __u8 encrypt;
++} __attribute__ ((packed)) set_conn_encrypt_cp;
++#define SET_CONN_ENCRYPT_CP_SIZE 3
++
++#define OCF_REMOTE_NAME_REQ 0x0019
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 pscan_rep_mode;
++ __u8 pscan_mode;
++ __u16 clock_offset;
++} __attribute__ ((packed)) remote_name_req_cp;
++#define REMOTE_NAME_REQ_CP_SIZE 10
++
++#define OCF_READ_REMOTE_FEATURES 0x001B
++typedef struct {
++ __u16 handle;
++} __attribute__ ((packed)) read_remote_features_cp;
++#define READ_REMOTE_FEATURES_CP_SIZE 2
++
++#define OCF_READ_REMOTE_VERSION 0x001D
++typedef struct {
++ __u16 handle;
++} __attribute__ ((packed)) read_remote_version_cp;
++#define READ_REMOTE_VERSION_CP_SIZE 2
++
++/* Link Policy */
++#define OGF_LINK_POLICY 0x02
++#define OCF_ROLE_DISCOVERY 0x0009
++typedef struct {
++ __u16 handle;
++} __attribute__ ((packed)) role_discovery_cp;
++#define ROLE_DISCOVERY_CP_SIZE 2
++typedef struct {
++ __u8 status;
++ __u16 handle;
++ __u8 role;
++} __attribute__ ((packed)) role_discovery_rp;
++#define ROLE_DISCOVERY_RP_SIZE 4
++
++#define OCF_READ_LINK_POLICY 0x000C
++typedef struct {
++ __u16 handle;
++} __attribute__ ((packed)) read_link_policy_cp;
++#define READ_LINK_POLICY_CP_SIZE 2
++typedef struct {
++ __u8 status;
++ __u16 handle;
++ __u16 policy;
++} __attribute__ ((packed)) read_link_policy_rp;
++#define READ_LINK_POLICY_RP_SIZE 5
+
+-/* --------- HCI Events --------- */
++#define OCF_SWITCH_ROLE 0x000B
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 role;
++} __attribute__ ((packed)) switch_role_cp;
++#define SWITCH_ROLE_CP_SIZE 7
++
++#define OCF_WRITE_LINK_POLICY 0x000D
++typedef struct {
++ __u16 handle;
++ __u16 policy;
++} __attribute__ ((packed)) write_link_policy_cp;
++#define WRITE_LINK_POLICY_CP_SIZE 4
++typedef struct {
++ __u8 status;
++ __u16 handle;
++} __attribute__ ((packed)) write_link_policy_rp;
++#define WRITE_LINK_POLICY_RP_SIZE 3
++
++/* Status params */
++#define OGF_STATUS_PARAM 0x05
++
++/* Testing commands */
++#define OGF_TESTING_CMD 0x3e
++
++/* Vendor specific commands */
++#define OGF_VENDOR_CMD 0x3f
++
++/* ---- HCI Events ---- */
+ #define EVT_INQUIRY_COMPLETE 0x01
+
+ #define EVT_INQUIRY_RESULT 0x02
+@@ -272,11 +462,22 @@
+ __u8 pscan_rep_mode;
+ __u8 pscan_period_mode;
+ __u8 pscan_mode;
+- __u8 class[3];
++ __u8 dev_class[3];
+ __u16 clock_offset;
+ } __attribute__ ((packed)) inquiry_info;
+ #define INQUIRY_INFO_SIZE 14
+
++#define EVT_INQUIRY_RESULT_WITH_RSSI 0x22
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 pscan_rep_mode;
++ __u8 pscan_period_mode;
++ __u8 dev_class[3];
++ __u16 clock_offset;
++ __s8 rssi;
++} __attribute__ ((packed)) inquiry_info_with_rssi;
++#define INQUIRY_INFO_WITH_RSSI_SIZE 14
++
+ #define EVT_CONN_COMPLETE 0x03
+ typedef struct {
+ __u8 status;
+@@ -303,6 +504,44 @@
+ } __attribute__ ((packed)) evt_disconn_complete;
+ #define EVT_DISCONN_COMPLETE_SIZE 4
+
++#define EVT_AUTH_COMPLETE 0x06
++typedef struct {
++ __u8 status;
++ __u16 handle;
++} __attribute__ ((packed)) evt_auth_complete;
++#define EVT_AUTH_COMPLETE_SIZE 3
++
++#define EVT_REMOTE_NAME_REQ_COMPLETE 0x07
++typedef struct {
++ __u8 status;
++ bdaddr_t bdaddr;
++ __u8 name[248];
++} __attribute__ ((packed)) evt_remote_name_req_complete;
++#define EVT_REMOTE_NAME_REQ_COMPLETE_SIZE 255
++
++#define EVT_ENCRYPT_CHANGE 0x08
++typedef struct {
++ __u8 status;
++ __u16 handle;
++ __u8 encrypt;
++} __attribute__ ((packed)) evt_encrypt_change;
++#define EVT_ENCRYPT_CHANGE_SIZE 5
++
++#define EVT_QOS_SETUP_COMPLETE 0x0D
++typedef struct {
++ __u8 service_type;
++ __u32 token_rate;
++ __u32 peak_bandwidth;
++ __u32 latency;
++ __u32 delay_variation;
++} __attribute__ ((packed)) hci_qos;
++typedef struct {
++ __u8 status;
++ __u16 handle;
++ hci_qos qos;
++} __attribute__ ((packed)) evt_qos_setup_complete;
++#define EVT_QOS_SETUP_COMPLETE_SIZE 20
++
+ #define EVT_CMD_COMPLETE 0x0e
+ typedef struct {
+ __u8 ncmd;
+@@ -321,16 +560,78 @@
+ #define EVT_NUM_COMP_PKTS 0x13
+ typedef struct {
+ __u8 num_hndl;
+- /* variable lenght part */
++ /* variable length part */
+ } __attribute__ ((packed)) evt_num_comp_pkts;
+ #define EVT_NUM_COMP_PKTS_SIZE 1
+
+-#define EVT_HCI_DEV_EVENT 0xfd
++#define EVT_ROLE_CHANGE 0x12
++typedef struct {
++ __u8 status;
++ bdaddr_t bdaddr;
++ __u8 role;
++} __attribute__ ((packed)) evt_role_change;
++#define EVT_ROLE_CHANGE_SIZE 8
++
++#define EVT_PIN_CODE_REQ 0x16
++typedef struct {
++ bdaddr_t bdaddr;
++} __attribute__ ((packed)) evt_pin_code_req;
++#define EVT_PIN_CODE_REQ_SIZE 6
++
++#define EVT_LINK_KEY_REQ 0x17
++typedef struct {
++ bdaddr_t bdaddr;
++} __attribute__ ((packed)) evt_link_key_req;
++#define EVT_LINK_KEY_REQ_SIZE 6
++
++#define EVT_LINK_KEY_NOTIFY 0x18
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 link_key[16];
++ __u8 key_type;
++} __attribute__ ((packed)) evt_link_key_notify;
++#define EVT_LINK_KEY_NOTIFY_SIZE 23
++
++#define EVT_READ_REMOTE_FEATURES_COMPLETE 0x0B
++typedef struct {
++ __u8 status;
++ __u16 handle;
++ __u8 features[8];
++} __attribute__ ((packed)) evt_read_remote_features_complete;
++#define EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE 11
++
++#define EVT_READ_REMOTE_VERSION_COMPLETE 0x0C
++typedef struct {
++ __u8 status;
++ __u16 handle;
++ __u8 lmp_ver;
++ __u16 manufacturer;
++ __u16 lmp_subver;
++} __attribute__ ((packed)) evt_read_remote_version_complete;
++#define EVT_READ_REMOTE_VERSION_COMPLETE_SIZE 8
++
++/* Internal events generated by BlueZ stack */
++#define EVT_STACK_INTERNAL 0xfd
++typedef struct {
++ __u16 type;
++ __u8 data[0];
++} __attribute__ ((packed)) evt_stack_internal;
++#define EVT_STACK_INTERNAL_SIZE 2
++
++#define EVT_SI_DEVICE 0x01
++typedef struct {
++ __u16 event;
++ __u16 dev_id;
++} __attribute__ ((packed)) evt_si_device;
++#define EVT_SI_DEVICE_SIZE 4
++
++#define EVT_SI_SECURITY 0x02
+ typedef struct {
+ __u16 event;
+- __u16 param;
+-} __attribute__ ((packed)) evt_hci_dev_event;
+-#define EVT_HCI_DEV_EVENT_SIZE 4
++ __u16 proto;
++ __u16 subproto;
++ __u8 incomming;
++} __attribute__ ((packed)) evt_si_security;
+
+ /* -------- HCI Packet structures -------- */
+ #define HCI_TYPE_LEN 1
+@@ -369,14 +670,14 @@
+ #define acl_handle(h) (h & 0x0fff)
+ #define acl_flags(h) (h >> 12)
+
+-#endif /* _NO_HCI_DEFS */
+-
+ /* HCI Socket options */
+-#define HCI_DATA_DIR 0x0001
+-#define HCI_FILTER 0x0002
++#define HCI_DATA_DIR 1
++#define HCI_FILTER 2
++#define HCI_TIME_STAMP 3
+
+ /* HCI CMSG flags */
+ #define HCI_CMSG_DIR 0x0001
++#define HCI_CMSG_TSTAMP 0x0002
+
+ struct sockaddr_hci {
+ sa_family_t hci_family;
+@@ -387,27 +688,29 @@
+ struct hci_filter {
+ __u32 type_mask;
+ __u32 event_mask[2];
++ __u16 opcode;
+ };
+
+-struct hci_dev_req {
+- __u16 dev_id;
+- __u32 dev_opt;
+-};
+-
+-struct hci_dev_list_req {
+- __u16 dev_num;
+- struct hci_dev_req dev_req[0]; /* hci_dev_req structures */
+-};
+-
+-struct hci_inquiry_req {
+- __u16 dev_id;
+- __u16 flags;
+- __u8 lap[3];
+- __u8 length;
+- __u8 num_rsp;
+-};
+-#define IREQ_CACHE_FLUSH 0x0001
++#define HCI_FLT_TYPE_BITS 31
++#define HCI_FLT_EVENT_BITS 63
++#define HCI_FLT_OGF_BITS 63
++#define HCI_FLT_OCF_BITS 127
++
++#if BITS_PER_LONG == 64
++static inline void hci_set_bit(int nr, void *addr)
++{
++ *((__u32 *) addr + (nr >> 5)) |= ((__u32) 1 << (nr & 31));
++}
++static inline int hci_test_bit(int nr, void *addr)
++{
++ return *((__u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31));
++}
++#else
++#define hci_set_bit set_bit
++#define hci_test_bit test_bit
++#endif
+
++/* Ioctl requests structures */
+ struct hci_dev_stats {
+ __u32 err_rx;
+ __u32 err_tx;
+@@ -433,11 +736,13 @@
+ __u8 features[8];
+
+ __u32 pkt_type;
++ __u32 link_policy;
++ __u32 link_mode;
+
+ __u16 acl_mtu;
+- __u16 acl_max;
++ __u16 acl_pkts;
+ __u16 sco_mtu;
+- __u16 sco_max;
++ __u16 sco_pkts;
+
+ struct hci_dev_stats stat;
+ };
+@@ -445,6 +750,20 @@
+ struct hci_conn_info {
+ __u16 handle;
+ bdaddr_t bdaddr;
++ __u8 type;
++ __u8 out;
++ __u16 state;
++ __u32 link_mode;
++};
++
++struct hci_dev_req {
++ __u16 dev_id;
++ __u32 dev_opt;
++};
++
++struct hci_dev_list_req {
++ __u16 dev_num;
++ struct hci_dev_req dev_req[0]; /* hci_dev_req structures */
+ };
+
+ struct hci_conn_list_req {
+@@ -453,4 +772,26 @@
+ struct hci_conn_info conn_info[0];
+ };
+
++struct hci_conn_info_req {
++ bdaddr_t bdaddr;
++ __u8 type;
++ struct hci_conn_info conn_info[0];
++};
++
++struct hci_inquiry_req {
++ __u16 dev_id;
++ __u16 flags;
++ __u8 lap[3];
++ __u8 length;
++ __u8 num_rsp;
++};
++#define IREQ_CACHE_FLUSH 0x0001
++
++struct hci_remotename_req {
++ __u16 dev_id;
++ __u16 flags;
++ bdaddr_t bdaddr;
++ __u8 name[248];
++};
++
+ #endif /* __HCI_H */
+diff -urN linux-2.4.18/include/net/bluetooth/hci_uart.h linux-2.4.18-mh15/include/net/bluetooth/hci_uart.h
+--- linux-2.4.18/include/net/bluetooth/hci_uart.h 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/include/net/bluetooth/hci_uart.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,62 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * $Id: hci_uart.h,v 1.2 2001/06/02 01:40:08 maxk Exp $
+- */
+-
+-#ifndef N_HCI
+-#define N_HCI 15
+-#endif
+-
+-#ifdef __KERNEL__
+-
+-#define tty2n_hci(tty) ((struct n_hci *)((tty)->disc_data))
+-#define n_hci2tty(n_hci) ((n_hci)->tty)
+-
+-struct n_hci {
+- struct tty_struct *tty;
+- struct hci_dev hdev;
+-
+- struct sk_buff_head txq;
+- unsigned long tx_state;
+-
+- spinlock_t rx_lock;
+- unsigned long rx_state;
+- unsigned long rx_count;
+- struct sk_buff *rx_skb;
+-};
+-
+-/* Transmit states */
+-#define TRANS_SENDING 1
+-#define TRANS_WAKEUP 2
+-
+-/* Receiver States */
+-#define WAIT_PACKET_TYPE 0
+-#define WAIT_EVENT_HDR 1
+-#define WAIT_ACL_HDR 2
+-#define WAIT_SCO_HDR 3
+-#define WAIT_DATA 4
+-
+-#endif /* __KERNEL__ */
+diff -urN linux-2.4.18/include/net/bluetooth/hci_usb.h linux-2.4.18-mh15/include/net/bluetooth/hci_usb.h
+--- linux-2.4.18/include/net/bluetooth/hci_usb.h 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/include/net/bluetooth/hci_usb.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,68 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * $Id: hci_usb.h,v 1.3 2001/06/02 01:40:08 maxk Exp $
+- */
+-
+-#ifdef __KERNEL__
+-
+-/* Class, SubClass, and Protocol codes that describe a Bluetooth device */
+-#define HCI_DEV_CLASS 0xe0 /* Wireless class */
+-#define HCI_DEV_SUBCLASS 0x01 /* RF subclass */
+-#define HCI_DEV_PROTOCOL 0x01 /* Bluetooth programming protocol */
+-
+-#define HCI_CTRL_REQ 0x20
+-
+-struct hci_usb {
+- struct usb_device *udev;
+-
+- devrequest dev_req;
+- struct urb *ctrl_urb;
+- struct urb *intr_urb;
+- struct urb *read_urb;
+- struct urb *write_urb;
+-
+- __u8 *read_buf;
+- __u8 *intr_buf;
+- struct sk_buff *intr_skb;
+- int intr_count;
+-
+- __u8 bulk_out_ep_addr;
+- __u8 bulk_in_ep_addr;
+- __u8 intr_in_ep_addr;
+- __u8 intr_in_interval;
+-
+- struct hci_dev hdev;
+-
+- unsigned long tx_state;
+- struct sk_buff_head tx_ctrl_q;
+- struct sk_buff_head tx_write_q;
+-};
+-
+-/* Transmit states */
+-#define HCI_TX_CTRL 1
+-#define HCI_TX_WRITE 2
+-
+-#endif /* __KERNEL__ */
+diff -urN linux-2.4.18/include/net/bluetooth/hci_vhci.h linux-2.4.18-mh15/include/net/bluetooth/hci_vhci.h
+--- linux-2.4.18/include/net/bluetooth/hci_vhci.h 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/include/net/bluetooth/hci_vhci.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,50 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * $Id: hci_vhci.h,v 1.2 2001/08/01 01:02:20 maxk Exp $
+- */
+-
+-#ifndef __HCI_VHCI_H
+-#define __HCI_VHCI_H
+-
+-#ifdef __KERNEL__
+-
+-struct hci_vhci_struct {
+- struct hci_dev hdev;
+- __u32 flags;
+- wait_queue_head_t read_wait;
+- struct sk_buff_head readq;
+- struct fasync_struct *fasync;
+-};
+-
+-/* VHCI device flags */
+-#define VHCI_FASYNC 0x0010
+-
+-#endif /* __KERNEL__ */
+-
+-#define VHCI_DEV "/dev/vhci"
+-#define VHCI_MINOR 250
+-
+-#endif /* __HCI_VHCI_H */
+diff -urN linux-2.4.18/include/net/bluetooth/l2cap_core.h linux-2.4.18-mh15/include/net/bluetooth/l2cap_core.h
+--- linux-2.4.18/include/net/bluetooth/l2cap_core.h 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/include/net/bluetooth/l2cap_core.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,144 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * $Id: l2cap_core.h,v 1.6 2001/08/03 04:19:49 maxk Exp $
+- */
+-
+-#ifndef __L2CAP_CORE_H
+-#define __L2CAP_CORE_H
+-
+-#ifdef __KERNEL__
+-
+-/* ----- L2CAP interface ----- */
+-struct l2cap_iff {
+- struct list_head list;
+- struct hci_dev *hdev;
+- bdaddr_t *bdaddr;
+- __u16 mtu;
+- spinlock_t lock;
+- struct list_head conn_list;
+-};
+-
+-static inline void l2cap_iff_lock(struct l2cap_iff *iff)
+-{
+- spin_lock(&iff->lock);
+-}
+-
+-static inline void l2cap_iff_unlock(struct l2cap_iff *iff)
+-{
+- spin_unlock(&iff->lock);
+-}
+-
+-/* ----- L2CAP connections ----- */
+-struct l2cap_chan_list {
+- struct sock *head;
+- rwlock_t lock;
+- long num;
+-};
+-
+-struct l2cap_conn {
+- struct l2cap_iff *iff;
+- struct list_head list;
+-
+- struct hci_conn *hconn;
+-
+- __u16 state;
+- __u8 out;
+- bdaddr_t src;
+- bdaddr_t dst;
+-
+- spinlock_t lock;
+- atomic_t refcnt;
+-
+- struct sk_buff *rx_skb;
+- __u32 rx_len;
+- __u8 rx_ident;
+- __u8 tx_ident;
+-
+- struct l2cap_chan_list chan_list;
+-
+- struct timer_list timer;
+-};
+-
+-static inline void __l2cap_conn_link(struct l2cap_iff *iff, struct l2cap_conn *c)
+-{
+- list_add(&c->list, &iff->conn_list);
+-}
+-
+-static inline void __l2cap_conn_unlink(struct l2cap_iff *iff, struct l2cap_conn *c)
+-{
+- list_del(&c->list);
+-}
+-
+-/* ----- L2CAP channel and socket info ----- */
+-#define l2cap_pi(sk) ((struct l2cap_pinfo *) &sk->protinfo)
+-
+-struct l2cap_accept_q {
+- struct sock *head;
+- struct sock *tail;
+-};
+-
+-struct l2cap_pinfo {
+- bdaddr_t src;
+- bdaddr_t dst;
+- __u16 psm;
+- __u16 dcid;
+- __u16 scid;
+- __u32 flags;
+-
+- __u16 imtu;
+- __u16 omtu;
+- __u16 flush_to;
+-
+- __u8 conf_state;
+- __u16 conf_mtu;
+-
+- __u8 ident;
+-
+- struct l2cap_conn *conn;
+- struct sock *next_c;
+- struct sock *prev_c;
+-
+- struct sock *parent;
+- struct sock *next_q;
+- struct sock *prev_q;
+-
+- struct l2cap_accept_q accept_q;
+-};
+-
+-#define CONF_REQ_SENT 0x01
+-#define CONF_INPUT_DONE 0x02
+-#define CONF_OUTPUT_DONE 0x04
+-
+-extern struct bluez_sock_list l2cap_sk_list;
+-extern struct list_head l2cap_iff_list;
+-extern rwlock_t l2cap_rt_lock;
+-
+-extern void l2cap_register_proc(void);
+-extern void l2cap_unregister_proc(void);
+-
+-#endif /* __KERNEL__ */
+-
+-#endif /* __L2CAP_CORE_H */
+diff -urN linux-2.4.18/include/net/bluetooth/l2cap.h linux-2.4.18-mh15/include/net/bluetooth/l2cap.h
+--- linux-2.4.18/include/net/bluetooth/l2cap.h 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/include/net/bluetooth/l2cap.h 2004-08-01 16:26:23.000000000 +0200
+@@ -23,22 +23,17 @@
+ */
+
+ /*
+- * $Id: l2cap.h,v 1.5 2001/06/14 21:28:26 maxk Exp $
++ * $Id: l2cap.h,v 1.1.1.1 2002/03/08 21:03:15 maxk Exp $
+ */
+
+ #ifndef __L2CAP_H
+ #define __L2CAP_H
+
+-#include <asm/types.h>
+-#include <asm/byteorder.h>
+-
+ /* L2CAP defaults */
+ #define L2CAP_DEFAULT_MTU 672
+ #define L2CAP_DEFAULT_FLUSH_TO 0xFFFF
+
+ #define L2CAP_CONN_TIMEOUT (HZ * 40)
+-#define L2CAP_DISCONN_TIMEOUT (HZ * 2)
+-#define L2CAP_CONN_IDLE_TIMEOUT (HZ * 60)
+
+ /* L2CAP socket address */
+ struct sockaddr_l2 {
+@@ -47,17 +42,12 @@
+ bdaddr_t l2_bdaddr;
+ };
+
+-/* set/get sockopt defines */
+-#define L2CAP_OPTIONS 0x01
++/* Socket options */
++#define L2CAP_OPTIONS 0x01
+ struct l2cap_options {
+ __u16 omtu;
+ __u16 imtu;
+ __u16 flush_to;
+- __u32 token_rate;
+- __u32 bucket_size;
+- __u32 pick_band;
+- __u32 latency;
+- __u32 delay_var;
+ };
+
+ #define L2CAP_CONNINFO 0x02
+@@ -65,6 +55,27 @@
+ __u16 hci_handle;
+ };
+
++#define L2CAP_LM 0x03
++#define L2CAP_LM_MASTER 0x0001
++#define L2CAP_LM_AUTH 0x0002
++#define L2CAP_LM_ENCRYPT 0x0004
++#define L2CAP_LM_TRUSTED 0x0008
++#define L2CAP_LM_RELIABLE 0x0010
++
++#define L2CAP_QOS 0x04
++struct l2cap_qos {
++ __u16 service_type;
++ __u32 token_rate;
++ __u32 token_bucket_size;
++ __u32 peak_bandwidth;
++ __u32 latency;
++ __u32 delay_variation;
++};
++
++#define L2CAP_SERV_NO_TRAFFIC 0x00
++#define L2CAP_SERV_BEST_EFFORT 0x01
++#define L2CAP_SERV_GUARANTEED 0x02
++
+ /* L2CAP command codes */
+ #define L2CAP_COMMAND_REJ 0x01
+ #define L2CAP_CONN_REQ 0x02
+@@ -79,7 +90,6 @@
+ #define L2CAP_INFO_RSP 0x0b
+
+ /* L2CAP structures */
+-
+ typedef struct {
+ __u16 len;
+ __u16 cid;
+@@ -112,11 +122,17 @@
+ } __attribute__ ((packed)) l2cap_conn_rsp;
+ #define L2CAP_CONN_RSP_SIZE 8
+
+-#define L2CAP_CONN_SUCCESS 0x0000
+-#define L2CAP_CONN_PEND 0x0001
+-#define L2CAP_CONN_BAD_PSM 0x0002
+-#define L2CAP_CONN_SEC_BLOCK 0x0003
+-#define L2CAP_CONN_NO_MEM 0x0004
++/* connect result */
++#define L2CAP_CR_SUCCESS 0x0000
++#define L2CAP_CR_PEND 0x0001
++#define L2CAP_CR_BAD_PSM 0x0002
++#define L2CAP_CR_SEC_BLOCK 0x0003
++#define L2CAP_CR_NO_MEM 0x0004
++
++/* connect status */
++#define L2CAP_CS_NO_INFO 0x0000
++#define L2CAP_CS_AUTHEN_PEND 0x0001
++#define L2CAP_CS_AUTHOR_PEND 0x0002
+
+ typedef struct {
+ __u16 dcid;
+@@ -147,6 +163,8 @@
+ #define L2CAP_CONF_FLUSH_TO 0x02
+ #define L2CAP_CONF_QOS 0x03
+
++#define L2CAP_CONF_MAX_SIZE 22
++
+ typedef struct {
+ __u16 dcid;
+ __u16 scid;
+@@ -159,4 +177,82 @@
+ } __attribute__ ((packed)) l2cap_disconn_rsp;
+ #define L2CAP_DISCONN_RSP_SIZE 4
+
++typedef struct {
++ __u16 type;
++ __u8 data[0];
++} __attribute__ ((packed)) l2cap_info_req;
++#define L2CAP_INFO_REQ_SIZE 2
++
++typedef struct {
++ __u16 type;
++ __u16 result;
++ __u8 data[0];
++} __attribute__ ((packed)) l2cap_info_rsp;
++#define L2CAP_INFO_RSP_SIZE 4
++
++/* info type */
++#define L2CAP_IT_CL_MTU 0x0001
++#define L2CAP_IT_FEAT_MASK 0x0002
++
++/* info result */
++#define L2CAP_IR_SUCCESS 0x0000
++#define L2CAP_IR_NOTSUPP 0x0001
++
++/* ----- L2CAP connections ----- */
++struct l2cap_chan_list {
++ struct sock *head;
++ rwlock_t lock;
++ long num;
++};
++
++struct l2cap_conn {
++ struct hci_conn *hcon;
++
++ bdaddr_t *dst;
++ bdaddr_t *src;
++
++ unsigned int mtu;
++
++ spinlock_t lock;
++
++ struct sk_buff *rx_skb;
++ __u32 rx_len;
++ __u8 rx_ident;
++ __u8 tx_ident;
++
++ struct l2cap_chan_list chan_list;
++};
++
++/* ----- L2CAP channel and socket info ----- */
++#define l2cap_pi(sk) ((struct l2cap_pinfo *) &sk->tp_pinfo)
++
++struct l2cap_pinfo {
++ __u16 psm;
++ __u16 dcid;
++ __u16 scid;
++
++ __u16 imtu;
++ __u16 omtu;
++ __u16 flush_to;
++
++ __u32 link_mode;
++
++ __u8 conf_state;
++ __u8 conf_retry;
++ __u16 conf_mtu;
++
++ __u8 ident;
++
++ struct l2cap_conn *conn;
++ struct sock *next_c;
++ struct sock *prev_c;
++};
++
++#define L2CAP_CONF_REQ_SENT 0x01
++#define L2CAP_CONF_INPUT_DONE 0x02
++#define L2CAP_CONF_OUTPUT_DONE 0x04
++#define L2CAP_CONF_MAX_RETRIES 2
++
++void l2cap_load(void);
++
+ #endif /* __L2CAP_H */
+diff -urN linux-2.4.18/include/net/bluetooth/rfcomm.h linux-2.4.18-mh15/include/net/bluetooth/rfcomm.h
+--- linux-2.4.18/include/net/bluetooth/rfcomm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/include/net/bluetooth/rfcomm.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,361 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ RPN support - Dirk Husemann <hud@zurich.ibm.com>
++*/
++
++/*
++ * $Id: rfcomm.h,v 1.31 2002/10/18 20:12:11 maxk Exp $
++ */
++
++#ifndef __RFCOMM_H
++#define __RFCOMM_H
++
++#define RFCOMM_PSM 3
++
++#define RFCOMM_CONN_TIMEOUT (HZ * 30)
++#define RFCOMM_DISC_TIMEOUT (HZ * 20)
++
++#define RFCOMM_DEFAULT_MTU 127
++#define RFCOMM_DEFAULT_CREDITS 7
++
++#define RFCOMM_MAX_L2CAP_MTU 1024
++#define RFCOMM_MAX_CREDITS 40
++
++#define RFCOMM_SKB_HEAD_RESERVE 8
++#define RFCOMM_SKB_TAIL_RESERVE 2
++#define RFCOMM_SKB_RESERVE (RFCOMM_SKB_HEAD_RESERVE + RFCOMM_SKB_TAIL_RESERVE)
++
++#define RFCOMM_SABM 0x2f
++#define RFCOMM_DISC 0x43
++#define RFCOMM_UA 0x63
++#define RFCOMM_DM 0x0f
++#define RFCOMM_UIH 0xef
++
++#define RFCOMM_TEST 0x08
++#define RFCOMM_FCON 0x28
++#define RFCOMM_FCOFF 0x18
++#define RFCOMM_MSC 0x38
++#define RFCOMM_RPN 0x24
++#define RFCOMM_RLS 0x14
++#define RFCOMM_PN 0x20
++#define RFCOMM_NSC 0x04
++
++#define RFCOMM_V24_FC 0x02
++#define RFCOMM_V24_RTC 0x04
++#define RFCOMM_V24_RTR 0x08
++#define RFCOMM_V24_IC 0x40
++#define RFCOMM_V24_DV 0x80
++
++#define RFCOMM_RPN_BR_2400 0x0
++#define RFCOMM_RPN_BR_4800 0x1
++#define RFCOMM_RPN_BR_7200 0x2
++#define RFCOMM_RPN_BR_9600 0x3
++#define RFCOMM_RPN_BR_19200 0x4
++#define RFCOMM_RPN_BR_38400 0x5
++#define RFCOMM_RPN_BR_57600 0x6
++#define RFCOMM_RPN_BR_115200 0x7
++#define RFCOMM_RPN_BR_230400 0x8
++
++#define RFCOMM_RPN_DATA_5 0x0
++#define RFCOMM_RPN_DATA_6 0x1
++#define RFCOMM_RPN_DATA_7 0x2
++#define RFCOMM_RPN_DATA_8 0x3
++
++#define RFCOMM_RPN_STOP_1 0
++#define RFCOMM_RPN_STOP_15 1
++
++#define RFCOMM_RPN_PARITY_NONE 0x0
++#define RFCOMM_RPN_PARITY_ODD 0x4
++#define RFCOMM_RPN_PARITY_EVEN 0x5
++#define RFCOMM_RPN_PARITY_MARK 0x6
++#define RFCOMM_RPN_PARITY_SPACE 0x7
++
++#define RFCOMM_RPN_FLOW_NONE 0x00
++
++#define RFCOMM_RPN_XON_CHAR 0x11
++#define RFCOMM_RPN_XOFF_CHAR 0x13
++
++#define RFCOMM_RPN_PM_BITRATE 0x0001
++#define RFCOMM_RPN_PM_DATA 0x0002
++#define RFCOMM_RPN_PM_STOP 0x0004
++#define RFCOMM_RPN_PM_PARITY 0x0008
++#define RFCOMM_RPN_PM_PARITY_TYPE 0x0010
++#define RFCOMM_RPN_PM_XON 0x0020
++#define RFCOMM_RPN_PM_XOFF 0x0040
++#define RFCOMM_RPN_PM_FLOW 0x3F00
++
++#define RFCOMM_RPN_PM_ALL 0x3F7F
++
++struct rfcomm_hdr {
++ u8 addr;
++ u8 ctrl;
++ u8 len; // Actual size can be 2 bytes
++} __attribute__ ((packed));
++
++struct rfcomm_cmd {
++ u8 addr;
++ u8 ctrl;
++ u8 len;
++ u8 fcs;
++} __attribute__ ((packed));
++
++struct rfcomm_mcc {
++ u8 type;
++ u8 len;
++} __attribute__ ((packed));
++
++struct rfcomm_pn {
++ u8 dlci;
++ u8 flow_ctrl;
++ u8 priority;
++ u8 ack_timer;
++ u16 mtu;
++ u8 max_retrans;
++ u8 credits;
++} __attribute__ ((packed));
++
++struct rfcomm_rpn {
++ u8 dlci;
++ u8 bit_rate;
++ u8 line_settings;
++ u8 flow_ctrl;
++ u8 xon_char;
++ u8 xoff_char;
++ u16 param_mask;
++} __attribute__ ((packed));
++
++struct rfcomm_rls {
++ u8 dlci;
++ u8 status;
++} __attribute__ ((packed));
++
++struct rfcomm_msc {
++ u8 dlci;
++ u8 v24_sig;
++} __attribute__ ((packed));
++
++/* ---- Core structures, flags etc ---- */
++
++struct rfcomm_session {
++ struct list_head list;
++ struct socket *sock;
++ unsigned long state;
++ unsigned long flags;
++ atomic_t refcnt;
++ int initiator;
++
++ /* Default DLC parameters */
++ int cfc;
++ uint mtu;
++
++ struct list_head dlcs;
++};
++
++struct rfcomm_dlc {
++ struct list_head list;
++ struct rfcomm_session *session;
++ struct sk_buff_head tx_queue;
++ struct timer_list timer;
++
++ spinlock_t lock;
++ unsigned long state;
++ unsigned long flags;
++ atomic_t refcnt;
++ u8 dlci;
++ u8 addr;
++ u8 priority;
++ u8 v24_sig;
++ u8 mscex;
++
++ uint mtu;
++ uint cfc;
++ uint rx_credits;
++ uint tx_credits;
++
++ void *owner;
++
++ void (*data_ready)(struct rfcomm_dlc *d, struct sk_buff *skb);
++ void (*state_change)(struct rfcomm_dlc *d, int err);
++ void (*modem_status)(struct rfcomm_dlc *d, u8 v24_sig);
++};
++
++/* DLC and session flags */
++#define RFCOMM_RX_THROTTLED 0
++#define RFCOMM_TX_THROTTLED 1
++#define RFCOMM_MSC_PENDING 2
++#define RFCOMM_TIMED_OUT 3
++
++/* Scheduling flags and events */
++#define RFCOMM_SCHED_STATE 0
++#define RFCOMM_SCHED_RX 1
++#define RFCOMM_SCHED_TX 2
++#define RFCOMM_SCHED_TIMEO 3
++#define RFCOMM_SCHED_WAKEUP 31
++
++/* MSC exchange flags */
++#define RFCOMM_MSCEX_TX 1
++#define RFCOMM_MSCEX_RX 2
++#define RFCOMM_MSCEX_OK (RFCOMM_MSCEX_TX + RFCOMM_MSCEX_RX)
++
++/* CFC states */
++#define RFCOMM_CFC_UNKNOWN -1
++#define RFCOMM_CFC_DISABLED 0
++#define RFCOMM_CFC_ENABLED RFCOMM_MAX_CREDITS
++
++extern struct task_struct *rfcomm_thread;
++extern unsigned long rfcomm_event;
++
++static inline void rfcomm_schedule(uint event)
++{
++ if (!rfcomm_thread)
++ return;
++ set_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event);
++ wake_up_process(rfcomm_thread);
++}
++
++extern struct semaphore rfcomm_sem;
++#define rfcomm_lock() down(&rfcomm_sem);
++#define rfcomm_unlock() up(&rfcomm_sem);
++
++/* ---- RFCOMM DLCs (channels) ---- */
++struct rfcomm_dlc *rfcomm_dlc_alloc(int prio);
++void rfcomm_dlc_free(struct rfcomm_dlc *d);
++int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel);
++int rfcomm_dlc_close(struct rfcomm_dlc *d, int reason);
++int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb);
++int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig);
++int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig);
++
++#define rfcomm_dlc_lock(d) spin_lock(&d->lock)
++#define rfcomm_dlc_unlock(d) spin_unlock(&d->lock)
++
++static inline void rfcomm_dlc_hold(struct rfcomm_dlc *d)
++{
++ atomic_inc(&d->refcnt);
++}
++
++static inline void rfcomm_dlc_put(struct rfcomm_dlc *d)
++{
++ if (atomic_dec_and_test(&d->refcnt))
++ rfcomm_dlc_free(d);
++}
++
++extern void FASTCALL(__rfcomm_dlc_throttle(struct rfcomm_dlc *d));
++extern void FASTCALL(__rfcomm_dlc_unthrottle(struct rfcomm_dlc *d));
++
++static inline void rfcomm_dlc_throttle(struct rfcomm_dlc *d)
++{
++ if (!test_and_set_bit(RFCOMM_RX_THROTTLED, &d->flags))
++ __rfcomm_dlc_throttle(d);
++}
++
++static inline void rfcomm_dlc_unthrottle(struct rfcomm_dlc *d)
++{
++ if (test_and_clear_bit(RFCOMM_RX_THROTTLED, &d->flags))
++ __rfcomm_dlc_unthrottle(d);
++}
++
++/* ---- RFCOMM sessions ---- */
++struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state);
++struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst);
++struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst, int *err);
++void rfcomm_session_del(struct rfcomm_session *s);
++void rfcomm_session_close(struct rfcomm_session *s, int err);
++void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst);
++
++static inline void rfcomm_session_hold(struct rfcomm_session *s)
++{
++ atomic_inc(&s->refcnt);
++}
++
++static inline void rfcomm_session_put(struct rfcomm_session *s)
++{
++ if (atomic_dec_and_test(&s->refcnt))
++ rfcomm_session_del(s);
++}
++
++/* ---- RFCOMM chechsum ---- */
++extern u8 rfcomm_crc_table[];
++
++/* ---- RFCOMM sockets ---- */
++struct sockaddr_rc {
++ sa_family_t rc_family;
++ bdaddr_t rc_bdaddr;
++ u8 rc_channel;
++};
++
++#define rfcomm_pi(sk) ((struct rfcomm_pinfo *) &sk->tp_pinfo)
++
++struct rfcomm_pinfo {
++ struct rfcomm_dlc *dlc;
++ u8 channel;
++};
++
++int rfcomm_init_sockets(void);
++void rfcomm_cleanup_sockets(void);
++
++int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc **d);
++
++/* ---- RFCOMM TTY ---- */
++#define RFCOMM_MAX_DEV 256
++
++#define RFCOMMCREATEDEV _IOW('R', 200, int)
++#define RFCOMMRELEASEDEV _IOW('R', 201, int)
++#define RFCOMMGETDEVLIST _IOR('R', 210, int)
++#define RFCOMMGETDEVINFO _IOR('R', 211, int)
++#define RFCOMMSTEALDLC _IOW('R', 220, int)
++
++#define RFCOMM_REUSE_DLC 0
++#define RFCOMM_RELEASE_ONHUP 1
++#define RFCOMM_HANGUP_NOW 2
++#define RFCOMM_TTY_ATTACHED 3
++
++struct rfcomm_dev_req {
++ s16 dev_id;
++ u32 flags;
++ bdaddr_t src;
++ bdaddr_t dst;
++ u8 channel;
++};
++
++struct rfcomm_dev_info {
++ s16 id;
++ u32 flags;
++ u16 state;
++ bdaddr_t src;
++ bdaddr_t dst;
++ u8 channel;
++};
++
++struct rfcomm_dev_list_req {
++ u16 dev_num;
++ struct rfcomm_dev_info dev_info[0];
++};
++
++int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, unsigned long arg);
++int rfcomm_init_ttys(void);
++void rfcomm_cleanup_ttys(void);
++
++#endif /* __RFCOMM_H */
+diff -urN linux-2.4.18/include/net/bluetooth/sco.h linux-2.4.18-mh15/include/net/bluetooth/sco.h
+--- linux-2.4.18/include/net/bluetooth/sco.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/include/net/bluetooth/sco.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,81 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: sco.h,v 1.1.1.1 2002/03/08 21:03:15 maxk Exp $
++ */
++
++#ifndef __SCO_H
++#define __SCO_H
++
++/* SCO defaults */
++#define SCO_DEFAULT_MTU 500
++#define SCO_DEFAULT_FLUSH_TO 0xFFFF
++
++#define SCO_CONN_TIMEOUT (HZ * 40)
++#define SCO_DISCONN_TIMEOUT (HZ * 2)
++#define SCO_CONN_IDLE_TIMEOUT (HZ * 60)
++
++/* SCO socket address */
++struct sockaddr_sco {
++ sa_family_t sco_family;
++ bdaddr_t sco_bdaddr;
++};
++
++/* set/get sockopt defines */
++#define SCO_OPTIONS 0x01
++struct sco_options {
++ __u16 mtu;
++};
++
++#define SCO_CONNINFO 0x02
++struct sco_conninfo {
++ __u16 hci_handle;
++};
++
++/* ---- SCO connections ---- */
++struct sco_conn {
++ struct hci_conn *hcon;
++
++ bdaddr_t *dst;
++ bdaddr_t *src;
++
++ spinlock_t lock;
++ struct sock *sk;
++
++ unsigned int mtu;
++};
++
++#define sco_conn_lock(c) spin_lock(&c->lock);
++#define sco_conn_unlock(c) spin_unlock(&c->lock);
++
++/* ----- SCO socket info ----- */
++#define sco_pi(sk) ((struct sco_pinfo *) &sk->tp_pinfo)
++
++struct sco_pinfo {
++ __u32 flags;
++ struct sco_conn *conn;
++};
++
++#endif /* __SCO_H */
+diff -urN linux-2.4.18/include/pcmcia/ciscode.h linux-2.4.18-mh15/include/pcmcia/ciscode.h
+--- linux-2.4.18/include/pcmcia/ciscode.h 2001-12-21 18:42:04.000000000 +0100
++++ linux-2.4.18-mh15/include/pcmcia/ciscode.h 2004-08-01 16:26:23.000000000 +0200
+@@ -1,5 +1,5 @@
+ /*
+- * ciscode.h 1.48 2001/08/24 12:16:12
++ * ciscode.h 1.57 2002/11/03 20:38:14
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+@@ -60,6 +60,10 @@
+ #define PRODID_INTEL_DUAL_RS232 0x0301
+ #define PRODID_INTEL_2PLUS 0x8422
+
++#define MANFID_KME 0x0032
++#define PRODID_KME_KXLC005_A 0x0704
++#define PRODID_KME_KXLC005_B 0x2904
++
+ #define MANFID_LINKSYS 0x0143
+ #define PRODID_LINKSYS_PCMLM28 0xc0ab
+ #define PRODID_LINKSYS_3400 0x3341
+@@ -94,6 +98,8 @@
+ #define PRODID_OSITECH_JACK_336 0x0007
+ #define PRODID_OSITECH_SEVEN 0x0008
+
++#define MANFID_OXSEMI 0x0279
++
+ #define MANFID_PIONEER 0x000b
+
+ #define MANFID_PSION 0x016c
+@@ -103,6 +109,7 @@
+ #define PRODID_QUATECH_SPP100 0x0003
+ #define PRODID_QUATECH_DUAL_RS232 0x0012
+ #define PRODID_QUATECH_DUAL_RS232_D1 0x0007
++#define PRODID_QUATECH_DUAL_RS232_D2 0x0052
+ #define PRODID_QUATECH_QUAD_RS232 0x001b
+ #define PRODID_QUATECH_DUAL_RS422 0x000e
+ #define PRODID_QUATECH_QUAD_RS422 0x0045
+@@ -120,9 +127,12 @@
+
+ #define MANFID_TDK 0x0105
+ #define PRODID_TDK_CF010 0x0900
++#define PRODID_TDK_GN3410 0x4815
+
+ #define MANFID_TOSHIBA 0x0098
+
++#define MANFID_UNGERMANN 0x02c0
++
+ #define MANFID_XIRCOM 0x0105
+
+ #endif /* _LINUX_CISCODE_H */
+diff -urN linux-2.4.18/kernel/ksyms.c linux-2.4.18-mh15/kernel/ksyms.c
+--- linux-2.4.18/kernel/ksyms.c 2002-02-25 20:38:13.000000000 +0100
++++ linux-2.4.18-mh15/kernel/ksyms.c 2004-08-01 16:26:23.000000000 +0200
+@@ -47,6 +47,7 @@
+ #include <linux/in6.h>
+ #include <linux/completion.h>
+ #include <linux/seq_file.h>
++#include <linux/firmware.h>
+ #include <asm/checksum.h>
+
+ #if defined(CONFIG_PROC_FS)
+@@ -538,6 +539,13 @@
+ EXPORT_SYMBOL(strspn);
+ EXPORT_SYMBOL(strsep);
+
++#ifdef CONFIG_FW_LOADER
++EXPORT_SYMBOL(release_firmware);
++EXPORT_SYMBOL(request_firmware);
++EXPORT_SYMBOL(request_firmware_nowait);
++EXPORT_SYMBOL(register_firmware);
++#endif
++
+ /* software interrupts */
+ EXPORT_SYMBOL(tasklet_hi_vec);
+ EXPORT_SYMBOL(tasklet_vec);
+diff -urN linux-2.4.18/lib/Config.in linux-2.4.18-mh15/lib/Config.in
+--- linux-2.4.18/lib/Config.in 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/lib/Config.in 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,12 @@
++#
++# Library configuration
++#
++mainmenu_option next_comment
++comment 'Library routines'
++
++if [ "$CONFIG_EXPERIMENTAL" = "y" -a \
++ "$CONFIG_HOTPLUG" = "y" ]; then
++ tristate 'Hotplug firmware loading support (EXPERIMENTAL)' CONFIG_FW_LOADER
++fi
++
++endmenu
+diff -urN linux-2.4.18/lib/firmware_class.c linux-2.4.18-mh15/lib/firmware_class.c
+--- linux-2.4.18/lib/firmware_class.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/lib/firmware_class.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,573 @@
++/*
++ * firmware_class.c - Multi purpose firmware loading support
++ *
++ * Copyright (c) 2003 Manuel Estrada Sainz <ranty@debian.org>
++ *
++ * Please see Documentation/firmware_class/ for more information.
++ *
++ */
++/*
++ * Based on kernel/kmod.c and drivers/usb/usb.c
++ */
++/*
++ kernel/kmod.c
++ Kirk Petersen
++
++ Reorganized not to be a daemon by Adam Richter, with guidance
++ from Greg Zornetzer.
++
++ Modified to avoid chroot and file sharing problems.
++ Mikael Pettersson
++
++ Limit the concurrent number of kmod modprobes to catch loops from
++ "modprobe needs a service that is in a module".
++ Keith Owens <kaos@ocs.com.au> December 1999
++
++ Unblock all signals when we exec a usermode process.
++ Shuu Yamaguchi <shuu@wondernetworkresources.com> December 2000
++*/
++/*
++ * drivers/usb/usb.c
++ *
++ * (C) Copyright Linus Torvalds 1999
++ * (C) Copyright Johannes Erdfelt 1999-2001
++ * (C) Copyright Andreas Gal 1999
++ * (C) Copyright Gregory P. Smith 1999
++ * (C) Copyright Deti Fliegl 1999 (new USB architecture)
++ * (C) Copyright Randy Dunlap 2000
++ * (C) Copyright David Brownell 2000 (kernel hotplug, usb_device_id)
++ * (C) Copyright Yggdrasil Computing, Inc. 2000
++ * (usb_device_id matching changes by Adam J. Richter)
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/string.h>
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/kmod.h>
++#include <linux/proc_fs.h>
++#include <linux/vmalloc.h>
++#include <asm/hardirq.h>
++
++#include "linux/firmware.h"
++
++MODULE_AUTHOR("Manuel Estrada Sainz <ranty@debian.org>");
++MODULE_DESCRIPTION("Multi purpose firmware loading support");
++MODULE_LICENSE("GPL");
++
++#define err(format, arg...) \
++ printk(KERN_ERR "%s:%s: " format "\n",__FILE__, __FUNCTION__ , ## arg)
++#define warn(format, arg...) \
++ printk(KERN_WARNING "%s:%s: " format "\n",__FILE__, __FUNCTION__ , ## arg)
++#define dbg(format, arg...) \
++ printk(KERN_DEBUG "%s:%s: " format "\n",__FILE__, __FUNCTION__ , ## arg)
++
++static int loading_timeout = 10; /* In seconds */
++static struct proc_dir_entry *proc_dir_timeout;
++static struct proc_dir_entry *proc_dir;
++
++#ifdef CONFIG_HOTPLUG
++
++static int
++call_helper(char *verb, const char *name, const char *device)
++{
++ char *argv[3], **envp, *buf, *scratch;
++ int i = 0;
++
++ int retval = 0;
++
++ if (!hotplug_path[0])
++ return -ENOENT;
++ if (in_interrupt()) {
++ err("in_interrupt");
++ return -EFAULT;
++ }
++ if (!current->fs->root) {
++ warn("call_policy %s -- no FS yet", verb);
++ return -EPERM;
++ }
++
++ if (!(envp = (char **) kmalloc(20 * sizeof (char *), GFP_KERNEL))) {
++ err("unable to allocate envp");
++ return -ENOMEM;
++ }
++ if (!(buf = kmalloc(256, GFP_KERNEL))) {
++ kfree(envp);
++ err("unable to allocate buf");
++ return -ENOMEM;
++ }
++
++ /* only one standardized param to hotplug command: type */
++ argv[0] = hotplug_path;
++ argv[1] = "firmware";
++ argv[2] = 0;
++
++ /* minimal command environment */
++ envp[i++] = "HOME=/";
++ envp[i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";
++
++#ifdef DEBUG
++ /* hint that policy agent should enter no-stdout debug mode */
++ envp[i++] = "DEBUG=kernel";
++#endif
++ scratch = buf;
++
++ if (device) {
++ envp[i++] = scratch;
++ scratch += snprintf(scratch, FIRMWARE_NAME_MAX+25,
++ "DEVPATH=/driver/firmware/%s", device) + 1;
++ }
++
++ envp[i++] = scratch;
++ scratch += sprintf(scratch, "ACTION=%s", verb) + 1;
++
++ envp[i++] = scratch;
++ scratch += snprintf(scratch, FIRMWARE_NAME_MAX,
++ "FIRMWARE=%s", name) + 1;
++
++ envp[i++] = 0;
++
++#ifdef DEBUG
++ dbg("firmware: %s %s %s", argv[0], argv[1], verb);
++#endif
++
++ retval = call_usermodehelper(argv[0], argv, envp);
++ if (retval) {
++ printk("call_usermodehelper return %d\n", retval);
++ }
++
++ kfree(buf);
++ kfree(envp);
++ return retval;
++}
++#else
++
++static inline int
++call_helper(char *verb, const char *name, const char *device)
++{
++ return -ENOENT;
++}
++
++#endif /* CONFIG_HOTPLUG */
++
++struct firmware_priv {
++ struct completion completion;
++ struct proc_dir_entry *proc_dir;
++ struct proc_dir_entry *attr_data;
++ struct proc_dir_entry *attr_loading;
++ struct firmware *fw;
++ int loading;
++ int abort;
++ int alloc_size;
++ struct timer_list timeout;
++};
++
++static int
++firmware_timeout_show(char *buf, char **start, off_t off,
++ int count, int *eof, void *data)
++{
++ return sprintf(buf, "%d\n", loading_timeout);
++}
++
++/**
++ * firmware_timeout_store:
++ * Description:
++ * Sets the number of seconds to wait for the firmware. Once
++ * this expires an error will be return to the driver and no
++ * firmware will be provided.
++ *
++ * Note: zero means 'wait for ever'
++ *
++ **/
++static int
++firmware_timeout_store(struct file *file, const char *buf,
++ unsigned long count, void *data)
++{
++ loading_timeout = simple_strtol(buf, NULL, 10);
++ return count;
++}
++
++static int
++firmware_loading_show(char *buf, char **start, off_t off,
++ int count, int *eof, void *data)
++{
++ struct firmware_priv *fw_priv = data;
++ return sprintf(buf, "%d\n", fw_priv->loading);
++}
++
++/**
++ * firmware_loading_store: - loading control file
++ * Description:
++ * The relevant values are:
++ *
++ * 1: Start a load, discarding any previous partial load.
++ * 0: Conclude the load and handle the data to the driver code.
++ * -1: Conclude the load with an error and discard any written data.
++ **/
++static int
++firmware_loading_store(struct file *file, const char *buf,
++ unsigned long count, void *data)
++{
++ struct firmware_priv *fw_priv = data;
++ int prev_loading = fw_priv->loading;
++
++ fw_priv->loading = simple_strtol(buf, NULL, 10);
++
++ switch (fw_priv->loading) {
++ case -1:
++ fw_priv->abort = 1;
++ wmb();
++ complete(&fw_priv->completion);
++ break;
++ case 1:
++ kfree(fw_priv->fw->data);
++ fw_priv->fw->data = NULL;
++ fw_priv->fw->size = 0;
++ fw_priv->alloc_size = 0;
++ break;
++ case 0:
++ if (prev_loading == 1)
++ complete(&fw_priv->completion);
++ break;
++ }
++
++ return count;
++}
++
++static int
++firmware_data_read(char *buffer, char **start, off_t offset,
++ int count, int *eof, void *data)
++{
++ struct firmware_priv *fw_priv = data;
++ struct firmware *fw = fw_priv->fw;
++
++ if (offset > fw->size)
++ return 0;
++ if (offset + count > fw->size)
++ count = fw->size - offset;
++
++ memcpy(buffer, fw->data + offset, count);
++ *start = (void *) ((long) count);
++ return count;
++}
++static int
++fw_realloc_buffer(struct firmware_priv *fw_priv, int min_size)
++{
++ u8 *new_data;
++ int new_size;
++
++ if (min_size <= fw_priv->alloc_size)
++ return 0;
++ if((min_size % PAGE_SIZE) == 0)
++ new_size = min_size;
++ else
++ new_size = (min_size + PAGE_SIZE) & PAGE_MASK;
++ new_data = vmalloc(new_size);
++ if (!new_data) {
++ printk(KERN_ERR "%s: unable to alloc buffer\n", __FUNCTION__);
++ /* Make sure that we don't keep incomplete data */
++ fw_priv->abort = 1;
++ return -ENOMEM;
++ }
++ fw_priv->alloc_size = new_size;
++ if (fw_priv->fw->data) {
++ memcpy(new_data, fw_priv->fw->data, fw_priv->fw->size);
++ vfree(fw_priv->fw->data);
++ }
++ fw_priv->fw->data = new_data;
++ BUG_ON(min_size > fw_priv->alloc_size);
++ return 0;
++}
++
++/**
++ * firmware_data_write:
++ *
++ * Description:
++ *
++ * Data written to the 'data' attribute will be later handled to
++ * the driver as a firmware image.
++ **/
++static int
++firmware_data_write(struct file *file, const char *buffer,
++ unsigned long count, void *data)
++{
++ struct firmware_priv *fw_priv = data;
++ struct firmware *fw = fw_priv->fw;
++ int offset = file->f_pos;
++ int retval;
++
++ retval = fw_realloc_buffer(fw_priv, offset + count);
++ if (retval) {
++ printk("%s: retval:%d\n", __FUNCTION__, retval);
++ return retval;
++ }
++
++ memcpy(fw->data + offset, buffer, count);
++
++ fw->size = max_t(size_t, offset + count, fw->size);
++ file->f_pos += count;
++ return count;
++}
++
++static void
++firmware_class_timeout(u_long data)
++{
++ struct firmware_priv *fw_priv = (struct firmware_priv *) data;
++ fw_priv->abort = 1;
++ wmb();
++ complete(&fw_priv->completion);
++}
++static int
++fw_setup_class_device(struct firmware_priv **fw_priv_p,
++ const char *fw_name, const char *device)
++{
++ int retval;
++ struct firmware_priv *fw_priv = kmalloc(sizeof (struct firmware_priv),
++ GFP_KERNEL);
++ *fw_priv_p = fw_priv;
++ if (!fw_priv) {
++ retval = -ENOMEM;
++ goto out;
++ }
++ memset(fw_priv, 0, sizeof (*fw_priv));
++
++ init_completion(&fw_priv->completion);
++
++ fw_priv->timeout.function = firmware_class_timeout;
++ fw_priv->timeout.data = (u_long) fw_priv;
++ init_timer(&fw_priv->timeout);
++
++ retval = -EAGAIN;
++ fw_priv->proc_dir = create_proc_entry(device, 0644 | S_IFDIR, proc_dir);
++ if (!fw_priv->proc_dir)
++ goto err_free_fw_priv;
++
++ fw_priv->attr_data = create_proc_entry("data", 0644 | S_IFREG,
++ fw_priv->proc_dir);
++ if (!fw_priv->attr_data)
++ goto err_remove_dir;
++
++ fw_priv->attr_data->read_proc = firmware_data_read;
++ fw_priv->attr_data->write_proc = firmware_data_write;
++ fw_priv->attr_data->data = fw_priv;
++
++ fw_priv->attr_loading = create_proc_entry("loading", 0644 | S_IFREG,
++ fw_priv->proc_dir);
++ if (!fw_priv->attr_loading)
++ goto err_remove_data;
++
++ fw_priv->attr_loading->read_proc = firmware_loading_show;
++ fw_priv->attr_loading->write_proc = firmware_loading_store;
++ fw_priv->attr_loading->data = fw_priv;
++
++ retval = 0;
++ fw_priv->fw = kmalloc(sizeof (struct firmware), GFP_KERNEL);
++ if (!fw_priv->fw) {
++ printk(KERN_ERR "%s: kmalloc(struct firmware) failed\n",
++ __FUNCTION__);
++ retval = -ENOMEM;
++ goto err_remove_loading;
++ }
++ memset(fw_priv->fw, 0, sizeof (*fw_priv->fw));
++
++ goto out;
++
++err_remove_loading:
++ remove_proc_entry("loading", fw_priv->proc_dir);
++err_remove_data:
++ remove_proc_entry("data", fw_priv->proc_dir);
++err_remove_dir:
++ remove_proc_entry(device, proc_dir);
++err_free_fw_priv:
++ kfree(fw_priv);
++out:
++ return retval;
++}
++static void
++fw_remove_class_device(struct firmware_priv *fw_priv)
++{
++ remove_proc_entry("loading", fw_priv->proc_dir);
++ remove_proc_entry("data", fw_priv->proc_dir);
++ remove_proc_entry(fw_priv->proc_dir->name, proc_dir);
++}
++
++/**
++ * request_firmware: - request firmware to hotplug and wait for it
++ * Description:
++ * @firmware will be used to return a firmware image by the name
++ * of @name for device @device.
++ *
++ * Should be called from user context where sleeping is allowed.
++ *
++ * @name will be use as $FIRMWARE in the hotplug environment and
++ * should be distinctive enough not to be confused with any other
++ * firmware image for this or any other device.
++ **/
++int
++request_firmware(const struct firmware **firmware, const char *name,
++ const char *device)
++{
++ struct firmware_priv *fw_priv;
++ int retval;
++
++ if (!firmware) {
++ retval = -EINVAL;
++ goto out;
++ }
++ *firmware = NULL;
++
++ retval = fw_setup_class_device(&fw_priv, name, device);
++ if (retval)
++ goto out;
++
++ retval = call_helper("add", name, device);
++ if (retval)
++ goto out;
++ if (loading_timeout) {
++ fw_priv->timeout.expires = jiffies + loading_timeout * HZ;
++ add_timer(&fw_priv->timeout);
++ }
++
++ wait_for_completion(&fw_priv->completion);
++
++ del_timer(&fw_priv->timeout);
++ fw_remove_class_device(fw_priv);
++
++ if (fw_priv->fw->size && !fw_priv->abort) {
++ *firmware = fw_priv->fw;
++ } else {
++ retval = -ENOENT;
++ vfree(fw_priv->fw->data);
++ kfree(fw_priv->fw);
++ }
++out:
++ kfree(fw_priv);
++ return retval;
++}
++
++void
++release_firmware(const struct firmware *fw)
++{
++ if (fw) {
++ vfree(fw->data);
++ kfree(fw);
++ }
++}
++
++/**
++ * register_firmware: - provide a firmware image for later usage
++ *
++ * Description:
++ * Make sure that @data will be available by requesting firmware @name.
++ *
++ * Note: This will not be possible until some kind of persistence
++ * is available.
++ **/
++void
++register_firmware(const char *name, const u8 *data, size_t size)
++{
++ /* This is meaningless without firmware caching, so until we
++ * decide if firmware caching is reasonable just leave it as a
++ * noop */
++}
++
++/* Async support */
++struct firmware_work {
++ struct tq_struct work;
++ struct module *module;
++ const char *name;
++ const char *device;
++ void *context;
++ void (*cont)(const struct firmware *fw, void *context);
++};
++
++static void
++request_firmware_work_func(void *arg)
++{
++ struct firmware_work *fw_work = arg;
++ const struct firmware *fw;
++ if (!arg)
++ return;
++ request_firmware(&fw, fw_work->name, fw_work->device);
++ fw_work->cont(fw, fw_work->context);
++ release_firmware(fw);
++ __MOD_DEC_USE_COUNT(fw_work->module);
++ kfree(fw_work);
++}
++
++/**
++ * request_firmware_nowait:
++ *
++ * Description:
++ * Asynchronous variant of request_firmware() for contexts where
++ * it is not possible to sleep.
++ *
++ * @cont will be called asynchronously when the firmware request is over.
++ *
++ * @context will be passed over to @cont.
++ *
++ * @fw may be %NULL if firmware request fails.
++ *
++ **/
++int
++request_firmware_nowait(
++ struct module *module,
++ const char *name, const char *device, void *context,
++ void (*cont)(const struct firmware *fw, void *context))
++{
++ struct firmware_work *fw_work = kmalloc(sizeof (struct firmware_work),
++ GFP_ATOMIC);
++ if (!fw_work)
++ return -ENOMEM;
++ if (!try_inc_mod_count(module)) {
++ kfree(fw_work);
++ return -EFAULT;
++ }
++
++ *fw_work = (struct firmware_work) {
++ .module = module,
++ .name = name,
++ .device = device,
++ .context = context,
++ .cont = cont,
++ };
++ INIT_TQUEUE(&fw_work->work, request_firmware_work_func, fw_work);
++
++ schedule_task(&fw_work->work);
++ return 0;
++}
++
++static int __init
++firmware_class_init(void)
++{
++ proc_dir = create_proc_entry("driver/firmware", 0755 | S_IFDIR, NULL);
++ if (!proc_dir)
++ return -EAGAIN;
++ proc_dir_timeout = create_proc_entry("timeout",
++ 0644 | S_IFREG, proc_dir);
++ if (!proc_dir_timeout) {
++ remove_proc_entry("driver/firmware", NULL);
++ return -EAGAIN;
++ }
++ proc_dir_timeout->read_proc = firmware_timeout_show;
++ proc_dir_timeout->write_proc = firmware_timeout_store;
++ return 0;
++}
++static void __exit
++firmware_class_exit(void)
++{
++ remove_proc_entry("timeout", proc_dir);
++ remove_proc_entry("driver/firmware", NULL);
++}
++
++module_init(firmware_class_init);
++module_exit(firmware_class_exit);
++
++#ifndef CONFIG_FW_LOADER
++EXPORT_SYMBOL(release_firmware);
++EXPORT_SYMBOL(request_firmware);
++EXPORT_SYMBOL(request_firmware_nowait);
++EXPORT_SYMBOL(register_firmware);
++#endif
+diff -urN linux-2.4.18/lib/Makefile linux-2.4.18-mh15/lib/Makefile
+--- linux-2.4.18/lib/Makefile 2001-09-18 00:31:15.000000000 +0200
++++ linux-2.4.18-mh15/lib/Makefile 2004-08-01 16:26:23.000000000 +0200
+@@ -8,13 +8,17 @@
+
+ L_TARGET := lib.a
+
+-export-objs := cmdline.o dec_and_lock.o rwsem-spinlock.o rwsem.o
++export-objs := cmdline.o dec_and_lock.o rwsem-spinlock.o rwsem.o \
++ firmware_class.o
+
+ obj-y := errno.o ctype.o string.o vsprintf.o brlock.o cmdline.o bust_spinlocks.o rbtree.o
+
++obj-$(CONFIG_FW_LOADER) += firmware_class.o
+ obj-$(CONFIG_RWSEM_GENERIC_SPINLOCK) += rwsem-spinlock.o
+ obj-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o
+
++include $(TOPDIR)/drivers/bluetooth/Makefile.lib
++
+ ifneq ($(CONFIG_HAVE_DEC_LOCK),y)
+ obj-y += dec_and_lock.o
+ endif
+diff -urN linux-2.4.18/MAINTAINERS linux-2.4.18-mh15/MAINTAINERS
+--- linux-2.4.18/MAINTAINERS 2002-02-25 20:37:52.000000000 +0100
++++ linux-2.4.18-mh15/MAINTAINERS 2004-08-01 16:26:23.000000000 +0200
+@@ -252,10 +252,88 @@
+ L: linux-kernel@vger.kernel.org
+ S: Maintained
+
+-BLUETOOTH SUBSYSTEM (BlueZ)
++BLUETOOTH SUBSYSTEM
++P: Marcel Holtmann
++M: marcel@holtmann.org
+ P: Maxim Krasnyansky
+ M: maxk@qualcomm.com
++L: bluez-devel@lists.sf.net
+ W: http://bluez.sf.net
++W: http://www.bluez.org
++W: http://www.holtmann.org/linux/bluetooth/
++S: Maintained
++
++BLUETOOTH RFCOMM LAYER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
++S: Maintained
++
++BLUETOOTH BNEP LAYER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
++S: Maintained
++
++BLUETOOTH CMTP LAYER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HIDP LAYER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI UART DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
++S: Maintained
++
++BLUETOOTH HCI USB DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
++S: Maintained
++
++BLUETOOTH HCI BCM203X DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI BFUSB DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI DTL1 DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI BLUECARD DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI BT3C DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI BTUART DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++S: Maintained
++
++BLUETOOTH HCI VHCI DRIVER
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
+ S: Maintained
+
+ BTTV VIDEO4LINUX DRIVER
+diff -urN linux-2.4.18/net/bluetooth/af_bluetooth.c linux-2.4.18-mh15/net/bluetooth/af_bluetooth.c
+--- linux-2.4.18/net/bluetooth/af_bluetooth.c 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/net/bluetooth/af_bluetooth.c 2004-08-01 16:26:23.000000000 +0200
+@@ -25,14 +25,15 @@
+ /*
+ * BlueZ Bluetooth address family and sockets.
+ *
+- * $Id: af_bluetooth.c,v 1.4 2001/07/05 18:42:44 maxk Exp $
++ * $Id: af_bluetooth.c,v 1.8 2002/07/22 20:32:54 maxk Exp $
+ */
+-#define VERSION "1.1"
++#define VERSION "2.4"
+
+ #include <linux/config.h>
+ #include <linux/module.h>
+
+ #include <linux/types.h>
++#include <linux/list.h>
+ #include <linux/errno.h>
+ #include <linux/kernel.h>
+ #include <linux/major.h>
+@@ -40,6 +41,7 @@
+ #include <linux/slab.h>
+ #include <linux/skbuff.h>
+ #include <linux/init.h>
++#include <linux/poll.h>
+ #include <linux/proc_fs.h>
+ #include <net/sock.h>
+
+@@ -48,70 +50,79 @@
+ #endif
+
+ #include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
++
++#ifndef AF_BLUETOOTH_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
+
+ /* Bluetooth sockets */
+-static struct net_proto_family *bluez_sock[BLUEZ_MAX_PROTO];
++#define BLUEZ_MAX_PROTO 7
++static struct net_proto_family *bluez_proto[BLUEZ_MAX_PROTO];
+
+ int bluez_sock_register(int proto, struct net_proto_family *ops)
+ {
+- if (proto > BLUEZ_MAX_PROTO)
++ if (proto >= BLUEZ_MAX_PROTO)
+ return -EINVAL;
+
+- if (bluez_sock[proto])
++ if (bluez_proto[proto])
+ return -EEXIST;
+
+- bluez_sock[proto] = ops;
++ bluez_proto[proto] = ops;
+ return 0;
+ }
+
+ int bluez_sock_unregister(int proto)
+ {
+- if (proto > BLUEZ_MAX_PROTO)
++ if (proto >= BLUEZ_MAX_PROTO)
+ return -EINVAL;
+
+- if (!bluez_sock[proto])
++ if (!bluez_proto[proto])
+ return -ENOENT;
+
+- bluez_sock[proto] = NULL;
++ bluez_proto[proto] = NULL;
+ return 0;
+ }
+
+ static int bluez_sock_create(struct socket *sock, int proto)
+ {
+- if (proto > BLUEZ_MAX_PROTO)
++ if (proto >= BLUEZ_MAX_PROTO)
+ return -EINVAL;
+
+ #if defined(CONFIG_KMOD)
+- if (!bluez_sock[proto]) {
++ if (!bluez_proto[proto]) {
+ char module_name[30];
+ sprintf(module_name, "bt-proto-%d", proto);
+ request_module(module_name);
+ }
+ #endif
+
+- if (!bluez_sock[proto])
++ if (!bluez_proto[proto])
+ return -ENOENT;
+
+- return bluez_sock[proto]->create(sock, proto);
++ return bluez_proto[proto]->create(sock, proto);
++}
++
++void bluez_sock_init(struct socket *sock, struct sock *sk)
++{
++ sock_init_data(sock, sk);
++ INIT_LIST_HEAD(&bluez_pi(sk)->accept_q);
+ }
+
+ void bluez_sock_link(struct bluez_sock_list *l, struct sock *sk)
+ {
+- write_lock(&l->lock);
+-
++ write_lock_bh(&l->lock);
+ sk->next = l->head;
+ l->head = sk;
+ sock_hold(sk);
+-
+- write_unlock(&l->lock);
++ write_unlock_bh(&l->lock);
+ }
+
+ void bluez_sock_unlink(struct bluez_sock_list *l, struct sock *sk)
+ {
+ struct sock **skp;
+
+- write_lock(&l->lock);
++ write_lock_bh(&l->lock);
+ for (skp = &l->head; *skp; skp = &((*skp)->next)) {
+ if (*skp == sk) {
+ *skp = sk->next;
+@@ -119,7 +130,163 @@
+ break;
+ }
+ }
+- write_unlock(&l->lock);
++ write_unlock_bh(&l->lock);
++}
++
++void bluez_accept_enqueue(struct sock *parent, struct sock *sk)
++{
++ BT_DBG("parent %p, sk %p", parent, sk);
++
++ sock_hold(sk);
++ list_add_tail(&bluez_pi(sk)->accept_q, &bluez_pi(parent)->accept_q);
++ bluez_pi(sk)->parent = parent;
++ parent->ack_backlog++;
++}
++
++static void bluez_accept_unlink(struct sock *sk)
++{
++ BT_DBG("sk %p state %d", sk, sk->state);
++
++ list_del_init(&bluez_pi(sk)->accept_q);
++ bluez_pi(sk)->parent->ack_backlog--;
++ bluez_pi(sk)->parent = NULL;
++ sock_put(sk);
++}
++
++struct sock *bluez_accept_dequeue(struct sock *parent, struct socket *newsock)
++{
++ struct list_head *p, *n;
++ struct bluez_pinfo *pi;
++ struct sock *sk;
++
++ BT_DBG("parent %p", parent);
++
++ list_for_each_safe(p, n, &bluez_pi(parent)->accept_q) {
++ pi = list_entry(p, struct bluez_pinfo, accept_q);
++ sk = bluez_sk(pi);
++
++ lock_sock(sk);
++ if (sk->state == BT_CLOSED) {
++ release_sock(sk);
++ bluez_accept_unlink(sk);
++ continue;
++ }
++
++ if (sk->state == BT_CONNECTED || !newsock) {
++ bluez_accept_unlink(sk);
++ if (newsock)
++ sock_graft(sk, newsock);
++ release_sock(sk);
++ return sk;
++ }
++ release_sock(sk);
++ }
++ return NULL;
++}
++
++int bluez_sock_recvmsg(struct socket *sock, struct msghdr *msg, int len, int flags, struct scm_cookie *scm)
++{
++ int noblock = flags & MSG_DONTWAIT;
++ struct sock *sk = sock->sk;
++ struct sk_buff *skb;
++ int copied, err;
++
++ BT_DBG("sock %p sk %p len %d", sock, sk, len);
++
++ if (flags & (MSG_OOB))
++ return -EOPNOTSUPP;
++
++ if (!(skb = skb_recv_datagram(sk, flags, noblock, &err))) {
++ if (sk->shutdown & RCV_SHUTDOWN)
++ return 0;
++ return err;
++ }
++
++ msg->msg_namelen = 0;
++
++ copied = skb->len;
++ if (len < copied) {
++ msg->msg_flags |= MSG_TRUNC;
++ copied = len;
++ }
++
++ skb->h.raw = skb->data;
++ err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
++
++ skb_free_datagram(sk, skb);
++
++ return err ? : copied;
++}
++
++unsigned int bluez_sock_poll(struct file * file, struct socket *sock, poll_table *wait)
++{
++ struct sock *sk = sock->sk;
++ unsigned int mask = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ poll_wait(file, sk->sleep, wait);
++
++ if (sk->err || !skb_queue_empty(&sk->error_queue))
++ mask |= POLLERR;
++
++ if (sk->shutdown == SHUTDOWN_MASK)
++ mask |= POLLHUP;
++
++ if (!skb_queue_empty(&sk->receive_queue) ||
++ !list_empty(&bluez_pi(sk)->accept_q) ||
++ (sk->shutdown & RCV_SHUTDOWN))
++ mask |= POLLIN | POLLRDNORM;
++
++ if (sk->state == BT_CLOSED)
++ mask |= POLLHUP;
++
++ if (sk->state == BT_CONNECT ||
++ sk->state == BT_CONNECT2 ||
++ sk->state == BT_CONFIG)
++ return mask;
++
++ if (sock_writeable(sk))
++ mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
++ else
++ set_bit(SOCK_ASYNC_NOSPACE, &sk->socket->flags);
++
++ return mask;
++}
++
++int bluez_sock_wait_state(struct sock *sk, int state, unsigned long timeo)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ int err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ add_wait_queue(sk->sleep, &wait);
++ while (sk->state != state) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (!timeo) {
++ err = -EAGAIN;
++ break;
++ }
++
++ if (signal_pending(current)) {
++ err = sock_intr_errno(timeo);
++ break;
++ }
++
++ release_sock(sk);
++ timeo = schedule_timeout(timeo);
++ lock_sock(sk);
++
++ if (sk->err) {
++ err = sock_error(sk);
++ break;
++ }
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++ return err;
+ }
+
+ struct net_proto_family bluez_sock_family_ops =
+@@ -129,9 +296,9 @@
+
+ int bluez_init(void)
+ {
+- INF("BlueZ HCI Core ver %s Copyright (C) 2000,2001 Qualcomm Inc",
++ BT_INFO("BlueZ Core ver %s Copyright (C) 2000,2001 Qualcomm Inc",
+ VERSION);
+- INF("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
++ BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
+
+ proc_mkdir("bluetooth", NULL);
+
+@@ -164,5 +331,6 @@
+ module_exit(bluez_cleanup);
+
+ MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
+-MODULE_DESCRIPTION("BlueZ HCI Core ver " VERSION);
++MODULE_DESCRIPTION("BlueZ Core ver " VERSION);
++MODULE_LICENSE("GPL");
+ #endif
+diff -urN linux-2.4.18/net/bluetooth/bnep/bnep.h linux-2.4.18-mh15/net/bluetooth/bnep/bnep.h
+--- linux-2.4.18/net/bluetooth/bnep/bnep.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/bnep/bnep.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,185 @@
++/*
++ BNEP protocol definition for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++*/
++
++/*
++ * $Id: bnep2.h,v 1.9 2002/07/14 07:09:19 maxk Exp $
++ */
++
++#ifndef _BNEP_H
++#define _BNEP_H
++
++#include <linux/types.h>
++#include <net/bluetooth/bluetooth.h>
++
++#include "crc32.h"
++
++// Limits
++#define BNEP_MAX_PROTO_FILTERS 5
++#define BNEP_MAX_MULTICAST_FILTERS 20
++
++// UUIDs
++#define BNEP_BASE_UUID 0x0000000000001000800000805F9B34FB
++#define BNEP_UUID16 0x02
++#define BNEP_UUID32 0x04
++#define BNEP_UUID128 0x16
++
++#define BNEP_SVC_PANU 0x1115
++#define BNEP_SVC_NAP 0x1116
++#define BNEP_SVC_GN 0x1117
++
++// Packet types
++#define BNEP_GENERAL 0x00
++#define BNEP_CONTROL 0x01
++#define BNEP_COMPRESSED 0x02
++#define BNEP_COMPRESSED_SRC_ONLY 0x03
++#define BNEP_COMPRESSED_DST_ONLY 0x04
++
++// Control types
++#define BNEP_CMD_NOT_UNDERSTOOD 0x00
++#define BNEP_SETUP_CONN_REQ 0x01
++#define BNEP_SETUP_CONN_RSP 0x02
++#define BNEP_FILTER_NET_TYPE_SET 0x03
++#define BNEP_FILTER_NET_TYPE_RSP 0x04
++#define BNEP_FILTER_MULTI_ADDR_SET 0x05
++#define BNEP_FILTER_MULTI_ADDR_RSP 0x06
++
++// Extension types
++#define BNEP_EXT_CONTROL 0x00
++
++// Response messages
++#define BNEP_SUCCESS 0x00
++
++#define BNEP_CONN_INVALID_DST 0x01
++#define BNEP_CONN_INVALID_SRC 0x02
++#define BNEP_CONN_INVALID_SVC 0x03
++#define BNEP_CONN_NOT_ALLOWED 0x04
++
++#define BNEP_FILTER_UNSUPPORTED_REQ 0x01
++#define BNEP_FILTER_INVALID_RANGE 0x02
++#define BNEP_FILTER_INVALID_MCADDR 0x02
++#define BNEP_FILTER_LIMIT_REACHED 0x03
++#define BNEP_FILTER_DENIED_SECURITY 0x04
++
++// L2CAP settings
++#define BNEP_MTU 1691
++#define BNEP_PSM 0x0f
++#define BNEP_FLUSH_TO 0xffff
++#define BNEP_CONNECT_TO 15
++#define BNEP_FILTER_TO 15
++
++// Headers
++#define BNEP_TYPE_MASK 0x7f
++#define BNEP_EXT_HEADER 0x80
++
++struct bnep_setup_conn_req {
++ __u8 type;
++ __u8 ctrl;
++ __u8 uuid_size;
++ __u8 service[0];
++} __attribute__((packed));
++
++struct bnep_set_filter_req {
++ __u8 type;
++ __u8 ctrl;
++ __u16 len;
++ __u8 list[0];
++} __attribute__((packed));
++
++struct bnep_control_rsp {
++ __u8 type;
++ __u8 ctrl;
++ __u16 resp;
++} __attribute__((packed));
++
++struct bnep_ext_hdr {
++ __u8 type;
++ __u8 len;
++ __u8 data[0];
++} __attribute__((packed));
++
++/* BNEP ioctl defines */
++#define BNEPCONNADD _IOW('B', 200, int)
++#define BNEPCONNDEL _IOW('B', 201, int)
++#define BNEPGETCONNLIST _IOR('B', 210, int)
++#define BNEPGETCONNINFO _IOR('B', 211, int)
++
++struct bnep_connadd_req {
++ int sock; // Connected socket
++ __u32 flags;
++ __u16 role;
++ char device[16]; // Name of the Ethernet device
++};
++
++struct bnep_conndel_req {
++ __u32 flags;
++ __u8 dst[ETH_ALEN];
++};
++
++struct bnep_conninfo {
++ __u32 flags;
++ __u16 role;
++ __u16 state;
++ __u8 dst[ETH_ALEN];
++ char device[16];
++};
++
++struct bnep_connlist_req {
++ __u32 cnum;
++ struct bnep_conninfo *ci;
++};
++
++struct bnep_proto_filter {
++ __u16 start;
++ __u16 end;
++};
++
++int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock);
++int bnep_del_connection(struct bnep_conndel_req *req);
++int bnep_get_connlist(struct bnep_connlist_req *req);
++int bnep_get_conninfo(struct bnep_conninfo *ci);
++
++// BNEP sessions
++struct bnep_session {
++ struct list_head list;
++
++ unsigned int role;
++ unsigned long state;
++ unsigned long flags;
++ atomic_t killed;
++
++ struct ethhdr eh;
++ struct msghdr msg;
++
++ struct bnep_proto_filter proto_filter[BNEP_MAX_PROTO_FILTERS];
++ u64 mc_filter;
++
++ struct socket *sock;
++ struct net_device dev;
++ struct net_device_stats stats;
++};
++
++int bnep_net_init(struct net_device *dev);
++int bnep_sock_init(void);
++int bnep_sock_cleanup(void);
++
++static inline int bnep_mc_hash(__u8 *addr)
++{
++ return (bnep_crc32(~0, addr, ETH_ALEN) >> 26);
++}
++
++#endif
+diff -urN linux-2.4.18/net/bluetooth/bnep/Config.in linux-2.4.18-mh15/net/bluetooth/bnep/Config.in
+--- linux-2.4.18/net/bluetooth/bnep/Config.in 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/bnep/Config.in 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,11 @@
++#
++# Bluetooth BNEP layer configuration
++#
++
++dep_tristate 'BNEP protocol support' CONFIG_BLUEZ_BNEP $CONFIG_BLUEZ_L2CAP
++
++if [ "$CONFIG_BLUEZ_BNEP" != "n" ]; then
++ bool ' Multicast filter support' CONFIG_BLUEZ_BNEP_MC_FILTER
++ bool ' Protocol filter support' CONFIG_BLUEZ_BNEP_PROTO_FILTER
++fi
++
+diff -urN linux-2.4.18/net/bluetooth/bnep/core.c linux-2.4.18-mh15/net/bluetooth/bnep/core.c
+--- linux-2.4.18/net/bluetooth/bnep/core.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/bnep/core.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,718 @@
++/*
++ BNEP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2001-2002 Inventel Systemes
++ Written 2001-2002 by
++ Clément Moreau <clement.moreau@inventel.fr>
++ David Libault <david.libault@inventel.fr>
++
++ Copyright (C) 2002 Maxim Krasnyanskiy <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: core.c,v 1.18 2002/07/14 07:09:19 maxk Exp $
++ */
++
++#define __KERNEL_SYSCALLS__
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/signal.h>
++#include <linux/init.h>
++#include <linux/wait.h>
++#include <linux/errno.h>
++#include <linux/smp_lock.h>
++#include <linux/net.h>
++#include <net/sock.h>
++
++#include <linux/socket.h>
++#include <linux/file.h>
++
++#include <linux/netdevice.h>
++#include <linux/etherdevice.h>
++#include <linux/skbuff.h>
++
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/l2cap.h>
++
++#include "bnep.h"
++
++#ifndef CONFIG_BLUEZ_BNEP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define VERSION "1.2"
++
++static LIST_HEAD(bnep_session_list);
++static DECLARE_RWSEM(bnep_session_sem);
++
++static struct bnep_session *__bnep_get_session(u8 *dst)
++{
++ struct bnep_session *s;
++ struct list_head *p;
++
++ BT_DBG("");
++
++ list_for_each(p, &bnep_session_list) {
++ s = list_entry(p, struct bnep_session, list);
++ if (!memcmp(dst, s->eh.h_source, ETH_ALEN))
++ return s;
++ }
++ return NULL;
++}
++
++static void __bnep_link_session(struct bnep_session *s)
++{
++ MOD_INC_USE_COUNT;
++ list_add(&s->list, &bnep_session_list);
++}
++
++static void __bnep_unlink_session(struct bnep_session *s)
++{
++ list_del(&s->list);
++ MOD_DEC_USE_COUNT;
++}
++
++static int bnep_send(struct bnep_session *s, void *data, size_t len)
++{
++ struct socket *sock = s->sock;
++ struct iovec iv = { data, len };
++ s->msg.msg_iov = &iv;
++ s->msg.msg_iovlen = 1;
++ return sock->ops->sendmsg(sock, &s->msg, len, NULL);
++}
++
++static int bnep_send_rsp(struct bnep_session *s, u8 ctrl, u16 resp)
++{
++ struct bnep_control_rsp rsp;
++ rsp.type = BNEP_CONTROL;
++ rsp.ctrl = ctrl;
++ rsp.resp = htons(resp);
++ return bnep_send(s, &rsp, sizeof(rsp));
++}
++
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
++static inline void bnep_set_default_proto_filter(struct bnep_session *s)
++{
++ /* (IPv4, ARP) */
++ s->proto_filter[0].start = htons(0x0800);
++ s->proto_filter[0].end = htons(0x0806);
++ /* (RARP, AppleTalk) */
++ s->proto_filter[1].start = htons(0x8035);
++ s->proto_filter[1].end = htons(0x80F3);
++ /* (IPX, IPv6) */
++ s->proto_filter[2].start = htons(0x8137);
++ s->proto_filter[2].end = htons(0x86DD);
++}
++#endif
++
++static int bnep_ctrl_set_netfilter(struct bnep_session *s, u16 *data, int len)
++{
++ int n;
++
++ if (len < 2)
++ return -EILSEQ;
++
++ n = ntohs(get_unaligned(data));
++ data++; len -= 2;
++
++ if (len < n)
++ return -EILSEQ;
++
++ BT_DBG("filter len %d", n);
++
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
++ n /= 4;
++ if (n <= BNEP_MAX_PROTO_FILTERS) {
++ struct bnep_proto_filter *f = s->proto_filter;
++ int i;
++
++ for (i = 0; i < n; i++) {
++ f[i].start = get_unaligned(data++);
++ f[i].end = get_unaligned(data++);
++
++ BT_DBG("proto filter start %d end %d",
++ f[i].start, f[i].end);
++ }
++
++ if (i < BNEP_MAX_PROTO_FILTERS)
++ memset(f + i, 0, sizeof(*f));
++
++ if (n == 0)
++ bnep_set_default_proto_filter(s);
++
++ bnep_send_rsp(s, BNEP_FILTER_NET_TYPE_RSP, BNEP_SUCCESS);
++ } else {
++ bnep_send_rsp(s, BNEP_FILTER_NET_TYPE_RSP, BNEP_FILTER_LIMIT_REACHED);
++ }
++#else
++ bnep_send_rsp(s, BNEP_FILTER_NET_TYPE_RSP, BNEP_FILTER_UNSUPPORTED_REQ);
++#endif
++ return 0;
++}
++
++static int bnep_ctrl_set_mcfilter(struct bnep_session *s, u8 *data, int len)
++{
++ int n;
++
++ if (len < 2)
++ return -EILSEQ;
++
++ n = ntohs(get_unaligned((u16 *) data));
++ data += 2; len -= 2;
++
++ if (len < n)
++ return -EILSEQ;
++
++ BT_DBG("filter len %d", n);
++
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
++ n /= (ETH_ALEN * 2);
++
++ if (n > 0) {
++ s->mc_filter = 0;
++
++ /* Always send broadcast */
++ set_bit(bnep_mc_hash(s->dev.broadcast), &s->mc_filter);
++
++ /* Add address ranges to the multicast hash */
++ for (; n > 0; n--) {
++ u8 a1[6], *a2;
++
++ memcpy(a1, data, ETH_ALEN); data += ETH_ALEN;
++ a2 = data; data += ETH_ALEN;
++
++ BT_DBG("mc filter %s -> %s",
++ batostr((void *) a1), batostr((void *) a2));
++
++ #define INCA(a) { int i = 5; while (i >=0 && ++a[i--] == 0); }
++
++ /* Iterate from a1 to a2 */
++ set_bit(bnep_mc_hash(a1), &s->mc_filter);
++ while (memcmp(a1, a2, 6) < 0 && s->mc_filter != ~0LL) {
++ INCA(a1);
++ set_bit(bnep_mc_hash(a1), &s->mc_filter);
++ }
++ }
++ }
++
++ BT_DBG("mc filter hash 0x%llx", s->mc_filter);
++
++ bnep_send_rsp(s, BNEP_FILTER_MULTI_ADDR_RSP, BNEP_SUCCESS);
++#else
++ bnep_send_rsp(s, BNEP_FILTER_MULTI_ADDR_RSP, BNEP_FILTER_UNSUPPORTED_REQ);
++#endif
++ return 0;
++}
++
++static int bnep_rx_control(struct bnep_session *s, void *data, int len)
++{
++ u8 cmd = *(u8 *)data;
++ int err = 0;
++
++ data++; len--;
++
++ switch (cmd) {
++ case BNEP_CMD_NOT_UNDERSTOOD:
++ case BNEP_SETUP_CONN_REQ:
++ case BNEP_SETUP_CONN_RSP:
++ case BNEP_FILTER_NET_TYPE_RSP:
++ case BNEP_FILTER_MULTI_ADDR_RSP:
++ /* Ignore these for now */
++ break;
++
++ case BNEP_FILTER_NET_TYPE_SET:
++ err = bnep_ctrl_set_netfilter(s, data, len);
++ break;
++
++ case BNEP_FILTER_MULTI_ADDR_SET:
++ err = bnep_ctrl_set_mcfilter(s, data, len);
++ break;
++
++ default: {
++ u8 pkt[3];
++ pkt[0] = BNEP_CONTROL;
++ pkt[1] = BNEP_CMD_NOT_UNDERSTOOD;
++ pkt[2] = cmd;
++ bnep_send(s, pkt, sizeof(pkt));
++ }
++ break;
++ }
++
++ return err;
++}
++
++static int bnep_rx_extension(struct bnep_session *s, struct sk_buff *skb)
++{
++ struct bnep_ext_hdr *h;
++ int err = 0;
++
++ do {
++ h = (void *) skb->data;
++ if (!skb_pull(skb, sizeof(*h))) {
++ err = -EILSEQ;
++ break;
++ }
++
++ BT_DBG("type 0x%x len %d", h->type, h->len);
++
++ switch (h->type & BNEP_TYPE_MASK) {
++ case BNEP_EXT_CONTROL:
++ bnep_rx_control(s, skb->data, skb->len);
++ break;
++
++ default:
++ /* Unknown extension, skip it. */
++ break;
++ }
++
++ if (!skb_pull(skb, h->len)) {
++ err = -EILSEQ;
++ break;
++ }
++ } while (!err && (h->type & BNEP_EXT_HEADER));
++
++ return err;
++}
++
++static u8 __bnep_rx_hlen[] = {
++ ETH_HLEN, /* BNEP_GENERAL */
++ 0, /* BNEP_CONTROL */
++ 2, /* BNEP_COMPRESSED */
++ ETH_ALEN + 2, /* BNEP_COMPRESSED_SRC_ONLY */
++ ETH_ALEN + 2 /* BNEP_COMPRESSED_DST_ONLY */
++};
++#define BNEP_RX_TYPES (sizeof(__bnep_rx_hlen) - 1)
++
++static inline int bnep_rx_frame(struct bnep_session *s, struct sk_buff *skb)
++{
++ struct net_device *dev = &s->dev;
++ struct sk_buff *nskb;
++ u8 type;
++
++ dev->last_rx = jiffies;
++ s->stats.rx_bytes += skb->len;
++
++ type = *(u8 *) skb->data; skb_pull(skb, 1);
++
++ if ((type & BNEP_TYPE_MASK) > BNEP_RX_TYPES)
++ goto badframe;
++
++ if ((type & BNEP_TYPE_MASK) == BNEP_CONTROL) {
++ bnep_rx_control(s, skb->data, skb->len);
++ kfree_skb(skb);
++ return 0;
++ }
++
++ skb->mac.raw = skb->data;
++
++ /* Verify and pull out header */
++ if (!skb_pull(skb, __bnep_rx_hlen[type & BNEP_TYPE_MASK]))
++ goto badframe;
++
++ s->eh.h_proto = get_unaligned((u16 *) (skb->data - 2));
++
++ if (type & BNEP_EXT_HEADER) {
++ if (bnep_rx_extension(s, skb) < 0)
++ goto badframe;
++ }
++
++ /* Strip 802.1p header */
++ if (ntohs(s->eh.h_proto) == 0x8100) {
++ if (!skb_pull(skb, 4))
++ goto badframe;
++ s->eh.h_proto = get_unaligned((u16 *) (skb->data - 2));
++ }
++
++ /* We have to alloc new skb and copy data here :(. Because original skb
++ * may not be modified and because of the alignment requirements. */
++ nskb = alloc_skb(2 + ETH_HLEN + skb->len, GFP_KERNEL);
++ if (!nskb) {
++ s->stats.rx_dropped++;
++ kfree_skb(skb);
++ return -ENOMEM;
++ }
++ skb_reserve(nskb, 2);
++
++ /* Decompress header and construct ether frame */
++ switch (type & BNEP_TYPE_MASK) {
++ case BNEP_COMPRESSED:
++ memcpy(__skb_put(nskb, ETH_HLEN), &s->eh, ETH_HLEN);
++ break;
++
++ case BNEP_COMPRESSED_SRC_ONLY:
++ memcpy(__skb_put(nskb, ETH_ALEN), s->eh.h_dest, ETH_ALEN);
++ memcpy(__skb_put(nskb, ETH_ALEN), skb->mac.raw, ETH_ALEN);
++ put_unaligned(s->eh.h_proto, (u16 *) __skb_put(nskb, 2));
++ break;
++
++ case BNEP_COMPRESSED_DST_ONLY:
++ memcpy(__skb_put(nskb, ETH_ALEN), skb->mac.raw, ETH_ALEN);
++ memcpy(__skb_put(nskb, ETH_ALEN + 2), s->eh.h_source, ETH_ALEN + 2);
++ break;
++
++ case BNEP_GENERAL:
++ memcpy(__skb_put(nskb, ETH_ALEN * 2), skb->mac.raw, ETH_ALEN * 2);
++ put_unaligned(s->eh.h_proto, (u16 *) __skb_put(nskb, 2));
++ break;
++ }
++
++ memcpy(__skb_put(nskb, skb->len), skb->data, skb->len);
++ kfree_skb(skb);
++
++ s->stats.rx_packets++;
++ nskb->dev = dev;
++ nskb->ip_summed = CHECKSUM_UNNECESSARY;
++ nskb->protocol = eth_type_trans(nskb, dev);
++ netif_rx_ni(nskb);
++ return 0;
++
++badframe:
++ s->stats.rx_errors++;
++ kfree_skb(skb);
++ return 0;
++}
++
++static u8 __bnep_tx_types[] = {
++ BNEP_GENERAL,
++ BNEP_COMPRESSED_SRC_ONLY,
++ BNEP_COMPRESSED_DST_ONLY,
++ BNEP_COMPRESSED
++};
++
++static inline int bnep_tx_frame(struct bnep_session *s, struct sk_buff *skb)
++{
++ struct ethhdr *eh = (void *) skb->data;
++ struct socket *sock = s->sock;
++ struct iovec iv[3];
++ int len = 0, il = 0;
++ u8 type = 0;
++
++ BT_DBG("skb %p dev %p type %d", skb, skb->dev, skb->pkt_type);
++
++ if (!skb->dev) {
++ /* Control frame sent by us */
++ goto send;
++ }
++
++ iv[il++] = (struct iovec) { &type, 1 };
++ len++;
++
++ if (!memcmp(eh->h_dest, s->eh.h_source, ETH_ALEN))
++ type |= 0x01;
++
++ if (!memcmp(eh->h_source, s->eh.h_dest, ETH_ALEN))
++ type |= 0x02;
++
++ if (type)
++ skb_pull(skb, ETH_ALEN * 2);
++
++ type = __bnep_tx_types[type];
++ switch (type) {
++ case BNEP_COMPRESSED_SRC_ONLY:
++ iv[il++] = (struct iovec) { eh->h_source, ETH_ALEN };
++ len += ETH_ALEN;
++ break;
++
++ case BNEP_COMPRESSED_DST_ONLY:
++ iv[il++] = (struct iovec) { eh->h_dest, ETH_ALEN };
++ len += ETH_ALEN;
++ break;
++ }
++
++send:
++ iv[il++] = (struct iovec) { skb->data, skb->len };
++ len += skb->len;
++
++ /* FIXME: linearize skb */
++
++ s->msg.msg_iov = iv;
++ s->msg.msg_iovlen = il;
++ len = sock->ops->sendmsg(sock, &s->msg, len, NULL);
++ kfree_skb(skb);
++
++ if (len > 0) {
++ s->stats.tx_bytes += len;
++ s->stats.tx_packets++;
++ return 0;
++ }
++
++ return len;
++}
++
++static int bnep_session(void *arg)
++{
++ struct bnep_session *s = arg;
++ struct net_device *dev = &s->dev;
++ struct sock *sk = s->sock->sk;
++ struct sk_buff *skb;
++ wait_queue_t wait;
++
++ BT_DBG("");
++
++ daemonize(); reparent_to_init();
++
++ sprintf(current->comm, "kbnepd %s", dev->name);
++
++ sigfillset(&current->blocked);
++ flush_signals(current);
++
++ current->nice = -15;
++
++ set_fs(KERNEL_DS);
++
++ init_waitqueue_entry(&wait, current);
++ add_wait_queue(sk->sleep, &wait);
++ while (!atomic_read(&s->killed)) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ // RX
++ while ((skb = skb_dequeue(&sk->receive_queue))) {
++ skb_orphan(skb);
++ bnep_rx_frame(s, skb);
++ }
++
++ if (sk->state != BT_CONNECTED)
++ break;
++
++ // TX
++ while ((skb = skb_dequeue(&sk->write_queue)))
++ if (bnep_tx_frame(s, skb))
++ break;
++ netif_wake_queue(dev);
++
++ schedule();
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++
++ /* Cleanup session */
++ down_write(&bnep_session_sem);
++
++ /* Delete network device */
++ unregister_netdev(dev);
++
++ /* Release the socket */
++ fput(s->sock->file);
++
++ __bnep_unlink_session(s);
++
++ up_write(&bnep_session_sem);
++ kfree(s);
++ return 0;
++}
++
++int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock)
++{
++ struct net_device *dev;
++ struct bnep_session *s, *ss;
++ u8 dst[ETH_ALEN], src[ETH_ALEN];
++ int err;
++
++ BT_DBG("");
++
++ baswap((void *) dst, &bluez_pi(sock->sk)->dst);
++ baswap((void *) src, &bluez_pi(sock->sk)->src);
++
++ s = kmalloc(sizeof(struct bnep_session), GFP_KERNEL);
++ if (!s)
++ return -ENOMEM;
++ memset(s, 0, sizeof(struct bnep_session));
++
++ down_write(&bnep_session_sem);
++
++ ss = __bnep_get_session(dst);
++ if (ss && ss->state == BT_CONNECTED) {
++ err = -EEXIST;
++ goto failed;
++ }
++
++ dev = &s->dev;
++
++ if (*req->device)
++ strcpy(dev->name, req->device);
++ else
++ strcpy(dev->name, "bnep%d");
++
++ memset(dev->broadcast, 0xff, ETH_ALEN);
++
++ /* This is rx header therefor addresses are swaped.
++ * ie eh.h_dest is our local address. */
++ memcpy(s->eh.h_dest, &src, ETH_ALEN);
++ memcpy(s->eh.h_source, &dst, ETH_ALEN);
++
++ s->sock = sock;
++ s->role = req->role;
++ s->state = BT_CONNECTED;
++
++ s->msg.msg_flags = MSG_NOSIGNAL;
++
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
++ /* Set default mc filter */
++ set_bit(bnep_mc_hash(dev->broadcast), &s->mc_filter);
++#endif
++
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
++ /* Set default protocol filter */
++ bnep_set_default_proto_filter(s);
++#endif
++
++ dev->init = bnep_net_init;
++ dev->priv = s;
++ err = register_netdev(dev);
++ if (err) {
++ goto failed;
++ }
++
++ __bnep_link_session(s);
++
++ err = kernel_thread(bnep_session, s, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
++ if (err < 0) {
++ /* Session thread start failed, gotta cleanup. */
++ unregister_netdev(dev);
++ __bnep_unlink_session(s);
++ goto failed;
++ }
++
++ up_write(&bnep_session_sem);
++ strcpy(req->device, dev->name);
++ return 0;
++
++failed:
++ up_write(&bnep_session_sem);
++ kfree(s);
++ return err;
++}
++
++int bnep_del_connection(struct bnep_conndel_req *req)
++{
++ struct bnep_session *s;
++ int err = 0;
++
++ BT_DBG("");
++
++ down_read(&bnep_session_sem);
++
++ s = __bnep_get_session(req->dst);
++ if (s) {
++ /* Wakeup user-space which is polling for socket errors.
++ * This is temporary hack untill we have shutdown in L2CAP */
++ s->sock->sk->err = EUNATCH;
++
++ /* Kill session thread */
++ atomic_inc(&s->killed);
++ wake_up_interruptible(s->sock->sk->sleep);
++ } else
++ err = -ENOENT;
++
++ up_read(&bnep_session_sem);
++ return err;
++}
++
++static void __bnep_copy_ci(struct bnep_conninfo *ci, struct bnep_session *s)
++{
++ memcpy(ci->dst, s->eh.h_source, ETH_ALEN);
++ strcpy(ci->device, s->dev.name);
++ ci->flags = s->flags;
++ ci->state = s->state;
++ ci->role = s->role;
++}
++
++int bnep_get_connlist(struct bnep_connlist_req *req)
++{
++ struct list_head *p;
++ int err = 0, n = 0;
++
++ down_read(&bnep_session_sem);
++
++ list_for_each(p, &bnep_session_list) {
++ struct bnep_session *s;
++ struct bnep_conninfo ci;
++
++ s = list_entry(p, struct bnep_session, list);
++
++ __bnep_copy_ci(&ci, s);
++
++ if (copy_to_user(req->ci, &ci, sizeof(ci))) {
++ err = -EFAULT;
++ break;
++ }
++
++ if (++n >= req->cnum)
++ break;
++
++ req->ci++;
++ }
++ req->cnum = n;
++
++ up_read(&bnep_session_sem);
++ return err;
++}
++
++int bnep_get_conninfo(struct bnep_conninfo *ci)
++{
++ struct bnep_session *s;
++ int err = 0;
++
++ down_read(&bnep_session_sem);
++
++ s = __bnep_get_session(ci->dst);
++ if (s)
++ __bnep_copy_ci(ci, s);
++ else
++ err = -ENOENT;
++
++ up_read(&bnep_session_sem);
++ return err;
++}
++
++static int __init bnep_init_module(void)
++{
++ l2cap_load();
++
++ bnep_crc32_init();
++ bnep_sock_init();
++
++ BT_INFO("BlueZ BNEP ver %s", VERSION);
++ BT_INFO("Copyright (C) 2001,2002 Inventel Systemes");
++ BT_INFO("Written 2001,2002 by Clement Moreau <clement.moreau@inventel.fr>");
++ BT_INFO("Written 2001,2002 by David Libault <david.libault@inventel.fr>");
++ BT_INFO("Copyright (C) 2002 Maxim Krasnyanskiy <maxk@qualcomm.com>");
++
++ return 0;
++}
++
++static void __exit bnep_cleanup_module(void)
++{
++ bnep_sock_cleanup();
++ bnep_crc32_cleanup();
++}
++
++module_init(bnep_init_module);
++module_exit(bnep_cleanup_module);
++
++MODULE_DESCRIPTION("BlueZ BNEP ver " VERSION);
++MODULE_AUTHOR("David Libault <david.libault@inventel.fr>, Maxim Krasnyanskiy <maxk@qualcomm.com>");
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/bnep/crc32.c linux-2.4.18-mh15/net/bluetooth/bnep/crc32.c
+--- linux-2.4.18/net/bluetooth/bnep/crc32.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/bnep/crc32.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,59 @@
++/*
++ * Based on linux-2.5/lib/crc32 by Matt Domsch <Matt_Domsch@dell.com>
++ *
++ * FIXME: Remove in 2.5
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/slab.h>
++#include <linux/init.h>
++#include <asm/atomic.h>
++
++#include "crc32.h"
++
++#define CRCPOLY_BE 0x04c11db7
++#define CRC_BE_BITS 8
++
++static u32 *bnep_crc32_table;
++
++/*
++ * This code is in the public domain; copyright abandoned.
++ * Liability for non-performance of this code is limited to the amount
++ * you paid for it. Since it is distributed for free, your refund will
++ * be very very small. If it breaks, you get to keep both pieces.
++ */
++u32 bnep_crc32(u32 crc, unsigned char const *p, size_t len)
++{
++ while (len--)
++ crc = (crc << 8) ^ bnep_crc32_table[(crc >> 24) ^ *p++];
++
++ return crc;
++}
++
++int __init bnep_crc32_init(void)
++{
++ unsigned i, j;
++ u32 crc = 0x80000000;
++
++ bnep_crc32_table = kmalloc((1 << CRC_BE_BITS) * sizeof(u32), GFP_KERNEL);
++ if (!bnep_crc32_table)
++ return -ENOMEM;
++
++ bnep_crc32_table[0] = 0;
++
++ for (i = 1; i < 1 << CRC_BE_BITS; i <<= 1) {
++ crc = (crc << 1) ^ ((crc & 0x80000000) ? CRCPOLY_BE : 0);
++ for (j = 0; j < i; j++)
++ bnep_crc32_table[i + j] = crc ^ bnep_crc32_table[j];
++ }
++ return 0;
++}
++
++void __exit bnep_crc32_cleanup(void)
++{
++ if (bnep_crc32_table)
++ kfree(bnep_crc32_table);
++ bnep_crc32_table = NULL;
++}
+diff -urN linux-2.4.18/net/bluetooth/bnep/crc32.h linux-2.4.18-mh15/net/bluetooth/bnep/crc32.h
+--- linux-2.4.18/net/bluetooth/bnep/crc32.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/bnep/crc32.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,10 @@
++/*
++ * crc32.h
++ * See crc32.c for license and changes
++ *
++ * FIXME: Remove in 2.5
++ */
++
++int bnep_crc32_init(void);
++void bnep_crc32_cleanup(void);
++u32 bnep_crc32(u32 crc, unsigned char const *p, size_t len);
+diff -urN linux-2.4.18/net/bluetooth/bnep/Makefile linux-2.4.18-mh15/net/bluetooth/bnep/Makefile
+--- linux-2.4.18/net/bluetooth/bnep/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/bnep/Makefile 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,10 @@
++#
++# Makefile for the Linux Bluetooth BNEP layer
++#
++
++O_TARGET := bnep.o
++
++obj-y := core.o sock.o netdev.o crc32.o
++obj-m += $(O_TARGET)
++
++include $(TOPDIR)/Rules.make
+diff -urN linux-2.4.18/net/bluetooth/bnep/netdev.c linux-2.4.18-mh15/net/bluetooth/bnep/netdev.c
+--- linux-2.4.18/net/bluetooth/bnep/netdev.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/bnep/netdev.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,254 @@
++/*
++ BNEP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2001-2002 Inventel Systemes
++ Written 2001-2002 by
++ Clément Moreau <clement.moreau@inventel.fr>
++ David Libault <david.libault@inventel.fr>
++
++ Copyright (C) 2002 Maxim Krasnyanskiy <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: netdev.c,v 1.7 2002/07/14 05:39:26 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/socket.h>
++#include <linux/netdevice.h>
++#include <linux/etherdevice.h>
++#include <linux/skbuff.h>
++#include <linux/wait.h>
++
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include <net/bluetooth/l2cap.h>
++
++#include "bnep.h"
++
++#ifndef CONFIG_BLUEZ_BNEP_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
++
++#define BNEP_TX_QUEUE_LEN 20
++
++static int bnep_net_open(struct net_device *dev)
++{
++ netif_start_queue(dev);
++ return 0;
++}
++
++static int bnep_net_close(struct net_device *dev)
++{
++ netif_stop_queue(dev);
++ return 0;
++}
++
++static struct net_device_stats *bnep_net_get_stats(struct net_device *dev)
++{
++ struct bnep_session *s = dev->priv;
++ return &s->stats;
++}
++
++static void bnep_net_set_mc_list(struct net_device *dev)
++{
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
++ struct bnep_session *s = dev->priv;
++ struct sock *sk = s->sock->sk;
++ struct bnep_set_filter_req *r;
++ struct sk_buff *skb;
++ int size;
++
++ BT_DBG("%s mc_count %d", dev->name, dev->mc_count);
++
++ size = sizeof(*r) + (BNEP_MAX_MULTICAST_FILTERS + 1) * ETH_ALEN * 2;
++ skb = alloc_skb(size, GFP_ATOMIC);
++ if (!skb) {
++ BT_ERR("%s Multicast list allocation failed", dev->name);
++ return;
++ }
++
++ r = (void *) skb->data;
++ __skb_put(skb, sizeof(*r));
++
++ r->type = BNEP_CONTROL;
++ r->ctrl = BNEP_FILTER_MULTI_ADDR_SET;
++
++ if (dev->flags & (IFF_PROMISC | IFF_ALLMULTI)) {
++ u8 start[ETH_ALEN] = { 0x01 };
++
++ /* Request all addresses */
++ memcpy(__skb_put(skb, ETH_ALEN), start, ETH_ALEN);
++ memcpy(__skb_put(skb, ETH_ALEN), dev->broadcast, ETH_ALEN);
++ r->len = htons(ETH_ALEN * 2);
++ } else {
++ struct dev_mc_list *dmi = dev->mc_list;
++ int i, len = skb->len;
++
++ if (dev->flags & IFF_BROADCAST) {
++ memcpy(__skb_put(skb, ETH_ALEN), dev->broadcast, ETH_ALEN);
++ memcpy(__skb_put(skb, ETH_ALEN), dev->broadcast, ETH_ALEN);
++ }
++
++ /* FIXME: We should group addresses here. */
++
++ for (i = 0; i < dev->mc_count && i < BNEP_MAX_MULTICAST_FILTERS; i++) {
++ memcpy(__skb_put(skb, ETH_ALEN), dmi->dmi_addr, ETH_ALEN);
++ memcpy(__skb_put(skb, ETH_ALEN), dmi->dmi_addr, ETH_ALEN);
++ dmi = dmi->next;
++ }
++ r->len = htons(skb->len - len);
++ }
++
++ skb_queue_tail(&sk->write_queue, skb);
++ wake_up_interruptible(sk->sleep);
++#endif
++}
++
++static int bnep_net_set_mac_addr(struct net_device *dev, void *arg)
++{
++ BT_DBG("%s", dev->name);
++ return 0;
++}
++
++static void bnep_net_timeout(struct net_device *dev)
++{
++ BT_DBG("net_timeout");
++ netif_wake_queue(dev);
++}
++
++static int bnep_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
++{
++ return -EINVAL;
++}
++
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
++static inline int bnep_net_mc_filter(struct sk_buff *skb, struct bnep_session *s)
++{
++ struct ethhdr *eh = (void *) skb->data;
++
++ if ((eh->h_dest[0] & 1) && !test_bit(bnep_mc_hash(eh->h_dest), &s->mc_filter)) {
++ BT_DBG("BNEP: filtered skb %p, dst %.2x:%.2x:%.2x:%.2x:%.2x:%.2x", skb,
++ eh->h_dest[0], eh->h_dest[1], eh->h_dest[2],
++ eh->h_dest[3], eh->h_dest[4], eh->h_dest[5]);
++ return 1;
++ }
++ return 0;
++}
++#endif
++
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
++/* Determine ether protocol. Based on eth_type_trans. */
++static inline u16 bnep_net_eth_proto(struct sk_buff *skb)
++{
++ struct ethhdr *eh = (void *) skb->data;
++
++ if (ntohs(eh->h_proto) >= 1536)
++ return eh->h_proto;
++
++ if (get_unaligned((u16 *) skb->data) == 0xFFFF)
++ return htons(ETH_P_802_3);
++
++ return htons(ETH_P_802_2);
++}
++
++static inline int bnep_net_proto_filter(struct sk_buff *skb, struct bnep_session *s)
++{
++ u16 proto = bnep_net_eth_proto(skb);
++ struct bnep_proto_filter *f = s->proto_filter;
++ int i;
++
++ for (i = 0; i < BNEP_MAX_PROTO_FILTERS && f[i].end; i++) {
++ if (proto >= f[i].start && proto <= f[i].end)
++ return 0;
++ }
++
++ BT_DBG("BNEP: filtered skb %p, proto 0x%.4x", skb, proto);
++ return 1;
++}
++#endif
++
++static int bnep_net_xmit(struct sk_buff *skb, struct net_device *dev)
++{
++ struct bnep_session *s = dev->priv;
++ struct sock *sk = s->sock->sk;
++
++ BT_DBG("skb %p, dev %p", skb, dev);
++
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
++ if (bnep_net_mc_filter(skb, s)) {
++ kfree_skb(skb);
++ return 0;
++ }
++#endif
++
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
++ if (bnep_net_proto_filter(skb, s)) {
++ kfree_skb(skb);
++ return 0;
++ }
++#endif
++
++ /*
++ * We cannot send L2CAP packets from here as we are potentially in a bh.
++ * So we have to queue them and wake up session thread which is sleeping
++ * on the sk->sleep.
++ */
++ dev->trans_start = jiffies;
++ skb_queue_tail(&sk->write_queue, skb);
++ wake_up_interruptible(sk->sleep);
++
++ if (skb_queue_len(&sk->write_queue) >= BNEP_TX_QUEUE_LEN) {
++ BT_DBG("tx queue is full");
++
++ /* Stop queuing.
++ * Session thread will do netif_wake_queue() */
++ netif_stop_queue(dev);
++ }
++
++ return 0;
++}
++
++int bnep_net_init(struct net_device *dev)
++{
++ struct bnep_session *s = dev->priv;
++
++ memcpy(dev->dev_addr, s->eh.h_dest, ETH_ALEN);
++ dev->addr_len = ETH_ALEN;
++
++ ether_setup(dev);
++
++ dev->open = bnep_net_open;
++ dev->stop = bnep_net_close;
++ dev->hard_start_xmit = bnep_net_xmit;
++ dev->get_stats = bnep_net_get_stats;
++ dev->do_ioctl = bnep_net_ioctl;
++ dev->set_mac_address = bnep_net_set_mac_addr;
++ dev->set_multicast_list = bnep_net_set_mc_list;
++
++ dev->watchdog_timeo = HZ * 2;
++ dev->tx_timeout = bnep_net_timeout;
++
++ return 0;
++}
+diff -urN linux-2.4.18/net/bluetooth/bnep/sock.c linux-2.4.18-mh15/net/bluetooth/bnep/sock.c
+--- linux-2.4.18/net/bluetooth/bnep/sock.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/bnep/sock.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,210 @@
++/*
++ BNEP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2001-2002 Inventel Systemes
++ Written 2001-2002 by
++ David Libault <david.libault@inventel.fr>
++
++ Copyright (C) 2002 Maxim Krasnyanskiy <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: sock.c,v 1.3 2002/07/10 22:59:52 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++
++#include "bnep.h"
++
++#ifndef CONFIG_BLUEZ_BNEP_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
++
++static int bnep_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p sk %p", sock, sk);
++
++ if (!sk)
++ return 0;
++
++ sock_orphan(sk);
++ sock_put(sk);
++
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++static int bnep_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++{
++ struct bnep_connlist_req cl;
++ struct bnep_connadd_req ca;
++ struct bnep_conndel_req cd;
++ struct bnep_conninfo ci;
++ struct socket *nsock;
++ int err;
++
++ BT_DBG("cmd %x arg %lx", cmd, arg);
++
++ switch (cmd) {
++ case BNEPCONNADD:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&ca, (void *) arg, sizeof(ca)))
++ return -EFAULT;
++
++ nsock = sockfd_lookup(ca.sock, &err);
++ if (!nsock)
++ return err;
++
++ if (nsock->sk->state != BT_CONNECTED) {
++ fput(nsock->file);
++ return -EBADFD;
++ }
++
++ err = bnep_add_connection(&ca, nsock);
++ if (!err) {
++ if (copy_to_user((void *) arg, &ca, sizeof(ca)))
++ err = -EFAULT;
++ } else
++ fput(nsock->file);
++
++ return err;
++
++ case BNEPCONNDEL:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&cd, (void *) arg, sizeof(cd)))
++ return -EFAULT;
++
++ return bnep_del_connection(&cd);
++
++ case BNEPGETCONNLIST:
++ if (copy_from_user(&cl, (void *) arg, sizeof(cl)))
++ return -EFAULT;
++
++ if (cl.cnum <= 0)
++ return -EINVAL;
++
++ err = bnep_get_connlist(&cl);
++ if (!err && copy_to_user((void *) arg, &cl, sizeof(cl)))
++ return -EFAULT;
++
++ return err;
++
++ case BNEPGETCONNINFO:
++ if (copy_from_user(&ci, (void *) arg, sizeof(ci)))
++ return -EFAULT;
++
++ err = bnep_get_conninfo(&ci);
++ if (!err && copy_to_user((void *) arg, &ci, sizeof(ci)))
++ return -EFAULT;
++
++ return err;
++
++ default:
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++static struct proto_ops bnep_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: bnep_sock_release,
++ ioctl: bnep_sock_ioctl,
++ bind: sock_no_bind,
++ getname: sock_no_getname,
++ sendmsg: sock_no_sendmsg,
++ recvmsg: sock_no_recvmsg,
++ poll: sock_no_poll,
++ listen: sock_no_listen,
++ shutdown: sock_no_shutdown,
++ setsockopt: sock_no_setsockopt,
++ getsockopt: sock_no_getsockopt,
++ connect: sock_no_connect,
++ socketpair: sock_no_socketpair,
++ accept: sock_no_accept,
++ mmap: sock_no_mmap
++};
++
++static int bnep_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ if (sock->type != SOCK_RAW)
++ return -ESOCKTNOSUPPORT;
++
++ sock->ops = &bnep_sock_ops;
++
++ if (!(sk = sk_alloc(PF_BLUETOOTH, GFP_KERNEL, 1)))
++ return -ENOMEM;
++
++ MOD_INC_USE_COUNT;
++
++ sock->state = SS_UNCONNECTED;
++ sock_init_data(sock, sk);
++
++ sk->destruct = NULL;
++ sk->protocol = protocol;
++
++ return 0;
++}
++
++static struct net_proto_family bnep_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: bnep_sock_create
++};
++
++int bnep_sock_init(void)
++{
++ bluez_sock_register(BTPROTO_BNEP, &bnep_sock_family_ops);
++ return 0;
++}
++
++int bnep_sock_cleanup(void)
++{
++ if (bluez_sock_unregister(BTPROTO_BNEP))
++ BT_ERR("Can't unregister BNEP socket");
++ return 0;
++}
+diff -urN linux-2.4.18/net/bluetooth/cmtp/capi.c linux-2.4.18-mh15/net/bluetooth/cmtp/capi.c
+--- linux-2.4.18/net/bluetooth/cmtp/capi.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/cmtp/capi.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,707 @@
++/*
++ CMTP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <net/sock.h>
++
++#include <linux/capi.h>
++
++#include "../drivers/isdn/avmb1/capilli.h"
++#include "../drivers/isdn/avmb1/capicmd.h"
++#include "../drivers/isdn/avmb1/capiutil.h"
++
++#include "cmtp.h"
++
++#ifndef CONFIG_BLUEZ_CMTP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define REVISION "1.0"
++
++#define CAPI_INTEROPERABILITY 0x20
++
++#define CAPI_INTEROPERABILITY_REQ CAPICMD(CAPI_INTEROPERABILITY, CAPI_REQ)
++#define CAPI_INTEROPERABILITY_CONF CAPICMD(CAPI_INTEROPERABILITY, CAPI_CONF)
++#define CAPI_INTEROPERABILITY_IND CAPICMD(CAPI_INTEROPERABILITY, CAPI_IND)
++#define CAPI_INTEROPERABILITY_RESP CAPICMD(CAPI_INTEROPERABILITY, CAPI_RESP)
++
++#define CAPI_INTEROPERABILITY_REQ_LEN (CAPI_MSG_BASELEN + 2)
++#define CAPI_INTEROPERABILITY_CONF_LEN (CAPI_MSG_BASELEN + 4)
++#define CAPI_INTEROPERABILITY_IND_LEN (CAPI_MSG_BASELEN + 2)
++#define CAPI_INTEROPERABILITY_RESP_LEN (CAPI_MSG_BASELEN + 2)
++
++#define CAPI_FUNCTION_REGISTER 0
++#define CAPI_FUNCTION_RELEASE 1
++#define CAPI_FUNCTION_GET_PROFILE 2
++#define CAPI_FUNCTION_GET_MANUFACTURER 3
++#define CAPI_FUNCTION_GET_VERSION 4
++#define CAPI_FUNCTION_GET_SERIAL_NUMBER 5
++#define CAPI_FUNCTION_MANUFACTURER 6
++#define CAPI_FUNCTION_LOOPBACK 7
++
++static struct capi_driver_interface *di;
++
++
++#define CMTP_MSGNUM 1
++#define CMTP_APPLID 2
++#define CMTP_MAPPING 3
++
++static struct cmtp_application *cmtp_application_add(struct cmtp_session *session, __u16 appl)
++{
++ struct cmtp_application *app = kmalloc(sizeof(*app), GFP_KERNEL);
++
++ BT_DBG("session %p application %p appl %d", session, app, appl);
++
++ if (!app)
++ return NULL;
++
++ memset(app, 0, sizeof(*app));
++
++ app->state = BT_OPEN;
++ app->appl = appl;
++
++ list_add_tail(&app->list, &session->applications);
++
++ return app;
++}
++
++static void cmtp_application_del(struct cmtp_session *session, struct cmtp_application *app)
++{
++ BT_DBG("session %p application %p", session, app);
++
++ if (app) {
++ list_del(&app->list);
++ kfree(app);
++ }
++}
++
++static struct cmtp_application *cmtp_application_get(struct cmtp_session *session, int pattern, __u16 value)
++{
++ struct cmtp_application *app;
++ struct list_head *p, *n;
++
++ list_for_each_safe(p, n, &session->applications) {
++ app = list_entry(p, struct cmtp_application, list);
++ switch (pattern) {
++ case CMTP_MSGNUM:
++ if (app->msgnum == value)
++ return app;
++ break;
++ case CMTP_APPLID:
++ if (app->appl == value)
++ return app;
++ break;
++ case CMTP_MAPPING:
++ if (app->mapping == value)
++ return app;
++ break;
++ }
++ }
++
++ return NULL;
++}
++
++static int cmtp_msgnum_get(struct cmtp_session *session)
++{
++ session->msgnum++;
++
++ if ((session->msgnum & 0xff) > 200)
++ session->msgnum = CMTP_INITIAL_MSGNUM + 1;
++
++ return session->msgnum;
++}
++
++
++static void cmtp_send_interopmsg(struct cmtp_session *session,
++ __u8 subcmd, __u16 appl, __u16 msgnum,
++ __u16 function, unsigned char *buf, int len)
++{
++ struct sk_buff *skb;
++ unsigned char *s;
++
++ BT_DBG("session %p subcmd 0x%02x appl %d msgnum %d", session, subcmd, appl, msgnum);
++
++ if (!(skb = alloc_skb(CAPI_MSG_BASELEN + 6 + len, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for interoperability packet");
++ return;
++ }
++
++ s = skb_put(skb, CAPI_MSG_BASELEN + 6 + len);
++
++ capimsg_setu16(s, 0, CAPI_MSG_BASELEN + 6 + len);
++ capimsg_setu16(s, 2, appl);
++ capimsg_setu8 (s, 4, CAPI_INTEROPERABILITY);
++ capimsg_setu8 (s, 5, subcmd);
++ capimsg_setu16(s, 6, msgnum);
++
++ /* Interoperability selector (Bluetooth Device Management) */
++ capimsg_setu16(s, 8, 0x0001);
++
++ capimsg_setu8 (s, 10, 3 + len);
++ capimsg_setu16(s, 11, function);
++ capimsg_setu8 (s, 13, len);
++
++ if (len > 0)
++ memcpy(s + 14, buf, len);
++
++ cmtp_send_capimsg(session, skb);
++}
++
++static void cmtp_recv_interopmsg(struct cmtp_session *session, struct sk_buff *skb)
++{
++ struct capi_ctr *ctrl = session->ctrl;
++ struct cmtp_application *application;
++ __u16 appl, msgnum, func, info;
++ __u32 controller;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ switch (CAPIMSG_SUBCOMMAND(skb->data)) {
++ case CAPI_CONF:
++ func = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 5);
++ info = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 8);
++
++ switch (func) {
++ case CAPI_FUNCTION_REGISTER:
++ msgnum = CAPIMSG_MSGID(skb->data);
++
++ application = cmtp_application_get(session, CMTP_MSGNUM, msgnum);
++ if (application) {
++ application->state = BT_CONNECTED;
++ application->msgnum = 0;
++ application->mapping = CAPIMSG_APPID(skb->data);
++ wake_up_interruptible(&session->wait);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_RELEASE:
++ appl = CAPIMSG_APPID(skb->data);
++
++ application = cmtp_application_get(session, CMTP_MAPPING, appl);
++ if (application) {
++ application->state = BT_CLOSED;
++ application->msgnum = 0;
++ wake_up_interruptible(&session->wait);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_GET_PROFILE:
++ controller = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 11);
++ msgnum = CAPIMSG_MSGID(skb->data);
++
++ if (!info && (msgnum == CMTP_INITIAL_MSGNUM)) {
++ session->ncontroller = controller;
++ wake_up_interruptible(&session->wait);
++ break;
++ }
++
++ if (!info && ctrl) {
++ memcpy(&ctrl->profile,
++ skb->data + CAPI_MSG_BASELEN + 11,
++ sizeof(capi_profile));
++ session->state = BT_CONNECTED;
++ ctrl->ready(ctrl);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_GET_MANUFACTURER:
++ controller = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 10);
++
++ if (!info && ctrl) {
++ strncpy(ctrl->manu,
++ skb->data + CAPI_MSG_BASELEN + 15,
++ skb->data[CAPI_MSG_BASELEN + 14]);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_GET_VERSION:
++ controller = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 12);
++
++ if (!info && ctrl) {
++ ctrl->version.majorversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 16);
++ ctrl->version.minorversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 20);
++ ctrl->version.majormanuversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 24);
++ ctrl->version.minormanuversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 28);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_GET_SERIAL_NUMBER:
++ controller = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 12);
++
++ if (!info && ctrl) {
++ memset(ctrl->serial, 0, CAPI_SERIAL_LEN);
++ strncpy(ctrl->serial,
++ skb->data + CAPI_MSG_BASELEN + 17,
++ skb->data[CAPI_MSG_BASELEN + 16]);
++ }
++
++ break;
++ }
++
++ break;
++
++ case CAPI_IND:
++ func = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 3);
++
++ if (func == CAPI_FUNCTION_LOOPBACK) {
++ appl = CAPIMSG_APPID(skb->data);
++ msgnum = CAPIMSG_MSGID(skb->data);
++ cmtp_send_interopmsg(session, CAPI_RESP, appl, msgnum, func,
++ skb->data + CAPI_MSG_BASELEN + 6,
++ skb->data[CAPI_MSG_BASELEN + 5]);
++ }
++
++ break;
++ }
++
++ kfree_skb(skb);
++}
++
++void cmtp_recv_capimsg(struct cmtp_session *session, struct sk_buff *skb)
++{
++ struct capi_ctr *ctrl = session->ctrl;
++ struct cmtp_application *application;
++ __u16 cmd, appl, info;
++ __u32 ncci, contr;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ if (CAPIMSG_COMMAND(skb->data) == CAPI_INTEROPERABILITY) {
++ cmtp_recv_interopmsg(session, skb);
++ return;
++ }
++
++ if (session->flags & (1 << CMTP_LOOPBACK)) {
++ kfree_skb(skb);
++ return;
++ }
++
++ cmd = CAPICMD(CAPIMSG_COMMAND(skb->data), CAPIMSG_SUBCOMMAND(skb->data));
++ appl = CAPIMSG_APPID(skb->data);
++ contr = CAPIMSG_CONTROL(skb->data);
++
++ application = cmtp_application_get(session, CMTP_MAPPING, appl);
++ if (application) {
++ appl = application->appl;
++ CAPIMSG_SETAPPID(skb->data, appl);
++ } else {
++ BT_ERR("Can't find application with id %d", appl);
++ kfree_skb(skb);
++ return;
++ }
++
++ if ((contr & 0x7f) == 0x01) {
++ contr = (contr & 0xffffff80) | session->num;
++ CAPIMSG_SETCONTROL(skb->data, contr);
++ }
++
++ if (!ctrl) {
++ BT_ERR("Can't find controller %d for message", session->num);
++ kfree_skb(skb);
++ return;
++ }
++
++ switch (cmd) {
++ case CAPI_CONNECT_B3_CONF:
++ ncci = CAPIMSG_NCCI(skb->data);
++ info = CAPIMSG_U16(skb->data, 12);
++
++ BT_DBG("CONNECT_B3_CONF ncci 0x%02x info 0x%02x", ncci, info);
++
++ if (info == 0)
++ ctrl->new_ncci(ctrl, appl, ncci, 8);
++
++ ctrl->handle_capimsg(ctrl, appl, skb);
++ break;
++
++ case CAPI_CONNECT_B3_IND:
++ ncci = CAPIMSG_NCCI(skb->data);
++
++ BT_DBG("CONNECT_B3_IND ncci 0x%02x", ncci);
++
++ ctrl->new_ncci(ctrl, appl, ncci, 8);
++ ctrl->handle_capimsg(ctrl, appl, skb);
++ break;
++
++ case CAPI_DISCONNECT_B3_IND:
++ ncci = CAPIMSG_NCCI(skb->data);
++
++ BT_DBG("DISCONNECT_B3_IND ncci 0x%02x", ncci);
++
++ if (ncci == 0xffffffff)
++ BT_ERR("DISCONNECT_B3_IND with ncci 0xffffffff");
++
++ ctrl->handle_capimsg(ctrl, appl, skb);
++ ctrl->free_ncci(ctrl, appl, ncci);
++ break;
++
++ default:
++ ctrl->handle_capimsg(ctrl, appl, skb);
++ break;
++ }
++}
++
++void cmtp_send_capimsg(struct cmtp_session *session, struct sk_buff *skb)
++{
++ struct cmtp_scb *scb = (void *) skb->cb;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ scb->id = -1;
++ scb->data = (CAPIMSG_COMMAND(skb->data) == CAPI_DATA_B3);
++
++ skb_queue_tail(&session->transmit, skb);
++
++ cmtp_schedule(session);
++}
++
++
++static int cmtp_load_firmware(struct capi_ctr *ctrl, capiloaddata *data)
++{
++ BT_DBG("ctrl %p data %p", ctrl, data);
++
++ return -EIO;
++}
++
++static void cmtp_reset_ctr(struct capi_ctr *ctrl)
++{
++ BT_DBG("ctrl %p", ctrl);
++
++ ctrl->reseted(ctrl);
++}
++
++static void cmtp_remove_ctr(struct capi_ctr *ctrl)
++{
++ struct cmtp_session *session = ctrl->driverdata;
++
++ BT_DBG("ctrl %p", ctrl);
++
++ ctrl->suspend_output(ctrl);
++
++ atomic_inc(&session->terminate);
++ cmtp_schedule(session);
++}
++
++static void cmtp_register_appl(struct capi_ctr *ctrl, __u16 appl, capi_register_params *rp)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct cmtp_session *session = ctrl->driverdata;
++ struct cmtp_application *application;
++ unsigned long timeo = CMTP_INTEROP_TIMEOUT;
++ unsigned char buf[8];
++ int err = 0, nconn, want = rp->level3cnt;
++
++ BT_DBG("ctrl %p appl %d level3cnt %d datablkcnt %d datablklen %d",
++ ctrl, appl, rp->level3cnt, rp->datablkcnt, rp->datablklen);
++
++ application = cmtp_application_add(session, appl);
++ if (!application) {
++ BT_ERR("Can't allocate memory for new application");
++ ctrl->appl_released(ctrl, appl);
++ return;
++ }
++
++ if (want < 0)
++ nconn = ctrl->profile.nbchannel * -want;
++ else
++ nconn = want;
++
++ if (nconn == 0)
++ nconn = ctrl->profile.nbchannel;
++
++ capimsg_setu16(buf, 0, nconn);
++ capimsg_setu16(buf, 2, rp->datablkcnt);
++ capimsg_setu16(buf, 4, rp->datablklen);
++
++ application->state = BT_CONFIG;
++ application->msgnum = cmtp_msgnum_get(session);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0x0000, application->msgnum,
++ CAPI_FUNCTION_REGISTER, buf, 6);
++
++ add_wait_queue(&session->wait, &wait);
++ while (1) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (!timeo) {
++ err = -EAGAIN;
++ break;
++ }
++
++ if (application->state == BT_CLOSED) {
++ err = -application->err;
++ break;
++ }
++
++ if (application->state == BT_CONNECTED)
++ break;
++
++ if (signal_pending(current)) {
++ err = -EINTR;
++ break;
++ }
++
++ timeo = schedule_timeout(timeo);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&session->wait, &wait);
++
++ if (err) {
++ ctrl->appl_released(ctrl, appl);
++ cmtp_application_del(session, application);
++ return;
++ }
++
++ ctrl->appl_registered(ctrl, appl);
++}
++
++static void cmtp_release_appl(struct capi_ctr *ctrl, __u16 appl)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct cmtp_session *session = ctrl->driverdata;
++ struct cmtp_application *application;
++ unsigned long timeo = CMTP_INTEROP_TIMEOUT;
++
++ BT_DBG("ctrl %p appl %d", ctrl, appl);
++
++ application = cmtp_application_get(session, CMTP_APPLID, appl);
++ if (!application) {
++ BT_ERR("Can't find application");
++ return;
++ }
++
++ application->msgnum = cmtp_msgnum_get(session);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, application->mapping, application->msgnum,
++ CAPI_FUNCTION_RELEASE, NULL, 0);
++
++ add_wait_queue(&session->wait, &wait);
++ while (timeo) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (application->state == BT_CLOSED)
++ break;
++
++ if (signal_pending(current))
++ break;
++
++ timeo = schedule_timeout(timeo);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&session->wait, &wait);
++
++ cmtp_application_del(session, application);
++ ctrl->appl_released(ctrl, appl);
++}
++
++static void cmtp_send_message(struct capi_ctr *ctrl, struct sk_buff *skb)
++{
++ struct cmtp_session *session = ctrl->driverdata;
++ struct cmtp_application *application;
++ __u16 appl;
++ __u32 contr;
++
++ BT_DBG("ctrl %p skb %p", ctrl, skb);
++
++ appl = CAPIMSG_APPID(skb->data);
++ contr = CAPIMSG_CONTROL(skb->data);
++
++ application = cmtp_application_get(session, CMTP_APPLID, appl);
++ if ((!application) || (application->state != BT_CONNECTED)) {
++ BT_ERR("Can't find application with id %d", appl);
++ kfree_skb(skb);
++ return;
++ }
++
++ CAPIMSG_SETAPPID(skb->data, application->mapping);
++
++ if ((contr & 0x7f) == session->num) {
++ contr = (contr & 0xffffff80) | 0x01;
++ CAPIMSG_SETCONTROL(skb->data, contr);
++ }
++
++ cmtp_send_capimsg(session, skb);
++}
++
++static char *cmtp_procinfo(struct capi_ctr *ctrl)
++{
++ return "CAPI Message Transport Protocol";
++}
++
++static int cmtp_ctr_read_proc(char *page, char **start, off_t off, int count, int *eof, struct capi_ctr *ctrl)
++{
++ struct cmtp_session *session = ctrl->driverdata;
++ struct cmtp_application *app;
++ struct list_head *p, *n;
++ int len = 0;
++
++ len += sprintf(page + len, "%s (Revision %s)\n\n", cmtp_procinfo(ctrl), REVISION);
++ len += sprintf(page + len, "addr %s\n", session->name);
++ len += sprintf(page + len, "ctrl %d\n", session->num);
++
++ list_for_each_safe(p, n, &session->applications) {
++ app = list_entry(p, struct cmtp_application, list);
++ len += sprintf(page + len, "appl %d -> %d\n", app->appl, app->mapping);
++ }
++
++ if (off + count >= len)
++ *eof = 1;
++
++ if (len < off)
++ return 0;
++
++ *start = page + off;
++
++ return ((count < len - off) ? count : len - off);
++}
++
++static struct capi_driver cmtp_driver = {
++ name: "cmtp",
++ revision: REVISION,
++ load_firmware: cmtp_load_firmware,
++ reset_ctr: cmtp_reset_ctr,
++ remove_ctr: cmtp_remove_ctr,
++ register_appl: cmtp_register_appl,
++ release_appl: cmtp_release_appl,
++ send_message: cmtp_send_message,
++ procinfo: cmtp_procinfo,
++ ctr_read_proc: cmtp_ctr_read_proc,
++
++ driver_read_proc: 0,
++ add_card: 0,
++};
++
++
++int cmtp_attach_device(struct cmtp_session *session)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ unsigned long timeo = CMTP_INTEROP_TIMEOUT;
++ unsigned char buf[4];
++
++ BT_DBG("session %p", session);
++
++ capimsg_setu32(buf, 0, 0);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, CMTP_INITIAL_MSGNUM,
++ CAPI_FUNCTION_GET_PROFILE, buf, 4);
++
++ add_wait_queue(&session->wait, &wait);
++ while (timeo) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (session->ncontroller)
++ break;
++
++ if (signal_pending(current))
++ break;
++
++ timeo = schedule_timeout(timeo);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&session->wait, &wait);
++
++ BT_INFO("Found %d CAPI controller(s) on device %s", session->ncontroller, session->name);
++
++ if (!timeo)
++ return -ETIMEDOUT;
++
++ if (!session->ncontroller)
++ return -ENODEV;
++
++
++ if (session->ncontroller > 1)
++ BT_INFO("Setting up only CAPI controller 1");
++
++ if (!(session->ctrl = di->attach_ctr(&cmtp_driver, session->name, session))) {
++ BT_ERR("Can't attach new controller");
++ return -EBUSY;
++ }
++
++ session->num = session->ctrl->cnr;
++
++ BT_DBG("session %p ctrl %p num %d", session, session->ctrl, session->num);
++
++ capimsg_setu32(buf, 0, 1);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, cmtp_msgnum_get(session),
++ CAPI_FUNCTION_GET_MANUFACTURER, buf, 4);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, cmtp_msgnum_get(session),
++ CAPI_FUNCTION_GET_VERSION, buf, 4);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, cmtp_msgnum_get(session),
++ CAPI_FUNCTION_GET_SERIAL_NUMBER, buf, 4);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, cmtp_msgnum_get(session),
++ CAPI_FUNCTION_GET_PROFILE, buf, 4);
++
++ return 0;
++}
++
++void cmtp_detach_device(struct cmtp_session *session)
++{
++ struct capi_ctr *ctrl = session->ctrl;
++
++ BT_DBG("session %p ctrl %p", session, ctrl);
++
++ if (!ctrl)
++ return;
++
++ ctrl->reseted(ctrl);
++
++ di->detach_ctr(ctrl);
++}
++
++int cmtp_init_capi(void)
++{
++ if (!(di = attach_capi_driver(&cmtp_driver))) {
++ BT_ERR("Can't attach CAPI driver");
++ return -EIO;
++ }
++
++ return 0;
++}
++
++void cmtp_cleanup_capi(void)
++{
++ detach_capi_driver(&cmtp_driver);
++}
+diff -urN linux-2.4.18/net/bluetooth/cmtp/cmtp.h linux-2.4.18-mh15/net/bluetooth/cmtp/cmtp.h
+--- linux-2.4.18/net/bluetooth/cmtp/cmtp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/cmtp/cmtp.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,138 @@
++/*
++ CMTP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#ifndef __CMTP_H
++#define __CMTP_H
++
++#include <linux/types.h>
++#include <net/bluetooth/bluetooth.h>
++
++#define BTNAMSIZ 18
++
++/* CMTP ioctl defines */
++#define CMTPCONNADD _IOW('C', 200, int)
++#define CMTPCONNDEL _IOW('C', 201, int)
++#define CMTPGETCONNLIST _IOR('C', 210, int)
++#define CMTPGETCONNINFO _IOR('C', 211, int)
++
++#define CMTP_LOOPBACK 0
++
++struct cmtp_connadd_req {
++ int sock; // Connected socket
++ __u32 flags;
++};
++
++struct cmtp_conndel_req {
++ bdaddr_t bdaddr;
++ __u32 flags;
++};
++
++struct cmtp_conninfo {
++ bdaddr_t bdaddr;
++ __u32 flags;
++ __u16 state;
++ int num;
++};
++
++struct cmtp_connlist_req {
++ __u32 cnum;
++ struct cmtp_conninfo *ci;
++};
++
++int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock);
++int cmtp_del_connection(struct cmtp_conndel_req *req);
++int cmtp_get_connlist(struct cmtp_connlist_req *req);
++int cmtp_get_conninfo(struct cmtp_conninfo *ci);
++
++/* CMTP session defines */
++#define CMTP_INTEROP_TIMEOUT (HZ * 5)
++#define CMTP_INITIAL_MSGNUM 0xff00
++
++struct cmtp_session {
++ struct list_head list;
++
++ struct socket *sock;
++
++ bdaddr_t bdaddr;
++
++ unsigned long state;
++ unsigned long flags;
++
++ uint mtu;
++
++ char name[BTNAMSIZ];
++
++ atomic_t terminate;
++
++ wait_queue_head_t wait;
++
++ int ncontroller;
++ int num;
++ struct capi_ctr *ctrl;
++
++ struct list_head applications;
++
++ unsigned long blockids;
++ int msgnum;
++
++ struct sk_buff_head transmit;
++
++ struct sk_buff *reassembly[16];
++};
++
++struct cmtp_application {
++ struct list_head list;
++
++ unsigned long state;
++ int err;
++
++ __u16 appl;
++ __u16 mapping;
++
++ __u16 msgnum;
++};
++
++struct cmtp_scb {
++ int id;
++ int data;
++};
++
++int cmtp_attach_device(struct cmtp_session *session);
++void cmtp_detach_device(struct cmtp_session *session);
++
++void cmtp_recv_capimsg(struct cmtp_session *session, struct sk_buff *skb);
++void cmtp_send_capimsg(struct cmtp_session *session, struct sk_buff *skb);
++
++static inline void cmtp_schedule(struct cmtp_session *session)
++{
++ struct sock *sk = session->sock->sk;
++
++ wake_up_interruptible(sk->sleep);
++}
++
++/* CMTP init defines */
++int cmtp_init_capi(void);
++int cmtp_init_sockets(void);
++void cmtp_cleanup_capi(void);
++void cmtp_cleanup_sockets(void);
++
++#endif /* __CMTP_H */
+diff -urN linux-2.4.18/net/bluetooth/cmtp/Config.in linux-2.4.18-mh15/net/bluetooth/cmtp/Config.in
+--- linux-2.4.18/net/bluetooth/cmtp/Config.in 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/cmtp/Config.in 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,7 @@
++#
++# Bluetooth CMTP layer configuration
++#
++
++if [ "$CONFIG_ISDN" = "y" -o "$CONFIG_ISDN" = "m" ]; then
++ dep_tristate 'CMTP protocol support' CONFIG_BLUEZ_CMTP $CONFIG_ISDN_CAPI $CONFIG_BLUEZ_L2CAP
++fi
+diff -urN linux-2.4.18/net/bluetooth/cmtp/core.c linux-2.4.18-mh15/net/bluetooth/cmtp/core.c
+--- linux-2.4.18/net/bluetooth/cmtp/core.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/cmtp/core.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,515 @@
++/*
++ CMTP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <linux/init.h>
++#include <net/sock.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/l2cap.h>
++
++#include "cmtp.h"
++
++#ifndef CONFIG_BLUEZ_CMTP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define VERSION "1.0"
++
++static DECLARE_RWSEM(cmtp_session_sem);
++static LIST_HEAD(cmtp_session_list);
++
++static struct cmtp_session *__cmtp_get_session(bdaddr_t *bdaddr)
++{
++ struct cmtp_session *session;
++ struct list_head *p;
++
++ BT_DBG("");
++
++ list_for_each(p, &cmtp_session_list) {
++ session = list_entry(p, struct cmtp_session, list);
++ if (!bacmp(bdaddr, &session->bdaddr))
++ return session;
++ }
++ return NULL;
++}
++
++static void __cmtp_link_session(struct cmtp_session *session)
++{
++ MOD_INC_USE_COUNT;
++ list_add(&session->list, &cmtp_session_list);
++}
++
++static void __cmtp_unlink_session(struct cmtp_session *session)
++{
++ list_del(&session->list);
++ MOD_DEC_USE_COUNT;
++}
++
++static void __cmtp_copy_session(struct cmtp_session *session, struct cmtp_conninfo *ci)
++{
++ bacpy(&ci->bdaddr, &session->bdaddr);
++
++ ci->flags = session->flags;
++ ci->state = session->state;
++
++ ci->num = session->num;
++}
++
++
++static inline int cmtp_alloc_block_id(struct cmtp_session *session)
++{
++ int i, id = -1;
++
++ for (i = 0; i < 16; i++)
++ if (!test_and_set_bit(i, &session->blockids)) {
++ id = i;
++ break;
++ }
++
++ return id;
++}
++
++static inline void cmtp_free_block_id(struct cmtp_session *session, int id)
++{
++ clear_bit(id, &session->blockids);
++}
++
++static inline void cmtp_add_msgpart(struct cmtp_session *session, int id, const unsigned char *buf, int count)
++{
++ struct sk_buff *skb = session->reassembly[id], *nskb;
++ int size;
++
++ BT_DBG("session %p buf %p count %d", session, buf, count);
++
++ size = (skb) ? skb->len + count : count;
++
++ if (!(nskb = alloc_skb(size, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for CAPI message");
++ return;
++ }
++
++ if (skb && (skb->len > 0))
++ memcpy(skb_put(nskb, skb->len), skb->data, skb->len);
++
++ memcpy(skb_put(nskb, count), buf, count);
++
++ session->reassembly[id] = nskb;
++
++ if (skb)
++ kfree_skb(skb);
++}
++
++static inline int cmtp_recv_frame(struct cmtp_session *session, struct sk_buff *skb)
++{
++ __u8 hdr, hdrlen, id;
++ __u16 len;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ while (skb->len > 0) {
++ hdr = skb->data[0];
++
++ switch (hdr & 0xc0) {
++ case 0x40:
++ hdrlen = 2;
++ len = skb->data[1];
++ break;
++ case 0x80:
++ hdrlen = 3;
++ len = skb->data[1] | (skb->data[2] << 8);
++ break;
++ default:
++ hdrlen = 1;
++ len = 0;
++ break;
++ }
++
++ id = (hdr & 0x3c) >> 2;
++
++ BT_DBG("hdr 0x%02x hdrlen %d len %d id %d", hdr, hdrlen, len, id);
++
++ if (hdrlen + len > skb->len) {
++ BT_ERR("Wrong size or header information in CMTP frame");
++ break;
++ }
++
++ if (len == 0) {
++ skb_pull(skb, hdrlen);
++ continue;
++ }
++
++ switch (hdr & 0x03) {
++ case 0x00:
++ cmtp_add_msgpart(session, id, skb->data + hdrlen, len);
++ cmtp_recv_capimsg(session, session->reassembly[id]);
++ session->reassembly[id] = NULL;
++ break;
++ case 0x01:
++ cmtp_add_msgpart(session, id, skb->data + hdrlen, len);
++ break;
++ default:
++ if (session->reassembly[id] != NULL)
++ kfree_skb(session->reassembly[id]);
++ session->reassembly[id] = NULL;
++ break;
++ }
++
++ skb_pull(skb, hdrlen + len);
++ }
++
++ kfree_skb(skb);
++ return 0;
++}
++
++static int cmtp_send_frame(struct cmtp_session *session, unsigned char *data, int len)
++{
++ struct socket *sock = session->sock;
++ struct iovec iv = { data, len };
++ struct msghdr msg;
++ int err;
++
++ BT_DBG("session %p data %p len %d", session, data, len);
++
++ if (!len)
++ return 0;
++
++ memset(&msg, 0, sizeof(msg));
++ msg.msg_iovlen = 1;
++ msg.msg_iov = &iv;
++
++ err = sock->ops->sendmsg(sock, &msg, len, 0);
++ return err;
++}
++
++static int cmtp_process_transmit(struct cmtp_session *session)
++{
++ struct sk_buff *skb, *nskb;
++ unsigned char *hdr;
++ unsigned int size, tail;
++
++ BT_DBG("session %p", session);
++
++ if (!(nskb = alloc_skb(session->mtu, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for new frame");
++ return -ENOMEM;
++ }
++
++ while ((skb = skb_dequeue(&session->transmit))) {
++ struct cmtp_scb *scb = (void *) skb->cb;
++
++ if ((tail = (session->mtu - nskb->len)) < 5) {
++ cmtp_send_frame(session, nskb->data, nskb->len);
++ skb_trim(nskb, 0);
++ tail = session->mtu;
++ }
++
++ size = min_t(uint, ((tail < 258) ? (tail - 2) : (tail - 3)), skb->len);
++
++ if ((scb->id < 0) && ((scb->id = cmtp_alloc_block_id(session)) < 0)) {
++ skb_queue_head(&session->transmit, skb);
++ break;
++ }
++
++ if (size < 256) {
++ hdr = skb_put(nskb, 2);
++ hdr[0] = 0x40
++ | ((scb->id << 2) & 0x3c)
++ | ((skb->len == size) ? 0x00 : 0x01);
++ hdr[1] = size;
++ } else {
++ hdr = skb_put(nskb, 3);
++ hdr[0] = 0x80
++ | ((scb->id << 2) & 0x3c)
++ | ((skb->len == size) ? 0x00 : 0x01);
++ hdr[1] = size & 0xff;
++ hdr[2] = size >> 8;
++ }
++
++ memcpy(skb_put(nskb, size), skb->data, size);
++ skb_pull(skb, size);
++
++ if (skb->len > 0) {
++ skb_queue_head(&session->transmit, skb);
++ } else {
++ cmtp_free_block_id(session, scb->id);
++ if (scb->data) {
++ cmtp_send_frame(session, nskb->data, nskb->len);
++ skb_trim(nskb, 0);
++ }
++ kfree_skb(skb);
++ }
++ }
++
++ cmtp_send_frame(session, nskb->data, nskb->len);
++
++ kfree_skb(nskb);
++
++ return skb_queue_len(&session->transmit);
++}
++
++static int cmtp_session(void *arg)
++{
++ struct cmtp_session *session = arg;
++ struct sock *sk = session->sock->sk;
++ struct sk_buff *skb;
++ wait_queue_t wait;
++
++ BT_DBG("session %p", session);
++
++ daemonize(); reparent_to_init();
++
++ sprintf(current->comm, "kcmtpd_ctr_%d", session->num);
++
++ sigfillset(&current->blocked);
++ flush_signals(current);
++
++ current->nice = -15;
++
++ set_fs(KERNEL_DS);
++
++ init_waitqueue_entry(&wait, current);
++ add_wait_queue(sk->sleep, &wait);
++ while (!atomic_read(&session->terminate)) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (sk->state != BT_CONNECTED)
++ break;
++
++ while ((skb = skb_dequeue(&sk->receive_queue))) {
++ skb_orphan(skb);
++ cmtp_recv_frame(session, skb);
++ }
++
++ cmtp_process_transmit(session);
++
++ schedule();
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++
++ down_write(&cmtp_session_sem);
++
++ if (!(session->flags & (1 << CMTP_LOOPBACK)))
++ cmtp_detach_device(session);
++
++ fput(session->sock->file);
++
++ __cmtp_unlink_session(session);
++
++ up_write(&cmtp_session_sem);
++
++ kfree(session);
++ return 0;
++}
++
++int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock)
++{
++ struct cmtp_session *session, *s;
++ bdaddr_t src, dst;
++ int i, err;
++
++ BT_DBG("");
++
++ baswap(&src, &bluez_pi(sock->sk)->src);
++ baswap(&dst, &bluez_pi(sock->sk)->dst);
++
++ session = kmalloc(sizeof(struct cmtp_session), GFP_KERNEL);
++ if (!session)
++ return -ENOMEM;
++ memset(session, 0, sizeof(struct cmtp_session));
++
++ down_write(&cmtp_session_sem);
++
++ s = __cmtp_get_session(&bluez_pi(sock->sk)->dst);
++ if (s && s->state == BT_CONNECTED) {
++ err = -EEXIST;
++ goto failed;
++ }
++
++ bacpy(&session->bdaddr, &bluez_pi(sock->sk)->dst);
++
++ session->mtu = min_t(uint, l2cap_pi(sock->sk)->omtu, l2cap_pi(sock->sk)->imtu);
++
++ BT_DBG("mtu %d", session->mtu);
++
++ sprintf(session->name, "%s", batostr(&dst));
++
++ session->sock = sock;
++ session->state = BT_CONFIG;
++
++ init_waitqueue_head(&session->wait);
++
++ session->ctrl = NULL;
++ session->msgnum = CMTP_INITIAL_MSGNUM;
++
++ INIT_LIST_HEAD(&session->applications);
++
++ skb_queue_head_init(&session->transmit);
++
++ for (i = 0; i < 16; i++)
++ session->reassembly[i] = NULL;
++
++ session->flags = req->flags;
++
++ __cmtp_link_session(session);
++
++ err = kernel_thread(cmtp_session, session, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
++ if (err < 0)
++ goto unlink;
++
++ if (!(session->flags & (1 << CMTP_LOOPBACK))) {
++ err = cmtp_attach_device(session);
++ if (err < 0)
++ goto detach;
++ }
++
++ up_write(&cmtp_session_sem);
++ return 0;
++
++detach:
++ cmtp_detach_device(session);
++
++unlink:
++ __cmtp_unlink_session(session);
++
++failed:
++ up_write(&cmtp_session_sem);
++ kfree(session);
++ return err;
++}
++
++int cmtp_del_connection(struct cmtp_conndel_req *req)
++{
++ struct cmtp_session *session;
++ int err = 0;
++
++ BT_DBG("");
++
++ down_read(&cmtp_session_sem);
++
++ session = __cmtp_get_session(&req->bdaddr);
++ if (session) {
++ /* Flush the transmit queue */
++ skb_queue_purge(&session->transmit);
++
++ /* Kill session thread */
++ atomic_inc(&session->terminate);
++ cmtp_schedule(session);
++ } else
++ err = -ENOENT;
++
++ up_read(&cmtp_session_sem);
++ return err;
++}
++
++int cmtp_get_connlist(struct cmtp_connlist_req *req)
++{
++ struct list_head *p;
++ int err = 0, n = 0;
++
++ BT_DBG("");
++
++ down_read(&cmtp_session_sem);
++
++ list_for_each(p, &cmtp_session_list) {
++ struct cmtp_session *session;
++ struct cmtp_conninfo ci;
++
++ session = list_entry(p, struct cmtp_session, list);
++
++ __cmtp_copy_session(session, &ci);
++
++ if (copy_to_user(req->ci, &ci, sizeof(ci))) {
++ err = -EFAULT;
++ break;
++ }
++
++ if (++n >= req->cnum)
++ break;
++
++ req->ci++;
++ }
++ req->cnum = n;
++
++ up_read(&cmtp_session_sem);
++ return err;
++}
++
++int cmtp_get_conninfo(struct cmtp_conninfo *ci)
++{
++ struct cmtp_session *session;
++ int err = 0;
++
++ down_read(&cmtp_session_sem);
++
++ session = __cmtp_get_session(&ci->bdaddr);
++ if (session)
++ __cmtp_copy_session(session, ci);
++ else
++ err = -ENOENT;
++
++ up_read(&cmtp_session_sem);
++ return err;
++}
++
++
++int __init init_cmtp(void)
++{
++ l2cap_load();
++
++ cmtp_init_capi();
++ cmtp_init_sockets();
++
++ BT_INFO("BlueZ CMTP ver %s", VERSION);
++ BT_INFO("Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>");
++
++ return 0;
++}
++
++void __exit exit_cmtp(void)
++{
++ cmtp_cleanup_sockets();
++ cmtp_cleanup_capi();
++}
++
++module_init(init_cmtp);
++module_exit(exit_cmtp);
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueZ CMTP ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/cmtp/Makefile linux-2.4.18-mh15/net/bluetooth/cmtp/Makefile
+--- linux-2.4.18/net/bluetooth/cmtp/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/cmtp/Makefile 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,10 @@
++#
++# Makefile for the Linux Bluetooth CMTP layer
++#
++
++O_TARGET := cmtp.o
++
++obj-y := core.o sock.o capi.o
++obj-m += $(O_TARGET)
++
++include $(TOPDIR)/Rules.make
+diff -urN linux-2.4.18/net/bluetooth/cmtp/sock.c linux-2.4.18-mh15/net/bluetooth/cmtp/sock.c
+--- linux-2.4.18/net/bluetooth/cmtp/sock.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/cmtp/sock.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,208 @@
++/*
++ CMTP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++
++#include "cmtp.h"
++
++#ifndef CONFIG_BLUEZ_CMTP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++static int cmtp_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p sk %p", sock, sk);
++
++ if (!sk)
++ return 0;
++
++ sock_orphan(sk);
++ sock_put(sk);
++
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++static int cmtp_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++{
++ struct cmtp_connadd_req ca;
++ struct cmtp_conndel_req cd;
++ struct cmtp_connlist_req cl;
++ struct cmtp_conninfo ci;
++ struct socket *nsock;
++ int err;
++
++ BT_DBG("cmd %x arg %lx", cmd, arg);
++
++ switch (cmd) {
++ case CMTPCONNADD:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&ca, (void *) arg, sizeof(ca)))
++ return -EFAULT;
++
++ nsock = sockfd_lookup(ca.sock, &err);
++ if (!nsock)
++ return err;
++
++ if (nsock->sk->state != BT_CONNECTED) {
++ fput(nsock->file);
++ return -EBADFD;
++ }
++
++ err = cmtp_add_connection(&ca, nsock);
++ if (!err) {
++ if (copy_to_user((void *) arg, &ca, sizeof(ca)))
++ err = -EFAULT;
++ } else
++ fput(nsock->file);
++
++ return err;
++
++ case CMTPCONNDEL:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&cd, (void *) arg, sizeof(cd)))
++ return -EFAULT;
++
++ return cmtp_del_connection(&cd);
++
++ case CMTPGETCONNLIST:
++ if (copy_from_user(&cl, (void *) arg, sizeof(cl)))
++ return -EFAULT;
++
++ if (cl.cnum <= 0)
++ return -EINVAL;
++
++ err = cmtp_get_connlist(&cl);
++ if (!err && copy_to_user((void *) arg, &cl, sizeof(cl)))
++ return -EFAULT;
++
++ return err;
++
++ case CMTPGETCONNINFO:
++ if (copy_from_user(&ci, (void *) arg, sizeof(ci)))
++ return -EFAULT;
++
++ err = cmtp_get_conninfo(&ci);
++ if (!err && copy_to_user((void *) arg, &ci, sizeof(ci)))
++ return -EFAULT;
++
++ return err;
++ }
++
++ return -EINVAL;
++}
++
++static struct proto_ops cmtp_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: cmtp_sock_release,
++ ioctl: cmtp_sock_ioctl,
++ bind: sock_no_bind,
++ getname: sock_no_getname,
++ sendmsg: sock_no_sendmsg,
++ recvmsg: sock_no_recvmsg,
++ poll: sock_no_poll,
++ listen: sock_no_listen,
++ shutdown: sock_no_shutdown,
++ setsockopt: sock_no_setsockopt,
++ getsockopt: sock_no_getsockopt,
++ connect: sock_no_connect,
++ socketpair: sock_no_socketpair,
++ accept: sock_no_accept,
++ mmap: sock_no_mmap
++};
++
++static int cmtp_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ if (sock->type != SOCK_RAW)
++ return -ESOCKTNOSUPPORT;
++
++ sock->ops = &cmtp_sock_ops;
++
++ if (!(sk = sk_alloc(PF_BLUETOOTH, GFP_KERNEL, 1)))
++ return -ENOMEM;
++
++ MOD_INC_USE_COUNT;
++
++ sock->state = SS_UNCONNECTED;
++ sock_init_data(sock, sk);
++
++ sk->destruct = NULL;
++ sk->protocol = protocol;
++
++ return 0;
++}
++
++static struct net_proto_family cmtp_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: cmtp_sock_create
++};
++
++int cmtp_init_sockets(void)
++{
++ int err;
++
++ if ((err = bluez_sock_register(BTPROTO_CMTP, &cmtp_sock_family_ops))) {
++ BT_ERR("Can't register CMTP socket layer (%d)", err);
++ return err;
++ }
++
++ return 0;
++}
++
++void cmtp_cleanup_sockets(void)
++{
++ int err;
++
++ if ((err = bluez_sock_unregister(BTPROTO_CMTP)))
++ BT_ERR("Can't unregister CMTP socket layer (%d)", err);
++
++ return;
++}
+diff -urN linux-2.4.18/net/bluetooth/Config.in linux-2.4.18-mh15/net/bluetooth/Config.in
+--- linux-2.4.18/net/bluetooth/Config.in 2001-06-12 04:15:27.000000000 +0200
++++ linux-2.4.18-mh15/net/bluetooth/Config.in 2004-08-01 16:26:23.000000000 +0200
+@@ -1,16 +1,23 @@
+ #
+-# Bluetooth configuration
++# Bluetooth subsystem configuration
+ #
+
+ if [ "$CONFIG_NET" != "n" ]; then
++
+ mainmenu_option next_comment
+ comment 'Bluetooth support'
+ dep_tristate 'Bluetooth subsystem support' CONFIG_BLUEZ $CONFIG_NET
+
+ if [ "$CONFIG_BLUEZ" != "n" ]; then
+ dep_tristate 'L2CAP protocol support' CONFIG_BLUEZ_L2CAP $CONFIG_BLUEZ
++ dep_tristate 'SCO links support' CONFIG_BLUEZ_SCO $CONFIG_BLUEZ
++ source net/bluetooth/rfcomm/Config.in
++ source net/bluetooth/bnep/Config.in
++ source net/bluetooth/cmtp/Config.in
++ source net/bluetooth/hidp/Config.in
+ source drivers/bluetooth/Config.in
+ fi
++
+ endmenu
+ fi
+
+diff -urN linux-2.4.18/net/bluetooth/hci_conn.c linux-2.4.18-mh15/net/bluetooth/hci_conn.c
+--- linux-2.4.18/net/bluetooth/hci_conn.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/hci_conn.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,435 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * HCI Connection handling.
++ *
++ * $Id: hci_conn.c,v 1.5 2002/07/17 18:46:25 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/init.h>
++#include <linux/skbuff.h>
++#include <linux/interrupt.h>
++#include <linux/notifier.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++#ifndef HCI_CORE_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
++
++void hci_acl_connect(struct hci_conn *conn)
++{
++ struct hci_dev *hdev = conn->hdev;
++ struct inquiry_entry *ie;
++ create_conn_cp cp;
++
++ BT_DBG("%p", conn);
++
++ conn->state = BT_CONNECT;
++ conn->out = 1;
++ conn->link_mode = HCI_LM_MASTER;
++
++ memset(&cp, 0, sizeof(cp));
++ bacpy(&cp.bdaddr, &conn->dst);
++ cp.pscan_rep_mode = 0x02;
++
++ if ((ie = inquiry_cache_lookup(hdev, &conn->dst)) &&
++ inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
++ cp.pscan_rep_mode = ie->info.pscan_rep_mode;
++ cp.pscan_mode = ie->info.pscan_mode;
++ cp.clock_offset = ie->info.clock_offset | __cpu_to_le16(0x8000);
++ }
++
++ cp.pkt_type = __cpu_to_le16(hdev->pkt_type & ACL_PTYPE_MASK);
++ if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
++ cp.role_switch = 0x01;
++ else
++ cp.role_switch = 0x00;
++
++ hci_send_cmd(hdev, OGF_LINK_CTL, OCF_CREATE_CONN,
++ CREATE_CONN_CP_SIZE, &cp);
++}
++
++void hci_acl_disconn(struct hci_conn *conn, __u8 reason)
++{
++ disconnect_cp cp;
++
++ BT_DBG("%p", conn);
++
++ conn->state = BT_DISCONN;
++
++ cp.handle = __cpu_to_le16(conn->handle);
++ cp.reason = reason;
++ hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_DISCONNECT,
++ DISCONNECT_CP_SIZE, &cp);
++}
++
++void hci_add_sco(struct hci_conn *conn, __u16 handle)
++{
++ struct hci_dev *hdev = conn->hdev;
++ add_sco_cp cp;
++
++ BT_DBG("%p", conn);
++
++ conn->state = BT_CONNECT;
++ conn->out = 1;
++
++ cp.pkt_type = __cpu_to_le16(hdev->pkt_type & SCO_PTYPE_MASK);
++ cp.handle = __cpu_to_le16(handle);
++
++ hci_send_cmd(hdev, OGF_LINK_CTL, OCF_ADD_SCO, ADD_SCO_CP_SIZE, &cp);
++}
++
++static void hci_conn_timeout(unsigned long arg)
++{
++ struct hci_conn *conn = (void *)arg;
++ struct hci_dev *hdev = conn->hdev;
++
++ BT_DBG("conn %p state %d", conn, conn->state);
++
++ if (atomic_read(&conn->refcnt))
++ return;
++
++ hci_dev_lock(hdev);
++ if (conn->state == BT_CONNECTED)
++ hci_acl_disconn(conn, 0x13);
++ else
++ conn->state = BT_CLOSED;
++ hci_dev_unlock(hdev);
++ return;
++}
++
++static void hci_conn_init_timer(struct hci_conn *conn)
++{
++ init_timer(&conn->timer);
++ conn->timer.function = hci_conn_timeout;
++ conn->timer.data = (unsigned long)conn;
++}
++
++struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst)
++{
++ struct hci_conn *conn;
++
++ BT_DBG("%s dst %s", hdev->name, batostr(dst));
++
++ if (!(conn = kmalloc(sizeof(struct hci_conn), GFP_ATOMIC)))
++ return NULL;
++ memset(conn, 0, sizeof(struct hci_conn));
++
++ bacpy(&conn->dst, dst);
++ conn->type = type;
++ conn->hdev = hdev;
++ conn->state = BT_OPEN;
++
++ skb_queue_head_init(&conn->data_q);
++ hci_conn_init_timer(conn);
++
++ atomic_set(&conn->refcnt, 0);
++
++ hci_dev_hold(hdev);
++
++ tasklet_disable(&hdev->tx_task);
++ conn_hash_add(hdev, conn);
++ tasklet_enable(&hdev->tx_task);
++
++ return conn;
++}
++
++int hci_conn_del(struct hci_conn *conn)
++{
++ struct hci_dev *hdev = conn->hdev;
++
++ BT_DBG("%s conn %p handle %d", hdev->name, conn, conn->handle);
++
++ hci_conn_del_timer(conn);
++
++ if (conn->type == SCO_LINK) {
++ struct hci_conn *acl = conn->link;
++ if (acl) {
++ acl->link = NULL;
++ hci_conn_put(acl);
++ }
++ } else {
++ struct hci_conn *sco = conn->link;
++ if (sco)
++ sco->link = NULL;
++
++ /* Unacked frames */
++ hdev->acl_cnt += conn->sent;
++ }
++
++ tasklet_disable(&hdev->tx_task);
++ conn_hash_del(hdev, conn);
++ tasklet_enable(&hdev->tx_task);
++
++ skb_queue_purge(&conn->data_q);
++
++ hci_dev_put(hdev);
++
++ kfree(conn);
++ return 0;
++}
++
++struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
++{
++ int use_src = bacmp(src, BDADDR_ANY);
++ struct hci_dev *hdev = NULL;
++ struct list_head *p;
++
++ BT_DBG("%s -> %s", batostr(src), batostr(dst));
++
++ read_lock_bh(&hdev_list_lock);
++
++ list_for_each(p, &hdev_list) {
++ struct hci_dev *d;
++ d = list_entry(p, struct hci_dev, list);
++
++ if (!test_bit(HCI_UP, &d->flags))
++ continue;
++
++ /* Simple routing:
++ * No source address - find interface with bdaddr != dst
++ * Source address - find interface with bdaddr == src
++ */
++
++ if (use_src) {
++ if (!bacmp(&d->bdaddr, src)) {
++ hdev = d; break;
++ }
++ } else {
++ if (bacmp(&d->bdaddr, dst)) {
++ hdev = d; break;
++ }
++ }
++ }
++
++ if (hdev)
++ hci_dev_hold(hdev);
++
++ read_unlock_bh(&hdev_list_lock);
++ return hdev;
++}
++
++/* Create SCO or ACL connection.
++ * Device _must_ be locked */
++struct hci_conn * hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst)
++{
++ struct hci_conn *acl;
++
++ BT_DBG("%s dst %s", hdev->name, batostr(dst));
++
++ if (!(acl = conn_hash_lookup_ba(hdev, ACL_LINK, dst))) {
++ if (!(acl = hci_conn_add(hdev, ACL_LINK, dst)))
++ return NULL;
++ }
++
++ hci_conn_hold(acl);
++
++ if (acl->state == BT_OPEN || acl->state == BT_CLOSED)
++ hci_acl_connect(acl);
++
++ if (type == SCO_LINK) {
++ struct hci_conn *sco;
++
++ if (!(sco = conn_hash_lookup_ba(hdev, SCO_LINK, dst))) {
++ if (!(sco = hci_conn_add(hdev, SCO_LINK, dst))) {
++ hci_conn_put(acl);
++ return NULL;
++ }
++ }
++ acl->link = sco;
++ sco->link = acl;
++
++ hci_conn_hold(sco);
++
++ if (acl->state == BT_CONNECTED &&
++ (sco->state == BT_OPEN || sco->state == BT_CLOSED))
++ hci_add_sco(sco, acl->handle);
++
++ return sco;
++ } else {
++ return acl;
++ }
++}
++
++/* Authenticate remote device */
++int hci_conn_auth(struct hci_conn *conn)
++{
++ BT_DBG("conn %p", conn);
++
++ if (conn->link_mode & HCI_LM_AUTH)
++ return 1;
++
++ if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
++ auth_requested_cp ar;
++ ar.handle = __cpu_to_le16(conn->handle);
++ hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_AUTH_REQUESTED,
++ AUTH_REQUESTED_CP_SIZE, &ar);
++ }
++ return 0;
++}
++
++/* Enable encryption */
++int hci_conn_encrypt(struct hci_conn *conn)
++{
++ BT_DBG("conn %p", conn);
++
++ if (conn->link_mode & HCI_LM_ENCRYPT)
++ return 1;
++
++ if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend))
++ return 0;
++
++ if (hci_conn_auth(conn)) {
++ set_conn_encrypt_cp ce;
++ ce.handle = __cpu_to_le16(conn->handle);
++ ce.encrypt = 1;
++ hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_SET_CONN_ENCRYPT,
++ SET_CONN_ENCRYPT_CP_SIZE, &ce);
++ }
++ return 0;
++}
++
++/* Drop all connection on the device */
++void hci_conn_hash_flush(struct hci_dev *hdev)
++{
++ struct conn_hash *h = &hdev->conn_hash;
++ struct list_head *p;
++
++ BT_DBG("hdev %s", hdev->name);
++
++ p = h->list.next;
++ while (p != &h->list) {
++ struct hci_conn *c;
++
++ c = list_entry(p, struct hci_conn, list);
++ p = p->next;
++
++ c->state = BT_CLOSED;
++
++ hci_proto_disconn_ind(c, 0x16);
++ hci_conn_del(c);
++ }
++}
++
++int hci_get_conn_list(unsigned long arg)
++{
++ struct hci_conn_list_req req, *cl;
++ struct hci_conn_info *ci;
++ struct hci_dev *hdev;
++ struct list_head *p;
++ int n = 0, size, err;
++
++ if (copy_from_user(&req, (void *) arg, sizeof(req)))
++ return -EFAULT;
++
++ if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
++ return -EINVAL;
++
++ size = sizeof(req) + req.conn_num * sizeof(*ci);
++
++ if (!(cl = (void *) kmalloc(size, GFP_KERNEL)))
++ return -ENOMEM;
++
++ if (!(hdev = hci_dev_get(req.dev_id))) {
++ kfree(cl);
++ return -ENODEV;
++ }
++
++ ci = cl->conn_info;
++
++ hci_dev_lock_bh(hdev);
++ list_for_each(p, &hdev->conn_hash.list) {
++ register struct hci_conn *c;
++ c = list_entry(p, struct hci_conn, list);
++
++ bacpy(&(ci + n)->bdaddr, &c->dst);
++ (ci + n)->handle = c->handle;
++ (ci + n)->type = c->type;
++ (ci + n)->out = c->out;
++ (ci + n)->state = c->state;
++ (ci + n)->link_mode = c->link_mode;
++ if (++n >= req.conn_num)
++ break;
++ }
++ hci_dev_unlock_bh(hdev);
++
++ cl->dev_id = hdev->id;
++ cl->conn_num = n;
++ size = sizeof(req) + n * sizeof(*ci);
++
++ hci_dev_put(hdev);
++
++ err = copy_to_user((void *) arg, cl, size);
++ kfree(cl);
++
++ return err ? -EFAULT : 0;
++}
++
++int hci_get_conn_info(struct hci_dev *hdev, unsigned long arg)
++{
++ struct hci_conn_info_req req;
++ struct hci_conn_info ci;
++ struct hci_conn *conn;
++ char *ptr = (void *) arg + sizeof(req);
++
++ if (copy_from_user(&req, (void *) arg, sizeof(req)))
++ return -EFAULT;
++
++ hci_dev_lock_bh(hdev);
++ conn = conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
++ if (conn) {
++ bacpy(&ci.bdaddr, &conn->dst);
++ ci.handle = conn->handle;
++ ci.type = conn->type;
++ ci.out = conn->out;
++ ci.state = conn->state;
++ ci.link_mode = conn->link_mode;
++ }
++ hci_dev_unlock_bh(hdev);
++
++ if (!conn)
++ return -ENOENT;
++
++ return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
++}
+diff -urN linux-2.4.18/net/bluetooth/hci_core.c linux-2.4.18-mh15/net/bluetooth/hci_core.c
+--- linux-2.4.18/net/bluetooth/hci_core.c 2001-11-09 23:21:21.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/hci_core.c 2004-08-01 16:26:23.000000000 +0200
+@@ -25,11 +25,12 @@
+ /*
+ * BlueZ HCI Core.
+ *
+- * $Id: hci_core.c,v 1.22 2001/08/03 04:19:50 maxk Exp $
++ * $Id: hci_core.c,v 1.14 2002/08/26 16:57:57 maxk Exp $
+ */
+
+ #include <linux/config.h>
+ #include <linux/module.h>
++#include <linux/kmod.h>
+
+ #include <linux/types.h>
+ #include <linux/errno.h>
+@@ -50,12 +51,11 @@
+ #include <asm/unaligned.h>
+
+ #include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+ #include <net/bluetooth/hci_core.h>
+
+ #ifndef HCI_CORE_DEBUG
+-#undef DBG
+-#define DBG( A... )
++#undef BT_DBG
++#define BT_DBG( A... )
+ #endif
+
+ static void hci_cmd_task(unsigned long arg);
+@@ -63,279 +63,69 @@
+ static void hci_tx_task(unsigned long arg);
+ static void hci_notify(struct hci_dev *hdev, int event);
+
+-static rwlock_t hci_task_lock = RW_LOCK_UNLOCKED;
++rwlock_t hci_task_lock = RW_LOCK_UNLOCKED;
+
+ /* HCI device list */
+-struct hci_dev *hdev_list[HCI_MAX_DEV];
+-spinlock_t hdev_list_lock;
+-#define GET_HDEV(a) (hdev_list[a])
+-
+-/* HCI protocol list */
+-struct hci_proto *hproto_list[HCI_MAX_PROTO];
+-#define GET_HPROTO(a) (hproto_list[a])
++LIST_HEAD(hdev_list);
++rwlock_t hdev_list_lock = RW_LOCK_UNLOCKED;
+
+-/* HCI notifiers list */
+-struct notifier_block *hci_dev_notifier;
+-
+-/* HCI device notifications */
+-int hci_register_notifier(struct notifier_block *nb)
+-{
+- int err, i;
+- struct hci_dev *hdev;
+-
+- if ((err = notifier_chain_register(&hci_dev_notifier, nb)))
+- return err;
+-
+- /* Notify about already registered devices */
+- spin_lock(&hdev_list_lock);
+- for (i = 0; i < HCI_MAX_DEV; i++) {
+- if (!(hdev = GET_HDEV(i)))
+- continue;
+- if (hdev->flags & HCI_UP)
+- (*nb->notifier_call)(nb, HCI_DEV_UP, hdev);
+- }
+- spin_unlock(&hdev_list_lock);
+-
+- return 0;
+-}
+-
+-int hci_unregister_notifier(struct notifier_block *nb)
+-{
+- return notifier_chain_unregister(&hci_dev_notifier, nb);
+-}
+-
+-static inline void hci_notify(struct hci_dev *hdev, int event)
+-{
+- notifier_call_chain(&hci_dev_notifier, event, hdev);
+-}
+-
+-/* Get HCI device by index (device is locked on return)*/
+-struct hci_dev *hci_dev_get(int index)
+-{
+- struct hci_dev *hdev;
+- DBG("%d", index);
+-
+- if (index < 0 || index >= HCI_MAX_DEV)
+- return NULL;
+-
+- spin_lock(&hdev_list_lock);
+- if ((hdev = GET_HDEV(index)))
+- hci_dev_hold(hdev);
+- spin_unlock(&hdev_list_lock);
+-
+- return hdev;
+-}
+-
+-/* Flush inquiry cache */
+-void inquiry_cache_flush(struct inquiry_cache *cache)
+-{
+- struct inquiry_entry *next = cache->list, *e;
+-
+- DBG("cache %p", cache);
+-
+- cache->list = NULL;
+- while ((e = next)) {
+- next = e->next;
+- kfree(e);
+- }
+-}
+-
+-/* Lookup by bdaddr.
+- * Cache must be locked. */
+-static struct inquiry_entry * __inquiry_cache_lookup(struct inquiry_cache *cache, bdaddr_t *bdaddr)
+-{
+- struct inquiry_entry *e;
+-
+- DBG("cache %p, %s", cache, batostr(bdaddr));
+-
+- for (e = cache->list; e; e = e->next)
+- if (!bacmp(&e->info.bdaddr, bdaddr))
+- break;
+-
+- return e;
+-}
+-
+-static void inquiry_cache_update(struct inquiry_cache *cache, inquiry_info *info)
+-{
+- struct inquiry_entry *e;
+-
+- DBG("cache %p, %s", cache, batostr(&info->bdaddr));
+-
+- inquiry_cache_lock(cache);
+-
+- if (!(e = __inquiry_cache_lookup(cache, &info->bdaddr))) {
+- /* Entry not in the cache. Add new one. */
+- if (!(e = kmalloc(sizeof(struct inquiry_entry), GFP_ATOMIC)))
+- goto unlock;
+- memset(e, 0, sizeof(struct inquiry_entry));
+- e->next = cache->list;
+- cache->list = e;
+- }
+-
+- memcpy(&e->info, info, sizeof(inquiry_info));
+- e->timestamp = jiffies;
+- cache->timestamp = jiffies;
+-unlock:
+- inquiry_cache_unlock(cache);
+-}
+-
+-static int inquiry_cache_dump(struct inquiry_cache *cache, int num, __u8 *buf)
+-{
+- inquiry_info *info = (inquiry_info *) buf;
+- struct inquiry_entry *e;
+- int copied = 0;
++/* HCI protocols */
++#define HCI_MAX_PROTO 2
++struct hci_proto *hci_proto[HCI_MAX_PROTO];
+
+- inquiry_cache_lock(cache);
+-
+- for (e = cache->list; e && copied < num; e = e->next, copied++)
+- memcpy(info++, &e->info, sizeof(inquiry_info));
++/* HCI notifiers list */
++static struct notifier_block *hci_notifier;
+
+- inquiry_cache_unlock(cache);
+
+- DBG("cache %p, copied %d", cache, copied);
+- return copied;
+-}
++/* ---- HCI notifications ---- */
+
+-/* --------- BaseBand connections --------- */
+-static struct hci_conn *hci_conn_add(struct hci_dev *hdev, __u16 handle, __u8 type, bdaddr_t *dst)
++int hci_register_notifier(struct notifier_block *nb)
+ {
+- struct hci_conn *conn;
+-
+- DBG("%s handle %d dst %s", hdev->name, handle, batostr(dst));
+-
+- if ( conn_hash_lookup(&hdev->conn_hash, handle)) {
+- ERR("%s handle 0x%x already exists", hdev->name, handle);
+- return NULL;
+- }
+-
+- if (!(conn = kmalloc(sizeof(struct hci_conn), GFP_ATOMIC)))
+- return NULL;
+- memset(conn, 0, sizeof(struct hci_conn));
+-
+- bacpy(&conn->dst, dst);
+- conn->handle = handle;
+- conn->type = type;
+- conn->hdev = hdev;
+-
+- skb_queue_head_init(&conn->data_q);
+-
+- hci_dev_hold(hdev);
+- conn_hash_add(&hdev->conn_hash, handle, conn);
+-
+- return conn;
++ return notifier_chain_register(&hci_notifier, nb);
+ }
+
+-static int hci_conn_del(struct hci_dev *hdev, struct hci_conn *conn)
++int hci_unregister_notifier(struct notifier_block *nb)
+ {
+- DBG("%s conn %p handle %d", hdev->name, conn, conn->handle);
+-
+- conn_hash_del(&hdev->conn_hash, conn);
+- hci_dev_put(hdev);
+-
+- /* Unacked frames */
+- hdev->acl_cnt += conn->sent;
+-
+- skb_queue_purge(&conn->data_q);
+-
+- kfree(conn);
+- return 0;
++ return notifier_chain_unregister(&hci_notifier, nb);
+ }
+
+-/* Drop all connection on the device */
+-static void hci_conn_hash_flush(struct hci_dev *hdev)
++void hci_notify(struct hci_dev *hdev, int event)
+ {
+- struct conn_hash *h = &hdev->conn_hash;
+- struct hci_proto *hp;
+- struct list_head *p;
+-
+- DBG("hdev %s", hdev->name);
+-
+- p = h->list.next;
+- while (p != &h->list) {
+- struct hci_conn *c;
+-
+- c = list_entry(p, struct hci_conn, list);
+- p = p->next;
+-
+- if (c->type == ACL_LINK) {
+- /* ACL link notify L2CAP layer */
+- if ((hp = GET_HPROTO(HCI_PROTO_L2CAP)) && hp->disconn_ind)
+- hp->disconn_ind(c, 0x16);
+- } else {
+- /* SCO link (no notification) */
+- }
+-
+- hci_conn_del(hdev, c);
+- }
++ notifier_call_chain(&hci_notifier, event, hdev);
+ }
+
+-int hci_connect(struct hci_dev *hdev, bdaddr_t *bdaddr)
+-{
+- struct inquiry_cache *cache = &hdev->inq_cache;
+- struct inquiry_entry *e;
+- create_conn_cp cc;
+- __u16 clock_offset;
+-
+- DBG("%s bdaddr %s", hdev->name, batostr(bdaddr));
+-
+- if (!(hdev->flags & HCI_UP))
+- return -ENODEV;
+-
+- inquiry_cache_lock_bh(cache);
+-
+- if (!(e = __inquiry_cache_lookup(cache, bdaddr)) || inquiry_entry_age(e) > INQUIRY_ENTRY_AGE_MAX) {
+- cc.pscan_rep_mode = 0;
+- cc.pscan_mode = 0;
+- clock_offset = 0;
+- } else {
+- cc.pscan_rep_mode = e->info.pscan_rep_mode;
+- cc.pscan_mode = e->info.pscan_mode;
+- clock_offset = __le16_to_cpu(e->info.clock_offset) & 0x8000;
+- }
+-
+- inquiry_cache_unlock_bh(cache);
+-
+- bacpy(&cc.bdaddr, bdaddr);
+- cc.pkt_type = __cpu_to_le16(hdev->pkt_type);
+- cc.clock_offset = __cpu_to_le16(clock_offset);
+-
+- if (lmp_rswitch_capable(hdev))
+- cc.role_switch = 0x01;
+- else
+- cc.role_switch = 0x00;
+-
+- hci_send_cmd(hdev, OGF_LINK_CTL, OCF_CREATE_CONN, CREATE_CONN_CP_SIZE, &cc);
++/* ---- HCI hotplug support ---- */
+
+- return 0;
+-}
++#ifdef CONFIG_HOTPLUG
+
+-int hci_disconnect(struct hci_conn *conn, __u8 reason)
++static int hci_run_hotplug(char *dev, char *action)
+ {
+- disconnect_cp dc;
+-
+- DBG("conn %p handle %d", conn, conn->handle);
++ char *argv[3], *envp[5], dstr[20], astr[32];
+
+- dc.handle = __cpu_to_le16(conn->handle);
+- dc.reason = reason;
+- hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_DISCONNECT, DISCONNECT_CP_SIZE, &dc);
++ sprintf(dstr, "DEVICE=%s", dev);
++ sprintf(astr, "ACTION=%s", action);
+
+- return 0;
+-}
++ argv[0] = hotplug_path;
++ argv[1] = "bluetooth";
++ argv[2] = NULL;
+
+-/* --------- HCI request handling ------------ */
+-static inline void hci_req_lock(struct hci_dev *hdev)
+-{
+- down(&hdev->req_lock);
++ envp[0] = "HOME=/";
++ envp[1] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";
++ envp[2] = dstr;
++ envp[3] = astr;
++ envp[4] = NULL;
++
++ return call_usermodehelper(argv[0], argv, envp);
+ }
++#else
++#define hci_run_hotplug(A...)
++#endif
+
+-static inline void hci_req_unlock(struct hci_dev *hdev)
+-{
+- up(&hdev->req_lock);
+-}
++/* ---- HCI requests ---- */
+
+-static inline void hci_req_complete(struct hci_dev *hdev, int result)
++void hci_req_complete(struct hci_dev *hdev, int result)
+ {
+- DBG("%s result 0x%2.2x", hdev->name, result);
++ BT_DBG("%s result 0x%2.2x", hdev->name, result);
+
+ if (hdev->req_status == HCI_REQ_PEND) {
+ hdev->req_result = result;
+@@ -344,9 +134,9 @@
+ }
+ }
+
+-static inline void hci_req_cancel(struct hci_dev *hdev, int err)
++void hci_req_cancel(struct hci_dev *hdev, int err)
+ {
+- DBG("%s err 0x%2.2x", hdev->name, err);
++ BT_DBG("%s err 0x%2.2x", hdev->name, err);
+
+ if (hdev->req_status == HCI_REQ_PEND) {
+ hdev->req_result = err;
+@@ -356,23 +146,22 @@
+ }
+
+ /* Execute request and wait for completion. */
+-static int __hci_request(struct hci_dev *hdev, void (*req)(struct hci_dev *hdev, unsigned long opt),
+- unsigned long opt, __u32 timeout)
++static int __hci_request(struct hci_dev *hdev, void (*req)(struct hci_dev *hdev, unsigned long opt), unsigned long opt, __u32 timeout)
+ {
+ DECLARE_WAITQUEUE(wait, current);
+ int err = 0;
+
+- DBG("%s start", hdev->name);
++ BT_DBG("%s start", hdev->name);
+
+ hdev->req_status = HCI_REQ_PEND;
+
+ add_wait_queue(&hdev->req_wait_q, &wait);
+- current->state = TASK_INTERRUPTIBLE;
++ set_current_state(TASK_INTERRUPTIBLE);
+
+ req(hdev, opt);
+ schedule_timeout(timeout);
+
+- current->state = TASK_RUNNING;
++ set_current_state(TASK_RUNNING);
+ remove_wait_queue(&hdev->req_wait_q, &wait);
+
+ if (signal_pending(current))
+@@ -394,7 +183,7 @@
+
+ hdev->req_status = hdev->req_result = 0;
+
+- DBG("%s end: err %d", hdev->name, err);
++ BT_DBG("%s end: err %d", hdev->name, err);
+
+ return err;
+ }
+@@ -412,10 +201,9 @@
+ return ret;
+ }
+
+-/* --------- HCI requests ---------- */
+ static void hci_reset_req(struct hci_dev *hdev, unsigned long opt)
+ {
+- DBG("%s %ld", hdev->name, opt);
++ BT_DBG("%s %ld", hdev->name, opt);
+
+ /* Reset device */
+ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_RESET, 0, NULL);
+@@ -423,27 +211,44 @@
+
+ static void hci_init_req(struct hci_dev *hdev, unsigned long opt)
+ {
+- set_event_flt_cp ec;
++ set_event_flt_cp ef;
+ __u16 param;
+
+- DBG("%s %ld", hdev->name, opt);
++ BT_DBG("%s %ld", hdev->name, opt);
+
+ /* Mandatory initialization */
+
++ /* Reset */
++ if (test_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks))
++ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_RESET, 0, NULL);
++
+ /* Read Local Supported Features */
+ hci_send_cmd(hdev, OGF_INFO_PARAM, OCF_READ_LOCAL_FEATURES, 0, NULL);
+
+ /* Read Buffer Size (ACL mtu, max pkt, etc.) */
+ hci_send_cmd(hdev, OGF_INFO_PARAM, OCF_READ_BUFFER_SIZE, 0, NULL);
+
++#if 0
++ /* Host buffer size */
++ {
++ host_buffer_size_cp bs;
++ bs.acl_mtu = __cpu_to_le16(HCI_MAX_ACL_SIZE);
++ bs.sco_mtu = HCI_MAX_SCO_SIZE;
++ bs.acl_max_pkt = __cpu_to_le16(0xffff);
++ bs.sco_max_pkt = __cpu_to_le16(0xffff);
++ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_HOST_BUFFER_SIZE,
++ HOST_BUFFER_SIZE_CP_SIZE, &bs);
++ }
++#endif
++
+ /* Read BD Address */
+ hci_send_cmd(hdev, OGF_INFO_PARAM, OCF_READ_BD_ADDR, 0, NULL);
+
+ /* Optional initialization */
+
+ /* Clear Event Filters */
+- ec.flt_type = FLT_CLEAR_ALL;
+- hci_send_cmd(hdev, OGF_HOST_CTL, OCF_SET_EVENT_FLT, 1, &ec);
++ ef.flt_type = FLT_CLEAR_ALL;
++ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_SET_EVENT_FLT, 1, &ef);
+
+ /* Page timeout ~20 secs */
+ param = __cpu_to_le16(0x8000);
+@@ -458,7 +263,7 @@
+ {
+ __u8 scan = opt;
+
+- DBG("%s %x", hdev->name, scan);
++ BT_DBG("%s %x", hdev->name, scan);
+
+ /* Inquiry and Page scans */
+ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE, 1, &scan);
+@@ -468,116 +273,273 @@
+ {
+ __u8 auth = opt;
+
+- DBG("%s %x", hdev->name, auth);
++ BT_DBG("%s %x", hdev->name, auth);
+
+ /* Authentication */
+ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_WRITE_AUTH_ENABLE, 1, &auth);
+ }
+
+-static void hci_inq_req(struct hci_dev *hdev, unsigned long opt)
++static void hci_encrypt_req(struct hci_dev *hdev, unsigned long opt)
+ {
+- struct hci_inquiry_req *ir = (struct hci_inquiry_req *) opt;
+- inquiry_cp ic;
++ __u8 encrypt = opt;
+
+- DBG("%s", hdev->name);
++ BT_DBG("%s %x", hdev->name, encrypt);
+
+- /* Start Inquiry */
+- memcpy(&ic.lap, &ir->lap, 3);
+- ic.lenght = ir->length;
+- ic.num_rsp = ir->num_rsp;
+- hci_send_cmd(hdev, OGF_LINK_CTL, OCF_INQUIRY, INQUIRY_CP_SIZE, &ic);
++ /* Authentication */
++ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_WRITE_ENCRYPT_MODE, 1, &encrypt);
+ }
+
+-/* HCI ioctl helpers */
+-int hci_dev_open(__u16 dev)
++/* Get HCI device by index.
++ * Device is locked on return. */
++struct hci_dev *hci_dev_get(int index)
+ {
+ struct hci_dev *hdev;
+- int ret = 0;
+-
+- if (!(hdev = hci_dev_get(dev)))
+- return -ENODEV;
++ struct list_head *p;
+
+- DBG("%s %p", hdev->name, hdev);
++ BT_DBG("%d", index);
+
+- hci_req_lock(hdev);
++ if (index < 0)
++ return NULL;
+
+- if (hdev->flags & HCI_UP) {
+- ret = -EALREADY;
+- goto done;
++ read_lock(&hdev_list_lock);
++ list_for_each(p, &hdev_list) {
++ hdev = list_entry(p, struct hci_dev, list);
++ if (hdev->id == index) {
++ hci_dev_hold(hdev);
++ goto done;
++ }
+ }
++ hdev = NULL;
++done:
++ read_unlock(&hdev_list_lock);
++ return hdev;
++}
+
+- if (hdev->open(hdev)) {
+- ret = -EIO;
+- goto done;
+- }
++/* ---- Inquiry support ---- */
++void inquiry_cache_flush(struct hci_dev *hdev)
++{
++ struct inquiry_cache *cache = &hdev->inq_cache;
++ struct inquiry_entry *next = cache->list, *e;
+
+- if (hdev->flags & HCI_NORMAL) {
+- atomic_set(&hdev->cmd_cnt, 1);
+- hdev->flags |= HCI_INIT;
++ BT_DBG("cache %p", cache);
+
+- //__hci_request(hdev, hci_reset_req, 0, HZ);
+- ret = __hci_request(hdev, hci_init_req, 0, HCI_INIT_TIMEOUT);
+-
+- hdev->flags &= ~HCI_INIT;
++ cache->list = NULL;
++ while ((e = next)) {
++ next = e->next;
++ kfree(e);
+ }
++}
+
+- if (!ret) {
+- hdev->flags |= HCI_UP;
+- hci_notify(hdev, HCI_DEV_UP);
+- } else {
+- /* Init failed, cleanup */
+- tasklet_kill(&hdev->rx_task);
+- tasklet_kill(&hdev->tx_task);
+- tasklet_kill(&hdev->cmd_task);
++struct inquiry_entry *inquiry_cache_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr)
++{
++ struct inquiry_cache *cache = &hdev->inq_cache;
++ struct inquiry_entry *e;
+
+- skb_queue_purge(&hdev->cmd_q);
+- skb_queue_purge(&hdev->rx_q);
++ BT_DBG("cache %p, %s", cache, batostr(bdaddr));
+
+- if (hdev->flush)
+- hdev->flush(hdev);
++ for (e = cache->list; e; e = e->next)
++ if (!bacmp(&e->info.bdaddr, bdaddr))
++ break;
++ return e;
++}
+
+- if (hdev->sent_cmd) {
+- kfree_skb(hdev->sent_cmd);
+- hdev->sent_cmd = NULL;
+- }
++void inquiry_cache_update(struct hci_dev *hdev, inquiry_info *info)
++{
++ struct inquiry_cache *cache = &hdev->inq_cache;
++ struct inquiry_entry *e;
+
+- hdev->close(hdev);
+- }
++ BT_DBG("cache %p, %s", cache, batostr(&info->bdaddr));
+
+-done:
+- hci_req_unlock(hdev);
+- hci_dev_put(hdev);
++ if (!(e = inquiry_cache_lookup(hdev, &info->bdaddr))) {
++ /* Entry not in the cache. Add new one. */
++ if (!(e = kmalloc(sizeof(struct inquiry_entry), GFP_ATOMIC)))
++ return;
++ memset(e, 0, sizeof(struct inquiry_entry));
++ e->next = cache->list;
++ cache->list = e;
++ }
+
+- return ret;
++ memcpy(&e->info, info, sizeof(inquiry_info));
++ e->timestamp = jiffies;
++ cache->timestamp = jiffies;
+ }
+
+-int hci_dev_close(__u16 dev)
++int inquiry_cache_dump(struct hci_dev *hdev, int num, __u8 *buf)
+ {
+- struct hci_dev *hdev;
+-
+- if (!(hdev = hci_dev_get(dev)))
+- return -ENODEV;
++ struct inquiry_cache *cache = &hdev->inq_cache;
++ inquiry_info *info = (inquiry_info *) buf;
++ struct inquiry_entry *e;
++ int copied = 0;
+
+- DBG("%s %p", hdev->name, hdev);
++ for (e = cache->list; e && copied < num; e = e->next, copied++)
++ memcpy(info++, &e->info, sizeof(inquiry_info));
+
+- hci_req_cancel(hdev, ENODEV);
+- hci_req_lock(hdev);
++ BT_DBG("cache %p, copied %d", cache, copied);
++ return copied;
++}
+
+- if (!(hdev->flags & HCI_UP))
+- goto done;
++static void hci_inq_req(struct hci_dev *hdev, unsigned long opt)
++{
++ struct hci_inquiry_req *ir = (struct hci_inquiry_req *) opt;
++ inquiry_cp ic;
+
+- /* Kill RX and TX tasks */
+- tasklet_kill(&hdev->rx_task);
+- tasklet_kill(&hdev->tx_task);
++ BT_DBG("%s", hdev->name);
+
+- inquiry_cache_flush(&hdev->inq_cache);
++ if (test_bit(HCI_INQUIRY, &hdev->flags))
++ return;
+
+- hci_conn_hash_flush(hdev);
++ /* Start Inquiry */
++ memcpy(&ic.lap, &ir->lap, 3);
++ ic.length = ir->length;
++ ic.num_rsp = ir->num_rsp;
++ hci_send_cmd(hdev, OGF_LINK_CTL, OCF_INQUIRY, INQUIRY_CP_SIZE, &ic);
++}
+
+- /* Clear flags */
+- hdev->flags &= HCI_SOCK;
+- hdev->flags |= HCI_NORMAL;
++int hci_inquiry(unsigned long arg)
++{
++ struct hci_inquiry_req ir;
++ struct hci_dev *hdev;
++ int err = 0, do_inquiry = 0, max_rsp;
++ long timeo;
++ __u8 *buf, *ptr;
+
++ ptr = (void *) arg;
++ if (copy_from_user(&ir, ptr, sizeof(ir)))
++ return -EFAULT;
++
++ if (!(hdev = hci_dev_get(ir.dev_id)))
++ return -ENODEV;
++
++ hci_dev_lock_bh(hdev);
++ if (inquiry_cache_age(hdev) > INQUIRY_CACHE_AGE_MAX ||
++ inquiry_cache_empty(hdev) ||
++ ir.flags & IREQ_CACHE_FLUSH) {
++ inquiry_cache_flush(hdev);
++ do_inquiry = 1;
++ }
++ hci_dev_unlock_bh(hdev);
++
++ timeo = ir.length * 2 * HZ;
++ if (do_inquiry && (err = hci_request(hdev, hci_inq_req, (unsigned long)&ir, timeo)) < 0)
++ goto done;
++
++ /* for unlimited number of responses we will use buffer with 255 entries */
++ max_rsp = (ir.num_rsp == 0) ? 255 : ir.num_rsp;
++
++ /* cache_dump can't sleep. Therefore we allocate temp buffer and then
++ * copy it to the user space.
++ */
++ if (!(buf = kmalloc(sizeof(inquiry_info) * max_rsp, GFP_KERNEL))) {
++ err = -ENOMEM;
++ goto done;
++ }
++
++ hci_dev_lock_bh(hdev);
++ ir.num_rsp = inquiry_cache_dump(hdev, max_rsp, buf);
++ hci_dev_unlock_bh(hdev);
++
++ BT_DBG("num_rsp %d", ir.num_rsp);
++
++ if (!verify_area(VERIFY_WRITE, ptr, sizeof(ir) +
++ (sizeof(inquiry_info) * ir.num_rsp))) {
++ copy_to_user(ptr, &ir, sizeof(ir));
++ ptr += sizeof(ir);
++ copy_to_user(ptr, buf, sizeof(inquiry_info) * ir.num_rsp);
++ } else
++ err = -EFAULT;
++
++ kfree(buf);
++
++done:
++ hci_dev_put(hdev);
++ return err;
++}
++
++/* ---- HCI ioctl helpers ---- */
++
++int hci_dev_open(__u16 dev)
++{
++ struct hci_dev *hdev;
++ int ret = 0;
++
++ if (!(hdev = hci_dev_get(dev)))
++ return -ENODEV;
++
++ BT_DBG("%s %p", hdev->name, hdev);
++
++ hci_req_lock(hdev);
++
++ if (test_bit(HCI_UP, &hdev->flags)) {
++ ret = -EALREADY;
++ goto done;
++ }
++
++ if (hdev->open(hdev)) {
++ ret = -EIO;
++ goto done;
++ }
++
++ if (!test_bit(HCI_RAW, &hdev->flags)) {
++ atomic_set(&hdev->cmd_cnt, 1);
++ set_bit(HCI_INIT, &hdev->flags);
++
++ //__hci_request(hdev, hci_reset_req, 0, HZ);
++ ret = __hci_request(hdev, hci_init_req, 0, HCI_INIT_TIMEOUT);
++
++ clear_bit(HCI_INIT, &hdev->flags);
++ }
++
++ if (!ret) {
++ set_bit(HCI_UP, &hdev->flags);
++ hci_notify(hdev, HCI_DEV_UP);
++ } else {
++ /* Init failed, cleanup */
++ tasklet_kill(&hdev->rx_task);
++ tasklet_kill(&hdev->tx_task);
++ tasklet_kill(&hdev->cmd_task);
++
++ skb_queue_purge(&hdev->cmd_q);
++ skb_queue_purge(&hdev->rx_q);
++
++ if (hdev->flush)
++ hdev->flush(hdev);
++
++ if (hdev->sent_cmd) {
++ kfree_skb(hdev->sent_cmd);
++ hdev->sent_cmd = NULL;
++ }
++
++ hdev->close(hdev);
++ hdev->flags = 0;
++ }
++
++done:
++ hci_req_unlock(hdev);
++ hci_dev_put(hdev);
++ return ret;
++}
++
++static int hci_dev_do_close(struct hci_dev *hdev)
++{
++ BT_DBG("%s %p", hdev->name, hdev);
++
++ hci_req_cancel(hdev, ENODEV);
++ hci_req_lock(hdev);
++
++ if (!test_and_clear_bit(HCI_UP, &hdev->flags)) {
++ hci_req_unlock(hdev);
++ return 0;
++ }
++
++ /* Kill RX and TX tasks */
++ tasklet_kill(&hdev->rx_task);
++ tasklet_kill(&hdev->tx_task);
++
++ hci_dev_lock_bh(hdev);
++ inquiry_cache_flush(hdev);
++ hci_conn_hash_flush(hdev);
++ hci_dev_unlock_bh(hdev);
++
+ hci_notify(hdev, HCI_DEV_DOWN);
+
+ if (hdev->flush)
+@@ -586,9 +548,9 @@
+ /* Reset device */
+ skb_queue_purge(&hdev->cmd_q);
+ atomic_set(&hdev->cmd_cnt, 1);
+- hdev->flags |= HCI_INIT;
+- __hci_request(hdev, hci_reset_req, 0, HZ);
+- hdev->flags &= ~HCI_INIT;
++ set_bit(HCI_INIT, &hdev->flags);
++ __hci_request(hdev, hci_reset_req, 0, HZ/4);
++ clear_bit(HCI_INIT, &hdev->flags);
+
+ /* Kill cmd task */
+ tasklet_kill(&hdev->cmd_task);
+@@ -605,17 +567,28 @@
+ }
+
+ /* After this point our queues are empty
+- * and no tasks are scheduled.
+- */
++ * and no tasks are scheduled. */
+ hdev->close(hdev);
+
+-done:
+- hci_req_unlock(hdev);
+- hci_dev_put(hdev);
++ /* Clear flags */
++ hdev->flags = 0;
+
++ hci_req_unlock(hdev);
+ return 0;
+ }
+
++int hci_dev_close(__u16 dev)
++{
++ struct hci_dev *hdev;
++ int err;
++
++ if (!(hdev = hci_dev_get(dev)))
++ return -ENODEV;
++ err = hci_dev_do_close(hdev);
++ hci_dev_put(hdev);
++ return err;
++}
++
+ int hci_dev_reset(__u16 dev)
+ {
+ struct hci_dev *hdev;
+@@ -627,16 +600,17 @@
+ hci_req_lock(hdev);
+ tasklet_disable(&hdev->tx_task);
+
+- if (!(hdev->flags & HCI_UP))
++ if (!test_bit(HCI_UP, &hdev->flags))
+ goto done;
+
+ /* Drop queues */
+ skb_queue_purge(&hdev->rx_q);
+ skb_queue_purge(&hdev->cmd_q);
+
+- inquiry_cache_flush(&hdev->inq_cache);
+-
++ hci_dev_lock_bh(hdev);
++ inquiry_cache_flush(hdev);
+ hci_conn_hash_flush(hdev);
++ hci_dev_unlock_bh(hdev);
+
+ if (hdev->flush)
+ hdev->flush(hdev);
+@@ -650,7 +624,6 @@
+ tasklet_enable(&hdev->tx_task);
+ hci_req_unlock(hdev);
+ hci_dev_put(hdev);
+-
+ return ret;
+ }
+
+@@ -669,30 +642,11 @@
+ return ret;
+ }
+
+-int hci_dev_setauth(unsigned long arg)
+-{
+- struct hci_dev *hdev;
+- struct hci_dev_req dr;
+- int ret = 0;
+-
+- if (copy_from_user(&dr, (void *) arg, sizeof(dr)))
+- return -EFAULT;
+-
+- if (!(hdev = hci_dev_get(dr.dev_id)))
+- return -ENODEV;
+-
+- ret = hci_request(hdev, hci_auth_req, dr.dev_opt, HCI_INIT_TIMEOUT);
+-
+- hci_dev_put(hdev);
+-
+- return ret;
+-}
+-
+-int hci_dev_setscan(unsigned long arg)
++int hci_dev_cmd(unsigned int cmd, unsigned long arg)
+ {
+ struct hci_dev *hdev;
+ struct hci_dev_req dr;
+- int ret = 0;
++ int err = 0;
+
+ if (copy_from_user(&dr, (void *) arg, sizeof(dr)))
+ return -EFAULT;
+@@ -700,75 +654,105 @@
+ if (!(hdev = hci_dev_get(dr.dev_id)))
+ return -ENODEV;
+
+- ret = hci_request(hdev, hci_scan_req, dr.dev_opt, HCI_INIT_TIMEOUT);
+-
+- hci_dev_put(hdev);
++ switch (cmd) {
++ case HCISETAUTH:
++ err = hci_request(hdev, hci_auth_req, dr.dev_opt, HCI_INIT_TIMEOUT);
++ break;
+
+- return ret;
+-}
++ case HCISETENCRYPT:
++ if (!lmp_encrypt_capable(hdev)) {
++ err = -EOPNOTSUPP;
++ break;
++ }
+
+-int hci_dev_setptype(unsigned long arg)
+-{
+- struct hci_dev *hdev;
+- struct hci_dev_req dr;
+- int ret = 0;
++ if (!test_bit(HCI_AUTH, &hdev->flags)) {
++ /* Auth must be enabled first */
++ err = hci_request(hdev, hci_auth_req,
++ dr.dev_opt, HCI_INIT_TIMEOUT);
++ if (err)
++ break;
++ }
++
++ err = hci_request(hdev, hci_encrypt_req,
++ dr.dev_opt, HCI_INIT_TIMEOUT);
++ break;
++
++ case HCISETSCAN:
++ err = hci_request(hdev, hci_scan_req, dr.dev_opt, HCI_INIT_TIMEOUT);
++ break;
++
++ case HCISETPTYPE:
++ hdev->pkt_type = (__u16) dr.dev_opt;
++ break;
++
++ case HCISETLINKPOL:
++ hdev->link_policy = (__u16) dr.dev_opt;
++ break;
+
+- if (copy_from_user(&dr, (void *) arg, sizeof(dr)))
+- return -EFAULT;
++ case HCISETLINKMODE:
++ hdev->link_mode = ((__u16) dr.dev_opt) & (HCI_LM_MASTER | HCI_LM_ACCEPT);
++ break;
+
+- if (!(hdev = hci_dev_get(dr.dev_id)))
+- return -ENODEV;
++ case HCISETACLMTU:
++ hdev->acl_mtu = *((__u16 *)&dr.dev_opt + 1);
++ hdev->acl_pkts = *((__u16 *)&dr.dev_opt + 0);
++ break;
+
+- hdev->pkt_type = (__u16) dr.dev_opt;
++ case HCISETSCOMTU:
++ hdev->sco_mtu = *((__u16 *)&dr.dev_opt + 1);
++ hdev->sco_pkts = *((__u16 *)&dr.dev_opt + 0);
++ break;
+
++ default:
++ err = -EINVAL;
++ break;
++ }
+ hci_dev_put(hdev);
+-
+- return ret;
++ return err;
+ }
+
+-int hci_dev_list(unsigned long arg)
++int hci_get_dev_list(unsigned long arg)
+ {
+ struct hci_dev_list_req *dl;
+ struct hci_dev_req *dr;
+- struct hci_dev *hdev;
+- int i, n, size;
++ struct list_head *p;
++ int n = 0, size, err;
+ __u16 dev_num;
+
+ if (get_user(dev_num, (__u16 *) arg))
+ return -EFAULT;
+
+- /* Avoid long loop, overflow */
+- if (dev_num > 2048)
++ if (!dev_num || dev_num > (PAGE_SIZE * 2) / sizeof(*dr))
+ return -EINVAL;
+-
+- size = dev_num * sizeof(struct hci_dev_req) + sizeof(__u16);
+
+- if (verify_area(VERIFY_WRITE, (void *) arg, size))
+- return -EFAULT;
++ size = sizeof(*dl) + dev_num * sizeof(*dr);
+
+ if (!(dl = kmalloc(size, GFP_KERNEL)))
+ return -ENOMEM;
++
+ dr = dl->dev_req;
+
+- spin_lock_bh(&hdev_list_lock);
+- for (i = 0, n = 0; i < HCI_MAX_DEV && n < dev_num; i++) {
+- if ((hdev = hdev_list[i])) {
+- (dr + n)->dev_id = hdev->id;
+- (dr + n)->dev_opt = hdev->flags;
+- n++;
+- }
++ read_lock_bh(&hdev_list_lock);
++ list_for_each(p, &hdev_list) {
++ struct hci_dev *hdev;
++ hdev = list_entry(p, struct hci_dev, list);
++ (dr + n)->dev_id = hdev->id;
++ (dr + n)->dev_opt = hdev->flags;
++ if (++n >= dev_num)
++ break;
+ }
+- spin_unlock_bh(&hdev_list_lock);
++ read_unlock_bh(&hdev_list_lock);
+
+ dl->dev_num = n;
+- size = n * sizeof(struct hci_dev_req) + sizeof(__u16);
++ size = sizeof(*dl) + n * sizeof(*dr);
+
+- copy_to_user((void *) arg, dl, size);
++ err = copy_to_user((void *) arg, dl, size);
++ kfree(dl);
+
+- return 0;
++ return err ? -EFAULT : 0;
+ }
+
+-int hci_dev_info(unsigned long arg)
++int hci_get_dev_info(unsigned long arg)
+ {
+ struct hci_dev *hdev;
+ struct hci_dev_info di;
+@@ -786,9 +770,11 @@
+ di.flags = hdev->flags;
+ di.pkt_type = hdev->pkt_type;
+ di.acl_mtu = hdev->acl_mtu;
+- di.acl_max = hdev->acl_max;
++ di.acl_pkts = hdev->acl_pkts;
+ di.sco_mtu = hdev->sco_mtu;
+- di.sco_max = hdev->sco_max;
++ di.sco_pkts = hdev->sco_pkts;
++ di.link_policy = hdev->link_policy;
++ di.link_mode = hdev->link_mode;
+
+ memcpy(&di.stat, &hdev->stat, sizeof(di.stat));
+ memcpy(&di.features, &hdev->features, sizeof(di.features));
+@@ -801,258 +787,168 @@
+ return err;
+ }
+
+-__u32 hci_dev_setmode(struct hci_dev *hdev, __u32 mode)
+-{
+- __u32 omode = hdev->flags & HCI_MODE_MASK;
+-
+- hdev->flags &= ~HCI_MODE_MASK;
+- hdev->flags |= (mode & HCI_MODE_MASK);
+
+- return omode;
+-}
++/* ---- Interface to HCI drivers ---- */
+
+-__u32 hci_dev_getmode(struct hci_dev *hdev)
++/* Register HCI device */
++int hci_register_dev(struct hci_dev *hdev)
+ {
+- return hdev->flags & HCI_MODE_MASK;
+-}
++ struct list_head *head = &hdev_list, *p;
++ int id = 0;
+
+-int hci_conn_list(unsigned long arg)
+-{
+- struct hci_conn_list_req req, *cl;
+- struct hci_conn_info *ci;
+- struct hci_dev *hdev;
+- struct list_head *p;
+- int n = 0, size;
++ BT_DBG("%p name %s type %d", hdev, hdev->name, hdev->type);
+
+- if (copy_from_user(&req, (void *) arg, sizeof(req)))
+- return -EFAULT;
++ if (!hdev->open || !hdev->close || !hdev->destruct)
++ return -EINVAL;
+
+- if (!(hdev = hci_dev_get(req.dev_id)))
+- return -ENODEV;
++ write_lock_bh(&hdev_list_lock);
+
+- /* Set a limit to avoid overlong loops, and also numeric overflow - AC */
+- if(req.conn_num < 2048)
+- return -EINVAL;
++ /* Find first available device id */
++ list_for_each(p, &hdev_list) {
++ if (list_entry(p, struct hci_dev, list)->id != id)
++ break;
++ head = p; id++;
++ }
+
+- size = req.conn_num * sizeof(struct hci_conn_info) + sizeof(req);
++ sprintf(hdev->name, "hci%d", id);
++ hdev->id = id;
++ list_add(&hdev->list, head);
+
+- if (!(cl = kmalloc(size, GFP_KERNEL)))
+- return -ENOMEM;
+- ci = cl->conn_info;
+-
+- local_bh_disable();
+- conn_hash_lock(&hdev->conn_hash);
+- list_for_each(p, &hdev->conn_hash.list) {
+- register struct hci_conn *c;
+- c = list_entry(p, struct hci_conn, list);
++ atomic_set(&hdev->refcnt, 1);
++ spin_lock_init(&hdev->lock);
++
++ hdev->flags = 0;
++ hdev->pkt_type = (HCI_DM1 | HCI_DH1 | HCI_HV1);
++ hdev->link_mode = (HCI_LM_ACCEPT);
+
+- (ci + n)->handle = c->handle;
+- bacpy(&(ci + n)->bdaddr, &c->dst);
+- n++;
+- }
+- conn_hash_unlock(&hdev->conn_hash);
+- local_bh_enable();
+-
+- cl->dev_id = hdev->id;
+- cl->conn_num = n;
+- size = n * sizeof(struct hci_conn_info) + sizeof(req);
++ tasklet_init(&hdev->cmd_task, hci_cmd_task,(unsigned long) hdev);
++ tasklet_init(&hdev->rx_task, hci_rx_task, (unsigned long) hdev);
++ tasklet_init(&hdev->tx_task, hci_tx_task, (unsigned long) hdev);
+
+- hci_dev_put(hdev);
++ skb_queue_head_init(&hdev->rx_q);
++ skb_queue_head_init(&hdev->cmd_q);
++ skb_queue_head_init(&hdev->raw_q);
+
+- if(copy_to_user((void *) arg, cl, size))
+- return -EFAULT;
+- return 0;
+-}
++ init_waitqueue_head(&hdev->req_wait_q);
++ init_MUTEX(&hdev->req_lock);
+
+-int hci_inquiry(unsigned long arg)
+-{
+- struct inquiry_cache *cache;
+- struct hci_inquiry_req ir;
+- struct hci_dev *hdev;
+- int err = 0, do_inquiry = 0;
+- long timeo;
+- __u8 *buf, *ptr;
++ inquiry_cache_init(hdev);
+
+- ptr = (void *) arg;
+- if (copy_from_user(&ir, ptr, sizeof(ir)))
+- return -EFAULT;
++ conn_hash_init(hdev);
+
+- if (!(hdev = hci_dev_get(ir.dev_id)))
+- return -ENODEV;
++ memset(&hdev->stat, 0, sizeof(struct hci_dev_stats));
+
+- cache = &hdev->inq_cache;
++ atomic_set(&hdev->promisc, 0);
+
+- inquiry_cache_lock(cache);
+- if (inquiry_cache_age(cache) > INQUIRY_CACHE_AGE_MAX || ir.flags & IREQ_CACHE_FLUSH) {
+- inquiry_cache_flush(cache);
+- do_inquiry = 1;
+- }
+- inquiry_cache_unlock(cache);
++ MOD_INC_USE_COUNT;
+
+- /* Limit inquiry time, also avoid overflows */
++ write_unlock_bh(&hdev_list_lock);
+
+- if(ir.length > 2048 || ir.num_rsp > 2048)
+- {
+- err = -EINVAL;
+- goto done;
+- }
++ hci_notify(hdev, HCI_DEV_REG);
++ hci_run_hotplug(hdev->name, "register");
+
+- timeo = ir.length * 2 * HZ;
+- if (do_inquiry && (err = hci_request(hdev, hci_inq_req, (unsigned long)&ir, timeo)) < 0)
+- goto done;
++ return id;
++}
+
+- /* cache_dump can't sleep. Therefore we allocate temp buffer and then
+- * copy it to the user space.
+- */
+- if (!(buf = kmalloc(sizeof(inquiry_info) * ir.num_rsp, GFP_KERNEL))) {
+- err = -ENOMEM;
+- goto done;
+- }
+- ir.num_rsp = inquiry_cache_dump(cache, ir.num_rsp, buf);
++/* Unregister HCI device */
++int hci_unregister_dev(struct hci_dev *hdev)
++{
++ BT_DBG("%p name %s type %d", hdev, hdev->name, hdev->type);
+
+- DBG("num_rsp %d", ir.num_rsp);
++ write_lock_bh(&hdev_list_lock);
++ list_del(&hdev->list);
++ write_unlock_bh(&hdev_list_lock);
+
+- if (!verify_area(VERIFY_WRITE, ptr, sizeof(ir) + (sizeof(inquiry_info) * ir.num_rsp))) {
+- copy_to_user(ptr, &ir, sizeof(ir));
+- ptr += sizeof(ir);
+- copy_to_user(ptr, buf, sizeof(inquiry_info) * ir.num_rsp);
+- } else
+- err = -EFAULT;
++ hci_dev_do_close(hdev);
+
+- kfree(buf);
++ hci_notify(hdev, HCI_DEV_UNREG);
++ hci_run_hotplug(hdev->name, "unregister");
+
+-done:
+ hci_dev_put(hdev);
+
+- return err;
++ MOD_DEC_USE_COUNT;
++ return 0;
+ }
+
+-/* Interface to HCI drivers */
+-
+-/* Register HCI device */
+-int hci_register_dev(struct hci_dev *hdev)
++/* Suspend HCI device */
++int hci_suspend_dev(struct hci_dev *hdev)
+ {
+- int i;
++ hci_notify(hdev, HCI_DEV_SUSPEND);
++ hci_run_hotplug(hdev->name, "suspend");
++ return 0;
++}
+
+- DBG("%p name %s type %d", hdev, hdev->name, hdev->type);
++/* Resume HCI device */
++int hci_resume_dev(struct hci_dev *hdev)
++{
++ hci_notify(hdev, HCI_DEV_RESUME);
++ hci_run_hotplug(hdev->name, "resume");
++ return 0;
++}
+
+- /* Find free slot */
+- spin_lock_bh(&hdev_list_lock);
+- for (i = 0; i < HCI_MAX_DEV; i++) {
+- if (!hdev_list[i]) {
+- hdev_list[i] = hdev;
+-
+- sprintf(hdev->name, "hci%d", i);
+- atomic_set(&hdev->refcnt, 0);
+- hdev->id = i;
+- hdev->flags = HCI_NORMAL;
+-
+- hdev->pkt_type = (HCI_DM1 | HCI_DH1);
+-
+- tasklet_init(&hdev->cmd_task, hci_cmd_task, (unsigned long) hdev);
+- tasklet_init(&hdev->rx_task, hci_rx_task, (unsigned long) hdev);
+- tasklet_init(&hdev->tx_task, hci_tx_task, (unsigned long) hdev);
+-
+- skb_queue_head_init(&hdev->rx_q);
+- skb_queue_head_init(&hdev->cmd_q);
+- skb_queue_head_init(&hdev->raw_q);
+-
+- init_waitqueue_head(&hdev->req_wait_q);
+- init_MUTEX(&hdev->req_lock);
+-
+- inquiry_cache_init(&hdev->inq_cache);
+-
+- conn_hash_init(&hdev->conn_hash);
+-
+- memset(&hdev->stat, 0, sizeof(struct hci_dev_stats));
+-
+- hci_notify(hdev, HCI_DEV_REG);
+-
+- MOD_INC_USE_COUNT;
+- break;
+- }
+- }
+- spin_unlock_bh(&hdev_list_lock);
+-
+- return (i == HCI_MAX_DEV) ? -1 : i;
+-}
+-
+-/* Unregister HCI device */
+-int hci_unregister_dev(struct hci_dev *hdev)
++/* Receive frame from HCI drivers */
++int hci_recv_frame(struct sk_buff *skb)
+ {
+- int i;
+-
+- DBG("%p name %s type %d", hdev, hdev->name, hdev->type);
+-
+- if (hdev->flags & HCI_UP)
+- hci_dev_close(hdev->id);
++ struct hci_dev *hdev = (struct hci_dev *) skb->dev;
+
+- /* Find device slot */
+- spin_lock(&hdev_list_lock);
+- for (i = 0; i < HCI_MAX_DEV; i++) {
+- if (hdev_list[i] == hdev) {
+- hdev_list[i] = NULL;
+- MOD_DEC_USE_COUNT;
+- break;
+- }
++ if (!hdev || (!test_bit(HCI_UP, &hdev->flags) &&
++ !test_bit(HCI_INIT, &hdev->flags)) ) {
++ kfree_skb(skb);
++ return -1;
+ }
+- spin_unlock(&hdev_list_lock);
+
+- hci_notify(hdev, HCI_DEV_UNREG);
+-
+- /* Sleep while device is in use */
+- while (atomic_read(&hdev->refcnt)) {
+- int sleep_cnt = 100;
++ BT_DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
+
+- DBG("%s sleeping on lock %d", hdev->name, atomic_read(&hdev->refcnt));
++ /* Incomming skb */
++ bluez_cb(skb)->incomming = 1;
+
+- sleep_on_timeout(&hdev->req_wait_q, HZ*10);
+- if (!(--sleep_cnt))
+- break;
+- }
++ /* Time stamp */
++ do_gettimeofday(&skb->stamp);
+
++ /* Queue frame for rx task */
++ skb_queue_tail(&hdev->rx_q, skb);
++ hci_sched_rx(hdev);
+ return 0;
+ }
+
+-/* Interface to upper protocols */
++/* ---- Interface to upper protocols ---- */
+
+ /* Register/Unregister protocols.
+- * hci_task_lock is used to ensure that no tasks are running.
+- */
+-int hci_register_proto(struct hci_proto *hproto)
++ * hci_task_lock is used to ensure that no tasks are running. */
++int hci_register_proto(struct hci_proto *hp)
+ {
+ int err = 0;
+
+- DBG("%p name %s", hproto, hproto->name);
++ BT_DBG("%p name %s id %d", hp, hp->name, hp->id);
+
+- if (hproto->id >= HCI_MAX_PROTO)
++ if (hp->id >= HCI_MAX_PROTO)
+ return -EINVAL;
+
+ write_lock_bh(&hci_task_lock);
+
+- if (!hproto_list[hproto->id])
+- hproto_list[hproto->id] = hproto;
++ if (!hci_proto[hp->id])
++ hci_proto[hp->id] = hp;
+ else
+- err = -1;
++ err = -EEXIST;
+
+ write_unlock_bh(&hci_task_lock);
+
+ return err;
+ }
+
+-int hci_unregister_proto(struct hci_proto *hproto)
++int hci_unregister_proto(struct hci_proto *hp)
+ {
+ int err = 0;
+
+- DBG("%p name %s", hproto, hproto->name);
++ BT_DBG("%p name %s id %d", hp, hp->name, hp->id);
+
+- if (hproto->id > HCI_MAX_PROTO)
++ if (hp->id >= HCI_MAX_PROTO)
+ return -EINVAL;
+
+ write_lock_bh(&hci_task_lock);
+
+- if (hproto_list[hproto->id])
+- hproto_list[hproto->id] = NULL;
++ if (hci_proto[hp->id])
++ hci_proto[hp->id] = NULL;
+ else
+ err = -ENOENT;
+
+@@ -1070,10 +966,14 @@
+ return -ENODEV;
+ }
+
+- DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
++ BT_DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
++
++ if (atomic_read(&hdev->promisc)) {
++ /* Time stamp */
++ do_gettimeofday(&skb->stamp);
+
+- if (hdev->flags & HCI_SOCK)
+ hci_send_to_sock(hdev, skb);
++ }
+
+ /* Get rid of skb owner, prior to sending to the driver. */
+ skb_orphan(skb);
+@@ -1081,128 +981,6 @@
+ return hdev->send(skb);
+ }
+
+-/* Connection scheduler */
+-static inline struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type, int *quote)
+-{
+- struct conn_hash *h = &hdev->conn_hash;
+- struct hci_conn *conn = NULL;
+- int num = 0, min = 0xffff;
+- struct list_head *p;
+-
+- conn_hash_lock(h);
+- list_for_each(p, &h->list) {
+- register struct hci_conn *c;
+-
+- c = list_entry(p, struct hci_conn, list);
+-
+- if (c->type != type || skb_queue_empty(&c->data_q))
+- continue;
+- num++;
+-
+- if (c->sent < min) {
+- min = c->sent;
+- conn = c;
+- }
+- }
+- conn_hash_unlock(h);
+-
+- if (conn) {
+- int q = hdev->acl_cnt / num;
+- *quote = q ? q : 1;
+- } else
+- *quote = 0;
+-
+- DBG("conn %p quote %d", conn, *quote);
+-
+- return conn;
+-}
+-
+-static inline void hci_sched_acl(struct hci_dev *hdev)
+-{
+- struct hci_conn *conn;
+- struct sk_buff *skb;
+- int quote;
+-
+- DBG("%s", hdev->name);
+-
+- while (hdev->acl_cnt && (conn = hci_low_sent(hdev, ACL_LINK, &quote))) {
+- while (quote && (skb = skb_dequeue(&conn->data_q))) {
+- DBG("skb %p len %d", skb, skb->len);
+-
+- hci_send_frame(skb);
+-
+- conn->sent++;
+- hdev->acl_cnt--;
+- quote--;
+- }
+- }
+-}
+-
+-/* Schedule SCO */
+-static inline void hci_sched_sco(struct hci_dev *hdev)
+-{
+- /* FIXME: For now we queue SCO packets to the raw queue
+-
+- while (hdev->sco_cnt && (skb = skb_dequeue(&conn->data_q))) {
+- hci_send_frame(skb);
+- conn->sco_sent++;
+- hdev->sco_cnt--;
+- }
+- */
+-}
+-
+-/* Get data from the previously sent command */
+-static void * hci_sent_cmd_data(struct hci_dev *hdev, __u16 ogf, __u16 ocf)
+-{
+- hci_command_hdr *hc;
+-
+- if (!hdev->sent_cmd)
+- return NULL;
+-
+- hc = (void *) hdev->sent_cmd->data;
+-
+- if (hc->opcode != __cpu_to_le16(cmd_opcode_pack(ogf, ocf)))
+- return NULL;
+-
+- DBG("%s ogf 0x%x ocf 0x%x", hdev->name, ogf, ocf);
+-
+- return hdev->sent_cmd->data + HCI_COMMAND_HDR_SIZE;
+-}
+-
+-/* Send raw HCI frame */
+-int hci_send_raw(struct sk_buff *skb)
+-{
+- struct hci_dev *hdev = (struct hci_dev *) skb->dev;
+-
+- if (!hdev) {
+- kfree_skb(skb);
+- return -ENODEV;
+- }
+-
+- DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
+-
+- if (hdev->flags & HCI_NORMAL) {
+- /* Queue frame according it's type */
+- switch (skb->pkt_type) {
+- case HCI_COMMAND_PKT:
+- skb_queue_tail(&hdev->cmd_q, skb);
+- hci_sched_cmd(hdev);
+- return 0;
+-
+- case HCI_ACLDATA_PKT:
+- case HCI_SCODATA_PKT:
+- /* FIXME:
+- * Check header here and queue to apropriate connection.
+- */
+- break;
+- }
+- }
+-
+- skb_queue_tail(&hdev->raw_q, skb);
+- hci_sched_tx(hdev);
+- return 0;
+-}
+-
+ /* Send HCI command */
+ int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void *param)
+ {
+@@ -1210,10 +988,10 @@
+ hci_command_hdr *hc;
+ struct sk_buff *skb;
+
+- DBG("%s ogf 0x%x ocf 0x%x plen %d", hdev->name, ogf, ocf, plen);
++ BT_DBG("%s ogf 0x%x ocf 0x%x plen %d", hdev->name, ogf, ocf, plen);
+
+ if (!(skb = bluez_skb_alloc(len, GFP_ATOMIC))) {
+- ERR("%s Can't allocate memory for HCI command", hdev->name);
++ BT_ERR("%s Can't allocate memory for HCI command", hdev->name);
+ return -ENOMEM;
+ }
+
+@@ -1224,7 +1002,7 @@
+ if (plen)
+ memcpy(skb_put(skb, plen), param, plen);
+
+- DBG("skb len %d", skb->len);
++ BT_DBG("skb len %d", skb->len);
+
+ skb->pkt_type = HCI_COMMAND_PKT;
+ skb->dev = (void *) hdev;
+@@ -1234,10 +1012,28 @@
+ return 0;
+ }
+
++/* Get data from the previously sent command */
++void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 ogf, __u16 ocf)
++{
++ hci_command_hdr *hc;
++
++ if (!hdev->sent_cmd)
++ return NULL;
++
++ hc = (void *) hdev->sent_cmd->data;
++
++ if (hc->opcode != __cpu_to_le16(cmd_opcode_pack(ogf, ocf)))
++ return NULL;
++
++ BT_DBG("%s ogf 0x%x ocf 0x%x", hdev->name, ogf, ocf);
++
++ return hdev->sent_cmd->data + HCI_COMMAND_HDR_SIZE;
++}
++
+ /* Send ACL data */
+ static void hci_add_acl_hdr(struct sk_buff *skb, __u16 handle, __u16 flags)
+ {
+- int len = skb->len;
++ int len = skb->len;
+ hci_acl_hdr *ah;
+
+ ah = (hci_acl_hdr *) skb_push(skb, HCI_ACL_HDR_SIZE);
+@@ -1252,7 +1048,7 @@
+ struct hci_dev *hdev = conn->hdev;
+ struct sk_buff *list;
+
+- DBG("%s conn %p flags 0x%x", hdev->name, conn, flags);
++ BT_DBG("%s conn %p flags 0x%x", hdev->name, conn, flags);
+
+ skb->dev = (void *) hdev;
+ skb->pkt_type = HCI_ACLDATA_PKT;
+@@ -1260,12 +1056,12 @@
+
+ if (!(list = skb_shinfo(skb)->frag_list)) {
+ /* Non fragmented */
+- DBG("%s nonfrag skb %p len %d", hdev->name, skb, skb->len);
++ BT_DBG("%s nonfrag skb %p len %d", hdev->name, skb, skb->len);
+
+ skb_queue_tail(&conn->data_q, skb);
+ } else {
+ /* Fragmented */
+- DBG("%s frag %p len %d", hdev->name, skb, skb->len);
++ BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
+
+ skb_shinfo(skb)->frag_list = NULL;
+
+@@ -1280,7 +1076,7 @@
+ skb->pkt_type = HCI_ACLDATA_PKT;
+ hci_add_acl_hdr(skb, conn->handle, flags | ACL_CONT);
+
+- DBG("%s frag %p len %d", hdev->name, skb, skb->len);
++ BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
+
+ __skb_queue_tail(&conn->data_q, skb);
+ } while (list);
+@@ -1298,7 +1094,7 @@
+ struct hci_dev *hdev = conn->hdev;
+ hci_sco_hdr hs;
+
+- DBG("%s len %d", hdev->name, skb->len);
++ BT_DBG("%s len %d", hdev->name, skb->len);
+
+ if (skb->len > hdev->sco_mtu) {
+ kfree_skb(skb);
+@@ -1315,544 +1111,136 @@
+ skb->pkt_type = HCI_SCODATA_PKT;
+ skb_queue_tail(&conn->data_q, skb);
+ hci_sched_tx(hdev);
+-
+ return 0;
+ }
+
+-/* Handle HCI Event packets */
+-
+-/* Command Complete OGF LINK_CTL */
+-static void hci_cc_link_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
+-{
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- default:
+- DBG("%s Command complete: ogf LINK_CTL ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Command Complete OGF LINK_POLICY */
+-static void hci_cc_link_policy(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
+-{
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- default:
+- DBG("%s: Command complete: ogf LINK_POLICY ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Command Complete OGF HOST_CTL */
+-static void hci_cc_host_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
+-{
+- __u8 status, param;
+- void *sent;
+-
+-
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- case OCF_RESET:
+- status = *((__u8 *) skb->data);
+-
+- hci_req_complete(hdev, status);
+- break;
+-
+- case OCF_SET_EVENT_FLT:
+- status = *((__u8 *) skb->data);
+-
+- if (status) {
+- DBG("%s SET_EVENT_FLT failed %d", hdev->name, status);
+- } else {
+- DBG("%s SET_EVENT_FLT succeseful", hdev->name);
+- }
+- break;
+-
+- case OCF_WRITE_AUTH_ENABLE:
+- if (!(sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_AUTH_ENABLE)))
+- break;
+-
+- status = *((__u8 *) skb->data);
+- param = *((__u8 *) sent);
+-
+- if (!status) {
+- if (param == AUTH_ENABLED)
+- hdev->flags |= HCI_AUTH;
+- else
+- hdev->flags &= ~HCI_AUTH;
+- }
+- hci_req_complete(hdev, status);
+- break;
+-
+- case OCF_WRITE_CA_TIMEOUT:
+- status = *((__u8 *) skb->data);
+-
+- if (status) {
+- DBG("%s OCF_WRITE_CA_TIMEOUT failed %d", hdev->name, status);
+- } else {
+- DBG("%s OCF_WRITE_CA_TIMEOUT succeseful", hdev->name);
+- }
+- break;
+-
+- case OCF_WRITE_PG_TIMEOUT:
+- status = *((__u8 *) skb->data);
+-
+- if (status) {
+- DBG("%s OCF_WRITE_PG_TIMEOUT failed %d", hdev->name, status);
+- } else {
+- DBG("%s: OCF_WRITE_PG_TIMEOUT succeseful", hdev->name);
+- }
+- break;
+-
+- case OCF_WRITE_SCAN_ENABLE:
+- if (!(sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE)))
+- break;
+- status = *((__u8 *) skb->data);
+- param = *((__u8 *) sent);
+-
+- DBG("param 0x%x", param);
+-
+- if (!status) {
+- switch (param) {
+- case IS_ENA_PS_ENA:
+- hdev->flags |= HCI_PSCAN | HCI_ISCAN;
+- break;
+-
+- case IS_ENA_PS_DIS:
+- hdev->flags &= ~HCI_PSCAN;
+- hdev->flags |= HCI_ISCAN;
+- break;
++/* ---- HCI TX task (outgoing data) ---- */
+
+- case IS_DIS_PS_ENA:
+- hdev->flags &= ~HCI_ISCAN;
+- hdev->flags |= HCI_PSCAN;
+- break;
+-
+- default:
+- hdev->flags &= ~(HCI_ISCAN | HCI_PSCAN);
+- break;
+- };
+- }
+- hci_req_complete(hdev, status);
+- break;
+-
+- default:
+- DBG("%s Command complete: ogf HOST_CTL ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Command Complete OGF INFO_PARAM */
+-static void hci_cc_info_param(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
++/* HCI Connection scheduler */
++static inline struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type, int *quote)
+ {
+- read_local_features_rp *lf;
+- read_buffer_size_rp *bs;
+- read_bd_addr_rp *ba;
+-
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- case OCF_READ_LOCAL_FEATURES:
+- lf = (read_local_features_rp *) skb->data;
+-
+- if (lf->status) {
+- DBG("%s READ_LOCAL_FEATURES failed %d", hdev->name, lf->status);
+- break;
+- }
+-
+- memcpy(hdev->features, lf->features, sizeof(hdev->features));
+-
+- /* Adjust default settings according to features
+- * supported by device. */
+- if (hdev->features[0] & LMP_3SLOT)
+- hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
+-
+- if (hdev->features[0] & LMP_5SLOT)
+- hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
+-
+- DBG("%s: features 0x%x 0x%x 0x%x", hdev->name, lf->features[0], lf->features[1], lf->features[2]);
+-
+- break;
+-
+- case OCF_READ_BUFFER_SIZE:
+- bs = (read_buffer_size_rp *) skb->data;
+-
+- if (bs->status) {
+- DBG("%s READ_BUFFER_SIZE failed %d", hdev->name, bs->status);
+- break;
+- }
+-
+- hdev->acl_mtu = __le16_to_cpu(bs->acl_mtu);
+- hdev->sco_mtu = bs->sco_mtu;
+- hdev->acl_max = hdev->acl_cnt = __le16_to_cpu(bs->acl_max_pkt);
+- hdev->sco_max = hdev->sco_cnt = __le16_to_cpu(bs->sco_max_pkt);
+-
+- DBG("%s mtu: acl %d, sco %d max_pkt: acl %d, sco %d", hdev->name,
+- hdev->acl_mtu, hdev->sco_mtu, hdev->acl_max, hdev->sco_max);
++ struct conn_hash *h = &hdev->conn_hash;
++ struct hci_conn *conn = NULL;
++ int num = 0, min = ~0;
++ struct list_head *p;
+
+- break;
++ /* We don't have to lock device here. Connections are always
++ * added and removed with TX task disabled. */
++ list_for_each(p, &h->list) {
++ struct hci_conn *c;
++ c = list_entry(p, struct hci_conn, list);
+
+- case OCF_READ_BD_ADDR:
+- ba = (read_bd_addr_rp *) skb->data;
++ if (c->type != type || c->state != BT_CONNECTED
++ || skb_queue_empty(&c->data_q))
++ continue;
++ num++;
+
+- if (!ba->status) {
+- bacpy(&hdev->bdaddr, &ba->bdaddr);
+- } else {
+- DBG("%s: READ_BD_ADDR failed %d", hdev->name, ba->status);
++ if (c->sent < min) {
++ min = c->sent;
++ conn = c;
+ }
++ }
+
+- hci_req_complete(hdev, ba->status);
+- break;
++ if (conn) {
++ int cnt = (type == ACL_LINK ? hdev->acl_cnt : hdev->sco_cnt);
++ int q = cnt / num;
++ *quote = q ? q : 1;
++ } else
++ *quote = 0;
+
+- default:
+- DBG("%s Command complete: ogf INFO_PARAM ocf %x", hdev->name, ocf);
+- break;
+- };
++ BT_DBG("conn %p quote %d", conn, *quote);
++ return conn;
+ }
+
+-/* Command Status OGF LINK_CTL */
+-static void hci_cs_link_ctl(struct hci_dev *hdev, __u16 ocf, __u8 status)
++static inline void hci_acl_tx_to(struct hci_dev *hdev)
+ {
+- struct hci_proto * hp;
+-
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- case OCF_CREATE_CONN:
+- if (status) {
+- create_conn_cp *cc = hci_sent_cmd_data(hdev, OGF_LINK_CTL, OCF_CREATE_CONN);
+-
+- if (!cc)
+- break;
+-
+- DBG("%s Create connection error: status 0x%x %s", hdev->name,
+- status, batostr(&cc->bdaddr));
++ struct conn_hash *h = &hdev->conn_hash;
++ struct list_head *p;
++ struct hci_conn *c;
+
+- /* Notify upper protocols */
+- if ((hp = GET_HPROTO(HCI_PROTO_L2CAP)) && hp->connect_cfm) {
+- tasklet_disable(&hdev->tx_task);
+- hp->connect_cfm(hdev, &cc->bdaddr, status, NULL);
+- tasklet_enable(&hdev->tx_task);
+- }
+- }
+- break;
++ BT_ERR("%s ACL tx timeout", hdev->name);
+
+- case OCF_INQUIRY:
+- if (status) {
+- DBG("%s Inquiry error: status 0x%x", hdev->name, status);
+- hci_req_complete(hdev, status);
++ /* Kill stalled connections */
++ list_for_each(p, &h->list) {
++ c = list_entry(p, struct hci_conn, list);
++ if (c->type == ACL_LINK && c->sent) {
++ BT_ERR("%s killing stalled ACL connection %s",
++ hdev->name, batostr(&c->dst));
++ hci_acl_disconn(c, 0x13);
+ }
+- break;
+-
+- default:
+- DBG("%s Command status: ogf LINK_CTL ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Command Status OGF LINK_POLICY */
+-static void hci_cs_link_policy(struct hci_dev *hdev, __u16 ocf, __u8 status)
+-{
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- default:
+- DBG("%s Command status: ogf HOST_POLICY ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Command Status OGF HOST_CTL */
+-static void hci_cs_host_ctl(struct hci_dev *hdev, __u16 ocf, __u8 status)
+-{
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- default:
+- DBG("%s Command status: ogf HOST_CTL ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Command Status OGF INFO_PARAM */
+-static void hci_cs_info_param(struct hci_dev *hdev, __u16 ocf, __u8 status)
+-{
+- DBG("%s: hci_cs_info_param: ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- default:
+- DBG("%s Command status: ogf INFO_PARAM ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Inquiry Complete */
+-static void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
+-{
+- __u8 status = *((__u8 *) skb->data);
+-
+- DBG("%s status %d", hdev->name, status);
+-
+- hci_req_complete(hdev, status);
++ }
+ }
+
+-/* Inquiry Result */
+-static void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
++static inline void hci_sched_acl(struct hci_dev *hdev)
+ {
+- inquiry_info *info = (inquiry_info *) (skb->data + 1);
+- int num_rsp = *((__u8 *) skb->data);
+-
+- DBG("%s num_rsp %d", hdev->name, num_rsp);
++ struct hci_conn *conn;
++ struct sk_buff *skb;
++ int quote;
+
+- for (; num_rsp; num_rsp--)
+- inquiry_cache_update(&hdev->inq_cache, info++);
+-}
++ BT_DBG("%s", hdev->name);
+
+-/* Connect Request */
+-static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
+-{
+- evt_conn_request *cr = (evt_conn_request *) skb->data;
+- struct hci_proto *hp;
+- accept_conn_req_cp ac;
+- int accept = 0;
++ /* ACL tx timeout must be longer than maximum
++ * link supervision timeout (40.9 seconds) */
++ if (!hdev->acl_cnt && (jiffies - hdev->acl_last_tx) > (HZ * 45))
++ hci_acl_tx_to(hdev);
+
+- DBG("%s Connection request: %s type 0x%x", hdev->name, batostr(&cr->bdaddr), cr->link_type);
++ while (hdev->acl_cnt && (conn = hci_low_sent(hdev, ACL_LINK, &quote))) {
++ while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
++ BT_DBG("skb %p len %d", skb, skb->len);
++ hci_send_frame(skb);
++ hdev->acl_last_tx = jiffies;
+
+- /* Notify upper protocols */
+- if (cr->link_type == ACL_LINK) {
+- /* ACL link notify L2CAP */
+- if ((hp = GET_HPROTO(HCI_PROTO_L2CAP)) && hp->connect_ind) {
+- tasklet_disable(&hdev->tx_task);
+- accept = hp->connect_ind(hdev, &cr->bdaddr);
+- tasklet_enable(&hdev->tx_task);
++ hdev->acl_cnt--;
++ conn->sent++;
+ }
+- } else {
+- /* SCO link (no notification) */
+- /* FIXME: Should be accept it here or let the requester (app) accept it ? */
+- accept = 1;
+- }
+-
+- if (accept) {
+- /* Connection accepted by upper layer */
+- bacpy(&ac.bdaddr, &cr->bdaddr);
+- ac.role = 0x01; /* Remain slave */
+- hci_send_cmd(hdev, OGF_LINK_CTL, OCF_ACCEPT_CONN_REQ, ACCEPT_CONN_REQ_CP_SIZE, &ac);
+- } else {
+- /* Connection rejected by upper layer */
+- /* FIXME:
+- * Should we use HCI reject here ?
+- */
+- return;
+ }
+ }
+
+-/* Connect Complete */
+-static void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
++/* Schedule SCO */
++static inline void hci_sched_sco(struct hci_dev *hdev)
+ {
+- evt_conn_complete *cc = (evt_conn_complete *) skb->data;
+- struct hci_conn *conn = NULL;
+- struct hci_proto *hp;
+-
+- DBG("%s", hdev->name);
+-
+- tasklet_disable(&hdev->tx_task);
+-
+- if (!cc->status)
+- conn = hci_conn_add(hdev, __le16_to_cpu(cc->handle), cc->link_type, &cc->bdaddr);
++ struct hci_conn *conn;
++ struct sk_buff *skb;
++ int quote;
+
+- /* Notify upper protocols */
+- if (cc->link_type == ACL_LINK) {
+- /* ACL link notify L2CAP layer */
+- if ((hp = GET_HPROTO(HCI_PROTO_L2CAP)) && hp->connect_cfm)
+- hp->connect_cfm(hdev, &cc->bdaddr, cc->status, conn);
+- } else {
+- /* SCO link (no notification) */
+- }
++ BT_DBG("%s", hdev->name);
+
+- tasklet_enable(&hdev->tx_task);
+-}
++ while (hdev->sco_cnt && (conn = hci_low_sent(hdev, SCO_LINK, &quote))) {
++ while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
++ BT_DBG("skb %p len %d", skb, skb->len);
++ hci_send_frame(skb);
+
+-/* Disconnect Complete */
+-static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
+-{
+- evt_disconn_complete *dc = (evt_disconn_complete *) skb->data;
+- struct hci_conn *conn = NULL;
+- struct hci_proto *hp;
+- __u16 handle = __le16_to_cpu(dc->handle);
+-
+- DBG("%s", hdev->name);
+-
+- if (!dc->status && (conn = conn_hash_lookup(&hdev->conn_hash, handle))) {
+- tasklet_disable(&hdev->tx_task);
+-
+- /* Notify upper protocols */
+- if (conn->type == ACL_LINK) {
+- /* ACL link notify L2CAP layer */
+- if ((hp = GET_HPROTO(HCI_PROTO_L2CAP)) && hp->disconn_ind)
+- hp->disconn_ind(conn, dc->reason);
+- } else {
+- /* SCO link (no notification) */
++ conn->sent++;
++ if (conn->sent == ~0)
++ conn->sent = 0;
+ }
+-
+- hci_conn_del(hdev, conn);
+-
+- tasklet_enable(&hdev->tx_task);
+ }
+ }
+
+-/* Number of completed packets */
+-static void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
++static void hci_tx_task(unsigned long arg)
+ {
+- evt_num_comp_pkts *nc = (evt_num_comp_pkts *) skb->data;
+- __u16 *ptr;
+- int i;
+-
+- skb_pull(skb, EVT_NUM_COMP_PKTS_SIZE);
+-
+- DBG("%s num_hndl %d", hdev->name, nc->num_hndl);
++ struct hci_dev *hdev = (struct hci_dev *) arg;
++ struct sk_buff *skb;
+
+- if (skb->len < nc->num_hndl * 4) {
+- DBG("%s bad parameters", hdev->name);
+- return;
+- }
++ read_lock(&hci_task_lock);
+
+- tasklet_disable(&hdev->tx_task);
++ BT_DBG("%s acl %d sco %d", hdev->name, hdev->acl_cnt, hdev->sco_cnt);
+
+- for (i = 0, ptr = (__u16 *) skb->data; i < nc->num_hndl; i++) {
+- struct hci_conn *conn;
+- __u16 handle, count;
++ /* Schedule queues and send stuff to HCI driver */
+
+- handle = __le16_to_cpu(get_unaligned(ptr++));
+- count = __le16_to_cpu(get_unaligned(ptr++));
++ hci_sched_acl(hdev);
+
+- hdev->acl_cnt += count;
++ hci_sched_sco(hdev);
+
+- if ((conn = conn_hash_lookup(&hdev->conn_hash, handle)))
+- conn->sent -= count;
+- }
++ /* Send next queued raw (unknown type) packet */
++ while ((skb = skb_dequeue(&hdev->raw_q)))
++ hci_send_frame(skb);
+
+- tasklet_enable(&hdev->tx_task);
+-
+- hci_sched_tx(hdev);
++ read_unlock(&hci_task_lock);
+ }
+
+-static inline void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
+-{
+- hci_event_hdr *he = (hci_event_hdr *) skb->data;
+- evt_cmd_status *cs;
+- evt_cmd_complete *ec;
+- __u16 opcode, ocf, ogf;
+-
+- skb_pull(skb, HCI_EVENT_HDR_SIZE);
+-
+- DBG("%s evt 0x%x", hdev->name, he->evt);
+-
+- switch (he->evt) {
+- case EVT_NUM_COMP_PKTS:
+- hci_num_comp_pkts_evt(hdev, skb);
+- break;
+-
+- case EVT_INQUIRY_COMPLETE:
+- hci_inquiry_complete_evt(hdev, skb);
+- break;
+
+- case EVT_INQUIRY_RESULT:
+- hci_inquiry_result_evt(hdev, skb);
+- break;
+-
+- case EVT_CONN_REQUEST:
+- hci_conn_request_evt(hdev, skb);
+- break;
+-
+- case EVT_CONN_COMPLETE:
+- hci_conn_complete_evt(hdev, skb);
+- break;
+-
+- case EVT_DISCONN_COMPLETE:
+- hci_disconn_complete_evt(hdev, skb);
+- break;
+-
+- case EVT_CMD_STATUS:
+- cs = (evt_cmd_status *) skb->data;
+- skb_pull(skb, EVT_CMD_STATUS_SIZE);
+-
+- opcode = __le16_to_cpu(cs->opcode);
+- ogf = cmd_opcode_ogf(opcode);
+- ocf = cmd_opcode_ocf(opcode);
+-
+- switch (ogf) {
+- case OGF_INFO_PARAM:
+- hci_cs_info_param(hdev, ocf, cs->status);
+- break;
+-
+- case OGF_HOST_CTL:
+- hci_cs_host_ctl(hdev, ocf, cs->status);
+- break;
+-
+- case OGF_LINK_CTL:
+- hci_cs_link_ctl(hdev, ocf, cs->status);
+- break;
+-
+- case OGF_LINK_POLICY:
+- hci_cs_link_policy(hdev, ocf, cs->status);
+- break;
+-
+- default:
+- DBG("%s Command Status OGF %x", hdev->name, ogf);
+- break;
+- };
+-
+- if (cs->ncmd) {
+- atomic_set(&hdev->cmd_cnt, 1);
+- if (!skb_queue_empty(&hdev->cmd_q))
+- hci_sched_cmd(hdev);
+- }
+- break;
+-
+- case EVT_CMD_COMPLETE:
+- ec = (evt_cmd_complete *) skb->data;
+- skb_pull(skb, EVT_CMD_COMPLETE_SIZE);
+-
+- opcode = __le16_to_cpu(ec->opcode);
+- ogf = cmd_opcode_ogf(opcode);
+- ocf = cmd_opcode_ocf(opcode);
+-
+- switch (ogf) {
+- case OGF_INFO_PARAM:
+- hci_cc_info_param(hdev, ocf, skb);
+- break;
+-
+- case OGF_HOST_CTL:
+- hci_cc_host_ctl(hdev, ocf, skb);
+- break;
+-
+- case OGF_LINK_CTL:
+- hci_cc_link_ctl(hdev, ocf, skb);
+- break;
+-
+- case OGF_LINK_POLICY:
+- hci_cc_link_policy(hdev, ocf, skb);
+- break;
+-
+- default:
+- DBG("%s Command Completed OGF %x", hdev->name, ogf);
+- break;
+- };
+-
+- if (ec->ncmd) {
+- atomic_set(&hdev->cmd_cnt, 1);
+- if (!skb_queue_empty(&hdev->cmd_q))
+- hci_sched_cmd(hdev);
+- }
+- break;
+- };
+-
+- kfree_skb(skb);
+- hdev->stat.evt_rx++;
+-}
++/* ----- HCI RX task (incomming data proccessing) ----- */
+
+ /* ACL data packet */
+ static inline void hci_acldata_packet(struct hci_dev *hdev, struct sk_buff *skb)
+@@ -1867,51 +1255,86 @@
+ flags = acl_flags(handle);
+ handle = acl_handle(handle);
+
+- DBG("%s len %d handle 0x%x flags 0x%x", hdev->name, skb->len, handle, flags);
++ BT_DBG("%s len %d handle 0x%x flags 0x%x", hdev->name, skb->len, handle, flags);
++
++ hdev->stat.acl_rx++;
+
+- if ((conn = conn_hash_lookup(&hdev->conn_hash, handle))) {
++ hci_dev_lock(hdev);
++ conn = conn_hash_lookup_handle(hdev, handle);
++ hci_dev_unlock(hdev);
++
++ if (conn) {
+ register struct hci_proto *hp;
+
+ /* Send to upper protocol */
+- if ((hp = GET_HPROTO(HCI_PROTO_L2CAP)) && hp->recv_acldata) {
++ if ((hp = hci_proto[HCI_PROTO_L2CAP]) && hp->recv_acldata) {
+ hp->recv_acldata(conn, skb, flags);
+- goto sent;
++ return;
+ }
+ } else {
+- ERR("%s ACL packet for unknown connection handle %d", hdev->name, handle);
++ BT_ERR("%s ACL packet for unknown connection handle %d",
++ hdev->name, handle);
+ }
+
+ kfree_skb(skb);
+-sent:
+- hdev->stat.acl_rx++;
+ }
+
+ /* SCO data packet */
+ static inline void hci_scodata_packet(struct hci_dev *hdev, struct sk_buff *skb)
+ {
+- DBG("%s len %d", hdev->name, skb->len);
++ hci_sco_hdr *sh = (void *) skb->data;
++ struct hci_conn *conn;
++ __u16 handle;
++
++ skb_pull(skb, HCI_SCO_HDR_SIZE);
++
++ handle = __le16_to_cpu(sh->handle);
++
++ BT_DBG("%s len %d handle 0x%x", hdev->name, skb->len, handle);
+
+- kfree_skb(skb);
+ hdev->stat.sco_rx++;
++
++ hci_dev_lock(hdev);
++ conn = conn_hash_lookup_handle(hdev, handle);
++ hci_dev_unlock(hdev);
++
++ if (conn) {
++ register struct hci_proto *hp;
++
++ /* Send to upper protocol */
++ if ((hp = hci_proto[HCI_PROTO_SCO]) && hp->recv_scodata) {
++ hp->recv_scodata(conn, skb);
++ return;
++ }
++ } else {
++ BT_ERR("%s SCO packet for unknown connection handle %d",
++ hdev->name, handle);
++ }
++
++ kfree_skb(skb);
+ }
+
+-/* ----- HCI tasks ----- */
+ void hci_rx_task(unsigned long arg)
+ {
+ struct hci_dev *hdev = (struct hci_dev *) arg;
+ struct sk_buff *skb;
+
+- DBG("%s", hdev->name);
++ BT_DBG("%s", hdev->name);
+
+ read_lock(&hci_task_lock);
+
+ while ((skb = skb_dequeue(&hdev->rx_q))) {
+- if (hdev->flags & HCI_SOCK) {
++ if (atomic_read(&hdev->promisc)) {
+ /* Send copy to the sockets */
+ hci_send_to_sock(hdev, skb);
+ }
+
+- if (hdev->flags & HCI_INIT) {
++ if (test_bit(HCI_RAW, &hdev->flags)) {
++ kfree_skb(skb);
++ continue;
++ }
++
++ if (test_bit(HCI_INIT, &hdev->flags)) {
+ /* Don't process data packets in this states. */
+ switch (skb->pkt_type) {
+ case HCI_ACLDATA_PKT:
+@@ -1921,64 +1344,43 @@
+ };
+ }
+
+- if (hdev->flags & HCI_NORMAL) {
+- /* Process frame */
+- switch (skb->pkt_type) {
+- case HCI_EVENT_PKT:
+- hci_event_packet(hdev, skb);
+- break;
++ /* Process frame */
++ switch (skb->pkt_type) {
++ case HCI_EVENT_PKT:
++ hci_event_packet(hdev, skb);
++ break;
+
+- case HCI_ACLDATA_PKT:
+- DBG("%s ACL data packet", hdev->name);
+- hci_acldata_packet(hdev, skb);
+- break;
++ case HCI_ACLDATA_PKT:
++ BT_DBG("%s ACL data packet", hdev->name);
++ hci_acldata_packet(hdev, skb);
++ break;
+
+- case HCI_SCODATA_PKT:
+- DBG("%s SCO data packet", hdev->name);
+- hci_scodata_packet(hdev, skb);
+- break;
++ case HCI_SCODATA_PKT:
++ BT_DBG("%s SCO data packet", hdev->name);
++ hci_scodata_packet(hdev, skb);
++ break;
+
+- default:
+- kfree_skb(skb);
+- break;
+- };
+- } else {
++ default:
+ kfree_skb(skb);
++ break;
+ }
+ }
+
+ read_unlock(&hci_task_lock);
+ }
+
+-static void hci_tx_task(unsigned long arg)
+-{
+- struct hci_dev *hdev = (struct hci_dev *) arg;
+- struct sk_buff *skb;
+-
+- read_lock(&hci_task_lock);
+-
+- DBG("%s acl %d sco %d", hdev->name, hdev->acl_cnt, hdev->sco_cnt);
+-
+- /* Schedule queues and send stuff to HCI driver */
+-
+- hci_sched_acl(hdev);
+-
+- hci_sched_sco(hdev);
+-
+- /* Send next queued raw (unknown type) packet */
+- while ((skb = skb_dequeue(&hdev->raw_q)))
+- hci_send_frame(skb);
+-
+- read_unlock(&hci_task_lock);
+-}
+-
+ static void hci_cmd_task(unsigned long arg)
+ {
+ struct hci_dev *hdev = (struct hci_dev *) arg;
+ struct sk_buff *skb;
+
+- DBG("%s cmd %d", hdev->name, atomic_read(&hdev->cmd_cnt));
++ BT_DBG("%s cmd %d", hdev->name, atomic_read(&hdev->cmd_cnt));
+
++ if (!atomic_read(&hdev->cmd_cnt) && (jiffies - hdev->cmd_last_tx) > HZ) {
++ BT_ERR("%s command tx timeout", hdev->name);
++ atomic_set(&hdev->cmd_cnt, 1);
++ }
++
+ /* Send queued commands */
+ if (atomic_read(&hdev->cmd_cnt) && (skb = skb_dequeue(&hdev->cmd_q))) {
+ if (hdev->sent_cmd)
+@@ -1987,6 +1389,7 @@
+ if ((hdev->sent_cmd = skb_clone(skb, GFP_ATOMIC))) {
+ atomic_dec(&hdev->cmd_cnt);
+ hci_send_frame(skb);
++ hdev->cmd_last_tx = jiffies;
+ } else {
+ skb_queue_head(&hdev->cmd_q, skb);
+ hci_sched_cmd(hdev);
+@@ -1994,33 +1397,10 @@
+ }
+ }
+
+-/* Receive frame from HCI drivers */
+-int hci_recv_frame(struct sk_buff *skb)
+-{
+- struct hci_dev *hdev = (struct hci_dev *) skb->dev;
+-
+- if (!hdev || !(hdev->flags & (HCI_UP | HCI_INIT))) {
+- kfree_skb(skb);
+- return -1;
+- }
+-
+- DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
+-
+- /* Incomming skb */
+- bluez_cb(skb)->incomming = 1;
+-
+- /* Queue frame for rx task */
+- skb_queue_tail(&hdev->rx_q, skb);
+- hci_sched_rx(hdev);
+-
+- return 0;
+-}
++/* ---- Initialization ---- */
+
+ int hci_core_init(void)
+ {
+- /* Init locks */
+- spin_lock_init(&hdev_list_lock);
+-
+ return 0;
+ }
+
+@@ -2028,5 +1408,3 @@
+ {
+ return 0;
+ }
+-
+-MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/hci_event.c linux-2.4.18-mh15/net/bluetooth/hci_event.c
+--- linux-2.4.18/net/bluetooth/hci_event.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/hci_event.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,910 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * HCI Events.
++ *
++ * $Id: hci_event.c,v 1.4 2002/07/27 18:14:38 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/init.h>
++#include <linux/skbuff.h>
++#include <linux/interrupt.h>
++#include <linux/notifier.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++#ifndef HCI_CORE_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
++
++/* Handle HCI Event packets */
++
++/* Command Complete OGF LINK_CTL */
++static void hci_cc_link_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
++{
++ __u8 status;
++
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ case OCF_INQUIRY_CANCEL:
++ status = *((__u8 *) skb->data);
++
++ if (status) {
++ BT_DBG("%s Inquiry cancel error: status 0x%x", hdev->name, status);
++ } else {
++ clear_bit(HCI_INQUIRY, &hdev->flags);
++ hci_req_complete(hdev, status);
++ }
++ break;
++
++ default:
++ BT_DBG("%s Command complete: ogf LINK_CTL ocf %x", hdev->name, ocf);
++ break;
++ };
++}
++
++/* Command Complete OGF LINK_POLICY */
++static void hci_cc_link_policy(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
++{
++ struct hci_conn *conn;
++ role_discovery_rp *rd;
++
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ case OCF_ROLE_DISCOVERY:
++ rd = (void *) skb->data;
++
++ if (rd->status)
++ break;
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_handle(hdev, __le16_to_cpu(rd->handle));
++ if (conn) {
++ if (rd->role)
++ conn->link_mode &= ~HCI_LM_MASTER;
++ else
++ conn->link_mode |= HCI_LM_MASTER;
++ }
++
++ hci_dev_unlock(hdev);
++ break;
++
++ default:
++ BT_DBG("%s: Command complete: ogf LINK_POLICY ocf %x",
++ hdev->name, ocf);
++ break;
++ };
++}
++
++/* Command Complete OGF HOST_CTL */
++static void hci_cc_host_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
++{
++ __u8 status, param;
++ void *sent;
++
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ case OCF_RESET:
++ status = *((__u8 *) skb->data);
++ hci_req_complete(hdev, status);
++ break;
++
++ case OCF_SET_EVENT_FLT:
++ status = *((__u8 *) skb->data);
++ if (status) {
++ BT_DBG("%s SET_EVENT_FLT failed %d", hdev->name, status);
++ } else {
++ BT_DBG("%s SET_EVENT_FLT succeseful", hdev->name);
++ }
++ break;
++
++ case OCF_WRITE_AUTH_ENABLE:
++ sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_AUTH_ENABLE);
++ if (!sent)
++ break;
++
++ status = *((__u8 *) skb->data);
++ param = *((__u8 *) sent);
++
++ if (!status) {
++ if (param == AUTH_ENABLED)
++ set_bit(HCI_AUTH, &hdev->flags);
++ else
++ clear_bit(HCI_AUTH, &hdev->flags);
++ }
++ hci_req_complete(hdev, status);
++ break;
++
++ case OCF_WRITE_ENCRYPT_MODE:
++ sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_ENCRYPT_MODE);
++ if (!sent)
++ break;
++
++ status = *((__u8 *) skb->data);
++ param = *((__u8 *) sent);
++
++ if (!status) {
++ if (param)
++ set_bit(HCI_ENCRYPT, &hdev->flags);
++ else
++ clear_bit(HCI_ENCRYPT, &hdev->flags);
++ }
++ hci_req_complete(hdev, status);
++ break;
++
++ case OCF_WRITE_CA_TIMEOUT:
++ status = *((__u8 *) skb->data);
++ if (status) {
++ BT_DBG("%s OCF_WRITE_CA_TIMEOUT failed %d", hdev->name, status);
++ } else {
++ BT_DBG("%s OCF_WRITE_CA_TIMEOUT succeseful", hdev->name);
++ }
++ break;
++
++ case OCF_WRITE_PG_TIMEOUT:
++ status = *((__u8 *) skb->data);
++ if (status) {
++ BT_DBG("%s OCF_WRITE_PG_TIMEOUT failed %d", hdev->name, status);
++ } else {
++ BT_DBG("%s: OCF_WRITE_PG_TIMEOUT succeseful", hdev->name);
++ }
++ break;
++
++ case OCF_WRITE_SCAN_ENABLE:
++ sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE);
++ if (!sent)
++ break;
++ status = *((__u8 *) skb->data);
++ param = *((__u8 *) sent);
++
++ BT_DBG("param 0x%x", param);
++
++ if (!status) {
++ clear_bit(HCI_PSCAN, &hdev->flags);
++ clear_bit(HCI_ISCAN, &hdev->flags);
++ if (param & SCAN_INQUIRY)
++ set_bit(HCI_ISCAN, &hdev->flags);
++
++ if (param & SCAN_PAGE)
++ set_bit(HCI_PSCAN, &hdev->flags);
++ }
++ hci_req_complete(hdev, status);
++ break;
++
++ case OCF_HOST_BUFFER_SIZE:
++ status = *((__u8 *) skb->data);
++ if (status) {
++ BT_DBG("%s OCF_BUFFER_SIZE failed %d", hdev->name, status);
++ hci_req_complete(hdev, status);
++ }
++ break;
++
++ default:
++ BT_DBG("%s Command complete: ogf HOST_CTL ocf %x", hdev->name, ocf);
++ break;
++ };
++}
++
++/* Command Complete OGF INFO_PARAM */
++static void hci_cc_info_param(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
++{
++ read_local_features_rp *lf;
++ read_buffer_size_rp *bs;
++ read_bd_addr_rp *ba;
++
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ case OCF_READ_LOCAL_FEATURES:
++ lf = (read_local_features_rp *) skb->data;
++
++ if (lf->status) {
++ BT_DBG("%s READ_LOCAL_FEATURES failed %d", hdev->name, lf->status);
++ break;
++ }
++
++ memcpy(hdev->features, lf->features, sizeof(hdev->features));
++
++ /* Adjust default settings according to features
++ * supported by device. */
++ if (hdev->features[0] & LMP_3SLOT)
++ hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
++
++ if (hdev->features[0] & LMP_5SLOT)
++ hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
++
++ if (hdev->features[1] & LMP_HV2)
++ hdev->pkt_type |= (HCI_HV2);
++
++ if (hdev->features[1] & LMP_HV3)
++ hdev->pkt_type |= (HCI_HV3);
++
++ BT_DBG("%s: features 0x%x 0x%x 0x%x", hdev->name, lf->features[0], lf->features[1], lf->features[2]);
++
++ break;
++
++ case OCF_READ_BUFFER_SIZE:
++ bs = (read_buffer_size_rp *) skb->data;
++
++ if (bs->status) {
++ BT_DBG("%s READ_BUFFER_SIZE failed %d", hdev->name, bs->status);
++ hci_req_complete(hdev, bs->status);
++ break;
++ }
++
++ hdev->acl_mtu = __le16_to_cpu(bs->acl_mtu);
++ hdev->sco_mtu = bs->sco_mtu ? bs->sco_mtu : 64;
++ hdev->acl_pkts = hdev->acl_cnt = __le16_to_cpu(bs->acl_max_pkt);
++ hdev->sco_pkts = hdev->sco_cnt = __le16_to_cpu(bs->sco_max_pkt);
++
++ BT_DBG("%s mtu: acl %d, sco %d max_pkt: acl %d, sco %d", hdev->name,
++ hdev->acl_mtu, hdev->sco_mtu, hdev->acl_pkts, hdev->sco_pkts);
++ break;
++
++ case OCF_READ_BD_ADDR:
++ ba = (read_bd_addr_rp *) skb->data;
++
++ if (!ba->status) {
++ bacpy(&hdev->bdaddr, &ba->bdaddr);
++ } else {
++ BT_DBG("%s: READ_BD_ADDR failed %d", hdev->name, ba->status);
++ }
++
++ hci_req_complete(hdev, ba->status);
++ break;
++
++ default:
++ BT_DBG("%s Command complete: ogf INFO_PARAM ocf %x", hdev->name, ocf);
++ break;
++ };
++}
++
++/* Command Status OGF LINK_CTL */
++static inline void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
++{
++ struct hci_conn *conn;
++ create_conn_cp *cc = hci_sent_cmd_data(hdev, OGF_LINK_CTL, OCF_CREATE_CONN);
++
++ if (!cc)
++ return;
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_ba(hdev, ACL_LINK, &cc->bdaddr);
++
++ BT_DBG("%s status 0x%x bdaddr %s conn %p", hdev->name,
++ status, batostr(&cc->bdaddr), conn);
++
++ if (status) {
++ if (conn && conn->state == BT_CONNECT) {
++ conn->state = BT_CLOSED;
++ hci_proto_connect_cfm(conn, status);
++ hci_conn_del(conn);
++ }
++ } else {
++ if (!conn) {
++ conn = hci_conn_add(hdev, ACL_LINK, &cc->bdaddr);
++ if (conn) {
++ conn->out = 1;
++ conn->link_mode |= HCI_LM_MASTER;
++ } else
++ BT_ERR("No memmory for new connection");
++ }
++ }
++
++ hci_dev_unlock(hdev);
++}
++
++static void hci_cs_link_ctl(struct hci_dev *hdev, __u16 ocf, __u8 status)
++{
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ case OCF_CREATE_CONN:
++ hci_cs_create_conn(hdev, status);
++ break;
++
++ case OCF_ADD_SCO:
++ if (status) {
++ struct hci_conn *acl, *sco;
++ add_sco_cp *cp = hci_sent_cmd_data(hdev,
++ OGF_LINK_CTL, OCF_ADD_SCO);
++ __u16 handle;
++
++ if (!cp)
++ break;
++
++ handle = __le16_to_cpu(cp->handle);
++
++ BT_DBG("%s Add SCO error: handle %d status 0x%x", hdev->name, handle, status);
++
++ hci_dev_lock(hdev);
++
++ acl = conn_hash_lookup_handle(hdev, handle);
++ if (acl && (sco = acl->link)) {
++ sco->state = BT_CLOSED;
++ hci_proto_connect_cfm(sco, status);
++ hci_conn_del(sco);
++ }
++
++ hci_dev_unlock(hdev);
++ }
++ break;
++
++ case OCF_INQUIRY:
++ if (status) {
++ BT_DBG("%s Inquiry error: status 0x%x", hdev->name, status);
++ hci_req_complete(hdev, status);
++ } else {
++ set_bit(HCI_INQUIRY, &hdev->flags);
++ }
++ break;
++
++ default:
++ BT_DBG("%s Command status: ogf LINK_CTL ocf %x status %d",
++ hdev->name, ocf, status);
++ break;
++ };
++}
++
++/* Command Status OGF LINK_POLICY */
++static void hci_cs_link_policy(struct hci_dev *hdev, __u16 ocf, __u8 status)
++{
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ default:
++ BT_DBG("%s Command status: ogf HOST_POLICY ocf %x", hdev->name, ocf);
++ break;
++ };
++}
++
++/* Command Status OGF HOST_CTL */
++static void hci_cs_host_ctl(struct hci_dev *hdev, __u16 ocf, __u8 status)
++{
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ default:
++ BT_DBG("%s Command status: ogf HOST_CTL ocf %x", hdev->name, ocf);
++ break;
++ };
++}
++
++/* Command Status OGF INFO_PARAM */
++static void hci_cs_info_param(struct hci_dev *hdev, __u16 ocf, __u8 status)
++{
++ BT_DBG("%s: hci_cs_info_param: ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ default:
++ BT_DBG("%s Command status: ogf INFO_PARAM ocf %x", hdev->name, ocf);
++ break;
++ };
++}
++
++/* Inquiry Complete */
++static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ __u8 status = *((__u8 *) skb->data);
++
++ BT_DBG("%s status %d", hdev->name, status);
++
++ clear_bit(HCI_INQUIRY, &hdev->flags);
++ hci_req_complete(hdev, status);
++}
++
++/* Inquiry Result */
++static inline void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ inquiry_info *info = (inquiry_info *) (skb->data + 1);
++ int num_rsp = *((__u8 *) skb->data);
++
++ BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
++
++ hci_dev_lock(hdev);
++ for (; num_rsp; num_rsp--)
++ inquiry_cache_update(hdev, info++);
++ hci_dev_unlock(hdev);
++}
++
++/* Inquiry Result With RSSI */
++static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ inquiry_info_with_rssi *info = (inquiry_info_with_rssi *) (skb->data + 1);
++ int num_rsp = *((__u8 *) skb->data);
++
++ BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
++
++ hci_dev_lock(hdev);
++ for (; num_rsp; num_rsp--) {
++ inquiry_info tmp;
++ bacpy(&tmp.bdaddr, &info->bdaddr);
++ tmp.pscan_rep_mode = info->pscan_rep_mode;
++ tmp.pscan_period_mode = info->pscan_period_mode;
++ tmp.pscan_mode = 0x00;
++ memcpy(tmp.dev_class, &info->dev_class, 3);
++ tmp.clock_offset = info->clock_offset;
++ info++;
++ inquiry_cache_update(hdev, &tmp);
++ }
++ hci_dev_unlock(hdev);
++}
++
++/* Connect Request */
++static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_conn_request *cr = (evt_conn_request *) skb->data;
++ int mask = hdev->link_mode;
++
++ BT_DBG("%s Connection request: %s type 0x%x", hdev->name,
++ batostr(&cr->bdaddr), cr->link_type);
++
++ mask |= hci_proto_connect_ind(hdev, &cr->bdaddr, cr->link_type);
++
++ if (mask & HCI_LM_ACCEPT) {
++ /* Connection accepted */
++ struct hci_conn *conn;
++ accept_conn_req_cp ac;
++
++ hci_dev_lock(hdev);
++ conn = conn_hash_lookup_ba(hdev, cr->link_type, &cr->bdaddr);
++ if (!conn) {
++ if (!(conn = hci_conn_add(hdev, cr->link_type, &cr->bdaddr))) {
++ BT_ERR("No memmory for new connection");
++ hci_dev_unlock(hdev);
++ return;
++ }
++ }
++ conn->state = BT_CONNECT;
++ hci_dev_unlock(hdev);
++
++ bacpy(&ac.bdaddr, &cr->bdaddr);
++
++ if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
++ ac.role = 0x00; /* Become master */
++ else
++ ac.role = 0x01; /* Remain slave */
++
++ hci_send_cmd(hdev, OGF_LINK_CTL, OCF_ACCEPT_CONN_REQ,
++ ACCEPT_CONN_REQ_CP_SIZE, &ac);
++ } else {
++ /* Connection rejected */
++ reject_conn_req_cp rc;
++
++ bacpy(&rc.bdaddr, &cr->bdaddr);
++ rc.reason = 0x0f;
++ hci_send_cmd(hdev, OGF_LINK_CTL, OCF_REJECT_CONN_REQ,
++ REJECT_CONN_REQ_CP_SIZE, &rc);
++ }
++}
++
++/* Connect Complete */
++static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_conn_complete *cc = (evt_conn_complete *) skb->data;
++ struct hci_conn *conn = NULL;
++
++ BT_DBG("%s", hdev->name);
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_ba(hdev, cc->link_type, &cc->bdaddr);
++ if (!conn) {
++ hci_dev_unlock(hdev);
++ return;
++ }
++
++ if (!cc->status) {
++ conn->handle = __le16_to_cpu(cc->handle);
++ conn->state = BT_CONNECTED;
++
++ if (test_bit(HCI_AUTH, &hdev->flags))
++ conn->link_mode |= HCI_LM_AUTH;
++
++ if (test_bit(HCI_ENCRYPT, &hdev->flags))
++ conn->link_mode |= HCI_LM_ENCRYPT;
++
++
++ /* Set link policy */
++ if (conn->type == ACL_LINK && hdev->link_policy) {
++ write_link_policy_cp lp;
++ lp.handle = cc->handle;
++ lp.policy = __cpu_to_le16(hdev->link_policy);
++ hci_send_cmd(hdev, OGF_LINK_POLICY, OCF_WRITE_LINK_POLICY,
++ WRITE_LINK_POLICY_CP_SIZE, &lp);
++ }
++
++ /* Set packet type for incomming connection */
++ if (!conn->out) {
++ change_conn_ptype_cp cp;
++ cp.handle = cc->handle;
++ cp.pkt_type = (conn->type == ACL_LINK) ?
++ __cpu_to_le16(hdev->pkt_type & ACL_PTYPE_MASK):
++ __cpu_to_le16(hdev->pkt_type & SCO_PTYPE_MASK);
++
++ hci_send_cmd(hdev, OGF_LINK_CTL, OCF_CHANGE_CONN_PTYPE,
++ CHANGE_CONN_PTYPE_CP_SIZE, &cp);
++ }
++ } else
++ conn->state = BT_CLOSED;
++
++ if (conn->type == ACL_LINK) {
++ struct hci_conn *sco = conn->link;
++ if (sco) {
++ if (!cc->status)
++ hci_add_sco(sco, conn->handle);
++ else {
++ hci_proto_connect_cfm(sco, cc->status);
++ hci_conn_del(sco);
++ }
++ }
++ }
++
++ hci_proto_connect_cfm(conn, cc->status);
++ if (cc->status)
++ hci_conn_del(conn);
++
++ hci_dev_unlock(hdev);
++}
++
++/* Disconnect Complete */
++static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_disconn_complete *dc = (evt_disconn_complete *) skb->data;
++ struct hci_conn *conn = NULL;
++ __u16 handle = __le16_to_cpu(dc->handle);
++
++ BT_DBG("%s status %d", hdev->name, dc->status);
++
++ if (dc->status)
++ return;
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_handle(hdev, handle);
++ if (conn) {
++ conn->state = BT_CLOSED;
++ hci_proto_disconn_ind(conn, dc->reason);
++ hci_conn_del(conn);
++ }
++
++ hci_dev_unlock(hdev);
++}
++
++/* Number of completed packets */
++static inline void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_num_comp_pkts *nc = (evt_num_comp_pkts *) skb->data;
++ __u16 *ptr;
++ int i;
++
++ skb_pull(skb, EVT_NUM_COMP_PKTS_SIZE);
++
++ BT_DBG("%s num_hndl %d", hdev->name, nc->num_hndl);
++
++ if (skb->len < nc->num_hndl * 4) {
++ BT_DBG("%s bad parameters", hdev->name);
++ return;
++ }
++
++ tasklet_disable(&hdev->tx_task);
++
++ for (i = 0, ptr = (__u16 *) skb->data; i < nc->num_hndl; i++) {
++ struct hci_conn *conn;
++ __u16 handle, count;
++
++ handle = __le16_to_cpu(get_unaligned(ptr++));
++ count = __le16_to_cpu(get_unaligned(ptr++));
++
++ conn = conn_hash_lookup_handle(hdev, handle);
++ if (conn) {
++ conn->sent -= count;
++
++ if (conn->type == SCO_LINK) {
++ if ((hdev->sco_cnt += count) > hdev->sco_pkts)
++ hdev->sco_cnt = hdev->sco_pkts;
++ } else {
++ if ((hdev->acl_cnt += count) > hdev->acl_pkts)
++ hdev->acl_cnt = hdev->acl_pkts;
++ }
++ }
++ }
++ hci_sched_tx(hdev);
++
++ tasklet_enable(&hdev->tx_task);
++}
++
++/* Role Change */
++static inline void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_role_change *rc = (evt_role_change *) skb->data;
++ struct hci_conn *conn = NULL;
++
++ BT_DBG("%s status %d", hdev->name, rc->status);
++
++ if (rc->status)
++ return;
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_ba(hdev, ACL_LINK, &rc->bdaddr);
++ if (conn) {
++ if (rc->role)
++ conn->link_mode &= ~HCI_LM_MASTER;
++ else
++ conn->link_mode |= HCI_LM_MASTER;
++ }
++
++ hci_dev_unlock(hdev);
++}
++
++/* Authentication Complete */
++static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_auth_complete *ac = (evt_auth_complete *) skb->data;
++ struct hci_conn *conn = NULL;
++ __u16 handle = __le16_to_cpu(ac->handle);
++
++ BT_DBG("%s status %d", hdev->name, ac->status);
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_handle(hdev, handle);
++ if (conn) {
++ if (!ac->status)
++ conn->link_mode |= HCI_LM_AUTH;
++ clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
++
++ hci_proto_auth_cfm(conn, ac->status);
++
++ if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
++ if (!ac->status) {
++ set_conn_encrypt_cp ce;
++ ce.handle = __cpu_to_le16(conn->handle);
++ ce.encrypt = 1;
++ hci_send_cmd(conn->hdev, OGF_LINK_CTL,
++ OCF_SET_CONN_ENCRYPT,
++ SET_CONN_ENCRYPT_CP_SIZE, &ce);
++ } else {
++ clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
++ hci_proto_encrypt_cfm(conn, ac->status);
++ }
++ }
++ }
++
++ hci_dev_unlock(hdev);
++}
++
++/* Encryption Change */
++static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_encrypt_change *ec = (evt_encrypt_change *) skb->data;
++ struct hci_conn *conn = NULL;
++ __u16 handle = __le16_to_cpu(ec->handle);
++
++ BT_DBG("%s status %d", hdev->name, ec->status);
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_handle(hdev, handle);
++ if (conn) {
++ if (!ec->status) {
++ if (ec->encrypt)
++ conn->link_mode |= HCI_LM_ENCRYPT;
++ else
++ conn->link_mode &= ~HCI_LM_ENCRYPT;
++ }
++ clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
++
++ hci_proto_encrypt_cfm(conn, ec->status);
++ }
++
++ hci_dev_unlock(hdev);
++}
++
++void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ hci_event_hdr *he = (hci_event_hdr *) skb->data;
++ evt_cmd_status *cs;
++ evt_cmd_complete *ec;
++ __u16 opcode, ocf, ogf;
++
++ skb_pull(skb, HCI_EVENT_HDR_SIZE);
++
++ BT_DBG("%s evt 0x%x", hdev->name, he->evt);
++
++ switch (he->evt) {
++ case EVT_NUM_COMP_PKTS:
++ hci_num_comp_pkts_evt(hdev, skb);
++ break;
++
++ case EVT_INQUIRY_COMPLETE:
++ hci_inquiry_complete_evt(hdev, skb);
++ break;
++
++ case EVT_INQUIRY_RESULT:
++ hci_inquiry_result_evt(hdev, skb);
++ break;
++
++ case EVT_INQUIRY_RESULT_WITH_RSSI:
++ hci_inquiry_result_with_rssi_evt(hdev, skb);
++ break;
++
++ case EVT_CONN_REQUEST:
++ hci_conn_request_evt(hdev, skb);
++ break;
++
++ case EVT_CONN_COMPLETE:
++ hci_conn_complete_evt(hdev, skb);
++ break;
++
++ case EVT_DISCONN_COMPLETE:
++ hci_disconn_complete_evt(hdev, skb);
++ break;
++
++ case EVT_ROLE_CHANGE:
++ hci_role_change_evt(hdev, skb);
++ break;
++
++ case EVT_AUTH_COMPLETE:
++ hci_auth_complete_evt(hdev, skb);
++ break;
++
++ case EVT_ENCRYPT_CHANGE:
++ hci_encrypt_change_evt(hdev, skb);
++ break;
++
++ case EVT_CMD_STATUS:
++ cs = (evt_cmd_status *) skb->data;
++ skb_pull(skb, EVT_CMD_STATUS_SIZE);
++
++ opcode = __le16_to_cpu(cs->opcode);
++ ogf = cmd_opcode_ogf(opcode);
++ ocf = cmd_opcode_ocf(opcode);
++
++ switch (ogf) {
++ case OGF_INFO_PARAM:
++ hci_cs_info_param(hdev, ocf, cs->status);
++ break;
++
++ case OGF_HOST_CTL:
++ hci_cs_host_ctl(hdev, ocf, cs->status);
++ break;
++
++ case OGF_LINK_CTL:
++ hci_cs_link_ctl(hdev, ocf, cs->status);
++ break;
++
++ case OGF_LINK_POLICY:
++ hci_cs_link_policy(hdev, ocf, cs->status);
++ break;
++
++ default:
++ BT_DBG("%s Command Status OGF %x", hdev->name, ogf);
++ break;
++ };
++
++ if (cs->ncmd) {
++ atomic_set(&hdev->cmd_cnt, 1);
++ if (!skb_queue_empty(&hdev->cmd_q))
++ hci_sched_cmd(hdev);
++ }
++ break;
++
++ case EVT_CMD_COMPLETE:
++ ec = (evt_cmd_complete *) skb->data;
++ skb_pull(skb, EVT_CMD_COMPLETE_SIZE);
++
++ opcode = __le16_to_cpu(ec->opcode);
++ ogf = cmd_opcode_ogf(opcode);
++ ocf = cmd_opcode_ocf(opcode);
++
++ switch (ogf) {
++ case OGF_INFO_PARAM:
++ hci_cc_info_param(hdev, ocf, skb);
++ break;
++
++ case OGF_HOST_CTL:
++ hci_cc_host_ctl(hdev, ocf, skb);
++ break;
++
++ case OGF_LINK_CTL:
++ hci_cc_link_ctl(hdev, ocf, skb);
++ break;
++
++ case OGF_LINK_POLICY:
++ hci_cc_link_policy(hdev, ocf, skb);
++ break;
++
++ default:
++ BT_DBG("%s Command Completed OGF %x", hdev->name, ogf);
++ break;
++ };
++
++ if (ec->ncmd) {
++ atomic_set(&hdev->cmd_cnt, 1);
++ if (!skb_queue_empty(&hdev->cmd_q))
++ hci_sched_cmd(hdev);
++ }
++ break;
++ };
++
++ kfree_skb(skb);
++ hdev->stat.evt_rx++;
++}
++
++/* General internal stack event */
++void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
++{
++ hci_event_hdr *eh;
++ evt_stack_internal *si;
++ struct sk_buff *skb;
++ int size;
++ void *ptr;
++
++ size = HCI_EVENT_HDR_SIZE + EVT_STACK_INTERNAL_SIZE + dlen;
++ skb = bluez_skb_alloc(size, GFP_ATOMIC);
++ if (!skb)
++ return;
++
++ ptr = skb_put(skb, size);
++
++ eh = ptr;
++ eh->evt = EVT_STACK_INTERNAL;
++ eh->plen = EVT_STACK_INTERNAL_SIZE + dlen;
++ ptr += HCI_EVENT_HDR_SIZE;
++
++ si = ptr;
++ si->type = type;
++ memcpy(si->data, data, dlen);
++
++ skb->pkt_type = HCI_EVENT_PKT;
++ skb->dev = (void *) hdev;
++ hci_send_to_sock(hdev, skb);
++ kfree_skb(skb);
++}
+diff -urN linux-2.4.18/net/bluetooth/hci_sock.c linux-2.4.18-mh15/net/bluetooth/hci_sock.c
+--- linux-2.4.18/net/bluetooth/hci_sock.c 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/net/bluetooth/hci_sock.c 2004-08-01 16:26:23.000000000 +0200
+@@ -25,7 +25,7 @@
+ /*
+ * BlueZ HCI socket layer.
+ *
+- * $Id: hci_sock.c,v 1.9 2001/08/05 06:02:16 maxk Exp $
++ * $Id: hci_sock.c,v 1.5 2002/07/22 20:32:54 maxk Exp $
+ */
+
+ #include <linux/config.h>
+@@ -49,45 +49,54 @@
+
+ #include <asm/system.h>
+ #include <asm/uaccess.h>
++#include <asm/unaligned.h>
+
+ #include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+ #include <net/bluetooth/hci_core.h>
+
+ #ifndef HCI_SOCK_DEBUG
+-#undef DBG
+-#define DBG( A... )
++#undef BT_DBG
++#define BT_DBG( A... )
+ #endif
+
+-/* HCI socket interface */
++/* ----- HCI socket interface ----- */
++
++/* Security filter */
++static struct hci_sec_filter hci_sec_filter = {
++ /* Packet types */
++ 0x10,
++ /* Events */
++ { 0x1000d9fe, 0x0000300c },
++ /* Commands */
++ {
++ { 0x0 },
++ /* OGF_LINK_CTL */
++ { 0xbe000006, 0x00000001, 0x0000, 0x00 },
++ /* OGF_LINK_POLICY */
++ { 0x00005200, 0x00000000, 0x0000, 0x00 },
++ /* OGF_HOST_CTL */
++ { 0xaab00200, 0x2b402aaa, 0x0154, 0x00 },
++ /* OGF_INFO_PARAM */
++ { 0x000002be, 0x00000000, 0x0000, 0x00 },
++ /* OGF_STATUS_PARAM */
++ { 0x000000ea, 0x00000000, 0x0000, 0x00 }
++ }
++};
+
+ static struct bluez_sock_list hci_sk_list = {
+ lock: RW_LOCK_UNLOCKED
+ };
+
+-static struct sock *hci_sock_lookup(struct hci_dev *hdev)
+-{
+- struct sock *sk;
+-
+- read_lock(&hci_sk_list.lock);
+- for (sk = hci_sk_list.head; sk; sk = sk->next) {
+- if (hci_pi(sk)->hdev == hdev)
+- break;
+- }
+- read_unlock(&hci_sk_list.lock);
+- return sk;
+-}
+-
+ /* Send frame to RAW socket */
+ void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb)
+ {
+ struct sock * sk;
+
+- DBG("hdev %p len %d", hdev, skb->len);
++ BT_DBG("hdev %p len %d", hdev, skb->len);
+
+ read_lock(&hci_sk_list.lock);
+ for (sk = hci_sk_list.head; sk; sk = sk->next) {
+- struct hci_filter *flt;
++ struct hci_filter *flt;
+ struct sk_buff *nskb;
+
+ if (sk->state != BT_BOUND || hci_pi(sk)->hdev != hdev)
+@@ -100,13 +109,19 @@
+ /* Apply filter */
+ flt = &hci_pi(sk)->filter;
+
+- if (!test_bit(skb->pkt_type, &flt->type_mask))
++ if (!hci_test_bit((skb->pkt_type & HCI_FLT_TYPE_BITS), &flt->type_mask))
+ continue;
+
+ if (skb->pkt_type == HCI_EVENT_PKT) {
+- register int evt = (*(__u8 *)skb->data & 63);
++ register int evt = (*(__u8 *)skb->data & HCI_FLT_EVENT_BITS);
++
++ if (!hci_test_bit(evt, &flt->event_mask))
++ continue;
+
+- if (!test_bit(evt, &flt->event_mask))
++ if (flt->opcode && ((evt == EVT_CMD_COMPLETE &&
++ flt->opcode != *(__u16 *)(skb->data + 3)) ||
++ (evt == EVT_CMD_STATUS &&
++ flt->opcode != *(__u16 *)(skb->data + 4))))
+ continue;
+ }
+
+@@ -116,8 +131,8 @@
+ /* Put type byte before the data */
+ memcpy(skb_push(nskb, 1), &nskb->pkt_type, 1);
+
+- skb_queue_tail(&sk->receive_queue, nskb);
+- sk->data_ready(sk, nskb->len);
++ if (sock_queue_rcv_skb(sk, nskb))
++ kfree_skb(nskb);
+ }
+ read_unlock(&hci_sk_list.lock);
+ }
+@@ -127,7 +142,7 @@
+ struct sock *sk = sock->sk;
+ struct hci_dev *hdev = hci_pi(sk)->hdev;
+
+- DBG("sock %p sk %p", sock, sk);
++ BT_DBG("sock %p sk %p", sock, sk);
+
+ if (!sk)
+ return 0;
+@@ -135,9 +150,7 @@
+ bluez_sock_unlink(&hci_sk_list, sk);
+
+ if (hdev) {
+- if (!hci_sock_lookup(hdev))
+- hdev->flags &= ~HCI_SOCK;
+-
++ atomic_dec(&hdev->promisc);
+ hci_dev_put(hdev);
+ }
+
+@@ -149,24 +162,55 @@
+ sock_put(sk);
+
+ MOD_DEC_USE_COUNT;
+-
+ return 0;
+ }
+
+-static int hci_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++/* Ioctls that require bound socket */
++static inline int hci_sock_bound_ioctl(struct sock *sk, unsigned int cmd, unsigned long arg)
+ {
+- struct sock *sk = sock->sk;
+ struct hci_dev *hdev = hci_pi(sk)->hdev;
+- __u32 mode;
+
+- DBG("cmd %x arg %lx", cmd, arg);
++ if (!hdev)
++ return -EBADFD;
+
+ switch (cmd) {
+- case HCIGETINFO:
+- return hci_dev_info(arg);
++ case HCISETRAW:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
+
++ if (arg)
++ set_bit(HCI_RAW, &hdev->flags);
++ else
++ clear_bit(HCI_RAW, &hdev->flags);
++
++ return 0;
++
++ case HCIGETCONNINFO:
++ return hci_get_conn_info(hdev, arg);
++
++ default:
++ if (hdev->ioctl)
++ return hdev->ioctl(hdev, cmd, arg);
++ return -EINVAL;
++ }
++}
++
++static int hci_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++{
++ struct sock *sk = sock->sk;
++ int err;
++
++ BT_DBG("cmd %x arg %lx", cmd, arg);
++
++ switch (cmd) {
+ case HCIGETDEVLIST:
+- return hci_dev_list(arg);
++ return hci_get_dev_list(arg);
++
++ case HCIGETDEVINFO:
++ return hci_get_dev_info(arg);
++
++ case HCIGETCONNLIST:
++ return hci_get_conn_list(arg);
+
+ case HCIDEVUP:
+ if (!capable(CAP_NET_ADMIN))
+@@ -183,48 +227,31 @@
+ return -EACCES;
+ return hci_dev_reset(arg);
+
+- case HCIRESETSTAT:
++ case HCIDEVRESTAT:
+ if (!capable(CAP_NET_ADMIN))
+ return -EACCES;
+ return hci_dev_reset_stat(arg);
+
+ case HCISETSCAN:
+- if (!capable(CAP_NET_ADMIN))
+- return -EACCES;
+- return hci_dev_setscan(arg);
+-
+ case HCISETAUTH:
+- if (!capable(CAP_NET_ADMIN))
+- return -EACCES;
+- return hci_dev_setauth(arg);
+-
+- case HCISETRAW:
+- if (!capable(CAP_NET_ADMIN))
+- return -EACCES;
+-
+- if (!hdev)
+- return -EBADFD;
+-
+- if (arg)
+- mode = HCI_RAW;
+- else
+- mode = HCI_NORMAL;
+-
+- return hci_dev_setmode(hdev, mode);
+-
++ case HCISETENCRYPT:
+ case HCISETPTYPE:
++ case HCISETLINKPOL:
++ case HCISETLINKMODE:
++ case HCISETACLMTU:
++ case HCISETSCOMTU:
+ if (!capable(CAP_NET_ADMIN))
+ return -EACCES;
+- return hci_dev_setptype(arg);
++ return hci_dev_cmd(cmd, arg);
+
+ case HCIINQUIRY:
+ return hci_inquiry(arg);
+
+- case HCIGETCONNLIST:
+- return hci_conn_list(arg);
+-
+ default:
+- return -EINVAL;
++ lock_sock(sk);
++ err = hci_sock_bound_ioctl(sk, cmd, arg);
++ release_sock(sk);
++ return err;
+ };
+ }
+
+@@ -233,28 +260,35 @@
+ struct sockaddr_hci *haddr = (struct sockaddr_hci *) addr;
+ struct sock *sk = sock->sk;
+ struct hci_dev *hdev = NULL;
++ int err = 0;
+
+- DBG("sock %p sk %p", sock, sk);
++ BT_DBG("sock %p sk %p", sock, sk);
+
+ if (!haddr || haddr->hci_family != AF_BLUETOOTH)
+ return -EINVAL;
+
++ lock_sock(sk);
++
+ if (hci_pi(sk)->hdev) {
+- /* Already bound */
+- return 0;
++ err = -EALREADY;
++ goto done;
+ }
+
+ if (haddr->hci_dev != HCI_DEV_NONE) {
+- if (!(hdev = hci_dev_get(haddr->hci_dev)))
+- return -ENODEV;
++ if (!(hdev = hci_dev_get(haddr->hci_dev))) {
++ err = -ENODEV;
++ goto done;
++ }
+
+- hdev->flags |= HCI_SOCK;
++ atomic_inc(&hdev->promisc);
+ }
+
+ hci_pi(sk)->hdev = hdev;
+ sk->state = BT_BOUND;
+
+- return 0;
++done:
++ release_sock(sk);
++ return err;
+ }
+
+ static int hci_sock_getname(struct socket *sock, struct sockaddr *addr, int *addr_len, int peer)
+@@ -262,73 +296,44 @@
+ struct sockaddr_hci *haddr = (struct sockaddr_hci *) addr;
+ struct sock *sk = sock->sk;
+
+- DBG("sock %p sk %p", sock, sk);
++ BT_DBG("sock %p sk %p", sock, sk);
++
++ lock_sock(sk);
+
+ *addr_len = sizeof(*haddr);
+ haddr->hci_family = AF_BLUETOOTH;
+ haddr->hci_dev = hci_pi(sk)->hdev->id;
+
++ release_sock(sk);
+ return 0;
+ }
+
+-static int hci_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len,
+- struct scm_cookie *scm)
+-{
+- struct sock *sk = sock->sk;
+- struct hci_dev *hdev = hci_pi(sk)->hdev;
+- struct sk_buff *skb;
+- int err;
+-
+- DBG("sock %p sk %p", sock, sk);
+-
+- if (msg->msg_flags & MSG_OOB)
+- return -EOPNOTSUPP;
+-
+- if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_NOSIGNAL|MSG_ERRQUEUE))
+- return -EINVAL;
+-
+- if (!hdev)
+- return -EBADFD;
+-
+- if (!(skb = bluez_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err)))
+- return err;
+-
+- if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
+- kfree_skb(skb);
+- return -EFAULT;
+- }
+-
+- skb->dev = (void *) hdev;
+- skb->pkt_type = *((unsigned char *) skb->data);
+- skb_pull(skb, 1);
+-
+- /* Send frame to HCI core */
+- hci_send_raw(skb);
+-
+- return len;
+-}
+-
+ static inline void hci_sock_cmsg(struct sock *sk, struct msghdr *msg, struct sk_buff *skb)
+ {
+ __u32 mask = hci_pi(sk)->cmsg_mask;
+
+ if (mask & HCI_CMSG_DIR)
+ put_cmsg(msg, SOL_HCI, HCI_CMSG_DIR, sizeof(int), &bluez_cb(skb)->incomming);
++
++ if (mask & HCI_CMSG_TSTAMP)
++ put_cmsg(msg, SOL_HCI, HCI_CMSG_TSTAMP, sizeof(skb->stamp), &skb->stamp);
+ }
+
+-static int hci_sock_recvmsg(struct socket *sock, struct msghdr *msg, int len,
+- int flags, struct scm_cookie *scm)
++static int hci_sock_recvmsg(struct socket *sock, struct msghdr *msg, int len, int flags, struct scm_cookie *scm)
+ {
+ int noblock = flags & MSG_DONTWAIT;
+ struct sock *sk = sock->sk;
+ struct sk_buff *skb;
+ int copied, err;
+
+- DBG("sock %p sk %p", sock, sk);
++ BT_DBG("sock %p, sk %p", sock, sk);
+
+- if (flags & (MSG_OOB | MSG_PEEK))
++ if (flags & (MSG_OOB))
+ return -EOPNOTSUPP;
+
++ if (sk->state == BT_CLOSED)
++ return 0;
++
+ if (!(skb = skb_recv_datagram(sk, flags, noblock, &err)))
+ return err;
+
+@@ -343,28 +348,107 @@
+ skb->h.raw = skb->data;
+ err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+
+- if (hci_pi(sk)->cmsg_mask)
+- hci_sock_cmsg(sk, msg, skb);
+-
++ hci_sock_cmsg(sk, msg, skb);
++
+ skb_free_datagram(sk, skb);
+
+ return err ? : copied;
+ }
+
++static int hci_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len,
++ struct scm_cookie *scm)
++{
++ struct sock *sk = sock->sk;
++ struct hci_dev *hdev;
++ struct sk_buff *skb;
++ int err;
++
++ BT_DBG("sock %p sk %p", sock, sk);
++
++ if (msg->msg_flags & MSG_OOB)
++ return -EOPNOTSUPP;
++
++ if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_NOSIGNAL|MSG_ERRQUEUE))
++ return -EINVAL;
++
++ if (len < 4)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ if (!(hdev = hci_pi(sk)->hdev)) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ if (!(skb = bluez_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err)))
++ goto done;
++
++ if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
++ err = -EFAULT;
++ goto drop;
++ }
++
++ skb->pkt_type = *((unsigned char *) skb->data);
++ skb_pull(skb, 1);
++ skb->dev = (void *) hdev;
++
++ if (skb->pkt_type == HCI_COMMAND_PKT) {
++ u16 opcode = __le16_to_cpu(get_unaligned((u16 *)skb->data));
++ u16 ogf = cmd_opcode_ogf(opcode);
++ u16 ocf = cmd_opcode_ocf(opcode);
++
++ if (((ogf > HCI_SFLT_MAX_OGF) ||
++ !hci_test_bit(ocf & HCI_FLT_OCF_BITS, &hci_sec_filter.ocf_mask[ogf])) &&
++ !capable(CAP_NET_RAW)) {
++ err = -EPERM;
++ goto drop;
++ }
++
++ if (test_bit(HCI_RAW, &hdev->flags) || (ogf == OGF_VENDOR_CMD)) {
++ skb_queue_tail(&hdev->raw_q, skb);
++ hci_sched_tx(hdev);
++ } else {
++ skb_queue_tail(&hdev->cmd_q, skb);
++ hci_sched_cmd(hdev);
++ }
++ } else {
++ if (!capable(CAP_NET_RAW)) {
++ err = -EPERM;
++ goto drop;
++ }
++
++ skb_queue_tail(&hdev->raw_q, skb);
++ hci_sched_tx(hdev);
++ }
++
++ err = len;
++
++done:
++ release_sock(sk);
++ return err;
++
++drop:
++ kfree_skb(skb);
++ goto done;
++}
++
+ int hci_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, int len)
+ {
+ struct sock *sk = sock->sk;
+- struct hci_filter flt;
++ struct hci_filter flt = { opcode: 0 };
+ int err = 0, opt = 0;
+
+- DBG("sk %p, opt %d", sk, optname);
++ BT_DBG("sk %p, opt %d", sk, optname);
+
+ lock_sock(sk);
+
+ switch (optname) {
+ case HCI_DATA_DIR:
+- if (get_user(opt, (int *)optval))
+- return -EFAULT;
++ if (get_user(opt, (int *)optval)) {
++ err = -EFAULT;
++ break;
++ }
+
+ if (opt)
+ hci_pi(sk)->cmsg_mask |= HCI_CMSG_DIR;
+@@ -372,12 +456,31 @@
+ hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_DIR;
+ break;
+
++ case HCI_TIME_STAMP:
++ if (get_user(opt, (int *)optval)) {
++ err = -EFAULT;
++ break;
++ }
++
++ if (opt)
++ hci_pi(sk)->cmsg_mask |= HCI_CMSG_TSTAMP;
++ else
++ hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_TSTAMP;
++ break;
++
+ case HCI_FILTER:
+ len = MIN(len, sizeof(struct hci_filter));
+ if (copy_from_user(&flt, optval, len)) {
+ err = -EFAULT;
+ break;
+ }
++
++ if (!capable(CAP_NET_RAW)) {
++ flt.type_mask &= hci_sec_filter.type_mask;
++ flt.event_mask[0] &= hci_sec_filter.event_mask[0];
++ flt.event_mask[1] &= hci_sec_filter.event_mask[1];
++ }
++
+ memcpy(&hci_pi(sk)->filter, &flt, len);
+ break;
+
+@@ -409,6 +512,16 @@
+ return -EFAULT;
+ break;
+
++ case HCI_TIME_STAMP:
++ if (hci_pi(sk)->cmsg_mask & HCI_CMSG_TSTAMP)
++ opt = 1;
++ else
++ opt = 0;
++
++ if (put_user(opt, optval))
++ return -EFAULT;
++ break;
++
+ case HCI_FILTER:
+ len = MIN(len, sizeof(struct hci_filter));
+ if (copy_to_user(optval, &hci_pi(sk)->filter, len))
+@@ -446,7 +559,7 @@
+ {
+ struct sock *sk;
+
+- DBG("sock %p", sock);
++ BT_DBG("sock %p", sock);
+
+ if (sock->type != SOCK_RAW)
+ return -ESOCKTNOSUPPORT;
+@@ -464,44 +577,31 @@
+ sk->protocol = protocol;
+ sk->state = BT_OPEN;
+
+- /* Initialize filter */
+- hci_pi(sk)->filter.type_mask = (1<<HCI_EVENT_PKT);
+- hci_pi(sk)->filter.event_mask[0] = ~0L;
+- hci_pi(sk)->filter.event_mask[1] = ~0L;
+-
+ bluez_sock_link(&hci_sk_list, sk);
+
+ MOD_INC_USE_COUNT;
+-
+ return 0;
+ }
+
+ static int hci_sock_dev_event(struct notifier_block *this, unsigned long event, void *ptr)
+ {
+ struct hci_dev *hdev = (struct hci_dev *) ptr;
+- struct sk_buff *skb;
+-
+- DBG("hdev %s event %ld", hdev->name, event);
++ evt_si_device sd;
++
++ BT_DBG("hdev %s event %ld", hdev->name, event);
+
+ /* Send event to sockets */
+- if ((skb = bluez_skb_alloc(HCI_EVENT_HDR_SIZE + EVT_HCI_DEV_EVENT_SIZE, GFP_ATOMIC))) {
+- hci_event_hdr eh = { EVT_HCI_DEV_EVENT, EVT_HCI_DEV_EVENT_SIZE };
+- evt_hci_dev_event he = { event, hdev->id };
+-
+- skb->pkt_type = HCI_EVENT_PKT;
+- memcpy(skb_put(skb, HCI_EVENT_HDR_SIZE), &eh, HCI_EVENT_HDR_SIZE);
+- memcpy(skb_put(skb, EVT_HCI_DEV_EVENT_SIZE), &he, EVT_HCI_DEV_EVENT_SIZE);
+-
+- hci_send_to_sock(NULL, skb);
+- kfree_skb(skb);
+- }
+-
++ sd.event = event;
++ sd.dev_id = hdev->id;
++ hci_si_event(NULL, EVT_SI_DEVICE, EVT_SI_DEVICE_SIZE, &sd);
++
+ if (event == HCI_DEV_UNREG) {
+ struct sock *sk;
+
+ /* Detach sockets from device */
+ read_lock(&hci_sk_list.lock);
+ for (sk = hci_sk_list.head; sk; sk = sk->next) {
++ bh_lock_sock(sk);
+ if (hci_pi(sk)->hdev == hdev) {
+ hci_pi(sk)->hdev = NULL;
+ sk->err = EPIPE;
+@@ -510,6 +610,7 @@
+
+ hci_dev_put(hdev);
+ }
++ bh_unlock_sock(sk);
+ }
+ read_unlock(&hci_sk_list.lock);
+ }
+@@ -529,21 +630,19 @@
+ int hci_sock_init(void)
+ {
+ if (bluez_sock_register(BTPROTO_HCI, &hci_sock_family_ops)) {
+- ERR("Can't register HCI socket");
++ BT_ERR("Can't register HCI socket");
+ return -EPROTO;
+ }
+
+ hci_register_notifier(&hci_sock_nblock);
+-
+ return 0;
+ }
+
+ int hci_sock_cleanup(void)
+ {
+ if (bluez_sock_unregister(BTPROTO_HCI))
+- ERR("Can't unregister HCI socket");
++ BT_ERR("Can't unregister HCI socket");
+
+ hci_unregister_notifier(&hci_sock_nblock);
+-
+ return 0;
+ }
+diff -urN linux-2.4.18/net/bluetooth/hidp/Config.in linux-2.4.18-mh15/net/bluetooth/hidp/Config.in
+--- linux-2.4.18/net/bluetooth/hidp/Config.in 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/hidp/Config.in 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,5 @@
++#
++# Bluetooth HIDP layer configuration
++#
++
++dep_tristate 'HIDP protocol support' CONFIG_BLUEZ_HIDP $CONFIG_INPUT $CONFIG_BLUEZ_L2CAP
+diff -urN linux-2.4.18/net/bluetooth/hidp/core.c linux-2.4.18-mh15/net/bluetooth/hidp/core.c
+--- linux-2.4.18/net/bluetooth/hidp/core.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/hidp/core.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,655 @@
++/*
++ HIDP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2003-2004 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <linux/init.h>
++#include <net/sock.h>
++
++#include <linux/input.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/l2cap.h>
++
++#include "hidp.h"
++
++#ifndef CONFIG_BT_HIDP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define VERSION "1.0"
++
++static DECLARE_RWSEM(hidp_session_sem);
++static LIST_HEAD(hidp_session_list);
++
++static unsigned char hidp_keycode[256] = {
++ 0, 0, 0, 0, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38,
++ 50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44, 2, 3,
++ 4, 5, 6, 7, 8, 9, 10, 11, 28, 1, 14, 15, 57, 12, 13, 26,
++ 27, 43, 43, 39, 40, 41, 51, 52, 53, 58, 59, 60, 61, 62, 63, 64,
++ 65, 66, 67, 68, 87, 88, 99, 70,119,110,102,104,111,107,109,106,
++ 105,108,103, 69, 98, 55, 74, 78, 96, 79, 80, 81, 75, 76, 77, 71,
++ 72, 73, 82, 83, 86,127,116,117,183,184,185,186,187,188,189,190,
++ 191,192,193,194,134,138,130,132,128,129,131,137,133,135,136,113,
++ 115,114, 0, 0, 0,121, 0, 89, 93,124, 92, 94, 95, 0, 0, 0,
++ 122,123, 90, 91, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
++ 29, 42, 56,125, 97, 54,100,126,164,166,165,163,161,115,114,113,
++ 150,158,159,128,136,177,178,176,142,152,173,140
++};
++
++static struct hidp_session *__hidp_get_session(bdaddr_t *bdaddr)
++{
++ struct hidp_session *session;
++ struct list_head *p;
++
++ BT_DBG("");
++
++ list_for_each(p, &hidp_session_list) {
++ session = list_entry(p, struct hidp_session, list);
++ if (!bacmp(bdaddr, &session->bdaddr))
++ return session;
++ }
++ return NULL;
++}
++
++static void __hidp_link_session(struct hidp_session *session)
++{
++ MOD_INC_USE_COUNT;
++ list_add(&session->list, &hidp_session_list);
++}
++
++static void __hidp_unlink_session(struct hidp_session *session)
++{
++ list_del(&session->list);
++ MOD_DEC_USE_COUNT;
++}
++
++static void __hidp_copy_session(struct hidp_session *session, struct hidp_conninfo *ci)
++{
++ bacpy(&ci->bdaddr, &session->bdaddr);
++
++ ci->flags = session->flags;
++ ci->state = session->state;
++
++ ci->vendor = 0x0000;
++ ci->product = 0x0000;
++ ci->version = 0x0000;
++ memset(ci->name, 0, 128);
++
++ if (session->input) {
++ ci->vendor = session->input->idvendor;
++ ci->product = session->input->idproduct;
++ ci->version = session->input->idversion;
++ if (session->input->name)
++ strncpy(ci->name, session->input->name, 128);
++ else
++ strncpy(ci->name, "HID Boot Device", 128);
++ }
++}
++
++static int hidp_input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
++{
++ struct hidp_session *session = dev->private;
++ struct sk_buff *skb;
++ unsigned char newleds;
++
++ BT_DBG("session %p hid %p data %p size %d", session, device, data, size);
++
++ if (type != EV_LED)
++ return -1;
++
++ newleds = (!!test_bit(LED_KANA, dev->led) << 3) |
++ (!!test_bit(LED_COMPOSE, dev->led) << 3) |
++ (!!test_bit(LED_SCROLLL, dev->led) << 2) |
++ (!!test_bit(LED_CAPSL, dev->led) << 1) |
++ (!!test_bit(LED_NUML, dev->led));
++
++ if (session->leds == newleds)
++ return 0;
++
++ session->leds = newleds;
++
++ if (!(skb = alloc_skb(3, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for new frame");
++ return -ENOMEM;
++ }
++
++ *skb_put(skb, 1) = 0xa2;
++ *skb_put(skb, 1) = 0x01;
++ *skb_put(skb, 1) = newleds;
++
++ skb_queue_tail(&session->intr_transmit, skb);
++
++ hidp_schedule(session);
++
++ return 0;
++}
++
++static void hidp_input_report(struct hidp_session *session, struct sk_buff *skb)
++{
++ struct input_dev *dev = session->input;
++ unsigned char *keys = session->keys;
++ unsigned char *udata = skb->data + 1;
++ signed char *sdata = skb->data + 1;
++ int i, size = skb->len - 1;
++
++ switch (skb->data[0]) {
++ case 0x01: /* Keyboard report */
++ for (i = 0; i < 8; i++)
++ input_report_key(dev, hidp_keycode[i + 224], (udata[0] >> i) & 1);
++
++ for (i = 2; i < 8; i++) {
++ if (keys[i] > 3 && memscan(udata + 2, keys[i], 6) == udata + 8) {
++ if (hidp_keycode[keys[i]])
++ input_report_key(dev, hidp_keycode[keys[i]], 0);
++ else
++ BT_ERR("Unknown key (scancode %#x) released.", keys[i]);
++ }
++
++ if (udata[i] > 3 && memscan(keys + 2, udata[i], 6) == keys + 8) {
++ if (hidp_keycode[udata[i]])
++ input_report_key(dev, hidp_keycode[udata[i]], 1);
++ else
++ BT_ERR("Unknown key (scancode %#x) pressed.", udata[i]);
++ }
++ }
++
++ memcpy(keys, udata, 8);
++ break;
++
++ case 0x02: /* Mouse report */
++ input_report_key(dev, BTN_LEFT, sdata[0] & 0x01);
++ input_report_key(dev, BTN_RIGHT, sdata[0] & 0x02);
++ input_report_key(dev, BTN_MIDDLE, sdata[0] & 0x04);
++ input_report_key(dev, BTN_SIDE, sdata[0] & 0x08);
++ input_report_key(dev, BTN_EXTRA, sdata[0] & 0x10);
++
++ input_report_rel(dev, REL_X, sdata[1]);
++ input_report_rel(dev, REL_Y, sdata[2]);
++
++ if (size > 3)
++ input_report_rel(dev, REL_WHEEL, sdata[3]);
++ break;
++ }
++
++ input_event(dev, EV_RST, 0, 0);
++}
++
++static void hidp_idle_timeout(unsigned long arg)
++{
++ struct hidp_session *session = (struct hidp_session *) arg;
++
++ atomic_inc(&session->terminate);
++ hidp_schedule(session);
++}
++
++static inline void hidp_set_timer(struct hidp_session *session)
++{
++ if (session->idle_to > 0)
++ mod_timer(&session->timer, jiffies + HZ * session->idle_to);
++}
++
++static inline void hidp_del_timer(struct hidp_session *session)
++{
++ if (session->idle_to > 0)
++ del_timer(&session->timer);
++}
++
++static inline void hidp_send_message(struct hidp_session *session, unsigned char hdr)
++{
++ struct sk_buff *skb;
++
++ BT_DBG("session %p", session);
++
++ if (!(skb = alloc_skb(1, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for message");
++ return;
++ }
++
++ *skb_put(skb, 1) = hdr;
++
++ skb_queue_tail(&session->ctrl_transmit, skb);
++
++ hidp_schedule(session);
++}
++
++static inline int hidp_recv_frame(struct hidp_session *session, struct sk_buff *skb)
++{
++ __u8 hdr;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ hdr = skb->data[0];
++ skb_pull(skb, 1);
++
++ if (hdr == 0xa1) {
++ hidp_set_timer(session);
++
++ if (session->input)
++ hidp_input_report(session, skb);
++ } else {
++ BT_DBG("Unsupported protocol header 0x%02x", hdr);
++ }
++
++ kfree_skb(skb);
++ return 0;
++}
++
++static int hidp_send_frame(struct socket *sock, unsigned char *data, int len)
++{
++ struct iovec iv = { data, len };
++ struct msghdr msg;
++
++ BT_DBG("sock %p data %p len %d", sock, data, len);
++
++ if (!len)
++ return 0;
++
++ memset(&msg, 0, sizeof(msg));
++ msg.msg_iovlen = 1;
++ msg.msg_iov = &iv;
++
++ return sock_sendmsg(sock, &msg, len);
++}
++
++static int hidp_process_transmit(struct hidp_session *session)
++{
++ struct sk_buff *skb;
++
++ BT_DBG("session %p", session);
++
++ while ((skb = skb_dequeue(&session->ctrl_transmit))) {
++ if (hidp_send_frame(session->ctrl_sock, skb->data, skb->len) < 0) {
++ skb_queue_head(&session->ctrl_transmit, skb);
++ break;
++ }
++
++ hidp_set_timer(session);
++ kfree_skb(skb);
++ }
++
++ while ((skb = skb_dequeue(&session->intr_transmit))) {
++ if (hidp_send_frame(session->intr_sock, skb->data, skb->len) < 0) {
++ skb_queue_head(&session->intr_transmit, skb);
++ break;
++ }
++
++ hidp_set_timer(session);
++ kfree_skb(skb);
++ }
++
++ return skb_queue_len(&session->ctrl_transmit) +
++ skb_queue_len(&session->intr_transmit);
++}
++
++static int hidp_session(void *arg)
++{
++ struct hidp_session *session = arg;
++ struct sock *ctrl_sk = session->ctrl_sock->sk;
++ struct sock *intr_sk = session->intr_sock->sk;
++ struct sk_buff *skb;
++ int vendor = 0x0000, product = 0x0000;
++ wait_queue_t ctrl_wait, intr_wait;
++ unsigned long timeo = HZ;
++
++ BT_DBG("session %p", session);
++
++ if (session->input) {
++ vendor = session->input->idvendor;
++ product = session->input->idproduct;
++ }
++
++ daemonize(); reparent_to_init();
++
++ sprintf(current->comm, "khidpd_%04x%04x", vendor, product);
++
++ sigfillset(&current->blocked);
++ flush_signals(current);
++
++ current->nice = -15;
++
++ set_fs(KERNEL_DS);
++
++ init_waitqueue_entry(&ctrl_wait, current);
++ init_waitqueue_entry(&intr_wait, current);
++ add_wait_queue(ctrl_sk->sleep, &ctrl_wait);
++ add_wait_queue(intr_sk->sleep, &intr_wait);
++ while (!atomic_read(&session->terminate)) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (ctrl_sk->state != BT_CONNECTED || intr_sk->state != BT_CONNECTED)
++ break;
++
++ while ((skb = skb_dequeue(&ctrl_sk->receive_queue))) {
++ skb_orphan(skb);
++ hidp_recv_frame(session, skb);
++ }
++
++ while ((skb = skb_dequeue(&intr_sk->receive_queue))) {
++ skb_orphan(skb);
++ hidp_recv_frame(session, skb);
++ }
++
++ hidp_process_transmit(session);
++
++ schedule();
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(intr_sk->sleep, &intr_wait);
++ remove_wait_queue(ctrl_sk->sleep, &ctrl_wait);
++
++ down_write(&hidp_session_sem);
++
++ hidp_del_timer(session);
++
++ if (intr_sk->state != BT_CONNECTED) {
++ init_waitqueue_entry(&ctrl_wait, current);
++ add_wait_queue(ctrl_sk->sleep, &ctrl_wait);
++ while (timeo && ctrl_sk->state != BT_CLOSED) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ timeo = schedule_timeout(timeo);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(ctrl_sk->sleep, &ctrl_wait);
++ timeo = HZ;
++ }
++
++ fput(session->ctrl_sock->file);
++
++ init_waitqueue_entry(&intr_wait, current);
++ add_wait_queue(intr_sk->sleep, &intr_wait);
++ while (timeo && intr_sk->state != BT_CLOSED) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ timeo = schedule_timeout(timeo);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(intr_sk->sleep, &intr_wait);
++
++ fput(session->intr_sock->file);
++
++ __hidp_unlink_session(session);
++
++ if (session->input) {
++ input_unregister_device(session->input);
++ kfree(session->input);
++ }
++
++ up_write(&hidp_session_sem);
++
++ kfree(session);
++ return 0;
++}
++
++static inline void hidp_setup_input(struct hidp_session *session, struct hidp_connadd_req *req)
++{
++ struct input_dev *input = session->input;
++ int i;
++
++ input->private = session;
++
++ input->idbus = BUS_BLUETOOTH;
++ input->idvendor = req->vendor;
++ input->idproduct = req->product;
++ input->idversion = req->version;
++
++ if (req->subclass & 0x40) {
++ set_bit(EV_KEY, input->evbit);
++ set_bit(EV_LED, input->evbit);
++ set_bit(EV_REP, input->evbit);
++
++ set_bit(LED_NUML, input->ledbit);
++ set_bit(LED_CAPSL, input->ledbit);
++ set_bit(LED_SCROLLL, input->ledbit);
++ set_bit(LED_COMPOSE, input->ledbit);
++ set_bit(LED_KANA, input->ledbit);
++
++ for (i = 0; i < sizeof(hidp_keycode); i++)
++ set_bit(hidp_keycode[i], input->keybit);
++ clear_bit(0, input->keybit);
++ }
++
++ if (req->subclass & 0x80) {
++ input->evbit[0] = BIT(EV_KEY) | BIT(EV_REL);
++ input->keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_RIGHT) | BIT(BTN_MIDDLE);
++ input->relbit[0] = BIT(REL_X) | BIT(REL_Y);
++ input->keybit[LONG(BTN_MOUSE)] |= BIT(BTN_SIDE) | BIT(BTN_EXTRA);
++ input->relbit[0] |= BIT(REL_WHEEL);
++ }
++
++ input->event = hidp_input_event;
++
++ input_register_device(input);
++}
++
++int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock, struct socket *intr_sock)
++{
++ struct hidp_session *session, *s;
++ int err;
++
++ BT_DBG("");
++
++ if (bacmp(&bluez_pi(ctrl_sock->sk)->src, &bluez_pi(intr_sock->sk)->src) ||
++ bacmp(&bluez_pi(ctrl_sock->sk)->dst, &bluez_pi(intr_sock->sk)->dst))
++ return -ENOTUNIQ;
++
++ session = kmalloc(sizeof(struct hidp_session), GFP_KERNEL);
++ if (!session)
++ return -ENOMEM;
++ memset(session, 0, sizeof(struct hidp_session));
++
++ session->input = kmalloc(sizeof(struct input_dev), GFP_KERNEL);
++ if (!session->input) {
++ kfree(session);
++ return -ENOMEM;
++ }
++ memset(session->input, 0, sizeof(struct input_dev));
++
++ down_write(&hidp_session_sem);
++
++ s = __hidp_get_session(&bluez_pi(ctrl_sock->sk)->dst);
++ if (s && s->state == BT_CONNECTED) {
++ err = -EEXIST;
++ goto failed;
++ }
++
++ bacpy(&session->bdaddr, &bluez_pi(ctrl_sock->sk)->dst);
++
++ session->ctrl_mtu = min_t(uint, l2cap_pi(ctrl_sock->sk)->omtu, l2cap_pi(ctrl_sock->sk)->imtu);
++ session->intr_mtu = min_t(uint, l2cap_pi(intr_sock->sk)->omtu, l2cap_pi(intr_sock->sk)->imtu);
++
++ BT_DBG("ctrl mtu %d intr mtu %d", session->ctrl_mtu, session->intr_mtu);
++
++ session->ctrl_sock = ctrl_sock;
++ session->intr_sock = intr_sock;
++ session->state = BT_CONNECTED;
++
++ init_timer(&session->timer);
++
++ session->timer.function = hidp_idle_timeout;
++ session->timer.data = (unsigned long) session;
++
++ skb_queue_head_init(&session->ctrl_transmit);
++ skb_queue_head_init(&session->intr_transmit);
++
++ session->flags = req->flags & (1 << HIDP_BLUETOOTH_VENDOR_ID);
++ session->idle_to = req->idle_to;
++
++ if (session->input)
++ hidp_setup_input(session, req);
++
++ __hidp_link_session(session);
++
++ hidp_set_timer(session);
++
++ err = kernel_thread(hidp_session, session, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
++ if (err < 0)
++ goto unlink;
++
++ if (session->input) {
++ hidp_send_message(session, 0x70);
++ session->flags |= (1 << HIDP_BOOT_PROTOCOL_MODE);
++
++ session->leds = 0xff;
++ hidp_input_event(session->input, EV_LED, 0, 0);
++ }
++
++ up_write(&hidp_session_sem);
++ return 0;
++
++unlink:
++ hidp_del_timer(session);
++
++ __hidp_unlink_session(session);
++
++ if (session->input)
++ input_unregister_device(session->input);
++
++failed:
++ up_write(&hidp_session_sem);
++
++ if (session->input)
++ kfree(session->input);
++
++ kfree(session);
++ return err;
++}
++
++int hidp_del_connection(struct hidp_conndel_req *req)
++{
++ struct hidp_session *session;
++ int err = 0;
++
++ BT_DBG("");
++
++ down_read(&hidp_session_sem);
++
++ session = __hidp_get_session(&req->bdaddr);
++ if (session) {
++ if (req->flags & (1 << HIDP_VIRTUAL_CABLE_UNPLUG)) {
++ hidp_send_message(session, 0x15);
++ } else {
++ /* Flush the transmit queues */
++ skb_queue_purge(&session->ctrl_transmit);
++ skb_queue_purge(&session->intr_transmit);
++
++ /* Kill session thread */
++ atomic_inc(&session->terminate);
++ hidp_schedule(session);
++ }
++ } else
++ err = -ENOENT;
++
++ up_read(&hidp_session_sem);
++ return err;
++}
++
++int hidp_get_connlist(struct hidp_connlist_req *req)
++{
++ struct list_head *p;
++ int err = 0, n = 0;
++
++ BT_DBG("");
++
++ down_read(&hidp_session_sem);
++
++ list_for_each(p, &hidp_session_list) {
++ struct hidp_session *session;
++ struct hidp_conninfo ci;
++
++ session = list_entry(p, struct hidp_session, list);
++
++ __hidp_copy_session(session, &ci);
++
++ if (copy_to_user(req->ci, &ci, sizeof(ci))) {
++ err = -EFAULT;
++ break;
++ }
++
++ if (++n >= req->cnum)
++ break;
++
++ req->ci++;
++ }
++ req->cnum = n;
++
++ up_read(&hidp_session_sem);
++ return err;
++}
++
++int hidp_get_conninfo(struct hidp_conninfo *ci)
++{
++ struct hidp_session *session;
++ int err = 0;
++
++ down_read(&hidp_session_sem);
++
++ session = __hidp_get_session(&ci->bdaddr);
++ if (session)
++ __hidp_copy_session(session, ci);
++ else
++ err = -ENOENT;
++
++ up_read(&hidp_session_sem);
++ return err;
++}
++
++static int __init hidp_init(void)
++{
++ l2cap_load();
++
++ hidp_init_sockets();
++
++ BT_INFO("BlueZ HIDP ver %s", VERSION);
++ BT_INFO("Copyright (C) 2003-2004 Marcel Holtmann <marcel@holtmann.org>");
++
++ return 0;
++}
++
++static void __exit hidp_exit(void)
++{
++ hidp_cleanup_sockets();
++}
++
++module_init(hidp_init);
++module_exit(hidp_exit);
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("Bluetooth HIDP ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/hidp/hidp.h linux-2.4.18-mh15/net/bluetooth/hidp/hidp.h
+--- linux-2.4.18/net/bluetooth/hidp/hidp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/hidp/hidp.h 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,122 @@
++/*
++ HIDP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2003-2004 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#ifndef __HIDP_H
++#define __HIDP_H
++
++#include <linux/types.h>
++#include <net/bluetooth/bluetooth.h>
++
++/* HIDP ioctl defines */
++#define HIDPCONNADD _IOW('H', 200, int)
++#define HIDPCONNDEL _IOW('H', 201, int)
++#define HIDPGETCONNLIST _IOR('H', 210, int)
++#define HIDPGETCONNINFO _IOR('H', 211, int)
++
++#define HIDP_VIRTUAL_CABLE_UNPLUG 0
++#define HIDP_BOOT_PROTOCOL_MODE 1
++#define HIDP_BLUETOOTH_VENDOR_ID 9
++
++struct hidp_connadd_req {
++ int ctrl_sock; // Connected control socket
++ int intr_sock; // Connteted interrupt socket
++ __u16 parser;
++ __u16 rd_size;
++ __u8 *rd_data;
++ __u8 country;
++ __u8 subclass;
++ __u16 vendor;
++ __u16 product;
++ __u16 version;
++ __u32 flags;
++ __u32 idle_to;
++ char name[128];
++};
++
++struct hidp_conndel_req {
++ bdaddr_t bdaddr;
++ __u32 flags;
++};
++
++struct hidp_conninfo {
++ bdaddr_t bdaddr;
++ __u32 flags;
++ __u16 state;
++ __u16 vendor;
++ __u16 product;
++ __u16 version;
++ char name[128];
++};
++
++struct hidp_connlist_req {
++ __u32 cnum;
++ struct hidp_conninfo *ci;
++};
++
++int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock, struct socket *intr_sock);
++int hidp_del_connection(struct hidp_conndel_req *req);
++int hidp_get_connlist(struct hidp_connlist_req *req);
++int hidp_get_conninfo(struct hidp_conninfo *ci);
++
++/* HIDP session defines */
++struct hidp_session {
++ struct list_head list;
++
++ struct socket *ctrl_sock;
++ struct socket *intr_sock;
++
++ bdaddr_t bdaddr;
++
++ unsigned long state;
++ unsigned long flags;
++ unsigned long idle_to;
++
++ uint ctrl_mtu;
++ uint intr_mtu;
++
++ atomic_t terminate;
++
++ unsigned char keys[8];
++ unsigned char leds;
++
++ struct input_dev *input;
++
++ struct timer_list timer;
++
++ struct sk_buff_head ctrl_transmit;
++ struct sk_buff_head intr_transmit;
++};
++
++static inline void hidp_schedule(struct hidp_session *session)
++{
++ struct sock *ctrl_sk = session->ctrl_sock->sk;
++ struct sock *intr_sk = session->intr_sock->sk;
++
++ wake_up_interruptible(ctrl_sk->sleep);
++ wake_up_interruptible(intr_sk->sleep);
++}
++
++/* HIDP init defines */
++extern int __init hidp_init_sockets(void);
++extern void __exit hidp_cleanup_sockets(void);
++
++#endif /* __HIDP_H */
+diff -urN linux-2.4.18/net/bluetooth/hidp/Makefile linux-2.4.18-mh15/net/bluetooth/hidp/Makefile
+--- linux-2.4.18/net/bluetooth/hidp/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/hidp/Makefile 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,10 @@
++#
++# Makefile for the Linux Bluetooth HIDP layer
++#
++
++O_TARGET := hidp.o
++
++obj-y := core.o sock.o
++obj-m += $(O_TARGET)
++
++include $(TOPDIR)/Rules.make
+diff -urN linux-2.4.18/net/bluetooth/hidp/sock.c linux-2.4.18-mh15/net/bluetooth/hidp/sock.c
+--- linux-2.4.18/net/bluetooth/hidp/sock.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/hidp/sock.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,212 @@
++/*
++ HIDP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2003-2004 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <linux/init.h>
++#include <net/sock.h>
++
++#include "hidp.h"
++
++#ifndef CONFIG_BT_HIDP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++static int hidp_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p sk %p", sock, sk);
++
++ if (!sk)
++ return 0;
++
++ sock_orphan(sk);
++ sock_put(sk);
++
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++static int hidp_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++{
++ struct hidp_connadd_req ca;
++ struct hidp_conndel_req cd;
++ struct hidp_connlist_req cl;
++ struct hidp_conninfo ci;
++ struct socket *csock;
++ struct socket *isock;
++ int err;
++
++ BT_DBG("cmd %x arg %lx", cmd, arg);
++
++ switch (cmd) {
++ case HIDPCONNADD:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&ca, (void *) arg, sizeof(ca)))
++ return -EFAULT;
++
++ csock = sockfd_lookup(ca.ctrl_sock, &err);
++ if (!csock)
++ return err;
++
++ isock = sockfd_lookup(ca.intr_sock, &err);
++ if (!isock) {
++ fput(csock->file);
++ return err;
++ }
++
++ if (csock->sk->state != BT_CONNECTED || isock->sk->state != BT_CONNECTED) {
++ fput(csock->file);
++ fput(isock->file);
++ return -EBADFD;
++ }
++
++ err = hidp_add_connection(&ca, csock, isock);
++ if (!err) {
++ if (copy_to_user((void *) arg, &ca, sizeof(ca)))
++ err = -EFAULT;
++ } else {
++ fput(csock->file);
++ fput(isock->file);
++ }
++
++ return err;
++
++ case HIDPCONNDEL:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&cd, (void *) arg, sizeof(cd)))
++ return -EFAULT;
++
++ return hidp_del_connection(&cd);
++
++ case HIDPGETCONNLIST:
++ if (copy_from_user(&cl, (void *) arg, sizeof(cl)))
++ return -EFAULT;
++
++ if (cl.cnum <= 0)
++ return -EINVAL;
++
++ err = hidp_get_connlist(&cl);
++ if (!err && copy_to_user((void *) arg, &cl, sizeof(cl)))
++ return -EFAULT;
++
++ return err;
++
++ case HIDPGETCONNINFO:
++ if (copy_from_user(&ci, (void *) arg, sizeof(ci)))
++ return -EFAULT;
++
++ err = hidp_get_conninfo(&ci);
++ if (!err && copy_to_user((void *) arg, &ci, sizeof(ci)))
++ return -EFAULT;
++
++ return err;
++ }
++
++ return -EINVAL;
++}
++
++static struct proto_ops hidp_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: hidp_sock_release,
++ ioctl: hidp_sock_ioctl,
++ bind: sock_no_bind,
++ getname: sock_no_getname,
++ sendmsg: sock_no_sendmsg,
++ recvmsg: sock_no_recvmsg,
++ poll: sock_no_poll,
++ listen: sock_no_listen,
++ shutdown: sock_no_shutdown,
++ setsockopt: sock_no_setsockopt,
++ getsockopt: sock_no_getsockopt,
++ connect: sock_no_connect,
++ socketpair: sock_no_socketpair,
++ accept: sock_no_accept,
++ mmap: sock_no_mmap
++};
++
++static int hidp_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ if (sock->type != SOCK_RAW)
++ return -ESOCKTNOSUPPORT;
++
++ sock->ops = &hidp_sock_ops;
++
++ if (!(sk = sk_alloc(PF_BLUETOOTH, GFP_KERNEL, 1)))
++ return -ENOMEM;
++
++ MOD_INC_USE_COUNT;
++
++ sock->state = SS_UNCONNECTED;
++ sock_init_data(sock, sk);
++
++ sk->destruct = NULL;
++ sk->protocol = protocol;
++
++ return 0;
++}
++
++static struct net_proto_family hidp_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: hidp_sock_create
++};
++
++int __init hidp_init_sockets(void)
++{
++ int err;
++
++ if ((err = bluez_sock_register(BTPROTO_HIDP, &hidp_sock_family_ops)))
++ BT_ERR("Can't register HIDP socket layer (%d)", err);
++
++ return err;
++}
++
++void __exit hidp_cleanup_sockets(void)
++{
++ int err;
++
++ if ((err = bluez_sock_unregister(BTPROTO_HIDP)))
++ BT_ERR("Can't unregister HIDP socket layer (%d)", err);
++}
+diff -urN linux-2.4.18/net/bluetooth/l2cap.c linux-2.4.18-mh15/net/bluetooth/l2cap.c
+--- linux-2.4.18/net/bluetooth/l2cap.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/l2cap.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,2222 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * BlueZ L2CAP core and sockets.
++ *
++ * $Id: l2cap.c,v 1.15 2002/09/09 01:14:52 maxk Exp $
++ */
++#define VERSION "2.3"
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/init.h>
++#include <linux/skbuff.h>
++#include <linux/interrupt.h>
++#include <linux/socket.h>
++#include <linux/skbuff.h>
++#include <linux/proc_fs.h>
++#include <linux/list.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include <net/bluetooth/l2cap.h>
++
++#ifndef L2CAP_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
++
++static struct proto_ops l2cap_sock_ops;
++
++struct bluez_sock_list l2cap_sk_list = {
++ lock: RW_LOCK_UNLOCKED
++};
++
++static int l2cap_conn_del(struct hci_conn *conn, int err);
++
++static inline void l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent);
++static void l2cap_chan_del(struct sock *sk, int err);
++static int l2cap_chan_send(struct sock *sk, struct msghdr *msg, int len);
++
++static void __l2cap_sock_close(struct sock *sk, int reason);
++static void l2cap_sock_close(struct sock *sk);
++static void l2cap_sock_kill(struct sock *sk);
++
++static int l2cap_send_req(struct l2cap_conn *conn, __u8 code, __u16 len, void *data);
++static int l2cap_send_rsp(struct l2cap_conn *conn, __u8 ident, __u8 code, __u16 len, void *data);
++
++/* ----- L2CAP timers ------ */
++static void l2cap_sock_timeout(unsigned long arg)
++{
++ struct sock *sk = (struct sock *) arg;
++
++ BT_DBG("sock %p state %d", sk, sk->state);
++
++ bh_lock_sock(sk);
++ __l2cap_sock_close(sk, ETIMEDOUT);
++ bh_unlock_sock(sk);
++
++ l2cap_sock_kill(sk);
++ sock_put(sk);
++}
++
++static void l2cap_sock_set_timer(struct sock *sk, long timeout)
++{
++ BT_DBG("sk %p state %d timeout %ld", sk, sk->state, timeout);
++
++ if (!mod_timer(&sk->timer, jiffies + timeout))
++ sock_hold(sk);
++}
++
++static void l2cap_sock_clear_timer(struct sock *sk)
++{
++ BT_DBG("sock %p state %d", sk, sk->state);
++
++ if (timer_pending(&sk->timer) && del_timer(&sk->timer))
++ __sock_put(sk);
++}
++
++static void l2cap_sock_init_timer(struct sock *sk)
++{
++ init_timer(&sk->timer);
++ sk->timer.function = l2cap_sock_timeout;
++ sk->timer.data = (unsigned long)sk;
++}
++
++/* -------- L2CAP connections --------- */
++static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, __u8 status)
++{
++ struct l2cap_conn *conn;
++
++ if ((conn = hcon->l2cap_data))
++ return conn;
++
++ if (status)
++ return conn;
++
++ if (!(conn = kmalloc(sizeof(struct l2cap_conn), GFP_ATOMIC)))
++ return NULL;
++ memset(conn, 0, sizeof(struct l2cap_conn));
++
++ hcon->l2cap_data = conn;
++ conn->hcon = hcon;
++
++ conn->mtu = hcon->hdev->acl_mtu;
++ conn->src = &hcon->hdev->bdaddr;
++ conn->dst = &hcon->dst;
++
++ spin_lock_init(&conn->lock);
++ conn->chan_list.lock = RW_LOCK_UNLOCKED;
++
++ BT_DBG("hcon %p conn %p", hcon, conn);
++
++ MOD_INC_USE_COUNT;
++ return conn;
++}
++
++static int l2cap_conn_del(struct hci_conn *hcon, int err)
++{
++ struct l2cap_conn *conn;
++ struct sock *sk;
++
++ if (!(conn = hcon->l2cap_data))
++ return 0;
++
++ BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
++
++ if (conn->rx_skb)
++ kfree_skb(conn->rx_skb);
++
++ /* Kill channels */
++ while ((sk = conn->chan_list.head)) {
++ bh_lock_sock(sk);
++ l2cap_chan_del(sk, err);
++ bh_unlock_sock(sk);
++ l2cap_sock_kill(sk);
++ }
++
++ hcon->l2cap_data = NULL;
++ kfree(conn);
++
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++/* -------- Socket interface ---------- */
++static struct sock *__l2cap_get_sock_by_addr(__u16 psm, bdaddr_t *src)
++{
++ struct sock *sk;
++ for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
++ if (sk->sport == psm && !bacmp(&bluez_pi(sk)->src, src))
++ break;
++ }
++ return sk;
++}
++
++/* Find socket with psm and source bdaddr.
++ * Returns closest match.
++ */
++static struct sock *__l2cap_get_sock_by_psm(int state, __u16 psm, bdaddr_t *src)
++{
++ struct sock *sk, *sk1 = NULL;
++
++ for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
++ if (state && sk->state != state)
++ continue;
++
++ if (l2cap_pi(sk)->psm == psm) {
++ /* Exact match. */
++ if (!bacmp(&bluez_pi(sk)->src, src))
++ break;
++
++ /* Closest match */
++ if (!bacmp(&bluez_pi(sk)->src, BDADDR_ANY))
++ sk1 = sk;
++ }
++ }
++ return sk ? sk : sk1;
++}
++
++/* Find socket with given address (psm, src).
++ * Returns locked socket */
++static inline struct sock *l2cap_get_sock_by_psm(int state, __u16 psm, bdaddr_t *src)
++{
++ struct sock *s;
++ read_lock(&l2cap_sk_list.lock);
++ s = __l2cap_get_sock_by_psm(state, psm, src);
++ if (s) bh_lock_sock(s);
++ read_unlock(&l2cap_sk_list.lock);
++ return s;
++}
++
++static void l2cap_sock_destruct(struct sock *sk)
++{
++ BT_DBG("sk %p", sk);
++
++ skb_queue_purge(&sk->receive_queue);
++ skb_queue_purge(&sk->write_queue);
++
++ MOD_DEC_USE_COUNT;
++}
++
++static void l2cap_sock_cleanup_listen(struct sock *parent)
++{
++ struct sock *sk;
++
++ BT_DBG("parent %p", parent);
++
++ /* Close not yet accepted channels */
++ while ((sk = bluez_accept_dequeue(parent, NULL)))
++ l2cap_sock_close(sk);
++
++ parent->state = BT_CLOSED;
++ parent->zapped = 1;
++}
++
++/* Kill socket (only if zapped and orphan)
++ * Must be called on unlocked socket.
++ */
++static void l2cap_sock_kill(struct sock *sk)
++{
++ if (!sk->zapped || sk->socket)
++ return;
++
++ BT_DBG("sk %p state %d", sk, sk->state);
++
++ /* Kill poor orphan */
++ bluez_sock_unlink(&l2cap_sk_list, sk);
++ sk->dead = 1;
++ sock_put(sk);
++}
++
++/* Close socket.
++ */
++static void __l2cap_sock_close(struct sock *sk, int reason)
++{
++ BT_DBG("sk %p state %d socket %p", sk, sk->state, sk->socket);
++
++ switch (sk->state) {
++ case BT_LISTEN:
++ l2cap_sock_cleanup_listen(sk);
++ break;
++
++ case BT_CONNECTED:
++ case BT_CONFIG:
++ case BT_CONNECT2:
++ if (sk->type == SOCK_SEQPACKET) {
++ struct l2cap_conn *conn = l2cap_pi(sk)->conn;
++ l2cap_disconn_req req;
++
++ sk->state = BT_DISCONN;
++ l2cap_sock_set_timer(sk, sk->sndtimeo);
++
++ req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ l2cap_send_req(conn, L2CAP_DISCONN_REQ, L2CAP_DISCONN_REQ_SIZE, &req);
++ } else {
++ l2cap_chan_del(sk, reason);
++ }
++ break;
++
++ case BT_CONNECT:
++ case BT_DISCONN:
++ l2cap_chan_del(sk, reason);
++ break;
++
++ default:
++ sk->zapped = 1;
++ break;
++ };
++}
++
++/* Must be called on unlocked socket. */
++static void l2cap_sock_close(struct sock *sk)
++{
++ l2cap_sock_clear_timer(sk);
++ lock_sock(sk);
++ __l2cap_sock_close(sk, ECONNRESET);
++ release_sock(sk);
++ l2cap_sock_kill(sk);
++}
++
++static void l2cap_sock_init(struct sock *sk, struct sock *parent)
++{
++ struct l2cap_pinfo *pi = l2cap_pi(sk);
++
++ BT_DBG("sk %p", sk);
++
++ if (parent) {
++ sk->type = parent->type;
++ pi->imtu = l2cap_pi(parent)->imtu;
++ pi->omtu = l2cap_pi(parent)->omtu;
++ pi->link_mode = l2cap_pi(parent)->link_mode;
++ } else {
++ pi->imtu = L2CAP_DEFAULT_MTU;
++ pi->omtu = 0;
++ pi->link_mode = 0;
++ }
++
++ /* Default config options */
++ pi->conf_mtu = L2CAP_DEFAULT_MTU;
++ pi->flush_to = L2CAP_DEFAULT_FLUSH_TO;
++}
++
++static struct sock *l2cap_sock_alloc(struct socket *sock, int proto, int prio)
++{
++ struct sock *sk;
++
++ if (!(sk = sk_alloc(PF_BLUETOOTH, prio, 1)))
++ return NULL;
++
++ bluez_sock_init(sock, sk);
++
++ sk->zapped = 0;
++
++ sk->destruct = l2cap_sock_destruct;
++ sk->sndtimeo = L2CAP_CONN_TIMEOUT;
++
++ sk->protocol = proto;
++ sk->state = BT_OPEN;
++
++ l2cap_sock_init_timer(sk);
++
++ bluez_sock_link(&l2cap_sk_list, sk);
++
++ MOD_INC_USE_COUNT;
++ return sk;
++}
++
++static int l2cap_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ sock->state = SS_UNCONNECTED;
++
++ if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
++ return -ESOCKTNOSUPPORT;
++
++ if (sock->type == SOCK_RAW && !capable(CAP_NET_RAW))
++ return -EPERM;
++
++ sock->ops = &l2cap_sock_ops;
++
++ if (!(sk = l2cap_sock_alloc(sock, protocol, GFP_KERNEL)))
++ return -ENOMEM;
++
++ l2cap_sock_init(sk, NULL);
++ return 0;
++}
++
++static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
++{
++ struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p, %s %d", sk, batostr(&la->l2_bdaddr), la->l2_psm);
++
++ if (!addr || addr->sa_family != AF_BLUETOOTH)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_OPEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ write_lock_bh(&l2cap_sk_list.lock);
++ if (la->l2_psm && __l2cap_get_sock_by_addr(la->l2_psm, &la->l2_bdaddr)) {
++ err = -EADDRINUSE;
++ } else {
++ /* Save source address */
++ bacpy(&bluez_pi(sk)->src, &la->l2_bdaddr);
++ l2cap_pi(sk)->psm = la->l2_psm;
++ sk->sport = la->l2_psm;
++ sk->state = BT_BOUND;
++ }
++ write_unlock_bh(&l2cap_sk_list.lock);
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++static int l2cap_do_connect(struct sock *sk)
++{
++ bdaddr_t *src = &bluez_pi(sk)->src;
++ bdaddr_t *dst = &bluez_pi(sk)->dst;
++ struct l2cap_conn *conn;
++ struct hci_conn *hcon;
++ struct hci_dev *hdev;
++ int err = 0;
++
++ BT_DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst), l2cap_pi(sk)->psm);
++
++ if (!(hdev = hci_get_route(dst, src)))
++ return -EHOSTUNREACH;
++
++ hci_dev_lock_bh(hdev);
++
++ err = -ENOMEM;
++
++ hcon = hci_connect(hdev, ACL_LINK, dst);
++ if (!hcon)
++ goto done;
++
++ conn = l2cap_conn_add(hcon, 0);
++ if (!conn) {
++ hci_conn_put(hcon);
++ goto done;
++ }
++
++ err = 0;
++
++ /* Update source addr of the socket */
++ bacpy(src, conn->src);
++
++ l2cap_chan_add(conn, sk, NULL);
++
++ sk->state = BT_CONNECT;
++ l2cap_sock_set_timer(sk, sk->sndtimeo);
++
++ if (hcon->state == BT_CONNECTED) {
++ if (sk->type == SOCK_SEQPACKET) {
++ l2cap_conn_req req;
++ req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ req.psm = l2cap_pi(sk)->psm;
++ l2cap_send_req(conn, L2CAP_CONN_REQ, L2CAP_CONN_REQ_SIZE, &req);
++ } else {
++ l2cap_sock_clear_timer(sk);
++ sk->state = BT_CONNECTED;
++ }
++ }
++
++done:
++ hci_dev_unlock_bh(hdev);
++ hci_dev_put(hdev);
++ return err;
++}
++
++static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
++{
++ struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ lock_sock(sk);
++
++ BT_DBG("sk %p", sk);
++
++ if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_l2)) {
++ err = -EINVAL;
++ goto done;
++ }
++
++ if (sk->type == SOCK_SEQPACKET && !la->l2_psm) {
++ err = -EINVAL;
++ goto done;
++ }
++
++ switch(sk->state) {
++ case BT_CONNECT:
++ case BT_CONNECT2:
++ case BT_CONFIG:
++ /* Already connecting */
++ goto wait;
++
++ case BT_CONNECTED:
++ /* Already connected */
++ goto done;
++
++ case BT_OPEN:
++ case BT_BOUND:
++ /* Can connect */
++ break;
++
++ default:
++ err = -EBADFD;
++ goto done;
++ }
++
++ /* Set destination address and psm */
++ bacpy(&bluez_pi(sk)->dst, &la->l2_bdaddr);
++ l2cap_pi(sk)->psm = la->l2_psm;
++
++ if ((err = l2cap_do_connect(sk)))
++ goto done;
++
++wait:
++ err = bluez_sock_wait_state(sk, BT_CONNECTED,
++ sock_sndtimeo(sk, flags & O_NONBLOCK));
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++int l2cap_sock_listen(struct socket *sock, int backlog)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p backlog %d", sk, backlog);
++
++ lock_sock(sk);
++
++ if (sk->state != BT_BOUND || sock->type != SOCK_SEQPACKET) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ if (!l2cap_pi(sk)->psm) {
++ err = -EINVAL;
++ goto done;
++ }
++
++ sk->max_ack_backlog = backlog;
++ sk->ack_backlog = 0;
++ sk->state = BT_LISTEN;
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct sock *sk = sock->sk, *nsk;
++ long timeo;
++ int err = 0;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
++
++ BT_DBG("sk %p timeo %ld", sk, timeo);
++
++ /* Wait for an incoming connection. (wake-one). */
++ add_wait_queue_exclusive(sk->sleep, &wait);
++ while (!(nsk = bluez_accept_dequeue(sk, newsock))) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ if (!timeo) {
++ err = -EAGAIN;
++ break;
++ }
++
++ release_sock(sk);
++ timeo = schedule_timeout(timeo);
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ break;
++ }
++
++ if (signal_pending(current)) {
++ err = sock_intr_errno(timeo);
++ break;
++ }
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++
++ if (err)
++ goto done;
++
++ newsock->state = SS_CONNECTED;
++
++ BT_DBG("new socket %p", nsk);
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
++{
++ struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ addr->sa_family = AF_BLUETOOTH;
++ *len = sizeof(struct sockaddr_l2);
++
++ if (peer)
++ bacpy(&la->l2_bdaddr, &bluez_pi(sk)->dst);
++ else
++ bacpy(&la->l2_bdaddr, &bluez_pi(sk)->src);
++
++ la->l2_psm = l2cap_pi(sk)->psm;
++ return 0;
++}
++
++static int l2cap_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct scm_cookie *scm)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (sk->err)
++ return sock_error(sk);
++
++ if (msg->msg_flags & MSG_OOB)
++ return -EOPNOTSUPP;
++
++ /* Check outgoing MTU */
++ if (len > l2cap_pi(sk)->omtu)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ if (sk->state == BT_CONNECTED)
++ err = l2cap_chan_send(sk, msg, len);
++ else
++ err = -ENOTCONN;
++
++ release_sock(sk);
++ return err;
++}
++
++static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, int optlen)
++{
++ struct sock *sk = sock->sk;
++ struct l2cap_options opts;
++ int err = 0, len;
++ __u32 opt;
++
++ BT_DBG("sk %p", sk);
++
++ lock_sock(sk);
++
++ switch (optname) {
++ case L2CAP_OPTIONS:
++ len = MIN(sizeof(opts), optlen);
++ if (copy_from_user((char *)&opts, optval, len)) {
++ err = -EFAULT;
++ break;
++ }
++ l2cap_pi(sk)->imtu = opts.imtu;
++ l2cap_pi(sk)->omtu = opts.omtu;
++ break;
++
++ case L2CAP_LM:
++ if (get_user(opt, (__u32 *)optval)) {
++ err = -EFAULT;
++ break;
++ }
++
++ l2cap_pi(sk)->link_mode = opt;
++ break;
++
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ }
++
++ release_sock(sk);
++ return err;
++}
++
++static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, char *optval, int *optlen)
++{
++ struct sock *sk = sock->sk;
++ struct l2cap_options opts;
++ struct l2cap_conninfo cinfo;
++ int len, err = 0;
++
++ if (get_user(len, optlen))
++ return -EFAULT;
++
++ lock_sock(sk);
++
++ switch (optname) {
++ case L2CAP_OPTIONS:
++ opts.imtu = l2cap_pi(sk)->imtu;
++ opts.omtu = l2cap_pi(sk)->omtu;
++ opts.flush_to = l2cap_pi(sk)->flush_to;
++
++ len = MIN(len, sizeof(opts));
++ if (copy_to_user(optval, (char *)&opts, len))
++ err = -EFAULT;
++
++ break;
++
++ case L2CAP_LM:
++ if (put_user(l2cap_pi(sk)->link_mode, (__u32 *)optval))
++ err = -EFAULT;
++ break;
++
++ case L2CAP_CONNINFO:
++ if (sk->state != BT_CONNECTED) {
++ err = -ENOTCONN;
++ break;
++ }
++
++ cinfo.hci_handle = l2cap_pi(sk)->conn->hcon->handle;
++
++ len = MIN(len, sizeof(cinfo));
++ if (copy_to_user(optval, (char *)&cinfo, len))
++ err = -EFAULT;
++
++ break;
++
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ }
++
++ release_sock(sk);
++ return err;
++}
++
++static int l2cap_sock_shutdown(struct socket *sock, int how)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (!sk) return 0;
++
++ lock_sock(sk);
++ if (!sk->shutdown) {
++ sk->shutdown = SHUTDOWN_MASK;
++ l2cap_sock_clear_timer(sk);
++ __l2cap_sock_close(sk, 0);
++
++ if (sk->linger)
++ err = bluez_sock_wait_state(sk, BT_CLOSED, sk->lingertime);
++ }
++ release_sock(sk);
++ return err;
++}
++
++static int l2cap_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++ int err;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (!sk) return 0;
++
++ err = l2cap_sock_shutdown(sock, 2);
++
++ sock_orphan(sk);
++ l2cap_sock_kill(sk);
++ return err;
++}
++
++/* --------- L2CAP channels --------- */
++static struct sock * __l2cap_get_chan_by_dcid(struct l2cap_chan_list *l, __u16 cid)
++{
++ struct sock *s;
++ for (s = l->head; s; s = l2cap_pi(s)->next_c) {
++ if (l2cap_pi(s)->dcid == cid)
++ break;
++ }
++ return s;
++}
++
++static struct sock *__l2cap_get_chan_by_scid(struct l2cap_chan_list *l, __u16 cid)
++{
++ struct sock *s;
++ for (s = l->head; s; s = l2cap_pi(s)->next_c) {
++ if (l2cap_pi(s)->scid == cid)
++ break;
++ }
++ return s;
++}
++
++/* Find channel with given SCID.
++ * Returns locked socket */
++static inline struct sock *l2cap_get_chan_by_scid(struct l2cap_chan_list *l, __u16 cid)
++{
++ struct sock *s;
++ read_lock(&l->lock);
++ s = __l2cap_get_chan_by_scid(l, cid);
++ if (s) bh_lock_sock(s);
++ read_unlock(&l->lock);
++ return s;
++}
++
++static __u16 l2cap_alloc_cid(struct l2cap_chan_list *l)
++{
++ __u16 cid = 0x0040;
++
++ for (; cid < 0xffff; cid++) {
++ if(!__l2cap_get_chan_by_scid(l, cid))
++ return cid;
++ }
++
++ return 0;
++}
++
++static inline void __l2cap_chan_link(struct l2cap_chan_list *l, struct sock *sk)
++{
++ sock_hold(sk);
++
++ if (l->head)
++ l2cap_pi(l->head)->prev_c = sk;
++
++ l2cap_pi(sk)->next_c = l->head;
++ l2cap_pi(sk)->prev_c = NULL;
++ l->head = sk;
++}
++
++static inline void l2cap_chan_unlink(struct l2cap_chan_list *l, struct sock *sk)
++{
++ struct sock *next = l2cap_pi(sk)->next_c, *prev = l2cap_pi(sk)->prev_c;
++
++ write_lock(&l->lock);
++ if (sk == l->head)
++ l->head = next;
++
++ if (next)
++ l2cap_pi(next)->prev_c = prev;
++ if (prev)
++ l2cap_pi(prev)->next_c = next;
++ write_unlock(&l->lock);
++
++ __sock_put(sk);
++}
++
++static void __l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent)
++{
++ struct l2cap_chan_list *l = &conn->chan_list;
++
++ BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn, l2cap_pi(sk)->psm, l2cap_pi(sk)->dcid);
++
++ l2cap_pi(sk)->conn = conn;
++
++ if (sk->type == SOCK_SEQPACKET) {
++ /* Alloc CID for connection-oriented socket */
++ l2cap_pi(sk)->scid = l2cap_alloc_cid(l);
++ } else if (sk->type == SOCK_DGRAM) {
++ /* Connectionless socket */
++ l2cap_pi(sk)->scid = 0x0002;
++ l2cap_pi(sk)->dcid = 0x0002;
++ l2cap_pi(sk)->omtu = L2CAP_DEFAULT_MTU;
++ } else {
++ /* Raw socket can send/recv signalling messages only */
++ l2cap_pi(sk)->scid = 0x0001;
++ l2cap_pi(sk)->dcid = 0x0001;
++ l2cap_pi(sk)->omtu = L2CAP_DEFAULT_MTU;
++ }
++
++ __l2cap_chan_link(l, sk);
++
++ if (parent)
++ bluez_accept_enqueue(parent, sk);
++}
++
++static inline void l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent)
++{
++ struct l2cap_chan_list *l = &conn->chan_list;
++ write_lock(&l->lock);
++ __l2cap_chan_add(conn, sk, parent);
++ write_unlock(&l->lock);
++}
++
++/* Delete channel.
++ * Must be called on the locked socket. */
++static void l2cap_chan_del(struct sock *sk, int err)
++{
++ struct l2cap_conn *conn = l2cap_pi(sk)->conn;
++ struct sock *parent = bluez_pi(sk)->parent;
++
++ l2cap_sock_clear_timer(sk);
++
++ BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
++
++ if (conn) {
++ /* Unlink from channel list */
++ l2cap_chan_unlink(&conn->chan_list, sk);
++ l2cap_pi(sk)->conn = NULL;
++ hci_conn_put(conn->hcon);
++ }
++
++ sk->state = BT_CLOSED;
++ sk->zapped = 1;
++
++ if (err)
++ sk->err = err;
++
++ if (parent)
++ parent->data_ready(parent, 0);
++ else
++ sk->state_change(sk);
++}
++
++static void l2cap_conn_ready(struct l2cap_conn *conn)
++{
++ struct l2cap_chan_list *l = &conn->chan_list;
++ struct sock *sk;
++
++ BT_DBG("conn %p", conn);
++
++ read_lock(&l->lock);
++
++ for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
++ bh_lock_sock(sk);
++
++ if (sk->type != SOCK_SEQPACKET) {
++ l2cap_sock_clear_timer(sk);
++ sk->state = BT_CONNECTED;
++ sk->state_change(sk);
++ } else if (sk->state == BT_CONNECT) {
++ l2cap_conn_req req;
++ req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ req.psm = l2cap_pi(sk)->psm;
++ l2cap_send_req(conn, L2CAP_CONN_REQ, L2CAP_CONN_REQ_SIZE, &req);
++ }
++
++ bh_unlock_sock(sk);
++ }
++
++ read_unlock(&l->lock);
++}
++
++/* Notify sockets that we cannot guaranty reliability anymore */
++static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
++{
++ struct l2cap_chan_list *l = &conn->chan_list;
++ struct sock *sk;
++
++ BT_DBG("conn %p", conn);
++
++ read_lock(&l->lock);
++ for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
++ if (l2cap_pi(sk)->link_mode & L2CAP_LM_RELIABLE)
++ sk->err = err;
++ }
++ read_unlock(&l->lock);
++}
++
++static void l2cap_chan_ready(struct sock *sk)
++{
++ struct sock *parent = bluez_pi(sk)->parent;
++
++ BT_DBG("sk %p, parent %p", sk, parent);
++
++ l2cap_pi(sk)->conf_state = 0;
++ l2cap_sock_clear_timer(sk);
++
++ if (!parent) {
++ /* Outgoing channel.
++ * Wake up socket sleeping on connect.
++ */
++ sk->state = BT_CONNECTED;
++ sk->state_change(sk);
++ } else {
++ /* Incomming channel.
++ * Wake up socket sleeping on accept.
++ */
++ parent->data_ready(parent, 0);
++ }
++}
++
++/* Copy frame to all raw sockets on that connection */
++void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
++{
++ struct l2cap_chan_list *l = &conn->chan_list;
++ struct sk_buff *nskb;
++ struct sock * sk;
++
++ BT_DBG("conn %p", conn);
++
++ read_lock(&l->lock);
++ for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
++ if (sk->type != SOCK_RAW)
++ continue;
++
++ /* Don't send frame to the socket it came from */
++ if (skb->sk == sk)
++ continue;
++
++ if (!(nskb = skb_clone(skb, GFP_ATOMIC)))
++ continue;
++
++ if (sock_queue_rcv_skb(sk, nskb))
++ kfree_skb(nskb);
++ }
++ read_unlock(&l->lock);
++}
++
++static int l2cap_chan_send(struct sock *sk, struct msghdr *msg, int len)
++{
++ struct l2cap_conn *conn = l2cap_pi(sk)->conn;
++ struct sk_buff *skb, **frag;
++ int err, hlen, count, sent=0;
++ l2cap_hdr *lh;
++
++ BT_DBG("sk %p len %d", sk, len);
++
++ /* First fragment (with L2CAP header) */
++ if (sk->type == SOCK_DGRAM)
++ hlen = L2CAP_HDR_SIZE + 2;
++ else
++ hlen = L2CAP_HDR_SIZE;
++
++ count = MIN(conn->mtu - hlen, len);
++
++ skb = bluez_skb_send_alloc(sk, hlen + count,
++ msg->msg_flags & MSG_DONTWAIT, &err);
++ if (!skb)
++ return err;
++
++ /* Create L2CAP header */
++ lh = (l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
++ lh->cid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ lh->len = __cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
++
++ if (sk->type == SOCK_DGRAM)
++ put_unaligned(l2cap_pi(sk)->psm, (__u16 *) skb_put(skb, 2));
++
++ if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count)) {
++ err = -EFAULT;
++ goto fail;
++ }
++
++ sent += count;
++ len -= count;
++
++ /* Continuation fragments (no L2CAP header) */
++ frag = &skb_shinfo(skb)->frag_list;
++ while (len) {
++ count = MIN(conn->mtu, len);
++
++ *frag = bluez_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err);
++ if (!*frag)
++ goto fail;
++
++ if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count)) {
++ err = -EFAULT;
++ goto fail;
++ }
++
++ sent += count;
++ len -= count;
++
++ frag = &(*frag)->next;
++ }
++
++ if ((err = hci_send_acl(conn->hcon, skb, 0)) < 0)
++ goto fail;
++
++ return sent;
++
++fail:
++ kfree_skb(skb);
++ return err;
++}
++
++/* --------- L2CAP signalling commands --------- */
++static inline __u8 l2cap_get_ident(struct l2cap_conn *conn)
++{
++ __u8 id;
++
++ /* Get next available identificator.
++ * 1 - 199 are used by kernel.
++ * 200 - 254 are used by utilities like l2ping, etc
++ */
++
++ spin_lock(&conn->lock);
++
++ if (++conn->tx_ident > 199)
++ conn->tx_ident = 1;
++
++ id = conn->tx_ident;
++
++ spin_unlock(&conn->lock);
++
++ return id;
++}
++
++static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
++ __u8 code, __u8 ident, __u16 dlen, void *data)
++{
++ struct sk_buff *skb, **frag;
++ l2cap_cmd_hdr *cmd;
++ l2cap_hdr *lh;
++ int len, count;
++
++ BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d", conn, code, ident, dlen);
++
++ len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen;
++ count = MIN(conn->mtu, len);
++
++ skb = bluez_skb_alloc(count, GFP_ATOMIC);
++ if (!skb)
++ return NULL;
++
++ lh = (l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
++ lh->len = __cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
++ lh->cid = __cpu_to_le16(0x0001);
++
++ cmd = (l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
++ cmd->code = code;
++ cmd->ident = ident;
++ cmd->len = __cpu_to_le16(dlen);
++
++ if (dlen) {
++ count -= L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE;
++ memcpy(skb_put(skb, count), data, count);
++ data += count;
++ }
++
++ len -= skb->len;
++
++ /* Continuation fragments (no L2CAP header) */
++ frag = &skb_shinfo(skb)->frag_list;
++ while (len) {
++ count = MIN(conn->mtu, len);
++
++ *frag = bluez_skb_alloc(count, GFP_ATOMIC);
++ if (!*frag)
++ goto fail;
++
++ memcpy(skb_put(*frag, count), data, count);
++
++ len -= count;
++ data += count;
++
++ frag = &(*frag)->next;
++ }
++
++ return skb;
++
++fail:
++ kfree_skb(skb);
++ return NULL;
++}
++
++static int l2cap_send_req(struct l2cap_conn *conn, __u8 code, __u16 len, void *data)
++{
++ __u8 ident = l2cap_get_ident(conn);
++ struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
++
++ BT_DBG("code 0x%2.2x", code);
++
++ if (!skb)
++ return -ENOMEM;
++ return hci_send_acl(conn->hcon, skb, 0);
++}
++
++static int l2cap_send_rsp(struct l2cap_conn *conn, __u8 ident, __u8 code, __u16 len, void *data)
++{
++ struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
++
++ BT_DBG("code 0x%2.2x", code);
++
++ if (!skb)
++ return -ENOMEM;
++ return hci_send_acl(conn->hcon, skb, 0);
++}
++
++static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen, unsigned long *val)
++{
++ l2cap_conf_opt *opt = *ptr;
++ int len;
++
++ len = L2CAP_CONF_OPT_SIZE + opt->len;
++ *ptr += len;
++
++ *type = opt->type;
++ *olen = opt->len;
++
++ switch (opt->len) {
++ case 1:
++ *val = *((__u8 *) opt->val);
++ break;
++
++ case 2:
++ *val = __le16_to_cpu(*((__u16 *)opt->val));
++ break;
++
++ case 4:
++ *val = __le32_to_cpu(*((__u32 *)opt->val));
++ break;
++
++ default:
++ *val = (unsigned long) opt->val;
++ break;
++ };
++
++ BT_DBG("type 0x%2.2x len %d val 0x%lx", *type, opt->len, *val);
++ return len;
++}
++
++static inline void l2cap_parse_conf_req(struct sock *sk, void *data, int len)
++{
++ int type, hint, olen;
++ unsigned long val;
++ void *ptr = data;
++
++ BT_DBG("sk %p len %d", sk, len);
++
++ while (len >= L2CAP_CONF_OPT_SIZE) {
++ len -= l2cap_get_conf_opt(&ptr, &type, &olen, &val);
++
++ hint = type & 0x80;
++ type &= 0x7f;
++
++ switch (type) {
++ case L2CAP_CONF_MTU:
++ l2cap_pi(sk)->conf_mtu = val;
++ break;
++
++ case L2CAP_CONF_FLUSH_TO:
++ l2cap_pi(sk)->flush_to = val;
++ break;
++
++ case L2CAP_CONF_QOS:
++ break;
++
++ default:
++ if (hint)
++ break;
++
++ /* FIXME: Reject unknown option */
++ break;
++ };
++ }
++}
++
++static void l2cap_add_conf_opt(void **ptr, __u8 type, __u8 len, unsigned long val)
++{
++ register l2cap_conf_opt *opt = *ptr;
++
++ BT_DBG("type 0x%2.2x len %d val 0x%lx", type, len, val);
++
++ opt->type = type;
++ opt->len = len;
++
++ switch (len) {
++ case 1:
++ *((__u8 *) opt->val) = val;
++ break;
++
++ case 2:
++ *((__u16 *) opt->val) = __cpu_to_le16(val);
++ break;
++
++ case 4:
++ *((__u32 *) opt->val) = __cpu_to_le32(val);
++ break;
++
++ default:
++ memcpy(opt->val, (void *) val, len);
++ break;
++ };
++
++ *ptr += L2CAP_CONF_OPT_SIZE + len;
++}
++
++static int l2cap_build_conf_req(struct sock *sk, void *data)
++{
++ struct l2cap_pinfo *pi = l2cap_pi(sk);
++ l2cap_conf_req *req = (l2cap_conf_req *) data;
++ void *ptr = req->data;
++
++ BT_DBG("sk %p", sk);
++
++ if (pi->imtu != L2CAP_DEFAULT_MTU)
++ l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->imtu);
++
++ /* FIXME. Need actual value of the flush timeout */
++ //if (flush_to != L2CAP_DEFAULT_FLUSH_TO)
++ // l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO, 2, pi->flush_to);
++
++ req->dcid = __cpu_to_le16(pi->dcid);
++ req->flags = __cpu_to_le16(0);
++
++ return ptr - data;
++}
++
++static inline int l2cap_conf_output(struct sock *sk, void **ptr)
++{
++ struct l2cap_pinfo *pi = l2cap_pi(sk);
++ int result = 0;
++
++ /* Configure output options and let the other side know
++ * which ones we don't like.
++ */
++ if (pi->conf_mtu < pi->omtu) {
++ l2cap_add_conf_opt(ptr, L2CAP_CONF_MTU, 2, pi->omtu);
++ result = L2CAP_CONF_UNACCEPT;
++ } else {
++ pi->omtu = pi->conf_mtu;
++ }
++
++ BT_DBG("sk %p result %d", sk, result);
++ return result;
++}
++
++static int l2cap_build_conf_rsp(struct sock *sk, void *data, int *result)
++{
++ l2cap_conf_rsp *rsp = (l2cap_conf_rsp *) data;
++ void *ptr = rsp->data;
++ u16 flags = 0;
++
++ BT_DBG("sk %p complete %d", sk, result ? 1 : 0);
++
++ if (result)
++ *result = l2cap_conf_output(sk, &ptr);
++ else
++ flags |= 0x0001;
++
++ rsp->scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ rsp->result = __cpu_to_le16(result ? *result : 0);
++ rsp->flags = __cpu_to_le16(flags);
++
++ return ptr - data;
++}
++
++static inline int l2cap_connect_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
++{
++ struct l2cap_chan_list *list = &conn->chan_list;
++ l2cap_conn_req *req = (l2cap_conn_req *) data;
++ l2cap_conn_rsp rsp;
++ struct sock *sk, *parent;
++ int result = 0, status = 0;
++
++ __u16 dcid = 0, scid = __le16_to_cpu(req->scid);
++ __u16 psm = req->psm;
++
++ BT_DBG("psm 0x%2.2x scid 0x%4.4x", psm, scid);
++
++ /* Check if we have socket listening on psm */
++ parent = l2cap_get_sock_by_psm(BT_LISTEN, psm, conn->src);
++ if (!parent) {
++ result = L2CAP_CR_BAD_PSM;
++ goto sendresp;
++ }
++
++ result = L2CAP_CR_NO_MEM;
++
++ /* Check for backlog size */
++ if (parent->ack_backlog > parent->max_ack_backlog) {
++ BT_DBG("backlog full %d", parent->ack_backlog);
++ goto response;
++ }
++
++ sk = l2cap_sock_alloc(NULL, BTPROTO_L2CAP, GFP_ATOMIC);
++ if (!sk)
++ goto response;
++
++ write_lock(&list->lock);
++
++ /* Check if we already have channel with that dcid */
++ if (__l2cap_get_chan_by_dcid(list, scid)) {
++ write_unlock(&list->lock);
++ sk->zapped = 1;
++ l2cap_sock_kill(sk);
++ goto response;
++ }
++
++ hci_conn_hold(conn->hcon);
++
++ l2cap_sock_init(sk, parent);
++ bacpy(&bluez_pi(sk)->src, conn->src);
++ bacpy(&bluez_pi(sk)->dst, conn->dst);
++ l2cap_pi(sk)->psm = psm;
++ l2cap_pi(sk)->dcid = scid;
++
++ __l2cap_chan_add(conn, sk, parent);
++ dcid = l2cap_pi(sk)->scid;
++
++ l2cap_sock_set_timer(sk, sk->sndtimeo);
++
++ /* Service level security */
++ result = L2CAP_CR_PEND;
++ status = L2CAP_CS_AUTHEN_PEND;
++ sk->state = BT_CONNECT2;
++ l2cap_pi(sk)->ident = cmd->ident;
++
++ if (l2cap_pi(sk)->link_mode & L2CAP_LM_ENCRYPT) {
++ if (!hci_conn_encrypt(conn->hcon))
++ goto done;
++ } else if (l2cap_pi(sk)->link_mode & L2CAP_LM_AUTH) {
++ if (!hci_conn_auth(conn->hcon))
++ goto done;
++ }
++
++ sk->state = BT_CONFIG;
++ result = status = 0;
++
++done:
++ write_unlock(&list->lock);
++
++response:
++ bh_unlock_sock(parent);
++
++sendresp:
++ rsp.scid = __cpu_to_le16(scid);
++ rsp.dcid = __cpu_to_le16(dcid);
++ rsp.result = __cpu_to_le16(result);
++ rsp.status = __cpu_to_le16(status);
++ l2cap_send_rsp(conn, cmd->ident, L2CAP_CONN_RSP, L2CAP_CONN_RSP_SIZE, &rsp);
++ return 0;
++}
++
++static inline int l2cap_connect_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
++{
++ l2cap_conn_rsp *rsp = (l2cap_conn_rsp *) data;
++ __u16 scid, dcid, result, status;
++ struct sock *sk;
++ char req[128];
++
++ scid = __le16_to_cpu(rsp->scid);
++ dcid = __le16_to_cpu(rsp->dcid);
++ result = __le16_to_cpu(rsp->result);
++ status = __le16_to_cpu(rsp->status);
++
++ BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x", dcid, scid, result, status);
++
++ if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
++ return -ENOENT;
++
++ switch (result) {
++ case L2CAP_CR_SUCCESS:
++ sk->state = BT_CONFIG;
++ l2cap_pi(sk)->dcid = dcid;
++ l2cap_pi(sk)->conf_state |= L2CAP_CONF_REQ_SENT;
++
++ l2cap_send_req(conn, L2CAP_CONF_REQ, l2cap_build_conf_req(sk, req), req);
++ break;
++
++ case L2CAP_CR_PEND:
++ break;
++
++ default:
++ l2cap_chan_del(sk, ECONNREFUSED);
++ break;
++ }
++
++ bh_unlock_sock(sk);
++ return 0;
++}
++
++static inline int l2cap_config_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
++{
++ l2cap_conf_req * req = (l2cap_conf_req *) data;
++ __u16 dcid, flags;
++ __u8 rsp[64];
++ struct sock *sk;
++ int result;
++
++ dcid = __le16_to_cpu(req->dcid);
++ flags = __le16_to_cpu(req->flags);
++
++ BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
++
++ if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid)))
++ return -ENOENT;
++
++ l2cap_parse_conf_req(sk, req->data, cmd->len - L2CAP_CONF_REQ_SIZE);
++
++ if (flags & 0x0001) {
++ /* Incomplete config. Send empty response. */
++ l2cap_send_rsp(conn, cmd->ident, L2CAP_CONF_RSP, l2cap_build_conf_rsp(sk, rsp, NULL), rsp);
++ goto unlock;
++ }
++
++ /* Complete config. */
++ l2cap_send_rsp(conn, cmd->ident, L2CAP_CONF_RSP, l2cap_build_conf_rsp(sk, rsp, &result), rsp);
++
++ if (result)
++ goto unlock;
++
++ /* Output config done */
++ l2cap_pi(sk)->conf_state |= L2CAP_CONF_OUTPUT_DONE;
++
++ if (l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE) {
++ sk->state = BT_CONNECTED;
++ l2cap_chan_ready(sk);
++ } else if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT)) {
++ char req[64];
++ l2cap_send_req(conn, L2CAP_CONF_REQ, l2cap_build_conf_req(sk, req), req);
++ }
++
++unlock:
++ bh_unlock_sock(sk);
++ return 0;
++}
++
++static inline int l2cap_config_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
++{
++ l2cap_conf_rsp *rsp = (l2cap_conf_rsp *)data;
++ __u16 scid, flags, result;
++ struct sock *sk;
++ int err = 0;
++
++ scid = __le16_to_cpu(rsp->scid);
++ flags = __le16_to_cpu(rsp->flags);
++ result = __le16_to_cpu(rsp->result);
++
++ BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x", scid, flags, result);
++
++ if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
++ return -ENOENT;
++
++ switch (result) {
++ case L2CAP_CONF_SUCCESS:
++ break;
++
++ case L2CAP_CONF_UNACCEPT:
++ if (++l2cap_pi(sk)->conf_retry < L2CAP_CONF_MAX_RETRIES) {
++ char req[128];
++ /*
++ It does not make sense to adjust L2CAP parameters
++ that are currently defined in the spec. We simply
++ resend config request that we sent earlier. It is
++ stupid :) but it helps qualification testing
++ which expects at least some response from us.
++ */
++ l2cap_send_req(conn, L2CAP_CONF_REQ,
++ l2cap_build_conf_req(sk, req), req);
++ goto done;
++ }
++ default:
++ sk->state = BT_DISCONN;
++ sk->err = ECONNRESET;
++ l2cap_sock_set_timer(sk, HZ * 5);
++ {
++ l2cap_disconn_req req;
++ req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ l2cap_send_req(conn, L2CAP_DISCONN_REQ, L2CAP_DISCONN_REQ_SIZE, &req);
++ }
++ goto done;
++ }
++
++ if (flags & 0x01)
++ goto done;
++
++ /* Input config done */
++ l2cap_pi(sk)->conf_state |= L2CAP_CONF_INPUT_DONE;
++
++ if (l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE) {
++ sk->state = BT_CONNECTED;
++ l2cap_chan_ready(sk);
++ }
++
++done:
++ bh_unlock_sock(sk);
++ return err;
++}
++
++static inline int l2cap_disconnect_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
++{
++ l2cap_disconn_req *req = (l2cap_disconn_req *) data;
++ l2cap_disconn_rsp rsp;
++ __u16 dcid, scid;
++ struct sock *sk;
++
++ scid = __le16_to_cpu(req->scid);
++ dcid = __le16_to_cpu(req->dcid);
++
++ BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
++
++ if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid)))
++ return 0;
++
++ rsp.dcid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ rsp.scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ l2cap_send_rsp(conn, cmd->ident, L2CAP_DISCONN_RSP, L2CAP_DISCONN_RSP_SIZE, &rsp);
++
++ sk->shutdown = SHUTDOWN_MASK;
++
++ l2cap_chan_del(sk, ECONNRESET);
++ bh_unlock_sock(sk);
++
++ l2cap_sock_kill(sk);
++ return 0;
++}
++
++static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
++{
++ l2cap_disconn_rsp *rsp = (l2cap_disconn_rsp *) data;
++ __u16 dcid, scid;
++ struct sock *sk;
++
++ scid = __le16_to_cpu(rsp->scid);
++ dcid = __le16_to_cpu(rsp->dcid);
++
++ BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
++
++ if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
++ return 0;
++ l2cap_chan_del(sk, 0);
++ bh_unlock_sock(sk);
++
++ l2cap_sock_kill(sk);
++ return 0;
++}
++
++static inline int l2cap_information_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, u8 *data)
++{
++ l2cap_info_req *req = (l2cap_info_req *) data;
++ l2cap_info_rsp rsp;
++ u16 type;
++
++ type = __le16_to_cpu(req->type);
++
++ BT_DBG("type 0x%4.4x", type);
++
++ rsp.type = __cpu_to_le16(type);
++ rsp.result = __cpu_to_le16(L2CAP_IR_NOTSUPP);
++ l2cap_send_rsp(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(rsp), &rsp);
++ return 0;
++}
++
++static inline int l2cap_information_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, u8 *data)
++{
++ l2cap_info_rsp *rsp = (l2cap_info_rsp *) data;
++ u16 type, result;
++
++ type = __le16_to_cpu(rsp->type);
++ result = __le16_to_cpu(rsp->result);
++
++ BT_DBG("type 0x%4.4x result 0x%2.2x", type, result);
++
++ return 0;
++}
++
++static inline void l2cap_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
++{
++ __u8 *data = skb->data;
++ int len = skb->len;
++ l2cap_cmd_hdr cmd;
++ int err = 0;
++
++ l2cap_raw_recv(conn, skb);
++
++ while (len >= L2CAP_CMD_HDR_SIZE) {
++ memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
++ data += L2CAP_CMD_HDR_SIZE;
++ len -= L2CAP_CMD_HDR_SIZE;
++
++ cmd.len = __le16_to_cpu(cmd.len);
++
++ BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd.len, cmd.ident);
++
++ if (cmd.len > len || !cmd.ident) {
++ BT_DBG("corrupted command");
++ break;
++ }
++
++ switch (cmd.code) {
++ case L2CAP_COMMAND_REJ:
++ /* FIXME: We should process this */
++ break;
++
++ case L2CAP_CONN_REQ:
++ err = l2cap_connect_req(conn, &cmd, data);
++ break;
++
++ case L2CAP_CONN_RSP:
++ err = l2cap_connect_rsp(conn, &cmd, data);
++ break;
++
++ case L2CAP_CONF_REQ:
++ err = l2cap_config_req(conn, &cmd, data);
++ break;
++
++ case L2CAP_CONF_RSP:
++ err = l2cap_config_rsp(conn, &cmd, data);
++ break;
++
++ case L2CAP_DISCONN_REQ:
++ err = l2cap_disconnect_req(conn, &cmd, data);
++ break;
++
++ case L2CAP_DISCONN_RSP:
++ err = l2cap_disconnect_rsp(conn, &cmd, data);
++ break;
++
++ case L2CAP_ECHO_REQ:
++ l2cap_send_rsp(conn, cmd.ident, L2CAP_ECHO_RSP, cmd.len, data);
++ break;
++
++ case L2CAP_ECHO_RSP:
++ break;
++
++ case L2CAP_INFO_REQ:
++ err = l2cap_information_req(conn, &cmd, data);
++ break;
++
++ case L2CAP_INFO_RSP:
++ err = l2cap_information_rsp(conn, &cmd, data);
++ break;
++
++ default:
++ BT_ERR("Unknown signaling command 0x%2.2x", cmd.code);
++ err = -EINVAL;
++ break;
++ };
++
++ if (err) {
++ l2cap_cmd_rej rej;
++ BT_DBG("error %d", err);
++
++ /* FIXME: Map err to a valid reason */
++ rej.reason = __cpu_to_le16(0);
++ l2cap_send_rsp(conn, cmd.ident, L2CAP_COMMAND_REJ, L2CAP_CMD_REJ_SIZE, &rej);
++ }
++
++ data += cmd.len;
++ len -= cmd.len;
++ }
++
++ kfree_skb(skb);
++}
++
++static inline int l2cap_data_channel(struct l2cap_conn *conn, __u16 cid, struct sk_buff *skb)
++{
++ struct sock *sk;
++
++ sk = l2cap_get_chan_by_scid(&conn->chan_list, cid);
++ if (!sk) {
++ BT_DBG("unknown cid 0x%4.4x", cid);
++ goto drop;
++ }
++
++ BT_DBG("sk %p, len %d", sk, skb->len);
++
++ if (sk->state != BT_CONNECTED)
++ goto drop;
++
++ if (l2cap_pi(sk)->imtu < skb->len)
++ goto drop;
++
++ /* If socket recv buffers overflows we drop data here
++ * which is *bad* because L2CAP has to be reliable.
++ * But we don't have any other choice. L2CAP doesn't
++ * provide flow control mechanism */
++
++ if (!sock_queue_rcv_skb(sk, skb))
++ goto done;
++
++drop:
++ kfree_skb(skb);
++
++done:
++ if (sk) bh_unlock_sock(sk);
++ return 0;
++}
++
++static inline int l2cap_conless_channel(struct l2cap_conn *conn, __u16 psm, struct sk_buff *skb)
++{
++ struct sock *sk;
++
++ sk = l2cap_get_sock_by_psm(0, psm, conn->src);
++ if (!sk)
++ goto drop;
++
++ BT_DBG("sk %p, len %d", sk, skb->len);
++
++ if (sk->state != BT_BOUND && sk->state != BT_CONNECTED)
++ goto drop;
++
++ if (l2cap_pi(sk)->imtu < skb->len)
++ goto drop;
++
++ if (!sock_queue_rcv_skb(sk, skb))
++ goto done;
++
++drop:
++ kfree_skb(skb);
++
++done:
++ if (sk) bh_unlock_sock(sk);
++ return 0;
++}
++
++static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
++{
++ l2cap_hdr *lh = (l2cap_hdr *) skb->data;
++ __u16 cid, psm, len;
++
++ skb_pull(skb, L2CAP_HDR_SIZE);
++ cid = __le16_to_cpu(lh->cid);
++ len = __le16_to_cpu(lh->len);
++
++ BT_DBG("len %d, cid 0x%4.4x", len, cid);
++
++ switch (cid) {
++ case 0x0001:
++ l2cap_sig_channel(conn, skb);
++ break;
++
++ case 0x0002:
++ psm = get_unaligned((__u16 *) skb->data);
++ skb_pull(skb, 2);
++ l2cap_conless_channel(conn, psm, skb);
++ break;
++
++ default:
++ l2cap_data_channel(conn, cid, skb);
++ break;
++ }
++}
++
++/* ------------ L2CAP interface with lower layer (HCI) ------------- */
++
++static int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
++{
++ int exact = 0, lm1 = 0, lm2 = 0;
++ register struct sock *sk;
++
++ if (type != ACL_LINK)
++ return 0;
++
++ BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
++
++ /* Find listening sockets and check their link_mode */
++ read_lock(&l2cap_sk_list.lock);
++ for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
++ if (sk->state != BT_LISTEN)
++ continue;
++
++ if (!bacmp(&bluez_pi(sk)->src, &hdev->bdaddr)) {
++ lm1 |= (HCI_LM_ACCEPT | l2cap_pi(sk)->link_mode);
++ exact++;
++ } else if (!bacmp(&bluez_pi(sk)->src, BDADDR_ANY))
++ lm2 |= (HCI_LM_ACCEPT | l2cap_pi(sk)->link_mode);
++ }
++ read_unlock(&l2cap_sk_list.lock);
++
++ return exact ? lm1 : lm2;
++}
++
++static int l2cap_connect_cfm(struct hci_conn *hcon, __u8 status)
++{
++ BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
++
++ if (hcon->type != ACL_LINK)
++ return 0;
++
++ if (!status) {
++ struct l2cap_conn *conn;
++
++ conn = l2cap_conn_add(hcon, status);
++ if (conn)
++ l2cap_conn_ready(conn);
++ } else
++ l2cap_conn_del(hcon, bterr(status));
++
++ return 0;
++}
++
++static int l2cap_disconn_ind(struct hci_conn *hcon, __u8 reason)
++{
++ BT_DBG("hcon %p reason %d", hcon, reason);
++
++ if (hcon->type != ACL_LINK)
++ return 0;
++
++ l2cap_conn_del(hcon, bterr(reason));
++ return 0;
++}
++
++static int l2cap_auth_cfm(struct hci_conn *hcon, __u8 status)
++{
++ struct l2cap_chan_list *l;
++ struct l2cap_conn *conn;
++ l2cap_conn_rsp rsp;
++ struct sock *sk;
++ int result;
++
++ if (!(conn = hcon->l2cap_data))
++ return 0;
++ l = &conn->chan_list;
++
++ BT_DBG("conn %p", conn);
++
++ read_lock(&l->lock);
++
++ for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
++ bh_lock_sock(sk);
++
++ if (sk->state != BT_CONNECT2 ||
++ (l2cap_pi(sk)->link_mode & L2CAP_LM_ENCRYPT)) {
++ bh_unlock_sock(sk);
++ continue;
++ }
++
++ if (!status) {
++ sk->state = BT_CONFIG;
++ result = 0;
++ } else {
++ sk->state = BT_DISCONN;
++ l2cap_sock_set_timer(sk, HZ/10);
++ result = L2CAP_CR_SEC_BLOCK;
++ }
++
++ rsp.scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ rsp.dcid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ rsp.result = __cpu_to_le16(result);
++ rsp.status = __cpu_to_le16(0);
++ l2cap_send_rsp(conn, l2cap_pi(sk)->ident, L2CAP_CONN_RSP,
++ L2CAP_CONN_RSP_SIZE, &rsp);
++
++ bh_unlock_sock(sk);
++ }
++
++ read_unlock(&l->lock);
++ return 0;
++}
++
++static int l2cap_encrypt_cfm(struct hci_conn *hcon, __u8 status)
++{
++ struct l2cap_chan_list *l;
++ struct l2cap_conn *conn;
++ l2cap_conn_rsp rsp;
++ struct sock *sk;
++ int result;
++
++ if (!(conn = hcon->l2cap_data))
++ return 0;
++ l = &conn->chan_list;
++
++ BT_DBG("conn %p", conn);
++
++ read_lock(&l->lock);
++
++ for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
++ bh_lock_sock(sk);
++
++ if (sk->state != BT_CONNECT2) {
++ bh_unlock_sock(sk);
++ continue;
++ }
++
++ if (!status) {
++ sk->state = BT_CONFIG;
++ result = 0;
++ } else {
++ sk->state = BT_DISCONN;
++ l2cap_sock_set_timer(sk, HZ/10);
++ result = L2CAP_CR_SEC_BLOCK;
++ }
++
++ rsp.scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ rsp.dcid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ rsp.result = __cpu_to_le16(result);
++ rsp.status = __cpu_to_le16(0);
++ l2cap_send_rsp(conn, l2cap_pi(sk)->ident, L2CAP_CONN_RSP,
++ L2CAP_CONN_RSP_SIZE, &rsp);
++
++ bh_unlock_sock(sk);
++ }
++
++ read_unlock(&l->lock);
++ return 0;
++}
++
++static int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, __u16 flags)
++{
++ struct l2cap_conn *conn = hcon->l2cap_data;
++
++ if (!conn && !(conn = l2cap_conn_add(hcon, 0)))
++ goto drop;
++
++ BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);
++
++ if (flags & ACL_START) {
++ l2cap_hdr *hdr;
++ int len;
++
++ if (conn->rx_len) {
++ BT_ERR("Unexpected start frame (len %d)", skb->len);
++ kfree_skb(conn->rx_skb);
++ conn->rx_skb = NULL;
++ conn->rx_len = 0;
++ l2cap_conn_unreliable(conn, ECOMM);
++ }
++
++ if (skb->len < 2) {
++ BT_ERR("Frame is too short (len %d)", skb->len);
++ l2cap_conn_unreliable(conn, ECOMM);
++ goto drop;
++ }
++
++ hdr = (l2cap_hdr *) skb->data;
++ len = __le16_to_cpu(hdr->len) + L2CAP_HDR_SIZE;
++
++ if (len == skb->len) {
++ /* Complete frame received */
++ l2cap_recv_frame(conn, skb);
++ return 0;
++ }
++
++ BT_DBG("Start: total len %d, frag len %d", len, skb->len);
++
++ if (skb->len > len) {
++ BT_ERR("Frame is too long (len %d, expected len %d)",
++ skb->len, len);
++ l2cap_conn_unreliable(conn, ECOMM);
++ goto drop;
++ }
++
++ /* Allocate skb for the complete frame including header */
++ conn->rx_skb = bluez_skb_alloc(len, GFP_ATOMIC);
++ if (!conn->rx_skb)
++ goto drop;
++
++ memcpy(skb_put(conn->rx_skb, skb->len), skb->data, skb->len);
++ conn->rx_len = len - skb->len;
++ } else {
++ BT_DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);
++
++ if (!conn->rx_len) {
++ BT_ERR("Unexpected continuation frame (len %d)", skb->len);
++ l2cap_conn_unreliable(conn, ECOMM);
++ goto drop;
++ }
++
++ if (skb->len > conn->rx_len) {
++ BT_ERR("Fragment is too long (len %d, expected %d)",
++ skb->len, conn->rx_len);
++ kfree_skb(conn->rx_skb);
++ conn->rx_skb = NULL;
++ conn->rx_len = 0;
++ l2cap_conn_unreliable(conn, ECOMM);
++ goto drop;
++ }
++
++ memcpy(skb_put(conn->rx_skb, skb->len), skb->data, skb->len);
++ conn->rx_len -= skb->len;
++
++ if (!conn->rx_len) {
++ /* Complete frame received */
++ l2cap_recv_frame(conn, conn->rx_skb);
++ conn->rx_skb = NULL;
++ }
++ }
++
++drop:
++ kfree_skb(skb);
++ return 0;
++}
++
++/* ----- Proc fs support ------ */
++static int l2cap_sock_dump(char *buf, struct bluez_sock_list *list)
++{
++ struct l2cap_pinfo *pi;
++ struct sock *sk;
++ char *ptr = buf;
++
++ read_lock_bh(&list->lock);
++
++ for (sk = list->head; sk; sk = sk->next) {
++ pi = l2cap_pi(sk);
++ ptr += sprintf(ptr, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d 0x%x\n",
++ batostr(&bluez_pi(sk)->src), batostr(&bluez_pi(sk)->dst),
++ sk->state, pi->psm, pi->scid, pi->dcid, pi->imtu, pi->omtu,
++ pi->link_mode);
++ }
++
++ read_unlock_bh(&list->lock);
++
++ ptr += sprintf(ptr, "\n");
++ return ptr - buf;
++}
++
++static int l2cap_read_proc(char *buf, char **start, off_t offset, int count, int *eof, void *priv)
++{
++ char *ptr = buf;
++ int len;
++
++ BT_DBG("count %d, offset %ld", count, offset);
++
++ ptr += l2cap_sock_dump(ptr, &l2cap_sk_list);
++ len = ptr - buf;
++
++ if (len <= count + offset)
++ *eof = 1;
++
++ *start = buf + offset;
++ len -= offset;
++
++ if (len > count)
++ len = count;
++ if (len < 0)
++ len = 0;
++
++ return len;
++}
++
++static struct proto_ops l2cap_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: l2cap_sock_release,
++ bind: l2cap_sock_bind,
++ connect: l2cap_sock_connect,
++ listen: l2cap_sock_listen,
++ accept: l2cap_sock_accept,
++ getname: l2cap_sock_getname,
++ sendmsg: l2cap_sock_sendmsg,
++ recvmsg: bluez_sock_recvmsg,
++ poll: bluez_sock_poll,
++ socketpair: sock_no_socketpair,
++ ioctl: sock_no_ioctl,
++ shutdown: l2cap_sock_shutdown,
++ setsockopt: l2cap_sock_setsockopt,
++ getsockopt: l2cap_sock_getsockopt,
++ mmap: sock_no_mmap
++};
++
++static struct net_proto_family l2cap_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: l2cap_sock_create
++};
++
++static struct hci_proto l2cap_hci_proto = {
++ name: "L2CAP",
++ id: HCI_PROTO_L2CAP,
++ connect_ind: l2cap_connect_ind,
++ connect_cfm: l2cap_connect_cfm,
++ disconn_ind: l2cap_disconn_ind,
++ recv_acldata: l2cap_recv_acldata,
++ auth_cfm: l2cap_auth_cfm,
++ encrypt_cfm: l2cap_encrypt_cfm
++};
++
++int __init l2cap_init(void)
++{
++ int err;
++
++ if ((err = bluez_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops))) {
++ BT_ERR("Can't register L2CAP socket");
++ return err;
++ }
++
++ if ((err = hci_register_proto(&l2cap_hci_proto))) {
++ BT_ERR("Can't register L2CAP protocol");
++ return err;
++ }
++
++ create_proc_read_entry("bluetooth/l2cap", 0, 0, l2cap_read_proc, NULL);
++
++ BT_INFO("BlueZ L2CAP ver %s Copyright (C) 2000,2001 Qualcomm Inc", VERSION);
++ BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
++ return 0;
++}
++
++void l2cap_cleanup(void)
++{
++ remove_proc_entry("bluetooth/l2cap", NULL);
++
++ /* Unregister socket and protocol */
++ if (bluez_sock_unregister(BTPROTO_L2CAP))
++ BT_ERR("Can't unregister L2CAP socket");
++
++ if (hci_unregister_proto(&l2cap_hci_proto))
++ BT_ERR("Can't unregister L2CAP protocol");
++}
++
++void l2cap_load(void)
++{
++ /* Dummy function to trigger automatic L2CAP module loading by
++ other modules that use L2CAP sockets but do not use any other
++ symbols from it. */
++ return;
++}
++
++EXPORT_SYMBOL(l2cap_load);
++
++module_init(l2cap_init);
++module_exit(l2cap_cleanup);
++
++MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
++MODULE_DESCRIPTION("BlueZ L2CAP ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/l2cap_core.c linux-2.4.18-mh15/net/bluetooth/l2cap_core.c
+--- linux-2.4.18/net/bluetooth/l2cap_core.c 2001-09-30 21:26:08.000000000 +0200
++++ linux-2.4.18-mh15/net/bluetooth/l2cap_core.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,2316 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * BlueZ L2CAP core and sockets.
+- *
+- * $Id: l2cap_core.c,v 1.19 2001/08/03 04:19:50 maxk Exp $
+- */
+-#define VERSION "1.1"
+-
+-#include <linux/config.h>
+-#include <linux/module.h>
+-
+-#include <linux/types.h>
+-#include <linux/errno.h>
+-#include <linux/kernel.h>
+-#include <linux/major.h>
+-#include <linux/sched.h>
+-#include <linux/slab.h>
+-#include <linux/poll.h>
+-#include <linux/fcntl.h>
+-#include <linux/init.h>
+-#include <linux/skbuff.h>
+-#include <linux/interrupt.h>
+-#include <linux/socket.h>
+-#include <linux/skbuff.h>
+-#include <linux/proc_fs.h>
+-#include <linux/list.h>
+-#include <net/sock.h>
+-
+-#include <asm/system.h>
+-#include <asm/uaccess.h>
+-
+-#include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+-#include <net/bluetooth/hci_core.h>
+-#include <net/bluetooth/l2cap.h>
+-#include <net/bluetooth/l2cap_core.h>
+-
+-#ifndef L2CAP_DEBUG
+-#undef DBG
+-#define DBG( A... )
+-#endif
+-
+-struct proto_ops l2cap_sock_ops;
+-
+-struct bluez_sock_list l2cap_sk_list = {
+- lock: RW_LOCK_UNLOCKED
+-};
+-
+-struct list_head l2cap_iff_list = LIST_HEAD_INIT(l2cap_iff_list);
+-rwlock_t l2cap_rt_lock = RW_LOCK_UNLOCKED;
+-
+-static int l2cap_conn_del(struct l2cap_conn *conn, int err);
+-
+-static inline void l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent);
+-static void l2cap_chan_del(struct sock *sk, int err);
+-static int l2cap_chan_send(struct sock *sk, struct msghdr *msg, int len);
+-
+-static void l2cap_sock_close(struct sock *sk);
+-static void l2cap_sock_kill(struct sock *sk);
+-
+-static int l2cap_send_req(struct l2cap_conn *conn, __u8 code, __u16 len, void *data);
+-static int l2cap_send_rsp(struct l2cap_conn *conn, __u8 ident, __u8 code, __u16 len, void *data);
+-
+-/* -------- L2CAP interfaces & routing --------- */
+-/* Add/delete L2CAP interface.
+- * Must be called with locked rt_lock
+- */
+-
+-static void l2cap_iff_add(struct hci_dev *hdev)
+-{
+- struct l2cap_iff *iff;
+-
+- DBG("%s", hdev->name);
+-
+- DBG("iff_list %p next %p prev %p", &l2cap_iff_list, l2cap_iff_list.next, l2cap_iff_list.prev);
+-
+- /* Allocate new interface and lock HCI device */
+- if (!(iff = kmalloc(sizeof(struct l2cap_iff), GFP_KERNEL))) {
+- ERR("Can't allocate new interface %s", hdev->name);
+- return;
+- }
+- memset(iff, 0, sizeof(struct l2cap_iff));
+-
+- hci_dev_hold(hdev);
+- hdev->l2cap_data = iff;
+- iff->hdev = hdev;
+- iff->mtu = hdev->acl_mtu - HCI_ACL_HDR_SIZE;
+- iff->bdaddr = &hdev->bdaddr;
+-
+- spin_lock_init(&iff->lock);
+- INIT_LIST_HEAD(&iff->conn_list);
+-
+- list_add(&iff->list, &l2cap_iff_list);
+-}
+-
+-static void l2cap_iff_del(struct hci_dev *hdev)
+-{
+- struct l2cap_iff *iff;
+-
+- if (!(iff = hdev->l2cap_data))
+- return;
+-
+- DBG("%s iff %p", hdev->name, iff);
+-
+- list_del(&iff->list);
+-
+- l2cap_iff_lock(iff);
+-
+- /* Drop connections */
+- while (!list_empty(&iff->conn_list)) {
+- struct l2cap_conn *c;
+-
+- c = list_entry(iff->conn_list.next, struct l2cap_conn, list);
+- l2cap_conn_del(c, ENODEV);
+- }
+-
+- l2cap_iff_unlock(iff);
+-
+- /* Unlock HCI device */
+- hdev->l2cap_data = NULL;
+- hci_dev_put(hdev);
+-
+- kfree(iff);
+-}
+-
+-/* Get route. Returns L2CAP interface.
+- * Must be called with locked rt_lock
+- */
+-static struct l2cap_iff *l2cap_get_route(bdaddr_t *src, bdaddr_t *dst)
+-{
+- struct list_head *p;
+- int use_src;
+-
+- DBG("%s -> %s", batostr(src), batostr(dst));
+-
+- use_src = bacmp(src, BDADDR_ANY) ? 0 : 1;
+-
+- /* Simple routing:
+- * No source address - find interface with bdaddr != dst
+- * Source address - find interface with bdaddr == src
+- */
+-
+- list_for_each(p, &l2cap_iff_list) {
+- struct l2cap_iff *iff;
+-
+- iff = list_entry(p, struct l2cap_iff, list);
+-
+- if (use_src && !bacmp(iff->bdaddr, src))
+- return iff;
+- else if (bacmp(iff->bdaddr, dst))
+- return iff;
+- }
+- return NULL;
+-}
+-
+-/* ----- L2CAP timers ------ */
+-static void l2cap_sock_timeout(unsigned long arg)
+-{
+- struct sock *sk = (struct sock *) arg;
+-
+- DBG("sock %p state %d", sk, sk->state);
+-
+- bh_lock_sock(sk);
+- switch (sk->state) {
+- case BT_DISCONN:
+- l2cap_chan_del(sk, ETIMEDOUT);
+- break;
+-
+- default:
+- sk->err = ETIMEDOUT;
+- sk->state_change(sk);
+- break;
+- };
+- bh_unlock_sock(sk);
+-
+- l2cap_sock_kill(sk);
+- sock_put(sk);
+-}
+-
+-static void l2cap_sock_set_timer(struct sock *sk, long timeout)
+-{
+- DBG("sock %p state %d timeout %ld", sk, sk->state, timeout);
+-
+- if (!mod_timer(&sk->timer, jiffies + timeout))
+- sock_hold(sk);
+-}
+-
+-static void l2cap_sock_clear_timer(struct sock *sk)
+-{
+- DBG("sock %p state %d", sk, sk->state);
+-
+- if (timer_pending(&sk->timer) && del_timer(&sk->timer))
+- __sock_put(sk);
+-}
+-
+-static void l2cap_sock_init_timer(struct sock *sk)
+-{
+- init_timer(&sk->timer);
+- sk->timer.function = l2cap_sock_timeout;
+- sk->timer.data = (unsigned long)sk;
+-}
+-
+-static void l2cap_conn_timeout(unsigned long arg)
+-{
+- struct l2cap_conn *conn = (void *)arg;
+-
+- DBG("conn %p state %d", conn, conn->state);
+-
+- if (conn->state == BT_CONNECTED) {
+- hci_disconnect(conn->hconn, 0x13);
+- }
+-
+- return;
+-}
+-
+-static void l2cap_conn_set_timer(struct l2cap_conn *conn, long timeout)
+-{
+- DBG("conn %p state %d timeout %ld", conn, conn->state, timeout);
+-
+- mod_timer(&conn->timer, jiffies + timeout);
+-}
+-
+-static void l2cap_conn_clear_timer(struct l2cap_conn *conn)
+-{
+- DBG("conn %p state %d", conn, conn->state);
+-
+- del_timer(&conn->timer);
+-}
+-
+-static void l2cap_conn_init_timer(struct l2cap_conn *conn)
+-{
+- init_timer(&conn->timer);
+- conn->timer.function = l2cap_conn_timeout;
+- conn->timer.data = (unsigned long)conn;
+-}
+-
+-/* -------- L2CAP connections --------- */
+-/* Add new connection to the interface.
+- * Interface must be locked
+- */
+-static struct l2cap_conn *l2cap_conn_add(struct l2cap_iff *iff, bdaddr_t *dst)
+-{
+- struct l2cap_conn *conn;
+- bdaddr_t *src = iff->bdaddr;
+-
+- if (!(conn = kmalloc(sizeof(struct l2cap_conn), GFP_KERNEL)))
+- return NULL;
+-
+- memset(conn, 0, sizeof(struct l2cap_conn));
+-
+- conn->state = BT_OPEN;
+- conn->iff = iff;
+- bacpy(&conn->src, src);
+- bacpy(&conn->dst, dst);
+-
+- spin_lock_init(&conn->lock);
+- conn->chan_list.lock = RW_LOCK_UNLOCKED;
+-
+- l2cap_conn_init_timer(conn);
+-
+- __l2cap_conn_link(iff, conn);
+-
+- DBG("%s -> %s, %p", batostr(src), batostr(dst), conn);
+-
+- MOD_INC_USE_COUNT;
+-
+- return conn;
+-}
+-
+-/* Delete connection on the interface.
+- * Interface must be locked
+- */
+-static int l2cap_conn_del(struct l2cap_conn *conn, int err)
+-{
+- struct sock *sk;
+-
+- DBG("conn %p, state %d, err %d", conn, conn->state, err);
+-
+- l2cap_conn_clear_timer(conn);
+- __l2cap_conn_unlink(conn->iff, conn);
+-
+- conn->state = BT_CLOSED;
+-
+- if (conn->rx_skb)
+- kfree_skb(conn->rx_skb);
+-
+- /* Kill channels */
+- while ((sk = conn->chan_list.head)) {
+- bh_lock_sock(sk);
+- l2cap_sock_clear_timer(sk);
+- l2cap_chan_del(sk, err);
+- bh_unlock_sock(sk);
+-
+- l2cap_sock_kill(sk);
+- }
+-
+- kfree(conn);
+-
+- MOD_DEC_USE_COUNT;
+- return 0;
+-}
+-
+-static inline struct l2cap_conn *l2cap_get_conn_by_addr(struct l2cap_iff *iff, bdaddr_t *dst)
+-{
+- struct list_head *p;
+-
+- list_for_each(p, &iff->conn_list) {
+- struct l2cap_conn *c;
+-
+- c = list_entry(p, struct l2cap_conn, list);
+- if (!bacmp(&c->dst, dst))
+- return c;
+- }
+- return NULL;
+-}
+-
+-int l2cap_connect(struct sock *sk)
+-{
+- bdaddr_t *src = &l2cap_pi(sk)->src;
+- bdaddr_t *dst = &l2cap_pi(sk)->dst;
+- struct l2cap_conn *conn;
+- struct l2cap_iff *iff;
+- int err = 0;
+-
+- DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst), l2cap_pi(sk)->psm);
+-
+- read_lock_bh(&l2cap_rt_lock);
+-
+- /* Get route to remote BD address */
+- if (!(iff = l2cap_get_route(src, dst))) {
+- err = -EHOSTUNREACH;
+- goto done;
+- }
+-
+- /* Update source addr of the socket */
+- bacpy(src, iff->bdaddr);
+-
+- l2cap_iff_lock(iff);
+-
+- if (!(conn = l2cap_get_conn_by_addr(iff, dst))) {
+- /* Connection doesn't exist */
+- if (!(conn = l2cap_conn_add(iff, dst))) {
+- l2cap_iff_unlock(iff);
+- err = -ENOMEM;
+- goto done;
+- }
+- conn->out = 1;
+- }
+-
+- l2cap_iff_unlock(iff);
+-
+- l2cap_chan_add(conn, sk, NULL);
+-
+- sk->state = BT_CONNECT;
+- l2cap_sock_set_timer(sk, sk->sndtimeo);
+-
+- switch (conn->state) {
+- case BT_CONNECTED:
+- if (sk->type == SOCK_SEQPACKET) {
+- l2cap_conn_req req;
+- req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- req.psm = l2cap_pi(sk)->psm;
+- l2cap_send_req(conn, L2CAP_CONN_REQ, L2CAP_CONN_REQ_SIZE, &req);
+- } else {
+- l2cap_sock_clear_timer(sk);
+- sk->state = BT_CONNECTED;
+- }
+- break;
+-
+- case BT_CONNECT:
+- break;
+-
+- default:
+- /* Create ACL connection */
+- conn->state = BT_CONNECT;
+- hci_connect(iff->hdev, dst);
+- break;
+- };
+-
+-done:
+- read_unlock_bh(&l2cap_rt_lock);
+- return err;
+-}
+-
+-/* ------ Channel queues for listening sockets ------ */
+-void l2cap_accept_queue(struct sock *parent, struct sock *sk)
+-{
+- struct l2cap_accept_q *q = &l2cap_pi(parent)->accept_q;
+-
+- DBG("parent %p, sk %p", parent, sk);
+-
+- sock_hold(sk);
+- l2cap_pi(sk)->parent = parent;
+- l2cap_pi(sk)->next_q = NULL;
+-
+- if (!q->head) {
+- q->head = q->tail = sk;
+- } else {
+- struct sock *tail = q->tail;
+-
+- l2cap_pi(sk)->prev_q = tail;
+- l2cap_pi(tail)->next_q = sk;
+- q->tail = sk;
+- }
+-
+- parent->ack_backlog++;
+-}
+-
+-void l2cap_accept_unlink(struct sock *sk)
+-{
+- struct sock *parent = l2cap_pi(sk)->parent;
+- struct l2cap_accept_q *q = &l2cap_pi(parent)->accept_q;
+- struct sock *next, *prev;
+-
+- DBG("sk %p", sk);
+-
+- next = l2cap_pi(sk)->next_q;
+- prev = l2cap_pi(sk)->prev_q;
+-
+- if (sk == q->head)
+- q->head = next;
+- if (sk == q->tail)
+- q->tail = prev;
+-
+- if (next)
+- l2cap_pi(next)->prev_q = prev;
+- if (prev)
+- l2cap_pi(prev)->next_q = next;
+-
+- l2cap_pi(sk)->parent = NULL;
+-
+- parent->ack_backlog--;
+- __sock_put(sk);
+-}
+-
+-/* Get next connected channel in queue. */
+-struct sock *l2cap_accept_dequeue(struct sock *parent, int state)
+-{
+- struct l2cap_accept_q *q = &l2cap_pi(parent)->accept_q;
+- struct sock *sk;
+-
+- for (sk = q->head; sk; sk = l2cap_pi(sk)->next_q) {
+- if (!state || sk->state == state) {
+- l2cap_accept_unlink(sk);
+- break;
+- }
+- }
+-
+- DBG("parent %p, sk %p", parent, sk);
+-
+- return sk;
+-}
+-
+-/* -------- Socket interface ---------- */
+-static struct sock *__l2cap_get_sock_by_addr(struct sockaddr_l2 *addr)
+-{
+- bdaddr_t *src = &addr->l2_bdaddr;
+- __u16 psm = addr->l2_psm;
+- struct sock *sk;
+-
+- for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
+- if (l2cap_pi(sk)->psm == psm &&
+- !bacmp(&l2cap_pi(sk)->src, src))
+- break;
+- }
+-
+- return sk;
+-}
+-
+-/* Find socket listening on psm and source bdaddr.
+- * Returns closest match.
+- */
+-static struct sock *l2cap_get_sock_listen(bdaddr_t *src, __u16 psm)
+-{
+- struct sock *sk, *sk1 = NULL;
+-
+- read_lock(&l2cap_sk_list.lock);
+-
+- for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
+- struct l2cap_pinfo *pi;
+-
+- if (sk->state != BT_LISTEN)
+- continue;
+-
+- pi = l2cap_pi(sk);
+-
+- if (pi->psm == psm) {
+- /* Exact match. */
+- if (!bacmp(&pi->src, src))
+- break;
+-
+- /* Closest match */
+- if (!bacmp(&pi->src, BDADDR_ANY))
+- sk1 = sk;
+- }
+- }
+-
+- read_unlock(&l2cap_sk_list.lock);
+-
+- return sk ? sk : sk1;
+-}
+-
+-static void l2cap_sock_destruct(struct sock *sk)
+-{
+- DBG("sk %p", sk);
+-
+- skb_queue_purge(&sk->receive_queue);
+- skb_queue_purge(&sk->write_queue);
+-
+- MOD_DEC_USE_COUNT;
+-}
+-
+-static void l2cap_sock_cleanup_listen(struct sock *parent)
+-{
+- struct sock *sk;
+-
+- DBG("parent %p", parent);
+-
+- /* Close not yet accepted channels */
+- while ((sk = l2cap_accept_dequeue(parent, 0)))
+- l2cap_sock_close(sk);
+-
+- parent->state = BT_CLOSED;
+- parent->zapped = 1;
+-}
+-
+-/* Kill socket (only if zapped and orphan)
+- * Must be called on unlocked socket.
+- */
+-static void l2cap_sock_kill(struct sock *sk)
+-{
+- if (!sk->zapped || sk->socket)
+- return;
+-
+- DBG("sk %p state %d", sk, sk->state);
+-
+- /* Kill poor orphan */
+- bluez_sock_unlink(&l2cap_sk_list, sk);
+- sk->dead = 1;
+- sock_put(sk);
+-}
+-
+-/* Close socket.
+- * Must be called on unlocked socket.
+- */
+-static void l2cap_sock_close(struct sock *sk)
+-{
+- struct l2cap_conn *conn;
+-
+- l2cap_sock_clear_timer(sk);
+-
+- lock_sock(sk);
+-
+- conn = l2cap_pi(sk)->conn;
+-
+- DBG("sk %p state %d conn %p socket %p", sk, sk->state, conn, sk->socket);
+-
+- switch (sk->state) {
+- case BT_LISTEN:
+- l2cap_sock_cleanup_listen(sk);
+- break;
+-
+- case BT_CONNECTED:
+- case BT_CONFIG:
+- if (sk->type == SOCK_SEQPACKET) {
+- l2cap_disconn_req req;
+-
+- sk->state = BT_DISCONN;
+-
+- req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+- req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- l2cap_send_req(conn, L2CAP_DISCONN_REQ, L2CAP_DISCONN_REQ_SIZE, &req);
+-
+- l2cap_sock_set_timer(sk, sk->sndtimeo);
+- } else {
+- l2cap_chan_del(sk, ECONNRESET);
+- }
+- break;
+-
+- case BT_CONNECT:
+- case BT_DISCONN:
+- l2cap_chan_del(sk, ECONNRESET);
+- break;
+-
+- default:
+- sk->zapped = 1;
+- break;
+- };
+-
+- release_sock(sk);
+-
+- l2cap_sock_kill(sk);
+-}
+-
+-static void l2cap_sock_init(struct sock *sk, struct sock *parent)
+-{
+- struct l2cap_pinfo *pi = l2cap_pi(sk);
+-
+- DBG("sk %p", sk);
+-
+- if (parent) {
+- sk->type = parent->type;
+-
+- pi->imtu = l2cap_pi(parent)->imtu;
+- pi->omtu = l2cap_pi(parent)->omtu;
+- } else {
+- pi->imtu = L2CAP_DEFAULT_MTU;
+- pi->omtu = 0;
+- }
+-
+- /* Default config options */
+- pi->conf_mtu = L2CAP_DEFAULT_MTU;
+- pi->flush_to = L2CAP_DEFAULT_FLUSH_TO;
+-}
+-
+-static struct sock *l2cap_sock_alloc(struct socket *sock, int proto, int prio)
+-{
+- struct sock *sk;
+-
+- if (!(sk = sk_alloc(PF_BLUETOOTH, prio, 1)))
+- return NULL;
+-
+- sock_init_data(sock, sk);
+-
+- sk->zapped = 0;
+-
+- sk->destruct = l2cap_sock_destruct;
+- sk->sndtimeo = L2CAP_CONN_TIMEOUT;
+-
+- sk->protocol = proto;
+- sk->state = BT_OPEN;
+-
+- l2cap_sock_init_timer(sk);
+-
+- bluez_sock_link(&l2cap_sk_list, sk);
+-
+- MOD_INC_USE_COUNT;
+-
+- return sk;
+-}
+-
+-static int l2cap_sock_create(struct socket *sock, int protocol)
+-{
+- struct sock *sk;
+-
+- DBG("sock %p", sock);
+-
+- sock->state = SS_UNCONNECTED;
+-
+- if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_RAW)
+- return -ESOCKTNOSUPPORT;
+-
+- sock->ops = &l2cap_sock_ops;
+-
+- if (!(sk = l2cap_sock_alloc(sock, protocol, GFP_KERNEL)))
+- return -ENOMEM;
+-
+- l2cap_sock_init(sk, NULL);
+-
+- return 0;
+-}
+-
+-static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
+-{
+- struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
+- struct sock *sk = sock->sk;
+- int err = 0;
+-
+- DBG("sk %p, %s %d", sk, batostr(&la->l2_bdaddr), la->l2_psm);
+-
+- if (!addr || addr->sa_family != AF_BLUETOOTH)
+- return -EINVAL;
+-
+- lock_sock(sk);
+-
+- if (sk->state != BT_OPEN) {
+- err = -EBADFD;
+- goto done;
+- }
+-
+- write_lock(&l2cap_sk_list.lock);
+-
+- if (la->l2_psm && __l2cap_get_sock_by_addr(la)) {
+- err = -EADDRINUSE;
+- goto unlock;
+- }
+-
+- /* Save source address */
+- bacpy(&l2cap_pi(sk)->src, &la->l2_bdaddr);
+- l2cap_pi(sk)->psm = la->l2_psm;
+- sk->state = BT_BOUND;
+-
+-unlock:
+- write_unlock(&l2cap_sk_list.lock);
+-
+-done:
+- release_sock(sk);
+-
+- return err;
+-}
+-
+-static int l2cap_sock_w4_connect(struct sock *sk, int flags)
+-{
+- DECLARE_WAITQUEUE(wait, current);
+- long timeo = sock_sndtimeo(sk, flags & O_NONBLOCK);
+- int err = 0;
+-
+- DBG("sk %p", sk);
+-
+- add_wait_queue(sk->sleep, &wait);
+- current->state = TASK_INTERRUPTIBLE;
+-
+- while (sk->state != BT_CONNECTED) {
+- if (!timeo) {
+- err = -EAGAIN;
+- break;
+- }
+-
+- release_sock(sk);
+- timeo = schedule_timeout(timeo);
+- lock_sock(sk);
+-
+- err = 0;
+- if (sk->state == BT_CONNECTED)
+- break;
+-
+- if (sk->err) {
+- err = sock_error(sk);
+- break;
+- }
+-
+- if (signal_pending(current)) {
+- err = sock_intr_errno(timeo);
+- break;
+- }
+- }
+- current->state = TASK_RUNNING;
+- remove_wait_queue(sk->sleep, &wait);
+-
+- return err;
+-}
+-
+-static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
+-{
+- struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
+- struct sock *sk = sock->sk;
+- int err = 0;
+-
+- lock_sock(sk);
+-
+- DBG("sk %p", sk);
+-
+- if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_l2)) {
+- err = -EINVAL;
+- goto done;
+- }
+-
+- if (sk->state != BT_OPEN && sk->state != BT_BOUND) {
+- err = -EBADFD;
+- goto done;
+- }
+-
+- if (sk->type == SOCK_SEQPACKET && !la->l2_psm) {
+- err = -EINVAL;
+- goto done;
+- }
+-
+- /* Set destination address and psm */
+- bacpy(&l2cap_pi(sk)->dst, &la->l2_bdaddr);
+- l2cap_pi(sk)->psm = la->l2_psm;
+-
+- if ((err = l2cap_connect(sk)))
+- goto done;
+-
+- err = l2cap_sock_w4_connect(sk, flags);
+-
+-done:
+- release_sock(sk);
+- return err;
+-}
+-
+-int l2cap_sock_listen(struct socket *sock, int backlog)
+-{
+- struct sock *sk = sock->sk;
+- int err = 0;
+-
+- DBG("sk %p backlog %d", sk, backlog);
+-
+- lock_sock(sk);
+-
+- if (sk->state != BT_BOUND || sock->type != SOCK_SEQPACKET) {
+- err = -EBADFD;
+- goto done;
+- }
+-
+- if (!l2cap_pi(sk)->psm) {
+- err = -EINVAL;
+- goto done;
+- }
+-
+- sk->max_ack_backlog = backlog;
+- sk->ack_backlog = 0;
+- sk->state = BT_LISTEN;
+-
+-done:
+- release_sock(sk);
+- return err;
+-}
+-
+-int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags)
+-{
+- DECLARE_WAITQUEUE(wait, current);
+- struct sock *sk = sock->sk, *ch;
+- long timeo;
+- int err = 0;
+-
+- lock_sock(sk);
+-
+- if (sk->state != BT_LISTEN) {
+- err = -EBADFD;
+- goto done;
+- }
+-
+- timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
+-
+- DBG("sk %p timeo %ld", sk, timeo);
+-
+- /* Wait for an incoming connection. (wake-one). */
+- add_wait_queue_exclusive(sk->sleep, &wait);
+- current->state = TASK_INTERRUPTIBLE;
+- while (!(ch = l2cap_accept_dequeue(sk, BT_CONNECTED))) {
+- if (!timeo) {
+- err = -EAGAIN;
+- break;
+- }
+-
+- release_sock(sk);
+- timeo = schedule_timeout(timeo);
+- lock_sock(sk);
+-
+- if (sk->state != BT_LISTEN) {
+- err = -EBADFD;
+- break;
+- }
+-
+- if (signal_pending(current)) {
+- err = sock_intr_errno(timeo);
+- break;
+- }
+- }
+- current->state = TASK_RUNNING;
+- remove_wait_queue(sk->sleep, &wait);
+-
+- if (err)
+- goto done;
+-
+- sock_graft(ch, newsock);
+- newsock->state = SS_CONNECTED;
+-
+- DBG("new socket %p", ch);
+-
+-done:
+- release_sock(sk);
+-
+- return err;
+-}
+-
+-static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
+-{
+- struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
+- struct sock *sk = sock->sk;
+-
+- DBG("sock %p, sk %p", sock, sk);
+-
+- addr->sa_family = AF_BLUETOOTH;
+- *len = sizeof(struct sockaddr_l2);
+-
+- if (peer)
+- bacpy(&la->l2_bdaddr, &l2cap_pi(sk)->dst);
+- else
+- bacpy(&la->l2_bdaddr, &l2cap_pi(sk)->src);
+-
+- la->l2_psm = l2cap_pi(sk)->psm;
+-
+- return 0;
+-}
+-
+-static int l2cap_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct scm_cookie *scm)
+-{
+- struct sock *sk = sock->sk;
+- int err = 0;
+-
+- DBG("sock %p, sk %p", sock, sk);
+-
+- if (sk->err)
+- return sock_error(sk);
+-
+- if (msg->msg_flags & MSG_OOB)
+- return -EOPNOTSUPP;
+-
+- lock_sock(sk);
+-
+- if (sk->state == BT_CONNECTED)
+- err = l2cap_chan_send(sk, msg, len);
+- else
+- err = -ENOTCONN;
+-
+- release_sock(sk);
+- return err;
+-}
+-
+-static int l2cap_sock_recvmsg(struct socket *sock, struct msghdr *msg, int len, int flags, struct scm_cookie *scm)
+-{
+- struct sock *sk = sock->sk;
+- int noblock = flags & MSG_DONTWAIT;
+- int copied, err;
+- struct sk_buff *skb;
+-
+- DBG("sock %p, sk %p", sock, sk);
+-
+- if (flags & (MSG_OOB))
+- return -EOPNOTSUPP;
+-
+- if (sk->state == BT_CLOSED)
+- return 0;
+-
+- if (!(skb = skb_recv_datagram(sk, flags, noblock, &err)))
+- return err;
+-
+- msg->msg_namelen = 0;
+-
+- copied = skb->len;
+- if (len < copied) {
+- msg->msg_flags |= MSG_TRUNC;
+- copied = len;
+- }
+-
+- skb->h.raw = skb->data;
+- err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+-
+- skb_free_datagram(sk, skb);
+-
+- return err ? : copied;
+-}
+-
+-int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, int optlen)
+-{
+- struct sock *sk = sock->sk;
+- struct l2cap_options opts;
+- int err = 0;
+-
+- DBG("sk %p", sk);
+-
+- lock_sock(sk);
+-
+- switch (optname) {
+- case L2CAP_OPTIONS:
+- if (copy_from_user((char *)&opts, optval, optlen)) {
+- err = -EFAULT;
+- break;
+- }
+- l2cap_pi(sk)->imtu = opts.imtu;
+- l2cap_pi(sk)->omtu = opts.omtu;
+- break;
+-
+- default:
+- err = -ENOPROTOOPT;
+- break;
+- };
+-
+- release_sock(sk);
+- return err;
+-}
+-
+-int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, char *optval, int *optlen)
+-{
+- struct sock *sk = sock->sk;
+- struct l2cap_options opts;
+- struct l2cap_conninfo cinfo;
+- int len, err = 0;
+-
+- if (get_user(len, optlen))
+- return -EFAULT;
+-
+- lock_sock(sk);
+-
+- switch (optname) {
+- case L2CAP_OPTIONS:
+- opts.imtu = l2cap_pi(sk)->imtu;
+- opts.omtu = l2cap_pi(sk)->omtu;
+- opts.flush_to = l2cap_pi(sk)->flush_to;
+-
+- len = MIN(len, sizeof(opts));
+- if (copy_to_user(optval, (char *)&opts, len))
+- err = -EFAULT;
+-
+- break;
+-
+- case L2CAP_CONNINFO:
+- if (sk->state != BT_CONNECTED) {
+- err = -ENOTCONN;
+- break;
+- }
+-
+- cinfo.hci_handle = l2cap_pi(sk)->conn->hconn->handle;
+-
+- len = MIN(len, sizeof(cinfo));
+- if (copy_to_user(optval, (char *)&cinfo, len))
+- err = -EFAULT;
+-
+- break;
+-
+- default:
+- err = -ENOPROTOOPT;
+- break;
+- };
+-
+- release_sock(sk);
+- return err;
+-}
+-
+-static unsigned int l2cap_sock_poll(struct file * file, struct socket *sock, poll_table *wait)
+-{
+- struct sock *sk = sock->sk;
+- struct l2cap_accept_q *aq;
+- unsigned int mask;
+-
+- DBG("sock %p, sk %p", sock, sk);
+-
+- poll_wait(file, sk->sleep, wait);
+- mask = 0;
+-
+- if (sk->err || !skb_queue_empty(&sk->error_queue))
+- mask |= POLLERR;
+-
+- if (sk->shutdown == SHUTDOWN_MASK)
+- mask |= POLLHUP;
+-
+- aq = &l2cap_pi(sk)->accept_q;
+- if (!skb_queue_empty(&sk->receive_queue) || aq->head || (sk->shutdown & RCV_SHUTDOWN))
+- mask |= POLLIN | POLLRDNORM;
+-
+- if (sk->state == BT_CLOSED)
+- mask |= POLLHUP;
+-
+- if (sock_writeable(sk))
+- mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
+- else
+- set_bit(SOCK_ASYNC_NOSPACE, &sk->socket->flags);
+-
+- return mask;
+-}
+-
+-static int l2cap_sock_release(struct socket *sock)
+-{
+- struct sock *sk = sock->sk;
+-
+- DBG("sock %p, sk %p", sock, sk);
+-
+- if (!sk)
+- return 0;
+-
+- sock_orphan(sk);
+-
+- l2cap_sock_close(sk);
+-
+- return 0;
+-}
+-
+-/* --------- L2CAP channels --------- */
+-static struct sock * __l2cap_get_chan_by_dcid(struct l2cap_chan_list *l, __u16 cid)
+-{
+- struct sock *s;
+-
+- for (s = l->head; s; s = l2cap_pi(s)->next_c) {
+- if (l2cap_pi(s)->dcid == cid)
+- break;
+- }
+-
+- return s;
+-}
+-
+-static inline struct sock *l2cap_get_chan_by_dcid(struct l2cap_chan_list *l, __u16 cid)
+-{
+- struct sock *s;
+-
+- read_lock(&l->lock);
+- s = __l2cap_get_chan_by_dcid(l, cid);
+- read_unlock(&l->lock);
+-
+- return s;
+-}
+-
+-static struct sock *__l2cap_get_chan_by_scid(struct l2cap_chan_list *l, __u16 cid)
+-{
+- struct sock *s;
+-
+- for (s = l->head; s; s = l2cap_pi(s)->next_c) {
+- if (l2cap_pi(s)->scid == cid)
+- break;
+- }
+-
+- return s;
+-}
+-static inline struct sock *l2cap_get_chan_by_scid(struct l2cap_chan_list *l, __u16 cid)
+-{
+- struct sock *s;
+-
+- read_lock(&l->lock);
+- s = __l2cap_get_chan_by_scid(l, cid);
+- read_unlock(&l->lock);
+-
+- return s;
+-}
+-
+-static struct sock *__l2cap_get_chan_by_ident(struct l2cap_chan_list *l, __u8 ident)
+-{
+- struct sock *s;
+-
+- for (s = l->head; s; s = l2cap_pi(s)->next_c) {
+- if (l2cap_pi(s)->ident == ident)
+- break;
+- }
+-
+- return s;
+-}
+-
+-static inline struct sock *l2cap_get_chan_by_ident(struct l2cap_chan_list *l, __u8 ident)
+-{
+- struct sock *s;
+-
+- read_lock(&l->lock);
+- s = __l2cap_get_chan_by_ident(l, ident);
+- read_unlock(&l->lock);
+-
+- return s;
+-}
+-
+-static __u16 l2cap_alloc_cid(struct l2cap_chan_list *l)
+-{
+- __u16 cid = 0x0040;
+-
+- for (; cid < 0xffff; cid++) {
+- if(!__l2cap_get_chan_by_scid(l, cid))
+- return cid;
+- }
+-
+- return 0;
+-}
+-
+-static inline void __l2cap_chan_link(struct l2cap_chan_list *l, struct sock *sk)
+-{
+- sock_hold(sk);
+-
+- if (l->head)
+- l2cap_pi(l->head)->prev_c = sk;
+-
+- l2cap_pi(sk)->next_c = l->head;
+- l2cap_pi(sk)->prev_c = NULL;
+- l->head = sk;
+-}
+-
+-static inline void l2cap_chan_unlink(struct l2cap_chan_list *l, struct sock *sk)
+-{
+- struct sock *next = l2cap_pi(sk)->next_c, *prev = l2cap_pi(sk)->prev_c;
+-
+- write_lock(&l->lock);
+- if (sk == l->head)
+- l->head = next;
+-
+- if (next)
+- l2cap_pi(next)->prev_c = prev;
+- if (prev)
+- l2cap_pi(prev)->next_c = next;
+- write_unlock(&l->lock);
+-
+- __sock_put(sk);
+-}
+-
+-static void __l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent)
+-{
+- struct l2cap_chan_list *l = &conn->chan_list;
+-
+- DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn, l2cap_pi(sk)->psm, l2cap_pi(sk)->dcid);
+-
+- l2cap_conn_clear_timer(conn);
+-
+- atomic_inc(&conn->refcnt);
+- l2cap_pi(sk)->conn = conn;
+-
+- if (sk->type == SOCK_SEQPACKET) {
+- /* Alloc CID for normal socket */
+- l2cap_pi(sk)->scid = l2cap_alloc_cid(l);
+- } else {
+- /* Raw socket can send only signalling messages */
+- l2cap_pi(sk)->scid = 0x0001;
+- l2cap_pi(sk)->dcid = 0x0001;
+- l2cap_pi(sk)->omtu = L2CAP_DEFAULT_MTU;
+- }
+-
+- __l2cap_chan_link(l, sk);
+-
+- if (parent)
+- l2cap_accept_queue(parent, sk);
+-}
+-
+-static inline void l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent)
+-{
+- struct l2cap_chan_list *l = &conn->chan_list;
+-
+- write_lock(&l->lock);
+- __l2cap_chan_add(conn, sk, parent);
+- write_unlock(&l->lock);
+-}
+-
+-/* Delete channel.
+- * Must be called on the locked socket. */
+-static void l2cap_chan_del(struct sock *sk, int err)
+-{
+- struct l2cap_conn *conn;
+- struct sock *parent;
+-
+- conn = l2cap_pi(sk)->conn;
+- parent = l2cap_pi(sk)->parent;
+-
+- DBG("sk %p, conn %p, err %d", sk, conn, err);
+-
+- if (parent) {
+- /* Unlink from parent accept queue */
+- bh_lock_sock(parent);
+- l2cap_accept_unlink(sk);
+- bh_unlock_sock(parent);
+- }
+-
+- if (conn) {
+- long timeout;
+-
+- /* Unlink from channel list */
+- l2cap_chan_unlink(&conn->chan_list, sk);
+- l2cap_pi(sk)->conn = NULL;
+-
+- if (conn->out)
+- timeout = L2CAP_DISCONN_TIMEOUT;
+- else
+- timeout = L2CAP_CONN_IDLE_TIMEOUT;
+-
+- if (atomic_dec_and_test(&conn->refcnt) && conn->state == BT_CONNECTED) {
+- /* Schedule Baseband disconnect */
+- l2cap_conn_set_timer(conn, timeout);
+- }
+- }
+-
+- sk->state = BT_CLOSED;
+- sk->err = err;
+- sk->state_change(sk);
+-
+- sk->zapped = 1;
+-}
+-
+-static void l2cap_conn_ready(struct l2cap_conn *conn)
+-{
+- struct l2cap_chan_list *l = &conn->chan_list;
+- struct sock *sk;
+-
+- DBG("conn %p", conn);
+-
+- read_lock(&l->lock);
+-
+- for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
+- bh_lock_sock(sk);
+-
+- if (sk->type != SOCK_SEQPACKET) {
+- sk->state = BT_CONNECTED;
+- sk->state_change(sk);
+- l2cap_sock_clear_timer(sk);
+- } else if (sk->state == BT_CONNECT) {
+- l2cap_conn_req req;
+- req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- req.psm = l2cap_pi(sk)->psm;
+- l2cap_send_req(conn, L2CAP_CONN_REQ, L2CAP_CONN_REQ_SIZE, &req);
+-
+- l2cap_sock_set_timer(sk, sk->sndtimeo);
+- }
+-
+- bh_unlock_sock(sk);
+- }
+-
+- read_unlock(&l->lock);
+-}
+-
+-static void l2cap_chan_ready(struct sock *sk)
+-{
+- struct sock *parent = l2cap_pi(sk)->parent;
+-
+- DBG("sk %p, parent %p", sk, parent);
+-
+- l2cap_pi(sk)->conf_state = 0;
+- l2cap_sock_clear_timer(sk);
+-
+- if (!parent) {
+- /* Outgoing channel.
+- * Wake up socket sleeping on connect.
+- */
+- sk->state = BT_CONNECTED;
+- sk->state_change(sk);
+- } else {
+- /* Incomming channel.
+- * Wake up socket sleeping on accept.
+- */
+- parent->data_ready(parent, 1);
+- }
+-}
+-
+-/* Copy frame to all raw sockets on that connection */
+-void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
+-{
+- struct l2cap_chan_list *l = &conn->chan_list;
+- struct sk_buff *nskb;
+- struct sock * sk;
+-
+- DBG("conn %p", conn);
+-
+- read_lock(&l->lock);
+- for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
+- if (sk->type != SOCK_RAW)
+- continue;
+-
+- /* Don't send frame to the socket it came from */
+- if (skb->sk == sk)
+- continue;
+-
+- if (!(nskb = skb_clone(skb, GFP_ATOMIC)))
+- continue;
+-
+- skb_queue_tail(&sk->receive_queue, nskb);
+- sk->data_ready(sk, nskb->len);
+- }
+- read_unlock(&l->lock);
+-}
+-
+-static int l2cap_chan_send(struct sock *sk, struct msghdr *msg, int len)
+-{
+- struct l2cap_conn *conn = l2cap_pi(sk)->conn;
+- struct sk_buff *skb, **frag;
+- int err, size, count, sent=0;
+- l2cap_hdr *lh;
+-
+- /* Check outgoing MTU */
+- if (len > l2cap_pi(sk)->omtu)
+- return -EINVAL;
+-
+- DBG("sk %p len %d", sk, len);
+-
+- /* First fragment (with L2CAP header) */
+- count = MIN(conn->iff->mtu - L2CAP_HDR_SIZE, len);
+- size = L2CAP_HDR_SIZE + count;
+- if (!(skb = bluez_skb_send_alloc(sk, size, msg->msg_flags & MSG_DONTWAIT, &err)))
+- return err;
+-
+- /* Create L2CAP header */
+- lh = (l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
+- lh->len = __cpu_to_le16(len);
+- lh->cid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+-
+- if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count)) {
+- err = -EFAULT;
+- goto fail;
+- }
+-
+- sent += count;
+- len -= count;
+-
+- /* Continuation fragments (no L2CAP header) */
+- frag = &skb_shinfo(skb)->frag_list;
+- while (len) {
+- count = MIN(conn->iff->mtu, len);
+-
+- *frag = bluez_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err);
+- if (!*frag)
+- goto fail;
+-
+- if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count)) {
+- err = -EFAULT;
+- goto fail;
+- }
+-
+- sent += count;
+- len -= count;
+-
+- frag = &(*frag)->next;
+- }
+-
+- if ((err = hci_send_acl(conn->hconn, skb, 0)) < 0)
+- goto fail;
+-
+- return sent;
+-
+-fail:
+- kfree_skb(skb);
+- return err;
+-}
+-
+-/* --------- L2CAP signalling commands --------- */
+-static inline __u8 l2cap_get_ident(struct l2cap_conn *conn)
+-{
+- __u8 id;
+-
+- /* Get next available identificator.
+- * 1 - 199 are used by kernel.
+- * 200 - 254 are used by utilities like l2ping, etc
+- */
+-
+- spin_lock(&conn->lock);
+-
+- if (++conn->tx_ident > 199)
+- conn->tx_ident = 1;
+-
+- id = conn->tx_ident;
+-
+- spin_unlock(&conn->lock);
+-
+- return id;
+-}
+-
+-static inline struct sk_buff *l2cap_build_cmd(__u8 code, __u8 ident, __u16 len, void *data)
+-{
+- struct sk_buff *skb;
+- l2cap_cmd_hdr *cmd;
+- l2cap_hdr *lh;
+- int size;
+-
+- DBG("code 0x%2.2x, ident 0x%2.2x, len %d", code, ident, len);
+-
+- size = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + len;
+- if (!(skb = bluez_skb_alloc(size, GFP_ATOMIC)))
+- return NULL;
+-
+- lh = (l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
+- lh->len = __cpu_to_le16(L2CAP_CMD_HDR_SIZE + len);
+- lh->cid = __cpu_to_le16(0x0001);
+-
+- cmd = (l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
+- cmd->code = code;
+- cmd->ident = ident;
+- cmd->len = __cpu_to_le16(len);
+-
+- if (len)
+- memcpy(skb_put(skb, len), data, len);
+-
+- return skb;
+-}
+-
+-static int l2cap_send_req(struct l2cap_conn *conn, __u8 code, __u16 len, void *data)
+-{
+- struct sk_buff *skb;
+- __u8 ident;
+-
+- DBG("code 0x%2.2x", code);
+-
+- ident = l2cap_get_ident(conn);
+- if (!(skb = l2cap_build_cmd(code, ident, len, data)))
+- return -ENOMEM;
+- return hci_send_acl(conn->hconn, skb, 0);
+-}
+-
+-static int l2cap_send_rsp(struct l2cap_conn *conn, __u8 ident, __u8 code, __u16 len, void *data)
+-{
+- struct sk_buff *skb;
+-
+- DBG("code 0x%2.2x", code);
+-
+- if (!(skb = l2cap_build_cmd(code, ident, len, data)))
+- return -ENOMEM;
+- return hci_send_acl(conn->hconn, skb, 0);
+-}
+-
+-static inline int l2cap_get_conf_opt(__u8 **ptr, __u8 *type, __u32 *val)
+-{
+- l2cap_conf_opt *opt = (l2cap_conf_opt *) (*ptr);
+- int len;
+-
+- *type = opt->type;
+- switch (opt->len) {
+- case 1:
+- *val = *((__u8 *) opt->val);
+- break;
+-
+- case 2:
+- *val = __le16_to_cpu(*((__u16 *)opt->val));
+- break;
+-
+- case 4:
+- *val = __le32_to_cpu(*((__u32 *)opt->val));
+- break;
+-
+- default:
+- *val = 0L;
+- break;
+- };
+-
+- DBG("type 0x%2.2x len %d val 0x%8.8x", *type, opt->len, *val);
+-
+- len = L2CAP_CONF_OPT_SIZE + opt->len;
+-
+- *ptr += len;
+-
+- return len;
+-}
+-
+-static inline void l2cap_parse_conf_req(struct sock *sk, char *data, int len)
+-{
+- __u8 type, hint; __u32 val;
+- __u8 *ptr = data;
+-
+- DBG("sk %p len %d", sk, len);
+-
+- while (len >= L2CAP_CONF_OPT_SIZE) {
+- len -= l2cap_get_conf_opt(&ptr, &type, &val);
+-
+- hint = type & 0x80;
+- type &= 0x7f;
+-
+- switch (type) {
+- case L2CAP_CONF_MTU:
+- l2cap_pi(sk)->conf_mtu = val;
+- break;
+-
+- case L2CAP_CONF_FLUSH_TO:
+- l2cap_pi(sk)->flush_to = val;
+- break;
+-
+- case L2CAP_CONF_QOS:
+- break;
+-
+- default:
+- if (hint)
+- break;
+-
+- /* FIXME: Reject unknon option */
+- break;
+- };
+- }
+-}
+-
+-static inline void l2cap_add_conf_opt(__u8 **ptr, __u8 type, __u8 len, __u32 val)
+-{
+- register l2cap_conf_opt *opt = (l2cap_conf_opt *) (*ptr);
+-
+- DBG("type 0x%2.2x len %d val 0x%8.8x", type, len, val);
+-
+- opt->type = type;
+- opt->len = len;
+- switch (len) {
+- case 1:
+- *((__u8 *) opt->val) = val;
+- break;
+-
+- case 2:
+- *((__u16 *) opt->val) = __cpu_to_le16(val);
+- break;
+-
+- case 4:
+- *((__u32 *) opt->val) = __cpu_to_le32(val);
+- break;
+- };
+-
+- *ptr += L2CAP_CONF_OPT_SIZE + len;
+-}
+-
+-static int l2cap_build_conf_req(struct sock *sk, __u8 *data)
+-{
+- struct l2cap_pinfo *pi = l2cap_pi(sk);
+- l2cap_conf_req *req = (l2cap_conf_req *) data;
+- __u8 *ptr = req->data;
+-
+- DBG("sk %p", sk);
+-
+- if (pi->imtu != L2CAP_DEFAULT_MTU)
+- l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->imtu);
+-
+- /* FIXME. Need actual value of the flush timeout */
+- //if (flush_to != L2CAP_DEFAULT_FLUSH_TO)
+- // l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO, 2, pi->flush_to);
+-
+- req->dcid = __cpu_to_le16(pi->dcid);
+- req->flags = __cpu_to_le16(0);
+-
+- return ptr - data;
+-}
+-
+-static int l2cap_conf_output(struct sock *sk, __u8 **ptr)
+-{
+- struct l2cap_pinfo *pi = l2cap_pi(sk);
+- int result = 0;
+-
+- /* Configure output options and let other side know
+- * which ones we don't like.
+- */
+- if (pi->conf_mtu < pi->omtu) {
+- l2cap_add_conf_opt(ptr, L2CAP_CONF_MTU, 2, l2cap_pi(sk)->omtu);
+- result = L2CAP_CONF_UNACCEPT;
+- } else {
+- pi->omtu = pi->conf_mtu;
+- }
+-
+- DBG("sk %p result %d", sk, result);
+- return result;
+-}
+-
+-static int l2cap_build_conf_rsp(struct sock *sk, __u8 *data, int *result)
+-{
+- l2cap_conf_rsp *rsp = (l2cap_conf_rsp *) data;
+- __u8 *ptr = rsp->data;
+-
+- DBG("sk %p complete %d", sk, result ? 1 : 0);
+-
+- if (result)
+- *result = l2cap_conf_output(sk, &ptr);
+-
+- rsp->scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+- rsp->result = __cpu_to_le16(result ? *result : 0);
+- rsp->flags = __cpu_to_le16(0);
+-
+- return ptr - data;
+-}
+-
+-static inline int l2cap_connect_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
+-{
+- struct l2cap_chan_list *list = &conn->chan_list;
+- l2cap_conn_req *req = (l2cap_conn_req *) data;
+- l2cap_conn_rsp rsp;
+- struct sock *sk, *parent;
+-
+- __u16 scid = __le16_to_cpu(req->scid);
+- __u16 psm = req->psm;
+-
+- DBG("psm 0x%2.2x scid 0x%4.4x", psm, scid);
+-
+- /* Check if we have socket listening on psm */
+- if (!(parent = l2cap_get_sock_listen(&conn->src, psm)))
+- goto reject;
+-
+- bh_lock_sock(parent);
+- write_lock(&list->lock);
+-
+- /* Check if we already have channel with that dcid */
+- if (__l2cap_get_chan_by_dcid(list, scid))
+- goto unlock;
+-
+- /* Check for backlog size */
+- if (parent->ack_backlog > parent->max_ack_backlog)
+- goto unlock;
+-
+- if (!(sk = l2cap_sock_alloc(NULL, BTPROTO_L2CAP, GFP_ATOMIC)))
+- goto unlock;
+-
+- l2cap_sock_init(sk, parent);
+-
+- bacpy(&l2cap_pi(sk)->src, &conn->src);
+- bacpy(&l2cap_pi(sk)->dst, &conn->dst);
+- l2cap_pi(sk)->psm = psm;
+- l2cap_pi(sk)->dcid = scid;
+-
+- __l2cap_chan_add(conn, sk, parent);
+- sk->state = BT_CONFIG;
+-
+- write_unlock(&list->lock);
+- bh_unlock_sock(parent);
+-
+- rsp.dcid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- rsp.scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+- rsp.result = __cpu_to_le16(0);
+- rsp.status = __cpu_to_le16(0);
+- l2cap_send_rsp(conn, cmd->ident, L2CAP_CONN_RSP, L2CAP_CONN_RSP_SIZE, &rsp);
+-
+- return 0;
+-
+-unlock:
+- write_unlock(&list->lock);
+- bh_unlock_sock(parent);
+-
+-reject:
+- rsp.scid = __cpu_to_le16(scid);
+- rsp.dcid = __cpu_to_le16(0);
+- rsp.status = __cpu_to_le16(0);
+- rsp.result = __cpu_to_le16(L2CAP_CONN_NO_MEM);
+- l2cap_send_rsp(conn, cmd->ident, L2CAP_CONN_RSP, L2CAP_CONN_RSP_SIZE, &rsp);
+-
+- return 0;
+-}
+-
+-static inline int l2cap_connect_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
+-{
+- l2cap_conn_rsp *rsp = (l2cap_conn_rsp *) data;
+- __u16 scid, dcid, result, status;
+- struct sock *sk;
+-
+- scid = __le16_to_cpu(rsp->scid);
+- dcid = __le16_to_cpu(rsp->dcid);
+- result = __le16_to_cpu(rsp->result);
+- status = __le16_to_cpu(rsp->status);
+-
+- DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x", dcid, scid, result, status);
+-
+- if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
+- return -ENOENT;
+-
+- bh_lock_sock(sk);
+-
+- if (!result) {
+- char req[64];
+-
+- sk->state = BT_CONFIG;
+- l2cap_pi(sk)->dcid = dcid;
+- l2cap_pi(sk)->conf_state |= CONF_REQ_SENT;
+-
+- l2cap_send_req(conn, L2CAP_CONF_REQ, l2cap_build_conf_req(sk, req), req);
+- } else {
+- l2cap_chan_del(sk, ECONNREFUSED);
+- }
+-
+- bh_unlock_sock(sk);
+- return 0;
+-}
+-
+-static inline int l2cap_config_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
+-{
+- l2cap_conf_req * req = (l2cap_conf_req *) data;
+- __u16 dcid, flags;
+- __u8 rsp[64];
+- struct sock *sk;
+- int result;
+-
+- dcid = __le16_to_cpu(req->dcid);
+- flags = __le16_to_cpu(req->flags);
+-
+- DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
+-
+- if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid)))
+- return -ENOENT;
+-
+- bh_lock_sock(sk);
+-
+- l2cap_parse_conf_req(sk, req->data, cmd->len - L2CAP_CONF_REQ_SIZE);
+-
+- if (flags & 0x01) {
+- /* Incomplete config. Send empty response. */
+- l2cap_send_rsp(conn, cmd->ident, L2CAP_CONF_RSP, l2cap_build_conf_rsp(sk, rsp, NULL), rsp);
+- goto unlock;
+- }
+-
+- /* Complete config. */
+- l2cap_send_rsp(conn, cmd->ident, L2CAP_CONF_RSP, l2cap_build_conf_rsp(sk, rsp, &result), rsp);
+-
+- if (result)
+- goto unlock;
+-
+- /* Output config done */
+- l2cap_pi(sk)->conf_state |= CONF_OUTPUT_DONE;
+-
+- if (l2cap_pi(sk)->conf_state & CONF_INPUT_DONE) {
+- sk->state = BT_CONNECTED;
+- l2cap_chan_ready(sk);
+- } else if (!(l2cap_pi(sk)->conf_state & CONF_REQ_SENT)) {
+- char req[64];
+- l2cap_send_req(conn, L2CAP_CONF_REQ, l2cap_build_conf_req(sk, req), req);
+- }
+-
+-unlock:
+- bh_unlock_sock(sk);
+-
+- return 0;
+-}
+-
+-static inline int l2cap_config_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
+-{
+- l2cap_conf_rsp *rsp = (l2cap_conf_rsp *)data;
+- __u16 scid, flags, result;
+- struct sock *sk;
+- int err = 0;
+-
+- scid = __le16_to_cpu(rsp->scid);
+- flags = __le16_to_cpu(rsp->flags);
+- result = __le16_to_cpu(rsp->result);
+-
+- DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x", scid, flags, result);
+-
+- if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
+- return -ENOENT;
+-
+- bh_lock_sock(sk);
+-
+- if (result) {
+- l2cap_disconn_req req;
+-
+- /* They didn't like our options. Well... we do not negotiate.
+- * Close channel.
+- */
+- sk->state = BT_DISCONN;
+-
+- req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+- req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- l2cap_send_req(conn, L2CAP_DISCONN_REQ, L2CAP_DISCONN_REQ_SIZE, &req);
+-
+- l2cap_sock_set_timer(sk, sk->sndtimeo);
+- goto done;
+- }
+-
+- if (flags & 0x01)
+- goto done;
+-
+- /* Input config done */
+- l2cap_pi(sk)->conf_state |= CONF_INPUT_DONE;
+-
+- if (l2cap_pi(sk)->conf_state & CONF_OUTPUT_DONE) {
+- sk->state = BT_CONNECTED;
+- l2cap_chan_ready(sk);
+- }
+-
+-done:
+- bh_unlock_sock(sk);
+-
+- return err;
+-}
+-
+-static inline int l2cap_disconnect_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
+-{
+- l2cap_disconn_req *req = (l2cap_disconn_req *) data;
+- l2cap_disconn_rsp rsp;
+- __u16 dcid, scid;
+- struct sock *sk;
+-
+- scid = __le16_to_cpu(req->scid);
+- dcid = __le16_to_cpu(req->dcid);
+-
+- DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
+-
+- if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid)))
+- return 0;
+-
+- bh_lock_sock(sk);
+-
+- rsp.dcid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- rsp.scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+- l2cap_send_rsp(conn, cmd->ident, L2CAP_DISCONN_RSP, L2CAP_DISCONN_RSP_SIZE, &rsp);
+-
+- l2cap_chan_del(sk, ECONNRESET);
+-
+- bh_unlock_sock(sk);
+-
+- l2cap_sock_kill(sk);
+-
+- return 0;
+-}
+-
+-static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
+-{
+- l2cap_disconn_rsp *rsp = (l2cap_disconn_rsp *) data;
+- __u16 dcid, scid;
+- struct sock *sk;
+-
+- scid = __le16_to_cpu(rsp->scid);
+- dcid = __le16_to_cpu(rsp->dcid);
+-
+- DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
+-
+- if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
+- return -ENOENT;
+-
+- bh_lock_sock(sk);
+- l2cap_sock_clear_timer(sk);
+- l2cap_chan_del(sk, ECONNABORTED);
+- bh_unlock_sock(sk);
+-
+- l2cap_sock_kill(sk);
+-
+- return 0;
+-}
+-
+-static inline void l2cap_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
+-{
+- __u8 *data = skb->data;
+- int len = skb->len;
+- l2cap_cmd_hdr cmd;
+- int err = 0;
+-
+- while (len >= L2CAP_CMD_HDR_SIZE) {
+- memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
+- data += L2CAP_CMD_HDR_SIZE;
+- len -= L2CAP_CMD_HDR_SIZE;
+-
+- cmd.len = __le16_to_cpu(cmd.len);
+-
+- DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd.len, cmd.ident);
+-
+- if (cmd.len > len || !cmd.ident) {
+- DBG("corrupted command");
+- break;
+- }
+-
+- switch (cmd.code) {
+- case L2CAP_CONN_REQ:
+- err = l2cap_connect_req(conn, &cmd, data);
+- break;
+-
+- case L2CAP_CONN_RSP:
+- err = l2cap_connect_rsp(conn, &cmd, data);
+- break;
+-
+- case L2CAP_CONF_REQ:
+- err = l2cap_config_req(conn, &cmd, data);
+- break;
+-
+- case L2CAP_CONF_RSP:
+- err = l2cap_config_rsp(conn, &cmd, data);
+- break;
+-
+- case L2CAP_DISCONN_REQ:
+- err = l2cap_disconnect_req(conn, &cmd, data);
+- break;
+-
+- case L2CAP_DISCONN_RSP:
+- err = l2cap_disconnect_rsp(conn, &cmd, data);
+- break;
+-
+- case L2CAP_COMMAND_REJ:
+- /* FIXME: We should process this */
+- l2cap_raw_recv(conn, skb);
+- break;
+-
+- case L2CAP_ECHO_REQ:
+- l2cap_send_rsp(conn, cmd.ident, L2CAP_ECHO_RSP, cmd.len, data);
+- break;
+-
+- case L2CAP_ECHO_RSP:
+- case L2CAP_INFO_REQ:
+- case L2CAP_INFO_RSP:
+- l2cap_raw_recv(conn, skb);
+- break;
+-
+- default:
+- ERR("Uknown signaling command 0x%2.2x", cmd.code);
+- err = -EINVAL;
+- break;
+- };
+-
+- if (err) {
+- l2cap_cmd_rej rej;
+- DBG("error %d", err);
+-
+- /* FIXME: Map err to a valid reason. */
+- rej.reason = __cpu_to_le16(0);
+- l2cap_send_rsp(conn, cmd.ident, L2CAP_COMMAND_REJ, L2CAP_CMD_REJ_SIZE, &rej);
+- }
+-
+- data += cmd.len;
+- len -= cmd.len;
+- }
+-
+- kfree_skb(skb);
+-}
+-
+-static inline int l2cap_data_channel(struct l2cap_conn *conn, __u16 cid, struct sk_buff *skb)
+-{
+- struct sock *sk;
+-
+- if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, cid))) {
+- DBG("unknown cid 0x%4.4x", cid);
+- goto drop;
+- }
+-
+- DBG("sk %p, len %d", sk, skb->len);
+-
+- if (sk->state != BT_CONNECTED)
+- goto drop;
+-
+- if (l2cap_pi(sk)->imtu < skb->len)
+- goto drop;
+-
+- skb_queue_tail(&sk->receive_queue, skb);
+- sk->data_ready(sk, skb->len);
+-
+- return 0;
+-
+-drop:
+- kfree_skb(skb);
+-
+- return 0;
+-}
+-
+-static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
+-{
+- l2cap_hdr *lh = (l2cap_hdr *) skb->data;
+- __u16 cid, len;
+-
+- skb_pull(skb, L2CAP_HDR_SIZE);
+- cid = __le16_to_cpu(lh->cid);
+- len = __le16_to_cpu(lh->len);
+-
+- DBG("len %d, cid 0x%4.4x", len, cid);
+-
+- if (cid == 0x0001)
+- l2cap_sig_channel(conn, skb);
+- else
+- l2cap_data_channel(conn, cid, skb);
+-}
+-
+-/* ------------ L2CAP interface with lower layer (HCI) ------------- */
+-static int l2cap_dev_event(struct notifier_block *this, unsigned long event, void *ptr)
+-{
+- struct hci_dev *hdev = (struct hci_dev *) ptr;
+-
+- DBG("hdev %s, event %ld", hdev->name, event);
+-
+- write_lock(&l2cap_rt_lock);
+-
+- switch (event) {
+- case HCI_DEV_UP:
+- l2cap_iff_add(hdev);
+- break;
+-
+- case HCI_DEV_DOWN:
+- l2cap_iff_del(hdev);
+- break;
+- };
+-
+- write_unlock(&l2cap_rt_lock);
+-
+- return NOTIFY_DONE;
+-}
+-
+-int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
+-{
+- struct l2cap_iff *iff;
+-
+- DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
+-
+- if (!(iff = hdev->l2cap_data)) {
+- ERR("unknown interface");
+- return 0;
+- }
+-
+- /* Always accept connection */
+- return 1;
+-}
+-
+-int l2cap_connect_cfm(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 status, struct hci_conn *hconn)
+-{
+- struct l2cap_conn *conn;
+- struct l2cap_iff *iff;
+- int err = 0;
+-
+- DBG("hdev %s bdaddr %s hconn %p", hdev->name, batostr(bdaddr), hconn);
+-
+- if (!(iff = hdev->l2cap_data)) {
+- ERR("unknown interface");
+- return 0;
+- }
+-
+- l2cap_iff_lock(iff);
+-
+- conn = l2cap_get_conn_by_addr(iff, bdaddr);
+-
+- if (conn) {
+- /* Outgoing connection */
+- DBG("Outgoing connection: %s -> %s, %p, %2.2x", batostr(iff->bdaddr), batostr(bdaddr), conn, status);
+-
+- if (!status && hconn) {
+- conn->state = BT_CONNECTED;
+- conn->hconn = hconn;
+-
+- hconn->l2cap_data = (void *)conn;
+-
+- /* Establish channels */
+- l2cap_conn_ready(conn);
+- } else {
+- l2cap_conn_del(conn, bterr(status));
+- }
+- } else {
+- /* Incomming connection */
+- DBG("Incomming connection: %s -> %s, %2.2x", batostr(iff->bdaddr), batostr(bdaddr), status);
+-
+- if (status || !hconn)
+- goto done;
+-
+- if (!(conn = l2cap_conn_add(iff, bdaddr))) {
+- err = -ENOMEM;
+- goto done;
+- }
+-
+- conn->hconn = hconn;
+- hconn->l2cap_data = (void *)conn;
+-
+- conn->state = BT_CONNECTED;
+- }
+-
+-done:
+- l2cap_iff_unlock(iff);
+-
+- return err;
+-}
+-
+-int l2cap_disconn_ind(struct hci_conn *hconn, __u8 reason)
+-{
+- struct l2cap_conn *conn = hconn->l2cap_data;
+-
+- DBG("hconn %p reason %d", hconn, reason);
+-
+- if (!conn) {
+- ERR("unknown connection");
+- return 0;
+- }
+- conn->hconn = NULL;
+-
+- l2cap_iff_lock(conn->iff);
+- l2cap_conn_del(conn, bterr(reason));
+- l2cap_iff_unlock(conn->iff);
+-
+- return 0;
+-}
+-
+-int l2cap_recv_acldata(struct hci_conn *hconn, struct sk_buff *skb, __u16 flags)
+-{
+- struct l2cap_conn *conn = hconn->l2cap_data;
+-
+- if (!conn) {
+- ERR("unknown connection %p", hconn);
+- goto drop;
+- }
+-
+- DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);
+-
+- if (flags & ACL_START) {
+- int flen, tlen, size;
+- l2cap_hdr *lh;
+-
+- if (conn->rx_len) {
+- ERR("Unexpected start frame (len %d)", skb->len);
+- kfree_skb(conn->rx_skb); conn->rx_skb = NULL;
+- conn->rx_len = 0;
+- }
+-
+- if (skb->len < L2CAP_HDR_SIZE) {
+- ERR("Frame is too small (len %d)", skb->len);
+- goto drop;
+- }
+-
+- lh = (l2cap_hdr *)skb->data;
+- tlen = __le16_to_cpu(lh->len);
+- flen = skb->len - L2CAP_HDR_SIZE;
+-
+- DBG("Start: total len %d, frag len %d", tlen, flen);
+-
+- if (flen == tlen) {
+- /* Complete frame received */
+- l2cap_recv_frame(conn, skb);
+- return 0;
+- }
+-
+- /* Allocate skb for the complete frame (with header) */
+- size = L2CAP_HDR_SIZE + tlen;
+- if (!(conn->rx_skb = bluez_skb_alloc(size, GFP_ATOMIC)))
+- goto drop;
+-
+- memcpy(skb_put(conn->rx_skb, skb->len), skb->data, skb->len);
+-
+- conn->rx_len = tlen - flen;
+- } else {
+- DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);
+-
+- if (!conn->rx_len) {
+- ERR("Unexpected continuation frame (len %d)", skb->len);
+- goto drop;
+- }
+-
+- if (skb->len > conn->rx_len) {
+- ERR("Fragment is too large (len %d)", skb->len);
+- kfree_skb(conn->rx_skb); conn->rx_skb = NULL;
+- goto drop;
+- }
+-
+- memcpy(skb_put(conn->rx_skb, skb->len), skb->data, skb->len);
+- conn->rx_len -= skb->len;
+-
+- if (!conn->rx_len) {
+- /* Complete frame received */
+- l2cap_recv_frame(conn, conn->rx_skb);
+- conn->rx_skb = NULL;
+- }
+- }
+-
+-drop:
+- kfree_skb(skb);
+- return 0;
+-}
+-
+-struct proto_ops l2cap_sock_ops = {
+- family: PF_BLUETOOTH,
+- release: l2cap_sock_release,
+- bind: l2cap_sock_bind,
+- connect: l2cap_sock_connect,
+- listen: l2cap_sock_listen,
+- accept: l2cap_sock_accept,
+- getname: l2cap_sock_getname,
+- sendmsg: l2cap_sock_sendmsg,
+- recvmsg: l2cap_sock_recvmsg,
+- poll: l2cap_sock_poll,
+- socketpair: sock_no_socketpair,
+- ioctl: sock_no_ioctl,
+- shutdown: sock_no_shutdown,
+- setsockopt: l2cap_sock_setsockopt,
+- getsockopt: l2cap_sock_getsockopt,
+- mmap: sock_no_mmap
+-};
+-
+-struct net_proto_family l2cap_sock_family_ops = {
+- family: PF_BLUETOOTH,
+- create: l2cap_sock_create
+-};
+-
+-struct hci_proto l2cap_hci_proto = {
+- name: "L2CAP",
+- id: HCI_PROTO_L2CAP,
+- connect_ind: l2cap_connect_ind,
+- connect_cfm: l2cap_connect_cfm,
+- disconn_ind: l2cap_disconn_ind,
+- recv_acldata: l2cap_recv_acldata,
+-};
+-
+-struct notifier_block l2cap_nblock = {
+- notifier_call: l2cap_dev_event
+-};
+-
+-int __init l2cap_init(void)
+-{
+- INF("BlueZ L2CAP ver %s Copyright (C) 2000,2001 Qualcomm Inc",
+- VERSION);
+- INF("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
+-
+- if (bluez_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops)) {
+- ERR("Can't register L2CAP socket");
+- return -EPROTO;
+- }
+-
+- if (hci_register_proto(&l2cap_hci_proto) < 0) {
+- ERR("Can't register L2CAP protocol");
+- return -EPROTO;
+- }
+-
+- hci_register_notifier(&l2cap_nblock);
+-
+- l2cap_register_proc();
+-
+- return 0;
+-}
+-
+-void l2cap_cleanup(void)
+-{
+- l2cap_unregister_proc();
+-
+- /* Unregister socket, protocol and notifier */
+- if (bluez_sock_unregister(BTPROTO_L2CAP))
+- ERR("Can't unregister L2CAP socket");
+-
+- if (hci_unregister_proto(&l2cap_hci_proto) < 0)
+- ERR("Can't unregister L2CAP protocol");
+-
+- hci_unregister_notifier(&l2cap_nblock);
+-
+- /* We _must_ not have any sockets and/or connections
+- * at this stage.
+- */
+-
+- /* Free interface list and unlock HCI devices */
+- {
+- struct list_head *list = &l2cap_iff_list;
+-
+- while (!list_empty(list)) {
+- struct l2cap_iff *iff;
+-
+- iff = list_entry(list->next, struct l2cap_iff, list);
+- l2cap_iff_del(iff->hdev);
+- }
+- }
+-}
+-
+-module_init(l2cap_init);
+-module_exit(l2cap_cleanup);
+-
+-MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
+-MODULE_DESCRIPTION("BlueZ L2CAP ver " VERSION);
+-MODULE_LICENSE("GPL");
+-
+diff -urN linux-2.4.18/net/bluetooth/l2cap_proc.c linux-2.4.18-mh15/net/bluetooth/l2cap_proc.c
+--- linux-2.4.18/net/bluetooth/l2cap_proc.c 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/net/bluetooth/l2cap_proc.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,165 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * BlueZ L2CAP proc fs support.
+- *
+- * $Id: l2cap_proc.c,v 1.2 2001/06/02 01:40:09 maxk Exp $
+- */
+-
+-#include <linux/config.h>
+-#include <linux/module.h>
+-
+-#include <linux/types.h>
+-#include <linux/errno.h>
+-#include <linux/kernel.h>
+-#include <linux/major.h>
+-#include <linux/sched.h>
+-#include <linux/slab.h>
+-#include <linux/poll.h>
+-#include <linux/fcntl.h>
+-#include <linux/init.h>
+-#include <linux/skbuff.h>
+-#include <linux/interrupt.h>
+-#include <linux/socket.h>
+-#include <linux/skbuff.h>
+-#include <linux/proc_fs.h>
+-#include <linux/list.h>
+-#include <net/sock.h>
+-
+-#include <asm/system.h>
+-#include <asm/uaccess.h>
+-
+-#include <net/bluetooth/bluez.h>
+-#include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/hci_core.h>
+-#include <net/bluetooth/l2cap_core.h>
+-
+-#ifndef L2CAP_DEBUG
+-#undef DBG
+-#define DBG( A... )
+-#endif
+-
+-/* ----- PROC fs support ----- */
+-static int l2cap_conn_dump(char *buf, struct l2cap_iff *iff)
+-{
+- struct list_head *p;
+- char *ptr = buf;
+-
+- list_for_each(p, &iff->conn_list) {
+- struct l2cap_conn *c;
+-
+- c = list_entry(p, struct l2cap_conn, list);
+- ptr += sprintf(ptr, " %p %d %p %p %s %s\n",
+- c, c->state, c->iff, c->hconn, batostr(&c->src), batostr(&c->dst));
+- }
+-
+- return ptr - buf;
+-}
+-
+-static int l2cap_iff_dump(char *buf)
+-{
+- struct list_head *p;
+- char *ptr = buf;
+-
+- ptr += sprintf(ptr, "Interfaces:\n");
+-
+- write_lock(&l2cap_rt_lock);
+-
+- list_for_each(p, &l2cap_iff_list) {
+- struct l2cap_iff *iff;
+-
+- iff = list_entry(p, struct l2cap_iff, list);
+-
+- ptr += sprintf(ptr, " %s %p %p\n", iff->hdev->name, iff, iff->hdev);
+-
+- l2cap_iff_lock(iff);
+- ptr += l2cap_conn_dump(ptr, iff);
+- l2cap_iff_unlock(iff);
+- }
+-
+- write_unlock(&l2cap_rt_lock);
+-
+- ptr += sprintf(ptr, "\n");
+-
+- return ptr - buf;
+-}
+-
+-static int l2cap_sock_dump(char *buf, struct bluez_sock_list *list)
+-{
+- struct l2cap_pinfo *pi;
+- struct sock *sk;
+- char *ptr = buf;
+-
+- ptr += sprintf(ptr, "Sockets:\n");
+-
+- write_lock(&list->lock);
+-
+- for (sk = list->head; sk; sk = sk->next) {
+- pi = l2cap_pi(sk);
+- ptr += sprintf(ptr, " %p %d %p %d %s %s 0x%4.4x 0x%4.4x %d %d\n", sk, sk->state, pi->conn, pi->psm,
+- batostr(&pi->src), batostr(&pi->dst), pi->scid, pi->dcid, pi->imtu, pi->omtu );
+- }
+-
+- write_unlock(&list->lock);
+-
+- ptr += sprintf(ptr, "\n");
+-
+- return ptr - buf;
+-}
+-
+-static int l2cap_read_proc(char *buf, char **start, off_t offset, int count, int *eof, void *priv)
+-{
+- char *ptr = buf;
+- int len;
+-
+- DBG("count %d, offset %ld", count, offset);
+-
+- ptr += l2cap_iff_dump(ptr);
+- ptr += l2cap_sock_dump(ptr, &l2cap_sk_list);
+- len = ptr - buf;
+-
+- if (len <= count + offset)
+- *eof = 1;
+-
+- *start = buf + offset;
+- len -= offset;
+-
+- if (len > count)
+- len = count;
+- if (len < 0)
+- len = 0;
+-
+- return len;
+-}
+-
+-void l2cap_register_proc(void)
+-{
+- create_proc_read_entry("bluetooth/l2cap", 0, 0, l2cap_read_proc, NULL);
+-}
+-
+-void l2cap_unregister_proc(void)
+-{
+- remove_proc_entry("bluetooth/l2cap", NULL);
+-}
+diff -urN linux-2.4.18/net/bluetooth/lib.c linux-2.4.18-mh15/net/bluetooth/lib.c
+--- linux-2.4.18/net/bluetooth/lib.c 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/net/bluetooth/lib.c 2004-08-01 16:26:23.000000000 +0200
+@@ -25,7 +25,7 @@
+ /*
+ * BlueZ kernel library.
+ *
+- * $Id: lib.c,v 1.3 2001/06/22 23:14:23 maxk Exp $
++ * $Id: lib.c,v 1.2 2002/06/20 19:55:08 maxk Exp $
+ */
+
+ #include <linux/kernel.h>
+@@ -105,7 +105,7 @@
+ return EACCES;
+
+ case 0x06:
+- return EINVAL;
++ return EBADE;
+
+ case 0x07:
+ return ENOMEM;
+diff -urN linux-2.4.18/net/bluetooth/Makefile linux-2.4.18-mh15/net/bluetooth/Makefile
+--- linux-2.4.18/net/bluetooth/Makefile 2001-06-12 04:15:27.000000000 +0200
++++ linux-2.4.18-mh15/net/bluetooth/Makefile 2004-08-01 16:26:23.000000000 +0200
+@@ -1,20 +1,40 @@
+ #
+-# Makefile for the Bluetooth subsystem
++# Makefile for the Linux Bluetooth subsystem
+ #
+-O_TARGET := bluetooth.o
+
+-list-multi := hci.o l2cap.o
+-export-objs := syms.o
+-hci-objs := af_bluetooth.o hci_core.o hci_sock.o lib.o syms.o
+-l2cap-objs := l2cap_core.o l2cap_proc.o
++O_TARGET := bluetooth.o
+
+-obj-$(CONFIG_BLUEZ) += hci.o
++list-multi := bluez.o
++export-objs := syms.o l2cap.o
++
++bluez-objs := af_bluetooth.o hci_core.o hci_conn.o hci_event.o hci_sock.o lib.o syms.o
++
++obj-$(CONFIG_BLUEZ) += bluez.o
+ obj-$(CONFIG_BLUEZ_L2CAP) += l2cap.o
++obj-$(CONFIG_BLUEZ_SCO) += sco.o
+
+-include $(TOPDIR)/Rules.make
++subdir-$(CONFIG_BLUEZ_RFCOMM) += rfcomm
++subdir-$(CONFIG_BLUEZ_BNEP) += bnep
++subdir-$(CONFIG_BLUEZ_CMTP) += cmtp
++subdir-$(CONFIG_BLUEZ_HIDP) += hidp
++
++ifeq ($(CONFIG_BLUEZ_RFCOMM),y)
++obj-y += rfcomm/rfcomm.o
++endif
+
+-hci.o: $(hci-objs)
+- $(LD) -r -o $@ $(hci-objs)
++ifeq ($(CONFIG_BLUEZ_BNEP),y)
++obj-y += bnep/bnep.o
++endif
++
++ifeq ($(CONFIG_BLUEZ_CMTP),y)
++obj-y += cmtp/cmtp.o
++endif
++
++ifeq ($(CONFIG_BLUEZ_HIDP),y)
++obj-y += hidp/hidp.o
++endif
++
++include $(TOPDIR)/Rules.make
+
+-l2cap.o: $(l2cap-objs)
+- $(LD) -r -o $@ $(l2cap-objs)
++bluez.o: $(bluez-objs)
++ $(LD) -r -o $@ $(bluez-objs)
+diff -urN linux-2.4.18/net/bluetooth/rfcomm/Config.in linux-2.4.18-mh15/net/bluetooth/rfcomm/Config.in
+--- linux-2.4.18/net/bluetooth/rfcomm/Config.in 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/rfcomm/Config.in 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,10 @@
++#
++# Bluetooth RFCOMM layer configuration
++#
++
++dep_tristate 'RFCOMM protocol support' CONFIG_BLUEZ_RFCOMM $CONFIG_BLUEZ_L2CAP
++
++if [ "$CONFIG_BLUEZ_RFCOMM" != "n" ]; then
++ bool ' RFCOMM TTY support' CONFIG_BLUEZ_RFCOMM_TTY
++fi
++
+diff -urN linux-2.4.18/net/bluetooth/rfcomm/core.c linux-2.4.18-mh15/net/bluetooth/rfcomm/core.c
+--- linux-2.4.18/net/bluetooth/rfcomm/core.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/rfcomm/core.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,1940 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ RPN support - Dirk Husemann <hud@zurich.ibm.com>
++*/
++
++/*
++ * RFCOMM core.
++ *
++ * $Id: core.c,v 1.46 2002/10/18 20:12:12 maxk Exp $
++ */
++
++#define __KERNEL_SYSCALLS__
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/signal.h>
++#include <linux/init.h>
++#include <linux/wait.h>
++#include <linux/net.h>
++#include <linux/proc_fs.h>
++#include <net/sock.h>
++#include <asm/uaccess.h>
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/l2cap.h>
++#include <net/bluetooth/rfcomm.h>
++
++#define VERSION "1.1"
++
++#ifndef CONFIG_BLUEZ_RFCOMM_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++struct task_struct *rfcomm_thread;
++DECLARE_MUTEX(rfcomm_sem);
++unsigned long rfcomm_event;
++
++static LIST_HEAD(session_list);
++static atomic_t terminate, running;
++
++static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len);
++static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci);
++static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci);
++static int rfcomm_queue_disc(struct rfcomm_dlc *d);
++static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type);
++static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d);
++static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig);
++static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len);
++static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits);
++static void rfcomm_make_uih(struct sk_buff *skb, u8 addr);
++
++static void rfcomm_process_connect(struct rfcomm_session *s);
++
++/* ---- RFCOMM frame parsing macros ---- */
++#define __get_dlci(b) ((b & 0xfc) >> 2)
++#define __get_channel(b) ((b & 0xf8) >> 3)
++#define __get_dir(b) ((b & 0x04) >> 2)
++#define __get_type(b) ((b & 0xef))
++
++#define __test_ea(b) ((b & 0x01))
++#define __test_cr(b) ((b & 0x02))
++#define __test_pf(b) ((b & 0x10))
++
++#define __addr(cr, dlci) (((dlci & 0x3f) << 2) | (cr << 1) | 0x01)
++#define __ctrl(type, pf) (((type & 0xef) | (pf << 4)))
++#define __dlci(dir, chn) (((chn & 0x1f) << 1) | dir)
++#define __srv_channel(dlci) (dlci >> 1)
++#define __dir(dlci) (dlci & 0x01)
++
++#define __len8(len) (((len) << 1) | 1)
++#define __len16(len) ((len) << 1)
++
++/* MCC macros */
++#define __mcc_type(cr, type) (((type << 2) | (cr << 1) | 0x01))
++#define __get_mcc_type(b) ((b & 0xfc) >> 2)
++#define __get_mcc_len(b) ((b & 0xfe) >> 1)
++
++/* RPN macros */
++#define __rpn_line_settings(data, stop, parity) ((data & 0x3) | ((stop & 0x1) << 2) | ((parity & 0x3) << 3))
++#define __get_rpn_data_bits(line) ((line) & 0x3)
++#define __get_rpn_stop_bits(line) (((line) >> 2) & 0x1)
++#define __get_rpn_parity(line) (((line) >> 3) & 0x3)
++
++/* ---- RFCOMM FCS computation ---- */
++
++/* CRC on 2 bytes */
++#define __crc(data) (rfcomm_crc_table[rfcomm_crc_table[0xff ^ data[0]] ^ data[1]])
++
++/* FCS on 2 bytes */
++static inline u8 __fcs(u8 *data)
++{
++ return (0xff - __crc(data));
++}
++
++/* FCS on 3 bytes */
++static inline u8 __fcs2(u8 *data)
++{
++ return (0xff - rfcomm_crc_table[__crc(data) ^ data[2]]);
++}
++
++/* Check FCS */
++static inline int __check_fcs(u8 *data, int type, u8 fcs)
++{
++ u8 f = __crc(data);
++
++ if (type != RFCOMM_UIH)
++ f = rfcomm_crc_table[f ^ data[2]];
++
++ return rfcomm_crc_table[f ^ fcs] != 0xcf;
++}
++
++/* ---- L2CAP callbacks ---- */
++static void rfcomm_l2state_change(struct sock *sk)
++{
++ BT_DBG("%p state %d", sk, sk->state);
++ rfcomm_schedule(RFCOMM_SCHED_STATE);
++}
++
++static void rfcomm_l2data_ready(struct sock *sk, int bytes)
++{
++ BT_DBG("%p bytes %d", sk, bytes);
++ rfcomm_schedule(RFCOMM_SCHED_RX);
++}
++
++static int rfcomm_l2sock_create(struct socket **sock)
++{
++ int err;
++
++ BT_DBG("");
++
++ err = sock_create(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP, sock);
++ if (!err) {
++ struct sock *sk = (*sock)->sk;
++ sk->data_ready = rfcomm_l2data_ready;
++ sk->state_change = rfcomm_l2state_change;
++ }
++ return err;
++}
++
++/* ---- RFCOMM DLCs ---- */
++static void rfcomm_dlc_timeout(unsigned long arg)
++{
++ struct rfcomm_dlc *d = (void *) arg;
++
++ BT_DBG("dlc %p state %ld", d, d->state);
++
++ set_bit(RFCOMM_TIMED_OUT, &d->flags);
++ rfcomm_dlc_put(d);
++ rfcomm_schedule(RFCOMM_SCHED_TIMEO);
++}
++
++static void rfcomm_dlc_set_timer(struct rfcomm_dlc *d, long timeout)
++{
++ BT_DBG("dlc %p state %ld timeout %ld", d, d->state, timeout);
++
++ if (!mod_timer(&d->timer, jiffies + timeout))
++ rfcomm_dlc_hold(d);
++}
++
++static void rfcomm_dlc_clear_timer(struct rfcomm_dlc *d)
++{
++ BT_DBG("dlc %p state %ld", d, d->state);
++
++ if (timer_pending(&d->timer) && del_timer(&d->timer))
++ rfcomm_dlc_put(d);
++}
++
++static void rfcomm_dlc_clear_state(struct rfcomm_dlc *d)
++{
++ BT_DBG("%p", d);
++
++ d->state = BT_OPEN;
++ d->flags = 0;
++ d->mscex = 0;
++ d->mtu = RFCOMM_DEFAULT_MTU;
++ d->v24_sig = RFCOMM_V24_RTC | RFCOMM_V24_RTR | RFCOMM_V24_DV;
++
++ d->cfc = RFCOMM_CFC_DISABLED;
++ d->rx_credits = RFCOMM_DEFAULT_CREDITS;
++}
++
++struct rfcomm_dlc *rfcomm_dlc_alloc(int prio)
++{
++ struct rfcomm_dlc *d = kmalloc(sizeof(*d), prio);
++ if (!d)
++ return NULL;
++ memset(d, 0, sizeof(*d));
++
++ init_timer(&d->timer);
++ d->timer.function = rfcomm_dlc_timeout;
++ d->timer.data = (unsigned long) d;
++
++ skb_queue_head_init(&d->tx_queue);
++ spin_lock_init(&d->lock);
++ atomic_set(&d->refcnt, 1);
++
++ rfcomm_dlc_clear_state(d);
++
++ BT_DBG("%p", d);
++ return d;
++}
++
++void rfcomm_dlc_free(struct rfcomm_dlc *d)
++{
++ BT_DBG("%p", d);
++
++ skb_queue_purge(&d->tx_queue);
++ kfree(d);
++}
++
++static void rfcomm_dlc_link(struct rfcomm_session *s, struct rfcomm_dlc *d)
++{
++ BT_DBG("dlc %p session %p", d, s);
++
++ rfcomm_session_hold(s);
++
++ rfcomm_dlc_hold(d);
++ list_add(&d->list, &s->dlcs);
++ d->session = s;
++}
++
++static void rfcomm_dlc_unlink(struct rfcomm_dlc *d)
++{
++ struct rfcomm_session *s = d->session;
++
++ BT_DBG("dlc %p refcnt %d session %p", d, atomic_read(&d->refcnt), s);
++
++ list_del(&d->list);
++ d->session = NULL;
++ rfcomm_dlc_put(d);
++
++ rfcomm_session_put(s);
++}
++
++static struct rfcomm_dlc *rfcomm_dlc_get(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_dlc *d;
++ struct list_head *p;
++
++ list_for_each(p, &s->dlcs) {
++ d = list_entry(p, struct rfcomm_dlc, list);
++ if (d->dlci == dlci)
++ return d;
++ }
++ return NULL;
++}
++
++static int __rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
++{
++ struct rfcomm_session *s;
++ int err = 0;
++ u8 dlci;
++
++ BT_DBG("dlc %p state %ld %s %s channel %d",
++ d, d->state, batostr(src), batostr(dst), channel);
++
++ if (channel < 1 || channel > 30)
++ return -EINVAL;
++
++ if (d->state != BT_OPEN && d->state != BT_CLOSED)
++ return 0;
++
++ s = rfcomm_session_get(src, dst);
++ if (!s) {
++ s = rfcomm_session_create(src, dst, &err);
++ if (!s)
++ return err;
++ }
++
++ dlci = __dlci(!s->initiator, channel);
++
++ /* Check if DLCI already exists */
++ if (rfcomm_dlc_get(s, dlci))
++ return -EBUSY;
++
++ rfcomm_dlc_clear_state(d);
++
++ d->dlci = dlci;
++ d->addr = __addr(s->initiator, dlci);
++ d->priority = 7;
++
++ d->state = BT_CONFIG;
++ rfcomm_dlc_link(s, d);
++
++ d->mtu = s->mtu;
++ d->cfc = (s->cfc == RFCOMM_CFC_UNKNOWN) ? 0 : s->cfc;
++
++ if (s->state == BT_CONNECTED)
++ rfcomm_send_pn(s, 1, d);
++ rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT);
++ return 0;
++}
++
++int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
++{
++ mm_segment_t fs;
++ int r;
++
++ rfcomm_lock();
++
++ fs = get_fs(); set_fs(KERNEL_DS);
++ r = __rfcomm_dlc_open(d, src, dst, channel);
++ set_fs(fs);
++
++ rfcomm_unlock();
++ return r;
++}
++
++static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
++{
++ struct rfcomm_session *s = d->session;
++ if (!s)
++ return 0;
++
++ BT_DBG("dlc %p state %ld dlci %d err %d session %p",
++ d, d->state, d->dlci, err, s);
++
++ switch (d->state) {
++ case BT_CONNECTED:
++ case BT_CONFIG:
++ case BT_CONNECT:
++ d->state = BT_DISCONN;
++ if (skb_queue_empty(&d->tx_queue)) {
++ rfcomm_send_disc(s, d->dlci);
++ rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT);
++ } else {
++ rfcomm_queue_disc(d);
++ rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT * 2);
++ }
++ break;
++
++ default:
++ rfcomm_dlc_clear_timer(d);
++
++ rfcomm_dlc_lock(d);
++ d->state = BT_CLOSED;
++ d->state_change(d, err);
++ rfcomm_dlc_unlock(d);
++
++ skb_queue_purge(&d->tx_queue);
++ rfcomm_dlc_unlink(d);
++ }
++
++ return 0;
++}
++
++int rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
++{
++ mm_segment_t fs;
++ int r;
++
++ rfcomm_lock();
++
++ fs = get_fs(); set_fs(KERNEL_DS);
++ r = __rfcomm_dlc_close(d, err);
++ set_fs(fs);
++
++ rfcomm_unlock();
++ return r;
++}
++
++int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb)
++{
++ int len = skb->len;
++
++ if (d->state != BT_CONNECTED)
++ return -ENOTCONN;
++
++ BT_DBG("dlc %p mtu %d len %d", d, d->mtu, len);
++
++ if (len > d->mtu)
++ return -EINVAL;
++
++ rfcomm_make_uih(skb, d->addr);
++ skb_queue_tail(&d->tx_queue, skb);
++
++ if (!test_bit(RFCOMM_TX_THROTTLED, &d->flags))
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++ return len;
++}
++
++void __rfcomm_dlc_throttle(struct rfcomm_dlc *d)
++{
++ BT_DBG("dlc %p state %ld", d, d->state);
++
++ if (!d->cfc) {
++ d->v24_sig |= RFCOMM_V24_FC;
++ set_bit(RFCOMM_MSC_PENDING, &d->flags);
++ }
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++}
++
++void __rfcomm_dlc_unthrottle(struct rfcomm_dlc *d)
++{
++ BT_DBG("dlc %p state %ld", d, d->state);
++
++ if (!d->cfc) {
++ d->v24_sig &= ~RFCOMM_V24_FC;
++ set_bit(RFCOMM_MSC_PENDING, &d->flags);
++ }
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++}
++
++/*
++ Set/get modem status functions use _local_ status i.e. what we report
++ to the other side.
++ Remote status is provided by dlc->modem_status() callback.
++ */
++int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig)
++{
++ BT_DBG("dlc %p state %ld v24_sig 0x%x",
++ d, d->state, v24_sig);
++
++ if (test_bit(RFCOMM_RX_THROTTLED, &d->flags))
++ v24_sig |= RFCOMM_V24_FC;
++ else
++ v24_sig &= ~RFCOMM_V24_FC;
++
++ d->v24_sig = v24_sig;
++
++ if (!test_and_set_bit(RFCOMM_MSC_PENDING, &d->flags))
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++
++ return 0;
++}
++
++int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig)
++{
++ BT_DBG("dlc %p state %ld v24_sig 0x%x",
++ d, d->state, d->v24_sig);
++
++ *v24_sig = d->v24_sig;
++ return 0;
++}
++
++/* ---- RFCOMM sessions ---- */
++struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state)
++{
++ struct rfcomm_session *s = kmalloc(sizeof(*s), GFP_KERNEL);
++ if (!s)
++ return NULL;
++ memset(s, 0, sizeof(*s));
++
++ BT_DBG("session %p sock %p", s, sock);
++
++ INIT_LIST_HEAD(&s->dlcs);
++ s->state = state;
++ s->sock = sock;
++
++ s->mtu = RFCOMM_DEFAULT_MTU;
++ s->cfc = RFCOMM_CFC_UNKNOWN;
++
++ list_add(&s->list, &session_list);
++
++ /* Do not increment module usage count for listeting sessions.
++ * Otherwise we won't be able to unload the module. */
++ if (state != BT_LISTEN)
++ MOD_INC_USE_COUNT;
++ return s;
++}
++
++void rfcomm_session_del(struct rfcomm_session *s)
++{
++ int state = s->state;
++
++ BT_DBG("session %p state %ld", s, s->state);
++
++ list_del(&s->list);
++
++ if (state == BT_CONNECTED)
++ rfcomm_send_disc(s, 0);
++
++ sock_release(s->sock);
++ kfree(s);
++
++ if (state != BT_LISTEN)
++ MOD_DEC_USE_COUNT;
++}
++
++struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst)
++{
++ struct rfcomm_session *s;
++ struct list_head *p, *n;
++ struct bluez_pinfo *pi;
++ list_for_each_safe(p, n, &session_list) {
++ s = list_entry(p, struct rfcomm_session, list);
++ pi = bluez_pi(s->sock->sk);
++
++ if ((!bacmp(src, BDADDR_ANY) || !bacmp(&pi->src, src)) &&
++ !bacmp(&pi->dst, dst))
++ return s;
++ }
++ return NULL;
++}
++
++void rfcomm_session_close(struct rfcomm_session *s, int err)
++{
++ struct rfcomm_dlc *d;
++ struct list_head *p, *n;
++
++ BT_DBG("session %p state %ld err %d", s, s->state, err);
++
++ rfcomm_session_hold(s);
++
++ s->state = BT_CLOSED;
++
++ /* Close all dlcs */
++ list_for_each_safe(p, n, &s->dlcs) {
++ d = list_entry(p, struct rfcomm_dlc, list);
++ d->state = BT_CLOSED;
++ __rfcomm_dlc_close(d, err);
++ }
++
++ rfcomm_session_put(s);
++}
++
++struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst, int *err)
++{
++ struct rfcomm_session *s = NULL;
++ struct sockaddr_l2 addr;
++ struct l2cap_options opts;
++ struct socket *sock;
++ int size;
++
++ BT_DBG("%s %s", batostr(src), batostr(dst));
++
++ *err = rfcomm_l2sock_create(&sock);
++ if (*err < 0)
++ return NULL;
++
++ bacpy(&addr.l2_bdaddr, src);
++ addr.l2_family = AF_BLUETOOTH;
++ addr.l2_psm = 0;
++ *err = sock->ops->bind(sock, (struct sockaddr *) &addr, sizeof(addr));
++ if (*err < 0)
++ goto failed;
++
++ /* Set L2CAP options */
++ size = sizeof(opts);
++ sock->ops->getsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, &size);
++
++ opts.imtu = RFCOMM_MAX_L2CAP_MTU;
++ sock->ops->setsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, size);
++
++ s = rfcomm_session_add(sock, BT_BOUND);
++ if (!s) {
++ *err = -ENOMEM;
++ goto failed;
++ }
++
++ s->initiator = 1;
++
++ bacpy(&addr.l2_bdaddr, dst);
++ addr.l2_family = AF_BLUETOOTH;
++ addr.l2_psm = htobs(RFCOMM_PSM);
++ *err = sock->ops->connect(sock, (struct sockaddr *) &addr, sizeof(addr), O_NONBLOCK);
++ if (*err == 0 || *err == -EAGAIN)
++ return s;
++
++ rfcomm_session_del(s);
++ return NULL;
++
++failed:
++ sock_release(sock);
++ return NULL;
++}
++
++void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst)
++{
++ struct sock *sk = s->sock->sk;
++ if (src)
++ bacpy(src, &bluez_pi(sk)->src);
++ if (dst)
++ bacpy(dst, &bluez_pi(sk)->dst);
++}
++
++/* ---- RFCOMM frame sending ---- */
++static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len)
++{
++ struct socket *sock = s->sock;
++ struct iovec iv = { data, len };
++ struct msghdr msg;
++ int err;
++
++ BT_DBG("session %p len %d", s, len);
++
++ memset(&msg, 0, sizeof(msg));
++ msg.msg_iovlen = 1;
++ msg.msg_iov = &iv;
++
++ err = sock->ops->sendmsg(sock, &msg, len, 0);
++ return err;
++}
++
++static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_cmd cmd;
++
++ BT_DBG("%p dlci %d", s, dlci);
++
++ cmd.addr = __addr(s->initiator, dlci);
++ cmd.ctrl = __ctrl(RFCOMM_SABM, 1);
++ cmd.len = __len8(0);
++ cmd.fcs = __fcs2((u8 *) &cmd);
++
++ return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
++}
++
++static int rfcomm_send_ua(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_cmd cmd;
++
++ BT_DBG("%p dlci %d", s, dlci);
++
++ cmd.addr = __addr(!s->initiator, dlci);
++ cmd.ctrl = __ctrl(RFCOMM_UA, 1);
++ cmd.len = __len8(0);
++ cmd.fcs = __fcs2((u8 *) &cmd);
++
++ return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
++}
++
++static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_cmd cmd;
++
++ BT_DBG("%p dlci %d", s, dlci);
++
++ cmd.addr = __addr(s->initiator, dlci);
++ cmd.ctrl = __ctrl(RFCOMM_DISC, 1);
++ cmd.len = __len8(0);
++ cmd.fcs = __fcs2((u8 *) &cmd);
++
++ return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
++}
++
++static int rfcomm_queue_disc(struct rfcomm_dlc *d)
++{
++ struct rfcomm_cmd *cmd;
++ struct sk_buff *skb;
++
++ BT_DBG("dlc %p dlci %d", d, d->dlci);
++
++ skb = alloc_skb(sizeof(*cmd), GFP_KERNEL);
++ if (!skb)
++ return -ENOMEM;
++
++ cmd = (void *) __skb_put(skb, sizeof(*cmd));
++ cmd->addr = d->addr;
++ cmd->ctrl = __ctrl(RFCOMM_DISC, 1);
++ cmd->len = __len8(0);
++ cmd->fcs = __fcs2((u8 *) cmd);
++
++ skb_queue_tail(&d->tx_queue, skb);
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++ return 0;
++}
++
++static int rfcomm_send_dm(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_cmd cmd;
++
++ BT_DBG("%p dlci %d", s, dlci);
++
++ cmd.addr = __addr(!s->initiator, dlci);
++ cmd.ctrl = __ctrl(RFCOMM_DM, 1);
++ cmd.len = __len8(0);
++ cmd.fcs = __fcs2((u8 *) &cmd);
++
++ return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
++}
++
++static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d type %d", s, cr, type);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + 1);
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_NSC);
++ mcc->len = __len8(1);
++
++ /* Type that we didn't like */
++ *ptr = __mcc_type(cr, type); ptr++;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ struct rfcomm_pn *pn;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d dlci %d mtu %d", s, cr, d->dlci, d->mtu);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + sizeof(*pn));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_PN);
++ mcc->len = __len8(sizeof(*pn));
++
++ pn = (void *) ptr; ptr += sizeof(*pn);
++ pn->dlci = d->dlci;
++ pn->priority = d->priority;
++ pn->ack_timer = 0;
++ pn->max_retrans = 0;
++
++ if (s->cfc) {
++ pn->flow_ctrl = cr ? 0xf0 : 0xe0;
++ pn->credits = RFCOMM_DEFAULT_CREDITS;
++ } else {
++ pn->flow_ctrl = 0;
++ pn->credits = 0;
++ }
++
++ pn->mtu = htobs(d->mtu);
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_rpn(struct rfcomm_session *s, int cr, u8 dlci,
++ u8 bit_rate, u8 data_bits, u8 stop_bits,
++ u8 parity, u8 flow_ctrl_settings,
++ u8 xon_char, u8 xoff_char, u16 param_mask)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ struct rfcomm_rpn *rpn;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d dlci %d bit_r 0x%x data_b 0x%x stop_b 0x%x parity 0x%x"
++ "flwc_s 0x%x xon_c 0x%x xoff_c 0x%x p_mask 0x%x",
++ s, cr, dlci, bit_rate, data_bits, stop_bits, parity,
++ flow_ctrl_settings, xon_char, xoff_char, param_mask);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + sizeof(*rpn));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_RPN);
++ mcc->len = __len8(sizeof(*rpn));
++
++ rpn = (void *) ptr; ptr += sizeof(*rpn);
++ rpn->dlci = __addr(1, dlci);
++ rpn->bit_rate = bit_rate;
++ rpn->line_settings = __rpn_line_settings(data_bits, stop_bits, parity);
++ rpn->flow_ctrl = flow_ctrl_settings;
++ rpn->xon_char = xon_char;
++ rpn->xoff_char = xoff_char;
++ rpn->param_mask = param_mask;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_rls(struct rfcomm_session *s, int cr, u8 dlci, u8 status)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ struct rfcomm_rls *rls;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d status 0x%x", s, cr, status);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + sizeof(*rls));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_RLS);
++ mcc->len = __len8(sizeof(*rls));
++
++ rls = (void *) ptr; ptr += sizeof(*rls);
++ rls->dlci = __addr(1, dlci);
++ rls->status = status;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ struct rfcomm_msc *msc;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d v24 0x%x", s, cr, v24_sig);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + sizeof(*msc));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_MSC);
++ mcc->len = __len8(sizeof(*msc));
++
++ msc = (void *) ptr; ptr += sizeof(*msc);
++ msc->dlci = __addr(1, dlci);
++ msc->v24_sig = v24_sig | 0x01;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_fcoff(struct rfcomm_session *s, int cr)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d", s, cr);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_FCOFF);
++ mcc->len = __len8(0);
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_fcon(struct rfcomm_session *s, int cr)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d", s, cr);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_FCON);
++ mcc->len = __len8(0);
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len)
++{
++ struct socket *sock = s->sock;
++ struct iovec iv[3];
++ struct msghdr msg;
++ unsigned char hdr[5], crc[1];
++
++ if (len > 125)
++ return -EINVAL;
++
++ BT_DBG("%p cr %d", s, cr);
++
++ hdr[0] = __addr(s->initiator, 0);
++ hdr[1] = __ctrl(RFCOMM_UIH, 0);
++ hdr[2] = 0x01 | ((len + 2) << 1);
++ hdr[3] = 0x01 | ((cr & 0x01) << 1) | (RFCOMM_TEST << 2);
++ hdr[4] = 0x01 | (len << 1);
++
++ crc[0] = __fcs(hdr);
++
++ iv[0].iov_base = hdr;
++ iv[0].iov_len = 5;
++ iv[1].iov_base = pattern;
++ iv[1].iov_len = len;
++ iv[2].iov_base = crc;
++ iv[2].iov_len = 1;
++
++ memset(&msg, 0, sizeof(msg));
++ msg.msg_iovlen = 3;
++ msg.msg_iov = iv;
++ return sock->ops->sendmsg(sock, &msg, 6 + len, 0);
++}
++
++static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits)
++{
++ struct rfcomm_hdr *hdr;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p addr %d credits %d", s, addr, credits);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = addr;
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 1);
++ hdr->len = __len8(0);
++
++ *ptr = credits; ptr++;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static void rfcomm_make_uih(struct sk_buff *skb, u8 addr)
++{
++ struct rfcomm_hdr *hdr;
++ int len = skb->len;
++ u8 *crc;
++
++ if (len > 127) {
++ hdr = (void *) skb_push(skb, 4);
++ put_unaligned(htobs(__len16(len)), (u16 *) &hdr->len);
++ } else {
++ hdr = (void *) skb_push(skb, 3);
++ hdr->len = __len8(len);
++ }
++ hdr->addr = addr;
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++
++ crc = skb_put(skb, 1);
++ *crc = __fcs((void *) hdr);
++}
++
++/* ---- RFCOMM frame reception ---- */
++static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci)
++{
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (dlci) {
++ /* Data channel */
++ struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
++ if (!d) {
++ rfcomm_send_dm(s, dlci);
++ return 0;
++ }
++
++ switch (d->state) {
++ case BT_CONNECT:
++ rfcomm_dlc_clear_timer(d);
++
++ rfcomm_dlc_lock(d);
++ d->state = BT_CONNECTED;
++ d->state_change(d, 0);
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_send_msc(s, 1, dlci, d->v24_sig);
++ break;
++
++ case BT_DISCONN:
++ d->state = BT_CLOSED;
++ __rfcomm_dlc_close(d, 0);
++ break;
++ }
++ } else {
++ /* Control channel */
++ switch (s->state) {
++ case BT_CONNECT:
++ s->state = BT_CONNECTED;
++ rfcomm_process_connect(s);
++ break;
++ }
++ }
++ return 0;
++}
++
++static int rfcomm_recv_dm(struct rfcomm_session *s, u8 dlci)
++{
++ int err = 0;
++
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (dlci) {
++ /* Data DLC */
++ struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
++ if (d) {
++ if (d->state == BT_CONNECT || d->state == BT_CONFIG)
++ err = ECONNREFUSED;
++ else
++ err = ECONNRESET;
++
++ d->state = BT_CLOSED;
++ __rfcomm_dlc_close(d, err);
++ }
++ } else {
++ if (s->state == BT_CONNECT)
++ err = ECONNREFUSED;
++ else
++ err = ECONNRESET;
++
++ s->state = BT_CLOSED;
++ rfcomm_session_close(s, err);
++ }
++ return 0;
++}
++
++static int rfcomm_recv_disc(struct rfcomm_session *s, u8 dlci)
++{
++ int err = 0;
++
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (dlci) {
++ struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
++ if (d) {
++ rfcomm_send_ua(s, dlci);
++
++ if (d->state == BT_CONNECT || d->state == BT_CONFIG)
++ err = ECONNREFUSED;
++ else
++ err = ECONNRESET;
++
++ d->state = BT_CLOSED;
++ __rfcomm_dlc_close(d, err);
++ } else
++ rfcomm_send_dm(s, dlci);
++
++ } else {
++ rfcomm_send_ua(s, 0);
++
++ if (s->state == BT_CONNECT)
++ err = ECONNREFUSED;
++ else
++ err = ECONNRESET;
++
++ s->state = BT_CLOSED;
++ rfcomm_session_close(s, err);
++ }
++
++ return 0;
++}
++
++static int rfcomm_recv_sabm(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_dlc *d;
++ u8 channel;
++
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (!dlci) {
++ rfcomm_send_ua(s, 0);
++
++ if (s->state == BT_OPEN) {
++ s->state = BT_CONNECTED;
++ rfcomm_process_connect(s);
++ }
++ return 0;
++ }
++
++ /* Check if DLC exists */
++ d = rfcomm_dlc_get(s, dlci);
++ if (d) {
++ if (d->state == BT_OPEN) {
++ /* DLC was previously opened by PN request */
++ rfcomm_send_ua(s, dlci);
++
++ rfcomm_dlc_lock(d);
++ d->state = BT_CONNECTED;
++ d->state_change(d, 0);
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_send_msc(s, 1, dlci, d->v24_sig);
++ }
++ return 0;
++ }
++
++ /* Notify socket layer about incomming connection */
++ channel = __srv_channel(dlci);
++ if (rfcomm_connect_ind(s, channel, &d)) {
++ d->dlci = dlci;
++ d->addr = __addr(s->initiator, dlci);
++ rfcomm_dlc_link(s, d);
++
++ rfcomm_send_ua(s, dlci);
++
++ rfcomm_dlc_lock(d);
++ d->state = BT_CONNECTED;
++ d->state_change(d, 0);
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_send_msc(s, 1, dlci, d->v24_sig);
++ } else {
++ rfcomm_send_dm(s, dlci);
++ }
++
++ return 0;
++}
++
++static int rfcomm_apply_pn(struct rfcomm_dlc *d, int cr, struct rfcomm_pn *pn)
++{
++ struct rfcomm_session *s = d->session;
++
++ BT_DBG("dlc %p state %ld dlci %d mtu %d fc 0x%x credits %d",
++ d, d->state, d->dlci, pn->mtu, pn->flow_ctrl, pn->credits);
++
++ if (pn->flow_ctrl == 0xf0 || pn->flow_ctrl == 0xe0) {
++ d->cfc = s->cfc = RFCOMM_CFC_ENABLED;
++ d->tx_credits = pn->credits;
++ } else {
++ d->cfc = s->cfc = RFCOMM_CFC_DISABLED;
++ set_bit(RFCOMM_TX_THROTTLED, &d->flags);
++ }
++
++ d->priority = pn->priority;
++
++ d->mtu = s->mtu = btohs(pn->mtu);
++
++ return 0;
++}
++
++static int rfcomm_recv_pn(struct rfcomm_session *s, int cr, struct sk_buff *skb)
++{
++ struct rfcomm_pn *pn = (void *) skb->data;
++ struct rfcomm_dlc *d;
++ u8 dlci = pn->dlci;
++
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (!dlci)
++ return 0;
++
++ d = rfcomm_dlc_get(s, dlci);
++ if (d) {
++ if (cr) {
++ /* PN request */
++ rfcomm_apply_pn(d, cr, pn);
++ rfcomm_send_pn(s, 0, d);
++ } else {
++ /* PN response */
++ switch (d->state) {
++ case BT_CONFIG:
++ rfcomm_apply_pn(d, cr, pn);
++
++ d->state = BT_CONNECT;
++ rfcomm_send_sabm(s, d->dlci);
++ break;
++ }
++ }
++ } else {
++ u8 channel = __srv_channel(dlci);
++
++ if (!cr)
++ return 0;
++
++ /* PN request for non existing DLC.
++ * Assume incomming connection. */
++ if (rfcomm_connect_ind(s, channel, &d)) {
++ d->dlci = dlci;
++ d->addr = __addr(s->initiator, dlci);
++ rfcomm_dlc_link(s, d);
++
++ rfcomm_apply_pn(d, cr, pn);
++
++ d->state = BT_OPEN;
++ rfcomm_send_pn(s, 0, d);
++ } else {
++ rfcomm_send_dm(s, dlci);
++ }
++ }
++ return 0;
++}
++
++static int rfcomm_recv_rpn(struct rfcomm_session *s, int cr, int len, struct sk_buff *skb)
++{
++ struct rfcomm_rpn *rpn = (void *) skb->data;
++ u8 dlci = __get_dlci(rpn->dlci);
++
++ u8 bit_rate = 0;
++ u8 data_bits = 0;
++ u8 stop_bits = 0;
++ u8 parity = 0;
++ u8 flow_ctrl = 0;
++ u8 xon_char = 0;
++ u8 xoff_char = 0;
++ u16 rpn_mask = RFCOMM_RPN_PM_ALL;
++
++ BT_DBG("dlci %d cr %d len 0x%x bitr 0x%x line 0x%x flow 0x%x xonc 0x%x xoffc 0x%x pm 0x%x",
++ dlci, cr, len, rpn->bit_rate, rpn->line_settings, rpn->flow_ctrl,
++ rpn->xon_char, rpn->xoff_char, rpn->param_mask);
++
++ if (!cr)
++ return 0;
++
++ if (len == 1) {
++ /* request: return default setting */
++ bit_rate = RFCOMM_RPN_BR_115200;
++ data_bits = RFCOMM_RPN_DATA_8;
++ stop_bits = RFCOMM_RPN_STOP_1;
++ parity = RFCOMM_RPN_PARITY_NONE;
++ flow_ctrl = RFCOMM_RPN_FLOW_NONE;
++ xon_char = RFCOMM_RPN_XON_CHAR;
++ xoff_char = RFCOMM_RPN_XOFF_CHAR;
++
++ goto rpn_out;
++ }
++ /* check for sane values: ignore/accept bit_rate, 8 bits, 1 stop bit, no parity,
++ no flow control lines, normal XON/XOFF chars */
++ if (rpn->param_mask & RFCOMM_RPN_PM_BITRATE) {
++ bit_rate = rpn->bit_rate;
++ if (bit_rate != RFCOMM_RPN_BR_115200) {
++ BT_DBG("RPN bit rate mismatch 0x%x", bit_rate);
++ bit_rate = RFCOMM_RPN_BR_115200;
++ rpn_mask ^= RFCOMM_RPN_PM_BITRATE;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_DATA) {
++ data_bits = __get_rpn_data_bits(rpn->line_settings);
++ if (data_bits != RFCOMM_RPN_DATA_8) {
++ BT_DBG("RPN data bits mismatch 0x%x", data_bits);
++ data_bits = RFCOMM_RPN_DATA_8;
++ rpn_mask ^= RFCOMM_RPN_PM_DATA;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_STOP) {
++ stop_bits = __get_rpn_stop_bits(rpn->line_settings);
++ if (stop_bits != RFCOMM_RPN_STOP_1) {
++ BT_DBG("RPN stop bits mismatch 0x%x", stop_bits);
++ stop_bits = RFCOMM_RPN_STOP_1;
++ rpn_mask ^= RFCOMM_RPN_PM_STOP;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_PARITY) {
++ parity = __get_rpn_parity(rpn->line_settings);
++ if (parity != RFCOMM_RPN_PARITY_NONE) {
++ BT_DBG("RPN parity mismatch 0x%x", parity);
++ parity = RFCOMM_RPN_PARITY_NONE;
++ rpn_mask ^= RFCOMM_RPN_PM_PARITY;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_FLOW) {
++ flow_ctrl = rpn->flow_ctrl;
++ if (flow_ctrl != RFCOMM_RPN_FLOW_NONE) {
++ BT_DBG("RPN flow ctrl mismatch 0x%x", flow_ctrl);
++ flow_ctrl = RFCOMM_RPN_FLOW_NONE;
++ rpn_mask ^= RFCOMM_RPN_PM_FLOW;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_XON) {
++ xon_char = rpn->xon_char;
++ if (xon_char != RFCOMM_RPN_XON_CHAR) {
++ BT_DBG("RPN XON char mismatch 0x%x", xon_char);
++ xon_char = RFCOMM_RPN_XON_CHAR;
++ rpn_mask ^= RFCOMM_RPN_PM_XON;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_XOFF) {
++ xoff_char = rpn->xoff_char;
++ if (xoff_char != RFCOMM_RPN_XOFF_CHAR) {
++ BT_DBG("RPN XOFF char mismatch 0x%x", xoff_char);
++ xoff_char = RFCOMM_RPN_XOFF_CHAR;
++ rpn_mask ^= RFCOMM_RPN_PM_XOFF;
++ }
++ }
++
++rpn_out:
++ rfcomm_send_rpn(s, 0, dlci,
++ bit_rate, data_bits, stop_bits, parity, flow_ctrl,
++ xon_char, xoff_char, rpn_mask);
++
++ return 0;
++}
++
++static int rfcomm_recv_rls(struct rfcomm_session *s, int cr, struct sk_buff *skb)
++{
++ struct rfcomm_rls *rls = (void *) skb->data;
++ u8 dlci = __get_dlci(rls->dlci);
++
++ BT_DBG("dlci %d cr %d status 0x%x", dlci, cr, rls->status);
++
++ if (!cr)
++ return 0;
++
++ /* FIXME: We should probably do something with this
++ information here. But for now it's sufficient just
++ to reply -- Bluetooth 1.1 says it's mandatory to
++ recognise and respond to RLS */
++
++ rfcomm_send_rls(s, 0, dlci, rls->status);
++
++ return 0;
++}
++
++static int rfcomm_recv_msc(struct rfcomm_session *s, int cr, struct sk_buff *skb)
++{
++ struct rfcomm_msc *msc = (void *) skb->data;
++ struct rfcomm_dlc *d;
++ u8 dlci = __get_dlci(msc->dlci);
++
++ BT_DBG("dlci %d cr %d v24 0x%x", dlci, cr, msc->v24_sig);
++
++ d = rfcomm_dlc_get(s, dlci);
++ if (!d)
++ return 0;
++
++ if (cr) {
++ if (msc->v24_sig & RFCOMM_V24_FC && !d->cfc)
++ set_bit(RFCOMM_TX_THROTTLED, &d->flags);
++ else
++ clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
++
++ rfcomm_dlc_lock(d);
++ if (d->modem_status)
++ d->modem_status(d, msc->v24_sig);
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_send_msc(s, 0, dlci, msc->v24_sig);
++
++ d->mscex |= RFCOMM_MSCEX_RX;
++ } else
++ d->mscex |= RFCOMM_MSCEX_TX;
++
++ return 0;
++}
++
++static int rfcomm_recv_mcc(struct rfcomm_session *s, struct sk_buff *skb)
++{
++ struct rfcomm_mcc *mcc = (void *) skb->data;
++ u8 type, cr, len;
++
++ cr = __test_cr(mcc->type);
++ type = __get_mcc_type(mcc->type);
++ len = __get_mcc_len(mcc->len);
++
++ BT_DBG("%p type 0x%x cr %d", s, type, cr);
++
++ skb_pull(skb, 2);
++
++ switch (type) {
++ case RFCOMM_PN:
++ rfcomm_recv_pn(s, cr, skb);
++ break;
++
++ case RFCOMM_RPN:
++ rfcomm_recv_rpn(s, cr, len, skb);
++ break;
++
++ case RFCOMM_RLS:
++ rfcomm_recv_rls(s, cr, skb);
++ break;
++
++ case RFCOMM_MSC:
++ rfcomm_recv_msc(s, cr, skb);
++ break;
++
++ case RFCOMM_FCOFF:
++ if (cr) {
++ set_bit(RFCOMM_TX_THROTTLED, &s->flags);
++ rfcomm_send_fcoff(s, 0);
++ }
++ break;
++
++ case RFCOMM_FCON:
++ if (cr) {
++ clear_bit(RFCOMM_TX_THROTTLED, &s->flags);
++ rfcomm_send_fcon(s, 0);
++ }
++ break;
++
++ case RFCOMM_TEST:
++ if (cr)
++ rfcomm_send_test(s, 0, skb->data, skb->len);
++ break;
++
++ case RFCOMM_NSC:
++ break;
++
++ default:
++ BT_ERR("Unknown control type 0x%02x", type);
++ rfcomm_send_nsc(s, cr, type);
++ break;
++ }
++ return 0;
++}
++
++static int rfcomm_recv_data(struct rfcomm_session *s, u8 dlci, int pf, struct sk_buff *skb)
++{
++ struct rfcomm_dlc *d;
++
++ BT_DBG("session %p state %ld dlci %d pf %d", s, s->state, dlci, pf);
++
++ d = rfcomm_dlc_get(s, dlci);
++ if (!d) {
++ rfcomm_send_dm(s, dlci);
++ goto drop;
++ }
++
++ if (pf && d->cfc) {
++ u8 credits = *(u8 *) skb->data; skb_pull(skb, 1);
++
++ d->tx_credits += credits;
++ if (d->tx_credits)
++ clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
++ }
++
++ if (skb->len && d->state == BT_CONNECTED) {
++ rfcomm_dlc_lock(d);
++ d->rx_credits--;
++ d->data_ready(d, skb);
++ rfcomm_dlc_unlock(d);
++ return 0;
++ }
++
++drop:
++ kfree_skb(skb);
++ return 0;
++}
++
++static int rfcomm_recv_frame(struct rfcomm_session *s, struct sk_buff *skb)
++{
++ struct rfcomm_hdr *hdr = (void *) skb->data;
++ u8 type, dlci, fcs;
++
++ dlci = __get_dlci(hdr->addr);
++ type = __get_type(hdr->ctrl);
++
++ /* Trim FCS */
++ skb->len--; skb->tail--;
++ fcs = *(u8 *) skb->tail;
++
++ if (__check_fcs(skb->data, type, fcs)) {
++ BT_ERR("bad checksum in packet");
++ kfree_skb(skb);
++ return -EILSEQ;
++ }
++
++ if (__test_ea(hdr->len))
++ skb_pull(skb, 3);
++ else
++ skb_pull(skb, 4);
++
++ switch (type) {
++ case RFCOMM_SABM:
++ if (__test_pf(hdr->ctrl))
++ rfcomm_recv_sabm(s, dlci);
++ break;
++
++ case RFCOMM_DISC:
++ if (__test_pf(hdr->ctrl))
++ rfcomm_recv_disc(s, dlci);
++ break;
++
++ case RFCOMM_UA:
++ if (__test_pf(hdr->ctrl))
++ rfcomm_recv_ua(s, dlci);
++ break;
++
++ case RFCOMM_DM:
++ rfcomm_recv_dm(s, dlci);
++ break;
++
++ case RFCOMM_UIH:
++ if (dlci)
++ return rfcomm_recv_data(s, dlci, __test_pf(hdr->ctrl), skb);
++
++ rfcomm_recv_mcc(s, skb);
++ break;
++
++ default:
++ BT_ERR("Unknown packet type 0x%02x\n", type);
++ break;
++ }
++ kfree_skb(skb);
++ return 0;
++}
++
++/* ---- Connection and data processing ---- */
++
++static void rfcomm_process_connect(struct rfcomm_session *s)
++{
++ struct rfcomm_dlc *d;
++ struct list_head *p, *n;
++
++ BT_DBG("session %p state %ld", s, s->state);
++
++ list_for_each_safe(p, n, &s->dlcs) {
++ d = list_entry(p, struct rfcomm_dlc, list);
++ if (d->state == BT_CONFIG) {
++ d->mtu = s->mtu;
++ rfcomm_send_pn(s, 1, d);
++ }
++ }
++}
++
++/* Send data queued for the DLC.
++ * Return number of frames left in the queue.
++ */
++static inline int rfcomm_process_tx(struct rfcomm_dlc *d)
++{
++ struct sk_buff *skb;
++ int err;
++
++ BT_DBG("dlc %p state %ld cfc %d rx_credits %d tx_credits %d",
++ d, d->state, d->cfc, d->rx_credits, d->tx_credits);
++
++ /* Send pending MSC */
++ if (test_and_clear_bit(RFCOMM_MSC_PENDING, &d->flags))
++ rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
++
++ if (d->cfc) {
++ /* CFC enabled.
++ * Give them some credits */
++ if (!test_bit(RFCOMM_RX_THROTTLED, &d->flags) &&
++ d->rx_credits <= (d->cfc >> 2)) {
++ rfcomm_send_credits(d->session, d->addr, d->cfc - d->rx_credits);
++ d->rx_credits = d->cfc;
++ }
++ } else {
++ /* CFC disabled.
++ * Give ourselves some credits */
++ d->tx_credits = 5;
++ }
++
++ if (test_bit(RFCOMM_TX_THROTTLED, &d->flags))
++ return skb_queue_len(&d->tx_queue);
++
++ while (d->tx_credits && (skb = skb_dequeue(&d->tx_queue))) {
++ err = rfcomm_send_frame(d->session, skb->data, skb->len);
++ if (err < 0) {
++ skb_queue_head(&d->tx_queue, skb);
++ break;
++ }
++ kfree_skb(skb);
++ d->tx_credits--;
++ }
++
++ if (d->cfc && !d->tx_credits) {
++ /* We're out of TX credits.
++ * Set TX_THROTTLED flag to avoid unnesary wakeups by dlc_send. */
++ set_bit(RFCOMM_TX_THROTTLED, &d->flags);
++ }
++
++ return skb_queue_len(&d->tx_queue);
++}
++
++static inline void rfcomm_process_dlcs(struct rfcomm_session *s)
++{
++ struct rfcomm_dlc *d;
++ struct list_head *p, *n;
++
++ BT_DBG("session %p state %ld", s, s->state);
++
++ list_for_each_safe(p, n, &s->dlcs) {
++ d = list_entry(p, struct rfcomm_dlc, list);
++ if (test_bit(RFCOMM_TIMED_OUT, &d->flags)) {
++ __rfcomm_dlc_close(d, ETIMEDOUT);
++ continue;
++ }
++
++ if (test_bit(RFCOMM_TX_THROTTLED, &s->flags))
++ continue;
++
++ if ((d->state == BT_CONNECTED || d->state == BT_DISCONN) &&
++ d->mscex == RFCOMM_MSCEX_OK)
++ rfcomm_process_tx(d);
++ }
++}
++
++static inline void rfcomm_process_rx(struct rfcomm_session *s)
++{
++ struct socket *sock = s->sock;
++ struct sock *sk = sock->sk;
++ struct sk_buff *skb;
++
++ BT_DBG("session %p state %ld qlen %d", s, s->state, skb_queue_len(&sk->receive_queue));
++
++ /* Get data directly from socket receive queue without copying it. */
++ while ((skb = skb_dequeue(&sk->receive_queue))) {
++ skb_orphan(skb);
++ rfcomm_recv_frame(s, skb);
++ }
++
++ if (sk->state == BT_CLOSED) {
++ if (!s->initiator)
++ rfcomm_session_put(s);
++
++ rfcomm_session_close(s, sk->err);
++ }
++}
++
++static inline void rfcomm_accept_connection(struct rfcomm_session *s)
++{
++ struct socket *sock = s->sock, *nsock;
++ int err;
++
++ /* Fast check for a new connection.
++ * Avoids unnesesary socket allocations. */
++ if (list_empty(&bluez_pi(sock->sk)->accept_q))
++ return;
++
++ BT_DBG("session %p", s);
++
++ nsock = sock_alloc();
++ if (!nsock)
++ return;
++
++ nsock->type = sock->type;
++ nsock->ops = sock->ops;
++
++ err = sock->ops->accept(sock, nsock, O_NONBLOCK);
++ if (err < 0) {
++ sock_release(nsock);
++ return;
++ }
++
++ /* Set our callbacks */
++ nsock->sk->data_ready = rfcomm_l2data_ready;
++ nsock->sk->state_change = rfcomm_l2state_change;
++
++ s = rfcomm_session_add(nsock, BT_OPEN);
++ if (s) {
++ rfcomm_session_hold(s);
++ rfcomm_schedule(RFCOMM_SCHED_RX);
++ } else
++ sock_release(nsock);
++}
++
++static inline void rfcomm_check_connection(struct rfcomm_session *s)
++{
++ struct sock *sk = s->sock->sk;
++
++ BT_DBG("%p state %ld", s, s->state);
++
++ switch(sk->state) {
++ case BT_CONNECTED:
++ s->state = BT_CONNECT;
++
++ /* We can adjust MTU on outgoing sessions.
++ * L2CAP MTU minus UIH header and FCS. */
++ s->mtu = min(l2cap_pi(sk)->omtu, l2cap_pi(sk)->imtu) - 5;
++
++ rfcomm_send_sabm(s, 0);
++ break;
++
++ case BT_CLOSED:
++ s->state = BT_CLOSED;
++ rfcomm_session_close(s, sk->err);
++ break;
++ }
++}
++
++static inline void rfcomm_process_sessions(void)
++{
++ struct list_head *p, *n;
++
++ rfcomm_lock();
++
++ list_for_each_safe(p, n, &session_list) {
++ struct rfcomm_session *s;
++ s = list_entry(p, struct rfcomm_session, list);
++
++ if (s->state == BT_LISTEN) {
++ rfcomm_accept_connection(s);
++ continue;
++ }
++
++ rfcomm_session_hold(s);
++
++ switch (s->state) {
++ case BT_BOUND:
++ rfcomm_check_connection(s);
++ break;
++
++ default:
++ rfcomm_process_rx(s);
++ break;
++ }
++
++ rfcomm_process_dlcs(s);
++
++ rfcomm_session_put(s);
++ }
++
++ rfcomm_unlock();
++}
++
++static void rfcomm_worker(void)
++{
++ BT_DBG("");
++
++ daemonize(); reparent_to_init();
++ set_fs(KERNEL_DS);
++
++ while (!atomic_read(&terminate)) {
++ BT_DBG("worker loop event 0x%lx", rfcomm_event);
++
++ if (!test_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event)) {
++ /* No pending events. Let's sleep.
++ * Incomming connections and data will wake us up. */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule();
++ }
++
++ /* Process stuff */
++ clear_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event);
++ rfcomm_process_sessions();
++ }
++ set_current_state(TASK_RUNNING);
++ return;
++}
++
++static int rfcomm_add_listener(bdaddr_t *ba)
++{
++ struct sockaddr_l2 addr;
++ struct l2cap_options opts;
++ struct socket *sock;
++ struct rfcomm_session *s;
++ int size, err = 0;
++
++ /* Create socket */
++ err = rfcomm_l2sock_create(&sock);
++ if (err < 0) {
++ BT_ERR("Create socket failed %d", err);
++ return err;
++ }
++
++ /* Bind socket */
++ bacpy(&addr.l2_bdaddr, ba);
++ addr.l2_family = AF_BLUETOOTH;
++ addr.l2_psm = htobs(RFCOMM_PSM);
++ err = sock->ops->bind(sock, (struct sockaddr *) &addr, sizeof(addr));
++ if (err < 0) {
++ BT_ERR("Bind failed %d", err);
++ goto failed;
++ }
++
++ /* Set L2CAP options */
++ size = sizeof(opts);
++ sock->ops->getsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, &size);
++
++ opts.imtu = RFCOMM_MAX_L2CAP_MTU;
++ sock->ops->setsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, size);
++
++ /* Start listening on the socket */
++ err = sock->ops->listen(sock, 10);
++ if (err) {
++ BT_ERR("Listen failed %d", err);
++ goto failed;
++ }
++
++ /* Add listening session */
++ s = rfcomm_session_add(sock, BT_LISTEN);
++ if (!s)
++ goto failed;
++
++ rfcomm_session_hold(s);
++ return 0;
++failed:
++ sock_release(sock);
++ return err;
++}
++
++static void rfcomm_kill_listener(void)
++{
++ struct rfcomm_session *s;
++ struct list_head *p, *n;
++
++ BT_DBG("");
++
++ list_for_each_safe(p, n, &session_list) {
++ s = list_entry(p, struct rfcomm_session, list);
++ rfcomm_session_del(s);
++ }
++}
++
++static int rfcomm_run(void *unused)
++{
++ rfcomm_thread = current;
++
++ atomic_inc(&running);
++
++ daemonize(); reparent_to_init();
++
++ sigfillset(&current->blocked);
++ set_fs(KERNEL_DS);
++
++ sprintf(current->comm, "krfcommd");
++
++ BT_DBG("");
++
++ rfcomm_add_listener(BDADDR_ANY);
++
++ rfcomm_worker();
++
++ rfcomm_kill_listener();
++
++ atomic_dec(&running);
++ return 0;
++}
++
++/* ---- Proc fs support ---- */
++static int rfcomm_dlc_dump(char *buf)
++{
++ struct rfcomm_session *s;
++ struct sock *sk;
++ struct list_head *p, *pp;
++ char *ptr = buf;
++
++ rfcomm_lock();
++
++ list_for_each(p, &session_list) {
++ s = list_entry(p, struct rfcomm_session, list);
++ sk = s->sock->sk;
++
++ list_for_each(pp, &s->dlcs) {
++ struct rfcomm_dlc *d;
++ d = list_entry(pp, struct rfcomm_dlc, list);
++
++ ptr += sprintf(ptr, "dlc %s %s %ld %d %d %d %d\n",
++ batostr(&bluez_pi(sk)->src), batostr(&bluez_pi(sk)->dst),
++ d->state, d->dlci, d->mtu, d->rx_credits, d->tx_credits);
++ }
++ }
++
++ rfcomm_unlock();
++
++ return ptr - buf;
++}
++
++extern int rfcomm_sock_dump(char *buf);
++
++static int rfcomm_read_proc(char *buf, char **start, off_t offset, int count, int *eof, void *priv)
++{
++ char *ptr = buf;
++ int len;
++
++ BT_DBG("count %d, offset %ld", count, offset);
++
++ ptr += rfcomm_dlc_dump(ptr);
++ ptr += rfcomm_sock_dump(ptr);
++ len = ptr - buf;
++
++ if (len <= count + offset)
++ *eof = 1;
++
++ *start = buf + offset;
++ len -= offset;
++
++ if (len > count)
++ len = count;
++ if (len < 0)
++ len = 0;
++
++ return len;
++}
++
++/* ---- Initialization ---- */
++int __init rfcomm_init(void)
++{
++ l2cap_load();
++
++ kernel_thread(rfcomm_run, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
++
++ rfcomm_init_sockets();
++
++#ifdef CONFIG_BLUEZ_RFCOMM_TTY
++ rfcomm_init_ttys();
++#endif
++
++ create_proc_read_entry("bluetooth/rfcomm", 0, 0, rfcomm_read_proc, NULL);
++
++ BT_INFO("BlueZ RFCOMM ver %s", VERSION);
++ BT_INFO("Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>");
++ BT_INFO("Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>");
++ return 0;
++}
++
++void rfcomm_cleanup(void)
++{
++ /* Terminate working thread.
++ * ie. Set terminate flag and wake it up */
++ atomic_inc(&terminate);
++ rfcomm_schedule(RFCOMM_SCHED_STATE);
++
++ /* Wait until thread is running */
++ while (atomic_read(&running))
++ schedule();
++
++ remove_proc_entry("bluetooth/rfcomm", NULL);
++
++#ifdef CONFIG_BLUEZ_RFCOMM_TTY
++ rfcomm_cleanup_ttys();
++#endif
++
++ rfcomm_cleanup_sockets();
++ return;
++}
++
++module_init(rfcomm_init);
++module_exit(rfcomm_cleanup);
++
++MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueZ RFCOMM ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/rfcomm/crc.c linux-2.4.18-mh15/net/bluetooth/rfcomm/crc.c
+--- linux-2.4.18/net/bluetooth/rfcomm/crc.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/rfcomm/crc.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,71 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * RFCOMM FCS calculation.
++ *
++ * $Id: crc.c,v 1.2 2002/09/21 09:54:32 holtmann Exp $
++ */
++
++/* reversed, 8-bit, poly=0x07 */
++unsigned char rfcomm_crc_table[256] = {
++ 0x00, 0x91, 0xe3, 0x72, 0x07, 0x96, 0xe4, 0x75,
++ 0x0e, 0x9f, 0xed, 0x7c, 0x09, 0x98, 0xea, 0x7b,
++ 0x1c, 0x8d, 0xff, 0x6e, 0x1b, 0x8a, 0xf8, 0x69,
++ 0x12, 0x83, 0xf1, 0x60, 0x15, 0x84, 0xf6, 0x67,
++
++ 0x38, 0xa9, 0xdb, 0x4a, 0x3f, 0xae, 0xdc, 0x4d,
++ 0x36, 0xa7, 0xd5, 0x44, 0x31, 0xa0, 0xd2, 0x43,
++ 0x24, 0xb5, 0xc7, 0x56, 0x23, 0xb2, 0xc0, 0x51,
++ 0x2a, 0xbb, 0xc9, 0x58, 0x2d, 0xbc, 0xce, 0x5f,
++
++ 0x70, 0xe1, 0x93, 0x02, 0x77, 0xe6, 0x94, 0x05,
++ 0x7e, 0xef, 0x9d, 0x0c, 0x79, 0xe8, 0x9a, 0x0b,
++ 0x6c, 0xfd, 0x8f, 0x1e, 0x6b, 0xfa, 0x88, 0x19,
++ 0x62, 0xf3, 0x81, 0x10, 0x65, 0xf4, 0x86, 0x17,
++
++ 0x48, 0xd9, 0xab, 0x3a, 0x4f, 0xde, 0xac, 0x3d,
++ 0x46, 0xd7, 0xa5, 0x34, 0x41, 0xd0, 0xa2, 0x33,
++ 0x54, 0xc5, 0xb7, 0x26, 0x53, 0xc2, 0xb0, 0x21,
++ 0x5a, 0xcb, 0xb9, 0x28, 0x5d, 0xcc, 0xbe, 0x2f,
++
++ 0xe0, 0x71, 0x03, 0x92, 0xe7, 0x76, 0x04, 0x95,
++ 0xee, 0x7f, 0x0d, 0x9c, 0xe9, 0x78, 0x0a, 0x9b,
++ 0xfc, 0x6d, 0x1f, 0x8e, 0xfb, 0x6a, 0x18, 0x89,
++ 0xf2, 0x63, 0x11, 0x80, 0xf5, 0x64, 0x16, 0x87,
++
++ 0xd8, 0x49, 0x3b, 0xaa, 0xdf, 0x4e, 0x3c, 0xad,
++ 0xd6, 0x47, 0x35, 0xa4, 0xd1, 0x40, 0x32, 0xa3,
++ 0xc4, 0x55, 0x27, 0xb6, 0xc3, 0x52, 0x20, 0xb1,
++ 0xca, 0x5b, 0x29, 0xb8, 0xcd, 0x5c, 0x2e, 0xbf,
++
++ 0x90, 0x01, 0x73, 0xe2, 0x97, 0x06, 0x74, 0xe5,
++ 0x9e, 0x0f, 0x7d, 0xec, 0x99, 0x08, 0x7a, 0xeb,
++ 0x8c, 0x1d, 0x6f, 0xfe, 0x8b, 0x1a, 0x68, 0xf9,
++ 0x82, 0x13, 0x61, 0xf0, 0x85, 0x14, 0x66, 0xf7,
++
++ 0xa8, 0x39, 0x4b, 0xda, 0xaf, 0x3e, 0x4c, 0xdd,
++ 0xa6, 0x37, 0x45, 0xd4, 0xa1, 0x30, 0x42, 0xd3,
++ 0xb4, 0x25, 0x57, 0xc6, 0xb3, 0x22, 0x50, 0xc1,
++ 0xba, 0x2b, 0x59, 0xc8, 0xbd, 0x2c, 0x5e, 0xcf
++};
+diff -urN linux-2.4.18/net/bluetooth/rfcomm/Makefile linux-2.4.18-mh15/net/bluetooth/rfcomm/Makefile
+--- linux-2.4.18/net/bluetooth/rfcomm/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/rfcomm/Makefile 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,11 @@
++#
++# Makefile for the Linux Bluetooth RFCOMM layer
++#
++
++O_TARGET := rfcomm.o
++
++obj-y := core.o sock.o crc.o
++obj-$(CONFIG_BLUEZ_RFCOMM_TTY) += tty.o
++obj-m += $(O_TARGET)
++
++include $(TOPDIR)/Rules.make
+diff -urN linux-2.4.18/net/bluetooth/rfcomm/sock.c linux-2.4.18-mh15/net/bluetooth/rfcomm/sock.c
+--- linux-2.4.18/net/bluetooth/rfcomm/sock.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/rfcomm/sock.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,847 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * RFCOMM sockets.
++ *
++ * $Id: sock.c,v 1.30 2002/10/18 20:12:12 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/init.h>
++#include <linux/skbuff.h>
++#include <linux/interrupt.h>
++#include <linux/socket.h>
++#include <linux/skbuff.h>
++#include <linux/list.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/rfcomm.h>
++
++#ifndef CONFIG_BLUEZ_RFCOMM_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++static struct proto_ops rfcomm_sock_ops;
++
++static struct bluez_sock_list rfcomm_sk_list = {
++ lock: RW_LOCK_UNLOCKED
++};
++
++static void rfcomm_sock_close(struct sock *sk);
++static void rfcomm_sock_kill(struct sock *sk);
++
++/* ---- DLC callbacks ----
++ *
++ * called under rfcomm_dlc_lock()
++ */
++static void rfcomm_sk_data_ready(struct rfcomm_dlc *d, struct sk_buff *skb)
++{
++ struct sock *sk = d->owner;
++ if (!sk)
++ return;
++
++ atomic_add(skb->len, &sk->rmem_alloc);
++ skb_queue_tail(&sk->receive_queue, skb);
++ sk->data_ready(sk, skb->len);
++
++ if (atomic_read(&sk->rmem_alloc) >= sk->rcvbuf)
++ rfcomm_dlc_throttle(d);
++}
++
++static void rfcomm_sk_state_change(struct rfcomm_dlc *d, int err)
++{
++ struct sock *sk = d->owner, *parent;
++ if (!sk)
++ return;
++
++ BT_DBG("dlc %p state %ld err %d", d, d->state, err);
++
++ bh_lock_sock(sk);
++
++ if (err)
++ sk->err = err;
++ sk->state = d->state;
++
++ parent = bluez_pi(sk)->parent;
++ if (!parent) {
++ if (d->state == BT_CONNECTED)
++ rfcomm_session_getaddr(d->session, &bluez_pi(sk)->src, NULL);
++ sk->state_change(sk);
++ } else
++ parent->data_ready(parent, 0);
++
++ bh_unlock_sock(sk);
++}
++
++/* ---- Socket functions ---- */
++static struct sock *__rfcomm_get_sock_by_addr(u8 channel, bdaddr_t *src)
++{
++ struct sock *sk;
++
++ for (sk = rfcomm_sk_list.head; sk; sk = sk->next) {
++ if (rfcomm_pi(sk)->channel == channel &&
++ !bacmp(&bluez_pi(sk)->src, src))
++ break;
++ }
++
++ return sk;
++}
++
++/* Find socket with channel and source bdaddr.
++ * Returns closest match.
++ */
++static struct sock *__rfcomm_get_sock_by_channel(int state, u8 channel, bdaddr_t *src)
++{
++ struct sock *sk, *sk1 = NULL;
++
++ for (sk = rfcomm_sk_list.head; sk; sk = sk->next) {
++ if (state && sk->state != state)
++ continue;
++
++ if (rfcomm_pi(sk)->channel == channel) {
++ /* Exact match. */
++ if (!bacmp(&bluez_pi(sk)->src, src))
++ break;
++
++ /* Closest match */
++ if (!bacmp(&bluez_pi(sk)->src, BDADDR_ANY))
++ sk1 = sk;
++ }
++ }
++ return sk ? sk : sk1;
++}
++
++/* Find socket with given address (channel, src).
++ * Returns locked socket */
++static inline struct sock *rfcomm_get_sock_by_channel(int state, u8 channel, bdaddr_t *src)
++{
++ struct sock *s;
++ read_lock(&rfcomm_sk_list.lock);
++ s = __rfcomm_get_sock_by_channel(state, channel, src);
++ if (s) bh_lock_sock(s);
++ read_unlock(&rfcomm_sk_list.lock);
++ return s;
++}
++
++static void rfcomm_sock_destruct(struct sock *sk)
++{
++ struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
++
++ BT_DBG("sk %p dlc %p", sk, d);
++
++ skb_queue_purge(&sk->receive_queue);
++ skb_queue_purge(&sk->write_queue);
++
++ rfcomm_dlc_lock(d);
++ rfcomm_pi(sk)->dlc = NULL;
++
++ /* Detach DLC if it's owned by this socket */
++ if (d->owner == sk)
++ d->owner = NULL;
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_dlc_put(d);
++
++ MOD_DEC_USE_COUNT;
++}
++
++static void rfcomm_sock_cleanup_listen(struct sock *parent)
++{
++ struct sock *sk;
++
++ BT_DBG("parent %p", parent);
++
++ /* Close not yet accepted dlcs */
++ while ((sk = bluez_accept_dequeue(parent, NULL))) {
++ rfcomm_sock_close(sk);
++ rfcomm_sock_kill(sk);
++ }
++
++ parent->state = BT_CLOSED;
++ parent->zapped = 1;
++}
++
++/* Kill socket (only if zapped and orphan)
++ * Must be called on unlocked socket.
++ */
++static void rfcomm_sock_kill(struct sock *sk)
++{
++ if (!sk->zapped || sk->socket)
++ return;
++
++ BT_DBG("sk %p state %d refcnt %d", sk, sk->state, atomic_read(&sk->refcnt));
++
++ /* Kill poor orphan */
++ bluez_sock_unlink(&rfcomm_sk_list, sk);
++ sk->dead = 1;
++ sock_put(sk);
++}
++
++static void __rfcomm_sock_close(struct sock *sk)
++{
++ struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
++
++ BT_DBG("sk %p state %d socket %p", sk, sk->state, sk->socket);
++
++ switch (sk->state) {
++ case BT_LISTEN:
++ rfcomm_sock_cleanup_listen(sk);
++ break;
++
++ case BT_CONNECT:
++ case BT_CONNECT2:
++ case BT_CONFIG:
++ case BT_CONNECTED:
++ rfcomm_dlc_close(d, 0);
++
++ default:
++ sk->zapped = 1;
++ break;
++ }
++}
++
++/* Close socket.
++ * Must be called on unlocked socket.
++ */
++static void rfcomm_sock_close(struct sock *sk)
++{
++ lock_sock(sk);
++ __rfcomm_sock_close(sk);
++ release_sock(sk);
++}
++
++static void rfcomm_sock_init(struct sock *sk, struct sock *parent)
++{
++ BT_DBG("sk %p", sk);
++
++ if (parent)
++ sk->type = parent->type;
++}
++
++static struct sock *rfcomm_sock_alloc(struct socket *sock, int proto, int prio)
++{
++ struct rfcomm_dlc *d;
++ struct sock *sk;
++
++ sk = sk_alloc(PF_BLUETOOTH, prio, 1);
++ if (!sk)
++ return NULL;
++
++ d = rfcomm_dlc_alloc(prio);
++ if (!d) {
++ sk_free(sk);
++ return NULL;
++ }
++ d->data_ready = rfcomm_sk_data_ready;
++ d->state_change = rfcomm_sk_state_change;
++
++ rfcomm_pi(sk)->dlc = d;
++ d->owner = sk;
++
++ bluez_sock_init(sock, sk);
++
++ sk->zapped = 0;
++
++ sk->destruct = rfcomm_sock_destruct;
++ sk->sndtimeo = RFCOMM_CONN_TIMEOUT;
++
++ sk->sndbuf = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
++ sk->rcvbuf = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
++
++ sk->protocol = proto;
++ sk->state = BT_OPEN;
++
++ bluez_sock_link(&rfcomm_sk_list, sk);
++
++ BT_DBG("sk %p", sk);
++
++ MOD_INC_USE_COUNT;
++ return sk;
++}
++
++static int rfcomm_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ sock->state = SS_UNCONNECTED;
++
++ if (sock->type != SOCK_STREAM && sock->type != SOCK_RAW)
++ return -ESOCKTNOSUPPORT;
++
++ sock->ops = &rfcomm_sock_ops;
++
++ if (!(sk = rfcomm_sock_alloc(sock, protocol, GFP_KERNEL)))
++ return -ENOMEM;
++
++ rfcomm_sock_init(sk, NULL);
++ return 0;
++}
++
++static int rfcomm_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
++{
++ struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p %s", sk, batostr(&sa->rc_bdaddr));
++
++ if (!addr || addr->sa_family != AF_BLUETOOTH)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_OPEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ write_lock_bh(&rfcomm_sk_list.lock);
++
++ if (sa->rc_channel && __rfcomm_get_sock_by_addr(sa->rc_channel, &sa->rc_bdaddr)) {
++ err = -EADDRINUSE;
++ } else {
++ /* Save source address */
++ bacpy(&bluez_pi(sk)->src, &sa->rc_bdaddr);
++ rfcomm_pi(sk)->channel = sa->rc_channel;
++ sk->state = BT_BOUND;
++ }
++
++ write_unlock_bh(&rfcomm_sk_list.lock);
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
++{
++ struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
++ struct sock *sk = sock->sk;
++ struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
++ int err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_rc))
++ return -EINVAL;
++
++ if (sk->state != BT_OPEN && sk->state != BT_BOUND)
++ return -EBADFD;
++
++ if (sk->type != SOCK_STREAM)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ sk->state = BT_CONNECT;
++ bacpy(&bluez_pi(sk)->dst, &sa->rc_bdaddr);
++ rfcomm_pi(sk)->channel = sa->rc_channel;
++
++ err = rfcomm_dlc_open(d, &bluez_pi(sk)->src, &sa->rc_bdaddr, sa->rc_channel);
++ if (!err)
++ err = bluez_sock_wait_state(sk, BT_CONNECTED,
++ sock_sndtimeo(sk, flags & O_NONBLOCK));
++
++ release_sock(sk);
++ return err;
++}
++
++int rfcomm_sock_listen(struct socket *sock, int backlog)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p backlog %d", sk, backlog);
++
++ lock_sock(sk);
++
++ if (sk->state != BT_BOUND) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ sk->max_ack_backlog = backlog;
++ sk->ack_backlog = 0;
++ sk->state = BT_LISTEN;
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++int rfcomm_sock_accept(struct socket *sock, struct socket *newsock, int flags)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct sock *sk = sock->sk, *nsk;
++ long timeo;
++ int err = 0;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
++
++ BT_DBG("sk %p timeo %ld", sk, timeo);
++
++ /* Wait for an incoming connection. (wake-one). */
++ add_wait_queue_exclusive(sk->sleep, &wait);
++ while (!(nsk = bluez_accept_dequeue(sk, newsock))) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ if (!timeo) {
++ err = -EAGAIN;
++ break;
++ }
++
++ release_sock(sk);
++ timeo = schedule_timeout(timeo);
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ break;
++ }
++
++ if (signal_pending(current)) {
++ err = sock_intr_errno(timeo);
++ break;
++ }
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++
++ if (err)
++ goto done;
++
++ newsock->state = SS_CONNECTED;
++
++ BT_DBG("new socket %p", nsk);
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
++{
++ struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ sa->rc_family = AF_BLUETOOTH;
++ sa->rc_channel = rfcomm_pi(sk)->channel;
++ if (peer)
++ bacpy(&sa->rc_bdaddr, &bluez_pi(sk)->dst);
++ else
++ bacpy(&sa->rc_bdaddr, &bluez_pi(sk)->src);
++
++ *len = sizeof(struct sockaddr_rc);
++ return 0;
++}
++
++static int rfcomm_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len,
++ struct scm_cookie *scm)
++{
++ struct sock *sk = sock->sk;
++ struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
++ struct sk_buff *skb;
++ int err, size;
++ int sent = 0;
++
++ if (msg->msg_flags & MSG_OOB)
++ return -EOPNOTSUPP;
++
++ if (sk->shutdown & SEND_SHUTDOWN)
++ return -EPIPE;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ lock_sock(sk);
++
++ while (len) {
++ size = min_t(uint, len, d->mtu);
++
++ skb = sock_alloc_send_skb(sk, size + RFCOMM_SKB_RESERVE,
++ msg->msg_flags & MSG_DONTWAIT, &err);
++ if (!skb)
++ break;
++ skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
++
++ err = memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size);
++ if (err) {
++ kfree_skb(skb);
++ sent = err;
++ break;
++ }
++
++ err = rfcomm_dlc_send(d, skb);
++ if (err < 0) {
++ kfree_skb(skb);
++ break;
++ }
++
++ sent += size;
++ len -= size;
++ }
++
++ release_sock(sk);
++
++ return sent ? sent : err;
++}
++
++static long rfcomm_sock_data_wait(struct sock *sk, long timeo)
++{
++ DECLARE_WAITQUEUE(wait, current);
++
++ add_wait_queue(sk->sleep, &wait);
++ for (;;) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (skb_queue_len(&sk->receive_queue) || sk->err || (sk->shutdown & RCV_SHUTDOWN) ||
++ signal_pending(current) || !timeo)
++ break;
++
++ set_bit(SOCK_ASYNC_WAITDATA, &sk->socket->flags);
++ release_sock(sk);
++ timeo = schedule_timeout(timeo);
++ lock_sock(sk);
++ clear_bit(SOCK_ASYNC_WAITDATA, &sk->socket->flags);
++ }
++
++ __set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++ return timeo;
++}
++
++static int rfcomm_sock_recvmsg(struct socket *sock, struct msghdr *msg, int size,
++ int flags, struct scm_cookie *scm)
++{
++ struct sock *sk = sock->sk;
++ int target, err = 0, copied = 0;
++ long timeo;
++
++ if (flags & MSG_OOB)
++ return -EOPNOTSUPP;
++
++ msg->msg_namelen = 0;
++
++ BT_DBG("sk %p size %d", sk, size);
++
++ lock_sock(sk);
++
++ target = sock_rcvlowat(sk, flags & MSG_WAITALL, size);
++ timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
++
++ do {
++ struct sk_buff *skb;
++ int chunk;
++
++ skb = skb_dequeue(&sk->receive_queue);
++ if (!skb) {
++ if (copied >= target)
++ break;
++
++ if ((err = sock_error(sk)) != 0)
++ break;
++ if (sk->shutdown & RCV_SHUTDOWN)
++ break;
++
++ err = -EAGAIN;
++ if (!timeo)
++ break;
++
++ timeo = rfcomm_sock_data_wait(sk, timeo);
++
++ if (signal_pending(current)) {
++ err = sock_intr_errno(timeo);
++ goto out;
++ }
++ continue;
++ }
++
++ chunk = min_t(unsigned int, skb->len, size);
++ if (memcpy_toiovec(msg->msg_iov, skb->data, chunk)) {
++ skb_queue_head(&sk->receive_queue, skb);
++ if (!copied)
++ copied = -EFAULT;
++ break;
++ }
++ copied += chunk;
++ size -= chunk;
++
++ if (!(flags & MSG_PEEK)) {
++ atomic_sub(chunk, &sk->rmem_alloc);
++
++ skb_pull(skb, chunk);
++ if (skb->len) {
++ skb_queue_head(&sk->receive_queue, skb);
++ break;
++ }
++ kfree_skb(skb);
++
++ } else {
++ /* put message back and return */
++ skb_queue_head(&sk->receive_queue, skb);
++ break;
++ }
++ } while (size);
++
++out:
++ if (atomic_read(&sk->rmem_alloc) <= (sk->rcvbuf >> 2))
++ rfcomm_dlc_unthrottle(rfcomm_pi(sk)->dlc);
++
++ release_sock(sk);
++ return copied ? : err;
++}
++
++static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, int optlen)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ lock_sock(sk);
++
++ switch (optname) {
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ };
++
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_getsockopt(struct socket *sock, int level, int optname, char *optval, int *optlen)
++{
++ struct sock *sk = sock->sk;
++ int len, err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ if (get_user(len, optlen))
++ return -EFAULT;
++
++ lock_sock(sk);
++
++ switch (optname) {
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ };
++
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++{
++ struct sock *sk = sock->sk;
++ int err;
++
++ lock_sock(sk);
++
++#ifdef CONFIG_BLUEZ_RFCOMM_TTY
++ err = rfcomm_dev_ioctl(sk, cmd, arg);
++#else
++ err = -EOPNOTSUPP;
++#endif
++
++ release_sock(sk);
++
++ return err;
++}
++
++static int rfcomm_sock_shutdown(struct socket *sock, int how)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (!sk) return 0;
++
++ lock_sock(sk);
++ if (!sk->shutdown) {
++ sk->shutdown = SHUTDOWN_MASK;
++ __rfcomm_sock_close(sk);
++
++ if (sk->linger)
++ err = bluez_sock_wait_state(sk, BT_CLOSED, sk->lingertime);
++ }
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (!sk)
++ return 0;
++
++ err = rfcomm_sock_shutdown(sock, 2);
++
++ sock_orphan(sk);
++ rfcomm_sock_kill(sk);
++ return err;
++}
++
++/* ---- RFCOMM core layer callbacks ----
++ *
++ * called under rfcomm_lock()
++ */
++int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc **d)
++{
++ struct sock *sk, *parent;
++ bdaddr_t src, dst;
++ int result = 0;
++
++ BT_DBG("session %p channel %d", s, channel);
++
++ rfcomm_session_getaddr(s, &src, &dst);
++
++ /* Check if we have socket listening on this channel */
++ parent = rfcomm_get_sock_by_channel(BT_LISTEN, channel, &src);
++ if (!parent)
++ return 0;
++
++ /* Check for backlog size */
++ if (parent->ack_backlog > parent->max_ack_backlog) {
++ BT_DBG("backlog full %d", parent->ack_backlog);
++ goto done;
++ }
++
++ sk = rfcomm_sock_alloc(NULL, BTPROTO_RFCOMM, GFP_ATOMIC);
++ if (!sk)
++ goto done;
++
++ rfcomm_sock_init(sk, parent);
++ bacpy(&bluez_pi(sk)->src, &src);
++ bacpy(&bluez_pi(sk)->dst, &dst);
++ rfcomm_pi(sk)->channel = channel;
++
++ sk->state = BT_CONFIG;
++ bluez_accept_enqueue(parent, sk);
++
++ /* Accept connection and return socket DLC */
++ *d = rfcomm_pi(sk)->dlc;
++ result = 1;
++
++done:
++ bh_unlock_sock(parent);
++ return result;
++}
++
++/* ---- Proc fs support ---- */
++int rfcomm_sock_dump(char *buf)
++{
++ struct bluez_sock_list *list = &rfcomm_sk_list;
++ struct rfcomm_pinfo *pi;
++ struct sock *sk;
++ char *ptr = buf;
++
++ write_lock_bh(&list->lock);
++
++ for (sk = list->head; sk; sk = sk->next) {
++ pi = rfcomm_pi(sk);
++ ptr += sprintf(ptr, "sk %s %s %d %d\n",
++ batostr(&bluez_pi(sk)->src), batostr(&bluez_pi(sk)->dst),
++ sk->state, rfcomm_pi(sk)->channel);
++ }
++
++ write_unlock_bh(&list->lock);
++
++ return ptr - buf;
++}
++
++static struct proto_ops rfcomm_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: rfcomm_sock_release,
++ bind: rfcomm_sock_bind,
++ connect: rfcomm_sock_connect,
++ listen: rfcomm_sock_listen,
++ accept: rfcomm_sock_accept,
++ getname: rfcomm_sock_getname,
++ sendmsg: rfcomm_sock_sendmsg,
++ recvmsg: rfcomm_sock_recvmsg,
++ shutdown: rfcomm_sock_shutdown,
++ setsockopt: rfcomm_sock_setsockopt,
++ getsockopt: rfcomm_sock_getsockopt,
++ ioctl: rfcomm_sock_ioctl,
++ poll: bluez_sock_poll,
++ socketpair: sock_no_socketpair,
++ mmap: sock_no_mmap
++};
++
++static struct net_proto_family rfcomm_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: rfcomm_sock_create
++};
++
++int rfcomm_init_sockets(void)
++{
++ int err;
++
++ if ((err = bluez_sock_register(BTPROTO_RFCOMM, &rfcomm_sock_family_ops))) {
++ BT_ERR("Can't register RFCOMM socket layer");
++ return err;
++ }
++
++ return 0;
++}
++
++void rfcomm_cleanup_sockets(void)
++{
++ int err;
++
++ /* Unregister socket, protocol and notifier */
++ if ((err = bluez_sock_unregister(BTPROTO_RFCOMM)))
++ BT_ERR("Can't unregister RFCOMM socket layer %d", err);
++}
+diff -urN linux-2.4.18/net/bluetooth/rfcomm/tty.c linux-2.4.18-mh15/net/bluetooth/rfcomm/tty.c
+--- linux-2.4.18/net/bluetooth/rfcomm/tty.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/rfcomm/tty.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,960 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * RFCOMM TTY.
++ *
++ * $Id: tty.c,v 1.26 2002/10/18 20:12:12 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/tty.h>
++#include <linux/tty_driver.h>
++#include <linux/tty_flip.h>
++
++#include <linux/slab.h>
++#include <linux/skbuff.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/rfcomm.h>
++
++#ifndef CONFIG_BLUEZ_RFCOMM_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define RFCOMM_TTY_MAGIC 0x6d02 /* magic number for rfcomm struct */
++#define RFCOMM_TTY_PORTS RFCOMM_MAX_DEV /* whole lotta rfcomm devices */
++#define RFCOMM_TTY_MAJOR 216 /* device node major id of the usb/bluetooth.c driver */
++#define RFCOMM_TTY_MINOR 0
++
++struct rfcomm_dev {
++ struct list_head list;
++ atomic_t refcnt;
++
++ char name[12];
++ int id;
++ unsigned long flags;
++ int opened;
++ int err;
++
++ bdaddr_t src;
++ bdaddr_t dst;
++ u8 channel;
++
++ uint modem_status;
++
++ struct rfcomm_dlc *dlc;
++ struct tty_struct *tty;
++ wait_queue_head_t wait;
++ struct tasklet_struct wakeup_task;
++
++ atomic_t wmem_alloc;
++};
++
++static LIST_HEAD(rfcomm_dev_list);
++static rwlock_t rfcomm_dev_lock = RW_LOCK_UNLOCKED;
++
++static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb);
++static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err);
++static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig);
++
++static void rfcomm_tty_wakeup(unsigned long arg);
++
++/* ---- Device functions ---- */
++static void rfcomm_dev_destruct(struct rfcomm_dev *dev)
++{
++ struct rfcomm_dlc *dlc = dev->dlc;
++
++ BT_DBG("dev %p dlc %p", dev, dlc);
++
++ rfcomm_dlc_lock(dlc);
++ /* Detach DLC if it's owned by this dev */
++ if (dlc->owner == dev)
++ dlc->owner = NULL;
++ rfcomm_dlc_unlock(dlc);
++
++ rfcomm_dlc_put(dlc);
++ kfree(dev);
++
++ MOD_DEC_USE_COUNT;
++}
++
++static inline void rfcomm_dev_hold(struct rfcomm_dev *dev)
++{
++ atomic_inc(&dev->refcnt);
++}
++
++static inline void rfcomm_dev_put(struct rfcomm_dev *dev)
++{
++ /* The reason this isn't actually a race, as you no
++ doubt have a little voice screaming at you in your
++ head, is that the refcount should never actually
++ reach zero unless the device has already been taken
++ off the list, in rfcomm_dev_del(). And if that's not
++ true, we'll hit the BUG() in rfcomm_dev_destruct()
++ anyway. */
++ if (atomic_dec_and_test(&dev->refcnt))
++ rfcomm_dev_destruct(dev);
++}
++
++static struct rfcomm_dev *__rfcomm_dev_get(int id)
++{
++ struct rfcomm_dev *dev;
++ struct list_head *p;
++
++ list_for_each(p, &rfcomm_dev_list) {
++ dev = list_entry(p, struct rfcomm_dev, list);
++ if (dev->id == id)
++ return dev;
++ }
++
++ return NULL;
++}
++
++static inline struct rfcomm_dev *rfcomm_dev_get(int id)
++{
++ struct rfcomm_dev *dev;
++
++ read_lock(&rfcomm_dev_lock);
++
++ dev = __rfcomm_dev_get(id);
++ if (dev)
++ rfcomm_dev_hold(dev);
++
++ read_unlock(&rfcomm_dev_lock);
++
++ return dev;
++}
++
++static int rfcomm_dev_add(struct rfcomm_dev_req *req, struct rfcomm_dlc *dlc)
++{
++ struct rfcomm_dev *dev;
++ struct list_head *head = &rfcomm_dev_list, *p;
++ int err = 0;
++
++ BT_DBG("id %d channel %d", req->dev_id, req->channel);
++
++ dev = kmalloc(sizeof(struct rfcomm_dev), GFP_KERNEL);
++ if (!dev)
++ return -ENOMEM;
++ memset(dev, 0, sizeof(struct rfcomm_dev));
++
++ write_lock_bh(&rfcomm_dev_lock);
++
++ if (req->dev_id < 0) {
++ dev->id = 0;
++
++ list_for_each(p, &rfcomm_dev_list) {
++ if (list_entry(p, struct rfcomm_dev, list)->id != dev->id)
++ break;
++
++ dev->id++;
++ head = p;
++ }
++ } else {
++ dev->id = req->dev_id;
++
++ list_for_each(p, &rfcomm_dev_list) {
++ struct rfcomm_dev *entry = list_entry(p, struct rfcomm_dev, list);
++
++ if (entry->id == dev->id) {
++ err = -EADDRINUSE;
++ goto out;
++ }
++
++ if (entry->id > dev->id - 1)
++ break;
++
++ head = p;
++ }
++ }
++
++ if ((dev->id < 0) || (dev->id > RFCOMM_MAX_DEV - 1)) {
++ err = -ENFILE;
++ goto out;
++ }
++
++ sprintf(dev->name, "rfcomm%d", dev->id);
++
++ list_add(&dev->list, head);
++ atomic_set(&dev->refcnt, 1);
++
++ bacpy(&dev->src, &req->src);
++ bacpy(&dev->dst, &req->dst);
++ dev->channel = req->channel;
++
++ dev->flags = req->flags &
++ ((1 << RFCOMM_RELEASE_ONHUP) | (1 << RFCOMM_REUSE_DLC));
++
++ init_waitqueue_head(&dev->wait);
++ tasklet_init(&dev->wakeup_task, rfcomm_tty_wakeup, (unsigned long) dev);
++
++ rfcomm_dlc_lock(dlc);
++ dlc->data_ready = rfcomm_dev_data_ready;
++ dlc->state_change = rfcomm_dev_state_change;
++ dlc->modem_status = rfcomm_dev_modem_status;
++
++ dlc->owner = dev;
++ dev->dlc = dlc;
++ rfcomm_dlc_unlock(dlc);
++
++ MOD_INC_USE_COUNT;
++
++out:
++ write_unlock_bh(&rfcomm_dev_lock);
++
++ if (err) {
++ kfree(dev);
++ return err;
++ } else
++ return dev->id;
++}
++
++static void rfcomm_dev_del(struct rfcomm_dev *dev)
++{
++ BT_DBG("dev %p", dev);
++
++ write_lock_bh(&rfcomm_dev_lock);
++ list_del_init(&dev->list);
++ write_unlock_bh(&rfcomm_dev_lock);
++
++ rfcomm_dev_put(dev);
++}
++
++/* ---- Send buffer ---- */
++
++static inline unsigned int rfcomm_room(struct rfcomm_dlc *dlc)
++{
++ /* We can't let it be zero, because we don't get a callback
++ when tx_credits becomes nonzero, hence we'd never wake up */
++ return dlc->mtu * (dlc->tx_credits?:1);
++}
++
++static void rfcomm_wfree(struct sk_buff *skb)
++{
++ struct rfcomm_dev *dev = (void *) skb->sk;
++ atomic_sub(skb->truesize, &dev->wmem_alloc);
++ if (test_bit(RFCOMM_TTY_ATTACHED, &dev->flags))
++ tasklet_schedule(&dev->wakeup_task);
++ rfcomm_dev_put(dev);
++}
++
++static inline void rfcomm_set_owner_w(struct sk_buff *skb, struct rfcomm_dev *dev)
++{
++ rfcomm_dev_hold(dev);
++ atomic_add(skb->truesize, &dev->wmem_alloc);
++ skb->sk = (void *) dev;
++ skb->destructor = rfcomm_wfree;
++}
++
++static struct sk_buff *rfcomm_wmalloc(struct rfcomm_dev *dev, unsigned long size, int force, int priority)
++{
++ if (force || atomic_read(&dev->wmem_alloc) < rfcomm_room(dev->dlc)) {
++ struct sk_buff *skb = alloc_skb(size, priority);
++ if (skb) {
++ rfcomm_set_owner_w(skb, dev);
++ return skb;
++ }
++ }
++ return NULL;
++}
++
++/* ---- Device IOCTLs ---- */
++
++#define NOCAP_FLAGS ((1 << RFCOMM_REUSE_DLC) | (1 << RFCOMM_RELEASE_ONHUP))
++
++static int rfcomm_create_dev(struct sock *sk, unsigned long arg)
++{
++ struct rfcomm_dev_req req;
++ struct rfcomm_dlc *dlc;
++ int id;
++
++ if (copy_from_user(&req, (void *) arg, sizeof(req)))
++ return -EFAULT;
++
++ BT_DBG("sk %p dev_id %id flags 0x%x", sk, req.dev_id, req.flags);
++
++ if (req.flags != NOCAP_FLAGS && !capable(CAP_NET_ADMIN))
++ return -EPERM;
++
++ if (req.flags & (1 << RFCOMM_REUSE_DLC)) {
++ /* Socket must be connected */
++ if (sk->state != BT_CONNECTED)
++ return -EBADFD;
++
++ dlc = rfcomm_pi(sk)->dlc;
++ rfcomm_dlc_hold(dlc);
++ } else {
++ dlc = rfcomm_dlc_alloc(GFP_KERNEL);
++ if (!dlc)
++ return -ENOMEM;
++ }
++
++ id = rfcomm_dev_add(&req, dlc);
++ if (id < 0) {
++ rfcomm_dlc_put(dlc);
++ return id;
++ }
++
++ if (req.flags & (1 << RFCOMM_REUSE_DLC)) {
++ /* DLC is now used by device.
++ * Socket must be disconnected */
++ sk->state = BT_CLOSED;
++ }
++
++ return id;
++}
++
++static int rfcomm_release_dev(unsigned long arg)
++{
++ struct rfcomm_dev_req req;
++ struct rfcomm_dev *dev;
++
++ if (copy_from_user(&req, (void *) arg, sizeof(req)))
++ return -EFAULT;
++
++ BT_DBG("dev_id %id flags 0x%x", req.dev_id, req.flags);
++
++ if (!(dev = rfcomm_dev_get(req.dev_id)))
++ return -ENODEV;
++
++ if (dev->flags != NOCAP_FLAGS && !capable(CAP_NET_ADMIN)) {
++ rfcomm_dev_put(dev);
++ return -EPERM;
++ }
++
++ if (req.flags & (1 << RFCOMM_HANGUP_NOW))
++ rfcomm_dlc_close(dev->dlc, 0);
++
++ rfcomm_dev_del(dev);
++ rfcomm_dev_put(dev);
++ return 0;
++}
++
++static int rfcomm_get_dev_list(unsigned long arg)
++{
++ struct rfcomm_dev_list_req *dl;
++ struct rfcomm_dev_info *di;
++ struct list_head *p;
++ int n = 0, size, err;
++ u16 dev_num;
++
++ BT_DBG("");
++
++ if (get_user(dev_num, (u16 *) arg))
++ return -EFAULT;
++
++ if (!dev_num || dev_num > (PAGE_SIZE * 4) / sizeof(*di))
++ return -EINVAL;
++
++ size = sizeof(*dl) + dev_num * sizeof(*di);
++
++ if (!(dl = kmalloc(size, GFP_KERNEL)))
++ return -ENOMEM;
++
++ di = dl->dev_info;
++
++ read_lock_bh(&rfcomm_dev_lock);
++
++ list_for_each(p, &rfcomm_dev_list) {
++ struct rfcomm_dev *dev = list_entry(p, struct rfcomm_dev, list);
++ (di + n)->id = dev->id;
++ (di + n)->flags = dev->flags;
++ (di + n)->state = dev->dlc->state;
++ (di + n)->channel = dev->channel;
++ bacpy(&(di + n)->src, &dev->src);
++ bacpy(&(di + n)->dst, &dev->dst);
++ if (++n >= dev_num)
++ break;
++ }
++
++ read_unlock_bh(&rfcomm_dev_lock);
++
++ dl->dev_num = n;
++ size = sizeof(*dl) + n * sizeof(*di);
++
++ err = copy_to_user((void *) arg, dl, size);
++ kfree(dl);
++
++ return err ? -EFAULT : 0;
++}
++
++static int rfcomm_get_dev_info(unsigned long arg)
++{
++ struct rfcomm_dev *dev;
++ struct rfcomm_dev_info di;
++ int err = 0;
++
++ BT_DBG("");
++
++ if (copy_from_user(&di, (void *)arg, sizeof(di)))
++ return -EFAULT;
++
++ if (!(dev = rfcomm_dev_get(di.id)))
++ return -ENODEV;
++
++ di.flags = dev->flags;
++ di.channel = dev->channel;
++ di.state = dev->dlc->state;
++ bacpy(&di.src, &dev->src);
++ bacpy(&di.dst, &dev->dst);
++
++ if (copy_to_user((void *)arg, &di, sizeof(di)))
++ err = -EFAULT;
++
++ rfcomm_dev_put(dev);
++ return err;
++}
++
++int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, unsigned long arg)
++{
++ BT_DBG("cmd %d arg %ld", cmd, arg);
++
++ switch (cmd) {
++ case RFCOMMCREATEDEV:
++ return rfcomm_create_dev(sk, arg);
++
++ case RFCOMMRELEASEDEV:
++ return rfcomm_release_dev(arg);
++
++ case RFCOMMGETDEVLIST:
++ return rfcomm_get_dev_list(arg);
++
++ case RFCOMMGETDEVINFO:
++ return rfcomm_get_dev_info(arg);
++ }
++
++ return -EINVAL;
++}
++
++/* ---- DLC callbacks ---- */
++static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb)
++{
++ struct rfcomm_dev *dev = dlc->owner;
++ struct tty_struct *tty;
++
++ if (!dev || !(tty = dev->tty)) {
++ kfree_skb(skb);
++ return;
++ }
++
++ BT_DBG("dlc %p tty %p len %d", dlc, tty, skb->len);
++
++ if (test_bit(TTY_DONT_FLIP, &tty->flags)) {
++ register int i;
++ for (i = 0; i < skb->len; i++) {
++ if (tty->flip.count >= TTY_FLIPBUF_SIZE)
++ tty_flip_buffer_push(tty);
++
++ tty_insert_flip_char(tty, skb->data[i], 0);
++ }
++ tty_flip_buffer_push(tty);
++ } else
++ tty->ldisc.receive_buf(tty, skb->data, NULL, skb->len);
++
++ kfree_skb(skb);
++}
++
++static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err)
++{
++ struct rfcomm_dev *dev = dlc->owner;
++ if (!dev)
++ return;
++
++ BT_DBG("dlc %p dev %p err %d", dlc, dev, err);
++
++ dev->err = err;
++ wake_up_interruptible(&dev->wait);
++
++ if (dlc->state == BT_CLOSED) {
++ if (!dev->tty) {
++ if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags)) {
++ rfcomm_dev_hold(dev);
++ rfcomm_dev_del(dev);
++
++ /* We have to drop DLC lock here, otherwise
++ rfcomm_dev_put() will dead lock if it's
++ the last reference. */
++ rfcomm_dlc_unlock(dlc);
++ rfcomm_dev_put(dev);
++ rfcomm_dlc_lock(dlc);
++ }
++ } else
++ tty_hangup(dev->tty);
++ }
++}
++
++static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig)
++{
++ struct rfcomm_dev *dev = dlc->owner;
++ if (!dev)
++ return;
++
++ BT_DBG("dlc %p dev %p v24_sig 0x%02x", dlc, dev, v24_sig);
++
++ dev->modem_status =
++ ((v24_sig & RFCOMM_V24_RTC) ? (TIOCM_DSR | TIOCM_DTR) : 0) |
++ ((v24_sig & RFCOMM_V24_RTR) ? (TIOCM_RTS | TIOCM_CTS) : 0) |
++ ((v24_sig & RFCOMM_V24_IC) ? TIOCM_RI : 0) |
++ ((v24_sig & RFCOMM_V24_DV) ? TIOCM_CD : 0);
++}
++
++/* ---- TTY functions ---- */
++static void rfcomm_tty_wakeup(unsigned long arg)
++{
++ struct rfcomm_dev *dev = (void *) arg;
++ struct tty_struct *tty = dev->tty;
++ if (!tty)
++ return;
++
++ BT_DBG("dev %p tty %p", dev, tty);
++
++ if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags) && tty->ldisc.write_wakeup)
++ (tty->ldisc.write_wakeup)(tty);
++
++ wake_up_interruptible(&tty->write_wait);
++#ifdef SERIAL_HAVE_POLL_WAIT
++ wake_up_interruptible(&tty->poll_wait);
++#endif
++}
++
++static int rfcomm_tty_open(struct tty_struct *tty, struct file *filp)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct rfcomm_dev *dev;
++ struct rfcomm_dlc *dlc;
++ int err, id;
++
++ id = MINOR(tty->device) - tty->driver.minor_start;
++
++ BT_DBG("tty %p id %d", tty, id);
++
++ /* We don't leak this refcount. For reasons which are not entirely
++ clear, the TTY layer will call our ->close() method even if the
++ open fails. We decrease the refcount there, and decreasing it
++ here too would cause breakage. */
++ dev = rfcomm_dev_get(id);
++ if (!dev)
++ return -ENODEV;
++
++ BT_DBG("dev %p dst %s channel %d opened %d", dev, batostr(&dev->dst), dev->channel, dev->opened);
++
++ if (dev->opened++ != 0)
++ return 0;
++
++ dlc = dev->dlc;
++
++ /* Attach TTY and open DLC */
++
++ rfcomm_dlc_lock(dlc);
++ tty->driver_data = dev;
++ dev->tty = tty;
++ rfcomm_dlc_unlock(dlc);
++ set_bit(RFCOMM_TTY_ATTACHED, &dev->flags);
++
++ err = rfcomm_dlc_open(dlc, &dev->src, &dev->dst, dev->channel);
++ if (err < 0)
++ return err;
++
++ /* Wait for DLC to connect */
++ add_wait_queue(&dev->wait, &wait);
++ while (1) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (dlc->state == BT_CLOSED) {
++ err = -dev->err;
++ break;
++ }
++
++ if (dlc->state == BT_CONNECTED)
++ break;
++
++ if (signal_pending(current)) {
++ err = -EINTR;
++ break;
++ }
++
++ schedule();
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&dev->wait, &wait);
++
++ return err;
++}
++
++static void rfcomm_tty_close(struct tty_struct *tty, struct file *filp)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ if (!dev)
++ return;
++
++ BT_DBG("tty %p dev %p dlc %p opened %d", tty, dev, dev->dlc, dev->opened);
++
++ if (--dev->opened == 0) {
++ /* Close DLC and dettach TTY */
++ rfcomm_dlc_close(dev->dlc, 0);
++
++ clear_bit(RFCOMM_TTY_ATTACHED, &dev->flags);
++ tasklet_kill(&dev->wakeup_task);
++
++ rfcomm_dlc_lock(dev->dlc);
++ tty->driver_data = NULL;
++ dev->tty = NULL;
++ rfcomm_dlc_unlock(dev->dlc);
++ }
++
++ rfcomm_dev_put(dev);
++}
++
++static int rfcomm_tty_write(struct tty_struct *tty, int from_user, const unsigned char *buf, int count)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ struct rfcomm_dlc *dlc = dev->dlc;
++ struct sk_buff *skb;
++ int err = 0, sent = 0, size;
++
++ BT_DBG("tty %p from_user %d count %d", tty, from_user, count);
++
++ while (count) {
++ size = min_t(uint, count, dlc->mtu);
++
++ if (from_user)
++ skb = rfcomm_wmalloc(dev, size + RFCOMM_SKB_RESERVE, 0, GFP_KERNEL);
++ else
++ skb = rfcomm_wmalloc(dev, size + RFCOMM_SKB_RESERVE, 0, GFP_ATOMIC);
++
++ if (!skb)
++ break;
++
++ skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
++
++ if (from_user)
++ copy_from_user(skb_put(skb, size), buf + sent, size);
++ else
++ memcpy(skb_put(skb, size), buf + sent, size);
++
++ if ((err = rfcomm_dlc_send(dlc, skb)) < 0) {
++ kfree_skb(skb);
++ break;
++ }
++
++ sent += size;
++ count -= size;
++ }
++
++ return sent ? sent : err;
++}
++
++static void rfcomm_tty_put_char(struct tty_struct *tty, unsigned char ch)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ struct rfcomm_dlc *dlc = dev->dlc;
++ struct sk_buff *skb;
++
++ BT_DBG("tty %p char %x", tty, ch);
++
++ skb = rfcomm_wmalloc(dev, 1 + RFCOMM_SKB_RESERVE, 1, GFP_ATOMIC);
++
++ if (!skb)
++ return;
++
++ skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
++
++ *(char *)skb_put(skb, 1) = ch;
++
++ if ((rfcomm_dlc_send(dlc, skb)) < 0)
++ kfree_skb(skb);
++}
++
++static int rfcomm_tty_write_room(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ int room;
++
++ BT_DBG("tty %p", tty);
++
++ room = rfcomm_room(dev->dlc) - atomic_read(&dev->wmem_alloc);
++ if (room < 0)
++ room = 0;
++
++ return room;
++}
++
++static int rfcomm_tty_set_modem_status(uint cmd, struct rfcomm_dlc *dlc, uint status)
++{
++ u8 v24_sig, mask;
++
++ BT_DBG("dlc %p cmd 0x%02x", dlc, cmd);
++
++ if (cmd == TIOCMSET)
++ v24_sig = 0;
++ else
++ rfcomm_dlc_get_modem_status(dlc, &v24_sig);
++
++ mask = ((status & TIOCM_DSR) ? RFCOMM_V24_RTC : 0) |
++ ((status & TIOCM_DTR) ? RFCOMM_V24_RTC : 0) |
++ ((status & TIOCM_RTS) ? RFCOMM_V24_RTR : 0) |
++ ((status & TIOCM_CTS) ? RFCOMM_V24_RTR : 0) |
++ ((status & TIOCM_RI) ? RFCOMM_V24_IC : 0) |
++ ((status & TIOCM_CD) ? RFCOMM_V24_DV : 0);
++
++ if (cmd == TIOCMBIC)
++ v24_sig &= ~mask;
++ else
++ v24_sig |= mask;
++
++ rfcomm_dlc_set_modem_status(dlc, v24_sig);
++ return 0;
++}
++
++static int rfcomm_tty_ioctl(struct tty_struct *tty, struct file *filp, unsigned int cmd, unsigned long arg)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ struct rfcomm_dlc *dlc = dev->dlc;
++ uint status;
++ int err;
++
++ BT_DBG("tty %p cmd 0x%02x", tty, cmd);
++
++ switch (cmd) {
++ case TCGETS:
++ BT_DBG("TCGETS is not supported");
++ return -ENOIOCTLCMD;
++
++ case TCSETS:
++ BT_DBG("TCSETS is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCMGET:
++ BT_DBG("TIOCMGET");
++
++ return put_user(dev->modem_status, (unsigned int *)arg);
++
++ case TIOCMSET: /* Turns on and off the lines as specified by the mask */
++ case TIOCMBIS: /* Turns on the lines as specified by the mask */
++ case TIOCMBIC: /* Turns off the lines as specified by the mask */
++ if ((err = get_user(status, (unsigned int *)arg)))
++ return err;
++ return rfcomm_tty_set_modem_status(cmd, dlc, status);
++
++ case TIOCMIWAIT:
++ BT_DBG("TIOCMIWAIT");
++ break;
++
++ case TIOCGICOUNT:
++ BT_DBG("TIOCGICOUNT");
++ break;
++
++ case TIOCGSERIAL:
++ BT_ERR("TIOCGSERIAL is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCSSERIAL:
++ BT_ERR("TIOCSSERIAL is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCSERGSTRUCT:
++ BT_ERR("TIOCSERGSTRUCT is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCSERGETLSR:
++ BT_ERR("TIOCSERGETLSR is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCSERCONFIG:
++ BT_ERR("TIOCSERCONFIG is not supported");
++ return -ENOIOCTLCMD;
++
++ default:
++ return -ENOIOCTLCMD; /* ioctls which we must ignore */
++
++ }
++
++ return -ENOIOCTLCMD;
++}
++
++#define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
++
++static void rfcomm_tty_set_termios(struct tty_struct *tty, struct termios *old)
++{
++ BT_DBG("tty %p", tty);
++
++ if ((tty->termios->c_cflag == old->c_cflag) &&
++ (RELEVANT_IFLAG(tty->termios->c_iflag) == RELEVANT_IFLAG(old->c_iflag)))
++ return;
++
++ /* handle turning off CRTSCTS */
++ if ((old->c_cflag & CRTSCTS) && !(tty->termios->c_cflag & CRTSCTS)) {
++ BT_DBG("turning off CRTSCTS");
++ }
++}
++
++static void rfcomm_tty_throttle(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ rfcomm_dlc_throttle(dev->dlc);
++}
++
++static void rfcomm_tty_unthrottle(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ rfcomm_dlc_unthrottle(dev->dlc);
++}
++
++static int rfcomm_tty_chars_in_buffer(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ struct rfcomm_dlc *dlc = dev->dlc;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ if (skb_queue_len(&dlc->tx_queue))
++ return dlc->mtu;
++
++ return 0;
++}
++
++static void rfcomm_tty_flush_buffer(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ if (!dev)
++ return;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ skb_queue_purge(&dev->dlc->tx_queue);
++
++ if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags) && tty->ldisc.write_wakeup)
++ tty->ldisc.write_wakeup(tty);
++}
++
++static void rfcomm_tty_send_xchar(struct tty_struct *tty, char ch)
++{
++ BT_DBG("tty %p ch %c", tty, ch);
++}
++
++static void rfcomm_tty_wait_until_sent(struct tty_struct *tty, int timeout)
++{
++ BT_DBG("tty %p timeout %d", tty, timeout);
++}
++
++static void rfcomm_tty_hangup(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ if (!dev)
++ return;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ rfcomm_tty_flush_buffer(tty);
++
++ if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags))
++ rfcomm_dev_del(dev);
++}
++
++static int rfcomm_tty_read_proc(char *buf, char **start, off_t offset, int len, int *eof, void *unused)
++{
++ return 0;
++}
++
++/* ---- TTY structure ---- */
++static int rfcomm_tty_refcount; /* If we manage several devices */
++
++static struct tty_struct *rfcomm_tty_table[RFCOMM_TTY_PORTS];
++static struct termios *rfcomm_tty_termios[RFCOMM_TTY_PORTS];
++static struct termios *rfcomm_tty_termios_locked[RFCOMM_TTY_PORTS];
++
++static struct tty_driver rfcomm_tty_driver = {
++ magic: TTY_DRIVER_MAGIC,
++ driver_name: "rfcomm",
++#ifdef CONFIG_DEVFS_FS
++ name: "bluetooth/rfcomm/%d",
++#else
++ name: "rfcomm",
++#endif
++ major: RFCOMM_TTY_MAJOR,
++ minor_start: RFCOMM_TTY_MINOR,
++ num: RFCOMM_TTY_PORTS,
++ type: TTY_DRIVER_TYPE_SERIAL,
++ subtype: SERIAL_TYPE_NORMAL,
++ flags: TTY_DRIVER_REAL_RAW,
++
++ refcount: &rfcomm_tty_refcount,
++ table: rfcomm_tty_table,
++ termios: rfcomm_tty_termios,
++ termios_locked: rfcomm_tty_termios_locked,
++
++ open: rfcomm_tty_open,
++ close: rfcomm_tty_close,
++ put_char: rfcomm_tty_put_char,
++ write: rfcomm_tty_write,
++ write_room: rfcomm_tty_write_room,
++ chars_in_buffer: rfcomm_tty_chars_in_buffer,
++ flush_buffer: rfcomm_tty_flush_buffer,
++ ioctl: rfcomm_tty_ioctl,
++ throttle: rfcomm_tty_throttle,
++ unthrottle: rfcomm_tty_unthrottle,
++ set_termios: rfcomm_tty_set_termios,
++ send_xchar: rfcomm_tty_send_xchar,
++ stop: NULL,
++ start: NULL,
++ hangup: rfcomm_tty_hangup,
++ wait_until_sent: rfcomm_tty_wait_until_sent,
++ read_proc: rfcomm_tty_read_proc,
++};
++
++int rfcomm_init_ttys(void)
++{
++ int i;
++
++ /* Initalize our global data */
++ for (i = 0; i < RFCOMM_TTY_PORTS; i++)
++ rfcomm_tty_table[i] = NULL;
++
++ /* Register the TTY driver */
++ rfcomm_tty_driver.init_termios = tty_std_termios;
++ rfcomm_tty_driver.init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
++ rfcomm_tty_driver.flags = TTY_DRIVER_REAL_RAW;
++
++ if (tty_register_driver(&rfcomm_tty_driver)) {
++ BT_ERR("Can't register RFCOMM TTY driver");
++ return -1;
++ }
++
++ return 0;
++}
++
++void rfcomm_cleanup_ttys(void)
++{
++ tty_unregister_driver(&rfcomm_tty_driver);
++ return;
++}
+diff -urN linux-2.4.18/net/bluetooth/sco.c linux-2.4.18-mh15/net/bluetooth/sco.c
+--- linux-2.4.18/net/bluetooth/sco.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18-mh15/net/bluetooth/sco.c 2004-08-01 16:26:23.000000000 +0200
+@@ -0,0 +1,1019 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * BlueZ SCO sockets.
++ *
++ * $Id: sco.c,v 1.4 2002/07/22 20:32:54 maxk Exp $
++ */
++#define VERSION "0.3"
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/init.h>
++#include <linux/skbuff.h>
++#include <linux/interrupt.h>
++#include <linux/socket.h>
++#include <linux/skbuff.h>
++#include <linux/proc_fs.h>
++#include <linux/list.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include <net/bluetooth/sco.h>
++
++#ifndef SCO_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
++
++static struct proto_ops sco_sock_ops;
++
++static struct bluez_sock_list sco_sk_list = {
++ lock: RW_LOCK_UNLOCKED
++};
++
++static inline int sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent);
++static void sco_chan_del(struct sock *sk, int err);
++static inline struct sock * sco_chan_get(struct sco_conn *conn);
++
++static int sco_conn_del(struct hci_conn *conn, int err);
++
++static void sco_sock_close(struct sock *sk);
++static void sco_sock_kill(struct sock *sk);
++
++/* ----- SCO timers ------ */
++static void sco_sock_timeout(unsigned long arg)
++{
++ struct sock *sk = (struct sock *) arg;
++
++ BT_DBG("sock %p state %d", sk, sk->state);
++
++ bh_lock_sock(sk);
++ sk->err = ETIMEDOUT;
++ sk->state_change(sk);
++ bh_unlock_sock(sk);
++
++ sco_sock_kill(sk);
++ sock_put(sk);
++}
++
++static void sco_sock_set_timer(struct sock *sk, long timeout)
++{
++ BT_DBG("sock %p state %d timeout %ld", sk, sk->state, timeout);
++
++ if (!mod_timer(&sk->timer, jiffies + timeout))
++ sock_hold(sk);
++}
++
++static void sco_sock_clear_timer(struct sock *sk)
++{
++ BT_DBG("sock %p state %d", sk, sk->state);
++
++ if (timer_pending(&sk->timer) && del_timer(&sk->timer))
++ __sock_put(sk);
++}
++
++static void sco_sock_init_timer(struct sock *sk)
++{
++ init_timer(&sk->timer);
++ sk->timer.function = sco_sock_timeout;
++ sk->timer.data = (unsigned long)sk;
++}
++
++/* -------- SCO connections --------- */
++static struct sco_conn *sco_conn_add(struct hci_conn *hcon, __u8 status)
++{
++ struct hci_dev *hdev = hcon->hdev;
++ struct sco_conn *conn;
++
++ if ((conn = hcon->sco_data))
++ return conn;
++
++ if (status)
++ return conn;
++
++ if (!(conn = kmalloc(sizeof(struct sco_conn), GFP_ATOMIC)))
++ return NULL;
++ memset(conn, 0, sizeof(struct sco_conn));
++
++ spin_lock_init(&conn->lock);
++
++ hcon->sco_data = conn;
++ conn->hcon = hcon;
++
++ conn->src = &hdev->bdaddr;
++ conn->dst = &hcon->dst;
++
++ if (hdev->sco_mtu > 0)
++ conn->mtu = hdev->sco_mtu;
++ else
++ conn->mtu = 60;
++
++ BT_DBG("hcon %p conn %p", hcon, conn);
++
++ MOD_INC_USE_COUNT;
++ return conn;
++}
++
++static int sco_conn_del(struct hci_conn *hcon, int err)
++{
++ struct sco_conn *conn;
++ struct sock *sk;
++
++ if (!(conn = hcon->sco_data))
++ return 0;
++
++ BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
++
++ /* Kill socket */
++ if ((sk = sco_chan_get(conn))) {
++ bh_lock_sock(sk);
++ sco_sock_clear_timer(sk);
++ sco_chan_del(sk, err);
++ bh_unlock_sock(sk);
++ sco_sock_kill(sk);
++ }
++
++ hcon->sco_data = NULL;
++ kfree(conn);
++
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++int sco_connect(struct sock *sk)
++{
++ bdaddr_t *src = &bluez_pi(sk)->src;
++ bdaddr_t *dst = &bluez_pi(sk)->dst;
++ struct sco_conn *conn;
++ struct hci_conn *hcon;
++ struct hci_dev *hdev;
++ int err = 0;
++
++ BT_DBG("%s -> %s", batostr(src), batostr(dst));
++
++ if (!(hdev = hci_get_route(dst, src)))
++ return -EHOSTUNREACH;
++
++ hci_dev_lock_bh(hdev);
++
++ err = -ENOMEM;
++
++ hcon = hci_connect(hdev, SCO_LINK, dst);
++ if (!hcon)
++ goto done;
++
++ conn = sco_conn_add(hcon, 0);
++ if (!conn) {
++ hci_conn_put(hcon);
++ goto done;
++ }
++
++ /* Update source addr of the socket */
++ bacpy(src, conn->src);
++
++ err = sco_chan_add(conn, sk, NULL);
++ if (err)
++ goto done;
++
++ if (hcon->state == BT_CONNECTED) {
++ sco_sock_clear_timer(sk);
++ sk->state = BT_CONNECTED;
++ } else {
++ sk->state = BT_CONNECT;
++ sco_sock_set_timer(sk, sk->sndtimeo);
++ }
++done:
++ hci_dev_unlock_bh(hdev);
++ hci_dev_put(hdev);
++ return err;
++}
++
++static inline int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
++{
++ struct sco_conn *conn = sco_pi(sk)->conn;
++ struct sk_buff *skb;
++ int err, count;
++
++ /* Check outgoing MTU */
++ if (len > conn->mtu)
++ return -EINVAL;
++
++ BT_DBG("sk %p len %d", sk, len);
++
++ count = MIN(conn->mtu, len);
++ if (!(skb = bluez_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err)))
++ return err;
++
++ if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count)) {
++ err = -EFAULT;
++ goto fail;
++ }
++
++ if ((err = hci_send_sco(conn->hcon, skb)) < 0)
++ goto fail;
++
++ return count;
++
++fail:
++ kfree_skb(skb);
++ return err;
++}
++
++static inline void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
++{
++ struct sock *sk = sco_chan_get(conn);
++
++ if (!sk)
++ goto drop;
++
++ BT_DBG("sk %p len %d", sk, skb->len);
++
++ if (sk->state != BT_CONNECTED)
++ goto drop;
++
++ if (!sock_queue_rcv_skb(sk, skb))
++ return;
++
++drop:
++ kfree_skb(skb);
++ return;
++}
++
++/* -------- Socket interface ---------- */
++static struct sock *__sco_get_sock_by_addr(bdaddr_t *ba)
++{
++ struct sock *sk;
++
++ for (sk = sco_sk_list.head; sk; sk = sk->next) {
++ if (!bacmp(&bluez_pi(sk)->src, ba))
++ break;
++ }
++
++ return sk;
++}
++
++/* Find socket listening on source bdaddr.
++ * Returns closest match.
++ */
++static struct sock *sco_get_sock_listen(bdaddr_t *src)
++{
++ struct sock *sk, *sk1 = NULL;
++
++ read_lock(&sco_sk_list.lock);
++
++ for (sk = sco_sk_list.head; sk; sk = sk->next) {
++ if (sk->state != BT_LISTEN)
++ continue;
++
++ /* Exact match. */
++ if (!bacmp(&bluez_pi(sk)->src, src))
++ break;
++
++ /* Closest match */
++ if (!bacmp(&bluez_pi(sk)->src, BDADDR_ANY))
++ sk1 = sk;
++ }
++
++ read_unlock(&sco_sk_list.lock);
++
++ return sk ? sk : sk1;
++}
++
++static void sco_sock_destruct(struct sock *sk)
++{
++ BT_DBG("sk %p", sk);
++
++ skb_queue_purge(&sk->receive_queue);
++ skb_queue_purge(&sk->write_queue);
++
++ MOD_DEC_USE_COUNT;
++}
++
++static void sco_sock_cleanup_listen(struct sock *parent)
++{
++ struct sock *sk;
++
++ BT_DBG("parent %p", parent);
++
++ /* Close not yet accepted channels */
++ while ((sk = bluez_accept_dequeue(parent, NULL))) {
++ sco_sock_close(sk);
++ sco_sock_kill(sk);
++ }
++
++ parent->state = BT_CLOSED;
++ parent->zapped = 1;
++}
++
++/* Kill socket (only if zapped and orphan)
++ * Must be called on unlocked socket.
++ */
++static void sco_sock_kill(struct sock *sk)
++{
++ if (!sk->zapped || sk->socket)
++ return;
++
++ BT_DBG("sk %p state %d", sk, sk->state);
++
++ /* Kill poor orphan */
++ bluez_sock_unlink(&sco_sk_list, sk);
++ sk->dead = 1;
++ sock_put(sk);
++}
++
++/* Close socket.
++ * Must be called on unlocked socket.
++ */
++static void sco_sock_close(struct sock *sk)
++{
++ struct sco_conn *conn;
++
++ sco_sock_clear_timer(sk);
++
++ lock_sock(sk);
++
++ conn = sco_pi(sk)->conn;
++
++ BT_DBG("sk %p state %d conn %p socket %p", sk, sk->state, conn, sk->socket);
++
++ switch (sk->state) {
++ case BT_LISTEN:
++ sco_sock_cleanup_listen(sk);
++ break;
++
++ case BT_CONNECTED:
++ case BT_CONFIG:
++ case BT_CONNECT:
++ case BT_DISCONN:
++ sco_chan_del(sk, ECONNRESET);
++ break;
++
++ default:
++ sk->zapped = 1;
++ break;
++ };
++
++ release_sock(sk);
++}
++
++static void sco_sock_init(struct sock *sk, struct sock *parent)
++{
++ BT_DBG("sk %p", sk);
++
++ if (parent)
++ sk->type = parent->type;
++}
++
++static struct sock *sco_sock_alloc(struct socket *sock, int proto, int prio)
++{
++ struct sock *sk;
++
++ if (!(sk = sk_alloc(PF_BLUETOOTH, prio, 1)))
++ return NULL;
++
++ bluez_sock_init(sock, sk);
++
++ sk->zapped = 0;
++
++ sk->destruct = sco_sock_destruct;
++ sk->sndtimeo = SCO_CONN_TIMEOUT;
++
++ sk->protocol = proto;
++ sk->state = BT_OPEN;
++
++ sco_sock_init_timer(sk);
++
++ bluez_sock_link(&sco_sk_list, sk);
++
++ MOD_INC_USE_COUNT;
++ return sk;
++}
++
++static int sco_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ sock->state = SS_UNCONNECTED;
++
++ if (sock->type != SOCK_SEQPACKET)
++ return -ESOCKTNOSUPPORT;
++
++ sock->ops = &sco_sock_ops;
++
++ if (!(sk = sco_sock_alloc(sock, protocol, GFP_KERNEL)))
++ return -ENOMEM;
++
++ sco_sock_init(sk, NULL);
++ return 0;
++}
++
++static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
++{
++ struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
++ struct sock *sk = sock->sk;
++ bdaddr_t *src = &sa->sco_bdaddr;
++ int err = 0;
++
++ BT_DBG("sk %p %s", sk, batostr(&sa->sco_bdaddr));
++
++ if (!addr || addr->sa_family != AF_BLUETOOTH)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_OPEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ write_lock_bh(&sco_sk_list.lock);
++
++ if (bacmp(src, BDADDR_ANY) && __sco_get_sock_by_addr(src)) {
++ err = -EADDRINUSE;
++ } else {
++ /* Save source address */
++ bacpy(&bluez_pi(sk)->src, &sa->sco_bdaddr);
++ sk->state = BT_BOUND;
++ }
++
++ write_unlock_bh(&sco_sk_list.lock);
++
++done:
++ release_sock(sk);
++
++ return err;
++}
++
++static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
++{
++ struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++
++ BT_DBG("sk %p", sk);
++
++ if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_sco))
++ return -EINVAL;
++
++ if (sk->state != BT_OPEN && sk->state != BT_BOUND)
++ return -EBADFD;
++
++ if (sk->type != SOCK_SEQPACKET)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ /* Set destination address and psm */
++ bacpy(&bluez_pi(sk)->dst, &sa->sco_bdaddr);
++
++ if ((err = sco_connect(sk)))
++ goto done;
++
++ err = bluez_sock_wait_state(sk, BT_CONNECTED,
++ sock_sndtimeo(sk, flags & O_NONBLOCK));
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++int sco_sock_listen(struct socket *sock, int backlog)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p backlog %d", sk, backlog);
++
++ lock_sock(sk);
++
++ if (sk->state != BT_BOUND || sock->type != SOCK_SEQPACKET) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ sk->max_ack_backlog = backlog;
++ sk->ack_backlog = 0;
++ sk->state = BT_LISTEN;
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++int sco_sock_accept(struct socket *sock, struct socket *newsock, int flags)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct sock *sk = sock->sk, *ch;
++ long timeo;
++ int err = 0;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
++
++ BT_DBG("sk %p timeo %ld", sk, timeo);
++
++ /* Wait for an incoming connection. (wake-one). */
++ add_wait_queue_exclusive(sk->sleep, &wait);
++ while (!(ch = bluez_accept_dequeue(sk, newsock))) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ if (!timeo) {
++ err = -EAGAIN;
++ break;
++ }
++
++ release_sock(sk);
++ timeo = schedule_timeout(timeo);
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ break;
++ }
++
++ if (signal_pending(current)) {
++ err = sock_intr_errno(timeo);
++ break;
++ }
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++
++ if (err)
++ goto done;
++
++ newsock->state = SS_CONNECTED;
++
++ BT_DBG("new socket %p", ch);
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++static int sco_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
++{
++ struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ addr->sa_family = AF_BLUETOOTH;
++ *len = sizeof(struct sockaddr_sco);
++
++ if (peer)
++ bacpy(&sa->sco_bdaddr, &bluez_pi(sk)->dst);
++ else
++ bacpy(&sa->sco_bdaddr, &bluez_pi(sk)->src);
++
++ return 0;
++}
++
++static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct scm_cookie *scm)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (sk->err)
++ return sock_error(sk);
++
++ if (msg->msg_flags & MSG_OOB)
++ return -EOPNOTSUPP;
++
++ lock_sock(sk);
++
++ if (sk->state == BT_CONNECTED)
++ err = sco_send_frame(sk, msg, len);
++ else
++ err = -ENOTCONN;
++
++ release_sock(sk);
++ return err;
++}
++
++int sco_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, int optlen)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ lock_sock(sk);
++
++ switch (optname) {
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ };
++
++ release_sock(sk);
++ return err;
++}
++
++int sco_sock_getsockopt(struct socket *sock, int level, int optname, char *optval, int *optlen)
++{
++ struct sock *sk = sock->sk;
++ struct sco_options opts;
++ struct sco_conninfo cinfo;
++ int len, err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ if (get_user(len, optlen))
++ return -EFAULT;
++
++ lock_sock(sk);
++
++ switch (optname) {
++ case SCO_OPTIONS:
++ if (sk->state != BT_CONNECTED) {
++ err = -ENOTCONN;
++ break;
++ }
++
++ opts.mtu = sco_pi(sk)->conn->mtu;
++
++ BT_DBG("mtu %d", opts.mtu);
++
++ len = MIN(len, sizeof(opts));
++ if (copy_to_user(optval, (char *)&opts, len))
++ err = -EFAULT;
++
++ break;
++
++ case SCO_CONNINFO:
++ if (sk->state != BT_CONNECTED) {
++ err = -ENOTCONN;
++ break;
++ }
++
++ cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
++
++ len = MIN(len, sizeof(cinfo));
++ if (copy_to_user(optval, (char *)&cinfo, len))
++ err = -EFAULT;
++
++ break;
++
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ };
++
++ release_sock(sk);
++ return err;
++}
++
++static int sco_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (!sk)
++ return 0;
++
++ sco_sock_close(sk);
++ if (sk->linger) {
++ lock_sock(sk);
++ err = bluez_sock_wait_state(sk, BT_CLOSED, sk->lingertime);
++ release_sock(sk);
++ }
++
++ sock_orphan(sk);
++ sco_sock_kill(sk);
++ return err;
++}
++
++static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
++{
++ BT_DBG("conn %p", conn);
++
++ sco_pi(sk)->conn = conn;
++ conn->sk = sk;
++
++ if (parent)
++ bluez_accept_enqueue(parent, sk);
++}
++
++static inline int sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
++{
++ int err = 0;
++
++ sco_conn_lock(conn);
++ if (conn->sk) {
++ err = -EBUSY;
++ } else {
++ __sco_chan_add(conn, sk, parent);
++ }
++ sco_conn_unlock(conn);
++ return err;
++}
++
++static inline struct sock * sco_chan_get(struct sco_conn *conn)
++{
++ struct sock *sk = NULL;
++ sco_conn_lock(conn);
++ sk = conn->sk;
++ sco_conn_unlock(conn);
++ return sk;
++}
++
++/* Delete channel.
++ * Must be called on the locked socket. */
++static void sco_chan_del(struct sock *sk, int err)
++{
++ struct sco_conn *conn;
++
++ conn = sco_pi(sk)->conn;
++
++ BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
++
++ if (conn) {
++ sco_conn_lock(conn);
++ conn->sk = NULL;
++ sco_pi(sk)->conn = NULL;
++ sco_conn_unlock(conn);
++ hci_conn_put(conn->hcon);
++ }
++
++ sk->state = BT_CLOSED;
++ sk->err = err;
++ sk->state_change(sk);
++
++ sk->zapped = 1;
++}
++
++static void sco_conn_ready(struct sco_conn *conn)
++{
++ struct sock *parent, *sk;
++
++ BT_DBG("conn %p", conn);
++
++ sco_conn_lock(conn);
++
++ if ((sk = conn->sk)) {
++ sco_sock_clear_timer(sk);
++ bh_lock_sock(sk);
++ sk->state = BT_CONNECTED;
++ sk->state_change(sk);
++ bh_unlock_sock(sk);
++ } else {
++ parent = sco_get_sock_listen(conn->src);
++ if (!parent)
++ goto done;
++
++ bh_lock_sock(parent);
++
++ sk = sco_sock_alloc(NULL, BTPROTO_SCO, GFP_ATOMIC);
++ if (!sk) {
++ bh_unlock_sock(parent);
++ goto done;
++ }
++
++ sco_sock_init(sk, parent);
++
++ bacpy(&bluez_pi(sk)->src, conn->src);
++ bacpy(&bluez_pi(sk)->dst, conn->dst);
++
++ hci_conn_hold(conn->hcon);
++ __sco_chan_add(conn, sk, parent);
++
++ sk->state = BT_CONNECTED;
++
++ /* Wake up parent */
++ parent->data_ready(parent, 1);
++
++ bh_unlock_sock(parent);
++ }
++
++done:
++ sco_conn_unlock(conn);
++}
++
++/* ----- SCO interface with lower layer (HCI) ----- */
++int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
++{
++ BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
++
++ /* Always accept connection */
++ return HCI_LM_ACCEPT;
++}
++
++int sco_connect_cfm(struct hci_conn *hcon, __u8 status)
++{
++ BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
++
++ if (hcon->type != SCO_LINK)
++ return 0;
++
++ if (!status) {
++ struct sco_conn *conn;
++
++ conn = sco_conn_add(hcon, status);
++ if (conn)
++ sco_conn_ready(conn);
++ } else
++ sco_conn_del(hcon, bterr(status));
++
++ return 0;
++}
++
++int sco_disconn_ind(struct hci_conn *hcon, __u8 reason)
++{
++ BT_DBG("hcon %p reason %d", hcon, reason);
++
++ if (hcon->type != SCO_LINK)
++ return 0;
++
++ sco_conn_del(hcon, bterr(reason));
++ return 0;
++}
++
++int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
++{
++ struct sco_conn *conn = hcon->sco_data;
++
++ if (!conn)
++ goto drop;
++
++ BT_DBG("conn %p len %d", conn, skb->len);
++
++ if (skb->len) {
++ sco_recv_frame(conn, skb);
++ return 0;
++ }
++
++drop:
++ kfree_skb(skb);
++ return 0;
++}
++
++/* ----- Proc fs support ------ */
++static int sco_sock_dump(char *buf, struct bluez_sock_list *list)
++{
++ struct sco_pinfo *pi;
++ struct sock *sk;
++ char *ptr = buf;
++
++ write_lock_bh(&list->lock);
++
++ for (sk = list->head; sk; sk = sk->next) {
++ pi = sco_pi(sk);
++ ptr += sprintf(ptr, "%s %s %d\n",
++ batostr(&bluez_pi(sk)->src), batostr(&bluez_pi(sk)->dst),
++ sk->state);
++ }
++
++ write_unlock_bh(&list->lock);
++
++ ptr += sprintf(ptr, "\n");
++
++ return ptr - buf;
++}
++
++static int sco_read_proc(char *buf, char **start, off_t offset, int count, int *eof, void *priv)
++{
++ char *ptr = buf;
++ int len;
++
++ BT_DBG("count %d, offset %ld", count, offset);
++
++ ptr += sco_sock_dump(ptr, &sco_sk_list);
++ len = ptr - buf;
++
++ if (len <= count + offset)
++ *eof = 1;
++
++ *start = buf + offset;
++ len -= offset;
++
++ if (len > count)
++ len = count;
++ if (len < 0)
++ len = 0;
++
++ return len;
++}
++
++static struct proto_ops sco_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: sco_sock_release,
++ bind: sco_sock_bind,
++ connect: sco_sock_connect,
++ listen: sco_sock_listen,
++ accept: sco_sock_accept,
++ getname: sco_sock_getname,
++ sendmsg: sco_sock_sendmsg,
++ recvmsg: bluez_sock_recvmsg,
++ poll: bluez_sock_poll,
++ socketpair: sock_no_socketpair,
++ ioctl: sock_no_ioctl,
++ shutdown: sock_no_shutdown,
++ setsockopt: sco_sock_setsockopt,
++ getsockopt: sco_sock_getsockopt,
++ mmap: sock_no_mmap
++};
++
++static struct net_proto_family sco_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: sco_sock_create
++};
++
++static struct hci_proto sco_hci_proto = {
++ name: "SCO",
++ id: HCI_PROTO_SCO,
++ connect_ind: sco_connect_ind,
++ connect_cfm: sco_connect_cfm,
++ disconn_ind: sco_disconn_ind,
++ recv_scodata: sco_recv_scodata,
++};
++
++int __init sco_init(void)
++{
++ int err;
++
++ if ((err = bluez_sock_register(BTPROTO_SCO, &sco_sock_family_ops))) {
++ BT_ERR("Can't register SCO socket layer");
++ return err;
++ }
++
++ if ((err = hci_register_proto(&sco_hci_proto))) {
++ BT_ERR("Can't register SCO protocol");
++ return err;
++ }
++
++ create_proc_read_entry("bluetooth/sco", 0, 0, sco_read_proc, NULL);
++
++ BT_INFO("BlueZ SCO ver %s Copyright (C) 2000,2001 Qualcomm Inc", VERSION);
++ BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
++ return 0;
++}
++
++void sco_cleanup(void)
++{
++ int err;
++
++ remove_proc_entry("bluetooth/sco", NULL);
++
++ /* Unregister socket, protocol and notifier */
++ if ((err = bluez_sock_unregister(BTPROTO_SCO)))
++ BT_ERR("Can't unregister SCO socket layer %d", err);
++
++ if ((err = hci_unregister_proto(&sco_hci_proto)))
++ BT_ERR("Can't unregister SCO protocol %d", err);
++}
++
++module_init(sco_init);
++module_exit(sco_cleanup);
++
++MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
++MODULE_DESCRIPTION("BlueZ SCO ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/syms.c linux-2.4.18-mh15/net/bluetooth/syms.c
+--- linux-2.4.18/net/bluetooth/syms.c 2001-09-07 18:28:38.000000000 +0200
++++ linux-2.4.18-mh15/net/bluetooth/syms.c 2004-08-01 16:26:23.000000000 +0200
+@@ -25,7 +25,7 @@
+ /*
+ * BlueZ symbols.
+ *
+- * $Id: syms.c,v 1.1 2001/07/12 19:31:24 maxk Exp $
++ * $Id: syms.c,v 1.1 2002/03/08 21:06:59 maxk Exp $
+ */
+
+ #include <linux/config.h>
+@@ -39,25 +39,28 @@
+ #include <linux/socket.h>
+
+ #include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+ #include <net/bluetooth/hci_core.h>
+
+ /* HCI Core */
+ EXPORT_SYMBOL(hci_register_dev);
+ EXPORT_SYMBOL(hci_unregister_dev);
++EXPORT_SYMBOL(hci_suspend_dev);
++EXPORT_SYMBOL(hci_resume_dev);
++
+ EXPORT_SYMBOL(hci_register_proto);
+ EXPORT_SYMBOL(hci_unregister_proto);
+-EXPORT_SYMBOL(hci_register_notifier);
+-EXPORT_SYMBOL(hci_unregister_notifier);
+
++EXPORT_SYMBOL(hci_get_route);
+ EXPORT_SYMBOL(hci_connect);
+-EXPORT_SYMBOL(hci_disconnect);
+ EXPORT_SYMBOL(hci_dev_get);
++EXPORT_SYMBOL(hci_conn_auth);
++EXPORT_SYMBOL(hci_conn_encrypt);
+
+ EXPORT_SYMBOL(hci_recv_frame);
+ EXPORT_SYMBOL(hci_send_acl);
+ EXPORT_SYMBOL(hci_send_sco);
+-EXPORT_SYMBOL(hci_send_raw);
++EXPORT_SYMBOL(hci_send_cmd);
++EXPORT_SYMBOL(hci_si_event);
+
+ /* BlueZ lib */
+ EXPORT_SYMBOL(bluez_dump);
+@@ -68,5 +71,11 @@
+ /* BlueZ sockets */
+ EXPORT_SYMBOL(bluez_sock_register);
+ EXPORT_SYMBOL(bluez_sock_unregister);
++EXPORT_SYMBOL(bluez_sock_init);
+ EXPORT_SYMBOL(bluez_sock_link);
+ EXPORT_SYMBOL(bluez_sock_unlink);
++EXPORT_SYMBOL(bluez_sock_recvmsg);
++EXPORT_SYMBOL(bluez_sock_poll);
++EXPORT_SYMBOL(bluez_accept_enqueue);
++EXPORT_SYMBOL(bluez_accept_dequeue);
++EXPORT_SYMBOL(bluez_sock_wait_state);
+diff -urN linux-2.4.18/net/netsyms.c linux-2.4.18-mh15/net/netsyms.c
+--- linux-2.4.18/net/netsyms.c 2002-02-25 20:38:14.000000000 +0100
++++ linux-2.4.18-mh15/net/netsyms.c 2004-08-01 16:26:23.000000000 +0200
+@@ -159,6 +159,7 @@
+ EXPORT_SYMBOL(put_cmsg);
+ EXPORT_SYMBOL(sock_kmalloc);
+ EXPORT_SYMBOL(sock_kfree_s);
++EXPORT_SYMBOL(sockfd_lookup);
+
+ #ifdef CONFIG_FILTER
+ EXPORT_SYMBOL(sk_run_filter);
diff --git a/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/bluetooth-patch-2.4.18-mh9.diff b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/bluetooth-patch-2.4.18-mh9.diff
new file mode 100644
index 0000000000..38e7e24dab
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/bluetooth-patch-2.4.18-mh9.diff
@@ -0,0 +1,30831 @@
+diff -urN linux-2.4.18/CREDITS linux-2.4.18-mh9/CREDITS
+--- linux-2.4.18/CREDITS Mon Feb 25 20:37:50 2002
++++ linux-2.4.18-mh9/CREDITS Mon Aug 25 18:38:09 2003
+@@ -1317,6 +1317,14 @@
+ S: Provo, Utah 84606-5607
+ S: USA
+
++N: Marcel Holtmann
++E: marcel@holtmann.org
++W: http://www.holtmann.org
++D: Author and maintainer of the various Bluetooth HCI drivers
++D: Author and maintainer of the CAPI message transport protocol driver
++D: Various other Bluetooth related patches, cleanups and fixes
++S: Germany
++
+ N: Rob W. W. Hooft
+ E: hooft@EMBL-Heidelberg.DE
+ D: Shared libs for graphics-tools and for the f2c compiler
+diff -urN linux-2.4.18/Documentation/Configure.help linux-2.4.18-mh9/Documentation/Configure.help
+--- linux-2.4.18/Documentation/Configure.help Mon Feb 25 20:37:51 2002
++++ linux-2.4.18-mh9/Documentation/Configure.help Mon Aug 25 18:38:10 2003
+@@ -2824,14 +2824,6 @@
+
+ If unsure, say N.
+
+-HCI EMU (virtual device) driver
+-CONFIG_BLUEZ_HCIEMU
+- Bluetooth Virtual HCI device driver.
+- This driver is required if you want to use HCI Emulation software.
+-
+- Say Y here to compile support for Virtual HCI devices into the
+- kernel or say M to compile it as module (hci_usb.o).
+-
+ # Choice: alphatype
+ Alpha system type
+ CONFIG_ALPHA_GENERIC
+@@ -11037,6 +11029,12 @@
+
+ If unsure, say N.
+
++Hotplug firmware loading support (EXPERIMENTAL)
++CONFIG_FW_LOADER
++ This option is provided for the case where no in-kernel-tree modules require
++ hotplug firmware loading support, but a module built outside the kernel tree
++ does.
++
+ Use PCI shared memory for NIC registers
+ CONFIG_TULIP_MMIO
+ Use PCI shared memory for the NIC registers, rather than going through
+@@ -19870,11 +19868,15 @@
+ Bluetooth can be found at <http://www.bluetooth.com/>.
+
+ Linux Bluetooth subsystem consist of several layers:
+- HCI Core (device and connection manager, scheduler)
++ BlueZ Core (HCI device and connection manager, scheduler)
+ HCI Device drivers (interface to the hardware)
+ L2CAP Module (L2CAP protocol)
++ SCO Module (SCO links)
++ RFCOMM Module (RFCOMM protocol)
++ BNEP Module (BNEP protocol)
++ CMTP Module (CMTP protocol)
+
+- Say Y here to enable Linux Bluetooth support and to build HCI Core
++ Say Y here to enable Linux Bluetooth support and to build BlueZ Core
+ layer.
+
+ To use Linux Bluetooth subsystem, you will need several user-space
+@@ -19882,7 +19884,7 @@
+ Bluetooth kernel modules are provided in the BlueZ package.
+ For more information, see <http://bluez.sourceforge.net/>.
+
+- If you want to compile HCI Core as module (hci.o) say M here.
++ If you want to compile BlueZ Core as module (bluez.o) say M here.
+
+ L2CAP protocol support
+ CONFIG_BLUEZ_L2CAP
+@@ -19893,15 +19895,91 @@
+ Say Y here to compile L2CAP support into the kernel or say M to
+ compile it as module (l2cap.o).
+
++SCO links support
++CONFIG_BLUEZ_SCO
++ SCO link provides voice transport over Bluetooth. SCO support is
++ required for voice applications like Headset and Audio.
++
++ Say Y here to compile SCO support into the kernel or say M to
++ compile it as module (sco.o).
++
++RFCOMM protocol support
++CONFIG_BLUEZ_RFCOMM
++ RFCOMM provides connection oriented stream transport. RFCOMM
++ support is required for Dialup Networking, OBEX and other Bluetooth
++ applications.
++
++ Say Y here to compile RFCOMM support into the kernel or say M to
++ compile it as module (rfcomm.o).
++
++RFCOMM TTY emulation support
++CONFIG_BLUEZ_RFCOMM_TTY
++ This option enables TTY emulation support for RFCOMM channels.
++
++BNEP protocol support
++CONFIG_BLUEZ_BNEP
++ BNEP (Bluetooth Network Encapsulation Protocol) is Ethernet
++ emulation layer on top of Bluetooth. BNEP is required for Bluetooth
++ PAN (Personal Area Network).
++
++ To use BNEP, you will need user-space utilities provided in the
++ BlueZ-PAN package.
++ For more information, see <http://bluez.sourceforge.net>.
++
++ Say Y here to compile BNEP support into the kernel or say M to
++ compile it as module (bnep.o).
++
++CMTP protocol support
++CONFIG_BLUEZ_CMTP
++ CMTP (CAPI Message Transport Protocol) is a transport layer
++ for CAPI messages. CMTP is required for the Bluetooth Common
++ ISDN Access Profile.
++
++ Say Y here to compile CMTP support into the kernel or say M to
++ compile it as module (cmtp.o).
++
++BNEP multicast filter support
++CONFIG_BLUEZ_BNEP_MC_FILTER
++ This option enables the multicast filter support for BNEP.
++
++BNEP protocol filter support
++CONFIG_BLUEZ_BNEP_PROTO_FILTER
++ This option enables the protocol filter support for BNEP.
++
+ HCI UART driver
+ CONFIG_BLUEZ_HCIUART
+ Bluetooth HCI UART driver.
+ This driver is required if you want to use Bluetooth devices with
+- serial port interface.
++ serial port interface. You will also need this driver if you have
++ UART based Bluetooth PCMCIA and CF devices like Xircom Credit Card
++ adapter and BrainBoxes Bluetooth PC Card.
+
+ Say Y here to compile support for Bluetooth UART devices into the
+ kernel or say M to compile it as module (hci_uart.o).
+
++HCI UART (H4) protocol support
++CONFIG_BLUEZ_HCIUART_H4
++ UART (H4) is serial protocol for communication between Bluetooth
++ device and host. This protocol is required for most Bluetooth devices
++ with UART interface, including PCMCIA and CF cards.
++
++ Say Y here to compile support for HCI UART (H4) protocol.
++
++HCI BCSP protocol support
++CONFIG_BLUEZ_HCIUART_BCSP
++ BCSP (BlueCore Serial Protocol) is serial protocol for communication
++ between Bluetooth device and host. This protocol is required for non
++ USB Bluetooth devices based on CSR BlueCore chip, including PCMCIA and
++ CF cards.
++
++ Say Y here to compile support for HCI BCSP protocol.
++
++HCI BCSP transmit CRC with every BCSP packet
++CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ If you say Y here, a 16-bit CRC checksum will be transmitted along with
++ every BCSP (BlueCore Serial Protocol) packet sent to the Bluetooth chip.
++ This increases reliability, but slightly reduces efficiency.
++
+ HCI USB driver
+ CONFIG_BLUEZ_HCIUSB
+ Bluetooth HCI USB driver.
+@@ -19911,13 +19989,90 @@
+ Say Y here to compile support for Bluetooth USB devices into the
+ kernel or say M to compile it as module (hci_usb.o).
+
+-HCI VHCI virtual HCI device driver
++HCI USB SCO (voice) support
++CONFIG_BLUEZ_USB_SCO
++ This option enables the SCO support in the HCI USB driver. You need this
++ to transmit voice data with your Bluetooth USB device. And your device
++ must also support sending SCO data over the HCI layer, because some of
++ them sends the SCO data to an internal PCM adapter.
++
++ Say Y here to compile support for HCI SCO data.
++
++HCI USB zero packet support
++CONFIG_BLUEZ_USB_ZERO_PACKET
++ This option is provided only as a work around for buggy Bluetooth USB
++ devices. Do NOT enable it unless you know for sure that your device
++ requires zero packets.
++
++ Most people should say N here.
++
++HCI VHCI Virtual HCI device driver
+ CONFIG_BLUEZ_HCIVHCI
+ Bluetooth Virtual HCI device driver.
+ This driver is required if you want to use HCI Emulation software.
+
+ Say Y here to compile support for virtual HCI devices into the
+ kernel or say M to compile it as module (hci_vhci.o).
++
++HCI BFUSB device driver
++CONFIG_BLUEZ_HCIBFUSB
++ Bluetooth HCI BlueFRITZ! USB driver.
++ This driver provides support for Bluetooth USB devices with AVM
++ interface:
++ AVM BlueFRITZ! USB
++
++ Say Y here to compile support for HCI BFUSB devices into the
++ kernel or say M to compile it as module (bfusb.o).
++
++HCI DTL1 (PC Card) device driver
++CONFIG_BLUEZ_HCIDTL1
++ Bluetooth HCI DTL1 (PC Card) driver.
++ This driver provides support for Bluetooth PCMCIA devices with
++ Nokia DTL1 interface:
++ Nokia Bluetooth Card
++ Socket Bluetooth CF Card
++
++ Say Y here to compile support for HCI DTL1 devices into the
++ kernel or say M to compile it as module (dtl1_cs.o).
++
++HCI BT3C (PC Card) device driver
++CONFIG_BLUEZ_HCIBT3C
++ Bluetooth HCI BT3C (PC Card) driver.
++ This driver provides support for Bluetooth PCMCIA devices with
++ 3Com BT3C interface:
++ 3Com Bluetooth Card (3CRWB6096)
++ HP Bluetooth Card
++
++ The HCI BT3C driver uses external firmware loader program provided in
++ the BlueFW package. For more information, see <http://bluez.sf.net>.
++
++ Say Y here to compile support for HCI BT3C devices into the
++ kernel or say M to compile it as module (bt3c_cs.o).
++
++HCI BlueCard (PC Card) device driver
++CONFIG_BLUEZ_HCIBLUECARD
++ Bluetooth HCI BlueCard (PC Card) driver.
++ This driver provides support for Bluetooth PCMCIA devices with
++ Anycom BlueCard interface:
++ Anycom Bluetooth PC Card
++ Anycom Bluetooth CF Card
++
++ Say Y here to compile support for HCI BlueCard devices into the
++ kernel or say M to compile it as module (bluecard_cs.o).
++
++HCI UART (PC Card) device driver
++CONFIG_BLUEZ_HCIBTUART
++ Bluetooth HCI UART (PC Card) driver.
++ This driver provides support for Bluetooth PCMCIA devices with
++ an UART interface:
++ Xircom CreditCard Bluetooth Adapter
++ Xircom RealPort2 Bluetooth Adapter
++ Sphinx PICO Card
++ H-Soft blue+Card
++ Cyber-blue Compact Flash Card
++
++ Say Y here to compile support for HCI UART devices into the
++ kernel or say M to compile it as module (btuart_cs.o).
+
+ # The following options are for Linux when running on the Hitachi
+ # SuperH family of RISC microprocessors.
+diff -urN linux-2.4.18/Documentation/firmware_class/README linux-2.4.18-mh9/Documentation/firmware_class/README
+--- linux-2.4.18/Documentation/firmware_class/README Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/Documentation/firmware_class/README Mon Aug 25 18:38:10 2003
+@@ -0,0 +1,58 @@
++
++ request_firmware() hotplug interface:
++ ------------------------------------
++ Copyright (C) 2003 Manuel Estrada Sainz <ranty@debian.org>
++
++ Why:
++ ---
++
++ Today, the most extended way to use firmware in the Linux kernel is linking
++ it statically in a header file. Which has political and technical issues:
++
++ 1) Some firmware is not legal to redistribute.
++ 2) The firmware occupies memory permanently, even though it often is just
++ used once.
++ 3) Some people, like the Debian crowd, don't consider some firmware free
++ enough and remove entire drivers (e.g.: keyspan).
++
++ about in-kernel persistence:
++ ---------------------------
++ Under some circumstances, as explained below, it would be interesting to keep
++ firmware images in non-swappable kernel memory or even in the kernel image
++ (probably within initramfs).
++
++ Note that this functionality has not been implemented.
++
++ - Why OPTIONAL in-kernel persistence may be a good idea sometimes:
++
++ - If the device that needs the firmware is needed to access the
++ filesystem. When upon some error the device has to be reset and the
++ firmware reloaded, it won't be possible to get it from userspace.
++ e.g.:
++ - A diskless client with a network card that needs firmware.
++ - The filesystem is stored in a disk behind an scsi device
++ that needs firmware.
++ - Replacing buggy DSDT/SSDT ACPI tables on boot.
++ Note: this would require the persistent objects to be included
++ within the kernel image, probably within initramfs.
++
++ And the same device can be needed to access the filesystem or not depending
++ on the setup, so I think that the choice on what firmware to make
++ persistent should be left to userspace.
++
++ - Why register_firmware()+__init can be useful:
++ - For boot devices needing firmware.
++ - To make the transition easier:
++ The firmware can be declared __init and register_firmware()
++ called on module_init. Then the firmware is warranted to be
++ there even if "firmware hotplug userspace" is not there yet or
++ it doesn't yet provide the needed firmware.
++ Once the firmware is widely available in userspace, it can be
++ removed from the kernel. Or made optional (CONFIG_.*_FIRMWARE).
++
++ In either case, if firmware hotplug support is there, it can move the
++ firmware out of kernel memory into the real filesystem for later
++ usage.
++
++ Note: If persistence is implemented on top of initramfs,
++ register_firmware() may not be appropriate.
+diff -urN linux-2.4.18/Documentation/firmware_class/firmware_sample_driver.c linux-2.4.18-mh9/Documentation/firmware_class/firmware_sample_driver.c
+--- linux-2.4.18/Documentation/firmware_class/firmware_sample_driver.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/Documentation/firmware_class/firmware_sample_driver.c Mon Aug 25 18:38:10 2003
+@@ -0,0 +1,121 @@
++/*
++ * firmware_sample_driver.c -
++ *
++ * Copyright (c) 2003 Manuel Estrada Sainz <ranty@debian.org>
++ *
++ * Sample code on how to use request_firmware() from drivers.
++ *
++ * Note that register_firmware() is currently useless.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/string.h>
++
++#include "linux/firmware.h"
++
++#define WE_CAN_NEED_FIRMWARE_BEFORE_USERSPACE_IS_AVAILABLE
++#ifdef WE_CAN_NEED_FIRMWARE_BEFORE_USERSPACE_IS_AVAILABLE
++char __init inkernel_firmware[] = "let's say that this is firmware\n";
++#endif
++
++static char ghost_device[] = "ghost0";
++
++static void sample_firmware_load(char *firmware, int size)
++{
++ u8 buf[size+1];
++ memcpy(buf, firmware, size);
++ buf[size] = '\0';
++ printk("firmware_sample_driver: firmware: %s\n", buf);
++}
++
++static void sample_probe_default(void)
++{
++ /* uses the default method to get the firmware */
++ const struct firmware *fw_entry;
++ printk("firmware_sample_driver: a ghost device got inserted :)\n");
++
++ if(request_firmware(&fw_entry, "sample_driver_fw", ghost_device)!=0)
++ {
++ printk(KERN_ERR
++ "firmware_sample_driver: Firmware not available\n");
++ return;
++ }
++
++ sample_firmware_load(fw_entry->data, fw_entry->size);
++
++ release_firmware(fw_entry);
++
++ /* finish setting up the device */
++}
++static void sample_probe_specific(void)
++{
++ /* Uses some specific hotplug support to get the firmware from
++ * userspace directly into the hardware, or via some sysfs file */
++
++ /* NOTE: This currently doesn't work */
++
++ printk("firmware_sample_driver: a ghost device got inserted :)\n");
++
++ if(request_firmware(NULL, "sample_driver_fw", ghost_device)!=0)
++ {
++ printk(KERN_ERR
++ "firmware_sample_driver: Firmware load failed\n");
++ return;
++ }
++
++ /* request_firmware blocks until userspace finished, so at
++ * this point the firmware should be already in the device */
++
++ /* finish setting up the device */
++}
++static void sample_probe_async_cont(const struct firmware *fw, void *context)
++{
++ if(!fw){
++ printk(KERN_ERR
++ "firmware_sample_driver: firmware load failed\n");
++ return;
++ }
++
++ printk("firmware_sample_driver: device pointer \"%s\"\n",
++ (char *)context);
++ sample_firmware_load(fw->data, fw->size);
++}
++static void sample_probe_async(void)
++{
++ /* Let's say that I can't sleep */
++ int error;
++ error = request_firmware_nowait (THIS_MODULE,
++ "sample_driver_fw", ghost_device,
++ "my device pointer",
++ sample_probe_async_cont);
++ if(error){
++ printk(KERN_ERR
++ "firmware_sample_driver:"
++ " request_firmware_nowait failed\n");
++ }
++}
++
++static int sample_init(void)
++{
++#ifdef WE_CAN_NEED_FIRMWARE_BEFORE_USERSPACE_IS_AVAILABLE
++ register_firmware("sample_driver_fw", inkernel_firmware,
++ sizeof(inkernel_firmware));
++#endif
++ /* since there is no real hardware insertion I just call the
++ * sample probe functions here */
++ sample_probe_specific();
++ sample_probe_default();
++ sample_probe_async();
++ return 0;
++}
++static void __exit sample_exit(void)
++{
++}
++
++module_init (sample_init);
++module_exit (sample_exit);
++
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/Documentation/firmware_class/hotplug-script linux-2.4.18-mh9/Documentation/firmware_class/hotplug-script
+--- linux-2.4.18/Documentation/firmware_class/hotplug-script Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/Documentation/firmware_class/hotplug-script Mon Aug 25 18:38:10 2003
+@@ -0,0 +1,16 @@
++#!/bin/sh
++
++# Simple hotplug script sample:
++#
++# Both $DEVPATH and $FIRMWARE are already provided in the environment.
++
++HOTPLUG_FW_DIR=/usr/lib/hotplug/firmware/
++
++echo 1 > /sysfs/$DEVPATH/loading
++cat $HOTPLUG_FW_DIR/$FIRMWARE > /sysfs/$DEVPATH/data
++echo 0 > /sysfs/$DEVPATH/loading
++
++# To cancel the load in case of error:
++#
++# echo -1 > /sysfs/$DEVPATH/loading
++#
+diff -urN linux-2.4.18/MAINTAINERS linux-2.4.18-mh9/MAINTAINERS
+--- linux-2.4.18/MAINTAINERS Mon Feb 25 20:37:52 2002
++++ linux-2.4.18-mh9/MAINTAINERS Mon Aug 25 18:38:10 2003
+@@ -252,7 +252,73 @@
+ L: linux-kernel@vger.kernel.org
+ S: Maintained
+
+-BLUETOOTH SUBSYSTEM (BlueZ)
++BLUETOOTH SUBSYSTEM
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
++W: http://bluez.sf.net
++S: Maintained
++
++BLUETOOTH RFCOMM LAYER
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
++W: http://bluez.sf.net
++S: Maintained
++
++BLUETOOTH BNEP LAYER
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
++W: http://bluez.sf.net
++S: Maintained
++
++BLUETOOTH CMTP LAYER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++W: http://www.holtmann.org/linux/bluetooth/
++S: Maintained
++
++BLUETOOTH HCI USB DRIVER
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
++W: http://bluez.sf.net
++S: Maintained
++
++BLUETOOTH HCI UART DRIVER
++P: Maxim Krasnyansky
++M: maxk@qualcomm.com
++W: http://bluez.sf.net
++S: Maintained
++
++BLUETOOTH HCI BFUSB DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++W: http://www.holtmann.org/linux/bluetooth/
++S: Maintained
++
++BLUETOOTH HCI DTL1 DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++W: http://www.holtmann.org/linux/bluetooth/
++S: Maintained
++
++BLUETOOTH HCI BLUECARD DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++W: http://www.holtmann.org/linux/bluetooth/
++S: Maintained
++
++BLUETOOTH HCI BT3C DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++W: http://www.holtmann.org/linux/bluetooth/
++S: Maintained
++
++BLUETOOTH HCI BTUART DRIVER
++P: Marcel Holtmann
++M: marcel@holtmann.org
++W: http://www.holtmann.org/linux/bluetooth/
++S: Maintained
++
++BLUETOOTH HCI VHCI DRIVER
+ P: Maxim Krasnyansky
+ M: maxk@qualcomm.com
+ W: http://bluez.sf.net
+diff -urN linux-2.4.18/arch/alpha/config.in linux-2.4.18-mh9/arch/alpha/config.in
+--- linux-2.4.18/arch/alpha/config.in Wed Nov 21 00:49:31 2001
++++ linux-2.4.18-mh9/arch/alpha/config.in Mon Aug 25 18:38:10 2003
+@@ -371,9 +371,7 @@
+ source drivers/usb/Config.in
+ source drivers/input/Config.in
+
+-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+- source net/bluetooth/Config.in
+-fi
++source net/bluetooth/Config.in
+
+ mainmenu_option next_comment
+ comment 'Kernel hacking'
+diff -urN linux-2.4.18/arch/arm/config.in linux-2.4.18-mh9/arch/arm/config.in
+--- linux-2.4.18/arch/arm/config.in Fri Nov 9 22:58:02 2001
++++ linux-2.4.18-mh9/arch/arm/config.in Mon Aug 25 18:38:10 2003
+@@ -584,9 +584,7 @@
+
+ source drivers/usb/Config.in
+
+-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+- source net/bluetooth/Config.in
+-fi
++source net/bluetooth/Config.in
+
+ mainmenu_option next_comment
+ comment 'Kernel hacking'
+diff -urN linux-2.4.18/arch/i386/config.in linux-2.4.18-mh9/arch/i386/config.in
+--- linux-2.4.18/arch/i386/config.in Mon Feb 25 20:37:52 2002
++++ linux-2.4.18-mh9/arch/i386/config.in Mon Aug 25 18:38:10 2003
+@@ -407,9 +407,7 @@
+
+ source drivers/usb/Config.in
+
+-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+- source net/bluetooth/Config.in
+-fi
++source net/bluetooth/Config.in
+
+ mainmenu_option next_comment
+ comment 'Kernel hacking'
+diff -urN linux-2.4.18/arch/ppc/config.in linux-2.4.18-mh9/arch/ppc/config.in
+--- linux-2.4.18/arch/ppc/config.in Mon Feb 25 20:37:55 2002
++++ linux-2.4.18-mh9/arch/ppc/config.in Mon Aug 25 18:38:10 2003
+@@ -389,9 +389,7 @@
+
+ source drivers/usb/Config.in
+
+-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+- source net/bluetooth/Config.in
+-fi
++source net/bluetooth/Config.in
+
+ mainmenu_option next_comment
+ comment 'Kernel hacking'
+diff -urN linux-2.4.18/arch/sparc/config.in linux-2.4.18-mh9/arch/sparc/config.in
+--- linux-2.4.18/arch/sparc/config.in Tue Jun 12 04:15:27 2001
++++ linux-2.4.18-mh9/arch/sparc/config.in Mon Aug 25 18:38:10 2003
+@@ -251,9 +251,7 @@
+
+ source fs/Config.in
+
+-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+- source net/bluetooth/Config.in
+-fi
++source net/bluetooth/Config.in
+
+ mainmenu_option next_comment
+ comment 'Watchdog'
+diff -urN linux-2.4.18/arch/sparc64/config.in linux-2.4.18-mh9/arch/sparc64/config.in
+--- linux-2.4.18/arch/sparc64/config.in Fri Dec 21 18:41:53 2001
++++ linux-2.4.18-mh9/arch/sparc64/config.in Mon Aug 25 18:38:10 2003
+@@ -283,9 +283,7 @@
+
+ source drivers/usb/Config.in
+
+-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+- source net/bluetooth/Config.in
+-fi
++source net/bluetooth/Config.in
+
+ mainmenu_option next_comment
+ comment 'Watchdog'
+diff -urN linux-2.4.18/arch/sparc64/kernel/ioctl32.c linux-2.4.18-mh9/arch/sparc64/kernel/ioctl32.c
+--- linux-2.4.18/arch/sparc64/kernel/ioctl32.c Mon Feb 25 20:37:56 2002
++++ linux-2.4.18-mh9/arch/sparc64/kernel/ioctl32.c Mon Aug 25 18:38:10 2003
+@@ -92,6 +92,7 @@
+
+ #include <net/bluetooth/bluetooth.h>
+ #include <net/bluetooth/hci.h>
++#include <net/bluetooth/rfcomm.h>
+
+ #include <linux/usb.h>
+ #include <linux/usbdevice_fs.h>
+@@ -3822,6 +3823,15 @@
+ return err;
+ }
+
++/* Bluetooth ioctls */
++#define HCIUARTSETPROTO _IOW('U', 200, int)
++#define HCIUARTGETPROTO _IOR('U', 201, int)
++
++#define BNEPCONNADD _IOW('B', 200, int)
++#define BNEPCONNDEL _IOW('B', 201, int)
++#define BNEPGETCONNLIST _IOR('B', 210, int)
++#define BNEPGETCONNINFO _IOR('B', 211, int)
++
+ struct mtd_oob_buf32 {
+ u32 start;
+ u32 length;
+@@ -3878,6 +3888,11 @@
+ return ((0 == ret) ? 0 : -EFAULT);
+ }
+
++#define CMTPCONNADD _IOW('C', 200, int)
++#define CMTPCONNDEL _IOW('C', 201, int)
++#define CMTPGETCONNLIST _IOR('C', 210, int)
++#define CMTPGETCONNINFO _IOR('C', 211, int)
++
+ struct ioctl_trans {
+ unsigned int cmd;
+ unsigned int handler;
+@@ -4540,6 +4555,21 @@
+ COMPATIBLE_IOCTL(HCISETSCAN)
+ COMPATIBLE_IOCTL(HCISETAUTH)
+ COMPATIBLE_IOCTL(HCIINQUIRY)
++COMPATIBLE_IOCTL(HCIUARTSETPROTO)
++COMPATIBLE_IOCTL(HCIUARTGETPROTO)
++COMPATIBLE_IOCTL(RFCOMMCREATEDEV)
++COMPATIBLE_IOCTL(RFCOMMRELEASEDEV)
++COMPATIBLE_IOCTL(RFCOMMGETDEVLIST)
++COMPATIBLE_IOCTL(RFCOMMGETDEVINFO)
++COMPATIBLE_IOCTL(RFCOMMSTEALDLC)
++COMPATIBLE_IOCTL(BNEPCONNADD)
++COMPATIBLE_IOCTL(BNEPCONNDEL)
++COMPATIBLE_IOCTL(BNEPGETCONNLIST)
++COMPATIBLE_IOCTL(BNEPGETCONNINFO)
++COMPATIBLE_IOCTL(CMTPCONNADD)
++COMPATIBLE_IOCTL(CMTPCONNDEL)
++COMPATIBLE_IOCTL(CMTPGETCONNLIST)
++COMPATIBLE_IOCTL(CMTPGETCONNINFO)
+ /* Misc. */
+ COMPATIBLE_IOCTL(0x41545900) /* ATYIO_CLKR */
+ COMPATIBLE_IOCTL(0x41545901) /* ATYIO_CLKW */
+diff -urN linux-2.4.18/drivers/bluetooth/Config.in linux-2.4.18-mh9/drivers/bluetooth/Config.in
+--- linux-2.4.18/drivers/bluetooth/Config.in Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/drivers/bluetooth/Config.in Mon Aug 25 18:38:10 2003
+@@ -1,8 +1,34 @@
++#
++# Bluetooth HCI device drivers configuration
++#
++
+ mainmenu_option next_comment
+ comment 'Bluetooth device drivers'
+
+ dep_tristate 'HCI USB driver' CONFIG_BLUEZ_HCIUSB $CONFIG_BLUEZ $CONFIG_USB
++if [ "$CONFIG_BLUEZ_HCIUSB" != "n" ]; then
++ bool ' SCO (voice) support' CONFIG_BLUEZ_USB_SCO
++ bool ' USB zero packet support' CONFIG_BLUEZ_USB_ZERO_PACKET
++fi
++
+ dep_tristate 'HCI UART driver' CONFIG_BLUEZ_HCIUART $CONFIG_BLUEZ
+-dep_tristate 'HCI VHCI virtual HCI device driver' CONFIG_BLUEZ_HCIVHCI $CONFIG_BLUEZ
++if [ "$CONFIG_BLUEZ_HCIUART" != "n" ]; then
++ bool ' UART (H4) protocol support' CONFIG_BLUEZ_HCIUART_H4
++ bool ' BCSP protocol support' CONFIG_BLUEZ_HCIUART_BCSP
++ dep_bool ' Transmit CRC with every BCSP packet' CONFIG_BLUEZ_HCIUART_BCSP_TXCRC $CONFIG_BLUEZ_HCIUART_BCSP
++fi
++
++dep_tristate 'HCI BlueFRITZ! USB driver' CONFIG_BLUEZ_HCIBFUSB $CONFIG_BLUEZ $CONFIG_USB
++
++dep_tristate 'HCI DTL1 (PC Card) driver' CONFIG_BLUEZ_HCIDTL1 $CONFIG_PCMCIA $CONFIG_BLUEZ
++
++dep_tristate 'HCI BT3C (PC Card) driver' CONFIG_BLUEZ_HCIBT3C $CONFIG_PCMCIA $CONFIG_BLUEZ
++
++dep_tristate 'HCI BlueCard (PC Card) driver' CONFIG_BLUEZ_HCIBLUECARD $CONFIG_PCMCIA $CONFIG_BLUEZ
++
++dep_tristate 'HCI UART (PC Card) driver' CONFIG_BLUEZ_HCIBTUART $CONFIG_PCMCIA $CONFIG_BLUEZ
++
++dep_tristate 'HCI VHCI (Virtual HCI device) driver' CONFIG_BLUEZ_HCIVHCI $CONFIG_BLUEZ
+
+ endmenu
++
+diff -urN linux-2.4.18/drivers/bluetooth/Makefile linux-2.4.18-mh9/drivers/bluetooth/Makefile
+--- linux-2.4.18/drivers/bluetooth/Makefile Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/drivers/bluetooth/Makefile Mon Aug 25 18:38:10 2003
+@@ -1,11 +1,27 @@
+ #
+-# Makefile for Bluetooth HCI device drivers.
++# Makefile for the Linux Bluetooth HCI device drivers
+ #
+
+ O_TARGET := bluetooth.o
+
++list-multi := hci_uart.o
++
+ obj-$(CONFIG_BLUEZ_HCIUSB) += hci_usb.o
+-obj-$(CONFIG_BLUEZ_HCIUART) += hci_uart.o
+ obj-$(CONFIG_BLUEZ_HCIVHCI) += hci_vhci.o
+
++obj-$(CONFIG_BLUEZ_HCIUART) += hci_uart.o
++uart-y := hci_ldisc.o
++uart-$(CONFIG_BLUEZ_HCIUART_H4) += hci_h4.o
++uart-$(CONFIG_BLUEZ_HCIUART_BCSP) += hci_bcsp.o
++
++obj-$(CONFIG_BLUEZ_HCIBFUSB) += bfusb.o
++
++obj-$(CONFIG_BLUEZ_HCIDTL1) += dtl1_cs.o
++obj-$(CONFIG_BLUEZ_HCIBT3C) += bt3c_cs.o
++obj-$(CONFIG_BLUEZ_HCIBLUECARD) += bluecard_cs.o
++obj-$(CONFIG_BLUEZ_HCIBTUART) += btuart_cs.o
++
+ include $(TOPDIR)/Rules.make
++
++hci_uart.o: $(uart-y)
++ $(LD) -r -o $@ $(uart-y)
+diff -urN linux-2.4.18/drivers/bluetooth/Makefile.lib linux-2.4.18-mh9/drivers/bluetooth/Makefile.lib
+--- linux-2.4.18/drivers/bluetooth/Makefile.lib Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/drivers/bluetooth/Makefile.lib Mon Aug 25 18:38:10 2003
+@@ -0,0 +1 @@
++obj-$(CONFIG_BLUEZ_HCIBFUSB) += firmware_class.o
+diff -urN linux-2.4.18/drivers/bluetooth/bfusb.c linux-2.4.18-mh9/drivers/bluetooth/bfusb.c
+--- linux-2.4.18/drivers/bluetooth/bfusb.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/drivers/bluetooth/bfusb.c Mon Aug 25 18:38:10 2003
+@@ -0,0 +1,781 @@
++/*
++ *
++ * AVM BlueFRITZ! USB driver
++ *
++ * Copyright (C) 2003 Marcel Holtmann <marcel@holtmann.org>
++ *
++ *
++ * 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/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/errno.h>
++#include <linux/skbuff.h>
++
++#include <linux/firmware.h>
++#include <linux/usb.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++#ifndef CONFIG_BLUEZ_HCIBFUSB_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define VERSION "1.1"
++
++static struct usb_device_id bfusb_table[] = {
++ /* AVM BlueFRITZ! USB */
++ { USB_DEVICE(0x057c, 0x2200) },
++
++ { } /* Terminating entry */
++};
++
++MODULE_DEVICE_TABLE(usb, bfusb_table);
++
++
++#define BFUSB_MAX_BLOCK_SIZE 256
++
++#define BFUSB_BLOCK_TIMEOUT (HZ * 3)
++
++#define BFUSB_TX_PROCESS 1
++#define BFUSB_TX_WAKEUP 2
++
++#define BFUSB_MAX_BULK_TX 1
++#define BFUSB_MAX_BULK_RX 1
++
++struct bfusb {
++ struct hci_dev hdev;
++
++ unsigned long state;
++
++ struct usb_device *udev;
++
++ unsigned int bulk_in_ep;
++ unsigned int bulk_out_ep;
++ unsigned int bulk_pkt_size;
++
++ rwlock_t lock;
++
++ struct sk_buff_head transmit_q;
++
++ struct sk_buff *reassembly;
++
++ atomic_t pending_tx;
++ struct sk_buff_head pending_q;
++ struct sk_buff_head completed_q;
++};
++
++struct bfusb_scb {
++ struct urb *urb;
++};
++
++static void bfusb_tx_complete(struct urb *urb);
++static void bfusb_rx_complete(struct urb *urb);
++
++static struct urb *bfusb_get_completed(struct bfusb *bfusb)
++{
++ struct sk_buff *skb;
++ struct urb *urb = NULL;
++
++ BT_DBG("bfusb %p", bfusb);
++
++ skb = skb_dequeue(&bfusb->completed_q);
++ if (skb) {
++ urb = ((struct bfusb_scb *) skb->cb)->urb;
++ kfree_skb(skb);
++ }
++
++ return urb;
++}
++
++static inline void bfusb_unlink_urbs(struct bfusb *bfusb)
++{
++ struct sk_buff *skb;
++ struct urb *urb;
++
++ BT_DBG("bfusb %p", bfusb);
++
++ while ((skb = skb_dequeue(&bfusb->pending_q))) {
++ urb = ((struct bfusb_scb *) skb->cb)->urb;
++ usb_unlink_urb(urb);
++ skb_queue_tail(&bfusb->completed_q, skb);
++ }
++
++ while ((urb = bfusb_get_completed(bfusb)))
++ usb_free_urb(urb);
++}
++
++
++static int bfusb_send_bulk(struct bfusb *bfusb, struct sk_buff *skb)
++{
++ struct bfusb_scb *scb = (void *) skb->cb;
++ struct urb *urb = bfusb_get_completed(bfusb);
++ int err, pipe;
++
++ BT_DBG("bfusb %p skb %p len %d", bfusb, skb, skb->len);
++
++ if (!urb && !(urb = usb_alloc_urb(0)))
++ return -ENOMEM;
++
++ pipe = usb_sndbulkpipe(bfusb->udev, bfusb->bulk_out_ep);
++
++ FILL_BULK_URB(urb, bfusb->udev, pipe, skb->data, skb->len,
++ bfusb_tx_complete, skb);
++
++ urb->transfer_flags = USB_QUEUE_BULK;
++
++ scb->urb = urb;
++
++ skb_queue_tail(&bfusb->pending_q, skb);
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s bulk tx submit failed urb %p err %d",
++ bfusb->hdev.name, urb, err);
++ skb_unlink(skb);
++ usb_free_urb(urb);
++ } else
++ atomic_inc(&bfusb->pending_tx);
++
++ return err;
++}
++
++static void bfusb_tx_wakeup(struct bfusb *bfusb)
++{
++ struct sk_buff *skb;
++
++ BT_DBG("bfusb %p", bfusb);
++
++ if (test_and_set_bit(BFUSB_TX_PROCESS, &bfusb->state)) {
++ set_bit(BFUSB_TX_WAKEUP, &bfusb->state);
++ return;
++ }
++
++ do {
++ clear_bit(BFUSB_TX_WAKEUP, &bfusb->state);
++
++ while ((atomic_read(&bfusb->pending_tx) < BFUSB_MAX_BULK_TX) &&
++ (skb = skb_dequeue(&bfusb->transmit_q))) {
++ if (bfusb_send_bulk(bfusb, skb) < 0) {
++ skb_queue_head(&bfusb->transmit_q, skb);
++ break;
++ }
++ }
++
++ } while (test_bit(BFUSB_TX_WAKEUP, &bfusb->state));
++
++ clear_bit(BFUSB_TX_PROCESS, &bfusb->state);
++}
++
++static void bfusb_tx_complete(struct urb *urb)
++{
++ struct sk_buff *skb = (struct sk_buff *) urb->context;
++ struct bfusb *bfusb = (struct bfusb *) skb->dev;
++
++ BT_DBG("bfusb %p urb %p skb %p len %d", bfusb, urb, skb, skb->len);
++
++ atomic_dec(&bfusb->pending_tx);
++
++ if (!test_bit(HCI_RUNNING, &bfusb->hdev.flags))
++ return;
++
++ if (!urb->status)
++ bfusb->hdev.stat.byte_tx += skb->len;
++ else
++ bfusb->hdev.stat.err_tx++;
++
++ read_lock(&bfusb->lock);
++
++ skb_unlink(skb);
++ skb_queue_tail(&bfusb->completed_q, skb);
++
++ bfusb_tx_wakeup(bfusb);
++
++ read_unlock(&bfusb->lock);
++}
++
++
++static int bfusb_rx_submit(struct bfusb *bfusb, struct urb *urb)
++{
++ struct bfusb_scb *scb;
++ struct sk_buff *skb;
++ int err, pipe, size = HCI_MAX_FRAME_SIZE + 32;
++
++ BT_DBG("bfusb %p urb %p", bfusb, urb);
++
++ if (!urb && !(urb = usb_alloc_urb(0)))
++ return -ENOMEM;
++
++ if (!(skb = bluez_skb_alloc(size, GFP_ATOMIC))) {
++ usb_free_urb(urb);
++ return -ENOMEM;
++ }
++
++ skb->dev = (void *) bfusb;
++
++ scb = (struct bfusb_scb *) skb->cb;
++ scb->urb = urb;
++
++ pipe = usb_rcvbulkpipe(bfusb->udev, bfusb->bulk_in_ep);
++
++ FILL_BULK_URB(urb, bfusb->udev, pipe, skb->data, size,
++ bfusb_rx_complete, skb);
++
++ urb->transfer_flags = USB_QUEUE_BULK;
++
++ skb_queue_tail(&bfusb->pending_q, skb);
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s bulk rx submit failed urb %p err %d",
++ bfusb->hdev.name, urb, err);
++ skb_unlink(skb);
++ kfree_skb(skb);
++ usb_free_urb(urb);
++ }
++
++ return err;
++}
++
++static inline int bfusb_recv_block(struct bfusb *bfusb, int hdr, unsigned char *data, int len)
++{
++ BT_DBG("bfusb %p hdr 0x%02x data %p len %d", bfusb, hdr, data, len);
++
++ if (hdr & 0x10) {
++ BT_ERR("%s error in block", bfusb->hdev.name);
++ if (bfusb->reassembly)
++ kfree_skb(bfusb->reassembly);
++ bfusb->reassembly = NULL;
++ return -EIO;
++ }
++
++ if (hdr & 0x04) {
++ struct sk_buff *skb;
++ unsigned char pkt_type;
++ int pkt_len = 0;
++
++ if (bfusb->reassembly) {
++ BT_ERR("%s unexpected start block", bfusb->hdev.name);
++ kfree_skb(bfusb->reassembly);
++ bfusb->reassembly = NULL;
++ }
++
++ if (len < 1) {
++ BT_ERR("%s no packet type found", bfusb->hdev.name);
++ return -EPROTO;
++ }
++
++ pkt_type = *data++; len--;
++
++ switch (pkt_type) {
++ case HCI_EVENT_PKT:
++ if (len >= HCI_EVENT_HDR_SIZE) {
++ hci_event_hdr *hdr = (hci_event_hdr *) data;
++ pkt_len = HCI_EVENT_HDR_SIZE + hdr->plen;
++ } else {
++ BT_ERR("%s event block is too short", bfusb->hdev.name);
++ return -EILSEQ;
++ }
++ break;
++
++ case HCI_ACLDATA_PKT:
++ if (len >= HCI_ACL_HDR_SIZE) {
++ hci_acl_hdr *hdr = (hci_acl_hdr *) data;
++ pkt_len = HCI_ACL_HDR_SIZE + __le16_to_cpu(hdr->dlen);
++ } else {
++ BT_ERR("%s data block is too short", bfusb->hdev.name);
++ return -EILSEQ;
++ }
++ break;
++
++ case HCI_SCODATA_PKT:
++ if (len >= HCI_SCO_HDR_SIZE) {
++ hci_sco_hdr *hdr = (hci_sco_hdr *) data;
++ pkt_len = HCI_SCO_HDR_SIZE + hdr->dlen;
++ } else {
++ BT_ERR("%s audio block is too short", bfusb->hdev.name);
++ return -EILSEQ;
++ }
++ break;
++ }
++
++ skb = bluez_skb_alloc(pkt_len, GFP_ATOMIC);
++ if (!skb) {
++ BT_ERR("%s no memory for the packet", bfusb->hdev.name);
++ return -ENOMEM;
++ }
++
++ skb->dev = (void *) &bfusb->hdev;
++ skb->pkt_type = pkt_type;
++
++ bfusb->reassembly = skb;
++ } else {
++ if (!bfusb->reassembly) {
++ BT_ERR("%s unexpected continuation block", bfusb->hdev.name);
++ return -EIO;
++ }
++ }
++
++ if (len > 0)
++ memcpy(skb_put(bfusb->reassembly, len), data, len);
++
++ if (hdr & 0x08) {
++ hci_recv_frame(bfusb->reassembly);
++ bfusb->reassembly = NULL;
++ }
++
++ return 0;
++}
++
++static void bfusb_rx_complete(struct urb *urb)
++{
++ struct sk_buff *skb = (struct sk_buff *) urb->context;
++ struct bfusb *bfusb = (struct bfusb *) skb->dev;
++ unsigned char *buf = urb->transfer_buffer;
++ int count = urb->actual_length;
++ int err, hdr, len;
++
++ BT_DBG("bfusb %p urb %p skb %p len %d", bfusb, urb, skb, skb->len);
++
++ if (!test_bit(HCI_RUNNING, &bfusb->hdev.flags))
++ return;
++
++ read_lock(&bfusb->lock);
++
++ if (urb->status || !count)
++ goto resubmit;
++
++ bfusb->hdev.stat.byte_rx += count;
++
++ skb_put(skb, count);
++
++ while (count) {
++ hdr = buf[0] | (buf[1] << 8);
++
++ if (hdr & 0x4000) {
++ len = 0;
++ count -= 2;
++ buf += 2;
++ } else {
++ len = (buf[2] == 0) ? 256 : buf[2];
++ count -= 3;
++ buf += 3;
++ }
++
++ if (count < len) {
++ BT_ERR("%s block extends over URB buffer ranges",
++ bfusb->hdev.name);
++ }
++
++ if ((hdr & 0xe1) == 0xc1)
++ bfusb_recv_block(bfusb, hdr, buf, len);
++
++ count -= len;
++ buf += len;
++ }
++
++ skb_unlink(skb);
++ kfree_skb(skb);
++
++ bfusb_rx_submit(bfusb, urb);
++
++ read_unlock(&bfusb->lock);
++
++ return;
++
++resubmit:
++ urb->dev = bfusb->udev;
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s bulk resubmit failed urb %p err %d",
++ bfusb->hdev.name, urb, err);
++ }
++
++ read_unlock(&bfusb->lock);
++}
++
++
++static int bfusb_open(struct hci_dev *hdev)
++{
++ struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
++ unsigned long flags;
++ int i, err;
++
++ BT_DBG("hdev %p bfusb %p", hdev, bfusb);
++
++ if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
++
++ MOD_INC_USE_COUNT;
++
++ write_lock_irqsave(&bfusb->lock, flags);
++
++ err = bfusb_rx_submit(bfusb, NULL);
++ if (!err) {
++ for (i = 1; i < BFUSB_MAX_BULK_RX; i++)
++ bfusb_rx_submit(bfusb, NULL);
++ } else {
++ clear_bit(HCI_RUNNING, &hdev->flags);
++ MOD_DEC_USE_COUNT;
++ }
++
++ write_unlock_irqrestore(&bfusb->lock, flags);
++
++ return err;
++}
++
++static int bfusb_flush(struct hci_dev *hdev)
++{
++ struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
++
++ BT_DBG("hdev %p bfusb %p", hdev, bfusb);
++
++ skb_queue_purge(&bfusb->transmit_q);
++
++ return 0;
++}
++
++static int bfusb_close(struct hci_dev *hdev)
++{
++ struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
++ unsigned long flags;
++
++ BT_DBG("hdev %p bfusb %p", hdev, bfusb);
++
++ if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
++
++ write_lock_irqsave(&bfusb->lock, flags);
++
++ bfusb_unlink_urbs(bfusb);
++ bfusb_flush(hdev);
++
++ write_unlock_irqrestore(&bfusb->lock, flags);
++
++ MOD_DEC_USE_COUNT;
++
++ return 0;
++}
++
++static int bfusb_send_frame(struct sk_buff *skb)
++{
++ struct hci_dev *hdev = (struct hci_dev *) skb->dev;
++ struct bfusb *bfusb;
++ struct sk_buff *nskb;
++ unsigned char buf[3];
++ int sent = 0, size, count;
++
++ BT_DBG("hdev %p skb %p type %d len %d", hdev, skb, skb->pkt_type, skb->len);
++
++ if (!hdev) {
++ BT_ERR("Frame for unknown HCI device (hdev=NULL)");
++ return -ENODEV;
++ }
++
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
++ return -EBUSY;
++
++ bfusb = (struct bfusb *) hdev->driver_data;
++
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++ };
++
++ /* Prepend skb with frame type */
++ memcpy(skb_push(skb, 1), &(skb->pkt_type), 1);
++
++ count = skb->len;
++
++ /* Max HCI frame size seems to be 1511 + 1 */
++ if (!(nskb = bluez_skb_alloc(count + 32, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for new packet");
++ return -ENOMEM;
++ }
++
++ nskb->dev = (void *) bfusb;
++
++ while (count) {
++ size = min_t(uint, count, BFUSB_MAX_BLOCK_SIZE);
++
++ buf[0] = 0xc1 | ((sent == 0) ? 0x04 : 0) | ((count == size) ? 0x08 : 0);
++ buf[1] = 0x00;
++ buf[2] = (size == BFUSB_MAX_BLOCK_SIZE) ? 0 : size;
++
++ memcpy(skb_put(nskb, 3), buf, 3);
++ memcpy(skb_put(nskb, size), skb->data + sent, size);
++
++ sent += size;
++ count -= size;
++ }
++
++ /* Don't send frame with multiple size of bulk max packet */
++ if ((nskb->len % bfusb->bulk_pkt_size) == 0) {
++ buf[0] = 0xdd;
++ buf[1] = 0x00;
++ memcpy(skb_put(nskb, 2), buf, 2);
++ }
++
++ read_lock(&bfusb->lock);
++
++ skb_queue_tail(&bfusb->transmit_q, nskb);
++ bfusb_tx_wakeup(bfusb);
++
++ read_unlock(&bfusb->lock);
++
++ kfree_skb(skb);
++
++ return 0;
++}
++
++static void bfusb_destruct(struct hci_dev *hdev)
++{
++ struct bfusb *bfusb = (struct bfusb *) hdev->driver_data;
++
++ BT_DBG("hdev %p bfusb %p", hdev, bfusb);
++
++ kfree(bfusb);
++}
++
++static int bfusb_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
++{
++ return -ENOIOCTLCMD;
++}
++
++
++static int bfusb_load_firmware(struct bfusb *bfusb, unsigned char *firmware, int count)
++{
++ unsigned char *buf;
++ int err, pipe, len, size, sent = 0;
++
++ BT_DBG("bfusb %p udev %p firmware %p count %d", bfusb, bfusb->udev, firmware, count);
++
++ BT_INFO("BlueFRITZ! USB loading firmware");
++
++ if (usb_set_configuration(bfusb->udev, 1) < 0) {
++ BT_ERR("Can't change to loading configuration");
++ return -EBUSY;
++ }
++
++ buf = kmalloc(BFUSB_MAX_BLOCK_SIZE + 3, GFP_ATOMIC);
++ if (!buf) {
++ BT_ERR("Can't allocate memory chunk for firmware");
++ return -ENOMEM;
++ }
++
++ pipe = usb_sndbulkpipe(bfusb->udev, bfusb->bulk_out_ep);
++
++ while (count) {
++ size = min_t(uint, count, BFUSB_MAX_BLOCK_SIZE + 3);
++
++ memcpy(buf, firmware + sent, size);
++
++ err = usb_bulk_msg(bfusb->udev, pipe, buf, size,
++ &len, BFUSB_BLOCK_TIMEOUT);
++
++ if (err || (len != size)) {
++ BT_ERR("Error in firmware loading");
++ goto error;
++ }
++
++ sent += size;
++ count -= size;
++ }
++
++ if ((err = usb_bulk_msg(bfusb->udev, pipe, NULL, 0,
++ &len, BFUSB_BLOCK_TIMEOUT)) < 0) {
++ BT_ERR("Error in null packet request");
++ goto error;
++ }
++
++ if ((err = usb_set_configuration(bfusb->udev, 2)) < 0) {
++ BT_ERR("Can't change to running configuration");
++ goto error;
++ }
++
++ BT_INFO("BlueFRITZ! USB device ready");
++
++ kfree(buf);
++ return 0;
++
++error:
++ kfree(buf);
++
++ pipe = usb_sndctrlpipe(bfusb->udev, 0);
++
++ usb_control_msg(bfusb->udev, pipe, USB_REQ_SET_CONFIGURATION,
++ 0, 0, 0, NULL, 0, BFUSB_BLOCK_TIMEOUT);
++
++ return err;
++}
++
++static void *bfusb_probe(struct usb_device *udev, unsigned int ifnum, const struct usb_device_id *id)
++{
++ const struct firmware *firmware;
++ char device[16];
++ struct usb_interface *iface;
++ struct usb_interface_descriptor *iface_desc;
++ struct usb_endpoint_descriptor *bulk_out_ep;
++ struct usb_endpoint_descriptor *bulk_in_ep;
++ struct hci_dev *hdev;
++ struct bfusb *bfusb;
++
++ BT_DBG("udev %p ifnum %d id %p", udev, ifnum, id);
++
++ /* Check number of endpoints */
++ iface = &udev->actconfig->interface[0];
++ iface_desc = &iface->altsetting[0];
++
++ if (iface_desc->bNumEndpoints < 2)
++ return NULL;
++
++ bulk_out_ep = &iface_desc->endpoint[0];
++ bulk_in_ep = &iface_desc->endpoint[1];
++
++ if (!bulk_out_ep || !bulk_in_ep) {
++ BT_ERR("Bulk endpoints not found");
++ goto done;
++ }
++
++ /* Initialize control structure and load firmware */
++ if (!(bfusb = kmalloc(sizeof(struct bfusb), GFP_KERNEL))) {
++ BT_ERR("Can't allocate memory for control structure");
++ goto done;
++ }
++
++ memset(bfusb, 0, sizeof(struct bfusb));
++
++ bfusb->udev = udev;
++ bfusb->bulk_in_ep = bulk_in_ep->bEndpointAddress;
++ bfusb->bulk_out_ep = bulk_out_ep->bEndpointAddress;
++ bfusb->bulk_pkt_size = bulk_out_ep->wMaxPacketSize;
++
++ bfusb->lock = RW_LOCK_UNLOCKED;
++
++ bfusb->reassembly = NULL;
++
++ skb_queue_head_init(&bfusb->transmit_q);
++ skb_queue_head_init(&bfusb->pending_q);
++ skb_queue_head_init(&bfusb->completed_q);
++
++ snprintf(device, sizeof(device), "bfusb%3.3d%3.3d", udev->bus->busnum, udev->devnum);
++
++ if (request_firmware(&firmware, "bfubase.frm", device) < 0) {
++ BT_ERR("Firmware request failed");
++ goto error;
++ }
++
++ if (bfusb_load_firmware(bfusb, firmware->data, firmware->size) < 0) {
++ BT_ERR("Firmware loading failed");
++ goto release;
++ }
++
++ release_firmware(firmware);
++
++ /* Initialize and register HCI device */
++ hdev = &bfusb->hdev;
++
++ hdev->type = HCI_USB;
++ hdev->driver_data = bfusb;
++
++ hdev->open = bfusb_open;
++ hdev->close = bfusb_close;
++ hdev->flush = bfusb_flush;
++ hdev->send = bfusb_send_frame;
++ hdev->destruct = bfusb_destruct;
++ hdev->ioctl = bfusb_ioctl;
++
++ if (hci_register_dev(hdev) < 0) {
++ BT_ERR("Can't register HCI device");
++ goto error;
++ }
++
++ return bfusb;
++
++release:
++ release_firmware(firmware);
++
++error:
++ kfree(bfusb);
++
++done:
++ return NULL;
++}
++
++static void bfusb_disconnect(struct usb_device *udev, void *ptr)
++{
++ struct bfusb *bfusb = (struct bfusb *) ptr;
++ struct hci_dev *hdev = &bfusb->hdev;
++
++ BT_DBG("udev %p ptr %p", udev, ptr);
++
++ if (!hdev)
++ return;
++
++ bfusb_close(hdev);
++
++ if (hci_unregister_dev(hdev) < 0)
++ BT_ERR("Can't unregister HCI device %s", hdev->name);
++}
++
++static struct usb_driver bfusb_driver = {
++ name: "bfusb",
++ probe: bfusb_probe,
++ disconnect: bfusb_disconnect,
++ id_table: bfusb_table,
++};
++
++static int __init bfusb_init(void)
++{
++ int err;
++
++ BT_INFO("BlueFRITZ! USB driver ver %s", VERSION);
++ BT_INFO("Copyright (C) 2003 Marcel Holtmann <marcel@holtmann.org>");
++
++ if ((err = usb_register(&bfusb_driver)) < 0)
++ BT_ERR("Failed to register BlueFRITZ! USB driver");
++
++ return err;
++}
++
++static void __exit bfusb_cleanup(void)
++{
++ usb_deregister(&bfusb_driver);
++}
++
++module_init(bfusb_init);
++module_exit(bfusb_cleanup);
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueFRITZ! USB driver ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/drivers/bluetooth/bluecard_cs.c linux-2.4.18-mh9/drivers/bluetooth/bluecard_cs.c
+--- linux-2.4.18/drivers/bluetooth/bluecard_cs.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/drivers/bluetooth/bluecard_cs.c Mon Aug 25 18:38:10 2003
+@@ -0,0 +1,1113 @@
++/*
++ *
++ * Bluetooth driver for the Anycom BlueCard (LSE039/LSE041)
++ *
++ * Copyright (C) 2001-2002 Marcel Holtmann <marcel@holtmann.org>
++ *
++ *
++ * 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;
++ *
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ *
++ * The initial developer of the original code is David A. Hinds
++ * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
++ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/timer.h>
++#include <linux/errno.h>
++#include <linux/ptrace.h>
++#include <linux/ioport.h>
++#include <linux/spinlock.h>
++#include <linux/skbuff.h>
++#include <asm/io.h>
++
++#include <pcmcia/version.h>
++#include <pcmcia/cs_types.h>
++#include <pcmcia/cs.h>
++#include <pcmcia/cistpl.h>
++#include <pcmcia/ciscode.h>
++#include <pcmcia/ds.h>
++#include <pcmcia/cisreg.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++
++
++/* ======================== Module parameters ======================== */
++
++
++/* Bit map of interrupts to choose from */
++static u_int irq_mask = 0x86bc;
++static int irq_list[4] = { -1 };
++
++MODULE_PARM(irq_mask, "i");
++MODULE_PARM(irq_list, "1-4i");
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueZ driver for the Anycom BlueCard (LSE039/LSE041)");
++MODULE_LICENSE("GPL");
++
++
++
++/* ======================== Local structures ======================== */
++
++
++typedef struct bluecard_info_t {
++ dev_link_t link;
++ dev_node_t node;
++
++ struct hci_dev hdev;
++
++ spinlock_t lock; /* For serializing operations */
++ struct timer_list timer; /* For LED control */
++
++ struct sk_buff_head txq;
++ unsigned long tx_state;
++
++ unsigned long rx_state;
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++
++ unsigned char ctrl_reg;
++ unsigned long hw_state; /* Status of the hardware and LED control */
++} bluecard_info_t;
++
++
++void bluecard_config(dev_link_t *link);
++void bluecard_release(u_long arg);
++int bluecard_event(event_t event, int priority, event_callback_args_t *args);
++
++static dev_info_t dev_info = "bluecard_cs";
++
++dev_link_t *bluecard_attach(void);
++void bluecard_detach(dev_link_t *);
++
++static dev_link_t *dev_list = NULL;
++
++
++/* Default baud rate: 57600, 115200, 230400 or 460800 */
++#define DEFAULT_BAUD_RATE 230400
++
++
++/* Hardware states */
++#define CARD_READY 1
++#define CARD_HAS_PCCARD_ID 4
++#define CARD_HAS_POWER_LED 5
++#define CARD_HAS_ACTIVITY_LED 6
++
++/* Transmit states */
++#define XMIT_SENDING 1
++#define XMIT_WAKEUP 2
++#define XMIT_BUFFER_NUMBER 5 /* unset = buffer one, set = buffer two */
++#define XMIT_BUF_ONE_READY 6
++#define XMIT_BUF_TWO_READY 7
++#define XMIT_SENDING_READY 8
++
++/* Receiver states */
++#define RECV_WAIT_PACKET_TYPE 0
++#define RECV_WAIT_EVENT_HEADER 1
++#define RECV_WAIT_ACL_HEADER 2
++#define RECV_WAIT_SCO_HEADER 3
++#define RECV_WAIT_DATA 4
++
++/* Special packet types */
++#define PKT_BAUD_RATE_57600 0x80
++#define PKT_BAUD_RATE_115200 0x81
++#define PKT_BAUD_RATE_230400 0x82
++#define PKT_BAUD_RATE_460800 0x83
++
++
++/* These are the register offsets */
++#define REG_COMMAND 0x20
++#define REG_INTERRUPT 0x21
++#define REG_CONTROL 0x22
++#define REG_RX_CONTROL 0x24
++#define REG_CARD_RESET 0x30
++#define REG_LED_CTRL 0x30
++
++/* REG_COMMAND */
++#define REG_COMMAND_TX_BUF_ONE 0x01
++#define REG_COMMAND_TX_BUF_TWO 0x02
++#define REG_COMMAND_RX_BUF_ONE 0x04
++#define REG_COMMAND_RX_BUF_TWO 0x08
++#define REG_COMMAND_RX_WIN_ONE 0x00
++#define REG_COMMAND_RX_WIN_TWO 0x10
++
++/* REG_CONTROL */
++#define REG_CONTROL_BAUD_RATE_57600 0x00
++#define REG_CONTROL_BAUD_RATE_115200 0x01
++#define REG_CONTROL_BAUD_RATE_230400 0x02
++#define REG_CONTROL_BAUD_RATE_460800 0x03
++#define REG_CONTROL_RTS 0x04
++#define REG_CONTROL_BT_ON 0x08
++#define REG_CONTROL_BT_RESET 0x10
++#define REG_CONTROL_BT_RES_PU 0x20
++#define REG_CONTROL_INTERRUPT 0x40
++#define REG_CONTROL_CARD_RESET 0x80
++
++/* REG_RX_CONTROL */
++#define RTS_LEVEL_SHIFT_BITS 0x02
++
++
++
++/* ======================== LED handling routines ======================== */
++
++
++void bluecard_activity_led_timeout(u_long arg)
++{
++ bluecard_info_t *info = (bluecard_info_t *)arg;
++ unsigned int iobase = info->link.io.BasePort1;
++
++ if (test_bit(CARD_HAS_ACTIVITY_LED, &(info->hw_state))) {
++ /* Disable activity LED */
++ outb(0x08 | 0x20, iobase + 0x30);
++ } else {
++ /* Disable power LED */
++ outb(0x00, iobase + 0x30);
++ }
++}
++
++
++static void bluecard_enable_activity_led(bluecard_info_t *info)
++{
++ unsigned int iobase = info->link.io.BasePort1;
++
++ if (test_bit(CARD_HAS_ACTIVITY_LED, &(info->hw_state))) {
++ /* Enable activity LED */
++ outb(0x10 | 0x40, iobase + 0x30);
++
++ /* Stop the LED after HZ/4 */
++ mod_timer(&(info->timer), jiffies + HZ / 4);
++ } else {
++ /* Enable power LED */
++ outb(0x08 | 0x20, iobase + 0x30);
++
++ /* Stop the LED after HZ/2 */
++ mod_timer(&(info->timer), jiffies + HZ / 2);
++ }
++}
++
++
++
++/* ======================== Interrupt handling ======================== */
++
++
++static int bluecard_write(unsigned int iobase, unsigned int offset, __u8 *buf, int len)
++{
++ int i, actual;
++
++ actual = (len > 15) ? 15 : len;
++
++ outb_p(actual, iobase + offset);
++
++ for (i = 0; i < actual; i++)
++ outb_p(buf[i], iobase + offset + i + 1);
++
++ return actual;
++}
++
++
++static void bluecard_write_wakeup(bluecard_info_t *info)
++{
++ if (!info) {
++ printk(KERN_WARNING "bluecard_cs: Call of write_wakeup for unknown device.\n");
++ return;
++ }
++
++ if (!test_bit(XMIT_SENDING_READY, &(info->tx_state)))
++ return;
++
++ if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) {
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++ return;
++ }
++
++ do {
++ register unsigned int iobase = info->link.io.BasePort1;
++ register unsigned int offset;
++ register unsigned char command;
++ register unsigned long ready_bit;
++ register struct sk_buff *skb;
++ register int len;
++
++ clear_bit(XMIT_WAKEUP, &(info->tx_state));
++
++ if (!(info->link.state & DEV_PRESENT))
++ return;
++
++ if (test_bit(XMIT_BUFFER_NUMBER, &(info->tx_state))) {
++ if (!test_bit(XMIT_BUF_TWO_READY, &(info->tx_state)))
++ break;
++ offset = 0x10;
++ command = REG_COMMAND_TX_BUF_TWO;
++ ready_bit = XMIT_BUF_TWO_READY;
++ } else {
++ if (!test_bit(XMIT_BUF_ONE_READY, &(info->tx_state)))
++ break;
++ offset = 0x00;
++ command = REG_COMMAND_TX_BUF_ONE;
++ ready_bit = XMIT_BUF_ONE_READY;
++ }
++
++ if (!(skb = skb_dequeue(&(info->txq))))
++ break;
++
++ if (skb->pkt_type & 0x80) {
++ /* Disable RTS */
++ info->ctrl_reg |= REG_CONTROL_RTS;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++ }
++
++ /* Activate LED */
++ bluecard_enable_activity_led(info);
++
++ /* Send frame */
++ len = bluecard_write(iobase, offset, skb->data, skb->len);
++
++ /* Tell the FPGA to send the data */
++ outb_p(command, iobase + REG_COMMAND);
++
++ /* Mark the buffer as dirty */
++ clear_bit(ready_bit, &(info->tx_state));
++
++ if (skb->pkt_type & 0x80) {
++
++ wait_queue_head_t wait;
++ unsigned char baud_reg;
++
++ switch (skb->pkt_type) {
++ case PKT_BAUD_RATE_460800:
++ baud_reg = REG_CONTROL_BAUD_RATE_460800;
++ break;
++ case PKT_BAUD_RATE_230400:
++ baud_reg = REG_CONTROL_BAUD_RATE_230400;
++ break;
++ case PKT_BAUD_RATE_115200:
++ baud_reg = REG_CONTROL_BAUD_RATE_115200;
++ break;
++ case PKT_BAUD_RATE_57600:
++ /* Fall through... */
++ default:
++ baud_reg = REG_CONTROL_BAUD_RATE_57600;
++ break;
++ }
++
++ /* Wait until the command reaches the baseband */
++ init_waitqueue_head(&wait);
++ interruptible_sleep_on_timeout(&wait, HZ / 10);
++
++ /* Set baud on baseband */
++ info->ctrl_reg &= ~0x03;
++ info->ctrl_reg |= baud_reg;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ /* Enable RTS */
++ info->ctrl_reg &= ~REG_CONTROL_RTS;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ /* Wait before the next HCI packet can be send */
++ interruptible_sleep_on_timeout(&wait, HZ);
++
++ }
++
++ if (len == skb->len) {
++ kfree_skb(skb);
++ } else {
++ skb_pull(skb, len);
++ skb_queue_head(&(info->txq), skb);
++ }
++
++ info->hdev.stat.byte_tx += len;
++
++ /* Change buffer */
++ change_bit(XMIT_BUFFER_NUMBER, &(info->tx_state));
++
++ } while (test_bit(XMIT_WAKEUP, &(info->tx_state)));
++
++ clear_bit(XMIT_SENDING, &(info->tx_state));
++}
++
++
++static int bluecard_read(unsigned int iobase, unsigned int offset, __u8 *buf, int size)
++{
++ int i, n, len;
++
++ outb(REG_COMMAND_RX_WIN_ONE, iobase + REG_COMMAND);
++
++ len = inb(iobase + offset);
++ n = 0;
++ i = 1;
++
++ while (n < len) {
++
++ if (i == 16) {
++ outb(REG_COMMAND_RX_WIN_TWO, iobase + REG_COMMAND);
++ i = 0;
++ }
++
++ buf[n] = inb(iobase + offset + i);
++
++ n++;
++ i++;
++
++ }
++
++ return len;
++}
++
++
++static void bluecard_receive(bluecard_info_t *info, unsigned int offset)
++{
++ unsigned int iobase;
++ unsigned char buf[31];
++ int i, len;
++
++ if (!info) {
++ printk(KERN_WARNING "bluecard_cs: Call of receive for unknown device.\n");
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ if (test_bit(XMIT_SENDING_READY, &(info->tx_state)))
++ bluecard_enable_activity_led(info);
++
++ len = bluecard_read(iobase, offset, buf, sizeof(buf));
++
++ for (i = 0; i < len; i++) {
++
++ /* Allocate packet */
++ if (info->rx_skb == NULL) {
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ if (!(info->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
++ printk(KERN_WARNING "bluecard_cs: Can't allocate mem for new packet.\n");
++ return;
++ }
++ }
++
++ if (info->rx_state == RECV_WAIT_PACKET_TYPE) {
++
++ info->rx_skb->dev = (void *)&(info->hdev);
++ info->rx_skb->pkt_type = buf[i];
++
++ switch (info->rx_skb->pkt_type) {
++
++ case 0x00:
++ /* init packet */
++ if (offset != 0x00) {
++ set_bit(XMIT_BUF_ONE_READY, &(info->tx_state));
++ set_bit(XMIT_BUF_TWO_READY, &(info->tx_state));
++ set_bit(XMIT_SENDING_READY, &(info->tx_state));
++ bluecard_write_wakeup(info);
++ }
++
++ kfree_skb(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ case HCI_EVENT_PKT:
++ info->rx_state = RECV_WAIT_EVENT_HEADER;
++ info->rx_count = HCI_EVENT_HDR_SIZE;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ info->rx_state = RECV_WAIT_ACL_HEADER;
++ info->rx_count = HCI_ACL_HDR_SIZE;
++ break;
++
++ case HCI_SCODATA_PKT:
++ info->rx_state = RECV_WAIT_SCO_HEADER;
++ info->rx_count = HCI_SCO_HDR_SIZE;
++ break;
++
++ default:
++ /* unknown packet */
++ printk(KERN_WARNING "bluecard_cs: Unknown HCI packet with type 0x%02x received.\n", info->rx_skb->pkt_type);
++ info->hdev.stat.err_rx++;
++
++ kfree_skb(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ } else {
++
++ *skb_put(info->rx_skb, 1) = buf[i];
++ info->rx_count--;
++
++ if (info->rx_count == 0) {
++
++ int dlen;
++ hci_event_hdr *eh;
++ hci_acl_hdr *ah;
++ hci_sco_hdr *sh;
++
++ switch (info->rx_state) {
++
++ case RECV_WAIT_EVENT_HEADER:
++ eh = (hci_event_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = eh->plen;
++ break;
++
++ case RECV_WAIT_ACL_HEADER:
++ ah = (hci_acl_hdr *)(info->rx_skb->data);
++ dlen = __le16_to_cpu(ah->dlen);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = dlen;
++ break;
++
++ case RECV_WAIT_SCO_HEADER:
++ sh = (hci_sco_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = sh->dlen;
++ break;
++
++ case RECV_WAIT_DATA:
++ hci_recv_frame(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ }
++
++ }
++
++
++ }
++
++ info->hdev.stat.byte_rx += len;
++}
++
++
++void bluecard_interrupt(int irq, void *dev_inst, struct pt_regs *regs)
++{
++ bluecard_info_t *info = dev_inst;
++ unsigned int iobase;
++ unsigned char reg;
++
++ if (!info) {
++ printk(KERN_WARNING "bluecard_cs: Call of irq %d for unknown device.\n", irq);
++ return;
++ }
++
++ if (!test_bit(CARD_READY, &(info->hw_state)))
++ return;
++
++ iobase = info->link.io.BasePort1;
++
++ spin_lock(&(info->lock));
++
++ /* Disable interrupt */
++ info->ctrl_reg &= ~REG_CONTROL_INTERRUPT;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ reg = inb(iobase + REG_INTERRUPT);
++
++ if ((reg != 0x00) && (reg != 0xff)) {
++
++ if (reg & 0x04) {
++ bluecard_receive(info, 0x00);
++ outb(0x04, iobase + REG_INTERRUPT);
++ outb(REG_COMMAND_RX_BUF_ONE, iobase + REG_COMMAND);
++ }
++
++ if (reg & 0x08) {
++ bluecard_receive(info, 0x10);
++ outb(0x08, iobase + REG_INTERRUPT);
++ outb(REG_COMMAND_RX_BUF_TWO, iobase + REG_COMMAND);
++ }
++
++ if (reg & 0x01) {
++ set_bit(XMIT_BUF_ONE_READY, &(info->tx_state));
++ outb(0x01, iobase + REG_INTERRUPT);
++ bluecard_write_wakeup(info);
++ }
++
++ if (reg & 0x02) {
++ set_bit(XMIT_BUF_TWO_READY, &(info->tx_state));
++ outb(0x02, iobase + REG_INTERRUPT);
++ bluecard_write_wakeup(info);
++ }
++
++ }
++
++ /* Enable interrupt */
++ info->ctrl_reg |= REG_CONTROL_INTERRUPT;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ spin_unlock(&(info->lock));
++}
++
++
++
++/* ======================== Device specific HCI commands ======================== */
++
++
++static int bluecard_hci_set_baud_rate(struct hci_dev *hdev, int baud)
++{
++ bluecard_info_t *info = (bluecard_info_t *)(hdev->driver_data);
++ struct sk_buff *skb;
++
++ /* Ericsson baud rate command */
++ unsigned char cmd[] = { HCI_COMMAND_PKT, 0x09, 0xfc, 0x01, 0x03 };
++
++ if (!(skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
++ printk(KERN_WARNING "bluecard_cs: Can't allocate mem for new packet.\n");
++ return -1;
++ }
++
++ switch (baud) {
++ case 460800:
++ cmd[4] = 0x00;
++ skb->pkt_type = PKT_BAUD_RATE_460800;
++ break;
++ case 230400:
++ cmd[4] = 0x01;
++ skb->pkt_type = PKT_BAUD_RATE_230400;
++ break;
++ case 115200:
++ cmd[4] = 0x02;
++ skb->pkt_type = PKT_BAUD_RATE_115200;
++ break;
++ case 57600:
++ /* Fall through... */
++ default:
++ cmd[4] = 0x03;
++ skb->pkt_type = PKT_BAUD_RATE_57600;
++ break;
++ }
++
++ memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
++
++ skb_queue_tail(&(info->txq), skb);
++
++ bluecard_write_wakeup(info);
++
++ return 0;
++}
++
++
++
++/* ======================== HCI interface ======================== */
++
++
++static int bluecard_hci_flush(struct hci_dev *hdev)
++{
++ bluecard_info_t *info = (bluecard_info_t *)(hdev->driver_data);
++
++ /* Drop TX queue */
++ skb_queue_purge(&(info->txq));
++
++ return 0;
++}
++
++
++static int bluecard_hci_open(struct hci_dev *hdev)
++{
++ bluecard_info_t *info = (bluecard_info_t *)(hdev->driver_data);
++ unsigned int iobase = info->link.io.BasePort1;
++
++ bluecard_hci_set_baud_rate(hdev, DEFAULT_BAUD_RATE);
++
++ if (test_and_set_bit(HCI_RUNNING, &(hdev->flags)))
++ return 0;
++
++ /* Enable LED */
++ outb(0x08 | 0x20, iobase + 0x30);
++
++ return 0;
++}
++
++
++static int bluecard_hci_close(struct hci_dev *hdev)
++{
++ bluecard_info_t *info = (bluecard_info_t *)(hdev->driver_data);
++ unsigned int iobase = info->link.io.BasePort1;
++
++ if (!test_and_clear_bit(HCI_RUNNING, &(hdev->flags)))
++ return 0;
++
++ bluecard_hci_flush(hdev);
++
++ /* Disable LED */
++ outb(0x00, iobase + 0x30);
++
++ return 0;
++}
++
++
++static int bluecard_hci_send_frame(struct sk_buff *skb)
++{
++ bluecard_info_t *info;
++ struct hci_dev *hdev = (struct hci_dev *)(skb->dev);
++
++ if (!hdev) {
++ printk(KERN_WARNING "bluecard_cs: Frame for unknown HCI device (hdev=NULL).");
++ return -ENODEV;
++ }
++
++ info = (bluecard_info_t *)(hdev->driver_data);
++
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++ };
++
++ /* Prepend skb with frame type */
++ memcpy(skb_push(skb, 1), &(skb->pkt_type), 1);
++ skb_queue_tail(&(info->txq), skb);
++
++ bluecard_write_wakeup(info);
++
++ return 0;
++}
++
++
++static void bluecard_hci_destruct(struct hci_dev *hdev)
++{
++}
++
++
++static int bluecard_hci_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
++{
++ return -ENOIOCTLCMD;
++}
++
++
++
++/* ======================== Card services HCI interaction ======================== */
++
++
++int bluecard_open(bluecard_info_t *info)
++{
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev;
++ unsigned char id;
++
++ spin_lock_init(&(info->lock));
++
++ init_timer(&(info->timer));
++ info->timer.function = &bluecard_activity_led_timeout;
++ info->timer.data = (u_long)info;
++
++ skb_queue_head_init(&(info->txq));
++
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ info->rx_skb = NULL;
++
++ id = inb(iobase + 0x30);
++
++ if ((id & 0x0f) == 0x02)
++ set_bit(CARD_HAS_PCCARD_ID, &(info->hw_state));
++
++ if (id & 0x10)
++ set_bit(CARD_HAS_POWER_LED, &(info->hw_state));
++
++ if (id & 0x20)
++ set_bit(CARD_HAS_ACTIVITY_LED, &(info->hw_state));
++
++ /* Reset card */
++ info->ctrl_reg = REG_CONTROL_BT_RESET | REG_CONTROL_CARD_RESET;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ /* Turn FPGA off */
++ outb(0x80, iobase + 0x30);
++
++ /* Wait some time */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ / 100);
++
++ /* Turn FPGA on */
++ outb(0x00, iobase + 0x30);
++
++ /* Activate card */
++ info->ctrl_reg = REG_CONTROL_BT_ON | REG_CONTROL_BT_RES_PU;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ /* Enable interrupt */
++ outb(0xff, iobase + REG_INTERRUPT);
++ info->ctrl_reg |= REG_CONTROL_INTERRUPT;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ /* Start the RX buffers */
++ outb(REG_COMMAND_RX_BUF_ONE, iobase + REG_COMMAND);
++ outb(REG_COMMAND_RX_BUF_TWO, iobase + REG_COMMAND);
++
++ /* Signal that the hardware is ready */
++ set_bit(CARD_READY, &(info->hw_state));
++
++ /* Drop TX queue */
++ skb_queue_purge(&(info->txq));
++
++ /* Control the point at which RTS is enabled */
++ outb((0x0f << RTS_LEVEL_SHIFT_BITS) | 1, iobase + REG_RX_CONTROL);
++
++ /* Timeout before it is safe to send the first HCI packet */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout((HZ * 5) / 4); // or set it to 3/2
++
++
++ /* Initialize and register HCI device */
++
++ hdev = &(info->hdev);
++
++ hdev->type = HCI_PCCARD;
++ hdev->driver_data = info;
++
++ hdev->open = bluecard_hci_open;
++ hdev->close = bluecard_hci_close;
++ hdev->flush = bluecard_hci_flush;
++ hdev->send = bluecard_hci_send_frame;
++ hdev->destruct = bluecard_hci_destruct;
++ hdev->ioctl = bluecard_hci_ioctl;
++
++ if (hci_register_dev(hdev) < 0) {
++ printk(KERN_WARNING "bluecard_cs: Can't register HCI device %s.\n", hdev->name);
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++
++int bluecard_close(bluecard_info_t *info)
++{
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev = &(info->hdev);
++
++ bluecard_hci_close(hdev);
++
++ clear_bit(CARD_READY, &(info->hw_state));
++
++ /* Reset card */
++ info->ctrl_reg = REG_CONTROL_BT_RESET | REG_CONTROL_CARD_RESET;
++ outb(info->ctrl_reg, iobase + REG_CONTROL);
++
++ /* Turn FPGA off */
++ outb(0x80, iobase + 0x30);
++
++ if (hci_unregister_dev(hdev) < 0)
++ printk(KERN_WARNING "bluecard_cs: Can't unregister HCI device %s.\n", hdev->name);
++
++ return 0;
++}
++
++
++
++/* ======================== Card services ======================== */
++
++
++static void cs_error(client_handle_t handle, int func, int ret)
++{
++ error_info_t err = { func, ret };
++
++ CardServices(ReportError, handle, &err);
++}
++
++
++dev_link_t *bluecard_attach(void)
++{
++ bluecard_info_t *info;
++ client_reg_t client_reg;
++ dev_link_t *link;
++ int i, ret;
++
++ /* Create new info device */
++ info = kmalloc(sizeof(*info), GFP_KERNEL);
++ if (!info)
++ return NULL;
++ memset(info, 0, sizeof(*info));
++
++ link = &info->link;
++ link->priv = info;
++
++ link->release.function = &bluecard_release;
++ link->release.data = (u_long)link;
++ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
++ link->io.NumPorts1 = 8;
++ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
++ link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID;
++
++ if (irq_list[0] == -1)
++ link->irq.IRQInfo2 = irq_mask;
++ else
++ for (i = 0; i < 4; i++)
++ link->irq.IRQInfo2 |= 1 << irq_list[i];
++
++ link->irq.Handler = bluecard_interrupt;
++ link->irq.Instance = info;
++
++ link->conf.Attributes = CONF_ENABLE_IRQ;
++ link->conf.Vcc = 50;
++ link->conf.IntType = INT_MEMORY_AND_IO;
++
++ /* Register with Card Services */
++ link->next = dev_list;
++ dev_list = link;
++ client_reg.dev_info = &dev_info;
++ client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
++ client_reg.EventMask =
++ CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
++ CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
++ CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
++ client_reg.event_handler = &bluecard_event;
++ client_reg.Version = 0x0210;
++ client_reg.event_callback_args.client_data = link;
++
++ ret = CardServices(RegisterClient, &link->handle, &client_reg);
++ if (ret != CS_SUCCESS) {
++ cs_error(link->handle, RegisterClient, ret);
++ bluecard_detach(link);
++ return NULL;
++ }
++
++ return link;
++}
++
++
++void bluecard_detach(dev_link_t *link)
++{
++ bluecard_info_t *info = link->priv;
++ dev_link_t **linkp;
++ int ret;
++
++ /* Locate device structure */
++ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
++ if (*linkp == link)
++ break;
++
++ if (*linkp == NULL)
++ return;
++
++ del_timer(&link->release);
++ if (link->state & DEV_CONFIG)
++ bluecard_release((u_long)link);
++
++ if (link->handle) {
++ ret = CardServices(DeregisterClient, link->handle);
++ if (ret != CS_SUCCESS)
++ cs_error(link->handle, DeregisterClient, ret);
++ }
++
++ /* Unlink device structure, free bits */
++ *linkp = link->next;
++
++ kfree(info);
++}
++
++
++static int get_tuple(int fn, client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
++{
++ int i;
++
++ i = CardServices(fn, handle, tuple);
++ if (i != CS_SUCCESS)
++ return CS_NO_MORE_ITEMS;
++
++ i = CardServices(GetTupleData, handle, tuple);
++ if (i != CS_SUCCESS)
++ return i;
++
++ return CardServices(ParseTuple, handle, tuple, parse);
++}
++
++
++#define first_tuple(a, b, c) get_tuple(GetFirstTuple, a, b, c)
++#define next_tuple(a, b, c) get_tuple(GetNextTuple, a, b, c)
++
++void bluecard_config(dev_link_t *link)
++{
++ client_handle_t handle = link->handle;
++ bluecard_info_t *info = link->priv;
++ tuple_t tuple;
++ u_short buf[256];
++ cisparse_t parse;
++ config_info_t config;
++ int i, n, last_ret, last_fn;
++
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++
++ /* Get configuration register information */
++ tuple.DesiredTuple = CISTPL_CONFIG;
++ last_ret = first_tuple(handle, &tuple, &parse);
++ if (last_ret != CS_SUCCESS) {
++ last_fn = ParseTuple;
++ goto cs_failed;
++ }
++ link->conf.ConfigBase = parse.config.base;
++ link->conf.Present = parse.config.rmask[0];
++
++ /* Configure card */
++ link->state |= DEV_CONFIG;
++ i = CardServices(GetConfigurationInfo, handle, &config);
++ link->conf.Vcc = config.Vcc;
++
++ link->conf.ConfigIndex = 0x20;
++ link->io.NumPorts1 = 64;
++ link->io.IOAddrLines = 6;
++
++ for (n = 0; n < 0x400; n += 0x40) {
++ link->io.BasePort1 = n ^ 0x300;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ break;
++ }
++
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIO, i);
++ goto failed;
++ }
++
++ i = CardServices(RequestIRQ, link->handle, &link->irq);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIRQ, i);
++ link->irq.AssignedIRQ = 0;
++ }
++
++ i = CardServices(RequestConfiguration, link->handle, &link->conf);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestConfiguration, i);
++ goto failed;
++ }
++
++ MOD_INC_USE_COUNT;
++
++ if (bluecard_open(info) != 0)
++ goto failed;
++
++ strcpy(info->node.dev_name, info->hdev.name);
++ link->dev = &info->node;
++ link->state &= ~DEV_CONFIG_PENDING;
++
++ return;
++
++cs_failed:
++ cs_error(link->handle, last_fn, last_ret);
++
++failed:
++ bluecard_release((u_long)link);
++}
++
++
++void bluecard_release(u_long arg)
++{
++ dev_link_t *link = (dev_link_t *)arg;
++ bluecard_info_t *info = link->priv;
++
++ if (link->state & DEV_PRESENT)
++ bluecard_close(info);
++
++ MOD_DEC_USE_COUNT;
++
++ link->dev = NULL;
++
++ CardServices(ReleaseConfiguration, link->handle);
++ CardServices(ReleaseIO, link->handle, &link->io);
++ CardServices(ReleaseIRQ, link->handle, &link->irq);
++
++ link->state &= ~DEV_CONFIG;
++}
++
++
++int bluecard_event(event_t event, int priority, event_callback_args_t *args)
++{
++ dev_link_t *link = args->client_data;
++ bluecard_info_t *info = link->priv;
++
++ switch (event) {
++ case CS_EVENT_CARD_REMOVAL:
++ link->state &= ~DEV_PRESENT;
++ if (link->state & DEV_CONFIG) {
++ bluecard_close(info);
++ mod_timer(&link->release, jiffies + HZ / 20);
++ }
++ break;
++ case CS_EVENT_CARD_INSERTION:
++ link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
++ bluecard_config(link);
++ break;
++ case CS_EVENT_PM_SUSPEND:
++ link->state |= DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_RESET_PHYSICAL:
++ if (link->state & DEV_CONFIG)
++ CardServices(ReleaseConfiguration, link->handle);
++ break;
++ case CS_EVENT_PM_RESUME:
++ link->state &= ~DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_CARD_RESET:
++ if (DEV_OK(link))
++ CardServices(RequestConfiguration, link->handle, &link->conf);
++ break;
++ }
++
++ return 0;
++}
++
++
++
++/* ======================== Module initialization ======================== */
++
++
++int __init init_bluecard_cs(void)
++{
++ servinfo_t serv;
++ int err;
++
++ CardServices(GetCardServicesInfo, &serv);
++ if (serv.Revision != CS_RELEASE_CODE) {
++ printk(KERN_NOTICE "bluecard_cs: Card Services release does not match!\n");
++ return -1;
++ }
++
++ err = register_pccard_driver(&dev_info, &bluecard_attach, &bluecard_detach);
++
++ return err;
++}
++
++
++void __exit exit_bluecard_cs(void)
++{
++ unregister_pccard_driver(&dev_info);
++
++ while (dev_list != NULL)
++ bluecard_detach(dev_list);
++}
++
++
++module_init(init_bluecard_cs);
++module_exit(exit_bluecard_cs);
++
++EXPORT_NO_SYMBOLS;
+diff -urN linux-2.4.18/drivers/bluetooth/bt3c_cs.c linux-2.4.18-mh9/drivers/bluetooth/bt3c_cs.c
+--- linux-2.4.18/drivers/bluetooth/bt3c_cs.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/drivers/bluetooth/bt3c_cs.c Mon Aug 25 18:38:10 2003
+@@ -0,0 +1,946 @@
++/*
++ *
++ * Driver for the 3Com Bluetooth PCMCIA card
++ *
++ * Copyright (C) 2001-2002 Marcel Holtmann <marcel@holtmann.org>
++ * Jose Orlando Pereira <jop@di.uminho.pt>
++ *
++ *
++ * 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;
++ *
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ *
++ * The initial developer of the original code is David A. Hinds
++ * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
++ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#define __KERNEL_SYSCALLS__
++
++#include <linux/kernel.h>
++#include <linux/kmod.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/delay.h>
++#include <linux/timer.h>
++#include <linux/errno.h>
++#include <linux/unistd.h>
++#include <linux/ptrace.h>
++#include <linux/ioport.h>
++#include <linux/spinlock.h>
++
++#include <linux/skbuff.h>
++#include <linux/string.h>
++#include <linux/serial.h>
++#include <linux/serial_reg.h>
++#include <asm/system.h>
++#include <asm/bitops.h>
++#include <asm/io.h>
++
++#include <pcmcia/version.h>
++#include <pcmcia/cs_types.h>
++#include <pcmcia/cs.h>
++#include <pcmcia/cistpl.h>
++#include <pcmcia/ciscode.h>
++#include <pcmcia/ds.h>
++#include <pcmcia/cisreg.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++
++
++/* ======================== Module parameters ======================== */
++
++
++/* Bit map of interrupts to choose from */
++static u_int irq_mask = 0xffff;
++static int irq_list[4] = { -1 };
++
++MODULE_PARM(irq_mask, "i");
++MODULE_PARM(irq_list, "1-4i");
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>, Jose Orlando Pereira <jop@di.uminho.pt>");
++MODULE_DESCRIPTION("BlueZ driver for the 3Com Bluetooth PCMCIA card");
++MODULE_LICENSE("GPL");
++
++
++
++/* ======================== Local structures ======================== */
++
++
++typedef struct bt3c_info_t {
++ dev_link_t link;
++ dev_node_t node;
++
++ struct hci_dev hdev;
++
++ spinlock_t lock; /* For serializing operations */
++
++ struct sk_buff_head txq;
++ unsigned long tx_state;
++
++ unsigned long rx_state;
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++} bt3c_info_t;
++
++
++void bt3c_config(dev_link_t *link);
++void bt3c_release(u_long arg);
++int bt3c_event(event_t event, int priority, event_callback_args_t *args);
++
++static dev_info_t dev_info = "bt3c_cs";
++
++dev_link_t *bt3c_attach(void);
++void bt3c_detach(dev_link_t *);
++
++static dev_link_t *dev_list = NULL;
++
++
++/* Transmit states */
++#define XMIT_SENDING 1
++#define XMIT_WAKEUP 2
++#define XMIT_WAITING 8
++
++/* Receiver states */
++#define RECV_WAIT_PACKET_TYPE 0
++#define RECV_WAIT_EVENT_HEADER 1
++#define RECV_WAIT_ACL_HEADER 2
++#define RECV_WAIT_SCO_HEADER 3
++#define RECV_WAIT_DATA 4
++
++
++
++/* ======================== Special I/O functions ======================== */
++
++
++#define DATA_L 0
++#define DATA_H 1
++#define ADDR_L 2
++#define ADDR_H 3
++#define CONTROL 4
++
++
++inline void bt3c_address(unsigned int iobase, unsigned short addr)
++{
++ outb(addr & 0xff, iobase + ADDR_L);
++ outb((addr >> 8) & 0xff, iobase + ADDR_H);
++}
++
++
++inline void bt3c_put(unsigned int iobase, unsigned short value)
++{
++ outb(value & 0xff, iobase + DATA_L);
++ outb((value >> 8) & 0xff, iobase + DATA_H);
++}
++
++
++inline void bt3c_io_write(unsigned int iobase, unsigned short addr, unsigned short value)
++{
++ bt3c_address(iobase, addr);
++ bt3c_put(iobase, value);
++}
++
++
++inline unsigned short bt3c_get(unsigned int iobase)
++{
++ unsigned short value = inb(iobase + DATA_L);
++
++ value |= inb(iobase + DATA_H) << 8;
++
++ return value;
++}
++
++
++inline unsigned short bt3c_read(unsigned int iobase, unsigned short addr)
++{
++ bt3c_address(iobase, addr);
++
++ return bt3c_get(iobase);
++}
++
++
++
++/* ======================== Interrupt handling ======================== */
++
++
++static int bt3c_write(unsigned int iobase, int fifo_size, __u8 *buf, int len)
++{
++ int actual = 0;
++
++ bt3c_address(iobase, 0x7080);
++
++ /* Fill FIFO with current frame */
++ while (actual < len) {
++ /* Transmit next byte */
++ bt3c_put(iobase, buf[actual]);
++ actual++;
++ }
++
++ bt3c_io_write(iobase, 0x7005, actual);
++
++ return actual;
++}
++
++
++static void bt3c_write_wakeup(bt3c_info_t *info, int from)
++{
++ unsigned long flags;
++
++ if (!info) {
++ printk(KERN_WARNING "bt3c_cs: Call of write_wakeup for unknown device.\n");
++ return;
++ }
++
++ if (test_and_set_bit(XMIT_SENDING, &(info->tx_state)))
++ return;
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ do {
++ register unsigned int iobase = info->link.io.BasePort1;
++ register struct sk_buff *skb;
++ register int len;
++
++ if (!(info->link.state & DEV_PRESENT))
++ break;
++
++
++ if (!(skb = skb_dequeue(&(info->txq)))) {
++ clear_bit(XMIT_SENDING, &(info->tx_state));
++ break;
++ }
++
++ /* Send frame */
++ len = bt3c_write(iobase, 256, skb->data, skb->len);
++
++ if (len != skb->len) {
++ printk(KERN_WARNING "bt3c_cs: very strange\n");
++ }
++
++ kfree_skb(skb);
++
++ info->hdev.stat.byte_tx += len;
++
++ } while (0);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++}
++
++
++static void bt3c_receive(bt3c_info_t *info)
++{
++ unsigned int iobase;
++ int size = 0, avail;
++
++ if (!info) {
++ printk(KERN_WARNING "bt3c_cs: Call of receive for unknown device.\n");
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ avail = bt3c_read(iobase, 0x7006);
++ //printk("bt3c_cs: receiving %d bytes\n", avail);
++
++ bt3c_address(iobase, 0x7480);
++ while (size < avail) {
++ size++;
++ info->hdev.stat.byte_rx++;
++
++ /* Allocate packet */
++ if (info->rx_skb == NULL) {
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ if (!(info->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
++ printk(KERN_WARNING "bt3c_cs: Can't allocate mem for new packet.\n");
++ return;
++ }
++ }
++
++
++ if (info->rx_state == RECV_WAIT_PACKET_TYPE) {
++
++ info->rx_skb->dev = (void *)&(info->hdev);
++ info->rx_skb->pkt_type = inb(iobase + DATA_L);
++ inb(iobase + DATA_H);
++ //printk("bt3c: PACKET_TYPE=%02x\n", info->rx_skb->pkt_type);
++
++ switch (info->rx_skb->pkt_type) {
++
++ case HCI_EVENT_PKT:
++ info->rx_state = RECV_WAIT_EVENT_HEADER;
++ info->rx_count = HCI_EVENT_HDR_SIZE;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ info->rx_state = RECV_WAIT_ACL_HEADER;
++ info->rx_count = HCI_ACL_HDR_SIZE;
++ break;
++
++ case HCI_SCODATA_PKT:
++ info->rx_state = RECV_WAIT_SCO_HEADER;
++ info->rx_count = HCI_SCO_HDR_SIZE;
++ break;
++
++ default:
++ /* Unknown packet */
++ printk(KERN_WARNING "bt3c_cs: Unknown HCI packet with type 0x%02x received.\n", info->rx_skb->pkt_type);
++ info->hdev.stat.err_rx++;
++ clear_bit(HCI_RUNNING, &(info->hdev.flags));
++
++ kfree_skb(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ } else {
++
++ __u8 x = inb(iobase + DATA_L);
++
++ *skb_put(info->rx_skb, 1) = x;
++ inb(iobase + DATA_H);
++ info->rx_count--;
++
++ if (info->rx_count == 0) {
++
++ int dlen;
++ hci_event_hdr *eh;
++ hci_acl_hdr *ah;
++ hci_sco_hdr *sh;
++
++ switch (info->rx_state) {
++
++ case RECV_WAIT_EVENT_HEADER:
++ eh = (hci_event_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = eh->plen;
++ break;
++
++ case RECV_WAIT_ACL_HEADER:
++ ah = (hci_acl_hdr *)(info->rx_skb->data);
++ dlen = __le16_to_cpu(ah->dlen);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = dlen;
++ break;
++
++ case RECV_WAIT_SCO_HEADER:
++ sh = (hci_sco_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = sh->dlen;
++ break;
++
++ case RECV_WAIT_DATA:
++ hci_recv_frame(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ }
++
++ }
++
++ }
++
++ bt3c_io_write(iobase, 0x7006, 0x0000);
++}
++
++
++void bt3c_interrupt(int irq, void *dev_inst, struct pt_regs *regs)
++{
++ bt3c_info_t *info = dev_inst;
++ unsigned int iobase;
++ int iir;
++
++ if (!info) {
++ printk(KERN_WARNING "bt3c_cs: Call of irq %d for unknown device.\n", irq);
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ spin_lock(&(info->lock));
++
++ iir = inb(iobase + CONTROL);
++ if (iir & 0x80) {
++ int stat = bt3c_read(iobase, 0x7001);
++
++ if ((stat & 0xff) == 0x7f) {
++ printk(KERN_WARNING "bt3c_cs: STRANGE stat=%04x\n", stat);
++ } else if ((stat & 0xff) != 0xff) {
++ if (stat & 0x0020) {
++ int stat = bt3c_read(iobase, 0x7002) & 0x10;
++ printk(KERN_WARNING "bt3c_cs: antena %s\n", stat ? "OUT" : "IN");
++ }
++ if (stat & 0x0001)
++ bt3c_receive(info);
++ if (stat & 0x0002) {
++ //printk("bt3c_cs: ACK %04x\n", stat);
++ clear_bit(XMIT_SENDING, &(info->tx_state));
++ bt3c_write_wakeup(info, 1);
++ }
++
++ bt3c_io_write(iobase, 0x7001, 0x0000);
++
++ outb(iir, iobase + CONTROL);
++ }
++ }
++
++ spin_unlock(&(info->lock));
++}
++
++
++
++
++/* ======================== HCI interface ======================== */
++
++
++static int bt3c_hci_flush(struct hci_dev *hdev)
++{
++ bt3c_info_t *info = (bt3c_info_t *)(hdev->driver_data);
++
++ /* Drop TX queue */
++ skb_queue_purge(&(info->txq));
++
++ return 0;
++}
++
++
++static int bt3c_hci_open(struct hci_dev *hdev)
++{
++ set_bit(HCI_RUNNING, &(hdev->flags));
++
++ return 0;
++}
++
++
++static int bt3c_hci_close(struct hci_dev *hdev)
++{
++ if (!test_and_clear_bit(HCI_RUNNING, &(hdev->flags)))
++ return 0;
++
++ bt3c_hci_flush(hdev);
++
++ return 0;
++}
++
++
++static int bt3c_hci_send_frame(struct sk_buff *skb)
++{
++ bt3c_info_t *info;
++ struct hci_dev *hdev = (struct hci_dev *)(skb->dev);
++
++ if (!hdev) {
++ printk(KERN_WARNING "bt3c_cs: Frame for unknown HCI device (hdev=NULL).");
++ return -ENODEV;
++ }
++
++ info = (bt3c_info_t *) (hdev->driver_data);
++
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++ };
++
++ /* Prepend skb with frame type */
++ memcpy(skb_push(skb, 1), &(skb->pkt_type), 1);
++ skb_queue_tail(&(info->txq), skb);
++
++ bt3c_write_wakeup(info, 0);
++
++ return 0;
++}
++
++
++static void bt3c_hci_destruct(struct hci_dev *hdev)
++{
++}
++
++
++static int bt3c_hci_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
++{
++ return -ENOIOCTLCMD;
++}
++
++
++
++/* ======================== User mode firmware loader ======================== */
++
++
++#define FW_LOADER "/sbin/bluefw"
++static int errno;
++
++
++static int bt3c_fw_loader_exec(void *dev)
++{
++ char *argv[] = { FW_LOADER, "pccard", dev, NULL };
++ char *envp[] = { "HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL };
++ int err;
++
++ err = exec_usermodehelper(FW_LOADER, argv, envp);
++ if (err)
++ printk(KERN_WARNING "bt3c_cs: Failed to exec \"%s pccard %s\".\n", FW_LOADER, (char *)dev);
++
++ return err;
++}
++
++
++static int bt3c_firmware_load(bt3c_info_t *info)
++{
++ sigset_t tmpsig;
++ char dev[16];
++ pid_t pid;
++ int result;
++
++ /* Check if root fs is mounted */
++ if (!current->fs->root) {
++ printk(KERN_WARNING "bt3c_cs: Root filesystem is not mounted.\n");
++ return -EPERM;
++ }
++
++ sprintf(dev, "%04x", info->link.io.BasePort1);
++
++ pid = kernel_thread(bt3c_fw_loader_exec, (void *)dev, 0);
++ if (pid < 0) {
++ printk(KERN_WARNING "bt3c_cs: Forking of kernel thread failed (errno=%d).\n", -pid);
++ return pid;
++ }
++
++ /* Block signals, everything but SIGKILL/SIGSTOP */
++ spin_lock_irq(&current->sigmask_lock);
++ tmpsig = current->blocked;
++ siginitsetinv(&current->blocked, sigmask(SIGKILL) | sigmask(SIGSTOP));
++ recalc_sigpending(current);
++ spin_unlock_irq(&current->sigmask_lock);
++
++ result = waitpid(pid, NULL, __WCLONE);
++
++ /* Allow signals again */
++ spin_lock_irq(&current->sigmask_lock);
++ current->blocked = tmpsig;
++ recalc_sigpending(current);
++ spin_unlock_irq(&current->sigmask_lock);
++
++ if (result != pid) {
++ printk(KERN_WARNING "bt3c_cs: Waiting for pid %d failed (errno=%d).\n", pid, -result);
++ return -result;
++ }
++
++ return 0;
++}
++
++
++
++/* ======================== Card services HCI interaction ======================== */
++
++
++int bt3c_open(bt3c_info_t *info)
++{
++ struct hci_dev *hdev;
++ int err;
++
++ spin_lock_init(&(info->lock));
++
++ skb_queue_head_init(&(info->txq));
++
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ info->rx_skb = NULL;
++
++ /* Load firmware */
++
++ if ((err = bt3c_firmware_load(info)) < 0)
++ return err;
++
++ /* Timeout before it is safe to send the first HCI packet */
++
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ);
++
++
++ /* Initialize and register HCI device */
++
++ hdev = &(info->hdev);
++
++ hdev->type = HCI_PCCARD;
++ hdev->driver_data = info;
++
++ hdev->open = bt3c_hci_open;
++ hdev->close = bt3c_hci_close;
++ hdev->flush = bt3c_hci_flush;
++ hdev->send = bt3c_hci_send_frame;
++ hdev->destruct = bt3c_hci_destruct;
++ hdev->ioctl = bt3c_hci_ioctl;
++
++ if (hci_register_dev(hdev) < 0) {
++ printk(KERN_WARNING "bt3c_cs: Can't register HCI device %s.\n", hdev->name);
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++
++int bt3c_close(bt3c_info_t *info)
++{
++ struct hci_dev *hdev = &(info->hdev);
++
++ bt3c_hci_close(hdev);
++
++ if (hci_unregister_dev(hdev) < 0)
++ printk(KERN_WARNING "bt3c_cs: Can't unregister HCI device %s.\n", hdev->name);
++
++ return 0;
++}
++
++
++
++/* ======================== Card services ======================== */
++
++
++static void cs_error(client_handle_t handle, int func, int ret)
++{
++ error_info_t err = { func, ret };
++
++ CardServices(ReportError, handle, &err);
++}
++
++
++dev_link_t *bt3c_attach(void)
++{
++ bt3c_info_t *info;
++ client_reg_t client_reg;
++ dev_link_t *link;
++ int i, ret;
++
++ /* Create new info device */
++ info = kmalloc(sizeof(*info), GFP_KERNEL);
++ if (!info)
++ return NULL;
++ memset(info, 0, sizeof(*info));
++
++ link = &info->link;
++ link->priv = info;
++
++ link->release.function = &bt3c_release;
++ link->release.data = (u_long)link;
++ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
++ link->io.NumPorts1 = 8;
++ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
++ link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID;
++
++ if (irq_list[0] == -1)
++ link->irq.IRQInfo2 = irq_mask;
++ else
++ for (i = 0; i < 4; i++)
++ link->irq.IRQInfo2 |= 1 << irq_list[i];
++
++ link->irq.Handler = bt3c_interrupt;
++ link->irq.Instance = info;
++
++ link->conf.Attributes = CONF_ENABLE_IRQ;
++ link->conf.Vcc = 50;
++ link->conf.IntType = INT_MEMORY_AND_IO;
++
++ /* Register with Card Services */
++ link->next = dev_list;
++ dev_list = link;
++ client_reg.dev_info = &dev_info;
++ client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
++ client_reg.EventMask =
++ CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
++ CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
++ CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
++ client_reg.event_handler = &bt3c_event;
++ client_reg.Version = 0x0210;
++ client_reg.event_callback_args.client_data = link;
++
++ ret = CardServices(RegisterClient, &link->handle, &client_reg);
++ if (ret != CS_SUCCESS) {
++ cs_error(link->handle, RegisterClient, ret);
++ bt3c_detach(link);
++ return NULL;
++ }
++
++ return link;
++}
++
++
++void bt3c_detach(dev_link_t *link)
++{
++ bt3c_info_t *info = link->priv;
++ dev_link_t **linkp;
++ int ret;
++
++ /* Locate device structure */
++ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
++ if (*linkp == link)
++ break;
++
++ if (*linkp == NULL)
++ return;
++
++ del_timer(&link->release);
++
++ if (link->state & DEV_CONFIG)
++ bt3c_release((u_long)link);
++
++ if (link->handle) {
++ ret = CardServices(DeregisterClient, link->handle);
++ if (ret != CS_SUCCESS)
++ cs_error(link->handle, DeregisterClient, ret);
++ }
++
++ /* Unlink device structure, free bits */
++ *linkp = link->next;
++
++ kfree(info);
++}
++
++
++static int get_tuple(int fn, client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
++{
++ int i;
++
++ i = CardServices(fn, handle, tuple);
++ if (i != CS_SUCCESS)
++ return CS_NO_MORE_ITEMS;
++
++ i = CardServices(GetTupleData, handle, tuple);
++ if (i != CS_SUCCESS)
++ return i;
++
++ return CardServices(ParseTuple, handle, tuple, parse);
++}
++
++
++#define first_tuple(a, b, c) get_tuple(GetFirstTuple, a, b, c)
++#define next_tuple(a, b, c) get_tuple(GetNextTuple, a, b, c)
++
++void bt3c_config(dev_link_t *link)
++{
++ static ioaddr_t base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 };
++ client_handle_t handle = link->handle;
++ bt3c_info_t *info = link->priv;
++ tuple_t tuple;
++ u_short buf[256];
++ cisparse_t parse;
++ cistpl_cftable_entry_t *cf = &parse.cftable_entry;
++ config_info_t config;
++ int i, j, try, last_ret, last_fn;
++
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++
++ /* Get configuration register information */
++ tuple.DesiredTuple = CISTPL_CONFIG;
++ last_ret = first_tuple(handle, &tuple, &parse);
++ if (last_ret != CS_SUCCESS) {
++ last_fn = ParseTuple;
++ goto cs_failed;
++ }
++ link->conf.ConfigBase = parse.config.base;
++ link->conf.Present = parse.config.rmask[0];
++
++ /* Configure card */
++ link->state |= DEV_CONFIG;
++ i = CardServices(GetConfigurationInfo, handle, &config);
++ link->conf.Vcc = config.Vcc;
++
++ /* First pass: look for a config entry that looks normal. */
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++ tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
++ /* Two tries: without IO aliases, then with aliases */
++ for (try = 0; try < 2; try++) {
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if (i != CS_SUCCESS)
++ goto next_entry;
++ if (cf->vpp1.present & (1 << CISTPL_POWER_VNOM))
++ link->conf.Vpp1 = link->conf.Vpp2 = cf->vpp1.param[CISTPL_POWER_VNOM] / 10000;
++ if ((cf->io.nwin > 0) && (cf->io.win[0].len == 8) && (cf->io.win[0].base != 0)) {
++ link->conf.ConfigIndex = cf->index;
++ link->io.BasePort1 = cf->io.win[0].base;
++ link->io.IOAddrLines = (try == 0) ? 16 : cf->io.flags & CISTPL_IO_LINES_MASK;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ goto found_port;
++ }
++next_entry:
++ i = next_tuple(handle, &tuple, &parse);
++ }
++ }
++
++ /* Second pass: try to find an entry that isn't picky about
++ its base address, then try to grab any standard serial port
++ address, and finally try to get any free port. */
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if ((i == CS_SUCCESS) && (cf->io.nwin > 0) && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) {
++ link->conf.ConfigIndex = cf->index;
++ for (j = 0; j < 5; j++) {
++ link->io.BasePort1 = base[j];
++ link->io.IOAddrLines = base[j] ? 16 : 3;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ goto found_port;
++ }
++ }
++ i = next_tuple(handle, &tuple, &parse);
++ }
++
++found_port:
++ if (i != CS_SUCCESS) {
++ printk(KERN_NOTICE "bt3c_cs: No usable port range found. Giving up.\n");
++ cs_error(link->handle, RequestIO, i);
++ goto failed;
++ }
++
++ i = CardServices(RequestIRQ, link->handle, &link->irq);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIRQ, i);
++ link->irq.AssignedIRQ = 0;
++ }
++
++ i = CardServices(RequestConfiguration, link->handle, &link->conf);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestConfiguration, i);
++ goto failed;
++ }
++
++ MOD_INC_USE_COUNT;
++
++ if (bt3c_open(info) != 0)
++ goto failed;
++
++ strcpy(info->node.dev_name, info->hdev.name);
++ link->dev = &info->node;
++ link->state &= ~DEV_CONFIG_PENDING;
++
++ return;
++
++cs_failed:
++ cs_error(link->handle, last_fn, last_ret);
++
++failed:
++ bt3c_release((u_long)link);
++}
++
++
++void bt3c_release(u_long arg)
++{
++ dev_link_t *link = (dev_link_t *)arg;
++ bt3c_info_t *info = link->priv;
++
++ if (link->state & DEV_PRESENT)
++ bt3c_close(info);
++
++ MOD_DEC_USE_COUNT;
++
++ link->dev = NULL;
++
++ CardServices(ReleaseConfiguration, link->handle);
++ CardServices(ReleaseIO, link->handle, &link->io);
++ CardServices(ReleaseIRQ, link->handle, &link->irq);
++
++ link->state &= ~DEV_CONFIG;
++}
++
++
++int bt3c_event(event_t event, int priority, event_callback_args_t *args)
++{
++ dev_link_t *link = args->client_data;
++ bt3c_info_t *info = link->priv;
++
++ switch (event) {
++ case CS_EVENT_CARD_REMOVAL:
++ link->state &= ~DEV_PRESENT;
++ if (link->state & DEV_CONFIG) {
++ bt3c_close(info);
++ mod_timer(&link->release, jiffies + HZ / 20);
++ }
++ break;
++ case CS_EVENT_CARD_INSERTION:
++ link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
++ bt3c_config(link);
++ break;
++ case CS_EVENT_PM_SUSPEND:
++ link->state |= DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_RESET_PHYSICAL:
++ if (link->state & DEV_CONFIG)
++ CardServices(ReleaseConfiguration, link->handle);
++ break;
++ case CS_EVENT_PM_RESUME:
++ link->state &= ~DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_CARD_RESET:
++ if (DEV_OK(link))
++ CardServices(RequestConfiguration, link->handle, &link->conf);
++ break;
++ }
++
++ return 0;
++}
++
++
++
++/* ======================== Module initialization ======================== */
++
++
++int __init init_bt3c_cs(void)
++{
++ servinfo_t serv;
++ int err;
++
++ CardServices(GetCardServicesInfo, &serv);
++ if (serv.Revision != CS_RELEASE_CODE) {
++ printk(KERN_NOTICE "bt3c_cs: Card Services release does not match!\n");
++ return -1;
++ }
++
++ err = register_pccard_driver(&dev_info, &bt3c_attach, &bt3c_detach);
++
++ return err;
++}
++
++
++void __exit exit_bt3c_cs(void)
++{
++ unregister_pccard_driver(&dev_info);
++
++ while (dev_list != NULL)
++ bt3c_detach(dev_list);
++}
++
++
++module_init(init_bt3c_cs);
++module_exit(exit_bt3c_cs);
++
++EXPORT_NO_SYMBOLS;
+diff -urN linux-2.4.18/drivers/bluetooth/btuart_cs.c linux-2.4.18-mh9/drivers/bluetooth/btuart_cs.c
+--- linux-2.4.18/drivers/bluetooth/btuart_cs.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/drivers/bluetooth/btuart_cs.c Mon Aug 25 18:38:10 2003
+@@ -0,0 +1,906 @@
++/*
++ *
++ * Driver for Bluetooth PCMCIA cards with HCI UART interface
++ *
++ * Copyright (C) 2001-2002 Marcel Holtmann <marcel@holtmann.org>
++ *
++ *
++ * 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;
++ *
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ *
++ * The initial developer of the original code is David A. Hinds
++ * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
++ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/timer.h>
++#include <linux/errno.h>
++#include <linux/ptrace.h>
++#include <linux/ioport.h>
++#include <linux/spinlock.h>
++
++#include <linux/skbuff.h>
++#include <linux/string.h>
++#include <linux/serial.h>
++#include <linux/serial_reg.h>
++#include <asm/system.h>
++#include <asm/bitops.h>
++#include <asm/io.h>
++
++#include <pcmcia/version.h>
++#include <pcmcia/cs_types.h>
++#include <pcmcia/cs.h>
++#include <pcmcia/cistpl.h>
++#include <pcmcia/ciscode.h>
++#include <pcmcia/ds.h>
++#include <pcmcia/cisreg.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++
++
++/* ======================== Module parameters ======================== */
++
++
++/* Bit map of interrupts to choose from */
++static u_int irq_mask = 0xffff;
++static int irq_list[4] = { -1 };
++
++MODULE_PARM(irq_mask, "i");
++MODULE_PARM(irq_list, "1-4i");
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueZ driver for Bluetooth PCMCIA cards with HCI UART interface");
++MODULE_LICENSE("GPL");
++
++
++
++/* ======================== Local structures ======================== */
++
++
++typedef struct btuart_info_t {
++ dev_link_t link;
++ dev_node_t node;
++
++ struct hci_dev hdev;
++
++ spinlock_t lock; /* For serializing operations */
++
++ struct sk_buff_head txq;
++ unsigned long tx_state;
++
++ unsigned long rx_state;
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++} btuart_info_t;
++
++
++void btuart_config(dev_link_t *link);
++void btuart_release(u_long arg);
++int btuart_event(event_t event, int priority, event_callback_args_t *args);
++
++static dev_info_t dev_info = "btuart_cs";
++
++dev_link_t *btuart_attach(void);
++void btuart_detach(dev_link_t *);
++
++static dev_link_t *dev_list = NULL;
++
++
++/* Maximum baud rate */
++#define SPEED_MAX 115200
++
++/* Default baud rate: 57600, 115200, 230400 or 460800 */
++#define DEFAULT_BAUD_RATE 115200
++
++
++/* Transmit states */
++#define XMIT_SENDING 1
++#define XMIT_WAKEUP 2
++#define XMIT_WAITING 8
++
++/* Receiver states */
++#define RECV_WAIT_PACKET_TYPE 0
++#define RECV_WAIT_EVENT_HEADER 1
++#define RECV_WAIT_ACL_HEADER 2
++#define RECV_WAIT_SCO_HEADER 3
++#define RECV_WAIT_DATA 4
++
++
++
++/* ======================== Interrupt handling ======================== */
++
++
++static int btuart_write(unsigned int iobase, int fifo_size, __u8 *buf, int len)
++{
++ int actual = 0;
++
++ /* Tx FIFO should be empty */
++ if (!(inb(iobase + UART_LSR) & UART_LSR_THRE))
++ return 0;
++
++ /* Fill FIFO with current frame */
++ while ((fifo_size-- > 0) && (actual < len)) {
++ /* Transmit next byte */
++ outb(buf[actual], iobase + UART_TX);
++ actual++;
++ }
++
++ return actual;
++}
++
++
++static void btuart_write_wakeup(btuart_info_t *info)
++{
++ if (!info) {
++ printk(KERN_WARNING "btuart_cs: Call of write_wakeup for unknown device.\n");
++ return;
++ }
++
++ if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) {
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++ return;
++ }
++
++ do {
++ register unsigned int iobase = info->link.io.BasePort1;
++ register struct sk_buff *skb;
++ register int len;
++
++ clear_bit(XMIT_WAKEUP, &(info->tx_state));
++
++ if (!(info->link.state & DEV_PRESENT))
++ return;
++
++ if (!(skb = skb_dequeue(&(info->txq))))
++ break;
++
++ /* Send frame */
++ len = btuart_write(iobase, 16, skb->data, skb->len);
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++
++ if (len == skb->len) {
++ kfree_skb(skb);
++ } else {
++ skb_pull(skb, len);
++ skb_queue_head(&(info->txq), skb);
++ }
++
++ info->hdev.stat.byte_tx += len;
++
++ } while (test_bit(XMIT_WAKEUP, &(info->tx_state)));
++
++ clear_bit(XMIT_SENDING, &(info->tx_state));
++}
++
++
++static void btuart_receive(btuart_info_t *info)
++{
++ unsigned int iobase;
++ int boguscount = 0;
++
++ if (!info) {
++ printk(KERN_WARNING "btuart_cs: Call of receive for unknown device.\n");
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ do {
++ info->hdev.stat.byte_rx++;
++
++ /* Allocate packet */
++ if (info->rx_skb == NULL) {
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ if (!(info->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
++ printk(KERN_WARNING "btuart_cs: Can't allocate mem for new packet.\n");
++ return;
++ }
++ }
++
++ if (info->rx_state == RECV_WAIT_PACKET_TYPE) {
++
++ info->rx_skb->dev = (void *)&(info->hdev);
++ info->rx_skb->pkt_type = inb(iobase + UART_RX);
++
++ switch (info->rx_skb->pkt_type) {
++
++ case HCI_EVENT_PKT:
++ info->rx_state = RECV_WAIT_EVENT_HEADER;
++ info->rx_count = HCI_EVENT_HDR_SIZE;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ info->rx_state = RECV_WAIT_ACL_HEADER;
++ info->rx_count = HCI_ACL_HDR_SIZE;
++ break;
++
++ case HCI_SCODATA_PKT:
++ info->rx_state = RECV_WAIT_SCO_HEADER;
++ info->rx_count = HCI_SCO_HDR_SIZE;
++ break;
++
++ default:
++ /* Unknown packet */
++ printk(KERN_WARNING "btuart_cs: Unknown HCI packet with type 0x%02x received.\n", info->rx_skb->pkt_type);
++ info->hdev.stat.err_rx++;
++ clear_bit(HCI_RUNNING, &(info->hdev.flags));
++
++ kfree_skb(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ } else {
++
++ *skb_put(info->rx_skb, 1) = inb(iobase + UART_RX);
++ info->rx_count--;
++
++ if (info->rx_count == 0) {
++
++ int dlen;
++ hci_event_hdr *eh;
++ hci_acl_hdr *ah;
++ hci_sco_hdr *sh;
++
++
++ switch (info->rx_state) {
++
++ case RECV_WAIT_EVENT_HEADER:
++ eh = (hci_event_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = eh->plen;
++ break;
++
++ case RECV_WAIT_ACL_HEADER:
++ ah = (hci_acl_hdr *)(info->rx_skb->data);
++ dlen = __le16_to_cpu(ah->dlen);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = dlen;
++ break;
++
++ case RECV_WAIT_SCO_HEADER:
++ sh = (hci_sco_hdr *)(info->rx_skb->data);
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = sh->dlen;
++ break;
++
++ case RECV_WAIT_DATA:
++ hci_recv_frame(info->rx_skb);
++ info->rx_skb = NULL;
++ break;
++
++ }
++
++ }
++
++ }
++
++ /* Make sure we don't stay here to long */
++ if (boguscount++ > 16)
++ break;
++
++ } while (inb(iobase + UART_LSR) & UART_LSR_DR);
++}
++
++
++void btuart_interrupt(int irq, void *dev_inst, struct pt_regs *regs)
++{
++ btuart_info_t *info = dev_inst;
++ unsigned int iobase;
++ int boguscount = 0;
++ int iir, lsr;
++
++ if (!info) {
++ printk(KERN_WARNING "btuart_cs: Call of irq %d for unknown device.\n", irq);
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ spin_lock(&(info->lock));
++
++ iir = inb(iobase + UART_IIR) & UART_IIR_ID;
++ while (iir) {
++
++ /* Clear interrupt */
++ lsr = inb(iobase + UART_LSR);
++
++ switch (iir) {
++ case UART_IIR_RLSI:
++ printk(KERN_NOTICE "btuart_cs: RLSI\n");
++ break;
++ case UART_IIR_RDI:
++ /* Receive interrupt */
++ btuart_receive(info);
++ break;
++ case UART_IIR_THRI:
++ if (lsr & UART_LSR_THRE) {
++ /* Transmitter ready for data */
++ btuart_write_wakeup(info);
++ }
++ break;
++ default:
++ printk(KERN_NOTICE "btuart_cs: Unhandled IIR=%#x\n", iir);
++ break;
++ }
++
++ /* Make sure we don't stay here to long */
++ if (boguscount++ > 100)
++ break;
++
++ iir = inb(iobase + UART_IIR) & UART_IIR_ID;
++
++ }
++
++ spin_unlock(&(info->lock));
++}
++
++
++static void btuart_change_speed(btuart_info_t *info, unsigned int speed)
++{
++ unsigned long flags;
++ unsigned int iobase;
++ int fcr; /* FIFO control reg */
++ int lcr; /* Line control reg */
++ int divisor;
++
++ if (!info) {
++ printk(KERN_WARNING "btuart_cs: Call of change speed for unknown device.\n");
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Turn off interrupts */
++ outb(0, iobase + UART_IER);
++
++ divisor = SPEED_MAX / speed;
++
++ fcr = UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT;
++
++ /*
++ * Use trigger level 1 to avoid 3 ms. timeout delay at 9600 bps, and
++ * almost 1,7 ms at 19200 bps. At speeds above that we can just forget
++ * about this timeout since it will always be fast enough.
++ */
++
++ if (speed < 38400)
++ fcr |= UART_FCR_TRIGGER_1;
++ else
++ fcr |= UART_FCR_TRIGGER_14;
++
++ /* Bluetooth cards use 8N1 */
++ lcr = UART_LCR_WLEN8;
++
++ outb(UART_LCR_DLAB | lcr, iobase + UART_LCR); /* Set DLAB */
++ outb(divisor & 0xff, iobase + UART_DLL); /* Set speed */
++ outb(divisor >> 8, iobase + UART_DLM);
++ outb(lcr, iobase + UART_LCR); /* Set 8N1 */
++ outb(fcr, iobase + UART_FCR); /* Enable FIFO's */
++
++ /* Turn on interrups */
++ outb(UART_IER_RLSI | UART_IER_RDI | UART_IER_THRI, iobase + UART_IER);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++}
++
++
++
++/* ======================== HCI interface ======================== */
++
++
++static int btuart_hci_flush(struct hci_dev *hdev)
++{
++ btuart_info_t *info = (btuart_info_t *)(hdev->driver_data);
++
++ /* Drop TX queue */
++ skb_queue_purge(&(info->txq));
++
++ return 0;
++}
++
++
++static int btuart_hci_open(struct hci_dev *hdev)
++{
++ set_bit(HCI_RUNNING, &(hdev->flags));
++
++ return 0;
++}
++
++
++static int btuart_hci_close(struct hci_dev *hdev)
++{
++ if (!test_and_clear_bit(HCI_RUNNING, &(hdev->flags)))
++ return 0;
++
++ btuart_hci_flush(hdev);
++
++ return 0;
++}
++
++
++static int btuart_hci_send_frame(struct sk_buff *skb)
++{
++ btuart_info_t *info;
++ struct hci_dev *hdev = (struct hci_dev *)(skb->dev);
++
++ if (!hdev) {
++ printk(KERN_WARNING "btuart_cs: Frame for unknown HCI device (hdev=NULL).");
++ return -ENODEV;
++ }
++
++ info = (btuart_info_t *)(hdev->driver_data);
++
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++ };
++
++ /* Prepend skb with frame type */
++ memcpy(skb_push(skb, 1), &(skb->pkt_type), 1);
++ skb_queue_tail(&(info->txq), skb);
++
++ btuart_write_wakeup(info);
++
++ return 0;
++}
++
++
++static void btuart_hci_destruct(struct hci_dev *hdev)
++{
++}
++
++
++static int btuart_hci_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
++{
++ return -ENOIOCTLCMD;
++}
++
++
++
++/* ======================== Card services HCI interaction ======================== */
++
++
++int btuart_open(btuart_info_t *info)
++{
++ unsigned long flags;
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev;
++
++ spin_lock_init(&(info->lock));
++
++ skb_queue_head_init(&(info->txq));
++
++ info->rx_state = RECV_WAIT_PACKET_TYPE;
++ info->rx_count = 0;
++ info->rx_skb = NULL;
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Reset UART */
++ outb(0, iobase + UART_MCR);
++
++ /* Turn off interrupts */
++ outb(0, iobase + UART_IER);
++
++ /* Initialize UART */
++ outb(UART_LCR_WLEN8, iobase + UART_LCR); /* Reset DLAB */
++ outb((UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2), iobase + UART_MCR);
++
++ /* Turn on interrupts */
++ // outb(UART_IER_RLSI | UART_IER_RDI | UART_IER_THRI, iobase + UART_IER);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++
++ btuart_change_speed(info, DEFAULT_BAUD_RATE);
++
++ /* Timeout before it is safe to send the first HCI packet */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ);
++
++
++ /* Initialize and register HCI device */
++
++ hdev = &(info->hdev);
++
++ hdev->type = HCI_PCCARD;
++ hdev->driver_data = info;
++
++ hdev->open = btuart_hci_open;
++ hdev->close = btuart_hci_close;
++ hdev->flush = btuart_hci_flush;
++ hdev->send = btuart_hci_send_frame;
++ hdev->destruct = btuart_hci_destruct;
++ hdev->ioctl = btuart_hci_ioctl;
++
++ if (hci_register_dev(hdev) < 0) {
++ printk(KERN_WARNING "btuart_cs: Can't register HCI device %s.\n", hdev->name);
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++
++int btuart_close(btuart_info_t *info)
++{
++ unsigned long flags;
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev = &(info->hdev);
++
++ btuart_hci_close(hdev);
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Reset UART */
++ outb(0, iobase + UART_MCR);
++
++ /* Turn off interrupts */
++ outb(0, iobase + UART_IER);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++
++ if (hci_unregister_dev(hdev) < 0)
++ printk(KERN_WARNING "btuart_cs: Can't unregister HCI device %s.\n", hdev->name);
++
++ return 0;
++}
++
++
++
++/* ======================== Card services ======================== */
++
++
++static void cs_error(client_handle_t handle, int func, int ret)
++{
++ error_info_t err = { func, ret };
++
++ CardServices(ReportError, handle, &err);
++}
++
++
++dev_link_t *btuart_attach(void)
++{
++ btuart_info_t *info;
++ client_reg_t client_reg;
++ dev_link_t *link;
++ int i, ret;
++
++ /* Create new info device */
++ info = kmalloc(sizeof(*info), GFP_KERNEL);
++ if (!info)
++ return NULL;
++ memset(info, 0, sizeof(*info));
++
++ link = &info->link;
++ link->priv = info;
++
++ link->release.function = &btuart_release;
++ link->release.data = (u_long)link;
++ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
++ link->io.NumPorts1 = 8;
++ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
++ link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID;
++
++ if (irq_list[0] == -1)
++ link->irq.IRQInfo2 = irq_mask;
++ else
++ for (i = 0; i < 4; i++)
++ link->irq.IRQInfo2 |= 1 << irq_list[i];
++
++ link->irq.Handler = btuart_interrupt;
++ link->irq.Instance = info;
++
++ link->conf.Attributes = CONF_ENABLE_IRQ;
++ link->conf.Vcc = 50;
++ link->conf.IntType = INT_MEMORY_AND_IO;
++
++ /* Register with Card Services */
++ link->next = dev_list;
++ dev_list = link;
++ client_reg.dev_info = &dev_info;
++ client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
++ client_reg.EventMask =
++ CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
++ CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
++ CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
++ client_reg.event_handler = &btuart_event;
++ client_reg.Version = 0x0210;
++ client_reg.event_callback_args.client_data = link;
++
++ ret = CardServices(RegisterClient, &link->handle, &client_reg);
++ if (ret != CS_SUCCESS) {
++ cs_error(link->handle, RegisterClient, ret);
++ btuart_detach(link);
++ return NULL;
++ }
++
++ return link;
++}
++
++
++void btuart_detach(dev_link_t *link)
++{
++ btuart_info_t *info = link->priv;
++ dev_link_t **linkp;
++ int ret;
++
++ /* Locate device structure */
++ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
++ if (*linkp == link)
++ break;
++
++ if (*linkp == NULL)
++ return;
++
++ del_timer(&link->release);
++ if (link->state & DEV_CONFIG)
++ btuart_release((u_long)link);
++
++ if (link->handle) {
++ ret = CardServices(DeregisterClient, link->handle);
++ if (ret != CS_SUCCESS)
++ cs_error(link->handle, DeregisterClient, ret);
++ }
++
++ /* Unlink device structure, free bits */
++ *linkp = link->next;
++
++ kfree(info);
++}
++
++
++static int get_tuple(int fn, client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
++{
++ int i;
++
++ i = CardServices(fn, handle, tuple);
++ if (i != CS_SUCCESS)
++ return CS_NO_MORE_ITEMS;
++
++ i = CardServices(GetTupleData, handle, tuple);
++ if (i != CS_SUCCESS)
++ return i;
++
++ return CardServices(ParseTuple, handle, tuple, parse);
++}
++
++
++#define first_tuple(a, b, c) get_tuple(GetFirstTuple, a, b, c)
++#define next_tuple(a, b, c) get_tuple(GetNextTuple, a, b, c)
++
++void btuart_config(dev_link_t *link)
++{
++ static ioaddr_t base[5] = { 0x3f8, 0x2f8, 0x3e8, 0x2e8, 0x0 };
++ client_handle_t handle = link->handle;
++ btuart_info_t *info = link->priv;
++ tuple_t tuple;
++ u_short buf[256];
++ cisparse_t parse;
++ cistpl_cftable_entry_t *cf = &parse.cftable_entry;
++ config_info_t config;
++ int i, j, try, last_ret, last_fn;
++
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++
++ /* Get configuration register information */
++ tuple.DesiredTuple = CISTPL_CONFIG;
++ last_ret = first_tuple(handle, &tuple, &parse);
++ if (last_ret != CS_SUCCESS) {
++ last_fn = ParseTuple;
++ goto cs_failed;
++ }
++ link->conf.ConfigBase = parse.config.base;
++ link->conf.Present = parse.config.rmask[0];
++
++ /* Configure card */
++ link->state |= DEV_CONFIG;
++ i = CardServices(GetConfigurationInfo, handle, &config);
++ link->conf.Vcc = config.Vcc;
++
++ /* First pass: look for a config entry that looks normal. */
++ tuple.TupleData = (cisdata_t *) buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++ tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
++ /* Two tries: without IO aliases, then with aliases */
++ for (try = 0; try < 2; try++) {
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if (i != CS_SUCCESS)
++ goto next_entry;
++ if (cf->vpp1.present & (1 << CISTPL_POWER_VNOM))
++ link->conf.Vpp1 = link->conf.Vpp2 = cf->vpp1.param[CISTPL_POWER_VNOM] / 10000;
++ if ((cf->io.nwin > 0) && (cf->io.win[0].len == 8) && (cf->io.win[0].base != 0)) {
++ link->conf.ConfigIndex = cf->index;
++ link->io.BasePort1 = cf->io.win[0].base;
++ link->io.IOAddrLines = (try == 0) ? 16 : cf->io.flags & CISTPL_IO_LINES_MASK;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ goto found_port;
++ }
++next_entry:
++ i = next_tuple(handle, &tuple, &parse);
++ }
++ }
++
++ /* Second pass: try to find an entry that isn't picky about
++ its base address, then try to grab any standard serial port
++ address, and finally try to get any free port. */
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if ((i == CS_SUCCESS) && (cf->io.nwin > 0)
++ && ((cf->io.flags & CISTPL_IO_LINES_MASK) <= 3)) {
++ link->conf.ConfigIndex = cf->index;
++ for (j = 0; j < 5; j++) {
++ link->io.BasePort1 = base[j];
++ link->io.IOAddrLines = base[j] ? 16 : 3;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ goto found_port;
++ }
++ }
++ i = next_tuple(handle, &tuple, &parse);
++ }
++
++found_port:
++ if (i != CS_SUCCESS) {
++ printk(KERN_NOTICE "btuart_cs: No usable port range found. Giving up.\n");
++ cs_error(link->handle, RequestIO, i);
++ goto failed;
++ }
++
++ i = CardServices(RequestIRQ, link->handle, &link->irq);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIRQ, i);
++ link->irq.AssignedIRQ = 0;
++ }
++
++ i = CardServices(RequestConfiguration, link->handle, &link->conf);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestConfiguration, i);
++ goto failed;
++ }
++
++ MOD_INC_USE_COUNT;
++
++ if (btuart_open(info) != 0)
++ goto failed;
++
++ strcpy(info->node.dev_name, info->hdev.name);
++ link->dev = &info->node;
++ link->state &= ~DEV_CONFIG_PENDING;
++
++ return;
++
++cs_failed:
++ cs_error(link->handle, last_fn, last_ret);
++
++failed:
++ btuart_release((u_long) link);
++}
++
++
++void btuart_release(u_long arg)
++{
++ dev_link_t *link = (dev_link_t *)arg;
++ btuart_info_t *info = link->priv;
++
++ if (link->state & DEV_PRESENT)
++ btuart_close(info);
++
++ MOD_DEC_USE_COUNT;
++
++ link->dev = NULL;
++
++ CardServices(ReleaseConfiguration, link->handle);
++ CardServices(ReleaseIO, link->handle, &link->io);
++ CardServices(ReleaseIRQ, link->handle, &link->irq);
++
++ link->state &= ~DEV_CONFIG;
++}
++
++
++int btuart_event(event_t event, int priority, event_callback_args_t *args)
++{
++ dev_link_t *link = args->client_data;
++ btuart_info_t *info = link->priv;
++
++ switch (event) {
++ case CS_EVENT_CARD_REMOVAL:
++ link->state &= ~DEV_PRESENT;
++ if (link->state & DEV_CONFIG) {
++ btuart_close(info);
++ mod_timer(&link->release, jiffies + HZ / 20);
++ }
++ break;
++ case CS_EVENT_CARD_INSERTION:
++ link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
++ btuart_config(link);
++ break;
++ case CS_EVENT_PM_SUSPEND:
++ link->state |= DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_RESET_PHYSICAL:
++ if (link->state & DEV_CONFIG)
++ CardServices(ReleaseConfiguration, link->handle);
++ break;
++ case CS_EVENT_PM_RESUME:
++ link->state &= ~DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_CARD_RESET:
++ if (DEV_OK(link))
++ CardServices(RequestConfiguration, link->handle, &link->conf);
++ break;
++ }
++
++ return 0;
++}
++
++
++
++/* ======================== Module initialization ======================== */
++
++
++int __init init_btuart_cs(void)
++{
++ servinfo_t serv;
++ int err;
++
++ CardServices(GetCardServicesInfo, &serv);
++ if (serv.Revision != CS_RELEASE_CODE) {
++ printk(KERN_NOTICE "btuart_cs: Card Services release does not match!\n");
++ return -1;
++ }
++
++ err = register_pccard_driver(&dev_info, &btuart_attach, &btuart_detach);
++
++ return err;
++}
++
++
++void __exit exit_btuart_cs(void)
++{
++ unregister_pccard_driver(&dev_info);
++
++ while (dev_list != NULL)
++ btuart_detach(dev_list);
++}
++
++
++module_init(init_btuart_cs);
++module_exit(exit_btuart_cs);
++
++EXPORT_NO_SYMBOLS;
+diff -urN linux-2.4.18/drivers/bluetooth/dtl1_cs.c linux-2.4.18-mh9/drivers/bluetooth/dtl1_cs.c
+--- linux-2.4.18/drivers/bluetooth/dtl1_cs.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/drivers/bluetooth/dtl1_cs.c Mon Aug 25 18:38:10 2003
+@@ -0,0 +1,858 @@
++/*
++ *
++ * A driver for Nokia Connectivity Card DTL-1 devices
++ *
++ * Copyright (C) 2001-2002 Marcel Holtmann <marcel@holtmann.org>
++ *
++ *
++ * 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;
++ *
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ *
++ * The initial developer of the original code is David A. Hinds
++ * <dahinds@users.sourceforge.net>. Portions created by David A. Hinds
++ * are Copyright (C) 1999 David A. Hinds. All Rights Reserved.
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/timer.h>
++#include <linux/errno.h>
++#include <linux/ptrace.h>
++#include <linux/ioport.h>
++#include <linux/spinlock.h>
++
++#include <linux/skbuff.h>
++#include <linux/string.h>
++#include <linux/serial.h>
++#include <linux/serial_reg.h>
++#include <asm/system.h>
++#include <asm/bitops.h>
++#include <asm/io.h>
++
++#include <pcmcia/version.h>
++#include <pcmcia/cs_types.h>
++#include <pcmcia/cs.h>
++#include <pcmcia/cistpl.h>
++#include <pcmcia/ciscode.h>
++#include <pcmcia/ds.h>
++#include <pcmcia/cisreg.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++
++
++/* ======================== Module parameters ======================== */
++
++
++/* Bit map of interrupts to choose from */
++static u_int irq_mask = 0xffff;
++static int irq_list[4] = { -1 };
++
++MODULE_PARM(irq_mask, "i");
++MODULE_PARM(irq_list, "1-4i");
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueZ driver for Nokia Connectivity Card DTL-1");
++MODULE_LICENSE("GPL");
++
++
++
++/* ======================== Local structures ======================== */
++
++
++typedef struct dtl1_info_t {
++ dev_link_t link;
++ dev_node_t node;
++
++ struct hci_dev hdev;
++
++ spinlock_t lock; /* For serializing operations */
++
++ unsigned long flowmask; /* HCI flow mask */
++ int ri_latch;
++
++ struct sk_buff_head txq;
++ unsigned long tx_state;
++
++ unsigned long rx_state;
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++} dtl1_info_t;
++
++
++void dtl1_config(dev_link_t *link);
++void dtl1_release(u_long arg);
++int dtl1_event(event_t event, int priority, event_callback_args_t *args);
++
++static dev_info_t dev_info = "dtl1_cs";
++
++dev_link_t *dtl1_attach(void);
++void dtl1_detach(dev_link_t *);
++
++static dev_link_t *dev_list = NULL;
++
++
++/* Transmit states */
++#define XMIT_SENDING 1
++#define XMIT_WAKEUP 2
++#define XMIT_WAITING 8
++
++/* Receiver States */
++#define RECV_WAIT_NSH 0
++#define RECV_WAIT_DATA 1
++
++
++typedef struct {
++ u8 type;
++ u8 zero;
++ u16 len;
++} __attribute__ ((packed)) nsh_t; /* Nokia Specific Header */
++
++#define NSHL 4 /* Nokia Specific Header Length */
++
++
++
++/* ======================== Interrupt handling ======================== */
++
++
++static int dtl1_write(unsigned int iobase, int fifo_size, __u8 *buf, int len)
++{
++ int actual = 0;
++
++ /* Tx FIFO should be empty */
++ if (!(inb(iobase + UART_LSR) & UART_LSR_THRE))
++ return 0;
++
++ /* Fill FIFO with current frame */
++ while ((fifo_size-- > 0) && (actual < len)) {
++ /* Transmit next byte */
++ outb(buf[actual], iobase + UART_TX);
++ actual++;
++ }
++
++ return actual;
++}
++
++
++static void dtl1_write_wakeup(dtl1_info_t *info)
++{
++ if (!info) {
++ printk(KERN_WARNING "dtl1_cs: Call of write_wakeup for unknown device.\n");
++ return;
++ }
++
++ if (test_bit(XMIT_WAITING, &(info->tx_state))) {
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++ return;
++ }
++
++ if (test_and_set_bit(XMIT_SENDING, &(info->tx_state))) {
++ set_bit(XMIT_WAKEUP, &(info->tx_state));
++ return;
++ }
++
++ do {
++ register unsigned int iobase = info->link.io.BasePort1;
++ register struct sk_buff *skb;
++ register int len;
++
++ clear_bit(XMIT_WAKEUP, &(info->tx_state));
++
++ if (!(info->link.state & DEV_PRESENT))
++ return;
++
++ if (!(skb = skb_dequeue(&(info->txq))))
++ break;
++
++ /* Send frame */
++ len = dtl1_write(iobase, 32, skb->data, skb->len);
++
++ if (len == skb->len) {
++ set_bit(XMIT_WAITING, &(info->tx_state));
++ kfree_skb(skb);
++ } else {
++ skb_pull(skb, len);
++ skb_queue_head(&(info->txq), skb);
++ }
++
++ info->hdev.stat.byte_tx += len;
++
++ } while (test_bit(XMIT_WAKEUP, &(info->tx_state)));
++
++ clear_bit(XMIT_SENDING, &(info->tx_state));
++}
++
++
++static void dtl1_control(dtl1_info_t *info, struct sk_buff *skb)
++{
++ u8 flowmask = *(u8 *)skb->data;
++ int i;
++
++ printk(KERN_INFO "dtl1_cs: Nokia control data = ");
++ for (i = 0; i < skb->len; i++) {
++ printk("%02x ", skb->data[i]);
++ }
++ printk("\n");
++
++ /* transition to active state */
++ if (((info->flowmask & 0x07) == 0) && ((flowmask & 0x07) != 0)) {
++ clear_bit(XMIT_WAITING, &(info->tx_state));
++ dtl1_write_wakeup(info);
++ }
++
++ info->flowmask = flowmask;
++
++ kfree_skb(skb);
++}
++
++
++static void dtl1_receive(dtl1_info_t *info)
++{
++ unsigned int iobase;
++ nsh_t *nsh;
++ int boguscount = 0;
++
++ if (!info) {
++ printk(KERN_WARNING "dtl1_cs: Call of receive for unknown device.\n");
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ do {
++ info->hdev.stat.byte_rx++;
++
++ /* Allocate packet */
++ if (info->rx_skb == NULL)
++ if (!(info->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
++ printk(KERN_WARNING "dtl1_cs: Can't allocate mem for new packet.\n");
++ info->rx_state = RECV_WAIT_NSH;
++ info->rx_count = NSHL;
++ return;
++ }
++
++ *skb_put(info->rx_skb, 1) = inb(iobase + UART_RX);
++ nsh = (nsh_t *)info->rx_skb->data;
++
++ info->rx_count--;
++
++ if (info->rx_count == 0) {
++
++ switch (info->rx_state) {
++ case RECV_WAIT_NSH:
++ info->rx_state = RECV_WAIT_DATA;
++ info->rx_count = nsh->len + (nsh->len & 0x0001);
++ break;
++ case RECV_WAIT_DATA:
++ info->rx_skb->pkt_type = nsh->type;
++
++ /* remove PAD byte if it exists */
++ if (nsh->len & 0x0001) {
++ info->rx_skb->tail--;
++ info->rx_skb->len--;
++ }
++
++ /* remove NSH */
++ skb_pull(info->rx_skb, NSHL);
++
++ switch (info->rx_skb->pkt_type) {
++ case 0x80:
++ /* control data for the Nokia Card */
++ dtl1_control(info, info->rx_skb);
++ break;
++ case 0x82:
++ case 0x83:
++ case 0x84:
++ /* send frame to the HCI layer */
++ info->rx_skb->dev = (void *)&(info->hdev);
++ info->rx_skb->pkt_type &= 0x0f;
++ hci_recv_frame(info->rx_skb);
++ break;
++ default:
++ /* unknown packet */
++ printk(KERN_WARNING "dtl1_cs: Unknown HCI packet with type 0x%02x received.\n", info->rx_skb->pkt_type);
++ kfree_skb(info->rx_skb);
++ break;
++ }
++
++ info->rx_state = RECV_WAIT_NSH;
++ info->rx_count = NSHL;
++ info->rx_skb = NULL;
++ break;
++ }
++
++ }
++
++ /* Make sure we don't stay here to long */
++ if (boguscount++ > 32)
++ break;
++
++ } while (inb(iobase + UART_LSR) & UART_LSR_DR);
++}
++
++
++void dtl1_interrupt(int irq, void *dev_inst, struct pt_regs *regs)
++{
++ dtl1_info_t *info = dev_inst;
++ unsigned int iobase;
++ unsigned char msr;
++ int boguscount = 0;
++ int iir, lsr;
++
++ if (!info) {
++ printk(KERN_WARNING "dtl1_cs: Call of irq %d for unknown device.\n", irq);
++ return;
++ }
++
++ iobase = info->link.io.BasePort1;
++
++ spin_lock(&(info->lock));
++
++ iir = inb(iobase + UART_IIR) & UART_IIR_ID;
++ while (iir) {
++
++ /* Clear interrupt */
++ lsr = inb(iobase + UART_LSR);
++
++ switch (iir) {
++ case UART_IIR_RLSI:
++ printk(KERN_NOTICE "dtl1_cs: RLSI\n");
++ break;
++ case UART_IIR_RDI:
++ /* Receive interrupt */
++ dtl1_receive(info);
++ break;
++ case UART_IIR_THRI:
++ if (lsr & UART_LSR_THRE) {
++ /* Transmitter ready for data */
++ dtl1_write_wakeup(info);
++ }
++ break;
++ default:
++ printk(KERN_NOTICE "dtl1_cs: Unhandled IIR=%#x\n", iir);
++ break;
++ }
++
++ /* Make sure we don't stay here to long */
++ if (boguscount++ > 100)
++ break;
++
++ iir = inb(iobase + UART_IIR) & UART_IIR_ID;
++
++ }
++
++ msr = inb(iobase + UART_MSR);
++
++ if (info->ri_latch ^ (msr & UART_MSR_RI)) {
++ info->ri_latch = msr & UART_MSR_RI;
++ clear_bit(XMIT_WAITING, &(info->tx_state));
++ dtl1_write_wakeup(info);
++ }
++
++ spin_unlock(&(info->lock));
++}
++
++
++
++/* ======================== HCI interface ======================== */
++
++
++static int dtl1_hci_open(struct hci_dev *hdev)
++{
++ set_bit(HCI_RUNNING, &(hdev->flags));
++
++ return 0;
++}
++
++
++static int dtl1_hci_flush(struct hci_dev *hdev)
++{
++ dtl1_info_t *info = (dtl1_info_t *)(hdev->driver_data);
++
++ /* Drop TX queue */
++ skb_queue_purge(&(info->txq));
++
++ return 0;
++}
++
++
++static int dtl1_hci_close(struct hci_dev *hdev)
++{
++ if (!test_and_clear_bit(HCI_RUNNING, &(hdev->flags)))
++ return 0;
++
++ dtl1_hci_flush(hdev);
++
++ return 0;
++}
++
++
++static int dtl1_hci_send_frame(struct sk_buff *skb)
++{
++ dtl1_info_t *info;
++ struct hci_dev *hdev = (struct hci_dev *)(skb->dev);
++ struct sk_buff *s;
++ nsh_t nsh;
++
++ if (!hdev) {
++ printk(KERN_WARNING "dtl1_cs: Frame for unknown HCI device (hdev=NULL).");
++ return -ENODEV;
++ }
++
++ info = (dtl1_info_t *)(hdev->driver_data);
++
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ nsh.type = 0x81;
++ break;
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ nsh.type = 0x82;
++ break;
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ nsh.type = 0x83;
++ break;
++ };
++
++ nsh.zero = 0;
++ nsh.len = skb->len;
++
++ s = bluez_skb_alloc(NSHL + skb->len + 1, GFP_ATOMIC);
++ skb_reserve(s, NSHL);
++ memcpy(skb_put(s, skb->len), skb->data, skb->len);
++ if (skb->len & 0x0001)
++ *skb_put(s, 1) = 0; /* PAD */
++
++ /* Prepend skb with Nokia frame header and queue */
++ memcpy(skb_push(s, NSHL), &nsh, NSHL);
++ skb_queue_tail(&(info->txq), s);
++
++ dtl1_write_wakeup(info);
++
++ kfree_skb(skb);
++
++ return 0;
++}
++
++
++static void dtl1_hci_destruct(struct hci_dev *hdev)
++{
++}
++
++
++static int dtl1_hci_ioctl(struct hci_dev *hdev, unsigned int cmd, unsigned long arg)
++{
++ return -ENOIOCTLCMD;
++}
++
++
++
++/* ======================== Card services HCI interaction ======================== */
++
++
++int dtl1_open(dtl1_info_t *info)
++{
++ unsigned long flags;
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev;
++
++ spin_lock_init(&(info->lock));
++
++ skb_queue_head_init(&(info->txq));
++
++ info->rx_state = RECV_WAIT_NSH;
++ info->rx_count = NSHL;
++ info->rx_skb = NULL;
++
++ set_bit(XMIT_WAITING, &(info->tx_state));
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Reset UART */
++ outb(0, iobase + UART_MCR);
++
++ /* Turn off interrupts */
++ outb(0, iobase + UART_IER);
++
++ /* Initialize UART */
++ outb(UART_LCR_WLEN8, iobase + UART_LCR); /* Reset DLAB */
++ outb((UART_MCR_DTR | UART_MCR_RTS | UART_MCR_OUT2), iobase + UART_MCR);
++
++ info->ri_latch = inb(info->link.io.BasePort1 + UART_MSR) & UART_MSR_RI;
++
++ /* Turn on interrupts */
++ outb(UART_IER_RLSI | UART_IER_RDI | UART_IER_THRI, iobase + UART_IER);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++
++ /* Timeout before it is safe to send the first HCI packet */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule_timeout(HZ * 2);
++
++
++ /* Initialize and register HCI device */
++
++ hdev = &(info->hdev);
++
++ hdev->type = HCI_PCCARD;
++ hdev->driver_data = info;
++
++ hdev->open = dtl1_hci_open;
++ hdev->close = dtl1_hci_close;
++ hdev->flush = dtl1_hci_flush;
++ hdev->send = dtl1_hci_send_frame;
++ hdev->destruct = dtl1_hci_destruct;
++ hdev->ioctl = dtl1_hci_ioctl;
++
++ if (hci_register_dev(hdev) < 0) {
++ printk(KERN_WARNING "dtl1_cs: Can't register HCI device %s.\n", hdev->name);
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++
++int dtl1_close(dtl1_info_t *info)
++{
++ unsigned long flags;
++ unsigned int iobase = info->link.io.BasePort1;
++ struct hci_dev *hdev = &(info->hdev);
++
++ dtl1_hci_close(hdev);
++
++ spin_lock_irqsave(&(info->lock), flags);
++
++ /* Reset UART */
++ outb(0, iobase + UART_MCR);
++
++ /* Turn off interrupts */
++ outb(0, iobase + UART_IER);
++
++ spin_unlock_irqrestore(&(info->lock), flags);
++
++ if (hci_unregister_dev(hdev) < 0)
++ printk(KERN_WARNING "dtl1_cs: Can't unregister HCI device %s.\n", hdev->name);
++
++ return 0;
++}
++
++
++
++/* ======================== Card services ======================== */
++
++
++static void cs_error(client_handle_t handle, int func, int ret)
++{
++ error_info_t err = { func, ret };
++
++ CardServices(ReportError, handle, &err);
++}
++
++
++dev_link_t *dtl1_attach(void)
++{
++ dtl1_info_t *info;
++ client_reg_t client_reg;
++ dev_link_t *link;
++ int i, ret;
++
++ /* Create new info device */
++ info = kmalloc(sizeof(*info), GFP_KERNEL);
++ if (!info)
++ return NULL;
++ memset(info, 0, sizeof(*info));
++
++ link = &info->link;
++ link->priv = info;
++
++ link->release.function = &dtl1_release;
++ link->release.data = (u_long)link;
++ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
++ link->io.NumPorts1 = 8;
++ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
++ link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID;
++
++ if (irq_list[0] == -1)
++ link->irq.IRQInfo2 = irq_mask;
++ else
++ for (i = 0; i < 4; i++)
++ link->irq.IRQInfo2 |= 1 << irq_list[i];
++
++ link->irq.Handler = dtl1_interrupt;
++ link->irq.Instance = info;
++
++ link->conf.Attributes = CONF_ENABLE_IRQ;
++ link->conf.Vcc = 50;
++ link->conf.IntType = INT_MEMORY_AND_IO;
++
++ /* Register with Card Services */
++ link->next = dev_list;
++ dev_list = link;
++ client_reg.dev_info = &dev_info;
++ client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;
++ client_reg.EventMask =
++ CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |
++ CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |
++ CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;
++ client_reg.event_handler = &dtl1_event;
++ client_reg.Version = 0x0210;
++ client_reg.event_callback_args.client_data = link;
++
++ ret = CardServices(RegisterClient, &link->handle, &client_reg);
++ if (ret != CS_SUCCESS) {
++ cs_error(link->handle, RegisterClient, ret);
++ dtl1_detach(link);
++ return NULL;
++ }
++
++ return link;
++}
++
++
++void dtl1_detach(dev_link_t *link)
++{
++ dtl1_info_t *info = link->priv;
++ dev_link_t **linkp;
++ int ret;
++
++ /* Locate device structure */
++ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
++ if (*linkp == link)
++ break;
++
++ if (*linkp == NULL)
++ return;
++
++ del_timer(&link->release);
++ if (link->state & DEV_CONFIG)
++ dtl1_release((u_long)link);
++
++ if (link->handle) {
++ ret = CardServices(DeregisterClient, link->handle);
++ if (ret != CS_SUCCESS)
++ cs_error(link->handle, DeregisterClient, ret);
++ }
++
++ /* Unlink device structure, free bits */
++ *linkp = link->next;
++
++ kfree(info);
++}
++
++
++static int get_tuple(int fn, client_handle_t handle, tuple_t *tuple, cisparse_t *parse)
++{
++ int i;
++
++ i = CardServices(fn, handle, tuple);
++ if (i != CS_SUCCESS)
++ return CS_NO_MORE_ITEMS;
++
++ i = CardServices(GetTupleData, handle, tuple);
++ if (i != CS_SUCCESS)
++ return i;
++
++ return CardServices(ParseTuple, handle, tuple, parse);
++}
++
++
++#define first_tuple(a, b, c) get_tuple(GetFirstTuple, a, b, c)
++#define next_tuple(a, b, c) get_tuple(GetNextTuple, a, b, c)
++
++void dtl1_config(dev_link_t *link)
++{
++ client_handle_t handle = link->handle;
++ dtl1_info_t *info = link->priv;
++ tuple_t tuple;
++ u_short buf[256];
++ cisparse_t parse;
++ cistpl_cftable_entry_t *cf = &parse.cftable_entry;
++ config_info_t config;
++ int i, last_ret, last_fn;
++
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++
++ /* Get configuration register information */
++ tuple.DesiredTuple = CISTPL_CONFIG;
++ last_ret = first_tuple(handle, &tuple, &parse);
++ if (last_ret != CS_SUCCESS) {
++ last_fn = ParseTuple;
++ goto cs_failed;
++ }
++ link->conf.ConfigBase = parse.config.base;
++ link->conf.Present = parse.config.rmask[0];
++
++ /* Configure card */
++ link->state |= DEV_CONFIG;
++ i = CardServices(GetConfigurationInfo, handle, &config);
++ link->conf.Vcc = config.Vcc;
++
++ tuple.TupleData = (cisdata_t *)buf;
++ tuple.TupleOffset = 0;
++ tuple.TupleDataMax = 255;
++ tuple.Attributes = 0;
++ tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;
++
++ /* Look for a generic full-sized window */
++ link->io.NumPorts1 = 8;
++ i = first_tuple(handle, &tuple, &parse);
++ while (i != CS_NO_MORE_ITEMS) {
++ if ((i == CS_SUCCESS) && (cf->io.nwin == 1) && (cf->io.win[0].len > 8)) {
++ link->conf.ConfigIndex = cf->index;
++ link->io.BasePort1 = cf->io.win[0].base;
++ link->io.NumPorts1 = cf->io.win[0].len; /*yo */
++ link->io.IOAddrLines = cf->io.flags & CISTPL_IO_LINES_MASK;
++ i = CardServices(RequestIO, link->handle, &link->io);
++ if (i == CS_SUCCESS)
++ break;
++ }
++ i = next_tuple(handle, &tuple, &parse);
++ }
++
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIO, i);
++ goto failed;
++ }
++
++ i = CardServices(RequestIRQ, link->handle, &link->irq);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestIRQ, i);
++ link->irq.AssignedIRQ = 0;
++ }
++
++ i = CardServices(RequestConfiguration, link->handle, &link->conf);
++ if (i != CS_SUCCESS) {
++ cs_error(link->handle, RequestConfiguration, i);
++ goto failed;
++ }
++
++ MOD_INC_USE_COUNT;
++
++ if (dtl1_open(info) != 0)
++ goto failed;
++
++ strcpy(info->node.dev_name, info->hdev.name);
++ link->dev = &info->node;
++ link->state &= ~DEV_CONFIG_PENDING;
++
++ return;
++
++cs_failed:
++ cs_error(link->handle, last_fn, last_ret);
++
++failed:
++ dtl1_release((u_long)link);
++}
++
++
++void dtl1_release(u_long arg)
++{
++ dev_link_t *link = (dev_link_t *)arg;
++ dtl1_info_t *info = link->priv;
++
++ if (link->state & DEV_PRESENT)
++ dtl1_close(info);
++
++ MOD_DEC_USE_COUNT;
++
++ link->dev = NULL;
++
++ CardServices(ReleaseConfiguration, link->handle);
++ CardServices(ReleaseIO, link->handle, &link->io);
++ CardServices(ReleaseIRQ, link->handle, &link->irq);
++
++ link->state &= ~DEV_CONFIG;
++}
++
++
++int dtl1_event(event_t event, int priority, event_callback_args_t *args)
++{
++ dev_link_t *link = args->client_data;
++ dtl1_info_t *info = link->priv;
++
++ switch (event) {
++ case CS_EVENT_CARD_REMOVAL:
++ link->state &= ~DEV_PRESENT;
++ if (link->state & DEV_CONFIG) {
++ dtl1_close(info);
++ mod_timer(&link->release, jiffies + HZ / 20);
++ }
++ break;
++ case CS_EVENT_CARD_INSERTION:
++ link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;
++ dtl1_config(link);
++ break;
++ case CS_EVENT_PM_SUSPEND:
++ link->state |= DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_RESET_PHYSICAL:
++ if (link->state & DEV_CONFIG)
++ CardServices(ReleaseConfiguration, link->handle);
++ break;
++ case CS_EVENT_PM_RESUME:
++ link->state &= ~DEV_SUSPEND;
++ /* Fall through... */
++ case CS_EVENT_CARD_RESET:
++ if (DEV_OK(link))
++ CardServices(RequestConfiguration, link->handle, &link->conf);
++ break;
++ }
++
++ return 0;
++}
++
++
++
++/* ======================== Module initialization ======================== */
++
++
++int __init init_dtl1_cs(void)
++{
++ servinfo_t serv;
++ int err;
++
++ CardServices(GetCardServicesInfo, &serv);
++ if (serv.Revision != CS_RELEASE_CODE) {
++ printk(KERN_NOTICE "dtl1_cs: Card Services release does not match!\n");
++ return -1;
++ }
++
++ err = register_pccard_driver(&dev_info, &dtl1_attach, &dtl1_detach);
++
++ return err;
++}
++
++
++void __exit exit_dtl1_cs(void)
++{
++ unregister_pccard_driver(&dev_info);
++
++ while (dev_list != NULL)
++ dtl1_detach(dev_list);
++}
++
++
++module_init(init_dtl1_cs);
++module_exit(exit_dtl1_cs);
++
++EXPORT_NO_SYMBOLS;
+diff -urN linux-2.4.18/drivers/bluetooth/hci_bcsp.c linux-2.4.18-mh9/drivers/bluetooth/hci_bcsp.c
+--- linux-2.4.18/drivers/bluetooth/hci_bcsp.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/drivers/bluetooth/hci_bcsp.c Mon Aug 25 18:38:10 2003
+@@ -0,0 +1,710 @@
++/*
++ BlueCore Serial Protocol (BCSP) for Linux Bluetooth stack (BlueZ).
++ Copyright 2002 by Fabrizio Gennari <fabrizio.gennari@philips.com>
++
++ Based on
++ hci_h4.c by Maxim Krasnyansky <maxk@qualcomm.com>
++ ABCSP by Carl Orsborn <cjo@csr.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_bcsp.c,v 1.2 2002/09/26 05:05:14 maxk Exp $
++ */
++
++#define VERSION "0.1"
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/version.h>
++#include <linux/config.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/fcntl.h>
++#include <linux/interrupt.h>
++#include <linux/ptrace.h>
++#include <linux/poll.h>
++
++#include <linux/slab.h>
++#include <linux/tty.h>
++#include <linux/errno.h>
++#include <linux/string.h>
++#include <linux/signal.h>
++#include <linux/ioctl.h>
++#include <linux/skbuff.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include "hci_uart.h"
++#include "hci_bcsp.h"
++
++#ifndef HCI_UART_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#undef BT_DMP
++#define BT_DMP( A... )
++#endif
++
++/* ---- BCSP CRC calculation ---- */
++
++/* Table for calculating CRC for polynomial 0x1021, LSB processed first,
++initial value 0xffff, bits shifted in reverse order. */
++
++static const u16 crc_table[] = {
++ 0x0000, 0x1081, 0x2102, 0x3183,
++ 0x4204, 0x5285, 0x6306, 0x7387,
++ 0x8408, 0x9489, 0xa50a, 0xb58b,
++ 0xc60c, 0xd68d, 0xe70e, 0xf78f
++};
++
++/* Initialise the crc calculator */
++#define BCSP_CRC_INIT(x) x = 0xffff
++
++/*
++ Update crc with next data byte
++
++ Implementation note
++ The data byte is treated as two nibbles. The crc is generated
++ in reverse, i.e., bits are fed into the register from the top.
++*/
++static void bcsp_crc_update(u16 *crc, u8 d)
++{
++ u16 reg = *crc;
++
++ reg = (reg >> 4) ^ crc_table[(reg ^ d) & 0x000f];
++ reg = (reg >> 4) ^ crc_table[(reg ^ (d >> 4)) & 0x000f];
++
++ *crc = reg;
++}
++
++/*
++ Get reverse of generated crc
++
++ Implementation note
++ The crc generator (bcsp_crc_init() and bcsp_crc_update())
++ creates a reversed crc, so it needs to be swapped back before
++ being passed on.
++*/
++static u16 bcsp_crc_reverse(u16 crc)
++{
++ u16 b, rev;
++
++ for (b = 0, rev = 0; b < 16; b++) {
++ rev = rev << 1;
++ rev |= (crc & 1);
++ crc = crc >> 1;
++ }
++ return (rev);
++}
++
++/* ---- BCSP core ---- */
++
++static void bcsp_slip_msgdelim(struct sk_buff *skb)
++{
++ const char pkt_delim = 0xc0;
++ memcpy(skb_put(skb, 1), &pkt_delim, 1);
++}
++
++static void bcsp_slip_one_byte(struct sk_buff *skb, u8 c)
++{
++ const char esc_c0[2] = { 0xdb, 0xdc };
++ const char esc_db[2] = { 0xdb, 0xdd };
++
++ switch (c) {
++ case 0xc0:
++ memcpy(skb_put(skb, 2), &esc_c0, 2);
++ break;
++ case 0xdb:
++ memcpy(skb_put(skb, 2), &esc_db, 2);
++ break;
++ default:
++ memcpy(skb_put(skb, 1), &c, 1);
++ }
++}
++
++static int bcsp_enqueue(struct hci_uart *hu, struct sk_buff *skb)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++
++ if (skb->len > 0xFFF) {
++ BT_ERR("Packet too long");
++ kfree_skb(skb);
++ return 0;
++ }
++
++ switch (skb->pkt_type) {
++ case HCI_ACLDATA_PKT:
++ case HCI_COMMAND_PKT:
++ skb_queue_tail(&bcsp->rel, skb);
++ break;
++
++ case HCI_SCODATA_PKT:
++ skb_queue_tail(&bcsp->unrel, skb);
++ break;
++
++ default:
++ BT_ERR("Unknown packet type");
++ kfree_skb(skb);
++ break;
++ }
++ return 0;
++}
++
++static struct sk_buff *bcsp_prepare_pkt(struct bcsp_struct *bcsp, u8 *data,
++ int len, int pkt_type)
++{
++ struct sk_buff *nskb;
++ u8 hdr[4], chan;
++ int rel, i;
++
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ u16 BCSP_CRC_INIT(bcsp_txmsg_crc);
++#endif
++
++ switch (pkt_type) {
++ case HCI_ACLDATA_PKT:
++ chan = 6; /* BCSP ACL channel */
++ rel = 1; /* reliable channel */
++ break;
++ case HCI_COMMAND_PKT:
++ chan = 5; /* BCSP cmd/evt channel */
++ rel = 1; /* reliable channel */
++ break;
++ case HCI_SCODATA_PKT:
++ chan = 7; /* BCSP SCO channel */
++ rel = 0; /* unreliable channel */
++ break;
++ case BCSP_LE_PKT:
++ chan = 1; /* BCSP LE channel */
++ rel = 0; /* unreliable channel */
++ break;
++ case BCSP_ACK_PKT:
++ chan = 0; /* BCSP internal channel */
++ rel = 0; /* unreliable channel */
++ break;
++ default:
++ BT_ERR("Unknown packet type");
++ return NULL;
++ }
++
++ /* Max len of packet: (original len +4(bcsp hdr) +2(crc))*2
++ (because bytes 0xc0 and 0xdb are escaped, worst case is
++ when the packet is all made of 0xc0 and 0xdb :) )
++ + 2 (0xc0 delimiters at start and end). */
++
++ nskb = alloc_skb((len + 6) * 2 + 2, GFP_ATOMIC);
++ if (!nskb)
++ return NULL;
++
++ nskb->pkt_type = pkt_type;
++
++ bcsp_slip_msgdelim(nskb);
++
++ hdr[0] = bcsp->rxseq_txack << 3;
++ bcsp->txack_req = 0;
++ BT_DBG("We request packet no %u to card", bcsp->rxseq_txack);
++
++ if (rel) {
++ hdr[0] |= 0x80 + bcsp->msgq_txseq;
++ BT_DBG("Sending packet with seqno %u", bcsp->msgq_txseq);
++ bcsp->msgq_txseq = ++(bcsp->msgq_txseq) & 0x07;
++ }
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ hdr[0] |= 0x40;
++#endif
++
++ hdr[1] = (len << 4) & 0xFF;
++ hdr[1] |= chan;
++ hdr[2] = len >> 4;
++ hdr[3] = ~(hdr[0] + hdr[1] + hdr[2]);
++
++ /* Put BCSP header */
++ for (i = 0; i < 4; i++) {
++ bcsp_slip_one_byte(nskb, hdr[i]);
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ bcsp_crc_update(&bcsp_txmsg_crc, hdr[i]);
++#endif
++ }
++
++ /* Put payload */
++ for (i = 0; i < len; i++) {
++ bcsp_slip_one_byte(nskb, data[i]);
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ bcsp_crc_update(&bcsp_txmsg_crc, data[i]);
++#endif
++ }
++
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP_TXCRC
++ /* Put CRC */
++ bcsp_txmsg_crc = bcsp_crc_reverse(bcsp_txmsg_crc);
++ bcsp_slip_one_byte(nskb, (u8) ((bcsp_txmsg_crc >> 8) & 0x00ff));
++ bcsp_slip_one_byte(nskb, (u8) (bcsp_txmsg_crc & 0x00ff));
++#endif
++
++ bcsp_slip_msgdelim(nskb);
++ return nskb;
++}
++
++/* This is a rewrite of pkt_avail in ABCSP */
++static struct sk_buff *bcsp_dequeue(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp = (struct bcsp_struct *) hu->priv;
++ unsigned long flags;
++ struct sk_buff *skb;
++
++ /* First of all, check for unreliable messages in the queue,
++ since they have priority */
++
++ if ((skb = skb_dequeue(&bcsp->unrel)) != NULL) {
++ struct sk_buff *nskb = bcsp_prepare_pkt(bcsp, skb->data, skb->len, skb->pkt_type);
++ if (nskb) {
++ kfree_skb(skb);
++ return nskb;
++ } else {
++ skb_queue_head(&bcsp->unrel, skb);
++ BT_ERR("Could not dequeue pkt because alloc_skb failed");
++ }
++ }
++
++ /* Now, try to send a reliable pkt. We can only send a
++ reliable packet if the number of packets sent but not yet ack'ed
++ is < than the winsize */
++
++ spin_lock_irqsave(&bcsp->unack.lock, flags);
++
++ if (bcsp->unack.qlen < BCSP_TXWINSIZE && (skb = skb_dequeue(&bcsp->rel)) != NULL) {
++ struct sk_buff *nskb = bcsp_prepare_pkt(bcsp, skb->data, skb->len, skb->pkt_type);
++ if (nskb) {
++ __skb_queue_tail(&bcsp->unack, skb);
++ mod_timer(&bcsp->tbcsp, jiffies + HZ / 4);
++ spin_unlock_irqrestore(&bcsp->unack.lock, flags);
++ return nskb;
++ } else {
++ skb_queue_head(&bcsp->rel, skb);
++ BT_ERR("Could not dequeue pkt because alloc_skb failed");
++ }
++ }
++
++ spin_unlock_irqrestore(&bcsp->unack.lock, flags);
++
++
++ /* We could not send a reliable packet, either because there are
++ none or because there are too many unack'ed pkts. Did we receive
++ any packets we have not acknowledged yet ? */
++
++ if (bcsp->txack_req) {
++ /* if so, craft an empty ACK pkt and send it on BCSP unreliable
++ channel 0 */
++ struct sk_buff *nskb = bcsp_prepare_pkt(bcsp, NULL, 0, BCSP_ACK_PKT);
++ return nskb;
++ }
++
++ /* We have nothing to send */
++ return NULL;
++}
++
++static int bcsp_flush(struct hci_uart *hu)
++{
++ BT_DBG("hu %p", hu);
++ return 0;
++}
++
++/* Remove ack'ed packets */
++static void bcsp_pkt_cull(struct bcsp_struct *bcsp)
++{
++ unsigned long flags;
++ struct sk_buff *skb;
++ int i, pkts_to_be_removed;
++ u8 seqno;
++
++ spin_lock_irqsave(&bcsp->unack.lock, flags);
++
++ pkts_to_be_removed = bcsp->unack.qlen;
++ seqno = bcsp->msgq_txseq;
++
++ while (pkts_to_be_removed) {
++ if (bcsp->rxack == seqno)
++ break;
++ pkts_to_be_removed--;
++ seqno = (seqno - 1) & 0x07;
++ }
++
++ if (bcsp->rxack != seqno)
++ BT_ERR("Peer acked invalid packet");
++
++ BT_DBG("Removing %u pkts out of %u, up to seqno %u",
++ pkts_to_be_removed, bcsp->unack.qlen, (seqno - 1) & 0x07);
++
++ for (i = 0, skb = ((struct sk_buff *) &bcsp->unack)->next; i < pkts_to_be_removed
++ && skb != (struct sk_buff *) &bcsp->unack; i++) {
++ struct sk_buff *nskb;
++
++ nskb = skb->next;
++ __skb_unlink(skb, &bcsp->unack);
++ kfree_skb(skb);
++ skb = nskb;
++ }
++ if (bcsp->unack.qlen == 0)
++ del_timer(&bcsp->tbcsp);
++ spin_unlock_irqrestore(&bcsp->unack.lock, flags);
++
++ if (i != pkts_to_be_removed)
++ BT_ERR("Removed only %u out of %u pkts", i, pkts_to_be_removed);
++}
++
++/* Handle BCSP link-establishment packets. When we
++ detect a "sync" packet, symptom that the BT module has reset,
++ we do nothing :) (yet) */
++static void bcsp_handle_le_pkt(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++ u8 conf_pkt[4] = { 0xad, 0xef, 0xac, 0xed };
++ u8 conf_rsp_pkt[4] = { 0xde, 0xad, 0xd0, 0xd0 };
++ u8 sync_pkt[4] = { 0xda, 0xdc, 0xed, 0xed };
++
++ /* spot "conf" pkts and reply with a "conf rsp" pkt */
++ if (bcsp->rx_skb->data[1] >> 4 == 4 && bcsp->rx_skb->data[2] == 0 &&
++ !memcmp(&bcsp->rx_skb->data[4], conf_pkt, 4)) {
++ struct sk_buff *nskb = alloc_skb(4, GFP_ATOMIC);
++
++ BT_DBG("Found a LE conf pkt");
++ if (!nskb)
++ return;
++ memcpy(skb_put(nskb, 4), conf_rsp_pkt, 4);
++ nskb->pkt_type = BCSP_LE_PKT;
++
++ skb_queue_head(&bcsp->unrel, nskb);
++ hci_uart_tx_wakeup(hu);
++ }
++ /* Spot "sync" pkts. If we find one...disaster! */
++ else if (bcsp->rx_skb->data[1] >> 4 == 4 && bcsp->rx_skb->data[2] == 0 &&
++ !memcmp(&bcsp->rx_skb->data[4], sync_pkt, 4)) {
++ BT_ERR("Found a LE sync pkt, card has reset");
++ }
++}
++
++static inline void bcsp_unslip_one_byte(struct bcsp_struct *bcsp, unsigned char byte)
++{
++ const u8 c0 = 0xc0, db = 0xdb;
++
++ switch (bcsp->rx_esc_state) {
++ case BCSP_ESCSTATE_NOESC:
++ switch (byte) {
++ case 0xdb:
++ bcsp->rx_esc_state = BCSP_ESCSTATE_ESC;
++ break;
++ default:
++ memcpy(skb_put(bcsp->rx_skb, 1), &byte, 1);
++ if ((bcsp->rx_skb-> data[0] & 0x40) != 0 &&
++ bcsp->rx_state != BCSP_W4_CRC)
++ bcsp_crc_update(&bcsp->message_crc, byte);
++ bcsp->rx_count--;
++ }
++ break;
++
++ case BCSP_ESCSTATE_ESC:
++ switch (byte) {
++ case 0xdc:
++ memcpy(skb_put(bcsp->rx_skb, 1), &c0, 1);
++ if ((bcsp->rx_skb-> data[0] & 0x40) != 0 &&
++ bcsp->rx_state != BCSP_W4_CRC)
++ bcsp_crc_update(&bcsp-> message_crc, 0xc0);
++ bcsp->rx_esc_state = BCSP_ESCSTATE_NOESC;
++ bcsp->rx_count--;
++ break;
++
++ case 0xdd:
++ memcpy(skb_put(bcsp->rx_skb, 1), &db, 1);
++ if ((bcsp->rx_skb-> data[0] & 0x40) != 0 &&
++ bcsp->rx_state != BCSP_W4_CRC)
++ bcsp_crc_update(&bcsp-> message_crc, 0xdb);
++ bcsp->rx_esc_state = BCSP_ESCSTATE_NOESC;
++ bcsp->rx_count--;
++ break;
++
++ default:
++ BT_ERR ("Invalid byte %02x after esc byte", byte);
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_skb = NULL;
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ }
++ }
++}
++
++static inline void bcsp_complete_rx_pkt(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++ int pass_up;
++
++ if (bcsp->rx_skb->data[0] & 0x80) { /* reliable pkt */
++ BT_DBG("Received seqno %u from card", bcsp->rxseq_txack);
++ bcsp->rxseq_txack++;
++ bcsp->rxseq_txack %= 0x8;
++ bcsp->txack_req = 1;
++
++ /* If needed, transmit an ack pkt */
++ hci_uart_tx_wakeup(hu);
++ }
++
++ bcsp->rxack = (bcsp->rx_skb->data[0] >> 3) & 0x07;
++ BT_DBG("Request for pkt %u from card", bcsp->rxack);
++
++ bcsp_pkt_cull(bcsp);
++ if ((bcsp->rx_skb->data[1] & 0x0f) == 6 &&
++ bcsp->rx_skb->data[0] & 0x80) {
++ bcsp->rx_skb->pkt_type = HCI_ACLDATA_PKT;
++ pass_up = 1;
++ } else if ((bcsp->rx_skb->data[1] & 0x0f) == 5 &&
++ bcsp->rx_skb->data[0] & 0x80) {
++ bcsp->rx_skb->pkt_type = HCI_EVENT_PKT;
++ pass_up = 1;
++ } else if ((bcsp->rx_skb->data[1] & 0x0f) == 7) {
++ bcsp->rx_skb->pkt_type = HCI_SCODATA_PKT;
++ pass_up = 1;
++ } else if ((bcsp->rx_skb->data[1] & 0x0f) == 1 &&
++ !(bcsp->rx_skb->data[0] & 0x80)) {
++ bcsp_handle_le_pkt(hu);
++ pass_up = 0;
++ } else
++ pass_up = 0;
++
++ if (!pass_up) {
++ if ((bcsp->rx_skb->data[1] & 0x0f) != 0 &&
++ (bcsp->rx_skb->data[1] & 0x0f) != 1) {
++ BT_ERR ("Packet for unknown channel (%u %s)",
++ bcsp->rx_skb->data[1] & 0x0f,
++ bcsp->rx_skb->data[0] & 0x80 ?
++ "reliable" : "unreliable");
++ }
++ kfree_skb(bcsp->rx_skb);
++ } else {
++ /* Pull out BCSP hdr */
++ skb_pull(bcsp->rx_skb, 4);
++
++ hci_recv_frame(bcsp->rx_skb);
++ }
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_skb = NULL;
++}
++
++/* Recv data */
++static int bcsp_recv(struct hci_uart *hu, void *data, int count)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++ register unsigned char *ptr;
++
++ BT_DBG("hu %p count %d rx_state %ld rx_count %ld",
++ hu, count, bcsp->rx_state, bcsp->rx_count);
++
++ ptr = data;
++ while (count) {
++ if (bcsp->rx_count) {
++ if (*ptr == 0xc0) {
++ BT_ERR("Short BCSP packet");
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_state = BCSP_W4_PKT_START;
++ bcsp->rx_count = 0;
++ } else
++ bcsp_unslip_one_byte(bcsp, *ptr);
++
++ ptr++; count--;
++ continue;
++ }
++
++ switch (bcsp->rx_state) {
++ case BCSP_W4_BCSP_HDR:
++ if ((0xff & (u8) ~ (bcsp->rx_skb->data[0] + bcsp->rx_skb->data[1] +
++ bcsp->rx_skb->data[2])) != bcsp->rx_skb->data[3]) {
++ BT_ERR("Error in BCSP hdr checksum");
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ continue;
++ }
++ if (bcsp->rx_skb->data[0] & 0x80 /* reliable pkt */
++ && (bcsp->rx_skb->data[0] & 0x07) != bcsp->rxseq_txack) {
++ BT_ERR ("Out-of-order packet arrived, got %u expected %u",
++ bcsp->rx_skb->data[0] & 0x07, bcsp->rxseq_txack);
++
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ continue;
++ }
++ bcsp->rx_state = BCSP_W4_DATA;
++ bcsp->rx_count = (bcsp->rx_skb->data[1] >> 4) +
++ (bcsp->rx_skb->data[2] << 4); /* May be 0 */
++ continue;
++
++ case BCSP_W4_DATA:
++ if (bcsp->rx_skb->data[0] & 0x40) { /* pkt with crc */
++ bcsp->rx_state = BCSP_W4_CRC;
++ bcsp->rx_count = 2;
++ } else
++ bcsp_complete_rx_pkt(hu);
++ continue;
++
++ case BCSP_W4_CRC:
++ if (bcsp_crc_reverse(bcsp->message_crc) !=
++ (bcsp->rx_skb->data[bcsp->rx_skb->len - 2] << 8) +
++ bcsp->rx_skb->data[bcsp->rx_skb->len - 1]) {
++
++ BT_ERR ("Checksum failed: computed %04x received %04x",
++ bcsp_crc_reverse(bcsp->message_crc),
++ (bcsp->rx_skb-> data[bcsp->rx_skb->len - 2] << 8) +
++ bcsp->rx_skb->data[bcsp->rx_skb->len - 1]);
++
++ kfree_skb(bcsp->rx_skb);
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ continue;
++ }
++ skb_trim(bcsp->rx_skb, bcsp->rx_skb->len - 2);
++ bcsp_complete_rx_pkt(hu);
++ continue;
++
++ case BCSP_W4_PKT_DELIMITER:
++ switch (*ptr) {
++ case 0xc0:
++ bcsp->rx_state = BCSP_W4_PKT_START;
++ break;
++ default:
++ /*BT_ERR("Ignoring byte %02x", *ptr);*/
++ break;
++ }
++ ptr++; count--;
++ break;
++
++ case BCSP_W4_PKT_START:
++ switch (*ptr) {
++ case 0xc0:
++ ptr++; count--;
++ break;
++
++ default:
++ bcsp->rx_state = BCSP_W4_BCSP_HDR;
++ bcsp->rx_count = 4;
++ bcsp->rx_esc_state = BCSP_ESCSTATE_NOESC;
++ BCSP_CRC_INIT(bcsp->message_crc);
++
++ /* Do not increment ptr or decrement count
++ * Allocate packet. Max len of a BCSP pkt=
++ * 0xFFF (payload) +4 (header) +2 (crc) */
++
++ bcsp->rx_skb = bluez_skb_alloc(0x1005, GFP_ATOMIC);
++ if (!bcsp->rx_skb) {
++ BT_ERR("Can't allocate mem for new packet");
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++ bcsp->rx_count = 0;
++ return 0;
++ }
++ bcsp->rx_skb->dev = (void *) &hu->hdev;
++ break;
++ }
++ break;
++ }
++ }
++ return count;
++}
++
++ /* Arrange to retransmit all messages in the relq. */
++static void bcsp_timed_event(unsigned long arg)
++{
++ struct hci_uart *hu = (struct hci_uart *) arg;
++ struct bcsp_struct *bcsp = (struct bcsp_struct *) hu->priv;
++ struct sk_buff *skb;
++ unsigned long flags;
++
++ BT_ERR("Timeout, retransmitting %u pkts", bcsp->unack.qlen);
++ spin_lock_irqsave(&bcsp->unack.lock, flags);
++
++ while ((skb = __skb_dequeue_tail(&bcsp->unack)) != NULL) {
++ bcsp->msgq_txseq = (bcsp->msgq_txseq - 1) & 0x07;
++ skb_queue_head(&bcsp->rel, skb);
++ }
++
++ spin_unlock_irqrestore(&bcsp->unack.lock, flags);
++
++ hci_uart_tx_wakeup(hu);
++}
++
++static int bcsp_open(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp;
++
++ BT_DBG("hu %p", hu);
++
++ bcsp = kmalloc(sizeof(*bcsp), GFP_ATOMIC);
++ if (!bcsp)
++ return -ENOMEM;
++ memset(bcsp, 0, sizeof(*bcsp));
++
++ hu->priv = bcsp;
++ skb_queue_head_init(&bcsp->unack);
++ skb_queue_head_init(&bcsp->rel);
++ skb_queue_head_init(&bcsp->unrel);
++
++ init_timer(&bcsp->tbcsp);
++ bcsp->tbcsp.function = bcsp_timed_event;
++ bcsp->tbcsp.data = (u_long) hu;
++
++ bcsp->rx_state = BCSP_W4_PKT_DELIMITER;
++
++ return 0;
++}
++
++static int bcsp_close(struct hci_uart *hu)
++{
++ struct bcsp_struct *bcsp = hu->priv;
++ hu->priv = NULL;
++
++ BT_DBG("hu %p", hu);
++
++ skb_queue_purge(&bcsp->unack);
++ skb_queue_purge(&bcsp->rel);
++ skb_queue_purge(&bcsp->unrel);
++ del_timer(&bcsp->tbcsp);
++
++ kfree(bcsp);
++ return 0;
++}
++
++static struct hci_uart_proto bcsp = {
++ id: HCI_UART_BCSP,
++ open: bcsp_open,
++ close: bcsp_close,
++ enqueue: bcsp_enqueue,
++ dequeue: bcsp_dequeue,
++ recv: bcsp_recv,
++ flush: bcsp_flush
++};
++
++int bcsp_init(void)
++{
++ return hci_uart_register_proto(&bcsp);
++}
++
++int bcsp_deinit(void)
++{
++ return hci_uart_unregister_proto(&bcsp);
++}
+diff -urN linux-2.4.18/drivers/bluetooth/hci_bcsp.h linux-2.4.18-mh9/drivers/bluetooth/hci_bcsp.h
+--- linux-2.4.18/drivers/bluetooth/hci_bcsp.h Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/drivers/bluetooth/hci_bcsp.h Mon Aug 25 18:38:10 2003
+@@ -0,0 +1,70 @@
++/*
++ BlueCore Serial Protocol (BCSP) for Linux Bluetooth stack (BlueZ).
++ Copyright 2002 by Fabrizio Gennari <fabrizio.gennari@philips.com>
++
++ Based on
++ hci_h4.c by Maxim Krasnyansky <maxk@qualcomm.com>
++ ABCSP by Carl Orsborn <cjo@csr.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_bcsp.h,v 1.2 2002/09/26 05:05:14 maxk Exp $
++ */
++
++#ifndef __HCI_BCSP_H__
++#define __HCI_BCSP_H__
++
++#define BCSP_TXWINSIZE 4
++
++#define BCSP_ACK_PKT 0x05
++#define BCSP_LE_PKT 0x06
++
++struct bcsp_struct {
++ struct sk_buff_head unack; /* Unack'ed packets queue */
++ struct sk_buff_head rel; /* Reliable packets queue */
++ struct sk_buff_head unrel; /* Unreliable packets queue */
++
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++ u8 rxseq_txack; /* rxseq == txack. */
++ u8 rxack; /* Last packet sent by us that the peer ack'ed */
++ struct timer_list tbcsp;
++
++ enum {
++ BCSP_W4_PKT_DELIMITER,
++ BCSP_W4_PKT_START,
++ BCSP_W4_BCSP_HDR,
++ BCSP_W4_DATA,
++ BCSP_W4_CRC
++ } rx_state;
++
++ enum {
++ BCSP_ESCSTATE_NOESC,
++ BCSP_ESCSTATE_ESC
++ } rx_esc_state;
++
++ u16 message_crc;
++ u8 txack_req; /* Do we need to send ack's to the peer? */
++
++ /* Reliable packet sequence number - used to assign seq to each rel pkt. */
++ u8 msgq_txseq;
++};
++
++#endif /* __HCI_BCSP_H__ */
+diff -urN linux-2.4.18/drivers/bluetooth/hci_h4.c linux-2.4.18-mh9/drivers/bluetooth/hci_h4.c
+--- linux-2.4.18/drivers/bluetooth/hci_h4.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/drivers/bluetooth/hci_h4.c Mon Aug 25 18:38:10 2003
+@@ -0,0 +1,277 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * BlueZ HCI UART(H4) protocol.
++ *
++ * $Id: hci_h4.c,v 1.3 2002/09/09 01:17:32 maxk Exp $
++ */
++#define VERSION "1.2"
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/version.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/fcntl.h>
++#include <linux/interrupt.h>
++#include <linux/ptrace.h>
++#include <linux/poll.h>
++
++#include <linux/slab.h>
++#include <linux/tty.h>
++#include <linux/errno.h>
++#include <linux/string.h>
++#include <linux/signal.h>
++#include <linux/ioctl.h>
++#include <linux/skbuff.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include "hci_uart.h"
++#include "hci_h4.h"
++
++#ifndef HCI_UART_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#undef BT_DMP
++#define BT_DMP( A... )
++#endif
++
++/* Initialize protocol */
++static int h4_open(struct hci_uart *hu)
++{
++ struct h4_struct *h4;
++
++ BT_DBG("hu %p", hu);
++
++ h4 = kmalloc(sizeof(*h4), GFP_ATOMIC);
++ if (!h4)
++ return -ENOMEM;
++ memset(h4, 0, sizeof(*h4));
++
++ skb_queue_head_init(&h4->txq);
++
++ hu->priv = h4;
++ return 0;
++}
++
++/* Flush protocol data */
++static int h4_flush(struct hci_uart *hu)
++{
++ struct h4_struct *h4 = hu->priv;
++
++ BT_DBG("hu %p", hu);
++ skb_queue_purge(&h4->txq);
++ return 0;
++}
++
++/* Close protocol */
++static int h4_close(struct hci_uart *hu)
++{
++ struct h4_struct *h4 = hu->priv;
++ hu->priv = NULL;
++
++ BT_DBG("hu %p", hu);
++
++ skb_queue_purge(&h4->txq);
++ if (h4->rx_skb)
++ kfree_skb(h4->rx_skb);
++
++ hu->priv = NULL;
++ kfree(h4);
++ return 0;
++}
++
++/* Enqueue frame for transmittion (padding, crc, etc) */
++static int h4_enqueue(struct hci_uart *hu, struct sk_buff *skb)
++{
++ struct h4_struct *h4 = hu->priv;
++
++ BT_DBG("hu %p skb %p", hu, skb);
++
++ /* Prepend skb with frame type */
++ memcpy(skb_push(skb, 1), &skb->pkt_type, 1);
++ skb_queue_tail(&h4->txq, skb);
++ return 0;
++}
++
++static inline int h4_check_data_len(struct h4_struct *h4, int len)
++{
++ register int room = skb_tailroom(h4->rx_skb);
++
++ BT_DBG("len %d room %d", len, room);
++ if (!len) {
++ BT_DMP(h4->rx_skb->data, h4->rx_skb->len);
++ hci_recv_frame(h4->rx_skb);
++ } else if (len > room) {
++ BT_ERR("Data length is too large");
++ kfree_skb(h4->rx_skb);
++ } else {
++ h4->rx_state = H4_W4_DATA;
++ h4->rx_count = len;
++ return len;
++ }
++
++ h4->rx_state = H4_W4_PACKET_TYPE;
++ h4->rx_skb = NULL;
++ h4->rx_count = 0;
++ return 0;
++}
++
++/* Recv data */
++static int h4_recv(struct hci_uart *hu, void *data, int count)
++{
++ struct h4_struct *h4 = hu->priv;
++ register char *ptr;
++ hci_event_hdr *eh;
++ hci_acl_hdr *ah;
++ hci_sco_hdr *sh;
++ register int len, type, dlen;
++
++ BT_DBG("hu %p count %d rx_state %ld rx_count %ld",
++ hu, count, h4->rx_state, h4->rx_count);
++
++ ptr = data;
++ while (count) {
++ if (h4->rx_count) {
++ len = MIN(h4->rx_count, count);
++ memcpy(skb_put(h4->rx_skb, len), ptr, len);
++ h4->rx_count -= len; count -= len; ptr += len;
++
++ if (h4->rx_count)
++ continue;
++
++ switch (h4->rx_state) {
++ case H4_W4_DATA:
++ BT_DBG("Complete data");
++
++ BT_DMP(h4->rx_skb->data, h4->rx_skb->len);
++
++ hci_recv_frame(h4->rx_skb);
++
++ h4->rx_state = H4_W4_PACKET_TYPE;
++ h4->rx_skb = NULL;
++ continue;
++
++ case H4_W4_EVENT_HDR:
++ eh = (hci_event_hdr *) h4->rx_skb->data;
++
++ BT_DBG("Event header: evt 0x%2.2x plen %d", eh->evt, eh->plen);
++
++ h4_check_data_len(h4, eh->plen);
++ continue;
++
++ case H4_W4_ACL_HDR:
++ ah = (hci_acl_hdr *) h4->rx_skb->data;
++ dlen = __le16_to_cpu(ah->dlen);
++
++ BT_DBG("ACL header: dlen %d", dlen);
++
++ h4_check_data_len(h4, dlen);
++ continue;
++
++ case H4_W4_SCO_HDR:
++ sh = (hci_sco_hdr *) h4->rx_skb->data;
++
++ BT_DBG("SCO header: dlen %d", sh->dlen);
++
++ h4_check_data_len(h4, sh->dlen);
++ continue;
++ }
++ }
++
++ /* H4_W4_PACKET_TYPE */
++ switch (*ptr) {
++ case HCI_EVENT_PKT:
++ BT_DBG("Event packet");
++ h4->rx_state = H4_W4_EVENT_HDR;
++ h4->rx_count = HCI_EVENT_HDR_SIZE;
++ type = HCI_EVENT_PKT;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ BT_DBG("ACL packet");
++ h4->rx_state = H4_W4_ACL_HDR;
++ h4->rx_count = HCI_ACL_HDR_SIZE;
++ type = HCI_ACLDATA_PKT;
++ break;
++
++ case HCI_SCODATA_PKT:
++ BT_DBG("SCO packet");
++ h4->rx_state = H4_W4_SCO_HDR;
++ h4->rx_count = HCI_SCO_HDR_SIZE;
++ type = HCI_SCODATA_PKT;
++ break;
++
++ default:
++ BT_ERR("Unknown HCI packet type %2.2x", (__u8)*ptr);
++ hu->hdev.stat.err_rx++;
++ ptr++; count--;
++ continue;
++ };
++ ptr++; count--;
++
++ /* Allocate packet */
++ h4->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC);
++ if (!h4->rx_skb) {
++ BT_ERR("Can't allocate mem for new packet");
++ h4->rx_state = H4_W4_PACKET_TYPE;
++ h4->rx_count = 0;
++ return 0;
++ }
++ h4->rx_skb->dev = (void *) &hu->hdev;
++ h4->rx_skb->pkt_type = type;
++ }
++ return count;
++}
++
++static struct sk_buff *h4_dequeue(struct hci_uart *hu)
++{
++ struct h4_struct *h4 = hu->priv;
++ return skb_dequeue(&h4->txq);
++}
++
++static struct hci_uart_proto h4p = {
++ id: HCI_UART_H4,
++ open: h4_open,
++ close: h4_close,
++ recv: h4_recv,
++ enqueue: h4_enqueue,
++ dequeue: h4_dequeue,
++ flush: h4_flush,
++};
++
++int h4_init(void)
++{
++ return hci_uart_register_proto(&h4p);
++}
++
++int h4_deinit(void)
++{
++ return hci_uart_unregister_proto(&h4p);
++}
+diff -urN linux-2.4.18/drivers/bluetooth/hci_h4.h linux-2.4.18-mh9/drivers/bluetooth/hci_h4.h
+--- linux-2.4.18/drivers/bluetooth/hci_h4.h Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/drivers/bluetooth/hci_h4.h Mon Aug 25 18:38:10 2003
+@@ -0,0 +1,44 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_h4.h,v 1.2 2002/09/09 01:17:32 maxk Exp $
++ */
++
++#ifdef __KERNEL__
++struct h4_struct {
++ unsigned long rx_state;
++ unsigned long rx_count;
++ struct sk_buff *rx_skb;
++ struct sk_buff_head txq;
++};
++
++/* H4 receiver States */
++#define H4_W4_PACKET_TYPE 0
++#define H4_W4_EVENT_HDR 1
++#define H4_W4_ACL_HDR 2
++#define H4_W4_SCO_HDR 3
++#define H4_W4_DATA 4
++
++#endif /* __KERNEL__ */
+diff -urN linux-2.4.18/drivers/bluetooth/hci_ldisc.c linux-2.4.18-mh9/drivers/bluetooth/hci_ldisc.c
+--- linux-2.4.18/drivers/bluetooth/hci_ldisc.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/drivers/bluetooth/hci_ldisc.c Mon Aug 25 18:38:10 2003
+@@ -0,0 +1,580 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * BlueZ HCI UART driver.
++ *
++ * $Id: hci_ldisc.c,v 1.5 2002/10/02 18:37:20 maxk Exp $
++ */
++#define VERSION "2.1"
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/version.h>
++#include <linux/config.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/sched.h>
++#include <linux/types.h>
++#include <linux/fcntl.h>
++#include <linux/interrupt.h>
++#include <linux/ptrace.h>
++#include <linux/poll.h>
++
++#include <linux/slab.h>
++#include <linux/tty.h>
++#include <linux/errno.h>
++#include <linux/string.h>
++#include <linux/signal.h>
++#include <linux/ioctl.h>
++#include <linux/skbuff.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include "hci_uart.h"
++
++#ifndef HCI_UART_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#undef BT_DMP
++#define BT_DMP( A... )
++#endif
++
++static struct hci_uart_proto *hup[HCI_UART_MAX_PROTO];
++
++int hci_uart_register_proto(struct hci_uart_proto *p)
++{
++ if (p->id >= HCI_UART_MAX_PROTO)
++ return -EINVAL;
++
++ if (hup[p->id])
++ return -EEXIST;
++
++ hup[p->id] = p;
++ return 0;
++}
++
++int hci_uart_unregister_proto(struct hci_uart_proto *p)
++{
++ if (p->id >= HCI_UART_MAX_PROTO)
++ return -EINVAL;
++
++ if (!hup[p->id])
++ return -EINVAL;
++
++ hup[p->id] = NULL;
++ return 0;
++}
++
++static struct hci_uart_proto *hci_uart_get_proto(unsigned int id)
++{
++ if (id >= HCI_UART_MAX_PROTO)
++ return NULL;
++ return hup[id];
++}
++
++static inline void hci_uart_tx_complete(struct hci_uart *hu, int pkt_type)
++{
++ struct hci_dev *hdev = &hu->hdev;
++
++ /* Update HCI stat counters */
++ switch (pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++
++ case HCI_SCODATA_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++ }
++}
++
++static inline struct sk_buff *hci_uart_dequeue(struct hci_uart *hu)
++{
++ struct sk_buff *skb = hu->tx_skb;
++ if (!skb)
++ skb = hu->proto->dequeue(hu);
++ else
++ hu->tx_skb = NULL;
++ return skb;
++}
++
++int hci_uart_tx_wakeup(struct hci_uart *hu)
++{
++ struct tty_struct *tty = hu->tty;
++ struct hci_dev *hdev = &hu->hdev;
++ struct sk_buff *skb;
++
++ if (test_and_set_bit(HCI_UART_SENDING, &hu->tx_state)) {
++ set_bit(HCI_UART_TX_WAKEUP, &hu->tx_state);
++ return 0;
++ }
++
++ BT_DBG("");
++
++restart:
++ clear_bit(HCI_UART_TX_WAKEUP, &hu->tx_state);
++
++ while ((skb = hci_uart_dequeue(hu))) {
++ int len;
++
++ set_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
++ len = tty->driver.write(tty, 0, skb->data, skb->len);
++ hdev->stat.byte_tx += len;
++
++ skb_pull(skb, len);
++ if (skb->len) {
++ hu->tx_skb = skb;
++ break;
++ }
++
++ hci_uart_tx_complete(hu, skb->pkt_type);
++ kfree_skb(skb);
++ }
++
++ if (test_bit(HCI_UART_TX_WAKEUP, &hu->tx_state))
++ goto restart;
++
++ clear_bit(HCI_UART_SENDING, &hu->tx_state);
++ return 0;
++}
++
++/* ------- Interface to HCI layer ------ */
++/* Initialize device */
++static int hci_uart_open(struct hci_dev *hdev)
++{
++ BT_DBG("%s %p", hdev->name, hdev);
++
++ /* Nothing to do for UART driver */
++
++ set_bit(HCI_RUNNING, &hdev->flags);
++ return 0;
++}
++
++/* Reset device */
++static int hci_uart_flush(struct hci_dev *hdev)
++{
++ struct hci_uart *hu = (struct hci_uart *) hdev->driver_data;
++ struct tty_struct *tty = hu->tty;
++
++ BT_DBG("hdev %p tty %p", hdev, tty);
++
++ if (hu->tx_skb) {
++ kfree_skb(hu->tx_skb); hu->tx_skb = NULL;
++ }
++
++ /* Flush any pending characters in the driver and discipline. */
++ if (tty->ldisc.flush_buffer)
++ tty->ldisc.flush_buffer(tty);
++
++ if (tty->driver.flush_buffer)
++ tty->driver.flush_buffer(tty);
++
++ if (test_bit(HCI_UART_PROTO_SET, &hu->flags))
++ hu->proto->flush(hu);
++
++ return 0;
++}
++
++/* Close device */
++static int hci_uart_close(struct hci_dev *hdev)
++{
++ BT_DBG("hdev %p", hdev);
++
++ if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
++
++ hci_uart_flush(hdev);
++ return 0;
++}
++
++/* Send frames from HCI layer */
++static int hci_uart_send_frame(struct sk_buff *skb)
++{
++ struct hci_dev* hdev = (struct hci_dev *) skb->dev;
++ struct tty_struct *tty;
++ struct hci_uart *hu;
++
++ if (!hdev) {
++ BT_ERR("Frame for uknown device (hdev=NULL)");
++ return -ENODEV;
++ }
++
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
++ return -EBUSY;
++
++ hu = (struct hci_uart *) hdev->driver_data;
++ tty = hu->tty;
++
++ BT_DBG("%s: type %d len %d", hdev->name, skb->pkt_type, skb->len);
++
++ hu->proto->enqueue(hu, skb);
++
++ hci_uart_tx_wakeup(hu);
++ return 0;
++}
++
++static void hci_uart_destruct(struct hci_dev *hdev)
++{
++ struct hci_uart *hu;
++
++ if (!hdev) return;
++
++ BT_DBG("%s", hdev->name);
++
++ hu = (struct hci_uart *) hdev->driver_data;
++ kfree(hu);
++
++ MOD_DEC_USE_COUNT;
++}
++
++/* ------ LDISC part ------ */
++/* hci_uart_tty_open
++ *
++ * Called when line discipline changed to HCI_UART.
++ *
++ * Arguments:
++ * tty pointer to tty info structure
++ * Return Value:
++ * 0 if success, otherwise error code
++ */
++static int hci_uart_tty_open(struct tty_struct *tty)
++{
++ struct hci_uart *hu = (void *) tty->disc_data;
++
++ BT_DBG("tty %p", tty);
++
++ if (hu)
++ return -EEXIST;
++
++ if (!(hu = kmalloc(sizeof(struct hci_uart), GFP_KERNEL))) {
++ BT_ERR("Can't allocate controll structure");
++ return -ENFILE;
++ }
++ memset(hu, 0, sizeof(struct hci_uart));
++
++ tty->disc_data = hu;
++ hu->tty = tty;
++
++ spin_lock_init(&hu->rx_lock);
++
++ /* Flush any pending characters in the driver and line discipline */
++ if (tty->ldisc.flush_buffer)
++ tty->ldisc.flush_buffer(tty);
++
++ if (tty->driver.flush_buffer)
++ tty->driver.flush_buffer(tty);
++
++ MOD_INC_USE_COUNT;
++ return 0;
++}
++
++/* hci_uart_tty_close()
++ *
++ * Called when the line discipline is changed to something
++ * else, the tty is closed, or the tty detects a hangup.
++ */
++static void hci_uart_tty_close(struct tty_struct *tty)
++{
++ struct hci_uart *hu = (void *)tty->disc_data;
++
++ BT_DBG("tty %p", tty);
++
++ /* Detach from the tty */
++ tty->disc_data = NULL;
++
++ if (hu) {
++ struct hci_dev *hdev = &hu->hdev;
++ hci_uart_close(hdev);
++
++ if (test_and_clear_bit(HCI_UART_PROTO_SET, &hu->flags)) {
++ hu->proto->close(hu);
++ hci_unregister_dev(hdev);
++ }
++
++ MOD_DEC_USE_COUNT;
++ }
++}
++
++/* hci_uart_tty_wakeup()
++ *
++ * Callback for transmit wakeup. Called when low level
++ * device driver can accept more send data.
++ *
++ * Arguments: tty pointer to associated tty instance data
++ * Return Value: None
++ */
++static void hci_uart_tty_wakeup(struct tty_struct *tty)
++{
++ struct hci_uart *hu = (void *)tty->disc_data;
++
++ BT_DBG("");
++
++ if (!hu)
++ return;
++
++ clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
++
++ if (tty != hu->tty)
++ return;
++
++ if (test_bit(HCI_UART_PROTO_SET, &hu->flags))
++ hci_uart_tx_wakeup(hu);
++}
++
++/* hci_uart_tty_room()
++ *
++ * Callback function from tty driver. Return the amount of
++ * space left in the receiver's buffer to decide if remote
++ * transmitter is to be throttled.
++ *
++ * Arguments: tty pointer to associated tty instance data
++ * Return Value: number of bytes left in receive buffer
++ */
++static int hci_uart_tty_room (struct tty_struct *tty)
++{
++ return 65536;
++}
++
++/* hci_uart_tty_receive()
++ *
++ * Called by tty low level driver when receive data is
++ * available.
++ *
++ * Arguments: tty pointer to tty isntance data
++ * data pointer to received data
++ * flags pointer to flags for data
++ * count count of received data in bytes
++ *
++ * Return Value: None
++ */
++static void hci_uart_tty_receive(struct tty_struct *tty, const __u8 *data, char *flags, int count)
++{
++ struct hci_uart *hu = (void *)tty->disc_data;
++
++ if (!hu || tty != hu->tty)
++ return;
++
++ if (!test_bit(HCI_UART_PROTO_SET, &hu->flags))
++ return;
++
++ spin_lock(&hu->rx_lock);
++ hu->proto->recv(hu, (void *) data, count);
++ hu->hdev.stat.byte_rx += count;
++ spin_unlock(&hu->rx_lock);
++
++ if (test_and_clear_bit(TTY_THROTTLED,&tty->flags) && tty->driver.unthrottle)
++ tty->driver.unthrottle(tty);
++}
++
++static int hci_uart_register_dev(struct hci_uart *hu)
++{
++ struct hci_dev *hdev;
++
++ BT_DBG("");
++
++ /* Initialize and register HCI device */
++ hdev = &hu->hdev;
++
++ hdev->type = HCI_UART;
++ hdev->driver_data = hu;
++
++ hdev->open = hci_uart_open;
++ hdev->close = hci_uart_close;
++ hdev->flush = hci_uart_flush;
++ hdev->send = hci_uart_send_frame;
++ hdev->destruct = hci_uart_destruct;
++
++ if (hci_register_dev(hdev) < 0) {
++ BT_ERR("Can't register HCI device %s", hdev->name);
++ return -ENODEV;
++ }
++ MOD_INC_USE_COUNT;
++ return 0;
++}
++
++static int hci_uart_set_proto(struct hci_uart *hu, int id)
++{
++ struct hci_uart_proto *p;
++ int err;
++
++ p = hci_uart_get_proto(id);
++ if (!p)
++ return -EPROTONOSUPPORT;
++
++ err = p->open(hu);
++ if (err)
++ return err;
++
++ hu->proto = p;
++
++ err = hci_uart_register_dev(hu);
++ if (err) {
++ p->close(hu);
++ return err;
++ }
++ return 0;
++}
++
++/* hci_uart_tty_ioctl()
++ *
++ * Process IOCTL system call for the tty device.
++ *
++ * Arguments:
++ *
++ * tty pointer to tty instance data
++ * file pointer to open file object for device
++ * cmd IOCTL command code
++ * arg argument for IOCTL call (cmd dependent)
++ *
++ * Return Value: Command dependent
++ */
++static int hci_uart_tty_ioctl(struct tty_struct *tty, struct file * file,
++ unsigned int cmd, unsigned long arg)
++{
++ struct hci_uart *hu = (void *)tty->disc_data;
++ int err = 0;
++
++ BT_DBG("");
++
++ /* Verify the status of the device */
++ if (!hu)
++ return -EBADF;
++
++ switch (cmd) {
++ case HCIUARTSETPROTO:
++ if (!test_and_set_bit(HCI_UART_PROTO_SET, &hu->flags)) {
++ err = hci_uart_set_proto(hu, arg);
++ if (err) {
++ clear_bit(HCI_UART_PROTO_SET, &hu->flags);
++ return err;
++ }
++ tty->low_latency = 1;
++ } else
++ return -EBUSY;
++
++ case HCIUARTGETPROTO:
++ if (test_bit(HCI_UART_PROTO_SET, &hu->flags))
++ return hu->proto->id;
++ return -EUNATCH;
++
++ default:
++ err = n_tty_ioctl(tty, file, cmd, arg);
++ break;
++ };
++
++ return err;
++}
++
++/*
++ * We don't provide read/write/poll interface for user space.
++ */
++static ssize_t hci_uart_tty_read(struct tty_struct *tty, struct file *file, unsigned char *buf, size_t nr)
++{
++ return 0;
++}
++static ssize_t hci_uart_tty_write(struct tty_struct *tty, struct file *file, const unsigned char *data, size_t count)
++{
++ return 0;
++}
++static unsigned int hci_uart_tty_poll(struct tty_struct *tty, struct file *filp, poll_table *wait)
++{
++ return 0;
++}
++
++#ifdef CONFIG_BLUEZ_HCIUART_H4
++int h4_init(void);
++int h4_deinit(void);
++#endif
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP
++int bcsp_init(void);
++int bcsp_deinit(void);
++#endif
++
++int __init hci_uart_init(void)
++{
++ static struct tty_ldisc hci_uart_ldisc;
++ int err;
++
++ BT_INFO("BlueZ HCI UART driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
++ VERSION);
++ BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
++
++ /* Register the tty discipline */
++
++ memset(&hci_uart_ldisc, 0, sizeof (hci_uart_ldisc));
++ hci_uart_ldisc.magic = TTY_LDISC_MAGIC;
++ hci_uart_ldisc.name = "n_hci";
++ hci_uart_ldisc.open = hci_uart_tty_open;
++ hci_uart_ldisc.close = hci_uart_tty_close;
++ hci_uart_ldisc.read = hci_uart_tty_read;
++ hci_uart_ldisc.write = hci_uart_tty_write;
++ hci_uart_ldisc.ioctl = hci_uart_tty_ioctl;
++ hci_uart_ldisc.poll = hci_uart_tty_poll;
++ hci_uart_ldisc.receive_room= hci_uart_tty_room;
++ hci_uart_ldisc.receive_buf = hci_uart_tty_receive;
++ hci_uart_ldisc.write_wakeup= hci_uart_tty_wakeup;
++
++ if ((err = tty_register_ldisc(N_HCI, &hci_uart_ldisc))) {
++ BT_ERR("Can't register HCI line discipline (%d)", err);
++ return err;
++ }
++
++#ifdef CONFIG_BLUEZ_HCIUART_H4
++ h4_init();
++#endif
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP
++ bcsp_init();
++#endif
++
++ return 0;
++}
++
++void hci_uart_cleanup(void)
++{
++ int err;
++
++#ifdef CONFIG_BLUEZ_HCIUART_H4
++ h4_deinit();
++#endif
++#ifdef CONFIG_BLUEZ_HCIUART_BCSP
++ bcsp_deinit();
++#endif
++
++ /* Release tty registration of line discipline */
++ if ((err = tty_register_ldisc(N_HCI, NULL)))
++ BT_ERR("Can't unregister HCI line discipline (%d)", err);
++}
++
++module_init(hci_uart_init);
++module_exit(hci_uart_cleanup);
++
++MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
++MODULE_DESCRIPTION("BlueZ HCI UART driver ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/drivers/bluetooth/hci_uart.c linux-2.4.18-mh9/drivers/bluetooth/hci_uart.c
+--- linux-2.4.18/drivers/bluetooth/hci_uart.c Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/drivers/bluetooth/hci_uart.c Thu Jan 1 01:00:00 1970
+@@ -1,580 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * BlueZ HCI UART driver.
+- *
+- * $Id: hci_uart.c,v 1.5 2001/07/05 18:42:44 maxk Exp $
+- */
+-#define VERSION "1.0"
+-
+-#include <linux/config.h>
+-#include <linux/module.h>
+-
+-#include <linux/version.h>
+-#include <linux/config.h>
+-#include <linux/kernel.h>
+-#include <linux/init.h>
+-#include <linux/sched.h>
+-#include <linux/types.h>
+-#include <linux/fcntl.h>
+-#include <linux/interrupt.h>
+-#include <linux/ptrace.h>
+-#include <linux/poll.h>
+-
+-#include <linux/slab.h>
+-#include <linux/tty.h>
+-#include <linux/errno.h>
+-#include <linux/string.h>
+-#include <linux/signal.h>
+-#include <linux/ioctl.h>
+-#include <linux/skbuff.h>
+-
+-#include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+-#include <net/bluetooth/hci_core.h>
+-#include <net/bluetooth/hci_uart.h>
+-
+-#ifndef HCI_UART_DEBUG
+-#undef DBG
+-#define DBG( A... )
+-#undef DMP
+-#define DMP( A... )
+-#endif
+-
+-/* ------- Interface to HCI layer ------ */
+-/* Initialize device */
+-int n_hci_open(struct hci_dev *hdev)
+-{
+- DBG("%s %p", hdev->name, hdev);
+-
+- /* Nothing to do for UART driver */
+-
+- hdev->flags |= HCI_RUNNING;
+-
+- return 0;
+-}
+-
+-/* Reset device */
+-int n_hci_flush(struct hci_dev *hdev)
+-{
+- struct n_hci *n_hci = (struct n_hci *) hdev->driver_data;
+- struct tty_struct *tty = n_hci->tty;
+-
+- DBG("hdev %p tty %p", hdev, tty);
+-
+- /* Drop TX queue */
+- skb_queue_purge(&n_hci->txq);
+-
+- /* Flush any pending characters in the driver and discipline. */
+- if (tty->ldisc.flush_buffer)
+- tty->ldisc.flush_buffer(tty);
+-
+- if (tty->driver.flush_buffer)
+- tty->driver.flush_buffer(tty);
+-
+- return 0;
+-}
+-
+-/* Close device */
+-int n_hci_close(struct hci_dev *hdev)
+-{
+- DBG("hdev %p", hdev);
+-
+- hdev->flags &= ~HCI_RUNNING;
+-
+- n_hci_flush(hdev);
+-
+- return 0;
+-}
+-
+-int n_hci_tx_wakeup(struct n_hci *n_hci)
+-{
+- register struct tty_struct *tty = n_hci->tty;
+-
+- if (test_and_set_bit(TRANS_SENDING, &n_hci->tx_state)) {
+- set_bit(TRANS_WAKEUP, &n_hci->tx_state);
+- return 0;
+- }
+-
+- DBG("");
+- do {
+- register struct sk_buff *skb;
+- register int len;
+-
+- clear_bit(TRANS_WAKEUP, &n_hci->tx_state);
+-
+- if (!(skb = skb_dequeue(&n_hci->txq)))
+- break;
+-
+- DMP(skb->data, skb->len);
+-
+- /* Send frame to TTY driver */
+- tty->flags |= (1 << TTY_DO_WRITE_WAKEUP);
+- len = tty->driver.write(tty, 0, skb->data, skb->len);
+-
+- n_hci->hdev.stat.byte_tx += len;
+-
+- DBG("sent %d", len);
+-
+- if (len == skb->len) {
+- /* Full frame was sent */
+- kfree_skb(skb);
+- } else {
+- /* Subtract sent part and requeue */
+- skb_pull(skb, len);
+- skb_queue_head(&n_hci->txq, skb);
+- }
+- } while (test_bit(TRANS_WAKEUP, &n_hci->tx_state));
+- clear_bit(TRANS_SENDING, &n_hci->tx_state);
+-
+- return 0;
+-}
+-
+-/* Send frames from HCI layer */
+-int n_hci_send_frame(struct sk_buff *skb)
+-{
+- struct hci_dev* hdev = (struct hci_dev *) skb->dev;
+- struct tty_struct *tty;
+- struct n_hci *n_hci;
+-
+- if (!hdev) {
+- ERR("Frame for uknown device (hdev=NULL)");
+- return -ENODEV;
+- }
+-
+- if (!(hdev->flags & HCI_RUNNING))
+- return -EBUSY;
+-
+- n_hci = (struct n_hci *) hdev->driver_data;
+- tty = n_hci2tty(n_hci);
+-
+- DBG("%s: type %d len %d", hdev->name, skb->pkt_type, skb->len);
+-
+- switch (skb->pkt_type) {
+- case HCI_COMMAND_PKT:
+- hdev->stat.cmd_tx++;
+- break;
+-
+- case HCI_ACLDATA_PKT:
+- hdev->stat.acl_tx++;
+- break;
+-
+- case HCI_SCODATA_PKT:
+- hdev->stat.cmd_tx++;
+- break;
+- };
+-
+- /* Prepend skb with frame type and queue */
+- memcpy(skb_push(skb, 1), &skb->pkt_type, 1);
+- skb_queue_tail(&n_hci->txq, skb);
+-
+- n_hci_tx_wakeup(n_hci);
+-
+- return 0;
+-}
+-
+-/* ------ LDISC part ------ */
+-
+-/* n_hci_tty_open
+- *
+- * Called when line discipline changed to N_HCI.
+- *
+- * Arguments:
+- * tty pointer to tty info structure
+- * Return Value:
+- * 0 if success, otherwise error code
+- */
+-static int n_hci_tty_open(struct tty_struct *tty)
+-{
+- struct n_hci *n_hci = tty2n_hci(tty);
+- struct hci_dev *hdev;
+-
+- DBG("tty %p", tty);
+-
+- if (n_hci)
+- return -EEXIST;
+-
+- if (!(n_hci = kmalloc(sizeof(struct n_hci), GFP_KERNEL))) {
+- ERR("Can't allocate controll structure");
+- return -ENFILE;
+- }
+- memset(n_hci, 0, sizeof(struct n_hci));
+-
+- /* Initialize and register HCI device */
+- hdev = &n_hci->hdev;
+-
+- hdev->type = HCI_UART;
+- hdev->driver_data = n_hci;
+-
+- hdev->open = n_hci_open;
+- hdev->close = n_hci_close;
+- hdev->flush = n_hci_flush;
+- hdev->send = n_hci_send_frame;
+-
+- if (hci_register_dev(hdev) < 0) {
+- ERR("Can't register HCI device %s", hdev->name);
+- kfree(n_hci);
+- return -ENODEV;
+- }
+-
+- tty->disc_data = n_hci;
+- n_hci->tty = tty;
+-
+- spin_lock_init(&n_hci->rx_lock);
+- n_hci->rx_state = WAIT_PACKET_TYPE;
+-
+- skb_queue_head_init(&n_hci->txq);
+-
+- MOD_INC_USE_COUNT;
+-
+- /* Flush any pending characters in the driver and discipline. */
+- if (tty->ldisc.flush_buffer)
+- tty->ldisc.flush_buffer(tty);
+-
+- if (tty->driver.flush_buffer)
+- tty->driver.flush_buffer(tty);
+-
+- return 0;
+-}
+-
+-/* n_hci_tty_close()
+- *
+- * Called when the line discipline is changed to something
+- * else, the tty is closed, or the tty detects a hangup.
+- */
+-static void n_hci_tty_close(struct tty_struct *tty)
+-{
+- struct n_hci *n_hci = tty2n_hci(tty);
+- struct hci_dev *hdev = &n_hci->hdev;
+-
+- DBG("tty %p hdev %p", tty, hdev);
+-
+- if (n_hci != NULL) {
+- n_hci_close(hdev);
+-
+- if (hci_unregister_dev(hdev) < 0) {
+- ERR("Can't unregister HCI device %s",hdev->name);
+- }
+-
+- hdev->driver_data = NULL;
+- tty->disc_data = NULL;
+- kfree(n_hci);
+-
+- MOD_DEC_USE_COUNT;
+- }
+-}
+-
+-/* n_hci_tty_wakeup()
+- *
+- * Callback for transmit wakeup. Called when low level
+- * device driver can accept more send data.
+- *
+- * Arguments: tty pointer to associated tty instance data
+- * Return Value: None
+- */
+-static void n_hci_tty_wakeup( struct tty_struct *tty )
+-{
+- struct n_hci *n_hci = tty2n_hci(tty);
+-
+- DBG("");
+-
+- if (!n_hci)
+- return;
+-
+- tty->flags &= ~(1 << TTY_DO_WRITE_WAKEUP);
+-
+- if (tty != n_hci->tty)
+- return;
+-
+- n_hci_tx_wakeup(n_hci);
+-}
+-
+-/* n_hci_tty_room()
+- *
+- * Callback function from tty driver. Return the amount of
+- * space left in the receiver's buffer to decide if remote
+- * transmitter is to be throttled.
+- *
+- * Arguments: tty pointer to associated tty instance data
+- * Return Value: number of bytes left in receive buffer
+- */
+-static int n_hci_tty_room (struct tty_struct *tty)
+-{
+- return 65536;
+-}
+-
+-static inline int n_hci_check_data_len(struct n_hci *n_hci, int len)
+-{
+- register int room = skb_tailroom(n_hci->rx_skb);
+-
+- DBG("len %d room %d", len, room);
+- if (!len) {
+- DMP(n_hci->rx_skb->data, n_hci->rx_skb->len);
+- hci_recv_frame(n_hci->rx_skb);
+- } else if (len > room) {
+- ERR("Data length is to large");
+- kfree_skb(n_hci->rx_skb);
+- n_hci->hdev.stat.err_rx++;
+- } else {
+- n_hci->rx_state = WAIT_DATA;
+- n_hci->rx_count = len;
+- return len;
+- }
+-
+- n_hci->rx_state = WAIT_PACKET_TYPE;
+- n_hci->rx_skb = NULL;
+- n_hci->rx_count = 0;
+- return 0;
+-}
+-
+-static inline void n_hci_rx(struct n_hci *n_hci, const __u8 * data, char *flags, int count)
+-{
+- register const char *ptr;
+- hci_event_hdr *eh;
+- hci_acl_hdr *ah;
+- hci_sco_hdr *sh;
+- register int len, type, dlen;
+-
+- DBG("count %d state %ld rx_count %ld", count, n_hci->rx_state, n_hci->rx_count);
+-
+- n_hci->hdev.stat.byte_rx += count;
+-
+- ptr = data;
+- while (count) {
+- if (n_hci->rx_count) {
+- len = MIN(n_hci->rx_count, count);
+- memcpy(skb_put(n_hci->rx_skb, len), ptr, len);
+- n_hci->rx_count -= len; count -= len; ptr += len;
+-
+- if (n_hci->rx_count)
+- continue;
+-
+- switch (n_hci->rx_state) {
+- case WAIT_DATA:
+- DBG("Complete data");
+-
+- DMP(n_hci->rx_skb->data, n_hci->rx_skb->len);
+-
+- hci_recv_frame(n_hci->rx_skb);
+-
+- n_hci->rx_state = WAIT_PACKET_TYPE;
+- n_hci->rx_skb = NULL;
+- continue;
+-
+- case WAIT_EVENT_HDR:
+- eh = (hci_event_hdr *) n_hci->rx_skb->data;
+-
+- DBG("Event header: evt 0x%2.2x plen %d", eh->evt, eh->plen);
+-
+- n_hci_check_data_len(n_hci, eh->plen);
+- continue;
+-
+- case WAIT_ACL_HDR:
+- ah = (hci_acl_hdr *) n_hci->rx_skb->data;
+- dlen = __le16_to_cpu(ah->dlen);
+-
+- DBG("ACL header: dlen %d", dlen);
+-
+- n_hci_check_data_len(n_hci, dlen);
+- continue;
+-
+- case WAIT_SCO_HDR:
+- sh = (hci_sco_hdr *) n_hci->rx_skb->data;
+-
+- DBG("SCO header: dlen %d", sh->dlen);
+-
+- n_hci_check_data_len(n_hci, sh->dlen);
+- continue;
+- };
+- }
+-
+- /* WAIT_PACKET_TYPE */
+- switch (*ptr) {
+- case HCI_EVENT_PKT:
+- DBG("Event packet");
+- n_hci->rx_state = WAIT_EVENT_HDR;
+- n_hci->rx_count = HCI_EVENT_HDR_SIZE;
+- type = HCI_EVENT_PKT;
+- break;
+-
+- case HCI_ACLDATA_PKT:
+- DBG("ACL packet");
+- n_hci->rx_state = WAIT_ACL_HDR;
+- n_hci->rx_count = HCI_ACL_HDR_SIZE;
+- type = HCI_ACLDATA_PKT;
+- break;
+-
+- case HCI_SCODATA_PKT:
+- DBG("SCO packet");
+- n_hci->rx_state = WAIT_SCO_HDR;
+- n_hci->rx_count = HCI_SCO_HDR_SIZE;
+- type = HCI_SCODATA_PKT;
+- break;
+-
+- default:
+- ERR("Unknown HCI packet type %2.2x", (__u8)*ptr);
+- n_hci->hdev.stat.err_rx++;
+- ptr++; count--;
+- continue;
+- };
+- ptr++; count--;
+-
+- /* Allocate packet */
+- if (!(n_hci->rx_skb = bluez_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC))) {
+- ERR("Can't allocate mem for new packet");
+-
+- n_hci->rx_state = WAIT_PACKET_TYPE;
+- n_hci->rx_count = 0;
+- return;
+- }
+- n_hci->rx_skb->dev = (void *) &n_hci->hdev;
+- n_hci->rx_skb->pkt_type = type;
+- }
+-}
+-
+-/* n_hci_tty_receive()
+- *
+- * Called by tty low level driver when receive data is
+- * available.
+- *
+- * Arguments: tty pointer to tty isntance data
+- * data pointer to received data
+- * flags pointer to flags for data
+- * count count of received data in bytes
+- *
+- * Return Value: None
+- */
+-static void n_hci_tty_receive(struct tty_struct *tty, const __u8 * data, char *flags, int count)
+-{
+- struct n_hci *n_hci = tty2n_hci(tty);
+-
+- if (!n_hci || tty != n_hci->tty)
+- return;
+-
+- spin_lock(&n_hci->rx_lock);
+- n_hci_rx(n_hci, data, flags, count);
+- spin_unlock(&n_hci->rx_lock);
+-
+- if (test_and_clear_bit(TTY_THROTTLED,&tty->flags) && tty->driver.unthrottle)
+- tty->driver.unthrottle(tty);
+-}
+-
+-/* n_hci_tty_ioctl()
+- *
+- * Process IOCTL system call for the tty device.
+- *
+- * Arguments:
+- *
+- * tty pointer to tty instance data
+- * file pointer to open file object for device
+- * cmd IOCTL command code
+- * arg argument for IOCTL call (cmd dependent)
+- *
+- * Return Value: Command dependent
+- */
+-static int n_hci_tty_ioctl (struct tty_struct *tty, struct file * file,
+- unsigned int cmd, unsigned long arg)
+-{
+- struct n_hci *n_hci = tty2n_hci(tty);
+- int error = 0;
+-
+- DBG("");
+-
+- /* Verify the status of the device */
+- if (!n_hci)
+- return -EBADF;
+-
+- switch (cmd) {
+- default:
+- error = n_tty_ioctl(tty, file, cmd, arg);
+- break;
+- };
+-
+- return error;
+-}
+-
+-/*
+- * We don't provide read/write/poll interface for user space.
+- */
+-static ssize_t n_hci_tty_read(struct tty_struct *tty, struct file *file, unsigned char *buf, size_t nr)
+-{
+- return 0;
+-}
+-static ssize_t n_hci_tty_write(struct tty_struct *tty, struct file *file, const unsigned char *data, size_t count)
+-{
+- return 0;
+-}
+-static unsigned int n_hci_tty_poll(struct tty_struct *tty, struct file *filp, poll_table *wait)
+-{
+- return 0;
+-}
+-
+-int __init n_hci_init(void)
+-{
+- static struct tty_ldisc n_hci_ldisc;
+- int err;
+-
+- INF("BlueZ HCI UART driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
+- VERSION);
+- INF("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
+-
+- /* Register the tty discipline */
+-
+- memset(&n_hci_ldisc, 0, sizeof (n_hci_ldisc));
+- n_hci_ldisc.magic = TTY_LDISC_MAGIC;
+- n_hci_ldisc.name = "n_hci";
+- n_hci_ldisc.open = n_hci_tty_open;
+- n_hci_ldisc.close = n_hci_tty_close;
+- n_hci_ldisc.read = n_hci_tty_read;
+- n_hci_ldisc.write = n_hci_tty_write;
+- n_hci_ldisc.ioctl = n_hci_tty_ioctl;
+- n_hci_ldisc.poll = n_hci_tty_poll;
+- n_hci_ldisc.receive_room= n_hci_tty_room;
+- n_hci_ldisc.receive_buf = n_hci_tty_receive;
+- n_hci_ldisc.write_wakeup= n_hci_tty_wakeup;
+-
+- if ((err = tty_register_ldisc(N_HCI, &n_hci_ldisc))) {
+- ERR("Can't register HCI line discipline (%d)", err);
+- return err;
+- }
+-
+- return 0;
+-}
+-
+-void n_hci_cleanup(void)
+-{
+- int err;
+-
+- /* Release tty registration of line discipline */
+- if ((err = tty_register_ldisc(N_HCI, NULL)))
+- ERR("Can't unregister HCI line discipline (%d)", err);
+-}
+-
+-module_init(n_hci_init);
+-module_exit(n_hci_cleanup);
+-
+-MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
+-MODULE_DESCRIPTION("BlueZ HCI UART driver ver " VERSION);
+-MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/drivers/bluetooth/hci_uart.h linux-2.4.18-mh9/drivers/bluetooth/hci_uart.h
+--- linux-2.4.18/drivers/bluetooth/hci_uart.h Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/drivers/bluetooth/hci_uart.h Mon Aug 25 18:38:10 2003
+@@ -0,0 +1,81 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_uart.h,v 1.2 2002/09/09 01:17:32 maxk Exp $
++ */
++
++#ifndef N_HCI
++#define N_HCI 15
++#endif
++
++/* Ioctls */
++#define HCIUARTSETPROTO _IOW('U', 200, int)
++#define HCIUARTGETPROTO _IOR('U', 201, int)
++
++/* UART protocols */
++#define HCI_UART_MAX_PROTO 3
++
++#define HCI_UART_H4 0
++#define HCI_UART_BCSP 1
++#define HCI_UART_NCSP 2
++
++#ifdef __KERNEL__
++struct hci_uart;
++
++struct hci_uart_proto {
++ unsigned int id;
++ int (*open)(struct hci_uart *hu);
++ int (*close)(struct hci_uart *hu);
++ int (*flush)(struct hci_uart *hu);
++ int (*recv)(struct hci_uart *hu, void *data, int len);
++ int (*enqueue)(struct hci_uart *hu, struct sk_buff *skb);
++ struct sk_buff *(*dequeue)(struct hci_uart *hu);
++};
++
++struct hci_uart {
++ struct tty_struct *tty;
++ struct hci_dev hdev;
++ unsigned long flags;
++
++ struct hci_uart_proto *proto;
++ void *priv;
++
++ struct sk_buff *tx_skb;
++ unsigned long tx_state;
++ spinlock_t rx_lock;
++};
++
++/* HCI_UART flag bits */
++#define HCI_UART_PROTO_SET 0
++
++/* TX states */
++#define HCI_UART_SENDING 1
++#define HCI_UART_TX_WAKEUP 2
++
++int hci_uart_register_proto(struct hci_uart_proto *p);
++int hci_uart_unregister_proto(struct hci_uart_proto *p);
++int hci_uart_tx_wakeup(struct hci_uart *hu);
++
++#endif /* __KERNEL__ */
+diff -urN linux-2.4.18/drivers/bluetooth/hci_usb.c linux-2.4.18-mh9/drivers/bluetooth/hci_usb.c
+--- linux-2.4.18/drivers/bluetooth/hci_usb.c Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/drivers/bluetooth/hci_usb.c Mon Aug 25 18:38:12 2003
+@@ -1,9 +1,10 @@
+ /*
+- BlueZ - Bluetooth protocol stack for Linux
++ HCI USB driver for Linux Bluetooth protocol stack (BlueZ)
+ Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+
++ Copyright (C) 2003 Maxim Krasnyansky <maxk@qualcomm.com>
++
+ 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;
+@@ -23,598 +24,901 @@
+ */
+
+ /*
+- * BlueZ HCI USB driver.
+ * Based on original USB Bluetooth driver for Linux kernel
+ * Copyright (c) 2000 Greg Kroah-Hartman <greg@kroah.com>
+ * Copyright (c) 2000 Mark Douglas Corner <mcorner@umich.edu>
+ *
+- * $Id: hci_usb.c,v 1.5 2001/07/05 18:42:44 maxk Exp $
++ * $Id: hci_usb.c,v 1.8 2002/07/18 17:23:09 maxk Exp $
+ */
+-#define VERSION "1.0"
++#define VERSION "2.4"
+
+ #include <linux/config.h>
+ #include <linux/module.h>
+
+ #include <linux/version.h>
+-#include <linux/config.h>
+ #include <linux/kernel.h>
+ #include <linux/init.h>
+ #include <linux/sched.h>
++#include <linux/unistd.h>
+ #include <linux/types.h>
+-#include <linux/fcntl.h>
+ #include <linux/interrupt.h>
+-#include <linux/ptrace.h>
+-#include <linux/poll.h>
+
+ #include <linux/slab.h>
+-#include <linux/tty.h>
+ #include <linux/errno.h>
+ #include <linux/string.h>
+-#include <linux/signal.h>
+-#include <linux/ioctl.h>
+ #include <linux/skbuff.h>
+
+ #include <linux/usb.h>
+
+ #include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+ #include <net/bluetooth/hci_core.h>
+-#include <net/bluetooth/hci_usb.h>
++
++#include "hci_usb.h"
+
+ #ifndef HCI_USB_DEBUG
+-#undef DBG
+-#define DBG( A... )
+-#undef DMP
+-#define DMP( A... )
++#undef BT_DBG
++#define BT_DBG( A... )
++#undef BT_DMP
++#define BT_DMP( A... )
+ #endif
+
+-static struct usb_device_id usb_bluetooth_ids [] = {
++#ifndef CONFIG_BLUEZ_USB_ZERO_PACKET
++#undef USB_ZERO_PACKET
++#define USB_ZERO_PACKET 0
++#endif
++
++static struct usb_driver hci_usb_driver;
++
++static struct usb_device_id bluetooth_ids[] = {
++ /* Generic Bluetooth USB device */
+ { USB_DEVICE_INFO(HCI_DEV_CLASS, HCI_DEV_SUBCLASS, HCI_DEV_PROTOCOL) },
++
++ /* Ericsson with non-standard id */
++ { USB_DEVICE(0x0bdb, 0x1002) },
++
++ /* Bluetooth Ultraport Module from IBM */
++ { USB_DEVICE(0x04bf, 0x030a) },
++
+ { } /* Terminating entry */
+ };
+
+-MODULE_DEVICE_TABLE (usb, usb_bluetooth_ids);
++MODULE_DEVICE_TABLE (usb, bluetooth_ids);
+
+-static int hci_usb_ctrl_msg(struct hci_usb *husb, struct sk_buff *skb);
+-static int hci_usb_write_msg(struct hci_usb *husb, struct sk_buff *skb);
++static struct usb_device_id ignore_ids[] = {
++ /* Broadcom BCM2033 without firmware */
++ { USB_DEVICE(0x0a5c, 0x2033) },
+
+-static void hci_usb_unlink_urbs(struct hci_usb *husb)
+-{
+- usb_unlink_urb(husb->read_urb);
+- usb_unlink_urb(husb->intr_urb);
+- usb_unlink_urb(husb->ctrl_urb);
+- usb_unlink_urb(husb->write_urb);
+-}
++ { } /* Terminating entry */
++};
+
+-static void hci_usb_free_bufs(struct hci_usb *husb)
++struct _urb *_urb_alloc(int isoc, int gfp)
+ {
+- if (husb->read_urb) {
+- if (husb->read_urb->transfer_buffer)
+- kfree(husb->read_urb->transfer_buffer);
+- usb_free_urb(husb->read_urb);
+- }
+-
+- if (husb->intr_urb) {
+- if (husb->intr_urb->transfer_buffer)
+- kfree(husb->intr_urb->transfer_buffer);
+- usb_free_urb(husb->intr_urb);
++ struct _urb *_urb = kmalloc(sizeof(struct _urb) +
++ sizeof(iso_packet_descriptor_t) * isoc, gfp);
++ if (_urb) {
++ memset(_urb, 0, sizeof(*_urb));
++ spin_lock_init(&_urb->urb.lock);
++ }
++ return _urb;
++}
++
++struct _urb *_urb_dequeue(struct _urb_queue *q)
++{
++ struct _urb *_urb = NULL;
++ unsigned long flags;
++ spin_lock_irqsave(&q->lock, flags);
++ {
++ struct list_head *head = &q->head;
++ struct list_head *next = head->next;
++ if (next != head) {
++ _urb = list_entry(next, struct _urb, list);
++ list_del(next); _urb->queue = NULL;
++ }
+ }
++ spin_unlock_irqrestore(&q->lock, flags);
++ return _urb;
++}
+
+- if (husb->ctrl_urb)
+- usb_free_urb(husb->ctrl_urb);
++static void hci_usb_rx_complete(struct urb *urb);
++static void hci_usb_tx_complete(struct urb *urb);
+
+- if (husb->write_urb)
+- usb_free_urb(husb->write_urb);
++#define __pending_tx(husb, type) (&husb->pending_tx[type-1])
++#define __pending_q(husb, type) (&husb->pending_q[type-1])
++#define __completed_q(husb, type) (&husb->completed_q[type-1])
++#define __transmit_q(husb, type) (&husb->transmit_q[type-1])
++#define __reassembly(husb, type) (husb->reassembly[type-1])
+
+- if (husb->intr_skb)
+- kfree_skb(husb->intr_skb);
++static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
++{
++ return _urb_dequeue(__completed_q(husb, type));
+ }
+
+-/* ------- Interface to HCI layer ------ */
+-/* Initialize device */
+-int hci_usb_open(struct hci_dev *hdev)
++static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
+ {
+- struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
+- int status;
+-
+- DBG("%s", hdev->name);
+-
+- husb->read_urb->dev = husb->udev;
+- if ((status = usb_submit_urb(husb->read_urb)))
+- DBG("read submit failed. %d", status);
++ int offset = 0, i;
+
+- husb->intr_urb->dev = husb->udev;
+- if ((status = usb_submit_urb(husb->intr_urb)))
+- DBG("interrupt submit failed. %d", status);
++ BT_DBG("len %d mtu %d", len, mtu);
+
+- hdev->flags |= HCI_RUNNING;
+-
+- return 0;
++ for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
++ urb->iso_frame_desc[i].offset = offset;
++ urb->iso_frame_desc[i].length = mtu;
++ BT_DBG("desc %d offset %d len %d", i, offset, mtu);
++ }
++ if (len && i < HCI_MAX_ISOC_FRAMES) {
++ urb->iso_frame_desc[i].offset = offset;
++ urb->iso_frame_desc[i].length = len;
++ BT_DBG("desc %d offset %d len %d", i, offset, len);
++ i++;
++ }
++ urb->number_of_packets = i;
+ }
+
+-/* Reset device */
+-int hci_usb_flush(struct hci_dev *hdev)
++static int hci_usb_intr_rx_submit(struct hci_usb *husb)
+ {
+- struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
++ struct _urb *_urb;
++ struct urb *urb;
++ int err, pipe, interval, size;
++ void *buf;
+
+- DBG("%s", hdev->name);
++ BT_DBG("%s", husb->hdev.name);
+
+- /* Drop TX queues */
+- skb_queue_purge(&husb->tx_ctrl_q);
+- skb_queue_purge(&husb->tx_write_q);
++ size = husb->intr_in_ep->wMaxPacketSize;
+
+- return 0;
++ buf = kmalloc(size, GFP_ATOMIC);
++ if (!buf)
++ return -ENOMEM;
++
++ _urb = _urb_alloc(0, GFP_ATOMIC);
++ if (!_urb) {
++ kfree(buf);
++ return -ENOMEM;
++ }
++ _urb->type = HCI_EVENT_PKT;
++ _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
++
++ urb = &_urb->urb;
++ pipe = usb_rcvintpipe(husb->udev, husb->intr_in_ep->bEndpointAddress);
++ interval = husb->intr_in_ep->bInterval;
++ FILL_INT_URB(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s intr rx submit failed urb %p err %d",
++ husb->hdev.name, urb, err);
++ _urb_unlink(_urb);
++ _urb_free(_urb);
++ kfree(buf);
++ }
++ return err;
+ }
+
+-/* Close device */
+-int hci_usb_close(struct hci_dev *hdev)
++static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
+ {
+- struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
++ struct _urb *_urb;
++ struct urb *urb;
++ int err, pipe, size = HCI_MAX_FRAME_SIZE;
++ void *buf;
+
+- DBG("%s", hdev->name);
++ buf = kmalloc(size, GFP_ATOMIC);
++ if (!buf)
++ return -ENOMEM;
+
+- hdev->flags &= ~HCI_RUNNING;
+- hci_usb_unlink_urbs(husb);
++ _urb = _urb_alloc(0, GFP_ATOMIC);
++ if (!_urb) {
++ kfree(buf);
++ return -ENOMEM;
++ }
++ _urb->type = HCI_ACLDATA_PKT;
++ _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
+
+- hci_usb_flush(hdev);
++ urb = &_urb->urb;
++ pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->bEndpointAddress);
++ FILL_BULK_URB(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
++ urb->transfer_flags = USB_QUEUE_BULK;
+
+- return 0;
++ BT_DBG("%s urb %p", husb->hdev.name, urb);
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s bulk rx submit failed urb %p err %d",
++ husb->hdev.name, urb, err);
++ _urb_unlink(_urb);
++ _urb_free(_urb);
++ kfree(buf);
++ }
++ return err;
+ }
+
+-void hci_usb_ctrl_wakeup(struct hci_usb *husb)
++#ifdef CONFIG_BLUEZ_USB_SCO
++static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
+ {
+- struct sk_buff *skb;
+-
+- if (test_and_set_bit(HCI_TX_CTRL, &husb->tx_state))
+- return;
++ struct _urb *_urb;
++ struct urb *urb;
++ int err, mtu, size;
++ void *buf;
+
+- DBG("%s", husb->hdev.name);
++ mtu = husb->isoc_in_ep->wMaxPacketSize;
++ size = mtu * HCI_MAX_ISOC_FRAMES;
+
+- if (!(skb = skb_dequeue(&husb->tx_ctrl_q)))
+- goto done;
++ buf = kmalloc(size, GFP_ATOMIC);
++ if (!buf)
++ return -ENOMEM;
+
+- if (hci_usb_ctrl_msg(husb, skb)){
+- kfree_skb(skb);
+- goto done;
++ _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
++ if (!_urb) {
++ kfree(buf);
++ return -ENOMEM;
+ }
++ _urb->type = HCI_SCODATA_PKT;
++ _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
+
+- DMP(skb->data, skb->len);
++ urb = &_urb->urb;
+
+- husb->hdev.stat.byte_tx += skb->len;
+- return;
++ urb->context = husb;
++ urb->dev = husb->udev;
++ urb->pipe = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->bEndpointAddress);
++ urb->complete = hci_usb_rx_complete;
+
+-done:
+- clear_bit(HCI_TX_CTRL, &husb->tx_state);
+- return;
++ urb->transfer_buffer_length = size;
++ urb->transfer_buffer = buf;
++ urb->transfer_flags = USB_ISO_ASAP;
++
++ __fill_isoc_desc(urb, size, mtu);
++
++ BT_DBG("%s urb %p", husb->hdev.name, urb);
++
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s isoc rx submit failed urb %p err %d",
++ husb->hdev.name, urb, err);
++ _urb_unlink(_urb);
++ _urb_free(_urb);
++ kfree(buf);
++ }
++ return err;
+ }
++#endif
+
+-void hci_usb_write_wakeup(struct hci_usb *husb)
++/* Initialize device */
++static int hci_usb_open(struct hci_dev *hdev)
+ {
+- struct sk_buff *skb;
++ struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
++ int i, err;
++ unsigned long flags;
+
+- if (test_and_set_bit(HCI_TX_WRITE, &husb->tx_state))
+- return;
++ BT_DBG("%s", hdev->name);
+
+- DBG("%s", husb->hdev.name);
++ if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
+
+- if (!(skb = skb_dequeue(&husb->tx_write_q)))
+- goto done;
++ MOD_INC_USE_COUNT;
+
+- if (hci_usb_write_msg(husb, skb)) {
+- skb_queue_head(&husb->tx_write_q, skb);
+- goto done;
++ write_lock_irqsave(&husb->completion_lock, flags);
++
++ err = hci_usb_intr_rx_submit(husb);
++ if (!err) {
++ for (i = 0; i < HCI_MAX_BULK_RX; i++)
++ hci_usb_bulk_rx_submit(husb);
++
++#ifdef CONFIG_BLUEZ_USB_SCO
++ if (husb->isoc_iface)
++ for (i = 0; i < HCI_MAX_ISOC_RX; i++)
++ hci_usb_isoc_rx_submit(husb);
++#endif
++ } else {
++ clear_bit(HCI_RUNNING, &hdev->flags);
++ MOD_DEC_USE_COUNT;
+ }
+
+- DMP(skb->data, skb->len);
++ write_unlock_irqrestore(&husb->completion_lock, flags);
++ return err;
++}
++
++/* Reset device */
++static int hci_usb_flush(struct hci_dev *hdev)
++{
++ struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
++ int i;
+
+- husb->hdev.stat.byte_tx += skb->len;
+- return;
++ BT_DBG("%s", hdev->name);
+
+-done:
+- clear_bit(HCI_TX_WRITE, &husb->tx_state);
+- return;
++ for (i=0; i < 4; i++)
++ skb_queue_purge(&husb->transmit_q[i]);
++ return 0;
+ }
+
+-/* Send frames from HCI layer */
+-int hci_usb_send_frame(struct sk_buff *skb)
++static void hci_usb_unlink_urbs(struct hci_usb *husb)
+ {
+- struct hci_dev *hdev = (struct hci_dev *) skb->dev;
+- struct hci_usb *husb;
++ int i;
+
+- if (!hdev) {
+- ERR("frame for uknown device (hdev=NULL)");
+- return -ENODEV;
++ BT_DBG("%s", husb->hdev.name);
++
++ for (i=0; i < 4; i++) {
++ struct _urb *_urb;
++ struct urb *urb;
++
++ /* Kill pending requests */
++ while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
++ urb = &_urb->urb;
++ BT_DBG("%s unlinking _urb %p type %d urb %p",
++ husb->hdev.name, _urb, _urb->type, urb);
++ usb_unlink_urb(urb);
++ _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
++ }
++
++ /* Release completed requests */
++ while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
++ urb = &_urb->urb;
++ BT_DBG("%s freeing _urb %p type %d urb %p",
++ husb->hdev.name, _urb, _urb->type, urb);
++ if (urb->setup_packet)
++ kfree(urb->setup_packet);
++ if (urb->transfer_buffer)
++ kfree(urb->transfer_buffer);
++ _urb_free(_urb);
++ }
++
++ /* Release reassembly buffers */
++ if (husb->reassembly[i]) {
++ kfree_skb(husb->reassembly[i]);
++ husb->reassembly[i] = NULL;
++ }
+ }
++}
+
+- if (!(hdev->flags & HCI_RUNNING))
++/* Close device */
++static int hci_usb_close(struct hci_dev *hdev)
++{
++ struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
++ unsigned long flags;
++
++ if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
+ return 0;
+
+- husb = (struct hci_usb *) hdev->driver_data;
++ BT_DBG("%s", hdev->name);
+
+- DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
++ write_lock_irqsave(&husb->completion_lock, flags);
++
++ hci_usb_unlink_urbs(husb);
++ hci_usb_flush(hdev);
+
+- switch (skb->pkt_type) {
+- case HCI_COMMAND_PKT:
+- skb_queue_tail(&husb->tx_ctrl_q, skb);
+- hci_usb_ctrl_wakeup(husb);
+- hdev->stat.cmd_tx++;
+- return 0;
+-
+- case HCI_ACLDATA_PKT:
+- skb_queue_tail(&husb->tx_write_q, skb);
+- hci_usb_write_wakeup(husb);
+- hdev->stat.acl_tx++;
+- return 0;
+-
+- case HCI_SCODATA_PKT:
+- return -EOPNOTSUPP;
+- };
++ write_unlock_irqrestore(&husb->completion_lock, flags);
+
++ MOD_DEC_USE_COUNT;
+ return 0;
+ }
+
+-/* ---------- USB ------------- */
+-
+-static void hci_usb_ctrl(struct urb *urb)
++static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
+ {
+- struct sk_buff *skb = (struct sk_buff *) urb->context;
+- struct hci_dev *hdev;
+- struct hci_usb *husb;
+-
+- if (!skb)
+- return;
+- hdev = (struct hci_dev *) skb->dev;
+- husb = (struct hci_usb *) hdev->driver_data;
++ struct urb *urb = &_urb->urb;
++ int err;
+
+- DBG("%s", hdev->name);
++ BT_DBG("%s urb %p type %d", husb->hdev.name, urb, _urb->type);
++
++ _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
++ err = usb_submit_urb(urb);
++ if (err) {
++ BT_ERR("%s tx submit failed urb %p type %d err %d",
++ husb->hdev.name, urb, _urb->type, err);
++ _urb_unlink(_urb);
++ _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
++ } else
++ atomic_inc(__pending_tx(husb, _urb->type));
++
++ return err;
++}
++
++static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
++{
++ struct _urb *_urb = __get_completed(husb, skb->pkt_type);
++ devrequest *dr;
++ struct urb *urb;
++
++ if (!_urb) {
++ _urb = _urb_alloc(0, GFP_ATOMIC);
++ if (!_urb)
++ return -ENOMEM;
++ _urb->type = skb->pkt_type;
++
++ dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
++ if (!dr) {
++ _urb_free(_urb);
++ return -ENOMEM;
++ }
++ } else
++ dr = (void *) _urb->urb.setup_packet;
+
+- if (urb->status)
+- DBG("%s ctrl status: %d", hdev->name, urb->status);
++ dr->requesttype = HCI_CTRL_REQ;
++ dr->request = 0;
++ dr->index = 0;
++ dr->value = 0;
++ dr->length = __cpu_to_le16(skb->len);
+
+- clear_bit(HCI_TX_CTRL, &husb->tx_state);
+- kfree_skb(skb);
++ urb = &_urb->urb;
++ FILL_CONTROL_URB(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
++ (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
+
+- /* Wake up device */
+- hci_usb_ctrl_wakeup(husb);
++ BT_DBG("%s skb %p len %d", husb->hdev.name, skb, skb->len);
++
++ _urb->priv = skb;
++ return __tx_submit(husb, _urb);
+ }
+
+-static void hci_usb_bulk_write(struct urb *urb)
++static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
+ {
+- struct sk_buff *skb = (struct sk_buff *) urb->context;
+- struct hci_dev *hdev;
+- struct hci_usb *husb;
+-
+- if (!skb)
+- return;
+- hdev = (struct hci_dev *) skb->dev;
+- husb = (struct hci_usb *) hdev->driver_data;
++ struct _urb *_urb = __get_completed(husb, skb->pkt_type);
++ struct urb *urb;
++ int pipe;
+
+- DBG("%s", hdev->name);
+-
+- if (urb->status)
+- DBG("%s bulk write status: %d", hdev->name, urb->status);
++ if (!_urb) {
++ _urb = _urb_alloc(0, GFP_ATOMIC);
++ if (!_urb)
++ return -ENOMEM;
++ _urb->type = skb->pkt_type;
++ }
+
+- clear_bit(HCI_TX_WRITE, &husb->tx_state);
+- kfree_skb(skb);
++ urb = &_urb->urb;
++ pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->bEndpointAddress);
++ FILL_BULK_URB(urb, husb->udev, pipe, skb->data, skb->len,
++ hci_usb_tx_complete, husb);
++ urb->transfer_flags = USB_QUEUE_BULK | USB_ZERO_PACKET;
+
+- /* Wake up device */
+- hci_usb_write_wakeup(husb);
++ BT_DBG("%s skb %p len %d", husb->hdev.name, skb, skb->len);
+
+- return;
++ _urb->priv = skb;
++ return __tx_submit(husb, _urb);
+ }
+
+-static void hci_usb_intr(struct urb *urb)
++#ifdef CONFIG_BLUEZ_USB_SCO
++static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
+ {
+- struct hci_usb *husb = (struct hci_usb *) urb->context;
+- unsigned char *data = urb->transfer_buffer;
+- register int count = urb->actual_length;
+- register struct sk_buff *skb = husb->intr_skb;
+- hci_event_hdr *eh;
+- register int len;
++ struct _urb *_urb = __get_completed(husb, skb->pkt_type);
++ struct urb *urb;
++
++ if (!_urb) {
++ _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
++ if (!_urb)
++ return -ENOMEM;
++ _urb->type = skb->pkt_type;
++ }
+
+- if (!husb)
+- return;
++ BT_DBG("%s skb %p len %d", husb->hdev.name, skb, skb->len);
+
+- DBG("%s count %d", husb->hdev.name, count);
++ urb = &_urb->urb;
++
++ urb->context = husb;
++ urb->dev = husb->udev;
++ urb->pipe = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->bEndpointAddress);
++ urb->complete = hci_usb_tx_complete;
++ urb->transfer_flags = USB_ISO_ASAP;
+
+- if (urb->status || !count) {
+- DBG("%s intr status %d, count %d", husb->hdev.name, urb->status, count);
+- return;
+- }
++ urb->transfer_buffer = skb->data;
++ urb->transfer_buffer_length = skb->len;
++
++ __fill_isoc_desc(urb, skb->len, husb->isoc_out_ep->wMaxPacketSize);
+
+- /* Do we really have to handle continuations here ? */
+- if (!skb) {
+- /* New frame */
+- if (count < HCI_EVENT_HDR_SIZE) {
+- DBG("%s bad frame len %d", husb->hdev.name, count);
+- return;
+- }
++ _urb->priv = skb;
++ return __tx_submit(husb, _urb);
++}
++#endif
++
++static void hci_usb_tx_process(struct hci_usb *husb)
++{
++ struct sk_buff_head *q;
++ struct sk_buff *skb;
+
+- eh = (hci_event_hdr *) data;
+- len = eh->plen + HCI_EVENT_HDR_SIZE;
++ BT_DBG("%s", husb->hdev.name);
+
+- if (count > len) {
+- DBG("%s corrupted frame, len %d", husb->hdev.name, count);
+- return;
++ do {
++ clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
++
++ /* Process command queue */
++ q = __transmit_q(husb, HCI_COMMAND_PKT);
++ if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
++ (skb = skb_dequeue(q))) {
++ if (hci_usb_send_ctrl(husb, skb) < 0)
++ skb_queue_head(q, skb);
+ }
+
+- /* Allocate skb */
+- if (!(skb = bluez_skb_alloc(len, GFP_ATOMIC))) {
+- ERR("Can't allocate mem for new packet");
+- return;
++#ifdef CONFIG_BLUEZ_USB_SCO
++ /* Process SCO queue */
++ q = __transmit_q(husb, HCI_SCODATA_PKT);
++ if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
++ (skb = skb_dequeue(q))) {
++ if (hci_usb_send_isoc(husb, skb) < 0)
++ skb_queue_head(q, skb);
++ }
++#endif
++
++ /* Process ACL queue */
++ q = __transmit_q(husb, HCI_ACLDATA_PKT);
++ while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
++ (skb = skb_dequeue(q))) {
++ if (hci_usb_send_bulk(husb, skb) < 0) {
++ skb_queue_head(q, skb);
++ break;
++ }
+ }
+- skb->dev = (void *) &husb->hdev;
+- skb->pkt_type = HCI_EVENT_PKT;
++ } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
++}
+
+- husb->intr_skb = skb;
+- husb->intr_count = len;
+- } else {
+- /* Continuation */
+- if (count > husb->intr_count) {
+- ERR("%s bad frame len %d (expected %d)", husb->hdev.name, count, husb->intr_count);
++static inline void hci_usb_tx_wakeup(struct hci_usb *husb)
++{
++ /* Serialize TX queue processing to avoid data reordering */
++ if (!test_and_set_bit(HCI_USB_TX_PROCESS, &husb->state)) {
++ hci_usb_tx_process(husb);
++ clear_bit(HCI_USB_TX_PROCESS, &husb->state);
++ } else
++ set_bit(HCI_USB_TX_WAKEUP, &husb->state);
++}
+
+- kfree_skb(skb);
+- husb->intr_skb = NULL;
+- husb->intr_count = 0;
+- return;
+- }
++/* Send frames from HCI layer */
++static int hci_usb_send_frame(struct sk_buff *skb)
++{
++ struct hci_dev *hdev = (struct hci_dev *) skb->dev;
++ struct hci_usb *husb;
++
++ if (!hdev) {
++ BT_ERR("frame for uknown device (hdev=NULL)");
++ return -ENODEV;
+ }
+
+- memcpy(skb_put(skb, count), data, count);
+- husb->intr_count -= count;
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
++ return -EBUSY;
+
+- DMP(data, count);
++ BT_DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
+
+- if (!husb->intr_count) {
+- /* Got complete frame */
++ husb = (struct hci_usb *) hdev->driver_data;
+
+- husb->hdev.stat.byte_rx += skb->len;
+- hci_recv_frame(skb);
++ switch (skb->pkt_type) {
++ case HCI_COMMAND_PKT:
++ hdev->stat.cmd_tx++;
++ break;
++
++ case HCI_ACLDATA_PKT:
++ hdev->stat.acl_tx++;
++ break;
++
++#ifdef CONFIG_BLUEZ_USB_SCO
++ case HCI_SCODATA_PKT:
++ hdev->stat.sco_tx++;
++ break;
++#endif
+
+- husb->intr_skb = NULL;
++ default:
++ kfree_skb(skb);
++ return 0;
+ }
++
++ read_lock(&husb->completion_lock);
++
++ skb_queue_tail(__transmit_q(husb, skb->pkt_type), skb);
++ hci_usb_tx_wakeup(husb);
++
++ read_unlock(&husb->completion_lock);
++ return 0;
+ }
+
+-static void hci_usb_bulk_read(struct urb *urb)
++static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count)
+ {
+- struct hci_usb *husb = (struct hci_usb *) urb->context;
+- unsigned char *data = urb->transfer_buffer;
+- int count = urb->actual_length, status;
+- struct sk_buff *skb;
+- hci_acl_hdr *ah;
+- register __u16 dlen;
+-
+- if (!husb)
+- return;
++ BT_DBG("%s type %d data %p count %d", husb->hdev.name, type, data, count);
+
+- DBG("%s status %d, count %d, flags %x", husb->hdev.name, urb->status, count, urb->transfer_flags);
++ husb->hdev.stat.byte_rx += count;
+
+- if (urb->status) {
+- /* Do not re-submit URB on critical errors */
+- switch (urb->status) {
+- case -ENOENT:
+- return;
+- default:
+- goto resubmit;
+- };
+- }
+- if (!count)
+- goto resubmit;
++ while (count) {
++ struct sk_buff *skb = __reassembly(husb, type);
++ struct { int expect; } *scb;
++ int len = 0;
++
++ if (!skb) {
++ /* Start of the frame */
++
++ switch (type) {
++ case HCI_EVENT_PKT:
++ if (count >= HCI_EVENT_HDR_SIZE) {
++ hci_event_hdr *h = data;
++ len = HCI_EVENT_HDR_SIZE + h->plen;
++ } else
++ return -EILSEQ;
++ break;
+
+- DMP(data, count);
++ case HCI_ACLDATA_PKT:
++ if (count >= HCI_ACL_HDR_SIZE) {
++ hci_acl_hdr *h = data;
++ len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);
++ } else
++ return -EILSEQ;
++ break;
++#ifdef CONFIG_BLUEZ_USB_SCO
++ case HCI_SCODATA_PKT:
++ if (count >= HCI_SCO_HDR_SIZE) {
++ hci_sco_hdr *h = data;
++ len = HCI_SCO_HDR_SIZE + h->dlen;
++ } else
++ return -EILSEQ;
++ break;
++#endif
++ }
++ BT_DBG("new packet len %d", len);
++
++ skb = bluez_skb_alloc(len, GFP_ATOMIC);
++ if (!skb) {
++ BT_ERR("%s no memory for the packet", husb->hdev.name);
++ return -ENOMEM;
++ }
++ skb->dev = (void *) &husb->hdev;
++ skb->pkt_type = type;
++
++ __reassembly(husb, type) = skb;
++
++ scb = (void *) skb->cb;
++ scb->expect = len;
++ } else {
++ /* Continuation */
++ scb = (void *) skb->cb;
++ len = scb->expect;
++ }
+
+- ah = (hci_acl_hdr *) data;
+- dlen = le16_to_cpu(ah->dlen);
++ len = min(len, count);
++
++ memcpy(skb_put(skb, len), data, len);
++
++ scb->expect -= len;
++ if (!scb->expect) {
++ /* Complete frame */
++ __reassembly(husb, type) = NULL;
++ hci_recv_frame(skb);
++ }
+
+- /* Verify frame len and completeness */
+- if ((count - HCI_ACL_HDR_SIZE) != dlen) {
+- ERR("%s corrupted ACL packet: count %d, plen %d", husb->hdev.name, count, dlen);
+- goto resubmit;
++ count -= len; data += len;
+ }
++ return 0;
++}
+
+- /* Allocate packet */
+- if (!(skb = bluez_skb_alloc(count, GFP_ATOMIC))) {
+- ERR("Can't allocate mem for new packet");
+- goto resubmit;
+- }
++static void hci_usb_rx_complete(struct urb *urb)
++{
++ struct _urb *_urb = container_of(urb, struct _urb, urb);
++ struct hci_usb *husb = (void *) urb->context;
++ struct hci_dev *hdev = &husb->hdev;
++ int err, count = urb->actual_length;
+
+- memcpy(skb_put(skb, count), data, count);
+- skb->dev = (void *) &husb->hdev;
+- skb->pkt_type = HCI_ACLDATA_PKT;
++ BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
++ _urb->type, urb->status, count, urb->transfer_flags);
+
+- husb->hdev.stat.byte_rx += skb->len;
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
++ return;
+
+- hci_recv_frame(skb);
++ read_lock(&husb->completion_lock);
+
+-resubmit:
+- husb->read_urb->dev = husb->udev;
+- if ((status = usb_submit_urb(husb->read_urb)))
+- DBG("%s read URB submit failed %d", husb->hdev.name, status);
++ if (urb->status || !count)
++ goto resubmit;
++
++ if (_urb->type == HCI_SCODATA_PKT) {
++#ifdef CONFIG_BLUEZ_USB_SCO
++ int i;
++ for (i=0; i < urb->number_of_packets; i++) {
++ BT_DBG("desc %d status %d offset %d len %d", i,
++ urb->iso_frame_desc[i].status,
++ urb->iso_frame_desc[i].offset,
++ urb->iso_frame_desc[i].actual_length);
++
++ if (!urb->iso_frame_desc[i].status)
++ __recv_frame(husb, _urb->type,
++ urb->transfer_buffer + urb->iso_frame_desc[i].offset,
++ urb->iso_frame_desc[i].actual_length);
++ }
++#else
++ ;
++#endif
++ } else {
++ err = __recv_frame(husb, _urb->type, urb->transfer_buffer, count);
++ if (err < 0) {
++ BT_ERR("%s corrupted packet: type %d count %d",
++ husb->hdev.name, _urb->type, count);
++ hdev->stat.err_rx++;
++ }
++ }
+
+- DBG("%s read URB re-submited", husb->hdev.name);
++resubmit:
++ if (_urb->type != HCI_EVENT_PKT) {
++ urb->dev = husb->udev;
++ err = usb_submit_urb(urb);
++ BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
++ _urb->type, err);
++ }
++ read_unlock(&husb->completion_lock);
+ }
+
+-static int hci_usb_ctrl_msg(struct hci_usb *husb, struct sk_buff *skb)
++static void hci_usb_tx_complete(struct urb *urb)
+ {
+- struct urb *urb = husb->ctrl_urb;
+- devrequest *dr = &husb->dev_req;
+- int pipe, status;
++ struct _urb *_urb = container_of(urb, struct _urb, urb);
++ struct hci_usb *husb = (void *) urb->context;
++ struct hci_dev *hdev = &husb->hdev;
+
+- DBG("%s len %d", husb->hdev.name, skb->len);
++ BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
++ urb->status, urb->transfer_flags);
+
+- pipe = usb_sndctrlpipe(husb->udev, 0);
++ atomic_dec(__pending_tx(husb, _urb->type));
+
+- dr->requesttype = HCI_CTRL_REQ;
+- dr->request = 0;
+- dr->index = 0;
+- dr->value = 0;
+- dr->length = cpu_to_le16(skb->len);
++ urb->transfer_buffer = NULL;
++ kfree_skb((struct sk_buff *) _urb->priv);
+
+- FILL_CONTROL_URB(urb, husb->udev, pipe, (void*)dr, skb->data, skb->len,
+- hci_usb_ctrl, skb);
+-
+- if ((status = usb_submit_urb(urb))) {
+- DBG("%s control URB submit failed %d", husb->hdev.name, status);
+- return status;
+- }
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
++ return;
+
+- return 0;
+-}
++ if (!urb->status)
++ hdev->stat.byte_tx += urb->transfer_buffer_length;
++ else
++ hdev->stat.err_tx++;
+
+-static int hci_usb_write_msg(struct hci_usb *husb, struct sk_buff *skb)
+-{
+- struct urb *urb = husb->write_urb;
+- int pipe, status;
++ read_lock(&husb->completion_lock);
+
+- DBG("%s len %d", husb->hdev.name, skb->len);
++ _urb_unlink(_urb);
++ _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
+
+- pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep_addr);
++ hci_usb_tx_wakeup(husb);
++
++ read_unlock(&husb->completion_lock);
++}
+
+- FILL_BULK_URB(urb, husb->udev, pipe, skb->data, skb->len,
+- hci_usb_bulk_write, skb);
+- urb->transfer_flags |= USB_QUEUE_BULK;
++static void hci_usb_destruct(struct hci_dev *hdev)
++{
++ struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
+
+- if ((status = usb_submit_urb(urb))) {
+- DBG("%s write URB submit failed %d", husb->hdev.name, status);
+- return status;
+- }
++ BT_DBG("%s", hdev->name);
+
+- return 0;
++ kfree(husb);
+ }
+
+-static void * hci_usb_probe(struct usb_device *udev, unsigned int ifnum, const struct usb_device_id *id)
++static void *hci_usb_probe(struct usb_device *udev, unsigned int ifnum, const struct usb_device_id *id)
+ {
+- struct usb_endpoint_descriptor *bulk_out_ep, *intr_in_ep, *bulk_in_ep;
++ struct usb_endpoint_descriptor *bulk_out_ep[HCI_MAX_IFACE_NUM];
++ struct usb_endpoint_descriptor *isoc_out_ep[HCI_MAX_IFACE_NUM];
++ struct usb_endpoint_descriptor *bulk_in_ep[HCI_MAX_IFACE_NUM];
++ struct usb_endpoint_descriptor *isoc_in_ep[HCI_MAX_IFACE_NUM];
++ struct usb_endpoint_descriptor *intr_in_ep[HCI_MAX_IFACE_NUM];
+ struct usb_interface_descriptor *uif;
+ struct usb_endpoint_descriptor *ep;
++ struct usb_interface *iface, *isoc_iface;
+ struct hci_usb *husb;
+ struct hci_dev *hdev;
+- int i, size, pipe;
+- __u8 * buf;
++ int i, a, e, size, ifn, isoc_ifnum, isoc_alts;
+
+- DBG("udev %p ifnum %d", udev, ifnum);
+-
+- /* Check device signature */
+- if ((udev->descriptor.bDeviceClass != HCI_DEV_CLASS) ||
+- (udev->descriptor.bDeviceSubClass != HCI_DEV_SUBCLASS)||
+- (udev->descriptor.bDeviceProtocol != HCI_DEV_PROTOCOL) )
+- return NULL;
+-
+- MOD_INC_USE_COUNT;
++ BT_DBG("udev %p ifnum %d", udev, ifnum);
+
+- uif = &udev->actconfig->interface[ifnum].altsetting[0];
++ iface = &udev->actconfig->interface[0];
+
+- if (uif->bNumEndpoints != 3) {
+- DBG("Wrong number of endpoints %d", uif->bNumEndpoints);
+- MOD_DEC_USE_COUNT;
++ /* Check our black list */
++ if (usb_match_id(udev, iface, ignore_ids))
+ return NULL;
+- }
+
+- bulk_out_ep = intr_in_ep = bulk_in_ep = NULL;
++ /* Check number of endpoints */
++ if (udev->actconfig->interface[ifnum].altsetting[0].bNumEndpoints < 3)
++ return NULL;
+
++ memset(bulk_out_ep, 0, sizeof(bulk_out_ep));
++ memset(isoc_out_ep, 0, sizeof(isoc_out_ep));
++ memset(bulk_in_ep, 0, sizeof(bulk_in_ep));
++ memset(isoc_in_ep, 0, sizeof(isoc_in_ep));
++ memset(intr_in_ep, 0, sizeof(intr_in_ep));
++
++ size = 0;
++ isoc_iface = NULL;
++ isoc_alts = isoc_ifnum = 0;
++
+ /* Find endpoints that we need */
+- for ( i = 0; i < uif->bNumEndpoints; ++i) {
+- ep = &uif->endpoint[i];
+
+- switch (ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
+- case USB_ENDPOINT_XFER_BULK:
+- if (ep->bEndpointAddress & USB_DIR_IN)
+- bulk_in_ep = ep;
+- else
+- bulk_out_ep = ep;
+- break;
++ ifn = MIN(udev->actconfig->bNumInterfaces, HCI_MAX_IFACE_NUM);
++ for (i = 0; i < ifn; i++) {
++ iface = &udev->actconfig->interface[i];
++ for (a = 0; a < iface->num_altsetting; a++) {
++ uif = &iface->altsetting[a];
++ for (e = 0; e < uif->bNumEndpoints; e++) {
++ ep = &uif->endpoint[e];
++
++ switch (ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
++ case USB_ENDPOINT_XFER_INT:
++ if (ep->bEndpointAddress & USB_DIR_IN)
++ intr_in_ep[i] = ep;
++ break;
++
++ case USB_ENDPOINT_XFER_BULK:
++ if (ep->bEndpointAddress & USB_DIR_IN)
++ bulk_in_ep[i] = ep;
++ else
++ bulk_out_ep[i] = ep;
++ break;
++
++#ifdef CONFIG_BLUEZ_USB_SCO
++ case USB_ENDPOINT_XFER_ISOC:
++ if (ep->wMaxPacketSize < size || a > 2)
++ break;
++ size = ep->wMaxPacketSize;
++
++ isoc_iface = iface;
++ isoc_alts = a;
++ isoc_ifnum = i;
++
++ if (ep->bEndpointAddress & USB_DIR_IN)
++ isoc_in_ep[i] = ep;
++ else
++ isoc_out_ep[i] = ep;
++ break;
++#endif
++ }
++ }
++ }
++ }
+
+- case USB_ENDPOINT_XFER_INT:
+- intr_in_ep = ep;
+- break;
+- };
++ if (!bulk_in_ep[0] || !bulk_out_ep[0] || !intr_in_ep[0]) {
++ BT_DBG("Bulk endpoints not found");
++ goto done;
+ }
+
+- if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) {
+- DBG("Endpoints not found: %p %p %p", bulk_in_ep, bulk_out_ep, intr_in_ep);
+- MOD_DEC_USE_COUNT;
+- return NULL;
++#ifdef CONFIG_BLUEZ_USB_SCO
++ if (!isoc_in_ep[1] || !isoc_out_ep[1]) {
++ BT_DBG("Isoc endpoints not found");
++ isoc_iface = NULL;
+ }
++#endif
+
+ if (!(husb = kmalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
+- ERR("Can't allocate: control structure");
+- MOD_DEC_USE_COUNT;
+- return NULL;
++ BT_ERR("Can't allocate: control structure");
++ goto done;
+ }
+
+ memset(husb, 0, sizeof(struct hci_usb));
+
+ husb->udev = udev;
+- husb->bulk_out_ep_addr = bulk_out_ep->bEndpointAddress;
+-
+- if (!(husb->ctrl_urb = usb_alloc_urb(0))) {
+- ERR("Can't allocate: control URB");
+- goto probe_error;
+- }
+-
+- if (!(husb->write_urb = usb_alloc_urb(0))) {
+- ERR("Can't allocate: write URB");
+- goto probe_error;
+- }
+-
+- if (!(husb->read_urb = usb_alloc_urb(0))) {
+- ERR("Can't allocate: read URB");
+- goto probe_error;
+- }
+-
+- ep = bulk_in_ep;
+- pipe = usb_rcvbulkpipe(udev, ep->bEndpointAddress);
+- size = HCI_MAX_FRAME_SIZE;
+-
+- if (!(buf = kmalloc(size, GFP_KERNEL))) {
+- ERR("Can't allocate: read buffer");
+- goto probe_error;
+- }
+-
+- FILL_BULK_URB(husb->read_urb, udev, pipe, buf, size, hci_usb_bulk_read, husb);
+- husb->read_urb->transfer_flags |= USB_QUEUE_BULK;
+-
+- ep = intr_in_ep;
+- pipe = usb_rcvintpipe(udev, ep->bEndpointAddress);
+- size = usb_maxpacket(udev, pipe, usb_pipeout(pipe));
+-
+- if (!(husb->intr_urb = usb_alloc_urb(0))) {
+- ERR("Can't allocate: interrupt URB");
+- goto probe_error;
++ husb->bulk_out_ep = bulk_out_ep[0];
++ husb->bulk_in_ep = bulk_in_ep[0];
++ husb->intr_in_ep = intr_in_ep[0];
++
++#ifdef CONFIG_BLUEZ_USB_SCO
++ if (isoc_iface) {
++ BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
++ if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
++ BT_ERR("Can't set isoc interface settings");
++ isoc_iface = NULL;
++ }
++ usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb);
++ husb->isoc_iface = isoc_iface;
++ husb->isoc_in_ep = isoc_in_ep[isoc_ifnum];
++ husb->isoc_out_ep = isoc_out_ep[isoc_ifnum];
+ }
++#endif
++
++ husb->completion_lock = RW_LOCK_UNLOCKED;
+
+- if (!(buf = kmalloc(size, GFP_KERNEL))) {
+- ERR("Can't allocate: interrupt buffer");
+- goto probe_error;
++ for (i = 0; i < 4; i++) {
++ skb_queue_head_init(&husb->transmit_q[i]);
++ _urb_queue_init(&husb->pending_q[i]);
++ _urb_queue_init(&husb->completed_q[i]);
+ }
+
+- FILL_INT_URB(husb->intr_urb, udev, pipe, buf, size, hci_usb_intr, husb, ep->bInterval);
+-
+- skb_queue_head_init(&husb->tx_ctrl_q);
+- skb_queue_head_init(&husb->tx_write_q);
+-
+ /* Initialize and register HCI device */
+ hdev = &husb->hdev;
+
+- hdev->type = HCI_USB;
++ hdev->type = HCI_USB;
+ hdev->driver_data = husb;
+
+ hdev->open = hci_usb_open;
+ hdev->close = hci_usb_close;
+ hdev->flush = hci_usb_flush;
+- hdev->send = hci_usb_send_frame;
++ hdev->send = hci_usb_send_frame;
++ hdev->destruct = hci_usb_destruct;
+
+ if (hci_register_dev(hdev) < 0) {
+- ERR("Can't register HCI device %s", hdev->name);
++ BT_ERR("Can't register HCI device");
+ goto probe_error;
+ }
+
+ return husb;
+
+ probe_error:
+- hci_usb_free_bufs(husb);
+ kfree(husb);
+- MOD_DEC_USE_COUNT;
++
++done:
+ return NULL;
+ }
+
+@@ -626,38 +930,34 @@
+ if (!husb)
+ return;
+
+- DBG("%s", hdev->name);
++ BT_DBG("%s", hdev->name);
+
+ hci_usb_close(hdev);
+
+- if (hci_unregister_dev(hdev) < 0) {
+- ERR("Can't unregister HCI device %s", hdev->name);
+- }
++ if (husb->isoc_iface)
++ usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
+
+- hci_usb_free_bufs(husb);
+- kfree(husb);
+-
+- MOD_DEC_USE_COUNT;
++ if (hci_unregister_dev(hdev) < 0)
++ BT_ERR("Can't unregister HCI device %s", hdev->name);
+ }
+
+-static struct usb_driver hci_usb_driver =
+-{
++static struct usb_driver hci_usb_driver = {
+ name: "hci_usb",
+ probe: hci_usb_probe,
+ disconnect: hci_usb_disconnect,
+- id_table: usb_bluetooth_ids,
++ id_table: bluetooth_ids,
+ };
+
+ int hci_usb_init(void)
+ {
+ int err;
+
+- INF("BlueZ HCI USB driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
++ BT_INFO("BlueZ HCI USB driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
+ VERSION);
+- INF("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
++ BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
+
+ if ((err = usb_register(&hci_usb_driver)) < 0)
+- ERR("Failed to register HCI USB driver");
++ BT_ERR("Failed to register HCI USB driver");
+
+ return err;
+ }
+diff -urN linux-2.4.18/drivers/bluetooth/hci_usb.h linux-2.4.18-mh9/drivers/bluetooth/hci_usb.h
+--- linux-2.4.18/drivers/bluetooth/hci_usb.h Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/drivers/bluetooth/hci_usb.h Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,139 @@
++/*
++ HCI USB driver for Linux Bluetooth protocol stack (BlueZ)
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ Copyright (C) 2003 Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_usb.h,v 1.2 2002/03/18 19:10:04 maxk Exp $
++ */
++
++#ifdef __KERNEL__
++
++/* Class, SubClass, and Protocol codes that describe a Bluetooth device */
++#define HCI_DEV_CLASS 0xe0 /* Wireless class */
++#define HCI_DEV_SUBCLASS 0x01 /* RF subclass */
++#define HCI_DEV_PROTOCOL 0x01 /* Bluetooth programming protocol */
++
++#define HCI_CTRL_REQ 0x20
++
++#define HCI_MAX_IFACE_NUM 3
++
++#define HCI_MAX_BULK_TX 4
++#define HCI_MAX_BULK_RX 1
++
++#define HCI_MAX_ISOC_RX 2
++#define HCI_MAX_ISOC_TX 2
++
++#define HCI_MAX_ISOC_FRAMES 10
++
++struct _urb_queue {
++ struct list_head head;
++ spinlock_t lock;
++};
++
++struct _urb {
++ struct list_head list;
++ struct _urb_queue *queue;
++ int type;
++ void *priv;
++ struct urb urb;
++};
++
++struct _urb *_urb_alloc(int isoc, int gfp);
++
++static inline void _urb_free(struct _urb *_urb)
++{
++ kfree(_urb);
++}
++
++static inline void _urb_queue_init(struct _urb_queue *q)
++{
++ INIT_LIST_HEAD(&q->head);
++ spin_lock_init(&q->lock);
++}
++
++static inline void _urb_queue_head(struct _urb_queue *q, struct _urb *_urb)
++{
++ unsigned long flags;
++ spin_lock_irqsave(&q->lock, flags);
++ list_add(&_urb->list, &q->head); _urb->queue = q;
++ spin_unlock_irqrestore(&q->lock, flags);
++}
++
++static inline void _urb_queue_tail(struct _urb_queue *q, struct _urb *_urb)
++{
++ unsigned long flags;
++ spin_lock_irqsave(&q->lock, flags);
++ list_add_tail(&_urb->list, &q->head); _urb->queue = q;
++ spin_unlock_irqrestore(&q->lock, flags);
++}
++
++static inline void _urb_unlink(struct _urb *_urb)
++{
++ struct _urb_queue *q = _urb->queue;
++ unsigned long flags;
++ if (q) {
++ spin_lock_irqsave(&q->lock, flags);
++ list_del(&_urb->list); _urb->queue = NULL;
++ spin_unlock_irqrestore(&q->lock, flags);
++ }
++}
++
++struct _urb *_urb_dequeue(struct _urb_queue *q);
++
++#ifndef container_of
++#define container_of(ptr, type, member) ({ \
++ const typeof( ((type *)0)->member ) *__mptr = (ptr); \
++ (type *)( (char *)__mptr - offsetof(type,member) );})
++#endif
++
++struct hci_usb {
++ struct hci_dev hdev;
++
++ unsigned long state;
++
++ struct usb_device *udev;
++
++ struct usb_endpoint_descriptor *bulk_in_ep;
++ struct usb_endpoint_descriptor *bulk_out_ep;
++ struct usb_endpoint_descriptor *intr_in_ep;
++
++ struct usb_interface *isoc_iface;
++ struct usb_endpoint_descriptor *isoc_out_ep;
++ struct usb_endpoint_descriptor *isoc_in_ep;
++
++ struct sk_buff_head transmit_q[4];
++ struct sk_buff *reassembly[4]; // Reassembly buffers
++
++ rwlock_t completion_lock;
++
++ atomic_t pending_tx[4]; // Number of pending requests
++ struct _urb_queue pending_q[4]; // Pending requests
++ struct _urb_queue completed_q[4]; // Completed requests
++};
++
++/* States */
++#define HCI_USB_TX_PROCESS 1
++#define HCI_USB_TX_WAKEUP 2
++
++#endif /* __KERNEL__ */
+diff -urN linux-2.4.18/drivers/bluetooth/hci_vhci.c linux-2.4.18-mh9/drivers/bluetooth/hci_vhci.c
+--- linux-2.4.18/drivers/bluetooth/hci_vhci.c Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/drivers/bluetooth/hci_vhci.c Mon Aug 25 18:38:10 2003
+@@ -25,9 +25,9 @@
+ /*
+ * BlueZ HCI virtual device driver.
+ *
+- * $Id: hci_vhci.c,v 1.3 2001/08/03 04:19:50 maxk Exp $
++ * $Id: hci_vhci.c,v 1.3 2002/04/17 17:37:20 maxk Exp $
+ */
+-#define VERSION "1.0"
++#define VERSION "1.1"
+
+ #include <linux/config.h>
+ #include <linux/module.h>
+@@ -49,43 +49,56 @@
+ #include <asm/uaccess.h>
+
+ #include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+ #include <net/bluetooth/hci_core.h>
+-#include <net/bluetooth/hci_vhci.h>
++#include "hci_vhci.h"
+
+ /* HCI device part */
+
+-int hci_vhci_open(struct hci_dev *hdev)
++static int hci_vhci_open(struct hci_dev *hdev)
+ {
+- hdev->flags |= HCI_RUNNING;
++ set_bit(HCI_RUNNING, &hdev->flags);
+ return 0;
+ }
+
+-int hci_vhci_flush(struct hci_dev *hdev)
++static int hci_vhci_flush(struct hci_dev *hdev)
+ {
+ struct hci_vhci_struct *hci_vhci = (struct hci_vhci_struct *) hdev->driver_data;
+ skb_queue_purge(&hci_vhci->readq);
+ return 0;
+ }
+
+-int hci_vhci_close(struct hci_dev *hdev)
++static int hci_vhci_close(struct hci_dev *hdev)
+ {
+- hdev->flags &= ~HCI_RUNNING;
++ if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
++ return 0;
++
+ hci_vhci_flush(hdev);
+ return 0;
+ }
+
+-int hci_vhci_send_frame(struct sk_buff *skb)
++static void hci_vhci_destruct(struct hci_dev *hdev)
++{
++ struct hci_vhci_struct *vhci;
++
++ if (!hdev) return;
++
++ vhci = (struct hci_vhci_struct *) hdev->driver_data;
++ kfree(vhci);
++
++ MOD_DEC_USE_COUNT;
++}
++
++static int hci_vhci_send_frame(struct sk_buff *skb)
+ {
+ struct hci_dev* hdev = (struct hci_dev *) skb->dev;
+ struct hci_vhci_struct *hci_vhci;
+
+ if (!hdev) {
+- ERR("Frame for uknown device (hdev=NULL)");
++ BT_ERR("Frame for uknown device (hdev=NULL)");
+ return -ENODEV;
+ }
+
+- if (!(hdev->flags & HCI_RUNNING))
++ if (!test_bit(HCI_RUNNING, &hdev->flags))
+ return -EBUSY;
+
+ hci_vhci = (struct hci_vhci_struct *) hdev->driver_data;
+@@ -188,7 +201,7 @@
+
+ add_wait_queue(&hci_vhci->read_wait, &wait);
+ while (count) {
+- current->state = TASK_INTERRUPTIBLE;
++ set_current_state(TASK_INTERRUPTIBLE);
+
+ /* Read frames from device queue */
+ if (!(skb = skb_dequeue(&hci_vhci->readq))) {
+@@ -214,8 +227,7 @@
+ kfree_skb(skb);
+ break;
+ }
+-
+- current->state = TASK_RUNNING;
++ set_current_state(TASK_RUNNING);
+ remove_wait_queue(&hci_vhci->read_wait, &wait);
+
+ return ret;
+@@ -270,11 +282,13 @@
+ hdev->close = hci_vhci_close;
+ hdev->flush = hci_vhci_flush;
+ hdev->send = hci_vhci_send_frame;
++ hdev->destruct = hci_vhci_destruct;
+
+ if (hci_register_dev(hdev) < 0) {
+ kfree(hci_vhci);
+ return -EBUSY;
+ }
++ MOD_INC_USE_COUNT;
+
+ file->private_data = hci_vhci;
+ return 0;
+@@ -285,12 +299,10 @@
+ struct hci_vhci_struct *hci_vhci = (struct hci_vhci_struct *) file->private_data;
+
+ if (hci_unregister_dev(&hci_vhci->hdev) < 0) {
+- ERR("Can't unregister HCI device %s", hci_vhci->hdev.name);
++ BT_ERR("Can't unregister HCI device %s", hci_vhci->hdev.name);
+ }
+
+- kfree(hci_vhci);
+ file->private_data = NULL;
+-
+ return 0;
+ }
+
+@@ -315,12 +327,12 @@
+
+ int __init hci_vhci_init(void)
+ {
+- INF("BlueZ VHCI driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
++ BT_INFO("BlueZ VHCI driver ver %s Copyright (C) 2000,2001 Qualcomm Inc",
+ VERSION);
+- INF("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
++ BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
+
+ if (misc_register(&hci_vhci_miscdev)) {
+- ERR("Can't register misc device %d\n", VHCI_MINOR);
++ BT_ERR("Can't register misc device %d\n", VHCI_MINOR);
+ return -EIO;
+ }
+
+@@ -337,4 +349,4 @@
+
+ MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
+ MODULE_DESCRIPTION("BlueZ VHCI driver ver " VERSION);
+-MODULE_LICENSE("GPL");
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/drivers/bluetooth/hci_vhci.h linux-2.4.18-mh9/drivers/bluetooth/hci_vhci.h
+--- linux-2.4.18/drivers/bluetooth/hci_vhci.h Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/drivers/bluetooth/hci_vhci.h Mon Aug 25 18:38:10 2003
+@@ -0,0 +1,50 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: hci_vhci.h,v 1.1.1.1 2002/03/08 21:03:15 maxk Exp $
++ */
++
++#ifndef __HCI_VHCI_H
++#define __HCI_VHCI_H
++
++#ifdef __KERNEL__
++
++struct hci_vhci_struct {
++ struct hci_dev hdev;
++ __u32 flags;
++ wait_queue_head_t read_wait;
++ struct sk_buff_head readq;
++ struct fasync_struct *fasync;
++};
++
++/* VHCI device flags */
++#define VHCI_FASYNC 0x0010
++
++#endif /* __KERNEL__ */
++
++#define VHCI_DEV "/dev/vhci"
++#define VHCI_MINOR 250
++
++#endif /* __HCI_VHCI_H */
+diff -urN linux-2.4.18/drivers/char/pcmcia/serial_cs.c linux-2.4.18-mh9/drivers/char/pcmcia/serial_cs.c
+--- linux-2.4.18/drivers/char/pcmcia/serial_cs.c Fri Dec 21 18:41:54 2001
++++ linux-2.4.18-mh9/drivers/char/pcmcia/serial_cs.c Mon Aug 25 18:38:10 2003
+@@ -2,7 +2,7 @@
+
+ A driver for PCMCIA serial devices
+
+- serial_cs.c 1.128 2001/10/18 12:18:35
++ serial_cs.c 1.138 2002/10/25 06:24:52
+
+ The contents of this file are subject to the Mozilla Public
+ License Version 1.1 (the "License"); you may not use this file
+@@ -28,7 +28,7 @@
+ and other provisions required by the GPL. If you do not delete
+ the provisions above, a recipient may use your version of this
+ file under either the MPL or the GPL.
+-
++
+ ======================================================================*/
+
+ #include <linux/module.h>
+@@ -69,14 +69,14 @@
+ static int irq_list[4] = { -1 };
+ MODULE_PARM(irq_list, "1-4i");
+
+-/* Enable the speaker? */
+-INT_MODULE_PARM(do_sound, 1);
++INT_MODULE_PARM(do_sound, 1); /* Enable the speaker? */
++INT_MODULE_PARM(buggy_uart, 0); /* Skip strict UART tests? */
+
+ #ifdef PCMCIA_DEBUG
+ INT_MODULE_PARM(pc_debug, PCMCIA_DEBUG);
+ #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
+ static char *version =
+-"serial_cs.c 1.128 2001/10/18 12:18:35 (David Hinds)";
++"serial_cs.c 1.138 2002/10/25 06:24:52 (David Hinds)";
+ #else
+ #define DEBUG(n, args...)
+ #endif
+@@ -95,6 +95,7 @@
+ { MANFID_OMEGA, PRODID_OMEGA_QSP_100, 4 },
+ { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS232, 2 },
+ { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS232_D1, 2 },
++ { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS232_D2, 2 },
+ { MANFID_QUATECH, PRODID_QUATECH_QUAD_RS232, 4 },
+ { MANFID_QUATECH, PRODID_QUATECH_DUAL_RS422, 2 },
+ { MANFID_QUATECH, PRODID_QUATECH_QUAD_RS422, 4 },
+@@ -148,7 +149,7 @@
+ client_reg_t client_reg;
+ dev_link_t *link;
+ int i, ret;
+-
++
+ DEBUG(0, "serial_attach()\n");
+
+ /* Create new serial device */
+@@ -160,7 +161,7 @@
+ link->release.function = &serial_release;
+ link->release.data = (u_long)link;
+ link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
+- link->io.NumPorts1 = 8;
++ link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
+ link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
+ link->irq.IRQInfo1 = IRQ_INFO2_VALID|IRQ_LEVEL_ID;
+ if (irq_list[0] == -1)
+@@ -169,13 +170,12 @@
+ for (i = 0; i < 4; i++)
+ link->irq.IRQInfo2 |= 1 << irq_list[i];
+ link->conf.Attributes = CONF_ENABLE_IRQ;
+- link->conf.Vcc = 50;
+ if (do_sound) {
+ link->conf.Attributes |= CONF_ENABLE_SPKR;
+ link->conf.Status = CCSR_AUDIO_ENA;
+ }
+ link->conf.IntType = INT_MEMORY_AND_IO;
+-
++
+ /* Register with Card Services */
+ link->next = dev_list;
+ dev_list = link;
+@@ -194,7 +194,7 @@
+ serial_detach(link);
+ return NULL;
+ }
+-
++
+ return link;
+ } /* serial_attach */
+
+@@ -214,7 +214,7 @@
+ int ret;
+
+ DEBUG(0, "serial_detach(0x%p)\n", link);
+-
++
+ /* Locate device structure */
+ for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)
+ if (*linkp == link) break;
+@@ -224,17 +224,17 @@
+ del_timer(&link->release);
+ if (link->state & DEV_CONFIG)
+ serial_release((u_long)link);
+-
++
+ if (link->handle) {
+ ret = CardServices(DeregisterClient, link->handle);
+ if (ret != CS_SUCCESS)
+ cs_error(link->handle, DeregisterClient, ret);
+ }
+-
++
+ /* Unlink device structure, free bits */
+ *linkp = link->next;
+ kfree(info);
+-
++
+ } /* serial_detach */
+
+ /*====================================================================*/
+@@ -243,18 +243,20 @@
+ {
+ struct serial_struct serial;
+ int line;
+-
++
+ memset(&serial, 0, sizeof(serial));
+ serial.port = port;
+ serial.irq = irq;
+ serial.flags = ASYNC_SKIP_TEST | ASYNC_SHARE_IRQ;
++ if (buggy_uart)
++ serial.flags |= ASYNC_BUGGY_UART;
+ line = register_serial(&serial);
+ if (line < 0) {
+ printk(KERN_NOTICE "serial_cs: register_serial() at 0x%04lx,"
+ " irq %d failed\n", (u_long)serial.port, serial.irq);
+ return -1;
+ }
+-
++
+ info->line[info->ndev] = line;
+ sprintf(info->node[info->ndev].dev_name, "ttyS%d", line);
+ info->node[info->ndev].major = TTY_MAJOR;
+@@ -262,7 +264,7 @@
+ if (info->ndev > 0)
+ info->node[info->ndev-1].next = &info->node[info->ndev];
+ info->ndev++;
+-
++
+ return 0;
+ }
+
+@@ -313,7 +315,10 @@
+ return setup_serial(info, port, config.AssignedIRQ);
+ }
+ link->conf.Vcc = config.Vcc;
+-
++
++ link->io.NumPorts1 = 8;
++ link->io.NumPorts2 = 0;
++
+ /* First pass: look for a config entry that looks normal. */
+ tuple.TupleData = (cisdata_t *)buf;
+ tuple.TupleOffset = 0; tuple.TupleDataMax = 255;
+@@ -340,7 +345,7 @@
+ i = next_tuple(handle, &tuple, &parse);
+ }
+ }
+-
++
+ /* Second pass: try to find an entry that isn't picky about
+ its base address, then try to grab any standard serial port
+ address, and finally try to get any free port. */
+@@ -352,8 +357,7 @@
+ for (j = 0; j < 5; j++) {
+ link->io.BasePort1 = base[j];
+ link->io.IOAddrLines = base[j] ? 16 : 3;
+- i = CardServices(RequestIO, link->handle,
+- &link->io);
++ i = CardServices(RequestIO, link->handle, &link->io);
+ if (i == CS_SUCCESS) goto found_port;
+ }
+ }
+@@ -365,7 +369,7 @@
+ cs_error(link->handle, RequestIO, i);
+ return -1;
+ }
+-
++
+ i = CardServices(RequestIRQ, link->handle, &link->irq);
+ if (i != CS_SUCCESS) {
+ cs_error(link->handle, RequestIRQ, i);
+@@ -390,8 +394,12 @@
+ u_char buf[256];
+ cisparse_t parse;
+ cistpl_cftable_entry_t *cf = &parse.cftable_entry;
++ config_info_t config;
+ int i, base2 = 0;
+
++ CardServices(GetConfigurationInfo, handle, &config);
++ link->conf.Vcc = config.Vcc;
++
+ tuple.TupleData = (cisdata_t *)buf;
+ tuple.TupleOffset = 0; tuple.TupleDataMax = 255;
+ tuple.Attributes = 0;
+@@ -433,12 +441,12 @@
+ i = next_tuple(handle, &tuple, &parse);
+ }
+ }
+-
++
+ if (i != CS_SUCCESS) {
+- cs_error(link->handle, RequestIO, i);
+- return -1;
++ /* At worst, try to configure as a single port */
++ return simple_config(link);
+ }
+-
++
+ i = CardServices(RequestIRQ, link->handle, &link->irq);
+ if (i != CS_SUCCESS) {
+ cs_error(link->handle, RequestIRQ, i);
+@@ -454,14 +462,27 @@
+ cs_error(link->handle, RequestConfiguration, i);
+ return -1;
+ }
+-
++
++ /* The Oxford Semiconductor OXCF950 cards are in fact single-port:
++ 8 registers are for the UART, the others are extra registers */
++ if (info->manfid == MANFID_OXSEMI) {
++ if (cf->index == 1 || cf->index == 3) {
++ setup_serial(info, base2, link->irq.AssignedIRQ);
++ outb(12,link->io.BasePort1+1);
++ } else {
++ setup_serial(info, link->io.BasePort1, link->irq.AssignedIRQ);
++ outb(12,base2+1);
++ }
++ return 0;
++ }
++
+ setup_serial(info, link->io.BasePort1, link->irq.AssignedIRQ);
+ /* The Nokia cards are not really multiport cards */
+ if (info->manfid == MANFID_NOKIA)
+ return 0;
+ for (i = 0; i < info->multi-1; i++)
+ setup_serial(info, base2+(8*i), link->irq.AssignedIRQ);
+-
++
+ return 0;
+ }
+
+@@ -487,7 +508,7 @@
+ int i, last_ret, last_fn;
+
+ DEBUG(0, "serial_config(0x%p)\n", link);
+-
++
+ tuple.TupleData = (cisdata_t *)buf;
+ tuple.TupleOffset = 0; tuple.TupleDataMax = 255;
+ tuple.Attributes = 0;
+@@ -500,7 +521,7 @@
+ }
+ link->conf.ConfigBase = parse.config.base;
+ link->conf.Present = parse.config.rmask[0];
+-
++
+ /* Configure card */
+ link->state |= DEV_CONFIG;
+
+@@ -508,8 +529,8 @@
+ tuple.DesiredTuple = CISTPL_LONGLINK_MFC;
+ tuple.Attributes = TUPLE_RETURN_COMMON | TUPLE_RETURN_LINK;
+ info->multi = (first_tuple(handle, &tuple, &parse) == CS_SUCCESS);
+-
+- /* Is this a multiport card? */
++
++ /* Scan list of known multiport card ID's */
+ tuple.DesiredTuple = CISTPL_MANFID;
+ if (first_tuple(handle, &tuple, &parse) == CS_SUCCESS) {
+ info->manfid = le16_to_cpu(buf[0]);
+@@ -537,15 +558,15 @@
+ info->multi = 2;
+ }
+ }
+-
++
+ if (info->multi > 1)
+ multi_config(link);
+ else
+ simple_config(link);
+-
++
+ if (info->ndev == 0)
+ goto failed;
+-
++
+ if (info->manfid == MANFID_IBM) {
+ conf_reg_t reg = { 0, CS_READ, 0x800, 0 };
+ CS_CHECK(AccessConfigurationRegister, link->handle, &reg);
+@@ -562,6 +583,7 @@
+ cs_error(link->handle, last_fn, last_ret);
+ failed:
+ serial_release((u_long)link);
++ link->state &= ~DEV_CONFIG_PENDING;
+
+ } /* serial_config */
+
+@@ -569,7 +591,7 @@
+
+ After a card is removed, serial_release() will unregister the net
+ device, and release the PCMCIA configuration.
+-
++
+ ======================================================================*/
+
+ void serial_release(u_long arg)
+@@ -577,7 +599,7 @@
+ dev_link_t *link = (dev_link_t *)arg;
+ serial_info_t *info = link->priv;
+ int i;
+-
++
+ DEBUG(0, "serial_release(0x%p)\n", link);
+
+ for (i = 0; i < info->ndev; i++) {
+@@ -590,7 +612,7 @@
+ CardServices(ReleaseIO, link->handle, &link->io);
+ CardServices(ReleaseIRQ, link->handle, &link->irq);
+ }
+-
++
+ link->state &= ~DEV_CONFIG;
+
+ } /* serial_release */
+@@ -601,7 +623,7 @@
+ stuff to run after an event is received. A CARD_REMOVAL event
+ also sets some flags to discourage the serial drivers from
+ talking to the ports.
+-
++
+ ======================================================================*/
+
+ static int serial_event(event_t event, int priority,
+@@ -609,9 +631,9 @@
+ {
+ dev_link_t *link = args->client_data;
+ serial_info_t *info = link->priv;
+-
++
+ DEBUG(1, "serial_event(0x%06x)\n", event);
+-
++
+ switch (event) {
+ case CS_EVENT_CARD_REMOVAL:
+ link->state &= ~DEV_PRESENT;
+@@ -650,7 +672,7 @@
+ if (serv.Revision != CS_RELEASE_CODE) {
+ printk(KERN_NOTICE "serial_cs: Card Services release "
+ "does not match!\n");
+- return -1;
++ return -EINVAL;
+ }
+ register_pccard_driver(&dev_info, &serial_attach, &serial_detach);
+ return 0;
+diff -urN linux-2.4.18/drivers/usb/Config.in linux-2.4.18-mh9/drivers/usb/Config.in
+--- linux-2.4.18/drivers/usb/Config.in Mon Feb 25 20:38:07 2002
++++ linux-2.4.18-mh9/drivers/usb/Config.in Mon Aug 25 18:38:10 2003
+@@ -31,7 +31,13 @@
+
+ comment 'USB Device Class drivers'
+ dep_tristate ' USB Audio support' CONFIG_USB_AUDIO $CONFIG_USB $CONFIG_SOUND
+-dep_tristate ' USB Bluetooth support (EXPERIMENTAL)' CONFIG_USB_BLUETOOTH $CONFIG_USB $CONFIG_EXPERIMENTAL
++if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
++ if [ "$CONFIG_BLUEZ" = "n" ]; then
++ dep_tristate ' USB Bluetooth support (EXPERIMENTAL)' CONFIG_USB_BLUETOOTH $CONFIG_USB
++ else
++ comment ' USB Bluetooth can only be used with disabled Bluetooth subsystem'
++ fi
++fi
+ if [ "$CONFIG_SCSI" = "n" ]; then
+ comment ' SCSI support is needed for USB Storage'
+ fi
+diff -urN linux-2.4.18/include/linux/firmware.h linux-2.4.18-mh9/include/linux/firmware.h
+--- linux-2.4.18/include/linux/firmware.h Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/include/linux/firmware.h Mon Aug 25 18:38:10 2003
+@@ -0,0 +1,20 @@
++#ifndef _LINUX_FIRMWARE_H
++#define _LINUX_FIRMWARE_H
++#include <linux/module.h>
++#include <linux/types.h>
++#define FIRMWARE_NAME_MAX 30
++struct firmware {
++ size_t size;
++ u8 *data;
++};
++int request_firmware (const struct firmware **fw, const char *name,
++ const char *device);
++int request_firmware_nowait (
++ struct module *module,
++ const char *name, const char *device, void *context,
++ void (*cont)(const struct firmware *fw, void *context));
++/* On 2.5 'device' is 'struct device *' */
++
++void release_firmware (const struct firmware *fw);
++void register_firmware (const char *name, const u8 *data, size_t size);
++#endif
+diff -urN linux-2.4.18/include/linux/kernel.h linux-2.4.18-mh9/include/linux/kernel.h
+--- linux-2.4.18/include/linux/kernel.h Mon Feb 25 20:38:13 2002
++++ linux-2.4.18-mh9/include/linux/kernel.h Mon Aug 25 18:38:11 2003
+@@ -11,6 +11,7 @@
+ #include <linux/linkage.h>
+ #include <linux/stddef.h>
+ #include <linux/types.h>
++#include <linux/compiler.h>
+
+ /* Optimization barrier */
+ /* The "volatile" is due to gcc bugs */
+@@ -181,4 +182,6 @@
+ char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding: libc5 uses this.. */
+ };
+
+-#endif
++#define BUG_ON(condition) do { if (unlikely((condition)!=0)) BUG(); } while(0)
++
++#endif /* _LINUX_KERNEL_H */
+diff -urN linux-2.4.18/include/net/bluetooth/bluetooth.h linux-2.4.18-mh9/include/net/bluetooth/bluetooth.h
+--- linux-2.4.18/include/net/bluetooth/bluetooth.h Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/include/net/bluetooth/bluetooth.h Mon Aug 25 18:38:11 2003
+@@ -23,7 +23,7 @@
+ */
+
+ /*
+- * $Id: bluetooth.h,v 1.6 2001/08/03 04:19:49 maxk Exp $
++ * $Id: bluetooth.h,v 1.9 2002/05/06 21:11:55 maxk Exp $
+ */
+
+ #ifndef __BLUETOOTH_H
+@@ -31,17 +31,63 @@
+
+ #include <asm/types.h>
+ #include <asm/byteorder.h>
++#include <linux/poll.h>
++#include <net/sock.h>
+
+ #ifndef AF_BLUETOOTH
+ #define AF_BLUETOOTH 31
+ #define PF_BLUETOOTH AF_BLUETOOTH
+ #endif
+
++/* Reserv for core and drivers use */
++#define BLUEZ_SKB_RESERVE 8
++
++#ifndef MIN
++#define MIN(a,b) ((a) < (b) ? (a) : (b))
++#endif
++
+ #define BTPROTO_L2CAP 0
+ #define BTPROTO_HCI 1
++#define BTPROTO_SCO 2
++#define BTPROTO_RFCOMM 3
++#define BTPROTO_BNEP 4
++#define BTPROTO_CMTP 5
+
+ #define SOL_HCI 0
+ #define SOL_L2CAP 6
++#define SOL_SCO 17
++#define SOL_RFCOMM 18
++
++/* Debugging */
++#ifdef CONFIG_BLUEZ_DEBUG
++
++#define HCI_CORE_DEBUG 1
++#define HCI_SOCK_DEBUG 1
++#define HCI_UART_DEBUG 1
++#define HCI_USB_DEBUG 1
++//#define HCI_DATA_DUMP 1
++
++#define L2CAP_DEBUG 1
++#define SCO_DEBUG 1
++#define AF_BLUETOOTH_DEBUG 1
++
++#endif /* CONFIG_BLUEZ_DEBUG */
++
++extern void bluez_dump(char *pref, __u8 *buf, int count);
++
++#if __GNUC__ <= 2 && __GNUC_MINOR__ < 95
++#define __func__ __FUNCTION__
++#endif
++
++#define BT_INFO(fmt, arg...) printk(KERN_INFO fmt "\n" , ## arg)
++#define BT_DBG(fmt, arg...) printk(KERN_INFO "%s: " fmt "\n" , __func__ , ## arg)
++#define BT_ERR(fmt, arg...) printk(KERN_ERR "%s: " fmt "\n" , __func__ , ## arg)
++
++#ifdef HCI_DATA_DUMP
++#define BT_DMP(buf, len) bluez_dump(__func__, buf, len)
++#else
++#define BT_DMP(D...)
++#endif
+
+ /* Connection and socket states */
+ enum {
+@@ -50,6 +96,7 @@
+ BT_BOUND,
+ BT_LISTEN,
+ BT_CONNECT,
++ BT_CONNECT2,
+ BT_CONFIG,
+ BT_DISCONN,
+ BT_CLOSED
+@@ -66,7 +113,8 @@
+ __u8 b[6];
+ } __attribute__((packed)) bdaddr_t;
+
+-#define BDADDR_ANY ((bdaddr_t *)"\000\000\000\000\000")
++#define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})
++#define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}})
+
+ /* Copy, swap, convert BD Address */
+ static inline int bacmp(bdaddr_t *ba1, bdaddr_t *ba2)
+@@ -82,6 +130,91 @@
+ char *batostr(bdaddr_t *ba);
+ bdaddr_t *strtoba(char *str);
+
++/* Common socket structures and functions */
++
++#define bluez_pi(sk) ((struct bluez_pinfo *) &sk->protinfo)
++#define bluez_sk(pi) ((struct sock *) \
++ ((void *)pi - (unsigned long)(&((struct sock *)0)->protinfo)))
++
++struct bluez_pinfo {
++ bdaddr_t src;
++ bdaddr_t dst;
++
++ struct list_head accept_q;
++ struct sock *parent;
++};
++
++struct bluez_sock_list {
++ struct sock *head;
++ rwlock_t lock;
++};
++
++int bluez_sock_register(int proto, struct net_proto_family *ops);
++int bluez_sock_unregister(int proto);
++void bluez_sock_init(struct socket *sock, struct sock *sk);
++void bluez_sock_link(struct bluez_sock_list *l, struct sock *s);
++void bluez_sock_unlink(struct bluez_sock_list *l, struct sock *s);
++int bluez_sock_recvmsg(struct socket *sock, struct msghdr *msg, int len, int flags, struct scm_cookie *scm);
++uint bluez_sock_poll(struct file * file, struct socket *sock, poll_table *wait);
++int bluez_sock_wait_state(struct sock *sk, int state, unsigned long timeo);
++
++void bluez_accept_enqueue(struct sock *parent, struct sock *sk);
++struct sock * bluez_accept_dequeue(struct sock *parent, struct socket *newsock);
++
++/* Skb helpers */
++struct bluez_skb_cb {
++ int incomming;
++};
++#define bluez_cb(skb) ((struct bluez_skb_cb *)(skb->cb))
++
++static inline struct sk_buff *bluez_skb_alloc(unsigned int len, int how)
++{
++ struct sk_buff *skb;
++
++ if ((skb = alloc_skb(len + BLUEZ_SKB_RESERVE, how))) {
++ skb_reserve(skb, BLUEZ_SKB_RESERVE);
++ bluez_cb(skb)->incomming = 0;
++ }
++ return skb;
++}
++
++static inline struct sk_buff *bluez_skb_send_alloc(struct sock *sk, unsigned long len,
++ int nb, int *err)
++{
++ struct sk_buff *skb;
++
++ if ((skb = sock_alloc_send_skb(sk, len + BLUEZ_SKB_RESERVE, nb, err))) {
++ skb_reserve(skb, BLUEZ_SKB_RESERVE);
++ bluez_cb(skb)->incomming = 0;
++ }
++
++ return skb;
++}
++
++static inline int skb_frags_no(struct sk_buff *skb)
++{
++ register struct sk_buff *frag = skb_shinfo(skb)->frag_list;
++ register int n = 1;
++
++ for (; frag; frag=frag->next, n++);
++ return n;
++}
++
++int hci_core_init(void);
++int hci_core_cleanup(void);
++int hci_sock_init(void);
++int hci_sock_cleanup(void);
++
+ int bterr(__u16 code);
++
++#ifndef MODULE_LICENSE
++#define MODULE_LICENSE(x)
++#endif
++
++#ifndef list_for_each_safe
++#define list_for_each_safe(pos, n, head) \
++ for (pos = (head)->next, n = pos->next; pos != (head); \
++ pos = n, n = pos->next)
++#endif
+
+ #endif /* __BLUETOOTH_H */
+diff -urN linux-2.4.18/include/net/bluetooth/bluez.h linux-2.4.18-mh9/include/net/bluetooth/bluez.h
+--- linux-2.4.18/include/net/bluetooth/bluez.h Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/include/net/bluetooth/bluez.h Thu Jan 1 01:00:00 1970
+@@ -1,124 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * $Id: bluez.h,v 1.4 2001/08/03 04:19:49 maxk Exp $
+- */
+-
+-#ifndef __IF_BLUEZ_H
+-#define __IF_BLUEZ_H
+-
+-#include <net/sock.h>
+-
+-#define BLUEZ_MAX_PROTO 2
+-
+-/* Reserv for core and drivers use */
+-#define BLUEZ_SKB_RESERVE 8
+-
+-#ifndef MIN
+-#define MIN(a,b) ((a) < (b) ? (a) : (b))
+-#endif
+-
+-/* Debugging */
+-#ifdef BLUEZ_DEBUG
+-
+-#define HCI_CORE_DEBUG 1
+-#define HCI_SOCK_DEBUG 1
+-#define HCI_UART_DEBUG 1
+-#define HCI_USB_DEBUG 1
+-//#define HCI_DATA_DUMP 1
+-
+-#define L2CAP_DEBUG 1
+-
+-#endif /* BLUEZ_DEBUG */
+-
+-extern void bluez_dump(char *pref, __u8 *buf, int count);
+-
+-#define INF(fmt, arg...) printk(KERN_INFO fmt "\n" , ## arg)
+-#define DBG(fmt, arg...) printk(KERN_INFO __FUNCTION__ ": " fmt "\n" , ## arg)
+-#define ERR(fmt, arg...) printk(KERN_ERR __FUNCTION__ ": " fmt "\n" , ## arg)
+-
+-#ifdef HCI_DATA_DUMP
+-#define DMP(buf, len) bluez_dump(__FUNCTION__, buf, len)
+-#else
+-#define DMP(D...)
+-#endif
+-
+-/* ----- Sockets ------ */
+-struct bluez_sock_list {
+- struct sock *head;
+- rwlock_t lock;
+-};
+-
+-extern int bluez_sock_register(int proto, struct net_proto_family *ops);
+-extern int bluez_sock_unregister(int proto);
+-
+-extern void bluez_sock_link(struct bluez_sock_list *l, struct sock *s);
+-extern void bluez_sock_unlink(struct bluez_sock_list *l, struct sock *s);
+-
+-/* ----- SKB helpers ----- */
+-struct bluez_skb_cb {
+- int incomming;
+-};
+-#define bluez_cb(skb) ((struct bluez_skb_cb *)(skb->cb))
+-
+-static inline struct sk_buff *bluez_skb_alloc(unsigned int len, int how)
+-{
+- struct sk_buff *skb;
+-
+- if ((skb = alloc_skb(len + BLUEZ_SKB_RESERVE, how))) {
+- skb_reserve(skb, BLUEZ_SKB_RESERVE);
+- bluez_cb(skb)->incomming = 0;
+- }
+- return skb;
+-}
+-
+-static inline struct sk_buff *bluez_skb_send_alloc(struct sock *sk, unsigned long len,
+- int nb, int *err)
+-{
+- struct sk_buff *skb;
+-
+- if ((skb = sock_alloc_send_skb(sk, len + BLUEZ_SKB_RESERVE, nb, err))) {
+- skb_reserve(skb, BLUEZ_SKB_RESERVE);
+- bluez_cb(skb)->incomming = 0;
+- }
+-
+- return skb;
+-}
+-
+-static inline int skb_frags_no(struct sk_buff *skb)
+-{
+- register struct sk_buff *frag = skb_shinfo(skb)->frag_list;
+- register int n = 1;
+-
+- for (; frag; frag=frag->next, n++);
+- return n;
+-}
+-
+-extern int hci_core_init(void);
+-extern int hci_core_cleanup(void);
+-extern int hci_sock_init(void);
+-extern int hci_sock_cleanup(void);
+-
+-#endif /* __IF_BLUEZ_H */
+diff -urN linux-2.4.18/include/net/bluetooth/hci.h linux-2.4.18-mh9/include/net/bluetooth/hci.h
+--- linux-2.4.18/include/net/bluetooth/hci.h Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/include/net/bluetooth/hci.h Mon Aug 25 18:38:12 2003
+@@ -23,59 +23,80 @@
+ */
+
+ /*
+- * $Id: hci.h,v 1.15 2001/08/05 06:02:15 maxk Exp $
++ * $Id: hci.h,v 1.5 2002/06/27 17:29:30 maxk Exp $
+ */
+
+ #ifndef __HCI_H
+ #define __HCI_H
+
+-#include <asm/byteorder.h>
+-
+-#define HCI_MAX_DEV 8
+-#define HCI_MAX_FRAME_SIZE 2048
++#define HCI_MAX_ACL_SIZE 1024
++#define HCI_MAX_SCO_SIZE 255
++#define HCI_MAX_EVENT_SIZE 260
++#define HCI_MAX_FRAME_SIZE (HCI_MAX_ACL_SIZE + 4)
+
+ /* HCI dev events */
+ #define HCI_DEV_REG 1
+ #define HCI_DEV_UNREG 2
+ #define HCI_DEV_UP 3
+ #define HCI_DEV_DOWN 4
++#define HCI_DEV_SUSPEND 5
++#define HCI_DEV_RESUME 6
++
++/* HCI notify events */
++#define HCI_NOTIFY_CONN_ADD 1
++#define HCI_NOTIFY_CONN_DEL 2
++#define HCI_NOTIFY_VOICE_SETTING 3
+
+ /* HCI device types */
+-#define HCI_UART 0
++#define HCI_VHCI 0
+ #define HCI_USB 1
+-#define HCI_VHCI 2
+-
+-/* HCI device modes */
+-#define HCI_NORMAL 0x0001
+-#define HCI_RAW 0x0002
+-#define HCI_MODE_MASK (HCI_NORMAL | HCI_RAW)
+-#define HCI_SOCK 0x1000
+-
+-/* HCI device states */
+-#define HCI_INIT 0x0010
+-#define HCI_UP 0x0020
+-#define HCI_RUNNING 0x0040
++#define HCI_PCCARD 2
++#define HCI_UART 3
++#define HCI_RS232 4
++#define HCI_PCI 5
+
+ /* HCI device flags */
+-#define HCI_PSCAN 0x0100
+-#define HCI_ISCAN 0x0200
+-#define HCI_AUTH 0x0400
++enum {
++ HCI_UP,
++ HCI_INIT,
++ HCI_RUNNING,
++
++ HCI_PSCAN,
++ HCI_ISCAN,
++ HCI_AUTH,
++ HCI_ENCRYPT,
++ HCI_INQUIRY,
++
++ HCI_RAW
++};
+
+-/* HCI Ioctl defines */
++/* HCI ioctl defines */
+ #define HCIDEVUP _IOW('H', 201, int)
+ #define HCIDEVDOWN _IOW('H', 202, int)
+ #define HCIDEVRESET _IOW('H', 203, int)
+-#define HCIRESETSTAT _IOW('H', 204, int)
+-#define HCIGETINFO _IOR('H', 205, int)
+-#define HCIGETDEVLIST _IOR('H', 206, int)
+-#define HCISETRAW _IOW('H', 207, int)
+-#define HCISETSCAN _IOW('H', 208, int)
+-#define HCISETAUTH _IOW('H', 209, int)
+-#define HCIINQUIRY _IOR('H', 210, int)
+-#define HCISETPTYPE _IOW('H', 211, int)
++#define HCIDEVRESTAT _IOW('H', 204, int)
++
++#define HCIGETDEVLIST _IOR('H', 210, int)
++#define HCIGETDEVINFO _IOR('H', 211, int)
+ #define HCIGETCONNLIST _IOR('H', 212, int)
++#define HCIGETCONNINFO _IOR('H', 213, int)
+
+-#ifndef __NO_HCI_DEFS
++#define HCISETRAW _IOW('H', 220, int)
++#define HCISETSCAN _IOW('H', 221, int)
++#define HCISETAUTH _IOW('H', 222, int)
++#define HCISETENCRYPT _IOW('H', 223, int)
++#define HCISETPTYPE _IOW('H', 224, int)
++#define HCISETLINKPOL _IOW('H', 225, int)
++#define HCISETLINKMODE _IOW('H', 226, int)
++#define HCISETACLMTU _IOW('H', 227, int)
++#define HCISETSCOMTU _IOW('H', 228, int)
++
++#define HCIINQUIRY _IOR('H', 240, int)
++
++/* HCI timeouts */
++#define HCI_CONN_TIMEOUT (HZ * 40)
++#define HCI_DISCONN_TIMEOUT (HZ * 2)
++#define HCI_CONN_IDLE_TIMEOUT (HZ * 60)
+
+ /* HCI Packet types */
+ #define HCI_COMMAND_PKT 0x01
+@@ -92,11 +113,18 @@
+ #define HCI_DH3 0x0800
+ #define HCI_DH5 0x8000
+
++#define HCI_HV1 0x0020
++#define HCI_HV2 0x0040
++#define HCI_HV3 0x0080
++
++#define SCO_PTYPE_MASK (HCI_HV1 | HCI_HV2 | HCI_HV3)
++#define ACL_PTYPE_MASK (~SCO_PTYPE_MASK)
++
+ /* ACL flags */
+-#define ACL_CONT 0x0001
+-#define ACL_START 0x0002
+-#define ACL_ACTIVE_BCAST 0x0010
+-#define ACL_PICO_BCAST 0x0020
++#define ACL_CONT 0x01
++#define ACL_START 0x02
++#define ACL_ACTIVE_BCAST 0x04
++#define ACL_PICO_BCAST 0x08
+
+ /* Baseband links */
+ #define SCO_LINK 0x00
+@@ -125,6 +153,20 @@
+ #define LMP_PSCHEME 0x02
+ #define LMP_PCONTROL 0x04
+
++/* Link policies */
++#define HCI_LP_RSWITCH 0x0001
++#define HCI_LP_HOLD 0x0002
++#define HCI_LP_SNIFF 0x0004
++#define HCI_LP_PARK 0x0008
++
++/* Link mode */
++#define HCI_LM_ACCEPT 0x8000
++#define HCI_LM_MASTER 0x0001
++#define HCI_LM_AUTH 0x0002
++#define HCI_LM_ENCRYPT 0x0004
++#define HCI_LM_TRUSTED 0x0008
++#define HCI_LM_RELIABLE 0x0010
++
+ /* ----- HCI Commands ----- */
+ /* OGF & OCF values */
+
+@@ -137,9 +179,10 @@
+ __u8 hci_ver;
+ __u16 hci_rev;
+ __u8 lmp_ver;
+- __u16 man_name;
+- __u16 lmp_sub;
++ __u16 manufacturer;
++ __u16 lmp_subver;
+ } __attribute__ ((packed)) read_local_version_rp;
++#define READ_LOCAL_VERSION_RP_SIZE 9
+
+ #define OCF_READ_LOCAL_FEATURES 0x0003
+ typedef struct {
+@@ -165,18 +208,24 @@
+ /* Host Controller and Baseband */
+ #define OGF_HOST_CTL 0x03
+ #define OCF_RESET 0x0003
++#define OCF_READ_AUTH_ENABLE 0x001F
+ #define OCF_WRITE_AUTH_ENABLE 0x0020
+- #define AUTH_DISABLED 0x00
+- #define AUTH_ENABLED 0x01
++ #define AUTH_DISABLED 0x00
++ #define AUTH_ENABLED 0x01
++
++#define OCF_READ_ENCRYPT_MODE 0x0021
++#define OCF_WRITE_ENCRYPT_MODE 0x0022
++ #define ENCRYPT_DISABLED 0x00
++ #define ENCRYPT_P2P 0x01
++ #define ENCRYPT_BOTH 0x02
+
+ #define OCF_WRITE_CA_TIMEOUT 0x0016
+ #define OCF_WRITE_PG_TIMEOUT 0x0018
+
+ #define OCF_WRITE_SCAN_ENABLE 0x001A
+- #define SCANS_DISABLED 0x00
+- #define IS_ENA_PS_DIS 0x01
+- #define IS_DIS_PS_ENA 0x02
+- #define IS_ENA_PS_ENA 0x03
++ #define SCAN_DISABLED 0x00
++ #define SCAN_INQUIRY 0x01
++ #define SCAN_PAGE 0x02
+
+ #define OCF_SET_EVENT_FLT 0x0005
+ typedef struct {
+@@ -226,9 +275,31 @@
+ } __attribute__ ((packed)) write_class_of_dev_cp;
+ #define WRITE_CLASS_OF_DEV_CP_SIZE 3
+
++#define OCF_READ_VOICE_SETTING 0x0025
++typedef struct {
++ __u8 status;
++ __u16 voice_setting;
++} __attribute__ ((packed)) read_voice_setting_rp;
++#define READ_VOICE_SETTING_RP_SIZE 3
++
++#define OCF_WRITE_VOICE_SETTING 0x0026
++typedef struct {
++ __u16 voice_setting;
++} __attribute__ ((packed)) write_voice_setting_cp;
++#define WRITE_VOICE_SETTING_CP_SIZE 2
++
++#define OCF_HOST_BUFFER_SIZE 0x0033
++typedef struct {
++ __u16 acl_mtu;
++ __u8 sco_mtu;
++ __u16 acl_max_pkt;
++ __u16 sco_max_pkt;
++} __attribute__ ((packed)) host_buffer_size_cp;
++#define HOST_BUFFER_SIZE_CP_SIZE 7
++
+ /* Link Control */
+ #define OGF_LINK_CTL 0x01
+-#define OCF_CREATE_CONN 0x0005
++#define OCF_CREATE_CONN 0x0005
+ typedef struct {
+ bdaddr_t bdaddr;
+ __u16 pkt_type;
+@@ -246,6 +317,13 @@
+ } __attribute__ ((packed)) accept_conn_req_cp;
+ #define ACCEPT_CONN_REQ_CP_SIZE 7
+
++#define OCF_REJECT_CONN_REQ 0x000a
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 reason;
++} __attribute__ ((packed)) reject_conn_req_cp;
++#define REJECT_CONN_REQ_CP_SIZE 7
++
+ #define OCF_DISCONNECT 0x0006
+ typedef struct {
+ __u16 handle;
+@@ -253,17 +331,142 @@
+ } __attribute__ ((packed)) disconnect_cp;
+ #define DISCONNECT_CP_SIZE 3
+
++#define OCF_ADD_SCO 0x0007
++typedef struct {
++ __u16 handle;
++ __u16 pkt_type;
++} __attribute__ ((packed)) add_sco_cp;
++#define ADD_SCO_CP_SIZE 4
++
+ #define OCF_INQUIRY 0x0001
+ typedef struct {
+ __u8 lap[3];
+- __u8 lenght;
++ __u8 length;
+ __u8 num_rsp;
+ } __attribute__ ((packed)) inquiry_cp;
+ #define INQUIRY_CP_SIZE 5
+
+-#define OGF_LINK_POLICY 0x02 /* Link Policy */
++typedef struct {
++ __u8 status;
++ bdaddr_t bdaddr;
++} __attribute__ ((packed)) status_bdaddr_rp;
++#define STATUS_BDADDR_RP_SIZE 7
++
++#define OCF_INQUIRY_CANCEL 0x0002
++
++#define OCF_LINK_KEY_REPLY 0x000B
++#define OCF_LINK_KEY_NEG_REPLY 0x000C
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 link_key[16];
++} __attribute__ ((packed)) link_key_reply_cp;
++#define LINK_KEY_REPLY_CP_SIZE 22
++
++#define OCF_PIN_CODE_REPLY 0x000D
++#define OCF_PIN_CODE_NEG_REPLY 0x000E
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 pin_len;
++ __u8 pin_code[16];
++} __attribute__ ((packed)) pin_code_reply_cp;
++#define PIN_CODE_REPLY_CP_SIZE 23
++
++#define OCF_CHANGE_CONN_PTYPE 0x000F
++typedef struct {
++ __u16 handle;
++ __u16 pkt_type;
++} __attribute__ ((packed)) change_conn_ptype_cp;
++#define CHANGE_CONN_PTYPE_CP_SIZE 4
++
++#define OCF_AUTH_REQUESTED 0x0011
++typedef struct {
++ __u16 handle;
++} __attribute__ ((packed)) auth_requested_cp;
++#define AUTH_REQUESTED_CP_SIZE 2
++
++#define OCF_SET_CONN_ENCRYPT 0x0013
++typedef struct {
++ __u16 handle;
++ __u8 encrypt;
++} __attribute__ ((packed)) set_conn_encrypt_cp;
++#define SET_CONN_ENCRYPT_CP_SIZE 3
++
++#define OCF_REMOTE_NAME_REQ 0x0019
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 pscan_rep_mode;
++ __u8 pscan_mode;
++ __u16 clock_offset;
++} __attribute__ ((packed)) remote_name_req_cp;
++#define REMOTE_NAME_REQ_CP_SIZE 10
++
++#define OCF_READ_REMOTE_FEATURES 0x001B
++typedef struct {
++ __u16 handle;
++} __attribute__ ((packed)) read_remote_features_cp;
++#define READ_REMOTE_FEATURES_CP_SIZE 2
++
++#define OCF_READ_REMOTE_VERSION 0x001D
++typedef struct {
++ __u16 handle;
++} __attribute__ ((packed)) read_remote_version_cp;
++#define READ_REMOTE_VERSION_CP_SIZE 2
++
++/* Link Policy */
++#define OGF_LINK_POLICY 0x02
++#define OCF_ROLE_DISCOVERY 0x0009
++typedef struct {
++ __u16 handle;
++} __attribute__ ((packed)) role_discovery_cp;
++#define ROLE_DISCOVERY_CP_SIZE 2
++typedef struct {
++ __u8 status;
++ __u16 handle;
++ __u8 role;
++} __attribute__ ((packed)) role_discovery_rp;
++#define ROLE_DISCOVERY_RP_SIZE 4
+
+-/* --------- HCI Events --------- */
++#define OCF_READ_LINK_POLICY 0x000C
++typedef struct {
++ __u16 handle;
++} __attribute__ ((packed)) read_link_policy_cp;
++#define READ_LINK_POLICY_CP_SIZE 2
++typedef struct {
++ __u8 status;
++ __u16 handle;
++ __u16 policy;
++} __attribute__ ((packed)) read_link_policy_rp;
++#define READ_LINK_POLICY_RP_SIZE 5
++
++#define OCF_SWITCH_ROLE 0x000B
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 role;
++} __attribute__ ((packed)) switch_role_cp;
++#define SWITCH_ROLE_CP_SIZE 7
++
++#define OCF_WRITE_LINK_POLICY 0x000D
++typedef struct {
++ __u16 handle;
++ __u16 policy;
++} __attribute__ ((packed)) write_link_policy_cp;
++#define WRITE_LINK_POLICY_CP_SIZE 4
++typedef struct {
++ __u8 status;
++ __u16 handle;
++} __attribute__ ((packed)) write_link_policy_rp;
++#define WRITE_LINK_POLICY_RP_SIZE 3
++
++/* Status params */
++#define OGF_STATUS_PARAM 0x05
++
++/* Testing commands */
++#define OGF_TESTING_CMD 0x3e
++
++/* Vendor specific commands */
++#define OGF_VENDOR_CMD 0x3f
++
++/* ---- HCI Events ---- */
+ #define EVT_INQUIRY_COMPLETE 0x01
+
+ #define EVT_INQUIRY_RESULT 0x02
+@@ -272,7 +475,7 @@
+ __u8 pscan_rep_mode;
+ __u8 pscan_period_mode;
+ __u8 pscan_mode;
+- __u8 class[3];
++ __u8 dev_class[3];
+ __u16 clock_offset;
+ } __attribute__ ((packed)) inquiry_info;
+ #define INQUIRY_INFO_SIZE 14
+@@ -303,6 +506,44 @@
+ } __attribute__ ((packed)) evt_disconn_complete;
+ #define EVT_DISCONN_COMPLETE_SIZE 4
+
++#define EVT_AUTH_COMPLETE 0x06
++typedef struct {
++ __u8 status;
++ __u16 handle;
++} __attribute__ ((packed)) evt_auth_complete;
++#define EVT_AUTH_COMPLETE_SIZE 3
++
++#define EVT_REMOTE_NAME_REQ_COMPLETE 0x07
++typedef struct {
++ __u8 status;
++ bdaddr_t bdaddr;
++ __u8 name[248];
++} __attribute__ ((packed)) evt_remote_name_req_complete;
++#define EVT_REMOTE_NAME_REQ_COMPLETE_SIZE 255
++
++#define EVT_ENCRYPT_CHANGE 0x08
++typedef struct {
++ __u8 status;
++ __u16 handle;
++ __u8 encrypt;
++} __attribute__ ((packed)) evt_encrypt_change;
++#define EVT_ENCRYPT_CHANGE_SIZE 5
++
++#define EVT_QOS_SETUP_COMPLETE 0x0D
++typedef struct {
++ __u8 service_type;
++ __u32 token_rate;
++ __u32 peak_bandwidth;
++ __u32 latency;
++ __u32 delay_variation;
++} __attribute__ ((packed)) hci_qos;
++typedef struct {
++ __u8 status;
++ __u16 handle;
++ hci_qos qos;
++} __attribute__ ((packed)) evt_qos_setup_complete;
++#define EVT_QOS_SETUP_COMPLETE_SIZE 20
++
+ #define EVT_CMD_COMPLETE 0x0e
+ typedef struct {
+ __u8 ncmd;
+@@ -321,16 +562,78 @@
+ #define EVT_NUM_COMP_PKTS 0x13
+ typedef struct {
+ __u8 num_hndl;
+- /* variable lenght part */
++ /* variable length part */
+ } __attribute__ ((packed)) evt_num_comp_pkts;
+ #define EVT_NUM_COMP_PKTS_SIZE 1
+
+-#define EVT_HCI_DEV_EVENT 0xfd
++#define EVT_ROLE_CHANGE 0x12
++typedef struct {
++ __u8 status;
++ bdaddr_t bdaddr;
++ __u8 role;
++} __attribute__ ((packed)) evt_role_change;
++#define EVT_ROLE_CHANGE_SIZE 8
++
++#define EVT_PIN_CODE_REQ 0x16
++typedef struct {
++ bdaddr_t bdaddr;
++} __attribute__ ((packed)) evt_pin_code_req;
++#define EVT_PIN_CODE_REQ_SIZE 6
++
++#define EVT_LINK_KEY_REQ 0x17
++typedef struct {
++ bdaddr_t bdaddr;
++} __attribute__ ((packed)) evt_link_key_req;
++#define EVT_LINK_KEY_REQ_SIZE 6
++
++#define EVT_LINK_KEY_NOTIFY 0x18
++typedef struct {
++ bdaddr_t bdaddr;
++ __u8 link_key[16];
++ __u8 key_type;
++} __attribute__ ((packed)) evt_link_key_notify;
++#define EVT_LINK_KEY_NOTIFY_SIZE 23
++
++#define EVT_READ_REMOTE_FEATURES_COMPLETE 0x0B
++typedef struct {
++ __u8 status;
++ __u16 handle;
++ __u8 features[8];
++} __attribute__ ((packed)) evt_read_remote_features_complete;
++#define EVT_READ_REMOTE_FEATURES_COMPLETE_SIZE 11
++
++#define EVT_READ_REMOTE_VERSION_COMPLETE 0x0C
++typedef struct {
++ __u8 status;
++ __u16 handle;
++ __u8 lmp_ver;
++ __u16 manufacturer;
++ __u16 lmp_subver;
++} __attribute__ ((packed)) evt_read_remote_version_complete;
++#define EVT_READ_REMOTE_VERSION_COMPLETE_SIZE 8
++
++/* Internal events generated by BlueZ stack */
++#define EVT_STACK_INTERNAL 0xfd
++typedef struct {
++ __u16 type;
++ __u8 data[0];
++} __attribute__ ((packed)) evt_stack_internal;
++#define EVT_STACK_INTERNAL_SIZE 2
++
++#define EVT_SI_DEVICE 0x01
++typedef struct {
++ __u16 event;
++ __u16 dev_id;
++} __attribute__ ((packed)) evt_si_device;
++#define EVT_SI_DEVICE_SIZE 4
++
++#define EVT_SI_SECURITY 0x02
+ typedef struct {
+ __u16 event;
+- __u16 param;
+-} __attribute__ ((packed)) evt_hci_dev_event;
+-#define EVT_HCI_DEV_EVENT_SIZE 4
++ __u16 proto;
++ __u16 subproto;
++ __u8 incomming;
++} __attribute__ ((packed)) evt_si_security;
+
+ /* -------- HCI Packet structures -------- */
+ #define HCI_TYPE_LEN 1
+@@ -369,14 +672,14 @@
+ #define acl_handle(h) (h & 0x0fff)
+ #define acl_flags(h) (h >> 12)
+
+-#endif /* _NO_HCI_DEFS */
+-
+ /* HCI Socket options */
+-#define HCI_DATA_DIR 0x0001
+-#define HCI_FILTER 0x0002
++#define HCI_DATA_DIR 1
++#define HCI_FILTER 2
++#define HCI_TIME_STAMP 3
+
+ /* HCI CMSG flags */
+ #define HCI_CMSG_DIR 0x0001
++#define HCI_CMSG_TSTAMP 0x0002
+
+ struct sockaddr_hci {
+ sa_family_t hci_family;
+@@ -387,27 +690,29 @@
+ struct hci_filter {
+ __u32 type_mask;
+ __u32 event_mask[2];
++ __u16 opcode;
+ };
+
+-struct hci_dev_req {
+- __u16 dev_id;
+- __u32 dev_opt;
+-};
+-
+-struct hci_dev_list_req {
+- __u16 dev_num;
+- struct hci_dev_req dev_req[0]; /* hci_dev_req structures */
+-};
+-
+-struct hci_inquiry_req {
+- __u16 dev_id;
+- __u16 flags;
+- __u8 lap[3];
+- __u8 length;
+- __u8 num_rsp;
+-};
+-#define IREQ_CACHE_FLUSH 0x0001
++#define HCI_FLT_TYPE_BITS 31
++#define HCI_FLT_EVENT_BITS 63
++#define HCI_FLT_OGF_BITS 63
++#define HCI_FLT_OCF_BITS 127
++
++#if BITS_PER_LONG == 64
++static inline void hci_set_bit(int nr, void *addr)
++{
++ *((__u32 *) addr + (nr >> 5)) |= ((__u32) 1 << (nr & 31));
++}
++static inline int hci_test_bit(int nr, void *addr)
++{
++ return *((__u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31));
++}
++#else
++#define hci_set_bit set_bit
++#define hci_test_bit test_bit
++#endif
+
++/* Ioctl requests structures */
+ struct hci_dev_stats {
+ __u32 err_rx;
+ __u32 err_tx;
+@@ -433,11 +738,13 @@
+ __u8 features[8];
+
+ __u32 pkt_type;
++ __u32 link_policy;
++ __u32 link_mode;
+
+ __u16 acl_mtu;
+- __u16 acl_max;
++ __u16 acl_pkts;
+ __u16 sco_mtu;
+- __u16 sco_max;
++ __u16 sco_pkts;
+
+ struct hci_dev_stats stat;
+ };
+@@ -445,12 +752,48 @@
+ struct hci_conn_info {
+ __u16 handle;
+ bdaddr_t bdaddr;
++ __u8 type;
++ __u8 out;
++ __u16 state;
++ __u32 link_mode;
++};
++
++struct hci_dev_req {
++ __u16 dev_id;
++ __u32 dev_opt;
++};
++
++struct hci_dev_list_req {
++ __u16 dev_num;
++ struct hci_dev_req dev_req[0]; /* hci_dev_req structures */
+ };
+
+ struct hci_conn_list_req {
+ __u16 dev_id;
+ __u16 conn_num;
+ struct hci_conn_info conn_info[0];
++};
++
++struct hci_conn_info_req {
++ bdaddr_t bdaddr;
++ __u8 type;
++ struct hci_conn_info conn_info[0];
++};
++
++struct hci_inquiry_req {
++ __u16 dev_id;
++ __u16 flags;
++ __u8 lap[3];
++ __u8 length;
++ __u8 num_rsp;
++};
++#define IREQ_CACHE_FLUSH 0x0001
++
++struct hci_remotename_req {
++ __u16 dev_id;
++ __u16 flags;
++ bdaddr_t bdaddr;
++ __u8 name[248];
+ };
+
+ #endif /* __HCI_H */
+diff -urN linux-2.4.18/include/net/bluetooth/hci_core.h linux-2.4.18-mh9/include/net/bluetooth/hci_core.h
+--- linux-2.4.18/include/net/bluetooth/hci_core.h Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/include/net/bluetooth/hci_core.h Mon Aug 25 18:38:12 2003
+@@ -23,7 +23,7 @@
+ */
+
+ /*
+- * $Id: hci_core.h,v 1.11 2001/08/05 06:02:15 maxk Exp $
++ * $Id: hci_core.h,v 1.5 2002/06/27 04:56:30 maxk Exp $
+ */
+
+ #ifndef __HCI_CORE_H
+@@ -32,14 +32,12 @@
+ #include <net/bluetooth/hci.h>
+
+ /* HCI upper protocols */
+-#define HCI_MAX_PROTO 1
+ #define HCI_PROTO_L2CAP 0
++#define HCI_PROTO_SCO 1
+
+ #define HCI_INIT_TIMEOUT (HZ * 10)
+
+-/* ----- Inquiry cache ----- */
+-#define INQUIRY_CACHE_AGE_MAX (HZ*5) // 5 seconds
+-#define INQUIRY_ENTRY_AGE_MAX (HZ*60) // 60 seconds
++/* HCI Core structures */
+
+ struct inquiry_entry {
+ struct inquiry_entry *next;
+@@ -53,111 +51,182 @@
+ struct inquiry_entry *list;
+ };
+
+-static inline void inquiry_cache_init(struct inquiry_cache *cache)
+-{
+- spin_lock_init(&cache->lock);
+- cache->list = NULL;
+-}
++struct conn_hash {
++ struct list_head list;
++ spinlock_t lock;
++ unsigned int num;
++};
+
+-static inline void inquiry_cache_lock(struct inquiry_cache *cache)
+-{
+- spin_lock(&cache->lock);
+-}
++struct hci_dev {
++ struct list_head list;
++ spinlock_t lock;
++ atomic_t refcnt;
+
+-static inline void inquiry_cache_unlock(struct inquiry_cache *cache)
+-{
+- spin_unlock(&cache->lock);
+-}
++ char name[8];
++ unsigned long flags;
++ __u16 id;
++ __u8 type;
++ bdaddr_t bdaddr;
++ __u8 features[8];
++ __u16 voice_setting;
+
+-static inline void inquiry_cache_lock_bh(struct inquiry_cache *cache)
+-{
+- spin_lock_bh(&cache->lock);
+-}
++ __u16 pkt_type;
++ __u16 link_policy;
++ __u16 link_mode;
+
+-static inline void inquiry_cache_unlock_bh(struct inquiry_cache *cache)
+-{
+- spin_unlock_bh(&cache->lock);
+-}
++ atomic_t cmd_cnt;
++ unsigned int acl_cnt;
++ unsigned int sco_cnt;
+
+-static inline long inquiry_cache_age(struct inquiry_cache *cache)
+-{
+- return jiffies - cache->timestamp;
+-}
++ unsigned int acl_mtu;
++ unsigned int sco_mtu;
++ unsigned int acl_pkts;
++ unsigned int sco_pkts;
+
+-static inline long inquiry_entry_age(struct inquiry_entry *e)
+-{
+- return jiffies - e->timestamp;
+-}
+-extern void inquiry_cache_flush(struct inquiry_cache *cache);
++ unsigned long cmd_last_tx;
++ unsigned long acl_last_tx;
++ unsigned long sco_last_tx;
++
++ struct tasklet_struct cmd_task;
++ struct tasklet_struct rx_task;
++ struct tasklet_struct tx_task;
+
+-struct hci_dev;
++ struct sk_buff_head rx_q;
++ struct sk_buff_head raw_q;
++ struct sk_buff_head cmd_q;
++
++ struct sk_buff *sent_cmd;
++
++ struct semaphore req_lock;
++ wait_queue_head_t req_wait_q;
++ __u32 req_status;
++ __u32 req_result;
++
++ struct inquiry_cache inq_cache;
++ struct conn_hash conn_hash;
++
++ struct hci_dev_stats stat;
++
++ void *driver_data;
++ void *core_data;
++
++ atomic_t promisc;
++
++ int (*open)(struct hci_dev *hdev);
++ int (*close)(struct hci_dev *hdev);
++ int (*flush)(struct hci_dev *hdev);
++ int (*send)(struct sk_buff *skb);
++ void (*destruct)(struct hci_dev *hdev);
++ void (*notify)(struct hci_dev *hdev, unsigned int evt, unsigned long arg);
++ int (*ioctl)(struct hci_dev *hdev, unsigned int cmd, unsigned long arg);
++};
+
+-/* ----- HCI Connections ----- */
+ struct hci_conn {
+ struct list_head list;
++
++ atomic_t refcnt;
++ spinlock_t lock;
++
+ bdaddr_t dst;
+ __u16 handle;
++ __u16 state;
+ __u8 type;
+- unsigned int sent;
++ __u8 out;
++ __u32 link_mode;
++ unsigned long pend;
++
++ unsigned int sent;
++
++ struct sk_buff_head data_q;
+
++ struct timer_list timer;
++
+ struct hci_dev *hdev;
+ void *l2cap_data;
++ void *sco_data;
+ void *priv;
+
+- struct sk_buff_head data_q;
++ struct hci_conn *link;
+ };
+
+-struct conn_hash {
+- struct list_head list;
+- spinlock_t lock;
+- unsigned int num;
+-};
++extern struct hci_proto *hci_proto[];
++extern struct list_head hdev_list;
++extern rwlock_t hdev_list_lock;
++
++/* ----- Inquiry cache ----- */
++#define INQUIRY_CACHE_AGE_MAX (HZ*30) // 30 seconds
++#define INQUIRY_ENTRY_AGE_MAX (HZ*60) // 60 seconds
++
++#define inquiry_cache_lock(c) spin_lock(&c->lock)
++#define inquiry_cache_unlock(c) spin_unlock(&c->lock)
++#define inquiry_cache_lock_bh(c) spin_lock_bh(&c->lock)
++#define inquiry_cache_unlock_bh(c) spin_unlock_bh(&c->lock)
+
+-static inline void conn_hash_init(struct conn_hash *h)
++static inline void inquiry_cache_init(struct hci_dev *hdev)
+ {
+- INIT_LIST_HEAD(&h->list);
+- spin_lock_init(&h->lock);
+- h->num = 0;
++ struct inquiry_cache *c = &hdev->inq_cache;
++ spin_lock_init(&c->lock);
++ c->list = NULL;
+ }
+
+-static inline void conn_hash_lock(struct conn_hash *h)
++static inline long inquiry_cache_age(struct hci_dev *hdev)
+ {
+- spin_lock(&h->lock);
++ struct inquiry_cache *c = &hdev->inq_cache;
++ return jiffies - c->timestamp;
+ }
+
+-static inline void conn_hash_unlock(struct conn_hash *h)
++static inline long inquiry_entry_age(struct inquiry_entry *e)
+ {
+- spin_unlock(&h->lock);
++ return jiffies - e->timestamp;
+ }
+
+-static inline void __conn_hash_add(struct conn_hash *h, __u16 handle, struct hci_conn *c)
++struct inquiry_entry *inquiry_cache_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr);
++void inquiry_cache_update(struct hci_dev *hdev, inquiry_info *info);
++void inquiry_cache_flush(struct hci_dev *hdev);
++int inquiry_cache_dump(struct hci_dev *hdev, int num, __u8 *buf);
++
++/* ----- HCI Connections ----- */
++enum {
++ HCI_CONN_AUTH_PEND,
++ HCI_CONN_ENCRYPT_PEND
++};
++
++#define hci_conn_lock(c) spin_lock(&c->lock)
++#define hci_conn_unlock(c) spin_unlock(&c->lock)
++#define hci_conn_lock_bh(c) spin_lock_bh(&c->lock)
++#define hci_conn_unlock_bh(c) spin_unlock_bh(&c->lock)
++
++#define conn_hash_lock(d) spin_lock(&d->conn_hash->lock)
++#define conn_hash_unlock(d) spin_unlock(&d->conn_hash->lock)
++#define conn_hash_lock_bh(d) spin_lock_bh(&d->conn_hash->lock)
++#define conn_hash_unlock_bh(d) spin_unlock_bh(&d->conn_hash->lock)
++
++static inline void conn_hash_init(struct hci_dev *hdev)
+ {
+- list_add(&c->list, &h->list);
+- h->num++;
++ struct conn_hash *h = &hdev->conn_hash;
++ INIT_LIST_HEAD(&h->list);
++ spin_lock_init(&h->lock);
++ h->num = 0;
+ }
+
+-static inline void conn_hash_add(struct conn_hash *h, __u16 handle, struct hci_conn *c)
++static inline void conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
+ {
+- conn_hash_lock(h);
+- __conn_hash_add(h, handle, c);
+- conn_hash_unlock(h);
++ struct conn_hash *h = &hdev->conn_hash;
++ list_add(&c->list, &h->list);
++ h->num++;
+ }
+
+-static inline void __conn_hash_del(struct conn_hash *h, struct hci_conn *c)
++static inline void conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
+ {
++ struct conn_hash *h = &hdev->conn_hash;
+ list_del(&c->list);
+ h->num--;
+ }
+
+-static inline void conn_hash_del(struct conn_hash *h, struct hci_conn *c)
+-{
+- conn_hash_lock(h);
+- __conn_hash_del(h, c);
+- conn_hash_unlock(h);
+-}
+-
+-static inline struct hci_conn *__conn_hash_lookup(struct conn_hash *h, __u16 handle)
++static inline struct hci_conn *conn_hash_lookup_handle(struct hci_dev *hdev,
++ __u16 handle)
+ {
++ register struct conn_hash *h = &hdev->conn_hash;
+ register struct list_head *p;
+ register struct hci_conn *c;
+
+@@ -169,101 +238,95 @@
+ return NULL;
+ }
+
+-static inline struct hci_conn *conn_hash_lookup(struct conn_hash *h, __u16 handle)
++static inline struct hci_conn *conn_hash_lookup_ba(struct hci_dev *hdev,
++ __u8 type, bdaddr_t *ba)
+ {
+- struct hci_conn *conn;
++ register struct conn_hash *h = &hdev->conn_hash;
++ register struct list_head *p;
++ register struct hci_conn *c;
+
+- conn_hash_lock(h);
+- conn = __conn_hash_lookup(h, handle);
+- conn_hash_unlock(h);
+- return conn;
++ list_for_each(p, &h->list) {
++ c = list_entry(p, struct hci_conn, list);
++ if (c->type == type && !bacmp(&c->dst, ba))
++ return c;
++ }
++ return NULL;
+ }
+
+-/* ----- HCI Devices ----- */
+-struct hci_dev {
+- atomic_t refcnt;
+-
+- char name[8];
+- __u32 flags;
+- __u16 id;
+- __u8 type;
+- bdaddr_t bdaddr;
+- __u8 features[8];
+-
+- __u16 pkt_type;
+-
+- atomic_t cmd_cnt;
+- unsigned int acl_cnt;
+- unsigned int sco_cnt;
+-
+- unsigned int acl_mtu;
+- unsigned int sco_mtu;
+- unsigned int acl_max;
+- unsigned int sco_max;
+-
+- void *driver_data;
+- void *l2cap_data;
+- void *priv;
+-
+- struct tasklet_struct cmd_task;
+- struct tasklet_struct rx_task;
+- struct tasklet_struct tx_task;
+-
+- struct sk_buff_head rx_q;
+- struct sk_buff_head raw_q;
+- struct sk_buff_head cmd_q;
+-
+- struct sk_buff *sent_cmd;
+-
+- struct semaphore req_lock;
+- wait_queue_head_t req_wait_q;
+- __u32 req_status;
+- __u32 req_result;
+-
+- struct inquiry_cache inq_cache;
++void hci_acl_connect(struct hci_conn *conn);
++void hci_acl_disconn(struct hci_conn *conn, __u8 reason);
++void hci_add_sco(struct hci_conn *conn, __u16 handle);
+
+- struct conn_hash conn_hash;
++struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst);
++int hci_conn_del(struct hci_conn *conn);
++void hci_conn_hash_flush(struct hci_dev *hdev);
+
+- struct hci_dev_stats stat;
++struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *src);
++int hci_conn_auth(struct hci_conn *conn);
++int hci_conn_encrypt(struct hci_conn *conn);
+
+- int (*open)(struct hci_dev *hdev);
+- int (*close)(struct hci_dev *hdev);
+- int (*flush)(struct hci_dev *hdev);
+- int (*send)(struct sk_buff *skb);
+-};
++static inline void hci_conn_set_timer(struct hci_conn *conn, long timeout)
++{
++ mod_timer(&conn->timer, jiffies + timeout);
++}
+
+-static inline void hci_dev_hold(struct hci_dev *hdev)
++static inline void hci_conn_del_timer(struct hci_conn *conn)
+ {
+- atomic_inc(&hdev->refcnt);
++ del_timer(&conn->timer);
+ }
+
+-static inline void hci_dev_put(struct hci_dev *hdev)
++static inline void hci_conn_hold(struct hci_conn *conn)
+ {
+- atomic_dec(&hdev->refcnt);
++ atomic_inc(&conn->refcnt);
++ hci_conn_del_timer(conn);
+ }
+
+-extern struct hci_dev *hci_dev_get(int index);
+-extern int hci_register_dev(struct hci_dev *hdev);
+-extern int hci_unregister_dev(struct hci_dev *hdev);
+-extern int hci_dev_open(__u16 dev);
+-extern int hci_dev_close(__u16 dev);
+-extern int hci_dev_reset(__u16 dev);
+-extern int hci_dev_reset_stat(__u16 dev);
+-extern int hci_dev_info(unsigned long arg);
+-extern int hci_dev_list(unsigned long arg);
+-extern int hci_dev_setscan(unsigned long arg);
+-extern int hci_dev_setauth(unsigned long arg);
+-extern int hci_dev_setptype(unsigned long arg);
+-extern int hci_conn_list(unsigned long arg);
+-extern int hci_inquiry(unsigned long arg);
++static inline void hci_conn_put(struct hci_conn *conn)
++{
++ if (atomic_dec_and_test(&conn->refcnt)) {
++ if (conn->type == SCO_LINK)
++ hci_conn_set_timer(conn, HZ / 100);
++ else if (conn->out)
++ hci_conn_set_timer(conn, HCI_DISCONN_TIMEOUT);
++ }
++}
+
+-extern __u32 hci_dev_setmode(struct hci_dev *hdev, __u32 mode);
+-extern __u32 hci_dev_getmode(struct hci_dev *hdev);
++/* ----- HCI Devices ----- */
++static inline void hci_dev_put(struct hci_dev *d)
++{
++ if (atomic_dec_and_test(&d->refcnt))
++ d->destruct(d);
++}
++#define hci_dev_hold(d) atomic_inc(&d->refcnt)
++
++#define hci_dev_lock(d) spin_lock(&d->lock)
++#define hci_dev_unlock(d) spin_unlock(&d->lock)
++#define hci_dev_lock_bh(d) spin_lock_bh(&d->lock)
++#define hci_dev_unlock_bh(d) spin_unlock_bh(&d->lock)
++
++struct hci_dev *hci_dev_get(int index);
++struct hci_dev *hci_get_route(bdaddr_t *src, bdaddr_t *dst);
++int hci_register_dev(struct hci_dev *hdev);
++int hci_unregister_dev(struct hci_dev *hdev);
++int hci_suspend_dev(struct hci_dev *hdev);
++int hci_resume_dev(struct hci_dev *hdev);
++int hci_dev_open(__u16 dev);
++int hci_dev_close(__u16 dev);
++int hci_dev_reset(__u16 dev);
++int hci_dev_reset_stat(__u16 dev);
++int hci_dev_cmd(unsigned int cmd, unsigned long arg);
++int hci_get_dev_list(unsigned long arg);
++int hci_get_dev_info(unsigned long arg);
++int hci_get_conn_list(unsigned long arg);
++int hci_get_conn_info(struct hci_dev *hdev, unsigned long arg);
++int hci_inquiry(unsigned long arg);
+
+-extern int hci_recv_frame(struct sk_buff *skb);
++int hci_recv_frame(struct sk_buff *skb);
++void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
+
+ /* ----- LMP capabilities ----- */
+ #define lmp_rswitch_capable(dev) (dev->features[0] & LMP_RSWITCH)
++#define lmp_encrypt_capable(dev) (dev->features[0] & LMP_ENCRYPT)
+
+ /* ----- HCI tasks ----- */
+ static inline void hci_sched_cmd(struct hci_dev *hdev)
+@@ -284,43 +347,130 @@
+ /* ----- HCI protocols ----- */
+ struct hci_proto {
+ char *name;
+- __u32 id;
+- __u32 flags;
++ unsigned int id;
++ unsigned long flags;
+
+ void *priv;
+
+- int (*connect_ind) (struct hci_dev *hdev, bdaddr_t *bdaddr);
+- int (*connect_cfm) (struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 status, struct hci_conn *conn);
++ int (*connect_ind) (struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type);
++ int (*connect_cfm) (struct hci_conn *conn, __u8 status);
+ int (*disconn_ind) (struct hci_conn *conn, __u8 reason);
+- int (*recv_acldata) (struct hci_conn *conn, struct sk_buff *skb , __u16 flags);
++ int (*recv_acldata) (struct hci_conn *conn, struct sk_buff *skb, __u16 flags);
+ int (*recv_scodata) (struct hci_conn *conn, struct sk_buff *skb);
++ int (*auth_cfm) (struct hci_conn *conn, __u8 status);
++ int (*encrypt_cfm) (struct hci_conn *conn, __u8 status);
+ };
+
+-extern int hci_register_proto(struct hci_proto *hproto);
+-extern int hci_unregister_proto(struct hci_proto *hproto);
+-extern int hci_register_notifier(struct notifier_block *nb);
+-extern int hci_unregister_notifier(struct notifier_block *nb);
+-extern int hci_connect(struct hci_dev * hdev, bdaddr_t * bdaddr);
+-extern int hci_disconnect(struct hci_conn *conn, __u8 reason);
+-extern int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void * param);
+-extern int hci_send_raw(struct sk_buff *skb);
+-extern int hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags);
+-extern int hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);
++static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
++{
++ register struct hci_proto *hp;
++ int mask = 0;
++
++ hp = hci_proto[HCI_PROTO_L2CAP];
++ if (hp && hp->connect_ind)
++ mask |= hp->connect_ind(hdev, bdaddr, type);
++
++ hp = hci_proto[HCI_PROTO_SCO];
++ if (hp && hp->connect_ind)
++ mask |= hp->connect_ind(hdev, bdaddr, type);
++
++ return mask;
++}
++
++static inline void hci_proto_connect_cfm(struct hci_conn *conn, __u8 status)
++{
++ register struct hci_proto *hp;
++
++ hp = hci_proto[HCI_PROTO_L2CAP];
++ if (hp && hp->connect_cfm)
++ hp->connect_cfm(conn, status);
++
++ hp = hci_proto[HCI_PROTO_SCO];
++ if (hp && hp->connect_cfm)
++ hp->connect_cfm(conn, status);
++}
++
++static inline void hci_proto_disconn_ind(struct hci_conn *conn, __u8 reason)
++{
++ register struct hci_proto *hp;
++
++ hp = hci_proto[HCI_PROTO_L2CAP];
++ if (hp && hp->disconn_ind)
++ hp->disconn_ind(conn, reason);
++
++ hp = hci_proto[HCI_PROTO_SCO];
++ if (hp && hp->disconn_ind)
++ hp->disconn_ind(conn, reason);
++}
++
++static inline void hci_proto_auth_cfm(struct hci_conn *conn, __u8 status)
++{
++ register struct hci_proto *hp;
++
++ hp = hci_proto[HCI_PROTO_L2CAP];
++ if (hp && hp->auth_cfm)
++ hp->auth_cfm(conn, status);
++
++ hp = hci_proto[HCI_PROTO_SCO];
++ if (hp && hp->auth_cfm)
++ hp->auth_cfm(conn, status);
++}
++
++static inline void hci_proto_encrypt_cfm(struct hci_conn *conn, __u8 status)
++{
++ register struct hci_proto *hp;
++
++ hp = hci_proto[HCI_PROTO_L2CAP];
++ if (hp && hp->encrypt_cfm)
++ hp->encrypt_cfm(conn, status);
++
++ hp = hci_proto[HCI_PROTO_SCO];
++ if (hp && hp->encrypt_cfm)
++ hp->encrypt_cfm(conn, status);
++}
++
++int hci_register_proto(struct hci_proto *hproto);
++int hci_unregister_proto(struct hci_proto *hproto);
++int hci_register_notifier(struct notifier_block *nb);
++int hci_unregister_notifier(struct notifier_block *nb);
++
++int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void *param);
++int hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags);
++int hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);
++
++void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 ogf, __u16 ocf);
++
++void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data);
+
+ /* ----- HCI Sockets ----- */
+-extern void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);
++void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);
+
+ /* HCI info for socket */
+-#define hci_pi(sk) ((struct hci_pinfo *) &sk->protinfo)
++#define hci_pi(sk) ((struct hci_pinfo *) &sk->tp_pinfo)
+ struct hci_pinfo {
+ struct hci_dev *hdev;
+ struct hci_filter filter;
+ __u32 cmsg_mask;
+ };
+
++/* HCI security filter */
++#define HCI_SFLT_MAX_OGF 5
++
++struct hci_sec_filter {
++ __u32 type_mask;
++ __u32 event_mask[2];
++ __u32 ocf_mask[HCI_SFLT_MAX_OGF + 1][4];
++};
++
+ /* ----- HCI requests ----- */
+ #define HCI_REQ_DONE 0
+ #define HCI_REQ_PEND 1
+ #define HCI_REQ_CANCELED 2
++
++#define hci_req_lock(d) down(&d->req_lock)
++#define hci_req_unlock(d) up(&d->req_lock)
++
++void hci_req_complete(struct hci_dev *hdev, int result);
++void hci_req_cancel(struct hci_dev *hdev, int err);
+
+ #endif /* __HCI_CORE_H */
+diff -urN linux-2.4.18/include/net/bluetooth/hci_uart.h linux-2.4.18-mh9/include/net/bluetooth/hci_uart.h
+--- linux-2.4.18/include/net/bluetooth/hci_uart.h Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/include/net/bluetooth/hci_uart.h Thu Jan 1 01:00:00 1970
+@@ -1,62 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * $Id: hci_uart.h,v 1.2 2001/06/02 01:40:08 maxk Exp $
+- */
+-
+-#ifndef N_HCI
+-#define N_HCI 15
+-#endif
+-
+-#ifdef __KERNEL__
+-
+-#define tty2n_hci(tty) ((struct n_hci *)((tty)->disc_data))
+-#define n_hci2tty(n_hci) ((n_hci)->tty)
+-
+-struct n_hci {
+- struct tty_struct *tty;
+- struct hci_dev hdev;
+-
+- struct sk_buff_head txq;
+- unsigned long tx_state;
+-
+- spinlock_t rx_lock;
+- unsigned long rx_state;
+- unsigned long rx_count;
+- struct sk_buff *rx_skb;
+-};
+-
+-/* Transmit states */
+-#define TRANS_SENDING 1
+-#define TRANS_WAKEUP 2
+-
+-/* Receiver States */
+-#define WAIT_PACKET_TYPE 0
+-#define WAIT_EVENT_HDR 1
+-#define WAIT_ACL_HDR 2
+-#define WAIT_SCO_HDR 3
+-#define WAIT_DATA 4
+-
+-#endif /* __KERNEL__ */
+diff -urN linux-2.4.18/include/net/bluetooth/hci_usb.h linux-2.4.18-mh9/include/net/bluetooth/hci_usb.h
+--- linux-2.4.18/include/net/bluetooth/hci_usb.h Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/include/net/bluetooth/hci_usb.h Thu Jan 1 01:00:00 1970
+@@ -1,68 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * $Id: hci_usb.h,v 1.3 2001/06/02 01:40:08 maxk Exp $
+- */
+-
+-#ifdef __KERNEL__
+-
+-/* Class, SubClass, and Protocol codes that describe a Bluetooth device */
+-#define HCI_DEV_CLASS 0xe0 /* Wireless class */
+-#define HCI_DEV_SUBCLASS 0x01 /* RF subclass */
+-#define HCI_DEV_PROTOCOL 0x01 /* Bluetooth programming protocol */
+-
+-#define HCI_CTRL_REQ 0x20
+-
+-struct hci_usb {
+- struct usb_device *udev;
+-
+- devrequest dev_req;
+- struct urb *ctrl_urb;
+- struct urb *intr_urb;
+- struct urb *read_urb;
+- struct urb *write_urb;
+-
+- __u8 *read_buf;
+- __u8 *intr_buf;
+- struct sk_buff *intr_skb;
+- int intr_count;
+-
+- __u8 bulk_out_ep_addr;
+- __u8 bulk_in_ep_addr;
+- __u8 intr_in_ep_addr;
+- __u8 intr_in_interval;
+-
+- struct hci_dev hdev;
+-
+- unsigned long tx_state;
+- struct sk_buff_head tx_ctrl_q;
+- struct sk_buff_head tx_write_q;
+-};
+-
+-/* Transmit states */
+-#define HCI_TX_CTRL 1
+-#define HCI_TX_WRITE 2
+-
+-#endif /* __KERNEL__ */
+diff -urN linux-2.4.18/include/net/bluetooth/hci_vhci.h linux-2.4.18-mh9/include/net/bluetooth/hci_vhci.h
+--- linux-2.4.18/include/net/bluetooth/hci_vhci.h Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/include/net/bluetooth/hci_vhci.h Thu Jan 1 01:00:00 1970
+@@ -1,50 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * $Id: hci_vhci.h,v 1.2 2001/08/01 01:02:20 maxk Exp $
+- */
+-
+-#ifndef __HCI_VHCI_H
+-#define __HCI_VHCI_H
+-
+-#ifdef __KERNEL__
+-
+-struct hci_vhci_struct {
+- struct hci_dev hdev;
+- __u32 flags;
+- wait_queue_head_t read_wait;
+- struct sk_buff_head readq;
+- struct fasync_struct *fasync;
+-};
+-
+-/* VHCI device flags */
+-#define VHCI_FASYNC 0x0010
+-
+-#endif /* __KERNEL__ */
+-
+-#define VHCI_DEV "/dev/vhci"
+-#define VHCI_MINOR 250
+-
+-#endif /* __HCI_VHCI_H */
+diff -urN linux-2.4.18/include/net/bluetooth/l2cap.h linux-2.4.18-mh9/include/net/bluetooth/l2cap.h
+--- linux-2.4.18/include/net/bluetooth/l2cap.h Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/include/net/bluetooth/l2cap.h Mon Aug 25 18:38:12 2003
+@@ -23,22 +23,17 @@
+ */
+
+ /*
+- * $Id: l2cap.h,v 1.5 2001/06/14 21:28:26 maxk Exp $
++ * $Id: l2cap.h,v 1.1.1.1 2002/03/08 21:03:15 maxk Exp $
+ */
+
+ #ifndef __L2CAP_H
+ #define __L2CAP_H
+
+-#include <asm/types.h>
+-#include <asm/byteorder.h>
+-
+ /* L2CAP defaults */
+ #define L2CAP_DEFAULT_MTU 672
+ #define L2CAP_DEFAULT_FLUSH_TO 0xFFFF
+
+ #define L2CAP_CONN_TIMEOUT (HZ * 40)
+-#define L2CAP_DISCONN_TIMEOUT (HZ * 2)
+-#define L2CAP_CONN_IDLE_TIMEOUT (HZ * 60)
+
+ /* L2CAP socket address */
+ struct sockaddr_l2 {
+@@ -47,17 +42,12 @@
+ bdaddr_t l2_bdaddr;
+ };
+
+-/* set/get sockopt defines */
+-#define L2CAP_OPTIONS 0x01
++/* Socket options */
++#define L2CAP_OPTIONS 0x01
+ struct l2cap_options {
+ __u16 omtu;
+ __u16 imtu;
+ __u16 flush_to;
+- __u32 token_rate;
+- __u32 bucket_size;
+- __u32 pick_band;
+- __u32 latency;
+- __u32 delay_var;
+ };
+
+ #define L2CAP_CONNINFO 0x02
+@@ -65,6 +55,27 @@
+ __u16 hci_handle;
+ };
+
++#define L2CAP_LM 0x03
++#define L2CAP_LM_MASTER 0x0001
++#define L2CAP_LM_AUTH 0x0002
++#define L2CAP_LM_ENCRYPT 0x0004
++#define L2CAP_LM_TRUSTED 0x0008
++#define L2CAP_LM_RELIABLE 0x0010
++
++#define L2CAP_QOS 0x04
++struct l2cap_qos {
++ __u16 service_type;
++ __u32 token_rate;
++ __u32 token_bucket_size;
++ __u32 peak_bandwidth;
++ __u32 latency;
++ __u32 delay_variation;
++};
++
++#define L2CAP_SERV_NO_TRAFFIC 0x00
++#define L2CAP_SERV_BEST_EFFORT 0x01
++#define L2CAP_SERV_GUARANTEED 0x02
++
+ /* L2CAP command codes */
+ #define L2CAP_COMMAND_REJ 0x01
+ #define L2CAP_CONN_REQ 0x02
+@@ -79,7 +90,6 @@
+ #define L2CAP_INFO_RSP 0x0b
+
+ /* L2CAP structures */
+-
+ typedef struct {
+ __u16 len;
+ __u16 cid;
+@@ -112,11 +122,17 @@
+ } __attribute__ ((packed)) l2cap_conn_rsp;
+ #define L2CAP_CONN_RSP_SIZE 8
+
+-#define L2CAP_CONN_SUCCESS 0x0000
+-#define L2CAP_CONN_PEND 0x0001
+-#define L2CAP_CONN_BAD_PSM 0x0002
+-#define L2CAP_CONN_SEC_BLOCK 0x0003
+-#define L2CAP_CONN_NO_MEM 0x0004
++/* connect result */
++#define L2CAP_CR_SUCCESS 0x0000
++#define L2CAP_CR_PEND 0x0001
++#define L2CAP_CR_BAD_PSM 0x0002
++#define L2CAP_CR_SEC_BLOCK 0x0003
++#define L2CAP_CR_NO_MEM 0x0004
++
++/* connect status */
++#define L2CAP_CS_NO_INFO 0x0000
++#define L2CAP_CS_AUTHEN_PEND 0x0001
++#define L2CAP_CS_AUTHOR_PEND 0x0002
+
+ typedef struct {
+ __u16 dcid;
+@@ -147,6 +163,8 @@
+ #define L2CAP_CONF_FLUSH_TO 0x02
+ #define L2CAP_CONF_QOS 0x03
+
++#define L2CAP_CONF_MAX_SIZE 22
++
+ typedef struct {
+ __u16 dcid;
+ __u16 scid;
+@@ -158,5 +176,75 @@
+ __u16 scid;
+ } __attribute__ ((packed)) l2cap_disconn_rsp;
+ #define L2CAP_DISCONN_RSP_SIZE 4
++
++typedef struct {
++ __u16 type;
++ __u8 data[0];
++} __attribute__ ((packed)) l2cap_info_req;
++#define L2CAP_INFO_REQ_SIZE 2
++
++typedef struct {
++ __u16 type;
++ __u16 result;
++ __u8 data[0];
++} __attribute__ ((packed)) l2cap_info_rsp;
++#define L2CAP_INFO_RSP_SIZE 4
++
++/* ----- L2CAP connections ----- */
++struct l2cap_chan_list {
++ struct sock *head;
++ rwlock_t lock;
++ long num;
++};
++
++struct l2cap_conn {
++ struct hci_conn *hcon;
++
++ bdaddr_t *dst;
++ bdaddr_t *src;
++
++ unsigned int mtu;
++
++ spinlock_t lock;
++
++ struct sk_buff *rx_skb;
++ __u32 rx_len;
++ __u8 rx_ident;
++ __u8 tx_ident;
++
++ struct l2cap_chan_list chan_list;
++};
++
++/* ----- L2CAP channel and socket info ----- */
++#define l2cap_pi(sk) ((struct l2cap_pinfo *) &sk->tp_pinfo)
++
++struct l2cap_pinfo {
++ __u16 psm;
++ __u16 dcid;
++ __u16 scid;
++
++ __u16 imtu;
++ __u16 omtu;
++ __u16 flush_to;
++
++ __u32 link_mode;
++
++ __u8 conf_state;
++ __u8 conf_retry;
++ __u16 conf_mtu;
++
++ __u8 ident;
++
++ struct l2cap_conn *conn;
++ struct sock *next_c;
++ struct sock *prev_c;
++};
++
++#define L2CAP_CONF_REQ_SENT 0x01
++#define L2CAP_CONF_INPUT_DONE 0x02
++#define L2CAP_CONF_OUTPUT_DONE 0x04
++#define L2CAP_CONF_MAX_RETRIES 2
++
++void l2cap_load(void);
+
+ #endif /* __L2CAP_H */
+diff -urN linux-2.4.18/include/net/bluetooth/l2cap_core.h linux-2.4.18-mh9/include/net/bluetooth/l2cap_core.h
+--- linux-2.4.18/include/net/bluetooth/l2cap_core.h Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/include/net/bluetooth/l2cap_core.h Thu Jan 1 01:00:00 1970
+@@ -1,144 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * $Id: l2cap_core.h,v 1.6 2001/08/03 04:19:49 maxk Exp $
+- */
+-
+-#ifndef __L2CAP_CORE_H
+-#define __L2CAP_CORE_H
+-
+-#ifdef __KERNEL__
+-
+-/* ----- L2CAP interface ----- */
+-struct l2cap_iff {
+- struct list_head list;
+- struct hci_dev *hdev;
+- bdaddr_t *bdaddr;
+- __u16 mtu;
+- spinlock_t lock;
+- struct list_head conn_list;
+-};
+-
+-static inline void l2cap_iff_lock(struct l2cap_iff *iff)
+-{
+- spin_lock(&iff->lock);
+-}
+-
+-static inline void l2cap_iff_unlock(struct l2cap_iff *iff)
+-{
+- spin_unlock(&iff->lock);
+-}
+-
+-/* ----- L2CAP connections ----- */
+-struct l2cap_chan_list {
+- struct sock *head;
+- rwlock_t lock;
+- long num;
+-};
+-
+-struct l2cap_conn {
+- struct l2cap_iff *iff;
+- struct list_head list;
+-
+- struct hci_conn *hconn;
+-
+- __u16 state;
+- __u8 out;
+- bdaddr_t src;
+- bdaddr_t dst;
+-
+- spinlock_t lock;
+- atomic_t refcnt;
+-
+- struct sk_buff *rx_skb;
+- __u32 rx_len;
+- __u8 rx_ident;
+- __u8 tx_ident;
+-
+- struct l2cap_chan_list chan_list;
+-
+- struct timer_list timer;
+-};
+-
+-static inline void __l2cap_conn_link(struct l2cap_iff *iff, struct l2cap_conn *c)
+-{
+- list_add(&c->list, &iff->conn_list);
+-}
+-
+-static inline void __l2cap_conn_unlink(struct l2cap_iff *iff, struct l2cap_conn *c)
+-{
+- list_del(&c->list);
+-}
+-
+-/* ----- L2CAP channel and socket info ----- */
+-#define l2cap_pi(sk) ((struct l2cap_pinfo *) &sk->protinfo)
+-
+-struct l2cap_accept_q {
+- struct sock *head;
+- struct sock *tail;
+-};
+-
+-struct l2cap_pinfo {
+- bdaddr_t src;
+- bdaddr_t dst;
+- __u16 psm;
+- __u16 dcid;
+- __u16 scid;
+- __u32 flags;
+-
+- __u16 imtu;
+- __u16 omtu;
+- __u16 flush_to;
+-
+- __u8 conf_state;
+- __u16 conf_mtu;
+-
+- __u8 ident;
+-
+- struct l2cap_conn *conn;
+- struct sock *next_c;
+- struct sock *prev_c;
+-
+- struct sock *parent;
+- struct sock *next_q;
+- struct sock *prev_q;
+-
+- struct l2cap_accept_q accept_q;
+-};
+-
+-#define CONF_REQ_SENT 0x01
+-#define CONF_INPUT_DONE 0x02
+-#define CONF_OUTPUT_DONE 0x04
+-
+-extern struct bluez_sock_list l2cap_sk_list;
+-extern struct list_head l2cap_iff_list;
+-extern rwlock_t l2cap_rt_lock;
+-
+-extern void l2cap_register_proc(void);
+-extern void l2cap_unregister_proc(void);
+-
+-#endif /* __KERNEL__ */
+-
+-#endif /* __L2CAP_CORE_H */
+diff -urN linux-2.4.18/include/net/bluetooth/rfcomm.h linux-2.4.18-mh9/include/net/bluetooth/rfcomm.h
+--- linux-2.4.18/include/net/bluetooth/rfcomm.h Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/include/net/bluetooth/rfcomm.h Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,356 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ RPN support - Dirk Husemann <hud@zurich.ibm.com>
++*/
++
++/*
++ * $Id: rfcomm.h,v 1.31 2002/10/18 20:12:11 maxk Exp $
++ */
++
++#ifndef __RFCOMM_H
++#define __RFCOMM_H
++
++#define RFCOMM_PSM 3
++
++#define RFCOMM_CONN_TIMEOUT (HZ * 30)
++#define RFCOMM_DISC_TIMEOUT (HZ * 20)
++
++#define RFCOMM_DEFAULT_MTU 127
++#define RFCOMM_DEFAULT_CREDITS 7
++
++#define RFCOMM_MAX_L2CAP_MTU 1024
++#define RFCOMM_MAX_CREDITS 40
++
++#define RFCOMM_SKB_HEAD_RESERVE 8
++#define RFCOMM_SKB_TAIL_RESERVE 2
++#define RFCOMM_SKB_RESERVE (RFCOMM_SKB_HEAD_RESERVE + RFCOMM_SKB_TAIL_RESERVE)
++
++#define RFCOMM_SABM 0x2f
++#define RFCOMM_DISC 0x43
++#define RFCOMM_UA 0x63
++#define RFCOMM_DM 0x0f
++#define RFCOMM_UIH 0xef
++
++#define RFCOMM_TEST 0x08
++#define RFCOMM_FCON 0x28
++#define RFCOMM_FCOFF 0x18
++#define RFCOMM_MSC 0x38
++#define RFCOMM_RPN 0x24
++#define RFCOMM_RLS 0x14
++#define RFCOMM_PN 0x20
++#define RFCOMM_NSC 0x04
++
++#define RFCOMM_V24_FC 0x02
++#define RFCOMM_V24_RTC 0x04
++#define RFCOMM_V24_RTR 0x08
++#define RFCOMM_V24_IC 0x40
++#define RFCOMM_V24_DV 0x80
++
++#define RFCOMM_RPN_BR_2400 0x0
++#define RFCOMM_RPN_BR_4800 0x1
++#define RFCOMM_RPN_BR_7200 0x2
++#define RFCOMM_RPN_BR_9600 0x3
++#define RFCOMM_RPN_BR_19200 0x4
++#define RFCOMM_RPN_BR_38400 0x5
++#define RFCOMM_RPN_BR_57600 0x6
++#define RFCOMM_RPN_BR_115200 0x7
++#define RFCOMM_RPN_BR_230400 0x8
++
++#define RFCOMM_RPN_DATA_5 0x0
++#define RFCOMM_RPN_DATA_6 0x1
++#define RFCOMM_RPN_DATA_7 0x2
++#define RFCOMM_RPN_DATA_8 0x3
++
++#define RFCOMM_RPN_STOP_1 0
++#define RFCOMM_RPN_STOP_15 1
++
++#define RFCOMM_RPN_PARITY_NONE 0x0
++#define RFCOMM_RPN_PARITY_ODD 0x4
++#define RFCOMM_RPN_PARITY_EVEN 0x5
++#define RFCOMM_RPN_PARITY_MARK 0x6
++#define RFCOMM_RPN_PARITY_SPACE 0x7
++
++#define RFCOMM_RPN_FLOW_NONE 0x00
++
++#define RFCOMM_RPN_XON_CHAR 0x11
++#define RFCOMM_RPN_XOFF_CHAR 0x13
++
++#define RFCOMM_RPN_PM_BITRATE 0x0001
++#define RFCOMM_RPN_PM_DATA 0x0002
++#define RFCOMM_RPN_PM_STOP 0x0004
++#define RFCOMM_RPN_PM_PARITY 0x0008
++#define RFCOMM_RPN_PM_PARITY_TYPE 0x0010
++#define RFCOMM_RPN_PM_XON 0x0020
++#define RFCOMM_RPN_PM_XOFF 0x0040
++#define RFCOMM_RPN_PM_FLOW 0x3F00
++
++#define RFCOMM_RPN_PM_ALL 0x3F7F
++
++struct rfcomm_hdr {
++ u8 addr;
++ u8 ctrl;
++ u8 len; // Actual size can be 2 bytes
++} __attribute__ ((packed));
++
++struct rfcomm_cmd {
++ u8 addr;
++ u8 ctrl;
++ u8 len;
++ u8 fcs;
++} __attribute__ ((packed));
++
++struct rfcomm_mcc {
++ u8 type;
++ u8 len;
++} __attribute__ ((packed));
++
++struct rfcomm_pn {
++ u8 dlci;
++ u8 flow_ctrl;
++ u8 priority;
++ u8 ack_timer;
++ u16 mtu;
++ u8 max_retrans;
++ u8 credits;
++} __attribute__ ((packed));
++
++struct rfcomm_rpn {
++ u8 dlci;
++ u8 bit_rate;
++ u8 line_settings;
++ u8 flow_ctrl;
++ u8 xon_char;
++ u8 xoff_char;
++ u16 param_mask;
++} __attribute__ ((packed));
++
++struct rfcomm_rls {
++ u8 dlci;
++ u8 status;
++} __attribute__ ((packed));
++
++struct rfcomm_msc {
++ u8 dlci;
++ u8 v24_sig;
++} __attribute__ ((packed));
++
++/* ---- Core structures, flags etc ---- */
++
++struct rfcomm_session {
++ struct list_head list;
++ struct socket *sock;
++ unsigned long state;
++ unsigned long flags;
++ atomic_t refcnt;
++ int initiator;
++
++ /* Default DLC parameters */
++ uint mtu;
++ uint credits;
++
++ struct list_head dlcs;
++};
++
++struct rfcomm_dlc {
++ struct list_head list;
++ struct rfcomm_session *session;
++ struct sk_buff_head tx_queue;
++ struct timer_list timer;
++
++ spinlock_t lock;
++ unsigned long state;
++ unsigned long flags;
++ atomic_t refcnt;
++ u8 dlci;
++ u8 addr;
++ u8 priority;
++ u8 v24_sig;
++ u8 mscex;
++
++ uint mtu;
++ uint credits;
++ uint rx_credits;
++ uint tx_credits;
++
++ void *owner;
++
++ void (*data_ready)(struct rfcomm_dlc *d, struct sk_buff *skb);
++ void (*state_change)(struct rfcomm_dlc *d, int err);
++ void (*modem_status)(struct rfcomm_dlc *d, u8 v24_sig);
++};
++
++/* DLC and session flags */
++#define RFCOMM_RX_THROTTLED 0
++#define RFCOMM_TX_THROTTLED 1
++#define RFCOMM_MSC_PENDING 2
++#define RFCOMM_TIMED_OUT 3
++
++/* Scheduling flags and events */
++#define RFCOMM_SCHED_STATE 0
++#define RFCOMM_SCHED_RX 1
++#define RFCOMM_SCHED_TX 2
++#define RFCOMM_SCHED_TIMEO 3
++#define RFCOMM_SCHED_WAKEUP 31
++
++/* MSC exchange flags */
++#define RFCOMM_MSCEX_TX 1
++#define RFCOMM_MSCEX_RX 2
++#define RFCOMM_MSCEX_OK (RFCOMM_MSCEX_TX + RFCOMM_MSCEX_RX)
++
++extern struct task_struct *rfcomm_thread;
++extern unsigned long rfcomm_event;
++
++static inline void rfcomm_schedule(uint event)
++{
++ if (!rfcomm_thread)
++ return;
++ set_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event);
++ wake_up_process(rfcomm_thread);
++}
++
++extern struct semaphore rfcomm_sem;
++#define rfcomm_lock() down(&rfcomm_sem);
++#define rfcomm_unlock() up(&rfcomm_sem);
++
++/* ---- RFCOMM DLCs (channels) ---- */
++struct rfcomm_dlc *rfcomm_dlc_alloc(int prio);
++void rfcomm_dlc_free(struct rfcomm_dlc *d);
++int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel);
++int rfcomm_dlc_close(struct rfcomm_dlc *d, int reason);
++int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb);
++int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig);
++int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig);
++
++#define rfcomm_dlc_lock(d) spin_lock(&d->lock)
++#define rfcomm_dlc_unlock(d) spin_unlock(&d->lock)
++
++static inline void rfcomm_dlc_hold(struct rfcomm_dlc *d)
++{
++ atomic_inc(&d->refcnt);
++}
++
++static inline void rfcomm_dlc_put(struct rfcomm_dlc *d)
++{
++ if (atomic_dec_and_test(&d->refcnt))
++ rfcomm_dlc_free(d);
++}
++
++extern void FASTCALL(__rfcomm_dlc_throttle(struct rfcomm_dlc *d));
++extern void FASTCALL(__rfcomm_dlc_unthrottle(struct rfcomm_dlc *d));
++
++static inline void rfcomm_dlc_throttle(struct rfcomm_dlc *d)
++{
++ if (!test_and_set_bit(RFCOMM_RX_THROTTLED, &d->flags))
++ __rfcomm_dlc_throttle(d);
++}
++
++static inline void rfcomm_dlc_unthrottle(struct rfcomm_dlc *d)
++{
++ if (test_and_clear_bit(RFCOMM_RX_THROTTLED, &d->flags))
++ __rfcomm_dlc_unthrottle(d);
++}
++
++/* ---- RFCOMM sessions ---- */
++struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state);
++struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst);
++struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst, int *err);
++void rfcomm_session_del(struct rfcomm_session *s);
++void rfcomm_session_close(struct rfcomm_session *s, int err);
++void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst);
++
++static inline void rfcomm_session_hold(struct rfcomm_session *s)
++{
++ atomic_inc(&s->refcnt);
++}
++
++static inline void rfcomm_session_put(struct rfcomm_session *s)
++{
++ if (atomic_dec_and_test(&s->refcnt))
++ rfcomm_session_del(s);
++}
++
++/* ---- RFCOMM chechsum ---- */
++extern u8 rfcomm_crc_table[];
++
++/* ---- RFCOMM sockets ---- */
++struct sockaddr_rc {
++ sa_family_t rc_family;
++ bdaddr_t rc_bdaddr;
++ u8 rc_channel;
++};
++
++#define rfcomm_pi(sk) ((struct rfcomm_pinfo *) &sk->tp_pinfo)
++
++struct rfcomm_pinfo {
++ struct rfcomm_dlc *dlc;
++ u8 channel;
++};
++
++int rfcomm_init_sockets(void);
++void rfcomm_cleanup_sockets(void);
++
++int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc **d);
++
++/* ---- RFCOMM TTY ---- */
++#define RFCOMM_MAX_DEV 256
++
++#define RFCOMMCREATEDEV _IOW('R', 200, int)
++#define RFCOMMRELEASEDEV _IOW('R', 201, int)
++#define RFCOMMGETDEVLIST _IOR('R', 210, int)
++#define RFCOMMGETDEVINFO _IOR('R', 211, int)
++#define RFCOMMSTEALDLC _IOW('R', 220, int)
++
++#define RFCOMM_REUSE_DLC 0
++#define RFCOMM_RELEASE_ONHUP 1
++#define RFCOMM_HANGUP_NOW 2
++#define RFCOMM_TTY_ATTACHED 3
++
++struct rfcomm_dev_req {
++ s16 dev_id;
++ u32 flags;
++ bdaddr_t src;
++ bdaddr_t dst;
++ u8 channel;
++};
++
++struct rfcomm_dev_info {
++ s16 id;
++ u32 flags;
++ u16 state;
++ bdaddr_t src;
++ bdaddr_t dst;
++ u8 channel;
++};
++
++struct rfcomm_dev_list_req {
++ u16 dev_num;
++ struct rfcomm_dev_info dev_info[0];
++};
++
++int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, unsigned long arg);
++int rfcomm_init_ttys(void);
++void rfcomm_cleanup_ttys(void);
++
++#endif /* __RFCOMM_H */
+diff -urN linux-2.4.18/include/net/bluetooth/sco.h linux-2.4.18-mh9/include/net/bluetooth/sco.h
+--- linux-2.4.18/include/net/bluetooth/sco.h Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/include/net/bluetooth/sco.h Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,81 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: sco.h,v 1.1.1.1 2002/03/08 21:03:15 maxk Exp $
++ */
++
++#ifndef __SCO_H
++#define __SCO_H
++
++/* SCO defaults */
++#define SCO_DEFAULT_MTU 500
++#define SCO_DEFAULT_FLUSH_TO 0xFFFF
++
++#define SCO_CONN_TIMEOUT (HZ * 40)
++#define SCO_DISCONN_TIMEOUT (HZ * 2)
++#define SCO_CONN_IDLE_TIMEOUT (HZ * 60)
++
++/* SCO socket address */
++struct sockaddr_sco {
++ sa_family_t sco_family;
++ bdaddr_t sco_bdaddr;
++};
++
++/* set/get sockopt defines */
++#define SCO_OPTIONS 0x01
++struct sco_options {
++ __u16 mtu;
++};
++
++#define SCO_CONNINFO 0x02
++struct sco_conninfo {
++ __u16 hci_handle;
++};
++
++/* ---- SCO connections ---- */
++struct sco_conn {
++ struct hci_conn *hcon;
++
++ bdaddr_t *dst;
++ bdaddr_t *src;
++
++ spinlock_t lock;
++ struct sock *sk;
++
++ unsigned int mtu;
++};
++
++#define sco_conn_lock(c) spin_lock(&c->lock);
++#define sco_conn_unlock(c) spin_unlock(&c->lock);
++
++/* ----- SCO socket info ----- */
++#define sco_pi(sk) ((struct sco_pinfo *) &sk->tp_pinfo)
++
++struct sco_pinfo {
++ __u32 flags;
++ struct sco_conn *conn;
++};
++
++#endif /* __SCO_H */
+diff -urN linux-2.4.18/include/pcmcia/ciscode.h linux-2.4.18-mh9/include/pcmcia/ciscode.h
+--- linux-2.4.18/include/pcmcia/ciscode.h Fri Dec 21 18:42:04 2001
++++ linux-2.4.18-mh9/include/pcmcia/ciscode.h Mon Aug 25 18:38:12 2003
+@@ -1,5 +1,5 @@
+ /*
+- * ciscode.h 1.48 2001/08/24 12:16:12
++ * ciscode.h 1.57 2002/11/03 20:38:14
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+@@ -60,6 +60,10 @@
+ #define PRODID_INTEL_DUAL_RS232 0x0301
+ #define PRODID_INTEL_2PLUS 0x8422
+
++#define MANFID_KME 0x0032
++#define PRODID_KME_KXLC005_A 0x0704
++#define PRODID_KME_KXLC005_B 0x2904
++
+ #define MANFID_LINKSYS 0x0143
+ #define PRODID_LINKSYS_PCMLM28 0xc0ab
+ #define PRODID_LINKSYS_3400 0x3341
+@@ -94,6 +98,8 @@
+ #define PRODID_OSITECH_JACK_336 0x0007
+ #define PRODID_OSITECH_SEVEN 0x0008
+
++#define MANFID_OXSEMI 0x0279
++
+ #define MANFID_PIONEER 0x000b
+
+ #define MANFID_PSION 0x016c
+@@ -103,6 +109,7 @@
+ #define PRODID_QUATECH_SPP100 0x0003
+ #define PRODID_QUATECH_DUAL_RS232 0x0012
+ #define PRODID_QUATECH_DUAL_RS232_D1 0x0007
++#define PRODID_QUATECH_DUAL_RS232_D2 0x0052
+ #define PRODID_QUATECH_QUAD_RS232 0x001b
+ #define PRODID_QUATECH_DUAL_RS422 0x000e
+ #define PRODID_QUATECH_QUAD_RS422 0x0045
+@@ -120,8 +127,11 @@
+
+ #define MANFID_TDK 0x0105
+ #define PRODID_TDK_CF010 0x0900
++#define PRODID_TDK_GN3410 0x4815
+
+ #define MANFID_TOSHIBA 0x0098
++
++#define MANFID_UNGERMANN 0x02c0
+
+ #define MANFID_XIRCOM 0x0105
+
+diff -urN linux-2.4.18/lib/Config.in linux-2.4.18-mh9/lib/Config.in
+--- linux-2.4.18/lib/Config.in Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/lib/Config.in Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,12 @@
++#
++# Library configuration
++#
++mainmenu_option next_comment
++comment 'Library routines'
++
++if [ "$CONFIG_EXPERIMENTAL" = "y" -a \
++ "$CONFIG_HOTPLUG" = "y" ]; then
++ tristate 'Hotplug firmware loading support (EXPERIMENTAL)' CONFIG_FW_LOADER
++fi
++
++endmenu
+diff -urN linux-2.4.18/lib/Makefile linux-2.4.18-mh9/lib/Makefile
+--- linux-2.4.18/lib/Makefile Tue Sep 18 00:31:15 2001
++++ linux-2.4.18-mh9/lib/Makefile Mon Aug 25 18:38:12 2003
+@@ -8,12 +8,16 @@
+
+ L_TARGET := lib.a
+
+-export-objs := cmdline.o dec_and_lock.o rwsem-spinlock.o rwsem.o
++export-objs := cmdline.o dec_and_lock.o rwsem-spinlock.o rwsem.o \
++ firmware_class.o
+
+ obj-y := errno.o ctype.o string.o vsprintf.o brlock.o cmdline.o bust_spinlocks.o rbtree.o
+
++obj-$(CONFIG_FW_LOADER) += firmware_class.o
+ obj-$(CONFIG_RWSEM_GENERIC_SPINLOCK) += rwsem-spinlock.o
+ obj-$(CONFIG_RWSEM_XCHGADD_ALGORITHM) += rwsem.o
++
++include $(TOPDIR)/drivers/bluetooth/Makefile.lib
+
+ ifneq ($(CONFIG_HAVE_DEC_LOCK),y)
+ obj-y += dec_and_lock.o
+diff -urN linux-2.4.18/lib/firmware_class.c linux-2.4.18-mh9/lib/firmware_class.c
+--- linux-2.4.18/lib/firmware_class.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/lib/firmware_class.c Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,571 @@
++/*
++ * firmware_class.c - Multi purpose firmware loading support
++ *
++ * Copyright (c) 2003 Manuel Estrada Sainz <ranty@debian.org>
++ *
++ * Please see Documentation/firmware_class/ for more information.
++ *
++ */
++/*
++ * Based on kernel/kmod.c and drivers/usb/usb.c
++ */
++/*
++ kernel/kmod.c
++ Kirk Petersen
++
++ Reorganized not to be a daemon by Adam Richter, with guidance
++ from Greg Zornetzer.
++
++ Modified to avoid chroot and file sharing problems.
++ Mikael Pettersson
++
++ Limit the concurrent number of kmod modprobes to catch loops from
++ "modprobe needs a service that is in a module".
++ Keith Owens <kaos@ocs.com.au> December 1999
++
++ Unblock all signals when we exec a usermode process.
++ Shuu Yamaguchi <shuu@wondernetworkresources.com> December 2000
++*/
++/*
++ * drivers/usb/usb.c
++ *
++ * (C) Copyright Linus Torvalds 1999
++ * (C) Copyright Johannes Erdfelt 1999-2001
++ * (C) Copyright Andreas Gal 1999
++ * (C) Copyright Gregory P. Smith 1999
++ * (C) Copyright Deti Fliegl 1999 (new USB architecture)
++ * (C) Copyright Randy Dunlap 2000
++ * (C) Copyright David Brownell 2000 (kernel hotplug, usb_device_id)
++ * (C) Copyright Yggdrasil Computing, Inc. 2000
++ * (usb_device_id matching changes by Adam J. Richter)
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/string.h>
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/kmod.h>
++#include <linux/proc_fs.h>
++#include <linux/vmalloc.h>
++#include <asm/hardirq.h>
++
++#include "linux/firmware.h"
++
++MODULE_AUTHOR("Manuel Estrada Sainz <ranty@debian.org>");
++MODULE_DESCRIPTION("Multi purpose firmware loading support");
++MODULE_LICENSE("GPL");
++
++#define err(format, arg...) \
++ printk(KERN_ERR "%s:%s: " format "\n",__FILE__, __FUNCTION__ , ## arg)
++#define warn(format, arg...) \
++ printk(KERN_WARNING "%s:%s: " format "\n",__FILE__, __FUNCTION__ , ## arg)
++#define dbg(format, arg...) \
++ printk(KERN_DEBUG "%s:%s: " format "\n",__FILE__, __FUNCTION__ , ## arg)
++
++static int loading_timeout = 10; /* In seconds */
++static struct proc_dir_entry *proc_dir_timeout;
++static struct proc_dir_entry *proc_dir;
++
++#ifdef CONFIG_HOTPLUG
++
++static int
++call_helper(char *verb, const char *name, const char *device)
++{
++ char *argv[3], **envp, *buf, *scratch;
++ int i = 0;
++
++ int retval = 0;
++
++ if (!hotplug_path[0])
++ return -ENOENT;
++ if (in_interrupt()) {
++ err("in_interrupt");
++ return -EFAULT;
++ }
++ if (!current->fs->root) {
++ warn("call_policy %s -- no FS yet", verb);
++ return -EPERM;
++ }
++
++ if (!(envp = (char **) kmalloc(20 * sizeof (char *), GFP_KERNEL))) {
++ err("unable to allocate envp");
++ return -ENOMEM;
++ }
++ if (!(buf = kmalloc(256, GFP_KERNEL))) {
++ kfree(envp);
++ err("unable to allocate buf");
++ return -ENOMEM;
++ }
++
++ /* only one standardized param to hotplug command: type */
++ argv[0] = hotplug_path;
++ argv[1] = "firmware";
++ argv[2] = 0;
++
++ /* minimal command environment */
++ envp[i++] = "HOME=/";
++ envp[i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";
++
++#ifdef DEBUG
++ /* hint that policy agent should enter no-stdout debug mode */
++ envp[i++] = "DEBUG=kernel";
++#endif
++ scratch = buf;
++
++ if (device) {
++ envp[i++] = scratch;
++ scratch += snprintf(scratch, FIRMWARE_NAME_MAX+25,
++ "DEVPATH=/driver/firmware/%s", device) + 1;
++ }
++
++ envp[i++] = scratch;
++ scratch += sprintf(scratch, "ACTION=%s", verb) + 1;
++
++ envp[i++] = scratch;
++ scratch += snprintf(scratch, FIRMWARE_NAME_MAX,
++ "FIRMWARE=%s", name) + 1;
++
++ envp[i++] = 0;
++
++#ifdef DEBUG
++ dbg("firmware: %s %s %s", argv[0], argv[1], verb);
++#endif
++
++ retval = call_usermodehelper(argv[0], argv, envp);
++ if (retval) {
++ printk("call_usermodehelper return %d\n", retval);
++ }
++
++ kfree(buf);
++ kfree(envp);
++ return retval;
++}
++#else
++
++static inline int
++call_helper(char *verb, const char *name, const char *device)
++{
++ return -ENOENT;
++}
++
++#endif /* CONFIG_HOTPLUG */
++
++struct firmware_priv {
++ struct completion completion;
++ struct proc_dir_entry *proc_dir;
++ struct proc_dir_entry *attr_data;
++ struct proc_dir_entry *attr_loading;
++ struct firmware *fw;
++ int loading;
++ int abort;
++ int alloc_size;
++ struct timer_list timeout;
++};
++
++static int
++firmware_timeout_show(char *buf, char **start, off_t off,
++ int count, int *eof, void *data)
++{
++ return sprintf(buf, "%d\n", loading_timeout);
++}
++
++/**
++ * firmware_timeout_store:
++ * Description:
++ * Sets the number of seconds to wait for the firmware. Once
++ * this expires an error will be return to the driver and no
++ * firmware will be provided.
++ *
++ * Note: zero means 'wait for ever'
++ *
++ **/
++static int
++firmware_timeout_store(struct file *file, const char *buf,
++ unsigned long count, void *data)
++{
++ loading_timeout = simple_strtol(buf, NULL, 10);
++ return count;
++}
++
++static int
++firmware_loading_show(char *buf, char **start, off_t off,
++ int count, int *eof, void *data)
++{
++ struct firmware_priv *fw_priv = data;
++ return sprintf(buf, "%d\n", fw_priv->loading);
++}
++
++/**
++ * firmware_loading_store: - loading control file
++ * Description:
++ * The relevant values are:
++ *
++ * 1: Start a load, discarding any previous partial load.
++ * 0: Conclude the load and handle the data to the driver code.
++ * -1: Conclude the load with an error and discard any written data.
++ **/
++static int
++firmware_loading_store(struct file *file, const char *buf,
++ unsigned long count, void *data)
++{
++ struct firmware_priv *fw_priv = data;
++ int prev_loading = fw_priv->loading;
++
++ fw_priv->loading = simple_strtol(buf, NULL, 10);
++
++ switch (fw_priv->loading) {
++ case -1:
++ fw_priv->abort = 1;
++ wmb();
++ complete(&fw_priv->completion);
++ break;
++ case 1:
++ kfree(fw_priv->fw->data);
++ fw_priv->fw->data = NULL;
++ fw_priv->fw->size = 0;
++ fw_priv->alloc_size = 0;
++ break;
++ case 0:
++ if (prev_loading == 1)
++ complete(&fw_priv->completion);
++ break;
++ }
++
++ return count;
++}
++
++static int
++firmware_data_read(char *buffer, char **start, off_t offset,
++ int count, int *eof, void *data)
++{
++ struct firmware_priv *fw_priv = data;
++ struct firmware *fw = fw_priv->fw;
++
++ if (offset > fw->size)
++ return 0;
++ if (offset + count > fw->size)
++ count = fw->size - offset;
++
++ memcpy(buffer, fw->data + offset, count);
++ *start = (void *) ((long) count);
++ return count;
++}
++static int
++fw_realloc_buffer(struct firmware_priv *fw_priv, int min_size)
++{
++ u8 *new_data;
++ int new_size;
++
++ if (min_size <= fw_priv->alloc_size)
++ return 0;
++ if((min_size % PAGE_SIZE) == 0)
++ new_size = min_size;
++ else
++ new_size = (min_size + PAGE_SIZE) & PAGE_MASK;
++ new_data = vmalloc(new_size);
++ if (!new_data) {
++ printk(KERN_ERR "%s: unable to alloc buffer\n", __FUNCTION__);
++ /* Make sure that we don't keep incomplete data */
++ fw_priv->abort = 1;
++ return -ENOMEM;
++ }
++ fw_priv->alloc_size = new_size;
++ if (fw_priv->fw->data) {
++ memcpy(new_data, fw_priv->fw->data, fw_priv->fw->size);
++ vfree(fw_priv->fw->data);
++ }
++ fw_priv->fw->data = new_data;
++ BUG_ON(min_size > fw_priv->alloc_size);
++ return 0;
++}
++
++/**
++ * firmware_data_write:
++ *
++ * Description:
++ *
++ * Data written to the 'data' attribute will be later handled to
++ * the driver as a firmware image.
++ **/
++static int
++firmware_data_write(struct file *file, const char *buffer,
++ unsigned long count, void *data)
++{
++ struct firmware_priv *fw_priv = data;
++ struct firmware *fw = fw_priv->fw;
++ int offset = file->f_pos;
++ int retval;
++
++ retval = fw_realloc_buffer(fw_priv, offset + count);
++ if (retval) {
++ printk("%s: retval:%d\n", __FUNCTION__, retval);
++ return retval;
++ }
++
++ memcpy(fw->data + offset, buffer, count);
++
++ fw->size = max_t(size_t, offset + count, fw->size);
++ file->f_pos += count;
++ return count;
++}
++
++static void
++firmware_class_timeout(u_long data)
++{
++ struct firmware_priv *fw_priv = (struct firmware_priv *) data;
++ fw_priv->abort = 1;
++ wmb();
++ complete(&fw_priv->completion);
++}
++static int
++fw_setup_class_device(struct firmware_priv **fw_priv_p,
++ const char *fw_name, const char *device)
++{
++ int retval;
++ struct firmware_priv *fw_priv = kmalloc(sizeof (struct firmware_priv),
++ GFP_KERNEL);
++ *fw_priv_p = fw_priv;
++ if (!fw_priv) {
++ retval = -ENOMEM;
++ goto out;
++ }
++ memset(fw_priv, 0, sizeof (*fw_priv));
++
++ init_completion(&fw_priv->completion);
++
++ fw_priv->timeout.function = firmware_class_timeout;
++ fw_priv->timeout.data = (u_long) fw_priv;
++ init_timer(&fw_priv->timeout);
++
++ retval = -EAGAIN;
++ fw_priv->proc_dir = create_proc_entry(device, 0644 | S_IFDIR, proc_dir);
++ if (!fw_priv->proc_dir)
++ goto err_free_fw_priv;
++
++ fw_priv->attr_data = create_proc_entry("data", 0644 | S_IFREG,
++ fw_priv->proc_dir);
++ if (!fw_priv->attr_data)
++ goto err_remove_dir;
++
++ fw_priv->attr_data->read_proc = firmware_data_read;
++ fw_priv->attr_data->write_proc = firmware_data_write;
++ fw_priv->attr_data->data = fw_priv;
++
++ fw_priv->attr_loading = create_proc_entry("loading", 0644 | S_IFREG,
++ fw_priv->proc_dir);
++ if (!fw_priv->attr_loading)
++ goto err_remove_data;
++
++ fw_priv->attr_loading->read_proc = firmware_loading_show;
++ fw_priv->attr_loading->write_proc = firmware_loading_store;
++ fw_priv->attr_loading->data = fw_priv;
++
++ retval = 0;
++ fw_priv->fw = kmalloc(sizeof (struct firmware), GFP_KERNEL);
++ if (!fw_priv->fw) {
++ printk(KERN_ERR "%s: kmalloc(struct firmware) failed\n",
++ __FUNCTION__);
++ retval = -ENOMEM;
++ goto err_remove_loading;
++ }
++ memset(fw_priv->fw, 0, sizeof (*fw_priv->fw));
++
++ goto out;
++
++err_remove_loading:
++ remove_proc_entry("loading", fw_priv->proc_dir);
++err_remove_data:
++ remove_proc_entry("data", fw_priv->proc_dir);
++err_remove_dir:
++ remove_proc_entry(device, proc_dir);
++err_free_fw_priv:
++ kfree(fw_priv);
++out:
++ return retval;
++}
++static void
++fw_remove_class_device(struct firmware_priv *fw_priv)
++{
++ remove_proc_entry("loading", fw_priv->proc_dir);
++ remove_proc_entry("data", fw_priv->proc_dir);
++ remove_proc_entry(fw_priv->proc_dir->name, proc_dir);
++}
++
++/**
++ * request_firmware: - request firmware to hotplug and wait for it
++ * Description:
++ * @firmware will be used to return a firmware image by the name
++ * of @name for device @device.
++ *
++ * Should be called from user context where sleeping is allowed.
++ *
++ * @name will be use as $FIRMWARE in the hotplug environment and
++ * should be distinctive enough not to be confused with any other
++ * firmware image for this or any other device.
++ **/
++int
++request_firmware(const struct firmware **firmware, const char *name,
++ const char *device)
++{
++ struct firmware_priv *fw_priv;
++ int retval;
++
++ if (!firmware) {
++ retval = -EINVAL;
++ goto out;
++ }
++ *firmware = NULL;
++
++ retval = fw_setup_class_device(&fw_priv, name, device);
++ if (retval)
++ goto out;
++
++ retval = call_helper("add", name, device);
++ if (retval)
++ goto out;
++ if (loading_timeout) {
++ fw_priv->timeout.expires = jiffies + loading_timeout * HZ;
++ add_timer(&fw_priv->timeout);
++ }
++
++ wait_for_completion(&fw_priv->completion);
++
++ del_timer(&fw_priv->timeout);
++ fw_remove_class_device(fw_priv);
++
++ if (fw_priv->fw->size && !fw_priv->abort) {
++ *firmware = fw_priv->fw;
++ } else {
++ retval = -ENOENT;
++ vfree(fw_priv->fw->data);
++ kfree(fw_priv->fw);
++ }
++out:
++ kfree(fw_priv);
++ return retval;
++}
++
++void
++release_firmware(const struct firmware *fw)
++{
++ if (fw) {
++ vfree(fw->data);
++ kfree(fw);
++ }
++}
++
++/**
++ * register_firmware: - provide a firmware image for later usage
++ *
++ * Description:
++ * Make sure that @data will be available by requesting firmware @name.
++ *
++ * Note: This will not be possible until some kind of persistence
++ * is available.
++ **/
++void
++register_firmware(const char *name, const u8 *data, size_t size)
++{
++ /* This is meaningless without firmware caching, so until we
++ * decide if firmware caching is reasonable just leave it as a
++ * noop */
++}
++
++/* Async support */
++struct firmware_work {
++ struct tq_struct work;
++ struct module *module;
++ const char *name;
++ const char *device;
++ void *context;
++ void (*cont)(const struct firmware *fw, void *context);
++};
++
++static void
++request_firmware_work_func(void *arg)
++{
++ struct firmware_work *fw_work = arg;
++ const struct firmware *fw;
++ if (!arg)
++ return;
++ request_firmware(&fw, fw_work->name, fw_work->device);
++ fw_work->cont(fw, fw_work->context);
++ release_firmware(fw);
++ __MOD_DEC_USE_COUNT(fw_work->module);
++ kfree(fw_work);
++}
++
++/**
++ * request_firmware_nowait:
++ *
++ * Description:
++ * Asynchronous variant of request_firmware() for contexts where
++ * it is not possible to sleep.
++ *
++ * @cont will be called asynchronously when the firmware request is over.
++ *
++ * @context will be passed over to @cont.
++ *
++ * @fw may be %NULL if firmware request fails.
++ *
++ **/
++int
++request_firmware_nowait(
++ struct module *module,
++ const char *name, const char *device, void *context,
++ void (*cont)(const struct firmware *fw, void *context))
++{
++ struct firmware_work *fw_work = kmalloc(sizeof (struct firmware_work),
++ GFP_ATOMIC);
++ if (!fw_work)
++ return -ENOMEM;
++ if (!try_inc_mod_count(module)) {
++ kfree(fw_work);
++ return -EFAULT;
++ }
++
++ *fw_work = (struct firmware_work) {
++ .module = module,
++ .name = name,
++ .device = device,
++ .context = context,
++ .cont = cont,
++ };
++ INIT_TQUEUE(&fw_work->work, request_firmware_work_func, fw_work);
++
++ schedule_task(&fw_work->work);
++ return 0;
++}
++
++static int __init
++firmware_class_init(void)
++{
++ proc_dir = create_proc_entry("driver/firmware", 0755 | S_IFDIR, NULL);
++ if (!proc_dir)
++ return -EAGAIN;
++ proc_dir_timeout = create_proc_entry("timeout",
++ 0644 | S_IFREG, proc_dir);
++ if (!proc_dir_timeout) {
++ remove_proc_entry("driver/firmware", NULL);
++ return -EAGAIN;
++ }
++ proc_dir_timeout->read_proc = firmware_timeout_show;
++ proc_dir_timeout->write_proc = firmware_timeout_store;
++ return 0;
++}
++static void __exit
++firmware_class_exit(void)
++{
++ remove_proc_entry("timeout", proc_dir);
++ remove_proc_entry("driver/firmware", NULL);
++}
++
++module_init(firmware_class_init);
++module_exit(firmware_class_exit);
++
++EXPORT_SYMBOL(release_firmware);
++EXPORT_SYMBOL(request_firmware);
++EXPORT_SYMBOL(request_firmware_nowait);
++EXPORT_SYMBOL(register_firmware);
+diff -urN linux-2.4.18/net/bluetooth/Config.in linux-2.4.18-mh9/net/bluetooth/Config.in
+--- linux-2.4.18/net/bluetooth/Config.in Tue Jun 12 04:15:27 2001
++++ linux-2.4.18-mh9/net/bluetooth/Config.in Mon Aug 25 18:38:12 2003
+@@ -1,16 +1,22 @@
+ #
+-# Bluetooth configuration
++# Bluetooth subsystem configuration
+ #
+
+ if [ "$CONFIG_NET" != "n" ]; then
++
+ mainmenu_option next_comment
+ comment 'Bluetooth support'
+ dep_tristate 'Bluetooth subsystem support' CONFIG_BLUEZ $CONFIG_NET
+
+ if [ "$CONFIG_BLUEZ" != "n" ]; then
+ dep_tristate 'L2CAP protocol support' CONFIG_BLUEZ_L2CAP $CONFIG_BLUEZ
++ dep_tristate 'SCO links support' CONFIG_BLUEZ_SCO $CONFIG_BLUEZ
++ source net/bluetooth/rfcomm/Config.in
++ source net/bluetooth/bnep/Config.in
++ source net/bluetooth/cmtp/Config.in
+ source drivers/bluetooth/Config.in
+ fi
++
+ endmenu
+ fi
+
+diff -urN linux-2.4.18/net/bluetooth/Makefile linux-2.4.18-mh9/net/bluetooth/Makefile
+--- linux-2.4.18/net/bluetooth/Makefile Tue Jun 12 04:15:27 2001
++++ linux-2.4.18-mh9/net/bluetooth/Makefile Mon Aug 25 18:38:12 2003
+@@ -1,20 +1,31 @@
+ #
+-# Makefile for the Bluetooth subsystem
++# Makefile for the Linux Bluetooth subsystem
+ #
+-O_TARGET := bluetooth.o
+
+-list-multi := hci.o l2cap.o
+-export-objs := syms.o
+-hci-objs := af_bluetooth.o hci_core.o hci_sock.o lib.o syms.o
+-l2cap-objs := l2cap_core.o l2cap_proc.o
++O_TARGET := bluetooth.o
+
+-obj-$(CONFIG_BLUEZ) += hci.o
++list-multi := bluez.o
++export-objs := syms.o l2cap.o
++
++bluez-objs := af_bluetooth.o hci_core.o hci_conn.o hci_event.o hci_sock.o lib.o syms.o
++
++obj-$(CONFIG_BLUEZ) += bluez.o
+ obj-$(CONFIG_BLUEZ_L2CAP) += l2cap.o
++obj-$(CONFIG_BLUEZ_SCO) += sco.o
+
+-include $(TOPDIR)/Rules.make
++subdir-$(CONFIG_BLUEZ_RFCOMM) += rfcomm
++subdir-$(CONFIG_BLUEZ_BNEP) += bnep
++subdir-$(CONFIG_BLUEZ_CMTP) += cmtp
+
+-hci.o: $(hci-objs)
+- $(LD) -r -o $@ $(hci-objs)
++ifeq ($(CONFIG_BLUEZ_RFCOMM),y)
++obj-y += rfcomm/rfcomm.o
++endif
++
++ifeq ($(CONFIG_BLUEZ_BNEP),y)
++obj-y += bnep/bnep.o
++endif
++
++include $(TOPDIR)/Rules.make
+
+-l2cap.o: $(l2cap-objs)
+- $(LD) -r -o $@ $(l2cap-objs)
++bluez.o: $(bluez-objs)
++ $(LD) -r -o $@ $(bluez-objs)
+diff -urN linux-2.4.18/net/bluetooth/af_bluetooth.c linux-2.4.18-mh9/net/bluetooth/af_bluetooth.c
+--- linux-2.4.18/net/bluetooth/af_bluetooth.c Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/net/bluetooth/af_bluetooth.c Mon Aug 25 18:38:12 2003
+@@ -25,14 +25,15 @@
+ /*
+ * BlueZ Bluetooth address family and sockets.
+ *
+- * $Id: af_bluetooth.c,v 1.4 2001/07/05 18:42:44 maxk Exp $
++ * $Id: af_bluetooth.c,v 1.8 2002/07/22 20:32:54 maxk Exp $
+ */
+-#define VERSION "1.1"
++#define VERSION "2.4"
+
+ #include <linux/config.h>
+ #include <linux/module.h>
+
+ #include <linux/types.h>
++#include <linux/list.h>
+ #include <linux/errno.h>
+ #include <linux/kernel.h>
+ #include <linux/major.h>
+@@ -40,6 +41,7 @@
+ #include <linux/slab.h>
+ #include <linux/skbuff.h>
+ #include <linux/init.h>
++#include <linux/poll.h>
+ #include <linux/proc_fs.h>
+ #include <net/sock.h>
+
+@@ -48,70 +50,79 @@
+ #endif
+
+ #include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
++
++#ifndef AF_BLUETOOTH_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
+
+ /* Bluetooth sockets */
+-static struct net_proto_family *bluez_sock[BLUEZ_MAX_PROTO];
++#define BLUEZ_MAX_PROTO 6
++static struct net_proto_family *bluez_proto[BLUEZ_MAX_PROTO];
+
+ int bluez_sock_register(int proto, struct net_proto_family *ops)
+ {
+- if (proto > BLUEZ_MAX_PROTO)
++ if (proto >= BLUEZ_MAX_PROTO)
+ return -EINVAL;
+
+- if (bluez_sock[proto])
++ if (bluez_proto[proto])
+ return -EEXIST;
+
+- bluez_sock[proto] = ops;
++ bluez_proto[proto] = ops;
+ return 0;
+ }
+
+ int bluez_sock_unregister(int proto)
+ {
+- if (proto > BLUEZ_MAX_PROTO)
++ if (proto >= BLUEZ_MAX_PROTO)
+ return -EINVAL;
+
+- if (!bluez_sock[proto])
++ if (!bluez_proto[proto])
+ return -ENOENT;
+
+- bluez_sock[proto] = NULL;
++ bluez_proto[proto] = NULL;
+ return 0;
+ }
+
+ static int bluez_sock_create(struct socket *sock, int proto)
+ {
+- if (proto > BLUEZ_MAX_PROTO)
++ if (proto >= BLUEZ_MAX_PROTO)
+ return -EINVAL;
+
+ #if defined(CONFIG_KMOD)
+- if (!bluez_sock[proto]) {
++ if (!bluez_proto[proto]) {
+ char module_name[30];
+ sprintf(module_name, "bt-proto-%d", proto);
+ request_module(module_name);
+ }
+ #endif
+
+- if (!bluez_sock[proto])
++ if (!bluez_proto[proto])
+ return -ENOENT;
+
+- return bluez_sock[proto]->create(sock, proto);
++ return bluez_proto[proto]->create(sock, proto);
++}
++
++void bluez_sock_init(struct socket *sock, struct sock *sk)
++{
++ sock_init_data(sock, sk);
++ INIT_LIST_HEAD(&bluez_pi(sk)->accept_q);
+ }
+
+ void bluez_sock_link(struct bluez_sock_list *l, struct sock *sk)
+ {
+- write_lock(&l->lock);
+-
++ write_lock_bh(&l->lock);
+ sk->next = l->head;
+ l->head = sk;
+ sock_hold(sk);
+-
+- write_unlock(&l->lock);
++ write_unlock_bh(&l->lock);
+ }
+
+ void bluez_sock_unlink(struct bluez_sock_list *l, struct sock *sk)
+ {
+ struct sock **skp;
+
+- write_lock(&l->lock);
++ write_lock_bh(&l->lock);
+ for (skp = &l->head; *skp; skp = &((*skp)->next)) {
+ if (*skp == sk) {
+ *skp = sk->next;
+@@ -119,7 +130,162 @@
+ break;
+ }
+ }
+- write_unlock(&l->lock);
++ write_unlock_bh(&l->lock);
++}
++
++void bluez_accept_enqueue(struct sock *parent, struct sock *sk)
++{
++ BT_DBG("parent %p, sk %p", parent, sk);
++
++ sock_hold(sk);
++ list_add_tail(&bluez_pi(sk)->accept_q, &bluez_pi(parent)->accept_q);
++ bluez_pi(sk)->parent = parent;
++ parent->ack_backlog++;
++}
++
++static void bluez_accept_unlink(struct sock *sk)
++{
++ BT_DBG("sk %p state %d", sk, sk->state);
++
++ list_del_init(&bluez_pi(sk)->accept_q);
++ bluez_pi(sk)->parent->ack_backlog--;
++ bluez_pi(sk)->parent = NULL;
++ sock_put(sk);
++}
++
++struct sock *bluez_accept_dequeue(struct sock *parent, struct socket *newsock)
++{
++ struct list_head *p, *n;
++ struct bluez_pinfo *pi;
++ struct sock *sk;
++
++ BT_DBG("parent %p", parent);
++
++ list_for_each_safe(p, n, &bluez_pi(parent)->accept_q) {
++ pi = list_entry(p, struct bluez_pinfo, accept_q);
++ sk = bluez_sk(pi);
++
++ lock_sock(sk);
++ if (sk->state == BT_CLOSED) {
++ release_sock(sk);
++ bluez_accept_unlink(sk);
++ continue;
++ }
++
++ if (sk->state == BT_CONNECTED || !newsock) {
++ bluez_accept_unlink(sk);
++ if (newsock)
++ sock_graft(sk, newsock);
++ release_sock(sk);
++ return sk;
++ }
++ release_sock(sk);
++ }
++ return NULL;
++}
++
++int bluez_sock_recvmsg(struct socket *sock, struct msghdr *msg, int len, int flags, struct scm_cookie *scm)
++{
++ int noblock = flags & MSG_DONTWAIT;
++ struct sock *sk = sock->sk;
++ struct sk_buff *skb;
++ int copied, err;
++
++ BT_DBG("sock %p sk %p len %d", sock, sk, len);
++
++ if (flags & (MSG_OOB))
++ return -EOPNOTSUPP;
++
++ if (!(skb = skb_recv_datagram(sk, flags, noblock, &err))) {
++ if (sk->shutdown & RCV_SHUTDOWN)
++ return 0;
++ return err;
++ }
++
++ msg->msg_namelen = 0;
++
++ copied = skb->len;
++ if (len < copied) {
++ msg->msg_flags |= MSG_TRUNC;
++ copied = len;
++ }
++
++ skb->h.raw = skb->data;
++ err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
++
++ skb_free_datagram(sk, skb);
++
++ return err ? : copied;
++}
++
++unsigned int bluez_sock_poll(struct file * file, struct socket *sock, poll_table *wait)
++{
++ struct sock *sk = sock->sk;
++ unsigned int mask;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ poll_wait(file, sk->sleep, wait);
++ mask = 0;
++
++ if (sk->err || !skb_queue_empty(&sk->error_queue))
++ mask |= POLLERR;
++
++ if (sk->shutdown == SHUTDOWN_MASK)
++ mask |= POLLHUP;
++
++ if (!skb_queue_empty(&sk->receive_queue) ||
++ !list_empty(&bluez_pi(sk)->accept_q) ||
++ (sk->shutdown & RCV_SHUTDOWN))
++ mask |= POLLIN | POLLRDNORM;
++
++ if (sk->state == BT_CLOSED)
++ mask |= POLLHUP;
++
++ if (sk->state == BT_CONNECT || sk->state == BT_CONNECT2)
++ return mask;
++
++ if (sock_writeable(sk))
++ mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
++ else
++ set_bit(SOCK_ASYNC_NOSPACE, &sk->socket->flags);
++
++ return mask;
++}
++
++int bluez_sock_wait_state(struct sock *sk, int state, unsigned long timeo)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ int err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ add_wait_queue(sk->sleep, &wait);
++ while (sk->state != state) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (!timeo) {
++ err = -EAGAIN;
++ break;
++ }
++
++ if (signal_pending(current)) {
++ err = sock_intr_errno(timeo);
++ break;
++ }
++
++ release_sock(sk);
++ timeo = schedule_timeout(timeo);
++ lock_sock(sk);
++
++ if (sk->err) {
++ err = sock_error(sk);
++ break;
++ }
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++ return err;
+ }
+
+ struct net_proto_family bluez_sock_family_ops =
+@@ -129,9 +295,9 @@
+
+ int bluez_init(void)
+ {
+- INF("BlueZ HCI Core ver %s Copyright (C) 2000,2001 Qualcomm Inc",
++ BT_INFO("BlueZ Core ver %s Copyright (C) 2000,2001 Qualcomm Inc",
+ VERSION);
+- INF("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
++ BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
+
+ proc_mkdir("bluetooth", NULL);
+
+@@ -164,5 +330,6 @@
+ module_exit(bluez_cleanup);
+
+ MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
+-MODULE_DESCRIPTION("BlueZ HCI Core ver " VERSION);
++MODULE_DESCRIPTION("BlueZ Core ver " VERSION);
++MODULE_LICENSE("GPL");
+ #endif
+diff -urN linux-2.4.18/net/bluetooth/bnep/Config.in linux-2.4.18-mh9/net/bluetooth/bnep/Config.in
+--- linux-2.4.18/net/bluetooth/bnep/Config.in Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/bnep/Config.in Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,11 @@
++#
++# Bluetooth BNEP layer configuration
++#
++
++dep_tristate 'BNEP protocol support' CONFIG_BLUEZ_BNEP $CONFIG_BLUEZ_L2CAP
++
++if [ "$CONFIG_BLUEZ_BNEP" != "n" ]; then
++ bool ' Multicast filter support' CONFIG_BLUEZ_BNEP_MC_FILTER
++ bool ' Protocol filter support' CONFIG_BLUEZ_BNEP_PROTO_FILTER
++fi
++
+diff -urN linux-2.4.18/net/bluetooth/bnep/Makefile linux-2.4.18-mh9/net/bluetooth/bnep/Makefile
+--- linux-2.4.18/net/bluetooth/bnep/Makefile Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/bnep/Makefile Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,10 @@
++#
++# Makefile for the Linux Bluetooth BNEP layer
++#
++
++O_TARGET := bnep.o
++
++obj-y := core.o sock.o netdev.o crc32.o
++obj-m += $(O_TARGET)
++
++include $(TOPDIR)/Rules.make
+diff -urN linux-2.4.18/net/bluetooth/bnep/bnep.h linux-2.4.18-mh9/net/bluetooth/bnep/bnep.h
+--- linux-2.4.18/net/bluetooth/bnep/bnep.h Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/bnep/bnep.h Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,185 @@
++/*
++ BNEP protocol definition for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++*/
++
++/*
++ * $Id: bnep2.h,v 1.9 2002/07/14 07:09:19 maxk Exp $
++ */
++
++#ifndef _BNEP_H
++#define _BNEP_H
++
++#include <linux/types.h>
++#include <net/bluetooth/bluetooth.h>
++
++#include "crc32.h"
++
++// Limits
++#define BNEP_MAX_PROTO_FILTERS 5
++#define BNEP_MAX_MULTICAST_FILTERS 20
++
++// UUIDs
++#define BNEP_BASE_UUID 0x0000000000001000800000805F9B34FB
++#define BNEP_UUID16 0x02
++#define BNEP_UUID32 0x04
++#define BNEP_UUID128 0x16
++
++#define BNEP_SVC_PANU 0x1115
++#define BNEP_SVC_NAP 0x1116
++#define BNEP_SVC_GN 0x1117
++
++// Packet types
++#define BNEP_GENERAL 0x00
++#define BNEP_CONTROL 0x01
++#define BNEP_COMPRESSED 0x02
++#define BNEP_COMPRESSED_SRC_ONLY 0x03
++#define BNEP_COMPRESSED_DST_ONLY 0x04
++
++// Control types
++#define BNEP_CMD_NOT_UNDERSTOOD 0x00
++#define BNEP_SETUP_CONN_REQ 0x01
++#define BNEP_SETUP_CONN_RSP 0x02
++#define BNEP_FILTER_NET_TYPE_SET 0x03
++#define BNEP_FILTER_NET_TYPE_RSP 0x04
++#define BNEP_FILTER_MULTI_ADDR_SET 0x05
++#define BNEP_FILTER_MULTI_ADDR_RSP 0x06
++
++// Extension types
++#define BNEP_EXT_CONTROL 0x00
++
++// Response messages
++#define BNEP_SUCCESS 0x00
++
++#define BNEP_CONN_INVALID_DST 0x01
++#define BNEP_CONN_INVALID_SRC 0x02
++#define BNEP_CONN_INVALID_SVC 0x03
++#define BNEP_CONN_NOT_ALLOWED 0x04
++
++#define BNEP_FILTER_UNSUPPORTED_REQ 0x01
++#define BNEP_FILTER_INVALID_RANGE 0x02
++#define BNEP_FILTER_INVALID_MCADDR 0x02
++#define BNEP_FILTER_LIMIT_REACHED 0x03
++#define BNEP_FILTER_DENIED_SECURITY 0x04
++
++// L2CAP settings
++#define BNEP_MTU 1691
++#define BNEP_PSM 0x0f
++#define BNEP_FLUSH_TO 0xffff
++#define BNEP_CONNECT_TO 15
++#define BNEP_FILTER_TO 15
++
++// Headers
++#define BNEP_TYPE_MASK 0x7f
++#define BNEP_EXT_HEADER 0x80
++
++struct bnep_setup_conn_req {
++ __u8 type;
++ __u8 ctrl;
++ __u8 uuid_size;
++ __u8 service[0];
++} __attribute__((packed));
++
++struct bnep_set_filter_req {
++ __u8 type;
++ __u8 ctrl;
++ __u16 len;
++ __u8 list[0];
++} __attribute__((packed));
++
++struct bnep_control_rsp {
++ __u8 type;
++ __u8 ctrl;
++ __u16 resp;
++} __attribute__((packed));
++
++struct bnep_ext_hdr {
++ __u8 type;
++ __u8 len;
++ __u8 data[0];
++} __attribute__((packed));
++
++/* BNEP ioctl defines */
++#define BNEPCONNADD _IOW('B', 200, int)
++#define BNEPCONNDEL _IOW('B', 201, int)
++#define BNEPGETCONNLIST _IOR('B', 210, int)
++#define BNEPGETCONNINFO _IOR('B', 211, int)
++
++struct bnep_connadd_req {
++ int sock; // Connected socket
++ __u32 flags;
++ __u16 role;
++ char device[16]; // Name of the Ethernet device
++};
++
++struct bnep_conndel_req {
++ __u32 flags;
++ __u8 dst[ETH_ALEN];
++};
++
++struct bnep_conninfo {
++ __u32 flags;
++ __u16 role;
++ __u16 state;
++ __u8 dst[ETH_ALEN];
++ char device[16];
++};
++
++struct bnep_connlist_req {
++ __u32 cnum;
++ struct bnep_conninfo *ci;
++};
++
++struct bnep_proto_filter {
++ __u16 start;
++ __u16 end;
++};
++
++int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock);
++int bnep_del_connection(struct bnep_conndel_req *req);
++int bnep_get_connlist(struct bnep_connlist_req *req);
++int bnep_get_conninfo(struct bnep_conninfo *ci);
++
++// BNEP sessions
++struct bnep_session {
++ struct list_head list;
++
++ unsigned int role;
++ unsigned long state;
++ unsigned long flags;
++ atomic_t killed;
++
++ struct ethhdr eh;
++ struct msghdr msg;
++
++ struct bnep_proto_filter proto_filter[BNEP_MAX_PROTO_FILTERS];
++ u64 mc_filter;
++
++ struct socket *sock;
++ struct net_device dev;
++ struct net_device_stats stats;
++};
++
++int bnep_net_init(struct net_device *dev);
++int bnep_sock_init(void);
++int bnep_sock_cleanup(void);
++
++static inline int bnep_mc_hash(__u8 *addr)
++{
++ return (bnep_crc32(~0, addr, ETH_ALEN) >> 26);
++}
++
++#endif
+diff -urN linux-2.4.18/net/bluetooth/bnep/core.c linux-2.4.18-mh9/net/bluetooth/bnep/core.c
+--- linux-2.4.18/net/bluetooth/bnep/core.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/bnep/core.c Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,708 @@
++/*
++ BNEP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2001-2002 Inventel Systemes
++ Written 2001-2002 by
++ Clément Moreau <clement.moreau@inventel.fr>
++ David Libault <david.libault@inventel.fr>
++
++ Copyright (C) 2002 Maxim Krasnyanskiy <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: core.c,v 1.18 2002/07/14 07:09:19 maxk Exp $
++ */
++
++#define __KERNEL_SYSCALLS__
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/signal.h>
++#include <linux/init.h>
++#include <linux/wait.h>
++#include <linux/errno.h>
++#include <linux/smp_lock.h>
++#include <linux/net.h>
++#include <net/sock.h>
++
++#include <linux/socket.h>
++#include <linux/file.h>
++
++#include <linux/netdevice.h>
++#include <linux/etherdevice.h>
++#include <linux/skbuff.h>
++
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/l2cap.h>
++
++#include "bnep.h"
++
++#ifndef CONFIG_BLUEZ_BNEP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define VERSION "1.1"
++
++static LIST_HEAD(bnep_session_list);
++static DECLARE_RWSEM(bnep_session_sem);
++
++static struct bnep_session *__bnep_get_session(u8 *dst)
++{
++ struct bnep_session *s;
++ struct list_head *p;
++
++ BT_DBG("");
++
++ list_for_each(p, &bnep_session_list) {
++ s = list_entry(p, struct bnep_session, list);
++ if (!memcmp(dst, s->eh.h_source, ETH_ALEN))
++ return s;
++ }
++ return NULL;
++}
++
++static void __bnep_link_session(struct bnep_session *s)
++{
++ MOD_INC_USE_COUNT;
++ list_add(&s->list, &bnep_session_list);
++}
++
++static void __bnep_unlink_session(struct bnep_session *s)
++{
++ list_del(&s->list);
++ MOD_DEC_USE_COUNT;
++}
++
++static int bnep_send(struct bnep_session *s, void *data, size_t len)
++{
++ struct socket *sock = s->sock;
++ struct iovec iv = { data, len };
++ s->msg.msg_iov = &iv;
++ s->msg.msg_iovlen = 1;
++ return sock->ops->sendmsg(sock, &s->msg, len, NULL);
++}
++
++static int bnep_send_rsp(struct bnep_session *s, u8 ctrl, u16 resp)
++{
++ struct bnep_control_rsp rsp;
++ rsp.type = BNEP_CONTROL;
++ rsp.ctrl = ctrl;
++ rsp.resp = htons(resp);
++ return bnep_send(s, &rsp, sizeof(rsp));
++}
++
++static int bnep_ctrl_set_netfilter(struct bnep_session *s, u16 *data, int len)
++{
++ int n;
++
++ if (len < 2)
++ return -EILSEQ;
++
++ n = ntohs(get_unaligned(data));
++ data++; len -= 2;
++
++ if (len < n)
++ return -EILSEQ;
++
++ BT_DBG("filter len %d", n);
++
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
++ n /= 4;
++ if (n <= BNEP_MAX_PROTO_FILTERS) {
++ struct bnep_proto_filter *f = s->proto_filter;
++ int i;
++
++ for (i = 0; i < n; i++) {
++ f[i].start = get_unaligned(data++);
++ f[i].end = get_unaligned(data++);
++
++ BT_DBG("proto filter start %d end %d",
++ f[i].start, f[i].end);
++ }
++ if (i < BNEP_MAX_PROTO_FILTERS)
++ memset(f + i, 0, sizeof(*f));
++
++ bnep_send_rsp(s, BNEP_FILTER_NET_TYPE_RSP, BNEP_SUCCESS);
++ } else {
++ bnep_send_rsp(s, BNEP_FILTER_NET_TYPE_RSP, BNEP_FILTER_LIMIT_REACHED);
++ }
++#else
++ bnep_send_rsp(s, BNEP_FILTER_NET_TYPE_RSP, BNEP_FILTER_UNSUPPORTED_REQ);
++#endif
++ return 0;
++}
++
++static int bnep_ctrl_set_mcfilter(struct bnep_session *s, u8 *data, int len)
++{
++ int n;
++
++ if (len < 2)
++ return -EILSEQ;
++
++ n = ntohs(get_unaligned((u16 *) data));
++ data += 2; len -= 2;
++
++ if (len < n)
++ return -EILSEQ;
++
++ BT_DBG("filter len %d", n);
++
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
++ n /= (ETH_ALEN * 2);
++
++ if (n > 0) {
++ s->mc_filter = 0;
++
++ /* Always send broadcast */
++ set_bit(bnep_mc_hash(s->dev.broadcast), &s->mc_filter);
++
++ /* Add address ranges to the multicast hash */
++ for (; n > 0; n--) {
++ u8 a1[6], *a2;
++
++ memcpy(a1, data, ETH_ALEN); data += ETH_ALEN;
++ a2 = data; data += ETH_ALEN;
++
++ BT_DBG("mc filter %s -> %s",
++ batostr((void *) a1), batostr((void *) a2));
++
++ #define INCA(a) { int i = 5; while (i >=0 && ++a[i--] == 0); }
++
++ /* Iterate from a1 to a2 */
++ set_bit(bnep_mc_hash(a1), &s->mc_filter);
++ while (memcmp(a1, a2, 6) < 0 && s->mc_filter != ~0LL) {
++ INCA(a1);
++ set_bit(bnep_mc_hash(a1), &s->mc_filter);
++ }
++ }
++ }
++
++ BT_DBG("mc filter hash 0x%llx", s->mc_filter);
++
++ bnep_send_rsp(s, BNEP_FILTER_MULTI_ADDR_RSP, BNEP_SUCCESS);
++#else
++ bnep_send_rsp(s, BNEP_FILTER_MULTI_ADDR_RSP, BNEP_FILTER_UNSUPPORTED_REQ);
++#endif
++ return 0;
++}
++
++static int bnep_rx_control(struct bnep_session *s, void *data, int len)
++{
++ u8 cmd = *(u8 *)data;
++ int err = 0;
++
++ data++; len--;
++
++ switch (cmd) {
++ case BNEP_CMD_NOT_UNDERSTOOD:
++ case BNEP_SETUP_CONN_REQ:
++ case BNEP_SETUP_CONN_RSP:
++ case BNEP_FILTER_NET_TYPE_RSP:
++ case BNEP_FILTER_MULTI_ADDR_RSP:
++ /* Ignore these for now */
++ break;
++
++ case BNEP_FILTER_NET_TYPE_SET:
++ err = bnep_ctrl_set_netfilter(s, data, len);
++ break;
++
++ case BNEP_FILTER_MULTI_ADDR_SET:
++ err = bnep_ctrl_set_mcfilter(s, data, len);
++ break;
++
++ default: {
++ u8 pkt[3];
++ pkt[0] = BNEP_CONTROL;
++ pkt[1] = BNEP_CMD_NOT_UNDERSTOOD;
++ pkt[2] = cmd;
++ bnep_send(s, pkt, sizeof(pkt));
++ }
++ break;
++ }
++
++ return err;
++}
++
++static int bnep_rx_extension(struct bnep_session *s, struct sk_buff *skb)
++{
++ struct bnep_ext_hdr *h;
++ int err = 0;
++
++ do {
++ h = (void *) skb->data;
++ if (!skb_pull(skb, sizeof(*h))) {
++ err = -EILSEQ;
++ break;
++ }
++
++ BT_DBG("type 0x%x len %d", h->type, h->len);
++
++ switch (h->type & BNEP_TYPE_MASK) {
++ case BNEP_EXT_CONTROL:
++ bnep_rx_control(s, skb->data, skb->len);
++ break;
++
++ default:
++ /* Unknown extension, skip it. */
++ break;
++ }
++
++ if (!skb_pull(skb, h->len)) {
++ err = -EILSEQ;
++ break;
++ }
++ } while (!err && (h->type & BNEP_EXT_HEADER));
++
++ return err;
++}
++
++static u8 __bnep_rx_hlen[] = {
++ ETH_HLEN, /* BNEP_GENERAL */
++ 0, /* BNEP_CONTROL */
++ 2, /* BNEP_COMPRESSED */
++ ETH_ALEN + 2, /* BNEP_COMPRESSED_SRC_ONLY */
++ ETH_ALEN + 2 /* BNEP_COMPRESSED_DST_ONLY */
++};
++#define BNEP_RX_TYPES (sizeof(__bnep_rx_hlen) - 1)
++
++static inline int bnep_rx_frame(struct bnep_session *s, struct sk_buff *skb)
++{
++ struct net_device *dev = &s->dev;
++ struct sk_buff *nskb;
++ u8 type;
++
++ dev->last_rx = jiffies;
++ s->stats.rx_bytes += skb->len;
++
++ type = *(u8 *) skb->data; skb_pull(skb, 1);
++
++ if ((type & BNEP_TYPE_MASK) > BNEP_RX_TYPES)
++ goto badframe;
++
++ if ((type & BNEP_TYPE_MASK) == BNEP_CONTROL) {
++ bnep_rx_control(s, skb->data, skb->len);
++ kfree_skb(skb);
++ return 0;
++ }
++
++ skb->mac.raw = skb->data;
++
++ /* Verify and pull out header */
++ if (!skb_pull(skb, __bnep_rx_hlen[type & BNEP_TYPE_MASK]))
++ goto badframe;
++
++ s->eh.h_proto = get_unaligned((u16 *) (skb->data - 2));
++
++ if (type & BNEP_EXT_HEADER) {
++ if (bnep_rx_extension(s, skb) < 0)
++ goto badframe;
++ }
++
++ /* Strip 802.1p header */
++ if (ntohs(s->eh.h_proto) == 0x8100) {
++ if (!skb_pull(skb, 4))
++ goto badframe;
++ s->eh.h_proto = get_unaligned((u16 *) (skb->data - 2));
++ }
++
++ /* We have to alloc new skb and copy data here :(. Because original skb
++ * may not be modified and because of the alignment requirements. */
++ nskb = alloc_skb(2 + ETH_HLEN + skb->len, GFP_KERNEL);
++ if (!nskb) {
++ s->stats.rx_dropped++;
++ kfree_skb(skb);
++ return -ENOMEM;
++ }
++ skb_reserve(nskb, 2);
++
++ /* Decompress header and construct ether frame */
++ switch (type & BNEP_TYPE_MASK) {
++ case BNEP_COMPRESSED:
++ memcpy(__skb_put(nskb, ETH_HLEN), &s->eh, ETH_HLEN);
++ break;
++
++ case BNEP_COMPRESSED_SRC_ONLY:
++ memcpy(__skb_put(nskb, ETH_ALEN), s->eh.h_dest, ETH_ALEN);
++ memcpy(__skb_put(nskb, ETH_ALEN), skb->mac.raw, ETH_ALEN);
++ put_unaligned(s->eh.h_proto, (u16 *) __skb_put(nskb, 2));
++ break;
++
++ case BNEP_COMPRESSED_DST_ONLY:
++ memcpy(__skb_put(nskb, ETH_ALEN), skb->mac.raw, ETH_ALEN);
++ memcpy(__skb_put(nskb, ETH_ALEN + 2), s->eh.h_source, ETH_ALEN + 2);
++ break;
++
++ case BNEP_GENERAL:
++ memcpy(__skb_put(nskb, ETH_ALEN * 2), skb->mac.raw, ETH_ALEN * 2);
++ put_unaligned(s->eh.h_proto, (u16 *) __skb_put(nskb, 2));
++ break;
++ }
++
++ memcpy(__skb_put(nskb, skb->len), skb->data, skb->len);
++ kfree_skb(skb);
++
++ s->stats.rx_packets++;
++ nskb->dev = dev;
++ nskb->ip_summed = CHECKSUM_UNNECESSARY;
++ nskb->protocol = eth_type_trans(nskb, dev);
++ netif_rx_ni(nskb);
++ return 0;
++
++badframe:
++ s->stats.rx_errors++;
++ kfree_skb(skb);
++ return 0;
++}
++
++static u8 __bnep_tx_types[] = {
++ BNEP_GENERAL,
++ BNEP_COMPRESSED_SRC_ONLY,
++ BNEP_COMPRESSED_DST_ONLY,
++ BNEP_COMPRESSED
++};
++
++static inline int bnep_tx_frame(struct bnep_session *s, struct sk_buff *skb)
++{
++ struct ethhdr *eh = (void *) skb->data;
++ struct socket *sock = s->sock;
++ struct iovec iv[3];
++ int len = 0, il = 0;
++ u8 type = 0;
++
++ BT_DBG("skb %p dev %p type %d", skb, skb->dev, skb->pkt_type);
++
++ if (!skb->dev) {
++ /* Control frame sent by us */
++ goto send;
++ }
++
++ iv[il++] = (struct iovec) { &type, 1 };
++ len++;
++
++ if (!memcmp(eh->h_dest, s->eh.h_source, ETH_ALEN))
++ type |= 0x01;
++
++ if (!memcmp(eh->h_source, s->eh.h_dest, ETH_ALEN))
++ type |= 0x02;
++
++ if (type)
++ skb_pull(skb, ETH_ALEN * 2);
++
++ type = __bnep_tx_types[type];
++ switch (type) {
++ case BNEP_COMPRESSED_SRC_ONLY:
++ iv[il++] = (struct iovec) { eh->h_source, ETH_ALEN };
++ len += ETH_ALEN;
++ break;
++
++ case BNEP_COMPRESSED_DST_ONLY:
++ iv[il++] = (struct iovec) { eh->h_dest, ETH_ALEN };
++ len += ETH_ALEN;
++ break;
++ }
++
++send:
++ iv[il++] = (struct iovec) { skb->data, skb->len };
++ len += skb->len;
++
++ /* FIXME: linearize skb */
++
++ s->msg.msg_iov = iv;
++ s->msg.msg_iovlen = il;
++ len = sock->ops->sendmsg(sock, &s->msg, len, NULL);
++ kfree_skb(skb);
++
++ if (len > 0) {
++ s->stats.tx_bytes += len;
++ s->stats.tx_packets++;
++ return 0;
++ }
++
++ return len;
++}
++
++static int bnep_session(void *arg)
++{
++ struct bnep_session *s = arg;
++ struct net_device *dev = &s->dev;
++ struct sock *sk = s->sock->sk;
++ struct sk_buff *skb;
++ wait_queue_t wait;
++
++ BT_DBG("");
++
++ daemonize(); reparent_to_init();
++
++ sprintf(current->comm, "kbnepd %s", dev->name);
++
++ sigfillset(&current->blocked);
++ flush_signals(current);
++
++ current->nice = -15;
++
++ set_fs(KERNEL_DS);
++
++ init_waitqueue_entry(&wait, current);
++ add_wait_queue(sk->sleep, &wait);
++ while (!atomic_read(&s->killed)) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ // RX
++ while ((skb = skb_dequeue(&sk->receive_queue))) {
++ skb_orphan(skb);
++ bnep_rx_frame(s, skb);
++ }
++
++ if (sk->state != BT_CONNECTED)
++ break;
++
++ // TX
++ while ((skb = skb_dequeue(&sk->write_queue)))
++ if (bnep_tx_frame(s, skb))
++ break;
++ netif_wake_queue(dev);
++
++ schedule();
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++
++ /* Cleanup session */
++ down_write(&bnep_session_sem);
++
++ /* Delete network device */
++ unregister_netdev(dev);
++
++ /* Release the socket */
++ fput(s->sock->file);
++
++ __bnep_unlink_session(s);
++
++ up_write(&bnep_session_sem);
++ kfree(s);
++ return 0;
++}
++
++int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock)
++{
++ struct net_device *dev;
++ struct bnep_session *s, *ss;
++ u8 dst[ETH_ALEN], src[ETH_ALEN];
++ int err;
++
++ BT_DBG("");
++
++ baswap((void *) dst, &bluez_pi(sock->sk)->dst);
++ baswap((void *) src, &bluez_pi(sock->sk)->src);
++
++ s = kmalloc(sizeof(struct bnep_session), GFP_KERNEL);
++ if (!s)
++ return -ENOMEM;
++ memset(s, 0, sizeof(struct bnep_session));
++
++ down_write(&bnep_session_sem);
++
++ ss = __bnep_get_session(dst);
++ if (ss && ss->state == BT_CONNECTED) {
++ err = -EEXIST;
++ goto failed;
++ }
++
++ dev = &s->dev;
++
++ if (*req->device)
++ strcpy(dev->name, req->device);
++ else
++ strcpy(dev->name, "bnep%d");
++
++ memset(dev->broadcast, 0xff, ETH_ALEN);
++
++ /* This is rx header therefor addresses are swaped.
++ * ie eh.h_dest is our local address. */
++ memcpy(s->eh.h_dest, &src, ETH_ALEN);
++ memcpy(s->eh.h_source, &dst, ETH_ALEN);
++
++ s->sock = sock;
++ s->role = req->role;
++ s->state = BT_CONNECTED;
++
++ s->msg.msg_flags = MSG_NOSIGNAL;
++
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
++ /* Set default mc filter */
++ set_bit(bnep_mc_hash(dev->broadcast), &s->mc_filter);
++#endif
++
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
++ /* Set default protocol filter */
++
++ /* (IPv4, ARP) */
++ s->proto_filter[0].start = htons(0x0800);
++ s->proto_filter[0].end = htons(0x0806);
++ /* (RARP, AppleTalk) */
++ s->proto_filter[1].start = htons(0x8035);
++ s->proto_filter[1].end = htons(0x80F3);
++ /* (IPX, IPv6) */
++ s->proto_filter[2].start = htons(0x8137);
++ s->proto_filter[2].end = htons(0x86DD);
++#endif
++
++ dev->init = bnep_net_init;
++ dev->priv = s;
++ err = register_netdev(dev);
++ if (err) {
++ goto failed;
++ }
++
++ __bnep_link_session(s);
++
++ err = kernel_thread(bnep_session, s, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
++ if (err < 0) {
++ /* Session thread start failed, gotta cleanup. */
++ unregister_netdev(dev);
++ __bnep_unlink_session(s);
++ goto failed;
++ }
++
++ up_write(&bnep_session_sem);
++ strcpy(req->device, dev->name);
++ return 0;
++
++failed:
++ up_write(&bnep_session_sem);
++ kfree(s);
++ return err;
++}
++
++int bnep_del_connection(struct bnep_conndel_req *req)
++{
++ struct bnep_session *s;
++ int err = 0;
++
++ BT_DBG("");
++
++ down_read(&bnep_session_sem);
++
++ s = __bnep_get_session(req->dst);
++ if (s) {
++ /* Wakeup user-space which is polling for socket errors.
++ * This is temporary hack untill we have shutdown in L2CAP */
++ s->sock->sk->err = EUNATCH;
++
++ /* Kill session thread */
++ atomic_inc(&s->killed);
++ wake_up_interruptible(s->sock->sk->sleep);
++ } else
++ err = -ENOENT;
++
++ up_read(&bnep_session_sem);
++ return err;
++}
++
++static void __bnep_copy_ci(struct bnep_conninfo *ci, struct bnep_session *s)
++{
++ memcpy(ci->dst, s->eh.h_source, ETH_ALEN);
++ strcpy(ci->device, s->dev.name);
++ ci->flags = s->flags;
++ ci->state = s->state;
++ ci->role = s->role;
++}
++
++int bnep_get_connlist(struct bnep_connlist_req *req)
++{
++ struct list_head *p;
++ int err = 0, n = 0;
++
++ down_read(&bnep_session_sem);
++
++ list_for_each(p, &bnep_session_list) {
++ struct bnep_session *s;
++ struct bnep_conninfo ci;
++
++ s = list_entry(p, struct bnep_session, list);
++
++ __bnep_copy_ci(&ci, s);
++
++ if (copy_to_user(req->ci, &ci, sizeof(ci))) {
++ err = -EFAULT;
++ break;
++ }
++
++ if (++n >= req->cnum)
++ break;
++
++ req->ci++;
++ }
++ req->cnum = n;
++
++ up_read(&bnep_session_sem);
++ return err;
++}
++
++int bnep_get_conninfo(struct bnep_conninfo *ci)
++{
++ struct bnep_session *s;
++ int err = 0;
++
++ down_read(&bnep_session_sem);
++
++ s = __bnep_get_session(ci->dst);
++ if (s)
++ __bnep_copy_ci(ci, s);
++ else
++ err = -ENOENT;
++
++ up_read(&bnep_session_sem);
++ return err;
++}
++
++static int __init bnep_init_module(void)
++{
++ l2cap_load();
++
++ bnep_crc32_init();
++ bnep_sock_init();
++
++ BT_INFO("BlueZ BNEP ver %s", VERSION);
++ BT_INFO("Copyright (C) 2001,2002 Inventel Systemes");
++ BT_INFO("Written 2001,2002 by Clement Moreau <clement.moreau@inventel.fr>");
++ BT_INFO("Written 2001,2002 by David Libault <david.libault@inventel.fr>");
++ BT_INFO("Copyright (C) 2002 Maxim Krasnyanskiy <maxk@qualcomm.com>");
++
++ return 0;
++}
++
++static void __exit bnep_cleanup_module(void)
++{
++ bnep_sock_cleanup();
++ bnep_crc32_cleanup();
++}
++
++module_init(bnep_init_module);
++module_exit(bnep_cleanup_module);
++
++MODULE_DESCRIPTION("BlueZ BNEP ver " VERSION);
++MODULE_AUTHOR("David Libault <david.libault@inventel.fr>, Maxim Krasnyanskiy <maxk@qualcomm.com>");
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/bnep/crc32.c linux-2.4.18-mh9/net/bluetooth/bnep/crc32.c
+--- linux-2.4.18/net/bluetooth/bnep/crc32.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/bnep/crc32.c Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,59 @@
++/*
++ * Based on linux-2.5/lib/crc32 by Matt Domsch <Matt_Domsch@dell.com>
++ *
++ * FIXME: Remove in 2.5
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/slab.h>
++#include <linux/init.h>
++#include <asm/atomic.h>
++
++#include "crc32.h"
++
++#define CRCPOLY_BE 0x04c11db7
++#define CRC_BE_BITS 8
++
++static u32 *bnep_crc32_table;
++
++/*
++ * This code is in the public domain; copyright abandoned.
++ * Liability for non-performance of this code is limited to the amount
++ * you paid for it. Since it is distributed for free, your refund will
++ * be very very small. If it breaks, you get to keep both pieces.
++ */
++u32 bnep_crc32(u32 crc, unsigned char const *p, size_t len)
++{
++ while (len--)
++ crc = (crc << 8) ^ bnep_crc32_table[(crc >> 24) ^ *p++];
++
++ return crc;
++}
++
++int __init bnep_crc32_init(void)
++{
++ unsigned i, j;
++ u32 crc = 0x80000000;
++
++ bnep_crc32_table = kmalloc((1 << CRC_BE_BITS) * sizeof(u32), GFP_KERNEL);
++ if (!bnep_crc32_table)
++ return -ENOMEM;
++
++ bnep_crc32_table[0] = 0;
++
++ for (i = 1; i < 1 << CRC_BE_BITS; i <<= 1) {
++ crc = (crc << 1) ^ ((crc & 0x80000000) ? CRCPOLY_BE : 0);
++ for (j = 0; j < i; j++)
++ bnep_crc32_table[i + j] = crc ^ bnep_crc32_table[j];
++ }
++ return 0;
++}
++
++void __exit bnep_crc32_cleanup(void)
++{
++ if (bnep_crc32_table)
++ kfree(bnep_crc32_table);
++ bnep_crc32_table = NULL;
++}
+diff -urN linux-2.4.18/net/bluetooth/bnep/crc32.h linux-2.4.18-mh9/net/bluetooth/bnep/crc32.h
+--- linux-2.4.18/net/bluetooth/bnep/crc32.h Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/bnep/crc32.h Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,10 @@
++/*
++ * crc32.h
++ * See crc32.c for license and changes
++ *
++ * FIXME: Remove in 2.5
++ */
++
++int bnep_crc32_init(void);
++void bnep_crc32_cleanup(void);
++u32 bnep_crc32(u32 crc, unsigned char const *p, size_t len);
+diff -urN linux-2.4.18/net/bluetooth/bnep/netdev.c linux-2.4.18-mh9/net/bluetooth/bnep/netdev.c
+--- linux-2.4.18/net/bluetooth/bnep/netdev.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/bnep/netdev.c Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,254 @@
++/*
++ BNEP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2001-2002 Inventel Systemes
++ Written 2001-2002 by
++ Clément Moreau <clement.moreau@inventel.fr>
++ David Libault <david.libault@inventel.fr>
++
++ Copyright (C) 2002 Maxim Krasnyanskiy <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: netdev.c,v 1.7 2002/07/14 05:39:26 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/socket.h>
++#include <linux/netdevice.h>
++#include <linux/etherdevice.h>
++#include <linux/skbuff.h>
++#include <linux/wait.h>
++
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include <net/bluetooth/l2cap.h>
++
++#include "bnep.h"
++
++#ifndef CONFIG_BLUEZ_BNEP_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
++
++#define BNEP_TX_QUEUE_LEN 20
++
++static int bnep_net_open(struct net_device *dev)
++{
++ netif_start_queue(dev);
++ return 0;
++}
++
++static int bnep_net_close(struct net_device *dev)
++{
++ netif_stop_queue(dev);
++ return 0;
++}
++
++static struct net_device_stats *bnep_net_get_stats(struct net_device *dev)
++{
++ struct bnep_session *s = dev->priv;
++ return &s->stats;
++}
++
++static void bnep_net_set_mc_list(struct net_device *dev)
++{
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
++ struct bnep_session *s = dev->priv;
++ struct sock *sk = s->sock->sk;
++ struct bnep_set_filter_req *r;
++ struct sk_buff *skb;
++ int size;
++
++ BT_DBG("%s mc_count %d", dev->name, dev->mc_count);
++
++ size = sizeof(*r) + (BNEP_MAX_MULTICAST_FILTERS + 1) * ETH_ALEN * 2;
++ skb = alloc_skb(size, GFP_ATOMIC);
++ if (!skb) {
++ BT_ERR("%s Multicast list allocation failed", dev->name);
++ return;
++ }
++
++ r = (void *) skb->data;
++ __skb_put(skb, sizeof(*r));
++
++ r->type = BNEP_CONTROL;
++ r->ctrl = BNEP_FILTER_MULTI_ADDR_SET;
++
++ if (dev->flags & (IFF_PROMISC | IFF_ALLMULTI)) {
++ u8 start[ETH_ALEN] = { 0x01 };
++
++ /* Request all addresses */
++ memcpy(__skb_put(skb, ETH_ALEN), start, ETH_ALEN);
++ memcpy(__skb_put(skb, ETH_ALEN), dev->broadcast, ETH_ALEN);
++ r->len = htons(ETH_ALEN * 2);
++ } else {
++ struct dev_mc_list *dmi = dev->mc_list;
++ int i, len = skb->len;
++
++ if (dev->flags & IFF_BROADCAST) {
++ memcpy(__skb_put(skb, ETH_ALEN), dev->broadcast, ETH_ALEN);
++ memcpy(__skb_put(skb, ETH_ALEN), dev->broadcast, ETH_ALEN);
++ }
++
++ /* FIXME: We should group addresses here. */
++
++ for (i = 0; i < dev->mc_count && i < BNEP_MAX_MULTICAST_FILTERS; i++) {
++ memcpy(__skb_put(skb, ETH_ALEN), dmi->dmi_addr, ETH_ALEN);
++ memcpy(__skb_put(skb, ETH_ALEN), dmi->dmi_addr, ETH_ALEN);
++ dmi = dmi->next;
++ }
++ r->len = htons(skb->len - len);
++ }
++
++ skb_queue_tail(&sk->write_queue, skb);
++ wake_up_interruptible(sk->sleep);
++#endif
++}
++
++static int bnep_net_set_mac_addr(struct net_device *dev, void *arg)
++{
++ BT_DBG("%s", dev->name);
++ return 0;
++}
++
++static void bnep_net_timeout(struct net_device *dev)
++{
++ BT_DBG("net_timeout");
++ netif_wake_queue(dev);
++}
++
++static int bnep_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
++{
++ return -EINVAL;
++}
++
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
++static inline int bnep_net_mc_filter(struct sk_buff *skb, struct bnep_session *s)
++{
++ struct ethhdr *eh = (void *) skb->data;
++
++ if ((eh->h_dest[0] & 1) && !test_bit(bnep_mc_hash(eh->h_dest), &s->mc_filter)) {
++ BT_DBG("BNEP: filtered skb %p, dst %.2x:%.2x:%.2x:%.2x:%.2x:%.2x", skb,
++ eh->h_dest[0], eh->h_dest[1], eh->h_dest[2],
++ eh->h_dest[3], eh->h_dest[4], eh->h_dest[5]);
++ return 1;
++ }
++ return 0;
++}
++#endif
++
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
++/* Determine ether protocol. Based on eth_type_trans. */
++static inline u16 bnep_net_eth_proto(struct sk_buff *skb)
++{
++ struct ethhdr *eh = (void *) skb->data;
++
++ if (ntohs(eh->h_proto) >= 1536)
++ return eh->h_proto;
++
++ if (get_unaligned((u16 *) skb->data) == 0xFFFF)
++ return htons(ETH_P_802_3);
++
++ return htons(ETH_P_802_2);
++}
++
++static inline int bnep_net_proto_filter(struct sk_buff *skb, struct bnep_session *s)
++{
++ u16 proto = bnep_net_eth_proto(skb);
++ struct bnep_proto_filter *f = s->proto_filter;
++ int i;
++
++ for (i = 0; i < BNEP_MAX_PROTO_FILTERS && f[i].end; i++) {
++ if (proto >= f[i].start && proto <= f[i].end)
++ return 0;
++ }
++
++ BT_DBG("BNEP: filtered skb %p, proto 0x%.4x", skb, proto);
++ return 1;
++}
++#endif
++
++static int bnep_net_xmit(struct sk_buff *skb, struct net_device *dev)
++{
++ struct bnep_session *s = dev->priv;
++ struct sock *sk = s->sock->sk;
++
++ BT_DBG("skb %p, dev %p", skb, dev);
++
++#ifdef CONFIG_BLUEZ_BNEP_MC_FILTER
++ if (bnep_net_mc_filter(skb, s)) {
++ kfree_skb(skb);
++ return 0;
++ }
++#endif
++
++#ifdef CONFIG_BLUEZ_BNEP_PROTO_FILTER
++ if (bnep_net_proto_filter(skb, s)) {
++ kfree_skb(skb);
++ return 0;
++ }
++#endif
++
++ /*
++ * We cannot send L2CAP packets from here as we are potentially in a bh.
++ * So we have to queue them and wake up session thread which is sleeping
++ * on the sk->sleep.
++ */
++ dev->trans_start = jiffies;
++ skb_queue_tail(&sk->write_queue, skb);
++ wake_up_interruptible(sk->sleep);
++
++ if (skb_queue_len(&sk->write_queue) >= BNEP_TX_QUEUE_LEN) {
++ BT_DBG("tx queue is full");
++
++ /* Stop queuing.
++ * Session thread will do netif_wake_queue() */
++ netif_stop_queue(dev);
++ }
++
++ return 0;
++}
++
++int bnep_net_init(struct net_device *dev)
++{
++ struct bnep_session *s = dev->priv;
++
++ memcpy(dev->dev_addr, s->eh.h_dest, ETH_ALEN);
++ dev->addr_len = ETH_ALEN;
++
++ ether_setup(dev);
++
++ dev->open = bnep_net_open;
++ dev->stop = bnep_net_close;
++ dev->hard_start_xmit = bnep_net_xmit;
++ dev->get_stats = bnep_net_get_stats;
++ dev->do_ioctl = bnep_net_ioctl;
++ dev->set_mac_address = bnep_net_set_mac_addr;
++ dev->set_multicast_list = bnep_net_set_mc_list;
++
++ dev->watchdog_timeo = HZ * 2;
++ dev->tx_timeout = bnep_net_timeout;
++
++ return 0;
++}
+diff -urN linux-2.4.18/net/bluetooth/bnep/sock.c linux-2.4.18-mh9/net/bluetooth/bnep/sock.c
+--- linux-2.4.18/net/bluetooth/bnep/sock.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/bnep/sock.c Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,238 @@
++/*
++ BNEP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2001-2002 Inventel Systemes
++ Written 2001-2002 by
++ David Libault <david.libault@inventel.fr>
++
++ Copyright (C) 2002 Maxim Krasnyanskiy <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * $Id: sock.c,v 1.3 2002/07/10 22:59:52 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++
++#include "bnep.h"
++
++#ifndef CONFIG_BLUEZ_BNEP_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
++
++static inline struct socket *socki_lookup(struct inode *inode)
++{
++ return &inode->u.socket_i;
++}
++
++static struct socket *sockfd_lookup(int fd, int *err)
++{
++ struct file *file;
++ struct inode *inode;
++ struct socket *sock;
++
++ if (!(file = fget(fd))) {
++ *err = -EBADF;
++ return NULL;
++ }
++
++ inode = file->f_dentry->d_inode;
++ if (!inode->i_sock || !(sock = socki_lookup(inode))) {
++ *err = -ENOTSOCK;
++ fput(file);
++ return NULL;
++ }
++
++ if (sock->file != file) {
++ printk(KERN_ERR "socki_lookup: socket file changed!\n");
++ sock->file = file;
++ }
++ return sock;
++}
++
++static int bnep_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p sk %p", sock, sk);
++
++ if (!sk)
++ return 0;
++
++ sock_orphan(sk);
++ sock_put(sk);
++
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++static int bnep_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++{
++ struct bnep_connlist_req cl;
++ struct bnep_connadd_req ca;
++ struct bnep_conndel_req cd;
++ struct bnep_conninfo ci;
++ struct socket *nsock;
++ int err;
++
++ BT_DBG("cmd %x arg %lx", cmd, arg);
++
++ switch (cmd) {
++ case BNEPCONNADD:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&ca, (void *) arg, sizeof(ca)))
++ return -EFAULT;
++
++ nsock = sockfd_lookup(ca.sock, &err);
++ if (!nsock)
++ return err;
++
++ if (nsock->sk->state != BT_CONNECTED)
++ return -EBADFD;
++
++ err = bnep_add_connection(&ca, nsock);
++ if (!err) {
++ if (copy_to_user((void *) arg, &ca, sizeof(ca)))
++ err = -EFAULT;
++ } else
++ fput(nsock->file);
++
++ return err;
++
++ case BNEPCONNDEL:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&cd, (void *) arg, sizeof(cd)))
++ return -EFAULT;
++
++ return bnep_del_connection(&cd);
++
++ case BNEPGETCONNLIST:
++ if (copy_from_user(&cl, (void *) arg, sizeof(cl)))
++ return -EFAULT;
++
++ if (cl.cnum <= 0)
++ return -EINVAL;
++
++ err = bnep_get_connlist(&cl);
++ if (!err && copy_to_user((void *) arg, &cl, sizeof(cl)))
++ return -EFAULT;
++
++ return err;
++
++ case BNEPGETCONNINFO:
++ if (copy_from_user(&ci, (void *) arg, sizeof(ci)))
++ return -EFAULT;
++
++ err = bnep_get_conninfo(&ci);
++ if (!err && copy_to_user((void *) arg, &ci, sizeof(ci)))
++ return -EFAULT;
++
++ return err;
++
++ default:
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++static struct proto_ops bnep_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: bnep_sock_release,
++ ioctl: bnep_sock_ioctl,
++ bind: sock_no_bind,
++ getname: sock_no_getname,
++ sendmsg: sock_no_sendmsg,
++ recvmsg: sock_no_recvmsg,
++ poll: sock_no_poll,
++ listen: sock_no_listen,
++ shutdown: sock_no_shutdown,
++ setsockopt: sock_no_setsockopt,
++ getsockopt: sock_no_getsockopt,
++ connect: sock_no_connect,
++ socketpair: sock_no_socketpair,
++ accept: sock_no_accept,
++ mmap: sock_no_mmap
++};
++
++static int bnep_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ if (sock->type != SOCK_RAW)
++ return -ESOCKTNOSUPPORT;
++
++ sock->ops = &bnep_sock_ops;
++
++ if (!(sk = sk_alloc(PF_BLUETOOTH, GFP_KERNEL, 1)))
++ return -ENOMEM;
++
++ MOD_INC_USE_COUNT;
++
++ sock->state = SS_UNCONNECTED;
++ sock_init_data(sock, sk);
++
++ sk->destruct = NULL;
++ sk->protocol = protocol;
++
++ return 0;
++}
++
++static struct net_proto_family bnep_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: bnep_sock_create
++};
++
++int bnep_sock_init(void)
++{
++ bluez_sock_register(BTPROTO_BNEP, &bnep_sock_family_ops);
++ return 0;
++}
++
++int bnep_sock_cleanup(void)
++{
++ if (bluez_sock_unregister(BTPROTO_BNEP))
++ BT_ERR("Can't unregister BNEP socket");
++ return 0;
++}
+diff -urN linux-2.4.18/net/bluetooth/cmtp/Config.in linux-2.4.18-mh9/net/bluetooth/cmtp/Config.in
+--- linux-2.4.18/net/bluetooth/cmtp/Config.in Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/cmtp/Config.in Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,7 @@
++#
++# Bluetooth CMTP layer configuration
++#
++
++if [ "$CONFIG_ISDN" = "y" -o "$CONFIG_ISDN" = "m" ]; then
++ dep_tristate 'CMTP protocol support' CONFIG_BLUEZ_CMTP $CONFIG_ISDN_CAPI $CONFIG_BLUEZ_L2CAP
++fi
+diff -urN linux-2.4.18/net/bluetooth/cmtp/Makefile linux-2.4.18-mh9/net/bluetooth/cmtp/Makefile
+--- linux-2.4.18/net/bluetooth/cmtp/Makefile Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/cmtp/Makefile Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,10 @@
++#
++# Makefile for the Linux Bluetooth CMTP layer
++#
++
++O_TARGET := cmtp.o
++
++obj-y := core.o sock.o capi.o
++obj-m += $(O_TARGET)
++
++include $(TOPDIR)/Rules.make
+diff -urN linux-2.4.18/net/bluetooth/cmtp/capi.c linux-2.4.18-mh9/net/bluetooth/cmtp/capi.c
+--- linux-2.4.18/net/bluetooth/cmtp/capi.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/cmtp/capi.c Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,707 @@
++/*
++ CMTP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <net/sock.h>
++
++#include <linux/capi.h>
++
++#include "../drivers/isdn/avmb1/capilli.h"
++#include "../drivers/isdn/avmb1/capicmd.h"
++#include "../drivers/isdn/avmb1/capiutil.h"
++
++#include "cmtp.h"
++
++#ifndef CONFIG_BLUEZ_CMTP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define REVISION "1.0"
++
++#define CAPI_INTEROPERABILITY 0x20
++
++#define CAPI_INTEROPERABILITY_REQ CAPICMD(CAPI_INTEROPERABILITY, CAPI_REQ)
++#define CAPI_INTEROPERABILITY_CONF CAPICMD(CAPI_INTEROPERABILITY, CAPI_CONF)
++#define CAPI_INTEROPERABILITY_IND CAPICMD(CAPI_INTEROPERABILITY, CAPI_IND)
++#define CAPI_INTEROPERABILITY_RESP CAPICMD(CAPI_INTEROPERABILITY, CAPI_RESP)
++
++#define CAPI_INTEROPERABILITY_REQ_LEN (CAPI_MSG_BASELEN + 2)
++#define CAPI_INTEROPERABILITY_CONF_LEN (CAPI_MSG_BASELEN + 4)
++#define CAPI_INTEROPERABILITY_IND_LEN (CAPI_MSG_BASELEN + 2)
++#define CAPI_INTEROPERABILITY_RESP_LEN (CAPI_MSG_BASELEN + 2)
++
++#define CAPI_FUNCTION_REGISTER 0
++#define CAPI_FUNCTION_RELEASE 1
++#define CAPI_FUNCTION_GET_PROFILE 2
++#define CAPI_FUNCTION_GET_MANUFACTURER 3
++#define CAPI_FUNCTION_GET_VERSION 4
++#define CAPI_FUNCTION_GET_SERIAL_NUMBER 5
++#define CAPI_FUNCTION_MANUFACTURER 6
++#define CAPI_FUNCTION_LOOPBACK 7
++
++static struct capi_driver_interface *di;
++
++
++#define CMTP_MSGNUM 1
++#define CMTP_APPLID 2
++#define CMTP_MAPPING 3
++
++static struct cmtp_application *cmtp_application_add(struct cmtp_session *session, __u16 appl)
++{
++ struct cmtp_application *app = kmalloc(sizeof(*app), GFP_KERNEL);
++
++ BT_DBG("session %p application %p appl %d", session, app, appl);
++
++ if (!app)
++ return NULL;
++
++ memset(app, 0, sizeof(*app));
++
++ app->state = BT_OPEN;
++ app->appl = appl;
++
++ list_add_tail(&app->list, &session->applications);
++
++ return app;
++}
++
++static void cmtp_application_del(struct cmtp_session *session, struct cmtp_application *app)
++{
++ BT_DBG("session %p application %p", session, app);
++
++ if (app) {
++ list_del(&app->list);
++ kfree(app);
++ }
++}
++
++static struct cmtp_application *cmtp_application_get(struct cmtp_session *session, int pattern, __u16 value)
++{
++ struct cmtp_application *app;
++ struct list_head *p, *n;
++
++ list_for_each_safe(p, n, &session->applications) {
++ app = list_entry(p, struct cmtp_application, list);
++ switch (pattern) {
++ case CMTP_MSGNUM:
++ if (app->msgnum == value)
++ return app;
++ break;
++ case CMTP_APPLID:
++ if (app->appl == value)
++ return app;
++ break;
++ case CMTP_MAPPING:
++ if (app->mapping == value)
++ return app;
++ break;
++ }
++ }
++
++ return NULL;
++}
++
++static int cmtp_msgnum_get(struct cmtp_session *session)
++{
++ session->msgnum++;
++
++ if ((session->msgnum & 0xff) > 200)
++ session->msgnum = CMTP_INITIAL_MSGNUM + 1;
++
++ return session->msgnum;
++}
++
++
++static void cmtp_send_interopmsg(struct cmtp_session *session,
++ __u8 subcmd, __u16 appl, __u16 msgnum,
++ __u16 function, unsigned char *buf, int len)
++{
++ struct sk_buff *skb;
++ unsigned char *s;
++
++ BT_DBG("session %p subcmd 0x%02x appl %d msgnum %d", session, subcmd, appl, msgnum);
++
++ if (!(skb = alloc_skb(CAPI_MSG_BASELEN + 6 + len, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for interoperability packet");
++ return;
++ }
++
++ s = skb_put(skb, CAPI_MSG_BASELEN + 6 + len);
++
++ capimsg_setu16(s, 0, CAPI_MSG_BASELEN + 6 + len);
++ capimsg_setu16(s, 2, appl);
++ capimsg_setu8 (s, 4, CAPI_INTEROPERABILITY);
++ capimsg_setu8 (s, 5, subcmd);
++ capimsg_setu16(s, 6, msgnum);
++
++ /* Interoperability selector (Bluetooth Device Management) */
++ capimsg_setu16(s, 8, 0x0001);
++
++ capimsg_setu8 (s, 10, 3 + len);
++ capimsg_setu16(s, 11, function);
++ capimsg_setu8 (s, 13, len);
++
++ if (len > 0)
++ memcpy(s + 14, buf, len);
++
++ cmtp_send_capimsg(session, skb);
++}
++
++static void cmtp_recv_interopmsg(struct cmtp_session *session, struct sk_buff *skb)
++{
++ struct capi_ctr *ctrl = session->ctrl;
++ struct cmtp_application *application;
++ __u16 appl, msgnum, func, info;
++ __u32 controller;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ switch (CAPIMSG_SUBCOMMAND(skb->data)) {
++ case CAPI_CONF:
++ func = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 5);
++ info = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 8);
++
++ switch (func) {
++ case CAPI_FUNCTION_REGISTER:
++ msgnum = CAPIMSG_MSGID(skb->data);
++
++ application = cmtp_application_get(session, CMTP_MSGNUM, msgnum);
++ if (application) {
++ application->state = BT_CONNECTED;
++ application->msgnum = 0;
++ application->mapping = CAPIMSG_APPID(skb->data);
++ wake_up_interruptible(&session->wait);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_RELEASE:
++ appl = CAPIMSG_APPID(skb->data);
++
++ application = cmtp_application_get(session, CMTP_MAPPING, appl);
++ if (application) {
++ application->state = BT_CLOSED;
++ application->msgnum = 0;
++ wake_up_interruptible(&session->wait);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_GET_PROFILE:
++ controller = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 11);
++ msgnum = CAPIMSG_MSGID(skb->data);
++
++ if (!info && (msgnum == CMTP_INITIAL_MSGNUM)) {
++ session->ncontroller = controller;
++ wake_up_interruptible(&session->wait);
++ break;
++ }
++
++ if (!info && ctrl) {
++ memcpy(&ctrl->profile,
++ skb->data + CAPI_MSG_BASELEN + 11,
++ sizeof(capi_profile));
++ session->state = BT_CONNECTED;
++ ctrl->ready(ctrl);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_GET_MANUFACTURER:
++ controller = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 10);
++
++ if (!info && ctrl) {
++ strncpy(ctrl->manu,
++ skb->data + CAPI_MSG_BASELEN + 15,
++ skb->data[CAPI_MSG_BASELEN + 14]);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_GET_VERSION:
++ controller = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 12);
++
++ if (!info && ctrl) {
++ ctrl->version.majorversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 16);
++ ctrl->version.minorversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 20);
++ ctrl->version.majormanuversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 24);
++ ctrl->version.minormanuversion = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 28);
++ }
++
++ break;
++
++ case CAPI_FUNCTION_GET_SERIAL_NUMBER:
++ controller = CAPIMSG_U32(skb->data, CAPI_MSG_BASELEN + 12);
++
++ if (!info && ctrl) {
++ memset(ctrl->serial, 0, CAPI_SERIAL_LEN);
++ strncpy(ctrl->serial,
++ skb->data + CAPI_MSG_BASELEN + 17,
++ skb->data[CAPI_MSG_BASELEN + 16]);
++ }
++
++ break;
++ }
++
++ break;
++
++ case CAPI_IND:
++ func = CAPIMSG_U16(skb->data, CAPI_MSG_BASELEN + 3);
++
++ if (func == CAPI_FUNCTION_LOOPBACK) {
++ appl = CAPIMSG_APPID(skb->data);
++ msgnum = CAPIMSG_MSGID(skb->data);
++ cmtp_send_interopmsg(session, CAPI_RESP, appl, msgnum, func,
++ skb->data + CAPI_MSG_BASELEN + 6,
++ skb->data[CAPI_MSG_BASELEN + 5]);
++ }
++
++ break;
++ }
++
++ kfree_skb(skb);
++}
++
++void cmtp_recv_capimsg(struct cmtp_session *session, struct sk_buff *skb)
++{
++ struct capi_ctr *ctrl = session->ctrl;
++ struct cmtp_application *application;
++ __u16 cmd, appl, info;
++ __u32 ncci, contr;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ if (CAPIMSG_COMMAND(skb->data) == CAPI_INTEROPERABILITY) {
++ cmtp_recv_interopmsg(session, skb);
++ return;
++ }
++
++ if (session->flags & (1 << CMTP_LOOPBACK)) {
++ kfree_skb(skb);
++ return;
++ }
++
++ cmd = CAPICMD(CAPIMSG_COMMAND(skb->data), CAPIMSG_SUBCOMMAND(skb->data));
++ appl = CAPIMSG_APPID(skb->data);
++ contr = CAPIMSG_CONTROL(skb->data);
++
++ application = cmtp_application_get(session, CMTP_MAPPING, appl);
++ if (application) {
++ appl = application->appl;
++ CAPIMSG_SETAPPID(skb->data, appl);
++ } else {
++ BT_ERR("Can't find application with id %d", appl);
++ kfree_skb(skb);
++ return;
++ }
++
++ if ((contr & 0x7f) == 0x01) {
++ contr = (contr & 0xffffff80) | session->num;
++ CAPIMSG_SETCONTROL(skb->data, contr);
++ }
++
++ if (!ctrl) {
++ BT_ERR("Can't find controller %d for message", session->num);
++ kfree_skb(skb);
++ return;
++ }
++
++ switch (cmd) {
++ case CAPI_CONNECT_B3_CONF:
++ ncci = CAPIMSG_NCCI(skb->data);
++ info = CAPIMSG_U16(skb->data, 12);
++
++ BT_DBG("CONNECT_B3_CONF ncci 0x%02x info 0x%02x", ncci, info);
++
++ if (info == 0)
++ ctrl->new_ncci(ctrl, appl, ncci, 8);
++
++ ctrl->handle_capimsg(ctrl, appl, skb);
++ break;
++
++ case CAPI_CONNECT_B3_IND:
++ ncci = CAPIMSG_NCCI(skb->data);
++
++ BT_DBG("CONNECT_B3_IND ncci 0x%02x", ncci);
++
++ ctrl->new_ncci(ctrl, appl, ncci, 8);
++ ctrl->handle_capimsg(ctrl, appl, skb);
++ break;
++
++ case CAPI_DISCONNECT_B3_IND:
++ ncci = CAPIMSG_NCCI(skb->data);
++
++ BT_DBG("DISCONNECT_B3_IND ncci 0x%02x", ncci);
++
++ if (ncci == 0xffffffff)
++ BT_ERR("DISCONNECT_B3_IND with ncci 0xffffffff");
++
++ ctrl->handle_capimsg(ctrl, appl, skb);
++ ctrl->free_ncci(ctrl, appl, ncci);
++ break;
++
++ default:
++ ctrl->handle_capimsg(ctrl, appl, skb);
++ break;
++ }
++}
++
++void cmtp_send_capimsg(struct cmtp_session *session, struct sk_buff *skb)
++{
++ struct cmtp_scb *scb = (void *) skb->cb;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ scb->id = -1;
++ scb->data = (CAPIMSG_COMMAND(skb->data) == CAPI_DATA_B3);
++
++ skb_queue_tail(&session->transmit, skb);
++
++ cmtp_schedule(session);
++}
++
++
++static int cmtp_load_firmware(struct capi_ctr *ctrl, capiloaddata *data)
++{
++ BT_DBG("ctrl %p data %p", ctrl, data);
++
++ return -EIO;
++}
++
++static void cmtp_reset_ctr(struct capi_ctr *ctrl)
++{
++ BT_DBG("ctrl %p", ctrl);
++
++ ctrl->reseted(ctrl);
++}
++
++static void cmtp_remove_ctr(struct capi_ctr *ctrl)
++{
++ struct cmtp_session *session = ctrl->driverdata;
++
++ BT_DBG("ctrl %p", ctrl);
++
++ ctrl->suspend_output(ctrl);
++
++ atomic_inc(&session->terminate);
++ cmtp_schedule(session);
++}
++
++static void cmtp_register_appl(struct capi_ctr *ctrl, __u16 appl, capi_register_params *rp)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct cmtp_session *session = ctrl->driverdata;
++ struct cmtp_application *application;
++ unsigned long timeo = CMTP_INTEROP_TIMEOUT;
++ unsigned char buf[8];
++ int err = 0, nconn, want = rp->level3cnt;
++
++ BT_DBG("ctrl %p appl %d level3cnt %d datablkcnt %d datablklen %d",
++ ctrl, appl, rp->level3cnt, rp->datablkcnt, rp->datablklen);
++
++ application = cmtp_application_add(session, appl);
++ if (!application) {
++ BT_ERR("Can't allocate memory for new application");
++ ctrl->appl_released(ctrl, appl);
++ return;
++ }
++
++ if (want < 0)
++ nconn = ctrl->profile.nbchannel * -want;
++ else
++ nconn = want;
++
++ if (nconn == 0)
++ nconn = ctrl->profile.nbchannel;
++
++ capimsg_setu16(buf, 0, nconn);
++ capimsg_setu16(buf, 2, rp->datablkcnt);
++ capimsg_setu16(buf, 4, rp->datablklen);
++
++ application->state = BT_CONFIG;
++ application->msgnum = cmtp_msgnum_get(session);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0x0000, application->msgnum,
++ CAPI_FUNCTION_REGISTER, buf, 6);
++
++ add_wait_queue(&session->wait, &wait);
++ while (1) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (!timeo) {
++ err = -EAGAIN;
++ break;
++ }
++
++ if (application->state == BT_CLOSED) {
++ err = -application->err;
++ break;
++ }
++
++ if (application->state == BT_CONNECTED)
++ break;
++
++ if (signal_pending(current)) {
++ err = -EINTR;
++ break;
++ }
++
++ timeo = schedule_timeout(timeo);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&session->wait, &wait);
++
++ if (err) {
++ ctrl->appl_released(ctrl, appl);
++ cmtp_application_del(session, application);
++ return;
++ }
++
++ ctrl->appl_registered(ctrl, appl);
++}
++
++static void cmtp_release_appl(struct capi_ctr *ctrl, __u16 appl)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct cmtp_session *session = ctrl->driverdata;
++ struct cmtp_application *application;
++ unsigned long timeo = CMTP_INTEROP_TIMEOUT;
++
++ BT_DBG("ctrl %p appl %d", ctrl, appl);
++
++ application = cmtp_application_get(session, CMTP_APPLID, appl);
++ if (!application) {
++ BT_ERR("Can't find application");
++ return;
++ }
++
++ application->msgnum = cmtp_msgnum_get(session);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, application->mapping, application->msgnum,
++ CAPI_FUNCTION_RELEASE, NULL, 0);
++
++ add_wait_queue(&session->wait, &wait);
++ while (timeo) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (application->state == BT_CLOSED)
++ break;
++
++ if (signal_pending(current))
++ break;
++
++ timeo = schedule_timeout(timeo);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&session->wait, &wait);
++
++ cmtp_application_del(session, application);
++ ctrl->appl_released(ctrl, appl);
++}
++
++static void cmtp_send_message(struct capi_ctr *ctrl, struct sk_buff *skb)
++{
++ struct cmtp_session *session = ctrl->driverdata;
++ struct cmtp_application *application;
++ __u16 appl;
++ __u32 contr;
++
++ BT_DBG("ctrl %p skb %p", ctrl, skb);
++
++ appl = CAPIMSG_APPID(skb->data);
++ contr = CAPIMSG_CONTROL(skb->data);
++
++ application = cmtp_application_get(session, CMTP_APPLID, appl);
++ if ((!application) || (application->state != BT_CONNECTED)) {
++ BT_ERR("Can't find application with id %d", appl);
++ kfree_skb(skb);
++ return;
++ }
++
++ CAPIMSG_SETAPPID(skb->data, application->mapping);
++
++ if ((contr & 0x7f) == session->num) {
++ contr = (contr & 0xffffff80) | 0x01;
++ CAPIMSG_SETCONTROL(skb->data, contr);
++ }
++
++ cmtp_send_capimsg(session, skb);
++}
++
++static char *cmtp_procinfo(struct capi_ctr *ctrl)
++{
++ return "CAPI Message Transport Protocol";
++}
++
++static int cmtp_ctr_read_proc(char *page, char **start, off_t off, int count, int *eof, struct capi_ctr *ctrl)
++{
++ struct cmtp_session *session = ctrl->driverdata;
++ struct cmtp_application *app;
++ struct list_head *p, *n;
++ int len = 0;
++
++ len += sprintf(page + len, "%s (Revision %s)\n\n", cmtp_procinfo(ctrl), REVISION);
++ len += sprintf(page + len, "addr %s\n", session->name);
++ len += sprintf(page + len, "ctrl %d\n", session->num);
++
++ list_for_each_safe(p, n, &session->applications) {
++ app = list_entry(p, struct cmtp_application, list);
++ len += sprintf(page + len, "appl %d -> %d\n", app->appl, app->mapping);
++ }
++
++ if (off + count >= len)
++ *eof = 1;
++
++ if (len < off)
++ return 0;
++
++ *start = page + off;
++
++ return ((count < len - off) ? count : len - off);
++}
++
++static struct capi_driver cmtp_driver = {
++ name: "cmtp",
++ revision: REVISION,
++ load_firmware: cmtp_load_firmware,
++ reset_ctr: cmtp_reset_ctr,
++ remove_ctr: cmtp_remove_ctr,
++ register_appl: cmtp_register_appl,
++ release_appl: cmtp_release_appl,
++ send_message: cmtp_send_message,
++ procinfo: cmtp_procinfo,
++ ctr_read_proc: cmtp_ctr_read_proc,
++
++ driver_read_proc: 0,
++ add_card: 0,
++};
++
++
++int cmtp_attach_device(struct cmtp_session *session)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ unsigned long timeo = CMTP_INTEROP_TIMEOUT;
++ unsigned char buf[4];
++
++ BT_DBG("session %p", session);
++
++ capimsg_setu32(buf, 0, 0);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, CMTP_INITIAL_MSGNUM,
++ CAPI_FUNCTION_GET_PROFILE, buf, 4);
++
++ add_wait_queue(&session->wait, &wait);
++ while (timeo) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (session->ncontroller)
++ break;
++
++ if (signal_pending(current))
++ break;
++
++ timeo = schedule_timeout(timeo);
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&session->wait, &wait);
++
++ BT_INFO("Found %d CAPI controller(s) on device %s", session->ncontroller, session->name);
++
++ if (!timeo)
++ return -ETIMEDOUT;
++
++ if (!session->ncontroller)
++ return -ENODEV;
++
++
++ if (session->ncontroller > 1)
++ BT_INFO("Setting up only CAPI controller 1");
++
++ if (!(session->ctrl = di->attach_ctr(&cmtp_driver, session->name, session))) {
++ BT_ERR("Can't attach new controller");
++ return -EBUSY;
++ }
++
++ session->num = session->ctrl->cnr;
++
++ BT_DBG("session %p ctrl %p num %d", session, session->ctrl, session->num);
++
++ capimsg_setu32(buf, 0, 1);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, cmtp_msgnum_get(session),
++ CAPI_FUNCTION_GET_MANUFACTURER, buf, 4);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, cmtp_msgnum_get(session),
++ CAPI_FUNCTION_GET_VERSION, buf, 4);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, cmtp_msgnum_get(session),
++ CAPI_FUNCTION_GET_SERIAL_NUMBER, buf, 4);
++
++ cmtp_send_interopmsg(session, CAPI_REQ, 0xffff, cmtp_msgnum_get(session),
++ CAPI_FUNCTION_GET_PROFILE, buf, 4);
++
++ return 0;
++}
++
++void cmtp_detach_device(struct cmtp_session *session)
++{
++ struct capi_ctr *ctrl = session->ctrl;
++
++ BT_DBG("session %p ctrl %p", session, ctrl);
++
++ if (!ctrl)
++ return;
++
++ ctrl->reseted(ctrl);
++
++ di->detach_ctr(ctrl);
++}
++
++int cmtp_init_capi(void)
++{
++ if (!(di = attach_capi_driver(&cmtp_driver))) {
++ BT_ERR("Can't attach CAPI driver");
++ return -EIO;
++ }
++
++ return 0;
++}
++
++void cmtp_cleanup_capi(void)
++{
++ detach_capi_driver(&cmtp_driver);
++}
+diff -urN linux-2.4.18/net/bluetooth/cmtp/cmtp.h linux-2.4.18-mh9/net/bluetooth/cmtp/cmtp.h
+--- linux-2.4.18/net/bluetooth/cmtp/cmtp.h Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/cmtp/cmtp.h Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,138 @@
++/*
++ CMTP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#ifndef __CMTP_H
++#define __CMTP_H
++
++#include <linux/types.h>
++#include <net/bluetooth/bluetooth.h>
++
++#define BTNAMSIZ 18
++
++/* CMTP ioctl defines */
++#define CMTPCONNADD _IOW('C', 200, int)
++#define CMTPCONNDEL _IOW('C', 201, int)
++#define CMTPGETCONNLIST _IOR('C', 210, int)
++#define CMTPGETCONNINFO _IOR('C', 211, int)
++
++#define CMTP_LOOPBACK 0
++
++struct cmtp_connadd_req {
++ int sock; // Connected socket
++ __u32 flags;
++};
++
++struct cmtp_conndel_req {
++ bdaddr_t bdaddr;
++ __u32 flags;
++};
++
++struct cmtp_conninfo {
++ bdaddr_t bdaddr;
++ __u32 flags;
++ __u16 state;
++ int num;
++};
++
++struct cmtp_connlist_req {
++ __u32 cnum;
++ struct cmtp_conninfo *ci;
++};
++
++int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock);
++int cmtp_del_connection(struct cmtp_conndel_req *req);
++int cmtp_get_connlist(struct cmtp_connlist_req *req);
++int cmtp_get_conninfo(struct cmtp_conninfo *ci);
++
++/* CMTP session defines */
++#define CMTP_INTEROP_TIMEOUT (HZ * 5)
++#define CMTP_INITIAL_MSGNUM 0xff00
++
++struct cmtp_session {
++ struct list_head list;
++
++ struct socket *sock;
++
++ bdaddr_t bdaddr;
++
++ unsigned long state;
++ unsigned long flags;
++
++ uint mtu;
++
++ char name[BTNAMSIZ];
++
++ atomic_t terminate;
++
++ wait_queue_head_t wait;
++
++ int ncontroller;
++ int num;
++ struct capi_ctr *ctrl;
++
++ struct list_head applications;
++
++ unsigned long blockids;
++ int msgnum;
++
++ struct sk_buff_head transmit;
++
++ struct sk_buff *reassembly[16];
++};
++
++struct cmtp_application {
++ struct list_head list;
++
++ unsigned long state;
++ int err;
++
++ __u16 appl;
++ __u16 mapping;
++
++ __u16 msgnum;
++};
++
++struct cmtp_scb {
++ int id;
++ int data;
++};
++
++int cmtp_attach_device(struct cmtp_session *session);
++void cmtp_detach_device(struct cmtp_session *session);
++
++void cmtp_recv_capimsg(struct cmtp_session *session, struct sk_buff *skb);
++void cmtp_send_capimsg(struct cmtp_session *session, struct sk_buff *skb);
++
++static inline void cmtp_schedule(struct cmtp_session *session)
++{
++ struct sock *sk = session->sock->sk;
++
++ wake_up_interruptible(sk->sleep);
++}
++
++/* CMTP init defines */
++int cmtp_init_capi(void);
++int cmtp_init_sockets(void);
++void cmtp_cleanup_capi(void);
++void cmtp_cleanup_sockets(void);
++
++#endif /* __CMTP_H */
+diff -urN linux-2.4.18/net/bluetooth/cmtp/core.c linux-2.4.18-mh9/net/bluetooth/cmtp/core.c
+--- linux-2.4.18/net/bluetooth/cmtp/core.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/cmtp/core.c Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,515 @@
++/*
++ CMTP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <linux/init.h>
++#include <net/sock.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/l2cap.h>
++
++#include "cmtp.h"
++
++#ifndef CONFIG_BLUEZ_CMTP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define VERSION "1.0"
++
++static DECLARE_RWSEM(cmtp_session_sem);
++static LIST_HEAD(cmtp_session_list);
++
++static struct cmtp_session *__cmtp_get_session(bdaddr_t *bdaddr)
++{
++ struct cmtp_session *session;
++ struct list_head *p;
++
++ BT_DBG("");
++
++ list_for_each(p, &cmtp_session_list) {
++ session = list_entry(p, struct cmtp_session, list);
++ if (!bacmp(bdaddr, &session->bdaddr))
++ return session;
++ }
++ return NULL;
++}
++
++static void __cmtp_link_session(struct cmtp_session *session)
++{
++ MOD_INC_USE_COUNT;
++ list_add(&session->list, &cmtp_session_list);
++}
++
++static void __cmtp_unlink_session(struct cmtp_session *session)
++{
++ list_del(&session->list);
++ MOD_DEC_USE_COUNT;
++}
++
++static void __cmtp_copy_session(struct cmtp_session *session, struct cmtp_conninfo *ci)
++{
++ bacpy(&ci->bdaddr, &session->bdaddr);
++
++ ci->flags = session->flags;
++ ci->state = session->state;
++
++ ci->num = session->num;
++}
++
++
++static inline int cmtp_alloc_block_id(struct cmtp_session *session)
++{
++ int i, id = -1;
++
++ for (i = 0; i < 16; i++)
++ if (!test_and_set_bit(i, &session->blockids)) {
++ id = i;
++ break;
++ }
++
++ return id;
++}
++
++static inline void cmtp_free_block_id(struct cmtp_session *session, int id)
++{
++ clear_bit(id, &session->blockids);
++}
++
++static inline void cmtp_add_msgpart(struct cmtp_session *session, int id, const unsigned char *buf, int count)
++{
++ struct sk_buff *skb = session->reassembly[id], *nskb;
++ int size;
++
++ BT_DBG("session %p buf %p count %d", session, buf, count);
++
++ size = (skb) ? skb->len + count : count;
++
++ if (!(nskb = alloc_skb(size, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for CAPI message");
++ return;
++ }
++
++ if (skb && (skb->len > 0))
++ memcpy(skb_put(nskb, skb->len), skb->data, skb->len);
++
++ memcpy(skb_put(nskb, count), buf, count);
++
++ session->reassembly[id] = nskb;
++
++ if (skb)
++ kfree_skb(skb);
++}
++
++static inline int cmtp_recv_frame(struct cmtp_session *session, struct sk_buff *skb)
++{
++ __u8 hdr, hdrlen, id;
++ __u16 len;
++
++ BT_DBG("session %p skb %p len %d", session, skb, skb->len);
++
++ while (skb->len > 0) {
++ hdr = skb->data[0];
++
++ switch (hdr & 0xc0) {
++ case 0x40:
++ hdrlen = 2;
++ len = skb->data[1];
++ break;
++ case 0x80:
++ hdrlen = 3;
++ len = skb->data[1] | (skb->data[2] << 8);
++ break;
++ default:
++ hdrlen = 1;
++ len = 0;
++ break;
++ }
++
++ id = (hdr & 0x3c) >> 2;
++
++ BT_DBG("hdr 0x%02x hdrlen %d len %d id %d", hdr, hdrlen, len, id);
++
++ if (hdrlen + len > skb->len) {
++ BT_ERR("Wrong size or header information in CMTP frame");
++ break;
++ }
++
++ if (len == 0) {
++ skb_pull(skb, hdrlen);
++ continue;
++ }
++
++ switch (hdr & 0x03) {
++ case 0x00:
++ cmtp_add_msgpart(session, id, skb->data + hdrlen, len);
++ cmtp_recv_capimsg(session, session->reassembly[id]);
++ session->reassembly[id] = NULL;
++ break;
++ case 0x01:
++ cmtp_add_msgpart(session, id, skb->data + hdrlen, len);
++ break;
++ default:
++ if (session->reassembly[id] != NULL)
++ kfree_skb(session->reassembly[id]);
++ session->reassembly[id] = NULL;
++ break;
++ }
++
++ skb_pull(skb, hdrlen + len);
++ }
++
++ kfree_skb(skb);
++ return 0;
++}
++
++static int cmtp_send_frame(struct cmtp_session *session, unsigned char *data, int len)
++{
++ struct socket *sock = session->sock;
++ struct iovec iv = { data, len };
++ struct msghdr msg;
++ int err;
++
++ BT_DBG("session %p data %p len %d", session, data, len);
++
++ if (!len)
++ return 0;
++
++ memset(&msg, 0, sizeof(msg));
++ msg.msg_iovlen = 1;
++ msg.msg_iov = &iv;
++
++ err = sock->ops->sendmsg(sock, &msg, len, 0);
++ return err;
++}
++
++static int cmtp_process_transmit(struct cmtp_session *session)
++{
++ struct sk_buff *skb, *nskb;
++ unsigned char *hdr;
++ unsigned int size, tail;
++
++ BT_DBG("session %p", session);
++
++ if (!(nskb = alloc_skb(session->mtu, GFP_ATOMIC))) {
++ BT_ERR("Can't allocate memory for new frame");
++ return -ENOMEM;
++ }
++
++ while ((skb = skb_dequeue(&session->transmit))) {
++ struct cmtp_scb *scb = (void *) skb->cb;
++
++ if ((tail = (session->mtu - nskb->len)) < 5) {
++ cmtp_send_frame(session, nskb->data, nskb->len);
++ skb_trim(nskb, 0);
++ tail = session->mtu;
++ }
++
++ size = min_t(uint, ((tail < 258) ? (tail - 2) : (tail - 3)), skb->len);
++
++ if ((scb->id < 0) && ((scb->id = cmtp_alloc_block_id(session)) < 0)) {
++ skb_queue_head(&session->transmit, skb);
++ break;
++ }
++
++ if (size < 256) {
++ hdr = skb_put(nskb, 2);
++ hdr[0] = 0x40
++ | ((scb->id << 2) & 0x3c)
++ | ((skb->len == size) ? 0x00 : 0x01);
++ hdr[1] = size;
++ } else {
++ hdr = skb_put(nskb, 3);
++ hdr[0] = 0x80
++ | ((scb->id << 2) & 0x3c)
++ | ((skb->len == size) ? 0x00 : 0x01);
++ hdr[1] = size & 0xff;
++ hdr[2] = size >> 8;
++ }
++
++ memcpy(skb_put(nskb, size), skb->data, size);
++ skb_pull(skb, size);
++
++ if (skb->len > 0) {
++ skb_queue_head(&session->transmit, skb);
++ } else {
++ cmtp_free_block_id(session, scb->id);
++ if (scb->data) {
++ cmtp_send_frame(session, nskb->data, nskb->len);
++ skb_trim(nskb, 0);
++ }
++ kfree_skb(skb);
++ }
++ }
++
++ cmtp_send_frame(session, nskb->data, nskb->len);
++
++ kfree_skb(nskb);
++
++ return skb_queue_len(&session->transmit);
++}
++
++static int cmtp_session(void *arg)
++{
++ struct cmtp_session *session = arg;
++ struct sock *sk = session->sock->sk;
++ struct sk_buff *skb;
++ wait_queue_t wait;
++
++ BT_DBG("session %p", session);
++
++ daemonize(); reparent_to_init();
++
++ sprintf(current->comm, "kcmtpd_ctr_%d", session->num);
++
++ sigfillset(&current->blocked);
++ flush_signals(current);
++
++ current->nice = -15;
++
++ set_fs(KERNEL_DS);
++
++ init_waitqueue_entry(&wait, current);
++ add_wait_queue(sk->sleep, &wait);
++ while (!atomic_read(&session->terminate)) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (sk->state != BT_CONNECTED)
++ break;
++
++ while ((skb = skb_dequeue(&sk->receive_queue))) {
++ skb_orphan(skb);
++ cmtp_recv_frame(session, skb);
++ }
++
++ cmtp_process_transmit(session);
++
++ schedule();
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++
++ down_write(&cmtp_session_sem);
++
++ if (!(session->flags & (1 << CMTP_LOOPBACK)))
++ cmtp_detach_device(session);
++
++ fput(session->sock->file);
++
++ __cmtp_unlink_session(session);
++
++ up_write(&cmtp_session_sem);
++
++ kfree(session);
++ return 0;
++}
++
++int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock)
++{
++ struct cmtp_session *session, *s;
++ bdaddr_t src, dst;
++ int i, err;
++
++ BT_DBG("");
++
++ baswap(&src, &bluez_pi(sock->sk)->src);
++ baswap(&dst, &bluez_pi(sock->sk)->dst);
++
++ session = kmalloc(sizeof(struct cmtp_session), GFP_KERNEL);
++ if (!session)
++ return -ENOMEM;
++ memset(session, 0, sizeof(struct cmtp_session));
++
++ down_write(&cmtp_session_sem);
++
++ s = __cmtp_get_session(&bluez_pi(sock->sk)->dst);
++ if (s && s->state == BT_CONNECTED) {
++ err = -EEXIST;
++ goto failed;
++ }
++
++ bacpy(&session->bdaddr, &bluez_pi(sock->sk)->dst);
++
++ session->mtu = min_t(uint, l2cap_pi(sock->sk)->omtu, l2cap_pi(sock->sk)->imtu);
++
++ BT_DBG("mtu %d", session->mtu);
++
++ sprintf(session->name, "%s", batostr(&dst));
++
++ session->sock = sock;
++ session->state = BT_CONFIG;
++
++ init_waitqueue_head(&session->wait);
++
++ session->ctrl = NULL;
++ session->msgnum = CMTP_INITIAL_MSGNUM;
++
++ INIT_LIST_HEAD(&session->applications);
++
++ skb_queue_head_init(&session->transmit);
++
++ for (i = 0; i < 16; i++)
++ session->reassembly[i] = NULL;
++
++ session->flags = req->flags;
++
++ __cmtp_link_session(session);
++
++ err = kernel_thread(cmtp_session, session, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
++ if (err < 0)
++ goto unlink;
++
++ if (!(session->flags & (1 << CMTP_LOOPBACK))) {
++ err = cmtp_attach_device(session);
++ if (err < 0)
++ goto detach;
++ }
++
++ up_write(&cmtp_session_sem);
++ return 0;
++
++detach:
++ cmtp_detach_device(session);
++
++unlink:
++ __cmtp_unlink_session(session);
++
++failed:
++ up_write(&cmtp_session_sem);
++ kfree(session);
++ return err;
++}
++
++int cmtp_del_connection(struct cmtp_conndel_req *req)
++{
++ struct cmtp_session *session;
++ int err = 0;
++
++ BT_DBG("");
++
++ down_read(&cmtp_session_sem);
++
++ session = __cmtp_get_session(&req->bdaddr);
++ if (session) {
++ /* Flush the transmit queue */
++ skb_queue_purge(&session->transmit);
++
++ /* Kill session thread */
++ atomic_inc(&session->terminate);
++ cmtp_schedule(session);
++ } else
++ err = -ENOENT;
++
++ up_read(&cmtp_session_sem);
++ return err;
++}
++
++int cmtp_get_connlist(struct cmtp_connlist_req *req)
++{
++ struct list_head *p;
++ int err = 0, n = 0;
++
++ BT_DBG("");
++
++ down_read(&cmtp_session_sem);
++
++ list_for_each(p, &cmtp_session_list) {
++ struct cmtp_session *session;
++ struct cmtp_conninfo ci;
++
++ session = list_entry(p, struct cmtp_session, list);
++
++ __cmtp_copy_session(session, &ci);
++
++ if (copy_to_user(req->ci, &ci, sizeof(ci))) {
++ err = -EFAULT;
++ break;
++ }
++
++ if (++n >= req->cnum)
++ break;
++
++ req->ci++;
++ }
++ req->cnum = n;
++
++ up_read(&cmtp_session_sem);
++ return err;
++}
++
++int cmtp_get_conninfo(struct cmtp_conninfo *ci)
++{
++ struct cmtp_session *session;
++ int err = 0;
++
++ down_read(&cmtp_session_sem);
++
++ session = __cmtp_get_session(&ci->bdaddr);
++ if (session)
++ __cmtp_copy_session(session, ci);
++ else
++ err = -ENOENT;
++
++ up_read(&cmtp_session_sem);
++ return err;
++}
++
++
++int __init init_cmtp(void)
++{
++ l2cap_load();
++
++ cmtp_init_capi();
++ cmtp_init_sockets();
++
++ BT_INFO("BlueZ CMTP ver %s", VERSION);
++ BT_INFO("Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>");
++
++ return 0;
++}
++
++void __exit exit_cmtp(void)
++{
++ cmtp_cleanup_sockets();
++ cmtp_cleanup_capi();
++}
++
++module_init(init_cmtp);
++module_exit(exit_cmtp);
++
++MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueZ CMTP ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/cmtp/sock.c linux-2.4.18-mh9/net/bluetooth/cmtp/sock.c
+--- linux-2.4.18/net/bluetooth/cmtp/sock.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/cmtp/sock.c Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,236 @@
++/*
++ CMTP implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002-2003 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/skbuff.h>
++#include <linux/socket.h>
++#include <linux/ioctl.h>
++#include <linux/file.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++
++#include "cmtp.h"
++
++#ifndef CONFIG_BLUEZ_CMTP_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++static inline struct socket *socki_lookup(struct inode *inode)
++{
++ return &inode->u.socket_i;
++}
++
++static struct socket *sockfd_lookup(int fd, int *err)
++{
++ struct file *file;
++ struct inode *inode;
++ struct socket *sock;
++
++ if (!(file = fget(fd))) {
++ *err = -EBADF;
++ return NULL;
++ }
++
++ inode = file->f_dentry->d_inode;
++ if (!inode->i_sock || !(sock = socki_lookup(inode))) {
++ *err = -ENOTSOCK;
++ fput(file);
++ return NULL;
++ }
++
++ if (sock->file != file) {
++ printk(KERN_ERR "socki_lookup: socket file changed!\n");
++ sock->file = file;
++ }
++ return sock;
++}
++
++static int cmtp_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p sk %p", sock, sk);
++
++ if (!sk)
++ return 0;
++
++ sock_orphan(sk);
++ sock_put(sk);
++
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++static int cmtp_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++{
++ struct cmtp_connadd_req ca;
++ struct cmtp_conndel_req cd;
++ struct cmtp_connlist_req cl;
++ struct cmtp_conninfo ci;
++ struct socket *nsock;
++ int err;
++
++ BT_DBG("cmd %x arg %lx", cmd, arg);
++
++ switch (cmd) {
++ case CMTPCONNADD:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&ca, (void *) arg, sizeof(ca)))
++ return -EFAULT;
++
++ nsock = sockfd_lookup(ca.sock, &err);
++ if (!nsock)
++ return err;
++
++ if (nsock->sk->state != BT_CONNECTED)
++ return -EBADFD;
++
++ err = cmtp_add_connection(&ca, nsock);
++ if (!err) {
++ if (copy_to_user((void *) arg, &ca, sizeof(ca)))
++ err = -EFAULT;
++ } else
++ fput(nsock->file);
++
++ return err;
++
++ case CMTPCONNDEL:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
++
++ if (copy_from_user(&cd, (void *) arg, sizeof(cd)))
++ return -EFAULT;
++
++ return cmtp_del_connection(&cd);
++
++ case CMTPGETCONNLIST:
++ if (copy_from_user(&cl, (void *) arg, sizeof(cl)))
++ return -EFAULT;
++
++ if (cl.cnum <= 0)
++ return -EINVAL;
++
++ err = cmtp_get_connlist(&cl);
++ if (!err && copy_to_user((void *) arg, &cl, sizeof(cl)))
++ return -EFAULT;
++
++ return err;
++
++ case CMTPGETCONNINFO:
++ if (copy_from_user(&ci, (void *) arg, sizeof(ci)))
++ return -EFAULT;
++
++ err = cmtp_get_conninfo(&ci);
++ if (!err && copy_to_user((void *) arg, &ci, sizeof(ci)))
++ return -EFAULT;
++
++ return err;
++ }
++
++ return -EINVAL;
++}
++
++static struct proto_ops cmtp_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: cmtp_sock_release,
++ ioctl: cmtp_sock_ioctl,
++ bind: sock_no_bind,
++ getname: sock_no_getname,
++ sendmsg: sock_no_sendmsg,
++ recvmsg: sock_no_recvmsg,
++ poll: sock_no_poll,
++ listen: sock_no_listen,
++ shutdown: sock_no_shutdown,
++ setsockopt: sock_no_setsockopt,
++ getsockopt: sock_no_getsockopt,
++ connect: sock_no_connect,
++ socketpair: sock_no_socketpair,
++ accept: sock_no_accept,
++ mmap: sock_no_mmap
++};
++
++static int cmtp_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ if (sock->type != SOCK_RAW)
++ return -ESOCKTNOSUPPORT;
++
++ sock->ops = &cmtp_sock_ops;
++
++ if (!(sk = sk_alloc(PF_BLUETOOTH, GFP_KERNEL, 1)))
++ return -ENOMEM;
++
++ MOD_INC_USE_COUNT;
++
++ sock->state = SS_UNCONNECTED;
++ sock_init_data(sock, sk);
++
++ sk->destruct = NULL;
++ sk->protocol = protocol;
++
++ return 0;
++}
++
++static struct net_proto_family cmtp_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: cmtp_sock_create
++};
++
++int cmtp_init_sockets(void)
++{
++ int err;
++
++ if ((err = bluez_sock_register(BTPROTO_CMTP, &cmtp_sock_family_ops))) {
++ BT_ERR("Can't register CMTP socket layer (%d)", err);
++ return err;
++ }
++
++ return 0;
++}
++
++void cmtp_cleanup_sockets(void)
++{
++ int err;
++
++ if ((err = bluez_sock_unregister(BTPROTO_CMTP)))
++ BT_ERR("Can't unregister CMTP socket layer (%d)", err);
++
++ return;
++}
+diff -urN linux-2.4.18/net/bluetooth/hci_conn.c linux-2.4.18-mh9/net/bluetooth/hci_conn.c
+--- linux-2.4.18/net/bluetooth/hci_conn.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/hci_conn.c Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,441 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * HCI Connection handling.
++ *
++ * $Id: hci_conn.c,v 1.5 2002/07/17 18:46:25 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/init.h>
++#include <linux/skbuff.h>
++#include <linux/interrupt.h>
++#include <linux/notifier.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++#ifndef HCI_CORE_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
++
++void hci_acl_connect(struct hci_conn *conn)
++{
++ struct hci_dev *hdev = conn->hdev;
++ struct inquiry_entry *ie;
++ create_conn_cp cp;
++
++ BT_DBG("%p", conn);
++
++ conn->state = BT_CONNECT;
++ conn->out = 1;
++ conn->link_mode = HCI_LM_MASTER;
++
++ memset(&cp, 0, sizeof(cp));
++ bacpy(&cp.bdaddr, &conn->dst);
++ cp.pscan_rep_mode = 0x01;
++
++ if ((ie = inquiry_cache_lookup(hdev, &conn->dst)) &&
++ inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
++ cp.pscan_rep_mode = ie->info.pscan_rep_mode;
++ cp.pscan_mode = ie->info.pscan_mode;
++ cp.clock_offset = ie->info.clock_offset | __cpu_to_le16(0x8000);
++ }
++
++ cp.pkt_type = __cpu_to_le16(hdev->pkt_type & ACL_PTYPE_MASK);
++ if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
++ cp.role_switch = 0x01;
++ else
++ cp.role_switch = 0x00;
++
++ hci_send_cmd(hdev, OGF_LINK_CTL, OCF_CREATE_CONN,
++ CREATE_CONN_CP_SIZE, &cp);
++}
++
++void hci_acl_disconn(struct hci_conn *conn, __u8 reason)
++{
++ disconnect_cp cp;
++
++ BT_DBG("%p", conn);
++
++ conn->state = BT_DISCONN;
++
++ cp.handle = __cpu_to_le16(conn->handle);
++ cp.reason = reason;
++ hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_DISCONNECT,
++ DISCONNECT_CP_SIZE, &cp);
++}
++
++void hci_add_sco(struct hci_conn *conn, __u16 handle)
++{
++ struct hci_dev *hdev = conn->hdev;
++ add_sco_cp cp;
++
++ BT_DBG("%p", conn);
++
++ conn->state = BT_CONNECT;
++ conn->out = 1;
++
++ cp.pkt_type = __cpu_to_le16(hdev->pkt_type & SCO_PTYPE_MASK);
++ cp.handle = __cpu_to_le16(handle);
++
++ hci_send_cmd(hdev, OGF_LINK_CTL, OCF_ADD_SCO, ADD_SCO_CP_SIZE, &cp);
++}
++
++static void hci_conn_timeout(unsigned long arg)
++{
++ struct hci_conn *conn = (void *)arg;
++ struct hci_dev *hdev = conn->hdev;
++
++ BT_DBG("conn %p state %d", conn, conn->state);
++
++ if (atomic_read(&conn->refcnt))
++ return;
++
++ hci_dev_lock(hdev);
++ if (conn->state == BT_CONNECTED)
++ hci_acl_disconn(conn, 0x13);
++ else
++ conn->state = BT_CLOSED;
++ hci_dev_unlock(hdev);
++ return;
++}
++
++static void hci_conn_init_timer(struct hci_conn *conn)
++{
++ init_timer(&conn->timer);
++ conn->timer.function = hci_conn_timeout;
++ conn->timer.data = (unsigned long)conn;
++}
++
++struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst)
++{
++ struct hci_conn *conn;
++
++ BT_DBG("%s dst %s", hdev->name, batostr(dst));
++
++ if (!(conn = kmalloc(sizeof(struct hci_conn), GFP_ATOMIC)))
++ return NULL;
++ memset(conn, 0, sizeof(struct hci_conn));
++
++ bacpy(&conn->dst, dst);
++ conn->type = type;
++ conn->hdev = hdev;
++ conn->state = BT_OPEN;
++
++ skb_queue_head_init(&conn->data_q);
++ hci_conn_init_timer(conn);
++
++ atomic_set(&conn->refcnt, 0);
++
++ hci_dev_hold(hdev);
++
++ if (hdev->notify)
++ hdev->notify(hdev, HCI_NOTIFY_CONN_ADD, (unsigned long) conn);
++
++ tasklet_disable(&hdev->tx_task);
++ conn_hash_add(hdev, conn);
++ tasklet_enable(&hdev->tx_task);
++
++ return conn;
++}
++
++int hci_conn_del(struct hci_conn *conn)
++{
++ struct hci_dev *hdev = conn->hdev;
++
++ BT_DBG("%s conn %p handle %d", hdev->name, conn, conn->handle);
++
++ hci_conn_del_timer(conn);
++
++ if (conn->type == SCO_LINK) {
++ struct hci_conn *acl = conn->link;
++ if (acl) {
++ acl->link = NULL;
++ hci_conn_put(acl);
++ }
++ } else {
++ struct hci_conn *sco = conn->link;
++ if (sco)
++ sco->link = NULL;
++
++ /* Unacked frames */
++ hdev->acl_cnt += conn->sent;
++ }
++
++ tasklet_disable(&hdev->tx_task);
++ conn_hash_del(hdev, conn);
++ tasklet_enable(&hdev->tx_task);
++
++ skb_queue_purge(&conn->data_q);
++
++ if (hdev->notify)
++ hdev->notify(hdev, HCI_NOTIFY_CONN_DEL, (unsigned long) conn);
++
++ hci_dev_put(hdev);
++
++ kfree(conn);
++ return 0;
++}
++
++struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
++{
++ int use_src = bacmp(src, BDADDR_ANY);
++ struct hci_dev *hdev = NULL;
++ struct list_head *p;
++
++ BT_DBG("%s -> %s", batostr(src), batostr(dst));
++
++ read_lock_bh(&hdev_list_lock);
++
++ list_for_each(p, &hdev_list) {
++ struct hci_dev *d;
++ d = list_entry(p, struct hci_dev, list);
++
++ if (!test_bit(HCI_UP, &d->flags))
++ continue;
++
++ /* Simple routing:
++ * No source address - find interface with bdaddr != dst
++ * Source address - find interface with bdaddr == src
++ */
++
++ if (use_src) {
++ if (!bacmp(&d->bdaddr, src)) {
++ hdev = d; break;
++ }
++ } else {
++ if (bacmp(&d->bdaddr, dst)) {
++ hdev = d; break;
++ }
++ }
++ }
++
++ if (hdev)
++ hci_dev_hold(hdev);
++
++ read_unlock_bh(&hdev_list_lock);
++ return hdev;
++}
++
++/* Create SCO or ACL connection.
++ * Device _must_ be locked */
++struct hci_conn * hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst)
++{
++ struct hci_conn *acl;
++
++ BT_DBG("%s dst %s", hdev->name, batostr(dst));
++
++ if (!(acl = conn_hash_lookup_ba(hdev, ACL_LINK, dst))) {
++ if (!(acl = hci_conn_add(hdev, ACL_LINK, dst)))
++ return NULL;
++ }
++
++ hci_conn_hold(acl);
++
++ if (acl->state == BT_OPEN || acl->state == BT_CLOSED)
++ hci_acl_connect(acl);
++
++ if (type == SCO_LINK) {
++ struct hci_conn *sco;
++
++ if (!(sco = conn_hash_lookup_ba(hdev, SCO_LINK, dst))) {
++ if (!(sco = hci_conn_add(hdev, SCO_LINK, dst))) {
++ hci_conn_put(acl);
++ return NULL;
++ }
++ }
++ acl->link = sco;
++ sco->link = acl;
++
++ hci_conn_hold(sco);
++
++ if (acl->state == BT_CONNECTED &&
++ (sco->state == BT_OPEN || sco->state == BT_CLOSED))
++ hci_add_sco(sco, acl->handle);
++
++ return sco;
++ } else {
++ return acl;
++ }
++}
++
++/* Authenticate remote device */
++int hci_conn_auth(struct hci_conn *conn)
++{
++ BT_DBG("conn %p", conn);
++
++ if (conn->link_mode & HCI_LM_AUTH)
++ return 1;
++
++ if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
++ auth_requested_cp ar;
++ ar.handle = __cpu_to_le16(conn->handle);
++ hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_AUTH_REQUESTED,
++ AUTH_REQUESTED_CP_SIZE, &ar);
++ }
++ return 0;
++}
++
++/* Enable encryption */
++int hci_conn_encrypt(struct hci_conn *conn)
++{
++ BT_DBG("conn %p", conn);
++
++ if (conn->link_mode & HCI_LM_ENCRYPT)
++ return 1;
++
++ if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend))
++ return 0;
++
++ if (hci_conn_auth(conn)) {
++ set_conn_encrypt_cp ce;
++ ce.handle = __cpu_to_le16(conn->handle);
++ ce.encrypt = 1;
++ hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_SET_CONN_ENCRYPT,
++ SET_CONN_ENCRYPT_CP_SIZE, &ce);
++ }
++ return 0;
++}
++
++/* Drop all connection on the device */
++void hci_conn_hash_flush(struct hci_dev *hdev)
++{
++ struct conn_hash *h = &hdev->conn_hash;
++ struct list_head *p;
++
++ BT_DBG("hdev %s", hdev->name);
++
++ p = h->list.next;
++ while (p != &h->list) {
++ struct hci_conn *c;
++
++ c = list_entry(p, struct hci_conn, list);
++ p = p->next;
++
++ c->state = BT_CLOSED;
++
++ hci_proto_disconn_ind(c, 0x16);
++ hci_conn_del(c);
++ }
++}
++
++int hci_get_conn_list(unsigned long arg)
++{
++ struct hci_conn_list_req req, *cl;
++ struct hci_conn_info *ci;
++ struct hci_dev *hdev;
++ struct list_head *p;
++ int n = 0, size;
++
++ if (copy_from_user(&req, (void *) arg, sizeof(req)))
++ return -EFAULT;
++
++ if (!(hdev = hci_dev_get(req.dev_id)))
++ return -ENODEV;
++
++ size = req.conn_num * sizeof(struct hci_conn_info) + sizeof(req);
++
++ if (verify_area(VERIFY_WRITE, (void *)arg, size))
++ return -EFAULT;
++
++ if (!(cl = (void *) kmalloc(size, GFP_KERNEL)))
++ return -ENOMEM;
++ ci = cl->conn_info;
++
++ hci_dev_lock_bh(hdev);
++ list_for_each(p, &hdev->conn_hash.list) {
++ register struct hci_conn *c;
++ c = list_entry(p, struct hci_conn, list);
++
++ bacpy(&(ci + n)->bdaddr, &c->dst);
++ (ci + n)->handle = c->handle;
++ (ci + n)->type = c->type;
++ (ci + n)->out = c->out;
++ (ci + n)->state = c->state;
++ (ci + n)->link_mode = c->link_mode;
++ n++;
++ }
++ hci_dev_unlock_bh(hdev);
++
++ cl->dev_id = hdev->id;
++ cl->conn_num = n;
++ size = n * sizeof(struct hci_conn_info) + sizeof(req);
++
++ hci_dev_put(hdev);
++
++ copy_to_user((void *) arg, cl, size);
++ kfree(cl);
++
++ return 0;
++}
++
++int hci_get_conn_info(struct hci_dev *hdev, unsigned long arg)
++{
++ struct hci_conn_info_req req;
++ struct hci_conn_info ci;
++ struct hci_conn *conn;
++ char *ptr = (void *) arg + sizeof(req);
++
++ if (copy_from_user(&req, (void *) arg, sizeof(req)))
++ return -EFAULT;
++
++ if (verify_area(VERIFY_WRITE, ptr, sizeof(ci)))
++ return -EFAULT;
++
++ hci_dev_lock_bh(hdev);
++ conn = conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
++ if (conn) {
++ bacpy(&ci.bdaddr, &conn->dst);
++ ci.handle = conn->handle;
++ ci.type = conn->type;
++ ci.out = conn->out;
++ ci.state = conn->state;
++ ci.link_mode = conn->link_mode;
++ }
++ hci_dev_unlock_bh(hdev);
++
++ if (!conn)
++ return -ENOENT;
++
++ copy_to_user(ptr, &ci, sizeof(ci));
++ return 0;
++}
+diff -urN linux-2.4.18/net/bluetooth/hci_core.c linux-2.4.18-mh9/net/bluetooth/hci_core.c
+--- linux-2.4.18/net/bluetooth/hci_core.c Fri Nov 9 23:21:21 2001
++++ linux-2.4.18-mh9/net/bluetooth/hci_core.c Mon Aug 25 18:38:12 2003
+@@ -25,11 +25,12 @@
+ /*
+ * BlueZ HCI Core.
+ *
+- * $Id: hci_core.c,v 1.22 2001/08/03 04:19:50 maxk Exp $
++ * $Id: hci_core.c,v 1.14 2002/08/26 16:57:57 maxk Exp $
+ */
+
+ #include <linux/config.h>
+ #include <linux/module.h>
++#include <linux/kmod.h>
+
+ #include <linux/types.h>
+ #include <linux/errno.h>
+@@ -50,12 +51,11 @@
+ #include <asm/unaligned.h>
+
+ #include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+ #include <net/bluetooth/hci_core.h>
+
+ #ifndef HCI_CORE_DEBUG
+-#undef DBG
+-#define DBG( A... )
++#undef BT_DBG
++#define BT_DBG( A... )
+ #endif
+
+ static void hci_cmd_task(unsigned long arg);
+@@ -63,279 +63,69 @@
+ static void hci_tx_task(unsigned long arg);
+ static void hci_notify(struct hci_dev *hdev, int event);
+
+-static rwlock_t hci_task_lock = RW_LOCK_UNLOCKED;
++rwlock_t hci_task_lock = RW_LOCK_UNLOCKED;
+
+ /* HCI device list */
+-struct hci_dev *hdev_list[HCI_MAX_DEV];
+-spinlock_t hdev_list_lock;
+-#define GET_HDEV(a) (hdev_list[a])
+-
+-/* HCI protocol list */
+-struct hci_proto *hproto_list[HCI_MAX_PROTO];
+-#define GET_HPROTO(a) (hproto_list[a])
++LIST_HEAD(hdev_list);
++rwlock_t hdev_list_lock = RW_LOCK_UNLOCKED;
+
+-/* HCI notifiers list */
+-struct notifier_block *hci_dev_notifier;
+-
+-/* HCI device notifications */
+-int hci_register_notifier(struct notifier_block *nb)
+-{
+- int err, i;
+- struct hci_dev *hdev;
+-
+- if ((err = notifier_chain_register(&hci_dev_notifier, nb)))
+- return err;
+-
+- /* Notify about already registered devices */
+- spin_lock(&hdev_list_lock);
+- for (i = 0; i < HCI_MAX_DEV; i++) {
+- if (!(hdev = GET_HDEV(i)))
+- continue;
+- if (hdev->flags & HCI_UP)
+- (*nb->notifier_call)(nb, HCI_DEV_UP, hdev);
+- }
+- spin_unlock(&hdev_list_lock);
+-
+- return 0;
+-}
+-
+-int hci_unregister_notifier(struct notifier_block *nb)
+-{
+- return notifier_chain_unregister(&hci_dev_notifier, nb);
+-}
+-
+-static inline void hci_notify(struct hci_dev *hdev, int event)
+-{
+- notifier_call_chain(&hci_dev_notifier, event, hdev);
+-}
+-
+-/* Get HCI device by index (device is locked on return)*/
+-struct hci_dev *hci_dev_get(int index)
+-{
+- struct hci_dev *hdev;
+- DBG("%d", index);
+-
+- if (index < 0 || index >= HCI_MAX_DEV)
+- return NULL;
+-
+- spin_lock(&hdev_list_lock);
+- if ((hdev = GET_HDEV(index)))
+- hci_dev_hold(hdev);
+- spin_unlock(&hdev_list_lock);
+-
+- return hdev;
+-}
+-
+-/* Flush inquiry cache */
+-void inquiry_cache_flush(struct inquiry_cache *cache)
+-{
+- struct inquiry_entry *next = cache->list, *e;
+-
+- DBG("cache %p", cache);
+-
+- cache->list = NULL;
+- while ((e = next)) {
+- next = e->next;
+- kfree(e);
+- }
+-}
+-
+-/* Lookup by bdaddr.
+- * Cache must be locked. */
+-static struct inquiry_entry * __inquiry_cache_lookup(struct inquiry_cache *cache, bdaddr_t *bdaddr)
+-{
+- struct inquiry_entry *e;
+-
+- DBG("cache %p, %s", cache, batostr(bdaddr));
+-
+- for (e = cache->list; e; e = e->next)
+- if (!bacmp(&e->info.bdaddr, bdaddr))
+- break;
+-
+- return e;
+-}
+-
+-static void inquiry_cache_update(struct inquiry_cache *cache, inquiry_info *info)
+-{
+- struct inquiry_entry *e;
+-
+- DBG("cache %p, %s", cache, batostr(&info->bdaddr));
+-
+- inquiry_cache_lock(cache);
+-
+- if (!(e = __inquiry_cache_lookup(cache, &info->bdaddr))) {
+- /* Entry not in the cache. Add new one. */
+- if (!(e = kmalloc(sizeof(struct inquiry_entry), GFP_ATOMIC)))
+- goto unlock;
+- memset(e, 0, sizeof(struct inquiry_entry));
+- e->next = cache->list;
+- cache->list = e;
+- }
+-
+- memcpy(&e->info, info, sizeof(inquiry_info));
+- e->timestamp = jiffies;
+- cache->timestamp = jiffies;
+-unlock:
+- inquiry_cache_unlock(cache);
+-}
+-
+-static int inquiry_cache_dump(struct inquiry_cache *cache, int num, __u8 *buf)
+-{
+- inquiry_info *info = (inquiry_info *) buf;
+- struct inquiry_entry *e;
+- int copied = 0;
++/* HCI protocols */
++#define HCI_MAX_PROTO 2
++struct hci_proto *hci_proto[HCI_MAX_PROTO];
+
+- inquiry_cache_lock(cache);
+-
+- for (e = cache->list; e && copied < num; e = e->next, copied++)
+- memcpy(info++, &e->info, sizeof(inquiry_info));
++/* HCI notifiers list */
++static struct notifier_block *hci_notifier;
+
+- inquiry_cache_unlock(cache);
+
+- DBG("cache %p, copied %d", cache, copied);
+- return copied;
+-}
++/* ---- HCI notifications ---- */
+
+-/* --------- BaseBand connections --------- */
+-static struct hci_conn *hci_conn_add(struct hci_dev *hdev, __u16 handle, __u8 type, bdaddr_t *dst)
++int hci_register_notifier(struct notifier_block *nb)
+ {
+- struct hci_conn *conn;
+-
+- DBG("%s handle %d dst %s", hdev->name, handle, batostr(dst));
+-
+- if ( conn_hash_lookup(&hdev->conn_hash, handle)) {
+- ERR("%s handle 0x%x already exists", hdev->name, handle);
+- return NULL;
+- }
+-
+- if (!(conn = kmalloc(sizeof(struct hci_conn), GFP_ATOMIC)))
+- return NULL;
+- memset(conn, 0, sizeof(struct hci_conn));
+-
+- bacpy(&conn->dst, dst);
+- conn->handle = handle;
+- conn->type = type;
+- conn->hdev = hdev;
+-
+- skb_queue_head_init(&conn->data_q);
+-
+- hci_dev_hold(hdev);
+- conn_hash_add(&hdev->conn_hash, handle, conn);
+-
+- return conn;
++ return notifier_chain_register(&hci_notifier, nb);
+ }
+
+-static int hci_conn_del(struct hci_dev *hdev, struct hci_conn *conn)
++int hci_unregister_notifier(struct notifier_block *nb)
+ {
+- DBG("%s conn %p handle %d", hdev->name, conn, conn->handle);
+-
+- conn_hash_del(&hdev->conn_hash, conn);
+- hci_dev_put(hdev);
+-
+- /* Unacked frames */
+- hdev->acl_cnt += conn->sent;
+-
+- skb_queue_purge(&conn->data_q);
+-
+- kfree(conn);
+- return 0;
++ return notifier_chain_unregister(&hci_notifier, nb);
+ }
+
+-/* Drop all connection on the device */
+-static void hci_conn_hash_flush(struct hci_dev *hdev)
++void hci_notify(struct hci_dev *hdev, int event)
+ {
+- struct conn_hash *h = &hdev->conn_hash;
+- struct hci_proto *hp;
+- struct list_head *p;
+-
+- DBG("hdev %s", hdev->name);
+-
+- p = h->list.next;
+- while (p != &h->list) {
+- struct hci_conn *c;
+-
+- c = list_entry(p, struct hci_conn, list);
+- p = p->next;
+-
+- if (c->type == ACL_LINK) {
+- /* ACL link notify L2CAP layer */
+- if ((hp = GET_HPROTO(HCI_PROTO_L2CAP)) && hp->disconn_ind)
+- hp->disconn_ind(c, 0x16);
+- } else {
+- /* SCO link (no notification) */
+- }
+-
+- hci_conn_del(hdev, c);
+- }
++ notifier_call_chain(&hci_notifier, event, hdev);
+ }
+
+-int hci_connect(struct hci_dev *hdev, bdaddr_t *bdaddr)
+-{
+- struct inquiry_cache *cache = &hdev->inq_cache;
+- struct inquiry_entry *e;
+- create_conn_cp cc;
+- __u16 clock_offset;
+-
+- DBG("%s bdaddr %s", hdev->name, batostr(bdaddr));
+-
+- if (!(hdev->flags & HCI_UP))
+- return -ENODEV;
+-
+- inquiry_cache_lock_bh(cache);
+-
+- if (!(e = __inquiry_cache_lookup(cache, bdaddr)) || inquiry_entry_age(e) > INQUIRY_ENTRY_AGE_MAX) {
+- cc.pscan_rep_mode = 0;
+- cc.pscan_mode = 0;
+- clock_offset = 0;
+- } else {
+- cc.pscan_rep_mode = e->info.pscan_rep_mode;
+- cc.pscan_mode = e->info.pscan_mode;
+- clock_offset = __le16_to_cpu(e->info.clock_offset) & 0x8000;
+- }
+-
+- inquiry_cache_unlock_bh(cache);
+-
+- bacpy(&cc.bdaddr, bdaddr);
+- cc.pkt_type = __cpu_to_le16(hdev->pkt_type);
+- cc.clock_offset = __cpu_to_le16(clock_offset);
+-
+- if (lmp_rswitch_capable(hdev))
+- cc.role_switch = 0x01;
+- else
+- cc.role_switch = 0x00;
+-
+- hci_send_cmd(hdev, OGF_LINK_CTL, OCF_CREATE_CONN, CREATE_CONN_CP_SIZE, &cc);
++/* ---- HCI hotplug support ---- */
+
+- return 0;
+-}
++#ifdef CONFIG_HOTPLUG
+
+-int hci_disconnect(struct hci_conn *conn, __u8 reason)
++static int hci_run_hotplug(char *dev, char *action)
+ {
+- disconnect_cp dc;
+-
+- DBG("conn %p handle %d", conn, conn->handle);
++ char *argv[3], *envp[5], dstr[20], astr[32];
+
+- dc.handle = __cpu_to_le16(conn->handle);
+- dc.reason = reason;
+- hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_DISCONNECT, DISCONNECT_CP_SIZE, &dc);
++ sprintf(dstr, "DEVICE=%s", dev);
++ sprintf(astr, "ACTION=%s", action);
+
+- return 0;
+-}
++ argv[0] = hotplug_path;
++ argv[1] = "bluetooth";
++ argv[2] = NULL;
+
+-/* --------- HCI request handling ------------ */
+-static inline void hci_req_lock(struct hci_dev *hdev)
+-{
+- down(&hdev->req_lock);
++ envp[0] = "HOME=/";
++ envp[1] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";
++ envp[2] = dstr;
++ envp[3] = astr;
++ envp[4] = NULL;
++
++ return call_usermodehelper(argv[0], argv, envp);
+ }
++#else
++#define hci_run_hotplug(A...)
++#endif
+
+-static inline void hci_req_unlock(struct hci_dev *hdev)
+-{
+- up(&hdev->req_lock);
+-}
++/* ---- HCI requests ---- */
+
+-static inline void hci_req_complete(struct hci_dev *hdev, int result)
++void hci_req_complete(struct hci_dev *hdev, int result)
+ {
+- DBG("%s result 0x%2.2x", hdev->name, result);
++ BT_DBG("%s result 0x%2.2x", hdev->name, result);
+
+ if (hdev->req_status == HCI_REQ_PEND) {
+ hdev->req_result = result;
+@@ -344,9 +134,9 @@
+ }
+ }
+
+-static inline void hci_req_cancel(struct hci_dev *hdev, int err)
++void hci_req_cancel(struct hci_dev *hdev, int err)
+ {
+- DBG("%s err 0x%2.2x", hdev->name, err);
++ BT_DBG("%s err 0x%2.2x", hdev->name, err);
+
+ if (hdev->req_status == HCI_REQ_PEND) {
+ hdev->req_result = err;
+@@ -356,23 +146,22 @@
+ }
+
+ /* Execute request and wait for completion. */
+-static int __hci_request(struct hci_dev *hdev, void (*req)(struct hci_dev *hdev, unsigned long opt),
+- unsigned long opt, __u32 timeout)
++static int __hci_request(struct hci_dev *hdev, void (*req)(struct hci_dev *hdev, unsigned long opt), unsigned long opt, __u32 timeout)
+ {
+ DECLARE_WAITQUEUE(wait, current);
+ int err = 0;
+
+- DBG("%s start", hdev->name);
++ BT_DBG("%s start", hdev->name);
+
+ hdev->req_status = HCI_REQ_PEND;
+
+ add_wait_queue(&hdev->req_wait_q, &wait);
+- current->state = TASK_INTERRUPTIBLE;
++ set_current_state(TASK_INTERRUPTIBLE);
+
+ req(hdev, opt);
+ schedule_timeout(timeout);
+
+- current->state = TASK_RUNNING;
++ set_current_state(TASK_RUNNING);
+ remove_wait_queue(&hdev->req_wait_q, &wait);
+
+ if (signal_pending(current))
+@@ -394,7 +183,7 @@
+
+ hdev->req_status = hdev->req_result = 0;
+
+- DBG("%s end: err %d", hdev->name, err);
++ BT_DBG("%s end: err %d", hdev->name, err);
+
+ return err;
+ }
+@@ -412,10 +201,9 @@
+ return ret;
+ }
+
+-/* --------- HCI requests ---------- */
+ static void hci_reset_req(struct hci_dev *hdev, unsigned long opt)
+ {
+- DBG("%s %ld", hdev->name, opt);
++ BT_DBG("%s %ld", hdev->name, opt);
+
+ /* Reset device */
+ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_RESET, 0, NULL);
+@@ -423,10 +211,10 @@
+
+ static void hci_init_req(struct hci_dev *hdev, unsigned long opt)
+ {
+- set_event_flt_cp ec;
++ set_event_flt_cp ef;
+ __u16 param;
+
+- DBG("%s %ld", hdev->name, opt);
++ BT_DBG("%s %ld", hdev->name, opt);
+
+ /* Mandatory initialization */
+
+@@ -436,14 +224,30 @@
+ /* Read Buffer Size (ACL mtu, max pkt, etc.) */
+ hci_send_cmd(hdev, OGF_INFO_PARAM, OCF_READ_BUFFER_SIZE, 0, NULL);
+
++#if 0
++ /* Host buffer size */
++ {
++ host_buffer_size_cp bs;
++ bs.acl_mtu = __cpu_to_le16(HCI_MAX_ACL_SIZE);
++ bs.sco_mtu = HCI_MAX_SCO_SIZE;
++ bs.acl_max_pkt = __cpu_to_le16(0xffff);
++ bs.sco_max_pkt = __cpu_to_le16(0xffff);
++ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_HOST_BUFFER_SIZE,
++ HOST_BUFFER_SIZE_CP_SIZE, &bs);
++ }
++#endif
++
+ /* Read BD Address */
+ hci_send_cmd(hdev, OGF_INFO_PARAM, OCF_READ_BD_ADDR, 0, NULL);
+
++ /* Read Voice Setting */
++ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_READ_VOICE_SETTING, 0, NULL);
++
+ /* Optional initialization */
+
+ /* Clear Event Filters */
+- ec.flt_type = FLT_CLEAR_ALL;
+- hci_send_cmd(hdev, OGF_HOST_CTL, OCF_SET_EVENT_FLT, 1, &ec);
++ ef.flt_type = FLT_CLEAR_ALL;
++ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_SET_EVENT_FLT, 1, &ef);
+
+ /* Page timeout ~20 secs */
+ param = __cpu_to_le16(0x8000);
+@@ -458,7 +262,7 @@
+ {
+ __u8 scan = opt;
+
+- DBG("%s %x", hdev->name, scan);
++ BT_DBG("%s %x", hdev->name, scan);
+
+ /* Inquiry and Page scans */
+ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE, 1, &scan);
+@@ -468,116 +272,272 @@
+ {
+ __u8 auth = opt;
+
+- DBG("%s %x", hdev->name, auth);
++ BT_DBG("%s %x", hdev->name, auth);
+
+ /* Authentication */
+ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_WRITE_AUTH_ENABLE, 1, &auth);
+ }
+
+-static void hci_inq_req(struct hci_dev *hdev, unsigned long opt)
++static void hci_encrypt_req(struct hci_dev *hdev, unsigned long opt)
+ {
+- struct hci_inquiry_req *ir = (struct hci_inquiry_req *) opt;
+- inquiry_cp ic;
++ __u8 encrypt = opt;
+
+- DBG("%s", hdev->name);
++ BT_DBG("%s %x", hdev->name, encrypt);
+
+- /* Start Inquiry */
+- memcpy(&ic.lap, &ir->lap, 3);
+- ic.lenght = ir->length;
+- ic.num_rsp = ir->num_rsp;
+- hci_send_cmd(hdev, OGF_LINK_CTL, OCF_INQUIRY, INQUIRY_CP_SIZE, &ic);
++ /* Authentication */
++ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_WRITE_ENCRYPT_MODE, 1, &encrypt);
+ }
+
+-/* HCI ioctl helpers */
+-int hci_dev_open(__u16 dev)
++/* Get HCI device by index.
++ * Device is locked on return. */
++struct hci_dev *hci_dev_get(int index)
+ {
+ struct hci_dev *hdev;
+- int ret = 0;
+-
+- if (!(hdev = hci_dev_get(dev)))
+- return -ENODEV;
++ struct list_head *p;
+
+- DBG("%s %p", hdev->name, hdev);
++ BT_DBG("%d", index);
+
+- hci_req_lock(hdev);
++ if (index < 0)
++ return NULL;
+
+- if (hdev->flags & HCI_UP) {
+- ret = -EALREADY;
+- goto done;
++ read_lock(&hdev_list_lock);
++ list_for_each(p, &hdev_list) {
++ hdev = list_entry(p, struct hci_dev, list);
++ if (hdev->id == index) {
++ hci_dev_hold(hdev);
++ goto done;
++ }
+ }
++ hdev = NULL;
++done:
++ read_unlock(&hdev_list_lock);
++ return hdev;
++}
+
+- if (hdev->open(hdev)) {
+- ret = -EIO;
+- goto done;
+- }
++/* ---- Inquiry support ---- */
++void inquiry_cache_flush(struct hci_dev *hdev)
++{
++ struct inquiry_cache *cache = &hdev->inq_cache;
++ struct inquiry_entry *next = cache->list, *e;
+
+- if (hdev->flags & HCI_NORMAL) {
+- atomic_set(&hdev->cmd_cnt, 1);
+- hdev->flags |= HCI_INIT;
++ BT_DBG("cache %p", cache);
+
+- //__hci_request(hdev, hci_reset_req, 0, HZ);
+- ret = __hci_request(hdev, hci_init_req, 0, HCI_INIT_TIMEOUT);
+-
+- hdev->flags &= ~HCI_INIT;
++ cache->list = NULL;
++ while ((e = next)) {
++ next = e->next;
++ kfree(e);
+ }
++}
+
+- if (!ret) {
+- hdev->flags |= HCI_UP;
+- hci_notify(hdev, HCI_DEV_UP);
+- } else {
+- /* Init failed, cleanup */
+- tasklet_kill(&hdev->rx_task);
+- tasklet_kill(&hdev->tx_task);
+- tasklet_kill(&hdev->cmd_task);
++struct inquiry_entry *inquiry_cache_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr)
++{
++ struct inquiry_cache *cache = &hdev->inq_cache;
++ struct inquiry_entry *e;
+
+- skb_queue_purge(&hdev->cmd_q);
+- skb_queue_purge(&hdev->rx_q);
++ BT_DBG("cache %p, %s", cache, batostr(bdaddr));
+
+- if (hdev->flush)
+- hdev->flush(hdev);
++ for (e = cache->list; e; e = e->next)
++ if (!bacmp(&e->info.bdaddr, bdaddr))
++ break;
++ return e;
++}
+
+- if (hdev->sent_cmd) {
+- kfree_skb(hdev->sent_cmd);
+- hdev->sent_cmd = NULL;
+- }
++void inquiry_cache_update(struct hci_dev *hdev, inquiry_info *info)
++{
++ struct inquiry_cache *cache = &hdev->inq_cache;
++ struct inquiry_entry *e;
+
+- hdev->close(hdev);
+- }
++ BT_DBG("cache %p, %s", cache, batostr(&info->bdaddr));
+
+-done:
+- hci_req_unlock(hdev);
+- hci_dev_put(hdev);
++ if (!(e = inquiry_cache_lookup(hdev, &info->bdaddr))) {
++ /* Entry not in the cache. Add new one. */
++ if (!(e = kmalloc(sizeof(struct inquiry_entry), GFP_ATOMIC)))
++ return;
++ memset(e, 0, sizeof(struct inquiry_entry));
++ e->next = cache->list;
++ cache->list = e;
++ }
+
+- return ret;
++ memcpy(&e->info, info, sizeof(inquiry_info));
++ e->timestamp = jiffies;
++ cache->timestamp = jiffies;
+ }
+
+-int hci_dev_close(__u16 dev)
++int inquiry_cache_dump(struct hci_dev *hdev, int num, __u8 *buf)
+ {
+- struct hci_dev *hdev;
+-
+- if (!(hdev = hci_dev_get(dev)))
+- return -ENODEV;
++ struct inquiry_cache *cache = &hdev->inq_cache;
++ inquiry_info *info = (inquiry_info *) buf;
++ struct inquiry_entry *e;
++ int copied = 0;
+
+- DBG("%s %p", hdev->name, hdev);
++ for (e = cache->list; e && copied < num; e = e->next, copied++)
++ memcpy(info++, &e->info, sizeof(inquiry_info));
+
+- hci_req_cancel(hdev, ENODEV);
+- hci_req_lock(hdev);
++ BT_DBG("cache %p, copied %d", cache, copied);
++ return copied;
++}
+
+- if (!(hdev->flags & HCI_UP))
+- goto done;
++static void hci_inq_req(struct hci_dev *hdev, unsigned long opt)
++{
++ struct hci_inquiry_req *ir = (struct hci_inquiry_req *) opt;
++ inquiry_cp ic;
+
+- /* Kill RX and TX tasks */
+- tasklet_kill(&hdev->rx_task);
+- tasklet_kill(&hdev->tx_task);
++ BT_DBG("%s", hdev->name);
+
+- inquiry_cache_flush(&hdev->inq_cache);
++ if (test_bit(HCI_INQUIRY, &hdev->flags))
++ return;
+
+- hci_conn_hash_flush(hdev);
++ /* Start Inquiry */
++ memcpy(&ic.lap, &ir->lap, 3);
++ ic.length = ir->length;
++ ic.num_rsp = ir->num_rsp;
++ hci_send_cmd(hdev, OGF_LINK_CTL, OCF_INQUIRY, INQUIRY_CP_SIZE, &ic);
++}
+
+- /* Clear flags */
+- hdev->flags &= HCI_SOCK;
+- hdev->flags |= HCI_NORMAL;
++int hci_inquiry(unsigned long arg)
++{
++ struct hci_inquiry_req ir;
++ struct hci_dev *hdev;
++ int err = 0, do_inquiry = 0, max_rsp;
++ long timeo;
++ __u8 *buf, *ptr;
+
++ ptr = (void *) arg;
++ if (copy_from_user(&ir, ptr, sizeof(ir)))
++ return -EFAULT;
++
++ if (!(hdev = hci_dev_get(ir.dev_id)))
++ return -ENODEV;
++
++ hci_dev_lock_bh(hdev);
++ if (inquiry_cache_age(hdev) > INQUIRY_CACHE_AGE_MAX ||
++ ir.flags & IREQ_CACHE_FLUSH) {
++ inquiry_cache_flush(hdev);
++ do_inquiry = 1;
++ }
++ hci_dev_unlock_bh(hdev);
++
++ timeo = ir.length * 2 * HZ;
++ if (do_inquiry && (err = hci_request(hdev, hci_inq_req, (unsigned long)&ir, timeo)) < 0)
++ goto done;
++
++ /* for unlimited number of responses we will use buffer with 255 entries */
++ max_rsp = (ir.num_rsp == 0) ? 255 : ir.num_rsp;
++
++ /* cache_dump can't sleep. Therefore we allocate temp buffer and then
++ * copy it to the user space.
++ */
++ if (!(buf = kmalloc(sizeof(inquiry_info) * max_rsp, GFP_KERNEL))) {
++ err = -ENOMEM;
++ goto done;
++ }
++
++ hci_dev_lock_bh(hdev);
++ ir.num_rsp = inquiry_cache_dump(hdev, max_rsp, buf);
++ hci_dev_unlock_bh(hdev);
++
++ BT_DBG("num_rsp %d", ir.num_rsp);
++
++ if (!verify_area(VERIFY_WRITE, ptr, sizeof(ir) +
++ (sizeof(inquiry_info) * ir.num_rsp))) {
++ copy_to_user(ptr, &ir, sizeof(ir));
++ ptr += sizeof(ir);
++ copy_to_user(ptr, buf, sizeof(inquiry_info) * ir.num_rsp);
++ } else
++ err = -EFAULT;
++
++ kfree(buf);
++
++done:
++ hci_dev_put(hdev);
++ return err;
++}
++
++/* ---- HCI ioctl helpers ---- */
++
++int hci_dev_open(__u16 dev)
++{
++ struct hci_dev *hdev;
++ int ret = 0;
++
++ if (!(hdev = hci_dev_get(dev)))
++ return -ENODEV;
++
++ BT_DBG("%s %p", hdev->name, hdev);
++
++ hci_req_lock(hdev);
++
++ if (test_bit(HCI_UP, &hdev->flags)) {
++ ret = -EALREADY;
++ goto done;
++ }
++
++ if (hdev->open(hdev)) {
++ ret = -EIO;
++ goto done;
++ }
++
++ if (!test_bit(HCI_RAW, &hdev->flags)) {
++ atomic_set(&hdev->cmd_cnt, 1);
++ set_bit(HCI_INIT, &hdev->flags);
++
++ //__hci_request(hdev, hci_reset_req, 0, HZ);
++ ret = __hci_request(hdev, hci_init_req, 0, HCI_INIT_TIMEOUT);
++
++ clear_bit(HCI_INIT, &hdev->flags);
++ }
++
++ if (!ret) {
++ set_bit(HCI_UP, &hdev->flags);
++ hci_notify(hdev, HCI_DEV_UP);
++ } else {
++ /* Init failed, cleanup */
++ tasklet_kill(&hdev->rx_task);
++ tasklet_kill(&hdev->tx_task);
++ tasklet_kill(&hdev->cmd_task);
++
++ skb_queue_purge(&hdev->cmd_q);
++ skb_queue_purge(&hdev->rx_q);
++
++ if (hdev->flush)
++ hdev->flush(hdev);
++
++ if (hdev->sent_cmd) {
++ kfree_skb(hdev->sent_cmd);
++ hdev->sent_cmd = NULL;
++ }
++
++ hdev->close(hdev);
++ hdev->flags = 0;
++ }
++
++done:
++ hci_req_unlock(hdev);
++ hci_dev_put(hdev);
++ return ret;
++}
++
++static int hci_dev_do_close(struct hci_dev *hdev)
++{
++ BT_DBG("%s %p", hdev->name, hdev);
++
++ hci_req_cancel(hdev, ENODEV);
++ hci_req_lock(hdev);
++
++ if (!test_and_clear_bit(HCI_UP, &hdev->flags)) {
++ hci_req_unlock(hdev);
++ return 0;
++ }
++
++ /* Kill RX and TX tasks */
++ tasklet_kill(&hdev->rx_task);
++ tasklet_kill(&hdev->tx_task);
++
++ hci_dev_lock_bh(hdev);
++ inquiry_cache_flush(hdev);
++ hci_conn_hash_flush(hdev);
++ hci_dev_unlock_bh(hdev);
++
+ hci_notify(hdev, HCI_DEV_DOWN);
+
+ if (hdev->flush)
+@@ -586,9 +546,9 @@
+ /* Reset device */
+ skb_queue_purge(&hdev->cmd_q);
+ atomic_set(&hdev->cmd_cnt, 1);
+- hdev->flags |= HCI_INIT;
+- __hci_request(hdev, hci_reset_req, 0, HZ);
+- hdev->flags &= ~HCI_INIT;
++ set_bit(HCI_INIT, &hdev->flags);
++ __hci_request(hdev, hci_reset_req, 0, HZ/4);
++ clear_bit(HCI_INIT, &hdev->flags);
+
+ /* Kill cmd task */
+ tasklet_kill(&hdev->cmd_task);
+@@ -605,17 +565,28 @@
+ }
+
+ /* After this point our queues are empty
+- * and no tasks are scheduled.
+- */
++ * and no tasks are scheduled. */
+ hdev->close(hdev);
+
+-done:
+- hci_req_unlock(hdev);
+- hci_dev_put(hdev);
++ /* Clear flags */
++ hdev->flags = 0;
+
++ hci_req_unlock(hdev);
+ return 0;
+ }
+
++int hci_dev_close(__u16 dev)
++{
++ struct hci_dev *hdev;
++ int err;
++
++ if (!(hdev = hci_dev_get(dev)))
++ return -ENODEV;
++ err = hci_dev_do_close(hdev);
++ hci_dev_put(hdev);
++ return err;
++}
++
+ int hci_dev_reset(__u16 dev)
+ {
+ struct hci_dev *hdev;
+@@ -627,16 +598,17 @@
+ hci_req_lock(hdev);
+ tasklet_disable(&hdev->tx_task);
+
+- if (!(hdev->flags & HCI_UP))
++ if (!test_bit(HCI_UP, &hdev->flags))
+ goto done;
+
+ /* Drop queues */
+ skb_queue_purge(&hdev->rx_q);
+ skb_queue_purge(&hdev->cmd_q);
+
+- inquiry_cache_flush(&hdev->inq_cache);
+-
++ hci_dev_lock_bh(hdev);
++ inquiry_cache_flush(hdev);
+ hci_conn_hash_flush(hdev);
++ hci_dev_unlock_bh(hdev);
+
+ if (hdev->flush)
+ hdev->flush(hdev);
+@@ -650,7 +622,6 @@
+ tasklet_enable(&hdev->tx_task);
+ hci_req_unlock(hdev);
+ hci_dev_put(hdev);
+-
+ return ret;
+ }
+
+@@ -669,30 +640,11 @@
+ return ret;
+ }
+
+-int hci_dev_setauth(unsigned long arg)
+-{
+- struct hci_dev *hdev;
+- struct hci_dev_req dr;
+- int ret = 0;
+-
+- if (copy_from_user(&dr, (void *) arg, sizeof(dr)))
+- return -EFAULT;
+-
+- if (!(hdev = hci_dev_get(dr.dev_id)))
+- return -ENODEV;
+-
+- ret = hci_request(hdev, hci_auth_req, dr.dev_opt, HCI_INIT_TIMEOUT);
+-
+- hci_dev_put(hdev);
+-
+- return ret;
+-}
+-
+-int hci_dev_setscan(unsigned long arg)
++int hci_dev_cmd(unsigned int cmd, unsigned long arg)
+ {
+ struct hci_dev *hdev;
+ struct hci_dev_req dr;
+- int ret = 0;
++ int err = 0;
+
+ if (copy_from_user(&dr, (void *) arg, sizeof(dr)))
+ return -EFAULT;
+@@ -700,48 +652,78 @@
+ if (!(hdev = hci_dev_get(dr.dev_id)))
+ return -ENODEV;
+
+- ret = hci_request(hdev, hci_scan_req, dr.dev_opt, HCI_INIT_TIMEOUT);
+-
+- hci_dev_put(hdev);
++ switch (cmd) {
++ case HCISETAUTH:
++ err = hci_request(hdev, hci_auth_req, dr.dev_opt, HCI_INIT_TIMEOUT);
++ break;
+
+- return ret;
+-}
++ case HCISETENCRYPT:
++ if (!lmp_encrypt_capable(hdev)) {
++ err = -EOPNOTSUPP;
++ break;
++ }
+
+-int hci_dev_setptype(unsigned long arg)
+-{
+- struct hci_dev *hdev;
+- struct hci_dev_req dr;
+- int ret = 0;
++ if (!test_bit(HCI_AUTH, &hdev->flags)) {
++ /* Auth must be enabled first */
++ err = hci_request(hdev, hci_auth_req,
++ dr.dev_opt, HCI_INIT_TIMEOUT);
++ if (err)
++ break;
++ }
++
++ err = hci_request(hdev, hci_encrypt_req,
++ dr.dev_opt, HCI_INIT_TIMEOUT);
++ break;
++
++ case HCISETSCAN:
++ err = hci_request(hdev, hci_scan_req, dr.dev_opt, HCI_INIT_TIMEOUT);
++ break;
++
++ case HCISETPTYPE:
++ hdev->pkt_type = (__u16) dr.dev_opt;
++ break;
++
++ case HCISETLINKPOL:
++ hdev->link_policy = (__u16) dr.dev_opt;
++ break;
+
+- if (copy_from_user(&dr, (void *) arg, sizeof(dr)))
+- return -EFAULT;
++ case HCISETLINKMODE:
++ hdev->link_mode = ((__u16) dr.dev_opt) & (HCI_LM_MASTER | HCI_LM_ACCEPT);
++ break;
+
+- if (!(hdev = hci_dev_get(dr.dev_id)))
+- return -ENODEV;
++ case HCISETACLMTU:
++ hdev->acl_mtu = *((__u16 *)&dr.dev_opt + 1);
++ hdev->acl_pkts = *((__u16 *)&dr.dev_opt + 0);
++ break;
+
+- hdev->pkt_type = (__u16) dr.dev_opt;
++ case HCISETSCOMTU:
++ hdev->sco_mtu = *((__u16 *)&dr.dev_opt + 1);
++ hdev->sco_pkts = *((__u16 *)&dr.dev_opt + 0);
++ break;
+
++ default:
++ err = -EINVAL;
++ break;
++ }
+ hci_dev_put(hdev);
+-
+- return ret;
++ return err;
+ }
+
+-int hci_dev_list(unsigned long arg)
++int hci_get_dev_list(unsigned long arg)
+ {
+ struct hci_dev_list_req *dl;
+ struct hci_dev_req *dr;
+- struct hci_dev *hdev;
+- int i, n, size;
++ struct list_head *p;
++ int n = 0, size;
+ __u16 dev_num;
+
+ if (get_user(dev_num, (__u16 *) arg))
+ return -EFAULT;
+
+- /* Avoid long loop, overflow */
+- if (dev_num > 2048)
++ if (!dev_num)
+ return -EINVAL;
+
+- size = dev_num * sizeof(struct hci_dev_req) + sizeof(__u16);
++ size = dev_num * sizeof(*dr) + sizeof(*dl);
+
+ if (verify_area(VERIFY_WRITE, (void *) arg, size))
+ return -EFAULT;
+@@ -750,25 +732,27 @@
+ return -ENOMEM;
+ dr = dl->dev_req;
+
+- spin_lock_bh(&hdev_list_lock);
+- for (i = 0, n = 0; i < HCI_MAX_DEV && n < dev_num; i++) {
+- if ((hdev = hdev_list[i])) {
+- (dr + n)->dev_id = hdev->id;
+- (dr + n)->dev_opt = hdev->flags;
+- n++;
+- }
++ read_lock_bh(&hdev_list_lock);
++ list_for_each(p, &hdev_list) {
++ struct hci_dev *hdev;
++ hdev = list_entry(p, struct hci_dev, list);
++ (dr + n)->dev_id = hdev->id;
++ (dr + n)->dev_opt = hdev->flags;
++ if (++n >= dev_num)
++ break;
+ }
+- spin_unlock_bh(&hdev_list_lock);
++ read_unlock_bh(&hdev_list_lock);
+
+ dl->dev_num = n;
+- size = n * sizeof(struct hci_dev_req) + sizeof(__u16);
++ size = n * sizeof(*dr) + sizeof(*dl);
+
+ copy_to_user((void *) arg, dl, size);
++ kfree(dl);
+
+ return 0;
+ }
+
+-int hci_dev_info(unsigned long arg)
++int hci_get_dev_info(unsigned long arg)
+ {
+ struct hci_dev *hdev;
+ struct hci_dev_info di;
+@@ -786,9 +770,11 @@
+ di.flags = hdev->flags;
+ di.pkt_type = hdev->pkt_type;
+ di.acl_mtu = hdev->acl_mtu;
+- di.acl_max = hdev->acl_max;
++ di.acl_pkts = hdev->acl_pkts;
+ di.sco_mtu = hdev->sco_mtu;
+- di.sco_max = hdev->sco_max;
++ di.sco_pkts = hdev->sco_pkts;
++ di.link_policy = hdev->link_policy;
++ di.link_mode = hdev->link_mode;
+
+ memcpy(&di.stat, &hdev->stat, sizeof(di.stat));
+ memcpy(&di.features, &hdev->features, sizeof(di.features));
+@@ -801,258 +787,168 @@
+ return err;
+ }
+
+-__u32 hci_dev_setmode(struct hci_dev *hdev, __u32 mode)
+-{
+- __u32 omode = hdev->flags & HCI_MODE_MASK;
+-
+- hdev->flags &= ~HCI_MODE_MASK;
+- hdev->flags |= (mode & HCI_MODE_MASK);
+
+- return omode;
+-}
++/* ---- Interface to HCI drivers ---- */
+
+-__u32 hci_dev_getmode(struct hci_dev *hdev)
++/* Register HCI device */
++int hci_register_dev(struct hci_dev *hdev)
+ {
+- return hdev->flags & HCI_MODE_MASK;
+-}
++ struct list_head *head = &hdev_list, *p;
++ int id = 0;
+
+-int hci_conn_list(unsigned long arg)
+-{
+- struct hci_conn_list_req req, *cl;
+- struct hci_conn_info *ci;
+- struct hci_dev *hdev;
+- struct list_head *p;
+- int n = 0, size;
++ BT_DBG("%p name %s type %d", hdev, hdev->name, hdev->type);
+
+- if (copy_from_user(&req, (void *) arg, sizeof(req)))
+- return -EFAULT;
++ if (!hdev->open || !hdev->close || !hdev->destruct)
++ return -EINVAL;
+
+- if (!(hdev = hci_dev_get(req.dev_id)))
+- return -ENODEV;
++ write_lock_bh(&hdev_list_lock);
+
+- /* Set a limit to avoid overlong loops, and also numeric overflow - AC */
+- if(req.conn_num < 2048)
+- return -EINVAL;
++ /* Find first available device id */
++ list_for_each(p, &hdev_list) {
++ if (list_entry(p, struct hci_dev, list)->id != id)
++ break;
++ head = p; id++;
++ }
+
+- size = req.conn_num * sizeof(struct hci_conn_info) + sizeof(req);
+-
+- if (!(cl = kmalloc(size, GFP_KERNEL)))
+- return -ENOMEM;
+- ci = cl->conn_info;
++ sprintf(hdev->name, "hci%d", id);
++ hdev->id = id;
++ list_add(&hdev->list, head);
+
+- local_bh_disable();
+- conn_hash_lock(&hdev->conn_hash);
+- list_for_each(p, &hdev->conn_hash.list) {
+- register struct hci_conn *c;
+- c = list_entry(p, struct hci_conn, list);
++ atomic_set(&hdev->refcnt, 1);
++ spin_lock_init(&hdev->lock);
++
++ hdev->flags = 0;
++ hdev->pkt_type = (HCI_DM1 | HCI_DH1 | HCI_HV1);
++ hdev->link_mode = (HCI_LM_ACCEPT);
+
+- (ci + n)->handle = c->handle;
+- bacpy(&(ci + n)->bdaddr, &c->dst);
+- n++;
+- }
+- conn_hash_unlock(&hdev->conn_hash);
+- local_bh_enable();
+-
+- cl->dev_id = hdev->id;
+- cl->conn_num = n;
+- size = n * sizeof(struct hci_conn_info) + sizeof(req);
++ tasklet_init(&hdev->cmd_task, hci_cmd_task,(unsigned long) hdev);
++ tasklet_init(&hdev->rx_task, hci_rx_task, (unsigned long) hdev);
++ tasklet_init(&hdev->tx_task, hci_tx_task, (unsigned long) hdev);
+
+- hci_dev_put(hdev);
++ skb_queue_head_init(&hdev->rx_q);
++ skb_queue_head_init(&hdev->cmd_q);
++ skb_queue_head_init(&hdev->raw_q);
+
+- if(copy_to_user((void *) arg, cl, size))
+- return -EFAULT;
+- return 0;
+-}
++ init_waitqueue_head(&hdev->req_wait_q);
++ init_MUTEX(&hdev->req_lock);
+
+-int hci_inquiry(unsigned long arg)
+-{
+- struct inquiry_cache *cache;
+- struct hci_inquiry_req ir;
+- struct hci_dev *hdev;
+- int err = 0, do_inquiry = 0;
+- long timeo;
+- __u8 *buf, *ptr;
++ inquiry_cache_init(hdev);
+
+- ptr = (void *) arg;
+- if (copy_from_user(&ir, ptr, sizeof(ir)))
+- return -EFAULT;
++ conn_hash_init(hdev);
+
+- if (!(hdev = hci_dev_get(ir.dev_id)))
+- return -ENODEV;
++ memset(&hdev->stat, 0, sizeof(struct hci_dev_stats));
+
+- cache = &hdev->inq_cache;
++ atomic_set(&hdev->promisc, 0);
+
+- inquiry_cache_lock(cache);
+- if (inquiry_cache_age(cache) > INQUIRY_CACHE_AGE_MAX || ir.flags & IREQ_CACHE_FLUSH) {
+- inquiry_cache_flush(cache);
+- do_inquiry = 1;
+- }
+- inquiry_cache_unlock(cache);
++ MOD_INC_USE_COUNT;
+
+- /* Limit inquiry time, also avoid overflows */
++ write_unlock_bh(&hdev_list_lock);
+
+- if(ir.length > 2048 || ir.num_rsp > 2048)
+- {
+- err = -EINVAL;
+- goto done;
+- }
++ hci_notify(hdev, HCI_DEV_REG);
++ hci_run_hotplug(hdev->name, "register");
+
+- timeo = ir.length * 2 * HZ;
+- if (do_inquiry && (err = hci_request(hdev, hci_inq_req, (unsigned long)&ir, timeo)) < 0)
+- goto done;
++ return id;
++}
+
+- /* cache_dump can't sleep. Therefore we allocate temp buffer and then
+- * copy it to the user space.
+- */
+- if (!(buf = kmalloc(sizeof(inquiry_info) * ir.num_rsp, GFP_KERNEL))) {
+- err = -ENOMEM;
+- goto done;
+- }
+- ir.num_rsp = inquiry_cache_dump(cache, ir.num_rsp, buf);
++/* Unregister HCI device */
++int hci_unregister_dev(struct hci_dev *hdev)
++{
++ BT_DBG("%p name %s type %d", hdev, hdev->name, hdev->type);
+
+- DBG("num_rsp %d", ir.num_rsp);
++ write_lock_bh(&hdev_list_lock);
++ list_del(&hdev->list);
++ write_unlock_bh(&hdev_list_lock);
+
+- if (!verify_area(VERIFY_WRITE, ptr, sizeof(ir) + (sizeof(inquiry_info) * ir.num_rsp))) {
+- copy_to_user(ptr, &ir, sizeof(ir));
+- ptr += sizeof(ir);
+- copy_to_user(ptr, buf, sizeof(inquiry_info) * ir.num_rsp);
+- } else
+- err = -EFAULT;
++ hci_dev_do_close(hdev);
+
+- kfree(buf);
++ hci_notify(hdev, HCI_DEV_UNREG);
++ hci_run_hotplug(hdev->name, "unregister");
+
+-done:
+ hci_dev_put(hdev);
+
+- return err;
++ MOD_DEC_USE_COUNT;
++ return 0;
+ }
+
+-/* Interface to HCI drivers */
+-
+-/* Register HCI device */
+-int hci_register_dev(struct hci_dev *hdev)
++/* Suspend HCI device */
++int hci_suspend_dev(struct hci_dev *hdev)
+ {
+- int i;
+-
+- DBG("%p name %s type %d", hdev, hdev->name, hdev->type);
+-
+- /* Find free slot */
+- spin_lock_bh(&hdev_list_lock);
+- for (i = 0; i < HCI_MAX_DEV; i++) {
+- if (!hdev_list[i]) {
+- hdev_list[i] = hdev;
++ hci_notify(hdev, HCI_DEV_SUSPEND);
++ hci_run_hotplug(hdev->name, "suspend");
++ return 0;
++}
+
+- sprintf(hdev->name, "hci%d", i);
+- atomic_set(&hdev->refcnt, 0);
+- hdev->id = i;
+- hdev->flags = HCI_NORMAL;
++/* Resume HCI device */
++int hci_resume_dev(struct hci_dev *hdev)
++{
++ hci_notify(hdev, HCI_DEV_RESUME);
++ hci_run_hotplug(hdev->name, "resume");
++ return 0;
++}
+
+- hdev->pkt_type = (HCI_DM1 | HCI_DH1);
+-
+- tasklet_init(&hdev->cmd_task, hci_cmd_task, (unsigned long) hdev);
+- tasklet_init(&hdev->rx_task, hci_rx_task, (unsigned long) hdev);
+- tasklet_init(&hdev->tx_task, hci_tx_task, (unsigned long) hdev);
+-
+- skb_queue_head_init(&hdev->rx_q);
+- skb_queue_head_init(&hdev->cmd_q);
+- skb_queue_head_init(&hdev->raw_q);
+-
+- init_waitqueue_head(&hdev->req_wait_q);
+- init_MUTEX(&hdev->req_lock);
+-
+- inquiry_cache_init(&hdev->inq_cache);
+-
+- conn_hash_init(&hdev->conn_hash);
+-
+- memset(&hdev->stat, 0, sizeof(struct hci_dev_stats));
+-
+- hci_notify(hdev, HCI_DEV_REG);
+-
+- MOD_INC_USE_COUNT;
+- break;
+- }
+- }
+- spin_unlock_bh(&hdev_list_lock);
+-
+- return (i == HCI_MAX_DEV) ? -1 : i;
+-}
+-
+-/* Unregister HCI device */
+-int hci_unregister_dev(struct hci_dev *hdev)
++/* Receive frame from HCI drivers */
++int hci_recv_frame(struct sk_buff *skb)
+ {
+- int i;
+-
+- DBG("%p name %s type %d", hdev, hdev->name, hdev->type);
+-
+- if (hdev->flags & HCI_UP)
+- hci_dev_close(hdev->id);
++ struct hci_dev *hdev = (struct hci_dev *) skb->dev;
+
+- /* Find device slot */
+- spin_lock(&hdev_list_lock);
+- for (i = 0; i < HCI_MAX_DEV; i++) {
+- if (hdev_list[i] == hdev) {
+- hdev_list[i] = NULL;
+- MOD_DEC_USE_COUNT;
+- break;
+- }
++ if (!hdev || (!test_bit(HCI_UP, &hdev->flags) &&
++ !test_bit(HCI_INIT, &hdev->flags)) ) {
++ kfree_skb(skb);
++ return -1;
+ }
+- spin_unlock(&hdev_list_lock);
+-
+- hci_notify(hdev, HCI_DEV_UNREG);
+
+- /* Sleep while device is in use */
+- while (atomic_read(&hdev->refcnt)) {
+- int sleep_cnt = 100;
++ BT_DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
+
+- DBG("%s sleeping on lock %d", hdev->name, atomic_read(&hdev->refcnt));
++ /* Incomming skb */
++ bluez_cb(skb)->incomming = 1;
+
+- sleep_on_timeout(&hdev->req_wait_q, HZ*10);
+- if (!(--sleep_cnt))
+- break;
+- }
++ /* Time stamp */
++ do_gettimeofday(&skb->stamp);
+
++ /* Queue frame for rx task */
++ skb_queue_tail(&hdev->rx_q, skb);
++ hci_sched_rx(hdev);
+ return 0;
+ }
+
+-/* Interface to upper protocols */
++/* ---- Interface to upper protocols ---- */
+
+ /* Register/Unregister protocols.
+- * hci_task_lock is used to ensure that no tasks are running.
+- */
+-int hci_register_proto(struct hci_proto *hproto)
++ * hci_task_lock is used to ensure that no tasks are running. */
++int hci_register_proto(struct hci_proto *hp)
+ {
+ int err = 0;
+
+- DBG("%p name %s", hproto, hproto->name);
++ BT_DBG("%p name %s id %d", hp, hp->name, hp->id);
+
+- if (hproto->id >= HCI_MAX_PROTO)
++ if (hp->id >= HCI_MAX_PROTO)
+ return -EINVAL;
+
+ write_lock_bh(&hci_task_lock);
+
+- if (!hproto_list[hproto->id])
+- hproto_list[hproto->id] = hproto;
++ if (!hci_proto[hp->id])
++ hci_proto[hp->id] = hp;
+ else
+- err = -1;
++ err = -EEXIST;
+
+ write_unlock_bh(&hci_task_lock);
+
+ return err;
+ }
+
+-int hci_unregister_proto(struct hci_proto *hproto)
++int hci_unregister_proto(struct hci_proto *hp)
+ {
+ int err = 0;
+
+- DBG("%p name %s", hproto, hproto->name);
++ BT_DBG("%p name %s id %d", hp, hp->name, hp->id);
+
+- if (hproto->id > HCI_MAX_PROTO)
++ if (hp->id >= HCI_MAX_PROTO)
+ return -EINVAL;
+
+ write_lock_bh(&hci_task_lock);
+
+- if (hproto_list[hproto->id])
+- hproto_list[hproto->id] = NULL;
++ if (hci_proto[hp->id])
++ hci_proto[hp->id] = NULL;
+ else
+ err = -ENOENT;
+
+@@ -1070,10 +966,14 @@
+ return -ENODEV;
+ }
+
+- DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
++ BT_DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
++
++ if (atomic_read(&hdev->promisc)) {
++ /* Time stamp */
++ do_gettimeofday(&skb->stamp);
+
+- if (hdev->flags & HCI_SOCK)
+ hci_send_to_sock(hdev, skb);
++ }
+
+ /* Get rid of skb owner, prior to sending to the driver. */
+ skb_orphan(skb);
+@@ -1081,128 +981,6 @@
+ return hdev->send(skb);
+ }
+
+-/* Connection scheduler */
+-static inline struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type, int *quote)
+-{
+- struct conn_hash *h = &hdev->conn_hash;
+- struct hci_conn *conn = NULL;
+- int num = 0, min = 0xffff;
+- struct list_head *p;
+-
+- conn_hash_lock(h);
+- list_for_each(p, &h->list) {
+- register struct hci_conn *c;
+-
+- c = list_entry(p, struct hci_conn, list);
+-
+- if (c->type != type || skb_queue_empty(&c->data_q))
+- continue;
+- num++;
+-
+- if (c->sent < min) {
+- min = c->sent;
+- conn = c;
+- }
+- }
+- conn_hash_unlock(h);
+-
+- if (conn) {
+- int q = hdev->acl_cnt / num;
+- *quote = q ? q : 1;
+- } else
+- *quote = 0;
+-
+- DBG("conn %p quote %d", conn, *quote);
+-
+- return conn;
+-}
+-
+-static inline void hci_sched_acl(struct hci_dev *hdev)
+-{
+- struct hci_conn *conn;
+- struct sk_buff *skb;
+- int quote;
+-
+- DBG("%s", hdev->name);
+-
+- while (hdev->acl_cnt && (conn = hci_low_sent(hdev, ACL_LINK, &quote))) {
+- while (quote && (skb = skb_dequeue(&conn->data_q))) {
+- DBG("skb %p len %d", skb, skb->len);
+-
+- hci_send_frame(skb);
+-
+- conn->sent++;
+- hdev->acl_cnt--;
+- quote--;
+- }
+- }
+-}
+-
+-/* Schedule SCO */
+-static inline void hci_sched_sco(struct hci_dev *hdev)
+-{
+- /* FIXME: For now we queue SCO packets to the raw queue
+-
+- while (hdev->sco_cnt && (skb = skb_dequeue(&conn->data_q))) {
+- hci_send_frame(skb);
+- conn->sco_sent++;
+- hdev->sco_cnt--;
+- }
+- */
+-}
+-
+-/* Get data from the previously sent command */
+-static void * hci_sent_cmd_data(struct hci_dev *hdev, __u16 ogf, __u16 ocf)
+-{
+- hci_command_hdr *hc;
+-
+- if (!hdev->sent_cmd)
+- return NULL;
+-
+- hc = (void *) hdev->sent_cmd->data;
+-
+- if (hc->opcode != __cpu_to_le16(cmd_opcode_pack(ogf, ocf)))
+- return NULL;
+-
+- DBG("%s ogf 0x%x ocf 0x%x", hdev->name, ogf, ocf);
+-
+- return hdev->sent_cmd->data + HCI_COMMAND_HDR_SIZE;
+-}
+-
+-/* Send raw HCI frame */
+-int hci_send_raw(struct sk_buff *skb)
+-{
+- struct hci_dev *hdev = (struct hci_dev *) skb->dev;
+-
+- if (!hdev) {
+- kfree_skb(skb);
+- return -ENODEV;
+- }
+-
+- DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
+-
+- if (hdev->flags & HCI_NORMAL) {
+- /* Queue frame according it's type */
+- switch (skb->pkt_type) {
+- case HCI_COMMAND_PKT:
+- skb_queue_tail(&hdev->cmd_q, skb);
+- hci_sched_cmd(hdev);
+- return 0;
+-
+- case HCI_ACLDATA_PKT:
+- case HCI_SCODATA_PKT:
+- /* FIXME:
+- * Check header here and queue to apropriate connection.
+- */
+- break;
+- }
+- }
+-
+- skb_queue_tail(&hdev->raw_q, skb);
+- hci_sched_tx(hdev);
+- return 0;
+-}
+-
+ /* Send HCI command */
+ int hci_send_cmd(struct hci_dev *hdev, __u16 ogf, __u16 ocf, __u32 plen, void *param)
+ {
+@@ -1210,10 +988,10 @@
+ hci_command_hdr *hc;
+ struct sk_buff *skb;
+
+- DBG("%s ogf 0x%x ocf 0x%x plen %d", hdev->name, ogf, ocf, plen);
++ BT_DBG("%s ogf 0x%x ocf 0x%x plen %d", hdev->name, ogf, ocf, plen);
+
+ if (!(skb = bluez_skb_alloc(len, GFP_ATOMIC))) {
+- ERR("%s Can't allocate memory for HCI command", hdev->name);
++ BT_ERR("%s Can't allocate memory for HCI command", hdev->name);
+ return -ENOMEM;
+ }
+
+@@ -1224,7 +1002,7 @@
+ if (plen)
+ memcpy(skb_put(skb, plen), param, plen);
+
+- DBG("skb len %d", skb->len);
++ BT_DBG("skb len %d", skb->len);
+
+ skb->pkt_type = HCI_COMMAND_PKT;
+ skb->dev = (void *) hdev;
+@@ -1234,10 +1012,28 @@
+ return 0;
+ }
+
++/* Get data from the previously sent command */
++void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 ogf, __u16 ocf)
++{
++ hci_command_hdr *hc;
++
++ if (!hdev->sent_cmd)
++ return NULL;
++
++ hc = (void *) hdev->sent_cmd->data;
++
++ if (hc->opcode != __cpu_to_le16(cmd_opcode_pack(ogf, ocf)))
++ return NULL;
++
++ BT_DBG("%s ogf 0x%x ocf 0x%x", hdev->name, ogf, ocf);
++
++ return hdev->sent_cmd->data + HCI_COMMAND_HDR_SIZE;
++}
++
+ /* Send ACL data */
+ static void hci_add_acl_hdr(struct sk_buff *skb, __u16 handle, __u16 flags)
+ {
+- int len = skb->len;
++ int len = skb->len;
+ hci_acl_hdr *ah;
+
+ ah = (hci_acl_hdr *) skb_push(skb, HCI_ACL_HDR_SIZE);
+@@ -1252,7 +1048,7 @@
+ struct hci_dev *hdev = conn->hdev;
+ struct sk_buff *list;
+
+- DBG("%s conn %p flags 0x%x", hdev->name, conn, flags);
++ BT_DBG("%s conn %p flags 0x%x", hdev->name, conn, flags);
+
+ skb->dev = (void *) hdev;
+ skb->pkt_type = HCI_ACLDATA_PKT;
+@@ -1260,12 +1056,12 @@
+
+ if (!(list = skb_shinfo(skb)->frag_list)) {
+ /* Non fragmented */
+- DBG("%s nonfrag skb %p len %d", hdev->name, skb, skb->len);
++ BT_DBG("%s nonfrag skb %p len %d", hdev->name, skb, skb->len);
+
+ skb_queue_tail(&conn->data_q, skb);
+ } else {
+ /* Fragmented */
+- DBG("%s frag %p len %d", hdev->name, skb, skb->len);
++ BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
+
+ skb_shinfo(skb)->frag_list = NULL;
+
+@@ -1280,7 +1076,7 @@
+ skb->pkt_type = HCI_ACLDATA_PKT;
+ hci_add_acl_hdr(skb, conn->handle, flags | ACL_CONT);
+
+- DBG("%s frag %p len %d", hdev->name, skb, skb->len);
++ BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
+
+ __skb_queue_tail(&conn->data_q, skb);
+ } while (list);
+@@ -1298,7 +1094,7 @@
+ struct hci_dev *hdev = conn->hdev;
+ hci_sco_hdr hs;
+
+- DBG("%s len %d", hdev->name, skb->len);
++ BT_DBG("%s len %d", hdev->name, skb->len);
+
+ if (skb->len > hdev->sco_mtu) {
+ kfree_skb(skb);
+@@ -1315,544 +1111,136 @@
+ skb->pkt_type = HCI_SCODATA_PKT;
+ skb_queue_tail(&conn->data_q, skb);
+ hci_sched_tx(hdev);
+-
+ return 0;
+ }
+
+-/* Handle HCI Event packets */
+-
+-/* Command Complete OGF LINK_CTL */
+-static void hci_cc_link_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
+-{
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- default:
+- DBG("%s Command complete: ogf LINK_CTL ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Command Complete OGF LINK_POLICY */
+-static void hci_cc_link_policy(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
+-{
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- default:
+- DBG("%s: Command complete: ogf LINK_POLICY ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Command Complete OGF HOST_CTL */
+-static void hci_cc_host_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
+-{
+- __u8 status, param;
+- void *sent;
+-
+-
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- case OCF_RESET:
+- status = *((__u8 *) skb->data);
+-
+- hci_req_complete(hdev, status);
+- break;
+-
+- case OCF_SET_EVENT_FLT:
+- status = *((__u8 *) skb->data);
+-
+- if (status) {
+- DBG("%s SET_EVENT_FLT failed %d", hdev->name, status);
+- } else {
+- DBG("%s SET_EVENT_FLT succeseful", hdev->name);
+- }
+- break;
+-
+- case OCF_WRITE_AUTH_ENABLE:
+- if (!(sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_AUTH_ENABLE)))
+- break;
+-
+- status = *((__u8 *) skb->data);
+- param = *((__u8 *) sent);
++/* ---- HCI TX task (outgoing data) ---- */
+
+- if (!status) {
+- if (param == AUTH_ENABLED)
+- hdev->flags |= HCI_AUTH;
+- else
+- hdev->flags &= ~HCI_AUTH;
+- }
+- hci_req_complete(hdev, status);
+- break;
+-
+- case OCF_WRITE_CA_TIMEOUT:
+- status = *((__u8 *) skb->data);
+-
+- if (status) {
+- DBG("%s OCF_WRITE_CA_TIMEOUT failed %d", hdev->name, status);
+- } else {
+- DBG("%s OCF_WRITE_CA_TIMEOUT succeseful", hdev->name);
+- }
+- break;
+-
+- case OCF_WRITE_PG_TIMEOUT:
+- status = *((__u8 *) skb->data);
+-
+- if (status) {
+- DBG("%s OCF_WRITE_PG_TIMEOUT failed %d", hdev->name, status);
+- } else {
+- DBG("%s: OCF_WRITE_PG_TIMEOUT succeseful", hdev->name);
+- }
+- break;
+-
+- case OCF_WRITE_SCAN_ENABLE:
+- if (!(sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE)))
+- break;
+- status = *((__u8 *) skb->data);
+- param = *((__u8 *) sent);
+-
+- DBG("param 0x%x", param);
+-
+- if (!status) {
+- switch (param) {
+- case IS_ENA_PS_ENA:
+- hdev->flags |= HCI_PSCAN | HCI_ISCAN;
+- break;
+-
+- case IS_ENA_PS_DIS:
+- hdev->flags &= ~HCI_PSCAN;
+- hdev->flags |= HCI_ISCAN;
+- break;
+-
+- case IS_DIS_PS_ENA:
+- hdev->flags &= ~HCI_ISCAN;
+- hdev->flags |= HCI_PSCAN;
+- break;
+-
+- default:
+- hdev->flags &= ~(HCI_ISCAN | HCI_PSCAN);
+- break;
+- };
+- }
+- hci_req_complete(hdev, status);
+- break;
+-
+- default:
+- DBG("%s Command complete: ogf HOST_CTL ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Command Complete OGF INFO_PARAM */
+-static void hci_cc_info_param(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
++/* HCI Connection scheduler */
++static inline struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type, int *quote)
+ {
+- read_local_features_rp *lf;
+- read_buffer_size_rp *bs;
+- read_bd_addr_rp *ba;
+-
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- case OCF_READ_LOCAL_FEATURES:
+- lf = (read_local_features_rp *) skb->data;
+-
+- if (lf->status) {
+- DBG("%s READ_LOCAL_FEATURES failed %d", hdev->name, lf->status);
+- break;
+- }
+-
+- memcpy(hdev->features, lf->features, sizeof(hdev->features));
+-
+- /* Adjust default settings according to features
+- * supported by device. */
+- if (hdev->features[0] & LMP_3SLOT)
+- hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
+-
+- if (hdev->features[0] & LMP_5SLOT)
+- hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
+-
+- DBG("%s: features 0x%x 0x%x 0x%x", hdev->name, lf->features[0], lf->features[1], lf->features[2]);
+-
+- break;
+-
+- case OCF_READ_BUFFER_SIZE:
+- bs = (read_buffer_size_rp *) skb->data;
+-
+- if (bs->status) {
+- DBG("%s READ_BUFFER_SIZE failed %d", hdev->name, bs->status);
+- break;
+- }
+-
+- hdev->acl_mtu = __le16_to_cpu(bs->acl_mtu);
+- hdev->sco_mtu = bs->sco_mtu;
+- hdev->acl_max = hdev->acl_cnt = __le16_to_cpu(bs->acl_max_pkt);
+- hdev->sco_max = hdev->sco_cnt = __le16_to_cpu(bs->sco_max_pkt);
+-
+- DBG("%s mtu: acl %d, sco %d max_pkt: acl %d, sco %d", hdev->name,
+- hdev->acl_mtu, hdev->sco_mtu, hdev->acl_max, hdev->sco_max);
++ struct conn_hash *h = &hdev->conn_hash;
++ struct hci_conn *conn = NULL;
++ int num = 0, min = ~0;
++ struct list_head *p;
+
+- break;
++ /* We don't have to lock device here. Connections are always
++ * added and removed with TX task disabled. */
++ list_for_each(p, &h->list) {
++ struct hci_conn *c;
++ c = list_entry(p, struct hci_conn, list);
+
+- case OCF_READ_BD_ADDR:
+- ba = (read_bd_addr_rp *) skb->data;
++ if (c->type != type || c->state != BT_CONNECTED
++ || skb_queue_empty(&c->data_q))
++ continue;
++ num++;
+
+- if (!ba->status) {
+- bacpy(&hdev->bdaddr, &ba->bdaddr);
+- } else {
+- DBG("%s: READ_BD_ADDR failed %d", hdev->name, ba->status);
++ if (c->sent < min) {
++ min = c->sent;
++ conn = c;
+ }
++ }
+
+- hci_req_complete(hdev, ba->status);
+- break;
++ if (conn) {
++ int cnt = (type == ACL_LINK ? hdev->acl_cnt : hdev->sco_cnt);
++ int q = cnt / num;
++ *quote = q ? q : 1;
++ } else
++ *quote = 0;
+
+- default:
+- DBG("%s Command complete: ogf INFO_PARAM ocf %x", hdev->name, ocf);
+- break;
+- };
++ BT_DBG("conn %p quote %d", conn, *quote);
++ return conn;
+ }
+
+-/* Command Status OGF LINK_CTL */
+-static void hci_cs_link_ctl(struct hci_dev *hdev, __u16 ocf, __u8 status)
++static inline void hci_acl_tx_to(struct hci_dev *hdev)
+ {
+- struct hci_proto * hp;
+-
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- case OCF_CREATE_CONN:
+- if (status) {
+- create_conn_cp *cc = hci_sent_cmd_data(hdev, OGF_LINK_CTL, OCF_CREATE_CONN);
+-
+- if (!cc)
+- break;
+-
+- DBG("%s Create connection error: status 0x%x %s", hdev->name,
+- status, batostr(&cc->bdaddr));
++ struct conn_hash *h = &hdev->conn_hash;
++ struct list_head *p;
++ struct hci_conn *c;
+
+- /* Notify upper protocols */
+- if ((hp = GET_HPROTO(HCI_PROTO_L2CAP)) && hp->connect_cfm) {
+- tasklet_disable(&hdev->tx_task);
+- hp->connect_cfm(hdev, &cc->bdaddr, status, NULL);
+- tasklet_enable(&hdev->tx_task);
+- }
+- }
+- break;
++ BT_ERR("%s ACL tx timeout", hdev->name);
+
+- case OCF_INQUIRY:
+- if (status) {
+- DBG("%s Inquiry error: status 0x%x", hdev->name, status);
+- hci_req_complete(hdev, status);
++ /* Kill stalled connections */
++ list_for_each(p, &h->list) {
++ c = list_entry(p, struct hci_conn, list);
++ if (c->type == ACL_LINK && c->sent) {
++ BT_ERR("%s killing stalled ACL connection %s",
++ hdev->name, batostr(&c->dst));
++ hci_acl_disconn(c, 0x13);
+ }
+- break;
+-
+- default:
+- DBG("%s Command status: ogf LINK_CTL ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Command Status OGF LINK_POLICY */
+-static void hci_cs_link_policy(struct hci_dev *hdev, __u16 ocf, __u8 status)
+-{
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- default:
+- DBG("%s Command status: ogf HOST_POLICY ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Command Status OGF HOST_CTL */
+-static void hci_cs_host_ctl(struct hci_dev *hdev, __u16 ocf, __u8 status)
+-{
+- DBG("%s ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- default:
+- DBG("%s Command status: ogf HOST_CTL ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Command Status OGF INFO_PARAM */
+-static void hci_cs_info_param(struct hci_dev *hdev, __u16 ocf, __u8 status)
+-{
+- DBG("%s: hci_cs_info_param: ocf 0x%x", hdev->name, ocf);
+-
+- switch (ocf) {
+- default:
+- DBG("%s Command status: ogf INFO_PARAM ocf %x", hdev->name, ocf);
+- break;
+- };
+-}
+-
+-/* Inquiry Complete */
+-static void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
+-{
+- __u8 status = *((__u8 *) skb->data);
+-
+- DBG("%s status %d", hdev->name, status);
+-
+- hci_req_complete(hdev, status);
++ }
+ }
+
+-/* Inquiry Result */
+-static void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
++static inline void hci_sched_acl(struct hci_dev *hdev)
+ {
+- inquiry_info *info = (inquiry_info *) (skb->data + 1);
+- int num_rsp = *((__u8 *) skb->data);
+-
+- DBG("%s num_rsp %d", hdev->name, num_rsp);
++ struct hci_conn *conn;
++ struct sk_buff *skb;
++ int quote;
+
+- for (; num_rsp; num_rsp--)
+- inquiry_cache_update(&hdev->inq_cache, info++);
+-}
++ BT_DBG("%s", hdev->name);
+
+-/* Connect Request */
+-static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
+-{
+- evt_conn_request *cr = (evt_conn_request *) skb->data;
+- struct hci_proto *hp;
+- accept_conn_req_cp ac;
+- int accept = 0;
++ /* ACL tx timeout must be longer than maximum
++ * link supervision timeout (40.9 seconds) */
++ if (!hdev->acl_cnt && (jiffies - hdev->acl_last_tx) > (HZ * 45))
++ hci_acl_tx_to(hdev);
+
+- DBG("%s Connection request: %s type 0x%x", hdev->name, batostr(&cr->bdaddr), cr->link_type);
++ while (hdev->acl_cnt && (conn = hci_low_sent(hdev, ACL_LINK, &quote))) {
++ while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
++ BT_DBG("skb %p len %d", skb, skb->len);
++ hci_send_frame(skb);
++ hdev->acl_last_tx = jiffies;
+
+- /* Notify upper protocols */
+- if (cr->link_type == ACL_LINK) {
+- /* ACL link notify L2CAP */
+- if ((hp = GET_HPROTO(HCI_PROTO_L2CAP)) && hp->connect_ind) {
+- tasklet_disable(&hdev->tx_task);
+- accept = hp->connect_ind(hdev, &cr->bdaddr);
+- tasklet_enable(&hdev->tx_task);
++ hdev->acl_cnt--;
++ conn->sent++;
+ }
+- } else {
+- /* SCO link (no notification) */
+- /* FIXME: Should be accept it here or let the requester (app) accept it ? */
+- accept = 1;
+- }
+-
+- if (accept) {
+- /* Connection accepted by upper layer */
+- bacpy(&ac.bdaddr, &cr->bdaddr);
+- ac.role = 0x01; /* Remain slave */
+- hci_send_cmd(hdev, OGF_LINK_CTL, OCF_ACCEPT_CONN_REQ, ACCEPT_CONN_REQ_CP_SIZE, &ac);
+- } else {
+- /* Connection rejected by upper layer */
+- /* FIXME:
+- * Should we use HCI reject here ?
+- */
+- return;
+ }
+ }
+
+-/* Connect Complete */
+-static void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
++/* Schedule SCO */
++static inline void hci_sched_sco(struct hci_dev *hdev)
+ {
+- evt_conn_complete *cc = (evt_conn_complete *) skb->data;
+- struct hci_conn *conn = NULL;
+- struct hci_proto *hp;
+-
+- DBG("%s", hdev->name);
+-
+- tasklet_disable(&hdev->tx_task);
+-
+- if (!cc->status)
+- conn = hci_conn_add(hdev, __le16_to_cpu(cc->handle), cc->link_type, &cc->bdaddr);
++ struct hci_conn *conn;
++ struct sk_buff *skb;
++ int quote;
+
+- /* Notify upper protocols */
+- if (cc->link_type == ACL_LINK) {
+- /* ACL link notify L2CAP layer */
+- if ((hp = GET_HPROTO(HCI_PROTO_L2CAP)) && hp->connect_cfm)
+- hp->connect_cfm(hdev, &cc->bdaddr, cc->status, conn);
+- } else {
+- /* SCO link (no notification) */
+- }
++ BT_DBG("%s", hdev->name);
+
+- tasklet_enable(&hdev->tx_task);
+-}
++ while (hdev->sco_cnt && (conn = hci_low_sent(hdev, SCO_LINK, &quote))) {
++ while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
++ BT_DBG("skb %p len %d", skb, skb->len);
++ hci_send_frame(skb);
+
+-/* Disconnect Complete */
+-static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
+-{
+- evt_disconn_complete *dc = (evt_disconn_complete *) skb->data;
+- struct hci_conn *conn = NULL;
+- struct hci_proto *hp;
+- __u16 handle = __le16_to_cpu(dc->handle);
+-
+- DBG("%s", hdev->name);
+-
+- if (!dc->status && (conn = conn_hash_lookup(&hdev->conn_hash, handle))) {
+- tasklet_disable(&hdev->tx_task);
+-
+- /* Notify upper protocols */
+- if (conn->type == ACL_LINK) {
+- /* ACL link notify L2CAP layer */
+- if ((hp = GET_HPROTO(HCI_PROTO_L2CAP)) && hp->disconn_ind)
+- hp->disconn_ind(conn, dc->reason);
+- } else {
+- /* SCO link (no notification) */
++ conn->sent++;
++ if (conn->sent == ~0)
++ conn->sent = 0;
+ }
+-
+- hci_conn_del(hdev, conn);
+-
+- tasklet_enable(&hdev->tx_task);
+ }
+ }
+
+-/* Number of completed packets */
+-static void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
++static void hci_tx_task(unsigned long arg)
+ {
+- evt_num_comp_pkts *nc = (evt_num_comp_pkts *) skb->data;
+- __u16 *ptr;
+- int i;
+-
+- skb_pull(skb, EVT_NUM_COMP_PKTS_SIZE);
+-
+- DBG("%s num_hndl %d", hdev->name, nc->num_hndl);
++ struct hci_dev *hdev = (struct hci_dev *) arg;
++ struct sk_buff *skb;
+
+- if (skb->len < nc->num_hndl * 4) {
+- DBG("%s bad parameters", hdev->name);
+- return;
+- }
++ read_lock(&hci_task_lock);
+
+- tasklet_disable(&hdev->tx_task);
++ BT_DBG("%s acl %d sco %d", hdev->name, hdev->acl_cnt, hdev->sco_cnt);
+
+- for (i = 0, ptr = (__u16 *) skb->data; i < nc->num_hndl; i++) {
+- struct hci_conn *conn;
+- __u16 handle, count;
++ /* Schedule queues and send stuff to HCI driver */
+
+- handle = __le16_to_cpu(get_unaligned(ptr++));
+- count = __le16_to_cpu(get_unaligned(ptr++));
++ hci_sched_acl(hdev);
+
+- hdev->acl_cnt += count;
++ hci_sched_sco(hdev);
+
+- if ((conn = conn_hash_lookup(&hdev->conn_hash, handle)))
+- conn->sent -= count;
+- }
++ /* Send next queued raw (unknown type) packet */
++ while ((skb = skb_dequeue(&hdev->raw_q)))
++ hci_send_frame(skb);
+
+- tasklet_enable(&hdev->tx_task);
+-
+- hci_sched_tx(hdev);
++ read_unlock(&hci_task_lock);
+ }
+
+-static inline void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
+-{
+- hci_event_hdr *he = (hci_event_hdr *) skb->data;
+- evt_cmd_status *cs;
+- evt_cmd_complete *ec;
+- __u16 opcode, ocf, ogf;
+-
+- skb_pull(skb, HCI_EVENT_HDR_SIZE);
+-
+- DBG("%s evt 0x%x", hdev->name, he->evt);
+-
+- switch (he->evt) {
+- case EVT_NUM_COMP_PKTS:
+- hci_num_comp_pkts_evt(hdev, skb);
+- break;
+-
+- case EVT_INQUIRY_COMPLETE:
+- hci_inquiry_complete_evt(hdev, skb);
+- break;
+-
+- case EVT_INQUIRY_RESULT:
+- hci_inquiry_result_evt(hdev, skb);
+- break;
+-
+- case EVT_CONN_REQUEST:
+- hci_conn_request_evt(hdev, skb);
+- break;
+-
+- case EVT_CONN_COMPLETE:
+- hci_conn_complete_evt(hdev, skb);
+- break;
+-
+- case EVT_DISCONN_COMPLETE:
+- hci_disconn_complete_evt(hdev, skb);
+- break;
+-
+- case EVT_CMD_STATUS:
+- cs = (evt_cmd_status *) skb->data;
+- skb_pull(skb, EVT_CMD_STATUS_SIZE);
+-
+- opcode = __le16_to_cpu(cs->opcode);
+- ogf = cmd_opcode_ogf(opcode);
+- ocf = cmd_opcode_ocf(opcode);
+-
+- switch (ogf) {
+- case OGF_INFO_PARAM:
+- hci_cs_info_param(hdev, ocf, cs->status);
+- break;
+-
+- case OGF_HOST_CTL:
+- hci_cs_host_ctl(hdev, ocf, cs->status);
+- break;
+-
+- case OGF_LINK_CTL:
+- hci_cs_link_ctl(hdev, ocf, cs->status);
+- break;
+-
+- case OGF_LINK_POLICY:
+- hci_cs_link_policy(hdev, ocf, cs->status);
+- break;
+-
+- default:
+- DBG("%s Command Status OGF %x", hdev->name, ogf);
+- break;
+- };
+-
+- if (cs->ncmd) {
+- atomic_set(&hdev->cmd_cnt, 1);
+- if (!skb_queue_empty(&hdev->cmd_q))
+- hci_sched_cmd(hdev);
+- }
+- break;
+-
+- case EVT_CMD_COMPLETE:
+- ec = (evt_cmd_complete *) skb->data;
+- skb_pull(skb, EVT_CMD_COMPLETE_SIZE);
+-
+- opcode = __le16_to_cpu(ec->opcode);
+- ogf = cmd_opcode_ogf(opcode);
+- ocf = cmd_opcode_ocf(opcode);
+-
+- switch (ogf) {
+- case OGF_INFO_PARAM:
+- hci_cc_info_param(hdev, ocf, skb);
+- break;
+-
+- case OGF_HOST_CTL:
+- hci_cc_host_ctl(hdev, ocf, skb);
+- break;
+-
+- case OGF_LINK_CTL:
+- hci_cc_link_ctl(hdev, ocf, skb);
+- break;
+-
+- case OGF_LINK_POLICY:
+- hci_cc_link_policy(hdev, ocf, skb);
+- break;
+
+- default:
+- DBG("%s Command Completed OGF %x", hdev->name, ogf);
+- break;
+- };
+-
+- if (ec->ncmd) {
+- atomic_set(&hdev->cmd_cnt, 1);
+- if (!skb_queue_empty(&hdev->cmd_q))
+- hci_sched_cmd(hdev);
+- }
+- break;
+- };
+-
+- kfree_skb(skb);
+- hdev->stat.evt_rx++;
+-}
++/* ----- HCI RX task (incomming data proccessing) ----- */
+
+ /* ACL data packet */
+ static inline void hci_acldata_packet(struct hci_dev *hdev, struct sk_buff *skb)
+@@ -1867,51 +1255,86 @@
+ flags = acl_flags(handle);
+ handle = acl_handle(handle);
+
+- DBG("%s len %d handle 0x%x flags 0x%x", hdev->name, skb->len, handle, flags);
++ BT_DBG("%s len %d handle 0x%x flags 0x%x", hdev->name, skb->len, handle, flags);
++
++ hdev->stat.acl_rx++;
+
+- if ((conn = conn_hash_lookup(&hdev->conn_hash, handle))) {
++ hci_dev_lock(hdev);
++ conn = conn_hash_lookup_handle(hdev, handle);
++ hci_dev_unlock(hdev);
++
++ if (conn) {
+ register struct hci_proto *hp;
+
+ /* Send to upper protocol */
+- if ((hp = GET_HPROTO(HCI_PROTO_L2CAP)) && hp->recv_acldata) {
++ if ((hp = hci_proto[HCI_PROTO_L2CAP]) && hp->recv_acldata) {
+ hp->recv_acldata(conn, skb, flags);
+- goto sent;
++ return;
+ }
+ } else {
+- ERR("%s ACL packet for unknown connection handle %d", hdev->name, handle);
++ BT_ERR("%s ACL packet for unknown connection handle %d",
++ hdev->name, handle);
+ }
+
+ kfree_skb(skb);
+-sent:
+- hdev->stat.acl_rx++;
+ }
+
+ /* SCO data packet */
+ static inline void hci_scodata_packet(struct hci_dev *hdev, struct sk_buff *skb)
+ {
+- DBG("%s len %d", hdev->name, skb->len);
++ hci_sco_hdr *sh = (void *) skb->data;
++ struct hci_conn *conn;
++ __u16 handle;
++
++ skb_pull(skb, HCI_SCO_HDR_SIZE);
++
++ handle = __le16_to_cpu(sh->handle);
++
++ BT_DBG("%s len %d handle 0x%x", hdev->name, skb->len, handle);
+
+- kfree_skb(skb);
+ hdev->stat.sco_rx++;
++
++ hci_dev_lock(hdev);
++ conn = conn_hash_lookup_handle(hdev, handle);
++ hci_dev_unlock(hdev);
++
++ if (conn) {
++ register struct hci_proto *hp;
++
++ /* Send to upper protocol */
++ if ((hp = hci_proto[HCI_PROTO_SCO]) && hp->recv_scodata) {
++ hp->recv_scodata(conn, skb);
++ return;
++ }
++ } else {
++ BT_ERR("%s SCO packet for unknown connection handle %d",
++ hdev->name, handle);
++ }
++
++ kfree_skb(skb);
+ }
+
+-/* ----- HCI tasks ----- */
+ void hci_rx_task(unsigned long arg)
+ {
+ struct hci_dev *hdev = (struct hci_dev *) arg;
+ struct sk_buff *skb;
+
+- DBG("%s", hdev->name);
++ BT_DBG("%s", hdev->name);
+
+ read_lock(&hci_task_lock);
+
+ while ((skb = skb_dequeue(&hdev->rx_q))) {
+- if (hdev->flags & HCI_SOCK) {
++ if (atomic_read(&hdev->promisc)) {
+ /* Send copy to the sockets */
+ hci_send_to_sock(hdev, skb);
+ }
+
+- if (hdev->flags & HCI_INIT) {
++ if (test_bit(HCI_RAW, &hdev->flags)) {
++ kfree_skb(skb);
++ continue;
++ }
++
++ if (test_bit(HCI_INIT, &hdev->flags)) {
+ /* Don't process data packets in this states. */
+ switch (skb->pkt_type) {
+ case HCI_ACLDATA_PKT:
+@@ -1921,64 +1344,43 @@
+ };
+ }
+
+- if (hdev->flags & HCI_NORMAL) {
+- /* Process frame */
+- switch (skb->pkt_type) {
+- case HCI_EVENT_PKT:
+- hci_event_packet(hdev, skb);
+- break;
++ /* Process frame */
++ switch (skb->pkt_type) {
++ case HCI_EVENT_PKT:
++ hci_event_packet(hdev, skb);
++ break;
+
+- case HCI_ACLDATA_PKT:
+- DBG("%s ACL data packet", hdev->name);
+- hci_acldata_packet(hdev, skb);
+- break;
++ case HCI_ACLDATA_PKT:
++ BT_DBG("%s ACL data packet", hdev->name);
++ hci_acldata_packet(hdev, skb);
++ break;
+
+- case HCI_SCODATA_PKT:
+- DBG("%s SCO data packet", hdev->name);
+- hci_scodata_packet(hdev, skb);
+- break;
++ case HCI_SCODATA_PKT:
++ BT_DBG("%s SCO data packet", hdev->name);
++ hci_scodata_packet(hdev, skb);
++ break;
+
+- default:
+- kfree_skb(skb);
+- break;
+- };
+- } else {
++ default:
+ kfree_skb(skb);
++ break;
+ }
+ }
+
+ read_unlock(&hci_task_lock);
+ }
+
+-static void hci_tx_task(unsigned long arg)
+-{
+- struct hci_dev *hdev = (struct hci_dev *) arg;
+- struct sk_buff *skb;
+-
+- read_lock(&hci_task_lock);
+-
+- DBG("%s acl %d sco %d", hdev->name, hdev->acl_cnt, hdev->sco_cnt);
+-
+- /* Schedule queues and send stuff to HCI driver */
+-
+- hci_sched_acl(hdev);
+-
+- hci_sched_sco(hdev);
+-
+- /* Send next queued raw (unknown type) packet */
+- while ((skb = skb_dequeue(&hdev->raw_q)))
+- hci_send_frame(skb);
+-
+- read_unlock(&hci_task_lock);
+-}
+-
+ static void hci_cmd_task(unsigned long arg)
+ {
+ struct hci_dev *hdev = (struct hci_dev *) arg;
+ struct sk_buff *skb;
+
+- DBG("%s cmd %d", hdev->name, atomic_read(&hdev->cmd_cnt));
++ BT_DBG("%s cmd %d", hdev->name, atomic_read(&hdev->cmd_cnt));
+
++ if (!atomic_read(&hdev->cmd_cnt) && (jiffies - hdev->cmd_last_tx) > HZ) {
++ BT_ERR("%s command tx timeout", hdev->name);
++ atomic_set(&hdev->cmd_cnt, 1);
++ }
++
+ /* Send queued commands */
+ if (atomic_read(&hdev->cmd_cnt) && (skb = skb_dequeue(&hdev->cmd_q))) {
+ if (hdev->sent_cmd)
+@@ -1987,6 +1389,7 @@
+ if ((hdev->sent_cmd = skb_clone(skb, GFP_ATOMIC))) {
+ atomic_dec(&hdev->cmd_cnt);
+ hci_send_frame(skb);
++ hdev->cmd_last_tx = jiffies;
+ } else {
+ skb_queue_head(&hdev->cmd_q, skb);
+ hci_sched_cmd(hdev);
+@@ -1994,33 +1397,10 @@
+ }
+ }
+
+-/* Receive frame from HCI drivers */
+-int hci_recv_frame(struct sk_buff *skb)
+-{
+- struct hci_dev *hdev = (struct hci_dev *) skb->dev;
+-
+- if (!hdev || !(hdev->flags & (HCI_UP | HCI_INIT))) {
+- kfree_skb(skb);
+- return -1;
+- }
+-
+- DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
+-
+- /* Incomming skb */
+- bluez_cb(skb)->incomming = 1;
+-
+- /* Queue frame for rx task */
+- skb_queue_tail(&hdev->rx_q, skb);
+- hci_sched_rx(hdev);
+-
+- return 0;
+-}
++/* ---- Initialization ---- */
+
+ int hci_core_init(void)
+ {
+- /* Init locks */
+- spin_lock_init(&hdev_list_lock);
+-
+ return 0;
+ }
+
+@@ -2028,5 +1408,3 @@
+ {
+ return 0;
+ }
+-
+-MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/hci_event.c linux-2.4.18-mh9/net/bluetooth/hci_event.c
+--- linux-2.4.18/net/bluetooth/hci_event.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/hci_event.c Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,927 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * HCI Events.
++ *
++ * $Id: hci_event.c,v 1.4 2002/07/27 18:14:38 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/init.h>
++#include <linux/skbuff.h>
++#include <linux/interrupt.h>
++#include <linux/notifier.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++
++#ifndef HCI_CORE_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
++
++/* Handle HCI Event packets */
++
++/* Command Complete OGF LINK_CTL */
++static void hci_cc_link_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
++{
++ __u8 status;
++
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ case OCF_INQUIRY_CANCEL:
++ status = *((__u8 *) skb->data);
++
++ if (status) {
++ BT_DBG("%s Inquiry cancel error: status 0x%x", hdev->name, status);
++ } else {
++ clear_bit(HCI_INQUIRY, &hdev->flags);
++ hci_req_complete(hdev, status);
++ }
++ break;
++
++ default:
++ BT_DBG("%s Command complete: ogf LINK_CTL ocf %x", hdev->name, ocf);
++ break;
++ };
++}
++
++/* Command Complete OGF LINK_POLICY */
++static void hci_cc_link_policy(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
++{
++ struct hci_conn *conn;
++ role_discovery_rp *rd;
++
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ case OCF_ROLE_DISCOVERY:
++ rd = (void *) skb->data;
++
++ if (rd->status)
++ break;
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_handle(hdev, __le16_to_cpu(rd->handle));
++ if (conn) {
++ if (rd->role)
++ conn->link_mode &= ~HCI_LM_MASTER;
++ else
++ conn->link_mode |= HCI_LM_MASTER;
++ }
++
++ hci_dev_unlock(hdev);
++ break;
++
++ default:
++ BT_DBG("%s: Command complete: ogf LINK_POLICY ocf %x",
++ hdev->name, ocf);
++ break;
++ };
++}
++
++/* Command Complete OGF HOST_CTL */
++static void hci_cc_host_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
++{
++ __u8 status, param;
++ __u16 setting;
++ read_voice_setting_rp *vs;
++ void *sent;
++
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ case OCF_RESET:
++ status = *((__u8 *) skb->data);
++ hci_req_complete(hdev, status);
++ break;
++
++ case OCF_SET_EVENT_FLT:
++ status = *((__u8 *) skb->data);
++ if (status) {
++ BT_DBG("%s SET_EVENT_FLT failed %d", hdev->name, status);
++ } else {
++ BT_DBG("%s SET_EVENT_FLT succeseful", hdev->name);
++ }
++ break;
++
++ case OCF_WRITE_AUTH_ENABLE:
++ sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_AUTH_ENABLE);
++ if (!sent)
++ break;
++
++ status = *((__u8 *) skb->data);
++ param = *((__u8 *) sent);
++
++ if (!status) {
++ if (param == AUTH_ENABLED)
++ set_bit(HCI_AUTH, &hdev->flags);
++ else
++ clear_bit(HCI_AUTH, &hdev->flags);
++ }
++ hci_req_complete(hdev, status);
++ break;
++
++ case OCF_WRITE_ENCRYPT_MODE:
++ sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_ENCRYPT_MODE);
++ if (!sent)
++ break;
++
++ status = *((__u8 *) skb->data);
++ param = *((__u8 *) sent);
++
++ if (!status) {
++ if (param)
++ set_bit(HCI_ENCRYPT, &hdev->flags);
++ else
++ clear_bit(HCI_ENCRYPT, &hdev->flags);
++ }
++ hci_req_complete(hdev, status);
++ break;
++
++ case OCF_WRITE_CA_TIMEOUT:
++ status = *((__u8 *) skb->data);
++ if (status) {
++ BT_DBG("%s OCF_WRITE_CA_TIMEOUT failed %d", hdev->name, status);
++ } else {
++ BT_DBG("%s OCF_WRITE_CA_TIMEOUT succeseful", hdev->name);
++ }
++ break;
++
++ case OCF_WRITE_PG_TIMEOUT:
++ status = *((__u8 *) skb->data);
++ if (status) {
++ BT_DBG("%s OCF_WRITE_PG_TIMEOUT failed %d", hdev->name, status);
++ } else {
++ BT_DBG("%s: OCF_WRITE_PG_TIMEOUT succeseful", hdev->name);
++ }
++ break;
++
++ case OCF_WRITE_SCAN_ENABLE:
++ sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE);
++ if (!sent)
++ break;
++
++ status = *((__u8 *) skb->data);
++ param = *((__u8 *) sent);
++
++ BT_DBG("param 0x%x", param);
++
++ if (!status) {
++ clear_bit(HCI_PSCAN, &hdev->flags);
++ clear_bit(HCI_ISCAN, &hdev->flags);
++ if (param & SCAN_INQUIRY)
++ set_bit(HCI_ISCAN, &hdev->flags);
++
++ if (param & SCAN_PAGE)
++ set_bit(HCI_PSCAN, &hdev->flags);
++ }
++ hci_req_complete(hdev, status);
++ break;
++
++ case OCF_READ_VOICE_SETTING:
++ vs = (read_voice_setting_rp *) skb->data;
++
++ if (vs->status) {
++ BT_DBG("%s READ_VOICE_SETTING failed %d", hdev->name, vc->status);
++ break;
++ }
++
++ setting = __le16_to_cpu(vs->voice_setting);
++
++ if (hdev->voice_setting != setting ) {
++ hdev->voice_setting = setting;
++
++ BT_DBG("%s: voice setting 0x%04x", hdev->name, setting);
++
++ if (hdev->notify)
++ hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING, 0);
++ }
++
++ break;
++
++ case OCF_WRITE_VOICE_SETTING:
++ sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_VOICE_SETTING);
++ if (!sent)
++ break;
++
++ status = *((__u8 *) skb->data);
++ setting = __le16_to_cpu(get_unaligned((__u16 *) sent));
++
++ if (!status && hdev->voice_setting != setting) {
++ hdev->voice_setting = setting;
++
++ BT_DBG("%s: voice setting 0x%04x", hdev->name, setting);
++
++ if (hdev->notify)
++ hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING, 0);
++ }
++ hci_req_complete(hdev, status);
++ break;
++
++ case OCF_HOST_BUFFER_SIZE:
++ status = *((__u8 *) skb->data);
++ if (status) {
++ BT_DBG("%s OCF_BUFFER_SIZE failed %d", hdev->name, status);
++ hci_req_complete(hdev, status);
++ }
++ break;
++
++ default:
++ BT_DBG("%s Command complete: ogf HOST_CTL ocf %x", hdev->name, ocf);
++ break;
++ };
++}
++
++/* Command Complete OGF INFO_PARAM */
++static void hci_cc_info_param(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
++{
++ read_local_features_rp *lf;
++ read_buffer_size_rp *bs;
++ read_bd_addr_rp *ba;
++
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ case OCF_READ_LOCAL_FEATURES:
++ lf = (read_local_features_rp *) skb->data;
++
++ if (lf->status) {
++ BT_DBG("%s READ_LOCAL_FEATURES failed %d", hdev->name, lf->status);
++ break;
++ }
++
++ memcpy(hdev->features, lf->features, sizeof(hdev->features));
++
++ /* Adjust default settings according to features
++ * supported by device. */
++ if (hdev->features[0] & LMP_3SLOT)
++ hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
++
++ if (hdev->features[0] & LMP_5SLOT)
++ hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
++
++ if (hdev->features[1] & LMP_HV2)
++ hdev->pkt_type |= (HCI_HV2);
++
++ if (hdev->features[1] & LMP_HV3)
++ hdev->pkt_type |= (HCI_HV3);
++
++ BT_DBG("%s: features 0x%x 0x%x 0x%x", hdev->name, lf->features[0], lf->features[1], lf->features[2]);
++
++ break;
++
++ case OCF_READ_BUFFER_SIZE:
++ bs = (read_buffer_size_rp *) skb->data;
++
++ if (bs->status) {
++ BT_DBG("%s READ_BUFFER_SIZE failed %d", hdev->name, bs->status);
++ hci_req_complete(hdev, bs->status);
++ break;
++ }
++
++ hdev->acl_mtu = __le16_to_cpu(bs->acl_mtu);
++ hdev->sco_mtu = bs->sco_mtu ? bs->sco_mtu : 64;
++ hdev->acl_pkts = hdev->acl_cnt = __le16_to_cpu(bs->acl_max_pkt);
++ hdev->sco_pkts = hdev->sco_cnt = __le16_to_cpu(bs->sco_max_pkt);
++
++ BT_DBG("%s mtu: acl %d, sco %d max_pkt: acl %d, sco %d", hdev->name,
++ hdev->acl_mtu, hdev->sco_mtu, hdev->acl_pkts, hdev->sco_pkts);
++
++ break;
++
++ case OCF_READ_BD_ADDR:
++ ba = (read_bd_addr_rp *) skb->data;
++
++ if (!ba->status) {
++ bacpy(&hdev->bdaddr, &ba->bdaddr);
++ } else {
++ BT_DBG("%s: READ_BD_ADDR failed %d", hdev->name, ba->status);
++ }
++
++ hci_req_complete(hdev, ba->status);
++ break;
++
++ default:
++ BT_DBG("%s Command complete: ogf INFO_PARAM ocf %x", hdev->name, ocf);
++ break;
++ };
++}
++
++/* Command Status OGF LINK_CTL */
++static inline void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
++{
++ struct hci_conn *conn;
++ create_conn_cp *cc = hci_sent_cmd_data(hdev, OGF_LINK_CTL, OCF_CREATE_CONN);
++
++ if (!cc)
++ return;
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_ba(hdev, ACL_LINK, &cc->bdaddr);
++
++ BT_DBG("%s status 0x%x bdaddr %s conn %p", hdev->name,
++ status, batostr(&cc->bdaddr), conn);
++
++ if (status) {
++ if (conn) {
++ conn->state = BT_CLOSED;
++ hci_proto_connect_cfm(conn, status);
++ hci_conn_del(conn);
++ }
++ } else {
++ if (!conn) {
++ conn = hci_conn_add(hdev, ACL_LINK, &cc->bdaddr);
++ if (conn) {
++ conn->out = 1;
++ conn->link_mode |= HCI_LM_MASTER;
++ } else
++ BT_ERR("No memmory for new connection");
++ }
++ }
++
++ hci_dev_unlock(hdev);
++}
++
++static void hci_cs_link_ctl(struct hci_dev *hdev, __u16 ocf, __u8 status)
++{
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ case OCF_CREATE_CONN:
++ hci_cs_create_conn(hdev, status);
++ break;
++
++ case OCF_ADD_SCO:
++ if (status) {
++ struct hci_conn *acl, *sco;
++ add_sco_cp *cp = hci_sent_cmd_data(hdev,
++ OGF_LINK_CTL, OCF_ADD_SCO);
++ __u16 handle;
++
++ if (!cp)
++ break;
++
++ handle = __le16_to_cpu(cp->handle);
++
++ BT_DBG("%s Add SCO error: handle %d status 0x%x", hdev->name, handle, status);
++
++ hci_dev_lock(hdev);
++
++ acl = conn_hash_lookup_handle(hdev, handle);
++ if (acl && (sco = acl->link)) {
++ sco->state = BT_CLOSED;
++ hci_proto_connect_cfm(sco, status);
++ hci_conn_del(sco);
++ }
++
++ hci_dev_unlock(hdev);
++ }
++ break;
++
++ case OCF_INQUIRY:
++ if (status) {
++ BT_DBG("%s Inquiry error: status 0x%x", hdev->name, status);
++ hci_req_complete(hdev, status);
++ } else {
++ set_bit(HCI_INQUIRY, &hdev->flags);
++ }
++ break;
++
++ default:
++ BT_DBG("%s Command status: ogf LINK_CTL ocf %x status %d",
++ hdev->name, ocf, status);
++ break;
++ };
++}
++
++/* Command Status OGF LINK_POLICY */
++static void hci_cs_link_policy(struct hci_dev *hdev, __u16 ocf, __u8 status)
++{
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ default:
++ BT_DBG("%s Command status: ogf HOST_POLICY ocf %x", hdev->name, ocf);
++ break;
++ };
++}
++
++/* Command Status OGF HOST_CTL */
++static void hci_cs_host_ctl(struct hci_dev *hdev, __u16 ocf, __u8 status)
++{
++ BT_DBG("%s ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ default:
++ BT_DBG("%s Command status: ogf HOST_CTL ocf %x", hdev->name, ocf);
++ break;
++ };
++}
++
++/* Command Status OGF INFO_PARAM */
++static void hci_cs_info_param(struct hci_dev *hdev, __u16 ocf, __u8 status)
++{
++ BT_DBG("%s: hci_cs_info_param: ocf 0x%x", hdev->name, ocf);
++
++ switch (ocf) {
++ default:
++ BT_DBG("%s Command status: ogf INFO_PARAM ocf %x", hdev->name, ocf);
++ break;
++ };
++}
++
++/* Inquiry Complete */
++static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ __u8 status = *((__u8 *) skb->data);
++
++ BT_DBG("%s status %d", hdev->name, status);
++
++ clear_bit(HCI_INQUIRY, &hdev->flags);
++ hci_req_complete(hdev, status);
++}
++
++/* Inquiry Result */
++static inline void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ inquiry_info *info = (inquiry_info *) (skb->data + 1);
++ int num_rsp = *((__u8 *) skb->data);
++
++ BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
++
++ hci_dev_lock(hdev);
++ for (; num_rsp; num_rsp--)
++ inquiry_cache_update(hdev, info++);
++ hci_dev_unlock(hdev);
++}
++
++/* Connect Request */
++static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_conn_request *cr = (evt_conn_request *) skb->data;
++ int mask = hdev->link_mode;
++
++ BT_DBG("%s Connection request: %s type 0x%x", hdev->name,
++ batostr(&cr->bdaddr), cr->link_type);
++
++ mask |= hci_proto_connect_ind(hdev, &cr->bdaddr, cr->link_type);
++
++ if (mask & HCI_LM_ACCEPT) {
++ /* Connection accepted */
++ struct hci_conn *conn;
++ accept_conn_req_cp ac;
++
++ hci_dev_lock(hdev);
++ conn = conn_hash_lookup_ba(hdev, cr->link_type, &cr->bdaddr);
++ if (!conn) {
++ if (!(conn = hci_conn_add(hdev, cr->link_type, &cr->bdaddr))) {
++ BT_ERR("No memmory for new connection");
++ hci_dev_unlock(hdev);
++ return;
++ }
++ }
++ conn->state = BT_CONNECT;
++ hci_dev_unlock(hdev);
++
++ bacpy(&ac.bdaddr, &cr->bdaddr);
++
++ if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
++ ac.role = 0x00; /* Become master */
++ else
++ ac.role = 0x01; /* Remain slave */
++
++ hci_send_cmd(hdev, OGF_LINK_CTL, OCF_ACCEPT_CONN_REQ,
++ ACCEPT_CONN_REQ_CP_SIZE, &ac);
++ } else {
++ /* Connection rejected */
++ reject_conn_req_cp rc;
++
++ bacpy(&rc.bdaddr, &cr->bdaddr);
++ rc.reason = 0x0f;
++ hci_send_cmd(hdev, OGF_LINK_CTL, OCF_REJECT_CONN_REQ,
++ REJECT_CONN_REQ_CP_SIZE, &rc);
++ }
++}
++
++/* Connect Complete */
++static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_conn_complete *cc = (evt_conn_complete *) skb->data;
++ struct hci_conn *conn = NULL;
++
++ BT_DBG("%s", hdev->name);
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_ba(hdev, cc->link_type, &cc->bdaddr);
++ if (!conn) {
++ hci_dev_unlock(hdev);
++ return;
++ }
++
++ if (!cc->status) {
++ conn->handle = __le16_to_cpu(cc->handle);
++ conn->state = BT_CONNECTED;
++
++ if (test_bit(HCI_AUTH, &hdev->flags))
++ conn->link_mode |= HCI_LM_AUTH;
++
++ if (test_bit(HCI_ENCRYPT, &hdev->flags))
++ conn->link_mode |= HCI_LM_ENCRYPT;
++
++
++ /* Set link policy */
++ if (conn->type == ACL_LINK && hdev->link_policy) {
++ write_link_policy_cp lp;
++ lp.handle = cc->handle;
++ lp.policy = __cpu_to_le16(hdev->link_policy);
++ hci_send_cmd(hdev, OGF_LINK_POLICY, OCF_WRITE_LINK_POLICY,
++ WRITE_LINK_POLICY_CP_SIZE, &lp);
++ }
++
++ /* Set packet type for incomming connection */
++ if (!conn->out) {
++ change_conn_ptype_cp cp;
++ cp.handle = cc->handle;
++ cp.pkt_type = (conn->type == ACL_LINK) ?
++ __cpu_to_le16(hdev->pkt_type & ACL_PTYPE_MASK):
++ __cpu_to_le16(hdev->pkt_type & SCO_PTYPE_MASK);
++
++ hci_send_cmd(hdev, OGF_LINK_CTL, OCF_CHANGE_CONN_PTYPE,
++ CHANGE_CONN_PTYPE_CP_SIZE, &cp);
++ }
++ } else
++ conn->state = BT_CLOSED;
++
++ if (conn->type == ACL_LINK) {
++ struct hci_conn *sco = conn->link;
++ if (sco) {
++ if (!cc->status)
++ hci_add_sco(sco, conn->handle);
++ else {
++ hci_proto_connect_cfm(sco, cc->status);
++ hci_conn_del(sco);
++ }
++ }
++ }
++
++ hci_proto_connect_cfm(conn, cc->status);
++ if (cc->status)
++ hci_conn_del(conn);
++
++ hci_dev_unlock(hdev);
++}
++
++/* Disconnect Complete */
++static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_disconn_complete *dc = (evt_disconn_complete *) skb->data;
++ struct hci_conn *conn = NULL;
++ __u16 handle = __le16_to_cpu(dc->handle);
++
++ BT_DBG("%s status %d", hdev->name, dc->status);
++
++ if (dc->status)
++ return;
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_handle(hdev, handle);
++ if (conn) {
++ conn->state = BT_CLOSED;
++ hci_proto_disconn_ind(conn, dc->reason);
++ hci_conn_del(conn);
++ }
++
++ hci_dev_unlock(hdev);
++}
++
++/* Number of completed packets */
++static inline void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_num_comp_pkts *nc = (evt_num_comp_pkts *) skb->data;
++ __u16 *ptr;
++ int i;
++
++ skb_pull(skb, EVT_NUM_COMP_PKTS_SIZE);
++
++ BT_DBG("%s num_hndl %d", hdev->name, nc->num_hndl);
++
++ if (skb->len < nc->num_hndl * 4) {
++ BT_DBG("%s bad parameters", hdev->name);
++ return;
++ }
++
++ tasklet_disable(&hdev->tx_task);
++
++ for (i = 0, ptr = (__u16 *) skb->data; i < nc->num_hndl; i++) {
++ struct hci_conn *conn;
++ __u16 handle, count;
++
++ handle = __le16_to_cpu(get_unaligned(ptr++));
++ count = __le16_to_cpu(get_unaligned(ptr++));
++
++ conn = conn_hash_lookup_handle(hdev, handle);
++ if (conn) {
++ conn->sent -= count;
++
++ if (conn->type == SCO_LINK) {
++ if ((hdev->sco_cnt += count) > hdev->sco_pkts)
++ hdev->sco_cnt = hdev->sco_pkts;
++ } else {
++ if ((hdev->acl_cnt += count) > hdev->acl_pkts)
++ hdev->acl_cnt = hdev->acl_pkts;
++ }
++ }
++ }
++ hci_sched_tx(hdev);
++
++ tasklet_enable(&hdev->tx_task);
++}
++
++/* Role Change */
++static inline void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_role_change *rc = (evt_role_change *) skb->data;
++ struct hci_conn *conn = NULL;
++
++ BT_DBG("%s status %d", hdev->name, rc->status);
++
++ if (rc->status)
++ return;
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_ba(hdev, ACL_LINK, &rc->bdaddr);
++ if (conn) {
++ if (rc->role)
++ conn->link_mode &= ~HCI_LM_MASTER;
++ else
++ conn->link_mode |= HCI_LM_MASTER;
++ }
++
++ hci_dev_unlock(hdev);
++}
++
++/* Authentication Complete */
++static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_auth_complete *ac = (evt_auth_complete *) skb->data;
++ struct hci_conn *conn = NULL;
++ __u16 handle = __le16_to_cpu(ac->handle);
++
++ BT_DBG("%s status %d", hdev->name, ac->status);
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_handle(hdev, handle);
++ if (conn) {
++ if (!ac->status)
++ conn->link_mode |= HCI_LM_AUTH;
++ clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
++
++ hci_proto_auth_cfm(conn, ac->status);
++
++ if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
++ if (!ac->status) {
++ set_conn_encrypt_cp ce;
++ ce.handle = __cpu_to_le16(conn->handle);
++ ce.encrypt = 1;
++ hci_send_cmd(conn->hdev, OGF_LINK_CTL,
++ OCF_SET_CONN_ENCRYPT,
++ SET_CONN_ENCRYPT_CP_SIZE, &ce);
++ } else {
++ clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
++ hci_proto_encrypt_cfm(conn, ac->status);
++ }
++ }
++ }
++
++ hci_dev_unlock(hdev);
++}
++
++/* Encryption Change */
++static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ evt_encrypt_change *ec = (evt_encrypt_change *) skb->data;
++ struct hci_conn *conn = NULL;
++ __u16 handle = __le16_to_cpu(ec->handle);
++
++ BT_DBG("%s status %d", hdev->name, ec->status);
++
++ hci_dev_lock(hdev);
++
++ conn = conn_hash_lookup_handle(hdev, handle);
++ if (conn) {
++ if (!ec->status) {
++ if (ec->encrypt)
++ conn->link_mode |= HCI_LM_ENCRYPT;
++ else
++ conn->link_mode &= ~HCI_LM_ENCRYPT;
++ }
++ clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
++
++ hci_proto_encrypt_cfm(conn, ec->status);
++ }
++
++ hci_dev_unlock(hdev);
++}
++
++void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
++{
++ hci_event_hdr *he = (hci_event_hdr *) skb->data;
++ evt_cmd_status *cs;
++ evt_cmd_complete *ec;
++ __u16 opcode, ocf, ogf;
++
++ skb_pull(skb, HCI_EVENT_HDR_SIZE);
++
++ BT_DBG("%s evt 0x%x", hdev->name, he->evt);
++
++ switch (he->evt) {
++ case EVT_NUM_COMP_PKTS:
++ hci_num_comp_pkts_evt(hdev, skb);
++ break;
++
++ case EVT_INQUIRY_COMPLETE:
++ hci_inquiry_complete_evt(hdev, skb);
++ break;
++
++ case EVT_INQUIRY_RESULT:
++ hci_inquiry_result_evt(hdev, skb);
++ break;
++
++ case EVT_CONN_REQUEST:
++ hci_conn_request_evt(hdev, skb);
++ break;
++
++ case EVT_CONN_COMPLETE:
++ hci_conn_complete_evt(hdev, skb);
++ break;
++
++ case EVT_DISCONN_COMPLETE:
++ hci_disconn_complete_evt(hdev, skb);
++ break;
++
++ case EVT_ROLE_CHANGE:
++ hci_role_change_evt(hdev, skb);
++ break;
++
++ case EVT_AUTH_COMPLETE:
++ hci_auth_complete_evt(hdev, skb);
++ break;
++
++ case EVT_ENCRYPT_CHANGE:
++ hci_encrypt_change_evt(hdev, skb);
++ break;
++
++ case EVT_CMD_STATUS:
++ cs = (evt_cmd_status *) skb->data;
++ skb_pull(skb, EVT_CMD_STATUS_SIZE);
++
++ opcode = __le16_to_cpu(cs->opcode);
++ ogf = cmd_opcode_ogf(opcode);
++ ocf = cmd_opcode_ocf(opcode);
++
++ switch (ogf) {
++ case OGF_INFO_PARAM:
++ hci_cs_info_param(hdev, ocf, cs->status);
++ break;
++
++ case OGF_HOST_CTL:
++ hci_cs_host_ctl(hdev, ocf, cs->status);
++ break;
++
++ case OGF_LINK_CTL:
++ hci_cs_link_ctl(hdev, ocf, cs->status);
++ break;
++
++ case OGF_LINK_POLICY:
++ hci_cs_link_policy(hdev, ocf, cs->status);
++ break;
++
++ default:
++ BT_DBG("%s Command Status OGF %x", hdev->name, ogf);
++ break;
++ };
++
++ if (cs->ncmd) {
++ atomic_set(&hdev->cmd_cnt, 1);
++ if (!skb_queue_empty(&hdev->cmd_q))
++ hci_sched_cmd(hdev);
++ }
++ break;
++
++ case EVT_CMD_COMPLETE:
++ ec = (evt_cmd_complete *) skb->data;
++ skb_pull(skb, EVT_CMD_COMPLETE_SIZE);
++
++ opcode = __le16_to_cpu(ec->opcode);
++ ogf = cmd_opcode_ogf(opcode);
++ ocf = cmd_opcode_ocf(opcode);
++
++ switch (ogf) {
++ case OGF_INFO_PARAM:
++ hci_cc_info_param(hdev, ocf, skb);
++ break;
++
++ case OGF_HOST_CTL:
++ hci_cc_host_ctl(hdev, ocf, skb);
++ break;
++
++ case OGF_LINK_CTL:
++ hci_cc_link_ctl(hdev, ocf, skb);
++ break;
++
++ case OGF_LINK_POLICY:
++ hci_cc_link_policy(hdev, ocf, skb);
++ break;
++
++ default:
++ BT_DBG("%s Command Completed OGF %x", hdev->name, ogf);
++ break;
++ };
++
++ if (ec->ncmd) {
++ atomic_set(&hdev->cmd_cnt, 1);
++ if (!skb_queue_empty(&hdev->cmd_q))
++ hci_sched_cmd(hdev);
++ }
++ break;
++ };
++
++ kfree_skb(skb);
++ hdev->stat.evt_rx++;
++}
++
++/* General internal stack event */
++void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
++{
++ hci_event_hdr *eh;
++ evt_stack_internal *si;
++ struct sk_buff *skb;
++ int size;
++ void *ptr;
++
++ size = HCI_EVENT_HDR_SIZE + EVT_STACK_INTERNAL_SIZE + dlen;
++ skb = bluez_skb_alloc(size, GFP_ATOMIC);
++ if (!skb)
++ return;
++
++ ptr = skb_put(skb, size);
++
++ eh = ptr;
++ eh->evt = EVT_STACK_INTERNAL;
++ eh->plen = EVT_STACK_INTERNAL_SIZE + dlen;
++ ptr += HCI_EVENT_HDR_SIZE;
++
++ si = ptr;
++ si->type = type;
++ memcpy(si->data, data, dlen);
++
++ skb->pkt_type = HCI_EVENT_PKT;
++ skb->dev = (void *) hdev;
++ hci_send_to_sock(hdev, skb);
++ kfree_skb(skb);
++}
+diff -urN linux-2.4.18/net/bluetooth/hci_sock.c linux-2.4.18-mh9/net/bluetooth/hci_sock.c
+--- linux-2.4.18/net/bluetooth/hci_sock.c Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/net/bluetooth/hci_sock.c Mon Aug 25 18:38:12 2003
+@@ -25,7 +25,7 @@
+ /*
+ * BlueZ HCI socket layer.
+ *
+- * $Id: hci_sock.c,v 1.9 2001/08/05 06:02:16 maxk Exp $
++ * $Id: hci_sock.c,v 1.5 2002/07/22 20:32:54 maxk Exp $
+ */
+
+ #include <linux/config.h>
+@@ -49,45 +49,54 @@
+
+ #include <asm/system.h>
+ #include <asm/uaccess.h>
++#include <asm/unaligned.h>
+
+ #include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+ #include <net/bluetooth/hci_core.h>
+
+ #ifndef HCI_SOCK_DEBUG
+-#undef DBG
+-#define DBG( A... )
++#undef BT_DBG
++#define BT_DBG( A... )
+ #endif
+
+-/* HCI socket interface */
++/* ----- HCI socket interface ----- */
++
++/* Security filter */
++static struct hci_sec_filter hci_sec_filter = {
++ /* Packet types */
++ 0x10,
++ /* Events */
++ { 0xd9fe, 0x0 },
++ /* Commands */
++ {
++ { 0x0 },
++ /* OGF_LINK_CTL */
++ { 0x2a000002, 0x0, 0x0, 0x0 },
++ /* OGF_LINK_POLICY */
++ { 0x1200, 0x0, 0x0, 0x0 },
++ /* OGF_HOST_CTL */
++ { 0x80100000, 0x202a, 0x0, 0x0 },
++ /* OGF_INFO_PARAM */
++ { 0x22a, 0x0, 0x0, 0x0 },
++ /* OGF_STATUS_PARAM */
++ { 0x2e, 0x0, 0x0, 0x0 }
++ }
++};
+
+ static struct bluez_sock_list hci_sk_list = {
+ lock: RW_LOCK_UNLOCKED
+ };
+
+-static struct sock *hci_sock_lookup(struct hci_dev *hdev)
+-{
+- struct sock *sk;
+-
+- read_lock(&hci_sk_list.lock);
+- for (sk = hci_sk_list.head; sk; sk = sk->next) {
+- if (hci_pi(sk)->hdev == hdev)
+- break;
+- }
+- read_unlock(&hci_sk_list.lock);
+- return sk;
+-}
+-
+ /* Send frame to RAW socket */
+ void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb)
+ {
+ struct sock * sk;
+
+- DBG("hdev %p len %d", hdev, skb->len);
++ BT_DBG("hdev %p len %d", hdev, skb->len);
+
+ read_lock(&hci_sk_list.lock);
+ for (sk = hci_sk_list.head; sk; sk = sk->next) {
+- struct hci_filter *flt;
++ struct hci_filter *flt;
+ struct sk_buff *nskb;
+
+ if (sk->state != BT_BOUND || hci_pi(sk)->hdev != hdev)
+@@ -100,13 +109,19 @@
+ /* Apply filter */
+ flt = &hci_pi(sk)->filter;
+
+- if (!test_bit(skb->pkt_type, &flt->type_mask))
++ if (!hci_test_bit((skb->pkt_type & HCI_FLT_TYPE_BITS), &flt->type_mask))
+ continue;
+
+ if (skb->pkt_type == HCI_EVENT_PKT) {
+- register int evt = (*(__u8 *)skb->data & 63);
++ register int evt = (*(__u8 *)skb->data & HCI_FLT_EVENT_BITS);
++
++ if (!hci_test_bit(evt, &flt->event_mask))
++ continue;
+
+- if (!test_bit(evt, &flt->event_mask))
++ if (flt->opcode && ((evt == EVT_CMD_COMPLETE &&
++ flt->opcode != *(__u16 *)(skb->data + 3)) ||
++ (evt == EVT_CMD_STATUS &&
++ flt->opcode != *(__u16 *)(skb->data + 4))))
+ continue;
+ }
+
+@@ -116,8 +131,8 @@
+ /* Put type byte before the data */
+ memcpy(skb_push(nskb, 1), &nskb->pkt_type, 1);
+
+- skb_queue_tail(&sk->receive_queue, nskb);
+- sk->data_ready(sk, nskb->len);
++ if (sock_queue_rcv_skb(sk, nskb))
++ kfree_skb(nskb);
+ }
+ read_unlock(&hci_sk_list.lock);
+ }
+@@ -127,7 +142,7 @@
+ struct sock *sk = sock->sk;
+ struct hci_dev *hdev = hci_pi(sk)->hdev;
+
+- DBG("sock %p sk %p", sock, sk);
++ BT_DBG("sock %p sk %p", sock, sk);
+
+ if (!sk)
+ return 0;
+@@ -135,9 +150,7 @@
+ bluez_sock_unlink(&hci_sk_list, sk);
+
+ if (hdev) {
+- if (!hci_sock_lookup(hdev))
+- hdev->flags &= ~HCI_SOCK;
+-
++ atomic_dec(&hdev->promisc);
+ hci_dev_put(hdev);
+ }
+
+@@ -149,24 +162,55 @@
+ sock_put(sk);
+
+ MOD_DEC_USE_COUNT;
+-
+ return 0;
+ }
+
+-static int hci_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++/* Ioctls that require bound socket */
++static inline int hci_sock_bound_ioctl(struct sock *sk, unsigned int cmd, unsigned long arg)
+ {
+- struct sock *sk = sock->sk;
+ struct hci_dev *hdev = hci_pi(sk)->hdev;
+- __u32 mode;
+
+- DBG("cmd %x arg %lx", cmd, arg);
++ if (!hdev)
++ return -EBADFD;
+
+ switch (cmd) {
+- case HCIGETINFO:
+- return hci_dev_info(arg);
++ case HCISETRAW:
++ if (!capable(CAP_NET_ADMIN))
++ return -EACCES;
+
++ if (arg)
++ set_bit(HCI_RAW, &hdev->flags);
++ else
++ clear_bit(HCI_RAW, &hdev->flags);
++
++ return 0;
++
++ case HCIGETCONNINFO:
++ return hci_get_conn_info(hdev, arg);
++
++ default:
++ if (hdev->ioctl)
++ return hdev->ioctl(hdev, cmd, arg);
++ return -EINVAL;
++ }
++}
++
++static int hci_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++{
++ struct sock *sk = sock->sk;
++ int err;
++
++ BT_DBG("cmd %x arg %lx", cmd, arg);
++
++ switch (cmd) {
+ case HCIGETDEVLIST:
+- return hci_dev_list(arg);
++ return hci_get_dev_list(arg);
++
++ case HCIGETDEVINFO:
++ return hci_get_dev_info(arg);
++
++ case HCIGETCONNLIST:
++ return hci_get_conn_list(arg);
+
+ case HCIDEVUP:
+ if (!capable(CAP_NET_ADMIN))
+@@ -183,48 +227,31 @@
+ return -EACCES;
+ return hci_dev_reset(arg);
+
+- case HCIRESETSTAT:
++ case HCIDEVRESTAT:
+ if (!capable(CAP_NET_ADMIN))
+ return -EACCES;
+ return hci_dev_reset_stat(arg);
+
+ case HCISETSCAN:
+- if (!capable(CAP_NET_ADMIN))
+- return -EACCES;
+- return hci_dev_setscan(arg);
+-
+ case HCISETAUTH:
+- if (!capable(CAP_NET_ADMIN))
+- return -EACCES;
+- return hci_dev_setauth(arg);
+-
+- case HCISETRAW:
+- if (!capable(CAP_NET_ADMIN))
+- return -EACCES;
+-
+- if (!hdev)
+- return -EBADFD;
+-
+- if (arg)
+- mode = HCI_RAW;
+- else
+- mode = HCI_NORMAL;
+-
+- return hci_dev_setmode(hdev, mode);
+-
++ case HCISETENCRYPT:
+ case HCISETPTYPE:
++ case HCISETLINKPOL:
++ case HCISETLINKMODE:
++ case HCISETACLMTU:
++ case HCISETSCOMTU:
+ if (!capable(CAP_NET_ADMIN))
+ return -EACCES;
+- return hci_dev_setptype(arg);
++ return hci_dev_cmd(cmd, arg);
+
+ case HCIINQUIRY:
+ return hci_inquiry(arg);
+
+- case HCIGETCONNLIST:
+- return hci_conn_list(arg);
+-
+ default:
+- return -EINVAL;
++ lock_sock(sk);
++ err = hci_sock_bound_ioctl(sk, cmd, arg);
++ release_sock(sk);
++ return err;
+ };
+ }
+
+@@ -233,28 +260,35 @@
+ struct sockaddr_hci *haddr = (struct sockaddr_hci *) addr;
+ struct sock *sk = sock->sk;
+ struct hci_dev *hdev = NULL;
++ int err = 0;
+
+- DBG("sock %p sk %p", sock, sk);
++ BT_DBG("sock %p sk %p", sock, sk);
+
+ if (!haddr || haddr->hci_family != AF_BLUETOOTH)
+ return -EINVAL;
+
++ lock_sock(sk);
++
+ if (hci_pi(sk)->hdev) {
+- /* Already bound */
+- return 0;
++ err = -EALREADY;
++ goto done;
+ }
+
+ if (haddr->hci_dev != HCI_DEV_NONE) {
+- if (!(hdev = hci_dev_get(haddr->hci_dev)))
+- return -ENODEV;
++ if (!(hdev = hci_dev_get(haddr->hci_dev))) {
++ err = -ENODEV;
++ goto done;
++ }
+
+- hdev->flags |= HCI_SOCK;
++ atomic_inc(&hdev->promisc);
+ }
+
+ hci_pi(sk)->hdev = hdev;
+ sk->state = BT_BOUND;
+
+- return 0;
++done:
++ release_sock(sk);
++ return err;
+ }
+
+ static int hci_sock_getname(struct socket *sock, struct sockaddr *addr, int *addr_len, int peer)
+@@ -262,73 +296,44 @@
+ struct sockaddr_hci *haddr = (struct sockaddr_hci *) addr;
+ struct sock *sk = sock->sk;
+
+- DBG("sock %p sk %p", sock, sk);
++ BT_DBG("sock %p sk %p", sock, sk);
++
++ lock_sock(sk);
+
+ *addr_len = sizeof(*haddr);
+ haddr->hci_family = AF_BLUETOOTH;
+ haddr->hci_dev = hci_pi(sk)->hdev->id;
+
++ release_sock(sk);
+ return 0;
+ }
+
+-static int hci_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len,
+- struct scm_cookie *scm)
+-{
+- struct sock *sk = sock->sk;
+- struct hci_dev *hdev = hci_pi(sk)->hdev;
+- struct sk_buff *skb;
+- int err;
+-
+- DBG("sock %p sk %p", sock, sk);
+-
+- if (msg->msg_flags & MSG_OOB)
+- return -EOPNOTSUPP;
+-
+- if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_NOSIGNAL|MSG_ERRQUEUE))
+- return -EINVAL;
+-
+- if (!hdev)
+- return -EBADFD;
+-
+- if (!(skb = bluez_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err)))
+- return err;
+-
+- if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
+- kfree_skb(skb);
+- return -EFAULT;
+- }
+-
+- skb->dev = (void *) hdev;
+- skb->pkt_type = *((unsigned char *) skb->data);
+- skb_pull(skb, 1);
+-
+- /* Send frame to HCI core */
+- hci_send_raw(skb);
+-
+- return len;
+-}
+-
+ static inline void hci_sock_cmsg(struct sock *sk, struct msghdr *msg, struct sk_buff *skb)
+ {
+ __u32 mask = hci_pi(sk)->cmsg_mask;
+
+ if (mask & HCI_CMSG_DIR)
+ put_cmsg(msg, SOL_HCI, HCI_CMSG_DIR, sizeof(int), &bluez_cb(skb)->incomming);
++
++ if (mask & HCI_CMSG_TSTAMP)
++ put_cmsg(msg, SOL_HCI, HCI_CMSG_TSTAMP, sizeof(skb->stamp), &skb->stamp);
+ }
+
+-static int hci_sock_recvmsg(struct socket *sock, struct msghdr *msg, int len,
+- int flags, struct scm_cookie *scm)
++static int hci_sock_recvmsg(struct socket *sock, struct msghdr *msg, int len, int flags, struct scm_cookie *scm)
+ {
+ int noblock = flags & MSG_DONTWAIT;
+ struct sock *sk = sock->sk;
+ struct sk_buff *skb;
+ int copied, err;
+
+- DBG("sock %p sk %p", sock, sk);
++ BT_DBG("sock %p, sk %p", sock, sk);
+
+- if (flags & (MSG_OOB | MSG_PEEK))
++ if (flags & (MSG_OOB))
+ return -EOPNOTSUPP;
+
++ if (sk->state == BT_CLOSED)
++ return 0;
++
+ if (!(skb = skb_recv_datagram(sk, flags, noblock, &err)))
+ return err;
+
+@@ -343,28 +348,107 @@
+ skb->h.raw = skb->data;
+ err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+
+- if (hci_pi(sk)->cmsg_mask)
+- hci_sock_cmsg(sk, msg, skb);
+-
++ hci_sock_cmsg(sk, msg, skb);
++
+ skb_free_datagram(sk, skb);
+
+ return err ? : copied;
+ }
+
++static int hci_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len,
++ struct scm_cookie *scm)
++{
++ struct sock *sk = sock->sk;
++ struct hci_dev *hdev;
++ struct sk_buff *skb;
++ int err;
++
++ BT_DBG("sock %p sk %p", sock, sk);
++
++ if (msg->msg_flags & MSG_OOB)
++ return -EOPNOTSUPP;
++
++ if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_NOSIGNAL|MSG_ERRQUEUE))
++ return -EINVAL;
++
++ if (len < 4)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ if (!(hdev = hci_pi(sk)->hdev)) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ if (!(skb = bluez_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err)))
++ goto done;
++
++ if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
++ err = -EFAULT;
++ goto drop;
++ }
++
++ skb->pkt_type = *((unsigned char *) skb->data);
++ skb_pull(skb, 1);
++ skb->dev = (void *) hdev;
++
++ if (skb->pkt_type == HCI_COMMAND_PKT) {
++ u16 opcode = __le16_to_cpu(get_unaligned((u16 *)skb->data));
++ u16 ogf = cmd_opcode_ogf(opcode);
++ u16 ocf = cmd_opcode_ocf(opcode);
++
++ if (((ogf > HCI_SFLT_MAX_OGF) ||
++ !hci_test_bit(ocf & HCI_FLT_OCF_BITS, &hci_sec_filter.ocf_mask[ogf])) &&
++ !capable(CAP_NET_RAW)) {
++ err = -EPERM;
++ goto drop;
++ }
++
++ if (test_bit(HCI_RAW, &hdev->flags) || (ogf == OGF_VENDOR_CMD)) {
++ skb_queue_tail(&hdev->raw_q, skb);
++ hci_sched_tx(hdev);
++ } else {
++ skb_queue_tail(&hdev->cmd_q, skb);
++ hci_sched_cmd(hdev);
++ }
++ } else {
++ if (!capable(CAP_NET_RAW)) {
++ err = -EPERM;
++ goto drop;
++ }
++
++ skb_queue_tail(&hdev->raw_q, skb);
++ hci_sched_tx(hdev);
++ }
++
++ err = len;
++
++done:
++ release_sock(sk);
++ return err;
++
++drop:
++ kfree_skb(skb);
++ goto done;
++}
++
+ int hci_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, int len)
+ {
+ struct sock *sk = sock->sk;
+- struct hci_filter flt;
++ struct hci_filter flt = { opcode: 0 };
+ int err = 0, opt = 0;
+
+- DBG("sk %p, opt %d", sk, optname);
++ BT_DBG("sk %p, opt %d", sk, optname);
+
+ lock_sock(sk);
+
+ switch (optname) {
+ case HCI_DATA_DIR:
+- if (get_user(opt, (int *)optval))
+- return -EFAULT;
++ if (get_user(opt, (int *)optval)) {
++ err = -EFAULT;
++ break;
++ }
+
+ if (opt)
+ hci_pi(sk)->cmsg_mask |= HCI_CMSG_DIR;
+@@ -372,12 +456,31 @@
+ hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_DIR;
+ break;
+
++ case HCI_TIME_STAMP:
++ if (get_user(opt, (int *)optval)) {
++ err = -EFAULT;
++ break;
++ }
++
++ if (opt)
++ hci_pi(sk)->cmsg_mask |= HCI_CMSG_TSTAMP;
++ else
++ hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_TSTAMP;
++ break;
++
+ case HCI_FILTER:
+ len = MIN(len, sizeof(struct hci_filter));
+ if (copy_from_user(&flt, optval, len)) {
+ err = -EFAULT;
+ break;
+ }
++
++ if (!capable(CAP_NET_RAW)) {
++ flt.type_mask &= hci_sec_filter.type_mask;
++ flt.event_mask[0] &= hci_sec_filter.event_mask[0];
++ flt.event_mask[1] &= hci_sec_filter.event_mask[1];
++ }
++
+ memcpy(&hci_pi(sk)->filter, &flt, len);
+ break;
+
+@@ -409,6 +512,16 @@
+ return -EFAULT;
+ break;
+
++ case HCI_TIME_STAMP:
++ if (hci_pi(sk)->cmsg_mask & HCI_CMSG_TSTAMP)
++ opt = 1;
++ else
++ opt = 0;
++
++ if (put_user(opt, optval))
++ return -EFAULT;
++ break;
++
+ case HCI_FILTER:
+ len = MIN(len, sizeof(struct hci_filter));
+ if (copy_to_user(optval, &hci_pi(sk)->filter, len))
+@@ -446,7 +559,7 @@
+ {
+ struct sock *sk;
+
+- DBG("sock %p", sock);
++ BT_DBG("sock %p", sock);
+
+ if (sock->type != SOCK_RAW)
+ return -ESOCKTNOSUPPORT;
+@@ -464,44 +577,31 @@
+ sk->protocol = protocol;
+ sk->state = BT_OPEN;
+
+- /* Initialize filter */
+- hci_pi(sk)->filter.type_mask = (1<<HCI_EVENT_PKT);
+- hci_pi(sk)->filter.event_mask[0] = ~0L;
+- hci_pi(sk)->filter.event_mask[1] = ~0L;
+-
+ bluez_sock_link(&hci_sk_list, sk);
+
+ MOD_INC_USE_COUNT;
+-
+ return 0;
+ }
+
+ static int hci_sock_dev_event(struct notifier_block *this, unsigned long event, void *ptr)
+ {
+ struct hci_dev *hdev = (struct hci_dev *) ptr;
+- struct sk_buff *skb;
+-
+- DBG("hdev %s event %ld", hdev->name, event);
++ evt_si_device sd;
++
++ BT_DBG("hdev %s event %ld", hdev->name, event);
+
+ /* Send event to sockets */
+- if ((skb = bluez_skb_alloc(HCI_EVENT_HDR_SIZE + EVT_HCI_DEV_EVENT_SIZE, GFP_ATOMIC))) {
+- hci_event_hdr eh = { EVT_HCI_DEV_EVENT, EVT_HCI_DEV_EVENT_SIZE };
+- evt_hci_dev_event he = { event, hdev->id };
+-
+- skb->pkt_type = HCI_EVENT_PKT;
+- memcpy(skb_put(skb, HCI_EVENT_HDR_SIZE), &eh, HCI_EVENT_HDR_SIZE);
+- memcpy(skb_put(skb, EVT_HCI_DEV_EVENT_SIZE), &he, EVT_HCI_DEV_EVENT_SIZE);
+-
+- hci_send_to_sock(NULL, skb);
+- kfree_skb(skb);
+- }
+-
++ sd.event = event;
++ sd.dev_id = hdev->id;
++ hci_si_event(NULL, EVT_SI_DEVICE, EVT_SI_DEVICE_SIZE, &sd);
++
+ if (event == HCI_DEV_UNREG) {
+ struct sock *sk;
+
+ /* Detach sockets from device */
+ read_lock(&hci_sk_list.lock);
+ for (sk = hci_sk_list.head; sk; sk = sk->next) {
++ bh_lock_sock(sk);
+ if (hci_pi(sk)->hdev == hdev) {
+ hci_pi(sk)->hdev = NULL;
+ sk->err = EPIPE;
+@@ -510,6 +610,7 @@
+
+ hci_dev_put(hdev);
+ }
++ bh_unlock_sock(sk);
+ }
+ read_unlock(&hci_sk_list.lock);
+ }
+@@ -529,21 +630,19 @@
+ int hci_sock_init(void)
+ {
+ if (bluez_sock_register(BTPROTO_HCI, &hci_sock_family_ops)) {
+- ERR("Can't register HCI socket");
++ BT_ERR("Can't register HCI socket");
+ return -EPROTO;
+ }
+
+ hci_register_notifier(&hci_sock_nblock);
+-
+ return 0;
+ }
+
+ int hci_sock_cleanup(void)
+ {
+ if (bluez_sock_unregister(BTPROTO_HCI))
+- ERR("Can't unregister HCI socket");
++ BT_ERR("Can't unregister HCI socket");
+
+ hci_unregister_notifier(&hci_sock_nblock);
+-
+ return 0;
+ }
+diff -urN linux-2.4.18/net/bluetooth/l2cap.c linux-2.4.18-mh9/net/bluetooth/l2cap.c
+--- linux-2.4.18/net/bluetooth/l2cap.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/l2cap.c Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,2187 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * BlueZ L2CAP core and sockets.
++ *
++ * $Id: l2cap.c,v 1.15 2002/09/09 01:14:52 maxk Exp $
++ */
++#define VERSION "2.3"
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/init.h>
++#include <linux/skbuff.h>
++#include <linux/interrupt.h>
++#include <linux/socket.h>
++#include <linux/skbuff.h>
++#include <linux/proc_fs.h>
++#include <linux/list.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include <net/bluetooth/l2cap.h>
++
++#ifndef L2CAP_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
++
++static struct proto_ops l2cap_sock_ops;
++
++struct bluez_sock_list l2cap_sk_list = {
++ lock: RW_LOCK_UNLOCKED
++};
++
++static int l2cap_conn_del(struct hci_conn *conn, int err);
++
++static inline void l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent);
++static void l2cap_chan_del(struct sock *sk, int err);
++static int l2cap_chan_send(struct sock *sk, struct msghdr *msg, int len);
++
++static void __l2cap_sock_close(struct sock *sk, int reason);
++static void l2cap_sock_close(struct sock *sk);
++static void l2cap_sock_kill(struct sock *sk);
++
++static int l2cap_send_req(struct l2cap_conn *conn, __u8 code, __u16 len, void *data);
++static int l2cap_send_rsp(struct l2cap_conn *conn, __u8 ident, __u8 code, __u16 len, void *data);
++
++/* ----- L2CAP timers ------ */
++static void l2cap_sock_timeout(unsigned long arg)
++{
++ struct sock *sk = (struct sock *) arg;
++
++ BT_DBG("sock %p state %d", sk, sk->state);
++
++ bh_lock_sock(sk);
++ __l2cap_sock_close(sk, ETIMEDOUT);
++ bh_unlock_sock(sk);
++
++ l2cap_sock_kill(sk);
++ sock_put(sk);
++}
++
++static void l2cap_sock_set_timer(struct sock *sk, long timeout)
++{
++ BT_DBG("sk %p state %d timeout %ld", sk, sk->state, timeout);
++
++ if (!mod_timer(&sk->timer, jiffies + timeout))
++ sock_hold(sk);
++}
++
++static void l2cap_sock_clear_timer(struct sock *sk)
++{
++ BT_DBG("sock %p state %d", sk, sk->state);
++
++ if (timer_pending(&sk->timer) && del_timer(&sk->timer))
++ __sock_put(sk);
++}
++
++static void l2cap_sock_init_timer(struct sock *sk)
++{
++ init_timer(&sk->timer);
++ sk->timer.function = l2cap_sock_timeout;
++ sk->timer.data = (unsigned long)sk;
++}
++
++/* -------- L2CAP connections --------- */
++static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, __u8 status)
++{
++ struct l2cap_conn *conn;
++
++ if ((conn = hcon->l2cap_data))
++ return conn;
++
++ if (status)
++ return conn;
++
++ if (!(conn = kmalloc(sizeof(struct l2cap_conn), GFP_ATOMIC)))
++ return NULL;
++ memset(conn, 0, sizeof(struct l2cap_conn));
++
++ hcon->l2cap_data = conn;
++ conn->hcon = hcon;
++
++ conn->mtu = hcon->hdev->acl_mtu;
++ conn->src = &hcon->hdev->bdaddr;
++ conn->dst = &hcon->dst;
++
++ spin_lock_init(&conn->lock);
++ conn->chan_list.lock = RW_LOCK_UNLOCKED;
++
++ BT_DBG("hcon %p conn %p", hcon, conn);
++
++ MOD_INC_USE_COUNT;
++ return conn;
++}
++
++static int l2cap_conn_del(struct hci_conn *hcon, int err)
++{
++ struct l2cap_conn *conn;
++ struct sock *sk;
++
++ if (!(conn = hcon->l2cap_data))
++ return 0;
++
++ BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
++
++ if (conn->rx_skb)
++ kfree_skb(conn->rx_skb);
++
++ /* Kill channels */
++ while ((sk = conn->chan_list.head)) {
++ bh_lock_sock(sk);
++ l2cap_chan_del(sk, err);
++ bh_unlock_sock(sk);
++ l2cap_sock_kill(sk);
++ }
++
++ hcon->l2cap_data = NULL;
++ kfree(conn);
++
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++/* -------- Socket interface ---------- */
++static struct sock *__l2cap_get_sock_by_addr(__u16 psm, bdaddr_t *src)
++{
++ struct sock *sk;
++ for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
++ if (sk->sport == psm && !bacmp(&bluez_pi(sk)->src, src))
++ break;
++ }
++ return sk;
++}
++
++/* Find socket with psm and source bdaddr.
++ * Returns closest match.
++ */
++static struct sock *__l2cap_get_sock_by_psm(int state, __u16 psm, bdaddr_t *src)
++{
++ struct sock *sk, *sk1 = NULL;
++
++ for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
++ if (state && sk->state != state)
++ continue;
++
++ if (l2cap_pi(sk)->psm == psm) {
++ /* Exact match. */
++ if (!bacmp(&bluez_pi(sk)->src, src))
++ break;
++
++ /* Closest match */
++ if (!bacmp(&bluez_pi(sk)->src, BDADDR_ANY))
++ sk1 = sk;
++ }
++ }
++ return sk ? sk : sk1;
++}
++
++/* Find socket with given address (psm, src).
++ * Returns locked socket */
++static inline struct sock *l2cap_get_sock_by_psm(int state, __u16 psm, bdaddr_t *src)
++{
++ struct sock *s;
++ read_lock(&l2cap_sk_list.lock);
++ s = __l2cap_get_sock_by_psm(state, psm, src);
++ if (s) bh_lock_sock(s);
++ read_unlock(&l2cap_sk_list.lock);
++ return s;
++}
++
++static void l2cap_sock_destruct(struct sock *sk)
++{
++ BT_DBG("sk %p", sk);
++
++ skb_queue_purge(&sk->receive_queue);
++ skb_queue_purge(&sk->write_queue);
++
++ MOD_DEC_USE_COUNT;
++}
++
++static void l2cap_sock_cleanup_listen(struct sock *parent)
++{
++ struct sock *sk;
++
++ BT_DBG("parent %p", parent);
++
++ /* Close not yet accepted channels */
++ while ((sk = bluez_accept_dequeue(parent, NULL)))
++ l2cap_sock_close(sk);
++
++ parent->state = BT_CLOSED;
++ parent->zapped = 1;
++}
++
++/* Kill socket (only if zapped and orphan)
++ * Must be called on unlocked socket.
++ */
++static void l2cap_sock_kill(struct sock *sk)
++{
++ if (!sk->zapped || sk->socket)
++ return;
++
++ BT_DBG("sk %p state %d", sk, sk->state);
++
++ /* Kill poor orphan */
++ bluez_sock_unlink(&l2cap_sk_list, sk);
++ sk->dead = 1;
++ sock_put(sk);
++}
++
++/* Close socket.
++ */
++static void __l2cap_sock_close(struct sock *sk, int reason)
++{
++ BT_DBG("sk %p state %d socket %p", sk, sk->state, sk->socket);
++
++ switch (sk->state) {
++ case BT_LISTEN:
++ l2cap_sock_cleanup_listen(sk);
++ break;
++
++ case BT_CONNECTED:
++ case BT_CONFIG:
++ case BT_CONNECT2:
++ if (sk->type == SOCK_SEQPACKET) {
++ struct l2cap_conn *conn = l2cap_pi(sk)->conn;
++ l2cap_disconn_req req;
++
++ sk->state = BT_DISCONN;
++ l2cap_sock_set_timer(sk, sk->sndtimeo);
++
++ req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ l2cap_send_req(conn, L2CAP_DISCONN_REQ, L2CAP_DISCONN_REQ_SIZE, &req);
++ } else {
++ l2cap_chan_del(sk, reason);
++ }
++ break;
++
++ case BT_CONNECT:
++ case BT_DISCONN:
++ l2cap_chan_del(sk, reason);
++ break;
++
++ default:
++ sk->zapped = 1;
++ break;
++ };
++}
++
++/* Must be called on unlocked socket. */
++static void l2cap_sock_close(struct sock *sk)
++{
++ l2cap_sock_clear_timer(sk);
++ lock_sock(sk);
++ __l2cap_sock_close(sk, ECONNRESET);
++ release_sock(sk);
++ l2cap_sock_kill(sk);
++}
++
++static void l2cap_sock_init(struct sock *sk, struct sock *parent)
++{
++ struct l2cap_pinfo *pi = l2cap_pi(sk);
++
++ BT_DBG("sk %p", sk);
++
++ if (parent) {
++ sk->type = parent->type;
++ pi->imtu = l2cap_pi(parent)->imtu;
++ pi->omtu = l2cap_pi(parent)->omtu;
++ pi->link_mode = l2cap_pi(parent)->link_mode;
++ } else {
++ pi->imtu = L2CAP_DEFAULT_MTU;
++ pi->omtu = 0;
++ pi->link_mode = 0;
++ }
++
++ /* Default config options */
++ pi->conf_mtu = L2CAP_DEFAULT_MTU;
++ pi->flush_to = L2CAP_DEFAULT_FLUSH_TO;
++}
++
++static struct sock *l2cap_sock_alloc(struct socket *sock, int proto, int prio)
++{
++ struct sock *sk;
++
++ if (!(sk = sk_alloc(PF_BLUETOOTH, prio, 1)))
++ return NULL;
++
++ bluez_sock_init(sock, sk);
++
++ sk->zapped = 0;
++
++ sk->destruct = l2cap_sock_destruct;
++ sk->sndtimeo = L2CAP_CONN_TIMEOUT;
++
++ sk->protocol = proto;
++ sk->state = BT_OPEN;
++
++ l2cap_sock_init_timer(sk);
++
++ bluez_sock_link(&l2cap_sk_list, sk);
++
++ MOD_INC_USE_COUNT;
++ return sk;
++}
++
++static int l2cap_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ sock->state = SS_UNCONNECTED;
++
++ if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
++ return -ESOCKTNOSUPPORT;
++
++ if (sock->type == SOCK_RAW && !capable(CAP_NET_RAW))
++ return -EPERM;
++
++ sock->ops = &l2cap_sock_ops;
++
++ if (!(sk = l2cap_sock_alloc(sock, protocol, GFP_KERNEL)))
++ return -ENOMEM;
++
++ l2cap_sock_init(sk, NULL);
++ return 0;
++}
++
++static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
++{
++ struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p, %s %d", sk, batostr(&la->l2_bdaddr), la->l2_psm);
++
++ if (!addr || addr->sa_family != AF_BLUETOOTH)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_OPEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ write_lock_bh(&l2cap_sk_list.lock);
++ if (la->l2_psm && __l2cap_get_sock_by_addr(la->l2_psm, &la->l2_bdaddr)) {
++ err = -EADDRINUSE;
++ } else {
++ /* Save source address */
++ bacpy(&bluez_pi(sk)->src, &la->l2_bdaddr);
++ l2cap_pi(sk)->psm = la->l2_psm;
++ sk->sport = la->l2_psm;
++ sk->state = BT_BOUND;
++ }
++ write_unlock_bh(&l2cap_sk_list.lock);
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++static int l2cap_do_connect(struct sock *sk)
++{
++ bdaddr_t *src = &bluez_pi(sk)->src;
++ bdaddr_t *dst = &bluez_pi(sk)->dst;
++ struct l2cap_conn *conn;
++ struct hci_conn *hcon;
++ struct hci_dev *hdev;
++ int err = 0;
++
++ BT_DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst), l2cap_pi(sk)->psm);
++
++ if (!(hdev = hci_get_route(dst, src)))
++ return -EHOSTUNREACH;
++
++ hci_dev_lock_bh(hdev);
++
++ err = -ENOMEM;
++
++ hcon = hci_connect(hdev, ACL_LINK, dst);
++ if (!hcon)
++ goto done;
++
++ conn = l2cap_conn_add(hcon, 0);
++ if (!conn) {
++ hci_conn_put(hcon);
++ goto done;
++ }
++
++ err = 0;
++
++ /* Update source addr of the socket */
++ bacpy(src, conn->src);
++
++ l2cap_chan_add(conn, sk, NULL);
++
++ sk->state = BT_CONNECT;
++ l2cap_sock_set_timer(sk, sk->sndtimeo);
++
++ if (hcon->state == BT_CONNECTED) {
++ if (sk->type == SOCK_SEQPACKET) {
++ l2cap_conn_req req;
++ req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ req.psm = l2cap_pi(sk)->psm;
++ l2cap_send_req(conn, L2CAP_CONN_REQ, L2CAP_CONN_REQ_SIZE, &req);
++ } else {
++ l2cap_sock_clear_timer(sk);
++ sk->state = BT_CONNECTED;
++ }
++ }
++
++done:
++ hci_dev_unlock_bh(hdev);
++ hci_dev_put(hdev);
++ return err;
++}
++
++static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
++{
++ struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ lock_sock(sk);
++
++ BT_DBG("sk %p", sk);
++
++ if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_l2)) {
++ err = -EINVAL;
++ goto done;
++ }
++
++ if (sk->type == SOCK_SEQPACKET && !la->l2_psm) {
++ err = -EINVAL;
++ goto done;
++ }
++
++ switch(sk->state) {
++ case BT_CONNECT:
++ case BT_CONNECT2:
++ case BT_CONFIG:
++ /* Already connecting */
++ goto wait;
++
++ case BT_CONNECTED:
++ /* Already connected */
++ goto done;
++
++ case BT_OPEN:
++ case BT_BOUND:
++ /* Can connect */
++ break;
++
++ default:
++ err = -EBADFD;
++ goto done;
++ }
++
++ /* Set destination address and psm */
++ bacpy(&bluez_pi(sk)->dst, &la->l2_bdaddr);
++ l2cap_pi(sk)->psm = la->l2_psm;
++
++ if ((err = l2cap_do_connect(sk)))
++ goto done;
++
++wait:
++ err = bluez_sock_wait_state(sk, BT_CONNECTED,
++ sock_sndtimeo(sk, flags & O_NONBLOCK));
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++int l2cap_sock_listen(struct socket *sock, int backlog)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p backlog %d", sk, backlog);
++
++ lock_sock(sk);
++
++ if (sk->state != BT_BOUND || sock->type != SOCK_SEQPACKET) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ if (!l2cap_pi(sk)->psm) {
++ err = -EINVAL;
++ goto done;
++ }
++
++ sk->max_ack_backlog = backlog;
++ sk->ack_backlog = 0;
++ sk->state = BT_LISTEN;
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct sock *sk = sock->sk, *nsk;
++ long timeo;
++ int err = 0;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
++
++ BT_DBG("sk %p timeo %ld", sk, timeo);
++
++ /* Wait for an incoming connection. (wake-one). */
++ add_wait_queue_exclusive(sk->sleep, &wait);
++ while (!(nsk = bluez_accept_dequeue(sk, newsock))) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ if (!timeo) {
++ err = -EAGAIN;
++ break;
++ }
++
++ release_sock(sk);
++ timeo = schedule_timeout(timeo);
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ break;
++ }
++
++ if (signal_pending(current)) {
++ err = sock_intr_errno(timeo);
++ break;
++ }
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++
++ if (err)
++ goto done;
++
++ newsock->state = SS_CONNECTED;
++
++ BT_DBG("new socket %p", nsk);
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
++{
++ struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ addr->sa_family = AF_BLUETOOTH;
++ *len = sizeof(struct sockaddr_l2);
++
++ if (peer)
++ bacpy(&la->l2_bdaddr, &bluez_pi(sk)->dst);
++ else
++ bacpy(&la->l2_bdaddr, &bluez_pi(sk)->src);
++
++ la->l2_psm = l2cap_pi(sk)->psm;
++ return 0;
++}
++
++static int l2cap_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct scm_cookie *scm)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (sk->err)
++ return sock_error(sk);
++
++ if (msg->msg_flags & MSG_OOB)
++ return -EOPNOTSUPP;
++
++ /* Check outgoing MTU */
++ if (len > l2cap_pi(sk)->omtu)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ if (sk->state == BT_CONNECTED)
++ err = l2cap_chan_send(sk, msg, len);
++ else
++ err = -ENOTCONN;
++
++ release_sock(sk);
++ return err;
++}
++
++static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, int optlen)
++{
++ struct sock *sk = sock->sk;
++ struct l2cap_options opts;
++ int err = 0, len;
++ __u32 opt;
++
++ BT_DBG("sk %p", sk);
++
++ lock_sock(sk);
++
++ switch (optname) {
++ case L2CAP_OPTIONS:
++ len = MIN(sizeof(opts), optlen);
++ if (copy_from_user((char *)&opts, optval, len)) {
++ err = -EFAULT;
++ break;
++ }
++ l2cap_pi(sk)->imtu = opts.imtu;
++ l2cap_pi(sk)->omtu = opts.omtu;
++ break;
++
++ case L2CAP_LM:
++ if (get_user(opt, (__u32 *)optval)) {
++ err = -EFAULT;
++ break;
++ }
++
++ l2cap_pi(sk)->link_mode = opt;
++ break;
++
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ }
++
++ release_sock(sk);
++ return err;
++}
++
++static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, char *optval, int *optlen)
++{
++ struct sock *sk = sock->sk;
++ struct l2cap_options opts;
++ struct l2cap_conninfo cinfo;
++ int len, err = 0;
++
++ if (get_user(len, optlen))
++ return -EFAULT;
++
++ lock_sock(sk);
++
++ switch (optname) {
++ case L2CAP_OPTIONS:
++ opts.imtu = l2cap_pi(sk)->imtu;
++ opts.omtu = l2cap_pi(sk)->omtu;
++ opts.flush_to = l2cap_pi(sk)->flush_to;
++
++ len = MIN(len, sizeof(opts));
++ if (copy_to_user(optval, (char *)&opts, len))
++ err = -EFAULT;
++
++ break;
++
++ case L2CAP_LM:
++ if (put_user(l2cap_pi(sk)->link_mode, (__u32 *)optval))
++ err = -EFAULT;
++ break;
++
++ case L2CAP_CONNINFO:
++ if (sk->state != BT_CONNECTED) {
++ err = -ENOTCONN;
++ break;
++ }
++
++ cinfo.hci_handle = l2cap_pi(sk)->conn->hcon->handle;
++
++ len = MIN(len, sizeof(cinfo));
++ if (copy_to_user(optval, (char *)&cinfo, len))
++ err = -EFAULT;
++
++ break;
++
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ }
++
++ release_sock(sk);
++ return err;
++}
++
++static int l2cap_sock_shutdown(struct socket *sock, int how)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (!sk) return 0;
++
++ lock_sock(sk);
++ if (!sk->shutdown) {
++ sk->shutdown = SHUTDOWN_MASK;
++ l2cap_sock_clear_timer(sk);
++ __l2cap_sock_close(sk, 0);
++
++ if (sk->linger)
++ err = bluez_sock_wait_state(sk, BT_CLOSED, sk->lingertime);
++ }
++ release_sock(sk);
++ return err;
++}
++
++static int l2cap_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++ int err;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (!sk) return 0;
++
++ err = l2cap_sock_shutdown(sock, 2);
++
++ sock_orphan(sk);
++ l2cap_sock_kill(sk);
++ return err;
++}
++
++/* --------- L2CAP channels --------- */
++static struct sock * __l2cap_get_chan_by_dcid(struct l2cap_chan_list *l, __u16 cid)
++{
++ struct sock *s;
++ for (s = l->head; s; s = l2cap_pi(s)->next_c) {
++ if (l2cap_pi(s)->dcid == cid)
++ break;
++ }
++ return s;
++}
++
++static struct sock *__l2cap_get_chan_by_scid(struct l2cap_chan_list *l, __u16 cid)
++{
++ struct sock *s;
++ for (s = l->head; s; s = l2cap_pi(s)->next_c) {
++ if (l2cap_pi(s)->scid == cid)
++ break;
++ }
++ return s;
++}
++
++/* Find channel with given SCID.
++ * Returns locked socket */
++static inline struct sock *l2cap_get_chan_by_scid(struct l2cap_chan_list *l, __u16 cid)
++{
++ struct sock *s;
++ read_lock(&l->lock);
++ s = __l2cap_get_chan_by_scid(l, cid);
++ if (s) bh_lock_sock(s);
++ read_unlock(&l->lock);
++ return s;
++}
++
++static __u16 l2cap_alloc_cid(struct l2cap_chan_list *l)
++{
++ __u16 cid = 0x0040;
++
++ for (; cid < 0xffff; cid++) {
++ if(!__l2cap_get_chan_by_scid(l, cid))
++ return cid;
++ }
++
++ return 0;
++}
++
++static inline void __l2cap_chan_link(struct l2cap_chan_list *l, struct sock *sk)
++{
++ sock_hold(sk);
++
++ if (l->head)
++ l2cap_pi(l->head)->prev_c = sk;
++
++ l2cap_pi(sk)->next_c = l->head;
++ l2cap_pi(sk)->prev_c = NULL;
++ l->head = sk;
++}
++
++static inline void l2cap_chan_unlink(struct l2cap_chan_list *l, struct sock *sk)
++{
++ struct sock *next = l2cap_pi(sk)->next_c, *prev = l2cap_pi(sk)->prev_c;
++
++ write_lock(&l->lock);
++ if (sk == l->head)
++ l->head = next;
++
++ if (next)
++ l2cap_pi(next)->prev_c = prev;
++ if (prev)
++ l2cap_pi(prev)->next_c = next;
++ write_unlock(&l->lock);
++
++ __sock_put(sk);
++}
++
++static void __l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent)
++{
++ struct l2cap_chan_list *l = &conn->chan_list;
++
++ BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn, l2cap_pi(sk)->psm, l2cap_pi(sk)->dcid);
++
++ l2cap_pi(sk)->conn = conn;
++
++ if (sk->type == SOCK_SEQPACKET) {
++ /* Alloc CID for connection-oriented socket */
++ l2cap_pi(sk)->scid = l2cap_alloc_cid(l);
++ } else if (sk->type == SOCK_DGRAM) {
++ /* Connectionless socket */
++ l2cap_pi(sk)->scid = 0x0002;
++ l2cap_pi(sk)->dcid = 0x0002;
++ l2cap_pi(sk)->omtu = L2CAP_DEFAULT_MTU;
++ } else {
++ /* Raw socket can send/recv signalling messages only */
++ l2cap_pi(sk)->scid = 0x0001;
++ l2cap_pi(sk)->dcid = 0x0001;
++ l2cap_pi(sk)->omtu = L2CAP_DEFAULT_MTU;
++ }
++
++ __l2cap_chan_link(l, sk);
++
++ if (parent)
++ bluez_accept_enqueue(parent, sk);
++}
++
++static inline void l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent)
++{
++ struct l2cap_chan_list *l = &conn->chan_list;
++ write_lock(&l->lock);
++ __l2cap_chan_add(conn, sk, parent);
++ write_unlock(&l->lock);
++}
++
++/* Delete channel.
++ * Must be called on the locked socket. */
++static void l2cap_chan_del(struct sock *sk, int err)
++{
++ struct l2cap_conn *conn = l2cap_pi(sk)->conn;
++ struct sock *parent = bluez_pi(sk)->parent;
++
++ l2cap_sock_clear_timer(sk);
++
++ BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
++
++ if (conn) {
++ /* Unlink from channel list */
++ l2cap_chan_unlink(&conn->chan_list, sk);
++ l2cap_pi(sk)->conn = NULL;
++ hci_conn_put(conn->hcon);
++ }
++
++ sk->state = BT_CLOSED;
++ sk->zapped = 1;
++
++ if (err)
++ sk->err = err;
++
++ if (parent)
++ parent->data_ready(parent, 0);
++ else
++ sk->state_change(sk);
++}
++
++static void l2cap_conn_ready(struct l2cap_conn *conn)
++{
++ struct l2cap_chan_list *l = &conn->chan_list;
++ struct sock *sk;
++
++ BT_DBG("conn %p", conn);
++
++ read_lock(&l->lock);
++
++ for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
++ bh_lock_sock(sk);
++
++ if (sk->type != SOCK_SEQPACKET) {
++ l2cap_sock_clear_timer(sk);
++ sk->state = BT_CONNECTED;
++ sk->state_change(sk);
++ } else if (sk->state == BT_CONNECT) {
++ l2cap_conn_req req;
++ req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ req.psm = l2cap_pi(sk)->psm;
++ l2cap_send_req(conn, L2CAP_CONN_REQ, L2CAP_CONN_REQ_SIZE, &req);
++ }
++
++ bh_unlock_sock(sk);
++ }
++
++ read_unlock(&l->lock);
++}
++
++/* Notify sockets that we cannot guaranty reliability anymore */
++static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
++{
++ struct l2cap_chan_list *l = &conn->chan_list;
++ struct sock *sk;
++
++ BT_DBG("conn %p", conn);
++
++ read_lock(&l->lock);
++ for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
++ if (l2cap_pi(sk)->link_mode & L2CAP_LM_RELIABLE)
++ sk->err = err;
++ }
++ read_unlock(&l->lock);
++}
++
++static void l2cap_chan_ready(struct sock *sk)
++{
++ struct sock *parent = bluez_pi(sk)->parent;
++
++ BT_DBG("sk %p, parent %p", sk, parent);
++
++ l2cap_pi(sk)->conf_state = 0;
++ l2cap_sock_clear_timer(sk);
++
++ if (!parent) {
++ /* Outgoing channel.
++ * Wake up socket sleeping on connect.
++ */
++ sk->state = BT_CONNECTED;
++ sk->state_change(sk);
++ } else {
++ /* Incomming channel.
++ * Wake up socket sleeping on accept.
++ */
++ parent->data_ready(parent, 0);
++ }
++}
++
++/* Copy frame to all raw sockets on that connection */
++void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
++{
++ struct l2cap_chan_list *l = &conn->chan_list;
++ struct sk_buff *nskb;
++ struct sock * sk;
++
++ BT_DBG("conn %p", conn);
++
++ read_lock(&l->lock);
++ for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
++ if (sk->type != SOCK_RAW)
++ continue;
++
++ /* Don't send frame to the socket it came from */
++ if (skb->sk == sk)
++ continue;
++
++ if (!(nskb = skb_clone(skb, GFP_ATOMIC)))
++ continue;
++
++ if (sock_queue_rcv_skb(sk, nskb))
++ kfree_skb(nskb);
++ }
++ read_unlock(&l->lock);
++}
++
++static int l2cap_chan_send(struct sock *sk, struct msghdr *msg, int len)
++{
++ struct l2cap_conn *conn = l2cap_pi(sk)->conn;
++ struct sk_buff *skb, **frag;
++ int err, hlen, count, sent=0;
++ l2cap_hdr *lh;
++
++ BT_DBG("sk %p len %d", sk, len);
++
++ /* First fragment (with L2CAP header) */
++ if (sk->type == SOCK_DGRAM)
++ hlen = L2CAP_HDR_SIZE + 2;
++ else
++ hlen = L2CAP_HDR_SIZE;
++
++ count = MIN(conn->mtu - hlen, len);
++
++ skb = bluez_skb_send_alloc(sk, hlen + count,
++ msg->msg_flags & MSG_DONTWAIT, &err);
++ if (!skb)
++ return err;
++
++ /* Create L2CAP header */
++ lh = (l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
++ lh->cid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ lh->len = __cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
++
++ if (sk->type == SOCK_DGRAM)
++ put_unaligned(l2cap_pi(sk)->psm, (__u16 *) skb_put(skb, 2));
++
++ if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count)) {
++ err = -EFAULT;
++ goto fail;
++ }
++
++ sent += count;
++ len -= count;
++
++ /* Continuation fragments (no L2CAP header) */
++ frag = &skb_shinfo(skb)->frag_list;
++ while (len) {
++ count = MIN(conn->mtu, len);
++
++ *frag = bluez_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err);
++ if (!*frag)
++ goto fail;
++
++ if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count)) {
++ err = -EFAULT;
++ goto fail;
++ }
++
++ sent += count;
++ len -= count;
++
++ frag = &(*frag)->next;
++ }
++
++ if ((err = hci_send_acl(conn->hcon, skb, 0)) < 0)
++ goto fail;
++
++ return sent;
++
++fail:
++ kfree_skb(skb);
++ return err;
++}
++
++/* --------- L2CAP signalling commands --------- */
++static inline __u8 l2cap_get_ident(struct l2cap_conn *conn)
++{
++ __u8 id;
++
++ /* Get next available identificator.
++ * 1 - 199 are used by kernel.
++ * 200 - 254 are used by utilities like l2ping, etc
++ */
++
++ spin_lock(&conn->lock);
++
++ if (++conn->tx_ident > 199)
++ conn->tx_ident = 1;
++
++ id = conn->tx_ident;
++
++ spin_unlock(&conn->lock);
++
++ return id;
++}
++
++static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
++ __u8 code, __u8 ident, __u16 dlen, void *data)
++{
++ struct sk_buff *skb, **frag;
++ l2cap_cmd_hdr *cmd;
++ l2cap_hdr *lh;
++ int len, count;
++
++ BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d", conn, code, ident, dlen);
++
++ len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen;
++ count = MIN(conn->mtu, len);
++
++ skb = bluez_skb_alloc(count, GFP_ATOMIC);
++ if (!skb)
++ return NULL;
++
++ lh = (l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
++ lh->len = __cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
++ lh->cid = __cpu_to_le16(0x0001);
++
++ cmd = (l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
++ cmd->code = code;
++ cmd->ident = ident;
++ cmd->len = __cpu_to_le16(dlen);
++
++ if (dlen) {
++ count -= L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE;
++ memcpy(skb_put(skb, count), data, count);
++ data += count;
++ }
++
++ len -= skb->len;
++
++ /* Continuation fragments (no L2CAP header) */
++ frag = &skb_shinfo(skb)->frag_list;
++ while (len) {
++ count = MIN(conn->mtu, len);
++
++ *frag = bluez_skb_alloc(count, GFP_ATOMIC);
++ if (!*frag)
++ goto fail;
++
++ memcpy(skb_put(*frag, count), data, count);
++
++ len -= count;
++ data += count;
++
++ frag = &(*frag)->next;
++ }
++
++ return skb;
++
++fail:
++ kfree_skb(skb);
++ return NULL;
++}
++
++static int l2cap_send_req(struct l2cap_conn *conn, __u8 code, __u16 len, void *data)
++{
++ __u8 ident = l2cap_get_ident(conn);
++ struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
++
++ BT_DBG("code 0x%2.2x", code);
++
++ if (!skb)
++ return -ENOMEM;
++ return hci_send_acl(conn->hcon, skb, 0);
++}
++
++static int l2cap_send_rsp(struct l2cap_conn *conn, __u8 ident, __u8 code, __u16 len, void *data)
++{
++ struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
++
++ BT_DBG("code 0x%2.2x", code);
++
++ if (!skb)
++ return -ENOMEM;
++ return hci_send_acl(conn->hcon, skb, 0);
++}
++
++static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen, unsigned long *val)
++{
++ l2cap_conf_opt *opt = *ptr;
++ int len;
++
++ len = L2CAP_CONF_OPT_SIZE + opt->len;
++ *ptr += len;
++
++ *type = opt->type;
++ *olen = opt->len;
++
++ switch (opt->len) {
++ case 1:
++ *val = *((__u8 *) opt->val);
++ break;
++
++ case 2:
++ *val = __le16_to_cpu(*((__u16 *)opt->val));
++ break;
++
++ case 4:
++ *val = __le32_to_cpu(*((__u32 *)opt->val));
++ break;
++
++ default:
++ *val = (unsigned long) opt->val;
++ break;
++ };
++
++ BT_DBG("type 0x%2.2x len %d val 0x%lx", *type, opt->len, *val);
++ return len;
++}
++
++static inline void l2cap_parse_conf_req(struct sock *sk, void *data, int len)
++{
++ int type, hint, olen;
++ unsigned long val;
++ void *ptr = data;
++
++ BT_DBG("sk %p len %d", sk, len);
++
++ while (len >= L2CAP_CONF_OPT_SIZE) {
++ len -= l2cap_get_conf_opt(&ptr, &type, &olen, &val);
++
++ hint = type & 0x80;
++ type &= 0x7f;
++
++ switch (type) {
++ case L2CAP_CONF_MTU:
++ l2cap_pi(sk)->conf_mtu = val;
++ break;
++
++ case L2CAP_CONF_FLUSH_TO:
++ l2cap_pi(sk)->flush_to = val;
++ break;
++
++ case L2CAP_CONF_QOS:
++ break;
++
++ default:
++ if (hint)
++ break;
++
++ /* FIXME: Reject unknown option */
++ break;
++ };
++ }
++}
++
++static void l2cap_add_conf_opt(void **ptr, __u8 type, __u8 len, unsigned long val)
++{
++ register l2cap_conf_opt *opt = *ptr;
++
++ BT_DBG("type 0x%2.2x len %d val 0x%lx", type, len, val);
++
++ opt->type = type;
++ opt->len = len;
++
++ switch (len) {
++ case 1:
++ *((__u8 *) opt->val) = val;
++ break;
++
++ case 2:
++ *((__u16 *) opt->val) = __cpu_to_le16(val);
++ break;
++
++ case 4:
++ *((__u32 *) opt->val) = __cpu_to_le32(val);
++ break;
++
++ default:
++ memcpy(opt->val, (void *) val, len);
++ break;
++ };
++
++ *ptr += L2CAP_CONF_OPT_SIZE + len;
++}
++
++static int l2cap_build_conf_req(struct sock *sk, void *data)
++{
++ struct l2cap_pinfo *pi = l2cap_pi(sk);
++ l2cap_conf_req *req = (l2cap_conf_req *) data;
++ void *ptr = req->data;
++
++ BT_DBG("sk %p", sk);
++
++ if (pi->imtu != L2CAP_DEFAULT_MTU)
++ l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->imtu);
++
++ /* FIXME. Need actual value of the flush timeout */
++ //if (flush_to != L2CAP_DEFAULT_FLUSH_TO)
++ // l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO, 2, pi->flush_to);
++
++ req->dcid = __cpu_to_le16(pi->dcid);
++ req->flags = __cpu_to_le16(0);
++
++ return ptr - data;
++}
++
++static inline int l2cap_conf_output(struct sock *sk, void **ptr)
++{
++ struct l2cap_pinfo *pi = l2cap_pi(sk);
++ int result = 0;
++
++ /* Configure output options and let the other side know
++ * which ones we don't like.
++ */
++ if (pi->conf_mtu < pi->omtu) {
++ l2cap_add_conf_opt(ptr, L2CAP_CONF_MTU, 2, pi->omtu);
++ result = L2CAP_CONF_UNACCEPT;
++ } else {
++ pi->omtu = pi->conf_mtu;
++ }
++
++ BT_DBG("sk %p result %d", sk, result);
++ return result;
++}
++
++static int l2cap_build_conf_rsp(struct sock *sk, void *data, int *result)
++{
++ l2cap_conf_rsp *rsp = (l2cap_conf_rsp *) data;
++ void *ptr = rsp->data;
++ u16 flags = 0;
++
++ BT_DBG("sk %p complete %d", sk, result ? 1 : 0);
++
++ if (result)
++ *result = l2cap_conf_output(sk, &ptr);
++ else
++ flags |= 0x0001;
++
++ rsp->scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ rsp->result = __cpu_to_le16(result ? *result : 0);
++ rsp->flags = __cpu_to_le16(flags);
++
++ return ptr - data;
++}
++
++static inline int l2cap_connect_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
++{
++ struct l2cap_chan_list *list = &conn->chan_list;
++ l2cap_conn_req *req = (l2cap_conn_req *) data;
++ l2cap_conn_rsp rsp;
++ struct sock *sk, *parent;
++ int result = 0, status = 0;
++
++ __u16 dcid = 0, scid = __le16_to_cpu(req->scid);
++ __u16 psm = req->psm;
++
++ BT_DBG("psm 0x%2.2x scid 0x%4.4x", psm, scid);
++
++ /* Check if we have socket listening on psm */
++ parent = l2cap_get_sock_by_psm(BT_LISTEN, psm, conn->src);
++ if (!parent) {
++ result = L2CAP_CR_BAD_PSM;
++ goto sendresp;
++ }
++
++ result = L2CAP_CR_NO_MEM;
++
++ /* Check for backlog size */
++ if (parent->ack_backlog > parent->max_ack_backlog) {
++ BT_DBG("backlog full %d", parent->ack_backlog);
++ goto response;
++ }
++
++ sk = l2cap_sock_alloc(NULL, BTPROTO_L2CAP, GFP_ATOMIC);
++ if (!sk)
++ goto response;
++
++ write_lock(&list->lock);
++
++ /* Check if we already have channel with that dcid */
++ if (__l2cap_get_chan_by_dcid(list, scid)) {
++ write_unlock(&list->lock);
++ sk->zapped = 1;
++ l2cap_sock_kill(sk);
++ goto response;
++ }
++
++ hci_conn_hold(conn->hcon);
++
++ l2cap_sock_init(sk, parent);
++ bacpy(&bluez_pi(sk)->src, conn->src);
++ bacpy(&bluez_pi(sk)->dst, conn->dst);
++ l2cap_pi(sk)->psm = psm;
++ l2cap_pi(sk)->dcid = scid;
++
++ __l2cap_chan_add(conn, sk, parent);
++ dcid = l2cap_pi(sk)->scid;
++
++ l2cap_sock_set_timer(sk, sk->sndtimeo);
++
++ /* Service level security */
++ result = L2CAP_CR_PEND;
++ status = L2CAP_CS_AUTHEN_PEND;
++ sk->state = BT_CONNECT2;
++ l2cap_pi(sk)->ident = cmd->ident;
++
++ if (l2cap_pi(sk)->link_mode & L2CAP_LM_ENCRYPT) {
++ if (!hci_conn_encrypt(conn->hcon))
++ goto done;
++ } else if (l2cap_pi(sk)->link_mode & L2CAP_LM_AUTH) {
++ if (!hci_conn_auth(conn->hcon))
++ goto done;
++ }
++
++ sk->state = BT_CONFIG;
++ result = status = 0;
++
++done:
++ write_unlock(&list->lock);
++
++response:
++ bh_unlock_sock(parent);
++
++sendresp:
++ rsp.scid = __cpu_to_le16(scid);
++ rsp.dcid = __cpu_to_le16(dcid);
++ rsp.result = __cpu_to_le16(result);
++ rsp.status = __cpu_to_le16(status);
++ l2cap_send_rsp(conn, cmd->ident, L2CAP_CONN_RSP, L2CAP_CONN_RSP_SIZE, &rsp);
++ return 0;
++}
++
++static inline int l2cap_connect_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
++{
++ l2cap_conn_rsp *rsp = (l2cap_conn_rsp *) data;
++ __u16 scid, dcid, result, status;
++ struct sock *sk;
++ char req[128];
++
++ scid = __le16_to_cpu(rsp->scid);
++ dcid = __le16_to_cpu(rsp->dcid);
++ result = __le16_to_cpu(rsp->result);
++ status = __le16_to_cpu(rsp->status);
++
++ BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x", dcid, scid, result, status);
++
++ if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
++ return -ENOENT;
++
++ switch (result) {
++ case L2CAP_CR_SUCCESS:
++ sk->state = BT_CONFIG;
++ l2cap_pi(sk)->dcid = dcid;
++ l2cap_pi(sk)->conf_state |= L2CAP_CONF_REQ_SENT;
++
++ l2cap_send_req(conn, L2CAP_CONF_REQ, l2cap_build_conf_req(sk, req), req);
++ break;
++
++ case L2CAP_CR_PEND:
++ break;
++
++ default:
++ l2cap_chan_del(sk, ECONNREFUSED);
++ break;
++ }
++
++ bh_unlock_sock(sk);
++ return 0;
++}
++
++static inline int l2cap_config_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
++{
++ l2cap_conf_req * req = (l2cap_conf_req *) data;
++ __u16 dcid, flags;
++ __u8 rsp[64];
++ struct sock *sk;
++ int result;
++
++ dcid = __le16_to_cpu(req->dcid);
++ flags = __le16_to_cpu(req->flags);
++
++ BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
++
++ if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid)))
++ return -ENOENT;
++
++ l2cap_parse_conf_req(sk, req->data, cmd->len - L2CAP_CONF_REQ_SIZE);
++
++ if (flags & 0x0001) {
++ /* Incomplete config. Send empty response. */
++ l2cap_send_rsp(conn, cmd->ident, L2CAP_CONF_RSP, l2cap_build_conf_rsp(sk, rsp, NULL), rsp);
++ goto unlock;
++ }
++
++ /* Complete config. */
++ l2cap_send_rsp(conn, cmd->ident, L2CAP_CONF_RSP, l2cap_build_conf_rsp(sk, rsp, &result), rsp);
++
++ if (result)
++ goto unlock;
++
++ /* Output config done */
++ l2cap_pi(sk)->conf_state |= L2CAP_CONF_OUTPUT_DONE;
++
++ if (l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE) {
++ sk->state = BT_CONNECTED;
++ l2cap_chan_ready(sk);
++ } else if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT)) {
++ char req[64];
++ l2cap_send_req(conn, L2CAP_CONF_REQ, l2cap_build_conf_req(sk, req), req);
++ }
++
++unlock:
++ bh_unlock_sock(sk);
++ return 0;
++}
++
++static inline int l2cap_config_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
++{
++ l2cap_conf_rsp *rsp = (l2cap_conf_rsp *)data;
++ __u16 scid, flags, result;
++ struct sock *sk;
++ int err = 0;
++
++ scid = __le16_to_cpu(rsp->scid);
++ flags = __le16_to_cpu(rsp->flags);
++ result = __le16_to_cpu(rsp->result);
++
++ BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x", scid, flags, result);
++
++ if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
++ return -ENOENT;
++
++ switch (result) {
++ case L2CAP_CONF_SUCCESS:
++ break;
++
++ case L2CAP_CONF_UNACCEPT:
++ if (++l2cap_pi(sk)->conf_retry < L2CAP_CONF_MAX_RETRIES) {
++ char req[128];
++ /*
++ It does not make sense to adjust L2CAP parameters
++ that are currently defined in the spec. We simply
++ resend config request that we sent earlier. It is
++ stupid :) but it helps qualification testing
++ which expects at least some response from us.
++ */
++ l2cap_send_req(conn, L2CAP_CONF_REQ,
++ l2cap_build_conf_req(sk, req), req);
++ goto done;
++ }
++ default:
++ sk->state = BT_DISCONN;
++ sk->err = ECONNRESET;
++ l2cap_sock_set_timer(sk, HZ * 5);
++ {
++ l2cap_disconn_req req;
++ req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ l2cap_send_req(conn, L2CAP_DISCONN_REQ, L2CAP_DISCONN_REQ_SIZE, &req);
++ }
++ goto done;
++ }
++
++ if (flags & 0x01)
++ goto done;
++
++ /* Input config done */
++ l2cap_pi(sk)->conf_state |= L2CAP_CONF_INPUT_DONE;
++
++ if (l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE) {
++ sk->state = BT_CONNECTED;
++ l2cap_chan_ready(sk);
++ }
++
++done:
++ bh_unlock_sock(sk);
++ return err;
++}
++
++static inline int l2cap_disconnect_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
++{
++ l2cap_disconn_req *req = (l2cap_disconn_req *) data;
++ l2cap_disconn_rsp rsp;
++ __u16 dcid, scid;
++ struct sock *sk;
++
++ scid = __le16_to_cpu(req->scid);
++ dcid = __le16_to_cpu(req->dcid);
++
++ BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
++
++ if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid)))
++ return 0;
++
++ rsp.dcid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ rsp.scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ l2cap_send_rsp(conn, cmd->ident, L2CAP_DISCONN_RSP, L2CAP_DISCONN_RSP_SIZE, &rsp);
++
++ sk->shutdown = SHUTDOWN_MASK;
++
++ l2cap_chan_del(sk, ECONNRESET);
++ bh_unlock_sock(sk);
++
++ l2cap_sock_kill(sk);
++ return 0;
++}
++
++static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
++{
++ l2cap_disconn_rsp *rsp = (l2cap_disconn_rsp *) data;
++ __u16 dcid, scid;
++ struct sock *sk;
++
++ scid = __le16_to_cpu(rsp->scid);
++ dcid = __le16_to_cpu(rsp->dcid);
++
++ BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
++
++ if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
++ return 0;
++ l2cap_chan_del(sk, 0);
++ bh_unlock_sock(sk);
++
++ l2cap_sock_kill(sk);
++ return 0;
++}
++
++static inline void l2cap_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
++{
++ __u8 *data = skb->data;
++ int len = skb->len;
++ l2cap_cmd_hdr cmd;
++ int err = 0;
++
++ while (len >= L2CAP_CMD_HDR_SIZE) {
++ memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
++ data += L2CAP_CMD_HDR_SIZE;
++ len -= L2CAP_CMD_HDR_SIZE;
++
++ cmd.len = __le16_to_cpu(cmd.len);
++
++ BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd.len, cmd.ident);
++
++ if (cmd.len > len || !cmd.ident) {
++ BT_DBG("corrupted command");
++ break;
++ }
++
++ switch (cmd.code) {
++ case L2CAP_CONN_REQ:
++ err = l2cap_connect_req(conn, &cmd, data);
++ break;
++
++ case L2CAP_CONN_RSP:
++ err = l2cap_connect_rsp(conn, &cmd, data);
++ break;
++
++ case L2CAP_CONF_REQ:
++ err = l2cap_config_req(conn, &cmd, data);
++ break;
++
++ case L2CAP_CONF_RSP:
++ err = l2cap_config_rsp(conn, &cmd, data);
++ break;
++
++ case L2CAP_DISCONN_REQ:
++ err = l2cap_disconnect_req(conn, &cmd, data);
++ break;
++
++ case L2CAP_DISCONN_RSP:
++ err = l2cap_disconnect_rsp(conn, &cmd, data);
++ break;
++
++ case L2CAP_COMMAND_REJ:
++ /* FIXME: We should process this */
++ l2cap_raw_recv(conn, skb);
++ break;
++
++ case L2CAP_ECHO_REQ:
++ l2cap_send_rsp(conn, cmd.ident, L2CAP_ECHO_RSP, cmd.len, data);
++ break;
++
++ case L2CAP_ECHO_RSP:
++ case L2CAP_INFO_REQ:
++ case L2CAP_INFO_RSP:
++ l2cap_raw_recv(conn, skb);
++ break;
++
++ default:
++ BT_ERR("Uknown signaling command 0x%2.2x", cmd.code);
++ err = -EINVAL;
++ break;
++ };
++
++ if (err) {
++ l2cap_cmd_rej rej;
++ BT_DBG("error %d", err);
++
++ /* FIXME: Map err to a valid reason. */
++ rej.reason = __cpu_to_le16(0);
++ l2cap_send_rsp(conn, cmd.ident, L2CAP_COMMAND_REJ, L2CAP_CMD_REJ_SIZE, &rej);
++ }
++
++ data += cmd.len;
++ len -= cmd.len;
++ }
++
++ kfree_skb(skb);
++}
++
++static inline int l2cap_data_channel(struct l2cap_conn *conn, __u16 cid, struct sk_buff *skb)
++{
++ struct sock *sk;
++
++ sk = l2cap_get_chan_by_scid(&conn->chan_list, cid);
++ if (!sk) {
++ BT_DBG("unknown cid 0x%4.4x", cid);
++ goto drop;
++ }
++
++ BT_DBG("sk %p, len %d", sk, skb->len);
++
++ if (sk->state != BT_CONNECTED)
++ goto drop;
++
++ if (l2cap_pi(sk)->imtu < skb->len)
++ goto drop;
++
++ /* If socket recv buffers overflows we drop data here
++ * which is *bad* because L2CAP has to be reliable.
++ * But we don't have any other choice. L2CAP doesn't
++ * provide flow control mechanism */
++
++ if (!sock_queue_rcv_skb(sk, skb))
++ goto done;
++
++drop:
++ kfree_skb(skb);
++
++done:
++ if (sk) bh_unlock_sock(sk);
++ return 0;
++}
++
++static inline int l2cap_conless_channel(struct l2cap_conn *conn, __u16 psm, struct sk_buff *skb)
++{
++ struct sock *sk;
++
++ sk = l2cap_get_sock_by_psm(0, psm, conn->src);
++ if (!sk)
++ goto drop;
++
++ BT_DBG("sk %p, len %d", sk, skb->len);
++
++ if (sk->state != BT_BOUND && sk->state != BT_CONNECTED)
++ goto drop;
++
++ if (l2cap_pi(sk)->imtu < skb->len)
++ goto drop;
++
++ if (!sock_queue_rcv_skb(sk, skb))
++ goto done;
++
++drop:
++ kfree_skb(skb);
++
++done:
++ if (sk) bh_unlock_sock(sk);
++ return 0;
++}
++
++static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
++{
++ l2cap_hdr *lh = (l2cap_hdr *) skb->data;
++ __u16 cid, psm, len;
++
++ skb_pull(skb, L2CAP_HDR_SIZE);
++ cid = __le16_to_cpu(lh->cid);
++ len = __le16_to_cpu(lh->len);
++
++ BT_DBG("len %d, cid 0x%4.4x", len, cid);
++
++ switch (cid) {
++ case 0x0001:
++ l2cap_sig_channel(conn, skb);
++ break;
++
++ case 0x0002:
++ psm = get_unaligned((__u16 *) skb->data);
++ skb_pull(skb, 2);
++ l2cap_conless_channel(conn, psm, skb);
++ break;
++
++ default:
++ l2cap_data_channel(conn, cid, skb);
++ break;
++ }
++}
++
++/* ------------ L2CAP interface with lower layer (HCI) ------------- */
++
++static int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
++{
++ int exact = 0, lm1 = 0, lm2 = 0;
++ register struct sock *sk;
++
++ if (type != ACL_LINK)
++ return 0;
++
++ BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
++
++ /* Find listening sockets and check their link_mode */
++ read_lock(&l2cap_sk_list.lock);
++ for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
++ if (sk->state != BT_LISTEN)
++ continue;
++
++ if (!bacmp(&bluez_pi(sk)->src, &hdev->bdaddr)) {
++ lm1 |= (HCI_LM_ACCEPT | l2cap_pi(sk)->link_mode);
++ exact++;
++ } else if (!bacmp(&bluez_pi(sk)->src, BDADDR_ANY))
++ lm2 |= (HCI_LM_ACCEPT | l2cap_pi(sk)->link_mode);
++ }
++ read_unlock(&l2cap_sk_list.lock);
++
++ return exact ? lm1 : lm2;
++}
++
++static int l2cap_connect_cfm(struct hci_conn *hcon, __u8 status)
++{
++ BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
++
++ if (hcon->type != ACL_LINK)
++ return 0;
++
++ if (!status) {
++ struct l2cap_conn *conn;
++
++ conn = l2cap_conn_add(hcon, status);
++ if (conn)
++ l2cap_conn_ready(conn);
++ } else
++ l2cap_conn_del(hcon, bterr(status));
++
++ return 0;
++}
++
++static int l2cap_disconn_ind(struct hci_conn *hcon, __u8 reason)
++{
++ BT_DBG("hcon %p reason %d", hcon, reason);
++
++ if (hcon->type != ACL_LINK)
++ return 0;
++
++ l2cap_conn_del(hcon, bterr(reason));
++ return 0;
++}
++
++static int l2cap_auth_cfm(struct hci_conn *hcon, __u8 status)
++{
++ struct l2cap_chan_list *l;
++ struct l2cap_conn *conn;
++ l2cap_conn_rsp rsp;
++ struct sock *sk;
++ int result;
++
++ if (!(conn = hcon->l2cap_data))
++ return 0;
++ l = &conn->chan_list;
++
++ BT_DBG("conn %p", conn);
++
++ read_lock(&l->lock);
++
++ for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
++ bh_lock_sock(sk);
++
++ if (sk->state != BT_CONNECT2 ||
++ (l2cap_pi(sk)->link_mode & L2CAP_LM_ENCRYPT)) {
++ bh_unlock_sock(sk);
++ continue;
++ }
++
++ if (!status) {
++ sk->state = BT_CONFIG;
++ result = 0;
++ } else {
++ sk->state = BT_DISCONN;
++ l2cap_sock_set_timer(sk, HZ/10);
++ result = L2CAP_CR_SEC_BLOCK;
++ }
++
++ rsp.scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ rsp.dcid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ rsp.result = __cpu_to_le16(result);
++ rsp.status = __cpu_to_le16(0);
++ l2cap_send_rsp(conn, l2cap_pi(sk)->ident, L2CAP_CONN_RSP,
++ L2CAP_CONN_RSP_SIZE, &rsp);
++
++ bh_unlock_sock(sk);
++ }
++
++ read_unlock(&l->lock);
++ return 0;
++}
++
++static int l2cap_encrypt_cfm(struct hci_conn *hcon, __u8 status)
++{
++ struct l2cap_chan_list *l;
++ struct l2cap_conn *conn;
++ l2cap_conn_rsp rsp;
++ struct sock *sk;
++ int result;
++
++ if (!(conn = hcon->l2cap_data))
++ return 0;
++ l = &conn->chan_list;
++
++ BT_DBG("conn %p", conn);
++
++ read_lock(&l->lock);
++
++ for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
++ bh_lock_sock(sk);
++
++ if (sk->state != BT_CONNECT2) {
++ bh_unlock_sock(sk);
++ continue;
++ }
++
++ if (!status) {
++ sk->state = BT_CONFIG;
++ result = 0;
++ } else {
++ sk->state = BT_DISCONN;
++ l2cap_sock_set_timer(sk, HZ/10);
++ result = L2CAP_CR_SEC_BLOCK;
++ }
++
++ rsp.scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
++ rsp.dcid = __cpu_to_le16(l2cap_pi(sk)->scid);
++ rsp.result = __cpu_to_le16(result);
++ rsp.status = __cpu_to_le16(0);
++ l2cap_send_rsp(conn, l2cap_pi(sk)->ident, L2CAP_CONN_RSP,
++ L2CAP_CONN_RSP_SIZE, &rsp);
++
++ bh_unlock_sock(sk);
++ }
++
++ read_unlock(&l->lock);
++ return 0;
++}
++
++static int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, __u16 flags)
++{
++ struct l2cap_conn *conn = hcon->l2cap_data;
++
++ if (!conn && !(conn = l2cap_conn_add(hcon, 0)))
++ goto drop;
++
++ BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);
++
++ if (flags & ACL_START) {
++ l2cap_hdr *hdr;
++ int len;
++
++ if (conn->rx_len) {
++ BT_ERR("Unexpected start frame (len %d)", skb->len);
++ kfree_skb(conn->rx_skb);
++ conn->rx_skb = NULL;
++ conn->rx_len = 0;
++ l2cap_conn_unreliable(conn, ECOMM);
++ }
++
++ if (skb->len < 2) {
++ BT_ERR("Frame is too short (len %d)", skb->len);
++ l2cap_conn_unreliable(conn, ECOMM);
++ goto drop;
++ }
++
++ hdr = (l2cap_hdr *) skb->data;
++ len = __le16_to_cpu(hdr->len) + L2CAP_HDR_SIZE;
++
++ if (len == skb->len) {
++ /* Complete frame received */
++ l2cap_recv_frame(conn, skb);
++ return 0;
++ }
++
++ BT_DBG("Start: total len %d, frag len %d", len, skb->len);
++
++ if (skb->len > len) {
++ BT_ERR("Frame is too long (len %d, expected len %d)",
++ skb->len, len);
++ l2cap_conn_unreliable(conn, ECOMM);
++ goto drop;
++ }
++
++ /* Allocate skb for the complete frame including header */
++ conn->rx_skb = bluez_skb_alloc(len, GFP_ATOMIC);
++ if (!conn->rx_skb)
++ goto drop;
++
++ memcpy(skb_put(conn->rx_skb, skb->len), skb->data, skb->len);
++ conn->rx_len = len - skb->len;
++ } else {
++ BT_DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);
++
++ if (!conn->rx_len) {
++ BT_ERR("Unexpected continuation frame (len %d)", skb->len);
++ l2cap_conn_unreliable(conn, ECOMM);
++ goto drop;
++ }
++
++ if (skb->len > conn->rx_len) {
++ BT_ERR("Fragment is too long (len %d, expected %d)",
++ skb->len, conn->rx_len);
++ kfree_skb(conn->rx_skb);
++ conn->rx_skb = NULL;
++ conn->rx_len = 0;
++ l2cap_conn_unreliable(conn, ECOMM);
++ goto drop;
++ }
++
++ memcpy(skb_put(conn->rx_skb, skb->len), skb->data, skb->len);
++ conn->rx_len -= skb->len;
++
++ if (!conn->rx_len) {
++ /* Complete frame received */
++ l2cap_recv_frame(conn, conn->rx_skb);
++ conn->rx_skb = NULL;
++ }
++ }
++
++drop:
++ kfree_skb(skb);
++ return 0;
++}
++
++/* ----- Proc fs support ------ */
++static int l2cap_sock_dump(char *buf, struct bluez_sock_list *list)
++{
++ struct l2cap_pinfo *pi;
++ struct sock *sk;
++ char *ptr = buf;
++
++ read_lock_bh(&list->lock);
++
++ for (sk = list->head; sk; sk = sk->next) {
++ pi = l2cap_pi(sk);
++ ptr += sprintf(ptr, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d 0x%x\n",
++ batostr(&bluez_pi(sk)->src), batostr(&bluez_pi(sk)->dst),
++ sk->state, pi->psm, pi->scid, pi->dcid, pi->imtu, pi->omtu,
++ pi->link_mode);
++ }
++
++ read_unlock_bh(&list->lock);
++
++ ptr += sprintf(ptr, "\n");
++ return ptr - buf;
++}
++
++static int l2cap_read_proc(char *buf, char **start, off_t offset, int count, int *eof, void *priv)
++{
++ char *ptr = buf;
++ int len;
++
++ BT_DBG("count %d, offset %ld", count, offset);
++
++ ptr += l2cap_sock_dump(ptr, &l2cap_sk_list);
++ len = ptr - buf;
++
++ if (len <= count + offset)
++ *eof = 1;
++
++ *start = buf + offset;
++ len -= offset;
++
++ if (len > count)
++ len = count;
++ if (len < 0)
++ len = 0;
++
++ return len;
++}
++
++static struct proto_ops l2cap_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: l2cap_sock_release,
++ bind: l2cap_sock_bind,
++ connect: l2cap_sock_connect,
++ listen: l2cap_sock_listen,
++ accept: l2cap_sock_accept,
++ getname: l2cap_sock_getname,
++ sendmsg: l2cap_sock_sendmsg,
++ recvmsg: bluez_sock_recvmsg,
++ poll: bluez_sock_poll,
++ socketpair: sock_no_socketpair,
++ ioctl: sock_no_ioctl,
++ shutdown: l2cap_sock_shutdown,
++ setsockopt: l2cap_sock_setsockopt,
++ getsockopt: l2cap_sock_getsockopt,
++ mmap: sock_no_mmap
++};
++
++static struct net_proto_family l2cap_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: l2cap_sock_create
++};
++
++static struct hci_proto l2cap_hci_proto = {
++ name: "L2CAP",
++ id: HCI_PROTO_L2CAP,
++ connect_ind: l2cap_connect_ind,
++ connect_cfm: l2cap_connect_cfm,
++ disconn_ind: l2cap_disconn_ind,
++ recv_acldata: l2cap_recv_acldata,
++ auth_cfm: l2cap_auth_cfm,
++ encrypt_cfm: l2cap_encrypt_cfm
++};
++
++int __init l2cap_init(void)
++{
++ int err;
++
++ if ((err = bluez_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops))) {
++ BT_ERR("Can't register L2CAP socket");
++ return err;
++ }
++
++ if ((err = hci_register_proto(&l2cap_hci_proto))) {
++ BT_ERR("Can't register L2CAP protocol");
++ return err;
++ }
++
++ create_proc_read_entry("bluetooth/l2cap", 0, 0, l2cap_read_proc, NULL);
++
++ BT_INFO("BlueZ L2CAP ver %s Copyright (C) 2000,2001 Qualcomm Inc", VERSION);
++ BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
++ return 0;
++}
++
++void l2cap_cleanup(void)
++{
++ remove_proc_entry("bluetooth/l2cap", NULL);
++
++ /* Unregister socket and protocol */
++ if (bluez_sock_unregister(BTPROTO_L2CAP))
++ BT_ERR("Can't unregister L2CAP socket");
++
++ if (hci_unregister_proto(&l2cap_hci_proto))
++ BT_ERR("Can't unregister L2CAP protocol");
++}
++
++void l2cap_load(void)
++{
++ /* Dummy function to trigger automatic L2CAP module loading by
++ other modules that use L2CAP sockets but do not use any other
++ symbols from it. */
++ return;
++}
++
++EXPORT_SYMBOL(l2cap_load);
++
++module_init(l2cap_init);
++module_exit(l2cap_cleanup);
++
++MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
++MODULE_DESCRIPTION("BlueZ L2CAP ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/l2cap_core.c linux-2.4.18-mh9/net/bluetooth/l2cap_core.c
+--- linux-2.4.18/net/bluetooth/l2cap_core.c Sun Sep 30 21:26:08 2001
++++ linux-2.4.18-mh9/net/bluetooth/l2cap_core.c Thu Jan 1 01:00:00 1970
+@@ -1,2316 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * BlueZ L2CAP core and sockets.
+- *
+- * $Id: l2cap_core.c,v 1.19 2001/08/03 04:19:50 maxk Exp $
+- */
+-#define VERSION "1.1"
+-
+-#include <linux/config.h>
+-#include <linux/module.h>
+-
+-#include <linux/types.h>
+-#include <linux/errno.h>
+-#include <linux/kernel.h>
+-#include <linux/major.h>
+-#include <linux/sched.h>
+-#include <linux/slab.h>
+-#include <linux/poll.h>
+-#include <linux/fcntl.h>
+-#include <linux/init.h>
+-#include <linux/skbuff.h>
+-#include <linux/interrupt.h>
+-#include <linux/socket.h>
+-#include <linux/skbuff.h>
+-#include <linux/proc_fs.h>
+-#include <linux/list.h>
+-#include <net/sock.h>
+-
+-#include <asm/system.h>
+-#include <asm/uaccess.h>
+-
+-#include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+-#include <net/bluetooth/hci_core.h>
+-#include <net/bluetooth/l2cap.h>
+-#include <net/bluetooth/l2cap_core.h>
+-
+-#ifndef L2CAP_DEBUG
+-#undef DBG
+-#define DBG( A... )
+-#endif
+-
+-struct proto_ops l2cap_sock_ops;
+-
+-struct bluez_sock_list l2cap_sk_list = {
+- lock: RW_LOCK_UNLOCKED
+-};
+-
+-struct list_head l2cap_iff_list = LIST_HEAD_INIT(l2cap_iff_list);
+-rwlock_t l2cap_rt_lock = RW_LOCK_UNLOCKED;
+-
+-static int l2cap_conn_del(struct l2cap_conn *conn, int err);
+-
+-static inline void l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent);
+-static void l2cap_chan_del(struct sock *sk, int err);
+-static int l2cap_chan_send(struct sock *sk, struct msghdr *msg, int len);
+-
+-static void l2cap_sock_close(struct sock *sk);
+-static void l2cap_sock_kill(struct sock *sk);
+-
+-static int l2cap_send_req(struct l2cap_conn *conn, __u8 code, __u16 len, void *data);
+-static int l2cap_send_rsp(struct l2cap_conn *conn, __u8 ident, __u8 code, __u16 len, void *data);
+-
+-/* -------- L2CAP interfaces & routing --------- */
+-/* Add/delete L2CAP interface.
+- * Must be called with locked rt_lock
+- */
+-
+-static void l2cap_iff_add(struct hci_dev *hdev)
+-{
+- struct l2cap_iff *iff;
+-
+- DBG("%s", hdev->name);
+-
+- DBG("iff_list %p next %p prev %p", &l2cap_iff_list, l2cap_iff_list.next, l2cap_iff_list.prev);
+-
+- /* Allocate new interface and lock HCI device */
+- if (!(iff = kmalloc(sizeof(struct l2cap_iff), GFP_KERNEL))) {
+- ERR("Can't allocate new interface %s", hdev->name);
+- return;
+- }
+- memset(iff, 0, sizeof(struct l2cap_iff));
+-
+- hci_dev_hold(hdev);
+- hdev->l2cap_data = iff;
+- iff->hdev = hdev;
+- iff->mtu = hdev->acl_mtu - HCI_ACL_HDR_SIZE;
+- iff->bdaddr = &hdev->bdaddr;
+-
+- spin_lock_init(&iff->lock);
+- INIT_LIST_HEAD(&iff->conn_list);
+-
+- list_add(&iff->list, &l2cap_iff_list);
+-}
+-
+-static void l2cap_iff_del(struct hci_dev *hdev)
+-{
+- struct l2cap_iff *iff;
+-
+- if (!(iff = hdev->l2cap_data))
+- return;
+-
+- DBG("%s iff %p", hdev->name, iff);
+-
+- list_del(&iff->list);
+-
+- l2cap_iff_lock(iff);
+-
+- /* Drop connections */
+- while (!list_empty(&iff->conn_list)) {
+- struct l2cap_conn *c;
+-
+- c = list_entry(iff->conn_list.next, struct l2cap_conn, list);
+- l2cap_conn_del(c, ENODEV);
+- }
+-
+- l2cap_iff_unlock(iff);
+-
+- /* Unlock HCI device */
+- hdev->l2cap_data = NULL;
+- hci_dev_put(hdev);
+-
+- kfree(iff);
+-}
+-
+-/* Get route. Returns L2CAP interface.
+- * Must be called with locked rt_lock
+- */
+-static struct l2cap_iff *l2cap_get_route(bdaddr_t *src, bdaddr_t *dst)
+-{
+- struct list_head *p;
+- int use_src;
+-
+- DBG("%s -> %s", batostr(src), batostr(dst));
+-
+- use_src = bacmp(src, BDADDR_ANY) ? 0 : 1;
+-
+- /* Simple routing:
+- * No source address - find interface with bdaddr != dst
+- * Source address - find interface with bdaddr == src
+- */
+-
+- list_for_each(p, &l2cap_iff_list) {
+- struct l2cap_iff *iff;
+-
+- iff = list_entry(p, struct l2cap_iff, list);
+-
+- if (use_src && !bacmp(iff->bdaddr, src))
+- return iff;
+- else if (bacmp(iff->bdaddr, dst))
+- return iff;
+- }
+- return NULL;
+-}
+-
+-/* ----- L2CAP timers ------ */
+-static void l2cap_sock_timeout(unsigned long arg)
+-{
+- struct sock *sk = (struct sock *) arg;
+-
+- DBG("sock %p state %d", sk, sk->state);
+-
+- bh_lock_sock(sk);
+- switch (sk->state) {
+- case BT_DISCONN:
+- l2cap_chan_del(sk, ETIMEDOUT);
+- break;
+-
+- default:
+- sk->err = ETIMEDOUT;
+- sk->state_change(sk);
+- break;
+- };
+- bh_unlock_sock(sk);
+-
+- l2cap_sock_kill(sk);
+- sock_put(sk);
+-}
+-
+-static void l2cap_sock_set_timer(struct sock *sk, long timeout)
+-{
+- DBG("sock %p state %d timeout %ld", sk, sk->state, timeout);
+-
+- if (!mod_timer(&sk->timer, jiffies + timeout))
+- sock_hold(sk);
+-}
+-
+-static void l2cap_sock_clear_timer(struct sock *sk)
+-{
+- DBG("sock %p state %d", sk, sk->state);
+-
+- if (timer_pending(&sk->timer) && del_timer(&sk->timer))
+- __sock_put(sk);
+-}
+-
+-static void l2cap_sock_init_timer(struct sock *sk)
+-{
+- init_timer(&sk->timer);
+- sk->timer.function = l2cap_sock_timeout;
+- sk->timer.data = (unsigned long)sk;
+-}
+-
+-static void l2cap_conn_timeout(unsigned long arg)
+-{
+- struct l2cap_conn *conn = (void *)arg;
+-
+- DBG("conn %p state %d", conn, conn->state);
+-
+- if (conn->state == BT_CONNECTED) {
+- hci_disconnect(conn->hconn, 0x13);
+- }
+-
+- return;
+-}
+-
+-static void l2cap_conn_set_timer(struct l2cap_conn *conn, long timeout)
+-{
+- DBG("conn %p state %d timeout %ld", conn, conn->state, timeout);
+-
+- mod_timer(&conn->timer, jiffies + timeout);
+-}
+-
+-static void l2cap_conn_clear_timer(struct l2cap_conn *conn)
+-{
+- DBG("conn %p state %d", conn, conn->state);
+-
+- del_timer(&conn->timer);
+-}
+-
+-static void l2cap_conn_init_timer(struct l2cap_conn *conn)
+-{
+- init_timer(&conn->timer);
+- conn->timer.function = l2cap_conn_timeout;
+- conn->timer.data = (unsigned long)conn;
+-}
+-
+-/* -------- L2CAP connections --------- */
+-/* Add new connection to the interface.
+- * Interface must be locked
+- */
+-static struct l2cap_conn *l2cap_conn_add(struct l2cap_iff *iff, bdaddr_t *dst)
+-{
+- struct l2cap_conn *conn;
+- bdaddr_t *src = iff->bdaddr;
+-
+- if (!(conn = kmalloc(sizeof(struct l2cap_conn), GFP_KERNEL)))
+- return NULL;
+-
+- memset(conn, 0, sizeof(struct l2cap_conn));
+-
+- conn->state = BT_OPEN;
+- conn->iff = iff;
+- bacpy(&conn->src, src);
+- bacpy(&conn->dst, dst);
+-
+- spin_lock_init(&conn->lock);
+- conn->chan_list.lock = RW_LOCK_UNLOCKED;
+-
+- l2cap_conn_init_timer(conn);
+-
+- __l2cap_conn_link(iff, conn);
+-
+- DBG("%s -> %s, %p", batostr(src), batostr(dst), conn);
+-
+- MOD_INC_USE_COUNT;
+-
+- return conn;
+-}
+-
+-/* Delete connection on the interface.
+- * Interface must be locked
+- */
+-static int l2cap_conn_del(struct l2cap_conn *conn, int err)
+-{
+- struct sock *sk;
+-
+- DBG("conn %p, state %d, err %d", conn, conn->state, err);
+-
+- l2cap_conn_clear_timer(conn);
+- __l2cap_conn_unlink(conn->iff, conn);
+-
+- conn->state = BT_CLOSED;
+-
+- if (conn->rx_skb)
+- kfree_skb(conn->rx_skb);
+-
+- /* Kill channels */
+- while ((sk = conn->chan_list.head)) {
+- bh_lock_sock(sk);
+- l2cap_sock_clear_timer(sk);
+- l2cap_chan_del(sk, err);
+- bh_unlock_sock(sk);
+-
+- l2cap_sock_kill(sk);
+- }
+-
+- kfree(conn);
+-
+- MOD_DEC_USE_COUNT;
+- return 0;
+-}
+-
+-static inline struct l2cap_conn *l2cap_get_conn_by_addr(struct l2cap_iff *iff, bdaddr_t *dst)
+-{
+- struct list_head *p;
+-
+- list_for_each(p, &iff->conn_list) {
+- struct l2cap_conn *c;
+-
+- c = list_entry(p, struct l2cap_conn, list);
+- if (!bacmp(&c->dst, dst))
+- return c;
+- }
+- return NULL;
+-}
+-
+-int l2cap_connect(struct sock *sk)
+-{
+- bdaddr_t *src = &l2cap_pi(sk)->src;
+- bdaddr_t *dst = &l2cap_pi(sk)->dst;
+- struct l2cap_conn *conn;
+- struct l2cap_iff *iff;
+- int err = 0;
+-
+- DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst), l2cap_pi(sk)->psm);
+-
+- read_lock_bh(&l2cap_rt_lock);
+-
+- /* Get route to remote BD address */
+- if (!(iff = l2cap_get_route(src, dst))) {
+- err = -EHOSTUNREACH;
+- goto done;
+- }
+-
+- /* Update source addr of the socket */
+- bacpy(src, iff->bdaddr);
+-
+- l2cap_iff_lock(iff);
+-
+- if (!(conn = l2cap_get_conn_by_addr(iff, dst))) {
+- /* Connection doesn't exist */
+- if (!(conn = l2cap_conn_add(iff, dst))) {
+- l2cap_iff_unlock(iff);
+- err = -ENOMEM;
+- goto done;
+- }
+- conn->out = 1;
+- }
+-
+- l2cap_iff_unlock(iff);
+-
+- l2cap_chan_add(conn, sk, NULL);
+-
+- sk->state = BT_CONNECT;
+- l2cap_sock_set_timer(sk, sk->sndtimeo);
+-
+- switch (conn->state) {
+- case BT_CONNECTED:
+- if (sk->type == SOCK_SEQPACKET) {
+- l2cap_conn_req req;
+- req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- req.psm = l2cap_pi(sk)->psm;
+- l2cap_send_req(conn, L2CAP_CONN_REQ, L2CAP_CONN_REQ_SIZE, &req);
+- } else {
+- l2cap_sock_clear_timer(sk);
+- sk->state = BT_CONNECTED;
+- }
+- break;
+-
+- case BT_CONNECT:
+- break;
+-
+- default:
+- /* Create ACL connection */
+- conn->state = BT_CONNECT;
+- hci_connect(iff->hdev, dst);
+- break;
+- };
+-
+-done:
+- read_unlock_bh(&l2cap_rt_lock);
+- return err;
+-}
+-
+-/* ------ Channel queues for listening sockets ------ */
+-void l2cap_accept_queue(struct sock *parent, struct sock *sk)
+-{
+- struct l2cap_accept_q *q = &l2cap_pi(parent)->accept_q;
+-
+- DBG("parent %p, sk %p", parent, sk);
+-
+- sock_hold(sk);
+- l2cap_pi(sk)->parent = parent;
+- l2cap_pi(sk)->next_q = NULL;
+-
+- if (!q->head) {
+- q->head = q->tail = sk;
+- } else {
+- struct sock *tail = q->tail;
+-
+- l2cap_pi(sk)->prev_q = tail;
+- l2cap_pi(tail)->next_q = sk;
+- q->tail = sk;
+- }
+-
+- parent->ack_backlog++;
+-}
+-
+-void l2cap_accept_unlink(struct sock *sk)
+-{
+- struct sock *parent = l2cap_pi(sk)->parent;
+- struct l2cap_accept_q *q = &l2cap_pi(parent)->accept_q;
+- struct sock *next, *prev;
+-
+- DBG("sk %p", sk);
+-
+- next = l2cap_pi(sk)->next_q;
+- prev = l2cap_pi(sk)->prev_q;
+-
+- if (sk == q->head)
+- q->head = next;
+- if (sk == q->tail)
+- q->tail = prev;
+-
+- if (next)
+- l2cap_pi(next)->prev_q = prev;
+- if (prev)
+- l2cap_pi(prev)->next_q = next;
+-
+- l2cap_pi(sk)->parent = NULL;
+-
+- parent->ack_backlog--;
+- __sock_put(sk);
+-}
+-
+-/* Get next connected channel in queue. */
+-struct sock *l2cap_accept_dequeue(struct sock *parent, int state)
+-{
+- struct l2cap_accept_q *q = &l2cap_pi(parent)->accept_q;
+- struct sock *sk;
+-
+- for (sk = q->head; sk; sk = l2cap_pi(sk)->next_q) {
+- if (!state || sk->state == state) {
+- l2cap_accept_unlink(sk);
+- break;
+- }
+- }
+-
+- DBG("parent %p, sk %p", parent, sk);
+-
+- return sk;
+-}
+-
+-/* -------- Socket interface ---------- */
+-static struct sock *__l2cap_get_sock_by_addr(struct sockaddr_l2 *addr)
+-{
+- bdaddr_t *src = &addr->l2_bdaddr;
+- __u16 psm = addr->l2_psm;
+- struct sock *sk;
+-
+- for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
+- if (l2cap_pi(sk)->psm == psm &&
+- !bacmp(&l2cap_pi(sk)->src, src))
+- break;
+- }
+-
+- return sk;
+-}
+-
+-/* Find socket listening on psm and source bdaddr.
+- * Returns closest match.
+- */
+-static struct sock *l2cap_get_sock_listen(bdaddr_t *src, __u16 psm)
+-{
+- struct sock *sk, *sk1 = NULL;
+-
+- read_lock(&l2cap_sk_list.lock);
+-
+- for (sk = l2cap_sk_list.head; sk; sk = sk->next) {
+- struct l2cap_pinfo *pi;
+-
+- if (sk->state != BT_LISTEN)
+- continue;
+-
+- pi = l2cap_pi(sk);
+-
+- if (pi->psm == psm) {
+- /* Exact match. */
+- if (!bacmp(&pi->src, src))
+- break;
+-
+- /* Closest match */
+- if (!bacmp(&pi->src, BDADDR_ANY))
+- sk1 = sk;
+- }
+- }
+-
+- read_unlock(&l2cap_sk_list.lock);
+-
+- return sk ? sk : sk1;
+-}
+-
+-static void l2cap_sock_destruct(struct sock *sk)
+-{
+- DBG("sk %p", sk);
+-
+- skb_queue_purge(&sk->receive_queue);
+- skb_queue_purge(&sk->write_queue);
+-
+- MOD_DEC_USE_COUNT;
+-}
+-
+-static void l2cap_sock_cleanup_listen(struct sock *parent)
+-{
+- struct sock *sk;
+-
+- DBG("parent %p", parent);
+-
+- /* Close not yet accepted channels */
+- while ((sk = l2cap_accept_dequeue(parent, 0)))
+- l2cap_sock_close(sk);
+-
+- parent->state = BT_CLOSED;
+- parent->zapped = 1;
+-}
+-
+-/* Kill socket (only if zapped and orphan)
+- * Must be called on unlocked socket.
+- */
+-static void l2cap_sock_kill(struct sock *sk)
+-{
+- if (!sk->zapped || sk->socket)
+- return;
+-
+- DBG("sk %p state %d", sk, sk->state);
+-
+- /* Kill poor orphan */
+- bluez_sock_unlink(&l2cap_sk_list, sk);
+- sk->dead = 1;
+- sock_put(sk);
+-}
+-
+-/* Close socket.
+- * Must be called on unlocked socket.
+- */
+-static void l2cap_sock_close(struct sock *sk)
+-{
+- struct l2cap_conn *conn;
+-
+- l2cap_sock_clear_timer(sk);
+-
+- lock_sock(sk);
+-
+- conn = l2cap_pi(sk)->conn;
+-
+- DBG("sk %p state %d conn %p socket %p", sk, sk->state, conn, sk->socket);
+-
+- switch (sk->state) {
+- case BT_LISTEN:
+- l2cap_sock_cleanup_listen(sk);
+- break;
+-
+- case BT_CONNECTED:
+- case BT_CONFIG:
+- if (sk->type == SOCK_SEQPACKET) {
+- l2cap_disconn_req req;
+-
+- sk->state = BT_DISCONN;
+-
+- req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+- req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- l2cap_send_req(conn, L2CAP_DISCONN_REQ, L2CAP_DISCONN_REQ_SIZE, &req);
+-
+- l2cap_sock_set_timer(sk, sk->sndtimeo);
+- } else {
+- l2cap_chan_del(sk, ECONNRESET);
+- }
+- break;
+-
+- case BT_CONNECT:
+- case BT_DISCONN:
+- l2cap_chan_del(sk, ECONNRESET);
+- break;
+-
+- default:
+- sk->zapped = 1;
+- break;
+- };
+-
+- release_sock(sk);
+-
+- l2cap_sock_kill(sk);
+-}
+-
+-static void l2cap_sock_init(struct sock *sk, struct sock *parent)
+-{
+- struct l2cap_pinfo *pi = l2cap_pi(sk);
+-
+- DBG("sk %p", sk);
+-
+- if (parent) {
+- sk->type = parent->type;
+-
+- pi->imtu = l2cap_pi(parent)->imtu;
+- pi->omtu = l2cap_pi(parent)->omtu;
+- } else {
+- pi->imtu = L2CAP_DEFAULT_MTU;
+- pi->omtu = 0;
+- }
+-
+- /* Default config options */
+- pi->conf_mtu = L2CAP_DEFAULT_MTU;
+- pi->flush_to = L2CAP_DEFAULT_FLUSH_TO;
+-}
+-
+-static struct sock *l2cap_sock_alloc(struct socket *sock, int proto, int prio)
+-{
+- struct sock *sk;
+-
+- if (!(sk = sk_alloc(PF_BLUETOOTH, prio, 1)))
+- return NULL;
+-
+- sock_init_data(sock, sk);
+-
+- sk->zapped = 0;
+-
+- sk->destruct = l2cap_sock_destruct;
+- sk->sndtimeo = L2CAP_CONN_TIMEOUT;
+-
+- sk->protocol = proto;
+- sk->state = BT_OPEN;
+-
+- l2cap_sock_init_timer(sk);
+-
+- bluez_sock_link(&l2cap_sk_list, sk);
+-
+- MOD_INC_USE_COUNT;
+-
+- return sk;
+-}
+-
+-static int l2cap_sock_create(struct socket *sock, int protocol)
+-{
+- struct sock *sk;
+-
+- DBG("sock %p", sock);
+-
+- sock->state = SS_UNCONNECTED;
+-
+- if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_RAW)
+- return -ESOCKTNOSUPPORT;
+-
+- sock->ops = &l2cap_sock_ops;
+-
+- if (!(sk = l2cap_sock_alloc(sock, protocol, GFP_KERNEL)))
+- return -ENOMEM;
+-
+- l2cap_sock_init(sk, NULL);
+-
+- return 0;
+-}
+-
+-static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
+-{
+- struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
+- struct sock *sk = sock->sk;
+- int err = 0;
+-
+- DBG("sk %p, %s %d", sk, batostr(&la->l2_bdaddr), la->l2_psm);
+-
+- if (!addr || addr->sa_family != AF_BLUETOOTH)
+- return -EINVAL;
+-
+- lock_sock(sk);
+-
+- if (sk->state != BT_OPEN) {
+- err = -EBADFD;
+- goto done;
+- }
+-
+- write_lock(&l2cap_sk_list.lock);
+-
+- if (la->l2_psm && __l2cap_get_sock_by_addr(la)) {
+- err = -EADDRINUSE;
+- goto unlock;
+- }
+-
+- /* Save source address */
+- bacpy(&l2cap_pi(sk)->src, &la->l2_bdaddr);
+- l2cap_pi(sk)->psm = la->l2_psm;
+- sk->state = BT_BOUND;
+-
+-unlock:
+- write_unlock(&l2cap_sk_list.lock);
+-
+-done:
+- release_sock(sk);
+-
+- return err;
+-}
+-
+-static int l2cap_sock_w4_connect(struct sock *sk, int flags)
+-{
+- DECLARE_WAITQUEUE(wait, current);
+- long timeo = sock_sndtimeo(sk, flags & O_NONBLOCK);
+- int err = 0;
+-
+- DBG("sk %p", sk);
+-
+- add_wait_queue(sk->sleep, &wait);
+- current->state = TASK_INTERRUPTIBLE;
+-
+- while (sk->state != BT_CONNECTED) {
+- if (!timeo) {
+- err = -EAGAIN;
+- break;
+- }
+-
+- release_sock(sk);
+- timeo = schedule_timeout(timeo);
+- lock_sock(sk);
+-
+- err = 0;
+- if (sk->state == BT_CONNECTED)
+- break;
+-
+- if (sk->err) {
+- err = sock_error(sk);
+- break;
+- }
+-
+- if (signal_pending(current)) {
+- err = sock_intr_errno(timeo);
+- break;
+- }
+- }
+- current->state = TASK_RUNNING;
+- remove_wait_queue(sk->sleep, &wait);
+-
+- return err;
+-}
+-
+-static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
+-{
+- struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
+- struct sock *sk = sock->sk;
+- int err = 0;
+-
+- lock_sock(sk);
+-
+- DBG("sk %p", sk);
+-
+- if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_l2)) {
+- err = -EINVAL;
+- goto done;
+- }
+-
+- if (sk->state != BT_OPEN && sk->state != BT_BOUND) {
+- err = -EBADFD;
+- goto done;
+- }
+-
+- if (sk->type == SOCK_SEQPACKET && !la->l2_psm) {
+- err = -EINVAL;
+- goto done;
+- }
+-
+- /* Set destination address and psm */
+- bacpy(&l2cap_pi(sk)->dst, &la->l2_bdaddr);
+- l2cap_pi(sk)->psm = la->l2_psm;
+-
+- if ((err = l2cap_connect(sk)))
+- goto done;
+-
+- err = l2cap_sock_w4_connect(sk, flags);
+-
+-done:
+- release_sock(sk);
+- return err;
+-}
+-
+-int l2cap_sock_listen(struct socket *sock, int backlog)
+-{
+- struct sock *sk = sock->sk;
+- int err = 0;
+-
+- DBG("sk %p backlog %d", sk, backlog);
+-
+- lock_sock(sk);
+-
+- if (sk->state != BT_BOUND || sock->type != SOCK_SEQPACKET) {
+- err = -EBADFD;
+- goto done;
+- }
+-
+- if (!l2cap_pi(sk)->psm) {
+- err = -EINVAL;
+- goto done;
+- }
+-
+- sk->max_ack_backlog = backlog;
+- sk->ack_backlog = 0;
+- sk->state = BT_LISTEN;
+-
+-done:
+- release_sock(sk);
+- return err;
+-}
+-
+-int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags)
+-{
+- DECLARE_WAITQUEUE(wait, current);
+- struct sock *sk = sock->sk, *ch;
+- long timeo;
+- int err = 0;
+-
+- lock_sock(sk);
+-
+- if (sk->state != BT_LISTEN) {
+- err = -EBADFD;
+- goto done;
+- }
+-
+- timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
+-
+- DBG("sk %p timeo %ld", sk, timeo);
+-
+- /* Wait for an incoming connection. (wake-one). */
+- add_wait_queue_exclusive(sk->sleep, &wait);
+- current->state = TASK_INTERRUPTIBLE;
+- while (!(ch = l2cap_accept_dequeue(sk, BT_CONNECTED))) {
+- if (!timeo) {
+- err = -EAGAIN;
+- break;
+- }
+-
+- release_sock(sk);
+- timeo = schedule_timeout(timeo);
+- lock_sock(sk);
+-
+- if (sk->state != BT_LISTEN) {
+- err = -EBADFD;
+- break;
+- }
+-
+- if (signal_pending(current)) {
+- err = sock_intr_errno(timeo);
+- break;
+- }
+- }
+- current->state = TASK_RUNNING;
+- remove_wait_queue(sk->sleep, &wait);
+-
+- if (err)
+- goto done;
+-
+- sock_graft(ch, newsock);
+- newsock->state = SS_CONNECTED;
+-
+- DBG("new socket %p", ch);
+-
+-done:
+- release_sock(sk);
+-
+- return err;
+-}
+-
+-static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
+-{
+- struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
+- struct sock *sk = sock->sk;
+-
+- DBG("sock %p, sk %p", sock, sk);
+-
+- addr->sa_family = AF_BLUETOOTH;
+- *len = sizeof(struct sockaddr_l2);
+-
+- if (peer)
+- bacpy(&la->l2_bdaddr, &l2cap_pi(sk)->dst);
+- else
+- bacpy(&la->l2_bdaddr, &l2cap_pi(sk)->src);
+-
+- la->l2_psm = l2cap_pi(sk)->psm;
+-
+- return 0;
+-}
+-
+-static int l2cap_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct scm_cookie *scm)
+-{
+- struct sock *sk = sock->sk;
+- int err = 0;
+-
+- DBG("sock %p, sk %p", sock, sk);
+-
+- if (sk->err)
+- return sock_error(sk);
+-
+- if (msg->msg_flags & MSG_OOB)
+- return -EOPNOTSUPP;
+-
+- lock_sock(sk);
+-
+- if (sk->state == BT_CONNECTED)
+- err = l2cap_chan_send(sk, msg, len);
+- else
+- err = -ENOTCONN;
+-
+- release_sock(sk);
+- return err;
+-}
+-
+-static int l2cap_sock_recvmsg(struct socket *sock, struct msghdr *msg, int len, int flags, struct scm_cookie *scm)
+-{
+- struct sock *sk = sock->sk;
+- int noblock = flags & MSG_DONTWAIT;
+- int copied, err;
+- struct sk_buff *skb;
+-
+- DBG("sock %p, sk %p", sock, sk);
+-
+- if (flags & (MSG_OOB))
+- return -EOPNOTSUPP;
+-
+- if (sk->state == BT_CLOSED)
+- return 0;
+-
+- if (!(skb = skb_recv_datagram(sk, flags, noblock, &err)))
+- return err;
+-
+- msg->msg_namelen = 0;
+-
+- copied = skb->len;
+- if (len < copied) {
+- msg->msg_flags |= MSG_TRUNC;
+- copied = len;
+- }
+-
+- skb->h.raw = skb->data;
+- err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
+-
+- skb_free_datagram(sk, skb);
+-
+- return err ? : copied;
+-}
+-
+-int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, int optlen)
+-{
+- struct sock *sk = sock->sk;
+- struct l2cap_options opts;
+- int err = 0;
+-
+- DBG("sk %p", sk);
+-
+- lock_sock(sk);
+-
+- switch (optname) {
+- case L2CAP_OPTIONS:
+- if (copy_from_user((char *)&opts, optval, optlen)) {
+- err = -EFAULT;
+- break;
+- }
+- l2cap_pi(sk)->imtu = opts.imtu;
+- l2cap_pi(sk)->omtu = opts.omtu;
+- break;
+-
+- default:
+- err = -ENOPROTOOPT;
+- break;
+- };
+-
+- release_sock(sk);
+- return err;
+-}
+-
+-int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, char *optval, int *optlen)
+-{
+- struct sock *sk = sock->sk;
+- struct l2cap_options opts;
+- struct l2cap_conninfo cinfo;
+- int len, err = 0;
+-
+- if (get_user(len, optlen))
+- return -EFAULT;
+-
+- lock_sock(sk);
+-
+- switch (optname) {
+- case L2CAP_OPTIONS:
+- opts.imtu = l2cap_pi(sk)->imtu;
+- opts.omtu = l2cap_pi(sk)->omtu;
+- opts.flush_to = l2cap_pi(sk)->flush_to;
+-
+- len = MIN(len, sizeof(opts));
+- if (copy_to_user(optval, (char *)&opts, len))
+- err = -EFAULT;
+-
+- break;
+-
+- case L2CAP_CONNINFO:
+- if (sk->state != BT_CONNECTED) {
+- err = -ENOTCONN;
+- break;
+- }
+-
+- cinfo.hci_handle = l2cap_pi(sk)->conn->hconn->handle;
+-
+- len = MIN(len, sizeof(cinfo));
+- if (copy_to_user(optval, (char *)&cinfo, len))
+- err = -EFAULT;
+-
+- break;
+-
+- default:
+- err = -ENOPROTOOPT;
+- break;
+- };
+-
+- release_sock(sk);
+- return err;
+-}
+-
+-static unsigned int l2cap_sock_poll(struct file * file, struct socket *sock, poll_table *wait)
+-{
+- struct sock *sk = sock->sk;
+- struct l2cap_accept_q *aq;
+- unsigned int mask;
+-
+- DBG("sock %p, sk %p", sock, sk);
+-
+- poll_wait(file, sk->sleep, wait);
+- mask = 0;
+-
+- if (sk->err || !skb_queue_empty(&sk->error_queue))
+- mask |= POLLERR;
+-
+- if (sk->shutdown == SHUTDOWN_MASK)
+- mask |= POLLHUP;
+-
+- aq = &l2cap_pi(sk)->accept_q;
+- if (!skb_queue_empty(&sk->receive_queue) || aq->head || (sk->shutdown & RCV_SHUTDOWN))
+- mask |= POLLIN | POLLRDNORM;
+-
+- if (sk->state == BT_CLOSED)
+- mask |= POLLHUP;
+-
+- if (sock_writeable(sk))
+- mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
+- else
+- set_bit(SOCK_ASYNC_NOSPACE, &sk->socket->flags);
+-
+- return mask;
+-}
+-
+-static int l2cap_sock_release(struct socket *sock)
+-{
+- struct sock *sk = sock->sk;
+-
+- DBG("sock %p, sk %p", sock, sk);
+-
+- if (!sk)
+- return 0;
+-
+- sock_orphan(sk);
+-
+- l2cap_sock_close(sk);
+-
+- return 0;
+-}
+-
+-/* --------- L2CAP channels --------- */
+-static struct sock * __l2cap_get_chan_by_dcid(struct l2cap_chan_list *l, __u16 cid)
+-{
+- struct sock *s;
+-
+- for (s = l->head; s; s = l2cap_pi(s)->next_c) {
+- if (l2cap_pi(s)->dcid == cid)
+- break;
+- }
+-
+- return s;
+-}
+-
+-static inline struct sock *l2cap_get_chan_by_dcid(struct l2cap_chan_list *l, __u16 cid)
+-{
+- struct sock *s;
+-
+- read_lock(&l->lock);
+- s = __l2cap_get_chan_by_dcid(l, cid);
+- read_unlock(&l->lock);
+-
+- return s;
+-}
+-
+-static struct sock *__l2cap_get_chan_by_scid(struct l2cap_chan_list *l, __u16 cid)
+-{
+- struct sock *s;
+-
+- for (s = l->head; s; s = l2cap_pi(s)->next_c) {
+- if (l2cap_pi(s)->scid == cid)
+- break;
+- }
+-
+- return s;
+-}
+-static inline struct sock *l2cap_get_chan_by_scid(struct l2cap_chan_list *l, __u16 cid)
+-{
+- struct sock *s;
+-
+- read_lock(&l->lock);
+- s = __l2cap_get_chan_by_scid(l, cid);
+- read_unlock(&l->lock);
+-
+- return s;
+-}
+-
+-static struct sock *__l2cap_get_chan_by_ident(struct l2cap_chan_list *l, __u8 ident)
+-{
+- struct sock *s;
+-
+- for (s = l->head; s; s = l2cap_pi(s)->next_c) {
+- if (l2cap_pi(s)->ident == ident)
+- break;
+- }
+-
+- return s;
+-}
+-
+-static inline struct sock *l2cap_get_chan_by_ident(struct l2cap_chan_list *l, __u8 ident)
+-{
+- struct sock *s;
+-
+- read_lock(&l->lock);
+- s = __l2cap_get_chan_by_ident(l, ident);
+- read_unlock(&l->lock);
+-
+- return s;
+-}
+-
+-static __u16 l2cap_alloc_cid(struct l2cap_chan_list *l)
+-{
+- __u16 cid = 0x0040;
+-
+- for (; cid < 0xffff; cid++) {
+- if(!__l2cap_get_chan_by_scid(l, cid))
+- return cid;
+- }
+-
+- return 0;
+-}
+-
+-static inline void __l2cap_chan_link(struct l2cap_chan_list *l, struct sock *sk)
+-{
+- sock_hold(sk);
+-
+- if (l->head)
+- l2cap_pi(l->head)->prev_c = sk;
+-
+- l2cap_pi(sk)->next_c = l->head;
+- l2cap_pi(sk)->prev_c = NULL;
+- l->head = sk;
+-}
+-
+-static inline void l2cap_chan_unlink(struct l2cap_chan_list *l, struct sock *sk)
+-{
+- struct sock *next = l2cap_pi(sk)->next_c, *prev = l2cap_pi(sk)->prev_c;
+-
+- write_lock(&l->lock);
+- if (sk == l->head)
+- l->head = next;
+-
+- if (next)
+- l2cap_pi(next)->prev_c = prev;
+- if (prev)
+- l2cap_pi(prev)->next_c = next;
+- write_unlock(&l->lock);
+-
+- __sock_put(sk);
+-}
+-
+-static void __l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent)
+-{
+- struct l2cap_chan_list *l = &conn->chan_list;
+-
+- DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn, l2cap_pi(sk)->psm, l2cap_pi(sk)->dcid);
+-
+- l2cap_conn_clear_timer(conn);
+-
+- atomic_inc(&conn->refcnt);
+- l2cap_pi(sk)->conn = conn;
+-
+- if (sk->type == SOCK_SEQPACKET) {
+- /* Alloc CID for normal socket */
+- l2cap_pi(sk)->scid = l2cap_alloc_cid(l);
+- } else {
+- /* Raw socket can send only signalling messages */
+- l2cap_pi(sk)->scid = 0x0001;
+- l2cap_pi(sk)->dcid = 0x0001;
+- l2cap_pi(sk)->omtu = L2CAP_DEFAULT_MTU;
+- }
+-
+- __l2cap_chan_link(l, sk);
+-
+- if (parent)
+- l2cap_accept_queue(parent, sk);
+-}
+-
+-static inline void l2cap_chan_add(struct l2cap_conn *conn, struct sock *sk, struct sock *parent)
+-{
+- struct l2cap_chan_list *l = &conn->chan_list;
+-
+- write_lock(&l->lock);
+- __l2cap_chan_add(conn, sk, parent);
+- write_unlock(&l->lock);
+-}
+-
+-/* Delete channel.
+- * Must be called on the locked socket. */
+-static void l2cap_chan_del(struct sock *sk, int err)
+-{
+- struct l2cap_conn *conn;
+- struct sock *parent;
+-
+- conn = l2cap_pi(sk)->conn;
+- parent = l2cap_pi(sk)->parent;
+-
+- DBG("sk %p, conn %p, err %d", sk, conn, err);
+-
+- if (parent) {
+- /* Unlink from parent accept queue */
+- bh_lock_sock(parent);
+- l2cap_accept_unlink(sk);
+- bh_unlock_sock(parent);
+- }
+-
+- if (conn) {
+- long timeout;
+-
+- /* Unlink from channel list */
+- l2cap_chan_unlink(&conn->chan_list, sk);
+- l2cap_pi(sk)->conn = NULL;
+-
+- if (conn->out)
+- timeout = L2CAP_DISCONN_TIMEOUT;
+- else
+- timeout = L2CAP_CONN_IDLE_TIMEOUT;
+-
+- if (atomic_dec_and_test(&conn->refcnt) && conn->state == BT_CONNECTED) {
+- /* Schedule Baseband disconnect */
+- l2cap_conn_set_timer(conn, timeout);
+- }
+- }
+-
+- sk->state = BT_CLOSED;
+- sk->err = err;
+- sk->state_change(sk);
+-
+- sk->zapped = 1;
+-}
+-
+-static void l2cap_conn_ready(struct l2cap_conn *conn)
+-{
+- struct l2cap_chan_list *l = &conn->chan_list;
+- struct sock *sk;
+-
+- DBG("conn %p", conn);
+-
+- read_lock(&l->lock);
+-
+- for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
+- bh_lock_sock(sk);
+-
+- if (sk->type != SOCK_SEQPACKET) {
+- sk->state = BT_CONNECTED;
+- sk->state_change(sk);
+- l2cap_sock_clear_timer(sk);
+- } else if (sk->state == BT_CONNECT) {
+- l2cap_conn_req req;
+- req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- req.psm = l2cap_pi(sk)->psm;
+- l2cap_send_req(conn, L2CAP_CONN_REQ, L2CAP_CONN_REQ_SIZE, &req);
+-
+- l2cap_sock_set_timer(sk, sk->sndtimeo);
+- }
+-
+- bh_unlock_sock(sk);
+- }
+-
+- read_unlock(&l->lock);
+-}
+-
+-static void l2cap_chan_ready(struct sock *sk)
+-{
+- struct sock *parent = l2cap_pi(sk)->parent;
+-
+- DBG("sk %p, parent %p", sk, parent);
+-
+- l2cap_pi(sk)->conf_state = 0;
+- l2cap_sock_clear_timer(sk);
+-
+- if (!parent) {
+- /* Outgoing channel.
+- * Wake up socket sleeping on connect.
+- */
+- sk->state = BT_CONNECTED;
+- sk->state_change(sk);
+- } else {
+- /* Incomming channel.
+- * Wake up socket sleeping on accept.
+- */
+- parent->data_ready(parent, 1);
+- }
+-}
+-
+-/* Copy frame to all raw sockets on that connection */
+-void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
+-{
+- struct l2cap_chan_list *l = &conn->chan_list;
+- struct sk_buff *nskb;
+- struct sock * sk;
+-
+- DBG("conn %p", conn);
+-
+- read_lock(&l->lock);
+- for (sk = l->head; sk; sk = l2cap_pi(sk)->next_c) {
+- if (sk->type != SOCK_RAW)
+- continue;
+-
+- /* Don't send frame to the socket it came from */
+- if (skb->sk == sk)
+- continue;
+-
+- if (!(nskb = skb_clone(skb, GFP_ATOMIC)))
+- continue;
+-
+- skb_queue_tail(&sk->receive_queue, nskb);
+- sk->data_ready(sk, nskb->len);
+- }
+- read_unlock(&l->lock);
+-}
+-
+-static int l2cap_chan_send(struct sock *sk, struct msghdr *msg, int len)
+-{
+- struct l2cap_conn *conn = l2cap_pi(sk)->conn;
+- struct sk_buff *skb, **frag;
+- int err, size, count, sent=0;
+- l2cap_hdr *lh;
+-
+- /* Check outgoing MTU */
+- if (len > l2cap_pi(sk)->omtu)
+- return -EINVAL;
+-
+- DBG("sk %p len %d", sk, len);
+-
+- /* First fragment (with L2CAP header) */
+- count = MIN(conn->iff->mtu - L2CAP_HDR_SIZE, len);
+- size = L2CAP_HDR_SIZE + count;
+- if (!(skb = bluez_skb_send_alloc(sk, size, msg->msg_flags & MSG_DONTWAIT, &err)))
+- return err;
+-
+- /* Create L2CAP header */
+- lh = (l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
+- lh->len = __cpu_to_le16(len);
+- lh->cid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+-
+- if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count)) {
+- err = -EFAULT;
+- goto fail;
+- }
+-
+- sent += count;
+- len -= count;
+-
+- /* Continuation fragments (no L2CAP header) */
+- frag = &skb_shinfo(skb)->frag_list;
+- while (len) {
+- count = MIN(conn->iff->mtu, len);
+-
+- *frag = bluez_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err);
+- if (!*frag)
+- goto fail;
+-
+- if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count)) {
+- err = -EFAULT;
+- goto fail;
+- }
+-
+- sent += count;
+- len -= count;
+-
+- frag = &(*frag)->next;
+- }
+-
+- if ((err = hci_send_acl(conn->hconn, skb, 0)) < 0)
+- goto fail;
+-
+- return sent;
+-
+-fail:
+- kfree_skb(skb);
+- return err;
+-}
+-
+-/* --------- L2CAP signalling commands --------- */
+-static inline __u8 l2cap_get_ident(struct l2cap_conn *conn)
+-{
+- __u8 id;
+-
+- /* Get next available identificator.
+- * 1 - 199 are used by kernel.
+- * 200 - 254 are used by utilities like l2ping, etc
+- */
+-
+- spin_lock(&conn->lock);
+-
+- if (++conn->tx_ident > 199)
+- conn->tx_ident = 1;
+-
+- id = conn->tx_ident;
+-
+- spin_unlock(&conn->lock);
+-
+- return id;
+-}
+-
+-static inline struct sk_buff *l2cap_build_cmd(__u8 code, __u8 ident, __u16 len, void *data)
+-{
+- struct sk_buff *skb;
+- l2cap_cmd_hdr *cmd;
+- l2cap_hdr *lh;
+- int size;
+-
+- DBG("code 0x%2.2x, ident 0x%2.2x, len %d", code, ident, len);
+-
+- size = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + len;
+- if (!(skb = bluez_skb_alloc(size, GFP_ATOMIC)))
+- return NULL;
+-
+- lh = (l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
+- lh->len = __cpu_to_le16(L2CAP_CMD_HDR_SIZE + len);
+- lh->cid = __cpu_to_le16(0x0001);
+-
+- cmd = (l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
+- cmd->code = code;
+- cmd->ident = ident;
+- cmd->len = __cpu_to_le16(len);
+-
+- if (len)
+- memcpy(skb_put(skb, len), data, len);
+-
+- return skb;
+-}
+-
+-static int l2cap_send_req(struct l2cap_conn *conn, __u8 code, __u16 len, void *data)
+-{
+- struct sk_buff *skb;
+- __u8 ident;
+-
+- DBG("code 0x%2.2x", code);
+-
+- ident = l2cap_get_ident(conn);
+- if (!(skb = l2cap_build_cmd(code, ident, len, data)))
+- return -ENOMEM;
+- return hci_send_acl(conn->hconn, skb, 0);
+-}
+-
+-static int l2cap_send_rsp(struct l2cap_conn *conn, __u8 ident, __u8 code, __u16 len, void *data)
+-{
+- struct sk_buff *skb;
+-
+- DBG("code 0x%2.2x", code);
+-
+- if (!(skb = l2cap_build_cmd(code, ident, len, data)))
+- return -ENOMEM;
+- return hci_send_acl(conn->hconn, skb, 0);
+-}
+-
+-static inline int l2cap_get_conf_opt(__u8 **ptr, __u8 *type, __u32 *val)
+-{
+- l2cap_conf_opt *opt = (l2cap_conf_opt *) (*ptr);
+- int len;
+-
+- *type = opt->type;
+- switch (opt->len) {
+- case 1:
+- *val = *((__u8 *) opt->val);
+- break;
+-
+- case 2:
+- *val = __le16_to_cpu(*((__u16 *)opt->val));
+- break;
+-
+- case 4:
+- *val = __le32_to_cpu(*((__u32 *)opt->val));
+- break;
+-
+- default:
+- *val = 0L;
+- break;
+- };
+-
+- DBG("type 0x%2.2x len %d val 0x%8.8x", *type, opt->len, *val);
+-
+- len = L2CAP_CONF_OPT_SIZE + opt->len;
+-
+- *ptr += len;
+-
+- return len;
+-}
+-
+-static inline void l2cap_parse_conf_req(struct sock *sk, char *data, int len)
+-{
+- __u8 type, hint; __u32 val;
+- __u8 *ptr = data;
+-
+- DBG("sk %p len %d", sk, len);
+-
+- while (len >= L2CAP_CONF_OPT_SIZE) {
+- len -= l2cap_get_conf_opt(&ptr, &type, &val);
+-
+- hint = type & 0x80;
+- type &= 0x7f;
+-
+- switch (type) {
+- case L2CAP_CONF_MTU:
+- l2cap_pi(sk)->conf_mtu = val;
+- break;
+-
+- case L2CAP_CONF_FLUSH_TO:
+- l2cap_pi(sk)->flush_to = val;
+- break;
+-
+- case L2CAP_CONF_QOS:
+- break;
+-
+- default:
+- if (hint)
+- break;
+-
+- /* FIXME: Reject unknon option */
+- break;
+- };
+- }
+-}
+-
+-static inline void l2cap_add_conf_opt(__u8 **ptr, __u8 type, __u8 len, __u32 val)
+-{
+- register l2cap_conf_opt *opt = (l2cap_conf_opt *) (*ptr);
+-
+- DBG("type 0x%2.2x len %d val 0x%8.8x", type, len, val);
+-
+- opt->type = type;
+- opt->len = len;
+- switch (len) {
+- case 1:
+- *((__u8 *) opt->val) = val;
+- break;
+-
+- case 2:
+- *((__u16 *) opt->val) = __cpu_to_le16(val);
+- break;
+-
+- case 4:
+- *((__u32 *) opt->val) = __cpu_to_le32(val);
+- break;
+- };
+-
+- *ptr += L2CAP_CONF_OPT_SIZE + len;
+-}
+-
+-static int l2cap_build_conf_req(struct sock *sk, __u8 *data)
+-{
+- struct l2cap_pinfo *pi = l2cap_pi(sk);
+- l2cap_conf_req *req = (l2cap_conf_req *) data;
+- __u8 *ptr = req->data;
+-
+- DBG("sk %p", sk);
+-
+- if (pi->imtu != L2CAP_DEFAULT_MTU)
+- l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->imtu);
+-
+- /* FIXME. Need actual value of the flush timeout */
+- //if (flush_to != L2CAP_DEFAULT_FLUSH_TO)
+- // l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO, 2, pi->flush_to);
+-
+- req->dcid = __cpu_to_le16(pi->dcid);
+- req->flags = __cpu_to_le16(0);
+-
+- return ptr - data;
+-}
+-
+-static int l2cap_conf_output(struct sock *sk, __u8 **ptr)
+-{
+- struct l2cap_pinfo *pi = l2cap_pi(sk);
+- int result = 0;
+-
+- /* Configure output options and let other side know
+- * which ones we don't like.
+- */
+- if (pi->conf_mtu < pi->omtu) {
+- l2cap_add_conf_opt(ptr, L2CAP_CONF_MTU, 2, l2cap_pi(sk)->omtu);
+- result = L2CAP_CONF_UNACCEPT;
+- } else {
+- pi->omtu = pi->conf_mtu;
+- }
+-
+- DBG("sk %p result %d", sk, result);
+- return result;
+-}
+-
+-static int l2cap_build_conf_rsp(struct sock *sk, __u8 *data, int *result)
+-{
+- l2cap_conf_rsp *rsp = (l2cap_conf_rsp *) data;
+- __u8 *ptr = rsp->data;
+-
+- DBG("sk %p complete %d", sk, result ? 1 : 0);
+-
+- if (result)
+- *result = l2cap_conf_output(sk, &ptr);
+-
+- rsp->scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+- rsp->result = __cpu_to_le16(result ? *result : 0);
+- rsp->flags = __cpu_to_le16(0);
+-
+- return ptr - data;
+-}
+-
+-static inline int l2cap_connect_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
+-{
+- struct l2cap_chan_list *list = &conn->chan_list;
+- l2cap_conn_req *req = (l2cap_conn_req *) data;
+- l2cap_conn_rsp rsp;
+- struct sock *sk, *parent;
+-
+- __u16 scid = __le16_to_cpu(req->scid);
+- __u16 psm = req->psm;
+-
+- DBG("psm 0x%2.2x scid 0x%4.4x", psm, scid);
+-
+- /* Check if we have socket listening on psm */
+- if (!(parent = l2cap_get_sock_listen(&conn->src, psm)))
+- goto reject;
+-
+- bh_lock_sock(parent);
+- write_lock(&list->lock);
+-
+- /* Check if we already have channel with that dcid */
+- if (__l2cap_get_chan_by_dcid(list, scid))
+- goto unlock;
+-
+- /* Check for backlog size */
+- if (parent->ack_backlog > parent->max_ack_backlog)
+- goto unlock;
+-
+- if (!(sk = l2cap_sock_alloc(NULL, BTPROTO_L2CAP, GFP_ATOMIC)))
+- goto unlock;
+-
+- l2cap_sock_init(sk, parent);
+-
+- bacpy(&l2cap_pi(sk)->src, &conn->src);
+- bacpy(&l2cap_pi(sk)->dst, &conn->dst);
+- l2cap_pi(sk)->psm = psm;
+- l2cap_pi(sk)->dcid = scid;
+-
+- __l2cap_chan_add(conn, sk, parent);
+- sk->state = BT_CONFIG;
+-
+- write_unlock(&list->lock);
+- bh_unlock_sock(parent);
+-
+- rsp.dcid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- rsp.scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+- rsp.result = __cpu_to_le16(0);
+- rsp.status = __cpu_to_le16(0);
+- l2cap_send_rsp(conn, cmd->ident, L2CAP_CONN_RSP, L2CAP_CONN_RSP_SIZE, &rsp);
+-
+- return 0;
+-
+-unlock:
+- write_unlock(&list->lock);
+- bh_unlock_sock(parent);
+-
+-reject:
+- rsp.scid = __cpu_to_le16(scid);
+- rsp.dcid = __cpu_to_le16(0);
+- rsp.status = __cpu_to_le16(0);
+- rsp.result = __cpu_to_le16(L2CAP_CONN_NO_MEM);
+- l2cap_send_rsp(conn, cmd->ident, L2CAP_CONN_RSP, L2CAP_CONN_RSP_SIZE, &rsp);
+-
+- return 0;
+-}
+-
+-static inline int l2cap_connect_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
+-{
+- l2cap_conn_rsp *rsp = (l2cap_conn_rsp *) data;
+- __u16 scid, dcid, result, status;
+- struct sock *sk;
+-
+- scid = __le16_to_cpu(rsp->scid);
+- dcid = __le16_to_cpu(rsp->dcid);
+- result = __le16_to_cpu(rsp->result);
+- status = __le16_to_cpu(rsp->status);
+-
+- DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x", dcid, scid, result, status);
+-
+- if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
+- return -ENOENT;
+-
+- bh_lock_sock(sk);
+-
+- if (!result) {
+- char req[64];
+-
+- sk->state = BT_CONFIG;
+- l2cap_pi(sk)->dcid = dcid;
+- l2cap_pi(sk)->conf_state |= CONF_REQ_SENT;
+-
+- l2cap_send_req(conn, L2CAP_CONF_REQ, l2cap_build_conf_req(sk, req), req);
+- } else {
+- l2cap_chan_del(sk, ECONNREFUSED);
+- }
+-
+- bh_unlock_sock(sk);
+- return 0;
+-}
+-
+-static inline int l2cap_config_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
+-{
+- l2cap_conf_req * req = (l2cap_conf_req *) data;
+- __u16 dcid, flags;
+- __u8 rsp[64];
+- struct sock *sk;
+- int result;
+-
+- dcid = __le16_to_cpu(req->dcid);
+- flags = __le16_to_cpu(req->flags);
+-
+- DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
+-
+- if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid)))
+- return -ENOENT;
+-
+- bh_lock_sock(sk);
+-
+- l2cap_parse_conf_req(sk, req->data, cmd->len - L2CAP_CONF_REQ_SIZE);
+-
+- if (flags & 0x01) {
+- /* Incomplete config. Send empty response. */
+- l2cap_send_rsp(conn, cmd->ident, L2CAP_CONF_RSP, l2cap_build_conf_rsp(sk, rsp, NULL), rsp);
+- goto unlock;
+- }
+-
+- /* Complete config. */
+- l2cap_send_rsp(conn, cmd->ident, L2CAP_CONF_RSP, l2cap_build_conf_rsp(sk, rsp, &result), rsp);
+-
+- if (result)
+- goto unlock;
+-
+- /* Output config done */
+- l2cap_pi(sk)->conf_state |= CONF_OUTPUT_DONE;
+-
+- if (l2cap_pi(sk)->conf_state & CONF_INPUT_DONE) {
+- sk->state = BT_CONNECTED;
+- l2cap_chan_ready(sk);
+- } else if (!(l2cap_pi(sk)->conf_state & CONF_REQ_SENT)) {
+- char req[64];
+- l2cap_send_req(conn, L2CAP_CONF_REQ, l2cap_build_conf_req(sk, req), req);
+- }
+-
+-unlock:
+- bh_unlock_sock(sk);
+-
+- return 0;
+-}
+-
+-static inline int l2cap_config_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
+-{
+- l2cap_conf_rsp *rsp = (l2cap_conf_rsp *)data;
+- __u16 scid, flags, result;
+- struct sock *sk;
+- int err = 0;
+-
+- scid = __le16_to_cpu(rsp->scid);
+- flags = __le16_to_cpu(rsp->flags);
+- result = __le16_to_cpu(rsp->result);
+-
+- DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x", scid, flags, result);
+-
+- if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
+- return -ENOENT;
+-
+- bh_lock_sock(sk);
+-
+- if (result) {
+- l2cap_disconn_req req;
+-
+- /* They didn't like our options. Well... we do not negotiate.
+- * Close channel.
+- */
+- sk->state = BT_DISCONN;
+-
+- req.dcid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+- req.scid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- l2cap_send_req(conn, L2CAP_DISCONN_REQ, L2CAP_DISCONN_REQ_SIZE, &req);
+-
+- l2cap_sock_set_timer(sk, sk->sndtimeo);
+- goto done;
+- }
+-
+- if (flags & 0x01)
+- goto done;
+-
+- /* Input config done */
+- l2cap_pi(sk)->conf_state |= CONF_INPUT_DONE;
+-
+- if (l2cap_pi(sk)->conf_state & CONF_OUTPUT_DONE) {
+- sk->state = BT_CONNECTED;
+- l2cap_chan_ready(sk);
+- }
+-
+-done:
+- bh_unlock_sock(sk);
+-
+- return err;
+-}
+-
+-static inline int l2cap_disconnect_req(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
+-{
+- l2cap_disconn_req *req = (l2cap_disconn_req *) data;
+- l2cap_disconn_rsp rsp;
+- __u16 dcid, scid;
+- struct sock *sk;
+-
+- scid = __le16_to_cpu(req->scid);
+- dcid = __le16_to_cpu(req->dcid);
+-
+- DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
+-
+- if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, dcid)))
+- return 0;
+-
+- bh_lock_sock(sk);
+-
+- rsp.dcid = __cpu_to_le16(l2cap_pi(sk)->scid);
+- rsp.scid = __cpu_to_le16(l2cap_pi(sk)->dcid);
+- l2cap_send_rsp(conn, cmd->ident, L2CAP_DISCONN_RSP, L2CAP_DISCONN_RSP_SIZE, &rsp);
+-
+- l2cap_chan_del(sk, ECONNRESET);
+-
+- bh_unlock_sock(sk);
+-
+- l2cap_sock_kill(sk);
+-
+- return 0;
+-}
+-
+-static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, l2cap_cmd_hdr *cmd, __u8 *data)
+-{
+- l2cap_disconn_rsp *rsp = (l2cap_disconn_rsp *) data;
+- __u16 dcid, scid;
+- struct sock *sk;
+-
+- scid = __le16_to_cpu(rsp->scid);
+- dcid = __le16_to_cpu(rsp->dcid);
+-
+- DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
+-
+- if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, scid)))
+- return -ENOENT;
+-
+- bh_lock_sock(sk);
+- l2cap_sock_clear_timer(sk);
+- l2cap_chan_del(sk, ECONNABORTED);
+- bh_unlock_sock(sk);
+-
+- l2cap_sock_kill(sk);
+-
+- return 0;
+-}
+-
+-static inline void l2cap_sig_channel(struct l2cap_conn *conn, struct sk_buff *skb)
+-{
+- __u8 *data = skb->data;
+- int len = skb->len;
+- l2cap_cmd_hdr cmd;
+- int err = 0;
+-
+- while (len >= L2CAP_CMD_HDR_SIZE) {
+- memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
+- data += L2CAP_CMD_HDR_SIZE;
+- len -= L2CAP_CMD_HDR_SIZE;
+-
+- cmd.len = __le16_to_cpu(cmd.len);
+-
+- DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd.len, cmd.ident);
+-
+- if (cmd.len > len || !cmd.ident) {
+- DBG("corrupted command");
+- break;
+- }
+-
+- switch (cmd.code) {
+- case L2CAP_CONN_REQ:
+- err = l2cap_connect_req(conn, &cmd, data);
+- break;
+-
+- case L2CAP_CONN_RSP:
+- err = l2cap_connect_rsp(conn, &cmd, data);
+- break;
+-
+- case L2CAP_CONF_REQ:
+- err = l2cap_config_req(conn, &cmd, data);
+- break;
+-
+- case L2CAP_CONF_RSP:
+- err = l2cap_config_rsp(conn, &cmd, data);
+- break;
+-
+- case L2CAP_DISCONN_REQ:
+- err = l2cap_disconnect_req(conn, &cmd, data);
+- break;
+-
+- case L2CAP_DISCONN_RSP:
+- err = l2cap_disconnect_rsp(conn, &cmd, data);
+- break;
+-
+- case L2CAP_COMMAND_REJ:
+- /* FIXME: We should process this */
+- l2cap_raw_recv(conn, skb);
+- break;
+-
+- case L2CAP_ECHO_REQ:
+- l2cap_send_rsp(conn, cmd.ident, L2CAP_ECHO_RSP, cmd.len, data);
+- break;
+-
+- case L2CAP_ECHO_RSP:
+- case L2CAP_INFO_REQ:
+- case L2CAP_INFO_RSP:
+- l2cap_raw_recv(conn, skb);
+- break;
+-
+- default:
+- ERR("Uknown signaling command 0x%2.2x", cmd.code);
+- err = -EINVAL;
+- break;
+- };
+-
+- if (err) {
+- l2cap_cmd_rej rej;
+- DBG("error %d", err);
+-
+- /* FIXME: Map err to a valid reason. */
+- rej.reason = __cpu_to_le16(0);
+- l2cap_send_rsp(conn, cmd.ident, L2CAP_COMMAND_REJ, L2CAP_CMD_REJ_SIZE, &rej);
+- }
+-
+- data += cmd.len;
+- len -= cmd.len;
+- }
+-
+- kfree_skb(skb);
+-}
+-
+-static inline int l2cap_data_channel(struct l2cap_conn *conn, __u16 cid, struct sk_buff *skb)
+-{
+- struct sock *sk;
+-
+- if (!(sk = l2cap_get_chan_by_scid(&conn->chan_list, cid))) {
+- DBG("unknown cid 0x%4.4x", cid);
+- goto drop;
+- }
+-
+- DBG("sk %p, len %d", sk, skb->len);
+-
+- if (sk->state != BT_CONNECTED)
+- goto drop;
+-
+- if (l2cap_pi(sk)->imtu < skb->len)
+- goto drop;
+-
+- skb_queue_tail(&sk->receive_queue, skb);
+- sk->data_ready(sk, skb->len);
+-
+- return 0;
+-
+-drop:
+- kfree_skb(skb);
+-
+- return 0;
+-}
+-
+-static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
+-{
+- l2cap_hdr *lh = (l2cap_hdr *) skb->data;
+- __u16 cid, len;
+-
+- skb_pull(skb, L2CAP_HDR_SIZE);
+- cid = __le16_to_cpu(lh->cid);
+- len = __le16_to_cpu(lh->len);
+-
+- DBG("len %d, cid 0x%4.4x", len, cid);
+-
+- if (cid == 0x0001)
+- l2cap_sig_channel(conn, skb);
+- else
+- l2cap_data_channel(conn, cid, skb);
+-}
+-
+-/* ------------ L2CAP interface with lower layer (HCI) ------------- */
+-static int l2cap_dev_event(struct notifier_block *this, unsigned long event, void *ptr)
+-{
+- struct hci_dev *hdev = (struct hci_dev *) ptr;
+-
+- DBG("hdev %s, event %ld", hdev->name, event);
+-
+- write_lock(&l2cap_rt_lock);
+-
+- switch (event) {
+- case HCI_DEV_UP:
+- l2cap_iff_add(hdev);
+- break;
+-
+- case HCI_DEV_DOWN:
+- l2cap_iff_del(hdev);
+- break;
+- };
+-
+- write_unlock(&l2cap_rt_lock);
+-
+- return NOTIFY_DONE;
+-}
+-
+-int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
+-{
+- struct l2cap_iff *iff;
+-
+- DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
+-
+- if (!(iff = hdev->l2cap_data)) {
+- ERR("unknown interface");
+- return 0;
+- }
+-
+- /* Always accept connection */
+- return 1;
+-}
+-
+-int l2cap_connect_cfm(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 status, struct hci_conn *hconn)
+-{
+- struct l2cap_conn *conn;
+- struct l2cap_iff *iff;
+- int err = 0;
+-
+- DBG("hdev %s bdaddr %s hconn %p", hdev->name, batostr(bdaddr), hconn);
+-
+- if (!(iff = hdev->l2cap_data)) {
+- ERR("unknown interface");
+- return 0;
+- }
+-
+- l2cap_iff_lock(iff);
+-
+- conn = l2cap_get_conn_by_addr(iff, bdaddr);
+-
+- if (conn) {
+- /* Outgoing connection */
+- DBG("Outgoing connection: %s -> %s, %p, %2.2x", batostr(iff->bdaddr), batostr(bdaddr), conn, status);
+-
+- if (!status && hconn) {
+- conn->state = BT_CONNECTED;
+- conn->hconn = hconn;
+-
+- hconn->l2cap_data = (void *)conn;
+-
+- /* Establish channels */
+- l2cap_conn_ready(conn);
+- } else {
+- l2cap_conn_del(conn, bterr(status));
+- }
+- } else {
+- /* Incomming connection */
+- DBG("Incomming connection: %s -> %s, %2.2x", batostr(iff->bdaddr), batostr(bdaddr), status);
+-
+- if (status || !hconn)
+- goto done;
+-
+- if (!(conn = l2cap_conn_add(iff, bdaddr))) {
+- err = -ENOMEM;
+- goto done;
+- }
+-
+- conn->hconn = hconn;
+- hconn->l2cap_data = (void *)conn;
+-
+- conn->state = BT_CONNECTED;
+- }
+-
+-done:
+- l2cap_iff_unlock(iff);
+-
+- return err;
+-}
+-
+-int l2cap_disconn_ind(struct hci_conn *hconn, __u8 reason)
+-{
+- struct l2cap_conn *conn = hconn->l2cap_data;
+-
+- DBG("hconn %p reason %d", hconn, reason);
+-
+- if (!conn) {
+- ERR("unknown connection");
+- return 0;
+- }
+- conn->hconn = NULL;
+-
+- l2cap_iff_lock(conn->iff);
+- l2cap_conn_del(conn, bterr(reason));
+- l2cap_iff_unlock(conn->iff);
+-
+- return 0;
+-}
+-
+-int l2cap_recv_acldata(struct hci_conn *hconn, struct sk_buff *skb, __u16 flags)
+-{
+- struct l2cap_conn *conn = hconn->l2cap_data;
+-
+- if (!conn) {
+- ERR("unknown connection %p", hconn);
+- goto drop;
+- }
+-
+- DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);
+-
+- if (flags & ACL_START) {
+- int flen, tlen, size;
+- l2cap_hdr *lh;
+-
+- if (conn->rx_len) {
+- ERR("Unexpected start frame (len %d)", skb->len);
+- kfree_skb(conn->rx_skb); conn->rx_skb = NULL;
+- conn->rx_len = 0;
+- }
+-
+- if (skb->len < L2CAP_HDR_SIZE) {
+- ERR("Frame is too small (len %d)", skb->len);
+- goto drop;
+- }
+-
+- lh = (l2cap_hdr *)skb->data;
+- tlen = __le16_to_cpu(lh->len);
+- flen = skb->len - L2CAP_HDR_SIZE;
+-
+- DBG("Start: total len %d, frag len %d", tlen, flen);
+-
+- if (flen == tlen) {
+- /* Complete frame received */
+- l2cap_recv_frame(conn, skb);
+- return 0;
+- }
+-
+- /* Allocate skb for the complete frame (with header) */
+- size = L2CAP_HDR_SIZE + tlen;
+- if (!(conn->rx_skb = bluez_skb_alloc(size, GFP_ATOMIC)))
+- goto drop;
+-
+- memcpy(skb_put(conn->rx_skb, skb->len), skb->data, skb->len);
+-
+- conn->rx_len = tlen - flen;
+- } else {
+- DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);
+-
+- if (!conn->rx_len) {
+- ERR("Unexpected continuation frame (len %d)", skb->len);
+- goto drop;
+- }
+-
+- if (skb->len > conn->rx_len) {
+- ERR("Fragment is too large (len %d)", skb->len);
+- kfree_skb(conn->rx_skb); conn->rx_skb = NULL;
+- goto drop;
+- }
+-
+- memcpy(skb_put(conn->rx_skb, skb->len), skb->data, skb->len);
+- conn->rx_len -= skb->len;
+-
+- if (!conn->rx_len) {
+- /* Complete frame received */
+- l2cap_recv_frame(conn, conn->rx_skb);
+- conn->rx_skb = NULL;
+- }
+- }
+-
+-drop:
+- kfree_skb(skb);
+- return 0;
+-}
+-
+-struct proto_ops l2cap_sock_ops = {
+- family: PF_BLUETOOTH,
+- release: l2cap_sock_release,
+- bind: l2cap_sock_bind,
+- connect: l2cap_sock_connect,
+- listen: l2cap_sock_listen,
+- accept: l2cap_sock_accept,
+- getname: l2cap_sock_getname,
+- sendmsg: l2cap_sock_sendmsg,
+- recvmsg: l2cap_sock_recvmsg,
+- poll: l2cap_sock_poll,
+- socketpair: sock_no_socketpair,
+- ioctl: sock_no_ioctl,
+- shutdown: sock_no_shutdown,
+- setsockopt: l2cap_sock_setsockopt,
+- getsockopt: l2cap_sock_getsockopt,
+- mmap: sock_no_mmap
+-};
+-
+-struct net_proto_family l2cap_sock_family_ops = {
+- family: PF_BLUETOOTH,
+- create: l2cap_sock_create
+-};
+-
+-struct hci_proto l2cap_hci_proto = {
+- name: "L2CAP",
+- id: HCI_PROTO_L2CAP,
+- connect_ind: l2cap_connect_ind,
+- connect_cfm: l2cap_connect_cfm,
+- disconn_ind: l2cap_disconn_ind,
+- recv_acldata: l2cap_recv_acldata,
+-};
+-
+-struct notifier_block l2cap_nblock = {
+- notifier_call: l2cap_dev_event
+-};
+-
+-int __init l2cap_init(void)
+-{
+- INF("BlueZ L2CAP ver %s Copyright (C) 2000,2001 Qualcomm Inc",
+- VERSION);
+- INF("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
+-
+- if (bluez_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops)) {
+- ERR("Can't register L2CAP socket");
+- return -EPROTO;
+- }
+-
+- if (hci_register_proto(&l2cap_hci_proto) < 0) {
+- ERR("Can't register L2CAP protocol");
+- return -EPROTO;
+- }
+-
+- hci_register_notifier(&l2cap_nblock);
+-
+- l2cap_register_proc();
+-
+- return 0;
+-}
+-
+-void l2cap_cleanup(void)
+-{
+- l2cap_unregister_proc();
+-
+- /* Unregister socket, protocol and notifier */
+- if (bluez_sock_unregister(BTPROTO_L2CAP))
+- ERR("Can't unregister L2CAP socket");
+-
+- if (hci_unregister_proto(&l2cap_hci_proto) < 0)
+- ERR("Can't unregister L2CAP protocol");
+-
+- hci_unregister_notifier(&l2cap_nblock);
+-
+- /* We _must_ not have any sockets and/or connections
+- * at this stage.
+- */
+-
+- /* Free interface list and unlock HCI devices */
+- {
+- struct list_head *list = &l2cap_iff_list;
+-
+- while (!list_empty(list)) {
+- struct l2cap_iff *iff;
+-
+- iff = list_entry(list->next, struct l2cap_iff, list);
+- l2cap_iff_del(iff->hdev);
+- }
+- }
+-}
+-
+-module_init(l2cap_init);
+-module_exit(l2cap_cleanup);
+-
+-MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
+-MODULE_DESCRIPTION("BlueZ L2CAP ver " VERSION);
+-MODULE_LICENSE("GPL");
+-
+diff -urN linux-2.4.18/net/bluetooth/l2cap_proc.c linux-2.4.18-mh9/net/bluetooth/l2cap_proc.c
+--- linux-2.4.18/net/bluetooth/l2cap_proc.c Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/net/bluetooth/l2cap_proc.c Thu Jan 1 01:00:00 1970
+@@ -1,165 +0,0 @@
+-/*
+- BlueZ - Bluetooth protocol stack for Linux
+- Copyright (C) 2000-2001 Qualcomm Incorporated
+-
+- Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
+-
+- 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;
+-
+- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
+- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
+- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+-
+- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
+- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
+- SOFTWARE IS DISCLAIMED.
+-*/
+-
+-/*
+- * BlueZ L2CAP proc fs support.
+- *
+- * $Id: l2cap_proc.c,v 1.2 2001/06/02 01:40:09 maxk Exp $
+- */
+-
+-#include <linux/config.h>
+-#include <linux/module.h>
+-
+-#include <linux/types.h>
+-#include <linux/errno.h>
+-#include <linux/kernel.h>
+-#include <linux/major.h>
+-#include <linux/sched.h>
+-#include <linux/slab.h>
+-#include <linux/poll.h>
+-#include <linux/fcntl.h>
+-#include <linux/init.h>
+-#include <linux/skbuff.h>
+-#include <linux/interrupt.h>
+-#include <linux/socket.h>
+-#include <linux/skbuff.h>
+-#include <linux/proc_fs.h>
+-#include <linux/list.h>
+-#include <net/sock.h>
+-
+-#include <asm/system.h>
+-#include <asm/uaccess.h>
+-
+-#include <net/bluetooth/bluez.h>
+-#include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/hci_core.h>
+-#include <net/bluetooth/l2cap_core.h>
+-
+-#ifndef L2CAP_DEBUG
+-#undef DBG
+-#define DBG( A... )
+-#endif
+-
+-/* ----- PROC fs support ----- */
+-static int l2cap_conn_dump(char *buf, struct l2cap_iff *iff)
+-{
+- struct list_head *p;
+- char *ptr = buf;
+-
+- list_for_each(p, &iff->conn_list) {
+- struct l2cap_conn *c;
+-
+- c = list_entry(p, struct l2cap_conn, list);
+- ptr += sprintf(ptr, " %p %d %p %p %s %s\n",
+- c, c->state, c->iff, c->hconn, batostr(&c->src), batostr(&c->dst));
+- }
+-
+- return ptr - buf;
+-}
+-
+-static int l2cap_iff_dump(char *buf)
+-{
+- struct list_head *p;
+- char *ptr = buf;
+-
+- ptr += sprintf(ptr, "Interfaces:\n");
+-
+- write_lock(&l2cap_rt_lock);
+-
+- list_for_each(p, &l2cap_iff_list) {
+- struct l2cap_iff *iff;
+-
+- iff = list_entry(p, struct l2cap_iff, list);
+-
+- ptr += sprintf(ptr, " %s %p %p\n", iff->hdev->name, iff, iff->hdev);
+-
+- l2cap_iff_lock(iff);
+- ptr += l2cap_conn_dump(ptr, iff);
+- l2cap_iff_unlock(iff);
+- }
+-
+- write_unlock(&l2cap_rt_lock);
+-
+- ptr += sprintf(ptr, "\n");
+-
+- return ptr - buf;
+-}
+-
+-static int l2cap_sock_dump(char *buf, struct bluez_sock_list *list)
+-{
+- struct l2cap_pinfo *pi;
+- struct sock *sk;
+- char *ptr = buf;
+-
+- ptr += sprintf(ptr, "Sockets:\n");
+-
+- write_lock(&list->lock);
+-
+- for (sk = list->head; sk; sk = sk->next) {
+- pi = l2cap_pi(sk);
+- ptr += sprintf(ptr, " %p %d %p %d %s %s 0x%4.4x 0x%4.4x %d %d\n", sk, sk->state, pi->conn, pi->psm,
+- batostr(&pi->src), batostr(&pi->dst), pi->scid, pi->dcid, pi->imtu, pi->omtu );
+- }
+-
+- write_unlock(&list->lock);
+-
+- ptr += sprintf(ptr, "\n");
+-
+- return ptr - buf;
+-}
+-
+-static int l2cap_read_proc(char *buf, char **start, off_t offset, int count, int *eof, void *priv)
+-{
+- char *ptr = buf;
+- int len;
+-
+- DBG("count %d, offset %ld", count, offset);
+-
+- ptr += l2cap_iff_dump(ptr);
+- ptr += l2cap_sock_dump(ptr, &l2cap_sk_list);
+- len = ptr - buf;
+-
+- if (len <= count + offset)
+- *eof = 1;
+-
+- *start = buf + offset;
+- len -= offset;
+-
+- if (len > count)
+- len = count;
+- if (len < 0)
+- len = 0;
+-
+- return len;
+-}
+-
+-void l2cap_register_proc(void)
+-{
+- create_proc_read_entry("bluetooth/l2cap", 0, 0, l2cap_read_proc, NULL);
+-}
+-
+-void l2cap_unregister_proc(void)
+-{
+- remove_proc_entry("bluetooth/l2cap", NULL);
+-}
+diff -urN linux-2.4.18/net/bluetooth/lib.c linux-2.4.18-mh9/net/bluetooth/lib.c
+--- linux-2.4.18/net/bluetooth/lib.c Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/net/bluetooth/lib.c Mon Aug 25 18:38:12 2003
+@@ -25,7 +25,7 @@
+ /*
+ * BlueZ kernel library.
+ *
+- * $Id: lib.c,v 1.3 2001/06/22 23:14:23 maxk Exp $
++ * $Id: lib.c,v 1.2 2002/06/20 19:55:08 maxk Exp $
+ */
+
+ #include <linux/kernel.h>
+@@ -105,7 +105,7 @@
+ return EACCES;
+
+ case 0x06:
+- return EINVAL;
++ return EBADE;
+
+ case 0x07:
+ return ENOMEM;
+diff -urN linux-2.4.18/net/bluetooth/rfcomm/Config.in linux-2.4.18-mh9/net/bluetooth/rfcomm/Config.in
+--- linux-2.4.18/net/bluetooth/rfcomm/Config.in Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/rfcomm/Config.in Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,10 @@
++#
++# Bluetooth RFCOMM layer configuration
++#
++
++dep_tristate 'RFCOMM protocol support' CONFIG_BLUEZ_RFCOMM $CONFIG_BLUEZ_L2CAP
++
++if [ "$CONFIG_BLUEZ_RFCOMM" != "n" ]; then
++ bool ' RFCOMM TTY support' CONFIG_BLUEZ_RFCOMM_TTY
++fi
++
+diff -urN linux-2.4.18/net/bluetooth/rfcomm/Makefile linux-2.4.18-mh9/net/bluetooth/rfcomm/Makefile
+--- linux-2.4.18/net/bluetooth/rfcomm/Makefile Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/rfcomm/Makefile Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,11 @@
++#
++# Makefile for the Linux Bluetooth RFCOMM layer
++#
++
++O_TARGET := rfcomm.o
++
++obj-y := core.o sock.o crc.o
++obj-$(CONFIG_BLUEZ_RFCOMM_TTY) += tty.o
++obj-m += $(O_TARGET)
++
++include $(TOPDIR)/Rules.make
+diff -urN linux-2.4.18/net/bluetooth/rfcomm/core.c linux-2.4.18-mh9/net/bluetooth/rfcomm/core.c
+--- linux-2.4.18/net/bluetooth/rfcomm/core.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/rfcomm/core.c Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,1951 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ RPN support - Dirk Husemann <hud@zurich.ibm.com>
++*/
++
++/*
++ * RFCOMM core.
++ *
++ * $Id: core.c,v 1.46 2002/10/18 20:12:12 maxk Exp $
++ */
++
++#define __KERNEL_SYSCALLS__
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/signal.h>
++#include <linux/init.h>
++#include <linux/wait.h>
++#include <linux/net.h>
++#include <linux/proc_fs.h>
++#include <net/sock.h>
++#include <asm/uaccess.h>
++#include <asm/unaligned.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/l2cap.h>
++#include <net/bluetooth/rfcomm.h>
++
++#define VERSION "1.0"
++
++#ifndef CONFIG_BLUEZ_RFCOMM_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++struct task_struct *rfcomm_thread;
++DECLARE_MUTEX(rfcomm_sem);
++unsigned long rfcomm_event;
++
++static LIST_HEAD(session_list);
++static atomic_t terminate, running;
++
++static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len);
++static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci);
++static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci);
++static int rfcomm_queue_disc(struct rfcomm_dlc *d);
++static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type);
++static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d);
++static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig);
++static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len);
++static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits);
++static void rfcomm_make_uih(struct sk_buff *skb, u8 addr);
++
++static void rfcomm_process_connect(struct rfcomm_session *s);
++
++/* ---- RFCOMM frame parsing macros ---- */
++#define __get_dlci(b) ((b & 0xfc) >> 2)
++#define __get_channel(b) ((b & 0xf8) >> 3)
++#define __get_dir(b) ((b & 0x04) >> 2)
++#define __get_type(b) ((b & 0xef))
++
++#define __test_ea(b) ((b & 0x01))
++#define __test_cr(b) ((b & 0x02))
++#define __test_pf(b) ((b & 0x10))
++
++#define __addr(cr, dlci) (((dlci & 0x3f) << 2) | (cr << 1) | 0x01)
++#define __ctrl(type, pf) (((type & 0xef) | (pf << 4)))
++#define __dlci(dir, chn) (((chn & 0x1f) << 1) | dir)
++#define __srv_channel(dlci) (dlci >> 1)
++#define __dir(dlci) (dlci & 0x01)
++
++#define __len8(len) (((len) << 1) | 1)
++#define __len16(len) ((len) << 1)
++
++/* MCC macros */
++#define __mcc_type(cr, type) (((type << 2) | (cr << 1) | 0x01))
++#define __get_mcc_type(b) ((b & 0xfc) >> 2)
++#define __get_mcc_len(b) ((b & 0xfe) >> 1)
++
++/* RPN macros */
++#define __rpn_line_settings(data, stop, parity) ((data & 0x3) | ((stop & 0x1) << 2) | ((parity & 0x3) << 3))
++#define __get_rpn_data_bits(line) ((line) & 0x3)
++#define __get_rpn_stop_bits(line) (((line) >> 2) & 0x1)
++#define __get_rpn_parity(line) (((line) >> 3) & 0x3)
++
++/* ---- RFCOMM FCS computation ---- */
++
++/* CRC on 2 bytes */
++#define __crc(data) (rfcomm_crc_table[rfcomm_crc_table[0xff ^ data[0]] ^ data[1]])
++
++/* FCS on 2 bytes */
++static inline u8 __fcs(u8 *data)
++{
++ return (0xff - __crc(data));
++}
++
++/* FCS on 3 bytes */
++static inline u8 __fcs2(u8 *data)
++{
++ return (0xff - rfcomm_crc_table[__crc(data) ^ data[2]]);
++}
++
++/* Check FCS */
++static inline int __check_fcs(u8 *data, int type, u8 fcs)
++{
++ u8 f = __crc(data);
++
++ if (type != RFCOMM_UIH)
++ f = rfcomm_crc_table[f ^ data[2]];
++
++ return rfcomm_crc_table[f ^ fcs] != 0xcf;
++}
++
++/* ---- L2CAP callbacks ---- */
++static void rfcomm_l2state_change(struct sock *sk)
++{
++ BT_DBG("%p state %d", sk, sk->state);
++ rfcomm_schedule(RFCOMM_SCHED_STATE);
++}
++
++static void rfcomm_l2data_ready(struct sock *sk, int bytes)
++{
++ BT_DBG("%p bytes %d", sk, bytes);
++ rfcomm_schedule(RFCOMM_SCHED_RX);
++}
++
++static int rfcomm_l2sock_create(struct socket **sock)
++{
++ int err;
++
++ BT_DBG("");
++
++ err = sock_create(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP, sock);
++ if (!err) {
++ struct sock *sk = (*sock)->sk;
++ sk->data_ready = rfcomm_l2data_ready;
++ sk->state_change = rfcomm_l2state_change;
++ }
++ return err;
++}
++
++/* ---- RFCOMM DLCs ---- */
++static void rfcomm_dlc_timeout(unsigned long arg)
++{
++ struct rfcomm_dlc *d = (void *) arg;
++
++ BT_DBG("dlc %p state %ld", d, d->state);
++
++ set_bit(RFCOMM_TIMED_OUT, &d->flags);
++ rfcomm_dlc_put(d);
++ rfcomm_schedule(RFCOMM_SCHED_TIMEO);
++}
++
++static void rfcomm_dlc_set_timer(struct rfcomm_dlc *d, long timeout)
++{
++ BT_DBG("dlc %p state %ld timeout %ld", d, d->state, timeout);
++
++ if (!mod_timer(&d->timer, jiffies + timeout))
++ rfcomm_dlc_hold(d);
++}
++
++static void rfcomm_dlc_clear_timer(struct rfcomm_dlc *d)
++{
++ BT_DBG("dlc %p state %ld", d, d->state);
++
++ if (timer_pending(&d->timer) && del_timer(&d->timer))
++ rfcomm_dlc_put(d);
++}
++
++static void rfcomm_dlc_clear_state(struct rfcomm_dlc *d)
++{
++ BT_DBG("%p", d);
++
++ d->state = BT_OPEN;
++ d->flags = 0;
++ d->mscex = 0;
++ d->mtu = RFCOMM_DEFAULT_MTU;
++ d->v24_sig = RFCOMM_V24_RTC | RFCOMM_V24_RTR | RFCOMM_V24_DV;
++
++ d->credits = 0;
++ d->rx_credits = RFCOMM_DEFAULT_CREDITS;
++}
++
++struct rfcomm_dlc *rfcomm_dlc_alloc(int prio)
++{
++ struct rfcomm_dlc *d = kmalloc(sizeof(*d), prio);
++ if (!d)
++ return NULL;
++ memset(d, 0, sizeof(*d));
++
++ init_timer(&d->timer);
++ d->timer.function = rfcomm_dlc_timeout;
++ d->timer.data = (unsigned long) d;
++
++ skb_queue_head_init(&d->tx_queue);
++ spin_lock_init(&d->lock);
++ atomic_set(&d->refcnt, 1);
++
++ rfcomm_dlc_clear_state(d);
++
++ BT_DBG("%p", d);
++ return d;
++}
++
++void rfcomm_dlc_free(struct rfcomm_dlc *d)
++{
++ BT_DBG("%p", d);
++
++ skb_queue_purge(&d->tx_queue);
++ kfree(d);
++}
++
++static void rfcomm_dlc_link(struct rfcomm_session *s, struct rfcomm_dlc *d)
++{
++ BT_DBG("dlc %p session %p", d, s);
++
++ rfcomm_session_hold(s);
++
++ rfcomm_dlc_hold(d);
++ list_add(&d->list, &s->dlcs);
++ d->session = s;
++}
++
++static void rfcomm_dlc_unlink(struct rfcomm_dlc *d)
++{
++ struct rfcomm_session *s = d->session;
++
++ BT_DBG("dlc %p refcnt %d session %p", d, atomic_read(&d->refcnt), s);
++
++ list_del(&d->list);
++ d->session = NULL;
++ rfcomm_dlc_put(d);
++
++ rfcomm_session_put(s);
++}
++
++static struct rfcomm_dlc *rfcomm_dlc_get(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_dlc *d;
++ struct list_head *p;
++
++ list_for_each(p, &s->dlcs) {
++ d = list_entry(p, struct rfcomm_dlc, list);
++ if (d->dlci == dlci)
++ return d;
++ }
++ return NULL;
++}
++
++static int __rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
++{
++ struct rfcomm_session *s;
++ int err = 0;
++ u8 dlci;
++
++ BT_DBG("dlc %p state %ld %s %s channel %d",
++ d, d->state, batostr(src), batostr(dst), channel);
++
++ if (channel < 1 || channel > 30)
++ return -EINVAL;
++
++ if (d->state != BT_OPEN && d->state != BT_CLOSED)
++ return 0;
++
++ s = rfcomm_session_get(src, dst);
++ if (!s) {
++ s = rfcomm_session_create(src, dst, &err);
++ if (!s)
++ return err;
++ }
++
++ dlci = __dlci(!s->initiator, channel);
++
++ /* Check if DLCI already exists */
++ if (rfcomm_dlc_get(s, dlci))
++ return -EBUSY;
++
++ rfcomm_dlc_clear_state(d);
++
++ d->dlci = dlci;
++ d->addr = __addr(s->initiator, dlci);
++ d->priority = 7;
++
++ d->state = BT_CONFIG;
++ rfcomm_dlc_link(s, d);
++
++ d->mtu = s->mtu;
++ d->credits = s->credits;
++
++ if (s->state == BT_CONNECTED)
++ rfcomm_send_pn(s, 1, d);
++ rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT);
++ return 0;
++}
++
++int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel)
++{
++ mm_segment_t fs;
++ int r;
++
++ rfcomm_lock();
++
++ fs = get_fs(); set_fs(KERNEL_DS);
++ r = __rfcomm_dlc_open(d, src, dst, channel);
++ set_fs(fs);
++
++ rfcomm_unlock();
++ return r;
++}
++
++static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
++{
++ struct rfcomm_session *s = d->session;
++ if (!s)
++ return 0;
++
++ BT_DBG("dlc %p state %ld dlci %d err %d session %p",
++ d, d->state, d->dlci, err, s);
++
++ switch (d->state) {
++ case BT_CONNECTED:
++ case BT_CONFIG:
++ case BT_CONNECT:
++ d->state = BT_DISCONN;
++ if (skb_queue_empty(&d->tx_queue)) {
++ rfcomm_send_disc(s, d->dlci);
++ rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT);
++ } else {
++ rfcomm_queue_disc(d);
++ rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT * 2);
++ }
++ break;
++
++ default:
++ rfcomm_dlc_clear_timer(d);
++
++ rfcomm_dlc_lock(d);
++ d->state = BT_CLOSED;
++ d->state_change(d, err);
++ rfcomm_dlc_unlock(d);
++
++ skb_queue_purge(&d->tx_queue);
++ rfcomm_dlc_unlink(d);
++ }
++
++ return 0;
++}
++
++int rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
++{
++ mm_segment_t fs;
++ int r;
++
++ rfcomm_lock();
++
++ fs = get_fs(); set_fs(KERNEL_DS);
++ r = __rfcomm_dlc_close(d, err);
++ set_fs(fs);
++
++ rfcomm_unlock();
++ return r;
++}
++
++int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb)
++{
++ int len = skb->len;
++
++ if (d->state != BT_CONNECTED)
++ return -ENOTCONN;
++
++ BT_DBG("dlc %p mtu %d len %d", d, d->mtu, len);
++
++ if (len > d->mtu)
++ return -EINVAL;
++
++ rfcomm_make_uih(skb, d->addr);
++ skb_queue_tail(&d->tx_queue, skb);
++
++ if (!test_bit(RFCOMM_TX_THROTTLED, &d->flags))
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++ return len;
++}
++
++void __rfcomm_dlc_throttle(struct rfcomm_dlc *d)
++{
++ BT_DBG("dlc %p state %ld", d, d->state);
++
++ if (!d->credits) {
++ d->v24_sig |= RFCOMM_V24_FC;
++ set_bit(RFCOMM_MSC_PENDING, &d->flags);
++ }
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++}
++
++void __rfcomm_dlc_unthrottle(struct rfcomm_dlc *d)
++{
++ BT_DBG("dlc %p state %ld", d, d->state);
++
++ if (!d->credits) {
++ d->v24_sig &= ~RFCOMM_V24_FC;
++ set_bit(RFCOMM_MSC_PENDING, &d->flags);
++ }
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++}
++
++/*
++ Set/get modem status functions use _local_ status i.e. what we report
++ to the other side.
++ Remote status is provided by dlc->modem_status() callback.
++ */
++int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig)
++{
++ BT_DBG("dlc %p state %ld v24_sig 0x%x",
++ d, d->state, v24_sig);
++
++ if (test_bit(RFCOMM_RX_THROTTLED, &d->flags))
++ v24_sig |= RFCOMM_V24_FC;
++ else
++ v24_sig &= ~RFCOMM_V24_FC;
++
++ d->v24_sig = v24_sig;
++
++ if (!test_and_set_bit(RFCOMM_MSC_PENDING, &d->flags))
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++
++ return 0;
++}
++
++int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig)
++{
++ BT_DBG("dlc %p state %ld v24_sig 0x%x",
++ d, d->state, d->v24_sig);
++
++ *v24_sig = d->v24_sig;
++ return 0;
++}
++
++/* ---- RFCOMM sessions ---- */
++struct rfcomm_session *rfcomm_session_add(struct socket *sock, int state)
++{
++ struct rfcomm_session *s = kmalloc(sizeof(*s), GFP_KERNEL);
++ if (!s)
++ return NULL;
++ memset(s, 0, sizeof(*s));
++
++ BT_DBG("session %p sock %p", s, sock);
++
++ INIT_LIST_HEAD(&s->dlcs);
++ s->state = state;
++ s->sock = sock;
++
++ s->mtu = RFCOMM_DEFAULT_MTU;
++ s->credits = 0;
++
++ list_add(&s->list, &session_list);
++
++ /* Do not increment module usage count for listeting sessions.
++ * Otherwise we won't be able to unload the module. */
++ if (state != BT_LISTEN)
++ MOD_INC_USE_COUNT;
++ return s;
++}
++
++void rfcomm_session_del(struct rfcomm_session *s)
++{
++ int state = s->state;
++
++ BT_DBG("session %p state %ld", s, s->state);
++
++ list_del(&s->list);
++
++ if (state == BT_CONNECTED)
++ rfcomm_send_disc(s, 0);
++
++ sock_release(s->sock);
++ kfree(s);
++
++ if (state != BT_LISTEN)
++ MOD_DEC_USE_COUNT;
++}
++
++struct rfcomm_session *rfcomm_session_get(bdaddr_t *src, bdaddr_t *dst)
++{
++ struct rfcomm_session *s;
++ struct list_head *p, *n;
++ struct bluez_pinfo *pi;
++ list_for_each_safe(p, n, &session_list) {
++ s = list_entry(p, struct rfcomm_session, list);
++ pi = bluez_pi(s->sock->sk);
++
++ if ((!bacmp(src, BDADDR_ANY) || !bacmp(&pi->src, src)) &&
++ !bacmp(&pi->dst, dst))
++ return s;
++ }
++ return NULL;
++}
++
++void rfcomm_session_close(struct rfcomm_session *s, int err)
++{
++ struct rfcomm_dlc *d;
++ struct list_head *p, *n;
++
++ BT_DBG("session %p state %ld err %d", s, s->state, err);
++
++ rfcomm_session_hold(s);
++
++ s->state = BT_CLOSED;
++
++ /* Close all dlcs */
++ list_for_each_safe(p, n, &s->dlcs) {
++ d = list_entry(p, struct rfcomm_dlc, list);
++ d->state = BT_CLOSED;
++ __rfcomm_dlc_close(d, err);
++ }
++
++ rfcomm_session_put(s);
++}
++
++struct rfcomm_session *rfcomm_session_create(bdaddr_t *src, bdaddr_t *dst, int *err)
++{
++ struct rfcomm_session *s = NULL;
++ struct sockaddr_l2 addr;
++ struct l2cap_options opts;
++ struct socket *sock;
++ int size;
++
++ BT_DBG("%s %s", batostr(src), batostr(dst));
++
++ *err = rfcomm_l2sock_create(&sock);
++ if (*err < 0)
++ return NULL;
++
++ bacpy(&addr.l2_bdaddr, src);
++ addr.l2_family = AF_BLUETOOTH;
++ addr.l2_psm = 0;
++ *err = sock->ops->bind(sock, (struct sockaddr *) &addr, sizeof(addr));
++ if (*err < 0)
++ goto failed;
++
++ /* Set L2CAP options */
++ size = sizeof(opts);
++ sock->ops->getsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, &size);
++
++ opts.imtu = RFCOMM_MAX_L2CAP_MTU;
++ sock->ops->setsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, size);
++
++ s = rfcomm_session_add(sock, BT_BOUND);
++ if (!s) {
++ *err = -ENOMEM;
++ goto failed;
++ }
++
++ s->initiator = 1;
++
++ bacpy(&addr.l2_bdaddr, dst);
++ addr.l2_family = AF_BLUETOOTH;
++ addr.l2_psm = htobs(RFCOMM_PSM);
++ *err = sock->ops->connect(sock, (struct sockaddr *) &addr, sizeof(addr), O_NONBLOCK);
++ if (*err == 0 || *err == -EAGAIN)
++ return s;
++
++ rfcomm_session_del(s);
++ return NULL;
++
++failed:
++ sock_release(sock);
++ return NULL;
++}
++
++void rfcomm_session_getaddr(struct rfcomm_session *s, bdaddr_t *src, bdaddr_t *dst)
++{
++ struct sock *sk = s->sock->sk;
++ if (src)
++ bacpy(src, &bluez_pi(sk)->src);
++ if (dst)
++ bacpy(dst, &bluez_pi(sk)->dst);
++}
++
++/* ---- RFCOMM frame sending ---- */
++static int rfcomm_send_frame(struct rfcomm_session *s, u8 *data, int len)
++{
++ struct socket *sock = s->sock;
++ struct iovec iv = { data, len };
++ struct msghdr msg;
++ int err;
++
++ BT_DBG("session %p len %d", s, len);
++
++ memset(&msg, 0, sizeof(msg));
++ msg.msg_iovlen = 1;
++ msg.msg_iov = &iv;
++
++ err = sock->ops->sendmsg(sock, &msg, len, 0);
++ return err;
++}
++
++static int rfcomm_send_sabm(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_cmd cmd;
++
++ BT_DBG("%p dlci %d", s, dlci);
++
++ cmd.addr = __addr(s->initiator, dlci);
++ cmd.ctrl = __ctrl(RFCOMM_SABM, 1);
++ cmd.len = __len8(0);
++ cmd.fcs = __fcs2((u8 *) &cmd);
++
++ return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
++}
++
++static int rfcomm_send_ua(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_cmd cmd;
++
++ BT_DBG("%p dlci %d", s, dlci);
++
++ cmd.addr = __addr(!s->initiator, dlci);
++ cmd.ctrl = __ctrl(RFCOMM_UA, 1);
++ cmd.len = __len8(0);
++ cmd.fcs = __fcs2((u8 *) &cmd);
++
++ return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
++}
++
++static int rfcomm_send_disc(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_cmd cmd;
++
++ BT_DBG("%p dlci %d", s, dlci);
++
++ cmd.addr = __addr(s->initiator, dlci);
++ cmd.ctrl = __ctrl(RFCOMM_DISC, 1);
++ cmd.len = __len8(0);
++ cmd.fcs = __fcs2((u8 *) &cmd);
++
++ return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
++}
++
++static int rfcomm_queue_disc(struct rfcomm_dlc *d)
++{
++ struct rfcomm_cmd *cmd;
++ struct sk_buff *skb;
++
++ BT_DBG("dlc %p dlci %d", d, d->dlci);
++
++ skb = alloc_skb(sizeof(*cmd), GFP_KERNEL);
++ if (!skb)
++ return -ENOMEM;
++
++ cmd = (void *) __skb_put(skb, sizeof(*cmd));
++ cmd->addr = d->addr;
++ cmd->ctrl = __ctrl(RFCOMM_DISC, 1);
++ cmd->len = __len8(0);
++ cmd->fcs = __fcs2((u8 *) cmd);
++
++ skb_queue_tail(&d->tx_queue, skb);
++ rfcomm_schedule(RFCOMM_SCHED_TX);
++ return 0;
++}
++
++static int rfcomm_send_dm(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_cmd cmd;
++
++ BT_DBG("%p dlci %d", s, dlci);
++
++ cmd.addr = __addr(!s->initiator, dlci);
++ cmd.ctrl = __ctrl(RFCOMM_DM, 1);
++ cmd.len = __len8(0);
++ cmd.fcs = __fcs2((u8 *) &cmd);
++
++ return rfcomm_send_frame(s, (void *) &cmd, sizeof(cmd));
++}
++
++static int rfcomm_send_nsc(struct rfcomm_session *s, int cr, u8 type)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d type %d", s, cr, type);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + 1);
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_NSC);
++ mcc->len = __len8(1);
++
++ /* Type that we didn't like */
++ *ptr = __mcc_type(cr, type); ptr++;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ struct rfcomm_pn *pn;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d dlci %d mtu %d", s, cr, d->dlci, d->mtu);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + sizeof(*pn));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_PN);
++ mcc->len = __len8(sizeof(*pn));
++
++ pn = (void *) ptr; ptr += sizeof(*pn);
++ pn->dlci = d->dlci;
++ pn->priority = d->priority;
++ pn->ack_timer = 0;
++ pn->max_retrans = 0;
++
++ if (cr || d->credits) {
++ pn->flow_ctrl = cr ? 0xf0 : 0xe0;
++ pn->credits = RFCOMM_DEFAULT_CREDITS;
++ } else {
++ pn->flow_ctrl = 0;
++ pn->credits = 0;
++ }
++
++ pn->mtu = htobs(d->mtu);
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_rpn(struct rfcomm_session *s, int cr, u8 dlci,
++ u8 bit_rate, u8 data_bits, u8 stop_bits,
++ u8 parity, u8 flow_ctrl_settings,
++ u8 xon_char, u8 xoff_char, u16 param_mask)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ struct rfcomm_rpn *rpn;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d dlci %d bit_r 0x%x data_b 0x%x stop_b 0x%x parity 0x%x"
++ "flwc_s 0x%x xon_c 0x%x xoff_c 0x%x p_mask 0x%x",
++ s, cr, dlci, bit_rate, data_bits, stop_bits, parity,
++ flow_ctrl_settings, xon_char, xoff_char, param_mask);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + sizeof(*rpn));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_RPN);
++ mcc->len = __len8(sizeof(*rpn));
++
++ rpn = (void *) ptr; ptr += sizeof(*rpn);
++ rpn->dlci = __addr(1, dlci);
++ rpn->bit_rate = bit_rate;
++ rpn->line_settings = __rpn_line_settings(data_bits, stop_bits, parity);
++ rpn->flow_ctrl = flow_ctrl_settings;
++ rpn->xon_char = xon_char;
++ rpn->xoff_char = xoff_char;
++ rpn->param_mask = param_mask;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_rls(struct rfcomm_session *s, int cr, u8 dlci, u8 status)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ struct rfcomm_rls *rls;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d status 0x%x", s, cr, status);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + sizeof(*rls));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_RLS);
++ mcc->len = __len8(sizeof(*rls));
++
++ rls = (void *) ptr; ptr += sizeof(*rls);
++ rls->dlci = __addr(1, dlci);
++ rls->status = status;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_msc(struct rfcomm_session *s, int cr, u8 dlci, u8 v24_sig)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ struct rfcomm_msc *msc;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d v24 0x%x", s, cr, v24_sig);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc) + sizeof(*msc));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_MSC);
++ mcc->len = __len8(sizeof(*msc));
++
++ msc = (void *) ptr; ptr += sizeof(*msc);
++ msc->dlci = __addr(1, dlci);
++ msc->v24_sig = v24_sig | 0x01;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_fcoff(struct rfcomm_session *s, int cr)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d", s, cr);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_FCOFF);
++ mcc->len = __len8(0);
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_fcon(struct rfcomm_session *s, int cr)
++{
++ struct rfcomm_hdr *hdr;
++ struct rfcomm_mcc *mcc;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p cr %d", s, cr);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = __addr(s->initiator, 0);
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++ hdr->len = __len8(sizeof(*mcc));
++
++ mcc = (void *) ptr; ptr += sizeof(*mcc);
++ mcc->type = __mcc_type(cr, RFCOMM_FCON);
++ mcc->len = __len8(0);
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static int rfcomm_send_test(struct rfcomm_session *s, int cr, u8 *pattern, int len)
++{
++ struct socket *sock = s->sock;
++ struct iovec iv[3];
++ struct msghdr msg;
++ unsigned char hdr[5], crc[1];
++
++ if (len > 125)
++ return -EINVAL;
++
++ BT_DBG("%p cr %d", s, cr);
++
++ hdr[0] = __addr(s->initiator, 0);
++ hdr[1] = __ctrl(RFCOMM_UIH, 0);
++ hdr[2] = 0x01 | ((len + 2) << 1);
++ hdr[3] = 0x01 | ((cr & 0x01) << 1) | (RFCOMM_TEST << 2);
++ hdr[4] = 0x01 | (len << 1);
++
++ crc[0] = __fcs(hdr);
++
++ iv[0].iov_base = hdr;
++ iv[0].iov_len = 5;
++ iv[1].iov_base = pattern;
++ iv[1].iov_len = len;
++ iv[2].iov_base = crc;
++ iv[2].iov_len = 1;
++
++ memset(&msg, 0, sizeof(msg));
++ msg.msg_iovlen = 3;
++ msg.msg_iov = iv;
++ return sock->ops->sendmsg(sock, &msg, 6 + len, 0);
++}
++
++static int rfcomm_send_credits(struct rfcomm_session *s, u8 addr, u8 credits)
++{
++ struct rfcomm_hdr *hdr;
++ u8 buf[16], *ptr = buf;
++
++ BT_DBG("%p addr %d credits %d", s, addr, credits);
++
++ hdr = (void *) ptr; ptr += sizeof(*hdr);
++ hdr->addr = addr;
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 1);
++ hdr->len = __len8(0);
++
++ *ptr = credits; ptr++;
++
++ *ptr = __fcs(buf); ptr++;
++
++ return rfcomm_send_frame(s, buf, ptr - buf);
++}
++
++static void rfcomm_make_uih(struct sk_buff *skb, u8 addr)
++{
++ struct rfcomm_hdr *hdr;
++ int len = skb->len;
++ u8 *crc;
++
++ if (len > 127) {
++ hdr = (void *) skb_push(skb, 4);
++ put_unaligned(htobs(__len16(len)), (u16 *) &hdr->len);
++ } else {
++ hdr = (void *) skb_push(skb, 3);
++ hdr->len = __len8(len);
++ }
++ hdr->addr = addr;
++ hdr->ctrl = __ctrl(RFCOMM_UIH, 0);
++
++ crc = skb_put(skb, 1);
++ *crc = __fcs((void *) hdr);
++}
++
++/* ---- RFCOMM frame reception ---- */
++static int rfcomm_recv_ua(struct rfcomm_session *s, u8 dlci)
++{
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (dlci) {
++ /* Data channel */
++ struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
++ if (!d) {
++ rfcomm_send_dm(s, dlci);
++ return 0;
++ }
++
++ switch (d->state) {
++ case BT_CONNECT:
++ rfcomm_dlc_clear_timer(d);
++
++ rfcomm_dlc_lock(d);
++ d->state = BT_CONNECTED;
++ d->state_change(d, 0);
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_send_msc(s, 1, dlci, d->v24_sig);
++ break;
++
++ case BT_DISCONN:
++ d->state = BT_CLOSED;
++ __rfcomm_dlc_close(d, 0);
++ break;
++ }
++ } else {
++ /* Control channel */
++ switch (s->state) {
++ case BT_CONNECT:
++ s->state = BT_CONNECTED;
++ rfcomm_process_connect(s);
++ break;
++ }
++ }
++ return 0;
++}
++
++static int rfcomm_recv_dm(struct rfcomm_session *s, u8 dlci)
++{
++ int err = 0;
++
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (dlci) {
++ /* Data DLC */
++ struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
++ if (d) {
++ if (d->state == BT_CONNECT || d->state == BT_CONFIG)
++ err = ECONNREFUSED;
++ else
++ err = ECONNRESET;
++
++ d->state = BT_CLOSED;
++ __rfcomm_dlc_close(d, err);
++ }
++ } else {
++ if (s->state == BT_CONNECT)
++ err = ECONNREFUSED;
++ else
++ err = ECONNRESET;
++
++ s->state = BT_CLOSED;
++ rfcomm_session_close(s, err);
++ }
++ return 0;
++}
++
++static int rfcomm_recv_disc(struct rfcomm_session *s, u8 dlci)
++{
++ int err = 0;
++
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (dlci) {
++ struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci);
++ if (d) {
++ rfcomm_send_ua(s, dlci);
++
++ if (d->state == BT_CONNECT || d->state == BT_CONFIG)
++ err = ECONNREFUSED;
++ else
++ err = ECONNRESET;
++
++ d->state = BT_CLOSED;
++ __rfcomm_dlc_close(d, err);
++ } else
++ rfcomm_send_dm(s, dlci);
++
++ } else {
++ rfcomm_send_ua(s, 0);
++
++ if (s->state == BT_CONNECT)
++ err = ECONNREFUSED;
++ else
++ err = ECONNRESET;
++
++ s->state = BT_CLOSED;
++ rfcomm_session_close(s, err);
++ }
++
++ return 0;
++}
++
++static int rfcomm_recv_sabm(struct rfcomm_session *s, u8 dlci)
++{
++ struct rfcomm_dlc *d;
++ u8 channel;
++
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (!dlci) {
++ rfcomm_send_ua(s, 0);
++
++ if (s->state == BT_OPEN) {
++ s->state = BT_CONNECTED;
++ rfcomm_process_connect(s);
++ }
++ return 0;
++ }
++
++ /* Check if DLC exists */
++ d = rfcomm_dlc_get(s, dlci);
++ if (d) {
++ if (d->state == BT_OPEN) {
++ /* DLC was previously opened by PN request */
++ rfcomm_send_ua(s, dlci);
++
++ rfcomm_dlc_lock(d);
++ d->state = BT_CONNECTED;
++ d->state_change(d, 0);
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_send_msc(s, 1, dlci, d->v24_sig);
++ }
++ return 0;
++ }
++
++ /* Notify socket layer about incomming connection */
++ channel = __srv_channel(dlci);
++ if (rfcomm_connect_ind(s, channel, &d)) {
++ d->dlci = dlci;
++ d->addr = __addr(s->initiator, dlci);
++ rfcomm_dlc_link(s, d);
++
++ rfcomm_send_ua(s, dlci);
++
++ rfcomm_dlc_lock(d);
++ d->state = BT_CONNECTED;
++ d->state_change(d, 0);
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_send_msc(s, 1, dlci, d->v24_sig);
++ } else {
++ rfcomm_send_dm(s, dlci);
++ }
++
++ return 0;
++}
++
++static int rfcomm_apply_pn(struct rfcomm_dlc *d, int cr, struct rfcomm_pn *pn)
++{
++ struct rfcomm_session *s = d->session;
++
++ BT_DBG("dlc %p state %ld dlci %d mtu %d fc 0x%x credits %d",
++ d, d->state, d->dlci, pn->mtu, pn->flow_ctrl, pn->credits);
++
++ if (cr) {
++ if (pn->flow_ctrl == 0xf0) {
++ s->credits = RFCOMM_MAX_CREDITS;
++ d->credits = s->credits;
++ d->tx_credits = pn->credits;
++ } else {
++ set_bit(RFCOMM_TX_THROTTLED, &d->flags);
++ d->credits = 0;
++ }
++ } else {
++ if (pn->flow_ctrl == 0xe0) {
++ s->credits = RFCOMM_MAX_CREDITS;
++ d->credits = s->credits;
++ d->tx_credits = pn->credits;
++ } else {
++ set_bit(RFCOMM_TX_THROTTLED, &d->flags);
++ d->credits = 0;
++ }
++ }
++
++ d->priority = pn->priority;
++
++ d->mtu = btohs(pn->mtu);
++
++ return 0;
++}
++
++static int rfcomm_recv_pn(struct rfcomm_session *s, int cr, struct sk_buff *skb)
++{
++ struct rfcomm_pn *pn = (void *) skb->data;
++ struct rfcomm_dlc *d;
++ u8 dlci = pn->dlci;
++
++ BT_DBG("session %p state %ld dlci %d", s, s->state, dlci);
++
++ if (!dlci)
++ return 0;
++
++ d = rfcomm_dlc_get(s, dlci);
++ if (d) {
++ if (cr) {
++ /* PN request */
++ rfcomm_apply_pn(d, cr, pn);
++ rfcomm_send_pn(s, 0, d);
++ } else {
++ /* PN response */
++ switch (d->state) {
++ case BT_CONFIG:
++ rfcomm_apply_pn(d, cr, pn);
++
++ d->state = BT_CONNECT;
++ rfcomm_send_sabm(s, d->dlci);
++ break;
++ }
++ }
++ } else {
++ u8 channel = __srv_channel(dlci);
++
++ if (!cr)
++ return 0;
++
++ /* PN request for non existing DLC.
++ * Assume incomming connection. */
++ if (rfcomm_connect_ind(s, channel, &d)) {
++ d->dlci = dlci;
++ d->addr = __addr(s->initiator, dlci);
++ rfcomm_dlc_link(s, d);
++
++ rfcomm_apply_pn(d, cr, pn);
++
++ d->state = BT_OPEN;
++ rfcomm_send_pn(s, 0, d);
++ } else {
++ rfcomm_send_dm(s, dlci);
++ }
++ }
++ return 0;
++}
++
++static int rfcomm_recv_rpn(struct rfcomm_session *s, int cr, int len, struct sk_buff *skb)
++{
++ struct rfcomm_rpn *rpn = (void *) skb->data;
++ u8 dlci = __get_dlci(rpn->dlci);
++
++ u8 bit_rate = 0;
++ u8 data_bits = 0;
++ u8 stop_bits = 0;
++ u8 parity = 0;
++ u8 flow_ctrl = 0;
++ u8 xon_char = 0;
++ u8 xoff_char = 0;
++ u16 rpn_mask = RFCOMM_RPN_PM_ALL;
++
++ BT_DBG("dlci %d cr %d len 0x%x bitr 0x%x line 0x%x flow 0x%x xonc 0x%x xoffc 0x%x pm 0x%x",
++ dlci, cr, len, rpn->bit_rate, rpn->line_settings, rpn->flow_ctrl,
++ rpn->xon_char, rpn->xoff_char, rpn->param_mask);
++
++ if (!cr)
++ return 0;
++
++ if (len == 1) {
++ /* request: return default setting */
++ bit_rate = RFCOMM_RPN_BR_115200;
++ data_bits = RFCOMM_RPN_DATA_8;
++ stop_bits = RFCOMM_RPN_STOP_1;
++ parity = RFCOMM_RPN_PARITY_NONE;
++ flow_ctrl = RFCOMM_RPN_FLOW_NONE;
++ xon_char = RFCOMM_RPN_XON_CHAR;
++ xoff_char = RFCOMM_RPN_XOFF_CHAR;
++
++ goto rpn_out;
++ }
++ /* check for sane values: ignore/accept bit_rate, 8 bits, 1 stop bit, no parity,
++ no flow control lines, normal XON/XOFF chars */
++ if (rpn->param_mask & RFCOMM_RPN_PM_BITRATE) {
++ bit_rate = rpn->bit_rate;
++ if (bit_rate != RFCOMM_RPN_BR_115200) {
++ BT_DBG("RPN bit rate mismatch 0x%x", bit_rate);
++ bit_rate = RFCOMM_RPN_BR_115200;
++ rpn_mask ^= RFCOMM_RPN_PM_BITRATE;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_DATA) {
++ data_bits = __get_rpn_data_bits(rpn->line_settings);
++ if (data_bits != RFCOMM_RPN_DATA_8) {
++ BT_DBG("RPN data bits mismatch 0x%x", data_bits);
++ data_bits = RFCOMM_RPN_DATA_8;
++ rpn_mask ^= RFCOMM_RPN_PM_DATA;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_STOP) {
++ stop_bits = __get_rpn_stop_bits(rpn->line_settings);
++ if (stop_bits != RFCOMM_RPN_STOP_1) {
++ BT_DBG("RPN stop bits mismatch 0x%x", stop_bits);
++ stop_bits = RFCOMM_RPN_STOP_1;
++ rpn_mask ^= RFCOMM_RPN_PM_STOP;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_PARITY) {
++ parity = __get_rpn_parity(rpn->line_settings);
++ if (parity != RFCOMM_RPN_PARITY_NONE) {
++ BT_DBG("RPN parity mismatch 0x%x", parity);
++ parity = RFCOMM_RPN_PARITY_NONE;
++ rpn_mask ^= RFCOMM_RPN_PM_PARITY;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_FLOW) {
++ flow_ctrl = rpn->flow_ctrl;
++ if (flow_ctrl != RFCOMM_RPN_FLOW_NONE) {
++ BT_DBG("RPN flow ctrl mismatch 0x%x", flow_ctrl);
++ flow_ctrl = RFCOMM_RPN_FLOW_NONE;
++ rpn_mask ^= RFCOMM_RPN_PM_FLOW;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_XON) {
++ xon_char = rpn->xon_char;
++ if (xon_char != RFCOMM_RPN_XON_CHAR) {
++ BT_DBG("RPN XON char mismatch 0x%x", xon_char);
++ xon_char = RFCOMM_RPN_XON_CHAR;
++ rpn_mask ^= RFCOMM_RPN_PM_XON;
++ }
++ }
++ if (rpn->param_mask & RFCOMM_RPN_PM_XOFF) {
++ xoff_char = rpn->xoff_char;
++ if (xoff_char != RFCOMM_RPN_XOFF_CHAR) {
++ BT_DBG("RPN XOFF char mismatch 0x%x", xoff_char);
++ xoff_char = RFCOMM_RPN_XOFF_CHAR;
++ rpn_mask ^= RFCOMM_RPN_PM_XOFF;
++ }
++ }
++
++rpn_out:
++ rfcomm_send_rpn(s, 0, dlci,
++ bit_rate, data_bits, stop_bits, parity, flow_ctrl,
++ xon_char, xoff_char, rpn_mask);
++
++ return 0;
++}
++
++static int rfcomm_recv_rls(struct rfcomm_session *s, int cr, struct sk_buff *skb)
++{
++ struct rfcomm_rls *rls = (void *) skb->data;
++ u8 dlci = __get_dlci(rls->dlci);
++
++ BT_DBG("dlci %d cr %d status 0x%x", dlci, cr, rls->status);
++
++ if (!cr)
++ return 0;
++
++ /* FIXME: We should probably do something with this
++ information here. But for now it's sufficient just
++ to reply -- Bluetooth 1.1 says it's mandatory to
++ recognise and respond to RLS */
++
++ rfcomm_send_rls(s, 0, dlci, rls->status);
++
++ return 0;
++}
++
++static int rfcomm_recv_msc(struct rfcomm_session *s, int cr, struct sk_buff *skb)
++{
++ struct rfcomm_msc *msc = (void *) skb->data;
++ struct rfcomm_dlc *d;
++ u8 dlci = __get_dlci(msc->dlci);
++
++ BT_DBG("dlci %d cr %d v24 0x%x", dlci, cr, msc->v24_sig);
++
++ d = rfcomm_dlc_get(s, dlci);
++ if (!d)
++ return 0;
++
++ if (cr) {
++ if (msc->v24_sig & RFCOMM_V24_FC && !d->credits)
++ set_bit(RFCOMM_TX_THROTTLED, &d->flags);
++ else
++ clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
++
++ rfcomm_dlc_lock(d);
++ if (d->modem_status)
++ d->modem_status(d, msc->v24_sig);
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_send_msc(s, 0, dlci, msc->v24_sig);
++
++ d->mscex |= RFCOMM_MSCEX_RX;
++ } else
++ d->mscex |= RFCOMM_MSCEX_TX;
++
++ return 0;
++}
++
++static int rfcomm_recv_mcc(struct rfcomm_session *s, struct sk_buff *skb)
++{
++ struct rfcomm_mcc *mcc = (void *) skb->data;
++ u8 type, cr, len;
++
++ cr = __test_cr(mcc->type);
++ type = __get_mcc_type(mcc->type);
++ len = __get_mcc_len(mcc->len);
++
++ BT_DBG("%p type 0x%x cr %d", s, type, cr);
++
++ skb_pull(skb, 2);
++
++ switch (type) {
++ case RFCOMM_PN:
++ rfcomm_recv_pn(s, cr, skb);
++ break;
++
++ case RFCOMM_RPN:
++ rfcomm_recv_rpn(s, cr, len, skb);
++ break;
++
++ case RFCOMM_RLS:
++ rfcomm_recv_rls(s, cr, skb);
++ break;
++
++ case RFCOMM_MSC:
++ rfcomm_recv_msc(s, cr, skb);
++ break;
++
++ case RFCOMM_FCOFF:
++ if (cr) {
++ set_bit(RFCOMM_TX_THROTTLED, &s->flags);
++ rfcomm_send_fcoff(s, 0);
++ }
++ break;
++
++ case RFCOMM_FCON:
++ if (cr) {
++ clear_bit(RFCOMM_TX_THROTTLED, &s->flags);
++ rfcomm_send_fcon(s, 0);
++ }
++ break;
++
++ case RFCOMM_TEST:
++ if (cr)
++ rfcomm_send_test(s, 0, skb->data, skb->len);
++ break;
++
++ case RFCOMM_NSC:
++ break;
++
++ default:
++ BT_ERR("Unknown control type 0x%02x", type);
++ rfcomm_send_nsc(s, cr, type);
++ break;
++ }
++ return 0;
++}
++
++static int rfcomm_recv_data(struct rfcomm_session *s, u8 dlci, int pf, struct sk_buff *skb)
++{
++ struct rfcomm_dlc *d;
++
++ BT_DBG("session %p state %ld dlci %d pf %d", s, s->state, dlci, pf);
++
++ d = rfcomm_dlc_get(s, dlci);
++ if (!d) {
++ rfcomm_send_dm(s, dlci);
++ goto drop;
++ }
++
++ if (pf && d->credits) {
++ u8 credits = *(u8 *) skb->data; skb_pull(skb, 1);
++
++ d->tx_credits += credits;
++ if (d->tx_credits)
++ clear_bit(RFCOMM_TX_THROTTLED, &d->flags);
++ }
++
++ if (skb->len && d->state == BT_CONNECTED) {
++ rfcomm_dlc_lock(d);
++ d->rx_credits--;
++ d->data_ready(d, skb);
++ rfcomm_dlc_unlock(d);
++ return 0;
++ }
++
++drop:
++ kfree_skb(skb);
++ return 0;
++}
++
++static int rfcomm_recv_frame(struct rfcomm_session *s, struct sk_buff *skb)
++{
++ struct rfcomm_hdr *hdr = (void *) skb->data;
++ u8 type, dlci, fcs;
++
++ dlci = __get_dlci(hdr->addr);
++ type = __get_type(hdr->ctrl);
++
++ /* Trim FCS */
++ skb->len--; skb->tail--;
++ fcs = *(u8 *) skb->tail;
++
++ if (__check_fcs(skb->data, type, fcs)) {
++ BT_ERR("bad checksum in packet");
++ kfree_skb(skb);
++ return -EILSEQ;
++ }
++
++ if (__test_ea(hdr->len))
++ skb_pull(skb, 3);
++ else
++ skb_pull(skb, 4);
++
++ switch (type) {
++ case RFCOMM_SABM:
++ if (__test_pf(hdr->ctrl))
++ rfcomm_recv_sabm(s, dlci);
++ break;
++
++ case RFCOMM_DISC:
++ if (__test_pf(hdr->ctrl))
++ rfcomm_recv_disc(s, dlci);
++ break;
++
++ case RFCOMM_UA:
++ if (__test_pf(hdr->ctrl))
++ rfcomm_recv_ua(s, dlci);
++ break;
++
++ case RFCOMM_DM:
++ rfcomm_recv_dm(s, dlci);
++ break;
++
++ case RFCOMM_UIH:
++ if (dlci)
++ return rfcomm_recv_data(s, dlci, __test_pf(hdr->ctrl), skb);
++
++ rfcomm_recv_mcc(s, skb);
++ break;
++
++ default:
++ BT_ERR("Unknown packet type 0x%02x\n", type);
++ break;
++ }
++ kfree_skb(skb);
++ return 0;
++}
++
++/* ---- Connection and data processing ---- */
++
++static void rfcomm_process_connect(struct rfcomm_session *s)
++{
++ struct rfcomm_dlc *d;
++ struct list_head *p, *n;
++
++ BT_DBG("session %p state %ld", s, s->state);
++
++ list_for_each_safe(p, n, &s->dlcs) {
++ d = list_entry(p, struct rfcomm_dlc, list);
++ if (d->state == BT_CONFIG) {
++ d->mtu = s->mtu;
++ rfcomm_send_pn(s, 1, d);
++ }
++ }
++}
++
++/* Send data queued for the DLC.
++ * Return number of frames left in the queue.
++ */
++static inline int rfcomm_process_tx(struct rfcomm_dlc *d)
++{
++ struct sk_buff *skb;
++ int err;
++
++ BT_DBG("dlc %p state %ld credits %d rx_credits %d tx_credits %d",
++ d, d->state, d->credits, d->rx_credits, d->tx_credits);
++
++ /* Send pending MSC */
++ if (test_and_clear_bit(RFCOMM_MSC_PENDING, &d->flags))
++ rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig);
++
++ if (d->credits) {
++ /* CFC enabled.
++ * Give them some credits */
++ if (!test_bit(RFCOMM_RX_THROTTLED, &d->flags) &&
++ d->rx_credits <= (d->credits >> 2)) {
++ rfcomm_send_credits(d->session, d->addr, d->credits - d->rx_credits);
++ d->rx_credits = d->credits;
++ }
++ } else {
++ /* CFC disabled.
++ * Give ourselves some credits */
++ d->tx_credits = 5;
++ }
++
++ if (test_bit(RFCOMM_TX_THROTTLED, &d->flags))
++ return skb_queue_len(&d->tx_queue);
++
++ while (d->tx_credits && (skb = skb_dequeue(&d->tx_queue))) {
++ err = rfcomm_send_frame(d->session, skb->data, skb->len);
++ if (err < 0) {
++ skb_queue_head(&d->tx_queue, skb);
++ break;
++ }
++ kfree_skb(skb);
++ d->tx_credits--;
++ }
++
++ if (d->credits && !d->tx_credits) {
++ /* We're out of TX credits.
++ * Set TX_THROTTLED flag to avoid unnesary wakeups by dlc_send. */
++ set_bit(RFCOMM_TX_THROTTLED, &d->flags);
++ }
++
++ return skb_queue_len(&d->tx_queue);
++}
++
++static inline void rfcomm_process_dlcs(struct rfcomm_session *s)
++{
++ struct rfcomm_dlc *d;
++ struct list_head *p, *n;
++
++ BT_DBG("session %p state %ld", s, s->state);
++
++ list_for_each_safe(p, n, &s->dlcs) {
++ d = list_entry(p, struct rfcomm_dlc, list);
++ if (test_bit(RFCOMM_TIMED_OUT, &d->flags)) {
++ __rfcomm_dlc_close(d, ETIMEDOUT);
++ continue;
++ }
++
++ if (test_bit(RFCOMM_TX_THROTTLED, &s->flags))
++ continue;
++
++ if ((d->state == BT_CONNECTED || d->state == BT_DISCONN) &&
++ d->mscex == RFCOMM_MSCEX_OK)
++ rfcomm_process_tx(d);
++ }
++}
++
++static inline void rfcomm_process_rx(struct rfcomm_session *s)
++{
++ struct socket *sock = s->sock;
++ struct sock *sk = sock->sk;
++ struct sk_buff *skb;
++
++ BT_DBG("session %p state %ld qlen %d", s, s->state, skb_queue_len(&sk->receive_queue));
++
++ /* Get data directly from socket receive queue without copying it. */
++ while ((skb = skb_dequeue(&sk->receive_queue))) {
++ skb_orphan(skb);
++ rfcomm_recv_frame(s, skb);
++ }
++
++ if (sk->state == BT_CLOSED) {
++ if (!s->initiator)
++ rfcomm_session_put(s);
++
++ rfcomm_session_close(s, sk->err);
++ }
++}
++
++static inline void rfcomm_accept_connection(struct rfcomm_session *s)
++{
++ struct socket *sock = s->sock, *nsock;
++ int err;
++
++ /* Fast check for a new connection.
++ * Avoids unnesesary socket allocations. */
++ if (list_empty(&bluez_pi(sock->sk)->accept_q))
++ return;
++
++ BT_DBG("session %p", s);
++
++ nsock = sock_alloc();
++ if (!nsock)
++ return;
++
++ nsock->type = sock->type;
++ nsock->ops = sock->ops;
++
++ err = sock->ops->accept(sock, nsock, O_NONBLOCK);
++ if (err < 0) {
++ sock_release(nsock);
++ return;
++ }
++
++ /* Set our callbacks */
++ nsock->sk->data_ready = rfcomm_l2data_ready;
++ nsock->sk->state_change = rfcomm_l2state_change;
++
++ s = rfcomm_session_add(nsock, BT_OPEN);
++ if (s)
++ rfcomm_session_hold(s);
++ else
++ sock_release(nsock);
++}
++
++static inline void rfcomm_check_connection(struct rfcomm_session *s)
++{
++ struct sock *sk = s->sock->sk;
++
++ BT_DBG("%p state %ld", s, s->state);
++
++ switch(sk->state) {
++ case BT_CONNECTED:
++ s->state = BT_CONNECT;
++
++ /* We can adjust MTU on outgoing sessions.
++ * L2CAP MTU minus UIH header and FCS. */
++ s->mtu = min(l2cap_pi(sk)->omtu, l2cap_pi(sk)->imtu) - 5;
++
++ rfcomm_send_sabm(s, 0);
++ break;
++
++ case BT_CLOSED:
++ s->state = BT_CLOSED;
++ rfcomm_session_close(s, sk->err);
++ break;
++ }
++}
++
++static inline void rfcomm_process_sessions(void)
++{
++ struct list_head *p, *n;
++
++ rfcomm_lock();
++
++ list_for_each_safe(p, n, &session_list) {
++ struct rfcomm_session *s;
++ s = list_entry(p, struct rfcomm_session, list);
++
++ if (s->state == BT_LISTEN) {
++ rfcomm_accept_connection(s);
++ continue;
++ }
++
++ rfcomm_session_hold(s);
++
++ switch (s->state) {
++ case BT_BOUND:
++ rfcomm_check_connection(s);
++ break;
++
++ default:
++ rfcomm_process_rx(s);
++ break;
++ }
++
++ rfcomm_process_dlcs(s);
++
++ rfcomm_session_put(s);
++ }
++
++ rfcomm_unlock();
++}
++
++static void rfcomm_worker(void)
++{
++ BT_DBG("");
++
++ daemonize(); reparent_to_init();
++ set_fs(KERNEL_DS);
++
++ while (!atomic_read(&terminate)) {
++ BT_DBG("worker loop event 0x%lx", rfcomm_event);
++
++ if (!test_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event)) {
++ /* No pending events. Let's sleep.
++ * Incomming connections and data will wake us up. */
++ set_current_state(TASK_INTERRUPTIBLE);
++ schedule();
++ }
++
++ /* Process stuff */
++ clear_bit(RFCOMM_SCHED_WAKEUP, &rfcomm_event);
++ rfcomm_process_sessions();
++ }
++ set_current_state(TASK_RUNNING);
++ return;
++}
++
++static int rfcomm_add_listener(bdaddr_t *ba)
++{
++ struct sockaddr_l2 addr;
++ struct l2cap_options opts;
++ struct socket *sock;
++ struct rfcomm_session *s;
++ int size, err = 0;
++
++ /* Create socket */
++ err = rfcomm_l2sock_create(&sock);
++ if (err < 0) {
++ BT_ERR("Create socket failed %d", err);
++ return err;
++ }
++
++ /* Bind socket */
++ bacpy(&addr.l2_bdaddr, ba);
++ addr.l2_family = AF_BLUETOOTH;
++ addr.l2_psm = htobs(RFCOMM_PSM);
++ err = sock->ops->bind(sock, (struct sockaddr *) &addr, sizeof(addr));
++ if (err < 0) {
++ BT_ERR("Bind failed %d", err);
++ goto failed;
++ }
++
++ /* Set L2CAP options */
++ size = sizeof(opts);
++ sock->ops->getsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, &size);
++
++ opts.imtu = RFCOMM_MAX_L2CAP_MTU;
++ sock->ops->setsockopt(sock, SOL_L2CAP, L2CAP_OPTIONS, (void *)&opts, size);
++
++ /* Start listening on the socket */
++ err = sock->ops->listen(sock, 10);
++ if (err) {
++ BT_ERR("Listen failed %d", err);
++ goto failed;
++ }
++
++ /* Add listening session */
++ s = rfcomm_session_add(sock, BT_LISTEN);
++ if (!s)
++ goto failed;
++
++ rfcomm_session_hold(s);
++ return 0;
++failed:
++ sock_release(sock);
++ return err;
++}
++
++static void rfcomm_kill_listener(void)
++{
++ struct rfcomm_session *s;
++ struct list_head *p, *n;
++
++ BT_DBG("");
++
++ list_for_each_safe(p, n, &session_list) {
++ s = list_entry(p, struct rfcomm_session, list);
++ rfcomm_session_del(s);
++ }
++}
++
++static int rfcomm_run(void *unused)
++{
++ rfcomm_thread = current;
++
++ atomic_inc(&running);
++
++ daemonize(); reparent_to_init();
++
++ sigfillset(&current->blocked);
++ set_fs(KERNEL_DS);
++
++ sprintf(current->comm, "krfcommd");
++
++ BT_DBG("");
++
++ rfcomm_add_listener(BDADDR_ANY);
++
++ rfcomm_worker();
++
++ rfcomm_kill_listener();
++
++ atomic_dec(&running);
++ return 0;
++}
++
++/* ---- Proc fs support ---- */
++static int rfcomm_dlc_dump(char *buf)
++{
++ struct rfcomm_session *s;
++ struct sock *sk;
++ struct list_head *p, *pp;
++ char *ptr = buf;
++
++ rfcomm_lock();
++
++ list_for_each(p, &session_list) {
++ s = list_entry(p, struct rfcomm_session, list);
++ sk = s->sock->sk;
++
++ list_for_each(pp, &s->dlcs) {
++ struct rfcomm_dlc *d;
++ d = list_entry(pp, struct rfcomm_dlc, list);
++
++ ptr += sprintf(ptr, "dlc %s %s %ld %d %d %d %d\n",
++ batostr(&bluez_pi(sk)->src), batostr(&bluez_pi(sk)->dst),
++ d->state, d->dlci, d->mtu, d->rx_credits, d->tx_credits);
++ }
++ }
++
++ rfcomm_unlock();
++
++ return ptr - buf;
++}
++
++extern int rfcomm_sock_dump(char *buf);
++
++static int rfcomm_read_proc(char *buf, char **start, off_t offset, int count, int *eof, void *priv)
++{
++ char *ptr = buf;
++ int len;
++
++ BT_DBG("count %d, offset %ld", count, offset);
++
++ ptr += rfcomm_dlc_dump(ptr);
++ ptr += rfcomm_sock_dump(ptr);
++ len = ptr - buf;
++
++ if (len <= count + offset)
++ *eof = 1;
++
++ *start = buf + offset;
++ len -= offset;
++
++ if (len > count)
++ len = count;
++ if (len < 0)
++ len = 0;
++
++ return len;
++}
++
++/* ---- Initialization ---- */
++int __init rfcomm_init(void)
++{
++ l2cap_load();
++
++ kernel_thread(rfcomm_run, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND);
++
++ rfcomm_init_sockets();
++
++#ifdef CONFIG_BLUEZ_RFCOMM_TTY
++ rfcomm_init_ttys();
++#endif
++
++ create_proc_read_entry("bluetooth/rfcomm", 0, 0, rfcomm_read_proc, NULL);
++
++ BT_INFO("BlueZ RFCOMM ver %s", VERSION);
++ BT_INFO("Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>");
++ BT_INFO("Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>");
++ return 0;
++}
++
++void rfcomm_cleanup(void)
++{
++ /* Terminate working thread.
++ * ie. Set terminate flag and wake it up */
++ atomic_inc(&terminate);
++ rfcomm_schedule(RFCOMM_SCHED_STATE);
++
++ /* Wait until thread is running */
++ while (atomic_read(&running))
++ schedule();
++
++ remove_proc_entry("bluetooth/rfcomm", NULL);
++
++#ifdef CONFIG_BLUEZ_RFCOMM_TTY
++ rfcomm_cleanup_ttys();
++#endif
++
++ rfcomm_cleanup_sockets();
++ return;
++}
++
++module_init(rfcomm_init);
++module_exit(rfcomm_cleanup);
++
++MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
++MODULE_DESCRIPTION("BlueZ RFCOMM ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/rfcomm/crc.c linux-2.4.18-mh9/net/bluetooth/rfcomm/crc.c
+--- linux-2.4.18/net/bluetooth/rfcomm/crc.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/rfcomm/crc.c Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,71 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * RFCOMM FCS calculation.
++ *
++ * $Id: crc.c,v 1.2 2002/09/21 09:54:32 holtmann Exp $
++ */
++
++/* reversed, 8-bit, poly=0x07 */
++unsigned char rfcomm_crc_table[256] = {
++ 0x00, 0x91, 0xe3, 0x72, 0x07, 0x96, 0xe4, 0x75,
++ 0x0e, 0x9f, 0xed, 0x7c, 0x09, 0x98, 0xea, 0x7b,
++ 0x1c, 0x8d, 0xff, 0x6e, 0x1b, 0x8a, 0xf8, 0x69,
++ 0x12, 0x83, 0xf1, 0x60, 0x15, 0x84, 0xf6, 0x67,
++
++ 0x38, 0xa9, 0xdb, 0x4a, 0x3f, 0xae, 0xdc, 0x4d,
++ 0x36, 0xa7, 0xd5, 0x44, 0x31, 0xa0, 0xd2, 0x43,
++ 0x24, 0xb5, 0xc7, 0x56, 0x23, 0xb2, 0xc0, 0x51,
++ 0x2a, 0xbb, 0xc9, 0x58, 0x2d, 0xbc, 0xce, 0x5f,
++
++ 0x70, 0xe1, 0x93, 0x02, 0x77, 0xe6, 0x94, 0x05,
++ 0x7e, 0xef, 0x9d, 0x0c, 0x79, 0xe8, 0x9a, 0x0b,
++ 0x6c, 0xfd, 0x8f, 0x1e, 0x6b, 0xfa, 0x88, 0x19,
++ 0x62, 0xf3, 0x81, 0x10, 0x65, 0xf4, 0x86, 0x17,
++
++ 0x48, 0xd9, 0xab, 0x3a, 0x4f, 0xde, 0xac, 0x3d,
++ 0x46, 0xd7, 0xa5, 0x34, 0x41, 0xd0, 0xa2, 0x33,
++ 0x54, 0xc5, 0xb7, 0x26, 0x53, 0xc2, 0xb0, 0x21,
++ 0x5a, 0xcb, 0xb9, 0x28, 0x5d, 0xcc, 0xbe, 0x2f,
++
++ 0xe0, 0x71, 0x03, 0x92, 0xe7, 0x76, 0x04, 0x95,
++ 0xee, 0x7f, 0x0d, 0x9c, 0xe9, 0x78, 0x0a, 0x9b,
++ 0xfc, 0x6d, 0x1f, 0x8e, 0xfb, 0x6a, 0x18, 0x89,
++ 0xf2, 0x63, 0x11, 0x80, 0xf5, 0x64, 0x16, 0x87,
++
++ 0xd8, 0x49, 0x3b, 0xaa, 0xdf, 0x4e, 0x3c, 0xad,
++ 0xd6, 0x47, 0x35, 0xa4, 0xd1, 0x40, 0x32, 0xa3,
++ 0xc4, 0x55, 0x27, 0xb6, 0xc3, 0x52, 0x20, 0xb1,
++ 0xca, 0x5b, 0x29, 0xb8, 0xcd, 0x5c, 0x2e, 0xbf,
++
++ 0x90, 0x01, 0x73, 0xe2, 0x97, 0x06, 0x74, 0xe5,
++ 0x9e, 0x0f, 0x7d, 0xec, 0x99, 0x08, 0x7a, 0xeb,
++ 0x8c, 0x1d, 0x6f, 0xfe, 0x8b, 0x1a, 0x68, 0xf9,
++ 0x82, 0x13, 0x61, 0xf0, 0x85, 0x14, 0x66, 0xf7,
++
++ 0xa8, 0x39, 0x4b, 0xda, 0xaf, 0x3e, 0x4c, 0xdd,
++ 0xa6, 0x37, 0x45, 0xd4, 0xa1, 0x30, 0x42, 0xd3,
++ 0xb4, 0x25, 0x57, 0xc6, 0xb3, 0x22, 0x50, 0xc1,
++ 0xba, 0x2b, 0x59, 0xc8, 0xbd, 0x2c, 0x5e, 0xcf
++};
+diff -urN linux-2.4.18/net/bluetooth/rfcomm/sock.c linux-2.4.18-mh9/net/bluetooth/rfcomm/sock.c
+--- linux-2.4.18/net/bluetooth/rfcomm/sock.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/rfcomm/sock.c Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,847 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * RFCOMM sockets.
++ *
++ * $Id: sock.c,v 1.30 2002/10/18 20:12:12 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/init.h>
++#include <linux/skbuff.h>
++#include <linux/interrupt.h>
++#include <linux/socket.h>
++#include <linux/skbuff.h>
++#include <linux/list.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/rfcomm.h>
++
++#ifndef CONFIG_BLUEZ_RFCOMM_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++static struct proto_ops rfcomm_sock_ops;
++
++static struct bluez_sock_list rfcomm_sk_list = {
++ lock: RW_LOCK_UNLOCKED
++};
++
++static void rfcomm_sock_close(struct sock *sk);
++static void rfcomm_sock_kill(struct sock *sk);
++
++/* ---- DLC callbacks ----
++ *
++ * called under rfcomm_dlc_lock()
++ */
++static void rfcomm_sk_data_ready(struct rfcomm_dlc *d, struct sk_buff *skb)
++{
++ struct sock *sk = d->owner;
++ if (!sk)
++ return;
++
++ atomic_add(skb->len, &sk->rmem_alloc);
++ skb_queue_tail(&sk->receive_queue, skb);
++ sk->data_ready(sk, skb->len);
++
++ if (atomic_read(&sk->rmem_alloc) >= sk->rcvbuf)
++ rfcomm_dlc_throttle(d);
++}
++
++static void rfcomm_sk_state_change(struct rfcomm_dlc *d, int err)
++{
++ struct sock *sk = d->owner, *parent;
++ if (!sk)
++ return;
++
++ BT_DBG("dlc %p state %ld err %d", d, d->state, err);
++
++ bh_lock_sock(sk);
++
++ if (err)
++ sk->err = err;
++ sk->state = d->state;
++
++ parent = bluez_pi(sk)->parent;
++ if (!parent) {
++ if (d->state == BT_CONNECTED)
++ rfcomm_session_getaddr(d->session, &bluez_pi(sk)->src, NULL);
++ sk->state_change(sk);
++ } else
++ parent->data_ready(parent, 0);
++
++ bh_unlock_sock(sk);
++}
++
++/* ---- Socket functions ---- */
++static struct sock *__rfcomm_get_sock_by_addr(u8 channel, bdaddr_t *src)
++{
++ struct sock *sk;
++
++ for (sk = rfcomm_sk_list.head; sk; sk = sk->next) {
++ if (rfcomm_pi(sk)->channel == channel &&
++ !bacmp(&bluez_pi(sk)->src, src))
++ break;
++ }
++
++ return sk;
++}
++
++/* Find socket with channel and source bdaddr.
++ * Returns closest match.
++ */
++static struct sock *__rfcomm_get_sock_by_channel(int state, u8 channel, bdaddr_t *src)
++{
++ struct sock *sk, *sk1 = NULL;
++
++ for (sk = rfcomm_sk_list.head; sk; sk = sk->next) {
++ if (state && sk->state != state)
++ continue;
++
++ if (rfcomm_pi(sk)->channel == channel) {
++ /* Exact match. */
++ if (!bacmp(&bluez_pi(sk)->src, src))
++ break;
++
++ /* Closest match */
++ if (!bacmp(&bluez_pi(sk)->src, BDADDR_ANY))
++ sk1 = sk;
++ }
++ }
++ return sk ? sk : sk1;
++}
++
++/* Find socket with given address (channel, src).
++ * Returns locked socket */
++static inline struct sock *rfcomm_get_sock_by_channel(int state, u8 channel, bdaddr_t *src)
++{
++ struct sock *s;
++ read_lock(&rfcomm_sk_list.lock);
++ s = __rfcomm_get_sock_by_channel(state, channel, src);
++ if (s) bh_lock_sock(s);
++ read_unlock(&rfcomm_sk_list.lock);
++ return s;
++}
++
++static void rfcomm_sock_destruct(struct sock *sk)
++{
++ struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
++
++ BT_DBG("sk %p dlc %p", sk, d);
++
++ skb_queue_purge(&sk->receive_queue);
++ skb_queue_purge(&sk->write_queue);
++
++ rfcomm_dlc_lock(d);
++ rfcomm_pi(sk)->dlc = NULL;
++
++ /* Detach DLC if it's owned by this socket */
++ if (d->owner == sk)
++ d->owner = NULL;
++ rfcomm_dlc_unlock(d);
++
++ rfcomm_dlc_put(d);
++
++ MOD_DEC_USE_COUNT;
++}
++
++static void rfcomm_sock_cleanup_listen(struct sock *parent)
++{
++ struct sock *sk;
++
++ BT_DBG("parent %p", parent);
++
++ /* Close not yet accepted dlcs */
++ while ((sk = bluez_accept_dequeue(parent, NULL))) {
++ rfcomm_sock_close(sk);
++ rfcomm_sock_kill(sk);
++ }
++
++ parent->state = BT_CLOSED;
++ parent->zapped = 1;
++}
++
++/* Kill socket (only if zapped and orphan)
++ * Must be called on unlocked socket.
++ */
++static void rfcomm_sock_kill(struct sock *sk)
++{
++ if (!sk->zapped || sk->socket)
++ return;
++
++ BT_DBG("sk %p state %d refcnt %d", sk, sk->state, atomic_read(&sk->refcnt));
++
++ /* Kill poor orphan */
++ bluez_sock_unlink(&rfcomm_sk_list, sk);
++ sk->dead = 1;
++ sock_put(sk);
++}
++
++static void __rfcomm_sock_close(struct sock *sk)
++{
++ struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
++
++ BT_DBG("sk %p state %d socket %p", sk, sk->state, sk->socket);
++
++ switch (sk->state) {
++ case BT_LISTEN:
++ rfcomm_sock_cleanup_listen(sk);
++ break;
++
++ case BT_CONNECT:
++ case BT_CONNECT2:
++ case BT_CONFIG:
++ case BT_CONNECTED:
++ rfcomm_dlc_close(d, 0);
++
++ default:
++ sk->zapped = 1;
++ break;
++ }
++}
++
++/* Close socket.
++ * Must be called on unlocked socket.
++ */
++static void rfcomm_sock_close(struct sock *sk)
++{
++ lock_sock(sk);
++ __rfcomm_sock_close(sk);
++ release_sock(sk);
++}
++
++static void rfcomm_sock_init(struct sock *sk, struct sock *parent)
++{
++ BT_DBG("sk %p", sk);
++
++ if (parent)
++ sk->type = parent->type;
++}
++
++static struct sock *rfcomm_sock_alloc(struct socket *sock, int proto, int prio)
++{
++ struct rfcomm_dlc *d;
++ struct sock *sk;
++
++ sk = sk_alloc(PF_BLUETOOTH, prio, 1);
++ if (!sk)
++ return NULL;
++
++ d = rfcomm_dlc_alloc(prio);
++ if (!d) {
++ sk_free(sk);
++ return NULL;
++ }
++ d->data_ready = rfcomm_sk_data_ready;
++ d->state_change = rfcomm_sk_state_change;
++
++ rfcomm_pi(sk)->dlc = d;
++ d->owner = sk;
++
++ bluez_sock_init(sock, sk);
++
++ sk->zapped = 0;
++
++ sk->destruct = rfcomm_sock_destruct;
++ sk->sndtimeo = RFCOMM_CONN_TIMEOUT;
++
++ sk->sndbuf = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
++ sk->rcvbuf = RFCOMM_MAX_CREDITS * RFCOMM_DEFAULT_MTU * 10;
++
++ sk->protocol = proto;
++ sk->state = BT_OPEN;
++
++ bluez_sock_link(&rfcomm_sk_list, sk);
++
++ BT_DBG("sk %p", sk);
++
++ MOD_INC_USE_COUNT;
++ return sk;
++}
++
++static int rfcomm_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ sock->state = SS_UNCONNECTED;
++
++ if (sock->type != SOCK_STREAM && sock->type != SOCK_RAW)
++ return -ESOCKTNOSUPPORT;
++
++ sock->ops = &rfcomm_sock_ops;
++
++ if (!(sk = rfcomm_sock_alloc(sock, protocol, GFP_KERNEL)))
++ return -ENOMEM;
++
++ rfcomm_sock_init(sk, NULL);
++ return 0;
++}
++
++static int rfcomm_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
++{
++ struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p %s", sk, batostr(&sa->rc_bdaddr));
++
++ if (!addr || addr->sa_family != AF_BLUETOOTH)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_OPEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ write_lock_bh(&rfcomm_sk_list.lock);
++
++ if (sa->rc_channel && __rfcomm_get_sock_by_addr(sa->rc_channel, &sa->rc_bdaddr)) {
++ err = -EADDRINUSE;
++ } else {
++ /* Save source address */
++ bacpy(&bluez_pi(sk)->src, &sa->rc_bdaddr);
++ rfcomm_pi(sk)->channel = sa->rc_channel;
++ sk->state = BT_BOUND;
++ }
++
++ write_unlock_bh(&rfcomm_sk_list.lock);
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
++{
++ struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
++ struct sock *sk = sock->sk;
++ struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
++ int err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_rc))
++ return -EINVAL;
++
++ if (sk->state != BT_OPEN && sk->state != BT_BOUND)
++ return -EBADFD;
++
++ if (sk->type != SOCK_STREAM)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ sk->state = BT_CONNECT;
++ bacpy(&bluez_pi(sk)->dst, &sa->rc_bdaddr);
++ rfcomm_pi(sk)->channel = sa->rc_channel;
++
++ err = rfcomm_dlc_open(d, &bluez_pi(sk)->src, &sa->rc_bdaddr, sa->rc_channel);
++ if (!err)
++ err = bluez_sock_wait_state(sk, BT_CONNECTED,
++ sock_sndtimeo(sk, flags & O_NONBLOCK));
++
++ release_sock(sk);
++ return err;
++}
++
++int rfcomm_sock_listen(struct socket *sock, int backlog)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p backlog %d", sk, backlog);
++
++ lock_sock(sk);
++
++ if (sk->state != BT_BOUND) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ sk->max_ack_backlog = backlog;
++ sk->ack_backlog = 0;
++ sk->state = BT_LISTEN;
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++int rfcomm_sock_accept(struct socket *sock, struct socket *newsock, int flags)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct sock *sk = sock->sk, *nsk;
++ long timeo;
++ int err = 0;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
++
++ BT_DBG("sk %p timeo %ld", sk, timeo);
++
++ /* Wait for an incoming connection. (wake-one). */
++ add_wait_queue_exclusive(sk->sleep, &wait);
++ while (!(nsk = bluez_accept_dequeue(sk, newsock))) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ if (!timeo) {
++ err = -EAGAIN;
++ break;
++ }
++
++ release_sock(sk);
++ timeo = schedule_timeout(timeo);
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ break;
++ }
++
++ if (signal_pending(current)) {
++ err = sock_intr_errno(timeo);
++ break;
++ }
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++
++ if (err)
++ goto done;
++
++ newsock->state = SS_CONNECTED;
++
++ BT_DBG("new socket %p", nsk);
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
++{
++ struct sockaddr_rc *sa = (struct sockaddr_rc *) addr;
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ sa->rc_family = AF_BLUETOOTH;
++ sa->rc_channel = rfcomm_pi(sk)->channel;
++ if (peer)
++ bacpy(&sa->rc_bdaddr, &bluez_pi(sk)->dst);
++ else
++ bacpy(&sa->rc_bdaddr, &bluez_pi(sk)->src);
++
++ *len = sizeof(struct sockaddr_rc);
++ return 0;
++}
++
++static int rfcomm_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len,
++ struct scm_cookie *scm)
++{
++ struct sock *sk = sock->sk;
++ struct rfcomm_dlc *d = rfcomm_pi(sk)->dlc;
++ struct sk_buff *skb;
++ int err, size;
++ int sent = 0;
++
++ if (msg->msg_flags & MSG_OOB)
++ return -EOPNOTSUPP;
++
++ if (sk->shutdown & SEND_SHUTDOWN)
++ return -EPIPE;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ lock_sock(sk);
++
++ while (len) {
++ size = min_t(uint, len, d->mtu);
++
++ skb = sock_alloc_send_skb(sk, size + RFCOMM_SKB_RESERVE,
++ msg->msg_flags & MSG_DONTWAIT, &err);
++ if (!skb)
++ break;
++ skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
++
++ err = memcpy_fromiovec(skb_put(skb, size), msg->msg_iov, size);
++ if (err) {
++ kfree_skb(skb);
++ sent = err;
++ break;
++ }
++
++ err = rfcomm_dlc_send(d, skb);
++ if (err < 0) {
++ kfree_skb(skb);
++ break;
++ }
++
++ sent += size;
++ len -= size;
++ }
++
++ release_sock(sk);
++
++ return sent ? sent : err;
++}
++
++static long rfcomm_sock_data_wait(struct sock *sk, long timeo)
++{
++ DECLARE_WAITQUEUE(wait, current);
++
++ add_wait_queue(sk->sleep, &wait);
++ for (;;) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (skb_queue_len(&sk->receive_queue) || sk->err || (sk->shutdown & RCV_SHUTDOWN) ||
++ signal_pending(current) || !timeo)
++ break;
++
++ set_bit(SOCK_ASYNC_WAITDATA, &sk->socket->flags);
++ release_sock(sk);
++ timeo = schedule_timeout(timeo);
++ lock_sock(sk);
++ clear_bit(SOCK_ASYNC_WAITDATA, &sk->socket->flags);
++ }
++
++ __set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++ return timeo;
++}
++
++static int rfcomm_sock_recvmsg(struct socket *sock, struct msghdr *msg, int size,
++ int flags, struct scm_cookie *scm)
++{
++ struct sock *sk = sock->sk;
++ int target, err = 0, copied = 0;
++ long timeo;
++
++ if (flags & MSG_OOB)
++ return -EOPNOTSUPP;
++
++ msg->msg_namelen = 0;
++
++ BT_DBG("sk %p size %d", sk, size);
++
++ lock_sock(sk);
++
++ target = sock_rcvlowat(sk, flags & MSG_WAITALL, size);
++ timeo = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
++
++ do {
++ struct sk_buff *skb;
++ int chunk;
++
++ skb = skb_dequeue(&sk->receive_queue);
++ if (!skb) {
++ if (copied >= target)
++ break;
++
++ if ((err = sock_error(sk)) != 0)
++ break;
++ if (sk->shutdown & RCV_SHUTDOWN)
++ break;
++
++ err = -EAGAIN;
++ if (!timeo)
++ break;
++
++ timeo = rfcomm_sock_data_wait(sk, timeo);
++
++ if (signal_pending(current)) {
++ err = sock_intr_errno(timeo);
++ goto out;
++ }
++ continue;
++ }
++
++ chunk = min_t(unsigned int, skb->len, size);
++ if (memcpy_toiovec(msg->msg_iov, skb->data, chunk)) {
++ skb_queue_head(&sk->receive_queue, skb);
++ if (!copied)
++ copied = -EFAULT;
++ break;
++ }
++ copied += chunk;
++ size -= chunk;
++
++ if (!(flags & MSG_PEEK)) {
++ atomic_sub(chunk, &sk->rmem_alloc);
++
++ skb_pull(skb, chunk);
++ if (skb->len) {
++ skb_queue_head(&sk->receive_queue, skb);
++ break;
++ }
++ kfree_skb(skb);
++
++ } else {
++ /* put message back and return */
++ skb_queue_head(&sk->receive_queue, skb);
++ break;
++ }
++ } while (size);
++
++out:
++ if (atomic_read(&sk->rmem_alloc) <= (sk->rcvbuf >> 2))
++ rfcomm_dlc_unthrottle(rfcomm_pi(sk)->dlc);
++
++ release_sock(sk);
++ return copied ? : err;
++}
++
++static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, int optlen)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ lock_sock(sk);
++
++ switch (optname) {
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ };
++
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_getsockopt(struct socket *sock, int level, int optname, char *optval, int *optlen)
++{
++ struct sock *sk = sock->sk;
++ int len, err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ if (get_user(len, optlen))
++ return -EFAULT;
++
++ lock_sock(sk);
++
++ switch (optname) {
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ };
++
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
++{
++ struct sock *sk = sock->sk;
++ int err;
++
++ lock_sock(sk);
++
++#ifdef CONFIG_BLUEZ_RFCOMM_TTY
++ err = rfcomm_dev_ioctl(sk, cmd, arg);
++#else
++ err = -EOPNOTSUPP;
++#endif
++
++ release_sock(sk);
++
++ return err;
++}
++
++static int rfcomm_sock_shutdown(struct socket *sock, int how)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (!sk) return 0;
++
++ lock_sock(sk);
++ if (!sk->shutdown) {
++ sk->shutdown = SHUTDOWN_MASK;
++ __rfcomm_sock_close(sk);
++
++ if (sk->linger)
++ err = bluez_sock_wait_state(sk, BT_CLOSED, sk->lingertime);
++ }
++ release_sock(sk);
++ return err;
++}
++
++static int rfcomm_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (!sk)
++ return 0;
++
++ err = rfcomm_sock_shutdown(sock, 2);
++
++ sock_orphan(sk);
++ rfcomm_sock_kill(sk);
++ return err;
++}
++
++/* ---- RFCOMM core layer callbacks ----
++ *
++ * called under rfcomm_lock()
++ */
++int rfcomm_connect_ind(struct rfcomm_session *s, u8 channel, struct rfcomm_dlc **d)
++{
++ struct sock *sk, *parent;
++ bdaddr_t src, dst;
++ int result = 0;
++
++ BT_DBG("session %p channel %d", s, channel);
++
++ rfcomm_session_getaddr(s, &src, &dst);
++
++ /* Check if we have socket listening on this channel */
++ parent = rfcomm_get_sock_by_channel(BT_LISTEN, channel, &src);
++ if (!parent)
++ return 0;
++
++ /* Check for backlog size */
++ if (parent->ack_backlog > parent->max_ack_backlog) {
++ BT_DBG("backlog full %d", parent->ack_backlog);
++ goto done;
++ }
++
++ sk = rfcomm_sock_alloc(NULL, BTPROTO_RFCOMM, GFP_ATOMIC);
++ if (!sk)
++ goto done;
++
++ rfcomm_sock_init(sk, parent);
++ bacpy(&bluez_pi(sk)->src, &src);
++ bacpy(&bluez_pi(sk)->dst, &dst);
++ rfcomm_pi(sk)->channel = channel;
++
++ sk->state = BT_CONFIG;
++ bluez_accept_enqueue(parent, sk);
++
++ /* Accept connection and return socket DLC */
++ *d = rfcomm_pi(sk)->dlc;
++ result = 1;
++
++done:
++ bh_unlock_sock(parent);
++ return result;
++}
++
++/* ---- Proc fs support ---- */
++int rfcomm_sock_dump(char *buf)
++{
++ struct bluez_sock_list *list = &rfcomm_sk_list;
++ struct rfcomm_pinfo *pi;
++ struct sock *sk;
++ char *ptr = buf;
++
++ write_lock_bh(&list->lock);
++
++ for (sk = list->head; sk; sk = sk->next) {
++ pi = rfcomm_pi(sk);
++ ptr += sprintf(ptr, "sk %s %s %d %d\n",
++ batostr(&bluez_pi(sk)->src), batostr(&bluez_pi(sk)->dst),
++ sk->state, rfcomm_pi(sk)->channel);
++ }
++
++ write_unlock_bh(&list->lock);
++
++ return ptr - buf;
++}
++
++static struct proto_ops rfcomm_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: rfcomm_sock_release,
++ bind: rfcomm_sock_bind,
++ connect: rfcomm_sock_connect,
++ listen: rfcomm_sock_listen,
++ accept: rfcomm_sock_accept,
++ getname: rfcomm_sock_getname,
++ sendmsg: rfcomm_sock_sendmsg,
++ recvmsg: rfcomm_sock_recvmsg,
++ shutdown: rfcomm_sock_shutdown,
++ setsockopt: rfcomm_sock_setsockopt,
++ getsockopt: rfcomm_sock_getsockopt,
++ ioctl: rfcomm_sock_ioctl,
++ poll: bluez_sock_poll,
++ socketpair: sock_no_socketpair,
++ mmap: sock_no_mmap
++};
++
++static struct net_proto_family rfcomm_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: rfcomm_sock_create
++};
++
++int rfcomm_init_sockets(void)
++{
++ int err;
++
++ if ((err = bluez_sock_register(BTPROTO_RFCOMM, &rfcomm_sock_family_ops))) {
++ BT_ERR("Can't register RFCOMM socket layer");
++ return err;
++ }
++
++ return 0;
++}
++
++void rfcomm_cleanup_sockets(void)
++{
++ int err;
++
++ /* Unregister socket, protocol and notifier */
++ if ((err = bluez_sock_unregister(BTPROTO_RFCOMM)))
++ BT_ERR("Can't unregister RFCOMM socket layer %d", err);
++}
+diff -urN linux-2.4.18/net/bluetooth/rfcomm/tty.c linux-2.4.18-mh9/net/bluetooth/rfcomm/tty.c
+--- linux-2.4.18/net/bluetooth/rfcomm/tty.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/rfcomm/tty.c Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,945 @@
++/*
++ RFCOMM implementation for Linux Bluetooth stack (BlueZ).
++ Copyright (C) 2002 Maxim Krasnyansky <maxk@qualcomm.com>
++ Copyright (C) 2002 Marcel Holtmann <marcel@holtmann.org>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * RFCOMM TTY.
++ *
++ * $Id: tty.c,v 1.26 2002/10/18 20:12:12 maxk Exp $
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/tty.h>
++#include <linux/tty_driver.h>
++#include <linux/tty_flip.h>
++
++#include <linux/slab.h>
++#include <linux/skbuff.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/rfcomm.h>
++
++#ifndef CONFIG_BLUEZ_RFCOMM_DEBUG
++#undef BT_DBG
++#define BT_DBG(D...)
++#endif
++
++#define RFCOMM_TTY_MAGIC 0x6d02 /* magic number for rfcomm struct */
++#define RFCOMM_TTY_PORTS RFCOMM_MAX_DEV /* whole lotta rfcomm devices */
++#define RFCOMM_TTY_MAJOR 216 /* device node major id of the usb/bluetooth.c driver */
++#define RFCOMM_TTY_MINOR 0
++
++struct rfcomm_dev {
++ struct list_head list;
++ atomic_t refcnt;
++
++ char name[12];
++ int id;
++ unsigned long flags;
++ int opened;
++ int err;
++
++ bdaddr_t src;
++ bdaddr_t dst;
++ u8 channel;
++
++ uint modem_status;
++
++ struct rfcomm_dlc *dlc;
++ struct tty_struct *tty;
++ wait_queue_head_t wait;
++ struct tasklet_struct wakeup_task;
++
++ atomic_t wmem_alloc;
++};
++
++static LIST_HEAD(rfcomm_dev_list);
++static rwlock_t rfcomm_dev_lock = RW_LOCK_UNLOCKED;
++
++static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb);
++static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err);
++static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig);
++
++static void rfcomm_tty_wakeup(unsigned long arg);
++
++/* ---- Device functions ---- */
++static void rfcomm_dev_destruct(struct rfcomm_dev *dev)
++{
++ struct rfcomm_dlc *dlc = dev->dlc;
++
++ BT_DBG("dev %p dlc %p", dev, dlc);
++
++ rfcomm_dlc_lock(dlc);
++ /* Detach DLC if it's owned by this dev */
++ if (dlc->owner == dev)
++ dlc->owner = NULL;
++ rfcomm_dlc_unlock(dlc);
++
++ rfcomm_dlc_put(dlc);
++ kfree(dev);
++
++ MOD_DEC_USE_COUNT;
++}
++
++static inline void rfcomm_dev_hold(struct rfcomm_dev *dev)
++{
++ atomic_inc(&dev->refcnt);
++}
++
++static inline void rfcomm_dev_put(struct rfcomm_dev *dev)
++{
++ if (atomic_dec_and_test(&dev->refcnt))
++ rfcomm_dev_destruct(dev);
++}
++
++static struct rfcomm_dev *__rfcomm_dev_get(int id)
++{
++ struct rfcomm_dev *dev;
++ struct list_head *p;
++
++ list_for_each(p, &rfcomm_dev_list) {
++ dev = list_entry(p, struct rfcomm_dev, list);
++ if (dev->id == id)
++ return dev;
++ }
++
++ return NULL;
++}
++
++static inline struct rfcomm_dev *rfcomm_dev_get(int id)
++{
++ struct rfcomm_dev *dev;
++
++ read_lock(&rfcomm_dev_lock);
++ dev = __rfcomm_dev_get(id);
++ read_unlock(&rfcomm_dev_lock);
++
++ if (dev) rfcomm_dev_hold(dev);
++ return dev;
++}
++
++static int rfcomm_dev_add(struct rfcomm_dev_req *req, struct rfcomm_dlc *dlc)
++{
++ struct rfcomm_dev *dev;
++ struct list_head *head = &rfcomm_dev_list, *p;
++ int err = 0;
++
++ BT_DBG("id %d channel %d", req->dev_id, req->channel);
++
++ dev = kmalloc(sizeof(struct rfcomm_dev), GFP_KERNEL);
++ if (!dev)
++ return -ENOMEM;
++ memset(dev, 0, sizeof(struct rfcomm_dev));
++
++ write_lock_bh(&rfcomm_dev_lock);
++
++ if (req->dev_id < 0) {
++ dev->id = 0;
++
++ list_for_each(p, &rfcomm_dev_list) {
++ if (list_entry(p, struct rfcomm_dev, list)->id != dev->id)
++ break;
++
++ dev->id++;
++ head = p;
++ }
++ } else {
++ dev->id = req->dev_id;
++
++ list_for_each(p, &rfcomm_dev_list) {
++ struct rfcomm_dev *entry = list_entry(p, struct rfcomm_dev, list);
++
++ if (entry->id == dev->id) {
++ err = -EADDRINUSE;
++ goto out;
++ }
++
++ if (entry->id > dev->id - 1)
++ break;
++
++ head = p;
++ }
++ }
++
++ if ((dev->id < 0) || (dev->id > RFCOMM_MAX_DEV - 1)) {
++ err = -ENFILE;
++ goto out;
++ }
++
++ sprintf(dev->name, "rfcomm%d", dev->id);
++
++ list_add(&dev->list, head);
++ atomic_set(&dev->refcnt, 1);
++
++ bacpy(&dev->src, &req->src);
++ bacpy(&dev->dst, &req->dst);
++ dev->channel = req->channel;
++
++ dev->flags = req->flags &
++ ((1 << RFCOMM_RELEASE_ONHUP) | (1 << RFCOMM_REUSE_DLC));
++
++ init_waitqueue_head(&dev->wait);
++ tasklet_init(&dev->wakeup_task, rfcomm_tty_wakeup, (unsigned long) dev);
++
++ rfcomm_dlc_lock(dlc);
++ dlc->data_ready = rfcomm_dev_data_ready;
++ dlc->state_change = rfcomm_dev_state_change;
++ dlc->modem_status = rfcomm_dev_modem_status;
++
++ dlc->owner = dev;
++ dev->dlc = dlc;
++ rfcomm_dlc_unlock(dlc);
++
++ MOD_INC_USE_COUNT;
++
++out:
++ write_unlock_bh(&rfcomm_dev_lock);
++
++ if (err) {
++ kfree(dev);
++ return err;
++ } else
++ return dev->id;
++}
++
++static void rfcomm_dev_del(struct rfcomm_dev *dev)
++{
++ BT_DBG("dev %p", dev);
++
++ write_lock_bh(&rfcomm_dev_lock);
++ list_del_init(&dev->list);
++ write_unlock_bh(&rfcomm_dev_lock);
++
++ rfcomm_dev_put(dev);
++}
++
++/* ---- Send buffer ---- */
++
++static inline unsigned int rfcomm_room(struct rfcomm_dlc *dlc)
++{
++ /* We can't let it be zero, because we don't get a callback
++ when tx_credits becomes nonzero, hence we'd never wake up */
++ return dlc->mtu * (dlc->tx_credits?:1);
++}
++
++static void rfcomm_wfree(struct sk_buff *skb)
++{
++ struct rfcomm_dev *dev = (void *) skb->sk;
++ atomic_sub(skb->truesize, &dev->wmem_alloc);
++ if (test_bit(RFCOMM_TTY_ATTACHED, &dev->flags))
++ tasklet_schedule(&dev->wakeup_task);
++ rfcomm_dev_put(dev);
++}
++
++static inline void rfcomm_set_owner_w(struct sk_buff *skb, struct rfcomm_dev *dev)
++{
++ rfcomm_dev_hold(dev);
++ atomic_add(skb->truesize, &dev->wmem_alloc);
++ skb->sk = (void *) dev;
++ skb->destructor = rfcomm_wfree;
++}
++
++static struct sk_buff *rfcomm_wmalloc(struct rfcomm_dev *dev, unsigned long size, int force, int priority)
++{
++ if (force || atomic_read(&dev->wmem_alloc) < rfcomm_room(dev->dlc)) {
++ struct sk_buff *skb = alloc_skb(size, priority);
++ if (skb) {
++ rfcomm_set_owner_w(skb, dev);
++ return skb;
++ }
++ }
++ return NULL;
++}
++
++/* ---- Device IOCTLs ---- */
++
++#define NOCAP_FLAGS ((1 << RFCOMM_REUSE_DLC) | (1 << RFCOMM_RELEASE_ONHUP))
++
++static int rfcomm_create_dev(struct sock *sk, unsigned long arg)
++{
++ struct rfcomm_dev_req req;
++ struct rfcomm_dlc *dlc;
++ int id;
++
++ if (copy_from_user(&req, (void *) arg, sizeof(req)))
++ return -EFAULT;
++
++ BT_DBG("sk %p dev_id %id flags 0x%x", sk, req.dev_id, req.flags);
++
++ if (req.flags != NOCAP_FLAGS && !capable(CAP_NET_ADMIN))
++ return -EPERM;
++
++ if (req.flags & (1 << RFCOMM_REUSE_DLC)) {
++ /* Socket must be connected */
++ if (sk->state != BT_CONNECTED)
++ return -EBADFD;
++
++ dlc = rfcomm_pi(sk)->dlc;
++ rfcomm_dlc_hold(dlc);
++ } else {
++ dlc = rfcomm_dlc_alloc(GFP_KERNEL);
++ if (!dlc)
++ return -ENOMEM;
++ }
++
++ id = rfcomm_dev_add(&req, dlc);
++ if (id < 0) {
++ rfcomm_dlc_put(dlc);
++ return id;
++ }
++
++ if (req.flags & (1 << RFCOMM_REUSE_DLC)) {
++ /* DLC is now used by device.
++ * Socket must be disconnected */
++ sk->state = BT_CLOSED;
++ }
++
++ return id;
++}
++
++static int rfcomm_release_dev(unsigned long arg)
++{
++ struct rfcomm_dev_req req;
++ struct rfcomm_dev *dev;
++
++ if (copy_from_user(&req, (void *) arg, sizeof(req)))
++ return -EFAULT;
++
++ BT_DBG("dev_id %id flags 0x%x", req.dev_id, req.flags);
++
++ if (!capable(CAP_NET_ADMIN))
++ return -EPERM;
++
++ if (!(dev = rfcomm_dev_get(req.dev_id)))
++ return -ENODEV;
++
++ if (req.flags & (1 << RFCOMM_HANGUP_NOW))
++ rfcomm_dlc_close(dev->dlc, 0);
++
++ rfcomm_dev_del(dev);
++ rfcomm_dev_put(dev);
++ return 0;
++}
++
++static int rfcomm_get_dev_list(unsigned long arg)
++{
++ struct rfcomm_dev_list_req *dl;
++ struct rfcomm_dev_info *di;
++ struct list_head *p;
++ int n = 0, size;
++ u16 dev_num;
++
++ BT_DBG("");
++
++ if (get_user(dev_num, (u16 *) arg))
++ return -EFAULT;
++
++ if (!dev_num)
++ return -EINVAL;
++
++ size = sizeof(*dl) + dev_num * sizeof(*di);
++
++ if (verify_area(VERIFY_WRITE, (void *)arg, size))
++ return -EFAULT;
++
++ if (!(dl = kmalloc(size, GFP_KERNEL)))
++ return -ENOMEM;
++
++ di = dl->dev_info;
++
++ read_lock_bh(&rfcomm_dev_lock);
++
++ list_for_each(p, &rfcomm_dev_list) {
++ struct rfcomm_dev *dev = list_entry(p, struct rfcomm_dev, list);
++ (di + n)->id = dev->id;
++ (di + n)->flags = dev->flags;
++ (di + n)->state = dev->dlc->state;
++ (di + n)->channel = dev->channel;
++ bacpy(&(di + n)->src, &dev->src);
++ bacpy(&(di + n)->dst, &dev->dst);
++ if (++n >= dev_num)
++ break;
++ }
++
++ read_unlock_bh(&rfcomm_dev_lock);
++
++ dl->dev_num = n;
++ size = sizeof(*dl) + n * sizeof(*di);
++
++ copy_to_user((void *) arg, dl, size);
++ kfree(dl);
++ return 0;
++}
++
++static int rfcomm_get_dev_info(unsigned long arg)
++{
++ struct rfcomm_dev *dev;
++ struct rfcomm_dev_info di;
++ int err = 0;
++
++ BT_DBG("");
++
++ if (copy_from_user(&di, (void *)arg, sizeof(di)))
++ return -EFAULT;
++
++ if (!(dev = rfcomm_dev_get(di.id)))
++ return -ENODEV;
++
++ di.flags = dev->flags;
++ di.channel = dev->channel;
++ di.state = dev->dlc->state;
++ bacpy(&di.src, &dev->src);
++ bacpy(&di.dst, &dev->dst);
++
++ if (copy_to_user((void *)arg, &di, sizeof(di)))
++ err = -EFAULT;
++
++ rfcomm_dev_put(dev);
++ return err;
++}
++
++int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, unsigned long arg)
++{
++ BT_DBG("cmd %d arg %ld", cmd, arg);
++
++ switch (cmd) {
++ case RFCOMMCREATEDEV:
++ return rfcomm_create_dev(sk, arg);
++
++ case RFCOMMRELEASEDEV:
++ return rfcomm_release_dev(arg);
++
++ case RFCOMMGETDEVLIST:
++ return rfcomm_get_dev_list(arg);
++
++ case RFCOMMGETDEVINFO:
++ return rfcomm_get_dev_info(arg);
++ }
++
++ return -EINVAL;
++}
++
++/* ---- DLC callbacks ---- */
++static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb)
++{
++ struct rfcomm_dev *dev = dlc->owner;
++ struct tty_struct *tty;
++
++ if (!dev || !(tty = dev->tty)) {
++ kfree_skb(skb);
++ return;
++ }
++
++ BT_DBG("dlc %p tty %p len %d", dlc, tty, skb->len);
++
++ if (test_bit(TTY_DONT_FLIP, &tty->flags)) {
++ register int i;
++ for (i = 0; i < skb->len; i++) {
++ if (tty->flip.count >= TTY_FLIPBUF_SIZE)
++ tty_flip_buffer_push(tty);
++
++ tty_insert_flip_char(tty, skb->data[i], 0);
++ }
++ tty_flip_buffer_push(tty);
++ } else
++ tty->ldisc.receive_buf(tty, skb->data, NULL, skb->len);
++
++ kfree_skb(skb);
++}
++
++static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err)
++{
++ struct rfcomm_dev *dev = dlc->owner;
++ if (!dev)
++ return;
++
++ BT_DBG("dlc %p dev %p err %d", dlc, dev, err);
++
++ dev->err = err;
++ wake_up_interruptible(&dev->wait);
++
++ if (dlc->state == BT_CLOSED) {
++ if (!dev->tty) {
++ if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags)) {
++ rfcomm_dev_hold(dev);
++ rfcomm_dev_del(dev);
++
++ /* We have to drop DLC lock here, otherwise
++ * rfcomm_dev_put() will dead lock if it's the last refference */
++ rfcomm_dlc_unlock(dlc);
++ rfcomm_dev_put(dev);
++ rfcomm_dlc_lock(dlc);
++ }
++ } else
++ tty_hangup(dev->tty);
++ }
++}
++
++static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig)
++{
++ struct rfcomm_dev *dev = dlc->owner;
++ if (!dev)
++ return;
++
++ BT_DBG("dlc %p dev %p v24_sig 0x%02x", dlc, dev, v24_sig);
++
++ dev->modem_status =
++ ((v24_sig & RFCOMM_V24_RTC) ? (TIOCM_DSR | TIOCM_DTR) : 0) |
++ ((v24_sig & RFCOMM_V24_RTR) ? (TIOCM_RTS | TIOCM_CTS) : 0) |
++ ((v24_sig & RFCOMM_V24_IC) ? TIOCM_RI : 0) |
++ ((v24_sig & RFCOMM_V24_DV) ? TIOCM_CD : 0);
++}
++
++/* ---- TTY functions ---- */
++static void rfcomm_tty_wakeup(unsigned long arg)
++{
++ struct rfcomm_dev *dev = (void *) arg;
++ struct tty_struct *tty = dev->tty;
++ if (!tty)
++ return;
++
++ BT_DBG("dev %p tty %p", dev, tty);
++
++ if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags) && tty->ldisc.write_wakeup)
++ (tty->ldisc.write_wakeup)(tty);
++
++ wake_up_interruptible(&tty->write_wait);
++#ifdef SERIAL_HAVE_POLL_WAIT
++ wake_up_interruptible(&tty->poll_wait);
++#endif
++}
++
++static int rfcomm_tty_open(struct tty_struct *tty, struct file *filp)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct rfcomm_dev *dev;
++ struct rfcomm_dlc *dlc;
++ int err, id;
++
++ id = MINOR(tty->device) - tty->driver.minor_start;
++
++ BT_DBG("tty %p id %d", tty, id);
++
++ dev = rfcomm_dev_get(id);
++ if (!dev)
++ return -ENODEV;
++
++ BT_DBG("dev %p dst %s channel %d opened %d", dev, batostr(&dev->dst), dev->channel, dev->opened);
++
++ if (dev->opened++ != 0)
++ return 0;
++
++ dlc = dev->dlc;
++
++ /* Attach TTY and open DLC */
++
++ rfcomm_dlc_lock(dlc);
++ tty->driver_data = dev;
++ dev->tty = tty;
++ rfcomm_dlc_unlock(dlc);
++ set_bit(RFCOMM_TTY_ATTACHED, &dev->flags);
++
++ err = rfcomm_dlc_open(dlc, &dev->src, &dev->dst, dev->channel);
++ if (err < 0)
++ return err;
++
++ /* Wait for DLC to connect */
++ add_wait_queue(&dev->wait, &wait);
++ while (1) {
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ if (dlc->state == BT_CLOSED) {
++ err = -dev->err;
++ break;
++ }
++
++ if (dlc->state == BT_CONNECTED)
++ break;
++
++ if (signal_pending(current)) {
++ err = -EINTR;
++ break;
++ }
++
++ schedule();
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&dev->wait, &wait);
++
++ return err;
++}
++
++static void rfcomm_tty_close(struct tty_struct *tty, struct file *filp)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ if (!dev)
++ return;
++
++ BT_DBG("tty %p dev %p dlc %p opened %d", tty, dev, dev->dlc, dev->opened);
++
++ if (--dev->opened == 0) {
++ /* Close DLC and dettach TTY */
++ rfcomm_dlc_close(dev->dlc, 0);
++
++ clear_bit(RFCOMM_TTY_ATTACHED, &dev->flags);
++ tasklet_kill(&dev->wakeup_task);
++
++ rfcomm_dlc_lock(dev->dlc);
++ tty->driver_data = NULL;
++ dev->tty = NULL;
++ rfcomm_dlc_unlock(dev->dlc);
++ }
++
++ rfcomm_dev_put(dev);
++}
++
++static int rfcomm_tty_write(struct tty_struct *tty, int from_user, const unsigned char *buf, int count)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ struct rfcomm_dlc *dlc = dev->dlc;
++ struct sk_buff *skb;
++ int err = 0, sent = 0, size;
++
++ BT_DBG("tty %p from_user %d count %d", tty, from_user, count);
++
++ while (count) {
++ size = min_t(uint, count, dlc->mtu);
++
++ if (from_user)
++ skb = rfcomm_wmalloc(dev, size + RFCOMM_SKB_RESERVE, 0, GFP_KERNEL);
++ else
++ skb = rfcomm_wmalloc(dev, size + RFCOMM_SKB_RESERVE, 0, GFP_ATOMIC);
++
++ if (!skb)
++ break;
++
++ skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
++
++ if (from_user)
++ copy_from_user(skb_put(skb, size), buf + sent, size);
++ else
++ memcpy(skb_put(skb, size), buf + sent, size);
++
++ if ((err = rfcomm_dlc_send(dlc, skb)) < 0) {
++ kfree_skb(skb);
++ break;
++ }
++
++ sent += size;
++ count -= size;
++ }
++
++ return sent ? sent : err;
++}
++
++static void rfcomm_tty_put_char(struct tty_struct *tty, unsigned char ch)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ struct rfcomm_dlc *dlc = dev->dlc;
++ struct sk_buff *skb;
++
++ BT_DBG("tty %p char %x", tty, ch);
++
++ skb = rfcomm_wmalloc(dev, 1 + RFCOMM_SKB_RESERVE, 1, GFP_ATOMIC);
++
++ if (!skb)
++ return;
++
++ skb_reserve(skb, RFCOMM_SKB_HEAD_RESERVE);
++
++ *(char *)skb_put(skb, 1) = ch;
++
++ if ((rfcomm_dlc_send(dlc, skb)) < 0)
++ kfree_skb(skb);
++}
++
++static int rfcomm_tty_write_room(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ int room;
++
++ BT_DBG("tty %p", tty);
++
++ room = rfcomm_room(dev->dlc) - atomic_read(&dev->wmem_alloc);
++ if (room < 0)
++ room = 0;
++
++ return room;
++}
++
++static int rfcomm_tty_set_modem_status(uint cmd, struct rfcomm_dlc *dlc, uint status)
++{
++ u8 v24_sig, mask;
++
++ BT_DBG("dlc %p cmd 0x%02x", dlc, cmd);
++
++ if (cmd == TIOCMSET)
++ v24_sig = 0;
++ else
++ rfcomm_dlc_get_modem_status(dlc, &v24_sig);
++
++ mask = ((status & TIOCM_DSR) ? RFCOMM_V24_RTC : 0) |
++ ((status & TIOCM_DTR) ? RFCOMM_V24_RTC : 0) |
++ ((status & TIOCM_RTS) ? RFCOMM_V24_RTR : 0) |
++ ((status & TIOCM_CTS) ? RFCOMM_V24_RTR : 0) |
++ ((status & TIOCM_RI) ? RFCOMM_V24_IC : 0) |
++ ((status & TIOCM_CD) ? RFCOMM_V24_DV : 0);
++
++ if (cmd == TIOCMBIC)
++ v24_sig &= ~mask;
++ else
++ v24_sig |= mask;
++
++ rfcomm_dlc_set_modem_status(dlc, v24_sig);
++ return 0;
++}
++
++static int rfcomm_tty_ioctl(struct tty_struct *tty, struct file *filp, unsigned int cmd, unsigned long arg)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ struct rfcomm_dlc *dlc = dev->dlc;
++ uint status;
++ int err;
++
++ BT_DBG("tty %p cmd 0x%02x", tty, cmd);
++
++ switch (cmd) {
++ case TCGETS:
++ BT_DBG("TCGETS is not supported");
++ return -ENOIOCTLCMD;
++
++ case TCSETS:
++ BT_DBG("TCSETS is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCMGET:
++ BT_DBG("TIOCMGET");
++
++ return put_user(dev->modem_status, (unsigned int *)arg);
++
++ case TIOCMSET: /* Turns on and off the lines as specified by the mask */
++ case TIOCMBIS: /* Turns on the lines as specified by the mask */
++ case TIOCMBIC: /* Turns off the lines as specified by the mask */
++ if ((err = get_user(status, (unsigned int *)arg)))
++ return err;
++ return rfcomm_tty_set_modem_status(cmd, dlc, status);
++
++ case TIOCMIWAIT:
++ BT_DBG("TIOCMIWAIT");
++ break;
++
++ case TIOCGICOUNT:
++ BT_DBG("TIOCGICOUNT");
++ break;
++
++ case TIOCGSERIAL:
++ BT_ERR("TIOCGSERIAL is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCSSERIAL:
++ BT_ERR("TIOCSSERIAL is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCSERGSTRUCT:
++ BT_ERR("TIOCSERGSTRUCT is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCSERGETLSR:
++ BT_ERR("TIOCSERGETLSR is not supported");
++ return -ENOIOCTLCMD;
++
++ case TIOCSERCONFIG:
++ BT_ERR("TIOCSERCONFIG is not supported");
++ return -ENOIOCTLCMD;
++
++ default:
++ return -ENOIOCTLCMD; /* ioctls which we must ignore */
++
++ }
++
++ return -ENOIOCTLCMD;
++}
++
++#define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
++
++static void rfcomm_tty_set_termios(struct tty_struct *tty, struct termios *old)
++{
++ BT_DBG("tty %p", tty);
++
++ if ((tty->termios->c_cflag == old->c_cflag) &&
++ (RELEVANT_IFLAG(tty->termios->c_iflag) == RELEVANT_IFLAG(old->c_iflag)))
++ return;
++
++ /* handle turning off CRTSCTS */
++ if ((old->c_cflag & CRTSCTS) && !(tty->termios->c_cflag & CRTSCTS)) {
++ BT_DBG("turning off CRTSCTS");
++ }
++}
++
++static void rfcomm_tty_throttle(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ rfcomm_dlc_throttle(dev->dlc);
++}
++
++static void rfcomm_tty_unthrottle(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ rfcomm_dlc_unthrottle(dev->dlc);
++}
++
++static int rfcomm_tty_chars_in_buffer(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ struct rfcomm_dlc *dlc = dev->dlc;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ if (skb_queue_len(&dlc->tx_queue))
++ return dlc->mtu;
++
++ return 0;
++}
++
++static void rfcomm_tty_flush_buffer(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ if (!dev)
++ return;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ skb_queue_purge(&dev->dlc->tx_queue);
++
++ if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags) && tty->ldisc.write_wakeup)
++ tty->ldisc.write_wakeup(tty);
++}
++
++static void rfcomm_tty_send_xchar(struct tty_struct *tty, char ch)
++{
++ BT_DBG("tty %p ch %c", tty, ch);
++}
++
++static void rfcomm_tty_wait_until_sent(struct tty_struct *tty, int timeout)
++{
++ BT_DBG("tty %p timeout %d", tty, timeout);
++}
++
++static void rfcomm_tty_hangup(struct tty_struct *tty)
++{
++ struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
++ if (!dev)
++ return;
++
++ BT_DBG("tty %p dev %p", tty, dev);
++
++ rfcomm_tty_flush_buffer(tty);
++
++ if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags))
++ rfcomm_dev_del(dev);
++}
++
++static int rfcomm_tty_read_proc(char *buf, char **start, off_t offset, int len, int *eof, void *unused)
++{
++ return 0;
++}
++
++/* ---- TTY structure ---- */
++static int rfcomm_tty_refcount; /* If we manage several devices */
++
++static struct tty_struct *rfcomm_tty_table[RFCOMM_TTY_PORTS];
++static struct termios *rfcomm_tty_termios[RFCOMM_TTY_PORTS];
++static struct termios *rfcomm_tty_termios_locked[RFCOMM_TTY_PORTS];
++
++static struct tty_driver rfcomm_tty_driver = {
++ magic: TTY_DRIVER_MAGIC,
++ driver_name: "rfcomm",
++#ifdef CONFIG_DEVFS_FS
++ name: "bluetooth/rfcomm/%d",
++#else
++ name: "rfcomm",
++#endif
++ major: RFCOMM_TTY_MAJOR,
++ minor_start: RFCOMM_TTY_MINOR,
++ num: RFCOMM_TTY_PORTS,
++ type: TTY_DRIVER_TYPE_SERIAL,
++ subtype: SERIAL_TYPE_NORMAL,
++ flags: TTY_DRIVER_REAL_RAW,
++
++ refcount: &rfcomm_tty_refcount,
++ table: rfcomm_tty_table,
++ termios: rfcomm_tty_termios,
++ termios_locked: rfcomm_tty_termios_locked,
++
++ open: rfcomm_tty_open,
++ close: rfcomm_tty_close,
++ put_char: rfcomm_tty_put_char,
++ write: rfcomm_tty_write,
++ write_room: rfcomm_tty_write_room,
++ chars_in_buffer: rfcomm_tty_chars_in_buffer,
++ flush_buffer: rfcomm_tty_flush_buffer,
++ ioctl: rfcomm_tty_ioctl,
++ throttle: rfcomm_tty_throttle,
++ unthrottle: rfcomm_tty_unthrottle,
++ set_termios: rfcomm_tty_set_termios,
++ send_xchar: rfcomm_tty_send_xchar,
++ stop: NULL,
++ start: NULL,
++ hangup: rfcomm_tty_hangup,
++ wait_until_sent: rfcomm_tty_wait_until_sent,
++ read_proc: rfcomm_tty_read_proc,
++};
++
++int rfcomm_init_ttys(void)
++{
++ int i;
++
++ /* Initalize our global data */
++ for (i = 0; i < RFCOMM_TTY_PORTS; i++)
++ rfcomm_tty_table[i] = NULL;
++
++ /* Register the TTY driver */
++ rfcomm_tty_driver.init_termios = tty_std_termios;
++ rfcomm_tty_driver.init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
++ rfcomm_tty_driver.flags = TTY_DRIVER_REAL_RAW;
++
++ if (tty_register_driver(&rfcomm_tty_driver)) {
++ BT_ERR("Can't register RFCOMM TTY driver");
++ return -1;
++ }
++
++ return 0;
++}
++
++void rfcomm_cleanup_ttys(void)
++{
++ tty_unregister_driver(&rfcomm_tty_driver);
++ return;
++}
+diff -urN linux-2.4.18/net/bluetooth/sco.c linux-2.4.18-mh9/net/bluetooth/sco.c
+--- linux-2.4.18/net/bluetooth/sco.c Thu Jan 1 01:00:00 1970
++++ linux-2.4.18-mh9/net/bluetooth/sco.c Mon Aug 25 18:38:12 2003
+@@ -0,0 +1,1019 @@
++/*
++ BlueZ - Bluetooth protocol stack for Linux
++ Copyright (C) 2000-2001 Qualcomm Incorporated
++
++ Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
++
++ 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;
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
++ IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
++ CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++
++ ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
++ COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
++ SOFTWARE IS DISCLAIMED.
++*/
++
++/*
++ * BlueZ SCO sockets.
++ *
++ * $Id: sco.c,v 1.4 2002/07/22 20:32:54 maxk Exp $
++ */
++#define VERSION "0.3"
++
++#include <linux/config.h>
++#include <linux/module.h>
++
++#include <linux/types.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/major.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/poll.h>
++#include <linux/fcntl.h>
++#include <linux/init.h>
++#include <linux/skbuff.h>
++#include <linux/interrupt.h>
++#include <linux/socket.h>
++#include <linux/skbuff.h>
++#include <linux/proc_fs.h>
++#include <linux/list.h>
++#include <net/sock.h>
++
++#include <asm/system.h>
++#include <asm/uaccess.h>
++
++#include <net/bluetooth/bluetooth.h>
++#include <net/bluetooth/hci_core.h>
++#include <net/bluetooth/sco.h>
++
++#ifndef SCO_DEBUG
++#undef BT_DBG
++#define BT_DBG( A... )
++#endif
++
++static struct proto_ops sco_sock_ops;
++
++static struct bluez_sock_list sco_sk_list = {
++ lock: RW_LOCK_UNLOCKED
++};
++
++static inline int sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent);
++static void sco_chan_del(struct sock *sk, int err);
++static inline struct sock * sco_chan_get(struct sco_conn *conn);
++
++static int sco_conn_del(struct hci_conn *conn, int err);
++
++static void sco_sock_close(struct sock *sk);
++static void sco_sock_kill(struct sock *sk);
++
++/* ----- SCO timers ------ */
++static void sco_sock_timeout(unsigned long arg)
++{
++ struct sock *sk = (struct sock *) arg;
++
++ BT_DBG("sock %p state %d", sk, sk->state);
++
++ bh_lock_sock(sk);
++ sk->err = ETIMEDOUT;
++ sk->state_change(sk);
++ bh_unlock_sock(sk);
++
++ sco_sock_kill(sk);
++ sock_put(sk);
++}
++
++static void sco_sock_set_timer(struct sock *sk, long timeout)
++{
++ BT_DBG("sock %p state %d timeout %ld", sk, sk->state, timeout);
++
++ if (!mod_timer(&sk->timer, jiffies + timeout))
++ sock_hold(sk);
++}
++
++static void sco_sock_clear_timer(struct sock *sk)
++{
++ BT_DBG("sock %p state %d", sk, sk->state);
++
++ if (timer_pending(&sk->timer) && del_timer(&sk->timer))
++ __sock_put(sk);
++}
++
++static void sco_sock_init_timer(struct sock *sk)
++{
++ init_timer(&sk->timer);
++ sk->timer.function = sco_sock_timeout;
++ sk->timer.data = (unsigned long)sk;
++}
++
++/* -------- SCO connections --------- */
++static struct sco_conn *sco_conn_add(struct hci_conn *hcon, __u8 status)
++{
++ struct hci_dev *hdev = hcon->hdev;
++ struct sco_conn *conn;
++
++ if ((conn = hcon->sco_data))
++ return conn;
++
++ if (status)
++ return conn;
++
++ if (!(conn = kmalloc(sizeof(struct sco_conn), GFP_ATOMIC)))
++ return NULL;
++ memset(conn, 0, sizeof(struct sco_conn));
++
++ spin_lock_init(&conn->lock);
++
++ hcon->sco_data = conn;
++ conn->hcon = hcon;
++
++ conn->src = &hdev->bdaddr;
++ conn->dst = &hcon->dst;
++
++ if (hdev->sco_mtu > 0)
++ conn->mtu = hdev->sco_mtu;
++ else
++ conn->mtu = 60;
++
++ BT_DBG("hcon %p conn %p", hcon, conn);
++
++ MOD_INC_USE_COUNT;
++ return conn;
++}
++
++static int sco_conn_del(struct hci_conn *hcon, int err)
++{
++ struct sco_conn *conn;
++ struct sock *sk;
++
++ if (!(conn = hcon->sco_data))
++ return 0;
++
++ BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
++
++ /* Kill socket */
++ if ((sk = sco_chan_get(conn))) {
++ bh_lock_sock(sk);
++ sco_sock_clear_timer(sk);
++ sco_chan_del(sk, err);
++ bh_unlock_sock(sk);
++ sco_sock_kill(sk);
++ }
++
++ hcon->sco_data = NULL;
++ kfree(conn);
++
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++int sco_connect(struct sock *sk)
++{
++ bdaddr_t *src = &bluez_pi(sk)->src;
++ bdaddr_t *dst = &bluez_pi(sk)->dst;
++ struct sco_conn *conn;
++ struct hci_conn *hcon;
++ struct hci_dev *hdev;
++ int err = 0;
++
++ BT_DBG("%s -> %s", batostr(src), batostr(dst));
++
++ if (!(hdev = hci_get_route(dst, src)))
++ return -EHOSTUNREACH;
++
++ hci_dev_lock_bh(hdev);
++
++ err = -ENOMEM;
++
++ hcon = hci_connect(hdev, SCO_LINK, dst);
++ if (!hcon)
++ goto done;
++
++ conn = sco_conn_add(hcon, 0);
++ if (!conn) {
++ hci_conn_put(hcon);
++ goto done;
++ }
++
++ /* Update source addr of the socket */
++ bacpy(src, conn->src);
++
++ err = sco_chan_add(conn, sk, NULL);
++ if (err)
++ goto done;
++
++ if (hcon->state == BT_CONNECTED) {
++ sco_sock_clear_timer(sk);
++ sk->state = BT_CONNECTED;
++ } else {
++ sk->state = BT_CONNECT;
++ sco_sock_set_timer(sk, sk->sndtimeo);
++ }
++done:
++ hci_dev_unlock_bh(hdev);
++ hci_dev_put(hdev);
++ return err;
++}
++
++static inline int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
++{
++ struct sco_conn *conn = sco_pi(sk)->conn;
++ struct sk_buff *skb;
++ int err, count;
++
++ /* Check outgoing MTU */
++ if (len > conn->mtu)
++ return -EINVAL;
++
++ BT_DBG("sk %p len %d", sk, len);
++
++ count = MIN(conn->mtu, len);
++ if (!(skb = bluez_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err)))
++ return err;
++
++ if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count)) {
++ err = -EFAULT;
++ goto fail;
++ }
++
++ if ((err = hci_send_sco(conn->hcon, skb)) < 0)
++ goto fail;
++
++ return count;
++
++fail:
++ kfree_skb(skb);
++ return err;
++}
++
++static inline void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
++{
++ struct sock *sk = sco_chan_get(conn);
++
++ if (!sk)
++ goto drop;
++
++ BT_DBG("sk %p len %d", sk, skb->len);
++
++ if (sk->state != BT_CONNECTED)
++ goto drop;
++
++ if (!sock_queue_rcv_skb(sk, skb))
++ return;
++
++drop:
++ kfree_skb(skb);
++ return;
++}
++
++/* -------- Socket interface ---------- */
++static struct sock *__sco_get_sock_by_addr(bdaddr_t *ba)
++{
++ struct sock *sk;
++
++ for (sk = sco_sk_list.head; sk; sk = sk->next) {
++ if (!bacmp(&bluez_pi(sk)->src, ba))
++ break;
++ }
++
++ return sk;
++}
++
++/* Find socket listening on source bdaddr.
++ * Returns closest match.
++ */
++static struct sock *sco_get_sock_listen(bdaddr_t *src)
++{
++ struct sock *sk, *sk1 = NULL;
++
++ read_lock(&sco_sk_list.lock);
++
++ for (sk = sco_sk_list.head; sk; sk = sk->next) {
++ if (sk->state != BT_LISTEN)
++ continue;
++
++ /* Exact match. */
++ if (!bacmp(&bluez_pi(sk)->src, src))
++ break;
++
++ /* Closest match */
++ if (!bacmp(&bluez_pi(sk)->src, BDADDR_ANY))
++ sk1 = sk;
++ }
++
++ read_unlock(&sco_sk_list.lock);
++
++ return sk ? sk : sk1;
++}
++
++static void sco_sock_destruct(struct sock *sk)
++{
++ BT_DBG("sk %p", sk);
++
++ skb_queue_purge(&sk->receive_queue);
++ skb_queue_purge(&sk->write_queue);
++
++ MOD_DEC_USE_COUNT;
++}
++
++static void sco_sock_cleanup_listen(struct sock *parent)
++{
++ struct sock *sk;
++
++ BT_DBG("parent %p", parent);
++
++ /* Close not yet accepted channels */
++ while ((sk = bluez_accept_dequeue(parent, NULL))) {
++ sco_sock_close(sk);
++ sco_sock_kill(sk);
++ }
++
++ parent->state = BT_CLOSED;
++ parent->zapped = 1;
++}
++
++/* Kill socket (only if zapped and orphan)
++ * Must be called on unlocked socket.
++ */
++static void sco_sock_kill(struct sock *sk)
++{
++ if (!sk->zapped || sk->socket)
++ return;
++
++ BT_DBG("sk %p state %d", sk, sk->state);
++
++ /* Kill poor orphan */
++ bluez_sock_unlink(&sco_sk_list, sk);
++ sk->dead = 1;
++ sock_put(sk);
++}
++
++/* Close socket.
++ * Must be called on unlocked socket.
++ */
++static void sco_sock_close(struct sock *sk)
++{
++ struct sco_conn *conn;
++
++ sco_sock_clear_timer(sk);
++
++ lock_sock(sk);
++
++ conn = sco_pi(sk)->conn;
++
++ BT_DBG("sk %p state %d conn %p socket %p", sk, sk->state, conn, sk->socket);
++
++ switch (sk->state) {
++ case BT_LISTEN:
++ sco_sock_cleanup_listen(sk);
++ break;
++
++ case BT_CONNECTED:
++ case BT_CONFIG:
++ case BT_CONNECT:
++ case BT_DISCONN:
++ sco_chan_del(sk, ECONNRESET);
++ break;
++
++ default:
++ sk->zapped = 1;
++ break;
++ };
++
++ release_sock(sk);
++}
++
++static void sco_sock_init(struct sock *sk, struct sock *parent)
++{
++ BT_DBG("sk %p", sk);
++
++ if (parent)
++ sk->type = parent->type;
++}
++
++static struct sock *sco_sock_alloc(struct socket *sock, int proto, int prio)
++{
++ struct sock *sk;
++
++ if (!(sk = sk_alloc(PF_BLUETOOTH, prio, 1)))
++ return NULL;
++
++ bluez_sock_init(sock, sk);
++
++ sk->zapped = 0;
++
++ sk->destruct = sco_sock_destruct;
++ sk->sndtimeo = SCO_CONN_TIMEOUT;
++
++ sk->protocol = proto;
++ sk->state = BT_OPEN;
++
++ sco_sock_init_timer(sk);
++
++ bluez_sock_link(&sco_sk_list, sk);
++
++ MOD_INC_USE_COUNT;
++ return sk;
++}
++
++static int sco_sock_create(struct socket *sock, int protocol)
++{
++ struct sock *sk;
++
++ BT_DBG("sock %p", sock);
++
++ sock->state = SS_UNCONNECTED;
++
++ if (sock->type != SOCK_SEQPACKET)
++ return -ESOCKTNOSUPPORT;
++
++ sock->ops = &sco_sock_ops;
++
++ if (!(sk = sco_sock_alloc(sock, protocol, GFP_KERNEL)))
++ return -ENOMEM;
++
++ sco_sock_init(sk, NULL);
++ return 0;
++}
++
++static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
++{
++ struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
++ struct sock *sk = sock->sk;
++ bdaddr_t *src = &sa->sco_bdaddr;
++ int err = 0;
++
++ BT_DBG("sk %p %s", sk, batostr(&sa->sco_bdaddr));
++
++ if (!addr || addr->sa_family != AF_BLUETOOTH)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_OPEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ write_lock_bh(&sco_sk_list.lock);
++
++ if (bacmp(src, BDADDR_ANY) && __sco_get_sock_by_addr(src)) {
++ err = -EADDRINUSE;
++ } else {
++ /* Save source address */
++ bacpy(&bluez_pi(sk)->src, &sa->sco_bdaddr);
++ sk->state = BT_BOUND;
++ }
++
++ write_unlock_bh(&sco_sk_list.lock);
++
++done:
++ release_sock(sk);
++
++ return err;
++}
++
++static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
++{
++ struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++
++ BT_DBG("sk %p", sk);
++
++ if (addr->sa_family != AF_BLUETOOTH || alen < sizeof(struct sockaddr_sco))
++ return -EINVAL;
++
++ if (sk->state != BT_OPEN && sk->state != BT_BOUND)
++ return -EBADFD;
++
++ if (sk->type != SOCK_SEQPACKET)
++ return -EINVAL;
++
++ lock_sock(sk);
++
++ /* Set destination address and psm */
++ bacpy(&bluez_pi(sk)->dst, &sa->sco_bdaddr);
++
++ if ((err = sco_connect(sk)))
++ goto done;
++
++ err = bluez_sock_wait_state(sk, BT_CONNECTED,
++ sock_sndtimeo(sk, flags & O_NONBLOCK));
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++int sco_sock_listen(struct socket *sock, int backlog)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p backlog %d", sk, backlog);
++
++ lock_sock(sk);
++
++ if (sk->state != BT_BOUND || sock->type != SOCK_SEQPACKET) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ sk->max_ack_backlog = backlog;
++ sk->ack_backlog = 0;
++ sk->state = BT_LISTEN;
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++int sco_sock_accept(struct socket *sock, struct socket *newsock, int flags)
++{
++ DECLARE_WAITQUEUE(wait, current);
++ struct sock *sk = sock->sk, *ch;
++ long timeo;
++ int err = 0;
++
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ goto done;
++ }
++
++ timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
++
++ BT_DBG("sk %p timeo %ld", sk, timeo);
++
++ /* Wait for an incoming connection. (wake-one). */
++ add_wait_queue_exclusive(sk->sleep, &wait);
++ while (!(ch = bluez_accept_dequeue(sk, newsock))) {
++ set_current_state(TASK_INTERRUPTIBLE);
++ if (!timeo) {
++ err = -EAGAIN;
++ break;
++ }
++
++ release_sock(sk);
++ timeo = schedule_timeout(timeo);
++ lock_sock(sk);
++
++ if (sk->state != BT_LISTEN) {
++ err = -EBADFD;
++ break;
++ }
++
++ if (signal_pending(current)) {
++ err = sock_intr_errno(timeo);
++ break;
++ }
++ }
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(sk->sleep, &wait);
++
++ if (err)
++ goto done;
++
++ newsock->state = SS_CONNECTED;
++
++ BT_DBG("new socket %p", ch);
++
++done:
++ release_sock(sk);
++ return err;
++}
++
++static int sco_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
++{
++ struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
++ struct sock *sk = sock->sk;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ addr->sa_family = AF_BLUETOOTH;
++ *len = sizeof(struct sockaddr_sco);
++
++ if (peer)
++ bacpy(&sa->sco_bdaddr, &bluez_pi(sk)->dst);
++ else
++ bacpy(&sa->sco_bdaddr, &bluez_pi(sk)->src);
++
++ return 0;
++}
++
++static int sco_sock_sendmsg(struct socket *sock, struct msghdr *msg, int len, struct scm_cookie *scm)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (sk->err)
++ return sock_error(sk);
++
++ if (msg->msg_flags & MSG_OOB)
++ return -EOPNOTSUPP;
++
++ lock_sock(sk);
++
++ if (sk->state == BT_CONNECTED)
++ err = sco_send_frame(sk, msg, len);
++ else
++ err = -ENOTCONN;
++
++ release_sock(sk);
++ return err;
++}
++
++int sco_sock_setsockopt(struct socket *sock, int level, int optname, char *optval, int optlen)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ lock_sock(sk);
++
++ switch (optname) {
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ };
++
++ release_sock(sk);
++ return err;
++}
++
++int sco_sock_getsockopt(struct socket *sock, int level, int optname, char *optval, int *optlen)
++{
++ struct sock *sk = sock->sk;
++ struct sco_options opts;
++ struct sco_conninfo cinfo;
++ int len, err = 0;
++
++ BT_DBG("sk %p", sk);
++
++ if (get_user(len, optlen))
++ return -EFAULT;
++
++ lock_sock(sk);
++
++ switch (optname) {
++ case SCO_OPTIONS:
++ if (sk->state != BT_CONNECTED) {
++ err = -ENOTCONN;
++ break;
++ }
++
++ opts.mtu = sco_pi(sk)->conn->mtu;
++
++ BT_DBG("mtu %d", opts.mtu);
++
++ len = MIN(len, sizeof(opts));
++ if (copy_to_user(optval, (char *)&opts, len))
++ err = -EFAULT;
++
++ break;
++
++ case SCO_CONNINFO:
++ if (sk->state != BT_CONNECTED) {
++ err = -ENOTCONN;
++ break;
++ }
++
++ cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
++
++ len = MIN(len, sizeof(cinfo));
++ if (copy_to_user(optval, (char *)&cinfo, len))
++ err = -EFAULT;
++
++ break;
++
++ default:
++ err = -ENOPROTOOPT;
++ break;
++ };
++
++ release_sock(sk);
++ return err;
++}
++
++static int sco_sock_release(struct socket *sock)
++{
++ struct sock *sk = sock->sk;
++ int err = 0;
++
++ BT_DBG("sock %p, sk %p", sock, sk);
++
++ if (!sk)
++ return 0;
++
++ sco_sock_close(sk);
++ if (sk->linger) {
++ lock_sock(sk);
++ err = bluez_sock_wait_state(sk, BT_CLOSED, sk->lingertime);
++ release_sock(sk);
++ }
++
++ sock_orphan(sk);
++ sco_sock_kill(sk);
++ return err;
++}
++
++static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
++{
++ BT_DBG("conn %p", conn);
++
++ sco_pi(sk)->conn = conn;
++ conn->sk = sk;
++
++ if (parent)
++ bluez_accept_enqueue(parent, sk);
++}
++
++static inline int sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
++{
++ int err = 0;
++
++ sco_conn_lock(conn);
++ if (conn->sk) {
++ err = -EBUSY;
++ } else {
++ __sco_chan_add(conn, sk, parent);
++ }
++ sco_conn_unlock(conn);
++ return err;
++}
++
++static inline struct sock * sco_chan_get(struct sco_conn *conn)
++{
++ struct sock *sk = NULL;
++ sco_conn_lock(conn);
++ sk = conn->sk;
++ sco_conn_unlock(conn);
++ return sk;
++}
++
++/* Delete channel.
++ * Must be called on the locked socket. */
++static void sco_chan_del(struct sock *sk, int err)
++{
++ struct sco_conn *conn;
++
++ conn = sco_pi(sk)->conn;
++
++ BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
++
++ if (conn) {
++ sco_conn_lock(conn);
++ conn->sk = NULL;
++ sco_pi(sk)->conn = NULL;
++ sco_conn_unlock(conn);
++ hci_conn_put(conn->hcon);
++ }
++
++ sk->state = BT_CLOSED;
++ sk->err = err;
++ sk->state_change(sk);
++
++ sk->zapped = 1;
++}
++
++static void sco_conn_ready(struct sco_conn *conn)
++{
++ struct sock *parent, *sk;
++
++ BT_DBG("conn %p", conn);
++
++ sco_conn_lock(conn);
++
++ if ((sk = conn->sk)) {
++ sco_sock_clear_timer(sk);
++ bh_lock_sock(sk);
++ sk->state = BT_CONNECTED;
++ sk->state_change(sk);
++ bh_unlock_sock(sk);
++ } else {
++ parent = sco_get_sock_listen(conn->src);
++ if (!parent)
++ goto done;
++
++ bh_lock_sock(parent);
++
++ sk = sco_sock_alloc(NULL, BTPROTO_SCO, GFP_ATOMIC);
++ if (!sk) {
++ bh_unlock_sock(parent);
++ goto done;
++ }
++
++ sco_sock_init(sk, parent);
++
++ bacpy(&bluez_pi(sk)->src, conn->src);
++ bacpy(&bluez_pi(sk)->dst, conn->dst);
++
++ hci_conn_hold(conn->hcon);
++ __sco_chan_add(conn, sk, parent);
++
++ sk->state = BT_CONNECTED;
++
++ /* Wake up parent */
++ parent->data_ready(parent, 1);
++
++ bh_unlock_sock(parent);
++ }
++
++done:
++ sco_conn_unlock(conn);
++}
++
++/* ----- SCO interface with lower layer (HCI) ----- */
++int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
++{
++ BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
++
++ /* Always accept connection */
++ return HCI_LM_ACCEPT;
++}
++
++int sco_connect_cfm(struct hci_conn *hcon, __u8 status)
++{
++ BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
++
++ if (hcon->type != SCO_LINK)
++ return 0;
++
++ if (!status) {
++ struct sco_conn *conn;
++
++ conn = sco_conn_add(hcon, status);
++ if (conn)
++ sco_conn_ready(conn);
++ } else
++ sco_conn_del(hcon, bterr(status));
++
++ return 0;
++}
++
++int sco_disconn_ind(struct hci_conn *hcon, __u8 reason)
++{
++ BT_DBG("hcon %p reason %d", hcon, reason);
++
++ if (hcon->type != SCO_LINK)
++ return 0;
++
++ sco_conn_del(hcon, bterr(reason));
++ return 0;
++}
++
++int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
++{
++ struct sco_conn *conn = hcon->sco_data;
++
++ if (!conn)
++ goto drop;
++
++ BT_DBG("conn %p len %d", conn, skb->len);
++
++ if (skb->len) {
++ sco_recv_frame(conn, skb);
++ return 0;
++ }
++
++drop:
++ kfree_skb(skb);
++ return 0;
++}
++
++/* ----- Proc fs support ------ */
++static int sco_sock_dump(char *buf, struct bluez_sock_list *list)
++{
++ struct sco_pinfo *pi;
++ struct sock *sk;
++ char *ptr = buf;
++
++ write_lock_bh(&list->lock);
++
++ for (sk = list->head; sk; sk = sk->next) {
++ pi = sco_pi(sk);
++ ptr += sprintf(ptr, "%s %s %d\n",
++ batostr(&bluez_pi(sk)->src), batostr(&bluez_pi(sk)->dst),
++ sk->state);
++ }
++
++ write_unlock_bh(&list->lock);
++
++ ptr += sprintf(ptr, "\n");
++
++ return ptr - buf;
++}
++
++static int sco_read_proc(char *buf, char **start, off_t offset, int count, int *eof, void *priv)
++{
++ char *ptr = buf;
++ int len;
++
++ BT_DBG("count %d, offset %ld", count, offset);
++
++ ptr += sco_sock_dump(ptr, &sco_sk_list);
++ len = ptr - buf;
++
++ if (len <= count + offset)
++ *eof = 1;
++
++ *start = buf + offset;
++ len -= offset;
++
++ if (len > count)
++ len = count;
++ if (len < 0)
++ len = 0;
++
++ return len;
++}
++
++static struct proto_ops sco_sock_ops = {
++ family: PF_BLUETOOTH,
++ release: sco_sock_release,
++ bind: sco_sock_bind,
++ connect: sco_sock_connect,
++ listen: sco_sock_listen,
++ accept: sco_sock_accept,
++ getname: sco_sock_getname,
++ sendmsg: sco_sock_sendmsg,
++ recvmsg: bluez_sock_recvmsg,
++ poll: bluez_sock_poll,
++ socketpair: sock_no_socketpair,
++ ioctl: sock_no_ioctl,
++ shutdown: sock_no_shutdown,
++ setsockopt: sco_sock_setsockopt,
++ getsockopt: sco_sock_getsockopt,
++ mmap: sock_no_mmap
++};
++
++static struct net_proto_family sco_sock_family_ops = {
++ family: PF_BLUETOOTH,
++ create: sco_sock_create
++};
++
++static struct hci_proto sco_hci_proto = {
++ name: "SCO",
++ id: HCI_PROTO_SCO,
++ connect_ind: sco_connect_ind,
++ connect_cfm: sco_connect_cfm,
++ disconn_ind: sco_disconn_ind,
++ recv_scodata: sco_recv_scodata,
++};
++
++int __init sco_init(void)
++{
++ int err;
++
++ if ((err = bluez_sock_register(BTPROTO_SCO, &sco_sock_family_ops))) {
++ BT_ERR("Can't register SCO socket layer");
++ return err;
++ }
++
++ if ((err = hci_register_proto(&sco_hci_proto))) {
++ BT_ERR("Can't register SCO protocol");
++ return err;
++ }
++
++ create_proc_read_entry("bluetooth/sco", 0, 0, sco_read_proc, NULL);
++
++ BT_INFO("BlueZ SCO ver %s Copyright (C) 2000,2001 Qualcomm Inc", VERSION);
++ BT_INFO("Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>");
++ return 0;
++}
++
++void sco_cleanup(void)
++{
++ int err;
++
++ remove_proc_entry("bluetooth/sco", NULL);
++
++ /* Unregister socket, protocol and notifier */
++ if ((err = bluez_sock_unregister(BTPROTO_SCO)))
++ BT_ERR("Can't unregister SCO socket layer %d", err);
++
++ if ((err = hci_unregister_proto(&sco_hci_proto)))
++ BT_ERR("Can't unregister SCO protocol %d", err);
++}
++
++module_init(sco_init);
++module_exit(sco_cleanup);
++
++MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>");
++MODULE_DESCRIPTION("BlueZ SCO ver " VERSION);
++MODULE_LICENSE("GPL");
+diff -urN linux-2.4.18/net/bluetooth/syms.c linux-2.4.18-mh9/net/bluetooth/syms.c
+--- linux-2.4.18/net/bluetooth/syms.c Fri Sep 7 18:28:38 2001
++++ linux-2.4.18-mh9/net/bluetooth/syms.c Mon Aug 25 18:38:12 2003
+@@ -25,7 +25,7 @@
+ /*
+ * BlueZ symbols.
+ *
+- * $Id: syms.c,v 1.1 2001/07/12 19:31:24 maxk Exp $
++ * $Id: syms.c,v 1.1 2002/03/08 21:06:59 maxk Exp $
+ */
+
+ #include <linux/config.h>
+@@ -39,25 +39,28 @@
+ #include <linux/socket.h>
+
+ #include <net/bluetooth/bluetooth.h>
+-#include <net/bluetooth/bluez.h>
+ #include <net/bluetooth/hci_core.h>
+
+ /* HCI Core */
+ EXPORT_SYMBOL(hci_register_dev);
+ EXPORT_SYMBOL(hci_unregister_dev);
++EXPORT_SYMBOL(hci_suspend_dev);
++EXPORT_SYMBOL(hci_resume_dev);
++
+ EXPORT_SYMBOL(hci_register_proto);
+ EXPORT_SYMBOL(hci_unregister_proto);
+-EXPORT_SYMBOL(hci_register_notifier);
+-EXPORT_SYMBOL(hci_unregister_notifier);
+
++EXPORT_SYMBOL(hci_get_route);
+ EXPORT_SYMBOL(hci_connect);
+-EXPORT_SYMBOL(hci_disconnect);
+ EXPORT_SYMBOL(hci_dev_get);
++EXPORT_SYMBOL(hci_conn_auth);
++EXPORT_SYMBOL(hci_conn_encrypt);
+
+ EXPORT_SYMBOL(hci_recv_frame);
+ EXPORT_SYMBOL(hci_send_acl);
+ EXPORT_SYMBOL(hci_send_sco);
+-EXPORT_SYMBOL(hci_send_raw);
++EXPORT_SYMBOL(hci_send_cmd);
++EXPORT_SYMBOL(hci_si_event);
+
+ /* BlueZ lib */
+ EXPORT_SYMBOL(bluez_dump);
+@@ -68,5 +71,11 @@
+ /* BlueZ sockets */
+ EXPORT_SYMBOL(bluez_sock_register);
+ EXPORT_SYMBOL(bluez_sock_unregister);
++EXPORT_SYMBOL(bluez_sock_init);
+ EXPORT_SYMBOL(bluez_sock_link);
+ EXPORT_SYMBOL(bluez_sock_unlink);
++EXPORT_SYMBOL(bluez_sock_recvmsg);
++EXPORT_SYMBOL(bluez_sock_poll);
++EXPORT_SYMBOL(bluez_accept_enqueue);
++EXPORT_SYMBOL(bluez_accept_dequeue);
++EXPORT_SYMBOL(bluez_sock_wait_state);
diff --git a/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/cacko.patch b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/cacko.patch
new file mode 100644
index 0000000000..9677295c45
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/cacko.patch
@@ -0,0 +1,38963 @@
+diff -Nur linux/arch/arm/def-configs/collie-jffs2 /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/arch/arm/def-configs/collie-jffs2
+--- linux/arch/arm/def-configs/collie-jffs2 1970-01-01 07:00:00.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/arch/arm/def-configs/collie-jffs2 2003-06-23 01:47:03.000000000 +0700
+@@ -0,0 +1,917 @@
++#
++# Automatically generated make config: don't edit
++#
++CONFIG_ARM=y
++# CONFIG_EISA is not set
++# CONFIG_SBUS is not set
++# CONFIG_MCA is not set
++CONFIG_UID16=y
++# CONFIG_SMP is not set
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++# CONFIG_OBSOLETE is not set
++
++#
++# Loadable module support
++#
++CONFIG_MODULES=y
++# CONFIG_MODVERSIONS is not set
++CONFIG_KMOD=y
++
++#
++# System Type
++#
++# CONFIG_ARCH_ARCA5K is not set
++# CONFIG_ARCH_CLPS7500 is not set
++# CONFIG_ARCH_CO285 is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_FOOTBRIDGE is not set
++# CONFIG_ARCH_INTEGRATOR is not set
++# CONFIG_ARCH_RPC is not set
++CONFIG_ARCH_SA1100=y
++# CONFIG_ARCH_CLPS711X is not set
++# CONFIG_ARCH_ANAKIN is not set
++
++#
++# Archimedes/A5000 Implementations
++#
++
++#
++# Archimedes/A5000 Implementations (select only ONE)
++#
++# CONFIG_ARCH_ARC is not set
++# CONFIG_ARCH_A5K is not set
++
++#
++# Footbridge Implementations
++#
++# CONFIG_ARCH_CATS is not set
++# CONFIG_ARCH_PERSONAL_SERVER is not set
++# CONFIG_ARCH_EBSA285_ADDIN is not set
++# CONFIG_ARCH_EBSA285_HOST is not set
++# CONFIG_ARCH_NETWINDER is not set
++
++#
++# SA11x0 Implementations
++#
++# CONFIG_SA1100_ASSABET is not set
++# CONFIG_ASSABET_NEPONSET is not set
++# CONFIG_SA1100_BRUTUS is not set
++# CONFIG_SA1100_CERF is not set
++CONFIG_SA1100_COLLIE=y
++CONFIG_LOCOMO=y
++# CONFIG_COLLIE_TS is not set
++# CONFIG_COLLIE_TR0 is not set
++# CONFIG_COLLIE_TR1 is not set
++# CONFIG_COLLIE_DEV is not set
++# CONFIG_SA1100_BITSY is not set
++# CONFIG_SA1100_EXTENEX1 is not set
++# CONFIG_SA1100_FLEXANET is not set
++# CONFIG_SA1100_FREEBIRD is not set
++# CONFIG_SA1100_GRAPHICSCLIENT is not set
++# CONFIG_SA1100_JORNADA720 is not set
++# CONFIG_SA1100_HUW_WEBPANEL is not set
++# CONFIG_SA1100_ITSY is not set
++# CONFIG_SA1100_LART is not set
++# CONFIG_SA1100_NANOENGINE is not set
++# CONFIG_SA1100_OMNIMETER is not set
++# CONFIG_SA1100_PANGOLIN is not set
++# CONFIG_SA1100_PLEB is not set
++# CONFIG_SA1100_SHERMAN is not set
++# CONFIG_SA1100_PFS168 is not set
++# CONFIG_SA1100_VICTOR is not set
++# CONFIG_SA1100_XP860 is not set
++# CONFIG_SA1100_YOPY is not set
++# CONFIG_SA1100_USB is not set
++# CONFIG_SA1100_USB_NETLINK is not set
++# CONFIG_SA1100_USB_CHAR is not set
++
++#
++# LinkUp 7200/7205/7210 Implementations
++#
++# CONFIG_L7205SDB is not set
++# CONFIG_IRIS_16MB is not set
++# CONFIG_IRIS_32MB is not set
++# CONFIG_NO_FLASH_BOOT_PARAM is not set
++# CONFIG_IRIS is not set
++
++#
++# CLPS711X/EP721X Implementations
++#
++# CONFIG_ARCH_P720T is not set
++# CONFIG_ARCH_ACORN is not set
++# CONFIG_FOOTBRIDGE is not set
++# CONFIG_FOOTBRIDGE_HOST is not set
++# CONFIG_FOOTBRIDGE_ADDIN is not set
++CONFIG_CPU_32=y
++# CONFIG_CPU_26 is not set
++
++#
++# Processor Type
++#
++# CONFIG_CPU_32v3 is not set
++CONFIG_CPU_32v4=y
++# CONFIG_CPU_ARM610 is not set
++# CONFIG_CPU_ARM710 is not set
++# CONFIG_CPU_ARM720T is not set
++# CONFIG_CPU_ARM920T is not set
++# CONFIG_CPU_ARM1020 is not set
++# CONFIG_CPU_SA110 is not set
++CONFIG_CPU_SA1100=y
++CONFIG_DISCONTIGMEM=y
++# CONFIG_CPU_BIG_ENDIAN is not set
++
++#
++# General setup
++#
++# CONFIG_PCI is not set
++# CONFIG_ISA is not set
++# CONFIG_ISA_DMA is not set
++# CONFIG_CPU_FREQ is not set
++CONFIG_HOTPLUG=y
++
++#
++# PCMCIA/CardBus support
++#
++CONFIG_PCMCIA=y
++# CONFIG_I82365 is not set
++# CONFIG_TCIC is not set
++# CONFIG_PCMCIA_CLPS6700 is not set
++CONFIG_PCMCIA_SA1100=y
++CONFIG_NET=y
++CONFIG_SYSVIPC=y
++# CONFIG_BSD_PROCESS_ACCT is not set
++CONFIG_SYSCTL=y
++# CONFIG_XIP_ROM is not set
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_FASTFPE is not set
++CONFIG_KCORE_ELF=y
++# CONFIG_KCORE_AOUT is not set
++# CONFIG_BINFMT_AOUT is not set
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_MISC is not set
++CONFIG_PM=y
++CONFIG_APM=y
++# CONFIG_APM_IGNORE_USER_SUSPEND is not set
++CONFIG_APM_CPU_IDLE=y
++CONFIG_APM_DISPLAY_BLANK=y
++CONFIG_APM_RTC_IS_GMT=y
++# CONFIG_ARTHUR is not set
++CONFIG_CMDLINE="mem=20M root=/dev/mtdblock4"
++# CONFIG_PFS168_CMDLINE is not set
++# CONFIG_LEDS is not set
++CONFIG_ALIGNMENT_TRAP=y
++CONFIG_FREEPG_SIGNAL=y
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Memory Technology Devices (MTD)
++#
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_REDBOOT_PARTS is not set
++# CONFIG_MTD_BOOTLDR_PARTS is not set
++# CONFIG_MTD_AFS_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++# CONFIG_MTD_CFI is not set
++# CONFIG_MTD_CFI_INTELEXT is not set
++# CONFIG_MTD_CFI_AMDSTD is not set
++# CONFIG_MTD_AMDSTD is not set
++# CONFIG_MTD_SHARP is not set
++# CONFIG_MTD_SHARP16 is not set
++CONFIG_MTD_COLLIE=y
++# CONFIG_MTD_RAM is not set
++# CONFIG_MTD_ROM is not set
++# CONFIG_MTD_JEDEC is not set
++
++#
++# Mapping drivers for chip access
++#
++# CONFIG_MTD_PHYSMAP is not set
++# CONFIG_MTD_SUN_UFLASH is not set
++# CONFIG_MTD_NORA is not set
++# CONFIG_MTD_PNC2000 is not set
++# CONFIG_MTD_RPXLITE is not set
++# CONFIG_MTD_SC520CDP is not set
++# CONFIG_MTD_NETSC520 is not set
++# CONFIG_MTD_SBC_GXX is not set
++# CONFIG_MTD_ELAN_104NC is not set
++CONFIG_MTD_SA1100=y
++# CONFIG_MTD_L7200 is not set
++# CONFIG_MTD_SA1100_REDBOOT_PARTITIONS is not set
++# CONFIG_MTD_SA1100_BOOTLDR_PARTITIONS is not set
++# CONFIG_MTD_DC21285 is not set
++# CONFIG_MTD_IQ80310 is not set
++# CONFIG_MTD_DBOX2 is not set
++# CONFIG_MTD_CSTM_MIPS_IXX is not set
++# CONFIG_MTD_CFI_FLAGADM is not set
++# CONFIG_MTD_ARM_INTEGRATOR is not set
++# CONFIG_MTD_MIXMEM is not set
++# CONFIG_MTD_OCTAGON is not set
++# CONFIG_MTD_VMAX is not set
++# CONFIG_MTD_OCELOT is not set
++
++#
++# Self-contained MTD device drivers
++#
++# CONFIG_MTD_PMC551 is not set
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_MTDROM_L7200 is not set
++# CONFIG_MTD_MTDRAM_L7200 is not set
++# CONFIG_MTD_MTDROM_SA1100 is not set
++CONFIG_MTD_MTDRAM_SA1100=y
++CONFIG_MTDRAM_TOTAL_SIZE=12288
++CONFIG_MTDRAM_ERASE_SIZE=1
++CONFIG_MTDRAM_ABS_POS=C1400000
++# CONFIG_MTD_MTDRAM is not set
++
++#
++# Disk-On-Chip Device Drivers
++#
++# CONFIG_MTD_DOC1000 is not set
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOCPROBE is not set
++
++#
++# NAND Flash Device Drivers
++#
++# CONFIG_MTD_NAND is not set
++
++#
++# Plug and Play configuration
++#
++# CONFIG_PNP is not set
++# CONFIG_ISAPNP is not set
++
++#
++# Block devices
++#
++# CONFIG_BLK_DEV_FD is not set
++# CONFIG_BLK_DEV_XD is not set
++# CONFIG_PARIDE is not set
++# CONFIG_BLK_CPQ_DA is not set
++# CONFIG_BLK_CPQ_CISS_DA is not set
++# CONFIG_BLK_DEV_DAC960 is not set
++CONFIG_BLK_DEV_LOOP=m
++# CONFIG_BLK_DEV_NBD is not set
++CONFIG_BLK_DEV_RAM=m
++CONFIG_BLK_DEV_RAM_SIZE=1024
++# CONFIG_BLK_DEV_INITRD is not set
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++# CONFIG_BLK_DEV_MD is not set
++# CONFIG_MD_LINEAR is not set
++# CONFIG_MD_RAID0 is not set
++# CONFIG_MD_RAID1 is not set
++# CONFIG_MD_RAID5 is not set
++# CONFIG_BLK_DEV_LVM is not set
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++CONFIG_PACKET_MMAP=y
++CONFIG_NETLINK=y
++# CONFIG_RTNETLINK is not set
++# CONFIG_NETLINK_DEV is not set
++# CONFIG_NETFILTER is not set
++# CONFIG_FILTER is not set
++CONFIG_UNIX=y
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++# CONFIG_IP_ADVANCED_ROUTER is not set
++# CONFIG_IP_PNP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_INET_ECN is not set
++# CONFIG_SYN_COOKIES is not set
++# CONFIG_IPV6 is not set
++# CONFIG_KHTTPD is not set
++# CONFIG_ATM is not set
++
++#
++#
++#
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_DECNET is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_LLC is not set
++# CONFIG_NET_DIVERT is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_NET_FASTROUTE is not set
++# CONFIG_NET_HW_FLOWCONTROL is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network device support
++#
++CONFIG_NETDEVICES=y
++
++#
++# ARCnet devices
++#
++# CONFIG_ARCNET is not set
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_ETHERTAP is not set
++
++#
++# Ethernet (10 or 100Mbit)
++#
++CONFIG_NET_ETHERNET=y
++# CONFIG_SUNLANCE is not set
++# CONFIG_SUNBMAC is not set
++# CONFIG_SUNQE is not set
++# CONFIG_SUNLANCE is not set
++# CONFIG_SUNGEM is not set
++# CONFIG_NET_VENDOR_3COM is not set
++# CONFIG_LANCE is not set
++# CONFIG_NET_VENDOR_SMC is not set
++# CONFIG_NET_VENDOR_RACAL is not set
++# CONFIG_NET_ISA is not set
++# CONFIG_NET_PCI is not set
++# CONFIG_NET_POCKET is not set
++
++#
++# Ethernet (1000 Mbit)
++#
++# CONFIG_ACENIC is not set
++# CONFIG_ACENIC_OMIT_TIGON_I is not set
++# CONFIG_MYRI_SBUS is not set
++# CONFIG_HAMACHI is not set
++# CONFIG_YELLOWFIN is not set
++# CONFIG_SK98LIN is not set
++# CONFIG_FDDI is not set
++# CONFIG_HIPPI is not set
++# CONFIG_PLIP is not set
++CONFIG_PPP=y
++# CONFIG_PPP_MULTILINK is not set
++# CONFIG_PPP_FILTER is not set
++CONFIG_PPP_ASYNC=y
++# CONFIG_PPP_SYNC_TTY is not set
++CONFIG_PPP_DEFLATE=y
++CONFIG_PPP_BSDCOMP=y
++# CONFIG_PPPOE is not set
++# CONFIG_SLIP is not set
++
++#
++# Wireless LAN (non-hamradio)
++#
++# CONFIG_NET_RADIO is not set
++
++#
++# Token Ring devices
++#
++# CONFIG_TR is not set
++# CONFIG_NET_FC is not set
++# CONFIG_RCPCI is not set
++# CONFIG_SHAPER is not set
++
++#
++# Wan interfaces
++#
++# CONFIG_WAN is not set
++
++#
++# PCMCIA network device support
++#
++CONFIG_NET_PCMCIA=y
++# CONFIG_PCMCIA_3C589 is not set
++# CONFIG_PCMCIA_3C574 is not set
++# CONFIG_PCMCIA_FMVJ18X is not set
++CONFIG_PCMCIA_PCNET=y
++# CONFIG_PCMCIA_NMCLAN is not set
++# CONFIG_PCMCIA_SMC91C92 is not set
++# CONFIG_PCMCIA_XIRC2PS is not set
++# CONFIG_ARCNET_COM20020_CS is not set
++# CONFIG_PCMCIA_IBMTR is not set
++# CONFIG_NET_PCMCIA_RADIO is not set
++
++#
++# Amateur Radio support
++#
++# CONFIG_HAMRADIO is not set
++
++#
++# IrDA (infrared) support
++#
++CONFIG_IRDA=y
++
++#
++# IrDA protocols
++#
++# CONFIG_IRLAN is not set
++# CONFIG_IRNET is not set
++CONFIG_IRCOMM=y
++# CONFIG_IRDA_ULTRA is not set
++# CONFIG_IRDA_OPTIONS is not set
++
++#
++# Infrared-port device drivers
++#
++
++#
++# SIR device drivers
++#
++CONFIG_IRTTY_SIR=y
++CONFIG_IRPORT_SIR=y
++
++#
++# Dongle support
++#
++# CONFIG_DONGLE is not set
++
++#
++# FIR device drivers
++#
++# CONFIG_USB_IRDA is not set
++# CONFIG_NSC_FIR is not set
++# CONFIG_WINBOND_FIR is not set
++# CONFIG_TOSHIBA_FIR is not set
++# CONFIG_SMC_IRCC_FIR is not set
++CONFIG_SA1100_FIR=y
++
++#
++# ATA/IDE/MFM/RLL support
++#
++CONFIG_IDE=y
++
++#
++# IDE, ATA and ATAPI Block devices
++#
++CONFIG_BLK_DEV_IDE=y
++
++#
++# Please see Documentation/ide.txt for help/info on IDE drives
++#
++# CONFIG_BLK_DEV_HD_IDE is not set
++# CONFIG_BLK_DEV_HD is not set
++CONFIG_BLK_DEV_IDEDISK=y
++# CONFIG_IDEDISK_MULTI_MODE is not set
++# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
++# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
++# CONFIG_BLK_DEV_IDEDISK_IBM is not set
++# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
++# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
++# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
++# CONFIG_BLK_DEV_IDEDISK_WD is not set
++# CONFIG_BLK_DEV_COMMERIAL is not set
++# CONFIG_BLK_DEV_TIVO is not set
++CONFIG_BLK_DEV_IDECS=y
++# CONFIG_BLK_DEV_IDECD is not set
++# CONFIG_BLK_DEV_IDETAPE is not set
++# CONFIG_BLK_DEV_IDEFLOPPY is not set
++# CONFIG_BLK_DEV_IDESCSI is not set
++
++#
++# IDE chipset support/bugfixes
++#
++# CONFIG_BLK_DEV_CMD640 is not set
++# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
++# CONFIG_BLK_DEV_ISAPNP is not set
++# CONFIG_IDE_CHIPSETS is not set
++# CONFIG_IDEDMA_AUTO is not set
++# CONFIG_DMA_NONPCI is not set
++# CONFIG_BLK_DEV_IDE_MODES is not set
++
++#
++# SCSI support
++#
++# CONFIG_SCSI is not set
++
++#
++# I2O device support
++#
++# CONFIG_I2O is not set
++# CONFIG_I2O_BLOCK is not set
++# CONFIG_I2O_LAN is not set
++# CONFIG_I2O_SCSI is not set
++# CONFIG_I2O_PROC is not set
++
++#
++# ISDN subsystem
++#
++# CONFIG_ISDN is not set
++
++#
++# Input core support
++#
++# CONFIG_INPUT is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++# CONFIG_VT_CONSOLE is not set
++CONFIG_SERIAL=m
++# CONFIG_SERIAL_FORCE16550A is not set
++# CONFIG_SERIAL_EXTENDED is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++# CONFIG_SERIAL_21285 is not set
++# CONFIG_SERIAL_21285_OLD is not set
++# CONFIG_SERIAL_21285_CONSOLE is not set
++# CONFIG_SERIAL_SA1100 is not set
++# CONFIG_SERIAL_SA1100_OLD is not set
++# CONFIG_SERIAL_SA1100_CONSOLE is not set
++CONFIG_SA1100_DEFAULT_BAUDRATE=9600
++CONFIG_SERIAL_COLLIE=y
++# CONFIG_SERIAL_COLLIE_CONSOLE is not set
++CONFIG_COLLIE_DEFAULT_BAUDRATE=9600
++# CONFIG_SERIAL_AMBA is not set
++# CONFIG_SERIAL_AMBA_CONSOLE is not set
++# CONFIG_SERIAL_CLPS711X is not set
++# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
++CONFIG_UNIX98_PTYS=y
++CONFIG_UNIX98_PTY_COUNT=32
++CONFIG_UCB1200=y
++CONFIG_TOUCHSCREEN_UCB1200=y
++# CONFIG_AUDIO_UCB1200 is not set
++# CONFIG_ADC_UCB1200 is not set
++# CONFIG_TOUCHSCREEN_BITSY is not set
++# CONFIG_PROFILER is not set
++# CONFIG_PFS168_SPI is not set
++# CONFIG_PFS168_DTMF is not set
++# CONFIG_PFS168_MISC is not set
++
++#
++# I2C support
++#
++# CONFIG_I2C is not set
++
++#
++# Mice
++#
++# CONFIG_BUSMOUSE is not set
++# CONFIG_MOUSE is not set
++
++#
++# Joysticks
++#
++# CONFIG_JOYSTICK is not set
++
++#
++# Input core support is needed for joysticks
++#
++# CONFIG_QIC02_TAPE is not set
++
++#
++# Watchdog Cards
++#
++# CONFIG_WATCHDOG is not set
++# CONFIG_INTEL_RNG is not set
++# CONFIG_NVRAM is not set
++# CONFIG_RTC is not set
++CONFIG_SA1100_RTC=y
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++# CONFIG_APPLICOM is not set
++
++#
++# Ftape, the floppy tape device driver
++#
++# CONFIG_FTAPE is not set
++# CONFIG_AGP is not set
++# CONFIG_DRM is not set
++
++#
++# PCMCIA character devices
++#
++CONFIG_PCMCIA_SERIAL_CS=m
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++
++#
++# File systems
++#
++# CONFIG_QUOTA is not set
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++CONFIG_FS_SYNC=y
++# CONFIG_REISERFS_FS is not set
++# CONFIG_REISERFS_CHECK is not set
++# CONFIG_ADFS_FS is not set
++# CONFIG_ADFS_FS_RW is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_BFS_FS is not set
++CONFIG_FAT_FS=m
++# CONFIG_MSDOS_FS is not set
++# CONFIG_UMSDOS_FS is not set
++CONFIG_VFAT_FS=m
++# CONFIG_EFS_FS is not set
++# CONFIG_JFFS_FS is not set
++CONFIG_JFFS2_FS=y
++CONFIG_JFFS2_FS_DEBUG=0
++CONFIG_CRAMFS=m
++# CONFIG_TMPFS is not set
++CONFIG_RAMFS=y
++# CONFIG_ISO9660_FS is not set
++# CONFIG_JOLIET is not set
++CONFIG_MINIX_FS=m
++# CONFIG_VXFS_FS is not set
++# CONFIG_NTFS_FS is not set
++# CONFIG_NTFS_RW is not set
++# CONFIG_HPFS_FS is not set
++CONFIG_PROC_FS=y
++# CONFIG_DEVFS_FS is not set
++# CONFIG_DEVFS_MOUNT is not set
++# CONFIG_DEVFS_DEBUG is not set
++CONFIG_DEVPTS_FS=y
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_QNX4FS_RW is not set
++# CONFIG_ROMFS_FS is not set
++CONFIG_EXT2_FS=y
++# CONFIG_SYSV_FS is not set
++# CONFIG_UDF_FS is not set
++# CONFIG_UDF_RW is not set
++# CONFIG_UFS_FS is not set
++# CONFIG_UFS_FS_WRITE is not set
++
++#
++# Network File Systems
++#
++# CONFIG_CODA_FS is not set
++CONFIG_NFS_FS=m
++CONFIG_NFS_V3=y
++# CONFIG_ROOT_NFS is not set
++# CONFIG_NFSD is not set
++# CONFIG_NFSD_V3 is not set
++CONFIG_SUNRPC=m
++CONFIG_LOCKD=m
++CONFIG_LOCKD_V4=y
++CONFIG_SMB_FS=m
++CONFIG_SMB_NLS_DEFAULT=y
++CONFIG_SMB_NLS_REMOTE="cp437"
++# CONFIG_NCP_FS is not set
++# CONFIG_NCPFS_PACKET_SIGNING is not set
++# CONFIG_NCPFS_IOCTL_LOCKING is not set
++# CONFIG_NCPFS_STRONG is not set
++# CONFIG_NCPFS_NFS_NS is not set
++# CONFIG_NCPFS_OS2_NS is not set
++# CONFIG_NCPFS_SMALLDOS is not set
++# CONFIG_NCPFS_NLS is not set
++# CONFIG_NCPFS_EXTRAS is not set
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++CONFIG_SMB_NLS=y
++CONFIG_NLS=y
++
++#
++# Native Language Support
++#
++CONFIG_NLS_DEFAULT="iso8859-1"
++# CONFIG_NLS_CODEPAGE_437 is not set
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++# CONFIG_NLS_CODEPAGE_850 is not set
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ISO8859_1 is not set
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++# CONFIG_NLS_UTF8 is not set
++
++#
++# Console drivers
++#
++CONFIG_PC_KEYMAP=y
++# CONFIG_VGA_CONSOLE is not set
++
++#
++# Frame-buffer support
++#
++CONFIG_FB=y
++CONFIG_DUMMY_CONSOLE=y
++# CONFIG_FB_L7200 is not set
++# CONFIG_FB_IRIS is not set
++CONFIG_FB_COLLIE=y
++# CONFIG_COLLIE_LOGO_SCREEN is not set
++# CONFIG_FB_ACORN is not set
++# CONFIG_FB_CLPS711X is not set
++# CONFIG_FB_CYBER2000 is not set
++# CONFIG_FB_EPSON1356 is not set
++# CONFIG_FB_SA1100 is not set
++# CONFIG_FB_ANAKIN is not set
++# CONFIG_FB_E1355 is not set
++# CONFIG_FB_VIRTUAL is not set
++CONFIG_FBCON_ADVANCED=y
++# CONFIG_FBCON_MFB is not set
++# CONFIG_FBCON_CFB2 is not set
++# CONFIG_FBCON_CFB4 is not set
++# CONFIG_FBCON_CFB8 is not set
++CONFIG_FBCON_CFB16=y
++# CONFIG_FBCON_CFB24 is not set
++# CONFIG_FBCON_CFB32 is not set
++# CONFIG_FBCON_AFB is not set
++# CONFIG_FBCON_ILBM is not set
++# CONFIG_FBCON_IPLAN2P2 is not set
++# CONFIG_FBCON_IPLAN2P4 is not set
++# CONFIG_FBCON_IPLAN2P8 is not set
++# CONFIG_FBCON_MAC is not set
++# CONFIG_FBCON_VGA_PLANES is not set
++# CONFIG_FBCON_VGA is not set
++# CONFIG_FBCON_HGA is not set
++CONFIG_FBCON_ROTATE_R=y
++# CONFIG_FBCON_ROTATE_L is not set
++# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
++CONFIG_FBCON_FONTS=y
++CONFIG_FONT_8x8=y
++# CONFIG_FONT_8x16 is not set
++# CONFIG_FONT_SUN8x16 is not set
++# CONFIG_FONT_SUN12x22 is not set
++# CONFIG_FONT_6x11 is not set
++# CONFIG_FONT_PEARL_8x8 is not set
++# CONFIG_FONT_ACORN_8x8 is not set
++
++#
++# Sound
++#
++CONFIG_SOUND=y
++# CONFIG_SOUND_ASSABET_UDA1341 is not set
++# CONFIG_SOUND_BITSY_UDA1341 is not set
++# CONFIG_SOUND_SA1111_UDA1341 is not set
++# CONFIG_SOUND_SA1100SSP is not set
++CONFIG_SOUND_COLLIE_SSP=y
++CONFIG_COLLIE_PCM1741=y
++# CONFIG_COLLIE_PCM1717 is not set
++# CONFIG_SOUND_CMPCI is not set
++# CONFIG_SOUND_EMU10K1 is not set
++# CONFIG_SOUND_FUSION is not set
++# CONFIG_SOUND_CS4281 is not set
++# CONFIG_SOUND_ES1370 is not set
++# CONFIG_SOUND_ES1371 is not set
++# CONFIG_SOUND_ESSSOLO1 is not set
++# CONFIG_SOUND_MAESTRO is not set
++# CONFIG_SOUND_MAESTRO3 is not set
++# CONFIG_SOUND_ICH is not set
++# CONFIG_SOUND_SONICVIBES is not set
++# CONFIG_SOUND_TRIDENT is not set
++# CONFIG_SOUND_MSNDCLAS is not set
++# CONFIG_SOUND_MSNDPIN is not set
++# CONFIG_SOUND_VIA82CXXX is not set
++# CONFIG_MIDI_VIA82CXXX is not set
++# CONFIG_SOUND_OSS is not set
++# CONFIG_SOUND_TVMIXER is not set
++
++#
++# USB support
++#
++# CONFIG_USB is not set
++
++#
++# USB Device Support
++#
++CONFIG_USBD=m
++CONFIG_USBD_VENDORID=4dd
++CONFIG_USBD_PRODUCTID=8002
++CONFIG_USBD_PRODUCT_NAME="SL Series"
++CONFIG_USBD_MANUFACTURER="Sharp"
++CONFIG_USBD_USE_SERIAL_NUMBER=y
++CONFIG_USBD_SERIAL_NUMBER_STR="A01234"
++CONFIG_USBD_SELFPOWERED=y
++CONFIG_USBD_MONITOR=m
++
++#
++#
++#
++CONFIG_USBD_PROCFS=y
++
++#
++# USB Device functions --
++#
++
++#
++# Network Function
++#
++CONFIG_USBD_NET=m
++CONFIG_USBD_NET_VENDORID=4DD
++CONFIG_USBD_NET_PRODUCTID=8004
++CONFIG_USBD_NET_IFNAME="usbd"
++CONFIG_USBD_NET_OUT_ENDPOINT=1
++CONFIG_USBD_NET_OUT_PKTSIZE=64
++CONFIG_USBD_NET_IN_ENDPOINT=2
++CONFIG_USBD_NET_IN_PKTSIZE=64
++# CONFIG_USBD_NET_ALWAYSUP is not set
++CONFIG_USBD_NET_CDC=y
++CONFIG_USBD_NET_REMOTE_MACADDR="400002000001"
++CONFIG_USBD_NET_REMOTE_OUI=400002
++CONFIG_USBD_NET_LOCAL_MACADDR="400001000001"
++CONFIG_USBD_NET_LOCAL_OUI=400001
++
++#
++# Serial Function
++#
++CONFIG_USBD_SERIAL=m
++CONFIG_USBD_SERIAL_VENDORID=4dd
++CONFIG_USBD_SERIAL_PRODUCTID=8002
++# CONFIG_USBD_SERIAL_CDC is not set
++CONFIG_USBD_SERIAL_OUT_ENDPOINT=1
++CONFIG_USBD_SERIAL_IN_PKTSIZE=64
++CONFIG_USBD_SERIAL_IN_ENDPOINT=2
++CONFIG_USBD_SERIAL_OUT_PKTSIZE=64
++# CONFIG_USBD_SERIAL_SAFE is not set
++
++#
++# USB Device bus interfaces --
++#
++
++#
++# Intel StrongArm SA-1110 Bus Interface Driver
++#
++CONFIG_USBD_SA1100_BUS=m
++# CONFIG_SA1100_NEW_DMA_COOPERATION is not set
++CONFIG_USBD_STALL_TIMEOUT=0
++CONFIG_USBD_STALL_DISCONNECT_DURATION=2
++# CONFIG_USBD_TRAFFIC_KEEPAWAKE is not set
++
++#
++# Generic Bus Interface
++#
++# CONFIG_USBD_GENERIC_BUS is not set
++
++#
++# Bluetooth support
++#
++# CONFIG_BLUEZ is not set
++
++#
++# Kernel hacking
++#
++# CONFIG_NO_FRAME_POINTER is not set
++# CONFIG_DEBUG_ERRORS is not set
++# CONFIG_DEBUG_USER is not set
++# CONFIG_DEBUG_INFO is not set
++CONFIG_MAGIC_SYSRQ=y
++# CONFIG_NO_PGT_CACHE is not set
++# CONFIG_DEBUG_LL is not set
++# CONFIG_DEBUG_DC21285_PORT is not set
++# CONFIG_DEBUG_CLPS711X_UART2 is not set
+diff -Nur linux/drivers/mtd/Config.in /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/mtd/Config.in
+--- linux/drivers/mtd/Config.in 2003-05-13 16:18:19.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/mtd/Config.in 2003-06-23 01:47:03.000000000 +0700
+@@ -14,6 +14,7 @@
+ dep_tristate ' MTD partitioning support' CONFIG_MTD_PARTITIONS $CONFIG_MTD
+ dep_tristate ' MTD concatenating support' CONFIG_MTD_CONCAT $CONFIG_MTD
+ dep_tristate ' RedBoot partition table parsing' CONFIG_MTD_REDBOOT_PARTS $CONFIG_MTD_PARTITIONS
++ dep_tristate ' Cacko Hybrid partition table' CONFIG_CACKO_HYBRID_PARTITIONS $CONFIG_MTD_PARTITIONS $CONFIG_SA1100_COLLIE
+ dep_tristate ' Command line partition table parsing' CONFIG_MTD_CMDLINE_PARTS $CONFIG_MTD_PARTITIONS
+ if [ "$CONFIG_ARM" = "y" ]; then
+ dep_tristate ' ARM Firmware Suite partition parsing' CONFIG_MTD_AFS_PARTS $CONFIG_MTD_PARTITIONS
+diff -Nur linux/drivers/mtd/chips/Config.in /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/mtd/chips/Config.in
+--- linux/drivers/mtd/chips/Config.in 2003-05-13 16:18:19.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/mtd/chips/Config.in 2003-06-23 01:47:03.000000000 +0700
+@@ -49,6 +49,7 @@
+ dep_tristate ' Support for RAM chips in bus mapping' CONFIG_MTD_RAM $CONFIG_MTD
+ dep_tristate ' Support for ROM chips in bus mapping' CONFIG_MTD_ROM $CONFIG_MTD
+ dep_tristate ' Support for absent chips in bus mapping' CONFIG_MTD_ABSENT $CONFIG_MTD
++dep_tristate ' pre-CFI Sharp (32) chip support (Collie)' CONFIG_MTD_COLLIE $CONFIG_MTD
+
+ bool ' Older (theoretically obsoleted now) drivers for non-CFI chips' CONFIG_MTD_OBSOLETE_CHIPS
+ dep_tristate ' AMD compatible flash chip support (non-CFI)' CONFIG_MTD_AMDSTD $CONFIG_MTD $CONFIG_MTD_OBSOLETE_CHIPS
+diff -Nur linux/drivers/mtd/chips/Makefile /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/mtd/chips/Makefile
+--- linux/drivers/mtd/chips/Makefile 2003-05-13 16:18:19.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/mtd/chips/Makefile 2003-06-23 01:47:03.000000000 +0700
+@@ -25,6 +25,7 @@
+ obj-$(CONFIG_MTD_RAM) += map_ram.o
+ obj-$(CONFIG_MTD_ROM) += map_rom.o
+ obj-$(CONFIG_MTD_SHARP) += sharp.o
++obj-$(CONFIG_MTD_COLLIE) += collie_sharp.o
+ obj-$(CONFIG_MTD_ABSENT) += map_absent.o
+
+ include $(TOPDIR)/Rules.make
+diff -Nur linux/drivers/mtd/chips/collie_sharp.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/mtd/chips/collie_sharp.c
+--- linux/drivers/mtd/chips/collie_sharp.c 1970-01-01 07:00:00.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/mtd/chips/collie_sharp.c 2003-06-23 01:47:03.000000000 +0700
+@@ -0,0 +1,731 @@
++/*
++ * MTD chip driver for non-CFI Sharp flash chips
++ *
++ * Copyright 2000,2001 David A. Schleef <ds@schleef.org>
++ * 2000,2001 Lineo, Inc.
++ *
++ * $Id: sharp.c,v 1.4 2001/04/29 16:21:17 dwmw2 Exp $
++ *
++ * Devices supported:
++ * LH28F016SCT Symmetrical block flash memory, 2Mx8
++ * LH28F008SCT Symmetrical block flash memory, 1Mx8
++ *
++ * Documentation:
++ * http://www.sharpmeg.com/datasheets/memic/flashcmp/
++ * http://www.sharpmeg.com/datasheets/memic/flashcmp/01symf/16m/016sctl9.pdf
++ * 016sctl9.pdf
++ *
++ * Limitations:
++ * This driver only supports 4x1 arrangement of chips.
++ * Not tested on anything but PowerPC.
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/version.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++#include <linux/errno.h>
++#include <linux/mtd/map.h>
++#include <linux/mtd/cfi.h>
++#include <linux/delay.h>
++#include <asm/hardware.h>
++
++#define CMD_RESET 0xffffffff
++#define CMD_READ_ID 0x90909090
++#define CMD_READ_STATUS 0x70707070
++#define CMD_CLEAR_STATUS 0x50505050
++#define CMD_BLOCK_ERASE_1 0x20202020
++#define CMD_BLOCK_ERASE_2 0xd0d0d0d0
++#define CMD_BYTE_WRITE 0x40404040
++#define CMD_SUSPEND 0xb0b0b0b0
++#define CMD_RESUME 0xd0d0d0d0
++#define CMD_SET_BLOCK_LOCK_1 0x60606060
++#define CMD_SET_BLOCK_LOCK_2 0x01010101
++#define CMD_SET_MASTER_LOCK_1 0x60606060
++#define CMD_SET_MASTER_LOCK_2 0xf1f1f1f1
++#define CMD_CLEAR_BLOCK_LOCKS_1 0x60606060
++#define CMD_CLEAR_BLOCK_LOCKS_2 0xd0d0d0d0
++
++#define SR_READY 0x80808080 // 1 = ready
++#define SR_ERASE_SUSPEND 0x40404040 // 1 = block erase suspended
++#define SR_ERROR_ERASE 0x20202020 // 1 = error in block erase or clear lock bits
++#define SR_ERROR_WRITE 0x10101010 // 1 = error in byte write or set lock bit
++#define SR_VPP 0x08080808 // 1 = Vpp is low
++#define SR_WRITE_SUSPEND 0x04040404 // 1 = byte write suspended
++#define SR_PROTECT 0x02020202 // 1 = lock bit set
++#define SR_RESERVED 0x01010101
++
++#define SR_ERRORS (SR_ERROR_ERASE|SR_ERROR_WRITE|SR_VPP|SR_PROTECT)
++
++#define BLOCK_MASK 0xfffe0000
++/* Configuration options */
++
++//#undef AUTOUNLOCK /* automatically unlocks blocks before erasing */
++#define AUTOUNLOCK
++struct mtd_info *collie_probe(struct map_info *);
++
++static int collie_probe_map(struct map_info *map,struct mtd_info *mtd);
++
++static int collie_read(struct mtd_info *mtd, loff_t from, size_t len,
++ size_t *retlen, u_char *buf);
++static int collie_write(struct mtd_info *mtd, loff_t from, size_t len,
++ size_t *retlen, const u_char *buf);
++static int collie_erase(struct mtd_info *mtd, struct erase_info *instr);
++static void collie_sync(struct mtd_info *mtd);
++static int collie_suspend(struct mtd_info *mtd);
++static void collie_resume(struct mtd_info *mtd);
++static void collie_destroy(struct mtd_info *mtd);
++
++static int collie_write_oneword(struct map_info *map, struct flchip *chip,
++ unsigned long adr, __u32 datum);
++static int collie_erase_oneblock(struct map_info *map, struct flchip *chip,
++ unsigned long adr);
++#ifdef AUTOUNLOCK
++static inline void collie_unlock_oneblock(struct map_info *map, struct flchip *chip,
++ unsigned long adr);
++#endif
++
++
++struct collie_info{
++ struct flchip *chip;
++ int bogus;
++ int chipshift;
++ int numchips;
++ struct flchip chips[1];
++};
++
++struct mtd_info *collie_probe(struct map_info *map);
++static void collie_destroy(struct mtd_info *mtd);
++
++static struct mtd_chip_driver collie_chipdrv = {
++ probe: collie_probe,
++ destroy: collie_destroy,
++ name: "collie",
++ module: THIS_MODULE
++};
++static void collie_udelay(unsigned long i){
++ if (in_interrupt()) {
++ udelay(i);
++ } else {
++ schedule();
++ }
++
++}
++struct mtd_info *collie_probe(struct map_info *map)
++{
++ struct mtd_info *mtd = NULL;
++ struct collie_info *collie = NULL;
++ int width;
++
++ mtd = kmalloc(sizeof(*mtd), GFP_KERNEL);
++ if(!mtd)
++ return NULL;
++
++ collie = kmalloc(sizeof(*collie), GFP_KERNEL);
++ if(!collie)
++ return NULL;
++
++ memset(mtd, 0, sizeof(*mtd));
++
++ width = collie_probe_map(map,mtd);
++ if(!width){
++ kfree(mtd);
++ kfree(collie);
++ return NULL;
++ }
++ //MSC0 = 0xfff8e352;
++ MSC0 = 0xfff8fff8;
++
++ mtd->priv = map;
++ mtd->type = MTD_NORFLASH;
++ mtd->erase = collie_erase;
++ mtd->read = collie_read;
++ mtd->write = collie_write;
++ mtd->sync = collie_sync;
++ mtd->suspend = collie_suspend;
++ mtd->resume = collie_resume;
++ mtd->flags = MTD_CAP_NORFLASH;
++ mtd->name = map->name;
++
++ memset(collie, 0, sizeof(*collie));
++
++ //collie->chipshift = 23;
++ collie->chipshift = 24;
++ collie->numchips = 1;
++ collie->chips[0].start = 0;
++ collie->chips[0].state = FL_READY;
++ collie->chips[0].mutex = &collie->chips[0]._spinlock;
++ collie->chips[0].word_write_time = 0;
++ init_waitqueue_head(&collie->chips[0].wq);
++ spin_lock_init(&collie->chips[0]._spinlock);
++
++ map->fldrv = &collie_chipdrv;
++ map->fldrv_priv = collie;
++
++ MOD_INC_USE_COUNT;
++ return mtd;
++}
++
++static int collie_probe_map(struct map_info *map,struct mtd_info *mtd)
++{
++ unsigned long tmp;
++ unsigned long base = 0;
++ u32 read0, read4;
++ int width = 4;
++
++ tmp = map->read32(map, base+0);
++
++ map->write32(map, CMD_READ_ID, base+0);
++
++ read0=map->read32(map, base+0);
++ read4=map->read32(map, base+4);
++ //if(read0 == 0x89898989){
++ if(read0 == 0x00b000b0){
++ //printk("Looks like collie flash\n");
++ switch(read4){
++ case 0xaaaaaaaa:
++ case 0xa0a0a0a0:
++ /* aa - LH28F016SCT-L95 2Mx8, 32 64k blocks*/
++ /* a0 - LH28F016SCT-Z4 2Mx8, 32 64k blocks*/
++ mtd->erasesize = 0x10000 * width;
++ mtd->size = 0x200000 * width;
++ return width;
++ case 0xa6a6a6a6:
++ /* a6 - LH28F008SCT-L12 1Mx8, 16 64k blocks*/
++ /* a6 - LH28F008SCR-L85 1Mx8, 16 64k blocks*/
++ mtd->erasesize = 0x10000 * width;
++ mtd->size = 0x100000 * width;
++ return width;
++ case 0x00b000b0:
++ /* a6 - LH28F640BFHE 8 64k * 2 chip blocks*/
++ mtd->erasesize = 0x10000 * width / 2;
++ mtd->size = 0x800000 * width / 2;
++ return width;
++#if 0
++ case 0x00000000: /* unknown */
++ /* XX - LH28F004SCT 512kx8, 8 64k blocks*/
++ mtd->erasesize = 0x10000 * width;
++ mtd->size = 0x100000 * width;
++ return width;
++#endif
++ default:
++ printk("Sort-of looks like collie flash, 0x%08x 0x%08x\n",
++ read0,read4);
++ }
++ }else if((map->read32(map, base+0) == CMD_READ_ID)){
++ /* RAM, probably */
++ printk("Looks like RAM\n");
++ map->write32(map, tmp, base+0);
++ }else{
++ printk("Doesn't look like collie flash, 0x%08x 0x%08x\n",
++ read0,read4);
++ }
++
++ return 0;
++}
++
++/* This function returns with the chip->mutex lock held. */
++static inline int collie_wait(struct map_info *map, struct flchip *chip)
++{
++ __u32 status;
++ unsigned long timeo = jiffies + HZ;
++ DECLARE_WAITQUEUE(wait, current);
++ int adr = 0;
++
++ //timeo = jiffies + HZ * 10;
++retry:
++ spin_lock_bh(chip->mutex);
++
++ switch(chip->state){
++ case FL_READY:
++ map->write32(map,CMD_READ_STATUS,adr);
++ chip->state = FL_STATUS;
++ case FL_STATUS:
++ status = map->read32(map,adr);
++ if((status & SR_READY)==SR_READY)
++ break;
++ //printk(".status=%08x\n",status);
++ spin_unlock_bh(chip->mutex);
++ if (time_after(jiffies, timeo)) {
++ printk("Waiting for chip to be ready timed out in erase\n");
++ return -EIO;
++ }
++ collie_udelay(1);
++ goto retry;
++ default:
++ //printk("Waiting for chip\n");
++
++ set_current_state(TASK_INTERRUPTIBLE);
++ add_wait_queue(&chip->wq, &wait);
++
++ spin_unlock_bh(chip->mutex);
++
++ //schedule();
++ collie_udelay(1);
++
++ set_current_state(TASK_RUNNING);
++ remove_wait_queue(&chip->wq, &wait);
++
++ if(signal_pending(current))
++ return -EINTR;
++
++ timeo = jiffies + HZ;
++
++ goto retry;
++ }
++
++ map->write32(map,CMD_RESET, adr);
++
++ chip->state = FL_READY;
++
++ return 0;
++}
++
++static void collie_release(struct flchip *chip)
++{
++ wake_up(&chip->wq);
++ spin_unlock_bh(chip->mutex);
++}
++
++static int collie_read(struct mtd_info *mtd, loff_t from, size_t len,
++ size_t *retlen, u_char *buf)
++{
++ struct map_info *map = mtd->priv;
++ struct collie_info *collie = map->fldrv_priv;
++ int chipnum;
++ int ret = 0;
++ int ofs = 0;
++
++ chipnum = (from >> collie->chipshift);
++ ofs = from & ((1 << collie->chipshift)-1);
++
++ *retlen = 0;
++
++ while(len){
++ unsigned long thislen;
++
++ if(chipnum>=collie->numchips)
++ break;
++
++ thislen = len;
++ if(ofs+thislen >= (1<<collie->chipshift))
++ thislen = (1<<collie->chipshift) - ofs;
++
++ ret = collie_wait(map,&collie->chips[chipnum]);
++ if(ret<0)
++ break;
++
++ map->copy_from(map,buf,ofs,thislen);
++
++ collie_release(&collie->chips[chipnum]);
++
++ *retlen += thislen;
++ len -= thislen;
++ buf += thislen;
++
++ ofs = 0;
++ chipnum++;
++ }
++ return ret;
++}
++
++static int collie_write(struct mtd_info *mtd, loff_t to, size_t len,
++ size_t *retlen, const u_char *buf)
++{
++ struct map_info *map = mtd->priv;
++ struct collie_info *collie = map->fldrv_priv;
++ int ret = 0;
++ int i,j;
++ int chipnum;
++ unsigned long ofs;
++ union { u32 l; unsigned char uc[4]; } tbuf;
++
++ *retlen = 0;
++
++ while(len){
++ tbuf.l = 0xffffffff;
++ chipnum = to >> collie->chipshift;
++ ofs = to & ((1<<collie->chipshift)-1);
++
++ j=0;
++ for(i=ofs&3;i<4 && len;i++){
++ tbuf.uc[i] = *buf;
++ buf++;
++ to++;
++ len--;
++ j++;
++ }
++ collie_write_oneword(map, &collie->chips[chipnum], ofs&~3, tbuf.l);
++ if(ret<0)
++ return ret;
++ (*retlen)+=j;
++ }
++
++ return 0;
++}
++
++static int collie_write_oneword(struct map_info *map, struct flchip *chip,
++ unsigned long adr, __u32 datum)
++{
++ int ret;
++ int try;
++ int i;
++ u32 status = 0;
++
++ ret = collie_wait(map,chip);
++ if(ret<0)
++ return ret;
++
++ for(try=0;try<10;try++){
++ map->write32(map,CMD_BYTE_WRITE,adr);
++ /* cpu_to_le32 -> hack to fix the writel be->le conversion */
++ map->write32(map,cpu_to_le32(datum),adr);
++
++ chip->state = FL_WRITING;
++
++ map->write32(map,CMD_READ_STATUS,adr);
++
++ for(i=0;i<100;i++){
++ status = map->read32(map,adr);
++ if((status & SR_READY)==SR_READY)
++ break;
++ }
++
++#ifdef AUTOUNLOCK
++ if (status & SR_PROTECT){ /* lock block */
++#if 0
++ map->write32(map,CMD_CLEAR_BLOCK_LOCKS_1,adr);
++ map->write32(map,CMD_CLEAR_BLOCK_LOCKS_2,adr);
++#else
++ map->write32(map,CMD_CLEAR_STATUS,adr);
++ //map->write32(map,CMD_RESET,adr);
++
++ collie_unlock_oneblock(map,chip,adr);
++
++ map->write32(map,CMD_CLEAR_STATUS,adr);
++ map->write32(map,CMD_RESET,adr);
++
++#endif
++ continue;
++ }
++#endif
++ if(i==100){
++ printk("collie: timed out writing\n");
++ }
++
++ if(!(status&SR_ERRORS))
++ break;
++
++ printk("collie: error writing byte at addr=%08lx status=%08x\n",adr,status);
++
++ map->write32(map,CMD_CLEAR_STATUS,adr);
++ }
++ map->write32(map,CMD_RESET,adr);
++ chip->state = FL_READY;
++
++ collie_release(chip);
++
++ return 0;
++}
++
++static int collie_erase(struct mtd_info *mtd, struct erase_info *instr)
++{
++ struct map_info *map = mtd->priv;
++ struct collie_info *collie = map->fldrv_priv;
++ unsigned long adr,len;
++ int chipnum, ret=0;
++
++//printk("collie_erase()\n");
++ if(instr->addr & (mtd->erasesize - 1))
++ return -EINVAL;
++ if(instr->len & (mtd->erasesize - 1))
++ return -EINVAL;
++ if(instr->len + instr->addr > mtd->size)
++ return -EINVAL;
++
++ chipnum = instr->addr >> collie->chipshift;
++ adr = instr->addr & ((1<<collie->chipshift)-1);
++ len = instr->len;
++//printk("--+* erase adr %08x [%08x]\n",adr,len);
++ while(len){
++ ret = collie_erase_oneblock(map, &collie->chips[chipnum], adr);
++ if(ret)return ret;
++ if (adr >= 0xfe0000) {
++ adr += mtd->erasesize / 8;
++ len -= mtd->erasesize / 8;
++ } else {
++
++ adr += mtd->erasesize;
++ len -= mtd->erasesize;
++ }
++ if(adr >> collie->chipshift){
++ adr = 0;
++ chipnum++;
++ if(chipnum>=collie->numchips)
++ break;
++ }
++ }
++ instr->state = MTD_ERASE_DONE;
++ if(instr->callback)
++ instr->callback(instr);
++//printk("--+* erase end %08x \n\n",adr);
++
++ return 0;
++}
++
++static inline int collie_do_wait_for_ready(struct map_info *map, struct flchip *chip,
++ unsigned long adr)
++{
++ int ret;
++ int timeo;
++ int status;
++ DECLARE_WAITQUEUE(wait, current);
++
++ map->write32(map,CMD_READ_STATUS,adr);
++ status = map->read32(map,adr);
++
++ timeo = jiffies + HZ * 10;
++
++ while(jiffies<timeo){
++ map->write32(map,CMD_READ_STATUS,adr);
++ status = map->read32(map,adr);
++ if((status & SR_READY)==SR_READY){
++ ret = 0;
++ goto out;
++ }
++ set_current_state(TASK_INTERRUPTIBLE);
++ add_wait_queue(&chip->wq, &wait);
++
++ spin_unlock_bh(chip->mutex);
++
++ schedule_timeout(1);
++ schedule();
++
++ spin_lock_bh(chip->mutex);
++
++ remove_wait_queue(&chip->wq, &wait);
++ set_current_state(TASK_RUNNING);
++#if 0
++ if (signal_pending(current)){
++ ret = -EINTR;
++ goto out;
++ }
++#endif
++
++ }
++ ret = -ETIME;
++out:
++ return ret;
++}
++
++static int collie_erase_oneblock(struct map_info *map, struct flchip *chip,
++ unsigned long adr)
++{
++ int ret;
++ //int timeo;
++ int status;
++ //int i;
++
++ //printk("collie_erase_oneblock()\n");
++
++ ret = collie_wait(map,chip);
++ if (ret <0)
++ return ret;
++#ifdef AUTOUNLOCK
++ /* This seems like a good place to do an unlock */
++ collie_unlock_oneblock(map,chip,adr);
++#endif
++
++ map->write32(map,CMD_BLOCK_ERASE_1,adr);
++ map->write32(map,CMD_BLOCK_ERASE_2,adr);
++
++ chip->state = FL_ERASING;
++
++ ret = collie_do_wait_for_ready(map,chip,adr);
++ if(ret<0){
++ spin_unlock_bh(chip->mutex);
++ return ret;
++ }
++ map->write32(map,CMD_READ_STATUS,adr);
++ status = map->read32(map,adr);
++ if(!(status&SR_ERRORS)){
++ map->write32(map,CMD_RESET,adr);
++ chip->state = FL_READY;
++ spin_unlock_bh(chip->mutex);
++ return 0;
++ }
++
++ printk("collie: error erasing block at addr=%08lx status=%08x\n",adr,status);
++ map->write32(map,CMD_CLEAR_STATUS,adr);
++
++ //wake_up(&chip->wq);
++ //spin_unlock_bh(chip->mutex);
++
++ collie_release(chip);
++
++ return -EIO;
++}
++
++#ifdef AUTOUNLOCK
++static inline void collie_unlock_oneblock(struct map_info *map, struct flchip *chip,
++ unsigned long adr)
++{
++ u32 status;
++
++ map->write32(map,CMD_CLEAR_BLOCK_LOCKS_1,adr & BLOCK_MASK);
++ map->write32(map,CMD_CLEAR_BLOCK_LOCKS_2,adr & BLOCK_MASK);
++
++ collie_do_wait_for_ready(map,chip,adr);
++
++ status = map->read32(map,adr);
++ if(!(status&SR_ERRORS)){
++ map->write32(map,CMD_RESET,adr);
++ chip->state = FL_READY;
++ return;
++ }
++
++ printk("collie: error unlocking block at addr=%08lx status=%08x\n",adr,status);
++ map->write32(map,CMD_CLEAR_STATUS,adr);
++}
++#endif
++
++static void collie_sync(struct mtd_info *mtd)
++{
++ //printk("collie_sync()\n");
++}
++
++static int collie_suspend(struct mtd_info *mtd)
++{
++ struct map_info *map = mtd->priv;
++ struct collie_info *collie = map->fldrv_priv;
++ int i;
++ struct flchip *chip;
++ int ret = 0;
++
++ //printk("collie_suspend()\n");
++#if 1
++ for (i=0; !ret && i<collie->numchips; i++) {
++ chip = &collie->chips[i];
++ ret = collie_wait(map,chip);
++
++
++ if (ret){
++ ret = -EAGAIN;
++ } else {
++ chip->state = FL_PM_SUSPENDED;
++ spin_unlock_bh(chip->mutex);
++ }
++ }
++#else
++ for (i=0; !ret && i<collie->numchips; i++) {
++ chip = &collie->chips[i];
++
++ spin_lock_bh(chip->mutex);
++
++ switch(chip->state) {
++ case FL_READY:
++ case FL_STATUS:
++ chip->oldstate = chip->state;
++ chip->state = FL_PM_SUSPENDED;
++ /* No need to wake_up() on this state change -
++ * as the whole point is that nobody can do anything
++ * with the chip now anyway.
++ */
++ case FL_PM_SUSPENDED:
++ break;
++
++ default:
++ ret = -EAGAIN;
++ break;
++ }
++ spin_unlock_bh(chip->mutex);
++ }
++
++ /* Unlock the chips again */
++ if (ret) {
++ for (i--; i >=0; i--) {
++ chip = &collie->chips[i];
++
++ spin_lock_bh(chip->mutex);
++ if (chip->state == FL_PM_SUSPENDED) {
++ chip->state = chip->oldstate;
++ wake_up(&chip->wq);
++ }
++ spin_unlock_bh(chip->mutex);
++ }
++ }
++#endif
++ return ret;
++
++}
++
++static void collie_resume(struct mtd_info *mtd)
++{
++ struct map_info *map = mtd->priv;
++ struct collie_info *collie = map->fldrv_priv;
++ int i;
++ struct flchip *chip;
++
++ //printk("collie_resume()\n");
++#if 0
++ for (i=0; i<collie->numchips; i++) {
++ chip = &collie->chips[i];
++ if (chip->state == FL_PM_SUSPENDED) {
++ map->write32(map,CMD_RESET,chip->start);
++ chip->state = FL_READY;
++ collie_release(chip);
++ }
++ }
++#else
++ for (i=0; i<collie->numchips; i++) {
++ chip = &collie->chips[i];
++
++ spin_lock_bh(chip->mutex);
++
++ if (chip->state == FL_PM_SUSPENDED) {
++ /* We need to force it back to a known state. */
++ //cfi_write(map, CMD(0xff), 0);
++ map->write32(map,CMD_RESET,chip->start);
++ chip->state = FL_READY;
++ wake_up(&chip->wq);
++ }
++
++ spin_unlock_bh(chip->mutex);
++ }
++#endif
++}
++
++static void collie_destroy(struct mtd_info *mtd)
++{
++ struct map_info *map = mtd->priv;
++ struct collie_info *collie = map->fldrv_priv;
++
++ //printk("collie_destroy()\n");
++ //kfree(collie->cmdset_priv);
++ kfree(collie);
++
++}
++
++#if LINUX_VERSION_CODE < 0x020212 && defined(MODULE)
++#define collie_probe_init init_module
++#define collie_probe_exit cleanup_module
++#endif
++
++int __init collie_probe_init(void)
++{
++ printk("MTD Sharp chip driver <ds@lineo.com>\n");
++
++ register_mtd_chip_driver(&collie_chipdrv);
++
++ return 0;
++}
++
++static void __exit collie_probe_exit(void)
++{
++ unregister_mtd_chip_driver(&collie_chipdrv);
++}
++
++module_init(collie_probe_init);
++module_exit(collie_probe_exit);
++
+diff -Nur linux/drivers/mtd/maps/Config.in /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/mtd/maps/Config.in
+--- linux/drivers/mtd/maps/Config.in 2003-05-13 16:18:19.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/mtd/maps/Config.in 2003-06-23 01:47:03.000000000 +0700
+@@ -76,7 +76,7 @@
+ dep_tristate ' CFI Flash device mapped on Nora' CONFIG_MTD_NORA $CONFIG_MTD_CFI
+ dep_tristate ' CFI Flash device mapped on ARM Integrator/P720T' CONFIG_MTD_ARM_INTEGRATOR $CONFIG_MTD_CFI
+ dep_tristate ' Cirrus CDB89712 evaluation board mappings' CONFIG_MTD_CDB89712 $CONFIG_MTD_CFI $CONFIG_ARCH_CDB89712
+- dep_tristate ' CFI Flash device mapped on StrongARM SA11x0' CONFIG_MTD_SA1100 $CONFIG_MTD_CFI $CONFIG_ARCH_SA1100 $CONFIG_MTD_PARTITIONS
++ dep_tristate ' CFI Flash device mapped on StrongARM SA11x0' CONFIG_MTD_SA1100 $CONFIG_ARCH_SA1100 $CONFIG_MTD_PARTITIONS
+ dep_tristate ' CFI Flash device mapped on DC21285 Footbridge' CONFIG_MTD_DC21285 $CONFIG_MTD_CFI $CONFIG_ARCH_FOOTBRIDGE $CONFIG_MTD_PARTITIONS
+ dep_tristate ' CFI Flash device mapped on the XScale IQ80310 board' CONFIG_MTD_IQ80310 $CONFIG_MTD_CFI $CONFIG_ARCH_IQ80310
+ dep_tristate ' CFI Flash device mapped on the FortuNet board' CONFIG_MTD_FORTUNET $CONFIG_MTD_CFI $CONFIG_MTD_PARTITIONS $CONFIG_ARCH_FORTUNET
+diff -Nur linux/drivers/mtd/maps/Makefile /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/mtd/maps/Makefile
+--- linux/drivers/mtd/maps/Makefile 2003-05-13 16:18:19.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/mtd/maps/Makefile 2003-06-23 01:47:03.000000000 +0700
+@@ -35,6 +35,7 @@
+ obj-$(CONFIG_MTD_RPXLITE) += rpxlite.o
+ obj-$(CONFIG_MTD_TQM8XXL) += tqm8xxl.o
+ obj-$(CONFIG_MTD_SA1100) += sa1100-flash.o
++obj-$(CONFIG_MTD_COLLIE) += sa1100-flash.o
+ ifeq ($(CONFIG_ASSABET_NEPONSET),y)
+ obj-$(CONFIG_MTD_SA1100) += neponset-flash.o
+ endif
+diff -Nur linux/drivers/mtd/maps/sa1100-flash.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/mtd/maps/sa1100-flash.c
+--- linux/drivers/mtd/maps/sa1100-flash.c 2003-05-13 16:18:19.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/mtd/maps/sa1100-flash.c 2003-06-23 01:47:03.000000000 +0700
+@@ -790,6 +790,73 @@
+ };
+ #endif
+
++#ifdef CONFIG_SA1100_COLLIE
++#define COLLIE_FLASH_SIZE 0x01000000
++
++static struct mtd_partition collie_partitions[] = {
++ {
++ name: "Angel Monitor",
++ offset: 0,
++ size: 0x00020000,
++ mask_flags: MTD_WRITEABLE
++ },
++ {
++ name: "CF Updater",
++ offset: MTDPART_OFS_APPEND,
++ size: 0x00020000,
++ mask_flags: MTD_WRITEABLE
++ },
++ {
++ name: "Diagnostics",
++ offset: MTDPART_OFS_APPEND,
++ size: 0x00080000,
++ mask_flags: MTD_WRITEABLE
++ },
++ {
++ name: "kernel",
++ offset: MTDPART_OFS_APPEND,
++ size: 0x00100000,
++ },
++#ifdef CONFIG_CACKO_HYBRID_PARTITIONS
++ {
++ name: "cramfs",
++ offset: MTDPART_OFS_APPEND,
++ size: 0x00500000,
++ },
++ {
++ name: "jffs2",
++ offset: MTDPART_OFS_APPEND,
++ size: 0x00920000,
++ },
++#else
++ {
++ name: "jffs2",
++ offset: MTDPART_OFS_APPEND,
++ size: 0x00e20000,
++ },
++#endif
++ {
++ name: "angel stuff",
++ offset: MTDPART_OFS_APPEND,
++ size: 0x00020000,
++ }
++};
++
++#include <asm/arch/tc35143.h>
++#include <asm/ucb1200.h>
++
++static void collie_set_vpp(int vpp)
++{
++ ucb1200_set_io_direction(TC35143_GPIO_VPEN_ON, TC35143_IODIR_OUTPUT);
++ if (vpp) {
++ ucb1200_set_io(TC35143_GPIO_VPEN_ON, TC35143_IODAT_HIGH);
++ } else {
++ ucb1200_set_io(TC35143_GPIO_VPEN_ON, TC35143_IODAT_LOW);
++ }
++}
++
++#endif
++
+ extern int parse_redboot_partitions(struct mtd_info *master, struct mtd_partition **pparts);
+ extern int parse_bootldr_partitions(struct mtd_info *master, struct mtd_partition **pparts);
+
+@@ -965,6 +1032,14 @@
+ sa1100_map.size = YOPY_FLASH_SIZE;
+ }
+ #endif
++#ifdef CONFIG_SA1100_COLLIE
++ if (machine_is_collie()) {
++ parts = collie_partitions;
++ nb_parts = ARRAY_SIZE(collie_partitions);
++ sa1100_map.size = COLLIE_FLASH_SIZE;
++ sa1100_map.set_vpp = collie_set_vpp;
++ }
++#endif
+
+ /*
+ * For simple flash devices, use ioremap to map the flash.
+@@ -985,7 +1060,11 @@
+ * specific machine settings might have been set above.
+ */
+ printk(KERN_NOTICE "SA1100 flash: probing %d-bit flash bus\n", sa1100_map.buswidth*8);
++#ifdef CONFIG_MTD_COLLIE
++ mymtd = do_map_probe("collie", &sa1100_map);
++#else
+ mymtd = do_map_probe("cfi_probe", &sa1100_map);
++#endif
+ ret = -ENXIO;
+ if (!mymtd)
+ goto out_err;
+diff -Nur linux/drivers/s390/block/dasd.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/s390/block/dasd.c
+--- linux/drivers/s390/block/dasd.c 2003-05-13 16:18:23.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/s390/block/dasd.c 2003-06-23 01:47:03.000000000 +0700
+@@ -4290,102 +4290,38 @@
+ #ifdef CONFIG_DASD_DIAG
+ dasd_diag_cleanup ();
+ DASD_DRIVER_DEBUG_EVENT (1, "cleanup_dasd",
+- "DIAG discipline %s", "success");
+- printk (KERN_INFO PRINTK_HEADER
+- "De-Registered DIAG discipline successfully\n");
+-#endif /* CONFIG_DASD_ECKD_BUILTIN */
+- }
+-#ifdef CONFIG_DASD_FBA
+- dasd_fba_cleanup ();
+- DASD_DRIVER_DEBUG_EVENT (1, "cleanup_dasd",
+- "FBA discipline %s", "success");
+- printk (KERN_INFO PRINTK_HEADER
+- "De-Registered FBA discipline successfully\n");
+-#endif /* CONFIG_DASD_ECKD_BUILTIN */
+-#ifdef CONFIG_DASD_ECKD
+- dasd_eckd_cleanup ();
+- DASD_DRIVER_DEBUG_EVENT (1, "cleanup_dasd",
+- "ECKD discipline %s", "success");
+- printk (KERN_INFO PRINTK_HEADER
+- "De-Registered ECKD discipline successfully\n");
+-#endif /* CONFIG_DASD_ECKD_BUILTIN */
+-
+- dasd_proc_cleanup ();
+-
+- list_for_each_safe (l, n, &dasd_major_info[0].list) {
+- major_info = list_entry (l, major_info_t, list);
+- for (i = 0; i < DASD_PER_MAJOR; i++) {
+- kfree (major_info->dasd_device[i]);
+- }
+- if ((major_info->flags & DASD_MAJOR_INFO_REGISTERED) &&
+- (rc = dasd_unregister_major (major_info)) == 0) {
+- DASD_DRIVER_DEBUG_EVENT (1, "cleanup_dasd",
+- "major %d: success",
+- major_info->gendisk.major);
+- printk (KERN_INFO PRINTK_HEADER
+- "Unregistered successfully from major no %u\n",
+- major_info->gendisk.major);
+- } else {
+- DASD_DRIVER_DEBUG_EVENT (1, "cleanup_dasd",
+- "major %d: failed",
+- major_info->gendisk.major);
+- printk (KERN_WARNING PRINTK_HEADER
+- "Couldn't unregister successfully from major no %d rc = %d\n",
+- major_info->gendisk.major, rc);
+- }
+- }
+- list_for_each_safe (l, n, &dasd_range_head.list) {
+- range = list_entry (l, dasd_range_t, list);
+- dasd_remove_range(range);
+- }
+-
+-#ifndef MODULE
+- for( i = 0; i < 256; i++ )
+- if ( dasd[i] ) {
+- kfree(dasd[i]);
+- dasd[i] = NULL;
+- }
+-#endif /* MODULE */
+- if (dasd_devfs_handle)
+- devfs_unregister(dasd_devfs_handle);
+- if (dasd_debug_area != NULL )
+- debug_unregister(dasd_debug_area);
+- printk (KERN_INFO PRINTK_HEADER "shutdown completed\n");
+- DASD_DRIVER_DEBUG_EVENT(0,"cleanup_dasd","%s","LEAVE");
+-}
+-
+-#ifdef MODULE
+-int
+-init_module (void)
+-{
+- int rc = 0;
+- rc = dasd_init ();
+- return rc;
+-}
+-
+-void
+-cleanup_module (void)
+-{
+- cleanup_dasd ();
+- return;
+-}
+-#endif
+-
+-/*
+- * Overrides for Emacs so that we follow Linus's tabbing style.
+- * Emacs will notice this stuff at the end of the file and automatically
+- * adjust the settings for this buffer only. This must remain at the end
+- * of the file.
+- * ---------------------------------------------------------------------------
+- * Local variables:
+- * c-indent-level: 4
+- * c-brace-imaginary-offset: 0
+- * c-brace-offset: -4
+- * c-argdecl-indent: 4
+- * c-label-offset: -4
+- * c-continued-statement-offset: 4
+- * c-continued-brace-offset: 0
+- * indent-tabs-mode: nil
+- * tab-width: 8
+- * End:
+- */
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
+\ No newline at end of file
+diff -Nur linux/drivers/usb/device/bi/Config.in /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/usb/device/bi/Config.in
+--- linux/drivers/usb/device/bi/Config.in 2003-05-13 16:18:44.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/usb/device/bi/Config.in 2003-06-23 01:49:28.000000000 +0700
+@@ -12,8 +12,8 @@
+ dep_mbool ' USB traffic keeps device awake' CONFIG_USBD_TRAFFIC_KEEPAWAKE $CONFIG_SA1110_CALYPSO
+
+ if [ "$CONFIG_USBD_SA1100_BUS" = "y" -o "$CONFIG_USBD_SA1100_BUS" = "m" ]; then
+- int ' USBD Stall watchdog timeout (seconds, 0 for none)' CONFIG_USBD_STALL_TIMEOUT "0" $CONFIG_USBD_SA1100_BUS
+- int ' USBD Stall disconnect duration (seconds)' CONFIG_USBD_STALL_DISCONNECT_DURATION "2" $CONFIG_USBD_SA1100_BUS
++ int ' USBD Stall watchdog timeout (seconds, 0 for none)' CONFIG_USBD_STALL_TIMEOUT "0"
++ int ' USBD Stall disconnect duration (seconds)' CONFIG_USBD_STALL_DISCONNECT_DURATION "2"
+ fi
+ fi
+
+diff -Nur linux/drivers/usb/device/net_fd/Config.in /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/usb/device/net_fd/Config.in
+--- linux/drivers/usb/device/net_fd/Config.in 2003-05-13 16:18:45.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/usb/device/net_fd/Config.in 2003-06-23 01:49:06.000000000 +0700
+@@ -32,7 +32,7 @@
+ if [ "$CONFIG_ARCH_SA1110" = "n" ]; then
+ bool ' RNDIS Mode (not working yet)' CONFIG_USBD_NET_RNDIS
+ fi
+- string ' Default Remote MAC Address (e.g. 400002000001)' CONFIG_USBD_NET_REMOTE_MACADDR ""
++ string ' Default Remote MAC Address (e.g. 400002000001)' CONFIG_USBD_NET_REMOTE_MACADDR "400002000001"
+ hex ' RemoteNetwork OUI (e.g. 400002)' CONFIG_USBD_NET_REMOTE_OUI "400002"
+ bool ' Use MAC Address as device Serial Number' CONFIG_USBD_MAC_AS_SERIAL_NUMBER
+ fi
+diff -Nur linux/drivers/video/Config.in /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/video/Config.in
+--- linux/drivers/video/Config.in 2003-05-13 16:18:57.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/video/Config.in 2003-06-23 01:47:03.000000000 +0700
+@@ -459,6 +459,8 @@
+ bool ' VGA 8x16 font' CONFIG_FONT_8x16
+ if [ "$CONFIG_FBCON_FONTWIDTH8_ONLY" = "n" ]; then
+ bool ' Mac console 6x11 font (not supported by all drivers)' CONFIG_FONT_6x11
++ bool ' X11 Clean 5x8 font (not supported by all drivers)' CONFIG_FONT_5x8
++ bool ' X11 Clean 4x6 font (not supported by all drivers)' CONFIG_FONT_4x6
+ fi
+ bool ' Pearl (old m68k) console 8x8 font' CONFIG_FONT_PEARL_8x8
+ bool ' Acorn console 8x8 font' CONFIG_FONT_ACORN_8x8
+@@ -472,6 +474,8 @@
+ if [ "$CONFIG_FBCON_FONTWIDTH8_ONLY" = "n" ]; then
+ bool ' Sparc console 12x22 font (not supported by all drivers)' CONFIG_FONT_SUN12x22
+ bool ' Mac console 6x11 font (not supported by all drivers)' CONFIG_FONT_6x11
++ bool ' X11 Clean 5x8 font (not supported by all drivers)' CONFIG_FONT_5x8
++ bool ' X11 Clean 4x6 font (not supported by all drivers)' CONFIG_FONT_4x6
+ fi
+ bool ' Pearl (old m68k) console 8x8 font' CONFIG_FONT_PEARL_8x8
+ bool ' Acorn console 8x8 font' CONFIG_FONT_ACORN_8x8
+diff -Nur linux/drivers/video/Config.in~ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/video/Config.in~
+--- linux/drivers/video/Config.in~ 1970-01-01 07:00:00.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/video/Config.in~ 2003-06-23 01:47:03.000000000 +0700
+@@ -0,0 +1,496 @@
++#
++# Video configuration
++#
++
++mainmenu_option next_comment
++comment 'Frame-buffer support'
++
++bool 'Support for frame buffer devices (EXPERIMENTAL)' CONFIG_FB
++
++if [ "$CONFIG_FB" = "y" ]; then
++ define_bool CONFIG_DUMMY_CONSOLE y
++ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
++ if [ "$CONFIG_PCI" = "y" ]; then
++ tristate ' nVidia Riva support (EXPERIMENTAL)' CONFIG_FB_RIVA
++ fi
++ if [ "$CONFIG_AMIGA" = "y" -o "$CONFIG_PCI" = "y" ]; then
++ tristate ' Cirrus Logic support (EXPERIMENTAL)' CONFIG_FB_CLGEN
++ tristate ' Permedia2 support (EXPERIMENTAL)' CONFIG_FB_PM2
++ if [ "$CONFIG_FB_PM2" = "y" -o "$CONFIG_FB_PM2" = "m" ]; then
++ if [ "$CONFIG_PCI" = "y" ]; then
++ bool ' enable FIFO disconnect feature' CONFIG_FB_PM2_FIFO_DISCONNECT
++ bool ' generic Permedia2 PCI board support' CONFIG_FB_PM2_PCI
++ fi
++ if [ "$CONFIG_AMIGA" = "y" ]; then
++ bool ' Phase5 CVisionPPC/BVisionPPC support' CONFIG_FB_PM2_CVPPC
++ fi
++ fi
++ fi
++ if [ "$CONFIG_PCI" = "y" ]; then
++ tristate ' Permedia3 support (EXPERIMENTAL)' CONFIG_FB_PM3
++ fi
++ fi
++ if [ "$CONFIG_ARM" = "y" ]; then
++ dep_bool ' Collie LCD support' CONFIG_FB_COLLIE $CONFIG_SA1100_COLLIE
++ dep_bool ' Acorn VIDC support' CONFIG_FB_ACORN $CONFIG_ARCH_ACORN
++ dep_bool ' Anakin LCD support' CONFIG_FB_ANAKIN $CONFIG_ARCH_ANAKIN
++ dep_bool ' CLPS711X LCD support' CONFIG_FB_CLPS711X $CONFIG_ARCH_CLPS711X
++ dep_bool ' SA-1100 LCD support' CONFIG_FB_SA1100 $CONFIG_ARCH_SA1100
++ if [ "$CONFIG_FB_SA1100" = "y" -a "$CONFIG_SA1100_CERF" = "y" ]; then
++ choice 'CerfBoard LCD Display Size' \
++ "3.8_Color CONFIG_CERF_LCD_38_A \
++ 3.8_Mono CONFIG_CERF_LCD_38_B \
++ 5.7 CONFIG_CERF_LCD_57_A \
++ 7.2 CONFIG_CERF_LCD_72_A" 5.7
++ fi
++ if [ "$CONFIG_FB_SA1100" = "y" -a "$CONFIG_SA1100_CERF_CPLD" = "y" ]; then
++ bool 'Cerfboard Backlight (CerfPDA)' CONFIG_SA1100_CERF_LCD_BACKLIGHT
++ fi
++ dep_bool ' PXA LCD support' CONFIG_FB_PXA $CONFIG_ARCH_PXA
++ if [ "$CONFIG_FB_PXA" = "y" -a "$CONFIG_PXA_CERF_PDA" = "y" ]; then
++ choice 'LCD Bit Depth' \
++ "8-Bpp CONFIG_FB_PXA_8BPP \
++ 16-Bpp CONFIG_FB_PXA_16BPP" Bit-Depth
++ fi
++ dep_bool ' Cotulla LCD support' CONFIG_FB_COTULLA $CONFIG_ARCH_PXA
++ dep_bool ' Poodle LCD support' CONFIG_FB_POODLE $CONFIG_ARCH_PXA_POODLE
++ if [ "$CONFIG_FB_POODLE" = "y" ]; then
++ dep_bool ' Cached FB support' CONFIG_POODLE_CONSISTENT_ALLOC $CONFIG_FB_POODLE
++ fi
++ dep_bool ' Corgi LCD support' CONFIG_FB_CORGI $CONFIG_ARCH_PXA_CORGI
++ dep_bool ' SHARP LOGO screen support' CONFIG_SHARP_LOGO_SCREEN $CONFIG_ARCH_SHARP_SL
++ fi
++ dep_tristate ' CyberPro 2000/2010/5000 support' CONFIG_FB_CYBER2000 $CONFIG_PCI
++ if [ "$CONFIG_APOLLO" = "y" ]; then
++ define_bool CONFIG_FB_APOLLO y
++ fi
++ if [ "$CONFIG_Q40" = "y" ]; then
++ define_bool CONFIG_FB_Q40 y
++ fi
++ if [ "$CONFIG_AMIGA" = "y" ]; then
++ tristate ' Amiga native chipset support' CONFIG_FB_AMIGA
++ if [ "$CONFIG_FB_AMIGA" != "n" ]; then
++ bool ' Amiga OCS chipset support' CONFIG_FB_AMIGA_OCS
++ bool ' Amiga ECS chipset support' CONFIG_FB_AMIGA_ECS
++ bool ' Amiga AGA chipset support' CONFIG_FB_AMIGA_AGA
++ fi
++ fi
++ if [ "$CONFIG_ZORRO" = "y" ]; then
++ tristate ' Amiga CyberVision support' CONFIG_FB_CYBER
++ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
++ bool ' Amiga CyberVision3D support (EXPERIMENTAL)' CONFIG_FB_VIRGE
++ tristate ' Amiga RetinaZ3 support (EXPERIMENTAL)' CONFIG_FB_RETINAZ3
++ bool ' Amiga FrameMaster II/Rainbow II support (EXPERIMENTAL)' CONFIG_FB_FM2
++ fi
++ fi
++ if [ "$CONFIG_ATARI" = "y" ]; then
++ bool ' Atari native chipset support' CONFIG_FB_ATARI
++ tristate ' ATI Mach64 display support' CONFIG_FB_ATY
++ if [ "$CONFIG_FB_ATY" != "n" ]; then
++ define_bool CONFIG_FB_ATY_GX y
++ fi
++ fi
++ if [ "$CONFIG_PPC" = "y" ]; then
++ dep_bool ' Open Firmware frame buffer device support' CONFIG_FB_OF $CONFIG_ALL_PPC
++ dep_bool ' Apple "control" display support' CONFIG_FB_CONTROL $CONFIG_ALL_PPC
++ dep_bool ' Apple "platinum" display support' CONFIG_FB_PLATINUM $CONFIG_ALL_PPC
++ dep_bool ' Apple "valkyrie" display support' CONFIG_FB_VALKYRIE $CONFIG_ALL_PPC
++ bool ' Chips 65550 display support' CONFIG_FB_CT65550
++ bool ' IMS Twin Turbo display support' CONFIG_FB_IMSTT
++ bool ' S3 Trio display support' CONFIG_FB_S3TRIO
++ tristate ' VGA 16-color graphics console' CONFIG_FB_VGA16
++ fi
++ if [ "$CONFIG_PARISC" = "y" ]; then
++ bool ' Generic STI frame buffer device support' CONFIG_FB_STI
++ fi
++ if [ "$CONFIG_MAC" = "y" ]; then
++ define_bool CONFIG_FB_MAC y
++ bool ' Apple "valkyrie" display support' CONFIG_FB_VALKYRIE
++# bool ' Apple DAFB display support' CONFIG_FB_DAFB
++ fi
++ if [ "$CONFIG_HP300" = "y" ]; then
++ define_bool CONFIG_FB_HP300 y
++ fi
++ if [ "$ARCH" = "alpha" ]; then
++ tristate ' TGA framebuffer support' CONFIG_FB_TGA
++ fi
++ if [ "$ARCH" = "i386" ]; then
++ bool ' VESA VGA graphics console' CONFIG_FB_VESA
++ tristate ' VGA 16-color graphics console' CONFIG_FB_VGA16
++ tristate ' Hercules mono graphics console (EXPERIMENTAL)' CONFIG_FB_HGA
++ define_bool CONFIG_VIDEO_SELECT y
++ fi
++ if [ "$CONFIG_VISWS" = "y" ]; then
++ tristate ' SGI Visual Workstation framebuffer support' CONFIG_FB_SGIVW
++ define_bool CONFIG_BUS_I2C y
++ fi
++ if [ "$CONFIG_SUN3" = "y" -o "$CONFIG_SUN3X" = "y" ]; then
++ bool ' Sun3 framebuffer support' CONFIG_FB_SUN3
++ if [ "$CONFIG_FB_SUN3" != "n" ]; then
++ bool ' BWtwo support' CONFIG_FB_BWTWO
++ bool ' CGsix (GX,TurboGX) support' CONFIG_FB_CGSIX
++ fi
++ fi
++ if [ "$CONFIG_SH_DREAMCAST" = "y" ]; then
++ tristate ' NEC PowerVR 2 display support' CONFIG_FB_PVR2
++ dep_bool ' Debug pvr2fb' CONFIG_FB_PVR2_DEBUG $CONFIG_FB_PVR2
++ fi
++ if [ "$CONFIG_SUPERH" = "y" ]; then
++ bool ' Epson 1355 framebuffer support' CONFIG_FB_E1355
++ if [ "$CONFIG_FB_E1355" = "y" ]; then
++ hex ' Register Base Address' CONFIG_E1355_REG_BASE a8000000
++ hex ' Framebuffer Base Address' CONFIG_E1355_FB_BASE a8200000
++ fi
++ fi
++ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
++ if [ "$CONFIG_PCI" != "n" ]; then
++ tristate ' Matrox acceleration (EXPERIMENTAL)' CONFIG_FB_MATROX
++ if [ "$CONFIG_FB_MATROX" != "n" ]; then
++ bool ' Millennium I/II support' CONFIG_FB_MATROX_MILLENIUM
++ bool ' Mystique support' CONFIG_FB_MATROX_MYSTIQUE
++ bool ' G100/G200/G400/G450/G550 support' CONFIG_FB_MATROX_G100
++ if [ "$CONFIG_I2C" != "n" ]; then
++ dep_tristate ' Matrox I2C support' CONFIG_FB_MATROX_I2C $CONFIG_FB_MATROX $CONFIG_I2C_ALGOBIT
++ if [ "$CONFIG_FB_MATROX_G100" = "y" ]; then
++ dep_tristate ' G400 second head support' CONFIG_FB_MATROX_MAVEN $CONFIG_FB_MATROX_I2C
++ fi
++ fi
++ dep_tristate ' G450/G550 second head support' CONFIG_FB_MATROX_G450 $CONFIG_FB_MATROX_G100
++ bool ' Multihead support' CONFIG_FB_MATROX_MULTIHEAD
++ fi
++ tristate ' ATI Mach64 display support (EXPERIMENTAL)' CONFIG_FB_ATY
++ if [ "$CONFIG_FB_ATY" != "n" ]; then
++ bool ' Mach64 GX support (EXPERIMENTAL)' CONFIG_FB_ATY_GX
++ bool ' Mach64 CT/VT/GT/LT (incl. 3D RAGE) support' CONFIG_FB_ATY_CT
++ fi
++ tristate ' ATI Radeon display support (EXPERIMENTAL)' CONFIG_FB_RADEON
++ tristate ' ATI Rage128 display support (EXPERIMENTAL)' CONFIG_FB_ATY128
++ tristate ' SIS acceleration (EXPERIMENTAL)' CONFIG_FB_SIS
++ if [ "$CONFIG_FB_SIS" != "n" ]; then
++ bool ' SIS 630/540/730 support' CONFIG_FB_SIS_300
++ bool ' SIS 315H/315 support' CONFIG_FB_SIS_315
++ fi
++ tristate ' 3Dfx Banshee/Voodoo3 display support (EXPERIMENTAL)' CONFIG_FB_3DFX
++ tristate ' 3Dfx Voodoo Graphics (sst1) support (EXPERIMENTAL)' CONFIG_FB_VOODOO1
++ tristate ' Trident support (EXPERIMENTAL)' CONFIG_FB_TRIDENT
++ fi
++ fi
++ if [ "$ARCH" = "sparc" -o "$ARCH" = "sparc64" ]; then
++ bool ' SBUS and UPA framebuffers' CONFIG_FB_SBUS
++ if [ "$CONFIG_FB_SBUS" != "n" ]; then
++ if [ "$ARCH" = "sparc64" ]; then
++ bool ' Creator/Creator3D support' CONFIG_FB_CREATOR
++ fi
++ bool ' CGsix (GX,TurboGX) support' CONFIG_FB_CGSIX
++ bool ' BWtwo support' CONFIG_FB_BWTWO
++ bool ' CGthree support' CONFIG_FB_CGTHREE
++ if [ "$ARCH" = "sparc" ]; then
++ bool ' TCX (SS4/SS5 only) support' CONFIG_FB_TCX
++ bool ' CGfourteen (SX) support' CONFIG_FB_CGFOURTEEN
++ bool ' P9100 (Sparcbook 3 only) support' CONFIG_FB_P9100
++ fi
++ bool ' Leo (ZX) support' CONFIG_FB_LEO
++ fi
++ fi
++ if [ "$ARCH" = "sparc" ]; then
++ if [ "$CONFIG_PCI" != "n" ]; then
++ bool ' PCI framebuffers' CONFIG_FB_PCI
++ if [ "$CONFIG_FB_PCI" != "n" ]; then
++ bool ' IGA 168x display support' CONFIG_FB_IGA
++ fi
++ fi
++ fi
++ if [ "$ARCH" = "sparc64" ]; then
++ if [ "$CONFIG_PCI" != "n" ]; then
++ bool ' PCI framebuffers' CONFIG_FB_PCI
++ if [ "$CONFIG_FB_PCI" != "n" ]; then
++ tristate ' ATI Mach64 display support' CONFIG_FB_ATY
++ if [ "$CONFIG_FB_ATY" != "n" ]; then
++ define_bool CONFIG_FB_ATY_CT y
++ fi
++ fi
++ fi
++ fi
++ if [ "$CONFIG_HD64461" = "y" ]; then
++ tristate ' HD64461 Frame Buffer support' CONFIG_FB_HIT
++ fi
++ if [ "$CONFIG_DECSTATION" = "y" ]; then
++ if [ "$CONFIG_TC" = "y" ]; then
++ bool ' PMAG-BA TURBOchannel framebuffer support' CONFIG_FB_PMAG_BA
++ bool ' PMAGB-B TURBOchannel framebuffer spport' CONFIG_FB_PMAGB_B
++ bool ' Maxine (Personal DECstation) onboard framebuffer spport' CONFIG_FB_MAXINE
++ fi
++ fi
++ if [ "$CONFIG_NINO" = "y" ]; then
++ bool ' TMPTX3912/PR31700 frame buffer support' CONFIG_FB_TX3912
++ fi
++ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
++ tristate ' Virtual Frame Buffer support (ONLY FOR TESTING!)' CONFIG_FB_VIRTUAL
++ fi
++
++ bool ' Advanced low level driver options' CONFIG_FBCON_ADVANCED
++ if [ "$CONFIG_FBCON_ADVANCED" = "y" ]; then
++ tristate ' Monochrome support' CONFIG_FBCON_MFB
++ tristate ' 2 bpp packed pixels support' CONFIG_FBCON_CFB2
++ tristate ' 4 bpp packed pixels support' CONFIG_FBCON_CFB4
++ tristate ' 8 bpp packed pixels support' CONFIG_FBCON_CFB8
++ tristate ' 16 bpp packed pixels support' CONFIG_FBCON_CFB16
++ tristate ' 24 bpp packed pixels support' CONFIG_FBCON_CFB24
++ tristate ' 32 bpp packed pixels support' CONFIG_FBCON_CFB32
++ tristate ' Amiga bitplanes support' CONFIG_FBCON_AFB
++ tristate ' Amiga interleaved bitplanes support' CONFIG_FBCON_ILBM
++ tristate ' Atari interleaved bitplanes (2 planes) support' CONFIG_FBCON_IPLAN2P2
++ tristate ' Atari interleaved bitplanes (4 planes) support' CONFIG_FBCON_IPLAN2P4
++ tristate ' Atari interleaved bitplanes (8 planes) support' CONFIG_FBCON_IPLAN2P8
++# tristate ' Atari interleaved bitplanes (16 planes) support' CONFIG_FBCON_IPLAN2P16
++ tristate ' Mac variable bpp packed pixels support' CONFIG_FBCON_MAC
++ tristate ' VGA 16-color planar support' CONFIG_FBCON_VGA_PLANES
++ tristate ' VGA characters/attributes support' CONFIG_FBCON_VGA
++ tristate ' HGA monochrome support (EXPERIMENTAL)' CONFIG_FBCON_HGA
++ else
++ # Guess what we need
++ if [ "$CONFIG_FB_ACORN" = "y" -o "$CONFIG_FB_AMIGA" = "y" -o \
++ "$CONFIG_FB_ATARI" = "y" -o "$CONFIG_FB_CYBER" = "y" -o \
++ "$CONFIG_FB_MAC" = "y" -o "$CONFIG_FB_RETINAZ3" = "y" -o \
++ "$CONFIG_FB_VIRGE" = "y" -o "$CONFIG_FB_VIRTUAL" = "y" -o \
++ "$CONFIG_FB_BWTWO" = "y" -o "$CONFIG_FB_CLGEN" = "y" -o \
++ "$CONFIG_FB_TX3912" = "y" -o "$CONFIG_FB_CLPS711X" = "y" ]; then
++ define_tristate CONFIG_FBCON_MFB y
++ else
++ if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_AMIGA" = "m" -o \
++ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_CYBER" = "m" -o \
++ "$CONFIG_FB_MAC" = "m" -o "$CONFIG_FB_RETINAZ3" = "m" -o \
++ "$CONFIG_FB_VIRGE" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \
++ "$CONFIG_FB_BWTWO" = "m" -o "$CONFIG_FB_CLGEN" = "m" -o \
++ "$CONFIG_FB_TX3912" = "m" -o "$CONFIG_FB_CLPS711X" = "m" ]; then
++ define_tristate CONFIG_FBCON_MFB m
++ fi
++ fi
++ if [ "$CONFIG_FB_ACORN" = "y" -o "$CONFIG_FB_MAC" = "y" -o \
++ "$CONFIG_FB_SA1100" = "y" -o "$CONFIG_FB_VIRTUAL" = "y" -o \
++ "$CONFIG_FB_TX3912" = "y" -o "$CONFIG_FB_CLPS711X" = "y" -o \
++ "$CONFIG_FB_PXA" = "y" ]; then
++ define_tristate CONFIG_FBCON_CFB2 y
++ define_tristate CONFIG_FBCON_CFB4 y
++ else
++ if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_MAC" = "m" -o \
++ "$CONFIG_FB_SA1100" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \
++ "$CONFIG_FB_TX3912" = "m" -o "$CONFIG_FB_CLPS711X" = "m" ]; then
++ define_tristate CONFIG_FBCON_CFB2 m
++ define_tristate CONFIG_FBCON_CFB4 m
++ fi
++ fi
++ if [ "$CONFIG_FB_ACORN" = "y" -o "$CONFIG_FB_ATARI" = "y" -o \
++ "$CONFIG_FB_ATY" = "y" -o "$CONFIG_FB_MAC" = "y" -o \
++ "$CONFIG_FB_OF" = "y" -o "$CONFIG_FB_TGA" = "y" -o \
++ "$CONFIG_FB_VESA" = "y" -o "$CONFIG_FB_VIRTUAL" = "y" -o \
++ "$CONFIG_FB_TCX" = "y" -o "$CONFIG_FB_CGTHREE" = "y" -o \
++ "$CONFIG_FB_CONTROL" = "y" -o "$CONFIG_FB_CLGEN" = "y" -o \
++ "$CONFIG_FB_CGFOURTEEN" = "y" -o "$CONFIG_FB_G364" = "y" -o \
++ "$CONFIG_FB_VIRGE" = "y" -o "$CONFIG_FB_CYBER" = "y" -o \
++ "$CONFIG_FB_VALKYRIE" = "y" -o "$CONFIG_FB_PLATINUM" = "y" -o \
++ "$CONFIG_FB_IGA" = "y" -o "$CONFIG_FB_MATROX" = "y" -o \
++ "$CONFIG_FB_CT65550" = "y" -o "$CONFIG_FB_PM2" = "y" -o \
++ "$CONFIG_FB_P9100" = "y" -o "$CONFIG_FB_ATY128" = "y" -o \
++ "$CONFIG_FB_RIVA" = "y" -o "$CONFIG_FB_RADEON" = "y" -o \
++ "$CONFIG_FB_SGIVW" = "y" -o "$CONFIG_FB_CYBER2000" = "y" -o \
++ "$CONFIG_FB_SA1100" = "y" -o "$CONFIG_FB_3DFX" = "y" -o \
++ "$CONFIG_FB_PMAG_BA" = "y" -o "$CONFIG_FB_PMAGB_B" = "y" -o \
++ "$CONFIG_FB_MAXINE" = "y" -o "$CONFIG_FB_TX3912" = "y" -o \
++ "$CONFIG_FB_SIS" = "y" -o "$CONFIG_FB_PM3" = "y" -o \
++ "$CONFIG_FB_PXA" = "y" ]; then
++ define_tristate CONFIG_FBCON_CFB8 y
++ else
++ if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_ATARI" = "m" -o \
++ "$CONFIG_FB_ATY" = "m" -o "$CONFIG_FB_MAC" = "m" -o \
++ "$CONFIG_FB_OF" = "m" -o "$CONFIG_FB_TGA" = "m" -o \
++ "$CONFIG_FB_VESA" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \
++ "$CONFIG_FB_TCX" = "m" -o "$CONFIG_FB_CGTHREE" = "m" -o \
++ "$CONFIG_FB_CONTROL" = "m" -o "$CONFIG_FB_CLGEN" = "m" -o \
++ "$CONFIG_FB_CGFOURTEEN" = "m" -o "$CONFIG_FB_G364" = "m" -o \
++ "$CONFIG_FB_VIRGE" = "m" -o "$CONFIG_FB_CYBER" = "m" -o \
++ "$CONFIG_FB_VALKYRIE" = "m" -o "$CONFIG_FB_PLATINUM" = "m" -o \
++ "$CONFIG_FB_IGA" = "m" -o "$CONFIG_FB_MATROX" = "m" -o \
++ "$CONFIG_FB_CT65550" = "m" -o "$CONFIG_FB_PM2" = "m" -o \
++ "$CONFIG_FB_P9100" = "m" -o "$CONFIG_FB_ATY128" = "m" -o \
++ "$CONFIG_FB_RIVA" = "m" -o "$CONFIG_FB_3DFX" = "m" -o \
++ "$CONFIG_FB_SGIVW" = "m" -o "$CONFIG_FB_CYBER2000" = "m" -o \
++ "$CONFIG_FB_PMAG_BA" = "m" -o "$CONFIG_FB_PMAGB_B" = "m" -o \
++ "$CONFIG_FB_MAXINE" = "m" -o "$CONFIG_FB_RADEON" = "m" -o \
++ "$CONFIG_FB_SA1100" = "m" -o "$CONFIG_FB_SIS" = "m" -o \
++ "$CONFIG_FB_TX3912" = "m" -o "$CONFIG_FB_PM3" = "m" ]; then
++ define_tristate CONFIG_FBCON_CFB8 m
++ fi
++ fi
++ if [ "$CONFIG_FB_ATARI" = "y" -o "$CONFIG_FB_ATY" = "y" -o \
++ "$CONFIG_FB_MAC" = "y" -o "$CONFIG_FB_VESA" = "y" -o \
++ "$CONFIG_FB_VIRTUAL" = "y" -o "$CONFIG_FB_TBOX" = "y" -o \
++ "$CONFIG_FB_Q40" = "y" -o "$CONFIG_FB_RADEON" = "y" -o \
++ "$CONFIG_FB_CONTROL" = "y" -o "$CONFIG_FB_CLGEN" = "y" -o \
++ "$CONFIG_FB_VIRGE" = "y" -o "$CONFIG_FB_CYBER" = "y" -o \
++ "$CONFIG_FB_VALKYRIE" = "y" -o "$CONFIG_FB_PLATINUM" = "y" -o \
++ "$CONFIG_FB_CT65550" = "y" -o "$CONFIG_FB_MATROX" = "y" -o \
++ "$CONFIG_FB_PM2" = "y" -o "$CONFIG_FB_SGIVW" = "y" -o \
++ "$CONFIG_FB_RIVA" = "y" -o "$CONFIG_FB_ATY128" = "y" -o \
++ "$CONFIG_FB_CYBER2000" = "y" -o "$CONFIG_FB_3DFX" = "y" -o \
++ "$CONFIG_FB_SIS" = "y" -o "$CONFIG_FB_SA1100" = "y" -o \
++ "$CONFIG_FB_PVR2" = "y" -o "$CONFIG_FB_VOODOO1" = "y" -o \
++ "$CONFIG_FB_ANAKIN" = "y" -o "$CONFIG_FB_PM3" = "y" -o \
++ "$CONFIG_FB_PXA" = "y" ]; then
++ define_tristate CONFIG_FBCON_CFB16 y
++ else
++ if [ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_ATY" = "m" -o \
++ "$CONFIG_FB_MAC" = "m" -o "$CONFIG_FB_VESA" = "m" -o \
++ "$CONFIG_FB_VIRTUAL" = "m" -o "$CONFIG_FB_TBOX" = "m" -o \
++ "$CONFIG_FB_Q40" = "m" -o "$CONFIG_FB_3DFX" = "m" -o \
++ "$CONFIG_FB_CONTROL" = "m" -o "$CONFIG_FB_CLGEN" = "m" -o \
++ "$CONFIG_FB_VIRGE" = "m" -o "$CONFIG_FB_CYBER" = "m" -o \
++ "$CONFIG_FB_VALKYRIE" = "m" -o "$CONFIG_FB_PLATINUM" = "m" -o \
++ "$CONFIG_FB_CT65550" = "m" -o "$CONFIG_FB_MATROX" = "m" -o \
++ "$CONFIG_FB_PM2" = "m" -o "$CONFIG_FB_SGIVW" = "m" -o \
++ "$CONFIG_FB_RIVA" = "m" -o "$CONFIG_FB_ATY128" = "m" -o \
++ "$CONFIG_FB_CYBER2000" = "m" -o "$CONFIG_FB_SIS" = "m" -o \
++ "$CONFIG_FB_SA1100" = "m" -o "$CONFIG_FB_RADEON" = "m" -o \
++ "$CONFIG_FB_PVR2" = "m" -o "$CONFIG_FB_VOODOO1" = "m" -o \
++ "$CONFIG_FB_ANAKIN" = "m" -o "$CONFIG_FB_PM3" = "m" ]; then
++ define_tristate CONFIG_FBCON_CFB16 m
++ fi
++ fi
++ if [ "$CONFIG_FB_ATY" = "y" -o "$CONFIG_FB_VIRTUAL" = "y" -o \
++ "$CONFIG_FB_CLGEN" = "y" -o "$CONFIG_FB_VESA" = "y" -o \
++ "$CONFIG_FB_MATROX" = "y" -o "$CONFIG_FB_PM2" = "y" -o \
++ "$CONFIG_FB_ATY128" = "y" -o "$CONFIG_FB_RADEON" = "y" -o \
++ "$CONFIG_FB_CYBER2000" = "y" -o "$CONFIG_FB_PVR2" = "y" -o \
++ "$CONFIG_FB_VOODOO1" = "y" -o "$CONFIG_FB_PM3" = "y" ]; then
++ define_tristate CONFIG_FBCON_CFB24 y
++ else
++ if [ "$CONFIG_FB_ATY" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \
++ "$CONFIG_FB_CLGEN" = "m" -o "$CONFIG_FB_VESA" = "m" -o \
++ "$CONFIG_FB_MATROX" = "m" -o "$CONFIG_FB_PM2" = "m" -o \
++ "$CONFIG_FB_ATY128" = "m" -o "$CONFIG_FB_RADEON" = "m" -o \
++ "$CONFIG_FB_CYBER2000" = "m" -o "$CONFIG_FB_PVR2" = "m" -o \
++ "$CONFIG_FB_VOODOO1" = "m" -o "$cONFIG_FB_PM3" = "m" ]; then
++ define_tristate CONFIG_FBCON_CFB24 m
++ fi
++ fi
++ if [ "$CONFIG_FB_ATARI" = "y" -o "$CONFIG_FB_ATY" = "y" -o \
++ "$CONFIG_FB_VESA" = "y" -o "$CONFIG_FB_VIRTUAL" = "y" -o \
++ "$CONFIG_FB_CONTROL" = "y" -o "$CONFIG_FB_CLGEN" = "y" -o \
++ "$CONFIG_FB_TGA" = "y" -o "$CONFIG_FB_PLATINUM" = "y" -o \
++ "$CONFIG_FB_MATROX" = "y" -o "$CONFIG_FB_PM2" = "y" -o \
++ "$CONFIG_FB_RIVA" = "y" -o "$CONFIG_FB_ATY128" = "y" -o \
++ "$CONFIG_FB_FM2" = "y" -o "$CONFIG_FB_SGIVW" = "y" -o \
++ "$CONFIG_FB_RADEON" = "y" -o "$CONFIG_FB_PVR2" = "y" -o \
++ "$CONFIG_FB_3DFX" = "y" -o "$CONFIG_FB_SIS" = "y" -o \
++ "$CONFIG_FB_VOODOO1" = "y" -o "$CONFIG_FB_PM3" = "y" ]; then
++ define_tristate CONFIG_FBCON_CFB32 y
++ else
++ if [ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_ATY" = "m" -o \
++ "$CONFIG_FB_VESA" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \
++ "$CONFIG_FB_CONTROL" = "m" -o "$CONFIG_FB_CLGEN" = "m" -o \
++ "$CONFIG_FB_TGA" = "m" -o "$CONFIG_FB_PLATINUM" = "m" -o \
++ "$CONFIG_FB_MATROX" = "m" -o "$CONFIG_FB_PM2" = "m" -o \
++ "$CONFIG_FB_RIVA" = "m" -o "$CONFIG_FB_ATY128" = "m" -o \
++ "$CONFIG_FB_3DFX" = "m" -o "$CONFIG_FB_RADEON" = "m" -o \
++ "$CONFIG_FB_SGIVW" = "m" -o "$CONFIG_FB_SIS" = "m" -o \
++ "$CONFIG_FB_PVR2" = "m" -o "$CONFIG_FB_VOODOO1" = "m" -o \
++ "$CONFIG_FB_PM3" = "m" ]; then
++ define_tristate CONFIG_FBCON_CFB32 m
++ fi
++ fi
++ if [ "$CONFIG_FB_AMIGA" = "y" ]; then
++ define_tristate CONFIG_FBCON_AFB y
++ define_tristate CONFIG_FBCON_ILBM y
++ else
++ if [ "$CONFIG_FB_AMIGA" = "m" ]; then
++ define_tristate CONFIG_FBCON_AFB m
++ define_tristate CONFIG_FBCON_ILBM m
++ fi
++ fi
++ if [ "$CONFIG_FB_ATARI" = "y" ]; then
++ define_tristate CONFIG_FBCON_IPLAN2P2 y
++ define_tristate CONFIG_FBCON_IPLAN2P4 y
++ define_tristate CONFIG_FBCON_IPLAN2P8 y
++# define_tristate CONFIG_FBCON_IPLAN2P16 y
++ else
++ if [ "$CONFIG_FB_ATARI" = "m" ]; then
++ define_tristate CONFIG_FBCON_IPLAN2P2 m
++ define_tristate CONFIG_FBCON_IPLAN2P4 m
++ define_tristate CONFIG_FBCON_IPLAN2P8 m
++# define_tristate CONFIG_FBCON_IPLAN2P16 m
++ fi
++ fi
++ if [ "$CONFIG_FB_MAC" = "y" -o "$CONFIG_FB_VIRTUAL" = "y" ]; then
++ define_tristate CONFIG_FBCON_MAC y
++ else
++ if [ "$CONFIG_FB_MAC" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" ]; then
++ define_tristate CONFIG_FBCON_MAC m
++ fi
++ fi
++ if [ "$CONFIG_FB_VGA16" = "y" ]; then
++ define_tristate CONFIG_FBCON_VGA_PLANES y
++ else
++ if [ "$CONFIG_FB_VGA16" = "m" ]; then
++ define_tristate CONFIG_FBCON_VGA_PLANES m
++ fi
++ fi
++ if [ "$CONFIG_FB_HGA" = "y" ]; then
++ define_tristate CONFIG_FBCON_HGA y
++ else
++ if [ "$CONFIG_FB_HGA" = "m" ]; then
++ define_tristate CONFIG_FBCON_HGA m
++ fi
++ fi
++ if [ "$CONFIG_FB_STI" = "y" ]; then
++ define_tristate CONFIG_FBCON_STI y
++ fi
++ fi
++ dep_bool ' Rotate FrameBuffer Console (right)' CONFIG_FBCON_ROTATE_R $CONFIG_FBCON_CFB16
++ dep_bool ' Rotate FrameBuffer Console (left)' CONFIG_FBCON_ROTATE_L $CONFIG_FBCON_CFB16
++ bool ' Support only 8 pixels wide fonts' CONFIG_FBCON_FONTWIDTH8_ONLY
++ if [ "$ARCH" = "sparc" -o "$ARCH" = "sparc64" ]; then
++ bool ' Sparc console 8x16 font' CONFIG_FONT_SUN8x16
++ if [ "$CONFIG_FBCON_FONTWIDTH8_ONLY" = "n" ]; then
++ bool ' Sparc console 12x22 font (not supported by all drivers)' CONFIG_FONT_SUN12x22
++ fi
++ bool ' Select other fonts' CONFIG_FBCON_FONTS
++ if [ "$CONFIG_FBCON_FONTS" = "y" ]; then
++ bool ' VGA 8x8 font' CONFIG_FONT_8x8
++ bool ' VGA 8x16 font' CONFIG_FONT_8x16
++ if [ "$CONFIG_FBCON_FONTWIDTH8_ONLY" = "n" ]; then
++ bool ' Mac console 6x11 font (not supported by all drivers)' CONFIG_FONT_6x11
++ fi
++ bool ' Pearl (old m68k) console 8x8 font' CONFIG_FONT_PEARL_8x8
++ bool ' Acorn console 8x8 font' CONFIG_FONT_ACORN_8x8
++ fi
++ else
++ bool ' Select compiled-in fonts' CONFIG_FBCON_FONTS
++ if [ "$CONFIG_FBCON_FONTS" = "y" ]; then
++ bool ' VGA 8x8 font' CONFIG_FONT_8x8
++ bool ' VGA 8x16 font' CONFIG_FONT_8x16
++ bool ' Sparc console 8x16 font' CONFIG_FONT_SUN8x16
++ if [ "$CONFIG_FBCON_FONTWIDTH8_ONLY" = "n" ]; then
++ bool ' Sparc console 12x22 font (not supported by all drivers)' CONFIG_FONT_SUN12x22
++ bool ' Mac console 6x11 font (not supported by all drivers)' CONFIG_FONT_6x11
++ fi
++ bool ' Pearl (old m68k) console 8x8 font' CONFIG_FONT_PEARL_8x8
++ bool ' Acorn console 8x8 font' CONFIG_FONT_ACORN_8x8
++ else
++ define_bool CONFIG_FONT_8x8 y
++ define_bool CONFIG_FONT_8x16 y
++ if [ "$CONFIG_MAC" = "y" ]; then
++ if [ "$CONFIG_FBCON_FONTWIDTH8_ONLY" = "n" ]; then
++ define_bool CONFIG_FONT_6x11 y
++ fi
++ fi
++ if [ "$CONFIG_AMIGA" = "y" ]; then
++ define_bool CONFIG_FONT_PEARL_8x8 y
++ fi
++ if [ "$CONFIG_ARM" = "y" -a "$CONFIG_ARCH_ACORN" = "y" ]; then
++ define_bool CONFIG_FONT_ACORN_8x8 y
++ fi
++ fi
++ fi
++fi
++
++endmenu
+diff -Nur linux/drivers/video/Makefile /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/video/Makefile
+--- linux/drivers/video/Makefile 2003-05-13 16:18:57.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/video/Makefile 2003-06-23 01:47:03.000000000 +0700
+@@ -33,6 +33,8 @@
+ obj-$(CONFIG_FONT_6x11) += font_6x11.o
+ obj-$(CONFIG_FONT_PEARL_8x8) += font_pearl_8x8.o
+ obj-$(CONFIG_FONT_ACORN_8x8) += font_acorn_8x8.o
++obj-$(CONFIG_FONT_5x8) += font_5x8.o
++obj-$(CONFIG_FONT_4x6) += font_4x6.o
+
+ # Add fbmon.o back into obj-$(CONFIG_FB) in 2.5.x
+ obj-$(CONFIG_FB) += fbmem.o fbcmap.o modedb.o fbcon.o fonts.o
+diff -Nur linux/drivers/video/Makefile~ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/video/Makefile~
+--- linux/drivers/video/Makefile~ 1970-01-01 07:00:00.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/video/Makefile~ 2003-06-23 01:47:03.000000000 +0700
+@@ -0,0 +1,165 @@
++# Makefile for the Linux video drivers.
++# 5 Aug 1999, James Simmons, <mailto:jsimmons@edgeglobal.com>
++# Rewritten to use lists instead of if-statements.
++
++O_TARGET := video.o
++
++mod-subdirs := matrox
++
++# All of the (potential) objects that export symbols.
++# This list comes from 'grep -l EXPORT_SYMBOL *.[hc]'.
++
++export-objs := fbmem.o fbcmap.o fbcon.o fbmon.o modedb.o \
++ fbcon-afb.o fbcon-ilbm.o \
++ fbcon-vga.o fbcon-iplan2p2.o fbcon-iplan2p4.o \
++ fbcon-iplan2p8.o fbcon-vga-planes.o fbcon-cfb16.o \
++ fbcon-cfb2.o fbcon-cfb24.o fbcon-cfb32.o fbcon-cfb4.o \
++ fbcon-cfb8.o fbcon-mac.o fbcon-mfb.o \
++ cyber2000fb.o sa1100fb.o fbcon-hga.o pxafb.o cotulla_fb.o discovery_frontlight.o
++
++# Each configuration option enables a list of files.
++
++obj-$(CONFIG_DUMMY_CONSOLE) += dummycon.o
++obj-$(CONFIG_SGI_NEWPORT_CONSOLE) += newport_con.o
++obj-$(CONFIG_PROM_CONSOLE) += promcon.o promcon_tbl.o
++obj-$(CONFIG_STI_CONSOLE) += sticon.o sticon-bmode.o sticore.o
++obj-$(CONFIG_VGA_CONSOLE) += vgacon.o
++obj-$(CONFIG_MDA_CONSOLE) += mdacon.o
++
++obj-$(CONFIG_FONT_SUN8x16) += font_sun8x16.o
++obj-$(CONFIG_FONT_SUN12x22) += font_sun12x22.o
++obj-$(CONFIG_FONT_8x8) += font_8x8.o
++obj-$(CONFIG_FONT_8x16) += font_8x16.o
++obj-$(CONFIG_FONT_6x11) += font_6x11.o
++obj-$(CONFIG_FONT_PEARL_8x8) += font_pearl_8x8.o
++obj-$(CONFIG_FONT_ACORN_8x8) += font_acorn_8x8.o
++
++# Add fbmon.o back into obj-$(CONFIG_FB) in 2.5.x
++obj-$(CONFIG_FB) += fbmem.o fbcmap.o modedb.o fbcon.o fonts.o
++# Only include macmodes.o if we have FB support and are PPC
++ifeq ($(CONFIG_FB),y)
++obj-$(CONFIG_PPC) += macmodes.o
++endif
++
++obj-$(CONFIG_FB_ACORN) += acornfb.o
++obj-$(CONFIG_FB_AMIGA) += amifb.o
++obj-$(CONFIG_FB_PM2) += pm2fb.o fbgen.o
++obj-$(CONFIG_FB_PM3) += pm3fb.o fbgen.o
++obj-$(CONFIG_FB_APOLLO) += dnfb.o
++obj-$(CONFIG_FB_Q40) += q40fb.o
++obj-$(CONFIG_FB_ATARI) += atafb.o
++obj-$(CONFIG_FB_ATY128) += aty128fb.o
++obj-$(CONFIG_FB_RADEON) += radeonfb.o
++obj-$(CONFIG_FB_IGA) += igafb.o
++obj-$(CONFIG_FB_CONTROL) += controlfb.o
++obj-$(CONFIG_FB_PLATINUM) += platinumfb.o
++obj-$(CONFIG_FB_VALKYRIE) += valkyriefb.o
++obj-$(CONFIG_FB_CT65550) += chipsfb.o
++obj-$(CONFIG_FB_CLPS711X) += clps711xfb.o
++obj-$(CONFIG_FB_CYBER) += cyberfb.o
++obj-$(CONFIG_FB_CYBER2000) += cyber2000fb.o
++obj-$(CONFIG_FB_SGIVW) += sgivwfb.o
++obj-$(CONFIG_FB_3DFX) += tdfxfb.o
++obj-$(CONFIG_FB_MAC) += macfb.o macmodes.o
++obj-$(CONFIG_FB_HP300) += hpfb.o
++obj-$(CONFIG_FB_OF) += offb.o
++obj-$(CONFIG_FB_IMSTT) += imsttfb.o
++obj-$(CONFIG_FB_RETINAZ3) += retz3fb.o
++obj-$(CONFIG_FB_CLGEN) += clgenfb.o fbgen.o
++obj-$(CONFIG_FB_TRIDENT) += tridentfb.o fbgen.o
++obj-$(CONFIG_FB_S3TRIO) += S3triofb.o
++obj-$(CONFIG_FB_TGA) += tgafb.o fbgen.o
++obj-$(CONFIG_FB_VESA) += vesafb.o
++obj-$(CONFIG_FB_VGA16) += vga16fb.o fbcon-vga-planes.o
++obj-$(CONFIG_FB_VIRGE) += virgefb.o
++obj-$(CONFIG_FB_G364) += g364fb.o
++obj-$(CONFIG_FB_FM2) += fm2fb.o
++obj-$(CONFIG_FB_CREATOR) += creatorfb.o sbusfb.o
++obj-$(CONFIG_FB_CGSIX) += cgsixfb.o sbusfb.o
++obj-$(CONFIG_FB_BWTWO) += bwtwofb.o sbusfb.o
++obj-$(CONFIG_FB_CGTHREE) += cgthreefb.o sbusfb.o
++obj-$(CONFIG_FB_TCX) += tcxfb.o sbusfb.o
++obj-$(CONFIG_FB_CGFOURTEEN) += cgfourteenfb.o sbusfb.o
++obj-$(CONFIG_FB_P9100) += p9100fb.o sbusfb.o
++obj-$(CONFIG_FB_LEO) += leofb.o sbusfb.o
++obj-$(CONFIG_FB_STI) += stifb.o sticore.o fbgen.o
++obj-$(CONFIG_FB_PMAG_BA) += pmag-ba-fb.o
++obj-$(CONFIG_FB_PMAGB_B) += pmagb-b-fb.o
++obj-$(CONFIG_FB_MAXINE) += maxinefb.o
++obj-$(CONFIG_FB_TX3912) += tx3912fb.o
++obj-$(CONFIG_FB_COLLIE) += colliefb.o collie_frontlight.o
++obj-$(CONFIG_FB_COTULLA) += cotulla_fb.o discovery_frontlight.o
++obj-$(CONFIG_FB_POODLE) += cotulla_fb.o poodle_frontlight.o
++obj-$(CONFIG_FB_CORGI) += w100fb.o fbgen.o corgi_backlight.o
++
++
++subdir-$(CONFIG_FB_MATROX) += matrox
++ifeq ($(CONFIG_FB_MATROX),y)
++obj-y += matrox/matrox.o
++endif
++
++subdir-$(CONFIG_FB_RIVA) += riva
++ifeq ($(CONFIG_FB_RIVA),y)
++obj-y += riva/rivafb.o
++endif
++
++subdir-$(CONFIG_FB_SIS) += sis
++ifeq ($(CONFIG_FB_SIS),y)
++obj-y += sis/sisfb.o
++endif
++
++subdir-$(CONFIG_FB_ATY) += aty
++ifeq ($(CONFIG_FB_ATY),y)
++obj-y += aty/atyfb.o
++endif
++
++obj-$(CONFIG_FB_SUN3) += sun3fb.o
++obj-$(CONFIG_FB_BWTWO) += bwtwofb.o
++obj-$(CONFIG_FB_HGA) += hgafb.o
++obj-$(CONFIG_FB_SA1100) += sa1100fb.o
++obj-$(CONFIG_FB_PXA) += pxafb.o
++ifeq ($(CONFIG_PXA_CERF_PDA),y)
++obj-$(CONFIG_FB_PXA) += lcdctrl.o lcdctrl_cerf.o
++endif
++obj-$(CONFIG_FB_VIRTUAL) += vfb.o
++obj-$(CONFIG_FB_HIT) += hitfb.o fbgen.o
++obj-$(CONFIG_FB_E1355) += epson1355fb.o fbgen.o
++obj-$(CONFIG_FB_PVR2) += pvr2fb.o
++obj-$(CONFIG_FB_VOODOO1) += sstfb.o
++obj-$(CONFIG_FB_ANAKIN) += anakinfb.o
++
++# Generic Low Level Drivers
++
++obj-$(CONFIG_FBCON_AFB) += fbcon-afb.o
++obj-$(CONFIG_FBCON_CFB2) += fbcon-cfb2.o
++obj-$(CONFIG_FBCON_CFB4) += fbcon-cfb4.o
++obj-$(CONFIG_FBCON_CFB8) += fbcon-cfb8.o
++obj-$(CONFIG_FBCON_CFB16) += fbcon-cfb16.o
++obj-$(CONFIG_FBCON_CFB24) += fbcon-cfb24.o
++obj-$(CONFIG_FBCON_CFB32) += fbcon-cfb32.o
++obj-$(CONFIG_FBCON_ILBM) += fbcon-ilbm.o
++obj-$(CONFIG_FBCON_IPLAN2P2) += fbcon-iplan2p2.o
++obj-$(CONFIG_FBCON_IPLAN2P4) += fbcon-iplan2p4.o
++obj-$(CONFIG_FBCON_IPLAN2P8) += fbcon-iplan2p8.o
++obj-$(CONFIG_FBCON_IPLAN2P16) += fbcon-iplan2p16.o
++obj-$(CONFIG_FBCON_MAC) += fbcon-mac.o
++obj-$(CONFIG_FBCON_MFB) += fbcon-mfb.o
++obj-$(CONFIG_FBCON_VGA) += fbcon-vga.o
++obj-$(CONFIG_FBCON_HGA) += fbcon-hga.o
++obj-$(CONFIG_FBCON_STI) += fbcon-sti.o
++
++include $(TOPDIR)/Rules.make
++
++clean:
++ rm -f core *.o *.a *.s
++
++../conmakehash: ../conmakehash.c
++ $(HOSTCC) $(HOSTCFLAGS) -o ../conmakehash ../conmakehash.c
++
++promcon_tbl.c: prom.uni ../char/conmakehash
++ ../char/conmakehash prom.uni | \
++ sed -e '/#include <[^>]*>/p' -e 's/types/init/' \
++ -e 's/dfont\(_uni.*\]\)/promfont\1 __initdata/' > promcon_tbl.c
++
++promcon_tbl.o: promcon_tbl.c $(TOPDIR)/include/linux/types.h
++
+diff -Nur linux/drivers/video/collieLogoScreen.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/video/collieLogoScreen.c
+--- linux/drivers/video/collieLogoScreen.c 2003-05-13 16:18:58.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/video/collieLogoScreen.c 2003-06-23 01:47:03.000000000 +0700
+@@ -2,166 +2,248 @@
+ #ifndef __initdata
+ #define __initdata
+ #endif
+-static int logo_screen_width __initdata = 32;
+-static int logo_screen_height __initdata = 160;
+-static unsigned short logo_screen_data[] __initdata ={
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x8bcf,0xaaeb,0x8410,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c30,0x83ef,0x8bcf,0x8410,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xba69,0xf800,0xe145,0xa30c,0x7c30,0x7c30,0x7bef,0x7bef,0x7bef,0x7c10,0x8bcf,0xc249,0xe8a2,0xf041,0xe104,0xb2aa,0x8410,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd945,0xf800,0xf800,0xf800,0xd986,0x9b4d,0x7c10,0x7bef,0x7c10,0x8bcf,0xe104,0xf800,0xf800,0xf800,0xf800,0xf800,0xc9c7,0x7c10,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x8bcf,0xf082,0xf800,0xf800,0xf800,0xf800,0xd1c7,0x7c30,0x7c10,0x7c30,0xd1a6,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xb2aa,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xb2aa,0xf800,0xf800,0xf800,0xf800,0xf800,0xa32c,0x7c30,0x7c30,0xa34d,0xf820,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xe8a2,0x8bcf,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xd1a6,0xf800,0xf800,0xf800,0xf800,0xe104,0x8410,0x7c10,0x7c30,0xd186,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xa2eb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x83ef,0xe8e3,0xf800,0xf800,0xf800,0xf800,0xb28a,0x7430,0x7c10,0x8bef,0xf082,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xca08,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x9bae,0xf841,0xf800,0xf800,0xf800,0xf820,0x936d,0x7c10,0x7c30,0xb2cb,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xe8c3,0x83ef,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7430,0xba69,0xf800,0xf800,0xf800,0xf800,0xd965,0x7c30,0x7c10,0x7c30,0xc9c7,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf820,0x936d,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xc9c7,0xf800,0xf800,0xf800,0xf800,0xb28a,0x7430,0x7c10,0x8410,0xe124,0xf800,0xf800,0xf800,0xf800,0xf800,0xd945,0xb269,0xe8a2,0xf800,0xf800,0xf800,0xa2eb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd924,0xf800,0xf800,0xf800,0xf820,0x9b4d,0x7c10,0x7c10,0x83ef,0xf082,0xf800,0xf800,0xf800,0xf800,0xf820,0x936d,0x6c92,0xba8a,0xf800,0xf800,0xf800,0xb2cb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7c10,0x83ef,0xe904,0xf800,0xf800,0xf800,0xf0a2,0x83ef,0x7c10,0x7c10,0x9b8e,0xf820,0xf800,0xf800,0xf800,0xf800,0xe145,0x8410,0x7c10,0x9bae,0xf820,0xf800,0xf800,0xba49,0x7430,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7c10,0x83cf,0xf061,0xf800,0xf800,0xf800,0xd1e7,0x7c30,0x7bef,0x7430,0xba69,0xf800,0xf800,0xf800,0xf800,0xf800,0xc249,0x7c51,0x7c10,0x9bcf,0xf841,0xf800,0xf800,0xc208,0x7451,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7c10,0x8bcf,0xf841,0xf800,0xf800,0xf800,0xb269,0x7430,0x7bef,0x7c30,0xc9e7,0xf800,0xf800,0xf800,0xf800,0xf800,0xaaaa,0x7c30,0x7c10,0x9bcf,0xf841,0xf800,0xf800,0xca08,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7c10,0x9bcf,0xf841,0xf800,0xf800,0xf800,0xaaeb,0x7c30,0x7c10,0x7c10,0xd165,0xf800,0xf800,0xf800,0xf800,0xf800,0xa30c,0x7c30,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7c10,0xa38e,0xf820,0xf800,0xf800,0xf800,0x9b4d,0x7c10,0x7c10,0x8410,0xe124,0xf800,0xf800,0xf800,0xf800,0xf820,0x938e,0x7c10,0x7430,0xba49,0xf800,0xf800,0xf800,0xd1e7,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf841,0x8bcf,0x7c10,0x7c10,0x83cf,0xf0a2,0xf800,0xf800,0xf800,0xf800,0xf082,0x83ef,0x7c10,0x7c51,0xca08,0xf800,0xf800,0xf800,0xca08,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf061,0x83cf,0x7c10,0x7c10,0x8bef,0xf841,0xf800,0xf800,0xf800,0xf800,0xd9a6,0x7c30,0x7c10,0x7c10,0xd186,0xf800,0xf800,0xf800,0xc228,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7c10,0x9bae,0xf820,0xf800,0xf800,0xe904,0x83ef,0x7c10,0x7c10,0xa34d,0xf820,0xf800,0xf800,0xf800,0xf800,0xc228,0x7451,0x7c10,0x8410,0xe124,0xf800,0xf800,0xf800,0xba08,0x7430,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7c10,0x9bcf,0xf841,0xf800,0xf800,0xe145,0x8410,0x7c10,0x7c51,0xba28,0xf800,0xf800,0xf800,0xf800,0xf800,0xb269,0x7430,0x7c10,0x83ef,0xf082,0xf800,0xf800,0xf800,0xb28a,0x7430,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7c10,0x8bcf,0xf841,0xf800,0xf800,0xf061,0x83cf,0x7c10,0x7c30,0xd186,0xf800,0xf800,0xf800,0xf800,0xf800,0xaaeb,0x7c30,0x7c10,0xa34d,0xf820,0xf800,0xf800,0xf800,0xaaeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7c10,0x83cf,0xf0a2,0xf800,0xf800,0xf800,0xaaeb,0x7471,0x938e,0xf061,0xf800,0xf800,0xf800,0xf800,0xf820,0x9b6d,0x7c10,0x7c30,0xc208,0xf800,0xf800,0xf800,0xf800,0xa30c,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7c10,0x8410,0xe124,0xf800,0xf800,0xf800,0xf041,0xd1e7,0xf0a2,0xf800,0xf800,0xf800,0xf800,0xf800,0xf0a2,0x83ef,0x7c10,0x7c10,0xd965,0xf800,0xf800,0xf800,0xf820,0x938e,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd186,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd1e7,0x7c30,0x7c10,0x83ef,0xe8a2,0xf800,0xf800,0xf800,0xf0a2,0x83ef,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xba8a,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xb2aa,0x7430,0x7c30,0xab2c,0xf800,0xf800,0xf800,0xf800,0xd1c7,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x93ae,0xf861,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf841,0x936d,0x7c10,0x7c30,0xc9c7,0xf800,0xf800,0xf800,0xf800,0xb269,0x7430,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c30,0xd965,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xc9e7,0x7c30,0x7c10,0x83ef,0xe8c3,0xf800,0xf800,0xf800,0xf800,0xa30c,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xa32c,0xf841,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf061,0x938e,0x7c10,0x7c10,0x8bef,0xe145,0xf800,0xf800,0xf800,0xf841,0x8bae,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xba49,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf820,0xaacb,0x7c30,0x7bef,0x7bef,0x7c10,0x8410,0xa30c,0xd186,0xf820,0xd965,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xb2aa,0xe8a2,0xf800,0xf800,0xf800,0xe8c3,0xab0c,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c30,0x7c30,0x9b8e,0x9b4d,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0x7c10,0x7451,0x7c10,0xa34d,0xb249,0xa34d,0x8430,0x7430,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7430,0x7430,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x8bef,0x9b6d,0x9b6d,0x9b6d,0x938e,0x938e,0x93ae,0x938e,0x936d,0x9b6d,0x9b6d,0x9b6d,0x9b6d,0x9b6d,0x9b6d,0x9b6d,0x9b6d,0x9b6d,0x9b6d,0x9b6d,0x93cf,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf820,0xf820,0xf820,0xf820,0xf820,0xf820,0xf820,0xf820,0xf820,0xf820,0xf820,0xf820,0xf820,0xf820,0xf820,0xf820,0xf820,0xf820,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xa36d,0xf0e3,0xe8c3,0xe8c3,0xe8c3,0xe8c3,0xe8c3,0xe8c3,0xe8c3,0xf800,0xf800,0xf800,0xf800,0xf0a2,0xe8e3,0xe8c3,0xe8c3,0xe8c3,0xe8c3,0xf0a2,0xca69,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x83ef,0x83ef,0x83ef,0x83ef,0x83ef,0x83ef,0x83ef,0x83ef,0x8bae,0xf041,0xf800,0xf800,0xf800,0xa2eb,0x7c10,0x83ef,0x83ef,0x83ef,0x83ef,0x83ef,0x83ef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x83cf,0xf041,0xf800,0xf800,0xf800,0x9b0c,0x7c30,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x83cf,0xf041,0xf800,0xf800,0xf800,0x9aeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x83cf,0xf041,0xf800,0xf800,0xf800,0x9aeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x83cf,0xf041,0xf800,0xf800,0xf800,0x9aeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x83cf,0xf041,0xf800,0xf800,0xf800,0x9aeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x83cf,0xf041,0xf800,0xf800,0xf800,0x9aeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x83cf,0xf041,0xf800,0xf800,0xf800,0x9aeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x83cf,0xf041,0xf800,0xf800,0xf800,0x9aeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x83cf,0xf041,0xf800,0xf800,0xf800,0x9aeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x83cf,0xf041,0xf800,0xf800,0xf800,0x9aeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x83cf,0xf041,0xf800,0xf800,0xf800,0x9aeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7430,0x7430,0x7430,0x7430,0x7430,0x7430,0x7451,0x7bef,0xf061,0xf800,0xf800,0xf800,0x9b2c,0x7451,0x7430,0x7430,0x7430,0x7430,0x7430,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x93ae,0xb2aa,0xb28a,0xb28a,0xb28a,0xb28a,0xb28a,0xb2aa,0xba69,0xf841,0xf800,0xf800,0xf800,0xc1e7,0xb2aa,0xb28a,0xb28a,0xb28a,0xb28a,0xba8a,0xa34d,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x93ae,0xc228,0xca08,0xca08,0xca08,0xca08,0xca08,0xca08,0xca08,0xca08,0xca08,0xca08,0xca08,0xca08,0xca08,0xca08,0xca08,0xca08,0xca08,0xc9c7,0xb30c,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x9bae,0xa34d,0x7471,0x7471,0x7c51,0x7c51,0x7c51,0x7c51,0x7c51,0x7c51,0x7c51,0x7c51,0x7c51,0x7c51,0x7c51,0x7c51,0x7c51,0x7c51,0x7c51,0x7c51,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf820,0xd1a6,0x8b8e,0x7430,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf061,0xb28a,0x8410,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xe145,0x9b4d,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf820,0xca08,0x8bae,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x9b8e,0xf0a2,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf082,0xaaaa,0x7c10,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x8bcf,0xc9c7,0xf820,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd965,0x9b6d,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c30,0xa30c,0xe0e3,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf820,0xc249,0x8bef,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0x8410,0xe124,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xe8c3,0xaaeb,0x7c30,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd145,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd186,0x938e,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd924,0xf800,0xf800,0xf800,0xf820,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf841,0xba69,0x83ef,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd924,0xf800,0xf800,0xf800,0xba8a,0xba49,0xf841,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xe904,0xa32c,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd924,0xf800,0xf800,0xf800,0xb2aa,0x7471,0x9b6d,0xd965,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xba8a,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd924,0xf800,0xf800,0xf800,0xb28a,0x7430,0x7c10,0x7c30,0xb2cb,0xe8a2,0xf800,0xf800,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd924,0xf800,0xf800,0xf800,0xb28a,0x7430,0x7bef,0x7c10,0x7c30,0x8410,0xc208,0xf820,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd924,0xf800,0xf800,0xf800,0xb28a,0x7430,0x7bef,0x7bef,0x7c30,0x7c30,0xa30c,0xf082,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd924,0xf800,0xf800,0xf800,0xb28a,0x7430,0x7c10,0x7c30,0x938e,0xd965,0xf800,0xf800,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd924,0xf800,0xf800,0xf800,0xb28a,0x7451,0x7c30,0xb2eb,0xf841,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd924,0xf800,0xf800,0xf800,0xb2aa,0x9b4d,0xd965,0xf820,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd924,0xf800,0xf800,0xf800,0xf0a2,0xf820,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd145,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd208,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0x7c30,0xd924,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf082,0xaaeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7451,0x8bae,0xc9e7,0xf820,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf820,0xd1c7,0x8bcf,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x8410,0xb2aa,0xf082,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xe0e3,0xa32c,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x8bcf,0xe124,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf082,0xba49,0x8410,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf820,0xd1a6,0x93ae,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xe8e3,0xa32c,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf061,0xc228,0x83ef,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf820,0xd186,0x938e,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xe8c3,0xab0c,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf861,0xc208,0x83ef,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xd965,0x936d,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab0c,0xe8e3,0xaaeb,0x7c30,0x7c30,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x93ae,0x93ae,0x7bef,0x83cf,0x83cf,0x83cf,0x83cf,0x83cf,0x83cf,0x83cf,0x83cf,0x83cf,0x83cf,0x83cf,0x83cf,0x83cf,0x83cf,0x83cf,0x83cf,0x83cf,0x83ef,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xa34d,0xf082,0xf061,0xf061,0xf061,0xf061,0xf061,0xf061,0xf061,0xf061,0xf061,0xf061,0xf061,0xf061,0xf061,0xf061,0xf061,0xf061,0xf061,0xf041,0xd965,0x83ef,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf061,0x8bcf,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf820,0x93ae,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf820,0x9b4d,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xa2eb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xaaeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab4d,0xf841,0xf841,0xf841,0xf841,0xf841,0xf841,0xf841,0xf841,0xf041,0xf841,0xf841,0xf841,0xf841,0xf841,0xf841,0xf841,0xf820,0xf800,0xf800,0xf800,0xaaeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x83ef,0x8bcf,0x8bcf,0x8bcf,0x8bcf,0x8bcf,0x8bcf,0x8bcf,0x8bef,0x93cf,0x8bef,0x8bef,0x8bcf,0x8bcf,0x8bcf,0x8bcf,0x8c10,0xb2cb,0xf800,0xf800,0xf800,0xaacb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7c30,0x83ef,0xd945,0xba49,0x8410,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x93ef,0xf841,0xf800,0xf800,0xb28a,0x7430,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd186,0xf800,0xf800,0xba49,0x7430,0x7bef,0x7bef,0x7bef,0x7c10,0x83cf,0xf061,0xf800,0xf800,0xb28a,0x7430,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c51,0xc208,0xf800,0xf800,0xf800,0xb269,0x7430,0x7bef,0x7bef,0x7bef,0x7c10,0x83ef,0xe8c3,0xf800,0xf800,0xb28a,0x7430,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7430,0xb2aa,0xf800,0xf800,0xf800,0xf800,0xaaeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7c10,0x83ef,0xe104,0xf800,0xf800,0xb28a,0x7430,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xa32c,0xf841,0xf800,0xf800,0xf800,0xf800,0xa2eb,0x7c30,0x7bef,0x7bef,0x7bef,0x7c10,0x8410,0xe124,0xf800,0xf800,0xb28a,0x7430,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0x938e,0xf082,0xf800,0xf800,0xf800,0xf800,0xf800,0x9b0c,0x7c30,0x7bef,0x7bef,0x7bef,0x7c10,0x83ef,0xe104,0xf800,0xf800,0xb28a,0x7430,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x8bcf,0xe0e3,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xa30c,0x7c30,0x7bef,0x7bef,0x7bef,0x7c10,0x83ef,0xe8c3,0xf800,0xf800,0xb28a,0x7430,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x8410,0xd965,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xaacb,0x7c30,0x7bef,0x7bef,0x7bef,0x7c10,0x8bef,0xf061,0xf800,0xf800,0xb2cb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c30,0xc9e7,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xba49,0x7451,0x7bef,0x7bef,0x7bef,0x7c30,0xa34d,0xf800,0xf800,0xf800,0xaaeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xba8a,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xe8e3,0x83ef,0x7c10,0x7bef,0x7bef,0x7451,0xc9e7,0xf800,0xf800,0xf800,0xa30c,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x9b8e,0xf841,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xb28a,0x7451,0x7c10,0x7430,0x8bae,0xf0a2,0xf800,0xf800,0xf820,0x9b6d,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf0c3,0xf800,0xf800,0xf800,0xf841,0xba69,0x936d,0xa32c,0xe124,0xf800,0xf800,0xf800,0xf841,0x8bcf,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xd186,0x9bae,0xf841,0xf800,0xf800,0xf800,0xf800,0xf820,0xf800,0xf800,0xf800,0xf800,0xf800,0xe904,0x83ef,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xe104,0x8bef,0x7c10,0xe8c3,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xca28,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf0a2,0x938e,0x7c30,0x7c30,0xd1a6,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xaacb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf841,0xa32c,0x7c30,0x7bef,0x7c30,0xa34d,0xf820,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf841,0x938e,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xb2cb,0x7c51,0x7bef,0x7bef,0x7bef,0x7c30,0xd186,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xc9e7,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xc228,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7c10,0x938e,0xf082,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf082,0x938e,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xd165,0x7c10,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xa30c,0xf082,0xf800,0xf800,0xf800,0xf800,0xf082,0xa32c,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab0c,0xe124,0x8bef,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0x93cf,0xc9e7,0xe124,0xe124,0xc9e7,0x93ae,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x9b8e,0x93ae,0x7451,0x7c30,0x7c30,0x7c30,0x7c30,0x7c30,0x7c30,0x7c30,0x7c30,0x7c30,0x7430,0x7451,0x7c30,0x7c30,0x7451,0x7451,0x7c30,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x8bcf,0xa30c,0xa2eb,0xa2eb,0xa2eb,0xa2eb,0xa2eb,0xa2eb,0xa2eb,0xa2eb,0xa2eb,0xa2eb,0xa2eb,0xa2eb,0xa2eb,0xa2eb,0xa2eb,0xa2eb,0xa2eb,0xa2cb,0x9b4d,0x8410,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf082,0x83cf,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf841,0x8bcf,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf820,0x9b6d,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xa30c,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xa2eb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0xab2c,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xaaeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x9b6d,0xd945,0xd924,0xd924,0xd924,0xd924,0xd145,0xe124,0xf800,0xf800,0xf800,0xe8a2,0xd145,0xd924,0xd924,0xd924,0xd145,0xe104,0xf800,0xf800,0xf800,0xb2aa,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7430,0xaaeb,0xf800,0xf800,0xf800,0xb269,0x7451,0x7c10,0x7c10,0x7c10,0x7c30,0x9bae,0xf820,0xf800,0xf800,0xb28a,0x7430,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0x7c10,0x7c10,0x7c10,0x7451,0xba28,0xf800,0xf800,0xf800,0xa30c,0x7c30,0x7c10,0x7c10,0x7c10,0x7c10,0x8bcf,0xf041,0xf800,0xf800,0xba28,0x7430,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c51,0xc9e7,0xf800,0xf800,0xf820,0x936d,0x7c10,0x7bef,0x7bef,0x7bef,0x7c10,0x83cf,0xf082,0xf800,0xf800,0xba08,0x7451,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xd1c7,0xf800,0xf800,0xf041,0x8bcf,0x7c10,0x7bef,0x7bef,0x7bef,0x7c10,0x83ef,0xe8c3,0xf800,0xf800,0xba08,0x7451,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd165,0xf800,0xf800,0xf061,0x83cf,0x7c10,0x7bef,0x7bef,0x7bef,0x7c10,0x83ef,0xe8e3,0xf800,0xf800,0xc228,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd924,0xf800,0xf800,0xf061,0x83cf,0x7c10,0x7bef,0x7bef,0x7bef,0x7c10,0x8410,0xe104,0xf800,0xf800,0xba08,0x7451,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd924,0xf800,0xf800,0xf061,0x83cf,0x7c10,0x7bef,0x7bef,0x7bef,0x7c10,0x83ef,0xe8e3,0xf800,0xf800,0xba08,0x7451,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd924,0xf800,0xf800,0xf061,0x83cf,0x7c10,0x7bef,0x7bef,0x7bef,0x7c10,0x83cf,0xe8a2,0xf800,0xf800,0xba69,0x7430,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xd186,0xf800,0xf800,0xf820,0x938e,0x7c10,0x7bef,0x7bef,0x7bef,0x7c10,0x8bcf,0xf041,0xf800,0xf800,0xb2aa,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xc9e7,0xf800,0xf800,0xf800,0xaaeb,0x7430,0x7bef,0x7bef,0x7bef,0x7c30,0xb2cb,0xf800,0xf800,0xf800,0xaaeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7451,0xc208,0xf800,0xf800,0xf800,0xd986,0x7c30,0x7c10,0x7bef,0x7c10,0x7c51,0xd186,0xf800,0xf800,0xf800,0xa30c,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xaaeb,0xf800,0xf800,0xf800,0xf800,0xb28a,0x7c51,0x7430,0x7451,0xa30c,0xf820,0xf800,0xf800,0xf820,0x9b6d,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x8bef,0xf061,0xf800,0xf800,0xf800,0xf820,0xc9e7,0xaaeb,0xc249,0xf841,0xf800,0xf800,0xf800,0xf041,0x8bcf,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c10,0xe124,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xe124,0x8410,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xc228,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xc249,0x7c51,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x93cf,0xf082,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xaaeb,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xc9e7,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf082,0x8bcf,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x8bef,0xe8c3,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xba69,0x7c30,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0xa32c,0xf061,0xf800,0xf800,0xf800,0xf800,0xf800,0xf800,0xe104,0x8bcf,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c51,0xa32c,0xe8a2,0xf800,0xf800,0xf800,0xf800,0xe124,0x938e,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c30,0x83ef,0xb2aa,0xc9e7,0xc9e7,0xab0c,0x7c10,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7c10,0x7c30,0x7c51,0x7c51,0x7c30,0x7c10,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,
+- 0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef,0x7bef};
++static int logo_screen_width __initdata = 320;
++static int logo_screen_height __initdata = 240;
++static unsigned short logo_screen_data[] __initdata ={
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xFF10,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD56B,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0xD56B,0xE60B,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD5B1,0xD56B,0xC484,0xABC5,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xC460,0xBC00,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xC484,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0xE540,0xC460,0xBC00,0xBC00,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xBC00,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE20,0xE540,0xBC00,0xC50D,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xC484,0xE540,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xF5E0,0xEDA0,0xE540,0xE540,0xE540,0xE540,0xEDA0,0xEDA0,0xF5E0,0xFE20,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xE540,0xBC00,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBC00,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xD4E0,0xBC25,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBC25,0xC460,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0xC460,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xAB60,0xC460,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xE540,0xD56B,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xC50D,0xB3C0,0xD4E0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE63,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0xBC00,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xABA4,0xBC00,0xD4E0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE63,0xFE63,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xC460,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xBC00,0xD4E0,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xD4E0,0xD5B1,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD56B,0xAB60,0xBC00,0xD4E0,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE63,0xFE62,0xFE62,0xFE63,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xE540,0xD56B,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBC25,0xAB60,0xC460,0xD4E0,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0xBC25,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xB3C0,0xC460,0xD4E0,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0xAB60,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xB3C0,0xC460,0xD4E0,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0xB3C0,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xCD2D,0xAB60,0xBC00,0xC460,0xD4E0,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0xB3C0,0xD5B1,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBC25,0xAB60,0xBC00,0xC460,0xD4E0,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0xBC00,0xC484,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xAB60,0xBC00,0xC460,0xE540,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xE540,0xBC00,0xAB60,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xAB60,0xBC00,0xD4E0,0xE540,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xE540,0xC460,0xAB60,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD5B1,0xA320,0xB3C0,0xC460,0xD4E0,0xE540,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xE540,0xC460,0xAB60,0xC50D,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xB469,0xAB60,0xB3C0,0xC460,0xD4E0,0xE540,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0xD4E0,0xB3C0,0xAB60,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xAB60,0xAB60,0xBC00,0xC460,0xD4E0,0xE540,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0xD4E0,0xC460,0xAB60,0xC50D,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xAB60,0xBC00,0xC460,0xD4E0,0xE540,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xE540,0xD4E0,0xBC00,0xAB60,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xAB60,0xBC00,0xC460,0xD4E0,0xE540,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xE540,0xD4E0,0xBC00,0xAB60,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xCD2D,0xA320,0xB3C0,0xBC00,0xC460,0xD4E0,0xEDA0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xEDA0,0xD4E0,0xBC00,0xAB60,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBC25,0xAB60,0xB3C0,0xC460,0xD4E0,0xE540,0xEDA0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0xE540,0xC460,0xB3C0,0xD5B1,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xAB60,0xB3C0,0xC460,0xD4E0,0xE540,0xEDA0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0xD4E0,0xBC00,0xC50D,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xAB60,0xBC00,0xC460,0xD4E0,0xE540,0xEDA0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0xD4E0,0xBC25,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD5B1,0xA320,0xAB60,0xBC00,0xC460,0xD4E0,0xE540,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0xD4E0,0xD56B,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xC50D,0xA320,0xB3C0,0xBC00,0xC460,0xD4E0,0xE540,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xE540,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xABC5,0xAB60,0xB3C0,0xC460,0xD4E0,0xD4E0,0xEDA0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xF66B,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x9CF3,0x8C30,0x630C,0x73AE,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xAB60,0xB3C0,0xC460,0xD4E0,0xE540,0xEDA0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE63,0x7453,0x7453,0x7453,0x7453,0x7453,0x630C,0x2944,0x0840,0x0840,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x73AE,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xAB60,0xBC00,0xC460,0xD4E0,0xE540,0xEDA0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0x94B2,0x2944,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x630C,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD5B1,0xA320,0xAB60,0xBC00,0xC460,0xD4E0,0xE540,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xE540,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x73AE,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xB469,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xE540,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xC460,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xAB60,0xB3C0,0xC460,0xD4E0,0xD4E0,0xEDA0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xABA4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xAB60,0xBC00,0xC460,0xD4E0,0xE540,0xEDA0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x4A69,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD56B,0xA320,0xAB60,0xBC00,0xC460,0xD4E0,0xE540,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0x9324,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x630C,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xABC5,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xE540,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x630C,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xAB60,0xB3C0,0xC460,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x4A49,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD5B1,0xA320,0xAB60,0xBC00,0xC460,0xD4E0,0xE540,0xEDA0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x2944,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBC25,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xE540,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x4A69,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xAB60,0xB3C0,0xC460,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xD4E0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x1081,0x1081,0x1081,0x1081,0x1081,0x1081,0x0840,0x0840,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x630C,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD5B1,0xA320,0xAB60,0xBC00,0xC460,0xD4E0,0xE540,0xEDA0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0x51C0,0x0000,0x0000,0x0000,0x0000,0x0840,0x1081,0x18C2,0x18C2,0x2944,0x2944,0x2944,0x2944,0x2944,0x2944,0x2944,0x18C2,0x18C2,0x18C2,0x1081,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x2944,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xABC5,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xE540,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xC484,0x0000,0x0000,0x0000,0x0840,0x1081,0x18C2,0x2944,0x2944,0x39C7,0x39C7,0x39C7,0x4A49,0x4A49,0x4A49,0x4A49,0x39C7,0x39C7,0x39C7,0x39C7,0x2944,0x18C2,0x18C2,0x0840,0x0000,0x0840,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x4A49,0x94B2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xAB60,0xB3C0,0xC460,0xD4E0,0xE540,0xEDA0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xD4E0,0x0840,0x0000,0x0000,0x0840,0x18C2,0x2944,0x39C7,0x39C7,0x4A49,0x4A49,0x4A49,0x4A49,0x4A49,0x4A49,0x4A49,0x4A49,0x4A49,0x4A49,0x4A49,0x39C7,0x2944,0x2944,0x18C2,0x0000,0x0840,0x0840,0x1081,0x1081,0x0840,0x0840,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x52AA,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xCD2D,0xA320,0xAB60,0xBC00,0xC460,0xD4E0,0xE540,0xEDA0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0x4140,0x0000,0x0000,0x1081,0x2944,0x39C7,0x4A49,0x4A49,0x4A49,0x4A49,0x39C7,0x39C7,0x2944,0x2944,0x18C2,0x18C2,0x18C2,0x18C2,0x18C2,0x18C2,0x18C2,0x18C2,0x18C2,0x0840,0x0000,0x0840,0x1081,0x1081,0x18C2,0x18C2,0x18C2,0x1081,0x1081,0x0840,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x2944,0x94B2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xABA4,0xAB60,0xB3C0,0xC460,0xC460,0xD4E0,0xE540,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0x51C0,0x0000,0x0000,0x18C2,0x2944,0x39C7,0x4A49,0x4A49,0x39C7,0x2944,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x1081,0x18C2,0x18C2,0x18C2,0x2944,0x2944,0x18C2,0x18C2,0x18C2,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x630C,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xAB60,0xBC00,0xC460,0xD4E0,0xE540,0xEDA0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0x51C0,0x0000,0x0000,0x18C2,0x2944,0x4A49,0x4A49,0x39C7,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x2944,0x2944,0x2944,0x2944,0x2944,0x2944,0x18C2,0x18C2,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x4A49,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xB469,0xA320,0xB3C0,0xBC00,0xC460,0xD4E0,0xE540,0xEDA0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xD4E0,0x4140,0x0000,0x0000,0x1081,0x2944,0x4A49,0x4A49,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x1081,0x2944,0x2944,0x39C7,0x39C7,0x2944,0x2944,0x2944,0x18C2,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x39C7,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xAB60,0xB3C0,0xC460,0xC460,0xD4E0,0xE540,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xD4E0,0x0840,0x0000,0x0000,0x0000,0x1081,0x2944,0x2944,0x1081,0x0840,0x0840,0x1081,0x1081,0x1081,0x1081,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x2944,0x39C7,0x39C7,0x39C7,0x2944,0x2944,0x18C2,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x39C7,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD5B1,0xA320,0xAB60,0xBC00,0xC460,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xC460,0x0840,0x0000,0x0000,0x1081,0x4A49,0x73AE,0x8C30,0x8C30,0x94B2,0x94B2,0x94B2,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x94B2,0x94B2,0x8C30,0x630C,0x4A49,0x39C7,0x2944,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x1081,0x2944,0x2944,0x39C7,0x39C7,0x2944,0x2944,0x18C2,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x52AA,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xABC5,0xA320,0xB3C0,0xBC00,0xC460,0xD4E0,0xE540,0xEDA0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0x6260,0x0840,0x0000,0x0000,0x0000,0x630C,0xB596,0xDEDA,0xF77D,0xF79D,0xF79D,0xF79D,0xF79D,0xF79D,0xF7BE,0xF7BE,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xF79D,0xF77D,0xEF3C,0xD679,0xC617,0x9CF3,0x73AE,0x4A49,0x2944,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x2944,0x39C7,0x39C7,0x2944,0x2944,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x73AE,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xAB60,0xB3C0,0xC460,0xC460,0xD4E0,0xE540,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0x6260,0x0000,0x0000,0x0000,0x0000,0x39C7,0xB596,0xF79D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xE71B,0xC617,0x9CF3,0x73AE,0x4A49,0x2944,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x2944,0x39C7,0x39C7,0x2944,0x2944,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xCD2D,0xA320,0xAB60,0xBC00,0xC460,0xD4E0,0xD4E0,0xE540,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xD4E0,0x18C2,0x0000,0x0000,0x0000,0x0000,0x18C2,0xB596,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF5D,0xDEDA,0xB596,0x94B2,0x73AE,0x4A49,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x2944,0x39C7,0x39C7,0x2944,0x18C2,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x52AA,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xABA4,0xA320,0xB3C0,0xBC00,0xC460,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0x6260,0x0840,0x0000,0x0000,0x0000,0x0000,0x1081,0x9CF3,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xEF3C,0xD679,0xB596,0x8C30,0x4A49,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x2944,0x2944,0x2944,0x2944,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xD4E0,0x51C0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x8C30,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xD679,0x9CF3,0x630C,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x18C2,0x2944,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x630C,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xCD2D,0xA320,0xAB60,0xB3C0,0xC460,0xC460,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0x9324,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x630C,0xF79D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xE71B,0xB596,0x73AE,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x1081,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xABA4,0xA320,0xAB60,0xBC00,0xC460,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xD4E0,0x51C0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4A69,0xEF3C,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF3C,0xB596,0x73AE,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0x9324,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0xDEDA,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF3C,0xB596,0x630C,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4A69,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xD4E0,0x51C0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0xC617,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0xB596,0x52AA,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xB469,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0x6260,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0xB596,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xDEDA,0x9CF3,0x4A49,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xABC5,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xC484,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8C30,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xC617,0x8C30,0x39C7,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x630C,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xE540,0x6260,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73AE,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0xB596,0x8C30,0x39C7,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xABA4,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52AA,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xD679,0x9CF3,0x8C30,0x4A49,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xD4E0,0x51C0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0xE71B,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xDEDA,0xB596,0x9CF3,0x8C30,0x630C,0x39C7,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x94B2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0x6260,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0xD679,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0xC617,0xB596,0x9CF3,0x8C30,0x73AE,0x630C,0x4A49,0x2944,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x52AA,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xD4E0,0xE540,0xE540,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE63,0xFE63,0xFE63,0xFE63,0xFE63,0xFE63,0xFE63,0xFE62,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xABC5,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0xB596,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF3C,0xD679,0xB596,0x9CF3,0x8C30,0x73AE,0x73AE,0x630C,0x630C,0x4A69,0x2944,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xE540,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE63,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xE540,0x6260,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x94B2,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0xC617,0xB596,0x94B2,0x8C30,0x73AE,0x73AE,0x73AE,0x73AE,0x73AE,0x630C,0x528A,0x2944,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x94B2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE62,0xFE60,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0x9324,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x630C,0xF79D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xDEDA,0xC617,0x9CF3,0x94B2,0x8C30,0x8C30,0x8C30,0x8C30,0x8C30,0x8C30,0x8C30,0x8C30,0x73AE,0x4A49,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x4A49,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xABC5,0xA320,0xAB60,0xAB60,0xBC00,0xBC00,0xC460,0xD4E0,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xD4E0,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4A49,0xE71B,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xD679,0xB596,0x9CF3,0x94B2,0x94B2,0x94B2,0x94B2,0x94B2,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x94B2,0x8C30,0x630C,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xCD2D,0x92C0,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0x6260,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0xD679,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0xC617,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xB596,0xB596,0xC617,0xD679,0xD679,0xD679,0xC617,0xB596,0x94B2,0x630C,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xA320,0xAB60,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xC484,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0xB596,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xD679,0xB596,0x9CF3,0x9CF3,0xB596,0xB596,0xC617,0xDEDA,0xEF5D,0xF79D,0xFFFF,0xFFFF,0xF7BE,0xF79D,0xE71B,0xC617,0x9CF3,0x630C,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x2944,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8C30,0x73AE,0x630C,0x52AA,0x4A69,0x4A49,0x2944,0x2944,0x18C2,0x18C2,0x18C2,0x18C2,0x18C2,0x1081,0x0840,0x0840,0x0840,0x0840,0x0000,0x0000,0x0000,0x0000,0x0840,0x0840,0x0840,0x0840,0x0840,0x1081,0x18C2,0x18C2,0x2944,0x2944,0x4A69,0x630C,0x94B2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xCD2D,0x92C0,0xA320,0xAB60,0xB3C0,0xBC00,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xE540,0x6260,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x8C30,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xDEDA,0xC617,0xB596,0xB596,0xB596,0xD679,0xE71B,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xC617,0x94B2,0x528A,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x39C7,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x630C,0x52AA,0x4A49,0x2944,0x2944,0x18C2,0x18C2,0x18C2,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x2944,0x52AA,0x94B2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xABC5,0xA320,0xAB60,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xBC25,0x52AA,0x528A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52AA,0xEF3C,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0xD679,0xC617,0xC617,0xD679,0xE71B,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF3C,0xB596,0x8C30,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x18C2,0x18C2,0x1081,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x39C7,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xAB60,0xA320,0xAB60,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xEDA0,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0x6260,0x73AE,0xC617,0x8C30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0xDEDA,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xDEDA,0xD679,0xD679,0xE71B,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xDEDA,0x9CF3,0x4A49,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x4A69,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xA320,0xAB60,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xBC00,0x4A49,0x9CF3,0xEF5D,0xF79D,0x9CF3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0xB596,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xE71B,0xDEDA,0xDEDA,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xC617,0x73AE,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x4A69,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xA320,0xAB60,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xE540,0xEDA0,0xEDA0,0xF5E0,0xF5E0,0xF5E0,0xFE20,0xFE20,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xE540,0x92C0,0x52AA,0xB596,0xF7BE,0xFFFF,0xFFFF,0xB596,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x9CF3,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xE71B,0xEF5D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0x9CF3,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x18C2,0x18C2,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x73AE,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD5B1,0x92C0,0xA320,0xAB60,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xE540,0xE540,0xEDA0,0xEDA0,0xEDA0,0xEDA0,0xEDA0,0xF5E0,0xF5E0,0xF5E0,0xF5E0,0xF5E0,0xF5E0,0xEDA0,0xE540,0xC460,0x6260,0x73AE,0xD679,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xD679,0x39C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x8C30,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xF77D,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xC617,0x630C,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x51C0,0x7A60,0xA320,0xAB60,0xA320,0xA320,0x7A60,0x4140,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x2944,0x39C7,0x4A69,0x630C,0x73AE,0x73AE,0x73AE,0x630C,0x4A49,0x2944,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xCD2D,0x92C0,0xA320,0xAB60,0xB3C0,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xE540,0xE540,0xE540,0xE540,0xE540,0xE540,0xE540,0xE540,0xE540,0xD4E0,0xC460,0xA320,0x6260,0x94B2,0xE71B,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0x630C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x630C,0xE71B,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xB596,0x73AE,0x39C7,0x2944,0x2944,0x2944,0x2944,0x2944,0x39C7,0x39C7,0x39C7,0x4A49,0x4A49,0x4A49,0x39C7,0x39C7,0x2944,0x4140,0x92C0,0xAB60,0xAB60,0xBC00,0xBC00,0xBC00,0xBC00,0xB3C0,0xAB60,0x69C0,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x2944,0x630C,0x94B2,0xB596,0xDEDA,0xEF5D,0xF77D,0xF79D,0xF79D,0xF79D,0xF79D,0xEF5D,0xDEDA,0xB596,0x94B2,0x73AE,0x4A49,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xB469,0x92C0,0xA320,0xAB60,0xB3C0,0xBC00,0xBC00,0xC460,0xC460,0xC460,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xC460,0xBC00,0x7A60,0x528A,0xB596,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x9CF3,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52AA,0xDEDA,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0xC617,0xB596,0x9CF3,0x9CF3,0x94B2,0x94B2,0x94B2,0x94B2,0x8C30,0x8C30,0x8C30,0x8C30,0x8C30,0x73AE,0x9324,0xAB60,0xA320,0x7A60,0x9324,0xCCC5,0xD4E0,0xD4E0,0xD4E0,0xC460,0xBC00,0xAB60,0x7A60,0x0840,0x0000,0x0000,0x0000,0x18C2,0x528A,0x9CF3,0xD679,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xD679,0xB596,0x94B2,0x73AE,0x4A49,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xABA4,0xA320,0xAB60,0xAB60,0xB3C0,0xBC00,0xBC00,0xBC00,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xBC00,0xBC00,0xAB60,0x51C0,0x630C,0xC617,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xD679,0x39C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x52AA,0xD679,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xE71B,0xD679,0xC617,0xC617,0xB596,0xB596,0xB596,0x9CF3,0x9CF3,0x9CF3,0x94B2,0x8C30,0x9324,0xAB60,0xA320,0x69C0,0x69C0,0xABC5,0xEDA0,0xF5E0,0xEDA0,0xE540,0xD4E0,0xD4E0,0xC460,0xAB60,0x69C0,0x0000,0x0000,0x4A69,0xB596,0xEF5D,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xB596,0x630C,0x39C7,0x2944,0x2944,0x2944,0x4A49,0x8C30,0xE71B,0xFFFF,0xFFFF,0xF7BE,0xD679,0xB596,0x9CF3,0x8C30,0x630C,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xA320,0xAB60,0xAB60,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xBC00,0xBC00,0xBC00,0xBC00,0xBC00,0xBC00,0xBC00,0xB3C0,0xB3C0,0xAB60,0x7A60,0x2944,0x73AE,0xD679,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0x94B2,0x2944,0x1081,0x0000,0x0000,0x0000,0x0000,0x0840,0x2944,0x39C7,0x8C30,0xD679,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF5D,0xE71B,0xDEDA,0xD679,0xC617,0xB596,0xB596,0x9CF3,0x94B2,0x8C30,0x9324,0xAB60,0xAB60,0x69C0,0x61A0,0x9324,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE20,0xF5E0,0xE540,0xD4E0,0xC460,0xAB60,0x51C0,0x73AE,0xEF3C,0xFFFF,0xFFFF,0xFFFF,0xF79D,0x94B2,0x2944,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0xB596,0xFFFF,0xFFFF,0xF77D,0xD679,0xB596,0x9CF3,0x94B2,0x630C,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x94B2,0x92C0,0xA320,0xA320,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xA320,0x7A60,0x4140,0x0840,0x52AA,0xD679,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xDEDA,0x9CF3,0x8C30,0x73AE,0x73AE,0x73AE,0x8C30,0x94B2,0xB596,0xD679,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xEF3C,0xDEDA,0xD679,0xC617,0xB596,0x9CF3,0x9CF3,0x94B2,0x9324,0xAB60,0xB3C0,0x69C0,0x61A0,0x92C0,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xEDA0,0xD4E0,0xC460,0xAB60,0xD5B1,0xFFFF,0xFFFF,0xFFFF,0xE71B,0x4A49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0xD679,0xFFFF,0xFFFF,0xF79D,0xDEDA,0xC617,0x9CF3,0x8C30,0x4A49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4A49,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x18C2,0x69C0,0x7A60,0x92C0,0xA320,0xA320,0xA320,0xA320,0xA320,0xA320,0xA320,0x92C0,0x7A60,0x69C0,0x4140,0x0840,0x0000,0x2944,0xC617,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xEF5D,0xEF3C,0xEF3C,0xF77D,0xF79D,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xDEDA,0xD679,0xC617,0xB596,0x9CF3,0x9CF3,0x94B2,0x73AE,0xA320,0xB3C0,0x92C0,0x61A0,0x7A60,0xE540,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xEDA0,0xD4E0,0xC460,0xB3C0,0xDEDA,0xFFFF,0xD679,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x630C,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xE71B,0xC617,0x9CF3,0x73AE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x630C,0x0000,0x0840,0x1081,0x2944,0x4140,0x4140,0x4140,0x4140,0x2944,0x18C2,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x8C30,0xF79D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF3C,0xDEDA,0xD679,0xC617,0xB596,0x9CF3,0x94B2,0x8C30,0x73AE,0xA320,0xB3C0,0xB3C0,0x69C0,0x69C0,0xD4E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0xD4E0,0xBC00,0xABA4,0xC617,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x39C7,0x39C7,0x0840,0x0000,0x39C7,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xD679,0x9CF3,0x73AE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0xD679,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xE71B,0xDEDA,0xC617,0xB596,0xB596,0x9CF3,0x94B2,0x8C30,0x73AE,0x9324,0xAB60,0xBC00,0x7A60,0x61A0,0xA320,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0xD4E0,0xBC00,0xA320,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x73AE,0x94B2,0x8C30,0x18C2,0x0000,0x4A49,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xD679,0x9CF3,0x73AE,0x0000,0x0000,0x0000,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x52AA,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x630C,0xF79D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xF77D,0xEF3C,0xE71B,0xD679,0xD679,0xC617,0xC617,0xC617,0xC617,0xC617,0xC617,0xC617,0xC617,0xC617,0xC617,0xC617,0xD679,0xD679,0xDEDA,0xE71B,0xE71B,0xEF5D,0xF77D,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF5D,0xE71B,0xD679,0xC617,0xB596,0xB596,0x9CF3,0x94B2,0x8C30,0x73AE,0x9324,0xAB60,0xBC00,0xBC00,0x61A0,0x69C0,0xE540,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0xD4E0,0xBC00,0x7A60,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x2944,0x630C,0x94B2,0x9CF3,0x9CF3,0x94B2,0x18C2,0x0000,0x94B2,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xC617,0x9CF3,0x630C,0x0000,0x0000,0x1081,0x18C2,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8C30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0xB596,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xEF3C,0xDEDA,0xC617,0xB596,0xB596,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xB596,0xB596,0xB596,0xC617,0xD679,0xDEDA,0xE71B,0xEF5D,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xEF3C,0xDEDA,0xD679,0xC617,0xB596,0xB596,0x9CF3,0x94B2,0x8C30,0x73AE,0x9324,0xAB60,0xBC00,0xD4E0,0x92C0,0x61A0,0x92C0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xEDA0,0xD4E0,0xB3C0,0x51C0,0x0000,0x0000,0x0000,0x0840,0x630C,0x94B2,0x9CF3,0x9CF3,0x9CF3,0x94B2,0x4A69,0x0000,0x2944,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0xB596,0x94B2,0x4A49,0x0000,0x0000,0x2944,0x2944,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4A49,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0xD679,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xDEDA,0xC617,0xB596,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xB596,0xC617,0xDEDA,0xEF5D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xF77D,0xE71B,0xDEDA,0xD679,0xC617,0xB596,0x9CF3,0x9CF3,0x94B2,0x8C30,0x73AE,0x9324,0xAB60,0xBC00,0xD4E0,0xD4E0,0x69C0,0x61A0,0xD4E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0xD4E0,0xAB60,0x18C2,0x0000,0x0000,0x0840,0x4A49,0x630C,0x73AE,0x630C,0x630C,0x2944,0x0840,0x18C2,0xC617,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xD679,0x9CF3,0x8C30,0x18C2,0x0000,0x18C2,0x39C7,0x39C7,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4A49,0xEF3C,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF5D,0xDEDA,0xD679,0xC617,0xC617,0xC617,0xD679,0xD679,0xDEDA,0xDEDA,0xE71B,0xE71B,0xEF3C,0xEF3C,0xEF3C,0xEF3C,0xEF3C,0xEF3C,0xEF3C,0xE71B,0xE71B,0xE71B,0xDEDA,0xDEDA,0xD679,0xD679,0xD679,0xC617,0xC617,0xB596,0xB596,0xB596,0xB596,0xB596,0xC617,0xD679,0xE71B,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xEF5D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF5D,0xE71B,0xD679,0xD679,0xC617,0xB596,0x9CF3,0x9CF3,0x94B2,0x8C30,0x73AE,0x9324,0xAB60,0xBC00,0xC460,0xE540,0xC484,0x61A0,0x7A60,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0xD4E0,0xA320,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x528A,0xD679,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0xB596,0x94B2,0x4A49,0x0000,0x0000,0x39C7,0x4A49,0x39C7,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x630C,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x630C,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xF7BE,0xF7BE,0xF7BE,0xF7BE,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xDEDA,0xEF5D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xEF3C,0xE71B,0xD679,0xC617,0xC617,0xB596,0x9CF3,0x9CF3,0x94B2,0x8C30,0x8C30,0x9324,0xAB60,0xBC00,0xC460,0xE540,0xF5E0,0xBC00,0x61A0,0x92C0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xEDA0,0xC460,0x9324,0x630C,0x4A49,0x39C7,0x39C7,0x39C7,0x528A,0x8C30,0xD679,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xC617,0x94B2,0x52AA,0x0840,0x0000,0x18C2,0x52AA,0x4A69,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x39C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94B2,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0xC617,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xEF3C,0xE71B,0xD679,0xD679,0xC617,0xB596,0xB596,0x9CF3,0x94B2,0x8C30,0x8C30,0x73AE,0xAB60,0xBC00,0xC460,0xE540,0xF5E0,0xFE60,0xA320,0x61A0,0xB3C0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xB3C0,0xBC00,0xEDA0,0xC460,0xD679,0xFFFF,0xF7BE,0xF79D,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xD679,0x94B2,0x4A69,0x0840,0x0000,0x0840,0x528A,0x630C,0x39C7,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94B2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x39C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9CF3,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF3C,0xD679,0xC617,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF5D,0xE71B,0xDEDA,0xD679,0xC617,0xB596,0xB596,0x9CF3,0x94B2,0x94B2,0x8C30,0x73AE,0xA320,0xB3C0,0xC460,0xD4E0,0xEDA0,0xFE20,0xFE60,0x92C0,0x61A0,0xC460,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xA320,0x92C0,0xD4E0,0xEDA0,0xC484,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xC617,0x8C30,0x2944,0x0000,0x0000,0x18C2,0x4A49,0x630C,0x528A,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x52AA,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB596,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xDEDA,0xC617,0xC617,0xDEDA,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xEF3C,0xDEDA,0xD679,0xC617,0xB596,0xB596,0x9CF3,0x9CF3,0x94B2,0x8C30,0x8C30,0x9324,0xAB60,0xBC00,0xD4E0,0xEDA0,0xFE20,0xFE60,0xFE60,0x92C0,0x61A0,0xD4E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xD4E0,0x92C0,0xC460,0xFE60,0xD4E0,0xDEDA,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF3C,0xC617,0x9CF3,0x52AA,0x1081,0x0000,0x0840,0x2944,0x52AA,0x630C,0x528A,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x630C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC617,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xC617,0xC617,0xC617,0xE71B,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF5D,0xE71B,0xDEDA,0xD679,0xC617,0xB596,0xB596,0x9CF3,0x9CF3,0x94B2,0x8C30,0x73AE,0x9324,0xB3C0,0xC460,0xE540,0xF5E0,0xFE60,0xFE60,0xFE60,0x92C0,0x61A0,0xD4E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xC460,0xC460,0xFE60,0xF5E0,0xB469,0x9CF3,0xC617,0xD679,0xD679,0xD679,0xC617,0xB596,0x9CF3,0x73AE,0x4A69,0x18C2,0x0000,0x0000,0x0000,0x18C2,0x39C7,0x4A69,0x4A49,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x630C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0xC617,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xDEDA,0xC617,0xC617,0xDEDA,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xEF5D,0xE71B,0xDEDA,0xD679,0xC617,0xB596,0xB596,0x9CF3,0x9CF3,0x94B2,0x8C30,0x73AE,0x9324,0xB3C0,0xC460,0xE540,0xFE20,0xFE60,0xFE60,0xFE60,0x92C0,0x61A0,0xD4E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xEDA0,0xFE60,0xFE60,0x92C0,0x0840,0x18C2,0x18C2,0x18C2,0x18C2,0x18C2,0x18C2,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x2944,0x2944,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x630C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0xC617,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xD679,0xC617,0xD679,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF5D,0xE71B,0xDEDA,0xD679,0xC617,0xB596,0xB596,0x9CF3,0x9CF3,0x94B2,0x8C30,0x73AE,0xA320,0xBC00,0xD4E0,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE20,0x92C0,0x61A0,0xC460,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xB3C0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0840,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8C30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0xC617,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xC617,0xC617,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xF77D,0xE71B,0xDEDA,0xD679,0xC617,0xB596,0xB596,0x9CF3,0x9CF3,0x94B2,0x8C30,0x73AE,0xA320,0xBC00,0xD4E0,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE20,0x92C0,0x61A0,0xC460,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xBC00,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8C30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0xC617,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xDEDA,0xC617,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xEF3C,0xDEDA,0xD679,0xC617,0xC617,0xB596,0x9CF3,0x9CF3,0x94B2,0x8C30,0x8C30,0xA320,0xBC00,0xD4E0,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE60,0xA320,0x61A0,0xC460,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xBC00,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73AE,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8C30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB596,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xC617,0xF79D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF5D,0xE71B,0xDEDA,0xD679,0xC617,0xB596,0xB596,0x9CF3,0x94B2,0x94B2,0x8C30,0xA320,0xBC00,0xD4E0,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE60,0xAB60,0x61A0,0xB3C0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xC460,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x9CF3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB596,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0xF79D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xEF3C,0xDEDA,0xD679,0xC617,0xB596,0xB596,0x9CF3,0x9CF3,0x94B2,0x8C30,0xA320,0xBC00,0xD4E0,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE60,0xBC00,0x61A0,0xA320,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE60,0xFE60,0xFE60,0xFE60,0xC460,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x9CF3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB596,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF5D,0xE71B,0xDEDA,0xD679,0xC617,0xB596,0xB596,0x9CF3,0x94B2,0x8C30,0xA320,0xBC00,0xD4E0,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE60,0xD4E0,0x69C0,0x7A60,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE62,0xFE60,0xF5E0,0xFE60,0xFE60,0xC460,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9CF3,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xEF3C,0xDEDA,0xD679,0xC617,0xB596,0xB596,0x9CF3,0x9CF3,0x94B2,0xA320,0xBC00,0xD4E0,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0x7A60,0x69C0,0xD4E0,0xFE60,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0xC460,0xFE20,0xFE60,0xC460,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8C30,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xF77D,0xE71B,0xDEDA,0xD679,0xC617,0xB596,0xB596,0x9CF3,0x9CF3,0xA320,0xB3C0,0xC460,0xE540,0xFE20,0xFE60,0xFE60,0xFE60,0xFE20,0x92C0,0x61A0,0xAB60,0xFE60,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xBC00,0xA320,0xF5E0,0xFE60,0xC460,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x630C,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF5D,0xE71B,0xDEDA,0xD679,0xC617,0xB596,0xB596,0x9CF3,0xAB60,0xB3C0,0xC460,0xE540,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xC460,0x61A0,0x7A60,0xF5E0,0xFE62,0xFE86,0xFE86,0xFE63,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0xA320,0x92C0,0xF5E0,0xFE60,0xBC00,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4A49,0xEF5D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xEF3C,0xE71B,0xD679,0xC617,0xC617,0xB596,0x9CF3,0xABC5,0xAB60,0xC460,0xD4E0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0x7A60,0x61A0,0xC460,0xFE62,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xC460,0x92C0,0xA320,0xFE60,0xFE20,0x9324,0x18C2,0x2944,0x39C7,0x4A49,0x4A69,0x52AA,0x52AA,0x52AA,0x4A49,0x2944,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0xE71B,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xEF3C,0xDEDA,0xD679,0xC617,0xB596,0xB596,0x94B2,0xAB60,0xBC00,0xD4E0,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xA320,0x61A0,0x92C0,0xFE20,0xFE63,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xC460,0xAB60,0xD4E0,0xFE60,0xF5E0,0xABC5,0x9CF3,0xB596,0xB596,0xB596,0xC617,0xC617,0xC617,0xC617,0xB596,0x94B2,0x73AE,0x4A49,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0xD679,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xE71B,0xDEDA,0xD679,0xC617,0xB596,0xB596,0xABA4,0xB3C0,0xC460,0xE540,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xD4E0,0x69C0,0x69C0,0xD4E0,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0xF5E0,0xFE60,0xFE60,0xD4E0,0xD679,0xEF5D,0xF79D,0xF79D,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xF77D,0xDEDA,0xC617,0x9CF3,0x73AE,0x4A49,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0xC617,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF5D,0xE71B,0xDEDA,0xD679,0xC617,0xB596,0x9CF3,0xAB60,0xC460,0xD4E0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0x7A60,0x61A0,0xA320,0xFE60,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xCCC5,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xD679,0xB596,0x94B2,0x630C,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9CF3,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF5D,0xE71B,0xDEDA,0xD679,0xC617,0xB596,0xABA4,0xB3C0,0xC460,0xE540,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xBC00,0x61A0,0x69C0,0xE540,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0xD679,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xE71B,0xC617,0x9CF3,0x73AE,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8C30,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xEF5D,0xE71B,0xD679,0xD679,0xC617,0x9CF3,0xAB60,0xC460,0xD4E0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0x7A60,0x61A0,0xA320,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xD56B,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xDEDA,0xB596,0x9CF3,0x73AE,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x39C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x528A,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xEF3C,0xE71B,0xD679,0xC617,0xB596,0xABC5,0xB3C0,0xC460,0xE540,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xB3C0,0x61A0,0x69C0,0xE540,0xFE60,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xC484,0x9CF3,0x8C30,0x73AE,0x630C,0x4A49,0x4A69,0x630C,0x8C30,0xC617,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xD679,0xB596,0x94B2,0x630C,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x4A49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0xE71B,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xEF3C,0xDEDA,0xD679,0xC617,0xB596,0xAB60,0xBC00,0xD4E0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0x7A60,0x61A0,0x92C0,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0x4140,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x39C7,0x9CF3,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xDEDA,0xC617,0x9CF3,0x8C30,0x4A49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x52AA,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0xC617,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xEF3C,0xDEDA,0xD679,0xC617,0xB469,0xAB60,0xC460,0xE540,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xBC00,0x61A0,0x61A0,0xD4E0,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xAB60,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x73AE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0xC617,0xB596,0x94B2,0x73AE,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x630C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9CF3,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xE71B,0xDEDA,0xD679,0xC617,0xABA4,0xBC00,0xD4E0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0x7A60,0x61A0,0x7A60,0xFE20,0xFE60,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xEDA0,0x4140,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0xB596,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF3C,0xD679,0xB596,0x94B2,0x73AE,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x73AE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x630C,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF5D,0xE71B,0xDEDA,0xD679,0xB596,0xAB60,0xC460,0xE540,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xC460,0x69C0,0x61A0,0xC460,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xC460,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x528A,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF3C,0xD679,0xB596,0x9CF3,0x8C30,0x4A49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x630C,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8C30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0xE71B,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xF77D,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF5D,0xE71B,0xD679,0xC617,0xB469,0xB3C0,0xD4E0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xA320,0x61A0,0x7A60,0xF5E0,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0x7A60,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF3C,0xD679,0xB596,0x9CF3,0x8C30,0x528A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8C30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC617,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xEF3C,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xEF3C,0xDEDA,0xD679,0xC617,0xABA4,0xC460,0xE540,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xE540,0x69C0,0x61A0,0xB3C0,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xEDA0,0x4140,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x1081,0x0000,0x0000,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF3C,0xD679,0xB596,0x9CF3,0x8C30,0x528A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8C30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73AE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xE71B,0xE71B,0xEF5D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xE71B,0xDEDA,0xD679,0xC50D,0xAB60,0xD4E0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xB3C0,0x61A0,0x69C0,0xE540,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xD4E0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x630C,0x73AE,0x18C2,0x1081,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0xD679,0xB596,0x9CF3,0x8C30,0x528A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x1081,0x18C2,0x18C2,0x18C2,0x18C2,0x18C2,0x18C2,0x18C2,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x9CF3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xDEDA,0xD679,0xE71B,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF5D,0xE71B,0xD679,0xC617,0xABC5,0xBC00,0xE540,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xEDA0,0x7A60,0x61A0,0x92C0,0xFE20,0xFE60,0xFE60,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xCCC5,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x630C,0x9CF3,0x94B2,0x18C2,0x39C7,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0xC617,0xB596,0x94B2,0x8C30,0x4A49,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x18C2,0x2944,0x39C7,0x39C7,0x39C7,0x39C7,0x39C7,0x39C7,0x39C7,0x2944,0x2944,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x630C,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x9CF3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC617,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF3C,0xD679,0xD679,0xDEDA,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xEF3C,0xDEDA,0xD679,0xB596,0xAB60,0xD4E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xBC00,0x61A0,0x61A0,0xC460,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xE60B,0x4A49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0x8C30,0x9CF3,0x9CF3,0x630C,0x0000,0x8C30,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xE71B,0xC617,0xB596,0x94B2,0x73AE,0x39C7,0x0000,0x0000,0x2944,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x2944,0x4A49,0x4A69,0x52AA,0x52AA,0x52AA,0x52AA,0x528A,0x4A69,0x4A49,0x39C7,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x94B2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x630C,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0xC617,0xC617,0xD679,0xEF5D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xE71B,0xD679,0xC617,0xABC5,0xC460,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0x7A60,0x61A0,0x7A60,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xE540,0xEF3C,0xC617,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4A49,0x94B2,0x94B2,0x630C,0x0840,0x39C7,0xF79D,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xDEDA,0xC617,0x9CF3,0x94B2,0x73AE,0x2944,0x0000,0x18C2,0x4A49,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x39C7,0x4A69,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x528A,0x39C7,0x2944,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8C30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0xEF3C,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xDEDA,0xB596,0xB596,0xD679,0xE71B,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xEF3C,0xDEDA,0xD679,0xC50D,0xB3C0,0xE540,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xC484,0x61A0,0x61A0,0xB3C0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xCCC5,0xFFFF,0xFFFF,0x8C30,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x39C7,0x2944,0x0840,0x4A49,0xDEDA,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF3C,0xD679,0xB596,0x9CF3,0x8C30,0x630C,0x0840,0x0000,0x39C7,0x52AA,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x39C7,0x528A,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x4A49,0x2944,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73AE,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8C30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x94B2,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xD679,0xB596,0xB596,0xC617,0xE71B,0xF79D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF3C,0xDEDA,0xD679,0xC617,0xAB60,0xD4E0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0x92C0,0x61A0,0x69C0,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xD5B1,0xFFFF,0xFFFF,0xFFFF,0x94B2,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x2944,0x8C30,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xE71B,0xC617,0xB596,0x94B2,0x73AE,0x39C7,0x0000,0x0840,0x630C,0x52AA,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x2944,0x4A49,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x4A49,0x2944,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x73AE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0xC617,0xB596,0xB596,0xC617,0xDEDA,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF5D,0xE71B,0xD679,0xC617,0xB469,0xBC00,0xE540,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xE540,0x69C0,0x69C0,0xC484,0xFE60,0xFE60,0xFE60,0xFE60,0xE540,0xE71B,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xDEDA,0x8C30,0x39C7,0x2944,0x2944,0x39C7,0x630C,0xB596,0xEF3C,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF3C,0xD679,0xB596,0x9CF3,0x8C30,0x52AA,0x0840,0x0000,0x39C7,0x8C30,0x4A49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x2944,0x4A49,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x4A49,0x2944,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x528A,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x630C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9CF3,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xDEDA,0xB596,0x9CF3,0x9CF3,0xB596,0xD679,0xEF5D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xE71B,0xD679,0xC617,0xB596,0xAB60,0xC460,0xEDA0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xC484,0x92C0,0xC460,0xFE60,0xFE60,0xFE60,0xFE20,0xCCC5,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xEF5D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xD679,0xB596,0x9CF3,0x8C30,0x528A,0x0840,0x0000,0x18C2,0x630C,0x73AE,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x39C7,0x528A,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x4A69,0x39C7,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x4A49,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xD679,0xB596,0x9CF3,0x9CF3,0xB596,0xD679,0xEF3C,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xE71B,0xD679,0xC617,0xB596,0x94B2,0xB3C0,0xD4E0,0xF5E0,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xD4E0,0xE540,0xFE60,0xFE60,0xFE60,0xE540,0xB469,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xD679,0xB596,0x94B2,0x73AE,0x39C7,0x0840,0x0000,0x1081,0x52AA,0x8C30,0x528A,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x2944,0x4A49,0x52AA,0x630C,0x630C,0x630C,0x630C,0x528A,0x39C7,0x2944,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x52AA,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x39C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9CF3,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF3C,0xD679,0xB596,0x9CF3,0x9CF3,0xB596,0xD679,0xE71B,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF3C,0xDEDA,0xD679,0xB596,0xB596,0x9CF3,0x8C30,0xB3C0,0xD4E0,0xEDA0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0xA320,0x1081,0xB596,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xD679,0xB596,0x94B2,0x630C,0x18C2,0x0000,0x0000,0x18C2,0x630C,0x8C30,0x630C,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x2944,0x39C7,0x4A69,0x52AA,0x630C,0x52AA,0x4A69,0x39C7,0x2944,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xE71B,0xC617,0x9CF3,0x9CF3,0x9CF3,0xB596,0xC617,0xE71B,0xF79D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xE71B,0xD679,0xC617,0xB596,0x9CF3,0x94B2,0x8C30,0x73AE,0x9324,0xBC00,0xD4E0,0xEDA0,0xFE20,0xFE20,0xFE60,0xFE60,0xFE60,0xFE20,0xEDA0,0xBC00,0x1081,0x0000,0x1081,0x8C30,0xEF5D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xDEDA,0xB596,0x9CF3,0x73AE,0x2944,0x0840,0x0000,0x0000,0x18C2,0x630C,0x8C30,0x630C,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x2944,0x39C7,0x4A49,0x4A49,0x4A49,0x39C7,0x2944,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73AE,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9CF3,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xDEDA,0xC617,0x9CF3,0x9CF3,0x9CF3,0xB596,0xC617,0xDEDA,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xE71B,0xD679,0xC617,0xB596,0x9CF3,0x94B2,0x8C30,0x630C,0x39C7,0x1081,0x4140,0x7A60,0xAB60,0xBC00,0xD4E0,0xD4E0,0xE540,0xE540,0xD4E0,0xA320,0x18C2,0x0000,0x0000,0x0000,0x0000,0x39C7,0x94B2,0xD679,0xF77D,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xEF3C,0xD679,0xB596,0x94B2,0x630C,0x2944,0x0840,0x0000,0x0000,0x0000,0x2944,0x52AA,0x630C,0x4A49,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x2944,0x39C7,0x39C7,0x39C7,0x39C7,0x2944,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xD679,0xB596,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xC617,0xDEDA,0xEF5D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xE71B,0xD679,0xB596,0x9CF3,0x8C30,0x630C,0x4A49,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x2944,0x4140,0x69C0,0x69C0,0x4140,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x39C7,0x73AE,0x94B2,0x9CF3,0xB596,0xB596,0x9CF3,0x94B2,0x8C30,0x630C,0x39C7,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x39C7,0x39C7,0x2944,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x2944,0x2944,0x2944,0x18C2,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x9CF3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73AE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xE71B,0xD679,0xB596,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xC617,0xD679,0xEF5D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xDEDA,0xC617,0x9CF3,0x73AE,0x4A69,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x18C2,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x18C2,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4A49,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x73AE,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB596,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xDEDA,0xC617,0xB596,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xB596,0xD679,0xEF3C,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xC617,0x9CF3,0x630C,0x2944,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x39C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0xEF3C,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF3C,0xD679,0xB596,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xB596,0xD679,0xEF3C,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xDEDA,0xB596,0x73AE,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xE71B,0xD679,0xB596,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xB596,0xD679,0xE71B,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xC617,0x8C30,0x39C7,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73AE,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73AE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xDEDA,0xC617,0xB596,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xB596,0xD679,0xE71B,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xD679,0x9CF3,0x4A69,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x630C,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x9CF3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8C30,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xE71B,0xD679,0xB596,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xB596,0xD679,0xE71B,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xDEDA,0x9CF3,0x630C,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4A69,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x52AA,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x73AE,0xF79D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xDEDA,0xC617,0xB596,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xB596,0xD679,0xEF5D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xDEDA,0x9CF3,0x630C,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x1081,0x18C2,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x630C,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x630C,0xE71B,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xF79D,0xF77D,0xF77D,0xF77D,0xF77D,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xE71B,0xD679,0xB596,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xB596,0xC617,0xE71B,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF3C,0xC617,0x8C30,0x4A49,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x2944,0x4A49,0x52AA,0x630C,0x4A69,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x528A,0xC617,0xE71B,0xF79D,0xF7BE,0xFFFF,0xFFFF,0xF7BE,0xF7BE,0xF79D,0xF77D,0xEF5D,0xEF3C,0xEF3C,0xE71B,0xE71B,0xE71B,0xE71B,0xE71B,0xE71B,0xEF5D,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xD679,0xC617,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xC617,0xE71B,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xD679,0x94B2,0x52AA,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x2944,0x52AA,0x630C,0x630C,0x630C,0x630C,0x630C,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x9CF3,0x0840,0x0840,0x1081,0x18C2,0x18C2,0x2944,0x4140,0x4140,0x18C2,0x18C2,0x1081,0x0840,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x528A,0x9CF3,0xC617,0xD679,0xE71B,0xE71B,0xE71B,0xE71B,0xE71B,0xDEDA,0xDEDA,0xDEDA,0xD679,0xD679,0xD679,0xD679,0xD679,0xD679,0xD679,0xDEDA,0xEF3C,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xDEDA,0xC617,0xB596,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xC617,0xE71B,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xD679,0x94B2,0x52AA,0x2944,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x4A49,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x4A69,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x52AA,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x9324,0x7A60,0x7A60,0x92C0,0x92C0,0xA320,0xA320,0xA320,0xA320,0xA320,0xA320,0x92C0,0x92C0,0x7A60,0x7A60,0x61A0,0x4140,0x18C2,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x4A69,0x94B2,0xB596,0xB596,0xC617,0xD679,0xD679,0xD679,0xD679,0xC617,0xC617,0xC617,0xC617,0xC617,0xB596,0xB596,0xC617,0xC617,0xD679,0xDEDA,0xEF3C,0xF7BE,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xE71B,0xC617,0xB596,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xC617,0xEF3C,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xD679,0x9CF3,0x52AA,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x52AA,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xCD2D,0xABA4,0x92C0,0xA320,0xA320,0xA320,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xA320,0xA320,0xA320,0x92C0,0x7A60,0x69C0,0x51C0,0x4140,0x1081,0x0840,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4A49,0x8C30,0x9CF3,0xB596,0xB596,0xB596,0xB596,0xB596,0xB596,0xB596,0xB596,0xB596,0xB596,0xB596,0xB596,0xB596,0xB596,0xB596,0xC617,0xD679,0xEF3C,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0xD679,0xB596,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xB596,0xD679,0xEF5D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xDEDA,0x9CF3,0x630C,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x52AA,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD5B1,0xAB60,0x92C0,0xA320,0xA320,0xAB60,0xAB60,0xAB60,0xAB60,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xA320,0xA320,0xA320,0x7A60,0x7A60,0x69C0,0x4140,0x4140,0x18C2,0x1081,0x0840,0x0840,0x0000,0x0000,0x39C7,0x73AE,0x94B2,0x94B2,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xB596,0xB596,0xC617,0xDEDA,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF3C,0xD679,0xB596,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xB596,0xD679,0xF79D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xC617,0x73AE,0x39C7,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4A49,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x52AA,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xB469,0x92C0,0xA320,0xA320,0xAB60,0xAB60,0xAB60,0xB3C0,0xB3C0,0xB3C0,0xBC00,0xBC00,0xBC00,0xBC00,0xBC00,0xBC00,0xC460,0xBC00,0xBC00,0xBC00,0xBC00,0xBC00,0xBC00,0xBC00,0xBC00,0xB3C0,0xB3C0,0xB3C0,0xAB60,0xAB60,0xAB60,0xAB60,0xA320,0xA320,0xA320,0xA320,0x92C0,0x7A60,0x7A60,0x69C0,0x69C0,0x51C0,0x6260,0x9324,0x73AE,0x8C30,0x8C30,0x8C30,0x8C30,0x8C30,0x8C30,0x8C30,0x8C30,0x8C30,0x8C30,0x8C30,0x8C30,0x94B2,0x9CF3,0x9CF3,0xB596,0xC617,0xE71B,0xEF3C,0xEF3C,0xEF3C,0xEF5D,0xF79D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xD679,0xB596,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xB596,0xE71B,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xE71B,0x9CF3,0x528A,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x39C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x39C7,0x94B2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBC25,0x92C0,0xA320,0xA320,0xAB60,0xAB60,0xB3C0,0xB3C0,0xBC00,0xBC00,0xBC00,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xBC00,0xBC00,0xBC00,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xA320,0xA320,0xA320,0xA320,0xA320,0xA320,0xA320,0xA320,0xA320,0xA320,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xAB60,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xBC00,0xBC00,0xC460,0xC484,0xE540,0xE60B,0xE60B,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xDEDA,0xB596,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xC617,0xEF5D,0xFFFF,0xFFFF,0xF7BE,0xD679,0x94B2,0x39C7,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x2944,0x73AE,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xCD2D,0x92C0,0xA320,0xA320,0xAB60,0xAB60,0xB3C0,0xB3C0,0xBC00,0xBC00,0xC460,0xC460,0xC460,0xC460,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xC460,0xC460,0xC460,0xC460,0xC460,0xBC00,0xBC00,0xBC00,0xBC00,0xBC00,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xB3C0,0xBC00,0xBC00,0xBC00,0xBC00,0xBC00,0xC460,0xC460,0xC460,0xC460,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFF10,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xDEDA,0xC617,0x9CF3,0x9CF3,0x9CF3,0x9CF3,0xB596,0xDEDA,0xF7BE,0xFFFF,0xF7BE,0xD679,0x8C30,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x630C,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x2944,0x73AE,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xA320,0xA320,0xAB60,0xAB60,0xB3C0,0xBC00,0xBC00,0xC460,0xC460,0xC460,0xC460,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xE540,0xE540,0xE540,0xE540,0xE540,0xE540,0xE540,0xE540,0xE540,0xE540,0xE540,0xE540,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xC460,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xE540,0xE540,0xEDA0,0xEDA0,0xF5E0,0xFE20,0xFE20,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE63,0xFE62,0xFE20,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xDEDA,0xC617,0xB596,0x9CF3,0x9CF3,0xB596,0xC617,0xEF5D,0xFFFF,0xF7BE,0xD679,0x8C30,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x4A69,0x630C,0x630C,0x630C,0x630C,0x630C,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x39C7,0x630C,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xC50D,0x92C0,0xA320,0xAB60,0xAB60,0xB3C0,0xBC00,0xBC00,0xC460,0xC460,0xC460,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xE540,0xE540,0xE540,0xEDA0,0xEDA0,0xEDA0,0xEDA0,0xEDA0,0xF5E0,0xF5E0,0xEDA0,0xEDA0,0xEDA0,0xEDA0,0xEDA0,0xE540,0xE540,0xE540,0xE540,0xE540,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xE540,0xE540,0xE540,0xEDA0,0xEDA0,0xF5E0,0xFE20,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE60,0xFF10,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xE71B,0xD679,0xC617,0xB596,0xB596,0xC617,0xE71B,0xF7BE,0xF7BE,0xDEDA,0x8C30,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x39C7,0x52AA,0x52AA,0x4A49,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x1081,0x18C2,0x2944,0x2944,0x4A49,0x4A49,0x4A49,0x4A49,0x39C7,0x2944,0x18C2,0x18C2,0x1081,0x0840,0x0840,0x0840,0x1081,0x18C2,0x2944,0x39C7,0x630C,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xA320,0xA320,0xAB60,0xB3C0,0xB3C0,0xBC00,0xC460,0xC460,0xC460,0xD4E0,0xD4E0,0xD4E0,0xE540,0xE540,0xE540,0xEDA0,0xEDA0,0xF5E0,0xF5E0,0xFE20,0xFE20,0xFE20,0xFE20,0xFE20,0xFE20,0xFE20,0xFE20,0xFE20,0xF5E0,0xF5E0,0xF5E0,0xF5E0,0xEDA0,0xEDA0,0xEDA0,0xE540,0xE540,0xE540,0xE540,0xE540,0xE540,0xE540,0xE540,0xE540,0xE540,0xE540,0xE540,0xEDA0,0xEDA0,0xF5E0,0xF5E0,0xFE20,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xEF5D,0xDEDA,0xD679,0xC617,0xC617,0xDEDA,0xF77D,0xF7BE,0xDEDA,0x94B2,0x39C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x2944,0x52AA,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xA320,0xAB60,0xAB60,0xB3C0,0xBC00,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xD4E0,0xE540,0xE540,0xE540,0xEDA0,0xF5E0,0xF5E0,0xFE20,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xFE20,0xFE20,0xF5E0,0xF5E0,0xF5E0,0xF5E0,0xEDA0,0xEDA0,0xEDA0,0xEDA0,0xEDA0,0xEDA0,0xF5E0,0xF5E0,0xF5E0,0xFE20,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xE71B,0xDEDA,0xDEDA,0xDEDA,0xEF5D,0xF7BE,0xDEDA,0x94B2,0x39C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x4A49,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xCD2D,0x92C0,0xA320,0xAB60,0xB3C0,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xD4E0,0xE540,0xE540,0xEDA0,0xEDA0,0xF5E0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xFE20,0xFE20,0xFE20,0xFE20,0xFE20,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xEF3C,0xEF3C,0xF77D,0xF79D,0xDEDA,0x94B2,0x39C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x4A49,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBC25,0xA320,0xA320,0xAB60,0xB3C0,0xBC00,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xD4E0,0xE540,0xE540,0xEDA0,0xF5E0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xF7BE,0xEF5D,0xC617,0x8C30,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x630C,0x9CF3,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xABA4,0xA320,0xAB60,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xD4E0,0xE540,0xE540,0xEDA0,0xF5E0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF79D,0xDEDA,0x9CF3,0x52AA,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x528A,0x9CF3,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xA320,0xAB60,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xE540,0xEDA0,0xF5E0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE63,0xFE63,0xFE63,0xFE63,0xFE63,0xFE63,0xFE63,0xFE62,0xFE62,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xFE20,0xFE20,0xFE20,0xFE60,0xFE60,0xFE60,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xD679,0x9CF3,0x630C,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x39C7,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x2944,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xA320,0xAB60,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xF5E0,0xEDA0,0xEDA0,0xEDA0,0xEDA0,0xEDA0,0xF5E0,0xFE20,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xC617,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF77D,0xDEDA,0xB596,0x8C30,0x39C7,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x39C7,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x4A49,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xA320,0xAB60,0xB3C0,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xEDA0,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE62,0xFE62,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xF5E0,0xEDA0,0xE540,0xE540,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xD4E0,0xE540,0xF5E0,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE60,0xFE20,0x39C7,0x8C30,0xD679,0xF77D,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xFFFF,0xF7BE,0xF77D,0xE71B,0xD679,0xB596,0x94B2,0x528A,0x39C7,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x4A49,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x528A,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xA320,0xAB60,0xB3C0,0xBC00,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE62,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xF5E0,0xEDA0,0xE540,0xD4E0,0xD4E0,0xC460,0xC460,0xC460,0xBC00,0xBC00,0xC460,0xD4E0,0xE540,0xFE62,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xABA4,0x0000,0x0840,0x39C7,0x8C30,0x9CF3,0xB596,0xC617,0xC617,0xC617,0xC617,0xC617,0xD679,0xD679,0xD679,0xD679,0xD679,0xDEDA,0xDEDA,0xD679,0xD679,0xC617,0xC617,0xB596,0xB596,0x9CF3,0x8C30,0x52AA,0x4A49,0x39C7,0x2944,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x4A49,0x4A49,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x528A,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x9B0D,0xBA29,0xB24A,0x8B90,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xA320,0xAB60,0xB3C0,0xBC00,0xBC00,0xC460,0xD4E0,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE62,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xF5E0,0xEDA0,0xE540,0xD4E0,0xD4E0,0xC460,0xBC00,0xBC00,0xB3C0,0xAB60,0xA320,0xA320,0xA320,0xAB60,0xC460,0xEDA0,0xFE60,0xFE60,0xFE60,0xF5E0,0x2944,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x2944,0x2944,0x2944,0x2944,0x2944,0x2944,0x2944,0x2944,0x2944,0x2944,0x2944,0x2944,0x18C2,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0840,0x0840,0x0840,0x0840,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x39C7,0x4A69,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x4A49,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD166,0xF800,0xD904,0xE8A3,0xF800,0xE0E4,0x8B90,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE62,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xF5E0,0xEDA0,0xE540,0xD4E0,0xC460,0xC460,0xBC00,0xB3C0,0xAB60,0xA320,0x7A60,0x18C2,0x0840,0x0840,0x1081,0x18C2,0x4140,0x51C0,0x6260,0x6260,0x2944,0x0000,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x18C2,0x2944,0x2944,0x18C2,0x18C2,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x4A49,0x4A49,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x9CF3,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xAAAC,0xF061,0x8B90,0x7453,0x7453,0x8BB0,0xD145,0xF800,0xA2CC,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xF5E0,0xEDA0,0xE540,0xD4E0,0xC460,0xC460,0xBC00,0xB3C0,0xAB60,0xA320,0x51C0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x2944,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x2944,0x2944,0x2944,0x2944,0x2944,0x2944,0x18C2,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x4A49,0x4A49,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBA29,0xD904,0x7453,0x7453,0x7453,0x7453,0x7453,0xA2CC,0xF800,0x936F,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0xEDA0,0xE540,0xD4E0,0xD4E0,0xC460,0xBC00,0xB3C0,0xAB60,0xA320,0x69C0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x39C7,0x2944,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x2944,0x2944,0x2944,0x2944,0x2944,0x2944,0x2944,0x18C2,0x0000,0x0000,0x0000,0x0000,0x18C2,0x4A49,0x4A69,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x4A49,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x9B0D,0xF061,0x83F1,0x7453,0x7453,0x7453,0x7453,0x7453,0xC987,0xD145,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xE540,0xF5E0,0xF5E0,0xFE60,0xFE60,0xFE62,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xF5E0,0xE540,0xE540,0xD4E0,0xC460,0xBC00,0xB3C0,0xAB60,0xA320,0x7A60,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x4A49,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x2944,0x2944,0x2944,0x2944,0x2944,0x2944,0x2944,0x1081,0x0000,0x0000,0x0000,0x18C2,0x39C7,0x4A49,0x39C7,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x94B2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xE8A3,0xD166,0x7453,0x7453,0x7453,0x7453,0x83F1,0xD145,0xD904,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xABC5,0xA320,0xAB60,0xB3C0,0xB3C0,0xBC00,0xC460,0xD4E0,0xD4E0,0xE540,0xE540,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE62,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xEDA0,0xE540,0xD4E0,0xC460,0xC460,0xBC00,0xAB60,0xA320,0x92C0,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0x52AA,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x2944,0x2944,0x2944,0x2944,0x2944,0x2944,0x18C2,0x0840,0x0000,0x0000,0x18C2,0x39C7,0x39C7,0x39C7,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x4A49,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8B90,0xD145,0x7453,0x7453,0x7453,0x7453,0xB24A,0xF800,0xE882,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xB469,0xA320,0xAB60,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xD4E0,0xE540,0xE540,0xF5E0,0xF5E0,0xFE60,0xFE60,0xFE62,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0xEDA0,0xE540,0xD4E0,0xC460,0xBC00,0xB3C0,0xAB60,0xA320,0x4140,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x52AA,0x4A69,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x2944,0x2944,0x2944,0x2944,0x18C2,0x1081,0x0000,0x0000,0x1081,0x2944,0x39C7,0x2944,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x94B2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD5B1,0x92C0,0xAB60,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xE540,0xE540,0xEDA0,0xF5E0,0xFE60,0xFE60,0xFE62,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xF5E0,0xE540,0xD4E0,0xD4E0,0xC460,0xBC00,0xB3C0,0xAB60,0x92C0,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0x630C,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x18C2,0x18C2,0x18C2,0x1081,0x0000,0x0000,0x1081,0x18C2,0x2944,0x2944,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8B90,0xF061,0xBA29,0x8B90,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x92C0,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE62,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xF5E0,0xE540,0xD4E0,0xD4E0,0xC460,0xBC00,0xAB60,0xA320,0x69C0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x630C,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0840,0x0840,0x0000,0x0000,0x0840,0x1081,0x18C2,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x73AE,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xAAAC,0xE882,0xF800,0xD166,0x83F1,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xABA4,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE62,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xF5E0,0xE540,0xD4E0,0xC460,0xC460,0xB3C0,0xAB60,0xA320,0x4140,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x630C,0x39C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x0840,0x0840,0x1081,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x83F1,0xD145,0xF800,0xF061,0xBA29,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD5B1,0x92C0,0xAB60,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xF5E0,0xE540,0xD4E0,0xC460,0xC460,0xB3C0,0xAB60,0x92C0,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x630C,0x39C7,0x2944,0x2944,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x2944,0x18C2,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x528A,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xAAAC,0xF820,0xBA29,0xF061,0xE882,0x936F,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE60,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xF5E0,0xE540,0xD4E0,0xC460,0xC460,0xB3C0,0xAB60,0x92C0,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x528A,0x39C7,0x39C7,0x630C,0x52AA,0x39C7,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x39C7,0x39C7,0x2944,0x2944,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8B90,0xF800,0x83F1,0x9B2E,0xE882,0xF800,0xA2CC,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD5B1,0x92C0,0xAB60,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xD4E0,0xE540,0xEDA0,0xF5E0,0xFE20,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xF5E0,0xE540,0xD4E0,0xC460,0xC460,0xB3C0,0xAB60,0x92C0,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x2944,0x1081,0x0840,0x2944,0x4A49,0x630C,0x630C,0x528A,0x39C7,0x18C2,0x0840,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x2944,0x4A49,0x4A49,0x4A49,0x39C7,0x2944,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8BB0,0xB24A,0xC987,0xF800,0xF800,0xF800,0xE882,0xD145,0x9B0D,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xABC5,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xD4E0,0xE540,0xF5E0,0xFE20,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0xE540,0xD4E0,0xC460,0xC460,0xB3C0,0xAB60,0x92C0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x39C7,0x528A,0x630C,0x630C,0x52AA,0x4A49,0x39C7,0x2944,0x18C2,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0840,0x0840,0x0840,0x0840,0x1081,0x18C2,0x2944,0x39C7,0x4A49,0x4A69,0x4A69,0x4A69,0x4A49,0x2944,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x630C,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8B90,0xF800,0xE882,0xC987,0xB24A,0x9B2E,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xC460,0xD4E0,0xE540,0xEDA0,0xFE20,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0xEDA0,0xD4E0,0xD4E0,0xC460,0xB3C0,0xAB60,0x92C0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x2944,0x39C7,0x4A49,0x4A49,0x4A49,0x39C7,0x2944,0x2944,0x18C2,0x0840,0x0840,0x1081,0x18C2,0x18C2,0x2944,0x2944,0x39C7,0x39C7,0x4A49,0x4A49,0x4A69,0x4A69,0x4A69,0x4A49,0x4A49,0x4A49,0x2944,0x18C2,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8B90,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD5B1,0xA320,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xD4E0,0xEDA0,0xF5E0,0xFE60,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xEDA0,0xE540,0xD4E0,0xC460,0xBC00,0xAB60,0x92C0,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x2944,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x1081,0x18C2,0x18C2,0x18C2,0x18C2,0x0840,0x0840,0x1081,0x18C2,0x18C2,0x2944,0x2944,0x39C7,0x39C7,0x39C7,0x39C7,0x39C7,0x39C7,0x39C7,0x39C7,0x2944,0x18C2,0x1081,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x9B0D,0xBA29,0xB24A,0x8B90,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD5B1,0xA320,0xAB60,0xAB60,0xBC00,0xC460,0xC460,0xD4E0,0xE540,0xF5E0,0xFE20,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xF5E0,0xE540,0xD4E0,0xC460,0xBC00,0xAB60,0xA320,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x4A49,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x0840,0x1081,0x1081,0x18C2,0x18C2,0x18C2,0x18C2,0x18C2,0x18C2,0x1081,0x0840,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD166,0xF800,0xD904,0xE8A3,0xF800,0xE0E4,0x8B90,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xC50D,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xE540,0xEDA0,0xFE20,0xFE60,0xFE62,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0xEDA0,0xD4E0,0xC460,0xBC00,0xB3C0,0xA320,0x4140,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x4A69,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xAAAC,0xF061,0x8B90,0x7453,0x7453,0x8BB0,0xD145,0xF800,0xA2CC,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xC50D,0xA320,0xAB60,0xB3C0,0xBC00,0xC460,0xD4E0,0xE540,0xF5E0,0xFE60,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xEDA0,0xE540,0xD4E0,0xC460,0xB3C0,0xAB60,0x7A60,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0x4A69,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x630C,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBA29,0xD904,0x7453,0x7453,0x7453,0x7453,0x7453,0xA2CC,0xF800,0x936F,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xC484,0xA320,0xAB60,0xBC00,0xC460,0xD4E0,0xE540,0xF5E0,0xFE60,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xEDA0,0xD4E0,0xC460,0xBC00,0xB3C0,0xA320,0x4140,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x39C7,0x4A69,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x9B0D,0xF061,0x83F1,0x7453,0x7453,0x7453,0x7453,0x7453,0xC987,0xD145,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xB469,0xA320,0xB3C0,0xBC00,0xC460,0xD4E0,0xEDA0,0xFE20,0xFE60,0xFE62,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0xE540,0xD4E0,0xC460,0xBC00,0xAB60,0x92C0,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x4A49,0x4A49,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x630C,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xE8A3,0xD166,0x7453,0x7453,0x7453,0x7453,0x83F1,0xD145,0xD904,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xABC5,0xAB60,0xB3C0,0xC460,0xD4E0,0xE540,0xF5E0,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE20,0xF5E0,0xE540,0xD4E0,0xC460,0xBC00,0xAB60,0x69C0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x4A69,0x39C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8B90,0xD145,0x7453,0x7453,0x7453,0x7453,0xB24A,0xF800,0xE882,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xAB60,0xAB60,0xBC00,0xC460,0xD4E0,0xEDA0,0xFE60,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE60,0xFE60,0xFE20,0xF5E0,0xE540,0xD4E0,0xC460,0xBC00,0xA320,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x39C7,0x4A69,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x73AE,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xA320,0xB3C0,0xC460,0xD4E0,0xE540,0xFE20,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE60,0xFE60,0xFE60,0xF5E0,0xE540,0xD4E0,0xC460,0xB3C0,0x92C0,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x4A49,0x4A49,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x4A69,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xB24A,0xF800,0xF800,0xF800,0xF800,0xF800,0xF800,0xF800,0xF800,0xF061,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD5B1,0xAB60,0xB3C0,0xC460,0xD4E0,0xF5E0,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE60,0xFE60,0xFE60,0xFE20,0xEDA0,0xE540,0xC460,0xB3C0,0x7A60,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x52AA,0x39C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x83F1,0x9B2E,0x9B2E,0xF061,0xD166,0x9B2E,0x9B2E,0x9B2E,0x9B2E,0x8B90,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xB469,0xAB60,0xBC00,0xD4E0,0xE540,0xFE20,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0xE540,0xD4E0,0xBC00,0x7A60,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x630C,0x630C,0x2944,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2944,0x94B2,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8BB0,0xE8A3,0xF800,0xA2CC,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xABA4,0xB3C0,0xC460,0xD4E0,0xF5E0,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xF5E0,0xE540,0xC460,0x7A60,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x1081,0x1081,0x1081,0x18C2,0x2944,0x4A49,0x94B2,0x4A49,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x936F,0xF061,0xD145,0x9B2E,0xF061,0xA2CC,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xAB60,0xBC00,0xD4E0,0xEDA0,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE60,0xFE60,0xFE20,0xD4E0,0x92C0,0x1081,0x0000,0x0000,0x0000,0x1081,0x18C2,0x2944,0x39C7,0x4A49,0x52AA,0x8C30,0x73AE,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x73AE,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xAAAC,0xF061,0xB26B,0x7453,0x7453,0x9B0D,0xE8A3,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xCD2D,0xAB60,0xC460,0xD4E0,0xF5E0,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE60,0xFE60,0xFE20,0xD4E0,0x51C0,0x0840,0x0000,0x0840,0x18C2,0x2944,0x39C7,0x4A49,0x73AE,0x73AE,0x39C7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x73AE,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x83F1,0x8BB0,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBC25,0xB3C0,0xD4E0,0xEDA0,0xFE60,0xFE62,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xFE20,0xB3C0,0x18C2,0x0000,0x1081,0x18C2,0x2944,0x39C7,0x39C7,0x2944,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x18C2,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x9B0D,0xD145,0xD904,0xC987,0x9B0D,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xAB60,0xBC00,0xD4E0,0xFE20,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE20,0x92C0,0x0840,0x0840,0x1081,0x18C2,0x1081,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x2944,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBA29,0xF800,0xC987,0xBA29,0xD145,0xF800,0xE8A3,0x8BB0,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD5B1,0xAB60,0xC460,0xEDA0,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE62,0xFE60,0xD4E0,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x4A49,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8BB0,0xF800,0x9B0D,0x7453,0x7453,0x7453,0x8BB0,0xE0E4,0xE882,0x83F1,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xB469,0xBC00,0xD4E0,0xFE20,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0x6260,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x73AE,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xB24A,0xE8A3,0x7453,0x7453,0x7453,0x7453,0x7453,0x83F1,0xE882,0xBA29,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xAB60,0xC460,0xEDA0,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE60,0x9324,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1081,0x528A,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBA29,0xD904,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBA29,0xD904,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xB3C0,0xD4E0,0xFE20,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE60,0xE60B,0x73AE,0x18C2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x4A49,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x9B0D,0xF061,0x83F1,0x7453,0x7453,0x7453,0x7453,0x7453,0xBA29,0xD904,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xB469,0xC460,0xF5E0,0xFE60,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE60,0x7453,0x7453,0x7453,0x9CF3,0x39C7,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x52AA,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xE8A3,0xE8A3,0x8BB0,0x7453,0x7453,0x7453,0x7453,0xE8A3,0xC1E8,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xB3C0,0xD4E0,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE60,0xFEC9,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8C30,0x39C7,0x0840,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0840,0x18C2,0x4A69,0x8C30,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x83F1,0xE0E4,0xF800,0xD145,0xBA29,0xBA29,0xE8A3,0xF061,0x8BB0,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD5B1,0xC460,0xF5E0,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFE60,0xFE60,0xFE62,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE62,0xFE60,0xFE62,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x9CF3,0x630C,0x39C7,0x0840,0x0840,0x0840,0x0840,0x0840,0x0840,0x0840,0x0840,0x0840,0x1081,0x2944,0x4A49,0x73AE,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x936F,0xC1E8,0xD904,0xD904,0xC1E8,0x8BB0,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBC25,0xD4E0,0xFE60,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE60,0xFE60,0xFE60,0xFE62,0xFE62,0xFE62,0xFE60,0xFE60,0xFE60,0xFE60,0xFE60,0xFE62,0xFE20,0xFF10,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x83F1,0x8B90,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBC00,0xFE20,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE60,0xFE60,0xFE88,0xFF10,0x7453,0x7453,0x7453,0xFF10,0xFF10,0xFF10,0xFF10,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBA29,0xF800,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xCCC5,0xE540,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xFEC9,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x83F1,0x8B90,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBC00,0xFE20,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0xF66B,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD5B1,0xE540,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE60,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xB24A,0xF800,0xF800,0xF800,0xF800,0xF061,0xD904,0xD904,0xD904,0xAAAC,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xC460,0xFE60,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE20,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBA29,0xE8A3,0x9B2E,0x9B2E,0xE8A3,0xD904,0xBA29,0xBA29,0xD904,0xD904,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xE540,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE20,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xAAAC,0xE882,0x7453,0x7453,0xD904,0xBA29,0x7453,0x7453,0xBA29,0xD904,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xCCC5,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE20,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8B90,0xF800,0x8BB0,0x83F1,0xF061,0xE882,0x83F1,0x7453,0xE882,0xBA29,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xEDA0,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE20,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xE8A3,0xE8A3,0xC1C8,0xE0E4,0xF061,0xE882,0xE882,0xE882,0x83F1,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD56B,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE60,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8B90,0xE882,0xE882,0x8BB0,0x83F1,0xB24A,0xB24A,0x83F1,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xEDA0,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xE60B,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFF10,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x8BB0,0xD904,0xD904,0xD904,0xD904,0xD904,0xD145,0x7453,0x9B0D,0xBA29,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xEDA0,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFE88,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x83F1,0xBA29,0xBA29,0xBA29,0xBA29,0xBA29,0xB24A,0x7453,0x8B90,0x9B0D,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xFF10,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFEC9,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xFE88,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x9B0D,0xC987,0x83F1,0x7453,0x7453,0x7453,0x7453,0x7453,0x8B90,0x9B0D,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE63,0xFF10,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBA29,0xF800,0xF061,0x9B0D,0x7453,0x7453,0x7453,0x7453,0xBA29,0xD904,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xF66B,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBA29,0xD904,0xC1C8,0xF800,0xD145,0x83F1,0x7453,0x7453,0xBA29,0xD904,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xFEA8,0xFE63,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBA29,0xD904,0x7453,0x9B0D,0xF061,0xF061,0x936F,0x7453,0xBA29,0xD904,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xFEC9,0xFE62,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE86,0xFE62,0xFE88,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBA29,0xD904,0x7453,0x7453,0x8BB0,0xE0E4,0xF800,0xA2CC,0xBA29,0xD904,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xFE88,0xFE62,0xFE62,0xFE63,0xFE86,0xFE86,0xFE63,0xFE62,0xFEA8,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBA29,0xD904,0x7453,0x7453,0x7453,0x7453,0xBA29,0xF800,0xC1C8,0xD904,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xFF10,0xFE20,0xFE60,0xFE60,0xFEA8,0xFF10,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xBA29,0xD904,0x7453,0x7453,0x7453,0x7453,0x7453,0xA2CC,0xF800,0xD904,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xB24A,0xD145,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0xD166,0xC987,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,0x7453,
++
++};
+diff -Nur linux/drivers/video/font_4x6.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/video/font_4x6.c
+--- linux/drivers/video/font_4x6.c 1970-01-01 07:00:00.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/video/font_4x6.c 2003-06-23 01:47:03.000000000 +0700
+@@ -0,0 +1,1059 @@
++/* Font file generated by Jay Carlson from clR4x6.bdf */
++
++/*
++COMMENT Copyright 1989 Dale Schumacher, dal@syntel.mn.org
++COMMENT 399 Beacon Ave.
++COMMENT St. Paul, MN 55104-3527
++COMMENT
++COMMENT Permission to use, copy, modify, and distribute this software and
++COMMENT its documentation for any purpose and without fee is hereby
++COMMENT granted, provided that the above copyright notice appear in all
++COMMENT copies and that both that copyright notice and this permission
++COMMENT notice appear in supporting documentation, and that the name of
++COMMENT Dale Schumacher not be used in advertising or publicity pertaining to
++COMMENT distribution of the software without specific, written prior
++COMMENT permission. Dale Schumacher makes no representations about the
++COMMENT suitability of this software for any purpose. It is provided "as
++COMMENT is" without express or implied warranty.
++*/
++
++#include <video/font.h>
++
++#define FONTDATAMAX (6 * 256)
++
++static unsigned char fontdata_4x6[FONTDATAMAX] = {
++
++ /* 0 0x00 C000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0xf0, /* 11110000 */
++
++ /* 1 0x01 C001 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 2 0x02 C002 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 3 0x03 C003 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 4 0x04 C004 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 5 0x05 C005 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 6 0x06 C006 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 7 0x07 C007 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 8 0x08 C010 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 9 0x09 C011 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 10 0x0a C012 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 11 0x0b C013 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 12 0x0c C014 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 13 0x0d C015 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 14 0x0e C016 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 15 0x0f C017 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 16 0x10 C020 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 17 0x11 C021 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 18 0x12 C022 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 19 0x13 C023 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 20 0x14 C024 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 21 0x15 C025 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 22 0x16 C026 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 23 0x17 C027 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 24 0x18 C030 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 25 0x19 C031 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 26 0x1a C032 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 27 0x1b C033 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 28 0x1c C034 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 29 0x1d C035 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 30 0x1e C036 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 31 0x1f C037 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 32 0x20 C040 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 33 0x21 ! */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 34 0x22 " */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 35 0x23 # */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 36 0x24 $ */
++ 0xe0, /* 11100000 */
++ 0xc0, /* 11000000 */
++ 0xe0, /* 11100000 */
++ 0x60, /* 01100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 37 0x25 % */
++ 0xa0, /* 10100000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x80, /* 10000000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 38 0x26 & */
++ 0xe0, /* 11100000 */
++ 0x40, /* 01000000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 39 0x27 ' */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 40 0x28 ( */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 41 0x29 ) */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 42 0x2a * */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0xe0, /* 11100000 */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 43 0x2b + */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0xe0, /* 11100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 44 0x2c , */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 45 0x2d - */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 46 0x2e . */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 47 0x2f / */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x00, /* 00000000 */
++
++ /* 48 0x30 0 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 49 0x31 1 */
++ 0x40, /* 01000000 */
++ 0xc0, /* 11000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 50 0x32 2 */
++ 0xe0, /* 11100000 */
++ 0x20, /* 00100000 */
++ 0xe0, /* 11100000 */
++ 0x80, /* 10000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 51 0x33 3 */
++ 0xe0, /* 11100000 */
++ 0x20, /* 00100000 */
++ 0xe0, /* 11100000 */
++ 0x20, /* 00100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 52 0x34 4 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 53 0x35 5 */
++ 0xe0, /* 11100000 */
++ 0x80, /* 10000000 */
++ 0xe0, /* 11100000 */
++ 0x20, /* 00100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 54 0x36 6 */
++ 0xe0, /* 11100000 */
++ 0x80, /* 10000000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 55 0x37 7 */
++ 0xe0, /* 11100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 56 0x38 8 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 57 0x39 9 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x20, /* 00100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 58 0x3a : */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 59 0x3b ; */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 60 0x3c < */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x80, /* 10000000 */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 61 0x3d = */
++ 0x00, /* 00000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 62 0x3e > */
++ 0x80, /* 10000000 */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x80, /* 10000000 */
++ 0x00, /* 00000000 */
++
++ /* 63 0x3f ? */
++ 0xc0, /* 11000000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 64 0x40 @ */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x80, /* 10000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 65 0x41 A */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 66 0x42 B */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0x00, /* 00000000 */
++
++ /* 67 0x43 C */
++ 0x60, /* 01100000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 68 0x44 D */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0x00, /* 00000000 */
++
++ /* 69 0x45 E */
++ 0xe0, /* 11100000 */
++ 0x80, /* 10000000 */
++ 0xc0, /* 11000000 */
++ 0x80, /* 10000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 70 0x46 F */
++ 0xe0, /* 11100000 */
++ 0x80, /* 10000000 */
++ 0xc0, /* 11000000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x00, /* 00000000 */
++
++ /* 71 0x47 G */
++ 0x60, /* 01100000 */
++ 0x80, /* 10000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 72 0x48 H */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 73 0x49 I */
++ 0xe0, /* 11100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 74 0x4a J */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0xa0, /* 10100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 75 0x4b K */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 76 0x4c L */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 77 0x4d M */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 78 0x4e N */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0xe0, /* 11100000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 79 0x4f O */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 80 0x50 P */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x00, /* 00000000 */
++
++ /* 81 0x51 Q */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 82 0x52 R */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 83 0x53 S */
++ 0x60, /* 01100000 */
++ 0x80, /* 10000000 */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0xc0, /* 11000000 */
++ 0x00, /* 00000000 */
++
++ /* 84 0x54 T */
++ 0xe0, /* 11100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 85 0x55 U */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 86 0x56 V */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 87 0x57 W */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 88 0x58 X */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 89 0x59 Y */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 90 0x5a Z */
++ 0xe0, /* 11100000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x80, /* 10000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 91 0x5b [ */
++ 0x60, /* 01100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 92 0x5c \ */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 93 0x5d ] */
++ 0x60, /* 01100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 94 0x5e ^ */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 95 0x5f _ */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 96 0x60 ` */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 97 0x61 a */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 98 0x62 b */
++ 0x80, /* 10000000 */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0x00, /* 00000000 */
++
++ /* 99 0x63 c */
++ 0x00, /* 00000000 */
++ 0x60, /* 01100000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 100 0x64 d */
++ 0x20, /* 00100000 */
++ 0x60, /* 01100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 101 0x65 e */
++ 0x00, /* 00000000 */
++ 0x60, /* 01100000 */
++ 0xe0, /* 11100000 */
++ 0x80, /* 10000000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 102 0x66 f */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0xe0, /* 11100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 103 0x67 g */
++ 0x00, /* 00000000 */
++ 0x60, /* 01100000 */
++ 0xa0, /* 10100000 */
++ 0x60, /* 01100000 */
++ 0x20, /* 00100000 */
++ 0xc0, /* 11000000 */
++
++ /* 104 0x68 h */
++ 0x80, /* 10000000 */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 105 0x69 i */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 106 0x6a j */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0xa0, /* 10100000 */
++ 0x40, /* 01000000 */
++
++ /* 107 0x6b k */
++ 0x80, /* 10000000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 108 0x6c l */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 109 0x6d m */
++ 0x00, /* 00000000 */
++ 0xe0, /* 11100000 */
++ 0xe0, /* 11100000 */
++ 0xe0, /* 11100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 110 0x6e n */
++ 0x00, /* 00000000 */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 111 0x6f o */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 112 0x70 p */
++ 0x00, /* 00000000 */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0xc0, /* 11000000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++
++ /* 113 0x71 q */
++ 0x00, /* 00000000 */
++ 0x60, /* 01100000 */
++ 0xa0, /* 10100000 */
++ 0x60, /* 01100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++
++ /* 114 0x72 r */
++ 0x00, /* 00000000 */
++ 0xc0, /* 11000000 */
++ 0xa0, /* 10100000 */
++ 0x80, /* 10000000 */
++ 0x80, /* 10000000 */
++ 0x00, /* 00000000 */
++
++ /* 115 0x73 s */
++ 0x00, /* 00000000 */
++ 0x60, /* 01100000 */
++ 0xc0, /* 11000000 */
++ 0x60, /* 01100000 */
++ 0xc0, /* 11000000 */
++ 0x00, /* 00000000 */
++
++ /* 116 0x74 t */
++ 0x40, /* 01000000 */
++ 0xe0, /* 11100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 117 0x75 u */
++ 0x00, /* 00000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 118 0x76 v */
++ 0x00, /* 00000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 119 0x77 w */
++ 0x00, /* 00000000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0xe0, /* 11100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 120 0x78 x */
++ 0x00, /* 00000000 */
++ 0xa0, /* 10100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0x00, /* 00000000 */
++
++ /* 121 0x79 y */
++ 0x00, /* 00000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0x60, /* 01100000 */
++ 0x20, /* 00100000 */
++ 0xc0, /* 11000000 */
++
++ /* 122 0x7a z */
++ 0x00, /* 00000000 */
++ 0xe0, /* 11100000 */
++ 0x60, /* 01100000 */
++ 0xc0, /* 11000000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++ /* 123 0x7b { */
++ 0x60, /* 01100000 */
++ 0x40, /* 01000000 */
++ 0xc0, /* 11000000 */
++ 0x40, /* 01000000 */
++ 0x60, /* 01100000 */
++ 0x00, /* 00000000 */
++
++ /* 124 0x7c | */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 125 0x7d } */
++ 0xc0, /* 11000000 */
++ 0x40, /* 01000000 */
++ 0x60, /* 01100000 */
++ 0x40, /* 01000000 */
++ 0xc0, /* 11000000 */
++ 0x00, /* 00000000 */
++
++ /* 126 0x7e ~ */
++ 0x20, /* 00100000 */
++ 0xe0, /* 11100000 */
++ 0x80, /* 10000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 127 0x7f C177 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0xa0, /* 10100000 */
++ 0xa0, /* 10100000 */
++ 0xe0, /* 11100000 */
++ 0x00, /* 00000000 */
++
++};
++
++struct fbcon_font_desc font_clean_4x6 = {
++ CLEAN4x6_IDX,
++ "Clean4x6",
++ 4,
++ 6,
++ fontdata_4x6,
++ -1000 /* Try avoiding this font if possible unless screen really small */
++};
+diff -Nur linux/drivers/video/font_5x8.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/video/font_5x8.c
+--- linux/drivers/video/font_5x8.c 1970-01-01 07:00:00.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/video/font_5x8.c 2003-06-23 01:47:03.000000000 +0700
+@@ -0,0 +1,1314 @@
++/* Font file generated by Jay Carlson from clR5x8.bdf */
++
++/*
++COMMENT Copyright 1989 Dale Schumacher, dal@syntel.mn.org
++COMMENT 399 Beacon Ave.
++COMMENT St. Paul, MN 55104-3527
++COMMENT
++COMMENT Permission to use, copy, modify, and distribute this software and
++COMMENT its documentation for any purpose and without fee is hereby
++COMMENT granted, provided that the above copyright notice appear in all
++COMMENT copies and that both that copyright notice and this permission
++COMMENT notice appear in supporting documentation, and that the name of
++COMMENT Dale Schumacher not be used in advertising or publicity pertaining to
++COMMENT distribution of the software without specific, written prior
++COMMENT permission. Dale Schumacher makes no representations about the
++COMMENT suitability of this software for any purpose. It is provided "as
++COMMENT is" without express or implied warranty.
++*/
++
++#include <video/font.h>
++
++#define FONTDATAMAX (8 * 256)
++
++static unsigned char fontdata_5x8[FONTDATAMAX] = {
++
++ /* 0 0x00 C000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 1 0x01 C001 */
++ 0x00, /* 00000000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x78, /* 01111000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 2 0x02 C002 */
++ 0x00, /* 00000000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 3 0x03 C003 */
++ 0x00, /* 00000000 */
++ 0x38, /* 00111000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x38, /* 00111000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 4 0x04 C004 */
++ 0x00, /* 00000000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 5 0x05 C005 */
++ 0x00, /* 00000000 */
++ 0x78, /* 01111000 */
++ 0x40, /* 01000000 */
++ 0x70, /* 01110000 */
++ 0x40, /* 01000000 */
++ 0x78, /* 01111000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 6 0x06 C006 */
++ 0x00, /* 00000000 */
++ 0x78, /* 01111000 */
++ 0x40, /* 01000000 */
++ 0x70, /* 01110000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 7 0x07 C007 */
++ 0x00, /* 00000000 */
++ 0x38, /* 00111000 */
++ 0x40, /* 01000000 */
++ 0x58, /* 01011000 */
++ 0x48, /* 01001000 */
++ 0x38, /* 00111000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 8 0x08 C010 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x78, /* 01111000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 9 0x09 C011 */
++ 0x00, /* 00000000 */
++ 0x70, /* 01110000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 10 0x0a C012 */
++ 0x00, /* 00000000 */
++ 0x18, /* 00011000 */
++ 0x08, /* 00001000 */
++ 0x08, /* 00001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 11 0x0b C013 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x50, /* 01010000 */
++ 0x60, /* 01100000 */
++ 0x50, /* 01010000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 12 0x0c C014 */
++ 0x00, /* 00000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x78, /* 01111000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 13 0x0d C015 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x78, /* 01111000 */
++ 0x78, /* 01111000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 14 0x0e C016 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x68, /* 01101000 */
++ 0x58, /* 01011000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 15 0x0f C017 */
++ 0x00, /* 00000000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 16 0x10 C020 */
++ 0x00, /* 00000000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 17 0x11 C021 */
++ 0x00, /* 00000000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x18, /* 00011000 */
++ 0x00, /* 00000000 */
++
++ /* 18 0x12 C022 */
++ 0x00, /* 00000000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x50, /* 01010000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 19 0x13 C023 */
++ 0x00, /* 00000000 */
++ 0x38, /* 00111000 */
++ 0x40, /* 01000000 */
++ 0x30, /* 00110000 */
++ 0x08, /* 00001000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 20 0x14 C024 */
++ 0x00, /* 00000000 */
++ 0xf8, /* 11111000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 21 0x15 C025 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 22 0x16 C026 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 23 0x17 C027 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x78, /* 01111000 */
++ 0x78, /* 01111000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 24 0x18 C030 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 25 0x19 C031 */
++ 0x00, /* 00000000 */
++ 0x88, /* 10001000 */
++ 0x50, /* 01010000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 26 0x1a C032 */
++ 0x00, /* 00000000 */
++ 0x78, /* 01111000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x78, /* 01111000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 27 0x1b C033 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 28 0x1c C034 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 29 0x1d C035 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 30 0x1e C036 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 31 0x1f C037 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 32 0x20 C040 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 33 0x21 ! */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 34 0x22 " */
++ 0x28, /* 00101000 */
++ 0x28, /* 00101000 */
++ 0x28, /* 00101000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 35 0x23 # */
++ 0x50, /* 01010000 */
++ 0x50, /* 01010000 */
++ 0xf8, /* 11111000 */
++ 0x50, /* 01010000 */
++ 0xf8, /* 11111000 */
++ 0x50, /* 01010000 */
++ 0x50, /* 01010000 */
++ 0x00, /* 00000000 */
++
++ /* 36 0x24 $ */
++ 0x20, /* 00100000 */
++ 0x78, /* 01111000 */
++ 0xa0, /* 10100000 */
++ 0x70, /* 01110000 */
++ 0x28, /* 00101000 */
++ 0xf0, /* 11110000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 37 0x25 % */
++ 0x60, /* 01100000 */
++ 0x68, /* 01101000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x58, /* 01011000 */
++ 0x18, /* 00011000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 38 0x26 & */
++ 0x30, /* 00110000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x28, /* 00101000 */
++ 0x50, /* 01010000 */
++ 0x50, /* 01010000 */
++ 0x28, /* 00101000 */
++ 0x00, /* 00000000 */
++
++ /* 39 0x27 ' */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 40 0x28 ( */
++ 0x08, /* 00001000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x10, /* 00010000 */
++ 0x08, /* 00001000 */
++ 0x00, /* 00000000 */
++
++ /* 41 0x29 ) */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 42 0x2a * */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x78, /* 01111000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 43 0x2b + */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0xf8, /* 11111000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 44 0x2c , */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++
++ /* 45 0x2d - */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0xf8, /* 11111000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 46 0x2e . */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 47 0x2f / */
++ 0x08, /* 00001000 */
++ 0x08, /* 00001000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++
++ /* 48 0x30 0 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x58, /* 01011000 */
++ 0x68, /* 01101000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 49 0x31 1 */
++ 0x20, /* 00100000 */
++ 0x60, /* 01100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 50 0x32 2 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x08, /* 00001000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x78, /* 01111000 */
++ 0x00, /* 00000000 */
++
++ /* 51 0x33 3 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x08, /* 00001000 */
++ 0x30, /* 00110000 */
++ 0x08, /* 00001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 52 0x34 4 */
++ 0x08, /* 00001000 */
++ 0x18, /* 00011000 */
++ 0x18, /* 00011000 */
++ 0x28, /* 00101000 */
++ 0x28, /* 00101000 */
++ 0x78, /* 01111000 */
++ 0x08, /* 00001000 */
++ 0x00, /* 00000000 */
++
++ /* 53 0x35 5 */
++ 0x78, /* 01111000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x70, /* 01110000 */
++ 0x08, /* 00001000 */
++ 0x08, /* 00001000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++
++ /* 54 0x36 6 */
++ 0x30, /* 00110000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 55 0x37 7 */
++ 0x78, /* 01111000 */
++ 0x08, /* 00001000 */
++ 0x08, /* 00001000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 56 0x38 8 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 57 0x39 9 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x38, /* 00111000 */
++ 0x08, /* 00001000 */
++ 0x08, /* 00001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 58 0x3a : */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 59 0x3b ; */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++
++ /* 60 0x3c < */
++ 0x08, /* 00001000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x10, /* 00010000 */
++ 0x08, /* 00001000 */
++ 0x00, /* 00000000 */
++
++ /* 61 0x3d = */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0xf8, /* 11111000 */
++ 0x00, /* 00000000 */
++ 0xf8, /* 11111000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 62 0x3e > */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x10, /* 00010000 */
++ 0x08, /* 00001000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 63 0x3f ? */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x08, /* 00001000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 64 0x40 @ */
++ 0x00, /* 00000000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x58, /* 01011000 */
++ 0x58, /* 01011000 */
++ 0x40, /* 01000000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 65 0x41 A */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x78, /* 01111000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 66 0x42 B */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++
++ /* 67 0x43 C */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 68 0x44 D */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++
++ /* 69 0x45 E */
++ 0x78, /* 01111000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x70, /* 01110000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x78, /* 01111000 */
++ 0x00, /* 00000000 */
++
++ /* 70 0x46 F */
++ 0x78, /* 01111000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x70, /* 01110000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 71 0x47 G */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x40, /* 01000000 */
++ 0x58, /* 01011000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x38, /* 00111000 */
++ 0x00, /* 00000000 */
++
++ /* 72 0x48 H */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x78, /* 01111000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 73 0x49 I */
++ 0x70, /* 01110000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++
++ /* 74 0x4a J */
++ 0x18, /* 00011000 */
++ 0x08, /* 00001000 */
++ 0x08, /* 00001000 */
++ 0x08, /* 00001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 75 0x4b K */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x50, /* 01010000 */
++ 0x60, /* 01100000 */
++ 0x50, /* 01010000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 76 0x4c L */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x78, /* 01111000 */
++ 0x00, /* 00000000 */
++
++ /* 77 0x4d M */
++ 0x48, /* 01001000 */
++ 0x78, /* 01111000 */
++ 0x78, /* 01111000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 78 0x4e N */
++ 0x48, /* 01001000 */
++ 0x68, /* 01101000 */
++ 0x68, /* 01101000 */
++ 0x58, /* 01011000 */
++ 0x58, /* 01011000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 79 0x4f O */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 80 0x50 P */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 81 0x51 Q */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x18, /* 00011000 */
++
++ /* 82 0x52 R */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x50, /* 01010000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 83 0x53 S */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x40, /* 01000000 */
++ 0x30, /* 00110000 */
++ 0x08, /* 00001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 84 0x54 T */
++ 0xf8, /* 11111000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 85 0x55 U */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 86 0x56 V */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x30, /* 00110000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 87 0x57 W */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x78, /* 01111000 */
++ 0x78, /* 01111000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 88 0x58 X */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 89 0x59 Y */
++ 0x88, /* 10001000 */
++ 0x88, /* 10001000 */
++ 0x50, /* 01010000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 90 0x5a Z */
++ 0x78, /* 01111000 */
++ 0x08, /* 00001000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x78, /* 01111000 */
++ 0x00, /* 00000000 */
++
++ /* 91 0x5b [ */
++ 0x38, /* 00111000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x38, /* 00111000 */
++ 0x00, /* 00000000 */
++
++ /* 92 0x5c \ */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x08, /* 00001000 */
++ 0x08, /* 00001000 */
++
++ /* 93 0x5d ] */
++ 0x70, /* 01110000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++
++ /* 94 0x5e ^ */
++ 0x20, /* 00100000 */
++ 0x50, /* 01010000 */
++ 0x88, /* 10001000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 95 0x5f _ */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0xf8, /* 11111000 */
++
++ /* 96 0x60 ` */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x10, /* 00010000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 97 0x61 a */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x38, /* 00111000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x58, /* 01011000 */
++ 0x28, /* 00101000 */
++ 0x00, /* 00000000 */
++
++ /* 98 0x62 b */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++
++ /* 99 0x63 c */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x38, /* 00111000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x38, /* 00111000 */
++ 0x00, /* 00000000 */
++
++ /* 100 0x64 d */
++ 0x08, /* 00001000 */
++ 0x08, /* 00001000 */
++ 0x38, /* 00111000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x38, /* 00111000 */
++ 0x00, /* 00000000 */
++
++ /* 101 0x65 e */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x78, /* 01111000 */
++ 0x40, /* 01000000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 102 0x66 f */
++ 0x18, /* 00011000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x70, /* 01110000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 103 0x67 g */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x38, /* 00111000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x38, /* 00111000 */
++ 0x08, /* 00001000 */
++ 0x30, /* 00110000 */
++
++ /* 104 0x68 h */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 105 0x69 i */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++ 0x60, /* 01100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++
++ /* 106 0x6a j */
++ 0x10, /* 00010000 */
++ 0x00, /* 00000000 */
++ 0x30, /* 00110000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x60, /* 01100000 */
++
++ /* 107 0x6b k */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x48, /* 01001000 */
++ 0x50, /* 01010000 */
++ 0x60, /* 01100000 */
++ 0x50, /* 01010000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 108 0x6c l */
++ 0x60, /* 01100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++
++ /* 109 0x6d m */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0xd0, /* 11010000 */
++ 0xa8, /* 10101000 */
++ 0xa8, /* 10101000 */
++ 0xa8, /* 10101000 */
++ 0x88, /* 10001000 */
++ 0x00, /* 00000000 */
++
++ /* 110 0x6e n */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 111 0x6f o */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 112 0x70 p */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x70, /* 01110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x70, /* 01110000 */
++ 0x40, /* 01000000 */
++
++ /* 113 0x71 q */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x38, /* 00111000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x38, /* 00111000 */
++ 0x08, /* 00001000 */
++
++ /* 114 0x72 r */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x58, /* 01011000 */
++ 0x60, /* 01100000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 115 0x73 s */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x38, /* 00111000 */
++ 0x40, /* 01000000 */
++ 0x30, /* 00110000 */
++ 0x08, /* 00001000 */
++ 0x70, /* 01110000 */
++ 0x00, /* 00000000 */
++
++ /* 116 0x74 t */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x78, /* 01111000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x18, /* 00011000 */
++ 0x00, /* 00000000 */
++
++ /* 117 0x75 u */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x38, /* 00111000 */
++ 0x00, /* 00000000 */
++
++ /* 118 0x76 v */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x30, /* 00110000 */
++ 0x00, /* 00000000 */
++
++ /* 119 0x77 w */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x88, /* 10001000 */
++ 0xa8, /* 10101000 */
++ 0xa8, /* 10101000 */
++ 0xa8, /* 10101000 */
++ 0x50, /* 01010000 */
++ 0x00, /* 00000000 */
++
++ /* 120 0x78 x */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x30, /* 00110000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x00, /* 00000000 */
++
++ /* 121 0x79 y */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x48, /* 01001000 */
++ 0x38, /* 00111000 */
++ 0x08, /* 00001000 */
++ 0x30, /* 00110000 */
++
++ /* 122 0x7a z */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x78, /* 01111000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x78, /* 01111000 */
++ 0x00, /* 00000000 */
++
++ /* 123 0x7b { */
++ 0x08, /* 00001000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x10, /* 00010000 */
++ 0x10, /* 00010000 */
++ 0x08, /* 00001000 */
++ 0x00, /* 00000000 */
++
++ /* 124 0x7c | */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x00, /* 00000000 */
++
++ /* 125 0x7d } */
++ 0x40, /* 01000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x10, /* 00010000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x40, /* 01000000 */
++ 0x00, /* 00000000 */
++
++ /* 126 0x7e ~ */
++ 0x28, /* 00101000 */
++ 0x50, /* 01010000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++ 0x00, /* 00000000 */
++
++ /* 127 0x7f C177 */
++ 0x00, /* 00000000 */
++ 0x20, /* 00100000 */
++ 0x20, /* 00100000 */
++ 0x50, /* 01010000 */
++ 0x50, /* 01010000 */
++ 0x88, /* 10001000 */
++ 0xf8, /* 11111000 */
++ 0x00, /* 00000000 */
++};
++
++struct fbcon_font_desc font_clean_5x8 = {
++ CLEAN5x8_IDX,
++ "Clean5x8",
++ 5,
++ 8,
++ fontdata_5x8,
++ -1000 /* Try avoiding this font if possible unless screen really small */
++};
+diff -Nur linux/drivers/video/fonts.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/video/fonts.c
+--- linux/drivers/video/fonts.c 2003-05-13 16:19:00.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/video/fonts.c 2003-06-23 01:47:03.000000000 +0700
+@@ -56,6 +56,16 @@
+ #undef NO_FONTS
+ &font_pearl_8x8,
+ #endif
++#ifdef CONFIG_FONT_5x8
++#if defined(CONFIG_FBCON_MAC) /* XXX fixme, need better test */
++#undef NO_FONTS
++#endif
++ &font_clean_5x8,
++#endif
++#ifdef CONFIG_FONT_4x6
++#undef NO_FONTS
++ &font_clean_4x6,
++#endif
+ };
+
+ #define num_fonts (sizeof(fbcon_fonts)/sizeof(*fbcon_fonts))
+diff -Nur linux/drivers/video/fonts.c~ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/video/fonts.c~
+--- linux/drivers/video/fonts.c~ 1970-01-01 07:00:00.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/drivers/video/fonts.c~ 2003-06-23 01:47:03.000000000 +0700
+@@ -0,0 +1,131 @@
++/*
++ * linux/drivers/video/fonts.c -- `Soft' font definitions
++ *
++ * Created 1995 by Geert Uytterhoeven
++ * Rewritten 1998 by Martin Mares <mj@ucw.cz>
++ *
++ * 2001 - Documented with DocBook
++ * - Brad Douglas <brad@neruo.com>
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive
++ * for more details.
++ */
++
++
++#include <linux/config.h>
++#include <linux/types.h>
++#include <linux/string.h>
++#if defined(__mc68000__) || defined(CONFIG_APUS)
++#include <asm/setup.h>
++#endif
++#include <video/font.h>
++
++#define NO_FONTS
++
++static struct fbcon_font_desc *fbcon_fonts[] = {
++#ifdef CONFIG_FONT_8x8
++#undef NO_FONTS
++ &font_vga_8x8,
++#endif
++#ifdef CONFIG_FONT_8x16
++#undef NO_FONTS
++ &font_vga_8x16,
++#endif
++#ifdef CONFIG_FONT_6x11
++#if defined(CONFIG_FBCON_MAC) || defined(CONFIG_FB_SBUS)
++#undef NO_FONTS
++#endif
++ &font_vga_6x11,
++#endif
++#ifdef CONFIG_FONT_SUN8x16
++#undef NO_FONTS
++ &font_sun_8x16,
++#endif
++#ifdef CONFIG_FONT_SUN12x22
++#if defined(CONFIG_FB_SBUS) || defined(CONFIG_FBCON_CFB8) || defined(CONFIG_FBCON_CFB16) || defined(CONFIG_FBCON_CFB24) || defined(CONFIG_FBCON_CFB32)
++#undef NO_FONTS
++#endif
++ &font_sun_12x22,
++#endif
++#ifdef CONFIG_FONT_ACORN_8x8
++#undef NO_FONTS
++ &font_acorn_8x8,
++#endif
++#ifdef CONFIG_FONT_PEARL_8x8
++#undef NO_FONTS
++ &font_pearl_8x8,
++#endif
++};
++
++#define num_fonts (sizeof(fbcon_fonts)/sizeof(*fbcon_fonts))
++
++#ifdef NO_FONTS
++#error No fonts configured.
++#endif
++
++
++/**
++ * fbcon_find_font - find a font
++ * @name: string name of a font
++ *
++ * Find a specified font with string name @name.
++ *
++ * Returns %NULL if no font found, or a pointer to the
++ * specified font.
++ *
++ */
++
++struct fbcon_font_desc *fbcon_find_font(char *name)
++{
++ unsigned int i;
++
++ for (i = 0; i < num_fonts; i++)
++ if (!strcmp(fbcon_fonts[i]->name, name))
++ return fbcon_fonts[i];
++ return NULL;
++}
++
++
++/**
++ * fbcon_get_default_font - get default font
++ * @xres: screen size of X
++ * @yres: screen size of Y
++ *
++ * Get the default font for a specified screen size.
++ * Dimensions are in pixels.
++ *
++ * Returns %NULL if no font is found, or a pointer to the
++ * chosen font.
++ *
++ */
++
++struct fbcon_font_desc *fbcon_get_default_font(int xres, int yres)
++{
++ int i, c, cc;
++ struct fbcon_font_desc *f, *g;
++
++ g = NULL;
++ cc = -10000;
++ for(i=0; i<num_fonts; i++) {
++ f = fbcon_fonts[i];
++ c = f->pref;
++#if defined(__mc68000__) || defined(CONFIG_APUS)
++#ifdef CONFIG_FONT_PEARL_8x8
++ if (MACH_IS_AMIGA && f->idx == PEARL8x8_IDX)
++ c = 100;
++#endif
++#ifdef CONFIG_FONT_6x11
++ if (MACH_IS_MAC && xres < 640 && f->idx == VGA6x11_IDX)
++ c = 100;
++#endif
++#endif
++ if ((yres < 400) == (f->height <= 8))
++ c += 1000;
++ if (c > cc) {
++ cc = c;
++ g = f;
++ }
++ }
++ return g;
++}
+diff -Nur linux/fs/jffs2/GNUmakefile /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/GNUmakefile
+--- linux/fs/jffs2/GNUmakefile 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/GNUmakefile 1970-01-01 07:00:00.000000000 +0700
+@@ -1,49 +0,0 @@
+-# GNUmakefile for JFFS2 build outside kernel tree
+-# $Id: GNUmakefile,v 1.6 2002/09/03 16:38:24 dwmw2 Exp $
+-
+-LINUXDIR=/lib/modules/$(shell uname -r)/build
+-
+-ifndef VERSION
+-# Someone just typed 'make' in this directory.
+-# Invoke a kernel build process, with only this dir in SUBDIRS.
+-
+-modules:
+- $(MAKE) -C $(LINUXDIR) CONFIG_JFFS2_FS_NAND=y SUBDIRS=`pwd` modules
+-
+-nonand:
+- make -C $(LINUXDIR) SUBDIRS=`pwd` modules
+-
+-dep:
+- make -C $(LINUXDIR) SUBDIRS=`pwd` dep
+-
+-clean:
+- rm -f *.o
+-
+-else
+-
+-ifndef CONFIG_JFFS2_FS
+-# Invoked from a kernel build tree, but CONFIG_JFFS2_FS isn't set.
+-# That means we must have got here from the hack above - pretend
+-# CONFIG_JFFS2_FS _was_ set so that we actually build it, and also
+-# pull in the local MTD include files in case they're also newer than
+-# the ones in the kernel tree. And turn on debugging.
+-
+-CC += -I$(shell pwd)/../../include
+-
+-CONFIG_JFFS2_FS := m
+-EXTRA_CFLAGS += -DCONFIG_JFFS2_FS_DEBUG=1 -g -Werror
+-
+-ifeq ($(CONFIG_JFFS2_FS_NAND),y)
+-EXTRA_CFLAGS += -DCONFIG_JFFS2_FS_NAND=1
+-endif
+-endif
+-
+-# Check whether we've put the JFFS2 stuff in the superblock and inode unions
+-OUT_OF_KERNEL_CFLAGS := $(shell grep -q jffs2 $(TOPDIR)/include/linux/fs.h || echo "-DJFFS2_OUT_OF_KERNEL")
+-EXTRA_CFLAGS += $(OUT_OF_KERNEL_CFLAGS)
+-
+-
+-include Makefile
+-
+-
+-endif
+diff -Nur linux/fs/jffs2/LICENCE /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/LICENCE
+--- linux/fs/jffs2/LICENCE 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/LICENCE 1970-01-01 07:00:00.000000000 +0700
+@@ -1,35 +0,0 @@
+-The files in this directory and elsewhere which refer to this LICENCE
+-file are part of JFFS2, the Journalling Flash File System v2.
+-
+- Copyright (C) 2001, 2002 Red Hat, Inc.
+-
+-JFFS2 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 or (at your option) any later
+-version.
+-
+-JFFS2 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 JFFS2; if not, write to the Free Software Foundation, Inc.,
+-59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+-
+-As a special exception, if other files instantiate templates or use
+-macros or inline functions from these files, or you compile these
+-files and link them with other works to produce a work based on these
+-files, these files do not by themselves cause the resulting work to be
+-covered by the GNU General Public License. However the source code for
+-these files must still be made available in accordance with section (3)
+-of the GNU General Public License.
+-
+-This exception does not invalidate any other reasons why a work based on
+-this file might be covered by the GNU General Public License.
+-
+-For information on obtaining alternative licences for JFFS2, see
+-http://sources.redhat.com/jffs2/jffs2-licence.html
+-
+-
+- $Id: LICENCE,v 1.1 2002/05/20 14:56:37 dwmw2 Exp $
+diff -Nur linux/fs/jffs2/Makefile /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/Makefile
+--- linux/fs/jffs2/Makefile 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/Makefile 2003-06-23 01:47:03.000000000 +0700
+@@ -1,7 +1,7 @@
+ #
+ # Makefile for the linux Journalling Flash FileSystem (JFFS) routines.
+ #
+-# $Id: Makefile,v 1.34 2002/03/08 11:27:59 dwmw2 Exp $
++# $Id: Makefile,v 1.25 2001/09/25 20:59:41 dwmw2 Exp $
+ #
+ # Note! Dependencies are done automagically by 'make dep', which also
+ # removes any old dependencies. DON'T put your own dependencies here
+@@ -10,27 +10,17 @@
+ # Note 2! The CFLAGS definitions are now in the main makefile...
+
+
+-COMPR_OBJS := compr.o compr_rubin.o compr_rtime.o compr_zlib.o
+-JFFS2_OBJS := dir.o file.o ioctl.o nodelist.o malloc.o \
+- read.o nodemgmt.o readinode.o write.o scan.o gc.o \
+- symlink.o build.o erase.o background.o fs.o writev.o
+-
+-LINUX_OBJS-24 := super-v24.o crc32.o
+-LINUX_OBJS-25 := super.o
+-
+-NAND_OBJS-$(CONFIG_JFFS2_FS_NAND) := wbuf.o
+-PROC_FS_OBJS-$(CONFIG_JFFS2_PROC_FS) := jffs2_proc.o
+-NODEMERGE_OBJS-$(CONFIG_JFFS2_NODEMERGE) := nodemerge.o
++COMPR_OBJS := compr.o compr_rubin.o compr_rtime.o pushpull.o \
++ compr_zlib.o zlib.o
+
+-subdir-y := compressors
++JFFS2_OBJS := crc32.o dir.o file.o ioctl.o nodelist.o malloc.o \
++ read.o nodemgmt.o readinode.o super.o write.o scan.o gc.o \
++ symlink.o build.o erase.o background.o
+
+ O_TARGET := jffs2.o
+
+-obj-y := $(COMPR_OBJS) $(JFFS2_OBJS) $(VERS_OBJS) $(NAND_OBJS-y) $(PROC_FS_OBJS-y) \
+- $(NODEMERGE_OBJS-y) $(LINUX_OBJS-$(VERSION)$(PATCHLEVEL))
++obj-y := $(COMPR_OBJS) $(JFFS2_OBJS)
+ obj-m := $(O_TARGET)
+
+-obj-y += $(join $(subdir-y),$(subdir-y:%=/%.o))
+-
+ include $(TOPDIR)/Rules.make
+
+diff -Nur linux/fs/jffs2/README.Locking /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/README.Locking
+--- linux/fs/jffs2/README.Locking 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/README.Locking 1970-01-01 07:00:00.000000000 +0700
+@@ -1,116 +0,0 @@
+- $Id: README.Locking,v 1.4 2002/03/08 16:20:06 dwmw2 Exp $
+-
+- JFFS2 LOCKING DOCUMENTATION
+- ---------------------------
+-
+-At least theoretically, JFFS2 does not require the Big Kernel Lock
+-(BKL), which was always helpfully obtained for it by Linux 2.4 VFS
+-code. It has its own locking, as described below.
+-
+-This document attempts to describe the existing locking rules for
+-JFFS2. It is not expected to remain perfectly up to date, but ought to
+-be fairly close.
+-
+-
+- alloc_sem
+- ---------
+-
+-The alloc_sem is a per-filesystem semaphore, used primarily to ensure
+-contiguous allocation of space on the medium. It is automatically
+-obtained during space allocations (jffs2_reserve_space()) and freed
+-upon write completion (jffs2_complete_reservation()). Note that
+-the garbage collector will obtain this right at the beginning of
+-jffs2_garbage_collect_pass() and release it at the end, thereby
+-preventing any other write activity on the file system during a
+-garbage collect pass.
+-
+-When writing new nodes, the alloc_sem must be held until the new nodes
+-have been properly linked into the data structures for the inode to
+-which they belong. This is for the benefit of NAND flash - adding new
+-nodes to an inode may obsolete old ones, and by holding the alloc_sem
+-until this happens we ensure that any data in the write-buffer at the
+-time this happens are part of the new node, not just something that
+-was written afterwards. Hence, we can ensure the newly-obsoleted nodes
+-don't actually get erased until the write-buffer has been flushed to
+-the medium.
+-
+-With the introduction of NAND flash support and the write-buffer,
+-the alloc_sem is also used to protect the wbuf-related members of the
+-jffs2_sb_info structure. Atomically reading the wbuf_len member to see
+-if the wbuf is currently holding any data is permitted, though.
+-
+-Ordering constraints: See f->sem.
+-
+-
+- File Semaphore f->sem
+- ---------------------
+-
+-This is the JFFS2-internal equivalent of the inode semaphore i->i_sem.
+-It protects the contents of the jffs2_inode_info private inode data,
+-including the linked list of node fragments (but see the notes below on
+-erase_completion_lock), etc.
+-
+-The reason that the i_sem itself isn't used for this purpose is to
+-avoid deadlocks with garbage collection -- the VFS will lock the i_sem
+-before calling a function which may need to allocate space. The
+-allocation may trigger garbage-collection, which may need to move a
+-node belonging to the inode which was locked in the first place by the
+-VFS. If the garbage collection code were to attempt to lock the i_sem
+-of the inode from which it's garbage-collecting a physical node, this
+-lead to deadlock, unless we played games with unlocking the i_sem
+-before calling the space allocation functions.
+-
+-Instead of playing such games, we just have an extra internal
+-semaphore, which is obtained by the garbage collection code and also
+-by the normal file system code _after_ allocation of space.
+-
+-Ordering constraints:
+-
+- 1. Never attempt to allocate space or lock alloc_sem with
+- any f->sem held.
+- 2. Never attempt to lock two file semaphores in one thread.
+- No ordering rules have been made for doing so.
+-
+-
+- erase_completion_lock spinlock
+- ------------------------------
+-
+-This is used to serialise access to the eraseblock lists, to the
+-per-eraseblock lists of physical jffs2_raw_node_ref structures, and
+-(NB) the per-inode list of physical nodes. The latter is a special
+-case - see below.
+-
+-As the MTD API permits erase-completion callback functions to be
+-called from bottom-half (timer) context, and these functions access
+-the data structures protected by this lock, it must be locked with
+-spin_lock_bh().
+-
+-Note that the per-inode list of physical nodes (f->nodes) is a special
+-case. Any changes to _valid_ nodes (i.e. ->flash_offset & 1 == 0) in
+-the list are protected by the file semaphore f->sem. But the erase
+-code may remove _obsolete_ nodes from the list while holding only the
+-erase_completion_lock. So you can walk the list only while holding the
+-erase_completion_lock, and can drop the lock temporarily mid-walk as
+-long as the pointer you're holding is to a _valid_ node, not an
+-obsolete one.
+-
+-The erase_completion_lock is also used to protect the c->gc_task
+-pointer when the garbage collection thread exits. The code to kill the
+-GC thread locks it, sends the signal, then unlocks it - while the GC
+-thread itself locks it, zeroes c->gc_task, then unlocks on the exit path.
+-
+- node_free_sem
+- -------------
+-
+-This semaphore is only used by the erase code which frees obsolete
+-node references and the jffs2_garbage_collect_deletion_dirent()
+-function. The latter function on NAND flash must read _obsolete_ nodes
+-to determine whether the 'deletion dirent' under consideration can be
+-discarded or whether it is still required to show that an inode has
+-been unlinked. Because reading from the flash may sleep, the
+-erase_completion_lock cannot be held, so an alternative, more
+-heavyweight lock was required to prevent the erase code from freeing
+-the jffs2_raw_node_ref structures in question while the garbage
+-collection code is looking at them.
+-
+-Suggestions for alternative solutions to this problem would be welcomed.
+diff -Nur linux/fs/jffs2/TODO /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/TODO
+--- linux/fs/jffs2/TODO 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/TODO 2003-06-23 01:47:03.000000000 +0700
+@@ -1,6 +1,8 @@
+-$Id: TODO,v 1.9 2002/07/11 10:39:04 dwmw2 Exp $
++$Id: TODO,v 1.3 2001/03/01 23:26:48 dwmw2 Exp $
+
+- - disable compression in commit_write()?
++ - disable compression in commit_write()? Or at least optimise the 'always write
++ whole page' bit.
++ - fix zlib. It's ugly as hell and there are at least three copies in the kernel tree
+ - fine-tune the allocation / GC thresholds
+ - chattr support - turning on/off and tuning compression per-inode
+ - checkpointing (do we need this? scan is quite fast)
+@@ -8,37 +10,11 @@
+ mount doesn't have to read the flash twice for large files.
+ Make this a per-inode option, changable with chattr, so you can
+ decide which inodes should be in-core immediately after mount.
++ - stop it depending on a block device. mount(8) needs a change for this.
++ - make it work on NAND flash. We need to know when we can GC
++ deletion dirents, etc. And think about holes/truncation. It can
++ all be done reasonably simply, but it need implementing.
++ - NAND flash will require new dirent/dnode structures on the medium with
++ ECC data in rather than just the CRC we're using ATM.
+ - test, test, test
+
+- - NAND flash support:
+- - flush_wbuf using GC to fill it, don't just pad.
+- - Deal with write errors. Data don't get lost - we just have to write
+- the affected node(s) out again somewhere else.
+- - make fsync flush only if actually required
+- - make sys_sync() work.
+- - reboot notifier
+- - timed flush of old wbuf
+- - fix magical second arg of jffs2_flush_wbuf(). Split into two or more functions instead.
+-
+-
+- - Optimisations:
+- - Stop GC from decompressing and immediately recompressing nodes which could
+- just be copied intact.
+- - Furthermore, in the case where it could be copied intact we don't even need
+- to call iget() for it -- if we use (raw_node_raw->flash_offset & 2) as a flag
+- to show a node can be copied intact and it's _not_ in icache, we could just do
+- it, fix up the next_in_ino list and move on. We would need a way to find out
+- _whether_ it's in icache though -- if it's in icache we also need to do the
+- fragment lists, etc. P'raps a flag or pointer in the jffs2_inode_cache could
+- help.
+- - Stop keeping name in-core with struct jffs2_full_dirent. If we keep the hash in
+- the full dirent, we only need to go to the flash in lookup() when we think we've
+- got a match, and in readdir().
+- - Doubly-linked next_in_ino list to allow us to free obsoleted raw_node_refs immediately?
+- - Remove totlen from jffs2_raw_node_ref? Need to have totlen passed into
+- jffs2_mark_node_obsolete(). Can all callers work it out?
+- - Don't check data CRC on node scan during mount. We don't really need to know
+- yet. This means we can't build up node fragment lists, and hence can't
+- build accurate clean/dirty information. But we don't _need_ that for reading,
+- only for writing. And in fact we don't even need it for writing until we
+- start to need GC.
+diff -Nur linux/fs/jffs2/background.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/background.c
+--- linux/fs/jffs2/background.c 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/background.c 2003-06-23 01:47:03.000000000 +0700
+@@ -1,61 +1,59 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: background.c,v 1.31 2002/08/20 15:41:28 gleixner Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
++ *
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
+ *
+- * ChangeLog:
+- * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode
+- * 25-Nov-2002 Lineo Japan, Inc. end GC when jffs2_garbage_collect_pass
+- * returns -ENOSPC
+- * 23-Nov-2002 Lineo Japan, Inc. reverse precedence between
+- * c->nodemerge_list and c->very_dirty_list
+- * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility and c->nodemerge_list
+- * correct indentation
+- * 29-Oct-2002 Lineo Japan, Inc. add reserved blocks for badblock
+- * add c->cont_gc_count
+- * 24-Oct-2002 Lineo Japan, Inc. add min. available blocks
+- *
+- * ChangeLog:
+- * 05-Dec-2002 SHARP adjust gc-end conditions
+- * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode
+- * 25-Nov-2002 Lineo Japan, Inc. end GC when jffs2_garbage_collect_pass
+- * returns -ENOSPC
+- * 23-Nov-2002 Lineo Japan, Inc. reverse precedence between
+- * c->nodemerge_list and c->very_dirty_list
+- * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility and c->nodemerge_list
+- * correct indentation
+- * 29-Oct-2002 Lineo Japan, Inc. add reserved blocks for badblock
+- * add c->cont_gc_count
+- * 24-Oct-2002 Lineo Japan, Inc. add min. available blocks
++ * $Id: background.c,v 1.16 2001/10/08 09:22:38 dwmw2 Exp $
+ *
+ */
+
+ #define __KERNEL_SYSCALLS__
+
+ #include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/unistd.h>
+ #include <linux/jffs2.h>
+ #include <linux/mtd/mtd.h>
+ #include <linux/interrupt.h>
+ #include <linux/completion.h>
+-#include <linux/mtd/compatmac.h> /* recalc_sigpending() */
+-#include <linux/unistd.h>
+ #include "nodelist.h"
+
+
+ static int jffs2_garbage_collect_thread(void *);
+-static int thread_should_do_effective_gc(struct jffs2_sb_info *c);
+-static int thread_should_wake(struct jffs2_sb_info *c, int);
++static int thread_should_wake(struct jffs2_sb_info *c);
+
+ void jffs2_garbage_collect_trigger(struct jffs2_sb_info *c)
+ {
+ spin_lock_bh(&c->erase_completion_lock);
+- if (c->gc_task && thread_should_wake(c, 0))
++ if (c->gc_task && thread_should_wake(c))
+ send_sig(SIGHUP, c->gc_task, 1);
+ spin_unlock_bh(&c->erase_completion_lock);
+ }
+@@ -88,13 +86,6 @@
+
+ void jffs2_stop_garbage_collect_thread(struct jffs2_sb_info *c)
+ {
+- if (c->mtd->type == MTD_NANDFLASH) {
+- /* stop a eventually scheduled wbuf flush timer */
+- del_timer_sync(&c->wbuf_timer);
+- /* make sure, that a scheduled wbuf flush task is completed */
+- flush_scheduled_tasks();
+- }
+-
+ spin_lock_bh(&c->erase_completion_lock);
+ if (c->gc_task) {
+ D1(printk(KERN_DEBUG "jffs2: Killing GC task %d\n", c->gc_task->pid));
+@@ -107,28 +98,24 @@
+ static int jffs2_garbage_collect_thread(void *_c)
+ {
+ struct jffs2_sb_info *c = _c;
+- int ret = 0;
+- jffs2_gcmode_t gcmode = GCMODE_NORMAL;
+
+ daemonize();
+-
++ current->tty = NULL;
+ c->gc_task = current;
+ up(&c->gc_thread_start);
+
+ sprintf(current->comm, "jffs2_gcd_mtd%d", c->mtd->index);
+
+- set_user_nice(current, 10);
++ /* FIXME in the 2.2 backport */
++ current->nice = 10;
+
+ for (;;) {
+ spin_lock_irq(&current->sigmask_lock);
+- if (gcmode == GCMODE_NORMAL)
+- siginitsetinv (&current->blocked, sigmask(SIGUSR1) | sigmask(SIGHUP) | sigmask(SIGKILL) | sigmask(SIGSTOP) | sigmask(SIGCONT));
+- else
+- siginitsetinv (&current->blocked, sigmask(SIGKILL) | sigmask(SIGSTOP) | sigmask(SIGCONT));
++ siginitsetinv (&current->blocked, sigmask(SIGHUP) | sigmask(SIGKILL) | sigmask(SIGSTOP) | sigmask(SIGCONT));
+ recalc_sigpending();
+ spin_unlock_irq(&current->sigmask_lock);
+
+- if (gcmode == GCMODE_NORMAL && (ret == -ENOSPC || !thread_should_wake(c, 1))) {
++ if (!thread_should_wake(c)) {
+ set_current_state (TASK_INTERRUPTIBLE);
+ D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread sleeping...\n"));
+ /* Yes, there's a race here; we checked thread_should_wake() before
+@@ -138,7 +125,8 @@
+ schedule();
+ }
+
+- cond_resched();
++ if (current->need_resched)
++ schedule();
+
+ /* Put_super will send a SIGKILL and then wait on the sem.
+ */
+@@ -161,20 +149,12 @@
+ D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread(): SIGKILL received.\n"));
+ spin_lock_bh(&c->erase_completion_lock);
+ c->gc_task = NULL;
+- c->effective_gc_count = 0;
+ spin_unlock_bh(&c->erase_completion_lock);
+ complete_and_exit(&c->gc_thread_exit, 0);
+
+ case SIGHUP:
+ D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread(): SIGHUP received.\n"));
+ break;
+-
+- case SIGUSR1:
+- gcmode = GCMODE_EFFECTIVE;
+- c->effective_gc_count++;
+- D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread(): SIGUSR1 received. effective_gc_count=(%d)\n", c->effective_gc_count));
+- break;
+-
+ default:
+ D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread(): signal %ld received\n", signr));
+
+@@ -186,134 +166,18 @@
+ recalc_sigpending();
+ spin_unlock_irq(&current->sigmask_lock);
+
+- if (gcmode == GCMODE_EFFECTIVE && ! thread_should_do_effective_gc(c)) {
+- gcmode = GCMODE_NORMAL;
+- c->effective_gc_count++;
+- ret = 0;
+- continue;
+- }
+-
+ D1(printk(KERN_DEBUG "jffs2_garbage_collect_thread(): pass\n"));
+- ret = jffs2_garbage_collect_pass(c, gcmode);
+- if (gcmode == GCMODE_EFFECTIVE && ret <= 0) {
+- gcmode = GCMODE_NORMAL;
+- c->effective_gc_count++;
+- }
++ jffs2_garbage_collect_pass(c);
+ }
+ }
+
+-static int thread_should_do_effective_gc(struct jffs2_sb_info *c)
++static int thread_should_wake(struct jffs2_sb_info *c)
+ {
+- int ret = 0;
+-
+- spin_lock_bh(&c->erase_completion_lock);
+-
+- if (thread_should_wake_by_nodemerge_list(c, 1)) // add for /proc/.../.nodemerge
+- ret = 1;
+-
+- if (NR_AVAIL_BLOCKS(c) < JFFS2_RESERVED_BLOCKS_GCTRIGGER) {
+- uint32_t dirty_now, erasing_dirty_now, nonerasing_dirty_now;
+- int32_t avail_blocks;
+-
+- dirty_now = c->dirty_size;
+- erasing_dirty_now = c->erasing_dirty_size;
+- nonerasing_dirty_now = ((dirty_now >= erasing_dirty_now) ? (dirty_now - erasing_dirty_now) : 0);
+- avail_blocks = NR_AVAIL_BLOCKS(c);
+-
+- if(ret){
+- if (avail_blocks <= JFFS2_RESERVED_BLOCKS_GCMERGE)
+- ret = 0;
+- }else{
+- if (avail_blocks <= 1 ||
+- dirty_now < c->sector_size ||
+- nonerasing_dirty_now / c->sector_size < JFFS2_RESERVED_BLOCKS_DIRTY)
+- ret = 0;
+- else
+- ret = 1;
+- }
+- }
+- else
+- ret = 1;
+-
+- spin_unlock_bh(&c->erase_completion_lock);
+-
+- return ret;
+-}
+-
+-#ifdef CONFIG_JFFS2_NODEMERGE
+-static inline int thread_should_wake_by_nodemerge_list(struct jffs2_sb_info *c, int from_effective_gc)
+-{
+- if (c->flags & JFFS2_SB_FLAG_GCING_A_BLOCK)
+- return 1;
+-#ifdef CONFIG_ARCH_SHARP_SL
+- else if (! list_empty(&c->very_dirty_list))
++ D1(printk(KERN_DEBUG "thread_should_wake(): nr_free_blocks %d, nr_erasing_blocks %d, dirty_size 0x%x\n",
++ c->nr_free_blocks, c->nr_erasing_blocks, c->dirty_size));
++ if (c->nr_free_blocks + c->nr_erasing_blocks < JFFS2_RESERVED_BLOCKS_GCTRIGGER &&
++ c->dirty_size > c->sector_size)
+ return 1;
+-#endif
+- else if (! list_empty(&c->nodemerge_list)){
+- if(NR_AVAIL_BLOCKS(c) >= JFFS2_RESERVED_BLOCKS_CLEAN){
+- return 1;
+- }else{
+- if(from_effective_gc &&
+- jffs2_get_dirty_block(&c->nodemerge_list) != NULL){
+- return 1;
+- }else{
+- return 0;
+- }
+- }
+- }
+- else
++ else
+ return 0;
+ }
+-#else
+-static inline int thread_should_wake_by_nodemerge_list(struct jffs2_sb_info* c, int from_effective_gc)
+-{
+- return 0;
+-}
+-#endif
+-
+-static int thread_should_wake(struct jffs2_sb_info *c, int from_gc_loop)
+-{
+- int ret = 0;
+-
+- if (thread_should_wake_by_nodemerge_list(c, 0))
+- ret = 1;
+-
+- if (NR_AVAIL_BLOCKS(c) < JFFS2_RESERVED_BLOCKS_GCTRIGGER) {
+- uint32_t dirty_now, erasing_dirty_now, nonerasing_dirty_now;
+- int32_t avail_blocks;
+-
+- dirty_now = c->dirty_size;
+- erasing_dirty_now = c->erasing_dirty_size;
+- nonerasing_dirty_now = ((dirty_now >= erasing_dirty_now) ? (dirty_now - erasing_dirty_now) : 0);
+- avail_blocks = NR_AVAIL_BLOCKS(c);
+-
+- if(ret){
+- if (c->cont_gc_count >= JFFS2_MAX_CONT_GC ||
+- avail_blocks <= JFFS2_RESERVED_BLOCKS_GCMERGE)
+- ret = 0;
+- }else{
+- if (c->cont_gc_count >= JFFS2_MAX_CONT_GC ||
+- avail_blocks <= 1 ||
+- dirty_now < c->sector_size ||
+- nonerasing_dirty_now / c->sector_size < JFFS2_RESERVED_BLOCKS_DIRTY)
+- ret = 0;
+- else {
+- c->cont_gc_count++;
+- ret = 1;
+- }
+- }
+- }
+- else if (from_gc_loop && ! ret)
+- c->cont_gc_count = 0;
+-
+- D1(printk(KERN_DEBUG "thread_should_wake(): nr_free_blocks %d, nr_erasing_blocks %d, dirty_size 0x%x, cont_gc_count %d: %s\n",
+- c->nr_free_blocks, c->nr_erasing_blocks, c->dirty_size, c->cont_gc_count, ret?"yes":"no"));
+-
+- return ret;
+-}
+-
+-/*
+- * Local variables:
+- * c-basic-offset: 8
+- * End:
+- */
+diff -Nur linux/fs/jffs2/build.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/build.c
+--- linux/fs/jffs2/build.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/build.c 2003-06-23 01:47:03.000000000 +0700
+@@ -1,27 +1,45 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: build.c,v 1.41 2002/09/06 14:12:44 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
+ *
+- * ChangeLog:
+- * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility
+- * 20-Sep-2002 Lineo Japan, Inc. add jffs2_orphaned_inodes
+- * but it is useless right now
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: build.c,v 1.16.2.2 2002/03/12 15:36:43 dwmw2 Exp $
+ *
+ */
+
+ #include <linux/kernel.h>
++#include <linux/jffs2.h>
+ #include <linux/slab.h>
+ #include "nodelist.h"
+
+-static enum { ORPHANED_DELETE, ORPHANED_ERROR } orphaned_inodes_mode;
+-
+ int jffs2_build_inode_pass1(struct jffs2_sb_info *, struct jffs2_inode_cache *);
+ int jffs2_build_remove_unlinked_inode(struct jffs2_sb_info *, struct jffs2_inode_cache *);
+
+@@ -33,7 +51,7 @@
+ - Scan directory tree from top down, setting nlink in inocaches
+ - Scan inocaches for inodes with nlink==0
+ */
+-static int jffs2_build_filesystem(struct jffs2_sb_info *c)
++int jffs2_build_filesystem(struct jffs2_sb_info *c)
+ {
+ int ret;
+ int i;
+@@ -50,7 +68,6 @@
+ return ret;
+
+ D1(printk(KERN_DEBUG "Scanned flash completely\n"));
+- D1(jffs2_dump_block_lists(c));
+ /* Now build the data map for each inode, marking obsoleted nodes
+ as such, and also increase nlink of any children. */
+ for_each_inode(i, c, ic) {
+@@ -60,11 +77,9 @@
+ D1(printk(KERN_WARNING "Eep. jffs2_build_inode_pass1 for ino %d returned %d\n", ic->ino, ret));
+ return ret;
+ }
+- cond_resched();
+ }
+ D1(printk(KERN_DEBUG "Pass 1 complete\n"));
+- D1(jffs2_dump_block_lists(c));
+-
++
+ /* Next, scan for inodes with nlink == 0 and remove them. If
+ they were directories, then decrement the nlink of their
+ children too, and repeat the scan. As that's going to be
+@@ -78,16 +93,6 @@
+ if (ic->nlink)
+ continue;
+
+- /* XXX: Can get high latency here. Move the cond_resched() from the end of the loop? */
+-
+- switch (orphaned_inodes_mode) {
+- case ORPHANED_ERROR:
+- printk(KERN_ERR "%s: detect orphaned inode\n", __func__);
+- return -EIO;
+-
+- default:
+- break;
+- }
+ ret = jffs2_build_remove_unlinked_inode(c, ic);
+ if (ret)
+ break;
+@@ -95,12 +100,8 @@
+ and furthermore that it had children and their nlink has now
+ gone to zero too. So we have to restart the scan. */
+ }
+- D1(jffs2_dump_block_lists(c));
+-
+- cond_resched();
+-
+ } while(ret == -EAGAIN);
+-
++
+ D1(printk(KERN_DEBUG "Pass 2 complete\n"));
+
+ /* Finally, we can scan again and free the dirent nodes and scan_info structs */
+@@ -121,13 +122,8 @@
+ jffs2_free_full_dirent(fd);
+ }
+ kfree(scan);
+- cond_resched();
+ }
+ D1(printk(KERN_DEBUG "Pass 3 complete\n"));
+- D1(jffs2_dump_block_lists(c));
+-
+- /* Rotate the lists by some number to ensure wear levelling */
+- jffs2_rotate_lists(c);
+
+ return ret;
+ }
+@@ -136,7 +132,7 @@
+ {
+ struct jffs2_tmp_dnode_info *tn;
+ struct jffs2_full_dirent *fd;
+- rb_root_t fragtree = RB_ROOT;
++ struct jffs2_node_frag *fraglist = NULL;
+ struct jffs2_tmp_dnode_info *metadata = NULL;
+
+ D1(printk(KERN_DEBUG "jffs2_build_inode building inode #%u\n", ic->ino));
+@@ -153,56 +149,52 @@
+
+ if (metadata && tn->version > metadata->version) {
+ D1(printk(KERN_DEBUG "jffs2_build_inode_pass1 ignoring old metadata at 0x%08x\n",
+- ref_offset(metadata->fn->raw)));
++ metadata->fn->raw->flash_offset &~3));
+
+- jffs2_mark_node_obsolete(c, metadata->fn->raw);
+ jffs2_free_full_dnode(metadata->fn);
+ jffs2_free_tmp_dnode_info(metadata);
+ metadata = NULL;
+ }
+
+ if (tn->fn->size) {
+- jffs2_add_full_dnode_to_fraglist (c, &fragtree, tn->fn);
++ jffs2_add_full_dnode_to_fraglist (c, &fraglist, tn->fn);
+ jffs2_free_tmp_dnode_info(tn);
+ } else {
+ if (!metadata) {
+ metadata = tn;
+ } else {
+- /* This will only happen if it has the _same_ version
+- number as the existing metadata node. */
+ D1(printk(KERN_DEBUG "jffs2_build_inode_pass1 ignoring new metadata at 0x%08x\n",
+- ref_offset(tn->fn->raw)));
++ tn->fn->raw->flash_offset &~3));
+
+- jffs2_mark_node_obsolete(c, tn->fn->raw);
+ jffs2_free_full_dnode(tn->fn);
+ jffs2_free_tmp_dnode_info(tn);
+ }
+ }
+ }
+-
+- if (ic->scan->version) {
+- /* It's a regular file, so truncate it to the last known
+- i_size, if necessary */
+- D1(printk(KERN_DEBUG "jffs2_build_inode_pass1 truncating fraglist to 0x%08x\n", ic->scan->isize));
+- jffs2_truncate_fraglist_1(c, &fragtree, ic->scan->isize);
+- }
+-
++
+ /* OK. Now clear up */
+ if (metadata) {
+ jffs2_free_full_dnode(metadata->fn);
+ jffs2_free_tmp_dnode_info(metadata);
+ }
+ metadata = NULL;
+-
+- jffs2_kill_fragtree(&fragtree, NULL);
++
++ while (fraglist) {
++ struct jffs2_node_frag *frag;
++ frag = fraglist;
++ fraglist = fraglist->next;
++
++ if (frag->node && !(--frag->node->frags)) {
++ jffs2_free_full_dnode(frag->node);
++ }
++ jffs2_free_node_frag(frag);
++ }
+
+ /* Now for each child, increase nlink */
+ for(fd=ic->scan->dents; fd; fd = fd->next) {
+ struct jffs2_inode_cache *child_ic;
+ if (!fd->ino)
+ continue;
+-
+- /* XXX: Can get high latency here with huge directories */
+
+ child_ic = jffs2_get_ino_cache(c, fd->ino);
+ if (!child_ic) {
+@@ -239,38 +231,25 @@
+ D1(printk(KERN_DEBUG "JFFS2: Removing ino #%u with nlink == zero.\n", ic->ino));
+
+ for (raw = ic->nodes; raw != (void *)ic; raw = raw->next_in_ino) {
+- D1(printk(KERN_DEBUG "obsoleting node at 0x%08x\n", ref_offset(raw)));
++ D1(printk(KERN_DEBUG "obsoleting node at 0x%08x\n", raw->flash_offset&~3));
+ jffs2_mark_node_obsolete(c, raw);
+ }
+
+ if (ic->scan->dents) {
+- int whinged = 0;
+- D1(printk(KERN_DEBUG "Inode #%u was a directory which may have children...\n", ic->ino));
+-
++ printk(KERN_NOTICE "Inode #%u was a directory with children - removing those too...\n", ic->ino);
++
+ while(ic->scan->dents) {
+ struct jffs2_inode_cache *child_ic;
+
+ fd = ic->scan->dents;
+ ic->scan->dents = fd->next;
+
+- if (!fd->ino) {
+- /* It's a deletion dirent. Ignore it */
+- D1(printk(KERN_DEBUG "Child \"%s\" is a deletion dirent, skipping...\n", fd->name));
+- jffs2_free_full_dirent(fd);
+- continue;
+- }
+- if (!whinged) {
+- whinged = 1;
+- printk(KERN_NOTICE "Inode #%u was a directory with children - removing those too...\n", ic->ino);
+- }
+-
+ D1(printk(KERN_DEBUG "Removing child \"%s\", ino #%u\n",
+ fd->name, fd->ino));
+
+ child_ic = jffs2_get_ino_cache(c, fd->ino);
+ if (!child_ic) {
+ printk(KERN_NOTICE "Cannot remove child \"%s\", ino #%u, because it doesn't exist\n", fd->name, fd->ino);
+- jffs2_free_full_dirent(fd);
+ continue;
+ }
+ jffs2_free_full_dirent(fd);
+@@ -280,82 +259,7 @@
+ }
+ kfree(ic->scan);
+ ic->scan = NULL;
+-
+- /*
+- We don't delete the inocache from the hash list and free it yet.
+- The erase code will do that, when all the nodes are completely gone.
+- */
+-
++ // jffs2_del_ino_cache(c, ic);
++ // jffs2_free_inode_cache(ic);
+ return ret;
+ }
+-
+-int jffs2_do_mount_fs(struct jffs2_sb_info *c)
+-{
+- int i;
+-
+- c->free_size = c->flash_size;
+- c->nr_blocks = c->flash_size / c->sector_size;
+- c->blocks = kmalloc(sizeof(struct jffs2_eraseblock) * c->nr_blocks, GFP_KERNEL);
+- if (!c->blocks)
+- return -ENOMEM;
+- for (i=0; i<c->nr_blocks; i++) {
+- INIT_LIST_HEAD(&c->blocks[i].list);
+- c->blocks[i].offset = i * c->sector_size;
+- c->blocks[i].free_size = c->sector_size;
+- c->blocks[i].dirty_size = 0;
+- c->blocks[i].wasted_size = 0;
+- c->blocks[i].used_size = 0;
+- c->blocks[i].first_node = NULL;
+- c->blocks[i].last_node = NULL;
+- }
+-
+- init_MUTEX(&c->alloc_sem);
+- init_MUTEX(&c->erase_free_sem);
+- init_waitqueue_head(&c->erase_wait);
+- spin_lock_init(&c->erase_completion_lock);
+- spin_lock_init(&c->inocache_lock);
+-
+- INIT_LIST_HEAD(&c->clean_list);
+- INIT_LIST_HEAD(&c->very_dirty_list);
+- INIT_LIST_HEAD(&c->dirty_list);
+- INIT_LIST_HEAD(&c->erasable_list);
+- INIT_LIST_HEAD(&c->erasing_list);
+- INIT_LIST_HEAD(&c->erase_pending_list);
+- INIT_LIST_HEAD(&c->erasable_pending_wbuf_list);
+- INIT_LIST_HEAD(&c->erase_complete_list);
+- INIT_LIST_HEAD(&c->free_list);
+- INIT_LIST_HEAD(&c->bad_list);
+- INIT_LIST_HEAD(&c->bad_used_list);
+-#ifdef CONFIG_JFFS2_NODEMERGE
+- INIT_LIST_HEAD(&c->nodemerge_list);
+-#endif
+- c->highest_ino = 1;
+-
+- if (jffs2_build_filesystem(c)) {
+- D1(printk(KERN_DEBUG "build_fs failed\n"));
+- jffs2_free_ino_caches(c);
+- jffs2_free_raw_node_refs(c);
+- kfree(c->blocks);
+- return -EIO;
+- }
+- return 0;
+-}
+-
+-
+-static int __init jffs2_setup(char* s)
+-{
+- if (strcmp(s, "error") == 0)
+- orphaned_inodes_mode = ORPHANED_ERROR;
+- else
+- orphaned_inodes_mode = ORPHANED_DELETE;
+- return 1;
+-}
+-
+-
+-__setup("jffs2_orphaned_inodes=", jffs2_setup);
+-
+-/*
+- * Local variables:
+- * c-basic-offset: 8
+- * End:
+- */
+diff -Nur linux/fs/jffs2/compr.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compr.c
+--- linux/fs/jffs2/compr.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compr.c 2003-06-23 01:47:03.000000000 +0700
+@@ -1,43 +1,54 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by Arjan van de Ven <arjanv@redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: compr.c,v 1.24 2002/05/20 14:56:37 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
++ *
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
+ *
+- * ChangeLog:
+- * 20-Nov-2002 Lineo Japan, Inc. don't choose rtime compressor
++ * $Id: compr.c,v 1.17 2001/09/23 09:56:46 dwmw2 Exp $
+ *
+ */
+
+-#ifdef __KERNEL__
+ #include <linux/kernel.h>
+ #include <linux/string.h>
++#include <linux/types.h>
+ #include <linux/errno.h>
+-#else
+-#define KERN_DEBUG
+-#define KERN_NOTICE
+-#define KERN_WARNING
+-#define printk printf
+-#include <stdio.h>
+-#include <stdint.h>
+-#include <errno.h>
+-#endif
+-
+ #include <linux/jffs2.h>
+
+-int jffs2_zlib_compress(unsigned char *data_in, unsigned char *cpage_out, uint32_t *sourcelen, uint32_t *dstlen);
+-void jffs2_zlib_decompress(unsigned char *data_in, unsigned char *cpage_out, uint32_t srclen, uint32_t destlen);
+-int jffs2_rtime_compress(unsigned char *data_in, unsigned char *cpage_out, uint32_t *sourcelen, uint32_t *dstlen);
+-void jffs2_rtime_decompress(unsigned char *data_in, unsigned char *cpage_out, uint32_t srclen, uint32_t destlen);
+-int jffs2_rubinmips_compress(unsigned char *data_in, unsigned char *cpage_out, uint32_t *sourcelen, uint32_t *dstlen);
+-void jffs2_rubinmips_decompress(unsigned char *data_in, unsigned char *cpage_out, uint32_t srclen, uint32_t destlen);
+-int jffs2_dynrubin_compress(unsigned char *data_in, unsigned char *cpage_out, uint32_t *sourcelen, uint32_t *dstlen);
+-void jffs2_dynrubin_decompress(unsigned char *data_in, unsigned char *cpage_out, uint32_t srclen, uint32_t destlen);
++int zlib_compress(unsigned char *data_in, unsigned char *cpage_out, __u32 *sourcelen, __u32 *dstlen);
++void zlib_decompress(unsigned char *data_in, unsigned char *cpage_out, __u32 srclen, __u32 destlen);
++int rtime_compress(unsigned char *data_in, unsigned char *cpage_out, __u32 *sourcelen, __u32 *dstlen);
++void rtime_decompress(unsigned char *data_in, unsigned char *cpage_out, __u32 srclen, __u32 destlen);
++int rubinmips_compress(unsigned char *data_in, unsigned char *cpage_out, __u32 *sourcelen, __u32 *dstlen);
++void rubinmips_decompress(unsigned char *data_in, unsigned char *cpage_out, __u32 srclen, __u32 destlen);
++int dynrubin_compress(unsigned char *data_in, unsigned char *cpage_out, __u32 *sourcelen, __u32 *dstlen);
++void dynrubin_decompress(unsigned char *data_in, unsigned char *cpage_out, __u32 srclen, __u32 destlen);
+
+
+ /* jffs2_compress:
+@@ -58,33 +69,31 @@
+ * *datalen accordingly to show the amount of data which were compressed.
+ */
+ unsigned char jffs2_compress(unsigned char *data_in, unsigned char *cpage_out,
+- uint32_t *datalen, uint32_t *cdatalen)
++ __u32 *datalen, __u32 *cdatalen)
+ {
+ int ret;
+
+- ret = jffs2_zlib_compress(data_in, cpage_out, datalen, cdatalen);
++ ret = zlib_compress(data_in, cpage_out, datalen, cdatalen);
+ if (!ret) {
+ return JFFS2_COMPR_ZLIB;
+ }
+ #if 0 /* Disabled 23/9/1. With zlib it hardly ever gets a look in */
+- ret = jffs2_dynrubin_compress(data_in, cpage_out, datalen, cdatalen);
++ ret = dynrubin_compress(data_in, cpage_out, datalen, cdatalen);
+ if (!ret) {
+ return JFFS2_COMPR_DYNRUBIN;
+ }
+ #endif
+ #if 0 /* Disabled 26/2/1. Obsoleted by dynrubin */
+- ret = jffs2_rubinmips_compress(data_in, cpage_out, datalen, cdatalen);
++ ret = rubinmips_compress(data_in, cpage_out, datalen, cdatalen);
+ if (!ret) {
+ return JFFS2_COMPR_RUBINMIPS;
+ }
+ #endif
+-#ifndef CONFIG_ARCH_SHARP_SL
+ /* rtime does manage to recompress already-compressed data */
+- ret = jffs2_rtime_compress(data_in, cpage_out, datalen, cdatalen);
++ ret = rtime_compress(data_in, cpage_out, datalen, cdatalen);
+ if (!ret) {
+ return JFFS2_COMPR_RTIME;
+ }
+-#endif
+ #if 0
+ /* We don't need to copy. Let the caller special-case the COMPR_NONE case. */
+ /* If we get here, no compression is going to work */
+@@ -99,7 +108,7 @@
+
+
+ int jffs2_decompress(unsigned char comprtype, unsigned char *cdata_in,
+- unsigned char *data_out, uint32_t cdatalen, uint32_t datalen)
++ unsigned char *data_out, __u32 cdatalen, __u32 datalen)
+ {
+ switch (comprtype) {
+ case JFFS2_COMPR_NONE:
+@@ -112,23 +121,23 @@
+ break;
+
+ case JFFS2_COMPR_ZLIB:
+- jffs2_zlib_decompress(cdata_in, data_out, cdatalen, datalen);
++ zlib_decompress(cdata_in, data_out, cdatalen, datalen);
+ break;
+
+ case JFFS2_COMPR_RTIME:
+- jffs2_rtime_decompress(cdata_in, data_out, cdatalen, datalen);
++ rtime_decompress(cdata_in, data_out, cdatalen, datalen);
+ break;
+
+ case JFFS2_COMPR_RUBINMIPS:
+ #if 0 /* Disabled 23/9/1 */
+- jffs2_rubinmips_decompress(cdata_in, data_out, cdatalen, datalen);
++ rubinmips_decompress(cdata_in, data_out, cdatalen, datalen);
+ #else
+ printk(KERN_WARNING "JFFS2: Rubinmips compression encountered but support not compiled in!\n");
+ #endif
+ break;
+ case JFFS2_COMPR_DYNRUBIN:
+ #if 1 /* Phase this one out */
+- jffs2_dynrubin_decompress(cdata_in, data_out, cdatalen, datalen);
++ dynrubin_decompress(cdata_in, data_out, cdatalen, datalen);
+ #else
+ printk(KERN_WARNING "JFFS2: Dynrubin compression encountered but support not compiled in!\n");
+ #endif
+diff -Nur linux/fs/jffs2/compr_rtime.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compr_rtime.c
+--- linux/fs/jffs2/compr_rtime.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compr_rtime.c 2003-06-23 01:47:03.000000000 +0700
+@@ -1,13 +1,37 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by Arjan van de Ven <arjanv@redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: compr_rtime.c,v 1.9 2002/05/20 14:56:37 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
++ *
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: compr_rtime.c,v 1.5 2001/03/15 15:38:23 dwmw2 Exp $
+ *
+ *
+ * Very simple lz77-ish encoder.
+@@ -19,9 +43,6 @@
+ *
+ * The algorithm is intended to only send "whole bytes", no bit-messing.
+ *
+- * ChangeLog:
+- * 20-Nov-2002 Lineo Japan, Inc. don't choose rtime compressor
+- *
+ */
+
+ #include <linux/kernel.h>
+@@ -29,10 +50,9 @@
+ #include <linux/errno.h>
+ #include <linux/string.h>
+
+-#ifndef CONFIG_ARCH_SHARP_SL
+ /* _compress returns the compressed size, -1 if bigger */
+-int jffs2_rtime_compress(unsigned char *data_in, unsigned char *cpage_out,
+- uint32_t *sourcelen, uint32_t *dstlen)
++int rtime_compress(unsigned char *data_in, unsigned char *cpage_out,
++ __u32 *sourcelen, __u32 *dstlen)
+ {
+ int positions[256];
+ int outpos = 0;
+@@ -69,11 +89,10 @@
+ *dstlen = outpos;
+ return 0;
+ }
+-#endif
+
+
+-void jffs2_rtime_decompress(unsigned char *data_in, unsigned char *cpage_out,
+- uint32_t srclen, uint32_t destlen)
++void rtime_decompress(unsigned char *data_in, unsigned char *cpage_out,
++ __u32 srclen, __u32 destlen)
+ {
+ int positions[256];
+ int outpos = 0;
+diff -Nur linux/fs/jffs2/compr_rubin.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compr_rubin.c
+--- linux/fs/jffs2/compr_rubin.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compr_rubin.c 2003-06-23 01:47:03.000000000 +0700
+@@ -1,13 +1,37 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by Arjan van de Ven <arjanv@redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: compr_rubin.c,v 1.17 2002/05/20 14:56:37 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
++ *
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: compr_rubin.c,v 1.13 2001/09/23 10:06:05 rmk Exp $
+ *
+ */
+
+@@ -19,7 +43,7 @@
+
+
+
+-static void init_rubin(struct rubin_state *rs, int div, int *bits)
++void init_rubin(struct rubin_state *rs, int div, int *bits)
+ {
+ int c;
+
+@@ -32,7 +56,7 @@
+ }
+
+
+-static int encode(struct rubin_state *rs, long A, long B, int symbol)
++int encode(struct rubin_state *rs, long A, long B, int symbol)
+ {
+
+ long i0, i1;
+@@ -67,7 +91,7 @@
+ }
+
+
+-static void end_rubin(struct rubin_state *rs)
++void end_rubin(struct rubin_state *rs)
+ {
+
+ int i;
+@@ -80,7 +104,7 @@
+ }
+
+
+-static void init_decode(struct rubin_state *rs, int div, int *bits)
++void init_decode(struct rubin_state *rs, int div, int *bits)
+ {
+ init_rubin(rs, div, bits);
+
+@@ -127,7 +151,7 @@
+ rs->rec_q = rec_q;
+ }
+
+-static int decode(struct rubin_state *rs, long A, long B)
++int decode(struct rubin_state *rs, long A, long B)
+ {
+ unsigned long p = rs->p, q = rs->q;
+ long i0, threshold;
+@@ -188,8 +212,8 @@
+
+
+
+-static int rubin_do_compress(int bit_divider, int *bits, unsigned char *data_in,
+- unsigned char *cpage_out, uint32_t *sourcelen, uint32_t *dstlen)
++int rubin_do_compress(int bit_divider, int *bits, unsigned char *data_in,
++ unsigned char *cpage_out, __u32 *sourcelen, __u32 *dstlen)
+ {
+ int outpos = 0;
+ int pos=0;
+@@ -222,20 +246,20 @@
+ }
+ #if 0
+ /* _compress returns the compressed size, -1 if bigger */
+-int jffs2_rubinmips_compress(unsigned char *data_in, unsigned char *cpage_out,
+- uint32_t *sourcelen, uint32_t *dstlen)
++int rubinmips_compress(unsigned char *data_in, unsigned char *cpage_out,
++ __u32 *sourcelen, __u32 *dstlen)
+ {
+ return rubin_do_compress(BIT_DIVIDER_MIPS, bits_mips, data_in, cpage_out, sourcelen, dstlen);
+ }
+ #endif
+-int jffs2_dynrubin_compress(unsigned char *data_in, unsigned char *cpage_out,
+- uint32_t *sourcelen, uint32_t *dstlen)
++int dynrubin_compress(unsigned char *data_in, unsigned char *cpage_out,
++ __u32 *sourcelen, __u32 *dstlen)
+ {
+ int bits[8];
+ unsigned char histo[256];
+ int i;
+ int ret;
+- uint32_t mysrclen, mydstlen;
++ __u32 mysrclen, mydstlen;
+
+ mysrclen = *sourcelen;
+ mydstlen = *dstlen - 8;
+@@ -291,8 +315,8 @@
+ return 0;
+ }
+
+-static void rubin_do_decompress(int bit_divider, int *bits, unsigned char *cdata_in,
+- unsigned char *page_out, uint32_t srclen, uint32_t destlen)
++void rubin_do_decompress(int bit_divider, int *bits, unsigned char *cdata_in,
++ unsigned char *page_out, __u32 srclen, __u32 destlen)
+ {
+ int outpos = 0;
+ struct rubin_state rs;
+@@ -306,14 +330,14 @@
+ }
+
+
+-void jffs2_rubinmips_decompress(unsigned char *data_in, unsigned char *cpage_out,
+- uint32_t sourcelen, uint32_t dstlen)
++void rubinmips_decompress(unsigned char *data_in, unsigned char *cpage_out,
++ __u32 sourcelen, __u32 dstlen)
+ {
+ rubin_do_decompress(BIT_DIVIDER_MIPS, bits_mips, data_in, cpage_out, sourcelen, dstlen);
+ }
+
+-void jffs2_dynrubin_decompress(unsigned char *data_in, unsigned char *cpage_out,
+- uint32_t sourcelen, uint32_t dstlen)
++void dynrubin_decompress(unsigned char *data_in, unsigned char *cpage_out,
++ __u32 sourcelen, __u32 dstlen)
+ {
+ int bits[8];
+ int c;
+diff -Nur linux/fs/jffs2/compr_rubin.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compr_rubin.h
+--- linux/fs/jffs2/compr_rubin.h 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compr_rubin.h 2003-06-23 01:47:03.000000000 +0700
+@@ -1,7 +1,7 @@
+ /* Rubin encoder/decoder header */
+ /* work started at : aug 3, 1994 */
+ /* last modification : aug 15, 1994 */
+-/* $Id: compr_rubin.h,v 1.6 2002/01/25 01:49:26 dwmw2 Exp $ */
++/* $Id: compr_rubin.h,v 1.5 2001/02/26 13:50:01 dwmw2 Exp $ */
+
+ #include "pushpull.h"
+
+@@ -19,3 +19,10 @@
+ int bit_divider;
+ int bits[8];
+ };
++
++
++void init_rubin (struct rubin_state *rs, int div, int *bits);
++int encode (struct rubin_state *, long, long, int);
++void end_rubin (struct rubin_state *);
++void init_decode (struct rubin_state *, int div, int *bits);
++int decode (struct rubin_state *, long, long);
+diff -Nur linux/fs/jffs2/compr_zlib.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compr_zlib.c
+--- linux/fs/jffs2/compr_zlib.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compr_zlib.c 2003-06-23 01:47:03.000000000 +0700
+@@ -1,28 +1,72 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: compr_zlib.c,v 1.18 2002/05/20 14:56:37 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
++ *
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: compr_zlib.c,v 1.8 2001/09/20 15:28:31 dwmw2 Exp $
+ *
+ */
+
+-#ifndef __KERNEL__
+-#error "The userspace support got too messy and was removed. Update your mkfs.jffs2"
+-#endif
++#include "zlib.h"
+
+-#include <linux/config.h>
++#ifdef __KERNEL__
+ #include <linux/kernel.h>
+ #include <linux/mtd/compatmac.h> /* for min() */
+ #include <linux/slab.h>
+ #include <linux/jffs2.h>
+-#include <linux/zlib.h>
+ #include "nodelist.h"
+
++static void *zalloc(void *opaque, unsigned nr, unsigned size)
++{
++ /* How much does it request? Should we use vmalloc? Or be dynamic? */
++ return kmalloc(nr * size, GFP_KERNEL);
++}
++
++static void zfree(void *opaque, void *addr)
++{
++ kfree(addr);
++}
++#else
++#define min(x,y) ((x)<(y)?(x):(y))
++#ifndef D1
++#define D1(x)
++#endif
++#define KERN_DEBUG
++#define KERN_NOTICE
++#define KERN_WARNING
++#define printk printf
++#include <stdio.h>
++#include <asm/types.h>
++#endif
++
+ /* Plan: call deflate() with avail_in == *sourcelen,
+ avail_out = *dstlen - 12 and flush == Z_FINISH.
+ If it doesn't manage to finish, call it again with
+@@ -32,37 +76,8 @@
+ */
+ #define STREAM_END_SPACE 12
+
+-static DECLARE_MUTEX(deflate_sem);
+-static DECLARE_MUTEX(inflate_sem);
+-static void *deflate_workspace;
+-static void *inflate_workspace;
+-
+-int __init jffs2_zlib_init(void)
+-{
+- deflate_workspace = vmalloc(zlib_deflate_workspacesize());
+- if (!deflate_workspace) {
+- printk(KERN_WARNING "Failed to allocate %d bytes for deflate workspace\n", zlib_deflate_workspacesize());
+- return -ENOMEM;
+- }
+- D1(printk(KERN_DEBUG "Allocated %d bytes for deflate workspace\n", zlib_deflate_workspacesize()));
+- inflate_workspace = vmalloc(zlib_inflate_workspacesize());
+- if (!inflate_workspace) {
+- printk(KERN_WARNING "Failed to allocate %d bytes for inflate workspace\n", zlib_inflate_workspacesize());
+- vfree(deflate_workspace);
+- return -ENOMEM;
+- }
+- D1(printk(KERN_DEBUG "Allocated %d bytes for inflate workspace\n", zlib_inflate_workspacesize()));
+- return 0;
+-}
+-
+-void jffs2_zlib_exit(void)
+-{
+- vfree(deflate_workspace);
+- vfree(inflate_workspace);
+-}
+-
+-int jffs2_zlib_compress(unsigned char *data_in, unsigned char *cpage_out,
+- uint32_t *sourcelen, uint32_t *dstlen)
++int zlib_compress(unsigned char *data_in, unsigned char *cpage_out,
++ __u32 *sourcelen, __u32 *dstlen)
+ {
+ z_stream strm;
+ int ret;
+@@ -70,15 +85,18 @@
+ if (*dstlen <= STREAM_END_SPACE)
+ return -1;
+
+- down(&deflate_sem);
+- strm.workspace = deflate_workspace;
++#ifdef __KERNEL__
++ strm.zalloc = zalloc;
++ strm.zfree = zfree;
++#else
++ strm.zalloc = (void *)0;
++ strm.zfree = (void *)0;
++#endif
+
+- if (Z_OK != zlib_deflateInit(&strm, 3)) {
++ if (Z_OK != deflateInit(&strm, 3)) {
+ printk(KERN_WARNING "deflateInit failed\n");
+- up(&deflate_sem);
+ return -1;
+ }
+-
+ strm.next_in = data_in;
+ strm.total_in = 0;
+
+@@ -90,49 +108,52 @@
+ strm.avail_in = min((unsigned)(*sourcelen-strm.total_in), strm.avail_out);
+ D1(printk(KERN_DEBUG "calling deflate with avail_in %d, avail_out %d\n",
+ strm.avail_in, strm.avail_out));
+- ret = zlib_deflate(&strm, Z_PARTIAL_FLUSH);
++ ret = deflate(&strm, Z_PARTIAL_FLUSH);
+ D1(printk(KERN_DEBUG "deflate returned with avail_in %d, avail_out %d, total_in %ld, total_out %ld\n",
+ strm.avail_in, strm.avail_out, strm.total_in, strm.total_out));
+ if (ret != Z_OK) {
+ D1(printk(KERN_DEBUG "deflate in loop returned %d\n", ret));
+- zlib_deflateEnd(&strm);
+- up(&deflate_sem);
++ deflateEnd(&strm);
+ return -1;
+ }
+ }
+ strm.avail_out += STREAM_END_SPACE;
+ strm.avail_in = 0;
+- ret = zlib_deflate(&strm, Z_FINISH);
+- zlib_deflateEnd(&strm);
+- up(&deflate_sem);
++ ret = deflate(&strm, Z_FINISH);
+ if (ret != Z_STREAM_END) {
+ D1(printk(KERN_DEBUG "final deflate returned %d\n", ret));
++ deflateEnd(&strm);
+ return -1;
+ }
++ deflateEnd(&strm);
+
+- D1(printk(KERN_DEBUG "zlib compressed %ld bytes into %ld\n",
+- strm.total_in, strm.total_out));
++ D1(printk(KERN_DEBUG "zlib compressed %ld bytes into %ld\n", strm.total_in, strm.total_out));
+
+ if (strm.total_out >= strm.total_in)
+ return -1;
+
++
+ *dstlen = strm.total_out;
+ *sourcelen = strm.total_in;
+ return 0;
+ }
+
+-void jffs2_zlib_decompress(unsigned char *data_in, unsigned char *cpage_out,
+- uint32_t srclen, uint32_t destlen)
++void zlib_decompress(unsigned char *data_in, unsigned char *cpage_out,
++ __u32 srclen, __u32 destlen)
+ {
+ z_stream strm;
+ int ret;
+
+- down(&inflate_sem);
+- strm.workspace = inflate_workspace;
++#ifdef __KERNEL__
++ strm.zalloc = zalloc;
++ strm.zfree = zfree;
++#else
++ strm.zalloc = (void *)0;
++ strm.zfree = (void *)0;
++#endif
+
+- if (Z_OK != zlib_inflateInit(&strm)) {
++ if (Z_OK != inflateInit(&strm)) {
+ printk(KERN_WARNING "inflateInit failed\n");
+- up(&inflate_sem);
+ return;
+ }
+ strm.next_in = data_in;
+@@ -143,11 +164,10 @@
+ strm.avail_out = destlen;
+ strm.total_out = 0;
+
+- while((ret = zlib_inflate(&strm, Z_FINISH)) == Z_OK)
++ while((ret = inflate(&strm, Z_FINISH)) == Z_OK)
+ ;
+ if (ret != Z_STREAM_END) {
+ printk(KERN_NOTICE "inflate returned %d\n", ret);
+ }
+- zlib_inflateEnd(&strm);
+- up(&inflate_sem);
++ inflateEnd(&strm);
+ }
+diff -Nur linux/fs/jffs2/compressors/Makefile /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/Makefile
+--- linux/fs/jffs2/compressors/Makefile 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/Makefile 1970-01-01 07:00:00.000000000 +0700
+@@ -1,8 +0,0 @@
+-O_TARGET := compressors.o
+-
+-subdir-y := zlib_deflate
+-subdir-y += zlib_inflate
+-
+-obj-y := $(join $(subdir-y),$(subdir-y:%=/%.o))
+-
+-include $(TOPDIR)/Rules.make
+diff -Nur linux/fs/jffs2/compressors/zlib_deflate/Makefile /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_deflate/Makefile
+--- linux/fs/jffs2/compressors/zlib_deflate/Makefile 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_deflate/Makefile 1970-01-01 07:00:00.000000000 +0700
+@@ -1,16 +0,0 @@
+-#
+-# This is a modified version of zlib, which does all memory
+-# allocation ahead of time.
+-#
+-# This is the compression code, see zlib_inflate for the
+-# decompression code.
+-#
+-
+-O_TARGET := zlib_deflate.o
+-
+-export-objs := deflate_syms.o
+-
+-obj-y := deflate.o deftree.o deflate_syms.o
+-obj-m := $(O_TARGET)
+-
+-include $(TOPDIR)/Rules.make
+diff -Nur linux/fs/jffs2/compressors/zlib_deflate/deflate.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_deflate/deflate.c
+--- linux/fs/jffs2/compressors/zlib_deflate/deflate.c 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_deflate/deflate.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,1250 +0,0 @@
+-/* +++ deflate.c */
+-/* deflate.c -- compress data using the deflation algorithm
+- * Copyright (C) 1995-1996 Jean-loup Gailly.
+- * For conditions of distribution and use, see copyright notice in zlib.h
+- */
+-
+-/*
+- * ALGORITHM
+- *
+- * The "deflation" process depends on being able to identify portions
+- * of the input text which are identical to earlier input (within a
+- * sliding window trailing behind the input currently being processed).
+- *
+- * The most straightforward technique turns out to be the fastest for
+- * most input files: try all possible matches and select the longest.
+- * The key feature of this algorithm is that insertions into the string
+- * dictionary are very simple and thus fast, and deletions are avoided
+- * completely. Insertions are performed at each input character, whereas
+- * string matches are performed only when the previous match ends. So it
+- * is preferable to spend more time in matches to allow very fast string
+- * insertions and avoid deletions. The matching algorithm for small
+- * strings is inspired from that of Rabin & Karp. A brute force approach
+- * is used to find longer strings when a small match has been found.
+- * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
+- * (by Leonid Broukhis).
+- * A previous version of this file used a more sophisticated algorithm
+- * (by Fiala and Greene) which is guaranteed to run in linear amortized
+- * time, but has a larger average cost, uses more memory and is patented.
+- * However the F&G algorithm may be faster for some highly redundant
+- * files if the parameter max_chain_length (described below) is too large.
+- *
+- * ACKNOWLEDGEMENTS
+- *
+- * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
+- * I found it in 'freeze' written by Leonid Broukhis.
+- * Thanks to many people for bug reports and testing.
+- *
+- * REFERENCES
+- *
+- * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
+- * Available in ftp://ds.internic.net/rfc/rfc1951.txt
+- *
+- * A description of the Rabin and Karp algorithm is given in the book
+- * "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
+- *
+- * Fiala,E.R., and Greene,D.H.
+- * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
+- *
+- */
+-
+-#include <linux/module.h>
+-#include <linux/zutil.h>
+-#include "defutil.h"
+-
+-
+-/* ===========================================================================
+- * Function prototypes.
+- */
+-typedef enum {
+- need_more, /* block not completed, need more input or more output */
+- block_done, /* block flush performed */
+- finish_started, /* finish started, need only more output at next deflate */
+- finish_done /* finish done, accept no more input or output */
+-} block_state;
+-
+-typedef block_state (*compress_func) OF((deflate_state *s, int flush));
+-/* Compression function. Returns the block state after the call. */
+-
+-local void fill_window OF((deflate_state *s));
+-local block_state deflate_stored OF((deflate_state *s, int flush));
+-local block_state deflate_fast OF((deflate_state *s, int flush));
+-local block_state deflate_slow OF((deflate_state *s, int flush));
+-local void lm_init OF((deflate_state *s));
+-local void putShortMSB OF((deflate_state *s, uInt b));
+-local void flush_pending OF((z_streamp strm));
+-local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size));
+-local uInt longest_match OF((deflate_state *s, IPos cur_match));
+-
+-#ifdef DEBUG_ZLIB
+-local void check_match OF((deflate_state *s, IPos start, IPos match,
+- int length));
+-#endif
+-
+-/* ===========================================================================
+- * Local data
+- */
+-
+-#define NIL 0
+-/* Tail of hash chains */
+-
+-#ifndef TOO_FAR
+-# define TOO_FAR 4096
+-#endif
+-/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
+-
+-#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
+-/* Minimum amount of lookahead, except at the end of the input file.
+- * See deflate.c for comments about the MIN_MATCH+1.
+- */
+-
+-/* Values for max_lazy_match, good_match and max_chain_length, depending on
+- * the desired pack level (0..9). The values given below have been tuned to
+- * exclude worst case performance for pathological files. Better values may be
+- * found for specific files.
+- */
+-typedef struct config_s {
+- ush good_length; /* reduce lazy search above this match length */
+- ush max_lazy; /* do not perform lazy search above this match length */
+- ush nice_length; /* quit search above this match length */
+- ush max_chain;
+- compress_func func;
+-} config;
+-
+-local const config configuration_table[10] = {
+-/* good lazy nice chain */
+-/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */
+-/* 1 */ {4, 4, 8, 4, deflate_fast}, /* maximum speed, no lazy matches */
+-/* 2 */ {4, 5, 16, 8, deflate_fast},
+-/* 3 */ {4, 6, 32, 32, deflate_fast},
+-
+-/* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */
+-/* 5 */ {8, 16, 32, 32, deflate_slow},
+-/* 6 */ {8, 16, 128, 128, deflate_slow},
+-/* 7 */ {8, 32, 128, 256, deflate_slow},
+-/* 8 */ {32, 128, 258, 1024, deflate_slow},
+-/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* maximum compression */
+-
+-/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
+- * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
+- * meaning.
+- */
+-
+-#define EQUAL 0
+-/* result of memcmp for equal strings */
+-
+-/* ===========================================================================
+- * Update a hash value with the given input byte
+- * IN assertion: all calls to to UPDATE_HASH are made with consecutive
+- * input characters, so that a running hash key can be computed from the
+- * previous key instead of complete recalculation each time.
+- */
+-#define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
+-
+-
+-/* ===========================================================================
+- * Insert string str in the dictionary and set match_head to the previous head
+- * of the hash chain (the most recent string with same hash key). Return
+- * the previous length of the hash chain.
+- * IN assertion: all calls to to INSERT_STRING are made with consecutive
+- * input characters and the first MIN_MATCH bytes of str are valid
+- * (except for the last MIN_MATCH-1 bytes of the input file).
+- */
+-#define INSERT_STRING(s, str, match_head) \
+- (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
+- s->prev[(str) & s->w_mask] = match_head = s->head[s->ins_h], \
+- s->head[s->ins_h] = (Pos)(str))
+-
+-/* ===========================================================================
+- * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
+- * prev[] will be initialized on the fly.
+- */
+-#define CLEAR_HASH(s) \
+- s->head[s->hash_size-1] = NIL; \
+- memset((charf *)s->head, 0, (unsigned)(s->hash_size-1)*sizeof(*s->head));
+-
+-/* ========================================================================= */
+-int zlib_deflateInit_(strm, level, version, stream_size)
+- z_streamp strm;
+- int level;
+- const char *version;
+- int stream_size;
+-{
+- return zlib_deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS,
+- DEF_MEM_LEVEL,
+- Z_DEFAULT_STRATEGY, version, stream_size);
+- /* To do: ignore strm->next_in if we use it as window */
+-}
+-
+-/* ========================================================================= */
+-int zlib_deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
+- version, stream_size)
+- z_streamp strm;
+- int level;
+- int method;
+- int windowBits;
+- int memLevel;
+- int strategy;
+- const char *version;
+- int stream_size;
+-{
+- deflate_state *s;
+- int noheader = 0;
+- static char* my_version = ZLIB_VERSION;
+- deflate_workspace *mem;
+-
+- ushf *overlay;
+- /* We overlay pending_buf and d_buf+l_buf. This works since the average
+- * output size for (length,distance) codes is <= 24 bits.
+- */
+-
+- if (version == Z_NULL || version[0] != my_version[0] ||
+- stream_size != sizeof(z_stream)) {
+- return Z_VERSION_ERROR;
+- }
+- if (strm == Z_NULL) return Z_STREAM_ERROR;
+-
+- strm->msg = Z_NULL;
+-
+- if (level == Z_DEFAULT_COMPRESSION) level = 6;
+-
+- mem = (deflate_workspace *) strm->workspace;
+-
+- if (windowBits < 0) { /* undocumented feature: suppress zlib header */
+- noheader = 1;
+- windowBits = -windowBits;
+- }
+- if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
+- windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
+- strategy < 0 || strategy > Z_HUFFMAN_ONLY) {
+- return Z_STREAM_ERROR;
+- }
+- s = (deflate_state *) &(mem->deflate_memory);
+- strm->state = (struct internal_state FAR *)s;
+- s->strm = strm;
+-
+- s->noheader = noheader;
+- s->w_bits = windowBits;
+- s->w_size = 1 << s->w_bits;
+- s->w_mask = s->w_size - 1;
+-
+- s->hash_bits = memLevel + 7;
+- s->hash_size = 1 << s->hash_bits;
+- s->hash_mask = s->hash_size - 1;
+- s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
+-
+- s->window = (Bytef *) mem->window_memory;
+- s->prev = (Posf *) mem->prev_memory;
+- s->head = (Posf *) mem->head_memory;
+-
+- s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
+-
+- overlay = (ushf *) mem->overlay_memory;
+- s->pending_buf = (uchf *) overlay;
+- s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
+-
+- s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
+- s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
+-
+- s->level = level;
+- s->strategy = strategy;
+- s->method = (Byte)method;
+-
+- return zlib_deflateReset(strm);
+-}
+-
+-/* ========================================================================= */
+-int zlib_deflateSetDictionary (strm, dictionary, dictLength)
+- z_streamp strm;
+- const Bytef *dictionary;
+- uInt dictLength;
+-{
+- deflate_state *s;
+- uInt length = dictLength;
+- uInt n;
+- IPos hash_head = 0;
+-
+- if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL)
+- return Z_STREAM_ERROR;
+-
+- s = (deflate_state *) strm->state;
+- if (s->status != INIT_STATE) return Z_STREAM_ERROR;
+-
+- strm->adler = zlib_adler32(strm->adler, dictionary, dictLength);
+-
+- if (length < MIN_MATCH) return Z_OK;
+- if (length > MAX_DIST(s)) {
+- length = MAX_DIST(s);
+-#ifndef USE_DICT_HEAD
+- dictionary += dictLength - length; /* use the tail of the dictionary */
+-#endif
+- }
+- memcpy((charf *)s->window, dictionary, length);
+- s->strstart = length;
+- s->block_start = (long)length;
+-
+- /* Insert all strings in the hash table (except for the last two bytes).
+- * s->lookahead stays null, so s->ins_h will be recomputed at the next
+- * call of fill_window.
+- */
+- s->ins_h = s->window[0];
+- UPDATE_HASH(s, s->ins_h, s->window[1]);
+- for (n = 0; n <= length - MIN_MATCH; n++) {
+- INSERT_STRING(s, n, hash_head);
+- }
+- if (hash_head) hash_head = 0; /* to make compiler happy */
+- return Z_OK;
+-}
+-
+-/* ========================================================================= */
+-int zlib_deflateReset (strm)
+- z_streamp strm;
+-{
+- deflate_state *s;
+-
+- if (strm == Z_NULL || strm->state == Z_NULL)
+- return Z_STREAM_ERROR;
+-
+- strm->total_in = strm->total_out = 0;
+- strm->msg = Z_NULL;
+- strm->data_type = Z_UNKNOWN;
+-
+- s = (deflate_state *)strm->state;
+- s->pending = 0;
+- s->pending_out = s->pending_buf;
+-
+- if (s->noheader < 0) {
+- s->noheader = 0; /* was set to -1 by deflate(..., Z_FINISH); */
+- }
+- s->status = s->noheader ? BUSY_STATE : INIT_STATE;
+- strm->adler = 1;
+- s->last_flush = Z_NO_FLUSH;
+-
+- zlib_tr_init(s);
+- lm_init(s);
+-
+- return Z_OK;
+-}
+-
+-/* ========================================================================= */
+-int zlib_deflateParams(strm, level, strategy)
+- z_streamp strm;
+- int level;
+- int strategy;
+-{
+- deflate_state *s;
+- compress_func func;
+- int err = Z_OK;
+-
+- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+- s = (deflate_state *) strm->state;
+-
+- if (level == Z_DEFAULT_COMPRESSION) {
+- level = 6;
+- }
+- if (level < 0 || level > 9 || strategy < 0 || strategy > Z_HUFFMAN_ONLY) {
+- return Z_STREAM_ERROR;
+- }
+- func = configuration_table[s->level].func;
+-
+- if (func != configuration_table[level].func && strm->total_in != 0) {
+- /* Flush the last buffer: */
+- err = zlib_deflate(strm, Z_PARTIAL_FLUSH);
+- }
+- if (s->level != level) {
+- s->level = level;
+- s->max_lazy_match = configuration_table[level].max_lazy;
+- s->good_match = configuration_table[level].good_length;
+- s->nice_match = configuration_table[level].nice_length;
+- s->max_chain_length = configuration_table[level].max_chain;
+- }
+- s->strategy = strategy;
+- return err;
+-}
+-
+-/* =========================================================================
+- * Put a short in the pending buffer. The 16-bit value is put in MSB order.
+- * IN assertion: the stream state is correct and there is enough room in
+- * pending_buf.
+- */
+-local void putShortMSB (s, b)
+- deflate_state *s;
+- uInt b;
+-{
+- put_byte(s, (Byte)(b >> 8));
+- put_byte(s, (Byte)(b & 0xff));
+-}
+-
+-/* =========================================================================
+- * Flush as much pending output as possible. All deflate() output goes
+- * through this function so some applications may wish to modify it
+- * to avoid allocating a large strm->next_out buffer and copying into it.
+- * (See also read_buf()).
+- */
+-local void flush_pending(strm)
+- z_streamp strm;
+-{
+- deflate_state *s = (deflate_state *) strm->state;
+- unsigned len = s->pending;
+-
+- if (len > strm->avail_out) len = strm->avail_out;
+- if (len == 0) return;
+-
+- if (strm->next_out != Z_NULL) {
+- memcpy(strm->next_out, s->pending_out, len);
+- strm->next_out += len;
+- }
+- s->pending_out += len;
+- strm->total_out += len;
+- strm->avail_out -= len;
+- s->pending -= len;
+- if (s->pending == 0) {
+- s->pending_out = s->pending_buf;
+- }
+-}
+-
+-/* ========================================================================= */
+-int zlib_deflate (strm, flush)
+- z_streamp strm;
+- int flush;
+-{
+- int old_flush; /* value of flush param for previous deflate call */
+- deflate_state *s;
+-
+- if (strm == Z_NULL || strm->state == Z_NULL ||
+- flush > Z_FINISH || flush < 0) {
+- return Z_STREAM_ERROR;
+- }
+- s = (deflate_state *) strm->state;
+-
+- if ((strm->next_in == Z_NULL && strm->avail_in != 0) ||
+- (s->status == FINISH_STATE && flush != Z_FINISH)) {
+- return Z_STREAM_ERROR;
+- }
+- if (strm->avail_out == 0) return Z_BUF_ERROR;
+-
+- s->strm = strm; /* just in case */
+- old_flush = s->last_flush;
+- s->last_flush = flush;
+-
+- /* Write the zlib header */
+- if (s->status == INIT_STATE) {
+-
+- uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
+- uInt level_flags = (s->level-1) >> 1;
+-
+- if (level_flags > 3) level_flags = 3;
+- header |= (level_flags << 6);
+- if (s->strstart != 0) header |= PRESET_DICT;
+- header += 31 - (header % 31);
+-
+- s->status = BUSY_STATE;
+- putShortMSB(s, header);
+-
+- /* Save the adler32 of the preset dictionary: */
+- if (s->strstart != 0) {
+- putShortMSB(s, (uInt)(strm->adler >> 16));
+- putShortMSB(s, (uInt)(strm->adler & 0xffff));
+- }
+- strm->adler = 1L;
+- }
+-
+- /* Flush as much pending output as possible */
+- if (s->pending != 0) {
+- flush_pending(strm);
+- if (strm->avail_out == 0) {
+- /* Since avail_out is 0, deflate will be called again with
+- * more output space, but possibly with both pending and
+- * avail_in equal to zero. There won't be anything to do,
+- * but this is not an error situation so make sure we
+- * return OK instead of BUF_ERROR at next call of deflate:
+- */
+- s->last_flush = -1;
+- return Z_OK;
+- }
+-
+- /* Make sure there is something to do and avoid duplicate consecutive
+- * flushes. For repeated and useless calls with Z_FINISH, we keep
+- * returning Z_STREAM_END instead of Z_BUFF_ERROR.
+- */
+- } else if (strm->avail_in == 0 && flush <= old_flush &&
+- flush != Z_FINISH) {
+- return Z_BUF_ERROR;
+- }
+-
+- /* User must not provide more input after the first FINISH: */
+- if (s->status == FINISH_STATE && strm->avail_in != 0) {
+- return Z_BUF_ERROR;
+- }
+-
+- /* Start a new block or continue the current one.
+- */
+- if (strm->avail_in != 0 || s->lookahead != 0 ||
+- (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
+- block_state bstate;
+-
+- bstate = (*(configuration_table[s->level].func))(s, flush);
+-
+- if (bstate == finish_started || bstate == finish_done) {
+- s->status = FINISH_STATE;
+- }
+- if (bstate == need_more || bstate == finish_started) {
+- if (strm->avail_out == 0) {
+- s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
+- }
+- return Z_OK;
+- /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
+- * of deflate should use the same flush parameter to make sure
+- * that the flush is complete. So we don't have to output an
+- * empty block here, this will be done at next call. This also
+- * ensures that for a very small output buffer, we emit at most
+- * one empty block.
+- */
+- }
+- if (bstate == block_done) {
+- if (flush == Z_PARTIAL_FLUSH) {
+- zlib_tr_align(s);
+- } else if (flush == Z_PACKET_FLUSH) {
+- /* Output just the 3-bit `stored' block type value,
+- but not a zero length. */
+- zlib_tr_stored_type_only(s);
+- } else { /* FULL_FLUSH or SYNC_FLUSH */
+- zlib_tr_stored_block(s, (char*)0, 0L, 0);
+- /* For a full flush, this empty block will be recognized
+- * as a special marker by inflate_sync().
+- */
+- if (flush == Z_FULL_FLUSH) {
+- CLEAR_HASH(s); /* forget history */
+- }
+- }
+- flush_pending(strm);
+- if (strm->avail_out == 0) {
+- s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
+- return Z_OK;
+- }
+- }
+- }
+- Assert(strm->avail_out > 0, "bug2");
+-
+- if (flush != Z_FINISH) return Z_OK;
+- if (s->noheader) return Z_STREAM_END;
+-
+- /* Write the zlib trailer (adler32) */
+- putShortMSB(s, (uInt)(strm->adler >> 16));
+- putShortMSB(s, (uInt)(strm->adler & 0xffff));
+- flush_pending(strm);
+- /* If avail_out is zero, the application will call deflate again
+- * to flush the rest.
+- */
+- s->noheader = -1; /* write the trailer only once! */
+- return s->pending != 0 ? Z_OK : Z_STREAM_END;
+-}
+-
+-/* ========================================================================= */
+-int zlib_deflateEnd (strm)
+- z_streamp strm;
+-{
+- int status;
+- deflate_state *s;
+-
+- if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+- s = (deflate_state *) strm->state;
+-
+- status = s->status;
+- if (status != INIT_STATE && status != BUSY_STATE &&
+- status != FINISH_STATE) {
+- return Z_STREAM_ERROR;
+- }
+-
+- strm->state = Z_NULL;
+-
+- return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
+-}
+-
+-/* =========================================================================
+- * Copy the source state to the destination state.
+- */
+-int zlib_deflateCopy (dest, source)
+- z_streamp dest;
+- z_streamp source;
+-{
+-#ifdef MAXSEG_64K
+- return Z_STREAM_ERROR;
+-#else
+- deflate_state *ds;
+- deflate_state *ss;
+- ushf *overlay;
+- deflate_workspace *mem;
+-
+-
+- if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
+- return Z_STREAM_ERROR;
+- }
+-
+- ss = (deflate_state *) source->state;
+-
+- *dest = *source;
+-
+- mem = (deflate_workspace *) dest->workspace;
+-
+- ds = &(mem->deflate_memory);
+-
+- dest->state = (struct internal_state FAR *) ds;
+- *ds = *ss;
+- ds->strm = dest;
+-
+- ds->window = (Bytef *) mem->window_memory;
+- ds->prev = (Posf *) mem->prev_memory;
+- ds->head = (Posf *) mem->head_memory;
+- overlay = (ushf *) mem->overlay_memory;
+- ds->pending_buf = (uchf *) overlay;
+-
+- memcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
+- memcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos));
+- memcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos));
+- memcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
+-
+- ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
+- ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
+- ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
+-
+- ds->l_desc.dyn_tree = ds->dyn_ltree;
+- ds->d_desc.dyn_tree = ds->dyn_dtree;
+- ds->bl_desc.dyn_tree = ds->bl_tree;
+-
+- return Z_OK;
+-#endif
+-}
+-
+-/* ===========================================================================
+- * Read a new buffer from the current input stream, update the adler32
+- * and total number of bytes read. All deflate() input goes through
+- * this function so some applications may wish to modify it to avoid
+- * allocating a large strm->next_in buffer and copying from it.
+- * (See also flush_pending()).
+- */
+-local int read_buf(strm, buf, size)
+- z_streamp strm;
+- Bytef *buf;
+- unsigned size;
+-{
+- unsigned len = strm->avail_in;
+-
+- if (len > size) len = size;
+- if (len == 0) return 0;
+-
+- strm->avail_in -= len;
+-
+- if (!((deflate_state *)(strm->state))->noheader) {
+- strm->adler = zlib_adler32(strm->adler, strm->next_in, len);
+- }
+- memcpy(buf, strm->next_in, len);
+- strm->next_in += len;
+- strm->total_in += len;
+-
+- return (int)len;
+-}
+-
+-/* ===========================================================================
+- * Initialize the "longest match" routines for a new zlib stream
+- */
+-local void lm_init (s)
+- deflate_state *s;
+-{
+- s->window_size = (ulg)2L*s->w_size;
+-
+- CLEAR_HASH(s);
+-
+- /* Set the default configuration parameters:
+- */
+- s->max_lazy_match = configuration_table[s->level].max_lazy;
+- s->good_match = configuration_table[s->level].good_length;
+- s->nice_match = configuration_table[s->level].nice_length;
+- s->max_chain_length = configuration_table[s->level].max_chain;
+-
+- s->strstart = 0;
+- s->block_start = 0L;
+- s->lookahead = 0;
+- s->match_length = s->prev_length = MIN_MATCH-1;
+- s->match_available = 0;
+- s->ins_h = 0;
+-}
+-
+-/* ===========================================================================
+- * Set match_start to the longest match starting at the given string and
+- * return its length. Matches shorter or equal to prev_length are discarded,
+- * in which case the result is equal to prev_length and match_start is
+- * garbage.
+- * IN assertions: cur_match is the head of the hash chain for the current
+- * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
+- * OUT assertion: the match length is not greater than s->lookahead.
+- */
+-/* For 80x86 and 680x0, an optimized version will be provided in match.asm or
+- * match.S. The code will be functionally equivalent.
+- */
+-local uInt longest_match(s, cur_match)
+- deflate_state *s;
+- IPos cur_match; /* current match */
+-{
+- unsigned chain_length = s->max_chain_length;/* max hash chain length */
+- register Bytef *scan = s->window + s->strstart; /* current string */
+- register Bytef *match; /* matched string */
+- register int len; /* length of current match */
+- int best_len = s->prev_length; /* best match length so far */
+- int nice_match = s->nice_match; /* stop if match long enough */
+- IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
+- s->strstart - (IPos)MAX_DIST(s) : NIL;
+- /* Stop when cur_match becomes <= limit. To simplify the code,
+- * we prevent matches with the string of window index 0.
+- */
+- Posf *prev = s->prev;
+- uInt wmask = s->w_mask;
+-
+-#ifdef UNALIGNED_OK
+- /* Compare two bytes at a time. Note: this is not always beneficial.
+- * Try with and without -DUNALIGNED_OK to check.
+- */
+- register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
+- register ush scan_start = *(ushf*)scan;
+- register ush scan_end = *(ushf*)(scan+best_len-1);
+-#else
+- register Bytef *strend = s->window + s->strstart + MAX_MATCH;
+- register Byte scan_end1 = scan[best_len-1];
+- register Byte scan_end = scan[best_len];
+-#endif
+-
+- /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
+- * It is easy to get rid of this optimization if necessary.
+- */
+- Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
+-
+- /* Do not waste too much time if we already have a good match: */
+- if (s->prev_length >= s->good_match) {
+- chain_length >>= 2;
+- }
+- /* Do not look for matches beyond the end of the input. This is necessary
+- * to make deflate deterministic.
+- */
+- if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+-
+- Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
+-
+- do {
+- Assert(cur_match < s->strstart, "no future");
+- match = s->window + cur_match;
+-
+- /* Skip to next match if the match length cannot increase
+- * or if the match length is less than 2:
+- */
+-#if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
+- /* This code assumes sizeof(unsigned short) == 2. Do not use
+- * UNALIGNED_OK if your compiler uses a different size.
+- */
+- if (*(ushf*)(match+best_len-1) != scan_end ||
+- *(ushf*)match != scan_start) continue;
+-
+- /* It is not necessary to compare scan[2] and match[2] since they are
+- * always equal when the other bytes match, given that the hash keys
+- * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
+- * strstart+3, +5, ... up to strstart+257. We check for insufficient
+- * lookahead only every 4th comparison; the 128th check will be made
+- * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
+- * necessary to put more guard bytes at the end of the window, or
+- * to check more often for insufficient lookahead.
+- */
+- Assert(scan[2] == match[2], "scan[2]?");
+- scan++, match++;
+- do {
+- } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+- *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+- *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+- *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+- scan < strend);
+- /* The funny "do {}" generates better code on most compilers */
+-
+- /* Here, scan <= window+strstart+257 */
+- Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+- if (*scan == *match) scan++;
+-
+- len = (MAX_MATCH - 1) - (int)(strend-scan);
+- scan = strend - (MAX_MATCH-1);
+-
+-#else /* UNALIGNED_OK */
+-
+- if (match[best_len] != scan_end ||
+- match[best_len-1] != scan_end1 ||
+- *match != *scan ||
+- *++match != scan[1]) continue;
+-
+- /* The check at best_len-1 can be removed because it will be made
+- * again later. (This heuristic is not always a win.)
+- * It is not necessary to compare scan[2] and match[2] since they
+- * are always equal when the other bytes match, given that
+- * the hash keys are equal and that HASH_BITS >= 8.
+- */
+- scan += 2, match++;
+- Assert(*scan == *match, "match[2]?");
+-
+- /* We check for insufficient lookahead only every 8th comparison;
+- * the 256th check will be made at strstart+258.
+- */
+- do {
+- } while (*++scan == *++match && *++scan == *++match &&
+- *++scan == *++match && *++scan == *++match &&
+- *++scan == *++match && *++scan == *++match &&
+- *++scan == *++match && *++scan == *++match &&
+- scan < strend);
+-
+- Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+-
+- len = MAX_MATCH - (int)(strend - scan);
+- scan = strend - MAX_MATCH;
+-
+-#endif /* UNALIGNED_OK */
+-
+- if (len > best_len) {
+- s->match_start = cur_match;
+- best_len = len;
+- if (len >= nice_match) break;
+-#ifdef UNALIGNED_OK
+- scan_end = *(ushf*)(scan+best_len-1);
+-#else
+- scan_end1 = scan[best_len-1];
+- scan_end = scan[best_len];
+-#endif
+- }
+- } while ((cur_match = prev[cur_match & wmask]) > limit
+- && --chain_length != 0);
+-
+- if ((uInt)best_len <= s->lookahead) return best_len;
+- return s->lookahead;
+-}
+-
+-#ifdef DEBUG_ZLIB
+-/* ===========================================================================
+- * Check that the match at match_start is indeed a match.
+- */
+-local void check_match(s, start, match, length)
+- deflate_state *s;
+- IPos start, match;
+- int length;
+-{
+- /* check that the match is indeed a match */
+- if (memcmp((charf *)s->window + match,
+- (charf *)s->window + start, length) != EQUAL) {
+- fprintf(stderr, " start %u, match %u, length %d\n",
+- start, match, length);
+- do {
+- fprintf(stderr, "%c%c", s->window[match++], s->window[start++]);
+- } while (--length != 0);
+- z_error("invalid match");
+- }
+- if (z_verbose > 1) {
+- fprintf(stderr,"\\[%d,%d]", start-match, length);
+- do { putc(s->window[start++], stderr); } while (--length != 0);
+- }
+-}
+-#else
+-# define check_match(s, start, match, length)
+-#endif
+-
+-/* ===========================================================================
+- * Fill the window when the lookahead becomes insufficient.
+- * Updates strstart and lookahead.
+- *
+- * IN assertion: lookahead < MIN_LOOKAHEAD
+- * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
+- * At least one byte has been read, or avail_in == 0; reads are
+- * performed for at least two bytes (required for the zip translate_eol
+- * option -- not supported here).
+- */
+-local void fill_window(s)
+- deflate_state *s;
+-{
+- register unsigned n, m;
+- register Posf *p;
+- unsigned more; /* Amount of free space at the end of the window. */
+- uInt wsize = s->w_size;
+-
+- do {
+- more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
+-
+- /* Deal with !@#$% 64K limit: */
+- if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
+- more = wsize;
+-
+- } else if (more == (unsigned)(-1)) {
+- /* Very unlikely, but possible on 16 bit machine if strstart == 0
+- * and lookahead == 1 (input done one byte at time)
+- */
+- more--;
+-
+- /* If the window is almost full and there is insufficient lookahead,
+- * move the upper half to the lower one to make room in the upper half.
+- */
+- } else if (s->strstart >= wsize+MAX_DIST(s)) {
+-
+- memcpy((charf *)s->window, (charf *)s->window+wsize,
+- (unsigned)wsize);
+- s->match_start -= wsize;
+- s->strstart -= wsize; /* we now have strstart >= MAX_DIST */
+- s->block_start -= (long) wsize;
+-
+- /* Slide the hash table (could be avoided with 32 bit values
+- at the expense of memory usage). We slide even when level == 0
+- to keep the hash table consistent if we switch back to level > 0
+- later. (Using level 0 permanently is not an optimal usage of
+- zlib, so we don't care about this pathological case.)
+- */
+- n = s->hash_size;
+- p = &s->head[n];
+- do {
+- m = *--p;
+- *p = (Pos)(m >= wsize ? m-wsize : NIL);
+- } while (--n);
+-
+- n = wsize;
+- p = &s->prev[n];
+- do {
+- m = *--p;
+- *p = (Pos)(m >= wsize ? m-wsize : NIL);
+- /* If n is not on any hash chain, prev[n] is garbage but
+- * its value will never be used.
+- */
+- } while (--n);
+- more += wsize;
+- }
+- if (s->strm->avail_in == 0) return;
+-
+- /* If there was no sliding:
+- * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
+- * more == window_size - lookahead - strstart
+- * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
+- * => more >= window_size - 2*WSIZE + 2
+- * In the BIG_MEM or MMAP case (not yet supported),
+- * window_size == input_size + MIN_LOOKAHEAD &&
+- * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
+- * Otherwise, window_size == 2*WSIZE so more >= 2.
+- * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
+- */
+- Assert(more >= 2, "more < 2");
+-
+- n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more);
+- s->lookahead += n;
+-
+- /* Initialize the hash value now that we have some input: */
+- if (s->lookahead >= MIN_MATCH) {
+- s->ins_h = s->window[s->strstart];
+- UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
+-#if MIN_MATCH != 3
+- Call UPDATE_HASH() MIN_MATCH-3 more times
+-#endif
+- }
+- /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
+- * but this is not important since only literal bytes will be emitted.
+- */
+-
+- } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
+-}
+-
+-/* ===========================================================================
+- * Flush the current block, with given end-of-file flag.
+- * IN assertion: strstart is set to the end of the current match.
+- */
+-#define FLUSH_BLOCK_ONLY(s, eof) { \
+- zlib_tr_flush_block(s, (s->block_start >= 0L ? \
+- (charf *)&s->window[(unsigned)s->block_start] : \
+- (charf *)Z_NULL), \
+- (ulg)((long)s->strstart - s->block_start), \
+- (eof)); \
+- s->block_start = s->strstart; \
+- flush_pending(s->strm); \
+- Tracev((stderr,"[FLUSH]")); \
+-}
+-
+-/* Same but force premature exit if necessary. */
+-#define FLUSH_BLOCK(s, eof) { \
+- FLUSH_BLOCK_ONLY(s, eof); \
+- if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \
+-}
+-
+-/* ===========================================================================
+- * Copy without compression as much as possible from the input stream, return
+- * the current block state.
+- * This function does not insert new strings in the dictionary since
+- * uncompressible data is probably not useful. This function is used
+- * only for the level=0 compression option.
+- * NOTE: this function should be optimized to avoid extra copying from
+- * window to pending_buf.
+- */
+-local block_state deflate_stored(s, flush)
+- deflate_state *s;
+- int flush;
+-{
+- /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
+- * to pending_buf_size, and each stored block has a 5 byte header:
+- */
+- ulg max_block_size = 0xffff;
+- ulg max_start;
+-
+- if (max_block_size > s->pending_buf_size - 5) {
+- max_block_size = s->pending_buf_size - 5;
+- }
+-
+- /* Copy as much as possible from input to output: */
+- for (;;) {
+- /* Fill the window as much as possible: */
+- if (s->lookahead <= 1) {
+-
+- Assert(s->strstart < s->w_size+MAX_DIST(s) ||
+- s->block_start >= (long)s->w_size, "slide too late");
+-
+- fill_window(s);
+- if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
+-
+- if (s->lookahead == 0) break; /* flush the current block */
+- }
+- Assert(s->block_start >= 0L, "block gone");
+-
+- s->strstart += s->lookahead;
+- s->lookahead = 0;
+-
+- /* Emit a stored block if pending_buf will be full: */
+- max_start = s->block_start + max_block_size;
+- if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
+- /* strstart == 0 is possible when wraparound on 16-bit machine */
+- s->lookahead = (uInt)(s->strstart - max_start);
+- s->strstart = (uInt)max_start;
+- FLUSH_BLOCK(s, 0);
+- }
+- /* Flush if we may have to slide, otherwise block_start may become
+- * negative and the data will be gone:
+- */
+- if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
+- FLUSH_BLOCK(s, 0);
+- }
+- }
+- FLUSH_BLOCK(s, flush == Z_FINISH);
+- return flush == Z_FINISH ? finish_done : block_done;
+-}
+-
+-/* ===========================================================================
+- * Compress as much as possible from the input stream, return the current
+- * block state.
+- * This function does not perform lazy evaluation of matches and inserts
+- * new strings in the dictionary only for unmatched strings or for short
+- * matches. It is used only for the fast compression options.
+- */
+-local block_state deflate_fast(s, flush)
+- deflate_state *s;
+- int flush;
+-{
+- IPos hash_head = NIL; /* head of the hash chain */
+- int bflush; /* set if current block must be flushed */
+-
+- for (;;) {
+- /* Make sure that we always have enough lookahead, except
+- * at the end of the input file. We need MAX_MATCH bytes
+- * for the next match, plus MIN_MATCH bytes to insert the
+- * string following the next match.
+- */
+- if (s->lookahead < MIN_LOOKAHEAD) {
+- fill_window(s);
+- if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
+- return need_more;
+- }
+- if (s->lookahead == 0) break; /* flush the current block */
+- }
+-
+- /* Insert the string window[strstart .. strstart+2] in the
+- * dictionary, and set hash_head to the head of the hash chain:
+- */
+- if (s->lookahead >= MIN_MATCH) {
+- INSERT_STRING(s, s->strstart, hash_head);
+- }
+-
+- /* Find the longest match, discarding those <= prev_length.
+- * At this point we have always match_length < MIN_MATCH
+- */
+- if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
+- /* To simplify the code, we prevent matches with the string
+- * of window index 0 (in particular we have to avoid a match
+- * of the string with itself at the start of the input file).
+- */
+- if (s->strategy != Z_HUFFMAN_ONLY) {
+- s->match_length = longest_match (s, hash_head);
+- }
+- /* longest_match() sets match_start */
+- }
+- if (s->match_length >= MIN_MATCH) {
+- check_match(s, s->strstart, s->match_start, s->match_length);
+-
+- bflush = zlib_tr_tally(s, s->strstart - s->match_start,
+- s->match_length - MIN_MATCH);
+-
+- s->lookahead -= s->match_length;
+-
+- /* Insert new strings in the hash table only if the match length
+- * is not too large. This saves time but degrades compression.
+- */
+- if (s->match_length <= s->max_insert_length &&
+- s->lookahead >= MIN_MATCH) {
+- s->match_length--; /* string at strstart already in hash table */
+- do {
+- s->strstart++;
+- INSERT_STRING(s, s->strstart, hash_head);
+- /* strstart never exceeds WSIZE-MAX_MATCH, so there are
+- * always MIN_MATCH bytes ahead.
+- */
+- } while (--s->match_length != 0);
+- s->strstart++;
+- } else {
+- s->strstart += s->match_length;
+- s->match_length = 0;
+- s->ins_h = s->window[s->strstart];
+- UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
+-#if MIN_MATCH != 3
+- Call UPDATE_HASH() MIN_MATCH-3 more times
+-#endif
+- /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
+- * matter since it will be recomputed at next deflate call.
+- */
+- }
+- } else {
+- /* No match, output a literal byte */
+- Tracevv((stderr,"%c", s->window[s->strstart]));
+- bflush = zlib_tr_tally (s, 0, s->window[s->strstart]);
+- s->lookahead--;
+- s->strstart++;
+- }
+- if (bflush) FLUSH_BLOCK(s, 0);
+- }
+- FLUSH_BLOCK(s, flush == Z_FINISH);
+- return flush == Z_FINISH ? finish_done : block_done;
+-}
+-
+-/* ===========================================================================
+- * Same as above, but achieves better compression. We use a lazy
+- * evaluation for matches: a match is finally adopted only if there is
+- * no better match at the next window position.
+- */
+-local block_state deflate_slow(s, flush)
+- deflate_state *s;
+- int flush;
+-{
+- IPos hash_head = NIL; /* head of hash chain */
+- int bflush; /* set if current block must be flushed */
+-
+- /* Process the input block. */
+- for (;;) {
+- /* Make sure that we always have enough lookahead, except
+- * at the end of the input file. We need MAX_MATCH bytes
+- * for the next match, plus MIN_MATCH bytes to insert the
+- * string following the next match.
+- */
+- if (s->lookahead < MIN_LOOKAHEAD) {
+- fill_window(s);
+- if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
+- return need_more;
+- }
+- if (s->lookahead == 0) break; /* flush the current block */
+- }
+-
+- /* Insert the string window[strstart .. strstart+2] in the
+- * dictionary, and set hash_head to the head of the hash chain:
+- */
+- if (s->lookahead >= MIN_MATCH) {
+- INSERT_STRING(s, s->strstart, hash_head);
+- }
+-
+- /* Find the longest match, discarding those <= prev_length.
+- */
+- s->prev_length = s->match_length, s->prev_match = s->match_start;
+- s->match_length = MIN_MATCH-1;
+-
+- if (hash_head != NIL && s->prev_length < s->max_lazy_match &&
+- s->strstart - hash_head <= MAX_DIST(s)) {
+- /* To simplify the code, we prevent matches with the string
+- * of window index 0 (in particular we have to avoid a match
+- * of the string with itself at the start of the input file).
+- */
+- if (s->strategy != Z_HUFFMAN_ONLY) {
+- s->match_length = longest_match (s, hash_head);
+- }
+- /* longest_match() sets match_start */
+-
+- if (s->match_length <= 5 && (s->strategy == Z_FILTERED ||
+- (s->match_length == MIN_MATCH &&
+- s->strstart - s->match_start > TOO_FAR))) {
+-
+- /* If prev_match is also MIN_MATCH, match_start is garbage
+- * but we will ignore the current match anyway.
+- */
+- s->match_length = MIN_MATCH-1;
+- }
+- }
+- /* If there was a match at the previous step and the current
+- * match is not better, output the previous match:
+- */
+- if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {
+- uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
+- /* Do not insert strings in hash table beyond this. */
+-
+- check_match(s, s->strstart-1, s->prev_match, s->prev_length);
+-
+- bflush = zlib_tr_tally(s, s->strstart -1 - s->prev_match,
+- s->prev_length - MIN_MATCH);
+-
+- /* Insert in hash table all strings up to the end of the match.
+- * strstart-1 and strstart are already inserted. If there is not
+- * enough lookahead, the last two strings are not inserted in
+- * the hash table.
+- */
+- s->lookahead -= s->prev_length-1;
+- s->prev_length -= 2;
+- do {
+- if (++s->strstart <= max_insert) {
+- INSERT_STRING(s, s->strstart, hash_head);
+- }
+- } while (--s->prev_length != 0);
+- s->match_available = 0;
+- s->match_length = MIN_MATCH-1;
+- s->strstart++;
+-
+- if (bflush) FLUSH_BLOCK(s, 0);
+-
+- } else if (s->match_available) {
+- /* If there was no match at the previous position, output a
+- * single literal. If there was a match but the current match
+- * is longer, truncate the previous match to a single literal.
+- */
+- Tracevv((stderr,"%c", s->window[s->strstart-1]));
+- if (zlib_tr_tally (s, 0, s->window[s->strstart-1])) {
+- FLUSH_BLOCK_ONLY(s, 0);
+- }
+- s->strstart++;
+- s->lookahead--;
+- if (s->strm->avail_out == 0) return need_more;
+- } else {
+- /* There is no previous match to compare with, wait for
+- * the next step to decide.
+- */
+- s->match_available = 1;
+- s->strstart++;
+- s->lookahead--;
+- }
+- }
+- Assert (flush != Z_NO_FLUSH, "no flush?");
+- if (s->match_available) {
+- Tracevv((stderr,"%c", s->window[s->strstart-1]));
+- zlib_tr_tally (s, 0, s->window[s->strstart-1]);
+- s->match_available = 0;
+- }
+- FLUSH_BLOCK(s, flush == Z_FINISH);
+- return flush == Z_FINISH ? finish_done : block_done;
+-}
+-
+-ZEXTERN int ZEXPORT zlib_deflate_workspacesize ()
+-{
+- return sizeof(deflate_workspace);
+-}
+diff -Nur linux/fs/jffs2/compressors/zlib_deflate/deflate_syms.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_deflate/deflate_syms.c
+--- linux/fs/jffs2/compressors/zlib_deflate/deflate_syms.c 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_deflate/deflate_syms.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,21 +0,0 @@
+-/*
+- * linux/lib/zlib_deflate/deflate_syms.c
+- *
+- * Exported symbols for the deflate functionality.
+- *
+- */
+-
+-#include <linux/module.h>
+-#include <linux/init.h>
+-
+-#include <linux/zlib.h>
+-
+-EXPORT_SYMBOL(zlib_deflate_workspacesize);
+-EXPORT_SYMBOL(zlib_deflate);
+-EXPORT_SYMBOL(zlib_deflateInit_);
+-EXPORT_SYMBOL(zlib_deflateInit2_);
+-EXPORT_SYMBOL(zlib_deflateEnd);
+-EXPORT_SYMBOL(zlib_deflateReset);
+-EXPORT_SYMBOL(zlib_deflateCopy);
+-EXPORT_SYMBOL(zlib_deflateParams);
+-MODULE_LICENSE("GPL");
+diff -Nur linux/fs/jffs2/compressors/zlib_deflate/deftree.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_deflate/deftree.c
+--- linux/fs/jffs2/compressors/zlib_deflate/deftree.c 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_deflate/deftree.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,1096 +0,0 @@
+-/* +++ trees.c */
+-/* trees.c -- output deflated data using Huffman coding
+- * Copyright (C) 1995-1996 Jean-loup Gailly
+- * For conditions of distribution and use, see copyright notice in zlib.h
+- */
+-
+-/*
+- * ALGORITHM
+- *
+- * The "deflation" process uses several Huffman trees. The more
+- * common source values are represented by shorter bit sequences.
+- *
+- * Each code tree is stored in a compressed form which is itself
+- * a Huffman encoding of the lengths of all the code strings (in
+- * ascending order by source values). The actual code strings are
+- * reconstructed from the lengths in the inflate process, as described
+- * in the deflate specification.
+- *
+- * REFERENCES
+- *
+- * Deutsch, L.P.,"'Deflate' Compressed Data Format Specification".
+- * Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc
+- *
+- * Storer, James A.
+- * Data Compression: Methods and Theory, pp. 49-50.
+- * Computer Science Press, 1988. ISBN 0-7167-8156-5.
+- *
+- * Sedgewick, R.
+- * Algorithms, p290.
+- * Addison-Wesley, 1983. ISBN 0-201-06672-6.
+- */
+-
+-/* From: trees.c,v 1.11 1996/07/24 13:41:06 me Exp $ */
+-
+-/* #include "deflate.h" */
+-
+-#include <linux/zutil.h>
+-#include "defutil.h"
+-
+-#ifdef DEBUG_ZLIB
+-# include <ctype.h>
+-#endif
+-
+-/* ===========================================================================
+- * Constants
+- */
+-
+-#define MAX_BL_BITS 7
+-/* Bit length codes must not exceed MAX_BL_BITS bits */
+-
+-#define END_BLOCK 256
+-/* end of block literal code */
+-
+-#define REP_3_6 16
+-/* repeat previous bit length 3-6 times (2 bits of repeat count) */
+-
+-#define REPZ_3_10 17
+-/* repeat a zero length 3-10 times (3 bits of repeat count) */
+-
+-#define REPZ_11_138 18
+-/* repeat a zero length 11-138 times (7 bits of repeat count) */
+-
+-local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */
+- = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
+-
+-local const int extra_dbits[D_CODES] /* extra bits for each distance code */
+- = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
+-
+-local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */
+- = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
+-
+-local const uch bl_order[BL_CODES]
+- = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
+-/* The lengths of the bit length codes are sent in order of decreasing
+- * probability, to avoid transmitting the lengths for unused bit length codes.
+- */
+-
+-#define Buf_size (8 * 2*sizeof(char))
+-/* Number of bits used within bi_buf. (bi_buf might be implemented on
+- * more than 16 bits on some systems.)
+- */
+-
+-/* ===========================================================================
+- * Local data. These are initialized only once.
+- */
+-
+-local ct_data static_ltree[L_CODES+2];
+-/* The static literal tree. Since the bit lengths are imposed, there is no
+- * need for the L_CODES extra codes used during heap construction. However
+- * The codes 286 and 287 are needed to build a canonical tree (see zlib_tr_init
+- * below).
+- */
+-
+-local ct_data static_dtree[D_CODES];
+-/* The static distance tree. (Actually a trivial tree since all codes use
+- * 5 bits.)
+- */
+-
+-local uch dist_code[512];
+-/* distance codes. The first 256 values correspond to the distances
+- * 3 .. 258, the last 256 values correspond to the top 8 bits of
+- * the 15 bit distances.
+- */
+-
+-local uch length_code[MAX_MATCH-MIN_MATCH+1];
+-/* length code for each normalized match length (0 == MIN_MATCH) */
+-
+-local int base_length[LENGTH_CODES];
+-/* First normalized length for each code (0 = MIN_MATCH) */
+-
+-local int base_dist[D_CODES];
+-/* First normalized distance for each code (0 = distance of 1) */
+-
+-struct static_tree_desc_s {
+- const ct_data *static_tree; /* static tree or NULL */
+- const intf *extra_bits; /* extra bits for each code or NULL */
+- int extra_base; /* base index for extra_bits */
+- int elems; /* max number of elements in the tree */
+- int max_length; /* max bit length for the codes */
+-};
+-
+-local static_tree_desc static_l_desc =
+-{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
+-
+-local static_tree_desc static_d_desc =
+-{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS};
+-
+-local static_tree_desc static_bl_desc =
+-{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS};
+-
+-/* ===========================================================================
+- * Local (static) routines in this file.
+- */
+-
+-local void tr_static_init OF((void));
+-local void init_block OF((deflate_state *s));
+-local void pqdownheap OF((deflate_state *s, ct_data *tree, int k));
+-local void gen_bitlen OF((deflate_state *s, tree_desc *desc));
+-local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count));
+-local void build_tree OF((deflate_state *s, tree_desc *desc));
+-local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code));
+-local void send_tree OF((deflate_state *s, ct_data *tree, int max_code));
+-local int build_bl_tree OF((deflate_state *s));
+-local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
+- int blcodes));
+-local void compress_block OF((deflate_state *s, ct_data *ltree,
+- ct_data *dtree));
+-local void set_data_type OF((deflate_state *s));
+-local unsigned bi_reverse OF((unsigned value, int length));
+-local void bi_windup OF((deflate_state *s));
+-local void bi_flush OF((deflate_state *s));
+-local void copy_block OF((deflate_state *s, charf *buf, unsigned len,
+- int header));
+-
+-#ifndef DEBUG_ZLIB
+-# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
+- /* Send a code of the given tree. c and tree must not have side effects */
+-
+-#else /* DEBUG_ZLIB */
+-# define send_code(s, c, tree) \
+- { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
+- send_bits(s, tree[c].Code, tree[c].Len); }
+-#endif
+-
+-#define d_code(dist) \
+- ((dist) < 256 ? dist_code[dist] : dist_code[256+((dist)>>7)])
+-/* Mapping from a distance to a distance code. dist is the distance - 1 and
+- * must not have side effects. dist_code[256] and dist_code[257] are never
+- * used.
+- */
+-
+-/* ===========================================================================
+- * Send a value on a given number of bits.
+- * IN assertion: length <= 16 and value fits in length bits.
+- */
+-#ifdef DEBUG_ZLIB
+-local void send_bits OF((deflate_state *s, int value, int length));
+-
+-local void send_bits(s, value, length)
+- deflate_state *s;
+- int value; /* value to send */
+- int length; /* number of bits */
+-{
+- Tracevv((stderr," l %2d v %4x ", length, value));
+- Assert(length > 0 && length <= 15, "invalid length");
+- s->bits_sent += (ulg)length;
+-
+- /* If not enough room in bi_buf, use (valid) bits from bi_buf and
+- * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))
+- * unused bits in value.
+- */
+- if (s->bi_valid > (int)Buf_size - length) {
+- s->bi_buf |= (value << s->bi_valid);
+- put_short(s, s->bi_buf);
+- s->bi_buf = (ush)value >> (Buf_size - s->bi_valid);
+- s->bi_valid += length - Buf_size;
+- } else {
+- s->bi_buf |= value << s->bi_valid;
+- s->bi_valid += length;
+- }
+-}
+-#else /* !DEBUG_ZLIB */
+-
+-#define send_bits(s, value, length) \
+-{ int len = length;\
+- if (s->bi_valid > (int)Buf_size - len) {\
+- int val = value;\
+- s->bi_buf |= (val << s->bi_valid);\
+- put_short(s, s->bi_buf);\
+- s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
+- s->bi_valid += len - Buf_size;\
+- } else {\
+- s->bi_buf |= (value) << s->bi_valid;\
+- s->bi_valid += len;\
+- }\
+-}
+-#endif /* DEBUG_ZLIB */
+-
+-
+-#define MAX(a,b) (a >= b ? a : b)
+-/* the arguments must not have side effects */
+-
+-/* ===========================================================================
+- * Initialize the various 'constant' tables. In a multi-threaded environment,
+- * this function may be called by two threads concurrently, but this is
+- * harmless since both invocations do exactly the same thing.
+- */
+-local void tr_static_init()
+-{
+- static int static_init_done = 0;
+- int n; /* iterates over tree elements */
+- int bits; /* bit counter */
+- int length; /* length value */
+- int code; /* code value */
+- int dist; /* distance index */
+- ush bl_count[MAX_BITS+1];
+- /* number of codes at each bit length for an optimal tree */
+-
+- if (static_init_done) return;
+-
+- /* Initialize the mapping length (0..255) -> length code (0..28) */
+- length = 0;
+- for (code = 0; code < LENGTH_CODES-1; code++) {
+- base_length[code] = length;
+- for (n = 0; n < (1<<extra_lbits[code]); n++) {
+- length_code[length++] = (uch)code;
+- }
+- }
+- Assert (length == 256, "tr_static_init: length != 256");
+- /* Note that the length 255 (match length 258) can be represented
+- * in two different ways: code 284 + 5 bits or code 285, so we
+- * overwrite length_code[255] to use the best encoding:
+- */
+- length_code[length-1] = (uch)code;
+-
+- /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
+- dist = 0;
+- for (code = 0 ; code < 16; code++) {
+- base_dist[code] = dist;
+- for (n = 0; n < (1<<extra_dbits[code]); n++) {
+- dist_code[dist++] = (uch)code;
+- }
+- }
+- Assert (dist == 256, "tr_static_init: dist != 256");
+- dist >>= 7; /* from now on, all distances are divided by 128 */
+- for ( ; code < D_CODES; code++) {
+- base_dist[code] = dist << 7;
+- for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
+- dist_code[256 + dist++] = (uch)code;
+- }
+- }
+- Assert (dist == 256, "tr_static_init: 256+dist != 512");
+-
+- /* Construct the codes of the static literal tree */
+- for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0;
+- n = 0;
+- while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++;
+- while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++;
+- while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++;
+- while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++;
+- /* Codes 286 and 287 do not exist, but we must include them in the
+- * tree construction to get a canonical Huffman tree (longest code
+- * all ones)
+- */
+- gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count);
+-
+- /* The static distance tree is trivial: */
+- for (n = 0; n < D_CODES; n++) {
+- static_dtree[n].Len = 5;
+- static_dtree[n].Code = bi_reverse((unsigned)n, 5);
+- }
+- static_init_done = 1;
+-}
+-
+-/* ===========================================================================
+- * Initialize the tree data structures for a new zlib stream.
+- */
+-void zlib_tr_init(s)
+- deflate_state *s;
+-{
+- tr_static_init();
+-
+- s->compressed_len = 0L;
+-
+- s->l_desc.dyn_tree = s->dyn_ltree;
+- s->l_desc.stat_desc = &static_l_desc;
+-
+- s->d_desc.dyn_tree = s->dyn_dtree;
+- s->d_desc.stat_desc = &static_d_desc;
+-
+- s->bl_desc.dyn_tree = s->bl_tree;
+- s->bl_desc.stat_desc = &static_bl_desc;
+-
+- s->bi_buf = 0;
+- s->bi_valid = 0;
+- s->last_eob_len = 8; /* enough lookahead for inflate */
+-#ifdef DEBUG_ZLIB
+- s->bits_sent = 0L;
+-#endif
+-
+- /* Initialize the first block of the first file: */
+- init_block(s);
+-}
+-
+-/* ===========================================================================
+- * Initialize a new block.
+- */
+-local void init_block(s)
+- deflate_state *s;
+-{
+- int n; /* iterates over tree elements */
+-
+- /* Initialize the trees. */
+- for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0;
+- for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0;
+- for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
+-
+- s->dyn_ltree[END_BLOCK].Freq = 1;
+- s->opt_len = s->static_len = 0L;
+- s->last_lit = s->matches = 0;
+-}
+-
+-#define SMALLEST 1
+-/* Index within the heap array of least frequent node in the Huffman tree */
+-
+-
+-/* ===========================================================================
+- * Remove the smallest element from the heap and recreate the heap with
+- * one less element. Updates heap and heap_len.
+- */
+-#define pqremove(s, tree, top) \
+-{\
+- top = s->heap[SMALLEST]; \
+- s->heap[SMALLEST] = s->heap[s->heap_len--]; \
+- pqdownheap(s, tree, SMALLEST); \
+-}
+-
+-/* ===========================================================================
+- * Compares to subtrees, using the tree depth as tie breaker when
+- * the subtrees have equal frequency. This minimizes the worst case length.
+- */
+-#define smaller(tree, n, m, depth) \
+- (tree[n].Freq < tree[m].Freq || \
+- (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m]))
+-
+-/* ===========================================================================
+- * Restore the heap property by moving down the tree starting at node k,
+- * exchanging a node with the smallest of its two sons if necessary, stopping
+- * when the heap property is re-established (each father smaller than its
+- * two sons).
+- */
+-local void pqdownheap(s, tree, k)
+- deflate_state *s;
+- ct_data *tree; /* the tree to restore */
+- int k; /* node to move down */
+-{
+- int v = s->heap[k];
+- int j = k << 1; /* left son of k */
+- while (j <= s->heap_len) {
+- /* Set j to the smallest of the two sons: */
+- if (j < s->heap_len &&
+- smaller(tree, s->heap[j+1], s->heap[j], s->depth)) {
+- j++;
+- }
+- /* Exit if v is smaller than both sons */
+- if (smaller(tree, v, s->heap[j], s->depth)) break;
+-
+- /* Exchange v with the smallest son */
+- s->heap[k] = s->heap[j]; k = j;
+-
+- /* And continue down the tree, setting j to the left son of k */
+- j <<= 1;
+- }
+- s->heap[k] = v;
+-}
+-
+-/* ===========================================================================
+- * Compute the optimal bit lengths for a tree and update the total bit length
+- * for the current block.
+- * IN assertion: the fields freq and dad are set, heap[heap_max] and
+- * above are the tree nodes sorted by increasing frequency.
+- * OUT assertions: the field len is set to the optimal bit length, the
+- * array bl_count contains the frequencies for each bit length.
+- * The length opt_len is updated; static_len is also updated if stree is
+- * not null.
+- */
+-local void gen_bitlen(s, desc)
+- deflate_state *s;
+- tree_desc *desc; /* the tree descriptor */
+-{
+- ct_data *tree = desc->dyn_tree;
+- int max_code = desc->max_code;
+- const ct_data *stree = desc->stat_desc->static_tree;
+- const intf *extra = desc->stat_desc->extra_bits;
+- int base = desc->stat_desc->extra_base;
+- int max_length = desc->stat_desc->max_length;
+- int h; /* heap index */
+- int n, m; /* iterate over the tree elements */
+- int bits; /* bit length */
+- int xbits; /* extra bits */
+- ush f; /* frequency */
+- int overflow = 0; /* number of elements with bit length too large */
+-
+- for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0;
+-
+- /* In a first pass, compute the optimal bit lengths (which may
+- * overflow in the case of the bit length tree).
+- */
+- tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */
+-
+- for (h = s->heap_max+1; h < HEAP_SIZE; h++) {
+- n = s->heap[h];
+- bits = tree[tree[n].Dad].Len + 1;
+- if (bits > max_length) bits = max_length, overflow++;
+- tree[n].Len = (ush)bits;
+- /* We overwrite tree[n].Dad which is no longer needed */
+-
+- if (n > max_code) continue; /* not a leaf node */
+-
+- s->bl_count[bits]++;
+- xbits = 0;
+- if (n >= base) xbits = extra[n-base];
+- f = tree[n].Freq;
+- s->opt_len += (ulg)f * (bits + xbits);
+- if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
+- }
+- if (overflow == 0) return;
+-
+- Trace((stderr,"\nbit length overflow\n"));
+- /* This happens for example on obj2 and pic of the Calgary corpus */
+-
+- /* Find the first bit length which could increase: */
+- do {
+- bits = max_length-1;
+- while (s->bl_count[bits] == 0) bits--;
+- s->bl_count[bits]--; /* move one leaf down the tree */
+- s->bl_count[bits+1] += 2; /* move one overflow item as its brother */
+- s->bl_count[max_length]--;
+- /* The brother of the overflow item also moves one step up,
+- * but this does not affect bl_count[max_length]
+- */
+- overflow -= 2;
+- } while (overflow > 0);
+-
+- /* Now recompute all bit lengths, scanning in increasing frequency.
+- * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
+- * lengths instead of fixing only the wrong ones. This idea is taken
+- * from 'ar' written by Haruhiko Okumura.)
+- */
+- for (bits = max_length; bits != 0; bits--) {
+- n = s->bl_count[bits];
+- while (n != 0) {
+- m = s->heap[--h];
+- if (m > max_code) continue;
+- if (tree[m].Len != (unsigned) bits) {
+- Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
+- s->opt_len += ((long)bits - (long)tree[m].Len)
+- *(long)tree[m].Freq;
+- tree[m].Len = (ush)bits;
+- }
+- n--;
+- }
+- }
+-}
+-
+-/* ===========================================================================
+- * Generate the codes for a given tree and bit counts (which need not be
+- * optimal).
+- * IN assertion: the array bl_count contains the bit length statistics for
+- * the given tree and the field len is set for all tree elements.
+- * OUT assertion: the field code is set for all tree elements of non
+- * zero code length.
+- */
+-local void gen_codes (tree, max_code, bl_count)
+- ct_data *tree; /* the tree to decorate */
+- int max_code; /* largest code with non zero frequency */
+- ushf *bl_count; /* number of codes at each bit length */
+-{
+- ush next_code[MAX_BITS+1]; /* next code value for each bit length */
+- ush code = 0; /* running code value */
+- int bits; /* bit index */
+- int n; /* code index */
+-
+- /* The distribution counts are first used to generate the code values
+- * without bit reversal.
+- */
+- for (bits = 1; bits <= MAX_BITS; bits++) {
+- next_code[bits] = code = (code + bl_count[bits-1]) << 1;
+- }
+- /* Check that the bit counts in bl_count are consistent. The last code
+- * must be all ones.
+- */
+- Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
+- "inconsistent bit counts");
+- Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
+-
+- for (n = 0; n <= max_code; n++) {
+- int len = tree[n].Len;
+- if (len == 0) continue;
+- /* Now reverse the bits */
+- tree[n].Code = bi_reverse(next_code[len]++, len);
+-
+- Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
+- n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
+- }
+-}
+-
+-/* ===========================================================================
+- * Construct one Huffman tree and assigns the code bit strings and lengths.
+- * Update the total bit length for the current block.
+- * IN assertion: the field freq is set for all tree elements.
+- * OUT assertions: the fields len and code are set to the optimal bit length
+- * and corresponding code. The length opt_len is updated; static_len is
+- * also updated if stree is not null. The field max_code is set.
+- */
+-local void build_tree(s, desc)
+- deflate_state *s;
+- tree_desc *desc; /* the tree descriptor */
+-{
+- ct_data *tree = desc->dyn_tree;
+- const ct_data *stree = desc->stat_desc->static_tree;
+- int elems = desc->stat_desc->elems;
+- int n, m; /* iterate over heap elements */
+- int max_code = -1; /* largest code with non zero frequency */
+- int node; /* new node being created */
+-
+- /* Construct the initial heap, with least frequent element in
+- * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
+- * heap[0] is not used.
+- */
+- s->heap_len = 0, s->heap_max = HEAP_SIZE;
+-
+- for (n = 0; n < elems; n++) {
+- if (tree[n].Freq != 0) {
+- s->heap[++(s->heap_len)] = max_code = n;
+- s->depth[n] = 0;
+- } else {
+- tree[n].Len = 0;
+- }
+- }
+-
+- /* The pkzip format requires that at least one distance code exists,
+- * and that at least one bit should be sent even if there is only one
+- * possible code. So to avoid special checks later on we force at least
+- * two codes of non zero frequency.
+- */
+- while (s->heap_len < 2) {
+- node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0);
+- tree[node].Freq = 1;
+- s->depth[node] = 0;
+- s->opt_len--; if (stree) s->static_len -= stree[node].Len;
+- /* node is 0 or 1 so it does not have extra bits */
+- }
+- desc->max_code = max_code;
+-
+- /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
+- * establish sub-heaps of increasing lengths:
+- */
+- for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n);
+-
+- /* Construct the Huffman tree by repeatedly combining the least two
+- * frequent nodes.
+- */
+- node = elems; /* next internal node of the tree */
+- do {
+- pqremove(s, tree, n); /* n = node of least frequency */
+- m = s->heap[SMALLEST]; /* m = node of next least frequency */
+-
+- s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */
+- s->heap[--(s->heap_max)] = m;
+-
+- /* Create a new node father of n and m */
+- tree[node].Freq = tree[n].Freq + tree[m].Freq;
+- s->depth[node] = (uch) (MAX(s->depth[n], s->depth[m]) + 1);
+- tree[n].Dad = tree[m].Dad = (ush)node;
+-#ifdef DUMP_BL_TREE
+- if (tree == s->bl_tree) {
+- fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)",
+- node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq);
+- }
+-#endif
+- /* and insert the new node in the heap */
+- s->heap[SMALLEST] = node++;
+- pqdownheap(s, tree, SMALLEST);
+-
+- } while (s->heap_len >= 2);
+-
+- s->heap[--(s->heap_max)] = s->heap[SMALLEST];
+-
+- /* At this point, the fields freq and dad are set. We can now
+- * generate the bit lengths.
+- */
+- gen_bitlen(s, (tree_desc *)desc);
+-
+- /* The field len is now set, we can generate the bit codes */
+- gen_codes ((ct_data *)tree, max_code, s->bl_count);
+-}
+-
+-/* ===========================================================================
+- * Scan a literal or distance tree to determine the frequencies of the codes
+- * in the bit length tree.
+- */
+-local void scan_tree (s, tree, max_code)
+- deflate_state *s;
+- ct_data *tree; /* the tree to be scanned */
+- int max_code; /* and its largest code of non zero frequency */
+-{
+- int n; /* iterates over all tree elements */
+- int prevlen = -1; /* last emitted length */
+- int curlen; /* length of current code */
+- int nextlen = tree[0].Len; /* length of next code */
+- int count = 0; /* repeat count of the current code */
+- int max_count = 7; /* max repeat count */
+- int min_count = 4; /* min repeat count */
+-
+- if (nextlen == 0) max_count = 138, min_count = 3;
+- tree[max_code+1].Len = (ush)0xffff; /* guard */
+-
+- for (n = 0; n <= max_code; n++) {
+- curlen = nextlen; nextlen = tree[n+1].Len;
+- if (++count < max_count && curlen == nextlen) {
+- continue;
+- } else if (count < min_count) {
+- s->bl_tree[curlen].Freq += count;
+- } else if (curlen != 0) {
+- if (curlen != prevlen) s->bl_tree[curlen].Freq++;
+- s->bl_tree[REP_3_6].Freq++;
+- } else if (count <= 10) {
+- s->bl_tree[REPZ_3_10].Freq++;
+- } else {
+- s->bl_tree[REPZ_11_138].Freq++;
+- }
+- count = 0; prevlen = curlen;
+- if (nextlen == 0) {
+- max_count = 138, min_count = 3;
+- } else if (curlen == nextlen) {
+- max_count = 6, min_count = 3;
+- } else {
+- max_count = 7, min_count = 4;
+- }
+- }
+-}
+-
+-/* ===========================================================================
+- * Send a literal or distance tree in compressed form, using the codes in
+- * bl_tree.
+- */
+-local void send_tree (s, tree, max_code)
+- deflate_state *s;
+- ct_data *tree; /* the tree to be scanned */
+- int max_code; /* and its largest code of non zero frequency */
+-{
+- int n; /* iterates over all tree elements */
+- int prevlen = -1; /* last emitted length */
+- int curlen; /* length of current code */
+- int nextlen = tree[0].Len; /* length of next code */
+- int count = 0; /* repeat count of the current code */
+- int max_count = 7; /* max repeat count */
+- int min_count = 4; /* min repeat count */
+-
+- /* tree[max_code+1].Len = -1; */ /* guard already set */
+- if (nextlen == 0) max_count = 138, min_count = 3;
+-
+- for (n = 0; n <= max_code; n++) {
+- curlen = nextlen; nextlen = tree[n+1].Len;
+- if (++count < max_count && curlen == nextlen) {
+- continue;
+- } else if (count < min_count) {
+- do { send_code(s, curlen, s->bl_tree); } while (--count != 0);
+-
+- } else if (curlen != 0) {
+- if (curlen != prevlen) {
+- send_code(s, curlen, s->bl_tree); count--;
+- }
+- Assert(count >= 3 && count <= 6, " 3_6?");
+- send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2);
+-
+- } else if (count <= 10) {
+- send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3);
+-
+- } else {
+- send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7);
+- }
+- count = 0; prevlen = curlen;
+- if (nextlen == 0) {
+- max_count = 138, min_count = 3;
+- } else if (curlen == nextlen) {
+- max_count = 6, min_count = 3;
+- } else {
+- max_count = 7, min_count = 4;
+- }
+- }
+-}
+-
+-/* ===========================================================================
+- * Construct the Huffman tree for the bit lengths and return the index in
+- * bl_order of the last bit length code to send.
+- */
+-local int build_bl_tree(s)
+- deflate_state *s;
+-{
+- int max_blindex; /* index of last bit length code of non zero freq */
+-
+- /* Determine the bit length frequencies for literal and distance trees */
+- scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code);
+- scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code);
+-
+- /* Build the bit length tree: */
+- build_tree(s, (tree_desc *)(&(s->bl_desc)));
+- /* opt_len now includes the length of the tree representations, except
+- * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
+- */
+-
+- /* Determine the number of bit length codes to send. The pkzip format
+- * requires that at least 4 bit length codes be sent. (appnote.txt says
+- * 3 but the actual value used is 4.)
+- */
+- for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
+- if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
+- }
+- /* Update opt_len to include the bit length tree and counts */
+- s->opt_len += 3*(max_blindex+1) + 5+5+4;
+- Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
+- s->opt_len, s->static_len));
+-
+- return max_blindex;
+-}
+-
+-/* ===========================================================================
+- * Send the header for a block using dynamic Huffman trees: the counts, the
+- * lengths of the bit length codes, the literal tree and the distance tree.
+- * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
+- */
+-local void send_all_trees(s, lcodes, dcodes, blcodes)
+- deflate_state *s;
+- int lcodes, dcodes, blcodes; /* number of codes for each tree */
+-{
+- int rank; /* index in bl_order */
+-
+- Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
+- Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
+- "too many codes");
+- Tracev((stderr, "\nbl counts: "));
+- send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
+- send_bits(s, dcodes-1, 5);
+- send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */
+- for (rank = 0; rank < blcodes; rank++) {
+- Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
+- send_bits(s, s->bl_tree[bl_order[rank]].Len, 3);
+- }
+- Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
+-
+- send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */
+- Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
+-
+- send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */
+- Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
+-}
+-
+-/* ===========================================================================
+- * Send a stored block
+- */
+-void zlib_tr_stored_block(s, buf, stored_len, eof)
+- deflate_state *s;
+- charf *buf; /* input block */
+- ulg stored_len; /* length of input block */
+- int eof; /* true if this is the last block for a file */
+-{
+- send_bits(s, (STORED_BLOCK<<1)+eof, 3); /* send block type */
+- s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
+- s->compressed_len += (stored_len + 4) << 3;
+-
+- copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
+-}
+-
+-/* Send just the `stored block' type code without any length bytes or data.
+- */
+-void zlib_tr_stored_type_only(s)
+- deflate_state *s;
+-{
+- send_bits(s, (STORED_BLOCK << 1), 3);
+- bi_windup(s);
+- s->compressed_len = (s->compressed_len + 3) & ~7L;
+-}
+-
+-
+-/* ===========================================================================
+- * Send one empty static block to give enough lookahead for inflate.
+- * This takes 10 bits, of which 7 may remain in the bit buffer.
+- * The current inflate code requires 9 bits of lookahead. If the
+- * last two codes for the previous block (real code plus EOB) were coded
+- * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode
+- * the last real code. In this case we send two empty static blocks instead
+- * of one. (There are no problems if the previous block is stored or fixed.)
+- * To simplify the code, we assume the worst case of last real code encoded
+- * on one bit only.
+- */
+-void zlib_tr_align(s)
+- deflate_state *s;
+-{
+- send_bits(s, STATIC_TREES<<1, 3);
+- send_code(s, END_BLOCK, static_ltree);
+- s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
+- bi_flush(s);
+- /* Of the 10 bits for the empty block, we have already sent
+- * (10 - bi_valid) bits. The lookahead for the last real code (before
+- * the EOB of the previous block) was thus at least one plus the length
+- * of the EOB plus what we have just sent of the empty static block.
+- */
+- if (1 + s->last_eob_len + 10 - s->bi_valid < 9) {
+- send_bits(s, STATIC_TREES<<1, 3);
+- send_code(s, END_BLOCK, static_ltree);
+- s->compressed_len += 10L;
+- bi_flush(s);
+- }
+- s->last_eob_len = 7;
+-}
+-
+-/* ===========================================================================
+- * Determine the best encoding for the current block: dynamic trees, static
+- * trees or store, and output the encoded block to the zip file. This function
+- * returns the total compressed length for the file so far.
+- */
+-ulg zlib_tr_flush_block(s, buf, stored_len, eof)
+- deflate_state *s;
+- charf *buf; /* input block, or NULL if too old */
+- ulg stored_len; /* length of input block */
+- int eof; /* true if this is the last block for a file */
+-{
+- ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
+- int max_blindex = 0; /* index of last bit length code of non zero freq */
+-
+- /* Build the Huffman trees unless a stored block is forced */
+- if (s->level > 0) {
+-
+- /* Check if the file is ascii or binary */
+- if (s->data_type == Z_UNKNOWN) set_data_type(s);
+-
+- /* Construct the literal and distance trees */
+- build_tree(s, (tree_desc *)(&(s->l_desc)));
+- Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
+- s->static_len));
+-
+- build_tree(s, (tree_desc *)(&(s->d_desc)));
+- Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
+- s->static_len));
+- /* At this point, opt_len and static_len are the total bit lengths of
+- * the compressed block data, excluding the tree representations.
+- */
+-
+- /* Build the bit length tree for the above two trees, and get the index
+- * in bl_order of the last bit length code to send.
+- */
+- max_blindex = build_bl_tree(s);
+-
+- /* Determine the best encoding. Compute first the block length in bytes*/
+- opt_lenb = (s->opt_len+3+7)>>3;
+- static_lenb = (s->static_len+3+7)>>3;
+-
+- Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
+- opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
+- s->last_lit));
+-
+- if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
+-
+- } else {
+- Assert(buf != (char*)0, "lost buf");
+- opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
+- }
+-
+- /* If compression failed and this is the first and last block,
+- * and if the .zip file can be seeked (to rewrite the local header),
+- * the whole file is transformed into a stored file:
+- */
+-#ifdef STORED_FILE_OK
+-# ifdef FORCE_STORED_FILE
+- if (eof && s->compressed_len == 0L) { /* force stored file */
+-# else
+- if (stored_len <= opt_lenb && eof && s->compressed_len==0L && seekable()) {
+-# endif
+- /* Since LIT_BUFSIZE <= 2*WSIZE, the input data must be there: */
+- if (buf == (charf*)0) error ("block vanished");
+-
+- copy_block(s, buf, (unsigned)stored_len, 0); /* without header */
+- s->compressed_len = stored_len << 3;
+- s->method = STORED;
+- } else
+-#endif /* STORED_FILE_OK */
+-
+-#ifdef FORCE_STORED
+- if (buf != (char*)0) { /* force stored block */
+-#else
+- if (stored_len+4 <= opt_lenb && buf != (char*)0) {
+- /* 4: two words for the lengths */
+-#endif
+- /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
+- * Otherwise we can't have processed more than WSIZE input bytes since
+- * the last block flush, because compression would have been
+- * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
+- * transform a block into a stored block.
+- */
+- zlib_tr_stored_block(s, buf, stored_len, eof);
+-
+-#ifdef FORCE_STATIC
+- } else if (static_lenb >= 0) { /* force static trees */
+-#else
+- } else if (static_lenb == opt_lenb) {
+-#endif
+- send_bits(s, (STATIC_TREES<<1)+eof, 3);
+- compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree);
+- s->compressed_len += 3 + s->static_len;
+- } else {
+- send_bits(s, (DYN_TREES<<1)+eof, 3);
+- send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1,
+- max_blindex+1);
+- compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree);
+- s->compressed_len += 3 + s->opt_len;
+- }
+- Assert (s->compressed_len == s->bits_sent, "bad compressed size");
+- init_block(s);
+-
+- if (eof) {
+- bi_windup(s);
+- s->compressed_len += 7; /* align on byte boundary */
+- }
+- Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
+- s->compressed_len-7*eof));
+-
+- return s->compressed_len >> 3;
+-}
+-
+-/* ===========================================================================
+- * Save the match info and tally the frequency counts. Return true if
+- * the current block must be flushed.
+- */
+-int zlib_tr_tally (s, dist, lc)
+- deflate_state *s;
+- unsigned dist; /* distance of matched string */
+- unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
+-{
+- s->d_buf[s->last_lit] = (ush)dist;
+- s->l_buf[s->last_lit++] = (uch)lc;
+- if (dist == 0) {
+- /* lc is the unmatched char */
+- s->dyn_ltree[lc].Freq++;
+- } else {
+- s->matches++;
+- /* Here, lc is the match length - MIN_MATCH */
+- dist--; /* dist = match distance - 1 */
+- Assert((ush)dist < (ush)MAX_DIST(s) &&
+- (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
+- (ush)d_code(dist) < (ush)D_CODES, "zlib_tr_tally: bad match");
+-
+- s->dyn_ltree[length_code[lc]+LITERALS+1].Freq++;
+- s->dyn_dtree[d_code(dist)].Freq++;
+- }
+-
+- /* Try to guess if it is profitable to stop the current block here */
+- if ((s->last_lit & 0xfff) == 0 && s->level > 2) {
+- /* Compute an upper bound for the compressed length */
+- ulg out_length = (ulg)s->last_lit*8L;
+- ulg in_length = (ulg)((long)s->strstart - s->block_start);
+- int dcode;
+- for (dcode = 0; dcode < D_CODES; dcode++) {
+- out_length += (ulg)s->dyn_dtree[dcode].Freq *
+- (5L+extra_dbits[dcode]);
+- }
+- out_length >>= 3;
+- Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
+- s->last_lit, in_length, out_length,
+- 100L - out_length*100L/in_length));
+- if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
+- }
+- return (s->last_lit == s->lit_bufsize-1);
+- /* We avoid equality with lit_bufsize because of wraparound at 64K
+- * on 16 bit machines and because stored blocks are restricted to
+- * 64K-1 bytes.
+- */
+-}
+-
+-/* ===========================================================================
+- * Send the block data compressed using the given Huffman trees
+- */
+-local void compress_block(s, ltree, dtree)
+- deflate_state *s;
+- ct_data *ltree; /* literal tree */
+- ct_data *dtree; /* distance tree */
+-{
+- unsigned dist; /* distance of matched string */
+- int lc; /* match length or unmatched char (if dist == 0) */
+- unsigned lx = 0; /* running index in l_buf */
+- unsigned code; /* the code to send */
+- int extra; /* number of extra bits to send */
+-
+- if (s->last_lit != 0) do {
+- dist = s->d_buf[lx];
+- lc = s->l_buf[lx++];
+- if (dist == 0) {
+- send_code(s, lc, ltree); /* send a literal byte */
+- Tracecv(isgraph(lc), (stderr," '%c' ", lc));
+- } else {
+- /* Here, lc is the match length - MIN_MATCH */
+- code = length_code[lc];
+- send_code(s, code+LITERALS+1, ltree); /* send the length code */
+- extra = extra_lbits[code];
+- if (extra != 0) {
+- lc -= base_length[code];
+- send_bits(s, lc, extra); /* send the extra length bits */
+- }
+- dist--; /* dist is now the match distance - 1 */
+- code = d_code(dist);
+- Assert (code < D_CODES, "bad d_code");
+-
+- send_code(s, code, dtree); /* send the distance code */
+- extra = extra_dbits[code];
+- if (extra != 0) {
+- dist -= base_dist[code];
+- send_bits(s, dist, extra); /* send the extra distance bits */
+- }
+- } /* literal or match pair ? */
+-
+- /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
+- Assert(s->pending < s->lit_bufsize + 2*lx, "pendingBuf overflow");
+-
+- } while (lx < s->last_lit);
+-
+- send_code(s, END_BLOCK, ltree);
+- s->last_eob_len = ltree[END_BLOCK].Len;
+-}
+-
+-/* ===========================================================================
+- * Set the data type to ASCII or BINARY, using a crude approximation:
+- * binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise.
+- * IN assertion: the fields freq of dyn_ltree are set and the total of all
+- * frequencies does not exceed 64K (to fit in an int on 16 bit machines).
+- */
+-local void set_data_type(s)
+- deflate_state *s;
+-{
+- int n = 0;
+- unsigned ascii_freq = 0;
+- unsigned bin_freq = 0;
+- while (n < 7) bin_freq += s->dyn_ltree[n++].Freq;
+- while (n < 128) ascii_freq += s->dyn_ltree[n++].Freq;
+- while (n < LITERALS) bin_freq += s->dyn_ltree[n++].Freq;
+- s->data_type = (Byte)(bin_freq > (ascii_freq >> 2) ? Z_BINARY : Z_ASCII);
+-}
+-
+-/* ===========================================================================
+- * Copy a stored block, storing first the length and its
+- * one's complement if requested.
+- */
+-local void copy_block(s, buf, len, header)
+- deflate_state *s;
+- charf *buf; /* the input data */
+- unsigned len; /* its length */
+- int header; /* true if block header must be written */
+-{
+- bi_windup(s); /* align on byte boundary */
+- s->last_eob_len = 8; /* enough lookahead for inflate */
+-
+- if (header) {
+- put_short(s, (ush)len);
+- put_short(s, (ush)~len);
+-#ifdef DEBUG_ZLIB
+- s->bits_sent += 2*16;
+-#endif
+- }
+-#ifdef DEBUG_ZLIB
+- s->bits_sent += (ulg)len<<3;
+-#endif
+- /* bundle up the put_byte(s, *buf++) calls */
+- memcpy(&s->pending_buf[s->pending], buf, len);
+- s->pending += len;
+-}
+-
+diff -Nur linux/fs/jffs2/compressors/zlib_deflate/defutil.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_deflate/defutil.h
+--- linux/fs/jffs2/compressors/zlib_deflate/defutil.h 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_deflate/defutil.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,335 +0,0 @@
+-
+-
+-
+-#define Assert(err, str)
+-#define Trace(dummy)
+-#define Tracev(dummy)
+-#define Tracecv(err, dummy)
+-#define Tracevv(dummy)
+-
+-
+-
+-#define LENGTH_CODES 29
+-/* number of length codes, not counting the special END_BLOCK code */
+-
+-#define LITERALS 256
+-/* number of literal bytes 0..255 */
+-
+-#define L_CODES (LITERALS+1+LENGTH_CODES)
+-/* number of Literal or Length codes, including the END_BLOCK code */
+-
+-#define D_CODES 30
+-/* number of distance codes */
+-
+-#define BL_CODES 19
+-/* number of codes used to transfer the bit lengths */
+-
+-#define HEAP_SIZE (2*L_CODES+1)
+-/* maximum heap size */
+-
+-#define MAX_BITS 15
+-/* All codes must not exceed MAX_BITS bits */
+-
+-#define INIT_STATE 42
+-#define BUSY_STATE 113
+-#define FINISH_STATE 666
+-/* Stream status */
+-
+-
+-/* Data structure describing a single value and its code string. */
+-typedef struct ct_data_s {
+- union {
+- ush freq; /* frequency count */
+- ush code; /* bit string */
+- } fc;
+- union {
+- ush dad; /* father node in Huffman tree */
+- ush len; /* length of bit string */
+- } dl;
+-} FAR ct_data;
+-
+-#define Freq fc.freq
+-#define Code fc.code
+-#define Dad dl.dad
+-#define Len dl.len
+-
+-typedef struct static_tree_desc_s static_tree_desc;
+-
+-typedef struct tree_desc_s {
+- ct_data *dyn_tree; /* the dynamic tree */
+- int max_code; /* largest code with non zero frequency */
+- static_tree_desc *stat_desc; /* the corresponding static tree */
+-} FAR tree_desc;
+-
+-typedef ush Pos;
+-typedef Pos FAR Posf;
+-typedef unsigned IPos;
+-
+-/* A Pos is an index in the character window. We use short instead of int to
+- * save space in the various tables. IPos is used only for parameter passing.
+- */
+-
+-typedef struct deflate_state {
+- z_streamp strm; /* pointer back to this zlib stream */
+- int status; /* as the name implies */
+- Bytef *pending_buf; /* output still pending */
+- ulg pending_buf_size; /* size of pending_buf */
+- Bytef *pending_out; /* next pending byte to output to the stream */
+- int pending; /* nb of bytes in the pending buffer */
+- int noheader; /* suppress zlib header and adler32 */
+- Byte data_type; /* UNKNOWN, BINARY or ASCII */
+- Byte method; /* STORED (for zip only) or DEFLATED */
+- int last_flush; /* value of flush param for previous deflate call */
+-
+- /* used by deflate.c: */
+-
+- uInt w_size; /* LZ77 window size (32K by default) */
+- uInt w_bits; /* log2(w_size) (8..16) */
+- uInt w_mask; /* w_size - 1 */
+-
+- Bytef *window;
+- /* Sliding window. Input bytes are read into the second half of the window,
+- * and move to the first half later to keep a dictionary of at least wSize
+- * bytes. With this organization, matches are limited to a distance of
+- * wSize-MAX_MATCH bytes, but this ensures that IO is always
+- * performed with a length multiple of the block size. Also, it limits
+- * the window size to 64K, which is quite useful on MSDOS.
+- * To do: use the user input buffer as sliding window.
+- */
+-
+- ulg window_size;
+- /* Actual size of window: 2*wSize, except when the user input buffer
+- * is directly used as sliding window.
+- */
+-
+- Posf *prev;
+- /* Link to older string with same hash index. To limit the size of this
+- * array to 64K, this link is maintained only for the last 32K strings.
+- * An index in this array is thus a window index modulo 32K.
+- */
+-
+- Posf *head; /* Heads of the hash chains or NIL. */
+-
+- uInt ins_h; /* hash index of string to be inserted */
+- uInt hash_size; /* number of elements in hash table */
+- uInt hash_bits; /* log2(hash_size) */
+- uInt hash_mask; /* hash_size-1 */
+-
+- uInt hash_shift;
+- /* Number of bits by which ins_h must be shifted at each input
+- * step. It must be such that after MIN_MATCH steps, the oldest
+- * byte no longer takes part in the hash key, that is:
+- * hash_shift * MIN_MATCH >= hash_bits
+- */
+-
+- long block_start;
+- /* Window position at the beginning of the current output block. Gets
+- * negative when the window is moved backwards.
+- */
+-
+- uInt match_length; /* length of best match */
+- IPos prev_match; /* previous match */
+- int match_available; /* set if previous match exists */
+- uInt strstart; /* start of string to insert */
+- uInt match_start; /* start of matching string */
+- uInt lookahead; /* number of valid bytes ahead in window */
+-
+- uInt prev_length;
+- /* Length of the best match at previous step. Matches not greater than this
+- * are discarded. This is used in the lazy match evaluation.
+- */
+-
+- uInt max_chain_length;
+- /* To speed up deflation, hash chains are never searched beyond this
+- * length. A higher limit improves compression ratio but degrades the
+- * speed.
+- */
+-
+- uInt max_lazy_match;
+- /* Attempt to find a better match only when the current match is strictly
+- * smaller than this value. This mechanism is used only for compression
+- * levels >= 4.
+- */
+-# define max_insert_length max_lazy_match
+- /* Insert new strings in the hash table only if the match length is not
+- * greater than this length. This saves time but degrades compression.
+- * max_insert_length is used only for compression levels <= 3.
+- */
+-
+- int level; /* compression level (1..9) */
+- int strategy; /* favor or force Huffman coding*/
+-
+- uInt good_match;
+- /* Use a faster search when the previous match is longer than this */
+-
+- int nice_match; /* Stop searching when current match exceeds this */
+-
+- /* used by trees.c: */
+- /* Didn't use ct_data typedef below to supress compiler warning */
+- struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
+- struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
+- struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
+-
+- struct tree_desc_s l_desc; /* desc. for literal tree */
+- struct tree_desc_s d_desc; /* desc. for distance tree */
+- struct tree_desc_s bl_desc; /* desc. for bit length tree */
+-
+- ush bl_count[MAX_BITS+1];
+- /* number of codes at each bit length for an optimal tree */
+-
+- int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */
+- int heap_len; /* number of elements in the heap */
+- int heap_max; /* element of largest frequency */
+- /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
+- * The same heap array is used to build all trees.
+- */
+-
+- uch depth[2*L_CODES+1];
+- /* Depth of each subtree used as tie breaker for trees of equal frequency
+- */
+-
+- uchf *l_buf; /* buffer for literals or lengths */
+-
+- uInt lit_bufsize;
+- /* Size of match buffer for literals/lengths. There are 4 reasons for
+- * limiting lit_bufsize to 64K:
+- * - frequencies can be kept in 16 bit counters
+- * - if compression is not successful for the first block, all input
+- * data is still in the window so we can still emit a stored block even
+- * when input comes from standard input. (This can also be done for
+- * all blocks if lit_bufsize is not greater than 32K.)
+- * - if compression is not successful for a file smaller than 64K, we can
+- * even emit a stored file instead of a stored block (saving 5 bytes).
+- * This is applicable only for zip (not gzip or zlib).
+- * - creating new Huffman trees less frequently may not provide fast
+- * adaptation to changes in the input data statistics. (Take for
+- * example a binary file with poorly compressible code followed by
+- * a highly compressible string table.) Smaller buffer sizes give
+- * fast adaptation but have of course the overhead of transmitting
+- * trees more frequently.
+- * - I can't count above 4
+- */
+-
+- uInt last_lit; /* running index in l_buf */
+-
+- ushf *d_buf;
+- /* Buffer for distances. To simplify the code, d_buf and l_buf have
+- * the same number of elements. To use different lengths, an extra flag
+- * array would be necessary.
+- */
+-
+- ulg opt_len; /* bit length of current block with optimal trees */
+- ulg static_len; /* bit length of current block with static trees */
+- ulg compressed_len; /* total bit length of compressed file */
+- uInt matches; /* number of string matches in current block */
+- int last_eob_len; /* bit length of EOB code for last block */
+-
+-#ifdef DEBUG_ZLIB
+- ulg bits_sent; /* bit length of the compressed data */
+-#endif
+-
+- ush bi_buf;
+- /* Output buffer. bits are inserted starting at the bottom (least
+- * significant bits).
+- */
+- int bi_valid;
+- /* Number of valid bits in bi_buf. All bits above the last valid bit
+- * are always zero.
+- */
+-
+-} FAR deflate_state;
+-
+-typedef struct deflate_workspace {
+- /* State memory for the deflator */
+- deflate_state deflate_memory;
+- Byte window_memory[2 * (1 << MAX_WBITS)];
+- Pos prev_memory[1 << MAX_WBITS];
+- Pos head_memory[1 << (MAX_MEM_LEVEL + 7)];
+- char overlay_memory[(1 << (MAX_MEM_LEVEL + 6)) * (sizeof(ush)+2)];
+-} deflate_workspace;
+-
+-/* Output a byte on the stream.
+- * IN assertion: there is enough room in pending_buf.
+- */
+-#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
+-
+-
+-#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
+-/* Minimum amount of lookahead, except at the end of the input file.
+- * See deflate.c for comments about the MIN_MATCH+1.
+- */
+-
+-#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD)
+-/* In order to simplify the code, particularly on 16 bit machines, match
+- * distances are limited to MAX_DIST instead of WSIZE.
+- */
+-
+- /* in trees.c */
+-void zlib_tr_init OF((deflate_state *s));
+-int zlib_tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
+-ulg zlib_tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len,
+- int eof));
+-void zlib_tr_align OF((deflate_state *s));
+-void zlib_tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len,
+- int eof));
+-void zlib_tr_stored_type_only OF((deflate_state *));
+-
+-
+-/* ===========================================================================
+- * Output a short LSB first on the stream.
+- * IN assertion: there is enough room in pendingBuf.
+- */
+-#define put_short(s, w) { \
+- put_byte(s, (uch)((w) & 0xff)); \
+- put_byte(s, (uch)((ush)(w) >> 8)); \
+-}
+-
+-/* ===========================================================================
+- * Reverse the first len bits of a code, using straightforward code (a faster
+- * method would use a table)
+- * IN assertion: 1 <= len <= 15
+- */
+-static inline unsigned bi_reverse(unsigned code, /* the value to invert */
+- int len) /* its bit length */
+-{
+- register unsigned res = 0;
+- do {
+- res |= code & 1;
+- code >>= 1, res <<= 1;
+- } while (--len > 0);
+- return res >> 1;
+-}
+-
+-/* ===========================================================================
+- * Flush the bit buffer, keeping at most 7 bits in it.
+- */
+-static inline void bi_flush(deflate_state *s)
+-{
+- if (s->bi_valid == 16) {
+- put_short(s, s->bi_buf);
+- s->bi_buf = 0;
+- s->bi_valid = 0;
+- } else if (s->bi_valid >= 8) {
+- put_byte(s, (Byte)s->bi_buf);
+- s->bi_buf >>= 8;
+- s->bi_valid -= 8;
+- }
+-}
+-
+-/* ===========================================================================
+- * Flush the bit buffer and align the output on a byte boundary
+- */
+-static inline void bi_windup(deflate_state *s)
+-{
+- if (s->bi_valid > 8) {
+- put_short(s, s->bi_buf);
+- } else if (s->bi_valid > 0) {
+- put_byte(s, (Byte)s->bi_buf);
+- }
+- s->bi_buf = 0;
+- s->bi_valid = 0;
+-#ifdef DEBUG_ZLIB
+- s->bits_sent = (s->bits_sent+7) & ~7;
+-#endif
+-}
+-
+diff -Nur linux/fs/jffs2/compressors/zlib_inflate/Makefile /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/Makefile
+--- linux/fs/jffs2/compressors/zlib_inflate/Makefile 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/Makefile 1970-01-01 07:00:00.000000000 +0700
+@@ -1,24 +0,0 @@
+-#
+-# This is a modified version of zlib, which does all memory
+-# allocation ahead of time.
+-#
+-# This is only the decompression, see zlib_deflate for the
+-# the compression
+-#
+-# Decompression needs to be serialized for each memory
+-# allocation.
+-#
+-# (The upsides of the simplification is that you can't get in
+-# any nasty situations wrt memory management, and that the
+-# uncompression can be done without blocking on allocation).
+-#
+-
+-O_TARGET := zlib_inflate.o
+-
+-export-objs := inflate_syms.o
+-
+-obj-y := infblock.o infcodes.o inffast.o inflate.o \
+- inftrees.o infutil.o inflate_syms.o
+-obj-m := $(O_TARGET)
+-
+-include $(TOPDIR)/Rules.make
+diff -Nur linux/fs/jffs2/compressors/zlib_inflate/infblock.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/infblock.c
+--- linux/fs/jffs2/compressors/zlib_inflate/infblock.c 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/infblock.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,355 +0,0 @@
+-/* infblock.c -- interpret and process block types to last block
+- * Copyright (C) 1995-1998 Mark Adler
+- * For conditions of distribution and use, see copyright notice in zlib.h
+- */
+-
+-#include <linux/zutil.h>
+-#include "infblock.h"
+-#include "inftrees.h"
+-#include "infcodes.h"
+-#include "infutil.h"
+-
+-struct inflate_codes_state;
+-
+-/* simplify the use of the inflate_huft type with some defines */
+-#define exop word.what.Exop
+-#define bits word.what.Bits
+-
+-/* Table for deflate from PKZIP's appnote.txt. */
+-local const uInt border[] = { /* Order of the bit length code lengths */
+- 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+-
+-/*
+- Notes beyond the 1.93a appnote.txt:
+-
+- 1. Distance pointers never point before the beginning of the output
+- stream.
+- 2. Distance pointers can point back across blocks, up to 32k away.
+- 3. There is an implied maximum of 7 bits for the bit length table and
+- 15 bits for the actual data.
+- 4. If only one code exists, then it is encoded using one bit. (Zero
+- would be more efficient, but perhaps a little confusing.) If two
+- codes exist, they are coded using one bit each (0 and 1).
+- 5. There is no way of sending zero distance codes--a dummy must be
+- sent if there are none. (History: a pre 2.0 version of PKZIP would
+- store blocks with no distance codes, but this was discovered to be
+- too harsh a criterion.) Valid only for 1.93a. 2.04c does allow
+- zero distance codes, which is sent as one code of zero bits in
+- length.
+- 6. There are up to 286 literal/length codes. Code 256 represents the
+- end-of-block. Note however that the static length tree defines
+- 288 codes just to fill out the Huffman codes. Codes 286 and 287
+- cannot be used though, since there is no length base or extra bits
+- defined for them. Similarily, there are up to 30 distance codes.
+- However, static trees define 32 codes (all 5 bits) to fill out the
+- Huffman codes, but the last two had better not show up in the data.
+- 7. Unzip can check dynamic Huffman blocks for complete code sets.
+- The exception is that a single code would not be complete (see #4).
+- 8. The five bits following the block type is really the number of
+- literal codes sent minus 257.
+- 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
+- (1+6+6). Therefore, to output three times the length, you output
+- three codes (1+1+1), whereas to output four times the same length,
+- you only need two codes (1+3). Hmm.
+- 10. In the tree reconstruction algorithm, Code = Code + Increment
+- only if BitLength(i) is not zero. (Pretty obvious.)
+- 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19)
+- 12. Note: length code 284 can represent 227-258, but length code 285
+- really is 258. The last length deserves its own, short code
+- since it gets used a lot in very redundant files. The length
+- 258 is special since 258 - 3 (the min match length) is 255.
+- 13. The literal/length and distance code bit lengths are read as a
+- single stream of lengths. It is possible (and advantageous) for
+- a repeat code (16, 17, or 18) to go across the boundary between
+- the two sets of lengths.
+- */
+-
+-
+-void zlib_inflate_blocks_reset(s, z, c)
+-inflate_blocks_statef *s;
+-z_streamp z;
+-uLongf *c;
+-{
+- if (c != Z_NULL)
+- *c = s->check;
+- if (s->mode == CODES)
+- zlib_inflate_codes_free(s->sub.decode.codes, z);
+- s->mode = TYPE;
+- s->bitk = 0;
+- s->bitb = 0;
+- s->read = s->write = s->window;
+- if (s->checkfn != Z_NULL)
+- z->adler = s->check = (*s->checkfn)(0L, (const Bytef *)Z_NULL, 0);
+-}
+-
+-inflate_blocks_statef *zlib_inflate_blocks_new(z, c, w)
+-z_streamp z;
+-check_func c;
+-uInt w;
+-{
+- inflate_blocks_statef *s;
+-
+- s = &WS(z)->working_blocks_state;
+- s->hufts = WS(z)->working_hufts;
+- s->window = WS(z)->working_window;
+- s->end = s->window + w;
+- s->checkfn = c;
+- s->mode = TYPE;
+- zlib_inflate_blocks_reset(s, z, Z_NULL);
+- return s;
+-}
+-
+-
+-int zlib_inflate_blocks(s, z, r)
+-inflate_blocks_statef *s;
+-z_streamp z;
+-int r;
+-{
+- uInt t; /* temporary storage */
+- uLong b; /* bit buffer */
+- uInt k; /* bits in bit buffer */
+- Bytef *p; /* input data pointer */
+- uInt n; /* bytes available there */
+- Bytef *q; /* output window write pointer */
+- uInt m; /* bytes to end of window or read pointer */
+-
+- /* copy input/output information to locals (UPDATE macro restores) */
+- LOAD
+-
+- /* process input based on current state */
+- while (1) switch (s->mode)
+- {
+- case TYPE:
+- NEEDBITS(3)
+- t = (uInt)b & 7;
+- s->last = t & 1;
+- switch (t >> 1)
+- {
+- case 0: /* stored */
+- DUMPBITS(3)
+- t = k & 7; /* go to byte boundary */
+- DUMPBITS(t)
+- s->mode = LENS; /* get length of stored block */
+- break;
+- case 1: /* fixed */
+- {
+- uInt bl, bd;
+- inflate_huft *tl, *td;
+-
+- zlib_inflate_trees_fixed(&bl, &bd, &tl, &td, z);
+- s->sub.decode.codes = zlib_inflate_codes_new(bl, bd, tl, td, z);
+- if (s->sub.decode.codes == Z_NULL)
+- {
+- r = Z_MEM_ERROR;
+- LEAVE
+- }
+- }
+- DUMPBITS(3)
+- s->mode = CODES;
+- break;
+- case 2: /* dynamic */
+- DUMPBITS(3)
+- s->mode = TABLE;
+- break;
+- case 3: /* illegal */
+- DUMPBITS(3)
+- s->mode = B_BAD;
+- z->msg = (char*)"invalid block type";
+- r = Z_DATA_ERROR;
+- LEAVE
+- }
+- break;
+- case LENS:
+- NEEDBITS(32)
+- if ((((~b) >> 16) & 0xffff) != (b & 0xffff))
+- {
+- s->mode = B_BAD;
+- z->msg = (char*)"invalid stored block lengths";
+- r = Z_DATA_ERROR;
+- LEAVE
+- }
+- s->sub.left = (uInt)b & 0xffff;
+- b = k = 0; /* dump bits */
+- s->mode = s->sub.left ? STORED : (s->last ? DRY : TYPE);
+- break;
+- case STORED:
+- if (n == 0)
+- LEAVE
+- NEEDOUT
+- t = s->sub.left;
+- if (t > n) t = n;
+- if (t > m) t = m;
+- memcpy(q, p, t);
+- p += t; n -= t;
+- q += t; m -= t;
+- if ((s->sub.left -= t) != 0)
+- break;
+- s->mode = s->last ? DRY : TYPE;
+- break;
+- case TABLE:
+- NEEDBITS(14)
+- s->sub.trees.table = t = (uInt)b & 0x3fff;
+-#ifndef PKZIP_BUG_WORKAROUND
+- if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29)
+- {
+- s->mode = B_BAD;
+- z->msg = (char*)"too many length or distance symbols";
+- r = Z_DATA_ERROR;
+- LEAVE
+- }
+-#endif
+- {
+- s->sub.trees.blens = WS(z)->working_blens;
+- }
+- DUMPBITS(14)
+- s->sub.trees.index = 0;
+- s->mode = BTREE;
+- case BTREE:
+- while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10))
+- {
+- NEEDBITS(3)
+- s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7;
+- DUMPBITS(3)
+- }
+- while (s->sub.trees.index < 19)
+- s->sub.trees.blens[border[s->sub.trees.index++]] = 0;
+- s->sub.trees.bb = 7;
+- t = zlib_inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb,
+- &s->sub.trees.tb, s->hufts, z);
+- if (t != Z_OK)
+- {
+- r = t;
+- if (r == Z_DATA_ERROR)
+- s->mode = B_BAD;
+- LEAVE
+- }
+- s->sub.trees.index = 0;
+- s->mode = DTREE;
+- case DTREE:
+- while (t = s->sub.trees.table,
+- s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))
+- {
+- inflate_huft *h;
+- uInt i, j, c;
+-
+- t = s->sub.trees.bb;
+- NEEDBITS(t)
+- h = s->sub.trees.tb + ((uInt)b & zlib_inflate_mask[t]);
+- t = h->bits;
+- c = h->base;
+- if (c < 16)
+- {
+- DUMPBITS(t)
+- s->sub.trees.blens[s->sub.trees.index++] = c;
+- }
+- else /* c == 16..18 */
+- {
+- i = c == 18 ? 7 : c - 14;
+- j = c == 18 ? 11 : 3;
+- NEEDBITS(t + i)
+- DUMPBITS(t)
+- j += (uInt)b & zlib_inflate_mask[i];
+- DUMPBITS(i)
+- i = s->sub.trees.index;
+- t = s->sub.trees.table;
+- if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||
+- (c == 16 && i < 1))
+- {
+- s->mode = B_BAD;
+- z->msg = (char*)"invalid bit length repeat";
+- r = Z_DATA_ERROR;
+- LEAVE
+- }
+- c = c == 16 ? s->sub.trees.blens[i - 1] : 0;
+- do {
+- s->sub.trees.blens[i++] = c;
+- } while (--j);
+- s->sub.trees.index = i;
+- }
+- }
+- s->sub.trees.tb = Z_NULL;
+- {
+- uInt bl, bd;
+- inflate_huft *tl, *td;
+- inflate_codes_statef *c;
+-
+- bl = 9; /* must be <= 9 for lookahead assumptions */
+- bd = 6; /* must be <= 9 for lookahead assumptions */
+- t = s->sub.trees.table;
+- t = zlib_inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f),
+- s->sub.trees.blens, &bl, &bd, &tl, &td,
+- s->hufts, z);
+- if (t != Z_OK)
+- {
+- if (t == (uInt)Z_DATA_ERROR)
+- s->mode = B_BAD;
+- r = t;
+- LEAVE
+- }
+- if ((c = zlib_inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL)
+- {
+- r = Z_MEM_ERROR;
+- LEAVE
+- }
+- s->sub.decode.codes = c;
+- }
+- s->mode = CODES;
+- case CODES:
+- UPDATE
+- if ((r = zlib_inflate_codes(s, z, r)) != Z_STREAM_END)
+- return zlib_inflate_flush(s, z, r);
+- r = Z_OK;
+- zlib_inflate_codes_free(s->sub.decode.codes, z);
+- LOAD
+- if (!s->last)
+- {
+- s->mode = TYPE;
+- break;
+- }
+- s->mode = DRY;
+- case DRY:
+- FLUSH
+- if (s->read != s->write)
+- LEAVE
+- s->mode = B_DONE;
+- case B_DONE:
+- r = Z_STREAM_END;
+- LEAVE
+- case B_BAD:
+- r = Z_DATA_ERROR;
+- LEAVE
+- default:
+- r = Z_STREAM_ERROR;
+- LEAVE
+- }
+-}
+-
+-
+-int zlib_inflate_blocks_free(s, z)
+-inflate_blocks_statef *s;
+-z_streamp z;
+-{
+- zlib_inflate_blocks_reset(s, z, Z_NULL);
+- return Z_OK;
+-}
+-
+-
+-void zlib_inflate_set_dictionary(s, d, n)
+-inflate_blocks_statef *s;
+-const Bytef *d;
+-uInt n;
+-{
+- memcpy(s->window, d, n);
+- s->read = s->write = s->window + n;
+-}
+-
+-
+-/* Returns true if inflate is currently at the end of a block generated
+- * by Z_SYNC_FLUSH or Z_FULL_FLUSH.
+- * IN assertion: s != Z_NULL
+- */
+-int zlib_inflate_blocks_sync_point(s)
+-inflate_blocks_statef *s;
+-{
+- return s->mode == LENS;
+-}
+diff -Nur linux/fs/jffs2/compressors/zlib_inflate/infblock.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/infblock.h
+--- linux/fs/jffs2/compressors/zlib_inflate/infblock.h 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/infblock.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,44 +0,0 @@
+-/* infblock.h -- header to use infblock.c
+- * Copyright (C) 1995-1998 Mark Adler
+- * For conditions of distribution and use, see copyright notice in zlib.h
+- */
+-
+-/* WARNING: this file should *not* be used by applications. It is
+- part of the implementation of the compression library and is
+- subject to change. Applications should only use zlib.h.
+- */
+-
+-#ifndef _INFBLOCK_H
+-#define _INFBLOCK_H
+-
+-struct inflate_blocks_state;
+-typedef struct inflate_blocks_state FAR inflate_blocks_statef;
+-
+-extern inflate_blocks_statef * zlib_inflate_blocks_new OF((
+- z_streamp z,
+- check_func c, /* check function */
+- uInt w)); /* window size */
+-
+-extern int zlib_inflate_blocks OF((
+- inflate_blocks_statef *,
+- z_streamp ,
+- int)); /* initial return code */
+-
+-extern void zlib_inflate_blocks_reset OF((
+- inflate_blocks_statef *,
+- z_streamp ,
+- uLongf *)); /* check value on output */
+-
+-extern int zlib_inflate_blocks_free OF((
+- inflate_blocks_statef *,
+- z_streamp));
+-
+-extern void zlib_inflate_set_dictionary OF((
+- inflate_blocks_statef *s,
+- const Bytef *d, /* dictionary */
+- uInt n)); /* dictionary length */
+-
+-extern int zlib_inflate_blocks_sync_point OF((
+- inflate_blocks_statef *s));
+-
+-#endif /* _INFBLOCK_H */
+diff -Nur linux/fs/jffs2/compressors/zlib_inflate/infcodes.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/infcodes.c
+--- linux/fs/jffs2/compressors/zlib_inflate/infcodes.c 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/infcodes.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,204 +0,0 @@
+-/* infcodes.c -- process literals and length/distance pairs
+- * Copyright (C) 1995-1998 Mark Adler
+- * For conditions of distribution and use, see copyright notice in zlib.h
+- */
+-
+-#include <linux/zutil.h>
+-#include "inftrees.h"
+-#include "infblock.h"
+-#include "infcodes.h"
+-#include "infutil.h"
+-#include "inffast.h"
+-
+-/* simplify the use of the inflate_huft type with some defines */
+-#define exop word.what.Exop
+-#define bits word.what.Bits
+-
+-inflate_codes_statef *zlib_inflate_codes_new(bl, bd, tl, td, z)
+-uInt bl, bd;
+-inflate_huft *tl;
+-inflate_huft *td; /* need separate declaration for Borland C++ */
+-z_streamp z;
+-{
+- inflate_codes_statef *c;
+-
+- c = &WS(z)->working_state;
+- {
+- c->mode = START;
+- c->lbits = (Byte)bl;
+- c->dbits = (Byte)bd;
+- c->ltree = tl;
+- c->dtree = td;
+- }
+- return c;
+-}
+-
+-
+-int zlib_inflate_codes(s, z, r)
+-inflate_blocks_statef *s;
+-z_streamp z;
+-int r;
+-{
+- uInt j; /* temporary storage */
+- inflate_huft *t; /* temporary pointer */
+- uInt e; /* extra bits or operation */
+- uLong b; /* bit buffer */
+- uInt k; /* bits in bit buffer */
+- Bytef *p; /* input data pointer */
+- uInt n; /* bytes available there */
+- Bytef *q; /* output window write pointer */
+- uInt m; /* bytes to end of window or read pointer */
+- Bytef *f; /* pointer to copy strings from */
+- inflate_codes_statef *c = s->sub.decode.codes; /* codes state */
+-
+- /* copy input/output information to locals (UPDATE macro restores) */
+- LOAD
+-
+- /* process input and output based on current state */
+- while (1) switch (c->mode)
+- { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
+- case START: /* x: set up for LEN */
+-#ifndef SLOW
+- if (m >= 258 && n >= 10)
+- {
+- UPDATE
+- r = zlib_inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z);
+- LOAD
+- if (r != Z_OK)
+- {
+- c->mode = r == Z_STREAM_END ? WASH : BADCODE;
+- break;
+- }
+- }
+-#endif /* !SLOW */
+- c->sub.code.need = c->lbits;
+- c->sub.code.tree = c->ltree;
+- c->mode = LEN;
+- case LEN: /* i: get length/literal/eob next */
+- j = c->sub.code.need;
+- NEEDBITS(j)
+- t = c->sub.code.tree + ((uInt)b & zlib_inflate_mask[j]);
+- DUMPBITS(t->bits)
+- e = (uInt)(t->exop);
+- if (e == 0) /* literal */
+- {
+- c->sub.lit = t->base;
+- c->mode = LIT;
+- break;
+- }
+- if (e & 16) /* length */
+- {
+- c->sub.copy.get = e & 15;
+- c->len = t->base;
+- c->mode = LENEXT;
+- break;
+- }
+- if ((e & 64) == 0) /* next table */
+- {
+- c->sub.code.need = e;
+- c->sub.code.tree = t + t->base;
+- break;
+- }
+- if (e & 32) /* end of block */
+- {
+- c->mode = WASH;
+- break;
+- }
+- c->mode = BADCODE; /* invalid code */
+- z->msg = (char*)"invalid literal/length code";
+- r = Z_DATA_ERROR;
+- LEAVE
+- case LENEXT: /* i: getting length extra (have base) */
+- j = c->sub.copy.get;
+- NEEDBITS(j)
+- c->len += (uInt)b & zlib_inflate_mask[j];
+- DUMPBITS(j)
+- c->sub.code.need = c->dbits;
+- c->sub.code.tree = c->dtree;
+- c->mode = DIST;
+- case DIST: /* i: get distance next */
+- j = c->sub.code.need;
+- NEEDBITS(j)
+- t = c->sub.code.tree + ((uInt)b & zlib_inflate_mask[j]);
+- DUMPBITS(t->bits)
+- e = (uInt)(t->exop);
+- if (e & 16) /* distance */
+- {
+- c->sub.copy.get = e & 15;
+- c->sub.copy.dist = t->base;
+- c->mode = DISTEXT;
+- break;
+- }
+- if ((e & 64) == 0) /* next table */
+- {
+- c->sub.code.need = e;
+- c->sub.code.tree = t + t->base;
+- break;
+- }
+- c->mode = BADCODE; /* invalid code */
+- z->msg = (char*)"invalid distance code";
+- r = Z_DATA_ERROR;
+- LEAVE
+- case DISTEXT: /* i: getting distance extra */
+- j = c->sub.copy.get;
+- NEEDBITS(j)
+- c->sub.copy.dist += (uInt)b & zlib_inflate_mask[j];
+- DUMPBITS(j)
+- c->mode = COPY;
+- case COPY: /* o: copying bytes in window, waiting for space */
+-#ifndef __TURBOC__ /* Turbo C bug for following expression */
+- f = (uInt)(q - s->window) < c->sub.copy.dist ?
+- s->end - (c->sub.copy.dist - (q - s->window)) :
+- q - c->sub.copy.dist;
+-#else
+- f = q - c->sub.copy.dist;
+- if ((uInt)(q - s->window) < c->sub.copy.dist)
+- f = s->end - (c->sub.copy.dist - (uInt)(q - s->window));
+-#endif
+- while (c->len)
+- {
+- NEEDOUT
+- OUTBYTE(*f++)
+- if (f == s->end)
+- f = s->window;
+- c->len--;
+- }
+- c->mode = START;
+- break;
+- case LIT: /* o: got literal, waiting for output space */
+- NEEDOUT
+- OUTBYTE(c->sub.lit)
+- c->mode = START;
+- break;
+- case WASH: /* o: got eob, possibly more output */
+- if (k > 7) /* return unused byte, if any */
+- {
+- k -= 8;
+- n++;
+- p--; /* can always return one */
+- }
+- FLUSH
+- if (s->read != s->write)
+- LEAVE
+- c->mode = END;
+- case END:
+- r = Z_STREAM_END;
+- LEAVE
+- case BADCODE: /* x: got error */
+- r = Z_DATA_ERROR;
+- LEAVE
+- default:
+- r = Z_STREAM_ERROR;
+- LEAVE
+- }
+-#ifdef NEED_DUMMY_RETURN
+- return Z_STREAM_ERROR; /* Some dumb compilers complain without this */
+-#endif
+-}
+-
+-
+-void zlib_inflate_codes_free(c, z)
+-inflate_codes_statef *c;
+-z_streamp z;
+-{
+-}
+diff -Nur linux/fs/jffs2/compressors/zlib_inflate/infcodes.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/infcodes.h
+--- linux/fs/jffs2/compressors/zlib_inflate/infcodes.h 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/infcodes.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,33 +0,0 @@
+-/* infcodes.h -- header to use infcodes.c
+- * Copyright (C) 1995-1998 Mark Adler
+- * For conditions of distribution and use, see copyright notice in zlib.h
+- */
+-
+-/* WARNING: this file should *not* be used by applications. It is
+- part of the implementation of the compression library and is
+- subject to change. Applications should only use zlib.h.
+- */
+-
+-#ifndef _INFCODES_H
+-#define _INFCODES_H
+-
+-#include "infblock.h"
+-
+-struct inflate_codes_state;
+-typedef struct inflate_codes_state FAR inflate_codes_statef;
+-
+-extern inflate_codes_statef *zlib_inflate_codes_new OF((
+- uInt, uInt,
+- inflate_huft *, inflate_huft *,
+- z_streamp ));
+-
+-extern int zlib_inflate_codes OF((
+- inflate_blocks_statef *,
+- z_streamp ,
+- int));
+-
+-extern void zlib_inflate_codes_free OF((
+- inflate_codes_statef *,
+- z_streamp ));
+-
+-#endif /* _INFCODES_H */
+diff -Nur linux/fs/jffs2/compressors/zlib_inflate/inffast.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/inffast.c
+--- linux/fs/jffs2/compressors/zlib_inflate/inffast.c 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/inffast.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,161 +0,0 @@
+-/* inffast.c -- process literals and length/distance pairs fast
+- * Copyright (C) 1995-1998 Mark Adler
+- * For conditions of distribution and use, see copyright notice in zlib.h
+- */
+-
+-#include <linux/zutil.h>
+-#include "inftrees.h"
+-#include "infblock.h"
+-#include "infcodes.h"
+-#include "infutil.h"
+-#include "inffast.h"
+-
+-struct inflate_codes_state;
+-
+-/* simplify the use of the inflate_huft type with some defines */
+-#define exop word.what.Exop
+-#define bits word.what.Bits
+-
+-/* macros for bit input with no checking and for returning unused bytes */
+-#define GRABBITS(j) {while(k<(j)){b|=((uLong)NEXTBYTE)<<k;k+=8;}}
+-#define UNGRAB {c=z->avail_in-n;c=(k>>3)<c?k>>3:c;n+=c;p-=c;k-=c<<3;}
+-
+-/* Called with number of bytes left to write in window at least 258
+- (the maximum string length) and number of input bytes available
+- at least ten. The ten bytes are six bytes for the longest length/
+- distance pair plus four bytes for overloading the bit buffer. */
+-
+-int zlib_inflate_fast(bl, bd, tl, td, s, z)
+-uInt bl, bd;
+-inflate_huft *tl;
+-inflate_huft *td; /* need separate declaration for Borland C++ */
+-inflate_blocks_statef *s;
+-z_streamp z;
+-{
+- inflate_huft *t; /* temporary pointer */
+- uInt e; /* extra bits or operation */
+- uLong b; /* bit buffer */
+- uInt k; /* bits in bit buffer */
+- Bytef *p; /* input data pointer */
+- uInt n; /* bytes available there */
+- Bytef *q; /* output window write pointer */
+- uInt m; /* bytes to end of window or read pointer */
+- uInt ml; /* mask for literal/length tree */
+- uInt md; /* mask for distance tree */
+- uInt c; /* bytes to copy */
+- uInt d; /* distance back to copy from */
+- Bytef *r; /* copy source pointer */
+-
+- /* load input, output, bit values */
+- LOAD
+-
+- /* initialize masks */
+- ml = zlib_inflate_mask[bl];
+- md = zlib_inflate_mask[bd];
+-
+- /* do until not enough input or output space for fast loop */
+- do { /* assume called with m >= 258 && n >= 10 */
+- /* get literal/length code */
+- GRABBITS(20) /* max bits for literal/length code */
+- if ((e = (t = tl + ((uInt)b & ml))->exop) == 0)
+- {
+- DUMPBITS(t->bits)
+- *q++ = (Byte)t->base;
+- m--;
+- continue;
+- }
+- do {
+- DUMPBITS(t->bits)
+- if (e & 16)
+- {
+- /* get extra bits for length */
+- e &= 15;
+- c = t->base + ((uInt)b & zlib_inflate_mask[e]);
+- DUMPBITS(e)
+-
+- /* decode distance base of block to copy */
+- GRABBITS(15); /* max bits for distance code */
+- e = (t = td + ((uInt)b & md))->exop;
+- do {
+- DUMPBITS(t->bits)
+- if (e & 16)
+- {
+- /* get extra bits to add to distance base */
+- e &= 15;
+- GRABBITS(e) /* get extra bits (up to 13) */
+- d = t->base + ((uInt)b & zlib_inflate_mask[e]);
+- DUMPBITS(e)
+-
+- /* do the copy */
+- m -= c;
+- if ((uInt)(q - s->window) >= d) /* offset before dest */
+- { /* just copy */
+- r = q - d;
+- *q++ = *r++; c--; /* minimum count is three, */
+- *q++ = *r++; c--; /* so unroll loop a little */
+- }
+- else /* else offset after destination */
+- {
+- e = d - (uInt)(q - s->window); /* bytes from offset to end */
+- r = s->end - e; /* pointer to offset */
+- if (c > e) /* if source crosses, */
+- {
+- c -= e; /* copy to end of window */
+- do {
+- *q++ = *r++;
+- } while (--e);
+- r = s->window; /* copy rest from start of window */
+- }
+- }
+- do { /* copy all or what's left */
+- *q++ = *r++;
+- } while (--c);
+- break;
+- }
+- else if ((e & 64) == 0)
+- {
+- t += t->base;
+- e = (t += ((uInt)b & zlib_inflate_mask[e]))->exop;
+- }
+- else
+- {
+- z->msg = (char*)"invalid distance code";
+- UNGRAB
+- UPDATE
+- return Z_DATA_ERROR;
+- }
+- } while (1);
+- break;
+- }
+- if ((e & 64) == 0)
+- {
+- t += t->base;
+- if ((e = (t += ((uInt)b & zlib_inflate_mask[e]))->exop) == 0)
+- {
+- DUMPBITS(t->bits)
+- *q++ = (Byte)t->base;
+- m--;
+- break;
+- }
+- }
+- else if (e & 32)
+- {
+- UNGRAB
+- UPDATE
+- return Z_STREAM_END;
+- }
+- else
+- {
+- z->msg = (char*)"invalid literal/length code";
+- UNGRAB
+- UPDATE
+- return Z_DATA_ERROR;
+- }
+- } while (1);
+- } while (m >= 258 && n >= 10);
+-
+- /* not enough input or output--restore pointers and return */
+- UNGRAB
+- UPDATE
+- return Z_OK;
+-}
+diff -Nur linux/fs/jffs2/compressors/zlib_inflate/inffast.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/inffast.h
+--- linux/fs/jffs2/compressors/zlib_inflate/inffast.h 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/inffast.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,17 +0,0 @@
+-/* inffast.h -- header to use inffast.c
+- * Copyright (C) 1995-1998 Mark Adler
+- * For conditions of distribution and use, see copyright notice in zlib.h
+- */
+-
+-/* WARNING: this file should *not* be used by applications. It is
+- part of the implementation of the compression library and is
+- subject to change. Applications should only use zlib.h.
+- */
+-
+-extern int zlib_inflate_fast OF((
+- uInt,
+- uInt,
+- inflate_huft *,
+- inflate_huft *,
+- inflate_blocks_statef *,
+- z_streamp ));
+diff -Nur linux/fs/jffs2/compressors/zlib_inflate/inffixed.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/inffixed.h
+--- linux/fs/jffs2/compressors/zlib_inflate/inffixed.h 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/inffixed.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,151 +0,0 @@
+-/* inffixed.h -- table for decoding fixed codes
+- * Generated automatically by the maketree.c program
+- */
+-
+-/* WARNING: this file should *not* be used by applications. It is
+- part of the implementation of the compression library and is
+- subject to change. Applications should only use zlib.h.
+- */
+-
+-local uInt fixed_bl = 9;
+-local uInt fixed_bd = 5;
+-local inflate_huft fixed_tl[] = {
+- {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
+- {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},192},
+- {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},160},
+- {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},224},
+- {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},144},
+- {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},208},
+- {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},176},
+- {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},240},
+- {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
+- {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},200},
+- {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},168},
+- {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},232},
+- {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},152},
+- {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},216},
+- {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},184},
+- {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},248},
+- {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
+- {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},196},
+- {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},164},
+- {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},228},
+- {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},148},
+- {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},212},
+- {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},180},
+- {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},244},
+- {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
+- {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},204},
+- {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},172},
+- {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},236},
+- {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},156},
+- {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},220},
+- {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},188},
+- {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},252},
+- {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
+- {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},194},
+- {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},162},
+- {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},226},
+- {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},146},
+- {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},210},
+- {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},178},
+- {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},242},
+- {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
+- {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},202},
+- {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},170},
+- {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},234},
+- {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},154},
+- {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},218},
+- {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},186},
+- {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},250},
+- {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
+- {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},198},
+- {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},166},
+- {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},230},
+- {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},150},
+- {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},214},
+- {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},182},
+- {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},246},
+- {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
+- {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},206},
+- {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},174},
+- {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},238},
+- {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},158},
+- {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},222},
+- {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},190},
+- {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},254},
+- {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115},
+- {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},193},
+- {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},161},
+- {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},225},
+- {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},145},
+- {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},209},
+- {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},177},
+- {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},241},
+- {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227},
+- {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},201},
+- {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},169},
+- {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},233},
+- {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},153},
+- {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},217},
+- {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},185},
+- {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},249},
+- {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163},
+- {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},197},
+- {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},165},
+- {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},229},
+- {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},149},
+- {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},213},
+- {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},181},
+- {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},245},
+- {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0},
+- {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},205},
+- {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},173},
+- {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},237},
+- {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},157},
+- {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},221},
+- {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},189},
+- {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},253},
+- {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131},
+- {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},195},
+- {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},163},
+- {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},227},
+- {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},147},
+- {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},211},
+- {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},179},
+- {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},243},
+- {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258},
+- {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},203},
+- {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},171},
+- {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},235},
+- {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},155},
+- {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},219},
+- {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},187},
+- {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},251},
+- {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195},
+- {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},199},
+- {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},167},
+- {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},231},
+- {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},151},
+- {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},215},
+- {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},183},
+- {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},247},
+- {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0},
+- {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},207},
+- {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},175},
+- {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},239},
+- {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},159},
+- {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},223},
+- {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},191},
+- {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},255}
+- };
+-local inflate_huft fixed_td[] = {
+- {{{80,5}},1}, {{{87,5}},257}, {{{83,5}},17}, {{{91,5}},4097},
+- {{{81,5}},5}, {{{89,5}},1025}, {{{85,5}},65}, {{{93,5}},16385},
+- {{{80,5}},3}, {{{88,5}},513}, {{{84,5}},33}, {{{92,5}},8193},
+- {{{82,5}},9}, {{{90,5}},2049}, {{{86,5}},129}, {{{192,5}},24577},
+- {{{80,5}},2}, {{{87,5}},385}, {{{83,5}},25}, {{{91,5}},6145},
+- {{{81,5}},7}, {{{89,5}},1537}, {{{85,5}},97}, {{{93,5}},24577},
+- {{{80,5}},4}, {{{88,5}},769}, {{{84,5}},49}, {{{92,5}},12289},
+- {{{82,5}},13}, {{{90,5}},3073}, {{{86,5}},193}, {{{192,5}},24577}
+- };
+diff -Nur linux/fs/jffs2/compressors/zlib_inflate/inflate.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/inflate.c
+--- linux/fs/jffs2/compressors/zlib_inflate/inflate.c 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/inflate.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,382 +0,0 @@
+-/* inflate.c -- zlib interface to inflate modules
+- * Copyright (C) 1995-1998 Mark Adler
+- * For conditions of distribution and use, see copyright notice in zlib.h
+- */
+-
+-#include <linux/module.h>
+-#include <linux/zutil.h>
+-#include "infblock.h"
+-#include "infutil.h"
+-
+-int ZEXPORT zlib_inflate_workspacesize(void)
+-{
+- return sizeof(struct inflate_workspace);
+-}
+-
+-
+-int ZEXPORT zlib_inflateReset(z)
+-z_streamp z;
+-{
+- if (z == Z_NULL || z->state == Z_NULL || z->workspace == Z_NULL)
+- return Z_STREAM_ERROR;
+- z->total_in = z->total_out = 0;
+- z->msg = Z_NULL;
+- z->state->mode = z->state->nowrap ? BLOCKS : METHOD;
+- zlib_inflate_blocks_reset(z->state->blocks, z, Z_NULL);
+- return Z_OK;
+-}
+-
+-
+-int ZEXPORT zlib_inflateEnd(z)
+-z_streamp z;
+-{
+- if (z == Z_NULL || z->state == Z_NULL || z->workspace == Z_NULL)
+- return Z_STREAM_ERROR;
+- if (z->state->blocks != Z_NULL)
+- zlib_inflate_blocks_free(z->state->blocks, z);
+- z->state = Z_NULL;
+- return Z_OK;
+-}
+-
+-
+-int ZEXPORT zlib_inflateInit2_(z, w, version, stream_size)
+-z_streamp z;
+-int w;
+-const char *version;
+-int stream_size;
+-{
+- if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
+- stream_size != sizeof(z_stream) || z->workspace == Z_NULL)
+- return Z_VERSION_ERROR;
+-
+- /* initialize state */
+- if (z == Z_NULL)
+- return Z_STREAM_ERROR;
+- z->msg = Z_NULL;
+- z->state = &WS(z)->internal_state;
+- z->state->blocks = Z_NULL;
+-
+- /* handle undocumented nowrap option (no zlib header or check) */
+- z->state->nowrap = 0;
+- if (w < 0)
+- {
+- w = - w;
+- z->state->nowrap = 1;
+- }
+-
+- /* set window size */
+- if (w < 8 || w > 15)
+- {
+- zlib_inflateEnd(z);
+- return Z_STREAM_ERROR;
+- }
+- z->state->wbits = (uInt)w;
+-
+- /* create inflate_blocks state */
+- if ((z->state->blocks =
+- zlib_inflate_blocks_new(z, z->state->nowrap ? Z_NULL : zlib_adler32, (uInt)1 << w))
+- == Z_NULL)
+- {
+- zlib_inflateEnd(z);
+- return Z_MEM_ERROR;
+- }
+-
+- /* reset state */
+- zlib_inflateReset(z);
+- return Z_OK;
+-}
+-
+-
+-/*
+- * At the end of a Deflate-compressed PPP packet, we expect to have seen
+- * a `stored' block type value but not the (zero) length bytes.
+- */
+-static int zlib_inflate_packet_flush(inflate_blocks_statef *s)
+-{
+- if (s->mode != LENS)
+- return Z_DATA_ERROR;
+- s->mode = TYPE;
+- return Z_OK;
+-}
+-
+-
+-int ZEXPORT zlib_inflateInit_(z, version, stream_size)
+-z_streamp z;
+-const char *version;
+-int stream_size;
+-{
+- return zlib_inflateInit2_(z, DEF_WBITS, version, stream_size);
+-}
+-
+-#undef NEEDBYTE
+-#undef NEXTBYTE
+-#define NEEDBYTE {if(z->avail_in==0)goto empty;r=trv;}
+-#define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
+-
+-int ZEXPORT zlib_inflate(z, f)
+-z_streamp z;
+-int f;
+-{
+- int r, trv;
+- uInt b;
+-
+- if (z == Z_NULL || z->state == Z_NULL || z->next_in == Z_NULL)
+- return Z_STREAM_ERROR;
+- trv = f == Z_FINISH ? Z_BUF_ERROR : Z_OK;
+- r = Z_BUF_ERROR;
+- while (1) switch (z->state->mode)
+- {
+- case METHOD:
+- NEEDBYTE
+- if (((z->state->sub.method = NEXTBYTE) & 0xf) != Z_DEFLATED)
+- {
+- z->state->mode = I_BAD;
+- z->msg = (char*)"unknown compression method";
+- z->state->sub.marker = 5; /* can't try inflateSync */
+- break;
+- }
+- if ((z->state->sub.method >> 4) + 8 > z->state->wbits)
+- {
+- z->state->mode = I_BAD;
+- z->msg = (char*)"invalid window size";
+- z->state->sub.marker = 5; /* can't try inflateSync */
+- break;
+- }
+- z->state->mode = FLAG;
+- case FLAG:
+- NEEDBYTE
+- b = NEXTBYTE;
+- if (((z->state->sub.method << 8) + b) % 31)
+- {
+- z->state->mode = I_BAD;
+- z->msg = (char*)"incorrect header check";
+- z->state->sub.marker = 5; /* can't try inflateSync */
+- break;
+- }
+- if (!(b & PRESET_DICT))
+- {
+- z->state->mode = BLOCKS;
+- break;
+- }
+- z->state->mode = DICT4;
+- case DICT4:
+- NEEDBYTE
+- z->state->sub.check.need = (uLong)NEXTBYTE << 24;
+- z->state->mode = DICT3;
+- case DICT3:
+- NEEDBYTE
+- z->state->sub.check.need += (uLong)NEXTBYTE << 16;
+- z->state->mode = DICT2;
+- case DICT2:
+- NEEDBYTE
+- z->state->sub.check.need += (uLong)NEXTBYTE << 8;
+- z->state->mode = DICT1;
+- case DICT1:
+- NEEDBYTE
+- z->state->sub.check.need += (uLong)NEXTBYTE;
+- z->adler = z->state->sub.check.need;
+- z->state->mode = DICT0;
+- return Z_NEED_DICT;
+- case DICT0:
+- z->state->mode = I_BAD;
+- z->msg = (char*)"need dictionary";
+- z->state->sub.marker = 0; /* can try inflateSync */
+- return Z_STREAM_ERROR;
+- case BLOCKS:
+- r = zlib_inflate_blocks(z->state->blocks, z, r);
+- if (f == Z_PACKET_FLUSH && z->avail_in == 0 && z->avail_out != 0)
+- r = zlib_inflate_packet_flush(z->state->blocks);
+- if (r == Z_DATA_ERROR)
+- {
+- z->state->mode = I_BAD;
+- z->state->sub.marker = 0; /* can try inflateSync */
+- break;
+- }
+- if (r == Z_OK)
+- r = trv;
+- if (r != Z_STREAM_END)
+- return r;
+- r = trv;
+- zlib_inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was);
+- if (z->state->nowrap)
+- {
+- z->state->mode = I_DONE;
+- break;
+- }
+- z->state->mode = CHECK4;
+- case CHECK4:
+- NEEDBYTE
+- z->state->sub.check.need = (uLong)NEXTBYTE << 24;
+- z->state->mode = CHECK3;
+- case CHECK3:
+- NEEDBYTE
+- z->state->sub.check.need += (uLong)NEXTBYTE << 16;
+- z->state->mode = CHECK2;
+- case CHECK2:
+- NEEDBYTE
+- z->state->sub.check.need += (uLong)NEXTBYTE << 8;
+- z->state->mode = CHECK1;
+- case CHECK1:
+- NEEDBYTE
+- z->state->sub.check.need += (uLong)NEXTBYTE;
+-
+- if (z->state->sub.check.was != z->state->sub.check.need)
+- {
+- z->state->mode = I_BAD;
+- z->msg = (char*)"incorrect data check";
+- z->state->sub.marker = 5; /* can't try inflateSync */
+- break;
+- }
+- z->state->mode = I_DONE;
+- case I_DONE:
+- return Z_STREAM_END;
+- case I_BAD:
+- return Z_DATA_ERROR;
+- default:
+- return Z_STREAM_ERROR;
+- }
+- empty:
+- if (f != Z_PACKET_FLUSH)
+- return r;
+- z->state->mode = I_BAD;
+- z->msg = (char *)"need more for packet flush";
+- z->state->sub.marker = 0; /* can try inflateSync */
+- return Z_DATA_ERROR;
+-}
+-
+-
+-int ZEXPORT zlib_inflateSync(z)
+-z_streamp z;
+-{
+- uInt n; /* number of bytes to look at */
+- Bytef *p; /* pointer to bytes */
+- uInt m; /* number of marker bytes found in a row */
+- uLong r, w; /* temporaries to save total_in and total_out */
+-
+- /* set up */
+- if (z == Z_NULL || z->state == Z_NULL)
+- return Z_STREAM_ERROR;
+- if (z->state->mode != I_BAD)
+- {
+- z->state->mode = I_BAD;
+- z->state->sub.marker = 0;
+- }
+- if ((n = z->avail_in) == 0)
+- return Z_BUF_ERROR;
+- p = z->next_in;
+- m = z->state->sub.marker;
+-
+- /* search */
+- while (n && m < 4)
+- {
+- static const Byte mark[4] = {0, 0, 0xff, 0xff};
+- if (*p == mark[m])
+- m++;
+- else if (*p)
+- m = 0;
+- else
+- m = 4 - m;
+- p++, n--;
+- }
+-
+- /* restore */
+- z->total_in += p - z->next_in;
+- z->next_in = p;
+- z->avail_in = n;
+- z->state->sub.marker = m;
+-
+- /* return no joy or set up to restart on a new block */
+- if (m != 4)
+- return Z_DATA_ERROR;
+- r = z->total_in; w = z->total_out;
+- zlib_inflateReset(z);
+- z->total_in = r; z->total_out = w;
+- z->state->mode = BLOCKS;
+- return Z_OK;
+-}
+-
+-
+-/* Returns true if inflate is currently at the end of a block generated
+- * by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
+- * implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH
+- * but removes the length bytes of the resulting empty stored block. When
+- * decompressing, PPP checks that at the end of input packet, inflate is
+- * waiting for these length bytes.
+- */
+-int ZEXPORT zlib_inflateSyncPoint(z)
+-z_streamp z;
+-{
+- if (z == Z_NULL || z->state == Z_NULL || z->state->blocks == Z_NULL)
+- return Z_STREAM_ERROR;
+- return zlib_inflate_blocks_sync_point(z->state->blocks);
+-}
+-
+-/*
+- * This subroutine adds the data at next_in/avail_in to the output history
+- * without performing any output. The output buffer must be "caught up";
+- * i.e. no pending output (hence s->read equals s->write), and the state must
+- * be BLOCKS (i.e. we should be willing to see the start of a series of
+- * BLOCKS). On exit, the output will also be caught up, and the checksum
+- * will have been updated if need be.
+- */
+-static int zlib_inflate_addhistory(inflate_blocks_statef *s,
+- z_stream *z)
+-{
+- uLong b; /* bit buffer */ /* NOT USED HERE */
+- uInt k; /* bits in bit buffer */ /* NOT USED HERE */
+- uInt t; /* temporary storage */
+- Bytef *p; /* input data pointer */
+- uInt n; /* bytes available there */
+- Bytef *q; /* output window write pointer */
+- uInt m; /* bytes to end of window or read pointer */
+-
+- if (s->read != s->write)
+- return Z_STREAM_ERROR;
+- if (s->mode != TYPE)
+- return Z_DATA_ERROR;
+-
+- /* we're ready to rock */
+- LOAD
+- /* while there is input ready, copy to output buffer, moving
+- * pointers as needed.
+- */
+- while (n) {
+- t = n; /* how many to do */
+- /* is there room until end of buffer? */
+- if (t > m) t = m;
+- /* update check information */
+- if (s->checkfn != Z_NULL)
+- s->check = (*s->checkfn)(s->check, q, t);
+- memcpy(q, p, t);
+- q += t;
+- p += t;
+- n -= t;
+- z->total_out += t;
+- s->read = q; /* drag read pointer forward */
+-/* WWRAP */ /* expand WWRAP macro by hand to handle s->read */
+- if (q == s->end) {
+- s->read = q = s->window;
+- m = WAVAIL;
+- }
+- }
+- UPDATE
+- return Z_OK;
+-}
+-
+-
+-/*
+- * This subroutine adds the data at next_in/avail_in to the output history
+- * without performing any output. The output buffer must be "caught up";
+- * i.e. no pending output (hence s->read equals s->write), and the state must
+- * be BLOCKS (i.e. we should be willing to see the start of a series of
+- * BLOCKS). On exit, the output will also be caught up, and the checksum
+- * will have been updated if need be.
+- */
+-
+-int ZEXPORT zlib_inflateIncomp(z)
+-z_stream *z;
+-{
+- if (z->state->mode != BLOCKS)
+- return Z_DATA_ERROR;
+- return zlib_inflate_addhistory(z->state->blocks, z);
+-}
+diff -Nur linux/fs/jffs2/compressors/zlib_inflate/inflate_syms.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/inflate_syms.c
+--- linux/fs/jffs2/compressors/zlib_inflate/inflate_syms.c 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/inflate_syms.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,22 +0,0 @@
+-/*
+- * linux/lib/zlib_inflate/inflate_syms.c
+- *
+- * Exported symbols for the inflate functionality.
+- *
+- */
+-
+-#include <linux/module.h>
+-#include <linux/init.h>
+-
+-#include <linux/zlib.h>
+-
+-EXPORT_SYMBOL(zlib_inflate_workspacesize);
+-EXPORT_SYMBOL(zlib_inflate);
+-EXPORT_SYMBOL(zlib_inflateInit_);
+-EXPORT_SYMBOL(zlib_inflateInit2_);
+-EXPORT_SYMBOL(zlib_inflateEnd);
+-EXPORT_SYMBOL(zlib_inflateSync);
+-EXPORT_SYMBOL(zlib_inflateReset);
+-EXPORT_SYMBOL(zlib_inflateSyncPoint);
+-EXPORT_SYMBOL(zlib_inflateIncomp);
+-MODULE_LICENSE("GPL");
+diff -Nur linux/fs/jffs2/compressors/zlib_inflate/inftrees.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/inftrees.c
+--- linux/fs/jffs2/compressors/zlib_inflate/inftrees.c 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/inftrees.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,391 +0,0 @@
+-/* inftrees.c -- generate Huffman trees for efficient decoding
+- * Copyright (C) 1995-1998 Mark Adler
+- * For conditions of distribution and use, see copyright notice in zlib.h
+- */
+-
+-#include <linux/zutil.h>
+-#include "inftrees.h"
+-#include "infutil.h"
+-
+-static const char inflate_copyright[] =
+- " inflate 1.1.3 Copyright 1995-1998 Mark Adler ";
+-/*
+- If you use the zlib library in a product, an acknowledgment is welcome
+- in the documentation of your product. If for some reason you cannot
+- include such an acknowledgment, I would appreciate that you keep this
+- copyright string in the executable of your product.
+- */
+-struct internal_state;
+-
+-/* simplify the use of the inflate_huft type with some defines */
+-#define exop word.what.Exop
+-#define bits word.what.Bits
+-
+-
+-local int huft_build OF((
+- uIntf *, /* code lengths in bits */
+- uInt, /* number of codes */
+- uInt, /* number of "simple" codes */
+- const uIntf *, /* list of base values for non-simple codes */
+- const uIntf *, /* list of extra bits for non-simple codes */
+- inflate_huft * FAR*,/* result: starting table */
+- uIntf *, /* maximum lookup bits (returns actual) */
+- inflate_huft *, /* space for trees */
+- uInt *, /* hufts used in space */
+- uIntf * )); /* space for values */
+-
+-/* Tables for deflate from PKZIP's appnote.txt. */
+-local const uInt cplens[31] = { /* Copy lengths for literal codes 257..285 */
+- 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
+- 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
+- /* see note #13 above about 258 */
+-local const uInt cplext[31] = { /* Extra bits for literal codes 257..285 */
+- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
+- 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112}; /* 112==invalid */
+-local const uInt cpdist[30] = { /* Copy offsets for distance codes 0..29 */
+- 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
+- 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
+- 8193, 12289, 16385, 24577};
+-local const uInt cpdext[30] = { /* Extra bits for distance codes */
+- 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
+- 7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
+- 12, 12, 13, 13};
+-
+-/*
+- Huffman code decoding is performed using a multi-level table lookup.
+- The fastest way to decode is to simply build a lookup table whose
+- size is determined by the longest code. However, the time it takes
+- to build this table can also be a factor if the data being decoded
+- is not very long. The most common codes are necessarily the
+- shortest codes, so those codes dominate the decoding time, and hence
+- the speed. The idea is you can have a shorter table that decodes the
+- shorter, more probable codes, and then point to subsidiary tables for
+- the longer codes. The time it costs to decode the longer codes is
+- then traded against the time it takes to make longer tables.
+-
+- This results of this trade are in the variables lbits and dbits
+- below. lbits is the number of bits the first level table for literal/
+- length codes can decode in one step, and dbits is the same thing for
+- the distance codes. Subsequent tables are also less than or equal to
+- those sizes. These values may be adjusted either when all of the
+- codes are shorter than that, in which case the longest code length in
+- bits is used, or when the shortest code is *longer* than the requested
+- table size, in which case the length of the shortest code in bits is
+- used.
+-
+- There are two different values for the two tables, since they code a
+- different number of possibilities each. The literal/length table
+- codes 286 possible values, or in a flat code, a little over eight
+- bits. The distance table codes 30 possible values, or a little less
+- than five bits, flat. The optimum values for speed end up being
+- about one bit more than those, so lbits is 8+1 and dbits is 5+1.
+- The optimum values may differ though from machine to machine, and
+- possibly even between compilers. Your mileage may vary.
+- */
+-
+-
+-/* If BMAX needs to be larger than 16, then h and x[] should be uLong. */
+-#define BMAX 15 /* maximum bit length of any code */
+-
+-local int huft_build(b, n, s, d, e, t, m, hp, hn, v)
+-uIntf *b; /* code lengths in bits (all assumed <= BMAX) */
+-uInt n; /* number of codes (assumed <= 288) */
+-uInt s; /* number of simple-valued codes (0..s-1) */
+-const uIntf *d; /* list of base values for non-simple codes */
+-const uIntf *e; /* list of extra bits for non-simple codes */
+-inflate_huft * FAR *t; /* result: starting table */
+-uIntf *m; /* maximum lookup bits, returns actual */
+-inflate_huft *hp; /* space for trees */
+-uInt *hn; /* hufts used in space */
+-uIntf *v; /* working area: values in order of bit length */
+-/* Given a list of code lengths and a maximum table size, make a set of
+- tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR
+- if the given code set is incomplete (the tables are still built in this
+- case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of
+- lengths), or Z_MEM_ERROR if not enough memory. */
+-{
+-
+- uInt a; /* counter for codes of length k */
+- uInt c[BMAX+1]; /* bit length count table */
+- uInt f; /* i repeats in table every f entries */
+- int g; /* maximum code length */
+- int h; /* table level */
+- register uInt i; /* counter, current code */
+- register uInt j; /* counter */
+- register int k; /* number of bits in current code */
+- int l; /* bits per table (returned in m) */
+- uInt mask; /* (1 << w) - 1, to avoid cc -O bug on HP */
+- register uIntf *p; /* pointer into c[], b[], or v[] */
+- inflate_huft *q; /* points to current table */
+- struct inflate_huft_s r; /* table entry for structure assignment */
+- inflate_huft *u[BMAX]; /* table stack */
+- register int w; /* bits before this table == (l * h) */
+- uInt x[BMAX+1]; /* bit offsets, then code stack */
+- uIntf *xp; /* pointer into x */
+- int y; /* number of dummy codes added */
+- uInt z; /* number of entries in current table */
+-
+-
+- /* Generate counts for each bit length */
+- p = c;
+-#define C0 *p++ = 0;
+-#define C2 C0 C0 C0 C0
+-#define C4 C2 C2 C2 C2
+- C4 /* clear c[]--assume BMAX+1 is 16 */
+- p = b; i = n;
+- do {
+- c[*p++]++; /* assume all entries <= BMAX */
+- } while (--i);
+- if (c[0] == n) /* null input--all zero length codes */
+- {
+- *t = (inflate_huft *)Z_NULL;
+- *m = 0;
+- return Z_OK;
+- }
+-
+-
+- /* Find minimum and maximum length, bound *m by those */
+- l = *m;
+- for (j = 1; j <= BMAX; j++)
+- if (c[j])
+- break;
+- k = j; /* minimum code length */
+- if ((uInt)l < j)
+- l = j;
+- for (i = BMAX; i; i--)
+- if (c[i])
+- break;
+- g = i; /* maximum code length */
+- if ((uInt)l > i)
+- l = i;
+- *m = l;
+-
+-
+- /* Adjust last length count to fill out codes, if needed */
+- for (y = 1 << j; j < i; j++, y <<= 1)
+- if ((y -= c[j]) < 0)
+- return Z_DATA_ERROR;
+- if ((y -= c[i]) < 0)
+- return Z_DATA_ERROR;
+- c[i] += y;
+-
+-
+- /* Generate starting offsets into the value table for each length */
+- x[1] = j = 0;
+- p = c + 1; xp = x + 2;
+- while (--i) { /* note that i == g from above */
+- *xp++ = (j += *p++);
+- }
+-
+-
+- /* Make a table of values in order of bit lengths */
+- p = b; i = 0;
+- do {
+- if ((j = *p++) != 0)
+- v[x[j]++] = i;
+- } while (++i < n);
+- n = x[g]; /* set n to length of v */
+-
+-
+- /* Generate the Huffman codes and for each, make the table entries */
+- x[0] = i = 0; /* first Huffman code is zero */
+- p = v; /* grab values in bit order */
+- h = -1; /* no tables yet--level -1 */
+- w = -l; /* bits decoded == (l * h) */
+- u[0] = (inflate_huft *)Z_NULL; /* just to keep compilers happy */
+- q = (inflate_huft *)Z_NULL; /* ditto */
+- z = 0; /* ditto */
+-
+- /* go through the bit lengths (k already is bits in shortest code) */
+- for (; k <= g; k++)
+- {
+- a = c[k];
+- while (a--)
+- {
+- /* here i is the Huffman code of length k bits for value *p */
+- /* make tables up to required level */
+- while (k > w + l)
+- {
+- h++;
+- w += l; /* previous table always l bits */
+-
+- /* compute minimum size table less than or equal to l bits */
+- z = g - w;
+- z = z > (uInt)l ? l : z; /* table size upper limit */
+- if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */
+- { /* too few codes for k-w bit table */
+- f -= a + 1; /* deduct codes from patterns left */
+- xp = c + k;
+- if (j < z)
+- while (++j < z) /* try smaller tables up to z bits */
+- {
+- if ((f <<= 1) <= *++xp)
+- break; /* enough codes to use up j bits */
+- f -= *xp; /* else deduct codes from patterns */
+- }
+- }
+- z = 1 << j; /* table entries for j-bit table */
+-
+- /* allocate new table */
+- if (*hn + z > MANY) /* (note: doesn't matter for fixed) */
+- return Z_MEM_ERROR; /* not enough memory */
+- u[h] = q = hp + *hn;
+- *hn += z;
+-
+- /* connect to last table, if there is one */
+- if (h)
+- {
+- x[h] = i; /* save pattern for backing up */
+- r.bits = (Byte)l; /* bits to dump before this table */
+- r.exop = (Byte)j; /* bits in this table */
+- j = i >> (w - l);
+- r.base = (uInt)(q - u[h-1] - j); /* offset to this table */
+- u[h-1][j] = r; /* connect to last table */
+- }
+- else
+- *t = q; /* first table is returned result */
+- }
+-
+- /* set up table entry in r */
+- r.bits = (Byte)(k - w);
+- if (p >= v + n)
+- r.exop = 128 + 64; /* out of values--invalid code */
+- else if (*p < s)
+- {
+- r.exop = (Byte)(*p < 256 ? 0 : 32 + 64); /* 256 is end-of-block */
+- r.base = *p++; /* simple code is just the value */
+- }
+- else
+- {
+- r.exop = (Byte)(e[*p - s] + 16 + 64);/* non-simple--look up in lists */
+- r.base = d[*p++ - s];
+- }
+-
+- /* fill code-like entries with r */
+- f = 1 << (k - w);
+- for (j = i >> w; j < z; j += f)
+- q[j] = r;
+-
+- /* backwards increment the k-bit code i */
+- for (j = 1 << (k - 1); i & j; j >>= 1)
+- i ^= j;
+- i ^= j;
+-
+- /* backup over finished tables */
+- mask = (1 << w) - 1; /* needed on HP, cc -O bug */
+- while ((i & mask) != x[h])
+- {
+- h--; /* don't need to update q */
+- w -= l;
+- mask = (1 << w) - 1;
+- }
+- }
+- }
+-
+-
+- /* Return Z_BUF_ERROR if we were given an incomplete table */
+- return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
+-}
+-
+-
+-int zlib_inflate_trees_bits(c, bb, tb, hp, z)
+-uIntf *c; /* 19 code lengths */
+-uIntf *bb; /* bits tree desired/actual depth */
+-inflate_huft * FAR *tb; /* bits tree result */
+-inflate_huft *hp; /* space for trees */
+-z_streamp z; /* for messages */
+-{
+- int r;
+- uInt hn = 0; /* hufts used in space */
+- uIntf *v; /* work area for huft_build */
+-
+- v = WS(z)->tree_work_area_1;
+- r = huft_build(c, 19, 19, (uIntf*)Z_NULL, (uIntf*)Z_NULL,
+- tb, bb, hp, &hn, v);
+- if (r == Z_DATA_ERROR)
+- z->msg = (char*)"oversubscribed dynamic bit lengths tree";
+- else if (r == Z_BUF_ERROR || *bb == 0)
+- {
+- z->msg = (char*)"incomplete dynamic bit lengths tree";
+- r = Z_DATA_ERROR;
+- }
+- return r;
+-}
+-
+-int zlib_inflate_trees_dynamic(nl, nd, c, bl, bd, tl, td, hp, z)
+-uInt nl; /* number of literal/length codes */
+-uInt nd; /* number of distance codes */
+-uIntf *c; /* that many (total) code lengths */
+-uIntf *bl; /* literal desired/actual bit depth */
+-uIntf *bd; /* distance desired/actual bit depth */
+-inflate_huft * FAR *tl; /* literal/length tree result */
+-inflate_huft * FAR *td; /* distance tree result */
+-inflate_huft *hp; /* space for trees */
+-z_streamp z; /* for messages */
+-{
+- int r;
+- uInt hn = 0; /* hufts used in space */
+- uIntf *v; /* work area for huft_build */
+-
+- /* allocate work area */
+- v = WS(z)->tree_work_area_2;
+-
+- /* build literal/length tree */
+- r = huft_build(c, nl, 257, cplens, cplext, tl, bl, hp, &hn, v);
+- if (r != Z_OK || *bl == 0)
+- {
+- if (r == Z_DATA_ERROR)
+- z->msg = (char*)"oversubscribed literal/length tree";
+- else if (r != Z_MEM_ERROR)
+- {
+- z->msg = (char*)"incomplete literal/length tree";
+- r = Z_DATA_ERROR;
+- }
+- return r;
+- }
+-
+- /* build distance tree */
+- r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, hp, &hn, v);
+- if (r != Z_OK || (*bd == 0 && nl > 257))
+- {
+- if (r == Z_DATA_ERROR)
+- z->msg = (char*)"oversubscribed distance tree";
+- else if (r == Z_BUF_ERROR) {
+-#ifdef PKZIP_BUG_WORKAROUND
+- r = Z_OK;
+- }
+-#else
+- z->msg = (char*)"incomplete distance tree";
+- r = Z_DATA_ERROR;
+- }
+- else if (r != Z_MEM_ERROR)
+- {
+- z->msg = (char*)"empty distance tree with lengths";
+- r = Z_DATA_ERROR;
+- }
+- return r;
+-#endif
+- }
+-
+- /* done */
+- return Z_OK;
+-}
+-
+-
+-/* build fixed tables only once--keep them here */
+-#include "inffixed.h"
+-
+-
+-int zlib_inflate_trees_fixed(bl, bd, tl, td, z)
+-uIntf *bl; /* literal desired/actual bit depth */
+-uIntf *bd; /* distance desired/actual bit depth */
+-inflate_huft * FAR *tl; /* literal/length tree result */
+-inflate_huft * FAR *td; /* distance tree result */
+-z_streamp z; /* for memory allocation */
+-{
+- *bl = fixed_bl;
+- *bd = fixed_bd;
+- *tl = fixed_tl;
+- *td = fixed_td;
+- return Z_OK;
+-}
+diff -Nur linux/fs/jffs2/compressors/zlib_inflate/inftrees.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/inftrees.h
+--- linux/fs/jffs2/compressors/zlib_inflate/inftrees.h 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/inftrees.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,63 +0,0 @@
+-/* inftrees.h -- header to use inftrees.c
+- * Copyright (C) 1995-1998 Mark Adler
+- * For conditions of distribution and use, see copyright notice in zlib.h
+- */
+-
+-/* WARNING: this file should *not* be used by applications. It is
+- part of the implementation of the compression library and is
+- subject to change. Applications should only use zlib.h.
+- */
+-
+-/* Huffman code lookup table entry--this entry is four bytes for machines
+- that have 16-bit pointers (e.g. PC's in the small or medium model). */
+-
+-#ifndef _INFTREES_H
+-#define _INFTREES_H
+-
+-typedef struct inflate_huft_s FAR inflate_huft;
+-
+-struct inflate_huft_s {
+- union {
+- struct {
+- Byte Exop; /* number of extra bits or operation */
+- Byte Bits; /* number of bits in this code or subcode */
+- } what;
+- uInt pad; /* pad structure to a power of 2 (4 bytes for */
+- } word; /* 16-bit, 8 bytes for 32-bit int's) */
+- uInt base; /* literal, length base, distance base,
+- or table offset */
+-};
+-
+-/* Maximum size of dynamic tree. The maximum found in a long but non-
+- exhaustive search was 1004 huft structures (850 for length/literals
+- and 154 for distances, the latter actually the result of an
+- exhaustive search). The actual maximum is not known, but the
+- value below is more than safe. */
+-#define MANY 1440
+-
+-extern int zlib_inflate_trees_bits OF((
+- uIntf *, /* 19 code lengths */
+- uIntf *, /* bits tree desired/actual depth */
+- inflate_huft * FAR *, /* bits tree result */
+- inflate_huft *, /* space for trees */
+- z_streamp)); /* for messages */
+-
+-extern int zlib_inflate_trees_dynamic OF((
+- uInt, /* number of literal/length codes */
+- uInt, /* number of distance codes */
+- uIntf *, /* that many (total) code lengths */
+- uIntf *, /* literal desired/actual bit depth */
+- uIntf *, /* distance desired/actual bit depth */
+- inflate_huft * FAR *, /* literal/length tree result */
+- inflate_huft * FAR *, /* distance tree result */
+- inflate_huft *, /* space for trees */
+- z_streamp)); /* for messages */
+-
+-extern int zlib_inflate_trees_fixed OF((
+- uIntf *, /* literal desired/actual bit depth */
+- uIntf *, /* distance desired/actual bit depth */
+- inflate_huft * FAR *, /* literal/length tree result */
+- inflate_huft * FAR *, /* distance tree result */
+- z_streamp)); /* for memory allocation */
+-
+-#endif /* _INFTREES_H */
+diff -Nur linux/fs/jffs2/compressors/zlib_inflate/infutil.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/infutil.c
+--- linux/fs/jffs2/compressors/zlib_inflate/infutil.c 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/infutil.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,87 +0,0 @@
+-/* inflate_util.c -- data and routines common to blocks and codes
+- * Copyright (C) 1995-1998 Mark Adler
+- * For conditions of distribution and use, see copyright notice in zlib.h
+- */
+-
+-#include <linux/zutil.h>
+-#include "infblock.h"
+-#include "inftrees.h"
+-#include "infcodes.h"
+-#include "infutil.h"
+-
+-struct inflate_codes_state;
+-
+-/* And'ing with mask[n] masks the lower n bits */
+-uInt zlib_inflate_mask[17] = {
+- 0x0000,
+- 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
+- 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
+-};
+-
+-
+-/* copy as much as possible from the sliding window to the output area */
+-int zlib_inflate_flush(s, z, r)
+-inflate_blocks_statef *s;
+-z_streamp z;
+-int r;
+-{
+- uInt n;
+- Bytef *p;
+- Bytef *q;
+-
+- /* local copies of source and destination pointers */
+- p = z->next_out;
+- q = s->read;
+-
+- /* compute number of bytes to copy as far as end of window */
+- n = (uInt)((q <= s->write ? s->write : s->end) - q);
+- if (n > z->avail_out) n = z->avail_out;
+- if (n && r == Z_BUF_ERROR) r = Z_OK;
+-
+- /* update counters */
+- z->avail_out -= n;
+- z->total_out += n;
+-
+- /* update check information */
+- if (s->checkfn != Z_NULL)
+- z->adler = s->check = (*s->checkfn)(s->check, q, n);
+-
+- /* copy as far as end of window */
+- memcpy(p, q, n);
+- p += n;
+- q += n;
+-
+- /* see if more to copy at beginning of window */
+- if (q == s->end)
+- {
+- /* wrap pointers */
+- q = s->window;
+- if (s->write == s->end)
+- s->write = s->window;
+-
+- /* compute bytes to copy */
+- n = (uInt)(s->write - q);
+- if (n > z->avail_out) n = z->avail_out;
+- if (n && r == Z_BUF_ERROR) r = Z_OK;
+-
+- /* update counters */
+- z->avail_out -= n;
+- z->total_out += n;
+-
+- /* update check information */
+- if (s->checkfn != Z_NULL)
+- z->adler = s->check = (*s->checkfn)(s->check, q, n);
+-
+- /* copy */
+- memcpy(p, q, n);
+- p += n;
+- q += n;
+- }
+-
+- /* update pointers */
+- z->next_out = p;
+- s->read = q;
+-
+- /* done */
+- return r;
+-}
+diff -Nur linux/fs/jffs2/compressors/zlib_inflate/infutil.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/infutil.h
+--- linux/fs/jffs2/compressors/zlib_inflate/infutil.h 2003-05-13 16:19:12.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/compressors/zlib_inflate/infutil.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,197 +0,0 @@
+-/* infutil.h -- types and macros common to blocks and codes
+- * Copyright (C) 1995-1998 Mark Adler
+- * For conditions of distribution and use, see copyright notice in zlib.h
+- */
+-
+-/* WARNING: this file should *not* be used by applications. It is
+- part of the implementation of the compression library and is
+- subject to change. Applications should only use zlib.h.
+- */
+-
+-#ifndef _INFUTIL_H
+-#define _INFUTIL_H
+-
+-#include <linux/zconf.h>
+-#include "inftrees.h"
+-#include "infcodes.h"
+-
+-typedef enum {
+- TYPE, /* get type bits (3, including end bit) */
+- LENS, /* get lengths for stored */
+- STORED, /* processing stored block */
+- TABLE, /* get table lengths */
+- BTREE, /* get bit lengths tree for a dynamic block */
+- DTREE, /* get length, distance trees for a dynamic block */
+- CODES, /* processing fixed or dynamic block */
+- DRY, /* output remaining window bytes */
+- B_DONE, /* finished last block, done */
+- B_BAD} /* got a data error--stuck here */
+-inflate_block_mode;
+-
+-/* inflate blocks semi-private state */
+-struct inflate_blocks_state {
+-
+- /* mode */
+- inflate_block_mode mode; /* current inflate_block mode */
+-
+- /* mode dependent information */
+- union {
+- uInt left; /* if STORED, bytes left to copy */
+- struct {
+- uInt table; /* table lengths (14 bits) */
+- uInt index; /* index into blens (or border) */
+- uIntf *blens; /* bit lengths of codes */
+- uInt bb; /* bit length tree depth */
+- inflate_huft *tb; /* bit length decoding tree */
+- } trees; /* if DTREE, decoding info for trees */
+- struct {
+- inflate_codes_statef
+- *codes;
+- } decode; /* if CODES, current state */
+- } sub; /* submode */
+- uInt last; /* true if this block is the last block */
+-
+- /* mode independent information */
+- uInt bitk; /* bits in bit buffer */
+- uLong bitb; /* bit buffer */
+- inflate_huft *hufts; /* single malloc for tree space */
+- Bytef *window; /* sliding window */
+- Bytef *end; /* one byte after sliding window */
+- Bytef *read; /* window read pointer */
+- Bytef *write; /* window write pointer */
+- check_func checkfn; /* check function */
+- uLong check; /* check on output */
+-
+-};
+-
+-
+-/* defines for inflate input/output */
+-/* update pointers and return */
+-#define UPDBITS {s->bitb=b;s->bitk=k;}
+-#define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;}
+-#define UPDOUT {s->write=q;}
+-#define UPDATE {UPDBITS UPDIN UPDOUT}
+-#define LEAVE {UPDATE return zlib_inflate_flush(s,z,r);}
+-/* get bytes and bits */
+-#define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;}
+-#define NEEDBYTE {if(n)r=Z_OK;else LEAVE}
+-#define NEXTBYTE (n--,*p++)
+-#define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<<k;k+=8;}}
+-#define DUMPBITS(j) {b>>=(j);k-=(j);}
+-/* output bytes */
+-#define WAVAIL (uInt)(q<s->read?s->read-q-1:s->end-q)
+-#define LOADOUT {q=s->write;m=(uInt)WAVAIL;}
+-#define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(uInt)WAVAIL;}}
+-#define FLUSH {UPDOUT r=zlib_inflate_flush(s,z,r); LOADOUT}
+-#define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;}
+-#define OUTBYTE(a) {*q++=(Byte)(a);m--;}
+-/* load local pointers */
+-#define LOAD {LOADIN LOADOUT}
+-
+-/* masks for lower bits (size given to avoid silly warnings with Visual C++) */
+-extern uInt zlib_inflate_mask[17];
+-
+-/* copy as much as possible from the sliding window to the output area */
+-extern int zlib_inflate_flush OF((
+- inflate_blocks_statef *,
+- z_streamp ,
+- int));
+-
+-/* inflate private state */
+-typedef enum {
+- METHOD, /* waiting for method byte */
+- FLAG, /* waiting for flag byte */
+- DICT4, /* four dictionary check bytes to go */
+- DICT3, /* three dictionary check bytes to go */
+- DICT2, /* two dictionary check bytes to go */
+- DICT1, /* one dictionary check byte to go */
+- DICT0, /* waiting for inflateSetDictionary */
+- BLOCKS, /* decompressing blocks */
+- CHECK4, /* four check bytes to go */
+- CHECK3, /* three check bytes to go */
+- CHECK2, /* two check bytes to go */
+- CHECK1, /* one check byte to go */
+- I_DONE, /* finished check, done */
+- I_BAD} /* got an error--stay here */
+-inflate_mode;
+-
+-struct internal_state {
+-
+- /* mode */
+- inflate_mode mode; /* current inflate mode */
+-
+- /* mode dependent information */
+- union {
+- uInt method; /* if FLAGS, method byte */
+- struct {
+- uLong was; /* computed check value */
+- uLong need; /* stream check value */
+- } check; /* if CHECK, check values to compare */
+- uInt marker; /* if BAD, inflateSync's marker bytes count */
+- } sub; /* submode */
+-
+- /* mode independent information */
+- int nowrap; /* flag for no wrapper */
+- uInt wbits; /* log2(window size) (8..15, defaults to 15) */
+- inflate_blocks_statef
+- *blocks; /* current inflate_blocks state */
+-
+-};
+-
+-/* inflate codes private state */
+-typedef enum { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
+- START, /* x: set up for LEN */
+- LEN, /* i: get length/literal/eob next */
+- LENEXT, /* i: getting length extra (have base) */
+- DIST, /* i: get distance next */
+- DISTEXT, /* i: getting distance extra */
+- COPY, /* o: copying bytes in window, waiting for space */
+- LIT, /* o: got literal, waiting for output space */
+- WASH, /* o: got eob, possibly still output waiting */
+- END, /* x: got eob and all data flushed */
+- BADCODE} /* x: got error */
+-inflate_codes_mode;
+-
+-struct inflate_codes_state {
+-
+- /* mode */
+- inflate_codes_mode mode; /* current inflate_codes mode */
+-
+- /* mode dependent information */
+- uInt len;
+- union {
+- struct {
+- inflate_huft *tree; /* pointer into tree */
+- uInt need; /* bits needed */
+- } code; /* if LEN or DIST, where in tree */
+- uInt lit; /* if LIT, literal */
+- struct {
+- uInt get; /* bits to get for extra */
+- uInt dist; /* distance back to copy from */
+- } copy; /* if EXT or COPY, where and how much */
+- } sub; /* submode */
+-
+- /* mode independent information */
+- Byte lbits; /* ltree bits decoded per branch */
+- Byte dbits; /* dtree bits decoder per branch */
+- inflate_huft *ltree; /* literal/length/eob tree */
+- inflate_huft *dtree; /* distance tree */
+-
+-};
+-
+-/* memory allocation for inflation */
+-
+-struct inflate_workspace {
+- inflate_codes_statef working_state;
+- struct inflate_blocks_state working_blocks_state;
+- struct internal_state internal_state;
+- unsigned int tree_work_area_1[19];
+- unsigned int tree_work_area_2[288];
+- unsigned working_blens[258 + 0x1f + 0x1f];
+- inflate_huft working_hufts[MANY];
+- unsigned char working_window[1 << MAX_WBITS];
+-};
+-
+-#define WS(z) ((struct inflate_workspace *)(z->workspace))
+-
+-#endif
+diff -Nur linux/fs/jffs2/comprtest.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/comprtest.c
+--- linux/fs/jffs2/comprtest.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/comprtest.c 2003-06-23 01:47:04.000000000 +0700
+@@ -1,4 +1,4 @@
+-/* $Id: comprtest.c,v 1.5 2002/01/03 15:20:44 dwmw2 Exp $ */
++/* $Id: comprtest.c,v 1.4 2001/02/21 14:03:20 dwmw2 Exp $ */
+
+ #include <linux/kernel.h>
+ #include <linux/string.h>
+@@ -266,13 +266,13 @@
+ static unsigned char decomprbuf[TESTDATA_LEN];
+
+ int jffs2_decompress(unsigned char comprtype, unsigned char *cdata_in,
+- unsigned char *data_out, uint32_t cdatalen, uint32_t datalen);
++ unsigned char *data_out, __u32 cdatalen, __u32 datalen);
+ unsigned char jffs2_compress(unsigned char *data_in, unsigned char *cpage_out,
+- uint32_t *datalen, uint32_t *cdatalen);
++ __u32 *datalen, __u32 *cdatalen);
+
+ int init_module(void ) {
+ unsigned char comprtype;
+- uint32_t c, d;
++ __u32 c, d;
+ int ret;
+
+ printk("Original data: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
+diff -Nur linux/fs/jffs2/crc32.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/crc32.c
+--- linux/fs/jffs2/crc32.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/crc32.c 2003-06-23 01:47:04.000000000 +0700
+@@ -37,11 +37,11 @@
+ * polynomial $edb88320
+ */
+
+-/* $Id: crc32.c,v 1.4 2002/01/03 15:20:44 dwmw2 Exp $ */
++/* $Id: crc32.c,v 1.3 2001/02/07 16:45:32 dwmw2 Exp $ */
+
+ #include "crc32.h"
+
+-const uint32_t crc32_table[256] = {
++const __u32 crc32_table[256] = {
+ 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
+ 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
+ 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
+diff -Nur linux/fs/jffs2/crc32.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/crc32.h
+--- linux/fs/jffs2/crc32.h 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/crc32.h 2003-06-23 01:47:04.000000000 +0700
+@@ -1,16 +1,16 @@
+ #ifndef CRC32_H
+ #define CRC32_H
+
+-/* $Id: crc32.h,v 1.4 2002/01/03 15:20:44 dwmw2 Exp $ */
++/* $Id: crc32.h,v 1.3 2001/02/26 14:44:37 dwmw2 Exp $ */
+
+ #include <linux/types.h>
+
+-extern const uint32_t crc32_table[256];
++extern const __u32 crc32_table[256];
+
+ /* Return a 32-bit CRC of the contents of the buffer. */
+
+-static inline uint32_t
+-crc32(uint32_t val, const void *ss, int len)
++static inline __u32
++crc32(__u32 val, const void *ss, int len)
+ {
+ const unsigned char *s = ss;
+ while (--len >= 0)
+diff -Nur linux/fs/jffs2/dir.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/dir.c
+--- linux/fs/jffs2/dir.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/dir.c 2003-06-23 01:47:04.000000000 +0700
+@@ -1,29 +1,49 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: dir.c,v 1.73 2002/08/26 15:00:51 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
++ *
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: dir.c,v 1.45.2.6 2002/06/20 23:54:48 dwmw2 Exp $
+ *
+- * ChangeLog:
+- * 10-Dec-2002 Lineo Japan, Inc. fix long filename bug
+ */
+
+ #include <linux/kernel.h>
+ #include <linux/slab.h>
+-#include <linux/sched.h>
+ #include <linux/fs.h>
+-#include "crc32.h"
+ #include <linux/mtd/compatmac.h> /* For completion */
+ #include <linux/jffs2.h>
+ #include <linux/jffs2_fs_i.h>
+ #include <linux/jffs2_fs_sb.h>
+-#include <linux/time.h>
+ #include "nodelist.h"
++#include "crc32.h"
+
+ static int jffs2_readdir (struct file *, void *, filldir_t);
+
+@@ -40,25 +60,25 @@
+
+ struct file_operations jffs2_dir_operations =
+ {
+- .read = generic_read_dir,
+- .readdir = jffs2_readdir,
+- .ioctl = jffs2_ioctl,
+- .fsync = jffs2_fsync
++ read: generic_read_dir,
++ readdir: jffs2_readdir,
++ ioctl: jffs2_ioctl,
++ fsync: jffs2_null_fsync
+ };
+
+
+ struct inode_operations jffs2_dir_inode_operations =
+ {
+- .create = jffs2_create,
+- .lookup = jffs2_lookup,
+- .link = jffs2_link,
+- .unlink = jffs2_unlink,
+- .symlink = jffs2_symlink,
+- .mkdir = jffs2_mkdir,
+- .rmdir = jffs2_rmdir,
+- .mknod = jffs2_mknod,
+- .rename = jffs2_rename,
+- .setattr = jffs2_setattr,
++ create: jffs2_create,
++ lookup: jffs2_lookup,
++ link: jffs2_link,
++ unlink: jffs2_unlink,
++ symlink: jffs2_symlink,
++ mkdir: jffs2_mkdir,
++ rmdir: jffs2_rmdir,
++ mknod: jffs2_mknod,
++ rename: jffs2_rename,
++ setattr: jffs2_setattr,
+ };
+
+ /***********************************************************************/
+@@ -73,14 +93,11 @@
+ struct jffs2_inode_info *dir_f;
+ struct jffs2_sb_info *c;
+ struct jffs2_full_dirent *fd = NULL, *fd_list;
+- uint32_t ino = 0;
++ __u32 ino = 0;
+ struct inode *inode = NULL;
+
+ D1(printk(KERN_DEBUG "jffs2_lookup()\n"));
+
+- if (target->d_name.len > JFFS2_MAX_NAME_LEN)
+- return ERR_PTR(-ENAMETOOLONG);
+-
+ dir_f = JFFS2_INODE_INFO(dir_i);
+ c = JFFS2_SB_INFO(dir_i->i_sb);
+
+@@ -136,9 +153,8 @@
+ offset++;
+ }
+ if (offset == 1) {
+- unsigned long pino = parent_ino(filp->f_dentry);
+- D1(printk(KERN_DEBUG "Dirent 1: \"..\", ino #%lu\n", pino));
+- if (filldir(dirent, "..", 2, 1, pino, DT_DIR) < 0)
++ D1(printk(KERN_DEBUG "Dirent 1: \"..\", ino #%lu\n", filp->f_dentry->d_parent->d_inode->i_ino));
++ if (filldir(dirent, "..", 2, 1, filp->f_dentry->d_parent->d_inode->i_ino, DT_DIR) < 0)
+ goto out;
+ offset++;
+ }
+@@ -172,13 +188,18 @@
+
+ /***********************************************************************/
+
+-
+ static int jffs2_create(struct inode *dir_i, struct dentry *dentry, int mode)
+ {
+- struct jffs2_raw_inode *ri;
+ struct jffs2_inode_info *f, *dir_f;
+ struct jffs2_sb_info *c;
+ struct inode *inode;
++ struct jffs2_raw_inode *ri;
++ struct jffs2_raw_dirent *rd;
++ struct jffs2_full_dnode *fn;
++ struct jffs2_full_dirent *fd;
++ int namelen;
++ __u32 alloclen, phys_ofs;
++ __u32 writtenlen;
+ int ret;
+
+ ri = jffs2_alloc_raw_inode();
+@@ -189,11 +210,23 @@
+
+ D1(printk(KERN_DEBUG "jffs2_create()\n"));
+
++ /* Try to reserve enough space for both node and dirent.
++ * Just the node will do for now, though
++ */
++ namelen = dentry->d_name.len;
++ ret = jffs2_reserve_space(c, sizeof(*ri), &phys_ofs, &alloclen, ALLOC_NORMAL);
++ D1(printk(KERN_DEBUG "jffs2_create(): reserved 0x%x bytes\n", alloclen));
++ if (ret) {
++ jffs2_free_raw_inode(ri);
++ return ret;
++ }
++
+ inode = jffs2_new_inode(dir_i, mode, ri);
+
+ if (IS_ERR(inode)) {
+ D1(printk(KERN_DEBUG "jffs2_new_inode() failed\n"));
+ jffs2_free_raw_inode(ri);
++ jffs2_complete_reservation(c);
+ return PTR_ERR(inode);
+ }
+
+@@ -203,22 +236,93 @@
+ inode->i_mapping->nrpages = 0;
+
+ f = JFFS2_INODE_INFO(inode);
++
++ ri->data_crc = 0;
++ ri->node_crc = crc32(0, ri, sizeof(*ri)-8);
++
++ fn = jffs2_write_dnode(inode, ri, NULL, 0, phys_ofs, &writtenlen);
++ D1(printk(KERN_DEBUG "jffs2_create created file with mode 0x%x\n", ri->mode));
++ jffs2_free_raw_inode(ri);
++
++ if (IS_ERR(fn)) {
++ D1(printk(KERN_DEBUG "jffs2_write_dnode() failed\n"));
++ /* Eeek. Wave bye bye */
++ up(&f->sem);
++ jffs2_complete_reservation(c);
++ jffs2_clear_inode(inode);
++ return PTR_ERR(fn);
++ }
++ /* No data here. Only a metadata node, which will be
++ obsoleted by the first data write
++ */
++ f->metadata = fn;
++
++ /* Work out where to put the dirent node now. */
++ writtenlen = PAD(writtenlen);
++ phys_ofs += writtenlen;
++ alloclen -= writtenlen;
++ up(&f->sem);
++
++ if (alloclen < sizeof(*rd)+namelen) {
++ /* Not enough space left in this chunk. Get some more */
++ jffs2_complete_reservation(c);
++ ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &phys_ofs, &alloclen, ALLOC_NORMAL);
++
++ if (ret) {
++ /* Eep. */
++ D1(printk(KERN_DEBUG "jffs2_reserve_space() for dirent failed\n"));
++ jffs2_clear_inode(inode);
++ return ret;
++ }
++ }
++
++ rd = jffs2_alloc_raw_dirent();
++ if (!rd) {
++ /* Argh. Now we treat it like a normal delete */
++ jffs2_complete_reservation(c);
++ jffs2_clear_inode(inode);
++ return -ENOMEM;
++ }
++
+ dir_f = JFFS2_INODE_INFO(dir_i);
++ down(&dir_f->sem);
+
+- ret = jffs2_do_create(c, dir_f, f, ri,
+- dentry->d_name.name, dentry->d_name.len);
++ rd->magic = JFFS2_MAGIC_BITMASK;
++ rd->nodetype = JFFS2_NODETYPE_DIRENT;
++ rd->totlen = sizeof(*rd) + namelen;
++ rd->hdr_crc = crc32(0, rd, sizeof(struct jffs2_unknown_node)-4);
++
++ rd->pino = dir_i->i_ino;
++ rd->version = ++dir_f->highest_version;
++ rd->ino = inode->i_ino;
++ rd->mctime = CURRENT_TIME;
++ rd->nsize = namelen;
++ rd->type = DT_REG;
++ rd->node_crc = crc32(0, rd, sizeof(*rd)-8);
++ rd->name_crc = crc32(0, dentry->d_name.name, namelen);
+
+- if (ret) {
++ fd = jffs2_write_dirent(dir_i, rd, dentry->d_name.name, namelen, phys_ofs, &writtenlen);
++
++ jffs2_complete_reservation(c);
++
++ if (IS_ERR(fd)) {
++ /* dirent failed to write. Delete the inode normally
++ as if it were the final unlink() */
++ jffs2_free_raw_dirent(rd);
++ up(&dir_f->sem);
+ jffs2_clear_inode(inode);
+- make_bad_inode(inode);
+- iput(inode);
+- jffs2_free_raw_inode(ri);
+- return ret;
++ return PTR_ERR(fd);
+ }
+
+- dir_i->i_mtime = dir_i->i_ctime = je32_to_cpu(ri->ctime);
++ dir_i->i_mtime = dir_i->i_ctime = rd->mctime;
++
++ jffs2_free_raw_dirent(rd);
++
++ /* Link the fd into the inode's list, obsoleting an old
++ one if necessary. */
++ jffs2_add_fd_to_list(c, fd, &dir_f->dents);
++ up(&dir_f->sem);
+
+- jffs2_free_raw_inode(ri);
+ d_instantiate(dentry, inode);
+
+ D1(printk(KERN_DEBUG "jffs2_create: Created ino #%lu with mode %o, nlink %d(%d). nrpages %ld\n",
+@@ -228,48 +332,168 @@
+
+ /***********************************************************************/
+
+-
+-static int jffs2_unlink(struct inode *dir_i, struct dentry *dentry)
++static int jffs2_do_unlink(struct inode *dir_i, struct dentry *dentry, int rename)
+ {
+- struct jffs2_sb_info *c = JFFS2_SB_INFO(dir_i->i_sb);
+- struct jffs2_inode_info *dir_f = JFFS2_INODE_INFO(dir_i);
+- struct jffs2_inode_info *dead_f = JFFS2_INODE_INFO(dentry->d_inode);
++ struct jffs2_inode_info *dir_f, *f;
++ struct jffs2_sb_info *c;
++ struct jffs2_raw_dirent *rd;
++ struct jffs2_full_dirent *fd;
++ __u32 alloclen, phys_ofs;
+ int ret;
+
+- ret = jffs2_do_unlink(c, dir_f, dentry->d_name.name,
+- dentry->d_name.len, dead_f);
+- if (dead_f->inocache)
+- dentry->d_inode->i_nlink = dead_f->inocache->nlink;
+- return ret;
++ c = JFFS2_SB_INFO(dir_i->i_sb);
++
++ rd = jffs2_alloc_raw_dirent();
++ if (!rd)
++ return -ENOMEM;
++
++ ret = jffs2_reserve_space(c, sizeof(*rd)+dentry->d_name.len, &phys_ofs, &alloclen, ALLOC_DELETION);
++ if (ret) {
++ jffs2_free_raw_dirent(rd);
++ return ret;
++ }
++
++ dir_f = JFFS2_INODE_INFO(dir_i);
++ down(&dir_f->sem);
++
++ /* Build a deletion node */
++ rd->magic = JFFS2_MAGIC_BITMASK;
++ rd->nodetype = JFFS2_NODETYPE_DIRENT;
++ rd->totlen = sizeof(*rd) + dentry->d_name.len;
++ rd->hdr_crc = crc32(0, rd, sizeof(struct jffs2_unknown_node)-4);
++
++ rd->pino = dir_i->i_ino;
++ rd->version = ++dir_f->highest_version;
++ rd->ino = 0;
++ rd->mctime = CURRENT_TIME;
++ rd->nsize = dentry->d_name.len;
++ rd->type = DT_UNKNOWN;
++ rd->node_crc = crc32(0, rd, sizeof(*rd)-8);
++ rd->name_crc = crc32(0, dentry->d_name.name, dentry->d_name.len);
++
++ fd = jffs2_write_dirent(dir_i, rd, dentry->d_name.name, dentry->d_name.len, phys_ofs, NULL);
++
++ jffs2_complete_reservation(c);
++ jffs2_free_raw_dirent(rd);
++
++ if (IS_ERR(fd)) {
++ up(&dir_f->sem);
++ return PTR_ERR(fd);
++ }
++
++ /* File it. This will mark the old one obsolete. */
++ jffs2_add_fd_to_list(c, fd, &dir_f->dents);
++ up(&dir_f->sem);
++
++ if (!rename) {
++ f = JFFS2_INODE_INFO(dentry->d_inode);
++ down(&f->sem);
++
++ while (f->dents) {
++ /* There can be only deleted ones */
++ fd = f->dents;
++
++ f->dents = fd->next;
++
++ if (fd->ino) {
++ printk(KERN_WARNING "Deleting inode #%u with active dentry \"%s\"->ino #%u\n",
++ f->inocache->ino, fd->name, fd->ino);
++ } else {
++ D1(printk(KERN_DEBUG "Removing deletion dirent for \"%s\" from dir ino #%u\n", fd->name, f->inocache->ino));
++ }
++ jffs2_mark_node_obsolete(c, fd->raw);
++ jffs2_free_full_dirent(fd);
++ }
++
++ f->inocache->nlink--;
++ dentry->d_inode->i_nlink--;
++ up(&f->sem);
++ }
++
++ return 0;
+ }
+-/***********************************************************************/
+
++static int jffs2_unlink(struct inode *dir_i, struct dentry *dentry)
++{
++ return jffs2_do_unlink(dir_i, dentry, 0);
++}
++/***********************************************************************/
+
+-static int jffs2_link (struct dentry *old_dentry, struct inode *dir_i, struct dentry *dentry)
++static int jffs2_do_link (struct dentry *old_dentry, struct inode *dir_i, struct dentry *dentry, int rename)
+ {
+- struct jffs2_sb_info *c = JFFS2_SB_INFO(old_dentry->d_inode->i_sb);
+- struct jffs2_inode_info *f = JFFS2_INODE_INFO(old_dentry->d_inode);
+- struct jffs2_inode_info *dir_f = JFFS2_INODE_INFO(dir_i);
++ struct jffs2_inode_info *dir_f, *f;
++ struct jffs2_sb_info *c;
++ struct jffs2_raw_dirent *rd;
++ struct jffs2_full_dirent *fd;
++ __u32 alloclen, phys_ofs;
+ int ret;
+- uint8_t type;
+
+- /* Don't let people make hard links to bad inodes. */
+- if (!f->inocache)
+- return -EIO;
++ c = JFFS2_SB_INFO(dir_i->i_sb);
+
+- if (S_ISDIR(old_dentry->d_inode->i_mode))
+- return -EPERM;
++ rd = jffs2_alloc_raw_dirent();
++ if (!rd)
++ return -ENOMEM;
++
++ ret = jffs2_reserve_space(c, sizeof(*rd)+dentry->d_name.len, &phys_ofs, &alloclen, ALLOC_NORMAL);
++ if (ret) {
++ jffs2_free_raw_dirent(rd);
++ return ret;
++ }
++
++ dir_f = JFFS2_INODE_INFO(dir_i);
++ down(&dir_f->sem);
+
+- /* XXX: This is ugly */
+- type = (old_dentry->d_inode->i_mode & S_IFMT) >> 12;
+- if (!type) type = DT_REG;
++ /* Build a deletion node */
++ rd->magic = JFFS2_MAGIC_BITMASK;
++ rd->nodetype = JFFS2_NODETYPE_DIRENT;
++ rd->totlen = sizeof(*rd) + dentry->d_name.len;
++ rd->hdr_crc = crc32(0, rd, sizeof(struct jffs2_unknown_node)-4);
++
++ rd->pino = dir_i->i_ino;
++ rd->version = ++dir_f->highest_version;
++ rd->ino = old_dentry->d_inode->i_ino;
++ rd->mctime = CURRENT_TIME;
++ rd->nsize = dentry->d_name.len;
+
+- ret = jffs2_do_link(c, dir_f, f->inocache->ino, type, dentry->d_name.name, dentry->d_name.len);
++ /* XXX: This is ugly. */
++ rd->type = (old_dentry->d_inode->i_mode & S_IFMT) >> 12;
++ if (!rd->type) rd->type = DT_REG;
+
+- if (!ret) {
++ rd->node_crc = crc32(0, rd, sizeof(*rd)-8);
++ rd->name_crc = crc32(0, dentry->d_name.name, dentry->d_name.len);
++
++ fd = jffs2_write_dirent(dir_i, rd, dentry->d_name.name, dentry->d_name.len, phys_ofs, NULL);
++
++ jffs2_complete_reservation(c);
++ jffs2_free_raw_dirent(rd);
++
++ if (IS_ERR(fd)) {
++ up(&dir_f->sem);
++ return PTR_ERR(fd);
++ }
++
++ /* File it. This will mark the old one obsolete. */
++ jffs2_add_fd_to_list(c, fd, &dir_f->dents);
++ up(&dir_f->sem);
++
++ if (!rename) {
++ f = JFFS2_INODE_INFO(old_dentry->d_inode);
+ down(&f->sem);
+ old_dentry->d_inode->i_nlink = ++f->inocache->nlink;
+ up(&f->sem);
++ }
++ return 0;
++}
++
++static int jffs2_link (struct dentry *old_dentry, struct inode *dir_i, struct dentry *dentry)
++{
++ int ret;
++
++ if (S_ISDIR(old_dentry->d_inode->i_mode))
++ return -EPERM;
++
++ ret = jffs2_do_link(old_dentry, dir_i, dentry, 0);
++ if (!ret) {
+ d_instantiate(dentry, old_dentry->d_inode);
+ atomic_inc(&old_dentry->d_inode->i_count);
+ }
+@@ -288,13 +512,10 @@
+ struct jffs2_full_dnode *fn;
+ struct jffs2_full_dirent *fd;
+ int namelen;
+- uint32_t alloclen, phys_ofs;
+- uint32_t writtenlen;
++ __u32 alloclen, phys_ofs;
++ __u32 writtenlen;
+ int ret;
+
+- if ((strlen(target)+1) > dir_i->i_sb->s_blocksize)
+- return -ENAMETOOLONG;
+-
+ /* FIXME: If you care. We'd need to use frags for the target
+ if it grows much more than this */
+ if (strlen(target) > 254)
+@@ -330,16 +551,15 @@
+
+ f = JFFS2_INODE_INFO(inode);
+
+- inode->i_size = strlen(target);
+- ri->isize = ri->dsize = ri->csize = cpu_to_je32(inode->i_size);
+- ri->totlen = cpu_to_je32(sizeof(*ri) + inode->i_size);
+- ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4));
++ inode->i_size = ri->isize = ri->dsize = ri->csize = strlen(target);
++ ri->totlen = sizeof(*ri) + ri->dsize;
++ ri->hdr_crc = crc32(0, ri, sizeof(struct jffs2_unknown_node)-4);
+
+ ri->compr = JFFS2_COMPR_NONE;
+- ri->data_crc = cpu_to_je32(crc32(0, target, strlen(target)));
+- ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
++ ri->data_crc = crc32(0, target, strlen(target));
++ ri->node_crc = crc32(0, ri, sizeof(*ri)-8);
+
+- fn = jffs2_write_dnode(c, f, ri, target, strlen(target), phys_ofs, &writtenlen);
++ fn = jffs2_write_dnode(inode, ri, target, strlen(target), phys_ofs, &writtenlen);
+
+ jffs2_free_raw_inode(ri);
+
+@@ -383,42 +603,41 @@
+ dir_f = JFFS2_INODE_INFO(dir_i);
+ down(&dir_f->sem);
+
+- rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+- rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
+- rd->totlen = cpu_to_je32(sizeof(*rd) + namelen);
+- rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4));
+-
+- rd->pino = cpu_to_je32(dir_i->i_ino);
+- rd->version = cpu_to_je32(++dir_f->highest_version);
+- rd->ino = cpu_to_je32(inode->i_ino);
+- rd->mctime = cpu_to_je32(CURRENT_TIME);
++ rd->magic = JFFS2_MAGIC_BITMASK;
++ rd->nodetype = JFFS2_NODETYPE_DIRENT;
++ rd->totlen = sizeof(*rd) + namelen;
++ rd->hdr_crc = crc32(0, rd, sizeof(struct jffs2_unknown_node)-4);
++
++ rd->pino = dir_i->i_ino;
++ rd->version = ++dir_f->highest_version;
++ rd->ino = inode->i_ino;
++ rd->mctime = CURRENT_TIME;
+ rd->nsize = namelen;
+ rd->type = DT_LNK;
+- rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8));
+- rd->name_crc = cpu_to_je32(crc32(0, dentry->d_name.name, namelen));
+-
+- fd = jffs2_write_dirent(c, dir_f, rd, dentry->d_name.name, namelen, phys_ofs, &writtenlen);
++ rd->node_crc = crc32(0, rd, sizeof(*rd)-8);
++ rd->name_crc = crc32(0, dentry->d_name.name, namelen);
+
++ fd = jffs2_write_dirent(dir_i, rd, dentry->d_name.name, namelen, phys_ofs, &writtenlen);
++
++ jffs2_complete_reservation(c);
++
+ if (IS_ERR(fd)) {
+ /* dirent failed to write. Delete the inode normally
+ as if it were the final unlink() */
+- jffs2_complete_reservation(c);
+ jffs2_free_raw_dirent(rd);
+ up(&dir_f->sem);
+ jffs2_clear_inode(inode);
+ return PTR_ERR(fd);
+ }
+
+- dir_i->i_mtime = dir_i->i_ctime = je32_to_cpu(rd->mctime);
++ dir_i->i_mtime = dir_i->i_ctime = rd->mctime;
+
+ jffs2_free_raw_dirent(rd);
+
+ /* Link the fd into the inode's list, obsoleting an old
+ one if necessary. */
+ jffs2_add_fd_to_list(c, fd, &dir_f->dents);
+-
+ up(&dir_f->sem);
+- jffs2_complete_reservation(c);
+
+ d_instantiate(dentry, inode);
+ return 0;
+@@ -435,8 +654,8 @@
+ struct jffs2_full_dnode *fn;
+ struct jffs2_full_dirent *fd;
+ int namelen;
+- uint32_t alloclen, phys_ofs;
+- uint32_t writtenlen;
++ __u32 alloclen, phys_ofs;
++ __u32 writtenlen;
+ int ret;
+
+ mode |= S_IFDIR;
+@@ -468,15 +687,13 @@
+
+ inode->i_op = &jffs2_dir_inode_operations;
+ inode->i_fop = &jffs2_dir_operations;
+- /* Directories get nlink 2 at start */
+- inode->i_nlink = 2;
+
+ f = JFFS2_INODE_INFO(inode);
+
+- ri->data_crc = cpu_to_je32(0);
+- ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
++ ri->data_crc = 0;
++ ri->node_crc = crc32(0, ri, sizeof(*ri)-8);
+
+- fn = jffs2_write_dnode(c, f, ri, NULL, 0, phys_ofs, &writtenlen);
++ fn = jffs2_write_dnode(inode, ri, NULL, 0, phys_ofs, &writtenlen);
+
+ jffs2_free_raw_inode(ri);
+
+@@ -520,43 +737,41 @@
+ dir_f = JFFS2_INODE_INFO(dir_i);
+ down(&dir_f->sem);
+
+- rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+- rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
+- rd->totlen = cpu_to_je32(sizeof(*rd) + namelen);
+- rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4));
+-
+- rd->pino = cpu_to_je32(dir_i->i_ino);
+- rd->version = cpu_to_je32(++dir_f->highest_version);
+- rd->ino = cpu_to_je32(inode->i_ino);
+- rd->mctime = cpu_to_je32(CURRENT_TIME);
++ rd->magic = JFFS2_MAGIC_BITMASK;
++ rd->nodetype = JFFS2_NODETYPE_DIRENT;
++ rd->totlen = sizeof(*rd) + namelen;
++ rd->hdr_crc = crc32(0, rd, sizeof(struct jffs2_unknown_node)-4);
++
++ rd->pino = dir_i->i_ino;
++ rd->version = ++dir_f->highest_version;
++ rd->ino = inode->i_ino;
++ rd->mctime = CURRENT_TIME;
+ rd->nsize = namelen;
+ rd->type = DT_DIR;
+- rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8));
+- rd->name_crc = cpu_to_je32(crc32(0, dentry->d_name.name, namelen));
++ rd->node_crc = crc32(0, rd, sizeof(*rd)-8);
++ rd->name_crc = crc32(0, dentry->d_name.name, namelen);
+
+- fd = jffs2_write_dirent(c, dir_f, rd, dentry->d_name.name, namelen, phys_ofs, &writtenlen);
++ fd = jffs2_write_dirent(dir_i, rd, dentry->d_name.name, namelen, phys_ofs, &writtenlen);
++
++ jffs2_complete_reservation(c);
+
+ if (IS_ERR(fd)) {
+ /* dirent failed to write. Delete the inode normally
+ as if it were the final unlink() */
+- jffs2_complete_reservation(c);
+ jffs2_free_raw_dirent(rd);
+ up(&dir_f->sem);
+ jffs2_clear_inode(inode);
+ return PTR_ERR(fd);
+ }
+
+- dir_i->i_mtime = dir_i->i_ctime = je32_to_cpu(rd->mctime);
+- dir_i->i_nlink++;
++ dir_i->i_mtime = dir_i->i_ctime = rd->mctime;
+
+ jffs2_free_raw_dirent(rd);
+
+ /* Link the fd into the inode's list, obsoleting an old
+ one if necessary. */
+ jffs2_add_fd_to_list(c, fd, &dir_f->dents);
+-
+ up(&dir_f->sem);
+- jffs2_complete_reservation(c);
+
+ d_instantiate(dentry, inode);
+ return 0;
+@@ -566,16 +781,12 @@
+ {
+ struct jffs2_inode_info *f = JFFS2_INODE_INFO(dentry->d_inode);
+ struct jffs2_full_dirent *fd;
+- int ret;
+
+ for (fd = f->dents ; fd; fd = fd->next) {
+ if (fd->ino)
+ return -ENOTEMPTY;
+ }
+- ret = jffs2_unlink(dir_i, dentry);
+- if (!ret)
+- dir_i->i_nlink--;
+- return ret;
++ return jffs2_unlink(dir_i, dentry);
+ }
+
+ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, int mode, int rdev)
+@@ -590,8 +801,8 @@
+ int namelen;
+ unsigned short dev;
+ int devlen = 0;
+- uint32_t alloclen, phys_ofs;
+- uint32_t writtenlen;
++ __u32 alloclen, phys_ofs;
++ __u32 writtenlen;
+ int ret;
+
+ ri = jffs2_alloc_raw_inode();
+@@ -601,7 +812,7 @@
+ c = JFFS2_SB_INFO(dir_i->i_sb);
+
+ if (S_ISBLK(mode) || S_ISCHR(mode)) {
+- dev = (MAJOR(rdev) << 8) | MINOR(rdev);
++ dev = (MAJOR(to_kdev_t(rdev)) << 8) | MINOR(to_kdev_t(rdev));
+ devlen = sizeof(dev);
+ }
+
+@@ -628,15 +839,15 @@
+
+ f = JFFS2_INODE_INFO(inode);
+
+- ri->dsize = ri->csize = cpu_to_je32(devlen);
+- ri->totlen = cpu_to_je32(sizeof(*ri) + devlen);
+- ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4));
++ ri->dsize = ri->csize = devlen;
++ ri->totlen = sizeof(*ri) + ri->csize;
++ ri->hdr_crc = crc32(0, ri, sizeof(struct jffs2_unknown_node)-4);
+
+ ri->compr = JFFS2_COMPR_NONE;
+- ri->data_crc = cpu_to_je32(crc32(0, &dev, devlen));
+- ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
++ ri->data_crc = crc32(0, &dev, devlen);
++ ri->node_crc = crc32(0, ri, sizeof(*ri)-8);
+
+- fn = jffs2_write_dnode(c, f, ri, (char *)&dev, devlen, phys_ofs, &writtenlen);
++ fn = jffs2_write_dnode(inode, ri, (char *)&dev, devlen, phys_ofs, &writtenlen);
+
+ jffs2_free_raw_inode(ri);
+
+@@ -680,45 +891,44 @@
+ dir_f = JFFS2_INODE_INFO(dir_i);
+ down(&dir_f->sem);
+
+- rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+- rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
+- rd->totlen = cpu_to_je32(sizeof(*rd) + namelen);
+- rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4));
+-
+- rd->pino = cpu_to_je32(dir_i->i_ino);
+- rd->version = cpu_to_je32(++dir_f->highest_version);
+- rd->ino = cpu_to_je32(inode->i_ino);
+- rd->mctime = cpu_to_je32(CURRENT_TIME);
++ rd->magic = JFFS2_MAGIC_BITMASK;
++ rd->nodetype = JFFS2_NODETYPE_DIRENT;
++ rd->totlen = sizeof(*rd) + namelen;
++ rd->hdr_crc = crc32(0, rd, sizeof(struct jffs2_unknown_node)-4);
++
++ rd->pino = dir_i->i_ino;
++ rd->version = ++dir_f->highest_version;
++ rd->ino = inode->i_ino;
++ rd->mctime = CURRENT_TIME;
+ rd->nsize = namelen;
+
+ /* XXX: This is ugly. */
+ rd->type = (mode & S_IFMT) >> 12;
+
+- rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8));
+- rd->name_crc = cpu_to_je32(crc32(0, dentry->d_name.name, namelen));
++ rd->node_crc = crc32(0, rd, sizeof(*rd)-8);
++ rd->name_crc = crc32(0, dentry->d_name.name, namelen);
+
+- fd = jffs2_write_dirent(c, dir_f, rd, dentry->d_name.name, namelen, phys_ofs, &writtenlen);
++ fd = jffs2_write_dirent(dir_i, rd, dentry->d_name.name, namelen, phys_ofs, &writtenlen);
++
++ jffs2_complete_reservation(c);
+
+ if (IS_ERR(fd)) {
+ /* dirent failed to write. Delete the inode normally
+ as if it were the final unlink() */
+- jffs2_complete_reservation(c);
+ jffs2_free_raw_dirent(rd);
+ up(&dir_f->sem);
+ jffs2_clear_inode(inode);
+ return PTR_ERR(fd);
+ }
+
+- dir_i->i_mtime = dir_i->i_ctime = je32_to_cpu(rd->mctime);
++ dir_i->i_mtime = dir_i->i_ctime = rd->mctime;
+
+ jffs2_free_raw_dirent(rd);
+
+ /* Link the fd into the inode's list, obsoleting an old
+ one if necessary. */
+ jffs2_add_fd_to_list(c, fd, &dir_f->dents);
+-
+ up(&dir_f->sem);
+- jffs2_complete_reservation(c);
+
+ d_instantiate(dentry, inode);
+
+@@ -729,9 +939,7 @@
+ struct inode *new_dir_i, struct dentry *new_dentry)
+ {
+ int ret;
+- struct jffs2_sb_info *c = JFFS2_SB_INFO(old_dir_i->i_sb);
+ struct jffs2_inode_info *victim_f = NULL;
+- uint8_t type;
+
+ /* The VFS will check for us and prevent trying to rename a
+ * file over a directory and vice versa, but if it's a directory,
+@@ -760,15 +968,7 @@
+ */
+
+ /* Make a hard link */
+-
+- /* XXX: This is ugly */
+- type = (old_dentry->d_inode->i_mode & S_IFMT) >> 12;
+- if (!type) type = DT_REG;
+-
+- ret = jffs2_do_link(c, JFFS2_INODE_INFO(new_dir_i),
+- old_dentry->d_inode->i_ino, type,
+- new_dentry->d_name.name, new_dentry->d_name.len);
+-
++ ret = jffs2_do_link(old_dentry, new_dir_i, new_dentry, 1);
+ if (ret)
+ return ret;
+
+@@ -784,36 +984,21 @@
+ }
+ }
+
+- /* If it was a directory we moved, and there was no victim,
+- increase i_nlink on its new parent */
+- if (S_ISDIR(old_dentry->d_inode->i_mode) && !victim_f)
+- new_dir_i->i_nlink++;
+-
+ /* Unlink the original */
+- ret = jffs2_do_unlink(c, JFFS2_INODE_INFO(old_dir_i),
+- old_dentry->d_name.name, old_dentry->d_name.len, NULL);
+-
+- /* We don't touch inode->i_nlink */
+-
++ ret = jffs2_do_unlink(old_dir_i, old_dentry, 1);
++
+ if (ret) {
+ /* Oh shit. We really ought to make a single node which can do both atomically */
+ struct jffs2_inode_info *f = JFFS2_INODE_INFO(old_dentry->d_inode);
+ down(&f->sem);
+- old_dentry->d_inode->i_nlink++;
+- if (f->inocache)
+- f->inocache->nlink++;
++ old_dentry->d_inode->i_nlink = f->inocache->nlink++;
+ up(&f->sem);
+-
++
+ printk(KERN_NOTICE "jffs2_rename(): Link succeeded, unlink failed (err %d). You now have a hard link\n", ret);
+ /* Might as well let the VFS know */
+ d_instantiate(new_dentry, old_dentry->d_inode);
+ atomic_inc(&old_dentry->d_inode->i_count);
+- return ret;
+ }
+-
+- if (S_ISDIR(old_dentry->d_inode->i_mode))
+- old_dir_i->i_nlink--;
+-
+- return 0;
++ return ret;
+ }
+
+diff -Nur linux/fs/jffs2/ecos/ChangeLog /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/ChangeLog
+--- linux/fs/jffs2/ecos/ChangeLog 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/ChangeLog 1970-01-01 07:00:00.000000000 +0700
+@@ -1,198 +0,0 @@
+-2002-05-20 Jonathan Larmour <jlarmour@redhat.com>
+-
+- * src/LICENCE: New file. Contains license for JFFS2, now GPL+exception.
+- * src/background.c: Point at LICENSE file instead of existing text.
+- * src/build.c: Ditto.
+- * src/compr.c: Ditto.
+- * src/compr_rtime.c: Ditto.
+- * src/compr_rubin.c: Ditto.
+- * src/compr_zlib.c: Ditto.
+- * src/dir-ecos.c: Ditto.
+- * src/erase.c: Ditto.
+- * src/file-ecos.c: Ditto.
+- * src/gc.c: Ditto.
+- * src/jffs2.h: Ditto.
+- * src/list.h: Ditto.
+- * src/malloc-ecos.c: Ditto.
+- * src/nodelist.c: Ditto.
+- * src/nodelist.h: Ditto.
+- * src/nodemgmt.c: Ditto.
+- * src/os-ecos.h: Ditto.
+- * src/pushpull.h: Ditto.
+- * src/read.c: Ditto.
+- * src/readinode.c: Ditto.
+- * src/scan.c: Ditto.
+- * src/write.c: Ditto.
+-
+-2002-01-28 David Woodhouse <dwmw2@cambridge.redhat.com>
+-
+- * src/super-ecos.c: Removed.
+- * src/jffs2.c: Merge jffs2_write_super() and jffs2_put_super() into
+- the routines from which they were called, put jffs2_read_super()
+- in as a static function with a view to doing same RSN.
+- * src/jffs2port.h: Remove prototypes of functions that died.
+- * cdl/jffs2.cdl: Remove super-ecos.c
+- * src/dir-ecos.c src/write.c: Increase highest_version _before_
+- assigning to new node, not after.
+-
+-2002-01-27 David Woodhouse <dwmw2@cambridge.redhat.com>
+-
+- * src/read.c (jffs2_read_inode_range): Deal correctly with
+- non-page-aligned read requests. We have to deal with the
+- case where we want to read from somewhere other than the
+- beginning of a frag.
+- * src/jffs2.c (jffs2_fo_read): Use jffs2_read_inode_range
+- instead of jffs2_readpage.
+-
+-2002-01-25 Jonathan Larmour <jlarmour@redhat.com>
+-
+- * cdl/jffs2.cdl: We want CYGPKG_IO_FILEIO_INODE.
+- * src/dir-ecos.c (jffs2_symlink): Remove. eCos doesn't support symlinks.
+- (jffs2_mknod): Similar.
+- (jffs2_mkdir): Don't call d_instantiate - its a nop.
+- (jffs2_rename): Ditto.
+- * src/file-ecos.c (jffs2_commit_write): Don't set blocks.
+- * src/jffs2.c (jffs2_flash_writev): Rewrite to only write aligned
+- quantities to flash.
+- * src/jffs2port.h: Lots of decrufting.
+- * src/os-ecos.h: Ditto (a bit).
+- * src/readinode.c (jffs2_read_inode): Don't set blocks/blksize in inode.
+- * src/write.c (jffs2_new_inode): Ditto when __ECOS.
+- (jffs2_write_dnode): don't call writev with extra vectors
+- unnecessarily.
+- * src/super-ecos.c (jffs2_statfs): Remove - unused.
+-
+-2002-01-25 David Woodhouse <dwmw2@cambridge.redhat.com>
+-
+- * src/super-ecos.c: Cruftectomy.
+- * src/compr*.[ch] src/pushpull.h: Namespace cleanups merged from
+- mainstream sources. Bit push functions made inline.
+- * src/pushpull.c: Removed.
+- * cdl/jffs2.c: Remove reference to pushpull.c
+- * src/file-ecos.c: Cruftectomy. Lots of unused stuff here.
+- * src/jffs2.c src/jffs2port.h: Remove some functions from jffs2.c
+- which are no longer used, move some others to jffs2port.h as
+- inline functions so they don't pollute the namespace.
+-
+-2002-01-24 Jonathan Larmour <jlarmour@redhat.com>
+-
+- * tests/fileio1.c: Check in listdir that the number of dirents is
+- correct, taking into account existing files in case it's live.
+-
+- * src/dir-ecos.c (jffs2_readdir): move to....
+-
+- * src/jffs2.c (jffs2_fo_dirread): here. And fix the return code
+- in the process so it now works.
+- (filldir): Make inline and simpler.
+- * src/jffs2port.h: remove filldir related stuff.
+-
+-2002-01-24 David Woodhouse <dwmw2@cambridge.redhat.com>
+-
+- * src/dir-ecos.c: Cruftectomy. Remove most of the stuff that was
+- commented out. Remove jffs2_do_{create,link,unlink} to write.c
+- * src/write.c: Add jffs2_do_{create,link,unlink} as in mainline.
+- * src/nodelist.h: Prototypes for the above.
+- * src/jffs2port.h: Don't include <pkgconf/kernel.h>.
+-
+-2002-01-23 Jonathan Larmour <jlarmour@redhat.com>
+-
+- * src/jffs2.c (jffs2_mount): Allow multiple FSs, and integration
+- with flash block device.
+- (jffs2_flash_read): Use flash block device.
+- (jffs2_flash_erase): Ditto.
+- (jffs2_flash_write): Ditto.
+- (do_flash_init): Remove - now done by block device layer
+- * src/list.h: Remove and reimplement from scratch to avoid GPL.
+- * src/os-ecos.h: Keep flash block dev handle in superblock.
+- eCos does support obsoleting as it isn't NAND only.
+- * src/dir-ecos.c (jffs2_readdir): Return correct value on success.
+- Merge in changes mutatis mutandis from between v1.49 and v1.51 of
+- dir.c in main repository.
+- * cdl/jffs2.cdl: CYGPKG_MEMALLOC more accurately CYGINT_ISO_MALLOC.
+- Only jffs2.c needs to be in libextras.a
+- Requires Flash block devices as an alternative for hardcoding
+- the sector size, flash size and base address.
+- * src/super-ecos.c (jffs2_read_super): Use flash block device for
+- sector and flash sizes.
+- * tests/fileio1.c: mount using block device (defined by CDL).
+- No need to init here - done by flash block device layer.
+-
+-2002-01-21 David Woodhouse <dwmw2@cambridge.redhat.com>
+-
+- * src/read.c: Obtain inode lock around reading symlink target.
+- * src/dir-ecos.c: Fix the long-standing up() without down() in
+- jffs2_readdir() when only the '.' and '..' entries are read, from
+- v1.52 of master dir.c. Merge copyright date change from v1.50 - note
+- that the portability cleanups from v1.51 aren't yet merged.
+- * src/os-ecos.h: Add jffs2_can_mark_obsolete() and the macros
+- for getting at generic inode fields from a struct jffs2_inode_info*
+- * src/nodemgmt.c: Remove an #ifndef __ECOS and use
+- jffs2_can_mark_obsolete() instead.
+- * src/jffs2port.h: up() is cyg_drv_mutex_unlock() not _release()
+- * src/gc.c: Merge portability cleanups - get rid of a lot of
+- references to 'struct inode'. Also include the attempt at NAND
+- support in jffs2_garbage_collect_deletion_dirent().
+-
+-2002-01-11 David Woodhouse <dwmw2@cambridge.redhat.com>
+-
+- * src/jffs2port.h: Switch semaphore emulation to cyg_drv_mutex_t,
+- remove some kernel includes which seem gratuitous.
+- * cdl/jffs2.cdl: Require CYGPKG_MEMALLOC
+- * src/compr_zlib.c src/compr.c: Merge changes from mainline code
+- to make mkfs.jffs2 compile again.
+-
+-2002-01-10 David Woodhouse <dwmw2@cambridge.redhat.com>
+-
+- * src/jffs2.c: The 'mode' arg passed to jffs2_open() shouldn't
+- have been called 'mode'. It's 'oflags'. You have to make up a
+- mode for the newly-created file yourself.
+- * src/nodelist.h src/read.c: Fix jffs2_getlink() so it takes
+- portable arguments, not a dentry. Move it to read.c and symlink.c
+- becomes obsolete.
+- * src/symlink-ecos.c: Removed.
+- * cdl/jffs2.cdl: Remove symlink-ecos.c
+-
+-2002-01-09 David Woodhouse <dwmw2@cambridge.redhat.com>
+-
+- * Import updated JFFS2 sources into eCos tree.
+-
+-2000-08-28 Dominic Ostrowski (dominic.ostrowski@3glab.com)
+-
+- * started on port of JFFS2 using ramfs as a template
+-
+-//===========================================================================
+-//####ECOSGPLCOPYRIGHTBEGIN####
+-// -------------------------------------------
+-// This file is part of eCos, the Embedded Configurable Operating System.
+-// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+-//
+-// eCos 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 or (at your option) any later version.
+-//
+-// eCos 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 eCos; if not, write to the Free Software Foundation, Inc.,
+-// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+-//
+-// As a special exception, if other files instantiate templates or use macros
+-// or inline functions from this file, or you compile this file and link it
+-// with other works to produce a work based on this file, this file does not
+-// by itself cause the resulting work to be covered by the GNU General Public
+-// License. However the source code for this file must still be made available
+-// in accordance with section (3) of the GNU General Public License.
+-//
+-// This exception does not invalidate any other reasons why a work based on
+-// this file might be covered by the GNU General Public License.
+-//
+-// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
+-// at http://sources.redhat.com/ecos/ecos-license/
+-// -------------------------------------------
+-//####ECOSGPLCOPYRIGHTEND####
+-//===========================================================================
+-
+-
+diff -Nur linux/fs/jffs2/ecos/cdl/jffs2.cdl /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/cdl/jffs2.cdl
+--- linux/fs/jffs2/ecos/cdl/jffs2.cdl 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/cdl/jffs2.cdl 1970-01-01 07:00:00.000000000 +0700
+@@ -1,119 +0,0 @@
+-# ====================================================================
+-#
+-# jffs2.cdl
+-#
+-# JFFS2 Filesystem configuration data
+-#
+-# ====================================================================
+-#####ECOSGPLCOPYRIGHTBEGIN####
+-## -------------------------------------------
+-## This file is part of eCos, the Embedded Configurable Operating System.
+-## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+-##
+-## eCos 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 or (at your option) any later version.
+-##
+-## eCos 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 eCos; if not, write to the Free Software Foundation, Inc.,
+-## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+-##
+-## As a special exception, if other files instantiate templates or use macros
+-## or inline functions from this file, or you compile this file and link it
+-## with other works to produce a work based on this file, this file does not
+-## by itself cause the resulting work to be covered by the GNU General Public
+-## License. However the source code for this file must still be made available
+-## in accordance with section (3) of the GNU General Public License.
+-##
+-## This exception does not invalidate any other reasons why a work based on
+-## this file might be covered by the GNU General Public License.
+-##
+-## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
+-## at http://sources.redhat.com/ecos/ecos-license/
+-## -------------------------------------------
+-#####ECOSGPLCOPYRIGHTEND####
+-# ====================================================================
+-######DESCRIPTIONBEGIN####
+-#
+-# Author(s): David Woodhouse, Dominic Ostrowski
+-# Original data: ported from JFFS2 by David Woodhouse
+-# Contributors: dominic.ostrowski@3glab.com
+-# Date: 2000-08-28
+-#
+-#####DESCRIPTIONEND####
+-#
+-# ====================================================================
+-
+-cdl_package CYGPKG_FS_JFFS2 {
+- display "JFFS2 filesystem"
+- doc doc/index.html
+- include_dir cyg/jffs2
+-
+- requires CYGPKG_IO_FILEIO
+- requires CYGPKG_IO_FLASH
+- requires CYGPKG_COMPRESS_ZLIB
+- requires CYGINT_ISO_MALLOC
+-
+- requires CYGPKG_ISOINFRA
+- requires CYGPKG_ERROR
+- requires CYGINT_ISO_ERRNO
+- requires CYGINT_ISO_ERRNO_CODES
+- requires CYGPKG_IO_FLASH_BLOCK_DEVICE
+- requires CYGPKG_IO_FILEIO_INODE
+-
+- compile -library=libextras.a fs-ecos.c
+- compile build.c scan.c malloc-ecos.c nodelist.c crc32.c nodemgmt.c readinode.c erase.c dir-ecos.c write.c gc.c read.c compr.c compr_zlib.c compr_rtime.c compr_rubin.c file-ecos.c
+-
+- cdl_option CYGPKG_FS_JFFS2_CFLAGS_ADD {
+- display "Additional compiler flags"
+- flavor data
+- no_define
+- # We add -D__ECOS to trigger eCos-specific code in places.
+- # We add -Werror because I find it useful.
+- default_value { "-D__ECOS -Werror" }
+- description "
+- This option modifies the set of compiler flags for
+- building the JFFS2 package.
+- These flags are used in addition
+- to the set of global flags."
+- }
+-
+- cdl_option CYGPKG_FS_JFFS2_CFLAGS_REMOVE {
+- display "Suppressed compiler flags"
+- flavor data
+- no_define
+- # We remove -Wpointer-arith so that some of the hacky Linux-compat code
+- # (in file.c) compiled. We can probably remove it when that's replaced
+- # properly.
+- default_value { "-Wpointer-arith" }
+- description "
+- This option modifies the set of compiler flags for
+- building the JFFS2 package. These flags are removed from
+- the set of global flags if present."
+- }
+-
+- # ----------------------------------------------------------------
+- # Tests
+-
+- cdl_option CYGPKG_FS_JFFS2_TESTS {
+- display "JFFS2 FS tests"
+- flavor data
+- no_define
+- calculated { "tests/fileio1.c" }
+- description "
+- This option specifies the set of tests for the JFFS2 FS package."
+- }
+-
+-}
+-
+-# End of jffs2.cdl
+-
+-
+-
+-
+-
+diff -Nur linux/fs/jffs2/ecos/doc/readme.txt /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/doc/readme.txt
+--- linux/fs/jffs2/ecos/doc/readme.txt 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/doc/readme.txt 1970-01-01 07:00:00.000000000 +0700
+@@ -1,27 +0,0 @@
+-This package is a port of the JFFS2 flash filing system to eCos. It has been
+-developed on the Compaq Ipaq, and has not been tested on any other device.
+-
+-This code is subject to the original licensing terms, and additionally it
+-should be noted that this code is still in an early stage of development.
+-
+-As this code will write to flash directly, caution should be exercised in
+-its use. It may cause areas of the flash chips essential to the operation of
+-the device to become corrupted.
+-
+-
+-Minor modifications are necessary to the the eCos flash drivers
+-
+-io/flash/current/src/flash.c
+-
+-devs/flash/intel/strata/current/src/flash_program_buf.c
+-
+-to allow byte aligned rather than word aligned writes, and to ensure overwriting an existing
+-word is successful (these are supplied in jffs2/current/src).
+-
+-
+-Two test files are included fileio1.c (which performs the same tests as used for eCos RamFS),
+-and romfileio1.c (tests as eCos RomFS).
+-
+-romfileio1.c requires that a jffs2 filesystem image jffs2.img is present at the desired mount point.
+-This image was prepared on Linux with the tools originating with JFFS2 source from
+-www.infradead.org
+\ No newline at end of file
+diff -Nur linux/fs/jffs2/ecos/src/dir-ecos.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/src/dir-ecos.c
+--- linux/fs/jffs2/ecos/src/dir-ecos.c 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/src/dir-ecos.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,332 +0,0 @@
+-/*
+- * JFFS2 -- Journalling Flash File System, Version 2.
+- *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
+- *
+- * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+- *
+- * For licensing information, see the file 'LICENCE' in this directory.
+- *
+- * $Id: dir-ecos.c,v 1.1 2002/07/11 10:55:30 dwmw2 Exp $
+- *
+- */
+-
+-#include "nodelist.h"
+-#include "crc32.h"
+-
+-/***********************************************************************/
+-
+-
+-/* We keep the dirent list sorted in increasing order of name hash,
+- and we use the same hash function as the dentries. Makes this
+- nice and simple
+-*/
+-struct inode *jffs2_lookup(struct inode *dir_i, struct qstr *d_name)
+-{
+- struct jffs2_inode_info *dir_f;
+- struct jffs2_sb_info *c;
+- struct jffs2_full_dirent *fd = NULL, *fd_list;
+- uint32_t ino = 0;
+- struct inode *inode = NULL;
+-
+- D1(printk(KERN_DEBUG "jffs2_lookup()\n"));
+-
+- dir_f = JFFS2_INODE_INFO(dir_i);
+- c = JFFS2_SB_INFO(dir_i->i_sb);
+-
+- down(&dir_f->sem);
+-
+- /* NB: The 2.2 backport will need to explicitly check for '.' and '..' here */
+- for (fd_list = dir_f->dents; fd_list && fd_list->nhash <= d_name->hash; fd_list = fd_list->next) {
+- if (fd_list->nhash == d_name->hash &&
+- (!fd || fd_list->version > fd->version) &&
+- strlen(fd_list->name) == d_name->len &&
+- !strncmp(fd_list->name, d_name->name, d_name->len)) {
+- fd = fd_list;
+- }
+- }
+- if (fd)
+- ino = fd->ino;
+- up(&dir_f->sem);
+- if (ino) {
+- inode = iget(dir_i->i_sb, ino);
+- if (!inode) {
+- printk(KERN_WARNING "iget() failed for ino #%u\n", ino);
+- return (ERR_PTR(-EIO));
+- }
+- }
+-
+- return inode;
+-}
+-
+-/***********************************************************************/
+-
+-
+-
+-int jffs2_create(struct inode *dir_i, struct qstr *d_name, int mode,
+- struct inode **new_i)
+-{
+- struct jffs2_raw_inode *ri;
+- struct jffs2_inode_info *f, *dir_f;
+- struct jffs2_sb_info *c;
+- struct inode *inode;
+- int ret;
+-
+- ri = jffs2_alloc_raw_inode();
+- if (!ri)
+- return -ENOMEM;
+-
+- c = JFFS2_SB_INFO(dir_i->i_sb);
+-
+- D1(printk(KERN_DEBUG "jffs2_create()\n"));
+-
+- inode = jffs2_new_inode(dir_i, mode, ri);
+-
+- if (IS_ERR(inode)) {
+- D1(printk(KERN_DEBUG "jffs2_new_inode() failed\n"));
+- jffs2_free_raw_inode(ri);
+- return PTR_ERR(inode);
+- }
+-
+- f = JFFS2_INODE_INFO(inode);
+- dir_f = JFFS2_INODE_INFO(dir_i);
+-
+- ret = jffs2_do_create(c, dir_f, f, ri,
+- d_name->name, d_name->len);
+-
+- if (ret) {
+- jffs2_clear_inode(inode);
+- make_bad_inode(inode);
+- iput(inode);
+- jffs2_free_raw_inode(ri);
+- return ret;
+- }
+-
+- jffs2_free_raw_inode(ri);
+-
+- D1(printk(KERN_DEBUG "jffs2_create: Created ino #%lu with mode %o, nlink %d(%d)\n",
+- inode->i_ino, inode->i_mode, inode->i_nlink, f->inocache->nlink));
+- *new_i = inode;
+- return 0;
+-}
+-
+-/***********************************************************************/
+-
+-
+-int jffs2_unlink(struct inode *dir_i, struct inode *d_inode, struct qstr *d_name)
+-{
+- struct jffs2_sb_info *c = JFFS2_SB_INFO(dir_i->i_sb);
+- struct jffs2_inode_info *dir_f = JFFS2_INODE_INFO(dir_i);
+- struct jffs2_inode_info *dead_f = JFFS2_INODE_INFO(d_inode);
+- int ret;
+-
+- ret = jffs2_do_unlink(c, dir_f, d_name->name,
+- d_name->len, dead_f);
+- d_inode->i_nlink = dead_f->inocache->nlink;
+- return ret;
+-}
+-/***********************************************************************/
+-
+-
+-int jffs2_link (struct inode *old_d_inode, struct inode *dir_i, struct qstr *d_name)
+-{
+- struct jffs2_sb_info *c = JFFS2_SB_INFO(old_d_inode->i_sb);
+- struct jffs2_inode_info *f = JFFS2_INODE_INFO(old_d_inode);
+- struct jffs2_inode_info *dir_f = JFFS2_INODE_INFO(dir_i);
+- int ret;
+-
+- /* XXX: This is ugly */
+- uint8_t type = (old_d_inode->i_mode & S_IFMT) >> 12;
+- if (!type) type = DT_REG;
+-
+- ret = jffs2_do_link(c, dir_f, f->inocache->ino, type, d_name->name, d_name->len);
+-
+- if (!ret) {
+- down(&f->sem);
+- old_d_inode->i_nlink = ++f->inocache->nlink;
+- up(&f->sem);
+- }
+- return ret;
+-}
+-
+-int jffs2_mkdir (struct inode *dir_i, struct qstr *d_name, int mode, struct inode **new_i)
+-{
+- struct jffs2_inode_info *f, *dir_f;
+- struct jffs2_sb_info *c;
+- struct inode *inode;
+- struct jffs2_raw_inode *ri;
+- struct jffs2_raw_dirent *rd;
+- struct jffs2_full_dnode *fn;
+- struct jffs2_full_dirent *fd;
+- int namelen;
+- uint32_t alloclen, phys_ofs;
+- uint32_t writtenlen;
+- int ret;
+-
+- mode |= S_IFDIR;
+-
+- ri = jffs2_alloc_raw_inode();
+- if (!ri)
+- return -ENOMEM;
+-
+- c = JFFS2_SB_INFO(dir_i->i_sb);
+-
+- /* Try to reserve enough space for both node and dirent.
+- * Just the node will do for now, though
+- */
+- namelen = d_name->len;
+- ret = jffs2_reserve_space(c, sizeof(*ri), &phys_ofs, &alloclen, ALLOC_NORMAL);
+-
+- if (ret) {
+- jffs2_free_raw_inode(ri);
+- return ret;
+- }
+-
+- inode = jffs2_new_inode(dir_i, mode, ri);
+-
+- if (IS_ERR(inode)) {
+- jffs2_free_raw_inode(ri);
+- jffs2_complete_reservation(c);
+- return PTR_ERR(inode);
+- }
+-
+- f = JFFS2_INODE_INFO(inode);
+-
+- ri->data_crc = 0;
+- ri->node_crc = crc32(0, ri, sizeof(*ri)-8);
+-
+- fn = jffs2_write_dnode(c, f, ri, NULL, 0, phys_ofs, &writtenlen);
+-
+- jffs2_free_raw_inode(ri);
+-
+- if (IS_ERR(fn)) {
+- /* Eeek. Wave bye bye */
+- up(&f->sem);
+- jffs2_complete_reservation(c);
+- jffs2_clear_inode(inode);
+- return PTR_ERR(fn);
+- }
+- /* No data here. Only a metadata node, which will be
+- obsoleted by the first data write
+- */
+- f->metadata = fn;
+- up(&f->sem);
+-
+- /* Work out where to put the dirent node now. */
+- writtenlen = PAD(writtenlen);
+- phys_ofs += writtenlen;
+- alloclen -= writtenlen;
+-
+- if (alloclen < sizeof(*rd)+namelen) {
+- /* Not enough space left in this chunk. Get some more */
+- jffs2_complete_reservation(c);
+- ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &phys_ofs, &alloclen, ALLOC_NORMAL);
+- if (ret) {
+- /* Eep. */
+- jffs2_clear_inode(inode);
+- return ret;
+- }
+- }
+-
+- rd = jffs2_alloc_raw_dirent();
+- if (!rd) {
+- /* Argh. Now we treat it like a normal delete */
+- jffs2_complete_reservation(c);
+- jffs2_clear_inode(inode);
+- return -ENOMEM;
+- }
+-
+- dir_f = JFFS2_INODE_INFO(dir_i);
+- down(&dir_f->sem);
+-
+- rd->magic = JFFS2_MAGIC_BITMASK;
+- rd->nodetype = JFFS2_NODETYPE_DIRENT;
+- rd->totlen = sizeof(*rd) + namelen;
+- rd->hdr_crc = crc32(0, rd, sizeof(struct jffs2_unknown_node)-4);
+-
+- rd->pino = dir_i->i_ino;
+- rd->version = ++dir_f->highest_version;
+- rd->ino = inode->i_ino;
+- rd->mctime = CURRENT_TIME;
+- rd->nsize = namelen;
+- rd->type = DT_DIR;
+- rd->node_crc = crc32(0, rd, sizeof(*rd)-8);
+- rd->name_crc = crc32(0, d_name->name, namelen);
+-
+- fd = jffs2_write_dirent(c, dir_f, rd, d_name->name, namelen, phys_ofs, &writtenlen);
+-
+- jffs2_complete_reservation(c);
+- jffs2_free_raw_dirent(rd);
+-
+- if (IS_ERR(fd)) {
+- /* dirent failed to write. Delete the inode normally
+- as if it were the final unlink() */
+- up(&dir_f->sem);
+- jffs2_clear_inode(inode);
+- return PTR_ERR(fd);
+- }
+-
+- /* Link the fd into the inode's list, obsoleting an old
+- one if necessary. */
+- jffs2_add_fd_to_list(c, fd, &dir_f->dents);
+- up(&dir_f->sem);
+-
+- *new_i = inode;
+- return 0;
+-}
+-
+-int jffs2_rmdir (struct inode *dir_i, struct inode *d_inode, struct qstr *d_name)
+-{
+- struct jffs2_inode_info *f = JFFS2_INODE_INFO(d_inode);
+- struct jffs2_full_dirent *fd;
+-
+- for (fd = f->dents ; fd; fd = fd->next) {
+- if (fd->ino)
+- return EPERM; //-ENOTEMPTY;
+- }
+- return jffs2_unlink(dir_i, d_inode, d_name);
+-}
+-
+-int jffs2_rename (struct inode *old_dir_i, struct inode *d_inode, struct qstr *old_d_name,
+- struct inode *new_dir_i, struct qstr *new_d_name)
+-{
+- int ret;
+- struct jffs2_sb_info *c = JFFS2_SB_INFO(old_dir_i->i_sb);
+- uint8_t type;
+-
+- /* XXX: We probably ought to alloc enough space for
+- both nodes at the same time. Writing the new link,
+- then getting -ENOSPC, is quite bad :)
+- */
+-
+- /* Make a hard link */
+-
+- /* XXX: This is ugly */
+- type = (d_inode->i_mode & S_IFMT) >> 12;
+- if (!type) type = DT_REG;
+-
+- ret = jffs2_do_link(c, JFFS2_INODE_INFO(new_dir_i),
+- d_inode->i_ino, type,
+- new_d_name->name, new_d_name->len);
+-
+- if (ret)
+- return ret;
+-
+- /* Unlink the original */
+- ret = jffs2_do_unlink(c, JFFS2_INODE_INFO(old_dir_i),
+- old_d_name->name, old_d_name->len, NULL);
+-
+- /* We don't touch inode->i_nlink */
+-
+- if (ret) {
+- /* Oh shit. We really ought to make a single node which can do both atomically */
+- struct jffs2_inode_info *f = JFFS2_INODE_INFO(d_inode);
+- down(&f->sem);
+- d_inode->i_nlink = f->inocache->nlink++;
+- up(&f->sem);
+-
+- printk(KERN_NOTICE "jffs2_rename(): Link succeeded, unlink failed (err %d). You now have a hard link\n", ret);
+- }
+- return ret;
+-}
+-
+diff -Nur linux/fs/jffs2/ecos/src/file-ecos.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/src/file-ecos.c
+--- linux/fs/jffs2/ecos/src/file-ecos.c 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/src/file-ecos.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,217 +0,0 @@
+-/*
+- * JFFS2 -- Journalling Flash File System, Version 2.
+- *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
+- *
+- * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+- *
+- * For licensing information, see the file 'LICENCE' in this directory.
+- *
+- * $Id: file-ecos.c,v 1.1 2002/07/11 10:55:30 dwmw2 Exp $
+- *
+- */
+-
+-//#include <linux/kernel.h>
+-//#include <linux/mtd/compatmac.h> /* for min() */
+-//#include <linux/slab.h>
+-//#include <linux/fs.h>
+-//#include <linux/pagemap.h>
+-#include "jffs2.h"
+-#include "nodelist.h"
+-#include "crc32.h"
+-
+-int jffs2_do_readpage_nolock (struct inode *inode, struct page *pg)
+-{
+- struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+- struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
+- unsigned char *pg_buf;
+- int ret;
+-
+- D1(printk(KERN_DEBUG "jffs2_do_readpage_nolock(): ino #%lu, page at offset 0x%lx\n", inode->i_ino, pg->index << PAGE_CACHE_SHIFT));
+-
+- if (!PageLocked(pg))
+- PAGE_BUG(pg);
+-
+- pg_buf = (char *)kmap(pg);
+- /* FIXME: Can kmap fail? */
+-
+- ret = jffs2_read_inode_range(c, f, pg_buf, pg->index << PAGE_CACHE_SHIFT, PAGE_CACHE_SIZE);
+-
+- if (ret) {
+- ClearPageUptodate(pg);
+- SetPageError(pg);
+- } else {
+- SetPageUptodate(pg);
+- ClearPageError(pg);
+- }
+-
+- flush_dcache_page(pg);
+- kunmap(pg);
+-
+- D1(printk(KERN_DEBUG "readpage finished\n"));
+- return 0;
+-}
+-
+-int jffs2_do_readpage_unlock(struct inode *inode, struct page *pg)
+-{
+- int ret = jffs2_do_readpage_nolock(inode, pg);
+- UnlockPage(pg);
+- return ret;
+-}
+-
+-
+-//int jffs2_readpage (struct file *filp, struct page *pg)
+-int jffs2_readpage (struct inode *d_inode, struct page *pg)
+-{
+- // struct jffs2_inode_info *f = JFFS2_INODE_INFO(d_inode);
+- int ret;
+-
+- // down(&f->sem);
+- ret = jffs2_do_readpage_unlock(d_inode, pg);
+- // up(&f->sem);
+- return ret;
+-}
+-
+-//int jffs2_prepare_write (struct file *filp, struct page *pg, unsigned start, unsigned end)
+-int jffs2_prepare_write (struct inode *d_inode, struct page *pg, unsigned start, unsigned end)
+-{
+- struct inode *inode = d_inode;
+- struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+- uint32_t pageofs = pg->index << PAGE_CACHE_SHIFT;
+- int ret = 0;
+-
+- down(&f->sem);
+- //D1(printk(KERN_DEBUG "jffs2_prepare_write() nrpages %ld\n", inode->i_mapping->nrpages));
+- D1(printk(KERN_DEBUG "jffs2_prepare_write()\n"));
+-
+- if (pageofs > inode->i_size) {
+- /* Make new hole frag from old EOF to new page */
+- struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
+- struct jffs2_raw_inode ri;
+- struct jffs2_full_dnode *fn;
+- uint32_t phys_ofs, alloc_len;
+-
+- D1(printk(KERN_DEBUG "Writing new hole frag 0x%x-0x%x between current EOF and new page\n",
+- (unsigned int)inode->i_size, pageofs));
+-
+- ret = jffs2_reserve_space(c, sizeof(ri), &phys_ofs, &alloc_len, ALLOC_NORMAL);
+- if (ret) {
+- up(&f->sem);
+- return ret;
+- }
+- memset(&ri, 0, sizeof(ri));
+-
+- ri.magic = JFFS2_MAGIC_BITMASK;
+- ri.nodetype = JFFS2_NODETYPE_INODE;
+- ri.totlen = sizeof(ri);
+- ri.hdr_crc = crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4);
+-
+- ri.ino = f->inocache->ino;
+- ri.version = ++f->highest_version;
+- ri.mode = inode->i_mode;
+- ri.uid = inode->i_uid;
+- ri.gid = inode->i_gid;
+- ri.isize = max((uint32_t)inode->i_size, pageofs);
+- ri.atime = ri.ctime = ri.mtime = CURRENT_TIME;
+- ri.offset = inode->i_size;
+- ri.dsize = pageofs - inode->i_size;
+- ri.csize = 0;
+- ri.compr = JFFS2_COMPR_ZERO;
+- ri.node_crc = crc32(0, &ri, sizeof(ri)-8);
+- ri.data_crc = 0;
+-
+- fn = jffs2_write_dnode(c, f, &ri, NULL, 0, phys_ofs, NULL);
+- jffs2_complete_reservation(c);
+- if (IS_ERR(fn)) {
+- ret = PTR_ERR(fn);
+- up(&f->sem);
+- return ret;
+- }
+- ret = jffs2_add_full_dnode_to_inode(c, f, fn);
+- if (f->metadata) {
+- jffs2_mark_node_obsolete(c, f->metadata->raw);
+- jffs2_free_full_dnode(f->metadata);
+- f->metadata = NULL;
+- }
+- if (ret) {
+- D1(printk(KERN_DEBUG "Eep. add_full_dnode_to_inode() failed in prepare_write, returned %d\n", ret));
+- jffs2_mark_node_obsolete(c, fn->raw);
+- jffs2_free_full_dnode(fn);
+- up(&f->sem);
+- return ret;
+- }
+- inode->i_size = pageofs;
+- }
+-
+-
+- /* Read in the page if it wasn't already present */
+- // eCos has no concept of uptodate and by default always reads pages afresh
+- if (!Page_Uptodate(pg) && (start || end < PAGE_SIZE))
+- ret = jffs2_do_readpage_nolock(inode, pg);
+- //D1(printk(KERN_DEBUG "end prepare_write(). nrpages %ld\n", inode->i_mapping->nrpages));
+- D1(printk(KERN_DEBUG "end prepare_write()\n"));
+- up(&f->sem);
+- return ret;
+-}
+-
+-//int jffs2_commit_write (struct file *filp, struct page *pg, unsigned start, unsigned end)
+-int jffs2_commit_write (struct inode *d_inode, struct page *pg, unsigned start, unsigned end)
+-{
+- /* Actually commit the write from the page cache page we're looking at.
+- * For now, we write the full page out each time. It sucks, but it's simple
+- */
+- struct inode *inode = d_inode;
+- struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+- struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
+- struct jffs2_raw_inode *ri;
+- int ret = 0;
+- uint32_t writtenlen = 0;
+-
+- D1(printk(KERN_DEBUG "jffs2_commit_write(): ino #%lu, page at 0x%lx, range %d-%d\n",
+- inode->i_ino, pg->index << PAGE_CACHE_SHIFT, start, end));
+-
+-
+- ri = jffs2_alloc_raw_inode();
+- if (!ri) {
+- D1(printk(KERN_DEBUG "jffs2_commit_write(): Allocation of raw inode failed\n"));
+- return -ENOMEM;
+- }
+-
+- /* Set the fields that the generic jffs2_write_inode_range() code can't find */
+- ri->ino = inode->i_ino;
+- ri->mode = inode->i_mode;
+- ri->uid = inode->i_uid;
+- ri->gid = inode->i_gid;
+- ri->isize = (uint32_t)inode->i_size;
+- ri->atime = ri->ctime = ri->mtime = CURRENT_TIME;
+-
+- /* We rely on the fact that generic_file_write() currently kmaps the page for us. */
+- ret = jffs2_write_inode_range(c, f, ri, page_address(pg) + start,
+- (pg->index << PAGE_CACHE_SHIFT) + start, end - start, &writtenlen);
+-
+- if (ret) {
+- /* There was an error writing. */
+- SetPageError(pg);
+- }
+-
+- if (writtenlen) {
+- if (inode->i_size < (pg->index << PAGE_CACHE_SHIFT) + start + writtenlen) {
+- inode->i_size = (pg->index << PAGE_CACHE_SHIFT) + start + writtenlen;
+- inode->i_ctime = inode->i_mtime = ri->ctime;
+- }
+- }
+-
+- jffs2_free_raw_inode(ri);
+-
+- if (start+writtenlen < end) {
+- /* generic_file_write has written more to the page cache than we've
+- actually written to the medium. Mark the page !Uptodate so that
+- it gets reread */
+- D1(printk(KERN_DEBUG "jffs2_commit_write(): Not all bytes written. Marking page !uptodate\n"));
+- SetPageError(pg);
+- ClearPageUptodate(pg);
+- }
+-
+- D1(printk(KERN_DEBUG "jffs2_commit_write() returning %d\n",writtenlen?writtenlen:ret));
+- return writtenlen?writtenlen:ret;
+-}
+diff -Nur linux/fs/jffs2/ecos/src/fs-ecos.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/src/fs-ecos.c
+--- linux/fs/jffs2/ecos/src/fs-ecos.c 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/src/fs-ecos.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,1923 +0,0 @@
+-/*
+- * JFFS2 -- Journalling Flash File System, Version 2.
+- *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
+- *
+- * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+- *
+- * For licensing information, see the file 'LICENCE' in this directory.
+- *
+- * $Id: fs-ecos.c,v 1.1 2002/07/11 10:55:30 dwmw2 Exp $
+- *
+- */
+-
+-#include "jffs2port.h"
+-#include "jffs2.h"
+-#include "jffs2_fs_sb.h"
+-#include "jffs2_fs_i.h"
+-#include "nodelist.h"
+-
+-#include <errno.h>
+-#include <string.h>
+-#include <cyg/io/io.h>
+-#include <cyg/io/config_keys.h>
+-#include <cyg/io/flash.h>
+-
+-//==========================================================================
+-// Forward definitions
+-
+-// Filesystem operations
+-static int jffs2_mount ( cyg_fstab_entry *fste, cyg_mtab_entry *mte );
+-static int jffs2_umount ( cyg_mtab_entry *mte );
+-static int jffs2_open ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+- int mode, cyg_file *fte );
+-static int jffs2_ops_unlink ( cyg_mtab_entry *mte, cyg_dir dir, const char *name );
+-static int jffs2_ops_mkdir ( cyg_mtab_entry *mte, cyg_dir dir, const char *name );
+-static int jffs2_ops_rmdir ( cyg_mtab_entry *mte, cyg_dir dir, const char *name );
+-static int jffs2_ops_rename ( cyg_mtab_entry *mte, cyg_dir dir1, const char *name1,
+- cyg_dir dir2, const char *name2 );
+-static int jffs2_ops_link ( cyg_mtab_entry *mte, cyg_dir dir1, const char *name1,
+- cyg_dir dir2, const char *name2, int type );
+-static int jffs2_opendir ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+- cyg_file *fte );
+-static int jffs2_chdir ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+- cyg_dir *dir_out );
+-static int jffs2_stat ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+- struct stat *buf);
+-static int jffs2_getinfo ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+- int key, void *buf, int len );
+-static int jffs2_setinfo ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+- int key, void *buf, int len );
+-
+-// File operations
+-static int jffs2_fo_read (struct CYG_FILE_TAG *fp, struct CYG_UIO_TAG *uio);
+-static int jffs2_fo_write (struct CYG_FILE_TAG *fp, struct CYG_UIO_TAG *uio);
+-static int jffs2_fo_lseek (struct CYG_FILE_TAG *fp, off_t *pos, int whence );
+-static int jffs2_fo_ioctl (struct CYG_FILE_TAG *fp, CYG_ADDRWORD com,
+- CYG_ADDRWORD data);
+-static int jffs2_fo_fsync (struct CYG_FILE_TAG *fp, int mode );
+-static int jffs2_fo_close (struct CYG_FILE_TAG *fp);
+-static int jffs2_fo_fstat (struct CYG_FILE_TAG *fp, struct stat *buf );
+-static int jffs2_fo_getinfo (struct CYG_FILE_TAG *fp, int key, void *buf, int len );
+-static int jffs2_fo_setinfo (struct CYG_FILE_TAG *fp, int key, void *buf, int len );
+-
+-// Directory operations
+-static int jffs2_fo_dirread (struct CYG_FILE_TAG *fp, struct CYG_UIO_TAG *uio);
+-static int jffs2_fo_dirlseek (struct CYG_FILE_TAG *fp, off_t *pos, int whence );
+-
+-
+-//==========================================================================
+-// Filesystem table entries
+-
+-// -------------------------------------------------------------------------
+-// Fstab entry.
+-// This defines the entry in the filesystem table.
+-// For simplicity we use _FILESYSTEM synchronization for all accesses since
+-// we should never block in any filesystem operations.
+-
+-FSTAB_ENTRY( jffs2_fste, "jffs2", 0,
+- CYG_SYNCMODE_FILE_FILESYSTEM|CYG_SYNCMODE_IO_FILESYSTEM,
+- jffs2_mount,
+- jffs2_umount,
+- jffs2_open,
+- jffs2_ops_unlink,
+- jffs2_ops_mkdir,
+- jffs2_ops_rmdir,
+- jffs2_ops_rename,
+- jffs2_ops_link,
+- jffs2_opendir,
+- jffs2_chdir,
+- jffs2_stat,
+- jffs2_getinfo,
+- jffs2_setinfo);
+-
+-// -------------------------------------------------------------------------
+-// File operations.
+-// This set of file operations are used for normal open files.
+-
+-static cyg_fileops jffs2_fileops =
+-{
+- jffs2_fo_read,
+- jffs2_fo_write,
+- jffs2_fo_lseek,
+- jffs2_fo_ioctl,
+- cyg_fileio_seltrue,
+- jffs2_fo_fsync,
+- jffs2_fo_close,
+- jffs2_fo_fstat,
+- jffs2_fo_getinfo,
+- jffs2_fo_setinfo
+-};
+-
+-// -------------------------------------------------------------------------
+-// Directory file operations.
+-// This set of operations are used for open directories. Most entries
+-// point to error-returning stub functions. Only the read, lseek and
+-// close entries are functional.
+-
+-static cyg_fileops jffs2_dirops =
+-{
+- jffs2_fo_dirread,
+- (cyg_fileop_write *)cyg_fileio_enosys,
+- jffs2_fo_dirlseek,
+- (cyg_fileop_ioctl *)cyg_fileio_enosys,
+- cyg_fileio_seltrue,
+- (cyg_fileop_fsync *)cyg_fileio_enosys,
+- jffs2_fo_close,
+- (cyg_fileop_fstat *)cyg_fileio_enosys,
+- (cyg_fileop_getinfo *)cyg_fileio_enosys,
+- (cyg_fileop_setinfo *)cyg_fileio_enosys
+-};
+-
+-
+-//==========================================================================
+-// STATIC VARIABLES !!!
+-
+-static char read_write_buffer[PAGE_CACHE_SIZE]; //avoids malloc when user may be under memory pressure
+-static char gc_buffer[PAGE_CACHE_SIZE]; //avoids malloc when user may be under memory pressure
+-
+-//==========================================================================
+-// Directory operations
+-
+-struct jffs2_dirsearch
+-{
+- struct inode *dir; // directory to search
+- const char *path; // path to follow
+- struct inode *node; // Node found
+- const char *name; // last name fragment used
+- int namelen; // name fragment length
+- cyg_bool last; // last name in path?
+-};
+-
+-typedef struct jffs2_dirsearch jffs2_dirsearch;
+-
+-//==========================================================================
+-// Ref count and nlink management
+-
+-// -------------------------------------------------------------------------
+-// dec_refcnt()
+-// Decrment the reference count on an inode. If this makes the ref count
+-// zero, then this inode can be freed.
+-
+-static int dec_refcnt( struct inode *node )
+-{
+- int err = ENOERR;
+- node->i_count--;
+-
+- // In JFFS2 inode's are temporary in ram structures that are free'd when the usage i_count drops to 0
+- // The i_nlink however is managed by JFFS2 and is unrelated to usage
+- if( node->i_count == 0)
+- {
+- // This inode is not in use, so delete it.
+- iput(node);
+- }
+-
+- return err;
+-}
+-
+-// FIXME: This seems like real cruft. Wouldn't it be better just to do the
+-// right thing?
+-static void icache_evict(struct inode *root_i, struct inode *i) {
+- struct inode *cached_inode;
+- struct inode *next_inode;
+-
+- D2(printf("icache_evict\n"));
+- // If this is an absolute search path from the root,
+- // remove all cached inodes with i_count of zero (these are only
+- // held where needed for dotdot filepaths)
+- if(i == root_i) {
+- for(cached_inode = root_i; cached_inode != NULL; cached_inode = next_inode) {
+- next_inode = cached_inode->i_cache_next;
+- if (cached_inode->i_count == 0) {
+- cached_inode->i_cache_prev->i_cache_next = cached_inode->i_cache_next; // Prveious entry points ahead of us
+- if (cached_inode->i_cache_next != NULL)
+- cached_inode->i_cache_next->i_cache_prev = cached_inode->i_cache_prev; // Next entry points behind us
+- jffs2_clear_inode(cached_inode);
+- D2(printf("free icache_evict inode %x $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n", cached_inode));
+- free(cached_inode);
+- }
+- }
+- }
+-}
+-
+-//==========================================================================
+-// Directory search
+-
+-// -------------------------------------------------------------------------
+-// init_dirsearch()
+-// Initialize a dirsearch object to start a search
+-
+-static void init_dirsearch( jffs2_dirsearch *ds,
+- struct inode *dir,
+- const char *name)
+-{
+- D2(printf("init_dirsearch name = %s\n", name));
+- D2(printf("init_dirsearch dir = %x\n", dir));
+- ds->dir = dir;
+- ds->path = name;
+- ds->node = dir;
+- ds->name = name;
+- ds->namelen = 0;
+- ds->last = false;
+-}
+-
+-
+-// -------------------------------------------------------------------------
+-// find_entry()
+-// Search a single directory for the next name in a path and update the
+-// dirsearch object appropriately.
+-
+-static int find_entry( jffs2_dirsearch *ds )
+-{
+- unsigned long hash;
+- struct qstr this;
+- unsigned int c;
+- const char * hashname;
+-
+- struct inode *dir = ds->dir;
+- const char *name = ds->path;
+- const char *n = name;
+- char namelen = 0;
+- struct inode *d;
+-
+- D2(printf("find_entry\n"));
+-
+- // check that we really have a directory
+- if( !S_ISDIR(dir->i_mode) )
+- return ENOTDIR;
+-
+- // Isolate the next element of the path name.
+- while( *n != '\0' && *n != '/' )
+- n++, namelen++;
+-
+- // If we terminated on a NUL, set last flag.
+- if( *n == '\0' )
+- ds->last = true;
+-
+- // update name in dirsearch object
+- ds->name = name;
+- ds->namelen = namelen;
+-
+- if (name[0] == '.') switch (namelen) {
+- default:
+- break;
+- case 2:
+- // Dot followed by not Dot, treat as any other name
+- if (name[1] != '.')
+- break;
+- // Dot Dot
+- // Move back up the search path
+- D2(printf("find_entry found ..\n"));
+- ds->node = ds->dir->i_parent;
+- if(ds->dir->i_count == 0) {
+- iput(ds->dir); // This inode may be evicted
+- ds->dir = NULL;
+- }
+- return ENOERR;
+- case 1:
+- // Dot is consumed
+- D2(printf("find_entry found .\n"));
+- ds->node = ds->dir;
+- return ENOERR;
+- }
+-
+- // Here we have the name and its length set up.
+- // Search the directory for a matching entry
+-
+- hashname = name;
+- this.name = hashname;
+- c = *(const unsigned char *)hashname;
+-
+- hash = init_name_hash();
+- do {
+- hashname++;
+- hash = partial_name_hash(c, hash);
+- c = *(const unsigned char *)hashname;
+- } while (c && (c != '/'));
+- this.len = hashname - (const char *) this.name;
+- this.hash = end_name_hash(hash);
+-
+- D2(printf("find_entry for name = %s\n", ds->path));
+- d = jffs2_lookup(dir, &this);
+- D2(printf("find_entry got dir = %x\n", d));
+-
+- if( d == NULL )
+- return ENOENT;
+-
+- // The back path for dotdot to follow
+- d->i_parent = dir;
+- // pass back the node we have found
+- ds->node = d;
+-
+- return ENOERR;
+-
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_find()
+-// Main interface to directory search code. This is used in all file
+-// level operations to locate the object named by the pathname.
+-
+-static int jffs2_find( jffs2_dirsearch *d )
+-{
+- int err;
+-
+- D2(printf("jffs2_find for path =%s\n", d->path));
+- // Short circuit empty paths
+- if( *(d->path) == '\0' )
+- return ENOERR;
+-
+- // iterate down directory tree until we find the object
+- // we want.
+- for(;;)
+- {
+- err = find_entry( d );
+-
+- if( err != ENOERR )
+- return err;
+-
+- if( d->last )
+- return ENOERR;
+-
+- // every inode traversed in the find is temporary and should be free'd
+- //iput(d->dir);
+-
+- // Update dirsearch object to search next directory.
+- d->dir = d->node;
+- d->path += d->namelen;
+- if( *(d->path) == '/' ) d->path++; // skip dirname separators
+- }
+-}
+-
+-//==========================================================================
+-// Pathconf support
+-// This function provides support for pathconf() and fpathconf().
+-
+-static int jffs2_pathconf( struct inode *node, struct cyg_pathconf_info *info )
+-{
+- int err = ENOERR;
+- D2(printf("jffs2_pathconf\n"));
+-
+- switch( info->name )
+- {
+- case _PC_LINK_MAX:
+- info->value = LINK_MAX;
+- break;
+-
+- case _PC_MAX_CANON:
+- info->value = -1; // not supported
+- err = EINVAL;
+- break;
+-
+- case _PC_MAX_INPUT:
+- info->value = -1; // not supported
+- err = EINVAL;
+- break;
+-
+- case _PC_NAME_MAX:
+- info->value = NAME_MAX;
+- break;
+-
+- case _PC_PATH_MAX:
+- info->value = PATH_MAX;
+- break;
+-
+- case _PC_PIPE_BUF:
+- info->value = -1; // not supported
+- err = EINVAL;
+- break;
+-
+-
+- case _PC_ASYNC_IO:
+- info->value = -1; // not supported
+- err = EINVAL;
+- break;
+-
+- case _PC_CHOWN_RESTRICTED:
+- info->value = -1; // not supported
+- err = EINVAL;
+- break;
+-
+- case _PC_NO_TRUNC:
+- info->value = 0;
+- break;
+-
+- case _PC_PRIO_IO:
+- info->value = 0;
+- break;
+-
+- case _PC_SYNC_IO:
+- info->value = 0;
+- break;
+-
+- case _PC_VDISABLE:
+- info->value = -1; // not supported
+- err = EINVAL;
+- break;
+-
+- default:
+- err = EINVAL;
+- break;
+- }
+-
+- return err;
+-}
+-
+-//==========================================================================
+-// Filesystem operations
+-
+-// -------------------------------------------------------------------------
+-// jffs2_mount()
+-// Process a mount request. This mainly creates a root for the
+-// filesystem.
+-static int jffs2_read_super(struct super_block *sb)
+-{
+- struct jffs2_sb_info *c;
+- struct inode *root_i;
+- Cyg_ErrNo err;
+- cyg_uint32 len;
+- cyg_io_flash_getconfig_devsize_t ds;
+- cyg_io_flash_getconfig_blocksize_t bs;
+-
+- D1(printk(KERN_DEBUG "jffs2: read_super\n"));
+-
+- c = JFFS2_SB_INFO(sb);
+- memset(c, 0, sizeof(*c));
+-
+- len = sizeof(ds);
+- err = cyg_io_get_config( sb->s_dev,
+- CYG_IO_GET_CONFIG_FLASH_DEVSIZE,
+- &ds, &len );
+- if ( err != ENOERR ) {
+- D1(printf("jffs2: cyg_io_get_config failed to get dev size: %d\n",
+- err));
+- return err;
+- }
+- len = sizeof(bs);
+- bs.offset = 0;
+- err = cyg_io_get_config( sb->s_dev,
+- CYG_IO_GET_CONFIG_FLASH_BLOCKSIZE,
+- &bs, &len );
+- if ( err != ENOERR ) {
+- D1(printf("jffs2: cyg_io_get_config failed to get block size: %d\n",
+- err));
+- return err;
+- }
+-
+- c->sector_size = bs.block_size;
+- c->flash_size = ds.dev_size;
+-
+- err = jffs2_do_mount_fs(c);
+- if (err)
+- return -err;
+-
+- D1(printk(KERN_DEBUG "jffs2_read_super(): Getting root inode\n"));
+- root_i = iget(sb, 1);
+- if (is_bad_inode(root_i)) {
+- D1(printk(KERN_WARNING "get root inode failed\n"));
+- err = EIO;
+- goto out_nodes;
+- }
+-
+- D1(printk(KERN_DEBUG "jffs2_read_super(): d_alloc_root()\n"));
+- sb->s_root = d_alloc_root(root_i);
+- if (!sb->s_root) {
+- err = ENOMEM;
+- goto out_root_i;
+- }
+- sb->s_blocksize = PAGE_CACHE_SIZE;
+- sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
+- sb->s_magic = JFFS2_SUPER_MAGIC;
+-
+- return 0;
+-
+- out_root_i:
+- iput(root_i);
+- out_nodes:
+- jffs2_free_ino_caches(c);
+- jffs2_free_raw_node_refs(c);
+- free(c->blocks);
+-
+- return err;
+-}
+-
+-static int jffs2_mount ( cyg_fstab_entry *fste, cyg_mtab_entry *mte )
+-{
+- extern cyg_mtab_entry mtab[], mtab_end;
+- struct super_block *jffs2_sb = NULL;
+- struct jffs2_sb_info *c;
+- cyg_mtab_entry *m;
+- cyg_io_handle_t t;
+- Cyg_ErrNo err;
+-
+- D2(printf("jffs2_mount\n"));
+-
+- err = cyg_io_lookup( mte->devname, &t );
+- if( err != ENOERR )
+- return -err;
+-
+- // Iterate through the mount table to see if we're mounted
+- // FIXME: this should be done better - perhaps if the superblock
+- // can be stored as an inode in the icache.
+- for( m = &mtab[0]; m != &mtab_end; m++ )
+- {
+- // stop if there are more than the configured maximum
+- if( m-&mtab[0] >= CYGNUM_FILEIO_MTAB_MAX )
+- {
+- m = &mtab_end;
+- break;
+- }
+- if ( m->valid && strcmp( m->fsname, "jffs2" ) == 0 &&
+- strcmp( m->devname, mte->devname) == 0 ) {
+- jffs2_sb = (struct super_block *)m->data;
+- }
+- }
+-
+- if ( jffs2_sb == NULL) {
+- jffs2_sb = malloc(sizeof(struct super_block));
+-
+- if(jffs2_sb == NULL)
+- return ENOSPC;
+-
+- c = JFFS2_SB_INFO(jffs2_sb);
+- memset(jffs2_sb, 0, sizeof(struct super_block));
+- jffs2_sb->s_dev = t;
+-
+- err = jffs2_read_super(jffs2_sb);
+-
+- if (err) {
+- free(jffs2_sb);
+- return err;
+- }
+-
+- jffs2_sb->s_root->i_parent = jffs2_sb->s_root; // points to itself, no dotdot paths above mountpoint
+- jffs2_sb->s_root->i_cache_prev = NULL; // root inode, so always null
+- jffs2_sb->s_root->i_cache_next = NULL;
+- jffs2_sb->s_root->i_count = 1; // Ensures the root inode is always in ram until umount
+-
+- D2(printf("jffs2_mount erasing pending blocks\n"));
+- jffs2_erase_pending_blocks(c);
+- jffs2_mark_erased_blocks(c);
+- }
+- mte->data = (CYG_ADDRWORD)jffs2_sb;
+-
+- jffs2_sb->s_mount_count++;
+- mte->root = (cyg_dir)jffs2_sb->s_root;
+- D2(printf("jffs2_mounted superblock at %x\n", mte->root));
+-
+- return ENOERR;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_umount()
+-// Unmount the filesystem.
+-
+-static int jffs2_umount ( cyg_mtab_entry *mte )
+-{
+- struct inode *root = (struct inode *)mte->root;
+- struct super_block *jffs2_sb = root->i_sb;
+- struct jffs2_sb_info *c = JFFS2_SB_INFO(jffs2_sb);
+-
+- D2(printf("jffs2_umount\n"));
+-
+- // Decrement the mount count
+- jffs2_sb->s_mount_count--;
+-
+- // Only really umount if this is the only mount
+- if (jffs2_sb->s_mount_count == 0) {
+-
+- // Check for open/inuse root or any cached inodes
+-//if( root->i_count != 1 || root->i_cache_next != NULL) // root icount was set to 1 on mount
+- if( root->i_cache_next != NULL) // root icount was set to 1 on mount
+- return EBUSY;
+-
+- dec_refcnt(root); // Time to free the root inode
+-
+- //Clear root inode
+- //root_i = NULL;
+-
+- // Clean up the super block and root inode
+- jffs2_free_ino_caches(c);
+- jffs2_free_raw_node_refs(c);
+- free(c->blocks);
+-
+- // Clear root pointer
+- mte->root = CYG_DIR_NULL;
+-
+- mte->fs->data = 0; // fstab entry, visible to all mounts. No current mount
+- // That's all folks.
+- D2(printf("jffs2_umount No current mounts\n"));
+- }
+-
+- return ENOERR;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_open()
+-// Open a file for reading or writing.
+-
+-static int jffs2_open ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+- int mode, cyg_file *file )
+-{
+-
+- jffs2_dirsearch ds;
+- struct inode *node = NULL;
+- int err;
+-
+- D2(printf("jffs2_open\n"));
+-
+- icache_evict((struct inode *)mte->root, (struct inode *)dir);
+-
+- init_dirsearch( &ds, (struct inode *)dir, name );
+-
+- err = jffs2_find( &ds );
+-
+- if( err == ENOENT )
+- {
+- if( ds.last && (mode & O_CREAT) )
+- {
+- unsigned long hash;
+- struct qstr this;
+- unsigned int c;
+- const char * hashname;
+-
+- // No node there, if the O_CREAT bit is set then we must
+- // create a new one. The dir and name fields of the dirsearch
+- // object will have been updated so we know where to put it.
+-
+- hashname = ds.name;
+- this.name = hashname;
+- c = *(const unsigned char *)hashname;
+-
+- hash = init_name_hash();
+- do {
+- hashname++;
+- hash = partial_name_hash(c, hash);
+- c = *(const unsigned char *)hashname;
+- } while (c && (c != '/'));
+- this.len = hashname - (const char *) this.name;
+- this.hash = end_name_hash(hash);
+-
+- err = jffs2_create(ds.dir, &this, 0644, &node);
+-
+- if( err != 0 )
+- {
+- //Possible orphaned inode on the flash - but will be gc'd
+- return err;
+- }
+-
+- err = ENOERR;
+- }
+- }
+- else if( err == ENOERR )
+- {
+- // The node exists. If the O_CREAT and O_EXCL bits are set, we
+- // must fail the open.
+-
+- if( (mode & (O_CREAT|O_EXCL)) == (O_CREAT|O_EXCL) )
+- err = EEXIST;
+- else node = ds.node;
+- }
+-
+- if( err == ENOERR && (mode & O_TRUNC ) )
+- {
+- // If the O_TRUNC bit is set we must clean out the file data.
+-
+- node->i_size = 0;
+-
+- // Update file times
+- node->i_ctime =
+- node->i_mtime = cyg_timestamp();
+- }
+-
+- if( err != ENOERR ) return err;
+-
+- // Check that we actually have a file here
+- if( S_ISDIR(node->i_mode) ) return EISDIR;
+-
+- node->i_count++; // Count successful open
+-
+- // Initialize the file object
+-
+- file->f_flag |= mode & CYG_FILE_MODE_MASK;
+- file->f_type = CYG_FILE_TYPE_FILE;
+- file->f_ops = &jffs2_fileops;
+- file->f_offset = (mode&O_APPEND) ? node->i_size : 0;
+- file->f_data = (CYG_ADDRWORD)node;
+- file->f_xops = 0;
+-
+- return ENOERR;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_ops_unlink()
+-// Remove a file link from its directory.
+-
+-static int jffs2_ops_unlink ( cyg_mtab_entry *mte, cyg_dir dir, const char *name )
+-{
+- unsigned long hash;
+- struct qstr this;
+- unsigned int c;
+- const char * hashname;
+- jffs2_dirsearch ds;
+- int err;
+-
+- D2(printf("jffs2_ops_unlink\n"));
+-
+- icache_evict((struct inode *)mte->root, (struct inode *)dir);
+-
+- init_dirsearch( &ds, (struct inode *)dir, name );
+-
+- err = jffs2_find( &ds );
+-
+- if( err != ENOERR ) return err;
+-
+- // Cannot unlink directories, use rmdir() instead
+- if( S_ISDIR(ds.node->i_mode) )
+- return EPERM;
+-
+- // Delete it from its directory
+-
+- hashname = ds.name;
+- this.name = hashname;
+- c = *(const unsigned char *)hashname;
+-
+- hash = init_name_hash();
+- do {
+- hashname++;
+- hash = partial_name_hash(c, hash);
+- c = *(const unsigned char *)hashname;
+- } while (c && (c != '/'));
+- this.len = hashname - (const char *) this.name;
+- this.hash = end_name_hash(hash);
+-
+- err = jffs2_unlink(ds.dir, ds.node, &this);
+-
+- return err;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_ops_mkdir()
+-// Create a new directory.
+-
+-static int jffs2_ops_mkdir ( cyg_mtab_entry *mte, cyg_dir dir, const char *name )
+-{
+- jffs2_dirsearch ds;
+- struct inode *node = NULL;
+- int err;
+-
+- D2(printf("jffs2_ops_mkdir\n"));
+-
+- icache_evict((struct inode *)mte->root, (struct inode *)dir);
+-
+- init_dirsearch( &ds, (struct inode *)dir, name );
+-
+- err = jffs2_find( &ds );
+-
+- if( err == ENOENT )
+- {
+- if( ds.last )
+- {
+- unsigned long hash;
+- struct qstr this;
+- unsigned int c;
+- const char * hashname;
+- // The entry does not exist, and it is the last element in
+- // the pathname, so we can create it here.
+-
+- hashname = ds.name;
+- this.name = hashname;
+- c = *(const unsigned char *)hashname;
+-
+- hash = init_name_hash();
+- do {
+- hashname++;
+- hash = partial_name_hash(c, hash);
+- c = *(const unsigned char *)hashname;
+- } while (c && (c != '/'));
+- this.len = hashname - (const char *) this.name;
+- this.hash = end_name_hash(hash);
+-
+- err = jffs2_mkdir(ds.dir, &this, 0, &node);
+-
+- if( err != 0 )
+- return ENOSPC;
+-
+- }
+- // If this was not the last element, then and intermediate
+- // directory does not exist.
+- }
+- else
+- {
+- // If there we no error, something already exists with that
+- // name, so we cannot create another one.
+-
+- if( err == ENOERR )
+- err = EEXIST;
+- }
+-
+- return err;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_ops_rmdir()
+-// Remove a directory.
+-
+-static int jffs2_ops_rmdir ( cyg_mtab_entry *mte, cyg_dir dir, const char *name )
+-{
+- unsigned long hash;
+- struct qstr this;
+- unsigned int c;
+- const char * hashname;
+- jffs2_dirsearch ds;
+- int err;
+-
+- D2(printf("jffs2_ops_rmdir\n"));
+-
+- icache_evict((struct inode *)mte->root, (struct inode *)dir);
+-
+- init_dirsearch( &ds, (struct inode *)dir, name );
+-
+- err = jffs2_find( &ds );
+-
+- if( err != ENOERR ) return err;
+-
+- // Check that this is actually a directory.
+- if( !S_ISDIR(ds.node->i_mode) )
+- return EPERM;
+-
+- // Delete the entry.
+- hashname = ds.name;
+- this.name = hashname;
+- c = *(const unsigned char *)hashname;
+-
+- hash = init_name_hash();
+- do {
+- hashname++;
+- hash = partial_name_hash(c, hash);
+- c = *(const unsigned char *)hashname;
+- } while (c && (c != '/'));
+- this.len = hashname - (const char *) this.name;
+- this.hash = end_name_hash(hash);
+-
+- err = jffs2_rmdir(ds.dir, ds.node, &this);
+-
+- return err;
+-
+- return ENOERR;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_ops_rename()
+-// Rename a file/dir.
+-
+-static int jffs2_ops_rename ( cyg_mtab_entry *mte, cyg_dir dir1, const char *name1,
+- cyg_dir dir2, const char *name2 )
+-{
+- unsigned long hash;
+- struct qstr this1,this2;
+- unsigned int c;
+- const char * hashname;
+- jffs2_dirsearch ds1, ds2;
+- int err;
+-
+- D2(printf("jffs2_ops_rename\n"));
+-
+- init_dirsearch( &ds1, (struct inode *)dir1, name1 );
+-
+- err = jffs2_find( &ds1 );
+-
+- if( err != ENOERR ) return err;
+-
+- init_dirsearch( &ds2, (struct inode *)dir2, name2 );
+-
+- err = jffs2_find( &ds2 );
+-
+- // Allow through renames to non-existent objects.
+- if( ds2.last && err == ENOENT )
+- ds2.node = NULL, err = ENOERR;
+-
+- if( err != ENOERR ) return err;
+-
+- // Null rename, just return
+- if( ds1.node == ds2.node )
+- return ENOERR;
+-
+- hashname = ds1.name;
+- this1.name = hashname;
+- c = *(const unsigned char *)hashname;
+-
+- hash = init_name_hash();
+- do {
+- hashname++;
+- hash = partial_name_hash(c, hash);
+- c = *(const unsigned char *)hashname;
+- } while (c && (c != '/'));
+- this1.len = hashname - (const char *) this1.name;
+- this1.hash = end_name_hash(hash);
+-
+- hashname = ds2.name;
+- this2.name = hashname;
+- c = *(const unsigned char *)hashname;
+-
+- hash = init_name_hash();
+- do {
+- hashname++;
+- hash = partial_name_hash(c, hash);
+- c = *(const unsigned char *)hashname;
+- } while (c && (c != '/'));
+- this2.len = hashname - (const char *) this2.name;
+- this2.hash = end_name_hash(hash);
+-
+- // First deal with any entry that is at the destination
+- if( ds2.node )
+- {
+- // Check that we are renaming like-for-like
+-
+- if( !S_ISDIR(ds1.node->i_mode) && S_ISDIR(ds2.node->i_mode) )
+- return EISDIR;
+-
+- if( S_ISDIR(ds1.node->i_mode) && !S_ISDIR(ds2.node->i_mode) )
+- return ENOTDIR;
+-
+- // Now delete the destination directory entry
+-
+- err = jffs2_unlink(ds2.dir, ds2.node, &this2);
+-
+- if( err != 0 ) return err;
+-
+- }
+-
+- // Now we know that there is no clashing node at the destination,
+- // make a new direntry at the destination and delete the old entry
+- // at the source.
+-
+- err = jffs2_rename(ds1.dir, ds1.node, &this1, ds2.dir, &this2);
+-
+- // Update directory times
+- if( err == 0 )
+- ds1.dir->i_ctime =
+- ds1.dir->i_mtime =
+- ds2.dir->i_ctime =
+- ds2.dir->i_mtime = cyg_timestamp();
+-
+- return err;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_ops_link()
+-// Make a new directory entry for a file.
+-
+-static int jffs2_ops_link ( cyg_mtab_entry *mte, cyg_dir dir1, const char *name1,
+- cyg_dir dir2, const char *name2, int type )
+-{
+- unsigned long hash;
+- struct qstr this;
+- unsigned int c;
+- const char * hashname;
+- jffs2_dirsearch ds1, ds2;
+- int err;
+-
+- D2(printf("jffs2_ops_link\n"));
+-
+- // Only do hard links for now in this filesystem
+- if( type != CYG_FSLINK_HARD )
+- return EINVAL;
+-
+- init_dirsearch( &ds1, (struct inode *)dir1, name1 );
+-
+- err = jffs2_find( &ds1 );
+-
+- if( err != ENOERR ) return err;
+-
+- init_dirsearch( &ds2, (struct inode *)dir2, name2 );
+-
+- err = jffs2_find( &ds2 );
+-
+- // Don't allow links to existing objects
+- if( err == ENOERR ) return EEXIST;
+-
+- // Allow through links to non-existing terminal objects
+- if( ds2.last && err == ENOENT )
+- ds2.node = NULL, err = ENOERR;
+-
+- if( err != ENOERR ) return err;
+-
+- // Now we know that there is no existing node at the destination,
+- // make a new direntry at the destination.
+-
+- hashname = ds2.name;
+- this.name = hashname;
+- c = *(const unsigned char *)hashname;
+-
+- hash = init_name_hash();
+- do {
+- hashname++;
+- hash = partial_name_hash(c, hash);
+- c = *(const unsigned char *)hashname;
+- } while (c && (c != '/'));
+- this.len = hashname - (const char *) this.name;
+- this.hash = end_name_hash(hash);
+-
+- err = jffs2_link(ds2.dir, ds1.node, &this);
+-
+- if( err == 0 )
+- ds1.node->i_ctime =
+- ds2.dir->i_ctime =
+- ds2.dir->i_mtime = cyg_timestamp();
+-
+- return err;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_opendir()
+-// Open a directory for reading.
+-
+-static int jffs2_opendir ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+- cyg_file *file )
+-{
+- jffs2_dirsearch ds;
+- int err;
+-
+- D2(printf("jffs2_opendir\n"));
+-
+- icache_evict((struct inode *)mte->root, (struct inode *)dir);
+-
+- init_dirsearch( &ds, (struct inode *)dir, name );
+-
+- err = jffs2_find( &ds );
+-
+- if( err != ENOERR ) return err;
+-
+- // check it is really a directory.
+- if( !S_ISDIR(ds.node->i_mode) ) return ENOTDIR;
+-
+- ds.node->i_count++; // Count successful open
+-
+- // Initialize the file object, setting the f_ops field to a
+- // special set of file ops.
+-
+- file->f_type = CYG_FILE_TYPE_FILE;
+- file->f_ops = &jffs2_dirops;
+- file->f_offset = 0;
+- file->f_data = (CYG_ADDRWORD)ds.node;
+- file->f_xops = 0;
+-
+-
+- return ENOERR;
+-
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_chdir()
+-// Change directory support.
+-
+-static int jffs2_chdir ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+- cyg_dir *dir_out )
+-{
+- D2(printf("jffs2_chdir\n"));
+-
+- if( dir_out != NULL )
+- {
+- // This is a request to get a new directory pointer in
+- // *dir_out.
+-
+- jffs2_dirsearch ds;
+- int err;
+-
+- icache_evict((struct inode *)mte->root, (struct inode *)dir);
+-
+- init_dirsearch( &ds, (struct inode *)dir, name );
+-
+- err = jffs2_find( &ds );
+-
+- if( err != ENOERR ) return err;
+-
+- // check it is a directory
+- if( !S_ISDIR(ds.node->i_mode) )
+- return ENOTDIR;
+-
+- // Increment ref count to keep this directory in existance
+- // while it is the current cdir.
+- ds.node->i_count++;
+-
+- // Pass it out
+- *dir_out = (cyg_dir)ds.node;
+- }
+- else
+- {
+- // If no output dir is required, this means that the mte and
+- // dir arguments are the current cdir setting and we should
+- // forget this fact.
+-
+- struct inode *node = (struct inode *)dir;
+-
+- // Just decrement directory reference count.
+- dec_refcnt( node );
+- }
+-
+- return ENOERR;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_stat()
+-// Get struct stat info for named object.
+-
+-static int jffs2_stat ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+- struct stat *buf)
+-{
+- jffs2_dirsearch ds;
+- int err;
+-
+- D2(printf("jffs2_stat\n"));
+-
+- icache_evict((struct inode *)mte->root, (struct inode *)dir);
+-
+- init_dirsearch( &ds, (struct inode *)dir, name );
+-
+- err = jffs2_find( &ds );
+-
+- if( err != ENOERR ) return err;
+-
+- // Fill in the status
+- buf->st_mode = ds.node->i_mode;
+- buf->st_ino = (ino_t)ds.node;
+- buf->st_dev = 0;
+- buf->st_nlink = ds.node->i_nlink;
+- buf->st_uid = 0;
+- buf->st_gid = 0;
+- buf->st_size = ds.node->i_size;
+- buf->st_atime = ds.node->i_atime;
+- buf->st_mtime = ds.node->i_mtime;
+- buf->st_ctime = ds.node->i_ctime;
+-
+- return err;
+-
+- return ENOERR;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_getinfo()
+-// Getinfo. Currently only support pathconf().
+-
+-static int jffs2_getinfo ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+- int key, void *buf, int len )
+-{
+- jffs2_dirsearch ds;
+- int err;
+-
+- D2(printf("jffs2_getinfo\n"));
+-
+- icache_evict((struct inode *)mte->root, (struct inode *)dir);
+-
+- init_dirsearch( &ds, (struct inode *)dir, name );
+-
+- err = jffs2_find( &ds );
+-
+- if( err != ENOERR ) return err;
+-
+- switch( key )
+- {
+- case FS_INFO_CONF:
+- err = jffs2_pathconf( ds.node, (struct cyg_pathconf_info *)buf );
+- break;
+-
+- default:
+- err = EINVAL;
+- }
+- return err;
+-
+- return ENOERR;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_setinfo()
+-// Setinfo. Nothing to support here at present.
+-
+-static int jffs2_setinfo ( cyg_mtab_entry *mte, cyg_dir dir, const char *name,
+- int key, void *buf, int len )
+-{
+- // No setinfo keys supported at present
+-
+- D2(printf("jffs2_setinfo\n"));
+-
+- return EINVAL;
+-}
+-
+-
+-//==========================================================================
+-// File operations
+-
+-// -------------------------------------------------------------------------
+-// jffs2_fo_read()
+-// Read data from the file.
+-
+-static int jffs2_fo_read (struct CYG_FILE_TAG *fp, struct CYG_UIO_TAG *uio)
+-{
+- struct inode *inode = (struct inode *)fp->f_data;
+- struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+- struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
+- int i;
+- ssize_t resid = uio->uio_resid;
+- off_t pos = fp->f_offset;
+-
+- down(&f->sem);
+-
+- // Loop over the io vectors until there are none left
+- for( i = 0; i < uio->uio_iovcnt && pos < inode->i_size; i++ )
+- {
+- int ret;
+- cyg_iovec *iov = &uio->uio_iov[i];
+- off_t len = min(iov->iov_len, inode->i_size - pos);
+-
+- D2(printf("jffs2_fo_read inode size %d\n", inode->i_size));
+-
+- ret = jffs2_read_inode_range(c, f, (unsigned char *)iov->iov_base,
+- pos, len);
+- if (ret) {
+- D1(printf("jffs2_fo_read(): read_inode_range failed %d\n",
+- ret));
+- uio->uio_resid = resid;
+- up(&f->sem);
+- return -ret;
+- }
+- resid -= len;
+- pos += len;
+- }
+-
+- // We successfully read some data, update the node's access time
+- // and update the file offset and transfer residue.
+-
+- inode->i_atime = cyg_timestamp();
+-
+- uio->uio_resid = resid;
+- fp->f_offset = pos;
+-
+- up(&f->sem);
+-
+- return ENOERR;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_fo_write()
+-// Write data to file.
+-
+-static int jffs2_fo_write (struct CYG_FILE_TAG *fp, struct CYG_UIO_TAG *uio)
+-{
+- struct page write_page;
+- off_t page_start_pos;
+- struct inode *node = (struct inode *)fp->f_data;
+- off_t pos = fp->f_offset;
+- ssize_t resid = uio->uio_resid;
+- int i;
+-
+- memset(&read_write_buffer, 0, PAGE_CACHE_SIZE);
+- write_page.virtual = &read_write_buffer;
+-
+- // If the APPEND mode bit was supplied, force all writes to
+- // the end of the file.
+- if( fp->f_flag & CYG_FAPPEND )
+- pos = fp->f_offset = node->i_size;
+-
+- // Check that pos is within current file size, or at the very end.
+- if( pos < 0 || pos > node->i_size )
+- return EINVAL;
+-
+- // Now loop over the iovecs until they are all done, or
+- // we get an error.
+- for( i = 0; i < uio->uio_iovcnt; i++ )
+- {
+- cyg_iovec *iov = &uio->uio_iov[i];
+- char *buf = (char *)iov->iov_base;
+- off_t len = iov->iov_len;
+-
+- // loop over the vector writing it to the file until it has
+- // all been done.
+- while( len > 0 )
+- {
+- //cyg_uint8 *fbuf;
+- //size_t bsize;
+- size_t writtenlen;
+- off_t l = len;
+- int err;
+-
+- write_page.index = 0;
+-
+- page_start_pos = pos;
+- while(page_start_pos >= (PAGE_CACHE_SIZE)) {
+- write_page.index++;
+- page_start_pos -= PAGE_CACHE_SIZE;
+- }
+-
+- if( l > PAGE_CACHE_SIZE - page_start_pos)
+- l = PAGE_CACHE_SIZE - page_start_pos;
+-
+- D2(printf("jffs2_fo_write write_page.index %d\n", write_page.index));
+- D2(printf("jffs2_fo_write page_start_pos %d\n", page_start_pos));
+- D2(printf("jffs2_fo_write transfer size %d\n", l));
+-
+- err = jffs2_prepare_write(node, &write_page, page_start_pos, page_start_pos + l);
+-
+- if( err != 0 )
+- return err;
+-
+- // copy data in
+- memcpy(&read_write_buffer[page_start_pos], buf, l);
+-
+- writtenlen = jffs2_commit_write(node, &write_page, page_start_pos, page_start_pos + l);
+-
+- if( writtenlen != l )
+- return ENOSPC;
+-
+- // Update working vars
+- len -= l;
+- buf += l;
+- pos += l;
+- resid -= l;
+- }
+- }
+-
+- // We wrote some data successfully, update the modified and access
+- // times of the node, increase its size appropriately, and update
+- // the file offset and transfer residue.
+- node->i_mtime =
+- node->i_ctime = cyg_timestamp();
+- if( pos > node->i_size )
+- node->i_size = pos;
+-
+- uio->uio_resid = resid;
+- fp->f_offset = pos;
+-
+- return ENOERR;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_fo_lseek()
+-// Seek to a new file position.
+-
+-static int jffs2_fo_lseek (struct CYG_FILE_TAG *fp, off_t *apos, int whence )
+-{
+- struct inode *node = (struct inode *)fp->f_data;
+- off_t pos = *apos;
+-
+- D2(printf("jffs2_fo_lseek\n"));
+-
+- switch( whence )
+- {
+- case SEEK_SET:
+- // Pos is already where we want to be.
+- break;
+-
+- case SEEK_CUR:
+- // Add pos to current offset.
+- pos += fp->f_offset;
+- break;
+-
+- case SEEK_END:
+- // Add pos to file size.
+- pos += node->i_size;
+- break;
+-
+- default:
+- return EINVAL;
+- }
+-
+- // Check that pos is still within current file size, or at the
+- // very end.
+- if( pos < 0 || pos > node->i_size )
+- return EINVAL;
+-
+- // All OK, set fp offset and return new position.
+- *apos = fp->f_offset = pos;
+-
+- return ENOERR;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_fo_ioctl()
+-// Handle ioctls. Currently none are defined.
+-
+-static int jffs2_fo_ioctl (struct CYG_FILE_TAG *fp, CYG_ADDRWORD com,
+- CYG_ADDRWORD data)
+-{
+- // No Ioctls currenly defined.
+-
+- D2(printf("jffs2_fo_ioctl\n"));
+-
+- return EINVAL;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_fo_fsync().
+-// Force the file out to data storage.
+-
+-static int jffs2_fo_fsync (struct CYG_FILE_TAG *fp, int mode )
+-{
+- // Data is always permanently where it belongs, nothing to do
+- // here.
+-
+- D2(printf("jffs2_fo_fsync\n"));
+-
+- return ENOERR;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_fo_close()
+-// Close a file. We just decrement the refcnt and let it go away if
+-// that is all that is keeping it here.
+-
+-static int jffs2_fo_close (struct CYG_FILE_TAG *fp)
+-{
+- struct inode *node = (struct inode *)fp->f_data;
+-
+- D2(printf("jffs2_fo_close\n"));
+-
+- dec_refcnt( node );
+-
+- fp->f_data = 0; // zero data pointer
+-
+- return ENOERR;
+-}
+-
+-// -------------------------------------------------------------------------
+-//jffs2_fo_fstat()
+-// Get file status.
+-
+-static int jffs2_fo_fstat (struct CYG_FILE_TAG *fp, struct stat *buf )
+-{
+- struct inode *node = (struct inode *)fp->f_data;
+-
+- D2(printf("jffs2_fo_fstat\n"));
+-
+- // Fill in the status
+- buf->st_mode = node->i_mode;
+- buf->st_ino = (ino_t)node;
+- buf->st_dev = 0;
+- buf->st_nlink = node->i_nlink;
+- buf->st_uid = 0;
+- buf->st_gid = 0;
+- buf->st_size = node->i_size;
+- buf->st_atime = node->i_atime;
+- buf->st_mtime = node->i_mtime;
+- buf->st_ctime = node->i_ctime;
+-
+- return ENOERR;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_fo_getinfo()
+-// Get info. Currently only supports fpathconf().
+-
+-static int jffs2_fo_getinfo (struct CYG_FILE_TAG *fp, int key, void *buf, int len )
+-{
+- struct inode *node = (struct inode *)fp->f_data;
+- int err;
+-
+- D2(printf("jffs2_fo_getinfo\n"));
+-
+- switch( key )
+- {
+- case FS_INFO_CONF:
+- err = jffs2_pathconf( node, (struct cyg_pathconf_info *)buf );
+- break;
+-
+- default:
+- err = EINVAL;
+- }
+- return err;
+-
+- return ENOERR;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_fo_setinfo()
+-// Set info. Nothing supported here.
+-
+-static int jffs2_fo_setinfo (struct CYG_FILE_TAG *fp, int key, void *buf, int len )
+-{
+- // No setinfo key supported at present
+-
+- D2(printf("jffs2_fo_setinfo\n"));
+-
+- return ENOERR;
+-}
+-
+-
+-//==========================================================================
+-// Directory operations
+-
+-// -------------------------------------------------------------------------
+-// jffs2_fo_dirread()
+-// Read a single directory entry from a file.
+-
+-static __inline void
+-filldir(char *nbuf, int nlen, const char * name, int namlen)
+-{
+- int len = nlen < namlen ? nlen : namlen;
+- memcpy(nbuf, name, len);
+- nbuf[len] = '\0';
+-}
+-
+-static int jffs2_fo_dirread (struct CYG_FILE_TAG *fp, struct CYG_UIO_TAG *uio)
+-{
+- struct inode *d_inode = (struct inode *)fp->f_data;
+- struct dirent *ent = (struct dirent *)uio->uio_iov[0].iov_base;
+- char *nbuf = ent->d_name;
+- int nlen = sizeof(ent->d_name)-1;
+- off_t len = uio->uio_iov[0].iov_len;
+- struct jffs2_inode_info *f;
+- struct jffs2_sb_info *c;
+- struct inode *inode = d_inode;
+- struct jffs2_full_dirent *fd;
+- unsigned long offset, curofs;
+- int found = 1;
+-
+- if( len < sizeof(struct dirent) )
+- return EINVAL;
+-
+- D1(printk(KERN_DEBUG "jffs2_readdir() for dir_i #%lu\n", d_inode->i_ino));
+-
+- f = JFFS2_INODE_INFO(inode);
+- c = JFFS2_SB_INFO(inode->i_sb);
+-
+- offset = fp->f_offset;
+-
+- if (offset == 0) {
+- D1(printk(KERN_DEBUG "Dirent 0: \".\", ino #%lu\n", inode->i_ino));
+- filldir(nbuf, nlen, ".", 1);
+- goto out;
+- }
+- if (offset == 1) {
+- filldir(nbuf, nlen, "..", 2);
+- goto out;
+- }
+-
+- curofs=1;
+- down(&f->sem);
+- for (fd = f->dents; fd; fd = fd->next) {
+-
+- curofs++;
+- /* First loop: curofs = 2; offset = 2 */
+- if (curofs < offset) {
+- D2(printk(KERN_DEBUG "Skipping dirent: \"%s\", ino #%u, type %d, because curofs %ld < offset %ld\n",
+- fd->name, fd->ino, fd->type, curofs, offset));
+- continue;
+- }
+- if (!fd->ino) {
+- D2(printk(KERN_DEBUG "Skipping deletion dirent \"%s\"\n", fd->name));
+- offset++;
+- continue;
+- }
+- D2(printk(KERN_DEBUG "Dirent %ld: \"%s\", ino #%u, type %d\n", offset, fd->name, fd->ino, fd->type));
+- filldir(nbuf, nlen, fd->name, strlen(fd->name));
+- goto out_sem;
+- }
+- /* Reached the end of the directory */
+- found = 0;
+- out_sem:
+- up(&f->sem);
+- out:
+- fp->f_offset = ++offset;
+- if (found) {
+- uio->uio_resid -= sizeof(struct dirent);
+- }
+- return ENOERR;
+-}
+-
+-// -------------------------------------------------------------------------
+-// jffs2_fo_dirlseek()
+-// Seek directory to start.
+-
+-static int jffs2_fo_dirlseek (struct CYG_FILE_TAG *fp, off_t *pos, int whence )
+-{
+- // Only allow SEEK_SET to zero
+-
+- D2(printf("jffs2_fo_dirlseek\n"));
+-
+- if( whence != SEEK_SET || *pos != 0)
+- return EINVAL;
+-
+- *pos = fp->f_offset = 0;
+-
+- return ENOERR;
+-}
+-
+-
+-//==========================================================================
+-//
+-// Called by JFFS2
+-// ===============
+-//
+-//
+-//==========================================================================
+-
+-
+-struct page *read_cache_page(unsigned long index,
+- int (*filler)(void *,struct page*),
+- void *data)
+-{
+- // Only called in gc.c jffs2_garbage_collect_dnode
+- // but gets a real page for the specified inode
+-
+- int err;
+- struct page *gc_page = malloc(sizeof(struct page));
+-
+-printf("read_cache_page\n");
+- memset(&gc_buffer, 0, PAGE_CACHE_SIZE);
+-
+- if(gc_page != NULL) {
+- gc_page->virtual = &gc_buffer;
+- gc_page->index = index;
+-
+- err = filler(data, gc_page);
+- if (err < 0) {
+- free(gc_page);
+- gc_page = NULL;
+- }
+- }
+-
+- return gc_page;
+-}
+-
+-void page_cache_release(struct page * pg) {
+-
+- // Only called in gc.c jffs2_garbage_collect_dnode
+- // but should free the page malloc'd by read_cache_page
+-
+-printf("page_cache_release\n");
+- free(pg);
+-}
+-
+-struct inode * new_inode(struct super_block *sb) {
+-
+- // Only called in write.c jffs2_new_inode
+- // Always adds itself to inode cache
+-
+- struct inode * inode;
+- struct inode * cached_inode;
+-
+- inode = malloc(sizeof(struct inode));
+- if (inode == NULL)
+- return 0;
+-
+- D2(printf("malloc new_inode %x ####################################\n", inode));
+-
+- memset(inode, 0, sizeof(struct inode));
+- inode->i_sb = sb;
+- inode->i_ino = 1;
+- inode->i_count = 0;//1; // Let ecos manage the open count
+-
+- inode->i_nlink = 1; // Let JFFS2 manage the link count
+- inode->i_size = 0;
+-
+- inode->i_cache_next = NULL; // Newest inode, about to be cached
+-
+- // Add to the icache
+- for(cached_inode = sb->s_root; cached_inode != NULL; cached_inode = cached_inode->i_cache_next) {
+- if (cached_inode->i_cache_next == NULL) {
+- cached_inode->i_cache_next = inode; // Current last in cache points to newcomer
+- inode->i_cache_prev = cached_inode; // Newcomer points back to last
+- break;
+- }
+- }
+-
+- return inode;
+-}
+-
+-struct inode * iget(struct super_block *sb, cyg_uint32 ino) {
+-
+- // Substitute for iget drops straight through to reading the
+- // inode from disk if it is not in the inode cache
+-
+- // Called in super.c jffs2_read_super, dir.c jffs2_lookup,
+- // and gc.c jffs2_garbage_collect_pass
+-
+- // Must first check for cached inode
+- // If this fails let new_inode create one
+-
+- struct inode * inode;
+-
+- D2(printf("iget\n"));
+-
+- // Check for this inode in the cache
+- for(inode = sb->s_root; inode != NULL; inode = inode->i_cache_next) {
+- if (inode->i_ino == ino)
+- return inode;
+- }
+- inode = NULL;
+-
+- // Not cached, so malloc it
+- inode = new_inode(sb);
+- if (inode == NULL)
+- return 0;
+-
+- inode->i_ino = ino;
+- jffs2_read_inode(inode);
+-
+- return inode;
+-}
+-
+-void iput(struct inode * i) {
+-
+- // Called in dec_refcnt, jffs2_find
+- // (and jffs2_open and jffs2_ops_mkdir?)
+- // super.c jffs2_read_super,
+- // and gc.c jffs2_garbage_collect_pass
+-
+- struct inode *cached_inode;
+-
+- D2(printf("free iput inode %x $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n", i));
+- if (i && i->i_count) {
+- /* Added by dwmw2. iget/iput in Linux track the use count,
+- don't just unconditionally free it */
+- printf("iput called for used inode\n");
+- return;
+- }
+- if (i != NULL) {
+- // Remove from the icache
+- for(cached_inode = i->i_sb->s_root; cached_inode != NULL; cached_inode = cached_inode->i_cache_next) {
+- if (cached_inode == i) {
+- cached_inode->i_cache_prev->i_cache_next = cached_inode->i_cache_next; // Prveious entry points ahead of us
+- if (cached_inode->i_cache_next != NULL)
+- cached_inode->i_cache_next->i_cache_prev = cached_inode->i_cache_prev; // Next entry points behind us
+- break;
+- }
+- }
+- // inode has been seperated from the cache
+- jffs2_clear_inode(i);
+- free(i);
+- }
+-}
+-
+-static int return_EIO(void)
+-{
+- return -EIO;
+-}
+-
+-#define EIO_ERROR ((void *) (return_EIO))
+-
+-void make_bad_inode(struct inode * inode) {
+-
+- // In readinode.c JFFS2 checks whether the inode has appropriate
+- // content for its marked type
+-
+- D2(printf("make_bad_inode\n"));
+-
+- inode->i_mode = S_IFREG;
+- inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
+- inode->i_op = EIO_ERROR;
+- inode->i_fop = EIO_ERROR;
+-}
+-
+-int is_bad_inode(struct inode * inode) {
+-
+- // Called in super.c jffs2_read_super,
+- // and gc.c jffs2_garbage_collect_pass
+-
+- D2(printf("is_bad_inode\n"));
+-
+- return (inode->i_op == EIO_ERROR);
+- /*if(i == NULL)
+- return 1;
+- return 0;*/
+-}
+-
+-cyg_bool jffs2_flash_read(struct jffs2_sb_info *c, cyg_uint32 read_buffer_offset, const size_t size, size_t * return_size, char * write_buffer) {
+- Cyg_ErrNo err;
+- cyg_uint32 len = size;
+- struct super_block *sb = OFNI_BS_2SFFJ( c );
+-
+- //D2(printf("FLASH READ\n"));
+- //D2(printf("read address = %x\n", CYGNUM_FS_JFFS2_BASE_ADDRESS + read_buffer_offset));
+- //D2(printf("write address = %x\n", write_buffer));
+- //D2(printf("size = %x\n", size));
+- err = cyg_io_bread( sb->s_dev, write_buffer, &len, read_buffer_offset );
+-
+- *return_size = (size_t)len;
+- return ( err != ENOERR );
+-}
+-
+-cyg_bool jffs2_flash_write(struct jffs2_sb_info *c, cyg_uint32 write_buffer_offset, const size_t size, size_t * return_size, char * read_buffer) {
+-
+- Cyg_ErrNo err;
+- cyg_uint32 len = size;
+- struct super_block *sb = OFNI_BS_2SFFJ( c );
+-
+- // D2(printf("FLASH WRITE ENABLED!!!\n"));
+- // D2(printf("write address = %x\n", CYGNUM_FS_JFFS2_BASE_ADDRESS + write_buffer_offset));
+- // D2(printf("read address = %x\n", read_buffer));
+- // D2(printf("size = %x\n", size));
+-
+- err = cyg_io_bwrite( sb->s_dev, read_buffer, &len, write_buffer_offset );
+- *return_size = (size_t)len;
+-
+- return ( err != ENOERR );
+-}
+-
+-int
+-jffs2_flash_writev(struct jffs2_sb_info *c, const struct iovec *vecs,
+- unsigned long count, loff_t to, size_t *retlen)
+-{
+- unsigned long i;
+- size_t totlen = 0, thislen;
+- int ret = 0;
+-
+- for (i=0; i<count; i++) {
+- // writes need to be aligned but the data we're passed may not be
+- // Observation suggests most unaligned writes are small, so we
+- // optimize for that case.
+-
+- if ( ((vecs[i].iov_len & (sizeof(int)-1))) ||
+- (((unsigned long)vecs[i].iov_base & (sizeof(unsigned long)-1))) )
+- {
+- // are there iov's after this one? Or is it so much we'd need
+- // to do multiple writes anyway?
+- if ( (i+1)<count || vecs[i].iov_len > 256 )
+- {
+- // cop out and malloc
+- unsigned long j;
+- ssize_t sizetomalloc=0, totvecsize=0;
+- char *cbuf, *cbufptr;
+-
+- for (j=i;j<count; j++)
+- totvecsize += vecs[j].iov_len;
+-
+- // pad up in case unaligned
+- sizetomalloc = totvecsize + sizeof(int)-1;
+- sizetomalloc &= ~(sizeof(int)-1);
+- cbuf = (char *)malloc( sizetomalloc );
+- // malloc returns aligned memory
+- if (!cbuf)
+- {
+- ret = -ENOMEM;
+- goto writev_out;
+- }
+- cbufptr = cbuf;
+- for (j=i;j<count; j++)
+- {
+- memcpy( cbufptr, vecs[j].iov_base, vecs[j].iov_len );
+- cbufptr += vecs[j].iov_len;
+- }
+- ret = jffs2_flash_write(c, to, sizetomalloc, &thislen, cbuf );
+- if ( thislen > totvecsize ) // in case it was aligned up
+- thislen = totvecsize;
+- totlen += thislen;
+- free(cbuf);
+- goto writev_out;
+- }
+- else
+- {
+- // otherwise optimize for the common case
+- int buf[256/sizeof(int)]; // int, so int aligned
+- size_t lentowrite;
+-
+- lentowrite = vecs[i].iov_len;
+- // pad up in case its unaligned
+- lentowrite += sizeof(int)-1;
+- lentowrite &= ~(sizeof(int)-1);
+- memcpy( buf, vecs[i].iov_base, lentowrite );
+-
+- ret = jffs2_flash_write(c, to, lentowrite, &thislen,
+- (char *)&buf );
+- if ( thislen > vecs[i].iov_len )
+- thislen = vecs[i].iov_len;
+- } // else
+- }
+- else
+- ret = jffs2_flash_write(c, to, vecs[i].iov_len, &thislen,
+- vecs[i].iov_base);
+- totlen += thislen;
+- if (ret || thislen != vecs[i].iov_len)
+- break;
+- to += vecs[i].iov_len;
+- }
+-writev_out:
+- if (retlen)
+- *retlen = totlen;
+-
+- return ret;
+-}
+-
+-cyg_bool jffs2_flash_erase(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb) {
+- cyg_io_flash_getconfig_erase_t e;
+- void *err_addr;
+- Cyg_ErrNo err;
+- cyg_uint32 len = sizeof(e);
+- struct super_block *sb = OFNI_BS_2SFFJ( c );
+-
+- e.offset = jeb->offset;
+- e.len = c->sector_size;
+- e.err_address = &err_addr;
+-
+- // D2(printf("FLASH ERASE ENABLED!!!\n"));
+- // D2(printf("erase address = %x\n", CYGNUM_FS_JFFS2_BASE_ADDRESS + jeb->offset));
+- // D2(printf("size = %x\n", c->sector_size));
+-
+- err = cyg_io_get_config( sb->s_dev, CYG_IO_GET_CONFIG_FLASH_ERASE,
+- &e, &len );
+-
+- return ( err != ENOERR || e.flasherr != 0 );
+-}
+-
+-// -------------------------------------------------------------------------
+-// EOF jffs2.c
+diff -Nur linux/fs/jffs2/ecos/src/jffs2port.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/src/jffs2port.h
+--- linux/fs/jffs2/ecos/src/jffs2port.h 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/src/jffs2port.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,342 +0,0 @@
+-#ifndef __LINUX_JFFS2PORT_H__
+-#define __LINUX_JFFS2PORT_H__
+-
+-/* $Id: jffs2port.h,v 1.1 2002/07/11 10:55:30 dwmw2 Exp $ */
+-
+-#include <pkgconf/system.h>
+-#include <pkgconf/hal.h>
+-//#include <pkgconf/kernel.h>
+-#include <pkgconf/io_fileio.h>
+-//#include <pkgconf/fs_ram.h>
+-
+-#include <cyg/infra/cyg_trac.h> // tracing macros
+-#include <cyg/infra/cyg_ass.h> // assertion macros
+-
+-#include <unistd.h>
+-#include <sys/types.h>
+-#include <fcntl.h>
+-#include <sys/stat.h>
+-#include <errno.h>
+-#include <dirent.h>
+-
+-#include <stdlib.h>
+-#include <string.h>
+-
+-#include <cyg/fileio/fileio.h>
+-
+-#include <cyg/hal/drv_api.h>
+-#include <cyg/infra/diag.h>
+-
+-#include <cyg/io/flash.h>
+-
+-#include <pkgconf/fs_jffs2.h>
+-
+-#include "list.h"
+-
+-// ARM related constants
+-#define PAGE_SHIFT 0xC
+-#define PAGE_SIZE (0x1 << PAGE_SHIFT)
+-#define PAGE_CACHE_SHIFT PAGE_SHIFT
+-#define PAGE_CACHE_SIZE PAGE_SIZE
+-
+-//#define BITS_PER_LONG 32
+-
+-// Linux types
+-#define printf diag_printf
+-#define printk diag_printf
+-#define BUG() diag_printf("BUG()\n")
+-
+-#define uint8_t cyg_uint8
+-#define uint16_t cyg_uint16
+-#define uint32_t cyg_uint32
+-#define loff_t off_t
+-
+-#define min(x,y) (x<y?x:y)
+-#define max(x,y) (x<y?y:x)
+-#define min_t(t, x,y) ((t)x<(t)y?(t)x:(t)y)
+-
+-#define atomic_t int
+-#define atomic_inc(atom) (*atom)++
+-#define atomic_dec(atom) (*atom)--
+-#define atomic_read(atom) (*atom)
+-
+-#define kmalloc(a,b) malloc(a)
+-#define kfree(a) free(a)
+-
+-#define PageLocked(pg) 1
+-#define Page_Uptodate(pg) 0
+-#define UnlockPage(pg)
+-#define PAGE_BUG(pg) BUG()
+-#define ClearPageUptodate(pg)
+-#define SetPageError(pg)
+-#define ClearPageError(pg)
+-#define SetPageUptodate(pg)
+-
+-#define jiffies 100
+-
+-#define ERR_PTR(err) (void*)(err)
+-#define PTR_ERR(err) (cyg_int32)(err)
+-#define IS_ERR(err) (err==NULL)
+-
+-#define CURRENT_TIME cyg_timestamp()
+-
+-//#define spinlock_t cyg_spinlock_t
+-typedef struct { } spinlock_t;
+-#define SPIN_LOCK_UNLOCKED (spinlock_t) { }
+-#define spin_lock_init(lock) do{} while (0)
+-#define spin_lock(lock) do{} while (0)
+-#define spin_unlock(lock) do{} while (0)
+-#define spin_lock_bh(lock) do{} while (0)
+-#define spin_unlock_bh(lock) do{} while (0)
+-
+-struct semaphore {
+- cyg_drv_mutex_t x;
+-};
+-
+-#define init_MUTEX(sem) cyg_drv_mutex_init((cyg_drv_mutex_t *)sem)
+-#define init_MUTEX_LOCKED(sem) do { cyg_drv_mutex_init((cyg_drv_mutex_t *)sem); cyg_drv_mutex_lock((cyg_drv_mutex_t *)sem); } while(0)
+-#define down(sem) cyg_drv_mutex_lock((cyg_drv_mutex_t *)sem)
+-#define down_interruptible(sem) ({ cyg_drv_mutex_lock((cyg_drv_mutex_t *)sem), 0; })
+-#define up(sem) cyg_drv_mutex_unlock((cyg_drv_mutex_t *)sem)
+-
+-#define wait_queue_head_t cyg_uint32
+-#define init_waitqueue_head(wait) do{} while (0)
+-#define add_wait_queue(wait,new_wait) do{} while (0)
+-#define remove_wait_queue(wait,old_wait) do{} while (0)
+-#define DECLARE_WAITQUEUE(wait,current) do{} while (0)
+-
+-#define KERN_EMERG "<0>" // system is unusable
+-#define KERN_ALERT "<1>" // action must be taken immediately
+-#define KERN_CRIT "<2>" // critical conditions
+-#define KERN_ERR "<3>" // error conditions
+-#define KERN_WARNING "<4>" // warning conditions
+-#define KERN_NOTICE "<5>" // normal but significant condition
+-#define KERN_INFO "<6>" // informational
+-#define KERN_DEBUG "<7>" // debug-level messages
+-
+-// Structures used by VFS
+-
+-typedef unsigned short kdev_t;
+-
+-struct qstr {
+- const unsigned char * name;
+- unsigned int len;
+- unsigned int hash;
+-};
+-
+-#define DNAME_INLINE_LEN 16
+-
+-struct dentry {
+- atomic_t d_count;
+- unsigned int d_flags;
+- struct inode * d_inode; /* Where the name belongs to - NULL is negative */
+- struct dentry * d_parent; /* parent directory */
+- struct list_head d_hash; /* lookup hash list */
+- struct list_head d_child; /* child of parent list */
+- struct list_head d_subdirs; /* our children */
+- struct list_head d_alias; /* inode alias list */
+- struct qstr d_name;
+- struct dentry_operations *d_op;
+- struct super_block * d_sb; /* The root of the dentry tree */
+- unsigned char d_iname[DNAME_INLINE_LEN]; /* small names */
+-};
+-
+-struct file {
+- struct dentry *f_dentry;
+- unsigned int f_flags;
+- mode_t f_mode;
+- loff_t f_pos;
+- unsigned long f_reada, f_ramax, f_raend, f_ralen, f_rawin;
+-};
+-
+-#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
+-
+-typedef unsigned short umode_t;
+-
+-struct iattr {
+- unsigned int ia_valid;
+- umode_t ia_mode;
+- uid_t ia_uid;
+- gid_t ia_gid;
+- loff_t ia_size;
+- time_t ia_atime;
+- time_t ia_mtime;
+- time_t ia_ctime;
+-};
+-
+-struct page {
+- unsigned long index;
+- void *virtual;
+-};
+-
+-struct nameidata {
+- struct dentry *dentry;
+- struct qstr last;
+- unsigned int flags;
+- int last_type;
+-};
+-
+-struct file_operations {
+- //struct module *owner;
+- //loff_t (*llseek) (struct file *, loff_t, int);
+- ssize_t (*read) (struct file *, char *, size_t, loff_t *);
+- //ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
+- int (*readdir) (struct file *, char *, int);
+- //unsigned int (*poll) (struct file *, struct poll_table_struct *);
+- int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
+- //int (*mmap) (struct file *, struct vm_area_struct *);
+- //int (*open) (struct inode *, struct file *);
+- //int (*flush) (struct file *);
+- //int (*release) (struct inode *, struct file *);
+- int (*fsync) (struct file *, struct dentry *, int datasync);
+- //int (*fasync) (int, struct file *, int);
+- //int (*lock) (struct file *, int, struct file_lock *);
+- //ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *);
+- //ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *);
+-};
+-
+-struct inode_operations {
+- int (*create) (struct inode *,struct dentry *,int);
+- struct dentry * (*lookup) (struct inode *,struct dentry *);
+- int (*link) (struct dentry *,struct inode *,struct dentry *);
+- int (*unlink) (struct inode *,struct dentry *);
+- int (*symlink) (struct inode *,struct dentry *,const char *);
+- int (*mkdir) (struct inode *,struct dentry *,int);
+- int (*rmdir) (struct inode *,struct dentry *);
+- int (*mknod) (struct inode *,struct dentry *,int,int);
+- int (*rename) (struct inode *, struct dentry *,
+- struct inode *, struct dentry *);
+- int (*readlink) (struct dentry *, char *,int);
+- int (*follow_link) (struct dentry *, struct nameidata *);
+- //void (*truncate) (struct inode *);
+- int (*permission) (struct inode *, int);
+- //int (*revalidate) (struct dentry *);
+- int (*setattr) (struct dentry *, struct iattr *);
+- //int (*getattr) (struct dentry *, struct iattr *);
+-};
+-
+-/*
+- * File types
+- */
+-#define DT_UNKNOWN 0
+-#define DT_DIR 4
+-#define DT_REG 8
+-
+-struct iovec {
+- void *iov_base;
+- ssize_t iov_len;
+-};
+-
+-// FIXME: we must provide some translation so that Linux-created jffs2
+-// partitions can be read on eCos and vice versa
+-
+-#define S_IFMT 0xF9 // Quick fix for clash on ecos / linux mode bits
+-#define S_IFDIR __stat_mode_DIR
+-#define S_IFREG __stat_mode_REG
+-#define S_IFBLK __stat_mode_BLK
+-#define S_IFCHR __stat_mode_CHR
+-#define S_IFLNK 0x101
+-#define S_IFSOCK 0x102
+-#define S_IFIFO __stat_mode_FIFO
+-#define S_IRUGO 0x103
+-#define S_IXUGO 0x104
+-#define S_IRWXUGO 0x105
+-
+-
+-// called by JFFS2
+-
+-#define to_kdev_t(rdev) (rdev)
+-#define MAJOR(rdev) (rdev)>>8
+-#define MINOR(rdev) (rdev)
+-
+-#define page_address(page) ((page)->virtual)
+-
+-static __inline__ void * kmap(struct page * page) {
+- return page_address(page);
+-}
+-
+-#define kunmap(page) do { } while (0)
+-
+-//struct page * read_cache_page(cyg_uint32 start, void * f, struct inode * i);
+-struct page *read_cache_page(unsigned long index, int (*filler)(void *,struct page*), void *data);
+-void page_cache_release(struct page * pg);
+-
+-struct inode * new_inode(struct super_block *sb);
+-struct inode * iget(struct super_block *sb, cyg_uint32 ino);
+-void iput(struct inode * i);
+-void make_bad_inode(struct inode * inode);
+-int is_bad_inode(struct inode * inode);
+-
+-#define insert_inode_hash(inode) do { } while (0)
+-
+-#define d_alloc_root(root_inode) root_inode
+-
+-#define flush_dcache_page(page) do { } while (0)
+-
+-struct jffs2_sb_info;
+-struct jffs2_eraseblock;
+-
+-cyg_bool jffs2_flash_read(struct jffs2_sb_info *c, cyg_uint32 read_buffer_offset, const size_t size, size_t * return_size, char * write_buffer);
+-cyg_bool jffs2_flash_write(struct jffs2_sb_info *c, cyg_uint32 write_buffer_offset, const size_t size, size_t * return_size, char * read_buffer);
+-int jffs2_flash_writev(struct jffs2_sb_info *c, const struct iovec *vecs, unsigned long count, loff_t to, size_t *retlen);
+-cyg_bool jffs2_flash_erase(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb);
+-
+-static inline void wake_up(wait_queue_head_t *erase_wait)
+-{ /* Only used for waking up threads blocks on erases. Not used in eCos */ }
+-
+-// calls to JFFS2
+-
+-// dir-ecos.c
+-struct inode *jffs2_lookup(struct inode *dir_i, struct qstr *name);
+-int jffs2_readdir (struct inode *d_inode, unsigned long f_pos, char *nbuf, int nlen);
+-int jffs2_create(struct inode *dir_i, struct qstr *d_name, int mode, struct inode **new_i);
+-int jffs2_mkdir (struct inode *dir_i, struct qstr *d_name, int mode, struct inode **new_i);
+-int jffs2_link (struct inode *old_d_inode, struct inode *dir_i, struct qstr *d_name);
+-int jffs2_unlink(struct inode *dir_i, struct inode *d_inode, struct qstr *d_name);
+-int jffs2_rmdir (struct inode *dir_i, struct inode *d_inode, struct qstr *d_name);
+-int jffs2_rename (struct inode *old_dir_i, struct inode *d_inode, struct qstr *old_d_name,
+- struct inode *new_dir_i, struct qstr *new_d_name);
+-
+-#define init_name_hash() 0
+-static inline unsigned long partial_name_hash(unsigned long c, unsigned long prevhash)
+-{
+- prevhash = (prevhash << 4) | (prevhash >> (8*sizeof(unsigned long)-4));
+- return prevhash ^ c;
+-}
+-
+-static inline unsigned long end_name_hash(unsigned long hash)
+-{
+- if (sizeof(hash) > sizeof(unsigned int))
+- hash += hash >> 4*sizeof(hash);
+- return (unsigned int) hash;
+-}
+-
+-static inline unsigned int full_name_hash(const unsigned char * name, unsigned int len) {
+-
+- unsigned long hash = init_name_hash();
+- while (len--)
+- hash = partial_name_hash(*name++, hash);
+- return end_name_hash(hash);
+-}
+-
+-#endif /* __LINUX_JFFS2PORT_H__ */
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+diff -Nur linux/fs/jffs2/ecos/src/list.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/src/list.h
+--- linux/fs/jffs2/ecos/src/list.h 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/src/list.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,96 +0,0 @@
+-/*
+- * JFFS2 -- Journalling Flash File System, Version 2.
+- *
+- * Copyright (C) 2002 Red Hat, Inc.
+- *
+- * Created by Jonathan Larmour <jlarmour@redhat.com>
+- *
+- * For licensing information, see the file 'LICENCE' in this directory.
+- *
+- * $Id: list.h,v 1.1 2002/07/11 10:55:30 dwmw2 Exp $
+- *
+- */
+-
+-#ifndef CYGONCE_FS_JFFS2_LIST_H
+-#define CYGONCE_FS_JFFS2_LIST_H
+-
+-
+-/* -----------------------------------------------------------------------*/
+-
+-/* Doubly linked list implementation to replace the GPL'd one used in
+- the Linux kernel. */
+-
+-#include <stddef.h>
+-#include <cyg/infra/cyg_type.h>
+-
+-/* TYPES */
+-
+-struct list_head {
+- struct list_head *next;
+- struct list_head *prev;
+-};
+-
+-/* MACROS */
+-
+-#define INIT_LIST_HEAD( _list_ ) \
+-CYG_MACRO_START \
+-(_list_)->next = (_list_)->prev = (_list_); \
+-CYG_MACRO_END
+-
+-/* FUNCTIONS */
+-
+-/* Insert an entry _after_ the specified entry */
+-static __inline__ void
+-list_add( struct list_head *newent, struct list_head *afterthisent )
+-{
+- struct list_head *next = afterthisent->next;
+- newent->next = next;
+- newent->prev = afterthisent;
+- afterthisent->next = newent;
+- next->prev = newent;
+-} /* list_add() */
+-
+-/* Insert an entry _before_ the specified entry */
+-static __inline__ void
+-list_add_tail( struct list_head *newent, struct list_head *beforethisent )
+-{
+- struct list_head *prev = beforethisent->prev;
+- newent->prev = prev;
+- newent->next = beforethisent;
+- beforethisent->prev = newent;
+- prev->next = newent;
+-} /* list_add_tail() */
+-
+-/* Delete the specified entry */
+-static __inline__ void
+-list_del( struct list_head *ent )
+-{
+- ent->prev->next = ent->next;
+- ent->next->prev = ent->prev;
+-} /* list_del() */
+-
+-/* Is this list empty? */
+-static __inline__ int
+-list_empty( struct list_head *list )
+-{
+- return ( list->next == list );
+-} /* list_empty() */
+-
+-/* list_entry - Assuming you have a struct of type _type_ that contains a
+- list which has the name _member_ in that struct type, then given the
+- address of that list in the struct, _list_, this returns the address
+- of the container structure */
+-
+-#define list_entry( _list_, _type_, _member_ ) \
+- ((_type_ *)((char *)(_list_)-(char *)(offsetof(_type_,_member_))))
+-
+-/* list_for_each - using _ent_, iterate through list _list_ */
+-
+-#define list_for_each( _ent_, _list_ ) \
+- for ( (_ent_) = (_list_)->next; \
+- (_ent_) != (_list_); \
+- (_ent_) = (_ent_)->next )
+-
+-/* -----------------------------------------------------------------------*/
+-#endif /* #ifndef CYGONCE_FS_JFFS2_LIST_H */
+-/* EOF list.h */
+diff -Nur linux/fs/jffs2/ecos/src/malloc-ecos.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/src/malloc-ecos.c
+--- linux/fs/jffs2/ecos/src/malloc-ecos.c 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/src/malloc-ecos.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,98 +0,0 @@
+-/*
+- * JFFS2 -- Journalling Flash File System, Version 2.
+- *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
+- *
+- * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+- *
+- * For licensing information, see the file 'LICENCE' in this directory.
+- *
+- * $Id: malloc-ecos.c,v 1.1 2002/07/11 10:55:30 dwmw2 Exp $
+- *
+- */
+-
+-#include "nodelist.h"
+-
+-struct jffs2_full_dirent *jffs2_alloc_full_dirent(int namesize)
+-{
+- return malloc(sizeof(struct jffs2_full_dirent) + namesize);
+-}
+-
+-void jffs2_free_full_dirent(struct jffs2_full_dirent *x)
+-{
+- free(x);
+-}
+-
+-struct jffs2_full_dnode *jffs2_alloc_full_dnode(void)
+-{
+- return malloc(sizeof(struct jffs2_full_dnode));
+-}
+-
+-void jffs2_free_full_dnode(struct jffs2_full_dnode *x)
+-{
+- free(x);
+-}
+-
+-struct jffs2_raw_dirent *jffs2_alloc_raw_dirent(void)
+-{
+- return malloc(sizeof(struct jffs2_raw_dirent));
+-}
+-
+-void jffs2_free_raw_dirent(struct jffs2_raw_dirent *x)
+-{
+- free(x);
+-}
+-
+-struct jffs2_raw_inode *jffs2_alloc_raw_inode(void)
+-{
+- return malloc(sizeof(struct jffs2_raw_inode));
+-}
+-
+-void jffs2_free_raw_inode(struct jffs2_raw_inode *x)
+-{
+- free(x);
+-}
+-
+-struct jffs2_tmp_dnode_info *jffs2_alloc_tmp_dnode_info(void)
+-{
+- return malloc(sizeof(struct jffs2_tmp_dnode_info));
+-}
+-
+-void jffs2_free_tmp_dnode_info(struct jffs2_tmp_dnode_info *x)
+-{
+- free(x);
+-}
+-
+-struct jffs2_raw_node_ref *jffs2_alloc_raw_node_ref(void)
+-{
+- return malloc(sizeof(struct jffs2_raw_node_ref));
+-}
+-
+-void jffs2_free_raw_node_ref(struct jffs2_raw_node_ref *x)
+-{
+- free(x);
+-}
+-
+-struct jffs2_node_frag *jffs2_alloc_node_frag(void)
+-{
+- return malloc(sizeof(struct jffs2_node_frag));
+-}
+-
+-void jffs2_free_node_frag(struct jffs2_node_frag *x)
+-{
+- free(x);
+-}
+-
+-struct jffs2_inode_cache *jffs2_alloc_inode_cache(void)
+-{
+- struct jffs2_inode_cache *ret = malloc(sizeof(struct jffs2_inode_cache));
+- D1(printk(KERN_DEBUG "Allocated inocache at %p\n", ret));
+- return ret;
+-}
+-
+-void jffs2_free_inode_cache(struct jffs2_inode_cache *x)
+-{
+- D1(printk(KERN_DEBUG "Freeing inocache at %p\n", x));
+- free(x);
+-}
+-
+diff -Nur linux/fs/jffs2/ecos/src/os-ecos.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/src/os-ecos.h
+--- linux/fs/jffs2/ecos/src/os-ecos.h 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/src/os-ecos.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,135 +0,0 @@
+-/*
+- * JFFS2 -- Journalling Flash File System, Version 2.
+- *
+- * Copyright (C) 2002 Red Hat, Inc.
+- *
+- * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+- *
+- * For licensing information, see the file 'LICENCE' in this directory.
+- *
+- * $Id: os-ecos.h,v 1.1 2002/07/11 10:55:30 dwmw2 Exp $
+- *
+- */
+-
+-#ifndef __JFFS2_OS_ECOS_H__
+-#define __JFFS2_OS_ECOS_H__
+-
+-#include <cyg/io/io.h>
+-
+-#define CONFIG_JFFS2_FS_DEBUG 0
+-
+- /* Read-only operation not currently implemented on eCos */
+-#define jffs2_is_readonly(c) (0)
+-
+-/* NAND flash not currently supported on eCos */
+-#define jffs2_can_mark_obsolete(c) (1)
+-
+-#define JFFS2_INODE_INFO(i) (&(i)->jffs2_i)
+-#define OFNI_EDONI_2SFFJ(f) ((struct inode *) ( ((char *)f) - ((char *)(&((struct inode *)NULL)->jffs2_i)) ) )
+-
+-#define JFFS2_F_I_SIZE(f) (OFNI_EDONI_2SFFJ(f)->i_size)
+-#define JFFS2_F_I_MODE(f) (OFNI_EDONI_2SFFJ(f)->i_mode)
+-#define JFFS2_F_I_UID(f) (OFNI_EDONI_2SFFJ(f)->i_uid)
+-#define JFFS2_F_I_GID(f) (OFNI_EDONI_2SFFJ(f)->i_gid)
+-#define JFFS2_F_I_CTIME(f) (OFNI_EDONI_2SFFJ(f)->i_ctime)
+-#define JFFS2_F_I_MTIME(f) (OFNI_EDONI_2SFFJ(f)->i_mtime)
+-#define JFFS2_F_I_ATIME(f) (OFNI_EDONI_2SFFJ(f)->i_atime)
+-
+-/* FIXME: eCos doesn't hav a concept of device major/minor numbers */
+-#define JFFS2_F_I_RDEV_MIN(f) (MINOR(to_kdev_t(OFNI_EDONI_2SFFJ(f)->i_rdev)))
+-#define JFFS2_F_I_RDEV_MAJ(f) (MAJOR(to_kdev_t(OFNI_EDONI_2SFFJ(f)->i_rdev)))
+-
+-struct inode {
+- //struct list_head i_hash;
+- //struct list_head i_list;
+- struct list_head i_dentry;
+-
+- cyg_uint32 i_ino;
+- atomic_t i_count;
+- //kdev_t i_dev;
+- mode_t i_mode;
+- nlink_t i_nlink;
+- uid_t i_uid;
+- gid_t i_gid;
+- kdev_t i_rdev;
+- off_t i_size;
+- time_t i_atime;
+- time_t i_mtime;
+- time_t i_ctime;
+- unsigned long i_blksize;
+- unsigned long i_blocks;
+- //unsigned long i_version;
+- //struct semaphore i_sem;
+- //struct semaphore i_zombie;
+- struct inode_operations *i_op;
+- struct file_operations *i_fop; // former ->i_op->default_file_ops
+- struct super_block *i_sb;
+- //wait_queue_head_t i_wait;
+- //struct file_lock *i_flock;
+- //struct address_space *i_mapping;
+- //struct address_space i_data;
+- //struct dquot *i_dquot[MAXQUOTAS];
+- //struct pipe_inode_info *i_pipe;
+- //struct block_device *i_bdev;
+-
+- //unsigned long i_state;
+-
+- unsigned int i_flags;
+- //unsigned char i_sock;
+-
+- atomic_t i_writecount;
+- //unsigned int i_attr_flags;
+- //uint32_t i_generation;
+- struct jffs2_inode_info jffs2_i;
+-
+- struct inode *i_parent;
+-
+- struct inode *i_cache_prev;
+- struct inode *i_cache_next;
+-};
+-
+-#define JFFS2_SB_INFO(sb) (&(sb)->jffs2_sb)
+-
+-#define OFNI_BS_2SFFJ(c) ((struct super_block *) ( ((char *)c) - ((char *)(&((struct super_block *)NULL)->jffs2_sb)) ) )
+-
+-struct super_block {
+- unsigned long s_blocksize;
+- unsigned char s_blocksize_bits;
+- unsigned char s_dirt;
+- //struct super_operations *s_op;
+- unsigned long s_flags;
+- unsigned long s_magic;
+- //struct dentry *s_root;
+- struct inode *s_root;
+- struct jffs2_sb_info jffs2_sb;
+- unsigned long s_mount_count;
+- cyg_io_handle_t s_dev;
+-};
+-
+-/* background.c */
+-static inline void jffs2_garbage_collect_trigger(struct jffs2_sb_info *c)
+-{
+- /* We don't have a GC thread in eCos (yet) */
+-}
+-
+-/* dir.c */
+-extern struct file_operations jffs2_dir_operations;
+-extern struct inode_operations jffs2_dir_inode_operations;
+-
+-/* file.c */
+-extern struct file_operations jffs2_file_operations;
+-extern struct inode_operations jffs2_file_inode_operations;
+-extern struct address_space_operations jffs2_file_address_operations;
+-int jffs2_null_fsync(struct file *, struct dentry *, int);
+-int jffs2_setattr (struct dentry *dentry, struct iattr *iattr);
+-int jffs2_do_readpage_nolock (struct inode *inode, struct page *pg);
+-int jffs2_do_readpage_unlock (struct inode *inode, struct page *pg);
+-//int jffs2_readpage (struct file *, struct page *);
+-int jffs2_readpage (struct inode *d_inode, struct page *pg);
+-//int jffs2_prepare_write (struct file *, struct page *, unsigned, unsigned);
+-int jffs2_prepare_write (struct inode *d_inode, struct page *pg, unsigned start, unsigned end);
+-//int jffs2_commit_write (struct file *, struct page *, unsigned, unsigned);
+-int jffs2_commit_write (struct inode *d_inode, struct page *pg, unsigned start, unsigned end);
+-
+-
+-#endif /* __JFFS2_OS_ECOS_H__ */
+diff -Nur linux/fs/jffs2/ecos/tests/fileio1.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/tests/fileio1.c
+--- linux/fs/jffs2/ecos/tests/fileio1.c 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/tests/fileio1.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,660 +0,0 @@
+-//==========================================================================
+-//
+-// fileio1.c
+-//
+-// Test fileio system
+-//
+-//==========================================================================
+-//####COPYRIGHTBEGIN####
+-//
+-// -------------------------------------------
+-// The contents of this file are subject to the Red Hat eCos Public License
+-// Version 1.1 (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.redhat.com/
+-//
+-// Software distributed under the License is distributed on an "AS IS"
+-// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-// License for the specific language governing rights and limitations under
+-// the License.
+-//
+-// The Original Code is eCos - Embedded Configurable Operating System,
+-// released September 30, 1998.
+-//
+-// The Initial Developer of the Original Code is Red Hat.
+-// Portions created by Red Hat are
+-// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
+-// All Rights Reserved.
+-// -------------------------------------------
+-//
+-//####COPYRIGHTEND####
+-//==========================================================================
+-//#####DESCRIPTIONBEGIN####
+-//
+-// Author(s): nickg
+-// Contributors: nickg
+-// Date: 2000-05-25
+-// Purpose: Test fileio system
+-// Description: This test uses the testfs to check out the initialization
+-// and basic operation of the fileio system
+-//
+-//
+-//
+-//
+-//
+-//
+-//
+-//####DESCRIPTIONEND####
+-//
+-//==========================================================================
+-
+-#include <pkgconf/hal.h>
+-#include <pkgconf/kernel.h>
+-#include <pkgconf/io_fileio.h>
+-
+-#include <cyg/kernel/ktypes.h> // base kernel types
+-#include <cyg/infra/cyg_trac.h> // tracing macros
+-#include <cyg/infra/cyg_ass.h> // assertion macros
+-#include <cyg/io/flash.h>
+-
+-#include <unistd.h>
+-#include <fcntl.h>
+-#include <sys/stat.h>
+-#include <errno.h>
+-#include <string.h>
+-#include <dirent.h>
+-
+-#include <cyg/fileio/fileio.h>
+-
+-#include <cyg/infra/testcase.h>
+-#include <cyg/infra/diag.h> // HAL polled output
+-
+-#include <pkgconf/fs_jffs2.h> // Address of JFFS2
+-
+-//==========================================================================
+-
+-#if 0
+-MTAB_ENTRY( jffs2_mte1,
+- "/",
+- "jffs2",
+- CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1,
+- 0);
+-#endif
+-
+-//==========================================================================
+-
+-#define SHOW_RESULT( _fn, _res ) \
+-diag_printf("<FAIL>: " #_fn "() returned %d %s\n", _res, _res<0?strerror(errno):"");
+-
+-//==========================================================================
+-
+-#define IOSIZE 100
+-
+-#define LONGNAME1 "long_file_name_that_should_take_up_more_than_one_directory_entry_1"
+-#define LONGNAME2 "long_file_name_that_should_take_up_more_than_one_directory_entry_2"
+-
+-
+-//==========================================================================
+-
+-#ifndef CYGPKG_LIBC_STRING
+-
+-char *strcat( char *s1, const char *s2 )
+-{
+- char *s = s1;
+- while( *s1 ) s1++;
+- while( (*s1++ = *s2++) != 0);
+- return s;
+-}
+-
+-#endif
+-
+-//==========================================================================
+-
+-static void listdir( char *name, int statp, int numexpected, int *numgot )
+-{
+- int err;
+- DIR *dirp;
+- int num=0;
+-
+- diag_printf("<INFO>: reading directory %s\n",name);
+-
+- dirp = opendir( name );
+- if( dirp == NULL ) SHOW_RESULT( opendir, -1 );
+-
+- for(;;)
+- {
+- struct dirent *entry = readdir( dirp );
+-
+- if( entry == NULL )
+- break;
+- num++;
+- diag_printf("<INFO>: entry %14s",entry->d_name);
+- if( statp )
+- {
+- char fullname[PATH_MAX];
+- struct stat sbuf;
+-
+- if( name[0] )
+- {
+- strcpy(fullname, name );
+- if( !(name[0] == '/' && name[1] == 0 ) )
+- strcat(fullname, "/" );
+- }
+- else fullname[0] = 0;
+-
+- strcat(fullname, entry->d_name );
+-
+- err = stat( fullname, &sbuf );
+- if( err < 0 )
+- {
+- if( errno == ENOSYS )
+- diag_printf(" <no status available>");
+- else SHOW_RESULT( stat, err );
+- }
+- else
+- {
+- diag_printf(" [mode %08x ino %08x nlink %d size %d]",
+- sbuf.st_mode,sbuf.st_ino,sbuf.st_nlink,sbuf.st_size);
+- }
+- }
+-
+- diag_printf("\n");
+- }
+-
+- err = closedir( dirp );
+- if( err < 0 ) SHOW_RESULT( stat, err );
+- if (numexpected >= 0 && num != numexpected)
+- CYG_TEST_FAIL("Wrong number of dir entries\n");
+- if ( numgot != NULL )
+- *numgot = num;
+-}
+-
+-//==========================================================================
+-
+-static void createfile( char *name, size_t size )
+-{
+- char buf[IOSIZE];
+- int fd;
+- ssize_t wrote;
+- int i;
+- int err;
+-
+- diag_printf("<INFO>: create file %s size %d\n",name,size);
+-
+- err = access( name, F_OK );
+- if( err < 0 && errno != EACCES ) SHOW_RESULT( access, err );
+-
+- for( i = 0; i < IOSIZE; i++ ) buf[i] = i%256;
+-
+- fd = open( name, O_WRONLY|O_CREAT );
+- if( fd < 0 ) SHOW_RESULT( open, fd );
+-
+- while( size > 0 )
+- {
+- ssize_t len = size;
+- if ( len > IOSIZE ) len = IOSIZE;
+-
+- wrote = write( fd, buf, len );
+- if( wrote != len ) SHOW_RESULT( write, wrote );
+-
+- size -= wrote;
+- }
+-
+- err = close( fd );
+- if( err < 0 ) SHOW_RESULT( close, err );
+-}
+-
+-//==========================================================================
+-
+-#if 0
+-static void maxfile( char *name )
+-{
+- char buf[IOSIZE];
+- int fd;
+- ssize_t wrote;
+- int i;
+- int err;
+- size_t size = 0;
+-
+- diag_printf("<INFO>: create maximal file %s\n",name);
+-
+- err = access( name, F_OK );
+- if( err < 0 && errno != EACCES ) SHOW_RESULT( access, err );
+-
+- for( i = 0; i < IOSIZE; i++ ) buf[i] = i%256;
+-
+- fd = open( name, O_WRONLY|O_CREAT );
+- if( fd < 0 ) SHOW_RESULT( open, fd );
+-
+- do
+- {
+- wrote = write( fd, buf, IOSIZE );
+- if( wrote < 0 ) SHOW_RESULT( write, wrote );
+-
+- size += wrote;
+-
+- } while( wrote == IOSIZE );
+-
+- diag_printf("<INFO>: file size == %d\n",size);
+-
+- err = close( fd );
+- if( err < 0 ) SHOW_RESULT( close, err );
+-}
+-#endif
+-
+-//==========================================================================
+-
+-static void checkfile( char *name )
+-{
+- char buf[IOSIZE];
+- int fd;
+- ssize_t done;
+- int i;
+- int err;
+- off_t pos = 0;
+-
+- diag_printf("<INFO>: check file %s\n",name);
+-
+- err = access( name, F_OK );
+- if( err != 0 ) SHOW_RESULT( access, err );
+-
+- fd = open( name, O_RDONLY );
+- if( fd < 0 ) SHOW_RESULT( open, fd );
+-
+- for(;;)
+- {
+- done = read( fd, buf, IOSIZE );
+- if( done < 0 ) SHOW_RESULT( read, done );
+-
+- if( done == 0 ) break;
+-
+- for( i = 0; i < done; i++ )
+- if( buf[i] != i%256 )
+- {
+- diag_printf("buf[%d+%d](%02x) != %02x\n",pos,i,buf[i],i%256);
+- CYG_TEST_FAIL("Data read not equal to data written\n");
+- }
+-
+- pos += done;
+- }
+-
+- err = close( fd );
+- if( err < 0 ) SHOW_RESULT( close, err );
+-}
+-
+-//==========================================================================
+-
+-static void copyfile( char *name2, char *name1 )
+-{
+-
+- int err;
+- char buf[IOSIZE];
+- int fd1, fd2;
+- ssize_t done, wrote;
+-
+- diag_printf("<INFO>: copy file %s -> %s\n",name2,name1);
+-
+- err = access( name1, F_OK );
+- if( err < 0 && errno != EACCES ) SHOW_RESULT( access, err );
+-
+- err = access( name2, F_OK );
+- if( err != 0 ) SHOW_RESULT( access, err );
+-
+- fd1 = open( name1, O_WRONLY|O_CREAT );
+- if( fd1 < 0 ) SHOW_RESULT( open, fd1 );
+-
+- fd2 = open( name2, O_RDONLY );
+- if( fd2 < 0 ) SHOW_RESULT( open, fd2 );
+-
+- for(;;)
+- {
+- done = read( fd2, buf, IOSIZE );
+- if( done < 0 ) SHOW_RESULT( read, done );
+-
+- if( done == 0 ) break;
+-
+- wrote = write( fd1, buf, done );
+- if( wrote != done ) SHOW_RESULT( write, wrote );
+-
+- if( wrote != done ) break;
+- }
+-
+- err = close( fd1 );
+- if( err < 0 ) SHOW_RESULT( close, err );
+-
+- err = close( fd2 );
+- if( err < 0 ) SHOW_RESULT( close, err );
+-
+-}
+-
+-//==========================================================================
+-
+-static void comparefiles( char *name2, char *name1 )
+-{
+- int err;
+- char buf1[IOSIZE];
+- char buf2[IOSIZE];
+- int fd1, fd2;
+- ssize_t done1, done2;
+- int i;
+-
+- diag_printf("<INFO>: compare files %s == %s\n",name2,name1);
+-
+- err = access( name1, F_OK );
+- if( err != 0 ) SHOW_RESULT( access, err );
+-
+- err = access( name1, F_OK );
+- if( err != 0 ) SHOW_RESULT( access, err );
+-
+- fd1 = open( name1, O_RDONLY );
+- if( fd1 < 0 ) SHOW_RESULT( open, fd1 );
+-
+- fd2 = open( name2, O_RDONLY );
+- if( fd2 < 0 ) SHOW_RESULT( open, fd2 );
+-
+- for(;;)
+- {
+- done1 = read( fd1, buf1, IOSIZE );
+- if( done1 < 0 ) SHOW_RESULT( read, done1 );
+-
+- done2 = read( fd2, buf2, IOSIZE );
+- if( done2 < 0 ) SHOW_RESULT( read, done2 );
+-
+- if( done1 != done2 )
+- diag_printf("Files different sizes\n");
+-
+- if( done1 == 0 ) break;
+-
+- for( i = 0; i < done1; i++ )
+- if( buf1[i] != buf2[i] )
+- {
+- diag_printf("buf1[%d](%02x) != buf1[%d](%02x)\n",i,buf1[i],i,buf2[i]);
+- CYG_TEST_FAIL("Data in files not equal\n");
+- }
+- }
+-
+- err = close( fd1 );
+- if( err < 0 ) SHOW_RESULT( close, err );
+-
+- err = close( fd2 );
+- if( err < 0 ) SHOW_RESULT( close, err );
+-
+-}
+-
+-//==========================================================================
+-
+-void checkcwd( const char *cwd )
+-{
+- static char cwdbuf[PATH_MAX];
+- char *ret;
+-
+- ret = getcwd( cwdbuf, sizeof(cwdbuf));
+- if( ret == NULL ) SHOW_RESULT( getcwd, ret );
+-
+- if( strcmp( cwdbuf, cwd ) != 0 )
+- {
+- diag_printf( "cwdbuf %s cwd %s\n",cwdbuf, cwd );
+- CYG_TEST_FAIL( "Current directory mismatch");
+- }
+-}
+-
+-//==========================================================================
+-// main
+-
+-int main( int argc, char **argv )
+-{
+- int err;
+- //int i;
+- int existingdirents=-1;
+-
+- CYG_TEST_INIT();
+-
+- // --------------------------------------------------------------
+-
+- err = mount( CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1, "/", "jffs2" );
+- if( err < 0 ) SHOW_RESULT( mount, err );
+-
+- err = chdir( "/" );
+- if( err < 0 ) SHOW_RESULT( chdir, err );
+-
+- checkcwd( "/" );
+-
+- listdir( "/", true, -1, &existingdirents );
+- if ( existingdirents < 2 )
+- CYG_TEST_FAIL("Not enough dir entries\n");
+-
+- // --------------------------------------------------------------
+-
+- createfile( "/foo", 202 );
+- checkfile( "foo" );
+- copyfile( "foo", "fee");
+- checkfile( "fee" );
+- comparefiles( "foo", "/fee" );
+- diag_printf("<INFO>: mkdir bar\n");
+- err = mkdir( "/bar", 0 );
+- if( err < 0 ) SHOW_RESULT( mkdir, err );
+-
+- listdir( "/" , true, existingdirents+3, NULL );
+-
+- copyfile( "fee", "/bar/fum" );
+- checkfile( "bar/fum" );
+- comparefiles( "/fee", "bar/fum" );
+-
+- diag_printf("<INFO>: cd bar\n");
+- err = chdir( "bar" );
+- if( err < 0 ) SHOW_RESULT( chdir, err );
+-
+- checkcwd( "/bar" );
+-
+- diag_printf("<INFO>: rename /foo bundy\n");
+- err = rename( "/foo", "bundy" );
+- if( err < 0 ) SHOW_RESULT( rename, err );
+-
+- listdir( "/", true, existingdirents+2, NULL );
+- listdir( "" , true, 4, NULL );
+-
+- checkfile( "/bar/bundy" );
+- comparefiles("/fee", "bundy" );
+-
+- // --------------------------------------------------------------
+-
+- createfile( LONGNAME1, 123 );
+- checkfile( LONGNAME1 );
+- copyfile( LONGNAME1, LONGNAME2 );
+-
+- listdir( "", false, 6, NULL );
+-
+- diag_printf("<INFO>: unlink " LONGNAME1 "\n");
+- err = unlink( LONGNAME1 );
+- if( err < 0 ) SHOW_RESULT( unlink, err );
+-
+- diag_printf("<INFO>: unlink " LONGNAME2 "\n");
+- err = unlink( LONGNAME2 );
+- if( err < 0 ) SHOW_RESULT( unlink, err );
+-
+-
+- // --------------------------------------------------------------
+-
+- diag_printf("<INFO>: unlink fee\n");
+- err = unlink( "/fee" );
+- if( err < 0 ) SHOW_RESULT( unlink, err );
+-
+- diag_printf("<INFO>: unlink fum\n");
+- err = unlink( "fum" );
+- if( err < 0 ) SHOW_RESULT( unlink, err );
+-
+- diag_printf("<INFO>: unlink /bar/bundy\n");
+- err = unlink( "/bar/bundy" );
+- if( err < 0 ) SHOW_RESULT( unlink, err );
+-
+- diag_printf("<INFO>: cd /\n");
+- err = chdir( "/" );
+- if( err < 0 ) SHOW_RESULT( chdir, err );
+-
+- checkcwd( "/" );
+-
+- diag_printf("<INFO>: rmdir /bar\n");
+- err = rmdir( "/bar" );
+- if( err < 0 ) SHOW_RESULT( rmdir, err );
+-
+- listdir( "/", false, existingdirents, NULL );
+-
+- // --------------------------------------------------------------
+-
+- diag_printf("<INFO>: mount /jffs2 \n");
+- err = mount( CYGDAT_IO_FLASH_BLOCK_DEVICE_NAME_1, "/jffs2", "jffs2" );
+- if( err < 0 ) SHOW_RESULT( mount, err );
+-
+- createfile( "/jffs2/tinky", 456 );
+- copyfile( "/jffs2/tinky", "/jffs2/laalaa" );
+- checkfile( "/jffs2/tinky");
+- checkfile( "/jffs2/laalaa");
+- comparefiles( "/jffs2/tinky", "/jffs2/laalaa" );
+-
+- diag_printf("<INFO>: cd /jffs2\n");
+- err = chdir( "/jffs2" );
+- if( err < 0 ) SHOW_RESULT( chdir, err );
+-
+- checkcwd( "/jffs2" );
+-
+- diag_printf("<INFO>: mkdir noonoo\n");
+- err = mkdir( "noonoo", 0 );
+- if( err < 0 ) SHOW_RESULT( mkdir, err );
+-
+- listdir( "." , true, existingdirents+3, NULL);
+-
+- diag_printf("<INFO>: cd noonoo\n");
+- err = chdir( "noonoo" );
+- if( err < 0 ) SHOW_RESULT( chdir, err );
+-
+- checkcwd( "/jffs2/noonoo" );
+-
+- createfile( "tinky", 678 );
+- checkfile( "tinky" );
+-
+- createfile( "dipsy", 3456 );
+- checkfile( "dipsy" );
+- copyfile( "dipsy", "po" );
+- checkfile( "po" );
+- comparefiles( "dipsy", "po" );
+-
+-
+- /*for(i=0;i<2048;i++) {
+- diag_printf("<INFO>: churningchurningchurning................................ITERATION = %d\n", i);
+- createfile( "churningchurningchurning", 4096 );
+- diag_printf("<INFO>: unlink churningchurningchurning\n");
+- err = unlink( "churningchurningchurning" );
+- if( err < 0 ) SHOW_RESULT( unlink, err );
+- }*/
+-
+-
+- listdir( ".", true, 5, NULL );
+- listdir( "", true, 5, NULL );
+- listdir( "..", true, existingdirents+3, NULL );
+-
+- // --------------------------------------------------------------
+-
+- diag_printf("<INFO>: unlink tinky\n");
+- err = unlink( "tinky" );
+- if( err < 0 ) SHOW_RESULT( unlink, err );
+-
+- diag_printf("<INFO>: unlink dipsy\n");
+- err = unlink( "dipsy" );
+- if( err < 0 ) SHOW_RESULT( unlink, err );
+-
+- diag_printf("<INFO>: unlink po\n");
+- err = unlink( "po" );
+- if( err < 0 ) SHOW_RESULT( unlink, err );
+-
+- diag_printf("<INFO>: cd ..\n");
+- err = chdir( ".." );
+- if( err < 0 ) SHOW_RESULT( chdir, err );
+- checkcwd( "/jffs2" );
+-
+- diag_printf("<INFO>: rmdir noonoo\n");
+- err = rmdir( "noonoo" );
+- if( err < 0 ) SHOW_RESULT( rmdir, err );
+-
+- // --------------------------------------------------------------
+-
+- err = mkdir( "x", 0 );
+- if( err < 0 ) SHOW_RESULT( mkdir, err );
+-
+- err = mkdir( "x/y", 0 );
+- if( err < 0 ) SHOW_RESULT( mkdir, err );
+-
+- err = mkdir( "x/y/z", 0 );
+- if( err < 0 ) SHOW_RESULT( mkdir, err );
+-
+- err = mkdir( "x/y/z/w", 0 );
+- if( err < 0 ) SHOW_RESULT( mkdir, err );
+-
+- diag_printf("<INFO>: cd /jffs2/x/y/z/w\n");
+- err = chdir( "/jffs2/x/y/z/w" );
+- if( err < 0 ) SHOW_RESULT( chdir, err );
+- checkcwd( "/jffs2/x/y/z/w" );
+-
+- diag_printf("<INFO>: cd ..\n");
+- err = chdir( ".." );
+- if( err < 0 ) SHOW_RESULT( chdir, err );
+- checkcwd( "/jffs2/x/y/z" );
+-
+- diag_printf("<INFO>: cd .\n");
+- err = chdir( "." );
+- if( err < 0 ) SHOW_RESULT( chdir, err );
+- checkcwd( "/jffs2/x/y/z" );
+-
+- diag_printf("<INFO>: cd ../../y\n");
+- err = chdir( "../../y" );
+- if( err < 0 ) SHOW_RESULT( chdir, err );
+- checkcwd( "/jffs2/x/y" );
+-
+- diag_printf("<INFO>: cd ../..\n");
+- err = chdir( "../.." );
+- if( err < 0 ) SHOW_RESULT( chdir, err );
+- checkcwd( "/jffs2" );
+-
+- diag_printf("<INFO>: rmdir x/y/z/w\n");
+- err = rmdir( "x/y/z/w" );
+- if( err < 0 ) SHOW_RESULT( rmdir, err );
+-
+- diag_printf("<INFO>: rmdir x/y/z\n");
+- err = rmdir( "x/y/z" );
+- if( err < 0 ) SHOW_RESULT( rmdir, err );
+-
+- diag_printf("<INFO>: rmdir x/y\n");
+- err = rmdir( "x/y" );
+- if( err < 0 ) SHOW_RESULT( rmdir, err );
+-
+- diag_printf("<INFO>: rmdir x\n");
+- err = rmdir( "x" );
+- if( err < 0 ) SHOW_RESULT( rmdir, err );
+-
+- // --------------------------------------------------------------
+-
+- diag_printf("<INFO>: unlink tinky\n");
+- err = unlink( "tinky" );
+- if( err < 0 ) SHOW_RESULT( unlink, err );
+-
+- diag_printf("<INFO>: unlink laalaa\n");
+- err = unlink( "laalaa" );
+- if( err < 0 ) SHOW_RESULT( unlink, err );
+-
+- diag_printf("<INFO>: cd /\n");
+- err = chdir( "/" );
+- if( err < 0 ) SHOW_RESULT( chdir, err );
+- checkcwd( "/" );
+-
+- diag_printf("<INFO>: umount /jffs2\n");
+- err = umount( "/jffs2" );
+- if( err < 0 ) SHOW_RESULT( umount, err );
+-
+- diag_printf("<INFO>: umount /\n");
+- err = umount( "/" );
+- if( err < 0 ) SHOW_RESULT( umount, err );
+-
+- CYG_TEST_PASS_FINISH("fileio1");
+-}
+-
+-// -------------------------------------------------------------------------
+-// EOF fileio1.c
+diff -Nur linux/fs/jffs2/ecos/tests/romfileio1.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/tests/romfileio1.c
+--- linux/fs/jffs2/ecos/tests/romfileio1.c 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ecos/tests/romfileio1.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,359 +0,0 @@
+-//==========================================================================
+-//
+-// fileio1.c
+-//
+-// Test fileio system
+-//
+-//==========================================================================
+-//####COPYRIGHTBEGIN####
+-//
+-// -------------------------------------------
+-// The contents of this file are subject to the Red Hat eCos Public License
+-// Version 1.1 (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.redhat.com/
+-//
+-// Software distributed under the License is distributed on an "AS IS"
+-// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+-// License for the specific language governing rights and limitations under
+-// the License.
+-//
+-// The Original Code is eCos - Embedded Configurable Operating System,
+-// released September 30, 1998.
+-//
+-// The Initial Developer of the Original Code is Red Hat.
+-// Portions created by Red Hat are
+-// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.
+-// All Rights Reserved.
+-// -------------------------------------------
+-//
+-//####COPYRIGHTEND####
+-//==========================================================================
+-//#####DESCRIPTIONBEGIN####
+-//
+-// Author(s): nickg
+-// Contributors: nickg, richard.panton@3glab.com
+-// Date: 2000-05-25
+-// Purpose: Test fileio system
+-// Description: This test uses the testfs to check out the initialization
+-// and basic operation of the fileio system
+-//
+-//####DESCRIPTIONEND####
+-//
+-//==========================================================================
+-
+-#include <pkgconf/hal.h>
+-#include <pkgconf/kernel.h>
+-#include <pkgconf/io_fileio.h>
+-
+-#include <cyg/kernel/ktypes.h> // base kernel types
+-#include <cyg/infra/cyg_trac.h> // tracing macros
+-#include <cyg/infra/cyg_ass.h> // assertion macros
+-
+-#include <unistd.h>
+-#include <fcntl.h>
+-#include <sys/stat.h>
+-#include <errno.h>
+-#include <string.h>
+-#include <dirent.h>
+-
+-#include <cyg/fileio/fileio.h>
+-
+-#include <cyg/infra/testcase.h>
+-#include <cyg/infra/diag.h> // HAL polled output
+-
+-#include <pkgconf/fs_jffs2.h> // Address of JFFS2
+-
+-//==========================================================================
+-
+-/* MTAB_ENTRY( jffs2_mte1,
+- "/",
+- "jffs2",
+- "",
+- (CYG_ADDRWORD) CYGNUM_FS_JFFS2_BASE_ADDRESS ); */
+-
+-
+-//==========================================================================
+-
+-#define SHOW_RESULT( _fn, _res ) \
+-diag_printf("<FAIL>: " #_fn "() returned %d %s\n", _res, _res<0?strerror(errno):"");
+-
+-#define CHKFAIL_TYPE( _fn, _res, _type ) { \
+-if ( _res != -1 ) \
+- diag_printf("<FAIL>: " #_fn "() returned %d (expected -1)\n", _res); \
+-else if ( errno != _type ) \
+- diag_printf("<FAIL>: " #_fn "() failed with errno %d (%s),\n expected %d (%s)\n", errno, strerror(errno), _type, strerror(_type) ); \
+-}
+-
+-//==========================================================================
+-
+-#define IOSIZE 100
+-
+-#define LONGNAME1 "long_file_name_that_should_take_up_more_than_one_directory_entry_1"
+-#define LONGNAME2 "long_file_name_that_should_take_up_more_than_one_directory_entry_2"
+-
+-
+-//==========================================================================
+-
+-#ifndef CYGPKG_LIBC_STRING
+-
+-char *strcat( char *s1, const char *s2 )
+-{
+- char *s = s1;
+- while( *s1 ) s1++;
+- while( (*s1++ = *s2++) != 0);
+- return s;
+-}
+-
+-#endif
+-
+-//==========================================================================
+-
+-static void listdir( char *name, int statp )
+-{
+- int err;
+- DIR *dirp;
+-
+- diag_printf("<INFO>: reading directory %s\n",name);
+-
+- dirp = opendir( name );
+- if( dirp == NULL ) SHOW_RESULT( opendir, -1 );
+-
+- for(;;)
+- {
+- struct dirent *entry = readdir( dirp );
+-
+- if( entry == NULL )
+- break;
+-
+- diag_printf("<INFO>: entry %14s",entry->d_name);
+- if( statp )
+- {
+- char fullname[PATH_MAX];
+- struct stat sbuf;
+-
+- if( name[0] )
+- {
+- strcpy(fullname, name );
+- if( !(name[0] == '/' && name[1] == 0 ) )
+- strcat(fullname, "/" );
+- }
+- else fullname[0] = 0;
+-
+- strcat(fullname, entry->d_name );
+-
+- err = stat( fullname, &sbuf );
+- if( err < 0 )
+- {
+- if( errno == ENOSYS )
+- diag_printf(" <no status available>");
+- else SHOW_RESULT( stat, err );
+- }
+- else
+- {
+- diag_printf(" [mode %08x ino %08x nlink %d size %d]",
+- sbuf.st_mode,sbuf.st_ino,sbuf.st_nlink,sbuf.st_size);
+- }
+- }
+-
+- diag_printf("\n");
+- }
+-
+- err = closedir( dirp );
+- if( err < 0 ) SHOW_RESULT( stat, err );
+-}
+-
+-//==========================================================================
+-
+-static void copyfile( char *name2, char *name1 )
+-{
+-
+- int err;
+- char buf[IOSIZE];
+- int fd1, fd2;
+- ssize_t done, wrote;
+-
+- diag_printf("<INFO>: copy file %s -> %s\n",name2,name1);
+-
+- err = access( name1, F_OK );
+- if( err < 0 && errno != EACCES ) SHOW_RESULT( access, err );
+-
+- err = access( name2, F_OK );
+- if( err != 0 ) SHOW_RESULT( access, err );
+-
+- fd1 = open( name1, O_WRONLY|O_CREAT );
+- if( fd1 < 0 ) SHOW_RESULT( open, fd1 );
+-
+- fd2 = open( name2, O_RDONLY );
+- if( fd2 < 0 ) SHOW_RESULT( open, fd2 );
+-
+- for(;;)
+- {
+- done = read( fd2, buf, IOSIZE );
+- if( done < 0 ) SHOW_RESULT( read, done );
+-
+- if( done == 0 ) break;
+-
+- wrote = write( fd1, buf, done );
+- if( wrote != done ) SHOW_RESULT( write, wrote );
+-
+- if( wrote != done ) break;
+- }
+-
+- err = close( fd1 );
+- if( err < 0 ) SHOW_RESULT( close, err );
+-
+- err = close( fd2 );
+- if( err < 0 ) SHOW_RESULT( close, err );
+-
+-}
+-
+-//==========================================================================
+-
+-static void comparefiles( char *name2, char *name1 )
+-{
+- int err;
+- char buf1[IOSIZE];
+- char buf2[IOSIZE];
+- int fd1, fd2;
+- ssize_t done1, done2;
+- int i;
+-
+- diag_printf("<INFO>: compare files %s == %s\n",name2,name1);
+-
+- err = access( name1, F_OK );
+- if( err != 0 ) SHOW_RESULT( access, err );
+-
+- err = access( name1, F_OK );
+- if( err != 0 ) SHOW_RESULT( access, err );
+-
+- fd1 = open( name1, O_RDONLY );
+- if( fd1 < 0 ) SHOW_RESULT( open, fd1 );
+-
+- fd2 = open( name2, O_RDONLY );
+- if( fd2 < 0 ) SHOW_RESULT( open, fd2 );
+-
+- for(;;)
+- {
+- done1 = read( fd1, buf1, IOSIZE );
+- if( done1 < 0 ) SHOW_RESULT( read, done1 );
+-
+- done2 = read( fd2, buf2, IOSIZE );
+- if( done2 < 0 ) SHOW_RESULT( read, done2 );
+-
+- if( done1 != done2 )
+- diag_printf("Files different sizes\n");
+-
+- if( done1 == 0 ) break;
+-
+- for( i = 0; i < done1; i++ )
+- if( buf1[i] != buf2[i] )
+- {
+- diag_printf("buf1[%d](%02x) != buf1[%d](%02x)\n",i,buf1[i],i,buf2[i]);
+- CYG_TEST_FAIL("Data in files not equal\n");
+- }
+- }
+-
+- err = close( fd1 );
+- if( err < 0 ) SHOW_RESULT( close, err );
+-
+- err = close( fd2 );
+- if( err < 0 ) SHOW_RESULT( close, err );
+-
+-}
+-
+-//==========================================================================
+-// main
+-
+-int main( int argc, char **argv )
+-{
+- int err;
+- char address[16];
+-
+- CYG_TEST_INIT();
+-
+- // --------------------------------------------------------------
+-
+- err = mount( "", "/", "jffs2" );
+-
+- diag_printf("<INFO>: JFFS2 root follows\n");
+- diag_printf("<INFO>: Note that dev cannot be stat()ed\n");
+- listdir( "/", true );
+-
+- diag_printf("<INFO>: cd /etc\n" );
+- err = chdir( "/etc" );
+- if ( err < 0 ) SHOW_RESULT( chdir, err );
+-
+- diag_printf("<INFO>: JFFS2 list of '' follows\n");
+- listdir( "", true );
+-
+- diag_printf("<INFO>: JFFS2 list of /etc follows\n");
+- listdir( "/etc", true );
+-
+- //diag_printf("<INFO>: JFFS2 list of . follows\n");
+- //listdir( ".", true );
+-
+- err = mount( "", "/var", "ramfs" );
+- if( err < 0 ) SHOW_RESULT( mount, err );
+-
+- copyfile( "/etc/passwd", "/var/passwd_copy" );
+-
+- comparefiles( "/etc/passwd", "/var/passwd_copy" );
+-
+- diag_printf("<INFO>: JFFS2 list of / follows\n");
+- diag_printf("<INFO>: Note that /var now gives stat() info for RAMFS\n");
+- listdir( "/", true );
+-
+- diag_printf("<INFO>: Mount JFFS2 again onto /mnt\n");
+- //sprintf( address, "%p", (void*)CYGNUM_FS_JFFS2_BASE_ADDRESS );
+- err = mount( "", "/mnt", "jffs2" );
+- if( err < 0 ) SHOW_RESULT( mount, err );
+-
+- comparefiles( "/etc/passwd", "/mnt/etc/passwd" );
+-
+-
+- err = mkdir( "/foo", 0 );
+- CHKFAIL_TYPE( mkdir, err, EROFS );
+-
+- err = rename( "/var", "/tmp" ); // RAMFS is mounted here
+- CHKFAIL_TYPE( rename, err, EXDEV );
+-
+- err = rename( "/var/passwd_copy", "/mnt/etc/passwd_copy" );
+- CHKFAIL_TYPE( rename, err, EXDEV );
+-
+- err = rename( "/etc", "/tmp" );
+- CHKFAIL_TYPE( rename, err, EROFS );
+-
+- diag_printf("<INFO>: cd /etc\n");
+- err = chdir( "/etc" );
+- if( err < 0 ) SHOW_RESULT( chdir, err );
+-
+- err = chdir( "/mnt/etc" );
+- if( err < 0 ) SHOW_RESULT( chdir, err );
+-
+- //listdir( ".", true );
+-
+- diag_printf("<INFO>: unlink /tmp\n");
+- err = unlink( "/tmp" );
+- CHKFAIL_TYPE( unlink, err, EROFS );
+-
+- diag_printf("<INFO>: mount random area\n");
+- //sprintf(address, "%p", (void*)(CYGNUM_FS_JFFS2_BASE_ADDRESS + 0x20000));
+- err = mount( "", "/tmp", "jffs2" );
+- SHOW_RESULT( mount, err );
+-
+- err = umount( "/mnt" );
+- if( err < 0 ) SHOW_RESULT( umount, err );
+-
+- err = umount( "/var" );
+- if( err < 0 ) SHOW_RESULT( umount, err );
+-
+- err = umount( "/" );
+- if( err < 0 ) SHOW_RESULT( umount, err );
+-
+-
+- CYG_TEST_PASS_FINISH("fileio1");
+-}
+-
+-// -------------------------------------------------------------------------
+-// EOF fileio1.c
+diff -Nur linux/fs/jffs2/erase.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/erase.c
+--- linux/fs/jffs2/erase.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/erase.c 2003-06-23 01:47:04.000000000 +0700
+@@ -1,30 +1,46 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: erase.c,v 1.42 2002/09/06 14:12:44 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
+ *
+- * ChangeLog:
+- * 29-Oct-2002 Lineo Japan, Inc. add member struct jffs2_sb_info#nr_bad_blocks
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
+ *
+- * ChangeLog:
+- * 29-Oct-2002 Lineo Japan, Inc. add member struct jffs2_sb_info#nr_bad_blocks
+- * 24-Nov-2002 SHARP add erasing_dirty_size
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: erase.c,v 1.24 2001/12/06 16:38:38 dwmw2 Exp $
+ *
+ */
+-
+ #include <linux/kernel.h>
+ #include <linux/slab.h>
+ #include <linux/mtd/mtd.h>
++#include <linux/jffs2.h>
+ #include <linux/interrupt.h>
+-#include <linux/compiler.h>
+-#include "crc32.h"
+ #include "nodelist.h"
++#include "crc32.h"
+
+ struct erase_priv_struct {
+ struct jffs2_eraseblock *jeb;
+@@ -32,13 +48,12 @@
+ };
+
+ static void jffs2_erase_callback(struct erase_info *);
+-static void jffs2_erase_succeeded(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb);
+ static void jffs2_free_all_node_refs(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb);
+
+ void jffs2_erase_block(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb)
+ {
+- int ret;
+ struct erase_info *instr;
++ int ret;
+
+ instr = kmalloc(sizeof(struct erase_info) + sizeof(struct erase_priv_struct), GFP_KERNEL);
+ if (!instr) {
+@@ -62,16 +77,10 @@
+ ((struct erase_priv_struct *)instr->priv)->jeb = jeb;
+ ((struct erase_priv_struct *)instr->priv)->c = c;
+
+- /* NAND , read out the fail counter, if possible */
+- if (!jffs2_can_mark_obsolete(c))
+- jffs2_nand_read_failcnt(c,jeb);
+-
+ ret = c->mtd->erase(c->mtd, instr);
+- if (!ret)
++ if (!ret) {
+ return;
+-
+- kfree(instr);
+-
++ }
+ if (ret == -ENOMEM || ret == -EAGAIN) {
+ /* Erase failed immediately. Refile it on the list */
+ D1(printk(KERN_DEBUG "Erase at 0x%08x failed: %d. Refiling on erase_pending_list\n", jeb->offset, ret));
+@@ -80,6 +89,7 @@
+ list_add(&jeb->list, &c->erase_pending_list);
+ c->erasing_size -= c->sector_size;
+ spin_unlock_bh(&c->erase_completion_lock);
++ kfree(instr);
+ return;
+ }
+
+@@ -87,24 +97,21 @@
+ printk(KERN_WARNING "Erase at 0x%08x failed immediately: -EROFS. Is the sector locked?\n", jeb->offset);
+ else
+ printk(KERN_WARNING "Erase at 0x%08x failed immediately: errno %d\n", jeb->offset, ret);
+-
+ spin_lock_bh(&c->erase_completion_lock);
+ list_del(&jeb->list);
+ list_add(&jeb->list, &c->bad_list);
+ c->nr_erasing_blocks--;
+- c->nr_bad_blocks++;
+ c->bad_size += c->sector_size;
+ c->erasing_size -= c->sector_size;
+ spin_unlock_bh(&c->erase_completion_lock);
+ wake_up(&c->erase_wait);
++ kfree(instr);
+ }
+
+ void jffs2_erase_pending_blocks(struct jffs2_sb_info *c)
+ {
+ struct jffs2_eraseblock *jeb;
+
+- down(&c->erase_free_sem);
+-
+ spin_lock_bh(&c->erase_completion_lock);
+ while (!list_empty(&c->erase_pending_list)) {
+
+@@ -117,64 +124,45 @@
+ c->free_size -= jeb->free_size;
+ c->used_size -= jeb->used_size;
+ c->dirty_size -= jeb->dirty_size;
+- if(c->erasing_dirty_size >= jeb->dirty_size)
+- c->erasing_dirty_size -= jeb->dirty_size;
+- else
+- c->erasing_dirty_size = 0;
+ jeb->used_size = jeb->dirty_size = jeb->free_size = 0;
+ jffs2_free_all_node_refs(c, jeb);
+ list_add(&jeb->list, &c->erasing_list);
+ spin_unlock_bh(&c->erase_completion_lock);
+
+ jffs2_erase_block(c, jeb);
+-
+ /* Be nice */
+- cond_resched();
+-
++ if (current->need_resched)
++ schedule();
+ spin_lock_bh(&c->erase_completion_lock);
+ }
+ spin_unlock_bh(&c->erase_completion_lock);
+ D1(printk(KERN_DEBUG "jffs2_erase_pending_blocks completed\n"));
+-
+- up(&c->erase_free_sem);
+ }
+
+
+-static void jffs2_erase_succeeded(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb)
+-{
+- D1(printk(KERN_DEBUG "Erase completed successfully at 0x%08x\n", jeb->offset));
+- spin_lock(&c->erase_completion_lock);
+- list_del(&jeb->list);
+- list_add_tail(&jeb->list, &c->erase_complete_list);
+- spin_unlock(&c->erase_completion_lock);
+-}
+-
+-
+-static inline void jffs2_erase_failed(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb)
+-{
+- spin_lock(&c->erase_completion_lock);
+- c->erasing_size -= c->sector_size;
+- c->bad_size += c->sector_size;
+- list_del(&jeb->list);
+- list_add(&jeb->list, &c->bad_list);
+- c->nr_erasing_blocks--;
+- c->nr_bad_blocks++;
+- spin_unlock(&c->erase_completion_lock);
+- wake_up(&c->erase_wait);
+-}
+-
+ static void jffs2_erase_callback(struct erase_info *instr)
+ {
+ struct erase_priv_struct *priv = (void *)instr->priv;
+
+ if(instr->state != MTD_ERASE_DONE) {
+ printk(KERN_WARNING "Erase at 0x%08x finished, but state != MTD_ERASE_DONE. State is 0x%x instead.\n", instr->addr, instr->state);
+- jffs2_erase_failed(priv->c, priv->jeb);
++ spin_lock(&priv->c->erase_completion_lock);
++ priv->c->erasing_size -= priv->c->sector_size;
++ priv->c->bad_size += priv->c->sector_size;
++ list_del(&priv->jeb->list);
++ list_add(&priv->jeb->list, &priv->c->bad_list);
++ priv->c->nr_erasing_blocks--;
++ spin_unlock(&priv->c->erase_completion_lock);
++ wake_up(&priv->c->erase_wait);
+ } else {
+- jffs2_erase_succeeded(priv->c, priv->jeb);
++ D1(printk(KERN_DEBUG "Erase completed successfully at 0x%08x\n", instr->addr));
++ spin_lock(&priv->c->erase_completion_lock);
++ list_del(&priv->jeb->list);
++ list_add_tail(&priv->jeb->list, &priv->c->erase_complete_list);
++ spin_unlock(&priv->c->erase_completion_lock);
+ }
+ /* Make sure someone picks up the block off the erase_complete list */
+-// OFNI_BS_2SFFJ(priv->c)->s_dirt = 1;
++ OFNI_BS_2SFFJ(priv->c)->s_dirt = 1;
+ kfree(instr);
+ }
+
+@@ -233,7 +221,7 @@
+ this = ic->nodes;
+
+ while(this) {
+- printk( "0x%08x(%d)->", ref_offset(this), ref_flags(this));
++ printk( "0x%08x(%d)->", this->flash_offset & ~3, this->flash_offset &3);
+ if (++i == 5) {
+ printk("\n" KERN_DEBUG);
+ i=0;
+@@ -275,40 +263,42 @@
+
+ void jffs2_mark_erased_blocks(struct jffs2_sb_info *c)
+ {
++ static struct jffs2_unknown_node marker = {JFFS2_MAGIC_BITMASK, JFFS2_NODETYPE_CLEANMARKER, sizeof(struct jffs2_unknown_node)};
+ struct jffs2_eraseblock *jeb;
+- struct jffs2_raw_node_ref *marker_ref = NULL;
++ struct jffs2_raw_node_ref *marker_ref;
+ unsigned char *ebuf;
+- size_t retlen;
++ ssize_t retlen;
+ int ret;
+
++ marker.hdr_crc = crc32(0, &marker, sizeof(struct jffs2_unknown_node)-4);
++
+ spin_lock_bh(&c->erase_completion_lock);
+ while (!list_empty(&c->erase_complete_list)) {
+ jeb = list_entry(c->erase_complete_list.next, struct jffs2_eraseblock, list);
+ list_del(&jeb->list);
+ spin_unlock_bh(&c->erase_completion_lock);
+
+- if (!jffs2_cleanmarker_oob(c)) {
+- marker_ref = jffs2_alloc_raw_node_ref();
+- if (!marker_ref) {
+- printk(KERN_WARNING "Failed to allocate raw node ref for clean marker\n");
+- /* Come back later */
+- jffs2_erase_pending_trigger(c);
+- return;
+- }
++ marker_ref = jffs2_alloc_raw_node_ref();
++ if (!marker_ref) {
++ printk(KERN_WARNING "Failed to allocate raw node ref for clean marker\n");
++ /* Come back later */
++ jffs2_erase_pending_trigger(c);
++ return;
+ }
++
+ ebuf = kmalloc(PAGE_SIZE, GFP_KERNEL);
+ if (!ebuf) {
+ printk(KERN_WARNING "Failed to allocate page buffer for verifying erase at 0x%08x. Assuming it worked\n", jeb->offset);
+ } else {
+- uint32_t ofs = jeb->offset;
++ __u32 ofs = jeb->offset;
+
+ D1(printk(KERN_DEBUG "Verifying erase at 0x%08x\n", jeb->offset));
+ while(ofs < jeb->offset + c->sector_size) {
+- uint32_t readlen = min((uint32_t)PAGE_SIZE, jeb->offset + c->sector_size - ofs);
++ __u32 readlen = min((__u32)PAGE_SIZE, jeb->offset + c->sector_size - ofs);
+ int i;
+
+- ret = jffs2_flash_read(c, ofs, readlen, &retlen, ebuf);
+- if (ret) {
++ ret = c->mtd->read(c->mtd, ofs, readlen, &retlen, ebuf);
++ if (ret < 0) {
+ printk(KERN_WARNING "Read of newly-erased block at 0x%08x failed: %d. Putting on bad_list\n", ofs, ret);
+ goto bad;
+ }
+@@ -322,10 +312,7 @@
+ if (datum + 1) {
+ printk(KERN_WARNING "Newly-erased block contained word 0x%lx at offset 0x%08x\n", datum, ofs + i);
+ bad:
+- if (!jffs2_cleanmarker_oob(c))
+- jffs2_free_raw_node_ref(marker_ref);
+- else
+- jffs2_write_nand_badblock( c ,jeb );
++ jffs2_free_raw_node_ref(marker_ref);
+ kfree(ebuf);
+ bad2:
+ spin_lock_bh(&c->erase_completion_lock);
+@@ -334,64 +321,40 @@
+
+ list_add_tail(&jeb->list, &c->bad_list);
+ c->nr_erasing_blocks--;
+- c->nr_bad_blocks++;
+ spin_unlock_bh(&c->erase_completion_lock);
+ wake_up(&c->erase_wait);
+ return;
+ }
+ }
+ ofs += readlen;
+- cond_resched();
+ }
+ kfree(ebuf);
+ }
+
+ /* Write the erase complete marker */
+ D1(printk(KERN_DEBUG "Writing erased marker to block at 0x%08x\n", jeb->offset));
+- if (jffs2_cleanmarker_oob(c)) {
+-
+- if (jffs2_write_nand_cleanmarker(c, jeb))
+- goto bad2;
+-
+- jeb->first_node = jeb->last_node = NULL;
+-
+- jeb->free_size = c->sector_size;
+- jeb->used_size = 0;
+- jeb->dirty_size = 0;
+- jeb->wasted_size = 0;
+- } else {
+- struct jffs2_unknown_node marker = {
+- .magic = cpu_to_je16(JFFS2_MAGIC_BITMASK),
+- .nodetype = cpu_to_je16(JFFS2_NODETYPE_CLEANMARKER),
+- .totlen = cpu_to_je32(c->cleanmarker_size)
+- };
+-
+- marker.hdr_crc = cpu_to_je32(crc32(0, &marker, je32_to_cpu(marker.totlen) - 4));
+-
+- ret = jffs2_flash_write(c, jeb->offset, je32_to_cpu(marker.totlen), &retlen, (char *)&marker);
+- if (ret) {
+- printk(KERN_WARNING "Write clean marker to block at 0x%08x failed: %d\n",
+- jeb->offset, ret);
+- goto bad2;
+- }
+- if (retlen != je32_to_cpu(marker.totlen)) {
+- printk(KERN_WARNING "Short write to newly-erased block at 0x%08x: Wanted %d, got %d\n",
+- jeb->offset, je32_to_cpu(marker.totlen), retlen);
+- goto bad2;
+- }
+-
+- marker_ref->next_in_ino = NULL;
+- marker_ref->next_phys = NULL;
+- marker_ref->flash_offset = jeb->offset;
+- marker_ref->totlen = PAD(je32_to_cpu(marker.totlen));
+-
+- jeb->first_node = jeb->last_node = marker_ref;
+-
+- jeb->free_size = c->sector_size - marker_ref->totlen;
+- jeb->used_size = marker_ref->totlen;
+- jeb->dirty_size = 0;
+- jeb->wasted_size = 0;
++ ret = c->mtd->write(c->mtd, jeb->offset, sizeof(marker), &retlen, (char *)&marker);
++ if (ret) {
++ printk(KERN_WARNING "Write clean marker to block at 0x%08x failed: %d\n",
++ jeb->offset, ret);
++ goto bad2;
+ }
++ if (retlen != sizeof(marker)) {
++ printk(KERN_WARNING "Short write to newly-erased block at 0x%08x: Wanted %d, got %d\n",
++ jeb->offset, sizeof(marker), retlen);
++ goto bad2;
++ }
++
++ marker_ref->next_in_ino = NULL;
++ marker_ref->next_phys = NULL;
++ marker_ref->flash_offset = jeb->offset;
++ marker_ref->totlen = PAD(sizeof(marker));
++
++ jeb->first_node = jeb->last_node = marker_ref;
++
++ jeb->free_size = c->sector_size - marker_ref->totlen;
++ jeb->used_size = marker_ref->totlen;
++ jeb->dirty_size = 0;
+
+ spin_lock_bh(&c->erase_completion_lock);
+ c->erasing_size -= c->sector_size;
+diff -Nur linux/fs/jffs2/file.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/file.c
+--- linux/fs/jffs2/file.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/file.c 2003-06-23 01:47:04.000000000 +0700
+@@ -1,18 +1,37 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: file.c,v 1.79 2002/10/07 12:41:16 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
+ *
+- * ChangeLog:
+- * 28-Nov-2002 Lineo Japan, Inc. fix deadlock between f->sem and c->alloc_sem
+- * 19-Nov-2002 Lineo Japan, Inc. add counter of fragtree elements
+- * 18-Nov-2002 Lineo Japan, Inc. add dynamic construction of fragtree
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: file.c,v 1.58.2.1 2002/02/23 14:25:36 dwmw2 Exp $
+ *
+ */
+
+@@ -20,67 +39,44 @@
+ #include <linux/mtd/compatmac.h> /* for min() */
+ #include <linux/slab.h>
+ #include <linux/fs.h>
+-#include <linux/time.h>
+ #include <linux/pagemap.h>
+-#include "crc32.h"
+ #include <linux/jffs2.h>
+ #include "nodelist.h"
++#include "crc32.h"
+
+ extern int generic_file_open(struct inode *, struct file *) __attribute__((weak));
+ extern loff_t generic_file_llseek(struct file *file, loff_t offset, int origin) __attribute__((weak));
+
+
+-int jffs2_fsync(struct file *filp, struct dentry *dentry, int datasync)
++int jffs2_null_fsync(struct file *filp, struct dentry *dentry, int datasync)
+ {
+- struct inode *inode = dentry->d_inode;
+- struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+- struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
+- if (!c->wbuf || !c->wbuf_len)
+- return 0;
+-
+- /* flush write buffer and update c->nextblock */
+-
+- /* FIXME NAND */
+- /* At the moment we flush the buffer, to make sure
+- * that every thing is on the flash.
+- * maybe we have to think about it to find a smarter
+- * solution.
+- */
+- down(&c->alloc_sem);
+- down(&f->sem);
+- jffs2_flush_wbuf(c,2);
+- up(&f->sem);
+- up(&c->alloc_sem);
+-
+- return 0;
++ /* Move along. Nothing to see here */
++ return 0;
+ }
+
+ struct file_operations jffs2_file_operations =
+ {
+- .llseek = generic_file_llseek,
+- .open = generic_file_open,
+- .read = generic_file_read,
+- .write = generic_file_write,
+- .ioctl = jffs2_ioctl,
+- .mmap = generic_file_mmap,
+- .fsync = jffs2_fsync,
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,29)
+- .sendfile = generic_file_sendfile
+-#endif
++ llseek: generic_file_llseek,
++ open: generic_file_open,
++ read: generic_file_read,
++ write: generic_file_write,
++ ioctl: jffs2_ioctl,
++ mmap: generic_file_mmap,
++ fsync: jffs2_null_fsync
+ };
+
+ /* jffs2_file_inode_operations */
+
+ struct inode_operations jffs2_file_inode_operations =
+ {
+- .setattr = jffs2_setattr
++ setattr: jffs2_setattr
+ };
+
+ struct address_space_operations jffs2_file_address_operations =
+ {
+- .readpage = jffs2_readpage,
+- .prepare_write =jffs2_prepare_write,
+- .commit_write = jffs2_commit_write
++ readpage: jffs2_readpage,
++ prepare_write: jffs2_prepare_write,
++ commit_write: jffs2_commit_write
+ };
+
+ int jffs2_setattr (struct dentry *dentry, struct iattr *iattr)
+@@ -94,7 +90,7 @@
+ unsigned char *mdata = NULL;
+ int mdatalen = 0;
+ unsigned int ivalid;
+- uint32_t phys_ofs, alloclen;
++ __u32 phys_ofs, alloclen;
+ int ret;
+ D1(printk(KERN_DEBUG "jffs2_setattr(): ino #%lu\n", inode->i_ino));
+ ret = inode_change_ok(inode, iattr);
+@@ -108,8 +104,8 @@
+ it out again with the appropriate data attached */
+ if (S_ISBLK(inode->i_mode) || S_ISCHR(inode->i_mode)) {
+ /* For these, we don't actually need to read the old node */
+- dev = (major(dentry->d_inode->i_rdev) << 8) |
+- minor(dentry->d_inode->i_rdev);
++ dev = (MAJOR(to_kdev_t(dentry->d_inode->i_rdev)) << 8) |
++ MINOR(to_kdev_t(dentry->d_inode->i_rdev));
+ mdata = (char *)&dev;
+ mdatalen = sizeof(dev);
+ D1(printk(KERN_DEBUG "jffs2_setattr(): Writing %d bytes of kdev_t\n", mdatalen));
+@@ -126,17 +122,6 @@
+ D1(printk(KERN_DEBUG "jffs2_setattr(): Writing %d bytes of symlink target\n", mdatalen));
+ }
+
+- ivalid = iattr->ia_valid;
+-
+- if (ivalid & ATTR_SIZE && inode->i_size != iattr->ia_size) {
+- ret = jffs2_construct_fragtree_if_missing(c, f);
+- if (ret) {
+- if (S_ISLNK(inode->i_mode))
+- kfree(mdata);
+- return ret;
+- }
+- }
+-
+ ri = jffs2_alloc_raw_inode();
+ if (!ri) {
+ if (S_ISLNK(inode->i_mode))
+@@ -147,82 +132,79 @@
+ ret = jffs2_reserve_space(c, sizeof(*ri) + mdatalen, &phys_ofs, &alloclen, ALLOC_NORMAL);
+ if (ret) {
+ jffs2_free_raw_inode(ri);
+- if (S_ISLNK(inode->i_mode & S_IFMT))
++ if (S_ISLNK(inode->i_mode))
+ kfree(mdata);
+ return ret;
+ }
+ down(&f->sem);
++ ivalid = iattr->ia_valid;
+
+- ri->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+- ri->nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
+- ri->totlen = cpu_to_je32(sizeof(*ri) + mdatalen);
+- ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4));
+-
+- ri->ino = cpu_to_je32(inode->i_ino);
+- ri->version = cpu_to_je32(++f->highest_version);
+-
+- ri->uid = cpu_to_je16((ivalid & ATTR_UID)?iattr->ia_uid:inode->i_uid);
+- ri->gid = cpu_to_je16((ivalid & ATTR_GID)?iattr->ia_gid:inode->i_gid);
+-
+- if (ivalid & ATTR_MODE)
+- if (iattr->ia_mode & S_ISGID &&
+- !in_group_p(je16_to_cpu(ri->gid)) && !capable(CAP_FSETID))
+- ri->mode = cpu_to_je32(iattr->ia_mode & ~S_ISGID);
+- else
+- ri->mode = cpu_to_je32(iattr->ia_mode);
+- else
+- ri->mode = cpu_to_je32(inode->i_mode);
+-
+-
+- ri->isize = cpu_to_je32((ivalid & ATTR_SIZE)?iattr->ia_size:inode->i_size);
+- ri->atime = cpu_to_je32((ivalid & ATTR_ATIME)?iattr->ia_atime:inode->i_atime);
+- ri->mtime = cpu_to_je32((ivalid & ATTR_MTIME)?iattr->ia_mtime:inode->i_mtime);
+- ri->ctime = cpu_to_je32((ivalid & ATTR_CTIME)?iattr->ia_ctime:inode->i_ctime);
++ ri->magic = JFFS2_MAGIC_BITMASK;
++ ri->nodetype = JFFS2_NODETYPE_INODE;
++ ri->totlen = sizeof(*ri) + mdatalen;
++ ri->hdr_crc = crc32(0, ri, sizeof(struct jffs2_unknown_node)-4);
++
++ ri->ino = inode->i_ino;
++ ri->version = ++f->highest_version;
++
++ ri->mode = (ivalid & ATTR_MODE)?iattr->ia_mode:inode->i_mode;
++ ri->uid = (ivalid & ATTR_UID)?iattr->ia_uid:inode->i_uid;
++ ri->gid = (ivalid & ATTR_GID)?iattr->ia_gid:inode->i_gid;
++
++ if (ivalid & ATTR_MODE && ri->mode & S_ISGID &&
++ !in_group_p(ri->gid) && !capable(CAP_FSETID))
++ ri->mode &= ~S_ISGID;
++
++ ri->isize = (ivalid & ATTR_SIZE)?iattr->ia_size:inode->i_size;
++ ri->atime = (ivalid & ATTR_ATIME)?iattr->ia_atime:inode->i_atime;
++ ri->mtime = (ivalid & ATTR_MTIME)?iattr->ia_mtime:inode->i_mtime;
++ ri->ctime = (ivalid & ATTR_CTIME)?iattr->ia_ctime:inode->i_ctime;
+
+- ri->offset = cpu_to_je32(0);
+- ri->csize = ri->dsize = cpu_to_je32(mdatalen);
++ ri->offset = 0;
++ ri->csize = ri->dsize = mdatalen;
+ ri->compr = JFFS2_COMPR_NONE;
+- if (ivalid & ATTR_SIZE && inode->i_size < iattr->ia_size) {
++ if (inode->i_size < ri->isize) {
+ /* It's an extension. Make it a hole node */
+ ri->compr = JFFS2_COMPR_ZERO;
+- ri->dsize = cpu_to_je32(iattr->ia_size - inode->i_size);
+- ri->offset = cpu_to_je32(inode->i_size);
++ ri->dsize = ri->isize - inode->i_size;
++ ri->offset = inode->i_size;
+ }
+- ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
++ ri->node_crc = crc32(0, ri, sizeof(*ri)-8);
+ if (mdatalen)
+- ri->data_crc = cpu_to_je32(crc32(0, mdata, mdatalen));
++ ri->data_crc = crc32(0, mdata, mdatalen);
+ else
+- ri->data_crc = cpu_to_je32(0);
++ ri->data_crc = 0;
+
+- new_metadata = jffs2_write_dnode(c, f, ri, mdata, mdatalen, phys_ofs, NULL);
++ new_metadata = jffs2_write_dnode(inode, ri, mdata, mdatalen, phys_ofs, NULL);
+ if (S_ISLNK(inode->i_mode))
+ kfree(mdata);
++
++ jffs2_complete_reservation(c);
+
+ if (IS_ERR(new_metadata)) {
+- jffs2_complete_reservation(c);
+ jffs2_free_raw_inode(ri);
+ up(&f->sem);
+ return PTR_ERR(new_metadata);
+ }
+ /* It worked. Update the inode */
+- inode->i_atime = je32_to_cpu(ri->atime);
+- inode->i_ctime = je32_to_cpu(ri->ctime);
+- inode->i_mtime = je32_to_cpu(ri->mtime);
+- inode->i_mode = je32_to_cpu(ri->mode);
+- inode->i_uid = je16_to_cpu(ri->uid);
+- inode->i_gid = je16_to_cpu(ri->gid);
++ inode->i_atime = ri->atime;
++ inode->i_ctime = ri->ctime;
++ inode->i_mtime = ri->mtime;
++ inode->i_mode = ri->mode;
++ inode->i_uid = ri->uid;
++ inode->i_gid = ri->gid;
+
+
+ old_metadata = f->metadata;
+
+- if (ivalid & ATTR_SIZE && inode->i_size > iattr->ia_size) {
+- vmtruncate(inode, iattr->ia_size);
+- jffs2_truncate_fraglist (c, f, iattr->ia_size);
++ if (inode->i_size > ri->isize) {
++ vmtruncate(inode, ri->isize);
++ jffs2_truncate_fraglist (c, &f->fraglist, ri->isize);
+ }
+
+- if (ivalid & ATTR_SIZE && inode->i_size < iattr->ia_size) {
++ if (inode->i_size < ri->isize) {
+ jffs2_add_full_dnode_to_inode(c, f, new_metadata);
+- inode->i_size = iattr->ia_size;
++ inode->i_size = ri->isize;
+ f->metadata = NULL;
+ } else {
+ f->metadata = new_metadata;
+@@ -232,10 +214,7 @@
+ jffs2_free_full_dnode(old_metadata);
+ }
+ jffs2_free_raw_inode(ri);
+-
+ up(&f->sem);
+- jffs2_complete_reservation(c);
+-
+ return 0;
+ }
+
+@@ -243,30 +222,85 @@
+ {
+ struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+ struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
++ struct jffs2_node_frag *frag = f->fraglist;
++ __u32 offset = pg->index << PAGE_CACHE_SHIFT;
++ __u32 end = offset + PAGE_CACHE_SIZE;
+ unsigned char *pg_buf;
+ int ret;
+
+- D1(printk(KERN_DEBUG "jffs2_do_readpage_nolock(): ino #%lu, page at offset 0x%lx\n", inode->i_ino, pg->index << PAGE_CACHE_SHIFT));
++ D1(printk(KERN_DEBUG "jffs2_do_readpage_nolock(): ino #%lu, page at offset 0x%x\n", inode->i_ino, offset));
+
+ if (!PageLocked(pg))
+ PAGE_BUG(pg);
+
+- pg_buf = kmap(pg);
+- /* FIXME: Can kmap fail? */
++ while(frag && frag->ofs + frag->size <= offset) {
++ // D1(printk(KERN_DEBUG "skipping frag %d-%d; before the region we care about\n", frag->ofs, frag->ofs + frag->size));
++ frag = frag->next;
++ }
+
+- ret = jffs2_read_inode_range(c, f, pg_buf, pg->index << PAGE_CACHE_SHIFT, PAGE_CACHE_SIZE);
++ pg_buf = kmap(pg);
+
+- if (ret) {
+- ClearPageUptodate(pg);
+- SetPageError(pg);
+- } else {
+- SetPageUptodate(pg);
+- ClearPageError(pg);
+- }
++ /* XXX FIXME: Where a single physical node actually shows up in two
++ frags, we read it twice. Don't do that. */
++ /* Now we're pointing at the first frag which overlaps our page */
++ while(offset < end) {
++ D2(printk(KERN_DEBUG "jffs2_readpage: offset %d, end %d\n", offset, end));
++ if (!frag || frag->ofs > offset) {
++ __u32 holesize = end - offset;
++ if (frag) {
++ D1(printk(KERN_NOTICE "Eep. Hole in ino %ld fraglist. frag->ofs = 0x%08x, offset = 0x%08x\n", inode->i_ino, frag->ofs, offset));
++ holesize = min(holesize, frag->ofs - offset);
++ D1(jffs2_print_frag_list(f));
++ }
++ D1(printk(KERN_DEBUG "Filling non-frag hole from %d-%d\n", offset, offset+holesize));
++ memset(pg_buf, 0, holesize);
++ pg_buf += holesize;
++ offset += holesize;
++ continue;
++ } else if (frag->ofs < offset && (offset & (PAGE_CACHE_SIZE-1)) != 0) {
++ D1(printk(KERN_NOTICE "Eep. Overlap in ino #%ld fraglist. frag->ofs = 0x%08x, offset = 0x%08x\n",
++ inode->i_ino, frag->ofs, offset));
++ D1(jffs2_print_frag_list(f));
++ memset(pg_buf, 0, end - offset);
++ ClearPageUptodate(pg);
++ SetPageError(pg);
++ kunmap(pg);
++ return -EIO;
++ } else if (!frag->node) {
++ __u32 holeend = min(end, frag->ofs + frag->size);
++ D1(printk(KERN_DEBUG "Filling frag hole from %d-%d (frag 0x%x 0x%x)\n", offset, holeend, frag->ofs, frag->ofs + frag->size));
++ memset(pg_buf, 0, holeend - offset);
++ pg_buf += holeend - offset;
++ offset = holeend;
++ frag = frag->next;
++ continue;
++ } else {
++ __u32 readlen;
++ readlen = min(frag->size, end - offset);
++ D1(printk(KERN_DEBUG "Reading %d-%d from node at 0x%x\n", frag->ofs, frag->ofs+readlen, frag->node->raw->flash_offset & ~3));
++ ret = jffs2_read_dnode(c, frag->node, pg_buf, frag->ofs - frag->node->ofs, readlen);
++ D2(printk(KERN_DEBUG "node read done\n"));
++ if (ret) {
++ D1(printk(KERN_DEBUG"jffs2_readpage error %d\n",ret));
++ memset(pg_buf, 0, frag->size);
++ ClearPageUptodate(pg);
++ SetPageError(pg);
++ kunmap(pg);
++ return ret;
++ }
++ }
++ pg_buf += frag->size;
++ offset += frag->size;
++ frag = frag->next;
++ D2(printk(KERN_DEBUG "node read was OK. Looping\n"));
++ }
++ D2(printk(KERN_DEBUG "readpage finishing\n"));
++ SetPageUptodate(pg);
++ ClearPageError(pg);
+
+ flush_dcache_page(pg);
+- kunmap(pg);
+
++ kunmap(pg);
+ D1(printk(KERN_DEBUG "readpage finished\n"));
+ return 0;
+ }
+@@ -274,76 +308,72 @@
+ int jffs2_do_readpage_unlock(struct inode *inode, struct page *pg)
+ {
+ int ret = jffs2_do_readpage_nolock(inode, pg);
+- unlock_page(pg);
++ UnlockPage(pg);
+ return ret;
+ }
+
+
+ int jffs2_readpage (struct file *filp, struct page *pg)
+ {
+- struct jffs2_inode_info *f = JFFS2_INODE_INFO(pg->mapping->host);
++ struct jffs2_inode_info *f = JFFS2_INODE_INFO(filp->f_dentry->d_inode);
+ int ret;
+
+ down(&f->sem);
+- ret = jffs2_do_readpage_unlock(pg->mapping->host, pg);
++ ret = jffs2_do_readpage_unlock(filp->f_dentry->d_inode, pg);
+ up(&f->sem);
+ return ret;
+ }
+
+ int jffs2_prepare_write (struct file *filp, struct page *pg, unsigned start, unsigned end)
+ {
+- struct inode *inode = pg->mapping->host;
++ struct inode *inode = filp->f_dentry->d_inode;
+ struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+- uint32_t pageofs = pg->index << PAGE_CACHE_SHIFT;
++ __u32 pageofs = pg->index << PAGE_CACHE_SHIFT;
+ int ret = 0;
+- struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
+
+- D1(printk(KERN_DEBUG "jffs2_prepare_write()\n"));
+-
+- ret = jffs2_construct_fragtree_if_missing(c, f);
+- if (ret)
+- return ret;
++ down(&f->sem);
++ D1(printk(KERN_DEBUG "jffs2_prepare_write() nrpages %ld\n", inode->i_mapping->nrpages));
+
+ if (pageofs > inode->i_size) {
+ /* Make new hole frag from old EOF to new page */
++ struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
+ struct jffs2_raw_inode ri;
+ struct jffs2_full_dnode *fn;
+- uint32_t phys_ofs, alloc_len;
++ __u32 phys_ofs, alloc_len;
+
+ D1(printk(KERN_DEBUG "Writing new hole frag 0x%x-0x%x between current EOF and new page\n",
+ (unsigned int)inode->i_size, pageofs));
+
+ ret = jffs2_reserve_space(c, sizeof(ri), &phys_ofs, &alloc_len, ALLOC_NORMAL);
+- if (ret)
++ if (ret) {
++ up(&f->sem);
+ return ret;
+-
+- down(&f->sem);
++ }
+ memset(&ri, 0, sizeof(ri));
+
+- ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+- ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
+- ri.totlen = cpu_to_je32(sizeof(ri));
+- ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4));
+-
+- ri.ino = cpu_to_je32(f->inocache->ino);
+- ri.version = cpu_to_je32(++f->highest_version);
+- ri.mode = cpu_to_je32(inode->i_mode);
+- ri.uid = cpu_to_je16(inode->i_uid);
+- ri.gid = cpu_to_je16(inode->i_gid);
+- ri.isize = cpu_to_je32(max((uint32_t)inode->i_size, pageofs));
+- ri.atime = ri.ctime = ri.mtime = cpu_to_je32(CURRENT_TIME);
+- ri.offset = cpu_to_je32(inode->i_size);
+- ri.dsize = cpu_to_je32(pageofs - inode->i_size);
+- ri.csize = cpu_to_je32(0);
++ ri.magic = JFFS2_MAGIC_BITMASK;
++ ri.nodetype = JFFS2_NODETYPE_INODE;
++ ri.totlen = sizeof(ri);
++ ri.hdr_crc = crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4);
++
++ ri.ino = f->inocache->ino;
++ ri.version = ++f->highest_version;
++ ri.mode = inode->i_mode;
++ ri.uid = inode->i_uid;
++ ri.gid = inode->i_gid;
++ ri.isize = max((__u32)inode->i_size, pageofs);
++ ri.atime = ri.ctime = ri.mtime = CURRENT_TIME;
++ ri.offset = inode->i_size;
++ ri.dsize = pageofs - inode->i_size;
++ ri.csize = 0;
+ ri.compr = JFFS2_COMPR_ZERO;
+- ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8));
+- ri.data_crc = cpu_to_je32(0);
++ ri.node_crc = crc32(0, &ri, sizeof(ri)-8);
++ ri.data_crc = 0;
+
+- fn = jffs2_write_dnode(c, f, &ri, NULL, 0, phys_ofs, NULL);
+-
++ fn = jffs2_write_dnode(inode, &ri, NULL, 0, phys_ofs, NULL);
++ jffs2_complete_reservation(c);
+ if (IS_ERR(fn)) {
+ ret = PTR_ERR(fn);
+- jffs2_complete_reservation(c);
+ up(&f->sem);
+ return ret;
+ }
+@@ -357,23 +387,18 @@
+ D1(printk(KERN_DEBUG "Eep. add_full_dnode_to_inode() failed in prepare_write, returned %d\n", ret));
+ jffs2_mark_node_obsolete(c, fn->raw);
+ jffs2_free_full_dnode(fn);
+- jffs2_complete_reservation(c);
+ up(&f->sem);
+ return ret;
+ }
+- jffs2_complete_reservation(c);
+ inode->i_size = pageofs;
+- up(&f->sem);
+ }
+
+
+- /* Read in the page if it wasn't already present, unless it's a whole page */
+- if (!PageUptodate(pg) && (start || end < PAGE_CACHE_SIZE)) {
+- down(&f->sem);
++ /* Read in the page if it wasn't already present */
++ if (!Page_Uptodate(pg) && (start || end < PAGE_SIZE))
+ ret = jffs2_do_readpage_nolock(inode, pg);
+- up(&f->sem);
+- }
+- D1(printk(KERN_DEBUG "end prepare_write(). pg->flags %lx\n", pg->flags));
++ D1(printk(KERN_DEBUG "end prepare_write(). nrpages %ld\n", inode->i_mapping->nrpages));
++ up(&f->sem);
+ return ret;
+ }
+
+@@ -382,60 +407,122 @@
+ /* Actually commit the write from the page cache page we're looking at.
+ * For now, we write the full page out each time. It sucks, but it's simple
+ */
+- struct inode *inode = pg->mapping->host;
++ struct inode *inode = filp->f_dentry->d_inode;
+ struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+ struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
++ __u32 newsize = max_t(__u32, filp->f_dentry->d_inode->i_size, (pg->index << PAGE_CACHE_SHIFT) + end);
++ __u32 file_ofs = (pg->index << PAGE_CACHE_SHIFT);
++ __u32 writelen = min((__u32)PAGE_CACHE_SIZE, newsize - file_ofs);
+ struct jffs2_raw_inode *ri;
+ int ret = 0;
+- uint32_t writtenlen = 0;
+-
+- D1(printk(KERN_DEBUG "jffs2_commit_write(): ino #%lu, page at 0x%lx, range %d-%d, flags %lx\n",
+- inode->i_ino, pg->index << PAGE_CACHE_SHIFT, start, end, pg->flags));
++ ssize_t writtenlen = 0;
+
+- if (!start && end == PAGE_CACHE_SIZE) {
+- /* We need to avoid deadlock with page_cache_read() in
+- jffs2_garbage_collect_pass(). So we have to mark the
+- page up to date, to prevent page_cache_read() from
+- trying to re-lock it. */
+- SetPageUptodate(pg);
+- }
++ D1(printk(KERN_DEBUG "jffs2_commit_write(): ino #%lu, page at 0x%lx, range %d-%d, nrpages %ld\n", inode->i_ino, pg->index << PAGE_CACHE_SHIFT, start, end, filp->f_dentry->d_inode->i_mapping->nrpages));
+
+ ri = jffs2_alloc_raw_inode();
+-
+- if (!ri) {
+- D1(printk(KERN_DEBUG "jffs2_commit_write(): Allocation of raw inode failed\n"));
++ if (!ri)
+ return -ENOMEM;
+- }
+
+- /* Set the fields that the generic jffs2_write_inode_range() code can't find */
+- ri->ino = cpu_to_je32(inode->i_ino);
+- ri->mode = cpu_to_je32(inode->i_mode);
+- ri->uid = cpu_to_je16(inode->i_uid);
+- ri->gid = cpu_to_je16(inode->i_gid);
+- ri->isize = cpu_to_je32((uint32_t)inode->i_size);
+- ri->atime = ri->ctime = ri->mtime = cpu_to_je32(CURRENT_TIME);
+-
+- /* We rely on the fact that generic_file_write() currently kmaps the page for us. */
+- ret = jffs2_write_inode_range(c, f, ri, page_address(pg) + start,
+- (pg->index << PAGE_CACHE_SHIFT) + start, end - start, &writtenlen);
++ while(writelen) {
++ struct jffs2_full_dnode *fn;
++ unsigned char *comprbuf = NULL;
++ unsigned char comprtype = JFFS2_COMPR_NONE;
++ __u32 phys_ofs, alloclen;
++ __u32 datalen, cdatalen;
+
+- if (ret) {
+- /* There was an error writing. */
+- SetPageError(pg);
+- }
++ D2(printk(KERN_DEBUG "jffs2_commit_write() loop: 0x%x to write to 0x%x\n", writelen, file_ofs));
++
++ ret = jffs2_reserve_space(c, sizeof(*ri) + JFFS2_MIN_DATA_LEN, &phys_ofs, &alloclen, ALLOC_NORMAL);
++ if (ret) {
++ SetPageError(pg);
++ D1(printk(KERN_DEBUG "jffs2_reserve_space returned %d\n", ret));
++ break;
++ }
++ down(&f->sem);
++ datalen = writelen;
++ cdatalen = min(alloclen - sizeof(*ri), writelen);
+
+- if (writtenlen) {
+- if (inode->i_size < (pg->index << PAGE_CACHE_SHIFT) + start + writtenlen) {
+- inode->i_size = (pg->index << PAGE_CACHE_SHIFT) + start + writtenlen;
+- inode->i_blocks = (inode->i_size + 511) >> 9;
+-
+- inode->i_ctime = inode->i_mtime = je32_to_cpu(ri->ctime);
++ comprbuf = kmalloc(cdatalen, GFP_KERNEL);
++ if (comprbuf) {
++ comprtype = jffs2_compress(page_address(pg)+ (file_ofs & (PAGE_CACHE_SIZE-1)), comprbuf, &datalen, &cdatalen);
+ }
++ if (comprtype == JFFS2_COMPR_NONE) {
++ /* Either compression failed, or the allocation of comprbuf failed */
++ if (comprbuf)
++ kfree(comprbuf);
++ comprbuf = page_address(pg) + (file_ofs & (PAGE_CACHE_SIZE -1));
++ datalen = cdatalen;
++ }
++ /* Now comprbuf points to the data to be written, be it compressed or not.
++ comprtype holds the compression type, and comprtype == JFFS2_COMPR_NONE means
++ that the comprbuf doesn't need to be kfree()d.
++ */
++
++ ri->magic = JFFS2_MAGIC_BITMASK;
++ ri->nodetype = JFFS2_NODETYPE_INODE;
++ ri->totlen = sizeof(*ri) + cdatalen;
++ ri->hdr_crc = crc32(0, ri, sizeof(struct jffs2_unknown_node)-4);
++
++ ri->ino = inode->i_ino;
++ ri->version = ++f->highest_version;
++ ri->mode = inode->i_mode;
++ ri->uid = inode->i_uid;
++ ri->gid = inode->i_gid;
++ ri->isize = max((__u32)inode->i_size, file_ofs + datalen);
++ ri->atime = ri->ctime = ri->mtime = CURRENT_TIME;
++ ri->offset = file_ofs;
++ ri->csize = cdatalen;
++ ri->dsize = datalen;
++ ri->compr = comprtype;
++ ri->node_crc = crc32(0, ri, sizeof(*ri)-8);
++ ri->data_crc = crc32(0, comprbuf, cdatalen);
++
++ fn = jffs2_write_dnode(inode, ri, comprbuf, cdatalen, phys_ofs, NULL);
++
++ jffs2_complete_reservation(c);
++
++ if (comprtype != JFFS2_COMPR_NONE)
++ kfree(comprbuf);
++
++ if (IS_ERR(fn)) {
++ ret = PTR_ERR(fn);
++ up(&f->sem);
++ SetPageError(pg);
++ break;
++ }
++ ret = jffs2_add_full_dnode_to_inode(c, f, fn);
++ if (f->metadata) {
++ jffs2_mark_node_obsolete(c, f->metadata->raw);
++ jffs2_free_full_dnode(f->metadata);
++ f->metadata = NULL;
++ }
++ up(&f->sem);
++ if (ret) {
++ /* Eep */
++ D1(printk(KERN_DEBUG "Eep. add_full_dnode_to_inode() failed in commit_write, returned %d\n", ret));
++ jffs2_mark_node_obsolete(c, fn->raw);
++ jffs2_free_full_dnode(fn);
++ SetPageError(pg);
++ break;
++ }
++ inode->i_size = ri->isize;
++ inode->i_blocks = (inode->i_size + 511) >> 9;
++ inode->i_ctime = inode->i_mtime = ri->ctime;
++ if (!datalen) {
++ printk(KERN_WARNING "Eep. We didn't actually write any bloody data\n");
++ ret = -EIO;
++ SetPageError(pg);
++ break;
++ }
++ D1(printk(KERN_DEBUG "increasing writtenlen by %d\n", datalen));
++ writtenlen += datalen;
++ file_ofs += datalen;
++ writelen -= datalen;
+ }
+
+ jffs2_free_raw_inode(ri);
+
+- if (start+writtenlen < end) {
++ if (writtenlen < end) {
+ /* generic_file_write has written more to the page cache than we've
+ actually written to the medium. Mark the page !Uptodate so that
+ it gets reread */
+@@ -443,7 +530,13 @@
+ SetPageError(pg);
+ ClearPageUptodate(pg);
+ }
++ if (writtenlen <= start) {
++ /* We didn't even get to the start of the affected part */
++ ret = ret?ret:-ENOSPC;
++ D1(printk(KERN_DEBUG "jffs2_commit_write(): Only %x bytes written to page. start (%x) not reached, returning %d\n", writtenlen, start, ret));
++ }
++ writtenlen = min(end-start, writtenlen-start);
+
+- D1(printk(KERN_DEBUG "jffs2_commit_write() returning %d\n",writtenlen?writtenlen:ret));
++ D1(printk(KERN_DEBUG "jffs2_commit_write() returning %d. nrpages is %ld\n",writtenlen?writtenlen:ret, inode->i_mapping->nrpages));
+ return writtenlen?writtenlen:ret;
+ }
+diff -Nur linux/fs/jffs2/fs.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/fs.c
+--- linux/fs/jffs2/fs.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/fs.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,412 +0,0 @@
+-/*
+- * JFFS2 -- Journalling Flash File System, Version 2.
+- *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
+- *
+- * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+- *
+- * For licensing information, see the file 'LICENCE' in this directory.
+- *
+- * $Id: fs.c,v 1.17 2002/08/21 10:42:12 dwmw2 Exp $
+- *
+- * ChangeLog:
+- * 19-Nov-2002 Lineo Japan, Inc. add function jffs2_get_nr_inodes()
+- * 09-Nov-2002 Lineo Japan, Inc. add code to do avail = 0 when cannot reserve space
+- * 01-Nov-2002 Lineo Japan, Inc. involve nr_bad_blocks in USED calc.
+- *
+- * ChangeLog:
+- * 19-Nov-2002 Lineo Japan, Inc. add function jffs2_get_nr_inodes()
+- * 24-Nov-2002 SHARP modify storage-avail calculation, and add erasing_dirty_size
+- * 09-Nov-2002 Lineo Japan, Inc. add code to do avail = 0 when cannot reserve space
+- * 01-Nov-2002 Lineo Japan, Inc. involve nr_bad_blocks in USED calc.
+- *
+- */
+-
+-#include <linux/config.h>
+-#include <linux/kernel.h>
+-#include <linux/sched.h>
+-#include <linux/fs.h>
+-#include <linux/list.h>
+-#include <linux/interrupt.h>
+-#include <linux/mtd/mtd.h>
+-#include <linux/pagemap.h>
+-#include <linux/slab.h>
+-#include "nodelist.h"
+-
+-int jffs2_statfs(struct super_block *sb, struct statfs *buf)
+-{
+- struct jffs2_sb_info *c = JFFS2_SB_INFO(sb);
+- unsigned long avail, avail_dirty;
+- uint32_t dirty_now, erasing_dirty_now, nonerasing_dirty_now, next_free;
+- int32_t avail_blocks;
+- int reserved_blocks = JFFS2_RESERVED_BLOCKS_WRITE + JFFS2_RESERVED_BLOCKS_ROOT;
+-
+- buf->f_type = JFFS2_SUPER_MAGIC;
+- buf->f_bsize = 1 << PAGE_SHIFT;
+- buf->f_blocks = c->flash_size >> PAGE_SHIFT;
+- buf->f_files = 0;
+- buf->f_ffree = 0;
+- buf->f_namelen = JFFS2_MAX_NAME_LEN;
+-
+- spin_lock_bh(&c->erase_completion_lock);
+-
+- dirty_now = c->dirty_size;
+- erasing_dirty_now = c->erasing_dirty_size;
+- if (dirty_now < erasing_dirty_now)
+- erasing_dirty_now = dirty_now;
+- nonerasing_dirty_now = dirty_now - erasing_dirty_now;
+- avail_blocks = NR_AVAIL_BLOCKS(c);
+- next_free = (c->nextblock) ? (c->nextblock->free_size) : 0;
+-
+- if (nonerasing_dirty_now >= JFFS2_RESERVED_BLOCKS_DIRTY * c->sector_size){
+- avail_dirty = nonerasing_dirty_now - JFFS2_RESERVED_BLOCKS_DIRTY * c->sector_size;
+- }else{
+- avail_dirty = 0;
+- }
+-
+- if (avail_blocks * c->sector_size + next_free + avail_dirty >= reserved_blocks * c->sector_size){
+- avail = avail_blocks * c->sector_size + next_free + avail_dirty - reserved_blocks * c->sector_size;
+- }else{
+- avail = 0;
+- }
+-
+- if (avail > 0){
+- if (avail_blocks < reserved_blocks &&
+- (c->cont_gc_count >= JFFS2_MAX_CONT_GC ||
+- avail_blocks <= 1 + JFFS2_RESERVED_BLOCKS_ROOT ||
+- dirty_now < c->sector_size ||
+- nonerasing_dirty_now / c->sector_size < JFFS2_RESERVED_BLOCKS_DIRTY ||
+- avail_blocks + nonerasing_dirty_now / c->sector_size - JFFS2_RESERVED_BLOCKS_DIRTY < reserved_blocks)){
+- avail = 0;
+- }
+- }
+-
+- buf->f_bavail = buf->f_bfree = avail >> PAGE_SHIFT;
+-
+- D1(jffs2_dump_block_lists(c));
+-
+- spin_unlock_bh(&c->erase_completion_lock);
+-
+- return 0;
+-}
+-
+-
+-#ifdef CONFIG_JFFS2_DYNFRAGTREE
+-
+-static unsigned long jffs2_nr_inodes; /* the number of inode objects */
+-static inline void inc_nr_inodes(void) { jffs2_nr_inodes++; }
+-static inline void dec_nr_inodes(void) { jffs2_nr_inodes--; }
+-unsigned long jffs2_get_nr_inodes(void) { return jffs2_nr_inodes; }
+-
+-#else
+-
+-static inline void inc_nr_inodes(void) { }
+-static inline void dec_nr_inodes(void) { }
+-unsigned long jffs2_get_nr_inodes(void) { return 0; }
+-
+-#endif
+-
+-
+-void jffs2_clear_inode (struct inode *inode)
+-{
+- /* We can forget about this inode for now - drop all
+- * the nodelists associated with it, etc.
+- */
+- struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
+- struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+-
+- D1(printk(KERN_DEBUG "jffs2_clear_inode(): ino #%lu mode %o\n", inode->i_ino, inode->i_mode));
+-
+- jffs2_do_clear_inode(c, f);
+-
+- dec_nr_inodes();
+-}
+-
+-void jffs2_read_inode (struct inode *inode)
+-{
+- struct jffs2_inode_info *f;
+- struct jffs2_sb_info *c;
+- struct jffs2_raw_inode latest_node;
+- int ret;
+-
+- D1(printk(KERN_DEBUG "jffs2_read_inode(): inode->i_ino == %lu\n", inode->i_ino));
+-
+- f = JFFS2_INODE_INFO(inode);
+- c = JFFS2_SB_INFO(inode->i_sb);
+-
+- jffs2_init_inode_info(f);
+-
+- ret = jffs2_do_read_inode(c, f, inode->i_ino, &latest_node);
+-
+- if (ret) {
+- make_bad_inode(inode);
+- up(&f->sem);
+- return;
+- }
+- inode->i_mode = je32_to_cpu(latest_node.mode);
+- inode->i_uid = je16_to_cpu(latest_node.uid);
+- inode->i_gid = je16_to_cpu(latest_node.gid);
+- inode->i_size = je32_to_cpu(latest_node.isize);
+- inode->i_atime = je32_to_cpu(latest_node.atime);
+- inode->i_mtime = je32_to_cpu(latest_node.mtime);
+- inode->i_ctime = je32_to_cpu(latest_node.ctime);
+-
+- inode->i_nlink = f->inocache->nlink;
+-
+- inode->i_blksize = PAGE_SIZE;
+- inode->i_blocks = (inode->i_size + 511) >> 9;
+-
+- switch (inode->i_mode & S_IFMT) {
+- unsigned short rdev;
+-
+- case S_IFLNK:
+- inode->i_op = &jffs2_symlink_inode_operations;
+- break;
+-
+- case S_IFDIR:
+- {
+- struct jffs2_full_dirent *fd;
+-
+- for (fd=f->dents; fd; fd = fd->next) {
+- if (fd->type == DT_DIR && fd->ino)
+- inode->i_nlink++;
+- }
+- /* and '..' */
+- inode->i_nlink++;
+- /* Root dir gets i_nlink 3 for some reason */
+- if (inode->i_ino == 1)
+- inode->i_nlink++;
+-
+- inode->i_op = &jffs2_dir_inode_operations;
+- inode->i_fop = &jffs2_dir_operations;
+- break;
+- }
+- case S_IFREG:
+- inode->i_op = &jffs2_file_inode_operations;
+- inode->i_fop = &jffs2_file_operations;
+- inode->i_mapping->a_ops = &jffs2_file_address_operations;
+- inode->i_mapping->nrpages = 0;
+- break;
+-
+- case S_IFBLK:
+- case S_IFCHR:
+- /* Read the device numbers from the media */
+- D1(printk(KERN_DEBUG "Reading device numbers from flash\n"));
+- if (jffs2_read_dnode(c, f->metadata, (char *)&rdev, 0, sizeof(rdev)) < 0) {
+- /* Eep */
+- printk(KERN_NOTICE "Read device numbers for inode %lu failed\n", (unsigned long)inode->i_ino);
+- up(&f->sem);
+- jffs2_do_clear_inode(c, f);
+- make_bad_inode(inode);
+- return;
+- }
+-
+- case S_IFSOCK:
+- case S_IFIFO:
+- inode->i_op = &jffs2_file_inode_operations;
+- init_special_inode(inode, inode->i_mode, kdev_t_to_nr(mk_kdev(rdev>>8, rdev&0xff)));
+- break;
+-
+- default:
+- printk(KERN_WARNING "jffs2_read_inode(): Bogus imode %o for ino %lu\n", inode->i_mode, (unsigned long)inode->i_ino);
+- }
+-
+- up(&f->sem);
+-
+- inc_nr_inodes();
+-
+- D1(printk(KERN_DEBUG "jffs2_read_inode() returning\n"));
+-}
+-
+-
+-int jffs2_remount_fs (struct super_block *sb, int *flags, char *data)
+-{
+- struct jffs2_sb_info *c = JFFS2_SB_INFO(sb);
+-
+- if (c->flags & JFFS2_SB_FLAG_RO && !(sb->s_flags & MS_RDONLY))
+- return -EROFS;
+-
+- /* We stop if it was running, then restart if it needs to.
+- This also catches the case where it was stopped and this
+- is just a remount to restart it */
+- if (!(sb->s_flags & MS_RDONLY))
+- jffs2_stop_garbage_collect_thread(c);
+-
+- if (!(*flags & MS_RDONLY))
+- jffs2_start_garbage_collect_thread(c);
+-
+- sb->s_flags = (sb->s_flags & ~MS_RDONLY)|(*flags & MS_RDONLY);
+-
+- return 0;
+-}
+-
+-void jffs2_write_super (struct super_block *sb)
+-{
+- struct jffs2_sb_info *c = JFFS2_SB_INFO(sb);
+- sb->s_dirt = 0;
+-
+- if (sb->s_flags & MS_RDONLY)
+- return;
+-
+- D1(printk(KERN_DEBUG "jffs2_write_super()\n"));
+- jffs2_garbage_collect_trigger(c);
+- jffs2_erase_pending_blocks(c);
+- jffs2_mark_erased_blocks(c);
+-}
+-
+-
+-/* jffs2_new_inode: allocate a new inode and inocache, add it to the hash,
+- fill in the raw_inode while you're at it. */
+-struct inode *jffs2_new_inode (struct inode *dir_i, int mode, struct jffs2_raw_inode *ri)
+-{
+- struct inode *inode;
+- struct super_block *sb = dir_i->i_sb;
+- struct jffs2_sb_info *c;
+- struct jffs2_inode_info *f;
+- int ret;
+-
+- D1(printk(KERN_DEBUG "jffs2_new_inode(): dir_i %ld, mode 0x%x\n", dir_i->i_ino, mode));
+-
+- c = JFFS2_SB_INFO(sb);
+-
+- inode = new_inode(sb);
+-
+- if (!inode)
+- return ERR_PTR(-ENOMEM);
+-
+- f = JFFS2_INODE_INFO(inode);
+- jffs2_init_inode_info(f);
+-
+- memset(ri, 0, sizeof(*ri));
+- /* Set OS-specific defaults for new inodes */
+- ri->uid = cpu_to_je16(current->fsuid);
+-
+- if (dir_i->i_mode & S_ISGID) {
+- ri->gid = cpu_to_je16(dir_i->i_gid);
+- if (S_ISDIR(mode))
+- mode |= S_ISGID;
+- } else {
+- ri->gid = cpu_to_je16(current->fsgid);
+- }
+- ri->mode = cpu_to_je32(mode);
+- ret = jffs2_do_new_inode (c, f, mode, ri);
+- if (ret) {
+- make_bad_inode(inode);
+- iput(inode);
+- return ERR_PTR(ret);
+- }
+- inode->i_nlink = 1;
+- inode->i_ino = je32_to_cpu(ri->ino);
+- inode->i_mode = je32_to_cpu(ri->mode);
+- inode->i_gid = je16_to_cpu(ri->gid);
+- inode->i_uid = je16_to_cpu(ri->uid);
+- inode->i_atime = inode->i_ctime = inode->i_mtime = CURRENT_TIME;
+- ri->atime = ri->mtime = ri->ctime = cpu_to_je32(inode->i_mtime);
+-
+- inode->i_blksize = PAGE_SIZE;
+- inode->i_blocks = 0;
+- inode->i_size = 0;
+-
+- insert_inode_hash(inode);
+-
+- inc_nr_inodes();
+-
+- return inode;
+-}
+-
+-
+-int jffs2_do_fill_super(struct super_block *sb, void *data, int silent)
+-{
+- struct jffs2_sb_info *c;
+- struct inode *root_i;
+- int ret;
+-
+- c = JFFS2_SB_INFO(sb);
+-
+- c->sector_size = c->mtd->erasesize;
+- c->flash_size = c->mtd->size;
+-
+-#if 0
+- if (c->sector_size < 0x10000) {
+- printk(KERN_INFO "jffs2: Erase block size too small (%dKiB). Using 64KiB instead\n",
+- c->sector_size / 1024);
+- c->sector_size = 0x10000;
+- }
+-#endif
+- if (c->flash_size < 5*c->sector_size) {
+- printk(KERN_ERR "jffs2: Too few erase blocks (%d)\n",
+- c->flash_size / c->sector_size);
+- return -EINVAL;
+- }
+-
+- c->cleanmarker_size = sizeof(struct jffs2_unknown_node);
+- /* Jvrn -- stick alignment for weird 8-byte-page flash here */
+-
+- if (jffs2_cleanmarker_oob(c)) {
+- /* Cleanmarker is out-of-band, so inline size zero */
+- c->cleanmarker_size = 0;
+- }
+-
+- if (c->mtd->type == MTD_NANDFLASH) {
+- /* Initialise write buffer */
+- c->wbuf_pagesize = c->mtd->oobblock;
+- c->wbuf_ofs = 0xFFFFFFFF;
+- c->wbuf = kmalloc(c->wbuf_pagesize, GFP_KERNEL);
+- if (!c->wbuf)
+- return -ENOMEM;
+-
+- /* Initialize process for timed wbuf flush */
+- INIT_TQUEUE(&c->wbuf_task,(void*) jffs2_wbuf_process, (void *)c);
+- /* Initialize timer for timed wbuf flush */
+- init_timer(&c->wbuf_timer);
+- c->wbuf_timer.function = jffs2_wbuf_timeout;
+- c->wbuf_timer.data = (unsigned long) c;
+- }
+-
+- c->inocache_list = kmalloc(INOCACHE_HASHSIZE * sizeof(struct jffs2_inode_cache *), GFP_KERNEL);
+- if (!c->inocache_list) {
+- ret = -ENOMEM;
+- goto out_wbuf;
+- }
+- memset(c->inocache_list, 0, INOCACHE_HASHSIZE * sizeof(struct jffs2_inode_cache *));
+-
+- if ((ret = jffs2_do_mount_fs(c)))
+- goto out_inohash;
+-
+- ret = -EINVAL;
+-
+- D1(printk(KERN_DEBUG "jffs2_do_fill_super(): Getting root inode\n"));
+- root_i = iget(sb, 1);
+- if (is_bad_inode(root_i)) {
+- D1(printk(KERN_WARNING "get root inode failed\n"));
+- goto out_nodes;
+- }
+-
+- D1(printk(KERN_DEBUG "jffs2_do_fill_super(): d_alloc_root()\n"));
+- sb->s_root = d_alloc_root(root_i);
+- if (!sb->s_root)
+- goto out_root_i;
+-
+-#if LINUX_VERSION_CODE >= 0x20403
+- sb->s_maxbytes = 0xFFFFFFFF;
+-#endif
+- sb->s_blocksize = PAGE_CACHE_SIZE;
+- sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
+- sb->s_magic = JFFS2_SUPER_MAGIC;
+- if (!(sb->s_flags & MS_RDONLY))
+- jffs2_start_garbage_collect_thread(c);
+- return 0;
+-
+- out_root_i:
+- iput(root_i);
+- out_nodes:
+- jffs2_free_ino_caches(c);
+- jffs2_free_raw_node_refs(c);
+- kfree(c->blocks);
+- out_inohash:
+- kfree(c->inocache_list);
+- out_wbuf:
+- if (c->wbuf)
+- kfree(c->wbuf);
+- return ret;
+-}
+diff -Nur linux/fs/jffs2/gc.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/gc.c
+--- linux/fs/jffs2/gc.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/gc.c 2003-06-23 01:47:04.000000000 +0700
+@@ -1,224 +1,88 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: gc.c,v 1.84 2002/09/06 16:46:29 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
+ *
+- * ChangeLog:
+- * 03-Dec-2002 Lineo Japan, Inc. add LockPage
+- * 30-Nov-2002 Lineo Japan, Inc. fix deadlock between lock_page and f->sem
+- * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode
+- * 25-Nov-2002 Lineo Japan, Inc. remove warning message when there is
+- * no gcblock
+- * 23-Nov-2002 Lineo Japan, Inc. correct JFFS2_RESERVED_BLOCKS_GCMERGE
+- * condition expression in connection with NR_AVAIL_BLOCKS()
+- * take max dirty size from c->dirty_list
+- * return -ENOSPC when find_gc_block
+- * returns NULL
+- * don't take gcblock from clean_list
+- * when NR_AVAIL_BLOCKS < JFFS2_RESERVED_BLOCKS_CLEAN
+- * 18-Nov-2002 Lineo Japan, Inc. add dynamic construction of fragtree
+- * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
+ *
+- * ChangeLog:
+- * 05-Dec-2002 SHARP adjust gcblock selection
+- * 03-Dec-2002 Lineo Japan, Inc. add LockPage
+- * 30-Nov-2002 Lineo Japan, Inc. fix deadlock between lock_page and f->sem
+- * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode
+- * 25-Nov-2002 Lineo Japan, Inc. remove warning message when there is
+- * no gcblock
+- * 24-Nov-2002 SHARP add erasing_dirty_size
+- * 23-Nov-2002 Lineo Japan, Inc. correct JFFS2_RESERVED_BLOCKS_GCMERGE
+- * condition expression in connection with NR_AVAIL_BLOCKS()
+- * take max dirty size from c->dirty_list
+- * return -ENOSPC when find_gc_block
+- * returns NULL
+- * don't take gcblock from clean_list
+- * when NR_AVAIL_BLOCKS < JFFS2_RESERVED_BLOCKS_CLEAN
+- * 18-Nov-2002 Lineo Japan, Inc. add dynamic construction of fragtree
+- * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: gc.c,v 1.52.2.4 2002/05/15 12:51:23 dwmw2 Exp $
+ *
+ */
+
+ #include <linux/kernel.h>
+ #include <linux/mtd/mtd.h>
+ #include <linux/slab.h>
++#include <linux/jffs2.h>
++#include <linux/sched.h>
+ #include <linux/interrupt.h>
+ #include <linux/pagemap.h>
+-#include "crc32.h"
+-#include <linux/compiler.h>
+ #include "nodelist.h"
++#include "crc32.h"
+
+ static int jffs2_garbage_collect_metadata(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
+- struct jffs2_inode_info *f, struct jffs2_full_dnode *fd);
++ struct inode *inode, struct jffs2_full_dnode *fd);
+ static int jffs2_garbage_collect_dirent(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
+- struct jffs2_inode_info *f, struct jffs2_full_dirent *fd);
++ struct inode *inode, struct jffs2_full_dirent *fd);
+ static int jffs2_garbage_collect_deletion_dirent(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
+- struct jffs2_inode_info *f, struct jffs2_full_dirent *fd);
++ struct inode *inode, struct jffs2_full_dirent *fd);
+ static int jffs2_garbage_collect_hole(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
+- struct jffs2_inode_info *f, struct jffs2_full_dnode *fn,
+- uint32_t start, uint32_t end);
++ struct inode *indeo, struct jffs2_full_dnode *fn,
++ __u32 start, __u32 end);
+ static int jffs2_garbage_collect_dnode(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
+- struct jffs2_inode_info *f, struct jffs2_full_dnode *fn,
+- uint32_t start, uint32_t end);
+-
+-static struct list_head *jffs2_find_effective_block(struct list_head *head, uint32_t desire_size, uint32_t *found_size)
+-{
+- struct list_head *this, *ret = NULL;
+- *found_size = 0;
+- list_for_each(this, head) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+- if (desire_size <= jeb->dirty_size) {
+- *found_size = jeb->dirty_size;
+- return this->prev;
+- }
+- if (*found_size < jeb->dirty_size) {
+- *found_size = jeb->dirty_size;
+- ret = this;
+- }
+- }
+- return ret ? ret->prev : NULL;
+-}
+-
+-static struct list_head *larger_dirty_block(struct jffs2_sb_info *c, struct list_head *head, int effective_only)
+-{
+- uint32_t effective_size, found_size;
+- uint32_t dirty_now, erasing_dirty_now, nonerasing_dirty_now;
+- struct list_head *ret = NULL;
+-
+- if(effective_only){
+- dirty_now = c->dirty_size;
+- erasing_dirty_now = c->erasing_dirty_size;
+- nonerasing_dirty_now = ((dirty_now >= erasing_dirty_now) ? (dirty_now - erasing_dirty_now) : 0);
+-
+- if(nonerasing_dirty_now >= GC_EFFECTIVE_TOTAL_DIRTY_SIZE_LL(c)){
+- effective_size = GC_EFFECTIVE_BLOCK_DIRTY_SIZE_LL;
+- }else
+- if(nonerasing_dirty_now >= GC_EFFECTIVE_TOTAL_DIRTY_SIZE_L(c)){
+- effective_size = GC_EFFECTIVE_BLOCK_DIRTY_SIZE_L;
+- }else
+- if(nonerasing_dirty_now >= GC_EFFECTIVE_TOTAL_DIRTY_SIZE(c)){
+- effective_size = GC_EFFECTIVE_BLOCK_DIRTY_SIZE;
+- }else{
+- return NULL;
+- }
+-
+- ret = jffs2_find_effective_block(head, effective_size, &found_size);
+- if(found_size < GC_EFFECTIVE_BLOCK_DIRTY_SIZE){
+- return NULL;
+- }
+- }else{
+- ret = jffs2_find_effective_block(head, GC_EFFECTIVE_BLOCK_DIRTY_SIZE, &found_size);
+- }
+-
+- return ret;
+-}
+-
+-struct list_head *jffs2_get_dirty_block(struct list_head *head)
+-{
+- struct list_head *this;
+- list_for_each(this, head) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+- if (ISDIRTY(jeb->dirty_size)) {
+- return this->prev;
+- }
+- }
+- return NULL;
+-}
++ struct inode *inode, struct jffs2_full_dnode *fn,
++ __u32 start, __u32 end);
+
+ /* Called with erase_completion_lock held */
+-static struct jffs2_eraseblock *jffs2_find_gc_block(struct jffs2_sb_info *c, int effective_only)
++static struct jffs2_eraseblock *jffs2_find_gc_block(struct jffs2_sb_info *c)
+ {
+ struct jffs2_eraseblock *ret;
+ struct list_head *nextlist = NULL;
+- int n = jiffies % 128;
+- int reserved_blocks = JFFS2_RESERVED_BLOCKS_CLEAN;
+
+ /* Pick an eraseblock to garbage collect next. This is where we'll
+ put the clever wear-levelling algorithms. Eventually. */
+- /* We possibly want to favour the dirtier blocks more when the
+- number of free blocks is low. */
+-#ifdef CONFIG_JFFS2_NODEMERGE
+- if (nextlist == NULL && !list_empty(&c->nodemerge_list) &&
+- NR_AVAIL_BLOCKS(c) >= reserved_blocks) {
+- nextlist = &c->nodemerge_list;
+- c->flags |= JFFS2_SB_FLAG_GCING_A_BLOCK;
+- }
+-#ifdef CONFIG_ARCH_SHARP_SL
+- if (nextlist == NULL && !list_empty(&c->very_dirty_list)) {
+- nextlist = &c->very_dirty_list;
+- c->flags |= JFFS2_SB_FLAG_GCING_A_BLOCK;
+- }
+-#endif
+- if (nextlist == NULL && !list_empty(&c->nodemerge_list)) {
+- if(NR_AVAIL_BLOCKS(c) >= reserved_blocks) {
+- nextlist = &c->nodemerge_list;
+- }else{
+- nextlist = jffs2_get_dirty_block(&c->nodemerge_list);
+- }
+- if(nextlist != NULL){
+- c->flags |= JFFS2_SB_FLAG_GCING_A_BLOCK;
+- }
+- }
+-#endif
+- if (nextlist == NULL && !list_empty(&c->bad_used_list) && c->nr_free_blocks > JFFS2_RESERVED_BLOCKS_GCBAD) {
++ if (!list_empty(&c->bad_used_list) && c->nr_free_blocks > JFFS2_RESERVED_BLOCKS_GCBAD) {
+ D1(printk(KERN_DEBUG "Picking block from bad_used_list to GC next\n"));
+ nextlist = &c->bad_used_list;
+- }
+- if (nextlist == NULL && n < 50 && !list_empty(&c->erasable_list)) {
+- /* Note that most of them will have gone directly to be erased.
+- So don't favour the erasable_list _too_ much. */
+- D1(printk(KERN_DEBUG "Picking block from erasable_list to GC next\n"));
+- nextlist = &c->erasable_list;
+- }
+-#if !defined(CONFIG_JFFS2_NODEMERGE) || !defined(CONFIG_ARCH_SHARP_SL)
+- if (nextlist == NULL && n < 110 && !list_empty(&c->very_dirty_list)) {
+- /* Most of the time, pick one off the very_dirty list */
+- D1(printk(KERN_DEBUG "Picking block from very_dirty_list to GC next\n"));
+- nextlist = &c->very_dirty_list;
+- }
+-#endif
+- if (nextlist == NULL && n < 126 && !list_empty(&c->dirty_list)) {
++ } else if (jiffies % 100 && !list_empty(&c->dirty_list)) {
++ /* Most of the time, pick one off the dirty list */
+ D1(printk(KERN_DEBUG "Picking block from dirty_list to GC next\n"));
+- nextlist = larger_dirty_block(c, &c->dirty_list, effective_only);
+- }
+- if (!effective_only && nextlist == NULL &&
+- NR_AVAIL_BLOCKS(c) >= reserved_blocks && !list_empty(&c->clean_list)) {
++ nextlist = &c->dirty_list;
++ } else if (!list_empty(&c->clean_list)) {
+ D1(printk(KERN_DEBUG "Picking block from clean_list to GC next\n"));
+ nextlist = &c->clean_list;
+- }
+- if (nextlist == NULL && !list_empty(&c->dirty_list)) {
++ } else if (!list_empty(&c->dirty_list)) {
+ D1(printk(KERN_DEBUG "Picking block from dirty_list to GC next (clean_list was empty)\n"));
+- nextlist = larger_dirty_block(c, &c->dirty_list, effective_only);
+- }
+- if (nextlist == NULL && !list_empty(&c->very_dirty_list)) {
+- D1(printk(KERN_DEBUG "Picking block from very_dirty_list to GC next (clean_list and dirty_list were empty)\n"));
+- nextlist = &c->very_dirty_list;
+- }
+- if (nextlist == NULL && !list_empty(&c->erasable_list)) {
+- D1(printk(KERN_DEBUG "Picking block from erasable_list to GC next (clean_list and {very_,}dirty_list were empty)\n"));
+- nextlist = &c->erasable_list;
+- }
+-#ifdef CONFIG_JFFS2_NODEMERGE
+- if (nextlist == NULL && !list_empty(&c->nodemerge_list)) {
+- if(NR_AVAIL_BLOCKS(c) >= reserved_blocks) {
+- nextlist = &c->nodemerge_list;
+- }else{
+- nextlist = jffs2_get_dirty_block(&c->nodemerge_list);
+- }
+- if(nextlist != NULL){
+- c->flags |= JFFS2_SB_FLAG_GCING_A_BLOCK;
+- }
+- }
+-#endif
+- if (nextlist == NULL) {
+- /* Eep. All were empty */
+-// printk(KERN_NOTICE "jffs2: No clean, dirty _or_ erasable blocks to GC from! Where are they all?\n");
++
++ nextlist = &c->dirty_list;
++ } else {
++ /* Eep. Both were empty */
++ printk(KERN_NOTICE "jffs2: No clean _or_ dirty blocks to GC from! Where are they all?\n");
+ return NULL;
+ }
+
+@@ -230,45 +94,53 @@
+ printk(KERN_WARNING "Eep. ret->gc_node for block at 0x%08x is NULL\n", ret->offset);
+ BUG();
+ }
+-
+- /* Have we accidentally picked a clean block with wasted space ? */
+- if (ret->wasted_size) {
+- D1(printk(KERN_DEBUG "Converting wasted_size %08x to dirty_size\n", ret->wasted_size));
+- ret->dirty_size += ret->wasted_size;
+- c->wasted_size -= ret->wasted_size;
+- c->dirty_size += ret->wasted_size;
+- ret->wasted_size = 0;
+- }
+-
+- D1(jffs2_dump_block_lists(c));
+ return ret;
+ }
+
+-static inline int jffs2_do_garbage_collect_pass(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb)
++/* jffs2_garbage_collect_pass
++ * Make a single attempt to progress GC. Move one node, and possibly
++ * start erasing one eraseblock.
++ */
++int jffs2_garbage_collect_pass(struct jffs2_sb_info *c)
+ {
++ struct jffs2_eraseblock *jeb;
+ struct jffs2_inode_info *f;
+ struct jffs2_raw_node_ref *raw;
+ struct jffs2_node_frag *frag;
+ struct jffs2_full_dnode *fn = NULL;
+ struct jffs2_full_dirent *fd;
+- uint32_t start = 0, end = 0, nrfrags = 0;
+- uint32_t inum;
++ __u32 start = 0, end = 0, nrfrags = 0;
++ __u32 inum;
+ struct inode *inode;
+ int ret = 0;
+
+- D1(printk(KERN_DEBUG "GC from block %08x, used_size %08x, dirty_size %08x, free_size %08x\n", jeb->offset, jeb->used_size, jeb->dirty_size, jeb->free_size));
+- D1(if (c->nextblock)
+- printk(KERN_DEBUG "Nextblock at %08x, used_size %08x, dirty_size %08x, wasted_size %08x, free_size %08x\n", c->nextblock->offset, c->nextblock->used_size, c->nextblock->dirty_size, c->nextblock->wasted_size, c->nextblock->free_size));
++ if (down_interruptible(&c->alloc_sem))
++ return -EINTR;
+
+- if (!jeb->used_size) {
++ spin_lock_bh(&c->erase_completion_lock);
++
++ /* First, work out which block we're garbage-collecting */
++ jeb = c->gcblock;
++
++ if (!jeb)
++ jeb = jffs2_find_gc_block(c);
++
++ if (!jeb) {
++ printk(KERN_NOTICE "jffs2: Couldn't find erase block to garbage collect!\n");
++ spin_unlock_bh(&c->erase_completion_lock);
+ up(&c->alloc_sem);
+- goto eraseit;
++ return -EIO;
+ }
+
++ D1(printk(KERN_DEBUG "garbage collect from block at phys 0x%08x\n", jeb->offset));
++
++ if (!jeb->used_size)
++ goto eraseit;
++
+ raw = jeb->gc_node;
+
+- while(ref_obsolete(raw)) {
+- D1(printk(KERN_DEBUG "Node at 0x%08x is obsolete... skipping\n", ref_offset(raw)));
++ while(raw->flash_offset & 1) {
++ D1(printk(KERN_DEBUG "Node at 0x%08x is obsolete... skipping\n", raw->flash_offset &~3));
+ jeb->gc_node = raw = raw->next_phys;
+ if (!raw) {
+ printk(KERN_WARNING "eep. End of raw list while still supposedly nodes to GC\n");
+@@ -279,14 +151,11 @@
+ BUG();
+ }
+ }
+- D1(printk(KERN_DEBUG "Going to garbage collect node at 0x%08x\n", ref_offset(raw)));
++ D1(printk(KERN_DEBUG "Going to garbage collect node at 0x%08x\n", raw->flash_offset &~3));
+ if (!raw->next_in_ino) {
+ /* Inode-less node. Clean marker, snapshot or something like that */
+- /* FIXME: If it's something that needs to be copied, including something
+- we don't grok that has JFFS2_NODETYPE_RWCOMPAT_COPY, we should do so */
+ spin_unlock_bh(&c->erase_completion_lock);
+ jffs2_mark_node_obsolete(c, raw);
+- up(&c->alloc_sem);
+ goto eraseit_lock;
+ }
+
+@@ -295,24 +164,23 @@
+
+ spin_unlock_bh(&c->erase_completion_lock);
+
+- D1(printk(KERN_DEBUG "jffs2_garbage_collect_pass collecting from block @0x%08x. Node @0x%08x, ino #%u\n", jeb->offset, ref_offset(raw), inum));
++ D1(printk(KERN_DEBUG "jffs2_garbage_collect_pass collecting from block @0x%08x. Node @0x%08x, ino #%u\n", jeb->offset, raw->flash_offset&~3, inum));
+
+ inode = iget(OFNI_BS_2SFFJ(c), inum);
+ if (is_bad_inode(inode)) {
+ printk(KERN_NOTICE "Eep. read_inode() failed for ino #%u\n", inum);
+ /* NB. This will happen again. We need to do something appropriate here. */
+- up(&c->alloc_sem);
+ iput(inode);
++ up(&c->alloc_sem);
+ return -EIO;
+ }
+
+ f = JFFS2_INODE_INFO(inode);
+ down(&f->sem);
+-
+ /* Now we have the lock for this inode. Check that it's still the one at the head
+ of the list. */
+
+- if (ref_obsolete(raw)) {
++ if (raw->flash_offset & 1) {
+ D1(printk(KERN_DEBUG "node to be GC'd was obsoleted in the meantime.\n"));
+ /* They'll call again */
+ goto upnout;
+@@ -320,35 +188,14 @@
+ /* OK. Looks safe. And nobody can get us now because we have the semaphore. Move the block */
+ if (f->metadata && f->metadata->raw == raw) {
+ fn = f->metadata;
+- ret = jffs2_garbage_collect_metadata(c, jeb, f, fn);
+- goto upnout;
+- }
+-
+- ret = jffs2_construct_fragtree_nolock_if_missing(c, f);
+- if (ret) {
+- printk(KERN_NOTICE "construct_fragtree failed for ino #%u\n", inum);
++ ret = jffs2_garbage_collect_metadata(c, jeb, inode, fn);
+ goto upnout;
+ }
+-
+- /* FIXME. Read node and do lookup? */
+- for (frag = frag_first(&f->fragtree); frag; frag = frag_next(frag)) {
++
++ for (frag = f->fraglist; frag; frag = frag->next) {
+ if (frag->node && frag->node->raw == raw) {
+ fn = frag->node;
+ end = frag->ofs + frag->size;
+-#if 0 /* Temporary debugging sanity checks, till we're ready to _trust_ the REF_PRISTINE flag stuff */
+- if (!nrfrags && ref_flags(fn->raw) == REF_PRISTINE) {
+- if (fn->frags > 1)
+- printk(KERN_WARNING "REF_PRISTINE node at 0x%08x had %d frags. Tell dwmw2\n", ref_offset(raw), fn->frags);
+-
+- if (frag->ofs & (PAGE_CACHE_SIZE-1) && frag_prev(frag) && frag_prev(frag)->node)
+- printk(KERN_WARNING "REF_PRISTINE node at 0x%08x had a previous non-hole frag in the same page. Tell dwmw2\n",
+- ref_offset(raw));
+-
+- if ((frag->ofs+frag->size) & (PAGE_CACHE_SIZE-1) && frag_next(frag) && frag_next(frag)->node)
+- printk(KERN_WARNING "REF_PRISTINE node at 0x%08x (%08x-%08x) had a following non-hole frag in the same page. Tell dwmw2\n",
+- ref_offset(raw), frag->ofs, frag->ofs+frag->size);
+- }
+-#endif
+ if (!nrfrags++)
+ start = frag->ofs;
+ if (nrfrags == frag->node->frags)
+@@ -359,10 +206,10 @@
+ /* We found a datanode. Do the GC */
+ if((start >> PAGE_CACHE_SHIFT) < ((end-1) >> PAGE_CACHE_SHIFT)) {
+ /* It crosses a page boundary. Therefore, it must be a hole. */
+- ret = jffs2_garbage_collect_hole(c, jeb, f, fn, start, end);
++ ret = jffs2_garbage_collect_hole(c, jeb, inode, fn, start, end);
+ } else {
+ /* It could still be a hole. But we GC the page this way anyway */
+- ret = jffs2_garbage_collect_dnode(c, jeb, f, fn, start, end);
++ ret = jffs2_garbage_collect_dnode(c, jeb, inode, fn, start, end);
+ }
+ goto upnout;
+ }
+@@ -374,13 +221,12 @@
+ }
+
+ if (fd && fd->ino) {
+- ret = jffs2_garbage_collect_dirent(c, jeb, f, fd);
++ ret = jffs2_garbage_collect_dirent(c, jeb, inode, fd);
+ } else if (fd) {
+- ret = jffs2_garbage_collect_deletion_dirent(c, jeb, f, fd);
++ ret = jffs2_garbage_collect_deletion_dirent(c, jeb, inode, fd);
+ } else {
+- printk(KERN_WARNING "Raw node at 0x%08x wasn't in node lists for ino #%u\n",
+- ref_offset(raw), f->inocache->ino);
+- if (ref_obsolete(raw)) {
++ printk(KERN_WARNING "Raw node at 0x%08x wasn't in node lists for ino #%lu\n", raw->flash_offset&~3, inode->i_ino);
++ if (raw->flash_offset & 1) {
+ printk(KERN_WARNING "But it's obsolete so we don't mind too much\n");
+ } else {
+ ret = -EIO;
+@@ -388,7 +234,6 @@
+ }
+ upnout:
+ up(&f->sem);
+- up(&c->alloc_sem);
+ iput(inode);
+
+ eraseit_lock:
+@@ -400,71 +245,35 @@
+ D1(printk(KERN_DEBUG "Block at 0x%08x completely obsoleted by GC. Moving to erase_pending_list\n", c->gcblock->offset));
+ /* We're GC'ing an empty block? */
+ list_add_tail(&c->gcblock->list, &c->erase_pending_list);
+- c->erasing_dirty_size += c->gcblock->dirty_size;
+ c->gcblock = NULL;
+- c->flags &= ~JFFS2_SB_FLAG_GCING_A_BLOCK;
+ c->nr_erasing_blocks++;
+ jffs2_erase_pending_trigger(c);
+ }
+ spin_unlock_bh(&c->erase_completion_lock);
++ up(&c->alloc_sem);
+
+ return ret;
+ }
+
+-/* jffs2_garbage_collect_pass
+- * Make a single attempt to progress GC. Move one node, and possibly
+- * start erasing one eraseblock.
+- */
+-int jffs2_garbage_collect_pass(struct jffs2_sb_info *c, jffs2_gcmode_t gcmode)
+-{
+- struct jffs2_eraseblock *jeb;
+- int ret;
+-
+- if (down_interruptible(&c->alloc_sem))
+- return -EINTR;
+-
+- spin_lock_bh(&c->erase_completion_lock);
+-
+- /* First, work out which block we're garbage-collecting */
+- jeb = c->gcblock;
+-
+- if (!jeb)
+- jeb = jffs2_find_gc_block(c, gcmode == GCMODE_EFFECTIVE);
+-
+- if (!jeb) {
+-// printk(KERN_NOTICE "jffs2: Couldn't find erase block to garbage collect!\n");
+- spin_unlock_bh(&c->erase_completion_lock);
+- up(&c->alloc_sem);
+- return (gcmode == GCMODE_EFFECTIVE) ? 0 : -ENOSPC;
+- }
+-
+- ret = jffs2_do_garbage_collect_pass(c, jeb);
+- if (gcmode == GCMODE_EFFECTIVE)
+- return (ret == 0) ? 1 : ret;
+- else
+- return ret;
+-}
+-
+ static int jffs2_garbage_collect_metadata(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
+- struct jffs2_inode_info *f, struct jffs2_full_dnode *fn)
++ struct inode *inode, struct jffs2_full_dnode *fn)
+ {
++ struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+ struct jffs2_full_dnode *new_fn;
+ struct jffs2_raw_inode ri;
+ unsigned short dev;
+ char *mdata = NULL, mdatalen = 0;
+- uint32_t alloclen, phys_ofs;
++ __u32 alloclen, phys_ofs;
+ int ret;
+
+- if (S_ISBLK(JFFS2_F_I_MODE(f)) ||
+- S_ISCHR(JFFS2_F_I_MODE(f)) ) {
++ if (S_ISBLK(inode->i_mode) || S_ISCHR(inode->i_mode)) {
+ /* For these, we don't actually need to read the old node */
+- /* FIXME: for minor or major > 255. */
+- dev = ((JFFS2_F_I_RDEV_MAJ(f) << 8) |
+- JFFS2_F_I_RDEV_MIN(f));
++ dev = (MAJOR(to_kdev_t(inode->i_rdev)) << 8) |
++ MINOR(to_kdev_t(inode->i_rdev));
+ mdata = (char *)&dev;
+ mdatalen = sizeof(dev);
+ D1(printk(KERN_DEBUG "jffs2_garbage_collect_metadata(): Writing %d bytes of kdev_t\n", mdatalen));
+- } else if (S_ISLNK(JFFS2_F_I_MODE(f))) {
++ } else if (S_ISLNK(inode->i_mode)) {
+ mdatalen = fn->size;
+ mdata = kmalloc(fn->size, GFP_KERNEL);
+ if (!mdata) {
+@@ -489,28 +298,28 @@
+ }
+
+ memset(&ri, 0, sizeof(ri));
+- ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+- ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
+- ri.totlen = cpu_to_je32(sizeof(ri) + mdatalen);
+- ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4));
+-
+- ri.ino = cpu_to_je32(f->inocache->ino);
+- ri.version = cpu_to_je32(++f->highest_version);
+- ri.mode = cpu_to_je32(JFFS2_F_I_MODE(f));
+- ri.uid = cpu_to_je16(JFFS2_F_I_UID(f));
+- ri.gid = cpu_to_je16(JFFS2_F_I_GID(f));
+- ri.isize = cpu_to_je32(JFFS2_F_I_SIZE(f));
+- ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f));
+- ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f));
+- ri.mtime = cpu_to_je32(JFFS2_F_I_MTIME(f));
+- ri.offset = cpu_to_je32(0);
+- ri.csize = cpu_to_je32(mdatalen);
+- ri.dsize = cpu_to_je32(mdatalen);
++ ri.magic = JFFS2_MAGIC_BITMASK;
++ ri.nodetype = JFFS2_NODETYPE_INODE;
++ ri.totlen = sizeof(ri) + mdatalen;
++ ri.hdr_crc = crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4);
++
++ ri.ino = inode->i_ino;
++ ri.version = ++f->highest_version;
++ ri.mode = inode->i_mode;
++ ri.uid = inode->i_uid;
++ ri.gid = inode->i_gid;
++ ri.isize = inode->i_size;
++ ri.atime = inode->i_atime;
++ ri.ctime = inode->i_ctime;
++ ri.mtime = inode->i_mtime;
++ ri.offset = 0;
++ ri.csize = mdatalen;
++ ri.dsize = mdatalen;
+ ri.compr = JFFS2_COMPR_NONE;
+- ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8));
+- ri.data_crc = cpu_to_je32(crc32(0, mdata, mdatalen));
++ ri.node_crc = crc32(0, &ri, sizeof(ri)-8);
++ ri.data_crc = crc32(0, mdata, mdatalen);
+
+- new_fn = jffs2_write_dnode(c, f, &ri, mdata, mdatalen, phys_ofs, NULL);
++ new_fn = jffs2_write_dnode(inode, &ri, mdata, mdatalen, phys_ofs, NULL);
+
+ if (IS_ERR(new_fn)) {
+ printk(KERN_WARNING "Error writing new dnode: %ld\n", PTR_ERR(new_fn));
+@@ -521,32 +330,33 @@
+ jffs2_free_full_dnode(fn);
+ f->metadata = new_fn;
+ out:
+- if (S_ISLNK(JFFS2_F_I_MODE(f)))
++ if (S_ISLNK(inode->i_mode))
+ kfree(mdata);
+ return ret;
+ }
+
+ static int jffs2_garbage_collect_dirent(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
+- struct jffs2_inode_info *f, struct jffs2_full_dirent *fd)
++ struct inode *inode, struct jffs2_full_dirent *fd)
+ {
++ struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+ struct jffs2_full_dirent *new_fd;
+ struct jffs2_raw_dirent rd;
+- uint32_t alloclen, phys_ofs;
++ __u32 alloclen, phys_ofs;
+ int ret;
+
+- rd.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+- rd.nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
++ rd.magic = JFFS2_MAGIC_BITMASK;
++ rd.nodetype = JFFS2_NODETYPE_DIRENT;
+ rd.nsize = strlen(fd->name);
+- rd.totlen = cpu_to_je32(sizeof(rd) + rd.nsize);
+- rd.hdr_crc = cpu_to_je32(crc32(0, &rd, sizeof(struct jffs2_unknown_node)-4));
++ rd.totlen = sizeof(rd) + rd.nsize;
++ rd.hdr_crc = crc32(0, &rd, sizeof(struct jffs2_unknown_node)-4);
+
+- rd.pino = cpu_to_je32(f->inocache->ino);
+- rd.version = cpu_to_je32(++f->highest_version);
+- rd.ino = cpu_to_je32(fd->ino);
+- rd.mctime = cpu_to_je32(max(JFFS2_F_I_MTIME(f), JFFS2_F_I_CTIME(f)));
++ rd.pino = inode->i_ino;
++ rd.version = ++f->highest_version;
++ rd.ino = fd->ino;
++ rd.mctime = max(inode->i_mtime, inode->i_ctime);
+ rd.type = fd->type;
+- rd.node_crc = cpu_to_je32(crc32(0, &rd, sizeof(rd)-8));
+- rd.name_crc = cpu_to_je32(crc32(0, fd->name, rd.nsize));
++ rd.node_crc = crc32(0, &rd, sizeof(rd)-8);
++ rd.name_crc = crc32(0, fd->name, rd.nsize);
+
+ ret = jffs2_reserve_space_gc(c, sizeof(rd)+rd.nsize, &phys_ofs, &alloclen);
+ if (ret) {
+@@ -554,7 +364,7 @@
+ sizeof(rd)+rd.nsize, ret);
+ return ret;
+ }
+- new_fd = jffs2_write_dirent(c, f, &rd, fd->name, rd.nsize, phys_ofs, NULL);
++ new_fd = jffs2_write_dirent(inode, &rd, fd->name, rd.nsize, phys_ofs, NULL);
+
+ if (IS_ERR(new_fd)) {
+ printk(KERN_WARNING "jffs2_write_dirent in garbage_collect_dirent failed: %ld\n", PTR_ERR(new_fd));
+@@ -565,119 +375,19 @@
+ }
+
+ static int jffs2_garbage_collect_deletion_dirent(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
+- struct jffs2_inode_info *f, struct jffs2_full_dirent *fd)
++ struct inode *inode, struct jffs2_full_dirent *fd)
+ {
++ struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+ struct jffs2_full_dirent **fdp = &f->dents;
+ int found = 0;
+
+- /* On a medium where we can't actually mark nodes obsolete
+- pernamently, such as NAND flash, we need to work out
+- whether this deletion dirent is still needed to actively
+- delete a 'real' dirent with the same name that's still
+- somewhere else on the flash. */
+- if (!jffs2_can_mark_obsolete(c)) {
+- struct jffs2_raw_dirent rd;
+- struct jffs2_raw_node_ref *raw;
+- int ret;
+- size_t retlen;
+- int name_len = strlen(fd->name);
+- uint32_t name_crc = crc32(0, fd->name, name_len);
+- char *namebuf = NULL;
+-
+- /* Prevent the erase code from nicking the obsolete node refs while
+- we're looking at them. I really don't like this extra lock but
+- can't see any alternative. Suggestions on a postcard to... */
+- down(&c->erase_free_sem);
+-
+- for (raw = f->inocache->nodes; raw != (void *)f->inocache; raw = raw->next_in_ino) {
+- /* We only care about obsolete ones */
+- if (!(ref_obsolete(raw)))
+- continue;
+-
+- /* Doesn't matter if there's one in the same erase block. We're going to
+- delete it too at the same time. */
+- if ((raw->flash_offset & ~(c->sector_size-1)) ==
+- (fd->raw->flash_offset & ~(c->sector_size-1)))
+- continue;
+-
+- /* This is an obsolete node belonging to the same directory */
+- ret = jffs2_flash_read(c, ref_offset(raw), sizeof(struct jffs2_unknown_node), &retlen, (char *)&rd);
+- if (ret) {
+- printk(KERN_WARNING "jffs2_g_c_deletion_dirent(): Read error (%d) reading header from obsolete node at %08x\n", ret, ref_offset(raw));
+- /* If we can't read it, we don't need to continue to obsolete it. Continue */
+- continue;
+- }
+- if (retlen != sizeof(struct jffs2_unknown_node)) {
+- printk(KERN_WARNING "jffs2_g_c_deletion_dirent(): Short read (%d not %d) reading header from obsolete node at %08x\n",
+- retlen, sizeof(struct jffs2_unknown_node), ref_offset(raw));
+- continue;
+- }
+- if (je16_to_cpu(rd.nodetype) != JFFS2_NODETYPE_DIRENT ||
+- PAD(je32_to_cpu(rd.totlen)) != PAD(sizeof(rd) + name_len))
+- continue;
+-
+- /* OK, it's a dirent node, it's the right length. We have to take a
+- closer look at it... */
+- ret = jffs2_flash_read(c, ref_offset(raw), sizeof(rd), &retlen, (char *)&rd);
+- if (ret) {
+- printk(KERN_WARNING "jffs2_g_c_deletion_dirent(): Read error (%d) reading from obsolete node at %08x\n", ret, ref_offset(raw));
+- /* If we can't read it, we don't need to continune to obsolete it. Continue */
+- continue;
+- }
+- if (retlen != sizeof(rd)) {
+- printk(KERN_WARNING "jffs2_g_c_deletion_dirent(): Short read (%d not %d) reading from obsolete node at %08x\n",
+- retlen, sizeof(rd), ref_offset(raw));
+- continue;
+- }
+-
+- /* If the name CRC doesn't match, skip */
+- if (je32_to_cpu(rd.name_crc) != name_crc)
+- continue;
+- /* If the name length doesn't match, or it's another deletion dirent, skip */
+- if (rd.nsize != name_len || !je32_to_cpu(rd.ino))
+- continue;
+-
+- /* OK, check the actual name now */
+- if (!namebuf) {
+- namebuf = kmalloc(name_len + 1, GFP_KERNEL);
+- if (!namebuf) {
+- up(&c->erase_free_sem);
+- return -ENOMEM;
+- }
+- }
+- /* We read the extra byte before it so it's a word-aligned read */
+- ret = jffs2_flash_read(c, (ref_offset(raw))+sizeof(rd)-1, name_len+1, &retlen, namebuf);
+- if (ret) {
+- printk(KERN_WARNING "jffs2_g_c_deletion_dirent(): Read error (%d) reading name from obsolete node at %08x\n", ret, ref_offset(raw));
+- /* If we can't read it, we don't need to continune to obsolete it. Continue */
+- continue;
+- }
+- if (retlen != name_len+1) {
+- printk(KERN_WARNING "jffs2_g_c_deletion_dirent(): Short read (%d not %d) reading name from obsolete node at %08x\n",
+- retlen, name_len+1, ref_offset(raw));
+- continue;
+- }
+- if (memcmp(namebuf+1, fd->name, name_len))
+- continue;
+-
+- /* OK. The name really does match. There really is still an older node on
+- the flash which our deletion dirent obsoletes. So we have to write out
+- a new deletion dirent to replace it */
+-
+- if (namebuf)
+- kfree(namebuf);
+-
+- up(&c->erase_free_sem);
+- return jffs2_garbage_collect_dirent(c, jeb, f, fd);
+- }
+-
+- up(&c->erase_free_sem);
+-
+- if (namebuf)
+- kfree(namebuf);
+- }
+-
+- /* No need for it any more. Just mark it obsolete and remove it from the list */
++ /* FIXME: When we run on NAND flash, we need to work out whether
++ this deletion dirent is still needed to actively delete a
++ 'real' dirent with the same name that's still somewhere else
++ on the flash. For now, we know that we've actually obliterated
++ all the older dirents when they became obsolete, so we didn't
++ really need to write the deletion to flash in the first place.
++ */
+ while (*fdp) {
+ if ((*fdp) == fd) {
+ found = 1;
+@@ -687,7 +397,7 @@
+ fdp = &(*fdp)->next;
+ }
+ if (!found) {
+- printk(KERN_WARNING "Deletion dirent \"%s\" not found in list for ino #%u\n", fd->name, f->inocache->ino);
++ printk(KERN_WARNING "Deletion dirent \"%s\" not found in list for ino #%lu\n", fd->name, inode->i_ino);
+ }
+ jffs2_mark_node_obsolete(c, fd->raw);
+ jffs2_free_full_dirent(fd);
+@@ -695,81 +405,79 @@
+ }
+
+ static int jffs2_garbage_collect_hole(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
+- struct jffs2_inode_info *f, struct jffs2_full_dnode *fn,
+- uint32_t start, uint32_t end)
++ struct inode *inode, struct jffs2_full_dnode *fn,
++ __u32 start, __u32 end)
+ {
++ struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+ struct jffs2_raw_inode ri;
+ struct jffs2_node_frag *frag;
+ struct jffs2_full_dnode *new_fn;
+- uint32_t alloclen, phys_ofs;
++ __u32 alloclen, phys_ofs;
+ int ret;
+
+- D1(printk(KERN_DEBUG "Writing replacement hole node for ino #%u from offset 0x%x to 0x%x\n",
+- f->inocache->ino, start, end));
++ D1(printk(KERN_DEBUG "Writing replacement hole node for ino #%lu from offset 0x%x to 0x%x\n",
++ inode->i_ino, start, end));
+
+ memset(&ri, 0, sizeof(ri));
+
+ if(fn->frags > 1) {
+ size_t readlen;
+- uint32_t crc;
++ __u32 crc;
+ /* It's partially obsoleted by a later write. So we have to
+ write it out again with the _same_ version as before */
+- ret = jffs2_flash_read(c, ref_offset(fn->raw), sizeof(ri), &readlen, (char *)&ri);
++ ret = c->mtd->read(c->mtd, fn->raw->flash_offset & ~3, sizeof(ri), &readlen, (char *)&ri);
+ if (readlen != sizeof(ri) || ret) {
+- printk(KERN_WARNING "Node read failed in jffs2_garbage_collect_hole. Ret %d, retlen %d. Data will be lost by writing new hole node\n", ret, readlen);
++ printk(KERN_WARNING "Node read failed in jffs2_garbage_collect_hole. Ret %d, retlen %d. Data will be lost by writing new hold node\n", ret, readlen);
+ goto fill;
+ }
+- if (je16_to_cpu(ri.nodetype) != JFFS2_NODETYPE_INODE) {
++ if (ri.nodetype != JFFS2_NODETYPE_INODE) {
+ printk(KERN_WARNING "jffs2_garbage_collect_hole: Node at 0x%08x had node type 0x%04x instead of JFFS2_NODETYPE_INODE(0x%04x)\n",
+- ref_offset(fn->raw),
+- je16_to_cpu(ri.nodetype), JFFS2_NODETYPE_INODE);
++ fn->raw->flash_offset & ~3, ri.nodetype, JFFS2_NODETYPE_INODE);
+ return -EIO;
+ }
+- if (je32_to_cpu(ri.totlen) != sizeof(ri)) {
++ if (ri.totlen != sizeof(ri)) {
+ printk(KERN_WARNING "jffs2_garbage_collect_hole: Node at 0x%08x had totlen 0x%x instead of expected 0x%x\n",
+- ref_offset(fn->raw),
+- je32_to_cpu(ri.totlen), sizeof(ri));
++ fn->raw->flash_offset & ~3, ri.totlen, sizeof(ri));
+ return -EIO;
+ }
+ crc = crc32(0, &ri, sizeof(ri)-8);
+- if (crc != je32_to_cpu(ri.node_crc)) {
++ if (crc != ri.node_crc) {
+ printk(KERN_WARNING "jffs2_garbage_collect_hole: Node at 0x%08x had CRC 0x%08x which doesn't match calculated CRC 0x%08x\n",
+- ref_offset(fn->raw),
+- je32_to_cpu(ri.node_crc), crc);
++ fn->raw->flash_offset & ~3, ri.node_crc, crc);
+ /* FIXME: We could possibly deal with this by writing new holes for each frag */
+- printk(KERN_WARNING "Data in the range 0x%08x to 0x%08x of inode #%u will be lost\n",
+- start, end, f->inocache->ino);
++ printk(KERN_WARNING "Data in the range 0x%08x to 0x%08x of inode #%lu will be lost\n",
++ start, end, inode->i_ino);
+ goto fill;
+ }
+ if (ri.compr != JFFS2_COMPR_ZERO) {
+- printk(KERN_WARNING "jffs2_garbage_collect_hole: Node 0x%08x wasn't a hole node!\n", ref_offset(fn->raw));
+- printk(KERN_WARNING "Data in the range 0x%08x to 0x%08x of inode #%u will be lost\n",
+- start, end, f->inocache->ino);
++ printk(KERN_WARNING "jffs2_garbage_collect_hole: Node 0x%08x wasn't a hole node!\n", fn->raw->flash_offset & ~3);
++ printk(KERN_WARNING "Data in the range 0x%08x to 0x%08x of inode #%lu will be lost\n",
++ start, end, inode->i_ino);
+ goto fill;
+ }
+ } else {
+ fill:
+- ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+- ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
+- ri.totlen = cpu_to_je32(sizeof(ri));
+- ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4));
+-
+- ri.ino = cpu_to_je32(f->inocache->ino);
+- ri.version = cpu_to_je32(++f->highest_version);
+- ri.offset = cpu_to_je32(start);
+- ri.dsize = cpu_to_je32(end - start);
+- ri.csize = cpu_to_je32(0);
++ ri.magic = JFFS2_MAGIC_BITMASK;
++ ri.nodetype = JFFS2_NODETYPE_INODE;
++ ri.totlen = sizeof(ri);
++ ri.hdr_crc = crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4);
++
++ ri.ino = inode->i_ino;
++ ri.version = ++f->highest_version;
++ ri.offset = start;
++ ri.dsize = end - start;
++ ri.csize = 0;
+ ri.compr = JFFS2_COMPR_ZERO;
+ }
+- ri.mode = cpu_to_je32(JFFS2_F_I_MODE(f));
+- ri.uid = cpu_to_je16(JFFS2_F_I_UID(f));
+- ri.gid = cpu_to_je16(JFFS2_F_I_GID(f));
+- ri.isize = cpu_to_je32(JFFS2_F_I_SIZE(f));
+- ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f));
+- ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f));
+- ri.mtime = cpu_to_je32(JFFS2_F_I_MTIME(f));
+- ri.data_crc = cpu_to_je32(0);
+- ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8));
++ ri.mode = inode->i_mode;
++ ri.uid = inode->i_uid;
++ ri.gid = inode->i_gid;
++ ri.isize = inode->i_size;
++ ri.atime = inode->i_atime;
++ ri.ctime = inode->i_ctime;
++ ri.mtime = inode->i_mtime;
++ ri.data_crc = 0;
++ ri.node_crc = crc32(0, &ri, sizeof(ri)-8);
+
+ ret = jffs2_reserve_space_gc(c, sizeof(ri), &phys_ofs, &alloclen);
+ if (ret) {
+@@ -777,13 +485,13 @@
+ sizeof(ri), ret);
+ return ret;
+ }
+- new_fn = jffs2_write_dnode(c, f, &ri, NULL, 0, phys_ofs, NULL);
++ new_fn = jffs2_write_dnode(inode, &ri, NULL, 0, phys_ofs, NULL);
+
+ if (IS_ERR(new_fn)) {
+ printk(KERN_WARNING "Error writing new hole node: %ld\n", PTR_ERR(new_fn));
+ return PTR_ERR(new_fn);
+ }
+- if (je32_to_cpu(ri.version) == f->highest_version) {
++ if (ri.version == f->highest_version) {
+ jffs2_add_full_dnode_to_inode(c, f, new_fn);
+ if (f->metadata) {
+ jffs2_mark_node_obsolete(c, f->metadata->raw);
+@@ -799,14 +507,12 @@
+ * number as before. (Except in case of error -- see 'goto fill;'
+ * above.)
+ */
+- D1(if(unlikely(fn->frags <= 1)) {
++ D1(if(fn->frags <= 1) {
+ printk(KERN_WARNING "jffs2_garbage_collect_hole: Replacing fn with %d frag(s) but new ver %d != highest_version %d of ino #%d\n",
+- fn->frags, je32_to_cpu(ri.version), f->highest_version,
+- je32_to_cpu(ri.ino));
++ fn->frags, ri.version, f->highest_version, ri.ino);
+ });
+
+- for (frag = jffs2_lookup_node_frag(&f->fragtree, fn->ofs);
+- frag; frag = frag_next(frag)) {
++ for (frag = f->fraglist; frag; frag = frag->next) {
+ if (frag->ofs > fn->size + fn->ofs)
+ break;
+ if (frag->node == fn) {
+@@ -831,26 +537,27 @@
+ }
+
+ static int jffs2_garbage_collect_dnode(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
+- struct jffs2_inode_info *f, struct jffs2_full_dnode *fn,
+- uint32_t start, uint32_t end)
++ struct inode *inode, struct jffs2_full_dnode *fn,
++ __u32 start, __u32 end)
+ {
++ struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+ struct jffs2_full_dnode *new_fn;
+ struct jffs2_raw_inode ri;
+- uint32_t alloclen, phys_ofs, offset, orig_end;
++ __u32 alloclen, phys_ofs, offset, orig_end;
+ int ret = 0;
+ unsigned char *comprbuf = NULL, *writebuf;
+ struct page *pg;
+ unsigned char *pg_ptr;
+- int reserved_blocks_root = capable(CAP_SYS_ADMIN) ? 0 : JFFS2_RESERVED_BLOCKS_ROOT;
+- /* FIXME: */ struct inode *inode = OFNI_EDONI_2SFFJ(f);
++
+
+ memset(&ri, 0, sizeof(ri));
+
+- D1(printk(KERN_DEBUG "Writing replacement dnode for ino #%u from offset 0x%x to 0x%x\n",
+- f->inocache->ino, start, end));
++ D1(printk(KERN_DEBUG "Writing replacement dnode for ino #%lu from offset 0x%x to 0x%x\n",
++ inode->i_ino, start, end));
+
+ orig_end = end;
+
++
+ /* If we're looking at the last node in the block we're
+ garbage-collecting, we allow ourselves to merge as if the
+ block was already erasing. We're likely to be GC'ing a
+@@ -862,11 +569,11 @@
+ the GC would churn and churn, and just leave dirty blocks in
+ it's wake.
+ */
+- if(NR_AVAIL_BLOCKS(c) > JFFS2_RESERVED_BLOCKS_GCMERGE + reserved_blocks_root - (fn->raw->next_phys?0:1)) {
++ if(c->nr_free_blocks + c->nr_erasing_blocks > JFFS2_RESERVED_BLOCKS_GCMERGE - (fn->raw->next_phys?0:1)) {
+ /* Shitloads of space */
+ /* FIXME: Integrate this properly with GC calculations */
+ start &= ~(PAGE_CACHE_SIZE-1);
+- end = min_t(uint32_t, start + PAGE_CACHE_SIZE, JFFS2_F_I_SIZE(f));
++ end = min_t(__u32, start + PAGE_CACHE_SIZE, inode->i_size);
+ D1(printk(KERN_DEBUG "Plenty of free space, so expanding to write from offset 0x%x to 0x%x\n",
+ start, end));
+ if (end < orig_end) {
+@@ -882,28 +589,19 @@
+ * page OK. We'll actually write it out again in commit_write, which is a little
+ * suboptimal, but at least we're correct.
+ */
+- pg = find_get_page(inode->i_mapping, start >> PAGE_CACHE_SHIFT);
+- if (pg) {
+- if (PageLocked(pg)) {
+- page_cache_release(pg);
+- return 0;
+- }
+- page_cache_release(pg);
+- }
+- pg = read_cache_page(inode->i_mapping, start >> PAGE_CACHE_SHIFT, (void *)jffs2_do_readpage_nolock, inode);
++ pg = read_cache_page(inode->i_mapping, start >> PAGE_CACHE_SHIFT, (void *)jffs2_do_readpage_unlock, inode);
+
+ if (IS_ERR(pg)) {
+ printk(KERN_WARNING "read_cache_page() returned error: %ld\n", PTR_ERR(pg));
+ return PTR_ERR(pg);
+ }
+- LockPage(pg);
+ pg_ptr = (char *)kmap(pg);
+ comprbuf = kmalloc(end - start, GFP_KERNEL);
+
+ offset = start;
+ while(offset < orig_end) {
+- uint32_t datalen;
+- uint32_t cdatalen;
++ __u32 datalen;
++ __u32 cdatalen;
+ char comprtype = JFFS2_COMPR_NONE;
+
+ ret = jffs2_reserve_space_gc(c, sizeof(ri) + JFFS2_MIN_DATA_LEN, &phys_ofs, &alloclen);
+@@ -926,28 +624,28 @@
+ } else {
+ datalen = cdatalen;
+ }
+- ri.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+- ri.nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
+- ri.totlen = cpu_to_je32(sizeof(ri) + cdatalen);
+- ri.hdr_crc = cpu_to_je32(crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4));
+-
+- ri.ino = cpu_to_je32(f->inocache->ino);
+- ri.version = cpu_to_je32(++f->highest_version);
+- ri.mode = cpu_to_je32(JFFS2_F_I_MODE(f));
+- ri.uid = cpu_to_je16(JFFS2_F_I_UID(f));
+- ri.gid = cpu_to_je16(JFFS2_F_I_GID(f));
+- ri.isize = cpu_to_je32(JFFS2_F_I_SIZE(f));
+- ri.atime = cpu_to_je32(JFFS2_F_I_ATIME(f));
+- ri.ctime = cpu_to_je32(JFFS2_F_I_CTIME(f));
+- ri.mtime = cpu_to_je32(JFFS2_F_I_MTIME(f));
+- ri.offset = cpu_to_je32(offset);
+- ri.csize = cpu_to_je32(cdatalen);
+- ri.dsize = cpu_to_je32(datalen);
++ ri.magic = JFFS2_MAGIC_BITMASK;
++ ri.nodetype = JFFS2_NODETYPE_INODE;
++ ri.totlen = sizeof(ri) + cdatalen;
++ ri.hdr_crc = crc32(0, &ri, sizeof(struct jffs2_unknown_node)-4);
++
++ ri.ino = inode->i_ino;
++ ri.version = ++f->highest_version;
++ ri.mode = inode->i_mode;
++ ri.uid = inode->i_uid;
++ ri.gid = inode->i_gid;
++ ri.isize = inode->i_size;
++ ri.atime = inode->i_atime;
++ ri.ctime = inode->i_ctime;
++ ri.mtime = inode->i_mtime;
++ ri.offset = offset;
++ ri.csize = cdatalen;
++ ri.dsize = datalen;
+ ri.compr = comprtype;
+- ri.node_crc = cpu_to_je32(crc32(0, &ri, sizeof(ri)-8));
+- ri.data_crc = cpu_to_je32(crc32(0, writebuf, cdatalen));
++ ri.node_crc = crc32(0, &ri, sizeof(ri)-8);
++ ri.data_crc = crc32(0, writebuf, cdatalen);
+
+- new_fn = jffs2_write_dnode(c, f, &ri, writebuf, cdatalen, phys_ofs, NULL);
++ new_fn = jffs2_write_dnode(inode, &ri, writebuf, cdatalen, phys_ofs, NULL);
+
+ if (IS_ERR(new_fn)) {
+ printk(KERN_WARNING "Error writing new dnode: %ld\n", PTR_ERR(new_fn));
+@@ -965,15 +663,9 @@
+ if (comprbuf) kfree(comprbuf);
+
+ kunmap(pg);
+- unlock_page(pg);
+ /* XXX: Does the page get freed automatically? */
+ /* AAA: Judging by the unmount getting stuck in __wait_on_page, nope. */
+ page_cache_release(pg);
+ return ret;
+ }
+
+-/*
+- * Local variables:
+- * c-basic-offset: 8
+- * End:
+- */
+diff -Nur linux/fs/jffs2/ioctl.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ioctl.c
+--- linux/fs/jffs2/ioctl.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/ioctl.c 2003-06-23 01:47:04.000000000 +0700
+@@ -5,9 +5,33 @@
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: ioctl.c,v 1.6 2002/05/20 14:56:38 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
++ *
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: ioctl.c,v 1.5 2001/03/15 15:38:24 dwmw2 Exp $
+ *
+ */
+
+diff -Nur linux/fs/jffs2/jffs2_proc.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/jffs2_proc.c
+--- linux/fs/jffs2/jffs2_proc.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/jffs2_proc.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,837 +0,0 @@
+-/*
+- * fs/jffs2/jffs2_proc.c
+- *
+- * Copyright (C) 2002 Lineo Japan, Inc.
+- *
+- * May be copied or modified under the terms of the GNU General Public
+- * License. See linux/COPYING for more information.
+- *
+- * $Id: jffs2_proc.c,v 1.13 2002/12/19 02:42:45 yamade Exp $
+- *
+- * Derived from fs/jffs/jffs_proc.c
+- *
+- * JFFS -- Journaling Flash File System, Linux implementation.
+- *
+- * Copyright (C) 2000 Axis Communications AB.
+- *
+- * Created by Simon Kagstrom <simonk@axis.com>.
+- *
+- * This 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.
+- *
+- * Overview:
+- * This file defines JFFS partition entries in the proc file system.
+- *
+- * TODO:
+- * Create some more proc files for different kinds of info, i.e. statistics
+- * about written and read bytes, number of calls to different routines,
+- * reports about failures.
+- *
+- * ChangLog:
+- * 05-Dec-2002 SHARP add proc-files
+- */
+-
+-#include <linux/errno.h>
+-#include <linux/fs.h>
+-#include <linux/jffs.h>
+-#include <linux/slab.h>
+-#include <linux/proc_fs.h>
+-#include <linux/sched.h>
+-#include <linux/types.h>
+-#include <linux/ctype.h>
+-#include "jffs2_proc.h"
+-#include "nodelist.h"
+-#include "nodemerge.h"
+-
+-/*
+- * Structure for a JFFS2 partition in the system
+- */
+-struct jffs2_partition_dir {
+- struct jffs2_sb_info *c;
+- struct proc_dir_entry *part_root;
+- struct proc_dir_entry *part_partition_size;
+- struct proc_dir_entry *part_sector_size;
+- struct proc_dir_entry *part_used_size;
+- struct proc_dir_entry *part_dirty_size;
+- struct proc_dir_entry *part_free_size;
+- struct proc_dir_entry *part_wasted_size;
+- struct proc_dir_entry *part_erasing_size;
+- struct proc_dir_entry *part_free_blocks;
+- struct proc_dir_entry *part_erasing_blocks;
+- struct proc_dir_entry *part_gcing_blocks;
+- struct proc_dir_entry *part_bad_blocks;
+- struct proc_dir_entry *part_cont_gc_count;
+- struct proc_dir_entry *part_reserved_blocks_write;
+- struct proc_dir_entry *part_reserved_blocks_root;
+- struct proc_dir_entry *part_reserved_blocks_bad;
+- struct proc_dir_entry *part_reliable_free_size;
+- struct proc_dir_entry *part_reliable_free_blocks;
+- struct proc_dir_entry *part_nonerasing_dirty_size;
+- struct proc_dir_entry *part_effective_gc_count;
+- struct proc_dir_entry *part_dump_block_lists;
+- struct proc_dir_entry *part_nodemerge;
+- struct jffs2_partition_dir *next;
+-};
+-
+-/*
+- * Structure for top-level entry in '/proc/fs' directory
+- */
+-struct proc_dir_entry *jffs2_proc_root;
+-
+-/*
+- * Linked list of 'jffs2_partition_dirs' to help us track
+- * the mounted JFFS2 partitions in the system
+- */
+-static struct jffs2_partition_dir *jffs2_part_dirs = 0;
+-
+-/*
+- * Read functions for entries
+- */
+-static int jffs2_proc_partition_size_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_sector_size_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_used_size_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_dirty_size_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_free_size_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_wasted_size_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_erasing_size_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_free_blocks_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_erasing_blocks_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_gcing_blocks_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_bad_blocks_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_cont_gc_count_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_reserved_blocks_write_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_reserved_blocks_root_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_reserved_blocks_bad_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_reliable_free_size_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_reliable_free_blocks_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_nonerasing_dirty_size_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_effective_gc_count_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_dump_block_lists_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data);
+-static int jffs2_proc_nodemerge_write(struct file *file, const char *buffer,
+- unsigned long count, void *data);
+-
+-
+-/*
+- * Register a JFFS2 partition directory (called upon mount)
+- */
+-int
+-jffs2_register_jffs2_proc_dir(kdev_t dev, struct jffs2_sb_info *c)
+-{
+- struct jffs2_partition_dir *part_dir;
+- struct proc_dir_entry *part_root = 0;
+- struct proc_dir_entry *part_partition_size = 0;
+- struct proc_dir_entry *part_sector_size = 0;
+- struct proc_dir_entry *part_used_size = 0;
+- struct proc_dir_entry *part_dirty_size = 0;
+- struct proc_dir_entry *part_free_size = 0;
+- struct proc_dir_entry *part_wasted_size = 0;
+- struct proc_dir_entry *part_erasing_size = 0;
+- struct proc_dir_entry *part_free_blocks = 0;
+- struct proc_dir_entry *part_erasing_blocks = 0;
+- struct proc_dir_entry *part_gcing_blocks = 0;
+- struct proc_dir_entry *part_bad_blocks = 0;
+- struct proc_dir_entry *part_cont_gc_count = 0;
+- struct proc_dir_entry *part_reserved_blocks_write = 0;
+- struct proc_dir_entry *part_reserved_blocks_root = 0;
+- struct proc_dir_entry *part_reserved_blocks_bad = 0;
+- struct proc_dir_entry *part_reliable_free_size = 0;
+- struct proc_dir_entry *part_reliable_free_blocks = 0;
+- struct proc_dir_entry *part_nonerasing_dirty_size = 0;
+- struct proc_dir_entry *part_effective_gc_count = 0;
+- struct proc_dir_entry *part_dump_block_lists = 0;
+- struct proc_dir_entry *part_nodemerge = 0;
+-
+- /* Allocate structure for local JFFS2 partition table */
+- if (!(part_dir = (struct jffs2_partition_dir *)
+- kmalloc (sizeof (struct jffs2_partition_dir), GFP_KERNEL))) {
+- return -ENOMEM;
+- }
+-
+- /* Create entry for this partition */
+- part_root = proc_mkdir(kdevname(dev), jffs2_proc_root);
+- if (! part_root) {
+- kfree(part_dir);
+- return -ENOMEM;
+- }
+-
+- /* Create entry for 'info' file */
+- part_partition_size = create_proc_read_entry("partition_size", 0, part_root,
+- jffs2_proc_partition_size_read, c);
+- part_sector_size = create_proc_read_entry("sector_size", 0, part_root,
+- jffs2_proc_sector_size_read, c);
+- part_used_size = create_proc_read_entry("used_size", 0, part_root,
+- jffs2_proc_used_size_read, c);
+- part_dirty_size = create_proc_read_entry("dirty_size", 0, part_root,
+- jffs2_proc_dirty_size_read, c);
+- part_free_size = create_proc_read_entry("free_size", 0, part_root,
+- jffs2_proc_free_size_read, c);
+- part_wasted_size = create_proc_read_entry("wasted_size", 0, part_root,
+- jffs2_proc_wasted_size_read, c);
+- part_erasing_size = create_proc_read_entry("erasing_size", 0, part_root,
+- jffs2_proc_erasing_size_read, c);
+- part_free_blocks = create_proc_read_entry("free_blocks", 0, part_root,
+- jffs2_proc_free_blocks_read, c);
+- part_erasing_blocks = create_proc_read_entry("erasing_blocks", 0, part_root,
+- jffs2_proc_erasing_blocks_read, c);
+- part_gcing_blocks = create_proc_read_entry("gcing_blocks", 0, part_root,
+- jffs2_proc_gcing_blocks_read, c);
+- part_bad_blocks = create_proc_read_entry("bad_blocks", 0, part_root,
+- jffs2_proc_bad_blocks_read, c);
+- part_cont_gc_count = create_proc_read_entry("cont_gc_count", 0, part_root,
+- jffs2_proc_cont_gc_count_read, c);
+- part_reserved_blocks_write = create_proc_read_entry("reserved_blocks_write", 0, part_root,
+- jffs2_proc_reserved_blocks_write_read, c);
+- part_reserved_blocks_root = create_proc_read_entry("reserved_blocks_root", 0, part_root,
+- jffs2_proc_reserved_blocks_root_read, c);
+- part_reserved_blocks_bad = create_proc_read_entry("reserved_blocks_bad", 0, part_root,
+- jffs2_proc_reserved_blocks_bad_read, c);
+- part_reliable_free_size = create_proc_read_entry("reliable_free_size", 0, part_root,
+- jffs2_proc_reliable_free_size_read, c);
+- part_reliable_free_blocks = create_proc_read_entry("reliable_free_blocks", 0, part_root,
+- jffs2_proc_reliable_free_blocks_read, c);
+- part_nonerasing_dirty_size = create_proc_read_entry("nonerasing_dirty_size", 0, part_root,
+- jffs2_proc_nonerasing_dirty_size_read, c);
+- part_effective_gc_count = create_proc_read_entry("effective_gc_count", 0, part_root,
+- jffs2_proc_effective_gc_count_read, c);
+- part_dump_block_lists = create_proc_read_entry(".dump_block_lists", 0, part_root,
+- jffs2_proc_dump_block_lists_read, c);
+- part_nodemerge = create_proc_entry(".nodemerge", 0222, part_root);
+- if (! part_partition_size || ! part_sector_size || ! part_used_size ||
+- ! part_dirty_size || ! part_free_size || ! part_wasted_size ||
+- ! part_erasing_size || ! part_free_blocks ||
+- ! part_erasing_blocks || ! part_gcing_blocks ||
+- ! part_bad_blocks || ! part_cont_gc_count || ! part_reserved_blocks_write ||
+- ! part_reserved_blocks_root || ! part_reserved_blocks_bad ||
+- ! part_reliable_free_size || ! part_reliable_free_blocks ||
+- ! part_nonerasing_dirty_size || ! part_effective_gc_count ||
+- ! part_dump_block_lists || ! part_nodemerge) {
+- if (part_partition_size)
+- remove_proc_entry(part_partition_size->name, part_root);
+- if (part_sector_size)
+- remove_proc_entry(part_sector_size->name, part_root);
+- if (part_used_size)
+- remove_proc_entry(part_used_size->name, part_root);
+- if (part_dirty_size)
+- remove_proc_entry(part_dirty_size->name, part_root);
+- if (part_free_size)
+- remove_proc_entry(part_free_size->name, part_root);
+- if (part_wasted_size)
+- remove_proc_entry(part_wasted_size->name, part_root);
+- if (part_erasing_size)
+- remove_proc_entry(part_erasing_size->name, part_root);
+- if (part_free_blocks)
+- remove_proc_entry(part_free_blocks->name, part_root);
+- if (part_erasing_blocks)
+- remove_proc_entry(part_erasing_blocks->name, part_root);
+- if (part_gcing_blocks)
+- remove_proc_entry(part_gcing_blocks->name, part_root);
+- if (part_bad_blocks)
+- remove_proc_entry(part_bad_blocks->name, part_root);
+- if (part_cont_gc_count)
+- remove_proc_entry(part_cont_gc_count->name, part_root);
+- if (part_reserved_blocks_write)
+- remove_proc_entry(part_reserved_blocks_write->name, part_root);
+- if (part_reserved_blocks_root)
+- remove_proc_entry(part_reserved_blocks_root->name, part_root);
+- if (part_reserved_blocks_bad)
+- remove_proc_entry(part_reserved_blocks_bad->name, part_root);
+- if (part_reliable_free_size)
+- remove_proc_entry(part_reliable_free_size->name, part_root);
+- if (part_reliable_free_blocks)
+- remove_proc_entry(part_reliable_free_blocks->name, part_root);
+- if (part_nonerasing_dirty_size)
+- remove_proc_entry(part_nonerasing_dirty_size->name, part_root);
+- if (part_effective_gc_count)
+- remove_proc_entry(part_effective_gc_count->name, part_root);
+- if (part_dump_block_lists)
+- remove_proc_entry(part_dump_block_lists->name, part_root);
+- if (part_nodemerge)
+- remove_proc_entry(part_nodemerge->name, part_root);
+- kfree(part_dir);
+- return -ENOMEM;
+- }
+- part_nodemerge->write_proc = jffs2_proc_nodemerge_write;
+- part_nodemerge->data = c;
+-
+- /* Fill in structure for table and insert in the list */
+- part_dir->c = c;
+- part_dir->part_root = part_root;
+- part_dir->part_partition_size = part_partition_size;
+- part_dir->part_sector_size = part_sector_size;
+- part_dir->part_used_size = part_used_size;
+- part_dir->part_dirty_size = part_dirty_size;
+- part_dir->part_free_size = part_free_size;
+- part_dir->part_wasted_size = part_wasted_size;
+- part_dir->part_erasing_size = part_erasing_size;
+- part_dir->part_free_blocks = part_free_blocks;
+- part_dir->part_erasing_blocks = part_erasing_blocks;
+- part_dir->part_gcing_blocks = part_gcing_blocks;
+- part_dir->part_bad_blocks = part_bad_blocks;
+- part_dir->part_cont_gc_count = part_cont_gc_count;
+- part_dir->part_reserved_blocks_write = part_reserved_blocks_write;
+- part_dir->part_reserved_blocks_root = part_reserved_blocks_root;
+- part_dir->part_reserved_blocks_bad = part_reserved_blocks_bad;
+- part_dir->part_reliable_free_size = part_reliable_free_size;
+- part_dir->part_reliable_free_blocks = part_reliable_free_blocks;
+- part_dir->part_nonerasing_dirty_size = part_nonerasing_dirty_size;
+- part_dir->part_effective_gc_count = part_effective_gc_count;
+- part_dir->part_dump_block_lists = part_dump_block_lists;
+- part_dir->part_nodemerge = part_nodemerge;
+- part_dir->next = jffs2_part_dirs;
+- jffs2_part_dirs = part_dir;
+-
+- /* Return happy */
+- return 0;
+-}
+-
+-
+-/*
+- * Unregister a JFFS2 partition directory (called at umount)
+- */
+-int
+-jffs2_unregister_jffs2_proc_dir(struct jffs2_sb_info *c)
+-{
+- struct jffs2_partition_dir *part_dir = jffs2_part_dirs;
+- struct jffs2_partition_dir *prev_part_dir = 0;
+-
+- while (part_dir) {
+- if (part_dir->c == c) {
+- struct proc_dir_entry *part_root = part_dir->part_root;
+-
+- /* Remove entries for partition */
+- remove_proc_entry(part_dir->part_partition_size->name, part_root);
+- remove_proc_entry(part_dir->part_sector_size->name, part_root);
+- remove_proc_entry(part_dir->part_used_size->name, part_root);
+- remove_proc_entry(part_dir->part_dirty_size->name, part_root);
+- remove_proc_entry(part_dir->part_free_size->name, part_root);
+- remove_proc_entry(part_dir->part_wasted_size->name, part_root);
+- remove_proc_entry(part_dir->part_erasing_size->name, part_root);
+- remove_proc_entry(part_dir->part_free_blocks->name, part_root);
+- remove_proc_entry(part_dir->part_erasing_blocks->name, part_root);
+- remove_proc_entry(part_dir->part_gcing_blocks->name, part_root);
+- remove_proc_entry(part_dir->part_bad_blocks->name, part_root);
+- remove_proc_entry(part_dir->part_cont_gc_count->name, part_root);
+- remove_proc_entry(part_dir->part_reserved_blocks_write->name, part_root);
+- remove_proc_entry(part_dir->part_reserved_blocks_root->name, part_root);
+- remove_proc_entry(part_dir->part_reserved_blocks_bad->name, part_root);
+- remove_proc_entry(part_dir->part_reliable_free_size->name, part_root);
+- remove_proc_entry(part_dir->part_reliable_free_blocks->name, part_root);
+- remove_proc_entry(part_dir->part_nonerasing_dirty_size->name, part_root);
+- remove_proc_entry(part_dir->part_effective_gc_count->name, part_root);
+- remove_proc_entry(part_dir->part_dump_block_lists->name, part_root);
+- remove_proc_entry(part_dir->part_nodemerge->name, part_root);
+- remove_proc_entry(part_root->name, jffs2_proc_root);
+-
+- /* Remove entry from list */
+- if (prev_part_dir)
+- prev_part_dir->next = part_dir->next;
+- else
+- jffs2_part_dirs = part_dir->next;
+-
+- /* Free memory for entry */
+- kfree(part_dir);
+-
+- /* Return happy */
+- return 0;
+- }
+-
+- /* Move to next entry */
+- prev_part_dir = part_dir;
+- part_dir = part_dir->next;
+- }
+-
+- /* Return unhappy */
+- return -1;
+-}
+-
+-
+-static int
+-jffs2_proc_partition_size_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+- int len = sprintf(page, "%u\n", c->flash_size);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_sector_size_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+- int len = sprintf(page, "%u\n", c->sector_size);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_used_size_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+- int len = sprintf(page, "%u\n", c->used_size);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_dirty_size_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+- int len = sprintf(page, "%u\n", c->dirty_size);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_free_size_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+- int len = sprintf(page, "%u\n", c->free_size);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_wasted_size_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+- int len = sprintf(page, "%u\n", c->wasted_size);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_erasing_size_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+- int len = sprintf(page, "%u\n", c->erasing_size);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_free_blocks_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+- int len = sprintf(page, "%u\n", c->nr_free_blocks);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_erasing_blocks_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+- int len = sprintf(page, "%u\n", c->nr_erasing_blocks);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_gcing_blocks_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+- int len;
+- int gcing_blocks, very_dirty_blocks, nodemerge_dirty_blocks;
+-
+- if (down_interruptible(&c->alloc_sem)){
+- len = sprintf(page, "%u\n", 0);
+- *eof = 1;
+- return len;
+- }
+- spin_lock_bh(&c->erase_completion_lock);
+-
+- if (list_empty(&c->very_dirty_list)) {
+- very_dirty_blocks = 0;
+- } else {
+- struct list_head *this;
+- int numblocks = 0;
+-
+- list_for_each(this, &c->very_dirty_list) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+- numblocks ++;
+- }
+- very_dirty_blocks = numblocks;
+- }
+-
+- if (list_empty(&c->nodemerge_list)) {
+- nodemerge_dirty_blocks = 0;
+- } else {
+- struct list_head *this;
+- int numblocks = 0;
+-
+- list_for_each(this, &c->nodemerge_list) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+- if (ISDIRTY(jeb->dirty_size)) {
+- numblocks ++;
+- }
+- }
+- nodemerge_dirty_blocks = numblocks;
+- }
+-
+- spin_unlock_bh(&c->erase_completion_lock);
+- up(&c->alloc_sem);
+-
+- gcing_blocks = very_dirty_blocks + nodemerge_dirty_blocks;
+-
+- len = sprintf(page, "%u\n", gcing_blocks);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_bad_blocks_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+- int len = sprintf(page, "%u\n", c->nr_bad_blocks);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_cont_gc_count_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+- int len = sprintf(page, "%u\n", c->cont_gc_count);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_reserved_blocks_write_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- int len = sprintf(page, "%d\n", JFFS2_RESERVED_BLOCKS_WRITE);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_reserved_blocks_root_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- int len = sprintf(page, "%d\n", JFFS2_RESERVED_BLOCKS_ROOT);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_reserved_blocks_bad_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- int len = sprintf(page, "%d\n", JFFS2_RESERVED_BLOCKS_BAD);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_reliable_free_size_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+- int len;
+- unsigned long avail;
+- uint32_t next_free;
+- int32_t avail_blocks;
+- int reserved_blocks = JFFS2_RESERVED_BLOCKS_WRITE + JFFS2_RESERVED_BLOCKS_ROOT;
+-
+- spin_lock_bh(&c->erase_completion_lock);
+-
+- avail_blocks = NR_AVAIL_BLOCKS(c);
+- next_free = (c->nextblock) ? (c->nextblock->free_size) : 0;
+-
+- if (avail_blocks >= reserved_blocks){
+- avail = avail_blocks * c->sector_size + next_free - reserved_blocks * c->sector_size;
+- }else{
+- avail = 0;
+- }
+-
+- spin_unlock_bh(&c->erase_completion_lock);
+-
+- len = sprintf(page, "%lu\n", avail);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_reliable_free_blocks_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+- int len;
+- unsigned long avail;
+- int32_t avail_blocks;
+- int reserved_blocks = JFFS2_RESERVED_BLOCKS_WRITE + JFFS2_RESERVED_BLOCKS_ROOT;
+-
+- avail_blocks = NR_AVAIL_BLOCKS(c);
+- if (avail_blocks >= reserved_blocks){
+- avail = avail_blocks - reserved_blocks;
+- }else{
+- avail = 0;
+- }
+-
+- len = sprintf(page, "%lu\n", avail);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_nonerasing_dirty_size_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+- int len;
+- uint32_t dirty_now, erasing_dirty_now, nonerasing_dirty_now;
+-
+- spin_lock_bh(&c->erase_completion_lock);
+-
+- dirty_now = c->dirty_size;
+- erasing_dirty_now = c->erasing_dirty_size;
+- if (dirty_now < erasing_dirty_now)
+- erasing_dirty_now = dirty_now;
+- nonerasing_dirty_now = dirty_now - erasing_dirty_now;
+-
+- spin_unlock_bh(&c->erase_completion_lock);
+-
+- len = sprintf(page, "%lu\n", nonerasing_dirty_now);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_effective_gc_count_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+- int len = sprintf(page, "%u\n", c->effective_gc_count);
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static int
+-jffs2_proc_dump_block_lists_read(char *page, char **start, off_t off,
+- int count, int *eof, void *data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+- int len = 0, tlen;
+-
+- if (down_interruptible(&c->alloc_sem)){
+- len = sprintf(page, "down(alloc_sem) failed.\n");
+- *eof = 1;
+- return len;
+- }
+- spin_lock_bh(&c->erase_completion_lock);
+-
+- if (list_empty(&c->clean_list)) {
+- tlen = sprintf(page + len, "clean_list: blocks=(0)\n");
+- len += tlen;
+- } else {
+- struct list_head *this;
+- int numblocks = 0;
+- unsigned long dirty = 0;
+-
+- list_for_each(this, &c->clean_list) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+- numblocks ++;
+- dirty += jeb->dirty_size;
+- }
+- tlen = sprintf(page + len, "clean_list: blocks=(%d) dirty=(%lu,%lu)\n", numblocks, dirty, dirty / numblocks);
+- len += tlen;
+- }
+-
+- if (list_empty(&c->very_dirty_list)) {
+- tlen = sprintf(page + len, "very_dirty_list: blocks=(0)\n");
+- len += tlen;
+- } else {
+- struct list_head *this;
+- int numblocks = 0;
+- unsigned long dirty = 0;
+-
+- list_for_each(this, &c->very_dirty_list) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+- numblocks ++;
+- dirty += jeb->dirty_size;
+- }
+- tlen = sprintf(page + len, "very_dirty_list: blocks=(%d) dirty=(%lu,%lu)\n", numblocks, dirty, dirty / numblocks);
+- len += tlen;
+- }
+-
+- if (list_empty(&c->dirty_list)) {
+- tlen = sprintf(page + len, "dirty_list: blocks=(0)\n");
+- len += tlen;
+- } else {
+- struct list_head *this;
+- int numblocks0 = 0, numblocks1 = 0, numblocks2 = 0, numblocks3 = 0;
+- unsigned long dirty0 = 0, dirty1 = 0, dirty2 = 0, dirty3 = 0;
+-
+- list_for_each(this, &c->dirty_list) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+- if(jeb->dirty_size >= GC_EFFECTIVE_BLOCK_DIRTY_SIZE_LL){
+- numblocks3 ++;
+- dirty3 += jeb->dirty_size;
+- }else if(jeb->dirty_size >= GC_EFFECTIVE_BLOCK_DIRTY_SIZE_L){
+- numblocks2 ++;
+- dirty2 += jeb->dirty_size;
+- }else if(jeb->dirty_size >= GC_EFFECTIVE_BLOCK_DIRTY_SIZE){
+- numblocks1 ++;
+- dirty1 += jeb->dirty_size;
+- }else{
+- numblocks0 ++;
+- dirty0 += jeb->dirty_size;
+- }
+- }
+- tlen = sprintf(page + len, "dirty_list: blocks=(%d) dirty=(%lu,%lu)\n",
+- numblocks0 + numblocks1 + numblocks2 + numblocks3,
+- dirty0 + dirty1 + dirty2 + dirty3,
+- (dirty0 + dirty1 + dirty2 + dirty3) / (numblocks0 + numblocks1 + numblocks2 + numblocks3));
+- len += tlen;
+- tlen = sprintf(page + len, "dirty_list[3]: blocks=(%d) dirty=(%lu,%lu)\n", numblocks3, dirty3,
+- (numblocks3 == 0) ? 0 : (dirty3 / numblocks3));
+- len += tlen;
+- tlen = sprintf(page + len, "dirty_list[2]: blocks=(%d) dirty=(%lu,%lu)\n", numblocks2, dirty2,
+- (numblocks2 == 0) ? 0 : (dirty2 / numblocks2));
+- len += tlen;
+- tlen = sprintf(page + len, "dirty_list[1]: blocks=(%d) dirty=(%lu,%lu)\n", numblocks1, dirty1,
+- (numblocks1 == 0) ? 0 : (dirty1 / numblocks1));
+- len += tlen;
+- tlen = sprintf(page + len, "dirty_list[0]: blocks=(%d) dirty=(%lu,%lu)\n", numblocks0, dirty0,
+- (numblocks0 == 0) ? 0 : (dirty0 / numblocks0));
+- len += tlen;
+- }
+-
+- if (list_empty(&c->nodemerge_list)) {
+- tlen = sprintf(page + len, "nodemerge_list: blocks=(0)\n");
+- len += tlen;
+- } else {
+- struct list_head *this;
+- int numblocks = 0;
+- unsigned long dirty = 0;
+-
+- list_for_each(this, &c->nodemerge_list) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+- numblocks ++;
+- dirty += jeb->dirty_size;
+- }
+- tlen = sprintf(page + len, "nodemerge_list: blocks=(%d) dirty=(%lu,%lu)\n", numblocks, dirty, dirty / numblocks);
+- len += tlen;
+- }
+-
+- spin_unlock_bh(&c->erase_completion_lock);
+- up(&c->alloc_sem);
+-
+- *eof = 1;
+- return len;
+-}
+-
+-
+-static unsigned long
+-atoul(const char* p)
+-{
+- unsigned long n = 0;
+-
+- while (p && ! isdigit(*p))
+- p++;
+- while (p && isdigit(*p)) {
+- n = n * 10 + *p - '0';
+- p++;
+- }
+- return n;
+-}
+-
+-
+-static int
+-jffs2_proc_nodemerge_write(struct file *file, const char *buffer, unsigned long count,
+- void *data)
+-{
+- extern void jffs2_shrink_inode(struct inode *);
+-
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *)data;
+- char str[16];
+- unsigned long ino = 0;
+- unsigned long len = (sizeof str < count) ? sizeof str : count;
+- struct inode *inode;
+- struct jffs2_inode_info *f;
+-
+- memset(str, '\0', sizeof str);
+- if (copy_from_user(str, buffer, len))
+- return -EFAULT;
+-
+- ino = atoul(str);
+- printk(KERN_DEBUG "nodemerge: start ino=%d\n", ino);
+- if (ino > c->highest_ino)
+- return -EINVAL;
+-
+- inode = iget(OFNI_BS_2SFFJ(c), ino);
+- if (is_bad_inode(inode)) {
+- printk(KERN_NOTICE "iget() failed\n");
+- iput(inode);
+- return -EIO;
+- }
+-
+- f = JFFS2_INODE_INFO(inode);
+- if (down_interruptible(&f->sem)) {
+- printk(KERN_NOTICE "nodemerge: down_interruptible failed\n");
+- iput(inode);
+- return -ERESTARTSYS;
+- }
+- jffs2_construct_fragtree_nolock_if_missing(c, f);
+- jffs2_merge_nodes(c, f, inode->i_size, JFFS2_FRAGS_NR_NODES_THRESHOLD_FORCE);
+- up(&f->sem);
+-
+- iput(inode);
+-
+- printk(KERN_DEBUG "nodemerge: end ino=%d\n", ino);
+- return count;
+-}
+diff -Nur linux/fs/jffs2/jffs2_proc.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/jffs2_proc.h
+--- linux/fs/jffs2/jffs2_proc.h 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/jffs2_proc.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,37 +0,0 @@
+-/*
+- * fs/jffs2/jffs2_proc.h
+- *
+- * Copyright (C) 2002 Lineo Japan, Inc.
+- *
+- * May be copied or modified under the terms of the GNU General Public
+- * License. See linux/COPYING for more information.
+- *
+- * $Id: jffs2_proc.h,v 1.1.1.1 2002/12/19 01:52:04 yamade Exp $
+- *
+- * Derived from fs/jffs/jffs_proc.h
+- *
+- * JFFS -- Journaling Flash File System, Linux implementation.
+- *
+- * Copyright (C) 2000 Axis Communications AB.
+- *
+- * Created by Simon Kagstrom <simonk@axis.com>.
+- *
+- * This 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.
+- */
+-
+-/* jffs2_proc.h defines a structure for inclusion in the proc-file system. */
+-#ifndef __LINUX_JFFS2_PROC_H__
+-#define __LINUX_JFFS2_PROC_H__
+-
+-#include <linux/proc_fs.h>
+-
+-/* The proc_dir_entry for jffs2 (defined in jffs2_proc.c). */
+-extern struct proc_dir_entry *jffs2_proc_root;
+-
+-int jffs2_register_jffs2_proc_dir(kdev_t dev, struct jffs2_sb_info *c);
+-int jffs2_unregister_jffs2_proc_dir(struct jffs2_sb_info *c);
+-
+-#endif /* __LINUX_JFFS2_PROC_H__ */
+diff -Nur linux/fs/jffs2/malloc.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/malloc.c
+--- linux/fs/jffs2/malloc.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/malloc.c 2003-06-23 01:47:04.000000000 +0700
+@@ -1,13 +1,37 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: malloc.c,v 1.22 2002/05/20 14:56:38 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
++ *
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: malloc.c,v 1.16 2001/03/15 15:38:24 dwmw2 Exp $
+ *
+ */
+
+@@ -33,47 +57,57 @@
+ static kmem_cache_t *node_frag_slab;
+ static kmem_cache_t *inode_cache_slab;
+
++void jffs2_free_tmp_dnode_info_list(struct jffs2_tmp_dnode_info *tn)
++{
++ struct jffs2_tmp_dnode_info *next;
++
++ while (tn) {
++ next = tn;
++ tn = tn->next;
++ jffs2_free_full_dnode(next->fn);
++ jffs2_free_tmp_dnode_info(next);
++ }
++}
++
++void jffs2_free_full_dirent_list(struct jffs2_full_dirent *fd)
++{
++ struct jffs2_full_dirent *next;
++
++ while (fd) {
++ next = fd->next;
++ jffs2_free_full_dirent(fd);
++ fd = next;
++ }
++}
++
+ int __init jffs2_create_slab_caches(void)
+ {
+- full_dnode_slab = kmem_cache_create("jffs2_full_dnode",
+- sizeof(struct jffs2_full_dnode),
+- 0, JFFS2_SLAB_POISON, NULL, NULL);
++ full_dnode_slab = kmem_cache_create("jffs2_full_dnode", sizeof(struct jffs2_full_dnode), 0, JFFS2_SLAB_POISON, NULL, NULL);
+ if (!full_dnode_slab)
+ goto err;
+
+- raw_dirent_slab = kmem_cache_create("jffs2_raw_dirent",
+- sizeof(struct jffs2_raw_dirent),
+- 0, JFFS2_SLAB_POISON, NULL, NULL);
++ raw_dirent_slab = kmem_cache_create("jffs2_raw_dirent", sizeof(struct jffs2_raw_dirent), 0, JFFS2_SLAB_POISON, NULL, NULL);
+ if (!raw_dirent_slab)
+ goto err;
+
+- raw_inode_slab = kmem_cache_create("jffs2_raw_inode",
+- sizeof(struct jffs2_raw_inode),
+- 0, JFFS2_SLAB_POISON, NULL, NULL);
++ raw_inode_slab = kmem_cache_create("jffs2_raw_inode", sizeof(struct jffs2_raw_inode), 0, JFFS2_SLAB_POISON, NULL, NULL);
+ if (!raw_inode_slab)
+ goto err;
+
+- tmp_dnode_info_slab = kmem_cache_create("jffs2_tmp_dnode",
+- sizeof(struct jffs2_tmp_dnode_info),
+- 0, JFFS2_SLAB_POISON, NULL, NULL);
++ tmp_dnode_info_slab = kmem_cache_create("jffs2_tmp_dnode", sizeof(struct jffs2_tmp_dnode_info), 0, JFFS2_SLAB_POISON, NULL, NULL);
+ if (!tmp_dnode_info_slab)
+ goto err;
+
+- raw_node_ref_slab = kmem_cache_create("jffs2_raw_node_ref",
+- sizeof(struct jffs2_raw_node_ref),
+- 0, JFFS2_SLAB_POISON, NULL, NULL);
++ raw_node_ref_slab = kmem_cache_create("jffs2_raw_node_ref", sizeof(struct jffs2_raw_node_ref), 0, JFFS2_SLAB_POISON, NULL, NULL);
+ if (!raw_node_ref_slab)
+ goto err;
+
+- node_frag_slab = kmem_cache_create("jffs2_node_frag",
+- sizeof(struct jffs2_node_frag),
+- 0, JFFS2_SLAB_POISON, NULL, NULL);
++ node_frag_slab = kmem_cache_create("jffs2_node_frag", sizeof(struct jffs2_node_frag), 0, JFFS2_SLAB_POISON, NULL, NULL);
+ if (!node_frag_slab)
+ goto err;
+
+- inode_cache_slab = kmem_cache_create("jffs2_inode_cache",
+- sizeof(struct jffs2_inode_cache),
+- 0, JFFS2_SLAB_POISON, NULL, NULL);
++ inode_cache_slab = kmem_cache_create("jffs2_inode_cache", sizeof(struct jffs2_inode_cache), 0, JFFS2_SLAB_POISON, NULL, NULL);
++
+ if (inode_cache_slab)
+ return 0;
+ err:
+@@ -97,6 +131,7 @@
+ kmem_cache_destroy(node_frag_slab);
+ if(inode_cache_slab)
+ kmem_cache_destroy(inode_cache_slab);
++
+ }
+
+ struct jffs2_full_dirent *jffs2_alloc_full_dirent(int namesize)
+diff -Nur linux/fs/jffs2/nodelist.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/nodelist.c
+--- linux/fs/jffs2/nodelist.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/nodelist.c 2003-06-23 01:47:04.000000000 +0700
+@@ -5,22 +5,40 @@
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: nodelist.c,v 1.61 2002/09/06 16:46:29 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
+ *
+- * ChangeLog:
+- * 19-Nov-2002 Lineo Japan, Inc. add function jffs2_shrink_inode()
+- * add counter of fragtree elements
+- * 18-Nov-2002 Lineo Japan, Inc. add dynamic construction of fragtree
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: nodelist.c,v 1.30.2.4 2002/05/10 18:30:33 dwmw2 Exp $
+ *
+ */
+
+ #include <linux/kernel.h>
++#include <linux/jffs2.h>
+ #include <linux/fs.h>
+ #include <linux/mtd/mtd.h>
+-#include <linux/interrupt.h>
+-#include <linux/rbtree.h>
+ #include "nodelist.h"
+
+ void jffs2_add_fd_to_list(struct jffs2_sb_info *c, struct jffs2_full_dirent *new, struct jffs2_full_dirent **list)
+@@ -71,37 +89,13 @@
+ *prev = tn;
+ }
+
+-static void jffs2_free_tmp_dnode_info_list(struct jffs2_tmp_dnode_info *tn)
+-{
+- struct jffs2_tmp_dnode_info *next;
+-
+- while (tn) {
+- next = tn;
+- tn = tn->next;
+- jffs2_free_full_dnode(next->fn);
+- jffs2_free_tmp_dnode_info(next);
+- }
+-}
+-
+-static void jffs2_free_full_dirent_list(struct jffs2_full_dirent *fd)
+-{
+- struct jffs2_full_dirent *next;
+-
+- while (fd) {
+- next = fd->next;
+- jffs2_free_full_dirent(fd);
+- fd = next;
+- }
+-}
+-
+-
+ /* Get tmp_dnode_info and full_dirent for all non-obsolete nodes associated
+ with this ino, returning the former in order of version */
+
+ int jffs2_get_inode_nodes(struct jffs2_sb_info *c, ino_t ino, struct jffs2_inode_info *f,
+ struct jffs2_tmp_dnode_info **tnp, struct jffs2_full_dirent **fdp,
+- uint32_t *highest_version, uint32_t *latest_mctime,
+- uint32_t *mctime_ver)
++ __u32 *highest_version, __u32 *latest_mctime,
++ __u32 *mctime_ver)
+ {
+ struct jffs2_raw_node_ref *ref = f->inocache->nodes;
+ struct jffs2_tmp_dnode_info *tn, *ret_tn = NULL;
+@@ -117,24 +111,16 @@
+ if (!f->inocache->nodes) {
+ printk(KERN_WARNING "Eep. no nodes for ino #%lu\n", ino);
+ }
+-
+- spin_lock_bh(&c->erase_completion_lock);
+-
+ for (ref = f->inocache->nodes; ref && ref->next_in_ino; ref = ref->next_in_ino) {
+ /* Work out whether it's a data node or a dirent node */
+- if (ref_obsolete(ref)) {
++ if (ref->flash_offset & 1) {
+ /* FIXME: On NAND flash we may need to read these */
+- D1(printk(KERN_DEBUG "node at 0x%08x is obsoleted. Ignoring.\n", ref_offset(ref)));
++ D1(printk(KERN_DEBUG "node at 0x%08x is obsoleted. Ignoring.\n", ref->flash_offset &~3));
+ continue;
+ }
+- /* We can hold a pointer to a non-obsolete node without the spinlock,
+- but _obsolete_ nodes may disappear at any time, if the block
+- they're in gets erased */
+- spin_unlock_bh(&c->erase_completion_lock);
+-
+- err = jffs2_flash_read(c, (ref_offset(ref)), min(ref->totlen, sizeof(node)), &retlen, (void *)&node);
++ err = c->mtd->read(c->mtd, (ref->flash_offset & ~3), min(ref->totlen, sizeof(node)), &retlen, (void *)&node);
+ if (err) {
+- printk(KERN_WARNING "error %d reading node at 0x%08x in get_inode_nodes()\n", err, ref_offset(ref));
++ printk(KERN_WARNING "error %d reading node at 0x%08x in get_inode_nodes()\n", err, (ref->flash_offset) & ~3);
+ goto free_out;
+ }
+
+@@ -146,21 +132,19 @@
+ goto free_out;
+ }
+
+- switch (je16_to_cpu(node.u.nodetype)) {
++ switch (node.u.nodetype) {
+ case JFFS2_NODETYPE_DIRENT:
+- D1(printk(KERN_DEBUG "Node at %08x is a dirent node\n", ref_offset(ref)));
++ D1(printk(KERN_DEBUG "Node at %08x is a dirent node\n", ref->flash_offset &~3));
+ if (retlen < sizeof(node.d)) {
+ printk(KERN_WARNING "short read in get_inode_nodes()\n");
+ err = -EIO;
+ goto free_out;
+ }
+- if (je32_to_cpu(node.d.version) > *highest_version)
+- *highest_version = je32_to_cpu(node.d.version);
+- if (ref_obsolete(ref)) {
+- /* Obsoleted. This cannot happen, surely? dwmw2 20020308 */
+- printk(KERN_ERR "Dirent node at 0x%08x became obsolete while we weren't looking\n",
+- ref_offset(ref));
+- BUG();
++ if (node.d.version > *highest_version)
++ *highest_version = node.d.version;
++ if (ref->flash_offset & 1) {
++ /* Obsoleted */
++ continue;
+ }
+ fd = jffs2_alloc_full_dirent(node.d.nsize+1);
+ if (!fd) {
+@@ -169,21 +153,21 @@
+ }
+ memset(fd,0,sizeof(struct jffs2_full_dirent) + node.d.nsize+1);
+ fd->raw = ref;
+- fd->version = je32_to_cpu(node.d.version);
+- fd->ino = je32_to_cpu(node.d.ino);
++ fd->version = node.d.version;
++ fd->ino = node.d.ino;
+ fd->type = node.d.type;
+
+ /* Pick out the mctime of the latest dirent */
+ if(fd->version > *mctime_ver) {
+ *mctime_ver = fd->version;
+- *latest_mctime = je32_to_cpu(node.d.mctime);
++ *latest_mctime = node.d.mctime;
+ }
+
+ /* memcpy as much of the name as possible from the raw
+ dirent we've already read from the flash
+ */
+ if (retlen > sizeof(struct jffs2_raw_dirent))
+- memcpy(&fd->name[0], &node.d.name[0], min((uint32_t)node.d.nsize, (retlen-sizeof(struct jffs2_raw_dirent))));
++ memcpy(&fd->name[0], &node.d.name[0], min((__u32)node.d.nsize, (retlen-sizeof(struct jffs2_raw_dirent))));
+
+ /* Do we need to copy any more of the name directly
+ from the flash?
+@@ -191,7 +175,7 @@
+ if (node.d.nsize + sizeof(struct jffs2_raw_dirent) > retlen) {
+ int already = retlen - sizeof(struct jffs2_raw_dirent);
+
+- err = jffs2_flash_read(c, (ref_offset(ref)) + retlen,
++ err = c->mtd->read(c->mtd, (ref->flash_offset & ~3) + retlen,
+ node.d.nsize - already, &retlen, &fd->name[already]);
+ if (!err && retlen != node.d.nsize - already)
+ err = -EIO;
+@@ -212,21 +196,20 @@
+ break;
+
+ case JFFS2_NODETYPE_INODE:
+- D1(printk(KERN_DEBUG "Node at %08x is a data node\n", ref_offset(ref)));
++ D1(printk(KERN_DEBUG "Node at %08x is a data node\n", ref->flash_offset &~3));
+ if (retlen < sizeof(node.i)) {
+ printk(KERN_WARNING "read too short for dnode\n");
+ err = -EIO;
+ goto free_out;
+ }
+- if (je32_to_cpu(node.i.version) > *highest_version)
+- *highest_version = je32_to_cpu(node.i.version);
+- D1(printk(KERN_DEBUG "version %d, highest_version now %d\n", je32_to_cpu(node.i.version), *highest_version));
+-
+- if (ref_obsolete(ref)) {
+- /* Obsoleted. This cannot happen, surely? dwmw2 20020308 */
+- printk(KERN_ERR "Inode node at 0x%08x became obsolete while we weren't looking\n",
+- ref_offset(ref));
+- BUG();
++ if (node.d.version > *highest_version)
++ *highest_version = node.i.version;
++ D1(printk(KERN_DEBUG "version %d, highest_version now %d\n", node.d.version, *highest_version));
++
++ if (ref->flash_offset & 1) {
++ D1(printk(KERN_DEBUG "obsoleted\n"));
++ /* Obsoleted */
++ continue;
+ }
+ tn = jffs2_alloc_tmp_dnode_info();
+ if (!tn) {
+@@ -242,41 +225,36 @@
+ jffs2_free_tmp_dnode_info(tn);
+ goto free_out;
+ }
+- tn->version = je32_to_cpu(node.i.version);
+- tn->fn->ofs = je32_to_cpu(node.i.offset);
++ tn->version = node.i.version;
++ tn->fn->ofs = node.i.offset;
+ /* There was a bug where we wrote hole nodes out with
+ csize/dsize swapped. Deal with it */
+- if (node.i.compr == JFFS2_COMPR_ZERO && !je32_to_cpu(node.i.dsize) && je32_to_cpu(node.i.csize))
+- tn->fn->size = je32_to_cpu(node.i.csize);
++ if (node.i.compr == JFFS2_COMPR_ZERO && !node.i.dsize && node.i.csize)
++ tn->fn->size = node.i.csize;
+ else // normal case...
+- tn->fn->size = je32_to_cpu(node.i.dsize);
++ tn->fn->size = node.i.dsize;
+ tn->fn->raw = ref;
+- D1(printk(KERN_DEBUG "dnode @%08x: ver %u, offset %04x, dsize %04x\n",
+- ref_offset(ref), je32_to_cpu(node.i.version),
+- je32_to_cpu(node.i.offset), je32_to_cpu(node.i.dsize)));
++ D1(printk(KERN_DEBUG "dnode @%08x: ver %u, offset %04x, dsize %04x\n", ref->flash_offset &~3, node.i.version, node.i.offset, node.i.dsize));
+ jffs2_add_tn_to_list(tn, &ret_tn);
+ break;
+
+ default:
+- switch(je16_to_cpu(node.u.nodetype) & JFFS2_COMPAT_MASK) {
++ switch(node.u.nodetype & JFFS2_COMPAT_MASK) {
+ case JFFS2_FEATURE_INCOMPAT:
+- printk(KERN_NOTICE "Unknown INCOMPAT nodetype %04X at %08X\n", je16_to_cpu(node.u.nodetype), ref_offset(ref));
++ printk(KERN_NOTICE "Unknown INCOMPAT nodetype %04X at %08X\n", node.u.nodetype, ref->flash_offset & ~3);
+ break;
+ case JFFS2_FEATURE_ROCOMPAT:
+- printk(KERN_NOTICE "Unknown ROCOMPAT nodetype %04X at %08X\n", je16_to_cpu(node.u.nodetype), ref_offset(ref));
++ printk(KERN_NOTICE "Unknown ROCOMPAT nodetype %04X at %08X\n", node.u.nodetype, ref->flash_offset & ~3);
+ break;
+ case JFFS2_FEATURE_RWCOMPAT_COPY:
+- printk(KERN_NOTICE "Unknown RWCOMPAT_COPY nodetype %04X at %08X\n", je16_to_cpu(node.u.nodetype), ref_offset(ref));
++ printk(KERN_NOTICE "Unknown RWCOMPAT_COPY nodetype %04X at %08X\n", node.u.nodetype, ref->flash_offset & ~3);
+ break;
+ case JFFS2_FEATURE_RWCOMPAT_DELETE:
+- printk(KERN_NOTICE "Unknown RWCOMPAT_DELETE nodetype %04X at %08X\n", je16_to_cpu(node.u.nodetype), ref_offset(ref));
++ printk(KERN_NOTICE "Unknown RWCOMPAT_DELETE nodetype %04X at %08X\n", node.u.nodetype, ref->flash_offset & ~3);
+ break;
+ }
+ }
+- spin_lock_bh(&c->erase_completion_lock);
+-
+ }
+- spin_unlock_bh(&c->erase_completion_lock);
+ *tnp = ret_tn;
+ *fdp = ret_fd;
+
+@@ -294,17 +272,16 @@
+
+ D2(printk(KERN_DEBUG "jffs2_get_ino_cache(): ino %u\n", ino));
+ spin_lock (&c->inocache_lock);
+-
+ ret = c->inocache_list[ino % INOCACHE_HASHSIZE];
+ while (ret && ret->ino < ino) {
+ ret = ret->next;
+ }
+-
+- if (ret && ret->ino != ino)
+- ret = NULL;
+
+ spin_unlock(&c->inocache_lock);
+
++ if (ret && ret->ino != ino)
++ ret = NULL;
++
+ D2(printk(KERN_DEBUG "jffs2_get_ino_cache found %p for ino %u\n", ret, ino));
+ return ret;
+ }
+@@ -322,7 +299,6 @@
+ }
+ new->next = *prev;
+ *prev = new;
+-
+ spin_unlock(&c->inocache_lock);
+ }
+
+@@ -340,7 +316,6 @@
+ if ((*prev) == old) {
+ *prev = old->next;
+ }
+-
+ spin_unlock(&c->inocache_lock);
+ }
+
+@@ -377,271 +352,3 @@
+ }
+ }
+
+-struct jffs2_node_frag *jffs2_lookup_node_frag(rb_root_t *fragtree, uint32_t offset)
+-{
+- /* The common case in lookup is that there will be a node
+- which precisely matches. So we go looking for that first */
+- rb_node_t *next;
+- struct jffs2_node_frag *prev = NULL;
+- struct jffs2_node_frag *frag = NULL;
+-
+- D2(printk(KERN_DEBUG "jffs2_lookup_node_frag(%p, %d)\n", fragtree, offset));
+-
+- next = fragtree->rb_node;
+-
+- while(next) {
+- frag = rb_entry(next, struct jffs2_node_frag, rb);
+-
+- D2(printk(KERN_DEBUG "Considering frag %d-%d (%p). left %p, right %p\n",
+- frag->ofs, frag->ofs+frag->size, frag, frag->rb.rb_left, frag->rb.rb_right));
+- if (frag->ofs + frag->size <= offset) {
+- D2(printk(KERN_DEBUG "Going right from frag %d-%d, before the region we care about\n",
+- frag->ofs, frag->ofs+frag->size));
+- /* Remember the closest smaller match on the way down */
+- if (!prev || frag->ofs > prev->ofs)
+- prev = frag;
+- next = frag->rb.rb_right;
+- } else if (frag->ofs > offset) {
+- D2(printk(KERN_DEBUG "Going left from frag %d-%d, after the region we care about\n",
+- frag->ofs, frag->ofs+frag->size));
+- next = frag->rb.rb_left;
+- } else {
+- D2(printk(KERN_DEBUG "Returning frag %d,%d, matched\n",
+- frag->ofs, frag->ofs+frag->size));
+- return frag;
+- }
+- }
+-
+- /* Exact match not found. Go back up looking at each parent,
+- and return the closest smaller one */
+-
+- if (prev)
+- D2(printk(KERN_DEBUG "No match. Returning frag %d,%d, closest previous\n",
+- prev->ofs, prev->ofs+prev->size));
+- else
+- D2(printk(KERN_DEBUG "Returning NULL, empty fragtree\n"));
+-
+- return prev;
+-}
+-
+-/* Pass 'c' argument to indicate that nodes should be marked obsolete as
+- they're killed. */
+-void jffs2_kill_fragtree(rb_root_t *root, struct jffs2_sb_info *c)
+-{
+- struct jffs2_node_frag *frag;
+- struct jffs2_node_frag *parent;
+-
+- if (!root->rb_node)
+- return;
+-
+- frag = (rb_entry(root->rb_node, struct jffs2_node_frag, rb));
+-
+- while(frag) {
+- if (frag->rb.rb_left) {
+- D2(printk(KERN_DEBUG "Going left from frag (%p) %d-%d\n",
+- frag, frag->ofs, frag->ofs+frag->size));
+- frag = frag_left(frag);
+- continue;
+- }
+- if (frag->rb.rb_right) {
+- D2(printk(KERN_DEBUG "Going right from frag (%p) %d-%d\n",
+- frag, frag->ofs, frag->ofs+frag->size));
+- frag = frag_right(frag);
+- continue;
+- }
+-
+- D2(printk(KERN_DEBUG "jffs2_kill_fragtree: frag at 0x%x-0x%x: node %p, frags %d--\n",
+- frag->ofs, frag->ofs+frag->size, frag->node,
+- frag->node?frag->node->frags:0));
+-
+- if (frag->node && !(--frag->node->frags)) {
+- /* Not a hole, and it's the final remaining frag
+- of this node. Free the node */
+- if (c)
+- jffs2_mark_node_obsolete(c, frag->node->raw);
+-
+- jffs2_free_full_dnode(frag->node);
+- }
+- parent = frag_parent(frag);
+- if (parent) {
+- if (frag_left(parent) == frag)
+- parent->rb.rb_left = NULL;
+- else
+- parent->rb.rb_right = NULL;
+- }
+-
+- jffs2_free_node_frag(frag);
+- frag = parent;
+- }
+-}
+-
+-void jffs2_fragtree_insert(struct jffs2_node_frag *newfrag, struct jffs2_node_frag *base)
+-{
+- rb_node_t *parent = &base->rb;
+- rb_node_t **link = &parent;
+-
+- D2(printk(KERN_DEBUG "jffs2_fragtree_insert(%p; %d-%d, %p)\n", newfrag,
+- newfrag->ofs, newfrag->ofs+newfrag->size, base));
+-
+- while (*link) {
+- parent = *link;
+- base = rb_entry(parent, struct jffs2_node_frag, rb);
+-
+- D2(printk(KERN_DEBUG "fragtree_insert considering frag at 0x%x\n", base->ofs));
+- if (newfrag->ofs > base->ofs)
+- link = &base->rb.rb_right;
+- else if (newfrag->ofs < base->ofs)
+- link = &base->rb.rb_left;
+- else {
+- printk(KERN_CRIT "Duplicate frag at %08x (%p,%p)\n", newfrag->ofs, newfrag, base);
+- BUG();
+- }
+- }
+-
+- rb_link_node(&newfrag->rb, &base->rb, link);
+-}
+-
+-rb_node_t *rb_next(rb_node_t *node)
+-{
+- /* If we have a right-hand child, go down and then left as far
+- as we can. */
+- if (node->rb_right) {
+- node = node->rb_right;
+- while (node->rb_left)
+- node=node->rb_left;
+- return node;
+- }
+-
+- /* No right-hand children. Everything down and left is
+- smaller than us, so any 'next' node must be in the general
+- direction of our parent. Go up the tree; any time the
+- ancestor is a right-hand child of its parent, keep going
+- up. First time it's a left-hand child of its parent, said
+- parent is our 'next' node. */
+- while (node->rb_parent && node == node->rb_parent->rb_right)
+- node = node->rb_parent;
+-
+- return node->rb_parent;
+-}
+-
+-rb_node_t *rb_prev(rb_node_t *node)
+-{
+- if (node->rb_left) {
+- node = node->rb_left;
+- while (node->rb_right)
+- node=node->rb_right;
+- return node;
+- }
+- while (node->rb_parent && node == node->rb_parent->rb_left)
+- node = node->rb_parent;
+-
+- return node->rb_parent;
+-}
+-
+-void rb_replace_node(rb_node_t *victim, rb_node_t *new, rb_root_t *root)
+-{
+- rb_node_t *parent = victim->rb_parent;
+-
+- /* Set the surrounding nodes to point to the replacement */
+- if (parent) {
+- if (victim == parent->rb_left)
+- parent->rb_left = new;
+- else
+- parent->rb_right = new;
+- } else {
+- root->rb_node = new;
+- }
+- if (victim->rb_left)
+- victim->rb_left->rb_parent = new;
+- if (victim->rb_right)
+- victim->rb_right->rb_parent = new;
+-
+- /* Copy the pointers/colour from the victim to the replacement */
+- *new = *victim;
+-}
+-
+-#ifdef CONFIG_JFFS2_DYNFRAGTREE
+-int jffs2_construct_fragtree(struct jffs2_sb_info *c, struct jffs2_inode_info *f)
+-{
+- struct jffs2_tmp_dnode_info *tn_list;
+- struct jffs2_full_dirent *dummy_fd_list;
+- uint32_t dummy_mctime, dummy_ver, highest_version;
+- int ret;
+-
+- if (! f->inocache) {
+- printk(KERN_WARNING "%s: ino %lu: f->inocache is NULL\n",
+- __func__, OFNI_EDONI_2SFFJ(f)->i_ino);
+- return -ENOENT;
+- }
+-
+- if (frag_first(&f->fragtree)) {
+- printk(KERN_NOTICE "%s: f->fragtree already exists\n", __func__);
+- return 0;
+- }
+-
+- highest_version = f->highest_version;
+- ret = jffs2_get_inode_nodes(c, f->inocache->ino, f, &tn_list, &dummy_fd_list,
+- &highest_version, &dummy_mctime, &dummy_ver);
+- if (ret) {
+- printk(KERN_CRIT "%s for ino %u returned %d\n",
+- __func__, f->inocache->ino, ret);
+- return ret;
+- }
+-
+- if (f->highest_version != highest_version) {
+- printk(KERN_NOTICE "%s: f->highest_version:%u != %u\n",
+- __func__, f->highest_version, highest_version);
+- f->highest_version = highest_version;
+- }
+-
+- if (dummy_fd_list) {
+- printk(KERN_NOTICE "%s for directory ino #%u\n",
+- __func__, f->inocache->ino);
+- return 0;
+- }
+-
+- while (tn_list) {
+- struct jffs2_tmp_dnode_info *tn;
+- struct jffs2_full_dnode *fn;
+-
+- tn = tn_list;
+- fn = tn->fn;
+- if (fn->size)
+- jffs2_add_full_dnode_to_inode(c, f, fn);
+- tn_list = tn->next;
+- jffs2_free_tmp_dnode_info(tn);
+- }
+-
+- return 0;
+-}
+-
+-void jffs2_shrink_inode(struct inode *inode)
+-{
+- struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+-
+- if (S_ISREG(inode->i_mode)) {
+- jffs2_kill_fragtree(&f->fragtree, NULL);
+- CLEAR_NR_FRAGS(f);
+- f->fragtree = RB_ROOT;
+- }
+-}
+-
+-uint32_t jffs2_get_nr_frags(struct inode *inode)
+-{
+- struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+- return f->nr_frags;
+-}
+-
+-int jffs2_frags_exists(struct inode *inode)
+-{
+- struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+- return f->fragtree.rb_node != NULL;
+-}
+-
+-#endif
+-
+-/*
+- * Local variables:
+- * c-basic-offset: 8
+- * End:
+- */
+diff -Nur linux/fs/jffs2/nodelist.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/nodelist.h
+--- linux/fs/jffs2/nodelist.h 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/nodelist.h 2003-06-23 01:47:04.000000000 +0700
+@@ -1,46 +1,45 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: nodelist.h,v 1.83 2002/09/06 16:46:29 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
+ *
+- * ChangeLog:
+- * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode
+- * 23-Nov-2002 Lineo Japan, Inc. add JFFS2_RESERVED_BLOCKS_DIRTY
+- * add JFFS2_RESERVED_BLOCKS_CLEAN
+- * 19-Nov-2002 Lineo Japan, Inc. add counter of fragtree elements
+- * 18-Nov-2002 Lineo Japan, Inc. add dynamic construction of fragtree
+- * 11-Nov-2002 Lineo Japan, Inc. add JFFS2_RESERVED_BLOCKS_ROOT
+- * 29-Oct-2002 Lineo Japan, Inc. add JFFS2_RESERVED_BLOCKS_BAD and JFFS2_MAX_CONT_GC
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
+ *
+- * ChangeLog:
+- * 05-Dec-2002 SHARP adjust REVERVED_BLOCKS values for storage-full
+- * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode
+- * 23-Nov-2002 Lineo Japan, Inc. add JFFS2_RESERVED_BLOCKS_DIRTY
+- * add JFFS2_RESERVED_BLOCKS_CLEAN
+- * 19-Nov-2002 Lineo Japan, Inc. add counter of fragtree elements
+- * 18-Nov-2002 Lineo Japan, Inc. add dynamic construction of fragtree
+- * 11-Nov-2002 Lineo Japan, Inc. add JFFS2_RESERVED_BLOCKS_ROOT
+- * 29-Oct-2002 Lineo Japan, Inc. add JFFS2_RESERVED_BLOCKS_BAD and JFFS2_MAX_CONT_GC
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: nodelist.h,v 1.46.2.2 2002/05/27 09:27:50 dwmw2 Exp $
+ *
+ */
+
+-#ifndef __JFFS2_NODELIST_H__
+-#define __JFFS2_NODELIST_H__
+-
+ #include <linux/config.h>
+ #include <linux/fs.h>
+
+-#include <linux/mtd/compatmac.h> /* For min/max in older kernels */
+-#include <linux/jffs2.h>
+ #include <linux/jffs2_fs_sb.h>
+ #include <linux/jffs2_fs_i.h>
+-#include "os-linux.h"
+
+ #ifndef CONFIG_JFFS2_FS_DEBUG
+ #define CONFIG_JFFS2_FS_DEBUG 2
+@@ -72,22 +71,16 @@
+ for this inode instead. The inode_cache will have NULL in the first
+ word so you know when you've got there :) */
+ struct jffs2_raw_node_ref *next_phys;
+- uint32_t flash_offset;
+- uint32_t totlen;
++ // __u32 ino;
++ __u32 flash_offset;
++ __u32 totlen;
++// __u16 nodetype;
+
+ /* flash_offset & 3 always has to be zero, because nodes are
+ always aligned at 4 bytes. So we have a couple of extra bits
+ to play with. So we set the least significant bit to 1 to
+ signify that the node is obsoleted by later nodes.
+ */
+-#define REF_UNCHECKED 0 /* We haven't yet checked the CRC or built its inode */
+-#define REF_OBSOLETE 1 /* Obsolete, can be completely ignored */
+-#define REF_PRISTINE 2 /* Completely clean. GC without looking */
+-#define REF_NORMAL 3 /* Possibly overlapped. Read the page and write again on GC */
+-#define ref_flags(ref) ((ref)->flash_offset & 3)
+-#define ref_offset(ref) ((ref)->flash_offset & ~3)
+-#define ref_obsolete(ref) (((ref)->flash_offset & 3) == REF_OBSOLETE)
+-#define mark_ref_normal(ref) do { (ref)->flash_offset = ref_offset(ref) | REF_NORMAL; } while(0)
+ };
+
+ /*
+@@ -114,18 +107,13 @@
+ chain. */
+ struct jffs2_inode_cache *next;
+ struct jffs2_raw_node_ref *nodes;
+- uint32_t ino;
++ __u32 ino;
+ int nlink;
+ };
+
+-#define INOCACHE_HASHSIZE 128
+-
+ struct jffs2_scan_info {
+ struct jffs2_full_dirent *dents;
+ struct jffs2_tmp_dnode_info *tmpnodes;
+- /* Latest i_size info */
+- uint32_t version;
+- uint32_t isize;
+ };
+ /*
+ Larger representation of a raw node, kept in-core only when the
+@@ -135,9 +123,9 @@
+ struct jffs2_full_dnode
+ {
+ struct jffs2_raw_node_ref *raw;
+- uint32_t ofs; /* Don't really need this, but optimisation */
+- uint32_t size;
+- uint32_t frags; /* Number of fragments which currently refer
++ __u32 ofs; /* Don't really need this, but optimisation */
++ __u32 size;
++ __u32 frags; /* Number of fragments which currently refer
+ to this node. When this reaches zero,
+ the node is obsolete.
+ */
+@@ -152,15 +140,15 @@
+ {
+ struct jffs2_tmp_dnode_info *next;
+ struct jffs2_full_dnode *fn;
+- uint32_t version;
++ __u32 version;
+ };
+
+ struct jffs2_full_dirent
+ {
+ struct jffs2_raw_node_ref *raw;
+ struct jffs2_full_dirent *next;
+- uint32_t version;
+- uint32_t ino; /* == zero for unlink */
++ __u32 version;
++ __u32 ino; /* == zero for unlink */
+ unsigned int nhash;
+ unsigned char type;
+ unsigned char name[0];
+@@ -171,22 +159,21 @@
+ */
+ struct jffs2_node_frag
+ {
+- rb_node_t rb;
++ struct jffs2_node_frag *next;
+ struct jffs2_full_dnode *node; /* NULL for holes */
+- uint32_t size;
+- uint32_t ofs; /* Don't really need this, but optimisation */
++ __u32 size;
++ __u32 ofs; /* Don't really need this, but optimisation */
+ };
+
+ struct jffs2_eraseblock
+ {
+ struct list_head list;
+ int bad_count;
+- uint32_t offset; /* of this block in the MTD */
++ __u32 offset; /* of this block in the MTD */
+
+- uint32_t used_size;
+- uint32_t dirty_size;
+- uint32_t wasted_size;
+- uint32_t free_size; /* Note that sector_size - free_size
++ __u32 used_size;
++ __u32 dirty_size;
++ __u32 free_size; /* Note that sector_size - free_size
+ is the address of the first free space */
+ struct jffs2_raw_node_ref *first_node;
+ struct jffs2_raw_node_ref *last_node;
+@@ -203,25 +190,25 @@
+ };
+
+ #define ACCT_SANITY_CHECK(c, jeb) do { \
+- if (jeb->used_size + jeb->dirty_size + jeb->free_size +jeb->wasted_size != c->sector_size) { \
++ if (jeb->used_size + jeb->dirty_size + jeb->free_size != c->sector_size) { \
+ printk(KERN_NOTICE "Eeep. Space accounting for block at 0x%08x is screwed\n", jeb->offset); \
+- printk(KERN_NOTICE "free 0x%08x + dirty 0x%08x + used %08x + wasted %08x != total %08x\n", \
+- jeb->free_size, jeb->dirty_size, jeb->used_size, jeb->wasted_size, c->sector_size); \
++ printk(KERN_NOTICE "free 0x%08x + dirty 0x%08x + used %08x != total %08x\n", \
++ jeb->free_size, jeb->dirty_size, jeb->used_size, c->sector_size); \
+ BUG(); \
+ } \
+- if (c->used_size + c->dirty_size + c->free_size + c->erasing_size + c->bad_size + c->wasted_size != c->flash_size) { \
++ if (c->used_size + c->dirty_size + c->free_size + c->erasing_size + c->bad_size != c->flash_size) { \
+ printk(KERN_NOTICE "Eeep. Space accounting superblock info is screwed\n"); \
+- printk(KERN_NOTICE "free 0x%08x + dirty 0x%08x + used %08x + erasing %08x + bad %08x + wasted %08x != total %08x\n", \
+- c->free_size, c->dirty_size, c->used_size, c->erasing_size, c->bad_size, c->wasted_size, c->flash_size); \
++ printk(KERN_NOTICE "free 0x%08x + dirty 0x%08x + used %08x + erasing %08x + bad %08x != total %08x\n", \
++ c->free_size, c->dirty_size, c->used_size, c->erasing_size, c->bad_size, c->flash_size); \
+ BUG(); \
+ } \
+ } while(0)
+
+ #define ACCT_PARANOIA_CHECK(jeb) do { \
+- uint32_t my_used_size = 0; \
++ __u32 my_used_size = 0; \
+ struct jffs2_raw_node_ref *ref2 = jeb->first_node; \
+ while (ref2) { \
+- if (!ref_obsolete(ref2)) \
++ if (!(ref2->flash_offset & 1)) \
+ my_used_size += ref2->totlen; \
+ ref2 = ref2->next_phys; \
+ } \
+@@ -238,44 +225,13 @@
+ #define JFFS2_RESERVED_BLOCKS_BASE 3 /* Number of free blocks there must be before we... */
+ #define JFFS2_RESERVED_BLOCKS_WRITE (JFFS2_RESERVED_BLOCKS_BASE + 2) /* ... allow a normal filesystem write */
+ #define JFFS2_RESERVED_BLOCKS_DELETION (JFFS2_RESERVED_BLOCKS_BASE + 1) /* ... allow a normal filesystem deletion */
+-#define JFFS2_RESERVED_BLOCKS_GCTRIGGER 39 /* ... wake up the GC thread */
++#define JFFS2_RESERVED_BLOCKS_GCTRIGGER (JFFS2_RESERVED_BLOCKS_BASE + 3) /* ... wake up the GC thread */
+ #define JFFS2_RESERVED_BLOCKS_GCBAD (JFFS2_RESERVED_BLOCKS_BASE + 1) /* ... pick a block from the bad_list to GC */
+ #define JFFS2_RESERVED_BLOCKS_GCMERGE (JFFS2_RESERVED_BLOCKS_BASE) /* ... merge pages when garbage collecting */
+-#define JFFS2_RESERVED_BLOCKS_BAD 24
+-#define JFFS2_RESERVED_BLOCKS_ROOT 5
+-#define JFFS2_RESERVED_BLOCKS_DIRTY 24
+-#define JFFS2_RESERVED_BLOCKS_CLEAN 12
+-#if JFFS2_RESERVED_BLOCKS_CLEAN < JFFS2_RESERVED_BLOCKS_WRITE + JFFS2_RESERVED_BLOCKS_ROOT
+-#error assure that JFFS2_RESERVED_BLOCKS_CLEAN >= JFFS2_RESERVED_BLOCKS_WRITE + JFFS2_RESERVED_BLOCKS_ROOT
+-#endif
+-#if JFFS2_RESERVED_BLOCKS_GCTRIGGER <= JFFS2_RESERVED_BLOCKS_WRITE + JFFS2_RESERVED_BLOCKS_ROOT + JFFS2_RESERVED_BLOCKS_DIRTY
+-#error assure that JFFS2_RESERVED_BLOCKS_GCTRIGGER > JFFS2_RESERVED_BLOCKS_WRITE + JFFS2_RESERVED_BLOCKS_ROOT + JFFS2_RESERVED_BLOCKS_DIRTY
+-#endif
+-#define JFFS2_MAX_CONT_GC 3000
+-
+-#define NR_AVAIL_BLOCKS(c) ((c)->nr_free_blocks + (c)->nr_erasing_blocks - max(0, JFFS2_RESERVED_BLOCKS_BAD - (c)->nr_bad_blocks))
+
+-/* How much dirty space before it goes on the very_dirty_list */
+-#define VERYDIRTY(c, size) ((size) >= ((c)->sector_size / 2))
+-
+-/* check if dirty space is more than 255 Byte */
+-#define ISDIRTY(size) ((size) > sizeof (struct jffs2_raw_inode) + JFFS2_MIN_DATA_LEN)
+-
+-/* node merge threshold */
+-#define JFFS2_FRAGS_NR_NODES_THRESHOLD_NORMAL 4
+-#define JFFS2_FRAGS_NR_NODES_THRESHOLD_FORCE 1
+
+ #define PAD(x) (((x)+3)&~3)
+
+-typedef enum { GCMODE_NORMAL, GCMODE_EFFECTIVE, } jffs2_gcmode_t;
+-
+-#define GC_EFFECTIVE_BLOCK_DIRTY_SIZE (1*1024)
+-#define GC_EFFECTIVE_BLOCK_DIRTY_SIZE_L (2*1024)
+-#define GC_EFFECTIVE_BLOCK_DIRTY_SIZE_LL (4*1024)
+-#define GC_EFFECTIVE_TOTAL_DIRTY_SIZE(c) (JFFS2_RESERVED_BLOCKS_DIRTY * (c)->sector_size)
+-#define GC_EFFECTIVE_TOTAL_DIRTY_SIZE_L(c) (JFFS2_RESERVED_BLOCKS_DIRTY * (c)->sector_size * 2)
+-#define GC_EFFECTIVE_TOTAL_DIRTY_SIZE_LL(c) (JFFS2_RESERVED_BLOCKS_DIRTY * (c)->sector_size * 4)
+-
+ static inline int jffs2_raw_ref_to_inum(struct jffs2_raw_node_ref *raw)
+ {
+ while(raw->next_in_ino) {
+@@ -285,111 +241,43 @@
+ return ((struct jffs2_inode_cache *)raw)->ino;
+ }
+
+-static inline struct jffs2_node_frag *frag_first(rb_root_t *root)
+-{
+- rb_node_t *node = root->rb_node;
+-
+- if (!node)
+- return NULL;
+- while(node->rb_left)
+- node = node->rb_left;
+- return rb_entry(node, struct jffs2_node_frag, rb);
+-}
+-#define rb_parent(rb) ((rb)->rb_parent)
+-#define frag_next(frag) rb_entry(rb_next(&(frag)->rb), struct jffs2_node_frag, rb)
+-#define frag_prev(frag) rb_entry(rb_prev(&(frag)->rb), struct jffs2_node_frag, rb)
+-#define frag_parent(frag) rb_entry(rb_parent(&(frag)->rb), struct jffs2_node_frag, rb)
+-#define frag_left(frag) rb_entry((frag)->rb.rb_left, struct jffs2_node_frag, rb)
+-#define frag_right(frag) rb_entry((frag)->rb.rb_right, struct jffs2_node_frag, rb)
+-#define frag_erase(frag, list) rb_erase(&frag->rb, list);
+-
+ /* nodelist.c */
+ D1(void jffs2_print_frag_list(struct jffs2_inode_info *f));
+ void jffs2_add_fd_to_list(struct jffs2_sb_info *c, struct jffs2_full_dirent *new, struct jffs2_full_dirent **list);
+ void jffs2_add_tn_to_list(struct jffs2_tmp_dnode_info *tn, struct jffs2_tmp_dnode_info **list);
+ int jffs2_get_inode_nodes(struct jffs2_sb_info *c, ino_t ino, struct jffs2_inode_info *f,
+ struct jffs2_tmp_dnode_info **tnp, struct jffs2_full_dirent **fdp,
+- uint32_t *highest_version, uint32_t *latest_mctime,
+- uint32_t *mctime_ver);
++ __u32 *highest_version, __u32 *latest_mctime,
++ __u32 *mctime_ver);
+ struct jffs2_inode_cache *jffs2_get_ino_cache(struct jffs2_sb_info *c, int ino);
+ void jffs2_add_ino_cache (struct jffs2_sb_info *c, struct jffs2_inode_cache *new);
+ void jffs2_del_ino_cache(struct jffs2_sb_info *c, struct jffs2_inode_cache *old);
+ void jffs2_free_ino_caches(struct jffs2_sb_info *c);
+ void jffs2_free_raw_node_refs(struct jffs2_sb_info *c);
+-struct jffs2_node_frag *jffs2_lookup_node_frag(rb_root_t *fragtree, uint32_t offset);
+-void jffs2_kill_fragtree(rb_root_t *root, struct jffs2_sb_info *c_delete);
+-void jffs2_fragtree_insert(struct jffs2_node_frag *newfrag, struct jffs2_node_frag *base);
+-rb_node_t *rb_next(rb_node_t *);
+-rb_node_t *rb_prev(rb_node_t *);
+-void rb_replace_node(rb_node_t *victim, rb_node_t *new, rb_root_t *root);
+
+ /* nodemgmt.c */
+-int jffs2_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uint32_t *ofs, uint32_t *len, int prio);
+-int jffs2_reserve_space_gc(struct jffs2_sb_info *c, uint32_t minsize, uint32_t *ofs, uint32_t *len);
+-int jffs2_add_physical_node_ref(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *new);
++int jffs2_reserve_space(struct jffs2_sb_info *c, __u32 minsize, __u32 *ofs, __u32 *len, int prio);
++int jffs2_reserve_space_gc(struct jffs2_sb_info *c, __u32 minsize, __u32 *ofs, __u32 *len);
++int jffs2_add_physical_node_ref(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *new, __u32 len, int dirty);
+ void jffs2_complete_reservation(struct jffs2_sb_info *c);
+ void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *raw);
+-void jffs2_dump_block_lists(struct jffs2_sb_info *c);
+
+ /* write.c */
+-int jffs2_do_new_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, uint32_t mode, struct jffs2_raw_inode *ri);
+-struct jffs2_full_dnode *jffs2_write_dnode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, struct jffs2_raw_inode *ri, const unsigned char *data, uint32_t datalen, uint32_t flash_ofs, uint32_t *writelen);
+-struct jffs2_full_dirent *jffs2_write_dirent(struct jffs2_sb_info *c, struct jffs2_inode_info *f, struct jffs2_raw_dirent *rd, const unsigned char *name, uint32_t namelen, uint32_t flash_ofs, uint32_t *writelen);
+-int jffs2_write_inode_range(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
+- struct jffs2_raw_inode *ri, unsigned char *buf,
+- uint32_t offset, uint32_t writelen, uint32_t *retlen);
+-int jffs2_do_create(struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, struct jffs2_inode_info *f, struct jffs2_raw_inode *ri, const char *name, int namelen);
+-int jffs2_do_unlink(struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, const char *name, int namelen, struct jffs2_inode_info *dead_f);
+-int jffs2_do_link (struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, uint32_t ino, uint8_t type, const char *name, int namelen);
+-
++struct inode *jffs2_new_inode (struct inode *dir_i, int mode, struct jffs2_raw_inode *ri);
++struct jffs2_full_dnode *jffs2_write_dnode(struct inode *inode, struct jffs2_raw_inode *ri, const unsigned char *data, __u32 datalen, __u32 flash_ofs, __u32 *writelen);
++struct jffs2_full_dirent *jffs2_write_dirent(struct inode *inode, struct jffs2_raw_dirent *rd, const unsigned char *name, __u32 namelen, __u32 flash_ofs, __u32 *writelen);
+
+ /* readinode.c */
+-int jffs2_truncate_fraglist_1 (struct jffs2_sb_info *c, rb_root_t *list, uint32_t size);
+-#ifdef CONFIG_JFFS2_DYNFRAGTREE
+-static inline void jffs2_truncate_fraglist (struct jffs2_sb_info *c, struct jffs2_inode_info *f, uint32_t size)
+-{
+- f->nr_frags -= jffs2_truncate_fraglist_1(c, &f->fragtree, size);
+-}
+-int jffs2_add_full_dnode_to_fraglist_1(struct jffs2_sb_info *c, rb_root_t *list, struct jffs2_full_dnode *fn, int* added_frags);
+-static inline int jffs2_add_full_dnode_to_fraglist(struct jffs2_sb_info *c, rb_root_t *list, struct jffs2_full_dnode *fn)
+-{
+- int dummy = 0;
+- return jffs2_add_full_dnode_to_fraglist_1(c, list, fn, &dummy);
+-}
+-
+-#define ADDED_FRAGS_INC() ((*added_frags)++)
+-#define ADDED_FRAGS_DEC() ((*added_frags)--)
+-#define CLEAR_NR_FRAGS(f) ((f)->nr_frags = 0)
+-
+-static inline void jffs2_check_nr_frags(struct jffs2_inode_info *f)
+-{
+- struct jffs2_node_frag *frag;
+- uint32_t count = 0;
+- for (frag = frag_first(&f->fragtree); frag; frag = frag_next(frag))
+- count++;
+- if (count != f->nr_frags) {
+- printk("ino #%lu: nr_frags:%u != %u\n", OFNI_EDONI_2SFFJ(f)->i_ino, f->nr_frags, count);
+- }
+- else
+- printk("ino #%lu: nr_frags:%u\n", OFNI_EDONI_2SFFJ(f)->i_ino, f->nr_frags);
+-}
+-#else
+-static inline void jffs2_truncate_fraglist (struct jffs2_sb_info *c, struct jffs2_inode_info *f, uint32_t size)
+-{
+- jffs2_truncate_fraglist_1(c, &f->fragtree, size);
+-}
+-int jffs2_add_full_dnode_to_fraglist(struct jffs2_sb_info *c, rb_root_t *list, struct jffs2_full_dnode *fn);
+-
+-#define ADDED_FRAGS_INC()
+-#define ADDED_FRAGS_DEC()
+-#define CLEAR_NR_FRAGS(f)
+-#endif
++void jffs2_truncate_fraglist (struct jffs2_sb_info *c, struct jffs2_node_frag **list, __u32 size);
++int jffs2_add_full_dnode_to_fraglist(struct jffs2_sb_info *c, struct jffs2_node_frag **list, struct jffs2_full_dnode *fn);
+ int jffs2_add_full_dnode_to_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, struct jffs2_full_dnode *fn);
+-int jffs2_do_read_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
+- uint32_t ino, struct jffs2_raw_inode *latest_node);
+-void jffs2_do_clear_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f);
++void jffs2_read_inode (struct inode *);
++void jffs2_clear_inode (struct inode *);
+
+ /* malloc.c */
++void jffs2_free_tmp_dnode_info_list(struct jffs2_tmp_dnode_info *tn);
++void jffs2_free_full_dirent_list(struct jffs2_full_dirent *fd);
++
+ int jffs2_create_slab_caches(void);
+ void jffs2_destroy_slab_caches(void);
+
+@@ -411,85 +299,52 @@
+ void jffs2_free_inode_cache(struct jffs2_inode_cache *);
+
+ /* gc.c */
+-int jffs2_garbage_collect_pass(struct jffs2_sb_info *c, jffs2_gcmode_t);
++int jffs2_garbage_collect_pass(struct jffs2_sb_info *c);
++
++/* background.c */
++int jffs2_start_garbage_collect_thread(struct jffs2_sb_info *c);
++void jffs2_stop_garbage_collect_thread(struct jffs2_sb_info *c);
++void jffs2_garbage_collect_trigger(struct jffs2_sb_info *c);
++
++/* dir.c */
++extern struct file_operations jffs2_dir_operations;
++extern struct inode_operations jffs2_dir_inode_operations;
++
++/* file.c */
++extern struct file_operations jffs2_file_operations;
++extern struct inode_operations jffs2_file_inode_operations;
++extern struct address_space_operations jffs2_file_address_operations;
++int jffs2_null_fsync(struct file *, struct dentry *, int);
++int jffs2_setattr (struct dentry *dentry, struct iattr *iattr);
++int jffs2_do_readpage_nolock (struct inode *inode, struct page *pg);
++int jffs2_do_readpage_unlock (struct inode *inode, struct page *pg);
++int jffs2_readpage (struct file *, struct page *);
++int jffs2_prepare_write (struct file *, struct page *, unsigned, unsigned);
++int jffs2_commit_write (struct file *, struct page *, unsigned, unsigned);
++
++/* ioctl.c */
++int jffs2_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
+
+ /* read.c */
+ int jffs2_read_dnode(struct jffs2_sb_info *c, struct jffs2_full_dnode *fd, unsigned char *buf, int ofs, int len);
+-int jffs2_read_inode_range(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
+- unsigned char *buf, uint32_t offset, uint32_t len);
+-char *jffs2_getlink(struct jffs2_sb_info *c, struct jffs2_inode_info *f);
+-
+
+ /* compr.c */
+ unsigned char jffs2_compress(unsigned char *data_in, unsigned char *cpage_out,
+- uint32_t *datalen, uint32_t *cdatalen);
++ __u32 *datalen, __u32 *cdatalen);
+ int jffs2_decompress(unsigned char comprtype, unsigned char *cdata_in,
+- unsigned char *data_out, uint32_t cdatalen, uint32_t datalen);
++ unsigned char *data_out, __u32 cdatalen, __u32 datalen);
+
+ /* scan.c */
+ int jffs2_scan_medium(struct jffs2_sb_info *c);
+-void jffs2_rotate_lists(struct jffs2_sb_info *c);
+
+ /* build.c */
+-int jffs2_do_mount_fs(struct jffs2_sb_info *c);
++int jffs2_build_filesystem(struct jffs2_sb_info *c);
++
++/* symlink.c */
++extern struct inode_operations jffs2_symlink_inode_operations;
+
+ /* erase.c */
+ void jffs2_erase_block(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb);
+ void jffs2_erase_pending_blocks(struct jffs2_sb_info *c);
+ void jffs2_mark_erased_blocks(struct jffs2_sb_info *c);
+ void jffs2_erase_pending_trigger(struct jffs2_sb_info *c);
+-
+-#ifdef CONFIG_JFFS2_FS_NAND
+-/* wbuf.c */
+-int jffs2_flush_wbuf(struct jffs2_sb_info *c, int pad);
+-int jffs2_check_nand_cleanmarker(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb);
+-int jffs2_write_nand_cleanmarker(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb);
+-int jffs2_nand_read_failcnt(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb);
+-#endif
+-
+-/* compr_zlib.c */
+-int jffs2_zlib_init(void);
+-void jffs2_zlib_exit(void);
+-
+-/* dynamic construction of fragtree */
+-#ifdef CONFIG_JFFS2_DYNFRAGTREE
+-int jffs2_construct_fragtree(struct jffs2_sb_info*, struct jffs2_inode_info*);
+-static inline int jffs2_construct_fragtree_nolock_if_missing(struct jffs2_sb_info* c,
+- struct jffs2_inode_info* f)
+-{
+- if (S_ISREG(OFNI_EDONI_2SFFJ(f)->i_mode) && ! frag_first(&f->fragtree))
+- return jffs2_construct_fragtree(c, f);
+- else
+- return 0;
+-}
+-
+-static inline int jffs2_construct_fragtree_if_missing(struct jffs2_sb_info* c,
+- struct jffs2_inode_info* f)
+-{
+- if (S_ISREG(OFNI_EDONI_2SFFJ(f)->i_mode) && ! frag_first(&f->fragtree)) {
+- int ret;
+-
+- down(&f->sem);
+- ret = jffs2_construct_fragtree(c, f);
+- up(&f->sem);
+-
+- return ret;
+- }
+- else
+- return 0;
+-}
+-#else
+-static inline int jffs2_construct_fragtree_nolock_if_missing(struct jffs2_sb_info* c,
+- struct jffs2_inode_info* f)
+-{
+- return 0;
+-}
+-
+-static inline int jffs2_construct_fragtree_if_missing(struct jffs2_sb_info* c,
+- struct jffs2_inode_info* f)
+-{
+- return 0;
+-}
+-#endif
+-
+-#endif /* __JFFS2_NODELIST_H__ */
+diff -Nur linux/fs/jffs2/nodemerge.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/nodemerge.c
+--- linux/fs/jffs2/nodemerge.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/nodemerge.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,118 +0,0 @@
+-/*
+- * fs/jffs2/nodemerge.c
+- *
+- * Copyright (C) 2002 Lineo Japan, Inc.
+- *
+- * May be copied or modified under the terms of the GNU General Public
+- * License. See linux/COPYING for more information.
+- *
+- * $Id: nodemerge.c,v 1.4 2002/12/19 02:42:45 yamade Exp $
+- *
+- * ChangLog:
+- * 05-Dec-2002 SHARP nodemerge-thershold is changable
+- */
+-
+-#include <linux/kernel.h>
+-#include <linux/fs.h>
+-#include <linux/rbtree.h>
+-#include <linux/pagemap.h>
+-#include <linux/jffs2_fs_i.h>
+-#include "nodelist.h"
+-#include "nodemerge.h"
+-
+-/*
+- * return number of jffs2_node_frags for specified page.
+- */
+-static int
+-jffs2_count_node_frags(rb_root_t* fragtree,
+- unsigned long page_index)
+-{
+- struct jffs2_node_frag* frag;
+- uint32_t offset = page_index << PAGE_CACHE_SHIFT;
+- uint32_t next_offset = (page_index + 1) << PAGE_CACHE_SHIFT;
+- int count = 0;
+-
+- for (frag = jffs2_lookup_node_frag(fragtree, offset);
+- frag && frag->ofs < offset; frag = frag_next(frag))
+- ;
+- while (frag && frag->ofs < next_offset) {
+- count++;
+- frag = frag_next(frag);
+- }
+-
+- return count;
+-}
+-
+-
+-static uint32_t
+-frag_totlen(const struct jffs2_node_frag* frag)
+-{
+- return frag->node ? frag->node->raw->totlen : 0;
+-}
+-
+-
+-/*
+- * return most dirty block in the page.
+- */
+-static struct jffs2_eraseblock*
+-jffs2_most_dirty_block_in_page(const struct jffs2_sb_info* c,
+- rb_root_t* fragtree,
+- unsigned long page_index)
+-{
+- struct jffs2_node_frag* frag;
+- uint32_t offset = page_index << PAGE_CACHE_SHIFT;
+- uint32_t next_offset = (page_index + 1) << PAGE_CACHE_SHIFT;
+- struct jffs2_eraseblock* ret_jeb = 0;
+- uint32_t dirty_size = 0;
+-
+- for (frag = jffs2_lookup_node_frag(fragtree, offset);
+- frag && frag->ofs < next_offset; frag = frag_next(frag)) {
+- struct jffs2_eraseblock* jeb;
+-
+- if (! frag->node)
+- continue;
+-
+- jeb = &c->blocks[frag->node->raw->flash_offset / c->sector_size];
+- if (jeb == c->gcblock) /* this page is been gcing */
+- return NULL;
+- else if (jeb != c->nextblock &&
+- jeb->wasted_size + jeb->dirty_size + frag_totlen(frag) > dirty_size) {
+- ret_jeb = jeb;
+- dirty_size = jeb->wasted_size + jeb->dirty_size;
+- }
+- }
+- return ret_jeb;
+-}
+-
+-
+-/*
+- * Must be called with the f->sem held.
+- */
+-void
+-jffs2_merge_nodes(struct jffs2_sb_info* c,
+- struct jffs2_inode_info* f,
+- uint32_t size, int frags_threshold)
+-{
+- unsigned long i;
+- unsigned long nr_pages = (size + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
+-
+- for (i = 0; i < nr_pages; i++) {
+- struct jffs2_eraseblock* jeb;
+-
+- if (jffs2_count_node_frags(&f->fragtree, i) <= frags_threshold)
+- continue;
+-
+- jeb = jffs2_most_dirty_block_in_page(c, &f->fragtree, i);
+- if (! jeb)
+- continue;
+-
+- /* must do erase_completion_lock, because jeb may be linked to
+- * the free_list */
+- spin_lock_bh(&c->erase_completion_lock);
+- list_del(&jeb->list);
+- list_add_tail(&jeb->list, &c->nodemerge_list);
+- spin_unlock_bh(&c->erase_completion_lock);
+- }
+-
+- jffs2_garbage_collect_trigger(c);
+-}
+diff -Nur linux/fs/jffs2/nodemerge.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/nodemerge.h
+--- linux/fs/jffs2/nodemerge.h 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/nodemerge.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,24 +0,0 @@
+-/*
+- * fs/jffs2/nodemerge.h
+- *
+- * Copyright (C) 2002 Lineo Japan, Inc.
+- *
+- * May be copied or modified under the terms of the GNU General Public
+- * License. See linux/COPYING for more information.
+- *
+- * $Id: nodemerge.h,v 1.3 2002/12/19 02:42:45 yamade Exp $
+- *
+- * ChangLog:
+- * 05-Dec-2002 SHARP nodemerge-thershold is changable
+- */
+-
+-#ifndef __JFFS2_NODEMERGE_H__
+-#define __JFFS2_NODEMERGE_H__
+-
+-#ifdef CONFIG_JFFS2_NODEMERGE
+-void jffs2_merge_nodes(struct jffs2_sb_info*, struct jffs2_inode_info*, uint32_t, int);
+-#else
+-static inline void jffs2_merge_nodes(struct jffs2_sb_info* c, struct jffs2_inode_info* f, uint32_t size, int frags_threshold) { }
+-#endif
+-
+-#endif
+diff -Nur linux/fs/jffs2/nodemgmt.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/nodemgmt.c
+--- linux/fs/jffs2/nodemgmt.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/nodemgmt.c 2003-06-23 01:47:04.000000000 +0700
+@@ -1,37 +1,43 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: nodemgmt.c,v 1.77 2002/09/06 16:46:29 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
++ *
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
+ *
+- * ChangeLog:
+- * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode
+- * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility
+- * 11-Nov-2002 Lineo Japan, Inc. add reserved blocks for superuser
+- * 29-Oct-2002 Lineo Japan, Inc. add reserved blocks for badblocks
+- * add c->cont_gc_count
+- * 24-Oct-2002 Lineo Japan, Inc. separate jffs2_reserve_space into
+- * *_normal and *_deletion
+- *
+- * ChangeLog:
+- * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode
+- * 24-Nov-2002 SHARP modify storage-full conditions, and add erasing_dirty_size
+- * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility
+- * 11-Nov-2002 Lineo Japan, Inc. add reserved blocks for superuser
+- * 29-Oct-2002 Lineo Japan, Inc. add reserved blocks for badblocks
+- * add c->cont_gc_count
+- * 24-Oct-2002 Lineo Japan, Inc. separate jffs2_reserve_space into
+- * *_normal and *_deletion
++ * $Id: nodemgmt.c,v 1.45.2.1 2002/02/23 14:13:34 dwmw2 Exp $
+ *
+ */
+
+ #include <linux/kernel.h>
+ #include <linux/slab.h>
++#include <linux/jffs2.h>
+ #include <linux/mtd/mtd.h>
+ #include <linux/interrupt.h>
+ #include "nodelist.h"
+@@ -56,134 +62,17 @@
+ * for the requested allocation.
+ */
+
+-static int jffs2_do_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uint32_t *ofs, uint32_t *len);
++static int jffs2_do_reserve_space(struct jffs2_sb_info *c, __u32 minsize, __u32 *ofs, __u32 *len);
+
+-static inline int jffs2_reserve_space_normal(struct jffs2_sb_info *c, uint32_t minsize, uint32_t *ofs, uint32_t *len)
++int jffs2_reserve_space(struct jffs2_sb_info *c, __u32 minsize, __u32 *ofs, __u32 *len, int prio)
+ {
+- int ret;
+- int reserved_blocks_root = capable(CAP_SYS_ADMIN) ? 0 : JFFS2_RESERVED_BLOCKS_ROOT;
+- int reserved_blocks = JFFS2_RESERVED_BLOCKS_WRITE + reserved_blocks_root;
+- uint32_t dirty_now, erasing_dirty_now, nonerasing_dirty_now;
+- int32_t avail_blocks, avail_blocks_old;
+-
+- avail_blocks_old = -1;
+-
+- do {
+- while(NR_AVAIL_BLOCKS(c) < reserved_blocks) {
+- up(&c->alloc_sem);
+-
+- dirty_now = c->dirty_size;
+- erasing_dirty_now = c->erasing_dirty_size;
+- nonerasing_dirty_now = ((dirty_now >= erasing_dirty_now) ? (dirty_now - erasing_dirty_now) : 0);
+- avail_blocks = NR_AVAIL_BLOCKS(c);
+-
+- if (avail_blocks_old != avail_blocks){
+- //printk(KERN_DEBUG "jffs2-normal-log: TIME=%d, NR_AVAIL_BLOCKS=%d, avail_blocks_old=%d, cont_gc_count=%d, dirty_size=%d, free_size=%d, erasing_size=%d, erasing_dirty_size=%d\n", jiffies, avail_blocks, avail_blocks_old, c->cont_gc_count, dirty_now, c->free_size, c->erasing_size, erasing_dirty_now);
+- avail_blocks_old = avail_blocks;
+- }
+-
+- if (c->cont_gc_count >= JFFS2_MAX_CONT_GC ||
+- avail_blocks <= 1 + reserved_blocks_root ||
+- dirty_now < c->sector_size ||
+- nonerasing_dirty_now / c->sector_size < JFFS2_RESERVED_BLOCKS_DIRTY ||
+- avail_blocks + nonerasing_dirty_now / c->sector_size - JFFS2_RESERVED_BLOCKS_DIRTY < reserved_blocks){
+-
+- D1(printk(KERN_DEBUG "jffs2-normal-err: TIME=%lu, NR_AVAIL_BLOCKS=%d, avail_blocks_old=%d, cont_gc_count=%d, dirty_size=%d, free_size=%d, erasing_size=%d, erasing_dirty_size=%d\n", jiffies, avail_blocks, avail_blocks_old, c->cont_gc_count, dirty_now, c->free_size, c->erasing_size, erasing_dirty_now));
+- spin_unlock_bh(&c->erase_completion_lock);
+- return -ENOSPC;
+- }
+- c->cont_gc_count++;
+-
+- D1(printk(KERN_DEBUG "Triggering GC pass. nr_free_blocks %d, nr_erasing_blocks %d, free_size 0x%08x, dirty_size 0x%08x, wasted_size 0x%08x, used_size 0x%08x, erasing_size 0x%08x, bad_size 0x%08x (total 0x%08x of 0x%08x)\n",
+- c->nr_free_blocks, c->nr_erasing_blocks, c->free_size, c->dirty_size, c->wasted_size, c->used_size, c->erasing_size, c->bad_size,
+- c->free_size + c->dirty_size + c->wasted_size + c->used_size + c->erasing_size + c->bad_size, c->flash_size));
+- spin_unlock_bh(&c->erase_completion_lock);
+-
+- ret = jffs2_garbage_collect_pass(c, GCMODE_NORMAL);
+- if (ret)
+- return ret;
+-
+- cond_resched();
+-
+- if (signal_pending(current))
+- return -EINTR;
+-
+- down(&c->alloc_sem);
+- spin_lock_bh(&c->erase_completion_lock);
+- }
+- c->cont_gc_count = 0;
+-
+- ret = jffs2_do_reserve_space(c, minsize, ofs, len);
+- if (ret) {
+- D1(printk(KERN_DEBUG "jffs2_do_reserve_space: ret is %d\n", ret));
+- }
+- } while (ret == -EAGAIN);
+- spin_unlock_bh(&c->erase_completion_lock);
+- if (ret)
+- up(&c->alloc_sem);
+- return ret;
+-}
+-
+-static inline int jffs2_reserve_space_deletion(struct jffs2_sb_info *c, uint32_t minsize, uint32_t *ofs, uint32_t *len)
+-{
+- for (;;) {
+- int ret;
+-
+- c->cont_gc_count = 0;
+- ret = jffs2_do_reserve_space(c, minsize, ofs, len);
+- if (ret) {
+- D1(printk(KERN_DEBUG "jffs2_do_reserve_space: ret is %d\n", ret));
+- }
+-
+- if (ret == -ENOSPC) {
+- up(&c->alloc_sem);
+-
+- if ((c->nr_free_blocks + c->nr_erasing_blocks == 0 &&
+- c->nextblock == NULL && list_empty(&c->erasable_list)) ||
+- c->dirty_size < c->sector_size) {
+- D1(printk(KERN_DEBUG "jffs2-deletion-err: TIME=%lu, NR_AVAIL_BLOCKS=%d, dirty_size=%d, free_size=%d, erasing_size=%d, erasing_dirty_size=%d\n", jiffies, NR_AVAIL_BLOCKS(c), c->dirty_size, c->free_size, c->erasing_size, c->erasing_dirty_size));
+- spin_unlock_bh(&c->erase_completion_lock);
+- return -ENOSPC;
+- }
+- spin_unlock_bh(&c->erase_completion_lock);
+-
+- D1(printk(KERN_DEBUG "Triggering GC pass. nr_free_blocks %d, nr_erasing_blocks %d, free_size 0x%08x, dirty_size 0x%08x, wasted_size 0x%08x, used_size 0x%08x, erasing_size 0x%08x, bad_size 0x%08x (total 0x%08x of 0x%08x)\n",
+- c->nr_free_blocks, c->nr_erasing_blocks, c->free_size, c->dirty_size, c->wasted_size, c->used_size, c->erasing_size, c->bad_size,
+- c->free_size + c->dirty_size + c->wasted_size + c->used_size + c->erasing_size + c->bad_size, c->flash_size));
+- ret = jffs2_garbage_collect_pass(c, GCMODE_NORMAL);
+- if (ret)
+- return ret;
+-
+- cond_resched();
+-
+- if (signal_pending(current))
+- return -EINTR;
+-
+- down(&c->alloc_sem);
+- spin_lock_bh(&c->erase_completion_lock);
+- }
+- else if (ret != -EAGAIN) {
+- spin_unlock_bh(&c->erase_completion_lock);
+- if (ret)
+- up(&c->alloc_sem);
+- return ret;
+- }
+- }
+-}
+-
+-int jffs2_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uint32_t *ofs, uint32_t *len, int prio)
+-{
+-#if 0
+ int ret = -EAGAIN;
+ int blocksneeded = JFFS2_RESERVED_BLOCKS_WRITE;
+-#endif
+ /* align it */
+ minsize = PAD(minsize);
+
+-#if 0
+ if (prio == ALLOC_DELETION)
+ blocksneeded = JFFS2_RESERVED_BLOCKS_DELETION;
+-#endif
+
+ D1(printk(KERN_DEBUG "jffs2_reserve_space(): Requested 0x%x bytes\n", minsize));
+ down(&c->alloc_sem);
+@@ -193,29 +82,27 @@
+ spin_lock_bh(&c->erase_completion_lock);
+
+ /* this needs a little more thought */
+-#if 0
+ while(ret == -EAGAIN) {
+ while(c->nr_free_blocks + c->nr_erasing_blocks < blocksneeded) {
+ int ret;
+
+ up(&c->alloc_sem);
+-
+ if (c->dirty_size < c->sector_size) {
+- D1(printk(KERN_DEBUG "dirty size 0x%08x < sector size 0x%08x, returning -ENOSPC\n", c->dirty_size, c->sector_size));
++ D1(printk(KERN_DEBUG "Short on space, but total dirty size 0x%08x < sector size 0x%08x, so -ENOSPC\n", c->dirty_size, c->sector_size));
+ spin_unlock_bh(&c->erase_completion_lock);
+ return -ENOSPC;
+ }
+-
+- D1(printk(KERN_DEBUG "Triggering GC pass. nr_free_blocks %d, nr_erasing_blocks %d, free_size 0x%08x, dirty_size 0x%08x, wasted_size 0x%08x, used_size 0x%08x, erasing_size 0x%08x, bad_size 0x%08x (total 0x%08x of 0x%08x)\n",
+- c->nr_free_blocks, c->nr_erasing_blocks, c->free_size, c->dirty_size, c->wasted_size, c->used_size, c->erasing_size, c->bad_size,
+- c->free_size + c->dirty_size + c->wasted_size + c->used_size + c->erasing_size + c->bad_size, c->flash_size));
++ D1(printk(KERN_DEBUG "Triggering GC pass. nr_free_blocks %d, nr_erasing_blocks %d, free_size 0x%08x, dirty_size 0x%08x, used_size 0x%08x, erasing_size 0x%08x, bad_size 0x%08x (total 0x%08x of 0x%08x)\n",
++ c->nr_free_blocks, c->nr_erasing_blocks, c->free_size, c->dirty_size, c->used_size, c->erasing_size, c->bad_size,
++ c->free_size + c->dirty_size + c->used_size + c->erasing_size + c->bad_size, c->flash_size));
+ spin_unlock_bh(&c->erase_completion_lock);
+
+ ret = jffs2_garbage_collect_pass(c);
+ if (ret)
+ return ret;
+
+- cond_resched();
++ if (current->need_resched)
++ schedule();
+
+ if (signal_pending(current))
+ return -EINTR;
+@@ -233,23 +120,9 @@
+ if (ret)
+ up(&c->alloc_sem);
+ return ret;
+-#else
+- switch (prio) {
+- case ALLOC_NORMAL:
+- return jffs2_reserve_space_normal(c, minsize, ofs, len);
+-
+- case ALLOC_DELETION:
+- return jffs2_reserve_space_deletion(c, minsize, ofs, len);
+-
+- default:
+- printk("%s: prio = %d not supported\n", __func__, prio);
+- BUG();
+- return -EIO;
+- }
+-#endif
+ }
+
+-int jffs2_reserve_space_gc(struct jffs2_sb_info *c, uint32_t minsize, uint32_t *ofs, uint32_t *len)
++int jffs2_reserve_space_gc(struct jffs2_sb_info *c, __u32 minsize, __u32 *ofs, __u32 *len)
+ {
+ int ret = -EAGAIN;
+ minsize = PAD(minsize);
+@@ -268,46 +141,20 @@
+ }
+
+ /* Called with alloc sem _and_ erase_completion_lock */
+-static int jffs2_do_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uint32_t *ofs, uint32_t *len)
++static int jffs2_do_reserve_space(struct jffs2_sb_info *c, __u32 minsize, __u32 *ofs, __u32 *len)
+ {
+ struct jffs2_eraseblock *jeb = c->nextblock;
+
+ restart:
+ if (jeb && minsize > jeb->free_size) {
+ /* Skip the end of this block and file it as having some dirty space */
+- /* If there's a pending write to it, flush now */
+- if (c->wbuf_len) {
+- spin_unlock_bh(&c->erase_completion_lock);
+- D1(printk(KERN_DEBUG "jffs2_do_reserve_space: Flushing write buffer\n"));
+- jffs2_flush_wbuf(c, 1);
+- spin_lock_bh(&c->erase_completion_lock);
+- /* We know nobody's going to have changed nextblock. Just continue */
+- }
+- c->wasted_size += jeb->free_size;
++ c->dirty_size += jeb->free_size;
+ c->free_size -= jeb->free_size;
+- jeb->wasted_size += jeb->free_size;
++ jeb->dirty_size += jeb->free_size;
+ jeb->free_size = 0;
+-
+- /* Check, if we have a dirty block now, or if it was dirty already */
+- if (ISDIRTY (jeb->wasted_size + jeb->dirty_size)) {
+- c->dirty_size += jeb->wasted_size;
+- c->wasted_size -= jeb->wasted_size;
+- jeb->dirty_size += jeb->wasted_size;
+- jeb->wasted_size = 0;
+- if (VERYDIRTY(c, jeb->dirty_size)) {
+- D1(printk(KERN_DEBUG "Adding full erase block at 0x%08x to very_dirty_list (free 0x%08x, dirty 0x%08x, used 0x%08x\n",
+- jeb->offset, jeb->free_size, jeb->dirty_size, jeb->used_size));
+- list_add_tail(&jeb->list, &c->very_dirty_list);
+- } else {
+- D1(printk(KERN_DEBUG "Adding full erase block at 0x%08x to dirty_list (free 0x%08x, dirty 0x%08x, used 0x%08x\n",
+- jeb->offset, jeb->free_size, jeb->dirty_size, jeb->used_size));
+- list_add_tail(&jeb->list, &c->dirty_list);
+- }
+- } else {
+- D1(printk(KERN_DEBUG "Adding full erase block at 0x%08x to clean_list (free 0x%08x, dirty 0x%08x, used 0x%08x\n",
++ D1(printk(KERN_DEBUG "Adding full erase block at 0x%08x to dirty_list (free 0x%08x, dirty 0x%08x, used 0x%08x\n",
+ jeb->offset, jeb->free_size, jeb->dirty_size, jeb->used_size));
+- list_add_tail(&jeb->list, &c->clean_list);
+- }
++ list_add_tail(&jeb->list, &c->dirty_list);
+ c->nextblock = jeb = NULL;
+ }
+
+@@ -319,47 +166,20 @@
+
+ DECLARE_WAITQUEUE(wait, current);
+
+- if (!c->nr_erasing_blocks &&
+- !list_empty(&c->erasable_list)) {
+- struct jffs2_eraseblock *ejeb;
+-
+- ejeb = list_entry(c->erasable_list.next, struct jffs2_eraseblock, list);
+- list_del(&ejeb->list);
+- list_add_tail(&ejeb->list, &c->erase_pending_list);
+- c->erasing_dirty_size += ejeb->dirty_size;
+- c->nr_erasing_blocks++;
+- jffs2_erase_pending_trigger(c);
+- D1(printk(KERN_DEBUG "jffs2_do_reserve_space: Triggering erase of erasable block at 0x%08x\n",
+- ejeb->offset));
+- }
+-
+- if (!c->nr_erasing_blocks &&
+- !list_empty(&c->erasable_pending_wbuf_list)) {
+- D1(printk(KERN_DEBUG "jffs2_do_reserve_space: Flushing write buffer\n"));
+- /* c->nextblock is NULL, no update to c->nextblock allowed */
+- spin_unlock_bh(&c->erase_completion_lock);
+- jffs2_flush_wbuf(c, 1);
+- spin_lock_bh(&c->erase_completion_lock);
+- /* Have another go. It'll be on the erasable_list now */
+- return -EAGAIN;
+- }
+-
+ if (!c->nr_erasing_blocks) {
++// if (list_empty(&c->erasing_list) && list_empty(&c->erase_pending_list) && list_empty(c->erase_complete_list)) {
+ /* Ouch. We're in GC, or we wouldn't have got here.
+ And there's no space left. At all. */
+- printk(KERN_CRIT "Argh. No free space left for GC. nr_erasing_blocks is %d. nr_free_blocks is %d. (erasableempty: %s, erasingempty: %s, erasependingempty: %s)\n",
+- c->nr_erasing_blocks, c->nr_free_blocks, list_empty(&c->erasable_list)?"yes":"no",
+- list_empty(&c->erasing_list)?"yes":"no", list_empty(&c->erase_pending_list)?"yes":"no");
+- printk(KERN_DEBUG "jffs2-doreserve-err: TIME=%lu, NR_AVAIL_BLOCKS=%d, dirty_size=%d, free_size=%d, erasing_size=%d, erasing_dirty_size=%d\n", jiffies, NR_AVAIL_BLOCKS(c), c->dirty_size, c->free_size, c->erasing_size, c->erasing_dirty_size);
++ printk(KERN_CRIT "Argh. No free space left for GC. nr_erasing_blocks is %d. nr_free_blocks is %d. (erasingempty: %s, erasependingempty: %s)\n",
++ c->nr_erasing_blocks, c->nr_free_blocks, list_empty(&c->erasing_list)?"yes":"no", list_empty(&c->erase_pending_list)?"yes":"no");
+ return -ENOSPC;
+ }
+ /* Make sure this can't deadlock. Someone has to start the erases
+ of erase_pending blocks */
+ set_current_state(TASK_INTERRUPTIBLE);
+ add_wait_queue(&c->erase_wait, &wait);
+- D1(printk(KERN_DEBUG "Waiting for erases to complete. erasing_blocks is %d. (erasableempty: %s, erasingempty: %s, erasependingempty: %s)\n",
+- c->nr_erasing_blocks, list_empty(&c->erasable_list)?"yes":"no",
+- list_empty(&c->erasing_list)?"yes":"no", list_empty(&c->erase_pending_list)?"yes":"no"));
++ D1(printk(KERN_DEBUG "Waiting for erases to complete. erasing_blocks is %d. (erasingempty: %s, erasependingempty: %s)\n",
++ c->nr_erasing_blocks, list_empty(&c->erasing_list)?"yes":"no", list_empty(&c->erase_pending_list)?"yes":"no"));
+ if (!list_empty(&c->erase_pending_list)) {
+ D1(printk(KERN_DEBUG "Triggering pending erases\n"));
+ jffs2_erase_pending_trigger(c);
+@@ -381,8 +201,7 @@
+ list_del(next);
+ c->nextblock = jeb = list_entry(next, struct jffs2_eraseblock, list);
+ c->nr_free_blocks--;
+-
+- if (jeb->free_size != c->sector_size - c->cleanmarker_size) {
++ if (jeb->free_size != c->sector_size - sizeof(struct jffs2_unknown_node)) {
+ printk(KERN_WARNING "Eep. Block 0x%08x taken from free_list had free_size of 0x%08x!!\n", jeb->offset, jeb->free_size);
+ goto restart;
+ }
+@@ -391,20 +210,6 @@
+ enough space */
+ *ofs = jeb->offset + (c->sector_size - jeb->free_size);
+ *len = jeb->free_size;
+-
+- if (jeb->used_size == PAD(sizeof(struct jffs2_unknown_node)) &&
+- !jeb->first_node->next_in_ino) {
+- /* Only node in it beforehand was a CLEANMARKER node (we think).
+- So mark it obsolete now that there's going to be another node
+- in the block. This will reduce used_size to zero but We've
+- already set c->nextblock so that jffs2_mark_node_obsolete()
+- won't try to refile it to the dirty_list.
+- */
+- spin_unlock_bh(&c->erase_completion_lock);
+- jffs2_mark_node_obsolete(c, jeb->first_node);
+- spin_lock_bh(&c->erase_completion_lock);
+- }
+-
+ D1(printk(KERN_DEBUG "jffs2_do_reserve_space(): Giving 0x%x bytes at 0x%x\n", *len, *ofs));
+ return 0;
+ }
+@@ -412,9 +217,9 @@
+ /**
+ * jffs2_add_physical_node_ref - add a physical node reference to the list
+ * @c: superblock info
+- * @new: new node reference to add
++ * @ofs: physical location of this physical node
+ * @len: length of this physical node
+- * @dirty: dirty flag for new node
++ * @ino: inode number with which this physical node is associated
+ *
+ * Should only be used to report nodes for which space has been allocated
+ * by jffs2_reserve_space.
+@@ -422,57 +227,48 @@
+ * Must be called with the alloc_sem held.
+ */
+
+-int jffs2_add_physical_node_ref(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *new)
++int jffs2_add_physical_node_ref(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *new, __u32 len, int dirty)
+ {
+ struct jffs2_eraseblock *jeb;
+- uint32_t len = new->totlen;
+
+- jeb = &c->blocks[new->flash_offset / c->sector_size];
+- D1(printk(KERN_DEBUG "jffs2_add_physical_node_ref(): Node at 0x%x, size 0x%x\n", ref_offset(new), len));
++ len = PAD(len);
++ jeb = &c->blocks[(new->flash_offset & ~3) / c->sector_size];
++ D1(printk(KERN_DEBUG "jffs2_add_physical_node_ref(): Node at 0x%x, size 0x%x\n", new->flash_offset & ~3, len));
+ #if 1
+- if (jeb != c->nextblock || (ref_offset(new)) != jeb->offset + (c->sector_size - jeb->free_size)) {
++ if (jeb != c->nextblock || (new->flash_offset & ~3) != jeb->offset + (c->sector_size - jeb->free_size)) {
+ printk(KERN_WARNING "argh. node added in wrong place\n");
+ jffs2_free_raw_node_ref(new);
+ return -EINVAL;
+ }
+ #endif
+- spin_lock_bh(&c->erase_completion_lock);
+-
+ if (!jeb->first_node)
+ jeb->first_node = new;
+ if (jeb->last_node)
+ jeb->last_node->next_phys = new;
+ jeb->last_node = new;
+
++ spin_lock_bh(&c->erase_completion_lock);
+ jeb->free_size -= len;
+ c->free_size -= len;
+- if (ref_obsolete(new)) {
++ if (dirty) {
++ new->flash_offset |= 1;
+ jeb->dirty_size += len;
+ c->dirty_size += len;
+ } else {
+ jeb->used_size += len;
+ c->used_size += len;
+ }
+-
++ spin_unlock_bh(&c->erase_completion_lock);
+ if (!jeb->free_size && !jeb->dirty_size) {
+ /* If it lives on the dirty_list, jffs2_reserve_space will put it there */
+ D1(printk(KERN_DEBUG "Adding full erase block at 0x%08x to clean_list (free 0x%08x, dirty 0x%08x, used 0x%08x\n",
+ jeb->offset, jeb->free_size, jeb->dirty_size, jeb->used_size));
+- if (c->wbuf_len) {
+- /* Flush the last write in the block if it's outstanding */
+- spin_unlock_bh(&c->erase_completion_lock);
+- jffs2_flush_wbuf(c, 1);
+- spin_lock_bh(&c->erase_completion_lock);
+- }
+-
+ list_add_tail(&jeb->list, &c->clean_list);
+ c->nextblock = NULL;
+ }
+ ACCT_SANITY_CHECK(c,jeb);
+ ACCT_PARANOIA_CHECK(jeb);
+
+- spin_unlock_bh(&c->erase_completion_lock);
+-
+ return 0;
+ }
+
+@@ -490,14 +286,14 @@
+ int blocknr;
+ struct jffs2_unknown_node n;
+ int ret;
+- size_t retlen;
++ ssize_t retlen;
+
+ if(!ref) {
+ printk(KERN_NOTICE "EEEEEK. jffs2_mark_node_obsolete called with NULL node\n");
+ return;
+ }
+- if (ref_obsolete(ref)) {
+- D1(printk(KERN_DEBUG "jffs2_mark_node_obsolete called with already obsolete node at 0x%08x\n", ref_offset(ref)));
++ if (ref->flash_offset & 1) {
++ D1(printk(KERN_DEBUG "jffs2_mark_node_obsolete called with already obsolete node at 0x%08x\n", ref->flash_offset &~3));
+ return;
+ }
+ blocknr = ref->flash_offset / c->sector_size;
+@@ -514,18 +310,10 @@
+
+ spin_lock_bh(&c->erase_completion_lock);
+ jeb->used_size -= ref->totlen;
++ jeb->dirty_size += ref->totlen;
+ c->used_size -= ref->totlen;
+-
+- if ((jeb->dirty_size || ISDIRTY(jeb->wasted_size + ref->totlen)) && jeb != c->nextblock) {
+- jeb->dirty_size += ref->totlen + jeb->wasted_size;
+- c->dirty_size += ref->totlen + jeb->wasted_size;
+- c->wasted_size -= jeb->wasted_size;
+- jeb->wasted_size = 0;
+- } else {
+- jeb->wasted_size += ref->totlen;
+- c->wasted_size += ref->totlen;
+- }
+- ref->flash_offset = ref_offset(ref) | REF_OBSOLETE;
++ c->dirty_size += ref->totlen;
++ ref->flash_offset |= 1;
+
+ ACCT_SANITY_CHECK(c, jeb);
+
+@@ -540,281 +328,65 @@
+ spin_unlock_bh(&c->erase_completion_lock);
+ return;
+ }
+-
+ if (jeb == c->nextblock) {
+ D2(printk(KERN_DEBUG "Not moving nextblock 0x%08x to dirty/erase_pending list\n", jeb->offset));
++ } else if (jeb == c->gcblock) {
++ D2(printk(KERN_DEBUG "Not moving gcblock 0x%08x to dirty/erase_pending list\n", jeb->offset));
++#if 0 /* We no longer do this here. It can screw the wear levelling. If you have a lot of static
++ data and a few blocks free, and you just create new files and keep deleting/overwriting
++ them, then you'd keep erasing and reusing those blocks without ever moving stuff around.
++ So we leave completely obsoleted blocks on the dirty_list and let the GC delete them
++ when it finds them there. That way, we still get the 'once in a while, take a clean block'
++ to spread out the flash usage */
+ } else if (!jeb->used_size) {
+- if (jeb == c->gcblock) {
+- D1(printk(KERN_DEBUG "gcblock at 0x%08x completely dirtied. Clearing gcblock...\n", jeb->offset));
+- c->gcblock = NULL;
+- c->flags &= ~JFFS2_SB_FLAG_GCING_A_BLOCK;
+- } else {
+- D1(printk(KERN_DEBUG "Eraseblock at 0x%08x completely dirtied. Removing from (dirty?) list...\n", jeb->offset));
+- list_del(&jeb->list);
+- }
+- if (c->wbuf_len) {
+- D1(printk(KERN_DEBUG "...and adding to erasable_pending_wbuf_list\n"));
+- list_add_tail(&jeb->list, &c->erasable_pending_wbuf_list);
+-
+- /* We've changed the rules slightly. After
+- writing a node you now mustn't drop the
+- alloc_sem before you've finished all the
+- list management - this is so that when we
+- get here, we know that no other nodes have
+- been written, and the above check on wbuf
+- is valid - wbuf_len is nonzero IFF the node
+- which obsoletes this node is still in the
+- wbuf.
+-
+- So we BUG() if that new rule is broken, to
+- make sure we catch it and fix it.
+- */
+- if (!down_trylock(&c->alloc_sem)) {
+- up(&c->alloc_sem);
+- printk(KERN_CRIT "jffs2_mark_node_obsolete() called with wbuf active but alloc_sem not locked!\n");
+- BUG();
+- }
+- } else {
+- if (jiffies & 127) {
+- /* Most of the time, we just erase it immediately. Otherwise we
+- spend ages scanning it on mount, etc. */
+- D1(printk(KERN_DEBUG "...and adding to erase_pending_list\n"));
+- list_add_tail(&jeb->list, &c->erase_pending_list);
+- c->erasing_dirty_size += jeb->dirty_size;
+- c->nr_erasing_blocks++;
+- jffs2_erase_pending_trigger(c);
+- } else {
+- /* Sometimes, however, we leave it elsewhere so it doesn't get
+- immediately reused, and we spread the load a bit. */
+- D1(printk(KERN_DEBUG "...and adding to erasable_list\n"));
+- list_add_tail(&jeb->list, &c->erasable_list);
+- }
+- }
++ D1(printk(KERN_DEBUG "Eraseblock at 0x%08x completely dirtied. Removing from (dirty?) list...\n", jeb->offset));
++ list_del(&jeb->list);
++ D1(printk(KERN_DEBUG "...and adding to erase_pending_list\n"));
++ list_add_tail(&jeb->list, &c->erase_pending_list);
++ c->nr_erasing_blocks++;
++ jffs2_erase_pending_trigger(c);
++ // OFNI_BS_2SFFJ(c)->s_dirt = 1;
+ D1(printk(KERN_DEBUG "Done OK\n"));
+- } else if (jeb == c->gcblock) {
+- D2(printk(KERN_DEBUG "Not moving gcblock 0x%08x to dirty_list\n", jeb->offset));
+- } else if (ISDIRTY(jeb->dirty_size) && !ISDIRTY(jeb->dirty_size - ref->totlen)) {
++#endif
++ } else if (jeb->dirty_size == ref->totlen) {
+ D1(printk(KERN_DEBUG "Eraseblock at 0x%08x is freshly dirtied. Removing from clean list...\n", jeb->offset));
+ list_del(&jeb->list);
+ D1(printk(KERN_DEBUG "...and adding to dirty_list\n"));
+ list_add_tail(&jeb->list, &c->dirty_list);
+- } else if (VERYDIRTY(c, jeb->dirty_size) &&
+- !VERYDIRTY(c, jeb->dirty_size - ref->totlen)) {
+- D1(printk(KERN_DEBUG "Eraseblock at 0x%08x is now very dirty. Removing from dirty list...\n", jeb->offset));
+- list_del(&jeb->list);
+- D1(printk(KERN_DEBUG "...and adding to very_dirty_list\n"));
+- list_add_tail(&jeb->list, &c->very_dirty_list);
+- } else {
+- D1(printk(KERN_DEBUG "Eraseblock at 0x%08x not moved anywhere. (free 0x%08x, dirty 0x%08x, used 0x%08x)\n",
+- jeb->offset, jeb->free_size, jeb->dirty_size, jeb->used_size));
+- }
+-
++ }
+ spin_unlock_bh(&c->erase_completion_lock);
+
+- if (!jffs2_can_mark_obsolete(c))
++ if (c->mtd->type != MTD_NORFLASH && c->mtd->type != MTD_RAM)
+ return;
+- if (jffs2_is_readonly(c))
++ if (OFNI_BS_2SFFJ(c)->s_flags & MS_RDONLY)
+ return;
+
+- D1(printk(KERN_DEBUG "obliterating obsoleted node at 0x%08x\n", ref_offset(ref)));
+- ret = jffs2_flash_read(c, ref_offset(ref), sizeof(n), &retlen, (char *)&n);
++ D1(printk(KERN_DEBUG "obliterating obsoleted node at 0x%08x\n", ref->flash_offset &~3));
++ ret = c->mtd->read(c->mtd, ref->flash_offset &~3, sizeof(n), &retlen, (char *)&n);
+ if (ret) {
+- printk(KERN_WARNING "Read error reading from obsoleted node at 0x%08x: %d\n", ref_offset(ref), ret);
++ printk(KERN_WARNING "Read error reading from obsoleted node at 0x%08x: %d\n", ref->flash_offset &~3, ret);
+ return;
+ }
+ if (retlen != sizeof(n)) {
+- printk(KERN_WARNING "Short read from obsoleted node at 0x%08x: %d\n", ref_offset(ref), retlen);
++ printk(KERN_WARNING "Short read from obsoleted node at 0x%08x: %d\n", ref->flash_offset &~3, retlen);
+ return;
+ }
+- if (PAD(je32_to_cpu(n.totlen)) != PAD(ref->totlen)) {
+- printk(KERN_WARNING "Node totlen on flash (0x%08x) != totlen in node ref (0x%08x)\n", je32_to_cpu(n.totlen), ref->totlen);
++ if (PAD(n.totlen) != PAD(ref->totlen)) {
++ printk(KERN_WARNING "Node totlen on flash (0x%08x) != totlen in node ref (0x%08x)\n", n.totlen, ref->totlen);
+ return;
+ }
+- if (!(je16_to_cpu(n.nodetype) & JFFS2_NODE_ACCURATE)) {
+- D1(printk(KERN_DEBUG "Node at 0x%08x was already marked obsolete (nodetype 0x%04x\n", ref_offset(ref), je16_to_cpu(n.nodetype)));
++ if (!(n.nodetype & JFFS2_NODE_ACCURATE)) {
++ D1(printk(KERN_DEBUG "Node at 0x%08x was already marked obsolete (nodetype 0x%04x\n", ref->flash_offset &~3, n.nodetype));
+ return;
+ }
+- /* XXX FIXME: This is ugly now */
+- n.nodetype = cpu_to_je16(je16_to_cpu(n.nodetype) & ~JFFS2_NODE_ACCURATE);
+- ret = jffs2_flash_write(c, ref_offset(ref), sizeof(n), &retlen, (char *)&n);
++ n.nodetype &= ~JFFS2_NODE_ACCURATE;
++ ret = c->mtd->write(c->mtd, ref->flash_offset&~3, sizeof(n), &retlen, (char *)&n);
+ if (ret) {
+- printk(KERN_WARNING "Write error in obliterating obsoleted node at 0x%08x: %d\n", ref_offset(ref), ret);
++ printk(KERN_WARNING "Write error in obliterating obsoleted node at 0x%08x: %d\n", ref->flash_offset &~3, ret);
+ return;
+ }
+ if (retlen != sizeof(n)) {
+- printk(KERN_WARNING "Short write in obliterating obsoleted node at 0x%08x: %d\n", ref_offset(ref), retlen);
++ printk(KERN_WARNING "Short write in obliterating obsoleted node at 0x%08x: %d\n", ref->flash_offset &~3, retlen);
+ return;
+ }
+ }
+-
+-#if CONFIG_JFFS2_FS_DEBUG > 0
+-void jffs2_dump_block_lists(struct jffs2_sb_info *c)
+-{
+-
+-
+- printk(KERN_DEBUG "jffs2_dump_block_lists:\n");
+- printk(KERN_DEBUG "flash_size: %08x\n", c->flash_size);
+- printk(KERN_DEBUG "used_size: %08x\n", c->used_size);
+- printk(KERN_DEBUG "dirty_size: %08x\n", c->dirty_size);
+- printk(KERN_DEBUG "wasted_size: %08x\n", c->wasted_size);
+- printk(KERN_DEBUG "free_size: %08x\n", c->free_size);
+- printk(KERN_DEBUG "erasing_size: %08x\n", c->erasing_size);
+- printk(KERN_DEBUG "bad_size: %08x\n", c->bad_size);
+- printk(KERN_DEBUG "sector_size: %08x\n", c->sector_size);
+- printk(KERN_DEBUG "jffs2_reserved_blocks size: %08x\n",c->sector_size * JFFS2_RESERVED_BLOCKS_WRITE);
+-
+- if (c->nextblock) {
+- printk(KERN_DEBUG "nextblock: %08x (used %08x, dirty %08x, wasted %08x, free %08x)\n", c->nextblock->offset, c->nextblock->used_size, c->nextblock->dirty_size, c->nextblock->wasted_size, c->nextblock->free_size);
+- } else {
+- printk(KERN_DEBUG "nextblock: NULL\n");
+- }
+- if (c->gcblock) {
+- printk(KERN_DEBUG "gcblock: %08x (used %08x, dirty %08x, wasted %08x, free %08x)\n", c->gcblock->offset, c->gcblock->used_size, c->gcblock->dirty_size, c->gcblock->wasted_size, c->gcblock->free_size);
+- } else {
+- printk(KERN_DEBUG "gcblock: NULL\n");
+- }
+- if (list_empty(&c->clean_list)) {
+- printk(KERN_DEBUG "clean_list: empty\n");
+- } else {
+- struct list_head *this;
+- int numblocks = 0;
+- uint32_t dirty = 0;
+-
+- list_for_each(this, &c->clean_list) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+- numblocks ++;
+- dirty += jeb->wasted_size;
+-#if 0
+- printk(KERN_DEBUG "clean_list: %08x (used %08x, dirty %08x, wasted %08x, free %08x)\n", jeb->offset, jeb->used_size, jeb->dirty_size, jeb->wasted_size, jeb->free_size);
+-#endif
+- }
+- printk (KERN_DEBUG "clean_list contains %d blocks with total wasted size %u, average wasted size: %u\n", numblocks, dirty, dirty / numblocks);
+- }
+- if (list_empty(&c->very_dirty_list)) {
+- printk(KERN_DEBUG "very_dirty_list: empty\n");
+- } else {
+- struct list_head *this;
+- int numblocks = 0;
+- uint32_t dirty = 0;
+-
+- list_for_each(this, &c->very_dirty_list) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+- numblocks ++;
+- dirty += jeb->dirty_size;
+- printk(KERN_DEBUG "very_dirty_list: %08x (used %08x, dirty %08x, wasted %08x, free %08x)\n", jeb->offset, jeb->used_size, jeb->dirty_size, jeb->wasted_size, jeb->free_size);
+- }
+- printk (KERN_DEBUG "Contains %d blocks with total dirty size %u, average dirty size: %u\n", numblocks, dirty, dirty / numblocks);
+- }
+- if (list_empty(&c->dirty_list)) {
+- printk(KERN_DEBUG "dirty_list: empty\n");
+- } else {
+- struct list_head *this;
+- int numblocks = 0;
+- uint32_t dirty = 0;
+-
+- list_for_each(this, &c->dirty_list) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+- numblocks ++;
+- dirty += jeb->dirty_size;
+- printk(KERN_DEBUG "dirty_list: %08x (used %08x, dirty %08x, wasted %08x, free %08x)\n", jeb->offset, jeb->used_size, jeb->dirty_size, jeb->wasted_size, jeb->free_size);
+- }
+- printk (KERN_DEBUG "Contains %d blocks with total dirty size %u, average dirty size: %u\n", numblocks, dirty, dirty / numblocks);
+- }
+- if (list_empty(&c->erasable_list)) {
+- printk(KERN_DEBUG "erasable_list: empty\n");
+- } else {
+- struct list_head *this;
+-
+- list_for_each(this, &c->erasable_list) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+- printk(KERN_DEBUG "erasable_list: %08x (used %08x, dirty %08x, wasted %08x, free %08x)\n", jeb->offset, jeb->used_size, jeb->dirty_size, jeb->wasted_size, jeb->free_size);
+- }
+- }
+- if (list_empty(&c->erasing_list)) {
+- printk(KERN_DEBUG "erasing_list: empty\n");
+- } else {
+- struct list_head *this;
+-
+- list_for_each(this, &c->erasing_list) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+- printk(KERN_DEBUG "erasing_list: %08x (used %08x, dirty %08x, wasted %08x, free %08x)\n", jeb->offset, jeb->used_size, jeb->dirty_size, jeb->wasted_size, jeb->free_size);
+- }
+- }
+- if (list_empty(&c->erase_pending_list)) {
+- printk(KERN_DEBUG "erase_pending_list: empty\n");
+- } else {
+- struct list_head *this;
+-
+- list_for_each(this, &c->erase_pending_list) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+- printk(KERN_DEBUG "erase_pending_list: %08x (used %08x, dirty %08x, wasted %08x, free %08x)\n", jeb->offset, jeb->used_size, jeb->dirty_size, jeb->wasted_size, jeb->free_size);
+- }
+- }
+- if (list_empty(&c->erasable_pending_wbuf_list)) {
+- printk(KERN_DEBUG "erasable_pending_wbuf_list: empty\n");
+- } else {
+- struct list_head *this;
+-
+- list_for_each(this, &c->erasable_pending_wbuf_list) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+- printk(KERN_DEBUG "erase_pending_wbuf_list: %08x (used %08x, dirty %08x, wasted %08x, free %08x)\n", jeb->offset, jeb->used_size, jeb->dirty_size, jeb->wasted_size, jeb->free_size);
+- }
+- }
+- if (list_empty(&c->free_list)) {
+- printk(KERN_DEBUG "free_list: empty\n");
+- } else {
+- struct list_head *this;
+-#if 1
+- int i = 0;
+-#endif
+-
+- list_for_each(this, &c->free_list) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+-#if 0
+- printk(KERN_DEBUG "free_list: %08x (used %08x, dirty %08x, wasted %08x, free %08x)\n", jeb->offset, jeb->used_size, jeb->dirty_size, jeb->wasted_size, jeb->free_size);
+-#else
+- i++;
+-#endif
+- }
+-#if 1
+- printk(KERN_DEBUG "free_list: %u\n", i);
+-#endif
+- }
+- if (list_empty(&c->bad_list)) {
+- printk(KERN_DEBUG "bad_list: empty\n");
+- } else {
+- struct list_head *this;
+-
+- list_for_each(this, &c->bad_list) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+- printk(KERN_DEBUG "bad_list: %08x (used %08x, dirty %08x, wasted %08x, free %08x)\n", jeb->offset, jeb->used_size, jeb->dirty_size, jeb->wasted_size, jeb->free_size);
+- }
+- }
+- if (list_empty(&c->bad_used_list)) {
+- printk(KERN_DEBUG "bad_used_list: empty\n");
+- } else {
+- struct list_head *this;
+-
+- list_for_each(this, &c->bad_used_list) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+- printk(KERN_DEBUG "bad_used_list: %08x (used %08x, dirty %08x, wasted %08x, free %08x)\n", jeb->offset, jeb->used_size, jeb->dirty_size, jeb->wasted_size, jeb->free_size);
+- }
+- }
+- if (list_empty(&c->nodemerge_list)) {
+- printk(KERN_DEBUG "nodemerge_list: empty\n");
+- } else {
+- struct list_head *this;
+-
+- list_for_each(this, &c->nodemerge_list) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+- printk(KERN_DEBUG "nodemereg_list: %08x (used %08x, dirty %08x, wasted %08x, free %08x)\n", jeb->offset, jeb->used_size, jeb->dirty_size, jeb->wasted_size, jeb->free_size);
+- }
+- }
+-}
+-#endif /* CONFIG_JFFS2_FS_DEBUG */
+-
+-/*
+- * Local variables:
+- * c-basic-offset: 8
+- * End:
+- */
+diff -Nur linux/fs/jffs2/os-linux.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/os-linux.h
+--- linux/fs/jffs2/os-linux.h 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/os-linux.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,155 +0,0 @@
+-/*
+- * JFFS2 -- Journalling Flash File System, Version 2.
+- *
+- * Copyright (C) 2002 Red Hat, Inc.
+- *
+- * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+- *
+- * For licensing information, see the file 'LICENCE' in this directory.
+- *
+- * $Id: os-linux.h,v 1.19 2002/05/20 14:56:38 dwmw2 Exp $
+- *
+- * ChangeLog:
+- * 19-Nov-2002 Lineo Japan, Inc. add counter of fragtree elements
+- */
+-
+-#ifndef __JFFS2_OS_LINUX_H__
+-#define __JFFS2_OS_LINUX_H__
+-#include <linux/version.h>
+-
+-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,2)
+-#define JFFS2_INODE_INFO(i) (list_entry(i, struct jffs2_inode_info, vfs_inode))
+-#define OFNI_EDONI_2SFFJ(f) (&(f)->vfs_inode)
+-#define JFFS2_SB_INFO(sb) (sb->u.generic_sbp)
+-#define OFNI_BS_2SFFJ(c) ((struct super_block *)c->os_priv)
+-#elif defined(JFFS2_OUT_OF_KERNEL)
+-#define JFFS2_INODE_INFO(i) ((struct jffs2_inode_info *) &(i)->u)
+-#define OFNI_EDONI_2SFFJ(f) ((struct inode *) ( ((char *)f) - ((char *)(&((struct inode *)NULL)->u)) ) )
+-#define JFFS2_SB_INFO(sb) ((struct jffs2_sb_info *) &(sb)->u)
+-#define OFNI_BS_2SFFJ(c) ((struct super_block *) ( ((char *)c) - ((char *)(&((struct super_block *)NULL)->u)) ) )
+-#else
+-#define JFFS2_INODE_INFO(i) (&i->u.jffs2_i)
+-#define OFNI_EDONI_2SFFJ(f) ((struct inode *) ( ((char *)f) - ((char *)(&((struct inode *)NULL)->u)) ) )
+-#define JFFS2_SB_INFO(sb) (&sb->u.jffs2_sb)
+-#define OFNI_BS_2SFFJ(c) ((struct super_block *) ( ((char *)c) - ((char *)(&((struct super_block *)NULL)->u)) ) )
+-#endif
+-
+-
+-#define JFFS2_F_I_SIZE(f) (OFNI_EDONI_2SFFJ(f)->i_size)
+-#define JFFS2_F_I_MODE(f) (OFNI_EDONI_2SFFJ(f)->i_mode)
+-#define JFFS2_F_I_UID(f) (OFNI_EDONI_2SFFJ(f)->i_uid)
+-#define JFFS2_F_I_GID(f) (OFNI_EDONI_2SFFJ(f)->i_gid)
+-#define JFFS2_F_I_CTIME(f) (OFNI_EDONI_2SFFJ(f)->i_ctime)
+-#define JFFS2_F_I_MTIME(f) (OFNI_EDONI_2SFFJ(f)->i_mtime)
+-#define JFFS2_F_I_ATIME(f) (OFNI_EDONI_2SFFJ(f)->i_atime)
+-
+-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,1)
+-#define JFFS2_F_I_RDEV_MIN(f) (minor(OFNI_EDONI_2SFFJ(f)->i_rdev))
+-#define JFFS2_F_I_RDEV_MAJ(f) (major(OFNI_EDONI_2SFFJ(f)->i_rdev))
+-#else
+-#define JFFS2_F_I_RDEV_MIN(f) (MINOR(to_kdev_t(OFNI_EDONI_2SFFJ(f)->i_rdev)))
+-#define JFFS2_F_I_RDEV_MAJ(f) (MAJOR(to_kdev_t(OFNI_EDONI_2SFFJ(f)->i_rdev)))
+-#endif
+-
+-static inline void jffs2_init_inode_info(struct jffs2_inode_info *f)
+-{
+-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,2)
+- f->highest_version = 0;
+- f->fraglist = NULL;
+- f->metadata = NULL;
+- f->dents = NULL;
+- f->flags = 0;
+- f->usercompr = 0;
+-#ifdef CONFIG_JFFS2_DYNFRAGTREE
+- f->nr_frags = 0;
+-#endif
+-#else
+- memset(f, 0, sizeof(*f));
+- init_MUTEX_LOCKED(&f->sem);
+-#endif
+-}
+-
+-#define jffs2_is_readonly(c) (OFNI_BS_2SFFJ(c)->s_flags & MS_RDONLY)
+-
+-#ifndef CONFIG_JFFS2_FS_NAND
+-#define jffs2_can_mark_obsolete(c) (1)
+-#define jffs2_cleanmarker_oob(c) (0)
+-#define jffs2_write_nand_cleanmarker(c,jeb) (-EIO)
+-
+-#define jffs2_flash_write(c, ofs, len, retlen, buf) ((c)->mtd->write((c)->mtd, ofs, len, retlen, buf))
+-#define jffs2_flash_read(c, ofs, len, retlen, buf) ((c)->mtd->read((c)->mtd, ofs, len, retlen, buf))
+-#define jffs2_flush_wbuf(c, flag) do { ; } while(0)
+-#define jffs2_nand_read_failcnt(c,jeb) do { ; } while(0)
+-#define jffs2_write_nand_badblock(c,jeb) do { ; } while(0)
+-#define jffs2_flash_writev jffs2_flash_direct_writev
+-#define jffs2_wbuf_timeout NULL
+-#define jffs2_wbuf_process NULL
+-
+-#else /* NAND support present */
+-
+-#define jffs2_can_mark_obsolete(c) (c->mtd->type == MTD_NORFLASH || c->mtd->type == MTD_RAM)
+-#define jffs2_cleanmarker_oob(c) (c->mtd->type == MTD_NANDFLASH)
+-
+-#define jffs2_flash_write_oob(c, ofs, len, retlen, buf) ((c)->mtd->write_oob((c)->mtd, ofs, len, retlen, buf))
+-#define jffs2_flash_read_oob(c, ofs, len, retlen, buf) ((c)->mtd->read_oob((c)->mtd, ofs, len, retlen, buf))
+-
+-
+-/* wbuf.c */
+-int jffs2_flash_writev(struct jffs2_sb_info *c, const struct iovec *vecs, unsigned long count, loff_t to, size_t *retlen);
+-int jffs2_flash_write(struct jffs2_sb_info *c, loff_t ofs, size_t len, size_t *retlen, const u_char *buf);
+-int jffs2_flash_read(struct jffs2_sb_info *c, loff_t ofs, size_t len, size_t *retlen, u_char *buf);
+-int jffs2_check_oob_empty(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,int mode);
+-int jffs2_check_nand_cleanmarker(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb);
+-int jffs2_write_nand_cleanmarker(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb);
+-int jffs2_write_nand_badblock(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb);
+-void jffs2_wbuf_timeout(unsigned long data);
+-void jffs2_wbuf_process(void *data);
+-#endif /* NAND */
+-
+-/* background.c */
+-int jffs2_start_garbage_collect_thread(struct jffs2_sb_info *c);
+-void jffs2_stop_garbage_collect_thread(struct jffs2_sb_info *c);
+-void jffs2_garbage_collect_trigger(struct jffs2_sb_info *c);
+-
+-/* dir.c */
+-extern struct file_operations jffs2_dir_operations;
+-extern struct inode_operations jffs2_dir_inode_operations;
+-
+-/* file.c */
+-extern struct file_operations jffs2_file_operations;
+-extern struct inode_operations jffs2_file_inode_operations;
+-extern struct address_space_operations jffs2_file_address_operations;
+-int jffs2_fsync(struct file *, struct dentry *, int);
+-int jffs2_setattr (struct dentry *dentry, struct iattr *iattr);
+-int jffs2_do_readpage_nolock (struct inode *inode, struct page *pg);
+-int jffs2_do_readpage_unlock (struct inode *inode, struct page *pg);
+-int jffs2_readpage (struct file *, struct page *);
+-int jffs2_prepare_write (struct file *, struct page *, unsigned, unsigned);
+-int jffs2_commit_write (struct file *, struct page *, unsigned, unsigned);
+-
+-/* ioctl.c */
+-int jffs2_ioctl(struct inode *, struct file *, unsigned int, unsigned long);
+-
+-/* symlink.c */
+-extern struct inode_operations jffs2_symlink_inode_operations;
+-
+-/* fs.c */
+-void jffs2_read_inode (struct inode *);
+-void jffs2_clear_inode (struct inode *);
+-struct inode *jffs2_new_inode (struct inode *dir_i, int mode,
+- struct jffs2_raw_inode *ri);
+-int jffs2_statfs (struct super_block *, struct statfs *);
+-void jffs2_write_super (struct super_block *);
+-int jffs2_remount_fs (struct super_block *, int *, char *);
+-int jffs2_do_fill_super(struct super_block *sb, void *data, int silent);
+-
+-/* writev.c */
+-int jffs2_flash_direct_writev(struct jffs2_sb_info *c, const struct iovec *vecs,
+- unsigned long count, loff_t to, size_t *retlen);
+-
+-/* super.c */
+-
+-
+-#endif /* __JFFS2_OS_LINUX_H__ */
+-
+-
+diff -Nur linux/fs/jffs2/pushpull.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/pushpull.c
+--- linux/fs/jffs2/pushpull.c 1970-01-01 07:00:00.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/pushpull.c 2003-06-23 01:47:04.000000000 +0700
+@@ -0,0 +1,71 @@
++/*
++ * JFFS2 -- Journalling Flash File System, Version 2.
++ *
++ * Copyright (C) 2001 Red Hat, Inc.
++ *
++ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
++ *
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
++ *
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
++ *
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: pushpull.c,v 1.7 2001/09/23 10:04:15 rmk Exp $
++ *
++ */
++
++#include <linux/string.h>
++#include "pushpull.h"
++#include <linux/errno.h>
++
++void init_pushpull(struct pushpull *pp, char *buf, unsigned buflen, unsigned ofs, unsigned reserve)
++{
++ pp->buf = buf;
++ pp->buflen = buflen;
++ pp->ofs = ofs;
++ pp->reserve = reserve;
++}
++
++
++int pushbit(struct pushpull *pp, int bit, int use_reserved)
++{
++ if (pp->ofs >= pp->buflen - (use_reserved?0:pp->reserve)) {
++ return -ENOSPC;
++ }
++
++ if (bit) {
++ pp->buf[pp->ofs >> 3] |= (1<<(7-(pp->ofs &7)));
++ }
++ else {
++ pp->buf[pp->ofs >> 3] &= ~(1<<(7-(pp->ofs &7)));
++ }
++ pp->ofs++;
++
++ return 0;
++}
++
++int pushedbits(struct pushpull *pp)
++{
++ return pp->ofs;
++}
+diff -Nur linux/fs/jffs2/pushpull.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/pushpull.h
+--- linux/fs/jffs2/pushpull.h 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/pushpull.h 2003-06-23 01:47:04.000000000 +0700
+@@ -1,21 +1,42 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: pushpull.h,v 1.8 2002/05/20 14:56:38 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
++ *
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: pushpull.h,v 1.5 2001/09/23 10:04:15 rmk Exp $
+ *
+ */
+
+ #ifndef __PUSHPULL_H__
+ #define __PUSHPULL_H__
+-
+-#include <linux/errno.h>
+-
+ struct pushpull {
+ unsigned char *buf;
+ unsigned int buflen;
+@@ -23,36 +44,9 @@
+ unsigned int reserve;
+ };
+
+-
+-static inline void init_pushpull(struct pushpull *pp, char *buf, unsigned buflen, unsigned ofs, unsigned reserve)
+-{
+- pp->buf = buf;
+- pp->buflen = buflen;
+- pp->ofs = ofs;
+- pp->reserve = reserve;
+-}
+-
+-static inline int pushbit(struct pushpull *pp, int bit, int use_reserved)
+-{
+- if (pp->ofs >= pp->buflen - (use_reserved?0:pp->reserve)) {
+- return -ENOSPC;
+- }
+-
+- if (bit) {
+- pp->buf[pp->ofs >> 3] |= (1<<(7-(pp->ofs &7)));
+- }
+- else {
+- pp->buf[pp->ofs >> 3] &= ~(1<<(7-(pp->ofs &7)));
+- }
+- pp->ofs++;
+-
+- return 0;
+-}
+-
+-static inline int pushedbits(struct pushpull *pp)
+-{
+- return pp->ofs;
+-}
++void init_pushpull(struct pushpull *, char *, unsigned, unsigned, unsigned);
++int pushbit(struct pushpull *pp, int bit, int use_reserved);
++int pushedbits(struct pushpull *pp);
+
+ static inline int pullbit(struct pushpull *pp)
+ {
+diff -Nur linux/fs/jffs2/read.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/read.c
+--- linux/fs/jffs2/read.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/read.c 2003-06-23 01:47:04.000000000 +0700
+@@ -1,31 +1,52 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: read.c,v 1.27 2002/09/06 14:12:44 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
++ *
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
+ *
+- * ChangeLog:
+- * 18-Nov-2002 Lineo Japan, Inc. add dynamic construction of fragtree
++ * $Id: read.c,v 1.13.2.1 2002/02/01 23:32:33 dwmw2 Exp $
+ *
+ */
+
+ #include <linux/kernel.h>
+ #include <linux/slab.h>
+-#include "crc32.h"
+-#include <linux/pagemap.h>
++#include <linux/jffs2.h>
+ #include <linux/mtd/mtd.h>
+ #include "nodelist.h"
++#include "crc32.h"
+
+ int jffs2_read_dnode(struct jffs2_sb_info *c, struct jffs2_full_dnode *fd, unsigned char *buf, int ofs, int len)
+ {
+ struct jffs2_raw_inode *ri;
+ size_t readlen;
+- uint32_t crc;
++ __u32 crc;
+ unsigned char *decomprbuf = NULL;
+ unsigned char *readbuf = NULL;
+ int ret = 0;
+@@ -34,41 +55,35 @@
+ if (!ri)
+ return -ENOMEM;
+
+- ret = jffs2_flash_read(c, ref_offset(fd->raw), sizeof(*ri), &readlen, (char *)ri);
++ ret = c->mtd->read(c->mtd, fd->raw->flash_offset & ~3, sizeof(*ri), &readlen, (char *)ri);
+ if (ret) {
+ jffs2_free_raw_inode(ri);
+- printk(KERN_WARNING "Error reading node from 0x%08x: %d\n", ref_offset(fd->raw), ret);
++ printk(KERN_WARNING "Error reading node from 0x%08x: %d\n", fd->raw->flash_offset & ~3, ret);
+ return ret;
+ }
+ if (readlen != sizeof(*ri)) {
+ jffs2_free_raw_inode(ri);
+ printk(KERN_WARNING "Short read from 0x%08x: wanted 0x%x bytes, got 0x%x\n",
+- ref_offset(fd->raw), sizeof(*ri), readlen);
++ fd->raw->flash_offset & ~3, sizeof(*ri), readlen);
+ return -EIO;
+ }
+ crc = crc32(0, ri, sizeof(*ri)-8);
+
+- D1(printk(KERN_DEBUG "Node read from %08x: node_crc %08x, calculated CRC %08x. dsize %x, csize %x, offset %x, buf %p\n",
+- ref_offset(fd->raw), je32_to_cpu(ri->node_crc),
+- crc, je32_to_cpu(ri->dsize), je32_to_cpu(ri->csize),
+- je32_to_cpu(ri->offset), buf));
+- if (crc != je32_to_cpu(ri->node_crc)) {
+- printk(KERN_WARNING "Node CRC %08x != calculated CRC %08x for node at %08x\n",
+- je32_to_cpu(ri->node_crc), crc, ref_offset(fd->raw));
++ D1(printk(KERN_DEBUG "Node read from %08x: node_crc %08x, calculated CRC %08x. dsize %x, csize %x, offset %x, buf %p\n", fd->raw->flash_offset & ~3, ri->node_crc, crc, ri->dsize, ri->csize, ri->offset, buf));
++ if (crc != ri->node_crc) {
++ printk(KERN_WARNING "Node CRC %08x != calculated CRC %08x for node at %08x\n", ri->node_crc, crc, fd->raw->flash_offset & ~3);
+ ret = -EIO;
+ goto out_ri;
+ }
+ /* There was a bug where we wrote hole nodes out with csize/dsize
+ swapped. Deal with it */
+- if (ri->compr == JFFS2_COMPR_ZERO && !je32_to_cpu(ri->dsize) &&
+- je32_to_cpu(ri->csize)) {
++ if (ri->compr == JFFS2_COMPR_ZERO && !ri->dsize && ri->csize) {
+ ri->dsize = ri->csize;
+- ri->csize = cpu_to_je32(0);
++ ri->csize = 0;
+ }
+
+- D1(if(ofs + len > je32_to_cpu(ri->dsize)) {
+- printk(KERN_WARNING "jffs2_read_dnode() asked for %d bytes at %d from %d-byte node\n",
+- len, ofs, je32_to_cpu(ri->dsize));
++ D1(if(ofs + len > ri->dsize) {
++ printk(KERN_WARNING "jffs2_read_dnode() asked for %d bytes at %d from %d-byte node\n", len, ofs, ri->dsize);
+ ret = -EINVAL;
+ goto out_ri;
+ });
+@@ -85,18 +100,18 @@
+ Reading partial node and it's uncompressed - read into readbuf, check CRC, and copy
+ Reading partial node and it's compressed - read into readbuf, check checksum, decompress to decomprbuf and copy
+ */
+- if (ri->compr == JFFS2_COMPR_NONE && len == je32_to_cpu(ri->dsize)) {
++ if (ri->compr == JFFS2_COMPR_NONE && len == ri->dsize) {
+ readbuf = buf;
+ } else {
+- readbuf = kmalloc(je32_to_cpu(ri->csize), GFP_KERNEL);
++ readbuf = kmalloc(ri->csize, GFP_KERNEL);
+ if (!readbuf) {
+ ret = -ENOMEM;
+ goto out_ri;
+ }
+ }
+ if (ri->compr != JFFS2_COMPR_NONE) {
+- if (len < je32_to_cpu(ri->dsize)) {
+- decomprbuf = kmalloc(je32_to_cpu(ri->dsize), GFP_KERNEL);
++ if (len < ri->dsize) {
++ decomprbuf = kmalloc(ri->dsize, GFP_KERNEL);
+ if (!decomprbuf) {
+ ret = -ENOMEM;
+ goto out_readbuf;
+@@ -108,34 +123,31 @@
+ decomprbuf = readbuf;
+ }
+
+- D2(printk(KERN_DEBUG "Read %d bytes to %p\n", je32_to_cpu(ri->csize),
+- readbuf));
+- ret = jffs2_flash_read(c, (ref_offset(fd->raw)) + sizeof(*ri),
+- je32_to_cpu(ri->csize), &readlen, readbuf);
++ D2(printk(KERN_DEBUG "Read %d bytes to %p\n", ri->csize, readbuf));
++ ret = c->mtd->read(c->mtd, (fd->raw->flash_offset &~3) + sizeof(*ri), ri->csize, &readlen, readbuf);
+
+- if (!ret && readlen != je32_to_cpu(ri->csize))
++ if (!ret && readlen != ri->csize)
+ ret = -EIO;
+ if (ret)
+ goto out_decomprbuf;
+
+- crc = crc32(0, readbuf, je32_to_cpu(ri->csize));
+- if (crc != je32_to_cpu(ri->data_crc)) {
+- printk(KERN_WARNING "Data CRC %08x != calculated CRC %08x for node at %08x\n",
+- je32_to_cpu(ri->data_crc), crc, ref_offset(fd->raw));
++ crc = crc32(0, readbuf, ri->csize);
++ if (crc != ri->data_crc) {
++ printk(KERN_WARNING "Data CRC %08x != calculated CRC %08x for node at %08x\n", ri->data_crc, crc, fd->raw->flash_offset & ~3);
+ ret = -EIO;
+ goto out_decomprbuf;
+ }
+ D2(printk(KERN_DEBUG "Data CRC matches calculated CRC %08x\n", crc));
+ if (ri->compr != JFFS2_COMPR_NONE) {
+- D2(printk(KERN_DEBUG "Decompress %d bytes from %p to %d bytes at %p\n", ri->csize, readbuf, je32_to_cpu(ri->dsize), decomprbuf));
+- ret = jffs2_decompress(ri->compr, readbuf, decomprbuf, je32_to_cpu(ri->csize), je32_to_cpu(ri->dsize));
++ D2(printk(KERN_DEBUG "Decompress %d bytes from %p to %d bytes at %p\n", ri->csize, readbuf, ri->dsize, decomprbuf));
++ ret = jffs2_decompress(ri->compr, readbuf, decomprbuf, ri->csize, ri->dsize);
+ if (ret) {
+ printk(KERN_WARNING "Error: jffs2_decompress returned %d\n", ret);
+ goto out_decomprbuf;
+ }
+ }
+
+- if (len < je32_to_cpu(ri->dsize)) {
++ if (len < ri->dsize) {
+ memcpy(buf, decomprbuf+ofs, len);
+ }
+ out_decomprbuf:
+@@ -149,103 +161,3 @@
+
+ return ret;
+ }
+-
+-int jffs2_read_inode_range(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
+- unsigned char *buf, uint32_t offset, uint32_t len)
+-{
+- uint32_t end = offset + len;
+- struct jffs2_node_frag *frag;
+- int ret;
+-
+- D1(printk(KERN_DEBUG "jffs2_read_inode_range: ino #%u, range 0x%08x-0x%08x\n",
+- f->inocache->ino, offset, offset+len));
+-
+- ret = jffs2_construct_fragtree_nolock_if_missing(c, f);
+- if (ret) {
+- memset(buf, 0, len);
+- return ret;
+- }
+-
+- frag = jffs2_lookup_node_frag(&f->fragtree, offset);
+-
+- /* XXX FIXME: Where a single physical node actually shows up in two
+- frags, we read it twice. Don't do that. */
+- /* Now we're pointing at the first frag which overlaps our page */
+- while(offset < end) {
+- D2(printk(KERN_DEBUG "jffs2_read_inode_range: offset %d, end %d\n", offset, end));
+- if (!frag || frag->ofs > offset) {
+- uint32_t holesize = end - offset;
+- if (frag) {
+- D1(printk(KERN_NOTICE "Eep. Hole in ino #%u fraglist. frag->ofs = 0x%08x, offset = 0x%08x\n", f->inocache->ino, frag->ofs, offset));
+- holesize = min(holesize, frag->ofs - offset);
+- D1(jffs2_print_frag_list(f));
+- }
+- D1(printk(KERN_DEBUG "Filling non-frag hole from %d-%d\n", offset, offset+holesize));
+- memset(buf, 0, holesize);
+- buf += holesize;
+- offset += holesize;
+- continue;
+- } else if (frag->ofs < offset && (offset & (PAGE_CACHE_SIZE-1)) != 0) {
+- D1(printk(KERN_NOTICE "Eep. Overlap in ino #%u fraglist. frag->ofs = 0x%08x, offset = 0x%08x\n",
+- f->inocache->ino, frag->ofs, offset));
+- D1(jffs2_print_frag_list(f));
+- memset(buf, 0, end - offset);
+- return -EIO;
+- } else if (!frag->node) {
+- uint32_t holeend = min(end, frag->ofs + frag->size);
+- D1(printk(KERN_DEBUG "Filling frag hole from %d-%d (frag 0x%x 0x%x)\n", offset, holeend, frag->ofs, frag->ofs + frag->size));
+- memset(buf, 0, holeend - offset);
+- buf += holeend - offset;
+- offset = holeend;
+- frag = frag_next(frag);
+- continue;
+- } else {
+- uint32_t readlen;
+- readlen = min(frag->size, end - offset);
+- D1(printk(KERN_DEBUG "Reading %d-%d from node at 0x%x\n", frag->ofs, frag->ofs+readlen, ref_offset(frag->node->raw)));
+- ret = jffs2_read_dnode(c, frag->node, buf, frag->ofs - frag->node->ofs, readlen);
+- D2(printk(KERN_DEBUG "node read done\n"));
+- if (ret) {
+- D1(printk(KERN_DEBUG"jffs2_read_inode_range error %d\n",ret));
+- memset(buf, 0, frag->size);
+- return ret;
+- }
+- }
+- buf += frag->size;
+- offset += frag->size;
+- frag = frag_next(frag);
+- D2(printk(KERN_DEBUG "node read was OK. Looping\n"));
+- }
+- return 0;
+-}
+-
+-/* Core function to read symlink target. */
+-char *jffs2_getlink(struct jffs2_sb_info *c, struct jffs2_inode_info *f)
+-{
+- char *buf;
+- int ret;
+-
+- down(&f->sem);
+-
+- if (!f->metadata) {
+- printk(KERN_NOTICE "No metadata for symlink inode #%u\n", f->inocache->ino);
+- up(&f->sem);
+- return ERR_PTR(-EINVAL);
+- }
+- buf = kmalloc(f->metadata->size+1, GFP_USER);
+- if (!buf) {
+- up(&f->sem);
+- return ERR_PTR(-ENOMEM);
+- }
+- buf[f->metadata->size]=0;
+-
+- ret = jffs2_read_dnode(c, f->metadata, buf, 0, f->metadata->size);
+-
+- up(&f->sem);
+-
+- if (ret) {
+- kfree(buf);
+- return ERR_PTR(ret);
+- }
+- return buf;
+-}
+diff -Nur linux/fs/jffs2/readinode.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/readinode.c
+--- linux/fs/jffs2/readinode.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/readinode.c 2003-06-23 01:47:04.000000000 +0700
+@@ -1,88 +1,75 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: readinode.c,v 1.90 2002/09/06 16:46:29 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
+ *
+- * ChangeLog:
+- * 19-Nov-2002 Lineo Japan, Inc. add counter of fragtree elements
+- * 18-Nov-2002 Lineo Japan, Inc. add dynamic construction of fragtree
+- * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
+ *
+- * ChangeLog:
+- * 05-Dec-2002 SHARP nodemerge-thershold is changable
+- * 19-Nov-2002 Lineo Japan, Inc. add counter of fragtree elements
+- * 18-Nov-2002 Lineo Japan, Inc. add dynamic construction of fragtree
+- * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: readinode.c,v 1.58.2.5 2002/03/05 22:40:03 dwmw2 Exp $
+ *
+ */
+
++/* Given an inode, probably with existing list of fragments, add the new node
++ * to the fragment list.
++ */
+ #include <linux/kernel.h>
+ #include <linux/slab.h>
+ #include <linux/fs.h>
+-#include "crc32.h"
+-#include <linux/pagemap.h>
+ #include <linux/mtd/mtd.h>
+-#include <linux/interrupt.h>
++#include <linux/jffs2.h>
+ #include "nodelist.h"
+-#include "nodemerge.h"
++#include "crc32.h"
+
+
+-D1(static void jffs2_print_fragtree(rb_root_t *list, int permitbug)
++D1(void jffs2_print_frag_list(struct jffs2_inode_info *f)
+ {
+- struct jffs2_node_frag *this = frag_first(list);
+- uint32_t lastofs = 0;
+- int buggy = 0;
++ struct jffs2_node_frag *this = f->fraglist;
+
+ while(this) {
+ if (this->node)
+- printk(KERN_DEBUG "frag %04x-%04x: 0x%08x on flash (*%p). left (%p), right (%p), parent (%p)\n", this->ofs, this->ofs+this->size, ref_offset(this->node->raw), this, frag_left(this), frag_right(this), frag_parent(this));
++ printk(KERN_DEBUG "frag %04x-%04x: 0x%08x on flash (*%p->%p)\n", this->ofs, this->ofs+this->size, this->node->raw->flash_offset &~3, this, this->next);
+ else
+- printk(KERN_DEBUG "frag %04x-%04x: hole (*%p). left (%p} right (%p), parent (%p)\n", this->ofs, this->ofs+this->size, this, frag_left(this), frag_right(this), frag_parent(this));
+- if (this->ofs != lastofs)
+- buggy = 1;
+- lastofs = this->ofs+this->size;
+- this = frag_next(this);
+- }
+- if (buggy && !permitbug) {
+- printk(KERN_CRIT "Frag tree got a hole in it\n");
+- BUG();
++ printk(KERN_DEBUG "frag %04x-%04x: hole (*%p->%p)\n", this->ofs, this->ofs+this->size, this, this->next);
++ this = this->next;
+ }
+-})
+-
+-D1(void jffs2_print_frag_list(struct jffs2_inode_info *f)
+-{
+- jffs2_print_fragtree(&f->fragtree, 0);
+-
+ if (f->metadata) {
+- printk(KERN_DEBUG "metadata at 0x%08x\n", ref_offset(f->metadata->raw));
++ printk(KERN_DEBUG "metadata at 0x%08x\n", f->metadata->raw->flash_offset &~3);
+ }
+ })
+
+
+-/* Given an inode, probably with existing list of fragments, add the new node
+- * to the fragment list.
+- */
+ int jffs2_add_full_dnode_to_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, struct jffs2_full_dnode *fn)
+ {
+ int ret;
+-
+ D1(printk(KERN_DEBUG "jffs2_add_full_dnode_to_inode(ino #%u, f %p, fn %p)\n", f->inocache->ino, f, fn));
+
+-#ifdef CONFIG_JFFS2_DYNFRAGTREE
+- {
+- int added_frags = 0;
+- ret = jffs2_add_full_dnode_to_fraglist_1(c, &f->fragtree, fn, &added_frags);
+- if (! ret) f->nr_frags += added_frags;
+- }
+-#else
+- ret = jffs2_add_full_dnode_to_fraglist(c, &f->fragtree, fn);
+-#endif
++ ret = jffs2_add_full_dnode_to_fraglist(c, &f->fraglist, fn);
+
+ D2(jffs2_print_frag_list(f));
+ return ret;
+@@ -95,14 +82,13 @@
+ if (!this->node->frags) {
+ /* The node has no valid frags left. It's totally obsoleted */
+ D2(printk(KERN_DEBUG "Marking old node @0x%08x (0x%04x-0x%04x) obsolete\n",
+- ref_offset(this->node->raw), this->node->ofs, this->node->ofs+this->node->size));
++ this->node->raw->flash_offset &~3, this->node->ofs, this->node->ofs+this->node->size));
+ jffs2_mark_node_obsolete(c, this->node->raw);
+ jffs2_free_full_dnode(this->node);
+ } else {
+- D2(printk(KERN_DEBUG "Marking old node @0x%08x (0x%04x-0x%04x) REF_NORMAL. frags is %d\n",
+- ref_offset(this->node->raw), this->node->ofs, this->node->ofs+this->node->size,
++ D2(printk(KERN_DEBUG "Not marking old node @0x%08x (0x%04x-0x%04x) obsolete. frags is %d\n",
++ this->node->raw->flash_offset &~3, this->node->ofs, this->node->ofs+this->node->size,
+ this->node->frags));
+- mark_ref_normal(this->node->raw);
+ }
+
+ }
+@@ -110,28 +96,27 @@
+ }
+
+ /* Doesn't set inode->i_size */
+-#ifdef CONFIG_JFFS2_DYNFRAGTREE
+-int jffs2_add_full_dnode_to_fraglist_1(struct jffs2_sb_info *c, rb_root_t *list, struct jffs2_full_dnode *fn, int* added_frags)
+-#else
+-int jffs2_add_full_dnode_to_fraglist(struct jffs2_sb_info *c, rb_root_t *list, struct jffs2_full_dnode *fn)
+-#endif
++int jffs2_add_full_dnode_to_fraglist(struct jffs2_sb_info *c, struct jffs2_node_frag **list, struct jffs2_full_dnode *fn)
+ {
+- struct jffs2_node_frag *this;
+- struct jffs2_node_frag *newfrag;
+- uint32_t lastend;
++
++ struct jffs2_node_frag *this, **prev, *old;
++ struct jffs2_node_frag *newfrag, *newfrag2;
++ __u32 lastend = 0;
++
+
+ newfrag = jffs2_alloc_node_frag();
+ if (!newfrag) {
+ return -ENOMEM;
+ }
+
+- if (!fn->raw) {
+- printk(KERN_WARNING "dwmw2 is stupid. j_a_f_d_t_f should never happen with ->raw == NULL\n");
+- BUG();
+- }
+-
+- D2(printk(KERN_DEBUG "adding node %04x-%04x @0x%08x on flash, newfrag *%p\n", fn->ofs, fn->ofs+fn->size, ref_offset(fn->raw), newfrag));
++ D2(if (fn->raw)
++ printk(KERN_DEBUG "adding node %04x-%04x @0x%08x on flash, newfrag *%p\n", fn->ofs, fn->ofs+fn->size, fn->raw->flash_offset &~3, newfrag);
++ else
++ printk(KERN_DEBUG "adding hole node %04x-%04x on flash, newfrag *%p\n", fn->ofs, fn->ofs+fn->size, newfrag));
+
++ prev = list;
++ this = *list;
++
+ if (!fn->size) {
+ jffs2_free_node_frag(newfrag);
+ return 0;
+@@ -141,33 +126,21 @@
+ newfrag->size = fn->size;
+ newfrag->node = fn;
+ newfrag->node->frags = 1;
++ newfrag->next = (void *)0xdeadbeef;
+
+ /* Skip all the nodes which are completed before this one starts */
+- this = jffs2_lookup_node_frag(list, fn->ofs);
+-
+- if (this) {
+- D2(printk(KERN_DEBUG "j_a_f_d_t_f: Lookup gave frag 0x%04x-0x%04x; phys 0x%08x (*%p)\n",
+- this->ofs, this->ofs+this->size, this->node?(ref_offset(this->node->raw)):0xffffffff, this));
++ while(this && fn->ofs >= this->ofs+this->size) {
+ lastend = this->ofs + this->size;
+- } else {
+- D2(printk(KERN_DEBUG "j_a_f_d_t_f: Lookup gave no frag\n"));
+- lastend = 0;
++
++ D2(printk(KERN_DEBUG "j_a_f_d_t_f: skipping frag 0x%04x-0x%04x; phys 0x%08x (*%p->%p)\n",
++ this->ofs, this->ofs+this->size, this->node?(this->node->raw->flash_offset &~3):0xffffffff, this, this->next));
++ prev = &this->next;
++ this = this->next;
+ }
+-
++
+ /* See if we ran off the end of the list */
+- if (lastend <= newfrag->ofs) {
++ if (!this) {
+ /* We did */
+-
+- /* Check if 'this' node was on the same page as the new node.
+- If so, both 'this' and the new node get marked REF_NORMAL so
+- the GC can take a look.
+- */
+- if ((lastend-1) >> PAGE_CACHE_SHIFT == newfrag->ofs >> PAGE_CACHE_SHIFT) {
+- if (this->node)
+- mark_ref_normal(this->node->raw);
+- mark_ref_normal(fn->raw);
+- }
+-
+ if (lastend < fn->ofs) {
+ /* ... and we need to put a hole in before the new node */
+ struct jffs2_node_frag *holefrag = jffs2_alloc_node_frag();
+@@ -175,223 +148,154 @@
+ return -ENOMEM;
+ holefrag->ofs = lastend;
+ holefrag->size = fn->ofs - lastend;
++ holefrag->next = NULL;
+ holefrag->node = NULL;
+- if (this) {
+- /* By definition, the 'this' node has no right-hand child,
+- because there are no frags with offset greater than it.
+- So that's where we want to put the hole */
+- D2(printk(KERN_DEBUG "Adding hole frag (%p) on right of node at (%p)\n", holefrag, this));
+- rb_link_node(&holefrag->rb, &this->rb, &this->rb.rb_right);
+- } else {
+- D2(printk(KERN_DEBUG "Adding hole frag (%p) at root of tree\n", holefrag));
+- rb_link_node(&holefrag->rb, NULL, &list->rb_node);
+- }
+- rb_insert_color(&holefrag->rb, list);
+- ADDED_FRAGS_INC();
+- this = holefrag;
+- }
+- if (this) {
+- /* By definition, the 'this' node has no right-hand child,
+- because there are no frags with offset greater than it.
+- So that's where we want to put the hole */
+- D2(printk(KERN_DEBUG "Adding new frag (%p) on right of node at (%p)\n", newfrag, this));
+- rb_link_node(&newfrag->rb, &this->rb, &this->rb.rb_right);
+- } else {
+- D2(printk(KERN_DEBUG "Adding new frag (%p) at root of tree\n", newfrag));
+- rb_link_node(&newfrag->rb, NULL, &list->rb_node);
++ *prev = holefrag;
++ prev = &holefrag->next;
+ }
+- rb_insert_color(&newfrag->rb, list);
+- ADDED_FRAGS_INC();
++ newfrag->next = NULL;
++ *prev = newfrag;
+ return 0;
+ }
+
+- D2(printk(KERN_DEBUG "j_a_f_d_t_f: dealing with frag 0x%04x-0x%04x; phys 0x%08x (*%p)\n",
+- this->ofs, this->ofs+this->size, this->node?(ref_offset(this->node->raw)):0xffffffff, this));
++ D2(printk(KERN_DEBUG "j_a_f_d_t_f: dealing with frag 0x%04x-0x%04x; phys 0x%08x (*%p->%p)\n",
++ this->ofs, this->ofs+this->size, this->node?(this->node->raw->flash_offset &~3):0xffffffff, this, this->next));
+
+- /* OK. 'this' is pointing at the first frag that newfrag->ofs at least partially obsoletes,
+- * - i.e. newfrag->ofs < this->ofs+this->size && newfrag->ofs >= this->ofs
++ /* OK. 'this' is pointing at the first frag that fn->ofs at least partially obsoletes,
++ * - i.e. fn->ofs < this->ofs+this->size && fn->ofs >= this->ofs
+ */
+- if (newfrag->ofs > this->ofs) {
++ if (fn->ofs > this->ofs) {
+ /* This node isn't completely obsoleted. The start of it remains valid */
+-
+- /* Mark the new node and the partially covered node REF_NORMAL -- let
+- the GC take a look at them */
+- mark_ref_normal(fn->raw);
+- if (this->node)
+- mark_ref_normal(this->node->raw);
+-
+- if (this->ofs + this->size > newfrag->ofs + newfrag->size) {
++ if (this->ofs + this->size > fn->ofs + fn->size) {
+ /* The new node splits 'this' frag into two */
+- struct jffs2_node_frag *newfrag2 = jffs2_alloc_node_frag();
++ newfrag2 = jffs2_alloc_node_frag();
+ if (!newfrag2) {
+ jffs2_free_node_frag(newfrag);
+ return -ENOMEM;
+ }
+- D2(printk(KERN_DEBUG "split old frag 0x%04x-0x%04x -->", this->ofs, this->ofs+this->size);
++ D1(printk(KERN_DEBUG "split old frag 0x%04x-0x%04x -->", this->ofs, this->ofs+this->size);
+ if (this->node)
+- printk("phys 0x%08x\n", ref_offset(this->node->raw));
++ printk("phys 0x%08x\n", this->node->raw->flash_offset &~3);
+ else
+ printk("hole\n");
+ )
+-
+- /* New second frag pointing to this's node */
+- newfrag2->ofs = newfrag->ofs + newfrag->size;
++ newfrag2->ofs = fn->ofs + fn->size;
+ newfrag2->size = (this->ofs+this->size) - newfrag2->ofs;
++ newfrag2->next = this->next;
+ newfrag2->node = this->node;
+ if (this->node)
+ this->node->frags++;
+-
+- /* Adjust size of original 'this' */
++ newfrag->next = newfrag2;
++ this->next = newfrag;
+ this->size = newfrag->ofs - this->ofs;
+-
+- /* Now, we know there's no node with offset
+- greater than this->ofs but smaller than
+- newfrag2->ofs or newfrag->ofs, for obvious
+- reasons. So we can do a tree insert from
+- 'this' to insert newfrag, and a tree insert
+- from newfrag to insert newfrag2. */
+- jffs2_fragtree_insert(newfrag, this);
+- rb_insert_color(&newfrag->rb, list);
+- ADDED_FRAGS_INC();
+-
+- jffs2_fragtree_insert(newfrag2, newfrag);
+- rb_insert_color(&newfrag2->rb, list);
+- ADDED_FRAGS_INC();
+-
+ return 0;
+ }
+ /* New node just reduces 'this' frag in size, doesn't split it */
+- this->size = newfrag->ofs - this->ofs;
+-
+- /* Again, we know it lives down here in the tree */
+- jffs2_fragtree_insert(newfrag, this);
+- rb_insert_color(&newfrag->rb, list);
+- ADDED_FRAGS_INC();
++ this->size = fn->ofs - this->ofs;
++ newfrag->next = this->next;
++ this->next = newfrag;
++ this = newfrag->next;
+ } else {
+- /* New frag starts at the same point as 'this' used to. Replace
+- it in the tree without doing a delete and insertion */
+- D2(printk(KERN_DEBUG "Inserting newfrag (*%p),%d-%d in before 'this' (*%p),%d-%d\n",
+- newfrag, newfrag->ofs, newfrag->ofs+newfrag->size,
+- this, this->ofs, this->ofs+this->size));
+-
+- rb_replace_node(&this->rb, &newfrag->rb, list);
+-
+- if (newfrag->ofs + newfrag->size >= this->ofs+this->size) {
+- D2(printk("Obsoleting node frag %p (%x-%x)\n", this, this->ofs, this->ofs+this->size));
+- jffs2_obsolete_node_frag(c, this);
+- } else {
+- this->ofs += newfrag->size;
+- this->size -= newfrag->size;
+-
+- jffs2_fragtree_insert(this, newfrag);
+- rb_insert_color(&this->rb, list);
+- ADDED_FRAGS_INC();
+- return 0;
+- }
++ D2(printk(KERN_DEBUG "Inserting newfrag (*%p) in before 'this' (*%p)\n", newfrag, this));
++ *prev = newfrag;
++ newfrag->next = this;
+ }
+- /* OK, now we have newfrag added in the correct place in the tree, but
+- frag_next(newfrag) may be a fragment which is overlapped by it
++ /* OK, now we have newfrag added in the correct place in the list, but
++ newfrag->next points to a fragment which may be overlapping it
+ */
+- while ((this = frag_next(newfrag)) && newfrag->ofs + newfrag->size >= this->ofs + this->size) {
+- /* 'this' frag is obsoleted completely. */
+- D2(printk("Obsoleting node frag %p (%x-%x) and removing from tree\n", this, this->ofs, this->ofs+this->size));
+- rb_erase(&this->rb, list);
+- jffs2_obsolete_node_frag(c, this);
+- ADDED_FRAGS_DEC();
++ while (this && newfrag->ofs + newfrag->size >= this->ofs + this->size) {
++ /* 'this' frag is obsoleted. */
++ old = this;
++ this = old->next;
++ jffs2_obsolete_node_frag(c, old);
+ }
+ /* Now we're pointing at the first frag which isn't totally obsoleted by
+ the new frag */
++ newfrag->next = this;
+
+ if (!this || newfrag->ofs + newfrag->size == this->ofs) {
+ return 0;
+ }
+- /* Still some overlap but we don't need to move it in the tree */
++ /* Still some overlap */
+ this->size = (this->ofs + this->size) - (newfrag->ofs + newfrag->size);
+ this->ofs = newfrag->ofs + newfrag->size;
+-
+- /* And mark them REF_NORMAL so the GC takes a look at them */
+- if (this->node)
+- mark_ref_normal(this->node->raw);
+- mark_ref_normal(fn->raw);
+-
+ return 0;
+ }
+
+-int jffs2_truncate_fraglist_1 (struct jffs2_sb_info *c, rb_root_t *list, uint32_t size)
++void jffs2_truncate_fraglist (struct jffs2_sb_info *c, struct jffs2_node_frag **list, __u32 size)
+ {
+- struct jffs2_node_frag *frag = jffs2_lookup_node_frag(list, size);
+- int count = 0;
+-
+ D1(printk(KERN_DEBUG "Truncating fraglist to 0x%08x bytes\n", size));
+
+- /* We know frag->ofs <= size. That's what lookup does for us */
+- if (frag && frag->ofs != size) {
+- if (frag->ofs+frag->size >= size) {
+- D1(printk(KERN_DEBUG "Truncating frag 0x%08x-0x%08x\n", frag->ofs, frag->ofs+frag->size));
+- frag->size = size - frag->ofs;
+- }
+- frag = frag_next(frag);
+- }
+- while (frag && frag->ofs >= size) {
+- struct jffs2_node_frag *next = frag_next(frag);
+-
+- D1(printk(KERN_DEBUG "Removing frag 0x%08x-0x%08x\n", frag->ofs, frag->ofs+frag->size));
+- frag_erase(frag, list);
+- jffs2_obsolete_node_frag(c, frag);
+-#ifdef CONFIG_JFFS2_DYNFRAGTREE
+- count++;
+-#endif
+- frag = next;
++ while (*list) {
++ if ((*list)->ofs >= size) {
++ struct jffs2_node_frag *this = *list;
++ *list = this->next;
++ D1(printk(KERN_DEBUG "Removing frag 0x%08x-0x%08x\n", this->ofs, this->ofs+this->size));
++ jffs2_obsolete_node_frag(c, this);
++ continue;
++ } else if ((*list)->ofs + (*list)->size > size) {
++ D1(printk(KERN_DEBUG "Truncating frag 0x%08x-0x%08x\n", (*list)->ofs, (*list)->ofs + (*list)->size));
++ (*list)->size = size - (*list)->ofs;
++ }
++ list = &(*list)->next;
+ }
+-
+- return count;
+ }
+
+ /* Scan the list of all nodes present for this ino, build map of versions, etc. */
+
+-int jffs2_do_read_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
+- uint32_t ino, struct jffs2_raw_inode *latest_node)
++void jffs2_read_inode (struct inode *inode)
+ {
+ struct jffs2_tmp_dnode_info *tn_list, *tn;
+ struct jffs2_full_dirent *fd_list;
++ struct jffs2_inode_info *f;
+ struct jffs2_full_dnode *fn = NULL;
+- uint32_t crc;
+- uint32_t latest_mctime, mctime_ver;
+- uint32_t mdata_ver = 0;
+- size_t retlen;
++ struct jffs2_sb_info *c;
++ struct jffs2_raw_inode latest_node;
++ __u32 latest_mctime, mctime_ver;
++ __u32 mdata_ver = 0;
+ int ret;
++ ssize_t retlen;
+
+- D2(printk(KERN_DEBUG "jffs2_do_read_inode(): getting inocache\n"));
++ D1(printk(KERN_DEBUG "jffs2_read_inode(): inode->i_ino == %lu\n", inode->i_ino));
+
+- f->inocache = jffs2_get_ino_cache(c, ino);
++ f = JFFS2_INODE_INFO(inode);
++ c = JFFS2_SB_INFO(inode->i_sb);
+
+- D2(printk(KERN_DEBUG "jffs2_do_read_inode(): Got inocache at %p\n", f->inocache));
++ memset(f, 0, sizeof(*f));
++ D2(printk(KERN_DEBUG "getting inocache\n"));
++ init_MUTEX(&f->sem);
++ f->inocache = jffs2_get_ino_cache(c, inode->i_ino);
++ D2(printk(KERN_DEBUG "jffs2_read_inode(): Got inocache at %p\n", f->inocache));
+
+- if (!f->inocache && ino == 1) {
++ if (!f->inocache && inode->i_ino == 1) {
+ /* Special case - no root inode on medium */
+ f->inocache = jffs2_alloc_inode_cache();
+ if (!f->inocache) {
+- printk(KERN_CRIT "jffs2_do_read_inode(): Cannot allocate inocache for root inode\n");
+- return -ENOMEM;
++ printk(KERN_CRIT "jffs2_read_inode(): Cannot allocate inocache for root inode\n");
++ make_bad_inode(inode);
++ return;
+ }
+- D1(printk(KERN_DEBUG "jffs2_do_read_inode(): Creating inocache for root inode\n"));
++ D1(printk(KERN_DEBUG "jffs2_read_inode(): Creating inocache for root inode\n"));
+ memset(f->inocache, 0, sizeof(struct jffs2_inode_cache));
+ f->inocache->ino = f->inocache->nlink = 1;
+ f->inocache->nodes = (struct jffs2_raw_node_ref *)f->inocache;
+ jffs2_add_ino_cache(c, f->inocache);
+ }
+ if (!f->inocache) {
+- printk(KERN_WARNING "jffs2_do_read_inode() on nonexistent ino %u\n", ino);
+- return -ENOENT;
++ printk(KERN_WARNING "jffs2_read_inode() on nonexistent ino %lu\n", (unsigned long)inode->i_ino);
++ make_bad_inode(inode);
++ return;
+ }
+- D1(printk(KERN_DEBUG "jffs2_do_read_inode(): ino #%u nlink is %d\n", ino, f->inocache->nlink));
++ D1(printk(KERN_DEBUG "jffs2_read_inode(): ino #%lu nlink is %d\n", (unsigned long)inode->i_ino, f->inocache->nlink));
++ inode->i_nlink = f->inocache->nlink;
+
+ /* Grab all nodes relevant to this ino */
+- ret = jffs2_get_inode_nodes(c, ino, f, &tn_list, &fd_list, &f->highest_version, &latest_mctime, &mctime_ver);
++ ret = jffs2_get_inode_nodes(c, inode->i_ino, f, &tn_list, &fd_list, &f->highest_version, &latest_mctime, &mctime_ver);
+
+ if (ret) {
+- printk(KERN_CRIT "jffs2_get_inode_nodes() for ino %u returned %d\n", ino, ret);
+- return ret;
++ printk(KERN_CRIT "jffs2_get_inode_nodes() for ino %lu returned %d\n", inode->i_ino, ret);
++ make_bad_inode(inode);
++ return;
+ }
+ f->dents = fd_list;
+
+@@ -401,7 +305,7 @@
+ fn = tn->fn;
+
+ if (f->metadata && tn->version > mdata_ver) {
+- D1(printk(KERN_DEBUG "Obsoleting old metadata at 0x%08x\n", ref_offset(f->metadata->raw)));
++ D1(printk(KERN_DEBUG "Obsoleting old metadata at 0x%08x\n", f->metadata->raw->flash_offset &~3));
+ jffs2_mark_node_obsolete(c, f->metadata->raw);
+ jffs2_free_full_dnode(f->metadata);
+ f->metadata = NULL;
+@@ -413,7 +317,7 @@
+ jffs2_add_full_dnode_to_inode(c, f, fn);
+ } else {
+ /* Zero-sized node at end of version list. Just a metadata update */
+- D1(printk(KERN_DEBUG "metadata @%08x: ver %d\n", ref_offset(fn->raw), tn->version));
++ D1(printk(KERN_DEBUG "metadata @%08x: ver %d\n", fn->raw->flash_offset &~3, tn->version));
+ f->metadata = fn;
+ mdata_ver = tn->version;
+ }
+@@ -422,137 +326,175 @@
+ }
+ if (!fn) {
+ /* No data nodes for this inode. */
+- if (ino != 1) {
+- printk(KERN_WARNING "jffs2_do_read_inode(): No data nodes found for ino #%u\n", ino);
++ if (inode->i_ino != 1) {
++ printk(KERN_WARNING "jffs2_read_inode(): No data nodes found for ino #%lu\n", inode->i_ino);
+ if (!fd_list) {
+- return -EIO;
++ make_bad_inode(inode);
++ return;
+ }
+- printk(KERN_WARNING "jffs2_do_read_inode(): But it has children so we fake some modes for it\n");
++ printk(KERN_WARNING "jffs2_read_inode(): But it has children so we fake some modes for it\n");
+ }
+- latest_node->mode = cpu_to_je32(S_IFDIR|S_IRUGO|S_IWUSR|S_IXUGO);
+- latest_node->version = cpu_to_je32(0);
+- latest_node->atime = latest_node->ctime = latest_node->mtime = cpu_to_je32(0);
+- latest_node->isize = cpu_to_je32(0);
+- latest_node->gid = cpu_to_je16(0);
+- latest_node->uid = cpu_to_je16(0);
+- return 0;
+- }
++ inode->i_mode = S_IFDIR | S_IRUGO | S_IWUSR | S_IXUGO;
++ latest_node.version = 0;
++ inode->i_atime = inode->i_ctime = inode->i_mtime = CURRENT_TIME;
++ inode->i_nlink = f->inocache->nlink;
++ inode->i_size = 0;
++ } else {
++ __u32 crc;
+
+- ret = jffs2_flash_read(c, ref_offset(fn->raw), sizeof(*latest_node), &retlen, (void *)latest_node);
+- if (ret || retlen != sizeof(*latest_node)) {
+- printk(KERN_NOTICE "MTD read in jffs2_do_read_inode() failed: Returned %d, %ld of %d bytes read\n",
+- ret, (long)retlen, sizeof(*latest_node));
+- /* FIXME: If this fails, there seems to be a memory leak. Find it. */
+- up(&f->sem);
+- jffs2_do_clear_inode(c, f);
+- return ret?ret:-EIO;
+- }
+-
+- crc = crc32(0, latest_node, sizeof(*latest_node)-8);
+- if (crc != je32_to_cpu(latest_node->node_crc)) {
+- printk(KERN_NOTICE "CRC failed for read_inode of inode %u at physical location 0x%x\n", ino, ref_offset(fn->raw));
+- up(&f->sem);
+- jffs2_do_clear_inode(c, f);
+- return -EIO;
+- }
++ ret = c->mtd->read(c->mtd, fn->raw->flash_offset & ~3, sizeof(latest_node), &retlen, (void *)&latest_node);
++ if (ret || retlen != sizeof(latest_node)) {
++ printk(KERN_NOTICE "MTD read in jffs2_read_inode() failed: Returned %d, %ld of %d bytes read\n",
++ ret, (long)retlen, sizeof(latest_node));
++ jffs2_clear_inode(inode);
++ make_bad_inode(inode);
++ return;
++ }
++
++ crc = crc32(0, &latest_node, sizeof(latest_node)-8);
++ if (crc != latest_node.node_crc) {
++ printk(KERN_NOTICE "CRC failed for read_inode of inode %ld at physical location 0x%x\n", inode->i_ino, fn->raw->flash_offset & ~3);
++ jffs2_clear_inode(inode);
++ make_bad_inode(inode);
++ return;
++ }
++
++ inode->i_mode = latest_node.mode;
++ inode->i_uid = latest_node.uid;
++ inode->i_gid = latest_node.gid;
++ inode->i_size = latest_node.isize;
++ if (S_ISREG(inode->i_mode))
++ jffs2_truncate_fraglist(c, &f->fraglist, latest_node.isize);
++ inode->i_atime = latest_node.atime;
++ inode->i_mtime = latest_node.mtime;
++ inode->i_ctime = latest_node.ctime;
++ }
++
++ /* OK, now the special cases. Certain inode types should
++ have only one data node, and it's kept as the metadata
++ node */
++ if (S_ISBLK(inode->i_mode) || S_ISCHR(inode->i_mode) ||
++ S_ISLNK(inode->i_mode)) {
++ if (f->metadata) {
++ printk(KERN_WARNING "Argh. Special inode #%lu with mode 0%o had metadata node\n", inode->i_ino, inode->i_mode);
++ jffs2_clear_inode(inode);
++ make_bad_inode(inode);
++ return;
++ }
++ if (!f->fraglist) {
++ printk(KERN_WARNING "Argh. Special inode #%lu with mode 0%o has no fragments\n", inode->i_ino, inode->i_mode);
++ jffs2_clear_inode(inode);
++ make_bad_inode(inode);
++ return;
++ }
++ /* ASSERT: f->fraglist != NULL */
++ if (f->fraglist->next) {
++ printk(KERN_WARNING "Argh. Special inode #%lu with mode 0%o had more than one node\n", inode->i_ino, inode->i_mode);
++ /* FIXME: Deal with it - check crc32, check for duplicate node, check times and discard the older one */
++ jffs2_clear_inode(inode);
++ make_bad_inode(inode);
++ return;
++ }
++ /* OK. We're happy */
++ f->metadata = f->fraglist->node;
++ jffs2_free_node_frag(f->fraglist);
++ f->fraglist = NULL;
++ }
++
++ inode->i_blksize = PAGE_SIZE;
++ inode->i_blocks = (inode->i_size + 511) >> 9;
++
++ switch (inode->i_mode & S_IFMT) {
++ unsigned short rdev;
+
+- switch(je32_to_cpu(latest_node->mode) & S_IFMT) {
++ case S_IFLNK:
++ inode->i_op = &jffs2_symlink_inode_operations;
++ /* Hack to work around broken isize in old symlink code.
++ Remove this when dwmw2 comes to his senses and stops
++ symlinks from being an entirely gratuitous special
++ case. */
++ if (!inode->i_size)
++ inode->i_size = latest_node.dsize;
++ break;
++
+ case S_IFDIR:
+- if (mctime_ver > je32_to_cpu(latest_node->version)) {
++ if (mctime_ver > latest_node.version) {
+ /* The times in the latest_node are actually older than
+ mctime in the latest dirent. Cheat. */
+- latest_node->ctime = latest_node->mtime = cpu_to_je32(latest_mctime);
++ inode->i_mtime = inode->i_ctime = inode->i_atime =
++ latest_mctime;
+ }
++ inode->i_op = &jffs2_dir_inode_operations;
++ inode->i_fop = &jffs2_dir_operations;
+ break;
+
+-
+ case S_IFREG:
+- /* If it was a regular file, truncate it to the latest node's isize */
+- jffs2_truncate_fraglist(c, f, je32_to_cpu(latest_node->isize));
+- jffs2_merge_nodes(c, f, je32_to_cpu(latest_node->isize), JFFS2_FRAGS_NR_NODES_THRESHOLD_NORMAL);
++ inode->i_op = &jffs2_file_inode_operations;
++ inode->i_fop = &jffs2_file_operations;
++ inode->i_mapping->a_ops = &jffs2_file_address_operations;
++ inode->i_mapping->nrpages = 0;
+ break;
+
+- case S_IFLNK:
+- /* Hack to work around broken isize in old symlink code.
+- Remove this when dwmw2 comes to his senses and stops
+- symlinks from being an entirely gratuitous special
+- case. */
+- if (!je32_to_cpu(latest_node->isize))
+- latest_node->isize = latest_node->dsize;
+- /* fall through... */
+-
+ case S_IFBLK:
+ case S_IFCHR:
+- /* Xertain inode types should have only one data node, and it's
+- kept as the metadata node */
+- if (f->metadata) {
+- printk(KERN_WARNING "Argh. Special inode #%u with mode 0%o had metadata node\n", ino, je32_to_cpu(latest_node->mode));
+- up(&f->sem);
+- jffs2_do_clear_inode(c, f);
+- return -EIO;
+- }
+- if (!frag_first(&f->fragtree)) {
+- printk(KERN_WARNING "Argh. Special inode #%u with mode 0%o has no fragments\n", ino, je32_to_cpu(latest_node->mode));
+- up(&f->sem);
+- jffs2_do_clear_inode(c, f);
+- return -EIO;
+- }
+- /* ASSERT: f->fraglist != NULL */
+- if (frag_next(frag_first(&f->fragtree))) {
+- printk(KERN_WARNING "Argh. Special inode #%u with mode 0%o had more than one node\n", ino, je32_to_cpu(latest_node->mode));
+- /* FIXME: Deal with it - check crc32, check for duplicate node, check times and discard the older one */
+- up(&f->sem);
+- jffs2_do_clear_inode(c, f);
+- return -EIO;
+- }
+- /* OK. We're happy */
+- f->metadata = frag_first(&f->fragtree)->node;
+- jffs2_free_node_frag(frag_first(&f->fragtree));
+- f->fragtree = RB_ROOT;
++ /* Read the device numbers from the media */
++ D1(printk(KERN_DEBUG "Reading device numbers from flash\n"));
++ if (jffs2_read_dnode(c, f->metadata, (char *)&rdev, 0, sizeof(rdev)) < 0) {
++ /* Eep */
++ printk(KERN_NOTICE "Read device numbers for inode %lu failed\n", (unsigned long)inode->i_ino);
++ jffs2_clear_inode(inode);
++ make_bad_inode(inode);
++ return;
++ }
++
++ case S_IFSOCK:
++ case S_IFIFO:
++ inode->i_op = &jffs2_file_inode_operations;
++ init_special_inode(inode, inode->i_mode, kdev_t_to_nr(MKDEV(rdev>>8, rdev&0xff)));
+ break;
+- }
+
+- return 0;
++ default:
++ printk(KERN_WARNING "jffs2_read_inode(): Bogus imode %o for ino %lu", inode->i_mode, (unsigned long)inode->i_ino);
++ }
++ D1(printk(KERN_DEBUG "jffs2_read_inode() returning\n"));
+ }
+
+-void jffs2_do_clear_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f)
++void jffs2_clear_inode (struct inode *inode)
+ {
++ /* We can forget about this inode for now - drop all
++ * the nodelists associated with it, etc.
++ */
++ struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
++ struct jffs2_node_frag *frag, *frags;
+ struct jffs2_full_dirent *fd, *fds;
+- /* I don't think we care about the potential race due to reading this
+- without f->sem. It can never get undeleted. */
+- int deleted = f->inocache && !f->inocache->nlink;
+-
+- /* If it's a deleted inode, grab the alloc_sem. This prevents
+- jffs2_garbage_collect_pass() from deciding that it wants to
+- garbage collect one of the nodes we're just about to mark
+- obsolete -- by the time we drop alloc_sem and return, all
+- the nodes are marked obsolete, and jffs2_g_c_pass() won't
+- call iget() for the inode in question.
++ struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+
+- We also do this to keep the (maybe temporary) BUG() in
+- jffs2_mark_node_obsolete() from triggering.
+- */
+- if(deleted)
+- down(&c->alloc_sem);
++ D1(printk(KERN_DEBUG "jffs2_clear_inode(): ino #%lu mode %o\n", inode->i_ino, inode->i_mode));
+
+ down(&f->sem);
+
++ frags = f->fraglist;
++ fds = f->dents;
+ if (f->metadata) {
+- if (deleted)
++ if (!f->inocache->nlink)
+ jffs2_mark_node_obsolete(c, f->metadata->raw);
+ jffs2_free_full_dnode(f->metadata);
+ }
+
+- if (deleted) {
+- if (jffs2_construct_fragtree_nolock_if_missing(c, f))
+- printk(KERN_WARNING "%s: ino #%lu cannot clear\n", __func__,
+- OFNI_EDONI_2SFFJ(f)->i_ino);
+- }
+- jffs2_kill_fragtree(&f->fragtree, deleted?c:NULL);
+- CLEAR_NR_FRAGS(f);
+-
+- fds = f->dents;
++ while (frags) {
++ frag = frags;
++ frags = frag->next;
++ D2(printk(KERN_DEBUG "jffs2_clear_inode: frag at 0x%x-0x%x: node %p, frags %d--\n", frag->ofs, frag->ofs+frag->size, frag->node, frag->node?frag->node->frags:0));
++
++ if (frag->node && !(--frag->node->frags)) {
++ /* Not a hole, and it's the final remaining frag of this node. Free the node */
++ if (!f->inocache->nlink)
++ jffs2_mark_node_obsolete(c, frag->node->raw);
+
++ jffs2_free_full_dnode(frag->node);
++ }
++ jffs2_free_node_frag(frag);
++ }
+ while(fds) {
+ fd = fds;
+ fds = fd->next;
+@@ -560,7 +502,5 @@
+ }
+
+ up(&f->sem);
++};
+
+- if(deleted)
+- up(&c->alloc_sem);
+-}
+diff -Nur linux/fs/jffs2/scan.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/scan.c
+--- linux/fs/jffs2/scan.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/scan.c 2003-06-23 01:47:04.000000000 +0700
+@@ -1,28 +1,47 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: scan.c,v 1.91 2002/09/09 07:47:53 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
++ *
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: scan.c,v 1.51.2.2 2002/02/23 13:34:31 dwmw2 Exp $
+ *
+- * ChangeLog:
+- * 29-Oct-2002 Lineo Japan, Inc. add member struct jffs2_sb_info#nr_bad_blocks
+- * 01-Oct-2002 Lineo Japan, Inc. remove double reads from NAND flash
+- * 13-Sep-2002 Lineo Japan, Inc. remove warning message for NAND flash
+ */
+ #include <linux/kernel.h>
+ #include <linux/slab.h>
++#include <linux/jffs2.h>
+ #include <linux/mtd/mtd.h>
+ #include <linux/pagemap.h>
+-#include <linux/compiler.h>
+-#include "crc32.h"
+ #include "nodelist.h"
++#include "crc32.h"
+
+-#define EMPTY_SCAN_SIZE 1024
+
+ #define DIRTY_SPACE(x) do { typeof(x) _x = (x); \
+ c->free_size -= _x; c->dirty_size += _x; \
+@@ -44,76 +63,39 @@
+ } while(0)
+
+ static uint32_t pseudo_random;
++static void jffs2_rotate_lists(struct jffs2_sb_info *c);
+
+-static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
+- unsigned char *buf, uint32_t buf_size);
++static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb);
+
+ /* These helper functions _must_ increase ofs and also do the dirty/used space accounting.
+ * Returning an error will abort the mount - bad checksums etc. should just mark the space
+ * as dirty.
+ */
+-static int jffs2_scan_inode_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
+- struct jffs2_raw_inode *ri, uint32_t ofs);
+-static int jffs2_scan_dirent_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
+- struct jffs2_raw_dirent *rd, uint32_t ofs);
+-
+-#define BLK_STATE_ALLFF 0
+-#define BLK_STATE_CLEAN 1
+-#define BLK_STATE_PARTDIRTY 2
+-#define BLK_STATE_CLEANMARKER 3
+-#define BLK_STATE_ALLDIRTY 4
+-#define BLK_STATE_BADBLOCK 5
++static int jffs2_scan_empty(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb, __u32 *ofs, int *noise);
++static int jffs2_scan_inode_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb, __u32 *ofs);
++static int jffs2_scan_dirent_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb, __u32 *ofs);
++
+
+ int jffs2_scan_medium(struct jffs2_sb_info *c)
+ {
+ int i, ret;
+- uint32_t empty_blocks = 0;
+- unsigned char *flashbuf = NULL;
+- uint32_t buf_size = 0;
+- size_t pointlen;
++ __u32 empty_blocks = 0;
+
+ if (!c->blocks) {
+ printk(KERN_WARNING "EEEK! c->blocks is NULL!\n");
+ return -EINVAL;
+ }
+- if (c->mtd->point) {
+- ret = c->mtd->point (c->mtd, 0, c->mtd->size, &pointlen, &flashbuf);
+- if (!ret && pointlen < c->mtd->size) {
+- /* Don't muck about if it won't let us point to the whole flash */
+- D1(printk(KERN_DEBUG "MTD point returned len too short: 0x%x\n", pointlen));
+- c->mtd->unpoint(c->mtd, flashbuf);
+- flashbuf = NULL;
+- }
+- if (ret)
+- D1(printk(KERN_DEBUG "MTD point failed %d\n", ret));
+- }
+- if (!flashbuf) {
+- /* For NAND it's quicker to read a whole eraseblock at a time,
+- apparently */
+- if (jffs2_cleanmarker_oob(c))
+- buf_size = c->sector_size;
+- else
+- buf_size = PAGE_SIZE;
+-
+- D1(printk(KERN_DEBUG "Allocating readbuf of %d bytes\n", buf_size));
+- flashbuf = kmalloc(buf_size, GFP_KERNEL);
+- if (!flashbuf)
+- return -ENOMEM;
+- }
+-
+ for (i=0; i<c->nr_blocks; i++) {
+ struct jffs2_eraseblock *jeb = &c->blocks[i];
+
+- ret = jffs2_scan_eraseblock(c, jeb, buf_size?flashbuf:(flashbuf+jeb->offset), buf_size);
+-
++ ret = jffs2_scan_eraseblock(c, jeb);
+ if (ret < 0)
+- goto scan_medium_exit;
++ return ret;
+
+ ACCT_PARANOIA_CHECK(jeb);
+
+ /* Now decide which list to put it on */
+- switch(ret) {
+- case BLK_STATE_ALLFF:
++ if (ret == 1) {
+ /*
+ * Empty block. Since we can't be sure it
+ * was entirely erased, we just queue it for erase
+@@ -121,13 +103,10 @@
+ * is complete. Meanwhile we still count it as empty
+ * for later checks.
+ */
+- empty_blocks++;
+ list_add(&jeb->list, &c->erase_pending_list);
+- c->erasing_dirty_size += jeb->dirty_size;
++ empty_blocks++;
+ c->nr_erasing_blocks++;
+- break;
+-
+- case BLK_STATE_CLEANMARKER:
++ } else if (jeb->used_size == PAD(sizeof(struct jffs2_unknown_node)) && !jeb->first_node->next_in_ino) {
+ /* Only a CLEANMARKER node is valid */
+ if (!jeb->dirty_size) {
+ /* It's actually free */
+@@ -137,17 +116,12 @@
+ /* Dirt */
+ D1(printk(KERN_DEBUG "Adding all-dirty block at 0x%08x to erase_pending_list\n", jeb->offset));
+ list_add(&jeb->list, &c->erase_pending_list);
+- c->erasing_dirty_size += jeb->dirty_size;
+ c->nr_erasing_blocks++;
+ }
+- break;
+-
+- case BLK_STATE_CLEAN:
++ } else if (jeb->used_size > c->sector_size - (2*sizeof(struct jffs2_raw_inode))) {
+ /* Full (or almost full) of clean data. Clean list */
+ list_add(&jeb->list, &c->clean_list);
+- break;
+-
+- case BLK_STATE_PARTDIRTY:
++ } else if (jeb->used_size) {
+ /* Some data, but not full. Dirty list. */
+ /* Except that we want to remember the block with most free space,
+ and stick it in the 'nextblock' position to start writing to it.
+@@ -155,212 +129,60 @@
+ not the one with most free space.
+ */
+ if (jeb->free_size > 2*sizeof(struct jffs2_raw_inode) &&
+- (jffs2_can_mark_obsolete(c) || jeb->free_size > c->wbuf_pagesize) &&
+- (!c->nextblock || c->nextblock->free_size < jeb->free_size)) {
++ (!c->nextblock || c->nextblock->free_size < jeb->free_size)) {
+ /* Better candidate for the next writes to go to */
+- if (c->nextblock) {
+- c->nextblock->dirty_size += c->nextblock->free_size + c->nextblock->wasted_size;
+- c->dirty_size += c->nextblock->free_size + c->nextblock->wasted_size;
+- c->free_size -= c->nextblock->free_size;
+- c->wasted_size -= c->nextblock->wasted_size;
+- c->nextblock->free_size = c->nextblock->wasted_size = 0;
+- if (VERYDIRTY(c, c->nextblock->dirty_size)) {
+- list_add(&c->nextblock->list, &c->very_dirty_list);
+- } else {
+- list_add(&c->nextblock->list, &c->dirty_list);
+- }
+- }
++ if (c->nextblock)
++ list_add(&c->nextblock->list, &c->dirty_list);
+ c->nextblock = jeb;
+ } else {
+- jeb->dirty_size += jeb->free_size + jeb->wasted_size;
+- c->dirty_size += jeb->free_size + jeb->wasted_size;
+- c->free_size -= jeb->free_size;
+- c->wasted_size -= jeb->wasted_size;
+- jeb->free_size = jeb->wasted_size = 0;
+- if (VERYDIRTY(c, jeb->dirty_size)) {
+- list_add(&jeb->list, &c->very_dirty_list);
+- } else {
+- list_add(&jeb->list, &c->dirty_list);
+- }
++ list_add(&jeb->list, &c->dirty_list);
+ }
+- break;
+-
+- case BLK_STATE_ALLDIRTY:
++ } else {
+ /* Nothing valid - not even a clean marker. Needs erasing. */
+ /* For now we just put it on the erasing list. We'll start the erases later */
+- D1(printk(KERN_NOTICE "JFFS2: Erase block at 0x%08x is not formatted. It will be erased\n", jeb->offset));
++ printk(KERN_NOTICE "JFFS2: Erase block at 0x%08x is not formatted. It will be erased\n", jeb->offset);
+ list_add(&jeb->list, &c->erase_pending_list);
+- c->erasing_dirty_size += jeb->dirty_size;
+ c->nr_erasing_blocks++;
+- break;
+-
+- case BLK_STATE_BADBLOCK:
+- D1(printk(KERN_NOTICE "JFFS2: Block at 0x%08x is bad\n", jeb->offset));
+- list_add(&jeb->list, &c->bad_list);
+- c->bad_size += c->sector_size;
+- c->free_size -= c->sector_size;
+- c->nr_bad_blocks++;
+- break;
+- default:
+- printk(KERN_WARNING "jffs2_scan_medium(): unknown block state\n");
+- BUG();
+ }
+ }
++ /* Rotate the lists by some number to ensure wear levelling */
++ jffs2_rotate_lists(c);
+
+- ret = 0;
+-
+- /* Nextblock dirty is always seen as wasted, because we cannot recycle it now */
+- if (c->nextblock && (c->nextblock->dirty_size)) {
+- c->nextblock->wasted_size += c->nextblock->dirty_size;
+- c->wasted_size += c->nextblock->dirty_size;
+- c->dirty_size -= c->nextblock->dirty_size;
+- c->nextblock->dirty_size = 0;
+- }
+-
+- if (!jffs2_can_mark_obsolete(c) && c->nextblock && (c->nextblock->free_size & (c->wbuf_pagesize-1))) {
+- /* If we're going to start writing into a block which already
+- contains data, and the end of the data isn't page-aligned,
+- skip a little and align it. */
+-
+- uint32_t skip = c->nextblock->free_size & (c->wbuf_pagesize-1);
+-
+- D1(printk(KERN_DEBUG "jffs2_scan_medium(): Skipping %d bytes in nextblock to ensure page alignment\n",
+- skip));
+- c->nextblock->wasted_size += skip;
+- c->wasted_size += skip;
+-
+- c->nextblock->free_size -= skip;
+- c->free_size -= skip;
+- }
+ if (c->nr_erasing_blocks) {
+- if ( !c->used_size && ((empty_blocks+c->nr_bad_blocks)!= c->nr_blocks || c->nr_bad_blocks == c->nr_blocks) ) {
++ if (!c->used_size && empty_blocks != c->nr_blocks) {
+ printk(KERN_NOTICE "Cowardly refusing to erase blocks on filesystem with no valid JFFS2 nodes\n");
+- printk(KERN_NOTICE "empty_blocks %d, bad_blocks %d, c->nr_blocks %d\n",empty_blocks,c->nr_bad_blocks,c->nr_blocks);
+- ret = -EIO;
+- goto scan_medium_exit;
++ return -EIO;
+ }
+ jffs2_erase_pending_trigger(c);
+ }
+-
+- scan_medium_exit:
+- if (buf_size)
+- kfree(flashbuf);
+- else
+- c->mtd->unpoint(c->mtd, flashbuf);
+-
+- return ret;
+-}
+-
+-static int jffs2_fill_scan_buf (struct jffs2_sb_info *c, unsigned char *buf,
+- uint32_t ofs, uint32_t len)
+-{
+- int ret;
+- size_t retlen;
+-
+- ret = jffs2_flash_read(c, ofs, len, &retlen, buf);
+- if (ret) {
+- D1(printk(KERN_WARNING "mtd->read(0x%x bytes from 0x%x) returned %d\n", len, ofs, ret));
+- return ret;
+- }
+- if (retlen < len) {
+- D1(printk(KERN_WARNING "Read at 0x%x gave only 0x%x bytes\n", ofs, retlen));
+- return -EIO;
+- }
+- D2(printk(KERN_DEBUG "Read 0x%x bytes from 0x%08x into buf\n", len, ofs));
+- D2(printk(KERN_DEBUG "000: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
+- buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7], buf[8], buf[9], buf[10], buf[11], buf[12], buf[13], buf[14], buf[15]));
+ return 0;
+ }
+
+-static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
+- unsigned char *buf, uint32_t buf_size)
+-{
+- struct jffs2_unknown_node *node;
+- struct jffs2_unknown_node crcnode;
+- uint32_t ofs, prevofs;
+- uint32_t hdr_crc, buf_ofs, buf_len;
++static int jffs2_scan_eraseblock (struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb) {
++ struct jffs2_unknown_node node;
++ __u32 ofs, prevofs;
++ __u32 hdr_crc, nodetype;
+ int err;
+ int noise = 0;
+- int wasempty = 0;
+- uint32_t empty_start = 0;
+-#ifdef CONFIG_JFFS2_FS_NAND
+- int cleanmarkerfound = 0;
+-#endif
+
+ ofs = jeb->offset;
+ prevofs = jeb->offset - 1;
+
+ D1(printk(KERN_DEBUG "jffs2_scan_eraseblock(): Scanning block at 0x%x\n", ofs));
+
+-#ifdef CONFIG_JFFS2_FS_NAND
+- if (jffs2_cleanmarker_oob(c)) {
+- int ret = jffs2_check_nand_cleanmarker(c, jeb);
+- D2(printk(KERN_NOTICE "jffs_check_nand_cleanmarker returned %d\n",ret));
+- /* Even if it's not found, we still scan to see
+- if the block is empty. We use this information
+- to decide whether to erase it or not. */
+- switch (ret) {
+- case 0: cleanmarkerfound = 1; break;
+- case 1: break;
+- case 2: return BLK_STATE_BADBLOCK;
+- case 3: return BLK_STATE_ALLDIRTY; /* Block has failed to erase min. once */
+- default: return ret;
+- }
+- }
+-#endif
+- buf_ofs = jeb->offset;
+-
+- if (!buf_size) {
+- buf_len = c->sector_size;
+- } else {
+- buf_len = EMPTY_SCAN_SIZE;
+- err = jffs2_fill_scan_buf(c, buf, buf_ofs, buf_len);
+- if (err)
+- return err;
+- }
+-
+- /* We temporarily use 'ofs' as a pointer into the buffer/jeb */
+- ofs = 0;
+-
+- /* Scan only 4KiB of 0xFF before declaring it's empty */
+- while(ofs < EMPTY_SCAN_SIZE && *(uint32_t *)(&buf[ofs]) == 0xFFFFFFFF)
+- ofs += 4;
+-
+- if (ofs == EMPTY_SCAN_SIZE) {
+-#ifdef CONFIG_JFFS2_FS_NAND
+- if (jffs2_cleanmarker_oob(c)) {
+- /* scan oob, take care of cleanmarker */
+- int ret = jffs2_check_oob_empty(c, jeb, cleanmarkerfound);
+- D2(printk(KERN_NOTICE "jffs2_check_oob_empty returned %d\n",ret));
+- switch (ret) {
+- case 0: return cleanmarkerfound ? BLK_STATE_CLEANMARKER : BLK_STATE_ALLFF;
+- case 1: return BLK_STATE_ALLDIRTY;
+- case 2: return BLK_STATE_BADBLOCK; /* case 2/3 are paranoia checks */
+- case 3: return BLK_STATE_ALLDIRTY; /* Block has failed to erase min. once */
+- default: return ret;
+- }
+- }
+-#endif
++ err = jffs2_scan_empty(c, jeb, &ofs, &noise);
++ if (err) return err;
++ if (ofs == jeb->offset + c->sector_size) {
+ D1(printk(KERN_DEBUG "Block at 0x%08x is empty (erased)\n", jeb->offset));
+- return BLK_STATE_ALLFF; /* OK to erase if all blocks are like this */
+- }
+- if (ofs) {
+- D1(printk(KERN_DEBUG "Free space at %08x ends at %08x\n", jeb->offset,
+- jeb->offset + ofs));
+- DIRTY_SPACE(ofs);
++ return 1; /* special return code */
+ }
+-
+- /* Now ofs is a complete physical flash offset as it always was... */
+- ofs += jeb->offset;
+-
++
+ noise = 10;
+
+ while(ofs < jeb->offset + c->sector_size) {
+-
++ ssize_t retlen;
+ ACCT_PARANOIA_CHECK(jeb);
+-
+- cond_resched();
+-
++
+ if (ofs & 3) {
+ printk(KERN_WARNING "Eep. ofs 0x%08x not word-aligned!\n", ofs);
+ ofs = (ofs+3)&~3;
+@@ -373,187 +195,93 @@
+ continue;
+ }
+ prevofs = ofs;
+-
+- if (jeb->offset + c->sector_size < ofs + sizeof(*node)) {
+- D1(printk(KERN_DEBUG "Fewer than %d bytes left to end of block. (%x+%x<%x+%x) Not reading\n", sizeof(struct jffs2_unknown_node),
+- jeb->offset, c->sector_size, ofs, sizeof(*node)));
++
++ if (jeb->offset + c->sector_size < ofs + sizeof(node)) {
++ D1(printk(KERN_DEBUG "Fewer than %d bytes left to end of block. Not reading\n", sizeof(struct jffs2_unknown_node)));
+ DIRTY_SPACE((jeb->offset + c->sector_size)-ofs);
+ break;
+ }
+
+- if (buf_ofs + buf_len < ofs + sizeof(*node)) {
+- buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
+- D1(printk(KERN_DEBUG "Fewer than %d bytes (node header) left to end of buf. Reading 0x%x at 0x%08x\n",
+- sizeof(struct jffs2_unknown_node), buf_len, ofs));
+- err = jffs2_fill_scan_buf(c, buf, ofs, buf_len);
+- if (err)
+- return err;
+- buf_ofs = ofs;
+- }
+-
+- node = (struct jffs2_unknown_node *)&buf[ofs-buf_ofs];
+-
+- if (*(uint32_t *)(&buf[ofs-buf_ofs]) == 0xffffffff) {
+- uint32_t inbuf_ofs = ofs - buf_ofs + 4;
+- uint32_t scanend;
+-
+- empty_start = ofs;
+- ofs += 4;
+-
+- /* If scanning empty space after only a cleanmarker, don't
+- bother scanning the whole block */
+- if (unlikely(empty_start == jeb->offset + c->cleanmarker_size &&
+- jeb->offset + EMPTY_SCAN_SIZE < buf_ofs + buf_len))
+- scanend = jeb->offset + EMPTY_SCAN_SIZE - buf_ofs;
+- else
+- scanend = buf_len;
+-
+- D1(printk(KERN_DEBUG "Found empty flash at 0x%08x\n", ofs));
+- while (inbuf_ofs < scanend) {
+- if (*(uint32_t *)(&buf[inbuf_ofs]) != 0xffffffff)
+- goto emptyends;
+-
+- inbuf_ofs+=4;
+- ofs += 4;
+- }
+- /* Ran off end. */
+- D1(printk(KERN_DEBUG "Empty flash ends normally at 0x%08x\n", ofs));
+-
+- if (buf_ofs == jeb->offset && jeb->used_size == PAD(c->cleanmarker_size) &&
+- !jeb->first_node->next_in_ino && !jeb->dirty_size)
+- return BLK_STATE_CLEANMARKER;
+- wasempty = 1;
++ err = c->mtd->read(c->mtd, ofs, sizeof(node), &retlen, (char *)&node);
++
++ if (err) {
++ D1(printk(KERN_WARNING "mtd->read(0x%x bytes from 0x%x) returned %d\n", sizeof(node), ofs, err));
++ return err;
++ }
++ if (retlen < sizeof(node)) {
++ D1(printk(KERN_WARNING "Read at 0x%x gave only 0x%x bytes\n", ofs, retlen));
++ DIRTY_SPACE(retlen);
++ ofs += retlen;
+ continue;
+- } else if (wasempty) {
+- emptyends:
+- if (! (c->mtd->type == MTD_NANDFLASH &&
+- (ofs - empty_start) < c->mtd->oobblock &&
+- (ofs % c->mtd->oobblock) == 0))
+- printk(KERN_WARNING "Empty flash at 0x%08x ends at 0x%08x\n", empty_start, ofs);
+- DIRTY_SPACE(ofs-empty_start);
+- wasempty = 0;
++ }
++
++ if (node.magic == JFFS2_EMPTY_BITMASK && node.nodetype == JFFS2_EMPTY_BITMASK) {
++ D1(printk(KERN_DEBUG "Found empty flash at 0x%x\n", ofs));
++ err = jffs2_scan_empty(c, jeb, &ofs, &noise);
++ if (err) return err;
+ continue;
+ }
+
+- if (ofs == jeb->offset && je16_to_cpu(node->magic) == KSAMTIB_CIGAM_2SFFJ) {
++ if (ofs == jeb->offset && node.magic == KSAMTIB_CIGAM_2SFFJ) {
+ printk(KERN_WARNING "Magic bitmask is backwards at offset 0x%08x. Wrong endian filesystem?\n", ofs);
+ DIRTY_SPACE(4);
+ ofs += 4;
+ continue;
+ }
+- if (je16_to_cpu(node->magic) == JFFS2_DIRTY_BITMASK) {
++ if (node.magic == JFFS2_DIRTY_BITMASK) {
+ D1(printk(KERN_DEBUG "Empty bitmask at 0x%08x\n", ofs));
+ DIRTY_SPACE(4);
+ ofs += 4;
+ continue;
+ }
+- if (je16_to_cpu(node->magic) == JFFS2_OLD_MAGIC_BITMASK) {
++ if (node.magic == JFFS2_OLD_MAGIC_BITMASK) {
+ printk(KERN_WARNING "Old JFFS2 bitmask found at 0x%08x\n", ofs);
+ printk(KERN_WARNING "You cannot use older JFFS2 filesystems with newer kernels\n");
+ DIRTY_SPACE(4);
+ ofs += 4;
+ continue;
+ }
+- if (je16_to_cpu(node->magic) != JFFS2_MAGIC_BITMASK) {
++ if (node.magic != JFFS2_MAGIC_BITMASK) {
+ /* OK. We're out of possibilities. Whinge and move on */
+- noisy_printk(&noise, "jffs2_scan_eraseblock(): Magic bitmask 0x%04x not found at 0x%08x: 0x%04x instead\n",
+- JFFS2_MAGIC_BITMASK, ofs,
+- je16_to_cpu(node->magic));
++ noisy_printk(&noise, "jffs2_scan_eraseblock(): Magic bitmask 0x%04x not found at 0x%08x: 0x%04x instead\n", JFFS2_MAGIC_BITMASK, ofs, node.magic);
+ DIRTY_SPACE(4);
+ ofs += 4;
+ continue;
+ }
+ /* We seem to have a node of sorts. Check the CRC */
+- crcnode.magic = node->magic;
+- crcnode.nodetype = cpu_to_je16( je16_to_cpu(node->nodetype) | JFFS2_NODE_ACCURATE);
+- crcnode.totlen = node->totlen;
+- hdr_crc = crc32(0, &crcnode, sizeof(crcnode)-4);
+-
+- if (hdr_crc != je32_to_cpu(node->hdr_crc)) {
++ nodetype = node.nodetype;
++ node.nodetype |= JFFS2_NODE_ACCURATE;
++ hdr_crc = crc32(0, &node, sizeof(node)-4);
++ node.nodetype = nodetype;
++ if (hdr_crc != node.hdr_crc) {
+ noisy_printk(&noise, "jffs2_scan_eraseblock(): Node at 0x%08x {0x%04x, 0x%04x, 0x%08x) has invalid CRC 0x%08x (calculated 0x%08x)\n",
+- ofs, je16_to_cpu(node->magic),
+- je16_to_cpu(node->nodetype),
+- je32_to_cpu(node->totlen),
+- je32_to_cpu(node->hdr_crc),
+- hdr_crc);
++ ofs, node.magic, node.nodetype, node.totlen, node.hdr_crc, hdr_crc);
+ DIRTY_SPACE(4);
+ ofs += 4;
+ continue;
+ }
+
+- if (ofs + je32_to_cpu(node->totlen) >
+- jeb->offset + c->sector_size) {
+- /* Eep. Node goes over the end of the erase block. */
+- printk(KERN_WARNING "Node at 0x%08x with length 0x%08x would run over the end of the erase block\n",
+- ofs, je32_to_cpu(node->totlen));
+- printk(KERN_WARNING "Perhaps the file system was created with the wrong erase size?\n");
+- DIRTY_SPACE(4);
+- ofs += 4;
+- continue;
+- }
+-
+- if (!(je16_to_cpu(node->nodetype) & JFFS2_NODE_ACCURATE)) {
+- /* Wheee. This is an obsoleted node */
+- D2(printk(KERN_DEBUG "Node at 0x%08x is obsolete. Skipping\n", ofs));
+- DIRTY_SPACE(PAD(je32_to_cpu(node->totlen)));
+- ofs += PAD(je32_to_cpu(node->totlen));
+- continue;
+- }
+-
+- switch(je16_to_cpu(node->nodetype)) {
++ switch(node.nodetype | JFFS2_NODE_ACCURATE) {
+ case JFFS2_NODETYPE_INODE:
+- if (buf_ofs + buf_len < ofs + sizeof(struct jffs2_raw_inode)) {
+- buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
+- D1(printk(KERN_DEBUG "Fewer than %d bytes (inode node) left to end of buf. Reading 0x%x at 0x%08x\n",
+- sizeof(struct jffs2_raw_inode), buf_len, ofs));
+- err = jffs2_fill_scan_buf(c, buf, ofs, buf_len);
+- if (err)
+- return err;
+- buf_ofs = ofs;
+- node = (void *)buf;
+- }
+- if (buf_ofs + buf_len < ofs + sizeof(struct jffs2_raw_inode) + je32_to_cpu(((struct jffs2_raw_inode*)node)->csize)) {
+- buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
+- D1(printk(KERN_DEBUG "Fewer than %d bytes (inode node) left to end of buf. Reading 0x%x at 0x%08x\n",
+- sizeof(struct jffs2_raw_inode) + je32_to_cpu(((struct jffs2_raw_inode*)node)->csize), buf_len, ofs));
+- err = jffs2_fill_scan_buf(c, buf, ofs, buf_len);
+- if (err)
+- return err;
+- buf_ofs = ofs;
+- node = (void *)buf;
+- }
+- err = jffs2_scan_inode_node(c, jeb, (void *)node, ofs);
++ err = jffs2_scan_inode_node(c, jeb, &ofs);
+ if (err) return err;
+- ofs += PAD(je32_to_cpu(node->totlen));
+ break;
+
+ case JFFS2_NODETYPE_DIRENT:
+- if (buf_ofs + buf_len < ofs + je32_to_cpu(node->totlen)) {
+- buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
+- D1(printk(KERN_DEBUG "Fewer than %d bytes (dirent node) left to end of buf. Reading 0x%x at 0x%08x\n",
+- je32_to_cpu(node->totlen), buf_len, ofs));
+- err = jffs2_fill_scan_buf(c, buf, ofs, buf_len);
+- if (err)
+- return err;
+- buf_ofs = ofs;
+- node = (void *)buf;
+- }
+- err = jffs2_scan_dirent_node(c, jeb, (void *)node, ofs);
++ err = jffs2_scan_dirent_node(c, jeb, &ofs);
+ if (err) return err;
+- ofs += PAD(je32_to_cpu(node->totlen));
+ break;
+
+ case JFFS2_NODETYPE_CLEANMARKER:
+- D1(printk(KERN_DEBUG "CLEANMARKER node found at 0x%08x\n", ofs));
+- if (je32_to_cpu(node->totlen) != c->cleanmarker_size) {
++ if (node.totlen != sizeof(struct jffs2_unknown_node)) {
+ printk(KERN_NOTICE "CLEANMARKER node found at 0x%08x has totlen 0x%x != normal 0x%x\n",
+- ofs, je32_to_cpu(node->totlen), c->cleanmarker_size);
++ ofs, node.totlen, sizeof(struct jffs2_unknown_node));
+ DIRTY_SPACE(PAD(sizeof(struct jffs2_unknown_node)));
+- ofs += PAD(sizeof(struct jffs2_unknown_node));
+ } else if (jeb->first_node) {
+ printk(KERN_NOTICE "CLEANMARKER node found at 0x%08x, not first node in block (0x%08x)\n", ofs, jeb->offset);
+ DIRTY_SPACE(PAD(sizeof(struct jffs2_unknown_node)));
+ ofs += PAD(sizeof(struct jffs2_unknown_node));
++ continue;
+ } else {
+ struct jffs2_raw_node_ref *marker_ref = jffs2_alloc_raw_node_ref();
+ if (!marker_ref) {
+@@ -563,78 +291,97 @@
+ marker_ref->next_in_ino = NULL;
+ marker_ref->next_phys = NULL;
+ marker_ref->flash_offset = ofs;
+- marker_ref->totlen = c->cleanmarker_size;
++ marker_ref->totlen = sizeof(struct jffs2_unknown_node);
+ jeb->first_node = jeb->last_node = marker_ref;
+
+- USED_SPACE(PAD(c->cleanmarker_size));
+- ofs += PAD(c->cleanmarker_size);
++ USED_SPACE(PAD(sizeof(struct jffs2_unknown_node)));
+ }
+- break;
+-
+- case JFFS2_NODETYPE_PADDING:
+- DIRTY_SPACE(PAD(je32_to_cpu(node->totlen)));
+- ofs += PAD(je32_to_cpu(node->totlen));
++ ofs += PAD(sizeof(struct jffs2_unknown_node));
+ break;
+
+ default:
+- switch (je16_to_cpu(node->nodetype) & JFFS2_COMPAT_MASK) {
++ switch (node.nodetype & JFFS2_COMPAT_MASK) {
+ case JFFS2_FEATURE_ROCOMPAT:
+- printk(KERN_NOTICE "Read-only compatible feature node (0x%04x) found at offset 0x%08x\n", je16_to_cpu(node->nodetype), ofs);
++ printk(KERN_NOTICE "Read-only compatible feature node (0x%04x) found at offset 0x%08x\n", node.nodetype, ofs);
+ c->flags |= JFFS2_SB_FLAG_RO;
+- if (!(jffs2_is_readonly(c)))
++ if (!(OFNI_BS_2SFFJ(c)->s_flags & MS_RDONLY))
+ return -EROFS;
+- DIRTY_SPACE(PAD(je32_to_cpu(node->totlen)));
+- ofs += PAD(je32_to_cpu(node->totlen));
+- break;
++ DIRTY_SPACE(PAD(node.totlen));
++ ofs += PAD(node.totlen);
++ continue;
+
+ case JFFS2_FEATURE_INCOMPAT:
+- printk(KERN_NOTICE "Incompatible feature node (0x%04x) found at offset 0x%08x\n", je16_to_cpu(node->nodetype), ofs);
++ printk(KERN_NOTICE "Incompatible feature node (0x%04x) found at offset 0x%08x\n", node.nodetype, ofs);
+ return -EINVAL;
+
+ case JFFS2_FEATURE_RWCOMPAT_DELETE:
+- D1(printk(KERN_NOTICE "Unknown but compatible feature node (0x%04x) found at offset 0x%08x\n", je16_to_cpu(node->nodetype), ofs));
+- DIRTY_SPACE(PAD(je32_to_cpu(node->totlen)));
+- ofs += PAD(je32_to_cpu(node->totlen));
++ printk(KERN_NOTICE "Unknown but compatible feature node (0x%04x) found at offset 0x%08x\n", node.nodetype, ofs);
++ DIRTY_SPACE(PAD(node.totlen));
++ ofs += PAD(node.totlen);
+ break;
+
+ case JFFS2_FEATURE_RWCOMPAT_COPY:
+- D1(printk(KERN_NOTICE "Unknown but compatible feature node (0x%04x) found at offset 0x%08x\n", je16_to_cpu(node->nodetype), ofs));
+- USED_SPACE(PAD(je32_to_cpu(node->totlen)));
+- ofs += PAD(je32_to_cpu(node->totlen));
++ printk(KERN_NOTICE "Unknown but compatible feature node (0x%04x) found at offset 0x%08x\n", node.nodetype, ofs);
++ USED_SPACE(PAD(node.totlen));
++ ofs += PAD(node.totlen);
+ break;
+ }
+ }
+ }
+-
+-
+ D1(printk(KERN_DEBUG "Block at 0x%08x: free 0x%08x, dirty 0x%08x, used 0x%08x\n", jeb->offset,
+ jeb->free_size, jeb->dirty_size, jeb->used_size));
++ return 0;
++}
+
+- /* mark_node_obsolete can add to wasted !! */
+- if (jeb->wasted_size) {
+- jeb->dirty_size += jeb->wasted_size;
+- c->dirty_size += jeb->wasted_size;
+- c->wasted_size -= jeb->wasted_size;
+- jeb->wasted_size = 0;
+- }
+-
+- if (jeb->used_size == PAD(c->cleanmarker_size) &&
+- !jeb->first_node->next_in_ino && !jeb->dirty_size)
+- return BLK_STATE_CLEANMARKER;
+- /* move blocks with max 4 byte dirty space to cleanlist */
+- else if (!ISDIRTY(c->sector_size - jeb->used_size)) {
+- c->dirty_size -= jeb->dirty_size;
+- c->wasted_size += jeb->dirty_size;
+- jeb->wasted_size += jeb->dirty_size;
+- jeb->dirty_size = 0;
+- return BLK_STATE_CLEAN;
+- } else if (jeb->used_size)
+- return BLK_STATE_PARTDIRTY;
+- else
+- return BLK_STATE_ALLDIRTY;
++/* We're pointing at the first empty word on the flash. Scan and account for the whole dirty region */
++static int jffs2_scan_empty(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb, __u32 *startofs, int *noise)
++{
++ __u32 *buf;
++ __u32 scanlen = (jeb->offset + c->sector_size) - *startofs;
++ __u32 curofs = *startofs;
++
++ buf = kmalloc(min((__u32)PAGE_SIZE, scanlen), GFP_KERNEL);
++ if (!buf) {
++ printk(KERN_WARNING "Scan buffer allocation failed\n");
++ return -ENOMEM;
++ }
++ while(scanlen) {
++ ssize_t retlen;
++ int ret, i;
++
++ ret = c->mtd->read(c->mtd, curofs, min((__u32)PAGE_SIZE, scanlen), &retlen, (char *)buf);
++ if(ret) {
++ D1(printk(KERN_WARNING "jffs2_scan_empty(): Read 0x%x bytes at 0x%08x returned %d\n", min((__u32)PAGE_SIZE, scanlen), curofs, ret));
++ kfree(buf);
++ return ret;
++ }
++ if (retlen < 4) {
++ D1(printk(KERN_WARNING "Eep. too few bytes read in scan_empty()\n"));
++ kfree(buf);
++ return -EIO;
++ }
++ for (i=0; i<(retlen / 4); i++) {
++ if (buf[i] != 0xffffffff) {
++ curofs += i*4;
++
++ noisy_printk(noise, "jffs2_scan_empty(): Empty block at 0x%08x ends at 0x%08x (with 0x%08x)! Marking dirty\n", *startofs, curofs, buf[i]);
++ DIRTY_SPACE(curofs - (*startofs));
++ *startofs = curofs;
++ kfree(buf);
++ return 0;
++ }
++ }
++ scanlen -= retlen&~3;
++ curofs += retlen&~3;
++ }
++
++ D1(printk(KERN_DEBUG "Empty flash detected from 0x%08x to 0x%08x\n", *startofs, curofs));
++ kfree(buf);
++ *startofs = curofs;
++ return 0;
+ }
+
+-static struct jffs2_inode_cache *jffs2_scan_make_ino_cache(struct jffs2_sb_info *c, uint32_t ino)
++static struct jffs2_inode_cache *jffs2_scan_make_ino_cache(struct jffs2_sb_info *c, __u32 ino)
+ {
+ struct jffs2_inode_cache *ic;
+
+@@ -663,63 +410,82 @@
+ return ic;
+ }
+
+-static int jffs2_scan_inode_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
+- struct jffs2_raw_inode *ri, uint32_t ofs)
++static int jffs2_scan_inode_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb, __u32 *ofs)
+ {
+ struct jffs2_raw_node_ref *raw;
+ struct jffs2_full_dnode *fn;
+ struct jffs2_tmp_dnode_info *tn, **tn_list;
+ struct jffs2_inode_cache *ic;
+- uint32_t dsize, csize;
+- uint32_t crc;
++ struct jffs2_raw_inode ri;
++ __u32 crc;
++ __u16 oldnodetype;
++ int ret;
++ ssize_t retlen;
++
++ D1(printk(KERN_DEBUG "jffs2_scan_inode_node(): Node at 0x%08x\n", *ofs));
+
+- D1(printk(KERN_DEBUG "jffs2_scan_inode_node(): Node at 0x%08x\n", ofs));
++ ret = c->mtd->read(c->mtd, *ofs, sizeof(ri), &retlen, (char *)&ri);
++ if (ret) {
++ printk(KERN_NOTICE "jffs2_scan_inode_node(): Read error at 0x%08x: %d\n", *ofs, ret);
++ return ret;
++ }
++ if (retlen != sizeof(ri)) {
++ printk(KERN_NOTICE "Short read: 0x%x bytes at 0x%08x instead of requested %x\n",
++ retlen, *ofs, sizeof(ri));
++ return -EIO;
++ }
+
+- /* FIXME: Actually we don't need to do all this here. We can just make a raw_node_ref for it,
+- and file it against ri->inode. We don't even need to check the CRC. If the CRC is valid,
+- all was well, if the CRC was _invalid_, we're gonna drop it when we find out anyway, so
+- it doesn't matter which inode it was filed against. Of course we have to go through and
+- do the CRC checks for each inode some time later, but we don't have to hold up the mount
+- for it.
+-
+- Hmm, perhaps we'd want to do the CRC check if there's not already an inocache for the inode
+- we think it belongs to, to prevent us from ending up creating an inocache for ino #0xFFFFFFFF
+- if that's what we see on the flash.
+- */
+-
+-
+- /* We don't get here unless the node is still valid, so we don't have to
+- mask in the ACCURATE bit any more. */
+- crc = crc32(0, ri, sizeof(*ri)-8);
++ /* We sort of assume that the node was accurate when it was
++ first written to the medium :) */
++ oldnodetype = ri.nodetype;
++ ri.nodetype |= JFFS2_NODE_ACCURATE;
++ crc = crc32(0, &ri, sizeof(ri)-8);
++ ri.nodetype = oldnodetype;
+
+- if(crc != je32_to_cpu(ri->node_crc)) {
++ if(crc != ri.node_crc) {
+ printk(KERN_NOTICE "jffs2_scan_inode_node(): CRC failed on node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
+- ofs, je32_to_cpu(ri->node_crc), crc);
+- /* We believe totlen because the CRC on the node _header_ was OK, just the node itself failed. */
+- DIRTY_SPACE(PAD(je32_to_cpu(ri->totlen)));
++ *ofs, ri.node_crc, crc);
++ /* FIXME: Why do we believe totlen? */
++ DIRTY_SPACE(4);
++ *ofs += 4;
+ return 0;
+ }
+ /* There was a bug where we wrote hole nodes out with csize/dsize
+ swapped. Deal with it */
+- if (unlikely(ri->compr == JFFS2_COMPR_ZERO && !je32_to_cpu(ri->dsize) && je32_to_cpu(ri->csize))) {
+- dsize = je32_to_cpu(ri->csize);
+- csize = 0;
+- } else {
+- csize = je32_to_cpu(ri->csize);
+- dsize = je32_to_cpu(ri->dsize);
++ if (ri.compr == JFFS2_COMPR_ZERO && !ri.dsize && ri.csize) {
++ ri.dsize = ri.csize;
++ ri.csize = 0;
+ }
+
+- if (csize) {
++ if (ri.csize) {
+ /* Check data CRC too */
+ unsigned char *dbuf;
+- uint32_t crc;
++ __u32 crc;
+
+- dbuf = (unsigned char*)ri + sizeof *ri;
+- crc = crc32(0, dbuf, csize);
+- if (crc != je32_to_cpu(ri->data_crc)) {
++ dbuf = kmalloc(PAGE_CACHE_SIZE, GFP_KERNEL);
++ if (!dbuf) {
++ printk(KERN_NOTICE "jffs2_scan_inode_node(): allocation of temporary data buffer for CRC check failed\n");
++ return -ENOMEM;
++ }
++ ret = c->mtd->read(c->mtd, *ofs+sizeof(ri), ri.csize, &retlen, dbuf);
++ if (ret) {
++ printk(KERN_NOTICE "jffs2_scan_inode_node(): Read error at 0x%08x: %d\n", *ofs+sizeof(ri), ret);
++ kfree(dbuf);
++ return ret;
++ }
++ if (retlen != ri.csize) {
++ printk(KERN_NOTICE "Short read: 0x%x bytes at 0x%08x instead of requested %x\n",
++ retlen, *ofs+ sizeof(ri), ri.csize);
++ kfree(dbuf);
++ return -EIO;
++ }
++ crc = crc32(0, dbuf, ri.csize);
++ kfree(dbuf);
++ if (crc != ri.data_crc) {
+ printk(KERN_NOTICE "jffs2_scan_inode_node(): Data CRC failed on node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
+- ofs, je32_to_cpu(ri->data_crc), crc);
+- DIRTY_SPACE(PAD(je32_to_cpu(ri->totlen)));
++ *ofs, ri.data_crc, crc);
++ DIRTY_SPACE(PAD(ri.totlen));
++ *ofs += PAD(ri.totlen);
+ return 0;
+ }
+ }
+@@ -741,7 +507,7 @@
+ jffs2_free_raw_node_ref(raw);
+ return -ENOMEM;
+ }
+- ic = jffs2_scan_make_ino_cache(c, je32_to_cpu(ri->ino));
++ ic = jffs2_scan_make_ino_cache(c, ri.ino);
+ if (!ic) {
+ jffs2_free_full_dnode(fn);
+ jffs2_free_tmp_dnode_info(tn);
+@@ -750,12 +516,8 @@
+ }
+
+ /* Build the data structures and file them for later */
+- if (dsize == PAGE_CACHE_SIZE)
+- raw->flash_offset = ofs | REF_PRISTINE;
+- else
+- raw->flash_offset = ofs | REF_NORMAL;
+-
+- raw->totlen = PAD(je32_to_cpu(ri->totlen));
++ raw->flash_offset = *ofs;
++ raw->totlen = PAD(ri.totlen);
+ raw->next_phys = NULL;
+ raw->next_in_ino = ic->nodes;
+ ic->nodes = raw;
+@@ -766,118 +528,134 @@
+ jeb->last_node = raw;
+
+ D1(printk(KERN_DEBUG "Node is ino #%u, version %d. Range 0x%x-0x%x\n",
+- je32_to_cpu(ri->ino), je32_to_cpu(ri->version),
+- je32_to_cpu(ri->offset),
+- je32_to_cpu(ri->offset)+dsize));
++ ri.ino, ri.version, ri.offset, ri.offset+ri.dsize));
+
+- pseudo_random += je32_to_cpu(ri->version);
++ pseudo_random += ri.version;
+
+ for (tn_list = &ic->scan->tmpnodes; *tn_list; tn_list = &((*tn_list)->next)) {
+- if ((*tn_list)->version < je32_to_cpu(ri->version))
++ if ((*tn_list)->version < ri.version)
+ continue;
+- if ((*tn_list)->version > je32_to_cpu(ri->version))
++ if ((*tn_list)->version > ri.version)
+ break;
+ /* Wheee. We've found another instance of the same version number.
+ We should obsolete one of them.
+ */
+- D1(printk(KERN_DEBUG "Duplicate version %d found in ino #%u. Previous one is at 0x%08x\n",
+- je32_to_cpu(ri->version), ic->ino,
+- ref_offset((*tn_list)->fn->raw)));
++ D1(printk(KERN_DEBUG "Duplicate version %d found in ino #%u. Previous one is at 0x%08x\n", ri.version, ic->ino, (*tn_list)->fn->raw->flash_offset &~3));
+ if (!jeb->used_size) {
+ D1(printk(KERN_DEBUG "No valid nodes yet found in this eraseblock 0x%08x, so obsoleting the new instance at 0x%08x\n",
+- jeb->offset, ref_offset(raw)));
+- jffs2_free_full_dnode(fn);
+- jffs2_free_tmp_dnode_info(tn);
+- raw->flash_offset |= REF_OBSOLETE;
+- DIRTY_SPACE(PAD(je32_to_cpu(ri->totlen)));
++ jeb->offset, raw->flash_offset & ~3));
++ ri.nodetype &= ~JFFS2_NODE_ACCURATE;
+ /* Perhaps we could also mark it as such on the medium. Maybe later */
+- return 0;
+ }
+ break;
+ }
+
+- /* Only do fraglist truncation in pass1 for S_IFREG inodes */
+- if (S_ISREG(je32_to_cpu(ri->mode)) && ic->scan->version < je32_to_cpu(ri->version)) {
+- ic->scan->version = je32_to_cpu(ri->version);
+- ic->scan->isize = je32_to_cpu(ri->isize);
+- }
+-
+- memset(fn,0,sizeof(*fn));
+-
+- fn->ofs = je32_to_cpu(ri->offset);
+- fn->size = dsize;
+- fn->frags = 0;
+- fn->raw = raw;
+-
+- tn->next = NULL;
+- tn->fn = fn;
+- tn->version = je32_to_cpu(ri->version);
+-
+- USED_SPACE(PAD(je32_to_cpu(ri->totlen)));
+-
+- /* No need to scan from the beginning of the list again.
+- We can start from tn_list instead (Thanks Jocke) */
+- jffs2_add_tn_to_list(tn, tn_list);
+-
+- /* Make sure the one we just added is the _last_ in the list
+- with this version number, so the older ones get obsoleted */
+- while (tn->next && tn->next->version == tn->version) {
+-
+- D1(printk(KERN_DEBUG "Shifting new node at 0x%08x after other node at 0x%08x for version %d in list\n",
+- ref_offset(fn->raw),
+- ref_offset(tn->next->fn->raw),
+- je32_to_cpu(ri->version)));
+-
+- if(tn->fn != fn)
+- BUG();
+- tn->fn = tn->next->fn;
+- tn->next->fn = fn;
+- tn = tn->next;
+- }
++ if (ri.nodetype & JFFS2_NODE_ACCURATE) {
++ memset(fn,0,sizeof(*fn));
+
++ fn->ofs = ri.offset;
++ fn->size = ri.dsize;
++ fn->frags = 0;
++ fn->raw = raw;
++
++ tn->next = NULL;
++ tn->fn = fn;
++ tn->version = ri.version;
++
++ USED_SPACE(PAD(ri.totlen));
++ jffs2_add_tn_to_list(tn, &ic->scan->tmpnodes);
++ /* Make sure the one we just added is the _last_ in the list
++ with this version number, so the older ones get obsoleted */
++ while (tn->next && tn->next->version == tn->version) {
++
++ D1(printk(KERN_DEBUG "Shifting new node at 0x%08x after other node at 0x%08x for version %d in list\n",
++ fn->raw->flash_offset&~3, tn->next->fn->raw->flash_offset &~3, ri.version));
++
++ if(tn->fn != fn)
++ BUG();
++ tn->fn = tn->next->fn;
++ tn->next->fn = fn;
++ tn = tn->next;
++ }
++ } else {
++ jffs2_free_full_dnode(fn);
++ jffs2_free_tmp_dnode_info(tn);
++ raw->flash_offset |= 1;
++ DIRTY_SPACE(PAD(ri.totlen));
++ }
++ *ofs += PAD(ri.totlen);
+ return 0;
+ }
+
+-static int jffs2_scan_dirent_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
+- struct jffs2_raw_dirent *rd, uint32_t ofs)
++static int jffs2_scan_dirent_node(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb, __u32 *ofs)
+ {
+ struct jffs2_raw_node_ref *raw;
+ struct jffs2_full_dirent *fd;
+ struct jffs2_inode_cache *ic;
+- uint32_t crc;
++ struct jffs2_raw_dirent rd;
++ __u16 oldnodetype;
++ int ret;
++ __u32 crc;
++ ssize_t retlen;
+
+- D1(printk(KERN_DEBUG "jffs2_scan_dirent_node(): Node at 0x%08x\n", ofs));
++ D1(printk(KERN_DEBUG "jffs2_scan_dirent_node(): Node at 0x%08x\n", *ofs));
++
++ ret = c->mtd->read(c->mtd, *ofs, sizeof(rd), &retlen, (char *)&rd);
++ if (ret) {
++ printk(KERN_NOTICE "jffs2_scan_dirent_node(): Read error at 0x%08x: %d\n", *ofs, ret);
++ return ret;
++ }
++ if (retlen != sizeof(rd)) {
++ printk(KERN_NOTICE "Short read: 0x%x bytes at 0x%08x instead of requested %x\n",
++ retlen, *ofs, sizeof(rd));
++ return -EIO;
++ }
+
+- /* We don't get here unless the node is still valid, so we don't have to
+- mask in the ACCURATE bit any more. */
+- crc = crc32(0, rd, sizeof(*rd)-8);
++ /* We sort of assume that the node was accurate when it was
++ first written to the medium :) */
++ oldnodetype = rd.nodetype;
++ rd.nodetype |= JFFS2_NODE_ACCURATE;
++ crc = crc32(0, &rd, sizeof(rd)-8);
++ rd.nodetype = oldnodetype;
+
+- if (crc != je32_to_cpu(rd->node_crc)) {
++ if (crc != rd.node_crc) {
+ printk(KERN_NOTICE "jffs2_scan_dirent_node(): Node CRC failed on node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
+- ofs, je32_to_cpu(rd->node_crc), crc);
+- /* We believe totlen because the CRC on the node _header_ was OK, just the node itself failed. */
+- DIRTY_SPACE(PAD(je32_to_cpu(rd->totlen)));
++ *ofs, rd.node_crc, crc);
++ /* FIXME: Why do we believe totlen? */
++ DIRTY_SPACE(4);
++ *ofs += 4;
+ return 0;
+ }
+
+- pseudo_random += je32_to_cpu(rd->version);
++ pseudo_random += rd.version;
+
+- fd = jffs2_alloc_full_dirent(rd->nsize+1);
++ fd = jffs2_alloc_full_dirent(rd.nsize+1);
+ if (!fd) {
+ return -ENOMEM;
++}
++ ret = c->mtd->read(c->mtd, *ofs + sizeof(rd), rd.nsize, &retlen, &fd->name[0]);
++ if (ret) {
++ jffs2_free_full_dirent(fd);
++ printk(KERN_NOTICE "jffs2_scan_dirent_node(): Read error at 0x%08x: %d\n",
++ *ofs + sizeof(rd), ret);
++ return ret;
+ }
+- memcpy(&fd->name, rd->name, rd->nsize);
+- fd->name[rd->nsize] = 0;
+-
+- crc = crc32(0, fd->name, rd->nsize);
+- if (crc != je32_to_cpu(rd->name_crc)) {
++ if (retlen != rd.nsize) {
++ jffs2_free_full_dirent(fd);
++ printk(KERN_NOTICE "Short read: 0x%x bytes at 0x%08x instead of requested %x\n",
++ retlen, *ofs + sizeof(rd), rd.nsize);
++ return -EIO;
++ }
++ crc = crc32(0, fd->name, rd.nsize);
++ if (crc != rd.name_crc) {
+ printk(KERN_NOTICE "jffs2_scan_dirent_node(): Name CRC failed on node at 0x%08x: Read 0x%08x, calculated 0x%08x\n",
+- ofs, je32_to_cpu(rd->name_crc), crc);
+- D1(printk(KERN_NOTICE "Name for which CRC failed is (now) '%s', ino #%d\n", fd->name, je32_to_cpu(rd->ino)));
++ *ofs, rd.name_crc, crc);
++ fd->name[rd.nsize]=0;
++ D1(printk(KERN_NOTICE "Name for which CRC failed is (now) '%s', ino #%d\n", fd->name, rd.ino));
+ jffs2_free_full_dirent(fd);
+ /* FIXME: Why do we believe totlen? */
+- /* We believe totlen because the CRC on the node _header_ was OK, just the name failed. */
+- DIRTY_SPACE(PAD(je32_to_cpu(rd->totlen)));
++ DIRTY_SPACE(PAD(rd.totlen));
++ *ofs += PAD(rd.totlen);
+ return 0;
+ }
+ raw = jffs2_alloc_raw_node_ref();
+@@ -886,15 +664,15 @@
+ printk(KERN_NOTICE "jffs2_scan_dirent_node(): allocation of node reference failed\n");
+ return -ENOMEM;
+ }
+- ic = jffs2_scan_make_ino_cache(c, je32_to_cpu(rd->pino));
++ ic = jffs2_scan_make_ino_cache(c, rd.pino);
+ if (!ic) {
+ jffs2_free_full_dirent(fd);
+ jffs2_free_raw_node_ref(raw);
+ return -ENOMEM;
+ }
+
+- raw->totlen = PAD(je32_to_cpu(rd->totlen));
+- raw->flash_offset = ofs;
++ raw->totlen = PAD(rd.totlen);
++ raw->flash_offset = *ofs;
+ raw->next_phys = NULL;
+ raw->next_in_ino = ic->nodes;
+ ic->nodes = raw;
+@@ -904,15 +682,24 @@
+ jeb->last_node->next_phys = raw;
+ jeb->last_node = raw;
+
+- fd->raw = raw;
+- fd->next = NULL;
+- fd->version = je32_to_cpu(rd->version);
+- fd->ino = je32_to_cpu(rd->ino);
+- fd->nhash = full_name_hash(fd->name, rd->nsize);
+- fd->type = rd->type;
+- USED_SPACE(PAD(je32_to_cpu(rd->totlen)));
+- jffs2_add_fd_to_list(c, fd, &ic->scan->dents);
++ if (rd.nodetype & JFFS2_NODE_ACCURATE) {
++ fd->raw = raw;
++ fd->next = NULL;
++ fd->version = rd.version;
++ fd->ino = rd.ino;
++ fd->name[rd.nsize]=0;
++ fd->nhash = full_name_hash(fd->name, rd.nsize);
++ fd->type = rd.type;
++
++ USED_SPACE(PAD(rd.totlen));
++ jffs2_add_fd_to_list(c, fd, &ic->scan->dents);
++ } else {
++ raw->flash_offset |= 1;
++ jffs2_free_full_dirent(fd);
+
++ DIRTY_SPACE(PAD(rd.totlen));
++ }
++ *ofs += PAD(rd.totlen);
+ return 0;
+ }
+
+@@ -934,96 +721,26 @@
+ struct list_head *n = head->next;
+
+ list_del(head);
+- while(count--) {
++ while(count--)
+ n = n->next;
+- }
+ list_add(head, n);
+ }
+
+-void jffs2_rotate_lists(struct jffs2_sb_info *c)
++static void jffs2_rotate_lists(struct jffs2_sb_info *c)
+ {
+ uint32_t x;
+- uint32_t rotateby;
+
+ x = count_list(&c->clean_list);
+- if (x) {
+- rotateby = pseudo_random % x;
+- D1(printk(KERN_DEBUG "Rotating clean_list by %d\n", rotateby));
+-
+- rotate_list((&c->clean_list), rotateby);
+-
+- D1(printk(KERN_DEBUG "Erase block at front of clean_list is at %08x\n",
+- list_entry(c->clean_list.next, struct jffs2_eraseblock, list)->offset));
+- } else {
+- D1(printk(KERN_DEBUG "Not rotating empty clean_list\n"));
+- }
+-
+- x = count_list(&c->very_dirty_list);
+- if (x) {
+- rotateby = pseudo_random % x;
+- D1(printk(KERN_DEBUG "Rotating very_dirty_list by %d\n", rotateby));
+-
+- rotate_list((&c->very_dirty_list), rotateby);
+-
+- D1(printk(KERN_DEBUG "Erase block at front of very_dirty_list is at %08x\n",
+- list_entry(c->very_dirty_list.next, struct jffs2_eraseblock, list)->offset));
+- } else {
+- D1(printk(KERN_DEBUG "Not rotating empty very_dirty_list\n"));
+- }
++ if (x)
++ rotate_list((&c->clean_list), pseudo_random % x);
+
+ x = count_list(&c->dirty_list);
+- if (x) {
+- rotateby = pseudo_random % x;
+- D1(printk(KERN_DEBUG "Rotating dirty_list by %d\n", rotateby));
++ if (x)
++ rotate_list((&c->dirty_list), pseudo_random % x);
+
+- rotate_list((&c->dirty_list), rotateby);
++ if (c->nr_erasing_blocks)
++ rotate_list((&c->erase_pending_list), pseudo_random % c->nr_erasing_blocks);
+
+- D1(printk(KERN_DEBUG "Erase block at front of dirty_list is at %08x\n",
+- list_entry(c->dirty_list.next, struct jffs2_eraseblock, list)->offset));
+- } else {
+- D1(printk(KERN_DEBUG "Not rotating empty dirty_list\n"));
+- }
+-
+- x = count_list(&c->erasable_list);
+- if (x) {
+- rotateby = pseudo_random % x;
+- D1(printk(KERN_DEBUG "Rotating erasable_list by %d\n", rotateby));
+-
+- rotate_list((&c->erasable_list), rotateby);
+-
+- D1(printk(KERN_DEBUG "Erase block at front of erasable_list is at %08x\n",
+- list_entry(c->erasable_list.next, struct jffs2_eraseblock, list)->offset));
+- } else {
+- D1(printk(KERN_DEBUG "Not rotating empty erasable_list\n"));
+- }
+-
+- if (c->nr_erasing_blocks) {
+- rotateby = pseudo_random % c->nr_erasing_blocks;
+- D1(printk(KERN_DEBUG "Rotating erase_pending_list by %d\n", rotateby));
+-
+- rotate_list((&c->erase_pending_list), rotateby);
+-
+- D1(printk(KERN_DEBUG "Erase block at front of erase_pending_list is at %08x\n",
+- list_entry(c->erase_pending_list.next, struct jffs2_eraseblock, list)->offset));
+- } else {
+- D1(printk(KERN_DEBUG "Not rotating empty erase_pending_list\n"));
+- }
+-
+- if (c->nr_free_blocks) {
+- rotateby = pseudo_random % c->nr_free_blocks;
+- D1(printk(KERN_DEBUG "Rotating free_list by %d\n", rotateby));
+-
+- rotate_list((&c->free_list), rotateby);
+-
+- D1(printk(KERN_DEBUG "Erase block at front of free_list is at %08x\n",
+- list_entry(c->free_list.next, struct jffs2_eraseblock, list)->offset));
+- } else {
+- D1(printk(KERN_DEBUG "Not rotating empty free_list\n"));
+- }
++ if (c->nr_free_blocks) /* Not that it should ever be zero */
++ rotate_list((&c->free_list), pseudo_random % c->nr_free_blocks);
+ }
+-
+-/*
+- * Local variables:
+- * c-basic-offset: 8
+- * End:
+- */
+diff -Nur linux/fs/jffs2/super-v24.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/super-v24.c
+--- linux/fs/jffs2/super-v24.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/super-v24.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,183 +0,0 @@
+-/*
+- * JFFS2 -- Journalling Flash File System, Version 2.
+- *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
+- *
+- * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+- *
+- * For licensing information, see the file 'LICENCE' in this directory.
+- *
+- * $Id: super-v24.c,v 1.63 2002/05/20 14:56:39 dwmw2 Exp $
+- *
+- * ChangeLog:
+- * 08-Nov-2002 Lineo Japan, Inc. add /proc/fs/jffs2 files for JFFS2 information
+- *
+- */
+-
+-#include <linux/config.h>
+-#include <linux/kernel.h>
+-#include <linux/module.h>
+-#include <linux/version.h>
+-#include <linux/slab.h>
+-#include <linux/init.h>
+-#include <linux/list.h>
+-#include <linux/fs.h>
+-#include <linux/jffs2.h>
+-#include <linux/pagemap.h>
+-#include <linux/mtd/mtd.h>
+-#include <linux/interrupt.h>
+-#include "nodelist.h"
+-#ifdef CONFIG_JFFS2_PROC_FS
+-#include "jffs2_proc.h"
+-#endif
+-
+-#ifndef MTD_BLOCK_MAJOR
+-#define MTD_BLOCK_MAJOR 31
+-#endif
+-
+-void jffs2_put_super (struct super_block *);
+-
+-static struct super_operations jffs2_super_operations =
+-{
+- read_inode: jffs2_read_inode,
+- put_super: jffs2_put_super,
+- write_super: jffs2_write_super,
+- statfs: jffs2_statfs,
+- remount_fs: jffs2_remount_fs,
+- clear_inode: jffs2_clear_inode
+-};
+-
+-
+-static struct super_block *jffs2_read_super(struct super_block *sb, void *data, int silent)
+-{
+- struct jffs2_sb_info *c;
+- int ret;
+-
+- D1(printk(KERN_DEBUG "jffs2: read_super for device %s\n", kdevname(sb->s_dev)));
+-
+- if (major(sb->s_dev) != MTD_BLOCK_MAJOR) {
+- if (!silent)
+- printk(KERN_DEBUG "jffs2: attempt to mount non-MTD device %s\n", kdevname(sb->s_dev));
+- return NULL;
+- }
+-
+- c = JFFS2_SB_INFO(sb);
+- memset(c, 0, sizeof(*c));
+-
+- sb->s_op = &jffs2_super_operations;
+-
+- c->mtd = get_mtd_device(NULL, minor(sb->s_dev));
+- if (!c->mtd) {
+- D1(printk(KERN_DEBUG "jffs2: MTD device #%u doesn't appear to exist\n", minor(sb->s_dev)));
+- return NULL;
+- }
+-
+- ret = jffs2_do_fill_super(sb, data, silent);
+- if (ret) {
+- put_mtd_device(c->mtd);
+- return NULL;
+- }
+-
+-#ifdef CONFIG_JFFS2_PROC_FS
+- if (jffs2_register_jffs2_proc_dir(sb->s_dev, c) < 0) {
+- printk(KERN_WARNING "JFFS2: Failed to register "
+- "proc file system for device %s.\n",
+- kdevname(sb->s_dev));
+- }
+-#endif
+-
+- return sb;
+-}
+-
+-void jffs2_put_super (struct super_block *sb)
+-{
+- struct jffs2_sb_info *c = JFFS2_SB_INFO(sb);
+-
+- D2(printk(KERN_DEBUG "jffs2: jffs2_put_super()\n"));
+-
+-#ifdef CONFIG_JFFS2_PROC_FS
+- jffs2_unregister_jffs2_proc_dir(c);
+-#endif
+-
+- if (!(sb->s_flags & MS_RDONLY))
+- jffs2_stop_garbage_collect_thread(c);
+- down(&c->alloc_sem);
+- jffs2_flush_wbuf(c, 1);
+- up(&c->alloc_sem);
+- jffs2_free_ino_caches(c);
+- jffs2_free_raw_node_refs(c);
+- kfree(c->blocks);
+- if (c->mtd->sync)
+- c->mtd->sync(c->mtd);
+- put_mtd_device(c->mtd);
+-
+- D1(printk(KERN_DEBUG "jffs2_put_super returning\n"));
+-}
+-
+-static DECLARE_FSTYPE_DEV(jffs2_fs_type, "jffs2", jffs2_read_super);
+-
+-static int __init init_jffs2_fs(void)
+-{
+- int ret;
+-
+- printk(KERN_NOTICE "JFFS2 version 2.1. (C) 2001, 2002 Red Hat, Inc., designed by Axis Communications AB.\n");
+-
+-#ifdef JFFS2_OUT_OF_KERNEL
+- /* sanity checks. Could we do these at compile time? */
+- if (sizeof(struct jffs2_sb_info) > sizeof (((struct super_block *)NULL)->u)) {
+- printk(KERN_ERR "JFFS2 error: struct jffs2_sb_info (%d bytes) doesn't fit in the super_block union (%d bytes)\n",
+- sizeof(struct jffs2_sb_info), sizeof (((struct super_block *)NULL)->u));
+- return -EIO;
+- }
+-
+- if (sizeof(struct jffs2_inode_info) > sizeof (((struct inode *)NULL)->u)) {
+- printk(KERN_ERR "JFFS2 error: struct jffs2_inode_info (%d bytes) doesn't fit in the inode union (%d bytes)\n",
+- sizeof(struct jffs2_inode_info), sizeof (((struct inode *)NULL)->u));
+- return -EIO;
+- }
+-#endif
+- ret = jffs2_zlib_init();
+- if (ret) {
+- printk(KERN_ERR "JFFS2 error: Failed to initialise zlib workspaces\n");
+- goto out;
+- }
+- ret = jffs2_create_slab_caches();
+- if (ret) {
+- printk(KERN_ERR "JFFS2 error: Failed to initialise slab caches\n");
+- goto out_zlib;
+- }
+- ret = register_filesystem(&jffs2_fs_type);
+- if (ret) {
+- printk(KERN_ERR "JFFS2 error: Failed to register filesystem\n");
+- goto out_slab;
+- }
+-
+-#ifdef CONFIG_JFFS2_PROC_FS
+- jffs2_proc_root = proc_mkdir("jffs2", proc_root_fs);
+-#endif
+-
+- return 0;
+-
+- out_slab:
+- jffs2_destroy_slab_caches();
+- out_zlib:
+- jffs2_zlib_exit();
+- out:
+-
+- return ret;
+-}
+-
+-static void __exit exit_jffs2_fs(void)
+-{
+- jffs2_destroy_slab_caches();
+- jffs2_zlib_exit();
+- unregister_filesystem(&jffs2_fs_type);
+-}
+-
+-module_init(init_jffs2_fs);
+-module_exit(exit_jffs2_fs);
+-
+-MODULE_DESCRIPTION("The Journalling Flash File System, v2");
+-MODULE_AUTHOR("Red Hat, Inc.");
+-MODULE_LICENSE("GPL"); // Actually dual-licensed, but it doesn't matter for
+- // the sake of this tag. It's Free Software.
+diff -Nur linux/fs/jffs2/super.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/super.c
+--- linux/fs/jffs2/super.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/super.c 2003-06-23 01:47:04.000000000 +0700
+@@ -1,13 +1,37 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: super.c,v 1.73 2002/07/23 17:00:45 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
++ *
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: super.c,v 1.48.2.2 2002/03/12 15:36:43 dwmw2 Exp $
+ *
+ */
+
+@@ -23,233 +47,244 @@
+ #include <linux/pagemap.h>
+ #include <linux/mtd/mtd.h>
+ #include <linux/interrupt.h>
+-#include <linux/ctype.h>
+-#include <linux/namei.h>
+ #include "nodelist.h"
+
+-void jffs2_put_super (struct super_block *);
+-
+-
+-static kmem_cache_t *jffs2_inode_cachep;
+-
+-static struct inode *jffs2_alloc_inode(struct super_block *sb)
+-{
+- struct jffs2_inode_info *ei;
+- ei = (struct jffs2_inode_info *)kmem_cache_alloc(jffs2_inode_cachep, SLAB_KERNEL);
+- if (!ei)
+- return NULL;
+- return &ei->vfs_inode;
+-}
+-
+-static void jffs2_destroy_inode(struct inode *inode)
+-{
+- kmem_cache_free(jffs2_inode_cachep, JFFS2_INODE_INFO(inode));
+-}
++#ifndef MTD_BLOCK_MAJOR
++#define MTD_BLOCK_MAJOR 31
++#endif
+
+-static void jffs2_i_init_once(void * foo, kmem_cache_t * cachep, unsigned long flags)
+-{
+- struct jffs2_inode_info *ei = (struct jffs2_inode_info *) foo;
+-
+- if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
+- SLAB_CTOR_CONSTRUCTOR) {
+- init_MUTEX(&ei->sem);
+- inode_init_once(&ei->vfs_inode);
+- }
+-}
++extern void jffs2_read_inode (struct inode *);
++void jffs2_put_super (struct super_block *);
++void jffs2_write_super (struct super_block *);
++static int jffs2_statfs (struct super_block *, struct statfs *);
++int jffs2_remount_fs (struct super_block *, int *, char *);
++extern void jffs2_clear_inode (struct inode *);
+
+ static struct super_operations jffs2_super_operations =
+ {
+- .alloc_inode = jffs2_alloc_inode,
+- .destroy_inode =jffs2_destroy_inode,
+- .read_inode = jffs2_read_inode,
+- .put_super = jffs2_put_super,
+- .write_super = jffs2_write_super,
+- .statfs = jffs2_statfs,
+- .remount_fs = jffs2_remount_fs,
+- .clear_inode = jffs2_clear_inode
++ read_inode: jffs2_read_inode,
++// delete_inode: jffs2_delete_inode,
++ put_super: jffs2_put_super,
++ write_super: jffs2_write_super,
++ statfs: jffs2_statfs,
++ remount_fs: jffs2_remount_fs,
++ clear_inode: jffs2_clear_inode
+ };
+
+-static int jffs2_sb_compare(struct super_block *sb, void *data)
++static int jffs2_statfs(struct super_block *sb, struct statfs *buf)
+ {
+- struct jffs2_sb_info *p = data;
+ struct jffs2_sb_info *c = JFFS2_SB_INFO(sb);
++ unsigned long avail;
++
++ buf->f_type = JFFS2_SUPER_MAGIC;
++ buf->f_bsize = 1 << PAGE_SHIFT;
++ buf->f_blocks = c->flash_size >> PAGE_SHIFT;
++ buf->f_files = 0;
++ buf->f_ffree = 0;
++ buf->f_namelen = JFFS2_MAX_NAME_LEN;
++
++ spin_lock_bh(&c->erase_completion_lock);
++
++ avail = c->dirty_size + c->free_size;
++ if (avail > c->sector_size * JFFS2_RESERVED_BLOCKS_WRITE)
++ avail -= c->sector_size * JFFS2_RESERVED_BLOCKS_WRITE;
++ else
++ avail = 0;
++
++ buf->f_bavail = buf->f_bfree = avail >> PAGE_SHIFT;
++
++#if CONFIG_JFFS2_FS_DEBUG > 0
++ printk(KERN_DEBUG "STATFS:\n");
++ printk(KERN_DEBUG "flash_size: %08x\n", c->flash_size);
++ printk(KERN_DEBUG "used_size: %08x\n", c->used_size);
++ printk(KERN_DEBUG "dirty_size: %08x\n", c->dirty_size);
++ printk(KERN_DEBUG "free_size: %08x\n", c->free_size);
++ printk(KERN_DEBUG "erasing_size: %08x\n", c->erasing_size);
++ printk(KERN_DEBUG "bad_size: %08x\n", c->bad_size);
++ printk(KERN_DEBUG "sector_size: %08x\n", c->sector_size);
+
+- /* The superblocks are considered to be equivalent if the underlying MTD
+- device is the same one */
+- if (c->mtd == p->mtd) {
+- D1(printk(KERN_DEBUG "jffs2_sb_compare: match on device %d (\"%s\")\n", p->mtd->index, p->mtd->name));
+- return 1;
++ if (c->nextblock) {
++ printk(KERN_DEBUG "nextblock: 0x%08x\n", c->nextblock->offset);
+ } else {
+- D1(printk(KERN_DEBUG "jffs2_sb_compare: No match, device %d (\"%s\"), device %d (\"%s\")\n",
+- c->mtd->index, c->mtd->name, p->mtd->index, p->mtd->name));
+- return 0;
++ printk(KERN_DEBUG "nextblock: NULL\n");
+ }
+-}
+-
+-static int jffs2_sb_set(struct super_block *sb, void *data)
+-{
+- struct jffs2_sb_info *p = data;
+-
+- /* For persistence of NFS exports etc. we use the same s_dev
+- each time we mount the device, don't just use an anonymous
+- device */
+- sb->u.generic_sbp = p;
+- p->os_priv = sb;
+- sb->s_dev = MKDEV(MTD_BLOCK_MAJOR, p->mtd->index);
+-
+- return 0;
+-}
+-
+-static struct super_block *jffs2_get_sb_mtd(struct file_system_type *fs_type,
+- int flags, char *dev_name,
+- void *data, struct mtd_info *mtd)
+-{
+- struct super_block *sb;
+- struct jffs2_sb_info *c;
+- int ret;
+-
+- c = kmalloc(sizeof(*c), GFP_KERNEL);
+- if (!c)
+- return ERR_PTR(-ENOMEM);
+- memset(c, 0, sizeof(*c));
+- c->mtd = mtd;
++ if (c->gcblock) {
++ printk(KERN_DEBUG "gcblock: 0x%08x\n", c->gcblock->offset);
++ } else {
++ printk(KERN_DEBUG "gcblock: NULL\n");
++ }
++ if (list_empty(&c->clean_list)) {
++ printk(KERN_DEBUG "clean_list: empty\n");
++ } else {
++ struct list_head *this;
+
+- sb = sget(fs_type, jffs2_sb_compare, jffs2_sb_set, c);
++ list_for_each(this, &c->clean_list) {
++ struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
++ printk(KERN_DEBUG "clean_list: %08x\n", jeb->offset);
++ }
++ }
++ if (list_empty(&c->dirty_list)) {
++ printk(KERN_DEBUG "dirty_list: empty\n");
++ } else {
++ struct list_head *this;
+
+- if (IS_ERR(sb))
+- goto out_put;
++ list_for_each(this, &c->dirty_list) {
++ struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
++ printk(KERN_DEBUG "dirty_list: %08x\n", jeb->offset);
++ }
++ }
++ if (list_empty(&c->erasing_list)) {
++ printk(KERN_DEBUG "erasing_list: empty\n");
++ } else {
++ struct list_head *this;
+
+- if (sb->s_root) {
+- /* New mountpoint for JFFS2 which is already mounted */
+- D1(printk(KERN_DEBUG "jffs2_get_sb_mtd(): Device %d (\"%s\") is already mounted\n",
+- mtd->index, mtd->name));
+- goto out_put;
++ list_for_each(this, &c->erasing_list) {
++ struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
++ printk(KERN_DEBUG "erasing_list: %08x\n", jeb->offset);
++ }
+ }
++ if (list_empty(&c->erase_pending_list)) {
++ printk(KERN_DEBUG "erase_pending_list: empty\n");
++ } else {
++ struct list_head *this;
+
+- D1(printk(KERN_DEBUG "jffs2_get_sb_mtd(): New superblock for device %d (\"%s\")\n",
+- mtd->index, mtd->name));
++ list_for_each(this, &c->erase_pending_list) {
++ struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
++ printk(KERN_DEBUG "erase_pending_list: %08x\n", jeb->offset);
++ }
++ }
++ if (list_empty(&c->free_list)) {
++ printk(KERN_DEBUG "free_list: empty\n");
++ } else {
++ struct list_head *this;
+
+- sb->s_op = &jffs2_super_operations;
++ list_for_each(this, &c->free_list) {
++ struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
++ printk(KERN_DEBUG "free_list: %08x\n", jeb->offset);
++ }
++ }
++ if (list_empty(&c->bad_list)) {
++ printk(KERN_DEBUG "bad_list: empty\n");
++ } else {
++ struct list_head *this;
+
+- ret = jffs2_do_fill_super(sb, data, (flags&MS_VERBOSE)?1:0);
++ list_for_each(this, &c->bad_list) {
++ struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
++ printk(KERN_DEBUG "bad_list: %08x\n", jeb->offset);
++ }
++ }
++ if (list_empty(&c->bad_used_list)) {
++ printk(KERN_DEBUG "bad_used_list: empty\n");
++ } else {
++ struct list_head *this;
+
+- if (ret) {
+- /* Failure case... */
+- up_write(&sb->s_umount);
+- deactivate_super(sb);
+- sb = ERR_PTR(ret);
+- goto out_put1;
++ list_for_each(this, &c->bad_used_list) {
++ struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
++ printk(KERN_DEBUG "bad_used_list: %08x\n", jeb->offset);
++ }
+ }
++#endif /* CONFIG_JFFS2_FS_DEBUG */
+
+- sb->s_flags |= MS_ACTIVE;
+- return sb;
++ spin_unlock_bh(&c->erase_completion_lock);
+
+- out_put:
+- kfree(c);
+- out_put1:
+- put_mtd_device(mtd);
+
+- return sb;
++ return 0;
+ }
+
+-static struct super_block *jffs2_get_sb_mtdnr(struct file_system_type *fs_type,
+- int flags, char *dev_name,
+- void *data, int mtdnr)
++static struct super_block *jffs2_read_super(struct super_block *sb, void *data, int silent)
+ {
+- struct mtd_info *mtd;
+-
+- mtd = get_mtd_device(NULL, mtdnr);
+- if (!mtd) {
+- D1(printk(KERN_DEBUG "jffs2: MTD device #%u doesn't appear to exist\n", mtdnr));
+- return ERR_PTR(-EINVAL);
+- }
++ struct jffs2_sb_info *c;
++ struct inode *root_i;
++ int i;
+
+- return jffs2_get_sb_mtd(fs_type, flags, dev_name, data, mtd);
+-}
++ D1(printk(KERN_DEBUG "jffs2: read_super for device %s\n", kdevname(sb->s_dev)));
+
+-static struct super_block *jffs2_get_sb(struct file_system_type *fs_type,
+- int flags, char *dev_name, void *data)
+-{
+- int err;
+- struct nameidata nd;
+- int mtdnr;
+- kdev_t dev;
+-
+- if (!dev_name)
+- return ERR_PTR(-EINVAL);
+-
+- D1(printk(KERN_DEBUG "jffs2_get_sb(): dev_name \"%s\"\n", dev_name));
+-
+- /* The preferred way of mounting in future; especially when
+- CONFIG_BLK_DEV is implemented - we specify the underlying
+- MTD device by number or by name, so that we don't require
+- block device support to be present in the kernel. */
+-
+- /* FIXME: How to do the root fs this way? */
+-
+- if (dev_name[0] == 'm' && dev_name[1] == 't' && dev_name[2] == 'd') {
+- /* Probably mounting without the blkdev crap */
+- if (dev_name[3] == ':') {
+- struct mtd_info *mtd;
+-
+- /* Mount by MTD device name */
+- D1(printk(KERN_DEBUG "jffs2_get_sb(): mtd:%%s, name \"%s\"\n", dev_name+4));
+- for (mtdnr = 0; mtdnr < MAX_MTD_DEVICES; mtdnr++) {
+- mtd = get_mtd_device(NULL, mtdnr);
+- if (mtd) {
+- if (!strcmp(mtd->name, dev_name+4))
+- return jffs2_get_sb_mtd(fs_type, flags, dev_name, data, mtd);
+- put_mtd_device(mtd);
+- }
+- }
+- printk(KERN_NOTICE "jffs2_get_sb(): MTD device with name \"%s\" not found.\n", dev_name+4);
+- } else if (isdigit(dev_name[3])) {
+- /* Mount by MTD device number name */
+- char *endptr;
+-
+- mtdnr = simple_strtoul(dev_name+3, &endptr, 0);
+- if (!*endptr) {
+- /* It was a valid number */
+- D1(printk(KERN_DEBUG "jffs2_get_sb(): mtd%%d, mtdnr %d\n", mtdnr));
+- return jffs2_get_sb_mtdnr(fs_type, flags, dev_name, data, mtdnr);
+- }
+- }
++ if (MAJOR(sb->s_dev) != MTD_BLOCK_MAJOR) {
++ if (!silent)
++ printk(KERN_DEBUG "jffs2: attempt to mount non-MTD device %s\n", kdevname(sb->s_dev));
++ return NULL;
+ }
+
+- /* Try the old way - the hack where we allowed users to mount
+- /dev/mtdblock$(n) but didn't actually _use_ the blkdev */
+-
+- err = path_lookup(dev_name, LOOKUP_FOLLOW, &nd);
+-
+- D1(printk(KERN_DEBUG "jffs2_get_sb(): path_lookup() returned %d, inode %p\n",
+- err, nd.dentry->d_inode));
+-
+- if (err)
+- return ERR_PTR(err);
+-
+- if (!S_ISBLK(nd.dentry->d_inode->i_mode)) {
+- path_release(&nd);
+- return ERR_PTR(-EINVAL);
++ c = JFFS2_SB_INFO(sb);
++ memset(c, 0, sizeof(*c));
++
++ c->mtd = get_mtd_device(NULL, MINOR(sb->s_dev));
++ if (!c->mtd) {
++ D1(printk(KERN_DEBUG "jffs2: MTD device #%u doesn't appear to exist\n", MINOR(sb->s_dev)));
++ return NULL;
+ }
+- if (nd.mnt->mnt_flags & MNT_NODEV) {
+- path_release(&nd);
+- return ERR_PTR(-EACCES);
++ c->sector_size = c->mtd->erasesize;
++ c->free_size = c->flash_size = c->mtd->size;
++ c->nr_blocks = c->mtd->size / c->mtd->erasesize;
++ c->blocks = kmalloc(sizeof(struct jffs2_eraseblock) * c->nr_blocks, GFP_KERNEL);
++ if (!c->blocks)
++ goto out_mtd;
++ for (i=0; i<c->nr_blocks; i++) {
++ INIT_LIST_HEAD(&c->blocks[i].list);
++ c->blocks[i].offset = i * c->sector_size;
++ c->blocks[i].free_size = c->sector_size;
++ c->blocks[i].dirty_size = 0;
++ c->blocks[i].used_size = 0;
++ c->blocks[i].first_node = NULL;
++ c->blocks[i].last_node = NULL;
++ }
++
++ spin_lock_init(&c->nodelist_lock);
++ init_MUTEX(&c->alloc_sem);
++ init_waitqueue_head(&c->erase_wait);
++ spin_lock_init(&c->erase_completion_lock);
++ spin_lock_init(&c->inocache_lock);
++
++ INIT_LIST_HEAD(&c->clean_list);
++ INIT_LIST_HEAD(&c->dirty_list);
++ INIT_LIST_HEAD(&c->erasing_list);
++ INIT_LIST_HEAD(&c->erase_pending_list);
++ INIT_LIST_HEAD(&c->erase_complete_list);
++ INIT_LIST_HEAD(&c->free_list);
++ INIT_LIST_HEAD(&c->bad_list);
++ INIT_LIST_HEAD(&c->bad_used_list);
++ c->highest_ino = 1;
++
++ if (jffs2_build_filesystem(c)) {
++ D1(printk(KERN_DEBUG "build_fs failed\n"));
++ goto out_nodes;
+ }
+
+- dev = nd.dentry->d_inode->i_rdev;
+- path_release(&nd);
++ sb->s_op = &jffs2_super_operations;
+
+- if (major(dev) != MTD_BLOCK_MAJOR) {
+- if (!(flags & MS_VERBOSE)) /* Yes I mean this. Strangely */
+- printk(KERN_NOTICE "Attempt to mount non-MTD device \"%s\" as JFFS2\n",
+- dev_name);
+- return ERR_PTR(-EINVAL);
+- }
++ D1(printk(KERN_DEBUG "jffs2_read_super(): Getting root inode\n"));
++ root_i = iget(sb, 1);
++ if (is_bad_inode(root_i)) {
++ D1(printk(KERN_WARNING "get root inode failed\n"));
++ goto out_nodes;
++ }
++
++ D1(printk(KERN_DEBUG "jffs2_read_super(): d_alloc_root()\n"));
++ sb->s_root = d_alloc_root(root_i);
++ if (!sb->s_root)
++ goto out_root_i;
++
++#if LINUX_VERSION_CODE >= 0x20403
++ sb->s_maxbytes = 0xFFFFFFFF;
++#endif
++ sb->s_blocksize = PAGE_CACHE_SIZE;
++ sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
++ sb->s_magic = JFFS2_SUPER_MAGIC;
++ if (!(sb->s_flags & MS_RDONLY))
++ jffs2_start_garbage_collect_thread(c);
++ return sb;
+
+- return jffs2_get_sb_mtdnr(fs_type, flags, dev_name, data, minor(dev));
++ out_root_i:
++ iput(root_i);
++ out_nodes:
++ jffs2_free_ino_caches(c);
++ jffs2_free_raw_node_refs(c);
++ kfree(c->blocks);
++ out_mtd:
++ put_mtd_device(c->mtd);
++ return NULL;
+ }
+
+-
+ void jffs2_put_super (struct super_block *sb)
+ {
+ struct jffs2_sb_info *c = JFFS2_SB_INFO(sb);
+@@ -258,83 +293,91 @@
+
+ if (!(sb->s_flags & MS_RDONLY))
+ jffs2_stop_garbage_collect_thread(c);
+- down(&c->alloc_sem);
+- jffs2_flush_wbuf(c, 1);
+- up(&c->alloc_sem);
+ jffs2_free_ino_caches(c);
+ jffs2_free_raw_node_refs(c);
+ kfree(c->blocks);
+- if (c->wbuf)
+- kfree(c->wbuf);
+- kfree(c->inocache_list);
+ if (c->mtd->sync)
+ c->mtd->sync(c->mtd);
+-
++ put_mtd_device(c->mtd);
++
+ D1(printk(KERN_DEBUG "jffs2_put_super returning\n"));
+ }
+
+-static void jffs2_kill_sb(struct super_block *sb)
++int jffs2_remount_fs (struct super_block *sb, int *flags, char *data)
+ {
+ struct jffs2_sb_info *c = JFFS2_SB_INFO(sb);
+- generic_shutdown_super(sb);
+- put_mtd_device(c->mtd);
+- kfree(c);
++
++ if (c->flags & JFFS2_SB_FLAG_RO && !(sb->s_flags & MS_RDONLY))
++ return -EROFS;
++
++ /* We stop if it was running, then restart if it needs to.
++ This also catches the case where it was stopped and this
++ is just a remount to restart it */
++ if (!(sb->s_flags & MS_RDONLY))
++ jffs2_stop_garbage_collect_thread(c);
++
++ if (!(*flags & MS_RDONLY))
++ jffs2_start_garbage_collect_thread(c);
++
++ sb->s_flags = (sb->s_flags & ~MS_RDONLY)|(*flags & MS_RDONLY);
++
++ return 0;
+ }
+-
+-static struct file_system_type jffs2_fs_type = {
+- .owner = THIS_MODULE,
+- .name = "jffs2",
+- .get_sb = jffs2_get_sb,
+- .kill_sb = jffs2_kill_sb,
+-};
+
++void jffs2_write_super (struct super_block *sb)
++{
++ struct jffs2_sb_info *c = JFFS2_SB_INFO(sb);
++ sb->s_dirt = 0;
++
++ if (sb->s_flags & MS_RDONLY)
++ return;
++
++ jffs2_garbage_collect_trigger(c);
++ jffs2_erase_pending_blocks(c);
++ jffs2_mark_erased_blocks(c);
++}
+
+
++static DECLARE_FSTYPE_DEV(jffs2_fs_type, "jffs2", jffs2_read_super);
++
+ static int __init init_jffs2_fs(void)
+ {
+ int ret;
+
+- printk(KERN_INFO "JFFS2 version 2.1. (C) 2001, 2002 Red Hat, Inc.\n");
++ printk(KERN_NOTICE "JFFS2 version 2.1. (C) 2001 Red Hat, Inc., designed by Axis Communications AB.\n");
+
+- jffs2_inode_cachep = kmem_cache_create("jffs2_i",
+- sizeof(struct jffs2_inode_info),
+- 0, SLAB_HWCACHE_ALIGN,
+- jffs2_i_init_once, NULL);
+- if (!jffs2_inode_cachep) {
+- printk(KERN_ERR "JFFS2 error: Failed to initialise inode cache\n");
+- return -ENOMEM;
+- }
+- ret = jffs2_zlib_init();
+- if (ret) {
+- printk(KERN_ERR "JFFS2 error: Failed to initialise zlib workspaces\n");
+- goto out;
++#ifdef JFFS2_OUT_OF_KERNEL
++ /* sanity checks. Could we do these at compile time? */
++ if (sizeof(struct jffs2_sb_info) > sizeof (((struct super_block *)NULL)->u)) {
++ printk(KERN_ERR "JFFS2 error: struct jffs2_sb_info (%d bytes) doesn't fit in the super_block union (%d bytes)\n",
++ sizeof(struct jffs2_sb_info), sizeof (((struct super_block *)NULL)->u));
++ return -EIO;
++ }
++
++ if (sizeof(struct jffs2_inode_info) > sizeof (((struct inode *)NULL)->u)) {
++ printk(KERN_ERR "JFFS2 error: struct jffs2_inode_info (%d bytes) doesn't fit in the inode union (%d bytes)\n",
++ sizeof(struct jffs2_inode_info), sizeof (((struct inode *)NULL)->u));
++ return -EIO;
+ }
++#endif
++
+ ret = jffs2_create_slab_caches();
+ if (ret) {
+ printk(KERN_ERR "JFFS2 error: Failed to initialise slab caches\n");
+- goto out_zlib;
++ return ret;
+ }
+ ret = register_filesystem(&jffs2_fs_type);
+ if (ret) {
+ printk(KERN_ERR "JFFS2 error: Failed to register filesystem\n");
+- goto out_slab;
++ jffs2_destroy_slab_caches();
+ }
+- return 0;
+-
+- out_slab:
+- jffs2_destroy_slab_caches();
+- out_zlib:
+- jffs2_zlib_exit();
+- out:
+ return ret;
+ }
+
+ static void __exit exit_jffs2_fs(void)
+ {
+- unregister_filesystem(&jffs2_fs_type);
+ jffs2_destroy_slab_caches();
+- jffs2_zlib_exit();
+- kmem_cache_destroy(jffs2_inode_cachep);
++ unregister_filesystem(&jffs2_fs_type);
+ }
+
+ module_init(init_jffs2_fs);
+diff -Nur linux/fs/jffs2/symlink.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/symlink.c
+--- linux/fs/jffs2/symlink.c 2003-05-13 16:19:13.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/symlink.c 2003-06-23 01:47:04.000000000 +0700
+@@ -5,9 +5,33 @@
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: symlink.c,v 1.11 2002/07/23 17:00:45 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
++ *
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: symlink.c,v 1.5.2.1 2002/01/15 10:39:06 dwmw2 Exp $
+ *
+ */
+
+@@ -15,6 +39,7 @@
+ #include <linux/kernel.h>
+ #include <linux/slab.h>
+ #include <linux/fs.h>
++#include <linux/jffs2.h>
+ #include "nodelist.h"
+
+ int jffs2_readlink(struct dentry *dentry, char *buffer, int buflen);
+@@ -22,17 +47,45 @@
+
+ struct inode_operations jffs2_symlink_inode_operations =
+ {
+- .readlink = jffs2_readlink,
+- .follow_link = jffs2_follow_link,
+- .setattr = jffs2_setattr
++ readlink: jffs2_readlink,
++ follow_link: jffs2_follow_link,
++ setattr: jffs2_setattr
+ };
+
++static char *jffs2_getlink(struct dentry *dentry)
++{
++ struct jffs2_inode_info *f = JFFS2_INODE_INFO(dentry->d_inode);
++ char *buf;
++ int ret;
++
++ down(&f->sem);
++ if (!f->metadata) {
++ up(&f->sem);
++ printk(KERN_NOTICE "No metadata for symlink inode #%lu\n", dentry->d_inode->i_ino);
++ return ERR_PTR(-EINVAL);
++ }
++ buf = kmalloc(f->metadata->size+1, GFP_USER);
++ if (!buf) {
++ up(&f->sem);
++ return ERR_PTR(-ENOMEM);
++ }
++ buf[f->metadata->size]=0;
++
++ ret = jffs2_read_dnode(JFFS2_SB_INFO(dentry->d_inode->i_sb), f->metadata, buf, 0, f->metadata->size);
++ up(&f->sem);
++ if (ret) {
++ kfree(buf);
++ return ERR_PTR(ret);
++ }
++ return buf;
++
++}
+ int jffs2_readlink(struct dentry *dentry, char *buffer, int buflen)
+ {
+ unsigned char *kbuf;
+ int ret;
+
+- kbuf = jffs2_getlink(JFFS2_SB_INFO(dentry->d_inode->i_sb), JFFS2_INODE_INFO(dentry->d_inode));
++ kbuf = jffs2_getlink(dentry);
+ if (IS_ERR(kbuf))
+ return PTR_ERR(kbuf);
+
+@@ -46,7 +99,7 @@
+ unsigned char *buf;
+ int ret;
+
+- buf = jffs2_getlink(JFFS2_SB_INFO(dentry->d_inode->i_sb), JFFS2_INODE_INFO(dentry->d_inode));
++ buf = jffs2_getlink(dentry);
+
+ if (IS_ERR(buf))
+ return PTR_ERR(buf);
+diff -Nur linux/fs/jffs2/test/compr_rubin.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/compr_rubin.h
+--- linux/fs/jffs2/test/compr_rubin.h 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/compr_rubin.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,13 +0,0 @@
+-/* Rubin encoder/decoder header */
+-/* work started at : aug 3, 1994 */
+-/* last modification : aug 15, 1994 */
+-
+-#define RUBIN_REG_SIZE 16
+-#define UPPER_BIT_RUBIN (((long) 1)<<RUBIN_REG_SIZE-1)
+-#define LOWER_BITS_RUBIN ((((long) 1)<<RUBIN_REG_SIZE-1)-1)
+-
+-void init_rubin (void);
+-void encode (long, long, int);
+-void end_rubin (void);
+-void init_decod (void);
+-int decode (long, long);
+diff -Nur linux/fs/jffs2/test/histo.cc /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/histo.cc
+--- linux/fs/jffs2/test/histo.cc 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/histo.cc 1970-01-01 07:00:00.000000000 +0700
+@@ -1,80 +0,0 @@
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <assert.h>
+-
+-int histo[256];
+-int histo2[256];
+-int bits[8];
+-int total;
+-void main()
+-{
+- FILE *file;
+- int i,i2;
+-
+- int max=0;
+-
+-/* file = fopen("/lib/libc-2.2.so","r"); */
+- file = fopen("bigsymb2","r");
+- assert(file!=NULL);
+- while (!feof(file)) {
+- unsigned char cr;
+- fread(&cr,1,1,file);
+- histo[cr]++;
+- if (histo[cr]>max)
+- max = histo[cr];
+- }
+- fclose(file);
+-
+- i2 = 0;
+-
+-#if 0
+- printf("static int xlate[257] = { ");
+-
+-
+-
+- /* Ugh slow */
+- while (max>=0) {
+- for (i=0;i<256;i++) {
+- if (histo[i]==max) {
+- printf("\t%i,\n",i);
+- histo2[i2++]=histo[i];
+- }
+- }
+- max--;
+- }
+-
+- printf(" };\n");
+-
+- if (i2!=256)
+- printf("/* Uh oh: %i != 256 */ \n");
+-#endif
+-
+- for (i=0;i<256;i++) {
+- if (i&128)
+- bits[7]+=histo[i];
+- if (i&64)
+- bits[6]+=histo[i];
+- if (i&32)
+- bits[5]+=histo[i];
+- if (i&16)
+- bits[4]+=histo[i];
+- if (i&8)
+- bits[3]+=histo[i];
+- if (i&4)
+- bits[2]+=histo[i];
+- if (i&2)
+- bits[1]+=histo[i];
+- if (i&1)
+- bits[0]+=histo[i];
+- total+=histo[i];
+- }
+-
+- printf("#define BIT_DIVIDER %i \n",total>>12);
+- printf("static int bits[9] = { ");
+- for (i=0;i<8;i++)
+- if ((bits[i]>>12)>0)
+- printf("%i,",bits[i]>>12);
+- else
+- printf("1, ");
+- printf("};\n");
+-}
+\ No newline at end of file
+diff -Nur linux/fs/jffs2/test/histo.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/histo.h
+--- linux/fs/jffs2/test/histo.h 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/histo.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,2 +0,0 @@
+-#define BIT_DIVIDER 1043
+-static int bits[9] = { 277,249,290,267,229,341,212,241,};
+diff -Nur linux/fs/jffs2/test/histo1.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/histo1.h
+--- linux/fs/jffs2/test/histo1.h 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/histo1.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,2 +0,0 @@
+-#define BIT_DIVIDER 755
+-static int bits[9] = { 108,125,128,93,84,89,119,94,};
+diff -Nur linux/fs/jffs2/test/histo2.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/histo2.h
+--- linux/fs/jffs2/test/histo2.h 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/histo2.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,2 +0,0 @@
+-#define BIT_DIVIDER 504
+-static int bits[9] = { 250,210,239,238,233,307,237,144,};
+diff -Nur linux/fs/jffs2/test/histo_html.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/histo_html.h
+--- linux/fs/jffs2/test/histo_html.h 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/histo_html.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,2 +0,0 @@
+-#define BIT_DIVIDER 631
+-static int bits[9] = { 268,247,324,252,199,529,436,1, };
+diff -Nur linux/fs/jffs2/test/histo_text.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/histo_text.h
+--- linux/fs/jffs2/test/histo_text.h 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/histo_text.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,2 +0,0 @@
+-#define BIT_DIVIDER 1187
+-static int bits[9] = { 518,418,533,414,310,1069,822,1, };
+diff -Nur linux/fs/jffs2/test/main.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/main.c
+--- linux/fs/jffs2/test/main.c 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/main.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,56 +0,0 @@
+-#include <stdio.h>
+-
+-#include "compr_rubin.h"
+-
+-#define __u32 int
+-
+-/* _compress returns the compressed size, -1 if bigger */
+-int rtime_compress(unsigned char *data_in, unsigned char *cpage_out,
+- __u32 *sourcelen, __u32 *dstlen);
+-
+-void rtime_decompress(unsigned char *data_in, unsigned char *cpage_out,
+- __u32 srclen, __u32 destlen);
+-
+-void main()
+-{
+- unsigned char source[4096];
+- unsigned char compr[40960];
+- unsigned char dest[4096];
+-
+- int result;
+- int i;
+- int len,maxlen;
+- FILE *file;
+-
+- memset(dest,0xA5,sizeof(dest));
+-
+- for (i=0;i<4096;i++)
+- source[i] = i;
+-
+- file=fopen("asd","r");
+- while (!feof(file)) {
+- fread(source,1,4096,file);
+-
+- len = 4096;
+- maxlen = 40960;
+- result = rubin_compress(source,compr,&len, &maxlen);
+- if (result) {
+- printf("result is %d, exiting\n",result);
+- exit(0);
+- }
+- printf("Compressed to %i bytes \n",maxlen);
+-
+- if (maxlen>4096)
+- continue;
+-
+- rubin_decompress(compr,dest,4096,4096);
+- for (i=0;i<4096;i++)
+- if (source[i]!=dest[i]) {
+- printf("Mismatch at position %i: %i -> %i \n",i,source[i],dest[i]);
+-
+- }
+-
+- }
+- fclose(file);
+-}
+-
+diff -Nur linux/fs/jffs2/test/pushpull.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/pushpull.h
+--- linux/fs/jffs2/test/pushpull.h 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/pushpull.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,11 +0,0 @@
+-#define PPBUFSIZ 2048
+-void pushinit(unsigned char *buffer, unsigned int max);
+-void pushbit(int bit);
+-void pushblk(int blk, int bitsinblk);
+-void pushexit(void);
+-int pushedbits(void);
+-void pullinit(unsigned char *buffer);
+-int pullbit(void);
+-int pullblk(int bitsinblk);
+-void pullexit(void);
+-int pulledbits(void);
+diff -Nur linux/fs/jffs2/test/rtime.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/rtime.h
+--- linux/fs/jffs2/test/rtime.h 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/test/rtime.h 1970-01-01 07:00:00.000000000 +0700
+@@ -1,8 +0,0 @@
+-#define __u32 int
+-
+-/* _compress returns the compressed size, -1 if bigger */
+-int rtime_compress(unsigned char *data_in, unsigned char *cpage_out,
+- __u32 *sourcelen, __u32 *dstlen);
+-
+-void rtime_decompress(unsigned char *data_in, unsigned char *cpage_out,
+- __u32 srclen, __u32 destlen);
+diff -Nur linux/fs/jffs2/wbuf.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/wbuf.c
+--- linux/fs/jffs2/wbuf.c 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/wbuf.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,867 +0,0 @@
+-/*
+- * JFFS2 -- Journalling Flash File System, Version 2.
+- *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
+- *
+- * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+- *
+- * For licensing information, see the file 'LICENCE' in this directory.
+- *
+- * $Id: wbuf.c,v 1.17 2002/08/29 21:45:54 gleixner Exp $
+- *
+- * ChangeLog:
+- * 25-Oct-2002 Lineo Japan, Inc. deal with 1bit corruption of oob area
+- * 08-Oct-2002 Lineo Japan, Inc. move failure counter pos in oob
+- * 04-Oct-2002 Lineo Japan, Inc. correct jeb->bad_count value when
+- * failure count is 0xff
+- * 25-Sep-2002 Lineo Japan, Inc. take hamming distance for oob value
+- * into consideration
+- * 17-Sep-2002 Lineo Japan, Inc. add code for post-badblock
+- *
+- * ChangeLog:
+- * 24-Nov-2002 SHARP add erasing_dirty_size
+- * 25-Oct-2002 Lineo Japan, Inc. deal with 1bit corruption of oob area
+- * 08-Oct-2002 Lineo Japan, Inc. move failure counter pos in oob
+- * 04-Oct-2002 Lineo Japan, Inc. correct jeb->bad_count value when
+- * failure count is 0xff
+- * 25-Sep-2002 Lineo Japan, Inc. take hamming distance for oob value
+- * into consideration
+- * 17-Sep-2002 Lineo Japan, Inc. add code for post-badblock
+- *
+- */
+-
+-#include <linux/kernel.h>
+-#include <linux/slab.h>
+-#include <linux/mtd/mtd.h>
+-#include <linux/interrupt.h>
+-#include "crc32.h"
+-#include <linux/mtd/nand.h>
+-#include "nodelist.h"
+-
+-/* max. erase failures before we mark a block bad */
+-#define MAX_ERASE_FAILURES 5
+-
+-/* two seconds timeout for timed wbuf-flushing */
+-#define WBUF_FLUSH_TIMEOUT 2 * HZ
+-
+-#ifdef CONFIG_ARCH_SHARP_SL
+-#define FAILURECOUNTER_POS NAND_POSTBADBLOCK_POS
+-#else
+-#define FAILURECOUNTER_POS NAND_BADBLOCK_POS
+-#endif
+-
+-static inline void jffs2_refile_wbuf_blocks(struct jffs2_sb_info *c)
+-{
+- struct list_head *this, *next;
+- static int n;
+-
+- if (list_empty(&c->erasable_pending_wbuf_list))
+- return;
+-
+- list_for_each_safe(this, next, &c->erasable_pending_wbuf_list) {
+- struct jffs2_eraseblock *jeb = list_entry(this, struct jffs2_eraseblock, list);
+-
+- D1(printk(KERN_DEBUG "Removing eraseblock at 0x%08x from erasable_pending_wbuf_list...\n", jeb->offset));
+- list_del(this);
+- if ((jiffies + (n++)) & 127) {
+- /* Most of the time, we just erase it immediately. Otherwise we
+- spend ages scanning it on mount, etc. */
+- D1(printk(KERN_DEBUG "...and adding to erase_pending_list\n"));
+- list_add_tail(&jeb->list, &c->erase_pending_list);
+- c->erasing_dirty_size += jeb->dirty_size;
+- c->nr_erasing_blocks++;
+- jffs2_erase_pending_trigger(c);
+- } else {
+- /* Sometimes, however, we leave it elsewhere so it doesn't get
+- immediately reused, and we spread the load a bit. */
+- D1(printk(KERN_DEBUG "...and adding to erasable_list\n"));
+- list_add_tail(&jeb->list, &c->erasable_list);
+- }
+- }
+-}
+-
+-/*
+- * return true if hamming distance between a and b is <= 1.
+- *
+- * [NOTE]
+- * assume that higher 3 bytes are zero
+- */
+-static inline int jffs2_hamming_distance(unsigned int a, unsigned int b)
+-{
+-#ifdef __ARM_ARCH_5TE__
+- unsigned int n;
+- a ^= b;
+- asm (
+- "clz %0, %1\n"
+- : "=r" (n)
+- : "r" (a)
+- );
+- return (a << (n + 1)) == 0;
+-#else
+- unsigned int n;
+- a ^= b;
+- for (n = 0; n < 8; n++)
+- if (! (a & ~(1 << n)))
+- return 1;
+- return 0;
+-#endif
+-}
+-
+-static inline void jffs2_correct_cleanmarker(unsigned char* oob, unsigned char* correct_data, int len)
+-{
+- int i;
+- for (i = 0; i < len; i++)
+- if (jffs2_hamming_distance(oob[i], correct_data[i]))
+- oob[i] = correct_data[i];
+-}
+-
+-/*
+- * correct badblock marker value
+- */
+-static inline void jffs2_correct_badblock_val(unsigned char* oob)
+-{
+-#ifdef CONFIG_MTD_NAND_POST_BADBLOCK
+- if (jffs2_hamming_distance(oob[NAND_POSTBADBLOCK_POS], 0xff))
+- oob[NAND_POSTBADBLOCK_POS] = 0xff;
+-#endif
+- if (jffs2_hamming_distance(oob[NAND_BADBLOCK_POS], 0xff))
+- oob[NAND_BADBLOCK_POS] = 0xff;
+-}
+-
+-static inline void jffs2_correct_failedblock_val(unsigned char* oob)
+-{
+- if (jffs2_hamming_distance(oob[FAILURECOUNTER_POS], 0xff))
+- oob[FAILURECOUNTER_POS] = 0xff;
+-}
+-
+-/*
+- * return true if it is badblock
+- */
+-static inline int jffs2_is_badblock(const unsigned char* oob)
+-{
+-#ifdef CONFIG_MTD_NAND_POST_BADBLOCK
+- return ! (oob[NAND_POSTBADBLOCK_POS] == 0xff &&
+- oob[NAND_BADBLOCK_POS] == 0xff);
+-#else
+- return oob[NAND_BADBLOCK_POS] != 0xff;
+-#endif
+-}
+-
+-static inline int jffs2_is_failedblock(const unsigned char* oob)
+-{
+- return oob[FAILURECOUNTER_POS] != 0xff;
+-}
+-
+-/*
+-* Timed flushing of wbuf. If we have no consecutive write to wbuf, within
+-* the specified time, we flush the contents with padding !
+-*/
+-void jffs2_wbuf_timeout (unsigned long data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+- /*
+- * Wake up the flush process, we need process context to have the right
+- * to sleep on flash write
+- */
+- D1(printk(KERN_DEBUG "jffs2_wbuf_timeout(): timer expired\n"));
+- schedule_task(&c->wbuf_task);
+-}
+-
+-/*
+-* Process for timed wbuf flush
+-*
+-* FIXME What happens, if we have a write failure there ????
+-*/
+-void jffs2_wbuf_process (void *data)
+-{
+- struct jffs2_sb_info *c = (struct jffs2_sb_info *) data;
+-
+- D1(printk(KERN_DEBUG "jffs2_wbuf_process() entered\n"));
+-
+- /* Check, if the timer is active again */
+- if (timer_pending (&c->wbuf_timer)) {
+- D1(printk (KERN_DEBUG "Nothing to do, timer is active again\n"));
+- return;
+- }
+-
+- if (down_trylock(&c->alloc_sem)) {
+- /* If someone else has the alloc_sem, they're about to
+- write anyway. So no need to waste space by
+- padding */
+- D1(printk (KERN_DEBUG "jffs2_wbuf_process() alloc_sem already occupied\n"));
+- return;
+- }
+-
+- D1(printk (KERN_DEBUG "jffs2_wbuf_process() alloc_sem got\n"));
+-
+- if (!c->nextblock) {
+- D1(printk(KERN_DEBUG "jffs2_wbuf_process(): nextblock NULL, nothing to do\n"));
+- if (c->wbuf_len) {
+- printk(KERN_WARNING "jffs2_wbuf_process(): c->wbuf_len is 0x%03x but nextblock is NULL!\n", c->wbuf_len);
+- up(&c->alloc_sem);
+- BUG();
+- }
+- return;
+- }
+-
+-
+- /* if !c->nextblock then the tail will have got flushed from
+- jffs2_do_reserve_space() anyway. */
+- if(c->nextblock)
+- jffs2_flush_wbuf(c, 2); /* pad and adjust nextblock */
+-
+- up(&c->alloc_sem);
+-}
+-
+-
+-/* Meaning of pad argument:
+- 0: Do not pad. Probably pointless - we only ever use this when we can't pad anyway.
+- 1: Pad, do not adjust nextblock free_size
+- 2: Pad, adjust nextblock free_size
+-*/
+-int jffs2_flush_wbuf(struct jffs2_sb_info *c, int pad)
+-{
+- int ret;
+- size_t retlen;
+-
+- if (!down_trylock(&c->alloc_sem)) {
+- up(&c->alloc_sem);
+- printk(KERN_CRIT "jffs2_flush_wbuf() called with alloc_sem not locked!\n");
+- BUG();
+- }
+-
+- /* delete a eventually started timed wbuf flush */
+- del_timer_sync(&c->wbuf_timer);
+-
+- if(!c->wbuf || !c->wbuf_len)
+- return 0;
+-
+- /* claim remaining space on the page
+- this happens, if we have a change to a new block,
+- or if fsync forces us to flush the writebuffer.
+- if we have a switch to next page, we will not have
+- enough remaining space for this.
+- */
+- if (pad) {
+- c->wbuf_len = PAD(c->wbuf_len);
+-
+- if ( c->wbuf_len + sizeof(struct jffs2_unknown_node) < c->wbuf_pagesize) {
+- struct jffs2_unknown_node *padnode = (void *)(c->wbuf + c->wbuf_len);
+- padnode->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+- padnode->nodetype = cpu_to_je16(JFFS2_NODETYPE_PADDING);
+- padnode->totlen = cpu_to_je32(c->wbuf_pagesize - c->wbuf_len);
+- padnode->hdr_crc = cpu_to_je32(crc32(0, padnode, sizeof(*padnode)-4));
+- }
+- }
+- /* else jffs2_flash_writev has actually filled in the rest of the
+- buffer for us, and will deal with the node refs etc. later. */
+-
+- ret = c->mtd->write_ecc(c->mtd, c->wbuf_ofs, c->wbuf_pagesize, &retlen, c->wbuf, NULL, NAND_JFFS2_OOB);
+-
+- if (ret || retlen != c->wbuf_pagesize) {
+- if (ret)
+- printk(KERN_CRIT "jffs2_flush_wbuf(): Write failed with %d\n",ret);
+- else
+- printk(KERN_CRIT "jffs2_flush_wbuf(): Write was short %d instead of %d\n",retlen,c->wbuf_pagesize);
+-
+- ret = -EIO;
+- /* CHECKME NAND
+- So that the caller knows what happened. If
+- we were called from jffs2_flash_writev(), it'll
+- know to return failure and _its_ caller will
+- try again. writev gives back to jffs2_write_xxx
+- in write.c. There are the real fixme's
+- */
+-
+- /* FIXME NAND
+- If we were called from GC or fsync, there's no repair kit yet
+- */
+-
+- return ret;
+- }
+-
+- /* Adjusting free size of next block only, if it's called from fsync ! */
+- if (pad == 2) {
+- D1(printk(KERN_DEBUG "jffs2_flush_wbuf() adjusting free_size of c->nextblock\n"));
+- spin_lock_bh(&c->erase_completion_lock);
+- if (!c->nextblock)
+- BUG();
+- /* wbuf_pagesize - wbuf_len is the amount of space that's to be
+- padded. If there is less free space in the block than that,
+- something screwed up */
+- if (c->nextblock->free_size < (c->wbuf_pagesize - c->wbuf_len)) {
+- printk(KERN_CRIT "jffs2_flush_wbuf(): Accounting error. wbuf at 0x%08x has 0x%03x bytes, 0x%03x left.\n",
+- c->wbuf_ofs, c->wbuf_len, c->wbuf_pagesize-c->wbuf_len);
+- printk(KERN_CRIT "jffs2_flush_wbuf(): But free_size for block at 0x%08x is only 0x%08x\n",
+- c->nextblock->offset, c->nextblock->free_size);
+- BUG();
+- }
+- c->nextblock->free_size -= (c->wbuf_pagesize - c->wbuf_len);
+- c->free_size -= (c->wbuf_pagesize - c->wbuf_len);
+- c->nextblock->wasted_size += (c->wbuf_pagesize - c->wbuf_len);
+- c->wasted_size += (c->wbuf_pagesize - c->wbuf_len);
+- spin_unlock_bh(&c->erase_completion_lock);
+- }
+-
+- /* Stick any now-obsoleted blocks on the erase_pending_list */
+- spin_lock_bh(&c->erase_completion_lock);
+- jffs2_refile_wbuf_blocks(c);
+- spin_unlock_bh(&c->erase_completion_lock);
+-
+- memset(c->wbuf,0xff,c->wbuf_pagesize);
+- /* adjust write buffer offset, else we get a non contigous write bug */
+- c->wbuf_ofs+= c->wbuf_pagesize;
+- c->wbuf_len = 0;
+- return 0;
+-}
+-
+-#define PAGE_DIV(x) ( (x) & (~(c->wbuf_pagesize - 1)) )
+-#define PAGE_MOD(x) ( (x) & (c->wbuf_pagesize - 1) )
+-int jffs2_flash_writev(struct jffs2_sb_info *c, const struct iovec *invecs, unsigned long count, loff_t to, size_t *retlen)
+-{
+- struct iovec outvecs[3];
+- uint32_t totlen = 0;
+- uint32_t split_ofs = 0;
+- uint32_t old_totlen;
+- int ret, splitvec = -1;
+- int invec, outvec;
+- size_t wbuf_retlen;
+- unsigned char *wbuf_ptr;
+- size_t donelen = 0;
+- uint32_t outvec_to = to;
+-
+- /* If not NAND flash, don't bother */
+- if (!c->wbuf)
+- return jffs2_flash_direct_writev(c, invecs, count, to, retlen);
+-
+- /* If wbuf_ofs is not initialized, set it to target adress */
+- if (c->wbuf_ofs == 0xFFFFFFFF) {
+- c->wbuf_ofs = PAGE_DIV(to);
+- c->wbuf_len = PAGE_MOD(to);
+- memset(c->wbuf,0xff,c->wbuf_pagesize);
+- }
+-
+- /* Sanity checks on target address.
+- It's permitted to write at PAD(c->wbuf_len+c->wbuf_ofs),
+- and it's permitted to write at the beginning of a new
+- erase block. Anything else, and you die.
+- New block starts at xxx000c (0-b = block header)
+- */
+- if ( (to & ~(c->sector_size-1)) != (c->wbuf_ofs & ~(c->sector_size-1)) ) {
+- /* It's a write to a new block */
+- if (c->wbuf_len) {
+- D1(printk(KERN_DEBUG "jffs2_flash_writev() to 0x%lx causes flush of wbuf at 0x%08x\n", (unsigned long)to, c->wbuf_ofs));
+- ret = jffs2_flush_wbuf(c, 1);
+- if (ret) {
+- /* the underlying layer has to check wbuf_len to do the cleanup */
+- D1(printk(KERN_WARNING "jffs2_flush_wbuf() called from jffs2_flash_writev() failed %d\n", ret));
+- *retlen = 0;
+- return ret;
+- }
+- }
+- /* set pointer to new block */
+- c->wbuf_ofs = PAGE_DIV(to);
+- c->wbuf_len = PAGE_MOD(to);
+- }
+-
+- if (to != PAD(c->wbuf_ofs + c->wbuf_len)) {
+- /* We're not writing immediately after the writebuffer. Bad. */
+- printk(KERN_CRIT "jffs2_flash_writev(): Non-contiguous write to %08lx\n", (unsigned long)to);
+- if (c->wbuf_len)
+- printk(KERN_CRIT "wbuf was previously %08x-%08x\n",
+- c->wbuf_ofs, c->wbuf_ofs+c->wbuf_len);
+- BUG();
+- }
+-
+- /* Note outvecs[3] above. We know count is never greater than 2 */
+- if (count > 2) {
+- printk(KERN_CRIT "jffs2_flash_writev(): count is %ld\n", count);
+- BUG();
+- }
+-
+- invec = 0;
+- outvec = 0;
+-
+-
+- /* Fill writebuffer first, if already in use */
+- if (c->wbuf_len) {
+- uint32_t invec_ofs = 0;
+-
+- /* adjust alignment offset */
+- if (c->wbuf_len != PAGE_MOD(to)) {
+- c->wbuf_len = PAGE_MOD(to);
+- /* take care of alignment to next page */
+- if (!c->wbuf_len)
+- c->wbuf_len = c->wbuf_pagesize;
+- }
+-
+- while(c->wbuf_len < c->wbuf_pagesize) {
+- uint32_t thislen;
+-
+- if (invec == count)
+- goto alldone;
+-
+- thislen = c->wbuf_pagesize - c->wbuf_len;
+-
+- if (thislen >= invecs[invec].iov_len)
+- thislen = invecs[invec].iov_len;
+-
+- invec_ofs = thislen;
+-
+- memcpy(c->wbuf + c->wbuf_len, invecs[invec].iov_base, thislen);
+- c->wbuf_len += thislen;
+- donelen += thislen;
+- /* Get next invec, if actual did not fill the buffer */
+- if (c->wbuf_len < c->wbuf_pagesize)
+- invec++;
+- }
+-
+- /* write buffer is full, flush buffer */
+- ret = jffs2_flush_wbuf(c, 0);
+- if (ret) {
+- /* the underlying layer has to check wbuf_len to do the cleanup */
+- D1(printk(KERN_WARNING "jffs2_flush_wbuf() called from jffs2_flash_writev() failed %d\n", ret));
+- *retlen = 0;
+- return ret;
+- }
+- outvec_to += donelen;
+- c->wbuf_ofs = outvec_to;
+-
+- /* All invecs done ? */
+- if (invec == count)
+- goto alldone;
+-
+- /* Set up the first outvec, containing the remainder of the
+- invec we partially used */
+- if (invecs[invec].iov_len > invec_ofs) {
+- outvecs[0].iov_base = invecs[invec].iov_base+invec_ofs;
+- totlen = outvecs[0].iov_len = invecs[invec].iov_len-invec_ofs;
+- if (totlen > c->wbuf_pagesize) {
+- splitvec = outvec;
+- split_ofs = outvecs[0].iov_len - PAGE_MOD(totlen);
+- }
+- outvec++;
+- }
+- invec++;
+- }
+-
+- /* OK, now we've flushed the wbuf and the start of the bits
+- we have been asked to write, now to write the rest.... */
+-
+- /* totlen holds the amount of data still to be written */
+- old_totlen = totlen;
+- for ( ; invec < count; invec++,outvec++ ) {
+- outvecs[outvec].iov_base = invecs[invec].iov_base;
+- totlen += outvecs[outvec].iov_len = invecs[invec].iov_len;
+- if (PAGE_DIV(totlen) != PAGE_DIV(old_totlen)) {
+- splitvec = outvec;
+- split_ofs = outvecs[outvec].iov_len - PAGE_MOD(totlen);
+- old_totlen = totlen;
+- }
+- }
+-
+- /* Now the outvecs array holds all the remaining data to write */
+- /* Up to splitvec,split_ofs is to be written immediately. The rest
+- goes into the (now-empty) wbuf */
+-
+- if (splitvec != -1) {
+- uint32_t remainder;
+- int ret;
+-
+- remainder = outvecs[splitvec].iov_len - split_ofs;
+- outvecs[splitvec].iov_len = split_ofs;
+-
+- /* We did cross a page boundary, so we write some now */
+- ret = c->mtd->writev_ecc(c->mtd, outvecs, splitvec+1, outvec_to, &wbuf_retlen, NULL, NAND_JFFS2_OOB);
+- if (ret < 0 || wbuf_retlen != PAGE_DIV(totlen)) {
+- /* At this point we have no problem,
+- c->wbuf is empty.
+- */
+- *retlen = donelen;
+- return ret;
+- }
+-
+- donelen += wbuf_retlen;
+- c->wbuf_ofs = PAGE_DIV(outvec_to) + PAGE_DIV(totlen);
+-
+- if (remainder) {
+- outvecs[splitvec].iov_base += split_ofs;
+- outvecs[splitvec].iov_len = remainder;
+- } else {
+- splitvec++;
+- }
+-
+- } else {
+- splitvec = 0;
+- }
+-
+- /* Now splitvec points to the start of the bits we have to copy
+- into the wbuf */
+- wbuf_ptr = c->wbuf;
+-
+- for ( ; splitvec < outvec; splitvec++) {
+- /* Don't copy the wbuf into itself */
+- if (outvecs[splitvec].iov_base == c->wbuf)
+- continue;
+- memcpy(wbuf_ptr, outvecs[splitvec].iov_base, outvecs[splitvec].iov_len);
+- wbuf_ptr += outvecs[splitvec].iov_len;
+- donelen += outvecs[splitvec].iov_len;
+- }
+- c->wbuf_len = wbuf_ptr - c->wbuf;
+-
+-alldone:
+- *retlen = donelen;
+- /* Setup timed wbuf flush, if buffer len != 0 */
+- if (c->wbuf_len) {
+- D1(printk (KERN_DEBUG "jffs2_flash_writev: mod wbuf_timer\n"));
+- mod_timer(&c->wbuf_timer, jiffies + WBUF_FLUSH_TIMEOUT);
+- }
+- return 0;
+-}
+-
+-/*
+- This is the entry for NOR-Flash. We use it also for NAND to flush wbuf
+-*/
+-int jffs2_flash_write(struct jffs2_sb_info *c, loff_t ofs, size_t len, size_t *retlen, const u_char *buf)
+-{
+- return c->mtd->write(c->mtd, ofs, len, retlen, buf);
+-}
+-
+-/*
+- Handle readback from writebuffer and ECC failure return
+-*/
+-int jffs2_flash_read(struct jffs2_sb_info *c, loff_t ofs, size_t len, size_t *retlen, u_char *buf)
+-{
+- loff_t orbf = 0, owbf = 0, lwbf = 0;
+- int ret;
+-
+- /* Read flash */
+- if (!jffs2_can_mark_obsolete(c)) {
+- ret = c->mtd->read_ecc(c->mtd, ofs, len, retlen, buf, NULL, NAND_JFFS2_OOB);
+-
+- if ( (ret == -EIO) && (*retlen == len) ) {
+- printk(KERN_WARNING "mtd->read(0x%x bytes from 0x%llx) returned ECC error\n", len, ofs);
+- /*
+- * We have the raw data without ECC correction in the buffer, maybe
+- * we are lucky and all data or parts are correct. We check the node.
+- * If data are corrupted node check will sort it out.
+- * We keep this block, it will fail on write or erase and the we
+- * mark it bad. Or should we do that now? But we should give him a chance.
+- * Maybe we had a system crash or power loss before the ecc write or
+- * a erase was completed.
+- * So we return success. :)
+- */
+- ret = 0;
+- }
+- } else
+- return c->mtd->read(c->mtd, ofs, len, retlen, buf);
+-
+- /* if no writebuffer available or write buffer empty, return */
+- if (!c->wbuf_pagesize || !c->wbuf_len)
+- return ret;
+-
+- /* if we read in a different block, return */
+- if ( (ofs & ~(c->sector_size-1)) != (c->wbuf_ofs & ~(c->sector_size-1)) )
+- return ret;
+-
+- if (ofs >= c->wbuf_ofs) {
+- owbf = (ofs - c->wbuf_ofs); /* offset in write buffer */
+- if (owbf > c->wbuf_len) /* is read beyond write buffer ? */
+- return ret;
+- lwbf = c->wbuf_len - owbf; /* number of bytes to copy */
+- if (lwbf > len)
+- lwbf = len;
+- } else {
+- orbf = (c->wbuf_ofs - ofs); /* offset in read buffer */
+- if (orbf > len) /* is write beyond write buffer ? */
+- return ret;
+- lwbf = len - orbf; /* number of bytes to copy */
+- if (lwbf > c->wbuf_len)
+- lwbf = c->wbuf_len;
+- }
+- if (lwbf > 0)
+- memcpy(buf+orbf,c->wbuf+owbf,lwbf);
+-
+- return ret;
+-}
+-
+-/*
+- * Check, if the out of band area is empty
+- */
+-int jffs2_check_oob_empty( struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb, int mode)
+-{
+- unsigned char *buf;
+- int ret = 0;
+- int i,len;
+- size_t retlen;
+- int fsdata_pos,oob_size;
+-
+- oob_size = c->mtd->oobsize;
+-
+- switch(c->mtd->ecctype) {
+- case MTD_ECC_SW:
+- fsdata_pos = (c->wbuf_pagesize == 256) ? NAND_JFFS2_OOB8_FSDAPOS : NAND_JFFS2_OOB16_FSDAPOS;
+- break;
+- default:
+- D1(printk(KERN_WARNING "jffs2_write_oob_empty(): Invalid ECC type\n"));
+- return -EINVAL;
+- }
+-
+- /* allocate a buffer for all oob data in this sector */
+- len = 4 * oob_size;
+- buf = kmalloc(len, GFP_KERNEL);
+- if (!buf) {
+- printk(KERN_NOTICE "jffs2_check_oob_empty(): allocation of temporary data buffer for oob check failed\n");
+- return -ENOMEM;
+- }
+- /*
+- * if mode = 0, we scan for a total empty oob area, else we have
+- * to take care of the cleanmarker in the first page of the block
+- */
+- ret = jffs2_flash_read_oob(c, jeb->offset, len , &retlen, buf);
+- if (ret) {
+- D1(printk(KERN_WARNING "jffs2_check_oob_empty(): Read OOB failed %d for block at %08x\n", ret, jeb->offset));
+- goto out;
+- }
+-
+- if (retlen < len) {
+- D1(printk(KERN_WARNING "jffs2_check_oob_empty(): Read OOB return short read "
+- "(%d bytes not %d) for block at %08x\n", retlen, len, jeb->offset));
+- ret = -EIO;
+- goto out;
+- }
+-
+- /* Special check for first two pages */
+- jffs2_correct_badblock_val(buf);
+- if (jffs2_is_badblock(buf)) {
+- D1(printk(KERN_WARNING "jffs2_check_oob_empty(): Bad block at %08x\n",jeb->offset));
+- /* Return 2 for bad and 3 for failed block
+- bad goes to list_bad and failed to list_erase */
+- ret = 2;
+- goto out;
+- }
+- for(i = 0; i < fsdata_pos ; i++) {
+- if (! jffs2_hamming_distance(buf[i], 0xff)) {
+- ret = 1;
+- goto out;
+- }
+- }
+-
+- jffs2_correct_failedblock_val(&buf[oob_size]);
+- if (jffs2_is_failedblock(&buf[oob_size])) {
+- D1(printk(KERN_WARNING "jffs2_check_oob_empty(): Failed block at %08x\n",jeb->offset));
+- /* Return 2 for bad and 3 for failed block
+- bad goes to list_bad and failed to list_erase */
+- ret = 3;
+- goto out;
+- }
+- for(i = oob_size; i < len; i++) {
+- if (! jffs2_hamming_distance(buf[i], 0xff)) {
+- ret = 1;
+- goto out;
+- }
+- }
+-
+-out:
+- kfree(buf);
+-
+- return ret;
+-}
+-
+-int jffs2_check_nand_cleanmarker(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb)
+-{
+- struct jffs2_unknown_node n;
+- unsigned char buf[32];
+- unsigned char *p;
+- int ret,i;
+- size_t retlen;
+- int fsdata_pos,fsdata_len, oob_size;
+-
+- oob_size = c->mtd->oobsize;
+-
+- switch(c->mtd->ecctype) {
+- case MTD_ECC_SW:
+- fsdata_pos = (c->wbuf_pagesize == 256) ? NAND_JFFS2_OOB8_FSDAPOS : NAND_JFFS2_OOB16_FSDAPOS;
+- fsdata_len = (c->wbuf_pagesize == 256) ? NAND_JFFS2_OOB8_FSDALEN : NAND_JFFS2_OOB16_FSDALEN;
+- break;
+- default:
+- D1(printk(KERN_WARNING "jffs2_write_nand_cleanmarker(): Invalid ECC type\n"));
+- return -EINVAL;
+- }
+-
+- /*
+- * We read oob data from page 0 and 1 of the block.
+- * page 0 contains cleanmarker and badblock info
+- * page 2 contains failure count of this block
+- */
+- ret = c->mtd->read_oob(c->mtd, jeb->offset, oob_size << 1 , &retlen, buf);
+-
+- if (ret) {
+- D1(printk(KERN_WARNING "jffs2_check_nand_cleanmarker(): Read OOB failed %d for block at %08x\n", ret, jeb->offset));
+- return ret;
+- }
+- if (retlen < (oob_size << 1) ) {
+- D1(printk(KERN_WARNING "jffs2_check_nand_cleanmarker(): Read OOB return short read (%d bytes not %d) for block at %08x\n", retlen, oob_size << 1 , jeb->offset));
+- return -EIO;
+- }
+-
+- /* Check for bad block marker */
+- jffs2_correct_badblock_val(buf);
+- if (jffs2_is_badblock(buf)) {
+- D1(printk(KERN_WARNING "jffs2_check_nand_cleanmarker(): Bad block at %08x\n",jeb->offset));
+- return 2;
+- }
+-
+- /* Check for failure counter in the second page */
+- jffs2_correct_failedblock_val(&buf[oob_size]);
+- if (jffs2_is_failedblock(&buf[oob_size])) {
+- D1(printk(KERN_WARNING "jffs2_check_nand_cleanmarker(): Block marked as failed at %08x, fail count:%d\n",jeb->offset,buf[FAILURECOUNTER_POS+oob_size]));
+- return 3;
+- }
+-
+- n.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+- n.nodetype = cpu_to_je16(JFFS2_NODETYPE_CLEANMARKER);
+- n.totlen = cpu_to_je32(8);
+- p = (unsigned char *) &n;
+-
+- jffs2_correct_cleanmarker(&buf[fsdata_pos], p, fsdata_len);
+- for (i = 0; i < fsdata_len; i++) {
+- if (buf[fsdata_pos+i] != p[i]) {
+- D2(printk(KERN_WARNING "jffs2_check_nand_cleanmarker(): Cleanmarker node not detected in block at %08x\n", jeb->offset));
+- return 1;
+- }
+- }
+-
+- return 0;
+-}
+-
+-int jffs2_write_nand_cleanmarker(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb)
+-{
+- struct jffs2_unknown_node n;
+- int ret;
+- int fsdata_pos,fsdata_len;
+- size_t retlen;
+-
+- switch(c->mtd->ecctype) {
+- case MTD_ECC_SW:
+- fsdata_pos = (c->wbuf_pagesize == 256) ? NAND_JFFS2_OOB8_FSDAPOS : NAND_JFFS2_OOB16_FSDAPOS;
+- fsdata_len = (c->wbuf_pagesize == 256) ? NAND_JFFS2_OOB8_FSDALEN : NAND_JFFS2_OOB16_FSDALEN;
+- break;
+- default:
+- D1(printk(KERN_WARNING "jffs2_write_nand_cleanmarker(): Invalid ECC type\n"));
+- return -EINVAL;
+- }
+-
+- n.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+- n.nodetype = cpu_to_je16(JFFS2_NODETYPE_CLEANMARKER);
+- n.totlen = cpu_to_je32(8);
+-
+- ret = jffs2_flash_write_oob(c, jeb->offset + fsdata_pos, fsdata_len, &retlen, (unsigned char *)&n);
+-
+- if (ret) {
+- D1(printk(KERN_WARNING "jffs2_write_nand_cleanmarker(): Write failed for block at %08x: error %d\n", jeb->offset, ret));
+- return ret;
+- }
+- if (retlen != fsdata_len) {
+- D1(printk(KERN_WARNING "jffs2_write_nand_cleanmarker(): Short write for block at %08x: %d not %d\n", jeb->offset, retlen, fsdata_len));
+- return ret;
+- }
+- return 0;
+-}
+-
+-/*
+- * We try to get the failure count of this block.
+- */
+-int jffs2_nand_read_failcnt(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb)
+-{
+-
+- signed char buf[16];
+- int ret;
+- size_t retlen;
+- int oob_size, badblock_pos;
+-
+- oob_size = c->mtd->oobsize;
+-
+- switch(c->mtd->ecctype) {
+- case MTD_ECC_SW:
+- badblock_pos = FAILURECOUNTER_POS;
+- break;
+- default:
+- D1(printk(KERN_WARNING "jffs2_nand_read_failcnt(): Invalid ECC type\n"));
+- return -EINVAL;
+- }
+-
+- ret = c->mtd->read_oob(c->mtd, jeb->offset + c->mtd->oobblock, oob_size , &retlen, buf);
+-
+- if (ret) {
+- D1(printk(KERN_WARNING "jffs2_nand_read_failcnt(): Read OOB failed %d for block at %08x\n", ret, jeb->offset));
+- return ret;
+- }
+-
+- if (retlen < oob_size) {
+- D1(printk(KERN_WARNING "jffs2_nand_read_failcnt(): Read OOB return short read (%d bytes not %d) for block at %08x\n", retlen, oob_size, jeb->offset));
+- return -EIO;
+- }
+-
+- jeb->bad_count =
+- (buf[badblock_pos] >= -1 && buf[badblock_pos] < MAX_ERASE_FAILURES) ?
+- buf[badblock_pos] :
+- MAX_ERASE_FAILURES - 1;
+- return 0;
+-}
+-
+-/*
+- * On NAND we try to mark this block bad. We try to write how often
+- * the block was erased and mark it finaly bad, if the count
+- * is > MAX_ERASE_FAILURES. We read this information on mount !
+- * jeb->bad_count contains the count before this erase.
+- * Don't care about failures. This block remains on the erase-pending
+- * or badblock list as long as nobody manipulates the flash with
+- * a bootloader or something like that.
+- */
+-
+-int jffs2_write_nand_badblock(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb)
+-{
+- unsigned char buf = 0x0;
+- int ret,pos;
+- size_t retlen;
+-
+- switch(c->mtd->ecctype) {
+- case MTD_ECC_SW:
+- break;
+- default:
+- D1(printk(KERN_WARNING "jffs2_write_nand_badblock(): Invalid ECC type\n"));
+- return -EINVAL;
+- }
+-
+- /* if the count is < max, we try to write the counter to the 2nd page oob area */
+- if( ++jeb->bad_count < MAX_ERASE_FAILURES) {
+- buf = (unsigned char)jeb->bad_count;
+- pos = c->mtd->oobblock + FAILURECOUNTER_POS;
+- }
+- else {
+-#ifdef CONFIG_MTD_NAND_POST_BADBLOCK
+- pos = NAND_POSTBADBLOCK_POS;
+-#else
+- pos = NAND_BADBLOCK_POS;
+-#endif
+- }
+-
+- ret = jffs2_flash_write_oob(c, jeb->offset + pos, 1, &retlen, &buf);
+-
+- if (ret) {
+- D1(printk(KERN_WARNING "jffs2_write_nand_badblock(): Write failed for block at %08x: error %d\n", jeb->offset, ret));
+- return ret;
+- }
+- if (retlen != 1) {
+- D1(printk(KERN_WARNING "jffs2_write_nand_badblock(): Short write for block at %08x: %d not 1\n", jeb->offset, retlen));
+- return ret;
+- }
+- return 0;
+-}
+-
+-/*
+- * Local variables:
+- * c-basic-offset: 8
+- * End:
+- */
+diff -Nur linux/fs/jffs2/write.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/write.c
+--- linux/fs/jffs2/write.c 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/write.c 2003-06-23 01:47:04.000000000 +0700
+@@ -1,66 +1,152 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in this directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: write.c,v 1.59 2002/09/06 16:46:30 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
++ *
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: write.c,v 1.30 2001/12/30 16:01:11 dwmw2 Exp $
+ *
+ */
+
+ #include <linux/kernel.h>
+ #include <linux/fs.h>
+-#include "crc32.h"
+-#include <linux/slab.h>
+-#include <linux/pagemap.h>
++#include <linux/jffs2.h>
+ #include <linux/mtd/mtd.h>
+ #include "nodelist.h"
++#include "crc32.h"
+
+-
+-int jffs2_do_new_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, uint32_t mode, struct jffs2_raw_inode *ri)
++/* jffs2_new_inode: allocate a new inode and inocache, add it to the hash,
++ fill in the raw_inode while you're at it. */
++struct inode *jffs2_new_inode (struct inode *dir_i, int mode, struct jffs2_raw_inode *ri)
+ {
++ struct inode *inode;
++ struct super_block *sb = dir_i->i_sb;
+ struct jffs2_inode_cache *ic;
++ struct jffs2_sb_info *c;
++ struct jffs2_inode_info *f;
++
++ D1(printk(KERN_DEBUG "jffs2_new_inode(): dir_i %ld, mode 0x%x\n", dir_i->i_ino, mode));
++
++ c = JFFS2_SB_INFO(sb);
++ memset(ri, 0, sizeof(*ri));
+
+ ic = jffs2_alloc_inode_cache();
+ if (!ic) {
+- return -ENOMEM;
++ return ERR_PTR(-ENOMEM);
+ }
+-
+ memset(ic, 0, sizeof(*ic));
++
++ inode = new_inode(sb);
++
++ if (!inode) {
++ jffs2_free_inode_cache(ic);
++ return ERR_PTR(-ENOMEM);
++ }
+
++ /* Alloc jffs2_inode_info when that's split in 2.5 */
++
++ f = JFFS2_INODE_INFO(inode);
++ memset(f, 0, sizeof(*f));
+ init_MUTEX_LOCKED(&f->sem);
+ f->inocache = ic;
+- f->inocache->nlink = 1;
++ inode->i_nlink = f->inocache->nlink = 1;
+ f->inocache->nodes = (struct jffs2_raw_node_ref *)f->inocache;
+- f->inocache->ino = ++c->highest_ino;
+- ri->ino = cpu_to_je32(f->inocache->ino);
+-
+- D1(printk(KERN_DEBUG "jffs2_do_new_inode(): Assigned ino# %d\n", f->inocache->ino));
++ f->inocache->ino = ri->ino = inode->i_ino = ++c->highest_ino;
++ D1(printk(KERN_DEBUG "jffs2_new_inode(): Assigned ino# %d\n", ri->ino));
+ jffs2_add_ino_cache(c, f->inocache);
+
+- ri->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+- ri->nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
+- ri->totlen = cpu_to_je32(PAD(sizeof(*ri)));
+- ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4));
+- ri->mode = cpu_to_je32(mode);
++ ri->magic = JFFS2_MAGIC_BITMASK;
++ ri->nodetype = JFFS2_NODETYPE_INODE;
++ ri->totlen = PAD(sizeof(*ri));
++ ri->hdr_crc = crc32(0, ri, sizeof(struct jffs2_unknown_node)-4);
++ ri->mode = mode;
++ f->highest_version = ri->version = 1;
++ ri->uid = current->fsuid;
++ if (dir_i->i_mode & S_ISGID) {
++ ri->gid = dir_i->i_gid;
++ if (S_ISDIR(mode))
++ ri->mode |= S_ISGID;
++ } else {
++ ri->gid = current->fsgid;
++ }
++ inode->i_mode = ri->mode;
++ inode->i_gid = ri->gid;
++ inode->i_uid = ri->uid;
++ inode->i_atime = inode->i_ctime = inode->i_mtime =
++ ri->atime = ri->mtime = ri->ctime = CURRENT_TIME;
++ inode->i_blksize = PAGE_SIZE;
++ inode->i_blocks = 0;
++ inode->i_size = 0;
+
+- f->highest_version = 1;
+- ri->version = cpu_to_je32(f->highest_version);
++ insert_inode_hash(inode);
+
+- return 0;
++ return inode;
+ }
+
+-static void writecheck(struct jffs2_sb_info *c, uint32_t ofs)
++/* This ought to be in core MTD code. All registered MTD devices without writev should have
++ this put in place. Bug the MTD maintainer */
++static int mtd_fake_writev(struct mtd_info *mtd, const struct iovec *vecs, unsigned long count, loff_t to, size_t *retlen)
++{
++ unsigned long i;
++ size_t totlen = 0, thislen;
++ int ret = 0;
++
++ for (i=0; i<count; i++) {
++ mtd->write(mtd, to, vecs[i].iov_len, &thislen, vecs[i].iov_base);
++ totlen += thislen;
++ if (ret || thislen != vecs[i].iov_len)
++ break;
++ to += vecs[i].iov_len;
++ }
++ if (retlen)
++ *retlen = totlen;
++ return ret;
++}
++
++
++static inline int mtd_writev(struct mtd_info *mtd, const struct iovec *vecs, unsigned long count, loff_t to, size_t *retlen)
++{
++ if (mtd->writev)
++ return mtd->writev(mtd,vecs,count,to,retlen);
++ else
++ return mtd_fake_writev(mtd, vecs, count, to, retlen);
++}
++
++static void writecheck(struct mtd_info *mtd, __u32 ofs)
+ {
+ unsigned char buf[16];
+- size_t retlen;
++ ssize_t retlen;
+ int ret, i;
+
+- ret = jffs2_flash_read(c, ofs, 16, &retlen, buf);
+- if (ret || (retlen != 16)) {
++ ret = mtd->read(mtd, ofs, 16, &retlen, buf);
++ if (ret && retlen != 16) {
+ D1(printk(KERN_DEBUG "read failed or short in writecheck(). ret %d, retlen %d\n", ret, retlen));
+ return;
+ }
+@@ -70,7 +156,7 @@
+ ret = 1;
+ }
+ if (ret) {
+- printk(KERN_WARNING "ARGH. About to write node to 0x%08x on flash, but there are data already there:\n", ofs);
++ printk(KERN_WARNING "ARGH. About to write node to 0x%08x on flash, but there's data already there:\n", ofs);
+ printk(KERN_WARNING "0x%08x: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
+ ofs,
+ buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7],
+@@ -78,22 +164,24 @@
+ }
+ }
+
+-
++
++
+
+ /* jffs2_write_dnode - given a raw_inode, allocate a full_dnode for it,
+ write it to the flash, link it into the existing inode/fragment list */
+
+-struct jffs2_full_dnode *jffs2_write_dnode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, struct jffs2_raw_inode *ri, const unsigned char *data, uint32_t datalen, uint32_t flash_ofs, uint32_t *writelen)
++struct jffs2_full_dnode *jffs2_write_dnode(struct inode *inode, struct jffs2_raw_inode *ri, const unsigned char *data, __u32 datalen, __u32 flash_ofs, __u32 *writelen)
+
+ {
++ struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
++ struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+ struct jffs2_raw_node_ref *raw;
+ struct jffs2_full_dnode *fn;
+- size_t retlen;
++ ssize_t retlen;
+ struct iovec vecs[2];
+ int ret;
+- unsigned long cnt = 2;
+
+- D1(if(je32_to_cpu(ri->hdr_crc) != crc32(0, ri, sizeof(struct jffs2_unknown_node)-4)) {
++ D1(if(ri->hdr_crc != crc32(0, ri, sizeof(struct jffs2_unknown_node)-4)) {
+ printk(KERN_CRIT "Eep. CRC not correct in jffs2_write_dnode()\n");
+ BUG();
+ }
+@@ -103,10 +191,10 @@
+ vecs[1].iov_base = (unsigned char *)data;
+ vecs[1].iov_len = datalen;
+
+- writecheck(c, flash_ofs);
++ writecheck(c->mtd, flash_ofs);
+
+- if (je32_to_cpu(ri->totlen) != sizeof(*ri) + datalen) {
+- printk(KERN_WARNING "jffs2_write_dnode: ri->totlen (0x%08x) != sizeof(*ri) (0x%08x) + datalen (0x%08x)\n", je32_to_cpu(ri->totlen), sizeof(*ri), datalen);
++ if (ri->totlen != sizeof(*ri) + datalen) {
++ printk(KERN_WARNING "jffs2_write_dnode: ri->totlen (0x%08x) != sizeof(*ri) (0x%08x) + datalen (0x%08x)\n", ri->totlen, sizeof(*ri), datalen);
+ }
+ raw = jffs2_alloc_raw_node_ref();
+ if (!raw)
+@@ -118,20 +206,15 @@
+ return ERR_PTR(-ENOMEM);
+ }
+ raw->flash_offset = flash_ofs;
+- raw->totlen = PAD(sizeof(*ri)+datalen);
++ raw->totlen = PAD(ri->totlen);
+ raw->next_phys = NULL;
+
+- fn->ofs = je32_to_cpu(ri->offset);
+- fn->size = je32_to_cpu(ri->dsize);
++ fn->ofs = ri->offset;
++ fn->size = ri->dsize;
+ fn->frags = 0;
+ fn->raw = raw;
+
+- /* check number of valid vecs */
+- if (!datalen || !data)
+- cnt = 1;
+-
+- ret = jffs2_flash_writev(c, vecs, cnt, flash_ofs, &retlen);
+-
++ ret = mtd_writev(c->mtd, vecs, 2, flash_ofs, &retlen);
+ if (ret || (retlen != sizeof(*ri) + datalen)) {
+ printk(KERN_NOTICE "Write of %d bytes at 0x%08x failed. returned %d, retlen %d\n",
+ sizeof(*ri)+datalen, flash_ofs, ret, retlen);
+@@ -145,8 +228,7 @@
+ seem corrupted, in which case the scan would skip over
+ any node we write before the original intended end of
+ this node */
+- raw->flash_offset |= REF_OBSOLETE;
+- jffs2_add_physical_node_ref(c, raw);
++ jffs2_add_physical_node_ref(c, raw, sizeof(*ri)+datalen, 1);
+ jffs2_mark_node_obsolete(c, raw);
+ } else {
+ printk(KERN_NOTICE "Not marking the space at 0x%08x as dirty because the flash driver returned retlen zero\n", raw->flash_offset);
+@@ -160,20 +242,13 @@
+ return ERR_PTR(ret?ret:-EIO);
+ }
+ /* Mark the space used */
+- if (datalen == PAGE_CACHE_SIZE)
+- raw->flash_offset |= REF_PRISTINE;
+- else
+- raw->flash_offset |= REF_NORMAL;
+- jffs2_add_physical_node_ref(c, raw);
++ jffs2_add_physical_node_ref(c, raw, retlen, 0);
+
+ /* Link into per-inode list */
+ raw->next_in_ino = f->inocache->nodes;
+ f->inocache->nodes = raw;
+
+- D1(printk(KERN_DEBUG "jffs2_write_dnode wrote node at 0x%08x with dsize 0x%x, csize 0x%x, node_crc 0x%08x, data_crc 0x%08x, totlen 0x%08x\n",
+- flash_ofs, je32_to_cpu(ri->dsize), je32_to_cpu(ri->csize),
+- je32_to_cpu(ri->node_crc), je32_to_cpu(ri->data_crc),
+- je32_to_cpu(ri->totlen)));
++ D1(printk(KERN_DEBUG "jffs2_write_dnode wrote node at 0x%08x with dsize 0x%x, csize 0x%x, node_crc 0x%08x, data_crc 0x%08x, totlen 0x%08x\n", flash_ofs, ri->dsize, ri->csize, ri->node_crc, ri->data_crc, ri->totlen));
+ if (writelen)
+ *writelen = retlen;
+
+@@ -181,20 +256,20 @@
+ return fn;
+ }
+
+-struct jffs2_full_dirent *jffs2_write_dirent(struct jffs2_sb_info *c, struct jffs2_inode_info *f, struct jffs2_raw_dirent *rd, const unsigned char *name, uint32_t namelen, uint32_t flash_ofs, uint32_t *writelen)
++struct jffs2_full_dirent *jffs2_write_dirent(struct inode *inode, struct jffs2_raw_dirent *rd, const unsigned char *name, __u32 namelen, __u32 flash_ofs, __u32 *writelen)
+ {
++ struct jffs2_sb_info *c = JFFS2_SB_INFO(inode->i_sb);
++ struct jffs2_inode_info *f = JFFS2_INODE_INFO(inode);
+ struct jffs2_raw_node_ref *raw;
+ struct jffs2_full_dirent *fd;
+- size_t retlen;
++ ssize_t retlen;
+ struct iovec vecs[2];
+ int ret;
+
+- D1(printk(KERN_DEBUG "jffs2_write_dirent(ino #%u, name at *0x%p \"%s\"->ino #%u, name_crc 0x%08x)\n",
+- je32_to_cpu(rd->pino), name, name, je32_to_cpu(rd->ino),
+- je32_to_cpu(rd->name_crc)));
+- writecheck(c, flash_ofs);
++ D1(printk(KERN_DEBUG "jffs2_write_dirent(ino #%u, name at *0x%p \"%s\"->ino #%u, name_crc 0x%08x)\n", rd->pino, name, name, rd->ino, rd->name_crc));
++ writecheck(c->mtd, flash_ofs);
+
+- D1(if(je32_to_cpu(rd->hdr_crc) != crc32(0, rd, sizeof(struct jffs2_unknown_node)-4)) {
++ D1(if(rd->hdr_crc != crc32(0, rd, sizeof(struct jffs2_unknown_node)-4)) {
+ printk(KERN_CRIT "Eep. CRC not correct in jffs2_write_dirent()\n");
+ BUG();
+ }
+@@ -216,32 +291,31 @@
+ return ERR_PTR(-ENOMEM);
+ }
+ raw->flash_offset = flash_ofs;
+- raw->totlen = PAD(sizeof(*rd)+namelen);
++ raw->totlen = PAD(rd->totlen);
+ raw->next_in_ino = f->inocache->nodes;
+ f->inocache->nodes = raw;
+ raw->next_phys = NULL;
+
+- fd->version = je32_to_cpu(rd->version);
+- fd->ino = je32_to_cpu(rd->ino);
++ fd->version = rd->version;
++ fd->ino = rd->ino;
+ fd->nhash = full_name_hash(name, strlen(name));
+ fd->type = rd->type;
+ memcpy(fd->name, name, namelen);
+ fd->name[namelen]=0;
+ fd->raw = raw;
+
+- ret = jffs2_flash_writev(c, vecs, 2, flash_ofs, &retlen);
+- if (ret || (retlen != sizeof(*rd) + namelen)) {
+- printk(KERN_NOTICE "Write of %d bytes at 0x%08x failed. returned %d, retlen %d\n",
++ ret = mtd_writev(c->mtd, vecs, 2, flash_ofs, &retlen);
++ if (ret || (retlen != sizeof(*rd) + namelen)) {
++ printk(KERN_NOTICE "Write of %d bytes at 0x%08x failed. returned %d, retlen %d\n",
+ sizeof(*rd)+namelen, flash_ofs, ret, retlen);
+ /* Mark the space as dirtied */
+- if (retlen) {
+- raw->flash_offset |= REF_OBSOLETE;
+- jffs2_add_physical_node_ref(c, raw);
+- jffs2_mark_node_obsolete(c, raw);
+- } else {
+- printk(KERN_NOTICE "Not marking the space at 0x%08x as dirty because the flash driver returned retlen zero\n", raw->flash_offset);
+- jffs2_free_raw_node_ref(raw);
+- }
++ if (retlen) {
++ jffs2_add_physical_node_ref(c, raw, sizeof(*rd)+namelen, 1);
++ jffs2_mark_node_obsolete(c, raw);
++ } else {
++ printk(KERN_NOTICE "Not marking the space at 0x%08x as dirty because the flash driver returned retlen zero\n", raw->flash_offset);
++ jffs2_free_raw_node_ref(raw);
++ }
+
+ /* Release the full_dnode which is now useless, and return */
+ jffs2_free_full_dirent(fd);
+@@ -250,359 +324,10 @@
+ return ERR_PTR(ret?ret:-EIO);
+ }
+ /* Mark the space used */
+- raw->flash_offset |= REF_PRISTINE;
+- jffs2_add_physical_node_ref(c, raw);
++ jffs2_add_physical_node_ref(c, raw, retlen, 0);
+ if (writelen)
+ *writelen = retlen;
+
+ f->inocache->nodes = raw;
+ return fd;
+ }
+-
+-/* The OS-specific code fills in the metadata in the jffs2_raw_inode for us, so that
+- we don't have to go digging in struct inode or its equivalent. It should set:
+- mode, uid, gid, (starting)isize, atime, ctime, mtime */
+-int jffs2_write_inode_range(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
+- struct jffs2_raw_inode *ri, unsigned char *buf,
+- uint32_t offset, uint32_t writelen, uint32_t *retlen)
+-{
+- int ret = 0;
+- uint32_t writtenlen = 0;
+-
+- D1(printk(KERN_DEBUG "jffs2_write_inode_range(): Ino #%u, ofs 0x%x, len 0x%x\n",
+- f->inocache->ino, offset, writelen));
+-
+- while(writelen) {
+- struct jffs2_full_dnode *fn;
+- unsigned char *comprbuf = NULL;
+- unsigned char comprtype = JFFS2_COMPR_NONE;
+- uint32_t phys_ofs, alloclen;
+- uint32_t datalen, cdatalen;
+-
+- D2(printk(KERN_DEBUG "jffs2_commit_write() loop: 0x%x to write to 0x%x\n", writelen, offset));
+-
+- ret = jffs2_reserve_space(c, sizeof(*ri) + JFFS2_MIN_DATA_LEN, &phys_ofs, &alloclen, ALLOC_NORMAL);
+- if (ret) {
+- D1(printk(KERN_DEBUG "jffs2_reserve_space returned %d\n", ret));
+- break;
+- }
+- down(&f->sem);
+- datalen = writelen;
+- cdatalen = min(alloclen - sizeof(*ri), writelen);
+-
+- comprbuf = kmalloc(cdatalen, GFP_KERNEL);
+- if (comprbuf) {
+- comprtype = jffs2_compress(buf, comprbuf, &datalen, &cdatalen);
+- }
+- if (comprtype == JFFS2_COMPR_NONE) {
+- /* Either compression failed, or the allocation of comprbuf failed */
+- if (comprbuf)
+- kfree(comprbuf);
+- comprbuf = buf;
+- datalen = cdatalen;
+- }
+- /* Now comprbuf points to the data to be written, be it compressed or not.
+- comprtype holds the compression type, and comprtype == JFFS2_COMPR_NONE means
+- that the comprbuf doesn't need to be kfree()d.
+- */
+-
+- ri->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+- ri->nodetype = cpu_to_je16(JFFS2_NODETYPE_INODE);
+- ri->totlen = cpu_to_je32(sizeof(*ri) + cdatalen);
+- ri->hdr_crc = cpu_to_je32(crc32(0, ri, sizeof(struct jffs2_unknown_node)-4));
+-
+- ri->ino = cpu_to_je32(f->inocache->ino);
+- ri->version = cpu_to_je32(++f->highest_version);
+- ri->isize = cpu_to_je32(max(je32_to_cpu(ri->isize), offset + datalen));
+- ri->offset = cpu_to_je32(offset);
+- ri->csize = cpu_to_je32(cdatalen);
+- ri->dsize = cpu_to_je32(datalen);
+- ri->compr = comprtype;
+- ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
+- ri->data_crc = cpu_to_je32(crc32(0, comprbuf, cdatalen));
+-
+- fn = jffs2_write_dnode(c, f, ri, comprbuf, cdatalen, phys_ofs, NULL);
+-
+- if (comprtype != JFFS2_COMPR_NONE)
+- kfree(comprbuf);
+-
+- if (IS_ERR(fn)) {
+- ret = PTR_ERR(fn);
+- up(&f->sem);
+- jffs2_complete_reservation(c);
+- break;
+- }
+- ret = jffs2_add_full_dnode_to_inode(c, f, fn);
+- if (f->metadata) {
+- jffs2_mark_node_obsolete(c, f->metadata->raw);
+- jffs2_free_full_dnode(f->metadata);
+- f->metadata = NULL;
+- }
+- if (ret) {
+- /* Eep */
+- D1(printk(KERN_DEBUG "Eep. add_full_dnode_to_inode() failed in commit_write, returned %d\n", ret));
+- jffs2_mark_node_obsolete(c, fn->raw);
+- jffs2_free_full_dnode(fn);
+-
+- up(&f->sem);
+- jffs2_complete_reservation(c);
+- break;
+- }
+- up(&f->sem);
+- jffs2_complete_reservation(c);
+- if (!datalen) {
+- printk(KERN_WARNING "Eep. We didn't actually write any data in jffs2_write_inode_range()\n");
+- ret = -EIO;
+- break;
+- }
+- D1(printk(KERN_DEBUG "increasing writtenlen by %d\n", datalen));
+- writtenlen += datalen;
+- offset += datalen;
+- writelen -= datalen;
+- buf += datalen;
+- }
+- *retlen = writtenlen;
+- return ret;
+-}
+-
+-int jffs2_do_create(struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, struct jffs2_inode_info *f, struct jffs2_raw_inode *ri, const char *name, int namelen)
+-{
+- struct jffs2_raw_dirent *rd;
+- struct jffs2_full_dnode *fn;
+- struct jffs2_full_dirent *fd;
+- uint32_t alloclen, phys_ofs;
+- uint32_t writtenlen;
+- int ret;
+-
+- /* Try to reserve enough space for both node and dirent.
+- * Just the node will do for now, though
+- */
+- ret = jffs2_reserve_space(c, sizeof(*ri), &phys_ofs, &alloclen, ALLOC_NORMAL);
+- D1(printk(KERN_DEBUG "jffs2_do_create(): reserved 0x%x bytes\n", alloclen));
+- if (ret) {
+- up(&f->sem);
+- return ret;
+- }
+-
+- ri->data_crc = cpu_to_je32(0);
+- ri->node_crc = cpu_to_je32(crc32(0, ri, sizeof(*ri)-8));
+-
+- fn = jffs2_write_dnode(c, f, ri, NULL, 0, phys_ofs, &writtenlen);
+-
+- D1(printk(KERN_DEBUG "jffs2_do_create created file with mode 0x%x\n",
+- je32_to_cpu(ri->mode)));
+-
+- if (IS_ERR(fn)) {
+- D1(printk(KERN_DEBUG "jffs2_write_dnode() failed\n"));
+- /* Eeek. Wave bye bye */
+- up(&f->sem);
+- jffs2_complete_reservation(c);
+- return PTR_ERR(fn);
+- }
+- /* No data here. Only a metadata node, which will be
+- obsoleted by the first data write
+- */
+- f->metadata = fn;
+-
+- /* Work out where to put the dirent node now. */
+- writtenlen = PAD(writtenlen);
+- phys_ofs += writtenlen;
+- alloclen -= writtenlen;
+- up(&f->sem);
+-
+- if (alloclen < sizeof(*rd)+namelen) {
+- /* Not enough space left in this chunk. Get some more */
+- jffs2_complete_reservation(c);
+- ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &phys_ofs, &alloclen, ALLOC_NORMAL);
+-
+- if (ret) {
+- /* Eep. */
+- D1(printk(KERN_DEBUG "jffs2_reserve_space() for dirent failed\n"));
+- return ret;
+- }
+- }
+-
+- rd = jffs2_alloc_raw_dirent();
+- if (!rd) {
+- /* Argh. Now we treat it like a normal delete */
+- jffs2_complete_reservation(c);
+- return -ENOMEM;
+- }
+-
+- down(&dir_f->sem);
+-
+- rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+- rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
+- rd->totlen = cpu_to_je32(sizeof(*rd) + namelen);
+- rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4));
+-
+- rd->pino = cpu_to_je32(dir_f->inocache->ino);
+- rd->version = cpu_to_je32(++dir_f->highest_version);
+- rd->ino = ri->ino;
+- rd->mctime = ri->ctime;
+- rd->nsize = namelen;
+- rd->type = DT_REG;
+- rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8));
+- rd->name_crc = cpu_to_je32(crc32(0, name, namelen));
+-
+- fd = jffs2_write_dirent(c, dir_f, rd, name, namelen, phys_ofs, &writtenlen);
+-
+- jffs2_free_raw_dirent(rd);
+-
+- if (IS_ERR(fd)) {
+- /* dirent failed to write. Delete the inode normally
+- as if it were the final unlink() */
+- jffs2_complete_reservation(c);
+- up(&dir_f->sem);
+- return PTR_ERR(fd);
+- }
+-
+- /* Link the fd into the inode's list, obsoleting an old
+- one if necessary. */
+- jffs2_add_fd_to_list(c, fd, &dir_f->dents);
+-
+- jffs2_complete_reservation(c);
+- up(&dir_f->sem);
+-
+- return 0;
+-}
+-
+-
+-int jffs2_do_unlink(struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f,
+- const char *name, int namelen, struct jffs2_inode_info *dead_f)
+-{
+- struct jffs2_raw_dirent *rd;
+- struct jffs2_full_dirent *fd;
+- uint32_t alloclen, phys_ofs;
+- int ret;
+-
+- rd = jffs2_alloc_raw_dirent();
+- if (!rd)
+- return -ENOMEM;
+-
+- ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &phys_ofs, &alloclen, ALLOC_DELETION);
+- if (ret) {
+- jffs2_free_raw_dirent(rd);
+- return ret;
+- }
+-
+- down(&dir_f->sem);
+-
+- /* Build a deletion node */
+- rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+- rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
+- rd->totlen = cpu_to_je32(sizeof(*rd) + namelen);
+- rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4));
+-
+- rd->pino = cpu_to_je32(dir_f->inocache->ino);
+- rd->version = cpu_to_je32(++dir_f->highest_version);
+- rd->ino = cpu_to_je32(0);
+- rd->mctime = cpu_to_je32(CURRENT_TIME);
+- rd->nsize = namelen;
+- rd->type = DT_UNKNOWN;
+- rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8));
+- rd->name_crc = cpu_to_je32(crc32(0, name, namelen));
+-
+- fd = jffs2_write_dirent(c, dir_f, rd, name, namelen, phys_ofs, NULL);
+-
+- jffs2_free_raw_dirent(rd);
+-
+- if (IS_ERR(fd)) {
+- jffs2_complete_reservation(c);
+- up(&dir_f->sem);
+- return PTR_ERR(fd);
+- }
+-
+- /* File it. This will mark the old one obsolete. */
+- jffs2_add_fd_to_list(c, fd, &dir_f->dents);
+-
+- up(&dir_f->sem);
+-
+- /* dead_f is NULL if this was a rename not a real unlink */
+- /* Also catch the !f->inocache case, where there was a dirent
+- pointing to an inode which didn't exist. */
+- if (dead_f && dead_f->inocache) {
+-
+- down(&dead_f->sem);
+-
+- while (dead_f->dents) {
+- /* There can be only deleted ones */
+- fd = dead_f->dents;
+-
+- dead_f->dents = fd->next;
+-
+- if (fd->ino) {
+- printk(KERN_WARNING "Deleting inode #%u with active dentry \"%s\"->ino #%u\n",
+- dead_f->inocache->ino, fd->name, fd->ino);
+- } else {
+- D1(printk(KERN_DEBUG "Removing deletion dirent for \"%s\" from dir ino #%u\n", fd->name, dead_f->inocache->ino));
+- }
+- jffs2_mark_node_obsolete(c, fd->raw);
+- jffs2_free_full_dirent(fd);
+- }
+-
+- dead_f->inocache->nlink--;
+- /* NB: Caller must set inode nlink if appropriate */
+- up(&dead_f->sem);
+- }
+-
+- jffs2_complete_reservation(c);
+-
+- return 0;
+-}
+-
+-
+-int jffs2_do_link (struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, uint32_t ino, uint8_t type, const char *name, int namelen)
+-{
+- struct jffs2_raw_dirent *rd;
+- struct jffs2_full_dirent *fd;
+- uint32_t alloclen, phys_ofs;
+- int ret;
+-
+- rd = jffs2_alloc_raw_dirent();
+- if (!rd)
+- return -ENOMEM;
+-
+- ret = jffs2_reserve_space(c, sizeof(*rd)+namelen, &phys_ofs, &alloclen, ALLOC_NORMAL);
+- if (ret) {
+- jffs2_free_raw_dirent(rd);
+- return ret;
+- }
+-
+- down(&dir_f->sem);
+-
+- /* Build a deletion node */
+- rd->magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+- rd->nodetype = cpu_to_je16(JFFS2_NODETYPE_DIRENT);
+- rd->totlen = cpu_to_je32(sizeof(*rd) + namelen);
+- rd->hdr_crc = cpu_to_je32(crc32(0, rd, sizeof(struct jffs2_unknown_node)-4));
+-
+- rd->pino = cpu_to_je32(dir_f->inocache->ino);
+- rd->version = cpu_to_je32(++dir_f->highest_version);
+- rd->ino = cpu_to_je32(ino);
+- rd->mctime = cpu_to_je32(CURRENT_TIME);
+- rd->nsize = namelen;
+-
+- rd->type = type;
+-
+- rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8));
+- rd->name_crc = cpu_to_je32(crc32(0, name, namelen));
+-
+- fd = jffs2_write_dirent(c, dir_f, rd, name, namelen, phys_ofs, NULL);
+-
+- jffs2_free_raw_dirent(rd);
+-
+- if (IS_ERR(fd)) {
+- jffs2_complete_reservation(c);
+- up(&dir_f->sem);
+- return PTR_ERR(fd);
+- }
+-
+- /* File it. This will mark the old one obsolete. */
+- jffs2_add_fd_to_list(c, fd, &dir_f->dents);
+-
+- jffs2_complete_reservation(c);
+- up(&dir_f->sem);
+-
+- return 0;
+-}
+diff -Nur linux/fs/jffs2/writev.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/writev.c
+--- linux/fs/jffs2/writev.c 2003-05-13 16:19:14.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/writev.c 1970-01-01 07:00:00.000000000 +0700
+@@ -1,50 +0,0 @@
+-/*
+- * JFFS2 -- Journalling Flash File System, Version 2.
+- *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
+- *
+- * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+- *
+- * For licensing information, see the file 'LICENCE' in this directory.
+- *
+- * $Id: writev.c,v 1.3 2002/08/08 08:35:21 dwmw2 Exp $
+- *
+- */
+-
+-#include <linux/kernel.h>
+-#include <linux/mtd/mtd.h>
+-#include "nodelist.h"
+-
+-/* This ought to be in core MTD code. All registered MTD devices
+- without writev should have this put in place. Bug the MTD
+- maintainer */
+-static inline int mtd_fake_writev(struct mtd_info *mtd, const struct iovec *vecs,
+- unsigned long count, loff_t to, size_t *retlen)
+-{
+- unsigned long i;
+- size_t totlen = 0, thislen;
+- int ret = 0;
+-
+- for (i=0; i<count; i++) {
+- if (!vecs[i].iov_len)
+- continue;
+- ret = mtd->write(mtd, to, vecs[i].iov_len, &thislen, vecs[i].iov_base);
+- totlen += thislen;
+- if (ret || thislen != vecs[i].iov_len)
+- break;
+- to += vecs[i].iov_len;
+- }
+- if (retlen)
+- *retlen = totlen;
+- return ret;
+-}
+-
+-int jffs2_flash_direct_writev(struct jffs2_sb_info *c, const struct iovec *vecs,
+- unsigned long count, loff_t to, size_t *retlen)
+-{
+- if (c->mtd->writev)
+- return c->mtd->writev(c->mtd, vecs, count, to, retlen);
+- else
+- return mtd_fake_writev(c->mtd, vecs, count, to, retlen);
+-}
+-
+diff -Nur linux/fs/jffs2/zlib.c /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/zlib.c
+--- linux/fs/jffs2/zlib.c 1970-01-01 07:00:00.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/zlib.c 2003-06-23 01:47:04.000000000 +0700
+@@ -0,0 +1,5382 @@
++/*
++ * This file is derived from various .h and .c files from the zlib-1.0.4
++ * distribution by Jean-loup Gailly and Mark Adler, with some additions
++ * by Paul Mackerras to aid in implementing Deflate compression and
++ * decompression for PPP packets. See zlib.h for conditions of
++ * distribution and use.
++ *
++ * Changes that have been made include:
++ * - added Z_PACKET_FLUSH (see zlib.h for details)
++ * - added inflateIncomp and deflateOutputPending
++ * - allow strm->next_out to be NULL, meaning discard the output
++ *
++ * $Id: zlib.c,v 1.3 1997/12/23 10:47:42 paulus Exp $
++ */
++
++#include <linux/config.h>
++
++#ifndef CONFIG_PPP_DEFLATE
++
++/*
++ * ==FILEVERSION 20020318==
++ *
++ * This marker is used by the Linux installation script to determine
++ * whether an up-to-date version of this file is already installed.
++ */
++
++#define NO_DUMMY_DECL
++#define NO_ZCFUNCS
++#define MY_ZCALLOC
++
++#if defined(__FreeBSD__) && (defined(KERNEL) || defined(_KERNEL))
++#define inflate inflate_ppp /* FreeBSD already has an inflate :-( */
++#endif
++
++
++/* +++ zutil.h */
++/* zutil.h -- internal interface and configuration of the compression library
++ * Copyright (C) 1995-1996 Jean-loup Gailly.
++ * For conditions of distribution and use, see copyright notice in zlib.h
++ */
++
++/* WARNING: this file should *not* be used by applications. It is
++ part of the implementation of the compression library and is
++ subject to change. Applications should only use zlib.h.
++ */
++
++/* From: zutil.h,v 1.16 1996/07/24 13:41:13 me Exp $ */
++
++#ifndef _Z_UTIL_H
++#define _Z_UTIL_H
++
++#include "zlib.h"
++
++#if defined(KERNEL) || defined(_KERNEL)
++/* Assume this is a *BSD or SVR4 kernel */
++#include <sys/types.h>
++#include <sys/time.h>
++#include <sys/systm.h>
++# define HAVE_MEMCPY
++# define memcpy(d, s, n) bcopy((s), (d), (n))
++# define memset(d, v, n) bzero((d), (n))
++# define memcmp bcmp
++
++#else
++#if defined(__KERNEL__)
++/* Assume this is a Linux kernel */
++#include <linux/string.h>
++#define HAVE_MEMCPY
++
++#else /* not kernel */
++
++#if defined(MSDOS)||defined(VMS)||defined(CRAY)||defined(WIN32)||defined(RISCOS)
++# include <stddef.h>
++# include <errno.h>
++#else
++ extern int errno;
++#endif
++#ifdef STDC
++# include <string.h>
++# include <stdlib.h>
++#endif
++#endif /* __KERNEL__ */
++#endif /* _KERNEL || KERNEL */
++
++#ifndef local
++# define local static
++#endif
++/* compile with -Dlocal if your debugger can't find static symbols */
++
++typedef unsigned char uch;
++typedef uch FAR uchf;
++typedef unsigned short ush;
++typedef ush FAR ushf;
++typedef unsigned long ulg;
++
++extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */
++/* (size given to avoid silly warnings with Visual C++) */
++
++#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
++
++#define ERR_RETURN(strm,err) \
++ return (strm->msg = (char*)ERR_MSG(err), (err))
++/* To be used only when the state is known to be valid */
++
++ /* common constants */
++
++#ifndef DEF_WBITS
++# define DEF_WBITS MAX_WBITS
++#endif
++/* default windowBits for decompression. MAX_WBITS is for compression only */
++
++#if MAX_MEM_LEVEL >= 8
++# define DEF_MEM_LEVEL 8
++#else
++# define DEF_MEM_LEVEL MAX_MEM_LEVEL
++#endif
++/* default memLevel */
++
++#define STORED_BLOCK 0
++#define STATIC_TREES 1
++#define DYN_TREES 2
++/* The three kinds of block type */
++
++#define MIN_MATCH 3
++#define MAX_MATCH 258
++/* The minimum and maximum match lengths */
++
++#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */
++
++ /* target dependencies */
++
++#ifdef MSDOS
++# define OS_CODE 0x00
++# ifdef __TURBOC__
++# include <alloc.h>
++# else /* MSC or DJGPP */
++# include <malloc.h>
++# endif
++#endif
++
++#ifdef OS2
++# define OS_CODE 0x06
++#endif
++
++#ifdef WIN32 /* Window 95 & Windows NT */
++# define OS_CODE 0x0b
++#endif
++
++#if defined(VAXC) || defined(VMS)
++# define OS_CODE 0x02
++# define FOPEN(name, mode) \
++ fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512")
++#endif
++
++#ifdef AMIGA
++# define OS_CODE 0x01
++#endif
++
++#if defined(ATARI) || defined(atarist)
++# define OS_CODE 0x05
++#endif
++
++#ifdef MACOS
++# define OS_CODE 0x07
++#endif
++
++#ifdef __50SERIES /* Prime/PRIMOS */
++# define OS_CODE 0x0F
++#endif
++
++#ifdef TOPS20
++# define OS_CODE 0x0a
++#endif
++
++#if defined(_BEOS_) || defined(RISCOS)
++# define fdopen(fd,mode) NULL /* No fdopen() */
++#endif
++
++ /* Common defaults */
++
++#ifndef OS_CODE
++# define OS_CODE 0x03 /* assume Unix */
++#endif
++
++#ifndef FOPEN
++# define FOPEN(name, mode) fopen((name), (mode))
++#endif
++
++ /* functions */
++
++#ifdef HAVE_STRERROR
++ extern char *strerror OF((int));
++# define zstrerror(errnum) strerror(errnum)
++#else
++# define zstrerror(errnum) ""
++#endif
++
++#if defined(pyr)
++# define NO_MEMCPY
++#endif
++#if (defined(M_I86SM) || defined(M_I86MM)) && !defined(_MSC_VER)
++ /* Use our own functions for small and medium model with MSC <= 5.0.
++ * You may have to use the same strategy for Borland C (untested).
++ */
++# define NO_MEMCPY
++#endif
++#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY)
++# define HAVE_MEMCPY
++#endif
++#ifdef HAVE_MEMCPY
++# ifdef SMALL_MEDIUM /* MSDOS small or medium model */
++# define zmemcpy _fmemcpy
++# define zmemcmp _fmemcmp
++# define zmemzero(dest, len) _fmemset(dest, 0, len)
++# else
++# define zmemcpy memcpy
++# define zmemcmp memcmp
++# define zmemzero(dest, len) memset(dest, 0, len)
++# endif
++#else
++ extern void zmemcpy OF((Bytef* dest, Bytef* source, uInt len));
++ extern int zmemcmp OF((Bytef* s1, Bytef* s2, uInt len));
++ extern void zmemzero OF((Bytef* dest, uInt len));
++#endif
++
++/* Diagnostic functions */
++#ifdef DEBUG_ZLIB
++# include <stdio.h>
++# ifndef verbose
++# define verbose 0
++# endif
++ extern void z_error OF((char *m));
++# define Assert(cond,msg) {if(!(cond)) z_error(msg);}
++# define Trace(x) fprintf x
++# define Tracev(x) {if (verbose) fprintf x ;}
++# define Tracevv(x) {if (verbose>1) fprintf x ;}
++# define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
++# define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
++#else
++# define Assert(cond,msg)
++# define Trace(x)
++# define Tracev(x)
++# define Tracevv(x)
++# define Tracec(c,x)
++# define Tracecv(c,x)
++#endif
++
++
++typedef uLong (*check_func) OF((uLong check, const Bytef *buf, uInt len));
++
++voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size));
++void zcfree OF((voidpf opaque, voidpf ptr));
++
++#define ZALLOC(strm, items, size) \
++ (*((strm)->zalloc))((strm)->opaque, (items), (size))
++#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
++#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
++
++#endif /* _Z_UTIL_H */
++/* --- zutil.h */
++
++/* +++ deflate.h */
++/* deflate.h -- internal compression state
++ * Copyright (C) 1995-1996 Jean-loup Gailly
++ * For conditions of distribution and use, see copyright notice in zlib.h
++ */
++
++/* WARNING: this file should *not* be used by applications. It is
++ part of the implementation of the compression library and is
++ subject to change. Applications should only use zlib.h.
++ */
++
++/* From: deflate.h,v 1.10 1996/07/02 12:41:00 me Exp $ */
++
++#ifndef _DEFLATE_H
++#define _DEFLATE_H
++
++/* #include "zutil.h" */
++
++/* ===========================================================================
++ * Internal compression state.
++ */
++
++#define LENGTH_CODES 29
++/* number of length codes, not counting the special END_BLOCK code */
++
++#define LITERALS 256
++/* number of literal bytes 0..255 */
++
++#define L_CODES (LITERALS+1+LENGTH_CODES)
++/* number of Literal or Length codes, including the END_BLOCK code */
++
++#define D_CODES 30
++/* number of distance codes */
++
++#define BL_CODES 19
++/* number of codes used to transfer the bit lengths */
++
++#define HEAP_SIZE (2*L_CODES+1)
++/* maximum heap size */
++
++#define MAX_BITS 15
++/* All codes must not exceed MAX_BITS bits */
++
++#define INIT_STATE 42
++#define BUSY_STATE 113
++#define FINISH_STATE 666
++/* Stream status */
++
++
++/* Data structure describing a single value and its code string. */
++typedef struct ct_data_s {
++ union {
++ ush freq; /* frequency count */
++ ush code; /* bit string */
++ } fc;
++ union {
++ ush dad; /* father node in Huffman tree */
++ ush len; /* length of bit string */
++ } dl;
++} FAR ct_data;
++
++#define Freq fc.freq
++#define Code fc.code
++#define Dad dl.dad
++#define Len dl.len
++
++typedef struct static_tree_desc_s static_tree_desc;
++
++typedef struct tree_desc_s {
++ ct_data *dyn_tree; /* the dynamic tree */
++ int max_code; /* largest code with non zero frequency */
++ static_tree_desc *stat_desc; /* the corresponding static tree */
++} FAR tree_desc;
++
++typedef ush Pos;
++typedef Pos FAR Posf;
++typedef unsigned IPos;
++
++/* A Pos is an index in the character window. We use short instead of int to
++ * save space in the various tables. IPos is used only for parameter passing.
++ */
++
++typedef struct deflate_state {
++ z_streamp strm; /* pointer back to this zlib stream */
++ int status; /* as the name implies */
++ Bytef *pending_buf; /* output still pending */
++ ulg pending_buf_size; /* size of pending_buf */
++ Bytef *pending_out; /* next pending byte to output to the stream */
++ int pending; /* nb of bytes in the pending buffer */
++ int noheader; /* suppress zlib header and adler32 */
++ Byte data_type; /* UNKNOWN, BINARY or ASCII */
++ Byte method; /* STORED (for zip only) or DEFLATED */
++ int last_flush; /* value of flush param for previous deflate call */
++
++ /* used by deflate.c: */
++
++ uInt w_size; /* LZ77 window size (32K by default) */
++ uInt w_bits; /* log2(w_size) (8..16) */
++ uInt w_mask; /* w_size - 1 */
++
++ Bytef *window;
++ /* Sliding window. Input bytes are read into the second half of the window,
++ * and move to the first half later to keep a dictionary of at least wSize
++ * bytes. With this organization, matches are limited to a distance of
++ * wSize-MAX_MATCH bytes, but this ensures that IO is always
++ * performed with a length multiple of the block size. Also, it limits
++ * the window size to 64K, which is quite useful on MSDOS.
++ * To do: use the user input buffer as sliding window.
++ */
++
++ ulg window_size;
++ /* Actual size of window: 2*wSize, except when the user input buffer
++ * is directly used as sliding window.
++ */
++
++ Posf *prev;
++ /* Link to older string with same hash index. To limit the size of this
++ * array to 64K, this link is maintained only for the last 32K strings.
++ * An index in this array is thus a window index modulo 32K.
++ */
++
++ Posf *head; /* Heads of the hash chains or NIL. */
++
++ uInt ins_h; /* hash index of string to be inserted */
++ uInt hash_size; /* number of elements in hash table */
++ uInt hash_bits; /* log2(hash_size) */
++ uInt hash_mask; /* hash_size-1 */
++
++ uInt hash_shift;
++ /* Number of bits by which ins_h must be shifted at each input
++ * step. It must be such that after MIN_MATCH steps, the oldest
++ * byte no longer takes part in the hash key, that is:
++ * hash_shift * MIN_MATCH >= hash_bits
++ */
++
++ long block_start;
++ /* Window position at the beginning of the current output block. Gets
++ * negative when the window is moved backwards.
++ */
++
++ uInt match_length; /* length of best match */
++ IPos prev_match; /* previous match */
++ int match_available; /* set if previous match exists */
++ uInt strstart; /* start of string to insert */
++ uInt match_start; /* start of matching string */
++ uInt lookahead; /* number of valid bytes ahead in window */
++
++ uInt prev_length;
++ /* Length of the best match at previous step. Matches not greater than this
++ * are discarded. This is used in the lazy match evaluation.
++ */
++
++ uInt max_chain_length;
++ /* To speed up deflation, hash chains are never searched beyond this
++ * length. A higher limit improves compression ratio but degrades the
++ * speed.
++ */
++
++ uInt max_lazy_match;
++ /* Attempt to find a better match only when the current match is strictly
++ * smaller than this value. This mechanism is used only for compression
++ * levels >= 4.
++ */
++# define max_insert_length max_lazy_match
++ /* Insert new strings in the hash table only if the match length is not
++ * greater than this length. This saves time but degrades compression.
++ * max_insert_length is used only for compression levels <= 3.
++ */
++
++ int level; /* compression level (1..9) */
++ int strategy; /* favor or force Huffman coding*/
++
++ uInt good_match;
++ /* Use a faster search when the previous match is longer than this */
++
++ int nice_match; /* Stop searching when current match exceeds this */
++
++ /* used by trees.c: */
++ /* Didn't use ct_data typedef below to supress compiler warning */
++ struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
++ struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
++ struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
++
++ struct tree_desc_s l_desc; /* desc. for literal tree */
++ struct tree_desc_s d_desc; /* desc. for distance tree */
++ struct tree_desc_s bl_desc; /* desc. for bit length tree */
++
++ ush bl_count[MAX_BITS+1];
++ /* number of codes at each bit length for an optimal tree */
++
++ int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */
++ int heap_len; /* number of elements in the heap */
++ int heap_max; /* element of largest frequency */
++ /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
++ * The same heap array is used to build all trees.
++ */
++
++ uch depth[2*L_CODES+1];
++ /* Depth of each subtree used as tie breaker for trees of equal frequency
++ */
++
++ uchf *l_buf; /* buffer for literals or lengths */
++
++ uInt lit_bufsize;
++ /* Size of match buffer for literals/lengths. There are 4 reasons for
++ * limiting lit_bufsize to 64K:
++ * - frequencies can be kept in 16 bit counters
++ * - if compression is not successful for the first block, all input
++ * data is still in the window so we can still emit a stored block even
++ * when input comes from standard input. (This can also be done for
++ * all blocks if lit_bufsize is not greater than 32K.)
++ * - if compression is not successful for a file smaller than 64K, we can
++ * even emit a stored file instead of a stored block (saving 5 bytes).
++ * This is applicable only for zip (not gzip or zlib).
++ * - creating new Huffman trees less frequently may not provide fast
++ * adaptation to changes in the input data statistics. (Take for
++ * example a binary file with poorly compressible code followed by
++ * a highly compressible string table.) Smaller buffer sizes give
++ * fast adaptation but have of course the overhead of transmitting
++ * trees more frequently.
++ * - I can't count above 4
++ */
++
++ uInt last_lit; /* running index in l_buf */
++
++ ushf *d_buf;
++ /* Buffer for distances. To simplify the code, d_buf and l_buf have
++ * the same number of elements. To use different lengths, an extra flag
++ * array would be necessary.
++ */
++
++ ulg opt_len; /* bit length of current block with optimal trees */
++ ulg static_len; /* bit length of current block with static trees */
++ ulg compressed_len; /* total bit length of compressed file */
++ uInt matches; /* number of string matches in current block */
++ int last_eob_len; /* bit length of EOB code for last block */
++
++#ifdef DEBUG_ZLIB
++ ulg bits_sent; /* bit length of the compressed data */
++#endif
++
++ ush bi_buf;
++ /* Output buffer. bits are inserted starting at the bottom (least
++ * significant bits).
++ */
++ int bi_valid;
++ /* Number of valid bits in bi_buf. All bits above the last valid bit
++ * are always zero.
++ */
++
++} FAR deflate_state;
++
++/* Output a byte on the stream.
++ * IN assertion: there is enough room in pending_buf.
++ */
++#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
++
++
++#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
++/* Minimum amount of lookahead, except at the end of the input file.
++ * See deflate.c for comments about the MIN_MATCH+1.
++ */
++
++#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD)
++/* In order to simplify the code, particularly on 16 bit machines, match
++ * distances are limited to MAX_DIST instead of WSIZE.
++ */
++
++ /* in trees.c */
++void _tr_init OF((deflate_state *s));
++int _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
++ulg _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len,
++ int eof));
++void _tr_align OF((deflate_state *s));
++void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len,
++ int eof));
++void _tr_stored_type_only OF((deflate_state *));
++
++#endif
++/* --- deflate.h */
++
++/* +++ deflate.c */
++/* deflate.c -- compress data using the deflation algorithm
++ * Copyright (C) 1995-1996 Jean-loup Gailly.
++ * For conditions of distribution and use, see copyright notice in zlib.h
++ */
++
++/*
++ * ALGORITHM
++ *
++ * The "deflation" process depends on being able to identify portions
++ * of the input text which are identical to earlier input (within a
++ * sliding window trailing behind the input currently being processed).
++ *
++ * The most straightforward technique turns out to be the fastest for
++ * most input files: try all possible matches and select the longest.
++ * The key feature of this algorithm is that insertions into the string
++ * dictionary are very simple and thus fast, and deletions are avoided
++ * completely. Insertions are performed at each input character, whereas
++ * string matches are performed only when the previous match ends. So it
++ * is preferable to spend more time in matches to allow very fast string
++ * insertions and avoid deletions. The matching algorithm for small
++ * strings is inspired from that of Rabin & Karp. A brute force approach
++ * is used to find longer strings when a small match has been found.
++ * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
++ * (by Leonid Broukhis).
++ * A previous version of this file used a more sophisticated algorithm
++ * (by Fiala and Greene) which is guaranteed to run in linear amortized
++ * time, but has a larger average cost, uses more memory and is patented.
++ * However the F&G algorithm may be faster for some highly redundant
++ * files if the parameter max_chain_length (described below) is too large.
++ *
++ * ACKNOWLEDGEMENTS
++ *
++ * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
++ * I found it in 'freeze' written by Leonid Broukhis.
++ * Thanks to many people for bug reports and testing.
++ *
++ * REFERENCES
++ *
++ * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
++ * Available in ftp://ds.internic.net/rfc/rfc1951.txt
++ *
++ * A description of the Rabin and Karp algorithm is given in the book
++ * "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
++ *
++ * Fiala,E.R., and Greene,D.H.
++ * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
++ *
++ */
++
++/* From: deflate.c,v 1.15 1996/07/24 13:40:58 me Exp $ */
++
++/* #include "deflate.h" */
++
++char deflate_copyright[] = " deflate 1.0.4 Copyright 1995-1996 Jean-loup Gailly ";
++/*
++ If you use the zlib library in a product, an acknowledgment is welcome
++ in the documentation of your product. If for some reason you cannot
++ include such an acknowledgment, I would appreciate that you keep this
++ copyright string in the executable of your product.
++ */
++
++/* ===========================================================================
++ * Function prototypes.
++ */
++typedef enum {
++ need_more, /* block not completed, need more input or more output */
++ block_done, /* block flush performed */
++ finish_started, /* finish started, need only more output at next deflate */
++ finish_done /* finish done, accept no more input or output */
++} block_state;
++
++typedef block_state (*compress_func) OF((deflate_state *s, int flush));
++/* Compression function. Returns the block state after the call. */
++
++local void fill_window OF((deflate_state *s));
++local block_state deflate_stored OF((deflate_state *s, int flush));
++local block_state deflate_fast OF((deflate_state *s, int flush));
++local block_state deflate_slow OF((deflate_state *s, int flush));
++local void lm_init OF((deflate_state *s));
++local void putShortMSB OF((deflate_state *s, uInt b));
++local void flush_pending OF((z_streamp strm));
++local int read_buf OF((z_streamp strm, charf *buf, unsigned size));
++#ifdef ASMV
++ void match_init OF((void)); /* asm code initialization */
++ uInt longest_match OF((deflate_state *s, IPos cur_match));
++#else
++local uInt longest_match OF((deflate_state *s, IPos cur_match));
++#endif
++
++#ifdef DEBUG_ZLIB
++local void check_match OF((deflate_state *s, IPos start, IPos match,
++ int length));
++#endif
++
++/* ===========================================================================
++ * Local data
++ */
++
++#define NIL 0
++/* Tail of hash chains */
++
++#ifndef TOO_FAR
++# define TOO_FAR 4096
++#endif
++/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
++
++#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
++/* Minimum amount of lookahead, except at the end of the input file.
++ * See deflate.c for comments about the MIN_MATCH+1.
++ */
++
++/* Values for max_lazy_match, good_match and max_chain_length, depending on
++ * the desired pack level (0..9). The values given below have been tuned to
++ * exclude worst case performance for pathological files. Better values may be
++ * found for specific files.
++ */
++typedef struct config_s {
++ ush good_length; /* reduce lazy search above this match length */
++ ush max_lazy; /* do not perform lazy search above this match length */
++ ush nice_length; /* quit search above this match length */
++ ush max_chain;
++ compress_func func;
++} config;
++
++local config configuration_table[10] = {
++/* good lazy nice chain */
++/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */
++/* 1 */ {4, 4, 8, 4, deflate_fast}, /* maximum speed, no lazy matches */
++/* 2 */ {4, 5, 16, 8, deflate_fast},
++/* 3 */ {4, 6, 32, 32, deflate_fast},
++
++/* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */
++/* 5 */ {8, 16, 32, 32, deflate_slow},
++/* 6 */ {8, 16, 128, 128, deflate_slow},
++/* 7 */ {8, 32, 128, 256, deflate_slow},
++/* 8 */ {32, 128, 258, 1024, deflate_slow},
++/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* maximum compression */
++
++/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
++ * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
++ * meaning.
++ */
++
++#define EQUAL 0
++/* result of memcmp for equal strings */
++
++#ifndef NO_DUMMY_DECL
++struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
++#endif
++
++/* ===========================================================================
++ * Update a hash value with the given input byte
++ * IN assertion: all calls to to UPDATE_HASH are made with consecutive
++ * input characters, so that a running hash key can be computed from the
++ * previous key instead of complete recalculation each time.
++ */
++#define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
++
++
++/* ===========================================================================
++ * Insert string str in the dictionary and set match_head to the previous head
++ * of the hash chain (the most recent string with same hash key). Return
++ * the previous length of the hash chain.
++ * IN assertion: all calls to to INSERT_STRING are made with consecutive
++ * input characters and the first MIN_MATCH bytes of str are valid
++ * (except for the last MIN_MATCH-1 bytes of the input file).
++ */
++#define INSERT_STRING(s, str, match_head) \
++ (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
++ s->prev[(str) & s->w_mask] = match_head = s->head[s->ins_h], \
++ s->head[s->ins_h] = (Pos)(str))
++
++/* ===========================================================================
++ * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
++ * prev[] will be initialized on the fly.
++ */
++#define CLEAR_HASH(s) \
++ s->head[s->hash_size-1] = NIL; \
++ zmemzero((charf *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
++
++/* ========================================================================= */
++int deflateInit_(strm, level, version, stream_size)
++ z_streamp strm;
++ int level;
++ const char *version;
++ int stream_size;
++{
++ return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
++ Z_DEFAULT_STRATEGY, version, stream_size);
++ /* To do: ignore strm->next_in if we use it as window */
++}
++
++/* ========================================================================= */
++int deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
++ version, stream_size)
++ z_streamp strm;
++ int level;
++ int method;
++ int windowBits;
++ int memLevel;
++ int strategy;
++ const char *version;
++ int stream_size;
++{
++ deflate_state *s;
++ int noheader = 0;
++ static char* my_version = ZLIB_VERSION;
++
++ ushf *overlay;
++ /* We overlay pending_buf and d_buf+l_buf. This works since the average
++ * output size for (length,distance) codes is <= 24 bits.
++ */
++
++ if (version == Z_NULL || version[0] != my_version[0] ||
++ stream_size != sizeof(z_stream)) {
++ return Z_VERSION_ERROR;
++ }
++ if (strm == Z_NULL) return Z_STREAM_ERROR;
++
++ strm->msg = Z_NULL;
++#ifndef NO_ZCFUNCS
++ if (strm->zalloc == Z_NULL) {
++ strm->zalloc = zcalloc;
++ strm->opaque = (voidpf)0;
++ }
++ if (strm->zfree == Z_NULL) strm->zfree = zcfree;
++#endif
++
++ if (level == Z_DEFAULT_COMPRESSION) level = 6;
++
++ if (windowBits < 0) { /* undocumented feature: suppress zlib header */
++ noheader = 1;
++ windowBits = -windowBits;
++ }
++ if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
++ windowBits < 9 || windowBits > 15 || level < 0 || level > 9 ||
++ strategy < 0 || strategy > Z_HUFFMAN_ONLY) {
++ return Z_STREAM_ERROR;
++ }
++ s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
++ if (s == Z_NULL) return Z_MEM_ERROR;
++ strm->state = (struct internal_state FAR *)s;
++ s->strm = strm;
++
++ s->noheader = noheader;
++ s->w_bits = windowBits;
++ s->w_size = 1 << s->w_bits;
++ s->w_mask = s->w_size - 1;
++
++ s->hash_bits = memLevel + 7;
++ s->hash_size = 1 << s->hash_bits;
++ s->hash_mask = s->hash_size - 1;
++ s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
++
++ s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte));
++ s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos));
++ s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos));
++
++ s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
++
++ overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
++ s->pending_buf = (uchf *) overlay;
++ s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
++
++ if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
++ s->pending_buf == Z_NULL) {
++ strm->msg = (char*)ERR_MSG(Z_MEM_ERROR);
++ deflateEnd (strm);
++ return Z_MEM_ERROR;
++ }
++ s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
++ s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
++
++ s->level = level;
++ s->strategy = strategy;
++ s->method = (Byte)method;
++
++ return deflateReset(strm);
++}
++
++/* ========================================================================= */
++int deflateSetDictionary (strm, dictionary, dictLength)
++ z_streamp strm;
++ const Bytef *dictionary;
++ uInt dictLength;
++{
++ deflate_state *s;
++ uInt length = dictLength;
++ uInt n;
++ IPos hash_head = 0;
++
++ if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL)
++ return Z_STREAM_ERROR;
++
++ s = (deflate_state *) strm->state;
++ if (s->status != INIT_STATE) return Z_STREAM_ERROR;
++
++ strm->adler = adler32(strm->adler, dictionary, dictLength);
++
++ if (length < MIN_MATCH) return Z_OK;
++ if (length > MAX_DIST(s)) {
++ length = MAX_DIST(s);
++#ifndef USE_DICT_HEAD
++ dictionary += dictLength - length; /* use the tail of the dictionary */
++#endif
++ }
++ zmemcpy((charf *)s->window, dictionary, length);
++ s->strstart = length;
++ s->block_start = (long)length;
++
++ /* Insert all strings in the hash table (except for the last two bytes).
++ * s->lookahead stays null, so s->ins_h will be recomputed at the next
++ * call of fill_window.
++ */
++ s->ins_h = s->window[0];
++ UPDATE_HASH(s, s->ins_h, s->window[1]);
++ for (n = 0; n <= length - MIN_MATCH; n++) {
++ INSERT_STRING(s, n, hash_head);
++ }
++ if (hash_head) hash_head = 0; /* to make compiler happy */
++ return Z_OK;
++}
++
++/* ========================================================================= */
++int deflateReset (strm)
++ z_streamp strm;
++{
++ deflate_state *s;
++
++ if (strm == Z_NULL || strm->state == Z_NULL ||
++ strm->zalloc == Z_NULL || strm->zfree == Z_NULL) return Z_STREAM_ERROR;
++
++ strm->total_in = strm->total_out = 0;
++ strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
++ strm->data_type = Z_UNKNOWN;
++
++ s = (deflate_state *)strm->state;
++ s->pending = 0;
++ s->pending_out = s->pending_buf;
++
++ if (s->noheader < 0) {
++ s->noheader = 0; /* was set to -1 by deflate(..., Z_FINISH); */
++ }
++ s->status = s->noheader ? BUSY_STATE : INIT_STATE;
++ strm->adler = 1;
++ s->last_flush = Z_NO_FLUSH;
++
++ _tr_init(s);
++ lm_init(s);
++
++ return Z_OK;
++}
++
++/* ========================================================================= */
++int deflateParams(strm, level, strategy)
++ z_streamp strm;
++ int level;
++ int strategy;
++{
++ deflate_state *s;
++ compress_func func;
++ int err = Z_OK;
++
++ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
++ s = (deflate_state *) strm->state;
++
++ if (level == Z_DEFAULT_COMPRESSION) {
++ level = 6;
++ }
++ if (level < 0 || level > 9 || strategy < 0 || strategy > Z_HUFFMAN_ONLY) {
++ return Z_STREAM_ERROR;
++ }
++ func = configuration_table[s->level].func;
++
++ if (func != configuration_table[level].func && strm->total_in != 0) {
++ /* Flush the last buffer: */
++ err = deflate(strm, Z_PARTIAL_FLUSH);
++ }
++ if (s->level != level) {
++ s->level = level;
++ s->max_lazy_match = configuration_table[level].max_lazy;
++ s->good_match = configuration_table[level].good_length;
++ s->nice_match = configuration_table[level].nice_length;
++ s->max_chain_length = configuration_table[level].max_chain;
++ }
++ s->strategy = strategy;
++ return err;
++}
++
++/* =========================================================================
++ * Put a short in the pending buffer. The 16-bit value is put in MSB order.
++ * IN assertion: the stream state is correct and there is enough room in
++ * pending_buf.
++ */
++local void putShortMSB (s, b)
++ deflate_state *s;
++ uInt b;
++{
++ put_byte(s, (Byte)(b >> 8));
++ put_byte(s, (Byte)(b & 0xff));
++}
++
++/* =========================================================================
++ * Flush as much pending output as possible. All deflate() output goes
++ * through this function so some applications may wish to modify it
++ * to avoid allocating a large strm->next_out buffer and copying into it.
++ * (See also read_buf()).
++ */
++local void flush_pending(strm)
++ z_streamp strm;
++{
++ deflate_state *s = (deflate_state *) strm->state;
++ unsigned len = s->pending;
++
++ if (len > strm->avail_out) len = strm->avail_out;
++ if (len == 0) return;
++
++ if (strm->next_out != Z_NULL) {
++ zmemcpy(strm->next_out, s->pending_out, len);
++ strm->next_out += len;
++ }
++ s->pending_out += len;
++ strm->total_out += len;
++ strm->avail_out -= len;
++ s->pending -= len;
++ if (s->pending == 0) {
++ s->pending_out = s->pending_buf;
++ }
++}
++
++/* ========================================================================= */
++int deflate (strm, flush)
++ z_streamp strm;
++ int flush;
++{
++ int old_flush; /* value of flush param for previous deflate call */
++ deflate_state *s;
++
++ if (strm == Z_NULL || strm->state == Z_NULL ||
++ flush > Z_FINISH || flush < 0) {
++ return Z_STREAM_ERROR;
++ }
++ s = (deflate_state *) strm->state;
++
++ if ((strm->next_in == Z_NULL && strm->avail_in != 0) ||
++ (s->status == FINISH_STATE && flush != Z_FINISH)) {
++ ERR_RETURN(strm, Z_STREAM_ERROR);
++ }
++ if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
++
++ s->strm = strm; /* just in case */
++ old_flush = s->last_flush;
++ s->last_flush = flush;
++
++ /* Write the zlib header */
++ if (s->status == INIT_STATE) {
++
++ uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
++ uInt level_flags = (s->level-1) >> 1;
++
++ if (level_flags > 3) level_flags = 3;
++ header |= (level_flags << 6);
++ if (s->strstart != 0) header |= PRESET_DICT;
++ header += 31 - (header % 31);
++
++ s->status = BUSY_STATE;
++ putShortMSB(s, header);
++
++ /* Save the adler32 of the preset dictionary: */
++ if (s->strstart != 0) {
++ putShortMSB(s, (uInt)(strm->adler >> 16));
++ putShortMSB(s, (uInt)(strm->adler & 0xffff));
++ }
++ strm->adler = 1L;
++ }
++
++ /* Flush as much pending output as possible */
++ if (s->pending != 0) {
++ flush_pending(strm);
++ if (strm->avail_out == 0) {
++ /* Since avail_out is 0, deflate will be called again with
++ * more output space, but possibly with both pending and
++ * avail_in equal to zero. There won't be anything to do,
++ * but this is not an error situation so make sure we
++ * return OK instead of BUF_ERROR at next call of deflate:
++ */
++ s->last_flush = -1;
++ return Z_OK;
++ }
++
++ /* Make sure there is something to do and avoid duplicate consecutive
++ * flushes. For repeated and useless calls with Z_FINISH, we keep
++ * returning Z_STREAM_END instead of Z_BUFF_ERROR.
++ */
++ } else if (strm->avail_in == 0 && flush <= old_flush &&
++ flush != Z_FINISH) {
++ ERR_RETURN(strm, Z_BUF_ERROR);
++ }
++
++ /* User must not provide more input after the first FINISH: */
++ if (s->status == FINISH_STATE && strm->avail_in != 0) {
++ ERR_RETURN(strm, Z_BUF_ERROR);
++ }
++
++ /* Start a new block or continue the current one.
++ */
++ if (strm->avail_in != 0 || s->lookahead != 0 ||
++ (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
++ block_state bstate;
++
++ bstate = (*(configuration_table[s->level].func))(s, flush);
++
++ if (bstate == finish_started || bstate == finish_done) {
++ s->status = FINISH_STATE;
++ }
++ if (bstate == need_more || bstate == finish_started) {
++ if (strm->avail_out == 0) {
++ s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
++ }
++ return Z_OK;
++ /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
++ * of deflate should use the same flush parameter to make sure
++ * that the flush is complete. So we don't have to output an
++ * empty block here, this will be done at next call. This also
++ * ensures that for a very small output buffer, we emit at most
++ * one empty block.
++ */
++ }
++ if (bstate == block_done) {
++ if (flush == Z_PARTIAL_FLUSH) {
++ _tr_align(s);
++ } else if (flush == Z_PACKET_FLUSH) {
++ /* Output just the 3-bit `stored' block type value,
++ but not a zero length. */
++ _tr_stored_type_only(s);
++ } else { /* FULL_FLUSH or SYNC_FLUSH */
++ _tr_stored_block(s, (char*)0, 0L, 0);
++ /* For a full flush, this empty block will be recognized
++ * as a special marker by inflate_sync().
++ */
++ if (flush == Z_FULL_FLUSH) {
++ CLEAR_HASH(s); /* forget history */
++ }
++ }
++ flush_pending(strm);
++ if (strm->avail_out == 0) {
++ s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
++ return Z_OK;
++ }
++ }
++ }
++ Assert(strm->avail_out > 0, "bug2");
++
++ if (flush != Z_FINISH) return Z_OK;
++ if (s->noheader) return Z_STREAM_END;
++
++ /* Write the zlib trailer (adler32) */
++ putShortMSB(s, (uInt)(strm->adler >> 16));
++ putShortMSB(s, (uInt)(strm->adler & 0xffff));
++ flush_pending(strm);
++ /* If avail_out is zero, the application will call deflate again
++ * to flush the rest.
++ */
++ s->noheader = -1; /* write the trailer only once! */
++ return s->pending != 0 ? Z_OK : Z_STREAM_END;
++}
++
++/* ========================================================================= */
++int deflateEnd (strm)
++ z_streamp strm;
++{
++ int status;
++ deflate_state *s;
++
++ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
++ s = (deflate_state *) strm->state;
++
++ status = s->status;
++ if (status != INIT_STATE && status != BUSY_STATE &&
++ status != FINISH_STATE) {
++ return Z_STREAM_ERROR;
++ }
++
++ /* Deallocate in reverse order of allocations: */
++ TRY_FREE(strm, s->pending_buf);
++ TRY_FREE(strm, s->head);
++ TRY_FREE(strm, s->prev);
++ TRY_FREE(strm, s->window);
++
++ ZFREE(strm, s);
++ strm->state = Z_NULL;
++
++ return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
++}
++
++/* =========================================================================
++ * Copy the source state to the destination state.
++ */
++int deflateCopy (dest, source)
++ z_streamp dest;
++ z_streamp source;
++{
++ deflate_state *ds;
++ deflate_state *ss;
++ ushf *overlay;
++
++ if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL)
++ return Z_STREAM_ERROR;
++ ss = (deflate_state *) source->state;
++
++ *dest = *source;
++
++ ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
++ if (ds == Z_NULL) return Z_MEM_ERROR;
++ dest->state = (struct internal_state FAR *) ds;
++ *ds = *ss;
++ ds->strm = dest;
++
++ ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
++ ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos));
++ ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos));
++ overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
++ ds->pending_buf = (uchf *) overlay;
++
++ if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
++ ds->pending_buf == Z_NULL) {
++ deflateEnd (dest);
++ return Z_MEM_ERROR;
++ }
++ /* ??? following zmemcpy doesn't work for 16-bit MSDOS */
++ zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
++ zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos));
++ zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos));
++ zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
++
++ ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
++ ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
++ ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
++
++ ds->l_desc.dyn_tree = ds->dyn_ltree;
++ ds->d_desc.dyn_tree = ds->dyn_dtree;
++ ds->bl_desc.dyn_tree = ds->bl_tree;
++
++ return Z_OK;
++}
++
++/* ===========================================================================
++ * Return the number of bytes of output which are immediately available
++ * for output from the decompressor.
++ */
++int deflateOutputPending (strm)
++ z_streamp strm;
++{
++ if (strm == Z_NULL || strm->state == Z_NULL) return 0;
++
++ return ((deflate_state *)(strm->state))->pending;
++}
++
++/* ===========================================================================
++ * Read a new buffer from the current input stream, update the adler32
++ * and total number of bytes read. All deflate() input goes through
++ * this function so some applications may wish to modify it to avoid
++ * allocating a large strm->next_in buffer and copying from it.
++ * (See also flush_pending()).
++ */
++local int read_buf(strm, buf, size)
++ z_streamp strm;
++ charf *buf;
++ unsigned size;
++{
++ unsigned len = strm->avail_in;
++
++ if (len > size) len = size;
++ if (len == 0) return 0;
++
++ strm->avail_in -= len;
++
++ if (!((deflate_state *)(strm->state))->noheader) {
++ strm->adler = adler32(strm->adler, strm->next_in, len);
++ }
++ zmemcpy(buf, strm->next_in, len);
++ strm->next_in += len;
++ strm->total_in += len;
++
++ return (int)len;
++}
++
++/* ===========================================================================
++ * Initialize the "longest match" routines for a new zlib stream
++ */
++local void lm_init (s)
++ deflate_state *s;
++{
++ s->window_size = (ulg)2L*s->w_size;
++
++ CLEAR_HASH(s);
++
++ /* Set the default configuration parameters:
++ */
++ s->max_lazy_match = configuration_table[s->level].max_lazy;
++ s->good_match = configuration_table[s->level].good_length;
++ s->nice_match = configuration_table[s->level].nice_length;
++ s->max_chain_length = configuration_table[s->level].max_chain;
++
++ s->strstart = 0;
++ s->block_start = 0L;
++ s->lookahead = 0;
++ s->match_length = s->prev_length = MIN_MATCH-1;
++ s->match_available = 0;
++ s->ins_h = 0;
++#ifdef ASMV
++ match_init(); /* initialize the asm code */
++#endif
++}
++
++/* ===========================================================================
++ * Set match_start to the longest match starting at the given string and
++ * return its length. Matches shorter or equal to prev_length are discarded,
++ * in which case the result is equal to prev_length and match_start is
++ * garbage.
++ * IN assertions: cur_match is the head of the hash chain for the current
++ * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
++ * OUT assertion: the match length is not greater than s->lookahead.
++ */
++#ifndef ASMV
++/* For 80x86 and 680x0, an optimized version will be provided in match.asm or
++ * match.S. The code will be functionally equivalent.
++ */
++local uInt longest_match(s, cur_match)
++ deflate_state *s;
++ IPos cur_match; /* current match */
++{
++ unsigned chain_length = s->max_chain_length;/* max hash chain length */
++ register Bytef *scan = s->window + s->strstart; /* current string */
++ register Bytef *match; /* matched string */
++ register int len; /* length of current match */
++ int best_len = s->prev_length; /* best match length so far */
++ int nice_match = s->nice_match; /* stop if match long enough */
++ IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
++ s->strstart - (IPos)MAX_DIST(s) : NIL;
++ /* Stop when cur_match becomes <= limit. To simplify the code,
++ * we prevent matches with the string of window index 0.
++ */
++ Posf *prev = s->prev;
++ uInt wmask = s->w_mask;
++
++#ifdef UNALIGNED_OK
++ /* Compare two bytes at a time. Note: this is not always beneficial.
++ * Try with and without -DUNALIGNED_OK to check.
++ */
++ register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
++ register ush scan_start = *(ushf*)scan;
++ register ush scan_end = *(ushf*)(scan+best_len-1);
++#else
++ register Bytef *strend = s->window + s->strstart + MAX_MATCH;
++ register Byte scan_end1 = scan[best_len-1];
++ register Byte scan_end = scan[best_len];
++#endif
++
++ /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
++ * It is easy to get rid of this optimization if necessary.
++ */
++ Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
++
++ /* Do not waste too much time if we already have a good match: */
++ if (s->prev_length >= s->good_match) {
++ chain_length >>= 2;
++ }
++ /* Do not look for matches beyond the end of the input. This is necessary
++ * to make deflate deterministic.
++ */
++ if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
++
++ Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
++
++ do {
++ Assert(cur_match < s->strstart, "no future");
++ match = s->window + cur_match;
++
++ /* Skip to next match if the match length cannot increase
++ * or if the match length is less than 2:
++ */
++#if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
++ /* This code assumes sizeof(unsigned short) == 2. Do not use
++ * UNALIGNED_OK if your compiler uses a different size.
++ */
++ if (*(ushf*)(match+best_len-1) != scan_end ||
++ *(ushf*)match != scan_start) continue;
++
++ /* It is not necessary to compare scan[2] and match[2] since they are
++ * always equal when the other bytes match, given that the hash keys
++ * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
++ * strstart+3, +5, ... up to strstart+257. We check for insufficient
++ * lookahead only every 4th comparison; the 128th check will be made
++ * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
++ * necessary to put more guard bytes at the end of the window, or
++ * to check more often for insufficient lookahead.
++ */
++ Assert(scan[2] == match[2], "scan[2]?");
++ scan++, match++;
++ do {
++ } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
++ *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
++ *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
++ *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
++ scan < strend);
++ /* The funny "do {}" generates better code on most compilers */
++
++ /* Here, scan <= window+strstart+257 */
++ Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
++ if (*scan == *match) scan++;
++
++ len = (MAX_MATCH - 1) - (int)(strend-scan);
++ scan = strend - (MAX_MATCH-1);
++
++#else /* UNALIGNED_OK */
++
++ if (match[best_len] != scan_end ||
++ match[best_len-1] != scan_end1 ||
++ *match != *scan ||
++ *++match != scan[1]) continue;
++
++ /* The check at best_len-1 can be removed because it will be made
++ * again later. (This heuristic is not always a win.)
++ * It is not necessary to compare scan[2] and match[2] since they
++ * are always equal when the other bytes match, given that
++ * the hash keys are equal and that HASH_BITS >= 8.
++ */
++ scan += 2, match++;
++ Assert(*scan == *match, "match[2]?");
++
++ /* We check for insufficient lookahead only every 8th comparison;
++ * the 256th check will be made at strstart+258.
++ */
++ do {
++ } while (*++scan == *++match && *++scan == *++match &&
++ *++scan == *++match && *++scan == *++match &&
++ *++scan == *++match && *++scan == *++match &&
++ *++scan == *++match && *++scan == *++match &&
++ scan < strend);
++
++ Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
++
++ len = MAX_MATCH - (int)(strend - scan);
++ scan = strend - MAX_MATCH;
++
++#endif /* UNALIGNED_OK */
++
++ if (len > best_len) {
++ s->match_start = cur_match;
++ best_len = len;
++ if (len >= nice_match) break;
++#ifdef UNALIGNED_OK
++ scan_end = *(ushf*)(scan+best_len-1);
++#else
++ scan_end1 = scan[best_len-1];
++ scan_end = scan[best_len];
++#endif
++ }
++ } while ((cur_match = prev[cur_match & wmask]) > limit
++ && --chain_length != 0);
++
++ if ((uInt)best_len <= s->lookahead) return best_len;
++ return s->lookahead;
++}
++#endif /* ASMV */
++
++#ifdef DEBUG_ZLIB
++/* ===========================================================================
++ * Check that the match at match_start is indeed a match.
++ */
++local void check_match(s, start, match, length)
++ deflate_state *s;
++ IPos start, match;
++ int length;
++{
++ /* check that the match is indeed a match */
++ if (zmemcmp((charf *)s->window + match,
++ (charf *)s->window + start, length) != EQUAL) {
++ fprintf(stderr, " start %u, match %u, length %d\n",
++ start, match, length);
++ do {
++ fprintf(stderr, "%c%c", s->window[match++], s->window[start++]);
++ } while (--length != 0);
++ z_error("invalid match");
++ }
++ if (z_verbose > 1) {
++ fprintf(stderr,"\\[%d,%d]", start-match, length);
++ do { putc(s->window[start++], stderr); } while (--length != 0);
++ }
++}
++#else
++# define check_match(s, start, match, length)
++#endif
++
++/* ===========================================================================
++ * Fill the window when the lookahead becomes insufficient.
++ * Updates strstart and lookahead.
++ *
++ * IN assertion: lookahead < MIN_LOOKAHEAD
++ * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
++ * At least one byte has been read, or avail_in == 0; reads are
++ * performed for at least two bytes (required for the zip translate_eol
++ * option -- not supported here).
++ */
++local void fill_window(s)
++ deflate_state *s;
++{
++ register unsigned n, m;
++ register Posf *p;
++ unsigned more; /* Amount of free space at the end of the window. */
++ uInt wsize = s->w_size;
++
++ do {
++ more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
++
++ /* Deal with !@#$% 64K limit: */
++ if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
++ more = wsize;
++
++ } else if (more == (unsigned)(-1)) {
++ /* Very unlikely, but possible on 16 bit machine if strstart == 0
++ * and lookahead == 1 (input done one byte at time)
++ */
++ more--;
++
++ /* If the window is almost full and there is insufficient lookahead,
++ * move the upper half to the lower one to make room in the upper half.
++ */
++ } else if (s->strstart >= wsize+MAX_DIST(s)) {
++
++ zmemcpy((charf *)s->window, (charf *)s->window+wsize,
++ (unsigned)wsize);
++ s->match_start -= wsize;
++ s->strstart -= wsize; /* we now have strstart >= MAX_DIST */
++ s->block_start -= (long) wsize;
++
++ /* Slide the hash table (could be avoided with 32 bit values
++ at the expense of memory usage). We slide even when level == 0
++ to keep the hash table consistent if we switch back to level > 0
++ later. (Using level 0 permanently is not an optimal usage of
++ zlib, so we don't care about this pathological case.)
++ */
++ n = s->hash_size;
++ p = &s->head[n];
++ do {
++ m = *--p;
++ *p = (Pos)(m >= wsize ? m-wsize : NIL);
++ } while (--n);
++
++ n = wsize;
++ p = &s->prev[n];
++ do {
++ m = *--p;
++ *p = (Pos)(m >= wsize ? m-wsize : NIL);
++ /* If n is not on any hash chain, prev[n] is garbage but
++ * its value will never be used.
++ */
++ } while (--n);
++ more += wsize;
++ }
++ if (s->strm->avail_in == 0) return;
++
++ /* If there was no sliding:
++ * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
++ * more == window_size - lookahead - strstart
++ * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
++ * => more >= window_size - 2*WSIZE + 2
++ * In the BIG_MEM or MMAP case (not yet supported),
++ * window_size == input_size + MIN_LOOKAHEAD &&
++ * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
++ * Otherwise, window_size == 2*WSIZE so more >= 2.
++ * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
++ */
++ Assert(more >= 2, "more < 2");
++
++ n = read_buf(s->strm, (charf *)s->window + s->strstart + s->lookahead,
++ more);
++ s->lookahead += n;
++
++ /* Initialize the hash value now that we have some input: */
++ if (s->lookahead >= MIN_MATCH) {
++ s->ins_h = s->window[s->strstart];
++ UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
++#if MIN_MATCH != 3
++ Call UPDATE_HASH() MIN_MATCH-3 more times
++#endif
++ }
++ /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
++ * but this is not important since only literal bytes will be emitted.
++ */
++
++ } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
++}
++
++/* ===========================================================================
++ * Flush the current block, with given end-of-file flag.
++ * IN assertion: strstart is set to the end of the current match.
++ */
++#define FLUSH_BLOCK_ONLY(s, eof) { \
++ _tr_flush_block(s, (s->block_start >= 0L ? \
++ (charf *)&s->window[(unsigned)s->block_start] : \
++ (charf *)Z_NULL), \
++ (ulg)((long)s->strstart - s->block_start), \
++ (eof)); \
++ s->block_start = s->strstart; \
++ flush_pending(s->strm); \
++ Tracev((stderr,"[FLUSH]")); \
++}
++
++/* Same but force premature exit if necessary. */
++#define FLUSH_BLOCK(s, eof) { \
++ FLUSH_BLOCK_ONLY(s, eof); \
++ if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \
++}
++
++/* ===========================================================================
++ * Copy without compression as much as possible from the input stream, return
++ * the current block state.
++ * This function does not insert new strings in the dictionary since
++ * uncompressible data is probably not useful. This function is used
++ * only for the level=0 compression option.
++ * NOTE: this function should be optimized to avoid extra copying from
++ * window to pending_buf.
++ */
++local block_state deflate_stored(s, flush)
++ deflate_state *s;
++ int flush;
++{
++ /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
++ * to pending_buf_size, and each stored block has a 5 byte header:
++ */
++ ulg max_block_size = 0xffff;
++ ulg max_start;
++
++ if (max_block_size > s->pending_buf_size - 5) {
++ max_block_size = s->pending_buf_size - 5;
++ }
++
++ /* Copy as much as possible from input to output: */
++ for (;;) {
++ /* Fill the window as much as possible: */
++ if (s->lookahead <= 1) {
++
++ Assert(s->strstart < s->w_size+MAX_DIST(s) ||
++ s->block_start >= (long)s->w_size, "slide too late");
++
++ fill_window(s);
++ if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
++
++ if (s->lookahead == 0) break; /* flush the current block */
++ }
++ Assert(s->block_start >= 0L, "block gone");
++
++ s->strstart += s->lookahead;
++ s->lookahead = 0;
++
++ /* Emit a stored block if pending_buf will be full: */
++ max_start = s->block_start + max_block_size;
++ if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
++ /* strstart == 0 is possible when wraparound on 16-bit machine */
++ s->lookahead = (uInt)(s->strstart - max_start);
++ s->strstart = (uInt)max_start;
++ FLUSH_BLOCK(s, 0);
++ }
++ /* Flush if we may have to slide, otherwise block_start may become
++ * negative and the data will be gone:
++ */
++ if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
++ FLUSH_BLOCK(s, 0);
++ }
++ }
++ FLUSH_BLOCK(s, flush == Z_FINISH);
++ return flush == Z_FINISH ? finish_done : block_done;
++}
++
++/* ===========================================================================
++ * Compress as much as possible from the input stream, return the current
++ * block state.
++ * This function does not perform lazy evaluation of matches and inserts
++ * new strings in the dictionary only for unmatched strings or for short
++ * matches. It is used only for the fast compression options.
++ */
++local block_state deflate_fast(s, flush)
++ deflate_state *s;
++ int flush;
++{
++ IPos hash_head = NIL; /* head of the hash chain */
++ int bflush; /* set if current block must be flushed */
++
++ for (;;) {
++ /* Make sure that we always have enough lookahead, except
++ * at the end of the input file. We need MAX_MATCH bytes
++ * for the next match, plus MIN_MATCH bytes to insert the
++ * string following the next match.
++ */
++ if (s->lookahead < MIN_LOOKAHEAD) {
++ fill_window(s);
++ if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
++ return need_more;
++ }
++ if (s->lookahead == 0) break; /* flush the current block */
++ }
++
++ /* Insert the string window[strstart .. strstart+2] in the
++ * dictionary, and set hash_head to the head of the hash chain:
++ */
++ if (s->lookahead >= MIN_MATCH) {
++ INSERT_STRING(s, s->strstart, hash_head);
++ }
++
++ /* Find the longest match, discarding those <= prev_length.
++ * At this point we have always match_length < MIN_MATCH
++ */
++ if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
++ /* To simplify the code, we prevent matches with the string
++ * of window index 0 (in particular we have to avoid a match
++ * of the string with itself at the start of the input file).
++ */
++ if (s->strategy != Z_HUFFMAN_ONLY) {
++ s->match_length = longest_match (s, hash_head);
++ }
++ /* longest_match() sets match_start */
++ }
++ if (s->match_length >= MIN_MATCH) {
++ check_match(s, s->strstart, s->match_start, s->match_length);
++
++ bflush = _tr_tally(s, s->strstart - s->match_start,
++ s->match_length - MIN_MATCH);
++
++ s->lookahead -= s->match_length;
++
++ /* Insert new strings in the hash table only if the match length
++ * is not too large. This saves time but degrades compression.
++ */
++ if (s->match_length <= s->max_insert_length &&
++ s->lookahead >= MIN_MATCH) {
++ s->match_length--; /* string at strstart already in hash table */
++ do {
++ s->strstart++;
++ INSERT_STRING(s, s->strstart, hash_head);
++ /* strstart never exceeds WSIZE-MAX_MATCH, so there are
++ * always MIN_MATCH bytes ahead.
++ */
++ } while (--s->match_length != 0);
++ s->strstart++;
++ } else {
++ s->strstart += s->match_length;
++ s->match_length = 0;
++ s->ins_h = s->window[s->strstart];
++ UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
++#if MIN_MATCH != 3
++ Call UPDATE_HASH() MIN_MATCH-3 more times
++#endif
++ /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
++ * matter since it will be recomputed at next deflate call.
++ */
++ }
++ } else {
++ /* No match, output a literal byte */
++ Tracevv((stderr,"%c", s->window[s->strstart]));
++ bflush = _tr_tally (s, 0, s->window[s->strstart]);
++ s->lookahead--;
++ s->strstart++;
++ }
++ if (bflush) FLUSH_BLOCK(s, 0);
++ }
++ FLUSH_BLOCK(s, flush == Z_FINISH);
++ return flush == Z_FINISH ? finish_done : block_done;
++}
++
++/* ===========================================================================
++ * Same as above, but achieves better compression. We use a lazy
++ * evaluation for matches: a match is finally adopted only if there is
++ * no better match at the next window position.
++ */
++local block_state deflate_slow(s, flush)
++ deflate_state *s;
++ int flush;
++{
++ IPos hash_head = NIL; /* head of hash chain */
++ int bflush; /* set if current block must be flushed */
++
++ /* Process the input block. */
++ for (;;) {
++ /* Make sure that we always have enough lookahead, except
++ * at the end of the input file. We need MAX_MATCH bytes
++ * for the next match, plus MIN_MATCH bytes to insert the
++ * string following the next match.
++ */
++ if (s->lookahead < MIN_LOOKAHEAD) {
++ fill_window(s);
++ if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
++ return need_more;
++ }
++ if (s->lookahead == 0) break; /* flush the current block */
++ }
++
++ /* Insert the string window[strstart .. strstart+2] in the
++ * dictionary, and set hash_head to the head of the hash chain:
++ */
++ if (s->lookahead >= MIN_MATCH) {
++ INSERT_STRING(s, s->strstart, hash_head);
++ }
++
++ /* Find the longest match, discarding those <= prev_length.
++ */
++ s->prev_length = s->match_length, s->prev_match = s->match_start;
++ s->match_length = MIN_MATCH-1;
++
++ if (hash_head != NIL && s->prev_length < s->max_lazy_match &&
++ s->strstart - hash_head <= MAX_DIST(s)) {
++ /* To simplify the code, we prevent matches with the string
++ * of window index 0 (in particular we have to avoid a match
++ * of the string with itself at the start of the input file).
++ */
++ if (s->strategy != Z_HUFFMAN_ONLY) {
++ s->match_length = longest_match (s, hash_head);
++ }
++ /* longest_match() sets match_start */
++
++ if (s->match_length <= 5 && (s->strategy == Z_FILTERED ||
++ (s->match_length == MIN_MATCH &&
++ s->strstart - s->match_start > TOO_FAR))) {
++
++ /* If prev_match is also MIN_MATCH, match_start is garbage
++ * but we will ignore the current match anyway.
++ */
++ s->match_length = MIN_MATCH-1;
++ }
++ }
++ /* If there was a match at the previous step and the current
++ * match is not better, output the previous match:
++ */
++ if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {
++ uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
++ /* Do not insert strings in hash table beyond this. */
++
++ check_match(s, s->strstart-1, s->prev_match, s->prev_length);
++
++ bflush = _tr_tally(s, s->strstart -1 - s->prev_match,
++ s->prev_length - MIN_MATCH);
++
++ /* Insert in hash table all strings up to the end of the match.
++ * strstart-1 and strstart are already inserted. If there is not
++ * enough lookahead, the last two strings are not inserted in
++ * the hash table.
++ */
++ s->lookahead -= s->prev_length-1;
++ s->prev_length -= 2;
++ do {
++ if (++s->strstart <= max_insert) {
++ INSERT_STRING(s, s->strstart, hash_head);
++ }
++ } while (--s->prev_length != 0);
++ s->match_available = 0;
++ s->match_length = MIN_MATCH-1;
++ s->strstart++;
++
++ if (bflush) FLUSH_BLOCK(s, 0);
++
++ } else if (s->match_available) {
++ /* If there was no match at the previous position, output a
++ * single literal. If there was a match but the current match
++ * is longer, truncate the previous match to a single literal.
++ */
++ Tracevv((stderr,"%c", s->window[s->strstart-1]));
++ if (_tr_tally (s, 0, s->window[s->strstart-1])) {
++ FLUSH_BLOCK_ONLY(s, 0);
++ }
++ s->strstart++;
++ s->lookahead--;
++ if (s->strm->avail_out == 0) return need_more;
++ } else {
++ /* There is no previous match to compare with, wait for
++ * the next step to decide.
++ */
++ s->match_available = 1;
++ s->strstart++;
++ s->lookahead--;
++ }
++ }
++ Assert (flush != Z_NO_FLUSH, "no flush?");
++ if (s->match_available) {
++ Tracevv((stderr,"%c", s->window[s->strstart-1]));
++ _tr_tally (s, 0, s->window[s->strstart-1]);
++ s->match_available = 0;
++ }
++ FLUSH_BLOCK(s, flush == Z_FINISH);
++ return flush == Z_FINISH ? finish_done : block_done;
++}
++/* --- deflate.c */
++
++/* +++ trees.c */
++/* trees.c -- output deflated data using Huffman coding
++ * Copyright (C) 1995-1996 Jean-loup Gailly
++ * For conditions of distribution and use, see copyright notice in zlib.h
++ */
++
++/*
++ * ALGORITHM
++ *
++ * The "deflation" process uses several Huffman trees. The more
++ * common source values are represented by shorter bit sequences.
++ *
++ * Each code tree is stored in a compressed form which is itself
++ * a Huffman encoding of the lengths of all the code strings (in
++ * ascending order by source values). The actual code strings are
++ * reconstructed from the lengths in the inflate process, as described
++ * in the deflate specification.
++ *
++ * REFERENCES
++ *
++ * Deutsch, L.P.,"'Deflate' Compressed Data Format Specification".
++ * Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc
++ *
++ * Storer, James A.
++ * Data Compression: Methods and Theory, pp. 49-50.
++ * Computer Science Press, 1988. ISBN 0-7167-8156-5.
++ *
++ * Sedgewick, R.
++ * Algorithms, p290.
++ * Addison-Wesley, 1983. ISBN 0-201-06672-6.
++ */
++
++/* From: trees.c,v 1.11 1996/07/24 13:41:06 me Exp $ */
++
++/* #include "deflate.h" */
++
++#ifdef DEBUG_ZLIB
++# include <ctype.h>
++#endif
++
++/* ===========================================================================
++ * Constants
++ */
++
++#define MAX_BL_BITS 7
++/* Bit length codes must not exceed MAX_BL_BITS bits */
++
++#define END_BLOCK 256
++/* end of block literal code */
++
++#define REP_3_6 16
++/* repeat previous bit length 3-6 times (2 bits of repeat count) */
++
++#define REPZ_3_10 17
++/* repeat a zero length 3-10 times (3 bits of repeat count) */
++
++#define REPZ_11_138 18
++/* repeat a zero length 11-138 times (7 bits of repeat count) */
++
++local int extra_lbits[LENGTH_CODES] /* extra bits for each length code */
++ = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0};
++
++local int extra_dbits[D_CODES] /* extra bits for each distance code */
++ = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13};
++
++local int extra_blbits[BL_CODES]/* extra bits for each bit length code */
++ = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7};
++
++local uch bl_order[BL_CODES]
++ = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15};
++/* The lengths of the bit length codes are sent in order of decreasing
++ * probability, to avoid transmitting the lengths for unused bit length codes.
++ */
++
++#define Buf_size (8 * 2*sizeof(char))
++/* Number of bits used within bi_buf. (bi_buf might be implemented on
++ * more than 16 bits on some systems.)
++ */
++
++/* ===========================================================================
++ * Local data. These are initialized only once.
++ */
++
++local ct_data static_ltree[L_CODES+2];
++/* The static literal tree. Since the bit lengths are imposed, there is no
++ * need for the L_CODES extra codes used during heap construction. However
++ * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
++ * below).
++ */
++
++local ct_data static_dtree[D_CODES];
++/* The static distance tree. (Actually a trivial tree since all codes use
++ * 5 bits.)
++ */
++
++local uch dist_code[512];
++/* distance codes. The first 256 values correspond to the distances
++ * 3 .. 258, the last 256 values correspond to the top 8 bits of
++ * the 15 bit distances.
++ */
++
++local uch length_code[MAX_MATCH-MIN_MATCH+1];
++/* length code for each normalized match length (0 == MIN_MATCH) */
++
++local int base_length[LENGTH_CODES];
++/* First normalized length for each code (0 = MIN_MATCH) */
++
++local int base_dist[D_CODES];
++/* First normalized distance for each code (0 = distance of 1) */
++
++struct static_tree_desc_s {
++ ct_data *static_tree; /* static tree or NULL */
++ intf *extra_bits; /* extra bits for each code or NULL */
++ int extra_base; /* base index for extra_bits */
++ int elems; /* max number of elements in the tree */
++ int max_length; /* max bit length for the codes */
++};
++
++local static_tree_desc static_l_desc =
++{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS};
++
++local static_tree_desc static_d_desc =
++{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS};
++
++local static_tree_desc static_bl_desc =
++{(ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS};
++
++/* ===========================================================================
++ * Local (static) routines in this file.
++ */
++
++local void tr_static_init OF((void));
++local void init_block OF((deflate_state *s));
++local void pqdownheap OF((deflate_state *s, ct_data *tree, int k));
++local void gen_bitlen OF((deflate_state *s, tree_desc *desc));
++local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count));
++local void build_tree OF((deflate_state *s, tree_desc *desc));
++local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code));
++local void send_tree OF((deflate_state *s, ct_data *tree, int max_code));
++local int build_bl_tree OF((deflate_state *s));
++local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes,
++ int blcodes));
++local void compress_block OF((deflate_state *s, ct_data *ltree,
++ ct_data *dtree));
++local void set_data_type OF((deflate_state *s));
++local unsigned bi_reverse OF((unsigned value, int length));
++local void bi_windup OF((deflate_state *s));
++local void bi_flush OF((deflate_state *s));
++local void copy_block OF((deflate_state *s, charf *buf, unsigned len,
++ int header));
++
++#ifndef DEBUG_ZLIB
++# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len)
++ /* Send a code of the given tree. c and tree must not have side effects */
++
++#else /* DEBUG_ZLIB */
++# define send_code(s, c, tree) \
++ { if (verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \
++ send_bits(s, tree[c].Code, tree[c].Len); }
++#endif
++
++#define d_code(dist) \
++ ((dist) < 256 ? dist_code[dist] : dist_code[256+((dist)>>7)])
++/* Mapping from a distance to a distance code. dist is the distance - 1 and
++ * must not have side effects. dist_code[256] and dist_code[257] are never
++ * used.
++ */
++
++/* ===========================================================================
++ * Output a short LSB first on the stream.
++ * IN assertion: there is enough room in pendingBuf.
++ */
++#define put_short(s, w) { \
++ put_byte(s, (uch)((w) & 0xff)); \
++ put_byte(s, (uch)((ush)(w) >> 8)); \
++}
++
++/* ===========================================================================
++ * Send a value on a given number of bits.
++ * IN assertion: length <= 16 and value fits in length bits.
++ */
++#ifdef DEBUG_ZLIB
++local void send_bits OF((deflate_state *s, int value, int length));
++
++local void send_bits(s, value, length)
++ deflate_state *s;
++ int value; /* value to send */
++ int length; /* number of bits */
++{
++ Tracevv((stderr," l %2d v %4x ", length, value));
++ Assert(length > 0 && length <= 15, "invalid length");
++ s->bits_sent += (ulg)length;
++
++ /* If not enough room in bi_buf, use (valid) bits from bi_buf and
++ * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid))
++ * unused bits in value.
++ */
++ if (s->bi_valid > (int)Buf_size - length) {
++ s->bi_buf |= (value << s->bi_valid);
++ put_short(s, s->bi_buf);
++ s->bi_buf = (ush)value >> (Buf_size - s->bi_valid);
++ s->bi_valid += length - Buf_size;
++ } else {
++ s->bi_buf |= value << s->bi_valid;
++ s->bi_valid += length;
++ }
++}
++#else /* !DEBUG_ZLIB */
++
++#define send_bits(s, value, length) \
++{ int len = length;\
++ if (s->bi_valid > (int)Buf_size - len) {\
++ int val = value;\
++ s->bi_buf |= (val << s->bi_valid);\
++ put_short(s, s->bi_buf);\
++ s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\
++ s->bi_valid += len - Buf_size;\
++ } else {\
++ s->bi_buf |= (value) << s->bi_valid;\
++ s->bi_valid += len;\
++ }\
++}
++#endif /* DEBUG_ZLIB */
++
++
++#define MAX(a,b) (a >= b ? a : b)
++/* the arguments must not have side effects */
++
++/* ===========================================================================
++ * Initialize the various 'constant' tables. In a multi-threaded environment,
++ * this function may be called by two threads concurrently, but this is
++ * harmless since both invocations do exactly the same thing.
++ */
++local void tr_static_init()
++{
++ static int static_init_done = 0;
++ int n; /* iterates over tree elements */
++ int bits; /* bit counter */
++ int length; /* length value */
++ int code; /* code value */
++ int dist; /* distance index */
++ ush bl_count[MAX_BITS+1];
++ /* number of codes at each bit length for an optimal tree */
++
++ if (static_init_done) return;
++
++ /* Initialize the mapping length (0..255) -> length code (0..28) */
++ length = 0;
++ for (code = 0; code < LENGTH_CODES-1; code++) {
++ base_length[code] = length;
++ for (n = 0; n < (1<<extra_lbits[code]); n++) {
++ length_code[length++] = (uch)code;
++ }
++ }
++ Assert (length == 256, "tr_static_init: length != 256");
++ /* Note that the length 255 (match length 258) can be represented
++ * in two different ways: code 284 + 5 bits or code 285, so we
++ * overwrite length_code[255] to use the best encoding:
++ */
++ length_code[length-1] = (uch)code;
++
++ /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
++ dist = 0;
++ for (code = 0 ; code < 16; code++) {
++ base_dist[code] = dist;
++ for (n = 0; n < (1<<extra_dbits[code]); n++) {
++ dist_code[dist++] = (uch)code;
++ }
++ }
++ Assert (dist == 256, "tr_static_init: dist != 256");
++ dist >>= 7; /* from now on, all distances are divided by 128 */
++ for ( ; code < D_CODES; code++) {
++ base_dist[code] = dist << 7;
++ for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
++ dist_code[256 + dist++] = (uch)code;
++ }
++ }
++ Assert (dist == 256, "tr_static_init: 256+dist != 512");
++
++ /* Construct the codes of the static literal tree */
++ for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0;
++ n = 0;
++ while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++;
++ while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++;
++ while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++;
++ while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++;
++ /* Codes 286 and 287 do not exist, but we must include them in the
++ * tree construction to get a canonical Huffman tree (longest code
++ * all ones)
++ */
++ gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count);
++
++ /* The static distance tree is trivial: */
++ for (n = 0; n < D_CODES; n++) {
++ static_dtree[n].Len = 5;
++ static_dtree[n].Code = bi_reverse((unsigned)n, 5);
++ }
++ static_init_done = 1;
++}
++
++/* ===========================================================================
++ * Initialize the tree data structures for a new zlib stream.
++ */
++void _tr_init(s)
++ deflate_state *s;
++{
++ tr_static_init();
++
++ s->compressed_len = 0L;
++
++ s->l_desc.dyn_tree = s->dyn_ltree;
++ s->l_desc.stat_desc = &static_l_desc;
++
++ s->d_desc.dyn_tree = s->dyn_dtree;
++ s->d_desc.stat_desc = &static_d_desc;
++
++ s->bl_desc.dyn_tree = s->bl_tree;
++ s->bl_desc.stat_desc = &static_bl_desc;
++
++ s->bi_buf = 0;
++ s->bi_valid = 0;
++ s->last_eob_len = 8; /* enough lookahead for inflate */
++#ifdef DEBUG_ZLIB
++ s->bits_sent = 0L;
++#endif
++
++ /* Initialize the first block of the first file: */
++ init_block(s);
++}
++
++/* ===========================================================================
++ * Initialize a new block.
++ */
++local void init_block(s)
++ deflate_state *s;
++{
++ int n; /* iterates over tree elements */
++
++ /* Initialize the trees. */
++ for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0;
++ for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0;
++ for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0;
++
++ s->dyn_ltree[END_BLOCK].Freq = 1;
++ s->opt_len = s->static_len = 0L;
++ s->last_lit = s->matches = 0;
++}
++
++#define SMALLEST 1
++/* Index within the heap array of least frequent node in the Huffman tree */
++
++
++/* ===========================================================================
++ * Remove the smallest element from the heap and recreate the heap with
++ * one less element. Updates heap and heap_len.
++ */
++#define pqremove(s, tree, top) \
++{\
++ top = s->heap[SMALLEST]; \
++ s->heap[SMALLEST] = s->heap[s->heap_len--]; \
++ pqdownheap(s, tree, SMALLEST); \
++}
++
++/* ===========================================================================
++ * Compares to subtrees, using the tree depth as tie breaker when
++ * the subtrees have equal frequency. This minimizes the worst case length.
++ */
++#define smaller(tree, n, m, depth) \
++ (tree[n].Freq < tree[m].Freq || \
++ (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m]))
++
++/* ===========================================================================
++ * Restore the heap property by moving down the tree starting at node k,
++ * exchanging a node with the smallest of its two sons if necessary, stopping
++ * when the heap property is re-established (each father smaller than its
++ * two sons).
++ */
++local void pqdownheap(s, tree, k)
++ deflate_state *s;
++ ct_data *tree; /* the tree to restore */
++ int k; /* node to move down */
++{
++ int v = s->heap[k];
++ int j = k << 1; /* left son of k */
++ while (j <= s->heap_len) {
++ /* Set j to the smallest of the two sons: */
++ if (j < s->heap_len &&
++ smaller(tree, s->heap[j+1], s->heap[j], s->depth)) {
++ j++;
++ }
++ /* Exit if v is smaller than both sons */
++ if (smaller(tree, v, s->heap[j], s->depth)) break;
++
++ /* Exchange v with the smallest son */
++ s->heap[k] = s->heap[j]; k = j;
++
++ /* And continue down the tree, setting j to the left son of k */
++ j <<= 1;
++ }
++ s->heap[k] = v;
++}
++
++/* ===========================================================================
++ * Compute the optimal bit lengths for a tree and update the total bit length
++ * for the current block.
++ * IN assertion: the fields freq and dad are set, heap[heap_max] and
++ * above are the tree nodes sorted by increasing frequency.
++ * OUT assertions: the field len is set to the optimal bit length, the
++ * array bl_count contains the frequencies for each bit length.
++ * The length opt_len is updated; static_len is also updated if stree is
++ * not null.
++ */
++local void gen_bitlen(s, desc)
++ deflate_state *s;
++ tree_desc *desc; /* the tree descriptor */
++{
++ ct_data *tree = desc->dyn_tree;
++ int max_code = desc->max_code;
++ ct_data *stree = desc->stat_desc->static_tree;
++ intf *extra = desc->stat_desc->extra_bits;
++ int base = desc->stat_desc->extra_base;
++ int max_length = desc->stat_desc->max_length;
++ int h; /* heap index */
++ int n, m; /* iterate over the tree elements */
++ int bits; /* bit length */
++ int xbits; /* extra bits */
++ ush f; /* frequency */
++ int overflow = 0; /* number of elements with bit length too large */
++
++ for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0;
++
++ /* In a first pass, compute the optimal bit lengths (which may
++ * overflow in the case of the bit length tree).
++ */
++ tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */
++
++ for (h = s->heap_max+1; h < HEAP_SIZE; h++) {
++ n = s->heap[h];
++ bits = tree[tree[n].Dad].Len + 1;
++ if (bits > max_length) bits = max_length, overflow++;
++ tree[n].Len = (ush)bits;
++ /* We overwrite tree[n].Dad which is no longer needed */
++
++ if (n > max_code) continue; /* not a leaf node */
++
++ s->bl_count[bits]++;
++ xbits = 0;
++ if (n >= base) xbits = extra[n-base];
++ f = tree[n].Freq;
++ s->opt_len += (ulg)f * (bits + xbits);
++ if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits);
++ }
++ if (overflow == 0) return;
++
++ Trace((stderr,"\nbit length overflow\n"));
++ /* This happens for example on obj2 and pic of the Calgary corpus */
++
++ /* Find the first bit length which could increase: */
++ do {
++ bits = max_length-1;
++ while (s->bl_count[bits] == 0) bits--;
++ s->bl_count[bits]--; /* move one leaf down the tree */
++ s->bl_count[bits+1] += 2; /* move one overflow item as its brother */
++ s->bl_count[max_length]--;
++ /* The brother of the overflow item also moves one step up,
++ * but this does not affect bl_count[max_length]
++ */
++ overflow -= 2;
++ } while (overflow > 0);
++
++ /* Now recompute all bit lengths, scanning in increasing frequency.
++ * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
++ * lengths instead of fixing only the wrong ones. This idea is taken
++ * from 'ar' written by Haruhiko Okumura.)
++ */
++ for (bits = max_length; bits != 0; bits--) {
++ n = s->bl_count[bits];
++ while (n != 0) {
++ m = s->heap[--h];
++ if (m > max_code) continue;
++ if (tree[m].Len != (unsigned) bits) {
++ Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
++ s->opt_len += ((long)bits - (long)tree[m].Len)
++ *(long)tree[m].Freq;
++ tree[m].Len = (ush)bits;
++ }
++ n--;
++ }
++ }
++}
++
++/* ===========================================================================
++ * Generate the codes for a given tree and bit counts (which need not be
++ * optimal).
++ * IN assertion: the array bl_count contains the bit length statistics for
++ * the given tree and the field len is set for all tree elements.
++ * OUT assertion: the field code is set for all tree elements of non
++ * zero code length.
++ */
++local void gen_codes (tree, max_code, bl_count)
++ ct_data *tree; /* the tree to decorate */
++ int max_code; /* largest code with non zero frequency */
++ ushf *bl_count; /* number of codes at each bit length */
++{
++ ush next_code[MAX_BITS+1]; /* next code value for each bit length */
++ ush code = 0; /* running code value */
++ int bits; /* bit index */
++ int n; /* code index */
++
++ /* The distribution counts are first used to generate the code values
++ * without bit reversal.
++ */
++ for (bits = 1; bits <= MAX_BITS; bits++) {
++ next_code[bits] = code = (code + bl_count[bits-1]) << 1;
++ }
++ /* Check that the bit counts in bl_count are consistent. The last code
++ * must be all ones.
++ */
++ Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
++ "inconsistent bit counts");
++ Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
++
++ for (n = 0; n <= max_code; n++) {
++ int len = tree[n].Len;
++ if (len == 0) continue;
++ /* Now reverse the bits */
++ tree[n].Code = bi_reverse(next_code[len]++, len);
++
++ Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
++ n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
++ }
++}
++
++/* ===========================================================================
++ * Construct one Huffman tree and assigns the code bit strings and lengths.
++ * Update the total bit length for the current block.
++ * IN assertion: the field freq is set for all tree elements.
++ * OUT assertions: the fields len and code are set to the optimal bit length
++ * and corresponding code. The length opt_len is updated; static_len is
++ * also updated if stree is not null. The field max_code is set.
++ */
++local void build_tree(s, desc)
++ deflate_state *s;
++ tree_desc *desc; /* the tree descriptor */
++{
++ ct_data *tree = desc->dyn_tree;
++ ct_data *stree = desc->stat_desc->static_tree;
++ int elems = desc->stat_desc->elems;
++ int n, m; /* iterate over heap elements */
++ int max_code = -1; /* largest code with non zero frequency */
++ int node; /* new node being created */
++
++ /* Construct the initial heap, with least frequent element in
++ * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
++ * heap[0] is not used.
++ */
++ s->heap_len = 0, s->heap_max = HEAP_SIZE;
++
++ for (n = 0; n < elems; n++) {
++ if (tree[n].Freq != 0) {
++ s->heap[++(s->heap_len)] = max_code = n;
++ s->depth[n] = 0;
++ } else {
++ tree[n].Len = 0;
++ }
++ }
++
++ /* The pkzip format requires that at least one distance code exists,
++ * and that at least one bit should be sent even if there is only one
++ * possible code. So to avoid special checks later on we force at least
++ * two codes of non zero frequency.
++ */
++ while (s->heap_len < 2) {
++ node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0);
++ tree[node].Freq = 1;
++ s->depth[node] = 0;
++ s->opt_len--; if (stree) s->static_len -= stree[node].Len;
++ /* node is 0 or 1 so it does not have extra bits */
++ }
++ desc->max_code = max_code;
++
++ /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
++ * establish sub-heaps of increasing lengths:
++ */
++ for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n);
++
++ /* Construct the Huffman tree by repeatedly combining the least two
++ * frequent nodes.
++ */
++ node = elems; /* next internal node of the tree */
++ do {
++ pqremove(s, tree, n); /* n = node of least frequency */
++ m = s->heap[SMALLEST]; /* m = node of next least frequency */
++
++ s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */
++ s->heap[--(s->heap_max)] = m;
++
++ /* Create a new node father of n and m */
++ tree[node].Freq = tree[n].Freq + tree[m].Freq;
++ s->depth[node] = (uch) (MAX(s->depth[n], s->depth[m]) + 1);
++ tree[n].Dad = tree[m].Dad = (ush)node;
++#ifdef DUMP_BL_TREE
++ if (tree == s->bl_tree) {
++ fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)",
++ node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq);
++ }
++#endif
++ /* and insert the new node in the heap */
++ s->heap[SMALLEST] = node++;
++ pqdownheap(s, tree, SMALLEST);
++
++ } while (s->heap_len >= 2);
++
++ s->heap[--(s->heap_max)] = s->heap[SMALLEST];
++
++ /* At this point, the fields freq and dad are set. We can now
++ * generate the bit lengths.
++ */
++ gen_bitlen(s, (tree_desc *)desc);
++
++ /* The field len is now set, we can generate the bit codes */
++ gen_codes ((ct_data *)tree, max_code, s->bl_count);
++}
++
++/* ===========================================================================
++ * Scan a literal or distance tree to determine the frequencies of the codes
++ * in the bit length tree.
++ */
++local void scan_tree (s, tree, max_code)
++ deflate_state *s;
++ ct_data *tree; /* the tree to be scanned */
++ int max_code; /* and its largest code of non zero frequency */
++{
++ int n; /* iterates over all tree elements */
++ int prevlen = -1; /* last emitted length */
++ int curlen; /* length of current code */
++ int nextlen = tree[0].Len; /* length of next code */
++ int count = 0; /* repeat count of the current code */
++ int max_count = 7; /* max repeat count */
++ int min_count = 4; /* min repeat count */
++
++ if (nextlen == 0) max_count = 138, min_count = 3;
++ tree[max_code+1].Len = (ush)0xffff; /* guard */
++
++ for (n = 0; n <= max_code; n++) {
++ curlen = nextlen; nextlen = tree[n+1].Len;
++ if (++count < max_count && curlen == nextlen) {
++ continue;
++ } else if (count < min_count) {
++ s->bl_tree[curlen].Freq += count;
++ } else if (curlen != 0) {
++ if (curlen != prevlen) s->bl_tree[curlen].Freq++;
++ s->bl_tree[REP_3_6].Freq++;
++ } else if (count <= 10) {
++ s->bl_tree[REPZ_3_10].Freq++;
++ } else {
++ s->bl_tree[REPZ_11_138].Freq++;
++ }
++ count = 0; prevlen = curlen;
++ if (nextlen == 0) {
++ max_count = 138, min_count = 3;
++ } else if (curlen == nextlen) {
++ max_count = 6, min_count = 3;
++ } else {
++ max_count = 7, min_count = 4;
++ }
++ }
++}
++
++/* ===========================================================================
++ * Send a literal or distance tree in compressed form, using the codes in
++ * bl_tree.
++ */
++local void send_tree (s, tree, max_code)
++ deflate_state *s;
++ ct_data *tree; /* the tree to be scanned */
++ int max_code; /* and its largest code of non zero frequency */
++{
++ int n; /* iterates over all tree elements */
++ int prevlen = -1; /* last emitted length */
++ int curlen; /* length of current code */
++ int nextlen = tree[0].Len; /* length of next code */
++ int count = 0; /* repeat count of the current code */
++ int max_count = 7; /* max repeat count */
++ int min_count = 4; /* min repeat count */
++
++ /* tree[max_code+1].Len = -1; */ /* guard already set */
++ if (nextlen == 0) max_count = 138, min_count = 3;
++
++ for (n = 0; n <= max_code; n++) {
++ curlen = nextlen; nextlen = tree[n+1].Len;
++ if (++count < max_count && curlen == nextlen) {
++ continue;
++ } else if (count < min_count) {
++ do { send_code(s, curlen, s->bl_tree); } while (--count != 0);
++
++ } else if (curlen != 0) {
++ if (curlen != prevlen) {
++ send_code(s, curlen, s->bl_tree); count--;
++ }
++ Assert(count >= 3 && count <= 6, " 3_6?");
++ send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2);
++
++ } else if (count <= 10) {
++ send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3);
++
++ } else {
++ send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7);
++ }
++ count = 0; prevlen = curlen;
++ if (nextlen == 0) {
++ max_count = 138, min_count = 3;
++ } else if (curlen == nextlen) {
++ max_count = 6, min_count = 3;
++ } else {
++ max_count = 7, min_count = 4;
++ }
++ }
++}
++
++/* ===========================================================================
++ * Construct the Huffman tree for the bit lengths and return the index in
++ * bl_order of the last bit length code to send.
++ */
++local int build_bl_tree(s)
++ deflate_state *s;
++{
++ int max_blindex; /* index of last bit length code of non zero freq */
++
++ /* Determine the bit length frequencies for literal and distance trees */
++ scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code);
++ scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code);
++
++ /* Build the bit length tree: */
++ build_tree(s, (tree_desc *)(&(s->bl_desc)));
++ /* opt_len now includes the length of the tree representations, except
++ * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
++ */
++
++ /* Determine the number of bit length codes to send. The pkzip format
++ * requires that at least 4 bit length codes be sent. (appnote.txt says
++ * 3 but the actual value used is 4.)
++ */
++ for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
++ if (s->bl_tree[bl_order[max_blindex]].Len != 0) break;
++ }
++ /* Update opt_len to include the bit length tree and counts */
++ s->opt_len += 3*(max_blindex+1) + 5+5+4;
++ Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
++ s->opt_len, s->static_len));
++
++ return max_blindex;
++}
++
++/* ===========================================================================
++ * Send the header for a block using dynamic Huffman trees: the counts, the
++ * lengths of the bit length codes, the literal tree and the distance tree.
++ * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
++ */
++local void send_all_trees(s, lcodes, dcodes, blcodes)
++ deflate_state *s;
++ int lcodes, dcodes, blcodes; /* number of codes for each tree */
++{
++ int rank; /* index in bl_order */
++
++ Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
++ Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
++ "too many codes");
++ Tracev((stderr, "\nbl counts: "));
++ send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
++ send_bits(s, dcodes-1, 5);
++ send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */
++ for (rank = 0; rank < blcodes; rank++) {
++ Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
++ send_bits(s, s->bl_tree[bl_order[rank]].Len, 3);
++ }
++ Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
++
++ send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */
++ Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
++
++ send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */
++ Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
++}
++
++/* ===========================================================================
++ * Send a stored block
++ */
++void _tr_stored_block(s, buf, stored_len, eof)
++ deflate_state *s;
++ charf *buf; /* input block */
++ ulg stored_len; /* length of input block */
++ int eof; /* true if this is the last block for a file */
++{
++ send_bits(s, (STORED_BLOCK<<1)+eof, 3); /* send block type */
++ s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L;
++ s->compressed_len += (stored_len + 4) << 3;
++
++ copy_block(s, buf, (unsigned)stored_len, 1); /* with header */
++}
++
++/* Send just the `stored block' type code without any length bytes or data.
++ */
++void _tr_stored_type_only(s)
++ deflate_state *s;
++{
++ send_bits(s, (STORED_BLOCK << 1), 3);
++ bi_windup(s);
++ s->compressed_len = (s->compressed_len + 3) & ~7L;
++}
++
++
++/* ===========================================================================
++ * Send one empty static block to give enough lookahead for inflate.
++ * This takes 10 bits, of which 7 may remain in the bit buffer.
++ * The current inflate code requires 9 bits of lookahead. If the
++ * last two codes for the previous block (real code plus EOB) were coded
++ * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode
++ * the last real code. In this case we send two empty static blocks instead
++ * of one. (There are no problems if the previous block is stored or fixed.)
++ * To simplify the code, we assume the worst case of last real code encoded
++ * on one bit only.
++ */
++void _tr_align(s)
++ deflate_state *s;
++{
++ send_bits(s, STATIC_TREES<<1, 3);
++ send_code(s, END_BLOCK, static_ltree);
++ s->compressed_len += 10L; /* 3 for block type, 7 for EOB */
++ bi_flush(s);
++ /* Of the 10 bits for the empty block, we have already sent
++ * (10 - bi_valid) bits. The lookahead for the last real code (before
++ * the EOB of the previous block) was thus at least one plus the length
++ * of the EOB plus what we have just sent of the empty static block.
++ */
++ if (1 + s->last_eob_len + 10 - s->bi_valid < 9) {
++ send_bits(s, STATIC_TREES<<1, 3);
++ send_code(s, END_BLOCK, static_ltree);
++ s->compressed_len += 10L;
++ bi_flush(s);
++ }
++ s->last_eob_len = 7;
++}
++
++/* ===========================================================================
++ * Determine the best encoding for the current block: dynamic trees, static
++ * trees or store, and output the encoded block to the zip file. This function
++ * returns the total compressed length for the file so far.
++ */
++ulg _tr_flush_block(s, buf, stored_len, eof)
++ deflate_state *s;
++ charf *buf; /* input block, or NULL if too old */
++ ulg stored_len; /* length of input block */
++ int eof; /* true if this is the last block for a file */
++{
++ ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */
++ int max_blindex = 0; /* index of last bit length code of non zero freq */
++
++ /* Build the Huffman trees unless a stored block is forced */
++ if (s->level > 0) {
++
++ /* Check if the file is ascii or binary */
++ if (s->data_type == Z_UNKNOWN) set_data_type(s);
++
++ /* Construct the literal and distance trees */
++ build_tree(s, (tree_desc *)(&(s->l_desc)));
++ Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
++ s->static_len));
++
++ build_tree(s, (tree_desc *)(&(s->d_desc)));
++ Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
++ s->static_len));
++ /* At this point, opt_len and static_len are the total bit lengths of
++ * the compressed block data, excluding the tree representations.
++ */
++
++ /* Build the bit length tree for the above two trees, and get the index
++ * in bl_order of the last bit length code to send.
++ */
++ max_blindex = build_bl_tree(s);
++
++ /* Determine the best encoding. Compute first the block length in bytes*/
++ opt_lenb = (s->opt_len+3+7)>>3;
++ static_lenb = (s->static_len+3+7)>>3;
++
++ Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
++ opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
++ s->last_lit));
++
++ if (static_lenb <= opt_lenb) opt_lenb = static_lenb;
++
++ } else {
++ Assert(buf != (char*)0, "lost buf");
++ opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
++ }
++
++ /* If compression failed and this is the first and last block,
++ * and if the .zip file can be seeked (to rewrite the local header),
++ * the whole file is transformed into a stored file:
++ */
++#ifdef STORED_FILE_OK
++# ifdef FORCE_STORED_FILE
++ if (eof && s->compressed_len == 0L) { /* force stored file */
++# else
++ if (stored_len <= opt_lenb && eof && s->compressed_len==0L && seekable()) {
++# endif
++ /* Since LIT_BUFSIZE <= 2*WSIZE, the input data must be there: */
++ if (buf == (charf*)0) error ("block vanished");
++
++ copy_block(s, buf, (unsigned)stored_len, 0); /* without header */
++ s->compressed_len = stored_len << 3;
++ s->method = STORED;
++ } else
++#endif /* STORED_FILE_OK */
++
++#ifdef FORCE_STORED
++ if (buf != (char*)0) { /* force stored block */
++#else
++ if (stored_len+4 <= opt_lenb && buf != (char*)0) {
++ /* 4: two words for the lengths */
++#endif
++ /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
++ * Otherwise we can't have processed more than WSIZE input bytes since
++ * the last block flush, because compression would have been
++ * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
++ * transform a block into a stored block.
++ */
++ _tr_stored_block(s, buf, stored_len, eof);
++
++#ifdef FORCE_STATIC
++ } else if (static_lenb >= 0) { /* force static trees */
++#else
++ } else if (static_lenb == opt_lenb) {
++#endif
++ send_bits(s, (STATIC_TREES<<1)+eof, 3);
++ compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree);
++ s->compressed_len += 3 + s->static_len;
++ } else {
++ send_bits(s, (DYN_TREES<<1)+eof, 3);
++ send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1,
++ max_blindex+1);
++ compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree);
++ s->compressed_len += 3 + s->opt_len;
++ }
++ Assert (s->compressed_len == s->bits_sent, "bad compressed size");
++ init_block(s);
++
++ if (eof) {
++ bi_windup(s);
++ s->compressed_len += 7; /* align on byte boundary */
++ }
++ Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
++ s->compressed_len-7*eof));
++
++ return s->compressed_len >> 3;
++}
++
++/* ===========================================================================
++ * Save the match info and tally the frequency counts. Return true if
++ * the current block must be flushed.
++ */
++int _tr_tally (s, dist, lc)
++ deflate_state *s;
++ unsigned dist; /* distance of matched string */
++ unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
++{
++ s->d_buf[s->last_lit] = (ush)dist;
++ s->l_buf[s->last_lit++] = (uch)lc;
++ if (dist == 0) {
++ /* lc is the unmatched char */
++ s->dyn_ltree[lc].Freq++;
++ } else {
++ s->matches++;
++ /* Here, lc is the match length - MIN_MATCH */
++ dist--; /* dist = match distance - 1 */
++ Assert((ush)dist < (ush)MAX_DIST(s) &&
++ (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
++ (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match");
++
++ s->dyn_ltree[length_code[lc]+LITERALS+1].Freq++;
++ s->dyn_dtree[d_code(dist)].Freq++;
++ }
++
++ /* Try to guess if it is profitable to stop the current block here */
++ if (s->level > 2 && (s->last_lit & 0xfff) == 0) {
++ /* Compute an upper bound for the compressed length */
++ ulg out_length = (ulg)s->last_lit*8L;
++ ulg in_length = (ulg)((long)s->strstart - s->block_start);
++ int dcode;
++ for (dcode = 0; dcode < D_CODES; dcode++) {
++ out_length += (ulg)s->dyn_dtree[dcode].Freq *
++ (5L+extra_dbits[dcode]);
++ }
++ out_length >>= 3;
++ Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
++ s->last_lit, in_length, out_length,
++ 100L - out_length*100L/in_length));
++ if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1;
++ }
++ return (s->last_lit == s->lit_bufsize-1);
++ /* We avoid equality with lit_bufsize because of wraparound at 64K
++ * on 16 bit machines and because stored blocks are restricted to
++ * 64K-1 bytes.
++ */
++}
++
++/* ===========================================================================
++ * Send the block data compressed using the given Huffman trees
++ */
++local void compress_block(s, ltree, dtree)
++ deflate_state *s;
++ ct_data *ltree; /* literal tree */
++ ct_data *dtree; /* distance tree */
++{
++ unsigned dist; /* distance of matched string */
++ int lc; /* match length or unmatched char (if dist == 0) */
++ unsigned lx = 0; /* running index in l_buf */
++ unsigned code; /* the code to send */
++ int extra; /* number of extra bits to send */
++
++ if (s->last_lit != 0) do {
++ dist = s->d_buf[lx];
++ lc = s->l_buf[lx++];
++ if (dist == 0) {
++ send_code(s, lc, ltree); /* send a literal byte */
++ Tracecv(isgraph(lc), (stderr," '%c' ", lc));
++ } else {
++ /* Here, lc is the match length - MIN_MATCH */
++ code = length_code[lc];
++ send_code(s, code+LITERALS+1, ltree); /* send the length code */
++ extra = extra_lbits[code];
++ if (extra != 0) {
++ lc -= base_length[code];
++ send_bits(s, lc, extra); /* send the extra length bits */
++ }
++ dist--; /* dist is now the match distance - 1 */
++ code = d_code(dist);
++ Assert (code < D_CODES, "bad d_code");
++
++ send_code(s, code, dtree); /* send the distance code */
++ extra = extra_dbits[code];
++ if (extra != 0) {
++ dist -= base_dist[code];
++ send_bits(s, dist, extra); /* send the extra distance bits */
++ }
++ } /* literal or match pair ? */
++
++ /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
++ Assert(s->pending < s->lit_bufsize + 2*lx, "pendingBuf overflow");
++
++ } while (lx < s->last_lit);
++
++ send_code(s, END_BLOCK, ltree);
++ s->last_eob_len = ltree[END_BLOCK].Len;
++}
++
++/* ===========================================================================
++ * Set the data type to ASCII or BINARY, using a crude approximation:
++ * binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise.
++ * IN assertion: the fields freq of dyn_ltree are set and the total of all
++ * frequencies does not exceed 64K (to fit in an int on 16 bit machines).
++ */
++local void set_data_type(s)
++ deflate_state *s;
++{
++ int n = 0;
++ unsigned ascii_freq = 0;
++ unsigned bin_freq = 0;
++ while (n < 7) bin_freq += s->dyn_ltree[n++].Freq;
++ while (n < 128) ascii_freq += s->dyn_ltree[n++].Freq;
++ while (n < LITERALS) bin_freq += s->dyn_ltree[n++].Freq;
++ s->data_type = (Byte)(bin_freq > (ascii_freq >> 2) ? Z_BINARY : Z_ASCII);
++}
++
++/* ===========================================================================
++ * Reverse the first len bits of a code, using straightforward code (a faster
++ * method would use a table)
++ * IN assertion: 1 <= len <= 15
++ */
++local unsigned bi_reverse(code, len)
++ unsigned code; /* the value to invert */
++ int len; /* its bit length */
++{
++ register unsigned res = 0;
++ do {
++ res |= code & 1;
++ code >>= 1, res <<= 1;
++ } while (--len > 0);
++ return res >> 1;
++}
++
++/* ===========================================================================
++ * Flush the bit buffer, keeping at most 7 bits in it.
++ */
++local void bi_flush(s)
++ deflate_state *s;
++{
++ if (s->bi_valid == 16) {
++ put_short(s, s->bi_buf);
++ s->bi_buf = 0;
++ s->bi_valid = 0;
++ } else if (s->bi_valid >= 8) {
++ put_byte(s, (Byte)s->bi_buf);
++ s->bi_buf >>= 8;
++ s->bi_valid -= 8;
++ }
++}
++
++/* ===========================================================================
++ * Flush the bit buffer and align the output on a byte boundary
++ */
++local void bi_windup(s)
++ deflate_state *s;
++{
++ if (s->bi_valid > 8) {
++ put_short(s, s->bi_buf);
++ } else if (s->bi_valid > 0) {
++ put_byte(s, (Byte)s->bi_buf);
++ }
++ s->bi_buf = 0;
++ s->bi_valid = 0;
++#ifdef DEBUG_ZLIB
++ s->bits_sent = (s->bits_sent+7) & ~7;
++#endif
++}
++
++/* ===========================================================================
++ * Copy a stored block, storing first the length and its
++ * one's complement if requested.
++ */
++local void copy_block(s, buf, len, header)
++ deflate_state *s;
++ charf *buf; /* the input data */
++ unsigned len; /* its length */
++ int header; /* true if block header must be written */
++{
++ bi_windup(s); /* align on byte boundary */
++ s->last_eob_len = 8; /* enough lookahead for inflate */
++
++ if (header) {
++ put_short(s, (ush)len);
++ put_short(s, (ush)~len);
++#ifdef DEBUG_ZLIB
++ s->bits_sent += 2*16;
++#endif
++ }
++#ifdef DEBUG_ZLIB
++ s->bits_sent += (ulg)len<<3;
++#endif
++ /* bundle up the put_byte(s, *buf++) calls */
++ zmemcpy(&s->pending_buf[s->pending], buf, len);
++ s->pending += len;
++}
++/* --- trees.c */
++
++/* +++ inflate.c */
++/* inflate.c -- zlib interface to inflate modules
++ * Copyright (C) 1995-1996 Mark Adler
++ * For conditions of distribution and use, see copyright notice in zlib.h
++ */
++
++/* #include "zutil.h" */
++
++/* +++ infblock.h */
++/* infblock.h -- header to use infblock.c
++ * Copyright (C) 1995-1996 Mark Adler
++ * For conditions of distribution and use, see copyright notice in zlib.h
++ */
++
++/* WARNING: this file should *not* be used by applications. It is
++ part of the implementation of the compression library and is
++ subject to change. Applications should only use zlib.h.
++ */
++
++struct inflate_blocks_state;
++typedef struct inflate_blocks_state FAR inflate_blocks_statef;
++
++extern inflate_blocks_statef * inflate_blocks_new OF((
++ z_streamp z,
++ check_func c, /* check function */
++ uInt w)); /* window size */
++
++extern int inflate_blocks OF((
++ inflate_blocks_statef *,
++ z_streamp ,
++ int)); /* initial return code */
++
++extern void inflate_blocks_reset OF((
++ inflate_blocks_statef *,
++ z_streamp ,
++ uLongf *)); /* check value on output */
++
++extern int inflate_blocks_free OF((
++ inflate_blocks_statef *,
++ z_streamp ,
++ uLongf *)); /* check value on output */
++
++extern void inflate_set_dictionary OF((
++ inflate_blocks_statef *s,
++ const Bytef *d, /* dictionary */
++ uInt n)); /* dictionary length */
++
++extern int inflate_addhistory OF((
++ inflate_blocks_statef *,
++ z_streamp));
++
++extern int inflate_packet_flush OF((
++ inflate_blocks_statef *));
++/* --- infblock.h */
++
++#ifndef NO_DUMMY_DECL
++struct inflate_blocks_state {int dummy;}; /* for buggy compilers */
++#endif
++
++/* inflate private state */
++struct internal_state {
++
++ /* mode */
++ enum {
++ METHOD, /* waiting for method byte */
++ FLAG, /* waiting for flag byte */
++ DICT4, /* four dictionary check bytes to go */
++ DICT3, /* three dictionary check bytes to go */
++ DICT2, /* two dictionary check bytes to go */
++ DICT1, /* one dictionary check byte to go */
++ DICT0, /* waiting for inflateSetDictionary */
++ BLOCKS, /* decompressing blocks */
++ CHECK4, /* four check bytes to go */
++ CHECK3, /* three check bytes to go */
++ CHECK2, /* two check bytes to go */
++ CHECK1, /* one check byte to go */
++ DONE, /* finished check, done */
++ BAD} /* got an error--stay here */
++ mode; /* current inflate mode */
++
++ /* mode dependent information */
++ union {
++ uInt method; /* if FLAGS, method byte */
++ struct {
++ uLong was; /* computed check value */
++ uLong need; /* stream check value */
++ } check; /* if CHECK, check values to compare */
++ uInt marker; /* if BAD, inflateSync's marker bytes count */
++ } sub; /* submode */
++
++ /* mode independent information */
++ int nowrap; /* flag for no wrapper */
++ uInt wbits; /* log2(window size) (8..15, defaults to 15) */
++ inflate_blocks_statef
++ *blocks; /* current inflate_blocks state */
++
++};
++
++
++int inflateReset(z)
++z_streamp z;
++{
++ uLong c;
++
++ if (z == Z_NULL || z->state == Z_NULL)
++ return Z_STREAM_ERROR;
++ z->total_in = z->total_out = 0;
++ z->msg = Z_NULL;
++ z->state->mode = z->state->nowrap ? BLOCKS : METHOD;
++ inflate_blocks_reset(z->state->blocks, z, &c);
++ Trace((stderr, "inflate: reset\n"));
++ return Z_OK;
++}
++
++
++int inflateEnd(z)
++z_streamp z;
++{
++ uLong c;
++
++ if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL)
++ return Z_STREAM_ERROR;
++ if (z->state->blocks != Z_NULL)
++ inflate_blocks_free(z->state->blocks, z, &c);
++ ZFREE(z, z->state);
++ z->state = Z_NULL;
++ Trace((stderr, "inflate: end\n"));
++ return Z_OK;
++}
++
++
++int inflateInit2_(z, w, version, stream_size)
++z_streamp z;
++int w;
++const char *version;
++int stream_size;
++{
++ if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
++ stream_size != sizeof(z_stream))
++ return Z_VERSION_ERROR;
++
++ /* initialize state */
++ if (z == Z_NULL)
++ return Z_STREAM_ERROR;
++ z->msg = Z_NULL;
++#ifndef NO_ZCFUNCS
++ if (z->zalloc == Z_NULL)
++ {
++ z->zalloc = zcalloc;
++ z->opaque = (voidpf)0;
++ }
++ if (z->zfree == Z_NULL) z->zfree = zcfree;
++#endif
++ if ((z->state = (struct internal_state FAR *)
++ ZALLOC(z,1,sizeof(struct internal_state))) == Z_NULL)
++ return Z_MEM_ERROR;
++ z->state->blocks = Z_NULL;
++
++ /* handle undocumented nowrap option (no zlib header or check) */
++ z->state->nowrap = 0;
++ if (w < 0)
++ {
++ w = - w;
++ z->state->nowrap = 1;
++ }
++
++ /* set window size */
++ if (w < 8 || w > 15)
++ {
++ inflateEnd(z);
++ return Z_STREAM_ERROR;
++ }
++ z->state->wbits = (uInt)w;
++
++ /* create inflate_blocks state */
++ if ((z->state->blocks =
++ inflate_blocks_new(z, z->state->nowrap ? Z_NULL : adler32, (uInt)1 << w))
++ == Z_NULL)
++ {
++ inflateEnd(z);
++ return Z_MEM_ERROR;
++ }
++ Trace((stderr, "inflate: allocated\n"));
++
++ /* reset state */
++ inflateReset(z);
++ return Z_OK;
++}
++
++
++int inflateInit_(z, version, stream_size)
++z_streamp z;
++const char *version;
++int stream_size;
++{
++ return inflateInit2_(z, DEF_WBITS, version, stream_size);
++}
++
++
++#define NEEDBYTE {if(z->avail_in==0)goto empty;r=Z_OK;}
++#define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++)
++
++int inflate(z, f)
++z_streamp z;
++int f;
++{
++ int r;
++ uInt b;
++
++ if (z == Z_NULL || z->state == Z_NULL || z->next_in == Z_NULL || f < 0)
++ return Z_STREAM_ERROR;
++ r = Z_BUF_ERROR;
++ while (1) switch (z->state->mode)
++ {
++ case METHOD:
++ NEEDBYTE
++ if (((z->state->sub.method = NEXTBYTE) & 0xf) != Z_DEFLATED)
++ {
++ z->state->mode = BAD;
++ z->msg = (char*)"unknown compression method";
++ z->state->sub.marker = 5; /* can't try inflateSync */
++ break;
++ }
++ if ((z->state->sub.method >> 4) + 8 > z->state->wbits)
++ {
++ z->state->mode = BAD;
++ z->msg = (char*)"invalid window size";
++ z->state->sub.marker = 5; /* can't try inflateSync */
++ break;
++ }
++ z->state->mode = FLAG;
++ case FLAG:
++ NEEDBYTE
++ b = NEXTBYTE;
++ if (((z->state->sub.method << 8) + b) % 31)
++ {
++ z->state->mode = BAD;
++ z->msg = (char*)"incorrect header check";
++ z->state->sub.marker = 5; /* can't try inflateSync */
++ break;
++ }
++ Trace((stderr, "inflate: zlib header ok\n"));
++ if (!(b & PRESET_DICT))
++ {
++ z->state->mode = BLOCKS;
++ break;
++ }
++ z->state->mode = DICT4;
++ case DICT4:
++ NEEDBYTE
++ z->state->sub.check.need = (uLong)NEXTBYTE << 24;
++ z->state->mode = DICT3;
++ case DICT3:
++ NEEDBYTE
++ z->state->sub.check.need += (uLong)NEXTBYTE << 16;
++ z->state->mode = DICT2;
++ case DICT2:
++ NEEDBYTE
++ z->state->sub.check.need += (uLong)NEXTBYTE << 8;
++ z->state->mode = DICT1;
++ case DICT1:
++ NEEDBYTE
++ z->state->sub.check.need += (uLong)NEXTBYTE;
++ z->adler = z->state->sub.check.need;
++ z->state->mode = DICT0;
++ return Z_NEED_DICT;
++ case DICT0:
++ z->state->mode = BAD;
++ z->msg = (char*)"need dictionary";
++ z->state->sub.marker = 0; /* can try inflateSync */
++ return Z_STREAM_ERROR;
++ case BLOCKS:
++ r = inflate_blocks(z->state->blocks, z, r);
++ if (f == Z_PACKET_FLUSH && z->avail_in == 0 && z->avail_out != 0)
++ r = inflate_packet_flush(z->state->blocks);
++ if (r == Z_DATA_ERROR)
++ {
++ z->state->mode = BAD;
++ z->state->sub.marker = 0; /* can try inflateSync */
++ break;
++ }
++ if (r != Z_STREAM_END)
++ return r;
++ r = Z_OK;
++ inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was);
++ if (z->state->nowrap)
++ {
++ z->state->mode = DONE;
++ break;
++ }
++ z->state->mode = CHECK4;
++ case CHECK4:
++ NEEDBYTE
++ z->state->sub.check.need = (uLong)NEXTBYTE << 24;
++ z->state->mode = CHECK3;
++ case CHECK3:
++ NEEDBYTE
++ z->state->sub.check.need += (uLong)NEXTBYTE << 16;
++ z->state->mode = CHECK2;
++ case CHECK2:
++ NEEDBYTE
++ z->state->sub.check.need += (uLong)NEXTBYTE << 8;
++ z->state->mode = CHECK1;
++ case CHECK1:
++ NEEDBYTE
++ z->state->sub.check.need += (uLong)NEXTBYTE;
++
++ if (z->state->sub.check.was != z->state->sub.check.need)
++ {
++ z->state->mode = BAD;
++ z->msg = (char*)"incorrect data check";
++ z->state->sub.marker = 5; /* can't try inflateSync */
++ break;
++ }
++ Trace((stderr, "inflate: zlib check ok\n"));
++ z->state->mode = DONE;
++ case DONE:
++ return Z_STREAM_END;
++ case BAD:
++ return Z_DATA_ERROR;
++ default:
++ return Z_STREAM_ERROR;
++ }
++
++ empty:
++ if (f != Z_PACKET_FLUSH)
++ return r;
++ z->state->mode = BAD;
++ z->msg = (char *)"need more for packet flush";
++ z->state->sub.marker = 0; /* can try inflateSync */
++ return Z_DATA_ERROR;
++}
++
++
++int inflateSetDictionary(z, dictionary, dictLength)
++z_streamp z;
++const Bytef *dictionary;
++uInt dictLength;
++{
++ uInt length = dictLength;
++
++ if (z == Z_NULL || z->state == Z_NULL || z->state->mode != DICT0)
++ return Z_STREAM_ERROR;
++
++ if (adler32(1L, dictionary, dictLength) != z->adler) return Z_DATA_ERROR;
++ z->adler = 1L;
++
++ if (length >= ((uInt)1<<z->state->wbits))
++ {
++ length = (1<<z->state->wbits)-1;
++ dictionary += dictLength - length;
++ }
++ inflate_set_dictionary(z->state->blocks, dictionary, length);
++ z->state->mode = BLOCKS;
++ return Z_OK;
++}
++
++/*
++ * This subroutine adds the data at next_in/avail_in to the output history
++ * without performing any output. The output buffer must be "caught up";
++ * i.e. no pending output (hence s->read equals s->write), and the state must
++ * be BLOCKS (i.e. we should be willing to see the start of a series of
++ * BLOCKS). On exit, the output will also be caught up, and the checksum
++ * will have been updated if need be.
++ */
++
++int inflateIncomp(z)
++z_stream *z;
++{
++ if (z->state->mode != BLOCKS)
++ return Z_DATA_ERROR;
++ return inflate_addhistory(z->state->blocks, z);
++}
++
++
++int inflateSync(z)
++z_streamp z;
++{
++ uInt n; /* number of bytes to look at */
++ Bytef *p; /* pointer to bytes */
++ uInt m; /* number of marker bytes found in a row */
++ uLong r, w; /* temporaries to save total_in and total_out */
++
++ /* set up */
++ if (z == Z_NULL || z->state == Z_NULL)
++ return Z_STREAM_ERROR;
++ if (z->state->mode != BAD)
++ {
++ z->state->mode = BAD;
++ z->state->sub.marker = 0;
++ }
++ if ((n = z->avail_in) == 0)
++ return Z_BUF_ERROR;
++ p = z->next_in;
++ m = z->state->sub.marker;
++
++ /* search */
++ while (n && m < 4)
++ {
++ if (*p == (Byte)(m < 2 ? 0 : 0xff))
++ m++;
++ else if (*p)
++ m = 0;
++ else
++ m = 4 - m;
++ p++, n--;
++ }
++
++ /* restore */
++ z->total_in += p - z->next_in;
++ z->next_in = p;
++ z->avail_in = n;
++ z->state->sub.marker = m;
++
++ /* return no joy or set up to restart on a new block */
++ if (m != 4)
++ return Z_DATA_ERROR;
++ r = z->total_in; w = z->total_out;
++ inflateReset(z);
++ z->total_in = r; z->total_out = w;
++ z->state->mode = BLOCKS;
++ return Z_OK;
++}
++
++#undef NEEDBYTE
++#undef NEXTBYTE
++/* --- inflate.c */
++
++/* +++ infblock.c */
++/* infblock.c -- interpret and process block types to last block
++ * Copyright (C) 1995-1996 Mark Adler
++ * For conditions of distribution and use, see copyright notice in zlib.h
++ */
++
++/* #include "zutil.h" */
++/* #include "infblock.h" */
++
++/* +++ inftrees.h */
++/* inftrees.h -- header to use inftrees.c
++ * Copyright (C) 1995-1996 Mark Adler
++ * For conditions of distribution and use, see copyright notice in zlib.h
++ */
++
++/* WARNING: this file should *not* be used by applications. It is
++ part of the implementation of the compression library and is
++ subject to change. Applications should only use zlib.h.
++ */
++
++/* Huffman code lookup table entry--this entry is four bytes for machines
++ that have 16-bit pointers (e.g. PC's in the small or medium model). */
++
++typedef struct inflate_huft_s FAR inflate_huft;
++
++struct inflate_huft_s {
++ union {
++ struct {
++ Byte Exop; /* number of extra bits or operation */
++ Byte Bits; /* number of bits in this code or subcode */
++ } what;
++ Bytef *pad; /* pad structure to a power of 2 (4 bytes for */
++ } word; /* 16-bit, 8 bytes for 32-bit machines) */
++ union {
++ uInt Base; /* literal, length base, or distance base */
++ inflate_huft *Next; /* pointer to next level of table */
++ } more;
++};
++
++#ifdef DEBUG_ZLIB
++ extern uInt inflate_hufts;
++#endif
++
++extern int inflate_trees_bits OF((
++ uIntf *, /* 19 code lengths */
++ uIntf *, /* bits tree desired/actual depth */
++ inflate_huft * FAR *, /* bits tree result */
++ z_streamp )); /* for zalloc, zfree functions */
++
++extern int inflate_trees_dynamic OF((
++ uInt, /* number of literal/length codes */
++ uInt, /* number of distance codes */
++ uIntf *, /* that many (total) code lengths */
++ uIntf *, /* literal desired/actual bit depth */
++ uIntf *, /* distance desired/actual bit depth */
++ inflate_huft * FAR *, /* literal/length tree result */
++ inflate_huft * FAR *, /* distance tree result */
++ z_streamp )); /* for zalloc, zfree functions */
++
++extern int inflate_trees_fixed OF((
++ uIntf *, /* literal desired/actual bit depth */
++ uIntf *, /* distance desired/actual bit depth */
++ inflate_huft * FAR *, /* literal/length tree result */
++ inflate_huft * FAR *)); /* distance tree result */
++
++extern int inflate_trees_free OF((
++ inflate_huft *, /* tables to free */
++ z_streamp )); /* for zfree function */
++
++/* --- inftrees.h */
++
++/* +++ infcodes.h */
++/* infcodes.h -- header to use infcodes.c
++ * Copyright (C) 1995-1996 Mark Adler
++ * For conditions of distribution and use, see copyright notice in zlib.h
++ */
++
++/* WARNING: this file should *not* be used by applications. It is
++ part of the implementation of the compression library and is
++ subject to change. Applications should only use zlib.h.
++ */
++
++struct inflate_codes_state;
++typedef struct inflate_codes_state FAR inflate_codes_statef;
++
++extern inflate_codes_statef *inflate_codes_new OF((
++ uInt, uInt,
++ inflate_huft *, inflate_huft *,
++ z_streamp ));
++
++extern int inflate_codes OF((
++ inflate_blocks_statef *,
++ z_streamp ,
++ int));
++
++extern void inflate_codes_free OF((
++ inflate_codes_statef *,
++ z_streamp ));
++
++/* --- infcodes.h */
++
++/* +++ infutil.h */
++/* infutil.h -- types and macros common to blocks and codes
++ * Copyright (C) 1995-1996 Mark Adler
++ * For conditions of distribution and use, see copyright notice in zlib.h
++ */
++
++/* WARNING: this file should *not* be used by applications. It is
++ part of the implementation of the compression library and is
++ subject to change. Applications should only use zlib.h.
++ */
++
++#ifndef _INFUTIL_H
++#define _INFUTIL_H
++
++typedef enum {
++ TYPE, /* get type bits (3, including end bit) */
++ LENS, /* get lengths for stored */
++ STORED, /* processing stored block */
++ TABLE, /* get table lengths */
++ BTREE, /* get bit lengths tree for a dynamic block */
++ DTREE, /* get length, distance trees for a dynamic block */
++ CODES, /* processing fixed or dynamic block */
++ DRY, /* output remaining window bytes */
++ DONEB, /* finished last block, done */
++ BADB} /* got a data error--stuck here */
++inflate_block_mode;
++
++/* inflate blocks semi-private state */
++struct inflate_blocks_state {
++
++ /* mode */
++ inflate_block_mode mode; /* current inflate_block mode */
++
++ /* mode dependent information */
++ union {
++ uInt left; /* if STORED, bytes left to copy */
++ struct {
++ uInt table; /* table lengths (14 bits) */
++ uInt index; /* index into blens (or border) */
++ uIntf *blens; /* bit lengths of codes */
++ uInt bb; /* bit length tree depth */
++ inflate_huft *tb; /* bit length decoding tree */
++ } trees; /* if DTREE, decoding info for trees */
++ struct {
++ inflate_huft *tl;
++ inflate_huft *td; /* trees to free */
++ inflate_codes_statef
++ *codes;
++ } decode; /* if CODES, current state */
++ } sub; /* submode */
++ uInt last; /* true if this block is the last block */
++
++ /* mode independent information */
++ uInt bitk; /* bits in bit buffer */
++ uLong bitb; /* bit buffer */
++ Bytef *window; /* sliding window */
++ Bytef *end; /* one byte after sliding window */
++ Bytef *read; /* window read pointer */
++ Bytef *write; /* window write pointer */
++ check_func checkfn; /* check function */
++ uLong check; /* check on output */
++
++};
++
++
++/* defines for inflate input/output */
++/* update pointers and return */
++#define UPDBITS {s->bitb=b;s->bitk=k;}
++#define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;}
++#define UPDOUT {s->write=q;}
++#define UPDATE {UPDBITS UPDIN UPDOUT}
++#define LEAVE {UPDATE return inflate_flush(s,z,r);}
++/* get bytes and bits */
++#define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;}
++#define NEEDBYTE {if(n)r=Z_OK;else LEAVE}
++#define NEXTBYTE (n--,*p++)
++#define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<<k;k+=8;}}
++#define DUMPBITS(j) {b>>=(j);k-=(j);}
++/* output bytes */
++#define WAVAIL (uInt)(q<s->read?s->read-q-1:s->end-q)
++#define LOADOUT {q=s->write;m=(uInt)WAVAIL;}
++#define WWRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(uInt)WAVAIL;}}
++#define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT}
++#define NEEDOUT {if(m==0){WWRAP if(m==0){FLUSH WWRAP if(m==0) LEAVE}}r=Z_OK;}
++#define OUTBYTE(a) {*q++=(Byte)(a);m--;}
++/* load local pointers */
++#define LOAD {LOADIN LOADOUT}
++
++/* masks for lower bits (size given to avoid silly warnings with Visual C++) */
++extern uInt inflate_mask[17];
++
++/* copy as much as possible from the sliding window to the output area */
++extern int inflate_flush OF((
++ inflate_blocks_statef *,
++ z_streamp ,
++ int));
++
++#ifndef NO_DUMMY_DECL
++struct internal_state {int dummy;}; /* for buggy compilers */
++#endif
++
++#endif
++/* --- infutil.h */
++
++#ifndef NO_DUMMY_DECL
++struct inflate_codes_state {int dummy;}; /* for buggy compilers */
++#endif
++
++/* Table for deflate from PKZIP's appnote.txt. */
++local const uInt border[] = { /* Order of the bit length code lengths */
++ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
++
++/*
++ Notes beyond the 1.93a appnote.txt:
++
++ 1. Distance pointers never point before the beginning of the output
++ stream.
++ 2. Distance pointers can point back across blocks, up to 32k away.
++ 3. There is an implied maximum of 7 bits for the bit length table and
++ 15 bits for the actual data.
++ 4. If only one code exists, then it is encoded using one bit. (Zero
++ would be more efficient, but perhaps a little confusing.) If two
++ codes exist, they are coded using one bit each (0 and 1).
++ 5. There is no way of sending zero distance codes--a dummy must be
++ sent if there are none. (History: a pre 2.0 version of PKZIP would
++ store blocks with no distance codes, but this was discovered to be
++ too harsh a criterion.) Valid only for 1.93a. 2.04c does allow
++ zero distance codes, which is sent as one code of zero bits in
++ length.
++ 6. There are up to 286 literal/length codes. Code 256 represents the
++ end-of-block. Note however that the static length tree defines
++ 288 codes just to fill out the Huffman codes. Codes 286 and 287
++ cannot be used though, since there is no length base or extra bits
++ defined for them. Similarily, there are up to 30 distance codes.
++ However, static trees define 32 codes (all 5 bits) to fill out the
++ Huffman codes, but the last two had better not show up in the data.
++ 7. Unzip can check dynamic Huffman blocks for complete code sets.
++ The exception is that a single code would not be complete (see #4).
++ 8. The five bits following the block type is really the number of
++ literal codes sent minus 257.
++ 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits
++ (1+6+6). Therefore, to output three times the length, you output
++ three codes (1+1+1), whereas to output four times the same length,
++ you only need two codes (1+3). Hmm.
++ 10. In the tree reconstruction algorithm, Code = Code + Increment
++ only if BitLength(i) is not zero. (Pretty obvious.)
++ 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19)
++ 12. Note: length code 284 can represent 227-258, but length code 285
++ really is 258. The last length deserves its own, short code
++ since it gets used a lot in very redundant files. The length
++ 258 is special since 258 - 3 (the min match length) is 255.
++ 13. The literal/length and distance code bit lengths are read as a
++ single stream of lengths. It is possible (and advantageous) for
++ a repeat code (16, 17, or 18) to go across the boundary between
++ the two sets of lengths.
++ */
++
++
++void inflate_blocks_reset(s, z, c)
++inflate_blocks_statef *s;
++z_streamp z;
++uLongf *c;
++{
++ if (s->checkfn != Z_NULL)
++ *c = s->check;
++ if (s->mode == BTREE || s->mode == DTREE)
++ ZFREE(z, s->sub.trees.blens);
++ if (s->mode == CODES)
++ {
++ inflate_codes_free(s->sub.decode.codes, z);
++ inflate_trees_free(s->sub.decode.td, z);
++ inflate_trees_free(s->sub.decode.tl, z);
++ }
++ s->mode = TYPE;
++ s->bitk = 0;
++ s->bitb = 0;
++ s->read = s->write = s->window;
++ if (s->checkfn != Z_NULL)
++ z->adler = s->check = (*s->checkfn)(0L, Z_NULL, 0);
++ Trace((stderr, "inflate: blocks reset\n"));
++}
++
++
++inflate_blocks_statef *inflate_blocks_new(z, c, w)
++z_streamp z;
++check_func c;
++uInt w;
++{
++ inflate_blocks_statef *s;
++
++ if ((s = (inflate_blocks_statef *)ZALLOC
++ (z,1,sizeof(struct inflate_blocks_state))) == Z_NULL)
++ return s;
++ if ((s->window = (Bytef *)ZALLOC(z, 1, w)) == Z_NULL)
++ {
++ ZFREE(z, s);
++ return Z_NULL;
++ }
++ s->end = s->window + w;
++ s->checkfn = c;
++ s->mode = TYPE;
++ Trace((stderr, "inflate: blocks allocated\n"));
++ inflate_blocks_reset(s, z, &s->check);
++ return s;
++}
++
++
++#ifdef DEBUG_ZLIB
++ extern uInt inflate_hufts;
++#endif
++int inflate_blocks(s, z, r)
++inflate_blocks_statef *s;
++z_streamp z;
++int r;
++{
++ uInt t; /* temporary storage */
++ uLong b; /* bit buffer */
++ uInt k; /* bits in bit buffer */
++ Bytef *p; /* input data pointer */
++ uInt n; /* bytes available there */
++ Bytef *q; /* output window write pointer */
++ uInt m; /* bytes to end of window or read pointer */
++
++ /* copy input/output information to locals (UPDATE macro restores) */
++ LOAD
++
++ /* process input based on current state */
++ while (1) switch (s->mode)
++ {
++ case TYPE:
++ NEEDBITS(3)
++ t = (uInt)b & 7;
++ s->last = t & 1;
++ switch (t >> 1)
++ {
++ case 0: /* stored */
++ Trace((stderr, "inflate: stored block%s\n",
++ s->last ? " (last)" : ""));
++ DUMPBITS(3)
++ t = k & 7; /* go to byte boundary */
++ DUMPBITS(t)
++ s->mode = LENS; /* get length of stored block */
++ break;
++ case 1: /* fixed */
++ Trace((stderr, "inflate: fixed codes block%s\n",
++ s->last ? " (last)" : ""));
++ {
++ uInt bl, bd;
++ inflate_huft *tl, *td;
++
++ inflate_trees_fixed(&bl, &bd, &tl, &td);
++ s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z);
++ if (s->sub.decode.codes == Z_NULL)
++ {
++ r = Z_MEM_ERROR;
++ LEAVE
++ }
++ s->sub.decode.tl = Z_NULL; /* don't try to free these */
++ s->sub.decode.td = Z_NULL;
++ }
++ DUMPBITS(3)
++ s->mode = CODES;
++ break;
++ case 2: /* dynamic */
++ Trace((stderr, "inflate: dynamic codes block%s\n",
++ s->last ? " (last)" : ""));
++ DUMPBITS(3)
++ s->mode = TABLE;
++ break;
++ case 3: /* illegal */
++ DUMPBITS(3)
++ s->mode = BADB;
++ z->msg = (char*)"invalid block type";
++ r = Z_DATA_ERROR;
++ LEAVE
++ }
++ break;
++ case LENS:
++ NEEDBITS(32)
++ if ((((~b) >> 16) & 0xffff) != (b & 0xffff))
++ {
++ s->mode = BADB;
++ z->msg = (char*)"invalid stored block lengths";
++ r = Z_DATA_ERROR;
++ LEAVE
++ }
++ s->sub.left = (uInt)b & 0xffff;
++ b = k = 0; /* dump bits */
++ Tracev((stderr, "inflate: stored length %u\n", s->sub.left));
++ s->mode = s->sub.left ? STORED : (s->last ? DRY : TYPE);
++ break;
++ case STORED:
++ if (n == 0)
++ LEAVE
++ NEEDOUT
++ t = s->sub.left;
++ if (t > n) t = n;
++ if (t > m) t = m;
++ zmemcpy(q, p, t);
++ p += t; n -= t;
++ q += t; m -= t;
++ if ((s->sub.left -= t) != 0)
++ break;
++ Tracev((stderr, "inflate: stored end, %lu total out\n",
++ z->total_out + (q >= s->read ? q - s->read :
++ (s->end - s->read) + (q - s->window))));
++ s->mode = s->last ? DRY : TYPE;
++ break;
++ case TABLE:
++ NEEDBITS(14)
++ s->sub.trees.table = t = (uInt)b & 0x3fff;
++#ifndef PKZIP_BUG_WORKAROUND
++ if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29)
++ {
++ s->mode = BADB;
++ z->msg = (char*)"too many length or distance symbols";
++ r = Z_DATA_ERROR;
++ LEAVE
++ }
++#endif
++ t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);
++ if (t < 19)
++ t = 19;
++ if ((s->sub.trees.blens = (uIntf*)ZALLOC(z, t, sizeof(uInt))) == Z_NULL)
++ {
++ r = Z_MEM_ERROR;
++ LEAVE
++ }
++ DUMPBITS(14)
++ s->sub.trees.index = 0;
++ Tracev((stderr, "inflate: table sizes ok\n"));
++ s->mode = BTREE;
++ case BTREE:
++ while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10))
++ {
++ NEEDBITS(3)
++ s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7;
++ DUMPBITS(3)
++ }
++ while (s->sub.trees.index < 19)
++ s->sub.trees.blens[border[s->sub.trees.index++]] = 0;
++ s->sub.trees.bb = 7;
++ t = inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb,
++ &s->sub.trees.tb, z);
++ if (t != Z_OK)
++ {
++ r = t;
++ if (r == Z_DATA_ERROR)
++ {
++ ZFREE(z, s->sub.trees.blens);
++ s->mode = BADB;
++ }
++ LEAVE
++ }
++ s->sub.trees.index = 0;
++ Tracev((stderr, "inflate: bits tree ok\n"));
++ s->mode = DTREE;
++ case DTREE:
++ while (t = s->sub.trees.table,
++ s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))
++ {
++ inflate_huft *h;
++ uInt i, j, c;
++
++ t = s->sub.trees.bb;
++ NEEDBITS(t)
++ h = s->sub.trees.tb + ((uInt)b & inflate_mask[t]);
++ t = h->word.what.Bits;
++ c = h->more.Base;
++ if (c < 16)
++ {
++ DUMPBITS(t)
++ s->sub.trees.blens[s->sub.trees.index++] = c;
++ }
++ else /* c == 16..18 */
++ {
++ i = c == 18 ? 7 : c - 14;
++ j = c == 18 ? 11 : 3;
++ NEEDBITS(t + i)
++ DUMPBITS(t)
++ j += (uInt)b & inflate_mask[i];
++ DUMPBITS(i)
++ i = s->sub.trees.index;
++ t = s->sub.trees.table;
++ if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||
++ (c == 16 && i < 1))
++ {
++ inflate_trees_free(s->sub.trees.tb, z);
++ ZFREE(z, s->sub.trees.blens);
++ s->mode = BADB;
++ z->msg = (char*)"invalid bit length repeat";
++ r = Z_DATA_ERROR;
++ LEAVE
++ }
++ c = c == 16 ? s->sub.trees.blens[i - 1] : 0;
++ do {
++ s->sub.trees.blens[i++] = c;
++ } while (--j);
++ s->sub.trees.index = i;
++ }
++ }
++ inflate_trees_free(s->sub.trees.tb, z);
++ s->sub.trees.tb = Z_NULL;
++ {
++ uInt bl, bd;
++ inflate_huft *tl, *td;
++ inflate_codes_statef *c;
++
++ bl = 9; /* must be <= 9 for lookahead assumptions */
++ bd = 6; /* must be <= 9 for lookahead assumptions */
++ t = s->sub.trees.table;
++#ifdef DEBUG_ZLIB
++ inflate_hufts = 0;
++#endif
++ t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f),
++ s->sub.trees.blens, &bl, &bd, &tl, &td, z);
++ if (t != Z_OK)
++ {
++ if (t == (uInt)Z_DATA_ERROR)
++ {
++ ZFREE(z, s->sub.trees.blens);
++ s->mode = BADB;
++ }
++ r = t;
++ LEAVE
++ }
++ Tracev((stderr, "inflate: trees ok, %d * %d bytes used\n",
++ inflate_hufts, sizeof(inflate_huft)));
++ if ((c = inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL)
++ {
++ inflate_trees_free(td, z);
++ inflate_trees_free(tl, z);
++ r = Z_MEM_ERROR;
++ LEAVE
++ }
++ ZFREE(z, s->sub.trees.blens);
++ s->sub.decode.codes = c;
++ s->sub.decode.tl = tl;
++ s->sub.decode.td = td;
++ }
++ s->mode = CODES;
++ case CODES:
++ UPDATE
++ if ((r = inflate_codes(s, z, r)) != Z_STREAM_END)
++ return inflate_flush(s, z, r);
++ r = Z_OK;
++ inflate_codes_free(s->sub.decode.codes, z);
++ inflate_trees_free(s->sub.decode.td, z);
++ inflate_trees_free(s->sub.decode.tl, z);
++ LOAD
++ Tracev((stderr, "inflate: codes end, %lu total out\n",
++ z->total_out + (q >= s->read ? q - s->read :
++ (s->end - s->read) + (q - s->window))));
++ if (!s->last)
++ {
++ s->mode = TYPE;
++ break;
++ }
++ if (k > 7) /* return unused byte, if any */
++ {
++ Assert(k < 16, "inflate_codes grabbed too many bytes")
++ k -= 8;
++ n++;
++ p--; /* can always return one */
++ }
++ s->mode = DRY;
++ case DRY:
++ FLUSH
++ if (s->read != s->write)
++ LEAVE
++ s->mode = DONEB;
++ case DONEB:
++ r = Z_STREAM_END;
++ LEAVE
++ case BADB:
++ r = Z_DATA_ERROR;
++ LEAVE
++ default:
++ r = Z_STREAM_ERROR;
++ LEAVE
++ }
++}
++
++
++int inflate_blocks_free(s, z, c)
++inflate_blocks_statef *s;
++z_streamp z;
++uLongf *c;
++{
++ inflate_blocks_reset(s, z, c);
++ ZFREE(z, s->window);
++ ZFREE(z, s);
++ Trace((stderr, "inflate: blocks freed\n"));
++ return Z_OK;
++}
++
++
++void inflate_set_dictionary(s, d, n)
++inflate_blocks_statef *s;
++const Bytef *d;
++uInt n;
++{
++ zmemcpy((charf *)s->window, d, n);
++ s->read = s->write = s->window + n;
++}
++
++/*
++ * This subroutine adds the data at next_in/avail_in to the output history
++ * without performing any output. The output buffer must be "caught up";
++ * i.e. no pending output (hence s->read equals s->write), and the state must
++ * be BLOCKS (i.e. we should be willing to see the start of a series of
++ * BLOCKS). On exit, the output will also be caught up, and the checksum
++ * will have been updated if need be.
++ */
++int inflate_addhistory(s, z)
++inflate_blocks_statef *s;
++z_stream *z;
++{
++ uLong b; /* bit buffer */ /* NOT USED HERE */
++ uInt k; /* bits in bit buffer */ /* NOT USED HERE */
++ uInt t; /* temporary storage */
++ Bytef *p; /* input data pointer */
++ uInt n; /* bytes available there */
++ Bytef *q; /* output window write pointer */
++ uInt m; /* bytes to end of window or read pointer */
++
++ if (s->read != s->write)
++ return Z_STREAM_ERROR;
++ if (s->mode != TYPE)
++ return Z_DATA_ERROR;
++
++ /* we're ready to rock */
++ LOAD
++ /* while there is input ready, copy to output buffer, moving
++ * pointers as needed.
++ */
++ while (n) {
++ t = n; /* how many to do */
++ /* is there room until end of buffer? */
++ if (t > m) t = m;
++ /* update check information */
++ if (s->checkfn != Z_NULL)
++ s->check = (*s->checkfn)(s->check, q, t);
++ zmemcpy(q, p, t);
++ q += t;
++ p += t;
++ n -= t;
++ z->total_out += t;
++ s->read = q; /* drag read pointer forward */
++/* WWRAP */ /* expand WWRAP macro by hand to handle s->read */
++ if (q == s->end) {
++ s->read = q = s->window;
++ m = WAVAIL;
++ }
++ }
++ UPDATE
++ return Z_OK;
++}
++
++
++/*
++ * At the end of a Deflate-compressed PPP packet, we expect to have seen
++ * a `stored' block type value but not the (zero) length bytes.
++ */
++int inflate_packet_flush(s)
++ inflate_blocks_statef *s;
++{
++ if (s->mode != LENS)
++ return Z_DATA_ERROR;
++ s->mode = TYPE;
++ return Z_OK;
++}
++/* --- infblock.c */
++
++/* +++ inftrees.c */
++/* inftrees.c -- generate Huffman trees for efficient decoding
++ * Copyright (C) 1995-1996 Mark Adler
++ * For conditions of distribution and use, see copyright notice in zlib.h
++ */
++
++/* #include "zutil.h" */
++/* #include "inftrees.h" */
++
++char inflate_copyright[] = " inflate 1.0.4 Copyright 1995-1996 Mark Adler ";
++/*
++ If you use the zlib library in a product, an acknowledgment is welcome
++ in the documentation of your product. If for some reason you cannot
++ include such an acknowledgment, I would appreciate that you keep this
++ copyright string in the executable of your product.
++ */
++
++#ifndef NO_DUMMY_DECL
++struct internal_state {int dummy;}; /* for buggy compilers */
++#endif
++
++/* simplify the use of the inflate_huft type with some defines */
++#define base more.Base
++#define next more.Next
++#define exop word.what.Exop
++#define bits word.what.Bits
++
++
++local int huft_build OF((
++ uIntf *, /* code lengths in bits */
++ uInt, /* number of codes */
++ uInt, /* number of "simple" codes */
++ const uIntf *, /* list of base values for non-simple codes */
++ const uIntf *, /* list of extra bits for non-simple codes */
++ inflate_huft * FAR*,/* result: starting table */
++ uIntf *, /* maximum lookup bits (returns actual) */
++ z_streamp )); /* for zalloc function */
++
++local voidpf falloc OF((
++ voidpf, /* opaque pointer (not used) */
++ uInt, /* number of items */
++ uInt)); /* size of item */
++
++/* Tables for deflate from PKZIP's appnote.txt. */
++local const uInt cplens[31] = { /* Copy lengths for literal codes 257..285 */
++ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
++ 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
++ /* see note #13 above about 258 */
++local const uInt cplext[31] = { /* Extra bits for literal codes 257..285 */
++ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
++ 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112}; /* 112==invalid */
++local const uInt cpdist[30] = { /* Copy offsets for distance codes 0..29 */
++ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
++ 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
++ 8193, 12289, 16385, 24577};
++local const uInt cpdext[30] = { /* Extra bits for distance codes */
++ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
++ 7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
++ 12, 12, 13, 13};
++
++/*
++ Huffman code decoding is performed using a multi-level table lookup.
++ The fastest way to decode is to simply build a lookup table whose
++ size is determined by the longest code. However, the time it takes
++ to build this table can also be a factor if the data being decoded
++ is not very long. The most common codes are necessarily the
++ shortest codes, so those codes dominate the decoding time, and hence
++ the speed. The idea is you can have a shorter table that decodes the
++ shorter, more probable codes, and then point to subsidiary tables for
++ the longer codes. The time it costs to decode the longer codes is
++ then traded against the time it takes to make longer tables.
++
++ This results of this trade are in the variables lbits and dbits
++ below. lbits is the number of bits the first level table for literal/
++ length codes can decode in one step, and dbits is the same thing for
++ the distance codes. Subsequent tables are also less than or equal to
++ those sizes. These values may be adjusted either when all of the
++ codes are shorter than that, in which case the longest code length in
++ bits is used, or when the shortest code is *longer* than the requested
++ table size, in which case the length of the shortest code in bits is
++ used.
++
++ There are two different values for the two tables, since they code a
++ different number of possibilities each. The literal/length table
++ codes 286 possible values, or in a flat code, a little over eight
++ bits. The distance table codes 30 possible values, or a little less
++ than five bits, flat. The optimum values for speed end up being
++ about one bit more than those, so lbits is 8+1 and dbits is 5+1.
++ The optimum values may differ though from machine to machine, and
++ possibly even between compilers. Your mileage may vary.
++ */
++
++
++/* If BMAX needs to be larger than 16, then h and x[] should be uLong. */
++#define BMAX 15 /* maximum bit length of any code */
++#define N_MAX 288 /* maximum number of codes in any set */
++
++#ifdef DEBUG_ZLIB
++ uInt inflate_hufts;
++#endif
++
++local int huft_build(b, n, s, d, e, t, m, zs)
++uIntf *b; /* code lengths in bits (all assumed <= BMAX) */
++uInt n; /* number of codes (assumed <= N_MAX) */
++uInt s; /* number of simple-valued codes (0..s-1) */
++const uIntf *d; /* list of base values for non-simple codes */
++const uIntf *e; /* list of extra bits for non-simple codes */
++inflate_huft * FAR *t; /* result: starting table */
++uIntf *m; /* maximum lookup bits, returns actual */
++z_streamp zs; /* for zalloc function */
++/* Given a list of code lengths and a maximum table size, make a set of
++ tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR
++ if the given code set is incomplete (the tables are still built in this
++ case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of
++ lengths), or Z_MEM_ERROR if not enough memory. */
++{
++
++ uInt a; /* counter for codes of length k */
++ uInt c[BMAX+1]; /* bit length count table */
++ uInt f; /* i repeats in table every f entries */
++ int g; /* maximum code length */
++ int h; /* table level */
++ register uInt i; /* counter, current code */
++ register uInt j; /* counter */
++ register int k; /* number of bits in current code */
++ int l; /* bits per table (returned in m) */
++ register uIntf *p; /* pointer into c[], b[], or v[] */
++ inflate_huft *q; /* points to current table */
++ struct inflate_huft_s r; /* table entry for structure assignment */
++ inflate_huft *u[BMAX]; /* table stack */
++ uInt v[N_MAX]; /* values in order of bit length */
++ register int w; /* bits before this table == (l * h) */
++ uInt x[BMAX+1]; /* bit offsets, then code stack */
++ uIntf *xp; /* pointer into x */
++ int y; /* number of dummy codes added */
++ uInt z; /* number of entries in current table */
++
++
++ /* Generate counts for each bit length */
++ p = c;
++#define C0 *p++ = 0;
++#define C2 C0 C0 C0 C0
++#define C4 C2 C2 C2 C2
++ C4 /* clear c[]--assume BMAX+1 is 16 */
++ p = b; i = n;
++ do {
++ c[*p++]++; /* assume all entries <= BMAX */
++ } while (--i);
++ if (c[0] == n) /* null input--all zero length codes */
++ {
++ *t = (inflate_huft *)Z_NULL;
++ *m = 0;
++ return Z_OK;
++ }
++
++
++ /* Find minimum and maximum length, bound *m by those */
++ l = *m;
++ for (j = 1; j <= BMAX; j++)
++ if (c[j])
++ break;
++ k = j; /* minimum code length */
++ if ((uInt)l < j)
++ l = j;
++ for (i = BMAX; i; i--)
++ if (c[i])
++ break;
++ g = i; /* maximum code length */
++ if ((uInt)l > i)
++ l = i;
++ *m = l;
++
++
++ /* Adjust last length count to fill out codes, if needed */
++ for (y = 1 << j; j < i; j++, y <<= 1)
++ if ((y -= c[j]) < 0)
++ return Z_DATA_ERROR;
++ if ((y -= c[i]) < 0)
++ return Z_DATA_ERROR;
++ c[i] += y;
++
++
++ /* Generate starting offsets into the value table for each length */
++ x[1] = j = 0;
++ p = c + 1; xp = x + 2;
++ while (--i) { /* note that i == g from above */
++ *xp++ = (j += *p++);
++ }
++
++
++ /* Make a table of values in order of bit lengths */
++ p = b; i = 0;
++ do {
++ if ((j = *p++) != 0)
++ v[x[j]++] = i;
++ } while (++i < n);
++ n = x[g]; /* set n to length of v */
++
++
++ /* Generate the Huffman codes and for each, make the table entries */
++ x[0] = i = 0; /* first Huffman code is zero */
++ p = v; /* grab values in bit order */
++ h = -1; /* no tables yet--level -1 */
++ w = -l; /* bits decoded == (l * h) */
++ u[0] = (inflate_huft *)Z_NULL; /* just to keep compilers happy */
++ q = (inflate_huft *)Z_NULL; /* ditto */
++ z = 0; /* ditto */
++
++ /* go through the bit lengths (k already is bits in shortest code) */
++ for (; k <= g; k++)
++ {
++ a = c[k];
++ while (a--)
++ {
++ /* here i is the Huffman code of length k bits for value *p */
++ /* make tables up to required level */
++ while (k > w + l)
++ {
++ h++;
++ w += l; /* previous table always l bits */
++
++ /* compute minimum size table less than or equal to l bits */
++ z = g - w;
++ z = z > (uInt)l ? l : z; /* table size upper limit */
++ if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */
++ { /* too few codes for k-w bit table */
++ f -= a + 1; /* deduct codes from patterns left */
++ xp = c + k;
++ if (j < z)
++ while (++j < z) /* try smaller tables up to z bits */
++ {
++ if ((f <<= 1) <= *++xp)
++ break; /* enough codes to use up j bits */
++ f -= *xp; /* else deduct codes from patterns */
++ }
++ }
++ z = 1 << j; /* table entries for j-bit table */
++
++ /* allocate and link in new table */
++ if ((q = (inflate_huft *)ZALLOC
++ (zs,z + 1,sizeof(inflate_huft))) == Z_NULL)
++ {
++ if (h)
++ inflate_trees_free(u[0], zs);
++ return Z_MEM_ERROR; /* not enough memory */
++ }
++#ifdef DEBUG_ZLIB
++ inflate_hufts += z + 1;
++#endif
++ *t = q + 1; /* link to list for huft_free() */
++ *(t = &(q->next)) = Z_NULL;
++ u[h] = ++q; /* table starts after link */
++
++ /* connect to last table, if there is one */
++ if (h)
++ {
++ x[h] = i; /* save pattern for backing up */
++ r.bits = (Byte)l; /* bits to dump before this table */
++ r.exop = (Byte)j; /* bits in this table */
++ r.next = q; /* pointer to this table */
++ j = i >> (w - l); /* (get around Turbo C bug) */
++ u[h-1][j] = r; /* connect to last table */
++ }
++ }
++
++ /* set up table entry in r */
++ r.bits = (Byte)(k - w);
++ if (p >= v + n)
++ r.exop = 128 + 64; /* out of values--invalid code */
++ else if (*p < s)
++ {
++ r.exop = (Byte)(*p < 256 ? 0 : 32 + 64); /* 256 is end-of-block */
++ r.base = *p++; /* simple code is just the value */
++ }
++ else
++ {
++ r.exop = (Byte)(e[*p - s] + 16 + 64);/* non-simple--look up in lists */
++ r.base = d[*p++ - s];
++ }
++
++ /* fill code-like entries with r */
++ f = 1 << (k - w);
++ for (j = i >> w; j < z; j += f)
++ q[j] = r;
++
++ /* backwards increment the k-bit code i */
++ for (j = 1 << (k - 1); i & j; j >>= 1)
++ i ^= j;
++ i ^= j;
++
++ /* backup over finished tables */
++ while ((i & ((1 << w) - 1)) != x[h])
++ {
++ h--; /* don't need to update q */
++ w -= l;
++ }
++ }
++ }
++
++
++ /* Return Z_BUF_ERROR if we were given an incomplete table */
++ return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;
++}
++
++
++int inflate_trees_bits(c, bb, tb, z)
++uIntf *c; /* 19 code lengths */
++uIntf *bb; /* bits tree desired/actual depth */
++inflate_huft * FAR *tb; /* bits tree result */
++z_streamp z; /* for zfree function */
++{
++ int r;
++
++ r = huft_build(c, 19, 19, (uIntf*)Z_NULL, (uIntf*)Z_NULL, tb, bb, z);
++ if (r == Z_DATA_ERROR)
++ z->msg = (char*)"oversubscribed dynamic bit lengths tree";
++ else if (r == Z_BUF_ERROR || *bb == 0)
++ {
++ inflate_trees_free(*tb, z);
++ z->msg = (char*)"incomplete dynamic bit lengths tree";
++ r = Z_DATA_ERROR;
++ }
++ return r;
++}
++
++
++int inflate_trees_dynamic(nl, nd, c, bl, bd, tl, td, z)
++uInt nl; /* number of literal/length codes */
++uInt nd; /* number of distance codes */
++uIntf *c; /* that many (total) code lengths */
++uIntf *bl; /* literal desired/actual bit depth */
++uIntf *bd; /* distance desired/actual bit depth */
++inflate_huft * FAR *tl; /* literal/length tree result */
++inflate_huft * FAR *td; /* distance tree result */
++z_streamp z; /* for zfree function */
++{
++ int r;
++
++ /* build literal/length tree */
++ r = huft_build(c, nl, 257, cplens, cplext, tl, bl, z);
++ if (r != Z_OK || *bl == 0)
++ {
++ if (r == Z_DATA_ERROR)
++ z->msg = (char*)"oversubscribed literal/length tree";
++ else if (r != Z_MEM_ERROR)
++ {
++ inflate_trees_free(*tl, z);
++ z->msg = (char*)"incomplete literal/length tree";
++ r = Z_DATA_ERROR;
++ }
++ return r;
++ }
++
++ /* build distance tree */
++ r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, z);
++ if (r != Z_OK || (*bd == 0 && nl > 257))
++ {
++ if (r == Z_DATA_ERROR)
++ z->msg = (char*)"oversubscribed distance tree";
++ else if (r == Z_BUF_ERROR) {
++#ifdef PKZIP_BUG_WORKAROUND
++ r = Z_OK;
++ }
++#else
++ inflate_trees_free(*td, z);
++ z->msg = (char*)"incomplete distance tree";
++ r = Z_DATA_ERROR;
++ }
++ else if (r != Z_MEM_ERROR)
++ {
++ z->msg = (char*)"empty distance tree with lengths";
++ r = Z_DATA_ERROR;
++ }
++ inflate_trees_free(*tl, z);
++ return r;
++#endif
++ }
++
++ /* done */
++ return Z_OK;
++}
++
++
++/* build fixed tables only once--keep them here */
++local int fixed_built = 0;
++#define FIXEDH 530 /* number of hufts used by fixed tables */
++local inflate_huft fixed_mem[FIXEDH];
++local uInt fixed_bl;
++local uInt fixed_bd;
++local inflate_huft *fixed_tl;
++local inflate_huft *fixed_td;
++
++
++local voidpf falloc(q, n, s)
++voidpf q; /* opaque pointer */
++uInt n; /* number of items */
++uInt s; /* size of item */
++{
++ Assert(s == sizeof(inflate_huft) && n <= *(intf *)q,
++ "inflate_trees falloc overflow");
++ *(intf *)q -= n+s-s; /* s-s to avoid warning */
++ return (voidpf)(fixed_mem + *(intf *)q);
++}
++
++
++int inflate_trees_fixed(bl, bd, tl, td)
++uIntf *bl; /* literal desired/actual bit depth */
++uIntf *bd; /* distance desired/actual bit depth */
++inflate_huft * FAR *tl; /* literal/length tree result */
++inflate_huft * FAR *td; /* distance tree result */
++{
++ /* build fixed tables if not already (multiple overlapped executions ok) */
++ if (!fixed_built)
++ {
++ int k; /* temporary variable */
++ unsigned c[288]; /* length list for huft_build */
++ z_stream z; /* for falloc function */
++ int f = FIXEDH; /* number of hufts left in fixed_mem */
++
++ /* set up fake z_stream for memory routines */
++ z.zalloc = falloc;
++ z.zfree = Z_NULL;
++ z.opaque = (voidpf)&f;
++
++ /* literal table */
++ for (k = 0; k < 144; k++)
++ c[k] = 8;
++ for (; k < 256; k++)
++ c[k] = 9;
++ for (; k < 280; k++)
++ c[k] = 7;
++ for (; k < 288; k++)
++ c[k] = 8;
++ fixed_bl = 7;
++ huft_build(c, 288, 257, cplens, cplext, &fixed_tl, &fixed_bl, &z);
++
++ /* distance table */
++ for (k = 0; k < 30; k++)
++ c[k] = 5;
++ fixed_bd = 5;
++ huft_build(c, 30, 0, cpdist, cpdext, &fixed_td, &fixed_bd, &z);
++
++ /* done */
++ Assert(f == 0, "invalid build of fixed tables");
++ fixed_built = 1;
++ }
++ *bl = fixed_bl;
++ *bd = fixed_bd;
++ *tl = fixed_tl;
++ *td = fixed_td;
++ return Z_OK;
++}
++
++
++int inflate_trees_free(t, z)
++inflate_huft *t; /* table to free */
++z_streamp z; /* for zfree function */
++/* Free the malloc'ed tables built by huft_build(), which makes a linked
++ list of the tables it made, with the links in a dummy first entry of
++ each table. */
++{
++ register inflate_huft *p, *q, *r;
++
++ /* Reverse linked list */
++ p = Z_NULL;
++ q = t;
++ while (q != Z_NULL)
++ {
++ r = (q - 1)->next;
++ (q - 1)->next = p;
++ p = q;
++ q = r;
++ }
++ /* Go through linked list, freeing from the malloced (t[-1]) address. */
++ while (p != Z_NULL)
++ {
++ q = (--p)->next;
++ ZFREE(z,p);
++ p = q;
++ }
++ return Z_OK;
++}
++/* --- inftrees.c */
++
++/* +++ infcodes.c */
++/* infcodes.c -- process literals and length/distance pairs
++ * Copyright (C) 1995-1996 Mark Adler
++ * For conditions of distribution and use, see copyright notice in zlib.h
++ */
++
++/* #include "zutil.h" */
++/* #include "inftrees.h" */
++/* #include "infblock.h" */
++/* #include "infcodes.h" */
++/* #include "infutil.h" */
++
++/* +++ inffast.h */
++/* inffast.h -- header to use inffast.c
++ * Copyright (C) 1995-1996 Mark Adler
++ * For conditions of distribution and use, see copyright notice in zlib.h
++ */
++
++/* WARNING: this file should *not* be used by applications. It is
++ part of the implementation of the compression library and is
++ subject to change. Applications should only use zlib.h.
++ */
++
++extern int inflate_fast OF((
++ uInt,
++ uInt,
++ inflate_huft *,
++ inflate_huft *,
++ inflate_blocks_statef *,
++ z_streamp ));
++/* --- inffast.h */
++
++/* simplify the use of the inflate_huft type with some defines */
++#define base more.Base
++#define next more.Next
++#define exop word.what.Exop
++#define bits word.what.Bits
++
++/* inflate codes private state */
++struct inflate_codes_state {
++
++ /* mode */
++ enum { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
++ START, /* x: set up for LEN */
++ LEN, /* i: get length/literal/eob next */
++ LENEXT, /* i: getting length extra (have base) */
++ DIST, /* i: get distance next */
++ DISTEXT, /* i: getting distance extra */
++ COPY, /* o: copying bytes in window, waiting for space */
++ LIT, /* o: got literal, waiting for output space */
++ WASH, /* o: got eob, possibly still output waiting */
++ END, /* x: got eob and all data flushed */
++ BADCODE} /* x: got error */
++ mode; /* current inflate_codes mode */
++
++ /* mode dependent information */
++ uInt len;
++ union {
++ struct {
++ inflate_huft *tree; /* pointer into tree */
++ uInt need; /* bits needed */
++ } code; /* if LEN or DIST, where in tree */
++ uInt lit; /* if LIT, literal */
++ struct {
++ uInt get; /* bits to get for extra */
++ uInt dist; /* distance back to copy from */
++ } copy; /* if EXT or COPY, where and how much */
++ } sub; /* submode */
++
++ /* mode independent information */
++ Byte lbits; /* ltree bits decoded per branch */
++ Byte dbits; /* dtree bits decoder per branch */
++ inflate_huft *ltree; /* literal/length/eob tree */
++ inflate_huft *dtree; /* distance tree */
++
++};
++
++
++inflate_codes_statef *inflate_codes_new(bl, bd, tl, td, z)
++uInt bl, bd;
++inflate_huft *tl;
++inflate_huft *td; /* need separate declaration for Borland C++ */
++z_streamp z;
++{
++ inflate_codes_statef *c;
++
++ if ((c = (inflate_codes_statef *)
++ ZALLOC(z,1,sizeof(struct inflate_codes_state))) != Z_NULL)
++ {
++ c->mode = START;
++ c->lbits = (Byte)bl;
++ c->dbits = (Byte)bd;
++ c->ltree = tl;
++ c->dtree = td;
++ Tracev((stderr, "inflate: codes new\n"));
++ }
++ return c;
++}
++
++
++int inflate_codes(s, z, r)
++inflate_blocks_statef *s;
++z_streamp z;
++int r;
++{
++ uInt j; /* temporary storage */
++ inflate_huft *t; /* temporary pointer */
++ uInt e; /* extra bits or operation */
++ uLong b; /* bit buffer */
++ uInt k; /* bits in bit buffer */
++ Bytef *p; /* input data pointer */
++ uInt n; /* bytes available there */
++ Bytef *q; /* output window write pointer */
++ uInt m; /* bytes to end of window or read pointer */
++ Bytef *f; /* pointer to copy strings from */
++ inflate_codes_statef *c = s->sub.decode.codes; /* codes state */
++
++ /* copy input/output information to locals (UPDATE macro restores) */
++ LOAD
++
++ /* process input and output based on current state */
++ while (1) switch (c->mode)
++ { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */
++ case START: /* x: set up for LEN */
++#ifndef SLOW
++ if (m >= 258 && n >= 10)
++ {
++ UPDATE
++ r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z);
++ LOAD
++ if (r != Z_OK)
++ {
++ c->mode = r == Z_STREAM_END ? WASH : BADCODE;
++ break;
++ }
++ }
++#endif /* !SLOW */
++ c->sub.code.need = c->lbits;
++ c->sub.code.tree = c->ltree;
++ c->mode = LEN;
++ case LEN: /* i: get length/literal/eob next */
++ j = c->sub.code.need;
++ NEEDBITS(j)
++ t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
++ DUMPBITS(t->bits)
++ e = (uInt)(t->exop);
++ if (e == 0) /* literal */
++ {
++ c->sub.lit = t->base;
++ Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
++ "inflate: literal '%c'\n" :
++ "inflate: literal 0x%02x\n", t->base));
++ c->mode = LIT;
++ break;
++ }
++ if (e & 16) /* length */
++ {
++ c->sub.copy.get = e & 15;
++ c->len = t->base;
++ c->mode = LENEXT;
++ break;
++ }
++ if ((e & 64) == 0) /* next table */
++ {
++ c->sub.code.need = e;
++ c->sub.code.tree = t->next;
++ break;
++ }
++ if (e & 32) /* end of block */
++ {
++ Tracevv((stderr, "inflate: end of block\n"));
++ c->mode = WASH;
++ break;
++ }
++ c->mode = BADCODE; /* invalid code */
++ z->msg = (char*)"invalid literal/length code";
++ r = Z_DATA_ERROR;
++ LEAVE
++ case LENEXT: /* i: getting length extra (have base) */
++ j = c->sub.copy.get;
++ NEEDBITS(j)
++ c->len += (uInt)b & inflate_mask[j];
++ DUMPBITS(j)
++ c->sub.code.need = c->dbits;
++ c->sub.code.tree = c->dtree;
++ Tracevv((stderr, "inflate: length %u\n", c->len));
++ c->mode = DIST;
++ case DIST: /* i: get distance next */
++ j = c->sub.code.need;
++ NEEDBITS(j)
++ t = c->sub.code.tree + ((uInt)b & inflate_mask[j]);
++ DUMPBITS(t->bits)
++ e = (uInt)(t->exop);
++ if (e & 16) /* distance */
++ {
++ c->sub.copy.get = e & 15;
++ c->sub.copy.dist = t->base;
++ c->mode = DISTEXT;
++ break;
++ }
++ if ((e & 64) == 0) /* next table */
++ {
++ c->sub.code.need = e;
++ c->sub.code.tree = t->next;
++ break;
++ }
++ c->mode = BADCODE; /* invalid code */
++ z->msg = (char*)"invalid distance code";
++ r = Z_DATA_ERROR;
++ LEAVE
++ case DISTEXT: /* i: getting distance extra */
++ j = c->sub.copy.get;
++ NEEDBITS(j)
++ c->sub.copy.dist += (uInt)b & inflate_mask[j];
++ DUMPBITS(j)
++ Tracevv((stderr, "inflate: distance %u\n", c->sub.copy.dist));
++ c->mode = COPY;
++ case COPY: /* o: copying bytes in window, waiting for space */
++#ifndef __TURBOC__ /* Turbo C bug for following expression */
++ f = (uInt)(q - s->window) < c->sub.copy.dist ?
++ s->end - (c->sub.copy.dist - (q - s->window)) :
++ q - c->sub.copy.dist;
++#else
++ f = q - c->sub.copy.dist;
++ if ((uInt)(q - s->window) < c->sub.copy.dist)
++ f = s->end - (c->sub.copy.dist - (uInt)(q - s->window));
++#endif
++ while (c->len)
++ {
++ NEEDOUT
++ OUTBYTE(*f++)
++ if (f == s->end)
++ f = s->window;
++ c->len--;
++ }
++ c->mode = START;
++ break;
++ case LIT: /* o: got literal, waiting for output space */
++ NEEDOUT
++ OUTBYTE(c->sub.lit)
++ c->mode = START;
++ break;
++ case WASH: /* o: got eob, possibly more output */
++ FLUSH
++ if (s->read != s->write)
++ LEAVE
++ c->mode = END;
++ case END:
++ r = Z_STREAM_END;
++ LEAVE
++ case BADCODE: /* x: got error */
++ r = Z_DATA_ERROR;
++ LEAVE
++ default:
++ r = Z_STREAM_ERROR;
++ LEAVE
++ }
++}
++
++
++void inflate_codes_free(c, z)
++inflate_codes_statef *c;
++z_streamp z;
++{
++ ZFREE(z, c);
++ Tracev((stderr, "inflate: codes free\n"));
++}
++/* --- infcodes.c */
++
++/* +++ infutil.c */
++/* inflate_util.c -- data and routines common to blocks and codes
++ * Copyright (C) 1995-1996 Mark Adler
++ * For conditions of distribution and use, see copyright notice in zlib.h
++ */
++
++/* #include "zutil.h" */
++/* #include "infblock.h" */
++/* #include "inftrees.h" */
++/* #include "infcodes.h" */
++/* #include "infutil.h" */
++
++#ifndef NO_DUMMY_DECL
++struct inflate_codes_state {int dummy;}; /* for buggy compilers */
++#endif
++
++/* And'ing with mask[n] masks the lower n bits */
++uInt inflate_mask[17] = {
++ 0x0000,
++ 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
++ 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
++};
++
++
++/* copy as much as possible from the sliding window to the output area */
++int inflate_flush(s, z, r)
++inflate_blocks_statef *s;
++z_streamp z;
++int r;
++{
++ uInt n;
++ Bytef *p;
++ Bytef *q;
++
++ /* local copies of source and destination pointers */
++ p = z->next_out;
++ q = s->read;
++
++ /* compute number of bytes to copy as far as end of window */
++ n = (uInt)((q <= s->write ? s->write : s->end) - q);
++ if (n > z->avail_out) n = z->avail_out;
++ if (n && r == Z_BUF_ERROR) r = Z_OK;
++
++ /* update counters */
++ z->avail_out -= n;
++ z->total_out += n;
++
++ /* update check information */
++ if (s->checkfn != Z_NULL)
++ z->adler = s->check = (*s->checkfn)(s->check, q, n);
++
++ /* copy as far as end of window */
++ if (p != Z_NULL) {
++ zmemcpy(p, q, n);
++ p += n;
++ }
++ q += n;
++
++ /* see if more to copy at beginning of window */
++ if (q == s->end)
++ {
++ /* wrap pointers */
++ q = s->window;
++ if (s->write == s->end)
++ s->write = s->window;
++
++ /* compute bytes to copy */
++ n = (uInt)(s->write - q);
++ if (n > z->avail_out) n = z->avail_out;
++ if (n && r == Z_BUF_ERROR) r = Z_OK;
++
++ /* update counters */
++ z->avail_out -= n;
++ z->total_out += n;
++
++ /* update check information */
++ if (s->checkfn != Z_NULL)
++ z->adler = s->check = (*s->checkfn)(s->check, q, n);
++
++ /* copy */
++ if (p != Z_NULL) {
++ zmemcpy(p, q, n);
++ p += n;
++ }
++ q += n;
++ }
++
++ /* update pointers */
++ z->next_out = p;
++ s->read = q;
++
++ /* done */
++ return r;
++}
++/* --- infutil.c */
++
++/* +++ inffast.c */
++/* inffast.c -- process literals and length/distance pairs fast
++ * Copyright (C) 1995-1996 Mark Adler
++ * For conditions of distribution and use, see copyright notice in zlib.h
++ */
++
++/* #include "zutil.h" */
++/* #include "inftrees.h" */
++/* #include "infblock.h" */
++/* #include "infcodes.h" */
++/* #include "infutil.h" */
++/* #include "inffast.h" */
++
++#ifndef NO_DUMMY_DECL
++struct inflate_codes_state {int dummy;}; /* for buggy compilers */
++#endif
++
++/* simplify the use of the inflate_huft type with some defines */
++#define base more.Base
++#define next more.Next
++#define exop word.what.Exop
++#define bits word.what.Bits
++
++/* macros for bit input with no checking and for returning unused bytes */
++#define GRABBITS(j) {while(k<(j)){b|=((uLong)NEXTBYTE)<<k;k+=8;}}
++#define UNGRAB {n+=(c=k>>3);p-=c;k&=7;}
++
++/* Called with number of bytes left to write in window at least 258
++ (the maximum string length) and number of input bytes available
++ at least ten. The ten bytes are six bytes for the longest length/
++ distance pair plus four bytes for overloading the bit buffer. */
++
++int inflate_fast(bl, bd, tl, td, s, z)
++uInt bl, bd;
++inflate_huft *tl;
++inflate_huft *td; /* need separate declaration for Borland C++ */
++inflate_blocks_statef *s;
++z_streamp z;
++{
++ inflate_huft *t; /* temporary pointer */
++ uInt e; /* extra bits or operation */
++ uLong b; /* bit buffer */
++ uInt k; /* bits in bit buffer */
++ Bytef *p; /* input data pointer */
++ uInt n; /* bytes available there */
++ Bytef *q; /* output window write pointer */
++ uInt m; /* bytes to end of window or read pointer */
++ uInt ml; /* mask for literal/length tree */
++ uInt md; /* mask for distance tree */
++ uInt c; /* bytes to copy */
++ uInt d; /* distance back to copy from */
++ Bytef *r; /* copy source pointer */
++
++ /* load input, output, bit values */
++ LOAD
++
++ /* initialize masks */
++ ml = inflate_mask[bl];
++ md = inflate_mask[bd];
++
++ /* do until not enough input or output space for fast loop */
++ do { /* assume called with m >= 258 && n >= 10 */
++ /* get literal/length code */
++ GRABBITS(20) /* max bits for literal/length code */
++ if ((e = (t = tl + ((uInt)b & ml))->exop) == 0)
++ {
++ DUMPBITS(t->bits)
++ Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
++ "inflate: * literal '%c'\n" :
++ "inflate: * literal 0x%02x\n", t->base));
++ *q++ = (Byte)t->base;
++ m--;
++ continue;
++ }
++ do {
++ DUMPBITS(t->bits)
++ if (e & 16)
++ {
++ /* get extra bits for length */
++ e &= 15;
++ c = t->base + ((uInt)b & inflate_mask[e]);
++ DUMPBITS(e)
++ Tracevv((stderr, "inflate: * length %u\n", c));
++
++ /* decode distance base of block to copy */
++ GRABBITS(15); /* max bits for distance code */
++ e = (t = td + ((uInt)b & md))->exop;
++ do {
++ DUMPBITS(t->bits)
++ if (e & 16)
++ {
++ /* get extra bits to add to distance base */
++ e &= 15;
++ GRABBITS(e) /* get extra bits (up to 13) */
++ d = t->base + ((uInt)b & inflate_mask[e]);
++ DUMPBITS(e)
++ Tracevv((stderr, "inflate: * distance %u\n", d));
++
++ /* do the copy */
++ m -= c;
++ if ((uInt)(q - s->window) >= d) /* offset before dest */
++ { /* just copy */
++ r = q - d;
++ *q++ = *r++; c--; /* minimum count is three, */
++ *q++ = *r++; c--; /* so unroll loop a little */
++ }
++ else /* else offset after destination */
++ {
++ e = d - (uInt)(q - s->window); /* bytes from offset to end */
++ r = s->end - e; /* pointer to offset */
++ if (c > e) /* if source crosses, */
++ {
++ c -= e; /* copy to end of window */
++ do {
++ *q++ = *r++;
++ } while (--e);
++ r = s->window; /* copy rest from start of window */
++ }
++ }
++ do { /* copy all or what's left */
++ *q++ = *r++;
++ } while (--c);
++ break;
++ }
++ else if ((e & 64) == 0)
++ e = (t = t->next + ((uInt)b & inflate_mask[e]))->exop;
++ else
++ {
++ z->msg = (char*)"invalid distance code";
++ UNGRAB
++ UPDATE
++ return Z_DATA_ERROR;
++ }
++ } while (1);
++ break;
++ }
++ if ((e & 64) == 0)
++ {
++ if ((e = (t = t->next + ((uInt)b & inflate_mask[e]))->exop) == 0)
++ {
++ DUMPBITS(t->bits)
++ Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ?
++ "inflate: * literal '%c'\n" :
++ "inflate: * literal 0x%02x\n", t->base));
++ *q++ = (Byte)t->base;
++ m--;
++ break;
++ }
++ }
++ else if (e & 32)
++ {
++ Tracevv((stderr, "inflate: * end of block\n"));
++ UNGRAB
++ UPDATE
++ return Z_STREAM_END;
++ }
++ else
++ {
++ z->msg = (char*)"invalid literal/length code";
++ UNGRAB
++ UPDATE
++ return Z_DATA_ERROR;
++ }
++ } while (1);
++ } while (m >= 258 && n >= 10);
++
++ /* not enough input or output--restore pointers and return */
++ UNGRAB
++ UPDATE
++ return Z_OK;
++}
++/* --- inffast.c */
++
++/* +++ zutil.c */
++/* zutil.c -- target dependent utility functions for the compression library
++ * Copyright (C) 1995-1996 Jean-loup Gailly.
++ * For conditions of distribution and use, see copyright notice in zlib.h
++ */
++
++/* From: zutil.c,v 1.17 1996/07/24 13:41:12 me Exp $ */
++
++/* #include "zutil.h" */
++
++#ifndef NO_DUMMY_DECL
++struct internal_state {int dummy;}; /* for buggy compilers */
++#endif
++
++#ifndef STDC
++extern void exit OF((int));
++#endif
++
++const char *z_errmsg[10] = {
++"need dictionary", /* Z_NEED_DICT 2 */
++"stream end", /* Z_STREAM_END 1 */
++"", /* Z_OK 0 */
++"file error", /* Z_ERRNO (-1) */
++"stream error", /* Z_STREAM_ERROR (-2) */
++"data error", /* Z_DATA_ERROR (-3) */
++"insufficient memory", /* Z_MEM_ERROR (-4) */
++"buffer error", /* Z_BUF_ERROR (-5) */
++"incompatible version",/* Z_VERSION_ERROR (-6) */
++""};
++
++
++const char *zlibVersion()
++{
++ return ZLIB_VERSION;
++}
++
++#ifdef DEBUG_ZLIB
++void z_error (m)
++ char *m;
++{
++ fprintf(stderr, "%s\n", m);
++ exit(1);
++}
++#endif
++
++#ifndef HAVE_MEMCPY
++
++void zmemcpy(dest, source, len)
++ Bytef* dest;
++ Bytef* source;
++ uInt len;
++{
++ if (len == 0) return;
++ do {
++ *dest++ = *source++; /* ??? to be unrolled */
++ } while (--len != 0);
++}
++
++int zmemcmp(s1, s2, len)
++ Bytef* s1;
++ Bytef* s2;
++ uInt len;
++{
++ uInt j;
++
++ for (j = 0; j < len; j++) {
++ if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;
++ }
++ return 0;
++}
++
++void zmemzero(dest, len)
++ Bytef* dest;
++ uInt len;
++{
++ if (len == 0) return;
++ do {
++ *dest++ = 0; /* ??? to be unrolled */
++ } while (--len != 0);
++}
++#endif
++
++#ifdef __TURBOC__
++#if (defined( __BORLANDC__) || !defined(SMALL_MEDIUM)) && !defined(__32BIT__)
++/* Small and medium model in Turbo C are for now limited to near allocation
++ * with reduced MAX_WBITS and MAX_MEM_LEVEL
++ */
++# define MY_ZCALLOC
++
++/* Turbo C malloc() does not allow dynamic allocation of 64K bytes
++ * and farmalloc(64K) returns a pointer with an offset of 8, so we
++ * must fix the pointer. Warning: the pointer must be put back to its
++ * original form in order to free it, use zcfree().
++ */
++
++#define MAX_PTR 10
++/* 10*64K = 640K */
++
++local int next_ptr = 0;
++
++typedef struct ptr_table_s {
++ voidpf org_ptr;
++ voidpf new_ptr;
++} ptr_table;
++
++local ptr_table table[MAX_PTR];
++/* This table is used to remember the original form of pointers
++ * to large buffers (64K). Such pointers are normalized with a zero offset.
++ * Since MSDOS is not a preemptive multitasking OS, this table is not
++ * protected from concurrent access. This hack doesn't work anyway on
++ * a protected system like OS/2. Use Microsoft C instead.
++ */
++
++voidpf zcalloc (voidpf opaque, unsigned items, unsigned size)
++{
++ voidpf buf = opaque; /* just to make some compilers happy */
++ ulg bsize = (ulg)items*size;
++
++ /* If we allocate less than 65520 bytes, we assume that farmalloc
++ * will return a usable pointer which doesn't have to be normalized.
++ */
++ if (bsize < 65520L) {
++ buf = farmalloc(bsize);
++ if (*(ush*)&buf != 0) return buf;
++ } else {
++ buf = farmalloc(bsize + 16L);
++ }
++ if (buf == NULL || next_ptr >= MAX_PTR) return NULL;
++ table[next_ptr].org_ptr = buf;
++
++ /* Normalize the pointer to seg:0 */
++ *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4;
++ *(ush*)&buf = 0;
++ table[next_ptr++].new_ptr = buf;
++ return buf;
++}
++
++void zcfree (voidpf opaque, voidpf ptr)
++{
++ int n;
++ if (*(ush*)&ptr != 0) { /* object < 64K */
++ farfree(ptr);
++ return;
++ }
++ /* Find the original pointer */
++ for (n = 0; n < next_ptr; n++) {
++ if (ptr != table[n].new_ptr) continue;
++
++ farfree(table[n].org_ptr);
++ while (++n < next_ptr) {
++ table[n-1] = table[n];
++ }
++ next_ptr--;
++ return;
++ }
++ ptr = opaque; /* just to make some compilers happy */
++ Assert(0, "zcfree: ptr not found");
++}
++#endif
++#endif /* __TURBOC__ */
++
++
++#if defined(M_I86) && !defined(__32BIT__)
++/* Microsoft C in 16-bit mode */
++
++# define MY_ZCALLOC
++
++#if (!defined(_MSC_VER) || (_MSC_VER < 600))
++# define _halloc halloc
++# define _hfree hfree
++#endif
++
++voidpf zcalloc (voidpf opaque, unsigned items, unsigned size)
++{
++ if (opaque) opaque = 0; /* to make compiler happy */
++ return _halloc((long)items, size);
++}
++
++void zcfree (voidpf opaque, voidpf ptr)
++{
++ if (opaque) opaque = 0; /* to make compiler happy */
++ _hfree(ptr);
++}
++
++#endif /* MSC */
++
++
++#ifndef MY_ZCALLOC /* Any system without a special alloc function */
++
++#ifndef STDC
++extern voidp calloc OF((uInt items, uInt size));
++extern void free OF((voidpf ptr));
++#endif
++
++voidpf zcalloc (opaque, items, size)
++ voidpf opaque;
++ unsigned items;
++ unsigned size;
++{
++ if (opaque) items += size - size; /* make compiler happy */
++ return (voidpf)calloc(items, size);
++}
++
++void zcfree (opaque, ptr)
++ voidpf opaque;
++ voidpf ptr;
++{
++ free(ptr);
++ if (opaque) return; /* make compiler happy */
++}
++
++#endif /* MY_ZCALLOC */
++/* --- zutil.c */
++
++/* +++ adler32.c */
++/* adler32.c -- compute the Adler-32 checksum of a data stream
++ * Copyright (C) 1995-1996 Mark Adler
++ * For conditions of distribution and use, see copyright notice in zlib.h
++ */
++
++/* From: adler32.c,v 1.10 1996/05/22 11:52:18 me Exp $ */
++
++/* #include "zlib.h" */
++
++#define BASE 65521L /* largest prime smaller than 65536 */
++#define NMAX 5552
++/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
++
++#define DO1(buf,i) {s1 += buf[i]; s2 += s1;}
++#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1);
++#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
++#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
++#define DO16(buf) DO8(buf,0); DO8(buf,8);
++
++/* ========================================================================= */
++uLong adler32(adler, buf, len)
++ uLong adler;
++ const Bytef *buf;
++ uInt len;
++{
++ unsigned long s1 = adler & 0xffff;
++ unsigned long s2 = (adler >> 16) & 0xffff;
++ int k;
++
++ if (buf == Z_NULL) return 1L;
++
++ while (len > 0) {
++ k = len < NMAX ? len : NMAX;
++ len -= k;
++ while (k >= 16) {
++ DO16(buf);
++ buf += 16;
++ k -= 16;
++ }
++ if (k != 0) do {
++ s1 += *buf++;
++ s2 += s1;
++ } while (--k);
++ s1 %= BASE;
++ s2 %= BASE;
++ }
++ return (s2 << 16) | s1;
++}
++/* --- adler32.c */
++
++#endif /* CONFIG_PPP_DEFLATE */
+diff -Nur linux/fs/jffs2/zlib.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/zlib.h
+--- linux/fs/jffs2/zlib.h 1970-01-01 07:00:00.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/fs/jffs2/zlib.h 2003-06-23 01:47:04.000000000 +0700
+@@ -0,0 +1,1010 @@
++/* $Id: zlib.h,v 1.2 1997/12/23 10:47:44 paulus Exp $ */
++
++/*
++ * This file is derived from zlib.h and zconf.h from the zlib-1.0.4
++ * distribution by Jean-loup Gailly and Mark Adler, with some additions
++ * by Paul Mackerras to aid in implementing Deflate compression and
++ * decompression for PPP packets.
++ */
++
++/*
++ * ==FILEVERSION 971127==
++ *
++ * This marker is used by the Linux installation script to determine
++ * whether an up-to-date version of this file is already installed.
++ */
++
++
++/* +++ zlib.h */
++/* zlib.h -- interface of the 'zlib' general purpose compression library
++ version 1.0.4, Jul 24th, 1996.
++
++ Copyright (C) 1995-1996 Jean-loup Gailly and Mark Adler
++
++ This software is provided 'as-is', without any express or implied
++ warranty. In no event will the authors be held liable for any damages
++ arising from the use of this software.
++
++ Permission is granted to anyone to use this software for any purpose,
++ including commercial applications, and to alter it and redistribute it
++ freely, subject to the following restrictions:
++
++ 1. The origin of this software must not be misrepresented; you must not
++ claim that you wrote the original software. If you use this software
++ in a product, an acknowledgment in the product documentation would be
++ appreciated but is not required.
++ 2. Altered source versions must be plainly marked as such, and must not be
++ misrepresented as being the original software.
++ 3. This notice may not be removed or altered from any source distribution.
++
++ Jean-loup Gailly Mark Adler
++ gzip@prep.ai.mit.edu madler@alumni.caltech.edu
++
++
++ The data format used by the zlib library is described by RFCs (Request for
++ Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt
++ (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format).
++*/
++
++#ifndef _ZLIB_H
++#define _ZLIB_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++/* +++ zconf.h */
++/* zconf.h -- configuration of the zlib compression library
++ * Copyright (C) 1995-1996 Jean-loup Gailly.
++ * For conditions of distribution and use, see copyright notice in zlib.h
++ */
++
++/* From: zconf.h,v 1.20 1996/07/02 15:09:28 me Exp $ */
++
++#ifndef _ZCONF_H
++#define _ZCONF_H
++
++/*
++ * If you *really* need a unique prefix for all types and library functions,
++ * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
++ */
++#ifdef Z_PREFIX
++# define deflateInit_ z_deflateInit_
++# define deflate z_deflate
++# define deflateEnd z_deflateEnd
++# define inflateInit_ z_inflateInit_
++# define inflate z_inflate
++# define inflateEnd z_inflateEnd
++# define deflateInit2_ z_deflateInit2_
++# define deflateSetDictionary z_deflateSetDictionary
++# define deflateCopy z_deflateCopy
++# define deflateReset z_deflateReset
++# define deflateParams z_deflateParams
++# define inflateInit2_ z_inflateInit2_
++# define inflateSetDictionary z_inflateSetDictionary
++# define inflateSync z_inflateSync
++# define inflateReset z_inflateReset
++# define compress z_compress
++# define uncompress z_uncompress
++# define adler32 z_adler32
++# define crc32 z_crc32
++# define get_crc_table z_get_crc_table
++
++# define Byte z_Byte
++# define uInt z_uInt
++# define uLong z_uLong
++# define Bytef z_Bytef
++# define charf z_charf
++# define intf z_intf
++# define uIntf z_uIntf
++# define uLongf z_uLongf
++# define voidpf z_voidpf
++# define voidp z_voidp
++#endif
++
++#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
++# define WIN32
++#endif
++#if defined(__GNUC__) || defined(WIN32) || defined(__386__) || defined(i386)
++# ifndef __32BIT__
++# define __32BIT__
++# endif
++#endif
++#if defined(__MSDOS__) && !defined(MSDOS)
++# define MSDOS
++#endif
++
++/*
++ * Compile with -DMAXSEG_64K if the alloc function cannot allocate more
++ * than 64k bytes at a time (needed on systems with 16-bit int).
++ */
++#if defined(MSDOS) && !defined(__32BIT__)
++# define MAXSEG_64K
++#endif
++#ifdef MSDOS
++# define UNALIGNED_OK
++#endif
++
++#if (defined(MSDOS) || defined(_WINDOWS) || defined(WIN32)) && !defined(STDC)
++# define STDC
++#endif
++#if (defined(__STDC__) || defined(__cplusplus)) && !defined(STDC)
++# define STDC
++#endif
++
++#ifndef STDC
++# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */
++# define const
++# endif
++#endif
++
++/* Some Mac compilers merge all .h files incorrectly: */
++#if defined(__MWERKS__) || defined(applec) ||defined(THINK_C) ||defined(__SC__)
++# define NO_DUMMY_DECL
++#endif
++
++/* Maximum value for memLevel in deflateInit2 */
++#ifndef MAX_MEM_LEVEL
++# ifdef MAXSEG_64K
++# define MAX_MEM_LEVEL 8
++# else
++# define MAX_MEM_LEVEL 9
++# endif
++#endif
++
++/* Maximum value for windowBits in deflateInit2 and inflateInit2 */
++#ifndef MAX_WBITS
++# define MAX_WBITS 15 /* 32K LZ77 window */
++#endif
++
++/* The memory requirements for deflate are (in bytes):
++ 1 << (windowBits+2) + 1 << (memLevel+9)
++ that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values)
++ plus a few kilobytes for small objects. For example, if you want to reduce
++ the default memory requirements from 256K to 128K, compile with
++ make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7"
++ Of course this will generally degrade compression (there's no free lunch).
++
++ The memory requirements for inflate are (in bytes) 1 << windowBits
++ that is, 32K for windowBits=15 (default value) plus a few kilobytes
++ for small objects.
++*/
++
++ /* Type declarations */
++
++#ifndef OF /* function prototypes */
++# ifdef STDC
++# define OF(args) args
++# else
++# define OF(args) ()
++# endif
++#endif
++
++/* The following definitions for FAR are needed only for MSDOS mixed
++ * model programming (small or medium model with some far allocations).
++ * This was tested only with MSC; for other MSDOS compilers you may have
++ * to define NO_MEMCPY in zutil.h. If you don't need the mixed model,
++ * just define FAR to be empty.
++ */
++#if (defined(M_I86SM) || defined(M_I86MM)) && !defined(__32BIT__)
++ /* MSC small or medium model */
++# define SMALL_MEDIUM
++# ifdef _MSC_VER
++# define FAR __far
++# else
++# define FAR far
++# endif
++#endif
++#if defined(__BORLANDC__) && (defined(__SMALL__) || defined(__MEDIUM__))
++# ifndef __32BIT__
++# define SMALL_MEDIUM
++# define FAR __far
++# endif
++#endif
++#ifndef FAR
++# define FAR
++#endif
++
++typedef unsigned char Byte; /* 8 bits */
++typedef unsigned int uInt; /* 16 bits or more */
++typedef unsigned long uLong; /* 32 bits or more */
++
++#if defined(__BORLANDC__) && defined(SMALL_MEDIUM)
++ /* Borland C/C++ ignores FAR inside typedef */
++# define Bytef Byte FAR
++#else
++ typedef Byte FAR Bytef;
++#endif
++typedef char FAR charf;
++typedef int FAR intf;
++typedef uInt FAR uIntf;
++typedef uLong FAR uLongf;
++
++#ifdef STDC
++ typedef void FAR *voidpf;
++ typedef void *voidp;
++#else
++ typedef Byte FAR *voidpf;
++ typedef Byte *voidp;
++#endif
++
++
++/* Compile with -DZLIB_DLL for Windows DLL support */
++#if (defined(_WINDOWS) || defined(WINDOWS)) && defined(ZLIB_DLL)
++# include <windows.h>
++# define EXPORT WINAPI
++#else
++# define EXPORT
++#endif
++
++#endif /* _ZCONF_H */
++/* --- zconf.h */
++
++#define ZLIB_VERSION "1.0.4P"
++
++/*
++ The 'zlib' compression library provides in-memory compression and
++ decompression functions, including integrity checks of the uncompressed
++ data. This version of the library supports only one compression method
++ (deflation) but other algorithms may be added later and will have the same
++ stream interface.
++
++ For compression the application must provide the output buffer and
++ may optionally provide the input buffer for optimization. For decompression,
++ the application must provide the input buffer and may optionally provide
++ the output buffer for optimization.
++
++ Compression can be done in a single step if the buffers are large
++ enough (for example if an input file is mmap'ed), or can be done by
++ repeated calls of the compression function. In the latter case, the
++ application must provide more input and/or consume the output
++ (providing more output space) before each call.
++
++ The library does not install any signal handler. It is recommended to
++ add at least a handler for SIGSEGV when decompressing; the library checks
++ the consistency of the input data whenever possible but may go nuts
++ for some forms of corrupted input.
++*/
++
++typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size));
++typedef void (*free_func) OF((voidpf opaque, voidpf address));
++
++struct internal_state;
++
++typedef struct z_stream_s {
++ Bytef *next_in; /* next input byte */
++ uInt avail_in; /* number of bytes available at next_in */
++ uLong total_in; /* total nb of input bytes read so far */
++
++ Bytef *next_out; /* next output byte should be put there */
++ uInt avail_out; /* remaining free space at next_out */
++ uLong total_out; /* total nb of bytes output so far */
++
++ char *msg; /* last error message, NULL if no error */
++ struct internal_state FAR *state; /* not visible by applications */
++
++ alloc_func zalloc; /* used to allocate the internal state */
++ free_func zfree; /* used to free the internal state */
++ voidpf opaque; /* private data object passed to zalloc and zfree */
++
++ int data_type; /* best guess about the data type: ascii or binary */
++ uLong adler; /* adler32 value of the uncompressed data */
++ uLong reserved; /* reserved for future use */
++} z_stream;
++
++typedef z_stream FAR *z_streamp;
++
++/*
++ The application must update next_in and avail_in when avail_in has
++ dropped to zero. It must update next_out and avail_out when avail_out
++ has dropped to zero. The application must initialize zalloc, zfree and
++ opaque before calling the init function. All other fields are set by the
++ compression library and must not be updated by the application.
++
++ The opaque value provided by the application will be passed as the first
++ parameter for calls of zalloc and zfree. This can be useful for custom
++ memory management. The compression library attaches no meaning to the
++ opaque value.
++
++ zalloc must return Z_NULL if there is not enough memory for the object.
++ On 16-bit systems, the functions zalloc and zfree must be able to allocate
++ exactly 65536 bytes, but will not be required to allocate more than this
++ if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS,
++ pointers returned by zalloc for objects of exactly 65536 bytes *must*
++ have their offset normalized to zero. The default allocation function
++ provided by this library ensures this (see zutil.c). To reduce memory
++ requirements and avoid any allocation of 64K objects, at the expense of
++ compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h).
++
++ The fields total_in and total_out can be used for statistics or
++ progress reports. After compression, total_in holds the total size of
++ the uncompressed data and may be saved for use in the decompressor
++ (particularly if the decompressor wants to decompress everything in
++ a single step).
++*/
++
++ /* constants */
++
++#define Z_NO_FLUSH 0
++#define Z_PARTIAL_FLUSH 1
++#define Z_PACKET_FLUSH 2
++#define Z_SYNC_FLUSH 3
++#define Z_FULL_FLUSH 4
++#define Z_FINISH 5
++/* Allowed flush values; see deflate() below for details */
++
++#define Z_OK 0
++#define Z_STREAM_END 1
++#define Z_NEED_DICT 2
++#define Z_ERRNO (-1)
++#define Z_STREAM_ERROR (-2)
++#define Z_DATA_ERROR (-3)
++#define Z_MEM_ERROR (-4)
++#define Z_BUF_ERROR (-5)
++#define Z_VERSION_ERROR (-6)
++/* Return codes for the compression/decompression functions. Negative
++ * values are errors, positive values are used for special but normal events.
++ */
++
++#define Z_NO_COMPRESSION 0
++#define Z_BEST_SPEED 1
++#define Z_BEST_COMPRESSION 9
++#define Z_DEFAULT_COMPRESSION (-1)
++/* compression levels */
++
++#define Z_FILTERED 1
++#define Z_HUFFMAN_ONLY 2
++#define Z_DEFAULT_STRATEGY 0
++/* compression strategy; see deflateInit2() below for details */
++
++#define Z_BINARY 0
++#define Z_ASCII 1
++#define Z_UNKNOWN 2
++/* Possible values of the data_type field */
++
++#define Z_DEFLATED 8
++/* The deflate compression method (the only one supported in this version) */
++
++#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */
++
++#define zlib_version zlibVersion()
++/* for compatibility with versions < 1.0.2 */
++
++ /* basic functions */
++
++extern const char * EXPORT zlibVersion OF((void));
++/* The application can compare zlibVersion and ZLIB_VERSION for consistency.
++ If the first character differs, the library code actually used is
++ not compatible with the zlib.h header file used by the application.
++ This check is automatically made by deflateInit and inflateInit.
++ */
++
++/*
++extern int EXPORT deflateInit OF((z_streamp strm, int level));
++
++ Initializes the internal stream state for compression. The fields
++ zalloc, zfree and opaque must be initialized before by the caller.
++ If zalloc and zfree are set to Z_NULL, deflateInit updates them to
++ use default allocation functions.
++
++ The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9:
++ 1 gives best speed, 9 gives best compression, 0 gives no compression at
++ all (the input data is simply copied a block at a time).
++ Z_DEFAULT_COMPRESSION requests a default compromise between speed and
++ compression (currently equivalent to level 6).
++
++ deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
++ enough memory, Z_STREAM_ERROR if level is not a valid compression level,
++ Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible
++ with the version assumed by the caller (ZLIB_VERSION).
++ msg is set to null if there is no error message. deflateInit does not
++ perform any compression: this will be done by deflate().
++*/
++
++
++extern int EXPORT deflate OF((z_streamp strm, int flush));
++/*
++ Performs one or both of the following actions:
++
++ - Compress more input starting at next_in and update next_in and avail_in
++ accordingly. If not all input can be processed (because there is not
++ enough room in the output buffer), next_in and avail_in are updated and
++ processing will resume at this point for the next call of deflate().
++
++ - Provide more output starting at next_out and update next_out and avail_out
++ accordingly. This action is forced if the parameter flush is non zero.
++ Forcing flush frequently degrades the compression ratio, so this parameter
++ should be set only when necessary (in interactive applications).
++ Some output may be provided even if flush is not set.
++
++ Before the call of deflate(), the application should ensure that at least
++ one of the actions is possible, by providing more input and/or consuming
++ more output, and updating avail_in or avail_out accordingly; avail_out
++ should never be zero before the call. The application can consume the
++ compressed output when it wants, for example when the output buffer is full
++ (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK
++ and with zero avail_out, it must be called again after making room in the
++ output buffer because there might be more output pending.
++
++ If the parameter flush is set to Z_PARTIAL_FLUSH, the current compression
++ block is terminated and flushed to the output buffer so that the
++ decompressor can get all input data available so far. For method 9, a future
++ variant on method 8, the current block will be flushed but not terminated.
++ Z_SYNC_FLUSH has the same effect as partial flush except that the compressed
++ output is byte aligned (the compressor can clear its internal bit buffer)
++ and the current block is always terminated; this can be useful if the
++ compressor has to be restarted from scratch after an interruption (in which
++ case the internal state of the compressor may be lost).
++ If flush is set to Z_FULL_FLUSH, the compression block is terminated, a
++ special marker is output and the compression dictionary is discarded; this
++ is useful to allow the decompressor to synchronize if one compressed block
++ has been damaged (see inflateSync below). Flushing degrades compression and
++ so should be used only when necessary. Using Z_FULL_FLUSH too often can
++ seriously degrade the compression. If deflate returns with avail_out == 0,
++ this function must be called again with the same value of the flush
++ parameter and more output space (updated avail_out), until the flush is
++ complete (deflate returns with non-zero avail_out).
++
++ If the parameter flush is set to Z_PACKET_FLUSH, the compression
++ block is terminated, and a zero-length stored block is output,
++ omitting the length bytes (the effect of this is that the 3-bit type
++ code 000 for a stored block is output, and the output is then
++ byte-aligned). This is designed for use at the end of a PPP packet.
++
++ If the parameter flush is set to Z_FINISH, pending input is processed,
++ pending output is flushed and deflate returns with Z_STREAM_END if there
++ was enough output space; if deflate returns with Z_OK, this function must be
++ called again with Z_FINISH and more output space (updated avail_out) but no
++ more input data, until it returns with Z_STREAM_END or an error. After
++ deflate has returned Z_STREAM_END, the only possible operations on the
++ stream are deflateReset or deflateEnd.
++
++ Z_FINISH can be used immediately after deflateInit if all the compression
++ is to be done in a single step. In this case, avail_out must be at least
++ 0.1% larger than avail_in plus 12 bytes. If deflate does not return
++ Z_STREAM_END, then it must be called again as described above.
++
++ deflate() may update data_type if it can make a good guess about
++ the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered
++ binary. This field is only for information purposes and does not affect
++ the compression algorithm in any manner.
++
++ deflate() returns Z_OK if some progress has been made (more input
++ processed or more output produced), Z_STREAM_END if all input has been
++ consumed and all output has been produced (only when flush is set to
++ Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example
++ if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible.
++*/
++
++
++extern int EXPORT deflateEnd OF((z_streamp strm));
++/*
++ All dynamically allocated data structures for this stream are freed.
++ This function discards any unprocessed input and does not flush any
++ pending output.
++
++ deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the
++ stream state was inconsistent, Z_DATA_ERROR if the stream was freed
++ prematurely (some input or output was discarded). In the error case,
++ msg may be set but then points to a static string (which must not be
++ deallocated).
++*/
++
++
++/*
++extern int EXPORT inflateInit OF((z_streamp strm));
++
++ Initializes the internal stream state for decompression. The fields
++ zalloc, zfree and opaque must be initialized before by the caller. If
++ zalloc and zfree are set to Z_NULL, inflateInit updates them to use default
++ allocation functions.
++
++ inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not
++ enough memory, Z_VERSION_ERROR if the zlib library version is incompatible
++ with the version assumed by the caller. msg is set to null if there is no
++ error message. inflateInit does not perform any decompression: this will be
++ done by inflate().
++*/
++
++
++extern int EXPORT inflate OF((z_streamp strm, int flush));
++/*
++ Performs one or both of the following actions:
++
++ - Decompress more input starting at next_in and update next_in and avail_in
++ accordingly. If not all input can be processed (because there is not
++ enough room in the output buffer), next_in is updated and processing
++ will resume at this point for the next call of inflate().
++
++ - Provide more output starting at next_out and update next_out and avail_out
++ accordingly. inflate() provides as much output as possible, until there
++ is no more input data or no more space in the output buffer (see below
++ about the flush parameter).
++
++ Before the call of inflate(), the application should ensure that at least
++ one of the actions is possible, by providing more input and/or consuming
++ more output, and updating the next_* and avail_* values accordingly.
++ The application can consume the uncompressed output when it wants, for
++ example when the output buffer is full (avail_out == 0), or after each
++ call of inflate(). If inflate returns Z_OK and with zero avail_out, it
++ must be called again after making room in the output buffer because there
++ might be more output pending.
++
++ If the parameter flush is set to Z_PARTIAL_FLUSH or Z_PACKET_FLUSH,
++ inflate flushes as much output as possible to the output buffer. The
++ flushing behavior of inflate is not specified for values of the flush
++ parameter other than Z_PARTIAL_FLUSH, Z_PACKET_FLUSH or Z_FINISH, but the
++ current implementation actually flushes as much output as possible
++ anyway. For Z_PACKET_FLUSH, inflate checks that once all the input data
++ has been consumed, it is expecting to see the length field of a stored
++ block; if not, it returns Z_DATA_ERROR.
++
++ inflate() should normally be called until it returns Z_STREAM_END or an
++ error. However if all decompression is to be performed in a single step
++ (a single call of inflate), the parameter flush should be set to
++ Z_FINISH. In this case all pending input is processed and all pending
++ output is flushed; avail_out must be large enough to hold all the
++ uncompressed data. (The size of the uncompressed data may have been saved
++ by the compressor for this purpose.) The next operation on this stream must
++ be inflateEnd to deallocate the decompression state. The use of Z_FINISH
++ is never required, but can be used to inform inflate that a faster routine
++ may be used for the single inflate() call.
++
++ inflate() returns Z_OK if some progress has been made (more input
++ processed or more output produced), Z_STREAM_END if the end of the
++ compressed data has been reached and all uncompressed output has been
++ produced, Z_NEED_DICT if a preset dictionary is needed at this point (see
++ inflateSetDictionary below), Z_DATA_ERROR if the input data was corrupted,
++ Z_STREAM_ERROR if the stream structure was inconsistent (for example if
++ next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory,
++ Z_BUF_ERROR if no progress is possible or if there was not enough room in
++ the output buffer when Z_FINISH is used. In the Z_DATA_ERROR case, the
++ application may then call inflateSync to look for a good compression block.
++ In the Z_NEED_DICT case, strm->adler is set to the Adler32 value of the
++ dictionary chosen by the compressor.
++*/
++
++
++extern int EXPORT inflateEnd OF((z_streamp strm));
++/*
++ All dynamically allocated data structures for this stream are freed.
++ This function discards any unprocessed input and does not flush any
++ pending output.
++
++ inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state
++ was inconsistent. In the error case, msg may be set but then points to a
++ static string (which must not be deallocated).
++*/
++
++ /* Advanced functions */
++
++/*
++ The following functions are needed only in some special applications.
++*/
++
++/*
++extern int EXPORT deflateInit2 OF((z_streamp strm,
++ int level,
++ int method,
++ int windowBits,
++ int memLevel,
++ int strategy));
++
++ This is another version of deflateInit with more compression options. The
++ fields next_in, zalloc, zfree and opaque must be initialized before by
++ the caller.
++
++ The method parameter is the compression method. It must be Z_DEFLATED in
++ this version of the library. (Method 9 will allow a 64K history buffer and
++ partial block flushes.)
++
++ The windowBits parameter is the base two logarithm of the window size
++ (the size of the history buffer). It should be in the range 8..15 for this
++ version of the library (the value 16 will be allowed for method 9). Larger
++ values of this parameter result in better compression at the expense of
++ memory usage. The default value is 15 if deflateInit is used instead.
++
++ The memLevel parameter specifies how much memory should be allocated
++ for the internal compression state. memLevel=1 uses minimum memory but
++ is slow and reduces compression ratio; memLevel=9 uses maximum memory
++ for optimal speed. The default value is 8. See zconf.h for total memory
++ usage as a function of windowBits and memLevel.
++
++ The strategy parameter is used to tune the compression algorithm. Use the
++ value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
++ filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no
++ string match). Filtered data consists mostly of small values with a
++ somewhat random distribution. In this case, the compression algorithm is
++ tuned to compress them better. The effect of Z_FILTERED is to force more
++ Huffman coding and less string matching; it is somewhat intermediate
++ between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects
++ the compression ratio but not the correctness of the compressed output even
++ if it is not set appropriately.
++
++ If next_in is not null, the library will use this buffer to hold also
++ some history information; the buffer must either hold the entire input
++ data, or have at least 1<<(windowBits+1) bytes and be writable. If next_in
++ is null, the library will allocate its own history buffer (and leave next_in
++ null). next_out need not be provided here but must be provided by the
++ application for the next call of deflate().
++
++ If the history buffer is provided by the application, next_in must
++ must never be changed by the application since the compressor maintains
++ information inside this buffer from call to call; the application
++ must provide more input only by increasing avail_in. next_in is always
++ reset by the library in this case.
++
++ deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was
++ not enough memory, Z_STREAM_ERROR if a parameter is invalid (such as
++ an invalid method). msg is set to null if there is no error message.
++ deflateInit2 does not perform any compression: this will be done by
++ deflate().
++*/
++
++extern int EXPORT deflateSetDictionary OF((z_streamp strm,
++ const Bytef *dictionary,
++ uInt dictLength));
++/*
++ Initializes the compression dictionary (history buffer) from the given
++ byte sequence without producing any compressed output. This function must
++ be called immediately after deflateInit or deflateInit2, before any call
++ of deflate. The compressor and decompressor must use exactly the same
++ dictionary (see inflateSetDictionary).
++ The dictionary should consist of strings (byte sequences) that are likely
++ to be encountered later in the data to be compressed, with the most commonly
++ used strings preferably put towards the end of the dictionary. Using a
++ dictionary is most useful when the data to be compressed is short and
++ can be predicted with good accuracy; the data can then be compressed better
++ than with the default empty dictionary. In this version of the library,
++ only the last 32K bytes of the dictionary are used.
++ Upon return of this function, strm->adler is set to the Adler32 value
++ of the dictionary; the decompressor may later use this value to determine
++ which dictionary has been used by the compressor. (The Adler32 value
++ applies to the whole dictionary even if only a subset of the dictionary is
++ actually used by the compressor.)
++
++ deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a
++ parameter is invalid (such as NULL dictionary) or the stream state
++ is inconsistent (for example if deflate has already been called for this
++ stream). deflateSetDictionary does not perform any compression: this will
++ be done by deflate().
++*/
++
++extern int EXPORT deflateCopy OF((z_streamp dest,
++ z_streamp source));
++/*
++ Sets the destination stream as a complete copy of the source stream. If
++ the source stream is using an application-supplied history buffer, a new
++ buffer is allocated for the destination stream. The compressed output
++ buffer is always application-supplied. It's the responsibility of the
++ application to provide the correct values of next_out and avail_out for the
++ next call of deflate.
++
++ This function can be useful when several compression strategies will be
++ tried, for example when there are several ways of pre-processing the input
++ data with a filter. The streams that will be discarded should then be freed
++ by calling deflateEnd. Note that deflateCopy duplicates the internal
++ compression state which can be quite large, so this strategy is slow and
++ can consume lots of memory.
++
++ deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not
++ enough memory, Z_STREAM_ERROR if the source stream state was inconsistent
++ (such as zalloc being NULL). msg is left unchanged in both source and
++ destination.
++*/
++
++extern int EXPORT deflateReset OF((z_streamp strm));
++/*
++ This function is equivalent to deflateEnd followed by deflateInit,
++ but does not free and reallocate all the internal compression state.
++ The stream will keep the same compression level and any other attributes
++ that may have been set by deflateInit2.
++
++ deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
++ stream state was inconsistent (such as zalloc or state being NULL).
++*/
++
++extern int EXPORT deflateParams OF((z_streamp strm, int level, int strategy));
++/*
++ Dynamically update the compression level and compression strategy.
++ This can be used to switch between compression and straight copy of
++ the input data, or to switch to a different kind of input data requiring
++ a different strategy. If the compression level is changed, the input
++ available so far is compressed with the old level (and may be flushed);
++ the new level will take effect only at the next call of deflate().
++
++ Before the call of deflateParams, the stream state must be set as for
++ a call of deflate(), since the currently available input may have to
++ be compressed and flushed. In particular, strm->avail_out must be non-zero.
++
++ deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source
++ stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR
++ if strm->avail_out was zero.
++*/
++
++extern int EXPORT deflateOutputPending OF((z_streamp strm));
++/*
++ Returns the number of bytes of output which are immediately
++ available from the compressor (i.e. without any further input
++ or flush).
++*/
++
++/*
++extern int EXPORT inflateInit2 OF((z_streamp strm,
++ int windowBits));
++
++ This is another version of inflateInit with more compression options. The
++ fields next_out, zalloc, zfree and opaque must be initialized before by
++ the caller.
++
++ The windowBits parameter is the base two logarithm of the maximum window
++ size (the size of the history buffer). It should be in the range 8..15 for
++ this version of the library (the value 16 will be allowed soon). The
++ default value is 15 if inflateInit is used instead. If a compressed stream
++ with a larger window size is given as input, inflate() will return with
++ the error code Z_DATA_ERROR instead of trying to allocate a larger window.
++
++ If next_out is not null, the library will use this buffer for the history
++ buffer; the buffer must either be large enough to hold the entire output
++ data, or have at least 1<<windowBits bytes. If next_out is null, the
++ library will allocate its own buffer (and leave next_out null). next_in
++ need not be provided here but must be provided by the application for the
++ next call of inflate().
++
++ If the history buffer is provided by the application, next_out must
++ never be changed by the application since the decompressor maintains
++ history information inside this buffer from call to call; the application
++ can only reset next_out to the beginning of the history buffer when
++ avail_out is zero and all output has been consumed.
++
++ inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was
++ not enough memory, Z_STREAM_ERROR if a parameter is invalid (such as
++ windowBits < 8). msg is set to null if there is no error message.
++ inflateInit2 does not perform any decompression: this will be done by
++ inflate().
++*/
++
++extern int EXPORT inflateSetDictionary OF((z_streamp strm,
++ const Bytef *dictionary,
++ uInt dictLength));
++/*
++ Initializes the decompression dictionary (history buffer) from the given
++ uncompressed byte sequence. This function must be called immediately after
++ a call of inflate if this call returned Z_NEED_DICT. The dictionary chosen
++ by the compressor can be determined from the Adler32 value returned by this
++ call of inflate. The compressor and decompressor must use exactly the same
++ dictionary (see deflateSetDictionary).
++
++ inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a
++ parameter is invalid (such as NULL dictionary) or the stream state is
++ inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the
++ expected one (incorrect Adler32 value). inflateSetDictionary does not
++ perform any decompression: this will be done by subsequent calls of
++ inflate().
++*/
++
++extern int EXPORT inflateSync OF((z_streamp strm));
++/*
++ Skips invalid compressed data until the special marker (see deflate()
++ above) can be found, or until all available input is skipped. No output
++ is provided.
++
++ inflateSync returns Z_OK if the special marker has been found, Z_BUF_ERROR
++ if no more input was provided, Z_DATA_ERROR if no marker has been found,
++ or Z_STREAM_ERROR if the stream structure was inconsistent. In the success
++ case, the application may save the current current value of total_in which
++ indicates where valid compressed data was found. In the error case, the
++ application may repeatedly call inflateSync, providing more input each time,
++ until success or end of the input data.
++*/
++
++extern int EXPORT inflateReset OF((z_streamp strm));
++/*
++ This function is equivalent to inflateEnd followed by inflateInit,
++ but does not free and reallocate all the internal decompression state.
++ The stream will keep attributes that may have been set by inflateInit2.
++
++ inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source
++ stream state was inconsistent (such as zalloc or state being NULL).
++*/
++
++extern int inflateIncomp OF((z_stream *strm));
++/*
++ This function adds the data at next_in (avail_in bytes) to the output
++ history without performing any output. There must be no pending output,
++ and the decompressor must be expecting to see the start of a block.
++ Calling this function is equivalent to decompressing a stored block
++ containing the data at next_in (except that the data is not output).
++*/
++
++ /* utility functions */
++
++/*
++ The following utility functions are implemented on top of the
++ basic stream-oriented functions. To simplify the interface, some
++ default options are assumed (compression level, window size,
++ standard memory allocation functions). The source code of these
++ utility functions can easily be modified if you need special options.
++*/
++
++extern int EXPORT compress OF((Bytef *dest, uLongf *destLen,
++ const Bytef *source, uLong sourceLen));
++/*
++ Compresses the source buffer into the destination buffer. sourceLen is
++ the byte length of the source buffer. Upon entry, destLen is the total
++ size of the destination buffer, which must be at least 0.1% larger than
++ sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the
++ compressed buffer.
++ This function can be used to compress a whole file at once if the
++ input file is mmap'ed.
++ compress returns Z_OK if success, Z_MEM_ERROR if there was not
++ enough memory, Z_BUF_ERROR if there was not enough room in the output
++ buffer.
++*/
++
++extern int EXPORT uncompress OF((Bytef *dest, uLongf *destLen,
++ const Bytef *source, uLong sourceLen));
++/*
++ Decompresses the source buffer into the destination buffer. sourceLen is
++ the byte length of the source buffer. Upon entry, destLen is the total
++ size of the destination buffer, which must be large enough to hold the
++ entire uncompressed data. (The size of the uncompressed data must have
++ been saved previously by the compressor and transmitted to the decompressor
++ by some mechanism outside the scope of this compression library.)
++ Upon exit, destLen is the actual size of the compressed buffer.
++ This function can be used to decompress a whole file at once if the
++ input file is mmap'ed.
++
++ uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
++ enough memory, Z_BUF_ERROR if there was not enough room in the output
++ buffer, or Z_DATA_ERROR if the input data was corrupted.
++*/
++
++
++typedef voidp gzFile;
++
++extern gzFile EXPORT gzopen OF((const char *path, const char *mode));
++/*
++ Opens a gzip (.gz) file for reading or writing. The mode parameter
++ is as in fopen ("rb" or "wb") but can also include a compression level
++ ("wb9"). gzopen can be used to read a file which is not in gzip format;
++ in this case gzread will directly read from the file without decompression.
++ gzopen returns NULL if the file could not be opened or if there was
++ insufficient memory to allocate the (de)compression state; errno
++ can be checked to distinguish the two cases (if errno is zero, the
++ zlib error is Z_MEM_ERROR).
++*/
++
++extern gzFile EXPORT gzdopen OF((int fd, const char *mode));
++/*
++ gzdopen() associates a gzFile with the file descriptor fd. File
++ descriptors are obtained from calls like open, dup, creat, pipe or
++ fileno (in the file has been previously opened with fopen).
++ The mode parameter is as in gzopen.
++ The next call of gzclose on the returned gzFile will also close the
++ file descriptor fd, just like fclose(fdopen(fd), mode) closes the file
++ descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode).
++ gzdopen returns NULL if there was insufficient memory to allocate
++ the (de)compression state.
++*/
++
++extern int EXPORT gzread OF((gzFile file, voidp buf, unsigned len));
++/*
++ Reads the given number of uncompressed bytes from the compressed file.
++ If the input file was not in gzip format, gzread copies the given number
++ of bytes into the buffer.
++ gzread returns the number of uncompressed bytes actually read (0 for
++ end of file, -1 for error). */
++
++extern int EXPORT gzwrite OF((gzFile file, const voidp buf, unsigned len));
++/*
++ Writes the given number of uncompressed bytes into the compressed file.
++ gzwrite returns the number of uncompressed bytes actually written
++ (0 in case of error).
++*/
++
++extern int EXPORT gzflush OF((gzFile file, int flush));
++/*
++ Flushes all pending output into the compressed file. The parameter
++ flush is as in the deflate() function. The return value is the zlib
++ error number (see function gzerror below). gzflush returns Z_OK if
++ the flush parameter is Z_FINISH and all output could be flushed.
++ gzflush should be called only when strictly necessary because it can
++ degrade compression.
++*/
++
++extern int EXPORT gzclose OF((gzFile file));
++/*
++ Flushes all pending output if necessary, closes the compressed file
++ and deallocates all the (de)compression state. The return value is the zlib
++ error number (see function gzerror below).
++*/
++
++extern const char * EXPORT gzerror OF((gzFile file, int *errnum));
++/*
++ Returns the error message for the last error which occurred on the
++ given compressed file. errnum is set to zlib error number. If an
++ error occurred in the file system and not in the compression library,
++ errnum is set to Z_ERRNO and the application may consult errno
++ to get the exact error code.
++*/
++
++ /* checksum functions */
++
++/*
++ These functions are not related to compression but are exported
++ anyway because they might be useful in applications using the
++ compression library.
++*/
++
++extern uLong EXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len));
++
++/*
++ Update a running Adler-32 checksum with the bytes buf[0..len-1] and
++ return the updated checksum. If buf is NULL, this function returns
++ the required initial value for the checksum.
++ An Adler-32 checksum is almost as reliable as a CRC32 but can be computed
++ much faster. Usage example:
++
++ uLong adler = adler32(0L, Z_NULL, 0);
++
++ while (read_buffer(buffer, length) != EOF) {
++ adler = adler32(adler, buffer, length);
++ }
++ if (adler != original_adler) error();
++*/
++
++extern uLong EXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len));
++/*
++ Update a running crc with the bytes buf[0..len-1] and return the updated
++ crc. If buf is NULL, this function returns the required initial value
++ for the crc. Pre- and post-conditioning (one's complement) is performed
++ within this function so it shouldn't be done by the application.
++ Usage example:
++
++ uLong crc = crc32(0L, Z_NULL, 0);
++
++ while (read_buffer(buffer, length) != EOF) {
++ crc = crc32(crc, buffer, length);
++ }
++ if (crc != original_crc) error();
++*/
++
++
++ /* various hacks, don't look :) */
++
++/* deflateInit and inflateInit are macros to allow checking the zlib version
++ * and the compiler's view of z_stream:
++ */
++extern int EXPORT deflateInit_ OF((z_streamp strm, int level,
++ const char *version, int stream_size));
++extern int EXPORT inflateInit_ OF((z_streamp strm,
++ const char *version, int stream_size));
++extern int EXPORT deflateInit2_ OF((z_streamp strm, int level, int method,
++ int windowBits, int memLevel, int strategy,
++ const char *version, int stream_size));
++extern int EXPORT inflateInit2_ OF((z_streamp strm, int windowBits,
++ const char *version, int stream_size));
++#define deflateInit(strm, level) \
++ deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream))
++#define inflateInit(strm) \
++ inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream))
++#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \
++ deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\
++ (strategy), ZLIB_VERSION, sizeof(z_stream))
++#define inflateInit2(strm, windowBits) \
++ inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream))
++
++#if !defined(_Z_UTIL_H) && !defined(NO_DUMMY_DECL)
++ struct internal_state {int dummy;}; /* hack for buggy compilers */
++#endif
++
++uLongf *get_crc_table OF((void)); /* can be used by asm versions of crc32() */
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* _ZLIB_H */
++/* --- zlib.h */
+diff -Nur linux/include/linux/jffs2.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/include/linux/jffs2.h
+--- linux/include/linux/jffs2.h 2003-05-13 16:19:57.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/include/linux/jffs2.h 2003-06-23 01:47:04.000000000 +0700
+@@ -1,20 +1,44 @@
+ /*
+ * JFFS2 -- Journalling Flash File System, Version 2.
+ *
+- * Copyright (C) 2001, 2002 Red Hat, Inc.
++ * Copyright (C) 2001 Red Hat, Inc.
+ *
+ * Created by David Woodhouse <dwmw2@cambridge.redhat.com>
+ *
+- * For licensing information, see the file 'LICENCE' in the
+- * jffs2 directory.
++ * The original JFFS, from which the design for JFFS2 was derived,
++ * was designed and implemented by Axis Communications AB.
+ *
+- * $Id: jffs2.h,v 1.25 2002/08/20 21:37:27 dwmw2 Exp $
++ * The contents of this file are subject to the Red Hat eCos Public
++ * License Version 1.1 (the "Licence"); you may not use this file
++ * except in compliance with the Licence. You may obtain a copy of
++ * the Licence at http://www.redhat.com/
++ *
++ * Software distributed under the Licence is distributed on an "AS IS"
++ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
++ * See the Licence for the specific language governing rights and
++ * limitations under the Licence.
++ *
++ * The Original Code is JFFS2 - Journalling Flash File System, version 2
++ *
++ * Alternatively, the contents of this file may be used under the
++ * terms of the GNU General Public License version 2 (the "GPL"), in
++ * which case the provisions of the GPL are applicable instead of the
++ * above. If you wish to allow the use of your version of this file
++ * only under the terms of the GPL and not to allow others to use your
++ * version of this file under the RHEPL, indicate your decision by
++ * deleting the provisions above and replace them with the notice and
++ * other provisions required by the GPL. If you do not delete the
++ * provisions above, a recipient may use your version of this file
++ * under either the RHEPL or the GPL.
++ *
++ * $Id: jffs2.h,v 1.19 2001/10/09 13:20:23 dwmw2 Exp $
+ *
+ */
+
+ #ifndef __LINUX_JFFS2_H__
+ #define __LINUX_JFFS2_H__
+
++#include <asm/types.h>
+ #define JFFS2_SUPER_MAGIC 0x72b6
+
+ /* Values we may expect to find in the 'magic' field */
+@@ -54,12 +78,16 @@
+ #define JFFS2_NODETYPE_DIRENT (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 1)
+ #define JFFS2_NODETYPE_INODE (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 2)
+ #define JFFS2_NODETYPE_CLEANMARKER (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 3)
+-#define JFFS2_NODETYPE_PADDING (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 4)
+
+ // Maybe later...
+ //#define JFFS2_NODETYPE_CHECKPOINT (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 3)
+ //#define JFFS2_NODETYPE_OPTIONS (JFFS2_FEATURE_RWCOMPAT_COPY | JFFS2_NODE_ACCURATE | 4)
+
++/* Same as the non_ECC versions, but with extra space for real
++ * ECC instead of just the checksum. For use on NAND flash
++ */
++//#define JFFS2_NODETYPE_DIRENT_ECC (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 5)
++//#define JFFS2_NODETYPE_INODE_ECC (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 6)
+
+ #define JFFS2_INO_FLAG_PREREAD 1 /* Do read_inode() for this one at
+ mount time, don't wait for it to
+@@ -68,66 +96,31 @@
+ compression type */
+
+
+-/* These can go once we've made sure we've caught all uses without
+- byteswapping */
+-
+-typedef struct {
+- uint32_t v32;
+-} __attribute__((packed)) jint32_t;
+-
+-typedef struct {
+- uint16_t v16;
+-} __attribute__((packed)) jint16_t;
+-
+-#define JFFS2_NATIVE_ENDIAN
+-
+-#if defined(JFFS2_NATIVE_ENDIAN)
+-#define cpu_to_je16(x) ((jint16_t){x})
+-#define cpu_to_je32(x) ((jint32_t){x})
+-
+-#define je16_to_cpu(x) ((x).v16)
+-#define je32_to_cpu(x) ((x).v32)
+-#elif defined(JFFS2_BIG_ENDIAN)
+-#define cpu_to_je16(x) ((jint16_t){cpu_to_be16(x)})
+-#define cpu_to_je32(x) ((jint32_t){cpu_to_be32(x)})
+-
+-#define je16_to_cpu(x) (be16_to_cpu(x.v16))
+-#define je32_to_cpu(x) (be32_to_cpu(x.v32))
+-#elif defined(JFFS2_LITTLE_ENDIAN)
+-#define cpu_to_je16(x) ((jint16_t){cpu_to_le16(x)})
+-#define cpu_to_je32(x) ((jint32_t){cpu_to_le32(x)})
+-
+-#define je16_to_cpu(x) (le16_to_cpu(x.v16))
+-#define je32_to_cpu(x) (le32_to_cpu(x.v32))
+-#else
+-#error wibble
+-#endif
+-
+ struct jffs2_unknown_node
+ {
+ /* All start like this */
+- jint16_t magic;
+- jint16_t nodetype;
+- jint32_t totlen; /* So we can skip over nodes we don't grok */
+- jint32_t hdr_crc;
++ __u16 magic;
++ __u16 nodetype;
++ __u32 totlen; /* So we can skip over nodes we don't grok */
++ __u32 hdr_crc;
+ } __attribute__((packed));
+
+ struct jffs2_raw_dirent
+ {
+- jint16_t magic;
+- jint16_t nodetype; /* == JFFS_NODETYPE_DIRENT */
+- jint32_t totlen;
+- jint32_t hdr_crc;
+- jint32_t pino;
+- jint32_t version;
+- jint32_t ino; /* == zero for unlink */
+- jint32_t mctime;
+- uint8_t nsize;
+- uint8_t type;
+- uint8_t unused[2];
+- jint32_t node_crc;
+- jint32_t name_crc;
+- uint8_t name[0];
++ __u16 magic;
++ __u16 nodetype; /* == JFFS_NODETYPE_DIRENT */
++ __u32 totlen;
++ __u32 hdr_crc;
++ __u32 pino;
++ __u32 version;
++ __u32 ino; /* == zero for unlink */
++ __u32 mctime;
++ __u8 nsize;
++ __u8 type;
++ __u8 unused[2];
++ __u32 node_crc;
++ __u32 name_crc;
++ __u8 name[0];
+ } __attribute__((packed));
+
+ /* The JFFS2 raw inode structure: Used for storage on physical media. */
+@@ -138,28 +131,28 @@
+ */
+ struct jffs2_raw_inode
+ {
+- jint16_t magic; /* A constant magic number. */
+- jint16_t nodetype; /* == JFFS_NODETYPE_INODE */
+- jint32_t totlen; /* Total length of this node (inc data, etc.) */
+- jint32_t hdr_crc;
+- jint32_t ino; /* Inode number. */
+- jint32_t version; /* Version number. */
+- jint32_t mode; /* The file's type or mode. */
+- jint16_t uid; /* The file's owner. */
+- jint16_t gid; /* The file's group. */
+- jint32_t isize; /* Total resultant size of this inode (used for truncations) */
+- jint32_t atime; /* Last access time. */
+- jint32_t mtime; /* Last modification time. */
+- jint32_t ctime; /* Change time. */
+- jint32_t offset; /* Where to begin to write. */
+- jint32_t csize; /* (Compressed) data size */
+- jint32_t dsize; /* Size of the node's data. (after decompression) */
+- uint8_t compr; /* Compression algorithm used */
+- uint8_t usercompr; /* Compression algorithm requested by the user */
+- jint16_t flags; /* See JFFS2_INO_FLAG_* */
+- jint32_t data_crc; /* CRC for the (compressed) data. */
+- jint32_t node_crc; /* CRC for the raw inode (excluding data) */
+-// uint8_t data[dsize];
++ __u16 magic; /* A constant magic number. */
++ __u16 nodetype; /* == JFFS_NODETYPE_INODE */
++ __u32 totlen; /* Total length of this node (inc data, etc.) */
++ __u32 hdr_crc;
++ __u32 ino; /* Inode number. */
++ __u32 version; /* Version number. */
++ __u32 mode; /* The file's type or mode. */
++ __u16 uid; /* The file's owner. */
++ __u16 gid; /* The file's group. */
++ __u32 isize; /* Total resultant size of this inode (used for truncations) */
++ __u32 atime; /* Last access time. */
++ __u32 mtime; /* Last modification time. */
++ __u32 ctime; /* Change time. */
++ __u32 offset; /* Where to begin to write. */
++ __u32 csize; /* (Compressed) data size */
++ __u32 dsize; /* Size of the node's data. (after decompression) */
++ __u8 compr; /* Compression algorithm used */
++ __u8 usercompr; /* Compression algorithm requested by the user */
++ __u16 flags; /* See JFFS2_INO_FLAG_* */
++ __u32 data_crc; /* CRC for the (compressed) data. */
++ __u32 node_crc; /* CRC for the raw inode (excluding data) */
++// __u8 data[dsize];
+ } __attribute__((packed));
+
+ union jffs2_node_union {
+diff -Nur linux/include/linux/jffs2_fs_i.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/include/linux/jffs2_fs_i.h
+--- linux/include/linux/jffs2_fs_i.h 2003-05-13 16:19:57.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/include/linux/jffs2_fs_i.h 2003-06-23 01:47:04.000000000 +0700
+@@ -1,18 +1,22 @@
+-/* $Id: jffs2_fs_i.h,v 1.14 2002/09/04 14:12:03 dwmw2 Exp $ */
+-
+-/*
+- * ChangeLog:
+- * 19-Nov-2002 Lineo Japan, Inc. add dynamic construction of fragtree
+- *
+- */
++/* $Id: jffs2_fs_i.h,v 1.8 2001/04/18 13:05:28 dwmw2 Exp $ */
+
+ #ifndef _JFFS2_FS_I
+ #define _JFFS2_FS_I
+
+-#include <linux/version.h>
+-#include <linux/rbtree.h>
++/* Include the pipe_inode_info at the beginning so that we can still
++ use the storage space in the inode when we have a pipe inode.
++ This sucks.
++*/
++
++#undef THISSUCKS /* Only for 2.2 */
++#ifdef THISSUCKS
++#include <linux/pipe_fs_i.h>
++#endif
+
+ struct jffs2_inode_info {
++#ifdef THISSUCKS
++ struct pipe_inode_info pipecrap;
++#endif
+ /* We need an internal semaphore similar to inode->i_sem.
+ Unfortunately, we can't used the existing one, because
+ either the GC would deadlock, or we'd have to release it
+@@ -22,10 +26,10 @@
+ struct semaphore sem;
+
+ /* The highest (datanode) version number used for this ino */
+- uint32_t highest_version;
++ __u32 highest_version;
+
+ /* List of data fragments which make up the file */
+- rb_root_t fragtree;
++ struct jffs2_node_frag *fraglist;
+
+ /* There may be one datanode which isn't referenced by any of the
+ above fragments, if it contains a metadata update but no actual
+@@ -40,17 +44,19 @@
+ /* Some stuff we just have to keep in-core at all times, for each inode. */
+ struct jffs2_inode_cache *inocache;
+
+- uint16_t flags;
+- uint8_t usercompr;
+-
+-#ifdef CONFIG_JFFS2_DYNFRAGTREE
+- /* The number of frags linked to the fragtree */
+- uint32_t nr_frags;
+-#endif
++ /* Keep a pointer to the last physical node in the list. We don't
++ use the doubly-linked lists because we don't want to increase
++ the memory usage that much. This is simpler */
++ // struct jffs2_raw_node_ref *lastnode;
++ __u16 flags;
++ __u8 usercompr;
++};
+
+-#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,2)
+- struct inode vfs_inode;
++#ifdef JFFS2_OUT_OF_KERNEL
++#define JFFS2_INODE_INFO(i) ((struct jffs2_inode_info *) &(i)->u)
++#else
++#define JFFS2_INODE_INFO(i) (&i->u.jffs2_i)
+ #endif
+-};
+
+ #endif /* _JFFS2_FS_I */
++
+diff -Nur linux/include/linux/jffs2_fs_sb.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/include/linux/jffs2_fs_sb.h
+--- linux/include/linux/jffs2_fs_sb.h 2003-05-13 16:19:57.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/include/linux/jffs2_fs_sb.h 2003-06-23 01:47:04.000000000 +0700
+@@ -1,41 +1,18 @@
+-/* $Id: jffs2_fs_sb.h,v 1.34 2002/09/09 16:29:07 dwmw2 Exp $ */
+-
+-/*
+- * ChangeLog:
+- * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode
+- * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility
+- * 05-Nov-2002 Lineo Japan, Inc. modify nr_bad_blocks type
+- * 29-Oct-2002 Lineo Japan, Inc. add member nr_bad_blocks and cont_gc_count
+- *
+- */
+-
+-/*
+- * ChangeLog:
+- * 27-Nov-2002 Lineo Japan, Inc. add effective-gc mode
+- * 24-Nov-2002 SHARP add erasing_dirty_size
+- * 15-Nov-2002 Lineo Japan, Inc. add nodemerge facility
+- * 05-Nov-2002 Lineo Japan, Inc. modify nr_bad_blocks type
+- * 29-Oct-2002 Lineo Japan, Inc. add member nr_bad_blocks and cont_gc_count
+- *
+- */
++/* $Id: jffs2_fs_sb.h,v 1.16.2.1 2002/02/23 14:13:34 dwmw2 Exp $ */
+
+ #ifndef _JFFS2_FS_SB
+ #define _JFFS2_FS_SB
+
+ #include <linux/types.h>
+ #include <linux/spinlock.h>
+-#include <linux/tqueue.h>
+ #include <linux/completion.h>
+ #include <asm/semaphore.h>
+ #include <linux/list.h>
+
++#define INOCACHE_HASHSIZE 1
++
+ #define JFFS2_SB_FLAG_RO 1
+ #define JFFS2_SB_FLAG_MOUNTING 2
+-#ifdef CONFIG_JFFS2_NODEMERGE
+-#define JFFS2_SB_FLAG_GCING_A_BLOCK 4
+-#else
+-#define JFFS2_SB_FLAG_GCING_A_BLOCK 0
+-#endif
+
+ /* A struct for the overall file system control. Pointers to
+ jffs2_sb_info structs are named `c' in the source code.
+@@ -44,41 +21,36 @@
+ struct jffs2_sb_info {
+ struct mtd_info *mtd;
+
+- uint32_t highest_ino;
+- uint32_t checked_ino;
+-
++ __u32 highest_ino;
+ unsigned int flags;
++ spinlock_t nodelist_lock;
+
++ // pid_t thread_pid; /* GC thread's PID */
+ struct task_struct *gc_task; /* GC task struct */
+ struct semaphore gc_thread_start; /* GC thread start mutex */
+ struct completion gc_thread_exit; /* GC thread exit completion port */
++ // __u32 gc_minfree_threshold; /* GC trigger thresholds */
++ // __u32 gc_maxdirty_threshold;
+
+ struct semaphore alloc_sem; /* Used to protect all the following
+ fields, and also to protect against
+ out-of-order writing of nodes.
+ And GC.
+ */
+- uint32_t cleanmarker_size; /* Size of an _inline_ CLEANMARKER
+- (i.e. zero for OOB CLEANMARKER */
+-
+- uint32_t flash_size;
+- uint32_t used_size;
+- uint32_t dirty_size;
+- uint32_t wasted_size;
+- uint32_t free_size;
+- uint32_t erasing_size;
+- uint32_t bad_size;
+- uint32_t sector_size;
+- uint32_t unchecked_size;
+- uint32_t erasing_dirty_size;
+-
+- uint32_t nr_free_blocks;
+- uint32_t nr_erasing_blocks;
+- int32_t nr_bad_blocks;
++ __u32 flash_size;
++ __u32 used_size;
++ __u32 dirty_size;
++ __u32 free_size;
++ __u32 erasing_size;
++ __u32 bad_size;
++ __u32 sector_size;
++ // __u32 min_free_size;
++ // __u32 max_chunk_size;
+
+- uint32_t cont_gc_count;
++ __u32 nr_free_blocks;
++ __u32 nr_erasing_blocks;
+
+- uint32_t nr_blocks;
++ __u32 nr_blocks;
+ struct jffs2_eraseblock *blocks; /* The whole array of blocks. Used for getting blocks
+ * from the offset (blocks[ofs / sector_size]) */
+ struct jffs2_eraseblock *nextblock; /* The block we're currently filling */
+@@ -86,44 +58,27 @@
+ struct jffs2_eraseblock *gcblock; /* The block we're currently garbage-collecting */
+
+ struct list_head clean_list; /* Blocks 100% full of clean data */
+- struct list_head very_dirty_list; /* Blocks with lots of dirty space */
+ struct list_head dirty_list; /* Blocks with some dirty space */
+- struct list_head erasable_list; /* Blocks which are completely dirty, and need erasing */
+- struct list_head erasable_pending_wbuf_list; /* Blocks which need erasing but only after the current wbuf is flushed */
+ struct list_head erasing_list; /* Blocks which are currently erasing */
+- struct list_head erase_pending_list; /* Blocks which need erasing now */
++ struct list_head erase_pending_list; /* Blocks which need erasing */
+ struct list_head erase_complete_list; /* Blocks which are erased and need the clean marker written to them */
+ struct list_head free_list; /* Blocks which are free and ready to be used */
+ struct list_head bad_list; /* Bad blocks. */
+ struct list_head bad_used_list; /* Bad blocks with valid data in. */
+-#ifdef CONFIG_JFFS2_NODEMERGE
+- struct list_head nodemerge_list; /* Blocks with node-merge */
+-#endif
+
+ spinlock_t erase_completion_lock; /* Protect free_list and erasing_list
+ against erase completion handler */
+ wait_queue_head_t erase_wait; /* For waiting for erases to complete */
+-
+- struct jffs2_inode_cache **inocache_list;
++ struct jffs2_inode_cache *inocache_list[INOCACHE_HASHSIZE];
+ spinlock_t inocache_lock;
+-
+- /* Sem to allow jffs2_garbage_collect_deletion_dirent to
+- drop the erase_completion_lock while it's holding a pointer
+- to an obsoleted node. I don't like this. Alternatives welcomed. */
+- struct semaphore erase_free_sem;
+-
+- /* Write-behind buffer for NAND flash */
+- unsigned char *wbuf;
+- uint32_t wbuf_ofs;
+- uint32_t wbuf_len;
+- uint32_t wbuf_pagesize;
+- struct tq_struct wbuf_task; /* task for timed wbuf flush */
+- struct timer_list wbuf_timer; /* timer for flushing wbuf */
++};
+
+- uint32_t effective_gc_count;
++#ifdef JFFS2_OUT_OF_KERNEL
++#define JFFS2_SB_INFO(sb) ((struct jffs2_sb_info *) &(sb)->u)
++#else
++#define JFFS2_SB_INFO(sb) (&sb->u.jffs2_sb)
++#endif
+
+- /* OS-private pointer for getting back to master superblock info */
+- void *os_priv;
+-};
++#define OFNI_BS_2SFFJ(c) ((struct super_block *) ( ((char *)c) - ((char *)(&((struct super_block *)NULL)->u)) ) )
+
+ #endif /* _JFFS2_FB_SB */
+diff -Nur linux/include/video/font.h /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/include/video/font.h
+--- linux/include/video/font.h 2003-05-13 16:20:05.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/include/video/font.h 2003-06-23 01:47:04.000000000 +0700
+@@ -28,6 +28,8 @@
+ #define SUN8x16_IDX 4
+ #define SUN12x22_IDX 5
+ #define ACORN8x8_IDX 6
++#define CLEAN5x8_IDX 7
++#define CLEAN4x6_IDX 8
+
+ extern struct fbcon_font_desc font_vga_8x8,
+ font_vga_8x16,
+@@ -35,7 +37,9 @@
+ font_vga_6x11,
+ font_sun_8x16,
+ font_sun_12x22,
+- font_acorn_8x8;
++ font_acorn_8x8,
++ font_clean_5x8,
++ font_clean_4x6;
+
+ /* Find a font with a specific name */
+
+diff -Nur linux/sl5000d_cacko /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/sl5000d_cacko
+--- linux/sl5000d_cacko 1970-01-01 07:00:00.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/sl5000d_cacko 2003-06-23 01:47:04.000000000 +0700
+@@ -0,0 +1,1051 @@
++#
++# Automatically generated by make menuconfig: don't edit
++#
++CONFIG_ARM=y
++# CONFIG_EISA is not set
++# CONFIG_SBUS is not set
++# CONFIG_MCA is not set
++CONFIG_UID16=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
++# CONFIG_GENERIC_BUST_SPINLOCK is not set
++# CONFIG_GENERIC_ISA_DMA is not set
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++# CONFIG_OBSOLETE is not set
++
++#
++# Loadable module support
++#
++CONFIG_MODULES=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_KMOD is not set
++
++#
++# System Type
++#
++# CONFIG_ARCH_ANAKIN is not set
++# CONFIG_ARCH_ARCA5K is not set
++# CONFIG_ARCH_CLPS7500 is not set
++# CONFIG_ARCH_CLPS711X is not set
++# CONFIG_ARCH_CO285 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_CAMELOT is not set
++# CONFIG_ARCH_FOOTBRIDGE is not set
++# CONFIG_ARCH_INTEGRATOR is not set
++# CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_MX1ADS is not set
++# CONFIG_ARCH_RPC is not set
++CONFIG_ARCH_SA1100=y
++# CONFIG_ARCH_SHARK is not set
++
++#
++# Archimedes/A5000 Implementations
++#
++# CONFIG_ARCH_ARC is not set
++# CONFIG_ARCH_A5K is not set
++
++#
++# Footbridge Implementations
++#
++# CONFIG_ARCH_CATS is not set
++# CONFIG_ARCH_PERSONAL_SERVER is not set
++# CONFIG_ARCH_EBSA285_ADDIN is not set
++# CONFIG_ARCH_EBSA285_HOST is not set
++# CONFIG_ARCH_NETWINDER is not set
++
++#
++# SA11x0 Implementations
++#
++# CONFIG_SA1100_ASSABET is not set
++# CONFIG_ASSABET_NEPONSET is not set
++# CONFIG_SA1100_ADSBITSY is not set
++# CONFIG_SA1100_BRUTUS is not set
++# CONFIG_SA1100_CEP is not set
++# CONFIG_SA1100_CERF is not set
++CONFIG_SA1100_COLLIE=y
++CONFIG_LOCOMO=y
++# CONFIG_COLLIE_TS is not set
++# CONFIG_COLLIE_TR0 is not set
++# CONFIG_COLLIE_TR1 is not set
++CONFIG_COLLIE_DEV=y
++# CONFIG_COLLIE_G is not set
++# CONFIG_COLLIE_UP is not set
++# CONFIG_SA1100_H3100 is not set
++# CONFIG_SA1100_H3600 is not set
++# CONFIG_SA1100_H3800 is not set
++# CONFIG_SA1100_H3XXX is not set
++# CONFIG_SA1100_EXTENEX1 is not set
++# CONFIG_SA1100_FLEXANET is not set
++# CONFIG_SA1100_FREEBIRD is not set
++# CONFIG_SA1100_FRODO is not set
++# CONFIG_SA1100_GRAPHICSCLIENT is not set
++# CONFIG_SA1100_GRAPHICSMASTER is not set
++# CONFIG_SA1100_BADGE4 is not set
++# CONFIG_SA1100_JORNADA720 is not set
++# CONFIG_SA1100_HUW_WEBPANEL is not set
++# CONFIG_SA1100_ITSY is not set
++# CONFIG_SA1100_LART is not set
++# CONFIG_SA1100_NANOENGINE is not set
++# CONFIG_SA1100_OMNIMETER is not set
++# CONFIG_SA1100_PANGOLIN is not set
++# CONFIG_SA1100_PLEB is not set
++# CONFIG_SA1100_PT_SYSTEM3 is not set
++# CONFIG_SA1100_SHANNON is not set
++# CONFIG_SA1100_SHERMAN is not set
++# CONFIG_SA1100_SIMPAD is not set
++# CONFIG_SA1100_PFS168 is not set
++# CONFIG_SA1100_VICTOR is not set
++# CONFIG_SA1100_XP860 is not set
++# CONFIG_SA1100_YOPY is not set
++# CONFIG_SA1100_USB is not set
++# CONFIG_SA1100_USB_NETLINK is not set
++# CONFIG_SA1100_USB_CHAR is not set
++# CONFIG_H3600_SLEEVE is not set
++
++#
++# Intel PXA250/210 Implementations
++#
++# CONFIG_ARCH_LUBBOCK is not set
++# CONFIG_ARCH_PXA_IDP is not set
++# CONFIG_ARCH_PXA_CERF is not set
++# CONFIG_COTULLA_DMA is not set
++# CONFIG_SABINAL_DISCOVERY is not set
++# CONFIG_ARCH_SABINAL is not set
++# CONFIG_ARCH_PXA_POODLE is not set
++# CONFIG_POODLE_TR0 is not set
++# CONFIG_ARCH_PXA_CORGI is not set
++# CONFIG_CORGI_TR0 is not set
++CONFIG_ARCH_SHARP_SL=y
++# CONFIG_PXA_USB is not set
++# CONFIG_PXA_USB_NETLINK is not set
++# CONFIG_PXA_USB_CHAR is not set
++
++#
++# CLPS711X/EP721X Implementations
++#
++# CONFIG_ARCH_AUTCPU12 is not set
++# CONFIG_ARCH_CDB89712 is not set
++# CONFIG_ARCH_CLEP7312 is not set
++# CONFIG_ARCH_EDB7211 is not set
++# CONFIG_ARCH_P720T is not set
++# CONFIG_ARCH_FORTUNET is not set
++# CONFIG_ARCH_EP7211 is not set
++# CONFIG_ARCH_EP7212 is not set
++# CONFIG_ARCH_ACORN is not set
++# CONFIG_FOOTBRIDGE is not set
++# CONFIG_FOOTBRIDGE_HOST is not set
++# CONFIG_FOOTBRIDGE_ADDIN is not set
++CONFIG_CPU_32=y
++# CONFIG_CPU_26 is not set
++# CONFIG_CPU_32v3 is not set
++CONFIG_CPU_32v4=y
++# CONFIG_CPU_ARM610 is not set
++# CONFIG_CPU_ARM710 is not set
++# CONFIG_CPU_ARM720T is not set
++# CONFIG_CPU_ARM920T is not set
++# CONFIG_CPU_ARM922T is not set
++# CONFIG_PLD is not set
++# CONFIG_CPU_ARM926T is not set
++# CONFIG_CPU_ARM1020 is not set
++# CONFIG_CPU_SA110 is not set
++CONFIG_CPU_SA1100=y
++# CONFIG_ARM_THUMB is not set
++CONFIG_DISCONTIGMEM=y
++
++#
++# General setup
++#
++# CONFIG_PCI is not set
++CONFIG_ISA=y
++# CONFIG_ISA_DMA is not set
++# CONFIG_ZBOOT_ROM is not set
++CONFIG_ZBOOT_ROM_TEXT=0
++CONFIG_ZBOOT_ROM_BSS=0
++# CONFIG_CPU_FREQ is not set
++CONFIG_HOTPLUG=y
++
++#
++# PCMCIA/CardBus support
++#
++CONFIG_PCMCIA=y
++CONFIG_PCMCIA_PROBE=y
++# CONFIG_I82092 is not set
++# CONFIG_I82365 is not set
++# CONFIG_TCIC is not set
++# CONFIG_PCMCIA_CLPS6700 is not set
++CONFIG_PCMCIA_SA1100=y
++# CONFIG_PCMCIA_PXA is not set
++CONFIG_NET=y
++CONFIG_SYSVIPC=y
++# CONFIG_BSD_PROCESS_ACCT is not set
++CONFIG_SYSCTL=y
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_FASTFPE is not set
++CONFIG_KCORE_ELF=y
++# CONFIG_KCORE_AOUT is not set
++# CONFIG_BINFMT_AOUT is not set
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_MISC is not set
++CONFIG_PM=y
++CONFIG_APM=y
++# CONFIG_APM_IGNORE_USER_SUSPEND is not set
++CONFIG_APM_CPU_IDLE=y
++CONFIG_APM_DISPLAY_BLANK=y
++CONFIG_APM_RTC_IS_GMT=y
++# CONFIG_ARTHUR is not set
++CONFIG_CMDLINE="root=/dev/mtdblock4 mem=32M rootfstype=jffs2"
++# CONFIG_SHARPSL_BOOTLDR_PARAMS is not set
++# CONFIG_LEDS is not set
++CONFIG_ALIGNMENT_TRAP=y
++CONFIG_FREEPG_SIGNAL=y
++CONFIG_OOM_KILL_SURVIVAL=y
++CONFIG_DEVICEINFO=m
++CONFIG_COLLIE_DEVICEINFO=m
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Memory Technology Devices (MTD)
++#
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_CONCAT is not set
++# CONFIG_MTD_REDBOOT_PARTS is not set
++# CONFIG_CACKO_HYBRID_PARTITIONS is not set
++# CONFIG_MTD_CMDLINE_PARTS is not set
++# CONFIG_MTD_AFS_PARTS is not set
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++# CONFIG_MTD_CFI is not set
++# CONFIG_MTD_JEDECPROBE is not set
++# CONFIG_MTD_GEN_PROBE is not set
++# CONFIG_MTD_CFI_INTELEXT is not set
++# CONFIG_MTD_CFI_AMDSTD is not set
++# CONFIG_MTD_CFI_STAA is not set
++# CONFIG_MTD_RAM is not set
++# CONFIG_MTD_ROM is not set
++# CONFIG_MTD_ABSENT is not set
++CONFIG_MTD_COLLIE=y
++# CONFIG_MTD_OBSOLETE_CHIPS is not set
++# CONFIG_MTD_AMDSTD is not set
++# CONFIG_MTD_SHARP is not set
++# CONFIG_MTD_JEDEC is not set
++
++#
++# Mapping drivers for chip access
++#
++# CONFIG_MTD_PHYSMAP is not set
++# CONFIG_MTD_LUBBOCK is not set
++# CONFIG_MTD_NORA is not set
++# CONFIG_MTD_ARM_INTEGRATOR is not set
++# CONFIG_MTD_CDB89712 is not set
++CONFIG_MTD_SA1100=y
++# CONFIG_MTD_DC21285 is not set
++# CONFIG_MTD_IQ80310 is not set
++# CONFIG_MTD_FORTUNET is not set
++# CONFIG_MTD_PXA_CERF is not set
++# CONFIG_MTD_EPXA10DB is not set
++# CONFIG_MTD_AUTCPU12 is not set
++# CONFIG_MTD_EDB7312 is not set
++# CONFIG_MTD_IMPA7 is not set
++# CONFIG_MTD_DISCOVERY is not set
++# CONFIG_MTD_SHARP_SL is not set
++# CONFIG_MTD_PCI is not set
++
++#
++# Self-contained MTD device drivers
++#
++# CONFIG_MTD_PMC551 is not set
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_MTDROM_SA1100 is not set
++# CONFIG_MTD_MTDRAM_SA1100 is not set
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_MTDRAM_SHARP_SL is not set
++# CONFIG_MTD_BLKMTD is not set
++# CONFIG_MTD_DOC1000 is not set
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOCPROBE is not set
++
++#
++# NAND Flash Device Drivers
++#
++# CONFIG_MTD_NAND is not set
++
++#
++# Plug and Play configuration
++#
++# CONFIG_PNP is not set
++# CONFIG_ISAPNP is not set
++
++#
++# Block devices
++#
++# CONFIG_BLK_DEV_FD is not set
++# CONFIG_BLK_DEV_XD is not set
++# CONFIG_PARIDE is not set
++# CONFIG_BLK_CPQ_DA is not set
++# CONFIG_BLK_CPQ_CISS_DA is not set
++# CONFIG_BLK_DEV_DAC960 is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_NBD is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_SIZE=1024
++# CONFIG_BLK_DEV_INITRD is not set
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++# CONFIG_BLK_DEV_MD is not set
++# CONFIG_MD_LINEAR is not set
++# CONFIG_MD_RAID0 is not set
++# CONFIG_MD_RAID1 is not set
++# CONFIG_MD_RAID5 is not set
++# CONFIG_MD_MULTIPATH is not set
++# CONFIG_BLK_DEV_LVM is not set
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++CONFIG_PACKET_MMAP=y
++# CONFIG_NETLINK_DEV is not set
++# CONFIG_NETFILTER is not set
++# CONFIG_FILTER is not set
++CONFIG_UNIX=y
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++# CONFIG_IP_ADVANCED_ROUTER is not set
++# CONFIG_IP_PNP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_INET_ECN is not set
++# CONFIG_SYN_COOKIES is not set
++# CONFIG_IPV6 is not set
++# CONFIG_KHTTPD is not set
++# CONFIG_ATM is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_DECNET is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_LLC is not set
++# CONFIG_NET_DIVERT is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_NET_FASTROUTE is not set
++# CONFIG_NET_HW_FLOWCONTROL is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network device support
++#
++CONFIG_NETDEVICES=y
++
++#
++# ARCnet devices
++#
++# CONFIG_ARCNET is not set
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_ETHERTAP is not set
++
++#
++# Ethernet (10 or 100Mbit)
++#
++CONFIG_NET_ETHERNET=y
++# CONFIG_ARM_AM79C961A is not set
++# CONFIG_SUNLANCE is not set
++# CONFIG_SUNBMAC is not set
++# CONFIG_SUNQE is not set
++# CONFIG_SUNGEM is not set
++# CONFIG_NET_VENDOR_3COM is not set
++# CONFIG_LANCE is not set
++# CONFIG_NET_VENDOR_SMC is not set
++# CONFIG_NET_VENDOR_RACAL is not set
++# CONFIG_AT1700 is not set
++# CONFIG_DEPCA is not set
++# CONFIG_HP100 is not set
++# CONFIG_NET_ISA is not set
++# CONFIG_NET_PCI is not set
++# CONFIG_NET_POCKET is not set
++
++#
++# Ethernet (1000 Mbit)
++#
++# CONFIG_ACENIC is not set
++# CONFIG_DL2K is not set
++# CONFIG_MYRI_SBUS is not set
++# CONFIG_NS83820 is not set
++# CONFIG_HAMACHI is not set
++# CONFIG_YELLOWFIN is not set
++# CONFIG_SK98LIN is not set
++# CONFIG_FDDI is not set
++# CONFIG_HIPPI is not set
++# CONFIG_PLIP is not set
++CONFIG_PPP=y
++# CONFIG_PPP_MULTILINK is not set
++# CONFIG_PPP_FILTER is not set
++CONFIG_PPP_ASYNC=y
++# CONFIG_PPP_SYNC_TTY is not set
++CONFIG_PPP_DEFLATE=y
++CONFIG_PPP_BSDCOMP=y
++# CONFIG_PPPOE is not set
++# CONFIG_SLIP is not set
++
++#
++# Wireless LAN (non-hamradio)
++#
++CONFIG_NET_RADIO=y
++# CONFIG_STRIP is not set
++# CONFIG_WAVELAN is not set
++# CONFIG_ARLAN is not set
++# CONFIG_AIRONET4500 is not set
++# CONFIG_AIRONET4500_NONCS is not set
++# CONFIG_AIRONET4500_PROC is not set
++# CONFIG_AIRO is not set
++CONFIG_HERMES=y
++CONFIG_PCMCIA_HERMES=y
++CONFIG_AIRO_CS=y
++CONFIG_NET_WIRELESS=y
++
++#
++# Token Ring devices
++#
++# CONFIG_TR is not set
++# CONFIG_NET_FC is not set
++# CONFIG_RCPCI is not set
++# CONFIG_SHAPER is not set
++
++#
++# Wan interfaces
++#
++# CONFIG_WAN is not set
++
++#
++# PCMCIA network device support
++#
++CONFIG_NET_PCMCIA=y
++# CONFIG_PCMCIA_3C589 is not set
++# CONFIG_PCMCIA_3C574 is not set
++# CONFIG_PCMCIA_FMVJ18X is not set
++CONFIG_PCMCIA_PCNET=y
++# CONFIG_PCMCIA_AXNET is not set
++# CONFIG_PCMCIA_NMCLAN is not set
++# CONFIG_PCMCIA_SMC91C92 is not set
++# CONFIG_PCMCIA_XIRC2PS is not set
++# CONFIG_ARCNET_COM20020_CS is not set
++# CONFIG_PCMCIA_IBMTR is not set
++# CONFIG_NET_PCMCIA_RADIO is not set
++
++#
++# Amateur Radio support
++#
++# CONFIG_HAMRADIO is not set
++
++#
++# IrDA (infrared) support
++#
++CONFIG_IRDA=y
++CONFIG_IRLAN=y
++CONFIG_IRNET=y
++CONFIG_IRCOMM=y
++# CONFIG_IRDA_ULTRA is not set
++# CONFIG_IRDA_CACHE_LAST_LSAP is not set
++CONFIG_IRDA_FAST_RR=y
++# CONFIG_IRDA_DEBUG is not set
++
++#
++# Infrared-port device drivers
++#
++CONFIG_IRTTY_SIR=y
++CONFIG_IRPORT_SIR=y
++# CONFIG_DONGLE is not set
++# CONFIG_USB_IRDA is not set
++# CONFIG_NSC_FIR is not set
++# CONFIG_WINBOND_FIR is not set
++# CONFIG_TOSHIBA_FIR is not set
++# CONFIG_SMC_IRCC_FIR is not set
++# CONFIG_ALI_FIR is not set
++# CONFIG_VLSI_FIR is not set
++CONFIG_SA1100_FIR=y
++
++#
++# ATA/IDE/MFM/RLL support
++#
++CONFIG_IDE=y
++
++#
++# IDE, ATA and ATAPI Block devices
++#
++CONFIG_BLK_DEV_IDE=y
++# CONFIG_BLK_DEV_HD_IDE is not set
++# CONFIG_BLK_DEV_HD is not set
++CONFIG_BLK_DEV_IDEDISK=y
++# CONFIG_IDEDISK_MULTI_MODE is not set
++# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
++# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
++# CONFIG_BLK_DEV_IDEDISK_IBM is not set
++# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
++# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
++# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
++# CONFIG_BLK_DEV_IDEDISK_WD is not set
++# CONFIG_BLK_DEV_COMMERIAL is not set
++# CONFIG_BLK_DEV_TIVO is not set
++CONFIG_BLK_DEV_IDECS=y
++# CONFIG_BLK_DEV_IDECD is not set
++# CONFIG_BLK_DEV_IDETAPE is not set
++# CONFIG_BLK_DEV_IDEFLOPPY is not set
++# CONFIG_BLK_DEV_IDESCSI is not set
++# CONFIG_BLK_DEV_CMD640 is not set
++# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
++# CONFIG_BLK_DEV_ISAPNP is not set
++# CONFIG_IDE_CHIPSETS is not set
++# CONFIG_IDEDMA_AUTO is not set
++# CONFIG_DMA_NONPCI is not set
++# CONFIG_BLK_DEV_IDE_MODES is not set
++# CONFIG_BLK_DEV_ATARAID is not set
++# CONFIG_BLK_DEV_ATARAID_PDC is not set
++# CONFIG_BLK_DEV_ATARAID_HPT is not set
++
++#
++# SCSI support
++#
++# CONFIG_SCSI is not set
++
++#
++# I2O device support
++#
++# CONFIG_I2O is not set
++# CONFIG_I2O_BLOCK is not set
++# CONFIG_I2O_LAN is not set
++# CONFIG_I2O_SCSI is not set
++# CONFIG_I2O_PROC is not set
++
++#
++# ISDN subsystem
++#
++# CONFIG_ISDN is not set
++
++#
++# Input core support
++#
++# CONFIG_INPUT is not set
++# CONFIG_INPUT_KEYBDEV is not set
++# CONFIG_INPUT_MOUSEDEV is not set
++# CONFIG_INPUT_JOYDEV is not set
++# CONFIG_INPUT_EVDEV is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++# CONFIG_VT_CONSOLE is not set
++CONFIG_SERIAL=m
++CONFIG_SERIAL_COLLIE=y
++# CONFIG_SERIAL_COLLIE_CONSOLE is not set
++CONFIG_COLLIE_DEFAULT_BAUDRATE=9600
++# CONFIG_SERIAL_EXTENDED is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_ANAKIN is not set
++# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
++# CONFIG_SERIAL_AMBA is not set
++# CONFIG_SERIAL_AMBA_CONSOLE is not set
++# CONFIG_SERIAL_CLPS711X is not set
++# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
++# CONFIG_SERIAL_21285 is not set
++# CONFIG_SERIAL_21285_OLD is not set
++# CONFIG_SERIAL_21285_CONSOLE is not set
++# CONFIG_SERIAL_UART00 is not set
++# CONFIG_SERIAL_UART00_CONSOLE is not set
++# CONFIG_SERIAL_SA1100 is not set
++# CONFIG_SERIAL_SA1100_CONSOLE is not set
++# CONFIG_SERIAL_8250 is not set
++# CONFIG_SERIAL_8250_CONSOLE is not set
++# CONFIG_SERIAL_8250_EXTENDED is not set
++# CONFIG_SERIAL_8250_MANY_PORTS is not set
++# CONFIG_SERIAL_8250_SHARE_IRQ is not set
++# CONFIG_SERIAL_8250_DETECT_IRQ is not set
++# CONFIG_SERIAL_8250_MULTIPORT is not set
++# CONFIG_SERIAL_8250_HUB6 is not set
++CONFIG_UCB1200=y
++CONFIG_TOUCHSCREEN_UCB1200=y
++# CONFIG_AUDIO_UCB1200 is not set
++# CONFIG_ADC_UCB1200 is not set
++CONFIG_UNIX98_PTYS=y
++CONFIG_UNIX98_PTY_COUNT=32
++
++#
++# I2C support
++#
++# CONFIG_I2C is not set
++
++#
++# L3 serial bus support
++#
++# CONFIG_L3 is not set
++# CONFIG_L3_ALGOBIT is not set
++# CONFIG_L3_BIT_SA1100_GPIO is not set
++# CONFIG_L3_SA1111 is not set
++# CONFIG_BIT_SA1100_GPIO is not set
++
++#
++# Mice
++#
++# CONFIG_BUSMOUSE is not set
++# CONFIG_MOUSE is not set
++
++#
++# Joysticks
++#
++# CONFIG_INPUT_GAMEPORT is not set
++# CONFIG_QIC02_TAPE is not set
++
++#
++# Watchdog Cards
++#
++# CONFIG_WATCHDOG is not set
++# CONFIG_INTEL_RNG is not set
++# CONFIG_NVRAM is not set
++# CONFIG_RTC is not set
++CONFIG_SA1100_RTC=y
++# CONFIG_COTULLA_RTC is not set
++# CONFIG_ADS7846_TS is not set
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++# CONFIG_APPLICOM is not set
++
++#
++# Ftape, the floppy tape device driver
++#
++# CONFIG_FTAPE is not set
++# CONFIG_AGP is not set
++# CONFIG_DRM is not set
++
++#
++# PCMCIA character devices
++#
++CONFIG_PCMCIA_SERIAL_CS=m
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++
++#
++# File systems
++#
++# CONFIG_QUOTA is not set
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++CONFIG_FS_SYNC=y
++# CONFIG_REISERFS_FS is not set
++# CONFIG_REISERFS_CHECK is not set
++# CONFIG_REISERFS_PROC_INFO is not set
++# CONFIG_ADFS_FS is not set
++# CONFIG_ADFS_FS_RW is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EXT3_FS is not set
++# CONFIG_JBD is not set
++# CONFIG_JBD_DEBUG is not set
++CONFIG_FAT_FS=y
++# CONFIG_MSDOS_FS is not set
++# CONFIG_UMSDOS_FS is not set
++CONFIG_VFAT_FS=y
++# CONFIG_EFS_FS is not set
++# CONFIG_JFFS_FS is not set
++CONFIG_JFFS2_FS=y
++CONFIG_JFFS2_FS_DEBUG=0
++# CONFIG_JFFS2_FS_NAND is not set
++# CONFIG_JFFS2_PROC_FS is not set
++# CONFIG_JFFS2_NODEMERGE is not set
++# CONFIG_JFFS2_DYNFRAGTREE is not set
++CONFIG_CRAMFS=y
++CONFIG_TMPFS=y
++CONFIG_RAMFS=y
++# CONFIG_ISO9660_FS is not set
++# CONFIG_JOLIET is not set
++# CONFIG_ZISOFS is not set
++CONFIG_MINIX_FS=y
++# CONFIG_VXFS_FS is not set
++# CONFIG_NTFS_FS is not set
++# CONFIG_NTFS_RW is not set
++# CONFIG_HPFS_FS is not set
++CONFIG_PROC_FS=y
++# CONFIG_DEVFS_FS is not set
++# CONFIG_DEVFS_MOUNT is not set
++# CONFIG_DEVFS_DEBUG is not set
++CONFIG_DEVPTS_FS=y
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_QNX4FS_RW is not set
++# CONFIG_ROMFS_FS is not set
++CONFIG_EXT2_FS=y
++# CONFIG_SYSV_FS is not set
++# CONFIG_UDF_FS is not set
++# CONFIG_UDF_RW is not set
++# CONFIG_UFS_FS is not set
++# CONFIG_UFS_FS_WRITE is not set
++
++#
++# Network File Systems
++#
++# CONFIG_CODA_FS is not set
++# CONFIG_INTERMEZZO_FS is not set
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_ROOT_NFS is not set
++# CONFIG_NFSD is not set
++# CONFIG_NFSD_V3 is not set
++CONFIG_SUNRPC=y
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_SMB_FS=y
++CONFIG_SMB_NLS_DEFAULT=y
++CONFIG_SMB_NLS_REMOTE="cp437"
++# CONFIG_NCP_FS is not set
++# CONFIG_NCPFS_PACKET_SIGNING is not set
++# CONFIG_NCPFS_IOCTL_LOCKING is not set
++# CONFIG_NCPFS_STRONG is not set
++# CONFIG_NCPFS_NFS_NS is not set
++# CONFIG_NCPFS_OS2_NS is not set
++# CONFIG_NCPFS_SMALLDOS is not set
++# CONFIG_NCPFS_NLS is not set
++# CONFIG_NCPFS_EXTRAS is not set
++# CONFIG_ZISOFS_FS is not set
++CONFIG_ZLIB_FS_INFLATE=y
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++CONFIG_SMB_NLS=y
++CONFIG_NLS=y
++
++#
++# Native Language Support
++#
++CONFIG_NLS_DEFAULT="iso8859-1"
++# CONFIG_NLS_CODEPAGE_437 is not set
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++# CONFIG_NLS_CODEPAGE_850 is not set
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ISO8859_1 is not set
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++CONFIG_NLS_UTF8=y
++
++#
++# Console drivers
++#
++CONFIG_PC_KEYMAP=y
++# CONFIG_VGA_CONSOLE is not set
++
++#
++# Frame-buffer support
++#
++CONFIG_FB=y
++CONFIG_DUMMY_CONSOLE=y
++CONFIG_FB_COLLIE=y
++# CONFIG_FB_ACORN is not set
++# CONFIG_FB_ANAKIN is not set
++# CONFIG_FB_CLPS711X is not set
++# CONFIG_FB_SA1100 is not set
++# CONFIG_FB_PXA is not set
++# CONFIG_FB_COTULLA is not set
++# CONFIG_FB_POODLE is not set
++# CONFIG_FB_CORGI is not set
++# CONFIG_SHARP_LOGO_SCREEN is not set
++# CONFIG_FB_CYBER2000 is not set
++# CONFIG_FB_VIRTUAL is not set
++CONFIG_FBCON_ADVANCED=y
++# CONFIG_FBCON_MFB is not set
++# CONFIG_FBCON_CFB2 is not set
++# CONFIG_FBCON_CFB4 is not set
++# CONFIG_FBCON_CFB8 is not set
++CONFIG_FBCON_CFB16=y
++# CONFIG_FBCON_CFB24 is not set
++# CONFIG_FBCON_CFB32 is not set
++# CONFIG_FBCON_AFB is not set
++# CONFIG_FBCON_ILBM is not set
++# CONFIG_FBCON_IPLAN2P2 is not set
++# CONFIG_FBCON_IPLAN2P4 is not set
++# CONFIG_FBCON_IPLAN2P8 is not set
++# CONFIG_FBCON_MAC is not set
++# CONFIG_FBCON_VGA_PLANES is not set
++# CONFIG_FBCON_VGA is not set
++# CONFIG_FBCON_HGA is not set
++CONFIG_FBCON_ROTATE_R=y
++# CONFIG_FBCON_ROTATE_L is not set
++# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
++CONFIG_FBCON_FONTS=y
++# CONFIG_FONT_8x8 is not set
++# CONFIG_FONT_8x16 is not set
++# CONFIG_FONT_SUN8x16 is not set
++# CONFIG_FONT_SUN12x22 is not set
++# CONFIG_FONT_6x11 is not set
++# CONFIG_FONT_5x8 is not set
++CONFIG_FONT_4x6=y
++# CONFIG_FONT_PEARL_8x8 is not set
++# CONFIG_FONT_ACORN_8x8 is not set
++
++#
++# Sound
++#
++CONFIG_SOUND=y
++# CONFIG_SOUND_BT878 is not set
++CONFIG_SOUND_COLLIE_SSP=y
++CONFIG_COLLIE_PCM1741=y
++# CONFIG_COLLIE_PCM1717 is not set
++CONFIG_SOUND_COLLIE_TC35143=y
++# CONFIG_SOUND_CMPCI is not set
++# CONFIG_SOUND_EMU10K1 is not set
++# CONFIG_MIDI_EMU10K1 is not set
++# CONFIG_SOUND_FUSION is not set
++# CONFIG_SOUND_CS4281 is not set
++# CONFIG_SOUND_ES1370 is not set
++# CONFIG_SOUND_ES1371 is not set
++# CONFIG_SOUND_ESSSOLO1 is not set
++# CONFIG_SOUND_MAESTRO is not set
++# CONFIG_SOUND_MAESTRO3 is not set
++# CONFIG_SOUND_ICH is not set
++# CONFIG_SOUND_RME96XX is not set
++# CONFIG_SOUND_SONICVIBES is not set
++# CONFIG_SOUND_TRIDENT is not set
++# CONFIG_SOUND_MSNDCLAS is not set
++# CONFIG_SOUND_MSNDPIN is not set
++# CONFIG_SOUND_VIA82CXXX is not set
++# CONFIG_MIDI_VIA82CXXX is not set
++# CONFIG_SOUND_SA1100 is not set
++# CONFIG_SOUND_UDA1341 is not set
++# CONFIG_SOUND_ASSABET_UDA1341 is not set
++# CONFIG_SOUND_H3600_UDA1341 is not set
++# CONFIG_SOUND_PANGOLIN_UDA1341 is not set
++# CONFIG_SOUND_SA1111_UDA1341 is not set
++# CONFIG_SOUND_SA1100SSP is not set
++# CONFIG_SOUND_OSS is not set
++# CONFIG_SOUND_WAVEARTIST is not set
++# CONFIG_SOUND_PXA_AC97 is not set
++# CONFIG_SOUND_POODLE is not set
++# CONFIG_SOUND_CORGI is not set
++# CONFIG_SOUND_TVMIXER is not set
++
++#
++# Multimedia Capabilities Port drivers
++#
++# CONFIG_MCP is not set
++# CONFIG_MCP_SA1100 is not set
++# CONFIG_MCP_UCB1200 is not set
++# CONFIG_MCP_UCB1200_AUDIO is not set
++# CONFIG_MCP_UCB1200_TS is not set
++# CONFIG_MCP_UCB1400_TS is not set
++
++#
++# USB support
++#
++CONFIG_USB=m
++# CONFIG_USB_DEBUG is not set
++# CONFIG_USB_DEVICEFS is not set
++# CONFIG_USB_BANDWIDTH is not set
++# CONFIG_USB_LONG_TIMEOUT is not set
++# CONFIG_USB_UHCI is not set
++# CONFIG_USB_UHCI_ALT is not set
++# CONFIG_USB_OHCI is not set
++# CONFIG_USB_OHCI_SA1111 is not set
++# CONFIG_USB_AUDIO is not set
++# CONFIG_USB_BLUETOOTH is not set
++# CONFIG_USB_STORAGE is not set
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_ISD200 is not set
++# CONFIG_USB_STORAGE_DPCM is not set
++# CONFIG_USB_STORAGE_HP8200e is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++# CONFIG_USB_DC2XX is not set
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_SCANNER is not set
++# CONFIG_USB_MICROTEK is not set
++# CONFIG_USB_HPUSBSCSI is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_CDCETHER is not set
++# CONFIG_USB_USBNET is not set
++# CONFIG_USB_USS720 is not set
++
++#
++# USB Serial Converter support
++#
++# CONFIG_USB_SERIAL is not set
++# CONFIG_USB_SERIAL_GENERIC is not set
++# CONFIG_USB_SERIAL_BELKIN is not set
++# CONFIG_USB_SERIAL_WHITEHEAT is not set
++# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
++# CONFIG_USB_SERIAL_EMPEG is not set
++# CONFIG_USB_SERIAL_FTDI_SIO is not set
++# CONFIG_USB_SERIAL_VISOR is not set
++# CONFIG_USB_SERIAL_IPAQ is not set
++# CONFIG_USB_SERIAL_IR is not set
++# CONFIG_USB_SERIAL_EDGEPORT is not set
++# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
++# CONFIG_USB_SERIAL_KEYSPAN is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
++# CONFIG_USB_SERIAL_MCT_U232 is not set
++# CONFIG_USB_SERIAL_KLSI is not set
++# CONFIG_USB_SERIAL_PL2303 is not set
++# CONFIG_USB_SERIAL_CYBERJACK is not set
++# CONFIG_USB_SERIAL_XIRCOM is not set
++# CONFIG_USB_SERIAL_OMNINET is not set
++# CONFIG_USB_RIO500 is not set
++
++#
++# USB Device Support
++#
++CONFIG_USBD=m
++CONFIG_USBD_VENDORID=4dd
++CONFIG_USBD_PRODUCTID=8002
++CONFIG_USBD_PRODUCT_NAME="SL Series"
++CONFIG_USBD_MANUFACTURER="Sharp"
++CONFIG_USBD_USE_SERIAL_NUMBER=y
++CONFIG_USBD_SERIAL_NUMBER_STR="A01234"
++CONFIG_USBD_SELFPOWERED=y
++CONFIG_USBD_MONITOR=m
++CONFIG_USBD_PROCFS=y
++
++#
++# Network Function
++#
++CONFIG_USBD_NET=m
++CONFIG_USBD_NET_VENDORID=4DD
++CONFIG_USBD_NET_PRODUCTID=8004
++CONFIG_USBD_NET_IFNAME="usbd"
++CONFIG_USBD_NET_OUT_ENDPOINT=1
++CONFIG_USBD_NET_OUT_PKTSIZE=64
++CONFIG_USBD_NET_IN_ENDPOINT=2
++CONFIG_USBD_NET_IN_PKTSIZE=64
++# CONFIG_USBD_NET_ALWAYSUP is not set
++# CONFIG_USBD_NET_SAFE is not set
++# CONFIG_USBD_NET_MDLM is not set
++CONFIG_USBD_NET_CDC=y
++CONFIG_USBD_NET_REMOTE_MACADDR=""
++CONFIG_USBD_NET_REMOTE_OUI=400002
++# CONFIG_USBD_MAC_AS_SERIAL_NUMBER is not set
++CONFIG_USBD_NET_LOCAL_MACADDR="400001000001"
++CONFIG_USBD_NET_LOCAL_OUI=400001
++
++#
++# Serial Function
++#
++CONFIG_USBD_SERIAL=m
++CONFIG_USBD_SERIAL_VENDORID=4dd
++CONFIG_USBD_SERIAL_PRODUCTID=8002
++# CONFIG_USBD_SERIAL_CDC is not set
++CONFIG_USBD_SERIAL_OUT_ENDPOINT=1
++CONFIG_USBD_SERIAL_IN_PKTSIZE=64
++CONFIG_USBD_SERIAL_IN_ENDPOINT=2
++CONFIG_USBD_SERIAL_OUT_PKTSIZE=64
++# CONFIG_USBD_SERIAL_SAFE is not set
++
++#
++# USB Device Bus Interface Support
++#
++CONFIG_USBD_SA1100_BUS=m
++# CONFIG_USBD_TRAFFIC_KEEPAWAKE is not set
++CONFIG_USBD_STALL_TIMEOUT=0
++CONFIG_USBD_STALL_DISCONNECT_DURATION=2
++# CONFIG_USBD_GENERIC_BUS is not set
++
++#
++# Bluetooth support
++#
++# CONFIG_BLUEZ is not set
++
++#
++# Kernel hacking
++#
++CONFIG_FRAME_POINTER=y
++# CONFIG_DEBUG_USER is not set
++# CONFIG_DEBUG_COREDUMP_SIGNAL is not set
++# CONFIG_DEBUG_INFO is not set
++# CONFIG_NO_PGT_CACHE is not set
++# CONFIG_DEBUG_KERNEL is not set
++# CONFIG_DEBUG_SLAB is not set
++# CONFIG_MAGIC_SYSRQ is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_WAITQ is not set
++# CONFIG_DEBUG_BUGVERBOSE is not set
++# CONFIG_DEBUG_ERRORS is not set
++# CONFIG_DEBUG_LL is not set
++# CONFIG_DEBUG_DC21285_PORT is not set
++# CONFIG_DEBUG_CLPS711X_UART2 is not set
+diff -Nur linux/sl5000d_hybrid /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/sl5000d_hybrid
+--- linux/sl5000d_hybrid 1970-01-01 07:00:00.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/sl5000d_hybrid 2003-06-23 01:47:04.000000000 +0700
+@@ -0,0 +1,1051 @@
++#
++# Automatically generated by make menuconfig: don't edit
++#
++CONFIG_ARM=y
++# CONFIG_EISA is not set
++# CONFIG_SBUS is not set
++# CONFIG_MCA is not set
++CONFIG_UID16=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
++# CONFIG_GENERIC_BUST_SPINLOCK is not set
++# CONFIG_GENERIC_ISA_DMA is not set
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++# CONFIG_OBSOLETE is not set
++
++#
++# Loadable module support
++#
++CONFIG_MODULES=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_KMOD is not set
++
++#
++# System Type
++#
++# CONFIG_ARCH_ANAKIN is not set
++# CONFIG_ARCH_ARCA5K is not set
++# CONFIG_ARCH_CLPS7500 is not set
++# CONFIG_ARCH_CLPS711X is not set
++# CONFIG_ARCH_CO285 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_CAMELOT is not set
++# CONFIG_ARCH_FOOTBRIDGE is not set
++# CONFIG_ARCH_INTEGRATOR is not set
++# CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_MX1ADS is not set
++# CONFIG_ARCH_RPC is not set
++CONFIG_ARCH_SA1100=y
++# CONFIG_ARCH_SHARK is not set
++
++#
++# Archimedes/A5000 Implementations
++#
++# CONFIG_ARCH_ARC is not set
++# CONFIG_ARCH_A5K is not set
++
++#
++# Footbridge Implementations
++#
++# CONFIG_ARCH_CATS is not set
++# CONFIG_ARCH_PERSONAL_SERVER is not set
++# CONFIG_ARCH_EBSA285_ADDIN is not set
++# CONFIG_ARCH_EBSA285_HOST is not set
++# CONFIG_ARCH_NETWINDER is not set
++
++#
++# SA11x0 Implementations
++#
++# CONFIG_SA1100_ASSABET is not set
++# CONFIG_ASSABET_NEPONSET is not set
++# CONFIG_SA1100_ADSBITSY is not set
++# CONFIG_SA1100_BRUTUS is not set
++# CONFIG_SA1100_CEP is not set
++# CONFIG_SA1100_CERF is not set
++CONFIG_SA1100_COLLIE=y
++CONFIG_LOCOMO=y
++# CONFIG_COLLIE_TS is not set
++# CONFIG_COLLIE_TR0 is not set
++# CONFIG_COLLIE_TR1 is not set
++CONFIG_COLLIE_DEV=y
++# CONFIG_COLLIE_G is not set
++# CONFIG_COLLIE_UP is not set
++# CONFIG_SA1100_H3100 is not set
++# CONFIG_SA1100_H3600 is not set
++# CONFIG_SA1100_H3800 is not set
++# CONFIG_SA1100_H3XXX is not set
++# CONFIG_SA1100_EXTENEX1 is not set
++# CONFIG_SA1100_FLEXANET is not set
++# CONFIG_SA1100_FREEBIRD is not set
++# CONFIG_SA1100_FRODO is not set
++# CONFIG_SA1100_GRAPHICSCLIENT is not set
++# CONFIG_SA1100_GRAPHICSMASTER is not set
++# CONFIG_SA1100_BADGE4 is not set
++# CONFIG_SA1100_JORNADA720 is not set
++# CONFIG_SA1100_HUW_WEBPANEL is not set
++# CONFIG_SA1100_ITSY is not set
++# CONFIG_SA1100_LART is not set
++# CONFIG_SA1100_NANOENGINE is not set
++# CONFIG_SA1100_OMNIMETER is not set
++# CONFIG_SA1100_PANGOLIN is not set
++# CONFIG_SA1100_PLEB is not set
++# CONFIG_SA1100_PT_SYSTEM3 is not set
++# CONFIG_SA1100_SHANNON is not set
++# CONFIG_SA1100_SHERMAN is not set
++# CONFIG_SA1100_SIMPAD is not set
++# CONFIG_SA1100_PFS168 is not set
++# CONFIG_SA1100_VICTOR is not set
++# CONFIG_SA1100_XP860 is not set
++# CONFIG_SA1100_YOPY is not set
++# CONFIG_SA1100_USB is not set
++# CONFIG_SA1100_USB_NETLINK is not set
++# CONFIG_SA1100_USB_CHAR is not set
++# CONFIG_H3600_SLEEVE is not set
++
++#
++# Intel PXA250/210 Implementations
++#
++# CONFIG_ARCH_LUBBOCK is not set
++# CONFIG_ARCH_PXA_IDP is not set
++# CONFIG_ARCH_PXA_CERF is not set
++# CONFIG_COTULLA_DMA is not set
++# CONFIG_SABINAL_DISCOVERY is not set
++# CONFIG_ARCH_SABINAL is not set
++# CONFIG_ARCH_PXA_POODLE is not set
++# CONFIG_POODLE_TR0 is not set
++# CONFIG_ARCH_PXA_CORGI is not set
++# CONFIG_CORGI_TR0 is not set
++CONFIG_ARCH_SHARP_SL=y
++# CONFIG_PXA_USB is not set
++# CONFIG_PXA_USB_NETLINK is not set
++# CONFIG_PXA_USB_CHAR is not set
++
++#
++# CLPS711X/EP721X Implementations
++#
++# CONFIG_ARCH_AUTCPU12 is not set
++# CONFIG_ARCH_CDB89712 is not set
++# CONFIG_ARCH_CLEP7312 is not set
++# CONFIG_ARCH_EDB7211 is not set
++# CONFIG_ARCH_P720T is not set
++# CONFIG_ARCH_FORTUNET is not set
++# CONFIG_ARCH_EP7211 is not set
++# CONFIG_ARCH_EP7212 is not set
++# CONFIG_ARCH_ACORN is not set
++# CONFIG_FOOTBRIDGE is not set
++# CONFIG_FOOTBRIDGE_HOST is not set
++# CONFIG_FOOTBRIDGE_ADDIN is not set
++CONFIG_CPU_32=y
++# CONFIG_CPU_26 is not set
++# CONFIG_CPU_32v3 is not set
++CONFIG_CPU_32v4=y
++# CONFIG_CPU_ARM610 is not set
++# CONFIG_CPU_ARM710 is not set
++# CONFIG_CPU_ARM720T is not set
++# CONFIG_CPU_ARM920T is not set
++# CONFIG_CPU_ARM922T is not set
++# CONFIG_PLD is not set
++# CONFIG_CPU_ARM926T is not set
++# CONFIG_CPU_ARM1020 is not set
++# CONFIG_CPU_SA110 is not set
++CONFIG_CPU_SA1100=y
++# CONFIG_ARM_THUMB is not set
++CONFIG_DISCONTIGMEM=y
++
++#
++# General setup
++#
++# CONFIG_PCI is not set
++CONFIG_ISA=y
++# CONFIG_ISA_DMA is not set
++# CONFIG_ZBOOT_ROM is not set
++CONFIG_ZBOOT_ROM_TEXT=0
++CONFIG_ZBOOT_ROM_BSS=0
++# CONFIG_CPU_FREQ is not set
++CONFIG_HOTPLUG=y
++
++#
++# PCMCIA/CardBus support
++#
++CONFIG_PCMCIA=y
++CONFIG_PCMCIA_PROBE=y
++# CONFIG_I82092 is not set
++# CONFIG_I82365 is not set
++# CONFIG_TCIC is not set
++# CONFIG_PCMCIA_CLPS6700 is not set
++CONFIG_PCMCIA_SA1100=y
++# CONFIG_PCMCIA_PXA is not set
++CONFIG_NET=y
++CONFIG_SYSVIPC=y
++# CONFIG_BSD_PROCESS_ACCT is not set
++CONFIG_SYSCTL=y
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_FASTFPE is not set
++CONFIG_KCORE_ELF=y
++# CONFIG_KCORE_AOUT is not set
++# CONFIG_BINFMT_AOUT is not set
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_MISC is not set
++CONFIG_PM=y
++CONFIG_APM=y
++# CONFIG_APM_IGNORE_USER_SUSPEND is not set
++CONFIG_APM_CPU_IDLE=y
++CONFIG_APM_DISPLAY_BLANK=y
++CONFIG_APM_RTC_IS_GMT=y
++# CONFIG_ARTHUR is not set
++CONFIG_CMDLINE="root=/dev/mtdblock4 mem=32M rootfstype=cramfs"
++# CONFIG_SHARPSL_BOOTLDR_PARAMS is not set
++# CONFIG_LEDS is not set
++CONFIG_ALIGNMENT_TRAP=y
++CONFIG_FREEPG_SIGNAL=y
++CONFIG_OOM_KILL_SURVIVAL=y
++CONFIG_DEVICEINFO=m
++CONFIG_COLLIE_DEVICEINFO=m
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Memory Technology Devices (MTD)
++#
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_CONCAT is not set
++# CONFIG_MTD_REDBOOT_PARTS is not set
++CONFIG_CACKO_HYBRID_PARTITIONS=y
++# CONFIG_MTD_CMDLINE_PARTS is not set
++# CONFIG_MTD_AFS_PARTS is not set
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++# CONFIG_MTD_CFI is not set
++# CONFIG_MTD_JEDECPROBE is not set
++# CONFIG_MTD_GEN_PROBE is not set
++# CONFIG_MTD_CFI_INTELEXT is not set
++# CONFIG_MTD_CFI_AMDSTD is not set
++# CONFIG_MTD_CFI_STAA is not set
++# CONFIG_MTD_RAM is not set
++# CONFIG_MTD_ROM is not set
++# CONFIG_MTD_ABSENT is not set
++CONFIG_MTD_COLLIE=y
++# CONFIG_MTD_OBSOLETE_CHIPS is not set
++# CONFIG_MTD_AMDSTD is not set
++# CONFIG_MTD_SHARP is not set
++# CONFIG_MTD_JEDEC is not set
++
++#
++# Mapping drivers for chip access
++#
++# CONFIG_MTD_PHYSMAP is not set
++# CONFIG_MTD_LUBBOCK is not set
++# CONFIG_MTD_NORA is not set
++# CONFIG_MTD_ARM_INTEGRATOR is not set
++# CONFIG_MTD_CDB89712 is not set
++CONFIG_MTD_SA1100=y
++# CONFIG_MTD_DC21285 is not set
++# CONFIG_MTD_IQ80310 is not set
++# CONFIG_MTD_FORTUNET is not set
++# CONFIG_MTD_PXA_CERF is not set
++# CONFIG_MTD_EPXA10DB is not set
++# CONFIG_MTD_AUTCPU12 is not set
++# CONFIG_MTD_EDB7312 is not set
++# CONFIG_MTD_IMPA7 is not set
++# CONFIG_MTD_DISCOVERY is not set
++# CONFIG_MTD_SHARP_SL is not set
++# CONFIG_MTD_PCI is not set
++
++#
++# Self-contained MTD device drivers
++#
++# CONFIG_MTD_PMC551 is not set
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_MTDROM_SA1100 is not set
++# CONFIG_MTD_MTDRAM_SA1100 is not set
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_MTDRAM_SHARP_SL is not set
++# CONFIG_MTD_BLKMTD is not set
++# CONFIG_MTD_DOC1000 is not set
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOCPROBE is not set
++
++#
++# NAND Flash Device Drivers
++#
++# CONFIG_MTD_NAND is not set
++
++#
++# Plug and Play configuration
++#
++# CONFIG_PNP is not set
++# CONFIG_ISAPNP is not set
++
++#
++# Block devices
++#
++# CONFIG_BLK_DEV_FD is not set
++# CONFIG_BLK_DEV_XD is not set
++# CONFIG_PARIDE is not set
++# CONFIG_BLK_CPQ_DA is not set
++# CONFIG_BLK_CPQ_CISS_DA is not set
++# CONFIG_BLK_DEV_DAC960 is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_NBD is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_SIZE=1024
++# CONFIG_BLK_DEV_INITRD is not set
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++# CONFIG_BLK_DEV_MD is not set
++# CONFIG_MD_LINEAR is not set
++# CONFIG_MD_RAID0 is not set
++# CONFIG_MD_RAID1 is not set
++# CONFIG_MD_RAID5 is not set
++# CONFIG_MD_MULTIPATH is not set
++# CONFIG_BLK_DEV_LVM is not set
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++CONFIG_PACKET_MMAP=y
++# CONFIG_NETLINK_DEV is not set
++# CONFIG_NETFILTER is not set
++# CONFIG_FILTER is not set
++CONFIG_UNIX=y
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++# CONFIG_IP_ADVANCED_ROUTER is not set
++# CONFIG_IP_PNP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_INET_ECN is not set
++# CONFIG_SYN_COOKIES is not set
++# CONFIG_IPV6 is not set
++# CONFIG_KHTTPD is not set
++# CONFIG_ATM is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_DECNET is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_LLC is not set
++# CONFIG_NET_DIVERT is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_NET_FASTROUTE is not set
++# CONFIG_NET_HW_FLOWCONTROL is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network device support
++#
++CONFIG_NETDEVICES=y
++
++#
++# ARCnet devices
++#
++# CONFIG_ARCNET is not set
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_ETHERTAP is not set
++
++#
++# Ethernet (10 or 100Mbit)
++#
++CONFIG_NET_ETHERNET=y
++# CONFIG_ARM_AM79C961A is not set
++# CONFIG_SUNLANCE is not set
++# CONFIG_SUNBMAC is not set
++# CONFIG_SUNQE is not set
++# CONFIG_SUNGEM is not set
++# CONFIG_NET_VENDOR_3COM is not set
++# CONFIG_LANCE is not set
++# CONFIG_NET_VENDOR_SMC is not set
++# CONFIG_NET_VENDOR_RACAL is not set
++# CONFIG_AT1700 is not set
++# CONFIG_DEPCA is not set
++# CONFIG_HP100 is not set
++# CONFIG_NET_ISA is not set
++# CONFIG_NET_PCI is not set
++# CONFIG_NET_POCKET is not set
++
++#
++# Ethernet (1000 Mbit)
++#
++# CONFIG_ACENIC is not set
++# CONFIG_DL2K is not set
++# CONFIG_MYRI_SBUS is not set
++# CONFIG_NS83820 is not set
++# CONFIG_HAMACHI is not set
++# CONFIG_YELLOWFIN is not set
++# CONFIG_SK98LIN is not set
++# CONFIG_FDDI is not set
++# CONFIG_HIPPI is not set
++# CONFIG_PLIP is not set
++CONFIG_PPP=y
++# CONFIG_PPP_MULTILINK is not set
++# CONFIG_PPP_FILTER is not set
++CONFIG_PPP_ASYNC=y
++# CONFIG_PPP_SYNC_TTY is not set
++CONFIG_PPP_DEFLATE=y
++CONFIG_PPP_BSDCOMP=y
++# CONFIG_PPPOE is not set
++# CONFIG_SLIP is not set
++
++#
++# Wireless LAN (non-hamradio)
++#
++CONFIG_NET_RADIO=y
++# CONFIG_STRIP is not set
++# CONFIG_WAVELAN is not set
++# CONFIG_ARLAN is not set
++# CONFIG_AIRONET4500 is not set
++# CONFIG_AIRONET4500_NONCS is not set
++# CONFIG_AIRONET4500_PROC is not set
++# CONFIG_AIRO is not set
++CONFIG_HERMES=y
++CONFIG_PCMCIA_HERMES=y
++CONFIG_AIRO_CS=y
++CONFIG_NET_WIRELESS=y
++
++#
++# Token Ring devices
++#
++# CONFIG_TR is not set
++# CONFIG_NET_FC is not set
++# CONFIG_RCPCI is not set
++# CONFIG_SHAPER is not set
++
++#
++# Wan interfaces
++#
++# CONFIG_WAN is not set
++
++#
++# PCMCIA network device support
++#
++CONFIG_NET_PCMCIA=y
++# CONFIG_PCMCIA_3C589 is not set
++# CONFIG_PCMCIA_3C574 is not set
++# CONFIG_PCMCIA_FMVJ18X is not set
++CONFIG_PCMCIA_PCNET=y
++# CONFIG_PCMCIA_AXNET is not set
++# CONFIG_PCMCIA_NMCLAN is not set
++# CONFIG_PCMCIA_SMC91C92 is not set
++# CONFIG_PCMCIA_XIRC2PS is not set
++# CONFIG_ARCNET_COM20020_CS is not set
++# CONFIG_PCMCIA_IBMTR is not set
++# CONFIG_NET_PCMCIA_RADIO is not set
++
++#
++# Amateur Radio support
++#
++# CONFIG_HAMRADIO is not set
++
++#
++# IrDA (infrared) support
++#
++CONFIG_IRDA=y
++CONFIG_IRLAN=y
++CONFIG_IRNET=y
++CONFIG_IRCOMM=y
++# CONFIG_IRDA_ULTRA is not set
++# CONFIG_IRDA_CACHE_LAST_LSAP is not set
++CONFIG_IRDA_FAST_RR=y
++# CONFIG_IRDA_DEBUG is not set
++
++#
++# Infrared-port device drivers
++#
++CONFIG_IRTTY_SIR=y
++CONFIG_IRPORT_SIR=y
++# CONFIG_DONGLE is not set
++# CONFIG_USB_IRDA is not set
++# CONFIG_NSC_FIR is not set
++# CONFIG_WINBOND_FIR is not set
++# CONFIG_TOSHIBA_FIR is not set
++# CONFIG_SMC_IRCC_FIR is not set
++# CONFIG_ALI_FIR is not set
++# CONFIG_VLSI_FIR is not set
++CONFIG_SA1100_FIR=y
++
++#
++# ATA/IDE/MFM/RLL support
++#
++CONFIG_IDE=y
++
++#
++# IDE, ATA and ATAPI Block devices
++#
++CONFIG_BLK_DEV_IDE=y
++# CONFIG_BLK_DEV_HD_IDE is not set
++# CONFIG_BLK_DEV_HD is not set
++CONFIG_BLK_DEV_IDEDISK=y
++# CONFIG_IDEDISK_MULTI_MODE is not set
++# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
++# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
++# CONFIG_BLK_DEV_IDEDISK_IBM is not set
++# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
++# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
++# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
++# CONFIG_BLK_DEV_IDEDISK_WD is not set
++# CONFIG_BLK_DEV_COMMERIAL is not set
++# CONFIG_BLK_DEV_TIVO is not set
++CONFIG_BLK_DEV_IDECS=y
++# CONFIG_BLK_DEV_IDECD is not set
++# CONFIG_BLK_DEV_IDETAPE is not set
++# CONFIG_BLK_DEV_IDEFLOPPY is not set
++# CONFIG_BLK_DEV_IDESCSI is not set
++# CONFIG_BLK_DEV_CMD640 is not set
++# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
++# CONFIG_BLK_DEV_ISAPNP is not set
++# CONFIG_IDE_CHIPSETS is not set
++# CONFIG_IDEDMA_AUTO is not set
++# CONFIG_DMA_NONPCI is not set
++# CONFIG_BLK_DEV_IDE_MODES is not set
++# CONFIG_BLK_DEV_ATARAID is not set
++# CONFIG_BLK_DEV_ATARAID_PDC is not set
++# CONFIG_BLK_DEV_ATARAID_HPT is not set
++
++#
++# SCSI support
++#
++# CONFIG_SCSI is not set
++
++#
++# I2O device support
++#
++# CONFIG_I2O is not set
++# CONFIG_I2O_BLOCK is not set
++# CONFIG_I2O_LAN is not set
++# CONFIG_I2O_SCSI is not set
++# CONFIG_I2O_PROC is not set
++
++#
++# ISDN subsystem
++#
++# CONFIG_ISDN is not set
++
++#
++# Input core support
++#
++# CONFIG_INPUT is not set
++# CONFIG_INPUT_KEYBDEV is not set
++# CONFIG_INPUT_MOUSEDEV is not set
++# CONFIG_INPUT_JOYDEV is not set
++# CONFIG_INPUT_EVDEV is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++# CONFIG_VT_CONSOLE is not set
++CONFIG_SERIAL=m
++CONFIG_SERIAL_COLLIE=y
++# CONFIG_SERIAL_COLLIE_CONSOLE is not set
++CONFIG_COLLIE_DEFAULT_BAUDRATE=9600
++# CONFIG_SERIAL_EXTENDED is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_ANAKIN is not set
++# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
++# CONFIG_SERIAL_AMBA is not set
++# CONFIG_SERIAL_AMBA_CONSOLE is not set
++# CONFIG_SERIAL_CLPS711X is not set
++# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
++# CONFIG_SERIAL_21285 is not set
++# CONFIG_SERIAL_21285_OLD is not set
++# CONFIG_SERIAL_21285_CONSOLE is not set
++# CONFIG_SERIAL_UART00 is not set
++# CONFIG_SERIAL_UART00_CONSOLE is not set
++# CONFIG_SERIAL_SA1100 is not set
++# CONFIG_SERIAL_SA1100_CONSOLE is not set
++# CONFIG_SERIAL_8250 is not set
++# CONFIG_SERIAL_8250_CONSOLE is not set
++# CONFIG_SERIAL_8250_EXTENDED is not set
++# CONFIG_SERIAL_8250_MANY_PORTS is not set
++# CONFIG_SERIAL_8250_SHARE_IRQ is not set
++# CONFIG_SERIAL_8250_DETECT_IRQ is not set
++# CONFIG_SERIAL_8250_MULTIPORT is not set
++# CONFIG_SERIAL_8250_HUB6 is not set
++CONFIG_UCB1200=y
++CONFIG_TOUCHSCREEN_UCB1200=y
++# CONFIG_AUDIO_UCB1200 is not set
++# CONFIG_ADC_UCB1200 is not set
++CONFIG_UNIX98_PTYS=y
++CONFIG_UNIX98_PTY_COUNT=32
++
++#
++# I2C support
++#
++# CONFIG_I2C is not set
++
++#
++# L3 serial bus support
++#
++# CONFIG_L3 is not set
++# CONFIG_L3_ALGOBIT is not set
++# CONFIG_L3_BIT_SA1100_GPIO is not set
++# CONFIG_L3_SA1111 is not set
++# CONFIG_BIT_SA1100_GPIO is not set
++
++#
++# Mice
++#
++# CONFIG_BUSMOUSE is not set
++# CONFIG_MOUSE is not set
++
++#
++# Joysticks
++#
++# CONFIG_INPUT_GAMEPORT is not set
++# CONFIG_QIC02_TAPE is not set
++
++#
++# Watchdog Cards
++#
++# CONFIG_WATCHDOG is not set
++# CONFIG_INTEL_RNG is not set
++# CONFIG_NVRAM is not set
++# CONFIG_RTC is not set
++CONFIG_SA1100_RTC=y
++# CONFIG_COTULLA_RTC is not set
++# CONFIG_ADS7846_TS is not set
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++# CONFIG_APPLICOM is not set
++
++#
++# Ftape, the floppy tape device driver
++#
++# CONFIG_FTAPE is not set
++# CONFIG_AGP is not set
++# CONFIG_DRM is not set
++
++#
++# PCMCIA character devices
++#
++CONFIG_PCMCIA_SERIAL_CS=m
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++
++#
++# File systems
++#
++# CONFIG_QUOTA is not set
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++CONFIG_FS_SYNC=y
++# CONFIG_REISERFS_FS is not set
++# CONFIG_REISERFS_CHECK is not set
++# CONFIG_REISERFS_PROC_INFO is not set
++# CONFIG_ADFS_FS is not set
++# CONFIG_ADFS_FS_RW is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EXT3_FS is not set
++# CONFIG_JBD is not set
++# CONFIG_JBD_DEBUG is not set
++CONFIG_FAT_FS=y
++# CONFIG_MSDOS_FS is not set
++# CONFIG_UMSDOS_FS is not set
++CONFIG_VFAT_FS=y
++# CONFIG_EFS_FS is not set
++# CONFIG_JFFS_FS is not set
++CONFIG_JFFS2_FS=y
++CONFIG_JFFS2_FS_DEBUG=0
++# CONFIG_JFFS2_FS_NAND is not set
++# CONFIG_JFFS2_PROC_FS is not set
++# CONFIG_JFFS2_NODEMERGE is not set
++# CONFIG_JFFS2_DYNFRAGTREE is not set
++CONFIG_CRAMFS=y
++CONFIG_TMPFS=y
++CONFIG_RAMFS=y
++# CONFIG_ISO9660_FS is not set
++# CONFIG_JOLIET is not set
++# CONFIG_ZISOFS is not set
++CONFIG_MINIX_FS=y
++# CONFIG_VXFS_FS is not set
++# CONFIG_NTFS_FS is not set
++# CONFIG_NTFS_RW is not set
++# CONFIG_HPFS_FS is not set
++CONFIG_PROC_FS=y
++# CONFIG_DEVFS_FS is not set
++# CONFIG_DEVFS_MOUNT is not set
++# CONFIG_DEVFS_DEBUG is not set
++CONFIG_DEVPTS_FS=y
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_QNX4FS_RW is not set
++# CONFIG_ROMFS_FS is not set
++CONFIG_EXT2_FS=y
++# CONFIG_SYSV_FS is not set
++# CONFIG_UDF_FS is not set
++# CONFIG_UDF_RW is not set
++# CONFIG_UFS_FS is not set
++# CONFIG_UFS_FS_WRITE is not set
++
++#
++# Network File Systems
++#
++# CONFIG_CODA_FS is not set
++# CONFIG_INTERMEZZO_FS is not set
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_ROOT_NFS is not set
++# CONFIG_NFSD is not set
++# CONFIG_NFSD_V3 is not set
++CONFIG_SUNRPC=y
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_SMB_FS=y
++CONFIG_SMB_NLS_DEFAULT=y
++CONFIG_SMB_NLS_REMOTE="cp437"
++# CONFIG_NCP_FS is not set
++# CONFIG_NCPFS_PACKET_SIGNING is not set
++# CONFIG_NCPFS_IOCTL_LOCKING is not set
++# CONFIG_NCPFS_STRONG is not set
++# CONFIG_NCPFS_NFS_NS is not set
++# CONFIG_NCPFS_OS2_NS is not set
++# CONFIG_NCPFS_SMALLDOS is not set
++# CONFIG_NCPFS_NLS is not set
++# CONFIG_NCPFS_EXTRAS is not set
++# CONFIG_ZISOFS_FS is not set
++CONFIG_ZLIB_FS_INFLATE=y
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++CONFIG_SMB_NLS=y
++CONFIG_NLS=y
++
++#
++# Native Language Support
++#
++CONFIG_NLS_DEFAULT="iso8859-1"
++# CONFIG_NLS_CODEPAGE_437 is not set
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++# CONFIG_NLS_CODEPAGE_850 is not set
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ISO8859_1 is not set
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++CONFIG_NLS_UTF8=y
++
++#
++# Console drivers
++#
++CONFIG_PC_KEYMAP=y
++# CONFIG_VGA_CONSOLE is not set
++
++#
++# Frame-buffer support
++#
++CONFIG_FB=y
++CONFIG_DUMMY_CONSOLE=y
++CONFIG_FB_COLLIE=y
++# CONFIG_FB_ACORN is not set
++# CONFIG_FB_ANAKIN is not set
++# CONFIG_FB_CLPS711X is not set
++# CONFIG_FB_SA1100 is not set
++# CONFIG_FB_PXA is not set
++# CONFIG_FB_COTULLA is not set
++# CONFIG_FB_POODLE is not set
++# CONFIG_FB_CORGI is not set
++# CONFIG_SHARP_LOGO_SCREEN is not set
++# CONFIG_FB_CYBER2000 is not set
++# CONFIG_FB_VIRTUAL is not set
++CONFIG_FBCON_ADVANCED=y
++# CONFIG_FBCON_MFB is not set
++# CONFIG_FBCON_CFB2 is not set
++# CONFIG_FBCON_CFB4 is not set
++# CONFIG_FBCON_CFB8 is not set
++CONFIG_FBCON_CFB16=y
++# CONFIG_FBCON_CFB24 is not set
++# CONFIG_FBCON_CFB32 is not set
++# CONFIG_FBCON_AFB is not set
++# CONFIG_FBCON_ILBM is not set
++# CONFIG_FBCON_IPLAN2P2 is not set
++# CONFIG_FBCON_IPLAN2P4 is not set
++# CONFIG_FBCON_IPLAN2P8 is not set
++# CONFIG_FBCON_MAC is not set
++# CONFIG_FBCON_VGA_PLANES is not set
++# CONFIG_FBCON_VGA is not set
++# CONFIG_FBCON_HGA is not set
++CONFIG_FBCON_ROTATE_R=y
++# CONFIG_FBCON_ROTATE_L is not set
++# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
++CONFIG_FBCON_FONTS=y
++# CONFIG_FONT_8x8 is not set
++# CONFIG_FONT_8x16 is not set
++# CONFIG_FONT_SUN8x16 is not set
++# CONFIG_FONT_SUN12x22 is not set
++# CONFIG_FONT_6x11 is not set
++# CONFIG_FONT_5x8 is not set
++CONFIG_FONT_4x6=y
++# CONFIG_FONT_PEARL_8x8 is not set
++# CONFIG_FONT_ACORN_8x8 is not set
++
++#
++# Sound
++#
++CONFIG_SOUND=y
++# CONFIG_SOUND_BT878 is not set
++CONFIG_SOUND_COLLIE_SSP=y
++CONFIG_COLLIE_PCM1741=y
++# CONFIG_COLLIE_PCM1717 is not set
++CONFIG_SOUND_COLLIE_TC35143=y
++# CONFIG_SOUND_CMPCI is not set
++# CONFIG_SOUND_EMU10K1 is not set
++# CONFIG_MIDI_EMU10K1 is not set
++# CONFIG_SOUND_FUSION is not set
++# CONFIG_SOUND_CS4281 is not set
++# CONFIG_SOUND_ES1370 is not set
++# CONFIG_SOUND_ES1371 is not set
++# CONFIG_SOUND_ESSSOLO1 is not set
++# CONFIG_SOUND_MAESTRO is not set
++# CONFIG_SOUND_MAESTRO3 is not set
++# CONFIG_SOUND_ICH is not set
++# CONFIG_SOUND_RME96XX is not set
++# CONFIG_SOUND_SONICVIBES is not set
++# CONFIG_SOUND_TRIDENT is not set
++# CONFIG_SOUND_MSNDCLAS is not set
++# CONFIG_SOUND_MSNDPIN is not set
++# CONFIG_SOUND_VIA82CXXX is not set
++# CONFIG_MIDI_VIA82CXXX is not set
++# CONFIG_SOUND_SA1100 is not set
++# CONFIG_SOUND_UDA1341 is not set
++# CONFIG_SOUND_ASSABET_UDA1341 is not set
++# CONFIG_SOUND_H3600_UDA1341 is not set
++# CONFIG_SOUND_PANGOLIN_UDA1341 is not set
++# CONFIG_SOUND_SA1111_UDA1341 is not set
++# CONFIG_SOUND_SA1100SSP is not set
++# CONFIG_SOUND_OSS is not set
++# CONFIG_SOUND_WAVEARTIST is not set
++# CONFIG_SOUND_PXA_AC97 is not set
++# CONFIG_SOUND_POODLE is not set
++# CONFIG_SOUND_CORGI is not set
++# CONFIG_SOUND_TVMIXER is not set
++
++#
++# Multimedia Capabilities Port drivers
++#
++# CONFIG_MCP is not set
++# CONFIG_MCP_SA1100 is not set
++# CONFIG_MCP_UCB1200 is not set
++# CONFIG_MCP_UCB1200_AUDIO is not set
++# CONFIG_MCP_UCB1200_TS is not set
++# CONFIG_MCP_UCB1400_TS is not set
++
++#
++# USB support
++#
++CONFIG_USB=m
++# CONFIG_USB_DEBUG is not set
++# CONFIG_USB_DEVICEFS is not set
++# CONFIG_USB_BANDWIDTH is not set
++# CONFIG_USB_LONG_TIMEOUT is not set
++# CONFIG_USB_UHCI is not set
++# CONFIG_USB_UHCI_ALT is not set
++# CONFIG_USB_OHCI is not set
++# CONFIG_USB_OHCI_SA1111 is not set
++# CONFIG_USB_AUDIO is not set
++# CONFIG_USB_BLUETOOTH is not set
++# CONFIG_USB_STORAGE is not set
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_ISD200 is not set
++# CONFIG_USB_STORAGE_DPCM is not set
++# CONFIG_USB_STORAGE_HP8200e is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++# CONFIG_USB_DC2XX is not set
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_SCANNER is not set
++# CONFIG_USB_MICROTEK is not set
++# CONFIG_USB_HPUSBSCSI is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_CDCETHER is not set
++# CONFIG_USB_USBNET is not set
++# CONFIG_USB_USS720 is not set
++
++#
++# USB Serial Converter support
++#
++# CONFIG_USB_SERIAL is not set
++# CONFIG_USB_SERIAL_GENERIC is not set
++# CONFIG_USB_SERIAL_BELKIN is not set
++# CONFIG_USB_SERIAL_WHITEHEAT is not set
++# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
++# CONFIG_USB_SERIAL_EMPEG is not set
++# CONFIG_USB_SERIAL_FTDI_SIO is not set
++# CONFIG_USB_SERIAL_VISOR is not set
++# CONFIG_USB_SERIAL_IPAQ is not set
++# CONFIG_USB_SERIAL_IR is not set
++# CONFIG_USB_SERIAL_EDGEPORT is not set
++# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
++# CONFIG_USB_SERIAL_KEYSPAN is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
++# CONFIG_USB_SERIAL_MCT_U232 is not set
++# CONFIG_USB_SERIAL_KLSI is not set
++# CONFIG_USB_SERIAL_PL2303 is not set
++# CONFIG_USB_SERIAL_CYBERJACK is not set
++# CONFIG_USB_SERIAL_XIRCOM is not set
++# CONFIG_USB_SERIAL_OMNINET is not set
++# CONFIG_USB_RIO500 is not set
++
++#
++# USB Device Support
++#
++CONFIG_USBD=m
++CONFIG_USBD_VENDORID=4dd
++CONFIG_USBD_PRODUCTID=8002
++CONFIG_USBD_PRODUCT_NAME="SL Series"
++CONFIG_USBD_MANUFACTURER="Sharp"
++CONFIG_USBD_USE_SERIAL_NUMBER=y
++CONFIG_USBD_SERIAL_NUMBER_STR="A01234"
++CONFIG_USBD_SELFPOWERED=y
++CONFIG_USBD_MONITOR=m
++CONFIG_USBD_PROCFS=y
++
++#
++# Network Function
++#
++CONFIG_USBD_NET=m
++CONFIG_USBD_NET_VENDORID=4DD
++CONFIG_USBD_NET_PRODUCTID=8004
++CONFIG_USBD_NET_IFNAME="usbd"
++CONFIG_USBD_NET_OUT_ENDPOINT=1
++CONFIG_USBD_NET_OUT_PKTSIZE=64
++CONFIG_USBD_NET_IN_ENDPOINT=2
++CONFIG_USBD_NET_IN_PKTSIZE=64
++# CONFIG_USBD_NET_ALWAYSUP is not set
++# CONFIG_USBD_NET_SAFE is not set
++# CONFIG_USBD_NET_MDLM is not set
++CONFIG_USBD_NET_CDC=y
++CONFIG_USBD_NET_REMOTE_MACADDR=""
++CONFIG_USBD_NET_REMOTE_OUI=400002
++# CONFIG_USBD_MAC_AS_SERIAL_NUMBER is not set
++CONFIG_USBD_NET_LOCAL_MACADDR="400001000001"
++CONFIG_USBD_NET_LOCAL_OUI=400001
++
++#
++# Serial Function
++#
++CONFIG_USBD_SERIAL=m
++CONFIG_USBD_SERIAL_VENDORID=4dd
++CONFIG_USBD_SERIAL_PRODUCTID=8002
++# CONFIG_USBD_SERIAL_CDC is not set
++CONFIG_USBD_SERIAL_OUT_ENDPOINT=1
++CONFIG_USBD_SERIAL_IN_PKTSIZE=64
++CONFIG_USBD_SERIAL_IN_ENDPOINT=2
++CONFIG_USBD_SERIAL_OUT_PKTSIZE=64
++# CONFIG_USBD_SERIAL_SAFE is not set
++
++#
++# USB Device Bus Interface Support
++#
++CONFIG_USBD_SA1100_BUS=m
++# CONFIG_USBD_TRAFFIC_KEEPAWAKE is not set
++CONFIG_USBD_STALL_TIMEOUT=0
++CONFIG_USBD_STALL_DISCONNECT_DURATION=2
++# CONFIG_USBD_GENERIC_BUS is not set
++
++#
++# Bluetooth support
++#
++# CONFIG_BLUEZ is not set
++
++#
++# Kernel hacking
++#
++CONFIG_FRAME_POINTER=y
++# CONFIG_DEBUG_USER is not set
++# CONFIG_DEBUG_COREDUMP_SIGNAL is not set
++# CONFIG_DEBUG_INFO is not set
++# CONFIG_NO_PGT_CACHE is not set
++# CONFIG_DEBUG_KERNEL is not set
++# CONFIG_DEBUG_SLAB is not set
++# CONFIG_MAGIC_SYSRQ is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_WAITQ is not set
++# CONFIG_DEBUG_BUGVERBOSE is not set
++# CONFIG_DEBUG_ERRORS is not set
++# CONFIG_DEBUG_LL is not set
++# CONFIG_DEBUG_DC21285_PORT is not set
++# CONFIG_DEBUG_CLPS711X_UART2 is not set
+diff -Nur linux/sl5500_hybrid /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/sl5500_hybrid
+--- linux/sl5500_hybrid 1970-01-01 07:00:00.000000000 +0700
++++ /home/sash/tmp/oe/buildroot-oz/build/linux-2.4.18/sl5500_hybrid 2003-06-23 01:47:04.000000000 +0700
+@@ -0,0 +1,1065 @@
++#
++# Automatically generated by make menuconfig: don't edit
++#
++CONFIG_ARM=y
++# CONFIG_EISA is not set
++# CONFIG_SBUS is not set
++# CONFIG_MCA is not set
++CONFIG_UID16=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
++# CONFIG_GENERIC_BUST_SPINLOCK is not set
++# CONFIG_GENERIC_ISA_DMA is not set
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++# CONFIG_OBSOLETE is not set
++
++#
++# Loadable module support
++#
++CONFIG_MODULES=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_KMOD is not set
++
++#
++# System Type
++#
++# CONFIG_ARCH_ANAKIN is not set
++# CONFIG_ARCH_ARCA5K is not set
++# CONFIG_ARCH_CLPS7500 is not set
++# CONFIG_ARCH_CLPS711X is not set
++# CONFIG_ARCH_CO285 is not set
++# CONFIG_ARCH_PXA is not set
++# CONFIG_ARCH_EBSA110 is not set
++# CONFIG_ARCH_CAMELOT is not set
++# CONFIG_ARCH_FOOTBRIDGE is not set
++# CONFIG_ARCH_INTEGRATOR is not set
++# CONFIG_ARCH_L7200 is not set
++# CONFIG_ARCH_MX1ADS is not set
++# CONFIG_ARCH_RPC is not set
++CONFIG_ARCH_SA1100=y
++# CONFIG_ARCH_SHARK is not set
++
++#
++# Archimedes/A5000 Implementations
++#
++# CONFIG_ARCH_ARC is not set
++# CONFIG_ARCH_A5K is not set
++
++#
++# Footbridge Implementations
++#
++# CONFIG_ARCH_CATS is not set
++# CONFIG_ARCH_PERSONAL_SERVER is not set
++# CONFIG_ARCH_EBSA285_ADDIN is not set
++# CONFIG_ARCH_EBSA285_HOST is not set
++# CONFIG_ARCH_NETWINDER is not set
++
++#
++# SA11x0 Implementations
++#
++# CONFIG_SA1100_ASSABET is not set
++# CONFIG_ASSABET_NEPONSET is not set
++# CONFIG_SA1100_ADSBITSY is not set
++# CONFIG_SA1100_BRUTUS is not set
++# CONFIG_SA1100_CEP is not set
++# CONFIG_SA1100_CERF is not set
++CONFIG_SA1100_COLLIE=y
++CONFIG_LOCOMO=y
++# CONFIG_COLLIE_TS is not set
++# CONFIG_COLLIE_TR0 is not set
++# CONFIG_COLLIE_TR1 is not set
++# CONFIG_COLLIE_DEV is not set
++# CONFIG_COLLIE_G is not set
++CONFIG_COLLIE_UP=y
++# CONFIG_SA1100_H3100 is not set
++# CONFIG_SA1100_H3600 is not set
++# CONFIG_SA1100_H3800 is not set
++# CONFIG_SA1100_H3XXX is not set
++# CONFIG_SA1100_EXTENEX1 is not set
++# CONFIG_SA1100_FLEXANET is not set
++# CONFIG_SA1100_FREEBIRD is not set
++# CONFIG_SA1100_FRODO is not set
++# CONFIG_SA1100_GRAPHICSCLIENT is not set
++# CONFIG_SA1100_GRAPHICSMASTER is not set
++# CONFIG_SA1100_BADGE4 is not set
++# CONFIG_SA1100_JORNADA720 is not set
++# CONFIG_SA1100_HUW_WEBPANEL is not set
++# CONFIG_SA1100_ITSY is not set
++# CONFIG_SA1100_LART is not set
++# CONFIG_SA1100_NANOENGINE is not set
++# CONFIG_SA1100_OMNIMETER is not set
++# CONFIG_SA1100_PANGOLIN is not set
++# CONFIG_SA1100_PLEB is not set
++# CONFIG_SA1100_PT_SYSTEM3 is not set
++# CONFIG_SA1100_SHANNON is not set
++# CONFIG_SA1100_SHERMAN is not set
++# CONFIG_SA1100_SIMPAD is not set
++# CONFIG_SA1100_PFS168 is not set
++# CONFIG_SA1100_VICTOR is not set
++# CONFIG_SA1100_XP860 is not set
++# CONFIG_SA1100_YOPY is not set
++# CONFIG_SA1100_USB is not set
++# CONFIG_SA1100_USB_NETLINK is not set
++# CONFIG_SA1100_USB_CHAR is not set
++# CONFIG_H3600_SLEEVE is not set
++
++#
++# Intel PXA250/210 Implementations
++#
++# CONFIG_ARCH_LUBBOCK is not set
++# CONFIG_ARCH_PXA_IDP is not set
++# CONFIG_ARCH_PXA_CERF is not set
++# CONFIG_COTULLA_DMA is not set
++# CONFIG_SABINAL_DISCOVERY is not set
++# CONFIG_ARCH_SABINAL is not set
++# CONFIG_ARCH_PXA_POODLE is not set
++# CONFIG_POODLE_TR0 is not set
++# CONFIG_ARCH_PXA_CORGI is not set
++# CONFIG_CORGI_TR0 is not set
++CONFIG_ARCH_SHARP_SL=y
++# CONFIG_PXA_USB is not set
++# CONFIG_PXA_USB_NETLINK is not set
++# CONFIG_PXA_USB_CHAR is not set
++
++#
++# CLPS711X/EP721X Implementations
++#
++# CONFIG_ARCH_AUTCPU12 is not set
++# CONFIG_ARCH_CDB89712 is not set
++# CONFIG_ARCH_CLEP7312 is not set
++# CONFIG_ARCH_EDB7211 is not set
++# CONFIG_ARCH_P720T is not set
++# CONFIG_ARCH_FORTUNET is not set
++# CONFIG_ARCH_EP7211 is not set
++# CONFIG_ARCH_EP7212 is not set
++# CONFIG_ARCH_ACORN is not set
++# CONFIG_FOOTBRIDGE is not set
++# CONFIG_FOOTBRIDGE_HOST is not set
++# CONFIG_FOOTBRIDGE_ADDIN is not set
++CONFIG_CPU_32=y
++# CONFIG_CPU_26 is not set
++# CONFIG_CPU_32v3 is not set
++CONFIG_CPU_32v4=y
++# CONFIG_CPU_ARM610 is not set
++# CONFIG_CPU_ARM710 is not set
++# CONFIG_CPU_ARM720T is not set
++# CONFIG_CPU_ARM920T is not set
++# CONFIG_CPU_ARM922T is not set
++# CONFIG_PLD is not set
++# CONFIG_CPU_ARM926T is not set
++# CONFIG_CPU_ARM1020 is not set
++# CONFIG_CPU_SA110 is not set
++CONFIG_CPU_SA1100=y
++# CONFIG_ARM_THUMB is not set
++CONFIG_DISCONTIGMEM=y
++
++#
++# General setup
++#
++# CONFIG_PCI is not set
++CONFIG_ISA=y
++# CONFIG_ISA_DMA is not set
++# CONFIG_ZBOOT_ROM is not set
++CONFIG_ZBOOT_ROM_TEXT=0
++CONFIG_ZBOOT_ROM_BSS=0
++# CONFIG_CPU_FREQ is not set
++CONFIG_HOTPLUG=y
++
++#
++# PCMCIA/CardBus support
++#
++CONFIG_PCMCIA=y
++CONFIG_PCMCIA_PROBE=y
++# CONFIG_I82092 is not set
++# CONFIG_I82365 is not set
++# CONFIG_TCIC is not set
++# CONFIG_PCMCIA_CLPS6700 is not set
++CONFIG_PCMCIA_SA1100=y
++# CONFIG_PCMCIA_PXA is not set
++CONFIG_NET=y
++CONFIG_SYSVIPC=y
++# CONFIG_BSD_PROCESS_ACCT is not set
++CONFIG_SYSCTL=y
++CONFIG_FPE_NWFPE=y
++# CONFIG_FPE_FASTFPE is not set
++CONFIG_KCORE_ELF=y
++# CONFIG_KCORE_AOUT is not set
++# CONFIG_BINFMT_AOUT is not set
++CONFIG_BINFMT_ELF=y
++# CONFIG_BINFMT_MISC is not set
++CONFIG_PM=y
++CONFIG_APM=y
++# CONFIG_APM_IGNORE_USER_SUSPEND is not set
++CONFIG_APM_CPU_IDLE=y
++CONFIG_APM_DISPLAY_BLANK=y
++CONFIG_APM_RTC_IS_GMT=y
++# CONFIG_ARTHUR is not set
++CONFIG_CMDLINE="root=/dev/mtdblock4 rootfstype=cramfs mem=34M"
++# CONFIG_SHARPSL_BOOTLDR_PARAMS is not set
++# CONFIG_LEDS is not set
++CONFIG_ALIGNMENT_TRAP=y
++CONFIG_FREEPG_SIGNAL=y
++CONFIG_OOM_KILL_SURVIVAL=y
++CONFIG_DEVICEINFO=m
++CONFIG_COLLIE_DEVICEINFO=m
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Memory Technology Devices (MTD)
++#
++CONFIG_MTD=y
++# CONFIG_MTD_DEBUG is not set
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_CONCAT is not set
++# CONFIG_MTD_REDBOOT_PARTS is not set
++# CONFIG_MTD_CMDLINE_PARTS is not set
++# CONFIG_MTD_AFS_PARTS is not set
++CONFIG_MTD_CHAR=y
++CONFIG_MTD_BLOCK=y
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++# CONFIG_MTD_CFI is not set
++# CONFIG_MTD_JEDECPROBE is not set
++# CONFIG_MTD_GEN_PROBE is not set
++# CONFIG_MTD_CFI_INTELEXT is not set
++# CONFIG_MTD_CFI_AMDSTD is not set
++# CONFIG_MTD_CFI_STAA is not set
++# CONFIG_MTD_RAM is not set
++# CONFIG_MTD_ROM is not set
++# CONFIG_MTD_ABSENT is not set
++CONFIG_MTD_COLLIE=y
++# CONFIG_MTD_OBSOLETE_CHIPS is not set
++# CONFIG_MTD_AMDSTD is not set
++# CONFIG_MTD_SHARP is not set
++# CONFIG_MTD_JEDEC is not set
++
++#
++# Mapping drivers for chip access
++#
++# CONFIG_MTD_PHYSMAP is not set
++# CONFIG_MTD_LUBBOCK is not set
++# CONFIG_MTD_NORA is not set
++# CONFIG_MTD_ARM_INTEGRATOR is not set
++# CONFIG_MTD_CDB89712 is not set
++CONFIG_MTD_SA1100=y
++# CONFIG_MTD_DC21285 is not set
++# CONFIG_MTD_IQ80310 is not set
++# CONFIG_MTD_FORTUNET is not set
++# CONFIG_MTD_PXA_CERF is not set
++# CONFIG_MTD_EPXA10DB is not set
++# CONFIG_MTD_AUTCPU12 is not set
++# CONFIG_MTD_EDB7312 is not set
++# CONFIG_MTD_IMPA7 is not set
++# CONFIG_MTD_DISCOVERY is not set
++# CONFIG_MTD_SHARP_SL is not set
++# CONFIG_MTD_PCI is not set
++
++#
++# Self-contained MTD device drivers
++#
++# CONFIG_MTD_PMC551 is not set
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_MTDROM_SA1100 is not set
++CONFIG_MTD_MTDRAM_SA1100=y
++CONFIG_MTDRAM_TOTAL_SIZE=30720
++CONFIG_MTDRAM_ERASE_SIZE=1
++CONFIG_MTDRAM_ABS_POS=C2200000
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_MTDRAM_SHARP_SL is not set
++# CONFIG_MTD_BLKMTD is not set
++# CONFIG_MTD_DOC1000 is not set
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOCPROBE is not set
++
++#
++# NAND Flash Device Drivers
++#
++# CONFIG_MTD_NAND is not set
++
++#
++# Plug and Play configuration
++#
++# CONFIG_PNP is not set
++# CONFIG_ISAPNP is not set
++
++#
++# Block devices
++#
++# CONFIG_BLK_DEV_FD is not set
++# CONFIG_BLK_DEV_XD is not set
++# CONFIG_PARIDE is not set
++# CONFIG_BLK_CPQ_DA is not set
++# CONFIG_BLK_CPQ_CISS_DA is not set
++# CONFIG_BLK_DEV_DAC960 is not set
++CONFIG_BLK_DEV_LOOP=y
++# CONFIG_BLK_DEV_NBD is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_SIZE=1024
++# CONFIG_BLK_DEV_INITRD is not set
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++# CONFIG_BLK_DEV_MD is not set
++# CONFIG_MD_LINEAR is not set
++# CONFIG_MD_RAID0 is not set
++# CONFIG_MD_RAID1 is not set
++# CONFIG_MD_RAID5 is not set
++# CONFIG_MD_MULTIPATH is not set
++# CONFIG_BLK_DEV_LVM is not set
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++CONFIG_PACKET_MMAP=y
++CONFIG_NETLINK_DEV=y
++CONFIG_NETFILTER=y
++# CONFIG_NETFILTER_DEBUG is not set
++# CONFIG_FILTER is not set
++CONFIG_UNIX=y
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++# CONFIG_IP_ADVANCED_ROUTER is not set
++# CONFIG_IP_PNP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_INET_ECN is not set
++# CONFIG_SYN_COOKIES is not set
++
++#
++# IP: Netfilter Configuration
++#
++# CONFIG_IP_NF_CONNTRACK is not set
++# CONFIG_IP_NF_QUEUE is not set
++# CONFIG_IP_NF_IPTABLES is not set
++# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
++# CONFIG_IP_NF_COMPAT_IPFWADM is not set
++# CONFIG_IPV6 is not set
++# CONFIG_KHTTPD is not set
++# CONFIG_ATM is not set
++# CONFIG_VLAN_8021Q is not set
++# CONFIG_IPX is not set
++# CONFIG_ATALK is not set
++# CONFIG_DECNET is not set
++# CONFIG_BRIDGE is not set
++# CONFIG_X25 is not set
++# CONFIG_LAPB is not set
++# CONFIG_LLC is not set
++# CONFIG_NET_DIVERT is not set
++# CONFIG_ECONET is not set
++# CONFIG_WAN_ROUTER is not set
++# CONFIG_NET_FASTROUTE is not set
++# CONFIG_NET_HW_FLOWCONTROL is not set
++
++#
++# QoS and/or fair queueing
++#
++# CONFIG_NET_SCHED is not set
++
++#
++# Network device support
++#
++CONFIG_NETDEVICES=y
++
++#
++# ARCnet devices
++#
++# CONFIG_ARCNET is not set
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++# CONFIG_ETHERTAP is not set
++
++#
++# Ethernet (10 or 100Mbit)
++#
++CONFIG_NET_ETHERNET=y
++# CONFIG_ARM_AM79C961A is not set
++# CONFIG_SUNLANCE is not set
++# CONFIG_SUNBMAC is not set
++# CONFIG_SUNQE is not set
++# CONFIG_SUNGEM is not set
++# CONFIG_NET_VENDOR_3COM is not set
++# CONFIG_LANCE is not set
++# CONFIG_NET_VENDOR_SMC is not set
++# CONFIG_NET_VENDOR_RACAL is not set
++# CONFIG_AT1700 is not set
++# CONFIG_DEPCA is not set
++# CONFIG_HP100 is not set
++# CONFIG_NET_ISA is not set
++# CONFIG_NET_PCI is not set
++# CONFIG_NET_POCKET is not set
++
++#
++# Ethernet (1000 Mbit)
++#
++# CONFIG_ACENIC is not set
++# CONFIG_DL2K is not set
++# CONFIG_MYRI_SBUS is not set
++# CONFIG_NS83820 is not set
++# CONFIG_HAMACHI is not set
++# CONFIG_YELLOWFIN is not set
++# CONFIG_SK98LIN is not set
++# CONFIG_FDDI is not set
++# CONFIG_HIPPI is not set
++# CONFIG_PLIP is not set
++CONFIG_PPP=y
++# CONFIG_PPP_MULTILINK is not set
++# CONFIG_PPP_FILTER is not set
++CONFIG_PPP_ASYNC=y
++# CONFIG_PPP_SYNC_TTY is not set
++# CONFIG_PPP_DEFLATE is not set
++CONFIG_PPP_BSDCOMP=y
++# CONFIG_PPPOE is not set
++# CONFIG_SLIP is not set
++
++#
++# Wireless LAN (non-hamradio)
++#
++CONFIG_NET_RADIO=y
++# CONFIG_STRIP is not set
++# CONFIG_WAVELAN is not set
++# CONFIG_ARLAN is not set
++# CONFIG_AIRONET4500 is not set
++# CONFIG_AIRONET4500_NONCS is not set
++# CONFIG_AIRONET4500_PROC is not set
++# CONFIG_AIRO is not set
++CONFIG_HERMES=y
++CONFIG_PCMCIA_HERMES=y
++# CONFIG_AIRO_CS is not set
++CONFIG_NET_WIRELESS=y
++
++#
++# Token Ring devices
++#
++# CONFIG_TR is not set
++# CONFIG_NET_FC is not set
++# CONFIG_RCPCI is not set
++# CONFIG_SHAPER is not set
++
++#
++# Wan interfaces
++#
++# CONFIG_WAN is not set
++
++#
++# PCMCIA network device support
++#
++CONFIG_NET_PCMCIA=y
++# CONFIG_PCMCIA_3C589 is not set
++# CONFIG_PCMCIA_3C574 is not set
++# CONFIG_PCMCIA_FMVJ18X is not set
++CONFIG_PCMCIA_PCNET=y
++# CONFIG_PCMCIA_AXNET is not set
++# CONFIG_PCMCIA_NMCLAN is not set
++# CONFIG_PCMCIA_SMC91C92 is not set
++# CONFIG_PCMCIA_XIRC2PS is not set
++# CONFIG_ARCNET_COM20020_CS is not set
++# CONFIG_PCMCIA_IBMTR is not set
++# CONFIG_NET_PCMCIA_RADIO is not set
++
++#
++# Amateur Radio support
++#
++# CONFIG_HAMRADIO is not set
++
++#
++# IrDA (infrared) support
++#
++CONFIG_IRDA=y
++# CONFIG_IRLAN is not set
++CONFIG_IRNET=m
++CONFIG_IRCOMM=y
++# CONFIG_IRDA_ULTRA is not set
++# CONFIG_IRDA_CACHE_LAST_LSAP is not set
++CONFIG_IRDA_FAST_RR=y
++# CONFIG_IRDA_DEBUG is not set
++
++#
++# Infrared-port device drivers
++#
++CONFIG_IRTTY_SIR=y
++CONFIG_IRPORT_SIR=y
++# CONFIG_DONGLE is not set
++# CONFIG_USB_IRDA is not set
++# CONFIG_NSC_FIR is not set
++# CONFIG_WINBOND_FIR is not set
++# CONFIG_TOSHIBA_FIR is not set
++# CONFIG_SMC_IRCC_FIR is not set
++# CONFIG_ALI_FIR is not set
++# CONFIG_VLSI_FIR is not set
++CONFIG_SA1100_FIR=y
++
++#
++# ATA/IDE/MFM/RLL support
++#
++CONFIG_IDE=y
++
++#
++# IDE, ATA and ATAPI Block devices
++#
++CONFIG_BLK_DEV_IDE=y
++# CONFIG_BLK_DEV_HD_IDE is not set
++# CONFIG_BLK_DEV_HD is not set
++CONFIG_BLK_DEV_IDEDISK=y
++# CONFIG_IDEDISK_MULTI_MODE is not set
++# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
++# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
++# CONFIG_BLK_DEV_IDEDISK_IBM is not set
++# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
++# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
++# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
++# CONFIG_BLK_DEV_IDEDISK_WD is not set
++# CONFIG_BLK_DEV_COMMERIAL is not set
++# CONFIG_BLK_DEV_TIVO is not set
++CONFIG_BLK_DEV_IDECS=y
++# CONFIG_BLK_DEV_IDECD is not set
++# CONFIG_BLK_DEV_IDETAPE is not set
++# CONFIG_BLK_DEV_IDEFLOPPY is not set
++# CONFIG_BLK_DEV_IDESCSI is not set
++# CONFIG_BLK_DEV_CMD640 is not set
++# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
++# CONFIG_BLK_DEV_ISAPNP is not set
++# CONFIG_IDE_CHIPSETS is not set
++# CONFIG_IDEDMA_AUTO is not set
++# CONFIG_DMA_NONPCI is not set
++# CONFIG_BLK_DEV_IDE_MODES is not set
++# CONFIG_BLK_DEV_ATARAID is not set
++# CONFIG_BLK_DEV_ATARAID_PDC is not set
++# CONFIG_BLK_DEV_ATARAID_HPT is not set
++
++#
++# SCSI support
++#
++# CONFIG_SCSI is not set
++
++#
++# I2O device support
++#
++# CONFIG_I2O is not set
++# CONFIG_I2O_BLOCK is not set
++# CONFIG_I2O_LAN is not set
++# CONFIG_I2O_SCSI is not set
++# CONFIG_I2O_PROC is not set
++
++#
++# ISDN subsystem
++#
++# CONFIG_ISDN is not set
++
++#
++# Input core support
++#
++# CONFIG_INPUT is not set
++# CONFIG_INPUT_KEYBDEV is not set
++# CONFIG_INPUT_MOUSEDEV is not set
++# CONFIG_INPUT_JOYDEV is not set
++# CONFIG_INPUT_EVDEV is not set
++
++#
++# Character devices
++#
++CONFIG_VT=y
++# CONFIG_VT_CONSOLE is not set
++CONFIG_SERIAL=y
++# CONFIG_SERIAL_CONSOLE is not set
++CONFIG_SERIAL_COLLIE=y
++# CONFIG_SERIAL_COLLIE_CONSOLE is not set
++CONFIG_COLLIE_DEFAULT_BAUDRATE=9600
++# CONFIG_SERIAL_EXTENDED is not set
++# CONFIG_SERIAL_NONSTANDARD is not set
++
++#
++# Serial drivers
++#
++# CONFIG_SERIAL_ANAKIN is not set
++# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
++# CONFIG_SERIAL_AMBA is not set
++# CONFIG_SERIAL_AMBA_CONSOLE is not set
++# CONFIG_SERIAL_CLPS711X is not set
++# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
++# CONFIG_SERIAL_21285 is not set
++# CONFIG_SERIAL_21285_OLD is not set
++# CONFIG_SERIAL_21285_CONSOLE is not set
++# CONFIG_SERIAL_UART00 is not set
++# CONFIG_SERIAL_UART00_CONSOLE is not set
++# CONFIG_SERIAL_SA1100 is not set
++# CONFIG_SERIAL_SA1100_CONSOLE is not set
++# CONFIG_SERIAL_8250 is not set
++# CONFIG_SERIAL_8250_CONSOLE is not set
++# CONFIG_SERIAL_8250_EXTENDED is not set
++# CONFIG_SERIAL_8250_MANY_PORTS is not set
++# CONFIG_SERIAL_8250_SHARE_IRQ is not set
++# CONFIG_SERIAL_8250_DETECT_IRQ is not set
++# CONFIG_SERIAL_8250_MULTIPORT is not set
++# CONFIG_SERIAL_8250_HUB6 is not set
++CONFIG_UCB1200=y
++CONFIG_TOUCHSCREEN_UCB1200=y
++# CONFIG_AUDIO_UCB1200 is not set
++# CONFIG_ADC_UCB1200 is not set
++CONFIG_UNIX98_PTYS=y
++CONFIG_UNIX98_PTY_COUNT=32
++
++#
++# I2C support
++#
++# CONFIG_I2C is not set
++
++#
++# L3 serial bus support
++#
++# CONFIG_L3 is not set
++# CONFIG_L3_ALGOBIT is not set
++# CONFIG_L3_BIT_SA1100_GPIO is not set
++# CONFIG_L3_SA1111 is not set
++# CONFIG_BIT_SA1100_GPIO is not set
++
++#
++# Mice
++#
++# CONFIG_BUSMOUSE is not set
++# CONFIG_MOUSE is not set
++
++#
++# Joysticks
++#
++# CONFIG_INPUT_GAMEPORT is not set
++# CONFIG_QIC02_TAPE is not set
++
++#
++# Watchdog Cards
++#
++# CONFIG_WATCHDOG is not set
++# CONFIG_INTEL_RNG is not set
++# CONFIG_NVRAM is not set
++# CONFIG_RTC is not set
++CONFIG_SA1100_RTC=y
++# CONFIG_COTULLA_RTC is not set
++# CONFIG_ADS7846_TS is not set
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++# CONFIG_APPLICOM is not set
++
++#
++# Ftape, the floppy tape device driver
++#
++# CONFIG_FTAPE is not set
++# CONFIG_AGP is not set
++# CONFIG_DRM is not set
++
++#
++# PCMCIA character devices
++#
++CONFIG_PCMCIA_SERIAL_CS=y
++CONFIG_PCMCIA_CHRDEV=y
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++
++#
++# File systems
++#
++# CONFIG_QUOTA is not set
++# CONFIG_AUTOFS_FS is not set
++# CONFIG_AUTOFS4_FS is not set
++CONFIG_FS_SYNC=y
++# CONFIG_REISERFS_FS is not set
++# CONFIG_REISERFS_CHECK is not set
++# CONFIG_REISERFS_PROC_INFO is not set
++# CONFIG_ADFS_FS is not set
++# CONFIG_ADFS_FS_RW is not set
++# CONFIG_AFFS_FS is not set
++# CONFIG_HFS_FS is not set
++# CONFIG_BFS_FS is not set
++# CONFIG_EXT3_FS is not set
++# CONFIG_JBD is not set
++# CONFIG_JBD_DEBUG is not set
++CONFIG_FAT_FS=y
++# CONFIG_MSDOS_FS is not set
++# CONFIG_UMSDOS_FS is not set
++CONFIG_VFAT_FS=y
++# CONFIG_EFS_FS is not set
++# CONFIG_JFFS_FS is not set
++CONFIG_JFFS2_FS=y
++CONFIG_JFFS2_FS_DEBUG=0
++# CONFIG_JFFS2_FS_NAND is not set
++# CONFIG_JFFS2_PROC_FS is not set
++# CONFIG_JFFS2_NODEMERGE is not set
++# CONFIG_JFFS2_DYNFRAGTREE is not set
++CONFIG_CRAMFS=y
++CONFIG_TMPFS=y
++CONFIG_RAMFS=y
++# CONFIG_ISO9660_FS is not set
++# CONFIG_JOLIET is not set
++# CONFIG_ZISOFS is not set
++CONFIG_MINIX_FS=y
++# CONFIG_VXFS_FS is not set
++# CONFIG_NTFS_FS is not set
++# CONFIG_NTFS_RW is not set
++# CONFIG_HPFS_FS is not set
++CONFIG_PROC_FS=y
++# CONFIG_DEVFS_FS is not set
++# CONFIG_DEVFS_MOUNT is not set
++# CONFIG_DEVFS_DEBUG is not set
++CONFIG_DEVPTS_FS=y
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_QNX4FS_RW is not set
++# CONFIG_ROMFS_FS is not set
++CONFIG_EXT2_FS=y
++# CONFIG_SYSV_FS is not set
++# CONFIG_UDF_FS is not set
++# CONFIG_UDF_RW is not set
++# CONFIG_UFS_FS is not set
++# CONFIG_UFS_FS_WRITE is not set
++
++#
++# Network File Systems
++#
++# CONFIG_CODA_FS is not set
++# CONFIG_INTERMEZZO_FS is not set
++CONFIG_NFS_FS=y
++CONFIG_NFS_V3=y
++# CONFIG_ROOT_NFS is not set
++# CONFIG_NFSD is not set
++# CONFIG_NFSD_V3 is not set
++CONFIG_SUNRPC=y
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_SMB_FS=y
++CONFIG_SMB_NLS_DEFAULT=y
++CONFIG_SMB_NLS_REMOTE="UTF8"
++# CONFIG_NCP_FS is not set
++# CONFIG_NCPFS_PACKET_SIGNING is not set
++# CONFIG_NCPFS_IOCTL_LOCKING is not set
++# CONFIG_NCPFS_STRONG is not set
++# CONFIG_NCPFS_NFS_NS is not set
++# CONFIG_NCPFS_OS2_NS is not set
++# CONFIG_NCPFS_SMALLDOS is not set
++# CONFIG_NCPFS_NLS is not set
++# CONFIG_NCPFS_EXTRAS is not set
++# CONFIG_ZISOFS_FS is not set
++CONFIG_ZLIB_FS_INFLATE=y
++
++#
++# Partition Types
++#
++# CONFIG_PARTITION_ADVANCED is not set
++CONFIG_MSDOS_PARTITION=y
++CONFIG_SMB_NLS=y
++CONFIG_NLS=y
++
++#
++# Native Language Support
++#
++CONFIG_NLS_DEFAULT="UFT8"
++CONFIG_NLS_CODEPAGE_437=y
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++# CONFIG_NLS_CODEPAGE_850 is not set
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++CONFIG_NLS_CODEPAGE_866=y
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++CONFIG_NLS_CODEPAGE_1251=y
++CONFIG_NLS_ISO8859_1=y
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++CONFIG_NLS_KOI8_R=y
++# CONFIG_NLS_KOI8_U is not set
++CONFIG_NLS_UTF8=y
++
++#
++# Console drivers
++#
++CONFIG_PC_KEYMAP=y
++# CONFIG_VGA_CONSOLE is not set
++
++#
++# Frame-buffer support
++#
++CONFIG_FB=y
++CONFIG_DUMMY_CONSOLE=y
++CONFIG_FB_COLLIE=y
++# CONFIG_FB_ACORN is not set
++# CONFIG_FB_ANAKIN is not set
++# CONFIG_FB_CLPS711X is not set
++# CONFIG_FB_SA1100 is not set
++# CONFIG_FB_PXA is not set
++# CONFIG_FB_COTULLA is not set
++# CONFIG_FB_POODLE is not set
++# CONFIG_FB_CORGI is not set
++# CONFIG_SHARP_LOGO_SCREEN is not set
++# CONFIG_FB_CYBER2000 is not set
++# CONFIG_FB_VIRTUAL is not set
++CONFIG_FBCON_ADVANCED=y
++# CONFIG_FBCON_MFB is not set
++# CONFIG_FBCON_CFB2 is not set
++# CONFIG_FBCON_CFB4 is not set
++# CONFIG_FBCON_CFB8 is not set
++CONFIG_FBCON_CFB16=y
++# CONFIG_FBCON_CFB24 is not set
++# CONFIG_FBCON_CFB32 is not set
++# CONFIG_FBCON_AFB is not set
++# CONFIG_FBCON_ILBM is not set
++# CONFIG_FBCON_IPLAN2P2 is not set
++# CONFIG_FBCON_IPLAN2P4 is not set
++# CONFIG_FBCON_IPLAN2P8 is not set
++# CONFIG_FBCON_MAC is not set
++# CONFIG_FBCON_VGA_PLANES is not set
++# CONFIG_FBCON_VGA is not set
++# CONFIG_FBCON_HGA is not set
++CONFIG_FBCON_ROTATE_R=y
++# CONFIG_FBCON_ROTATE_L is not set
++# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
++CONFIG_FBCON_FONTS=y
++# CONFIG_FONT_8x8 is not set
++# CONFIG_FONT_8x16 is not set
++# CONFIG_FONT_SUN8x16 is not set
++# CONFIG_FONT_SUN12x22 is not set
++# CONFIG_FONT_6x11 is not set
++# CONFIG_FONT_5x8 is not set
++CONFIG_FONT_4x6=y
++# CONFIG_FONT_PEARL_8x8 is not set
++# CONFIG_FONT_ACORN_8x8 is not set
++
++#
++# Sound
++#
++CONFIG_SOUND=y
++# CONFIG_SOUND_BT878 is not set
++CONFIG_SOUND_COLLIE_SSP=y
++CONFIG_COLLIE_PCM1741=y
++# CONFIG_COLLIE_PCM1717 is not set
++CONFIG_SOUND_COLLIE_TC35143=y
++# CONFIG_SOUND_CMPCI is not set
++# CONFIG_SOUND_EMU10K1 is not set
++# CONFIG_MIDI_EMU10K1 is not set
++# CONFIG_SOUND_FUSION is not set
++# CONFIG_SOUND_CS4281 is not set
++# CONFIG_SOUND_ES1370 is not set
++# CONFIG_SOUND_ES1371 is not set
++# CONFIG_SOUND_ESSSOLO1 is not set
++# CONFIG_SOUND_MAESTRO is not set
++# CONFIG_SOUND_MAESTRO3 is not set
++# CONFIG_SOUND_ICH is not set
++# CONFIG_SOUND_RME96XX is not set
++# CONFIG_SOUND_SONICVIBES is not set
++# CONFIG_SOUND_TRIDENT is not set
++# CONFIG_SOUND_MSNDCLAS is not set
++# CONFIG_SOUND_MSNDPIN is not set
++# CONFIG_SOUND_VIA82CXXX is not set
++# CONFIG_MIDI_VIA82CXXX is not set
++# CONFIG_SOUND_SA1100 is not set
++# CONFIG_SOUND_UDA1341 is not set
++# CONFIG_SOUND_ASSABET_UDA1341 is not set
++# CONFIG_SOUND_H3600_UDA1341 is not set
++# CONFIG_SOUND_PANGOLIN_UDA1341 is not set
++# CONFIG_SOUND_SA1111_UDA1341 is not set
++# CONFIG_SOUND_SA1100SSP is not set
++# CONFIG_SOUND_OSS is not set
++# CONFIG_SOUND_WAVEARTIST is not set
++# CONFIG_SOUND_PXA_AC97 is not set
++# CONFIG_SOUND_POODLE is not set
++# CONFIG_SOUND_CORGI is not set
++# CONFIG_SOUND_TVMIXER is not set
++
++#
++# Multimedia Capabilities Port drivers
++#
++# CONFIG_MCP is not set
++# CONFIG_MCP_SA1100 is not set
++# CONFIG_MCP_UCB1200 is not set
++# CONFIG_MCP_UCB1200_AUDIO is not set
++# CONFIG_MCP_UCB1200_TS is not set
++# CONFIG_MCP_UCB1400_TS is not set
++
++#
++# USB support
++#
++CONFIG_USB=m
++# CONFIG_USB_DEBUG is not set
++# CONFIG_USB_DEVICEFS is not set
++# CONFIG_USB_BANDWIDTH is not set
++# CONFIG_USB_LONG_TIMEOUT is not set
++# CONFIG_USB_UHCI is not set
++# CONFIG_USB_UHCI_ALT is not set
++# CONFIG_USB_OHCI is not set
++# CONFIG_USB_OHCI_SA1111 is not set
++# CONFIG_USB_AUDIO is not set
++# CONFIG_USB_BLUETOOTH is not set
++# CONFIG_USB_STORAGE is not set
++# CONFIG_USB_STORAGE_DEBUG is not set
++# CONFIG_USB_STORAGE_DATAFAB is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_ISD200 is not set
++# CONFIG_USB_STORAGE_DPCM is not set
++# CONFIG_USB_STORAGE_HP8200e is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++# CONFIG_USB_DC2XX is not set
++# CONFIG_USB_MDC800 is not set
++# CONFIG_USB_SCANNER is not set
++# CONFIG_USB_MICROTEK is not set
++# CONFIG_USB_HPUSBSCSI is not set
++# CONFIG_USB_PEGASUS is not set
++# CONFIG_USB_KAWETH is not set
++# CONFIG_USB_CATC is not set
++# CONFIG_USB_CDCETHER is not set
++# CONFIG_USB_USBNET is not set
++# CONFIG_USB_USS720 is not set
++
++#
++# USB Serial Converter support
++#
++# CONFIG_USB_SERIAL is not set
++# CONFIG_USB_SERIAL_GENERIC is not set
++# CONFIG_USB_SERIAL_BELKIN is not set
++# CONFIG_USB_SERIAL_WHITEHEAT is not set
++# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
++# CONFIG_USB_SERIAL_EMPEG is not set
++# CONFIG_USB_SERIAL_FTDI_SIO is not set
++# CONFIG_USB_SERIAL_VISOR is not set
++# CONFIG_USB_SERIAL_IPAQ is not set
++# CONFIG_USB_SERIAL_IR is not set
++# CONFIG_USB_SERIAL_EDGEPORT is not set
++# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
++# CONFIG_USB_SERIAL_KEYSPAN is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
++# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
++# CONFIG_USB_SERIAL_MCT_U232 is not set
++# CONFIG_USB_SERIAL_KLSI is not set
++# CONFIG_USB_SERIAL_PL2303 is not set
++# CONFIG_USB_SERIAL_CYBERJACK is not set
++# CONFIG_USB_SERIAL_XIRCOM is not set
++# CONFIG_USB_SERIAL_OMNINET is not set
++# CONFIG_USB_RIO500 is not set
++
++#
++# USB Device Support
++#
++CONFIG_USBD=m
++CONFIG_USBD_VENDORID=4dd
++CONFIG_USBD_PRODUCTID=8002
++CONFIG_USBD_PRODUCT_NAME="SL Series"
++CONFIG_USBD_MANUFACTURER="Sharp"
++CONFIG_USBD_USE_SERIAL_NUMBER=y
++CONFIG_USBD_SERIAL_NUMBER_STR="A01234"
++CONFIG_USBD_SELFPOWERED=y
++CONFIG_USBD_MONITOR=m
++CONFIG_USBD_PROCFS=y
++
++#
++# Network Function
++#
++CONFIG_USBD_NET=m
++CONFIG_USBD_NET_VENDORID=4DD
++CONFIG_USBD_NET_PRODUCTID=8004
++CONFIG_USBD_NET_IFNAME="usbd"
++CONFIG_USBD_NET_OUT_ENDPOINT=1
++CONFIG_USBD_NET_OUT_PKTSIZE=64
++CONFIG_USBD_NET_IN_ENDPOINT=2
++CONFIG_USBD_NET_IN_PKTSIZE=64
++# CONFIG_USBD_NET_ALWAYSUP is not set
++# CONFIG_USBD_NET_SAFE is not set
++# CONFIG_USBD_NET_MDLM is not set
++CONFIG_USBD_NET_CDC=y
++CONFIG_USBD_NET_REMOTE_MACADDR=""
++CONFIG_USBD_NET_REMOTE_OUI=400002
++# CONFIG_USBD_MAC_AS_SERIAL_NUMBER is not set
++CONFIG_USBD_NET_LOCAL_MACADDR="400001000001"
++CONFIG_USBD_NET_LOCAL_OUI=400001
++
++#
++# Serial Function
++#
++CONFIG_USBD_SERIAL=m
++CONFIG_USBD_SERIAL_VENDORID=4dd
++CONFIG_USBD_SERIAL_PRODUCTID=8002
++# CONFIG_USBD_SERIAL_CDC is not set
++CONFIG_USBD_SERIAL_OUT_ENDPOINT=1
++CONFIG_USBD_SERIAL_IN_PKTSIZE=64
++CONFIG_USBD_SERIAL_IN_ENDPOINT=2
++CONFIG_USBD_SERIAL_OUT_PKTSIZE=64
++# CONFIG_USBD_SERIAL_SAFE is not set
++
++#
++# USB Device Bus Interface Support
++#
++CONFIG_USBD_SA1100_BUS=m
++# CONFIG_USBD_TRAFFIC_KEEPAWAKE is not set
++CONFIG_USBD_STALL_TIMEOUT=0
++CONFIG_USBD_STALL_DISCONNECT_DURATION=2
++# CONFIG_USBD_GENERIC_BUS is not set
++
++#
++# Bluetooth support
++#
++# CONFIG_BLUEZ is not set
++
++#
++# Kernel hacking
++#
++CONFIG_FRAME_POINTER=y
++# CONFIG_DEBUG_USER is not set
++# CONFIG_DEBUG_COREDUMP_SIGNAL is not set
++# CONFIG_DEBUG_INFO is not set
++# CONFIG_NO_PGT_CACHE is not set
++# CONFIG_DEBUG_KERNEL is not set
++# CONFIG_DEBUG_SLAB is not set
++# CONFIG_MAGIC_SYSRQ is not set
++# CONFIG_DEBUG_SPINLOCK is not set
++# CONFIG_DEBUG_WAITQ is not set
++# CONFIG_DEBUG_BUGVERBOSE is not set
++# CONFIG_DEBUG_ERRORS is not set
++# CONFIG_DEBUG_LL is not set
++# CONFIG_DEBUG_DC21285_PORT is not set
++# CONFIG_DEBUG_CLPS711X_UART2 is not set
diff --git a/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/defconfig-collie b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/defconfig-collie
new file mode 100644
index 0000000000..6f0bf1e10d
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/defconfig-collie
@@ -0,0 +1,1177 @@
+#
+# Automatically generated by make menuconfig: don't edit
+#
+CONFIG_ARM=y
+# CONFIG_EISA is not set
+# CONFIG_SBUS is not set
+# CONFIG_MCA is not set
+CONFIG_UID16=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+# CONFIG_GENERIC_BUST_SPINLOCK is not set
+# CONFIG_GENERIC_ISA_DMA is not set
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+# CONFIG_OBSOLETE is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+CONFIG_KMOD=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_ANAKIN is not set
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_CAMELOT is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_MX1ADS is not set
+# CONFIG_ARCH_RPC is not set
+CONFIG_ARCH_SA1100=y
+# CONFIG_ARCH_SHARK is not set
+
+#
+# Archimedes/A5000 Implementations
+#
+# CONFIG_ARCH_ARC is not set
+# CONFIG_ARCH_A5K is not set
+
+#
+# Footbridge Implementations
+#
+# CONFIG_ARCH_CATS is not set
+# CONFIG_ARCH_PERSONAL_SERVER is not set
+# CONFIG_ARCH_EBSA285_ADDIN is not set
+# CONFIG_ARCH_EBSA285_HOST is not set
+# CONFIG_ARCH_NETWINDER is not set
+
+#
+# SA11x0 Implementations
+#
+# CONFIG_SA1100_ASSABET is not set
+# CONFIG_ASSABET_NEPONSET is not set
+# CONFIG_SA1100_ADSBITSY is not set
+# CONFIG_SA1100_BRUTUS is not set
+# CONFIG_SA1100_CEP is not set
+# CONFIG_SA1100_CERF is not set
+CONFIG_SA1100_COLLIE=y
+CONFIG_LOCOMO=y
+# CONFIG_COLLIE_TS is not set
+# CONFIG_COLLIE_TR0 is not set
+# CONFIG_COLLIE_TR1 is not set
+# CONFIG_COLLIE_DEV is not set
+# CONFIG_COLLIE_G is not set
+CONFIG_COLLIE_UP=y
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+# CONFIG_SA1100_H3XXX is not set
+# CONFIG_SA1100_EXTENEX1 is not set
+# CONFIG_SA1100_FLEXANET is not set
+# CONFIG_SA1100_FREEBIRD is not set
+# CONFIG_SA1100_FRODO is not set
+# CONFIG_SA1100_GRAPHICSCLIENT is not set
+# CONFIG_SA1100_GRAPHICSMASTER is not set
+# CONFIG_SA1100_BADGE4 is not set
+# CONFIG_SA1100_JORNADA720 is not set
+# CONFIG_SA1100_HUW_WEBPANEL is not set
+# CONFIG_SA1100_ITSY is not set
+# CONFIG_SA1100_LART is not set
+# CONFIG_SA1100_NANOENGINE is not set
+# CONFIG_SA1100_OMNIMETER is not set
+# CONFIG_SA1100_PANGOLIN is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_PT_SYSTEM3 is not set
+# CONFIG_SA1100_SHANNON is not set
+# CONFIG_SA1100_SHERMAN is not set
+# CONFIG_SA1100_SIMPAD is not set
+# CONFIG_SA1100_PFS168 is not set
+# CONFIG_SA1100_VICTOR is not set
+# CONFIG_SA1100_XP860 is not set
+# CONFIG_SA1100_YOPY is not set
+# CONFIG_SA1100_USB is not set
+# CONFIG_SA1100_USB_NETLINK is not set
+# CONFIG_SA1100_USB_CHAR is not set
+# CONFIG_H3600_SLEEVE is not set
+
+#
+# Intel PXA250/210 Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_ARCH_PXA_CERF is not set
+# CONFIG_COTULLA_DMA is not set
+# CONFIG_SABINAL_DISCOVERY is not set
+# CONFIG_ARCH_SABINAL is not set
+# CONFIG_ARCH_PXA_POODLE is not set
+# CONFIG_POODLE_TR0 is not set
+# CONFIG_ARCH_PXA_CORGI is not set
+# CONFIG_CORGI_TR0 is not set
+CONFIG_ARCH_SHARP_SL=y
+# CONFIG_PXA_USB is not set
+# CONFIG_PXA_USB_NETLINK is not set
+# CONFIG_PXA_USB_CHAR is not set
+
+#
+# CLPS711X/EP721X Implementations
+#
+# CONFIG_ARCH_AUTCPU12 is not set
+# CONFIG_ARCH_CDB89712 is not set
+# CONFIG_ARCH_CLEP7312 is not set
+# CONFIG_ARCH_EDB7211 is not set
+# CONFIG_ARCH_P720T is not set
+# CONFIG_ARCH_FORTUNET is not set
+# CONFIG_ARCH_EP7211 is not set
+# CONFIG_ARCH_EP7212 is not set
+# CONFIG_ARCH_ACORN is not set
+# CONFIG_FOOTBRIDGE is not set
+# CONFIG_FOOTBRIDGE_HOST is not set
+# CONFIG_FOOTBRIDGE_ADDIN is not set
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
+# CONFIG_CPU_32v3 is not set
+CONFIG_CPU_32v4=y
+# CONFIG_CPU_ARM610 is not set
+# CONFIG_CPU_ARM710 is not set
+# CONFIG_CPU_ARM720T is not set
+# CONFIG_CPU_ARM920T is not set
+# CONFIG_CPU_ARM922T is not set
+# CONFIG_PLD is not set
+# CONFIG_CPU_ARM926T is not set
+# CONFIG_CPU_ARM1020 is not set
+# CONFIG_CPU_SA110 is not set
+CONFIG_CPU_SA1100=y
+# CONFIG_ARM_THUMB is not set
+CONFIG_DISCONTIGMEM=y
+
+#
+# General setup
+#
+# CONFIG_PCI is not set
+CONFIG_ISA=y
+# CONFIG_ISA_DMA is not set
+# CONFIG_ZBOOT_ROM is not set
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+# CONFIG_CPU_FREQ is not set
+CONFIG_HOTPLUG=y
+
+#
+# PCMCIA/CardBus support
+#
+CONFIG_PCMCIA=y
+# CONFIG_I82092 is not set
+# CONFIG_I82365 is not set
+# CONFIG_TCIC is not set
+# CONFIG_PCMCIA_CLPS6700 is not set
+CONFIG_PCMCIA_SA1100=y
+# CONFIG_PCMCIA_PXA is not set
+CONFIG_NET=y
+CONFIG_SYSVIPC=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_KCORE_ELF=y
+# CONFIG_KCORE_AOUT is not set
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+CONFIG_PM=y
+CONFIG_APM=y
+# CONFIG_APM_IGNORE_USER_SUSPEND is not set
+CONFIG_APM_CPU_IDLE=y
+CONFIG_APM_DISPLAY_BLANK=y
+CONFIG_APM_RTC_IS_GMT=y
+# CONFIG_ARTHUR is not set
+CONFIG_CMDLINE="<see openzaurus-sa_*.bb file in OpenEmbedded metadata>"
+# CONFIG_SHARPSL_BOOTLDR_PARAMS is not set
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+CONFIG_FREEPG_SIGNAL=y
+CONFIG_OOM_KILL_SURVIVAL=y
+CONFIG_DEVICEINFO=m
+CONFIG_COLLIE_DEVICEINFO=m
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_CACKO_HYBRID_PARTITIONS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+# CONFIG_MTD_GEN_PROBE is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+CONFIG_MTD_COLLIE=y
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+# CONFIG_MTD_AMDSTD is not set
+# CONFIG_MTD_SHARP is not set
+# CONFIG_MTD_JEDEC is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_LUBBOCK is not set
+# CONFIG_MTD_NORA is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_CDB89712 is not set
+CONFIG_MTD_SA1100=y
+# CONFIG_MTD_DC21285 is not set
+# CONFIG_MTD_IQ80310 is not set
+# CONFIG_MTD_FORTUNET is not set
+# CONFIG_MTD_PXA_CERF is not set
+# CONFIG_MTD_EPXA10DB is not set
+# CONFIG_MTD_AUTCPU12 is not set
+# CONFIG_MTD_EDB7312 is not set
+# CONFIG_MTD_IMPA7 is not set
+# CONFIG_MTD_DISCOVERY is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PCI is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_MTDROM_SA1100 is not set
+# CONFIG_MTD_MTDRAM_SA1100 is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_MTDRAM_SHARP_SL is not set
+# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_DOC1000 is not set
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOCPROBE is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# Plug and Play configuration
+#
+# CONFIG_PNP is not set
+# CONFIG_ISAPNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_BLK_DEV_INITRD is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+# CONFIG_BLK_DEV_MD is not set
+# CONFIG_MD_LINEAR is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_MD_RAID1 is not set
+# CONFIG_MD_RAID5 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_BLK_DEV_LVM is not set
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_NETLINK_DEV=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_FILTER=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+# CONFIG_ARPD is not set
+# CONFIG_INET_ECN is not set
+# CONFIG_SYN_COOKIES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_LIMIT=m
+CONFIG_IP_NF_MATCH_MAC=m
+CONFIG_IP_NF_MATCH_MARK=m
+CONFIG_IP_NF_MATCH_MULTIPORT=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_AH_ESP=m
+CONFIG_IP_NF_MATCH_LENGTH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_TCPMSS=m
+CONFIG_IP_NF_MATCH_STATE=m
+CONFIG_IP_NF_MATCH_UNCLEAN=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_MIRROR=m
+CONFIG_IP_NF_NAT=m
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_NAT_SNMP_BASIC=m
+CONFIG_IP_NF_NAT_IRC=m
+CONFIG_IP_NF_NAT_FTP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_MARK=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=m
+# CONFIG_IP_NF_COMPAT_IPCHAINS is not set
+# CONFIG_IP_NF_COMPAT_IPFWADM is not set
+CONFIG_IPV6=m
+
+#
+# IPv6: Netfilter Configuration
+#
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_LIMIT=m
+CONFIG_IP6_NF_MATCH_MAC=m
+CONFIG_IP6_NF_MATCH_MULTIPORT=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_MARK=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_MARK=m
+# CONFIG_KHTTPD is not set
+# CONFIG_ATM is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_LLC is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_FASTROUTE is not set
+# CONFIG_NET_HW_FLOWCONTROL is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+CONFIG_IPSEC=m
+CONFIG_IPSEC_IPIP=y
+CONFIG_IPSEC_AH=y
+# CONFIG_IPSEC_AUTH_HMAC_MD5 is not set
+CONFIG_IPSEC_AUTH_HMAC_SHA1=y
+CONFIG_IPSEC_ESP=y
+CONFIG_IPSEC_ENC_3DES=y
+# CONFIG_IPSEC_ENC_AES is not set
+CONFIG_IPSEC_ALG=y
+# CONFIG_IPSEC_ALG_AES is not set
+# CONFIG_IPSEC_ALG_CRYPTOAPI is not set
+CONFIG_IPSEC_IPCOMP=y
+CONFIG_IPSEC_DEBUG=y
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+CONFIG_DUMMY=m
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+# CONFIG_ETHERTAP is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_ARM_AM79C961A is not set
+# CONFIG_SUNLANCE is not set
+# CONFIG_SUNBMAC is not set
+# CONFIG_SUNQE is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_LANCE is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_AT1700 is not set
+# CONFIG_DEPCA is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_NET_POCKET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_MYRI_SBUS is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PLIP is not set
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=y
+# CONFIG_PPP_SYNC_TTY is not set
+# CONFIG_PPP_DEFLATE is not set
+CONFIG_PPP_BSDCOMP=y
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_STRIP is not set
+# CONFIG_WAVELAN is not set
+# CONFIG_ARLAN is not set
+# CONFIG_AIRONET4500 is not set
+# CONFIG_AIRONET4500_NONCS is not set
+# CONFIG_AIRONET4500_PROC is not set
+# CONFIG_AIRO is not set
+# CONFIG_HERMES is not set
+# CONFIG_PCMCIA_HERMES is not set
+# CONFIG_AIRO_CS is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_NET_FC is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=y
+CONFIG_PCMCIA_AXNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+# CONFIG_ARCNET_COM20020_CS is not set
+# CONFIG_PCMCIA_IBMTR is not set
+CONFIG_NET_PCMCIA_RADIO=y
+# CONFIG_PCMCIA_RAYCS is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_AIRONET4500_CS is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+CONFIG_IRDA=y
+# CONFIG_IRLAN is not set
+CONFIG_IRNET=m
+CONFIG_IRCOMM=y
+# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+CONFIG_IRTTY_SIR=y
+CONFIG_IRPORT_SIR=y
+# CONFIG_DONGLE is not set
+# CONFIG_USB_IRDA is not set
+# CONFIG_NSC_FIR is not set
+# CONFIG_WINBOND_FIR is not set
+# CONFIG_TOSHIBA_FIR is not set
+# CONFIG_SMC_IRCC_FIR is not set
+# CONFIG_ALI_FIR is not set
+# CONFIG_VLSI_FIR is not set
+CONFIG_SA1100_FIR=y
+
+#
+# ATA/IDE/MFM/RLL support
+#
+CONFIG_IDE=y
+
+#
+# IDE, ATA and ATAPI Block devices
+#
+CONFIG_BLK_DEV_IDE=y
+# CONFIG_BLK_DEV_HD_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
+# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
+# CONFIG_BLK_DEV_IDEDISK_IBM is not set
+# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
+# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
+# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
+# CONFIG_BLK_DEV_IDEDISK_WD is not set
+# CONFIG_BLK_DEV_COMMERIAL is not set
+# CONFIG_BLK_DEV_TIVO is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_DMA_NONPCI is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
+# CONFIG_BLK_DEV_ATARAID is not set
+# CONFIG_BLK_DEV_ATARAID_PDC is not set
+# CONFIG_BLK_DEV_ATARAID_HPT is not set
+
+#
+# SCSI support
+#
+# CONFIG_SCSI is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input core support
+#
+CONFIG_INPUT=m
+CONFIG_INPUT_KEYBDEV=m
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+CONFIG_INPUT_UINPUT=m
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_SERIAL=y
+# CONFIG_SERIAL_CONSOLE is not set
+CONFIG_SERIAL_COLLIE=y
+# CONFIG_SERIAL_COLLIE_CONSOLE is not set
+CONFIG_COLLIE_DEFAULT_BAUDRATE=9600
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_ANAKIN is not set
+# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
+# CONFIG_SERIAL_AMBA is not set
+# CONFIG_SERIAL_AMBA_CONSOLE is not set
+# CONFIG_SERIAL_CLPS711X is not set
+# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
+# CONFIG_SERIAL_21285 is not set
+# CONFIG_SERIAL_21285_OLD is not set
+# CONFIG_SERIAL_21285_CONSOLE is not set
+# CONFIG_SERIAL_UART00 is not set
+# CONFIG_SERIAL_UART00_CONSOLE is not set
+# CONFIG_SERIAL_SA1100 is not set
+# CONFIG_SERIAL_SA1100_CONSOLE is not set
+# CONFIG_SERIAL_8250 is not set
+# CONFIG_SERIAL_8250_CONSOLE is not set
+# CONFIG_SERIAL_8250_EXTENDED is not set
+# CONFIG_SERIAL_8250_MANY_PORTS is not set
+# CONFIG_SERIAL_8250_SHARE_IRQ is not set
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+# CONFIG_SERIAL_8250_MULTIPORT is not set
+# CONFIG_SERIAL_8250_HUB6 is not set
+CONFIG_UCB1200=y
+CONFIG_TOUCHSCREEN_UCB1200=y
+# CONFIG_AUDIO_UCB1200 is not set
+# CONFIG_ADC_UCB1200 is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=32
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+# CONFIG_L3_ALGOBIT is not set
+# CONFIG_L3_BIT_SA1100_GPIO is not set
+# CONFIG_L3_SA1111 is not set
+# CONFIG_BIT_SA1100_GPIO is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+# CONFIG_MOUSE is not set
+
+#
+# Joysticks
+#
+# CONFIG_INPUT_GAMEPORT is not set
+# CONFIG_INPUT_NS558 is not set
+# CONFIG_INPUT_LIGHTNING is not set
+# CONFIG_INPUT_PCIGAME is not set
+# CONFIG_INPUT_CS461X is not set
+# CONFIG_INPUT_EMU10K1 is not set
+# CONFIG_INPUT_SERIO is not set
+# CONFIG_INPUT_SERPORT is not set
+# CONFIG_INPUT_ANALOG is not set
+# CONFIG_INPUT_A3D is not set
+# CONFIG_INPUT_ADI is not set
+# CONFIG_INPUT_COBRA is not set
+# CONFIG_INPUT_GF2K is not set
+# CONFIG_INPUT_GRIP is not set
+# CONFIG_INPUT_INTERACT is not set
+# CONFIG_INPUT_TMDC is not set
+# CONFIG_INPUT_SIDEWINDER is not set
+# CONFIG_INPUT_IFORCE_USB is not set
+# CONFIG_INPUT_IFORCE_232 is not set
+# CONFIG_INPUT_WARRIOR is not set
+# CONFIG_INPUT_MAGELLAN is not set
+# CONFIG_INPUT_SPACEORB is not set
+# CONFIG_INPUT_SPACEBALL is not set
+# CONFIG_INPUT_STINGER is not set
+# CONFIG_INPUT_DB9 is not set
+# CONFIG_INPUT_GAMECON is not set
+# CONFIG_INPUT_TURBOGRAFX is not set
+# CONFIG_QIC02_TAPE is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_INTEL_RNG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+CONFIG_SA1100_RTC=y
+# CONFIG_COTULLA_RTC is not set
+# CONFIG_ADS7846_TS is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+CONFIG_PCMCIA_SERIAL_CS=y
+CONFIG_PCMCIA_CHRDEV=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# File systems
+#
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FS_SYNC is not set
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_ADFS_FS_RW is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_BFS_FS is not set
+CONFIG_EXT3_FS=m
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FAT_FS=y
+# CONFIG_MSDOS_FS is not set
+# CONFIG_UMSDOS_FS is not set
+CONFIG_VFAT_FS=y
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+# CONFIG_JFFS2_FS_NAND is not set
+# CONFIG_JFFS2_PROC_FS is not set
+# CONFIG_JFFS2_NODEMERGE is not set
+# CONFIG_JFFS2_DYNFRAGTREE is not set
+CONFIG_CRAMFS=y
+CONFIG_TMPFS=y
+CONFIG_RAMFS=y
+# CONFIG_ISO9660_FS is not set
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
+CONFIG_MINIX_FS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_RW is not set
+# CONFIG_HPFS_FS is not set
+CONFIG_PROC_FS=y
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+CONFIG_DEVPTS_FS=y
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_EXT2_FS=y
+# CONFIG_SYSV_FS is not set
+# CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
+
+#
+# Network File Systems
+#
+# CONFIG_CODA_FS is not set
+# CONFIG_INTERMEZZO_FS is not set
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_ROOT_NFS is not set
+# CONFIG_NFSD is not set
+# CONFIG_NFSD_V3 is not set
+CONFIG_SUNRPC=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_SMB_FS=y
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="UTF8"
+# CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+# CONFIG_ZISOFS_FS is not set
+CONFIG_ZLIB_FS_INFLATE=y
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+CONFIG_SMB_NLS=y
+CONFIG_NLS=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS_DEFAULT="UFT8"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+
+#
+# Console drivers
+#
+CONFIG_PC_KEYMAP=y
+# CONFIG_VGA_CONSOLE is not set
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FB_COLLIE=y
+# CONFIG_FB_ACORN is not set
+# CONFIG_FB_ANAKIN is not set
+# CONFIG_FB_CLPS711X is not set
+# CONFIG_FB_SA1100 is not set
+# CONFIG_FB_PXA is not set
+# CONFIG_FB_COTULLA is not set
+# CONFIG_FB_POODLE is not set
+# CONFIG_FB_CORGI is not set
+# CONFIG_SHARP_LOGO_SCREEN is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_FBCON_ADVANCED=y
+# CONFIG_FBCON_MFB is not set
+# CONFIG_FBCON_CFB2 is not set
+# CONFIG_FBCON_CFB4 is not set
+# CONFIG_FBCON_CFB8 is not set
+CONFIG_FBCON_CFB16=y
+# CONFIG_FBCON_CFB24 is not set
+# CONFIG_FBCON_CFB32 is not set
+# CONFIG_FBCON_AFB is not set
+# CONFIG_FBCON_ILBM is not set
+# CONFIG_FBCON_IPLAN2P2 is not set
+# CONFIG_FBCON_IPLAN2P4 is not set
+# CONFIG_FBCON_IPLAN2P8 is not set
+# CONFIG_FBCON_MAC is not set
+# CONFIG_FBCON_VGA_PLANES is not set
+# CONFIG_FBCON_VGA is not set
+# CONFIG_FBCON_HGA is not set
+CONFIG_FBCON_ROTATE_R=y
+# CONFIG_FBCON_ROTATE_L is not set
+# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
+CONFIG_FBCON_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_5x8 is not set
+CONFIG_FONT_4x6=y
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+# CONFIG_SOUND_BT878 is not set
+CONFIG_SOUND_COLLIE_SSP=y
+CONFIG_COLLIE_PCM1741=y
+# CONFIG_COLLIE_PCM1717 is not set
+CONFIG_SOUND_COLLIE_TC35143=y
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_MIDI_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+# CONFIG_MIDI_VIA82CXXX is not set
+# CONFIG_SOUND_SA1100 is not set
+# CONFIG_SOUND_UDA1341 is not set
+# CONFIG_SOUND_ASSABET_UDA1341 is not set
+# CONFIG_SOUND_H3600_UDA1341 is not set
+# CONFIG_SOUND_PANGOLIN_UDA1341 is not set
+# CONFIG_SOUND_SA1111_UDA1341 is not set
+# CONFIG_SOUND_SA1100SSP is not set
+# CONFIG_SOUND_OSS is not set
+# CONFIG_SOUND_WAVEARTIST is not set
+# CONFIG_SOUND_PXA_AC97 is not set
+# CONFIG_SOUND_POODLE is not set
+# CONFIG_SOUND_CORGI is not set
+# CONFIG_SOUND_TVMIXER is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+# CONFIG_MCP_SA1100 is not set
+# CONFIG_MCP_UCB1200 is not set
+# CONFIG_MCP_UCB1200_AUDIO is not set
+# CONFIG_MCP_UCB1200_TS is not set
+# CONFIG_MCP_UCB1400_TS is not set
+
+#
+# USB support
+#
+CONFIG_USB=m
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_DEVICEFS is not set
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_LONG_TIMEOUT is not set
+# CONFIG_USB_UHCI is not set
+# CONFIG_USB_UHCI_ALT is not set
+# CONFIG_USB_OHCI is not set
+# CONFIG_USB_OHCI_SA1111 is not set
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_STORAGE is not set
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_HP8200e is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_HID is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_DC2XX is not set
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_SCANNER is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_HPUSBSCSI is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_CDCETHER is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_USS720 is not set
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_PL2303 is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+# CONFIG_USB_RIO500 is not set
+
+#
+# USB Device Support
+#
+CONFIG_USBD=m
+CONFIG_USBD_VENDORID=4dd
+CONFIG_USBD_PRODUCTID=8002
+CONFIG_USBD_PRODUCT_NAME="SL Series"
+CONFIG_USBD_MANUFACTURER="Sharp"
+CONFIG_USBD_USE_SERIAL_NUMBER=y
+CONFIG_USBD_SERIAL_NUMBER_STR="A01234"
+CONFIG_USBD_SELFPOWERED=y
+CONFIG_USBD_MONITOR=m
+CONFIG_USBD_PROCFS=y
+
+#
+# Network Function
+#
+CONFIG_USBD_NET=m
+CONFIG_USBD_NET_VENDORID=4DD
+CONFIG_USBD_NET_PRODUCTID=8004
+CONFIG_USBD_NET_IFNAME="usbd"
+CONFIG_USBD_NET_OUT_ENDPOINT=1
+CONFIG_USBD_NET_OUT_PKTSIZE=64
+CONFIG_USBD_NET_IN_ENDPOINT=2
+CONFIG_USBD_NET_IN_PKTSIZE=64
+# CONFIG_USBD_NET_ALWAYSUP is not set
+# CONFIG_USBD_NET_SAFE is not set
+# CONFIG_USBD_NET_MDLM is not set
+CONFIG_USBD_NET_CDC=y
+CONFIG_USBD_NET_REMOTE_MACADDR="400002000001"
+CONFIG_USBD_NET_REMOTE_OUI=400002
+# CONFIG_USBD_MAC_AS_SERIAL_NUMBER is not set
+CONFIG_USBD_NET_LOCAL_MACADDR="400001000001"
+CONFIG_USBD_NET_LOCAL_OUI=400001
+
+#
+# Serial Function
+#
+CONFIG_USBD_SERIAL=m
+CONFIG_USBD_SERIAL_VENDORID=4dd
+CONFIG_USBD_SERIAL_PRODUCTID=8002
+# CONFIG_USBD_SERIAL_CDC is not set
+CONFIG_USBD_SERIAL_OUT_ENDPOINT=1
+CONFIG_USBD_SERIAL_IN_PKTSIZE=64
+CONFIG_USBD_SERIAL_IN_ENDPOINT=2
+CONFIG_USBD_SERIAL_OUT_PKTSIZE=64
+# CONFIG_USBD_SERIAL_SAFE is not set
+
+#
+# USB Device Bus Interface Support
+#
+CONFIG_USBD_SA1100_BUS=m
+# CONFIG_USBD_TRAFFIC_KEEPAWAKE is not set
+CONFIG_USBD_STALL_TIMEOUT=0
+CONFIG_USBD_STALL_DISCONNECT_DURATION=2
+# CONFIG_USBD_GENERIC_BUS is not set
+
+#
+# Bluetooth support
+#
+CONFIG_BLUEZ=m
+CONFIG_BLUEZ_L2CAP=m
+CONFIG_BLUEZ_SCO=m
+CONFIG_BLUEZ_RFCOMM=m
+CONFIG_BLUEZ_RFCOMM_TTY=y
+CONFIG_BLUEZ_BNEP=m
+CONFIG_BLUEZ_BNEP_MC_FILTER=y
+CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
+# CONFIG_BLUEZ_HIDP is not set
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BLUEZ_HCIUSB is not set
+CONFIG_BLUEZ_HCIUART=m
+CONFIG_BLUEZ_HCIUART_H4=y
+CONFIG_BLUEZ_HCIUART_BCSP=y
+CONFIG_BLUEZ_HCIUART_BCSP_TXCRC=y
+# CONFIG_BLUEZ_HCIBFUSB is not set
+CONFIG_BLUEZ_HCIDTL1=m
+CONFIG_BLUEZ_HCIBT3C=m
+CONFIG_BLUEZ_HCIBLUECARD=m
+CONFIG_BLUEZ_HCIBTUART=m
+# CONFIG_BLUEZ_HCIVHCI is not set
+
+#
+# Kernel hacking
+#
+CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_COREDUMP_SIGNAL is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_NO_PGT_CACHE is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_WAITQ is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_LL is not set
+# CONFIG_DEBUG_DC21285_PORT is not set
+# CONFIG_DEBUG_CLPS711X_UART2 is not set
diff --git a/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/disable-pcmcia-probe.patch b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/disable-pcmcia-probe.patch
new file mode 100644
index 0000000000..79ba036323
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/disable-pcmcia-probe.patch
@@ -0,0 +1,17 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- linux/drivers/pcmcia/Config.in~disable-pcmcia-probe 2003-05-13 11:18:23.000000000 +0200
++++ linux/drivers/pcmcia/Config.in 2004-05-27 13:59:50.000000000 +0200
+@@ -15,9 +15,6 @@
+ tristate 'PCMCIA/CardBus support' CONFIG_PCMCIA
+ if [ "$CONFIG_PCMCIA" != "n" ]; then
+ # yes, I really mean the following...
+- if [ "$CONFIG_ISA" = "y" -o "$CONFIG_ARCH_SA1100" = "y" ]; then
+- define_bool CONFIG_PCMCIA_PROBE y
+- fi
+ if [ "$CONFIG_PCI" != "n" ]; then
+ bool ' CardBus support' CONFIG_CARDBUS
+ fi
diff --git a/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/idecs.patch b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/idecs.patch
new file mode 100644
index 0000000000..62038c34e2
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/idecs.patch
@@ -0,0 +1,77 @@
+--- linux/drivers/ide/ide-cs.c 2003-02-28 17:04:00.000000000 -0600
++++ linux.new/drivers/ide/ide-cs.c 2003-02-28 17:18:53.000000000 -0600
+@@ -2,7 +2,7 @@
+
+ A driver for PCMCIA IDE/ATA disk cards
+
+- ide_cs.c 1.26 1999/11/16 02:10:49
++ ide-cs.c 1.26 1999/11/16 02:10:49
+
+ The contents of this file are subject to the Mozilla Public
+ License Version 1.1 (the "License"); you may not use this file
+@@ -66,7 +66,7 @@
+ MODULE_PARM(pc_debug, "i");
+ #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)
+ static char *version =
+-"ide_cs.c 1.26 1999/11/16 02:10:49 (David Hinds)";
++"ide-cs.c 1.26 1999/11/16 02:10:49 (David Hinds)";
+ #else
+ #define DEBUG(n, args...)
+ #endif
+@@ -110,7 +110,7 @@
+ static int ide_event(event_t event, int priority,
+ event_callback_args_t *args);
+
+-static dev_info_t dev_info = "ide_cs";
++static dev_info_t dev_info = "ide-cs";
+
+ static dev_link_t *ide_attach(void);
+ static void ide_detach(dev_link_t *);
+@@ -356,7 +356,7 @@
+ }
+
+ if (hd < 0) {
+- printk(KERN_NOTICE "ide_cs: ide_register() at 0x%03x & 0x%03x"
++ printk(KERN_NOTICE "ide-cs: ide_register() at 0x%03x & 0x%03x"
+ ", irq %u failed\n", io_base, ctl_base,
+ link->irq.AssignedIRQ);
+ goto failed;
+@@ -369,7 +369,7 @@
+ info->node.minor = 0;
+ info->hd = hd;
+ link->dev = &info->node;
+- printk(KERN_INFO "ide_cs: %s: Vcc = %d.%d, Vpp = %d.%d\n",
++ printk(KERN_INFO "ide-cs: %s: Vcc = %d.%d, Vpp = %d.%d\n",
+ info->node.dev_name, link->conf.Vcc/10, link->conf.Vcc%10,
+ link->conf.Vpp1/10, link->conf.Vpp1%10);
+
+@@ -409,9 +409,9 @@
+ MOD_DEC_USE_COUNT;
+ }
+
+- request_region(link->io.BasePort1, link->io.NumPorts1,"ide_cs");
++ request_region(link->io.BasePort1, link->io.NumPorts1,"ide-cs");
+ if (link->io.NumPorts2)
+- request_region(link->io.BasePort2, link->io.NumPorts2,"ide_cs");
++ request_region(link->io.BasePort2, link->io.NumPorts2,"ide-cs");
+
+ info->ndev = 0;
+ link->dev = NULL;
+@@ -508,7 +508,7 @@
+ DEBUG(0, "%s\n", version);
+ CardServices(GetCardServicesInfo, &serv);
+ if (serv.Revision != CS_RELEASE_CODE) {
+- printk(KERN_NOTICE "ide_cs: Card Services release "
++ printk(KERN_NOTICE "ide-cs: Card Services release "
+ "does not match!\n");
+ return -1;
+ }
+@@ -518,7 +518,7 @@
+
+ static void __exit exit_ide_cs(void)
+ {
+- DEBUG(0, "ide_cs: unloading\n");
++ DEBUG(0, "ide-cs: unloading\n");
+ unregister_pccard_driver(&dev_info);
+ while (dev_list != NULL)
+ ide_detach(dev_list);
diff --git a/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/initsh.patch b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/initsh.patch
new file mode 100644
index 0000000000..a672631194
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/initsh.patch
@@ -0,0 +1,14 @@
+--- linux/init/main.c 2002-02-25 13:38:13.000000000 -0600
++++ linux.new/init/main.c 2003-03-16 11:49:45.000000000 -0600
+@@ -830,8 +830,10 @@
+ * trying to recover a really broken machine.
+ */
+
+- if (execute_command)
++ if (execute_command) {
++ argv_init[0] = execute_command;
+ execve(execute_command,argv_init,envp_init);
++ }
+ execve("/sbin/init",argv_init,envp_init);
+ execve("/etc/init",argv_init,envp_init);
+ execve("/bin/init",argv_init,envp_init);
diff --git a/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/keymap-more-sane.patch b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/keymap-more-sane.patch
new file mode 100644
index 0000000000..a7eefd1e16
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/keymap-more-sane.patch
@@ -0,0 +1,19 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- linux/drivers/char/collie_keymap.map~keymap-more-sane 2003-05-13 11:18:18.000000000 +0200
++++ linux/drivers/char/collie_keymap.map 2004-06-23 00:03:19.000000000 +0200
+@@ -55,9 +55,11 @@
+ # (Cancel:34) F9 -> Escape
+ keycode 34 = Escape
+ keycode 35 = Left
++ control keycode 35 = Decr_Console
+ keycode 36 = Up
+ keycode 37 = Down
+ keycode 38 = Right
++ control keycode 38 = Incr_Console
+ # (OK:39) F4 -> Return
+ keycode 39 = Return
+ keycode 40 =
diff --git a/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/logo.patch b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/logo.patch
new file mode 100644
index 0000000000..fd8084254c
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/logo.patch
@@ -0,0 +1,2598 @@
+--- linux/drivers/video/fbcon.c 2003-02-27 21:47:36.000000000 -0600
++++ linux.new/drivers/video/fbcon.c 2003-02-27 18:39:39.000000000 -0600
+@@ -126,8 +126,8 @@
+ #define LOGO_H (320-16)
+ #define LOGO_W 240
+ #else
+-#define LOGO_H 80
+-#define LOGO_W 80
++#define LOGO_H 52
++#define LOGO_W 240
+ #endif
+ #define LOGO_LINE (LOGO_W/8)
+ #if defined(CONFIG_SHARP_LOGO_SCREEN)
+--- linux/include/linux/linux_logo.h 2001-06-11 21:15:27.000000000 -0500
++++ linux.new/include/linux/linux_logo.h 2003-02-27 15:58:15.000000000 -0600
+@@ -1,4 +1,4 @@
+-/* $Id: linux_logo.h,v 1.5 1998/07/30 16:30:58 jj Exp $
++/* linux_logo.h created with fblogo, 2002/12/29 02:43:36
+ * include/linux/linux_logo.h: This is a linux logo
+ * to be displayed on boot.
+ *
+@@ -7,907 +7,1673 @@
+ *
+ * You can put anything here, but:
+ * LINUX_LOGO_COLORS has to be less than 224
+- * image size has to be 80x80
+- * values have to start from 0x20
+- * (i.e. RGB(linux_logo_red[0],
+- * linux_logo_green[0],
+- * linux_logo_blue[0]) is color 0x20)
+- * BW image has to be 80x80 as well, with MS bit
+- * on the left
+- * Serial_console ascii image can be any size,
+- * but should contain %s to display the version
++ * Generated by fblogo version 0.5.0
++ *
++ *
++ * Remember to modify drivers/video/fbcon.c:
++ * Change "#define LOGO_H 80" to "#define LOGO_H 52"
++ * Change "#define LOGO_W 80" to "#define LOGO_W 240"
+ */
+
+ #ifndef __HAVE_ARCH_LINUX_LOGO
+-#define LINUX_LOGO_COLORS 187
++#define LINUX_LOGO_COLORS 223
+ #endif
+-
+ #ifdef INCLUDE_LINUX_LOGO_DATA
+-
+ #ifndef __HAVE_ARCH_LINUX_LOGO
+-
+ unsigned char linux_logo_red[] __initdata = {
+- 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22,
+- 0x12, 0x00, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56,
+- 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x02, 0x65,
+- 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6,
+- 0xc3, 0x65, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6,
+- 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7,
+- 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x76, 0x79,
+- 0x62, 0x36, 0x9a, 0xe2, 0xec, 0xe1, 0xb8, 0xd7,
+- 0xaf, 0x25, 0xbc, 0xc0, 0xef, 0xea, 0xe8, 0xe8,
+- 0xf5, 0xf1, 0xda, 0xd3, 0x79, 0xdb, 0xf4, 0xf6,
+- 0xf6, 0xf6, 0xe2, 0x3d, 0xb4, 0xce, 0xe6, 0xee,
+- 0xf6, 0x68, 0xd8, 0xec, 0xf5, 0xc6, 0xc8, 0x9c,
+- 0x89, 0xd2, 0xee, 0xcb, 0xb9, 0xd2, 0x66, 0x5e,
+- 0x8b, 0xbe, 0xa8, 0xd5, 0xca, 0xb6, 0xae, 0x9c,
+- 0xc5, 0xbe, 0xbe, 0xca, 0x90, 0xb2, 0x9a, 0xa8,
+- 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0x12,
+- 0x4a, 0x8e, 0xf2, 0xf6, 0xf6, 0xee, 0xb5, 0xe4,
+- 0xf1, 0x26, 0x9a, 0xea, 0xf6, 0xe0, 0xd2, 0x16,
+- 0x9a, 0x2e, 0x70, 0xd6, 0x46, 0x7c, 0xb4, 0x62,
+- 0xd6, 0xa3, 0x74, 0xa7, 0xa2, 0xca, 0xe0, 0xae,
+- 0xbe, 0xce, 0xa3, 0x8e, 0x6d, 0x8e, 0x32, 0xaf,
+- 0x50, 0x9e, 0x5b, 0x8a, 0x98, 0x82, 0x7a, 0x82,
+- 0x56, 0x7c, 0x8a, 0x56, 0x5e, 0x86, 0x6a, 0x52,
+- 0x59, 0x64, 0x5e,
++ 0x00, 0x02, 0x06, 0x0A, 0x56, 0xA6, 0xBE, 0xBA,
++ 0xB6, 0x92, 0x3E, 0x1A, 0x8A, 0xF3, 0xFB, 0xEE,
++ 0xC6, 0x62, 0x4A, 0x12, 0x26, 0x0E, 0x76, 0xDA,
++ 0x6E, 0x32, 0x8E, 0x1E, 0x2A, 0xCE, 0xE2, 0x36,
++ 0x66, 0xA2, 0x2E, 0x9E, 0xCA, 0x6A, 0x5A, 0x82,
++ 0x7E, 0xE9, 0xD2, 0xDE, 0x22, 0x72, 0xAE, 0xD6,
++ 0x86, 0x3A, 0x52, 0x9A, 0xAA, 0x16, 0x46, 0x4E,
++ 0x42, 0xC2, 0x96, 0x7A, 0x5E, 0xB2, 0x32, 0x7E,
++ 0x3A, 0x16, 0x02, 0x02, 0x06, 0x1F, 0x02, 0x02,
++ 0x06, 0x02, 0x22, 0x3A, 0x35, 0x16, 0x0A, 0x02,
++ 0x2A, 0x3E, 0x39, 0x32, 0x2A, 0x1E, 0x16, 0x06,
++ 0x22, 0x22, 0x1E, 0x16, 0x6E, 0x82, 0x6E, 0x2E,
++ 0x1E, 0x2E, 0x1E, 0x0A, 0x3A, 0xDA, 0xFE, 0xFA,
++ 0xFA, 0xE2, 0x6A, 0x3A, 0x1A, 0xFA, 0xF6, 0x9E,
++ 0x02, 0x6E, 0xFE, 0xF6, 0x3E, 0x66, 0x52, 0x1B,
++ 0xD6, 0x5A, 0xEE, 0xC6, 0x72, 0x36, 0x22, 0x1E,
++ 0x02, 0x96, 0xF6, 0xDE, 0xA2, 0xD6, 0x39, 0x0E,
++ 0xAA, 0x52, 0x5A, 0xD2, 0xDE, 0x61, 0x46, 0xDE,
++ 0x7A, 0x57, 0x9E, 0xBA, 0xB6, 0x4A, 0x5A, 0xA6,
++ 0x96, 0x23, 0x1E, 0x12, 0x9A, 0x4E, 0x76, 0xAE,
++ 0x2E, 0xBE, 0x86, 0x48, 0xA6, 0x52, 0x06, 0x2E,
++ 0x56, 0x13, 0x2A, 0x4A, 0x36, 0x56, 0x2E, 0x1E,
++ 0x46, 0x3A, 0x66, 0x02, 0x3D, 0x3E, 0x2E, 0x3E,
++ 0x4A, 0x32, 0x52, 0x72, 0x76, 0x67, 0x68, 0x5A,
++ 0x3A, 0x1A, 0x0E, 0x2E, 0x4E, 0x02, 0x3E, 0x0A,
++ 0x28, 0x42, 0x10, 0x26, 0x8E, 0x0A, 0x86, 0xC2,
++ 0x02, 0x6E, 0x92, 0x02, 0x42, 0x02, 0xBE, 0x4E,
++ 0x02, 0x22, 0x02, 0x3E, 0x3A, 0x32
+ };
+
+ unsigned char linux_logo_green[] __initdata = {
+- 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22,
+- 0x12, 0x00, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56,
+- 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x02, 0x65,
+- 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6,
+- 0xc3, 0x62, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6,
+- 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7,
+- 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x62, 0x5c,
+- 0x4e, 0x26, 0x72, 0xaa, 0xba, 0xaf, 0x90, 0xae,
+- 0x92, 0x1a, 0xa4, 0x85, 0xb6, 0xbe, 0xc3, 0xc8,
+- 0xcf, 0xd0, 0xc2, 0xce, 0x57, 0xa2, 0xd6, 0xda,
+- 0xda, 0xd7, 0xb8, 0x2a, 0x7b, 0x91, 0xae, 0xca,
+- 0xda, 0x45, 0x9e, 0xb2, 0xd7, 0x9b, 0x90, 0x76,
+- 0x5c, 0xa2, 0xbe, 0xa6, 0x85, 0x96, 0x4e, 0x46,
+- 0x66, 0x92, 0x7a, 0x9a, 0x96, 0x9d, 0x9a, 0x6b,
+- 0x8a, 0x8e, 0xb2, 0xca, 0x90, 0xa6, 0x79, 0x7c,
+- 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0x0e,
+- 0x36, 0x86, 0xba, 0xbe, 0xe6, 0xcc, 0x8e, 0xb8,
+- 0xc4, 0x1e, 0x8e, 0xae, 0xba, 0xb2, 0xa6, 0x12,
+- 0x7a, 0x20, 0x64, 0xaa, 0x2f, 0x70, 0x85, 0x46,
+- 0xa6, 0x6e, 0x51, 0x72, 0x92, 0xa2, 0xa6, 0x87,
+- 0x96, 0xa2, 0x85, 0x7a, 0x6a, 0x6e, 0x22, 0x76,
+- 0x36, 0x76, 0x3c, 0x6e, 0x63, 0x53, 0x66, 0x62,
+- 0x42, 0x50, 0x56, 0x42, 0x56, 0x56, 0x56, 0x3e,
+- 0x51, 0x52, 0x56,
++ 0x00, 0x02, 0x06, 0x0A, 0x56, 0xA6, 0xBE, 0xBA,
++ 0xB6, 0x92, 0x3E, 0x1A, 0x8A, 0xF3, 0xFB, 0xEE,
++ 0xC6, 0x62, 0x4A, 0x12, 0x26, 0x0E, 0x76, 0xDA,
++ 0x6E, 0x32, 0x8E, 0x1E, 0x2A, 0xCE, 0xE2, 0x36,
++ 0x66, 0xA2, 0x2E, 0x9E, 0xCA, 0x6A, 0x5A, 0x82,
++ 0x7E, 0xE9, 0xD2, 0xDE, 0x22, 0x72, 0xAE, 0xD6,
++ 0x86, 0x3A, 0x52, 0x9A, 0xAA, 0x16, 0x46, 0x4E,
++ 0x42, 0xC2, 0x96, 0x7A, 0x5E, 0xB2, 0x2E, 0x7E,
++ 0x3A, 0x3E, 0x6A, 0xA2, 0x92, 0x30, 0x95, 0x76,
++ 0x4E, 0x86, 0x36, 0x7E, 0x9A, 0x6E, 0x42, 0x56,
++ 0x5A, 0xC2, 0xBE, 0xB2, 0xAA, 0x9A, 0x63, 0x1E,
++ 0xA2, 0x9E, 0x96, 0x5A, 0x3A, 0x42, 0x4A, 0x52,
++ 0x91, 0x46, 0x4E, 0x62, 0x22, 0x4A, 0x6E, 0x86,
++ 0x92, 0x9A, 0x52, 0x4A, 0x76, 0x7A, 0x9E, 0x76,
++ 0x62, 0x32, 0x5E, 0xAE, 0x3E, 0x66, 0x52, 0x81,
++ 0xA6, 0x5A, 0xEE, 0xC6, 0x72, 0x5C, 0x6A, 0x8A,
++ 0x36, 0x3E, 0xBA, 0xBA, 0xA2, 0xD6, 0xAA, 0x4E,
++ 0x8A, 0x4E, 0x5A, 0xD2, 0xDE, 0x64, 0x32, 0x9A,
++ 0x5E, 0x57, 0x9E, 0xBA, 0xB6, 0x52, 0x62, 0xA6,
++ 0x9A, 0x47, 0x3E, 0x56, 0x02, 0x1A, 0x76, 0xAE,
++ 0x4A, 0x02, 0x02, 0x38, 0x02, 0x4A, 0x46, 0x86,
++ 0x1E, 0x2E, 0x7A, 0xD2, 0x5E, 0x26, 0x92, 0x62,
++ 0xCA, 0x42, 0x66, 0x26, 0x67, 0xB6, 0x62, 0x92,
++ 0x9E, 0x72, 0xB2, 0xF2, 0xFE, 0xDE, 0xFE, 0xFE,
++ 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0x8A, 0x2A,
++ 0x42, 0x52, 0x6A, 0x26, 0x8E, 0x26, 0x86, 0xC2,
++ 0xE2, 0x6E, 0x92, 0xBE, 0x42, 0xC6, 0xBE, 0x4E,
++ 0xEE, 0x5A, 0xEA, 0x3E, 0x4A, 0x32
+ };
+
+ unsigned char linux_logo_blue[] __initdata = {
+- 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22,
+- 0x12, 0x01, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56,
+- 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x06, 0x65,
+- 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6,
+- 0xc3, 0x59, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6,
+- 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7,
+- 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x2e, 0x08,
+- 0x0a, 0x06, 0x0a, 0x0b, 0x0b, 0x0f, 0x0c, 0x0f,
+- 0x3d, 0x09, 0x73, 0x09, 0x0d, 0x0a, 0x10, 0x1e,
+- 0x2d, 0x13, 0x86, 0xba, 0x19, 0x0a, 0x36, 0x3c,
+- 0x26, 0x14, 0x0d, 0x06, 0x07, 0x0a, 0x0b, 0x0f,
+- 0x4a, 0x06, 0x0a, 0x0c, 0x2b, 0x0a, 0x0b, 0x0a,
+- 0x06, 0x0a, 0x0a, 0x11, 0x0b, 0x0a, 0x0a, 0x1e,
+- 0x0f, 0x0d, 0x0a, 0x0b, 0x22, 0x6a, 0x72, 0x0b,
+- 0x0b, 0x22, 0x90, 0xca, 0x90, 0x92, 0x3c, 0x2c,
+- 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0x06,
+- 0x0e, 0x6a, 0x0e, 0x0e, 0xbe, 0x5b, 0x2c, 0x3e,
+- 0x0e, 0x0a, 0x5a, 0x0d, 0x0e, 0x3e, 0x0a, 0x06,
+- 0x2e, 0x06, 0x4e, 0x36, 0x06, 0x58, 0x24, 0x06,
+- 0x3a, 0x08, 0x08, 0x07, 0x5e, 0x45, 0x0a, 0x32,
+- 0x2e, 0x2a, 0x43, 0x48, 0x5f, 0x2e, 0x06, 0x06,
+- 0x07, 0x24, 0x06, 0x32, 0x06, 0x06, 0x46, 0x2e,
+- 0x22, 0x06, 0x06, 0x1e, 0x4c, 0x06, 0x3a, 0x22,
+- 0x42, 0x34, 0x42,
++ 0x00, 0x02, 0x06, 0x0A, 0x56, 0xA6, 0xBE, 0xBA,
++ 0xB6, 0x92, 0x3E, 0x1A, 0x8A, 0xF3, 0xFB, 0xEE,
++ 0xC6, 0x62, 0x4A, 0x12, 0x26, 0x0E, 0x76, 0xDA,
++ 0x6E, 0x32, 0x8E, 0x1E, 0x2A, 0xCE, 0xE2, 0x36,
++ 0x66, 0xA2, 0x2E, 0x9E, 0xCA, 0x6A, 0x5A, 0x82,
++ 0x7E, 0xE9, 0xD2, 0xDE, 0x22, 0x72, 0xAE, 0xD6,
++ 0x86, 0x3A, 0x52, 0x9A, 0xAA, 0x16, 0x46, 0x4E,
++ 0x42, 0xC2, 0x96, 0x7A, 0x5E, 0xB2, 0x1A, 0x06,
++ 0x1A, 0x2A, 0x36, 0x52, 0x46, 0x23, 0x4D, 0x3E,
++ 0x2A, 0x42, 0x2A, 0x5A, 0x69, 0x42, 0x26, 0x2E,
++ 0x42, 0x7E, 0x7C, 0x72, 0x6A, 0x5E, 0x3B, 0x12,
++ 0x62, 0x5E, 0x5A, 0x36, 0x26, 0x1E, 0x26, 0x42,
++ 0x56, 0x3A, 0x36, 0x36, 0x1E, 0x2E, 0x2A, 0x22,
++ 0x22, 0x1A, 0x16, 0x42, 0x46, 0x26, 0x1E, 0x12,
++ 0x32, 0x2A, 0x2E, 0x16, 0x2A, 0x1A, 0x2E, 0x4E,
++ 0x12, 0x22, 0x02, 0x02, 0x12, 0x4A, 0x46, 0x52,
++ 0x1E, 0x1E, 0x16, 0x0E, 0x02, 0x02, 0x6F, 0x2E,
++ 0x0E, 0x1A, 0x06, 0x02, 0x02, 0x04, 0x22, 0x16,
++ 0x0E, 0x12, 0x02, 0x02, 0x02, 0x0A, 0x5A, 0x02,
++ 0x02, 0x1B, 0x2E, 0x32, 0x02, 0x02, 0x02, 0x02,
++ 0x16, 0x02, 0x02, 0x10, 0x02, 0x02, 0x26, 0x5A,
++ 0x02, 0x1F, 0x52, 0x8E, 0x22, 0x02, 0x5E, 0x3E,
++ 0x86, 0x0E, 0x16, 0x16, 0x52, 0x7A, 0x4A, 0x66,
++ 0x72, 0x52, 0x82, 0xB2, 0xBA, 0xA4, 0xB2, 0xAA,
++ 0x9E, 0x8E, 0x88, 0x96, 0xA6, 0x82, 0x62, 0x1A,
++ 0x34, 0x4A, 0x31, 0x16, 0x02, 0x1A, 0x02, 0x02,
++ 0x72, 0x02, 0x02, 0x5E, 0x1A, 0x62, 0x02, 0x0E,
++ 0x76, 0x1E, 0x76, 0x1E, 0x0A, 0x02
+ };
+
+ unsigned char linux_logo[] __initdata = {
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22, 0x22,
+- 0x22, 0x21, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+- 0x26, 0x26, 0x25, 0x28, 0x23, 0x22, 0x21, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x21, 0x23, 0x25, 0x2a, 0x2b, 0x2c, 0x2d, 0x2d,
+- 0x2d, 0x2e, 0x2c, 0x2b, 0x2a, 0x25, 0x28, 0x22,
+- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x24, 0x2a, 0x2c, 0x2f, 0x2c, 0x30, 0x30, 0x24,
+- 0x25, 0x27, 0x2b, 0x2c, 0x2f, 0x31, 0x32, 0x25,
+- 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x25,
+- 0x33, 0x34, 0x35, 0x21, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x21, 0x2b, 0x2f, 0x2c,
+- 0x30, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, 0x33,
+- 0x2d, 0x27, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x31,
+- 0x2d, 0x32, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x21, 0x28, 0x2a, 0x34,
+- 0x25, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x23, 0x32, 0x27, 0x21, 0x36,
+- 0x2a, 0x2d, 0x2a, 0x28, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x2c, 0x35,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x25, 0x2f, 0x37, 0x32, 0x22,
+- 0x36, 0x35, 0x31, 0x27, 0x22, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x23, 0x2a, 0x2f, 0x22,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x26, 0x38, 0x38, 0x35, 0x25,
+- 0x36, 0x21, 0x2d, 0x2b, 0x24, 0x21, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x21, 0x24, 0x39, 0x39, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x25, 0x2b, 0x30, 0x28, 0x22,
+- 0x36, 0x36, 0x27, 0x34, 0x30, 0x23, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x21, 0x26, 0x2d, 0x26, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x22, 0x22, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x2d, 0x33, 0x28, 0x21, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x23, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x2b, 0x2c, 0x25, 0x21, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x2a, 0x34, 0x36, 0x36,
+- 0x36, 0x21, 0x22, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x21, 0x23, 0x22, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x28, 0x34, 0x27, 0x22, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x36,
+- 0x21, 0x21, 0x24, 0x27, 0x21, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x28, 0x27, 0x22, 0x33, 0x24, 0x36,
+- 0x36, 0x36, 0x36, 0x22, 0x2f, 0x2a, 0x23, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x36,
+- 0x30, 0x3a, 0x38, 0x24, 0x24, 0x36, 0x36, 0x36,
+- 0x23, 0x2f, 0x3b, 0x3c, 0x3d, 0x30, 0x25, 0x21,
+- 0x36, 0x36, 0x36, 0x36, 0x2f, 0x32, 0x23, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x23,
+- 0x3e, 0x3f, 0x40, 0x3a, 0x22, 0x36, 0x36, 0x21,
+- 0x41, 0x42, 0x43, 0x44, 0x45, 0x3e, 0x23, 0x21,
+- 0x36, 0x36, 0x36, 0x36, 0x2f, 0x33, 0x28, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x29, 0x20, 0x29, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x2b,
+- 0x44, 0x40, 0x46, 0x47, 0x35, 0x36, 0x36, 0x26,
+- 0x43, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x2e, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x31, 0x35, 0x24, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x32, 0x34, 0x36, 0x4d,
+- 0x4e, 0x25, 0x2f, 0x46, 0x4a, 0x22, 0x23, 0x32,
+- 0x4f, 0x50, 0x21, 0x31, 0x51, 0x52, 0x53, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x31, 0x35, 0x24, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x29, 0x20, 0x29, 0x29, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x2a, 0x2f, 0x21, 0x3a,
+- 0x4d, 0x21, 0x31, 0x54, 0x55, 0x28, 0x30, 0x2b,
+- 0x4b, 0x4d, 0x36, 0x23, 0x32, 0x50, 0x3f, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x2e, 0x39, 0x24, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x29, 0x20, 0x29, 0x20, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x2a, 0x38, 0x23, 0x37,
+- 0x55, 0x36, 0x28, 0x3a, 0x56, 0x57, 0x57, 0x58,
+- 0x3c, 0x4d, 0x36, 0x36, 0x36, 0x40, 0x40, 0x21,
+- 0x36, 0x36, 0x36, 0x36, 0x2e, 0x39, 0x24, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x29, 0x29, 0x29, 0x20, 0x29, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x30, 0x51, 0x23, 0x35,
+- 0x43, 0x25, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e,
+- 0x5f, 0x60, 0x61, 0x36, 0x31, 0x47, 0x3b, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x31, 0x2c, 0x25, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x23, 0x22,
+- 0x40, 0x62, 0x63, 0x5d, 0x64, 0x65, 0x66, 0x67,
+- 0x68, 0x69, 0x66, 0x5e, 0x6a, 0x6b, 0x2a, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x33, 0x2e, 0x26, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x27, 0x2f, 0x23, 0x36,
+- 0x6c, 0x63, 0x6d, 0x64, 0x5c, 0x66, 0x69, 0x6e,
+- 0x6f, 0x70, 0x71, 0x69, 0x69, 0x72, 0x6c, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x33, 0x34, 0x27, 0x22,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x27, 0x34, 0x26, 0x73,
+- 0x74, 0x75, 0x76, 0x64, 0x65, 0x77, 0x69, 0x78,
+- 0x70, 0x71, 0x71, 0x71, 0x72, 0x5f, 0x5e, 0x21,
+- 0x36, 0x36, 0x36, 0x36, 0x25, 0x38, 0x2a, 0x23,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x26, 0x2d, 0x33, 0x79,
+- 0x63, 0x7a, 0x7b, 0x5c, 0x66, 0x69, 0x6e, 0x7c,
+- 0x71, 0x71, 0x69, 0x7d, 0x7e, 0x7a, 0x7f, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x21, 0x51, 0x2b, 0x28,
+- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x26, 0x2d, 0x32, 0x24,
+- 0x80, 0x81, 0x64, 0x82, 0x77, 0x69, 0x71, 0x71,
+- 0x69, 0x83, 0x84, 0x85, 0x7a, 0x85, 0x86, 0x36,
+- 0x21, 0x2b, 0x23, 0x36, 0x36, 0x39, 0x2e, 0x26,
+- 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x27, 0x2d, 0x33, 0x21,
+- 0x87, 0x88, 0x89, 0x72, 0x67, 0x66, 0x5f, 0x89,
+- 0x8a, 0x63, 0x85, 0x8b, 0x8c, 0x8d, 0x41, 0x36,
+- 0x36, 0x2d, 0x3a, 0x35, 0x36, 0x24, 0x51, 0x32,
+- 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x33, 0x21,
+- 0x55, 0x8e, 0x8f, 0x8a, 0x7d, 0x5e, 0x90, 0x7e,
+- 0x75, 0x75, 0x90, 0x62, 0x40, 0x3f, 0x49, 0x23,
+- 0x36, 0x24, 0x3a, 0x3a, 0x24, 0x36, 0x2e, 0x31,
+- 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x21, 0x28, 0x33, 0x37, 0x25, 0x22,
+- 0x3b, 0x50, 0x8e, 0x8f, 0x90, 0x7e, 0x90, 0x63,
+- 0x74, 0x91, 0x92, 0x42, 0x93, 0x4b, 0x45, 0x2c,
+- 0x36, 0x36, 0x33, 0x39, 0x21, 0x36, 0x22, 0x51,
+- 0x33, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x22, 0x27, 0x2e, 0x2e, 0x36, 0x21,
+- 0x94, 0x3f, 0x50, 0x95, 0x96, 0x8f, 0x8f, 0x97,
+- 0x8e, 0x42, 0x50, 0x43, 0x47, 0x48, 0x48, 0x98,
+- 0x21, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x39,
+- 0x2e, 0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x22, 0x24, 0x2b, 0x38, 0x28, 0x36, 0x32,
+- 0x4c, 0x4b, 0x50, 0x50, 0x50, 0x42, 0x42, 0x50,
+- 0x50, 0x40, 0x45, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x34, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x23,
+- 0x2f, 0x2b, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x21, 0x28, 0x32, 0x51, 0x32, 0x28, 0x21, 0x98,
+- 0x48, 0x47, 0x9a, 0x50, 0x50, 0x50, 0x50, 0x50,
+- 0x9a, 0x4f, 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x93, 0x23, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x2a, 0x2f, 0x2a, 0x28, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x23, 0x30, 0x2e, 0x2c, 0x36, 0x21, 0x51, 0x9b,
+- 0x48, 0x48, 0x52, 0x3f, 0x50, 0x50, 0x40, 0x4b,
+- 0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x34, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x2d, 0x31, 0x27, 0x23, 0x21, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23,
+- 0x27, 0x2c, 0x2d, 0x21, 0x36, 0x28, 0x44, 0x48,
+- 0x48, 0x48, 0x48, 0x47, 0x46, 0x4f, 0x47, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x9c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x28, 0x51, 0x39, 0x26, 0x22, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x25,
+- 0x35, 0x51, 0x28, 0x36, 0x36, 0x9d, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x9b, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x4f, 0x28, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x28, 0x38, 0x2b, 0x25, 0x22, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, 0x33,
+- 0x51, 0x25, 0x36, 0x36, 0x23, 0x40, 0x9b, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x9b, 0x99, 0x2b, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x30, 0x2f, 0x33, 0x24, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x21, 0x23, 0x30, 0x34,
+- 0x27, 0x36, 0x36, 0x36, 0x2a, 0x40, 0x47, 0x48,
+- 0x48, 0x48, 0x48, 0x9b, 0x99, 0x99, 0x9b, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x9b, 0x47, 0x52,
+- 0x46, 0x4f, 0x37, 0x21, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x30, 0x34, 0x2a, 0x23,
+- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x22, 0x25, 0x39, 0x2c,
+- 0x36, 0x36, 0x36, 0x21, 0x31, 0x4e, 0x9a, 0x4c,
+- 0x47, 0x9b, 0x9b, 0x52, 0x46, 0x4f, 0x52, 0x9b,
+- 0x9b, 0x9b, 0x47, 0x4f, 0x45, 0x9a, 0x93, 0x93,
+- 0x3f, 0x93, 0x98, 0x28, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x39, 0x2c, 0x26,
+- 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x23, 0x2a, 0x34, 0x28,
+- 0x36, 0x36, 0x36, 0x22, 0x38, 0x98, 0x44, 0x99,
+- 0x9b, 0x48, 0x48, 0x9b, 0x4c, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x47, 0x52, 0x46, 0x43, 0x93,
+- 0x40, 0x40, 0x43, 0x53, 0x21, 0x23, 0x33, 0x23,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x2f, 0x32,
+- 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x21, 0x24, 0x2b, 0x31, 0x36,
+- 0x36, 0x22, 0x36, 0x24, 0x9e, 0x4f, 0x9b, 0x48,
+- 0x48, 0x48, 0x48, 0x9b, 0x99, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x47,
+- 0x4f, 0x9a, 0x3f, 0x46, 0x38, 0x36, 0x21, 0x30,
+- 0x26, 0x36, 0x36, 0x36, 0x36, 0x36, 0x39, 0x2c,
+- 0x25, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x22, 0x26, 0x2e, 0x33, 0x36,
+- 0x25, 0x25, 0x36, 0x4d, 0x52, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x47, 0x44, 0x93, 0x43, 0x23, 0x36, 0x36,
+- 0x26, 0x24, 0x36, 0x36, 0x36, 0x36, 0x28, 0x2f,
+- 0x2a, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x23, 0x2a, 0x51, 0x24, 0x36,
+- 0x2a, 0x36, 0x28, 0x44, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x9b, 0x4b, 0x44, 0x37, 0x36, 0x23,
+- 0x28, 0x30, 0x22, 0x36, 0x36, 0x36, 0x36, 0x2d,
+- 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x21, 0x28, 0x2b, 0x34, 0x36, 0x25,
+- 0x24, 0x36, 0x4a, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x9b, 0x52, 0x3f, 0x21, 0x30,
+- 0x35, 0x25, 0x30, 0x36, 0x36, 0x36, 0x36, 0x32,
+- 0x2d, 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x22, 0x26, 0x2e, 0x35, 0x36, 0x2a,
+- 0x36, 0x24, 0x4f, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x9b, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x47, 0x32, 0x30,
+- 0x2a, 0x23, 0x30, 0x23, 0x36, 0x36, 0x36, 0x21,
+- 0x2f, 0x32, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x21, 0x23, 0x2a, 0x51, 0x28, 0x28, 0x25,
+- 0x36, 0x3a, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x9b, 0x52, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x38, 0x21,
+- 0x36, 0x36, 0x22, 0x27, 0x36, 0x36, 0x36, 0x36,
+- 0x2e, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x22, 0x25, 0x2c, 0x34, 0x36, 0x30, 0x21,
+- 0x23, 0x43, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x47, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x94, 0x36,
+- 0x36, 0x36, 0x36, 0x32, 0x36, 0x36, 0x36, 0x36,
+- 0x2a, 0x2e, 0x26, 0x22, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x21, 0x23, 0x2a, 0x51, 0x25, 0x21, 0x2a, 0x36,
+- 0x2e, 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x99, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x98, 0x36,
+- 0x36, 0x36, 0x36, 0x32, 0x36, 0x36, 0x36, 0x36,
+- 0x22, 0x2f, 0x30, 0x22, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x22, 0x25, 0x2c, 0x34, 0x36, 0x24, 0x28, 0x36,
+- 0x54, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4c, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x9a, 0x36,
+- 0x36, 0x36, 0x36, 0x30, 0x36, 0x36, 0x36, 0x36,
+- 0x21, 0x2f, 0x32, 0x23, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x28, 0x32, 0x2f, 0x28, 0x36, 0x27, 0x22, 0x21,
+- 0x43, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4c, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4b, 0x21,
+- 0x36, 0x36, 0x21, 0x26, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x34, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x25, 0x2c, 0x39, 0x36, 0x36, 0x30, 0x22, 0x25,
+- 0x52, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x52, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4f, 0x21,
+- 0x36, 0x36, 0x22, 0x26, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x2c, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x30, 0x2d, 0x21, 0x36, 0x36, 0x32, 0x23, 0x2a,
+- 0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4c, 0x22,
+- 0x36, 0x36, 0x24, 0x23, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x2c, 0x39, 0x24, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
+- 0x33, 0x2e, 0x36, 0x36, 0x23, 0x31, 0x27, 0x39,
+- 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x47, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4c, 0x23,
+- 0x36, 0x36, 0x26, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x2c, 0x39, 0x24, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
+- 0x2b, 0x39, 0x36, 0x36, 0x36, 0x26, 0x32, 0x31,
+- 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x47, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x46, 0x22,
+- 0x36, 0x21, 0x26, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x2c, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24,
+- 0x35, 0x39, 0x36, 0x36, 0x36, 0x36, 0x26, 0x2d,
+- 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x47, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x9a, 0x36,
+- 0x24, 0x27, 0x9f, 0x24, 0x25, 0x28, 0x21, 0x36,
+- 0x36, 0x34, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x25,
+- 0x39, 0x4d, 0xa0, 0x84, 0x81, 0x57, 0x21, 0x39,
+- 0x52, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x47, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x53, 0x28,
+- 0x23, 0x36, 0x36, 0x36, 0x21, 0x28, 0x2c, 0x30,
+- 0x21, 0x38, 0x33, 0x28, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x21, 0x22, 0x22, 0x28, 0x30,
+- 0x2d, 0xa1, 0x7a, 0xa2, 0xa3, 0xa3, 0x7f, 0x22,
+- 0x51, 0x52, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x9b, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0xa4, 0xa5, 0xa5, 0xa6, 0x61,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x30, 0x32,
+- 0x25, 0x4d, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x21, 0x23, 0x24, 0x26, 0x30, 0x33, 0x31,
+- 0x4d, 0x91, 0x5b, 0xa2, 0xa3, 0xa3, 0xa3, 0x5a,
+- 0x21, 0x2e, 0x46, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4f, 0x9b, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0xa7, 0xa8, 0x69, 0x66, 0xa9,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x26, 0x25,
+- 0x83, 0xaa, 0x2c, 0x25, 0x21, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x21, 0x28, 0x30, 0x35, 0x2d, 0x2f, 0x37, 0x4a,
+- 0x60, 0x85, 0xab, 0xac, 0xa3, 0xa3, 0xa3, 0x82,
+- 0x86, 0x36, 0x32, 0x3f, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x4c, 0x99, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0xad, 0xa2, 0xa8, 0xae, 0xaf,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x57,
+- 0x77, 0x66, 0x34, 0x27, 0x22, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x23, 0x30, 0x31, 0xb0, 0x91, 0x7e, 0x90, 0x90,
+- 0x8b, 0x5b, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0x5d, 0xb1, 0x36, 0x24, 0x53, 0x9b, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x9b, 0x99, 0xad, 0x64, 0x5c, 0x8b, 0xb1,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x73, 0x5d,
+- 0x82, 0x5c, 0xb2, 0x2a, 0x23, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x24, 0x2b, 0xb0, 0x8b, 0x5b, 0x76, 0x5b, 0x5b,
+- 0x7b, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa8, 0x5e, 0x22, 0x36, 0x21, 0x3a, 0x99, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x4f, 0x3f, 0xb3, 0x7b, 0x7b, 0x85, 0x80,
+- 0x9f, 0x36, 0x36, 0x36, 0x21, 0xb4, 0x7e, 0x7b,
+- 0x64, 0x64, 0xb5, 0x35, 0x24, 0x21, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x26, 0x31, 0xb6, 0x5b, 0x64, 0xa2, 0xa2, 0xac,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0x66, 0xb7, 0x36, 0x36, 0x36, 0x2c, 0x4b,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x9a, 0x3f, 0xb8, 0x76, 0x76, 0x7a, 0x63,
+- 0xb9, 0xba, 0x86, 0xba, 0xbb, 0x90, 0x5b, 0x64,
+- 0xa2, 0xa2, 0xbc, 0x2d, 0x27, 0x23, 0x21, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x26, 0x2d, 0x91, 0x5b, 0x64, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa8, 0x83, 0xaf, 0x36, 0x36, 0x36, 0x30,
+- 0x44, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x9b, 0x9a, 0x3f, 0xbd, 0x5b, 0x7b, 0xbe, 0x85,
+- 0x7e, 0x90, 0x63, 0x90, 0x85, 0x5b, 0xa2, 0xa3,
+- 0xa3, 0xac, 0x5d, 0xb5, 0x39, 0x26, 0x23, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x26, 0x2d, 0xbf, 0xbe, 0x64, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa8, 0x88, 0x36, 0x36, 0x36, 0x36,
+- 0x2d, 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x9b, 0x45, 0x3f, 0xc0, 0x6d, 0x7b, 0xab, 0xbe,
+- 0x7a, 0x8b, 0x8b, 0x7a, 0x5b, 0x64, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa2, 0xc1, 0x37, 0x35, 0x26, 0x23,
+- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x26, 0x2e, 0xbf, 0x7a, 0x7b, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa8, 0x72, 0x73, 0x36, 0x36, 0x36,
+- 0x24, 0x52, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x46, 0x42, 0xb6, 0x7a, 0x7b, 0x64, 0x7b,
+- 0x76, 0x5b, 0x5b, 0x76, 0x7b, 0xa2, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xac, 0x64, 0xc1, 0x4d, 0x2c, 0x27,
+- 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x25, 0x31, 0xc2, 0x8b, 0x7b, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa8, 0x89, 0x9f, 0x36, 0x36,
+- 0x32, 0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x4b, 0x2f, 0x8f, 0x7a, 0x7b, 0xa2, 0xac,
+- 0xa2, 0x64, 0x64, 0xa2, 0xa2, 0xac, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0x5d, 0xc3, 0x2c,
+- 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x25, 0x31, 0xc2, 0x85, 0x7b, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0x66, 0x57, 0x27, 0x4d,
+- 0x4b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x99, 0x34, 0x9f, 0xb9, 0x7a, 0x7b, 0xa2, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0xc2,
+- 0x32, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
+- 0x26, 0x2d, 0xc2, 0x85, 0x7b, 0xac, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa8, 0x5f, 0x92, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x44,
+- 0x35, 0x36, 0xaf, 0xbb, 0x7a, 0x7b, 0xac, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xac, 0xa2, 0xc0,
+- 0x2b, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23,
+- 0x30, 0x2f, 0xb6, 0x8b, 0x7b, 0xac, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0x66, 0x89, 0x45,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x48, 0x9b, 0x4e, 0x25,
+- 0x36, 0x36, 0x61, 0xb9, 0x6d, 0x64, 0xac, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xac, 0x7b, 0xbe, 0xc3,
+- 0x32, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
+- 0x33, 0xc4, 0x63, 0xbe, 0xa2, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0x72, 0x81, 0xc5,
+- 0x46, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
+- 0x48, 0x48, 0x48, 0x48, 0x3f, 0x2c, 0x36, 0x36,
+- 0x36, 0x36, 0xc6, 0x8f, 0x6d, 0x64, 0xac, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa2, 0xab, 0x8b, 0xb0, 0x2c,
+- 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24,
+- 0x35, 0x96, 0x75, 0xab, 0xa2, 0xac, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xac, 0x7b, 0x81, 0xb9,
+- 0x73, 0x3b, 0x44, 0x9b, 0x48, 0x48, 0x48, 0x9b,
+- 0x99, 0x43, 0x94, 0x2c, 0x21, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x73, 0xb9, 0x7a, 0x7b, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0x64, 0x76, 0x7a, 0x91, 0xb5, 0x31, 0x30,
+- 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24,
+- 0x39, 0x97, 0x75, 0xbe, 0x7b, 0x64, 0xa2, 0xa2,
+- 0xac, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0x7b, 0x7a, 0xc7,
+- 0xc8, 0x36, 0x21, 0x26, 0x2b, 0x39, 0x33, 0x30,
+- 0x23, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x21, 0xc8, 0xbb, 0x8b, 0x7b, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa2, 0x64, 0x64,
+- 0x76, 0x85, 0xbf, 0xb5, 0x34, 0x2b, 0x27, 0x28,
+- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
+- 0x33, 0xc9, 0x63, 0x7e, 0x7a, 0x6d, 0xbe, 0x5b,
+- 0x76, 0x7b, 0x64, 0x64, 0xa2, 0xac, 0xa3, 0xa3,
+- 0xa3, 0xa3, 0xa3, 0xa3, 0xac, 0x76, 0x85, 0xb9,
+- 0x79, 0x22, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x21, 0xca, 0xbb, 0x75, 0x76, 0xa2, 0xa3,
+- 0xa3, 0xa3, 0xac, 0xa2, 0x64, 0x76, 0xbe, 0x8b,
+- 0xb6, 0xb5, 0x2f, 0x35, 0x30, 0x24, 0x22, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23,
+- 0x27, 0x31, 0xcb, 0xc9, 0xbb, 0x74, 0x63, 0x90,
+- 0x7e, 0x75, 0x8b, 0x6d, 0xbe, 0x76, 0x64, 0xa2,
+- 0xac, 0xac, 0xac, 0xac, 0x64, 0x7a, 0x84, 0xcc,
+- 0x79, 0x9f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
+- 0x36, 0x21, 0xc8, 0xcc, 0x63, 0x6d, 0x7b, 0x64,
+- 0xac, 0xa2, 0x64, 0x7b, 0xbe, 0x75, 0x63, 0x96,
+- 0x38, 0x39, 0x2a, 0x24, 0x23, 0x21, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x28, 0x27, 0x35, 0x2d, 0x41, 0xb5, 0xc5, 0x8f,
+- 0xb9, 0xbb, 0xc7, 0x74, 0x84, 0x90, 0x85, 0x6d,
+- 0x5b, 0x7b, 0x7b, 0xab, 0x6d, 0x90, 0xb9, 0xcd,
+- 0xca, 0x22, 0x36, 0x36, 0x28, 0x30, 0x30, 0x30,
+- 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x25, 0x36,
+- 0x36, 0x21, 0xb4, 0x80, 0xc7, 0x7e, 0x6d, 0x76,
+- 0xab, 0x76, 0x6d, 0x85, 0x63, 0xb9, 0xb5, 0x34,
+- 0x33, 0x26, 0x23, 0x21, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x21, 0x23, 0x24, 0x27, 0x2a, 0x35, 0x2e, 0x2f,
+- 0x41, 0xce, 0xcf, 0x6c, 0x80, 0xcc, 0xb9, 0x74,
+- 0x84, 0x90, 0x75, 0x7e, 0x74, 0x8f, 0xcd, 0x79,
+- 0xc6, 0x2b, 0x9d, 0x41, 0x2f, 0x34, 0x2d, 0x2d,
+- 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x34, 0x2f, 0x38,
+- 0x4d, 0x37, 0xd0, 0xd1, 0x8f, 0x74, 0x63, 0x7e,
+- 0x75, 0x7e, 0x63, 0xc7, 0x88, 0xc4, 0x31, 0x2a,
+- 0x24, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x21, 0x22, 0x23, 0x24, 0x26, 0x30,
+- 0x33, 0x39, 0x2e, 0x51, 0x41, 0xb2, 0x6c, 0xd1,
+- 0x80, 0xcc, 0xcc, 0xcc, 0xd2, 0xd1, 0xb7, 0xd3,
+- 0x41, 0x34, 0x35, 0x32, 0x30, 0x27, 0x27, 0x27,
+- 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x30, 0x2a,
+- 0x2b, 0x34, 0xd4, 0xca, 0xd5, 0x8f, 0xbb, 0xc7,
+- 0xc7, 0xbb, 0xcc, 0x6c, 0x41, 0x39, 0x27, 0x28,
+- 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22,
+- 0x28, 0x24, 0x26, 0x2a, 0x33, 0x2c, 0x2f, 0x41,
+- 0xd6, 0xb7, 0x79, 0x79, 0x79, 0xca, 0xd7, 0x51,
+- 0x39, 0x30, 0x24, 0x23, 0x22, 0x22, 0x22, 0x22,
+- 0x22, 0x22, 0x21, 0x22, 0x22, 0x22, 0x22, 0x23,
+- 0x24, 0x2a, 0x31, 0xd8, 0xc8, 0x79, 0xd1, 0x80,
+- 0xd5, 0xba, 0xd9, 0x2f, 0x35, 0x26, 0x23, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x21, 0x22, 0x23, 0x28, 0x25, 0x30, 0x2b,
+- 0x31, 0x2f, 0xd4, 0xd8, 0xd8, 0x2f, 0x2e, 0x33,
+- 0x26, 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x21, 0x28, 0x27, 0x35, 0x34, 0xd8, 0xd8, 0xd8,
+- 0xda, 0xd4, 0x2e, 0x33, 0x25, 0x23, 0x21, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x23, 0x28,
+- 0x26, 0x30, 0x32, 0x2b, 0x33, 0x2a, 0x26, 0x28,
+- 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x21, 0x23, 0x25, 0x30, 0x33, 0x35, 0x35,
+- 0x2b, 0x2a, 0x26, 0x28, 0x22, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
+- 0x21, 0x22, 0x23, 0x28, 0x28, 0x23, 0x22, 0x21,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x21, 0x23, 0x28, 0x24, 0x24,
+- 0x28, 0x23, 0x22, 0x21, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+- 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x23, 0x33, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x23, 0x61, 0x62, 0x2B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x35, 0x61, 0x63, 0x64, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x65, 0x66, 0x66, 0x67, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3B,
++ 0x3B, 0x68, 0x64, 0x69, 0x62, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x22, 0x23, 0x23, 0x55, 0x6A, 0x6B,
++ 0x6C, 0x6D, 0x6E, 0x6F, 0x6F, 0x33, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23,
++ 0x22, 0x23, 0x35, 0x33, 0x3B, 0x70, 0x71, 0x72,
++ 0x73, 0x74, 0x75, 0x76, 0x77, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x23, 0x23, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x23, 0x55,
++ 0x2B, 0x34, 0x34, 0x42, 0x70, 0x71, 0x73, 0x78,
++ 0x78, 0x78, 0x79, 0x7A, 0x7B, 0x34, 0x22, 0x21,
++ 0x55, 0x33, 0x23, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x22, 0x3B, 0x7C, 0x7D, 0x7E, 0x34, 0x35,
++ 0x21, 0x21, 0x21, 0x21, 0x35, 0x3B, 0x4C, 0x3C,
++ 0x42, 0x3F, 0x56, 0x7F, 0x71, 0x74, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x79, 0x80, 0x81, 0x3C, 0x82,
++ 0x83, 0x62, 0x61, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x23, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A,
++ 0x3B, 0x21, 0x55, 0x55, 0x2B, 0x34, 0x39, 0x3F,
++ 0x2A, 0x57, 0x8B, 0x72, 0x74, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x75, 0x8C, 0x6F, 0x63,
++ 0x63, 0x66, 0x61, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x84, 0x85, 0x86, 0x8D, 0x88, 0x8E, 0x8F, 0x5E,
++ 0x3C, 0x34, 0x3B, 0x34, 0x3F, 0x2A, 0x58, 0x57,
++ 0x52, 0x46, 0x6C, 0x73, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x79, 0x7A, 0x6E, 0x69,
++ 0x69, 0x90, 0x34, 0x33, 0x22, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23,
++ 0x91, 0x92, 0x8D, 0x87, 0x8E, 0x93, 0x8A, 0x35,
++ 0x94, 0x95, 0x96, 0x56, 0x32, 0x32, 0x52, 0x5C,
++ 0x4D, 0x82, 0x72, 0x78, 0x78, 0x78, 0x78, 0x79,
++ 0x97, 0x78, 0x78, 0x78, 0x78, 0x75, 0x6D, 0x6F,
++ 0x62, 0x65, 0x34, 0x4C, 0x33, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x2B,
++ 0x91, 0x86, 0x87, 0x88, 0x93, 0x98, 0x60, 0x3F,
++ 0x99, 0x9A, 0x9A, 0x9B, 0x9C, 0x57, 0x5C, 0x36,
++ 0x9D, 0x9E, 0x6D, 0x78, 0x78, 0x78, 0x97, 0x6E,
++ 0x9F, 0x78, 0x78, 0x78, 0x78, 0x79, 0x80, 0xA0,
++ 0x61, 0x51, 0x51, 0x3C, 0x4C, 0x55, 0x35, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x3B, 0x22,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x4C,
++ 0xA1, 0x8D, 0x88, 0x8E, 0xA2, 0xA3, 0x94, 0x42,
++ 0x51, 0xA4, 0x9A, 0x9A, 0x9A, 0xA5, 0x9C, 0x2A,
++ 0xA6, 0x74, 0x8C, 0x75, 0x97, 0xA7, 0x76, 0x75,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x75, 0x6E,
++ 0x46, 0x52, 0x56, 0x3F, 0x42, 0x34, 0x33, 0x35,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x22, 0x21, 0x21, 0x22,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x52, 0x3A,
++ 0x5A, 0x53, 0x53, 0x29, 0x43, 0x50, 0x53, 0x5A,
++ 0x5A, 0x29, 0x5A, 0x43, 0x53, 0x5D, 0x44, 0x2A,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x55,
++ 0x7D, 0x87, 0x8E, 0x93, 0xA8, 0xA9, 0xAA, 0x2A,
++ 0x57, 0x94, 0xA4, 0x9B, 0xAB, 0xAC, 0x9A, 0x9B,
++ 0xAD, 0x76, 0x79, 0x78, 0x75, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x75, 0x6D,
++ 0x46, 0x5C, 0x57, 0x56, 0x51, 0x42, 0x4C, 0x55,
++ 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x23, 0x24, 0x25, 0x26, 0x26, 0x27, 0x28, 0x27,
++ 0x29, 0x2A, 0x2B, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x38, 0x30,
++ 0x59, 0x3D, 0x3D, 0x3D, 0x27, 0x27, 0x26, 0x5D,
++ 0x27, 0x27, 0x54, 0x37, 0x2E, 0x4A, 0x36, 0x2B,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0xAE, 0x88, 0xAF, 0xB0, 0xAA, 0x2A, 0x39, 0x34,
++ 0x4C, 0x5C, 0x58, 0xB1, 0xB2, 0xB3, 0xAB, 0xA5,
++ 0x9A, 0xB4, 0xB5, 0x8C, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x79, 0x80,
++ 0xB6, 0x38, 0x5C, 0x57, 0x56, 0x3F, 0x42, 0x3B,
++ 0x55, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23,
++ 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x32,
++ 0x31, 0x2C, 0x26, 0x2C, 0x33, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x34,
++ 0x32, 0x2B, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x33,
++ 0x33, 0x55, 0x55, 0x55, 0x23, 0x23, 0x35, 0x23,
++ 0x23, 0x35, 0x2B, 0x4E, 0x4F, 0x2A, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x55, 0x38, 0x25,
++ 0x2C, 0x52, 0x34, 0x22, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x22, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x55, 0x8A, 0x8F, 0x39, 0x34, 0x3C, 0x57, 0x32,
++ 0x46, 0x42, 0x52, 0x4A, 0x51, 0xAA, 0xB7, 0xB3,
++ 0xAB, 0xAC, 0xAC, 0xB8, 0xB9, 0x79, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x79, 0x7A,
++ 0xBA, 0x70, 0x7B, 0xBB, 0x82, 0x56, 0x3F, 0x34,
++ 0x4C, 0x55, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35, 0x36,
++ 0x2D, 0x37, 0x38, 0x2A, 0x2B, 0x21, 0x21, 0x21,
++ 0x21, 0x22, 0x39, 0x3A, 0x2C, 0x3B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x33, 0x3C, 0x22, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x24, 0x3D,
++ 0x3E, 0x25, 0x3C, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x33, 0x29, 0x26, 0x2A, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x54, 0x3E, 0x28,
++ 0x28, 0x59, 0x59, 0x48, 0x51, 0x3F, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x2B, 0x56, 0x4D, 0x29, 0x5B, 0x34,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x55, 0x60, 0x3F, 0x42, 0x51, 0x32, 0x52,
++ 0x40, 0x38, 0x40, 0x46, 0x42, 0xBC, 0xBD, 0xBE,
++ 0xBF, 0x9B, 0xAB, 0x9B, 0xC0, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x75,
++ 0xA7, 0x63, 0x63, 0x66, 0x6F, 0x58, 0x56, 0x39,
++ 0x34, 0x2B, 0x23, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x24, 0x2F,
++ 0x3D, 0x3F, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x40, 0x41, 0x3B, 0x21,
++ 0x21, 0x22, 0x42, 0x38, 0x43, 0x44, 0x3A, 0x45,
++ 0x34, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x46, 0x30, 0x47,
++ 0x2A, 0x48, 0x48, 0x21, 0x21, 0x21, 0x21, 0x22,
++ 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x22, 0x34, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x22, 0x4D, 0x44, 0x2A, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x50, 0x4A, 0x57, 0x35,
++ 0x35, 0x2B, 0x56, 0x27, 0x4B, 0x5D, 0x35, 0x21,
++ 0x21, 0x21, 0x21, 0x3B, 0x52, 0x23, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x2B,
++ 0x55, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3B, 0x38,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x33,
++ 0x3C, 0x42, 0x21, 0x33, 0x24, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x33,
++ 0x2B, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x33, 0x38, 0x59, 0x37, 0x27, 0x27, 0x4A, 0x47,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x23, 0x4C, 0x4C, 0x2A, 0x56, 0x46, 0x31,
++ 0x4D, 0x36, 0x50, 0x5A, 0x35, 0xC1, 0xC1, 0xC2,
++ 0xC3, 0xB7, 0xB3, 0xBE, 0x76, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x75,
++ 0x6D, 0x62, 0x69, 0x6F, 0x58, 0x46, 0x32, 0x2A,
++ 0x39, 0x34, 0x35, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x3B, 0x44, 0x49,
++ 0x31, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x23, 0x29, 0x48, 0x22,
++ 0x42, 0x3A, 0x4A, 0x49, 0x4B, 0x2E, 0x4B, 0x3E,
++ 0x4A, 0x2C, 0x34, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x30, 0x40, 0x22,
++ 0x21, 0x32, 0x3A, 0x22, 0x21, 0x21, 0x21, 0x39,
++ 0x36, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22,
++ 0x31, 0x4F, 0x2A, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x31, 0x59, 0x2A, 0x22, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x55, 0x27, 0x24, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x4C, 0x44, 0x27, 0x35, 0x21,
++ 0x21, 0x21, 0x21, 0x2A, 0x26, 0x2B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3A,
++ 0x40, 0x21, 0x21, 0x21, 0x21, 0x21, 0x51, 0x49,
++ 0x35, 0x21, 0x21, 0x21, 0x21, 0x22, 0x58, 0x25,
++ 0x5A, 0x57, 0x21, 0x4C, 0x3D, 0x34, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x38,
++ 0x47, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x3A, 0x4B, 0x53, 0x56, 0x55, 0x33, 0x42, 0x56,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x55, 0x4C, 0x42, 0x2A, 0x57, 0x5C, 0x38,
++ 0x36, 0x47, 0x5A, 0xB6, 0x77, 0xC4, 0xC1, 0xC1,
++ 0xC4, 0xC5, 0xB7, 0xB9, 0x79, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x75,
++ 0x97, 0xC6, 0x68, 0x57, 0x4D, 0x38, 0x46, 0x32,
++ 0x51, 0x42, 0x2B, 0x35, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x4D, 0x2D, 0x38,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x4C, 0x4E, 0x3C,
++ 0x47, 0x4F, 0x50, 0x51, 0x3F, 0x44, 0x42, 0x34,
++ 0x52, 0x53, 0x28, 0x2A, 0x22, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x48, 0x54, 0x33, 0x21,
++ 0x23, 0x3A, 0x3A, 0x22, 0x21, 0x21, 0x21, 0x2A,
++ 0x26, 0x33, 0x21, 0x21, 0x21, 0x21, 0x23, 0x45,
++ 0x37, 0x3D, 0x41, 0x22, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x31,
++ 0x59, 0x3F, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3C, 0x28, 0x33, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x23, 0x27, 0x5B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3C, 0x54, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x4C, 0x4B,
++ 0x46, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3B, 0x49,
++ 0x2B, 0x21, 0x21, 0x21, 0x23, 0x40, 0x43, 0x32,
++ 0x35, 0x21, 0x21, 0x33, 0x28, 0x4C, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x4F,
++ 0x5B, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x50,
++ 0x44, 0x39, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x23, 0x3B, 0x34, 0x3F, 0x58, 0x46, 0x40, 0x36,
++ 0x50, 0x41, 0x4D, 0xC7, 0x65, 0xC2, 0xC1, 0xC1,
++ 0xC8, 0xBF, 0xB1, 0x97, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x79,
++ 0x80, 0xC9, 0x36, 0x50, 0x36, 0x38, 0x31, 0x32,
++ 0x56, 0x39, 0x34, 0x33, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x2B, 0x3D, 0x28, 0x35,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x40, 0x4D,
++ 0x55, 0x2B, 0x21, 0x21, 0x2B, 0x28, 0x3B, 0x21,
++ 0x21, 0x22, 0x52, 0x27, 0x56, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x23, 0x2A, 0x30, 0x3F, 0x21, 0x22,
++ 0x57, 0x44, 0x58, 0x21, 0x21, 0x21, 0x21, 0x56,
++ 0x37, 0x2B, 0x21, 0x21, 0x21, 0x21, 0x56, 0x3E,
++ 0x36, 0x2A, 0x59, 0x23, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x33, 0x50, 0x3D,
++ 0x42, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x40, 0x5A, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x56, 0x49, 0x24, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x42, 0x54, 0x33, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x4D, 0x59,
++ 0x55, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35, 0x4A,
++ 0x51, 0x21, 0x21, 0x33, 0x47, 0x47, 0x33, 0x21,
++ 0x21, 0x21, 0x21, 0x55, 0x27, 0x3B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x32, 0x4B,
++ 0x4C, 0x21, 0x21, 0x21, 0x21, 0x21, 0x34, 0x44,
++ 0x3F, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x33, 0x4C, 0x3C, 0x51, 0x57, 0x5C, 0x38, 0x38,
++ 0x9D, 0xCA, 0x61, 0xCB, 0xCC, 0xCD, 0xC4, 0xC8,
++ 0xA4, 0x9C, 0x76, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x79,
++ 0x7A, 0x7F, 0x41, 0x29, 0x47, 0x38, 0x40, 0x57,
++ 0x32, 0x51, 0x42, 0x2B, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x57, 0x49, 0x32, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x57, 0x27,
++ 0x35, 0x21, 0x21, 0x21, 0x2B, 0x59, 0x2A, 0x21,
++ 0x21, 0x21, 0x21, 0x56, 0x54, 0x2B, 0x21, 0x21,
++ 0x21, 0x21, 0x4C, 0x2E, 0x5A, 0x23, 0x55, 0x5B,
++ 0x49, 0x3A, 0x22, 0x21, 0x21, 0x21, 0x21, 0x32,
++ 0x3E, 0x3B, 0x21, 0x21, 0x21, 0x35, 0x54, 0x53,
++ 0x23, 0x55, 0x4F, 0x55, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x25, 0x44, 0x42,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x23, 0x41, 0x46, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x23, 0x53, 0x2F, 0x2A, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x32, 0x28, 0x33, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x35, 0x59, 0x5B,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x54,
++ 0x57, 0x21, 0x35, 0x53, 0x47, 0x23, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3C, 0x44, 0x3B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x41, 0x43,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3F, 0x29,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x55, 0x4C, 0x3F, 0x2A, 0x46, 0x31, 0x36, 0x46,
++ 0x71, 0x97, 0xCE, 0xCB, 0xCF, 0xA4, 0x9C, 0xA4,
++ 0xAD, 0x76, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x80, 0x8C,
++ 0x7A, 0xA7, 0x36, 0x50, 0x3A, 0x36, 0x38, 0x52,
++ 0x32, 0x2A, 0x3F, 0x2B, 0x22, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x22, 0x5A, 0x5A, 0x23, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x52, 0x28,
++ 0x35, 0x21, 0x21, 0x21, 0x55, 0x30, 0x56, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x5B, 0x45, 0x21, 0x21,
++ 0x21, 0x21, 0x2B, 0x2E, 0x25, 0x47, 0x3D, 0x2D,
++ 0x25, 0x4C, 0x21, 0x21, 0x21, 0x21, 0x21, 0x39,
++ 0x44, 0x55, 0x21, 0x21, 0x21, 0x46, 0x59, 0x3B,
++ 0x21, 0x23, 0x30, 0x34, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x2A, 0x28, 0x4E, 0x42, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x3C, 0x3D, 0x42, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x51, 0x4B, 0x49, 0x39, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x5C, 0x25, 0x23, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x38, 0x4B, 0x3B,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x54,
++ 0x56, 0x21, 0x5B, 0x3A, 0x35, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x51, 0x59, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x32, 0x2D, 0x42,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x4C, 0x3A,
++ 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x2B, 0x3C, 0x39, 0x56, 0x46, 0x40, 0x36, 0xB6,
++ 0x73, 0x82, 0xCB, 0xD0, 0x75, 0xD1, 0xD2, 0xD1,
++ 0x8C, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x74, 0xCE,
++ 0x9E, 0x6E, 0xD3, 0xC6, 0x6F, 0x81, 0x38, 0x5C,
++ 0x52, 0x58, 0x39, 0x4C, 0x35, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x4C, 0x4A, 0x40, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x36, 0x3A,
++ 0x21, 0x21, 0x21, 0x21, 0x55, 0x27, 0x3F, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x25, 0x3B, 0x21,
++ 0x21, 0x21, 0x42, 0x2E, 0x2D, 0x2D, 0x26, 0x46,
++ 0x35, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x51,
++ 0x44, 0x55, 0x21, 0x21, 0x35, 0x25, 0x40, 0x21,
++ 0x21, 0x22, 0x4E, 0x58, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x39, 0x59, 0x38, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x56, 0x59, 0x23, 0x21, 0x21, 0x21,
++ 0x21, 0x4C, 0x54, 0x5B, 0x59, 0x4C, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x57, 0x3A, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x4D, 0x49, 0x26, 0x23,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x53,
++ 0x32, 0x51, 0x27, 0x42, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x42, 0x25, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x24, 0x37, 0x3E, 0x35,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x48,
++ 0x48, 0x33, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x33,
++ 0x3B, 0x39, 0x3F, 0x32, 0x5C, 0x38, 0x47, 0xD4,
++ 0x7A, 0xC7, 0xCB, 0xD0, 0x74, 0x80, 0x8C, 0x9F,
++ 0x80, 0x79, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x73, 0x72, 0xD5, 0xCA, 0x61, 0xD3, 0x40, 0x5C,
++ 0x46, 0x58, 0x51, 0x42, 0x33, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x39, 0x4B, 0x58, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x2A, 0x3D, 0x51,
++ 0x21, 0x21, 0x21, 0x21, 0x55, 0x28, 0x42, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x47, 0x52, 0x21,
++ 0x21, 0x21, 0x58, 0x59, 0x42, 0x3C, 0x35, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x57,
++ 0x4E, 0x23, 0x21, 0x22, 0x4D, 0x54, 0x35, 0x21,
++ 0x21, 0x21, 0x5A, 0x46, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x22, 0x56, 0x59, 0x36, 0x35, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x36, 0x5B, 0x21, 0x21, 0x21, 0x21,
++ 0x23, 0x53, 0x48, 0x3F, 0x27, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x24, 0x47, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x22, 0x40, 0x27, 0x29, 0x29, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x47,
++ 0x40, 0x41, 0x5C, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x39, 0x41, 0x23, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x32, 0x26, 0x47, 0x28, 0x22,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x2B,
++ 0x53, 0x28, 0x36, 0x42, 0x23, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x4C, 0x39, 0x58, 0x32, 0x31, 0x38, 0x47, 0xD4,
++ 0xCF, 0xD0, 0x6C, 0x9E, 0xD6, 0x6B, 0xD7, 0xD8,
++ 0xD7, 0x6B, 0xCF, 0x7B, 0x80, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x74, 0x72, 0xD0, 0xA6, 0x70, 0x51,
++ 0x46, 0x56, 0x51, 0x42, 0x55, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x5C, 0x27, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x32, 0x37, 0x54, 0x33,
++ 0x21, 0x21, 0x21, 0x21, 0x2B, 0x44, 0x2A, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x52, 0x2C, 0x21,
++ 0x21, 0x21, 0x47, 0x36, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x52,
++ 0x54, 0x23, 0x21, 0x24, 0x4F, 0x46, 0x21, 0x21,
++ 0x21, 0x21, 0x38, 0x2C, 0x22, 0x21, 0x21, 0x21,
++ 0x21, 0x42, 0x55, 0x21, 0x21, 0x21, 0x21, 0x33,
++ 0x45, 0x54, 0x56, 0x22, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x22, 0x53, 0x24, 0x21, 0x21, 0x21, 0x21,
++ 0x46, 0x5D, 0x4C, 0x52, 0x4E, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x31, 0x48, 0x22, 0x21, 0x21,
++ 0x21, 0x22, 0x46, 0x54, 0x3B, 0x45, 0x29, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x47,
++ 0x28, 0x28, 0x55, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x51, 0x41, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x56, 0x54, 0x39, 0x56, 0x28, 0x22,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x23, 0x34, 0x50, 0x30, 0x4E, 0x40, 0x34, 0x22,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x4C, 0x39, 0x58, 0x52, 0x5C, 0x38, 0x47, 0x9D,
++ 0xC9, 0xD9, 0xDA, 0xDB, 0xDC, 0xDC, 0xDC, 0xDC,
++ 0xDC, 0xDC, 0xDC, 0xDD, 0x6B, 0x7B, 0x75, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x74, 0x71, 0xD0, 0x3F,
++ 0x52, 0x57, 0x2A, 0x42, 0x2B, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x47, 0x3A, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x35, 0x45, 0x4A, 0x2C, 0x3B, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x2B, 0x30, 0x56, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x58, 0x29, 0x21,
++ 0x21, 0x21, 0x53, 0x3F, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x31,
++ 0x43, 0x22, 0x3B, 0x28, 0x48, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x56, 0x25, 0x35, 0x21, 0x21, 0x21,
++ 0x39, 0x54, 0x34, 0x21, 0x21, 0x21, 0x35, 0x3A,
++ 0x30, 0x57, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x33, 0x39, 0x21, 0x21,
++ 0x21, 0x35, 0x25, 0x3F, 0x21, 0x21, 0x21, 0x56,
++ 0x30, 0x58, 0x21, 0x24, 0x43, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x4D, 0x29, 0x22, 0x21, 0x21,
++ 0x22, 0x32, 0x26, 0x42, 0x21, 0x46, 0x2C, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x48,
++ 0x2E, 0x36, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x56, 0x28, 0x35, 0x21, 0x21,
++ 0x21, 0x3F, 0x27, 0x32, 0x21, 0x51, 0x25, 0x22,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x22, 0x39, 0x38, 0x25, 0x54, 0x50,
++ 0x58, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x33,
++ 0x4C, 0x3F, 0x56, 0x52, 0x31, 0x4D, 0x47, 0x39,
++ 0xD8, 0xDC, 0xDC, 0xDC, 0xDE, 0xDF, 0xDF, 0xDF,
++ 0xDF, 0xDF, 0xDE, 0xDE, 0xDC, 0xDD, 0xD6, 0x97,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x75, 0x97, 0x56,
++ 0x46, 0x57, 0x2A, 0x42, 0x2B, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x38, 0x29, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x35, 0x5B, 0x3D, 0x40, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x2B, 0x59, 0x3F, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x40, 0x5A, 0x21,
++ 0x21, 0x22, 0x5D, 0x34, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x5B,
++ 0x2C, 0x33, 0x29, 0x28, 0x3B, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x34, 0x59, 0x3C, 0x21, 0x21, 0x2B,
++ 0x53, 0x36, 0x22, 0x21, 0x21, 0x34, 0x5A, 0x28,
++ 0x3F, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x40, 0x41, 0x23, 0x21,
++ 0x21, 0x3B, 0x28, 0x2B, 0x21, 0x21, 0x2A, 0x44,
++ 0x38, 0x22, 0x21, 0x24, 0x50, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x50, 0x25, 0x23, 0x21, 0x23,
++ 0x45, 0x5D, 0x52, 0x21, 0x21, 0x40, 0x50, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x50,
++ 0x2D, 0x39, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x46, 0x30, 0x33, 0x21, 0x22,
++ 0x24, 0x4E, 0x45, 0x22, 0x21, 0x58, 0x25, 0x22,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x33, 0x3C, 0x48,
++ 0x27, 0x39, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x34, 0x3F, 0x58, 0x57, 0x31, 0x4D, 0x47, 0x56,
++ 0xDB, 0xDC, 0xDE, 0xE0, 0xE1, 0xE2, 0xE2, 0xE2,
++ 0xE2, 0xE2, 0xE1, 0xE3, 0xE4, 0xDE, 0xDC, 0x6B,
++ 0x8C, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x80, 0xA7, 0x38,
++ 0x46, 0x56, 0x2A, 0x39, 0x3B, 0x23, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x32, 0x44, 0x34, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x3F,
++ 0x4D, 0x41, 0x29, 0x42, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x2B, 0x44, 0x46, 0x34,
++ 0x2B, 0x55, 0x55, 0x2B, 0x56, 0x59, 0x36, 0x21,
++ 0x21, 0x22, 0x59, 0x2B, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x55, 0x5C, 0x21, 0x21, 0x21, 0x40,
++ 0x50, 0x4D, 0x4F, 0x32, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x55, 0x44, 0x31, 0x22, 0x3B, 0x5A,
++ 0x41, 0x55, 0x21, 0x35, 0x57, 0x4A, 0x2E, 0x48,
++ 0x57, 0x32, 0x3F, 0x55, 0x35, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x25, 0x47, 0x22, 0x21,
++ 0x21, 0x4C, 0x28, 0x35, 0x21, 0x34, 0x30, 0x3A,
++ 0x23, 0x21, 0x21, 0x58, 0x3A, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x4D, 0x4E, 0x35, 0x33, 0x48,
++ 0x44, 0x56, 0x21, 0x21, 0x21, 0x58, 0x41, 0x23,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x29,
++ 0x4A, 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x32, 0x44, 0x2B, 0x23, 0x45,
++ 0x3D, 0x31, 0x22, 0x21, 0x21, 0x4C, 0x27, 0x35,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x53, 0x53, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x34, 0x3F, 0x58, 0x57, 0x40, 0x38, 0x47, 0xD4,
++ 0xDC, 0xDE, 0xE0, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE2, 0xE1, 0xDF, 0xDC,
++ 0xE6, 0x8C, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x80, 0x2A, 0x40,
++ 0x46, 0x58, 0x2A, 0x42, 0x34, 0x34, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x2B, 0x54, 0x5A, 0x34, 0x23,
++ 0x35, 0x23, 0x35, 0x33, 0x2B, 0x24, 0x54, 0x4B,
++ 0x59, 0x5C, 0x23, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x4B, 0x44, 0x59,
++ 0x27, 0x26, 0x26, 0x4A, 0x3E, 0x41, 0x55, 0x21,
++ 0x21, 0x22, 0x41, 0x39, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x34, 0x53, 0x4D, 0x21, 0x21, 0x21, 0x5C,
++ 0x4B, 0x4F, 0x40, 0x22, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x48, 0x30, 0x50, 0x26, 0x54,
++ 0x34, 0x21, 0x55, 0x4E, 0x2D, 0x2F, 0x4F, 0x37,
++ 0x3E, 0x4B, 0x4B, 0x30, 0x27, 0x53, 0x2C, 0x57,
++ 0x42, 0x4C, 0x55, 0x22, 0x22, 0x22, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x39, 0x4A, 0x3F, 0x21, 0x21,
++ 0x21, 0x55, 0x53, 0x55, 0x2A, 0x26, 0x54, 0x33,
++ 0x21, 0x21, 0x21, 0x51, 0x54, 0x3B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x51, 0x3D, 0x46, 0x5A, 0x4F,
++ 0x52, 0x21, 0x21, 0x21, 0x21, 0x22, 0x27, 0x31,
++ 0x33, 0x23, 0x42, 0x4C, 0x21, 0x21, 0x21, 0x5B,
++ 0x54, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3B, 0x44, 0x45, 0x48, 0x4B,
++ 0x38, 0x22, 0x21, 0x21, 0x21, 0x21, 0x53, 0x48,
++ 0x33, 0x23, 0x34, 0x3C, 0x22, 0x57, 0x4D, 0x33,
++ 0x21, 0x21, 0x21, 0x21, 0x22, 0x23, 0x34, 0x40,
++ 0x44, 0x31, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x3B, 0x42, 0x2A, 0x57, 0x31, 0x38, 0x5C, 0xD8,
++ 0xDC, 0xE4, 0xE2, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE2, 0xE0,
++ 0xDE, 0xCA, 0x9F, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x80, 0x76, 0x57, 0x5C,
++ 0x31, 0x6E, 0x34, 0x3C, 0xC9, 0x3B, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x33, 0x5B, 0x30, 0x25,
++ 0x5D, 0x5A, 0x53, 0x27, 0x26, 0x59, 0x36, 0x56,
++ 0x55, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x3D, 0x2A, 0x55,
++ 0x42, 0x51, 0x56, 0x24, 0x2A, 0x35, 0x21, 0x21,
++ 0x21, 0x21, 0x45, 0x53, 0x3B, 0x22, 0x22, 0x35,
++ 0x46, 0x59, 0x54, 0x55, 0x21, 0x21, 0x21, 0x31,
++ 0x2D, 0x47, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x33, 0x50, 0x5D, 0x45, 0x55,
++ 0x21, 0x21, 0x34, 0x4F, 0x29, 0x58, 0x33, 0x4C,
++ 0x39, 0x3C, 0x2A, 0x40, 0x48, 0x54, 0x3D, 0x3D,
++ 0x37, 0x4A, 0x59, 0x29, 0x5B, 0x36, 0x52, 0x2A,
++ 0x42, 0x3C, 0x32, 0x30, 0x41, 0x35, 0x21, 0x21,
++ 0x21, 0x33, 0x41, 0x26, 0x4B, 0x5A, 0x35, 0x21,
++ 0x21, 0x21, 0x21, 0x3C, 0x3E, 0x41, 0x23, 0x21,
++ 0x21, 0x21, 0x21, 0x23, 0x41, 0x49, 0x30, 0x32,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x52, 0x4F,
++ 0x5D, 0x41, 0x27, 0x58, 0x21, 0x21, 0x21, 0x5B,
++ 0x41, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x47, 0x49, 0x4F, 0x5C,
++ 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x39, 0x4A,
++ 0x28, 0x43, 0x27, 0x5C, 0x35, 0x25, 0x49, 0x5B,
++ 0x58, 0x52, 0x5C, 0x38, 0x48, 0x41, 0x4A, 0x4B,
++ 0x50, 0x33, 0x21, 0x21, 0x21, 0x21, 0x21, 0x35,
++ 0x3B, 0x3C, 0x2A, 0x32, 0x5C, 0x40, 0x32, 0xDD,
++ 0xDC, 0xE3, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE1, 0xE0, 0xBB, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x80, 0xE7, 0x58, 0x52,
++ 0x5C, 0x67, 0xE7, 0x6C, 0xE8, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x23, 0x39, 0x5C,
++ 0x29, 0x5A, 0x4D, 0x5C, 0x2A, 0x2B, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x44, 0x42, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x33, 0x27, 0x30, 0x5A, 0x2C, 0x25,
++ 0x4B, 0x50, 0x3B, 0x21, 0x21, 0x21, 0x21, 0x33,
++ 0x2C, 0x3B, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x4C, 0x22, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x55, 0x2B,
++ 0x39, 0x32, 0x4D, 0x29, 0x26, 0x3D, 0x2D, 0x2D,
++ 0x4B, 0x4B, 0x2F, 0x30, 0x42, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x3B, 0x29, 0x2C, 0x55, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x23, 0x50, 0x4D, 0x22, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x2B, 0x32, 0x3B, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x51,
++ 0x48, 0x45, 0x34, 0x21, 0x21, 0x21, 0x21, 0x38,
++ 0x44, 0x35, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x33, 0x32, 0x34, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x3C,
++ 0x5B, 0x4D, 0x42, 0x21, 0x21, 0x34, 0x4D, 0x47,
++ 0x5A, 0x5D, 0x27, 0x4E, 0x25, 0x3A, 0x5C, 0x42,
++ 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23,
++ 0x2B, 0x34, 0x51, 0x56, 0x46, 0x40, 0xE9, 0xDA,
++ 0xDD, 0xE1, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE2, 0xEA, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x76, 0xD3, 0x67, 0x39,
++ 0x3C, 0xCF, 0xD5, 0x9F, 0x3B, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x28, 0x2B, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3C, 0x53, 0x44, 0x3D, 0x43,
++ 0x57, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x35, 0x55, 0x3F, 0x2A,
++ 0x57, 0x24, 0x3F, 0x3B, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x22, 0x22, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x55,
++ 0x3C, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x22, 0x22, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x55, 0x4C, 0x3F, 0x58, 0x46, 0x31, 0x8B, 0xAD,
++ 0xCC, 0xE2, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xEA, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x97, 0x35, 0x6E, 0xC6, 0x82,
++ 0xA6, 0x73, 0x75, 0xBA, 0x2B, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x34, 0x44, 0x3B, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x23, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x33, 0x34, 0xEB, 0x34, 0x57, 0x5C, 0x4C, 0xA4,
++ 0xEC, 0x64, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0x83, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x80, 0xED, 0xCF, 0xCE, 0x78, 0x78,
++ 0x78, 0x7A, 0x6D, 0x34, 0x22, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x55, 0x25, 0x55, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x23, 0x34, 0xEE, 0xEF, 0x5F, 0x96, 0x23, 0xB3,
++ 0xBF, 0xB5, 0xF0, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xBB, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x9F, 0x78, 0x78, 0x78, 0x78,
++ 0x80, 0x9F, 0x65, 0x33, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x28, 0x55, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x22, 0x4C, 0xF1, 0xA5, 0xAC, 0xAB, 0x60, 0xB3,
++ 0xB3, 0xF2, 0xEA, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xF3, 0x6D, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x80, 0x61, 0x34, 0x23, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x3B, 0x25, 0x22, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x2B, 0x5E,
++ 0x4C, 0x3B, 0xF4, 0xA5, 0x9B, 0x9B, 0xB4, 0xEF,
++ 0xEF, 0xBF, 0xAD, 0xF5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0x67, 0x75, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x80,
++ 0xA7, 0x3F, 0x55, 0x22, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x4E, 0x23, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x2B, 0x5F,
++ 0x9B, 0xD2, 0x3C, 0xB7, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xB3, 0xB8, 0xEA, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0xF0, 0xBB, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x80, 0x82,
++ 0x34, 0x3B, 0x33, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x5D, 0x23, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x60,
++ 0xAB, 0xA5, 0xB8, 0xB1, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xF6, 0xB7, 0xB5, 0xF0, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5,
++ 0x67, 0x80, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x78, 0x80, 0x9F, 0xBA, 0x42,
++ 0x4C, 0x2B, 0x22, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x3A, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x55,
++ 0xF2, 0x9B, 0x9B, 0xB4, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xEF, 0xB4, 0x5F, 0x63, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xF5,
++ 0x76, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x78, 0x78, 0x80, 0x6D, 0x65, 0x3C, 0x34,
++ 0x3B, 0x35, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x2A, 0x29, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23,
++ 0xF7, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xEF, 0xB3, 0xB8, 0xEA, 0xE5, 0xE5, 0xE5,
++ 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xE5, 0xF8, 0x68,
++ 0x7A, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x78, 0x80, 0x97, 0x82, 0x39, 0x39, 0x34, 0x3B,
++ 0x33, 0x23, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x2A, 0x29, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x3B, 0xB8, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xEF, 0xF6, 0xB2, 0xF9, 0xFA, 0xFA, 0xFA,
++ 0xFA, 0xF8, 0xF8, 0xF8, 0xF0, 0xF0, 0x6F, 0x97,
++ 0x80, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
++ 0x8C, 0x61, 0x39, 0x2A, 0x3F, 0x3C, 0x4C, 0x55,
++ 0x33, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x4C, 0x31, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x22, 0xFB, 0xF6, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xEF, 0xB3, 0xB2, 0xF9, 0xF3, 0xF3, 0xF3,
++ 0xF3, 0xF3, 0xF3, 0xF3, 0xF3, 0x90, 0x6D, 0x97,
++ 0x8C, 0x6D, 0x76, 0xBB, 0xC6, 0xB9, 0xC0, 0xFC,
++ 0xAD, 0xFB, 0x2A, 0x58, 0x42, 0x4C, 0x55, 0x33,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x33, 0xD2, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF,
++ 0xEF, 0xEF, 0xB4, 0xB8, 0xEB, 0xE8, 0x7F, 0xD6,
++ 0xD6, 0xD6, 0xD6, 0x9D, 0x9D, 0x52, 0xEB, 0x5F,
++ 0x5F, 0x5F, 0xF2, 0xA4, 0xBF, 0xBF, 0xB4, 0xBF,
++ 0xEE, 0x56, 0x2A, 0x42, 0x4C, 0x2B, 0x33, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x4C, 0xBE, 0xF6, 0xEF, 0xEF, 0xEF,
++ 0xF6, 0xB4, 0xB2, 0xF1, 0x3C, 0x56, 0x46, 0x5C,
++ 0x31, 0x38, 0x40, 0x40, 0x4D, 0x4D, 0xB8, 0xAC,
++ 0xBF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xB4,
++ 0xB1, 0x39, 0x39, 0x3B, 0x2B, 0x23, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x3B, 0xAD, 0xA4, 0xBF, 0xBF,
++ 0xB7, 0xB2, 0xEE, 0x5E, 0x39, 0x51, 0x2A, 0x32,
++ 0x52, 0x46, 0x5C, 0x31, 0x31, 0x2A, 0xA5, 0xEF,
++ 0xFD, 0xB4, 0xEF, 0xF6, 0xF6, 0xEF, 0xF6, 0xB2,
++ 0x3F, 0x34, 0x2B, 0x55, 0x23, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x33, 0xEB, 0xF7, 0xAA,
++ 0xAA, 0xF7, 0xEB, 0x55, 0x3B, 0x3C, 0x39, 0x51,
++ 0x2A, 0x56, 0x32, 0x57, 0x57, 0x2A, 0x96, 0x3C,
++ 0x2A, 0xEE, 0xEF, 0x5F, 0xD2, 0xEF, 0xB4, 0xAA,
++ 0x42, 0x55, 0x35, 0x22, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x3B,
++ 0x3B, 0x35, 0x21, 0x23, 0x33, 0x3B, 0x4C, 0x3C,
++ 0x39, 0x3F, 0x51, 0x2A, 0x51, 0x51, 0x58, 0x32,
++ 0x56, 0xF4, 0xB1, 0x42, 0x3C, 0xF2, 0x9C, 0x3F,
++ 0x33, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x33, 0x55,
++ 0x3B, 0x4C, 0x4C, 0x3C, 0x42, 0x42, 0x3C, 0x34,
++ 0x34, 0x3F, 0x4C, 0x3B, 0x4C, 0x3B, 0x3C, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x35, 0x33, 0x55, 0x33, 0x33, 0x33, 0x55, 0x2B,
++ 0x2B, 0x35, 0x35, 0x35, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
++ 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
++ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20
+ };
+
+ #endif /* !__HAVE_ARCH_LINUX_LOGO */
+@@ -994,7 +1760,7 @@
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
++ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+ };
+
+ #endif /* !__HAVE_ARCH_LINUX_LOGOBW */
+@@ -1401,7 +2167,7 @@
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+
+ #endif /* !__HAVE_ARCH_LINUX_LOGO16 */
diff --git a/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/mkdep.patch b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/mkdep.patch
new file mode 100644
index 0000000000..4daeaa11be
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/mkdep.patch
@@ -0,0 +1,16 @@
+
+#
+# Made by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- linux/Makefile~mkdep 2003-12-19 09:36:51.000000000 -0800
++++ linux/Makefile 2003-12-19 09:57:44.000000000 -0800
+@@ -458,7 +458,7 @@
+
+ dep-files: scripts/mkdep archdep include/linux/version.h
+ scripts/mkdep -- init/*.c > .depend
+- scripts/mkdep -- `find $(FINDHPATH) -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` > .hdepend
++ $(foreach, dir, $(FINDHPATH), scripts/mkdep -- `find $(dir) -name SCCS -prune -o -follow -name \*.h ! -name modversions.h -print` >> .hdepend)
+ $(MAKE) $(patsubst %,_sfdep_%,$(SUBDIRS)) _FASTDEP_ALL_SUB_DIRS="$(SUBDIRS)"
+ ifdef CONFIG_MODVERSIONS
+ $(MAKE) update-modverfile
diff --git a/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/module_licence.patch b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/module_licence.patch
new file mode 100644
index 0000000000..fc20f0d281
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/module_licence.patch
@@ -0,0 +1,81 @@
+--- linux/drivers/usb/device/bi/sa1100.c.orig 2003-05-13 11:18:44.000000000 +0200
++++ linux/drivers/usb/device/bi/sa1100.c 2004-08-01 13:49:10.000000000 +0200
+@@ -46,6 +46,7 @@
+ #include "../usbd-build.h"
+ #include "../usbd-module.h"
+
++MODULE_LICENSE("GPL");
+ MODULE_AUTHOR ("sl@lineo.com, tbr@lineo.com");
+ MODULE_DESCRIPTION ("USB Device SA-1100 Bus Interface");
+
+--- linux/drivers/usb/device/usbd.c.orig 2003-05-13 11:18:45.000000000 +0200
++++ linux/drivers/usb/device/usbd.c 2004-08-01 13:47:47.000000000 +0200
+@@ -72,6 +72,7 @@
+ #include "usbd-build.h"
+ #include "usbd-module.h"
+
++MODULE_LICENSE("GPL");
+ MODULE_AUTHOR ("sl@lineo.com, tbr@lineo.com");
+ MODULE_DESCRIPTION ("USB Device Core Support");
+
+--- linux/drivers/usb/device/usbd-monitor.c.orig 2004-08-01 13:46:44.000000000 +0200
++++ linux/drivers/usb/device/usbd-monitor.c 2004-08-01 13:46:36.000000000 +0200
+@@ -33,6 +33,7 @@
+ #include "usbd-build.h"
+ #include "usbd-module.h"
+
++MODULE_LICENSE("GPL");
+ MODULE_AUTHOR ("sl@lineo.com, tbr@lineo.com");
+ MODULE_DESCRIPTION ("USB Device Monitor");
+ USBD_MODULE_INFO ("usbd_monitor 0.3");
+--- linux/drivers/usb/device/net_fd/net-fd.c.orig 2003-05-13 11:18:45.000000000 +0200
++++ linux/drivers/usb/device/net_fd/net-fd.c 2004-08-01 13:48:32.000000000 +0200
+@@ -33,6 +33,7 @@
+ #include "../usbd-build.h"
+ #include "../usbd-module.h"
+
++MODULE_LICENSE("GPL");
+ MODULE_AUTHOR ("sl@lineo.com, tbr@lineo.com");
+ MODULE_DESCRIPTION ("USB Device Network Function");
+
+--- linux/arch/arm/mach-sa1100/deviceinfo.c.orig 2004-08-01 13:56:24.000000000 +0200
++++ linux/arch/arm/mach-sa1100/deviceinfo.c 2004-08-01 13:56:11.000000000 +0200
+@@ -28,6 +28,7 @@
+
+ #define MODULE_NAME "deviceinfo"
+ #define DEVINFO_DIRNAME "deviceinfo"
++MODULE_LICENSE("GPL");
+
+ static int proc_read_deviceinfo(struct file * file, char * buf,
+ size_t nbytes, loff_t *ppos);
+--- linux/arch/arm/mach-sa1100/gpio.c.orig 2003-05-13 11:18:14.000000000 +0200
++++ linux/arch/arm/mach-sa1100/gpio.c 2004-08-01 13:55:27.000000000 +0200
+@@ -15,7 +15,7 @@
+
+ #include <asm/hardware.h>
+
+-
++MODULE_LICENSE("GPL");
+
+ static int proc_gpio_read(char *page, char **start, off_t off,
+ int count, int *eof, void *data)
+--- linux/drivers/usb/device/serial_fd/serial.c.orig 2003-05-13 11:18:45.000000000 +0200
++++ linux/drivers/usb/device/serial_fd/serial.c 2004-08-01 14:25:02.000000000 +0200
+@@ -80,6 +80,7 @@
+ #include "../usbd-module.h"
+
+
++MODULE_LICENSE("GPL");
+ MODULE_AUTHOR ("sl@lineo.com, tbr@lineo.com");
+ MODULE_DESCRIPTION ("USB Device Serial Function");
+
+--- linux/drivers/usb/device/usbd-serialnumber.c.orig 2003-05-13 11:18:45.000000000 +0200
++++ linux/drivers/usb/device/usbd-serialnumber.c 2004-08-01 14:25:40.000000000 +0200
+@@ -33,6 +33,7 @@
+ #include "usbd-build.h"
+ #include "usbd-module.h"
+
++MODULE_LICENSE("GPL");
+ MODULE_AUTHOR ("sl@lineo.com, tbr@lineo.com");
+ MODULE_DESCRIPTION ("USB Device Monitor");
+ USBD_MODULE_INFO ("usbd_monitor 0.2-alpha");
diff --git a/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/sound-2.4.18r2.patch b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/sound-2.4.18r2.patch
new file mode 100644
index 0000000000..d75c07a1c8
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/sound-2.4.18r2.patch
@@ -0,0 +1,5602 @@
+diff -Nuar linux-2.4.18/arch/arm/mach-sa1100/m62332.c linux-2.4.18p/arch/arm/mach-sa1100/m62332.c
+--- linux-2.4.18/arch/arm/mach-sa1100/m62332.c 2003-05-13 11:18:14.000000000 +0200
++++ linux-2.4.18p/arch/arm/mach-sa1100/m62332.c 2004-10-12 22:36:36.000000000 +0200
+@@ -131,3 +131,5 @@
+
+ return 0;
+ }
++EXPORT_SYMBOL(m62332_senddata);
++
+diff -Nuar linux-2.4.18/arch/arm/mach-sa1100/Makefile linux-2.4.18p/arch/arm/mach-sa1100/Makefile
+--- linux-2.4.18/arch/arm/mach-sa1100/Makefile 2003-05-13 11:18:14.000000000 +0200
++++ linux-2.4.18p/arch/arm/mach-sa1100/Makefile 2004-10-12 22:36:19.000000000 +0200
+@@ -18,7 +18,7 @@
+ export-objs := assabet.o consus.o badge4.o dma-sa1100.o dma-sa1111.o \
+ flexanet.o freebird.o generic.o h3600.o \
+ huw_webpanel.o irq.o pcipool.o sa1111.o sa1111-pcibuf.o \
+- system3.o yopy.o usb_ctl.o usb_recv.o usb_send.o
++ system3.o yopy.o usb_ctl.o usb_recv.o usb_send.o m62332.o
+
+ # These aren't present yet, and prevents a plain -ac kernel building.
+ # hwtimer.o
+@@ -36,7 +36,7 @@
+ obj-$(CONFIG_SA1100_LART) += cpu-sa1100.o
+ endif
+
+-obj-$(CONFIG_SA1100_COLLIE) += collie.o m62332.o collie_battery.o collie_led.o collie_buzzer.o
++obj-$(CONFIG_SA1100_COLLIE) += collie.o m62332.o collie_battery.o collie_led.o
+
+ # Next, the SA1111 stuff.
+ obj-$(CONFIG_SA1111) += sa1111.o dma-sa1111.o
+diff -Nuar linux-2.4.18/drivers/char/Makefile linux-2.4.18p/drivers/char/Makefile
+--- linux-2.4.18/drivers/char/Makefile 2003-05-13 11:18:18.000000000 +0200
++++ linux-2.4.18p/drivers/char/Makefile 2004-10-12 17:26:44.000000000 +0200
+@@ -228,7 +228,7 @@
+ obj-y += joystick/js.o
+ endif
+
+-obj-$(CONFIG_SA1100_COLLIE) += sharp_led.o sharp_kbdctl.o sharp_buzzer.o
++obj-$(CONFIG_SA1100_COLLIE) += sharp_led.o sharp_kbdctl.o
+ obj-$(CONFIG_DISCOVERY_LED) += sharp_led.o discovery_led.o
+ obj-$(CONFIG_ARCH_PXA_POODLE) += sharp_led.o sharp_kbdctl.o sharpsl_led.o sharp_buzzer.o
+ obj-$(CONFIG_ARCH_PXA_CORGI) += sharp_led.o sharpsl_led.o sharp_kbdctl.o corgi_rc.o sharp_buzzer.o
+diff -Nuar linux-2.4.18/drivers/sound/colliebuzzer.h linux-2.4.18p/drivers/sound/colliebuzzer.h
+--- linux-2.4.18/drivers/sound/colliebuzzer.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18p/drivers/sound/colliebuzzer.h 2004-10-13 15:24:51.028208808 +0200
+@@ -0,0 +1,756 @@
++unsigned short tap_data[] = {
++ 0x0000 , 0xff00 , 0xff00 , 0x0000 ,
++ 0xff00 , 0x0000 , 0x0000 , 0x0100 ,
++ 0x0000 , 0x0100 , 0x0000 , 0x0100 ,
++ 0x0100 , 0x0000 , 0x0100 , 0x0100 ,
++ 0x0100 , 0x0100 , 0x0100 , 0x0100 ,
++ 0x0100 , 0x0100 , 0x0100 , 0x0100 ,
++ 0x0100 , 0x0000 , 0x0100 , 0x0000 ,
++ 0x0100 , 0xff00 , 0x0100 , 0x0000 ,
++ 0x0100 , 0x0000 , 0x0000 , 0x0100 ,
++ 0x0000 , 0x0100 , 0x0000 , 0x0100 ,
++ 0x0000 , 0x0000 , 0x0000 , 0x0000 ,
++ 0x0000 , 0x0100 , 0x0000 , 0x0100 ,
++ 0x0000 , 0x0100 , 0x0700 , 0x1c00 ,
++ 0xc800 , 0xd900 , 0x2b00 , 0x2700 ,
++ 0xbf00 , 0xe000 , 0x0d00 , 0x1000 ,
++ 0xf500 , 0xd700 , 0x0100 , 0x0a00 ,
++ 0xfb00 , 0xfa00 , 0x2200 , 0x0100 ,
++ 0xeb00 , 0x0300 , 0x0600 , 0x1600 ,
++ 0xe500 , 0xf500 , 0x0d00 , 0x0a00 ,
++ 0x0100 , 0xfb00 , 0x0000 , 0x0100 ,
++ 0xf200 , 0x0400 , 0x0600 , 0x0000 ,
++ 0xf100 , 0x0300 , 0x1200 , 0xfe00 ,
++ 0xe900 , 0x0400 , 0x0100 , 0x0d00 ,
++ 0xf500 , 0x0100 , 0x0100 , 0xfe00 ,
++ 0x0100 , 0xfb00 , 0x0400 , 0xff00 ,
++ 0xf700 , 0x0400 , 0x0000 , 0xfe00 ,
++ 0x0200 , 0x0000 , 0x0100 , 0xfd00 ,
++ 0x0000 , 0xff00 , 0x0200 , 0x0000 ,
++ 0xff00 , 0x0000 , 0x0200 , 0xfc00 ,
++ 0xfe00 , 0xff00 , 0x0100 , 0x0200 ,
++ 0x0000 , 0xff00 , 0xfc00 , 0x0100 ,
++ 0x0100 , 0x0100 , 0xff00 , 0x0000 ,
++ 0x0300 , 0xfe00 , 0xfe00 , 0x0200 ,
++ 0xff00 , 0x0000 , 0x0000 , 0xfe00 ,
++ 0x0000 , 0xff00 , 0x0000 , 0x0000 ,
++ 0x0000 , 0xff00 , 0x0000 , 0x0000 ,
++ 0xff00 , 0xfe00 , 0xfd00 , 0x0100 ,
++ 0x0000 , 0xfe00 , 0xff00 , 0xff00 ,
++ 0x0000 , 0xff00 , 0x0100 , 0xfe00 ,
++ 0xff00 , 0xff00 , 0x0000 , 0x0000 ,
++ 0xfe00 , 0xff00 , 0x0100 , 0x0100 ,
++ 0xff00 , 0x0100 , 0x0100 , 0xfe00 ,
++ 0x0000 , 0x0000 , 0x0000 , 0x0100 ,
++ 0x0000 , 0x0000 , 0xff00 , 0x0000 ,
++ 0x0100 , 0x0000 , 0x0200 };
++
++
++unsigned short click_data[] = {
++ 0x0100 , 0x0100 , 0x0100 , 0x0000 ,
++ 0x0100 , 0xff00 , 0x0100 , 0x0000 ,
++ 0xff00 , 0xff00 , 0xff00 , 0x0000 ,
++ 0xff00 , 0xff00 , 0xff00 , 0xff00 ,
++ 0xff00 , 0xff00 , 0x0000 , 0xff00 ,
++ 0xff00 , 0xff00 , 0x0000 , 0xff00 ,
++ 0xff00 , 0xff00 , 0xff00 , 0x0100 ,
++ 0x0000 , 0xff00 , 0xfe00 , 0x0100 ,
++ 0xff00 , 0x0100 , 0xff00 , 0x0100 ,
++ 0x0100 , 0x0300 , 0xff00 , 0xff00 ,
++ 0xff00 , 0x0100 , 0x0100 , 0x0000 ,
++ 0xfe00 , 0xfe00 , 0xfe00 , 0xfc00 ,
++ 0xfe00 , 0x0100 , 0xfd00 , 0xff00 ,
++ 0xff00 , 0xfc00 , 0xfe00 , 0xfd00 ,
++ 0x0100 , 0xfe00 , 0x0100 , 0xf800 ,
++ 0xfe00 , 0xfe00 , 0xfc00 , 0xe600 ,
++ 0xdb00 , 0x2500 , 0xdb00 , 0xee00 ,
++ 0xdb00 , 0x0600 , 0xeb00 , 0x1f00 ,
++ 0x1e00 , 0xeb00 , 0xfe00 , 0x0000 ,
++ 0xff00 , 0x1900 , 0xef00 , 0xf700 ,
++ 0x2100 , 0xe400 , 0x0100 , 0x0600 ,
++ 0xff00 , 0x0300 , 0xf900 , 0x0f00 ,
++ 0xf600 , 0x0100 , 0xfe00 , 0xf900 ,
++ 0x0500 , 0xf500 , 0x0600 , 0xfb00 ,
++ 0x0800 , 0x0100 , 0x0300 , 0x0100 ,
++ 0xf700 , 0xfa00 , 0xfd00 , 0xfc00 ,
++ 0x0800 , 0xfb00 , 0x0500 , 0xfe00 ,
++ 0xfc00 , 0xfc00 , 0xfe00 , 0x0400 ,
++ 0xff00 , 0xff00 , 0x0500 , 0x0100 ,
++ 0xfc00 , 0xff00 , 0xfe00 , 0xfb00 ,
++ 0x0200 , 0x0200 , 0xff00 , 0xfe00 ,
++ 0xfe00 , 0x0600 , 0xfb00 , 0xff00 ,
++ 0xfc00 , 0x0600 , 0xfb00 , 0xff00 ,
++ 0xff00 , 0x0100 , 0xff00 , 0x0200 ,
++ 0xff00 , 0xfb00 , 0xff00 , 0x0200 ,
++ 0xff00 , 0x0200 , 0x0100 , 0xfe00 ,
++ 0xfe00 , 0x0100 , 0xfd00 , 0x0200 ,
++ 0xfc00 , 0x0800 , 0xfe00 , 0xfe00 ,
++ 0x0400 , 0xfc00 , 0xff00 , 0xfc00 ,
++ 0x0500 , 0x0200 , 0x0800 , 0x0200 ,
++ 0x0100 , 0xfe00 , 0x0100 , 0xff00 ,
++ 0x0700 , 0xfb00 , 0xfc00 , 0x0100 ,
++ 0xfe00 , 0xfc00 , 0x0b00 , 0xfb00 ,
++ 0xfb00 , 0x0700 , 0xfb00 , 0xfb00 ,
++ 0x0100 , 0xff00 , 0xfb00 , 0xfd00 ,
++ 0x0000 , 0xfe00 , 0xfe00 , 0xff00 ,
++ 0xfc00 , 0x0400 , 0x0000 , 0xfe00 ,
++ 0xff00 , 0x0200 , 0xff00 , 0x0000 ,
++ 0x0500 , 0x0100 , 0x0100 , 0x0100 ,
++ 0x0100 , 0x0000 , 0x0300 , 0xfe00 ,
++ 0xff00 , 0x0100 , 0x0100 , 0xfe00 ,
++ 0x0000 , 0xff00 , 0x0100 , 0xff00 ,
++ 0x0200 , 0xff00 , 0xff00 , 0xff00 ,
++ 0xff00 , 0xfe00 , 0x0000 , 0xff00 ,
++ 0xfe00 , 0xff00 , 0xfd00 , 0x0000 ,
++ 0xff00 , 0xfe00 , 0xff00 , 0xfc00 ,
++ 0x0100 , 0xfd00 , 0xff00 , 0xff00 ,
++ 0x0200 , 0xff00 , 0x0100 , 0xff00 ,
++ 0xfc00 , 0x0300 , 0xff00 , 0x0200 ,
++ 0xff00 , 0x0100 , 0xff00 , 0x0100 ,
++ 0xff00 , 0xff00 , 0x0100 , 0xfe00 ,
++ 0x0300 , 0xfc00 , 0x0100 , 0xff00 ,
++ 0x0100 , 0x0100 , 0x0100 , 0xfc00 ,
++ 0xff00 , 0x0100 , 0x0100 , 0xfe00 ,
++ 0x0100 , 0xff00 , 0x0100 , 0xfc00 ,
++ 0x0100 , 0x0200 , 0xff00 , 0x0100 ,
++ 0xff00 , 0xff00 , 0x0200 , 0xfd00 ,
++ 0xfe00 , 0x0100 , 0xff00 , 0x0100 ,
++ 0xfe00 , 0x0100 , 0x0300 , 0xfe00 ,
++ 0x0300 , 0xfe00 , 0xff00 , 0x0100 ,
++ 0xff00 , 0x0200 , 0xfd00 , 0x0000 ,
++ 0xff00 , 0x0200 , 0xff00 , 0x0200 ,
++ 0xff00 , 0x0100 , 0x0000 , 0xff00 ,
++ 0x0200 , 0x0100 , 0x0000 , 0xff00 ,
++ 0x0100 , 0xfe00 , 0x0200 , 0xfe00 ,
++ 0xfe00 , 0x0100 , 0xfe00 , 0x0100 ,
++ 0xfd00 , 0xff00 , 0xff00 , 0xfe00 ,
++ 0xff00 , 0xfc00 , 0x0100 , 0xfe00 ,
++ 0x0100 , 0xff00 , 0xfe00 , 0xff00 ,
++ 0xff00 , 0xfe00 , 0x0100 , 0xfe00 ,
++ 0x0100 , 0xff00 , 0x0100 , 0xfe00 ,
++ 0xff00 , 0x0200 , 0xfe00 , 0x0000 ,
++ 0x0100 , 0x0200 , 0xff00 , 0x0200 ,
++ 0xff00 , 0x0000 , 0x0100 , 0x0100 ,
++ 0xff00 , 0x0200 , 0xfe00 , 0xff00 ,
++ 0xff00 , 0xff00 , 0x0100 , 0x0000 ,
++ 0xff00 , 0x0100 , 0xff00 , 0x0000 ,
++ 0x0100 , 0xff00 , 0xfe00 , 0xff00 ,
++ 0xff00 , 0x0100 , 0xff00 , 0x0100 ,
++ 0xfe00 , 0xff00 , 0xff00 , 0xff00 ,
++ 0xfe00 , 0xff00 , 0xff00 , 0x0100 ,
++ 0xff00 , 0x0200 , 0xff00 , 0x0100 ,
++ 0xff00 , 0xff00 };
++
++
++unsigned short alarm_data[] = {
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x7fff , 0x7fff , 0x8000 , 0x8000 , // 9 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 0
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 1
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 2
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 3
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 4
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 5
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 6
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 7
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 8
++ 0x7fff , 0x7fff , 0x7fff , 0x7fff , 0x8000 , 0x8000 , 0x8000 , 0x8000 , // 9 5
++
++};
++
++
++
++
++
++#define SHARP_BUZ_TOUCHSOUND 1
++#define SHARP_BUZ_KEYSOUND 2
++#define SHARP_BUZ_ALARM 11
++#define SHARP_BUZZER_MAKESOUND 0x5680
++
++static int collie_ct_s16_buzzer(const u_char *userPtr, size_t userCount,
++ u_char frame[], ssize_t *frameUsed,
++ ssize_t frameLeft)
++{
++ ssize_t count, used;
++ signed short *fp = (unsigned short *) &frame[*frameUsed];
++ signed short *up = (unsigned short *) userPtr;
++
++ DPRINTK("Collie_ct_s16 begin\n");
++
++ used = count = (userCount < frameLeft) ? userCount/2 : frameLeft/4;
++
++ DPRINTK("Collie_ct_s16 begin count %d \n",count);
++
++ while (count > 0) {
++ *fp++ = *up;
++ *fp++ = *up++;
++ count--;
++ }
++
++ *frameUsed+=used*4;
++ DPRINTK("Collie_ct_s16 exit\n");
++ return used*2;
++}
++
++
++static ssize_t sq_write_buzzer(int soundid)
++{
++ const char * src;
++ audio_stream_t *s = &output_stream;
++ u_char *dest;
++ ssize_t uUsed, bUsed, bLeft, uLeft, ret = 0;
++
++
++ if ((collie_tc_status!=NA) && (collie_tc_status!=PLAY))
++ return -EPERM;
++
++ collie_tc_status=PLAY;
++
++ if (!s->buffers && sq_allocate_buffers(s)) {
++ return -ENOMEM;
++ }
++
++
++#ifdef CONFIG_PM
++ /* Auto Power off cancel */
++// autoPowerCancel = 0;
++#endif
++ DPRINTK("sq_write_buzzer: id:%d\n", soundid);
++
++ switch (soundid) {
++ case SHARP_BUZ_TOUCHSOUND:
++ src=tap_data;
++ uLeft=176*2;
++ break;
++ case SHARP_BUZ_KEYSOUND:
++ src=click_data;
++ uLeft=360*2;
++ break;
++ case SHARP_BUZ_ALARM:
++ src=alarm_data;
++ uLeft=3072*2;
++ break;
++ default:
++ return 0;
++ }
++ DPRINTK("sq_write_buzzer: uLeft=%d\n", uLeft);
++
++ collie_tc_mute_off();
++ while (uLeft > 0) {
++ audio_buf_t *b = s->buf;
++
++ ret = -ERESTARTSYS;
++ if (down_interruptible(&b->sem)) {
++ break;
++ }
++
++ dest = b->start + b->size;
++ bUsed = 0;
++ bLeft = s->fragsize - b->size;
++ uUsed = collie_ct_s16_buzzer(src, uLeft, dest, &bUsed, bLeft);
++ cpu_cache_clean_invalidate_range((unsigned long)dest,
++ (unsigned long)(dest+(audio_fragsize)), 0);
++
++ DPRINTK("back to sq_write_buzzer %p\n",dest);
++
++ if (uUsed < 0) {
++ up(&b->sem);
++ return -EFAULT;
++ }
++ src += uUsed;
++ uLeft -= uUsed;
++ b->size += bUsed;
++
++ if (b->size < s->fragsize) {
++ up(&b->sem);
++ break;
++ }
++
++ /* Send current buffer to dma */
++ sa1100_dma_queue_buffer(COLLIE_BUZZER_DMA_CHANNEL,
++ (void *) b, b->dma_addr, b->size);
++
++ Collie_volume_set(4);
++
++ b->size = 0; /* indicate that the buffer has been sent */
++ NEXT_BUF(s, buf);
++ }
++
++ DPRINTK("sq_write_buzzer: return\n");
++ return ret;
++}
++
++
++
++
++
++
++
+diff -Nuar linux-2.4.18/drivers/sound/collie_ssp.c linux-2.4.18p/drivers/sound/collie_ssp.c
+--- linux-2.4.18/drivers/sound/collie_ssp.c 2003-05-13 11:18:37.000000000 +0200
++++ linux-2.4.18p/drivers/sound/collie_ssp.c 2004-10-13 15:05:36.000000000 +0200
+@@ -9,6 +9,7 @@
+ * I/F : Synchronous serial port (SSP) TI mode
+ *
+ * Copyright (C) 2001 SHARP
++ * p.nis/dolOps messed around with it too!
+ *
+ * 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
+@@ -24,7 +25,18 @@
+ * 23-Oct-2001 SHARP
+ * tune hardware control method
+ * 12-Nov-2001 Lineo Japan, Inc.
+- * 14-Feb-2003 Sharp Corporation 8bit , GETOSPACE
++ *
++ * 26-Dec-2002 getospace added, some unneeded things removed
++ *
++ * 28-Dec-2002 cut out old stuff, reorder stuff
++ *
++ * 04-Jan-2003 put in getospace from lineo's collie-tc35143.c
++ * also added collie_record_on off, and exported these symbols
++ *
++ * 06-Jan-2003 if mixer ioctl SOUND_MIXER_READ_DEVMASK returns 0 as mask,
++ * than the headphone(/mic) is not connected
++ *
++ *
+ */
+ #include <linux/module.h>
+ #include <linux/sched.h>
+@@ -35,7 +47,7 @@
+ #include <linux/fcntl.h>
+ #include <linux/errno.h>
+ #include <linux/mm.h>
+-#include <linux/malloc.h>
++#include <linux/slab.h>
+ #include <linux/sound.h>
+ #include <linux/init.h>
+ #include <linux/delay.h>
+@@ -48,38 +60,30 @@
+ #include <asm/uaccess.h>
+ #include <asm/io.h>
+ #include <asm/dma.h>
+-#include <asm/ucb1200.h>
+
+ #include <linux/soundcard.h>
+ #include <asm/proc/cache.h>
+
+-#include <asm/arch/gpio.h>
++#include <asm/arch/hardware.h>
+ #include <asm/arch/m62332.h>
+ #include <asm/arch/tc35143.h>
+
+ #undef DEBUG
+-//#define DEBUG
+ #ifdef DEBUG
+ #define DPRINTK( x... ) printk( ##x )
+ #else
+ #define DPRINTK( x... )
+ #endif
+
+-#if defined(CONFIG_COLLIE_TS) || defined(CONFIG_COLLIE_TR0) || \
+- defined(CONFIG_COLLIE_TR1) || defined(CONFIG_COLLIE_DEV)
+-#define COLLIE_TRY_ONE
+-#else
+-#undef COLLIE_TRY_ONE
+-#endif
++#define COLLIE_TRY_ONE
+
+ #ifdef COLLIE_TRY_ONE
+ #ifndef GPIO_REMOCON_ADC_SW
+ #define GPIO_REMOCON_ADC_SW GPIO_GPIO(18)
+ #endif
+
++static int collie_rc_irq;
+ static DECLARE_WAIT_QUEUE_HEAD(audio_on);
+-
+-
+ static inline void collie_rc_set_int_mode(void)
+ {
+ GPSR = GPIO_REMOCON_ADC_SW;
+@@ -91,14 +95,12 @@
+ }
+ #endif
+
+-
+ int collie_dmasound_irq = -1;
+-#define COLLIE_SOUND_DMA_CHANNEL (collie_dmasound_irq)
+
++#define COLLIE_SOUND_DMA_CHANNEL (collie_dmasound_irq)
+ #define SND_NDEVS 256 /* Number of supported devices */
+ #define SND_DEV_CTL 0 /* Control port /dev/mixer */
+-#define SND_DEV_SEQ 1 /* Sequencer output /dev/sequencer (FM
+- synthesizer and MIDI output) */
++#define SND_DEV_SEQ 1 /* Sequencer output /dev/sequencer (FM synthesizer and MIDI output) */
+ #define SND_DEV_MIDIN 2 /* Raw midi access */
+ #define SND_DEV_DSP 3 /* Digitized voice /dev/dsp */
+ #define SND_DEV_AUDIO 4 /* Sparc compatible /dev/audio */
+@@ -121,142 +123,25 @@
+ #endif
+
+ /*** Some declarations ***********************************************/
+-#define DMASND_TT 1
+-#define DMASND_FALCON 2
+-#define DMASND_AMIGA 3
+-#define DMASND_AWACS 4
+-#define DMASND_IRIS 5
+-#define DMASND_COLLIE 6
+
+-#define COLLIE_WAIT_AMP_ON 1 /* 10ms */
++
+ #define COLLIE_WAIT_LCM_ACC_XEN 50 /* 500ms */
+-#ifdef MODULE
+-static int catchRadius = 0;
+-#endif
++
+ static int collie_amp_init = 0;
+ static int collie_dac_init = 0;
+-static int collie_op_shdn_on = 0;
+ static int collie_resume = 0;
+ static int collie_hard_mute = 1;
+ static int collie_soft_mute = 1;
+ static int collie_volume = 0;
++int collie_recording=0;
++static int playing=0;
++static int headphone;
+
+-int collie_buzzer_volume = 0;
+-
+-#if 1
+-static DECLARE_WAIT_QUEUE_HEAD(open_queue);
++#define AUDIO_NBFRAGS_DEFAULT 64
++#define AUDIO_FRAGSIZE_DEFAULT 4096
+
+-#define SIGNAL_RECEIVED (signal_pending(current))
+-#define ONE_SECOND HZ /* in jiffies (100ths of a second) */
+-#define SLEEP(queue, time_limit) \
+- interruptible_sleep_on_timeout((wait_queue_head_t*)&queue, (time_limit));
+-#define WAKE_UP(queue) (wake_up_interruptible((wait_queue_head_t*)&queue))
+-#endif
+-
+-#define AUDIO_NBFRAGS_DEFAULT 8
+-#define AUDIO_FRAGSIZE_DEFAULT 8192
+-
+-
+-#define TRACE 0
+-#if TRACE
+-#define TRACE_ON 1
+-#define TRACE_SEM 0
+-#define TRACE_SENDDATA 0
+-#define TRACE_PM 1
+-#define TRACE_AMP 1
+-#define TRACE_DAC 1
+-#define TRACE_OP_SHDN 1
+-#define TRACE_WRITE 1
+-#define TRACE_MUTE 1
+-#define TRACE_CLOCK 1
+-#define TRACE_PAIF 1
+-#define TRACE_SSP 1
+-#define TRACE_VOLUME 1
+-#define TRACE_MIC 1
+-#define TRACE_INTERRUPT 0
+-int cLevel = 0;
+-char *pLevel[16] = {
+- /* 0 */"",
+- /* 1 */" ",
+- /* 2 */" ",
+- /* 3 */" ",
+- /* 4 */" ",
+- /* 5 */" ",
+- /* 6 */" ",
+- /* 7 */" ",
+- /* 8 */" ",
+- /* 9 */" ",
+- /* 10 */" ",
+- /* 11 */" ",
+- /* 12 */" ",
+- /* 13 */" ",
+- /* 14 */" ",
+- /* 15 */" "
+-};
+-char *
+-indent(int level)
+-{
+- int i;
+- return (level < 16 ) ? pLevel[level] : pLevel[15];
+-}
+-
+-#define P_ID (current->tgid)
+-#define ENTER(f,fn) {if(f)printk("%d:%s+[%d]%s\n",jiffies,indent(cLevel),P_ID,(fn));cLevel++;}
+-#define LEAVE(f,fn) {cLevel--;if(f>1)printk("%d:%s-[%d]%s\n",jiffies,indent(cLevel),P_ID,(fn));}
+-#else /* ! TRACE */
+-#define ENTER(f,fn)
+-#define LEAVE(f,fn)
+-#endif /* end TRACE */
+
+-/*
+- * DAC power management
+- */
+-#if defined(CONFIG_COLLIE_TS) || defined(CONFIG_COLLIE_TR0) || \
+- defined(CONFIG_COLLIE_TR1) || defined(CONFIG_COLLIE_DEV)
+-#define DAC_OFF_WITH_DEVICE_OFF 1
+-#undef HARD_MUTE_CTRL_DISABLE
+-#else
+-#undef DAC_OFF_WITH_DEVICE_OFF
+ #undef HARD_MUTE_CTRL_DISABLE
+-#endif
+-
+-
+-#define TRY_DELAY_OFF
+-#ifdef TRY_DELAY_OFF /* H.Hayami SHARP 2001.12.19 */
+-static DECLARE_WAIT_QUEUE_HEAD(delay_off);
+-struct semaphore df_sem;
+-/*
+- * delay execution
+- */
+-static unsigned int DelayedFlag = 0;
+-#define DELAY_DAC_OFF 0x1
+-#define DELAY_HARD_MUTE_ON 0x2
+-
+-static inline void ResetDelayAll(void)
+-{
+- DelayedFlag = 0;
+-}
+-
+-static inline int isDelayedExist(void)
+-{
+- return DelayedFlag;
+-}
+-
+-static inline void SetDelay(unsigned int flag)
+-{
+- DelayedFlag |= flag;
+-}
+-
+-static inline void ResetDelay(unsigned int flag)
+-{
+- DelayedFlag &= ~flag;
+-}
+-
+-static inline unsigned int isDelayed(unsigned int flag)
+-{
+- return DelayedFlag & flag;
+-}
+-#endif
+
+ /*
+ * Buffer Management
+@@ -268,6 +153,7 @@
+ dma_addr_t dma_addr; /* physical buffer address */
+ struct semaphore sem; /* down before touching the buffer */
+ int master; /* master owner for buffer allocation */
++ u_int idx; /* buffer index, so that we know which buffer was sent last*/
+ } audio_buf_t;
+
+ typedef struct {
+@@ -291,16 +177,6 @@
+
+ static volatile int audio_wr_refcount; /* nbr of concurrent open() for playback */
+
+-static ssize_t (*ct_func)(const u_char *, size_t, u_char *, ssize_t *, ssize_t) = NULL;
+-
+-#ifdef MODULE
+-MODULE_PARM(catchRadius, "i");
+-#endif
+-MODULE_PARM(numBufs, "i");
+-MODULE_PARM(bufSize, "i");
+-
+-#define min(x, y) ((x) < (y) ? (x) : (y))
+-
+ #define IOCTL_IN(arg, ret) \
+ do { int error = get_user(ret, (int *)(arg)); \
+ if (error) return error; \
+@@ -310,11 +186,7 @@
+ /*
+ * SA1110 GPIO (17)
+ */
+-#if defined(CONFIG_COLLIE_TS) || defined(CONFIG_COLLIE_TR0)
+-#define COLLIE_GPIO_OPSHDN GPIO_GPIO (17) /* AMP contorol */
+-#else /* !CONFIG_COLLIE_TS && !CONFIG_COLLIE_TR0 */
+ #define COLLIE_GPIO_MIC GPIO_GPIO (17) /* MIC contorol */
+-#endif /* !CONFIG_COLLIE_TS && !CONFIG_COLLIE_TR0 */
+
+ /*
+ * DAC setup data
+@@ -352,122 +224,11 @@
+ ( LCM_ACC_XSEL1 | LCM_ACC_CLKSEL101 ) ,
+ };
+
++/*** "Translations" ************************************************************/
+
+-/* 16 bit mu-law */
+-
+-static short ulaw2dma16[] = {
+- -32124, -31100, -30076, -29052, -28028, -27004, -25980, -24956,
+- -23932, -22908, -21884, -20860, -19836, -18812, -17788, -16764,
+- -15996, -15484, -14972, -14460, -13948, -13436, -12924, -12412,
+- -11900, -11388, -10876, -10364, -9852, -9340, -8828, -8316,
+- -7932, -7676, -7420, -7164, -6908, -6652, -6396, -6140,
+- -5884, -5628, -5372, -5116, -4860, -4604, -4348, -4092,
+- -3900, -3772, -3644, -3516, -3388, -3260, -3132, -3004,
+- -2876, -2748, -2620, -2492, -2364, -2236, -2108, -1980,
+- -1884, -1820, -1756, -1692, -1628, -1564, -1500, -1436,
+- -1372, -1308, -1244, -1180, -1116, -1052, -988, -924,
+- -876, -844, -812, -780, -748, -716, -684, -652,
+- -620, -588, -556, -524, -492, -460, -428, -396,
+- -372, -356, -340, -324, -308, -292, -276, -260,
+- -244, -228, -212, -196, -180, -164, -148, -132,
+- -120, -112, -104, -96, -88, -80, -72, -64,
+- -56, -48, -40, -32, -24, -16, -8, 0,
+- 32124, 31100, 30076, 29052, 28028, 27004, 25980, 24956,
+- 23932, 22908, 21884, 20860, 19836, 18812, 17788, 16764,
+- 15996, 15484, 14972, 14460, 13948, 13436, 12924, 12412,
+- 11900, 11388, 10876, 10364, 9852, 9340, 8828, 8316,
+- 7932, 7676, 7420, 7164, 6908, 6652, 6396, 6140,
+- 5884, 5628, 5372, 5116, 4860, 4604, 4348, 4092,
+- 3900, 3772, 3644, 3516, 3388, 3260, 3132, 3004,
+- 2876, 2748, 2620, 2492, 2364, 2236, 2108, 1980,
+- 1884, 1820, 1756, 1692, 1628, 1564, 1500, 1436,
+- 1372, 1308, 1244, 1180, 1116, 1052, 988, 924,
+- 876, 844, 812, 780, 748, 716, 684, 652,
+- 620, 588, 556, 524, 492, 460, 428, 396,
+- 372, 356, 340, 324, 308, 292, 276, 260,
+- 244, 228, 212, 196, 180, 164, 148, 132,
+- 120, 112, 104, 96, 88, 80, 72, 64,
+- 56, 48, 40, 32, 24, 16, 8, 0,
+-};
+-
+-/* 16 bit A-law */
+-
+-static short alaw2dma16[] = {
+- -5504, -5248, -6016, -5760, -4480, -4224, -4992, -4736,
+- -7552, -7296, -8064, -7808, -6528, -6272, -7040, -6784,
+- -2752, -2624, -3008, -2880, -2240, -2112, -2496, -2368,
+- -3776, -3648, -4032, -3904, -3264, -3136, -3520, -3392,
+- -22016, -20992, -24064, -23040, -17920, -16896, -19968, -18944,
+- -30208, -29184, -32256, -31232, -26112, -25088, -28160, -27136,
+- -11008, -10496, -12032, -11520, -8960, -8448, -9984, -9472,
+- -15104, -14592, -16128, -15616, -13056, -12544, -14080, -13568,
+- -344, -328, -376, -360, -280, -264, -312, -296,
+- -472, -456, -504, -488, -408, -392, -440, -424,
+- -88, -72, -120, -104, -24, -8, -56, -40,
+- -216, -200, -248, -232, -152, -136, -184, -168,
+- -1376, -1312, -1504, -1440, -1120, -1056, -1248, -1184,
+- -1888, -1824, -2016, -1952, -1632, -1568, -1760, -1696,
+- -688, -656, -752, -720, -560, -528, -624, -592,
+- -944, -912, -1008, -976, -816, -784, -880, -848,
+- 5504, 5248, 6016, 5760, 4480, 4224, 4992, 4736,
+- 7552, 7296, 8064, 7808, 6528, 6272, 7040, 6784,
+- 2752, 2624, 3008, 2880, 2240, 2112, 2496, 2368,
+- 3776, 3648, 4032, 3904, 3264, 3136, 3520, 3392,
+- 22016, 20992, 24064, 23040, 17920, 16896, 19968, 18944,
+- 30208, 29184, 32256, 31232, 26112, 25088, 28160, 27136,
+- 11008, 10496, 12032, 11520, 8960, 8448, 9984, 9472,
+- 15104, 14592, 16128, 15616, 13056, 12544, 14080, 13568,
+- 344, 328, 376, 360, 280, 264, 312, 296,
+- 472, 456, 504, 488, 408, 392, 440, 424,
+- 88, 72, 120, 104, 24, 8, 56, 40,
+- 216, 200, 248, 232, 152, 136, 184, 168,
+- 1376, 1312, 1504, 1440, 1120, 1056, 1248, 1184,
+- 1888, 1824, 2016, 1952, 1632, 1568, 1760, 1696,
+- 688, 656, 752, 720, 560, 528, 624, 592,
+- 944, 912, 1008, 976, 816, 784, 880, 848,
+-};
+-
+-
+-
+-/*** Translations ************************************************************/
+-
+-static ssize_t collie_ct_law(const u_char *userPtr, size_t userCount,
+- u_char frame[], ssize_t *frameUsed,
+- ssize_t frameLeft);
+-static ssize_t collie_ct_s8(const u_char *userPtr, size_t userCount,
+- u_char frame[], ssize_t *frameUsed,
+- ssize_t frameLeft);
+-static ssize_t collie_ct_u8(const u_char *userPtr, size_t userCount,
+- u_char frame[], ssize_t *frameUsed,
+- ssize_t frameLeft);
+ static ssize_t collie_ct_s16(const u_char *userPtr, size_t userCount,
+ u_char frame[], ssize_t *frameUsed,
+ ssize_t frameLeft);
+-static ssize_t collie_ct_u16(const u_char *userPtr, size_t userCount,
+- u_char frame[], ssize_t *frameUsed,
+- ssize_t frameLeft);
+-
+-/*** Machine definitions *****************************************************/
+-
+-
+-typedef struct {
+- int type;
+- void *(*dma_alloc)(unsigned int, int);
+- void (*dma_free)(void *, unsigned int);
+- int (*irqinit)(void);
+-#ifdef MODULE
+- void (*irqcleanup)(void);
+-#endif /* MODULE */
+- void (*init)(void);
+- void (*silence)(void);
+- int (*setFormat)(int);
+- int (*setVolume)(int);
+- int (*setBass)(int);
+- int (*setTreble)(int);
+- int (*setGain)(int);
+- void (*play)(void);
+-} MACHINE;
+-
+
+ /*** Low level stuff *********************************************************/
+
+@@ -477,71 +238,28 @@
+ int stereo; /* 0 = mono, 1 = stereo */
+ int size; /* 8/16 bit*/
+ int speed; /* speed */
++ int volume;
+ } SETTINGS;
+
+-typedef struct {
+- ssize_t (*ct_ulaw)(const u_char *, size_t, u_char *, ssize_t *, ssize_t);
+- ssize_t (*ct_alaw)(const u_char *, size_t, u_char *, ssize_t *, ssize_t);
+- ssize_t (*ct_s8)(const u_char *, size_t, u_char *, ssize_t *, ssize_t);
+- ssize_t (*ct_u8)(const u_char *, size_t, u_char *, ssize_t *, ssize_t);
+- ssize_t (*ct_s16be)(const u_char *, size_t, u_char *, ssize_t *, ssize_t);
+- ssize_t (*ct_u16be)(const u_char *, size_t, u_char *, ssize_t *, ssize_t);
+- ssize_t (*ct_s16le)(const u_char *, size_t, u_char *, ssize_t *, ssize_t);
+- ssize_t (*ct_u16le)(const u_char *, size_t, u_char *, ssize_t *, ssize_t);
+-} TRANS;
+-
+-struct sound_settings {
+- MACHINE mach; /* machine dependent things */
+- SETTINGS hard; /* hardware settings */
+- SETTINGS soft; /* software settings */
+- SETTINGS dsp; /* /dev/dsp default settings */
+- TRANS *trans; /* supported translations */
+- int volume_left; /* volume (range is machine dependent) */
+- int volume_right;
+- int bass; /* tone (range is machine dependent) */
+- int treble;
+- int gain;
+- int minDev; /* minor device number currently open */
+-};
+-
+-static struct sound_settings sound;
++static SETTINGS sound;
+
+ #ifdef CONFIG_PM
+-extern int autoPowerCancel;
++//extern int autoPowerCancel;
+ #endif
+-int collie_main_volume;
+-extern int collie_under_recording; /* collie_buzzer.c */
+-#define COLLE_RECORDING (collie_under_recording)
+
+ static void Collie_Set_Volume(int volume);
+ static int Collie_Get_Volume(void);
+-static void Collie_disable_sound(void);
+-#ifdef CONFIG_PM
+-#if 0
+-static void Collie_clock_stop(void);
+-static void Collie_FS8KLPF_stop(void);
+-#endif
+-#endif
+ static int CollieIrqInit(void);
+ static int CollieGetSamp(void);
+-static void Collie_OP_SHDN_on(void);
+-static void Collie_OP_SHDN_off(void);
+-static void Collie_FS8KLPF_start(void);
+-#ifdef MODULE
+-static void CollieIrqCleanUp(void);
+-#endif /* MODULE */
+-static void CollieSilence(void);
+ static void Collie_DAC_sendword(int);
+-static void CollieInit(void);
+ static int CollieSetFormat(int format);
+ static void Collie_sq_interrupt(void*, int);
+ static int sq_allocate_buffers(audio_stream_t*);
+ static void sq_release_buffers(audio_stream_t*);
++static inline void Collie_volume_init(void);
++static void Collie_volume_set(int);
+
+ /*** Mid level stuff *********************************************************/
+-static void sound_silence(void);
+-static void sound_init(void);
+-static int sound_set_format(int format);
+ static int sound_set_speed(int speed);
+ static int sound_set_stereo(int stereo);
+
+@@ -572,468 +290,122 @@
+ static long long sound_lseek(struct file *file, long long offset, int orig);
+ static inline int ioctl_return(int *addr, int value)
+ {
+- ENTER(TRACE_ON,"ioctl_return");
+ if (value < 0) {
+- LEAVE(TRACE_ON,"ioctl_return");
+ return(value);
+ }
+-
+- LEAVE(TRACE_ON,"ioctl_return");
+ return put_user(value, addr)? -EFAULT: 0;
+ }
+
+-
+-/*** Config & Setup **********************************************************/
+-
+-
+-void dmasound_init(void);
+-void dmasound_setup(char *str, int *ints);
+-
+-
+-/*** Translations ************************************************************/
+-
+-
+-/* ++TeSche: radically changed for new expanding purposes...
+- *
+- * These two routines now deal with copying/expanding/translating the samples
+- * from user space into our buffer at the right frequency. They take care about
+- * how much data there's actually to read, how much buffer space there is and
+- * to convert samples into the right frequency/encoding. They will only work on
+- * complete samples so it may happen they leave some bytes in the input stream
+- * if the user didn't write a multiple of the current sample size. They both
+- * return the number of bytes they've used from both streams so you may detect
+- * such a situation. Luckily all programs should be able to cope with that.
+- *
+- * I think I've optimized anything as far as one can do in plain C, all
+- * variables should fit in registers and the loops are really short. There's
+- * one loop for every possible situation. Writing a more generalized and thus
+- * parameterized loop would only produce slower code. Feel free to optimize
+- * this in assembler if you like. :)
+- *
+- * I think these routines belong here because they're not yet really hardware
+- * independent, especially the fact that the Falcon can play 16bit samples
+- * only in stereo is hardcoded in both of them!
+- *
+- * ++geert: split in even more functions (one per format)
+- */
+-
+-static ssize_t collie_ct_law(const u_char *userPtr, size_t userCount,
+- u_char frame[], ssize_t *frameUsed,
+- ssize_t frameLeft)
+-{
+- short *table = sound.soft.format == AFMT_MU_LAW ? ulaw2dma16: alaw2dma16;
+- ssize_t count, used;
+- short *p = (short *) &frame[*frameUsed];
+- int val, stereo = sound.soft.stereo;
+-
+- ENTER(TRACE_ON,"collie_ct_law");
+- frameLeft >>= 2;
+- if (stereo)
+- userCount >>= 1;
+- used = count = min(userCount, frameLeft);
+- if (!COLLE_RECORDING) {
+- while (count > 0) {
+- u_char data;
+- if (get_user(data, userPtr++)) {
+- LEAVE(TRACE_ON,"collie_ct_law");
+- return -EFAULT;
+- }
+- val = table[data];
+- *p++ = val; /* Left Ch. */
+- if (stereo) {
+- if (get_user(data, userPtr++)) {
+- LEAVE(TRACE_ON,"collie_ct_law");
+- return -EFAULT;
+- }
+- val = table[data];
+- }
+- *p++ = val; /* Right Ch. */
+- count--;
+- }
+- } else {
+- while (count > 0) {
+- u_char data;
+- int ave;
+- if (get_user(data, userPtr++)) {
+- LEAVE(TRACE_ON,"collie_ct_law");
+- return -EFAULT;
+- }
+- val = table[data];
+- ave = val; /* Left Ch. */
+- if (stereo) {
+- if (get_user(data, userPtr++)) {
+- LEAVE(TRACE_ON,"collie_ct_law");
+- return -EFAULT;
+- }
+- val = table[data];
+- }
+- ave += val; /* Right Ch. */
+- ave >>= 1;
+- *p++ = 0; /* Left Ch. */
+- *p++ = ave; /* Right Ch. */
+- count--;
+- }
+- }
+- *frameUsed += used * 4;
+- LEAVE(TRACE_ON,"collie_ct_law");
+- return stereo? used * 2: used;
+-}
+-
+-
+-static ssize_t collie_ct_s8(const u_char *userPtr, size_t userCount,
+- u_char frame[], ssize_t *frameUsed,
+- ssize_t frameLeft)
+-{
+- ssize_t count, used;
+- short *p = (short *) &frame[*frameUsed];
+- int stereo = sound.soft.stereo;
+- short val;
+-
+- ENTER(TRACE_ON,"collie_ct_s8");
+- frameLeft >>= 2;
+- if (stereo)
+- userCount >>= 1;
+- used = count = min(userCount, frameLeft);
+- if (!COLLE_RECORDING) {
+- while (count > 0) {
+- u_char data;
+-
+- if (get_user(data, userPtr++)) {
+- LEAVE(TRACE_ON,"collie_ct_s8");
+- return -EFAULT;
+- }
+- val = ( data - 0x80 ) << 8;
+- *p++ = val; /* Left Ch. */
+- if ( stereo ) {
+- if ( get_user(data, userPtr++)) {
+- LEAVE(TRACE_ON,"collie_ct_s8");
+- return -EFAULT;
+- }
+- val = ( data - 0x80 ) << 8;
+- }
+- *p++ = val; /* Right Ch. */
+- count--;
+- }
+- } else {
+- while (count > 0) {
+- u_char data;
+- int ave;
+-
+- if (get_user(data, userPtr++)) {
+- LEAVE(TRACE_ON,"collie_ct_s8");
+- return -EFAULT;
+- }
+- val = ( data - 0x80 ) << 8;
+- ave = val; /* Left Ch. */
+- if ( stereo ) {
+- if ( get_user(data, userPtr++)) {
+- LEAVE(TRACE_ON,"collie_ct_s8");
+- return -EFAULT;
+- }
+- val = ( data - 0x80 ) << 8;
+- }
+- ave += val; /* Right Ch. */
+- ave >>= 1;
+- *p++ = 0; /* Left Ch. */
+- *p++ = ave; /* Right Ch. */
+- count--;
+- }
+- }
+- *frameUsed += used * 4;
+- LEAVE(TRACE_ON,"collie_ct_s8");
+- return stereo? used * 2: used;
+-}
+-
+-
+-static ssize_t collie_ct_u8(const u_char *userPtr, size_t userCount,
+- u_char frame[], ssize_t *frameUsed,
+- ssize_t frameLeft)
++static void wait_ms(int ten_ms)
+ {
+- ssize_t count, used;
+- short *p = (short *) &frame[*frameUsed];
+- int stereo = sound.soft.stereo;
+- short val;
+-
+- ENTER(TRACE_ON,"collie_ct_u8");
+- frameLeft >>= 2;
+- if (stereo)
+- userCount >>= 1;
+- used = count = min(userCount, frameLeft);
+- if (!COLLE_RECORDING) {
+- while (count > 0) {
+- u_char data;
+-
+- if (get_user(data, userPtr++)) {
+- LEAVE(TRACE_ON,"collie_ct_u8");
+- return -EFAULT;
+- }
+- val = data;
+- *p++ = (val ^ 0x80) << 8; /* Left Ch. */
+- if ( stereo ) {
+- if ( get_user(data, userPtr++)) {
+- LEAVE(TRACE_ON,"collie_ct_u8");
+- return -EFAULT;
+- }
+- val = data;
+- }
+- *p++ = (val ^ 0x80) << 8; /* Right Ch. */
+- count--;
+- }
+- } else {
+- while (count > 0) {
+- u_char data;
+- int ave;
+-
+- if (get_user(data, userPtr++)) {
+- LEAVE(TRACE_ON,"collie_ct_u8");
+- return -EFAULT;
+- }
+- val = data;
+- ave = (val ^ 0x80) << 8; /* Left Ch. */
+- if ( stereo ) {
+- if ( get_user(data, userPtr++)) {
+- LEAVE(TRACE_ON,"collie_ct_u8");
+- return -EFAULT;
+- }
+- val = data;
+- }
+- ave += (val ^ 0x80) << 8; /* Right Ch. */
+- ave >>= 1;
+- *p++ = 0; /* Left Ch. */
+- *p++ = ave; /* Right Ch. */
+- count--;
+- }
+- }
+- *frameUsed += used * 4;
+- LEAVE(TRACE_ON,"collie_ct_u8");
+- return stereo? used * 2: used;
++ schedule_timeout(ten_ms);
+ }
+
++/*** Translation ************************************************************/
+
+ static ssize_t collie_ct_s16(const u_char *userPtr, size_t userCount,
+ u_char frame[], ssize_t *frameUsed,
+ ssize_t frameLeft)
+ {
+ ssize_t count, used;
+- int stereo = sound.soft.stereo;
+ short *fp = (short *) &frame[*frameUsed];
++ short *up = (short *) userPtr;
+
+- ENTER(TRACE_ON,"collie_ct_s16");
+ frameLeft >>= 2;
+- userCount >>= (stereo? 2: 1);
+- used = count = min(userCount, frameLeft);
+- if (!stereo) {
+- short *up = (short *) userPtr;
+- while (count > 0) {
+- short data;
+- if (get_user(data, up++)) {
+- LEAVE(TRACE_ON,"collie_ct_s16");
+- return -EFAULT;
+- }
+- *fp++ = (!COLLE_RECORDING) ? data : 0; /* Left Ch. */
+- *fp++ = data;
+- count--;
++ userCount >>= 2;
++ used = count = (userCount < frameLeft) ? userCount : frameLeft;
++
++ while (count > 0) {
++
++ short data;
++ if (get_user(data, up++)) {
++ return -EFAULT;
+ }
+- } else {
+- short *up = (short *) userPtr;
+- while (count > 0) {
+- short data;
+- short temp;
+- if (get_user(data, up++)) {
+- LEAVE(TRACE_ON,"collie_ct_s16");
+- return -EFAULT;
+- }
+- if (get_user(temp, up++)) {
+- LEAVE(TRACE_ON,"collie_ct_s16");
+- return -EFAULT;
+- }
+- if (!COLLE_RECORDING) {
+- *fp++ = data; /* Left Ch. */
+- *fp++ = temp; /* Right Ch. */
+- } else {
+- data >>= 1;
+- data += (temp >> 1);
+- *fp++ = 0; /* Left Ch. */
+- *fp++ = data; /* Right Ch. */
+- }
+- count--;
++ if (!collie_recording) *fp++ = data;
++ else *fp++=0;
++
++ if (get_user(data, up++)) {
++ return -EFAULT;
+ }
++ *fp++ = data;
++ count--;
+ }
++
+ *frameUsed += used * 4;
+- LEAVE(TRACE_ON,"collie_ct_s16");
+- return stereo? used * 4: used * 2;
++ return used * 4;
+ }
+
+-static ssize_t collie_ct_u16(const u_char *userPtr, size_t userCount,
+- u_char frame[], ssize_t *frameUsed,
+- ssize_t frameLeft)
+-{
+- ssize_t count, used;
+- int mask = (sound.soft.format == AFMT_U16_LE? 0x0080: 0x8000);
+- int stereo = sound.soft.stereo;
+- short *fp = (short *) &frame[*frameUsed];
+- short *up = (short *) userPtr;
++/*** HARDWARE dependent stuff *********************************************************/
+
+- ENTER(TRACE_ON,"collie_ct_u16");
+- frameLeft >>= 2;
+- userCount >>= (stereo? 2: 1);
+- used = count = min(userCount, frameLeft);
+- if (!COLLE_RECORDING) {
+- while (count > 0) {
+- int data;
+- int temp;
+- if (get_user(data, up++)) {
+- LEAVE(TRACE_ON,"collie_ct_u16");
+- return -EFAULT;
+- }
+- data ^= mask;
+- *fp++ = data; /* Left Ch. */
+- if (stereo) {
+- if (get_user(temp, up++)) {
+- LEAVE(TRACE_ON,"collie_ct_u16");
+- return -EFAULT;
+- }
+- temp ^= mask;
+- data = temp;
+- data ^= mask;
+- }
+- *fp++ = data; /* Right Ch. */
+- count--;
+- }
++static inline void Collie_DAC_sendbit(int bit_data)
++{
++ if (bit_data & 1) {
++ LCM_GPO |= (LCM_GPIO_DAC_SDATA);
+ } else {
+- while (count > 0) {
+- int data;
+- int temp;
+- int ave;
+- if (get_user(data, up++)) {
+- LEAVE(TRACE_ON,"collie_ct_u16");
+- return -EFAULT;
+- }
+- data ^= mask;
+- ave = data; /* Left Ch. */
+- if (stereo) {
+- if (get_user(temp, up++)) {
+- LEAVE(TRACE_ON,"collie_ct_u16");
+- return -EFAULT;
+- }
+- temp ^= mask;
+- data = temp;
+- data ^= mask;
+- }
+- ave += data;
+- ave >>= 1;
+- *fp++ = 0; /* Left Ch. */
+- *fp++ = ave; /* Right Ch. */
+- count--;
+- }
++ LCM_GPO &= ~(LCM_GPIO_DAC_SDATA);
+ }
+- *frameUsed += used * 4;
+- LEAVE(TRACE_ON,"collie_ct_u16");
+- return stereo? used * 4: used * 2;
+-}
+
+-static TRANS transCollie = {
+- collie_ct_law, collie_ct_law, collie_ct_s8, collie_ct_u8,
+- collie_ct_s16, collie_ct_u16, collie_ct_s16, collie_ct_u16
+-};
++ udelay(1);
++ LCM_GPO |= (LCM_GPIO_DAC_SCK);
+
+-/*** Low level stuff *********************************************************/
++ udelay(1);
++ LCM_GPO &= ~(LCM_GPIO_DAC_SCK);
++ udelay(1);
++ LCM_GPO &= ~(LCM_GPIO_DAC_SDATA);
++ udelay(1);
++}
+
+-static void Collie_Set_Volume(int volume)
++static void Collie_DAC_sendword(int data)
+ {
+- ENTER(TRACE_ON,"Collie_Set_Volume");
+-
+- sound.volume_left = volume & 0xff;
+- if ( sound.volume_left > 100 ) sound.volume_left = 100;
+-
+- collie_main_volume = sound.volume_left;
+-
+- sound.volume_right = ( volume & 0xff00 >> 8);
+- if ( sound.volume_right > 100 ) sound.volume_right = 100;
+- LEAVE(TRACE_ON,"Collie_Set_Volume");
++ int i;
+
+- collie_buzzer_volume = sound.volume_right;
++#if defined(CONFIG_COLLIE_PCM1741)
++
++ LCM_GPO &= ~(LCM_GPIO_DAC_SCK);
++ udelay(1);
++ LCM_GPO |= (LCM_GPIO_DAC_SLOAD);
++ udelay(1);
+
+-}
++ for (i = 0; i < 16; i++)
++ Collie_DAC_sendbit(data >> (15 - i));
+
++ LCM_GPO &= ~(LCM_GPIO_DAC_SLOAD);
++ udelay(2);
+
+-static int Collie_Get_Volume(void)
+-{
+- ENTER(TRACE_ON,"Collie_Get_Volume");
+- LEAVE(TRACE_ON,"Collie_Get_Volume");
+- return ( sound.volume_right << 8 | sound.volume_left );
+-}
++#elif defined(CONFIG_COLLIE_PCM1717)
++
++ LCM_GPO &= ~(LCM_GPIO_DAC_SLOAD);
++ udelay(1000);
++ LCM_GPO |= (LCM_GPIO_DAC_SLOAD);
++ udelay(1000);
++ LCM_GPO &= ~(LCM_GPIO_DAC_SCK);
++ udelay(1000);
+
+-static void wait_ms(int ten_ms)
+-{
+- ENTER(TRACE_ON,"wait_ms");
+- LEAVE(TRACE_ON,"wait_ms");
+- schedule_timeout(ten_ms);
+-}
++ for (i = 0; i < 16; i++)
++ Collie_DAC_sendbit(data >> (15 - i));
+
+-static inline void Collie_AMP_off(void)
+-{
+-#if defined(CONFIG_COLLIE_TS) || defined(CONFIG_COLLIE_TR0)
+- ENTER(TRACE_AMP,"Collie_AMP_off");
+-#if 0 /* OBSOLETED: power controled by only OP_SHDN */
+- /* Set up TC35143 GPIO I/O Direction (GPIO4 output mode) */
+- ucb1200_set_io_direction(TC35143_GPIO_AMP_ON,
+- TC35143_IODIR_OUTPUT);
+- /* AMP OFF */
+- ucb1200_set_io(TC35143_GPIO_AMP_ON,
+- TC35143_IODAT_LOW);
+- collie_amp_init = 0;
+-#endif /* 0 */
+- LEAVE(TRACE_AMP,"Collie_AMP_off");
+-#endif /* CONFIG_COLLIE_TS || CONFIG_COLLIE_TR0 */
+-}
+-
+-static inline void Collie_AMP_on(void)
+-{
+-#if defined(CONFIG_COLLIE_TS) || defined(CONFIG_COLLIE_TR0)
+- ENTER(TRACE_AMP,"Collie_AMP_on");
+-// if (!collie_amp_init) {
+- /* Set up TC35143 GPIO I/O Direction (GPIO4 output mode) */
+- ucb1200_set_io_direction(TC35143_GPIO_AMP_ON,
+- TC35143_IODIR_OUTPUT);
+- /* AMP ON */
+- ucb1200_set_io(TC35143_GPIO_AMP_ON, TC35143_IODAT_HIGH);
+- SCP_REG_GPWR |= SCP_AMP_ON;
+- wait_ms(COLLIE_WAIT_AMP_ON);
+- collie_amp_init = 1;
+-// }
+- LEAVE(TRACE_AMP,"Collie_AMP_on");
+-#endif /* CONFIG_COLLIE_TS || CONFIG_COLLIE_TR0 */
++ LCM_GPO &= ~(LCM_GPIO_DAC_SLOAD);
++ udelay(1000);
++ LCM_GPO |= (LCM_GPIO_DAC_SLOAD);
++ udelay(1000);
++ LCM_GPO &= ~(LCM_GPIO_DAC_SLOAD);
++ udelay(1000);
++#endif
+ }
+
+-static inline void Collie_AMP_init(void)
+-{
+-#if defined(CONFIG_COLLIE_TS) || defined(CONFIG_COLLIE_TR0)
+- ENTER(TRACE_AMP,"Collie_AMP_init");
+- Collie_AMP_off();
+- LEAVE(TRACE_AMP,"Collie_AMP_init");
+-#endif /* CONFIG_COLLIE_TS || CONFIG_COLLIE_TR0 */
+-}
+
+ static inline void Collie_DAC_off(void)
+ {
+- ENTER(TRACE_DAC,"Collie_DAC_off");
+- if (!COLLE_RECORDING) {
+- /* DAC OFF */
+- LCM_GPD &= ~(LCM_GPIO_DAC_ON); /* set up output */
+- LCM_GPO &= ~(LCM_GPIO_DAC_ON);
+-
+- /* LoCoMo GPIO disable */
+- LCM_GPE &= ~(LCM_GPIO_DAC_ON);
+- collie_dac_init = 0;
+- }
+- LEAVE(TRACE_DAC,"Collie_DAC_off");
++ /* DAC OFF */
++ LCM_GPD &= ~(LCM_GPIO_DAC_ON); /* set up output */
++ LCM_GPO &= ~(LCM_GPIO_DAC_ON);
++ /* LoCoMo GPIO disable */
++ LCM_GPE &= ~(LCM_GPIO_DAC_ON);
++ collie_dac_init = 0;
+ }
+
+ static inline void Collie_DAC_on(void)
+ {
+- ENTER(TRACE_DAC,"Collie_DAC_on");
+-// if (!collie_dac_init) {
+ if (!(LCM_GPO & LCM_GPIO_DAC_ON)) {
+ /* LoCoMo GPIO enable */
+ LCM_GPE &= ~LCM_GPIO_DAC_ON;
+@@ -1049,24 +421,10 @@
+ schedule();
+ }
+ }
+-// }
+- LEAVE(TRACE_DAC,"Collie_DAC_on");
+-}
+-
+-#ifdef TRY_DELAY_OFF /* H.Hayami SHARP */
+-static inline void Collie_DAC_delay_off(void)
+-{
+- ENTER(TRACE_DAC,"Collie_DAC_deleay_off");
+- down(&df_sem);
+- SetDelay(DELAY_DAC_OFF);
+- up(&df_sem);
+- LEAVE(TRACE_DAC,"Collie_DAC_delay_off");
+ }
+-#endif
+
+ static inline void Collie_DAC_init(void)
+ {
+- ENTER(TRACE_DAC,"Collie_DAC_init");
+ /* LoCoMo GPIO enable */
+ LCM_GPE &=
+ ~(LCM_GPIO_DAC_SDATA | LCM_GPIO_DAC_SCK | LCM_GPIO_DAC_SLOAD);
+@@ -1075,7 +433,6 @@
+ ~(LCM_GPIO_DAC_SDATA | LCM_GPIO_DAC_SCK | LCM_GPIO_DAC_SLOAD);
+
+ #if defined(CONFIG_COLLIE_PCM1741)
+-
+ Collie_DAC_sendword(DAC_REG16_SetupData); /* register16 */
+ Collie_DAC_sendword(DAC_REG17_SetupData); /* register17 */
+ Collie_DAC_sendword(DAC_REG18_SetupData); /* register18 */
+@@ -1083,78 +440,53 @@
+ Collie_DAC_sendword(DAC_REG20_SetupData); /* register20 */
+ //// Collie_DAC_sendword(DAC_REG21_SetupData); /* register21 */
+ Collie_DAC_sendword(DAC_REG22_SetupData); /* register22 */
+-
+ #elif defined(CONFIG_COLLIE_PCM1717)
+-
+ Collie_DAC_sendword(DAC_MODE0_SetupData); /* MODE0 */
+ Collie_DAC_sendword(DAC_MODE1_SetupData); /* MODE1 */
+ Collie_DAC_sendword(DAC_MODE2_SetupData); /* MODE2 */
+ Collie_DAC_sendword(DAC_MODE3_SetupData); /* MODE3 */
+-
+ #endif
+-
+ /* LoCoMo GPIO disable */
+ LCM_GPE &=
+ ~(LCM_GPIO_DAC_SDATA | LCM_GPIO_DAC_SCK | LCM_GPIO_DAC_SLOAD);
+- LEAVE(TRACE_DAC,"Collie_DAC_init");
+ }
+
+ static inline void Collie_soft_DAC_on(void)
+ {
+ #if defined(CONFIG_COLLIE_PCM1741)
+- ENTER(TRACE_DAC, "Collie_soft_DAC_on");
+ Collie_DAC_sendword(DAC_REG19_DACOn); /* register19 */
+- LEAVE(TRACE_DAC, "Collie_soft_DAC_on");
+ #endif /* CONFIG_COLLIE_PCM1741 */
+ }
+
+ static inline void Collie_soft_DAC_off(void)
+ {
+ #if defined(CONFIG_COLLIE_PCM1741)
+- ENTER(TRACE_DAC, "Collie_soft_DAC_off");
+ Collie_DAC_sendword(DAC_REG19_DACOff); /* register19 */
+- LEAVE(TRACE_DAC, "Collie_soft_DAC_off");
+-#endif /* CONFIG_COLLIE_PCM1741 */
+-}
+-
+-static inline void Collie_soft_mute_init(void)
+-{
+-#if defined(CONFIG_COLLIE_PCM1741)
+- ENTER(TRACE_MUTE, "Collie_soft_mute_init");
+- Collie_DAC_sendword(DAC_REG18_MuteOn); /* register18 */
+- collie_soft_mute = 1;
+- LEAVE(TRACE_MUTE, "Collie_soft_mute_init");
+ #endif /* CONFIG_COLLIE_PCM1741 */
+ }
+
+ static inline void Collie_soft_mute_on(void)
+ {
+ #if defined(CONFIG_COLLIE_PCM1741)
+- ENTER(TRACE_MUTE, "Collie_soft_mute_on");
+ if (!collie_soft_mute) {
+ Collie_DAC_sendword(DAC_REG18_MuteOn); /* register18 */
+ collie_soft_mute = 1;
+ }
+- LEAVE(TRACE_MUTE, "Collie_soft_mute_on");
+ #endif /* CONFIG_COLLIE_PCM1741 */
+ }
+
+ static inline void Collie_soft_mute_off(void)
+ {
+ #if defined(CONFIG_COLLIE_PCM1741)
+- ENTER(TRACE_MUTE, "Collie_soft_mute_off");
+ if (collie_soft_mute) {
+ Collie_DAC_sendword(DAC_REG18_MuteOff); /* register18 */
+ collie_soft_mute = 0;
+ }
+- LEAVE(TRACE_MUTE, "Collie_soft_mute_off");
+ #endif /* CONFIG_COLLIE_PCM1741 */
+ }
+
+ static inline void Collie_hard_mute_init(void)
+ {
+-#if !defined(CONFIG_COLLIE_TS) && !defined(CONFIG_COLLIE_TR0)
+- ENTER(TRACE_MUTE, "Collie_hard_mute_init");
+ SCP_REG_GPCR |= (SCP_GPCR_PA14 | SCP_GPCR_PA15);
+ #ifdef HARD_MUTE_CTRL_DISABLE
+ SCP_REG_GPWR |= (SCP_GPCR_PA14 | SCP_GPCR_PA15);
+@@ -1162,84 +494,107 @@
+ SCP_REG_GPWR &= ~(SCP_GPCR_PA14 | SCP_GPCR_PA15);
+ #endif /* HARD_MUTE_CTRL_DISABLE */
+ collie_hard_mute = 1;
+-#if !defined(CONFIG_COLLIE_TR1) && !defined(CONFIG_COLLIE_DEV)
++
+ {
+ int time = jiffies + 5;
+ while (jiffies <= time)
+ schedule();
+ }
+-#endif
+- LEAVE(TRACE_MUTE, "Collie_hard_mute_init");
+-#endif /* !CONFIG_COLLIE_TS && !CONFIG_COLLIE_TR0 */
+ }
+
+ static inline void Collie_hard_mute_on(void)
+ {
+-#if !defined(CONFIG_COLLIE_TS) && !defined(CONFIG_COLLIE_TR0)
+ #ifndef HARD_MUTE_CTRL_DISABLE
+- ENTER(TRACE_MUTE, "Collie_hard_mute_on");
+ if (!collie_hard_mute) {
+ SCP_REG_GPWR &= ~(SCP_GPCR_PA14 | SCP_GPCR_PA15);
+ collie_hard_mute = 1;
+-#if !defined(CONFIG_COLLIE_TR1) && !defined(CONFIG_COLLIE_DEV)
+ {
+ int time = jiffies + 5;
+ while (jiffies <= time)
+ schedule();
+ }
+-#endif
+ }
+- LEAVE(TRACE_MUTE, "Collie_hard_mute_on");
+ #endif /* HARD_MUTE_CTRL_DISABLE */
+-#endif /* !CONFIG_COLLIE_TS && !CONFIG_COLLIE_TR0 */
+ }
+
+ static inline void Collie_hard_mute_off(void)
+ {
+-#if !defined(CONFIG_COLLIE_TS) && !defined(CONFIG_COLLIE_TR0)
+ #ifndef HARD_MUTE_CTRL_DISABLE
+- ENTER(TRACE_MUTE, "Collie_hard_mute_off");
+ if (collie_hard_mute) {
+- if (!COLLE_RECORDING)
+ SCP_REG_GPWR |= (SCP_GPCR_PA14 | SCP_GPCR_PA15);
+- else
+- SCP_REG_GPWR |= (SCP_GPCR_PA15);
+ collie_hard_mute = 0;
+-#if !defined(CONFIG_COLLIE_TR1) && !defined(CONFIG_COLLIE_DEV)
+ {
+ int i;
+ for (i=0; i<=1000; i++) {
+ udelay(1);
+ }
+ }
+-#endif
+ }
+- LEAVE(TRACE_MUTE, "Collie_hard_mute_off");
+ #endif /* HARD_MUTE_CTRL_DISABLE */
+-#endif /* !CONFIG_COLLIE_TS && !CONFIG_COLLIE_TR0 */
+-}
+-
+-#ifdef TRY_DELAY_OFF /* H.Hayami SHARP 2001.12.19 */
+-static inline void Collie_hard_mute_delay_on(void)
+-{
+- ENTER(TRACE_MUTE, "Collie_hard_mute_delay_on");
+- down(&df_sem);
+- SetDelay(DELAY_HARD_MUTE_ON);
+- up(&df_sem);
+- LEAVE(TRACE_MUTE, "Collie_hard_mute_delay_on");
+ }
+-#endif
+
+-static inline void Collie_audio_clock_init(void)
++static inline void Collie_hard_mute_left_on(void)
++{
++#ifndef HARD_MUTE_CTRL_DISABLE
++// if (!collie_hard_mute) {
++ SCP_REG_GPWR &= ~(SCP_GPCR_PA14);
++ {
++ int time = jiffies + 5;
++ while (jiffies <= time)
++ schedule();
++ }
++// }
++#endif /* HARD_MUTE_CTRL_DISABLE */
++}
++
++static inline void Collie_hard_mute_left_off(void)
++{
++#ifndef HARD_MUTE_CTRL_DISABLE
++// if (collie_hard_mute) {
++ SCP_REG_GPWR |= (SCP_GPCR_PA14);
++ {
++ int i;
++ for (i=0; i<=1000; i++) {
++ udelay(1);
++ }
++ }
++// }
++#endif /* HARD_MUTE_CTRL_DISABLE */
++}
++
++
++static int CollieGetSamp(void)
++{
++ switch (sound.speed) {
++ case 8000:
++ return clock_set_data[7];
++ case 44100:
++ return clock_set_data[0];
++ case 22050:
++ return clock_set_data[1];
++ case 11025:
++ return clock_set_data[2];
++ case 48000:
++ return clock_set_data[3];
++ case 32000:
++ return clock_set_data[4];
++ case 24000:
++ return clock_set_data[5];
++ case 16000:
++ return clock_set_data[6];
++ default:
++ printk("Collie sound: Illegal sound rate %d\n", sound.speed);
++ return clock_set_data[7];
++ }
++}
++
++static inline void Collie_audio_clock_init(void)
+ {
+- ENTER(TRACE_CLOCK, "Collie_audio_clock_init");
+ LCM_ACC = 0;
+- LEAVE(TRACE_CLOCK, "Collie_audio_clock_init");
+ }
+
+ static inline void Collie_audio_clock_on(void)
+ {
+- ENTER(TRACE_CLOCK, "Collie_audio_clock_on");
+ /* LoCoMo Audio clock on */
+ LCM_ACC = CollieGetSamp();
+ barrier();
+@@ -1248,263 +603,58 @@
+ LCM_ACC |= LCM_ACC_XEN;
+ barrier();
+ LCM_ACC |= (LCM_ACC_MCLKEN | LCM_ACC_64FSEN);
+- LEAVE(TRACE_CLOCK, "Collie_audio_clock_on");
+ }
+
+ static inline void Collie_audio_clock_off(void)
+ {
+- ENTER(TRACE_CLOCK, "Collie_audio_clock_off");
+ /* LoCoMo Audio clock off */
+ LCM_ACC &= ~(LCM_ACC_XEN | LCM_ACC_MCLKEN | LCM_ACC_64FSEN);
+ barrier();
+ LCM_ACC &= ~(LCM_ACC_XON);
+- LEAVE(TRACE_CLOCK, "Collie_audio_clock_off");
+-}
+-
+-static inline void Collie_paif_init(void)
+-{
+- ENTER(TRACE_PAIF, "Collie_paif_init");
+- // LCM_PAIF = (LCM_PAIF_SCINV | LCM_PAIF_LRCRST);
+- LCM_PAIF = (LCM_PAIF_LRCRST);
+- LEAVE(TRACE_PAIF, "Collie_paif_init");
+ }
+
+ static inline void Collie_paif_on(void)
+ {
+- ENTER(TRACE_PAIF, "Collie_paif_on");
+ LCM_PAIF = (LCM_PAIF_SCINV | LCM_PAIF_LRCRST);
+ LCM_PAIF &= ~(LCM_PAIF_LRCRST);
+ LCM_PAIF |= (LCM_PAIF_SCEN | LCM_PAIF_LRCEN);
+- LEAVE(TRACE_PAIF, "Collie_paif_on");
+ }
+
+ static inline void Collie_paif_off(void)
+ {
+- ENTER(TRACE_PAIF, "Collie_paif_off");
+- // LCM_PAIF = (LCM_PAIF_SCINV | LCM_PAIF_LRCRST);
+ LCM_PAIF = (LCM_PAIF_LRCRST);
+- LEAVE(TRACE_PAIF, "Collie_paif_off");
+ }
+
+ static inline void Collie_MIC_init(void)
+ {
+-#if !defined(CONFIG_COLLIE_TS) && !defined(CONFIG_COLLIE_TR0)
+- ENTER(TRACE_MIC, "Collie_MIC_init");
+ /* MIC to GPIO 17 */
+ /* alternate functions for the GPIOs */
+- GAFR &= ~( COLLIE_GPIO_MIC );
+-
++ GAFR &= ~( COLLIE_GPIO_MIC );
+ /* Set the direction: 17 output */
+ GPDR |= ( COLLIE_GPIO_MIC );
+-
+-#if defined(CONFIG_COLLIE_TR1)
+- /* Set pin level (Low) */
+- GPCR = ( COLLIE_GPIO_MIC );
+-#else
+ /* Set pin level (High) */
+ GPSR = ( COLLIE_GPIO_MIC );
+-#endif
+- LEAVE(TRACE_MIC, "Collie_MIC_init");
+-#endif /* !CONFIG_COLLIE_TS && !CONFIG_COLLIE_TR0 */
+ }
+
+ static inline void Collie_MIC_on(void)
+ {
+-#if !defined(CONFIG_COLLIE_TS) && !defined(CONFIG_COLLIE_TR0)
+- ENTER(TRACE_MIC, "Collie_MIC_on");
+-#if defined(CONFIG_COLLIE_TR1)
+- GPSR = ( COLLIE_GPIO_MIC );
+-#else
+ GPCR = ( COLLIE_GPIO_MIC );
+-#endif
+- LEAVE(TRACE_MIC, "Collie_MIC_on");
+-#endif /* !CONFIG_COLLIE_TS && !CONFIG_COLLIE_TR0 */
+ }
+
+ static inline void Collie_MIC_off(void)
+ {
+-#if !defined(CONFIG_COLLIE_TS) && !defined(CONFIG_COLLIE_TR0)
+- ENTER(TRACE_MIC, "Collie_MIC_off");
+- if (!COLLE_RECORDING) {
+-#if defined(CONFIG_COLLIE_TR1)
+- GPCR = ( COLLIE_GPIO_MIC );
+-#else
+- GPSR = ( COLLIE_GPIO_MIC );
+-#endif
+- }
+- LEAVE(TRACE_MIC, "Collie_MIC_off");
+-#endif /* !CONFIG_COLLIE_TS && !CONFIG_COLLIE_TR0 */
+-}
+-
+-static inline void Collie_volume_init(void)
+-{
+- ENTER(TRACE_VOLUME, "Collie_volume_init");
+- m62332_senddata(0, M62332_EVR_CH);
+- collie_volume = 0;
+- LEAVE(TRACE_VOLUME, "Collie_volume_init");
+-}
+-
+-static inline void Collie_volume_on(void)
+-{
+- ENTER(TRACE_VOLUME, "Collie_volume_on");
+- if (collie_volume != sound.volume_left) {
+- //Collie_hard_mute_on();
+- m62332_senddata(0xff * sound.volume_left / 100, M62332_EVR_CH);
+- //Collie_hard_mute_off();
+- collie_volume = sound.volume_left;
+- }
+- LEAVE(TRACE_VOLUME, "Collie_volume_on");
+-}
+-
+-static inline void Collie_volume_off(void)
+-{
+- ENTER(TRACE_VOLUME, "Collie_volume_off");
+- if (collie_volume) {
+- //Collie_hard_mute_on();
+- m62332_senddata(0, M62332_EVR_CH);
+- //Collie_hard_mute_off();
+- collie_volume = 0;
+- }
+- LEAVE(TRACE_VOLUME, "Collie_volume_off");
+-}
+-
+-#define VOL_THRES 40
+-static void Collie_volume_half_adjust(void)
+-{
+- int volume = collie_volume;
+- ENTER(TRACE_VOLUME, "Collie_volume_half_adjust");
+- if (collie_volume > sound.volume_left) {
+- /* volume down */
+- if (collie_volume > VOL_THRES) {
+- if (sound.volume_left > VOL_THRES) {
+- volume = (collie_volume + sound.volume_left)/2;
+- if (volume == collie_volume) {
+- volume = sound.volume_left;
+- }
+- } else {
+- volume = (collie_volume + VOL_THRES)/2;
+- if (volume == collie_volume) {
+- volume = VOL_THRES;
+- }
+- }
+- } else {
+- /* we can pull down without noise */
+- volume = sound.volume_left;
+- }
+- } else if (collie_volume < sound.volume_left) {
+- /* volume up */
+- if (sound.volume_left > VOL_THRES) {
+- if (collie_volume < VOL_THRES) {
+- /* we can pull up to VOL_THRES without noise */
+- volume = VOL_THRES;;
+- } else {
+- volume = (collie_volume + sound.volume_left)/2;
+- if (volume == collie_volume) {
+- volume = sound.volume_left;
+- }
+- }
+- } else {
+- /* we can pull up without noise */
+- volume = sound.volume_left;
+- }
+- }
+- if (collie_volume != volume) {
+- m62332_senddata(0xff * volume / 100, M62332_EVR_CH);
+- collie_volume = volume;
+- }
+- LEAVE(TRACE_VOLUME, "Collie_volume_half_adjust");
+-}
+-
+-static void Collie_volume_half_off(void)
+-{
+- int volume;
+- int delta = 1;
+- ENTER(TRACE_VOLUME, "Collie_volume_half_off");
+- while (0 < collie_volume) {
+- if (collie_volume <= VOL_THRES) {
+- volume = 0;
+- } else {
+- if (collie_volume > delta) {
+- volume = collie_volume - delta;
+- } else {
+- volume = 0;
+- }
+- if (volume && volume < VOL_THRES) {
+- volume = VOL_THRES;
+- }
+- delta <<= 1;
+- }
+- m62332_senddata(0xff * volume / 100, M62332_EVR_CH);
+- collie_volume = volume;
+- udelay(100);
+- }
+- LEAVE(TRACE_VOLUME, "Collie_volume_half_off");
+-}
+-
+-static void Collie_OP_SHDN_on(void)
+-{
+-#if defined(CONFIG_COLLIE_TS) || defined(CONFIG_COLLIE_TR0)
+- ENTER(TRACE_OP_SHDN,"Collie_OP_SHDN_on");
+- if (!collie_op_shdn_on) {
+- /* set volume */
+- Collie_volume_off();
+-
+- /* OP_SHDN to GPIO 17 */
+- /* alternate functions for the GPIOs */
+- GAFR &= ~( COLLIE_GPIO_OPSHDN );
+-
+- /* Set the direction: 17 output */
+- GPDR |= ( COLLIE_GPIO_OPSHDN );
+-
+- /* Set pin level (high) */
+- GPSR |= ( COLLIE_GPIO_OPSHDN );
+-
+- /* set volume */
+- Collie_volume_on();
+-
+- collie_op_shdn_on = 1;
+- }
+- LEAVE(TRACE_OP_SHDN,"Collie_OP_SHDN_on");
+-#endif /* CONFIG_COLLIE_TS || CONFIG_COLLIE_TR0 */
+-}
+-
+-static void Collie_OP_SHDN_off(void)
+-{
+-#if defined(CONFIG_COLLIE_TS) || defined(CONFIG_COLLIE_TR0)
+- ENTER(TRACE_OP_SHDN,"Collie_OP_SHDN_off");
+- /* OP_SHDN to GPIO 17 */
+- /* alternate functions for the GPIOs */
+- GAFR &= ~( COLLIE_GPIO_OPSHDN );
+-
+- /* Set the direction: 17 output */
+- GPDR |= ( COLLIE_GPIO_OPSHDN );
+-
+- /* Clear pin level (low) */
+- GPCR |= ( COLLIE_GPIO_OPSHDN );
+-
+- collie_op_shdn_on = 0;
+- LEAVE(TRACE_OP_SHDN,"Collie_OP_SHDN_off");
+-#endif /* CONFIG_COLLIE_TS || CONFIG_COLLIE_TR0 */
++ GPSR = ( COLLIE_GPIO_MIC );
+ }
+
+ static inline void Collie_ssp_init(void)
+ {
+- ENTER(TRACE_SSP, "Collie_ssp_init");
+ /* alternate functions for the GPIOs */
+ /* SSP port to GPIO 10,12,13, 19 */
+ GAFR |= ( GPIO_SSP_TXD | GPIO_SSP_SCLK | GPIO_SSP_SFRM | GPIO_SSP_CLK );
+-#if defined(CONFIG_COLLIE_TS) || defined(CONFIG_COLLIE_TR0)
+- /* SSP port to GPIO 11 */
+- GAFR |= GPIO_SSP_RXD;
+-#endif /* CONFIG_COLLIE_TS || CONFIG_COLLIE_TR0 */
+
+ /* Set the direction: 10, 12, 13 output; 19 input */
+ GPDR |= ( GPIO_SSP_TXD | GPIO_SSP_SCLK | GPIO_SSP_SFRM );
+ GPDR &= ~( GPIO_SSP_CLK );
+-#if defined(CONFIG_COLLIE_TS) || defined(CONFIG_COLLIE_TR0)
+- /* Set the direction: 11 input */
+- GPDR &= ~( GPIO_SSP_RXD );
+-#endif /* CONFIG_COLLIE_TS || CONFIG_COLLIE_TR0 */
+
+ /* enable SSP pin swap */
+ PPAR |= PPAR_SPR;
+@@ -1516,400 +666,162 @@
+ /* the SSP setting */
+ Ser4SSCR0 = (SSCR0_DataSize(16) | SSCR0_TI | SSCR0_SerClkDiv(2));
+ Ser4SSCR1 = (SSCR1_SClkIactL | SSCR1_SClk1P | SSCR1_ExtClk);
+-
+- LEAVE(TRACE_SSP, "Collie_ssp_init");
+ }
+
+ static inline void Collie_ssp_on(void)
+ {
+- ENTER(TRACE_SSP, "Collie_ssp_on");
+ /* turn on the SSP */
+ Ser4SSCR0 |= ( SSCR0_SSE );
+- LEAVE(TRACE_SSP, "Collie_ssp_on");
+ }
+
+ static inline void Collie_ssp_off(void)
+ {
+- ENTER(TRACE_SSP, "Collie_ssp_off");
+ /* turn off the SSP */
+ Ser4SSCR0 &= ~( SSCR0_SSE );
+- LEAVE(TRACE_SSP, "Collie_ssp_off");
+-}
+-
+-static inline void Collie_sound_hard_init(void)
+-{
+- ENTER(TRACE_ON, "Collie_sound_hard_init");
+- Collie_hard_mute_init();
+- Collie_audio_clock_init();
+- Collie_paif_init();
+- Collie_volume_init();
+- Collie_ssp_init();
+- Collie_MIC_init();
+-
+- Collie_FS8KLPF_start();
+- LEAVE(TRACE_ON, "Collie_sound_hard_init");
+-}
+-
+-static inline void Collie_sound_hard_term(void)
+-{
+- ENTER(TRACE_ON, "Collie_sound_hard_term");
+-#ifdef DAC_OFF_WITH_DEVICE_OFF
+- /* DAC Off */
+- Collie_DAC_off();
+-#endif
+- LEAVE(TRACE_ON, "Collie_sound_hard_term");
+-}
+-
+-static void Collie_FS8KLPF_start(void)
+-{
+-#if defined(CONFIG_COLLIE_TS) || defined(CONFIG_COLLIE_TR0)
+- ENTER(TRACE_ON,"Collie_FS8KLPF_start");
+- /* Set up TC35143 GPIO I/O Direction (GPIO5 output mode) */
+- ucb1200_set_io_direction(TC35143_GPIO_FS8KLPF,
+- TC35143_IODIR_OUTPUT);
+- /* Set up TC35143 GPIO 5 (set LOW) */
+- ucb1200_set_io(TC35143_GPIO_FS8KLPF, TC35143_IODAT_LOW);
+- LEAVE(TRACE_ON,"Collie_FS8KLPF_start");
+-#endif /* CONFIG_COLLIE_TS || CONFIG_COLLIE_TR0 */
+-}
+-
+-#ifdef CONFIG_PM
+-#if 0
+-static void Collie_FS8KLPF_stop(void)
+-{
+- /* Set up TC35143 GPIO I/O Direction (GPIO5 output mode) */
+- ucb1200_set_io_direction(TC35143_GPIO_FS8KLPF,
+- TC35143_IODIR_OUTPUT);
+- /* Set up TC35143 GPIO 5 (set LOW) */
+- ucb1200_set_io(TC35143_GPIO_FS8KLPF, TC35143_IODAT_HIGH);
+-}
+-
+-static void Collie_clock_stop(void)
+-{
+- /* LoCoMo PCM audio interface */
+- Collie_paif_off();
+-
+- /* LoCoMo audio clock off */
+- Collie_audio_clock_off();
+-}
+-#endif
+-#endif
+-
+-#ifdef TRY_DELAY_OFF /* H.Hayami SHARP 2001.12.19 */
+-static unsigned long in_timehandle = 0;
+-static struct timer_list timer;
+-
+-static void collieDoDelayedSilence(void)
+-{
+- ENTER(TRACE_ON,"collieDoDelayedSilence");
+- down(&df_sem);
+- if(isDelayed(DELAY_HARD_MUTE_ON)) {
+- Collie_hard_mute_on();
+- }
+- if(isDelayed(DELAY_DAC_OFF)) {
+- Collie_DAC_off();
+- }
+- ResetDelayAll();
+- up(&df_sem);
+- LEAVE(TRACE_ON,"colliDoDelayedSilence");
+-}
+-
+-static void collieDelayedSilence(void)
+-{
+- ENTER(TRACE_ON,"collieDelayedSilence");
+- while (1) {
+- sleep_on(&delay_off);
+- collieDoDelayedSilence();
+- }
+- LEAVE(TRACE_ON,"collieDelayedSilence");
+-}
+-
+-static void collieStartDelayedSilence(unsigned long data)
+-{
+- ENTER(TRACE_ON,"collieStartDelayedSilence");
+- in_timehandle = 0;
+- wake_up(&delay_off);
+- LEAVE(TRACE_ON,"collieStartDelayedSilence");
+-}
+-
+-static void collieTriggerDelayedSilence(void)
+-{
+- ENTER(TRACE_ON,"collieTriggerDelayedSilence");
+- in_timehandle = 1;
+- init_timer(&timer);
+- timer.function = collieStartDelayedSilence;
+- timer.expires = jiffies + 5*100;
+- add_timer(&timer);
+- LEAVE(TRACE_ON,"collieTriggerDelayedSilence");
+-}
+-
+-static void collieCancelDelayedSilence(void)
+-{
+- ENTER(TRACE_ON,"collieCancelDelayedSilence");
+- down(&df_sem);
+- ResetDelayAll();;
+- up(&df_sem);
+- if (in_timehandle) {
+- del_timer(&timer);
+- in_timehandle = 0;
+- }
+- LEAVE(TRACE_ON,"collieCancelDelayedSilence");
+-}
+-#endif
+-
+-static void Collie_disable_sound(void)
+-{
+- ENTER(TRACE_ON,"Collie_disable_sound");
+- sa1100_dma_stop(COLLIE_SOUND_DMA_CHANNEL);
+- sa1100_dma_flush_all(COLLIE_SOUND_DMA_CHANNEL);
+-#ifndef TRY_DELAY_OFF /* H.Hayami SHARP 2001.12.18 */
+- Collie_volume_half_off();
+- Collie_hard_mute_on();
+- Collie_soft_mute_on();
+-
+- Collie_ssp_off();
+-
+- /* Collie_clock_stop(); */
+-#endif
+- LEAVE(TRACE_ON,"Collie_disable_sound");
+-}
+-
+-static void CollieSilence(void)
+-{
+- ENTER(TRACE_ON,"CollieSilence");
+- /* Disable sound & DMA */
+- Collie_disable_sound();
+-
+-#ifdef TRY_DELAY_OFF /* H.Hayami SHARP 2001.12.18 */
+- Collie_volume_half_off();
+- Collie_hard_mute_delay_on();
+- Collie_soft_mute_on();
+-
+- Collie_ssp_off();
+-
+- /* Collie_clock_stop(); */
+-#endif
+-
+-#if 0 /* H.Hayami SHARP 2001.12.18 */
+-#if !defined(CONFIG_COLLIE_TS) && !defined(CONFIG_COLLIE_TR0) && \
+- !defined(CONFIG_COLLIE_TR1) && !defined(CONFIG_COLLIE_DEV)
+- Collie_volume_off();
+-#endif
+-#endif
+- Collie_OP_SHDN_off();
+- Collie_soft_DAC_off();
+- Collie_paif_off();
+- Collie_audio_clock_off();
+-
+- //Collie_MIC_on();
+-
+-#ifndef DAC_OFF_WITH_DEVICE_OFF
+- /* DAC Off */
+-#ifdef TRY_DELAY_OFF /* H.Hayami 2001.12.15 */
+- Collie_DAC_delay_off();
+-#else
+- Collie_DAC_off();
+-#endif
+-#endif /* end DAC_OFF_WITH_DEVICE_OFF */
+-
+- /* AMP Off */
+- Collie_AMP_off();
+-
+-#ifdef TRY_DELAY_OFF /* H.Hayami SHARP 2001.12.18 */
+- collieTriggerDelayedSilence();
+-#endif
+- LEAVE(TRACE_ON,"CollieSilence");
+-}
+-
+-static int CollieGetSamp(void)
+-{
+- ENTER(TRACE_ON,"CollieGetSamp");
+- switch (sound.soft.speed) {
+- case 8000:
+- LEAVE(TRACE_ON,"CollieGetSamp");
+- return clock_set_data[7];
+- case 44100:
+- LEAVE(TRACE_ON,"CollieGetSamp");
+- return clock_set_data[0];
+- case 22050:
+- LEAVE(TRACE_ON,"CollieGetSamp");
+- return clock_set_data[1];
+- case 11025:
+- LEAVE(TRACE_ON,"CollieGetSamp");
+- return clock_set_data[2];
+- case 48000:
+- LEAVE(TRACE_ON,"CollieGetSamp");
+- return clock_set_data[3];
+- case 32000:
+- LEAVE(TRACE_ON,"CollieGetSamp");
+- return clock_set_data[4];
+- case 24000:
+- LEAVE(TRACE_ON,"CollieGetSamp");
+- return clock_set_data[5];
+- case 16000:
+- LEAVE(TRACE_ON,"CollieGetSamp");
+- return clock_set_data[6];
+- default:
+- printk("Collie sound: Illegal sound rate %d\n", sound.soft.speed);
+- LEAVE(TRACE_ON,"CollieGetSamp");
+- return clock_set_data[7];
+- }
+-}
+-
+-static inline void Collie_DAC_sendbit(int bit_data)
+-{
+- ENTER(TRACE_SENDDATA,"Collie_DAC_sendbit");
+- if (bit_data & 1) {
+- LCM_GPO |= (LCM_GPIO_DAC_SDATA);
+- } else {
+- LCM_GPO &= ~(LCM_GPIO_DAC_SDATA);
+- }
+-
+- udelay(1);
+- LCM_GPO |= (LCM_GPIO_DAC_SCK);
+-
+- udelay(1);
+- LCM_GPO &= ~(LCM_GPIO_DAC_SCK);
+- udelay(1);
+- LCM_GPO &= ~(LCM_GPIO_DAC_SDATA);
+- udelay(1);
+- LEAVE(TRACE_SENDDATA,"Collie_DAC_sendbit");
+-}
+-
+-static void Collie_DAC_sendword(int data)
+-{
+- int i;
+-
+- ENTER(TRACE_SENDDATA,"Collie_DAC_sendword");
+-#if defined(CONFIG_COLLIE_PCM1741)
+-
+- LCM_GPO &= ~(LCM_GPIO_DAC_SCK);
+- udelay(1);
+- LCM_GPO |= (LCM_GPIO_DAC_SLOAD);
+- udelay(1);
+-
+- for (i = 0; i < 16; i++)
+- Collie_DAC_sendbit(data >> (15 - i));
+-
+- LCM_GPO &= ~(LCM_GPIO_DAC_SLOAD);
+- udelay(2);
+-
+-#elif defined(CONFIG_COLLIE_PCM1717)
+-
+- LCM_GPO &= ~(LCM_GPIO_DAC_SLOAD);
+- udelay(1000);
+- LCM_GPO |= (LCM_GPIO_DAC_SLOAD);
+- udelay(1000);
+- LCM_GPO &= ~(LCM_GPIO_DAC_SCK);
+- udelay(1000);
+-
+- for (i = 0; i < 16; i++)
+- Collie_DAC_sendbit(data >> (15 - i));
+-
+- LCM_GPO &= ~(LCM_GPIO_DAC_SLOAD);
+- udelay(1000);
+- LCM_GPO |= (LCM_GPIO_DAC_SLOAD);
+- udelay(1000);
+- LCM_GPO &= ~(LCM_GPIO_DAC_SLOAD);
+- udelay(1000);
+-
+-#endif
+- LEAVE(TRACE_SENDDATA,"Collie_DAC_sendword");
+ }
+
+-void
+-Collie_audio_power_on(void)
++
++static inline void Collie_sound_hard_init(void)
+ {
+- int send_data;
++ Collie_hard_mute_init();
++ Collie_audio_clock_init();
++ Collie_paif_off();
++ Collie_volume_init();
++ Collie_ssp_init();
++ Collie_MIC_init();
++ Collie_soft_mute_on();
++ Collie_DAC_on();
++}
+
+- ENTER(TRACE_ON,"Collie_audio_power_on");
++void Collie_recording_on(void)
++{
++ collie_recording=1;
++ if (!playing)
++ Collie_DAC_on();
++ else
++ Collie_hard_mute_left_on();
++ Collie_MIC_on();
++}
+
+-#ifdef TRY_DELAY_OFF /* H.Hayami SHARP 2001.12.19 */
+- collieCancelDelayedSilence();
+-#endif
++void Collie_recording_off(void)
++{
++ collie_recording=0;
++ Collie_MIC_off();
++ if (!playing)
++ Collie_DAC_off();
++ else
++ Collie_hard_mute_left_off();
++}
+
++static void Collie_audio_power_on(void)
++{
++ playing=1;
+ collie_amp_init = 0;
+-
+- /* OP_SHDN off */
+- Collie_OP_SHDN_off();
+-
+- /* AMP on */
+- Collie_AMP_on();
+-
+- /* DAC ON */
+- Collie_DAC_on();
+-
+- Collie_MIC_off();
+- Collie_ssp_on();
+-
+- /* LoCoMo Audio clock */
+- Collie_audio_clock_off();
++ if (!collie_recording)
++ Collie_DAC_on();
++ Collie_ssp_on();
++ Collie_audio_clock_off(); /* LoCoMo Audio clock */
+ Collie_audio_clock_on();
+-
+- /* LoCoMo PCM audio interface */
+- Collie_paif_on();
+-
++ Collie_paif_on(); /* LoCoMo PCM audio interface */
+ udelay(1000);
+-
+- /* DAC Setting */
+ Collie_DAC_init();
+-
+ Collie_soft_DAC_on();
+- Collie_soft_mute_init();
++ Collie_soft_mute_off();
++ Collie_hard_mute_off();
++ if (collie_recording)
++ Collie_hard_mute_left_on();
++ Collie_volume_set(sound.volume);
++}
+
+- sound.hard = sound.soft;
++static void Collie_audio_power_off(void){ /* Disable sound only */
++ Collie_volume_set(0);
++ Collie_hard_mute_on();
++ Collie_soft_mute_on();
++ Collie_ssp_off();
++ Collie_soft_DAC_off();
++ Collie_paif_off();
++ Collie_audio_clock_off();
++ if (!collie_recording)
++ Collie_DAC_off();
++ playing=0;
++}
+
+-#if !defined(CONFIG_COLLIE_TS) && !defined(CONFIG_COLLIE_TR0) && \
+- !defined(CONFIG_COLLIE_TR1) && !defined(CONFIG_COLLIE_DEV)
+- /* Volume set */
+- Collie_volume_half_adjust();
+- {
+- int i;
+- for (i=0; i<10*1000; i++) {
+- udelay(1);
++
++static inline void Collie_volume_init(void)
++{
++ m62332_senddata(0, M62332_EVR_CH);
++ collie_volume = 0;
++}
++
++#define VOL_THRES 10
++
++static void Collie_volume_set(int dest)
++{
++ int chn;
++ while (dest != collie_volume) {
++ chn = dest-collie_volume;
++ if (chn>VOL_THRES)
++ chn=VOL_THRES;
++ else if (chn<-VOL_THRES)
++ chn=-VOL_THRES;
++ if (chn) {
++ collie_volume += chn;
++ m62332_senddata(0xff * collie_volume / 100, M62332_EVR_CH);
+ }
++ udelay(100);
+ }
+-#endif
++}
+
+- Collie_soft_mute_off();
+- Collie_hard_mute_off();
++static int sound_set_speed(int speed)
++{
++ if (speed < 0) {
++ return(sound.speed);
++ }
++
++ if (speed<8000) sound.speed=8000;
++ else if (speed<=11025) sound.speed=11025;
++ else if (speed<=16000) sound.speed=16000;
++ else if (speed<=22050) sound.speed=22050;
++ else if (speed<=24000) sound.speed=24000;
++ else if (speed<=32000) sound.speed=32000;
++ else if (speed<=44100) sound.speed=44100;
++ else sound.speed=48000;
++
++ /* LoCoMo Audio clock */
++ Collie_audio_clock_off();
++ Collie_audio_clock_on();
++ return(sound.speed);
++}
+
+- LEAVE(TRACE_ON,"Collie_audio_power_on");
++/*** Mid level stuff *********************************************************/
++
++static void Collie_Set_Volume(int volume)
++{
++ sound.volume = volume & 0xff;
++ sound.volume += ( volume & 0xff00 >> 8);
++ sound.volume >>=1;
++ if (sound.volume>100) sound.volume=100;
+ }
+
+-static void CollieInit(void)
++static int Collie_Get_Volume(void)
+ {
+- ENTER(TRACE_ON,"CollieInit");
+- sound.hard = sound.soft;
+- LEAVE(TRACE_ON,"CollieInit");
++ return ( sound.volume << 8 | sound.volume );
+ }
+
++
+ static void Collie_sq_interrupt(void* id, int size)
+ {
+ audio_buf_t *b = (audio_buf_t *) id;
+- ENTER(TRACE_INTERRUPT,"Collie_sq_interrupt");
+-/***** DEBUG *****
+-printk("Collie_sq_interrupt: Start\n");
+-*****************/
++
+ /*
+ * Current buffer is sent: wake up any process waiting for it.
+ */
+- ENTER(TRACE_SEM,"up sem");
+ up(&b->sem);
+- LEAVE(TRACE_SEM,"up sem");
+-/***** DEBUG *****
+-printk("Collie_sq_interrupt: up End\n");
+-*****************/
+ /* And any process polling on write. */
+- ENTER(TRACE_SEM,"up wait");
+- wake_up(&b->sem.wait);
+- LEAVE(TRACE_SEM,"up wait");
+-/***** DEBUG *****
+-printk("Collie_sq_interrupt: wake_up End\n");
+-*****************/
++ wake_up_interruptible(&b->sem.wait);
++ /* And indicate which was the last buffer sent */
+
+ DPRINTK("Collie_sq_interrupt \n");
+- LEAVE(TRACE_INTERRUPT,"Collie_sq_interrupt");
+ }
+
+
+@@ -1917,191 +829,52 @@
+ {
+ int err;
+
+- ENTER(TRACE_ON,"CollieIrqInit");
+ err = sa1100_request_dma(&collie_dmasound_irq, "dmasound",
+ DMA_Ser4SSPWr);
+ if (err) {
+- LEAVE(TRACE_ON,"CollieIrqInit");
+ return 0;
+ }
+- /* printk("collie_dmasound_irq=%d\n", collie_dmasound_irq); */
++ printk("collie_dmasound_irq=%d\n", collie_dmasound_irq);
+
+ sa1100_dma_set_callback(collie_dmasound_irq,
+ (dma_callback_t)Collie_sq_interrupt);
+
+-
+- /* Disable sound & DMA */
+- Collie_disable_sound();
+-
+- LEAVE(TRACE_ON,"CollieIrqInit");
++ sa1100_dma_stop(COLLIE_SOUND_DMA_CHANNEL);
++ sa1100_dma_flush_all(COLLIE_SOUND_DMA_CHANNEL);
++ Collie_audio_power_off();
+ return(1);
+-
+-}
+-
+-#ifdef MODULE
+-static void CollieIrqCleanUp(void)
+-{
+- ENTER(TRACE_ON,"CollieIrqCleanUp");
+- /* Disable sound & DMA */
+- Collie_disable_sound();
+-
+- /* release the interrupt */
+- free_irq(IRQ_DMA, Collie_sq_interrupt);
+- LEAVE(TRACE_ON,"CollieIrqCleanUp");
+ }
+-#endif /* MODULE */
+-
+
+ static int CollieSetFormat(int format)
+ {
+ int size;
+
+- ENTER(TRACE_ON,"CollieSetFormat");
+- /* Falcon sound DMA supports 8bit and 16bit modes */
+-
+ switch (format) {
+ case AFMT_QUERY:
+- LEAVE(TRACE_ON,"CollieSetFormat");
+- return(sound.soft.format);
+- case AFMT_MU_LAW:
+- size = 8;
+- ct_func = sound.trans->ct_ulaw;
+- break;
+- case AFMT_A_LAW:
+- size = 8;
+- ct_func = sound.trans->ct_alaw;
+- break;
+- case AFMT_S8:
+- size = 8;
+- ct_func = sound.trans->ct_s8;
+- break;
+- case AFMT_U8:
+- size = 8;
+- ct_func = sound.trans->ct_u8;
+- break;
+- case AFMT_S16_BE:
+- size = 16;
+- ct_func = sound.trans->ct_s16be;
+- break;
+- case AFMT_U16_BE:
+- size = 16;
+- ct_func = sound.trans->ct_u16be;
+- break;
+- case AFMT_S16_LE:
+- size = 16;
+- ct_func = sound.trans->ct_s16le;
+- break;
+- case AFMT_U16_LE:
++ return(sound.format);
++ default: /* This is the only one supported by the hardware it seems */
+ size = 16;
+- ct_func = sound.trans->ct_u16le;
+- break;
+- default: /* :-) */
+- size = 8;
+- format = AFMT_S8;
+- }
+-
+- sound.soft.format = format;
+- sound.soft.size = size;
+- if (sound.minDev == SND_DEV_DSP) {
+- sound.dsp.format = format;
+- sound.dsp.size = sound.soft.size;
++ format = AFMT_S16_LE;
+ }
++ sound.format = format;
++ sound.size = size;
+
+- LEAVE(TRACE_ON,"CollieSetFormat");
+ return(format);
+ }
+
+-/*** Machine definitions *****************************************************/
+-
+-static MACHINE machCollie = {
+- DMASND_COLLIE, // int type
+- NULL, // void *dma_alloc(uint, int)
+- NULL, // void dma_free(void *, uint)
+- CollieIrqInit, // void irqinit(void)
+-#ifdef MODULE
+- CollieIrqCleanUp, // void irqcleanup(void)
+-#endif /* MODULE */
+- CollieInit, // void init(void)
+- CollieSilence, // void silence(void)
+- CollieSetFormat, // int setFormat(int)
+- NULL, // int setVolume(int)
+- NULL, // int setBass(int)
+- NULL, // int setTreble(int)
+- NULL, // int setGain(int)
+- NULL // void play(void)
+-};
+-
+-
+-/*** Mid level stuff *********************************************************/
+-
+-
+-static void sound_silence(void)
+-{
+- ENTER(TRACE_ON,"sound_silence");
+- /* update hardware settings one more */
+- //(*sound.mach.init)();
+- (*sound.mach.silence)();
+- LEAVE(TRACE_ON,"sound_silence");
+-
+-}
+-
+-
+-static void sound_init(void)
+-{
+- ENTER(TRACE_ON,"sound_init");
+- (*sound.mach.init)();
+- LEAVE(TRACE_ON,"sound_init");
+-}
+-
+-
+-static int sound_set_format(int format)
+-{
+- ENTER(TRACE_ON,"sound_set_format");
+- LEAVE(TRACE_ON,"sound_set_format");
+- return(*sound.mach.setFormat)(format);
+-}
+-
+-
+-static int sound_set_speed(int speed)
+-{
+- ENTER(TRACE_ON,"sound_set_speed");
+- if (speed < 0) {
+- LEAVE(TRACE_ON,"sound_set_speed");
+- return(sound.soft.speed);
+- }
+-
+- sound.soft.speed = speed;
+- (*sound.mach.init)();
+- if (sound.minDev == SND_DEV_DSP)
+- sound.dsp.speed = sound.soft.speed;
+-
+- /* LoCoMo Audio clock */
+- Collie_audio_clock_off();
+- Collie_audio_clock_on();
+-
+- LEAVE(TRACE_ON,"sound_set_speed");
+- return(sound.soft.speed);
+-}
+
+
+ static int sound_set_stereo(int stereo)
+ {
+- ENTER(TRACE_ON,"sound_set_stereo");
++/* Only stereo is supported by hardware */
+ if (stereo < 0) {
+- LEAVE(TRACE_ON,"sound_set_stereo");
+- return(sound.soft.stereo);
++ return(sound.stereo);
+ }
++ return(1);
++}
+
+- stereo = !!stereo; /* should be 0 or 1 now */
+-
+- sound.soft.stereo = stereo;
+- if (sound.minDev == SND_DEV_DSP)
+- sound.dsp.stereo = stereo;
+- //(*sound.mach.init)();
+
+- LEAVE(TRACE_ON,"sound_set_stereo");
+- return(stereo);
+-}
++/* Higher level stuff ************************************************/
+
+ /*
+ * /dev/mixer abstraction
+@@ -2109,20 +882,15 @@
+
+ static int mixer_open(struct inode *inode, struct file *file)
+ {
+- ENTER(TRACE_ON,"mixer_open");
+ MOD_INC_USE_COUNT;
+ mixer.busy = 1;
+- LEAVE(TRACE_ON,"mixer_open");
+ return 0;
+ }
+
+-
+ static int mixer_release(struct inode *inode, struct file *file)
+ {
+- ENTER(TRACE_ON,"mixer_release");
+ mixer.busy = 0;
+ MOD_DEC_USE_COUNT;
+- LEAVE(TRACE_ON,"mixer_release");
+ return 0;
+ }
+
+@@ -2132,58 +900,37 @@
+ {
+ int data;
+
+- ENTER(TRACE_ON,"mixer_ioctl");
+- switch (sound.mach.type) {
+- case DMASND_COLLIE:
+- {
+- switch (cmd) {
+- case SOUND_MIXER_READ_DEVMASK:
+- LEAVE(TRACE_ON,"mixer_ioctl");
+- return IOCTL_OUT(arg, SOUND_MASK_VOLUME );
+- case SOUND_MIXER_READ_RECMASK:
+- LEAVE(TRACE_ON,"mixer_ioctl");
+- return IOCTL_OUT(arg, 0);
+- case SOUND_MIXER_READ_STEREODEVS:
+- LEAVE(TRACE_ON,"mixer_ioctl");
+- return IOCTL_OUT(arg, SOUND_MASK_VOLUME);
+- case SOUND_MIXER_READ_CAPS:
+- LEAVE(TRACE_ON,"mixer_ioctl");
+- return IOCTL_OUT(arg, 0);
+-
+- case SOUND_MIXER_WRITE_VOLUME:
+- IOCTL_IN(arg, data);
+- Collie_Set_Volume(data);
+- case SOUND_MIXER_READ_VOLUME:
+- LEAVE(TRACE_ON,"mixer_ioctl");
+- return IOCTL_OUT(arg, Collie_Get_Volume());
+-
+- case SOUND_MIXER_READ_TREBLE:
+- LEAVE(TRACE_ON,"mixer_ioctl");
+- return IOCTL_OUT(arg, 0);
+- case SOUND_MIXER_WRITE_TREBLE:
+- LEAVE(TRACE_ON,"mixer_ioctl");
+- return IOCTL_OUT(arg, 0);
+-
+- case SOUND_MIXER_WRITE_MIC:
+- LEAVE(TRACE_ON,"mixer_ioctl");
+- return IOCTL_OUT(arg, 0);
+- case SOUND_MIXER_READ_MIC:
+- LEAVE(TRACE_ON,"mixer_ioctl");
+- return IOCTL_OUT(arg, 0);
+-
+- case SOUND_MIXER_READ_SPEAKER:
+- LEAVE(TRACE_ON,"mixer_ioctl");
+- return IOCTL_OUT(arg, 0);
+- case SOUND_MIXER_WRITE_SPEAKER:
+- LEAVE(TRACE_ON,"mixer_ioctl");
+- return IOCTL_OUT(arg, 0);
+- }
+- break;
+- }
+- }
+- LEAVE(TRACE_ON,"mixer_ioctl");
++ switch (cmd) {
++ case SOUND_MIXER_READ_DEVMASK:
++ return IOCTL_OUT(arg, headphone ? SOUND_MASK_VOLUME : 0 );
++ case SOUND_MIXER_READ_RECMASK:
++ return IOCTL_OUT(arg, 0);
++ case SOUND_MIXER_READ_STEREODEVS:
++ return IOCTL_OUT(arg, headphone ? SOUND_MASK_VOLUME : 0 );
++ case SOUND_MIXER_READ_CAPS:
++ return IOCTL_OUT(arg, 0);
++
++ case SOUND_MIXER_WRITE_VOLUME:
++ IOCTL_IN(arg, data);
++ Collie_Set_Volume(data);
++ case SOUND_MIXER_READ_VOLUME:
++ return IOCTL_OUT(arg, Collie_Get_Volume());
++ case SOUND_MIXER_READ_TREBLE:
++ return IOCTL_OUT(arg, 0);
++ case SOUND_MIXER_WRITE_TREBLE:
++ return IOCTL_OUT(arg, 0);
++
++ case SOUND_MIXER_WRITE_MIC:
++ return IOCTL_OUT(arg, 0);
++ case SOUND_MIXER_READ_MIC:
++ return IOCTL_OUT(arg, 0);
++
++ case SOUND_MIXER_READ_SPEAKER:
++ return IOCTL_OUT(arg, 0);
++ case SOUND_MIXER_WRITE_SPEAKER:
++ return IOCTL_OUT(arg, 0);
++ }
+ return -EINVAL;
+-
+ }
+
+
+@@ -2198,32 +945,13 @@
+
+ static void __init mixer_init(void)
+ {
+-#ifndef MODULE
+- int mixer_unit;
+-#endif
+- ENTER(TRACE_ON,"mixer_init");
+ mixer_unit = register_sound_mixer(&mixer_fops, -1);
+ if (mixer_unit < 0) {
+- LEAVE(TRACE_ON,"mixer_init");
+ return;
+ }
+-
+ mixer.busy = 0;
+- sound.treble = 0;
+- sound.bass = 0;
+- switch (sound.mach.type) {
+- case DMASND_COLLIE:
+- // sound.volume_left = 0x3c;
+- // sound.volume_right = 0x3c;
+- sound.volume_left = 80;
+- sound.volume_right = 80;
+- collie_main_volume = sound.volume_left;
+- break;
+- }
+-
+- // printk("mixer_init : ret \n");
+-
+- LEAVE(TRACE_ON,"mixer_init");
++ sound.volume = 80;
++ Collie_volume_set(sound.volume);
+ }
+
+ /* This function allocates the buffer structure array and buffer data space
+@@ -2237,11 +965,9 @@
+ char *dmabuf = 0;
+ dma_addr_t dmaphys = 0;
+
+- ENTER(TRACE_ON,"sq_allocate_buffers");
+ DPRINTK("sq_allocate_buffers\n");
+
+ if (s->buffers) {
+- LEAVE(TRACE_ON,"sq_allocate_buffers");
+ return -EBUSY;
+ }
+
+@@ -2279,10 +1005,8 @@
+
+ b->start = dmabuf;
+ b->dma_addr = dmaphys;
++ b->idx = frag;
+ sema_init(&b->sem, 1);
+- DPRINTK("buf %d: start %p dma %p\n", frag, b->start,
+- b->dma_addr);
+-
+ dmabuf += s->fragsize;
+ dmaphys += s->fragsize;
+ dmasize -= s->fragsize;
+@@ -2291,13 +1015,12 @@
+ s->buf_idx = 0;
+ s->buf = &s->buffers[0];
+
+- LEAVE(TRACE_ON,"sq_allocate_buffers");
++
+ return 0;
+
+ err:
+ printk("sound driver : unable to allocate audio memory\n ");
+ sq_release_buffers(s);
+- LEAVE(TRACE_ON,"sq_allocate_buffers");
+ return -ENOMEM;
+ }
+
+@@ -2307,7 +1030,6 @@
+
+ static void sq_release_buffers(audio_stream_t * s)
+ {
+- ENTER(TRACE_ON,"sq_release_buffers");
+ DPRINTK("sq_release_buffers\n");
+
+ /* ensure DMA won't run anymore */
+@@ -2328,7 +1050,6 @@
+
+ s->buf_idx = 0;
+ s->buf = NULL;
+- LEAVE(TRACE_ON,"sq_release_buffers");
+ }
+
+ static ssize_t sq_write(struct file *file, const char *src, size_t uLeft,
+@@ -2339,27 +1060,20 @@
+ u_char *dest;
+ ssize_t uUsed, bUsed, bLeft, ret = 0;
+
+- ENTER(TRACE_WRITE,"sq_write");
+ DPRINTK("sq_write: uLeft=%d\n", uLeft);
+
+- /* OP_SHDN on */
+- Collie_OP_SHDN_on();
+-
+ switch (file->f_flags & O_ACCMODE) {
+ case O_WRONLY:
+ case O_RDWR:
+ break;
+ default:
+- LEAVE(TRACE_WRITE,"sq_write1");
+ return -EPERM;
+ }
+
+ if (!s->buffers && sq_allocate_buffers(s)) {
+- LEAVE(TRACE_WRITE,"sq_write2");
+ return -ENOMEM;
+ }
+
+-#if 1
+ if (collie_resume == 1) {
+ int i;
+ collie_resume = 0;
+@@ -2367,10 +1081,9 @@
+ udelay(1);
+ }
+ }
+-#endif
+ #ifdef CONFIG_PM
+ /* Auto Power off cancel */
+- autoPowerCancel = 0;
++// autoPowerCancel = 0;
+ #endif
+
+ while (uLeft > 0) {
+@@ -2379,41 +1092,30 @@
+ /* Wait for a buffer to become free */
+ if (file->f_flags & O_NONBLOCK) {
+ ret = -EAGAIN;
+- ENTER(TRACE_SEM,"down_try sem");
+ if (down_trylock(&b->sem)) {
+- LEAVE(TRACE_SEM,"down_try1 sem");
+ break;
+ }
+- LEAVE(TRACE_SEM,"down_try2 sem");
+ } else {
+ ret = -ERESTARTSYS;
+- ENTER(TRACE_SEM,"down_int sem");
+- //printk("### 0x%08x:%d\n", &b->sem.count, atomic_read(&b->sem.count));
+ if (down_interruptible(&b->sem)) {
+- LEAVE(TRACE_SEM,"down_int1 sem");
+ break;
+ }
+- LEAVE(TRACE_SEM,"down_int2 sem");
+ }
+
+ dest = b->start + b->size;
+ bUsed = 0;
+ bLeft = s->fragsize - b->size;
+
+- if (ct_func) {
+- uUsed = ct_func(src, uLeft, dest, &bUsed, bLeft);
++ if (collie_ct_s16) {
++ uUsed = collie_ct_s16(src, uLeft, dest, &bUsed, bLeft);
+ cpu_cache_clean_invalidate_range((unsigned long)dest,
+ (unsigned long)(dest+(audio_fragsize)), 0);
+ } else {
+- LEAVE(TRACE_WRITE,"sq_write3");
+ return -EFAULT;
+ }
+
+ if (uUsed < 0) {
+- ENTER(TRACE_SEM,"up sem");
+ up(&b->sem);
+- LEAVE(TRACE_SEM,"up sem");
+- LEAVE(TRACE_WRITE,"sq_write4");
+ return -EFAULT;
+ }
+ src += uUsed;
+@@ -2421,9 +1123,7 @@
+ b->size += bUsed;
+
+ if (b->size < s->fragsize) {
+- ENTER(TRACE_SEM,"up sem");
+ up(&b->sem);
+- LEAVE(TRACE_SEM,"up sem");
+ break;
+ }
+
+@@ -2431,7 +1131,7 @@
+ sa1100_dma_queue_buffer(COLLIE_SOUND_DMA_CHANNEL,
+ (void *) b, b->dma_addr, b->size);
+
+- Collie_volume_half_adjust();
++ Collie_volume_set(sound.volume);
+
+ b->size = 0; /* indicate that the buffer has been sent */
+ NEXT_BUF(s, buf);
+@@ -2440,7 +1140,6 @@
+ if ((src - buffer0))
+ ret = src - buffer0;
+ DPRINTK("sq_write: return=%d\n", ret);
+- LEAVE(TRACE_WRITE,"sq_write0");
+ return ret;
+ }
+
+@@ -2450,7 +1149,6 @@
+ unsigned int mask = 0;
+ int i;
+
+- ENTER(TRACE_ON,"sq_poll");
+ DPRINTK("sq_poll(): mode=%s%s\n",
+ (file->f_mode & FMODE_READ) ? "r" : "",
+ (file->f_mode & FMODE_WRITE) ? "w" : "");
+@@ -2458,12 +1156,9 @@
+ if (file->f_mode & FMODE_WRITE) {
+ if (!output_stream.buffers
+ && sq_allocate_buffers(&output_stream)) {
+- LEAVE(TRACE_ON,"sq_poll");
+ return -ENOMEM;
+ }
+- ENTER(TRACE_SEM,"poll_wait wait");
+ poll_wait(file, &output_stream.buf->sem.wait, wait);
+- LEAVE(TRACE_SEM,"poll_wait wait");
+ }
+
+ if (file->f_mode & FMODE_WRITE) {
+@@ -2477,65 +1172,33 @@
+ (mask & POLLIN) ? "r" : "",
+ (mask & POLLOUT) ? "w" : "");
+
+- LEAVE(TRACE_ON,"sq_poll");
+ return mask;
+ }
+
+ static int sq_open(struct inode *inode, struct file *file)
+ {
+- ENTER(TRACE_ON,"sq_open");
+ DPRINTK("sq_open\n");
+
+ if (((file->f_flags & O_ACCMODE) == O_WRONLY)
+ || ((file->f_flags & O_ACCMODE) == O_RDWR)) {
+-#if 0
+- MOD_INC_USE_COUNT;
+- while(audio_wr_refcount) {
+- SLEEP(open_queue, ONE_SECOND);
+- if (SIGNAL_RECEIVED) {
+- MOD_DEC_USE_COUNT;
+- LEAVE(TRACE_ON,"sq_open");
+- return -EINTR;
+- }
+- }
+-#else
+ if (audio_wr_refcount) {
+ DPRINTK(" sq_open EBUSY\n");
+- LEAVE(TRACE_ON,"sq_open");
+ return -EBUSY;
+ }
+ MOD_INC_USE_COUNT;
+-#endif
+ audio_wr_refcount++;
+ } else {
+ DPRINTK(" sq_open EINVAL\n");
+- LEAVE(TRACE_ON,"sq_open");
+ return -EINVAL;
+ }
+
+- if (audio_wr_refcount == 1) {
+- DPRINTK("cold\n");
+-
+- audio_fragsize = AUDIO_FRAGSIZE_DEFAULT;
+- audio_nbfrags = AUDIO_NBFRAGS_DEFAULT;
+- sq_release_buffers(&output_stream);
+- sound.minDev = MINOR(inode->i_rdev) & 0x0f;
+- sound.soft = sound.dsp;
+- sound.hard = sound.dsp;
+-
+- if ((MINOR(inode->i_rdev) & 0x0f) == SND_DEV_AUDIO) {
+- sound_set_speed(8000);
+- sound_set_stereo(0);
+- sound_set_format(AFMT_MU_LAW);
+- }
+- Collie_audio_power_on();
+- }
+
+-#if 0
+- MOD_INC_USE_COUNT;
+-#endif
+- LEAVE(TRACE_ON,"sq_open");
+- return 0;
++ audio_fragsize = AUDIO_FRAGSIZE_DEFAULT;
++ audio_nbfrags = AUDIO_NBFRAGS_DEFAULT;
++ sq_release_buffers(&output_stream);
++ output_stream.buf_idx=0;
++ Collie_audio_power_on();
++ return 0;
+ }
+
+ static int sq_fsync(struct file *filp, struct dentry *dentry)
+@@ -2543,11 +1206,9 @@
+ audio_stream_t *s = &output_stream;
+ audio_buf_t *b = s->buf;
+
+- ENTER(TRACE_ON,"sq_fsync");
+ DPRINTK("sq_fsync\n");
+
+ if (!s->buffers) {
+- LEAVE(TRACE_ON,"sq_fsync");
+ return 0;
+ }
+
+@@ -2557,12 +1218,10 @@
+
+ #ifdef CONFIG_PM
+ /* Auto Power off cancel */
+- autoPowerCancel = 0;
++// autoPowerCancel = 0;
+ #endif
+
+- ENTER(TRACE_SEM,"down sem");
+ down(&b->sem);
+- LEAVE(TRACE_SEM,"down sem");
+ sa1100_dma_queue_buffer(COLLIE_SOUND_DMA_CHANNEL,
+ (void *) b, b->dma_addr, b->size);
+ b->size = 0;
+@@ -2576,23 +1235,15 @@
+ * - the buffer was already free thus nothing else to sync.
+ */
+ b = s->buffers + ((s->nbfrags + s->buf_idx - 1) % s->nbfrags);
+- ENTER(TRACE_SEM,"down-int sem");
+ if (down_interruptible(&b->sem)) {
+- LEAVE(TRACE_SEM,"down-int sem");
+- LEAVE(TRACE_ON,"sq_fsync");
+ return -EINTR;
+ }
+- LEAVE(TRACE_SEM,"down-int sem");
+- ENTER(TRACE_SEM,"up sem");
+ up(&b->sem);
+- LEAVE(TRACE_SEM,"up sem");
+- LEAVE(TRACE_ON,"sq_fsync");
+ return 0;
+ }
+
+ static int sq_release(struct inode *inode, struct file *file)
+ {
+- ENTER(TRACE_ON,"sq_release");
+ DPRINTK("sq_release\n");
+
+ switch (file->f_flags & O_ACCMODE) {
+@@ -2606,24 +1257,12 @@
+ }
+
+ if (!audio_wr_refcount) {
+- sound.soft = sound.dsp;
+- sound.hard = sound.dsp;
+- sound_silence();
+- Collie_OP_SHDN_off();
++ sa1100_dma_stop(COLLIE_SOUND_DMA_CHANNEL);
++ sa1100_dma_flush_all(COLLIE_SOUND_DMA_CHANNEL);
++ Collie_audio_power_off();
+ }
+
+-#if 0
+- switch (file->f_flags & O_ACCMODE) {
+- case O_WRONLY:
+- case O_RDWR:
+- if (!audio_wr_refcount) {
+- WAKE_UP(open_queue);
+- }
+- }
+-#endif
+-
+ MOD_DEC_USE_COUNT;
+- LEAVE(TRACE_ON,"sq_release");
+ return 0;
+ }
+
+@@ -2634,8 +1273,8 @@
+ u_long fmt;
+ int data;
+ long val;
++// audio_buf_info abinfo;
+
+- ENTER(TRACE_ON,"sq_ioctl");
+ switch (cmd) {
+ case SNDCTL_DSP_RESET:
+ switch (file->f_flags & O_ACCMODE) {
+@@ -2643,11 +1282,9 @@
+ case O_RDWR:
+ sq_release_buffers(&output_stream);
+ }
+- LEAVE(TRACE_ON,"sq_ioctl");
+ return 0;
+ case SNDCTL_DSP_POST:
+ case SNDCTL_DSP_SYNC:
+- LEAVE(TRACE_ON,"sq_ioctl");
+ return sq_fsync(file, file->f_dentry);
+
+ /* ++TeSche: before changing any of these it's
+@@ -2656,59 +1293,34 @@
+ case SNDCTL_DSP_SPEED:
+ sq_fsync(file, file->f_dentry);
+ IOCTL_IN(arg, data);
+- LEAVE(TRACE_ON,"sq_ioctl");
+ return IOCTL_OUT(arg, sound_set_speed(data));
+ case SNDCTL_DSP_STEREO:
+ sq_fsync(file, file->f_dentry);
+ IOCTL_IN(arg, data);
+- LEAVE(TRACE_ON,"sq_ioctl");
+ return IOCTL_OUT(arg, sound_set_stereo(data));
+- case SOUND_PCM_WRITE_CHANNELS:
++ case SNDCTL_DSP_CHANNELS:
+ sq_fsync(file, file->f_dentry);
+ IOCTL_IN(arg, data);
+- LEAVE(TRACE_ON,"sq_ioctl");
+ return IOCTL_OUT(arg, sound_set_stereo(data-1)+1);
+ case SNDCTL_DSP_SETFMT:
+ sq_fsync(file, file->f_dentry);
+ IOCTL_IN(arg, data);
+- LEAVE(TRACE_ON,"sq_ioctl");
+- return IOCTL_OUT(arg, sound_set_format(data));
++ return IOCTL_OUT(arg, CollieSetFormat(data));
+ case SNDCTL_DSP_GETFMTS:
+- fmt = 0;
+- if (sound.trans) {
+- if (sound.trans->ct_ulaw)
+- fmt |= AFMT_MU_LAW;
+- if (sound.trans->ct_alaw)
+- fmt |= AFMT_A_LAW;
+- if (sound.trans->ct_s8)
+- fmt |= AFMT_S8;
+- if (sound.trans->ct_u8)
+- fmt |= AFMT_U8;
+- if (sound.trans->ct_s16be)
+- fmt |= AFMT_S16_BE;
+- if (sound.trans->ct_u16be)
+- fmt |= AFMT_U16_BE;
+- if (sound.trans->ct_s16le)
+- fmt |= AFMT_S16_LE;
+- if (sound.trans->ct_u16le)
+- fmt |= AFMT_U16_LE;
+- }
+- LEAVE(TRACE_ON,"sq_ioctl");
++ fmt = AFMT_S16_LE;
+ return IOCTL_OUT(arg, fmt);
+ case SNDCTL_DSP_GETBLKSIZE:
+- LEAVE(TRACE_ON,"sq_ioctl");
+ return IOCTL_OUT(arg, audio_fragsize);
+ case SNDCTL_DSP_SUBDIVIDE:
+ break;
+ case SNDCTL_DSP_SETFRAGMENT:
+ if (output_stream.buffers) {
+- LEAVE(TRACE_ON,"sq_ioctl");
+ return -EBUSY;
+ }
+ get_user(val, (long *) arg);
+ audio_fragsize = 1 << (val & 0xFFFF);
+- if (audio_fragsize < 16)
+- audio_fragsize = 16;
++ if (audio_fragsize < 256)
++ audio_fragsize = 256;
+ if (audio_fragsize > 16384)
+ audio_fragsize = 16384;
+ audio_nbfrags = (val >> 16) & 0x7FFF;
+@@ -2717,46 +1329,54 @@
+ if (audio_nbfrags * audio_fragsize > 128 * 1024)
+ audio_nbfrags = 128 * 1024 / audio_fragsize;
+ if (sq_allocate_buffers(&output_stream)) {
+- LEAVE(TRACE_ON,"sq_ioctl");
+ return -ENOMEM;
+ }
+- LEAVE(TRACE_ON,"sq_ioctl");
+ return 0;
+
+-#if 1 // 2003.2.14
++/* case SNDCTL_DSP_GETOSPACE:
++ abinfo.fragsize = audio_fragsize;
++ abinfo.fragstotal = audio_nbfrags;
++ abinfo.fragments = lastsent-output_stream.buf_idx;
++ if (abinfo.fragments<0)
++ abinfo.fragments += abinfo.fragstotal;
++ abinfo.bytes = abinfo.fragments*abinfo.fragsize;
++ return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
++*/
+ case SNDCTL_DSP_GETOSPACE:
+ {
+- audio_buf_info inf = { 0, };
++ audio_stream_t *s = &output_stream;
++ audio_buf_info *inf = (audio_buf_info *) arg;
++ int err = verify_area(VERIFY_WRITE, inf, sizeof(*inf));
+ int i;
++ int frags = 0, bytes = 0;
+
+- if (!(file->f_mode & FMODE_WRITE))
+- return -EINVAL;
+- if (!output_stream.buffers && sq_allocate_buffers(&output_stream))
+- return -ENOMEM;
+- for (i = 0; i < output_stream.nbfrags; i++) {
+- if (atomic_read(&output_stream.buffers[i].sem.count) > 0) {
+- if (output_stream.buffers[i].size == 0)
+- inf.fragments++;
+- inf.bytes += output_stream.fragsize - output_stream.buffers[i].size;
+- }
++ if (err)
++ return err;
++ if (output_stream.buffers) {
++ for (i = 0; i < s->nbfrags; i++) {
++ if (atomic_read(&s->buffers[i].sem.count) > 0) {
++ if (s->buffers[i].size == 0) frags++;
++ bytes += s->fragsize - s->buffers[i].size;
++ }
++ }
++ put_user(s->nbfrags, &inf->fragstotal);
++ put_user(s->fragsize, &inf->fragsize);
++ } else {
++ frags=audio_nbfrags;
++ bytes=frags*audio_fragsize;
++ put_user(frags, &inf->fragstotal);
++ put_user(audio_fragsize, &inf->fragsize);
+ }
+- inf.fragstotal = output_stream.nbfrags;
+- inf.fragsize = output_stream.fragsize;
+- return copy_to_user((void *)arg, &inf, sizeof(inf));
++ put_user(frags, &inf->fragments);
++ return put_user(bytes, &inf->bytes);
+ }
+-#endif
+-
+
+ default:
+- LEAVE(TRACE_ON,"sq_ioctl");
+ return mixer_ioctl(inode, file, cmd, arg);
+ }
+- LEAVE(TRACE_ON,"sq_ioctl");
+ return -EINVAL;
+ }
+
+-
+-
+ static struct file_operations sq_fops =
+ {
+ llseek: sound_lseek,
+@@ -2770,40 +1390,18 @@
+
+ static void __init sq_init(void)
+ {
+-#ifndef MODULE
+- int sq_unit;
+-#endif
+- ENTER(TRACE_ON,"sq_init");
+ sq_unit = register_sound_dsp(&sq_fops, -1);
+ if (sq_unit < 0) {
+- LEAVE(TRACE_ON,"sq_init");
+ return;
+ }
+
+- /* whatever you like as startup mode for /dev/dsp,
+- * (/dev/audio hasn't got a startup mode). note that
+- * once changed a new open() will *not* restore these!
+- */
+- sound.dsp.format = AFMT_S16_LE;
+-
+- sound.dsp.stereo = 0;
+- sound.dsp.size = 16;
+-
+- /* set minimum rate possible without expanding */
+- switch (sound.mach.type) {
+- case DMASND_COLLIE:
+- sound.dsp.speed = 8000;
+- break;
+- }
+-
+- /* before the first open to /dev/dsp this wouldn't be set */
+- sound.soft = sound.dsp;
+- sound.hard = sound.dsp;
+- sound.trans = &transCollie;
+-
+- CollieSetFormat(sound.dsp.format);
+- sound_silence();
+- LEAVE(TRACE_ON,"sq_init");
++ sound.format = AFMT_S16_LE;
++ sound.stereo = 1;
++ sound.speed = 44100;
++
++ CollieSetFormat(AFMT_S16_LE);
++ Collie_audio_power_off();
++ output_stream.buf=output_stream.buffers=NULL;
+ }
+
+ /*
+@@ -2816,9 +1414,7 @@
+ char *buffer = state.buf;
+ int len = 0;
+
+- ENTER(TRACE_ON,"state_open");
+ if (state.busy) {
+- LEAVE(TRACE_ON,"state_open");
+ return -EBUSY;
+ }
+
+@@ -2828,8 +1424,8 @@
+
+ len += sprintf(buffer+len, " COLLIE DMA sound driver:\n");
+
+- len += sprintf(buffer+len, "\tsound.format = 0x%x", sound.soft.format);
+- switch (sound.soft.format) {
++ len += sprintf(buffer+len, "\tsound.format = 0x%x", sound.format);
++ switch (sound.format) {
+ case AFMT_MU_LAW:
+ len += sprintf(buffer+len, " (mu-law)");
+ break;
+@@ -2857,22 +1453,19 @@
+ }
+ len += sprintf(buffer+len, "\n");
+ len += sprintf(buffer+len, "\tsound.speed = %dHz (phys. %dHz)\n",
+- sound.soft.speed, sound.hard.speed);
++ sound.speed, sound.speed);
+ len += sprintf(buffer+len, "\tsound.stereo = 0x%x (%s)\n",
+- sound.soft.stereo,
+- sound.soft.stereo ? "stereo" : "mono");
++ sound.stereo,
++ sound.stereo ? "stereo" : "mono");
+ state.len = len;
+- LEAVE(TRACE_ON,"state_open");
+ return 0;
+ }
+
+
+ static int state_release(struct inode *inode, struct file *file)
+ {
+- ENTER(TRACE_ON,"state_release");
+ state.busy = 0;
+ MOD_DEC_USE_COUNT;
+- LEAVE(TRACE_ON,"state_release");
+ return 0;
+ }
+
+@@ -2881,19 +1474,15 @@
+ loff_t *ppos)
+ {
+ int n = state.len - state.ptr;
+- ENTER(TRACE_ON,"state_read");
+ if (n > count)
+ n = count;
+ if (n <= 0) {
+- LEAVE(TRACE_ON,"state_read");
+ return 0;
+ }
+ if (copy_to_user(buf, &state.buf[state.ptr], n)) {
+- LEAVE(TRACE_ON,"state_read");
+ return -EFAULT;
+ }
+ state.ptr += n;
+- LEAVE(TRACE_ON,"state_read");
+ return n;
+ }
+
+@@ -2909,20 +1498,11 @@
+
+ static void __init state_init(void)
+ {
+-#ifndef MODULE
+- int state_unit;
+-#endif
+- ENTER(TRACE_ON,"state_unit");
+ state_unit = register_sound_special(&state_fops, SND_DEV_STATUS);
+ if (state_unit < 0) {
+- LEAVE(TRACE_ON,"state_unit");
+ return;
+ }
+ state.busy = 0;
+-
+- // printk("state_init : ret \n");
+- LEAVE(TRACE_ON,"state_unit");
+-
+ }
+
+
+@@ -2930,8 +1510,6 @@
+
+ static long long sound_lseek(struct file *file, long long offset, int orig)
+ {
+- ENTER(TRACE_ON,"sound_lseek");
+- LEAVE(TRACE_ON,"sound_lseek");
+ return -ESPIPE;
+ }
+
+@@ -2941,96 +1519,41 @@
+ static int collie_sound_pm_callback(struct pm_dev *pm_dev,
+ pm_request_t req, void *data)
+ {
+- ENTER(TRACE_PM,"collie_sound_pm_callback");
+ switch (req) {
+ case PM_SUSPEND:
+ #ifdef COLLIE_TRY_ONE
+ disable_irq(IRQ_GPIO_nREMOCON_INT);
+ #endif
+-#ifdef TRY_DELAY_OFF /* H.Hayami SHARP 2001.12.19 */
+- collieDoDelayedSilence();
+- collieCancelDelayedSilence();
+-#endif
+- if (audio_wr_refcount == 1) {
+- Collie_volume_off();
+- Collie_hard_mute_on();
+- Collie_soft_mute_on();
+- sa1100_dma_sleep((dmach_t)COLLIE_SOUND_DMA_CHANNEL);
+-
+-#if 0 /* H.Hayami SHARP 2001.12.18 */
+-#if !defined(CONFIG_COLLIE_TS) && !defined(CONFIG_COLLIE_TR0) && \
+- !defined(CONFIG_COLLIE_TR1) && !defined(CONFIG_COLLIE_DEV)
+- Collie_volume_off();
+-#endif
+-#endif
+- Collie_OP_SHDN_off();
+- Collie_soft_DAC_off();
+- Collie_paif_off();
+- Collie_audio_clock_off();
+- //Collie_MIC_on();
+- Collie_DAC_off();
+- Collie_AMP_off();
+- } else {
+- sa1100_dma_sleep((dmach_t)COLLIE_SOUND_DMA_CHANNEL);
+- }
+- Collie_sound_hard_term();
++ sa1100_dma_sleep((dmach_t)COLLIE_SOUND_DMA_CHANNEL);
++ Collie_audio_power_off();
+ break;
+ case PM_RESUME:
+-/***** DEBUG *****g
+-printk("collie_sound_pm_callback: audio_wr_refcount=%d\n", audio_wr_refcount);
+-*****************/
++
+ #ifdef COLLIE_TRY_ONE
+ enable_irq(IRQ_GPIO_nREMOCON_INT);
+ #endif
+-
+- Collie_sound_hard_init();
+-
+- if (audio_wr_refcount == 1) {
+- collie_resume = 1;
+-
+- Collie_audio_power_on();
+-
+- sa1100_dma_wakeup((dmach_t)COLLIE_SOUND_DMA_CHANNEL);
+-#if 0 /* H.Hayami SHARP 2001.12.18 */
+- Collie_soft_mute_off();
+- Collie_hard_mute_off();
+-#endif
+- } else {
++ Collie_sound_hard_init(); /* this needs to be done! */
++ collie_resume = 1;
++ Collie_audio_power_off();
++ if (audio_wr_refcount) Collie_audio_power_on();
++ if (collie_recording) Collie_recording_on();
++ sa1100_dma_wakeup((dmach_t)COLLIE_SOUND_DMA_CHANNEL);
+ #ifdef COLLIE_TRY_ONE
+- if ( !( GPLR & GPIO_nREMOCON_INT ) )
++ if ( !( GPLR & GPIO_nREMOCON_INT ) )
+ Collie_DAC_on();
+ #endif
+- sa1100_dma_wakeup((dmach_t)COLLIE_SOUND_DMA_CHANNEL);
+- }
+-
+-
+ break;
+-
+ }
+- LEAVE(TRACE_PM,"collie_sound_pm_callback");
+ return 0;
+ }
+ #endif
+
+
+ #ifdef COLLIE_TRY_ONE
+-
+-static void collie_audio_on(void)
+-{
+- while(1) {
+- sleep_on(&audio_on);
+-
+- /* DAC ON */
+- Collie_DAC_on();
+- // printk("call audio on \n");
+-
+- }
+-}
+-
+ void Collie_rc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+ {
+- // printk("int !\n");
+- wake_up(&audio_on);
++ headphone=!headphone;
++ printk("%s headphone \n",headphone ? "connected" : "disconnected");
+ }
+ #endif
+
+@@ -3038,113 +1561,85 @@
+
+ int __init Collie_sound_init(void)
+ {
+- int has_sound = 0;
+-
+-
+- ENTER(TRACE_ON,"Collie_sound_init");
+- has_sound = 1;
+- sound.mach = machCollie;
+-
+- if (!has_sound) {
+- LEAVE(TRACE_ON,"Collie_sound_init");
+- return -1;
+- }
+-
+-#ifdef TRY_DELAY_OFF /* H.Hayami SHARP 2001.12.19 */
+- sema_init(&df_sem, 1);
+- kernel_thread(collieDelayedSilence, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
+-#endif
+-
+ Collie_sound_hard_init();
+-
+- if (!sound.mach.irqinit()) {
++ if (!CollieIrqInit()) {
+ printk("Sound driver: Interrupt initialization failed\n");
+- LEAVE(TRACE_ON,"Collie_sound_init");
+ return -1;
+ }
+-
+- /* Set up sound queue, /dev/audio and /dev/dsp. */
+-
+ /* Set default settings. */
+ sq_init();
+-
+ /* Set up /dev/sndstat. */
+ state_init();
+-
+ /* Set up /dev/mixer. */
+ mixer_init();
+-
+ #ifdef MODULE
+ irq_installed = 1;
+ #endif
+-
+ printk("Collie Sound Driver Installed\n");
+-
+ #ifdef CONFIG_PM
+ collie_sound_pm_dev = pm_register(PM_SYS_DEV, 0,
+ collie_sound_pm_callback);
+ #endif
+-
+-
+ #ifdef COLLIE_TRY_ONE
+ /* enable int sw */
+ collie_rc_set_int_mode();
+-
+ /* GPIO15(int):IN, GPIO18(sw):OUT */
+ GPDR = ((GPDR)&~GPIO_nREMOCON_INT)|GPIO_REMOCON_ADC_SW;
+-
+ /* GPIO15,18:not Alternate */
+ GAFR &= ~(GPIO_nREMOCON_INT|GPIO_REMOCON_ADC_SW);
+-
++ /* Initialize headphone state */
++ headphone=!(GPLR & GPIO_nREMOCON_INT);
+ /* GPIO15:Falling Edge */
+- set_GPIO_IRQ_edge(GPIO_nREMOCON_INT, GPIO_FALLING_EDGE);
+-
++ set_GPIO_IRQ_edge(GPIO_nREMOCON_INT, GPIO_BOTH_EDGES);
+ /* Register interrupt handler */
+ if ( request_irq(IRQ_GPIO_nREMOCON_INT, Collie_rc_interrupt,
+- SA_INTERRUPT, "INSERT-HEADPHONE", Collie_rc_interrupt)) {
+- printk("%s: request_irq(%d) failed.\n",
+- __FUNCTION__, IRQ_GPIO_nREMOCON_INT);
+- }
++ SA_INTERRUPT, "headphone", 0)) {
++ printk("headphone: request_irq failed.\n");
+
+- /* Make threads */
+- kernel_thread(collie_audio_on, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD);
++ }
++ printk("Requested irq collie_rc succesfully (headphone) \n");
++ printk("Headphone is now %s\n",headphone ? "connected" : "disconnected");
+ #endif
+
+-
+- LEAVE(TRACE_ON,"Collie_sound_init");
++ Collie_audio_power_on(); // decreasing rec. noise?
++ Collie_audio_power_off();
+ return 0;
+ }
+
+-module_init(Collie_sound_init);
+-
+-
+ #ifdef MODULE
+-
+-int init_module(void)
++static int collie_ssp_init_module(void)
+ {
+- ENTER(TRACE_ON,"init_module");
+ Collie_sound_init();
+- LEAVE(TRACE_ON,"init_module");
+ return 0;
+ }
+
+-void cleanup_module(void)
++static void collie_ssp_cleanup_module(void)
+ {
+- ENTER(TRACE_ON,"cleanup_module");
++#ifdef CONFIG_PM
++ pm_unregister(collie_sound_pm_dev);
++#endif
+ if (irq_installed) {
+- sound_silence();
+- sound.mach.irqcleanup();
++ sa1100_dma_stop(COLLIE_SOUND_DMA_CHANNEL);
++ sa1100_dma_flush_all(COLLIE_SOUND_DMA_CHANNEL);
++ Collie_audio_power_off();
++ sa1100_free_dma(COLLIE_SOUND_DMA_CHANNEL);
+ }
+-
+- sq_release_buffers();
+-
+- if (mixer_unit >= 0)
+- unregister_sound_mixer(mixer_unit);
+- if (state_unit >= 0)
+- unregister_sound_special(state_unit);
+- if (sq_unit >= 0)
+- unregister_sound_dsp(sq_unit);
+- LEAVE(TRACE_ON,"cleanup_module");
+-}
+-
++#ifdef COLLIE_TRY_ONE
++ free_irq(IRQ_GPIO_nREMOCON_INT,0);
++#endif
++ unregister_sound_mixer(mixer_unit);
++ unregister_sound_special(state_unit);
++ unregister_sound_dsp(sq_unit);
++ printk("collie_ssp has to go now, see you later!\n");
++}
++
++module_init(collie_ssp_init_module);
++module_exit(collie_ssp_cleanup_module);
++MODULE_DESCRIPTION("Collie 16bit sound driver");
++MODULE_AUTHOR("SHARP");
++MODULE_LICENSE("GPL");
++EXPORT_SYMBOL(Collie_recording_off);
++EXPORT_SYMBOL(Collie_recording_on);
++EXPORT_SYMBOL(collie_recording);
+ #endif /* MODULE */
++
+diff -Nuar linux-2.4.18/drivers/sound/collie_tc35143af.c linux-2.4.18p/drivers/sound/collie_tc35143af.c
+--- linux-2.4.18/drivers/sound/collie_tc35143af.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.4.18p/drivers/sound/collie_tc35143af.c 2004-10-13 15:26:20.336631864 +0200
+@@ -0,0 +1,1457 @@
++/*
++ TODO
++
++ buzzer compatibility is not fool proof - if an app starts sending buzzer ioctls
++ and then write or read, nothing good will happen / but this api is obsolote anyway
++
++ mixer_ioctls missing: write/read_mic/igain (there are sane defaults for those)
++
++ fixed samplerate at 22050hz (mono,s16_le), although it can be changed
++ between 8000-22050hz hardwarewise
++
++
++ DONE
++
++ buffers are only allocated once, and freed when module is unloaded
++ mute left channel when duplex playing & recording
++ cleanup
++ depend on collie_ssp, and call needed functions when needed
++ (recording noise should be gone too as a consequence)
++ lineo's getospace incorporated (getispace left alone)
++ "optimized" default fragsize and number, so there is now no clicking all the time
++ commented out scndctl_dsp_setfragment so that no application can set bad settings (eg.xmms)
++ if you start reading from this device, than it won't let you write later unless you close it first
++ (and vica-versa)
++ speaker is muted if nothing is playing, so noise is gone
++
++*/
++
++#include <linux/module.h>
++#include <linux/sched.h>
++#include <linux/timer.h>
++#include <linux/poll.h>
++#include <linux/major.h>
++#include <linux/config.h>
++#include <linux/fcntl.h>
++#include <linux/errno.h>
++#include <linux/mm.h>
++#include <linux/slab.h>
++#include <linux/sound.h>
++#include <linux/init.h>
++#include <linux/delay.h>
++
++#include <linux/pm.h>
++
++#include <asm/system.h>
++#include <asm/irq.h>
++#include <asm/pgtable.h>
++#include <asm/uaccess.h>
++#include <asm/io.h>
++#include <asm/dma.h>
++
++#include <asm/ucb1200.h>
++#include <linux/soundcard.h>
++#include <asm/proc/cache.h>
++
++#include <asm/arch/hardware.h>
++#include <asm/arch/tc35143.h>
++
++#undef DEBUG
++#ifdef DEBUG
++#define DPRINTK( x... ) printk( ##x )
++#else
++#define DPRINTK( x... )
++#endif
++
++extern int collie_recording;
++extern void Collie_recording_on(void);
++extern void Collie_recording_off(void);
++
++int collie_tc35143f_irq = -1;
++int collie_tc35143f_input_irq = -1;
++
++#define COLLIE_BUZZER_DMA_CHANNEL (collie_tc35143f_irq)
++#define COLLIE_BUZZER_DMA_CHANNEL_INPUT (collie_tc35143f_input_irq)
++#define COLLIE_GPIO_MIC GPIO_GPIO (17)
++
++#define SND_NDEVS 256 /* Number of supported devices */
++#define SND_DEV_CTL 0 /* Control port /dev/mixer */
++#define SND_DEV_SEQ 1 /* Sequencer output /dev/sequencer (FM synthesizer and MIDI output) */
++#define SND_DEV_MIDIN 2 /* Raw midi access */
++#define SND_DEV_DSP 3 /* Digitized voice /dev/dsp */
++#define SND_DEV_AUDIO 4 /* Sparc compatible /dev/audio */
++#define SND_DEV_DSP16 5 /* Like /dev/dsp but 16 bits/sample */
++#define SND_DEV_STATUS 6 /* /dev/sndstat */
++/* #7 not in use now. Was in 2.4. Free for use after v3.0. */
++#define SND_DEV_SEQ2 8 /* /dev/sequencer, level 2 interface */
++#define SND_DEV_SNDPROC 9 /* /dev/sndproc for programmable devices */
++#define SND_DEV_PSS SND_DEV_SNDPROC
++
++#ifdef MODULE
++static int sq_unit = -1;
++static int mixer_unit = -1;
++static int state_unit = -1;
++static int irq_installed = 0;
++#endif /* MODULE */
++
++#ifdef CONFIG_PM
++static struct pm_dev* collie_sound_pm_dev;
++#endif
++
++/*** Some declarations ***********************************************/
++static int collie_buzzer_volume = 100;
++static int audio_igain = 0;
++static int audio_iamp = 0x05;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,19))
++static struct ucb1x00 * ucbstruct;
++#endif
++static int TC35143f_control_reg_a;
++static int TC35143f_control_reg_b;
++static int TC35143f_mode;
++
++#define AUDIO_NBFRAGS_DEFAULT 32
++#define AUDIO_FRAGSIZE_DEFAULT 2048
++
++typedef struct {
++ int size; /* buffer size */
++ char *start; /* points to actual buffer */
++ dma_addr_t dma_addr; /* physical buffer address */
++ struct semaphore sem; /* down before touching the buffer */
++ int master; /* master owner for buffer allocation */
++ u_int idx; /* buffer index, so that we know which buffer was sent last*/
++} audio_buf_t;
++
++typedef struct {
++ audio_buf_t *buffers; /* pointer to audio buffer structures */
++ audio_buf_t *buf; /* current buffer used by read/write */
++ u_int buf_idx; /* index for the pointer above... */
++ u_int fragsize; /* fragment i.e. buffer size */
++ u_int nbfrags; /* nbr of fragments i.e. buffers */
++} audio_stream_t;
++
++static audio_stream_t output_stream, input_stream;
++
++#define NEXT_BUF(_s_,_b_) { \
++ (_s_)->_b_##_idx++; \
++ (_s_)->_b_##_idx %= (_s_)->nbfrags; \
++ (_s_)->_b_ = (_s_)->buffers + (_s_)->_b_##_idx; }
++
++/* Current specs for incoming audio data */
++static u_int audio_fragsize=AUDIO_FRAGSIZE_DEFAULT;
++static u_int audio_nbfrags=AUDIO_NBFRAGS_DEFAULT;
++
++static volatile int audio_refcount; /* nbr of concurrent open() for playback */
++typedef enum { REC,PLAY,NA,BUZZ } collie_tc_status_t;
++static collie_tc_status_t collie_tc_status;
++int collie_tc_muted;
++
++#define IOCTL_IN(arg, ret) \
++ do { int error = get_user(ret, (int *)(arg)); \
++ if (error) return error; \
++ } while (0)
++#define IOCTL_OUT(arg, ret) ioctl_return((int *)(arg), ret)
++
++/*** "Translations" ************************************************************/
++
++static ssize_t collie_ct_s16(const u_char *userPtr, size_t userCount,
++ u_char frame[], ssize_t *frameUsed,
++ ssize_t frameLeft);
++static signed short ct_out=0;
++/*** Low level stuff *********************************************************/
++
++
++typedef struct {
++ int format; /* AFMT_* */
++ int stereo; /* 0 = mono, 1 = stereo */
++ int size; /* 8/16 bit*/
++ int speed; /* speed */
++ int volume;
++} SETTINGS;
++
++static SETTINGS sound;
++
++#ifdef CONFIG_PM
++//extern int autoPowerCancel;
++#endif
++
++static void Collie_Set_Volume(int volume);
++static int Collie_Get_Volume(void);
++static int CollieIrqInit(void);
++static int CollieSetFormat(int format);
++static void Collie_sq_interrupt(void*, int);
++static int sq_allocate_buffers(audio_stream_t*);
++static void sq_release_buffers(audio_stream_t*);
++
++/*** Mid level stuff *********************************************************/
++static int sound_set_speed(int speed);
++
++/*
++ * /dev/mixer abstraction
++ */
++
++struct sound_mixer {
++ int busy;
++};
++
++static struct sound_mixer mixer;
++
++/*
++ * /dev/sndstat
++ */
++
++/*** Common stuff ********************************************************/
++
++static long long sound_lseek(struct file *file, long long offset, int orig);
++static inline int ioctl_return(int *addr, int value)
++{
++ if (value < 0) {
++ return(value);
++ }
++ return put_user(value, addr)? -EFAULT: 0;
++}
++
++static void wait_ms(int ten_ms)
++{
++ schedule_timeout(ten_ms);
++}
++
++/*** Translation ************************************************************/
++
++static ssize_t collie_ct_s16(const u_char *userPtr, size_t userCount,
++ u_char frame[], ssize_t *frameUsed,
++ ssize_t frameLeft)
++{
++ ssize_t count, used;
++ signed short *fp = (unsigned short *) &frame[*frameUsed];
++ signed short *up = (unsigned short *) userPtr;
++
++ frameLeft >>= 1;
++ userCount >>= 1;
++ used = count = (userCount < frameLeft) ? userCount : frameLeft;
++
++ while (count > 0) {
++ signed short data;
++ if (get_user(data, up++)) {
++ return -EFAULT;
++ } /* lowpass filtering, not that it matters much - something is resonating inside the Zaurus at high frequencies ? */
++ *fp++ = ct_out = (short)( ( (long)data + (long)ct_out ) >> 1LL );
++ count--;
++ }
++
++ *frameUsed += used * 2;
++ return used * 2;
++}
++
++/*** HARDWARE dependent stuff *********************************************************/
++#define VOL_THRES 10
++#define CODEC_ASD_NUMERATOR 13
++/*~ (9216000 / ( 32 * 22050 )) */
++
++static int Collie_Sampling_value(void)
++{
++ int asd = CODEC_ASD_NUMERATOR;
++ DPRINTK("Collie_Sampling_value %x\n",asd);
++ return asd;
++}
++
++static void Collie_sound_hard_init(void)
++{
++ int asd;
++
++ DPRINTK("CollieInit\n");
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,19))
++ ucb1x00_enable(ucbstruct);
++ ucb1x00_io_set_dir(ucbstruct,0, TC35143_GPIO_BUZZER_BIAS);
++ ucb1x00_disable(ucbstruct);
++#else
++ ucb1200_set_io_direction(TC35143_GPIO_BUZZER_BIAS, TC35143_IODIR_OUTPUT);
++#endif
++
++ DPRINTK("TC35143F Init");
++
++ // init MCP
++ asd = Collie_Sampling_value();
++ Ser4MCCR0 &= ~MCCR0_MCE;
++ Ser4MCCR0 &= ~0xff;
++ Ser4MCCR0 |= (MCCR0_ARE | MCCR0_ATE |MCCR0_ADM | MCCR0_ECS | asd);
++ Ser4MCCR0 |= MCCR0_MCE;
++ Ser4MCSR = 0xffffffff;
++
++ DPRINTK("Init MCP %x\n",Ser4MCCR0);
++}
++
++static void Collie_audio_power_on(void)
++{
++ if ( collie_buzzer_volume > 100 ) collie_buzzer_volume = 100;
++ if ( collie_buzzer_volume < 0 ) collie_buzzer_volume = 0;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,19))
++ ucb1x00_enable(ucbstruct);
++#endif
++ TC35143f_control_reg_a = ( TC35143_VDIV_22KHZ );
++ TC35143f_control_reg_b = ( TC35143_VADMUTE | TC35143_VHSMUTE | ( 7 - collie_buzzer_volume / 13));
++ TC35143f_mode = ( TC35143_VOFFCAN | TC35143_VCOF_22_OR_16KHZ );
++ TC35143f_control_reg_a &= ~(TC35143_VINSEL_MASK | TC35143_VGAIN_MASK | TC35143_VAMP_MASK);
++ TC35143f_control_reg_a |= (TC35143_VINSEL_VBIN2 | ((audio_igain & 0x3)<<11) | ((audio_iamp & 0x0f)<<7));
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,19))
++ ucb1x00_reg_write(ucbstruct,TC35143_CONTROL_REG_B , TC35143f_control_reg_b);
++ ucb1x00_reg_write(ucbstruct,TC35143_CONTROL_REG_A , TC35143f_control_reg_a);
++ ucb1x00_reg_write(ucbstruct,TC35143_MODE_REG , TC35143f_mode );
++ ucb1x00_io_write(ucbstruct, TC35143_GPIO_BUZZER_BIAS,0);
++ ucb1x00_disable(ucbstruct);
++#else
++ ucb1200_write_reg(TC35143_CONTROL_REG_B , TC35143f_control_reg_b );
++ ucb1200_write_reg(TC35143_MODE_REG , TC35143f_mode );
++ ucb1200_write_reg(TC35143_CONTROL_REG_A , TC35143f_control_reg_a );
++ ucb1200_set_io(TC35143_GPIO_BUZZER_BIAS, TC35143_IODAT_HIGH);
++#endif
++ collie_tc_muted=1;
++}
++
++static void Collie_audio_power_off(void){ /* Disable sound only */
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,19))
++ ucb1x00_enable(ucbstruct);
++ ucb1x00_io_write(ucbstruct,0, TC35143_GPIO_BUZZER_BIAS);
++#else
++ ucb1200_set_io(TC35143_GPIO_BUZZER_BIAS, TC35143_IODAT_LOW);
++#endif
++
++ TC35143f_control_reg_a = ( TC35143_VDIV_22KHZ );
++ TC35143f_control_reg_b = ( TC35143_ALL_MUTE );
++
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,19))
++ ucb1x00_reg_write(ucbstruct,TC35143_CONTROL_REG_B , TC35143f_control_reg_b);
++ ucb1x00_reg_write(ucbstruct,TC35143_CONTROL_REG_A , TC35143f_control_reg_a);
++ ucb1x00_disable(ucbstruct);
++#else
++ ucb1200_write_reg(TC35143_CONTROL_REG_B , TC35143f_control_reg_b );
++ ucb1200_write_reg(TC35143_CONTROL_REG_A , TC35143f_control_reg_a );
++#endif
++}
++
++static void collie_tc_mute_on(void){
++ unsigned int reg_b;
++ unsigned int reg_a;
++
++ if (!collie_tc_muted) {
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,19))
++ ucb1x00_enable(ucbstruct);
++ reg_b = ucb1x00_reg_read(ucbstruct,TC35143_CONTROL_REG_B);
++ reg_a = ucb1x00_reg_read(ucbstruct,TC35143_CONTROL_REG_A);
++#else
++ reg_b = ucb1200_read_reg(TC35143_CONTROL_REG_B);
++ reg_a = ucb1200_read_reg(TC35143_CONTROL_REG_A);
++#endif
++ reg_b &= ~TC35143_VOUT1_EN;
++ reg_a &= ~TC35143_VOUT2_EN;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,19))
++ ucb1x00_reg_write(ucbstruct,TC35143_CONTROL_REG_A, reg_a);
++ ucb1x00_reg_write(ucbstruct,TC35143_CONTROL_REG_B, reg_b);
++ ucb1x00_disable(ucbstruct);
++#else
++ ucb1200_write_reg(TC35143_CONTROL_REG_A, reg_a);
++ ucb1200_write_reg(TC35143_CONTROL_REG_B, reg_b);
++#endif
++ collie_tc_muted=1;
++ }
++}
++
++static void collie_tc_mute_off(void){
++ unsigned int reg_b;
++ unsigned int reg_a;
++
++ if (collie_tc_muted) {
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,19))
++ ucb1x00_enable(ucbstruct);
++ reg_b = ucb1x00_reg_read(ucbstruct,TC35143_CONTROL_REG_B);
++ reg_a = ucb1x00_reg_read(ucbstruct,TC35143_CONTROL_REG_A);
++#else
++ reg_b = ucb1200_read_reg(TC35143_CONTROL_REG_B);
++ reg_a = ucb1200_read_reg(TC35143_CONTROL_REG_A);
++#endif
++ reg_b |= TC35143_VOUT1_EN ;
++ reg_b &= ~7;
++ reg_b |= ( 7 - collie_buzzer_volume / 13);
++ reg_a |= TC35143_VOUT2_EN;
++ reg_a &= ~(TC35143_VGAIN_MASK | TC35143_VAMP_MASK);
++ reg_a |= (((audio_igain & 0x3)<<11) | ((audio_iamp & 0x0f)<<7));
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,19))
++ ucb1x00_reg_write(ucbstruct,TC35143_CONTROL_REG_A, reg_a);
++ ucb1x00_reg_write(ucbstruct,TC35143_CONTROL_REG_B, reg_b);
++ ucb1x00_disable(ucbstruct);
++#else
++ ucb1200_write_reg(TC35143_CONTROL_REG_A, reg_a);
++ ucb1200_write_reg(TC35143_CONTROL_REG_B, reg_b);
++#endif
++ collie_tc_muted=0;
++ }
++}
++
++
++static void Collie_volume_set(int dest)
++{
++ if (collie_buzzer_volume==dest) return;
++ collie_buzzer_volume=dest;
++ collie_tc_mute_on();
++ collie_tc_mute_off();
++}
++
++
++/*********** GENERAL stuff, same as collie_ssp *******************************/
++
++
++static void Collie_Set_Volume(int volume)
++{
++ sound.volume = volume & 0xff;
++ sound.volume += ( volume & 0xff00 >> 8);
++ sound.volume >>=1;
++ if (sound.volume>100) sound.volume=100;
++}
++
++static int Collie_Get_Volume(void)
++{
++ return ( sound.volume << 8 | sound.volume );
++}
++
++static void Collie_sq_interrupt(void* id, int size)
++{
++ audio_buf_t *b = (audio_buf_t *) id;
++ audio_buf_t *b2 = output_stream.buffers + ((b->idx + 1) % output_stream.nbfrags);
++
++ /* If this is the last buffer for know, let's mute the speaker */
++ if (!down_trylock(&b2->sem)) {
++ collie_tc_mute_on();
++ up(&b2->sem);
++ }
++
++ /*
++ * Current buffer is sent: wake up any process waiting for it.
++ */
++ up(&b->sem);
++ /* And any process polling on write. */
++ wake_up_interruptible(&b->sem.wait);
++
++ DPRINTK("Collie_sq_interrupt \n");
++}
++
++static void Collie_sq_input_interrupt(void* id, int size)
++{
++ audio_buf_t *b = (audio_buf_t *) id;
++ /*
++ * Current buffer is sent: wake up any process waiting for it.
++ */
++ b->size = size;
++ up(&b->sem);
++ /* And any process polling on write. */
++ wake_up_interruptible(&b->sem.wait);
++ /* And indicate which was the last buffer sent */
++
++ DPRINTK("Collie_sq_input_interrupt \n");
++}
++
++
++static int __init CollieIrqInit(void)
++{
++ int err;
++
++ err = sa1100_request_dma(&COLLIE_BUZZER_DMA_CHANNEL, "buzzer output",
++ DMA_Ser4MCP0Wr);
++
++ if (err) {
++ return 0;
++ }
++ printk("collie_tc35143f_irq=%d\n", collie_tc35143f_irq);
++
++ err = sa1100_request_dma(&COLLIE_BUZZER_DMA_CHANNEL_INPUT, "buzzer input",
++ DMA_Ser4MCP0Rd);
++
++ if (err) {
++ return 0;
++ }
++ printk("collie_tc35143f_input_irq=%d\n", collie_tc35143f_input_irq);
++
++
++ sa1100_dma_set_callback(COLLIE_BUZZER_DMA_CHANNEL,
++ (dma_callback_t)Collie_sq_interrupt);
++
++ sa1100_dma_set_callback(COLLIE_BUZZER_DMA_CHANNEL_INPUT,
++ (dma_callback_t)Collie_sq_input_interrupt);
++
++
++ sa1100_dma_stop(COLLIE_BUZZER_DMA_CHANNEL);
++ Collie_audio_power_off();
++ sa1100_dma_stop(COLLIE_BUZZER_DMA_CHANNEL_INPUT);
++ sa1100_dma_flush_all(COLLIE_BUZZER_DMA_CHANNEL);
++ return(1);
++}
++
++static int CollieSetFormat(int format)
++{
++ int size;
++
++ switch (format) {
++ case AFMT_QUERY:
++ return(sound.format);
++ default: /* This is the only one supported by the hardware it seems */
++ size = 16;
++ format = AFMT_S16_LE;
++ }
++ sound.format = format;
++ sound.size = size;
++
++ return(format);
++}
++
++
++static int sound_set_speed(int speed)
++{
++ if (speed < 0) {
++ return(sound.speed);
++ }
++ sound.speed=22050;
++ return(sound.speed);
++}
++
++/* Higher level stuff ************************************************/
++
++/*
++ * /dev/mixer abstraction
++ */
++
++static int mixer_open(struct inode *inode, struct file *file)
++{
++ MOD_INC_USE_COUNT;
++ mixer.busy = 1;
++ return 0;
++}
++
++static int mixer_release(struct inode *inode, struct file *file)
++{
++ mixer.busy = 0;
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++
++static int mixer_ioctl(struct inode *inode, struct file *file, u_int cmd,
++ u_long arg)
++{
++ int data;
++
++ DPRINTK("Got mixer ioctl \n");
++
++ switch (cmd) {
++ case SOUND_MIXER_INFO:
++ DPRINTK("0\n");
++ return 0;
++ case SOUND_OLD_MIXER_INFO:
++ DPRINTK("0\n");
++ return 0;
++
++ case SOUND_MIXER_READ_DEVMASK:
++ DPRINTK("1\n");
++ return IOCTL_OUT(arg, SOUND_MASK_VOLUME | SOUND_MASK_MIC | SOUND_MASK_IGAIN );
++ case SOUND_MIXER_READ_RECMASK:
++ DPRINTK("2\n");
++ return IOCTL_OUT(arg, SOUND_MASK_MIC);
++ case SOUND_MIXER_READ_STEREODEVS:
++ DPRINTK("3\n");
++ return IOCTL_OUT(arg, 0);
++ case SOUND_MIXER_READ_CAPS:
++ DPRINTK("4\n");
++ return IOCTL_OUT(arg, 0);
++
++ case SOUND_MIXER_WRITE_VOLUME:
++ IOCTL_IN(arg, data);
++ Collie_Set_Volume(data);
++ DPRINTK("mix_io returning\n");
++ return IOCTL_OUT(arg, data);
++ case SOUND_MIXER_READ_VOLUME:
++ DPRINTK("5\n");
++ return IOCTL_OUT(arg, Collie_Get_Volume());
++ case SOUND_MIXER_READ_TREBLE:
++ DPRINTK("6\n");
++ return IOCTL_OUT(arg, 0);
++ case SOUND_MIXER_WRITE_TREBLE:
++ DPRINTK("7\n");
++ return IOCTL_OUT(arg, 0);
++
++ case SOUND_MIXER_READ_BASS:
++ DPRINTK("6b\n");
++ return IOCTL_OUT(arg, 0);
++ case SOUND_MIXER_WRITE_BASS:
++ DPRINTK("7b\n");
++ return IOCTL_OUT(arg, 0);
++
++
++ case SOUND_MIXER_WRITE_MIC:
++ case SOUND_MIXER_WRITE_IGAIN:
++ DPRINTK("8\n");
++ return IOCTL_OUT(arg, 100);
++ case SOUND_MIXER_READ_MIC:
++ case SOUND_MIXER_READ_IGAIN:
++ DPRINTK("9\n");
++ return IOCTL_OUT(arg, 0);
++
++ case SOUND_MIXER_READ_SPEAKER:
++ DPRINTK("10\n");
++ return IOCTL_OUT(arg, 0);
++ case SOUND_MIXER_WRITE_SPEAKER:
++ DPRINTK("11\n");
++ return IOCTL_OUT(arg, 0);
++ default:
++ DPRINTK("12 %d\n",cmd);
++ return -ENOSYS;
++ }
++ DPRINTK("EINVAL %d??\n",cmd);
++ return -EINVAL;
++}
++
++
++static struct file_operations mixer_fops =
++{
++ llseek: sound_lseek,
++ ioctl: mixer_ioctl,
++ open: mixer_open,
++ release: mixer_release,
++};
++
++
++static void __init mixer_init(void)
++{
++ mixer_unit = register_sound_mixer(&mixer_fops, -1);
++ if (mixer_unit < 0) {
++ return;
++ }
++ mixer.busy = 0;
++ sound.volume = 100;
++ Collie_volume_set(sound.volume);
++}
++
++/* This function initializes the buffer
++ */
++
++static void sq_clean_buffers(audio_stream_t * s)
++{
++ int frag;
++
++ sa1100_dma_flush_all(COLLIE_BUZZER_DMA_CHANNEL);
++ sa1100_dma_flush_all(COLLIE_BUZZER_DMA_CHANNEL_INPUT);
++
++ s->nbfrags = audio_nbfrags;
++ s->fragsize = audio_fragsize;
++
++ if (!s->buffers)
++ goto err;
++
++ for (frag = 0; frag < s->nbfrags; frag++) {
++ audio_buf_t *b = &s->buffers[frag];
++ b->size=0;
++ sema_init(&b->sem, 1);
++ }
++ s->buf_idx = 0;
++ s->buf = &s->buffers[0];
++ return;
++
++err:
++ printk("sound driver : where did the buffer go ??\n ");
++}
++
++/* This function allocates the buffer structure array and buffer data space
++ * according to the current number of fragments and fragment size.
++ */
++
++static int sq_allocate_buffers(audio_stream_t * s)
++{
++ int frag;
++ int dmasize = 0;
++ char *dmabuf = 0;
++ dma_addr_t dmaphys = 0;
++
++ DPRINTK("sq_allocate_buffers\n");
++
++ if (s->buffers) {
++ return -EBUSY;
++ }
++
++ s->nbfrags = audio_nbfrags;
++ s->fragsize = audio_fragsize;
++
++ s->buffers = (audio_buf_t *)
++ kmalloc(sizeof(audio_buf_t) * s->nbfrags, GFP_KERNEL);
++ if (!s->buffers)
++ goto err;
++ memset(s->buffers, 0, sizeof(audio_buf_t) * s->nbfrags);
++
++ for (frag = 0; frag < s->nbfrags; frag++) {
++ audio_buf_t *b = &s->buffers[frag];
++
++ /*
++ * Let's allocate non-cached memory for DMA buffers.
++ * We try to allocate all memory at once.
++ * If this fails (a common reason is memory fragmentation),
++ * then we allocate more smaller buffers.
++ */
++ if (!dmasize) {
++ dmasize = (s->nbfrags - frag) * s->fragsize;
++ do {
++ dmabuf = consistent_alloc(GFP_KERNEL|GFP_DMA,
++ dmasize,
++ &dmaphys);
++ if (!dmabuf)
++ dmasize -= s->fragsize;
++ } while (!dmabuf && dmasize);
++ if (!dmabuf)
++ goto err;
++ b->master = dmasize;
++ }
++
++ b->start = dmabuf;
++ b->dma_addr = dmaphys;
++ b->idx = frag;
++ sema_init(&b->sem, 1);
++ dmabuf += s->fragsize;
++ dmaphys += s->fragsize;
++ dmasize -= s->fragsize;
++ }
++
++ s->buf_idx = 0;
++ s->buf = &s->buffers[0];
++
++ return 0;
++
++err:
++ printk("sound driver : unable to allocate audio memory\n ");
++ sq_release_buffers(s);
++ return -ENOMEM;
++}
++
++/*
++ * This function frees all buffers
++ */
++
++static void sq_release_buffers(audio_stream_t * s)
++{
++ DPRINTK("sq_release_buffers\n");
++
++ /* ensure DMA won't run anymore */
++ sa1100_dma_flush_all(COLLIE_BUZZER_DMA_CHANNEL);
++ sa1100_dma_flush_all(COLLIE_BUZZER_DMA_CHANNEL_INPUT);
++
++ if (s->buffers) {
++ int frag;
++ for (frag = 0; frag < s->nbfrags; frag++) {
++ if (!s->buffers[frag].master)
++ continue;
++ consistent_free(s->buffers[frag].start,
++ s->buffers[frag].master,
++ s->buffers[frag].dma_addr);
++ }
++ kfree(s->buffers);
++ s->buffers = NULL;
++ }
++
++ s->buf_idx = 0;
++ s->buf = NULL;
++}
++
++static int audio_recording(audio_stream_t * s)
++{
++ int i;
++ unsigned int reg_b;
++
++ if (!collie_recording) {
++ /*
++ * Set TC35143 Audio in enable
++ */
++//// DPRINTK("audio_recording : audio in enable\n");
++//// reg_b = ucb1200_read_reg(TC35143_CONTROL_REG_B);
++//// reg_b &= ~(TC35143_VADMUTE);
++//// reg_b |= (TC35143_VIN_EN | TC35143_VCLP_CLR);
++//// ucb1200_write_reg(TC35143_CONTROL_REG_B, reg_b);
++
++ /*
++ * We must ensure there is an output stream at any time while
++ * recording since this is how the TC35143 gets its clock.
++ * So if there is no playback data to send, the output DMA will
++ * spin with all zeroes.
++ */
++
++ Collie_recording_on();
++ collie_tc_mute_off(); /* This is needed for good volume */
++ DPRINTK("audio_recording : sa1100_dma_set_spin\n");
++ sa1100_dma_set_spin(COLLIE_BUZZER_DMA_CHANNEL,
++ (dma_addr_t) FLUSH_BASE_PHYS, 2048);
++
++ /*
++ * Since we just allocated all buffers, we must send them to
++ * the DMA code before receiving data.
++ */
++ DPRINTK("audio_recording : for loop\n");
++ for (i = 0; i < s->nbfrags; i++) {
++ audio_buf_t *b = s->buf;
++ down(&b->sem);
++ sa1100_dma_queue_buffer(COLLIE_BUZZER_DMA_CHANNEL_INPUT, (void *) b,
++ b->dma_addr, s->fragsize);
++ NEXT_BUF(s, buf);
++ }
++ DPRINTK("audio_recording : End for loop\n");
++
++ /*
++ * Set TC35143 Audio in enable
++ */
++ DPRINTK("audio_recording : audio in enable\n");
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,19))
++ ucb1x00_enable(ucbstruct);
++ ucb1x00_io_write(ucbstruct, 0, TC35143_GPIO_BUZZER_BIAS);
++ reg_b = ucb1x00_reg_read(ucbstruct,TC35143_CONTROL_REG_B);
++#else
++ ucb1200_set_io(TC35143_GPIO_BUZZER_BIAS, TC35143_IODAT_LOW);
++ reg_b = ucb1200_read_reg(TC35143_CONTROL_REG_B);
++#endif
++ reg_b &= ~(TC35143_VADMUTE);
++ reg_b |= (TC35143_VIN_EN | TC35143_VCLP_CLR);
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,19))
++ ucb1x00_reg_write(ucbstruct,TC35143_CONTROL_REG_B, reg_b);
++ ucb1x00_disable(ucbstruct);
++#else
++ ucb1200_write_reg(TC35143_CONTROL_REG_B, reg_b);
++#endif
++ }
++ return 0;
++}
++
++
++static int sq_read(struct file *file, char *buffer,
++ size_t count, loff_t * ppos)
++{
++ char *buffer0 = buffer;
++ audio_stream_t *s = &input_stream;
++ int chunksize, ret = 0;
++
++ DPRINTK("audio_read: count=%d\n", count);
++
++
++ ret = audio_recording(s);
++
++ if ((collie_tc_status!=NA) && (collie_tc_status!=REC))
++ return -EPERM;
++ collie_tc_status=REC;
++
++ if (ret)
++ return ret;
++
++ /* be sure to have a full sample byte count */
++ count &= ~0x03;
++
++// DPRINTK("audio_read : Start while loop\n");
++ while (count > 0) {
++ audio_buf_t *b = s->buf;
++
++ /* Wait for a buffer to become full */
++ if (file->f_flags & O_NONBLOCK) {
++// DPRINTK("audio_read : down_trylock\n");
++ ret = -EAGAIN;
++ if (down_trylock(&b->sem))
++ break;
++ } else {
++// DPRINTK("audio_read : down_interruptible\n");
++ ret = -ERESTARTSYS;
++ if (down_interruptible(&b->sem))
++ break;
++ }
++
++ /* Grab data from the current buffer */
++ chunksize = b->size;
++ if (chunksize > count)
++ chunksize = count;
++ DPRINTK("read %d from %d\n", chunksize, s->buf_idx);
++
++ if (copy_to_user(buffer, b->start + s->fragsize - b->size, chunksize)) {
++ up(&b->sem);
++ DPRINTK("not copied to buffer \n");
++ return -EFAULT;
++ }
++ DPRINTK("copied to buffer \n");
++
++ b->size -= chunksize;
++ buffer += chunksize;
++ count -= chunksize;
++
++ if (b->size > 0) {
++ up(&b->sem);
++ break;
++ }
++
++ /* Make current buffer available for DMA again */
++ sa1100_dma_queue_buffer(COLLIE_BUZZER_DMA_CHANNEL_INPUT, (void *) b,
++ b->dma_addr, s->fragsize);
++ NEXT_BUF(s, buf);
++ }
++// DPRINTK("audio_read : End while loop\n");
++
++ if ((buffer - buffer0))
++ ret = buffer - buffer0;
++// DPRINTK("audio_read: return=%d\n", ret);
++ return ret;
++}
++
++static ssize_t sq_write(struct file *file, const char *src, size_t uLeft,
++ loff_t *ppos)
++{
++ const char *buffer0 = src;
++ audio_stream_t *s = &output_stream;
++ u_char *dest;
++ ssize_t uUsed, bUsed, bLeft, ret = 0;
++
++ DPRINTK("sq_write: uLeft=%d\n", uLeft);
++
++ if ((collie_tc_status!=NA) && (collie_tc_status!=PLAY))
++ return -EPERM;
++
++ collie_tc_status=PLAY;
++
++ if (!s->buffers && sq_allocate_buffers(s)) {
++ return -ENOMEM;
++ }
++
++
++#ifdef CONFIG_PM
++ /* Auto Power off cancel */
++// autoPowerCancel = 0;
++#endif
++
++ collie_tc_mute_off();
++ while (uLeft > 0) {
++ audio_buf_t *b = s->buf;
++
++ /* Wait for a buffer to become free */
++ if (file->f_flags & O_NONBLOCK) {
++ ret = -EAGAIN;
++ if (down_trylock(&b->sem)) {
++ break;
++ }
++ } else {
++ ret = -ERESTARTSYS;
++ if (down_interruptible(&b->sem)) {
++ break;
++ }
++ }
++
++ dest = b->start + b->size;
++ bUsed = 0;
++ bLeft = s->fragsize - b->size;
++
++ if (collie_ct_s16) {
++ uUsed = collie_ct_s16(src, uLeft, dest, &bUsed, bLeft);
++ cpu_cache_clean_invalidate_range((unsigned long)dest,
++ (unsigned long)(dest+(audio_fragsize)), 0);
++ } else {
++ return -EFAULT;
++ }
++
++ if (uUsed < 0) {
++ up(&b->sem);
++ return -EFAULT;
++ }
++ src += uUsed;
++ uLeft -= uUsed;
++ b->size += bUsed;
++
++ if (b->size < s->fragsize) {
++ up(&b->sem);
++ break;
++ }
++
++ /* Send current buffer to dma */
++ sa1100_dma_queue_buffer(COLLIE_BUZZER_DMA_CHANNEL,
++ (void *) b, b->dma_addr, b->size);
++
++ Collie_volume_set(sound.volume);
++
++ b->size = 0; /* indicate that the buffer has been sent */
++ NEXT_BUF(s, buf);
++ }
++
++ if ((src - buffer0))
++ ret = src - buffer0;
++ DPRINTK("sq_write: return=%d\n", ret);
++ return ret;
++}
++
++static unsigned int sq_poll(struct file *file,
++ struct poll_table_struct *wait)
++{
++ unsigned int mask = 0;
++ int i,ret;
++
++ DPRINTK("sq_poll(): mode=%s%s\n",
++ (file->f_mode & FMODE_READ) ? "r" : "",
++ (file->f_mode & FMODE_WRITE) ? "w" : "");
++
++ if ((file->f_mode & FMODE_READ) && (file->f_mode & FMODE_WRITE) && (collie_tc_status==NA))
++ return mask;
++
++ if ((file->f_mode & FMODE_WRITE) && (collie_tc_status!=REC)) {
++ if (!output_stream.buffers
++ && sq_allocate_buffers(&output_stream)) {
++ return -ENOMEM;
++ }
++ poll_wait(file, &output_stream.buf->sem.wait, wait);
++ }
++
++ if ((file->f_mode & FMODE_WRITE) && (collie_tc_status!=REC)) {
++ for (i = 0; i < output_stream.nbfrags; i++) {
++ if (atomic_read(&output_stream.buffers[i].sem.count) > 0)
++ mask |= POLLOUT | POLLWRNORM;
++ }
++ }
++
++ if ((file->f_mode & FMODE_READ) && (collie_tc_status!=PLAY)) {
++ ret = audio_recording(&input_stream);
++ if (ret<0) {
++ return ret;
++ }
++ poll_wait(file, &input_stream.buf->sem.wait, wait);
++ }
++
++ if ((file->f_mode & FMODE_READ) && (collie_tc_status!=PLAY)) {
++ for (i = 0; i < input_stream.nbfrags; i++) {
++ if (atomic_read(&input_stream.buffers[i].sem.count) > 0)
++ mask |= POLLIN | POLLRDNORM;
++ }
++ }
++
++ DPRINTK("sq_poll() returned mask of %s%s\n",
++ (mask & POLLIN) ? "r" : "",
++ (mask & POLLOUT) ? "w" : "");
++
++ return mask;
++}
++
++static int sq_open(struct inode *inode, struct file *file)
++{
++ DPRINTK("sq_open\n");
++
++ if (audio_refcount) {
++ DPRINTK(" sq_open EBUSY\n");
++ return -EBUSY;
++ }
++
++ switch (file->f_flags & O_ACCMODE) {
++ case O_WRONLY:
++ collie_tc_status=PLAY;
++ sa1100_dma_stop(COLLIE_BUZZER_DMA_CHANNEL_INPUT);
++ break;
++ case O_RDONLY:
++ collie_tc_status=REC;
++ break;
++ case O_RDWR:
++ collie_tc_status=NA;
++ break;
++ default:
++ DPRINTK(" sq_open EINVAL\n");
++ return -EINVAL;
++ }
++
++ MOD_INC_USE_COUNT;
++ audio_refcount++;
++
++ audio_fragsize = AUDIO_FRAGSIZE_DEFAULT;
++ audio_nbfrags = AUDIO_NBFRAGS_DEFAULT;
++ sq_clean_buffers(&input_stream);
++ sq_clean_buffers(&output_stream);
++ Collie_audio_power_on();
++ DPRINTK("Going back\n");
++ return 0;
++}
++
++static int sq_post(void)
++{
++ audio_stream_t *s = &output_stream;
++ audio_buf_t *b = s->buf;
++
++ DPRINTK("sq_post\n");
++
++ if (!s->buffers) {
++ return 0;
++ }
++
++ /* Send half-full buffers */
++ if (b->size != 0) {
++ DPRINTK("half-full_buf\n");
++
++#ifdef CONFIG_PM
++ /* Auto Power off cancel */
++// autoPowerCancel = 0;
++#endif
++
++ down(&b->sem);
++ sa1100_dma_queue_buffer(COLLIE_BUZZER_DMA_CHANNEL,
++ (void *) b, b->dma_addr, b->size);
++ b->size = 0;
++ NEXT_BUF(s, buf);
++ }
++ return 0;
++}
++
++static int sq_fsync(void)
++{
++ audio_stream_t *s = &output_stream;
++ audio_buf_t *b = s->buf;
++
++ DPRINTK("sq_fsync\n");
++
++ if (!s->buffers) {
++ return 0;
++ }
++
++ /* Send half-full buffers */
++ if (b->size != 0) {
++ DPRINTK("half-full_buf\n");
++
++#ifdef CONFIG_PM
++ /* Auto Power off cancel */
++// autoPowerCancel = 0;
++#endif
++
++ down(&b->sem);
++ sa1100_dma_queue_buffer(COLLIE_BUZZER_DMA_CHANNEL,
++ (void *) b, b->dma_addr, b->size);
++ b->size = 0;
++ NEXT_BUF(s, buf);
++ }
++
++ /*
++ * Let's wait for the last buffer we sent i.e. the one before the
++ * current buf_idx. When we acquire the semaphore, this means either:
++ * - DMA on the buffer completed or
++ * - the buffer was already free thus nothing else to sync.
++ */
++ b = s->buffers + ((s->nbfrags + s->buf_idx - 1) % s->nbfrags);
++ if (down_interruptible(&b->sem)) {
++ return -EINTR;
++ }
++ up(&b->sem);
++ return 0;
++}
++
++static int sq_release(struct inode *inode, struct file *file)
++{
++ DPRINTK("speaker_sq_release\n");
++
++ switch (collie_tc_status) {
++
++ case REC:
++ sa1100_dma_set_spin(COLLIE_BUZZER_DMA_CHANNEL,0,0);
++ sq_clean_buffers(&input_stream);
++ Collie_recording_off();
++ break;
++ case PLAY:
++ sq_fsync();
++ sq_clean_buffers(&output_stream);
++ break;
++ default:
++ break;
++ }
++ audio_refcount = 0;
++ collie_tc_status=NA;
++ sa1100_dma_stop(COLLIE_BUZZER_DMA_CHANNEL);
++ Collie_audio_power_off();
++ sa1100_dma_stop(COLLIE_BUZZER_DMA_CHANNEL_INPUT);
++ MOD_DEC_USE_COUNT;
++ return 0;
++}
++
++/* Buzzer compatibility */
++#include "colliebuzzer.h"
++
++
++static int sq_ioctl(struct inode *inode, struct file *file, u_int cmd,
++ u_long arg)
++{
++ u_long fmt;
++ int data,ret;
++// audio_buf_info abinfo;
++
++ DPRINTK("Got ioctl %ld \n",cmd);
++
++ switch (cmd) {
++ case 22144:
++ sq_write_buzzer(arg);
++ sq_fsync();
++ return 0;
++ case SNDCTL_DSP_RESET:
++ switch (collie_tc_status) {
++ case REC:
++ sq_clean_buffers(&input_stream);
++ case PLAY:
++ sq_fsync();
++ sq_clean_buffers(&output_stream);
++ default:
++ break;
++ }
++ return 0;
++ case SNDCTL_DSP_POST:
++ sq_post();
++ return 0;
++ case SNDCTL_DSP_SYNC:
++ sq_fsync();
++ return 0;
++
++ /* ++TeSche: before changing any of these it's
++ * probably wise to wait until sound playing has
++ * settled down. */
++ case SNDCTL_DSP_SPEED:
++// sq_fsync(file, file->f_dentry);
++ IOCTL_IN(arg, data);
++ return IOCTL_OUT(arg, sound_set_speed(data));
++
++ case SOUND_PCM_READ_RATE:
++ return 0;
++
++ case SNDCTL_DSP_STEREO:
++// sq_fsync(file, file->f_dentry);
++ IOCTL_IN(arg, data);
++ return IOCTL_OUT(arg, 0);
++ case SNDCTL_DSP_CHANNELS:
++// sq_fsync(file, file->f_dentry);
++ IOCTL_IN(arg, data);
++ return IOCTL_OUT(arg, 1);
++ case SNDCTL_DSP_SETFMT:
++// sq_fsync(file, file->f_dentry);
++ IOCTL_IN(arg, data);
++ return IOCTL_OUT(arg, CollieSetFormat(data));
++ case SNDCTL_DSP_GETFMTS:
++ fmt = AFMT_S16_LE;
++ return IOCTL_OUT(arg, fmt);
++ case SNDCTL_DSP_GETBLKSIZE:
++ return IOCTL_OUT(arg, audio_fragsize);
++ case SNDCTL_DSP_SUBDIVIDE:
++ break;
++ case SNDCTL_DSP_SETFRAGMENT:
++/* if (output_stream.buffers) {
++ return -EBUSY;
++ }
++ get_user(val, (long *) arg);
++ audio_fragsize = 1 << (val & 0xFFFF);
++ if (audio_fragsize < 256)
++ audio_fragsize = 256;
++ if (audio_fragsize > 16384)
++ audio_fragsize = 16384;
++ audio_nbfrags = (val >> 16) & 0x7FFF;
++ if (audio_nbfrags < 2)
++ audio_nbfrags = 2;
++ if (audio_nbfrags * audio_fragsize > 128 * 1024)
++ audio_nbfrags = 128 * 1024 / audio_fragsize;
++ if (sq_allocate_buffers(&output_stream)) {
++ return -ENOMEM;
++ }
++ return 0;
++ case SNDCTL_DSP_GETOSPACE:
++ abinfo.fragsize = audio_fragsize;
++ abinfo.fragstotal = audio_nbfrags;
++ abinfo.fragments = lastsent-output_stream.buf_idx;
++ if (abinfo.fragments<0)
++ abinfo.fragments += abinfo.fragstotal;
++ abinfo.bytes = abinfo.fragments*abinfo.fragsize;
++ return copy_to_user((void *)arg, &abinfo, sizeof(abinfo)) ? -EFAULT : 0;
++*/
++
++ case SNDCTL_DSP_GETOSPACE:
++ {
++ audio_stream_t *s = &output_stream;
++ audio_buf_info *inf = (audio_buf_info *) arg;
++ int err = verify_area(VERIFY_WRITE, inf, sizeof(*inf));
++ int i;
++ int frags = 0, bytes = 0;
++
++ if (err)
++ return err;
++ if (output_stream.buffers) {
++ for (i = 0; i < s->nbfrags; i++) {
++ if (atomic_read(&s->buffers[i].sem.count) > 0) {
++ if (s->buffers[i].size == 0) frags++;
++ bytes += s->fragsize - s->buffers[i].size;
++ }
++ }
++ put_user(s->nbfrags, &inf->fragstotal);
++ put_user(s->fragsize, &inf->fragsize);
++ } else {
++ frags=audio_nbfrags;
++ bytes=frags*audio_fragsize;
++ put_user(frags, &inf->fragstotal);
++ put_user(audio_fragsize, &inf->fragsize);
++ }
++ put_user(frags, &inf->fragments);
++ return put_user(bytes, &inf->bytes);
++ }
++
++ case SNDCTL_DSP_GETISPACE:
++ {
++ audio_stream_t *s = &input_stream;
++ audio_buf_info *inf = (audio_buf_info *) arg;
++ int err = verify_area(VERIFY_WRITE, inf, sizeof(*inf));
++ int i;
++ int frags = 0, bytes = 0;
++
++ if (err)
++ return err;
++ if (input_stream.buffers)
++ for (i = 0; i < s->nbfrags; i++) {
++ if (atomic_read(&s->buffers[i].sem.count) > 0) {
++ if (s->buffers[i].size == s->fragsize) frags++;
++ bytes += s->buffers[i].size;
++ }
++ }
++ else {
++ frags=0;
++ bytes=0;
++ }
++ put_user(frags, &inf->fragments);
++ put_user(s->nbfrags, &inf->fragstotal);
++ put_user(s->fragsize, &inf->fragsize);
++ return put_user(bytes, &inf->bytes);
++ }
++
++ default:
++ ret = mixer_ioctl(inode, file, cmd, arg);
++ DPRINTK("Returning after mixer_ioctl\n");
++ return ret;
++ }
++ return -EINVAL;
++}
++
++static struct file_operations sq_fops =
++{
++ llseek: sound_lseek,
++ write: sq_write,
++ read: sq_read,
++ poll: sq_poll,
++ ioctl: sq_ioctl,
++ open: sq_open,
++ release: sq_release,
++};
++
++
++static void __init sq_init(void)
++{
++ sq_unit = register_sound_dsp(&sq_fops, -1);
++ if (sq_unit < 0) {
++ return;
++ }
++
++ sound.format = AFMT_S16_LE;
++ sound.stereo = 0;
++ sound.speed = 22050;
++
++ CollieSetFormat(sound.format);
++ Collie_audio_power_off();
++ input_stream.buf=input_stream.buffers=output_stream.buf=output_stream.buffers=NULL;
++}
++
++
++/*** Common stuff ********************************************************/
++
++static long long sound_lseek(struct file *file, long long offset, int orig)
++{
++ return -ESPIPE;
++}
++
++/*** Power Management ****************************************************/
++
++#ifdef CONFIG_PM
++static int collie_sound_pm_callback(struct pm_dev *pm_dev,
++ pm_request_t req, void *data)
++{
++ switch (req) {
++ case PM_SUSPEND:
++ if (audio_refcount == 1) {
++ sa1100_dma_sleep((dmach_t)COLLIE_BUZZER_DMA_CHANNEL);
++ sa1100_dma_sleep((dmach_t)COLLIE_BUZZER_DMA_CHANNEL_INPUT);
++ Collie_audio_power_off();
++ } else {
++ sa1100_dma_sleep((dmach_t)COLLIE_BUZZER_DMA_CHANNEL);
++ sa1100_dma_sleep((dmach_t)COLLIE_BUZZER_DMA_CHANNEL_INPUT);
++ }
++ break;
++ case PM_RESUME:
++ Collie_sound_hard_init();
++// Collie_audio_power_off();
++ if (audio_refcount == 1) {
++ Collie_audio_power_on();
++ sa1100_dma_wakeup((dmach_t)COLLIE_BUZZER_DMA_CHANNEL);
++ sa1100_dma_wakeup((dmach_t)COLLIE_BUZZER_DMA_CHANNEL_INPUT);
++ } else {
++ sa1100_dma_wakeup((dmach_t)COLLIE_BUZZER_DMA_CHANNEL);
++ sa1100_dma_wakeup((dmach_t)COLLIE_BUZZER_DMA_CHANNEL_INPUT);
++ }
++ break;
++ }
++ return 0;
++}
++#endif
++
++/*** Config & Setup ******************************************************/
++
++int __init Collie_sound_init(void)
++{
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,19))
++ ucbstruct = ucb1x00_get();
++#endif
++ if (!CollieIrqInit()) {
++ printk("Sound driver: Interrupt initialization failed\n");
++ return -1;
++ }
++ Ser4MCDR0 = 0; /* ucb1200_sa1100_set_mcdr0(0); */
++
++ Collie_sound_hard_init();
++
++ /* Set default settings. */
++ sq_init();
++ /* Set up /dev/mixer. */
++ mixer_init();
++#ifdef MODULE
++ irq_installed = 1;
++#endif
++ printk("Collie tc35143af Sound Driver Installed\n");
++#ifdef CONFIG_PM
++ collie_sound_pm_dev = pm_register(PM_SYS_DEV, 0,
++ collie_sound_pm_callback);
++#endif
++ return 0;
++}
++
++#ifdef MODULE
++static int collie_tc35143_init_module(void)
++{
++ Collie_sound_init();
++ sq_allocate_buffers(&output_stream);
++ sq_allocate_buffers(&input_stream);
++ return 0;
++}
++
++static void collie_tc35143_cleanup_module(void)
++{
++#ifdef CONFIG_PM
++ pm_unregister(collie_sound_pm_dev);
++#endif
++ if (irq_installed) {
++ sa1100_free_dma(COLLIE_BUZZER_DMA_CHANNEL);
++ sa1100_free_dma(COLLIE_BUZZER_DMA_CHANNEL_INPUT);
++ }
++
++ sq_release_buffers(&output_stream);
++ sq_release_buffers(&input_stream);
++ unregister_sound_mixer(mixer_unit);
++ unregister_sound_special(state_unit);
++ unregister_sound_dsp(sq_unit);
++ printk("collie_tc35143af has to go now, see you later!\n");
++}
++
++module_init(collie_tc35143_init_module);
++module_exit(collie_tc35143_cleanup_module);
++MODULE_DESCRIPTION("Collie tc35143af 16bit sound driver");
++MODULE_AUTHOR("SHARP");
++MODULE_LICENSE("GPL");
++#endif /* MODULE */
++
+diff -Nuar linux-2.4.18/drivers/sound/Makefile linux-2.4.18p/drivers/sound/Makefile
+--- linux-2.4.18/drivers/sound/Makefile 2003-05-13 11:18:36.000000000 +0200
++++ linux-2.4.18p/drivers/sound/Makefile 2004-10-12 23:11:29.000000000 +0200
+@@ -11,7 +11,7 @@
+ msnd.o opl3.o sb_common.o sequencer_syms.o \
+ sound_core.o sound_syms.o uart401.o \
+ nm256_audio.o ac97.o ac97_codec.o aci.o \
+- sa1100-audio.o pxa-audio.o pxa-ac97.o
++ sa1100-audio.o pxa-audio.o pxa-ac97.o collie_ssp.o
+
+ # Each configuration option enables a list of files.
+
+@@ -78,7 +78,7 @@
+ obj-$(CONFIG_SOUND_SA1111_UDA1341) += sa1111-uda1341.o
+ obj-$(CONFIG_SOUND_SA1100SSP) += sa1100ssp.o
+ obj-$(CONFIG_SOUND_COLLIE_SSP) += collie_ssp.o
+-obj-$(CONFIG_SOUND_COLLIE_TC35143) += collie-tc35143.o
++obj-$(CONFIG_SOUND_COLLIE_TC35143) += collie_tc35143af.o
+ obj-$(CONFIG_SOUND_PXA_AC97)+= pxa-ac97.o pxa-audio.o ac97_codec.o
+ obj-$(CONFIG_SOUND_EMU10K1) += ac97_codec.o
+ obj-$(CONFIG_SOUND_RME96XX) += rme96xx.o
diff --git a/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/unb0rk-apm.patch b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/unb0rk-apm.patch
new file mode 100644
index 0000000000..5a1d4ec8dc
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/unb0rk-apm.patch
@@ -0,0 +1,99 @@
+--- linux/arch/arm/mach-sa1100/collie_apm.c 2005-06-25 23:37:32.000000000 +0200
++++ linux/arch/arm/mach-sa1100/collie_apm.c 2005-06-27 20:42:00.000000000 +0200
+@@ -1228,10 +1228,11 @@
+ switch (event) {
+ case APM_SYS_STANDBY:
+ case APM_USER_STANDBY:
+- if (send_event(event)) {
+- queue_event(event, NULL);
+- if (standbys_pending <= 0)
++ queue_event(event, NULL);
++ if (standbys_pending <= 0) {
++ if (send_event(event)) {
+ standby();
++ }
+ }
+ break;
+
+@@ -1257,10 +1258,10 @@
+ */
+ if (waiting_for_resume)
+ return;
+- if (send_event(event)) {
+- queue_event(event, NULL);
+- waiting_for_resume = 1;
+- if (suspends_pending <= 0)
++ queue_event(event, NULL);
++ waiting_for_resume = 1;
++ if (suspends_pending <= 0)
++ if (send_event(event)) {
+ (void) suspend();
+ }
+ break;
+@@ -1468,25 +1469,32 @@
+ as->standbys_read--;
+ as->standbys_pending--;
+ standbys_pending--;
+- } else if (!send_event(APM_USER_STANDBY))
+- return -EAGAIN;
+- else
++ } else {
+ queue_event(APM_USER_STANDBY, as);
+- if (standbys_pending <= 0)
+- standby();
++ }
++ if (standbys_pending <= 0) {
++ if (send_event(APM_USER_STANDBY)) {
++ standby();
++ } else {
++ return -EAGAIN;
++ }
++ }
+ break;
+ case APM_IOC_SUSPEND:
+ if (as->suspends_read > 0) {
+ as->suspends_read--;
+ as->suspends_pending--;
+ suspends_pending--;
+- } else if (!send_event(APM_USER_SUSPEND))
+- return -EAGAIN;
+- else
++ } else {
+ queue_event(APM_USER_SUSPEND, as);
++ }
+ if (suspends_pending <= 0) {
+- if (suspend() != APM_SUCCESS)
+- return -EIO;
++ if (send_event(APM_USER_SUSPEND)) {
++ if (suspend() != APM_SUCCESS)
++ return -EIO;
++ } else {
++ return -EAGAIN;
++ }
+ } else {
+ as->suspend_wait = 1;
+ add_wait_queue(&apm_suspend_waitqueue, &wait);
+@@ -1637,13 +1645,19 @@
+ lock_kernel();
+ if (as->standbys_pending > 0) {
+ standbys_pending -= as->standbys_pending;
+- if (standbys_pending <= 0)
+- standby();
++ if (standbys_pending <= 0) {
++ if (send_event(APM_USER_STANDBY)) {
++ standby();
++ }
++ }
+ }
+ if (as->suspends_pending > 0) {
+ suspends_pending -= as->suspends_pending;
+- if (suspends_pending <= 0)
+- (void) suspend();
++ if (suspends_pending <= 0) {
++ if (send_event(APM_USER_SUSPEND)) {
++ (void) suspend();
++ }
++ }
+ }
+ if (user_list == as)
+ user_list = as->next;
diff --git a/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/unb0rk-rightarrow.patch b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/unb0rk-rightarrow.patch
new file mode 100644
index 0000000000..42547ca27a
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-sa-2.4.18-rmk7-pxa3-embedix20030509/unb0rk-rightarrow.patch
@@ -0,0 +1,28 @@
+--- linux/arch/arm/mach-sa1100/collie_apm.c.orig 2005-06-25 22:49:51.842092545 +0200
++++ linux/arch/arm/mach-sa1100/collie_apm.c 2005-06-25 22:49:56.931171657 +0200
+@@ -57,6 +57,7 @@
+ #include <asm/arch/collie.h>
+ #include <linux/ioctl.h>
+ #include <asm/sharp_char.h>
++#include <asm/arch/keyboard_collie.h>
+ #endif // CONFIG_SA1100_COLLIE
+ #include <asm/arch/power.h>
+
+@@ -89,6 +90,8 @@
+ int collie_get_on_mode;
+ int idleCancel = 0;
+
++extern kbd_keyinfo sharppda_kbdstate[(NR_KEYCODES+1)];
++
+ #endif // CONFIG_SA1100_COLLIE
+
+
+@@ -584,7 +587,7 @@
+
+ if (irq == IRQ_GPIO_ON_KEY) { /* suspend */
+ //DPRINTK("irq=%d count=%d collie_suspend_request%d\n",irq, count, collie_suspend_request);
+- if ( GPLR & GPIO_ON_KEY ) {
++ if ( GPLR & GPIO_ON_KEY || (!sharppda_kbdstate[1].in)) { //1 is the hard keycode for Cancel. GPIO_ON_KEY is active for all 4 keys in that row (why? no idea.)
+ /* release */
+ count = 0;
+ } else {
diff --git a/recipes/obsolete/linux/openzaurus-sa_2.4.18-rmk7-pxa3-embedix20030509.bb b/recipes/obsolete/linux/openzaurus-sa_2.4.18-rmk7-pxa3-embedix20030509.bb
new file mode 100644
index 0000000000..295aebe4ef
--- /dev/null
+++ b/recipes/obsolete/linux/openzaurus-sa_2.4.18-rmk7-pxa3-embedix20030509.bb
@@ -0,0 +1,100 @@
+DESCRIPTION = "Linux kernel for OpenZaurus StrongArm processor based devices."
+SECTION = "kernel"
+PV = "2.4.18-rmk7-pxa3-embedix"
+LICENSE = "GPLv2"
+KV = "2.4.18"
+RMKV = "7"
+PXAV = "3"
+SHARPV = "20030509"
+PR = "r23"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/openzaurus-sa-${KV}-rmk${RMKV}-pxa${PXAV}-embedix${SHARPV}"
+
+SRC_URI = "http://www.openzaurus.org/mirror/linux-sl5500-${SHARPV}-rom3_10.tar.bz2;name=kernel \
+ file://cacko.patch \
+ file://unb0rk-rightarrow.patch \
+ file://unb0rk-apm.patch \
+ file://battery.patch \
+ file://bluetooth-2.4.18-mh15.patch \
+ file://iw_handlers.w13-5.diff \
+ file://iw_handlers.w14-5.diff \
+ file://iw240_we15-6.diff \
+ file://iw249_we16-6.diff \
+ file://iw249_we17-13.diff \
+ file://iw240_we18-5.diff \
+ file://idecs.patch \
+ file://logo.patch \
+ file://initsh.patch \
+ file://keymap-more-sane.patch \
+ file://mkdep.patch \
+ file://disable-pcmcia-probe.patch \
+ file://linux-2.4.18-list_move.patch \
+ http://www.openswan.org/download/old/openswan-2.2.0-kernel-2.4-klips.patch.gz;name=patch \
+ file://1764-1.patch \
+ file://module_licence.patch \
+ file://ir240_sys_max_tx-2.diff \
+ file://ir241_qos_param-2.diff \
+ file://defconfig-${MACHINE} \
+ "
+
+# that patch allow to use buzzer as sound device but it removes alarms,
+# touchclicks etc so it is removed until be fixed
+# file://sound-2.4.18r2.patch
+
+S = "${WORKDIR}/linux"
+
+inherit kernel
+
+#
+# Compensate for sucky bootloader on all Sharp Zaurus models
+#
+FILES_kernel-image = ""
+ALLOW_EMPTY = "1"
+
+KERNEL_CCSUFFIX = "-2.95"
+KERNEL_LDSUFFIX = "-2.11.2"
+COMPATIBLE_HOST = "arm.*-linux"
+
+# For these old 2.4 kernels we override in sharprom-compatible.conf
+#COMPATIBLE_MACHINE = "collie"
+COMPATIBLE_MACHINE = "none"
+
+EXTRA_OEMAKE = " EMBEDIXRELEASE=-${DISTRO_VERSION}"
+
+module_conf_usbdmonitor = "alias usbd0 usbdmonitor"
+module_conf_sa1100_bi = "below sa1100_bi net_fd usbdcore "
+module_autoload_sa1100_bi = "sa1100_bi"
+module_autoload_collie_ssp = "collie_ssp"
+module_autoload_collie_tc35143af = "collie_tc35143af"
+#
+# FIXME: Use configuration system
+#
+export mem = '${@bb.data.getVar("COLLIE_MEMORY_SIZE",d,1) or "32"}'
+export rd = '${@bb.data.getVar("COLLIE_RAMDISK_SIZE",d,1) or "32"}'
+export CMDLINE = "${CMDLINE_CONSOLE} root=/dev/mtdblock4 rootfstype=jffs2 jffs2_orphaned_inodes=delete"
+
+do_configure_prepend() {
+ install -m 0644 ${WORKDIR}/defconfig-${MACHINE} ${S}/.config || die "No default configuration for ${MACHINE} available."
+
+ mempos=`echo "obase=16; $mem * 1024 * 1024" | bc`
+ rdsize=`echo "$rd * 1024" | bc`
+ total=`expr $mem + $rd`
+ addr=`echo "obase=16; ibase=16; C0000000 + $mempos" | bc`
+ if [ "$rd" == "0" ]
+ then
+ echo "# CONFIG_MTD_MTDRAM_SA1100 is not set" >> ${S}/.config
+ else
+ echo "CONFIG_MTD_MTDRAM_SA1100=y" >> ${S}/.config
+ echo "CONFIG_MTDRAM_TOTAL_SIZE=$rdsize" >> ${S}/.config
+ echo "CONFIG_MTDRAM_ERASE_SIZE=1" >> ${S}/.config
+ echo "CONFIG_MTDRAM_ABS_POS=$addr" >> ${S}/.config
+ fi
+ echo "CONFIG_CMDLINE=\"$CMDLINE mem=${mem}M\"" >> ${S}/.config
+}
+
+KERNEL_IMAGE_BASE_NAME = "${KERNEL_IMAGETYPE}-${MACHINE}-${COLLIE_MEMORY_SIZE}-${COLLIE_RAMDISK_SIZE}-${DATETIME}.bin"
+KERNEL_IMAGE_SYMLINK_NAME = "${KERNEL_IMAGETYPE}-${MACHINE}-${COLLIE_MEMORY_SIZE}-${COLLIE_RAMDISK_SIZE}.bin"
+
+SRC_URI[kernel.md5sum] = "52fb654cfd45060b0c77b67ad364df83"
+SRC_URI[kernel.sha256sum] = "be21ce66246a89b2c905fb1ad690440c15b5d263c0247b2285d34cdd6311d320"
+SRC_URI[patch.md5sum] = "5c54040bba6fea2bfb47df01056e953f"
+SRC_URI[patch.sha256sum] = "d35213dc854f1e1a08512154c7a92fb94d9f0506cc5107f8b2f248412679fb53"
diff --git a/recipes/obsolete/linux/poodle-kernel-2.4-embedix.bb b/recipes/obsolete/linux/poodle-kernel-2.4-embedix.bb
new file mode 100644
index 0000000000..f285249ada
--- /dev/null
+++ b/recipes/obsolete/linux/poodle-kernel-2.4-embedix.bb
@@ -0,0 +1,4 @@
+MACHINE = "poodle"
+COMPATIBLE_HOST = "arm.*-linux"
+
+require openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc
diff --git a/recipes/obsolete/linux/poodle-kernels-2.4-embedix.bb b/recipes/obsolete/linux/poodle-kernels-2.4-embedix.bb
new file mode 100644
index 0000000000..256ef7125c
--- /dev/null
+++ b/recipes/obsolete/linux/poodle-kernels-2.4-embedix.bb
@@ -0,0 +1,7 @@
+COMPATIBLE_HOST = "arm.*-linux"
+
+# For these old 2.4 kernels we override in sharprom-compatible.conf
+#COMPATIBLE_MACHINE = "(poodle|poodle255)"
+COMPATIBLE_MACHINE = "none"
+
+DEPENDS = "poodle-kernel-2.4-embedix poodle255-kernel-2.4-embedix"
diff --git a/recipes/obsolete/linux/poodle255-kernel-2.4-embedix.bb b/recipes/obsolete/linux/poodle255-kernel-2.4-embedix.bb
new file mode 100644
index 0000000000..f3044f4e67
--- /dev/null
+++ b/recipes/obsolete/linux/poodle255-kernel-2.4-embedix.bb
@@ -0,0 +1,4 @@
+MACHINE = "poodle255"
+COMPATIBLE_HOST = "arm.*-linux"
+require openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc
+
diff --git a/recipes/obsolete/linux/shepherd-kernel-2.4-embedix.bb b/recipes/obsolete/linux/shepherd-kernel-2.4-embedix.bb
new file mode 100644
index 0000000000..c52fb4767d
--- /dev/null
+++ b/recipes/obsolete/linux/shepherd-kernel-2.4-embedix.bb
@@ -0,0 +1,5 @@
+MACHINE = "shepherd"
+COMPATIBLE_HOST = "arm.*-linux"
+
+require openzaurus-pxa_2.4.18-rmk7-pxa3-embedix20031107.inc
+